Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(17)

Side by Side Diff: third_party/boringssl/linux-aarch64/crypto/sha/sha256-armv8.S

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

Powered by Google App Engine
This is Rietveld 408576698