summaryrefslogtreecommitdiff
path: root/firmware/target/arm/memmove-arm.S
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm/memmove-arm.S')
-rw-r--r--firmware/target/arm/memmove-arm.S252
1 files changed, 126 insertions, 126 deletions
diff --git a/firmware/target/arm/memmove-arm.S b/firmware/target/arm/memmove-arm.S
index d00854439b..ce056d956b 100644
--- a/firmware/target/arm/memmove-arm.S
+++ b/firmware/target/arm/memmove-arm.S
@@ -35,7 +35,7 @@
35#define push lsr 35#define push lsr
36#endif 36#endif
37 37
38 .text 38 .text
39 39
40/* 40/*
41 * Prototype: void *memmove(void *dest, const void *src, size_t n); 41 * Prototype: void *memmove(void *dest, const void *src, size_t n);
@@ -54,137 +54,137 @@
54 54
55memmove: 55memmove:
56 56
57 subs ip, r0, r1 57 subs ip, r0, r1
58 cmphi r2, ip 58 cmphi r2, ip
59 bls memcpy 59 bls memcpy
60 60
61 stmfd sp!, {r0, r4, lr} 61 stmfd sp!, {r0, r4, lr}
62 add r1, r1, r2 62 add r1, r1, r2
63 add r0, r0, r2 63 add r0, r0, r2
64 subs r2, r2, #4 64 subs r2, r2, #4
65 blt 8f 65 blt 8f
66 ands ip, r0, #3 66 ands ip, r0, #3
67 bne 9f 67 bne 9f
68 ands ip, r1, #3 68 ands ip, r1, #3
69 bne 10f 69 bne 10f
70 70
711: subs r2, r2, #(28) 711: subs r2, r2, #(28)
72 stmfd sp!, {r5 - r8} 72 stmfd sp!, {r5 - r8}
73 blt 5f 73 blt 5f
74 74
752: 752:
763: 763:
774: ldmdb r1!, {r3, r4, r5, r6, r7, r8, ip, lr} 774: ldmdb r1!, {r3, r4, r5, r6, r7, r8, ip, lr}
78 subs r2, r2, #32 78 subs r2, r2, #32
79 stmdb r0!, {r3, r4, r5, r6, r7, r8, ip, lr} 79 stmdb r0!, {r3, r4, r5, r6, r7, r8, ip, lr}
80 bge 3b 80 bge 3b
81 81
825: ands ip, r2, #28 825: ands ip, r2, #28
83 rsb ip, ip, #32 83 rsb ip, ip, #32
84 addne pc, pc, ip @ C is always clear here 84 addne pc, pc, ip @ C is always clear here
85 b 7f 85 b 7f
866: nop 866: nop
87 ldr r3, [r1, #-4]! 87 ldr r3, [r1, #-4]!
88 ldr r4, [r1, #-4]! 88 ldr r4, [r1, #-4]!
89 ldr r5, [r1, #-4]! 89 ldr r5, [r1, #-4]!
90 ldr r6, [r1, #-4]! 90 ldr r6, [r1, #-4]!
91 ldr r7, [r1, #-4]! 91 ldr r7, [r1, #-4]!
92 ldr r8, [r1, #-4]! 92 ldr r8, [r1, #-4]!
93 ldr lr, [r1, #-4]! 93 ldr lr, [r1, #-4]!
94 94
95 add pc, pc, ip 95 add pc, pc, ip
96 nop 96 nop
97 nop 97 nop
98 str r3, [r0, #-4]! 98 str r3, [r0, #-4]!
99 str r4, [r0, #-4]! 99 str r4, [r0, #-4]!
100 str r5, [r0, #-4]! 100 str r5, [r0, #-4]!
101 str r6, [r0, #-4]! 101 str r6, [r0, #-4]!
102 str r7, [r0, #-4]! 102 str r7, [r0, #-4]!
103 str r8, [r0, #-4]! 103 str r8, [r0, #-4]!
104 str lr, [r0, #-4]! 104 str lr, [r0, #-4]!
105 105
1067: ldmfd sp!, {r5 - r8} 1067: ldmfd sp!, {r5 - r8}
107 107
1088: movs r2, r2, lsl #31 1088: movs r2, r2, lsl #31
109 ldrneb r3, [r1, #-1]! 109 ldrneb r3, [r1, #-1]!
110 ldrcsb r4, [r1, #-1]! 110 ldrcsb r4, [r1, #-1]!
111 ldrcsb ip, [r1, #-1] 111 ldrcsb ip, [r1, #-1]
112 strneb r3, [r0, #-1]! 112 strneb r3, [r0, #-1]!
113 strcsb r4, [r0, #-1]! 113 strcsb r4, [r0, #-1]!
114 strcsb ip, [r0, #-1] 114 strcsb ip, [r0, #-1]
115 ldmfd sp!, {r0, r4, pc} 115 ldmfd sp!, {r0, r4, pc}
116 116
1179: cmp ip, #2 1179: cmp ip, #2
118 ldrgtb r3, [r1, #-1]! 118 ldrgtb r3, [r1, #-1]!
119 ldrgeb r4, [r1, #-1]! 119 ldrgeb r4, [r1, #-1]!
120 ldrb lr, [r1, #-1]! 120 ldrb lr, [r1, #-1]!
121 strgtb r3, [r0, #-1]! 121 strgtb r3, [r0, #-1]!
122 strgeb r4, [r0, #-1]! 122 strgeb r4, [r0, #-1]!
123 subs r2, r2, ip 123 subs r2, r2, ip
124 strb lr, [r0, #-1]! 124 strb lr, [r0, #-1]!
125 blt 8b 125 blt 8b
126 ands ip, r1, #3 126 ands ip, r1, #3
127 beq 1b 127 beq 1b
128 128
12910: bic r1, r1, #3 12910: bic r1, r1, #3
130 cmp ip, #2 130 cmp ip, #2
131 ldr r3, [r1, #0] 131 ldr r3, [r1, #0]
132 beq 17f 132 beq 17f
133 blt 18f 133 blt 18f
134 134
135 135
136 .macro backward_copy_shift push pull 136 .macro backward_copy_shift push pull
137 137
138 subs r2, r2, #28 138 subs r2, r2, #28
139 blt 14f 139 blt 14f
140 140
14111: stmfd sp!, {r5 - r9} 14111: stmfd sp!, {r5 - r9}
142 142
14312: 14312:
14413: ldmdb r1!, {r7, r8, r9, ip} 14413: ldmdb r1!, {r7, r8, r9, ip}
145 mov lr, r3, push #\push 145 mov lr, r3, push #\push
146 subs r2, r2, #32 146 subs r2, r2, #32
147 ldmdb r1!, {r3, r4, r5, r6} 147 ldmdb r1!, {r3, r4, r5, r6}
148 orr lr, lr, ip, pull #\pull 148 orr lr, lr, ip, pull #\pull
149 mov ip, ip, push #\push 149 mov ip, ip, push #\push
150 orr ip, ip, r9, pull #\pull 150 orr ip, ip, r9, pull #\pull
151 mov r9, r9, push #\push 151 mov r9, r9, push #\push
152 orr r9, r9, r8, pull #\pull 152 orr r9, r9, r8, pull #\pull
153 mov r8, r8, push #\push 153 mov r8, r8, push #\push
154 orr r8, r8, r7, pull #\pull 154 orr r8, r8, r7, pull #\pull
155 mov r7, r7, push #\push 155 mov r7, r7, push #\push
156 orr r7, r7, r6, pull #\pull 156 orr r7, r7, r6, pull #\pull
157 mov r6, r6, push #\push 157 mov r6, r6, push #\push
158 orr r6, r6, r5, pull #\pull 158 orr r6, r6, r5, pull #\pull
159 mov r5, r5, push #\push 159 mov r5, r5, push #\push
160 orr r5, r5, r4, pull #\pull 160 orr r5, r5, r4, pull #\pull
161 mov r4, r4, push #\push 161 mov r4, r4, push #\push
162 orr r4, r4, r3, pull #\pull 162 orr r4, r4, r3, pull #\pull
163 stmdb r0!, {r4 - r9, ip, lr} 163 stmdb r0!, {r4 - r9, ip, lr}
164 bge 12b 164 bge 12b
165 165
166 ldmfd sp!, {r5 - r9} 166 ldmfd sp!, {r5 - r9}
167 167
16814: ands ip, r2, #28 16814: ands ip, r2, #28
169 beq 16f 169 beq 16f
170 170
17115: mov lr, r3, push #\push 17115: mov lr, r3, push #\push
172 ldr r3, [r1, #-4]! 172 ldr r3, [r1, #-4]!
173 subs ip, ip, #4 173 subs ip, ip, #4
174 orr lr, lr, r3, pull #\pull 174 orr lr, lr, r3, pull #\pull
175 str lr, [r0, #-4]! 175 str lr, [r0, #-4]!
176 bgt 15b 176 bgt 15b
177 177
17816: add r1, r1, #(\pull / 8) 17816: add r1, r1, #(\pull / 8)
179 b 8b 179 b 8b
180 180
181 .endm 181 .endm
182 182
183 183
184 backward_copy_shift push=8 pull=24 184 backward_copy_shift push=8 pull=24
185 185
18617: backward_copy_shift push=16 pull=16 18617: backward_copy_shift push=16 pull=16
187 187
18818: backward_copy_shift push=24 pull=8 18818: backward_copy_shift push=24 pull=8
189 189
190 190