diff options
Diffstat (limited to 'firmware/target/arm/memcpy-arm.S')
-rw-r--r-- | firmware/target/arm/memcpy-arm.S | 244 |
1 files changed, 122 insertions, 122 deletions
diff --git a/firmware/target/arm/memcpy-arm.S b/firmware/target/arm/memcpy-arm.S index 38e0076703..d17d659a28 100644 --- a/firmware/target/arm/memcpy-arm.S +++ b/firmware/target/arm/memcpy-arm.S | |||
@@ -44,133 +44,133 @@ | |||
44 | .type memcpy,%function | 44 | .type memcpy,%function |
45 | 45 | ||
46 | memcpy: | 46 | memcpy: |
47 | stmfd sp!, {r0, r4, lr} | 47 | stmfd sp!, {r0, r4, lr} |
48 | 48 | ||
49 | subs r2, r2, #4 | 49 | subs r2, r2, #4 |
50 | blt 8f | 50 | blt 8f |
51 | ands ip, r0, #3 | 51 | ands ip, r0, #3 |
52 | bne 9f | 52 | bne 9f |
53 | ands ip, r1, #3 | 53 | ands ip, r1, #3 |
54 | bne 10f | 54 | bne 10f |
55 | 55 | ||
56 | 1: subs r2, r2, #(28) | 56 | 1: subs r2, r2, #(28) |
57 | stmfd sp!, {r5 - r8} | 57 | stmfd sp!, {r5 - r8} |
58 | blt 5f | 58 | blt 5f |
59 | 59 | ||
60 | 2: | 60 | 2: |
61 | 3: | 61 | 3: |
62 | 4: ldmia r1!, {r3, r4, r5, r6, r7, r8, ip, lr} | 62 | 4: ldmia r1!, {r3, r4, r5, r6, r7, r8, ip, lr} |
63 | subs r2, r2, #32 | 63 | subs r2, r2, #32 |
64 | stmia r0!, {r3, r4, r5, r6, r7, r8, ip, lr} | 64 | stmia r0!, {r3, r4, r5, r6, r7, r8, ip, lr} |
65 | bge 3b | 65 | bge 3b |
66 | 66 | ||
67 | 5: ands ip, r2, #28 | 67 | 5: ands ip, r2, #28 |
68 | rsb ip, ip, #32 | 68 | rsb ip, ip, #32 |
69 | addne pc, pc, ip @ C is always clear here | 69 | addne pc, pc, ip @ C is always clear here |
70 | b 7f | 70 | b 7f |
71 | 6: nop | 71 | 6: nop |
72 | ldr r3, [r1], #4 | 72 | ldr r3, [r1], #4 |
73 | ldr r4, [r1], #4 | 73 | ldr r4, [r1], #4 |
74 | ldr r5, [r1], #4 | 74 | ldr r5, [r1], #4 |
75 | ldr r6, [r1], #4 | 75 | ldr r6, [r1], #4 |
76 | ldr r7, [r1], #4 | 76 | ldr r7, [r1], #4 |
77 | ldr r8, [r1], #4 | 77 | ldr r8, [r1], #4 |
78 | ldr lr, [r1], #4 | 78 | ldr lr, [r1], #4 |
79 | 79 | ||
80 | add pc, pc, ip | 80 | add pc, pc, ip |
81 | nop | 81 | nop |
82 | nop | 82 | nop |
83 | str r3, [r0], #4 | 83 | str r3, [r0], #4 |
84 | str r4, [r0], #4 | 84 | str r4, [r0], #4 |
85 | str r5, [r0], #4 | 85 | str r5, [r0], #4 |
86 | str r6, [r0], #4 | 86 | str r6, [r0], #4 |
87 | str r7, [r0], #4 | 87 | str r7, [r0], #4 |
88 | str r8, [r0], #4 | 88 | str r8, [r0], #4 |
89 | str lr, [r0], #4 | 89 | str lr, [r0], #4 |
90 | 90 | ||
91 | 7: ldmfd sp!, {r5 - r8} | 91 | 7: ldmfd sp!, {r5 - r8} |
92 | 92 | ||
93 | 8: movs r2, r2, lsl #31 | 93 | 8: movs r2, r2, lsl #31 |
94 | ldrneb r3, [r1], #1 | 94 | ldrneb r3, [r1], #1 |
95 | ldrcsb r4, [r1], #1 | 95 | ldrcsb r4, [r1], #1 |
96 | ldrcsb ip, [r1] | 96 | ldrcsb ip, [r1] |
97 | strneb r3, [r0], #1 | 97 | strneb r3, [r0], #1 |
98 | strcsb r4, [r0], #1 | 98 | strcsb r4, [r0], #1 |
99 | strcsb ip, [r0] | 99 | strcsb ip, [r0] |
100 | 100 | ||
101 | ldmfd sp!, {r0, r4, pc} | 101 | ldmfd sp!, {r0, r4, pc} |
102 | 102 | ||
103 | 9: rsb ip, ip, #4 | 103 | 9: rsb ip, ip, #4 |
104 | cmp ip, #2 | 104 | cmp ip, #2 |
105 | ldrgtb r3, [r1], #1 | 105 | ldrgtb r3, [r1], #1 |
106 | ldrgeb r4, [r1], #1 | 106 | ldrgeb r4, [r1], #1 |
107 | ldrb lr, [r1], #1 | 107 | ldrb lr, [r1], #1 |
108 | strgtb r3, [r0], #1 | 108 | strgtb r3, [r0], #1 |
109 | strgeb r4, [r0], #1 | 109 | strgeb r4, [r0], #1 |
110 | subs r2, r2, ip | 110 | subs r2, r2, ip |
111 | strb lr, [r0], #1 | 111 | strb lr, [r0], #1 |
112 | blt 8b | 112 | blt 8b |
113 | ands ip, r1, #3 | 113 | ands ip, r1, #3 |
114 | beq 1b | 114 | beq 1b |
115 | 115 | ||
116 | 10: bic r1, r1, #3 | 116 | 10: bic r1, r1, #3 |
117 | cmp ip, #2 | 117 | cmp ip, #2 |
118 | ldr lr, [r1], #4 | 118 | ldr lr, [r1], #4 |
119 | beq 17f | 119 | beq 17f |
120 | bgt 18f | 120 | bgt 18f |
121 | 121 | ||
122 | 122 | ||
123 | .macro forward_copy_shift pull push | 123 | .macro forward_copy_shift pull push |
124 | 124 | ||
125 | subs r2, r2, #28 | 125 | subs r2, r2, #28 |
126 | blt 14f | 126 | blt 14f |
127 | 127 | ||
128 | 11: stmfd sp!, {r5 - r9} | 128 | 11: stmfd sp!, {r5 - r9} |
129 | 129 | ||
130 | 12: | 130 | 12: |
131 | 13: ldmia r1!, {r4, r5, r6, r7} | 131 | 13: ldmia r1!, {r4, r5, r6, r7} |
132 | mov r3, lr, pull #\pull | 132 | mov r3, lr, pull #\pull |
133 | subs r2, r2, #32 | 133 | subs r2, r2, #32 |
134 | ldmia r1!, {r8, r9, ip, lr} | 134 | ldmia r1!, {r8, r9, ip, lr} |
135 | orr r3, r3, r4, push #\push | 135 | orr r3, r3, r4, push #\push |
136 | mov r4, r4, pull #\pull | 136 | mov r4, r4, pull #\pull |
137 | orr r4, r4, r5, push #\push | 137 | orr r4, r4, r5, push #\push |
138 | mov r5, r5, pull #\pull | 138 | mov r5, r5, pull #\pull |
139 | orr r5, r5, r6, push #\push | 139 | orr r5, r5, r6, push #\push |
140 | mov r6, r6, pull #\pull | 140 | mov r6, r6, pull #\pull |
141 | orr r6, r6, r7, push #\push | 141 | orr r6, r6, r7, push #\push |
142 | mov r7, r7, pull #\pull | 142 | mov r7, r7, pull #\pull |
143 | orr r7, r7, r8, push #\push | 143 | orr r7, r7, r8, push #\push |
144 | mov r8, r8, pull #\pull | 144 | mov r8, r8, pull #\pull |
145 | orr r8, r8, r9, push #\push | 145 | orr r8, r8, r9, push #\push |
146 | mov r9, r9, pull #\pull | 146 | mov r9, r9, pull #\pull |
147 | orr r9, r9, ip, push #\push | 147 | orr r9, r9, ip, push #\push |
148 | mov ip, ip, pull #\pull | 148 | mov ip, ip, pull #\pull |
149 | orr ip, ip, lr, push #\push | 149 | orr ip, ip, lr, push #\push |
150 | stmia r0!, {r3, r4, r5, r6, r7, r8, r9, ip} | 150 | stmia r0!, {r3, r4, r5, r6, r7, r8, r9, ip} |
151 | bge 12b | 151 | bge 12b |
152 | 152 | ||
153 | ldmfd sp!, {r5 - r9} | 153 | ldmfd sp!, {r5 - r9} |
154 | 154 | ||
155 | 14: ands ip, r2, #28 | 155 | 14: ands ip, r2, #28 |
156 | beq 16f | 156 | beq 16f |
157 | 157 | ||
158 | 15: mov r3, lr, pull #\pull | 158 | 15: mov r3, lr, pull #\pull |
159 | ldr lr, [r1], #4 | 159 | ldr lr, [r1], #4 |
160 | subs ip, ip, #4 | 160 | subs ip, ip, #4 |
161 | orr r3, r3, lr, push #\push | 161 | orr r3, r3, lr, push #\push |
162 | str r3, [r0], #4 | 162 | str r3, [r0], #4 |
163 | bgt 15b | 163 | bgt 15b |
164 | 164 | ||
165 | 16: sub r1, r1, #(\push / 8) | 165 | 16: sub r1, r1, #(\push / 8) |
166 | b 8b | 166 | b 8b |
167 | 167 | ||
168 | .endm | 168 | .endm |
169 | 169 | ||
170 | 170 | ||
171 | forward_copy_shift pull=8 push=24 | 171 | forward_copy_shift pull=8 push=24 |
172 | 172 | ||
173 | 17: forward_copy_shift pull=16 push=16 | 173 | 17: forward_copy_shift pull=16 push=16 |
174 | 174 | ||
175 | 18: forward_copy_shift pull=24 push=8 | 175 | 18: forward_copy_shift pull=24 push=8 |
176 | 176 | ||