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