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