OLD | NEW |
| (Empty) |
1 #if defined(__aarch64__) | |
2 #include <openssl/arm_arch.h> | |
3 | |
4 .text | |
5 | |
6 | |
7 .globl sha256_block_data_order | |
8 .hidden sha256_block_data_order | |
9 .type sha256_block_data_order,%function | |
10 .align 6 | |
11 sha256_block_data_order: | |
12 ldr x16,.LOPENSSL_armcap_P | |
13 adr x17,.LOPENSSL_armcap_P | |
14 add x16,x16,x17 | |
15 ldr w16,[x16] | |
16 tst w16,#ARMV8_SHA256 | |
17 b.ne .Lv8_entry | |
18 stp x29,x30,[sp,#-128]! | |
19 add x29,sp,#0 | |
20 | |
21 stp x19,x20,[sp,#16] | |
22 stp x21,x22,[sp,#32] | |
23 stp x23,x24,[sp,#48] | |
24 stp x25,x26,[sp,#64] | |
25 stp x27,x28,[sp,#80] | |
26 sub sp,sp,#4*4 | |
27 | |
28 ldp w20,w21,[x0] // load context | |
29 ldp w22,w23,[x0,#2*4] | |
30 ldp w24,w25,[x0,#4*4] | |
31 add x2,x1,x2,lsl#6 // end of input | |
32 ldp w26,w27,[x0,#6*4] | |
33 adr x30,.LK256 | |
34 stp x0,x2,[x29,#96] | |
35 | |
36 .Loop: | |
37 ldp w3,w4,[x1],#2*4 | |
38 ldr w19,[x30],#4 // *K++ | |
39 eor w28,w21,w22 // magic seed | |
40 str x1,[x29,#112] | |
41 #ifndef __ARMEB__ | |
42 rev w3,w3 // 0 | |
43 #endif | |
44 ror w16,w24,#6 | |
45 add w27,w27,w19 // h+=K[i] | |
46 eor w6,w24,w24,ror#14 | |
47 and w17,w25,w24 | |
48 bic w19,w26,w24 | |
49 add w27,w27,w3 // h+=X[i] | |
50 orr w17,w17,w19 // Ch(e,f,g) | |
51 eor w19,w20,w21 // a^b, b^c in next round | |
52 eor w16,w16,w6,ror#11 // Sigma1(e) | |
53 ror w6,w20,#2 | |
54 add w27,w27,w17 // h+=Ch(e,f,g) | |
55 eor w17,w20,w20,ror#9 | |
56 add w27,w27,w16 // h+=Sigma1(e) | |
57 and w28,w28,w19 // (b^c)&=(a^b) | |
58 add w23,w23,w27 // d+=h | |
59 eor w28,w28,w21 // Maj(a,b,c) | |
60 eor w17,w6,w17,ror#13 // Sigma0(a) | |
61 add w27,w27,w28 // h+=Maj(a,b,c) | |
62 ldr w28,[x30],#4 // *K++, w19 in next round | |
63 //add w27,w27,w17 // h+=Sigma0(a) | |
64 #ifndef __ARMEB__ | |
65 rev w4,w4 // 1 | |
66 #endif | |
67 ldp w5,w6,[x1],#2*4 | |
68 add w27,w27,w17 // h+=Sigma0(a) | |
69 ror w16,w23,#6 | |
70 add w26,w26,w28 // h+=K[i] | |
71 eor w7,w23,w23,ror#14 | |
72 and w17,w24,w23 | |
73 bic w28,w25,w23 | |
74 add w26,w26,w4 // h+=X[i] | |
75 orr w17,w17,w28 // Ch(e,f,g) | |
76 eor w28,w27,w20 // a^b, b^c in next round | |
77 eor w16,w16,w7,ror#11 // Sigma1(e) | |
78 ror w7,w27,#2 | |
79 add w26,w26,w17 // h+=Ch(e,f,g) | |
80 eor w17,w27,w27,ror#9 | |
81 add w26,w26,w16 // h+=Sigma1(e) | |
82 and w19,w19,w28 // (b^c)&=(a^b) | |
83 add w22,w22,w26 // d+=h | |
84 eor w19,w19,w20 // Maj(a,b,c) | |
85 eor w17,w7,w17,ror#13 // Sigma0(a) | |
86 add w26,w26,w19 // h+=Maj(a,b,c) | |
87 ldr w19,[x30],#4 // *K++, w28 in next round | |
88 //add w26,w26,w17 // h+=Sigma0(a) | |
89 #ifndef __ARMEB__ | |
90 rev w5,w5 // 2 | |
91 #endif | |
92 add w26,w26,w17 // h+=Sigma0(a) | |
93 ror w16,w22,#6 | |
94 add w25,w25,w19 // h+=K[i] | |
95 eor w8,w22,w22,ror#14 | |
96 and w17,w23,w22 | |
97 bic w19,w24,w22 | |
98 add w25,w25,w5 // h+=X[i] | |
99 orr w17,w17,w19 // Ch(e,f,g) | |
100 eor w19,w26,w27 // a^b, b^c in next round | |
101 eor w16,w16,w8,ror#11 // Sigma1(e) | |
102 ror w8,w26,#2 | |
103 add w25,w25,w17 // h+=Ch(e,f,g) | |
104 eor w17,w26,w26,ror#9 | |
105 add w25,w25,w16 // h+=Sigma1(e) | |
106 and w28,w28,w19 // (b^c)&=(a^b) | |
107 add w21,w21,w25 // d+=h | |
108 eor w28,w28,w27 // Maj(a,b,c) | |
109 eor w17,w8,w17,ror#13 // Sigma0(a) | |
110 add w25,w25,w28 // h+=Maj(a,b,c) | |
111 ldr w28,[x30],#4 // *K++, w19 in next round | |
112 //add w25,w25,w17 // h+=Sigma0(a) | |
113 #ifndef __ARMEB__ | |
114 rev w6,w6 // 3 | |
115 #endif | |
116 ldp w7,w8,[x1],#2*4 | |
117 add w25,w25,w17 // h+=Sigma0(a) | |
118 ror w16,w21,#6 | |
119 add w24,w24,w28 // h+=K[i] | |
120 eor w9,w21,w21,ror#14 | |
121 and w17,w22,w21 | |
122 bic w28,w23,w21 | |
123 add w24,w24,w6 // h+=X[i] | |
124 orr w17,w17,w28 // Ch(e,f,g) | |
125 eor w28,w25,w26 // a^b, b^c in next round | |
126 eor w16,w16,w9,ror#11 // Sigma1(e) | |
127 ror w9,w25,#2 | |
128 add w24,w24,w17 // h+=Ch(e,f,g) | |
129 eor w17,w25,w25,ror#9 | |
130 add w24,w24,w16 // h+=Sigma1(e) | |
131 and w19,w19,w28 // (b^c)&=(a^b) | |
132 add w20,w20,w24 // d+=h | |
133 eor w19,w19,w26 // Maj(a,b,c) | |
134 eor w17,w9,w17,ror#13 // Sigma0(a) | |
135 add w24,w24,w19 // h+=Maj(a,b,c) | |
136 ldr w19,[x30],#4 // *K++, w28 in next round | |
137 //add w24,w24,w17 // h+=Sigma0(a) | |
138 #ifndef __ARMEB__ | |
139 rev w7,w7 // 4 | |
140 #endif | |
141 add w24,w24,w17 // h+=Sigma0(a) | |
142 ror w16,w20,#6 | |
143 add w23,w23,w19 // h+=K[i] | |
144 eor w10,w20,w20,ror#14 | |
145 and w17,w21,w20 | |
146 bic w19,w22,w20 | |
147 add w23,w23,w7 // h+=X[i] | |
148 orr w17,w17,w19 // Ch(e,f,g) | |
149 eor w19,w24,w25 // a^b, b^c in next round | |
150 eor w16,w16,w10,ror#11 // Sigma1(e) | |
151 ror w10,w24,#2 | |
152 add w23,w23,w17 // h+=Ch(e,f,g) | |
153 eor w17,w24,w24,ror#9 | |
154 add w23,w23,w16 // h+=Sigma1(e) | |
155 and w28,w28,w19 // (b^c)&=(a^b) | |
156 add w27,w27,w23 // d+=h | |
157 eor w28,w28,w25 // Maj(a,b,c) | |
158 eor w17,w10,w17,ror#13 // Sigma0(a) | |
159 add w23,w23,w28 // h+=Maj(a,b,c) | |
160 ldr w28,[x30],#4 // *K++, w19 in next round | |
161 //add w23,w23,w17 // h+=Sigma0(a) | |
162 #ifndef __ARMEB__ | |
163 rev w8,w8 // 5 | |
164 #endif | |
165 ldp w9,w10,[x1],#2*4 | |
166 add w23,w23,w17 // h+=Sigma0(a) | |
167 ror w16,w27,#6 | |
168 add w22,w22,w28 // h+=K[i] | |
169 eor w11,w27,w27,ror#14 | |
170 and w17,w20,w27 | |
171 bic w28,w21,w27 | |
172 add w22,w22,w8 // h+=X[i] | |
173 orr w17,w17,w28 // Ch(e,f,g) | |
174 eor w28,w23,w24 // a^b, b^c in next round | |
175 eor w16,w16,w11,ror#11 // Sigma1(e) | |
176 ror w11,w23,#2 | |
177 add w22,w22,w17 // h+=Ch(e,f,g) | |
178 eor w17,w23,w23,ror#9 | |
179 add w22,w22,w16 // h+=Sigma1(e) | |
180 and w19,w19,w28 // (b^c)&=(a^b) | |
181 add w26,w26,w22 // d+=h | |
182 eor w19,w19,w24 // Maj(a,b,c) | |
183 eor w17,w11,w17,ror#13 // Sigma0(a) | |
184 add w22,w22,w19 // h+=Maj(a,b,c) | |
185 ldr w19,[x30],#4 // *K++, w28 in next round | |
186 //add w22,w22,w17 // h+=Sigma0(a) | |
187 #ifndef __ARMEB__ | |
188 rev w9,w9 // 6 | |
189 #endif | |
190 add w22,w22,w17 // h+=Sigma0(a) | |
191 ror w16,w26,#6 | |
192 add w21,w21,w19 // h+=K[i] | |
193 eor w12,w26,w26,ror#14 | |
194 and w17,w27,w26 | |
195 bic w19,w20,w26 | |
196 add w21,w21,w9 // h+=X[i] | |
197 orr w17,w17,w19 // Ch(e,f,g) | |
198 eor w19,w22,w23 // a^b, b^c in next round | |
199 eor w16,w16,w12,ror#11 // Sigma1(e) | |
200 ror w12,w22,#2 | |
201 add w21,w21,w17 // h+=Ch(e,f,g) | |
202 eor w17,w22,w22,ror#9 | |
203 add w21,w21,w16 // h+=Sigma1(e) | |
204 and w28,w28,w19 // (b^c)&=(a^b) | |
205 add w25,w25,w21 // d+=h | |
206 eor w28,w28,w23 // Maj(a,b,c) | |
207 eor w17,w12,w17,ror#13 // Sigma0(a) | |
208 add w21,w21,w28 // h+=Maj(a,b,c) | |
209 ldr w28,[x30],#4 // *K++, w19 in next round | |
210 //add w21,w21,w17 // h+=Sigma0(a) | |
211 #ifndef __ARMEB__ | |
212 rev w10,w10 // 7 | |
213 #endif | |
214 ldp w11,w12,[x1],#2*4 | |
215 add w21,w21,w17 // h+=Sigma0(a) | |
216 ror w16,w25,#6 | |
217 add w20,w20,w28 // h+=K[i] | |
218 eor w13,w25,w25,ror#14 | |
219 and w17,w26,w25 | |
220 bic w28,w27,w25 | |
221 add w20,w20,w10 // h+=X[i] | |
222 orr w17,w17,w28 // Ch(e,f,g) | |
223 eor w28,w21,w22 // a^b, b^c in next round | |
224 eor w16,w16,w13,ror#11 // Sigma1(e) | |
225 ror w13,w21,#2 | |
226 add w20,w20,w17 // h+=Ch(e,f,g) | |
227 eor w17,w21,w21,ror#9 | |
228 add w20,w20,w16 // h+=Sigma1(e) | |
229 and w19,w19,w28 // (b^c)&=(a^b) | |
230 add w24,w24,w20 // d+=h | |
231 eor w19,w19,w22 // Maj(a,b,c) | |
232 eor w17,w13,w17,ror#13 // Sigma0(a) | |
233 add w20,w20,w19 // h+=Maj(a,b,c) | |
234 ldr w19,[x30],#4 // *K++, w28 in next round | |
235 //add w20,w20,w17 // h+=Sigma0(a) | |
236 #ifndef __ARMEB__ | |
237 rev w11,w11 // 8 | |
238 #endif | |
239 add w20,w20,w17 // h+=Sigma0(a) | |
240 ror w16,w24,#6 | |
241 add w27,w27,w19 // h+=K[i] | |
242 eor w14,w24,w24,ror#14 | |
243 and w17,w25,w24 | |
244 bic w19,w26,w24 | |
245 add w27,w27,w11 // h+=X[i] | |
246 orr w17,w17,w19 // Ch(e,f,g) | |
247 eor w19,w20,w21 // a^b, b^c in next round | |
248 eor w16,w16,w14,ror#11 // Sigma1(e) | |
249 ror w14,w20,#2 | |
250 add w27,w27,w17 // h+=Ch(e,f,g) | |
251 eor w17,w20,w20,ror#9 | |
252 add w27,w27,w16 // h+=Sigma1(e) | |
253 and w28,w28,w19 // (b^c)&=(a^b) | |
254 add w23,w23,w27 // d+=h | |
255 eor w28,w28,w21 // Maj(a,b,c) | |
256 eor w17,w14,w17,ror#13 // Sigma0(a) | |
257 add w27,w27,w28 // h+=Maj(a,b,c) | |
258 ldr w28,[x30],#4 // *K++, w19 in next round | |
259 //add w27,w27,w17 // h+=Sigma0(a) | |
260 #ifndef __ARMEB__ | |
261 rev w12,w12 // 9 | |
262 #endif | |
263 ldp w13,w14,[x1],#2*4 | |
264 add w27,w27,w17 // h+=Sigma0(a) | |
265 ror w16,w23,#6 | |
266 add w26,w26,w28 // h+=K[i] | |
267 eor w15,w23,w23,ror#14 | |
268 and w17,w24,w23 | |
269 bic w28,w25,w23 | |
270 add w26,w26,w12 // h+=X[i] | |
271 orr w17,w17,w28 // Ch(e,f,g) | |
272 eor w28,w27,w20 // a^b, b^c in next round | |
273 eor w16,w16,w15,ror#11 // Sigma1(e) | |
274 ror w15,w27,#2 | |
275 add w26,w26,w17 // h+=Ch(e,f,g) | |
276 eor w17,w27,w27,ror#9 | |
277 add w26,w26,w16 // h+=Sigma1(e) | |
278 and w19,w19,w28 // (b^c)&=(a^b) | |
279 add w22,w22,w26 // d+=h | |
280 eor w19,w19,w20 // Maj(a,b,c) | |
281 eor w17,w15,w17,ror#13 // Sigma0(a) | |
282 add w26,w26,w19 // h+=Maj(a,b,c) | |
283 ldr w19,[x30],#4 // *K++, w28 in next round | |
284 //add w26,w26,w17 // h+=Sigma0(a) | |
285 #ifndef __ARMEB__ | |
286 rev w13,w13 // 10 | |
287 #endif | |
288 add w26,w26,w17 // h+=Sigma0(a) | |
289 ror w16,w22,#6 | |
290 add w25,w25,w19 // h+=K[i] | |
291 eor w0,w22,w22,ror#14 | |
292 and w17,w23,w22 | |
293 bic w19,w24,w22 | |
294 add w25,w25,w13 // h+=X[i] | |
295 orr w17,w17,w19 // Ch(e,f,g) | |
296 eor w19,w26,w27 // a^b, b^c in next round | |
297 eor w16,w16,w0,ror#11 // Sigma1(e) | |
298 ror w0,w26,#2 | |
299 add w25,w25,w17 // h+=Ch(e,f,g) | |
300 eor w17,w26,w26,ror#9 | |
301 add w25,w25,w16 // h+=Sigma1(e) | |
302 and w28,w28,w19 // (b^c)&=(a^b) | |
303 add w21,w21,w25 // d+=h | |
304 eor w28,w28,w27 // Maj(a,b,c) | |
305 eor w17,w0,w17,ror#13 // Sigma0(a) | |
306 add w25,w25,w28 // h+=Maj(a,b,c) | |
307 ldr w28,[x30],#4 // *K++, w19 in next round | |
308 //add w25,w25,w17 // h+=Sigma0(a) | |
309 #ifndef __ARMEB__ | |
310 rev w14,w14 // 11 | |
311 #endif | |
312 ldp w15,w0,[x1],#2*4 | |
313 add w25,w25,w17 // h+=Sigma0(a) | |
314 str w6,[sp,#12] | |
315 ror w16,w21,#6 | |
316 add w24,w24,w28 // h+=K[i] | |
317 eor w6,w21,w21,ror#14 | |
318 and w17,w22,w21 | |
319 bic w28,w23,w21 | |
320 add w24,w24,w14 // h+=X[i] | |
321 orr w17,w17,w28 // Ch(e,f,g) | |
322 eor w28,w25,w26 // a^b, b^c in next round | |
323 eor w16,w16,w6,ror#11 // Sigma1(e) | |
324 ror w6,w25,#2 | |
325 add w24,w24,w17 // h+=Ch(e,f,g) | |
326 eor w17,w25,w25,ror#9 | |
327 add w24,w24,w16 // h+=Sigma1(e) | |
328 and w19,w19,w28 // (b^c)&=(a^b) | |
329 add w20,w20,w24 // d+=h | |
330 eor w19,w19,w26 // Maj(a,b,c) | |
331 eor w17,w6,w17,ror#13 // Sigma0(a) | |
332 add w24,w24,w19 // h+=Maj(a,b,c) | |
333 ldr w19,[x30],#4 // *K++, w28 in next round | |
334 //add w24,w24,w17 // h+=Sigma0(a) | |
335 #ifndef __ARMEB__ | |
336 rev w15,w15 // 12 | |
337 #endif | |
338 add w24,w24,w17 // h+=Sigma0(a) | |
339 str w7,[sp,#0] | |
340 ror w16,w20,#6 | |
341 add w23,w23,w19 // h+=K[i] | |
342 eor w7,w20,w20,ror#14 | |
343 and w17,w21,w20 | |
344 bic w19,w22,w20 | |
345 add w23,w23,w15 // h+=X[i] | |
346 orr w17,w17,w19 // Ch(e,f,g) | |
347 eor w19,w24,w25 // a^b, b^c in next round | |
348 eor w16,w16,w7,ror#11 // Sigma1(e) | |
349 ror w7,w24,#2 | |
350 add w23,w23,w17 // h+=Ch(e,f,g) | |
351 eor w17,w24,w24,ror#9 | |
352 add w23,w23,w16 // h+=Sigma1(e) | |
353 and w28,w28,w19 // (b^c)&=(a^b) | |
354 add w27,w27,w23 // d+=h | |
355 eor w28,w28,w25 // Maj(a,b,c) | |
356 eor w17,w7,w17,ror#13 // Sigma0(a) | |
357 add w23,w23,w28 // h+=Maj(a,b,c) | |
358 ldr w28,[x30],#4 // *K++, w19 in next round | |
359 //add w23,w23,w17 // h+=Sigma0(a) | |
360 #ifndef __ARMEB__ | |
361 rev w0,w0 // 13 | |
362 #endif | |
363 ldp w1,w2,[x1] | |
364 add w23,w23,w17 // h+=Sigma0(a) | |
365 str w8,[sp,#4] | |
366 ror w16,w27,#6 | |
367 add w22,w22,w28 // h+=K[i] | |
368 eor w8,w27,w27,ror#14 | |
369 and w17,w20,w27 | |
370 bic w28,w21,w27 | |
371 add w22,w22,w0 // h+=X[i] | |
372 orr w17,w17,w28 // Ch(e,f,g) | |
373 eor w28,w23,w24 // a^b, b^c in next round | |
374 eor w16,w16,w8,ror#11 // Sigma1(e) | |
375 ror w8,w23,#2 | |
376 add w22,w22,w17 // h+=Ch(e,f,g) | |
377 eor w17,w23,w23,ror#9 | |
378 add w22,w22,w16 // h+=Sigma1(e) | |
379 and w19,w19,w28 // (b^c)&=(a^b) | |
380 add w26,w26,w22 // d+=h | |
381 eor w19,w19,w24 // Maj(a,b,c) | |
382 eor w17,w8,w17,ror#13 // Sigma0(a) | |
383 add w22,w22,w19 // h+=Maj(a,b,c) | |
384 ldr w19,[x30],#4 // *K++, w28 in next round | |
385 //add w22,w22,w17 // h+=Sigma0(a) | |
386 #ifndef __ARMEB__ | |
387 rev w1,w1 // 14 | |
388 #endif | |
389 ldr w6,[sp,#12] | |
390 add w22,w22,w17 // h+=Sigma0(a) | |
391 str w9,[sp,#8] | |
392 ror w16,w26,#6 | |
393 add w21,w21,w19 // h+=K[i] | |
394 eor w9,w26,w26,ror#14 | |
395 and w17,w27,w26 | |
396 bic w19,w20,w26 | |
397 add w21,w21,w1 // h+=X[i] | |
398 orr w17,w17,w19 // Ch(e,f,g) | |
399 eor w19,w22,w23 // a^b, b^c in next round | |
400 eor w16,w16,w9,ror#11 // Sigma1(e) | |
401 ror w9,w22,#2 | |
402 add w21,w21,w17 // h+=Ch(e,f,g) | |
403 eor w17,w22,w22,ror#9 | |
404 add w21,w21,w16 // h+=Sigma1(e) | |
405 and w28,w28,w19 // (b^c)&=(a^b) | |
406 add w25,w25,w21 // d+=h | |
407 eor w28,w28,w23 // Maj(a,b,c) | |
408 eor w17,w9,w17,ror#13 // Sigma0(a) | |
409 add w21,w21,w28 // h+=Maj(a,b,c) | |
410 ldr w28,[x30],#4 // *K++, w19 in next round | |
411 //add w21,w21,w17 // h+=Sigma0(a) | |
412 #ifndef __ARMEB__ | |
413 rev w2,w2 // 15 | |
414 #endif | |
415 ldr w7,[sp,#0] | |
416 add w21,w21,w17 // h+=Sigma0(a) | |
417 str w10,[sp,#12] | |
418 ror w16,w25,#6 | |
419 add w20,w20,w28 // h+=K[i] | |
420 ror w9,w4,#7 | |
421 and w17,w26,w25 | |
422 ror w8,w1,#17 | |
423 bic w28,w27,w25 | |
424 ror w10,w21,#2 | |
425 add w20,w20,w2 // h+=X[i] | |
426 eor w16,w16,w25,ror#11 | |
427 eor w9,w9,w4,ror#18 | |
428 orr w17,w17,w28 // Ch(e,f,g) | |
429 eor w28,w21,w22 // a^b, b^c in next round | |
430 eor w16,w16,w25,ror#25 // Sigma1(e) | |
431 eor w10,w10,w21,ror#13 | |
432 add w20,w20,w17 // h+=Ch(e,f,g) | |
433 and w19,w19,w28 // (b^c)&=(a^b) | |
434 eor w8,w8,w1,ror#19 | |
435 eor w9,w9,w4,lsr#3 // sigma0(X[i+1]) | |
436 add w20,w20,w16 // h+=Sigma1(e) | |
437 eor w19,w19,w22 // Maj(a,b,c) | |
438 eor w17,w10,w21,ror#22 // Sigma0(a) | |
439 eor w8,w8,w1,lsr#10 // sigma1(X[i+14]) | |
440 add w3,w3,w12 | |
441 add w24,w24,w20 // d+=h | |
442 add w20,w20,w19 // h+=Maj(a,b,c) | |
443 ldr w19,[x30],#4 // *K++, w28 in next round | |
444 add w3,w3,w9 | |
445 add w20,w20,w17 // h+=Sigma0(a) | |
446 add w3,w3,w8 | |
447 .Loop_16_xx: | |
448 ldr w8,[sp,#4] | |
449 str w11,[sp,#0] | |
450 ror w16,w24,#6 | |
451 add w27,w27,w19 // h+=K[i] | |
452 ror w10,w5,#7 | |
453 and w17,w25,w24 | |
454 ror w9,w2,#17 | |
455 bic w19,w26,w24 | |
456 ror w11,w20,#2 | |
457 add w27,w27,w3 // h+=X[i] | |
458 eor w16,w16,w24,ror#11 | |
459 eor w10,w10,w5,ror#18 | |
460 orr w17,w17,w19 // Ch(e,f,g) | |
461 eor w19,w20,w21 // a^b, b^c in next round | |
462 eor w16,w16,w24,ror#25 // Sigma1(e) | |
463 eor w11,w11,w20,ror#13 | |
464 add w27,w27,w17 // h+=Ch(e,f,g) | |
465 and w28,w28,w19 // (b^c)&=(a^b) | |
466 eor w9,w9,w2,ror#19 | |
467 eor w10,w10,w5,lsr#3 // sigma0(X[i+1]) | |
468 add w27,w27,w16 // h+=Sigma1(e) | |
469 eor w28,w28,w21 // Maj(a,b,c) | |
470 eor w17,w11,w20,ror#22 // Sigma0(a) | |
471 eor w9,w9,w2,lsr#10 // sigma1(X[i+14]) | |
472 add w4,w4,w13 | |
473 add w23,w23,w27 // d+=h | |
474 add w27,w27,w28 // h+=Maj(a,b,c) | |
475 ldr w28,[x30],#4 // *K++, w19 in next round | |
476 add w4,w4,w10 | |
477 add w27,w27,w17 // h+=Sigma0(a) | |
478 add w4,w4,w9 | |
479 ldr w9,[sp,#8] | |
480 str w12,[sp,#4] | |
481 ror w16,w23,#6 | |
482 add w26,w26,w28 // h+=K[i] | |
483 ror w11,w6,#7 | |
484 and w17,w24,w23 | |
485 ror w10,w3,#17 | |
486 bic w28,w25,w23 | |
487 ror w12,w27,#2 | |
488 add w26,w26,w4 // h+=X[i] | |
489 eor w16,w16,w23,ror#11 | |
490 eor w11,w11,w6,ror#18 | |
491 orr w17,w17,w28 // Ch(e,f,g) | |
492 eor w28,w27,w20 // a^b, b^c in next round | |
493 eor w16,w16,w23,ror#25 // Sigma1(e) | |
494 eor w12,w12,w27,ror#13 | |
495 add w26,w26,w17 // h+=Ch(e,f,g) | |
496 and w19,w19,w28 // (b^c)&=(a^b) | |
497 eor w10,w10,w3,ror#19 | |
498 eor w11,w11,w6,lsr#3 // sigma0(X[i+1]) | |
499 add w26,w26,w16 // h+=Sigma1(e) | |
500 eor w19,w19,w20 // Maj(a,b,c) | |
501 eor w17,w12,w27,ror#22 // Sigma0(a) | |
502 eor w10,w10,w3,lsr#10 // sigma1(X[i+14]) | |
503 add w5,w5,w14 | |
504 add w22,w22,w26 // d+=h | |
505 add w26,w26,w19 // h+=Maj(a,b,c) | |
506 ldr w19,[x30],#4 // *K++, w28 in next round | |
507 add w5,w5,w11 | |
508 add w26,w26,w17 // h+=Sigma0(a) | |
509 add w5,w5,w10 | |
510 ldr w10,[sp,#12] | |
511 str w13,[sp,#8] | |
512 ror w16,w22,#6 | |
513 add w25,w25,w19 // h+=K[i] | |
514 ror w12,w7,#7 | |
515 and w17,w23,w22 | |
516 ror w11,w4,#17 | |
517 bic w19,w24,w22 | |
518 ror w13,w26,#2 | |
519 add w25,w25,w5 // h+=X[i] | |
520 eor w16,w16,w22,ror#11 | |
521 eor w12,w12,w7,ror#18 | |
522 orr w17,w17,w19 // Ch(e,f,g) | |
523 eor w19,w26,w27 // a^b, b^c in next round | |
524 eor w16,w16,w22,ror#25 // Sigma1(e) | |
525 eor w13,w13,w26,ror#13 | |
526 add w25,w25,w17 // h+=Ch(e,f,g) | |
527 and w28,w28,w19 // (b^c)&=(a^b) | |
528 eor w11,w11,w4,ror#19 | |
529 eor w12,w12,w7,lsr#3 // sigma0(X[i+1]) | |
530 add w25,w25,w16 // h+=Sigma1(e) | |
531 eor w28,w28,w27 // Maj(a,b,c) | |
532 eor w17,w13,w26,ror#22 // Sigma0(a) | |
533 eor w11,w11,w4,lsr#10 // sigma1(X[i+14]) | |
534 add w6,w6,w15 | |
535 add w21,w21,w25 // d+=h | |
536 add w25,w25,w28 // h+=Maj(a,b,c) | |
537 ldr w28,[x30],#4 // *K++, w19 in next round | |
538 add w6,w6,w12 | |
539 add w25,w25,w17 // h+=Sigma0(a) | |
540 add w6,w6,w11 | |
541 ldr w11,[sp,#0] | |
542 str w14,[sp,#12] | |
543 ror w16,w21,#6 | |
544 add w24,w24,w28 // h+=K[i] | |
545 ror w13,w8,#7 | |
546 and w17,w22,w21 | |
547 ror w12,w5,#17 | |
548 bic w28,w23,w21 | |
549 ror w14,w25,#2 | |
550 add w24,w24,w6 // h+=X[i] | |
551 eor w16,w16,w21,ror#11 | |
552 eor w13,w13,w8,ror#18 | |
553 orr w17,w17,w28 // Ch(e,f,g) | |
554 eor w28,w25,w26 // a^b, b^c in next round | |
555 eor w16,w16,w21,ror#25 // Sigma1(e) | |
556 eor w14,w14,w25,ror#13 | |
557 add w24,w24,w17 // h+=Ch(e,f,g) | |
558 and w19,w19,w28 // (b^c)&=(a^b) | |
559 eor w12,w12,w5,ror#19 | |
560 eor w13,w13,w8,lsr#3 // sigma0(X[i+1]) | |
561 add w24,w24,w16 // h+=Sigma1(e) | |
562 eor w19,w19,w26 // Maj(a,b,c) | |
563 eor w17,w14,w25,ror#22 // Sigma0(a) | |
564 eor w12,w12,w5,lsr#10 // sigma1(X[i+14]) | |
565 add w7,w7,w0 | |
566 add w20,w20,w24 // d+=h | |
567 add w24,w24,w19 // h+=Maj(a,b,c) | |
568 ldr w19,[x30],#4 // *K++, w28 in next round | |
569 add w7,w7,w13 | |
570 add w24,w24,w17 // h+=Sigma0(a) | |
571 add w7,w7,w12 | |
572 ldr w12,[sp,#4] | |
573 str w15,[sp,#0] | |
574 ror w16,w20,#6 | |
575 add w23,w23,w19 // h+=K[i] | |
576 ror w14,w9,#7 | |
577 and w17,w21,w20 | |
578 ror w13,w6,#17 | |
579 bic w19,w22,w20 | |
580 ror w15,w24,#2 | |
581 add w23,w23,w7 // h+=X[i] | |
582 eor w16,w16,w20,ror#11 | |
583 eor w14,w14,w9,ror#18 | |
584 orr w17,w17,w19 // Ch(e,f,g) | |
585 eor w19,w24,w25 // a^b, b^c in next round | |
586 eor w16,w16,w20,ror#25 // Sigma1(e) | |
587 eor w15,w15,w24,ror#13 | |
588 add w23,w23,w17 // h+=Ch(e,f,g) | |
589 and w28,w28,w19 // (b^c)&=(a^b) | |
590 eor w13,w13,w6,ror#19 | |
591 eor w14,w14,w9,lsr#3 // sigma0(X[i+1]) | |
592 add w23,w23,w16 // h+=Sigma1(e) | |
593 eor w28,w28,w25 // Maj(a,b,c) | |
594 eor w17,w15,w24,ror#22 // Sigma0(a) | |
595 eor w13,w13,w6,lsr#10 // sigma1(X[i+14]) | |
596 add w8,w8,w1 | |
597 add w27,w27,w23 // d+=h | |
598 add w23,w23,w28 // h+=Maj(a,b,c) | |
599 ldr w28,[x30],#4 // *K++, w19 in next round | |
600 add w8,w8,w14 | |
601 add w23,w23,w17 // h+=Sigma0(a) | |
602 add w8,w8,w13 | |
603 ldr w13,[sp,#8] | |
604 str w0,[sp,#4] | |
605 ror w16,w27,#6 | |
606 add w22,w22,w28 // h+=K[i] | |
607 ror w15,w10,#7 | |
608 and w17,w20,w27 | |
609 ror w14,w7,#17 | |
610 bic w28,w21,w27 | |
611 ror w0,w23,#2 | |
612 add w22,w22,w8 // h+=X[i] | |
613 eor w16,w16,w27,ror#11 | |
614 eor w15,w15,w10,ror#18 | |
615 orr w17,w17,w28 // Ch(e,f,g) | |
616 eor w28,w23,w24 // a^b, b^c in next round | |
617 eor w16,w16,w27,ror#25 // Sigma1(e) | |
618 eor w0,w0,w23,ror#13 | |
619 add w22,w22,w17 // h+=Ch(e,f,g) | |
620 and w19,w19,w28 // (b^c)&=(a^b) | |
621 eor w14,w14,w7,ror#19 | |
622 eor w15,w15,w10,lsr#3 // sigma0(X[i+1]) | |
623 add w22,w22,w16 // h+=Sigma1(e) | |
624 eor w19,w19,w24 // Maj(a,b,c) | |
625 eor w17,w0,w23,ror#22 // Sigma0(a) | |
626 eor w14,w14,w7,lsr#10 // sigma1(X[i+14]) | |
627 add w9,w9,w2 | |
628 add w26,w26,w22 // d+=h | |
629 add w22,w22,w19 // h+=Maj(a,b,c) | |
630 ldr w19,[x30],#4 // *K++, w28 in next round | |
631 add w9,w9,w15 | |
632 add w22,w22,w17 // h+=Sigma0(a) | |
633 add w9,w9,w14 | |
634 ldr w14,[sp,#12] | |
635 str w1,[sp,#8] | |
636 ror w16,w26,#6 | |
637 add w21,w21,w19 // h+=K[i] | |
638 ror w0,w11,#7 | |
639 and w17,w27,w26 | |
640 ror w15,w8,#17 | |
641 bic w19,w20,w26 | |
642 ror w1,w22,#2 | |
643 add w21,w21,w9 // h+=X[i] | |
644 eor w16,w16,w26,ror#11 | |
645 eor w0,w0,w11,ror#18 | |
646 orr w17,w17,w19 // Ch(e,f,g) | |
647 eor w19,w22,w23 // a^b, b^c in next round | |
648 eor w16,w16,w26,ror#25 // Sigma1(e) | |
649 eor w1,w1,w22,ror#13 | |
650 add w21,w21,w17 // h+=Ch(e,f,g) | |
651 and w28,w28,w19 // (b^c)&=(a^b) | |
652 eor w15,w15,w8,ror#19 | |
653 eor w0,w0,w11,lsr#3 // sigma0(X[i+1]) | |
654 add w21,w21,w16 // h+=Sigma1(e) | |
655 eor w28,w28,w23 // Maj(a,b,c) | |
656 eor w17,w1,w22,ror#22 // Sigma0(a) | |
657 eor w15,w15,w8,lsr#10 // sigma1(X[i+14]) | |
658 add w10,w10,w3 | |
659 add w25,w25,w21 // d+=h | |
660 add w21,w21,w28 // h+=Maj(a,b,c) | |
661 ldr w28,[x30],#4 // *K++, w19 in next round | |
662 add w10,w10,w0 | |
663 add w21,w21,w17 // h+=Sigma0(a) | |
664 add w10,w10,w15 | |
665 ldr w15,[sp,#0] | |
666 str w2,[sp,#12] | |
667 ror w16,w25,#6 | |
668 add w20,w20,w28 // h+=K[i] | |
669 ror w1,w12,#7 | |
670 and w17,w26,w25 | |
671 ror w0,w9,#17 | |
672 bic w28,w27,w25 | |
673 ror w2,w21,#2 | |
674 add w20,w20,w10 // h+=X[i] | |
675 eor w16,w16,w25,ror#11 | |
676 eor w1,w1,w12,ror#18 | |
677 orr w17,w17,w28 // Ch(e,f,g) | |
678 eor w28,w21,w22 // a^b, b^c in next round | |
679 eor w16,w16,w25,ror#25 // Sigma1(e) | |
680 eor w2,w2,w21,ror#13 | |
681 add w20,w20,w17 // h+=Ch(e,f,g) | |
682 and w19,w19,w28 // (b^c)&=(a^b) | |
683 eor w0,w0,w9,ror#19 | |
684 eor w1,w1,w12,lsr#3 // sigma0(X[i+1]) | |
685 add w20,w20,w16 // h+=Sigma1(e) | |
686 eor w19,w19,w22 // Maj(a,b,c) | |
687 eor w17,w2,w21,ror#22 // Sigma0(a) | |
688 eor w0,w0,w9,lsr#10 // sigma1(X[i+14]) | |
689 add w11,w11,w4 | |
690 add w24,w24,w20 // d+=h | |
691 add w20,w20,w19 // h+=Maj(a,b,c) | |
692 ldr w19,[x30],#4 // *K++, w28 in next round | |
693 add w11,w11,w1 | |
694 add w20,w20,w17 // h+=Sigma0(a) | |
695 add w11,w11,w0 | |
696 ldr w0,[sp,#4] | |
697 str w3,[sp,#0] | |
698 ror w16,w24,#6 | |
699 add w27,w27,w19 // h+=K[i] | |
700 ror w2,w13,#7 | |
701 and w17,w25,w24 | |
702 ror w1,w10,#17 | |
703 bic w19,w26,w24 | |
704 ror w3,w20,#2 | |
705 add w27,w27,w11 // h+=X[i] | |
706 eor w16,w16,w24,ror#11 | |
707 eor w2,w2,w13,ror#18 | |
708 orr w17,w17,w19 // Ch(e,f,g) | |
709 eor w19,w20,w21 // a^b, b^c in next round | |
710 eor w16,w16,w24,ror#25 // Sigma1(e) | |
711 eor w3,w3,w20,ror#13 | |
712 add w27,w27,w17 // h+=Ch(e,f,g) | |
713 and w28,w28,w19 // (b^c)&=(a^b) | |
714 eor w1,w1,w10,ror#19 | |
715 eor w2,w2,w13,lsr#3 // sigma0(X[i+1]) | |
716 add w27,w27,w16 // h+=Sigma1(e) | |
717 eor w28,w28,w21 // Maj(a,b,c) | |
718 eor w17,w3,w20,ror#22 // Sigma0(a) | |
719 eor w1,w1,w10,lsr#10 // sigma1(X[i+14]) | |
720 add w12,w12,w5 | |
721 add w23,w23,w27 // d+=h | |
722 add w27,w27,w28 // h+=Maj(a,b,c) | |
723 ldr w28,[x30],#4 // *K++, w19 in next round | |
724 add w12,w12,w2 | |
725 add w27,w27,w17 // h+=Sigma0(a) | |
726 add w12,w12,w1 | |
727 ldr w1,[sp,#8] | |
728 str w4,[sp,#4] | |
729 ror w16,w23,#6 | |
730 add w26,w26,w28 // h+=K[i] | |
731 ror w3,w14,#7 | |
732 and w17,w24,w23 | |
733 ror w2,w11,#17 | |
734 bic w28,w25,w23 | |
735 ror w4,w27,#2 | |
736 add w26,w26,w12 // h+=X[i] | |
737 eor w16,w16,w23,ror#11 | |
738 eor w3,w3,w14,ror#18 | |
739 orr w17,w17,w28 // Ch(e,f,g) | |
740 eor w28,w27,w20 // a^b, b^c in next round | |
741 eor w16,w16,w23,ror#25 // Sigma1(e) | |
742 eor w4,w4,w27,ror#13 | |
743 add w26,w26,w17 // h+=Ch(e,f,g) | |
744 and w19,w19,w28 // (b^c)&=(a^b) | |
745 eor w2,w2,w11,ror#19 | |
746 eor w3,w3,w14,lsr#3 // sigma0(X[i+1]) | |
747 add w26,w26,w16 // h+=Sigma1(e) | |
748 eor w19,w19,w20 // Maj(a,b,c) | |
749 eor w17,w4,w27,ror#22 // Sigma0(a) | |
750 eor w2,w2,w11,lsr#10 // sigma1(X[i+14]) | |
751 add w13,w13,w6 | |
752 add w22,w22,w26 // d+=h | |
753 add w26,w26,w19 // h+=Maj(a,b,c) | |
754 ldr w19,[x30],#4 // *K++, w28 in next round | |
755 add w13,w13,w3 | |
756 add w26,w26,w17 // h+=Sigma0(a) | |
757 add w13,w13,w2 | |
758 ldr w2,[sp,#12] | |
759 str w5,[sp,#8] | |
760 ror w16,w22,#6 | |
761 add w25,w25,w19 // h+=K[i] | |
762 ror w4,w15,#7 | |
763 and w17,w23,w22 | |
764 ror w3,w12,#17 | |
765 bic w19,w24,w22 | |
766 ror w5,w26,#2 | |
767 add w25,w25,w13 // h+=X[i] | |
768 eor w16,w16,w22,ror#11 | |
769 eor w4,w4,w15,ror#18 | |
770 orr w17,w17,w19 // Ch(e,f,g) | |
771 eor w19,w26,w27 // a^b, b^c in next round | |
772 eor w16,w16,w22,ror#25 // Sigma1(e) | |
773 eor w5,w5,w26,ror#13 | |
774 add w25,w25,w17 // h+=Ch(e,f,g) | |
775 and w28,w28,w19 // (b^c)&=(a^b) | |
776 eor w3,w3,w12,ror#19 | |
777 eor w4,w4,w15,lsr#3 // sigma0(X[i+1]) | |
778 add w25,w25,w16 // h+=Sigma1(e) | |
779 eor w28,w28,w27 // Maj(a,b,c) | |
780 eor w17,w5,w26,ror#22 // Sigma0(a) | |
781 eor w3,w3,w12,lsr#10 // sigma1(X[i+14]) | |
782 add w14,w14,w7 | |
783 add w21,w21,w25 // d+=h | |
784 add w25,w25,w28 // h+=Maj(a,b,c) | |
785 ldr w28,[x30],#4 // *K++, w19 in next round | |
786 add w14,w14,w4 | |
787 add w25,w25,w17 // h+=Sigma0(a) | |
788 add w14,w14,w3 | |
789 ldr w3,[sp,#0] | |
790 str w6,[sp,#12] | |
791 ror w16,w21,#6 | |
792 add w24,w24,w28 // h+=K[i] | |
793 ror w5,w0,#7 | |
794 and w17,w22,w21 | |
795 ror w4,w13,#17 | |
796 bic w28,w23,w21 | |
797 ror w6,w25,#2 | |
798 add w24,w24,w14 // h+=X[i] | |
799 eor w16,w16,w21,ror#11 | |
800 eor w5,w5,w0,ror#18 | |
801 orr w17,w17,w28 // Ch(e,f,g) | |
802 eor w28,w25,w26 // a^b, b^c in next round | |
803 eor w16,w16,w21,ror#25 // Sigma1(e) | |
804 eor w6,w6,w25,ror#13 | |
805 add w24,w24,w17 // h+=Ch(e,f,g) | |
806 and w19,w19,w28 // (b^c)&=(a^b) | |
807 eor w4,w4,w13,ror#19 | |
808 eor w5,w5,w0,lsr#3 // sigma0(X[i+1]) | |
809 add w24,w24,w16 // h+=Sigma1(e) | |
810 eor w19,w19,w26 // Maj(a,b,c) | |
811 eor w17,w6,w25,ror#22 // Sigma0(a) | |
812 eor w4,w4,w13,lsr#10 // sigma1(X[i+14]) | |
813 add w15,w15,w8 | |
814 add w20,w20,w24 // d+=h | |
815 add w24,w24,w19 // h+=Maj(a,b,c) | |
816 ldr w19,[x30],#4 // *K++, w28 in next round | |
817 add w15,w15,w5 | |
818 add w24,w24,w17 // h+=Sigma0(a) | |
819 add w15,w15,w4 | |
820 ldr w4,[sp,#4] | |
821 str w7,[sp,#0] | |
822 ror w16,w20,#6 | |
823 add w23,w23,w19 // h+=K[i] | |
824 ror w6,w1,#7 | |
825 and w17,w21,w20 | |
826 ror w5,w14,#17 | |
827 bic w19,w22,w20 | |
828 ror w7,w24,#2 | |
829 add w23,w23,w15 // h+=X[i] | |
830 eor w16,w16,w20,ror#11 | |
831 eor w6,w6,w1,ror#18 | |
832 orr w17,w17,w19 // Ch(e,f,g) | |
833 eor w19,w24,w25 // a^b, b^c in next round | |
834 eor w16,w16,w20,ror#25 // Sigma1(e) | |
835 eor w7,w7,w24,ror#13 | |
836 add w23,w23,w17 // h+=Ch(e,f,g) | |
837 and w28,w28,w19 // (b^c)&=(a^b) | |
838 eor w5,w5,w14,ror#19 | |
839 eor w6,w6,w1,lsr#3 // sigma0(X[i+1]) | |
840 add w23,w23,w16 // h+=Sigma1(e) | |
841 eor w28,w28,w25 // Maj(a,b,c) | |
842 eor w17,w7,w24,ror#22 // Sigma0(a) | |
843 eor w5,w5,w14,lsr#10 // sigma1(X[i+14]) | |
844 add w0,w0,w9 | |
845 add w27,w27,w23 // d+=h | |
846 add w23,w23,w28 // h+=Maj(a,b,c) | |
847 ldr w28,[x30],#4 // *K++, w19 in next round | |
848 add w0,w0,w6 | |
849 add w23,w23,w17 // h+=Sigma0(a) | |
850 add w0,w0,w5 | |
851 ldr w5,[sp,#8] | |
852 str w8,[sp,#4] | |
853 ror w16,w27,#6 | |
854 add w22,w22,w28 // h+=K[i] | |
855 ror w7,w2,#7 | |
856 and w17,w20,w27 | |
857 ror w6,w15,#17 | |
858 bic w28,w21,w27 | |
859 ror w8,w23,#2 | |
860 add w22,w22,w0 // h+=X[i] | |
861 eor w16,w16,w27,ror#11 | |
862 eor w7,w7,w2,ror#18 | |
863 orr w17,w17,w28 // Ch(e,f,g) | |
864 eor w28,w23,w24 // a^b, b^c in next round | |
865 eor w16,w16,w27,ror#25 // Sigma1(e) | |
866 eor w8,w8,w23,ror#13 | |
867 add w22,w22,w17 // h+=Ch(e,f,g) | |
868 and w19,w19,w28 // (b^c)&=(a^b) | |
869 eor w6,w6,w15,ror#19 | |
870 eor w7,w7,w2,lsr#3 // sigma0(X[i+1]) | |
871 add w22,w22,w16 // h+=Sigma1(e) | |
872 eor w19,w19,w24 // Maj(a,b,c) | |
873 eor w17,w8,w23,ror#22 // Sigma0(a) | |
874 eor w6,w6,w15,lsr#10 // sigma1(X[i+14]) | |
875 add w1,w1,w10 | |
876 add w26,w26,w22 // d+=h | |
877 add w22,w22,w19 // h+=Maj(a,b,c) | |
878 ldr w19,[x30],#4 // *K++, w28 in next round | |
879 add w1,w1,w7 | |
880 add w22,w22,w17 // h+=Sigma0(a) | |
881 add w1,w1,w6 | |
882 ldr w6,[sp,#12] | |
883 str w9,[sp,#8] | |
884 ror w16,w26,#6 | |
885 add w21,w21,w19 // h+=K[i] | |
886 ror w8,w3,#7 | |
887 and w17,w27,w26 | |
888 ror w7,w0,#17 | |
889 bic w19,w20,w26 | |
890 ror w9,w22,#2 | |
891 add w21,w21,w1 // h+=X[i] | |
892 eor w16,w16,w26,ror#11 | |
893 eor w8,w8,w3,ror#18 | |
894 orr w17,w17,w19 // Ch(e,f,g) | |
895 eor w19,w22,w23 // a^b, b^c in next round | |
896 eor w16,w16,w26,ror#25 // Sigma1(e) | |
897 eor w9,w9,w22,ror#13 | |
898 add w21,w21,w17 // h+=Ch(e,f,g) | |
899 and w28,w28,w19 // (b^c)&=(a^b) | |
900 eor w7,w7,w0,ror#19 | |
901 eor w8,w8,w3,lsr#3 // sigma0(X[i+1]) | |
902 add w21,w21,w16 // h+=Sigma1(e) | |
903 eor w28,w28,w23 // Maj(a,b,c) | |
904 eor w17,w9,w22,ror#22 // Sigma0(a) | |
905 eor w7,w7,w0,lsr#10 // sigma1(X[i+14]) | |
906 add w2,w2,w11 | |
907 add w25,w25,w21 // d+=h | |
908 add w21,w21,w28 // h+=Maj(a,b,c) | |
909 ldr w28,[x30],#4 // *K++, w19 in next round | |
910 add w2,w2,w8 | |
911 add w21,w21,w17 // h+=Sigma0(a) | |
912 add w2,w2,w7 | |
913 ldr w7,[sp,#0] | |
914 str w10,[sp,#12] | |
915 ror w16,w25,#6 | |
916 add w20,w20,w28 // h+=K[i] | |
917 ror w9,w4,#7 | |
918 and w17,w26,w25 | |
919 ror w8,w1,#17 | |
920 bic w28,w27,w25 | |
921 ror w10,w21,#2 | |
922 add w20,w20,w2 // h+=X[i] | |
923 eor w16,w16,w25,ror#11 | |
924 eor w9,w9,w4,ror#18 | |
925 orr w17,w17,w28 // Ch(e,f,g) | |
926 eor w28,w21,w22 // a^b, b^c in next round | |
927 eor w16,w16,w25,ror#25 // Sigma1(e) | |
928 eor w10,w10,w21,ror#13 | |
929 add w20,w20,w17 // h+=Ch(e,f,g) | |
930 and w19,w19,w28 // (b^c)&=(a^b) | |
931 eor w8,w8,w1,ror#19 | |
932 eor w9,w9,w4,lsr#3 // sigma0(X[i+1]) | |
933 add w20,w20,w16 // h+=Sigma1(e) | |
934 eor w19,w19,w22 // Maj(a,b,c) | |
935 eor w17,w10,w21,ror#22 // Sigma0(a) | |
936 eor w8,w8,w1,lsr#10 // sigma1(X[i+14]) | |
937 add w3,w3,w12 | |
938 add w24,w24,w20 // d+=h | |
939 add w20,w20,w19 // h+=Maj(a,b,c) | |
940 ldr w19,[x30],#4 // *K++, w28 in next round | |
941 add w3,w3,w9 | |
942 add w20,w20,w17 // h+=Sigma0(a) | |
943 add w3,w3,w8 | |
944 cbnz w19,.Loop_16_xx | |
945 | |
946 ldp x0,x2,[x29,#96] | |
947 ldr x1,[x29,#112] | |
948 sub x30,x30,#260 // rewind | |
949 | |
950 ldp w3,w4,[x0] | |
951 ldp w5,w6,[x0,#2*4] | |
952 add x1,x1,#14*4 // advance input pointer | |
953 ldp w7,w8,[x0,#4*4] | |
954 add w20,w20,w3 | |
955 ldp w9,w10,[x0,#6*4] | |
956 add w21,w21,w4 | |
957 add w22,w22,w5 | |
958 add w23,w23,w6 | |
959 stp w20,w21,[x0] | |
960 add w24,w24,w7 | |
961 add w25,w25,w8 | |
962 stp w22,w23,[x0,#2*4] | |
963 add w26,w26,w9 | |
964 add w27,w27,w10 | |
965 cmp x1,x2 | |
966 stp w24,w25,[x0,#4*4] | |
967 stp w26,w27,[x0,#6*4] | |
968 b.ne .Loop | |
969 | |
970 ldp x19,x20,[x29,#16] | |
971 add sp,sp,#4*4 | |
972 ldp x21,x22,[x29,#32] | |
973 ldp x23,x24,[x29,#48] | |
974 ldp x25,x26,[x29,#64] | |
975 ldp x27,x28,[x29,#80] | |
976 ldp x29,x30,[sp],#128 | |
977 ret | |
978 .size sha256_block_data_order,.-sha256_block_data_order | |
979 | |
980 .align 6 | |
981 .type .LK256,%object | |
982 .LK256: | |
983 .long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5 | |
984 .long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5 | |
985 .long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3 | |
986 .long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174 | |
987 .long 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc | |
988 .long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da | |
989 .long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7 | |
990 .long 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967 | |
991 .long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13 | |
992 .long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85 | |
993 .long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3 | |
994 .long 0xd192e819,0xd6990624,0xf40e3585,0x106aa070 | |
995 .long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5 | |
996 .long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3 | |
997 .long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208 | |
998 .long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2 | |
999 .long 0 //terminator | |
1000 .size .LK256,.-.LK256 | |
1001 .align 3 | |
1002 .LOPENSSL_armcap_P: | |
1003 .quad OPENSSL_armcap_P-. | |
1004 .byte 83,72,65,50,53,54,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114
,109,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98
,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 | |
1005 .align 2 | |
1006 .align 2 | |
1007 .type sha256_block_armv8,%function | |
1008 .align 6 | |
1009 sha256_block_armv8: | |
1010 .Lv8_entry: | |
1011 stp x29,x30,[sp,#-16]! | |
1012 add x29,sp,#0 | |
1013 | |
1014 ld1 {v0.4s,v1.4s},[x0] | |
1015 adr x3,.LK256 | |
1016 | |
1017 .Loop_hw: | |
1018 ld1 {v4.16b,v5.16b,v6.16b,v7.16b},[x1],#64 | |
1019 sub x2,x2,#1 | |
1020 ld1 {v16.4s},[x3],#16 | |
1021 rev32 v4.16b,v4.16b | |
1022 rev32 v5.16b,v5.16b | |
1023 rev32 v6.16b,v6.16b | |
1024 rev32 v7.16b,v7.16b | |
1025 orr v18.16b,v0.16b,v0.16b // offload | |
1026 orr v19.16b,v1.16b,v1.16b | |
1027 ld1 {v17.4s},[x3],#16 | |
1028 add v16.4s,v16.4s,v4.4s | |
1029 .inst 0x5e2828a4 //sha256su0 v4.16b,v5.16b | |
1030 orr v2.16b,v0.16b,v0.16b | |
1031 .inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s | |
1032 .inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s | |
1033 .inst 0x5e0760c4 //sha256su1 v4.16b,v6.16b,v7.16b | |
1034 ld1 {v16.4s},[x3],#16 | |
1035 add v17.4s,v17.4s,v5.4s | |
1036 .inst 0x5e2828c5 //sha256su0 v5.16b,v6.16b | |
1037 orr v2.16b,v0.16b,v0.16b | |
1038 .inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s | |
1039 .inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s | |
1040 .inst 0x5e0460e5 //sha256su1 v5.16b,v7.16b,v4.16b | |
1041 ld1 {v17.4s},[x3],#16 | |
1042 add v16.4s,v16.4s,v6.4s | |
1043 .inst 0x5e2828e6 //sha256su0 v6.16b,v7.16b | |
1044 orr v2.16b,v0.16b,v0.16b | |
1045 .inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s | |
1046 .inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s | |
1047 .inst 0x5e056086 //sha256su1 v6.16b,v4.16b,v5.16b | |
1048 ld1 {v16.4s},[x3],#16 | |
1049 add v17.4s,v17.4s,v7.4s | |
1050 .inst 0x5e282887 //sha256su0 v7.16b,v4.16b | |
1051 orr v2.16b,v0.16b,v0.16b | |
1052 .inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s | |
1053 .inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s | |
1054 .inst 0x5e0660a7 //sha256su1 v7.16b,v5.16b,v6.16b | |
1055 ld1 {v17.4s},[x3],#16 | |
1056 add v16.4s,v16.4s,v4.4s | |
1057 .inst 0x5e2828a4 //sha256su0 v4.16b,v5.16b | |
1058 orr v2.16b,v0.16b,v0.16b | |
1059 .inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s | |
1060 .inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s | |
1061 .inst 0x5e0760c4 //sha256su1 v4.16b,v6.16b,v7.16b | |
1062 ld1 {v16.4s},[x3],#16 | |
1063 add v17.4s,v17.4s,v5.4s | |
1064 .inst 0x5e2828c5 //sha256su0 v5.16b,v6.16b | |
1065 orr v2.16b,v0.16b,v0.16b | |
1066 .inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s | |
1067 .inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s | |
1068 .inst 0x5e0460e5 //sha256su1 v5.16b,v7.16b,v4.16b | |
1069 ld1 {v17.4s},[x3],#16 | |
1070 add v16.4s,v16.4s,v6.4s | |
1071 .inst 0x5e2828e6 //sha256su0 v6.16b,v7.16b | |
1072 orr v2.16b,v0.16b,v0.16b | |
1073 .inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s | |
1074 .inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s | |
1075 .inst 0x5e056086 //sha256su1 v6.16b,v4.16b,v5.16b | |
1076 ld1 {v16.4s},[x3],#16 | |
1077 add v17.4s,v17.4s,v7.4s | |
1078 .inst 0x5e282887 //sha256su0 v7.16b,v4.16b | |
1079 orr v2.16b,v0.16b,v0.16b | |
1080 .inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s | |
1081 .inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s | |
1082 .inst 0x5e0660a7 //sha256su1 v7.16b,v5.16b,v6.16b | |
1083 ld1 {v17.4s},[x3],#16 | |
1084 add v16.4s,v16.4s,v4.4s | |
1085 .inst 0x5e2828a4 //sha256su0 v4.16b,v5.16b | |
1086 orr v2.16b,v0.16b,v0.16b | |
1087 .inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s | |
1088 .inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s | |
1089 .inst 0x5e0760c4 //sha256su1 v4.16b,v6.16b,v7.16b | |
1090 ld1 {v16.4s},[x3],#16 | |
1091 add v17.4s,v17.4s,v5.4s | |
1092 .inst 0x5e2828c5 //sha256su0 v5.16b,v6.16b | |
1093 orr v2.16b,v0.16b,v0.16b | |
1094 .inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s | |
1095 .inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s | |
1096 .inst 0x5e0460e5 //sha256su1 v5.16b,v7.16b,v4.16b | |
1097 ld1 {v17.4s},[x3],#16 | |
1098 add v16.4s,v16.4s,v6.4s | |
1099 .inst 0x5e2828e6 //sha256su0 v6.16b,v7.16b | |
1100 orr v2.16b,v0.16b,v0.16b | |
1101 .inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s | |
1102 .inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s | |
1103 .inst 0x5e056086 //sha256su1 v6.16b,v4.16b,v5.16b | |
1104 ld1 {v16.4s},[x3],#16 | |
1105 add v17.4s,v17.4s,v7.4s | |
1106 .inst 0x5e282887 //sha256su0 v7.16b,v4.16b | |
1107 orr v2.16b,v0.16b,v0.16b | |
1108 .inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s | |
1109 .inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s | |
1110 .inst 0x5e0660a7 //sha256su1 v7.16b,v5.16b,v6.16b | |
1111 ld1 {v17.4s},[x3],#16 | |
1112 add v16.4s,v16.4s,v4.4s | |
1113 orr v2.16b,v0.16b,v0.16b | |
1114 .inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s | |
1115 .inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s | |
1116 | |
1117 ld1 {v16.4s},[x3],#16 | |
1118 add v17.4s,v17.4s,v5.4s | |
1119 orr v2.16b,v0.16b,v0.16b | |
1120 .inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s | |
1121 .inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s | |
1122 | |
1123 ld1 {v17.4s},[x3] | |
1124 add v16.4s,v16.4s,v6.4s | |
1125 sub x3,x3,#64*4-16 // rewind | |
1126 orr v2.16b,v0.16b,v0.16b | |
1127 .inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s | |
1128 .inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s | |
1129 | |
1130 add v17.4s,v17.4s,v7.4s | |
1131 orr v2.16b,v0.16b,v0.16b | |
1132 .inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s | |
1133 .inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s | |
1134 | |
1135 add v0.4s,v0.4s,v18.4s | |
1136 add v1.4s,v1.4s,v19.4s | |
1137 | |
1138 cbnz x2,.Loop_hw | |
1139 | |
1140 st1 {v0.4s,v1.4s},[x0] | |
1141 | |
1142 ldr x29,[sp],#16 | |
1143 ret | |
1144 .size sha256_block_armv8,.-sha256_block_armv8 | |
1145 .comm OPENSSL_armcap_P,4,4 | |
1146 #endif | |
OLD | NEW |