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 8sha256_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 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