summaryrefslogtreecommitdiff
path: root/firmware/target/arm/memcpy-arm.S
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm/memcpy-arm.S')
-rw-r--r--firmware/target/arm/memcpy-arm.S244
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
46memcpy: 46memcpy:
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
561: subs r2, r2, #(28) 561: subs r2, r2, #(28)
57 stmfd sp!, {r5 - r8} 57 stmfd sp!, {r5 - r8}
58 blt 5f 58 blt 5f
59 59
602: 602:
613: 613:
624: ldmia r1!, {r3, r4, r5, r6, r7, r8, ip, lr} 624: 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
675: ands ip, r2, #28 675: 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
716: nop 716: 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
917: ldmfd sp!, {r5 - r8} 917: ldmfd sp!, {r5 - r8}
92 92
938: movs r2, r2, lsl #31 938: 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
1039: rsb ip, ip, #4 1039: 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
11610: bic r1, r1, #3 11610: 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
12811: stmfd sp!, {r5 - r9} 12811: stmfd sp!, {r5 - r9}
129 129
13012: 13012:
13113: ldmia r1!, {r4, r5, r6, r7} 13113: 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
15514: ands ip, r2, #28 15514: ands ip, r2, #28
156 beq 16f 156 beq 16f
157 157
15815: mov r3, lr, pull #\pull 15815: 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
16516: sub r1, r1, #(\push / 8) 16516: 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
17317: forward_copy_shift pull=16 push=16 17317: forward_copy_shift pull=16 push=16
174 174
17518: forward_copy_shift pull=24 push=8 17518: forward_copy_shift pull=24 push=8
176 176