2 * Copyright 2012 pooler@litecoinpool.org
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the Free
6 * Software Foundation; either version 2 of the License, or (at your option)
7 * any later version. See COPYING for more details.
10 #if defined(__arm__) && defined(__APCS_32__)
14 .long 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5
15 .long 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5
16 .long 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3
17 .long 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174
18 .long 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc
19 .long 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da
20 .long 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7
21 .long 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967
22 .long 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13
23 .long 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85
24 .long 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3
25 .long 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070
26 .long 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5
27 .long 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3
28 .long 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208
29 .long 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
32 .macro sha256_extend_doubleround_core i, rw, ra, rb, ry, rz
35 eor r12, r12, \ry, ror #19
37 eor r12, r12, \ry, lsr #10
38 eor \ra, \ra, lr, ror #18
40 ldr r11, [\rw, #(\i+2)*4]
41 eor \ra, \ra, lr, lsr #3
45 str \ra, [\rw, #(\i+16)*4]
47 eor r12, r12, \rz, ror #19
49 eor r12, r12, \rz, lsr #10
50 eor \rb, \rb, r11, ror #18
52 eor \rb, \rb, r11, lsr #3
56 .macro sha256_extend_doubleround_head i, rw, ra, rb, ry, rz
57 ldr lr, [\rw, #(\i+1)*4]
58 sha256_extend_doubleround_core \i, \rw, \ra, \rb, \ry, \rz
59 ldr lr, [\rw, #(\i+3)*4]
62 .macro sha256_extend_doubleround_body i, rw, ra, rb, ry, rz
63 str \rz, [\rw, #(\i+15)*4]
64 sha256_extend_doubleround_core \i, \rw, \ra, \rb, \ry, \rz
65 ldr lr, [\rw, #(\i+3)*4]
68 .macro sha256_extend_doubleround_foot i, rw, ra, rb, ry, rz
69 str \rz, [\rw, #(\i+15)*4]
70 sha256_extend_doubleround_core \i, \rw, \ra, \rb, \ry, \rz
71 str \rb, [\rw, #(\i+17)*4]
74 .macro sha256_main_round i, ka, rw, ra, rb, rc, rd, re, rf, rg, rh
75 ldr r12, [\rw, #(\i)*4]
81 eor lr, \re, \re, ror #5
83 eor lr, lr, \re, ror #19
86 add \rh, \rh, lr, ror #6
89 eor r12, \ra, \ra, ror #11
91 eor r12, r12, \ra, ror #20
95 add \rd, r3, r12, ror #2
98 .macro sha256_main_quadround i, ka, rw
99 sha256_main_round \i+0, \ka, \rw, r4, r5, r6, r7, r8, r9, r10, r11
100 sha256_main_round \i+1, \ka, \rw, r7, r4, r5, r6, r11, r8, r9, r10
101 sha256_main_round \i+2, \ka, \rw, r6, r7, r4, r5, r10, r11, r8, r9
102 sha256_main_round \i+3, \ka, \rw, r5, r6, r7, r4, r9, r10, r11, r8
109 .globl sha256_transform
110 .globl _sha256_transform
112 .type sha256_transform, %function
116 stmfd sp!, {r4-r11, lr}
119 bne sha256_transform_swap
126 b sha256_transform_extend
129 eor r12, \rn, \rn, ror #16
130 bic r12, r12, #0x00ff0000
132 eor \rd, \rd, r12, lsr #8
135 sha256_transform_swap:
158 sha256_transform_extend:
162 sha256_extend_doubleround_head 0, sp, r4, r5, r9, r10
163 sha256_extend_doubleround_body 2, sp, r6, r7, r4, r5
164 sha256_extend_doubleround_body 4, sp, r8, r9, r6, r7
165 sha256_extend_doubleround_body 6, sp, r10, r4, r8, r9
166 sha256_extend_doubleround_body 8, sp, r5, r6, r10, r4
167 sha256_extend_doubleround_body 10, sp, r7, r8, r5, r6
168 sha256_extend_doubleround_body 12, sp, r9, r10, r7, r8
169 sha256_extend_doubleround_body 14, sp, r4, r5, r9, r10
170 sha256_extend_doubleround_body 16, sp, r6, r7, r4, r5
171 sha256_extend_doubleround_body 18, sp, r8, r9, r6, r7
172 sha256_extend_doubleround_body 20, sp, r10, r4, r8, r9
173 sha256_extend_doubleround_body 22, sp, r5, r6, r10, r4
174 sha256_extend_doubleround_body 24, sp, r7, r8, r5, r6
175 sha256_extend_doubleround_body 26, sp, r9, r10, r7, r8
176 sha256_extend_doubleround_body 28, sp, r4, r5, r9, r10
177 sha256_extend_doubleround_body 30, sp, r6, r7, r4, r5
178 sha256_extend_doubleround_body 32, sp, r8, r9, r6, r7
179 sha256_extend_doubleround_body 34, sp, r10, r4, r8, r9
180 sha256_extend_doubleround_body 36, sp, r5, r6, r10, r4
181 sha256_extend_doubleround_body 38, sp, r7, r8, r5, r6
182 sha256_extend_doubleround_body 40, sp, r9, r10, r7, r8
183 sha256_extend_doubleround_body 42, sp, r4, r5, r9, r10
184 sha256_extend_doubleround_body 44, sp, r6, r7, r4, r5
185 sha256_extend_doubleround_foot 46, sp, r8, r9, r6, r7
188 sha256_main_quadround 0, sha256_transform_k, sp
189 sha256_main_quadround 4, sha256_transform_k, sp
190 sha256_main_quadround 8, sha256_transform_k, sp
191 sha256_main_quadround 12, sha256_transform_k, sp
192 sha256_main_quadround 16, sha256_transform_k, sp
193 sha256_main_quadround 20, sha256_transform_k, sp
194 sha256_main_quadround 24, sha256_transform_k, sp
195 sha256_main_quadround 28, sha256_transform_k, sp
196 b sha256_transform_k_over
199 sha256_transform_k_over:
200 sha256_main_quadround 32, sha256_transform_k, sp
201 sha256_main_quadround 36, sha256_transform_k, sp
202 sha256_main_quadround 40, sha256_transform_k, sp
203 sha256_main_quadround 44, sha256_transform_k, sp
204 sha256_main_quadround 48, sha256_transform_k, sp
205 sha256_main_quadround 52, sha256_transform_k, sp
206 sha256_main_quadround 56, sha256_transform_k, sp
207 sha256_main_quadround 60, sha256_transform_k, sp
209 ldmia r0, {r1, r2, r3, r12}
215 ldmia r0, {r1, r2, r3, r12}
224 ldmfd sp!, {r4-r11, lr}
227 ldmfd sp!, {r4-r11, pc}
230 .macro sha256_main_round_red i, ka, rw, rd, re, rf, rg, rh
231 ldr r12, [\rw, #(\i)*4]
238 eor lr, \re, \re, ror #5
240 eor lr, lr, \re, ror #19
242 add \rh, \rh, lr, ror #6
248 .globl sha256_init_4way
249 .globl _sha256_init_4way
251 .type sha256_init_4way, %function
261 .long 0x6a09e667, 0x6a09e667, 0x6a09e667, 0x6a09e667
262 .long 0xbb67ae85, 0xbb67ae85, 0xbb67ae85, 0xbb67ae85
263 .long 0x3c6ef372, 0x3c6ef372, 0x3c6ef372, 0x3c6ef372
264 .long 0xa54ff53a, 0xa54ff53a, 0xa54ff53a, 0xa54ff53a
265 .long 0x510e527f, 0x510e527f, 0x510e527f, 0x510e527f
266 .long 0x9b05688c, 0x9b05688c, 0x9b05688c, 0x9b05688c
267 .long 0x1f83d9ab, 0x1f83d9ab, 0x1f83d9ab, 0x1f83d9ab
268 .long 0x5be0cd19, 0x5be0cd19, 0x5be0cd19, 0x5be0cd19
271 .long 0x428a2f98, 0x428a2f98, 0x428a2f98, 0x428a2f98
272 .long 0x71374491, 0x71374491, 0x71374491, 0x71374491
273 .long 0xb5c0fbcf, 0xb5c0fbcf, 0xb5c0fbcf, 0xb5c0fbcf
274 .long 0xe9b5dba5, 0xe9b5dba5, 0xe9b5dba5, 0xe9b5dba5
275 .long 0x3956c25b, 0x3956c25b, 0x3956c25b, 0x3956c25b
276 .long 0x59f111f1, 0x59f111f1, 0x59f111f1, 0x59f111f1
277 .long 0x923f82a4, 0x923f82a4, 0x923f82a4, 0x923f82a4
278 .long 0xab1c5ed5, 0xab1c5ed5, 0xab1c5ed5, 0xab1c5ed5
279 .long 0xd807aa98, 0xd807aa98, 0xd807aa98, 0xd807aa98
280 .long 0x12835b01, 0x12835b01, 0x12835b01, 0x12835b01
281 .long 0x243185be, 0x243185be, 0x243185be, 0x243185be
282 .long 0x550c7dc3, 0x550c7dc3, 0x550c7dc3, 0x550c7dc3
283 .long 0x72be5d74, 0x72be5d74, 0x72be5d74, 0x72be5d74
284 .long 0x80deb1fe, 0x80deb1fe, 0x80deb1fe, 0x80deb1fe
285 .long 0x9bdc06a7, 0x9bdc06a7, 0x9bdc06a7, 0x9bdc06a7
286 .long 0xc19bf174, 0xc19bf174, 0xc19bf174, 0xc19bf174
287 .long 0xe49b69c1, 0xe49b69c1, 0xe49b69c1, 0xe49b69c1
288 .long 0xefbe4786, 0xefbe4786, 0xefbe4786, 0xefbe4786
289 .long 0x0fc19dc6, 0x0fc19dc6, 0x0fc19dc6, 0x0fc19dc6
290 .long 0x240ca1cc, 0x240ca1cc, 0x240ca1cc, 0x240ca1cc
291 .long 0x2de92c6f, 0x2de92c6f, 0x2de92c6f, 0x2de92c6f
292 .long 0x4a7484aa, 0x4a7484aa, 0x4a7484aa, 0x4a7484aa
293 .long 0x5cb0a9dc, 0x5cb0a9dc, 0x5cb0a9dc, 0x5cb0a9dc
294 .long 0x76f988da, 0x76f988da, 0x76f988da, 0x76f988da
295 .long 0x983e5152, 0x983e5152, 0x983e5152, 0x983e5152
296 .long 0xa831c66d, 0xa831c66d, 0xa831c66d, 0xa831c66d
297 .long 0xb00327c8, 0xb00327c8, 0xb00327c8, 0xb00327c8
298 .long 0xbf597fc7, 0xbf597fc7, 0xbf597fc7, 0xbf597fc7
299 .long 0xc6e00bf3, 0xc6e00bf3, 0xc6e00bf3, 0xc6e00bf3
300 .long 0xd5a79147, 0xd5a79147, 0xd5a79147, 0xd5a79147
301 .long 0x06ca6351, 0x06ca6351, 0x06ca6351, 0x06ca6351
302 .long 0x14292967, 0x14292967, 0x14292967, 0x14292967
303 .long 0x27b70a85, 0x27b70a85, 0x27b70a85, 0x27b70a85
304 .long 0x2e1b2138, 0x2e1b2138, 0x2e1b2138, 0x2e1b2138
305 .long 0x4d2c6dfc, 0x4d2c6dfc, 0x4d2c6dfc, 0x4d2c6dfc
306 .long 0x53380d13, 0x53380d13, 0x53380d13, 0x53380d13
307 .long 0x650a7354, 0x650a7354, 0x650a7354, 0x650a7354
308 .long 0x766a0abb, 0x766a0abb, 0x766a0abb, 0x766a0abb
309 .long 0x81c2c92e, 0x81c2c92e, 0x81c2c92e, 0x81c2c92e
310 .long 0x92722c85, 0x92722c85, 0x92722c85, 0x92722c85
311 .long 0xa2bfe8a1, 0xa2bfe8a1, 0xa2bfe8a1, 0xa2bfe8a1
312 .long 0xa81a664b, 0xa81a664b, 0xa81a664b, 0xa81a664b
313 .long 0xc24b8b70, 0xc24b8b70, 0xc24b8b70, 0xc24b8b70
314 .long 0xc76c51a3, 0xc76c51a3, 0xc76c51a3, 0xc76c51a3
315 .long 0xd192e819, 0xd192e819, 0xd192e819, 0xd192e819
316 .long 0xd6990624, 0xd6990624, 0xd6990624, 0xd6990624
317 .long 0xf40e3585, 0xf40e3585, 0xf40e3585, 0xf40e3585
318 .long 0x106aa070, 0x106aa070, 0x106aa070, 0x106aa070
319 .long 0x19a4c116, 0x19a4c116, 0x19a4c116, 0x19a4c116
320 .long 0x1e376c08, 0x1e376c08, 0x1e376c08, 0x1e376c08
321 .long 0x2748774c, 0x2748774c, 0x2748774c, 0x2748774c
322 .long 0x34b0bcb5, 0x34b0bcb5, 0x34b0bcb5, 0x34b0bcb5
323 .long 0x391c0cb3, 0x391c0cb3, 0x391c0cb3, 0x391c0cb3
324 .long 0x4ed8aa4a, 0x4ed8aa4a, 0x4ed8aa4a, 0x4ed8aa4a
325 .long 0x5b9cca4f, 0x5b9cca4f, 0x5b9cca4f, 0x5b9cca4f
326 .long 0x682e6ff3, 0x682e6ff3, 0x682e6ff3, 0x682e6ff3
327 .long 0x748f82ee, 0x748f82ee, 0x748f82ee, 0x748f82ee
328 .long 0x78a5636f, 0x78a5636f, 0x78a5636f, 0x78a5636f
329 .long 0x84c87814, 0x84c87814, 0x84c87814, 0x84c87814
330 .long 0x8cc70208, 0x8cc70208, 0x8cc70208, 0x8cc70208
331 .long 0x90befffa, 0x90befffa, 0x90befffa, 0x90befffa
332 .long 0xa4506ceb, 0xa4506ceb, 0xa4506ceb, 0xa4506ceb
333 .long 0xbef9a3f7, 0xbef9a3f7, 0xbef9a3f7, 0xbef9a3f7
334 .long 0xc67178f2, 0xc67178f2, 0xc67178f2, 0xc67178f2
337 .macro sha256_4way_extend_doubleround_core i, rr, rw, ra, rb, ry, rz
340 vshr.u32 q0, \ry, #19
341 vshl.u32 q1, \ry, #32-19
344 vshl.u32 q0, q6, #32-7
346 veor.u32 \ra, \ra, q0
347 vshr.u32 q1, \ry, #10
350 veor.u32 \ra, \ra, q0
351 vshl.u32 q1, q6, #32-18
353 veor.u32 \ra, \ra, q1
355 veor.u32 \ra, \ra, q0
356 vld1.u32 {q5}, [\rr]!
357 vadd.u32 \ra, \ra, q4
359 vshr.u32 q4, \rz, #17
360 vshl.u32 q0, \rz, #32-17
362 vst1.u32 {\ra}, [\rw]!
364 vshr.u32 q0, \rz, #19
365 vshl.u32 q1, \rz, #32-19
369 vshl.u32 q0, q5, #32-7
370 vshr.u32 q1, \rz, #10
371 veor.u32 \rb, \rb, q0
374 veor.u32 \rb, \rb, q0
375 vshl.u32 q1, q5, #32-18
377 veor.u32 \rb, \rb, q1
379 veor.u32 \rb, \rb, q0
382 .macro sha256_4way_extend_doubleround_head i, rr, rw, ra, rb, ry, rz
383 vld1.u32 {q6}, [\rr]!
384 vshr.u32 q4, \ry, #17
385 vshl.u32 q0, \ry, #32-17
386 sha256_4way_extend_doubleround_core \i, \rr, \rw, \ra, \rb, \ry, \rz
387 vld1.u32 {q6}, [\rr]!
388 vadd.u32 \rb, \rb, q1
391 .macro sha256_4way_extend_doubleround_body i, rr, rw, ra, rb, ry, rz
392 vshr.u32 q4, \ry, #17
393 vshl.u32 q0, \ry, #32-17
394 vst1.u32 {\rz}, [\rw]!
395 sha256_4way_extend_doubleround_core \i, \rr, \rw, \ra, \rb, \ry, \rz
396 vld1.u32 {q6}, [\rr]!
397 vadd.u32 \rb, \rb, q1
400 .macro sha256_4way_extend_doubleround_foot i, rr, rw, ra, rb, ry, rz
401 vshr.u32 q4, \ry, #17
402 vshl.u32 q0, \ry, #32-17
403 vst1.u32 {\rz}, [\rw]!
404 sha256_4way_extend_doubleround_core \i, \rr, \rw, \ra, \rb, \ry, \rz
405 vadd.u32 \rb, \rb, q1
406 vst1.u32 {\rb}, [\rw]!
409 .macro sha256_4way_main_round i, rk, rw, ra, rb, rc, rd, re, rf, rg, rh
410 vld1.u32 {q8}, [\rw]!
411 vand.u32 q9, \rf, \re
412 vbic.u32 q10, \rg, \re
413 vshr.u32 q11, \re, #5
414 vorr.u32 q10, q10, q9
415 vld1.u32 {q9}, [\rk]!
416 vadd.u32 \rh, \rh, q10
417 vshl.u32 q12, \re, #32-5
418 veor.u32 q10, \re, q11
419 vshr.u32 q11, \re, #19
420 veor.u32 q10, q10, q12
421 vshl.u32 q12, \re, #32-19
422 veor.u32 q10, q10, q11
423 vadd.u32 \rh, \rh, q8
424 veor.u32 q10, q10, q12
425 vadd.u32 \rh, \rh, q9
426 veor.u32 q9, \ra, \rb
427 vshr.u32 q11, q10, #6
428 vshl.u32 q13, q10, #32-6
429 vadd.u32 \rh, \rh, q11
431 vshr.u32 q11, \ra, #11
432 vshl.u32 q12, \ra, #32-11
433 veor.u32 q8, \ra, q11
434 vand.u32 q10, \ra, \rb
436 vshr.u32 q11, \ra, #20
437 vshl.u32 q12, \ra, #32-20
441 vadd.u32 \rh, \rh, q13
442 veor.u32 q10, q10, q9
444 vshl.u32 q12, q8, #32-2
445 vadd.u32 q9, \rh, q10
446 vadd.u32 q12, q12, q11
447 vadd.u32 \rh, \rh, \rd
448 vadd.u32 \rd, q9, q12
451 .macro sha256_4way_main_quadround i, rk, rw
452 sha256_4way_main_round \i+0, \rk, \rw, q0, q1, q2, q3, q4, q5, q6, q7
453 sha256_4way_main_round \i+1, \rk, \rw, q3, q0, q1, q2, q7, q4, q5, q6
454 sha256_4way_main_round \i+2, \rk, \rw, q2, q3, q0, q1, q6, q7, q4, q5
455 sha256_4way_main_round \i+3, \rk, \rw, q1, q2, q3, q0, q5, q6, q7, q4
462 .globl sha256_transform_4way
463 .globl _sha256_transform_4way
465 .type sha256_transform_4way, %function
467 sha256_transform_4way:
468 _sha256_transform_4way:
475 bne sha256_transform_4way_swap
482 b sha256_transform_4way_extend
484 sha256_transform_4way_swap:
507 sha256_transform_4way_extend:
511 sha256_4way_extend_doubleround_head 0, r1, r2, q9, q10, q14, q15
512 sha256_4way_extend_doubleround_body 2, r1, r2, q11, q12, q9, q10
513 sha256_4way_extend_doubleround_body 4, r1, r2, q13, q14, q11, q12
514 sha256_4way_extend_doubleround_body 6, r1, r2, q15, q9, q13, q14
515 sha256_4way_extend_doubleround_body 8, r1, r2, q10, q11, q15, q9
516 sha256_4way_extend_doubleround_body 10, r1, r2, q12, q13, q10, q11
517 sha256_4way_extend_doubleround_body 12, r1, r2, q14, q15, q12, q13
518 sha256_4way_extend_doubleround_body 14, r1, r2, q9, q10, q14, q15
519 sha256_4way_extend_doubleround_body 16, r1, r2, q11, q12, q9, q10
520 sha256_4way_extend_doubleround_body 18, r1, r2, q13, q14, q11, q12
521 sha256_4way_extend_doubleround_body 20, r1, r2, q15, q9, q13, q14
522 sha256_4way_extend_doubleround_body 22, r1, r2, q10, q11, q15, q9
523 sha256_4way_extend_doubleround_body 24, r1, r2, q12, q13, q10, q11
524 sha256_4way_extend_doubleround_body 26, r1, r2, q14, q15, q12, q13
525 sha256_4way_extend_doubleround_body 28, r1, r2, q9, q10, q14, q15
526 sha256_4way_extend_doubleround_body 30, r1, r2, q11, q12, q9, q10
527 sha256_4way_extend_doubleround_body 32, r1, r2, q13, q14, q11, q12
528 sha256_4way_extend_doubleround_body 34, r1, r2, q15, q9, q13, q14
529 sha256_4way_extend_doubleround_body 36, r1, r2, q10, q11, q15, q9
530 sha256_4way_extend_doubleround_body 38, r1, r2, q12, q13, q10, q11
531 sha256_4way_extend_doubleround_body 40, r1, r2, q14, q15, q12, q13
532 sha256_4way_extend_doubleround_body 42, r1, r2, q9, q10, q14, q15
533 sha256_4way_extend_doubleround_body 44, r1, r2, q11, q12, q9, q10
534 sha256_4way_extend_doubleround_foot 46, r1, r2, q13, q14, q11, q12
537 adr r4, sha256_transform_4way_4k
538 b sha256_transform_4way_4k_over
540 sha256_transform_4way_4k:
542 sha256_transform_4way_4k_over:
543 sha256_4way_main_quadround 0, r4, sp
544 sha256_4way_main_quadround 4, r4, sp
545 sha256_4way_main_quadround 8, r4, sp
546 sha256_4way_main_quadround 12, r4, sp
547 sha256_4way_main_quadround 16, r4, sp
548 sha256_4way_main_quadround 20, r4, sp
549 sha256_4way_main_quadround 24, r4, sp
550 sha256_4way_main_quadround 28, r4, sp
551 sha256_4way_main_quadround 32, r4, sp
552 sha256_4way_main_quadround 36, r4, sp
553 sha256_4way_main_quadround 40, r4, sp
554 sha256_4way_main_quadround 44, r4, sp
555 sha256_4way_main_quadround 48, r4, sp
556 sha256_4way_main_quadround 52, r4, sp
557 sha256_4way_main_quadround 56, r4, sp
558 sha256_4way_main_quadround 60, r4, sp
576 .macro sha256_4way_main_round_red i, rk, rw, rd, re, rf, rg, rh
577 vld1.u32 {q8}, [\rw]!
578 vand.u32 q9, \rf, \re
579 vbic.u32 q10, \rg, \re
580 vshr.u32 q11, \re, #5
581 vorr.u32 q10, q10, q9
582 vshl.u32 q12, \re, #32-5
583 vadd.u32 \rh, \rh, q10
584 veor.u32 q10, \re, q11
585 vshr.u32 q11, \re, #19
586 veor.u32 q10, q10, q12
587 vshl.u32 q12, \re, #32-19
588 veor.u32 q10, q10, q11
589 vadd.u32 \rh, \rh, q8
590 veor.u32 q10, q10, q12
591 vld1.u32 {q9}, [\rk]!
592 vadd.u32 \rh, \rh, \rd
593 vshr.u32 q11, q10, #6
594 vadd.u32 \rh, \rh, q9
595 vshl.u32 q13, q10, #32-6
596 vadd.u32 \rh, \rh, q11
597 vadd.u32 \rh, \rh, q13
603 .globl sha256_use_4way
604 .globl _sha256_use_4way
606 .type sha256_use_4way, %function