diff options
Diffstat (limited to 'firmware/asm/mips/memcpy.S')
-rw-r--r-- | firmware/asm/mips/memcpy.S | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/firmware/asm/mips/memcpy.S b/firmware/asm/mips/memcpy.S index 2e7f245c69..edbf5ac5eb 100644 --- a/firmware/asm/mips/memcpy.S +++ b/firmware/asm/mips/memcpy.S | |||
@@ -63,13 +63,13 @@ memcpy: | |||
63 | SWHI t0, 0(a0) | 63 | SWHI t0, 0(a0) |
64 | addu a0, t1 | 64 | addu a0, t1 |
65 | 65 | ||
66 | chk8w: | 66 | chk8w: |
67 | andi t0, a2, 0x1f # 32 or more bytes left? | 67 | andi t0, a2, 0x1f # 32 or more bytes left? |
68 | beq t0, a2, chk1w | 68 | beq t0, a2, chk1w |
69 | subu a3, a2, t0 # Yes | 69 | subu a3, a2, t0 # Yes |
70 | addu a3, a1 # a3 = end address of loop | 70 | addu a3, a1 # a3 = end address of loop |
71 | move a2, t0 # a2 = what will be left after loop | 71 | move a2, t0 # a2 = what will be left after loop |
72 | lop8w: | 72 | lop8w: |
73 | lw t0, 0(a1) # Loop taking 8 words at a time | 73 | lw t0, 0(a1) # Loop taking 8 words at a time |
74 | lw t1, 4(a1) | 74 | lw t1, 4(a1) |
75 | lw t2, 8(a1) | 75 | lw t2, 8(a1) |
@@ -90,34 +90,34 @@ lop8w: | |||
90 | bne a1, a3, lop8w | 90 | bne a1, a3, lop8w |
91 | sw t7, -4(a0) | 91 | sw t7, -4(a0) |
92 | 92 | ||
93 | chk1w: | 93 | chk1w: |
94 | andi t0, a2, 0x3 # 4 or more bytes left? | 94 | andi t0, a2, 0x3 # 4 or more bytes left? |
95 | beq t0, a2, last8 | 95 | beq t0, a2, last8 |
96 | subu a3, a2, t0 # Yes, handle them one word at a time | 96 | subu a3, a2, t0 # Yes, handle them one word at a time |
97 | addu a3, a1 # a3 again end address | 97 | addu a3, a1 # a3 again end address |
98 | move a2, t0 | 98 | move a2, t0 |
99 | lop1w: | 99 | lop1w: |
100 | lw t0, 0(a1) | 100 | lw t0, 0(a1) |
101 | addiu a0, 4 | 101 | addiu a0, 4 |
102 | addiu a1, 4 | 102 | addiu a1, 4 |
103 | bne a1, a3, lop1w | 103 | bne a1, a3, lop1w |
104 | sw t0, -4(a0) | 104 | sw t0, -4(a0) |
105 | 105 | ||
106 | last8: | 106 | last8: |
107 | blez a2, lst8e # Handle last 8 bytes, one at a time | 107 | blez a2, lst8e # Handle last 8 bytes, one at a time |
108 | addu a3, a2, a1 | 108 | addu a3, a2, a1 |
109 | lst8l: | 109 | lst8l: |
110 | lb t0, 0(a1) | 110 | lb t0, 0(a1) |
111 | addiu a0, 1 | 111 | addiu a0, 1 |
112 | addiu a1, 1 | 112 | addiu a1, 1 |
113 | bne a1, a3, lst8l | 113 | bne a1, a3, lst8l |
114 | sb t0, -1(a0) | 114 | sb t0, -1(a0) |
115 | lst8e: | 115 | lst8e: |
116 | jr ra # Bye, bye | 116 | jr ra # Bye, bye |
117 | nop | 117 | nop |
118 | 118 | ||
119 | shift: | 119 | shift: |
120 | subu a3, zero, a0 # Src and Dest unaligned | 120 | subu a3, zero, a0 # Src and Dest unaligned |
121 | andi a3, 0x3 # (unoptimized case...) | 121 | andi a3, 0x3 # (unoptimized case...) |
122 | beq a3, zero, shft1 | 122 | beq a3, zero, shft1 |
123 | subu a2, a3 # a2 = bytes left | 123 | subu a2, a3 # a2 = bytes left |
@@ -126,11 +126,11 @@ shift: | |||
126 | addu a1, a3 | 126 | addu a1, a3 |
127 | SWHI t0, 0(a0) | 127 | SWHI t0, 0(a0) |
128 | addu a0, a3 | 128 | addu a0, a3 |
129 | shft1: | 129 | shft1: |
130 | andi t0, a2, 0x3 | 130 | andi t0, a2, 0x3 |
131 | subu a3, a2, t0 | 131 | subu a3, a2, t0 |
132 | addu a3, a1 | 132 | addu a3, a1 |
133 | shfth: | 133 | shfth: |
134 | LWHI t1, 0(a1) # Limp through, word by word | 134 | LWHI t1, 0(a1) # Limp through, word by word |
135 | LWLO t1, 3(a1) | 135 | LWLO t1, 3(a1) |
136 | addiu a0, 4 | 136 | addiu a0, 4 |