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