blob: ee903dc4c333500b91254fa65ef397c26107a50a [file] [log] [blame]
Alexandre Savard1b09e312012-08-07 20:33:29 -04001.text
2.code 32
3
4.type K256,%object
5.align 5
6K256:
7.word 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5
8.word 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5
9.word 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3
10.word 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174
11.word 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc
12.word 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da
13.word 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7
14.word 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967
15.word 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13
16.word 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85
17.word 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3
18.word 0xd192e819,0xd6990624,0xf40e3585,0x106aa070
19.word 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5
20.word 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3
21.word 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208
22.word 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2
23.size K256,.-K256
24
25.global sha256_block_data_order
26.type sha256_block_data_order,%function
27sha256_block_data_order:
28 sub r3,pc,#8 @ sha256_block_data_order
29 add r2,r1,r2,lsl#6 @ len to point at the end of inp
Alexandre Savard75410672012-08-08 09:50:01 -040030 stmdb sp!,{r0,r1,r2,r4-r12,lr}
Alexandre Savard1b09e312012-08-07 20:33:29 -040031 ldmia r0,{r4,r5,r6,r7,r8,r9,r10,r11}
32 sub r14,r3,#256 @ K256
33 sub sp,sp,#16*4 @ alloca(X[16])
34.Loop:
Alexandre Savard1b09e312012-08-07 20:33:29 -040035 ldrb r3,[r1,#3] @ 0
36 ldrb r12,[r1,#2]
37 ldrb r2,[r1,#1]
38 ldrb r0,[r1],#4
39 orr r3,r3,r12,lsl#8
40 orr r3,r3,r2,lsl#16
41 orr r3,r3,r0,lsl#24
Alexandre Savard75410672012-08-08 09:50:01 -040042
Alexandre Savard1b09e312012-08-07 20:33:29 -040043 ldr r12,[r14],#4 @ *K256++
Alexandre Savard75410672012-08-08 09:50:01 -040044 mov r0,r8,ror#6
45 str r3,[sp,#0*4]
Alexandre Savard1b09e312012-08-07 20:33:29 -040046 eor r0,r0,r8,ror#11
47 eor r2,r9,r10
Alexandre Savard1b09e312012-08-07 20:33:29 -040048 eor r0,r0,r8,ror#25 @ Sigma1(e)
49 and r2,r2,r8
Alexandre Savard1b09e312012-08-07 20:33:29 -040050 add r3,r3,r0
51 eor r2,r2,r10 @ Ch(e,f,g)
52 add r3,r3,r11
53 mov r11,r4,ror#2
54 add r3,r3,r2
55 eor r11,r11,r4,ror#13
56 add r3,r3,r12
57 eor r11,r11,r4,ror#22 @ Sigma0(a)
Alexandre Savard1b09e312012-08-07 20:33:29 -040058 orr r0,r4,r5
59 and r2,r4,r5
60 and r0,r0,r6
61 add r11,r11,r3
62 orr r0,r0,r2 @ Maj(a,b,c)
63 add r7,r7,r3
64 add r11,r11,r0
Alexandre Savard1b09e312012-08-07 20:33:29 -040065 ldrb r3,[r1,#3] @ 1
66 ldrb r12,[r1,#2]
67 ldrb r2,[r1,#1]
68 ldrb r0,[r1],#4
69 orr r3,r3,r12,lsl#8
70 orr r3,r3,r2,lsl#16
71 orr r3,r3,r0,lsl#24
Alexandre Savard75410672012-08-08 09:50:01 -040072
Alexandre Savard1b09e312012-08-07 20:33:29 -040073 ldr r12,[r14],#4 @ *K256++
Alexandre Savard75410672012-08-08 09:50:01 -040074 mov r0,r7,ror#6
75 str r3,[sp,#1*4]
Alexandre Savard1b09e312012-08-07 20:33:29 -040076 eor r0,r0,r7,ror#11
77 eor r2,r8,r9
Alexandre Savard1b09e312012-08-07 20:33:29 -040078 eor r0,r0,r7,ror#25 @ Sigma1(e)
79 and r2,r2,r7
Alexandre Savard1b09e312012-08-07 20:33:29 -040080 add r3,r3,r0
81 eor r2,r2,r9 @ Ch(e,f,g)
82 add r3,r3,r10
83 mov r10,r11,ror#2
84 add r3,r3,r2
85 eor r10,r10,r11,ror#13
86 add r3,r3,r12
87 eor r10,r10,r11,ror#22 @ Sigma0(a)
Alexandre Savard1b09e312012-08-07 20:33:29 -040088 orr r0,r11,r4
89 and r2,r11,r4
90 and r0,r0,r5
91 add r10,r10,r3
92 orr r0,r0,r2 @ Maj(a,b,c)
93 add r6,r6,r3
94 add r10,r10,r0
Alexandre Savard1b09e312012-08-07 20:33:29 -040095 ldrb r3,[r1,#3] @ 2
96 ldrb r12,[r1,#2]
97 ldrb r2,[r1,#1]
98 ldrb r0,[r1],#4
99 orr r3,r3,r12,lsl#8
100 orr r3,r3,r2,lsl#16
101 orr r3,r3,r0,lsl#24
Alexandre Savard75410672012-08-08 09:50:01 -0400102
Alexandre Savard1b09e312012-08-07 20:33:29 -0400103 ldr r12,[r14],#4 @ *K256++
Alexandre Savard75410672012-08-08 09:50:01 -0400104 mov r0,r6,ror#6
105 str r3,[sp,#2*4]
Alexandre Savard1b09e312012-08-07 20:33:29 -0400106 eor r0,r0,r6,ror#11
107 eor r2,r7,r8
Alexandre Savard1b09e312012-08-07 20:33:29 -0400108 eor r0,r0,r6,ror#25 @ Sigma1(e)
109 and r2,r2,r6
Alexandre Savard1b09e312012-08-07 20:33:29 -0400110 add r3,r3,r0
111 eor r2,r2,r8 @ Ch(e,f,g)
112 add r3,r3,r9
113 mov r9,r10,ror#2
114 add r3,r3,r2
115 eor r9,r9,r10,ror#13
116 add r3,r3,r12
117 eor r9,r9,r10,ror#22 @ Sigma0(a)
Alexandre Savard1b09e312012-08-07 20:33:29 -0400118 orr r0,r10,r11
119 and r2,r10,r11
120 and r0,r0,r4
121 add r9,r9,r3
122 orr r0,r0,r2 @ Maj(a,b,c)
123 add r5,r5,r3
124 add r9,r9,r0
Alexandre Savard1b09e312012-08-07 20:33:29 -0400125 ldrb r3,[r1,#3] @ 3
126 ldrb r12,[r1,#2]
127 ldrb r2,[r1,#1]
128 ldrb r0,[r1],#4
129 orr r3,r3,r12,lsl#8
130 orr r3,r3,r2,lsl#16
131 orr r3,r3,r0,lsl#24
Alexandre Savard75410672012-08-08 09:50:01 -0400132
Alexandre Savard1b09e312012-08-07 20:33:29 -0400133 ldr r12,[r14],#4 @ *K256++
Alexandre Savard75410672012-08-08 09:50:01 -0400134 mov r0,r5,ror#6
135 str r3,[sp,#3*4]
Alexandre Savard1b09e312012-08-07 20:33:29 -0400136 eor r0,r0,r5,ror#11
137 eor r2,r6,r7
Alexandre Savard1b09e312012-08-07 20:33:29 -0400138 eor r0,r0,r5,ror#25 @ Sigma1(e)
139 and r2,r2,r5
Alexandre Savard1b09e312012-08-07 20:33:29 -0400140 add r3,r3,r0
141 eor r2,r2,r7 @ Ch(e,f,g)
142 add r3,r3,r8
143 mov r8,r9,ror#2
144 add r3,r3,r2
145 eor r8,r8,r9,ror#13
146 add r3,r3,r12
147 eor r8,r8,r9,ror#22 @ Sigma0(a)
Alexandre Savard1b09e312012-08-07 20:33:29 -0400148 orr r0,r9,r10
149 and r2,r9,r10
150 and r0,r0,r11
151 add r8,r8,r3
152 orr r0,r0,r2 @ Maj(a,b,c)
153 add r4,r4,r3
154 add r8,r8,r0
Alexandre Savard1b09e312012-08-07 20:33:29 -0400155 ldrb r3,[r1,#3] @ 4
156 ldrb r12,[r1,#2]
157 ldrb r2,[r1,#1]
158 ldrb r0,[r1],#4
159 orr r3,r3,r12,lsl#8
160 orr r3,r3,r2,lsl#16
161 orr r3,r3,r0,lsl#24
Alexandre Savard75410672012-08-08 09:50:01 -0400162
Alexandre Savard1b09e312012-08-07 20:33:29 -0400163 ldr r12,[r14],#4 @ *K256++
Alexandre Savard75410672012-08-08 09:50:01 -0400164 mov r0,r4,ror#6
165 str r3,[sp,#4*4]
Alexandre Savard1b09e312012-08-07 20:33:29 -0400166 eor r0,r0,r4,ror#11
167 eor r2,r5,r6
Alexandre Savard1b09e312012-08-07 20:33:29 -0400168 eor r0,r0,r4,ror#25 @ Sigma1(e)
169 and r2,r2,r4
Alexandre Savard1b09e312012-08-07 20:33:29 -0400170 add r3,r3,r0
171 eor r2,r2,r6 @ Ch(e,f,g)
172 add r3,r3,r7
173 mov r7,r8,ror#2
174 add r3,r3,r2
175 eor r7,r7,r8,ror#13
176 add r3,r3,r12
177 eor r7,r7,r8,ror#22 @ Sigma0(a)
Alexandre Savard1b09e312012-08-07 20:33:29 -0400178 orr r0,r8,r9
179 and r2,r8,r9
180 and r0,r0,r10
181 add r7,r7,r3
182 orr r0,r0,r2 @ Maj(a,b,c)
183 add r11,r11,r3
184 add r7,r7,r0
Alexandre Savard1b09e312012-08-07 20:33:29 -0400185 ldrb r3,[r1,#3] @ 5
186 ldrb r12,[r1,#2]
187 ldrb r2,[r1,#1]
188 ldrb r0,[r1],#4
189 orr r3,r3,r12,lsl#8
190 orr r3,r3,r2,lsl#16
191 orr r3,r3,r0,lsl#24
Alexandre Savard75410672012-08-08 09:50:01 -0400192
Alexandre Savard1b09e312012-08-07 20:33:29 -0400193 ldr r12,[r14],#4 @ *K256++
Alexandre Savard75410672012-08-08 09:50:01 -0400194 mov r0,r11,ror#6
195 str r3,[sp,#5*4]
Alexandre Savard1b09e312012-08-07 20:33:29 -0400196 eor r0,r0,r11,ror#11
197 eor r2,r4,r5
Alexandre Savard1b09e312012-08-07 20:33:29 -0400198 eor r0,r0,r11,ror#25 @ Sigma1(e)
199 and r2,r2,r11
Alexandre Savard1b09e312012-08-07 20:33:29 -0400200 add r3,r3,r0
201 eor r2,r2,r5 @ Ch(e,f,g)
202 add r3,r3,r6
203 mov r6,r7,ror#2
204 add r3,r3,r2
205 eor r6,r6,r7,ror#13
206 add r3,r3,r12
207 eor r6,r6,r7,ror#22 @ Sigma0(a)
Alexandre Savard1b09e312012-08-07 20:33:29 -0400208 orr r0,r7,r8
209 and r2,r7,r8
210 and r0,r0,r9
211 add r6,r6,r3
212 orr r0,r0,r2 @ Maj(a,b,c)
213 add r10,r10,r3
214 add r6,r6,r0
Alexandre Savard1b09e312012-08-07 20:33:29 -0400215 ldrb r3,[r1,#3] @ 6
216 ldrb r12,[r1,#2]
217 ldrb r2,[r1,#1]
218 ldrb r0,[r1],#4
219 orr r3,r3,r12,lsl#8
220 orr r3,r3,r2,lsl#16
221 orr r3,r3,r0,lsl#24
Alexandre Savard75410672012-08-08 09:50:01 -0400222
Alexandre Savard1b09e312012-08-07 20:33:29 -0400223 ldr r12,[r14],#4 @ *K256++
Alexandre Savard75410672012-08-08 09:50:01 -0400224 mov r0,r10,ror#6
225 str r3,[sp,#6*4]
Alexandre Savard1b09e312012-08-07 20:33:29 -0400226 eor r0,r0,r10,ror#11
227 eor r2,r11,r4
Alexandre Savard1b09e312012-08-07 20:33:29 -0400228 eor r0,r0,r10,ror#25 @ Sigma1(e)
229 and r2,r2,r10
Alexandre Savard1b09e312012-08-07 20:33:29 -0400230 add r3,r3,r0
231 eor r2,r2,r4 @ Ch(e,f,g)
232 add r3,r3,r5
233 mov r5,r6,ror#2
234 add r3,r3,r2
235 eor r5,r5,r6,ror#13
236 add r3,r3,r12
237 eor r5,r5,r6,ror#22 @ Sigma0(a)
Alexandre Savard1b09e312012-08-07 20:33:29 -0400238 orr r0,r6,r7
239 and r2,r6,r7
240 and r0,r0,r8
241 add r5,r5,r3
242 orr r0,r0,r2 @ Maj(a,b,c)
243 add r9,r9,r3
244 add r5,r5,r0
Alexandre Savard1b09e312012-08-07 20:33:29 -0400245 ldrb r3,[r1,#3] @ 7
246 ldrb r12,[r1,#2]
247 ldrb r2,[r1,#1]
248 ldrb r0,[r1],#4
249 orr r3,r3,r12,lsl#8
250 orr r3,r3,r2,lsl#16
251 orr r3,r3,r0,lsl#24
Alexandre Savard75410672012-08-08 09:50:01 -0400252
Alexandre Savard1b09e312012-08-07 20:33:29 -0400253 ldr r12,[r14],#4 @ *K256++
Alexandre Savard75410672012-08-08 09:50:01 -0400254 mov r0,r9,ror#6
255 str r3,[sp,#7*4]
Alexandre Savard1b09e312012-08-07 20:33:29 -0400256 eor r0,r0,r9,ror#11
257 eor r2,r10,r11
Alexandre Savard1b09e312012-08-07 20:33:29 -0400258 eor r0,r0,r9,ror#25 @ Sigma1(e)
259 and r2,r2,r9
Alexandre Savard1b09e312012-08-07 20:33:29 -0400260 add r3,r3,r0
261 eor r2,r2,r11 @ Ch(e,f,g)
262 add r3,r3,r4
263 mov r4,r5,ror#2
264 add r3,r3,r2
265 eor r4,r4,r5,ror#13
266 add r3,r3,r12
267 eor r4,r4,r5,ror#22 @ Sigma0(a)
Alexandre Savard1b09e312012-08-07 20:33:29 -0400268 orr r0,r5,r6
269 and r2,r5,r6
270 and r0,r0,r7
271 add r4,r4,r3
272 orr r0,r0,r2 @ Maj(a,b,c)
273 add r8,r8,r3
274 add r4,r4,r0
Alexandre Savard1b09e312012-08-07 20:33:29 -0400275 ldrb r3,[r1,#3] @ 8
276 ldrb r12,[r1,#2]
277 ldrb r2,[r1,#1]
278 ldrb r0,[r1],#4
279 orr r3,r3,r12,lsl#8
280 orr r3,r3,r2,lsl#16
281 orr r3,r3,r0,lsl#24
Alexandre Savard75410672012-08-08 09:50:01 -0400282
Alexandre Savard1b09e312012-08-07 20:33:29 -0400283 ldr r12,[r14],#4 @ *K256++
Alexandre Savard75410672012-08-08 09:50:01 -0400284 mov r0,r8,ror#6
285 str r3,[sp,#8*4]
Alexandre Savard1b09e312012-08-07 20:33:29 -0400286 eor r0,r0,r8,ror#11
287 eor r2,r9,r10
Alexandre Savard1b09e312012-08-07 20:33:29 -0400288 eor r0,r0,r8,ror#25 @ Sigma1(e)
289 and r2,r2,r8
Alexandre Savard1b09e312012-08-07 20:33:29 -0400290 add r3,r3,r0
291 eor r2,r2,r10 @ Ch(e,f,g)
292 add r3,r3,r11
293 mov r11,r4,ror#2
294 add r3,r3,r2
295 eor r11,r11,r4,ror#13
296 add r3,r3,r12
297 eor r11,r11,r4,ror#22 @ Sigma0(a)
Alexandre Savard1b09e312012-08-07 20:33:29 -0400298 orr r0,r4,r5
299 and r2,r4,r5
300 and r0,r0,r6
301 add r11,r11,r3
302 orr r0,r0,r2 @ Maj(a,b,c)
303 add r7,r7,r3
304 add r11,r11,r0
Alexandre Savard1b09e312012-08-07 20:33:29 -0400305 ldrb r3,[r1,#3] @ 9
306 ldrb r12,[r1,#2]
307 ldrb r2,[r1,#1]
308 ldrb r0,[r1],#4
309 orr r3,r3,r12,lsl#8
310 orr r3,r3,r2,lsl#16
311 orr r3,r3,r0,lsl#24
Alexandre Savard75410672012-08-08 09:50:01 -0400312
Alexandre Savard1b09e312012-08-07 20:33:29 -0400313 ldr r12,[r14],#4 @ *K256++
Alexandre Savard75410672012-08-08 09:50:01 -0400314 mov r0,r7,ror#6
315 str r3,[sp,#9*4]
Alexandre Savard1b09e312012-08-07 20:33:29 -0400316 eor r0,r0,r7,ror#11
317 eor r2,r8,r9
Alexandre Savard1b09e312012-08-07 20:33:29 -0400318 eor r0,r0,r7,ror#25 @ Sigma1(e)
319 and r2,r2,r7
Alexandre Savard1b09e312012-08-07 20:33:29 -0400320 add r3,r3,r0
321 eor r2,r2,r9 @ Ch(e,f,g)
322 add r3,r3,r10
323 mov r10,r11,ror#2
324 add r3,r3,r2
325 eor r10,r10,r11,ror#13
326 add r3,r3,r12
327 eor r10,r10,r11,ror#22 @ Sigma0(a)
Alexandre Savard1b09e312012-08-07 20:33:29 -0400328 orr r0,r11,r4
329 and r2,r11,r4
330 and r0,r0,r5
331 add r10,r10,r3
332 orr r0,r0,r2 @ Maj(a,b,c)
333 add r6,r6,r3
334 add r10,r10,r0
Alexandre Savard1b09e312012-08-07 20:33:29 -0400335 ldrb r3,[r1,#3] @ 10
336 ldrb r12,[r1,#2]
337 ldrb r2,[r1,#1]
338 ldrb r0,[r1],#4
339 orr r3,r3,r12,lsl#8
340 orr r3,r3,r2,lsl#16
341 orr r3,r3,r0,lsl#24
Alexandre Savard75410672012-08-08 09:50:01 -0400342
Alexandre Savard1b09e312012-08-07 20:33:29 -0400343 ldr r12,[r14],#4 @ *K256++
Alexandre Savard75410672012-08-08 09:50:01 -0400344 mov r0,r6,ror#6
345 str r3,[sp,#10*4]
Alexandre Savard1b09e312012-08-07 20:33:29 -0400346 eor r0,r0,r6,ror#11
347 eor r2,r7,r8
Alexandre Savard1b09e312012-08-07 20:33:29 -0400348 eor r0,r0,r6,ror#25 @ Sigma1(e)
349 and r2,r2,r6
Alexandre Savard1b09e312012-08-07 20:33:29 -0400350 add r3,r3,r0
351 eor r2,r2,r8 @ Ch(e,f,g)
352 add r3,r3,r9
353 mov r9,r10,ror#2
354 add r3,r3,r2
355 eor r9,r9,r10,ror#13
356 add r3,r3,r12
357 eor r9,r9,r10,ror#22 @ Sigma0(a)
Alexandre Savard1b09e312012-08-07 20:33:29 -0400358 orr r0,r10,r11
359 and r2,r10,r11
360 and r0,r0,r4
361 add r9,r9,r3
362 orr r0,r0,r2 @ Maj(a,b,c)
363 add r5,r5,r3
364 add r9,r9,r0
Alexandre Savard1b09e312012-08-07 20:33:29 -0400365 ldrb r3,[r1,#3] @ 11
366 ldrb r12,[r1,#2]
367 ldrb r2,[r1,#1]
368 ldrb r0,[r1],#4
369 orr r3,r3,r12,lsl#8
370 orr r3,r3,r2,lsl#16
371 orr r3,r3,r0,lsl#24
Alexandre Savard75410672012-08-08 09:50:01 -0400372
Alexandre Savard1b09e312012-08-07 20:33:29 -0400373 ldr r12,[r14],#4 @ *K256++
Alexandre Savard75410672012-08-08 09:50:01 -0400374 mov r0,r5,ror#6
375 str r3,[sp,#11*4]
Alexandre Savard1b09e312012-08-07 20:33:29 -0400376 eor r0,r0,r5,ror#11
377 eor r2,r6,r7
Alexandre Savard1b09e312012-08-07 20:33:29 -0400378 eor r0,r0,r5,ror#25 @ Sigma1(e)
379 and r2,r2,r5
Alexandre Savard1b09e312012-08-07 20:33:29 -0400380 add r3,r3,r0
381 eor r2,r2,r7 @ Ch(e,f,g)
382 add r3,r3,r8
383 mov r8,r9,ror#2
384 add r3,r3,r2
385 eor r8,r8,r9,ror#13
386 add r3,r3,r12
387 eor r8,r8,r9,ror#22 @ Sigma0(a)
Alexandre Savard1b09e312012-08-07 20:33:29 -0400388 orr r0,r9,r10
389 and r2,r9,r10
390 and r0,r0,r11
391 add r8,r8,r3
392 orr r0,r0,r2 @ Maj(a,b,c)
393 add r4,r4,r3
394 add r8,r8,r0
Alexandre Savard1b09e312012-08-07 20:33:29 -0400395 ldrb r3,[r1,#3] @ 12
396 ldrb r12,[r1,#2]
397 ldrb r2,[r1,#1]
398 ldrb r0,[r1],#4
399 orr r3,r3,r12,lsl#8
400 orr r3,r3,r2,lsl#16
401 orr r3,r3,r0,lsl#24
Alexandre Savard75410672012-08-08 09:50:01 -0400402
Alexandre Savard1b09e312012-08-07 20:33:29 -0400403 ldr r12,[r14],#4 @ *K256++
Alexandre Savard75410672012-08-08 09:50:01 -0400404 mov r0,r4,ror#6
405 str r3,[sp,#12*4]
Alexandre Savard1b09e312012-08-07 20:33:29 -0400406 eor r0,r0,r4,ror#11
407 eor r2,r5,r6
Alexandre Savard1b09e312012-08-07 20:33:29 -0400408 eor r0,r0,r4,ror#25 @ Sigma1(e)
409 and r2,r2,r4
Alexandre Savard1b09e312012-08-07 20:33:29 -0400410 add r3,r3,r0
411 eor r2,r2,r6 @ Ch(e,f,g)
412 add r3,r3,r7
413 mov r7,r8,ror#2
414 add r3,r3,r2
415 eor r7,r7,r8,ror#13
416 add r3,r3,r12
417 eor r7,r7,r8,ror#22 @ Sigma0(a)
Alexandre Savard1b09e312012-08-07 20:33:29 -0400418 orr r0,r8,r9
419 and r2,r8,r9
420 and r0,r0,r10
421 add r7,r7,r3
422 orr r0,r0,r2 @ Maj(a,b,c)
423 add r11,r11,r3
424 add r7,r7,r0
Alexandre Savard1b09e312012-08-07 20:33:29 -0400425 ldrb r3,[r1,#3] @ 13
426 ldrb r12,[r1,#2]
427 ldrb r2,[r1,#1]
428 ldrb r0,[r1],#4
429 orr r3,r3,r12,lsl#8
430 orr r3,r3,r2,lsl#16
431 orr r3,r3,r0,lsl#24
Alexandre Savard75410672012-08-08 09:50:01 -0400432
Alexandre Savard1b09e312012-08-07 20:33:29 -0400433 ldr r12,[r14],#4 @ *K256++
Alexandre Savard75410672012-08-08 09:50:01 -0400434 mov r0,r11,ror#6
435 str r3,[sp,#13*4]
Alexandre Savard1b09e312012-08-07 20:33:29 -0400436 eor r0,r0,r11,ror#11
437 eor r2,r4,r5
Alexandre Savard1b09e312012-08-07 20:33:29 -0400438 eor r0,r0,r11,ror#25 @ Sigma1(e)
439 and r2,r2,r11
Alexandre Savard1b09e312012-08-07 20:33:29 -0400440 add r3,r3,r0
441 eor r2,r2,r5 @ Ch(e,f,g)
442 add r3,r3,r6
443 mov r6,r7,ror#2
444 add r3,r3,r2
445 eor r6,r6,r7,ror#13
446 add r3,r3,r12
447 eor r6,r6,r7,ror#22 @ Sigma0(a)
Alexandre Savard1b09e312012-08-07 20:33:29 -0400448 orr r0,r7,r8
449 and r2,r7,r8
450 and r0,r0,r9
451 add r6,r6,r3
452 orr r0,r0,r2 @ Maj(a,b,c)
453 add r10,r10,r3
454 add r6,r6,r0
Alexandre Savard1b09e312012-08-07 20:33:29 -0400455 ldrb r3,[r1,#3] @ 14
456 ldrb r12,[r1,#2]
457 ldrb r2,[r1,#1]
458 ldrb r0,[r1],#4
459 orr r3,r3,r12,lsl#8
460 orr r3,r3,r2,lsl#16
461 orr r3,r3,r0,lsl#24
Alexandre Savard75410672012-08-08 09:50:01 -0400462
Alexandre Savard1b09e312012-08-07 20:33:29 -0400463 ldr r12,[r14],#4 @ *K256++
Alexandre Savard75410672012-08-08 09:50:01 -0400464 mov r0,r10,ror#6
465 str r3,[sp,#14*4]
Alexandre Savard1b09e312012-08-07 20:33:29 -0400466 eor r0,r0,r10,ror#11
467 eor r2,r11,r4
Alexandre Savard1b09e312012-08-07 20:33:29 -0400468 eor r0,r0,r10,ror#25 @ Sigma1(e)
469 and r2,r2,r10
Alexandre Savard1b09e312012-08-07 20:33:29 -0400470 add r3,r3,r0
471 eor r2,r2,r4 @ Ch(e,f,g)
472 add r3,r3,r5
473 mov r5,r6,ror#2
474 add r3,r3,r2
475 eor r5,r5,r6,ror#13
476 add r3,r3,r12
477 eor r5,r5,r6,ror#22 @ Sigma0(a)
Alexandre Savard1b09e312012-08-07 20:33:29 -0400478 orr r0,r6,r7
479 and r2,r6,r7
480 and r0,r0,r8
481 add r5,r5,r3
482 orr r0,r0,r2 @ Maj(a,b,c)
483 add r9,r9,r3
484 add r5,r5,r0
Alexandre Savard1b09e312012-08-07 20:33:29 -0400485 ldrb r3,[r1,#3] @ 15
486 ldrb r12,[r1,#2]
487 ldrb r2,[r1,#1]
488 ldrb r0,[r1],#4
489 orr r3,r3,r12,lsl#8
490 orr r3,r3,r2,lsl#16
491 orr r3,r3,r0,lsl#24
Alexandre Savard75410672012-08-08 09:50:01 -0400492 str r1,[sp,#17*4]
Alexandre Savard1b09e312012-08-07 20:33:29 -0400493 ldr r12,[r14],#4 @ *K256++
Alexandre Savard75410672012-08-08 09:50:01 -0400494 mov r0,r9,ror#6
495 str r3,[sp,#15*4]
Alexandre Savard1b09e312012-08-07 20:33:29 -0400496 eor r0,r0,r9,ror#11
497 eor r2,r10,r11
Alexandre Savard1b09e312012-08-07 20:33:29 -0400498 eor r0,r0,r9,ror#25 @ Sigma1(e)
499 and r2,r2,r9
Alexandre Savard1b09e312012-08-07 20:33:29 -0400500 add r3,r3,r0
501 eor r2,r2,r11 @ Ch(e,f,g)
502 add r3,r3,r4
503 mov r4,r5,ror#2
504 add r3,r3,r2
505 eor r4,r4,r5,ror#13
506 add r3,r3,r12
507 eor r4,r4,r5,ror#22 @ Sigma0(a)
Alexandre Savard1b09e312012-08-07 20:33:29 -0400508 orr r0,r5,r6
509 and r2,r5,r6
510 and r0,r0,r7
511 add r4,r4,r3
512 orr r0,r0,r2 @ Maj(a,b,c)
513 add r8,r8,r3
514 add r4,r4,r0
515.Lrounds_16_xx:
Alexandre Savard75410672012-08-08 09:50:01 -0400516 ldr r2,[sp,#1*4] @ 16
Alexandre Savard1b09e312012-08-07 20:33:29 -0400517 ldr r12,[sp,#14*4]
Alexandre Savard1b09e312012-08-07 20:33:29 -0400518 ldr r3,[sp,#0*4]
Alexandre Savard75410672012-08-08 09:50:01 -0400519 mov r0,r2,ror#7
520 ldr r1,[sp,#9*4]
521 eor r0,r0,r2,ror#18
522 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])
523 mov r2,r12,ror#17
Alexandre Savard1b09e312012-08-07 20:33:29 -0400524 add r3,r3,r0
Alexandre Savard75410672012-08-08 09:50:01 -0400525 eor r2,r2,r12,ror#19
526 add r3,r3,r1
527 eor r2,r2,r12,lsr#10 @ sigma1(X[i+14])
Alexandre Savard1b09e312012-08-07 20:33:29 -0400528 add r3,r3,r2
Alexandre Savard1b09e312012-08-07 20:33:29 -0400529 ldr r12,[r14],#4 @ *K256++
Alexandre Savard75410672012-08-08 09:50:01 -0400530 mov r0,r8,ror#6
531 str r3,[sp,#0*4]
Alexandre Savard1b09e312012-08-07 20:33:29 -0400532 eor r0,r0,r8,ror#11
533 eor r2,r9,r10
Alexandre Savard1b09e312012-08-07 20:33:29 -0400534 eor r0,r0,r8,ror#25 @ Sigma1(e)
535 and r2,r2,r8
Alexandre Savard1b09e312012-08-07 20:33:29 -0400536 add r3,r3,r0
537 eor r2,r2,r10 @ Ch(e,f,g)
538 add r3,r3,r11
539 mov r11,r4,ror#2
540 add r3,r3,r2
541 eor r11,r11,r4,ror#13
542 add r3,r3,r12
543 eor r11,r11,r4,ror#22 @ Sigma0(a)
Alexandre Savard1b09e312012-08-07 20:33:29 -0400544 orr r0,r4,r5
545 and r2,r4,r5
546 and r0,r0,r6
547 add r11,r11,r3
548 orr r0,r0,r2 @ Maj(a,b,c)
549 add r7,r7,r3
550 add r11,r11,r0
Alexandre Savard75410672012-08-08 09:50:01 -0400551 ldr r2,[sp,#2*4] @ 17
Alexandre Savard1b09e312012-08-07 20:33:29 -0400552 ldr r12,[sp,#15*4]
Alexandre Savard1b09e312012-08-07 20:33:29 -0400553 ldr r3,[sp,#1*4]
Alexandre Savard75410672012-08-08 09:50:01 -0400554 mov r0,r2,ror#7
555 ldr r1,[sp,#10*4]
556 eor r0,r0,r2,ror#18
557 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])
558 mov r2,r12,ror#17
Alexandre Savard1b09e312012-08-07 20:33:29 -0400559 add r3,r3,r0
Alexandre Savard75410672012-08-08 09:50:01 -0400560 eor r2,r2,r12,ror#19
561 add r3,r3,r1
562 eor r2,r2,r12,lsr#10 @ sigma1(X[i+14])
Alexandre Savard1b09e312012-08-07 20:33:29 -0400563 add r3,r3,r2
Alexandre Savard1b09e312012-08-07 20:33:29 -0400564 ldr r12,[r14],#4 @ *K256++
Alexandre Savard75410672012-08-08 09:50:01 -0400565 mov r0,r7,ror#6
566 str r3,[sp,#1*4]
Alexandre Savard1b09e312012-08-07 20:33:29 -0400567 eor r0,r0,r7,ror#11
568 eor r2,r8,r9
Alexandre Savard1b09e312012-08-07 20:33:29 -0400569 eor r0,r0,r7,ror#25 @ Sigma1(e)
570 and r2,r2,r7
Alexandre Savard1b09e312012-08-07 20:33:29 -0400571 add r3,r3,r0
572 eor r2,r2,r9 @ Ch(e,f,g)
573 add r3,r3,r10
574 mov r10,r11,ror#2
575 add r3,r3,r2
576 eor r10,r10,r11,ror#13
577 add r3,r3,r12
578 eor r10,r10,r11,ror#22 @ Sigma0(a)
Alexandre Savard1b09e312012-08-07 20:33:29 -0400579 orr r0,r11,r4
580 and r2,r11,r4
581 and r0,r0,r5
582 add r10,r10,r3
583 orr r0,r0,r2 @ Maj(a,b,c)
584 add r6,r6,r3
585 add r10,r10,r0
Alexandre Savard75410672012-08-08 09:50:01 -0400586 ldr r2,[sp,#3*4] @ 18
Alexandre Savard1b09e312012-08-07 20:33:29 -0400587 ldr r12,[sp,#0*4]
Alexandre Savard1b09e312012-08-07 20:33:29 -0400588 ldr r3,[sp,#2*4]
Alexandre Savard75410672012-08-08 09:50:01 -0400589 mov r0,r2,ror#7
590 ldr r1,[sp,#11*4]
591 eor r0,r0,r2,ror#18
592 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])
593 mov r2,r12,ror#17
Alexandre Savard1b09e312012-08-07 20:33:29 -0400594 add r3,r3,r0
Alexandre Savard75410672012-08-08 09:50:01 -0400595 eor r2,r2,r12,ror#19
596 add r3,r3,r1
597 eor r2,r2,r12,lsr#10 @ sigma1(X[i+14])
Alexandre Savard1b09e312012-08-07 20:33:29 -0400598 add r3,r3,r2
Alexandre Savard1b09e312012-08-07 20:33:29 -0400599 ldr r12,[r14],#4 @ *K256++
Alexandre Savard75410672012-08-08 09:50:01 -0400600 mov r0,r6,ror#6
601 str r3,[sp,#2*4]
Alexandre Savard1b09e312012-08-07 20:33:29 -0400602 eor r0,r0,r6,ror#11
603 eor r2,r7,r8
Alexandre Savard1b09e312012-08-07 20:33:29 -0400604 eor r0,r0,r6,ror#25 @ Sigma1(e)
605 and r2,r2,r6
Alexandre Savard1b09e312012-08-07 20:33:29 -0400606 add r3,r3,r0
607 eor r2,r2,r8 @ Ch(e,f,g)
608 add r3,r3,r9
609 mov r9,r10,ror#2
610 add r3,r3,r2
611 eor r9,r9,r10,ror#13
612 add r3,r3,r12
613 eor r9,r9,r10,ror#22 @ Sigma0(a)
Alexandre Savard1b09e312012-08-07 20:33:29 -0400614 orr r0,r10,r11
615 and r2,r10,r11
616 and r0,r0,r4
617 add r9,r9,r3
618 orr r0,r0,r2 @ Maj(a,b,c)
619 add r5,r5,r3
620 add r9,r9,r0
Alexandre Savard75410672012-08-08 09:50:01 -0400621 ldr r2,[sp,#4*4] @ 19
Alexandre Savard1b09e312012-08-07 20:33:29 -0400622 ldr r12,[sp,#1*4]
Alexandre Savard1b09e312012-08-07 20:33:29 -0400623 ldr r3,[sp,#3*4]
Alexandre Savard75410672012-08-08 09:50:01 -0400624 mov r0,r2,ror#7
625 ldr r1,[sp,#12*4]
626 eor r0,r0,r2,ror#18
627 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])
628 mov r2,r12,ror#17
Alexandre Savard1b09e312012-08-07 20:33:29 -0400629 add r3,r3,r0
Alexandre Savard75410672012-08-08 09:50:01 -0400630 eor r2,r2,r12,ror#19
631 add r3,r3,r1
632 eor r2,r2,r12,lsr#10 @ sigma1(X[i+14])
Alexandre Savard1b09e312012-08-07 20:33:29 -0400633 add r3,r3,r2
Alexandre Savard1b09e312012-08-07 20:33:29 -0400634 ldr r12,[r14],#4 @ *K256++
Alexandre Savard75410672012-08-08 09:50:01 -0400635 mov r0,r5,ror#6
636 str r3,[sp,#3*4]
Alexandre Savard1b09e312012-08-07 20:33:29 -0400637 eor r0,r0,r5,ror#11
638 eor r2,r6,r7
Alexandre Savard1b09e312012-08-07 20:33:29 -0400639 eor r0,r0,r5,ror#25 @ Sigma1(e)
640 and r2,r2,r5
Alexandre Savard1b09e312012-08-07 20:33:29 -0400641 add r3,r3,r0
642 eor r2,r2,r7 @ Ch(e,f,g)
643 add r3,r3,r8
644 mov r8,r9,ror#2
645 add r3,r3,r2
646 eor r8,r8,r9,ror#13
647 add r3,r3,r12
648 eor r8,r8,r9,ror#22 @ Sigma0(a)
Alexandre Savard1b09e312012-08-07 20:33:29 -0400649 orr r0,r9,r10
650 and r2,r9,r10
651 and r0,r0,r11
652 add r8,r8,r3
653 orr r0,r0,r2 @ Maj(a,b,c)
654 add r4,r4,r3
655 add r8,r8,r0
Alexandre Savard75410672012-08-08 09:50:01 -0400656 ldr r2,[sp,#5*4] @ 20
Alexandre Savard1b09e312012-08-07 20:33:29 -0400657 ldr r12,[sp,#2*4]
Alexandre Savard1b09e312012-08-07 20:33:29 -0400658 ldr r3,[sp,#4*4]
Alexandre Savard75410672012-08-08 09:50:01 -0400659 mov r0,r2,ror#7
660 ldr r1,[sp,#13*4]
661 eor r0,r0,r2,ror#18
662 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])
663 mov r2,r12,ror#17
Alexandre Savard1b09e312012-08-07 20:33:29 -0400664 add r3,r3,r0
Alexandre Savard75410672012-08-08 09:50:01 -0400665 eor r2,r2,r12,ror#19
666 add r3,r3,r1
667 eor r2,r2,r12,lsr#10 @ sigma1(X[i+14])
Alexandre Savard1b09e312012-08-07 20:33:29 -0400668 add r3,r3,r2
Alexandre Savard1b09e312012-08-07 20:33:29 -0400669 ldr r12,[r14],#4 @ *K256++
Alexandre Savard75410672012-08-08 09:50:01 -0400670 mov r0,r4,ror#6
671 str r3,[sp,#4*4]
Alexandre Savard1b09e312012-08-07 20:33:29 -0400672 eor r0,r0,r4,ror#11
673 eor r2,r5,r6
Alexandre Savard1b09e312012-08-07 20:33:29 -0400674 eor r0,r0,r4,ror#25 @ Sigma1(e)
675 and r2,r2,r4
Alexandre Savard1b09e312012-08-07 20:33:29 -0400676 add r3,r3,r0
677 eor r2,r2,r6 @ Ch(e,f,g)
678 add r3,r3,r7
679 mov r7,r8,ror#2
680 add r3,r3,r2
681 eor r7,r7,r8,ror#13
682 add r3,r3,r12
683 eor r7,r7,r8,ror#22 @ Sigma0(a)
Alexandre Savard1b09e312012-08-07 20:33:29 -0400684 orr r0,r8,r9
685 and r2,r8,r9
686 and r0,r0,r10
687 add r7,r7,r3
688 orr r0,r0,r2 @ Maj(a,b,c)
689 add r11,r11,r3
690 add r7,r7,r0
Alexandre Savard75410672012-08-08 09:50:01 -0400691 ldr r2,[sp,#6*4] @ 21
Alexandre Savard1b09e312012-08-07 20:33:29 -0400692 ldr r12,[sp,#3*4]
Alexandre Savard1b09e312012-08-07 20:33:29 -0400693 ldr r3,[sp,#5*4]
Alexandre Savard75410672012-08-08 09:50:01 -0400694 mov r0,r2,ror#7
695 ldr r1,[sp,#14*4]
696 eor r0,r0,r2,ror#18
697 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])
698 mov r2,r12,ror#17
Alexandre Savard1b09e312012-08-07 20:33:29 -0400699 add r3,r3,r0
Alexandre Savard75410672012-08-08 09:50:01 -0400700 eor r2,r2,r12,ror#19
701 add r3,r3,r1
702 eor r2,r2,r12,lsr#10 @ sigma1(X[i+14])
Alexandre Savard1b09e312012-08-07 20:33:29 -0400703 add r3,r3,r2
Alexandre Savard1b09e312012-08-07 20:33:29 -0400704 ldr r12,[r14],#4 @ *K256++
Alexandre Savard75410672012-08-08 09:50:01 -0400705 mov r0,r11,ror#6
706 str r3,[sp,#5*4]
Alexandre Savard1b09e312012-08-07 20:33:29 -0400707 eor r0,r0,r11,ror#11
708 eor r2,r4,r5
Alexandre Savard1b09e312012-08-07 20:33:29 -0400709 eor r0,r0,r11,ror#25 @ Sigma1(e)
710 and r2,r2,r11
Alexandre Savard1b09e312012-08-07 20:33:29 -0400711 add r3,r3,r0
712 eor r2,r2,r5 @ Ch(e,f,g)
713 add r3,r3,r6
714 mov r6,r7,ror#2
715 add r3,r3,r2
716 eor r6,r6,r7,ror#13
717 add r3,r3,r12
718 eor r6,r6,r7,ror#22 @ Sigma0(a)
Alexandre Savard1b09e312012-08-07 20:33:29 -0400719 orr r0,r7,r8
720 and r2,r7,r8
721 and r0,r0,r9
722 add r6,r6,r3
723 orr r0,r0,r2 @ Maj(a,b,c)
724 add r10,r10,r3
725 add r6,r6,r0
Alexandre Savard75410672012-08-08 09:50:01 -0400726 ldr r2,[sp,#7*4] @ 22
Alexandre Savard1b09e312012-08-07 20:33:29 -0400727 ldr r12,[sp,#4*4]
Alexandre Savard1b09e312012-08-07 20:33:29 -0400728 ldr r3,[sp,#6*4]
Alexandre Savard75410672012-08-08 09:50:01 -0400729 mov r0,r2,ror#7
730 ldr r1,[sp,#15*4]
731 eor r0,r0,r2,ror#18
732 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])
733 mov r2,r12,ror#17
Alexandre Savard1b09e312012-08-07 20:33:29 -0400734 add r3,r3,r0
Alexandre Savard75410672012-08-08 09:50:01 -0400735 eor r2,r2,r12,ror#19
736 add r3,r3,r1
737 eor r2,r2,r12,lsr#10 @ sigma1(X[i+14])
Alexandre Savard1b09e312012-08-07 20:33:29 -0400738 add r3,r3,r2
Alexandre Savard1b09e312012-08-07 20:33:29 -0400739 ldr r12,[r14],#4 @ *K256++
Alexandre Savard75410672012-08-08 09:50:01 -0400740 mov r0,r10,ror#6
741 str r3,[sp,#6*4]
Alexandre Savard1b09e312012-08-07 20:33:29 -0400742 eor r0,r0,r10,ror#11
743 eor r2,r11,r4
Alexandre Savard1b09e312012-08-07 20:33:29 -0400744 eor r0,r0,r10,ror#25 @ Sigma1(e)
745 and r2,r2,r10
Alexandre Savard1b09e312012-08-07 20:33:29 -0400746 add r3,r3,r0
747 eor r2,r2,r4 @ Ch(e,f,g)
748 add r3,r3,r5
749 mov r5,r6,ror#2
750 add r3,r3,r2
751 eor r5,r5,r6,ror#13
752 add r3,r3,r12
753 eor r5,r5,r6,ror#22 @ Sigma0(a)
Alexandre Savard1b09e312012-08-07 20:33:29 -0400754 orr r0,r6,r7
755 and r2,r6,r7
756 and r0,r0,r8
757 add r5,r5,r3
758 orr r0,r0,r2 @ Maj(a,b,c)
759 add r9,r9,r3
760 add r5,r5,r0
Alexandre Savard75410672012-08-08 09:50:01 -0400761 ldr r2,[sp,#8*4] @ 23
Alexandre Savard1b09e312012-08-07 20:33:29 -0400762 ldr r12,[sp,#5*4]
Alexandre Savard1b09e312012-08-07 20:33:29 -0400763 ldr r3,[sp,#7*4]
Alexandre Savard75410672012-08-08 09:50:01 -0400764 mov r0,r2,ror#7
765 ldr r1,[sp,#0*4]
766 eor r0,r0,r2,ror#18
767 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])
768 mov r2,r12,ror#17
Alexandre Savard1b09e312012-08-07 20:33:29 -0400769 add r3,r3,r0
Alexandre Savard75410672012-08-08 09:50:01 -0400770 eor r2,r2,r12,ror#19
771 add r3,r3,r1
772 eor r2,r2,r12,lsr#10 @ sigma1(X[i+14])
Alexandre Savard1b09e312012-08-07 20:33:29 -0400773 add r3,r3,r2
Alexandre Savard1b09e312012-08-07 20:33:29 -0400774 ldr r12,[r14],#4 @ *K256++
Alexandre Savard75410672012-08-08 09:50:01 -0400775 mov r0,r9,ror#6
776 str r3,[sp,#7*4]
Alexandre Savard1b09e312012-08-07 20:33:29 -0400777 eor r0,r0,r9,ror#11
778 eor r2,r10,r11
Alexandre Savard1b09e312012-08-07 20:33:29 -0400779 eor r0,r0,r9,ror#25 @ Sigma1(e)
780 and r2,r2,r9
Alexandre Savard1b09e312012-08-07 20:33:29 -0400781 add r3,r3,r0
782 eor r2,r2,r11 @ Ch(e,f,g)
783 add r3,r3,r4
784 mov r4,r5,ror#2
785 add r3,r3,r2
786 eor r4,r4,r5,ror#13
787 add r3,r3,r12
788 eor r4,r4,r5,ror#22 @ Sigma0(a)
Alexandre Savard1b09e312012-08-07 20:33:29 -0400789 orr r0,r5,r6
790 and r2,r5,r6
791 and r0,r0,r7
792 add r4,r4,r3
793 orr r0,r0,r2 @ Maj(a,b,c)
794 add r8,r8,r3
795 add r4,r4,r0
Alexandre Savard75410672012-08-08 09:50:01 -0400796 ldr r2,[sp,#9*4] @ 24
Alexandre Savard1b09e312012-08-07 20:33:29 -0400797 ldr r12,[sp,#6*4]
Alexandre Savard1b09e312012-08-07 20:33:29 -0400798 ldr r3,[sp,#8*4]
Alexandre Savard75410672012-08-08 09:50:01 -0400799 mov r0,r2,ror#7
800 ldr r1,[sp,#1*4]
801 eor r0,r0,r2,ror#18
802 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])
803 mov r2,r12,ror#17
Alexandre Savard1b09e312012-08-07 20:33:29 -0400804 add r3,r3,r0
Alexandre Savard75410672012-08-08 09:50:01 -0400805 eor r2,r2,r12,ror#19
806 add r3,r3,r1
807 eor r2,r2,r12,lsr#10 @ sigma1(X[i+14])
Alexandre Savard1b09e312012-08-07 20:33:29 -0400808 add r3,r3,r2
Alexandre Savard1b09e312012-08-07 20:33:29 -0400809 ldr r12,[r14],#4 @ *K256++
Alexandre Savard75410672012-08-08 09:50:01 -0400810 mov r0,r8,ror#6
811 str r3,[sp,#8*4]
Alexandre Savard1b09e312012-08-07 20:33:29 -0400812 eor r0,r0,r8,ror#11
813 eor r2,r9,r10
Alexandre Savard1b09e312012-08-07 20:33:29 -0400814 eor r0,r0,r8,ror#25 @ Sigma1(e)
815 and r2,r2,r8
Alexandre Savard1b09e312012-08-07 20:33:29 -0400816 add r3,r3,r0
817 eor r2,r2,r10 @ Ch(e,f,g)
818 add r3,r3,r11
819 mov r11,r4,ror#2
820 add r3,r3,r2
821 eor r11,r11,r4,ror#13
822 add r3,r3,r12
823 eor r11,r11,r4,ror#22 @ Sigma0(a)
Alexandre Savard1b09e312012-08-07 20:33:29 -0400824 orr r0,r4,r5
825 and r2,r4,r5
826 and r0,r0,r6
827 add r11,r11,r3
828 orr r0,r0,r2 @ Maj(a,b,c)
829 add r7,r7,r3
830 add r11,r11,r0
Alexandre Savard75410672012-08-08 09:50:01 -0400831 ldr r2,[sp,#10*4] @ 25
Alexandre Savard1b09e312012-08-07 20:33:29 -0400832 ldr r12,[sp,#7*4]
Alexandre Savard1b09e312012-08-07 20:33:29 -0400833 ldr r3,[sp,#9*4]
Alexandre Savard75410672012-08-08 09:50:01 -0400834 mov r0,r2,ror#7
835 ldr r1,[sp,#2*4]
836 eor r0,r0,r2,ror#18
837 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])
838 mov r2,r12,ror#17
Alexandre Savard1b09e312012-08-07 20:33:29 -0400839 add r3,r3,r0
Alexandre Savard75410672012-08-08 09:50:01 -0400840 eor r2,r2,r12,ror#19
841 add r3,r3,r1
842 eor r2,r2,r12,lsr#10 @ sigma1(X[i+14])
Alexandre Savard1b09e312012-08-07 20:33:29 -0400843 add r3,r3,r2
Alexandre Savard1b09e312012-08-07 20:33:29 -0400844 ldr r12,[r14],#4 @ *K256++
Alexandre Savard75410672012-08-08 09:50:01 -0400845 mov r0,r7,ror#6
846 str r3,[sp,#9*4]
Alexandre Savard1b09e312012-08-07 20:33:29 -0400847 eor r0,r0,r7,ror#11
848 eor r2,r8,r9
Alexandre Savard1b09e312012-08-07 20:33:29 -0400849 eor r0,r0,r7,ror#25 @ Sigma1(e)
850 and r2,r2,r7
Alexandre Savard1b09e312012-08-07 20:33:29 -0400851 add r3,r3,r0
852 eor r2,r2,r9 @ Ch(e,f,g)
853 add r3,r3,r10
854 mov r10,r11,ror#2
855 add r3,r3,r2
856 eor r10,r10,r11,ror#13
857 add r3,r3,r12
858 eor r10,r10,r11,ror#22 @ Sigma0(a)
Alexandre Savard1b09e312012-08-07 20:33:29 -0400859 orr r0,r11,r4
860 and r2,r11,r4
861 and r0,r0,r5
862 add r10,r10,r3
863 orr r0,r0,r2 @ Maj(a,b,c)
864 add r6,r6,r3
865 add r10,r10,r0
Alexandre Savard75410672012-08-08 09:50:01 -0400866 ldr r2,[sp,#11*4] @ 26
Alexandre Savard1b09e312012-08-07 20:33:29 -0400867 ldr r12,[sp,#8*4]
Alexandre Savard1b09e312012-08-07 20:33:29 -0400868 ldr r3,[sp,#10*4]
Alexandre Savard75410672012-08-08 09:50:01 -0400869 mov r0,r2,ror#7
870 ldr r1,[sp,#3*4]
871 eor r0,r0,r2,ror#18
872 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])
873 mov r2,r12,ror#17
Alexandre Savard1b09e312012-08-07 20:33:29 -0400874 add r3,r3,r0
Alexandre Savard75410672012-08-08 09:50:01 -0400875 eor r2,r2,r12,ror#19
876 add r3,r3,r1
877 eor r2,r2,r12,lsr#10 @ sigma1(X[i+14])
Alexandre Savard1b09e312012-08-07 20:33:29 -0400878 add r3,r3,r2
Alexandre Savard1b09e312012-08-07 20:33:29 -0400879 ldr r12,[r14],#4 @ *K256++
Alexandre Savard75410672012-08-08 09:50:01 -0400880 mov r0,r6,ror#6
881 str r3,[sp,#10*4]
Alexandre Savard1b09e312012-08-07 20:33:29 -0400882 eor r0,r0,r6,ror#11
883 eor r2,r7,r8
Alexandre Savard1b09e312012-08-07 20:33:29 -0400884 eor r0,r0,r6,ror#25 @ Sigma1(e)
885 and r2,r2,r6
Alexandre Savard1b09e312012-08-07 20:33:29 -0400886 add r3,r3,r0
887 eor r2,r2,r8 @ Ch(e,f,g)
888 add r3,r3,r9
889 mov r9,r10,ror#2
890 add r3,r3,r2
891 eor r9,r9,r10,ror#13
892 add r3,r3,r12
893 eor r9,r9,r10,ror#22 @ Sigma0(a)
Alexandre Savard1b09e312012-08-07 20:33:29 -0400894 orr r0,r10,r11
895 and r2,r10,r11
896 and r0,r0,r4
897 add r9,r9,r3
898 orr r0,r0,r2 @ Maj(a,b,c)
899 add r5,r5,r3
900 add r9,r9,r0
Alexandre Savard75410672012-08-08 09:50:01 -0400901 ldr r2,[sp,#12*4] @ 27
Alexandre Savard1b09e312012-08-07 20:33:29 -0400902 ldr r12,[sp,#9*4]
Alexandre Savard1b09e312012-08-07 20:33:29 -0400903 ldr r3,[sp,#11*4]
Alexandre Savard75410672012-08-08 09:50:01 -0400904 mov r0,r2,ror#7
905 ldr r1,[sp,#4*4]
906 eor r0,r0,r2,ror#18
907 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])
908 mov r2,r12,ror#17
Alexandre Savard1b09e312012-08-07 20:33:29 -0400909 add r3,r3,r0
Alexandre Savard75410672012-08-08 09:50:01 -0400910 eor r2,r2,r12,ror#19
911 add r3,r3,r1
912 eor r2,r2,r12,lsr#10 @ sigma1(X[i+14])
Alexandre Savard1b09e312012-08-07 20:33:29 -0400913 add r3,r3,r2
Alexandre Savard1b09e312012-08-07 20:33:29 -0400914 ldr r12,[r14],#4 @ *K256++
Alexandre Savard75410672012-08-08 09:50:01 -0400915 mov r0,r5,ror#6
916 str r3,[sp,#11*4]
Alexandre Savard1b09e312012-08-07 20:33:29 -0400917 eor r0,r0,r5,ror#11
918 eor r2,r6,r7
Alexandre Savard1b09e312012-08-07 20:33:29 -0400919 eor r0,r0,r5,ror#25 @ Sigma1(e)
920 and r2,r2,r5
Alexandre Savard1b09e312012-08-07 20:33:29 -0400921 add r3,r3,r0
922 eor r2,r2,r7 @ Ch(e,f,g)
923 add r3,r3,r8
924 mov r8,r9,ror#2
925 add r3,r3,r2
926 eor r8,r8,r9,ror#13
927 add r3,r3,r12
928 eor r8,r8,r9,ror#22 @ Sigma0(a)
Alexandre Savard1b09e312012-08-07 20:33:29 -0400929 orr r0,r9,r10
930 and r2,r9,r10
931 and r0,r0,r11
932 add r8,r8,r3
933 orr r0,r0,r2 @ Maj(a,b,c)
934 add r4,r4,r3
935 add r8,r8,r0
Alexandre Savard75410672012-08-08 09:50:01 -0400936 ldr r2,[sp,#13*4] @ 28
Alexandre Savard1b09e312012-08-07 20:33:29 -0400937 ldr r12,[sp,#10*4]
Alexandre Savard1b09e312012-08-07 20:33:29 -0400938 ldr r3,[sp,#12*4]
Alexandre Savard75410672012-08-08 09:50:01 -0400939 mov r0,r2,ror#7
940 ldr r1,[sp,#5*4]
941 eor r0,r0,r2,ror#18
942 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])
943 mov r2,r12,ror#17
Alexandre Savard1b09e312012-08-07 20:33:29 -0400944 add r3,r3,r0
Alexandre Savard75410672012-08-08 09:50:01 -0400945 eor r2,r2,r12,ror#19
946 add r3,r3,r1
947 eor r2,r2,r12,lsr#10 @ sigma1(X[i+14])
Alexandre Savard1b09e312012-08-07 20:33:29 -0400948 add r3,r3,r2
Alexandre Savard1b09e312012-08-07 20:33:29 -0400949 ldr r12,[r14],#4 @ *K256++
Alexandre Savard75410672012-08-08 09:50:01 -0400950 mov r0,r4,ror#6
951 str r3,[sp,#12*4]
Alexandre Savard1b09e312012-08-07 20:33:29 -0400952 eor r0,r0,r4,ror#11
953 eor r2,r5,r6
Alexandre Savard1b09e312012-08-07 20:33:29 -0400954 eor r0,r0,r4,ror#25 @ Sigma1(e)
955 and r2,r2,r4
Alexandre Savard1b09e312012-08-07 20:33:29 -0400956 add r3,r3,r0
957 eor r2,r2,r6 @ Ch(e,f,g)
958 add r3,r3,r7
959 mov r7,r8,ror#2
960 add r3,r3,r2
961 eor r7,r7,r8,ror#13
962 add r3,r3,r12
963 eor r7,r7,r8,ror#22 @ Sigma0(a)
Alexandre Savard1b09e312012-08-07 20:33:29 -0400964 orr r0,r8,r9
965 and r2,r8,r9
966 and r0,r0,r10
967 add r7,r7,r3
968 orr r0,r0,r2 @ Maj(a,b,c)
969 add r11,r11,r3
970 add r7,r7,r0
Alexandre Savard75410672012-08-08 09:50:01 -0400971 ldr r2,[sp,#14*4] @ 29
Alexandre Savard1b09e312012-08-07 20:33:29 -0400972 ldr r12,[sp,#11*4]
Alexandre Savard1b09e312012-08-07 20:33:29 -0400973 ldr r3,[sp,#13*4]
Alexandre Savard75410672012-08-08 09:50:01 -0400974 mov r0,r2,ror#7
975 ldr r1,[sp,#6*4]
976 eor r0,r0,r2,ror#18
977 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])
978 mov r2,r12,ror#17
Alexandre Savard1b09e312012-08-07 20:33:29 -0400979 add r3,r3,r0
Alexandre Savard75410672012-08-08 09:50:01 -0400980 eor r2,r2,r12,ror#19
981 add r3,r3,r1
982 eor r2,r2,r12,lsr#10 @ sigma1(X[i+14])
Alexandre Savard1b09e312012-08-07 20:33:29 -0400983 add r3,r3,r2
Alexandre Savard1b09e312012-08-07 20:33:29 -0400984 ldr r12,[r14],#4 @ *K256++
Alexandre Savard75410672012-08-08 09:50:01 -0400985 mov r0,r11,ror#6
986 str r3,[sp,#13*4]
Alexandre Savard1b09e312012-08-07 20:33:29 -0400987 eor r0,r0,r11,ror#11
988 eor r2,r4,r5
Alexandre Savard1b09e312012-08-07 20:33:29 -0400989 eor r0,r0,r11,ror#25 @ Sigma1(e)
990 and r2,r2,r11
Alexandre Savard1b09e312012-08-07 20:33:29 -0400991 add r3,r3,r0
992 eor r2,r2,r5 @ Ch(e,f,g)
993 add r3,r3,r6
994 mov r6,r7,ror#2
995 add r3,r3,r2
996 eor r6,r6,r7,ror#13
997 add r3,r3,r12
998 eor r6,r6,r7,ror#22 @ Sigma0(a)
Alexandre Savard1b09e312012-08-07 20:33:29 -0400999 orr r0,r7,r8
1000 and r2,r7,r8
1001 and r0,r0,r9
1002 add r6,r6,r3
1003 orr r0,r0,r2 @ Maj(a,b,c)
1004 add r10,r10,r3
1005 add r6,r6,r0
Alexandre Savard75410672012-08-08 09:50:01 -04001006 ldr r2,[sp,#15*4] @ 30
Alexandre Savard1b09e312012-08-07 20:33:29 -04001007 ldr r12,[sp,#12*4]
Alexandre Savard1b09e312012-08-07 20:33:29 -04001008 ldr r3,[sp,#14*4]
Alexandre Savard75410672012-08-08 09:50:01 -04001009 mov r0,r2,ror#7
1010 ldr r1,[sp,#7*4]
1011 eor r0,r0,r2,ror#18
1012 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])
1013 mov r2,r12,ror#17
Alexandre Savard1b09e312012-08-07 20:33:29 -04001014 add r3,r3,r0
Alexandre Savard75410672012-08-08 09:50:01 -04001015 eor r2,r2,r12,ror#19
1016 add r3,r3,r1
1017 eor r2,r2,r12,lsr#10 @ sigma1(X[i+14])
Alexandre Savard1b09e312012-08-07 20:33:29 -04001018 add r3,r3,r2
Alexandre Savard1b09e312012-08-07 20:33:29 -04001019 ldr r12,[r14],#4 @ *K256++
Alexandre Savard75410672012-08-08 09:50:01 -04001020 mov r0,r10,ror#6
1021 str r3,[sp,#14*4]
Alexandre Savard1b09e312012-08-07 20:33:29 -04001022 eor r0,r0,r10,ror#11
1023 eor r2,r11,r4
Alexandre Savard1b09e312012-08-07 20:33:29 -04001024 eor r0,r0,r10,ror#25 @ Sigma1(e)
1025 and r2,r2,r10
Alexandre Savard1b09e312012-08-07 20:33:29 -04001026 add r3,r3,r0
1027 eor r2,r2,r4 @ Ch(e,f,g)
1028 add r3,r3,r5
1029 mov r5,r6,ror#2
1030 add r3,r3,r2
1031 eor r5,r5,r6,ror#13
1032 add r3,r3,r12
1033 eor r5,r5,r6,ror#22 @ Sigma0(a)
Alexandre Savard1b09e312012-08-07 20:33:29 -04001034 orr r0,r6,r7
1035 and r2,r6,r7
1036 and r0,r0,r8
1037 add r5,r5,r3
1038 orr r0,r0,r2 @ Maj(a,b,c)
1039 add r9,r9,r3
1040 add r5,r5,r0
Alexandre Savard75410672012-08-08 09:50:01 -04001041 ldr r2,[sp,#0*4] @ 31
Alexandre Savard1b09e312012-08-07 20:33:29 -04001042 ldr r12,[sp,#13*4]
Alexandre Savard1b09e312012-08-07 20:33:29 -04001043 ldr r3,[sp,#15*4]
Alexandre Savard75410672012-08-08 09:50:01 -04001044 mov r0,r2,ror#7
1045 ldr r1,[sp,#8*4]
1046 eor r0,r0,r2,ror#18
1047 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])
1048 mov r2,r12,ror#17
Alexandre Savard1b09e312012-08-07 20:33:29 -04001049 add r3,r3,r0
Alexandre Savard75410672012-08-08 09:50:01 -04001050 eor r2,r2,r12,ror#19
1051 add r3,r3,r1
1052 eor r2,r2,r12,lsr#10 @ sigma1(X[i+14])
Alexandre Savard1b09e312012-08-07 20:33:29 -04001053 add r3,r3,r2
Alexandre Savard1b09e312012-08-07 20:33:29 -04001054 ldr r12,[r14],#4 @ *K256++
Alexandre Savard75410672012-08-08 09:50:01 -04001055 mov r0,r9,ror#6
1056 str r3,[sp,#15*4]
Alexandre Savard1b09e312012-08-07 20:33:29 -04001057 eor r0,r0,r9,ror#11
1058 eor r2,r10,r11
Alexandre Savard1b09e312012-08-07 20:33:29 -04001059 eor r0,r0,r9,ror#25 @ Sigma1(e)
1060 and r2,r2,r9
Alexandre Savard1b09e312012-08-07 20:33:29 -04001061 add r3,r3,r0
1062 eor r2,r2,r11 @ Ch(e,f,g)
1063 add r3,r3,r4
1064 mov r4,r5,ror#2
1065 add r3,r3,r2
1066 eor r4,r4,r5,ror#13
1067 add r3,r3,r12
1068 eor r4,r4,r5,ror#22 @ Sigma0(a)
Alexandre Savard1b09e312012-08-07 20:33:29 -04001069 orr r0,r5,r6
1070 and r2,r5,r6
1071 and r0,r0,r7
1072 add r4,r4,r3
1073 orr r0,r0,r2 @ Maj(a,b,c)
1074 add r8,r8,r3
1075 add r4,r4,r0
1076 and r12,r12,#0xff
1077 cmp r12,#0xf2
1078 bne .Lrounds_16_xx
1079
1080 ldr r3,[sp,#16*4] @ pull ctx
1081 ldr r0,[r3,#0]
1082 ldr r2,[r3,#4]
1083 ldr r12,[r3,#8]
1084 add r4,r4,r0
1085 ldr r0,[r3,#12]
1086 add r5,r5,r2
1087 ldr r2,[r3,#16]
1088 add r6,r6,r12
1089 ldr r12,[r3,#20]
1090 add r7,r7,r0
1091 ldr r0,[r3,#24]
1092 add r8,r8,r2
1093 ldr r2,[r3,#28]
1094 add r9,r9,r12
1095 ldr r1,[sp,#17*4] @ pull inp
1096 ldr r12,[sp,#18*4] @ pull inp+len
1097 add r10,r10,r0
1098 add r11,r11,r2
1099 stmia r3,{r4,r5,r6,r7,r8,r9,r10,r11}
1100 cmp r1,r12
1101 sub r14,r14,#256 @ rewind Ktbl
1102 bne .Loop
1103
1104 add sp,sp,#19*4 @ destroy frame
Alexandre Savard75410672012-08-08 09:50:01 -04001105 ldmia sp!,{r4-r12,lr}
Alexandre Savard1b09e312012-08-07 20:33:29 -04001106 tst lr,#1
1107 moveq pc,lr @ be binary compatible with V4, yet
1108 .word 0xe12fff1e @ interoperable with Thumb ISA:-)
Alexandre Savard1b09e312012-08-07 20:33:29 -04001109.size sha256_block_data_order,.-sha256_block_data_order
1110.asciz "SHA256 block transform for ARMv4, CRYPTOGAMS by <appro@openssl.org>"
1111.align 2