diff options
Diffstat (limited to 'firmware/asm/mips')
-rw-r--r-- | firmware/asm/mips/memcpy.S | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/firmware/asm/mips/memcpy.S b/firmware/asm/mips/memcpy.S index edbf5ac5eb..ec1625bb4f 100644 --- a/firmware/asm/mips/memcpy.S +++ b/firmware/asm/mips/memcpy.S | |||
@@ -43,8 +43,16 @@ | |||
43 | 43 | ||
44 | .global memcpy | 44 | .global memcpy |
45 | .type memcpy, %function | 45 | .type memcpy, %function |
46 | .global mempcpy | ||
47 | .type mempcpy, %function | ||
46 | 48 | ||
47 | .set noreorder | 49 | .set noreorder |
50 | mempcpy: | ||
51 | slti t0, a2, 8 # Less than 8? | ||
52 | bne t0, zero, last8 | ||
53 | addu v0, a0, a2 # exit value = s1 + n | ||
54 | b 1f | ||
55 | xor t0, a1, a0 # Find a0/a1 displacement (fill delay) | ||
48 | 56 | ||
49 | memcpy: | 57 | memcpy: |
50 | slti t0, a2, 8 # Less than 8? | 58 | slti t0, a2, 8 # Less than 8? |
@@ -52,7 +60,8 @@ memcpy: | |||
52 | move v0, a0 # Setup exit value before too late | 60 | move v0, a0 # Setup exit value before too late |
53 | 61 | ||
54 | xor t0, a1, a0 # Find a0/a1 displacement | 62 | xor t0, a1, a0 # Find a0/a1 displacement |
55 | andi t0, 0x3 | 63 | |
64 | 1: andi t0, 0x3 | ||
56 | bne t0, zero, shift # Go handle the unaligned case | 65 | bne t0, zero, shift # Go handle the unaligned case |
57 | subu t1, zero, a1 | 66 | subu t1, zero, a1 |
58 | andi t1, 0x3 # a0/a1 are aligned, but are we | 67 | andi t1, 0x3 # a0/a1 are aligned, but are we |