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