Path: blob/main/sys/crypto/openssl/arm/sha512-armv4.S
39482 views
/* Do not modify. This file is auto-generated from sha512-armv4.pl. */1@ Copyright 2007-2023 The OpenSSL Project Authors. All Rights Reserved.2@3@ Licensed under the Apache License 2.0 (the "License"). You may not use4@ this file except in compliance with the License. You can obtain a copy5@ in the file LICENSE in the source distribution or at6@ https://www.openssl.org/source/license.html789@ ====================================================================10@ Written by Andy Polyakov <appro@openssl.org> for the OpenSSL11@ project. The module is, however, dual licensed under OpenSSL and12@ CRYPTOGAMS licenses depending on where you obtain it. For further13@ details see http://www.openssl.org/~appro/cryptogams/.14@15@ Permission to use under GPL terms is granted.16@ ====================================================================1718@ SHA512 block procedure for ARMv4. September 2007.1920@ This code is ~4.5 (four and a half) times faster than code generated21@ by gcc 3.4 and it spends ~72 clock cycles per byte [on single-issue22@ Xscale PXA250 core].23@24@ July 2010.25@26@ Rescheduling for dual-issue pipeline resulted in 6% improvement on27@ Cortex A8 core and ~40 cycles per processed byte.2829@ February 2011.30@31@ Profiler-assisted and platform-specific optimization resulted in 7%32@ improvement on Coxtex A8 core and ~38 cycles per byte.3334@ March 2011.35@36@ Add NEON implementation. On Cortex A8 it was measured to process37@ one byte in 23.3 cycles or ~60% faster than integer-only code.3839@ August 2012.40@41@ Improve NEON performance by 12% on Snapdragon S4. In absolute42@ terms it's 22.6 cycles per byte, which is disappointing result.43@ Technical writers asserted that 3-way S4 pipeline can sustain44@ multiple NEON instructions per cycle, but dual NEON issue could45@ not be observed, see http://www.openssl.org/~appro/Snapdragon-S4.html46@ for further details. On side note Cortex-A15 processes one byte in47@ 16 cycles.4849@ Byte order [in]dependence. =========================================50@51@ Originally caller was expected to maintain specific *dword* order in52@ h[0-7], namely with most significant dword at *lower* address, which53@ was reflected in below two parameters as 0 and 4. Now caller is54@ expected to maintain native byte order for whole 64-bit values.55#ifndef __KERNEL__56# include "arm_arch.h"57# define VFP_ABI_PUSH vstmdb sp!,{d8-d15}58# define VFP_ABI_POP vldmia sp!,{d8-d15}59#else60# define __ARM_ARCH__ __LINUX_ARM_ARCH__61# define __ARM_MAX_ARCH__ 762# define VFP_ABI_PUSH63# define VFP_ABI_POP64#endif6566#ifdef __ARMEL__67# define LO 068# define HI 469# define WORD64(hi0,lo0,hi1,lo1) .word lo0,hi0, lo1,hi170#else71# define HI 072# define LO 473# define WORD64(hi0,lo0,hi1,lo1) .word hi0,lo0, hi1,lo174#endif7576#if defined(__thumb2__)77.syntax unified78.thumb79# define adrl adr80#else81.code 3282#endif8384.text8586.type K512,%object87.align 588K512:89WORD64(0x428a2f98,0xd728ae22, 0x71374491,0x23ef65cd)90WORD64(0xb5c0fbcf,0xec4d3b2f, 0xe9b5dba5,0x8189dbbc)91WORD64(0x3956c25b,0xf348b538, 0x59f111f1,0xb605d019)92WORD64(0x923f82a4,0xaf194f9b, 0xab1c5ed5,0xda6d8118)93WORD64(0xd807aa98,0xa3030242, 0x12835b01,0x45706fbe)94WORD64(0x243185be,0x4ee4b28c, 0x550c7dc3,0xd5ffb4e2)95WORD64(0x72be5d74,0xf27b896f, 0x80deb1fe,0x3b1696b1)96WORD64(0x9bdc06a7,0x25c71235, 0xc19bf174,0xcf692694)97WORD64(0xe49b69c1,0x9ef14ad2, 0xefbe4786,0x384f25e3)98WORD64(0x0fc19dc6,0x8b8cd5b5, 0x240ca1cc,0x77ac9c65)99WORD64(0x2de92c6f,0x592b0275, 0x4a7484aa,0x6ea6e483)100WORD64(0x5cb0a9dc,0xbd41fbd4, 0x76f988da,0x831153b5)101WORD64(0x983e5152,0xee66dfab, 0xa831c66d,0x2db43210)102WORD64(0xb00327c8,0x98fb213f, 0xbf597fc7,0xbeef0ee4)103WORD64(0xc6e00bf3,0x3da88fc2, 0xd5a79147,0x930aa725)104WORD64(0x06ca6351,0xe003826f, 0x14292967,0x0a0e6e70)105WORD64(0x27b70a85,0x46d22ffc, 0x2e1b2138,0x5c26c926)106WORD64(0x4d2c6dfc,0x5ac42aed, 0x53380d13,0x9d95b3df)107WORD64(0x650a7354,0x8baf63de, 0x766a0abb,0x3c77b2a8)108WORD64(0x81c2c92e,0x47edaee6, 0x92722c85,0x1482353b)109WORD64(0xa2bfe8a1,0x4cf10364, 0xa81a664b,0xbc423001)110WORD64(0xc24b8b70,0xd0f89791, 0xc76c51a3,0x0654be30)111WORD64(0xd192e819,0xd6ef5218, 0xd6990624,0x5565a910)112WORD64(0xf40e3585,0x5771202a, 0x106aa070,0x32bbd1b8)113WORD64(0x19a4c116,0xb8d2d0c8, 0x1e376c08,0x5141ab53)114WORD64(0x2748774c,0xdf8eeb99, 0x34b0bcb5,0xe19b48a8)115WORD64(0x391c0cb3,0xc5c95a63, 0x4ed8aa4a,0xe3418acb)116WORD64(0x5b9cca4f,0x7763e373, 0x682e6ff3,0xd6b2b8a3)117WORD64(0x748f82ee,0x5defb2fc, 0x78a5636f,0x43172f60)118WORD64(0x84c87814,0xa1f0ab72, 0x8cc70208,0x1a6439ec)119WORD64(0x90befffa,0x23631e28, 0xa4506ceb,0xde82bde9)120WORD64(0xbef9a3f7,0xb2c67915, 0xc67178f2,0xe372532b)121WORD64(0xca273ece,0xea26619c, 0xd186b8c7,0x21c0c207)122WORD64(0xeada7dd6,0xcde0eb1e, 0xf57d4f7f,0xee6ed178)123WORD64(0x06f067aa,0x72176fba, 0x0a637dc5,0xa2c898a6)124WORD64(0x113f9804,0xbef90dae, 0x1b710b35,0x131c471b)125WORD64(0x28db77f5,0x23047d84, 0x32caab7b,0x40c72493)126WORD64(0x3c9ebe0a,0x15c9bebc, 0x431d67c4,0x9c100d4c)127WORD64(0x4cc5d4be,0xcb3e42b6, 0x597f299c,0xfc657e2a)128WORD64(0x5fcb6fab,0x3ad6faec, 0x6c44198c,0x4a475817)129.size K512,.-K512130#if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__)131.LOPENSSL_armcap:132# ifdef _WIN32133.word OPENSSL_armcap_P134# else135.word OPENSSL_armcap_P-.Lsha512_block_data_order136# endif137.skip 32-4138#else139.skip 32140#endif141142.globl sha512_block_data_order143.type sha512_block_data_order,%function144sha512_block_data_order:145.Lsha512_block_data_order:146#if __ARM_ARCH__<7 && !defined(__thumb2__)147sub r3,pc,#8 @ sha512_block_data_order148#else149adr r3,.Lsha512_block_data_order150#endif151#if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__)152ldr r12,.LOPENSSL_armcap153# if !defined(_WIN32)154ldr r12,[r3,r12] @ OPENSSL_armcap_P155# endif156# if defined(__APPLE__) || defined(_WIN32)157ldr r12,[r12]158# endif159tst r12,#ARMV7_NEON160bne .LNEON161#endif162add r2,r1,r2,lsl#7 @ len to point at the end of inp163stmdb sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr}164sub r14,r3,#672 @ K512165sub sp,sp,#9*8166167ldr r7,[r0,#32+LO]168ldr r8,[r0,#32+HI]169ldr r9, [r0,#48+LO]170ldr r10, [r0,#48+HI]171ldr r11, [r0,#56+LO]172ldr r12, [r0,#56+HI]173.Loop:174str r9, [sp,#48+0]175str r10, [sp,#48+4]176str r11, [sp,#56+0]177str r12, [sp,#56+4]178ldr r5,[r0,#0+LO]179ldr r6,[r0,#0+HI]180ldr r3,[r0,#8+LO]181ldr r4,[r0,#8+HI]182ldr r9, [r0,#16+LO]183ldr r10, [r0,#16+HI]184ldr r11, [r0,#24+LO]185ldr r12, [r0,#24+HI]186str r3,[sp,#8+0]187str r4,[sp,#8+4]188str r9, [sp,#16+0]189str r10, [sp,#16+4]190str r11, [sp,#24+0]191str r12, [sp,#24+4]192ldr r3,[r0,#40+LO]193ldr r4,[r0,#40+HI]194str r3,[sp,#40+0]195str r4,[sp,#40+4]196197.L00_15:198#if __ARM_ARCH__<7199ldrb r3,[r1,#7]200ldrb r9, [r1,#6]201ldrb r10, [r1,#5]202ldrb r11, [r1,#4]203ldrb r4,[r1,#3]204ldrb r12, [r1,#2]205orr r3,r3,r9,lsl#8206ldrb r9, [r1,#1]207orr r3,r3,r10,lsl#16208ldrb r10, [r1],#8209orr r3,r3,r11,lsl#24210orr r4,r4,r12,lsl#8211orr r4,r4,r9,lsl#16212orr r4,r4,r10,lsl#24213#else214ldr r3,[r1,#4]215ldr r4,[r1],#8216#ifdef __ARMEL__217rev r3,r3218rev r4,r4219#endif220#endif221@ Sigma1(x) (ROTR((x),14) ^ ROTR((x),18) ^ ROTR((x),41))222@ LO lo>>14^hi<<18 ^ lo>>18^hi<<14 ^ hi>>9^lo<<23223@ HI hi>>14^lo<<18 ^ hi>>18^lo<<14 ^ lo>>9^hi<<23224mov r9,r7,lsr#14225str r3,[sp,#64+0]226mov r10,r8,lsr#14227str r4,[sp,#64+4]228eor r9,r9,r8,lsl#18229ldr r11,[sp,#56+0] @ h.lo230eor r10,r10,r7,lsl#18231ldr r12,[sp,#56+4] @ h.hi232eor r9,r9,r7,lsr#18233eor r10,r10,r8,lsr#18234eor r9,r9,r8,lsl#14235eor r10,r10,r7,lsl#14236eor r9,r9,r8,lsr#9237eor r10,r10,r7,lsr#9238eor r9,r9,r7,lsl#23239eor r10,r10,r8,lsl#23 @ Sigma1(e)240adds r3,r3,r9241ldr r9,[sp,#40+0] @ f.lo242adc r4,r4,r10 @ T += Sigma1(e)243ldr r10,[sp,#40+4] @ f.hi244adds r3,r3,r11245ldr r11,[sp,#48+0] @ g.lo246adc r4,r4,r12 @ T += h247ldr r12,[sp,#48+4] @ g.hi248249eor r9,r9,r11250str r7,[sp,#32+0]251eor r10,r10,r12252str r8,[sp,#32+4]253and r9,r9,r7254str r5,[sp,#0+0]255and r10,r10,r8256str r6,[sp,#0+4]257eor r9,r9,r11258ldr r11,[r14,#LO] @ K[i].lo259eor r10,r10,r12 @ Ch(e,f,g)260ldr r12,[r14,#HI] @ K[i].hi261262adds r3,r3,r9263ldr r7,[sp,#24+0] @ d.lo264adc r4,r4,r10 @ T += Ch(e,f,g)265ldr r8,[sp,#24+4] @ d.hi266adds r3,r3,r11267and r9,r11,#0xff268adc r4,r4,r12 @ T += K[i]269adds r7,r7,r3270ldr r11,[sp,#8+0] @ b.lo271adc r8,r8,r4 @ d += T272teq r9,#148273274ldr r12,[sp,#16+0] @ c.lo275#ifdef __thumb2__276it eq @ Thumb2 thing, sanity check in ARM277#endif278orreq r14,r14,#1279@ Sigma0(x) (ROTR((x),28) ^ ROTR((x),34) ^ ROTR((x),39))280@ LO lo>>28^hi<<4 ^ hi>>2^lo<<30 ^ hi>>7^lo<<25281@ HI hi>>28^lo<<4 ^ lo>>2^hi<<30 ^ lo>>7^hi<<25282mov r9,r5,lsr#28283mov r10,r6,lsr#28284eor r9,r9,r6,lsl#4285eor r10,r10,r5,lsl#4286eor r9,r9,r6,lsr#2287eor r10,r10,r5,lsr#2288eor r9,r9,r5,lsl#30289eor r10,r10,r6,lsl#30290eor r9,r9,r6,lsr#7291eor r10,r10,r5,lsr#7292eor r9,r9,r5,lsl#25293eor r10,r10,r6,lsl#25 @ Sigma0(a)294adds r3,r3,r9295and r9,r5,r11296adc r4,r4,r10 @ T += Sigma0(a)297298ldr r10,[sp,#8+4] @ b.hi299orr r5,r5,r11300ldr r11,[sp,#16+4] @ c.hi301and r5,r5,r12302and r12,r6,r10303orr r6,r6,r10304orr r5,r5,r9 @ Maj(a,b,c).lo305and r6,r6,r11306adds r5,r5,r3307orr r6,r6,r12 @ Maj(a,b,c).hi308sub sp,sp,#8309adc r6,r6,r4 @ h += T310tst r14,#1311add r14,r14,#8312tst r14,#1313beq .L00_15314ldr r9,[sp,#184+0]315ldr r10,[sp,#184+4]316bic r14,r14,#1317.L16_79:318@ sigma0(x) (ROTR((x),1) ^ ROTR((x),8) ^ ((x)>>7))319@ LO lo>>1^hi<<31 ^ lo>>8^hi<<24 ^ lo>>7^hi<<25320@ HI hi>>1^lo<<31 ^ hi>>8^lo<<24 ^ hi>>7321mov r3,r9,lsr#1322ldr r11,[sp,#80+0]323mov r4,r10,lsr#1324ldr r12,[sp,#80+4]325eor r3,r3,r10,lsl#31326eor r4,r4,r9,lsl#31327eor r3,r3,r9,lsr#8328eor r4,r4,r10,lsr#8329eor r3,r3,r10,lsl#24330eor r4,r4,r9,lsl#24331eor r3,r3,r9,lsr#7332eor r4,r4,r10,lsr#7333eor r3,r3,r10,lsl#25334335@ sigma1(x) (ROTR((x),19) ^ ROTR((x),61) ^ ((x)>>6))336@ LO lo>>19^hi<<13 ^ hi>>29^lo<<3 ^ lo>>6^hi<<26337@ HI hi>>19^lo<<13 ^ lo>>29^hi<<3 ^ hi>>6338mov r9,r11,lsr#19339mov r10,r12,lsr#19340eor r9,r9,r12,lsl#13341eor r10,r10,r11,lsl#13342eor r9,r9,r12,lsr#29343eor r10,r10,r11,lsr#29344eor r9,r9,r11,lsl#3345eor r10,r10,r12,lsl#3346eor r9,r9,r11,lsr#6347eor r10,r10,r12,lsr#6348ldr r11,[sp,#120+0]349eor r9,r9,r12,lsl#26350351ldr r12,[sp,#120+4]352adds r3,r3,r9353ldr r9,[sp,#192+0]354adc r4,r4,r10355356ldr r10,[sp,#192+4]357adds r3,r3,r11358adc r4,r4,r12359adds r3,r3,r9360adc r4,r4,r10361@ Sigma1(x) (ROTR((x),14) ^ ROTR((x),18) ^ ROTR((x),41))362@ LO lo>>14^hi<<18 ^ lo>>18^hi<<14 ^ hi>>9^lo<<23363@ HI hi>>14^lo<<18 ^ hi>>18^lo<<14 ^ lo>>9^hi<<23364mov r9,r7,lsr#14365str r3,[sp,#64+0]366mov r10,r8,lsr#14367str r4,[sp,#64+4]368eor r9,r9,r8,lsl#18369ldr r11,[sp,#56+0] @ h.lo370eor r10,r10,r7,lsl#18371ldr r12,[sp,#56+4] @ h.hi372eor r9,r9,r7,lsr#18373eor r10,r10,r8,lsr#18374eor r9,r9,r8,lsl#14375eor r10,r10,r7,lsl#14376eor r9,r9,r8,lsr#9377eor r10,r10,r7,lsr#9378eor r9,r9,r7,lsl#23379eor r10,r10,r8,lsl#23 @ Sigma1(e)380adds r3,r3,r9381ldr r9,[sp,#40+0] @ f.lo382adc r4,r4,r10 @ T += Sigma1(e)383ldr r10,[sp,#40+4] @ f.hi384adds r3,r3,r11385ldr r11,[sp,#48+0] @ g.lo386adc r4,r4,r12 @ T += h387ldr r12,[sp,#48+4] @ g.hi388389eor r9,r9,r11390str r7,[sp,#32+0]391eor r10,r10,r12392str r8,[sp,#32+4]393and r9,r9,r7394str r5,[sp,#0+0]395and r10,r10,r8396str r6,[sp,#0+4]397eor r9,r9,r11398ldr r11,[r14,#LO] @ K[i].lo399eor r10,r10,r12 @ Ch(e,f,g)400ldr r12,[r14,#HI] @ K[i].hi401402adds r3,r3,r9403ldr r7,[sp,#24+0] @ d.lo404adc r4,r4,r10 @ T += Ch(e,f,g)405ldr r8,[sp,#24+4] @ d.hi406adds r3,r3,r11407and r9,r11,#0xff408adc r4,r4,r12 @ T += K[i]409adds r7,r7,r3410ldr r11,[sp,#8+0] @ b.lo411adc r8,r8,r4 @ d += T412teq r9,#23413414ldr r12,[sp,#16+0] @ c.lo415#ifdef __thumb2__416it eq @ Thumb2 thing, sanity check in ARM417#endif418orreq r14,r14,#1419@ Sigma0(x) (ROTR((x),28) ^ ROTR((x),34) ^ ROTR((x),39))420@ LO lo>>28^hi<<4 ^ hi>>2^lo<<30 ^ hi>>7^lo<<25421@ HI hi>>28^lo<<4 ^ lo>>2^hi<<30 ^ lo>>7^hi<<25422mov r9,r5,lsr#28423mov r10,r6,lsr#28424eor r9,r9,r6,lsl#4425eor r10,r10,r5,lsl#4426eor r9,r9,r6,lsr#2427eor r10,r10,r5,lsr#2428eor r9,r9,r5,lsl#30429eor r10,r10,r6,lsl#30430eor r9,r9,r6,lsr#7431eor r10,r10,r5,lsr#7432eor r9,r9,r5,lsl#25433eor r10,r10,r6,lsl#25 @ Sigma0(a)434adds r3,r3,r9435and r9,r5,r11436adc r4,r4,r10 @ T += Sigma0(a)437438ldr r10,[sp,#8+4] @ b.hi439orr r5,r5,r11440ldr r11,[sp,#16+4] @ c.hi441and r5,r5,r12442and r12,r6,r10443orr r6,r6,r10444orr r5,r5,r9 @ Maj(a,b,c).lo445and r6,r6,r11446adds r5,r5,r3447orr r6,r6,r12 @ Maj(a,b,c).hi448sub sp,sp,#8449adc r6,r6,r4 @ h += T450tst r14,#1451add r14,r14,#8452#ifdef __thumb2__453ittt eq @ Thumb2 thing, sanity check in ARM454#endif455ldreq r9,[sp,#184+0]456ldreq r10,[sp,#184+4]457beq .L16_79458bic r14,r14,#1459460ldr r3,[sp,#8+0]461ldr r4,[sp,#8+4]462ldr r9, [r0,#0+LO]463ldr r10, [r0,#0+HI]464ldr r11, [r0,#8+LO]465ldr r12, [r0,#8+HI]466adds r9,r5,r9467str r9, [r0,#0+LO]468adc r10,r6,r10469str r10, [r0,#0+HI]470adds r11,r3,r11471str r11, [r0,#8+LO]472adc r12,r4,r12473str r12, [r0,#8+HI]474475ldr r5,[sp,#16+0]476ldr r6,[sp,#16+4]477ldr r3,[sp,#24+0]478ldr r4,[sp,#24+4]479ldr r9, [r0,#16+LO]480ldr r10, [r0,#16+HI]481ldr r11, [r0,#24+LO]482ldr r12, [r0,#24+HI]483adds r9,r5,r9484str r9, [r0,#16+LO]485adc r10,r6,r10486str r10, [r0,#16+HI]487adds r11,r3,r11488str r11, [r0,#24+LO]489adc r12,r4,r12490str r12, [r0,#24+HI]491492ldr r3,[sp,#40+0]493ldr r4,[sp,#40+4]494ldr r9, [r0,#32+LO]495ldr r10, [r0,#32+HI]496ldr r11, [r0,#40+LO]497ldr r12, [r0,#40+HI]498adds r7,r7,r9499str r7,[r0,#32+LO]500adc r8,r8,r10501str r8,[r0,#32+HI]502adds r11,r3,r11503str r11, [r0,#40+LO]504adc r12,r4,r12505str r12, [r0,#40+HI]506507ldr r5,[sp,#48+0]508ldr r6,[sp,#48+4]509ldr r3,[sp,#56+0]510ldr r4,[sp,#56+4]511ldr r9, [r0,#48+LO]512ldr r10, [r0,#48+HI]513ldr r11, [r0,#56+LO]514ldr r12, [r0,#56+HI]515adds r9,r5,r9516str r9, [r0,#48+LO]517adc r10,r6,r10518str r10, [r0,#48+HI]519adds r11,r3,r11520str r11, [r0,#56+LO]521adc r12,r4,r12522str r12, [r0,#56+HI]523524add sp,sp,#640525sub r14,r14,#640526527teq r1,r2528bne .Loop529530add sp,sp,#8*9 @ destroy frame531#if __ARM_ARCH__>=5532ldmia sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,pc}533#else534ldmia sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr}535tst lr,#1536moveq pc,lr @ be binary compatible with V4, yet537.word 0xe12fff1e @ interoperable with Thumb ISA:-)538#endif539.size sha512_block_data_order,.-sha512_block_data_order540#if __ARM_MAX_ARCH__>=7541.arch armv7-a542.fpu neon543544.globl sha512_block_data_order_neon545.type sha512_block_data_order_neon,%function546.align 4547sha512_block_data_order_neon:548.LNEON:549dmb @ errata #451034 on early Cortex A8550add r2,r1,r2,lsl#7 @ len to point at the end of inp551adr r3,K512552VFP_ABI_PUSH553vldmia r0,{d16,d17,d18,d19,d20,d21,d22,d23} @ load context554.Loop_neon:555vshr.u64 d24,d20,#14 @ 0556#if 0<16557vld1.64 {d0},[r1]! @ handles unaligned558#endif559vshr.u64 d25,d20,#18560#if 0>0561vadd.i64 d16,d30 @ h+=Maj from the past562#endif563vshr.u64 d26,d20,#41564vld1.64 {d28},[r3,:64]! @ K[i++]565vsli.64 d24,d20,#50566vsli.64 d25,d20,#46567vmov d29,d20568vsli.64 d26,d20,#23569#if 0<16 && defined(__ARMEL__)570vrev64.8 d0,d0571#endif572veor d25,d24573vbsl d29,d21,d22 @ Ch(e,f,g)574vshr.u64 d24,d16,#28575veor d26,d25 @ Sigma1(e)576vadd.i64 d27,d29,d23577vshr.u64 d25,d16,#34578vsli.64 d24,d16,#36579vadd.i64 d27,d26580vshr.u64 d26,d16,#39581vadd.i64 d28,d0582vsli.64 d25,d16,#30583veor d30,d16,d17584vsli.64 d26,d16,#25585veor d23,d24,d25586vadd.i64 d27,d28587vbsl d30,d18,d17 @ Maj(a,b,c)588veor d23,d26 @ Sigma0(a)589vadd.i64 d19,d27590vadd.i64 d30,d27591@ vadd.i64 d23,d30592vshr.u64 d24,d19,#14 @ 1593#if 1<16594vld1.64 {d1},[r1]! @ handles unaligned595#endif596vshr.u64 d25,d19,#18597#if 1>0598vadd.i64 d23,d30 @ h+=Maj from the past599#endif600vshr.u64 d26,d19,#41601vld1.64 {d28},[r3,:64]! @ K[i++]602vsli.64 d24,d19,#50603vsli.64 d25,d19,#46604vmov d29,d19605vsli.64 d26,d19,#23606#if 1<16 && defined(__ARMEL__)607vrev64.8 d1,d1608#endif609veor d25,d24610vbsl d29,d20,d21 @ Ch(e,f,g)611vshr.u64 d24,d23,#28612veor d26,d25 @ Sigma1(e)613vadd.i64 d27,d29,d22614vshr.u64 d25,d23,#34615vsli.64 d24,d23,#36616vadd.i64 d27,d26617vshr.u64 d26,d23,#39618vadd.i64 d28,d1619vsli.64 d25,d23,#30620veor d30,d23,d16621vsli.64 d26,d23,#25622veor d22,d24,d25623vadd.i64 d27,d28624vbsl d30,d17,d16 @ Maj(a,b,c)625veor d22,d26 @ Sigma0(a)626vadd.i64 d18,d27627vadd.i64 d30,d27628@ vadd.i64 d22,d30629vshr.u64 d24,d18,#14 @ 2630#if 2<16631vld1.64 {d2},[r1]! @ handles unaligned632#endif633vshr.u64 d25,d18,#18634#if 2>0635vadd.i64 d22,d30 @ h+=Maj from the past636#endif637vshr.u64 d26,d18,#41638vld1.64 {d28},[r3,:64]! @ K[i++]639vsli.64 d24,d18,#50640vsli.64 d25,d18,#46641vmov d29,d18642vsli.64 d26,d18,#23643#if 2<16 && defined(__ARMEL__)644vrev64.8 d2,d2645#endif646veor d25,d24647vbsl d29,d19,d20 @ Ch(e,f,g)648vshr.u64 d24,d22,#28649veor d26,d25 @ Sigma1(e)650vadd.i64 d27,d29,d21651vshr.u64 d25,d22,#34652vsli.64 d24,d22,#36653vadd.i64 d27,d26654vshr.u64 d26,d22,#39655vadd.i64 d28,d2656vsli.64 d25,d22,#30657veor d30,d22,d23658vsli.64 d26,d22,#25659veor d21,d24,d25660vadd.i64 d27,d28661vbsl d30,d16,d23 @ Maj(a,b,c)662veor d21,d26 @ Sigma0(a)663vadd.i64 d17,d27664vadd.i64 d30,d27665@ vadd.i64 d21,d30666vshr.u64 d24,d17,#14 @ 3667#if 3<16668vld1.64 {d3},[r1]! @ handles unaligned669#endif670vshr.u64 d25,d17,#18671#if 3>0672vadd.i64 d21,d30 @ h+=Maj from the past673#endif674vshr.u64 d26,d17,#41675vld1.64 {d28},[r3,:64]! @ K[i++]676vsli.64 d24,d17,#50677vsli.64 d25,d17,#46678vmov d29,d17679vsli.64 d26,d17,#23680#if 3<16 && defined(__ARMEL__)681vrev64.8 d3,d3682#endif683veor d25,d24684vbsl d29,d18,d19 @ Ch(e,f,g)685vshr.u64 d24,d21,#28686veor d26,d25 @ Sigma1(e)687vadd.i64 d27,d29,d20688vshr.u64 d25,d21,#34689vsli.64 d24,d21,#36690vadd.i64 d27,d26691vshr.u64 d26,d21,#39692vadd.i64 d28,d3693vsli.64 d25,d21,#30694veor d30,d21,d22695vsli.64 d26,d21,#25696veor d20,d24,d25697vadd.i64 d27,d28698vbsl d30,d23,d22 @ Maj(a,b,c)699veor d20,d26 @ Sigma0(a)700vadd.i64 d16,d27701vadd.i64 d30,d27702@ vadd.i64 d20,d30703vshr.u64 d24,d16,#14 @ 4704#if 4<16705vld1.64 {d4},[r1]! @ handles unaligned706#endif707vshr.u64 d25,d16,#18708#if 4>0709vadd.i64 d20,d30 @ h+=Maj from the past710#endif711vshr.u64 d26,d16,#41712vld1.64 {d28},[r3,:64]! @ K[i++]713vsli.64 d24,d16,#50714vsli.64 d25,d16,#46715vmov d29,d16716vsli.64 d26,d16,#23717#if 4<16 && defined(__ARMEL__)718vrev64.8 d4,d4719#endif720veor d25,d24721vbsl d29,d17,d18 @ Ch(e,f,g)722vshr.u64 d24,d20,#28723veor d26,d25 @ Sigma1(e)724vadd.i64 d27,d29,d19725vshr.u64 d25,d20,#34726vsli.64 d24,d20,#36727vadd.i64 d27,d26728vshr.u64 d26,d20,#39729vadd.i64 d28,d4730vsli.64 d25,d20,#30731veor d30,d20,d21732vsli.64 d26,d20,#25733veor d19,d24,d25734vadd.i64 d27,d28735vbsl d30,d22,d21 @ Maj(a,b,c)736veor d19,d26 @ Sigma0(a)737vadd.i64 d23,d27738vadd.i64 d30,d27739@ vadd.i64 d19,d30740vshr.u64 d24,d23,#14 @ 5741#if 5<16742vld1.64 {d5},[r1]! @ handles unaligned743#endif744vshr.u64 d25,d23,#18745#if 5>0746vadd.i64 d19,d30 @ h+=Maj from the past747#endif748vshr.u64 d26,d23,#41749vld1.64 {d28},[r3,:64]! @ K[i++]750vsli.64 d24,d23,#50751vsli.64 d25,d23,#46752vmov d29,d23753vsli.64 d26,d23,#23754#if 5<16 && defined(__ARMEL__)755vrev64.8 d5,d5756#endif757veor d25,d24758vbsl d29,d16,d17 @ Ch(e,f,g)759vshr.u64 d24,d19,#28760veor d26,d25 @ Sigma1(e)761vadd.i64 d27,d29,d18762vshr.u64 d25,d19,#34763vsli.64 d24,d19,#36764vadd.i64 d27,d26765vshr.u64 d26,d19,#39766vadd.i64 d28,d5767vsli.64 d25,d19,#30768veor d30,d19,d20769vsli.64 d26,d19,#25770veor d18,d24,d25771vadd.i64 d27,d28772vbsl d30,d21,d20 @ Maj(a,b,c)773veor d18,d26 @ Sigma0(a)774vadd.i64 d22,d27775vadd.i64 d30,d27776@ vadd.i64 d18,d30777vshr.u64 d24,d22,#14 @ 6778#if 6<16779vld1.64 {d6},[r1]! @ handles unaligned780#endif781vshr.u64 d25,d22,#18782#if 6>0783vadd.i64 d18,d30 @ h+=Maj from the past784#endif785vshr.u64 d26,d22,#41786vld1.64 {d28},[r3,:64]! @ K[i++]787vsli.64 d24,d22,#50788vsli.64 d25,d22,#46789vmov d29,d22790vsli.64 d26,d22,#23791#if 6<16 && defined(__ARMEL__)792vrev64.8 d6,d6793#endif794veor d25,d24795vbsl d29,d23,d16 @ Ch(e,f,g)796vshr.u64 d24,d18,#28797veor d26,d25 @ Sigma1(e)798vadd.i64 d27,d29,d17799vshr.u64 d25,d18,#34800vsli.64 d24,d18,#36801vadd.i64 d27,d26802vshr.u64 d26,d18,#39803vadd.i64 d28,d6804vsli.64 d25,d18,#30805veor d30,d18,d19806vsli.64 d26,d18,#25807veor d17,d24,d25808vadd.i64 d27,d28809vbsl d30,d20,d19 @ Maj(a,b,c)810veor d17,d26 @ Sigma0(a)811vadd.i64 d21,d27812vadd.i64 d30,d27813@ vadd.i64 d17,d30814vshr.u64 d24,d21,#14 @ 7815#if 7<16816vld1.64 {d7},[r1]! @ handles unaligned817#endif818vshr.u64 d25,d21,#18819#if 7>0820vadd.i64 d17,d30 @ h+=Maj from the past821#endif822vshr.u64 d26,d21,#41823vld1.64 {d28},[r3,:64]! @ K[i++]824vsli.64 d24,d21,#50825vsli.64 d25,d21,#46826vmov d29,d21827vsli.64 d26,d21,#23828#if 7<16 && defined(__ARMEL__)829vrev64.8 d7,d7830#endif831veor d25,d24832vbsl d29,d22,d23 @ Ch(e,f,g)833vshr.u64 d24,d17,#28834veor d26,d25 @ Sigma1(e)835vadd.i64 d27,d29,d16836vshr.u64 d25,d17,#34837vsli.64 d24,d17,#36838vadd.i64 d27,d26839vshr.u64 d26,d17,#39840vadd.i64 d28,d7841vsli.64 d25,d17,#30842veor d30,d17,d18843vsli.64 d26,d17,#25844veor d16,d24,d25845vadd.i64 d27,d28846vbsl d30,d19,d18 @ Maj(a,b,c)847veor d16,d26 @ Sigma0(a)848vadd.i64 d20,d27849vadd.i64 d30,d27850@ vadd.i64 d16,d30851vshr.u64 d24,d20,#14 @ 8852#if 8<16853vld1.64 {d8},[r1]! @ handles unaligned854#endif855vshr.u64 d25,d20,#18856#if 8>0857vadd.i64 d16,d30 @ h+=Maj from the past858#endif859vshr.u64 d26,d20,#41860vld1.64 {d28},[r3,:64]! @ K[i++]861vsli.64 d24,d20,#50862vsli.64 d25,d20,#46863vmov d29,d20864vsli.64 d26,d20,#23865#if 8<16 && defined(__ARMEL__)866vrev64.8 d8,d8867#endif868veor d25,d24869vbsl d29,d21,d22 @ Ch(e,f,g)870vshr.u64 d24,d16,#28871veor d26,d25 @ Sigma1(e)872vadd.i64 d27,d29,d23873vshr.u64 d25,d16,#34874vsli.64 d24,d16,#36875vadd.i64 d27,d26876vshr.u64 d26,d16,#39877vadd.i64 d28,d8878vsli.64 d25,d16,#30879veor d30,d16,d17880vsli.64 d26,d16,#25881veor d23,d24,d25882vadd.i64 d27,d28883vbsl d30,d18,d17 @ Maj(a,b,c)884veor d23,d26 @ Sigma0(a)885vadd.i64 d19,d27886vadd.i64 d30,d27887@ vadd.i64 d23,d30888vshr.u64 d24,d19,#14 @ 9889#if 9<16890vld1.64 {d9},[r1]! @ handles unaligned891#endif892vshr.u64 d25,d19,#18893#if 9>0894vadd.i64 d23,d30 @ h+=Maj from the past895#endif896vshr.u64 d26,d19,#41897vld1.64 {d28},[r3,:64]! @ K[i++]898vsli.64 d24,d19,#50899vsli.64 d25,d19,#46900vmov d29,d19901vsli.64 d26,d19,#23902#if 9<16 && defined(__ARMEL__)903vrev64.8 d9,d9904#endif905veor d25,d24906vbsl d29,d20,d21 @ Ch(e,f,g)907vshr.u64 d24,d23,#28908veor d26,d25 @ Sigma1(e)909vadd.i64 d27,d29,d22910vshr.u64 d25,d23,#34911vsli.64 d24,d23,#36912vadd.i64 d27,d26913vshr.u64 d26,d23,#39914vadd.i64 d28,d9915vsli.64 d25,d23,#30916veor d30,d23,d16917vsli.64 d26,d23,#25918veor d22,d24,d25919vadd.i64 d27,d28920vbsl d30,d17,d16 @ Maj(a,b,c)921veor d22,d26 @ Sigma0(a)922vadd.i64 d18,d27923vadd.i64 d30,d27924@ vadd.i64 d22,d30925vshr.u64 d24,d18,#14 @ 10926#if 10<16927vld1.64 {d10},[r1]! @ handles unaligned928#endif929vshr.u64 d25,d18,#18930#if 10>0931vadd.i64 d22,d30 @ h+=Maj from the past932#endif933vshr.u64 d26,d18,#41934vld1.64 {d28},[r3,:64]! @ K[i++]935vsli.64 d24,d18,#50936vsli.64 d25,d18,#46937vmov d29,d18938vsli.64 d26,d18,#23939#if 10<16 && defined(__ARMEL__)940vrev64.8 d10,d10941#endif942veor d25,d24943vbsl d29,d19,d20 @ Ch(e,f,g)944vshr.u64 d24,d22,#28945veor d26,d25 @ Sigma1(e)946vadd.i64 d27,d29,d21947vshr.u64 d25,d22,#34948vsli.64 d24,d22,#36949vadd.i64 d27,d26950vshr.u64 d26,d22,#39951vadd.i64 d28,d10952vsli.64 d25,d22,#30953veor d30,d22,d23954vsli.64 d26,d22,#25955veor d21,d24,d25956vadd.i64 d27,d28957vbsl d30,d16,d23 @ Maj(a,b,c)958veor d21,d26 @ Sigma0(a)959vadd.i64 d17,d27960vadd.i64 d30,d27961@ vadd.i64 d21,d30962vshr.u64 d24,d17,#14 @ 11963#if 11<16964vld1.64 {d11},[r1]! @ handles unaligned965#endif966vshr.u64 d25,d17,#18967#if 11>0968vadd.i64 d21,d30 @ h+=Maj from the past969#endif970vshr.u64 d26,d17,#41971vld1.64 {d28},[r3,:64]! @ K[i++]972vsli.64 d24,d17,#50973vsli.64 d25,d17,#46974vmov d29,d17975vsli.64 d26,d17,#23976#if 11<16 && defined(__ARMEL__)977vrev64.8 d11,d11978#endif979veor d25,d24980vbsl d29,d18,d19 @ Ch(e,f,g)981vshr.u64 d24,d21,#28982veor d26,d25 @ Sigma1(e)983vadd.i64 d27,d29,d20984vshr.u64 d25,d21,#34985vsli.64 d24,d21,#36986vadd.i64 d27,d26987vshr.u64 d26,d21,#39988vadd.i64 d28,d11989vsli.64 d25,d21,#30990veor d30,d21,d22991vsli.64 d26,d21,#25992veor d20,d24,d25993vadd.i64 d27,d28994vbsl d30,d23,d22 @ Maj(a,b,c)995veor d20,d26 @ Sigma0(a)996vadd.i64 d16,d27997vadd.i64 d30,d27998@ vadd.i64 d20,d30999vshr.u64 d24,d16,#14 @ 121000#if 12<161001vld1.64 {d12},[r1]! @ handles unaligned1002#endif1003vshr.u64 d25,d16,#181004#if 12>01005vadd.i64 d20,d30 @ h+=Maj from the past1006#endif1007vshr.u64 d26,d16,#411008vld1.64 {d28},[r3,:64]! @ K[i++]1009vsli.64 d24,d16,#501010vsli.64 d25,d16,#461011vmov d29,d161012vsli.64 d26,d16,#231013#if 12<16 && defined(__ARMEL__)1014vrev64.8 d12,d121015#endif1016veor d25,d241017vbsl d29,d17,d18 @ Ch(e,f,g)1018vshr.u64 d24,d20,#281019veor d26,d25 @ Sigma1(e)1020vadd.i64 d27,d29,d191021vshr.u64 d25,d20,#341022vsli.64 d24,d20,#361023vadd.i64 d27,d261024vshr.u64 d26,d20,#391025vadd.i64 d28,d121026vsli.64 d25,d20,#301027veor d30,d20,d211028vsli.64 d26,d20,#251029veor d19,d24,d251030vadd.i64 d27,d281031vbsl d30,d22,d21 @ Maj(a,b,c)1032veor d19,d26 @ Sigma0(a)1033vadd.i64 d23,d271034vadd.i64 d30,d271035@ vadd.i64 d19,d301036vshr.u64 d24,d23,#14 @ 131037#if 13<161038vld1.64 {d13},[r1]! @ handles unaligned1039#endif1040vshr.u64 d25,d23,#181041#if 13>01042vadd.i64 d19,d30 @ h+=Maj from the past1043#endif1044vshr.u64 d26,d23,#411045vld1.64 {d28},[r3,:64]! @ K[i++]1046vsli.64 d24,d23,#501047vsli.64 d25,d23,#461048vmov d29,d231049vsli.64 d26,d23,#231050#if 13<16 && defined(__ARMEL__)1051vrev64.8 d13,d131052#endif1053veor d25,d241054vbsl d29,d16,d17 @ Ch(e,f,g)1055vshr.u64 d24,d19,#281056veor d26,d25 @ Sigma1(e)1057vadd.i64 d27,d29,d181058vshr.u64 d25,d19,#341059vsli.64 d24,d19,#361060vadd.i64 d27,d261061vshr.u64 d26,d19,#391062vadd.i64 d28,d131063vsli.64 d25,d19,#301064veor d30,d19,d201065vsli.64 d26,d19,#251066veor d18,d24,d251067vadd.i64 d27,d281068vbsl d30,d21,d20 @ Maj(a,b,c)1069veor d18,d26 @ Sigma0(a)1070vadd.i64 d22,d271071vadd.i64 d30,d271072@ vadd.i64 d18,d301073vshr.u64 d24,d22,#14 @ 141074#if 14<161075vld1.64 {d14},[r1]! @ handles unaligned1076#endif1077vshr.u64 d25,d22,#181078#if 14>01079vadd.i64 d18,d30 @ h+=Maj from the past1080#endif1081vshr.u64 d26,d22,#411082vld1.64 {d28},[r3,:64]! @ K[i++]1083vsli.64 d24,d22,#501084vsli.64 d25,d22,#461085vmov d29,d221086vsli.64 d26,d22,#231087#if 14<16 && defined(__ARMEL__)1088vrev64.8 d14,d141089#endif1090veor d25,d241091vbsl d29,d23,d16 @ Ch(e,f,g)1092vshr.u64 d24,d18,#281093veor d26,d25 @ Sigma1(e)1094vadd.i64 d27,d29,d171095vshr.u64 d25,d18,#341096vsli.64 d24,d18,#361097vadd.i64 d27,d261098vshr.u64 d26,d18,#391099vadd.i64 d28,d141100vsli.64 d25,d18,#301101veor d30,d18,d191102vsli.64 d26,d18,#251103veor d17,d24,d251104vadd.i64 d27,d281105vbsl d30,d20,d19 @ Maj(a,b,c)1106veor d17,d26 @ Sigma0(a)1107vadd.i64 d21,d271108vadd.i64 d30,d271109@ vadd.i64 d17,d301110vshr.u64 d24,d21,#14 @ 151111#if 15<161112vld1.64 {d15},[r1]! @ handles unaligned1113#endif1114vshr.u64 d25,d21,#181115#if 15>01116vadd.i64 d17,d30 @ h+=Maj from the past1117#endif1118vshr.u64 d26,d21,#411119vld1.64 {d28},[r3,:64]! @ K[i++]1120vsli.64 d24,d21,#501121vsli.64 d25,d21,#461122vmov d29,d211123vsli.64 d26,d21,#231124#if 15<16 && defined(__ARMEL__)1125vrev64.8 d15,d151126#endif1127veor d25,d241128vbsl d29,d22,d23 @ Ch(e,f,g)1129vshr.u64 d24,d17,#281130veor d26,d25 @ Sigma1(e)1131vadd.i64 d27,d29,d161132vshr.u64 d25,d17,#341133vsli.64 d24,d17,#361134vadd.i64 d27,d261135vshr.u64 d26,d17,#391136vadd.i64 d28,d151137vsli.64 d25,d17,#301138veor d30,d17,d181139vsli.64 d26,d17,#251140veor d16,d24,d251141vadd.i64 d27,d281142vbsl d30,d19,d18 @ Maj(a,b,c)1143veor d16,d26 @ Sigma0(a)1144vadd.i64 d20,d271145vadd.i64 d30,d271146@ vadd.i64 d16,d301147mov r12,#41148.L16_79_neon:1149subs r12,#11150vshr.u64 q12,q7,#191151vshr.u64 q13,q7,#611152vadd.i64 d16,d30 @ h+=Maj from the past1153vshr.u64 q15,q7,#61154vsli.64 q12,q7,#451155vext.8 q14,q0,q1,#8 @ X[i+1]1156vsli.64 q13,q7,#31157veor q15,q121158vshr.u64 q12,q14,#11159veor q15,q13 @ sigma1(X[i+14])1160vshr.u64 q13,q14,#81161vadd.i64 q0,q151162vshr.u64 q15,q14,#71163vsli.64 q12,q14,#631164vsli.64 q13,q14,#561165vext.8 q14,q4,q5,#8 @ X[i+9]1166veor q15,q121167vshr.u64 d24,d20,#14 @ from NEON_00_151168vadd.i64 q0,q141169vshr.u64 d25,d20,#18 @ from NEON_00_151170veor q15,q13 @ sigma0(X[i+1])1171vshr.u64 d26,d20,#41 @ from NEON_00_151172vadd.i64 q0,q151173vld1.64 {d28},[r3,:64]! @ K[i++]1174vsli.64 d24,d20,#501175vsli.64 d25,d20,#461176vmov d29,d201177vsli.64 d26,d20,#231178#if 16<16 && defined(__ARMEL__)1179vrev64.8 ,1180#endif1181veor d25,d241182vbsl d29,d21,d22 @ Ch(e,f,g)1183vshr.u64 d24,d16,#281184veor d26,d25 @ Sigma1(e)1185vadd.i64 d27,d29,d231186vshr.u64 d25,d16,#341187vsli.64 d24,d16,#361188vadd.i64 d27,d261189vshr.u64 d26,d16,#391190vadd.i64 d28,d01191vsli.64 d25,d16,#301192veor d30,d16,d171193vsli.64 d26,d16,#251194veor d23,d24,d251195vadd.i64 d27,d281196vbsl d30,d18,d17 @ Maj(a,b,c)1197veor d23,d26 @ Sigma0(a)1198vadd.i64 d19,d271199vadd.i64 d30,d271200@ vadd.i64 d23,d301201vshr.u64 d24,d19,#14 @ 171202#if 17<161203vld1.64 {d1},[r1]! @ handles unaligned1204#endif1205vshr.u64 d25,d19,#181206#if 17>01207vadd.i64 d23,d30 @ h+=Maj from the past1208#endif1209vshr.u64 d26,d19,#411210vld1.64 {d28},[r3,:64]! @ K[i++]1211vsli.64 d24,d19,#501212vsli.64 d25,d19,#461213vmov d29,d191214vsli.64 d26,d19,#231215#if 17<16 && defined(__ARMEL__)1216vrev64.8 ,1217#endif1218veor d25,d241219vbsl d29,d20,d21 @ Ch(e,f,g)1220vshr.u64 d24,d23,#281221veor d26,d25 @ Sigma1(e)1222vadd.i64 d27,d29,d221223vshr.u64 d25,d23,#341224vsli.64 d24,d23,#361225vadd.i64 d27,d261226vshr.u64 d26,d23,#391227vadd.i64 d28,d11228vsli.64 d25,d23,#301229veor d30,d23,d161230vsli.64 d26,d23,#251231veor d22,d24,d251232vadd.i64 d27,d281233vbsl d30,d17,d16 @ Maj(a,b,c)1234veor d22,d26 @ Sigma0(a)1235vadd.i64 d18,d271236vadd.i64 d30,d271237@ vadd.i64 d22,d301238vshr.u64 q12,q0,#191239vshr.u64 q13,q0,#611240vadd.i64 d22,d30 @ h+=Maj from the past1241vshr.u64 q15,q0,#61242vsli.64 q12,q0,#451243vext.8 q14,q1,q2,#8 @ X[i+1]1244vsli.64 q13,q0,#31245veor q15,q121246vshr.u64 q12,q14,#11247veor q15,q13 @ sigma1(X[i+14])1248vshr.u64 q13,q14,#81249vadd.i64 q1,q151250vshr.u64 q15,q14,#71251vsli.64 q12,q14,#631252vsli.64 q13,q14,#561253vext.8 q14,q5,q6,#8 @ X[i+9]1254veor q15,q121255vshr.u64 d24,d18,#14 @ from NEON_00_151256vadd.i64 q1,q141257vshr.u64 d25,d18,#18 @ from NEON_00_151258veor q15,q13 @ sigma0(X[i+1])1259vshr.u64 d26,d18,#41 @ from NEON_00_151260vadd.i64 q1,q151261vld1.64 {d28},[r3,:64]! @ K[i++]1262vsli.64 d24,d18,#501263vsli.64 d25,d18,#461264vmov d29,d181265vsli.64 d26,d18,#231266#if 18<16 && defined(__ARMEL__)1267vrev64.8 ,1268#endif1269veor d25,d241270vbsl d29,d19,d20 @ Ch(e,f,g)1271vshr.u64 d24,d22,#281272veor d26,d25 @ Sigma1(e)1273vadd.i64 d27,d29,d211274vshr.u64 d25,d22,#341275vsli.64 d24,d22,#361276vadd.i64 d27,d261277vshr.u64 d26,d22,#391278vadd.i64 d28,d21279vsli.64 d25,d22,#301280veor d30,d22,d231281vsli.64 d26,d22,#251282veor d21,d24,d251283vadd.i64 d27,d281284vbsl d30,d16,d23 @ Maj(a,b,c)1285veor d21,d26 @ Sigma0(a)1286vadd.i64 d17,d271287vadd.i64 d30,d271288@ vadd.i64 d21,d301289vshr.u64 d24,d17,#14 @ 191290#if 19<161291vld1.64 {d3},[r1]! @ handles unaligned1292#endif1293vshr.u64 d25,d17,#181294#if 19>01295vadd.i64 d21,d30 @ h+=Maj from the past1296#endif1297vshr.u64 d26,d17,#411298vld1.64 {d28},[r3,:64]! @ K[i++]1299vsli.64 d24,d17,#501300vsli.64 d25,d17,#461301vmov d29,d171302vsli.64 d26,d17,#231303#if 19<16 && defined(__ARMEL__)1304vrev64.8 ,1305#endif1306veor d25,d241307vbsl d29,d18,d19 @ Ch(e,f,g)1308vshr.u64 d24,d21,#281309veor d26,d25 @ Sigma1(e)1310vadd.i64 d27,d29,d201311vshr.u64 d25,d21,#341312vsli.64 d24,d21,#361313vadd.i64 d27,d261314vshr.u64 d26,d21,#391315vadd.i64 d28,d31316vsli.64 d25,d21,#301317veor d30,d21,d221318vsli.64 d26,d21,#251319veor d20,d24,d251320vadd.i64 d27,d281321vbsl d30,d23,d22 @ Maj(a,b,c)1322veor d20,d26 @ Sigma0(a)1323vadd.i64 d16,d271324vadd.i64 d30,d271325@ vadd.i64 d20,d301326vshr.u64 q12,q1,#191327vshr.u64 q13,q1,#611328vadd.i64 d20,d30 @ h+=Maj from the past1329vshr.u64 q15,q1,#61330vsli.64 q12,q1,#451331vext.8 q14,q2,q3,#8 @ X[i+1]1332vsli.64 q13,q1,#31333veor q15,q121334vshr.u64 q12,q14,#11335veor q15,q13 @ sigma1(X[i+14])1336vshr.u64 q13,q14,#81337vadd.i64 q2,q151338vshr.u64 q15,q14,#71339vsli.64 q12,q14,#631340vsli.64 q13,q14,#561341vext.8 q14,q6,q7,#8 @ X[i+9]1342veor q15,q121343vshr.u64 d24,d16,#14 @ from NEON_00_151344vadd.i64 q2,q141345vshr.u64 d25,d16,#18 @ from NEON_00_151346veor q15,q13 @ sigma0(X[i+1])1347vshr.u64 d26,d16,#41 @ from NEON_00_151348vadd.i64 q2,q151349vld1.64 {d28},[r3,:64]! @ K[i++]1350vsli.64 d24,d16,#501351vsli.64 d25,d16,#461352vmov d29,d161353vsli.64 d26,d16,#231354#if 20<16 && defined(__ARMEL__)1355vrev64.8 ,1356#endif1357veor d25,d241358vbsl d29,d17,d18 @ Ch(e,f,g)1359vshr.u64 d24,d20,#281360veor d26,d25 @ Sigma1(e)1361vadd.i64 d27,d29,d191362vshr.u64 d25,d20,#341363vsli.64 d24,d20,#361364vadd.i64 d27,d261365vshr.u64 d26,d20,#391366vadd.i64 d28,d41367vsli.64 d25,d20,#301368veor d30,d20,d211369vsli.64 d26,d20,#251370veor d19,d24,d251371vadd.i64 d27,d281372vbsl d30,d22,d21 @ Maj(a,b,c)1373veor d19,d26 @ Sigma0(a)1374vadd.i64 d23,d271375vadd.i64 d30,d271376@ vadd.i64 d19,d301377vshr.u64 d24,d23,#14 @ 211378#if 21<161379vld1.64 {d5},[r1]! @ handles unaligned1380#endif1381vshr.u64 d25,d23,#181382#if 21>01383vadd.i64 d19,d30 @ h+=Maj from the past1384#endif1385vshr.u64 d26,d23,#411386vld1.64 {d28},[r3,:64]! @ K[i++]1387vsli.64 d24,d23,#501388vsli.64 d25,d23,#461389vmov d29,d231390vsli.64 d26,d23,#231391#if 21<16 && defined(__ARMEL__)1392vrev64.8 ,1393#endif1394veor d25,d241395vbsl d29,d16,d17 @ Ch(e,f,g)1396vshr.u64 d24,d19,#281397veor d26,d25 @ Sigma1(e)1398vadd.i64 d27,d29,d181399vshr.u64 d25,d19,#341400vsli.64 d24,d19,#361401vadd.i64 d27,d261402vshr.u64 d26,d19,#391403vadd.i64 d28,d51404vsli.64 d25,d19,#301405veor d30,d19,d201406vsli.64 d26,d19,#251407veor d18,d24,d251408vadd.i64 d27,d281409vbsl d30,d21,d20 @ Maj(a,b,c)1410veor d18,d26 @ Sigma0(a)1411vadd.i64 d22,d271412vadd.i64 d30,d271413@ vadd.i64 d18,d301414vshr.u64 q12,q2,#191415vshr.u64 q13,q2,#611416vadd.i64 d18,d30 @ h+=Maj from the past1417vshr.u64 q15,q2,#61418vsli.64 q12,q2,#451419vext.8 q14,q3,q4,#8 @ X[i+1]1420vsli.64 q13,q2,#31421veor q15,q121422vshr.u64 q12,q14,#11423veor q15,q13 @ sigma1(X[i+14])1424vshr.u64 q13,q14,#81425vadd.i64 q3,q151426vshr.u64 q15,q14,#71427vsli.64 q12,q14,#631428vsli.64 q13,q14,#561429vext.8 q14,q7,q0,#8 @ X[i+9]1430veor q15,q121431vshr.u64 d24,d22,#14 @ from NEON_00_151432vadd.i64 q3,q141433vshr.u64 d25,d22,#18 @ from NEON_00_151434veor q15,q13 @ sigma0(X[i+1])1435vshr.u64 d26,d22,#41 @ from NEON_00_151436vadd.i64 q3,q151437vld1.64 {d28},[r3,:64]! @ K[i++]1438vsli.64 d24,d22,#501439vsli.64 d25,d22,#461440vmov d29,d221441vsli.64 d26,d22,#231442#if 22<16 && defined(__ARMEL__)1443vrev64.8 ,1444#endif1445veor d25,d241446vbsl d29,d23,d16 @ Ch(e,f,g)1447vshr.u64 d24,d18,#281448veor d26,d25 @ Sigma1(e)1449vadd.i64 d27,d29,d171450vshr.u64 d25,d18,#341451vsli.64 d24,d18,#361452vadd.i64 d27,d261453vshr.u64 d26,d18,#391454vadd.i64 d28,d61455vsli.64 d25,d18,#301456veor d30,d18,d191457vsli.64 d26,d18,#251458veor d17,d24,d251459vadd.i64 d27,d281460vbsl d30,d20,d19 @ Maj(a,b,c)1461veor d17,d26 @ Sigma0(a)1462vadd.i64 d21,d271463vadd.i64 d30,d271464@ vadd.i64 d17,d301465vshr.u64 d24,d21,#14 @ 231466#if 23<161467vld1.64 {d7},[r1]! @ handles unaligned1468#endif1469vshr.u64 d25,d21,#181470#if 23>01471vadd.i64 d17,d30 @ h+=Maj from the past1472#endif1473vshr.u64 d26,d21,#411474vld1.64 {d28},[r3,:64]! @ K[i++]1475vsli.64 d24,d21,#501476vsli.64 d25,d21,#461477vmov d29,d211478vsli.64 d26,d21,#231479#if 23<16 && defined(__ARMEL__)1480vrev64.8 ,1481#endif1482veor d25,d241483vbsl d29,d22,d23 @ Ch(e,f,g)1484vshr.u64 d24,d17,#281485veor d26,d25 @ Sigma1(e)1486vadd.i64 d27,d29,d161487vshr.u64 d25,d17,#341488vsli.64 d24,d17,#361489vadd.i64 d27,d261490vshr.u64 d26,d17,#391491vadd.i64 d28,d71492vsli.64 d25,d17,#301493veor d30,d17,d181494vsli.64 d26,d17,#251495veor d16,d24,d251496vadd.i64 d27,d281497vbsl d30,d19,d18 @ Maj(a,b,c)1498veor d16,d26 @ Sigma0(a)1499vadd.i64 d20,d271500vadd.i64 d30,d271501@ vadd.i64 d16,d301502vshr.u64 q12,q3,#191503vshr.u64 q13,q3,#611504vadd.i64 d16,d30 @ h+=Maj from the past1505vshr.u64 q15,q3,#61506vsli.64 q12,q3,#451507vext.8 q14,q4,q5,#8 @ X[i+1]1508vsli.64 q13,q3,#31509veor q15,q121510vshr.u64 q12,q14,#11511veor q15,q13 @ sigma1(X[i+14])1512vshr.u64 q13,q14,#81513vadd.i64 q4,q151514vshr.u64 q15,q14,#71515vsli.64 q12,q14,#631516vsli.64 q13,q14,#561517vext.8 q14,q0,q1,#8 @ X[i+9]1518veor q15,q121519vshr.u64 d24,d20,#14 @ from NEON_00_151520vadd.i64 q4,q141521vshr.u64 d25,d20,#18 @ from NEON_00_151522veor q15,q13 @ sigma0(X[i+1])1523vshr.u64 d26,d20,#41 @ from NEON_00_151524vadd.i64 q4,q151525vld1.64 {d28},[r3,:64]! @ K[i++]1526vsli.64 d24,d20,#501527vsli.64 d25,d20,#461528vmov d29,d201529vsli.64 d26,d20,#231530#if 24<16 && defined(__ARMEL__)1531vrev64.8 ,1532#endif1533veor d25,d241534vbsl d29,d21,d22 @ Ch(e,f,g)1535vshr.u64 d24,d16,#281536veor d26,d25 @ Sigma1(e)1537vadd.i64 d27,d29,d231538vshr.u64 d25,d16,#341539vsli.64 d24,d16,#361540vadd.i64 d27,d261541vshr.u64 d26,d16,#391542vadd.i64 d28,d81543vsli.64 d25,d16,#301544veor d30,d16,d171545vsli.64 d26,d16,#251546veor d23,d24,d251547vadd.i64 d27,d281548vbsl d30,d18,d17 @ Maj(a,b,c)1549veor d23,d26 @ Sigma0(a)1550vadd.i64 d19,d271551vadd.i64 d30,d271552@ vadd.i64 d23,d301553vshr.u64 d24,d19,#14 @ 251554#if 25<161555vld1.64 {d9},[r1]! @ handles unaligned1556#endif1557vshr.u64 d25,d19,#181558#if 25>01559vadd.i64 d23,d30 @ h+=Maj from the past1560#endif1561vshr.u64 d26,d19,#411562vld1.64 {d28},[r3,:64]! @ K[i++]1563vsli.64 d24,d19,#501564vsli.64 d25,d19,#461565vmov d29,d191566vsli.64 d26,d19,#231567#if 25<16 && defined(__ARMEL__)1568vrev64.8 ,1569#endif1570veor d25,d241571vbsl d29,d20,d21 @ Ch(e,f,g)1572vshr.u64 d24,d23,#281573veor d26,d25 @ Sigma1(e)1574vadd.i64 d27,d29,d221575vshr.u64 d25,d23,#341576vsli.64 d24,d23,#361577vadd.i64 d27,d261578vshr.u64 d26,d23,#391579vadd.i64 d28,d91580vsli.64 d25,d23,#301581veor d30,d23,d161582vsli.64 d26,d23,#251583veor d22,d24,d251584vadd.i64 d27,d281585vbsl d30,d17,d16 @ Maj(a,b,c)1586veor d22,d26 @ Sigma0(a)1587vadd.i64 d18,d271588vadd.i64 d30,d271589@ vadd.i64 d22,d301590vshr.u64 q12,q4,#191591vshr.u64 q13,q4,#611592vadd.i64 d22,d30 @ h+=Maj from the past1593vshr.u64 q15,q4,#61594vsli.64 q12,q4,#451595vext.8 q14,q5,q6,#8 @ X[i+1]1596vsli.64 q13,q4,#31597veor q15,q121598vshr.u64 q12,q14,#11599veor q15,q13 @ sigma1(X[i+14])1600vshr.u64 q13,q14,#81601vadd.i64 q5,q151602vshr.u64 q15,q14,#71603vsli.64 q12,q14,#631604vsli.64 q13,q14,#561605vext.8 q14,q1,q2,#8 @ X[i+9]1606veor q15,q121607vshr.u64 d24,d18,#14 @ from NEON_00_151608vadd.i64 q5,q141609vshr.u64 d25,d18,#18 @ from NEON_00_151610veor q15,q13 @ sigma0(X[i+1])1611vshr.u64 d26,d18,#41 @ from NEON_00_151612vadd.i64 q5,q151613vld1.64 {d28},[r3,:64]! @ K[i++]1614vsli.64 d24,d18,#501615vsli.64 d25,d18,#461616vmov d29,d181617vsli.64 d26,d18,#231618#if 26<16 && defined(__ARMEL__)1619vrev64.8 ,1620#endif1621veor d25,d241622vbsl d29,d19,d20 @ Ch(e,f,g)1623vshr.u64 d24,d22,#281624veor d26,d25 @ Sigma1(e)1625vadd.i64 d27,d29,d211626vshr.u64 d25,d22,#341627vsli.64 d24,d22,#361628vadd.i64 d27,d261629vshr.u64 d26,d22,#391630vadd.i64 d28,d101631vsli.64 d25,d22,#301632veor d30,d22,d231633vsli.64 d26,d22,#251634veor d21,d24,d251635vadd.i64 d27,d281636vbsl d30,d16,d23 @ Maj(a,b,c)1637veor d21,d26 @ Sigma0(a)1638vadd.i64 d17,d271639vadd.i64 d30,d271640@ vadd.i64 d21,d301641vshr.u64 d24,d17,#14 @ 271642#if 27<161643vld1.64 {d11},[r1]! @ handles unaligned1644#endif1645vshr.u64 d25,d17,#181646#if 27>01647vadd.i64 d21,d30 @ h+=Maj from the past1648#endif1649vshr.u64 d26,d17,#411650vld1.64 {d28},[r3,:64]! @ K[i++]1651vsli.64 d24,d17,#501652vsli.64 d25,d17,#461653vmov d29,d171654vsli.64 d26,d17,#231655#if 27<16 && defined(__ARMEL__)1656vrev64.8 ,1657#endif1658veor d25,d241659vbsl d29,d18,d19 @ Ch(e,f,g)1660vshr.u64 d24,d21,#281661veor d26,d25 @ Sigma1(e)1662vadd.i64 d27,d29,d201663vshr.u64 d25,d21,#341664vsli.64 d24,d21,#361665vadd.i64 d27,d261666vshr.u64 d26,d21,#391667vadd.i64 d28,d111668vsli.64 d25,d21,#301669veor d30,d21,d221670vsli.64 d26,d21,#251671veor d20,d24,d251672vadd.i64 d27,d281673vbsl d30,d23,d22 @ Maj(a,b,c)1674veor d20,d26 @ Sigma0(a)1675vadd.i64 d16,d271676vadd.i64 d30,d271677@ vadd.i64 d20,d301678vshr.u64 q12,q5,#191679vshr.u64 q13,q5,#611680vadd.i64 d20,d30 @ h+=Maj from the past1681vshr.u64 q15,q5,#61682vsli.64 q12,q5,#451683vext.8 q14,q6,q7,#8 @ X[i+1]1684vsli.64 q13,q5,#31685veor q15,q121686vshr.u64 q12,q14,#11687veor q15,q13 @ sigma1(X[i+14])1688vshr.u64 q13,q14,#81689vadd.i64 q6,q151690vshr.u64 q15,q14,#71691vsli.64 q12,q14,#631692vsli.64 q13,q14,#561693vext.8 q14,q2,q3,#8 @ X[i+9]1694veor q15,q121695vshr.u64 d24,d16,#14 @ from NEON_00_151696vadd.i64 q6,q141697vshr.u64 d25,d16,#18 @ from NEON_00_151698veor q15,q13 @ sigma0(X[i+1])1699vshr.u64 d26,d16,#41 @ from NEON_00_151700vadd.i64 q6,q151701vld1.64 {d28},[r3,:64]! @ K[i++]1702vsli.64 d24,d16,#501703vsli.64 d25,d16,#461704vmov d29,d161705vsli.64 d26,d16,#231706#if 28<16 && defined(__ARMEL__)1707vrev64.8 ,1708#endif1709veor d25,d241710vbsl d29,d17,d18 @ Ch(e,f,g)1711vshr.u64 d24,d20,#281712veor d26,d25 @ Sigma1(e)1713vadd.i64 d27,d29,d191714vshr.u64 d25,d20,#341715vsli.64 d24,d20,#361716vadd.i64 d27,d261717vshr.u64 d26,d20,#391718vadd.i64 d28,d121719vsli.64 d25,d20,#301720veor d30,d20,d211721vsli.64 d26,d20,#251722veor d19,d24,d251723vadd.i64 d27,d281724vbsl d30,d22,d21 @ Maj(a,b,c)1725veor d19,d26 @ Sigma0(a)1726vadd.i64 d23,d271727vadd.i64 d30,d271728@ vadd.i64 d19,d301729vshr.u64 d24,d23,#14 @ 291730#if 29<161731vld1.64 {d13},[r1]! @ handles unaligned1732#endif1733vshr.u64 d25,d23,#181734#if 29>01735vadd.i64 d19,d30 @ h+=Maj from the past1736#endif1737vshr.u64 d26,d23,#411738vld1.64 {d28},[r3,:64]! @ K[i++]1739vsli.64 d24,d23,#501740vsli.64 d25,d23,#461741vmov d29,d231742vsli.64 d26,d23,#231743#if 29<16 && defined(__ARMEL__)1744vrev64.8 ,1745#endif1746veor d25,d241747vbsl d29,d16,d17 @ Ch(e,f,g)1748vshr.u64 d24,d19,#281749veor d26,d25 @ Sigma1(e)1750vadd.i64 d27,d29,d181751vshr.u64 d25,d19,#341752vsli.64 d24,d19,#361753vadd.i64 d27,d261754vshr.u64 d26,d19,#391755vadd.i64 d28,d131756vsli.64 d25,d19,#301757veor d30,d19,d201758vsli.64 d26,d19,#251759veor d18,d24,d251760vadd.i64 d27,d281761vbsl d30,d21,d20 @ Maj(a,b,c)1762veor d18,d26 @ Sigma0(a)1763vadd.i64 d22,d271764vadd.i64 d30,d271765@ vadd.i64 d18,d301766vshr.u64 q12,q6,#191767vshr.u64 q13,q6,#611768vadd.i64 d18,d30 @ h+=Maj from the past1769vshr.u64 q15,q6,#61770vsli.64 q12,q6,#451771vext.8 q14,q7,q0,#8 @ X[i+1]1772vsli.64 q13,q6,#31773veor q15,q121774vshr.u64 q12,q14,#11775veor q15,q13 @ sigma1(X[i+14])1776vshr.u64 q13,q14,#81777vadd.i64 q7,q151778vshr.u64 q15,q14,#71779vsli.64 q12,q14,#631780vsli.64 q13,q14,#561781vext.8 q14,q3,q4,#8 @ X[i+9]1782veor q15,q121783vshr.u64 d24,d22,#14 @ from NEON_00_151784vadd.i64 q7,q141785vshr.u64 d25,d22,#18 @ from NEON_00_151786veor q15,q13 @ sigma0(X[i+1])1787vshr.u64 d26,d22,#41 @ from NEON_00_151788vadd.i64 q7,q151789vld1.64 {d28},[r3,:64]! @ K[i++]1790vsli.64 d24,d22,#501791vsli.64 d25,d22,#461792vmov d29,d221793vsli.64 d26,d22,#231794#if 30<16 && defined(__ARMEL__)1795vrev64.8 ,1796#endif1797veor d25,d241798vbsl d29,d23,d16 @ Ch(e,f,g)1799vshr.u64 d24,d18,#281800veor d26,d25 @ Sigma1(e)1801vadd.i64 d27,d29,d171802vshr.u64 d25,d18,#341803vsli.64 d24,d18,#361804vadd.i64 d27,d261805vshr.u64 d26,d18,#391806vadd.i64 d28,d141807vsli.64 d25,d18,#301808veor d30,d18,d191809vsli.64 d26,d18,#251810veor d17,d24,d251811vadd.i64 d27,d281812vbsl d30,d20,d19 @ Maj(a,b,c)1813veor d17,d26 @ Sigma0(a)1814vadd.i64 d21,d271815vadd.i64 d30,d271816@ vadd.i64 d17,d301817vshr.u64 d24,d21,#14 @ 311818#if 31<161819vld1.64 {d15},[r1]! @ handles unaligned1820#endif1821vshr.u64 d25,d21,#181822#if 31>01823vadd.i64 d17,d30 @ h+=Maj from the past1824#endif1825vshr.u64 d26,d21,#411826vld1.64 {d28},[r3,:64]! @ K[i++]1827vsli.64 d24,d21,#501828vsli.64 d25,d21,#461829vmov d29,d211830vsli.64 d26,d21,#231831#if 31<16 && defined(__ARMEL__)1832vrev64.8 ,1833#endif1834veor d25,d241835vbsl d29,d22,d23 @ Ch(e,f,g)1836vshr.u64 d24,d17,#281837veor d26,d25 @ Sigma1(e)1838vadd.i64 d27,d29,d161839vshr.u64 d25,d17,#341840vsli.64 d24,d17,#361841vadd.i64 d27,d261842vshr.u64 d26,d17,#391843vadd.i64 d28,d151844vsli.64 d25,d17,#301845veor d30,d17,d181846vsli.64 d26,d17,#251847veor d16,d24,d251848vadd.i64 d27,d281849vbsl d30,d19,d18 @ Maj(a,b,c)1850veor d16,d26 @ Sigma0(a)1851vadd.i64 d20,d271852vadd.i64 d30,d271853@ vadd.i64 d16,d301854bne .L16_79_neon18551856vadd.i64 d16,d30 @ h+=Maj from the past1857vldmia r0,{d24,d25,d26,d27,d28,d29,d30,d31} @ load context to temp1858vadd.i64 q8,q12 @ vectorized accumulate1859vadd.i64 q9,q131860vadd.i64 q10,q141861vadd.i64 q11,q151862vstmia r0,{d16,d17,d18,d19,d20,d21,d22,d23} @ save context1863teq r1,r21864sub r3,#640 @ rewind K5121865bne .Loop_neon18661867VFP_ABI_POP1868bx lr @ .word 0xe12fff1e1869.size sha512_block_data_order_neon,.-sha512_block_data_order_neon1870#endif1871.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,01872.align 21873.align 21874#if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__)18751876.hidden OPENSSL_armcap_P1877#endif187818791880