blob: 7f687d9f807ee90646099d857f6ac7eb41bc83b1 [file] [log] [blame]
Alexandre Savard1b09e312012-08-07 20:33:29 -04001.text
2
3.global sha1_block_data_order
4.type sha1_block_data_order,%function
5
6.align 2
7sha1_block_data_order:
8 stmdb sp!,{r4-r12,lr}
9 add r2,r1,r2,lsl#6 @ r2 to point at the end of r1
10 ldmia r0,{r3,r4,r5,r6,r7}
11.Lloop:
12 ldr r8,.LK_00_19
13 mov r14,sp
14 sub sp,sp,#15*4
15 mov r5,r5,ror#30
16 mov r6,r6,ror#30
17 mov r7,r7,ror#30 @ [6]
18.L_00_15:
Alexandre Savard75410672012-08-08 09:50:01 -040019 ldrb r9,[r1],#4
20 ldrb r10,[r1,#-1]
21 ldrb r11,[r1,#-2]
Alexandre Savard1b09e312012-08-07 20:33:29 -040022 add r7,r8,r7,ror#2 @ E+=K_00_19
Alexandre Savard75410672012-08-08 09:50:01 -040023 ldrb r12,[r1,#-3]
Alexandre Savard1b09e312012-08-07 20:33:29 -040024 add r7,r7,r3,ror#27 @ E+=ROR(A,27)
Alexandre Savard75410672012-08-08 09:50:01 -040025 orr r9,r10,r9,lsl#24
Alexandre Savard1b09e312012-08-07 20:33:29 -040026 eor r10,r5,r6 @ F_xx_xx
Alexandre Savard75410672012-08-08 09:50:01 -040027 orr r9,r9,r11,lsl#8
28 orr r9,r9,r12,lsl#16
Alexandre Savard1b09e312012-08-07 20:33:29 -040029 and r10,r4,r10,ror#2
30 add r7,r7,r9 @ E+=X[i]
31 eor r10,r10,r6,ror#2 @ F_00_19(B,C,D)
32 str r9,[r14,#-4]!
33 add r7,r7,r10 @ E+=F_00_19(B,C,D)
Alexandre Savard75410672012-08-08 09:50:01 -040034 ldrb r9,[r1],#4
35 ldrb r10,[r1,#-1]
36 ldrb r11,[r1,#-2]
Alexandre Savard1b09e312012-08-07 20:33:29 -040037 add r6,r8,r6,ror#2 @ E+=K_00_19
Alexandre Savard75410672012-08-08 09:50:01 -040038 ldrb r12,[r1,#-3]
Alexandre Savard1b09e312012-08-07 20:33:29 -040039 add r6,r6,r7,ror#27 @ E+=ROR(A,27)
Alexandre Savard75410672012-08-08 09:50:01 -040040 orr r9,r10,r9,lsl#24
Alexandre Savard1b09e312012-08-07 20:33:29 -040041 eor r10,r4,r5 @ F_xx_xx
Alexandre Savard75410672012-08-08 09:50:01 -040042 orr r9,r9,r11,lsl#8
43 orr r9,r9,r12,lsl#16
Alexandre Savard1b09e312012-08-07 20:33:29 -040044 and r10,r3,r10,ror#2
45 add r6,r6,r9 @ E+=X[i]
46 eor r10,r10,r5,ror#2 @ F_00_19(B,C,D)
47 str r9,[r14,#-4]!
48 add r6,r6,r10 @ E+=F_00_19(B,C,D)
Alexandre Savard75410672012-08-08 09:50:01 -040049 ldrb r9,[r1],#4
50 ldrb r10,[r1,#-1]
51 ldrb r11,[r1,#-2]
Alexandre Savard1b09e312012-08-07 20:33:29 -040052 add r5,r8,r5,ror#2 @ E+=K_00_19
Alexandre Savard75410672012-08-08 09:50:01 -040053 ldrb r12,[r1,#-3]
Alexandre Savard1b09e312012-08-07 20:33:29 -040054 add r5,r5,r6,ror#27 @ E+=ROR(A,27)
Alexandre Savard75410672012-08-08 09:50:01 -040055 orr r9,r10,r9,lsl#24
Alexandre Savard1b09e312012-08-07 20:33:29 -040056 eor r10,r3,r4 @ F_xx_xx
Alexandre Savard75410672012-08-08 09:50:01 -040057 orr r9,r9,r11,lsl#8
58 orr r9,r9,r12,lsl#16
Alexandre Savard1b09e312012-08-07 20:33:29 -040059 and r10,r7,r10,ror#2
60 add r5,r5,r9 @ E+=X[i]
61 eor r10,r10,r4,ror#2 @ F_00_19(B,C,D)
62 str r9,[r14,#-4]!
63 add r5,r5,r10 @ E+=F_00_19(B,C,D)
Alexandre Savard75410672012-08-08 09:50:01 -040064 ldrb r9,[r1],#4
65 ldrb r10,[r1,#-1]
66 ldrb r11,[r1,#-2]
Alexandre Savard1b09e312012-08-07 20:33:29 -040067 add r4,r8,r4,ror#2 @ E+=K_00_19
Alexandre Savard75410672012-08-08 09:50:01 -040068 ldrb r12,[r1,#-3]
Alexandre Savard1b09e312012-08-07 20:33:29 -040069 add r4,r4,r5,ror#27 @ E+=ROR(A,27)
Alexandre Savard75410672012-08-08 09:50:01 -040070 orr r9,r10,r9,lsl#24
Alexandre Savard1b09e312012-08-07 20:33:29 -040071 eor r10,r7,r3 @ F_xx_xx
Alexandre Savard75410672012-08-08 09:50:01 -040072 orr r9,r9,r11,lsl#8
73 orr r9,r9,r12,lsl#16
Alexandre Savard1b09e312012-08-07 20:33:29 -040074 and r10,r6,r10,ror#2
75 add r4,r4,r9 @ E+=X[i]
76 eor r10,r10,r3,ror#2 @ F_00_19(B,C,D)
77 str r9,[r14,#-4]!
78 add r4,r4,r10 @ E+=F_00_19(B,C,D)
Alexandre Savard75410672012-08-08 09:50:01 -040079 ldrb r9,[r1],#4
80 ldrb r10,[r1,#-1]
81 ldrb r11,[r1,#-2]
Alexandre Savard1b09e312012-08-07 20:33:29 -040082 add r3,r8,r3,ror#2 @ E+=K_00_19
Alexandre Savard75410672012-08-08 09:50:01 -040083 ldrb r12,[r1,#-3]
Alexandre Savard1b09e312012-08-07 20:33:29 -040084 add r3,r3,r4,ror#27 @ E+=ROR(A,27)
Alexandre Savard75410672012-08-08 09:50:01 -040085 orr r9,r10,r9,lsl#24
Alexandre Savard1b09e312012-08-07 20:33:29 -040086 eor r10,r6,r7 @ F_xx_xx
Alexandre Savard75410672012-08-08 09:50:01 -040087 orr r9,r9,r11,lsl#8
88 orr r9,r9,r12,lsl#16
Alexandre Savard1b09e312012-08-07 20:33:29 -040089 and r10,r5,r10,ror#2
90 add r3,r3,r9 @ E+=X[i]
91 eor r10,r10,r7,ror#2 @ F_00_19(B,C,D)
92 str r9,[r14,#-4]!
93 add r3,r3,r10 @ E+=F_00_19(B,C,D)
94 teq r14,sp
95 bne .L_00_15 @ [((11+4)*5+2)*3]
96 sub sp,sp,#5*4
Alexandre Savard75410672012-08-08 09:50:01 -040097 ldrb r9,[r1],#4
98 ldrb r10,[r1,#-1]
99 ldrb r11,[r1,#-2]
Alexandre Savard1b09e312012-08-07 20:33:29 -0400100 add r7,r8,r7,ror#2 @ E+=K_00_19
Alexandre Savard75410672012-08-08 09:50:01 -0400101 ldrb r12,[r1,#-3]
Alexandre Savard1b09e312012-08-07 20:33:29 -0400102 add r7,r7,r3,ror#27 @ E+=ROR(A,27)
Alexandre Savard75410672012-08-08 09:50:01 -0400103 orr r9,r10,r9,lsl#24
Alexandre Savard1b09e312012-08-07 20:33:29 -0400104 eor r10,r5,r6 @ F_xx_xx
Alexandre Savard75410672012-08-08 09:50:01 -0400105 orr r9,r9,r11,lsl#8
106 orr r9,r9,r12,lsl#16
Alexandre Savard1b09e312012-08-07 20:33:29 -0400107 and r10,r4,r10,ror#2
108 add r7,r7,r9 @ E+=X[i]
109 eor r10,r10,r6,ror#2 @ F_00_19(B,C,D)
110 str r9,[r14,#-4]!
111 add r7,r7,r10 @ E+=F_00_19(B,C,D)
112 ldr r9,[r14,#15*4]
113 ldr r10,[r14,#13*4]
114 ldr r11,[r14,#7*4]
115 add r6,r8,r6,ror#2 @ E+=K_xx_xx
116 ldr r12,[r14,#2*4]
117 eor r9,r9,r10
Alexandre Savard75410672012-08-08 09:50:01 -0400118 eor r11,r11,r12
Alexandre Savard1b09e312012-08-07 20:33:29 -0400119 eor r10,r4,r5 @ F_xx_xx
120 mov r9,r9,ror#31
121 add r6,r6,r7,ror#27 @ E+=ROR(A,27)
122 eor r9,r9,r11,ror#31
Alexandre Savard1b09e312012-08-07 20:33:29 -0400123 and r10,r3,r10,ror#2 @ F_xx_xx
124 @ F_xx_xx
125 add r6,r6,r9 @ E+=X[i]
Alexandre Savard75410672012-08-08 09:50:01 -0400126 str r9,[r14,#-4]!
Alexandre Savard1b09e312012-08-07 20:33:29 -0400127 eor r10,r10,r5,ror#2 @ F_00_19(B,C,D)
128 add r6,r6,r10 @ E+=F_00_19(B,C,D)
129 ldr r9,[r14,#15*4]
130 ldr r10,[r14,#13*4]
131 ldr r11,[r14,#7*4]
132 add r5,r8,r5,ror#2 @ E+=K_xx_xx
133 ldr r12,[r14,#2*4]
134 eor r9,r9,r10
Alexandre Savard75410672012-08-08 09:50:01 -0400135 eor r11,r11,r12
Alexandre Savard1b09e312012-08-07 20:33:29 -0400136 eor r10,r3,r4 @ F_xx_xx
137 mov r9,r9,ror#31
138 add r5,r5,r6,ror#27 @ E+=ROR(A,27)
139 eor r9,r9,r11,ror#31
Alexandre Savard1b09e312012-08-07 20:33:29 -0400140 and r10,r7,r10,ror#2 @ F_xx_xx
141 @ F_xx_xx
142 add r5,r5,r9 @ E+=X[i]
Alexandre Savard75410672012-08-08 09:50:01 -0400143 str r9,[r14,#-4]!
Alexandre Savard1b09e312012-08-07 20:33:29 -0400144 eor r10,r10,r4,ror#2 @ F_00_19(B,C,D)
145 add r5,r5,r10 @ E+=F_00_19(B,C,D)
146 ldr r9,[r14,#15*4]
147 ldr r10,[r14,#13*4]
148 ldr r11,[r14,#7*4]
149 add r4,r8,r4,ror#2 @ E+=K_xx_xx
150 ldr r12,[r14,#2*4]
151 eor r9,r9,r10
Alexandre Savard75410672012-08-08 09:50:01 -0400152 eor r11,r11,r12
Alexandre Savard1b09e312012-08-07 20:33:29 -0400153 eor r10,r7,r3 @ F_xx_xx
154 mov r9,r9,ror#31
155 add r4,r4,r5,ror#27 @ E+=ROR(A,27)
156 eor r9,r9,r11,ror#31
Alexandre Savard1b09e312012-08-07 20:33:29 -0400157 and r10,r6,r10,ror#2 @ F_xx_xx
158 @ F_xx_xx
159 add r4,r4,r9 @ E+=X[i]
Alexandre Savard75410672012-08-08 09:50:01 -0400160 str r9,[r14,#-4]!
Alexandre Savard1b09e312012-08-07 20:33:29 -0400161 eor r10,r10,r3,ror#2 @ F_00_19(B,C,D)
162 add r4,r4,r10 @ E+=F_00_19(B,C,D)
163 ldr r9,[r14,#15*4]
164 ldr r10,[r14,#13*4]
165 ldr r11,[r14,#7*4]
166 add r3,r8,r3,ror#2 @ E+=K_xx_xx
167 ldr r12,[r14,#2*4]
168 eor r9,r9,r10
Alexandre Savard75410672012-08-08 09:50:01 -0400169 eor r11,r11,r12
Alexandre Savard1b09e312012-08-07 20:33:29 -0400170 eor r10,r6,r7 @ F_xx_xx
171 mov r9,r9,ror#31
172 add r3,r3,r4,ror#27 @ E+=ROR(A,27)
173 eor r9,r9,r11,ror#31
Alexandre Savard1b09e312012-08-07 20:33:29 -0400174 and r10,r5,r10,ror#2 @ F_xx_xx
175 @ F_xx_xx
176 add r3,r3,r9 @ E+=X[i]
Alexandre Savard75410672012-08-08 09:50:01 -0400177 str r9,[r14,#-4]!
Alexandre Savard1b09e312012-08-07 20:33:29 -0400178 eor r10,r10,r7,ror#2 @ F_00_19(B,C,D)
179 add r3,r3,r10 @ E+=F_00_19(B,C,D)
180
181 ldr r8,.LK_20_39 @ [+15+16*4]
182 sub sp,sp,#20*4
183 cmn sp,#0 @ [+3], clear carry to denote 20_39
184.L_20_39_or_60_79:
185 ldr r9,[r14,#15*4]
186 ldr r10,[r14,#13*4]
187 ldr r11,[r14,#7*4]
188 add r7,r8,r7,ror#2 @ E+=K_xx_xx
189 ldr r12,[r14,#2*4]
190 eor r9,r9,r10
Alexandre Savard75410672012-08-08 09:50:01 -0400191 eor r11,r11,r12
Alexandre Savard1b09e312012-08-07 20:33:29 -0400192 eor r10,r5,r6 @ F_xx_xx
193 mov r9,r9,ror#31
194 add r7,r7,r3,ror#27 @ E+=ROR(A,27)
195 eor r9,r9,r11,ror#31
Alexandre Savard1b09e312012-08-07 20:33:29 -0400196 eor r10,r4,r10,ror#2 @ F_xx_xx
197 @ F_xx_xx
198 add r7,r7,r9 @ E+=X[i]
Alexandre Savard75410672012-08-08 09:50:01 -0400199 str r9,[r14,#-4]!
Alexandre Savard1b09e312012-08-07 20:33:29 -0400200 add r7,r7,r10 @ E+=F_20_39(B,C,D)
201 ldr r9,[r14,#15*4]
202 ldr r10,[r14,#13*4]
203 ldr r11,[r14,#7*4]
204 add r6,r8,r6,ror#2 @ E+=K_xx_xx
205 ldr r12,[r14,#2*4]
206 eor r9,r9,r10
Alexandre Savard75410672012-08-08 09:50:01 -0400207 eor r11,r11,r12
Alexandre Savard1b09e312012-08-07 20:33:29 -0400208 eor r10,r4,r5 @ F_xx_xx
209 mov r9,r9,ror#31
210 add r6,r6,r7,ror#27 @ E+=ROR(A,27)
211 eor r9,r9,r11,ror#31
Alexandre Savard1b09e312012-08-07 20:33:29 -0400212 eor r10,r3,r10,ror#2 @ F_xx_xx
213 @ F_xx_xx
214 add r6,r6,r9 @ E+=X[i]
Alexandre Savard75410672012-08-08 09:50:01 -0400215 str r9,[r14,#-4]!
Alexandre Savard1b09e312012-08-07 20:33:29 -0400216 add r6,r6,r10 @ E+=F_20_39(B,C,D)
217 ldr r9,[r14,#15*4]
218 ldr r10,[r14,#13*4]
219 ldr r11,[r14,#7*4]
220 add r5,r8,r5,ror#2 @ E+=K_xx_xx
221 ldr r12,[r14,#2*4]
222 eor r9,r9,r10
Alexandre Savard75410672012-08-08 09:50:01 -0400223 eor r11,r11,r12
Alexandre Savard1b09e312012-08-07 20:33:29 -0400224 eor r10,r3,r4 @ F_xx_xx
225 mov r9,r9,ror#31
226 add r5,r5,r6,ror#27 @ E+=ROR(A,27)
227 eor r9,r9,r11,ror#31
Alexandre Savard1b09e312012-08-07 20:33:29 -0400228 eor r10,r7,r10,ror#2 @ F_xx_xx
229 @ F_xx_xx
230 add r5,r5,r9 @ E+=X[i]
Alexandre Savard75410672012-08-08 09:50:01 -0400231 str r9,[r14,#-4]!
Alexandre Savard1b09e312012-08-07 20:33:29 -0400232 add r5,r5,r10 @ E+=F_20_39(B,C,D)
233 ldr r9,[r14,#15*4]
234 ldr r10,[r14,#13*4]
235 ldr r11,[r14,#7*4]
236 add r4,r8,r4,ror#2 @ E+=K_xx_xx
237 ldr r12,[r14,#2*4]
238 eor r9,r9,r10
Alexandre Savard75410672012-08-08 09:50:01 -0400239 eor r11,r11,r12
Alexandre Savard1b09e312012-08-07 20:33:29 -0400240 eor r10,r7,r3 @ F_xx_xx
241 mov r9,r9,ror#31
242 add r4,r4,r5,ror#27 @ E+=ROR(A,27)
243 eor r9,r9,r11,ror#31
Alexandre Savard1b09e312012-08-07 20:33:29 -0400244 eor r10,r6,r10,ror#2 @ F_xx_xx
245 @ F_xx_xx
246 add r4,r4,r9 @ E+=X[i]
Alexandre Savard75410672012-08-08 09:50:01 -0400247 str r9,[r14,#-4]!
Alexandre Savard1b09e312012-08-07 20:33:29 -0400248 add r4,r4,r10 @ E+=F_20_39(B,C,D)
249 ldr r9,[r14,#15*4]
250 ldr r10,[r14,#13*4]
251 ldr r11,[r14,#7*4]
252 add r3,r8,r3,ror#2 @ E+=K_xx_xx
253 ldr r12,[r14,#2*4]
254 eor r9,r9,r10
Alexandre Savard75410672012-08-08 09:50:01 -0400255 eor r11,r11,r12
Alexandre Savard1b09e312012-08-07 20:33:29 -0400256 eor r10,r6,r7 @ F_xx_xx
257 mov r9,r9,ror#31
258 add r3,r3,r4,ror#27 @ E+=ROR(A,27)
259 eor r9,r9,r11,ror#31
Alexandre Savard1b09e312012-08-07 20:33:29 -0400260 eor r10,r5,r10,ror#2 @ F_xx_xx
261 @ F_xx_xx
262 add r3,r3,r9 @ E+=X[i]
Alexandre Savard75410672012-08-08 09:50:01 -0400263 str r9,[r14,#-4]!
Alexandre Savard1b09e312012-08-07 20:33:29 -0400264 add r3,r3,r10 @ E+=F_20_39(B,C,D)
265 teq r14,sp @ preserve carry
266 bne .L_20_39_or_60_79 @ [+((12+3)*5+2)*4]
267 bcs .L_done @ [+((12+3)*5+2)*4], spare 300 bytes
268
269 ldr r8,.LK_40_59
270 sub sp,sp,#20*4 @ [+2]
271.L_40_59:
272 ldr r9,[r14,#15*4]
273 ldr r10,[r14,#13*4]
274 ldr r11,[r14,#7*4]
275 add r7,r8,r7,ror#2 @ E+=K_xx_xx
276 ldr r12,[r14,#2*4]
277 eor r9,r9,r10
Alexandre Savard75410672012-08-08 09:50:01 -0400278 eor r11,r11,r12
Alexandre Savard1b09e312012-08-07 20:33:29 -0400279 eor r10,r5,r6 @ F_xx_xx
280 mov r9,r9,ror#31
281 add r7,r7,r3,ror#27 @ E+=ROR(A,27)
282 eor r9,r9,r11,ror#31
Alexandre Savard1b09e312012-08-07 20:33:29 -0400283 and r10,r4,r10,ror#2 @ F_xx_xx
284 and r11,r5,r6 @ F_xx_xx
285 add r7,r7,r9 @ E+=X[i]
Alexandre Savard75410672012-08-08 09:50:01 -0400286 str r9,[r14,#-4]!
Alexandre Savard1b09e312012-08-07 20:33:29 -0400287 add r7,r7,r10 @ E+=F_40_59(B,C,D)
288 add r7,r7,r11,ror#2
289 ldr r9,[r14,#15*4]
290 ldr r10,[r14,#13*4]
291 ldr r11,[r14,#7*4]
292 add r6,r8,r6,ror#2 @ E+=K_xx_xx
293 ldr r12,[r14,#2*4]
294 eor r9,r9,r10
Alexandre Savard75410672012-08-08 09:50:01 -0400295 eor r11,r11,r12
Alexandre Savard1b09e312012-08-07 20:33:29 -0400296 eor r10,r4,r5 @ F_xx_xx
297 mov r9,r9,ror#31
298 add r6,r6,r7,ror#27 @ E+=ROR(A,27)
299 eor r9,r9,r11,ror#31
Alexandre Savard1b09e312012-08-07 20:33:29 -0400300 and r10,r3,r10,ror#2 @ F_xx_xx
301 and r11,r4,r5 @ F_xx_xx
302 add r6,r6,r9 @ E+=X[i]
Alexandre Savard75410672012-08-08 09:50:01 -0400303 str r9,[r14,#-4]!
Alexandre Savard1b09e312012-08-07 20:33:29 -0400304 add r6,r6,r10 @ E+=F_40_59(B,C,D)
305 add r6,r6,r11,ror#2
306 ldr r9,[r14,#15*4]
307 ldr r10,[r14,#13*4]
308 ldr r11,[r14,#7*4]
309 add r5,r8,r5,ror#2 @ E+=K_xx_xx
310 ldr r12,[r14,#2*4]
311 eor r9,r9,r10
Alexandre Savard75410672012-08-08 09:50:01 -0400312 eor r11,r11,r12
Alexandre Savard1b09e312012-08-07 20:33:29 -0400313 eor r10,r3,r4 @ F_xx_xx
314 mov r9,r9,ror#31
315 add r5,r5,r6,ror#27 @ E+=ROR(A,27)
316 eor r9,r9,r11,ror#31
Alexandre Savard1b09e312012-08-07 20:33:29 -0400317 and r10,r7,r10,ror#2 @ F_xx_xx
318 and r11,r3,r4 @ F_xx_xx
319 add r5,r5,r9 @ E+=X[i]
Alexandre Savard75410672012-08-08 09:50:01 -0400320 str r9,[r14,#-4]!
Alexandre Savard1b09e312012-08-07 20:33:29 -0400321 add r5,r5,r10 @ E+=F_40_59(B,C,D)
322 add r5,r5,r11,ror#2
323 ldr r9,[r14,#15*4]
324 ldr r10,[r14,#13*4]
325 ldr r11,[r14,#7*4]
326 add r4,r8,r4,ror#2 @ E+=K_xx_xx
327 ldr r12,[r14,#2*4]
328 eor r9,r9,r10
Alexandre Savard75410672012-08-08 09:50:01 -0400329 eor r11,r11,r12
Alexandre Savard1b09e312012-08-07 20:33:29 -0400330 eor r10,r7,r3 @ F_xx_xx
331 mov r9,r9,ror#31
332 add r4,r4,r5,ror#27 @ E+=ROR(A,27)
333 eor r9,r9,r11,ror#31
Alexandre Savard1b09e312012-08-07 20:33:29 -0400334 and r10,r6,r10,ror#2 @ F_xx_xx
335 and r11,r7,r3 @ F_xx_xx
336 add r4,r4,r9 @ E+=X[i]
Alexandre Savard75410672012-08-08 09:50:01 -0400337 str r9,[r14,#-4]!
Alexandre Savard1b09e312012-08-07 20:33:29 -0400338 add r4,r4,r10 @ E+=F_40_59(B,C,D)
339 add r4,r4,r11,ror#2
340 ldr r9,[r14,#15*4]
341 ldr r10,[r14,#13*4]
342 ldr r11,[r14,#7*4]
343 add r3,r8,r3,ror#2 @ E+=K_xx_xx
344 ldr r12,[r14,#2*4]
345 eor r9,r9,r10
Alexandre Savard75410672012-08-08 09:50:01 -0400346 eor r11,r11,r12
Alexandre Savard1b09e312012-08-07 20:33:29 -0400347 eor r10,r6,r7 @ F_xx_xx
348 mov r9,r9,ror#31
349 add r3,r3,r4,ror#27 @ E+=ROR(A,27)
350 eor r9,r9,r11,ror#31
Alexandre Savard1b09e312012-08-07 20:33:29 -0400351 and r10,r5,r10,ror#2 @ F_xx_xx
352 and r11,r6,r7 @ F_xx_xx
353 add r3,r3,r9 @ E+=X[i]
Alexandre Savard75410672012-08-08 09:50:01 -0400354 str r9,[r14,#-4]!
Alexandre Savard1b09e312012-08-07 20:33:29 -0400355 add r3,r3,r10 @ E+=F_40_59(B,C,D)
356 add r3,r3,r11,ror#2
357 teq r14,sp
358 bne .L_40_59 @ [+((12+5)*5+2)*4]
359
360 ldr r8,.LK_60_79
361 sub sp,sp,#20*4
362 cmp sp,#0 @ set carry to denote 60_79
363 b .L_20_39_or_60_79 @ [+4], spare 300 bytes
364.L_done:
365 add sp,sp,#80*4 @ "deallocate" stack frame
366 ldmia r0,{r8,r9,r10,r11,r12}
367 add r3,r8,r3
368 add r4,r9,r4
369 add r5,r10,r5,ror#2
370 add r6,r11,r6,ror#2
371 add r7,r12,r7,ror#2
372 stmia r0,{r3,r4,r5,r6,r7}
373 teq r1,r2
374 bne .Lloop @ [+18], total 1307
375
Alexandre Savard1b09e312012-08-07 20:33:29 -0400376 ldmia sp!,{r4-r12,lr}
377 tst lr,#1
378 moveq pc,lr @ be binary compatible with V4, yet
379 .word 0xe12fff1e @ interoperable with Thumb ISA:-)
Alexandre Savard1b09e312012-08-07 20:33:29 -0400380.align 2
381.LK_00_19: .word 0x5a827999
382.LK_20_39: .word 0x6ed9eba1
383.LK_40_59: .word 0x8f1bbcdc
384.LK_60_79: .word 0xca62c1d6
385.size sha1_block_data_order,.-sha1_block_data_order
386.asciz "SHA1 block transform for ARMv4, CRYPTOGAMS by <appro@openssl.org>"
387.align 2