OLD | NEW |
| (Empty) |
1 #include "arm_arch.h" | |
2 #ifdef __ARMEL__ | |
3 # define LO 0 | |
4 # define HI 4 | |
5 # define WORD64(hi0,lo0,hi1,lo1) .word lo0,hi0, lo1,hi1 | |
6 #else | |
7 # define HI 0 | |
8 # define LO 4 | |
9 # define WORD64(hi0,lo0,hi1,lo1) .word hi0,lo0, hi1,lo1 | |
10 #endif | |
11 | |
12 .text | |
13 .code 32 | |
14 .type K512,%object | |
15 .align 5 | |
16 K512: | |
17 WORD64(0x428a2f98,0xd728ae22, 0x71374491,0x23ef65cd) | |
18 WORD64(0xb5c0fbcf,0xec4d3b2f, 0xe9b5dba5,0x8189dbbc) | |
19 WORD64(0x3956c25b,0xf348b538, 0x59f111f1,0xb605d019) | |
20 WORD64(0x923f82a4,0xaf194f9b, 0xab1c5ed5,0xda6d8118) | |
21 WORD64(0xd807aa98,0xa3030242, 0x12835b01,0x45706fbe) | |
22 WORD64(0x243185be,0x4ee4b28c, 0x550c7dc3,0xd5ffb4e2) | |
23 WORD64(0x72be5d74,0xf27b896f, 0x80deb1fe,0x3b1696b1) | |
24 WORD64(0x9bdc06a7,0x25c71235, 0xc19bf174,0xcf692694) | |
25 WORD64(0xe49b69c1,0x9ef14ad2, 0xefbe4786,0x384f25e3) | |
26 WORD64(0x0fc19dc6,0x8b8cd5b5, 0x240ca1cc,0x77ac9c65) | |
27 WORD64(0x2de92c6f,0x592b0275, 0x4a7484aa,0x6ea6e483) | |
28 WORD64(0x5cb0a9dc,0xbd41fbd4, 0x76f988da,0x831153b5) | |
29 WORD64(0x983e5152,0xee66dfab, 0xa831c66d,0x2db43210) | |
30 WORD64(0xb00327c8,0x98fb213f, 0xbf597fc7,0xbeef0ee4) | |
31 WORD64(0xc6e00bf3,0x3da88fc2, 0xd5a79147,0x930aa725) | |
32 WORD64(0x06ca6351,0xe003826f, 0x14292967,0x0a0e6e70) | |
33 WORD64(0x27b70a85,0x46d22ffc, 0x2e1b2138,0x5c26c926) | |
34 WORD64(0x4d2c6dfc,0x5ac42aed, 0x53380d13,0x9d95b3df) | |
35 WORD64(0x650a7354,0x8baf63de, 0x766a0abb,0x3c77b2a8) | |
36 WORD64(0x81c2c92e,0x47edaee6, 0x92722c85,0x1482353b) | |
37 WORD64(0xa2bfe8a1,0x4cf10364, 0xa81a664b,0xbc423001) | |
38 WORD64(0xc24b8b70,0xd0f89791, 0xc76c51a3,0x0654be30) | |
39 WORD64(0xd192e819,0xd6ef5218, 0xd6990624,0x5565a910) | |
40 WORD64(0xf40e3585,0x5771202a, 0x106aa070,0x32bbd1b8) | |
41 WORD64(0x19a4c116,0xb8d2d0c8, 0x1e376c08,0x5141ab53) | |
42 WORD64(0x2748774c,0xdf8eeb99, 0x34b0bcb5,0xe19b48a8) | |
43 WORD64(0x391c0cb3,0xc5c95a63, 0x4ed8aa4a,0xe3418acb) | |
44 WORD64(0x5b9cca4f,0x7763e373, 0x682e6ff3,0xd6b2b8a3) | |
45 WORD64(0x748f82ee,0x5defb2fc, 0x78a5636f,0x43172f60) | |
46 WORD64(0x84c87814,0xa1f0ab72, 0x8cc70208,0x1a6439ec) | |
47 WORD64(0x90befffa,0x23631e28, 0xa4506ceb,0xde82bde9) | |
48 WORD64(0xbef9a3f7,0xb2c67915, 0xc67178f2,0xe372532b) | |
49 WORD64(0xca273ece,0xea26619c, 0xd186b8c7,0x21c0c207) | |
50 WORD64(0xeada7dd6,0xcde0eb1e, 0xf57d4f7f,0xee6ed178) | |
51 WORD64(0x06f067aa,0x72176fba, 0x0a637dc5,0xa2c898a6) | |
52 WORD64(0x113f9804,0xbef90dae, 0x1b710b35,0x131c471b) | |
53 WORD64(0x28db77f5,0x23047d84, 0x32caab7b,0x40c72493) | |
54 WORD64(0x3c9ebe0a,0x15c9bebc, 0x431d67c4,0x9c100d4c) | |
55 WORD64(0x4cc5d4be,0xcb3e42b6, 0x597f299c,0xfc657e2a) | |
56 WORD64(0x5fcb6fab,0x3ad6faec, 0x6c44198c,0x4a475817) | |
57 .size K512,.-K512 | |
58 .LOPENSSL_armcap: | |
59 .word OPENSSL_armcap_P-sha512_block_data_order | |
60 .skip 32-4 | |
61 | |
62 .global sha512_block_data_order | |
63 .type sha512_block_data_order,%function | |
64 sha512_block_data_order: | |
65 sub r3,pc,#8 @ sha512_block_data_order | |
66 add r2,r1,r2,lsl#7 @ len to point at the end of inp | |
67 #if __ARM_ARCH__>=7 | |
68 ldr r12,.LOPENSSL_armcap | |
69 ldr r12,[r3,r12] @ OPENSSL_armcap_P | |
70 tst r12,#1 | |
71 bne .LNEON | |
72 #endif | |
73 stmdb sp!,{r4-r12,lr} | |
74 sub r14,r3,#672 @ K512 | |
75 sub sp,sp,#9*8 | |
76 | |
77 ldr r7,[r0,#32+LO] | |
78 ldr r8,[r0,#32+HI] | |
79 ldr r9, [r0,#48+LO] | |
80 ldr r10, [r0,#48+HI] | |
81 ldr r11, [r0,#56+LO] | |
82 ldr r12, [r0,#56+HI] | |
83 .Loop: | |
84 str r9, [sp,#48+0] | |
85 str r10, [sp,#48+4] | |
86 str r11, [sp,#56+0] | |
87 str r12, [sp,#56+4] | |
88 ldr r5,[r0,#0+LO] | |
89 ldr r6,[r0,#0+HI] | |
90 ldr r3,[r0,#8+LO] | |
91 ldr r4,[r0,#8+HI] | |
92 ldr r9, [r0,#16+LO] | |
93 ldr r10, [r0,#16+HI] | |
94 ldr r11, [r0,#24+LO] | |
95 ldr r12, [r0,#24+HI] | |
96 str r3,[sp,#8+0] | |
97 str r4,[sp,#8+4] | |
98 str r9, [sp,#16+0] | |
99 str r10, [sp,#16+4] | |
100 str r11, [sp,#24+0] | |
101 str r12, [sp,#24+4] | |
102 ldr r3,[r0,#40+LO] | |
103 ldr r4,[r0,#40+HI] | |
104 str r3,[sp,#40+0] | |
105 str r4,[sp,#40+4] | |
106 | |
107 .L00_15: | |
108 #if __ARM_ARCH__<7 | |
109 ldrb r3,[r1,#7] | |
110 ldrb r9, [r1,#6] | |
111 ldrb r10, [r1,#5] | |
112 ldrb r11, [r1,#4] | |
113 ldrb r4,[r1,#3] | |
114 ldrb r12, [r1,#2] | |
115 orr r3,r3,r9,lsl#8 | |
116 ldrb r9, [r1,#1] | |
117 orr r3,r3,r10,lsl#16 | |
118 ldrb r10, [r1],#8 | |
119 orr r3,r3,r11,lsl#24 | |
120 orr r4,r4,r12,lsl#8 | |
121 orr r4,r4,r9,lsl#16 | |
122 orr r4,r4,r10,lsl#24 | |
123 #else | |
124 ldr r3,[r1,#4] | |
125 ldr r4,[r1],#8 | |
126 #ifdef __ARMEL__ | |
127 rev r3,r3 | |
128 rev r4,r4 | |
129 #endif | |
130 #endif | |
131 @ Sigma1(x) (ROTR((x),14) ^ ROTR((x),18) ^ ROTR((x),41)) | |
132 @ LO lo>>14^hi<<18 ^ lo>>18^hi<<14 ^ hi>>9^lo<<23 | |
133 @ HI hi>>14^lo<<18 ^ hi>>18^lo<<14 ^ lo>>9^hi<<23 | |
134 mov r9,r7,lsr#14 | |
135 str r3,[sp,#64+0] | |
136 mov r10,r8,lsr#14 | |
137 str r4,[sp,#64+4] | |
138 eor r9,r9,r8,lsl#18 | |
139 ldr r11,[sp,#56+0] @ h.lo | |
140 eor r10,r10,r7,lsl#18 | |
141 ldr r12,[sp,#56+4] @ h.hi | |
142 eor r9,r9,r7,lsr#18 | |
143 eor r10,r10,r8,lsr#18 | |
144 eor r9,r9,r8,lsl#14 | |
145 eor r10,r10,r7,lsl#14 | |
146 eor r9,r9,r8,lsr#9 | |
147 eor r10,r10,r7,lsr#9 | |
148 eor r9,r9,r7,lsl#23 | |
149 eor r10,r10,r8,lsl#23 @ Sigma1(e) | |
150 adds r3,r3,r9 | |
151 ldr r9,[sp,#40+0] @ f.lo | |
152 adc r4,r4,r10 @ T += Sigma1(e) | |
153 ldr r10,[sp,#40+4] @ f.hi | |
154 adds r3,r3,r11 | |
155 ldr r11,[sp,#48+0] @ g.lo | |
156 adc r4,r4,r12 @ T += h | |
157 ldr r12,[sp,#48+4] @ g.hi | |
158 | |
159 eor r9,r9,r11 | |
160 str r7,[sp,#32+0] | |
161 eor r10,r10,r12 | |
162 str r8,[sp,#32+4] | |
163 and r9,r9,r7 | |
164 str r5,[sp,#0+0] | |
165 and r10,r10,r8 | |
166 str r6,[sp,#0+4] | |
167 eor r9,r9,r11 | |
168 ldr r11,[r14,#LO] @ K[i].lo | |
169 eor r10,r10,r12 @ Ch(e,f,g) | |
170 ldr r12,[r14,#HI] @ K[i].hi | |
171 | |
172 adds r3,r3,r9 | |
173 ldr r7,[sp,#24+0] @ d.lo | |
174 adc r4,r4,r10 @ T += Ch(e,f,g) | |
175 ldr r8,[sp,#24+4] @ d.hi | |
176 adds r3,r3,r11 | |
177 and r9,r11,#0xff | |
178 adc r4,r4,r12 @ T += K[i] | |
179 adds r7,r7,r3 | |
180 ldr r11,[sp,#8+0] @ b.lo | |
181 adc r8,r8,r4 @ d += T | |
182 teq r9,#148 | |
183 | |
184 ldr r12,[sp,#16+0] @ c.lo | |
185 orreq r14,r14,#1 | |
186 @ Sigma0(x) (ROTR((x),28) ^ ROTR((x),34) ^ ROTR((x),39)) | |
187 @ LO lo>>28^hi<<4 ^ hi>>2^lo<<30 ^ hi>>7^lo<<25 | |
188 @ HI hi>>28^lo<<4 ^ lo>>2^hi<<30 ^ lo>>7^hi<<25 | |
189 mov r9,r5,lsr#28 | |
190 mov r10,r6,lsr#28 | |
191 eor r9,r9,r6,lsl#4 | |
192 eor r10,r10,r5,lsl#4 | |
193 eor r9,r9,r6,lsr#2 | |
194 eor r10,r10,r5,lsr#2 | |
195 eor r9,r9,r5,lsl#30 | |
196 eor r10,r10,r6,lsl#30 | |
197 eor r9,r9,r6,lsr#7 | |
198 eor r10,r10,r5,lsr#7 | |
199 eor r9,r9,r5,lsl#25 | |
200 eor r10,r10,r6,lsl#25 @ Sigma0(a) | |
201 adds r3,r3,r9 | |
202 and r9,r5,r11 | |
203 adc r4,r4,r10 @ T += Sigma0(a) | |
204 | |
205 ldr r10,[sp,#8+4] @ b.hi | |
206 orr r5,r5,r11 | |
207 ldr r11,[sp,#16+4] @ c.hi | |
208 and r5,r5,r12 | |
209 and r12,r6,r10 | |
210 orr r6,r6,r10 | |
211 orr r5,r5,r9 @ Maj(a,b,c).lo | |
212 and r6,r6,r11 | |
213 adds r5,r5,r3 | |
214 orr r6,r6,r12 @ Maj(a,b,c).hi | |
215 sub sp,sp,#8 | |
216 adc r6,r6,r4 @ h += T | |
217 tst r14,#1 | |
218 add r14,r14,#8 | |
219 tst r14,#1 | |
220 beq .L00_15 | |
221 ldr r9,[sp,#184+0] | |
222 ldr r10,[sp,#184+4] | |
223 bic r14,r14,#1 | |
224 .L16_79: | |
225 @ sigma0(x) (ROTR((x),1) ^ ROTR((x),8) ^ ((x)>>7)) | |
226 @ LO lo>>1^hi<<31 ^ lo>>8^hi<<24 ^ lo>>7^hi<<25 | |
227 @ HI hi>>1^lo<<31 ^ hi>>8^lo<<24 ^ hi>>7 | |
228 mov r3,r9,lsr#1 | |
229 ldr r11,[sp,#80+0] | |
230 mov r4,r10,lsr#1 | |
231 ldr r12,[sp,#80+4] | |
232 eor r3,r3,r10,lsl#31 | |
233 eor r4,r4,r9,lsl#31 | |
234 eor r3,r3,r9,lsr#8 | |
235 eor r4,r4,r10,lsr#8 | |
236 eor r3,r3,r10,lsl#24 | |
237 eor r4,r4,r9,lsl#24 | |
238 eor r3,r3,r9,lsr#7 | |
239 eor r4,r4,r10,lsr#7 | |
240 eor r3,r3,r10,lsl#25 | |
241 | |
242 @ sigma1(x) (ROTR((x),19) ^ ROTR((x),61) ^ ((x)>>6)) | |
243 @ LO lo>>19^hi<<13 ^ hi>>29^lo<<3 ^ lo>>6^hi<<26 | |
244 @ HI hi>>19^lo<<13 ^ lo>>29^hi<<3 ^ hi>>6 | |
245 mov r9,r11,lsr#19 | |
246 mov r10,r12,lsr#19 | |
247 eor r9,r9,r12,lsl#13 | |
248 eor r10,r10,r11,lsl#13 | |
249 eor r9,r9,r12,lsr#29 | |
250 eor r10,r10,r11,lsr#29 | |
251 eor r9,r9,r11,lsl#3 | |
252 eor r10,r10,r12,lsl#3 | |
253 eor r9,r9,r11,lsr#6 | |
254 eor r10,r10,r12,lsr#6 | |
255 ldr r11,[sp,#120+0] | |
256 eor r9,r9,r12,lsl#26 | |
257 | |
258 ldr r12,[sp,#120+4] | |
259 adds r3,r3,r9 | |
260 ldr r9,[sp,#192+0] | |
261 adc r4,r4,r10 | |
262 | |
263 ldr r10,[sp,#192+4] | |
264 adds r3,r3,r11 | |
265 adc r4,r4,r12 | |
266 adds r3,r3,r9 | |
267 adc r4,r4,r10 | |
268 @ Sigma1(x) (ROTR((x),14) ^ ROTR((x),18) ^ ROTR((x),41)) | |
269 @ LO lo>>14^hi<<18 ^ lo>>18^hi<<14 ^ hi>>9^lo<<23 | |
270 @ HI hi>>14^lo<<18 ^ hi>>18^lo<<14 ^ lo>>9^hi<<23 | |
271 mov r9,r7,lsr#14 | |
272 str r3,[sp,#64+0] | |
273 mov r10,r8,lsr#14 | |
274 str r4,[sp,#64+4] | |
275 eor r9,r9,r8,lsl#18 | |
276 ldr r11,[sp,#56+0] @ h.lo | |
277 eor r10,r10,r7,lsl#18 | |
278 ldr r12,[sp,#56+4] @ h.hi | |
279 eor r9,r9,r7,lsr#18 | |
280 eor r10,r10,r8,lsr#18 | |
281 eor r9,r9,r8,lsl#14 | |
282 eor r10,r10,r7,lsl#14 | |
283 eor r9,r9,r8,lsr#9 | |
284 eor r10,r10,r7,lsr#9 | |
285 eor r9,r9,r7,lsl#23 | |
286 eor r10,r10,r8,lsl#23 @ Sigma1(e) | |
287 adds r3,r3,r9 | |
288 ldr r9,[sp,#40+0] @ f.lo | |
289 adc r4,r4,r10 @ T += Sigma1(e) | |
290 ldr r10,[sp,#40+4] @ f.hi | |
291 adds r3,r3,r11 | |
292 ldr r11,[sp,#48+0] @ g.lo | |
293 adc r4,r4,r12 @ T += h | |
294 ldr r12,[sp,#48+4] @ g.hi | |
295 | |
296 eor r9,r9,r11 | |
297 str r7,[sp,#32+0] | |
298 eor r10,r10,r12 | |
299 str r8,[sp,#32+4] | |
300 and r9,r9,r7 | |
301 str r5,[sp,#0+0] | |
302 and r10,r10,r8 | |
303 str r6,[sp,#0+4] | |
304 eor r9,r9,r11 | |
305 ldr r11,[r14,#LO] @ K[i].lo | |
306 eor r10,r10,r12 @ Ch(e,f,g) | |
307 ldr r12,[r14,#HI] @ K[i].hi | |
308 | |
309 adds r3,r3,r9 | |
310 ldr r7,[sp,#24+0] @ d.lo | |
311 adc r4,r4,r10 @ T += Ch(e,f,g) | |
312 ldr r8,[sp,#24+4] @ d.hi | |
313 adds r3,r3,r11 | |
314 and r9,r11,#0xff | |
315 adc r4,r4,r12 @ T += K[i] | |
316 adds r7,r7,r3 | |
317 ldr r11,[sp,#8+0] @ b.lo | |
318 adc r8,r8,r4 @ d += T | |
319 teq r9,#23 | |
320 | |
321 ldr r12,[sp,#16+0] @ c.lo | |
322 orreq r14,r14,#1 | |
323 @ Sigma0(x) (ROTR((x),28) ^ ROTR((x),34) ^ ROTR((x),39)) | |
324 @ LO lo>>28^hi<<4 ^ hi>>2^lo<<30 ^ hi>>7^lo<<25 | |
325 @ HI hi>>28^lo<<4 ^ lo>>2^hi<<30 ^ lo>>7^hi<<25 | |
326 mov r9,r5,lsr#28 | |
327 mov r10,r6,lsr#28 | |
328 eor r9,r9,r6,lsl#4 | |
329 eor r10,r10,r5,lsl#4 | |
330 eor r9,r9,r6,lsr#2 | |
331 eor r10,r10,r5,lsr#2 | |
332 eor r9,r9,r5,lsl#30 | |
333 eor r10,r10,r6,lsl#30 | |
334 eor r9,r9,r6,lsr#7 | |
335 eor r10,r10,r5,lsr#7 | |
336 eor r9,r9,r5,lsl#25 | |
337 eor r10,r10,r6,lsl#25 @ Sigma0(a) | |
338 adds r3,r3,r9 | |
339 and r9,r5,r11 | |
340 adc r4,r4,r10 @ T += Sigma0(a) | |
341 | |
342 ldr r10,[sp,#8+4] @ b.hi | |
343 orr r5,r5,r11 | |
344 ldr r11,[sp,#16+4] @ c.hi | |
345 and r5,r5,r12 | |
346 and r12,r6,r10 | |
347 orr r6,r6,r10 | |
348 orr r5,r5,r9 @ Maj(a,b,c).lo | |
349 and r6,r6,r11 | |
350 adds r5,r5,r3 | |
351 orr r6,r6,r12 @ Maj(a,b,c).hi | |
352 sub sp,sp,#8 | |
353 adc r6,r6,r4 @ h += T | |
354 tst r14,#1 | |
355 add r14,r14,#8 | |
356 ldreq r9,[sp,#184+0] | |
357 ldreq r10,[sp,#184+4] | |
358 beq .L16_79 | |
359 bic r14,r14,#1 | |
360 | |
361 ldr r3,[sp,#8+0] | |
362 ldr r4,[sp,#8+4] | |
363 ldr r9, [r0,#0+LO] | |
364 ldr r10, [r0,#0+HI] | |
365 ldr r11, [r0,#8+LO] | |
366 ldr r12, [r0,#8+HI] | |
367 adds r9,r5,r9 | |
368 str r9, [r0,#0+LO] | |
369 adc r10,r6,r10 | |
370 str r10, [r0,#0+HI] | |
371 adds r11,r3,r11 | |
372 str r11, [r0,#8+LO] | |
373 adc r12,r4,r12 | |
374 str r12, [r0,#8+HI] | |
375 | |
376 ldr r5,[sp,#16+0] | |
377 ldr r6,[sp,#16+4] | |
378 ldr r3,[sp,#24+0] | |
379 ldr r4,[sp,#24+4] | |
380 ldr r9, [r0,#16+LO] | |
381 ldr r10, [r0,#16+HI] | |
382 ldr r11, [r0,#24+LO] | |
383 ldr r12, [r0,#24+HI] | |
384 adds r9,r5,r9 | |
385 str r9, [r0,#16+LO] | |
386 adc r10,r6,r10 | |
387 str r10, [r0,#16+HI] | |
388 adds r11,r3,r11 | |
389 str r11, [r0,#24+LO] | |
390 adc r12,r4,r12 | |
391 str r12, [r0,#24+HI] | |
392 | |
393 ldr r3,[sp,#40+0] | |
394 ldr r4,[sp,#40+4] | |
395 ldr r9, [r0,#32+LO] | |
396 ldr r10, [r0,#32+HI] | |
397 ldr r11, [r0,#40+LO] | |
398 ldr r12, [r0,#40+HI] | |
399 adds r7,r7,r9 | |
400 str r7,[r0,#32+LO] | |
401 adc r8,r8,r10 | |
402 str r8,[r0,#32+HI] | |
403 adds r11,r3,r11 | |
404 str r11, [r0,#40+LO] | |
405 adc r12,r4,r12 | |
406 str r12, [r0,#40+HI] | |
407 | |
408 ldr r5,[sp,#48+0] | |
409 ldr r6,[sp,#48+4] | |
410 ldr r3,[sp,#56+0] | |
411 ldr r4,[sp,#56+4] | |
412 ldr r9, [r0,#48+LO] | |
413 ldr r10, [r0,#48+HI] | |
414 ldr r11, [r0,#56+LO] | |
415 ldr r12, [r0,#56+HI] | |
416 adds r9,r5,r9 | |
417 str r9, [r0,#48+LO] | |
418 adc r10,r6,r10 | |
419 str r10, [r0,#48+HI] | |
420 adds r11,r3,r11 | |
421 str r11, [r0,#56+LO] | |
422 adc r12,r4,r12 | |
423 str r12, [r0,#56+HI] | |
424 | |
425 add sp,sp,#640 | |
426 sub r14,r14,#640 | |
427 | |
428 teq r1,r2 | |
429 bne .Loop | |
430 | |
431 add sp,sp,#8*9 @ destroy frame | |
432 #if __ARM_ARCH__>=5 | |
433 ldmia sp!,{r4-r12,pc} | |
434 #else | |
435 ldmia sp!,{r4-r12,lr} | |
436 tst lr,#1 | |
437 moveq pc,lr @ be binary compatible with V4, yet | |
438 .word 0xe12fff1e @ interoperable with Thumb ISA:-
) | |
439 #endif | |
440 #if __ARM_ARCH__>=7 | |
441 .fpu neon | |
442 | |
443 .align 4 | |
444 .LNEON: | |
445 dmb @ errata #451034 on early Cortex A8 | |
446 vstmdb sp!,{d8-d15} @ ABI specification says so | |
447 sub r3,r3,#672 @ K512 | |
448 vldmia r0,{d16-d23} @ load context | |
449 .Loop_neon: | |
450 vshr.u64 d24,d20,#14 @ 0 | |
451 #if 0<16 | |
452 vld1.64 {d0},[r1]! @ handles unaligned | |
453 #endif | |
454 vshr.u64 d25,d20,#18 | |
455 vshr.u64 d26,d20,#41 | |
456 vld1.64 {d28},[r3,:64]! @ K[i++] | |
457 vsli.64 d24,d20,#50 | |
458 vsli.64 d25,d20,#46 | |
459 vsli.64 d26,d20,#23 | |
460 #if 0<16 && defined(__ARMEL__) | |
461 vrev64.8 d0,d0 | |
462 #endif | |
463 vadd.i64 d27,d28,d23 | |
464 veor d29,d21,d22 | |
465 veor d24,d25 | |
466 vand d29,d20 | |
467 veor d24,d26 @ Sigma1(e) | |
468 veor d29,d22 @ Ch(e,f,g) | |
469 vadd.i64 d27,d24 | |
470 vshr.u64 d24,d16,#28 | |
471 vadd.i64 d27,d29 | |
472 vshr.u64 d25,d16,#34 | |
473 vshr.u64 d26,d16,#39 | |
474 vsli.64 d24,d16,#36 | |
475 vsli.64 d25,d16,#30 | |
476 vsli.64 d26,d16,#25 | |
477 vadd.i64 d27,d0 | |
478 vorr d30,d16,d18 | |
479 vand d29,d16,d18 | |
480 veor d23,d24,d25 | |
481 vand d30,d17 | |
482 veor d23,d26 @ Sigma0(a) | |
483 vorr d30,d29 @ Maj(a,b,c) | |
484 vadd.i64 d23,d27 | |
485 vadd.i64 d19,d27 | |
486 vadd.i64 d23,d30 | |
487 vshr.u64 d24,d19,#14 @ 1 | |
488 #if 1<16 | |
489 vld1.64 {d1},[r1]! @ handles unaligned | |
490 #endif | |
491 vshr.u64 d25,d19,#18 | |
492 vshr.u64 d26,d19,#41 | |
493 vld1.64 {d28},[r3,:64]! @ K[i++] | |
494 vsli.64 d24,d19,#50 | |
495 vsli.64 d25,d19,#46 | |
496 vsli.64 d26,d19,#23 | |
497 #if 1<16 && defined(__ARMEL__) | |
498 vrev64.8 d1,d1 | |
499 #endif | |
500 vadd.i64 d27,d28,d22 | |
501 veor d29,d20,d21 | |
502 veor d24,d25 | |
503 vand d29,d19 | |
504 veor d24,d26 @ Sigma1(e) | |
505 veor d29,d21 @ Ch(e,f,g) | |
506 vadd.i64 d27,d24 | |
507 vshr.u64 d24,d23,#28 | |
508 vadd.i64 d27,d29 | |
509 vshr.u64 d25,d23,#34 | |
510 vshr.u64 d26,d23,#39 | |
511 vsli.64 d24,d23,#36 | |
512 vsli.64 d25,d23,#30 | |
513 vsli.64 d26,d23,#25 | |
514 vadd.i64 d27,d1 | |
515 vorr d30,d23,d17 | |
516 vand d29,d23,d17 | |
517 veor d22,d24,d25 | |
518 vand d30,d16 | |
519 veor d22,d26 @ Sigma0(a) | |
520 vorr d30,d29 @ Maj(a,b,c) | |
521 vadd.i64 d22,d27 | |
522 vadd.i64 d18,d27 | |
523 vadd.i64 d22,d30 | |
524 vshr.u64 d24,d18,#14 @ 2 | |
525 #if 2<16 | |
526 vld1.64 {d2},[r1]! @ handles unaligned | |
527 #endif | |
528 vshr.u64 d25,d18,#18 | |
529 vshr.u64 d26,d18,#41 | |
530 vld1.64 {d28},[r3,:64]! @ K[i++] | |
531 vsli.64 d24,d18,#50 | |
532 vsli.64 d25,d18,#46 | |
533 vsli.64 d26,d18,#23 | |
534 #if 2<16 && defined(__ARMEL__) | |
535 vrev64.8 d2,d2 | |
536 #endif | |
537 vadd.i64 d27,d28,d21 | |
538 veor d29,d19,d20 | |
539 veor d24,d25 | |
540 vand d29,d18 | |
541 veor d24,d26 @ Sigma1(e) | |
542 veor d29,d20 @ Ch(e,f,g) | |
543 vadd.i64 d27,d24 | |
544 vshr.u64 d24,d22,#28 | |
545 vadd.i64 d27,d29 | |
546 vshr.u64 d25,d22,#34 | |
547 vshr.u64 d26,d22,#39 | |
548 vsli.64 d24,d22,#36 | |
549 vsli.64 d25,d22,#30 | |
550 vsli.64 d26,d22,#25 | |
551 vadd.i64 d27,d2 | |
552 vorr d30,d22,d16 | |
553 vand d29,d22,d16 | |
554 veor d21,d24,d25 | |
555 vand d30,d23 | |
556 veor d21,d26 @ Sigma0(a) | |
557 vorr d30,d29 @ Maj(a,b,c) | |
558 vadd.i64 d21,d27 | |
559 vadd.i64 d17,d27 | |
560 vadd.i64 d21,d30 | |
561 vshr.u64 d24,d17,#14 @ 3 | |
562 #if 3<16 | |
563 vld1.64 {d3},[r1]! @ handles unaligned | |
564 #endif | |
565 vshr.u64 d25,d17,#18 | |
566 vshr.u64 d26,d17,#41 | |
567 vld1.64 {d28},[r3,:64]! @ K[i++] | |
568 vsli.64 d24,d17,#50 | |
569 vsli.64 d25,d17,#46 | |
570 vsli.64 d26,d17,#23 | |
571 #if 3<16 && defined(__ARMEL__) | |
572 vrev64.8 d3,d3 | |
573 #endif | |
574 vadd.i64 d27,d28,d20 | |
575 veor d29,d18,d19 | |
576 veor d24,d25 | |
577 vand d29,d17 | |
578 veor d24,d26 @ Sigma1(e) | |
579 veor d29,d19 @ Ch(e,f,g) | |
580 vadd.i64 d27,d24 | |
581 vshr.u64 d24,d21,#28 | |
582 vadd.i64 d27,d29 | |
583 vshr.u64 d25,d21,#34 | |
584 vshr.u64 d26,d21,#39 | |
585 vsli.64 d24,d21,#36 | |
586 vsli.64 d25,d21,#30 | |
587 vsli.64 d26,d21,#25 | |
588 vadd.i64 d27,d3 | |
589 vorr d30,d21,d23 | |
590 vand d29,d21,d23 | |
591 veor d20,d24,d25 | |
592 vand d30,d22 | |
593 veor d20,d26 @ Sigma0(a) | |
594 vorr d30,d29 @ Maj(a,b,c) | |
595 vadd.i64 d20,d27 | |
596 vadd.i64 d16,d27 | |
597 vadd.i64 d20,d30 | |
598 vshr.u64 d24,d16,#14 @ 4 | |
599 #if 4<16 | |
600 vld1.64 {d4},[r1]! @ handles unaligned | |
601 #endif | |
602 vshr.u64 d25,d16,#18 | |
603 vshr.u64 d26,d16,#41 | |
604 vld1.64 {d28},[r3,:64]! @ K[i++] | |
605 vsli.64 d24,d16,#50 | |
606 vsli.64 d25,d16,#46 | |
607 vsli.64 d26,d16,#23 | |
608 #if 4<16 && defined(__ARMEL__) | |
609 vrev64.8 d4,d4 | |
610 #endif | |
611 vadd.i64 d27,d28,d19 | |
612 veor d29,d17,d18 | |
613 veor d24,d25 | |
614 vand d29,d16 | |
615 veor d24,d26 @ Sigma1(e) | |
616 veor d29,d18 @ Ch(e,f,g) | |
617 vadd.i64 d27,d24 | |
618 vshr.u64 d24,d20,#28 | |
619 vadd.i64 d27,d29 | |
620 vshr.u64 d25,d20,#34 | |
621 vshr.u64 d26,d20,#39 | |
622 vsli.64 d24,d20,#36 | |
623 vsli.64 d25,d20,#30 | |
624 vsli.64 d26,d20,#25 | |
625 vadd.i64 d27,d4 | |
626 vorr d30,d20,d22 | |
627 vand d29,d20,d22 | |
628 veor d19,d24,d25 | |
629 vand d30,d21 | |
630 veor d19,d26 @ Sigma0(a) | |
631 vorr d30,d29 @ Maj(a,b,c) | |
632 vadd.i64 d19,d27 | |
633 vadd.i64 d23,d27 | |
634 vadd.i64 d19,d30 | |
635 vshr.u64 d24,d23,#14 @ 5 | |
636 #if 5<16 | |
637 vld1.64 {d5},[r1]! @ handles unaligned | |
638 #endif | |
639 vshr.u64 d25,d23,#18 | |
640 vshr.u64 d26,d23,#41 | |
641 vld1.64 {d28},[r3,:64]! @ K[i++] | |
642 vsli.64 d24,d23,#50 | |
643 vsli.64 d25,d23,#46 | |
644 vsli.64 d26,d23,#23 | |
645 #if 5<16 && defined(__ARMEL__) | |
646 vrev64.8 d5,d5 | |
647 #endif | |
648 vadd.i64 d27,d28,d18 | |
649 veor d29,d16,d17 | |
650 veor d24,d25 | |
651 vand d29,d23 | |
652 veor d24,d26 @ Sigma1(e) | |
653 veor d29,d17 @ Ch(e,f,g) | |
654 vadd.i64 d27,d24 | |
655 vshr.u64 d24,d19,#28 | |
656 vadd.i64 d27,d29 | |
657 vshr.u64 d25,d19,#34 | |
658 vshr.u64 d26,d19,#39 | |
659 vsli.64 d24,d19,#36 | |
660 vsli.64 d25,d19,#30 | |
661 vsli.64 d26,d19,#25 | |
662 vadd.i64 d27,d5 | |
663 vorr d30,d19,d21 | |
664 vand d29,d19,d21 | |
665 veor d18,d24,d25 | |
666 vand d30,d20 | |
667 veor d18,d26 @ Sigma0(a) | |
668 vorr d30,d29 @ Maj(a,b,c) | |
669 vadd.i64 d18,d27 | |
670 vadd.i64 d22,d27 | |
671 vadd.i64 d18,d30 | |
672 vshr.u64 d24,d22,#14 @ 6 | |
673 #if 6<16 | |
674 vld1.64 {d6},[r1]! @ handles unaligned | |
675 #endif | |
676 vshr.u64 d25,d22,#18 | |
677 vshr.u64 d26,d22,#41 | |
678 vld1.64 {d28},[r3,:64]! @ K[i++] | |
679 vsli.64 d24,d22,#50 | |
680 vsli.64 d25,d22,#46 | |
681 vsli.64 d26,d22,#23 | |
682 #if 6<16 && defined(__ARMEL__) | |
683 vrev64.8 d6,d6 | |
684 #endif | |
685 vadd.i64 d27,d28,d17 | |
686 veor d29,d23,d16 | |
687 veor d24,d25 | |
688 vand d29,d22 | |
689 veor d24,d26 @ Sigma1(e) | |
690 veor d29,d16 @ Ch(e,f,g) | |
691 vadd.i64 d27,d24 | |
692 vshr.u64 d24,d18,#28 | |
693 vadd.i64 d27,d29 | |
694 vshr.u64 d25,d18,#34 | |
695 vshr.u64 d26,d18,#39 | |
696 vsli.64 d24,d18,#36 | |
697 vsli.64 d25,d18,#30 | |
698 vsli.64 d26,d18,#25 | |
699 vadd.i64 d27,d6 | |
700 vorr d30,d18,d20 | |
701 vand d29,d18,d20 | |
702 veor d17,d24,d25 | |
703 vand d30,d19 | |
704 veor d17,d26 @ Sigma0(a) | |
705 vorr d30,d29 @ Maj(a,b,c) | |
706 vadd.i64 d17,d27 | |
707 vadd.i64 d21,d27 | |
708 vadd.i64 d17,d30 | |
709 vshr.u64 d24,d21,#14 @ 7 | |
710 #if 7<16 | |
711 vld1.64 {d7},[r1]! @ handles unaligned | |
712 #endif | |
713 vshr.u64 d25,d21,#18 | |
714 vshr.u64 d26,d21,#41 | |
715 vld1.64 {d28},[r3,:64]! @ K[i++] | |
716 vsli.64 d24,d21,#50 | |
717 vsli.64 d25,d21,#46 | |
718 vsli.64 d26,d21,#23 | |
719 #if 7<16 && defined(__ARMEL__) | |
720 vrev64.8 d7,d7 | |
721 #endif | |
722 vadd.i64 d27,d28,d16 | |
723 veor d29,d22,d23 | |
724 veor d24,d25 | |
725 vand d29,d21 | |
726 veor d24,d26 @ Sigma1(e) | |
727 veor d29,d23 @ Ch(e,f,g) | |
728 vadd.i64 d27,d24 | |
729 vshr.u64 d24,d17,#28 | |
730 vadd.i64 d27,d29 | |
731 vshr.u64 d25,d17,#34 | |
732 vshr.u64 d26,d17,#39 | |
733 vsli.64 d24,d17,#36 | |
734 vsli.64 d25,d17,#30 | |
735 vsli.64 d26,d17,#25 | |
736 vadd.i64 d27,d7 | |
737 vorr d30,d17,d19 | |
738 vand d29,d17,d19 | |
739 veor d16,d24,d25 | |
740 vand d30,d18 | |
741 veor d16,d26 @ Sigma0(a) | |
742 vorr d30,d29 @ Maj(a,b,c) | |
743 vadd.i64 d16,d27 | |
744 vadd.i64 d20,d27 | |
745 vadd.i64 d16,d30 | |
746 vshr.u64 d24,d20,#14 @ 8 | |
747 #if 8<16 | |
748 vld1.64 {d8},[r1]! @ handles unaligned | |
749 #endif | |
750 vshr.u64 d25,d20,#18 | |
751 vshr.u64 d26,d20,#41 | |
752 vld1.64 {d28},[r3,:64]! @ K[i++] | |
753 vsli.64 d24,d20,#50 | |
754 vsli.64 d25,d20,#46 | |
755 vsli.64 d26,d20,#23 | |
756 #if 8<16 && defined(__ARMEL__) | |
757 vrev64.8 d8,d8 | |
758 #endif | |
759 vadd.i64 d27,d28,d23 | |
760 veor d29,d21,d22 | |
761 veor d24,d25 | |
762 vand d29,d20 | |
763 veor d24,d26 @ Sigma1(e) | |
764 veor d29,d22 @ Ch(e,f,g) | |
765 vadd.i64 d27,d24 | |
766 vshr.u64 d24,d16,#28 | |
767 vadd.i64 d27,d29 | |
768 vshr.u64 d25,d16,#34 | |
769 vshr.u64 d26,d16,#39 | |
770 vsli.64 d24,d16,#36 | |
771 vsli.64 d25,d16,#30 | |
772 vsli.64 d26,d16,#25 | |
773 vadd.i64 d27,d8 | |
774 vorr d30,d16,d18 | |
775 vand d29,d16,d18 | |
776 veor d23,d24,d25 | |
777 vand d30,d17 | |
778 veor d23,d26 @ Sigma0(a) | |
779 vorr d30,d29 @ Maj(a,b,c) | |
780 vadd.i64 d23,d27 | |
781 vadd.i64 d19,d27 | |
782 vadd.i64 d23,d30 | |
783 vshr.u64 d24,d19,#14 @ 9 | |
784 #if 9<16 | |
785 vld1.64 {d9},[r1]! @ handles unaligned | |
786 #endif | |
787 vshr.u64 d25,d19,#18 | |
788 vshr.u64 d26,d19,#41 | |
789 vld1.64 {d28},[r3,:64]! @ K[i++] | |
790 vsli.64 d24,d19,#50 | |
791 vsli.64 d25,d19,#46 | |
792 vsli.64 d26,d19,#23 | |
793 #if 9<16 && defined(__ARMEL__) | |
794 vrev64.8 d9,d9 | |
795 #endif | |
796 vadd.i64 d27,d28,d22 | |
797 veor d29,d20,d21 | |
798 veor d24,d25 | |
799 vand d29,d19 | |
800 veor d24,d26 @ Sigma1(e) | |
801 veor d29,d21 @ Ch(e,f,g) | |
802 vadd.i64 d27,d24 | |
803 vshr.u64 d24,d23,#28 | |
804 vadd.i64 d27,d29 | |
805 vshr.u64 d25,d23,#34 | |
806 vshr.u64 d26,d23,#39 | |
807 vsli.64 d24,d23,#36 | |
808 vsli.64 d25,d23,#30 | |
809 vsli.64 d26,d23,#25 | |
810 vadd.i64 d27,d9 | |
811 vorr d30,d23,d17 | |
812 vand d29,d23,d17 | |
813 veor d22,d24,d25 | |
814 vand d30,d16 | |
815 veor d22,d26 @ Sigma0(a) | |
816 vorr d30,d29 @ Maj(a,b,c) | |
817 vadd.i64 d22,d27 | |
818 vadd.i64 d18,d27 | |
819 vadd.i64 d22,d30 | |
820 vshr.u64 d24,d18,#14 @ 10 | |
821 #if 10<16 | |
822 vld1.64 {d10},[r1]! @ handles unaligned | |
823 #endif | |
824 vshr.u64 d25,d18,#18 | |
825 vshr.u64 d26,d18,#41 | |
826 vld1.64 {d28},[r3,:64]! @ K[i++] | |
827 vsli.64 d24,d18,#50 | |
828 vsli.64 d25,d18,#46 | |
829 vsli.64 d26,d18,#23 | |
830 #if 10<16 && defined(__ARMEL__) | |
831 vrev64.8 d10,d10 | |
832 #endif | |
833 vadd.i64 d27,d28,d21 | |
834 veor d29,d19,d20 | |
835 veor d24,d25 | |
836 vand d29,d18 | |
837 veor d24,d26 @ Sigma1(e) | |
838 veor d29,d20 @ Ch(e,f,g) | |
839 vadd.i64 d27,d24 | |
840 vshr.u64 d24,d22,#28 | |
841 vadd.i64 d27,d29 | |
842 vshr.u64 d25,d22,#34 | |
843 vshr.u64 d26,d22,#39 | |
844 vsli.64 d24,d22,#36 | |
845 vsli.64 d25,d22,#30 | |
846 vsli.64 d26,d22,#25 | |
847 vadd.i64 d27,d10 | |
848 vorr d30,d22,d16 | |
849 vand d29,d22,d16 | |
850 veor d21,d24,d25 | |
851 vand d30,d23 | |
852 veor d21,d26 @ Sigma0(a) | |
853 vorr d30,d29 @ Maj(a,b,c) | |
854 vadd.i64 d21,d27 | |
855 vadd.i64 d17,d27 | |
856 vadd.i64 d21,d30 | |
857 vshr.u64 d24,d17,#14 @ 11 | |
858 #if 11<16 | |
859 vld1.64 {d11},[r1]! @ handles unaligned | |
860 #endif | |
861 vshr.u64 d25,d17,#18 | |
862 vshr.u64 d26,d17,#41 | |
863 vld1.64 {d28},[r3,:64]! @ K[i++] | |
864 vsli.64 d24,d17,#50 | |
865 vsli.64 d25,d17,#46 | |
866 vsli.64 d26,d17,#23 | |
867 #if 11<16 && defined(__ARMEL__) | |
868 vrev64.8 d11,d11 | |
869 #endif | |
870 vadd.i64 d27,d28,d20 | |
871 veor d29,d18,d19 | |
872 veor d24,d25 | |
873 vand d29,d17 | |
874 veor d24,d26 @ Sigma1(e) | |
875 veor d29,d19 @ Ch(e,f,g) | |
876 vadd.i64 d27,d24 | |
877 vshr.u64 d24,d21,#28 | |
878 vadd.i64 d27,d29 | |
879 vshr.u64 d25,d21,#34 | |
880 vshr.u64 d26,d21,#39 | |
881 vsli.64 d24,d21,#36 | |
882 vsli.64 d25,d21,#30 | |
883 vsli.64 d26,d21,#25 | |
884 vadd.i64 d27,d11 | |
885 vorr d30,d21,d23 | |
886 vand d29,d21,d23 | |
887 veor d20,d24,d25 | |
888 vand d30,d22 | |
889 veor d20,d26 @ Sigma0(a) | |
890 vorr d30,d29 @ Maj(a,b,c) | |
891 vadd.i64 d20,d27 | |
892 vadd.i64 d16,d27 | |
893 vadd.i64 d20,d30 | |
894 vshr.u64 d24,d16,#14 @ 12 | |
895 #if 12<16 | |
896 vld1.64 {d12},[r1]! @ handles unaligned | |
897 #endif | |
898 vshr.u64 d25,d16,#18 | |
899 vshr.u64 d26,d16,#41 | |
900 vld1.64 {d28},[r3,:64]! @ K[i++] | |
901 vsli.64 d24,d16,#50 | |
902 vsli.64 d25,d16,#46 | |
903 vsli.64 d26,d16,#23 | |
904 #if 12<16 && defined(__ARMEL__) | |
905 vrev64.8 d12,d12 | |
906 #endif | |
907 vadd.i64 d27,d28,d19 | |
908 veor d29,d17,d18 | |
909 veor d24,d25 | |
910 vand d29,d16 | |
911 veor d24,d26 @ Sigma1(e) | |
912 veor d29,d18 @ Ch(e,f,g) | |
913 vadd.i64 d27,d24 | |
914 vshr.u64 d24,d20,#28 | |
915 vadd.i64 d27,d29 | |
916 vshr.u64 d25,d20,#34 | |
917 vshr.u64 d26,d20,#39 | |
918 vsli.64 d24,d20,#36 | |
919 vsli.64 d25,d20,#30 | |
920 vsli.64 d26,d20,#25 | |
921 vadd.i64 d27,d12 | |
922 vorr d30,d20,d22 | |
923 vand d29,d20,d22 | |
924 veor d19,d24,d25 | |
925 vand d30,d21 | |
926 veor d19,d26 @ Sigma0(a) | |
927 vorr d30,d29 @ Maj(a,b,c) | |
928 vadd.i64 d19,d27 | |
929 vadd.i64 d23,d27 | |
930 vadd.i64 d19,d30 | |
931 vshr.u64 d24,d23,#14 @ 13 | |
932 #if 13<16 | |
933 vld1.64 {d13},[r1]! @ handles unaligned | |
934 #endif | |
935 vshr.u64 d25,d23,#18 | |
936 vshr.u64 d26,d23,#41 | |
937 vld1.64 {d28},[r3,:64]! @ K[i++] | |
938 vsli.64 d24,d23,#50 | |
939 vsli.64 d25,d23,#46 | |
940 vsli.64 d26,d23,#23 | |
941 #if 13<16 && defined(__ARMEL__) | |
942 vrev64.8 d13,d13 | |
943 #endif | |
944 vadd.i64 d27,d28,d18 | |
945 veor d29,d16,d17 | |
946 veor d24,d25 | |
947 vand d29,d23 | |
948 veor d24,d26 @ Sigma1(e) | |
949 veor d29,d17 @ Ch(e,f,g) | |
950 vadd.i64 d27,d24 | |
951 vshr.u64 d24,d19,#28 | |
952 vadd.i64 d27,d29 | |
953 vshr.u64 d25,d19,#34 | |
954 vshr.u64 d26,d19,#39 | |
955 vsli.64 d24,d19,#36 | |
956 vsli.64 d25,d19,#30 | |
957 vsli.64 d26,d19,#25 | |
958 vadd.i64 d27,d13 | |
959 vorr d30,d19,d21 | |
960 vand d29,d19,d21 | |
961 veor d18,d24,d25 | |
962 vand d30,d20 | |
963 veor d18,d26 @ Sigma0(a) | |
964 vorr d30,d29 @ Maj(a,b,c) | |
965 vadd.i64 d18,d27 | |
966 vadd.i64 d22,d27 | |
967 vadd.i64 d18,d30 | |
968 vshr.u64 d24,d22,#14 @ 14 | |
969 #if 14<16 | |
970 vld1.64 {d14},[r1]! @ handles unaligned | |
971 #endif | |
972 vshr.u64 d25,d22,#18 | |
973 vshr.u64 d26,d22,#41 | |
974 vld1.64 {d28},[r3,:64]! @ K[i++] | |
975 vsli.64 d24,d22,#50 | |
976 vsli.64 d25,d22,#46 | |
977 vsli.64 d26,d22,#23 | |
978 #if 14<16 && defined(__ARMEL__) | |
979 vrev64.8 d14,d14 | |
980 #endif | |
981 vadd.i64 d27,d28,d17 | |
982 veor d29,d23,d16 | |
983 veor d24,d25 | |
984 vand d29,d22 | |
985 veor d24,d26 @ Sigma1(e) | |
986 veor d29,d16 @ Ch(e,f,g) | |
987 vadd.i64 d27,d24 | |
988 vshr.u64 d24,d18,#28 | |
989 vadd.i64 d27,d29 | |
990 vshr.u64 d25,d18,#34 | |
991 vshr.u64 d26,d18,#39 | |
992 vsli.64 d24,d18,#36 | |
993 vsli.64 d25,d18,#30 | |
994 vsli.64 d26,d18,#25 | |
995 vadd.i64 d27,d14 | |
996 vorr d30,d18,d20 | |
997 vand d29,d18,d20 | |
998 veor d17,d24,d25 | |
999 vand d30,d19 | |
1000 veor d17,d26 @ Sigma0(a) | |
1001 vorr d30,d29 @ Maj(a,b,c) | |
1002 vadd.i64 d17,d27 | |
1003 vadd.i64 d21,d27 | |
1004 vadd.i64 d17,d30 | |
1005 vshr.u64 d24,d21,#14 @ 15 | |
1006 #if 15<16 | |
1007 vld1.64 {d15},[r1]! @ handles unaligned | |
1008 #endif | |
1009 vshr.u64 d25,d21,#18 | |
1010 vshr.u64 d26,d21,#41 | |
1011 vld1.64 {d28},[r3,:64]! @ K[i++] | |
1012 vsli.64 d24,d21,#50 | |
1013 vsli.64 d25,d21,#46 | |
1014 vsli.64 d26,d21,#23 | |
1015 #if 15<16 && defined(__ARMEL__) | |
1016 vrev64.8 d15,d15 | |
1017 #endif | |
1018 vadd.i64 d27,d28,d16 | |
1019 veor d29,d22,d23 | |
1020 veor d24,d25 | |
1021 vand d29,d21 | |
1022 veor d24,d26 @ Sigma1(e) | |
1023 veor d29,d23 @ Ch(e,f,g) | |
1024 vadd.i64 d27,d24 | |
1025 vshr.u64 d24,d17,#28 | |
1026 vadd.i64 d27,d29 | |
1027 vshr.u64 d25,d17,#34 | |
1028 vshr.u64 d26,d17,#39 | |
1029 vsli.64 d24,d17,#36 | |
1030 vsli.64 d25,d17,#30 | |
1031 vsli.64 d26,d17,#25 | |
1032 vadd.i64 d27,d15 | |
1033 vorr d30,d17,d19 | |
1034 vand d29,d17,d19 | |
1035 veor d16,d24,d25 | |
1036 vand d30,d18 | |
1037 veor d16,d26 @ Sigma0(a) | |
1038 vorr d30,d29 @ Maj(a,b,c) | |
1039 vadd.i64 d16,d27 | |
1040 vadd.i64 d20,d27 | |
1041 vadd.i64 d16,d30 | |
1042 mov r12,#4 | |
1043 .L16_79_neon: | |
1044 subs r12,#1 | |
1045 vshr.u64 q12,q7,#19 | |
1046 vshr.u64 q13,q7,#61 | |
1047 vshr.u64 q15,q7,#6 | |
1048 vsli.64 q12,q7,#45 | |
1049 vext.8 q14,q0,q1,#8 @ X[i+1] | |
1050 vsli.64 q13,q7,#3 | |
1051 veor q15,q12 | |
1052 vshr.u64 q12,q14,#1 | |
1053 veor q15,q13 @ sigma1(X[i+14]) | |
1054 vshr.u64 q13,q14,#8 | |
1055 vadd.i64 q0,q15 | |
1056 vshr.u64 q15,q14,#7 | |
1057 vsli.64 q12,q14,#63 | |
1058 vsli.64 q13,q14,#56 | |
1059 vext.8 q14,q4,q5,#8 @ X[i+9] | |
1060 veor q15,q12 | |
1061 vshr.u64 d24,d20,#14 @ from NEON_00_15 | |
1062 vadd.i64 q0,q14 | |
1063 vshr.u64 d25,d20,#18 @ from NEON_00_15 | |
1064 veor q15,q13 @ sigma0(X[i+1]) | |
1065 vshr.u64 d26,d20,#41 @ from NEON_00_15 | |
1066 vadd.i64 q0,q15 | |
1067 vld1.64 {d28},[r3,:64]! @ K[i++] | |
1068 vsli.64 d24,d20,#50 | |
1069 vsli.64 d25,d20,#46 | |
1070 vsli.64 d26,d20,#23 | |
1071 #if 16<16 && defined(__ARMEL__) | |
1072 vrev64.8 , | |
1073 #endif | |
1074 vadd.i64 d27,d28,d23 | |
1075 veor d29,d21,d22 | |
1076 veor d24,d25 | |
1077 vand d29,d20 | |
1078 veor d24,d26 @ Sigma1(e) | |
1079 veor d29,d22 @ Ch(e,f,g) | |
1080 vadd.i64 d27,d24 | |
1081 vshr.u64 d24,d16,#28 | |
1082 vadd.i64 d27,d29 | |
1083 vshr.u64 d25,d16,#34 | |
1084 vshr.u64 d26,d16,#39 | |
1085 vsli.64 d24,d16,#36 | |
1086 vsli.64 d25,d16,#30 | |
1087 vsli.64 d26,d16,#25 | |
1088 vadd.i64 d27,d0 | |
1089 vorr d30,d16,d18 | |
1090 vand d29,d16,d18 | |
1091 veor d23,d24,d25 | |
1092 vand d30,d17 | |
1093 veor d23,d26 @ Sigma0(a) | |
1094 vorr d30,d29 @ Maj(a,b,c) | |
1095 vadd.i64 d23,d27 | |
1096 vadd.i64 d19,d27 | |
1097 vadd.i64 d23,d30 | |
1098 vshr.u64 d24,d19,#14 @ 17 | |
1099 #if 17<16 | |
1100 vld1.64 {d1},[r1]! @ handles unaligned | |
1101 #endif | |
1102 vshr.u64 d25,d19,#18 | |
1103 vshr.u64 d26,d19,#41 | |
1104 vld1.64 {d28},[r3,:64]! @ K[i++] | |
1105 vsli.64 d24,d19,#50 | |
1106 vsli.64 d25,d19,#46 | |
1107 vsli.64 d26,d19,#23 | |
1108 #if 17<16 && defined(__ARMEL__) | |
1109 vrev64.8 , | |
1110 #endif | |
1111 vadd.i64 d27,d28,d22 | |
1112 veor d29,d20,d21 | |
1113 veor d24,d25 | |
1114 vand d29,d19 | |
1115 veor d24,d26 @ Sigma1(e) | |
1116 veor d29,d21 @ Ch(e,f,g) | |
1117 vadd.i64 d27,d24 | |
1118 vshr.u64 d24,d23,#28 | |
1119 vadd.i64 d27,d29 | |
1120 vshr.u64 d25,d23,#34 | |
1121 vshr.u64 d26,d23,#39 | |
1122 vsli.64 d24,d23,#36 | |
1123 vsli.64 d25,d23,#30 | |
1124 vsli.64 d26,d23,#25 | |
1125 vadd.i64 d27,d1 | |
1126 vorr d30,d23,d17 | |
1127 vand d29,d23,d17 | |
1128 veor d22,d24,d25 | |
1129 vand d30,d16 | |
1130 veor d22,d26 @ Sigma0(a) | |
1131 vorr d30,d29 @ Maj(a,b,c) | |
1132 vadd.i64 d22,d27 | |
1133 vadd.i64 d18,d27 | |
1134 vadd.i64 d22,d30 | |
1135 vshr.u64 q12,q0,#19 | |
1136 vshr.u64 q13,q0,#61 | |
1137 vshr.u64 q15,q0,#6 | |
1138 vsli.64 q12,q0,#45 | |
1139 vext.8 q14,q1,q2,#8 @ X[i+1] | |
1140 vsli.64 q13,q0,#3 | |
1141 veor q15,q12 | |
1142 vshr.u64 q12,q14,#1 | |
1143 veor q15,q13 @ sigma1(X[i+14]) | |
1144 vshr.u64 q13,q14,#8 | |
1145 vadd.i64 q1,q15 | |
1146 vshr.u64 q15,q14,#7 | |
1147 vsli.64 q12,q14,#63 | |
1148 vsli.64 q13,q14,#56 | |
1149 vext.8 q14,q5,q6,#8 @ X[i+9] | |
1150 veor q15,q12 | |
1151 vshr.u64 d24,d18,#14 @ from NEON_00_15 | |
1152 vadd.i64 q1,q14 | |
1153 vshr.u64 d25,d18,#18 @ from NEON_00_15 | |
1154 veor q15,q13 @ sigma0(X[i+1]) | |
1155 vshr.u64 d26,d18,#41 @ from NEON_00_15 | |
1156 vadd.i64 q1,q15 | |
1157 vld1.64 {d28},[r3,:64]! @ K[i++] | |
1158 vsli.64 d24,d18,#50 | |
1159 vsli.64 d25,d18,#46 | |
1160 vsli.64 d26,d18,#23 | |
1161 #if 18<16 && defined(__ARMEL__) | |
1162 vrev64.8 , | |
1163 #endif | |
1164 vadd.i64 d27,d28,d21 | |
1165 veor d29,d19,d20 | |
1166 veor d24,d25 | |
1167 vand d29,d18 | |
1168 veor d24,d26 @ Sigma1(e) | |
1169 veor d29,d20 @ Ch(e,f,g) | |
1170 vadd.i64 d27,d24 | |
1171 vshr.u64 d24,d22,#28 | |
1172 vadd.i64 d27,d29 | |
1173 vshr.u64 d25,d22,#34 | |
1174 vshr.u64 d26,d22,#39 | |
1175 vsli.64 d24,d22,#36 | |
1176 vsli.64 d25,d22,#30 | |
1177 vsli.64 d26,d22,#25 | |
1178 vadd.i64 d27,d2 | |
1179 vorr d30,d22,d16 | |
1180 vand d29,d22,d16 | |
1181 veor d21,d24,d25 | |
1182 vand d30,d23 | |
1183 veor d21,d26 @ Sigma0(a) | |
1184 vorr d30,d29 @ Maj(a,b,c) | |
1185 vadd.i64 d21,d27 | |
1186 vadd.i64 d17,d27 | |
1187 vadd.i64 d21,d30 | |
1188 vshr.u64 d24,d17,#14 @ 19 | |
1189 #if 19<16 | |
1190 vld1.64 {d3},[r1]! @ handles unaligned | |
1191 #endif | |
1192 vshr.u64 d25,d17,#18 | |
1193 vshr.u64 d26,d17,#41 | |
1194 vld1.64 {d28},[r3,:64]! @ K[i++] | |
1195 vsli.64 d24,d17,#50 | |
1196 vsli.64 d25,d17,#46 | |
1197 vsli.64 d26,d17,#23 | |
1198 #if 19<16 && defined(__ARMEL__) | |
1199 vrev64.8 , | |
1200 #endif | |
1201 vadd.i64 d27,d28,d20 | |
1202 veor d29,d18,d19 | |
1203 veor d24,d25 | |
1204 vand d29,d17 | |
1205 veor d24,d26 @ Sigma1(e) | |
1206 veor d29,d19 @ Ch(e,f,g) | |
1207 vadd.i64 d27,d24 | |
1208 vshr.u64 d24,d21,#28 | |
1209 vadd.i64 d27,d29 | |
1210 vshr.u64 d25,d21,#34 | |
1211 vshr.u64 d26,d21,#39 | |
1212 vsli.64 d24,d21,#36 | |
1213 vsli.64 d25,d21,#30 | |
1214 vsli.64 d26,d21,#25 | |
1215 vadd.i64 d27,d3 | |
1216 vorr d30,d21,d23 | |
1217 vand d29,d21,d23 | |
1218 veor d20,d24,d25 | |
1219 vand d30,d22 | |
1220 veor d20,d26 @ Sigma0(a) | |
1221 vorr d30,d29 @ Maj(a,b,c) | |
1222 vadd.i64 d20,d27 | |
1223 vadd.i64 d16,d27 | |
1224 vadd.i64 d20,d30 | |
1225 vshr.u64 q12,q1,#19 | |
1226 vshr.u64 q13,q1,#61 | |
1227 vshr.u64 q15,q1,#6 | |
1228 vsli.64 q12,q1,#45 | |
1229 vext.8 q14,q2,q3,#8 @ X[i+1] | |
1230 vsli.64 q13,q1,#3 | |
1231 veor q15,q12 | |
1232 vshr.u64 q12,q14,#1 | |
1233 veor q15,q13 @ sigma1(X[i+14]) | |
1234 vshr.u64 q13,q14,#8 | |
1235 vadd.i64 q2,q15 | |
1236 vshr.u64 q15,q14,#7 | |
1237 vsli.64 q12,q14,#63 | |
1238 vsli.64 q13,q14,#56 | |
1239 vext.8 q14,q6,q7,#8 @ X[i+9] | |
1240 veor q15,q12 | |
1241 vshr.u64 d24,d16,#14 @ from NEON_00_15 | |
1242 vadd.i64 q2,q14 | |
1243 vshr.u64 d25,d16,#18 @ from NEON_00_15 | |
1244 veor q15,q13 @ sigma0(X[i+1]) | |
1245 vshr.u64 d26,d16,#41 @ from NEON_00_15 | |
1246 vadd.i64 q2,q15 | |
1247 vld1.64 {d28},[r3,:64]! @ K[i++] | |
1248 vsli.64 d24,d16,#50 | |
1249 vsli.64 d25,d16,#46 | |
1250 vsli.64 d26,d16,#23 | |
1251 #if 20<16 && defined(__ARMEL__) | |
1252 vrev64.8 , | |
1253 #endif | |
1254 vadd.i64 d27,d28,d19 | |
1255 veor d29,d17,d18 | |
1256 veor d24,d25 | |
1257 vand d29,d16 | |
1258 veor d24,d26 @ Sigma1(e) | |
1259 veor d29,d18 @ Ch(e,f,g) | |
1260 vadd.i64 d27,d24 | |
1261 vshr.u64 d24,d20,#28 | |
1262 vadd.i64 d27,d29 | |
1263 vshr.u64 d25,d20,#34 | |
1264 vshr.u64 d26,d20,#39 | |
1265 vsli.64 d24,d20,#36 | |
1266 vsli.64 d25,d20,#30 | |
1267 vsli.64 d26,d20,#25 | |
1268 vadd.i64 d27,d4 | |
1269 vorr d30,d20,d22 | |
1270 vand d29,d20,d22 | |
1271 veor d19,d24,d25 | |
1272 vand d30,d21 | |
1273 veor d19,d26 @ Sigma0(a) | |
1274 vorr d30,d29 @ Maj(a,b,c) | |
1275 vadd.i64 d19,d27 | |
1276 vadd.i64 d23,d27 | |
1277 vadd.i64 d19,d30 | |
1278 vshr.u64 d24,d23,#14 @ 21 | |
1279 #if 21<16 | |
1280 vld1.64 {d5},[r1]! @ handles unaligned | |
1281 #endif | |
1282 vshr.u64 d25,d23,#18 | |
1283 vshr.u64 d26,d23,#41 | |
1284 vld1.64 {d28},[r3,:64]! @ K[i++] | |
1285 vsli.64 d24,d23,#50 | |
1286 vsli.64 d25,d23,#46 | |
1287 vsli.64 d26,d23,#23 | |
1288 #if 21<16 && defined(__ARMEL__) | |
1289 vrev64.8 , | |
1290 #endif | |
1291 vadd.i64 d27,d28,d18 | |
1292 veor d29,d16,d17 | |
1293 veor d24,d25 | |
1294 vand d29,d23 | |
1295 veor d24,d26 @ Sigma1(e) | |
1296 veor d29,d17 @ Ch(e,f,g) | |
1297 vadd.i64 d27,d24 | |
1298 vshr.u64 d24,d19,#28 | |
1299 vadd.i64 d27,d29 | |
1300 vshr.u64 d25,d19,#34 | |
1301 vshr.u64 d26,d19,#39 | |
1302 vsli.64 d24,d19,#36 | |
1303 vsli.64 d25,d19,#30 | |
1304 vsli.64 d26,d19,#25 | |
1305 vadd.i64 d27,d5 | |
1306 vorr d30,d19,d21 | |
1307 vand d29,d19,d21 | |
1308 veor d18,d24,d25 | |
1309 vand d30,d20 | |
1310 veor d18,d26 @ Sigma0(a) | |
1311 vorr d30,d29 @ Maj(a,b,c) | |
1312 vadd.i64 d18,d27 | |
1313 vadd.i64 d22,d27 | |
1314 vadd.i64 d18,d30 | |
1315 vshr.u64 q12,q2,#19 | |
1316 vshr.u64 q13,q2,#61 | |
1317 vshr.u64 q15,q2,#6 | |
1318 vsli.64 q12,q2,#45 | |
1319 vext.8 q14,q3,q4,#8 @ X[i+1] | |
1320 vsli.64 q13,q2,#3 | |
1321 veor q15,q12 | |
1322 vshr.u64 q12,q14,#1 | |
1323 veor q15,q13 @ sigma1(X[i+14]) | |
1324 vshr.u64 q13,q14,#8 | |
1325 vadd.i64 q3,q15 | |
1326 vshr.u64 q15,q14,#7 | |
1327 vsli.64 q12,q14,#63 | |
1328 vsli.64 q13,q14,#56 | |
1329 vext.8 q14,q7,q0,#8 @ X[i+9] | |
1330 veor q15,q12 | |
1331 vshr.u64 d24,d22,#14 @ from NEON_00_15 | |
1332 vadd.i64 q3,q14 | |
1333 vshr.u64 d25,d22,#18 @ from NEON_00_15 | |
1334 veor q15,q13 @ sigma0(X[i+1]) | |
1335 vshr.u64 d26,d22,#41 @ from NEON_00_15 | |
1336 vadd.i64 q3,q15 | |
1337 vld1.64 {d28},[r3,:64]! @ K[i++] | |
1338 vsli.64 d24,d22,#50 | |
1339 vsli.64 d25,d22,#46 | |
1340 vsli.64 d26,d22,#23 | |
1341 #if 22<16 && defined(__ARMEL__) | |
1342 vrev64.8 , | |
1343 #endif | |
1344 vadd.i64 d27,d28,d17 | |
1345 veor d29,d23,d16 | |
1346 veor d24,d25 | |
1347 vand d29,d22 | |
1348 veor d24,d26 @ Sigma1(e) | |
1349 veor d29,d16 @ Ch(e,f,g) | |
1350 vadd.i64 d27,d24 | |
1351 vshr.u64 d24,d18,#28 | |
1352 vadd.i64 d27,d29 | |
1353 vshr.u64 d25,d18,#34 | |
1354 vshr.u64 d26,d18,#39 | |
1355 vsli.64 d24,d18,#36 | |
1356 vsli.64 d25,d18,#30 | |
1357 vsli.64 d26,d18,#25 | |
1358 vadd.i64 d27,d6 | |
1359 vorr d30,d18,d20 | |
1360 vand d29,d18,d20 | |
1361 veor d17,d24,d25 | |
1362 vand d30,d19 | |
1363 veor d17,d26 @ Sigma0(a) | |
1364 vorr d30,d29 @ Maj(a,b,c) | |
1365 vadd.i64 d17,d27 | |
1366 vadd.i64 d21,d27 | |
1367 vadd.i64 d17,d30 | |
1368 vshr.u64 d24,d21,#14 @ 23 | |
1369 #if 23<16 | |
1370 vld1.64 {d7},[r1]! @ handles unaligned | |
1371 #endif | |
1372 vshr.u64 d25,d21,#18 | |
1373 vshr.u64 d26,d21,#41 | |
1374 vld1.64 {d28},[r3,:64]! @ K[i++] | |
1375 vsli.64 d24,d21,#50 | |
1376 vsli.64 d25,d21,#46 | |
1377 vsli.64 d26,d21,#23 | |
1378 #if 23<16 && defined(__ARMEL__) | |
1379 vrev64.8 , | |
1380 #endif | |
1381 vadd.i64 d27,d28,d16 | |
1382 veor d29,d22,d23 | |
1383 veor d24,d25 | |
1384 vand d29,d21 | |
1385 veor d24,d26 @ Sigma1(e) | |
1386 veor d29,d23 @ Ch(e,f,g) | |
1387 vadd.i64 d27,d24 | |
1388 vshr.u64 d24,d17,#28 | |
1389 vadd.i64 d27,d29 | |
1390 vshr.u64 d25,d17,#34 | |
1391 vshr.u64 d26,d17,#39 | |
1392 vsli.64 d24,d17,#36 | |
1393 vsli.64 d25,d17,#30 | |
1394 vsli.64 d26,d17,#25 | |
1395 vadd.i64 d27,d7 | |
1396 vorr d30,d17,d19 | |
1397 vand d29,d17,d19 | |
1398 veor d16,d24,d25 | |
1399 vand d30,d18 | |
1400 veor d16,d26 @ Sigma0(a) | |
1401 vorr d30,d29 @ Maj(a,b,c) | |
1402 vadd.i64 d16,d27 | |
1403 vadd.i64 d20,d27 | |
1404 vadd.i64 d16,d30 | |
1405 vshr.u64 q12,q3,#19 | |
1406 vshr.u64 q13,q3,#61 | |
1407 vshr.u64 q15,q3,#6 | |
1408 vsli.64 q12,q3,#45 | |
1409 vext.8 q14,q4,q5,#8 @ X[i+1] | |
1410 vsli.64 q13,q3,#3 | |
1411 veor q15,q12 | |
1412 vshr.u64 q12,q14,#1 | |
1413 veor q15,q13 @ sigma1(X[i+14]) | |
1414 vshr.u64 q13,q14,#8 | |
1415 vadd.i64 q4,q15 | |
1416 vshr.u64 q15,q14,#7 | |
1417 vsli.64 q12,q14,#63 | |
1418 vsli.64 q13,q14,#56 | |
1419 vext.8 q14,q0,q1,#8 @ X[i+9] | |
1420 veor q15,q12 | |
1421 vshr.u64 d24,d20,#14 @ from NEON_00_15 | |
1422 vadd.i64 q4,q14 | |
1423 vshr.u64 d25,d20,#18 @ from NEON_00_15 | |
1424 veor q15,q13 @ sigma0(X[i+1]) | |
1425 vshr.u64 d26,d20,#41 @ from NEON_00_15 | |
1426 vadd.i64 q4,q15 | |
1427 vld1.64 {d28},[r3,:64]! @ K[i++] | |
1428 vsli.64 d24,d20,#50 | |
1429 vsli.64 d25,d20,#46 | |
1430 vsli.64 d26,d20,#23 | |
1431 #if 24<16 && defined(__ARMEL__) | |
1432 vrev64.8 , | |
1433 #endif | |
1434 vadd.i64 d27,d28,d23 | |
1435 veor d29,d21,d22 | |
1436 veor d24,d25 | |
1437 vand d29,d20 | |
1438 veor d24,d26 @ Sigma1(e) | |
1439 veor d29,d22 @ Ch(e,f,g) | |
1440 vadd.i64 d27,d24 | |
1441 vshr.u64 d24,d16,#28 | |
1442 vadd.i64 d27,d29 | |
1443 vshr.u64 d25,d16,#34 | |
1444 vshr.u64 d26,d16,#39 | |
1445 vsli.64 d24,d16,#36 | |
1446 vsli.64 d25,d16,#30 | |
1447 vsli.64 d26,d16,#25 | |
1448 vadd.i64 d27,d8 | |
1449 vorr d30,d16,d18 | |
1450 vand d29,d16,d18 | |
1451 veor d23,d24,d25 | |
1452 vand d30,d17 | |
1453 veor d23,d26 @ Sigma0(a) | |
1454 vorr d30,d29 @ Maj(a,b,c) | |
1455 vadd.i64 d23,d27 | |
1456 vadd.i64 d19,d27 | |
1457 vadd.i64 d23,d30 | |
1458 vshr.u64 d24,d19,#14 @ 25 | |
1459 #if 25<16 | |
1460 vld1.64 {d9},[r1]! @ handles unaligned | |
1461 #endif | |
1462 vshr.u64 d25,d19,#18 | |
1463 vshr.u64 d26,d19,#41 | |
1464 vld1.64 {d28},[r3,:64]! @ K[i++] | |
1465 vsli.64 d24,d19,#50 | |
1466 vsli.64 d25,d19,#46 | |
1467 vsli.64 d26,d19,#23 | |
1468 #if 25<16 && defined(__ARMEL__) | |
1469 vrev64.8 , | |
1470 #endif | |
1471 vadd.i64 d27,d28,d22 | |
1472 veor d29,d20,d21 | |
1473 veor d24,d25 | |
1474 vand d29,d19 | |
1475 veor d24,d26 @ Sigma1(e) | |
1476 veor d29,d21 @ Ch(e,f,g) | |
1477 vadd.i64 d27,d24 | |
1478 vshr.u64 d24,d23,#28 | |
1479 vadd.i64 d27,d29 | |
1480 vshr.u64 d25,d23,#34 | |
1481 vshr.u64 d26,d23,#39 | |
1482 vsli.64 d24,d23,#36 | |
1483 vsli.64 d25,d23,#30 | |
1484 vsli.64 d26,d23,#25 | |
1485 vadd.i64 d27,d9 | |
1486 vorr d30,d23,d17 | |
1487 vand d29,d23,d17 | |
1488 veor d22,d24,d25 | |
1489 vand d30,d16 | |
1490 veor d22,d26 @ Sigma0(a) | |
1491 vorr d30,d29 @ Maj(a,b,c) | |
1492 vadd.i64 d22,d27 | |
1493 vadd.i64 d18,d27 | |
1494 vadd.i64 d22,d30 | |
1495 vshr.u64 q12,q4,#19 | |
1496 vshr.u64 q13,q4,#61 | |
1497 vshr.u64 q15,q4,#6 | |
1498 vsli.64 q12,q4,#45 | |
1499 vext.8 q14,q5,q6,#8 @ X[i+1] | |
1500 vsli.64 q13,q4,#3 | |
1501 veor q15,q12 | |
1502 vshr.u64 q12,q14,#1 | |
1503 veor q15,q13 @ sigma1(X[i+14]) | |
1504 vshr.u64 q13,q14,#8 | |
1505 vadd.i64 q5,q15 | |
1506 vshr.u64 q15,q14,#7 | |
1507 vsli.64 q12,q14,#63 | |
1508 vsli.64 q13,q14,#56 | |
1509 vext.8 q14,q1,q2,#8 @ X[i+9] | |
1510 veor q15,q12 | |
1511 vshr.u64 d24,d18,#14 @ from NEON_00_15 | |
1512 vadd.i64 q5,q14 | |
1513 vshr.u64 d25,d18,#18 @ from NEON_00_15 | |
1514 veor q15,q13 @ sigma0(X[i+1]) | |
1515 vshr.u64 d26,d18,#41 @ from NEON_00_15 | |
1516 vadd.i64 q5,q15 | |
1517 vld1.64 {d28},[r3,:64]! @ K[i++] | |
1518 vsli.64 d24,d18,#50 | |
1519 vsli.64 d25,d18,#46 | |
1520 vsli.64 d26,d18,#23 | |
1521 #if 26<16 && defined(__ARMEL__) | |
1522 vrev64.8 , | |
1523 #endif | |
1524 vadd.i64 d27,d28,d21 | |
1525 veor d29,d19,d20 | |
1526 veor d24,d25 | |
1527 vand d29,d18 | |
1528 veor d24,d26 @ Sigma1(e) | |
1529 veor d29,d20 @ Ch(e,f,g) | |
1530 vadd.i64 d27,d24 | |
1531 vshr.u64 d24,d22,#28 | |
1532 vadd.i64 d27,d29 | |
1533 vshr.u64 d25,d22,#34 | |
1534 vshr.u64 d26,d22,#39 | |
1535 vsli.64 d24,d22,#36 | |
1536 vsli.64 d25,d22,#30 | |
1537 vsli.64 d26,d22,#25 | |
1538 vadd.i64 d27,d10 | |
1539 vorr d30,d22,d16 | |
1540 vand d29,d22,d16 | |
1541 veor d21,d24,d25 | |
1542 vand d30,d23 | |
1543 veor d21,d26 @ Sigma0(a) | |
1544 vorr d30,d29 @ Maj(a,b,c) | |
1545 vadd.i64 d21,d27 | |
1546 vadd.i64 d17,d27 | |
1547 vadd.i64 d21,d30 | |
1548 vshr.u64 d24,d17,#14 @ 27 | |
1549 #if 27<16 | |
1550 vld1.64 {d11},[r1]! @ handles unaligned | |
1551 #endif | |
1552 vshr.u64 d25,d17,#18 | |
1553 vshr.u64 d26,d17,#41 | |
1554 vld1.64 {d28},[r3,:64]! @ K[i++] | |
1555 vsli.64 d24,d17,#50 | |
1556 vsli.64 d25,d17,#46 | |
1557 vsli.64 d26,d17,#23 | |
1558 #if 27<16 && defined(__ARMEL__) | |
1559 vrev64.8 , | |
1560 #endif | |
1561 vadd.i64 d27,d28,d20 | |
1562 veor d29,d18,d19 | |
1563 veor d24,d25 | |
1564 vand d29,d17 | |
1565 veor d24,d26 @ Sigma1(e) | |
1566 veor d29,d19 @ Ch(e,f,g) | |
1567 vadd.i64 d27,d24 | |
1568 vshr.u64 d24,d21,#28 | |
1569 vadd.i64 d27,d29 | |
1570 vshr.u64 d25,d21,#34 | |
1571 vshr.u64 d26,d21,#39 | |
1572 vsli.64 d24,d21,#36 | |
1573 vsli.64 d25,d21,#30 | |
1574 vsli.64 d26,d21,#25 | |
1575 vadd.i64 d27,d11 | |
1576 vorr d30,d21,d23 | |
1577 vand d29,d21,d23 | |
1578 veor d20,d24,d25 | |
1579 vand d30,d22 | |
1580 veor d20,d26 @ Sigma0(a) | |
1581 vorr d30,d29 @ Maj(a,b,c) | |
1582 vadd.i64 d20,d27 | |
1583 vadd.i64 d16,d27 | |
1584 vadd.i64 d20,d30 | |
1585 vshr.u64 q12,q5,#19 | |
1586 vshr.u64 q13,q5,#61 | |
1587 vshr.u64 q15,q5,#6 | |
1588 vsli.64 q12,q5,#45 | |
1589 vext.8 q14,q6,q7,#8 @ X[i+1] | |
1590 vsli.64 q13,q5,#3 | |
1591 veor q15,q12 | |
1592 vshr.u64 q12,q14,#1 | |
1593 veor q15,q13 @ sigma1(X[i+14]) | |
1594 vshr.u64 q13,q14,#8 | |
1595 vadd.i64 q6,q15 | |
1596 vshr.u64 q15,q14,#7 | |
1597 vsli.64 q12,q14,#63 | |
1598 vsli.64 q13,q14,#56 | |
1599 vext.8 q14,q2,q3,#8 @ X[i+9] | |
1600 veor q15,q12 | |
1601 vshr.u64 d24,d16,#14 @ from NEON_00_15 | |
1602 vadd.i64 q6,q14 | |
1603 vshr.u64 d25,d16,#18 @ from NEON_00_15 | |
1604 veor q15,q13 @ sigma0(X[i+1]) | |
1605 vshr.u64 d26,d16,#41 @ from NEON_00_15 | |
1606 vadd.i64 q6,q15 | |
1607 vld1.64 {d28},[r3,:64]! @ K[i++] | |
1608 vsli.64 d24,d16,#50 | |
1609 vsli.64 d25,d16,#46 | |
1610 vsli.64 d26,d16,#23 | |
1611 #if 28<16 && defined(__ARMEL__) | |
1612 vrev64.8 , | |
1613 #endif | |
1614 vadd.i64 d27,d28,d19 | |
1615 veor d29,d17,d18 | |
1616 veor d24,d25 | |
1617 vand d29,d16 | |
1618 veor d24,d26 @ Sigma1(e) | |
1619 veor d29,d18 @ Ch(e,f,g) | |
1620 vadd.i64 d27,d24 | |
1621 vshr.u64 d24,d20,#28 | |
1622 vadd.i64 d27,d29 | |
1623 vshr.u64 d25,d20,#34 | |
1624 vshr.u64 d26,d20,#39 | |
1625 vsli.64 d24,d20,#36 | |
1626 vsli.64 d25,d20,#30 | |
1627 vsli.64 d26,d20,#25 | |
1628 vadd.i64 d27,d12 | |
1629 vorr d30,d20,d22 | |
1630 vand d29,d20,d22 | |
1631 veor d19,d24,d25 | |
1632 vand d30,d21 | |
1633 veor d19,d26 @ Sigma0(a) | |
1634 vorr d30,d29 @ Maj(a,b,c) | |
1635 vadd.i64 d19,d27 | |
1636 vadd.i64 d23,d27 | |
1637 vadd.i64 d19,d30 | |
1638 vshr.u64 d24,d23,#14 @ 29 | |
1639 #if 29<16 | |
1640 vld1.64 {d13},[r1]! @ handles unaligned | |
1641 #endif | |
1642 vshr.u64 d25,d23,#18 | |
1643 vshr.u64 d26,d23,#41 | |
1644 vld1.64 {d28},[r3,:64]! @ K[i++] | |
1645 vsli.64 d24,d23,#50 | |
1646 vsli.64 d25,d23,#46 | |
1647 vsli.64 d26,d23,#23 | |
1648 #if 29<16 && defined(__ARMEL__) | |
1649 vrev64.8 , | |
1650 #endif | |
1651 vadd.i64 d27,d28,d18 | |
1652 veor d29,d16,d17 | |
1653 veor d24,d25 | |
1654 vand d29,d23 | |
1655 veor d24,d26 @ Sigma1(e) | |
1656 veor d29,d17 @ Ch(e,f,g) | |
1657 vadd.i64 d27,d24 | |
1658 vshr.u64 d24,d19,#28 | |
1659 vadd.i64 d27,d29 | |
1660 vshr.u64 d25,d19,#34 | |
1661 vshr.u64 d26,d19,#39 | |
1662 vsli.64 d24,d19,#36 | |
1663 vsli.64 d25,d19,#30 | |
1664 vsli.64 d26,d19,#25 | |
1665 vadd.i64 d27,d13 | |
1666 vorr d30,d19,d21 | |
1667 vand d29,d19,d21 | |
1668 veor d18,d24,d25 | |
1669 vand d30,d20 | |
1670 veor d18,d26 @ Sigma0(a) | |
1671 vorr d30,d29 @ Maj(a,b,c) | |
1672 vadd.i64 d18,d27 | |
1673 vadd.i64 d22,d27 | |
1674 vadd.i64 d18,d30 | |
1675 vshr.u64 q12,q6,#19 | |
1676 vshr.u64 q13,q6,#61 | |
1677 vshr.u64 q15,q6,#6 | |
1678 vsli.64 q12,q6,#45 | |
1679 vext.8 q14,q7,q0,#8 @ X[i+1] | |
1680 vsli.64 q13,q6,#3 | |
1681 veor q15,q12 | |
1682 vshr.u64 q12,q14,#1 | |
1683 veor q15,q13 @ sigma1(X[i+14]) | |
1684 vshr.u64 q13,q14,#8 | |
1685 vadd.i64 q7,q15 | |
1686 vshr.u64 q15,q14,#7 | |
1687 vsli.64 q12,q14,#63 | |
1688 vsli.64 q13,q14,#56 | |
1689 vext.8 q14,q3,q4,#8 @ X[i+9] | |
1690 veor q15,q12 | |
1691 vshr.u64 d24,d22,#14 @ from NEON_00_15 | |
1692 vadd.i64 q7,q14 | |
1693 vshr.u64 d25,d22,#18 @ from NEON_00_15 | |
1694 veor q15,q13 @ sigma0(X[i+1]) | |
1695 vshr.u64 d26,d22,#41 @ from NEON_00_15 | |
1696 vadd.i64 q7,q15 | |
1697 vld1.64 {d28},[r3,:64]! @ K[i++] | |
1698 vsli.64 d24,d22,#50 | |
1699 vsli.64 d25,d22,#46 | |
1700 vsli.64 d26,d22,#23 | |
1701 #if 30<16 && defined(__ARMEL__) | |
1702 vrev64.8 , | |
1703 #endif | |
1704 vadd.i64 d27,d28,d17 | |
1705 veor d29,d23,d16 | |
1706 veor d24,d25 | |
1707 vand d29,d22 | |
1708 veor d24,d26 @ Sigma1(e) | |
1709 veor d29,d16 @ Ch(e,f,g) | |
1710 vadd.i64 d27,d24 | |
1711 vshr.u64 d24,d18,#28 | |
1712 vadd.i64 d27,d29 | |
1713 vshr.u64 d25,d18,#34 | |
1714 vshr.u64 d26,d18,#39 | |
1715 vsli.64 d24,d18,#36 | |
1716 vsli.64 d25,d18,#30 | |
1717 vsli.64 d26,d18,#25 | |
1718 vadd.i64 d27,d14 | |
1719 vorr d30,d18,d20 | |
1720 vand d29,d18,d20 | |
1721 veor d17,d24,d25 | |
1722 vand d30,d19 | |
1723 veor d17,d26 @ Sigma0(a) | |
1724 vorr d30,d29 @ Maj(a,b,c) | |
1725 vadd.i64 d17,d27 | |
1726 vadd.i64 d21,d27 | |
1727 vadd.i64 d17,d30 | |
1728 vshr.u64 d24,d21,#14 @ 31 | |
1729 #if 31<16 | |
1730 vld1.64 {d15},[r1]! @ handles unaligned | |
1731 #endif | |
1732 vshr.u64 d25,d21,#18 | |
1733 vshr.u64 d26,d21,#41 | |
1734 vld1.64 {d28},[r3,:64]! @ K[i++] | |
1735 vsli.64 d24,d21,#50 | |
1736 vsli.64 d25,d21,#46 | |
1737 vsli.64 d26,d21,#23 | |
1738 #if 31<16 && defined(__ARMEL__) | |
1739 vrev64.8 , | |
1740 #endif | |
1741 vadd.i64 d27,d28,d16 | |
1742 veor d29,d22,d23 | |
1743 veor d24,d25 | |
1744 vand d29,d21 | |
1745 veor d24,d26 @ Sigma1(e) | |
1746 veor d29,d23 @ Ch(e,f,g) | |
1747 vadd.i64 d27,d24 | |
1748 vshr.u64 d24,d17,#28 | |
1749 vadd.i64 d27,d29 | |
1750 vshr.u64 d25,d17,#34 | |
1751 vshr.u64 d26,d17,#39 | |
1752 vsli.64 d24,d17,#36 | |
1753 vsli.64 d25,d17,#30 | |
1754 vsli.64 d26,d17,#25 | |
1755 vadd.i64 d27,d15 | |
1756 vorr d30,d17,d19 | |
1757 vand d29,d17,d19 | |
1758 veor d16,d24,d25 | |
1759 vand d30,d18 | |
1760 veor d16,d26 @ Sigma0(a) | |
1761 vorr d30,d29 @ Maj(a,b,c) | |
1762 vadd.i64 d16,d27 | |
1763 vadd.i64 d20,d27 | |
1764 vadd.i64 d16,d30 | |
1765 bne .L16_79_neon | |
1766 | |
1767 vldmia r0,{d24-d31} @ load context to temp | |
1768 vadd.i64 q8,q12 @ vectorized accumulate | |
1769 vadd.i64 q9,q13 | |
1770 vadd.i64 q10,q14 | |
1771 vadd.i64 q11,q15 | |
1772 vstmia r0,{d16-d23} @ save context | |
1773 teq r1,r2 | |
1774 sub r3,#640 @ rewind K512 | |
1775 bne .Loop_neon | |
1776 | |
1777 vldmia sp!,{d8-d15} @ epilogue | |
1778 .word 0xe12fff1e | |
1779 #endif | |
1780 .size sha512_block_data_order,.-sha512_block_data_order | |
1781 .asciz "SHA512 block transform for ARMv4/NEON, CRYPTOGAMS by <appro@openssl.org
>" | |
1782 .align 2 | |
1783 .comm OPENSSL_armcap_P,4,4 | |
OLD | NEW |