sha512-armv4.S revision 1.1
1#include "arm_arch.h" 2#include "arm_asm.h" 3#ifdef __ARMEL__ 4# define LO 0 5# define HI 4 6# define WORD64(hi0,lo0,hi1,lo1) .word lo0,hi0, lo1,hi1 7#else 8# define HI 0 9# define LO 4 10# define WORD64(hi0,lo0,hi1,lo1) .word hi0,lo0, hi1,lo1 11#endif 12 13.text 14.code 32 15.type K512,%object 16.align 5 17K512: 18WORD64(0x428a2f98,0xd728ae22, 0x71374491,0x23ef65cd) 19WORD64(0xb5c0fbcf,0xec4d3b2f, 0xe9b5dba5,0x8189dbbc) 20WORD64(0x3956c25b,0xf348b538, 0x59f111f1,0xb605d019) 21WORD64(0x923f82a4,0xaf194f9b, 0xab1c5ed5,0xda6d8118) 22WORD64(0xd807aa98,0xa3030242, 0x12835b01,0x45706fbe) 23WORD64(0x243185be,0x4ee4b28c, 0x550c7dc3,0xd5ffb4e2) 24WORD64(0x72be5d74,0xf27b896f, 0x80deb1fe,0x3b1696b1) 25WORD64(0x9bdc06a7,0x25c71235, 0xc19bf174,0xcf692694) 26WORD64(0xe49b69c1,0x9ef14ad2, 0xefbe4786,0x384f25e3) 27WORD64(0x0fc19dc6,0x8b8cd5b5, 0x240ca1cc,0x77ac9c65) 28WORD64(0x2de92c6f,0x592b0275, 0x4a7484aa,0x6ea6e483) 29WORD64(0x5cb0a9dc,0xbd41fbd4, 0x76f988da,0x831153b5) 30WORD64(0x983e5152,0xee66dfab, 0xa831c66d,0x2db43210) 31WORD64(0xb00327c8,0x98fb213f, 0xbf597fc7,0xbeef0ee4) 32WORD64(0xc6e00bf3,0x3da88fc2, 0xd5a79147,0x930aa725) 33WORD64(0x06ca6351,0xe003826f, 0x14292967,0x0a0e6e70) 34WORD64(0x27b70a85,0x46d22ffc, 0x2e1b2138,0x5c26c926) 35WORD64(0x4d2c6dfc,0x5ac42aed, 0x53380d13,0x9d95b3df) 36WORD64(0x650a7354,0x8baf63de, 0x766a0abb,0x3c77b2a8) 37WORD64(0x81c2c92e,0x47edaee6, 0x92722c85,0x1482353b) 38WORD64(0xa2bfe8a1,0x4cf10364, 0xa81a664b,0xbc423001) 39WORD64(0xc24b8b70,0xd0f89791, 0xc76c51a3,0x0654be30) 40WORD64(0xd192e819,0xd6ef5218, 0xd6990624,0x5565a910) 41WORD64(0xf40e3585,0x5771202a, 0x106aa070,0x32bbd1b8) 42WORD64(0x19a4c116,0xb8d2d0c8, 0x1e376c08,0x5141ab53) 43WORD64(0x2748774c,0xdf8eeb99, 0x34b0bcb5,0xe19b48a8) 44WORD64(0x391c0cb3,0xc5c95a63, 0x4ed8aa4a,0xe3418acb) 45WORD64(0x5b9cca4f,0x7763e373, 0x682e6ff3,0xd6b2b8a3) 46WORD64(0x748f82ee,0x5defb2fc, 0x78a5636f,0x43172f60) 47WORD64(0x84c87814,0xa1f0ab72, 0x8cc70208,0x1a6439ec) 48WORD64(0x90befffa,0x23631e28, 0xa4506ceb,0xde82bde9) 49WORD64(0xbef9a3f7,0xb2c67915, 0xc67178f2,0xe372532b) 50WORD64(0xca273ece,0xea26619c, 0xd186b8c7,0x21c0c207) 51WORD64(0xeada7dd6,0xcde0eb1e, 0xf57d4f7f,0xee6ed178) 52WORD64(0x06f067aa,0x72176fba, 0x0a637dc5,0xa2c898a6) 53WORD64(0x113f9804,0xbef90dae, 0x1b710b35,0x131c471b) 54WORD64(0x28db77f5,0x23047d84, 0x32caab7b,0x40c72493) 55WORD64(0x3c9ebe0a,0x15c9bebc, 0x431d67c4,0x9c100d4c) 56WORD64(0x4cc5d4be,0xcb3e42b6, 0x597f299c,0xfc657e2a) 57WORD64(0x5fcb6fab,0x3ad6faec, 0x6c44198c,0x4a475817) 58.size K512,.-K512 59#if __ARM_MAX_ARCH__>=7 60.LOPENSSL_armcap: 61.word OPENSSL_armcap_P-sha512_block_data_order 62.skip 32-4 63#else 64.skip 32 65#endif 66 67.global sha512_block_data_order 68.type sha512_block_data_order,%function 69sha512_block_data_order: 70 sub r3,pc,#8 @ sha512_block_data_order 71 add r2,r1,r2,lsl#7 @ len to point at the end of inp 72#if __ARM_MAX_ARCH__>=7 73 ldr r12,.LOPENSSL_armcap 74 ldr r12,[r3,r12] @ OPENSSL_armcap_P 75 tst r12,#1 76 bne .LNEON 77#endif 78 stmdb sp!,{r4-r12,lr} 79 sub r14,r3,#672 @ K512 80 sub sp,sp,#9*8 81 82 ldr r7,[r0,#32+LO] 83 ldr r8,[r0,#32+HI] 84 ldr r9, [r0,#48+LO] 85 ldr r10, [r0,#48+HI] 86 ldr r11, [r0,#56+LO] 87 ldr r12, [r0,#56+HI] 88.Loop: 89 str r9, [sp,#48+0] 90 str r10, [sp,#48+4] 91 str r11, [sp,#56+0] 92 str r12, [sp,#56+4] 93 ldr r5,[r0,#0+LO] 94 ldr r6,[r0,#0+HI] 95 ldr r3,[r0,#8+LO] 96 ldr r4,[r0,#8+HI] 97 ldr r9, [r0,#16+LO] 98 ldr r10, [r0,#16+HI] 99 ldr r11, [r0,#24+LO] 100 ldr r12, [r0,#24+HI] 101 str r3,[sp,#8+0] 102 str r4,[sp,#8+4] 103 str r9, [sp,#16+0] 104 str r10, [sp,#16+4] 105 str r11, [sp,#24+0] 106 str r12, [sp,#24+4] 107 ldr r3,[r0,#40+LO] 108 ldr r4,[r0,#40+HI] 109 str r3,[sp,#40+0] 110 str r4,[sp,#40+4] 111 112.L00_15: 113#if __ARM_ARCH__<7 114 ldrb r3,[r1,#7] 115 ldrb r9, [r1,#6] 116 ldrb r10, [r1,#5] 117 ldrb r11, [r1,#4] 118 ldrb r4,[r1,#3] 119 ldrb r12, [r1,#2] 120 orr r3,r3,r9,lsl#8 121 ldrb r9, [r1,#1] 122 orr r3,r3,r10,lsl#16 123 ldrb r10, [r1],#8 124 orr r3,r3,r11,lsl#24 125 orr r4,r4,r12,lsl#8 126 orr r4,r4,r9,lsl#16 127 orr r4,r4,r10,lsl#24 128#else 129 ldr r3,[r1,#4] 130 ldr r4,[r1],#8 131#ifdef __ARMEL__ 132 rev r3,r3 133 rev r4,r4 134#endif 135#endif 136 @ Sigma1(x) (ROTR((x),14) ^ ROTR((x),18) ^ ROTR((x),41)) 137 @ LO lo>>14^hi<<18 ^ lo>>18^hi<<14 ^ hi>>9^lo<<23 138 @ HI hi>>14^lo<<18 ^ hi>>18^lo<<14 ^ lo>>9^hi<<23 139 mov r9,r7,lsr#14 140 str r3,[sp,#64+0] 141 mov r10,r8,lsr#14 142 str r4,[sp,#64+4] 143 eor r9,r9,r8,lsl#18 144 ldr r11,[sp,#56+0] @ h.lo 145 eor r10,r10,r7,lsl#18 146 ldr r12,[sp,#56+4] @ h.hi 147 eor r9,r9,r7,lsr#18 148 eor r10,r10,r8,lsr#18 149 eor r9,r9,r8,lsl#14 150 eor r10,r10,r7,lsl#14 151 eor r9,r9,r8,lsr#9 152 eor r10,r10,r7,lsr#9 153 eor r9,r9,r7,lsl#23 154 eor r10,r10,r8,lsl#23 @ Sigma1(e) 155 adds r3,r3,r9 156 ldr r9,[sp,#40+0] @ f.lo 157 adc r4,r4,r10 @ T += Sigma1(e) 158 ldr r10,[sp,#40+4] @ f.hi 159 adds r3,r3,r11 160 ldr r11,[sp,#48+0] @ g.lo 161 adc r4,r4,r12 @ T += h 162 ldr r12,[sp,#48+4] @ g.hi 163 164 eor r9,r9,r11 165 str r7,[sp,#32+0] 166 eor r10,r10,r12 167 str r8,[sp,#32+4] 168 and r9,r9,r7 169 str r5,[sp,#0+0] 170 and r10,r10,r8 171 str r6,[sp,#0+4] 172 eor r9,r9,r11 173 ldr r11,[r14,#LO] @ K[i].lo 174 eor r10,r10,r12 @ Ch(e,f,g) 175 ldr r12,[r14,#HI] @ K[i].hi 176 177 adds r3,r3,r9 178 ldr r7,[sp,#24+0] @ d.lo 179 adc r4,r4,r10 @ T += Ch(e,f,g) 180 ldr r8,[sp,#24+4] @ d.hi 181 adds r3,r3,r11 182 and r9,r11,#0xff 183 adc r4,r4,r12 @ T += K[i] 184 adds r7,r7,r3 185 ldr r11,[sp,#8+0] @ b.lo 186 adc r8,r8,r4 @ d += T 187 teq r9,#148 188 189 ldr r12,[sp,#16+0] @ c.lo 190 orreq r14,r14,#1 191 @ Sigma0(x) (ROTR((x),28) ^ ROTR((x),34) ^ ROTR((x),39)) 192 @ LO lo>>28^hi<<4 ^ hi>>2^lo<<30 ^ hi>>7^lo<<25 193 @ HI hi>>28^lo<<4 ^ lo>>2^hi<<30 ^ lo>>7^hi<<25 194 mov r9,r5,lsr#28 195 mov r10,r6,lsr#28 196 eor r9,r9,r6,lsl#4 197 eor r10,r10,r5,lsl#4 198 eor r9,r9,r6,lsr#2 199 eor r10,r10,r5,lsr#2 200 eor r9,r9,r5,lsl#30 201 eor r10,r10,r6,lsl#30 202 eor r9,r9,r6,lsr#7 203 eor r10,r10,r5,lsr#7 204 eor r9,r9,r5,lsl#25 205 eor r10,r10,r6,lsl#25 @ Sigma0(a) 206 adds r3,r3,r9 207 and r9,r5,r11 208 adc r4,r4,r10 @ T += Sigma0(a) 209 210 ldr r10,[sp,#8+4] @ b.hi 211 orr r5,r5,r11 212 ldr r11,[sp,#16+4] @ c.hi 213 and r5,r5,r12 214 and r12,r6,r10 215 orr r6,r6,r10 216 orr r5,r5,r9 @ Maj(a,b,c).lo 217 and r6,r6,r11 218 adds r5,r5,r3 219 orr r6,r6,r12 @ Maj(a,b,c).hi 220 sub sp,sp,#8 221 adc r6,r6,r4 @ h += T 222 tst r14,#1 223 add r14,r14,#8 224 tst r14,#1 225 beq .L00_15 226 ldr r9,[sp,#184+0] 227 ldr r10,[sp,#184+4] 228 bic r14,r14,#1 229.L16_79: 230 @ sigma0(x) (ROTR((x),1) ^ ROTR((x),8) ^ ((x)>>7)) 231 @ LO lo>>1^hi<<31 ^ lo>>8^hi<<24 ^ lo>>7^hi<<25 232 @ HI hi>>1^lo<<31 ^ hi>>8^lo<<24 ^ hi>>7 233 mov r3,r9,lsr#1 234 ldr r11,[sp,#80+0] 235 mov r4,r10,lsr#1 236 ldr r12,[sp,#80+4] 237 eor r3,r3,r10,lsl#31 238 eor r4,r4,r9,lsl#31 239 eor r3,r3,r9,lsr#8 240 eor r4,r4,r10,lsr#8 241 eor r3,r3,r10,lsl#24 242 eor r4,r4,r9,lsl#24 243 eor r3,r3,r9,lsr#7 244 eor r4,r4,r10,lsr#7 245 eor r3,r3,r10,lsl#25 246 247 @ sigma1(x) (ROTR((x),19) ^ ROTR((x),61) ^ ((x)>>6)) 248 @ LO lo>>19^hi<<13 ^ hi>>29^lo<<3 ^ lo>>6^hi<<26 249 @ HI hi>>19^lo<<13 ^ lo>>29^hi<<3 ^ hi>>6 250 mov r9,r11,lsr#19 251 mov r10,r12,lsr#19 252 eor r9,r9,r12,lsl#13 253 eor r10,r10,r11,lsl#13 254 eor r9,r9,r12,lsr#29 255 eor r10,r10,r11,lsr#29 256 eor r9,r9,r11,lsl#3 257 eor r10,r10,r12,lsl#3 258 eor r9,r9,r11,lsr#6 259 eor r10,r10,r12,lsr#6 260 ldr r11,[sp,#120+0] 261 eor r9,r9,r12,lsl#26 262 263 ldr r12,[sp,#120+4] 264 adds r3,r3,r9 265 ldr r9,[sp,#192+0] 266 adc r4,r4,r10 267 268 ldr r10,[sp,#192+4] 269 adds r3,r3,r11 270 adc r4,r4,r12 271 adds r3,r3,r9 272 adc r4,r4,r10 273 @ Sigma1(x) (ROTR((x),14) ^ ROTR((x),18) ^ ROTR((x),41)) 274 @ LO lo>>14^hi<<18 ^ lo>>18^hi<<14 ^ hi>>9^lo<<23 275 @ HI hi>>14^lo<<18 ^ hi>>18^lo<<14 ^ lo>>9^hi<<23 276 mov r9,r7,lsr#14 277 str r3,[sp,#64+0] 278 mov r10,r8,lsr#14 279 str r4,[sp,#64+4] 280 eor r9,r9,r8,lsl#18 281 ldr r11,[sp,#56+0] @ h.lo 282 eor r10,r10,r7,lsl#18 283 ldr r12,[sp,#56+4] @ h.hi 284 eor r9,r9,r7,lsr#18 285 eor r10,r10,r8,lsr#18 286 eor r9,r9,r8,lsl#14 287 eor r10,r10,r7,lsl#14 288 eor r9,r9,r8,lsr#9 289 eor r10,r10,r7,lsr#9 290 eor r9,r9,r7,lsl#23 291 eor r10,r10,r8,lsl#23 @ Sigma1(e) 292 adds r3,r3,r9 293 ldr r9,[sp,#40+0] @ f.lo 294 adc r4,r4,r10 @ T += Sigma1(e) 295 ldr r10,[sp,#40+4] @ f.hi 296 adds r3,r3,r11 297 ldr r11,[sp,#48+0] @ g.lo 298 adc r4,r4,r12 @ T += h 299 ldr r12,[sp,#48+4] @ g.hi 300 301 eor r9,r9,r11 302 str r7,[sp,#32+0] 303 eor r10,r10,r12 304 str r8,[sp,#32+4] 305 and r9,r9,r7 306 str r5,[sp,#0+0] 307 and r10,r10,r8 308 str r6,[sp,#0+4] 309 eor r9,r9,r11 310 ldr r11,[r14,#LO] @ K[i].lo 311 eor r10,r10,r12 @ Ch(e,f,g) 312 ldr r12,[r14,#HI] @ K[i].hi 313 314 adds r3,r3,r9 315 ldr r7,[sp,#24+0] @ d.lo 316 adc r4,r4,r10 @ T += Ch(e,f,g) 317 ldr r8,[sp,#24+4] @ d.hi 318 adds r3,r3,r11 319 and r9,r11,#0xff 320 adc r4,r4,r12 @ T += K[i] 321 adds r7,r7,r3 322 ldr r11,[sp,#8+0] @ b.lo 323 adc r8,r8,r4 @ d += T 324 teq r9,#23 325 326 ldr r12,[sp,#16+0] @ c.lo 327 orreq r14,r14,#1 328 @ Sigma0(x) (ROTR((x),28) ^ ROTR((x),34) ^ ROTR((x),39)) 329 @ LO lo>>28^hi<<4 ^ hi>>2^lo<<30 ^ hi>>7^lo<<25 330 @ HI hi>>28^lo<<4 ^ lo>>2^hi<<30 ^ lo>>7^hi<<25 331 mov r9,r5,lsr#28 332 mov r10,r6,lsr#28 333 eor r9,r9,r6,lsl#4 334 eor r10,r10,r5,lsl#4 335 eor r9,r9,r6,lsr#2 336 eor r10,r10,r5,lsr#2 337 eor r9,r9,r5,lsl#30 338 eor r10,r10,r6,lsl#30 339 eor r9,r9,r6,lsr#7 340 eor r10,r10,r5,lsr#7 341 eor r9,r9,r5,lsl#25 342 eor r10,r10,r6,lsl#25 @ Sigma0(a) 343 adds r3,r3,r9 344 and r9,r5,r11 345 adc r4,r4,r10 @ T += Sigma0(a) 346 347 ldr r10,[sp,#8+4] @ b.hi 348 orr r5,r5,r11 349 ldr r11,[sp,#16+4] @ c.hi 350 and r5,r5,r12 351 and r12,r6,r10 352 orr r6,r6,r10 353 orr r5,r5,r9 @ Maj(a,b,c).lo 354 and r6,r6,r11 355 adds r5,r5,r3 356 orr r6,r6,r12 @ Maj(a,b,c).hi 357 sub sp,sp,#8 358 adc r6,r6,r4 @ h += T 359 tst r14,#1 360 add r14,r14,#8 361 ldreq r9,[sp,#184+0] 362 ldreq r10,[sp,#184+4] 363 beq .L16_79 364 bic r14,r14,#1 365 366 ldr r3,[sp,#8+0] 367 ldr r4,[sp,#8+4] 368 ldr r9, [r0,#0+LO] 369 ldr r10, [r0,#0+HI] 370 ldr r11, [r0,#8+LO] 371 ldr r12, [r0,#8+HI] 372 adds r9,r5,r9 373 str r9, [r0,#0+LO] 374 adc r10,r6,r10 375 str r10, [r0,#0+HI] 376 adds r11,r3,r11 377 str r11, [r0,#8+LO] 378 adc r12,r4,r12 379 str r12, [r0,#8+HI] 380 381 ldr r5,[sp,#16+0] 382 ldr r6,[sp,#16+4] 383 ldr r3,[sp,#24+0] 384 ldr r4,[sp,#24+4] 385 ldr r9, [r0,#16+LO] 386 ldr r10, [r0,#16+HI] 387 ldr r11, [r0,#24+LO] 388 ldr r12, [r0,#24+HI] 389 adds r9,r5,r9 390 str r9, [r0,#16+LO] 391 adc r10,r6,r10 392 str r10, [r0,#16+HI] 393 adds r11,r3,r11 394 str r11, [r0,#24+LO] 395 adc r12,r4,r12 396 str r12, [r0,#24+HI] 397 398 ldr r3,[sp,#40+0] 399 ldr r4,[sp,#40+4] 400 ldr r9, [r0,#32+LO] 401 ldr r10, [r0,#32+HI] 402 ldr r11, [r0,#40+LO] 403 ldr r12, [r0,#40+HI] 404 adds r7,r7,r9 405 str r7,[r0,#32+LO] 406 adc r8,r8,r10 407 str r8,[r0,#32+HI] 408 adds r11,r3,r11 409 str r11, [r0,#40+LO] 410 adc r12,r4,r12 411 str r12, [r0,#40+HI] 412 413 ldr r5,[sp,#48+0] 414 ldr r6,[sp,#48+4] 415 ldr r3,[sp,#56+0] 416 ldr r4,[sp,#56+4] 417 ldr r9, [r0,#48+LO] 418 ldr r10, [r0,#48+HI] 419 ldr r11, [r0,#56+LO] 420 ldr r12, [r0,#56+HI] 421 adds r9,r5,r9 422 str r9, [r0,#48+LO] 423 adc r10,r6,r10 424 str r10, [r0,#48+HI] 425 adds r11,r3,r11 426 str r11, [r0,#56+LO] 427 adc r12,r4,r12 428 str r12, [r0,#56+HI] 429 430 add sp,sp,#640 431 sub r14,r14,#640 432 433 teq r1,r2 434 bne .Loop 435 436 add sp,sp,#8*9 @ destroy frame 437#if __ARM_ARCH__>=5 438 ldmia sp!,{r4-r12,pc} 439#else 440 ldmia sp!,{r4-r12,lr} 441 tst lr,#1 442 moveq pc,lr @ be binary compatible with V4, yet 443 .word 0xe12fff1e @ interoperable with Thumb ISA:-) 444#endif 445#if __ARM_MAX_ARCH__>=7 446.arch armv7-a 447.fpu neon 448 449.align 4 450.LNEON: 451 dmb @ errata #451034 on early Cortex A8 452 vstmdb sp!,{d8-d15} @ ABI specification says so 453 sub r3,r3,#672 @ K512 454 vldmia r0,{d16-d23} @ load context 455.Loop_neon: 456 vshr.u64 d24,d20,#14 @ 0 457#if 0<16 458 vld1.64 {d0},[r1]! @ handles unaligned 459#endif 460 vshr.u64 d25,d20,#18 461#if 0>0 462 vadd.i64 d16,d30 @ h+=Maj from the past 463#endif 464 vshr.u64 d26,d20,#41 465 vld1.64 {d28},[r3,:64]! @ K[i++] 466 vsli.64 d24,d20,#50 467 vsli.64 d25,d20,#46 468 vmov d29,d20 469 vsli.64 d26,d20,#23 470#if 0<16 && defined(__ARMEL__) 471 vrev64.8 d0,d0 472#endif 473 veor d25,d24 474 vbsl d29,d21,d22 @ Ch(e,f,g) 475 vshr.u64 d24,d16,#28 476 veor d26,d25 @ Sigma1(e) 477 vadd.i64 d27,d29,d23 478 vshr.u64 d25,d16,#34 479 vsli.64 d24,d16,#36 480 vadd.i64 d27,d26 481 vshr.u64 d26,d16,#39 482 vadd.i64 d28,d0 483 vsli.64 d25,d16,#30 484 veor d30,d16,d17 485 vsli.64 d26,d16,#25 486 veor d23,d24,d25 487 vadd.i64 d27,d28 488 vbsl d30,d18,d17 @ Maj(a,b,c) 489 veor d23,d26 @ Sigma0(a) 490 vadd.i64 d19,d27 491 vadd.i64 d30,d27 492 @ vadd.i64 d23,d30 493 vshr.u64 d24,d19,#14 @ 1 494#if 1<16 495 vld1.64 {d1},[r1]! @ handles unaligned 496#endif 497 vshr.u64 d25,d19,#18 498#if 1>0 499 vadd.i64 d23,d30 @ h+=Maj from the past 500#endif 501 vshr.u64 d26,d19,#41 502 vld1.64 {d28},[r3,:64]! @ K[i++] 503 vsli.64 d24,d19,#50 504 vsli.64 d25,d19,#46 505 vmov d29,d19 506 vsli.64 d26,d19,#23 507#if 1<16 && defined(__ARMEL__) 508 vrev64.8 d1,d1 509#endif 510 veor d25,d24 511 vbsl d29,d20,d21 @ Ch(e,f,g) 512 vshr.u64 d24,d23,#28 513 veor d26,d25 @ Sigma1(e) 514 vadd.i64 d27,d29,d22 515 vshr.u64 d25,d23,#34 516 vsli.64 d24,d23,#36 517 vadd.i64 d27,d26 518 vshr.u64 d26,d23,#39 519 vadd.i64 d28,d1 520 vsli.64 d25,d23,#30 521 veor d30,d23,d16 522 vsli.64 d26,d23,#25 523 veor d22,d24,d25 524 vadd.i64 d27,d28 525 vbsl d30,d17,d16 @ Maj(a,b,c) 526 veor d22,d26 @ Sigma0(a) 527 vadd.i64 d18,d27 528 vadd.i64 d30,d27 529 @ vadd.i64 d22,d30 530 vshr.u64 d24,d18,#14 @ 2 531#if 2<16 532 vld1.64 {d2},[r1]! @ handles unaligned 533#endif 534 vshr.u64 d25,d18,#18 535#if 2>0 536 vadd.i64 d22,d30 @ h+=Maj from the past 537#endif 538 vshr.u64 d26,d18,#41 539 vld1.64 {d28},[r3,:64]! @ K[i++] 540 vsli.64 d24,d18,#50 541 vsli.64 d25,d18,#46 542 vmov d29,d18 543 vsli.64 d26,d18,#23 544#if 2<16 && defined(__ARMEL__) 545 vrev64.8 d2,d2 546#endif 547 veor d25,d24 548 vbsl d29,d19,d20 @ Ch(e,f,g) 549 vshr.u64 d24,d22,#28 550 veor d26,d25 @ Sigma1(e) 551 vadd.i64 d27,d29,d21 552 vshr.u64 d25,d22,#34 553 vsli.64 d24,d22,#36 554 vadd.i64 d27,d26 555 vshr.u64 d26,d22,#39 556 vadd.i64 d28,d2 557 vsli.64 d25,d22,#30 558 veor d30,d22,d23 559 vsli.64 d26,d22,#25 560 veor d21,d24,d25 561 vadd.i64 d27,d28 562 vbsl d30,d16,d23 @ Maj(a,b,c) 563 veor d21,d26 @ Sigma0(a) 564 vadd.i64 d17,d27 565 vadd.i64 d30,d27 566 @ vadd.i64 d21,d30 567 vshr.u64 d24,d17,#14 @ 3 568#if 3<16 569 vld1.64 {d3},[r1]! @ handles unaligned 570#endif 571 vshr.u64 d25,d17,#18 572#if 3>0 573 vadd.i64 d21,d30 @ h+=Maj from the past 574#endif 575 vshr.u64 d26,d17,#41 576 vld1.64 {d28},[r3,:64]! @ K[i++] 577 vsli.64 d24,d17,#50 578 vsli.64 d25,d17,#46 579 vmov d29,d17 580 vsli.64 d26,d17,#23 581#if 3<16 && defined(__ARMEL__) 582 vrev64.8 d3,d3 583#endif 584 veor d25,d24 585 vbsl d29,d18,d19 @ Ch(e,f,g) 586 vshr.u64 d24,d21,#28 587 veor d26,d25 @ Sigma1(e) 588 vadd.i64 d27,d29,d20 589 vshr.u64 d25,d21,#34 590 vsli.64 d24,d21,#36 591 vadd.i64 d27,d26 592 vshr.u64 d26,d21,#39 593 vadd.i64 d28,d3 594 vsli.64 d25,d21,#30 595 veor d30,d21,d22 596 vsli.64 d26,d21,#25 597 veor d20,d24,d25 598 vadd.i64 d27,d28 599 vbsl d30,d23,d22 @ Maj(a,b,c) 600 veor d20,d26 @ Sigma0(a) 601 vadd.i64 d16,d27 602 vadd.i64 d30,d27 603 @ vadd.i64 d20,d30 604 vshr.u64 d24,d16,#14 @ 4 605#if 4<16 606 vld1.64 {d4},[r1]! @ handles unaligned 607#endif 608 vshr.u64 d25,d16,#18 609#if 4>0 610 vadd.i64 d20,d30 @ h+=Maj from the past 611#endif 612 vshr.u64 d26,d16,#41 613 vld1.64 {d28},[r3,:64]! @ K[i++] 614 vsli.64 d24,d16,#50 615 vsli.64 d25,d16,#46 616 vmov d29,d16 617 vsli.64 d26,d16,#23 618#if 4<16 && defined(__ARMEL__) 619 vrev64.8 d4,d4 620#endif 621 veor d25,d24 622 vbsl d29,d17,d18 @ Ch(e,f,g) 623 vshr.u64 d24,d20,#28 624 veor d26,d25 @ Sigma1(e) 625 vadd.i64 d27,d29,d19 626 vshr.u64 d25,d20,#34 627 vsli.64 d24,d20,#36 628 vadd.i64 d27,d26 629 vshr.u64 d26,d20,#39 630 vadd.i64 d28,d4 631 vsli.64 d25,d20,#30 632 veor d30,d20,d21 633 vsli.64 d26,d20,#25 634 veor d19,d24,d25 635 vadd.i64 d27,d28 636 vbsl d30,d22,d21 @ Maj(a,b,c) 637 veor d19,d26 @ Sigma0(a) 638 vadd.i64 d23,d27 639 vadd.i64 d30,d27 640 @ vadd.i64 d19,d30 641 vshr.u64 d24,d23,#14 @ 5 642#if 5<16 643 vld1.64 {d5},[r1]! @ handles unaligned 644#endif 645 vshr.u64 d25,d23,#18 646#if 5>0 647 vadd.i64 d19,d30 @ h+=Maj from the past 648#endif 649 vshr.u64 d26,d23,#41 650 vld1.64 {d28},[r3,:64]! @ K[i++] 651 vsli.64 d24,d23,#50 652 vsli.64 d25,d23,#46 653 vmov d29,d23 654 vsli.64 d26,d23,#23 655#if 5<16 && defined(__ARMEL__) 656 vrev64.8 d5,d5 657#endif 658 veor d25,d24 659 vbsl d29,d16,d17 @ Ch(e,f,g) 660 vshr.u64 d24,d19,#28 661 veor d26,d25 @ Sigma1(e) 662 vadd.i64 d27,d29,d18 663 vshr.u64 d25,d19,#34 664 vsli.64 d24,d19,#36 665 vadd.i64 d27,d26 666 vshr.u64 d26,d19,#39 667 vadd.i64 d28,d5 668 vsli.64 d25,d19,#30 669 veor d30,d19,d20 670 vsli.64 d26,d19,#25 671 veor d18,d24,d25 672 vadd.i64 d27,d28 673 vbsl d30,d21,d20 @ Maj(a,b,c) 674 veor d18,d26 @ Sigma0(a) 675 vadd.i64 d22,d27 676 vadd.i64 d30,d27 677 @ vadd.i64 d18,d30 678 vshr.u64 d24,d22,#14 @ 6 679#if 6<16 680 vld1.64 {d6},[r1]! @ handles unaligned 681#endif 682 vshr.u64 d25,d22,#18 683#if 6>0 684 vadd.i64 d18,d30 @ h+=Maj from the past 685#endif 686 vshr.u64 d26,d22,#41 687 vld1.64 {d28},[r3,:64]! @ K[i++] 688 vsli.64 d24,d22,#50 689 vsli.64 d25,d22,#46 690 vmov d29,d22 691 vsli.64 d26,d22,#23 692#if 6<16 && defined(__ARMEL__) 693 vrev64.8 d6,d6 694#endif 695 veor d25,d24 696 vbsl d29,d23,d16 @ Ch(e,f,g) 697 vshr.u64 d24,d18,#28 698 veor d26,d25 @ Sigma1(e) 699 vadd.i64 d27,d29,d17 700 vshr.u64 d25,d18,#34 701 vsli.64 d24,d18,#36 702 vadd.i64 d27,d26 703 vshr.u64 d26,d18,#39 704 vadd.i64 d28,d6 705 vsli.64 d25,d18,#30 706 veor d30,d18,d19 707 vsli.64 d26,d18,#25 708 veor d17,d24,d25 709 vadd.i64 d27,d28 710 vbsl d30,d20,d19 @ Maj(a,b,c) 711 veor d17,d26 @ Sigma0(a) 712 vadd.i64 d21,d27 713 vadd.i64 d30,d27 714 @ vadd.i64 d17,d30 715 vshr.u64 d24,d21,#14 @ 7 716#if 7<16 717 vld1.64 {d7},[r1]! @ handles unaligned 718#endif 719 vshr.u64 d25,d21,#18 720#if 7>0 721 vadd.i64 d17,d30 @ h+=Maj from the past 722#endif 723 vshr.u64 d26,d21,#41 724 vld1.64 {d28},[r3,:64]! @ K[i++] 725 vsli.64 d24,d21,#50 726 vsli.64 d25,d21,#46 727 vmov d29,d21 728 vsli.64 d26,d21,#23 729#if 7<16 && defined(__ARMEL__) 730 vrev64.8 d7,d7 731#endif 732 veor d25,d24 733 vbsl d29,d22,d23 @ Ch(e,f,g) 734 vshr.u64 d24,d17,#28 735 veor d26,d25 @ Sigma1(e) 736 vadd.i64 d27,d29,d16 737 vshr.u64 d25,d17,#34 738 vsli.64 d24,d17,#36 739 vadd.i64 d27,d26 740 vshr.u64 d26,d17,#39 741 vadd.i64 d28,d7 742 vsli.64 d25,d17,#30 743 veor d30,d17,d18 744 vsli.64 d26,d17,#25 745 veor d16,d24,d25 746 vadd.i64 d27,d28 747 vbsl d30,d19,d18 @ Maj(a,b,c) 748 veor d16,d26 @ Sigma0(a) 749 vadd.i64 d20,d27 750 vadd.i64 d30,d27 751 @ vadd.i64 d16,d30 752 vshr.u64 d24,d20,#14 @ 8 753#if 8<16 754 vld1.64 {d8},[r1]! @ handles unaligned 755#endif 756 vshr.u64 d25,d20,#18 757#if 8>0 758 vadd.i64 d16,d30 @ h+=Maj from the past 759#endif 760 vshr.u64 d26,d20,#41 761 vld1.64 {d28},[r3,:64]! @ K[i++] 762 vsli.64 d24,d20,#50 763 vsli.64 d25,d20,#46 764 vmov d29,d20 765 vsli.64 d26,d20,#23 766#if 8<16 && defined(__ARMEL__) 767 vrev64.8 d8,d8 768#endif 769 veor d25,d24 770 vbsl d29,d21,d22 @ Ch(e,f,g) 771 vshr.u64 d24,d16,#28 772 veor d26,d25 @ Sigma1(e) 773 vadd.i64 d27,d29,d23 774 vshr.u64 d25,d16,#34 775 vsli.64 d24,d16,#36 776 vadd.i64 d27,d26 777 vshr.u64 d26,d16,#39 778 vadd.i64 d28,d8 779 vsli.64 d25,d16,#30 780 veor d30,d16,d17 781 vsli.64 d26,d16,#25 782 veor d23,d24,d25 783 vadd.i64 d27,d28 784 vbsl d30,d18,d17 @ Maj(a,b,c) 785 veor d23,d26 @ Sigma0(a) 786 vadd.i64 d19,d27 787 vadd.i64 d30,d27 788 @ vadd.i64 d23,d30 789 vshr.u64 d24,d19,#14 @ 9 790#if 9<16 791 vld1.64 {d9},[r1]! @ handles unaligned 792#endif 793 vshr.u64 d25,d19,#18 794#if 9>0 795 vadd.i64 d23,d30 @ h+=Maj from the past 796#endif 797 vshr.u64 d26,d19,#41 798 vld1.64 {d28},[r3,:64]! @ K[i++] 799 vsli.64 d24,d19,#50 800 vsli.64 d25,d19,#46 801 vmov d29,d19 802 vsli.64 d26,d19,#23 803#if 9<16 && defined(__ARMEL__) 804 vrev64.8 d9,d9 805#endif 806 veor d25,d24 807 vbsl d29,d20,d21 @ Ch(e,f,g) 808 vshr.u64 d24,d23,#28 809 veor d26,d25 @ Sigma1(e) 810 vadd.i64 d27,d29,d22 811 vshr.u64 d25,d23,#34 812 vsli.64 d24,d23,#36 813 vadd.i64 d27,d26 814 vshr.u64 d26,d23,#39 815 vadd.i64 d28,d9 816 vsli.64 d25,d23,#30 817 veor d30,d23,d16 818 vsli.64 d26,d23,#25 819 veor d22,d24,d25 820 vadd.i64 d27,d28 821 vbsl d30,d17,d16 @ Maj(a,b,c) 822 veor d22,d26 @ Sigma0(a) 823 vadd.i64 d18,d27 824 vadd.i64 d30,d27 825 @ vadd.i64 d22,d30 826 vshr.u64 d24,d18,#14 @ 10 827#if 10<16 828 vld1.64 {d10},[r1]! @ handles unaligned 829#endif 830 vshr.u64 d25,d18,#18 831#if 10>0 832 vadd.i64 d22,d30 @ h+=Maj from the past 833#endif 834 vshr.u64 d26,d18,#41 835 vld1.64 {d28},[r3,:64]! @ K[i++] 836 vsli.64 d24,d18,#50 837 vsli.64 d25,d18,#46 838 vmov d29,d18 839 vsli.64 d26,d18,#23 840#if 10<16 && defined(__ARMEL__) 841 vrev64.8 d10,d10 842#endif 843 veor d25,d24 844 vbsl d29,d19,d20 @ Ch(e,f,g) 845 vshr.u64 d24,d22,#28 846 veor d26,d25 @ Sigma1(e) 847 vadd.i64 d27,d29,d21 848 vshr.u64 d25,d22,#34 849 vsli.64 d24,d22,#36 850 vadd.i64 d27,d26 851 vshr.u64 d26,d22,#39 852 vadd.i64 d28,d10 853 vsli.64 d25,d22,#30 854 veor d30,d22,d23 855 vsli.64 d26,d22,#25 856 veor d21,d24,d25 857 vadd.i64 d27,d28 858 vbsl d30,d16,d23 @ Maj(a,b,c) 859 veor d21,d26 @ Sigma0(a) 860 vadd.i64 d17,d27 861 vadd.i64 d30,d27 862 @ vadd.i64 d21,d30 863 vshr.u64 d24,d17,#14 @ 11 864#if 11<16 865 vld1.64 {d11},[r1]! @ handles unaligned 866#endif 867 vshr.u64 d25,d17,#18 868#if 11>0 869 vadd.i64 d21,d30 @ h+=Maj from the past 870#endif 871 vshr.u64 d26,d17,#41 872 vld1.64 {d28},[r3,:64]! @ K[i++] 873 vsli.64 d24,d17,#50 874 vsli.64 d25,d17,#46 875 vmov d29,d17 876 vsli.64 d26,d17,#23 877#if 11<16 && defined(__ARMEL__) 878 vrev64.8 d11,d11 879#endif 880 veor d25,d24 881 vbsl d29,d18,d19 @ Ch(e,f,g) 882 vshr.u64 d24,d21,#28 883 veor d26,d25 @ Sigma1(e) 884 vadd.i64 d27,d29,d20 885 vshr.u64 d25,d21,#34 886 vsli.64 d24,d21,#36 887 vadd.i64 d27,d26 888 vshr.u64 d26,d21,#39 889 vadd.i64 d28,d11 890 vsli.64 d25,d21,#30 891 veor d30,d21,d22 892 vsli.64 d26,d21,#25 893 veor d20,d24,d25 894 vadd.i64 d27,d28 895 vbsl d30,d23,d22 @ Maj(a,b,c) 896 veor d20,d26 @ Sigma0(a) 897 vadd.i64 d16,d27 898 vadd.i64 d30,d27 899 @ vadd.i64 d20,d30 900 vshr.u64 d24,d16,#14 @ 12 901#if 12<16 902 vld1.64 {d12},[r1]! @ handles unaligned 903#endif 904 vshr.u64 d25,d16,#18 905#if 12>0 906 vadd.i64 d20,d30 @ h+=Maj from the past 907#endif 908 vshr.u64 d26,d16,#41 909 vld1.64 {d28},[r3,:64]! @ K[i++] 910 vsli.64 d24,d16,#50 911 vsli.64 d25,d16,#46 912 vmov d29,d16 913 vsli.64 d26,d16,#23 914#if 12<16 && defined(__ARMEL__) 915 vrev64.8 d12,d12 916#endif 917 veor d25,d24 918 vbsl d29,d17,d18 @ Ch(e,f,g) 919 vshr.u64 d24,d20,#28 920 veor d26,d25 @ Sigma1(e) 921 vadd.i64 d27,d29,d19 922 vshr.u64 d25,d20,#34 923 vsli.64 d24,d20,#36 924 vadd.i64 d27,d26 925 vshr.u64 d26,d20,#39 926 vadd.i64 d28,d12 927 vsli.64 d25,d20,#30 928 veor d30,d20,d21 929 vsli.64 d26,d20,#25 930 veor d19,d24,d25 931 vadd.i64 d27,d28 932 vbsl d30,d22,d21 @ Maj(a,b,c) 933 veor d19,d26 @ Sigma0(a) 934 vadd.i64 d23,d27 935 vadd.i64 d30,d27 936 @ vadd.i64 d19,d30 937 vshr.u64 d24,d23,#14 @ 13 938#if 13<16 939 vld1.64 {d13},[r1]! @ handles unaligned 940#endif 941 vshr.u64 d25,d23,#18 942#if 13>0 943 vadd.i64 d19,d30 @ h+=Maj from the past 944#endif 945 vshr.u64 d26,d23,#41 946 vld1.64 {d28},[r3,:64]! @ K[i++] 947 vsli.64 d24,d23,#50 948 vsli.64 d25,d23,#46 949 vmov d29,d23 950 vsli.64 d26,d23,#23 951#if 13<16 && defined(__ARMEL__) 952 vrev64.8 d13,d13 953#endif 954 veor d25,d24 955 vbsl d29,d16,d17 @ Ch(e,f,g) 956 vshr.u64 d24,d19,#28 957 veor d26,d25 @ Sigma1(e) 958 vadd.i64 d27,d29,d18 959 vshr.u64 d25,d19,#34 960 vsli.64 d24,d19,#36 961 vadd.i64 d27,d26 962 vshr.u64 d26,d19,#39 963 vadd.i64 d28,d13 964 vsli.64 d25,d19,#30 965 veor d30,d19,d20 966 vsli.64 d26,d19,#25 967 veor d18,d24,d25 968 vadd.i64 d27,d28 969 vbsl d30,d21,d20 @ Maj(a,b,c) 970 veor d18,d26 @ Sigma0(a) 971 vadd.i64 d22,d27 972 vadd.i64 d30,d27 973 @ vadd.i64 d18,d30 974 vshr.u64 d24,d22,#14 @ 14 975#if 14<16 976 vld1.64 {d14},[r1]! @ handles unaligned 977#endif 978 vshr.u64 d25,d22,#18 979#if 14>0 980 vadd.i64 d18,d30 @ h+=Maj from the past 981#endif 982 vshr.u64 d26,d22,#41 983 vld1.64 {d28},[r3,:64]! @ K[i++] 984 vsli.64 d24,d22,#50 985 vsli.64 d25,d22,#46 986 vmov d29,d22 987 vsli.64 d26,d22,#23 988#if 14<16 && defined(__ARMEL__) 989 vrev64.8 d14,d14 990#endif 991 veor d25,d24 992 vbsl d29,d23,d16 @ Ch(e,f,g) 993 vshr.u64 d24,d18,#28 994 veor d26,d25 @ Sigma1(e) 995 vadd.i64 d27,d29,d17 996 vshr.u64 d25,d18,#34 997 vsli.64 d24,d18,#36 998 vadd.i64 d27,d26 999 vshr.u64 d26,d18,#39 1000 vadd.i64 d28,d14 1001 vsli.64 d25,d18,#30 1002 veor d30,d18,d19 1003 vsli.64 d26,d18,#25 1004 veor d17,d24,d25 1005 vadd.i64 d27,d28 1006 vbsl d30,d20,d19 @ Maj(a,b,c) 1007 veor d17,d26 @ Sigma0(a) 1008 vadd.i64 d21,d27 1009 vadd.i64 d30,d27 1010 @ vadd.i64 d17,d30 1011 vshr.u64 d24,d21,#14 @ 15 1012#if 15<16 1013 vld1.64 {d15},[r1]! @ handles unaligned 1014#endif 1015 vshr.u64 d25,d21,#18 1016#if 15>0 1017 vadd.i64 d17,d30 @ h+=Maj from the past 1018#endif 1019 vshr.u64 d26,d21,#41 1020 vld1.64 {d28},[r3,:64]! @ K[i++] 1021 vsli.64 d24,d21,#50 1022 vsli.64 d25,d21,#46 1023 vmov d29,d21 1024 vsli.64 d26,d21,#23 1025#if 15<16 && defined(__ARMEL__) 1026 vrev64.8 d15,d15 1027#endif 1028 veor d25,d24 1029 vbsl d29,d22,d23 @ Ch(e,f,g) 1030 vshr.u64 d24,d17,#28 1031 veor d26,d25 @ Sigma1(e) 1032 vadd.i64 d27,d29,d16 1033 vshr.u64 d25,d17,#34 1034 vsli.64 d24,d17,#36 1035 vadd.i64 d27,d26 1036 vshr.u64 d26,d17,#39 1037 vadd.i64 d28,d15 1038 vsli.64 d25,d17,#30 1039 veor d30,d17,d18 1040 vsli.64 d26,d17,#25 1041 veor d16,d24,d25 1042 vadd.i64 d27,d28 1043 vbsl d30,d19,d18 @ Maj(a,b,c) 1044 veor d16,d26 @ Sigma0(a) 1045 vadd.i64 d20,d27 1046 vadd.i64 d30,d27 1047 @ vadd.i64 d16,d30 1048 mov r12,#4 1049.L16_79_neon: 1050 subs r12,#1 1051 vshr.u64 q12,q7,#19 1052 vshr.u64 q13,q7,#61 1053 vadd.i64 d16,d30 @ h+=Maj from the past 1054 vshr.u64 q15,q7,#6 1055 vsli.64 q12,q7,#45 1056 vext.8 q14,q0,q1,#8 @ X[i+1] 1057 vsli.64 q13,q7,#3 1058 veor q15,q12 1059 vshr.u64 q12,q14,#1 1060 veor q15,q13 @ sigma1(X[i+14]) 1061 vshr.u64 q13,q14,#8 1062 vadd.i64 q0,q15 1063 vshr.u64 q15,q14,#7 1064 vsli.64 q12,q14,#63 1065 vsli.64 q13,q14,#56 1066 vext.8 q14,q4,q5,#8 @ X[i+9] 1067 veor q15,q12 1068 vshr.u64 d24,d20,#14 @ from NEON_00_15 1069 vadd.i64 q0,q14 1070 vshr.u64 d25,d20,#18 @ from NEON_00_15 1071 veor q15,q13 @ sigma0(X[i+1]) 1072 vshr.u64 d26,d20,#41 @ from NEON_00_15 1073 vadd.i64 q0,q15 1074 vld1.64 {d28},[r3,:64]! @ K[i++] 1075 vsli.64 d24,d20,#50 1076 vsli.64 d25,d20,#46 1077 vmov d29,d20 1078 vsli.64 d26,d20,#23 1079#if 16<16 && defined(__ARMEL__) 1080 vrev64.8 , 1081#endif 1082 veor d25,d24 1083 vbsl d29,d21,d22 @ Ch(e,f,g) 1084 vshr.u64 d24,d16,#28 1085 veor d26,d25 @ Sigma1(e) 1086 vadd.i64 d27,d29,d23 1087 vshr.u64 d25,d16,#34 1088 vsli.64 d24,d16,#36 1089 vadd.i64 d27,d26 1090 vshr.u64 d26,d16,#39 1091 vadd.i64 d28,d0 1092 vsli.64 d25,d16,#30 1093 veor d30,d16,d17 1094 vsli.64 d26,d16,#25 1095 veor d23,d24,d25 1096 vadd.i64 d27,d28 1097 vbsl d30,d18,d17 @ Maj(a,b,c) 1098 veor d23,d26 @ Sigma0(a) 1099 vadd.i64 d19,d27 1100 vadd.i64 d30,d27 1101 @ vadd.i64 d23,d30 1102 vshr.u64 d24,d19,#14 @ 17 1103#if 17<16 1104 vld1.64 {d1},[r1]! @ handles unaligned 1105#endif 1106 vshr.u64 d25,d19,#18 1107#if 17>0 1108 vadd.i64 d23,d30 @ h+=Maj from the past 1109#endif 1110 vshr.u64 d26,d19,#41 1111 vld1.64 {d28},[r3,:64]! @ K[i++] 1112 vsli.64 d24,d19,#50 1113 vsli.64 d25,d19,#46 1114 vmov d29,d19 1115 vsli.64 d26,d19,#23 1116#if 17<16 && defined(__ARMEL__) 1117 vrev64.8 , 1118#endif 1119 veor d25,d24 1120 vbsl d29,d20,d21 @ Ch(e,f,g) 1121 vshr.u64 d24,d23,#28 1122 veor d26,d25 @ Sigma1(e) 1123 vadd.i64 d27,d29,d22 1124 vshr.u64 d25,d23,#34 1125 vsli.64 d24,d23,#36 1126 vadd.i64 d27,d26 1127 vshr.u64 d26,d23,#39 1128 vadd.i64 d28,d1 1129 vsli.64 d25,d23,#30 1130 veor d30,d23,d16 1131 vsli.64 d26,d23,#25 1132 veor d22,d24,d25 1133 vadd.i64 d27,d28 1134 vbsl d30,d17,d16 @ Maj(a,b,c) 1135 veor d22,d26 @ Sigma0(a) 1136 vadd.i64 d18,d27 1137 vadd.i64 d30,d27 1138 @ vadd.i64 d22,d30 1139 vshr.u64 q12,q0,#19 1140 vshr.u64 q13,q0,#61 1141 vadd.i64 d22,d30 @ h+=Maj from the past 1142 vshr.u64 q15,q0,#6 1143 vsli.64 q12,q0,#45 1144 vext.8 q14,q1,q2,#8 @ X[i+1] 1145 vsli.64 q13,q0,#3 1146 veor q15,q12 1147 vshr.u64 q12,q14,#1 1148 veor q15,q13 @ sigma1(X[i+14]) 1149 vshr.u64 q13,q14,#8 1150 vadd.i64 q1,q15 1151 vshr.u64 q15,q14,#7 1152 vsli.64 q12,q14,#63 1153 vsli.64 q13,q14,#56 1154 vext.8 q14,q5,q6,#8 @ X[i+9] 1155 veor q15,q12 1156 vshr.u64 d24,d18,#14 @ from NEON_00_15 1157 vadd.i64 q1,q14 1158 vshr.u64 d25,d18,#18 @ from NEON_00_15 1159 veor q15,q13 @ sigma0(X[i+1]) 1160 vshr.u64 d26,d18,#41 @ from NEON_00_15 1161 vadd.i64 q1,q15 1162 vld1.64 {d28},[r3,:64]! @ K[i++] 1163 vsli.64 d24,d18,#50 1164 vsli.64 d25,d18,#46 1165 vmov d29,d18 1166 vsli.64 d26,d18,#23 1167#if 18<16 && defined(__ARMEL__) 1168 vrev64.8 , 1169#endif 1170 veor d25,d24 1171 vbsl d29,d19,d20 @ Ch(e,f,g) 1172 vshr.u64 d24,d22,#28 1173 veor d26,d25 @ Sigma1(e) 1174 vadd.i64 d27,d29,d21 1175 vshr.u64 d25,d22,#34 1176 vsli.64 d24,d22,#36 1177 vadd.i64 d27,d26 1178 vshr.u64 d26,d22,#39 1179 vadd.i64 d28,d2 1180 vsli.64 d25,d22,#30 1181 veor d30,d22,d23 1182 vsli.64 d26,d22,#25 1183 veor d21,d24,d25 1184 vadd.i64 d27,d28 1185 vbsl d30,d16,d23 @ Maj(a,b,c) 1186 veor d21,d26 @ Sigma0(a) 1187 vadd.i64 d17,d27 1188 vadd.i64 d30,d27 1189 @ vadd.i64 d21,d30 1190 vshr.u64 d24,d17,#14 @ 19 1191#if 19<16 1192 vld1.64 {d3},[r1]! @ handles unaligned 1193#endif 1194 vshr.u64 d25,d17,#18 1195#if 19>0 1196 vadd.i64 d21,d30 @ h+=Maj from the past 1197#endif 1198 vshr.u64 d26,d17,#41 1199 vld1.64 {d28},[r3,:64]! @ K[i++] 1200 vsli.64 d24,d17,#50 1201 vsli.64 d25,d17,#46 1202 vmov d29,d17 1203 vsli.64 d26,d17,#23 1204#if 19<16 && defined(__ARMEL__) 1205 vrev64.8 , 1206#endif 1207 veor d25,d24 1208 vbsl d29,d18,d19 @ Ch(e,f,g) 1209 vshr.u64 d24,d21,#28 1210 veor d26,d25 @ Sigma1(e) 1211 vadd.i64 d27,d29,d20 1212 vshr.u64 d25,d21,#34 1213 vsli.64 d24,d21,#36 1214 vadd.i64 d27,d26 1215 vshr.u64 d26,d21,#39 1216 vadd.i64 d28,d3 1217 vsli.64 d25,d21,#30 1218 veor d30,d21,d22 1219 vsli.64 d26,d21,#25 1220 veor d20,d24,d25 1221 vadd.i64 d27,d28 1222 vbsl d30,d23,d22 @ Maj(a,b,c) 1223 veor d20,d26 @ Sigma0(a) 1224 vadd.i64 d16,d27 1225 vadd.i64 d30,d27 1226 @ vadd.i64 d20,d30 1227 vshr.u64 q12,q1,#19 1228 vshr.u64 q13,q1,#61 1229 vadd.i64 d20,d30 @ h+=Maj from the past 1230 vshr.u64 q15,q1,#6 1231 vsli.64 q12,q1,#45 1232 vext.8 q14,q2,q3,#8 @ X[i+1] 1233 vsli.64 q13,q1,#3 1234 veor q15,q12 1235 vshr.u64 q12,q14,#1 1236 veor q15,q13 @ sigma1(X[i+14]) 1237 vshr.u64 q13,q14,#8 1238 vadd.i64 q2,q15 1239 vshr.u64 q15,q14,#7 1240 vsli.64 q12,q14,#63 1241 vsli.64 q13,q14,#56 1242 vext.8 q14,q6,q7,#8 @ X[i+9] 1243 veor q15,q12 1244 vshr.u64 d24,d16,#14 @ from NEON_00_15 1245 vadd.i64 q2,q14 1246 vshr.u64 d25,d16,#18 @ from NEON_00_15 1247 veor q15,q13 @ sigma0(X[i+1]) 1248 vshr.u64 d26,d16,#41 @ from NEON_00_15 1249 vadd.i64 q2,q15 1250 vld1.64 {d28},[r3,:64]! @ K[i++] 1251 vsli.64 d24,d16,#50 1252 vsli.64 d25,d16,#46 1253 vmov d29,d16 1254 vsli.64 d26,d16,#23 1255#if 20<16 && defined(__ARMEL__) 1256 vrev64.8 , 1257#endif 1258 veor d25,d24 1259 vbsl d29,d17,d18 @ Ch(e,f,g) 1260 vshr.u64 d24,d20,#28 1261 veor d26,d25 @ Sigma1(e) 1262 vadd.i64 d27,d29,d19 1263 vshr.u64 d25,d20,#34 1264 vsli.64 d24,d20,#36 1265 vadd.i64 d27,d26 1266 vshr.u64 d26,d20,#39 1267 vadd.i64 d28,d4 1268 vsli.64 d25,d20,#30 1269 veor d30,d20,d21 1270 vsli.64 d26,d20,#25 1271 veor d19,d24,d25 1272 vadd.i64 d27,d28 1273 vbsl d30,d22,d21 @ Maj(a,b,c) 1274 veor d19,d26 @ Sigma0(a) 1275 vadd.i64 d23,d27 1276 vadd.i64 d30,d27 1277 @ vadd.i64 d19,d30 1278 vshr.u64 d24,d23,#14 @ 21 1279#if 21<16 1280 vld1.64 {d5},[r1]! @ handles unaligned 1281#endif 1282 vshr.u64 d25,d23,#18 1283#if 21>0 1284 vadd.i64 d19,d30 @ h+=Maj from the past 1285#endif 1286 vshr.u64 d26,d23,#41 1287 vld1.64 {d28},[r3,:64]! @ K[i++] 1288 vsli.64 d24,d23,#50 1289 vsli.64 d25,d23,#46 1290 vmov d29,d23 1291 vsli.64 d26,d23,#23 1292#if 21<16 && defined(__ARMEL__) 1293 vrev64.8 , 1294#endif 1295 veor d25,d24 1296 vbsl d29,d16,d17 @ Ch(e,f,g) 1297 vshr.u64 d24,d19,#28 1298 veor d26,d25 @ Sigma1(e) 1299 vadd.i64 d27,d29,d18 1300 vshr.u64 d25,d19,#34 1301 vsli.64 d24,d19,#36 1302 vadd.i64 d27,d26 1303 vshr.u64 d26,d19,#39 1304 vadd.i64 d28,d5 1305 vsli.64 d25,d19,#30 1306 veor d30,d19,d20 1307 vsli.64 d26,d19,#25 1308 veor d18,d24,d25 1309 vadd.i64 d27,d28 1310 vbsl d30,d21,d20 @ Maj(a,b,c) 1311 veor d18,d26 @ Sigma0(a) 1312 vadd.i64 d22,d27 1313 vadd.i64 d30,d27 1314 @ vadd.i64 d18,d30 1315 vshr.u64 q12,q2,#19 1316 vshr.u64 q13,q2,#61 1317 vadd.i64 d18,d30 @ h+=Maj from the past 1318 vshr.u64 q15,q2,#6 1319 vsli.64 q12,q2,#45 1320 vext.8 q14,q3,q4,#8 @ X[i+1] 1321 vsli.64 q13,q2,#3 1322 veor q15,q12 1323 vshr.u64 q12,q14,#1 1324 veor q15,q13 @ sigma1(X[i+14]) 1325 vshr.u64 q13,q14,#8 1326 vadd.i64 q3,q15 1327 vshr.u64 q15,q14,#7 1328 vsli.64 q12,q14,#63 1329 vsli.64 q13,q14,#56 1330 vext.8 q14,q7,q0,#8 @ X[i+9] 1331 veor q15,q12 1332 vshr.u64 d24,d22,#14 @ from NEON_00_15 1333 vadd.i64 q3,q14 1334 vshr.u64 d25,d22,#18 @ from NEON_00_15 1335 veor q15,q13 @ sigma0(X[i+1]) 1336 vshr.u64 d26,d22,#41 @ from NEON_00_15 1337 vadd.i64 q3,q15 1338 vld1.64 {d28},[r3,:64]! @ K[i++] 1339 vsli.64 d24,d22,#50 1340 vsli.64 d25,d22,#46 1341 vmov d29,d22 1342 vsli.64 d26,d22,#23 1343#if 22<16 && defined(__ARMEL__) 1344 vrev64.8 , 1345#endif 1346 veor d25,d24 1347 vbsl d29,d23,d16 @ Ch(e,f,g) 1348 vshr.u64 d24,d18,#28 1349 veor d26,d25 @ Sigma1(e) 1350 vadd.i64 d27,d29,d17 1351 vshr.u64 d25,d18,#34 1352 vsli.64 d24,d18,#36 1353 vadd.i64 d27,d26 1354 vshr.u64 d26,d18,#39 1355 vadd.i64 d28,d6 1356 vsli.64 d25,d18,#30 1357 veor d30,d18,d19 1358 vsli.64 d26,d18,#25 1359 veor d17,d24,d25 1360 vadd.i64 d27,d28 1361 vbsl d30,d20,d19 @ Maj(a,b,c) 1362 veor d17,d26 @ Sigma0(a) 1363 vadd.i64 d21,d27 1364 vadd.i64 d30,d27 1365 @ vadd.i64 d17,d30 1366 vshr.u64 d24,d21,#14 @ 23 1367#if 23<16 1368 vld1.64 {d7},[r1]! @ handles unaligned 1369#endif 1370 vshr.u64 d25,d21,#18 1371#if 23>0 1372 vadd.i64 d17,d30 @ h+=Maj from the past 1373#endif 1374 vshr.u64 d26,d21,#41 1375 vld1.64 {d28},[r3,:64]! @ K[i++] 1376 vsli.64 d24,d21,#50 1377 vsli.64 d25,d21,#46 1378 vmov d29,d21 1379 vsli.64 d26,d21,#23 1380#if 23<16 && defined(__ARMEL__) 1381 vrev64.8 , 1382#endif 1383 veor d25,d24 1384 vbsl d29,d22,d23 @ Ch(e,f,g) 1385 vshr.u64 d24,d17,#28 1386 veor d26,d25 @ Sigma1(e) 1387 vadd.i64 d27,d29,d16 1388 vshr.u64 d25,d17,#34 1389 vsli.64 d24,d17,#36 1390 vadd.i64 d27,d26 1391 vshr.u64 d26,d17,#39 1392 vadd.i64 d28,d7 1393 vsli.64 d25,d17,#30 1394 veor d30,d17,d18 1395 vsli.64 d26,d17,#25 1396 veor d16,d24,d25 1397 vadd.i64 d27,d28 1398 vbsl d30,d19,d18 @ Maj(a,b,c) 1399 veor d16,d26 @ Sigma0(a) 1400 vadd.i64 d20,d27 1401 vadd.i64 d30,d27 1402 @ vadd.i64 d16,d30 1403 vshr.u64 q12,q3,#19 1404 vshr.u64 q13,q3,#61 1405 vadd.i64 d16,d30 @ h+=Maj from the past 1406 vshr.u64 q15,q3,#6 1407 vsli.64 q12,q3,#45 1408 vext.8 q14,q4,q5,#8 @ X[i+1] 1409 vsli.64 q13,q3,#3 1410 veor q15,q12 1411 vshr.u64 q12,q14,#1 1412 veor q15,q13 @ sigma1(X[i+14]) 1413 vshr.u64 q13,q14,#8 1414 vadd.i64 q4,q15 1415 vshr.u64 q15,q14,#7 1416 vsli.64 q12,q14,#63 1417 vsli.64 q13,q14,#56 1418 vext.8 q14,q0,q1,#8 @ X[i+9] 1419 veor q15,q12 1420 vshr.u64 d24,d20,#14 @ from NEON_00_15 1421 vadd.i64 q4,q14 1422 vshr.u64 d25,d20,#18 @ from NEON_00_15 1423 veor q15,q13 @ sigma0(X[i+1]) 1424 vshr.u64 d26,d20,#41 @ from NEON_00_15 1425 vadd.i64 q4,q15 1426 vld1.64 {d28},[r3,:64]! @ K[i++] 1427 vsli.64 d24,d20,#50 1428 vsli.64 d25,d20,#46 1429 vmov d29,d20 1430 vsli.64 d26,d20,#23 1431#if 24<16 && defined(__ARMEL__) 1432 vrev64.8 , 1433#endif 1434 veor d25,d24 1435 vbsl d29,d21,d22 @ Ch(e,f,g) 1436 vshr.u64 d24,d16,#28 1437 veor d26,d25 @ Sigma1(e) 1438 vadd.i64 d27,d29,d23 1439 vshr.u64 d25,d16,#34 1440 vsli.64 d24,d16,#36 1441 vadd.i64 d27,d26 1442 vshr.u64 d26,d16,#39 1443 vadd.i64 d28,d8 1444 vsli.64 d25,d16,#30 1445 veor d30,d16,d17 1446 vsli.64 d26,d16,#25 1447 veor d23,d24,d25 1448 vadd.i64 d27,d28 1449 vbsl d30,d18,d17 @ Maj(a,b,c) 1450 veor d23,d26 @ Sigma0(a) 1451 vadd.i64 d19,d27 1452 vadd.i64 d30,d27 1453 @ vadd.i64 d23,d30 1454 vshr.u64 d24,d19,#14 @ 25 1455#if 25<16 1456 vld1.64 {d9},[r1]! @ handles unaligned 1457#endif 1458 vshr.u64 d25,d19,#18 1459#if 25>0 1460 vadd.i64 d23,d30 @ h+=Maj from the past 1461#endif 1462 vshr.u64 d26,d19,#41 1463 vld1.64 {d28},[r3,:64]! @ K[i++] 1464 vsli.64 d24,d19,#50 1465 vsli.64 d25,d19,#46 1466 vmov d29,d19 1467 vsli.64 d26,d19,#23 1468#if 25<16 && defined(__ARMEL__) 1469 vrev64.8 , 1470#endif 1471 veor d25,d24 1472 vbsl d29,d20,d21 @ Ch(e,f,g) 1473 vshr.u64 d24,d23,#28 1474 veor d26,d25 @ Sigma1(e) 1475 vadd.i64 d27,d29,d22 1476 vshr.u64 d25,d23,#34 1477 vsli.64 d24,d23,#36 1478 vadd.i64 d27,d26 1479 vshr.u64 d26,d23,#39 1480 vadd.i64 d28,d9 1481 vsli.64 d25,d23,#30 1482 veor d30,d23,d16 1483 vsli.64 d26,d23,#25 1484 veor d22,d24,d25 1485 vadd.i64 d27,d28 1486 vbsl d30,d17,d16 @ Maj(a,b,c) 1487 veor d22,d26 @ Sigma0(a) 1488 vadd.i64 d18,d27 1489 vadd.i64 d30,d27 1490 @ vadd.i64 d22,d30 1491 vshr.u64 q12,q4,#19 1492 vshr.u64 q13,q4,#61 1493 vadd.i64 d22,d30 @ h+=Maj from the past 1494 vshr.u64 q15,q4,#6 1495 vsli.64 q12,q4,#45 1496 vext.8 q14,q5,q6,#8 @ X[i+1] 1497 vsli.64 q13,q4,#3 1498 veor q15,q12 1499 vshr.u64 q12,q14,#1 1500 veor q15,q13 @ sigma1(X[i+14]) 1501 vshr.u64 q13,q14,#8 1502 vadd.i64 q5,q15 1503 vshr.u64 q15,q14,#7 1504 vsli.64 q12,q14,#63 1505 vsli.64 q13,q14,#56 1506 vext.8 q14,q1,q2,#8 @ X[i+9] 1507 veor q15,q12 1508 vshr.u64 d24,d18,#14 @ from NEON_00_15 1509 vadd.i64 q5,q14 1510 vshr.u64 d25,d18,#18 @ from NEON_00_15 1511 veor q15,q13 @ sigma0(X[i+1]) 1512 vshr.u64 d26,d18,#41 @ from NEON_00_15 1513 vadd.i64 q5,q15 1514 vld1.64 {d28},[r3,:64]! @ K[i++] 1515 vsli.64 d24,d18,#50 1516 vsli.64 d25,d18,#46 1517 vmov d29,d18 1518 vsli.64 d26,d18,#23 1519#if 26<16 && defined(__ARMEL__) 1520 vrev64.8 , 1521#endif 1522 veor d25,d24 1523 vbsl d29,d19,d20 @ Ch(e,f,g) 1524 vshr.u64 d24,d22,#28 1525 veor d26,d25 @ Sigma1(e) 1526 vadd.i64 d27,d29,d21 1527 vshr.u64 d25,d22,#34 1528 vsli.64 d24,d22,#36 1529 vadd.i64 d27,d26 1530 vshr.u64 d26,d22,#39 1531 vadd.i64 d28,d10 1532 vsli.64 d25,d22,#30 1533 veor d30,d22,d23 1534 vsli.64 d26,d22,#25 1535 veor d21,d24,d25 1536 vadd.i64 d27,d28 1537 vbsl d30,d16,d23 @ Maj(a,b,c) 1538 veor d21,d26 @ Sigma0(a) 1539 vadd.i64 d17,d27 1540 vadd.i64 d30,d27 1541 @ vadd.i64 d21,d30 1542 vshr.u64 d24,d17,#14 @ 27 1543#if 27<16 1544 vld1.64 {d11},[r1]! @ handles unaligned 1545#endif 1546 vshr.u64 d25,d17,#18 1547#if 27>0 1548 vadd.i64 d21,d30 @ h+=Maj from the past 1549#endif 1550 vshr.u64 d26,d17,#41 1551 vld1.64 {d28},[r3,:64]! @ K[i++] 1552 vsli.64 d24,d17,#50 1553 vsli.64 d25,d17,#46 1554 vmov d29,d17 1555 vsli.64 d26,d17,#23 1556#if 27<16 && defined(__ARMEL__) 1557 vrev64.8 , 1558#endif 1559 veor d25,d24 1560 vbsl d29,d18,d19 @ Ch(e,f,g) 1561 vshr.u64 d24,d21,#28 1562 veor d26,d25 @ Sigma1(e) 1563 vadd.i64 d27,d29,d20 1564 vshr.u64 d25,d21,#34 1565 vsli.64 d24,d21,#36 1566 vadd.i64 d27,d26 1567 vshr.u64 d26,d21,#39 1568 vadd.i64 d28,d11 1569 vsli.64 d25,d21,#30 1570 veor d30,d21,d22 1571 vsli.64 d26,d21,#25 1572 veor d20,d24,d25 1573 vadd.i64 d27,d28 1574 vbsl d30,d23,d22 @ Maj(a,b,c) 1575 veor d20,d26 @ Sigma0(a) 1576 vadd.i64 d16,d27 1577 vadd.i64 d30,d27 1578 @ vadd.i64 d20,d30 1579 vshr.u64 q12,q5,#19 1580 vshr.u64 q13,q5,#61 1581 vadd.i64 d20,d30 @ h+=Maj from the past 1582 vshr.u64 q15,q5,#6 1583 vsli.64 q12,q5,#45 1584 vext.8 q14,q6,q7,#8 @ X[i+1] 1585 vsli.64 q13,q5,#3 1586 veor q15,q12 1587 vshr.u64 q12,q14,#1 1588 veor q15,q13 @ sigma1(X[i+14]) 1589 vshr.u64 q13,q14,#8 1590 vadd.i64 q6,q15 1591 vshr.u64 q15,q14,#7 1592 vsli.64 q12,q14,#63 1593 vsli.64 q13,q14,#56 1594 vext.8 q14,q2,q3,#8 @ X[i+9] 1595 veor q15,q12 1596 vshr.u64 d24,d16,#14 @ from NEON_00_15 1597 vadd.i64 q6,q14 1598 vshr.u64 d25,d16,#18 @ from NEON_00_15 1599 veor q15,q13 @ sigma0(X[i+1]) 1600 vshr.u64 d26,d16,#41 @ from NEON_00_15 1601 vadd.i64 q6,q15 1602 vld1.64 {d28},[r3,:64]! @ K[i++] 1603 vsli.64 d24,d16,#50 1604 vsli.64 d25,d16,#46 1605 vmov d29,d16 1606 vsli.64 d26,d16,#23 1607#if 28<16 && defined(__ARMEL__) 1608 vrev64.8 , 1609#endif 1610 veor d25,d24 1611 vbsl d29,d17,d18 @ Ch(e,f,g) 1612 vshr.u64 d24,d20,#28 1613 veor d26,d25 @ Sigma1(e) 1614 vadd.i64 d27,d29,d19 1615 vshr.u64 d25,d20,#34 1616 vsli.64 d24,d20,#36 1617 vadd.i64 d27,d26 1618 vshr.u64 d26,d20,#39 1619 vadd.i64 d28,d12 1620 vsli.64 d25,d20,#30 1621 veor d30,d20,d21 1622 vsli.64 d26,d20,#25 1623 veor d19,d24,d25 1624 vadd.i64 d27,d28 1625 vbsl d30,d22,d21 @ Maj(a,b,c) 1626 veor d19,d26 @ Sigma0(a) 1627 vadd.i64 d23,d27 1628 vadd.i64 d30,d27 1629 @ vadd.i64 d19,d30 1630 vshr.u64 d24,d23,#14 @ 29 1631#if 29<16 1632 vld1.64 {d13},[r1]! @ handles unaligned 1633#endif 1634 vshr.u64 d25,d23,#18 1635#if 29>0 1636 vadd.i64 d19,d30 @ h+=Maj from the past 1637#endif 1638 vshr.u64 d26,d23,#41 1639 vld1.64 {d28},[r3,:64]! @ K[i++] 1640 vsli.64 d24,d23,#50 1641 vsli.64 d25,d23,#46 1642 vmov d29,d23 1643 vsli.64 d26,d23,#23 1644#if 29<16 && defined(__ARMEL__) 1645 vrev64.8 , 1646#endif 1647 veor d25,d24 1648 vbsl d29,d16,d17 @ Ch(e,f,g) 1649 vshr.u64 d24,d19,#28 1650 veor d26,d25 @ Sigma1(e) 1651 vadd.i64 d27,d29,d18 1652 vshr.u64 d25,d19,#34 1653 vsli.64 d24,d19,#36 1654 vadd.i64 d27,d26 1655 vshr.u64 d26,d19,#39 1656 vadd.i64 d28,d13 1657 vsli.64 d25,d19,#30 1658 veor d30,d19,d20 1659 vsli.64 d26,d19,#25 1660 veor d18,d24,d25 1661 vadd.i64 d27,d28 1662 vbsl d30,d21,d20 @ Maj(a,b,c) 1663 veor d18,d26 @ Sigma0(a) 1664 vadd.i64 d22,d27 1665 vadd.i64 d30,d27 1666 @ vadd.i64 d18,d30 1667 vshr.u64 q12,q6,#19 1668 vshr.u64 q13,q6,#61 1669 vadd.i64 d18,d30 @ h+=Maj from the past 1670 vshr.u64 q15,q6,#6 1671 vsli.64 q12,q6,#45 1672 vext.8 q14,q7,q0,#8 @ X[i+1] 1673 vsli.64 q13,q6,#3 1674 veor q15,q12 1675 vshr.u64 q12,q14,#1 1676 veor q15,q13 @ sigma1(X[i+14]) 1677 vshr.u64 q13,q14,#8 1678 vadd.i64 q7,q15 1679 vshr.u64 q15,q14,#7 1680 vsli.64 q12,q14,#63 1681 vsli.64 q13,q14,#56 1682 vext.8 q14,q3,q4,#8 @ X[i+9] 1683 veor q15,q12 1684 vshr.u64 d24,d22,#14 @ from NEON_00_15 1685 vadd.i64 q7,q14 1686 vshr.u64 d25,d22,#18 @ from NEON_00_15 1687 veor q15,q13 @ sigma0(X[i+1]) 1688 vshr.u64 d26,d22,#41 @ from NEON_00_15 1689 vadd.i64 q7,q15 1690 vld1.64 {d28},[r3,:64]! @ K[i++] 1691 vsli.64 d24,d22,#50 1692 vsli.64 d25,d22,#46 1693 vmov d29,d22 1694 vsli.64 d26,d22,#23 1695#if 30<16 && defined(__ARMEL__) 1696 vrev64.8 , 1697#endif 1698 veor d25,d24 1699 vbsl d29,d23,d16 @ Ch(e,f,g) 1700 vshr.u64 d24,d18,#28 1701 veor d26,d25 @ Sigma1(e) 1702 vadd.i64 d27,d29,d17 1703 vshr.u64 d25,d18,#34 1704 vsli.64 d24,d18,#36 1705 vadd.i64 d27,d26 1706 vshr.u64 d26,d18,#39 1707 vadd.i64 d28,d14 1708 vsli.64 d25,d18,#30 1709 veor d30,d18,d19 1710 vsli.64 d26,d18,#25 1711 veor d17,d24,d25 1712 vadd.i64 d27,d28 1713 vbsl d30,d20,d19 @ Maj(a,b,c) 1714 veor d17,d26 @ Sigma0(a) 1715 vadd.i64 d21,d27 1716 vadd.i64 d30,d27 1717 @ vadd.i64 d17,d30 1718 vshr.u64 d24,d21,#14 @ 31 1719#if 31<16 1720 vld1.64 {d15},[r1]! @ handles unaligned 1721#endif 1722 vshr.u64 d25,d21,#18 1723#if 31>0 1724 vadd.i64 d17,d30 @ h+=Maj from the past 1725#endif 1726 vshr.u64 d26,d21,#41 1727 vld1.64 {d28},[r3,:64]! @ K[i++] 1728 vsli.64 d24,d21,#50 1729 vsli.64 d25,d21,#46 1730 vmov d29,d21 1731 vsli.64 d26,d21,#23 1732#if 31<16 && defined(__ARMEL__) 1733 vrev64.8 , 1734#endif 1735 veor d25,d24 1736 vbsl d29,d22,d23 @ Ch(e,f,g) 1737 vshr.u64 d24,d17,#28 1738 veor d26,d25 @ Sigma1(e) 1739 vadd.i64 d27,d29,d16 1740 vshr.u64 d25,d17,#34 1741 vsli.64 d24,d17,#36 1742 vadd.i64 d27,d26 1743 vshr.u64 d26,d17,#39 1744 vadd.i64 d28,d15 1745 vsli.64 d25,d17,#30 1746 veor d30,d17,d18 1747 vsli.64 d26,d17,#25 1748 veor d16,d24,d25 1749 vadd.i64 d27,d28 1750 vbsl d30,d19,d18 @ Maj(a,b,c) 1751 veor d16,d26 @ Sigma0(a) 1752 vadd.i64 d20,d27 1753 vadd.i64 d30,d27 1754 @ vadd.i64 d16,d30 1755 bne .L16_79_neon 1756 1757 vadd.i64 d16,d30 @ h+=Maj from the past 1758 vldmia r0,{d24-d31} @ load context to temp 1759 vadd.i64 q8,q12 @ vectorized accumulate 1760 vadd.i64 q9,q13 1761 vadd.i64 q10,q14 1762 vadd.i64 q11,q15 1763 vstmia r0,{d16-d23} @ save context 1764 teq r1,r2 1765 sub r3,#640 @ rewind K512 1766 bne .Loop_neon 1767 1768 vldmia sp!,{d8-d15} @ epilogue 1769 RET @ .word 0xe12fff1e 1770#endif 1771.size sha512_block_data_order,.-sha512_block_data_order 1772.asciz "SHA512 block transform for ARMv4/NEON, CRYPTOGAMS by <appro@openssl.org>" 1773.align 2 1774#if __ARM_MAX_ARCH__>=7 1775.comm OPENSSL_armcap_P,4,4 1776#endif 1777