Path: blob/main/sys/contrib/openzfs/module/icp/asm-aarch64/sha2/sha256-armv8.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(__aarch64__)2324.section .note.gnu.property,"a",@note25.p2align 326.word 427.word 1628.word 529.asciz "GNU"30.word 322122547231.word 432.word 333.word 034.text3536.align 637.type .LK256,%object38.LK256:39.long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba540.long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed541.long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc342.long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf17443.long 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc44.long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da45.long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc746.long 0xc6e00bf3,0xd5a79147,0x06ca6351,0x1429296747.long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d1348.long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c8549.long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a350.long 0xd192e819,0xd6990624,0xf40e3585,0x106aa07051.long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb552.long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff353.long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc7020854.long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f255.long 0 //terminator56.size .LK256,.-.LK2565758.globl zfs_sha256_block_armv759.type zfs_sha256_block_armv7,%function60.align 661zfs_sha256_block_armv7:62hint #34 // bti c63stp x29,x30,[sp,#-128]!64add x29,sp,#06566stp x19,x20,[sp,#16]67stp x21,x22,[sp,#32]68stp x23,x24,[sp,#48]69stp x25,x26,[sp,#64]70stp x27,x28,[sp,#80]71sub sp,sp,#4*47273ldp w20,w21,[x0] // load context74ldp w22,w23,[x0,#2*4]75ldp w24,w25,[x0,#4*4]76add x2,x1,x2,lsl#6 // end of input77ldp w26,w27,[x0,#6*4]78adr x30,.LK25679stp x0,x2,[x29,#96]8081.Loop:82ldp w3,w4,[x1],#2*483ldr w19,[x30],#4 // *K++84eor w28,w21,w22 // magic seed85str x1,[x29,#112]86#ifndef __AARCH64EB__87rev w3,w3 // 088#endif89ror w16,w24,#690add w27,w27,w19 // h+=K[i]91eor w6,w24,w24,ror#1492and w17,w25,w2493bic w19,w26,w2494add w27,w27,w3 // h+=X[i]95orr w17,w17,w19 // Ch(e,f,g)96eor w19,w20,w21 // a^b, b^c in next round97eor w16,w16,w6,ror#11 // Sigma1(e)98ror w6,w20,#299add w27,w27,w17 // h+=Ch(e,f,g)100eor w17,w20,w20,ror#9101add w27,w27,w16 // h+=Sigma1(e)102and w28,w28,w19 // (b^c)&=(a^b)103add w23,w23,w27 // d+=h104eor w28,w28,w21 // Maj(a,b,c)105eor w17,w6,w17,ror#13 // Sigma0(a)106add w27,w27,w28 // h+=Maj(a,b,c)107ldr w28,[x30],#4 // *K++, w19 in next round108//add w27,w27,w17 // h+=Sigma0(a)109#ifndef __AARCH64EB__110rev w4,w4 // 1111#endif112ldp w5,w6,[x1],#2*4113add w27,w27,w17 // h+=Sigma0(a)114ror w16,w23,#6115add w26,w26,w28 // h+=K[i]116eor w7,w23,w23,ror#14117and w17,w24,w23118bic w28,w25,w23119add w26,w26,w4 // h+=X[i]120orr w17,w17,w28 // Ch(e,f,g)121eor w28,w27,w20 // a^b, b^c in next round122eor w16,w16,w7,ror#11 // Sigma1(e)123ror w7,w27,#2124add w26,w26,w17 // h+=Ch(e,f,g)125eor w17,w27,w27,ror#9126add w26,w26,w16 // h+=Sigma1(e)127and w19,w19,w28 // (b^c)&=(a^b)128add w22,w22,w26 // d+=h129eor w19,w19,w20 // Maj(a,b,c)130eor w17,w7,w17,ror#13 // Sigma0(a)131add w26,w26,w19 // h+=Maj(a,b,c)132ldr w19,[x30],#4 // *K++, w28 in next round133//add w26,w26,w17 // h+=Sigma0(a)134#ifndef __AARCH64EB__135rev w5,w5 // 2136#endif137add w26,w26,w17 // h+=Sigma0(a)138ror w16,w22,#6139add w25,w25,w19 // h+=K[i]140eor w8,w22,w22,ror#14141and w17,w23,w22142bic w19,w24,w22143add w25,w25,w5 // h+=X[i]144orr w17,w17,w19 // Ch(e,f,g)145eor w19,w26,w27 // a^b, b^c in next round146eor w16,w16,w8,ror#11 // Sigma1(e)147ror w8,w26,#2148add w25,w25,w17 // h+=Ch(e,f,g)149eor w17,w26,w26,ror#9150add w25,w25,w16 // h+=Sigma1(e)151and w28,w28,w19 // (b^c)&=(a^b)152add w21,w21,w25 // d+=h153eor w28,w28,w27 // Maj(a,b,c)154eor w17,w8,w17,ror#13 // Sigma0(a)155add w25,w25,w28 // h+=Maj(a,b,c)156ldr w28,[x30],#4 // *K++, w19 in next round157//add w25,w25,w17 // h+=Sigma0(a)158#ifndef __AARCH64EB__159rev w6,w6 // 3160#endif161ldp w7,w8,[x1],#2*4162add w25,w25,w17 // h+=Sigma0(a)163ror w16,w21,#6164add w24,w24,w28 // h+=K[i]165eor w9,w21,w21,ror#14166and w17,w22,w21167bic w28,w23,w21168add w24,w24,w6 // h+=X[i]169orr w17,w17,w28 // Ch(e,f,g)170eor w28,w25,w26 // a^b, b^c in next round171eor w16,w16,w9,ror#11 // Sigma1(e)172ror w9,w25,#2173add w24,w24,w17 // h+=Ch(e,f,g)174eor w17,w25,w25,ror#9175add w24,w24,w16 // h+=Sigma1(e)176and w19,w19,w28 // (b^c)&=(a^b)177add w20,w20,w24 // d+=h178eor w19,w19,w26 // Maj(a,b,c)179eor w17,w9,w17,ror#13 // Sigma0(a)180add w24,w24,w19 // h+=Maj(a,b,c)181ldr w19,[x30],#4 // *K++, w28 in next round182//add w24,w24,w17 // h+=Sigma0(a)183#ifndef __AARCH64EB__184rev w7,w7 // 4185#endif186add w24,w24,w17 // h+=Sigma0(a)187ror w16,w20,#6188add w23,w23,w19 // h+=K[i]189eor w10,w20,w20,ror#14190and w17,w21,w20191bic w19,w22,w20192add w23,w23,w7 // h+=X[i]193orr w17,w17,w19 // Ch(e,f,g)194eor w19,w24,w25 // a^b, b^c in next round195eor w16,w16,w10,ror#11 // Sigma1(e)196ror w10,w24,#2197add w23,w23,w17 // h+=Ch(e,f,g)198eor w17,w24,w24,ror#9199add w23,w23,w16 // h+=Sigma1(e)200and w28,w28,w19 // (b^c)&=(a^b)201add w27,w27,w23 // d+=h202eor w28,w28,w25 // Maj(a,b,c)203eor w17,w10,w17,ror#13 // Sigma0(a)204add w23,w23,w28 // h+=Maj(a,b,c)205ldr w28,[x30],#4 // *K++, w19 in next round206//add w23,w23,w17 // h+=Sigma0(a)207#ifndef __AARCH64EB__208rev w8,w8 // 5209#endif210ldp w9,w10,[x1],#2*4211add w23,w23,w17 // h+=Sigma0(a)212ror w16,w27,#6213add w22,w22,w28 // h+=K[i]214eor w11,w27,w27,ror#14215and w17,w20,w27216bic w28,w21,w27217add w22,w22,w8 // h+=X[i]218orr w17,w17,w28 // Ch(e,f,g)219eor w28,w23,w24 // a^b, b^c in next round220eor w16,w16,w11,ror#11 // Sigma1(e)221ror w11,w23,#2222add w22,w22,w17 // h+=Ch(e,f,g)223eor w17,w23,w23,ror#9224add w22,w22,w16 // h+=Sigma1(e)225and w19,w19,w28 // (b^c)&=(a^b)226add w26,w26,w22 // d+=h227eor w19,w19,w24 // Maj(a,b,c)228eor w17,w11,w17,ror#13 // Sigma0(a)229add w22,w22,w19 // h+=Maj(a,b,c)230ldr w19,[x30],#4 // *K++, w28 in next round231//add w22,w22,w17 // h+=Sigma0(a)232#ifndef __AARCH64EB__233rev w9,w9 // 6234#endif235add w22,w22,w17 // h+=Sigma0(a)236ror w16,w26,#6237add w21,w21,w19 // h+=K[i]238eor w12,w26,w26,ror#14239and w17,w27,w26240bic w19,w20,w26241add w21,w21,w9 // h+=X[i]242orr w17,w17,w19 // Ch(e,f,g)243eor w19,w22,w23 // a^b, b^c in next round244eor w16,w16,w12,ror#11 // Sigma1(e)245ror w12,w22,#2246add w21,w21,w17 // h+=Ch(e,f,g)247eor w17,w22,w22,ror#9248add w21,w21,w16 // h+=Sigma1(e)249and w28,w28,w19 // (b^c)&=(a^b)250add w25,w25,w21 // d+=h251eor w28,w28,w23 // Maj(a,b,c)252eor w17,w12,w17,ror#13 // Sigma0(a)253add w21,w21,w28 // h+=Maj(a,b,c)254ldr w28,[x30],#4 // *K++, w19 in next round255//add w21,w21,w17 // h+=Sigma0(a)256#ifndef __AARCH64EB__257rev w10,w10 // 7258#endif259ldp w11,w12,[x1],#2*4260add w21,w21,w17 // h+=Sigma0(a)261ror w16,w25,#6262add w20,w20,w28 // h+=K[i]263eor w13,w25,w25,ror#14264and w17,w26,w25265bic w28,w27,w25266add w20,w20,w10 // h+=X[i]267orr w17,w17,w28 // Ch(e,f,g)268eor w28,w21,w22 // a^b, b^c in next round269eor w16,w16,w13,ror#11 // Sigma1(e)270ror w13,w21,#2271add w20,w20,w17 // h+=Ch(e,f,g)272eor w17,w21,w21,ror#9273add w20,w20,w16 // h+=Sigma1(e)274and w19,w19,w28 // (b^c)&=(a^b)275add w24,w24,w20 // d+=h276eor w19,w19,w22 // Maj(a,b,c)277eor w17,w13,w17,ror#13 // Sigma0(a)278add w20,w20,w19 // h+=Maj(a,b,c)279ldr w19,[x30],#4 // *K++, w28 in next round280//add w20,w20,w17 // h+=Sigma0(a)281#ifndef __AARCH64EB__282rev w11,w11 // 8283#endif284add w20,w20,w17 // h+=Sigma0(a)285ror w16,w24,#6286add w27,w27,w19 // h+=K[i]287eor w14,w24,w24,ror#14288and w17,w25,w24289bic w19,w26,w24290add w27,w27,w11 // h+=X[i]291orr w17,w17,w19 // Ch(e,f,g)292eor w19,w20,w21 // a^b, b^c in next round293eor w16,w16,w14,ror#11 // Sigma1(e)294ror w14,w20,#2295add w27,w27,w17 // h+=Ch(e,f,g)296eor w17,w20,w20,ror#9297add w27,w27,w16 // h+=Sigma1(e)298and w28,w28,w19 // (b^c)&=(a^b)299add w23,w23,w27 // d+=h300eor w28,w28,w21 // Maj(a,b,c)301eor w17,w14,w17,ror#13 // Sigma0(a)302add w27,w27,w28 // h+=Maj(a,b,c)303ldr w28,[x30],#4 // *K++, w19 in next round304//add w27,w27,w17 // h+=Sigma0(a)305#ifndef __AARCH64EB__306rev w12,w12 // 9307#endif308ldp w13,w14,[x1],#2*4309add w27,w27,w17 // h+=Sigma0(a)310ror w16,w23,#6311add w26,w26,w28 // h+=K[i]312eor w15,w23,w23,ror#14313and w17,w24,w23314bic w28,w25,w23315add w26,w26,w12 // h+=X[i]316orr w17,w17,w28 // Ch(e,f,g)317eor w28,w27,w20 // a^b, b^c in next round318eor w16,w16,w15,ror#11 // Sigma1(e)319ror w15,w27,#2320add w26,w26,w17 // h+=Ch(e,f,g)321eor w17,w27,w27,ror#9322add w26,w26,w16 // h+=Sigma1(e)323and w19,w19,w28 // (b^c)&=(a^b)324add w22,w22,w26 // d+=h325eor w19,w19,w20 // Maj(a,b,c)326eor w17,w15,w17,ror#13 // Sigma0(a)327add w26,w26,w19 // h+=Maj(a,b,c)328ldr w19,[x30],#4 // *K++, w28 in next round329//add w26,w26,w17 // h+=Sigma0(a)330#ifndef __AARCH64EB__331rev w13,w13 // 10332#endif333add w26,w26,w17 // h+=Sigma0(a)334ror w16,w22,#6335add w25,w25,w19 // h+=K[i]336eor w0,w22,w22,ror#14337and w17,w23,w22338bic w19,w24,w22339add w25,w25,w13 // h+=X[i]340orr w17,w17,w19 // Ch(e,f,g)341eor w19,w26,w27 // a^b, b^c in next round342eor w16,w16,w0,ror#11 // Sigma1(e)343ror w0,w26,#2344add w25,w25,w17 // h+=Ch(e,f,g)345eor w17,w26,w26,ror#9346add w25,w25,w16 // h+=Sigma1(e)347and w28,w28,w19 // (b^c)&=(a^b)348add w21,w21,w25 // d+=h349eor w28,w28,w27 // Maj(a,b,c)350eor w17,w0,w17,ror#13 // Sigma0(a)351add w25,w25,w28 // h+=Maj(a,b,c)352ldr w28,[x30],#4 // *K++, w19 in next round353//add w25,w25,w17 // h+=Sigma0(a)354#ifndef __AARCH64EB__355rev w14,w14 // 11356#endif357ldp w15,w0,[x1],#2*4358add w25,w25,w17 // h+=Sigma0(a)359str w6,[sp,#12]360ror w16,w21,#6361add w24,w24,w28 // h+=K[i]362eor w6,w21,w21,ror#14363and w17,w22,w21364bic w28,w23,w21365add w24,w24,w14 // h+=X[i]366orr w17,w17,w28 // Ch(e,f,g)367eor w28,w25,w26 // a^b, b^c in next round368eor w16,w16,w6,ror#11 // Sigma1(e)369ror w6,w25,#2370add w24,w24,w17 // h+=Ch(e,f,g)371eor w17,w25,w25,ror#9372add w24,w24,w16 // h+=Sigma1(e)373and w19,w19,w28 // (b^c)&=(a^b)374add w20,w20,w24 // d+=h375eor w19,w19,w26 // Maj(a,b,c)376eor w17,w6,w17,ror#13 // Sigma0(a)377add w24,w24,w19 // h+=Maj(a,b,c)378ldr w19,[x30],#4 // *K++, w28 in next round379//add w24,w24,w17 // h+=Sigma0(a)380#ifndef __AARCH64EB__381rev w15,w15 // 12382#endif383add w24,w24,w17 // h+=Sigma0(a)384str w7,[sp,#0]385ror w16,w20,#6386add w23,w23,w19 // h+=K[i]387eor w7,w20,w20,ror#14388and w17,w21,w20389bic w19,w22,w20390add w23,w23,w15 // h+=X[i]391orr w17,w17,w19 // Ch(e,f,g)392eor w19,w24,w25 // a^b, b^c in next round393eor w16,w16,w7,ror#11 // Sigma1(e)394ror w7,w24,#2395add w23,w23,w17 // h+=Ch(e,f,g)396eor w17,w24,w24,ror#9397add w23,w23,w16 // h+=Sigma1(e)398and w28,w28,w19 // (b^c)&=(a^b)399add w27,w27,w23 // d+=h400eor w28,w28,w25 // Maj(a,b,c)401eor w17,w7,w17,ror#13 // Sigma0(a)402add w23,w23,w28 // h+=Maj(a,b,c)403ldr w28,[x30],#4 // *K++, w19 in next round404//add w23,w23,w17 // h+=Sigma0(a)405#ifndef __AARCH64EB__406rev w0,w0 // 13407#endif408ldp w1,w2,[x1]409add w23,w23,w17 // h+=Sigma0(a)410str w8,[sp,#4]411ror w16,w27,#6412add w22,w22,w28 // h+=K[i]413eor w8,w27,w27,ror#14414and w17,w20,w27415bic w28,w21,w27416add w22,w22,w0 // h+=X[i]417orr w17,w17,w28 // Ch(e,f,g)418eor w28,w23,w24 // a^b, b^c in next round419eor w16,w16,w8,ror#11 // Sigma1(e)420ror w8,w23,#2421add w22,w22,w17 // h+=Ch(e,f,g)422eor w17,w23,w23,ror#9423add w22,w22,w16 // h+=Sigma1(e)424and w19,w19,w28 // (b^c)&=(a^b)425add w26,w26,w22 // d+=h426eor w19,w19,w24 // Maj(a,b,c)427eor w17,w8,w17,ror#13 // Sigma0(a)428add w22,w22,w19 // h+=Maj(a,b,c)429ldr w19,[x30],#4 // *K++, w28 in next round430//add w22,w22,w17 // h+=Sigma0(a)431#ifndef __AARCH64EB__432rev w1,w1 // 14433#endif434ldr w6,[sp,#12]435add w22,w22,w17 // h+=Sigma0(a)436str w9,[sp,#8]437ror w16,w26,#6438add w21,w21,w19 // h+=K[i]439eor w9,w26,w26,ror#14440and w17,w27,w26441bic w19,w20,w26442add w21,w21,w1 // h+=X[i]443orr w17,w17,w19 // Ch(e,f,g)444eor w19,w22,w23 // a^b, b^c in next round445eor w16,w16,w9,ror#11 // Sigma1(e)446ror w9,w22,#2447add w21,w21,w17 // h+=Ch(e,f,g)448eor w17,w22,w22,ror#9449add w21,w21,w16 // h+=Sigma1(e)450and w28,w28,w19 // (b^c)&=(a^b)451add w25,w25,w21 // d+=h452eor w28,w28,w23 // Maj(a,b,c)453eor w17,w9,w17,ror#13 // Sigma0(a)454add w21,w21,w28 // h+=Maj(a,b,c)455ldr w28,[x30],#4 // *K++, w19 in next round456//add w21,w21,w17 // h+=Sigma0(a)457#ifndef __AARCH64EB__458rev w2,w2 // 15459#endif460ldr w7,[sp,#0]461add w21,w21,w17 // h+=Sigma0(a)462str w10,[sp,#12]463ror w16,w25,#6464add w20,w20,w28 // h+=K[i]465ror w9,w4,#7466and w17,w26,w25467ror w8,w1,#17468bic w28,w27,w25469ror w10,w21,#2470add w20,w20,w2 // h+=X[i]471eor w16,w16,w25,ror#11472eor w9,w9,w4,ror#18473orr w17,w17,w28 // Ch(e,f,g)474eor w28,w21,w22 // a^b, b^c in next round475eor w16,w16,w25,ror#25 // Sigma1(e)476eor w10,w10,w21,ror#13477add w20,w20,w17 // h+=Ch(e,f,g)478and w19,w19,w28 // (b^c)&=(a^b)479eor w8,w8,w1,ror#19480eor w9,w9,w4,lsr#3 // sigma0(X[i+1])481add w20,w20,w16 // h+=Sigma1(e)482eor w19,w19,w22 // Maj(a,b,c)483eor w17,w10,w21,ror#22 // Sigma0(a)484eor w8,w8,w1,lsr#10 // sigma1(X[i+14])485add w3,w3,w12486add w24,w24,w20 // d+=h487add w20,w20,w19 // h+=Maj(a,b,c)488ldr w19,[x30],#4 // *K++, w28 in next round489add w3,w3,w9490add w20,w20,w17 // h+=Sigma0(a)491add w3,w3,w8492.Loop_16_xx:493ldr w8,[sp,#4]494str w11,[sp,#0]495ror w16,w24,#6496add w27,w27,w19 // h+=K[i]497ror w10,w5,#7498and w17,w25,w24499ror w9,w2,#17500bic w19,w26,w24501ror w11,w20,#2502add w27,w27,w3 // h+=X[i]503eor w16,w16,w24,ror#11504eor w10,w10,w5,ror#18505orr w17,w17,w19 // Ch(e,f,g)506eor w19,w20,w21 // a^b, b^c in next round507eor w16,w16,w24,ror#25 // Sigma1(e)508eor w11,w11,w20,ror#13509add w27,w27,w17 // h+=Ch(e,f,g)510and w28,w28,w19 // (b^c)&=(a^b)511eor w9,w9,w2,ror#19512eor w10,w10,w5,lsr#3 // sigma0(X[i+1])513add w27,w27,w16 // h+=Sigma1(e)514eor w28,w28,w21 // Maj(a,b,c)515eor w17,w11,w20,ror#22 // Sigma0(a)516eor w9,w9,w2,lsr#10 // sigma1(X[i+14])517add w4,w4,w13518add w23,w23,w27 // d+=h519add w27,w27,w28 // h+=Maj(a,b,c)520ldr w28,[x30],#4 // *K++, w19 in next round521add w4,w4,w10522add w27,w27,w17 // h+=Sigma0(a)523add w4,w4,w9524ldr w9,[sp,#8]525str w12,[sp,#4]526ror w16,w23,#6527add w26,w26,w28 // h+=K[i]528ror w11,w6,#7529and w17,w24,w23530ror w10,w3,#17531bic w28,w25,w23532ror w12,w27,#2533add w26,w26,w4 // h+=X[i]534eor w16,w16,w23,ror#11535eor w11,w11,w6,ror#18536orr w17,w17,w28 // Ch(e,f,g)537eor w28,w27,w20 // a^b, b^c in next round538eor w16,w16,w23,ror#25 // Sigma1(e)539eor w12,w12,w27,ror#13540add w26,w26,w17 // h+=Ch(e,f,g)541and w19,w19,w28 // (b^c)&=(a^b)542eor w10,w10,w3,ror#19543eor w11,w11,w6,lsr#3 // sigma0(X[i+1])544add w26,w26,w16 // h+=Sigma1(e)545eor w19,w19,w20 // Maj(a,b,c)546eor w17,w12,w27,ror#22 // Sigma0(a)547eor w10,w10,w3,lsr#10 // sigma1(X[i+14])548add w5,w5,w14549add w22,w22,w26 // d+=h550add w26,w26,w19 // h+=Maj(a,b,c)551ldr w19,[x30],#4 // *K++, w28 in next round552add w5,w5,w11553add w26,w26,w17 // h+=Sigma0(a)554add w5,w5,w10555ldr w10,[sp,#12]556str w13,[sp,#8]557ror w16,w22,#6558add w25,w25,w19 // h+=K[i]559ror w12,w7,#7560and w17,w23,w22561ror w11,w4,#17562bic w19,w24,w22563ror w13,w26,#2564add w25,w25,w5 // h+=X[i]565eor w16,w16,w22,ror#11566eor w12,w12,w7,ror#18567orr w17,w17,w19 // Ch(e,f,g)568eor w19,w26,w27 // a^b, b^c in next round569eor w16,w16,w22,ror#25 // Sigma1(e)570eor w13,w13,w26,ror#13571add w25,w25,w17 // h+=Ch(e,f,g)572and w28,w28,w19 // (b^c)&=(a^b)573eor w11,w11,w4,ror#19574eor w12,w12,w7,lsr#3 // sigma0(X[i+1])575add w25,w25,w16 // h+=Sigma1(e)576eor w28,w28,w27 // Maj(a,b,c)577eor w17,w13,w26,ror#22 // Sigma0(a)578eor w11,w11,w4,lsr#10 // sigma1(X[i+14])579add w6,w6,w15580add w21,w21,w25 // d+=h581add w25,w25,w28 // h+=Maj(a,b,c)582ldr w28,[x30],#4 // *K++, w19 in next round583add w6,w6,w12584add w25,w25,w17 // h+=Sigma0(a)585add w6,w6,w11586ldr w11,[sp,#0]587str w14,[sp,#12]588ror w16,w21,#6589add w24,w24,w28 // h+=K[i]590ror w13,w8,#7591and w17,w22,w21592ror w12,w5,#17593bic w28,w23,w21594ror w14,w25,#2595add w24,w24,w6 // h+=X[i]596eor w16,w16,w21,ror#11597eor w13,w13,w8,ror#18598orr w17,w17,w28 // Ch(e,f,g)599eor w28,w25,w26 // a^b, b^c in next round600eor w16,w16,w21,ror#25 // Sigma1(e)601eor w14,w14,w25,ror#13602add w24,w24,w17 // h+=Ch(e,f,g)603and w19,w19,w28 // (b^c)&=(a^b)604eor w12,w12,w5,ror#19605eor w13,w13,w8,lsr#3 // sigma0(X[i+1])606add w24,w24,w16 // h+=Sigma1(e)607eor w19,w19,w26 // Maj(a,b,c)608eor w17,w14,w25,ror#22 // Sigma0(a)609eor w12,w12,w5,lsr#10 // sigma1(X[i+14])610add w7,w7,w0611add w20,w20,w24 // d+=h612add w24,w24,w19 // h+=Maj(a,b,c)613ldr w19,[x30],#4 // *K++, w28 in next round614add w7,w7,w13615add w24,w24,w17 // h+=Sigma0(a)616add w7,w7,w12617ldr w12,[sp,#4]618str w15,[sp,#0]619ror w16,w20,#6620add w23,w23,w19 // h+=K[i]621ror w14,w9,#7622and w17,w21,w20623ror w13,w6,#17624bic w19,w22,w20625ror w15,w24,#2626add w23,w23,w7 // h+=X[i]627eor w16,w16,w20,ror#11628eor w14,w14,w9,ror#18629orr w17,w17,w19 // Ch(e,f,g)630eor w19,w24,w25 // a^b, b^c in next round631eor w16,w16,w20,ror#25 // Sigma1(e)632eor w15,w15,w24,ror#13633add w23,w23,w17 // h+=Ch(e,f,g)634and w28,w28,w19 // (b^c)&=(a^b)635eor w13,w13,w6,ror#19636eor w14,w14,w9,lsr#3 // sigma0(X[i+1])637add w23,w23,w16 // h+=Sigma1(e)638eor w28,w28,w25 // Maj(a,b,c)639eor w17,w15,w24,ror#22 // Sigma0(a)640eor w13,w13,w6,lsr#10 // sigma1(X[i+14])641add w8,w8,w1642add w27,w27,w23 // d+=h643add w23,w23,w28 // h+=Maj(a,b,c)644ldr w28,[x30],#4 // *K++, w19 in next round645add w8,w8,w14646add w23,w23,w17 // h+=Sigma0(a)647add w8,w8,w13648ldr w13,[sp,#8]649str w0,[sp,#4]650ror w16,w27,#6651add w22,w22,w28 // h+=K[i]652ror w15,w10,#7653and w17,w20,w27654ror w14,w7,#17655bic w28,w21,w27656ror w0,w23,#2657add w22,w22,w8 // h+=X[i]658eor w16,w16,w27,ror#11659eor w15,w15,w10,ror#18660orr w17,w17,w28 // Ch(e,f,g)661eor w28,w23,w24 // a^b, b^c in next round662eor w16,w16,w27,ror#25 // Sigma1(e)663eor w0,w0,w23,ror#13664add w22,w22,w17 // h+=Ch(e,f,g)665and w19,w19,w28 // (b^c)&=(a^b)666eor w14,w14,w7,ror#19667eor w15,w15,w10,lsr#3 // sigma0(X[i+1])668add w22,w22,w16 // h+=Sigma1(e)669eor w19,w19,w24 // Maj(a,b,c)670eor w17,w0,w23,ror#22 // Sigma0(a)671eor w14,w14,w7,lsr#10 // sigma1(X[i+14])672add w9,w9,w2673add w26,w26,w22 // d+=h674add w22,w22,w19 // h+=Maj(a,b,c)675ldr w19,[x30],#4 // *K++, w28 in next round676add w9,w9,w15677add w22,w22,w17 // h+=Sigma0(a)678add w9,w9,w14679ldr w14,[sp,#12]680str w1,[sp,#8]681ror w16,w26,#6682add w21,w21,w19 // h+=K[i]683ror w0,w11,#7684and w17,w27,w26685ror w15,w8,#17686bic w19,w20,w26687ror w1,w22,#2688add w21,w21,w9 // h+=X[i]689eor w16,w16,w26,ror#11690eor w0,w0,w11,ror#18691orr w17,w17,w19 // Ch(e,f,g)692eor w19,w22,w23 // a^b, b^c in next round693eor w16,w16,w26,ror#25 // Sigma1(e)694eor w1,w1,w22,ror#13695add w21,w21,w17 // h+=Ch(e,f,g)696and w28,w28,w19 // (b^c)&=(a^b)697eor w15,w15,w8,ror#19698eor w0,w0,w11,lsr#3 // sigma0(X[i+1])699add w21,w21,w16 // h+=Sigma1(e)700eor w28,w28,w23 // Maj(a,b,c)701eor w17,w1,w22,ror#22 // Sigma0(a)702eor w15,w15,w8,lsr#10 // sigma1(X[i+14])703add w10,w10,w3704add w25,w25,w21 // d+=h705add w21,w21,w28 // h+=Maj(a,b,c)706ldr w28,[x30],#4 // *K++, w19 in next round707add w10,w10,w0708add w21,w21,w17 // h+=Sigma0(a)709add w10,w10,w15710ldr w15,[sp,#0]711str w2,[sp,#12]712ror w16,w25,#6713add w20,w20,w28 // h+=K[i]714ror w1,w12,#7715and w17,w26,w25716ror w0,w9,#17717bic w28,w27,w25718ror w2,w21,#2719add w20,w20,w10 // h+=X[i]720eor w16,w16,w25,ror#11721eor w1,w1,w12,ror#18722orr w17,w17,w28 // Ch(e,f,g)723eor w28,w21,w22 // a^b, b^c in next round724eor w16,w16,w25,ror#25 // Sigma1(e)725eor w2,w2,w21,ror#13726add w20,w20,w17 // h+=Ch(e,f,g)727and w19,w19,w28 // (b^c)&=(a^b)728eor w0,w0,w9,ror#19729eor w1,w1,w12,lsr#3 // sigma0(X[i+1])730add w20,w20,w16 // h+=Sigma1(e)731eor w19,w19,w22 // Maj(a,b,c)732eor w17,w2,w21,ror#22 // Sigma0(a)733eor w0,w0,w9,lsr#10 // sigma1(X[i+14])734add w11,w11,w4735add w24,w24,w20 // d+=h736add w20,w20,w19 // h+=Maj(a,b,c)737ldr w19,[x30],#4 // *K++, w28 in next round738add w11,w11,w1739add w20,w20,w17 // h+=Sigma0(a)740add w11,w11,w0741ldr w0,[sp,#4]742str w3,[sp,#0]743ror w16,w24,#6744add w27,w27,w19 // h+=K[i]745ror w2,w13,#7746and w17,w25,w24747ror w1,w10,#17748bic w19,w26,w24749ror w3,w20,#2750add w27,w27,w11 // h+=X[i]751eor w16,w16,w24,ror#11752eor w2,w2,w13,ror#18753orr w17,w17,w19 // Ch(e,f,g)754eor w19,w20,w21 // a^b, b^c in next round755eor w16,w16,w24,ror#25 // Sigma1(e)756eor w3,w3,w20,ror#13757add w27,w27,w17 // h+=Ch(e,f,g)758and w28,w28,w19 // (b^c)&=(a^b)759eor w1,w1,w10,ror#19760eor w2,w2,w13,lsr#3 // sigma0(X[i+1])761add w27,w27,w16 // h+=Sigma1(e)762eor w28,w28,w21 // Maj(a,b,c)763eor w17,w3,w20,ror#22 // Sigma0(a)764eor w1,w1,w10,lsr#10 // sigma1(X[i+14])765add w12,w12,w5766add w23,w23,w27 // d+=h767add w27,w27,w28 // h+=Maj(a,b,c)768ldr w28,[x30],#4 // *K++, w19 in next round769add w12,w12,w2770add w27,w27,w17 // h+=Sigma0(a)771add w12,w12,w1772ldr w1,[sp,#8]773str w4,[sp,#4]774ror w16,w23,#6775add w26,w26,w28 // h+=K[i]776ror w3,w14,#7777and w17,w24,w23778ror w2,w11,#17779bic w28,w25,w23780ror w4,w27,#2781add w26,w26,w12 // h+=X[i]782eor w16,w16,w23,ror#11783eor w3,w3,w14,ror#18784orr w17,w17,w28 // Ch(e,f,g)785eor w28,w27,w20 // a^b, b^c in next round786eor w16,w16,w23,ror#25 // Sigma1(e)787eor w4,w4,w27,ror#13788add w26,w26,w17 // h+=Ch(e,f,g)789and w19,w19,w28 // (b^c)&=(a^b)790eor w2,w2,w11,ror#19791eor w3,w3,w14,lsr#3 // sigma0(X[i+1])792add w26,w26,w16 // h+=Sigma1(e)793eor w19,w19,w20 // Maj(a,b,c)794eor w17,w4,w27,ror#22 // Sigma0(a)795eor w2,w2,w11,lsr#10 // sigma1(X[i+14])796add w13,w13,w6797add w22,w22,w26 // d+=h798add w26,w26,w19 // h+=Maj(a,b,c)799ldr w19,[x30],#4 // *K++, w28 in next round800add w13,w13,w3801add w26,w26,w17 // h+=Sigma0(a)802add w13,w13,w2803ldr w2,[sp,#12]804str w5,[sp,#8]805ror w16,w22,#6806add w25,w25,w19 // h+=K[i]807ror w4,w15,#7808and w17,w23,w22809ror w3,w12,#17810bic w19,w24,w22811ror w5,w26,#2812add w25,w25,w13 // h+=X[i]813eor w16,w16,w22,ror#11814eor w4,w4,w15,ror#18815orr w17,w17,w19 // Ch(e,f,g)816eor w19,w26,w27 // a^b, b^c in next round817eor w16,w16,w22,ror#25 // Sigma1(e)818eor w5,w5,w26,ror#13819add w25,w25,w17 // h+=Ch(e,f,g)820and w28,w28,w19 // (b^c)&=(a^b)821eor w3,w3,w12,ror#19822eor w4,w4,w15,lsr#3 // sigma0(X[i+1])823add w25,w25,w16 // h+=Sigma1(e)824eor w28,w28,w27 // Maj(a,b,c)825eor w17,w5,w26,ror#22 // Sigma0(a)826eor w3,w3,w12,lsr#10 // sigma1(X[i+14])827add w14,w14,w7828add w21,w21,w25 // d+=h829add w25,w25,w28 // h+=Maj(a,b,c)830ldr w28,[x30],#4 // *K++, w19 in next round831add w14,w14,w4832add w25,w25,w17 // h+=Sigma0(a)833add w14,w14,w3834ldr w3,[sp,#0]835str w6,[sp,#12]836ror w16,w21,#6837add w24,w24,w28 // h+=K[i]838ror w5,w0,#7839and w17,w22,w21840ror w4,w13,#17841bic w28,w23,w21842ror w6,w25,#2843add w24,w24,w14 // h+=X[i]844eor w16,w16,w21,ror#11845eor w5,w5,w0,ror#18846orr w17,w17,w28 // Ch(e,f,g)847eor w28,w25,w26 // a^b, b^c in next round848eor w16,w16,w21,ror#25 // Sigma1(e)849eor w6,w6,w25,ror#13850add w24,w24,w17 // h+=Ch(e,f,g)851and w19,w19,w28 // (b^c)&=(a^b)852eor w4,w4,w13,ror#19853eor w5,w5,w0,lsr#3 // sigma0(X[i+1])854add w24,w24,w16 // h+=Sigma1(e)855eor w19,w19,w26 // Maj(a,b,c)856eor w17,w6,w25,ror#22 // Sigma0(a)857eor w4,w4,w13,lsr#10 // sigma1(X[i+14])858add w15,w15,w8859add w20,w20,w24 // d+=h860add w24,w24,w19 // h+=Maj(a,b,c)861ldr w19,[x30],#4 // *K++, w28 in next round862add w15,w15,w5863add w24,w24,w17 // h+=Sigma0(a)864add w15,w15,w4865ldr w4,[sp,#4]866str w7,[sp,#0]867ror w16,w20,#6868add w23,w23,w19 // h+=K[i]869ror w6,w1,#7870and w17,w21,w20871ror w5,w14,#17872bic w19,w22,w20873ror w7,w24,#2874add w23,w23,w15 // h+=X[i]875eor w16,w16,w20,ror#11876eor w6,w6,w1,ror#18877orr w17,w17,w19 // Ch(e,f,g)878eor w19,w24,w25 // a^b, b^c in next round879eor w16,w16,w20,ror#25 // Sigma1(e)880eor w7,w7,w24,ror#13881add w23,w23,w17 // h+=Ch(e,f,g)882and w28,w28,w19 // (b^c)&=(a^b)883eor w5,w5,w14,ror#19884eor w6,w6,w1,lsr#3 // sigma0(X[i+1])885add w23,w23,w16 // h+=Sigma1(e)886eor w28,w28,w25 // Maj(a,b,c)887eor w17,w7,w24,ror#22 // Sigma0(a)888eor w5,w5,w14,lsr#10 // sigma1(X[i+14])889add w0,w0,w9890add w27,w27,w23 // d+=h891add w23,w23,w28 // h+=Maj(a,b,c)892ldr w28,[x30],#4 // *K++, w19 in next round893add w0,w0,w6894add w23,w23,w17 // h+=Sigma0(a)895add w0,w0,w5896ldr w5,[sp,#8]897str w8,[sp,#4]898ror w16,w27,#6899add w22,w22,w28 // h+=K[i]900ror w7,w2,#7901and w17,w20,w27902ror w6,w15,#17903bic w28,w21,w27904ror w8,w23,#2905add w22,w22,w0 // h+=X[i]906eor w16,w16,w27,ror#11907eor w7,w7,w2,ror#18908orr w17,w17,w28 // Ch(e,f,g)909eor w28,w23,w24 // a^b, b^c in next round910eor w16,w16,w27,ror#25 // Sigma1(e)911eor w8,w8,w23,ror#13912add w22,w22,w17 // h+=Ch(e,f,g)913and w19,w19,w28 // (b^c)&=(a^b)914eor w6,w6,w15,ror#19915eor w7,w7,w2,lsr#3 // sigma0(X[i+1])916add w22,w22,w16 // h+=Sigma1(e)917eor w19,w19,w24 // Maj(a,b,c)918eor w17,w8,w23,ror#22 // Sigma0(a)919eor w6,w6,w15,lsr#10 // sigma1(X[i+14])920add w1,w1,w10921add w26,w26,w22 // d+=h922add w22,w22,w19 // h+=Maj(a,b,c)923ldr w19,[x30],#4 // *K++, w28 in next round924add w1,w1,w7925add w22,w22,w17 // h+=Sigma0(a)926add w1,w1,w6927ldr w6,[sp,#12]928str w9,[sp,#8]929ror w16,w26,#6930add w21,w21,w19 // h+=K[i]931ror w8,w3,#7932and w17,w27,w26933ror w7,w0,#17934bic w19,w20,w26935ror w9,w22,#2936add w21,w21,w1 // h+=X[i]937eor w16,w16,w26,ror#11938eor w8,w8,w3,ror#18939orr w17,w17,w19 // Ch(e,f,g)940eor w19,w22,w23 // a^b, b^c in next round941eor w16,w16,w26,ror#25 // Sigma1(e)942eor w9,w9,w22,ror#13943add w21,w21,w17 // h+=Ch(e,f,g)944and w28,w28,w19 // (b^c)&=(a^b)945eor w7,w7,w0,ror#19946eor w8,w8,w3,lsr#3 // sigma0(X[i+1])947add w21,w21,w16 // h+=Sigma1(e)948eor w28,w28,w23 // Maj(a,b,c)949eor w17,w9,w22,ror#22 // Sigma0(a)950eor w7,w7,w0,lsr#10 // sigma1(X[i+14])951add w2,w2,w11952add w25,w25,w21 // d+=h953add w21,w21,w28 // h+=Maj(a,b,c)954ldr w28,[x30],#4 // *K++, w19 in next round955add w2,w2,w8956add w21,w21,w17 // h+=Sigma0(a)957add w2,w2,w7958ldr w7,[sp,#0]959str w10,[sp,#12]960ror w16,w25,#6961add w20,w20,w28 // h+=K[i]962ror w9,w4,#7963and w17,w26,w25964ror w8,w1,#17965bic w28,w27,w25966ror w10,w21,#2967add w20,w20,w2 // h+=X[i]968eor w16,w16,w25,ror#11969eor w9,w9,w4,ror#18970orr w17,w17,w28 // Ch(e,f,g)971eor w28,w21,w22 // a^b, b^c in next round972eor w16,w16,w25,ror#25 // Sigma1(e)973eor w10,w10,w21,ror#13974add w20,w20,w17 // h+=Ch(e,f,g)975and w19,w19,w28 // (b^c)&=(a^b)976eor w8,w8,w1,ror#19977eor w9,w9,w4,lsr#3 // sigma0(X[i+1])978add w20,w20,w16 // h+=Sigma1(e)979eor w19,w19,w22 // Maj(a,b,c)980eor w17,w10,w21,ror#22 // Sigma0(a)981eor w8,w8,w1,lsr#10 // sigma1(X[i+14])982add w3,w3,w12983add w24,w24,w20 // d+=h984add w20,w20,w19 // h+=Maj(a,b,c)985ldr w19,[x30],#4 // *K++, w28 in next round986add w3,w3,w9987add w20,w20,w17 // h+=Sigma0(a)988add w3,w3,w8989cbnz w19,.Loop_16_xx990991ldp x0,x2,[x29,#96]992ldr x1,[x29,#112]993sub x30,x30,#260 // rewind994995ldp w3,w4,[x0]996ldp w5,w6,[x0,#2*4]997add x1,x1,#14*4 // advance input pointer998ldp w7,w8,[x0,#4*4]999add w20,w20,w31000ldp w9,w10,[x0,#6*4]1001add w21,w21,w41002add w22,w22,w51003add w23,w23,w61004stp w20,w21,[x0]1005add w24,w24,w71006add w25,w25,w81007stp w22,w23,[x0,#2*4]1008add w26,w26,w91009add w27,w27,w101010cmp x1,x21011stp w24,w25,[x0,#4*4]1012stp w26,w27,[x0,#6*4]1013b.ne .Loop10141015ldp x19,x20,[x29,#16]1016add sp,sp,#4*41017ldp x21,x22,[x29,#32]1018ldp x23,x24,[x29,#48]1019ldp x25,x26,[x29,#64]1020ldp x27,x28,[x29,#80]1021ldp x29,x30,[sp],#1281022ret1023.size zfs_sha256_block_armv7,.-zfs_sha256_block_armv710241025.globl zfs_sha256_block_armv81026.type zfs_sha256_block_armv8,%function1027.align 61028zfs_sha256_block_armv8:1029hint #34 // bti c1030.Lv8_entry:1031stp x29,x30,[sp,#-16]!1032add x29,sp,#010331034ld1 {v0.4s,v1.4s},[x0]1035adr x3,.LK25610361037.Loop_hw:1038ld1 {v4.16b-v7.16b},[x1],#641039sub x2,x2,#11040ld1 {v16.4s},[x3],#161041rev32 v4.16b,v4.16b1042rev32 v5.16b,v5.16b1043rev32 v6.16b,v6.16b1044rev32 v7.16b,v7.16b1045orr v18.16b,v0.16b,v0.16b // offload1046orr v19.16b,v1.16b,v1.16b1047ld1 {v17.4s},[x3],#161048add v16.4s,v16.4s,v4.4s1049.inst 0x5e2828a4 //sha256su0 v4.16b,v5.16b1050orr v2.16b,v0.16b,v0.16b1051.inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s1052.inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s1053.inst 0x5e0760c4 //sha256su1 v4.16b,v6.16b,v7.16b1054ld1 {v16.4s},[x3],#161055add v17.4s,v17.4s,v5.4s1056.inst 0x5e2828c5 //sha256su0 v5.16b,v6.16b1057orr v2.16b,v0.16b,v0.16b1058.inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s1059.inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s1060.inst 0x5e0460e5 //sha256su1 v5.16b,v7.16b,v4.16b1061ld1 {v17.4s},[x3],#161062add v16.4s,v16.4s,v6.4s1063.inst 0x5e2828e6 //sha256su0 v6.16b,v7.16b1064orr v2.16b,v0.16b,v0.16b1065.inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s1066.inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s1067.inst 0x5e056086 //sha256su1 v6.16b,v4.16b,v5.16b1068ld1 {v16.4s},[x3],#161069add v17.4s,v17.4s,v7.4s1070.inst 0x5e282887 //sha256su0 v7.16b,v4.16b1071orr v2.16b,v0.16b,v0.16b1072.inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s1073.inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s1074.inst 0x5e0660a7 //sha256su1 v7.16b,v5.16b,v6.16b1075ld1 {v17.4s},[x3],#161076add v16.4s,v16.4s,v4.4s1077.inst 0x5e2828a4 //sha256su0 v4.16b,v5.16b1078orr v2.16b,v0.16b,v0.16b1079.inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s1080.inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s1081.inst 0x5e0760c4 //sha256su1 v4.16b,v6.16b,v7.16b1082ld1 {v16.4s},[x3],#161083add v17.4s,v17.4s,v5.4s1084.inst 0x5e2828c5 //sha256su0 v5.16b,v6.16b1085orr v2.16b,v0.16b,v0.16b1086.inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s1087.inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s1088.inst 0x5e0460e5 //sha256su1 v5.16b,v7.16b,v4.16b1089ld1 {v17.4s},[x3],#161090add v16.4s,v16.4s,v6.4s1091.inst 0x5e2828e6 //sha256su0 v6.16b,v7.16b1092orr v2.16b,v0.16b,v0.16b1093.inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s1094.inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s1095.inst 0x5e056086 //sha256su1 v6.16b,v4.16b,v5.16b1096ld1 {v16.4s},[x3],#161097add v17.4s,v17.4s,v7.4s1098.inst 0x5e282887 //sha256su0 v7.16b,v4.16b1099orr v2.16b,v0.16b,v0.16b1100.inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s1101.inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s1102.inst 0x5e0660a7 //sha256su1 v7.16b,v5.16b,v6.16b1103ld1 {v17.4s},[x3],#161104add v16.4s,v16.4s,v4.4s1105.inst 0x5e2828a4 //sha256su0 v4.16b,v5.16b1106orr v2.16b,v0.16b,v0.16b1107.inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s1108.inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s1109.inst 0x5e0760c4 //sha256su1 v4.16b,v6.16b,v7.16b1110ld1 {v16.4s},[x3],#161111add v17.4s,v17.4s,v5.4s1112.inst 0x5e2828c5 //sha256su0 v5.16b,v6.16b1113orr v2.16b,v0.16b,v0.16b1114.inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s1115.inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s1116.inst 0x5e0460e5 //sha256su1 v5.16b,v7.16b,v4.16b1117ld1 {v17.4s},[x3],#161118add v16.4s,v16.4s,v6.4s1119.inst 0x5e2828e6 //sha256su0 v6.16b,v7.16b1120orr v2.16b,v0.16b,v0.16b1121.inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s1122.inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s1123.inst 0x5e056086 //sha256su1 v6.16b,v4.16b,v5.16b1124ld1 {v16.4s},[x3],#161125add v17.4s,v17.4s,v7.4s1126.inst 0x5e282887 //sha256su0 v7.16b,v4.16b1127orr v2.16b,v0.16b,v0.16b1128.inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s1129.inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s1130.inst 0x5e0660a7 //sha256su1 v7.16b,v5.16b,v6.16b1131ld1 {v17.4s},[x3],#161132add v16.4s,v16.4s,v4.4s1133orr v2.16b,v0.16b,v0.16b1134.inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s1135.inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s11361137ld1 {v16.4s},[x3],#161138add v17.4s,v17.4s,v5.4s1139orr v2.16b,v0.16b,v0.16b1140.inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s1141.inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s11421143ld1 {v17.4s},[x3]1144add v16.4s,v16.4s,v6.4s1145sub x3,x3,#64*4-16 // rewind1146orr v2.16b,v0.16b,v0.16b1147.inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s1148.inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s11491150add v17.4s,v17.4s,v7.4s1151orr v2.16b,v0.16b,v0.16b1152.inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s1153.inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s11541155add v0.4s,v0.4s,v18.4s1156add v1.4s,v1.4s,v19.4s11571158cbnz x2,.Loop_hw11591160st1 {v0.4s,v1.4s},[x0]11611162ldr x29,[sp],#161163ret1164.size zfs_sha256_block_armv8,.-zfs_sha256_block_armv811651166.globl zfs_sha256_block_neon1167.type zfs_sha256_block_neon,%function1168.align 41169zfs_sha256_block_neon:1170hint #34 // bti c1171.Lneon_entry:1172stp x29, x30, [sp, #-16]!1173mov x29, sp1174sub sp,sp,#16*411751176adr x16,.LK2561177add x2,x1,x2,lsl#6 // len to point at the end of inp11781179ld1 {v0.16b},[x1], #161180ld1 {v1.16b},[x1], #161181ld1 {v2.16b},[x1], #161182ld1 {v3.16b},[x1], #161183ld1 {v4.4s},[x16], #161184ld1 {v5.4s},[x16], #161185ld1 {v6.4s},[x16], #161186ld1 {v7.4s},[x16], #161187rev32 v0.16b,v0.16b // yes, even on1188rev32 v1.16b,v1.16b // big-endian1189rev32 v2.16b,v2.16b1190rev32 v3.16b,v3.16b1191mov x17,sp1192add v4.4s,v4.4s,v0.4s1193add v5.4s,v5.4s,v1.4s1194add v6.4s,v6.4s,v2.4s1195st1 {v4.4s-v5.4s},[x17], #321196add v7.4s,v7.4s,v3.4s1197st1 {v6.4s-v7.4s},[x17]1198sub x17,x17,#3211991200ldp w3,w4,[x0]1201ldp w5,w6,[x0,#8]1202ldp w7,w8,[x0,#16]1203ldp w9,w10,[x0,#24]1204ldr w12,[sp,#0]1205mov w13,wzr1206eor w14,w4,w51207mov w15,wzr1208b .L_00_4812091210.align 41211.L_00_48:1212ext v4.16b,v0.16b,v1.16b,#41213add w10,w10,w121214add w3,w3,w151215and w12,w8,w71216bic w15,w9,w71217ext v7.16b,v2.16b,v3.16b,#41218eor w11,w7,w7,ror#51219add w3,w3,w131220mov d19,v3.d[1]1221orr w12,w12,w151222eor w11,w11,w7,ror#191223ushr v6.4s,v4.4s,#71224eor w15,w3,w3,ror#111225ushr v5.4s,v4.4s,#31226add w10,w10,w121227add v0.4s,v0.4s,v7.4s1228ror w11,w11,#61229sli v6.4s,v4.4s,#251230eor w13,w3,w41231eor w15,w15,w3,ror#201232ushr v7.4s,v4.4s,#181233add w10,w10,w111234ldr w12,[sp,#4]1235and w14,w14,w131236eor v5.16b,v5.16b,v6.16b1237ror w15,w15,#21238add w6,w6,w101239sli v7.4s,v4.4s,#141240eor w14,w14,w41241ushr v16.4s,v19.4s,#171242add w9,w9,w121243add w10,w10,w151244and w12,w7,w61245eor v5.16b,v5.16b,v7.16b1246bic w15,w8,w61247eor w11,w6,w6,ror#51248sli v16.4s,v19.4s,#151249add w10,w10,w141250orr w12,w12,w151251ushr v17.4s,v19.4s,#101252eor w11,w11,w6,ror#191253eor w15,w10,w10,ror#111254ushr v7.4s,v19.4s,#191255add w9,w9,w121256ror w11,w11,#61257add v0.4s,v0.4s,v5.4s1258eor w14,w10,w31259eor w15,w15,w10,ror#201260sli v7.4s,v19.4s,#131261add w9,w9,w111262ldr w12,[sp,#8]1263and w13,w13,w141264eor v17.16b,v17.16b,v16.16b1265ror w15,w15,#21266add w5,w5,w91267eor w13,w13,w31268eor v17.16b,v17.16b,v7.16b1269add w8,w8,w121270add w9,w9,w151271and w12,w6,w51272add v0.4s,v0.4s,v17.4s1273bic w15,w7,w51274eor w11,w5,w5,ror#51275add w9,w9,w131276ushr v18.4s,v0.4s,#171277orr w12,w12,w151278ushr v19.4s,v0.4s,#101279eor w11,w11,w5,ror#191280eor w15,w9,w9,ror#111281sli v18.4s,v0.4s,#151282add w8,w8,w121283ushr v17.4s,v0.4s,#191284ror w11,w11,#61285eor w13,w9,w101286eor v19.16b,v19.16b,v18.16b1287eor w15,w15,w9,ror#201288add w8,w8,w111289sli v17.4s,v0.4s,#131290ldr w12,[sp,#12]1291and w14,w14,w131292ror w15,w15,#21293ld1 {v4.4s},[x16], #161294add w4,w4,w81295eor v19.16b,v19.16b,v17.16b1296eor w14,w14,w101297eor v17.16b,v17.16b,v17.16b1298add w7,w7,w121299add w8,w8,w151300and w12,w5,w41301mov v17.d[1],v19.d[0]1302bic w15,w6,w41303eor w11,w4,w4,ror#51304add w8,w8,w141305add v0.4s,v0.4s,v17.4s1306orr w12,w12,w151307eor w11,w11,w4,ror#191308eor w15,w8,w8,ror#111309add v4.4s,v4.4s,v0.4s1310add w7,w7,w121311ror w11,w11,#61312eor w14,w8,w91313eor w15,w15,w8,ror#201314add w7,w7,w111315ldr w12,[sp,#16]1316and w13,w13,w141317ror w15,w15,#21318add w3,w3,w71319eor w13,w13,w91320st1 {v4.4s},[x17], #161321ext v4.16b,v1.16b,v2.16b,#41322add w6,w6,w121323add w7,w7,w151324and w12,w4,w31325bic w15,w5,w31326ext v7.16b,v3.16b,v0.16b,#41327eor w11,w3,w3,ror#51328add w7,w7,w131329mov d19,v0.d[1]1330orr w12,w12,w151331eor w11,w11,w3,ror#191332ushr v6.4s,v4.4s,#71333eor w15,w7,w7,ror#111334ushr v5.4s,v4.4s,#31335add w6,w6,w121336add v1.4s,v1.4s,v7.4s1337ror w11,w11,#61338sli v6.4s,v4.4s,#251339eor w13,w7,w81340eor w15,w15,w7,ror#201341ushr v7.4s,v4.4s,#181342add w6,w6,w111343ldr w12,[sp,#20]1344and w14,w14,w131345eor v5.16b,v5.16b,v6.16b1346ror w15,w15,#21347add w10,w10,w61348sli v7.4s,v4.4s,#141349eor w14,w14,w81350ushr v16.4s,v19.4s,#171351add w5,w5,w121352add w6,w6,w151353and w12,w3,w101354eor v5.16b,v5.16b,v7.16b1355bic w15,w4,w101356eor w11,w10,w10,ror#51357sli v16.4s,v19.4s,#151358add w6,w6,w141359orr w12,w12,w151360ushr v17.4s,v19.4s,#101361eor w11,w11,w10,ror#191362eor w15,w6,w6,ror#111363ushr v7.4s,v19.4s,#191364add w5,w5,w121365ror w11,w11,#61366add v1.4s,v1.4s,v5.4s1367eor w14,w6,w71368eor w15,w15,w6,ror#201369sli v7.4s,v19.4s,#131370add w5,w5,w111371ldr w12,[sp,#24]1372and w13,w13,w141373eor v17.16b,v17.16b,v16.16b1374ror w15,w15,#21375add w9,w9,w51376eor w13,w13,w71377eor v17.16b,v17.16b,v7.16b1378add w4,w4,w121379add w5,w5,w151380and w12,w10,w91381add v1.4s,v1.4s,v17.4s1382bic w15,w3,w91383eor w11,w9,w9,ror#51384add w5,w5,w131385ushr v18.4s,v1.4s,#171386orr w12,w12,w151387ushr v19.4s,v1.4s,#101388eor w11,w11,w9,ror#191389eor w15,w5,w5,ror#111390sli v18.4s,v1.4s,#151391add w4,w4,w121392ushr v17.4s,v1.4s,#191393ror w11,w11,#61394eor w13,w5,w61395eor v19.16b,v19.16b,v18.16b1396eor w15,w15,w5,ror#201397add w4,w4,w111398sli v17.4s,v1.4s,#131399ldr w12,[sp,#28]1400and w14,w14,w131401ror w15,w15,#21402ld1 {v4.4s},[x16], #161403add w8,w8,w41404eor v19.16b,v19.16b,v17.16b1405eor w14,w14,w61406eor v17.16b,v17.16b,v17.16b1407add w3,w3,w121408add w4,w4,w151409and w12,w9,w81410mov v17.d[1],v19.d[0]1411bic w15,w10,w81412eor w11,w8,w8,ror#51413add w4,w4,w141414add v1.4s,v1.4s,v17.4s1415orr w12,w12,w151416eor w11,w11,w8,ror#191417eor w15,w4,w4,ror#111418add v4.4s,v4.4s,v1.4s1419add w3,w3,w121420ror w11,w11,#61421eor w14,w4,w51422eor w15,w15,w4,ror#201423add w3,w3,w111424ldr w12,[sp,#32]1425and w13,w13,w141426ror w15,w15,#21427add w7,w7,w31428eor w13,w13,w51429st1 {v4.4s},[x17], #161430ext v4.16b,v2.16b,v3.16b,#41431add w10,w10,w121432add w3,w3,w151433and w12,w8,w71434bic w15,w9,w71435ext v7.16b,v0.16b,v1.16b,#41436eor w11,w7,w7,ror#51437add w3,w3,w131438mov d19,v1.d[1]1439orr w12,w12,w151440eor w11,w11,w7,ror#191441ushr v6.4s,v4.4s,#71442eor w15,w3,w3,ror#111443ushr v5.4s,v4.4s,#31444add w10,w10,w121445add v2.4s,v2.4s,v7.4s1446ror w11,w11,#61447sli v6.4s,v4.4s,#251448eor w13,w3,w41449eor w15,w15,w3,ror#201450ushr v7.4s,v4.4s,#181451add w10,w10,w111452ldr w12,[sp,#36]1453and w14,w14,w131454eor v5.16b,v5.16b,v6.16b1455ror w15,w15,#21456add w6,w6,w101457sli v7.4s,v4.4s,#141458eor w14,w14,w41459ushr v16.4s,v19.4s,#171460add w9,w9,w121461add w10,w10,w151462and w12,w7,w61463eor v5.16b,v5.16b,v7.16b1464bic w15,w8,w61465eor w11,w6,w6,ror#51466sli v16.4s,v19.4s,#151467add w10,w10,w141468orr w12,w12,w151469ushr v17.4s,v19.4s,#101470eor w11,w11,w6,ror#191471eor w15,w10,w10,ror#111472ushr v7.4s,v19.4s,#191473add w9,w9,w121474ror w11,w11,#61475add v2.4s,v2.4s,v5.4s1476eor w14,w10,w31477eor w15,w15,w10,ror#201478sli v7.4s,v19.4s,#131479add w9,w9,w111480ldr w12,[sp,#40]1481and w13,w13,w141482eor v17.16b,v17.16b,v16.16b1483ror w15,w15,#21484add w5,w5,w91485eor w13,w13,w31486eor v17.16b,v17.16b,v7.16b1487add w8,w8,w121488add w9,w9,w151489and w12,w6,w51490add v2.4s,v2.4s,v17.4s1491bic w15,w7,w51492eor w11,w5,w5,ror#51493add w9,w9,w131494ushr v18.4s,v2.4s,#171495orr w12,w12,w151496ushr v19.4s,v2.4s,#101497eor w11,w11,w5,ror#191498eor w15,w9,w9,ror#111499sli v18.4s,v2.4s,#151500add w8,w8,w121501ushr v17.4s,v2.4s,#191502ror w11,w11,#61503eor w13,w9,w101504eor v19.16b,v19.16b,v18.16b1505eor w15,w15,w9,ror#201506add w8,w8,w111507sli v17.4s,v2.4s,#131508ldr w12,[sp,#44]1509and w14,w14,w131510ror w15,w15,#21511ld1 {v4.4s},[x16], #161512add w4,w4,w81513eor v19.16b,v19.16b,v17.16b1514eor w14,w14,w101515eor v17.16b,v17.16b,v17.16b1516add w7,w7,w121517add w8,w8,w151518and w12,w5,w41519mov v17.d[1],v19.d[0]1520bic w15,w6,w41521eor w11,w4,w4,ror#51522add w8,w8,w141523add v2.4s,v2.4s,v17.4s1524orr w12,w12,w151525eor w11,w11,w4,ror#191526eor w15,w8,w8,ror#111527add v4.4s,v4.4s,v2.4s1528add w7,w7,w121529ror w11,w11,#61530eor w14,w8,w91531eor w15,w15,w8,ror#201532add w7,w7,w111533ldr w12,[sp,#48]1534and w13,w13,w141535ror w15,w15,#21536add w3,w3,w71537eor w13,w13,w91538st1 {v4.4s},[x17], #161539ext v4.16b,v3.16b,v0.16b,#41540add w6,w6,w121541add w7,w7,w151542and w12,w4,w31543bic w15,w5,w31544ext v7.16b,v1.16b,v2.16b,#41545eor w11,w3,w3,ror#51546add w7,w7,w131547mov d19,v2.d[1]1548orr w12,w12,w151549eor w11,w11,w3,ror#191550ushr v6.4s,v4.4s,#71551eor w15,w7,w7,ror#111552ushr v5.4s,v4.4s,#31553add w6,w6,w121554add v3.4s,v3.4s,v7.4s1555ror w11,w11,#61556sli v6.4s,v4.4s,#251557eor w13,w7,w81558eor w15,w15,w7,ror#201559ushr v7.4s,v4.4s,#181560add w6,w6,w111561ldr w12,[sp,#52]1562and w14,w14,w131563eor v5.16b,v5.16b,v6.16b1564ror w15,w15,#21565add w10,w10,w61566sli v7.4s,v4.4s,#141567eor w14,w14,w81568ushr v16.4s,v19.4s,#171569add w5,w5,w121570add w6,w6,w151571and w12,w3,w101572eor v5.16b,v5.16b,v7.16b1573bic w15,w4,w101574eor w11,w10,w10,ror#51575sli v16.4s,v19.4s,#151576add w6,w6,w141577orr w12,w12,w151578ushr v17.4s,v19.4s,#101579eor w11,w11,w10,ror#191580eor w15,w6,w6,ror#111581ushr v7.4s,v19.4s,#191582add w5,w5,w121583ror w11,w11,#61584add v3.4s,v3.4s,v5.4s1585eor w14,w6,w71586eor w15,w15,w6,ror#201587sli v7.4s,v19.4s,#131588add w5,w5,w111589ldr w12,[sp,#56]1590and w13,w13,w141591eor v17.16b,v17.16b,v16.16b1592ror w15,w15,#21593add w9,w9,w51594eor w13,w13,w71595eor v17.16b,v17.16b,v7.16b1596add w4,w4,w121597add w5,w5,w151598and w12,w10,w91599add v3.4s,v3.4s,v17.4s1600bic w15,w3,w91601eor w11,w9,w9,ror#51602add w5,w5,w131603ushr v18.4s,v3.4s,#171604orr w12,w12,w151605ushr v19.4s,v3.4s,#101606eor w11,w11,w9,ror#191607eor w15,w5,w5,ror#111608sli v18.4s,v3.4s,#151609add w4,w4,w121610ushr v17.4s,v3.4s,#191611ror w11,w11,#61612eor w13,w5,w61613eor v19.16b,v19.16b,v18.16b1614eor w15,w15,w5,ror#201615add w4,w4,w111616sli v17.4s,v3.4s,#131617ldr w12,[sp,#60]1618and w14,w14,w131619ror w15,w15,#21620ld1 {v4.4s},[x16], #161621add w8,w8,w41622eor v19.16b,v19.16b,v17.16b1623eor w14,w14,w61624eor v17.16b,v17.16b,v17.16b1625add w3,w3,w121626add w4,w4,w151627and w12,w9,w81628mov v17.d[1],v19.d[0]1629bic w15,w10,w81630eor w11,w8,w8,ror#51631add w4,w4,w141632add v3.4s,v3.4s,v17.4s1633orr w12,w12,w151634eor w11,w11,w8,ror#191635eor w15,w4,w4,ror#111636add v4.4s,v4.4s,v3.4s1637add w3,w3,w121638ror w11,w11,#61639eor w14,w4,w51640eor w15,w15,w4,ror#201641add w3,w3,w111642ldr w12,[x16]1643and w13,w13,w141644ror w15,w15,#21645add w7,w7,w31646eor w13,w13,w51647st1 {v4.4s},[x17], #161648cmp w12,#0 // check for K256 terminator1649ldr w12,[sp,#0]1650sub x17,x17,#641651bne .L_00_4816521653sub x16,x16,#256 // rewind x161654cmp x1,x21655mov x17, #641656csel x17, x17, xzr, eq1657sub x1,x1,x17 // avoid SEGV1658mov x17,sp1659add w10,w10,w121660add w3,w3,w151661and w12,w8,w71662ld1 {v0.16b},[x1],#161663bic w15,w9,w71664eor w11,w7,w7,ror#51665ld1 {v4.4s},[x16],#161666add w3,w3,w131667orr w12,w12,w151668eor w11,w11,w7,ror#191669eor w15,w3,w3,ror#111670rev32 v0.16b,v0.16b1671add w10,w10,w121672ror w11,w11,#61673eor w13,w3,w41674eor w15,w15,w3,ror#201675add v4.4s,v4.4s,v0.4s1676add w10,w10,w111677ldr w12,[sp,#4]1678and w14,w14,w131679ror w15,w15,#21680add w6,w6,w101681eor w14,w14,w41682add w9,w9,w121683add w10,w10,w151684and w12,w7,w61685bic w15,w8,w61686eor w11,w6,w6,ror#51687add w10,w10,w141688orr w12,w12,w151689eor w11,w11,w6,ror#191690eor w15,w10,w10,ror#111691add w9,w9,w121692ror w11,w11,#61693eor w14,w10,w31694eor w15,w15,w10,ror#201695add w9,w9,w111696ldr w12,[sp,#8]1697and w13,w13,w141698ror w15,w15,#21699add w5,w5,w91700eor w13,w13,w31701add w8,w8,w121702add w9,w9,w151703and w12,w6,w51704bic w15,w7,w51705eor w11,w5,w5,ror#51706add w9,w9,w131707orr w12,w12,w151708eor w11,w11,w5,ror#191709eor w15,w9,w9,ror#111710add w8,w8,w121711ror w11,w11,#61712eor w13,w9,w101713eor w15,w15,w9,ror#201714add w8,w8,w111715ldr w12,[sp,#12]1716and w14,w14,w131717ror w15,w15,#21718add w4,w4,w81719eor w14,w14,w101720add w7,w7,w121721add w8,w8,w151722and w12,w5,w41723bic w15,w6,w41724eor w11,w4,w4,ror#51725add w8,w8,w141726orr w12,w12,w151727eor w11,w11,w4,ror#191728eor w15,w8,w8,ror#111729add w7,w7,w121730ror w11,w11,#61731eor w14,w8,w91732eor w15,w15,w8,ror#201733add w7,w7,w111734ldr w12,[sp,#16]1735and w13,w13,w141736ror w15,w15,#21737add w3,w3,w71738eor w13,w13,w91739st1 {v4.4s},[x17], #161740add w6,w6,w121741add w7,w7,w151742and w12,w4,w31743ld1 {v1.16b},[x1],#161744bic w15,w5,w31745eor w11,w3,w3,ror#51746ld1 {v4.4s},[x16],#161747add w7,w7,w131748orr w12,w12,w151749eor w11,w11,w3,ror#191750eor w15,w7,w7,ror#111751rev32 v1.16b,v1.16b1752add w6,w6,w121753ror w11,w11,#61754eor w13,w7,w81755eor w15,w15,w7,ror#201756add v4.4s,v4.4s,v1.4s1757add w6,w6,w111758ldr w12,[sp,#20]1759and w14,w14,w131760ror w15,w15,#21761add w10,w10,w61762eor w14,w14,w81763add w5,w5,w121764add w6,w6,w151765and w12,w3,w101766bic w15,w4,w101767eor w11,w10,w10,ror#51768add w6,w6,w141769orr w12,w12,w151770eor w11,w11,w10,ror#191771eor w15,w6,w6,ror#111772add w5,w5,w121773ror w11,w11,#61774eor w14,w6,w71775eor w15,w15,w6,ror#201776add w5,w5,w111777ldr w12,[sp,#24]1778and w13,w13,w141779ror w15,w15,#21780add w9,w9,w51781eor w13,w13,w71782add w4,w4,w121783add w5,w5,w151784and w12,w10,w91785bic w15,w3,w91786eor w11,w9,w9,ror#51787add w5,w5,w131788orr w12,w12,w151789eor w11,w11,w9,ror#191790eor w15,w5,w5,ror#111791add w4,w4,w121792ror w11,w11,#61793eor w13,w5,w61794eor w15,w15,w5,ror#201795add w4,w4,w111796ldr w12,[sp,#28]1797and w14,w14,w131798ror w15,w15,#21799add w8,w8,w41800eor w14,w14,w61801add w3,w3,w121802add w4,w4,w151803and w12,w9,w81804bic w15,w10,w81805eor w11,w8,w8,ror#51806add w4,w4,w141807orr w12,w12,w151808eor w11,w11,w8,ror#191809eor w15,w4,w4,ror#111810add w3,w3,w121811ror w11,w11,#61812eor w14,w4,w51813eor w15,w15,w4,ror#201814add w3,w3,w111815ldr w12,[sp,#32]1816and w13,w13,w141817ror w15,w15,#21818add w7,w7,w31819eor w13,w13,w51820st1 {v4.4s},[x17], #161821add w10,w10,w121822add w3,w3,w151823and w12,w8,w71824ld1 {v2.16b},[x1],#161825bic w15,w9,w71826eor w11,w7,w7,ror#51827ld1 {v4.4s},[x16],#161828add w3,w3,w131829orr w12,w12,w151830eor w11,w11,w7,ror#191831eor w15,w3,w3,ror#111832rev32 v2.16b,v2.16b1833add w10,w10,w121834ror w11,w11,#61835eor w13,w3,w41836eor w15,w15,w3,ror#201837add v4.4s,v4.4s,v2.4s1838add w10,w10,w111839ldr w12,[sp,#36]1840and w14,w14,w131841ror w15,w15,#21842add w6,w6,w101843eor w14,w14,w41844add w9,w9,w121845add w10,w10,w151846and w12,w7,w61847bic w15,w8,w61848eor w11,w6,w6,ror#51849add w10,w10,w141850orr w12,w12,w151851eor w11,w11,w6,ror#191852eor w15,w10,w10,ror#111853add w9,w9,w121854ror w11,w11,#61855eor w14,w10,w31856eor w15,w15,w10,ror#201857add w9,w9,w111858ldr w12,[sp,#40]1859and w13,w13,w141860ror w15,w15,#21861add w5,w5,w91862eor w13,w13,w31863add w8,w8,w121864add w9,w9,w151865and w12,w6,w51866bic w15,w7,w51867eor w11,w5,w5,ror#51868add w9,w9,w131869orr w12,w12,w151870eor w11,w11,w5,ror#191871eor w15,w9,w9,ror#111872add w8,w8,w121873ror w11,w11,#61874eor w13,w9,w101875eor w15,w15,w9,ror#201876add w8,w8,w111877ldr w12,[sp,#44]1878and w14,w14,w131879ror w15,w15,#21880add w4,w4,w81881eor w14,w14,w101882add w7,w7,w121883add w8,w8,w151884and w12,w5,w41885bic w15,w6,w41886eor w11,w4,w4,ror#51887add w8,w8,w141888orr w12,w12,w151889eor w11,w11,w4,ror#191890eor w15,w8,w8,ror#111891add w7,w7,w121892ror w11,w11,#61893eor w14,w8,w91894eor w15,w15,w8,ror#201895add w7,w7,w111896ldr w12,[sp,#48]1897and w13,w13,w141898ror w15,w15,#21899add w3,w3,w71900eor w13,w13,w91901st1 {v4.4s},[x17], #161902add w6,w6,w121903add w7,w7,w151904and w12,w4,w31905ld1 {v3.16b},[x1],#161906bic w15,w5,w31907eor w11,w3,w3,ror#51908ld1 {v4.4s},[x16],#161909add w7,w7,w131910orr w12,w12,w151911eor w11,w11,w3,ror#191912eor w15,w7,w7,ror#111913rev32 v3.16b,v3.16b1914add w6,w6,w121915ror w11,w11,#61916eor w13,w7,w81917eor w15,w15,w7,ror#201918add v4.4s,v4.4s,v3.4s1919add w6,w6,w111920ldr w12,[sp,#52]1921and w14,w14,w131922ror w15,w15,#21923add w10,w10,w61924eor w14,w14,w81925add w5,w5,w121926add w6,w6,w151927and w12,w3,w101928bic w15,w4,w101929eor w11,w10,w10,ror#51930add w6,w6,w141931orr w12,w12,w151932eor w11,w11,w10,ror#191933eor w15,w6,w6,ror#111934add w5,w5,w121935ror w11,w11,#61936eor w14,w6,w71937eor w15,w15,w6,ror#201938add w5,w5,w111939ldr w12,[sp,#56]1940and w13,w13,w141941ror w15,w15,#21942add w9,w9,w51943eor w13,w13,w71944add w4,w4,w121945add w5,w5,w151946and w12,w10,w91947bic w15,w3,w91948eor w11,w9,w9,ror#51949add w5,w5,w131950orr w12,w12,w151951eor w11,w11,w9,ror#191952eor w15,w5,w5,ror#111953add w4,w4,w121954ror w11,w11,#61955eor w13,w5,w61956eor w15,w15,w5,ror#201957add w4,w4,w111958ldr w12,[sp,#60]1959and w14,w14,w131960ror w15,w15,#21961add w8,w8,w41962eor w14,w14,w61963add w3,w3,w121964add w4,w4,w151965and w12,w9,w81966bic w15,w10,w81967eor w11,w8,w8,ror#51968add w4,w4,w141969orr w12,w12,w151970eor w11,w11,w8,ror#191971eor w15,w4,w4,ror#111972add w3,w3,w121973ror w11,w11,#61974eor w14,w4,w51975eor w15,w15,w4,ror#201976add w3,w3,w111977and w13,w13,w141978ror w15,w15,#21979add w7,w7,w31980eor w13,w13,w51981st1 {v4.4s},[x17], #161982add w3,w3,w15 // h+=Sigma0(a) from the past1983ldp w11,w12,[x0,#0]1984add w3,w3,w13 // h+=Maj(a,b,c) from the past1985ldp w13,w14,[x0,#8]1986add w3,w3,w11 // accumulate1987add w4,w4,w121988ldp w11,w12,[x0,#16]1989add w5,w5,w131990add w6,w6,w141991ldp w13,w14,[x0,#24]1992add w7,w7,w111993add w8,w8,w121994ldr w12,[sp,#0]1995stp w3,w4,[x0,#0]1996add w9,w9,w131997mov w13,wzr1998stp w5,w6,[x0,#8]1999add w10,w10,w142000stp w7,w8,[x0,#16]2001eor w14,w4,w52002stp w9,w10,[x0,#24]2003mov w15,wzr2004mov x17,sp2005b.ne .L_00_4820062007ldr x29,[x29]2008add sp,sp,#16*4+162009ret2010.size zfs_sha256_block_neon,.-zfs_sha256_block_neon20112012#endif201320142015