sha256-armv8.S revision 3f9e6ada2c9f7183a41081263585e6a70bbd9f59
12b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner#include "arm_arch.h" 22b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner 32b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner.text 42b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner 52b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner.globl sha256_block_data_order 62b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner.type sha256_block_data_order,%function 72b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner.align 6 82b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattnersha256_block_data_order: 92b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner ldr x16,.LOPENSSL_armcap_P 102b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner adr x17,.LOPENSSL_armcap_P 112b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner add x16,x16,x17 122b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner ldr w16,[x16] 132b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner tst w16,#ARMV8_SHA256 142b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner b.ne .Lv8_entry 152b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner stp x29,x30,[sp,#-128]! 162b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner add x29,sp,#0 17fced2945995b4fd8f28f7dec9fcb5a6ab2e2798dJakub Staszak 182b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner stp x19,x20,[sp,#16] 1904df049014396fe97a31bf3fa8951201b2ed8ffeChris Lattner stp x21,x22,[sp,#32] 2004df049014396fe97a31bf3fa8951201b2ed8ffeChris Lattner stp x23,x24,[sp,#48] 212b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner stp x25,x26,[sp,#64] 222b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner stp x27,x28,[sp,#80] 232b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner sub sp,sp,#4*4 24715c80a00b965f19ca2c7dacbc2f809221cc2730Jay Foad 25715c80a00b965f19ca2c7dacbc2f809221cc2730Jay Foad ldp w20,w21,[x0] // load context 262b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner ldp w22,w23,[x0,#2*4] 272b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner ldp w24,w25,[x0,#4*4] 282b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner add x2,x1,x2,lsl#6 // end of input 292b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner ldp w26,w27,[x0,#6*4] 302b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner adr x30,K256 312b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner stp x0,x2,[x29,#96] 322b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner 332b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner.Loop: 342b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner ldp w3,w4,[x1],#2*4 35fced2945995b4fd8f28f7dec9fcb5a6ab2e2798dJakub Staszak ldr w19,[x30],#4 // *K++ 362b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner eor w28,w21,w22 // magic seed 372b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner str x1,[x29,#112] 382b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner#ifndef __ARMEB__ 39fced2945995b4fd8f28f7dec9fcb5a6ab2e2798dJakub Staszak rev w3,w3 // 0 402b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner#endif 415d4f9909c49d28db9572acc4513c1a695b0c53daJay Foad ror w16,w24,#6 42fced2945995b4fd8f28f7dec9fcb5a6ab2e2798dJakub Staszak add w27,w27,w19 // h+=K[i] 432b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner eor w6,w24,w24,ror#14 442b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner and w17,w25,w24 452b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner bic w19,w26,w24 46fced2945995b4fd8f28f7dec9fcb5a6ab2e2798dJakub Staszak add w27,w27,w3 // h+=X[i] 472b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner orr w17,w17,w19 // Ch(e,f,g) 482b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner eor w19,w20,w21 // a^b, b^c in next round 49fced2945995b4fd8f28f7dec9fcb5a6ab2e2798dJakub Staszak eor w16,w16,w6,ror#11 // Sigma1(e) 502b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner ror w6,w20,#2 512b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner add w27,w27,w17 // h+=Ch(e,f,g) 522b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner eor w17,w20,w20,ror#9 53fced2945995b4fd8f28f7dec9fcb5a6ab2e2798dJakub Staszak add w27,w27,w16 // h+=Sigma1(e) 542b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner and w28,w28,w19 // (b^c)&=(a^b) 5504df049014396fe97a31bf3fa8951201b2ed8ffeChris Lattner add w23,w23,w27 // d+=h 562b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner eor w28,w28,w21 // Maj(a,b,c) 57fced2945995b4fd8f28f7dec9fcb5a6ab2e2798dJakub Staszak eor w17,w6,w17,ror#13 // Sigma0(a) 585d4f9909c49d28db9572acc4513c1a695b0c53daJay Foad add w27,w27,w28 // h+=Maj(a,b,c) 595d4f9909c49d28db9572acc4513c1a695b0c53daJay Foad ldr w28,[x30],#4 // *K++, w19 in next round 605d4f9909c49d28db9572acc4513c1a695b0c53daJay Foad //add w27,w27,w17 // h+=Sigma0(a) 61fced2945995b4fd8f28f7dec9fcb5a6ab2e2798dJakub Staszak#ifndef __ARMEB__ 622b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner rev w4,w4 // 1 632b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner#endif 642b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner ldp w5,w6,[x1],#2*4 652b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner add w27,w27,w17 // h+=Sigma0(a) 662b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner ror w16,w23,#6 672b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner add w26,w26,w28 // h+=K[i] 682b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner eor w7,w23,w23,ror#14 69fced2945995b4fd8f28f7dec9fcb5a6ab2e2798dJakub Staszak and w17,w24,w23 70438208e8cb29c67b2177619a339b84291729b6b7Frits van Bommel bic w28,w25,w23 71438208e8cb29c67b2177619a339b84291729b6b7Frits van Bommel add w26,w26,w4 // h+=X[i] 72438208e8cb29c67b2177619a339b84291729b6b7Frits van Bommel orr w17,w17,w28 // Ch(e,f,g) 73438208e8cb29c67b2177619a339b84291729b6b7Frits van Bommel eor w28,w27,w20 // a^b, b^c in next round 74fced2945995b4fd8f28f7dec9fcb5a6ab2e2798dJakub Staszak eor w16,w16,w7,ror#11 // Sigma1(e) 752b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner ror w7,w27,#2 762b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner add w26,w26,w17 // h+=Ch(e,f,g) 772b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner eor w17,w27,w27,ror#9 782b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner add w26,w26,w16 // h+=Sigma1(e) 792b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner and w19,w19,w28 // (b^c)&=(a^b) 802b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner add w22,w22,w26 // d+=h 81fced2945995b4fd8f28f7dec9fcb5a6ab2e2798dJakub Staszak eor w19,w19,w20 // Maj(a,b,c) 8204b2f0d99feb9cdf87eb8f35483816d757d170ddChris Lattner eor w17,w7,w17,ror#13 // Sigma0(a) 832b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner add w26,w26,w19 // h+=Maj(a,b,c) 84fced2945995b4fd8f28f7dec9fcb5a6ab2e2798dJakub Staszak ldr w19,[x30],#4 // *K++, w28 in next round 85878ad7afa512ef300d5df4e7ca0189775342dfc2Chris Lattner //add w26,w26,w17 // h+=Sigma0(a) 86fced2945995b4fd8f28f7dec9fcb5a6ab2e2798dJakub Staszak#ifndef __ARMEB__ 8704b2f0d99feb9cdf87eb8f35483816d757d170ddChris Lattner rev w5,w5 // 2 882b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner#endif 89fced2945995b4fd8f28f7dec9fcb5a6ab2e2798dJakub Staszak add w26,w26,w17 // h+=Sigma0(a) 902b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner ror w16,w22,#6 912b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner add w25,w25,w19 // h+=K[i] 922b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner eor w8,w22,w22,ror#14 932b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner and w17,w23,w22 942b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner bic w19,w24,w22 95fced2945995b4fd8f28f7dec9fcb5a6ab2e2798dJakub Staszak add w25,w25,w5 // h+=X[i] 9604df049014396fe97a31bf3fa8951201b2ed8ffeChris Lattner orr w17,w17,w19 // Ch(e,f,g) 972b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner eor w19,w26,w27 // a^b, b^c in next round 982b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner eor w16,w16,w8,ror#11 // Sigma1(e) 992b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner ror w8,w26,#2 1002b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner add w25,w25,w17 // h+=Ch(e,f,g) 101fced2945995b4fd8f28f7dec9fcb5a6ab2e2798dJakub Staszak eor w17,w26,w26,ror#9 1025d4f9909c49d28db9572acc4513c1a695b0c53daJay Foad add w25,w25,w16 // h+=Sigma1(e) 1035d4f9909c49d28db9572acc4513c1a695b0c53daJay Foad and w28,w28,w19 // (b^c)&=(a^b) 1045d4f9909c49d28db9572acc4513c1a695b0c53daJay Foad add w21,w21,w25 // d+=h 1055d4f9909c49d28db9572acc4513c1a695b0c53daJay Foad eor w28,w28,w27 // Maj(a,b,c) 1065d4f9909c49d28db9572acc4513c1a695b0c53daJay Foad eor w17,w8,w17,ror#13 // Sigma0(a) 1075d4f9909c49d28db9572acc4513c1a695b0c53daJay Foad add w25,w25,w28 // h+=Maj(a,b,c) 1085d4f9909c49d28db9572acc4513c1a695b0c53daJay Foad ldr w28,[x30],#4 // *K++, w19 in next round 1095d4f9909c49d28db9572acc4513c1a695b0c53daJay Foad //add w25,w25,w17 // h+=Sigma0(a) 1105d4f9909c49d28db9572acc4513c1a695b0c53daJay Foad#ifndef __ARMEB__ 1115d4f9909c49d28db9572acc4513c1a695b0c53daJay Foad rev w6,w6 // 3 112fa09685a9aa17dbdd4c72ad032684debb25feb0bChris Lattner#endif 1131752e45de9914cb52d748c1052ecd2f1414bced4Chris Lattner ldp w7,w8,[x1],#2*4 114fa09685a9aa17dbdd4c72ad032684debb25feb0bChris Lattner add w25,w25,w17 // h+=Sigma0(a) 115fa09685a9aa17dbdd4c72ad032684debb25feb0bChris Lattner ror w16,w21,#6 116fa09685a9aa17dbdd4c72ad032684debb25feb0bChris Lattner add w24,w24,w28 // h+=K[i] 117fa09685a9aa17dbdd4c72ad032684debb25feb0bChris Lattner eor w9,w21,w21,ror#14 118fa09685a9aa17dbdd4c72ad032684debb25feb0bChris Lattner and w17,w22,w21 119fa09685a9aa17dbdd4c72ad032684debb25feb0bChris Lattner bic w28,w23,w21 1201752e45de9914cb52d748c1052ecd2f1414bced4Chris Lattner add w24,w24,w6 // h+=X[i] 121fa09685a9aa17dbdd4c72ad032684debb25feb0bChris Lattner orr w17,w17,w28 // Ch(e,f,g) 122fa09685a9aa17dbdd4c72ad032684debb25feb0bChris Lattner eor w28,w25,w26 // a^b, b^c in next round 123fa09685a9aa17dbdd4c72ad032684debb25feb0bChris Lattner eor w16,w16,w9,ror#11 // Sigma1(e) 124fced2945995b4fd8f28f7dec9fcb5a6ab2e2798dJakub Staszak ror w9,w25,#2 1252b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner add w24,w24,w17 // h+=Ch(e,f,g) 1262b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner eor w17,w25,w25,ror#9 1272b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner add w24,w24,w16 // h+=Sigma1(e) 12804df049014396fe97a31bf3fa8951201b2ed8ffeChris Lattner and w19,w19,w28 // (b^c)&=(a^b) 1292b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner add w20,w20,w24 // d+=h 1302b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner eor w19,w19,w26 // Maj(a,b,c) 1312b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner eor w17,w9,w17,ror#13 // Sigma0(a) 132fced2945995b4fd8f28f7dec9fcb5a6ab2e2798dJakub Staszak add w24,w24,w19 // h+=Maj(a,b,c) 1332b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner ldr w19,[x30],#4 // *K++, w28 in next round 1342b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner //add w24,w24,w17 // h+=Sigma0(a) 1352b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner#ifndef __ARMEB__ 1362b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner rev w7,w7 // 4 1372b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner#endif 1382b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner add w24,w24,w17 // h+=Sigma0(a) 139fced2945995b4fd8f28f7dec9fcb5a6ab2e2798dJakub Staszak ror w16,w20,#6 1402b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner add w23,w23,w19 // h+=K[i] 1412a4a6fecf0b8c92223f8fdf19545b564b7d3fcdeJay Foad eor w10,w20,w20,ror#14 1422a4a6fecf0b8c92223f8fdf19545b564b7d3fcdeJay Foad and w17,w21,w20 1432a4a6fecf0b8c92223f8fdf19545b564b7d3fcdeJay Foad bic w19,w22,w20 1442a4a6fecf0b8c92223f8fdf19545b564b7d3fcdeJay Foad add w23,w23,w7 // h+=X[i] 1452a4a6fecf0b8c92223f8fdf19545b564b7d3fcdeJay Foad orr w17,w17,w19 // Ch(e,f,g) 146fced2945995b4fd8f28f7dec9fcb5a6ab2e2798dJakub Staszak eor w19,w24,w25 // a^b, b^c in next round 1472a4a6fecf0b8c92223f8fdf19545b564b7d3fcdeJay Foad eor w16,w16,w10,ror#11 // Sigma1(e) 1482b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner ror w10,w24,#2 149c48e1ef0e22b4113dd4dd48c5b170a19fe4d0188Frits van Bommel add w23,w23,w17 // h+=Ch(e,f,g) 150c48e1ef0e22b4113dd4dd48c5b170a19fe4d0188Frits van Bommel eor w17,w24,w24,ror#9 151c48e1ef0e22b4113dd4dd48c5b170a19fe4d0188Frits van Bommel add w23,w23,w16 // h+=Sigma1(e) 152c48e1ef0e22b4113dd4dd48c5b170a19fe4d0188Frits van Bommel and w28,w28,w19 // (b^c)&=(a^b) 153c48e1ef0e22b4113dd4dd48c5b170a19fe4d0188Frits van Bommel add w27,w27,w23 // d+=h 154c48e1ef0e22b4113dd4dd48c5b170a19fe4d0188Frits van Bommel eor w28,w28,w25 // Maj(a,b,c) 155c48e1ef0e22b4113dd4dd48c5b170a19fe4d0188Frits van Bommel eor w17,w10,w17,ror#13 // Sigma0(a) 156c48e1ef0e22b4113dd4dd48c5b170a19fe4d0188Frits van Bommel add w23,w23,w28 // h+=Maj(a,b,c) 157c48e1ef0e22b4113dd4dd48c5b170a19fe4d0188Frits van Bommel ldr w28,[x30],#4 // *K++, w19 in next round 158c48e1ef0e22b4113dd4dd48c5b170a19fe4d0188Frits van Bommel //add w23,w23,w17 // h+=Sigma0(a) 159c48e1ef0e22b4113dd4dd48c5b170a19fe4d0188Frits van Bommel#ifndef __ARMEB__ 160c48e1ef0e22b4113dd4dd48c5b170a19fe4d0188Frits van Bommel rev w8,w8 // 5 161c48e1ef0e22b4113dd4dd48c5b170a19fe4d0188Frits van Bommel#endif 162c48e1ef0e22b4113dd4dd48c5b170a19fe4d0188Frits van Bommel ldp w9,w10,[x1],#2*4 163c48e1ef0e22b4113dd4dd48c5b170a19fe4d0188Frits van Bommel add w23,w23,w17 // h+=Sigma0(a) 164c48e1ef0e22b4113dd4dd48c5b170a19fe4d0188Frits van Bommel ror w16,w27,#6 165c48e1ef0e22b4113dd4dd48c5b170a19fe4d0188Frits van Bommel add w22,w22,w28 // h+=K[i] 166c48e1ef0e22b4113dd4dd48c5b170a19fe4d0188Frits van Bommel eor w11,w27,w27,ror#14 167c48e1ef0e22b4113dd4dd48c5b170a19fe4d0188Frits van Bommel and w17,w20,w27 168c48e1ef0e22b4113dd4dd48c5b170a19fe4d0188Frits van Bommel bic w28,w21,w27 169c48e1ef0e22b4113dd4dd48c5b170a19fe4d0188Frits van Bommel add w22,w22,w8 // h+=X[i] 170c48e1ef0e22b4113dd4dd48c5b170a19fe4d0188Frits van Bommel orr w17,w17,w28 // Ch(e,f,g) 171c48e1ef0e22b4113dd4dd48c5b170a19fe4d0188Frits van Bommel eor w28,w23,w24 // a^b, b^c in next round 172c48e1ef0e22b4113dd4dd48c5b170a19fe4d0188Frits van Bommel eor w16,w16,w11,ror#11 // Sigma1(e) 173c48e1ef0e22b4113dd4dd48c5b170a19fe4d0188Frits van Bommel ror w11,w23,#2 174c48e1ef0e22b4113dd4dd48c5b170a19fe4d0188Frits van Bommel add w22,w22,w17 // h+=Ch(e,f,g) 175c48e1ef0e22b4113dd4dd48c5b170a19fe4d0188Frits van Bommel eor w17,w23,w23,ror#9 176c48e1ef0e22b4113dd4dd48c5b170a19fe4d0188Frits van Bommel add w22,w22,w16 // h+=Sigma1(e) 177c48e1ef0e22b4113dd4dd48c5b170a19fe4d0188Frits van Bommel and w19,w19,w28 // (b^c)&=(a^b) 178c48e1ef0e22b4113dd4dd48c5b170a19fe4d0188Frits van Bommel add w26,w26,w22 // d+=h 179c48e1ef0e22b4113dd4dd48c5b170a19fe4d0188Frits van Bommel eor w19,w19,w24 // Maj(a,b,c) 180c48e1ef0e22b4113dd4dd48c5b170a19fe4d0188Frits van Bommel eor w17,w11,w17,ror#13 // Sigma0(a) 181c48e1ef0e22b4113dd4dd48c5b170a19fe4d0188Frits van Bommel add w22,w22,w19 // h+=Maj(a,b,c) 182c48e1ef0e22b4113dd4dd48c5b170a19fe4d0188Frits van Bommel ldr w19,[x30],#4 // *K++, w28 in next round 183c48e1ef0e22b4113dd4dd48c5b170a19fe4d0188Frits van Bommel //add w22,w22,w17 // h+=Sigma0(a) 184c48e1ef0e22b4113dd4dd48c5b170a19fe4d0188Frits van Bommel#ifndef __ARMEB__ 185c48e1ef0e22b4113dd4dd48c5b170a19fe4d0188Frits van Bommel rev w9,w9 // 6 186c48e1ef0e22b4113dd4dd48c5b170a19fe4d0188Frits van Bommel#endif 187c48e1ef0e22b4113dd4dd48c5b170a19fe4d0188Frits van Bommel add w22,w22,w17 // h+=Sigma0(a) 188c48e1ef0e22b4113dd4dd48c5b170a19fe4d0188Frits van Bommel ror w16,w26,#6 189c48e1ef0e22b4113dd4dd48c5b170a19fe4d0188Frits van Bommel add w21,w21,w19 // h+=K[i] 190c48e1ef0e22b4113dd4dd48c5b170a19fe4d0188Frits van Bommel eor w12,w26,w26,ror#14 191c48e1ef0e22b4113dd4dd48c5b170a19fe4d0188Frits van Bommel and w17,w27,w26 192f6275309994dea2ec852c1f539875ae643646ec5Frits van Bommel bic w19,w20,w26 193c48e1ef0e22b4113dd4dd48c5b170a19fe4d0188Frits van Bommel add w21,w21,w9 // h+=X[i] 194c48e1ef0e22b4113dd4dd48c5b170a19fe4d0188Frits van Bommel orr w17,w17,w19 // Ch(e,f,g) 195c48e1ef0e22b4113dd4dd48c5b170a19fe4d0188Frits van Bommel eor w19,w22,w23 // a^b, b^c in next round 1965d4f9909c49d28db9572acc4513c1a695b0c53daJay Foad eor w16,w16,w12,ror#11 // Sigma1(e) 1975d4f9909c49d28db9572acc4513c1a695b0c53daJay Foad ror w12,w22,#2 1985d4f9909c49d28db9572acc4513c1a695b0c53daJay Foad add w21,w21,w17 // h+=Ch(e,f,g) 1995d4f9909c49d28db9572acc4513c1a695b0c53daJay Foad eor w17,w22,w22,ror#9 2005d4f9909c49d28db9572acc4513c1a695b0c53daJay Foad add w21,w21,w16 // h+=Sigma1(e) 2015d4f9909c49d28db9572acc4513c1a695b0c53daJay Foad and w28,w28,w19 // (b^c)&=(a^b) 2025d4f9909c49d28db9572acc4513c1a695b0c53daJay Foad add w25,w25,w21 // d+=h 2035d4f9909c49d28db9572acc4513c1a695b0c53daJay Foad eor w28,w28,w23 // Maj(a,b,c) 2045d4f9909c49d28db9572acc4513c1a695b0c53daJay Foad eor w17,w12,w17,ror#13 // Sigma0(a) 2055d4f9909c49d28db9572acc4513c1a695b0c53daJay Foad add w21,w21,w28 // h+=Maj(a,b,c) 2065d4f9909c49d28db9572acc4513c1a695b0c53daJay Foad ldr w28,[x30],#4 // *K++, w19 in next round 2075d4f9909c49d28db9572acc4513c1a695b0c53daJay Foad //add w21,w21,w17 // h+=Sigma0(a) 2085d4f9909c49d28db9572acc4513c1a695b0c53daJay Foad#ifndef __ARMEB__ 2095d4f9909c49d28db9572acc4513c1a695b0c53daJay Foad rev w10,w10 // 7 2105d4f9909c49d28db9572acc4513c1a695b0c53daJay Foad#endif 2112b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner ldp w11,w12,[x1],#2*4 2122b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner add w21,w21,w17 // h+=Sigma0(a) 2132b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner ror w16,w25,#6 2142b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner add w20,w20,w28 // h+=K[i] 2152b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner eor w13,w25,w25,ror#14 2162b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner and w17,w26,w25 2172b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner bic w28,w27,w25 2182b9bc422a5e6840f5b925316bc06d5943deb610aChris Lattner 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 979K256: 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 1005sha256_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 1142