Path: blob/main/sys/contrib/openzfs/module/icp/asm-arm/sha2/sha512-armv7.S
48775 views
// SPDX-License-Identifier: Apache-2.01/*2* Copyright 2004-2022 The OpenSSL Project Authors. All Rights Reserved.3*4* Licensed under the Apache License, Version 2.0 (the "License");5* you may not use this file except in compliance with the License.6* You may obtain a copy of the License at7*8* https://www.apache.org/licenses/LICENSE-2.09*10* Unless required by applicable law or agreed to in writing, software11* distributed under the License is distributed on an "AS IS" BASIS,12* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.13* See the License for the specific language governing permissions and14* limitations under the License.15*/1617/*18* Portions Copyright (c) 2022 Tino Reichardt <[email protected]>19* - modified assembly to fit into OpenZFS20*/2122#if defined(__arm__)2324#ifndef __ARM_ARCH25# define __ARM_ARCH__ 726#else27# define __ARM_ARCH__ __ARM_ARCH28#endif2930#ifndef __KERNEL__31# define VFP_ABI_PUSH vstmdb sp!,{d8-d15}32# define VFP_ABI_POP vldmia sp!,{d8-d15}33#else34# define VFP_ABI_PUSH35# define VFP_ABI_POP36#endif3738#ifdef __ARMEL__39# define LO 040# define HI 441# define WORD64(hi0,lo0,hi1,lo1) .word lo0,hi0, lo1,hi142#else43# define HI 044# define LO 445# define WORD64(hi0,lo0,hi1,lo1) .word hi0,lo0, hi1,lo146#endif4748#if defined(__thumb2__)49.syntax unified50.thumb51# define adrl adr52#else53.code 3254#endif5556.text5758.type K512,%object59.align 560K512:61WORD64(0x428a2f98,0xd728ae22, 0x71374491,0x23ef65cd)62WORD64(0xb5c0fbcf,0xec4d3b2f, 0xe9b5dba5,0x8189dbbc)63WORD64(0x3956c25b,0xf348b538, 0x59f111f1,0xb605d019)64WORD64(0x923f82a4,0xaf194f9b, 0xab1c5ed5,0xda6d8118)65WORD64(0xd807aa98,0xa3030242, 0x12835b01,0x45706fbe)66WORD64(0x243185be,0x4ee4b28c, 0x550c7dc3,0xd5ffb4e2)67WORD64(0x72be5d74,0xf27b896f, 0x80deb1fe,0x3b1696b1)68WORD64(0x9bdc06a7,0x25c71235, 0xc19bf174,0xcf692694)69WORD64(0xe49b69c1,0x9ef14ad2, 0xefbe4786,0x384f25e3)70WORD64(0x0fc19dc6,0x8b8cd5b5, 0x240ca1cc,0x77ac9c65)71WORD64(0x2de92c6f,0x592b0275, 0x4a7484aa,0x6ea6e483)72WORD64(0x5cb0a9dc,0xbd41fbd4, 0x76f988da,0x831153b5)73WORD64(0x983e5152,0xee66dfab, 0xa831c66d,0x2db43210)74WORD64(0xb00327c8,0x98fb213f, 0xbf597fc7,0xbeef0ee4)75WORD64(0xc6e00bf3,0x3da88fc2, 0xd5a79147,0x930aa725)76WORD64(0x06ca6351,0xe003826f, 0x14292967,0x0a0e6e70)77WORD64(0x27b70a85,0x46d22ffc, 0x2e1b2138,0x5c26c926)78WORD64(0x4d2c6dfc,0x5ac42aed, 0x53380d13,0x9d95b3df)79WORD64(0x650a7354,0x8baf63de, 0x766a0abb,0x3c77b2a8)80WORD64(0x81c2c92e,0x47edaee6, 0x92722c85,0x1482353b)81WORD64(0xa2bfe8a1,0x4cf10364, 0xa81a664b,0xbc423001)82WORD64(0xc24b8b70,0xd0f89791, 0xc76c51a3,0x0654be30)83WORD64(0xd192e819,0xd6ef5218, 0xd6990624,0x5565a910)84WORD64(0xf40e3585,0x5771202a, 0x106aa070,0x32bbd1b8)85WORD64(0x19a4c116,0xb8d2d0c8, 0x1e376c08,0x5141ab53)86WORD64(0x2748774c,0xdf8eeb99, 0x34b0bcb5,0xe19b48a8)87WORD64(0x391c0cb3,0xc5c95a63, 0x4ed8aa4a,0xe3418acb)88WORD64(0x5b9cca4f,0x7763e373, 0x682e6ff3,0xd6b2b8a3)89WORD64(0x748f82ee,0x5defb2fc, 0x78a5636f,0x43172f60)90WORD64(0x84c87814,0xa1f0ab72, 0x8cc70208,0x1a6439ec)91WORD64(0x90befffa,0x23631e28, 0xa4506ceb,0xde82bde9)92WORD64(0xbef9a3f7,0xb2c67915, 0xc67178f2,0xe372532b)93WORD64(0xca273ece,0xea26619c, 0xd186b8c7,0x21c0c207)94WORD64(0xeada7dd6,0xcde0eb1e, 0xf57d4f7f,0xee6ed178)95WORD64(0x06f067aa,0x72176fba, 0x0a637dc5,0xa2c898a6)96WORD64(0x113f9804,0xbef90dae, 0x1b710b35,0x131c471b)97WORD64(0x28db77f5,0x23047d84, 0x32caab7b,0x40c72493)98WORD64(0x3c9ebe0a,0x15c9bebc, 0x431d67c4,0x9c100d4c)99WORD64(0x4cc5d4be,0xcb3e42b6, 0x597f299c,0xfc657e2a)100WORD64(0x5fcb6fab,0x3ad6faec, 0x6c44198c,0x4a475817)101.size K512,.-K512102.word 0 @ terminator103104.align 5105.globl zfs_sha512_block_armv7106.type zfs_sha512_block_armv7,%function107zfs_sha512_block_armv7:108.Lzfs_sha512_block_armv7:109110#if __ARM_ARCH__<7 && !defined(__thumb2__)111sub r3,pc,#8 @ zfs_sha512_block_armv7112#else113adr r3,.Lzfs_sha512_block_armv7114#endif115116add r2,r1,r2,lsl#7 @ len to point at the end of inp117stmdb sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr}118sub r14,r3,#672 @ K512119sub sp,sp,#9*8120121ldr r7,[r0,#32+LO]122ldr r8,[r0,#32+HI]123ldr r9, [r0,#48+LO]124ldr r10, [r0,#48+HI]125ldr r11, [r0,#56+LO]126ldr r12, [r0,#56+HI]127.Loop:128str r9, [sp,#48+0]129str r10, [sp,#48+4]130str r11, [sp,#56+0]131str r12, [sp,#56+4]132ldr r5,[r0,#0+LO]133ldr r6,[r0,#0+HI]134ldr r3,[r0,#8+LO]135ldr r4,[r0,#8+HI]136ldr r9, [r0,#16+LO]137ldr r10, [r0,#16+HI]138ldr r11, [r0,#24+LO]139ldr r12, [r0,#24+HI]140str r3,[sp,#8+0]141str r4,[sp,#8+4]142str r9, [sp,#16+0]143str r10, [sp,#16+4]144str r11, [sp,#24+0]145str r12, [sp,#24+4]146ldr r3,[r0,#40+LO]147ldr r4,[r0,#40+HI]148str r3,[sp,#40+0]149str r4,[sp,#40+4]150151.L00_15:152#if __ARM_ARCH__<7153ldrb r3,[r1,#7]154ldrb r9, [r1,#6]155ldrb r10, [r1,#5]156ldrb r11, [r1,#4]157ldrb r4,[r1,#3]158ldrb r12, [r1,#2]159orr r3,r3,r9,lsl#8160ldrb r9, [r1,#1]161orr r3,r3,r10,lsl#16162ldrb r10, [r1],#8163orr r3,r3,r11,lsl#24164orr r4,r4,r12,lsl#8165orr r4,r4,r9,lsl#16166orr r4,r4,r10,lsl#24167#else168ldr r3,[r1,#4]169ldr r4,[r1],#8170#ifdef __ARMEL__171rev r3,r3172rev r4,r4173#endif174#endif175@ Sigma1(x) (ROTR((x),14) ^ ROTR((x),18) ^ ROTR((x),41))176@ LO lo>>14^hi<<18 ^ lo>>18^hi<<14 ^ hi>>9^lo<<23177@ HI hi>>14^lo<<18 ^ hi>>18^lo<<14 ^ lo>>9^hi<<23178mov r9,r7,lsr#14179str r3,[sp,#64+0]180mov r10,r8,lsr#14181str r4,[sp,#64+4]182eor r9,r9,r8,lsl#18183ldr r11,[sp,#56+0] @ h.lo184eor r10,r10,r7,lsl#18185ldr r12,[sp,#56+4] @ h.hi186eor r9,r9,r7,lsr#18187eor r10,r10,r8,lsr#18188eor r9,r9,r8,lsl#14189eor r10,r10,r7,lsl#14190eor r9,r9,r8,lsr#9191eor r10,r10,r7,lsr#9192eor r9,r9,r7,lsl#23193eor r10,r10,r8,lsl#23 @ Sigma1(e)194adds r3,r3,r9195ldr r9,[sp,#40+0] @ f.lo196adc r4,r4,r10 @ T += Sigma1(e)197ldr r10,[sp,#40+4] @ f.hi198adds r3,r3,r11199ldr r11,[sp,#48+0] @ g.lo200adc r4,r4,r12 @ T += h201ldr r12,[sp,#48+4] @ g.hi202203eor r9,r9,r11204str r7,[sp,#32+0]205eor r10,r10,r12206str r8,[sp,#32+4]207and r9,r9,r7208str r5,[sp,#0+0]209and r10,r10,r8210str r6,[sp,#0+4]211eor r9,r9,r11212ldr r11,[r14,#LO] @ K[i].lo213eor r10,r10,r12 @ Ch(e,f,g)214ldr r12,[r14,#HI] @ K[i].hi215216adds r3,r3,r9217ldr r7,[sp,#24+0] @ d.lo218adc r4,r4,r10 @ T += Ch(e,f,g)219ldr r8,[sp,#24+4] @ d.hi220adds r3,r3,r11221and r9,r11,#0xff222adc r4,r4,r12 @ T += K[i]223adds r7,r7,r3224ldr r11,[sp,#8+0] @ b.lo225adc r8,r8,r4 @ d += T226teq r9,#148227228ldr r12,[sp,#16+0] @ c.lo229#ifdef __thumb2__230it eq @ Thumb2 thing, sanity check in ARM231#endif232orreq r14,r14,#1233@ Sigma0(x) (ROTR((x),28) ^ ROTR((x),34) ^ ROTR((x),39))234@ LO lo>>28^hi<<4 ^ hi>>2^lo<<30 ^ hi>>7^lo<<25235@ HI hi>>28^lo<<4 ^ lo>>2^hi<<30 ^ lo>>7^hi<<25236mov r9,r5,lsr#28237mov r10,r6,lsr#28238eor r9,r9,r6,lsl#4239eor r10,r10,r5,lsl#4240eor r9,r9,r6,lsr#2241eor r10,r10,r5,lsr#2242eor r9,r9,r5,lsl#30243eor r10,r10,r6,lsl#30244eor r9,r9,r6,lsr#7245eor r10,r10,r5,lsr#7246eor r9,r9,r5,lsl#25247eor r10,r10,r6,lsl#25 @ Sigma0(a)248adds r3,r3,r9249and r9,r5,r11250adc r4,r4,r10 @ T += Sigma0(a)251252ldr r10,[sp,#8+4] @ b.hi253orr r5,r5,r11254ldr r11,[sp,#16+4] @ c.hi255and r5,r5,r12256and r12,r6,r10257orr r6,r6,r10258orr r5,r5,r9 @ Maj(a,b,c).lo259and r6,r6,r11260adds r5,r5,r3261orr r6,r6,r12 @ Maj(a,b,c).hi262sub sp,sp,#8263adc r6,r6,r4 @ h += T264tst r14,#1265add r14,r14,#8266tst r14,#1267beq .L00_15268ldr r9,[sp,#184+0]269ldr r10,[sp,#184+4]270bic r14,r14,#1271.L16_79:272@ sigma0(x) (ROTR((x),1) ^ ROTR((x),8) ^ ((x)>>7))273@ LO lo>>1^hi<<31 ^ lo>>8^hi<<24 ^ lo>>7^hi<<25274@ HI hi>>1^lo<<31 ^ hi>>8^lo<<24 ^ hi>>7275mov r3,r9,lsr#1276ldr r11,[sp,#80+0]277mov r4,r10,lsr#1278ldr r12,[sp,#80+4]279eor r3,r3,r10,lsl#31280eor r4,r4,r9,lsl#31281eor r3,r3,r9,lsr#8282eor r4,r4,r10,lsr#8283eor r3,r3,r10,lsl#24284eor r4,r4,r9,lsl#24285eor r3,r3,r9,lsr#7286eor r4,r4,r10,lsr#7287eor r3,r3,r10,lsl#25288289@ sigma1(x) (ROTR((x),19) ^ ROTR((x),61) ^ ((x)>>6))290@ LO lo>>19^hi<<13 ^ hi>>29^lo<<3 ^ lo>>6^hi<<26291@ HI hi>>19^lo<<13 ^ lo>>29^hi<<3 ^ hi>>6292mov r9,r11,lsr#19293mov r10,r12,lsr#19294eor r9,r9,r12,lsl#13295eor r10,r10,r11,lsl#13296eor r9,r9,r12,lsr#29297eor r10,r10,r11,lsr#29298eor r9,r9,r11,lsl#3299eor r10,r10,r12,lsl#3300eor r9,r9,r11,lsr#6301eor r10,r10,r12,lsr#6302ldr r11,[sp,#120+0]303eor r9,r9,r12,lsl#26304305ldr r12,[sp,#120+4]306adds r3,r3,r9307ldr r9,[sp,#192+0]308adc r4,r4,r10309310ldr r10,[sp,#192+4]311adds r3,r3,r11312adc r4,r4,r12313adds r3,r3,r9314adc r4,r4,r10315@ Sigma1(x) (ROTR((x),14) ^ ROTR((x),18) ^ ROTR((x),41))316@ LO lo>>14^hi<<18 ^ lo>>18^hi<<14 ^ hi>>9^lo<<23317@ HI hi>>14^lo<<18 ^ hi>>18^lo<<14 ^ lo>>9^hi<<23318mov r9,r7,lsr#14319str r3,[sp,#64+0]320mov r10,r8,lsr#14321str r4,[sp,#64+4]322eor r9,r9,r8,lsl#18323ldr r11,[sp,#56+0] @ h.lo324eor r10,r10,r7,lsl#18325ldr r12,[sp,#56+4] @ h.hi326eor r9,r9,r7,lsr#18327eor r10,r10,r8,lsr#18328eor r9,r9,r8,lsl#14329eor r10,r10,r7,lsl#14330eor r9,r9,r8,lsr#9331eor r10,r10,r7,lsr#9332eor r9,r9,r7,lsl#23333eor r10,r10,r8,lsl#23 @ Sigma1(e)334adds r3,r3,r9335ldr r9,[sp,#40+0] @ f.lo336adc r4,r4,r10 @ T += Sigma1(e)337ldr r10,[sp,#40+4] @ f.hi338adds r3,r3,r11339ldr r11,[sp,#48+0] @ g.lo340adc r4,r4,r12 @ T += h341ldr r12,[sp,#48+4] @ g.hi342343eor r9,r9,r11344str r7,[sp,#32+0]345eor r10,r10,r12346str r8,[sp,#32+4]347and r9,r9,r7348str r5,[sp,#0+0]349and r10,r10,r8350str r6,[sp,#0+4]351eor r9,r9,r11352ldr r11,[r14,#LO] @ K[i].lo353eor r10,r10,r12 @ Ch(e,f,g)354ldr r12,[r14,#HI] @ K[i].hi355356adds r3,r3,r9357ldr r7,[sp,#24+0] @ d.lo358adc r4,r4,r10 @ T += Ch(e,f,g)359ldr r8,[sp,#24+4] @ d.hi360adds r3,r3,r11361and r9,r11,#0xff362adc r4,r4,r12 @ T += K[i]363adds r7,r7,r3364ldr r11,[sp,#8+0] @ b.lo365adc r8,r8,r4 @ d += T366teq r9,#23367368ldr r12,[sp,#16+0] @ c.lo369#ifdef __thumb2__370it eq @ Thumb2 thing, sanity check in ARM371#endif372orreq r14,r14,#1373@ Sigma0(x) (ROTR((x),28) ^ ROTR((x),34) ^ ROTR((x),39))374@ LO lo>>28^hi<<4 ^ hi>>2^lo<<30 ^ hi>>7^lo<<25375@ HI hi>>28^lo<<4 ^ lo>>2^hi<<30 ^ lo>>7^hi<<25376mov r9,r5,lsr#28377mov r10,r6,lsr#28378eor r9,r9,r6,lsl#4379eor r10,r10,r5,lsl#4380eor r9,r9,r6,lsr#2381eor r10,r10,r5,lsr#2382eor r9,r9,r5,lsl#30383eor r10,r10,r6,lsl#30384eor r9,r9,r6,lsr#7385eor r10,r10,r5,lsr#7386eor r9,r9,r5,lsl#25387eor r10,r10,r6,lsl#25 @ Sigma0(a)388adds r3,r3,r9389and r9,r5,r11390adc r4,r4,r10 @ T += Sigma0(a)391392ldr r10,[sp,#8+4] @ b.hi393orr r5,r5,r11394ldr r11,[sp,#16+4] @ c.hi395and r5,r5,r12396and r12,r6,r10397orr r6,r6,r10398orr r5,r5,r9 @ Maj(a,b,c).lo399and r6,r6,r11400adds r5,r5,r3401orr r6,r6,r12 @ Maj(a,b,c).hi402sub sp,sp,#8403adc r6,r6,r4 @ h += T404tst r14,#1405add r14,r14,#8406#ifdef __thumb2__407ittt eq @ Thumb2 thing, sanity check in ARM408#endif409ldreq r9,[sp,#184+0]410ldreq r10,[sp,#184+4]411beq .L16_79412bic r14,r14,#1413414ldr r3,[sp,#8+0]415ldr r4,[sp,#8+4]416ldr r9, [r0,#0+LO]417ldr r10, [r0,#0+HI]418ldr r11, [r0,#8+LO]419ldr r12, [r0,#8+HI]420adds r9,r5,r9421str r9, [r0,#0+LO]422adc r10,r6,r10423str r10, [r0,#0+HI]424adds r11,r3,r11425str r11, [r0,#8+LO]426adc r12,r4,r12427str r12, [r0,#8+HI]428429ldr r5,[sp,#16+0]430ldr r6,[sp,#16+4]431ldr r3,[sp,#24+0]432ldr r4,[sp,#24+4]433ldr r9, [r0,#16+LO]434ldr r10, [r0,#16+HI]435ldr r11, [r0,#24+LO]436ldr r12, [r0,#24+HI]437adds r9,r5,r9438str r9, [r0,#16+LO]439adc r10,r6,r10440str r10, [r0,#16+HI]441adds r11,r3,r11442str r11, [r0,#24+LO]443adc r12,r4,r12444str r12, [r0,#24+HI]445446ldr r3,[sp,#40+0]447ldr r4,[sp,#40+4]448ldr r9, [r0,#32+LO]449ldr r10, [r0,#32+HI]450ldr r11, [r0,#40+LO]451ldr r12, [r0,#40+HI]452adds r7,r7,r9453str r7,[r0,#32+LO]454adc r8,r8,r10455str r8,[r0,#32+HI]456adds r11,r3,r11457str r11, [r0,#40+LO]458adc r12,r4,r12459str r12, [r0,#40+HI]460461ldr r5,[sp,#48+0]462ldr r6,[sp,#48+4]463ldr r3,[sp,#56+0]464ldr r4,[sp,#56+4]465ldr r9, [r0,#48+LO]466ldr r10, [r0,#48+HI]467ldr r11, [r0,#56+LO]468ldr r12, [r0,#56+HI]469adds r9,r5,r9470str r9, [r0,#48+LO]471adc r10,r6,r10472str r10, [r0,#48+HI]473adds r11,r3,r11474str r11, [r0,#56+LO]475adc r12,r4,r12476str r12, [r0,#56+HI]477478add sp,sp,#640479sub r14,r14,#640480481teq r1,r2482bne .Loop483484add sp,sp,#8*9 @ destroy frame485486#if __ARM_ARCH__>=5487ldmia sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,pc}488#else489ldmia sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr}490tst lr,#1491moveq pc,lr @ be binary compatible with V4, yet492.word 0xe12fff1e @ interoperable with Thumb ISA:-)493#endif494.size zfs_sha512_block_armv7,.-zfs_sha512_block_armv7495496#if __ARM_ARCH__ >= 7497.arch armv7-a498.fpu neon499500.globl zfs_sha512_block_neon501.type zfs_sha512_block_neon,%function502.align 4503zfs_sha512_block_neon:504.LNEON:505dmb @ errata #451034 on early Cortex A8506add r2,r1,r2,lsl#7 @ len to point at the end of inp507adr r3,K512508VFP_ABI_PUSH509vldmia r0,{d16,d17,d18,d19,d20,d21,d22,d23} @ load context510.Loop_neon:511vshr.u64 d24,d20,#14 @ 0512#if 0<16513vld1.64 {d0},[r1]! @ handles unaligned514#endif515vshr.u64 d25,d20,#18516#if 0>0517vadd.i64 d16,d30 @ h+=Maj from the past518#endif519vshr.u64 d26,d20,#41520vld1.64 {d28},[r3,:64]! @ K[i++]521vsli.64 d24,d20,#50522vsli.64 d25,d20,#46523vmov d29,d20524vsli.64 d26,d20,#23525#if 0<16 && defined(__ARMEL__)526vrev64.8 d0,d0527#endif528veor d25,d24529vbsl d29,d21,d22 @ Ch(e,f,g)530vshr.u64 d24,d16,#28531veor d26,d25 @ Sigma1(e)532vadd.i64 d27,d29,d23533vshr.u64 d25,d16,#34534vsli.64 d24,d16,#36535vadd.i64 d27,d26536vshr.u64 d26,d16,#39537vadd.i64 d28,d0538vsli.64 d25,d16,#30539veor d30,d16,d17540vsli.64 d26,d16,#25541veor d23,d24,d25542vadd.i64 d27,d28543vbsl d30,d18,d17 @ Maj(a,b,c)544veor d23,d26 @ Sigma0(a)545vadd.i64 d19,d27546vadd.i64 d30,d27547@ vadd.i64 d23,d30548vshr.u64 d24,d19,#14 @ 1549#if 1<16550vld1.64 {d1},[r1]! @ handles unaligned551#endif552vshr.u64 d25,d19,#18553#if 1>0554vadd.i64 d23,d30 @ h+=Maj from the past555#endif556vshr.u64 d26,d19,#41557vld1.64 {d28},[r3,:64]! @ K[i++]558vsli.64 d24,d19,#50559vsli.64 d25,d19,#46560vmov d29,d19561vsli.64 d26,d19,#23562#if 1<16 && defined(__ARMEL__)563vrev64.8 d1,d1564#endif565veor d25,d24566vbsl d29,d20,d21 @ Ch(e,f,g)567vshr.u64 d24,d23,#28568veor d26,d25 @ Sigma1(e)569vadd.i64 d27,d29,d22570vshr.u64 d25,d23,#34571vsli.64 d24,d23,#36572vadd.i64 d27,d26573vshr.u64 d26,d23,#39574vadd.i64 d28,d1575vsli.64 d25,d23,#30576veor d30,d23,d16577vsli.64 d26,d23,#25578veor d22,d24,d25579vadd.i64 d27,d28580vbsl d30,d17,d16 @ Maj(a,b,c)581veor d22,d26 @ Sigma0(a)582vadd.i64 d18,d27583vadd.i64 d30,d27584@ vadd.i64 d22,d30585vshr.u64 d24,d18,#14 @ 2586#if 2<16587vld1.64 {d2},[r1]! @ handles unaligned588#endif589vshr.u64 d25,d18,#18590#if 2>0591vadd.i64 d22,d30 @ h+=Maj from the past592#endif593vshr.u64 d26,d18,#41594vld1.64 {d28},[r3,:64]! @ K[i++]595vsli.64 d24,d18,#50596vsli.64 d25,d18,#46597vmov d29,d18598vsli.64 d26,d18,#23599#if 2<16 && defined(__ARMEL__)600vrev64.8 d2,d2601#endif602veor d25,d24603vbsl d29,d19,d20 @ Ch(e,f,g)604vshr.u64 d24,d22,#28605veor d26,d25 @ Sigma1(e)606vadd.i64 d27,d29,d21607vshr.u64 d25,d22,#34608vsli.64 d24,d22,#36609vadd.i64 d27,d26610vshr.u64 d26,d22,#39611vadd.i64 d28,d2612vsli.64 d25,d22,#30613veor d30,d22,d23614vsli.64 d26,d22,#25615veor d21,d24,d25616vadd.i64 d27,d28617vbsl d30,d16,d23 @ Maj(a,b,c)618veor d21,d26 @ Sigma0(a)619vadd.i64 d17,d27620vadd.i64 d30,d27621@ vadd.i64 d21,d30622vshr.u64 d24,d17,#14 @ 3623#if 3<16624vld1.64 {d3},[r1]! @ handles unaligned625#endif626vshr.u64 d25,d17,#18627#if 3>0628vadd.i64 d21,d30 @ h+=Maj from the past629#endif630vshr.u64 d26,d17,#41631vld1.64 {d28},[r3,:64]! @ K[i++]632vsli.64 d24,d17,#50633vsli.64 d25,d17,#46634vmov d29,d17635vsli.64 d26,d17,#23636#if 3<16 && defined(__ARMEL__)637vrev64.8 d3,d3638#endif639veor d25,d24640vbsl d29,d18,d19 @ Ch(e,f,g)641vshr.u64 d24,d21,#28642veor d26,d25 @ Sigma1(e)643vadd.i64 d27,d29,d20644vshr.u64 d25,d21,#34645vsli.64 d24,d21,#36646vadd.i64 d27,d26647vshr.u64 d26,d21,#39648vadd.i64 d28,d3649vsli.64 d25,d21,#30650veor d30,d21,d22651vsli.64 d26,d21,#25652veor d20,d24,d25653vadd.i64 d27,d28654vbsl d30,d23,d22 @ Maj(a,b,c)655veor d20,d26 @ Sigma0(a)656vadd.i64 d16,d27657vadd.i64 d30,d27658@ vadd.i64 d20,d30659vshr.u64 d24,d16,#14 @ 4660#if 4<16661vld1.64 {d4},[r1]! @ handles unaligned662#endif663vshr.u64 d25,d16,#18664#if 4>0665vadd.i64 d20,d30 @ h+=Maj from the past666#endif667vshr.u64 d26,d16,#41668vld1.64 {d28},[r3,:64]! @ K[i++]669vsli.64 d24,d16,#50670vsli.64 d25,d16,#46671vmov d29,d16672vsli.64 d26,d16,#23673#if 4<16 && defined(__ARMEL__)674vrev64.8 d4,d4675#endif676veor d25,d24677vbsl d29,d17,d18 @ Ch(e,f,g)678vshr.u64 d24,d20,#28679veor d26,d25 @ Sigma1(e)680vadd.i64 d27,d29,d19681vshr.u64 d25,d20,#34682vsli.64 d24,d20,#36683vadd.i64 d27,d26684vshr.u64 d26,d20,#39685vadd.i64 d28,d4686vsli.64 d25,d20,#30687veor d30,d20,d21688vsli.64 d26,d20,#25689veor d19,d24,d25690vadd.i64 d27,d28691vbsl d30,d22,d21 @ Maj(a,b,c)692veor d19,d26 @ Sigma0(a)693vadd.i64 d23,d27694vadd.i64 d30,d27695@ vadd.i64 d19,d30696vshr.u64 d24,d23,#14 @ 5697#if 5<16698vld1.64 {d5},[r1]! @ handles unaligned699#endif700vshr.u64 d25,d23,#18701#if 5>0702vadd.i64 d19,d30 @ h+=Maj from the past703#endif704vshr.u64 d26,d23,#41705vld1.64 {d28},[r3,:64]! @ K[i++]706vsli.64 d24,d23,#50707vsli.64 d25,d23,#46708vmov d29,d23709vsli.64 d26,d23,#23710#if 5<16 && defined(__ARMEL__)711vrev64.8 d5,d5712#endif713veor d25,d24714vbsl d29,d16,d17 @ Ch(e,f,g)715vshr.u64 d24,d19,#28716veor d26,d25 @ Sigma1(e)717vadd.i64 d27,d29,d18718vshr.u64 d25,d19,#34719vsli.64 d24,d19,#36720vadd.i64 d27,d26721vshr.u64 d26,d19,#39722vadd.i64 d28,d5723vsli.64 d25,d19,#30724veor d30,d19,d20725vsli.64 d26,d19,#25726veor d18,d24,d25727vadd.i64 d27,d28728vbsl d30,d21,d20 @ Maj(a,b,c)729veor d18,d26 @ Sigma0(a)730vadd.i64 d22,d27731vadd.i64 d30,d27732@ vadd.i64 d18,d30733vshr.u64 d24,d22,#14 @ 6734#if 6<16735vld1.64 {d6},[r1]! @ handles unaligned736#endif737vshr.u64 d25,d22,#18738#if 6>0739vadd.i64 d18,d30 @ h+=Maj from the past740#endif741vshr.u64 d26,d22,#41742vld1.64 {d28},[r3,:64]! @ K[i++]743vsli.64 d24,d22,#50744vsli.64 d25,d22,#46745vmov d29,d22746vsli.64 d26,d22,#23747#if 6<16 && defined(__ARMEL__)748vrev64.8 d6,d6749#endif750veor d25,d24751vbsl d29,d23,d16 @ Ch(e,f,g)752vshr.u64 d24,d18,#28753veor d26,d25 @ Sigma1(e)754vadd.i64 d27,d29,d17755vshr.u64 d25,d18,#34756vsli.64 d24,d18,#36757vadd.i64 d27,d26758vshr.u64 d26,d18,#39759vadd.i64 d28,d6760vsli.64 d25,d18,#30761veor d30,d18,d19762vsli.64 d26,d18,#25763veor d17,d24,d25764vadd.i64 d27,d28765vbsl d30,d20,d19 @ Maj(a,b,c)766veor d17,d26 @ Sigma0(a)767vadd.i64 d21,d27768vadd.i64 d30,d27769@ vadd.i64 d17,d30770vshr.u64 d24,d21,#14 @ 7771#if 7<16772vld1.64 {d7},[r1]! @ handles unaligned773#endif774vshr.u64 d25,d21,#18775#if 7>0776vadd.i64 d17,d30 @ h+=Maj from the past777#endif778vshr.u64 d26,d21,#41779vld1.64 {d28},[r3,:64]! @ K[i++]780vsli.64 d24,d21,#50781vsli.64 d25,d21,#46782vmov d29,d21783vsli.64 d26,d21,#23784#if 7<16 && defined(__ARMEL__)785vrev64.8 d7,d7786#endif787veor d25,d24788vbsl d29,d22,d23 @ Ch(e,f,g)789vshr.u64 d24,d17,#28790veor d26,d25 @ Sigma1(e)791vadd.i64 d27,d29,d16792vshr.u64 d25,d17,#34793vsli.64 d24,d17,#36794vadd.i64 d27,d26795vshr.u64 d26,d17,#39796vadd.i64 d28,d7797vsli.64 d25,d17,#30798veor d30,d17,d18799vsli.64 d26,d17,#25800veor d16,d24,d25801vadd.i64 d27,d28802vbsl d30,d19,d18 @ Maj(a,b,c)803veor d16,d26 @ Sigma0(a)804vadd.i64 d20,d27805vadd.i64 d30,d27806@ vadd.i64 d16,d30807vshr.u64 d24,d20,#14 @ 8808#if 8<16809vld1.64 {d8},[r1]! @ handles unaligned810#endif811vshr.u64 d25,d20,#18812#if 8>0813vadd.i64 d16,d30 @ h+=Maj from the past814#endif815vshr.u64 d26,d20,#41816vld1.64 {d28},[r3,:64]! @ K[i++]817vsli.64 d24,d20,#50818vsli.64 d25,d20,#46819vmov d29,d20820vsli.64 d26,d20,#23821#if 8<16 && defined(__ARMEL__)822vrev64.8 d8,d8823#endif824veor d25,d24825vbsl d29,d21,d22 @ Ch(e,f,g)826vshr.u64 d24,d16,#28827veor d26,d25 @ Sigma1(e)828vadd.i64 d27,d29,d23829vshr.u64 d25,d16,#34830vsli.64 d24,d16,#36831vadd.i64 d27,d26832vshr.u64 d26,d16,#39833vadd.i64 d28,d8834vsli.64 d25,d16,#30835veor d30,d16,d17836vsli.64 d26,d16,#25837veor d23,d24,d25838vadd.i64 d27,d28839vbsl d30,d18,d17 @ Maj(a,b,c)840veor d23,d26 @ Sigma0(a)841vadd.i64 d19,d27842vadd.i64 d30,d27843@ vadd.i64 d23,d30844vshr.u64 d24,d19,#14 @ 9845#if 9<16846vld1.64 {d9},[r1]! @ handles unaligned847#endif848vshr.u64 d25,d19,#18849#if 9>0850vadd.i64 d23,d30 @ h+=Maj from the past851#endif852vshr.u64 d26,d19,#41853vld1.64 {d28},[r3,:64]! @ K[i++]854vsli.64 d24,d19,#50855vsli.64 d25,d19,#46856vmov d29,d19857vsli.64 d26,d19,#23858#if 9<16 && defined(__ARMEL__)859vrev64.8 d9,d9860#endif861veor d25,d24862vbsl d29,d20,d21 @ Ch(e,f,g)863vshr.u64 d24,d23,#28864veor d26,d25 @ Sigma1(e)865vadd.i64 d27,d29,d22866vshr.u64 d25,d23,#34867vsli.64 d24,d23,#36868vadd.i64 d27,d26869vshr.u64 d26,d23,#39870vadd.i64 d28,d9871vsli.64 d25,d23,#30872veor d30,d23,d16873vsli.64 d26,d23,#25874veor d22,d24,d25875vadd.i64 d27,d28876vbsl d30,d17,d16 @ Maj(a,b,c)877veor d22,d26 @ Sigma0(a)878vadd.i64 d18,d27879vadd.i64 d30,d27880@ vadd.i64 d22,d30881vshr.u64 d24,d18,#14 @ 10882#if 10<16883vld1.64 {d10},[r1]! @ handles unaligned884#endif885vshr.u64 d25,d18,#18886#if 10>0887vadd.i64 d22,d30 @ h+=Maj from the past888#endif889vshr.u64 d26,d18,#41890vld1.64 {d28},[r3,:64]! @ K[i++]891vsli.64 d24,d18,#50892vsli.64 d25,d18,#46893vmov d29,d18894vsli.64 d26,d18,#23895#if 10<16 && defined(__ARMEL__)896vrev64.8 d10,d10897#endif898veor d25,d24899vbsl d29,d19,d20 @ Ch(e,f,g)900vshr.u64 d24,d22,#28901veor d26,d25 @ Sigma1(e)902vadd.i64 d27,d29,d21903vshr.u64 d25,d22,#34904vsli.64 d24,d22,#36905vadd.i64 d27,d26906vshr.u64 d26,d22,#39907vadd.i64 d28,d10908vsli.64 d25,d22,#30909veor d30,d22,d23910vsli.64 d26,d22,#25911veor d21,d24,d25912vadd.i64 d27,d28913vbsl d30,d16,d23 @ Maj(a,b,c)914veor d21,d26 @ Sigma0(a)915vadd.i64 d17,d27916vadd.i64 d30,d27917@ vadd.i64 d21,d30918vshr.u64 d24,d17,#14 @ 11919#if 11<16920vld1.64 {d11},[r1]! @ handles unaligned921#endif922vshr.u64 d25,d17,#18923#if 11>0924vadd.i64 d21,d30 @ h+=Maj from the past925#endif926vshr.u64 d26,d17,#41927vld1.64 {d28},[r3,:64]! @ K[i++]928vsli.64 d24,d17,#50929vsli.64 d25,d17,#46930vmov d29,d17931vsli.64 d26,d17,#23932#if 11<16 && defined(__ARMEL__)933vrev64.8 d11,d11934#endif935veor d25,d24936vbsl d29,d18,d19 @ Ch(e,f,g)937vshr.u64 d24,d21,#28938veor d26,d25 @ Sigma1(e)939vadd.i64 d27,d29,d20940vshr.u64 d25,d21,#34941vsli.64 d24,d21,#36942vadd.i64 d27,d26943vshr.u64 d26,d21,#39944vadd.i64 d28,d11945vsli.64 d25,d21,#30946veor d30,d21,d22947vsli.64 d26,d21,#25948veor d20,d24,d25949vadd.i64 d27,d28950vbsl d30,d23,d22 @ Maj(a,b,c)951veor d20,d26 @ Sigma0(a)952vadd.i64 d16,d27953vadd.i64 d30,d27954@ vadd.i64 d20,d30955vshr.u64 d24,d16,#14 @ 12956#if 12<16957vld1.64 {d12},[r1]! @ handles unaligned958#endif959vshr.u64 d25,d16,#18960#if 12>0961vadd.i64 d20,d30 @ h+=Maj from the past962#endif963vshr.u64 d26,d16,#41964vld1.64 {d28},[r3,:64]! @ K[i++]965vsli.64 d24,d16,#50966vsli.64 d25,d16,#46967vmov d29,d16968vsli.64 d26,d16,#23969#if 12<16 && defined(__ARMEL__)970vrev64.8 d12,d12971#endif972veor d25,d24973vbsl d29,d17,d18 @ Ch(e,f,g)974vshr.u64 d24,d20,#28975veor d26,d25 @ Sigma1(e)976vadd.i64 d27,d29,d19977vshr.u64 d25,d20,#34978vsli.64 d24,d20,#36979vadd.i64 d27,d26980vshr.u64 d26,d20,#39981vadd.i64 d28,d12982vsli.64 d25,d20,#30983veor d30,d20,d21984vsli.64 d26,d20,#25985veor d19,d24,d25986vadd.i64 d27,d28987vbsl d30,d22,d21 @ Maj(a,b,c)988veor d19,d26 @ Sigma0(a)989vadd.i64 d23,d27990vadd.i64 d30,d27991@ vadd.i64 d19,d30992vshr.u64 d24,d23,#14 @ 13993#if 13<16994vld1.64 {d13},[r1]! @ handles unaligned995#endif996vshr.u64 d25,d23,#18997#if 13>0998vadd.i64 d19,d30 @ h+=Maj from the past999#endif1000vshr.u64 d26,d23,#411001vld1.64 {d28},[r3,:64]! @ K[i++]1002vsli.64 d24,d23,#501003vsli.64 d25,d23,#461004vmov d29,d231005vsli.64 d26,d23,#231006#if 13<16 && defined(__ARMEL__)1007vrev64.8 d13,d131008#endif1009veor d25,d241010vbsl d29,d16,d17 @ Ch(e,f,g)1011vshr.u64 d24,d19,#281012veor d26,d25 @ Sigma1(e)1013vadd.i64 d27,d29,d181014vshr.u64 d25,d19,#341015vsli.64 d24,d19,#361016vadd.i64 d27,d261017vshr.u64 d26,d19,#391018vadd.i64 d28,d131019vsli.64 d25,d19,#301020veor d30,d19,d201021vsli.64 d26,d19,#251022veor d18,d24,d251023vadd.i64 d27,d281024vbsl d30,d21,d20 @ Maj(a,b,c)1025veor d18,d26 @ Sigma0(a)1026vadd.i64 d22,d271027vadd.i64 d30,d271028@ vadd.i64 d18,d301029vshr.u64 d24,d22,#14 @ 141030#if 14<161031vld1.64 {d14},[r1]! @ handles unaligned1032#endif1033vshr.u64 d25,d22,#181034#if 14>01035vadd.i64 d18,d30 @ h+=Maj from the past1036#endif1037vshr.u64 d26,d22,#411038vld1.64 {d28},[r3,:64]! @ K[i++]1039vsli.64 d24,d22,#501040vsli.64 d25,d22,#461041vmov d29,d221042vsli.64 d26,d22,#231043#if 14<16 && defined(__ARMEL__)1044vrev64.8 d14,d141045#endif1046veor d25,d241047vbsl d29,d23,d16 @ Ch(e,f,g)1048vshr.u64 d24,d18,#281049veor d26,d25 @ Sigma1(e)1050vadd.i64 d27,d29,d171051vshr.u64 d25,d18,#341052vsli.64 d24,d18,#361053vadd.i64 d27,d261054vshr.u64 d26,d18,#391055vadd.i64 d28,d141056vsli.64 d25,d18,#301057veor d30,d18,d191058vsli.64 d26,d18,#251059veor d17,d24,d251060vadd.i64 d27,d281061vbsl d30,d20,d19 @ Maj(a,b,c)1062veor d17,d26 @ Sigma0(a)1063vadd.i64 d21,d271064vadd.i64 d30,d271065@ vadd.i64 d17,d301066vshr.u64 d24,d21,#14 @ 151067#if 15<161068vld1.64 {d15},[r1]! @ handles unaligned1069#endif1070vshr.u64 d25,d21,#181071#if 15>01072vadd.i64 d17,d30 @ h+=Maj from the past1073#endif1074vshr.u64 d26,d21,#411075vld1.64 {d28},[r3,:64]! @ K[i++]1076vsli.64 d24,d21,#501077vsli.64 d25,d21,#461078vmov d29,d211079vsli.64 d26,d21,#231080#if 15<16 && defined(__ARMEL__)1081vrev64.8 d15,d151082#endif1083veor d25,d241084vbsl d29,d22,d23 @ Ch(e,f,g)1085vshr.u64 d24,d17,#281086veor d26,d25 @ Sigma1(e)1087vadd.i64 d27,d29,d161088vshr.u64 d25,d17,#341089vsli.64 d24,d17,#361090vadd.i64 d27,d261091vshr.u64 d26,d17,#391092vadd.i64 d28,d151093vsli.64 d25,d17,#301094veor d30,d17,d181095vsli.64 d26,d17,#251096veor d16,d24,d251097vadd.i64 d27,d281098vbsl d30,d19,d18 @ Maj(a,b,c)1099veor d16,d26 @ Sigma0(a)1100vadd.i64 d20,d271101vadd.i64 d30,d271102@ vadd.i64 d16,d301103mov r12,#41104.L16_79_neon:1105subs r12,#11106vshr.u64 q12,q7,#191107vshr.u64 q13,q7,#611108vadd.i64 d16,d30 @ h+=Maj from the past1109vshr.u64 q15,q7,#61110vsli.64 q12,q7,#451111vext.8 q14,q0,q1,#8 @ X[i+1]1112vsli.64 q13,q7,#31113veor q15,q121114vshr.u64 q12,q14,#11115veor q15,q13 @ sigma1(X[i+14])1116vshr.u64 q13,q14,#81117vadd.i64 q0,q151118vshr.u64 q15,q14,#71119vsli.64 q12,q14,#631120vsli.64 q13,q14,#561121vext.8 q14,q4,q5,#8 @ X[i+9]1122veor q15,q121123vshr.u64 d24,d20,#14 @ from NEON_00_151124vadd.i64 q0,q141125vshr.u64 d25,d20,#18 @ from NEON_00_151126veor q15,q13 @ sigma0(X[i+1])1127vshr.u64 d26,d20,#41 @ from NEON_00_151128vadd.i64 q0,q151129vld1.64 {d28},[r3,:64]! @ K[i++]1130vsli.64 d24,d20,#501131vsli.64 d25,d20,#461132vmov d29,d201133vsli.64 d26,d20,#231134#if 16<16 && defined(__ARMEL__)1135vrev64.8 ,1136#endif1137veor d25,d241138vbsl d29,d21,d22 @ Ch(e,f,g)1139vshr.u64 d24,d16,#281140veor d26,d25 @ Sigma1(e)1141vadd.i64 d27,d29,d231142vshr.u64 d25,d16,#341143vsli.64 d24,d16,#361144vadd.i64 d27,d261145vshr.u64 d26,d16,#391146vadd.i64 d28,d01147vsli.64 d25,d16,#301148veor d30,d16,d171149vsli.64 d26,d16,#251150veor d23,d24,d251151vadd.i64 d27,d281152vbsl d30,d18,d17 @ Maj(a,b,c)1153veor d23,d26 @ Sigma0(a)1154vadd.i64 d19,d271155vadd.i64 d30,d271156@ vadd.i64 d23,d301157vshr.u64 d24,d19,#14 @ 171158#if 17<161159vld1.64 {d1},[r1]! @ handles unaligned1160#endif1161vshr.u64 d25,d19,#181162#if 17>01163vadd.i64 d23,d30 @ h+=Maj from the past1164#endif1165vshr.u64 d26,d19,#411166vld1.64 {d28},[r3,:64]! @ K[i++]1167vsli.64 d24,d19,#501168vsli.64 d25,d19,#461169vmov d29,d191170vsli.64 d26,d19,#231171#if 17<16 && defined(__ARMEL__)1172vrev64.8 ,1173#endif1174veor d25,d241175vbsl d29,d20,d21 @ Ch(e,f,g)1176vshr.u64 d24,d23,#281177veor d26,d25 @ Sigma1(e)1178vadd.i64 d27,d29,d221179vshr.u64 d25,d23,#341180vsli.64 d24,d23,#361181vadd.i64 d27,d261182vshr.u64 d26,d23,#391183vadd.i64 d28,d11184vsli.64 d25,d23,#301185veor d30,d23,d161186vsli.64 d26,d23,#251187veor d22,d24,d251188vadd.i64 d27,d281189vbsl d30,d17,d16 @ Maj(a,b,c)1190veor d22,d26 @ Sigma0(a)1191vadd.i64 d18,d271192vadd.i64 d30,d271193@ vadd.i64 d22,d301194vshr.u64 q12,q0,#191195vshr.u64 q13,q0,#611196vadd.i64 d22,d30 @ h+=Maj from the past1197vshr.u64 q15,q0,#61198vsli.64 q12,q0,#451199vext.8 q14,q1,q2,#8 @ X[i+1]1200vsli.64 q13,q0,#31201veor q15,q121202vshr.u64 q12,q14,#11203veor q15,q13 @ sigma1(X[i+14])1204vshr.u64 q13,q14,#81205vadd.i64 q1,q151206vshr.u64 q15,q14,#71207vsli.64 q12,q14,#631208vsli.64 q13,q14,#561209vext.8 q14,q5,q6,#8 @ X[i+9]1210veor q15,q121211vshr.u64 d24,d18,#14 @ from NEON_00_151212vadd.i64 q1,q141213vshr.u64 d25,d18,#18 @ from NEON_00_151214veor q15,q13 @ sigma0(X[i+1])1215vshr.u64 d26,d18,#41 @ from NEON_00_151216vadd.i64 q1,q151217vld1.64 {d28},[r3,:64]! @ K[i++]1218vsli.64 d24,d18,#501219vsli.64 d25,d18,#461220vmov d29,d181221vsli.64 d26,d18,#231222#if 18<16 && defined(__ARMEL__)1223vrev64.8 ,1224#endif1225veor d25,d241226vbsl d29,d19,d20 @ Ch(e,f,g)1227vshr.u64 d24,d22,#281228veor d26,d25 @ Sigma1(e)1229vadd.i64 d27,d29,d211230vshr.u64 d25,d22,#341231vsli.64 d24,d22,#361232vadd.i64 d27,d261233vshr.u64 d26,d22,#391234vadd.i64 d28,d21235vsli.64 d25,d22,#301236veor d30,d22,d231237vsli.64 d26,d22,#251238veor d21,d24,d251239vadd.i64 d27,d281240vbsl d30,d16,d23 @ Maj(a,b,c)1241veor d21,d26 @ Sigma0(a)1242vadd.i64 d17,d271243vadd.i64 d30,d271244@ vadd.i64 d21,d301245vshr.u64 d24,d17,#14 @ 191246#if 19<161247vld1.64 {d3},[r1]! @ handles unaligned1248#endif1249vshr.u64 d25,d17,#181250#if 19>01251vadd.i64 d21,d30 @ h+=Maj from the past1252#endif1253vshr.u64 d26,d17,#411254vld1.64 {d28},[r3,:64]! @ K[i++]1255vsli.64 d24,d17,#501256vsli.64 d25,d17,#461257vmov d29,d171258vsli.64 d26,d17,#231259#if 19<16 && defined(__ARMEL__)1260vrev64.8 ,1261#endif1262veor d25,d241263vbsl d29,d18,d19 @ Ch(e,f,g)1264vshr.u64 d24,d21,#281265veor d26,d25 @ Sigma1(e)1266vadd.i64 d27,d29,d201267vshr.u64 d25,d21,#341268vsli.64 d24,d21,#361269vadd.i64 d27,d261270vshr.u64 d26,d21,#391271vadd.i64 d28,d31272vsli.64 d25,d21,#301273veor d30,d21,d221274vsli.64 d26,d21,#251275veor d20,d24,d251276vadd.i64 d27,d281277vbsl d30,d23,d22 @ Maj(a,b,c)1278veor d20,d26 @ Sigma0(a)1279vadd.i64 d16,d271280vadd.i64 d30,d271281@ vadd.i64 d20,d301282vshr.u64 q12,q1,#191283vshr.u64 q13,q1,#611284vadd.i64 d20,d30 @ h+=Maj from the past1285vshr.u64 q15,q1,#61286vsli.64 q12,q1,#451287vext.8 q14,q2,q3,#8 @ X[i+1]1288vsli.64 q13,q1,#31289veor q15,q121290vshr.u64 q12,q14,#11291veor q15,q13 @ sigma1(X[i+14])1292vshr.u64 q13,q14,#81293vadd.i64 q2,q151294vshr.u64 q15,q14,#71295vsli.64 q12,q14,#631296vsli.64 q13,q14,#561297vext.8 q14,q6,q7,#8 @ X[i+9]1298veor q15,q121299vshr.u64 d24,d16,#14 @ from NEON_00_151300vadd.i64 q2,q141301vshr.u64 d25,d16,#18 @ from NEON_00_151302veor q15,q13 @ sigma0(X[i+1])1303vshr.u64 d26,d16,#41 @ from NEON_00_151304vadd.i64 q2,q151305vld1.64 {d28},[r3,:64]! @ K[i++]1306vsli.64 d24,d16,#501307vsli.64 d25,d16,#461308vmov d29,d161309vsli.64 d26,d16,#231310#if 20<16 && defined(__ARMEL__)1311vrev64.8 ,1312#endif1313veor d25,d241314vbsl d29,d17,d18 @ Ch(e,f,g)1315vshr.u64 d24,d20,#281316veor d26,d25 @ Sigma1(e)1317vadd.i64 d27,d29,d191318vshr.u64 d25,d20,#341319vsli.64 d24,d20,#361320vadd.i64 d27,d261321vshr.u64 d26,d20,#391322vadd.i64 d28,d41323vsli.64 d25,d20,#301324veor d30,d20,d211325vsli.64 d26,d20,#251326veor d19,d24,d251327vadd.i64 d27,d281328vbsl d30,d22,d21 @ Maj(a,b,c)1329veor d19,d26 @ Sigma0(a)1330vadd.i64 d23,d271331vadd.i64 d30,d271332@ vadd.i64 d19,d301333vshr.u64 d24,d23,#14 @ 211334#if 21<161335vld1.64 {d5},[r1]! @ handles unaligned1336#endif1337vshr.u64 d25,d23,#181338#if 21>01339vadd.i64 d19,d30 @ h+=Maj from the past1340#endif1341vshr.u64 d26,d23,#411342vld1.64 {d28},[r3,:64]! @ K[i++]1343vsli.64 d24,d23,#501344vsli.64 d25,d23,#461345vmov d29,d231346vsli.64 d26,d23,#231347#if 21<16 && defined(__ARMEL__)1348vrev64.8 ,1349#endif1350veor d25,d241351vbsl d29,d16,d17 @ Ch(e,f,g)1352vshr.u64 d24,d19,#281353veor d26,d25 @ Sigma1(e)1354vadd.i64 d27,d29,d181355vshr.u64 d25,d19,#341356vsli.64 d24,d19,#361357vadd.i64 d27,d261358vshr.u64 d26,d19,#391359vadd.i64 d28,d51360vsli.64 d25,d19,#301361veor d30,d19,d201362vsli.64 d26,d19,#251363veor d18,d24,d251364vadd.i64 d27,d281365vbsl d30,d21,d20 @ Maj(a,b,c)1366veor d18,d26 @ Sigma0(a)1367vadd.i64 d22,d271368vadd.i64 d30,d271369@ vadd.i64 d18,d301370vshr.u64 q12,q2,#191371vshr.u64 q13,q2,#611372vadd.i64 d18,d30 @ h+=Maj from the past1373vshr.u64 q15,q2,#61374vsli.64 q12,q2,#451375vext.8 q14,q3,q4,#8 @ X[i+1]1376vsli.64 q13,q2,#31377veor q15,q121378vshr.u64 q12,q14,#11379veor q15,q13 @ sigma1(X[i+14])1380vshr.u64 q13,q14,#81381vadd.i64 q3,q151382vshr.u64 q15,q14,#71383vsli.64 q12,q14,#631384vsli.64 q13,q14,#561385vext.8 q14,q7,q0,#8 @ X[i+9]1386veor q15,q121387vshr.u64 d24,d22,#14 @ from NEON_00_151388vadd.i64 q3,q141389vshr.u64 d25,d22,#18 @ from NEON_00_151390veor q15,q13 @ sigma0(X[i+1])1391vshr.u64 d26,d22,#41 @ from NEON_00_151392vadd.i64 q3,q151393vld1.64 {d28},[r3,:64]! @ K[i++]1394vsli.64 d24,d22,#501395vsli.64 d25,d22,#461396vmov d29,d221397vsli.64 d26,d22,#231398#if 22<16 && defined(__ARMEL__)1399vrev64.8 ,1400#endif1401veor d25,d241402vbsl d29,d23,d16 @ Ch(e,f,g)1403vshr.u64 d24,d18,#281404veor d26,d25 @ Sigma1(e)1405vadd.i64 d27,d29,d171406vshr.u64 d25,d18,#341407vsli.64 d24,d18,#361408vadd.i64 d27,d261409vshr.u64 d26,d18,#391410vadd.i64 d28,d61411vsli.64 d25,d18,#301412veor d30,d18,d191413vsli.64 d26,d18,#251414veor d17,d24,d251415vadd.i64 d27,d281416vbsl d30,d20,d19 @ Maj(a,b,c)1417veor d17,d26 @ Sigma0(a)1418vadd.i64 d21,d271419vadd.i64 d30,d271420@ vadd.i64 d17,d301421vshr.u64 d24,d21,#14 @ 231422#if 23<161423vld1.64 {d7},[r1]! @ handles unaligned1424#endif1425vshr.u64 d25,d21,#181426#if 23>01427vadd.i64 d17,d30 @ h+=Maj from the past1428#endif1429vshr.u64 d26,d21,#411430vld1.64 {d28},[r3,:64]! @ K[i++]1431vsli.64 d24,d21,#501432vsli.64 d25,d21,#461433vmov d29,d211434vsli.64 d26,d21,#231435#if 23<16 && defined(__ARMEL__)1436vrev64.8 ,1437#endif1438veor d25,d241439vbsl d29,d22,d23 @ Ch(e,f,g)1440vshr.u64 d24,d17,#281441veor d26,d25 @ Sigma1(e)1442vadd.i64 d27,d29,d161443vshr.u64 d25,d17,#341444vsli.64 d24,d17,#361445vadd.i64 d27,d261446vshr.u64 d26,d17,#391447vadd.i64 d28,d71448vsli.64 d25,d17,#301449veor d30,d17,d181450vsli.64 d26,d17,#251451veor d16,d24,d251452vadd.i64 d27,d281453vbsl d30,d19,d18 @ Maj(a,b,c)1454veor d16,d26 @ Sigma0(a)1455vadd.i64 d20,d271456vadd.i64 d30,d271457@ vadd.i64 d16,d301458vshr.u64 q12,q3,#191459vshr.u64 q13,q3,#611460vadd.i64 d16,d30 @ h+=Maj from the past1461vshr.u64 q15,q3,#61462vsli.64 q12,q3,#451463vext.8 q14,q4,q5,#8 @ X[i+1]1464vsli.64 q13,q3,#31465veor q15,q121466vshr.u64 q12,q14,#11467veor q15,q13 @ sigma1(X[i+14])1468vshr.u64 q13,q14,#81469vadd.i64 q4,q151470vshr.u64 q15,q14,#71471vsli.64 q12,q14,#631472vsli.64 q13,q14,#561473vext.8 q14,q0,q1,#8 @ X[i+9]1474veor q15,q121475vshr.u64 d24,d20,#14 @ from NEON_00_151476vadd.i64 q4,q141477vshr.u64 d25,d20,#18 @ from NEON_00_151478veor q15,q13 @ sigma0(X[i+1])1479vshr.u64 d26,d20,#41 @ from NEON_00_151480vadd.i64 q4,q151481vld1.64 {d28},[r3,:64]! @ K[i++]1482vsli.64 d24,d20,#501483vsli.64 d25,d20,#461484vmov d29,d201485vsli.64 d26,d20,#231486#if 24<16 && defined(__ARMEL__)1487vrev64.8 ,1488#endif1489veor d25,d241490vbsl d29,d21,d22 @ Ch(e,f,g)1491vshr.u64 d24,d16,#281492veor d26,d25 @ Sigma1(e)1493vadd.i64 d27,d29,d231494vshr.u64 d25,d16,#341495vsli.64 d24,d16,#361496vadd.i64 d27,d261497vshr.u64 d26,d16,#391498vadd.i64 d28,d81499vsli.64 d25,d16,#301500veor d30,d16,d171501vsli.64 d26,d16,#251502veor d23,d24,d251503vadd.i64 d27,d281504vbsl d30,d18,d17 @ Maj(a,b,c)1505veor d23,d26 @ Sigma0(a)1506vadd.i64 d19,d271507vadd.i64 d30,d271508@ vadd.i64 d23,d301509vshr.u64 d24,d19,#14 @ 251510#if 25<161511vld1.64 {d9},[r1]! @ handles unaligned1512#endif1513vshr.u64 d25,d19,#181514#if 25>01515vadd.i64 d23,d30 @ h+=Maj from the past1516#endif1517vshr.u64 d26,d19,#411518vld1.64 {d28},[r3,:64]! @ K[i++]1519vsli.64 d24,d19,#501520vsli.64 d25,d19,#461521vmov d29,d191522vsli.64 d26,d19,#231523#if 25<16 && defined(__ARMEL__)1524vrev64.8 ,1525#endif1526veor d25,d241527vbsl d29,d20,d21 @ Ch(e,f,g)1528vshr.u64 d24,d23,#281529veor d26,d25 @ Sigma1(e)1530vadd.i64 d27,d29,d221531vshr.u64 d25,d23,#341532vsli.64 d24,d23,#361533vadd.i64 d27,d261534vshr.u64 d26,d23,#391535vadd.i64 d28,d91536vsli.64 d25,d23,#301537veor d30,d23,d161538vsli.64 d26,d23,#251539veor d22,d24,d251540vadd.i64 d27,d281541vbsl d30,d17,d16 @ Maj(a,b,c)1542veor d22,d26 @ Sigma0(a)1543vadd.i64 d18,d271544vadd.i64 d30,d271545@ vadd.i64 d22,d301546vshr.u64 q12,q4,#191547vshr.u64 q13,q4,#611548vadd.i64 d22,d30 @ h+=Maj from the past1549vshr.u64 q15,q4,#61550vsli.64 q12,q4,#451551vext.8 q14,q5,q6,#8 @ X[i+1]1552vsli.64 q13,q4,#31553veor q15,q121554vshr.u64 q12,q14,#11555veor q15,q13 @ sigma1(X[i+14])1556vshr.u64 q13,q14,#81557vadd.i64 q5,q151558vshr.u64 q15,q14,#71559vsli.64 q12,q14,#631560vsli.64 q13,q14,#561561vext.8 q14,q1,q2,#8 @ X[i+9]1562veor q15,q121563vshr.u64 d24,d18,#14 @ from NEON_00_151564vadd.i64 q5,q141565vshr.u64 d25,d18,#18 @ from NEON_00_151566veor q15,q13 @ sigma0(X[i+1])1567vshr.u64 d26,d18,#41 @ from NEON_00_151568vadd.i64 q5,q151569vld1.64 {d28},[r3,:64]! @ K[i++]1570vsli.64 d24,d18,#501571vsli.64 d25,d18,#461572vmov d29,d181573vsli.64 d26,d18,#231574#if 26<16 && defined(__ARMEL__)1575vrev64.8 ,1576#endif1577veor d25,d241578vbsl d29,d19,d20 @ Ch(e,f,g)1579vshr.u64 d24,d22,#281580veor d26,d25 @ Sigma1(e)1581vadd.i64 d27,d29,d211582vshr.u64 d25,d22,#341583vsli.64 d24,d22,#361584vadd.i64 d27,d261585vshr.u64 d26,d22,#391586vadd.i64 d28,d101587vsli.64 d25,d22,#301588veor d30,d22,d231589vsli.64 d26,d22,#251590veor d21,d24,d251591vadd.i64 d27,d281592vbsl d30,d16,d23 @ Maj(a,b,c)1593veor d21,d26 @ Sigma0(a)1594vadd.i64 d17,d271595vadd.i64 d30,d271596@ vadd.i64 d21,d301597vshr.u64 d24,d17,#14 @ 271598#if 27<161599vld1.64 {d11},[r1]! @ handles unaligned1600#endif1601vshr.u64 d25,d17,#181602#if 27>01603vadd.i64 d21,d30 @ h+=Maj from the past1604#endif1605vshr.u64 d26,d17,#411606vld1.64 {d28},[r3,:64]! @ K[i++]1607vsli.64 d24,d17,#501608vsli.64 d25,d17,#461609vmov d29,d171610vsli.64 d26,d17,#231611#if 27<16 && defined(__ARMEL__)1612vrev64.8 ,1613#endif1614veor d25,d241615vbsl d29,d18,d19 @ Ch(e,f,g)1616vshr.u64 d24,d21,#281617veor d26,d25 @ Sigma1(e)1618vadd.i64 d27,d29,d201619vshr.u64 d25,d21,#341620vsli.64 d24,d21,#361621vadd.i64 d27,d261622vshr.u64 d26,d21,#391623vadd.i64 d28,d111624vsli.64 d25,d21,#301625veor d30,d21,d221626vsli.64 d26,d21,#251627veor d20,d24,d251628vadd.i64 d27,d281629vbsl d30,d23,d22 @ Maj(a,b,c)1630veor d20,d26 @ Sigma0(a)1631vadd.i64 d16,d271632vadd.i64 d30,d271633@ vadd.i64 d20,d301634vshr.u64 q12,q5,#191635vshr.u64 q13,q5,#611636vadd.i64 d20,d30 @ h+=Maj from the past1637vshr.u64 q15,q5,#61638vsli.64 q12,q5,#451639vext.8 q14,q6,q7,#8 @ X[i+1]1640vsli.64 q13,q5,#31641veor q15,q121642vshr.u64 q12,q14,#11643veor q15,q13 @ sigma1(X[i+14])1644vshr.u64 q13,q14,#81645vadd.i64 q6,q151646vshr.u64 q15,q14,#71647vsli.64 q12,q14,#631648vsli.64 q13,q14,#561649vext.8 q14,q2,q3,#8 @ X[i+9]1650veor q15,q121651vshr.u64 d24,d16,#14 @ from NEON_00_151652vadd.i64 q6,q141653vshr.u64 d25,d16,#18 @ from NEON_00_151654veor q15,q13 @ sigma0(X[i+1])1655vshr.u64 d26,d16,#41 @ from NEON_00_151656vadd.i64 q6,q151657vld1.64 {d28},[r3,:64]! @ K[i++]1658vsli.64 d24,d16,#501659vsli.64 d25,d16,#461660vmov d29,d161661vsli.64 d26,d16,#231662#if 28<16 && defined(__ARMEL__)1663vrev64.8 ,1664#endif1665veor d25,d241666vbsl d29,d17,d18 @ Ch(e,f,g)1667vshr.u64 d24,d20,#281668veor d26,d25 @ Sigma1(e)1669vadd.i64 d27,d29,d191670vshr.u64 d25,d20,#341671vsli.64 d24,d20,#361672vadd.i64 d27,d261673vshr.u64 d26,d20,#391674vadd.i64 d28,d121675vsli.64 d25,d20,#301676veor d30,d20,d211677vsli.64 d26,d20,#251678veor d19,d24,d251679vadd.i64 d27,d281680vbsl d30,d22,d21 @ Maj(a,b,c)1681veor d19,d26 @ Sigma0(a)1682vadd.i64 d23,d271683vadd.i64 d30,d271684@ vadd.i64 d19,d301685vshr.u64 d24,d23,#14 @ 291686#if 29<161687vld1.64 {d13},[r1]! @ handles unaligned1688#endif1689vshr.u64 d25,d23,#181690#if 29>01691vadd.i64 d19,d30 @ h+=Maj from the past1692#endif1693vshr.u64 d26,d23,#411694vld1.64 {d28},[r3,:64]! @ K[i++]1695vsli.64 d24,d23,#501696vsli.64 d25,d23,#461697vmov d29,d231698vsli.64 d26,d23,#231699#if 29<16 && defined(__ARMEL__)1700vrev64.8 ,1701#endif1702veor d25,d241703vbsl d29,d16,d17 @ Ch(e,f,g)1704vshr.u64 d24,d19,#281705veor d26,d25 @ Sigma1(e)1706vadd.i64 d27,d29,d181707vshr.u64 d25,d19,#341708vsli.64 d24,d19,#361709vadd.i64 d27,d261710vshr.u64 d26,d19,#391711vadd.i64 d28,d131712vsli.64 d25,d19,#301713veor d30,d19,d201714vsli.64 d26,d19,#251715veor d18,d24,d251716vadd.i64 d27,d281717vbsl d30,d21,d20 @ Maj(a,b,c)1718veor d18,d26 @ Sigma0(a)1719vadd.i64 d22,d271720vadd.i64 d30,d271721@ vadd.i64 d18,d301722vshr.u64 q12,q6,#191723vshr.u64 q13,q6,#611724vadd.i64 d18,d30 @ h+=Maj from the past1725vshr.u64 q15,q6,#61726vsli.64 q12,q6,#451727vext.8 q14,q7,q0,#8 @ X[i+1]1728vsli.64 q13,q6,#31729veor q15,q121730vshr.u64 q12,q14,#11731veor q15,q13 @ sigma1(X[i+14])1732vshr.u64 q13,q14,#81733vadd.i64 q7,q151734vshr.u64 q15,q14,#71735vsli.64 q12,q14,#631736vsli.64 q13,q14,#561737vext.8 q14,q3,q4,#8 @ X[i+9]1738veor q15,q121739vshr.u64 d24,d22,#14 @ from NEON_00_151740vadd.i64 q7,q141741vshr.u64 d25,d22,#18 @ from NEON_00_151742veor q15,q13 @ sigma0(X[i+1])1743vshr.u64 d26,d22,#41 @ from NEON_00_151744vadd.i64 q7,q151745vld1.64 {d28},[r3,:64]! @ K[i++]1746vsli.64 d24,d22,#501747vsli.64 d25,d22,#461748vmov d29,d221749vsli.64 d26,d22,#231750#if 30<16 && defined(__ARMEL__)1751vrev64.8 ,1752#endif1753veor d25,d241754vbsl d29,d23,d16 @ Ch(e,f,g)1755vshr.u64 d24,d18,#281756veor d26,d25 @ Sigma1(e)1757vadd.i64 d27,d29,d171758vshr.u64 d25,d18,#341759vsli.64 d24,d18,#361760vadd.i64 d27,d261761vshr.u64 d26,d18,#391762vadd.i64 d28,d141763vsli.64 d25,d18,#301764veor d30,d18,d191765vsli.64 d26,d18,#251766veor d17,d24,d251767vadd.i64 d27,d281768vbsl d30,d20,d19 @ Maj(a,b,c)1769veor d17,d26 @ Sigma0(a)1770vadd.i64 d21,d271771vadd.i64 d30,d271772@ vadd.i64 d17,d301773vshr.u64 d24,d21,#14 @ 311774#if 31<161775vld1.64 {d15},[r1]! @ handles unaligned1776#endif1777vshr.u64 d25,d21,#181778#if 31>01779vadd.i64 d17,d30 @ h+=Maj from the past1780#endif1781vshr.u64 d26,d21,#411782vld1.64 {d28},[r3,:64]! @ K[i++]1783vsli.64 d24,d21,#501784vsli.64 d25,d21,#461785vmov d29,d211786vsli.64 d26,d21,#231787#if 31<16 && defined(__ARMEL__)1788vrev64.8 ,1789#endif1790veor d25,d241791vbsl d29,d22,d23 @ Ch(e,f,g)1792vshr.u64 d24,d17,#281793veor d26,d25 @ Sigma1(e)1794vadd.i64 d27,d29,d161795vshr.u64 d25,d17,#341796vsli.64 d24,d17,#361797vadd.i64 d27,d261798vshr.u64 d26,d17,#391799vadd.i64 d28,d151800vsli.64 d25,d17,#301801veor d30,d17,d181802vsli.64 d26,d17,#251803veor d16,d24,d251804vadd.i64 d27,d281805vbsl d30,d19,d18 @ Maj(a,b,c)1806veor d16,d26 @ Sigma0(a)1807vadd.i64 d20,d271808vadd.i64 d30,d271809@ vadd.i64 d16,d301810bne .L16_79_neon18111812vadd.i64 d16,d30 @ h+=Maj from the past1813vldmia r0,{d24,d25,d26,d27,d28,d29,d30,d31} @ load context to temp1814vadd.i64 q8,q12 @ vectorized accumulate1815vadd.i64 q9,q131816vadd.i64 q10,q141817vadd.i64 q11,q151818vstmia r0,{d16,d17,d18,d19,d20,d21,d22,d23} @ save context1819teq r1,r21820sub r3,#640 @ rewind K5121821bne .Loop_neon18221823VFP_ABI_POP1824bx lr @ .word 0xe12fff1e1825.size zfs_sha512_block_neon,.-zfs_sha512_block_neon1826#endif // #if __ARM_ARCH__ >= 71827#endif // #if defined(__arm__)182818291830