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