6 # define WORD64(hi0,lo0,hi1,lo1) .word lo0,hi0, lo1,hi1
10 # define WORD64(hi0,lo0,hi1,lo1) .word hi0,lo0, hi1,lo1
18 WORD64(0x428a2f98,0xd728ae22, 0x71374491,0x23ef65cd)
19 WORD64(0xb5c0fbcf,0xec4d3b2f, 0xe9b5dba5,0x8189dbbc)
20 WORD64(0x3956c25b,0xf348b538, 0x59f111f1,0xb605d019)
21 WORD64(0x923f82a4,0xaf194f9b, 0xab1c5ed5,0xda6d8118)
22 WORD64(0xd807aa98,0xa3030242, 0x12835b01,0x45706fbe)
23 WORD64(0x243185be,0x4ee4b28c, 0x550c7dc3,0xd5ffb4e2)
24 WORD64(0x72be5d74,0xf27b896f, 0x80deb1fe,0x3b1696b1)
25 WORD64(0x9bdc06a7,0x25c71235, 0xc19bf174,0xcf692694)
26 WORD64(0xe49b69c1,0x9ef14ad2, 0xefbe4786,0x384f25e3)
27 WORD64(0x0fc19dc6,0x8b8cd5b5, 0x240ca1cc,0x77ac9c65)
28 WORD64(0x2de92c6f,0x592b0275, 0x4a7484aa,0x6ea6e483)
29 WORD64(0x5cb0a9dc,0xbd41fbd4, 0x76f988da,0x831153b5)
30 WORD64(0x983e5152,0xee66dfab, 0xa831c66d,0x2db43210)
31 WORD64(0xb00327c8,0x98fb213f, 0xbf597fc7,0xbeef0ee4)
32 WORD64(0xc6e00bf3,0x3da88fc2, 0xd5a79147,0x930aa725)
33 WORD64(0x06ca6351,0xe003826f, 0x14292967,0x0a0e6e70)
34 WORD64(0x27b70a85,0x46d22ffc, 0x2e1b2138,0x5c26c926)
35 WORD64(0x4d2c6dfc,0x5ac42aed, 0x53380d13,0x9d95b3df)
36 WORD64(0x650a7354,0x8baf63de, 0x766a0abb,0x3c77b2a8)
37 WORD64(0x81c2c92e,0x47edaee6, 0x92722c85,0x1482353b)
38 WORD64(0xa2bfe8a1,0x4cf10364, 0xa81a664b,0xbc423001)
39 WORD64(0xc24b8b70,0xd0f89791, 0xc76c51a3,0x0654be30)
40 WORD64(0xd192e819,0xd6ef5218, 0xd6990624,0x5565a910)
41 WORD64(0xf40e3585,0x5771202a, 0x106aa070,0x32bbd1b8)
42 WORD64(0x19a4c116,0xb8d2d0c8, 0x1e376c08,0x5141ab53)
43 WORD64(0x2748774c,0xdf8eeb99, 0x34b0bcb5,0xe19b48a8)
44 WORD64(0x391c0cb3,0xc5c95a63, 0x4ed8aa4a,0xe3418acb)
45 WORD64(0x5b9cca4f,0x7763e373, 0x682e6ff3,0xd6b2b8a3)
46 WORD64(0x748f82ee,0x5defb2fc, 0x78a5636f,0x43172f60)
47 WORD64(0x84c87814,0xa1f0ab72, 0x8cc70208,0x1a6439ec)
48 WORD64(0x90befffa,0x23631e28, 0xa4506ceb,0xde82bde9)
49 WORD64(0xbef9a3f7,0xb2c67915, 0xc67178f2,0xe372532b)
50 WORD64(0xca273ece,0xea26619c, 0xd186b8c7,0x21c0c207)
51 WORD64(0xeada7dd6,0xcde0eb1e, 0xf57d4f7f,0xee6ed178)
52 WORD64(0x06f067aa,0x72176fba, 0x0a637dc5,0xa2c898a6)
53 WORD64(0x113f9804,0xbef90dae, 0x1b710b35,0x131c471b)
54 WORD64(0x28db77f5,0x23047d84, 0x32caab7b,0x40c72493)
55 WORD64(0x3c9ebe0a,0x15c9bebc, 0x431d67c4,0x9c100d4c)
56 WORD64(0x4cc5d4be,0xcb3e42b6, 0x597f299c,0xfc657e2a)
57 WORD64(0x5fcb6fab,0x3ad6faec, 0x6c44198c,0x4a475817)
60 .word OPENSSL_armcap_P-sha512_block_data_order
63 .global sha512_block_data_order
64 .hidden sha512_block_data_order
65 .type sha512_block_data_order,%function
66 sha512_block_data_order:
67 sub r3,pc,#8 @ sha512_block_data_order
68 add r2,r1,r2,lsl#7 @ len to point at the end of inp
70 ldr r12,.LOPENSSL_armcap
71 ldr r12,[r3,r12] @ OPENSSL_armcap_P
76 sub r14,r3,#672 @ K512
133 @ Sigma1(x) (ROTR((x),14) ^ ROTR((x),18) ^ ROTR((x),41))
134 @ LO lo>>14^hi<<18 ^ lo>>18^hi<<14 ^ hi>>9^lo<<23
135 @ HI hi>>14^lo<<18 ^ hi>>18^lo<<14 ^ lo>>9^hi<<23
141 ldr r11,[sp,#56+0] @ h.lo
142 eor r10,r10,r7,lsl#18
143 ldr r12,[sp,#56+4] @ h.hi
145 eor r10,r10,r8,lsr#18
147 eor r10,r10,r7,lsl#14
151 eor r10,r10,r8,lsl#23 @ Sigma1(e)
153 ldr r9,[sp,#40+0] @ f.lo
154 adc r4,r4,r10 @ T += Sigma1(e)
155 ldr r10,[sp,#40+4] @ f.hi
157 ldr r11,[sp,#48+0] @ g.lo
158 adc r4,r4,r12 @ T += h
159 ldr r12,[sp,#48+4] @ g.hi
170 ldr r11,[r14,#LO] @ K[i].lo
171 eor r10,r10,r12 @ Ch(e,f,g)
172 ldr r12,[r14,#HI] @ K[i].hi
175 ldr r7,[sp,#24+0] @ d.lo
176 adc r4,r4,r10 @ T += Ch(e,f,g)
177 ldr r8,[sp,#24+4] @ d.hi
180 adc r4,r4,r12 @ T += K[i]
182 ldr r11,[sp,#8+0] @ b.lo
183 adc r8,r8,r4 @ d += T
186 ldr r12,[sp,#16+0] @ c.lo
188 @ Sigma0(x) (ROTR((x),28) ^ ROTR((x),34) ^ ROTR((x),39))
189 @ LO lo>>28^hi<<4 ^ hi>>2^lo<<30 ^ hi>>7^lo<<25
190 @ HI hi>>28^lo<<4 ^ lo>>2^hi<<30 ^ lo>>7^hi<<25
198 eor r10,r10,r6,lsl#30
202 eor r10,r10,r6,lsl#25 @ Sigma0(a)
205 adc r4,r4,r10 @ T += Sigma0(a)
207 ldr r10,[sp,#8+4] @ b.hi
209 ldr r11,[sp,#16+4] @ c.hi
213 orr r5,r5,r9 @ Maj(a,b,c).lo
216 orr r6,r6,r12 @ Maj(a,b,c).hi
218 adc r6,r6,r4 @ h += T
227 @ sigma0(x) (ROTR((x),1) ^ ROTR((x),8) ^ ((x)>>7))
228 @ LO lo>>1^hi<<31 ^ lo>>8^hi<<24 ^ lo>>7^hi<<25
229 @ HI hi>>1^lo<<31 ^ hi>>8^lo<<24 ^ hi>>7
244 @ sigma1(x) (ROTR((x),19) ^ ROTR((x),61) ^ ((x)>>6))
245 @ LO lo>>19^hi<<13 ^ hi>>29^lo<<3 ^ lo>>6^hi<<26
246 @ HI hi>>19^lo<<13 ^ lo>>29^hi<<3 ^ hi>>6
250 eor r10,r10,r11,lsl#13
252 eor r10,r10,r11,lsr#29
254 eor r10,r10,r12,lsl#3
256 eor r10,r10,r12,lsr#6
270 @ Sigma1(x) (ROTR((x),14) ^ ROTR((x),18) ^ ROTR((x),41))
271 @ LO lo>>14^hi<<18 ^ lo>>18^hi<<14 ^ hi>>9^lo<<23
272 @ HI hi>>14^lo<<18 ^ hi>>18^lo<<14 ^ lo>>9^hi<<23
278 ldr r11,[sp,#56+0] @ h.lo
279 eor r10,r10,r7,lsl#18
280 ldr r12,[sp,#56+4] @ h.hi
282 eor r10,r10,r8,lsr#18
284 eor r10,r10,r7,lsl#14
288 eor r10,r10,r8,lsl#23 @ Sigma1(e)
290 ldr r9,[sp,#40+0] @ f.lo
291 adc r4,r4,r10 @ T += Sigma1(e)
292 ldr r10,[sp,#40+4] @ f.hi
294 ldr r11,[sp,#48+0] @ g.lo
295 adc r4,r4,r12 @ T += h
296 ldr r12,[sp,#48+4] @ g.hi
307 ldr r11,[r14,#LO] @ K[i].lo
308 eor r10,r10,r12 @ Ch(e,f,g)
309 ldr r12,[r14,#HI] @ K[i].hi
312 ldr r7,[sp,#24+0] @ d.lo
313 adc r4,r4,r10 @ T += Ch(e,f,g)
314 ldr r8,[sp,#24+4] @ d.hi
317 adc r4,r4,r12 @ T += K[i]
319 ldr r11,[sp,#8+0] @ b.lo
320 adc r8,r8,r4 @ d += T
323 ldr r12,[sp,#16+0] @ c.lo
325 @ Sigma0(x) (ROTR((x),28) ^ ROTR((x),34) ^ ROTR((x),39))
326 @ LO lo>>28^hi<<4 ^ hi>>2^lo<<30 ^ hi>>7^lo<<25
327 @ HI hi>>28^lo<<4 ^ lo>>2^hi<<30 ^ lo>>7^hi<<25
335 eor r10,r10,r6,lsl#30
339 eor r10,r10,r6,lsl#25 @ Sigma0(a)
342 adc r4,r4,r10 @ T += Sigma0(a)
344 ldr r10,[sp,#8+4] @ b.hi
346 ldr r11,[sp,#16+4] @ c.hi
350 orr r5,r5,r9 @ Maj(a,b,c).lo
353 orr r6,r6,r12 @ Maj(a,b,c).hi
355 adc r6,r6,r4 @ h += T
359 ldreq r10,[sp,#184+4]
433 add sp,sp,#8*9 @ destroy frame
435 ldmia sp!,{r4-r12,pc}
437 ldmia sp!,{r4-r12,lr}
439 moveq pc,lr @ be binary compatible with V4, yet
440 .word 0xe12fff1e @ interoperable with Thumb ISA:-)
447 dmb @ errata #451034 on early Cortex A8
448 vstmdb sp!,{d8-d15} @ ABI specification says so
449 sub r3,r3,#672 @ K512
450 vldmia r0,{d16-d23} @ load context
452 vshr.u64 d24,d20,#14 @ 0
454 vld1.64 {d0},[r1]! @ handles unaligned
458 vadd.i64 d16,d30 @ h+=Maj from the past
461 vld1.64 {d28},[r3,:64]! @ K[i++]
466 #if 0<16 && defined(__ARMEL__)
470 vbsl d29,d21,d22 @ Ch(e,f,g)
472 veor d26,d25 @ Sigma1(e)
484 vbsl d30,d18,d17 @ Maj(a,b,c)
485 veor d23,d26 @ Sigma0(a)
489 vshr.u64 d24,d19,#14 @ 1
491 vld1.64 {d1},[r1]! @ handles unaligned
495 vadd.i64 d23,d30 @ h+=Maj from the past
498 vld1.64 {d28},[r3,:64]! @ K[i++]
503 #if 1<16 && defined(__ARMEL__)
507 vbsl d29,d20,d21 @ Ch(e,f,g)
509 veor d26,d25 @ Sigma1(e)
521 vbsl d30,d17,d16 @ Maj(a,b,c)
522 veor d22,d26 @ Sigma0(a)
526 vshr.u64 d24,d18,#14 @ 2
528 vld1.64 {d2},[r1]! @ handles unaligned
532 vadd.i64 d22,d30 @ h+=Maj from the past
535 vld1.64 {d28},[r3,:64]! @ K[i++]
540 #if 2<16 && defined(__ARMEL__)
544 vbsl d29,d19,d20 @ Ch(e,f,g)
546 veor d26,d25 @ Sigma1(e)
558 vbsl d30,d16,d23 @ Maj(a,b,c)
559 veor d21,d26 @ Sigma0(a)
563 vshr.u64 d24,d17,#14 @ 3
565 vld1.64 {d3},[r1]! @ handles unaligned
569 vadd.i64 d21,d30 @ h+=Maj from the past
572 vld1.64 {d28},[r3,:64]! @ K[i++]
577 #if 3<16 && defined(__ARMEL__)
581 vbsl d29,d18,d19 @ Ch(e,f,g)
583 veor d26,d25 @ Sigma1(e)
595 vbsl d30,d23,d22 @ Maj(a,b,c)
596 veor d20,d26 @ Sigma0(a)
600 vshr.u64 d24,d16,#14 @ 4
602 vld1.64 {d4},[r1]! @ handles unaligned
606 vadd.i64 d20,d30 @ h+=Maj from the past
609 vld1.64 {d28},[r3,:64]! @ K[i++]
614 #if 4<16 && defined(__ARMEL__)
618 vbsl d29,d17,d18 @ Ch(e,f,g)
620 veor d26,d25 @ Sigma1(e)
632 vbsl d30,d22,d21 @ Maj(a,b,c)
633 veor d19,d26 @ Sigma0(a)
637 vshr.u64 d24,d23,#14 @ 5
639 vld1.64 {d5},[r1]! @ handles unaligned
643 vadd.i64 d19,d30 @ h+=Maj from the past
646 vld1.64 {d28},[r3,:64]! @ K[i++]
651 #if 5<16 && defined(__ARMEL__)
655 vbsl d29,d16,d17 @ Ch(e,f,g)
657 veor d26,d25 @ Sigma1(e)
669 vbsl d30,d21,d20 @ Maj(a,b,c)
670 veor d18,d26 @ Sigma0(a)
674 vshr.u64 d24,d22,#14 @ 6
676 vld1.64 {d6},[r1]! @ handles unaligned
680 vadd.i64 d18,d30 @ h+=Maj from the past
683 vld1.64 {d28},[r3,:64]! @ K[i++]
688 #if 6<16 && defined(__ARMEL__)
692 vbsl d29,d23,d16 @ Ch(e,f,g)
694 veor d26,d25 @ Sigma1(e)
706 vbsl d30,d20,d19 @ Maj(a,b,c)
707 veor d17,d26 @ Sigma0(a)
711 vshr.u64 d24,d21,#14 @ 7
713 vld1.64 {d7},[r1]! @ handles unaligned
717 vadd.i64 d17,d30 @ h+=Maj from the past
720 vld1.64 {d28},[r3,:64]! @ K[i++]
725 #if 7<16 && defined(__ARMEL__)
729 vbsl d29,d22,d23 @ Ch(e,f,g)
731 veor d26,d25 @ Sigma1(e)
743 vbsl d30,d19,d18 @ Maj(a,b,c)
744 veor d16,d26 @ Sigma0(a)
748 vshr.u64 d24,d20,#14 @ 8
750 vld1.64 {d8},[r1]! @ handles unaligned
754 vadd.i64 d16,d30 @ h+=Maj from the past
757 vld1.64 {d28},[r3,:64]! @ K[i++]
762 #if 8<16 && defined(__ARMEL__)
766 vbsl d29,d21,d22 @ Ch(e,f,g)
768 veor d26,d25 @ Sigma1(e)
780 vbsl d30,d18,d17 @ Maj(a,b,c)
781 veor d23,d26 @ Sigma0(a)
785 vshr.u64 d24,d19,#14 @ 9
787 vld1.64 {d9},[r1]! @ handles unaligned
791 vadd.i64 d23,d30 @ h+=Maj from the past
794 vld1.64 {d28},[r3,:64]! @ K[i++]
799 #if 9<16 && defined(__ARMEL__)
803 vbsl d29,d20,d21 @ Ch(e,f,g)
805 veor d26,d25 @ Sigma1(e)
817 vbsl d30,d17,d16 @ Maj(a,b,c)
818 veor d22,d26 @ Sigma0(a)
822 vshr.u64 d24,d18,#14 @ 10
824 vld1.64 {d10},[r1]! @ handles unaligned
828 vadd.i64 d22,d30 @ h+=Maj from the past
831 vld1.64 {d28},[r3,:64]! @ K[i++]
836 #if 10<16 && defined(__ARMEL__)
840 vbsl d29,d19,d20 @ Ch(e,f,g)
842 veor d26,d25 @ Sigma1(e)
854 vbsl d30,d16,d23 @ Maj(a,b,c)
855 veor d21,d26 @ Sigma0(a)
859 vshr.u64 d24,d17,#14 @ 11
861 vld1.64 {d11},[r1]! @ handles unaligned
865 vadd.i64 d21,d30 @ h+=Maj from the past
868 vld1.64 {d28},[r3,:64]! @ K[i++]
873 #if 11<16 && defined(__ARMEL__)
877 vbsl d29,d18,d19 @ Ch(e,f,g)
879 veor d26,d25 @ Sigma1(e)
891 vbsl d30,d23,d22 @ Maj(a,b,c)
892 veor d20,d26 @ Sigma0(a)
896 vshr.u64 d24,d16,#14 @ 12
898 vld1.64 {d12},[r1]! @ handles unaligned
902 vadd.i64 d20,d30 @ h+=Maj from the past
905 vld1.64 {d28},[r3,:64]! @ K[i++]
910 #if 12<16 && defined(__ARMEL__)
914 vbsl d29,d17,d18 @ Ch(e,f,g)
916 veor d26,d25 @ Sigma1(e)
928 vbsl d30,d22,d21 @ Maj(a,b,c)
929 veor d19,d26 @ Sigma0(a)
933 vshr.u64 d24,d23,#14 @ 13
935 vld1.64 {d13},[r1]! @ handles unaligned
939 vadd.i64 d19,d30 @ h+=Maj from the past
942 vld1.64 {d28},[r3,:64]! @ K[i++]
947 #if 13<16 && defined(__ARMEL__)
951 vbsl d29,d16,d17 @ Ch(e,f,g)
953 veor d26,d25 @ Sigma1(e)
965 vbsl d30,d21,d20 @ Maj(a,b,c)
966 veor d18,d26 @ Sigma0(a)
970 vshr.u64 d24,d22,#14 @ 14
972 vld1.64 {d14},[r1]! @ handles unaligned
976 vadd.i64 d18,d30 @ h+=Maj from the past
979 vld1.64 {d28},[r3,:64]! @ K[i++]
984 #if 14<16 && defined(__ARMEL__)
988 vbsl d29,d23,d16 @ Ch(e,f,g)
990 veor d26,d25 @ Sigma1(e)
1002 vbsl d30,d20,d19 @ Maj(a,b,c)
1003 veor d17,d26 @ Sigma0(a)
1007 vshr.u64 d24,d21,#14 @ 15
1009 vld1.64 {d15},[r1]! @ handles unaligned
1011 vshr.u64 d25,d21,#18
1013 vadd.i64 d17,d30 @ h+=Maj from the past
1015 vshr.u64 d26,d21,#41
1016 vld1.64 {d28},[r3,:64]! @ K[i++]
1021 #if 15<16 && defined(__ARMEL__)
1025 vbsl d29,d22,d23 @ Ch(e,f,g)
1026 vshr.u64 d24,d17,#28
1027 veor d26,d25 @ Sigma1(e)
1028 vadd.i64 d27,d29,d16
1029 vshr.u64 d25,d17,#34
1032 vshr.u64 d26,d17,#39
1039 vbsl d30,d19,d18 @ Maj(a,b,c)
1040 veor d16,d26 @ Sigma0(a)
1049 vadd.i64 d16,d30 @ h+=Maj from the past
1052 vext.8 q14,q0,q1,#8 @ X[i+1]
1056 veor q15,q13 @ sigma1(X[i+14])
1062 vext.8 q14,q4,q5,#8 @ X[i+9]
1064 vshr.u64 d24,d20,#14 @ from NEON_00_15
1066 vshr.u64 d25,d20,#18 @ from NEON_00_15
1067 veor q15,q13 @ sigma0(X[i+1])
1068 vshr.u64 d26,d20,#41 @ from NEON_00_15
1070 vld1.64 {d28},[r3,:64]! @ K[i++]
1075 #if 16<16 && defined(__ARMEL__)
1079 vbsl d29,d21,d22 @ Ch(e,f,g)
1080 vshr.u64 d24,d16,#28
1081 veor d26,d25 @ Sigma1(e)
1082 vadd.i64 d27,d29,d23
1083 vshr.u64 d25,d16,#34
1086 vshr.u64 d26,d16,#39
1093 vbsl d30,d18,d17 @ Maj(a,b,c)
1094 veor d23,d26 @ Sigma0(a)
1098 vshr.u64 d24,d19,#14 @ 17
1100 vld1.64 {d1},[r1]! @ handles unaligned
1102 vshr.u64 d25,d19,#18
1104 vadd.i64 d23,d30 @ h+=Maj from the past
1106 vshr.u64 d26,d19,#41
1107 vld1.64 {d28},[r3,:64]! @ K[i++]
1112 #if 17<16 && defined(__ARMEL__)
1116 vbsl d29,d20,d21 @ Ch(e,f,g)
1117 vshr.u64 d24,d23,#28
1118 veor d26,d25 @ Sigma1(e)
1119 vadd.i64 d27,d29,d22
1120 vshr.u64 d25,d23,#34
1123 vshr.u64 d26,d23,#39
1130 vbsl d30,d17,d16 @ Maj(a,b,c)
1131 veor d22,d26 @ Sigma0(a)
1137 vadd.i64 d22,d30 @ h+=Maj from the past
1140 vext.8 q14,q1,q2,#8 @ X[i+1]
1144 veor q15,q13 @ sigma1(X[i+14])
1150 vext.8 q14,q5,q6,#8 @ X[i+9]
1152 vshr.u64 d24,d18,#14 @ from NEON_00_15
1154 vshr.u64 d25,d18,#18 @ from NEON_00_15
1155 veor q15,q13 @ sigma0(X[i+1])
1156 vshr.u64 d26,d18,#41 @ from NEON_00_15
1158 vld1.64 {d28},[r3,:64]! @ K[i++]
1163 #if 18<16 && defined(__ARMEL__)
1167 vbsl d29,d19,d20 @ Ch(e,f,g)
1168 vshr.u64 d24,d22,#28
1169 veor d26,d25 @ Sigma1(e)
1170 vadd.i64 d27,d29,d21
1171 vshr.u64 d25,d22,#34
1174 vshr.u64 d26,d22,#39
1181 vbsl d30,d16,d23 @ Maj(a,b,c)
1182 veor d21,d26 @ Sigma0(a)
1186 vshr.u64 d24,d17,#14 @ 19
1188 vld1.64 {d3},[r1]! @ handles unaligned
1190 vshr.u64 d25,d17,#18
1192 vadd.i64 d21,d30 @ h+=Maj from the past
1194 vshr.u64 d26,d17,#41
1195 vld1.64 {d28},[r3,:64]! @ K[i++]
1200 #if 19<16 && defined(__ARMEL__)
1204 vbsl d29,d18,d19 @ Ch(e,f,g)
1205 vshr.u64 d24,d21,#28
1206 veor d26,d25 @ Sigma1(e)
1207 vadd.i64 d27,d29,d20
1208 vshr.u64 d25,d21,#34
1211 vshr.u64 d26,d21,#39
1218 vbsl d30,d23,d22 @ Maj(a,b,c)
1219 veor d20,d26 @ Sigma0(a)
1225 vadd.i64 d20,d30 @ h+=Maj from the past
1228 vext.8 q14,q2,q3,#8 @ X[i+1]
1232 veor q15,q13 @ sigma1(X[i+14])
1238 vext.8 q14,q6,q7,#8 @ X[i+9]
1240 vshr.u64 d24,d16,#14 @ from NEON_00_15
1242 vshr.u64 d25,d16,#18 @ from NEON_00_15
1243 veor q15,q13 @ sigma0(X[i+1])
1244 vshr.u64 d26,d16,#41 @ from NEON_00_15
1246 vld1.64 {d28},[r3,:64]! @ K[i++]
1251 #if 20<16 && defined(__ARMEL__)
1255 vbsl d29,d17,d18 @ Ch(e,f,g)
1256 vshr.u64 d24,d20,#28
1257 veor d26,d25 @ Sigma1(e)
1258 vadd.i64 d27,d29,d19
1259 vshr.u64 d25,d20,#34
1262 vshr.u64 d26,d20,#39
1269 vbsl d30,d22,d21 @ Maj(a,b,c)
1270 veor d19,d26 @ Sigma0(a)
1274 vshr.u64 d24,d23,#14 @ 21
1276 vld1.64 {d5},[r1]! @ handles unaligned
1278 vshr.u64 d25,d23,#18
1280 vadd.i64 d19,d30 @ h+=Maj from the past
1282 vshr.u64 d26,d23,#41
1283 vld1.64 {d28},[r3,:64]! @ K[i++]
1288 #if 21<16 && defined(__ARMEL__)
1292 vbsl d29,d16,d17 @ Ch(e,f,g)
1293 vshr.u64 d24,d19,#28
1294 veor d26,d25 @ Sigma1(e)
1295 vadd.i64 d27,d29,d18
1296 vshr.u64 d25,d19,#34
1299 vshr.u64 d26,d19,#39
1306 vbsl d30,d21,d20 @ Maj(a,b,c)
1307 veor d18,d26 @ Sigma0(a)
1313 vadd.i64 d18,d30 @ h+=Maj from the past
1316 vext.8 q14,q3,q4,#8 @ X[i+1]
1320 veor q15,q13 @ sigma1(X[i+14])
1326 vext.8 q14,q7,q0,#8 @ X[i+9]
1328 vshr.u64 d24,d22,#14 @ from NEON_00_15
1330 vshr.u64 d25,d22,#18 @ from NEON_00_15
1331 veor q15,q13 @ sigma0(X[i+1])
1332 vshr.u64 d26,d22,#41 @ from NEON_00_15
1334 vld1.64 {d28},[r3,:64]! @ K[i++]
1339 #if 22<16 && defined(__ARMEL__)
1343 vbsl d29,d23,d16 @ Ch(e,f,g)
1344 vshr.u64 d24,d18,#28
1345 veor d26,d25 @ Sigma1(e)
1346 vadd.i64 d27,d29,d17
1347 vshr.u64 d25,d18,#34
1350 vshr.u64 d26,d18,#39
1357 vbsl d30,d20,d19 @ Maj(a,b,c)
1358 veor d17,d26 @ Sigma0(a)
1362 vshr.u64 d24,d21,#14 @ 23
1364 vld1.64 {d7},[r1]! @ handles unaligned
1366 vshr.u64 d25,d21,#18
1368 vadd.i64 d17,d30 @ h+=Maj from the past
1370 vshr.u64 d26,d21,#41
1371 vld1.64 {d28},[r3,:64]! @ K[i++]
1376 #if 23<16 && defined(__ARMEL__)
1380 vbsl d29,d22,d23 @ Ch(e,f,g)
1381 vshr.u64 d24,d17,#28
1382 veor d26,d25 @ Sigma1(e)
1383 vadd.i64 d27,d29,d16
1384 vshr.u64 d25,d17,#34
1387 vshr.u64 d26,d17,#39
1394 vbsl d30,d19,d18 @ Maj(a,b,c)
1395 veor d16,d26 @ Sigma0(a)
1401 vadd.i64 d16,d30 @ h+=Maj from the past
1404 vext.8 q14,q4,q5,#8 @ X[i+1]
1408 veor q15,q13 @ sigma1(X[i+14])
1414 vext.8 q14,q0,q1,#8 @ X[i+9]
1416 vshr.u64 d24,d20,#14 @ from NEON_00_15
1418 vshr.u64 d25,d20,#18 @ from NEON_00_15
1419 veor q15,q13 @ sigma0(X[i+1])
1420 vshr.u64 d26,d20,#41 @ from NEON_00_15
1422 vld1.64 {d28},[r3,:64]! @ K[i++]
1427 #if 24<16 && defined(__ARMEL__)
1431 vbsl d29,d21,d22 @ Ch(e,f,g)
1432 vshr.u64 d24,d16,#28
1433 veor d26,d25 @ Sigma1(e)
1434 vadd.i64 d27,d29,d23
1435 vshr.u64 d25,d16,#34
1438 vshr.u64 d26,d16,#39
1445 vbsl d30,d18,d17 @ Maj(a,b,c)
1446 veor d23,d26 @ Sigma0(a)
1450 vshr.u64 d24,d19,#14 @ 25
1452 vld1.64 {d9},[r1]! @ handles unaligned
1454 vshr.u64 d25,d19,#18
1456 vadd.i64 d23,d30 @ h+=Maj from the past
1458 vshr.u64 d26,d19,#41
1459 vld1.64 {d28},[r3,:64]! @ K[i++]
1464 #if 25<16 && defined(__ARMEL__)
1468 vbsl d29,d20,d21 @ Ch(e,f,g)
1469 vshr.u64 d24,d23,#28
1470 veor d26,d25 @ Sigma1(e)
1471 vadd.i64 d27,d29,d22
1472 vshr.u64 d25,d23,#34
1475 vshr.u64 d26,d23,#39
1482 vbsl d30,d17,d16 @ Maj(a,b,c)
1483 veor d22,d26 @ Sigma0(a)
1489 vadd.i64 d22,d30 @ h+=Maj from the past
1492 vext.8 q14,q5,q6,#8 @ X[i+1]
1496 veor q15,q13 @ sigma1(X[i+14])
1502 vext.8 q14,q1,q2,#8 @ X[i+9]
1504 vshr.u64 d24,d18,#14 @ from NEON_00_15
1506 vshr.u64 d25,d18,#18 @ from NEON_00_15
1507 veor q15,q13 @ sigma0(X[i+1])
1508 vshr.u64 d26,d18,#41 @ from NEON_00_15
1510 vld1.64 {d28},[r3,:64]! @ K[i++]
1515 #if 26<16 && defined(__ARMEL__)
1519 vbsl d29,d19,d20 @ Ch(e,f,g)
1520 vshr.u64 d24,d22,#28
1521 veor d26,d25 @ Sigma1(e)
1522 vadd.i64 d27,d29,d21
1523 vshr.u64 d25,d22,#34
1526 vshr.u64 d26,d22,#39
1533 vbsl d30,d16,d23 @ Maj(a,b,c)
1534 veor d21,d26 @ Sigma0(a)
1538 vshr.u64 d24,d17,#14 @ 27
1540 vld1.64 {d11},[r1]! @ handles unaligned
1542 vshr.u64 d25,d17,#18
1544 vadd.i64 d21,d30 @ h+=Maj from the past
1546 vshr.u64 d26,d17,#41
1547 vld1.64 {d28},[r3,:64]! @ K[i++]
1552 #if 27<16 && defined(__ARMEL__)
1556 vbsl d29,d18,d19 @ Ch(e,f,g)
1557 vshr.u64 d24,d21,#28
1558 veor d26,d25 @ Sigma1(e)
1559 vadd.i64 d27,d29,d20
1560 vshr.u64 d25,d21,#34
1563 vshr.u64 d26,d21,#39
1570 vbsl d30,d23,d22 @ Maj(a,b,c)
1571 veor d20,d26 @ Sigma0(a)
1577 vadd.i64 d20,d30 @ h+=Maj from the past
1580 vext.8 q14,q6,q7,#8 @ X[i+1]
1584 veor q15,q13 @ sigma1(X[i+14])
1590 vext.8 q14,q2,q3,#8 @ X[i+9]
1592 vshr.u64 d24,d16,#14 @ from NEON_00_15
1594 vshr.u64 d25,d16,#18 @ from NEON_00_15
1595 veor q15,q13 @ sigma0(X[i+1])
1596 vshr.u64 d26,d16,#41 @ from NEON_00_15
1598 vld1.64 {d28},[r3,:64]! @ K[i++]
1603 #if 28<16 && defined(__ARMEL__)
1607 vbsl d29,d17,d18 @ Ch(e,f,g)
1608 vshr.u64 d24,d20,#28
1609 veor d26,d25 @ Sigma1(e)
1610 vadd.i64 d27,d29,d19
1611 vshr.u64 d25,d20,#34
1614 vshr.u64 d26,d20,#39
1621 vbsl d30,d22,d21 @ Maj(a,b,c)
1622 veor d19,d26 @ Sigma0(a)
1626 vshr.u64 d24,d23,#14 @ 29
1628 vld1.64 {d13},[r1]! @ handles unaligned
1630 vshr.u64 d25,d23,#18
1632 vadd.i64 d19,d30 @ h+=Maj from the past
1634 vshr.u64 d26,d23,#41
1635 vld1.64 {d28},[r3,:64]! @ K[i++]
1640 #if 29<16 && defined(__ARMEL__)
1644 vbsl d29,d16,d17 @ Ch(e,f,g)
1645 vshr.u64 d24,d19,#28
1646 veor d26,d25 @ Sigma1(e)
1647 vadd.i64 d27,d29,d18
1648 vshr.u64 d25,d19,#34
1651 vshr.u64 d26,d19,#39
1658 vbsl d30,d21,d20 @ Maj(a,b,c)
1659 veor d18,d26 @ Sigma0(a)
1665 vadd.i64 d18,d30 @ h+=Maj from the past
1668 vext.8 q14,q7,q0,#8 @ X[i+1]
1672 veor q15,q13 @ sigma1(X[i+14])
1678 vext.8 q14,q3,q4,#8 @ X[i+9]
1680 vshr.u64 d24,d22,#14 @ from NEON_00_15
1682 vshr.u64 d25,d22,#18 @ from NEON_00_15
1683 veor q15,q13 @ sigma0(X[i+1])
1684 vshr.u64 d26,d22,#41 @ from NEON_00_15
1686 vld1.64 {d28},[r3,:64]! @ K[i++]
1691 #if 30<16 && defined(__ARMEL__)
1695 vbsl d29,d23,d16 @ Ch(e,f,g)
1696 vshr.u64 d24,d18,#28
1697 veor d26,d25 @ Sigma1(e)
1698 vadd.i64 d27,d29,d17
1699 vshr.u64 d25,d18,#34
1702 vshr.u64 d26,d18,#39
1709 vbsl d30,d20,d19 @ Maj(a,b,c)
1710 veor d17,d26 @ Sigma0(a)
1714 vshr.u64 d24,d21,#14 @ 31
1716 vld1.64 {d15},[r1]! @ handles unaligned
1718 vshr.u64 d25,d21,#18
1720 vadd.i64 d17,d30 @ h+=Maj from the past
1722 vshr.u64 d26,d21,#41
1723 vld1.64 {d28},[r3,:64]! @ K[i++]
1728 #if 31<16 && defined(__ARMEL__)
1732 vbsl d29,d22,d23 @ Ch(e,f,g)
1733 vshr.u64 d24,d17,#28
1734 veor d26,d25 @ Sigma1(e)
1735 vadd.i64 d27,d29,d16
1736 vshr.u64 d25,d17,#34
1739 vshr.u64 d26,d17,#39
1746 vbsl d30,d19,d18 @ Maj(a,b,c)
1747 veor d16,d26 @ Sigma0(a)
1753 vadd.i64 d16,d30 @ h+=Maj from the past
1754 vldmia r0,{d24-d31} @ load context to temp
1755 vadd.i64 q8,q12 @ vectorized accumulate
1759 vstmia r0,{d16-d23} @ save context
1761 sub r3,#640 @ rewind K512
1764 vldmia sp!,{d8-d15} @ epilogue
1767 .size sha512_block_data_order,.-sha512_block_data_order
1768 .asciz "SHA512 block transform for ARMv4/NEON, CRYPTOGAMS by <appro@openssl.org>"
1770 .comm OPENSSL_armcap_P,4,4