Path: blob/main/sys/contrib/openzfs/module/icp/asm-aarch64/sha2/sha512-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 .LK512,%object38.LK512:39.quad 0x428a2f98d728ae22,0x7137449123ef65cd40.quad 0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc41.quad 0x3956c25bf348b538,0x59f111f1b605d01942.quad 0x923f82a4af194f9b,0xab1c5ed5da6d811843.quad 0xd807aa98a3030242,0x12835b0145706fbe44.quad 0x243185be4ee4b28c,0x550c7dc3d5ffb4e245.quad 0x72be5d74f27b896f,0x80deb1fe3b1696b146.quad 0x9bdc06a725c71235,0xc19bf174cf69269447.quad 0xe49b69c19ef14ad2,0xefbe4786384f25e348.quad 0x0fc19dc68b8cd5b5,0x240ca1cc77ac9c6549.quad 0x2de92c6f592b0275,0x4a7484aa6ea6e48350.quad 0x5cb0a9dcbd41fbd4,0x76f988da831153b551.quad 0x983e5152ee66dfab,0xa831c66d2db4321052.quad 0xb00327c898fb213f,0xbf597fc7beef0ee453.quad 0xc6e00bf33da88fc2,0xd5a79147930aa72554.quad 0x06ca6351e003826f,0x142929670a0e6e7055.quad 0x27b70a8546d22ffc,0x2e1b21385c26c92656.quad 0x4d2c6dfc5ac42aed,0x53380d139d95b3df57.quad 0x650a73548baf63de,0x766a0abb3c77b2a858.quad 0x81c2c92e47edaee6,0x92722c851482353b59.quad 0xa2bfe8a14cf10364,0xa81a664bbc42300160.quad 0xc24b8b70d0f89791,0xc76c51a30654be3061.quad 0xd192e819d6ef5218,0xd69906245565a91062.quad 0xf40e35855771202a,0x106aa07032bbd1b863.quad 0x19a4c116b8d2d0c8,0x1e376c085141ab5364.quad 0x2748774cdf8eeb99,0x34b0bcb5e19b48a865.quad 0x391c0cb3c5c95a63,0x4ed8aa4ae3418acb66.quad 0x5b9cca4f7763e373,0x682e6ff3d6b2b8a367.quad 0x748f82ee5defb2fc,0x78a5636f43172f6068.quad 0x84c87814a1f0ab72,0x8cc702081a6439ec69.quad 0x90befffa23631e28,0xa4506cebde82bde970.quad 0xbef9a3f7b2c67915,0xc67178f2e372532b71.quad 0xca273eceea26619c,0xd186b8c721c0c20772.quad 0xeada7dd6cde0eb1e,0xf57d4f7fee6ed17873.quad 0x06f067aa72176fba,0x0a637dc5a2c898a674.quad 0x113f9804bef90dae,0x1b710b35131c471b75.quad 0x28db77f523047d84,0x32caab7b40c7249376.quad 0x3c9ebe0a15c9bebc,0x431d67c49c100d4c77.quad 0x4cc5d4becb3e42b6,0x597f299cfc657e2a78.quad 0x5fcb6fab3ad6faec,0x6c44198c4a47581779.quad 0 // terminator80.size .LK512,.-.LK5128182.globl zfs_sha512_block_armv783.type zfs_sha512_block_armv7,%function84.align 685zfs_sha512_block_armv7:86hint #34 // bti c87stp x29,x30,[sp,#-128]!88add x29,sp,#08990stp x19,x20,[sp,#16]91stp x21,x22,[sp,#32]92stp x23,x24,[sp,#48]93stp x25,x26,[sp,#64]94stp x27,x28,[sp,#80]95sub sp,sp,#4*89697ldp x20,x21,[x0] // load context98ldp x22,x23,[x0,#2*8]99ldp x24,x25,[x0,#4*8]100add x2,x1,x2,lsl#7 // end of input101ldp x26,x27,[x0,#6*8]102adr x30,.LK512103stp x0,x2,[x29,#96]104105.Loop:106ldp x3,x4,[x1],#2*8107ldr x19,[x30],#8 // *K++108eor x28,x21,x22 // magic seed109str x1,[x29,#112]110#ifndef __AARCH64EB__111rev x3,x3 // 0112#endif113ror x16,x24,#14114add x27,x27,x19 // h+=K[i]115eor x6,x24,x24,ror#23116and x17,x25,x24117bic x19,x26,x24118add x27,x27,x3 // h+=X[i]119orr x17,x17,x19 // Ch(e,f,g)120eor x19,x20,x21 // a^b, b^c in next round121eor x16,x16,x6,ror#18 // Sigma1(e)122ror x6,x20,#28123add x27,x27,x17 // h+=Ch(e,f,g)124eor x17,x20,x20,ror#5125add x27,x27,x16 // h+=Sigma1(e)126and x28,x28,x19 // (b^c)&=(a^b)127add x23,x23,x27 // d+=h128eor x28,x28,x21 // Maj(a,b,c)129eor x17,x6,x17,ror#34 // Sigma0(a)130add x27,x27,x28 // h+=Maj(a,b,c)131ldr x28,[x30],#8 // *K++, x19 in next round132//add x27,x27,x17 // h+=Sigma0(a)133#ifndef __AARCH64EB__134rev x4,x4 // 1135#endif136ldp x5,x6,[x1],#2*8137add x27,x27,x17 // h+=Sigma0(a)138ror x16,x23,#14139add x26,x26,x28 // h+=K[i]140eor x7,x23,x23,ror#23141and x17,x24,x23142bic x28,x25,x23143add x26,x26,x4 // h+=X[i]144orr x17,x17,x28 // Ch(e,f,g)145eor x28,x27,x20 // a^b, b^c in next round146eor x16,x16,x7,ror#18 // Sigma1(e)147ror x7,x27,#28148add x26,x26,x17 // h+=Ch(e,f,g)149eor x17,x27,x27,ror#5150add x26,x26,x16 // h+=Sigma1(e)151and x19,x19,x28 // (b^c)&=(a^b)152add x22,x22,x26 // d+=h153eor x19,x19,x20 // Maj(a,b,c)154eor x17,x7,x17,ror#34 // Sigma0(a)155add x26,x26,x19 // h+=Maj(a,b,c)156ldr x19,[x30],#8 // *K++, x28 in next round157//add x26,x26,x17 // h+=Sigma0(a)158#ifndef __AARCH64EB__159rev x5,x5 // 2160#endif161add x26,x26,x17 // h+=Sigma0(a)162ror x16,x22,#14163add x25,x25,x19 // h+=K[i]164eor x8,x22,x22,ror#23165and x17,x23,x22166bic x19,x24,x22167add x25,x25,x5 // h+=X[i]168orr x17,x17,x19 // Ch(e,f,g)169eor x19,x26,x27 // a^b, b^c in next round170eor x16,x16,x8,ror#18 // Sigma1(e)171ror x8,x26,#28172add x25,x25,x17 // h+=Ch(e,f,g)173eor x17,x26,x26,ror#5174add x25,x25,x16 // h+=Sigma1(e)175and x28,x28,x19 // (b^c)&=(a^b)176add x21,x21,x25 // d+=h177eor x28,x28,x27 // Maj(a,b,c)178eor x17,x8,x17,ror#34 // Sigma0(a)179add x25,x25,x28 // h+=Maj(a,b,c)180ldr x28,[x30],#8 // *K++, x19 in next round181//add x25,x25,x17 // h+=Sigma0(a)182#ifndef __AARCH64EB__183rev x6,x6 // 3184#endif185ldp x7,x8,[x1],#2*8186add x25,x25,x17 // h+=Sigma0(a)187ror x16,x21,#14188add x24,x24,x28 // h+=K[i]189eor x9,x21,x21,ror#23190and x17,x22,x21191bic x28,x23,x21192add x24,x24,x6 // h+=X[i]193orr x17,x17,x28 // Ch(e,f,g)194eor x28,x25,x26 // a^b, b^c in next round195eor x16,x16,x9,ror#18 // Sigma1(e)196ror x9,x25,#28197add x24,x24,x17 // h+=Ch(e,f,g)198eor x17,x25,x25,ror#5199add x24,x24,x16 // h+=Sigma1(e)200and x19,x19,x28 // (b^c)&=(a^b)201add x20,x20,x24 // d+=h202eor x19,x19,x26 // Maj(a,b,c)203eor x17,x9,x17,ror#34 // Sigma0(a)204add x24,x24,x19 // h+=Maj(a,b,c)205ldr x19,[x30],#8 // *K++, x28 in next round206//add x24,x24,x17 // h+=Sigma0(a)207#ifndef __AARCH64EB__208rev x7,x7 // 4209#endif210add x24,x24,x17 // h+=Sigma0(a)211ror x16,x20,#14212add x23,x23,x19 // h+=K[i]213eor x10,x20,x20,ror#23214and x17,x21,x20215bic x19,x22,x20216add x23,x23,x7 // h+=X[i]217orr x17,x17,x19 // Ch(e,f,g)218eor x19,x24,x25 // a^b, b^c in next round219eor x16,x16,x10,ror#18 // Sigma1(e)220ror x10,x24,#28221add x23,x23,x17 // h+=Ch(e,f,g)222eor x17,x24,x24,ror#5223add x23,x23,x16 // h+=Sigma1(e)224and x28,x28,x19 // (b^c)&=(a^b)225add x27,x27,x23 // d+=h226eor x28,x28,x25 // Maj(a,b,c)227eor x17,x10,x17,ror#34 // Sigma0(a)228add x23,x23,x28 // h+=Maj(a,b,c)229ldr x28,[x30],#8 // *K++, x19 in next round230//add x23,x23,x17 // h+=Sigma0(a)231#ifndef __AARCH64EB__232rev x8,x8 // 5233#endif234ldp x9,x10,[x1],#2*8235add x23,x23,x17 // h+=Sigma0(a)236ror x16,x27,#14237add x22,x22,x28 // h+=K[i]238eor x11,x27,x27,ror#23239and x17,x20,x27240bic x28,x21,x27241add x22,x22,x8 // h+=X[i]242orr x17,x17,x28 // Ch(e,f,g)243eor x28,x23,x24 // a^b, b^c in next round244eor x16,x16,x11,ror#18 // Sigma1(e)245ror x11,x23,#28246add x22,x22,x17 // h+=Ch(e,f,g)247eor x17,x23,x23,ror#5248add x22,x22,x16 // h+=Sigma1(e)249and x19,x19,x28 // (b^c)&=(a^b)250add x26,x26,x22 // d+=h251eor x19,x19,x24 // Maj(a,b,c)252eor x17,x11,x17,ror#34 // Sigma0(a)253add x22,x22,x19 // h+=Maj(a,b,c)254ldr x19,[x30],#8 // *K++, x28 in next round255//add x22,x22,x17 // h+=Sigma0(a)256#ifndef __AARCH64EB__257rev x9,x9 // 6258#endif259add x22,x22,x17 // h+=Sigma0(a)260ror x16,x26,#14261add x21,x21,x19 // h+=K[i]262eor x12,x26,x26,ror#23263and x17,x27,x26264bic x19,x20,x26265add x21,x21,x9 // h+=X[i]266orr x17,x17,x19 // Ch(e,f,g)267eor x19,x22,x23 // a^b, b^c in next round268eor x16,x16,x12,ror#18 // Sigma1(e)269ror x12,x22,#28270add x21,x21,x17 // h+=Ch(e,f,g)271eor x17,x22,x22,ror#5272add x21,x21,x16 // h+=Sigma1(e)273and x28,x28,x19 // (b^c)&=(a^b)274add x25,x25,x21 // d+=h275eor x28,x28,x23 // Maj(a,b,c)276eor x17,x12,x17,ror#34 // Sigma0(a)277add x21,x21,x28 // h+=Maj(a,b,c)278ldr x28,[x30],#8 // *K++, x19 in next round279//add x21,x21,x17 // h+=Sigma0(a)280#ifndef __AARCH64EB__281rev x10,x10 // 7282#endif283ldp x11,x12,[x1],#2*8284add x21,x21,x17 // h+=Sigma0(a)285ror x16,x25,#14286add x20,x20,x28 // h+=K[i]287eor x13,x25,x25,ror#23288and x17,x26,x25289bic x28,x27,x25290add x20,x20,x10 // h+=X[i]291orr x17,x17,x28 // Ch(e,f,g)292eor x28,x21,x22 // a^b, b^c in next round293eor x16,x16,x13,ror#18 // Sigma1(e)294ror x13,x21,#28295add x20,x20,x17 // h+=Ch(e,f,g)296eor x17,x21,x21,ror#5297add x20,x20,x16 // h+=Sigma1(e)298and x19,x19,x28 // (b^c)&=(a^b)299add x24,x24,x20 // d+=h300eor x19,x19,x22 // Maj(a,b,c)301eor x17,x13,x17,ror#34 // Sigma0(a)302add x20,x20,x19 // h+=Maj(a,b,c)303ldr x19,[x30],#8 // *K++, x28 in next round304//add x20,x20,x17 // h+=Sigma0(a)305#ifndef __AARCH64EB__306rev x11,x11 // 8307#endif308add x20,x20,x17 // h+=Sigma0(a)309ror x16,x24,#14310add x27,x27,x19 // h+=K[i]311eor x14,x24,x24,ror#23312and x17,x25,x24313bic x19,x26,x24314add x27,x27,x11 // h+=X[i]315orr x17,x17,x19 // Ch(e,f,g)316eor x19,x20,x21 // a^b, b^c in next round317eor x16,x16,x14,ror#18 // Sigma1(e)318ror x14,x20,#28319add x27,x27,x17 // h+=Ch(e,f,g)320eor x17,x20,x20,ror#5321add x27,x27,x16 // h+=Sigma1(e)322and x28,x28,x19 // (b^c)&=(a^b)323add x23,x23,x27 // d+=h324eor x28,x28,x21 // Maj(a,b,c)325eor x17,x14,x17,ror#34 // Sigma0(a)326add x27,x27,x28 // h+=Maj(a,b,c)327ldr x28,[x30],#8 // *K++, x19 in next round328//add x27,x27,x17 // h+=Sigma0(a)329#ifndef __AARCH64EB__330rev x12,x12 // 9331#endif332ldp x13,x14,[x1],#2*8333add x27,x27,x17 // h+=Sigma0(a)334ror x16,x23,#14335add x26,x26,x28 // h+=K[i]336eor x15,x23,x23,ror#23337and x17,x24,x23338bic x28,x25,x23339add x26,x26,x12 // h+=X[i]340orr x17,x17,x28 // Ch(e,f,g)341eor x28,x27,x20 // a^b, b^c in next round342eor x16,x16,x15,ror#18 // Sigma1(e)343ror x15,x27,#28344add x26,x26,x17 // h+=Ch(e,f,g)345eor x17,x27,x27,ror#5346add x26,x26,x16 // h+=Sigma1(e)347and x19,x19,x28 // (b^c)&=(a^b)348add x22,x22,x26 // d+=h349eor x19,x19,x20 // Maj(a,b,c)350eor x17,x15,x17,ror#34 // Sigma0(a)351add x26,x26,x19 // h+=Maj(a,b,c)352ldr x19,[x30],#8 // *K++, x28 in next round353//add x26,x26,x17 // h+=Sigma0(a)354#ifndef __AARCH64EB__355rev x13,x13 // 10356#endif357add x26,x26,x17 // h+=Sigma0(a)358ror x16,x22,#14359add x25,x25,x19 // h+=K[i]360eor x0,x22,x22,ror#23361and x17,x23,x22362bic x19,x24,x22363add x25,x25,x13 // h+=X[i]364orr x17,x17,x19 // Ch(e,f,g)365eor x19,x26,x27 // a^b, b^c in next round366eor x16,x16,x0,ror#18 // Sigma1(e)367ror x0,x26,#28368add x25,x25,x17 // h+=Ch(e,f,g)369eor x17,x26,x26,ror#5370add x25,x25,x16 // h+=Sigma1(e)371and x28,x28,x19 // (b^c)&=(a^b)372add x21,x21,x25 // d+=h373eor x28,x28,x27 // Maj(a,b,c)374eor x17,x0,x17,ror#34 // Sigma0(a)375add x25,x25,x28 // h+=Maj(a,b,c)376ldr x28,[x30],#8 // *K++, x19 in next round377//add x25,x25,x17 // h+=Sigma0(a)378#ifndef __AARCH64EB__379rev x14,x14 // 11380#endif381ldp x15,x0,[x1],#2*8382add x25,x25,x17 // h+=Sigma0(a)383str x6,[sp,#24]384ror x16,x21,#14385add x24,x24,x28 // h+=K[i]386eor x6,x21,x21,ror#23387and x17,x22,x21388bic x28,x23,x21389add x24,x24,x14 // h+=X[i]390orr x17,x17,x28 // Ch(e,f,g)391eor x28,x25,x26 // a^b, b^c in next round392eor x16,x16,x6,ror#18 // Sigma1(e)393ror x6,x25,#28394add x24,x24,x17 // h+=Ch(e,f,g)395eor x17,x25,x25,ror#5396add x24,x24,x16 // h+=Sigma1(e)397and x19,x19,x28 // (b^c)&=(a^b)398add x20,x20,x24 // d+=h399eor x19,x19,x26 // Maj(a,b,c)400eor x17,x6,x17,ror#34 // Sigma0(a)401add x24,x24,x19 // h+=Maj(a,b,c)402ldr x19,[x30],#8 // *K++, x28 in next round403//add x24,x24,x17 // h+=Sigma0(a)404#ifndef __AARCH64EB__405rev x15,x15 // 12406#endif407add x24,x24,x17 // h+=Sigma0(a)408str x7,[sp,#0]409ror x16,x20,#14410add x23,x23,x19 // h+=K[i]411eor x7,x20,x20,ror#23412and x17,x21,x20413bic x19,x22,x20414add x23,x23,x15 // h+=X[i]415orr x17,x17,x19 // Ch(e,f,g)416eor x19,x24,x25 // a^b, b^c in next round417eor x16,x16,x7,ror#18 // Sigma1(e)418ror x7,x24,#28419add x23,x23,x17 // h+=Ch(e,f,g)420eor x17,x24,x24,ror#5421add x23,x23,x16 // h+=Sigma1(e)422and x28,x28,x19 // (b^c)&=(a^b)423add x27,x27,x23 // d+=h424eor x28,x28,x25 // Maj(a,b,c)425eor x17,x7,x17,ror#34 // Sigma0(a)426add x23,x23,x28 // h+=Maj(a,b,c)427ldr x28,[x30],#8 // *K++, x19 in next round428//add x23,x23,x17 // h+=Sigma0(a)429#ifndef __AARCH64EB__430rev x0,x0 // 13431#endif432ldp x1,x2,[x1]433add x23,x23,x17 // h+=Sigma0(a)434str x8,[sp,#8]435ror x16,x27,#14436add x22,x22,x28 // h+=K[i]437eor x8,x27,x27,ror#23438and x17,x20,x27439bic x28,x21,x27440add x22,x22,x0 // h+=X[i]441orr x17,x17,x28 // Ch(e,f,g)442eor x28,x23,x24 // a^b, b^c in next round443eor x16,x16,x8,ror#18 // Sigma1(e)444ror x8,x23,#28445add x22,x22,x17 // h+=Ch(e,f,g)446eor x17,x23,x23,ror#5447add x22,x22,x16 // h+=Sigma1(e)448and x19,x19,x28 // (b^c)&=(a^b)449add x26,x26,x22 // d+=h450eor x19,x19,x24 // Maj(a,b,c)451eor x17,x8,x17,ror#34 // Sigma0(a)452add x22,x22,x19 // h+=Maj(a,b,c)453ldr x19,[x30],#8 // *K++, x28 in next round454//add x22,x22,x17 // h+=Sigma0(a)455#ifndef __AARCH64EB__456rev x1,x1 // 14457#endif458ldr x6,[sp,#24]459add x22,x22,x17 // h+=Sigma0(a)460str x9,[sp,#16]461ror x16,x26,#14462add x21,x21,x19 // h+=K[i]463eor x9,x26,x26,ror#23464and x17,x27,x26465bic x19,x20,x26466add x21,x21,x1 // h+=X[i]467orr x17,x17,x19 // Ch(e,f,g)468eor x19,x22,x23 // a^b, b^c in next round469eor x16,x16,x9,ror#18 // Sigma1(e)470ror x9,x22,#28471add x21,x21,x17 // h+=Ch(e,f,g)472eor x17,x22,x22,ror#5473add x21,x21,x16 // h+=Sigma1(e)474and x28,x28,x19 // (b^c)&=(a^b)475add x25,x25,x21 // d+=h476eor x28,x28,x23 // Maj(a,b,c)477eor x17,x9,x17,ror#34 // Sigma0(a)478add x21,x21,x28 // h+=Maj(a,b,c)479ldr x28,[x30],#8 // *K++, x19 in next round480//add x21,x21,x17 // h+=Sigma0(a)481#ifndef __AARCH64EB__482rev x2,x2 // 15483#endif484ldr x7,[sp,#0]485add x21,x21,x17 // h+=Sigma0(a)486str x10,[sp,#24]487ror x16,x25,#14488add x20,x20,x28 // h+=K[i]489ror x9,x4,#1490and x17,x26,x25491ror x8,x1,#19492bic x28,x27,x25493ror x10,x21,#28494add x20,x20,x2 // h+=X[i]495eor x16,x16,x25,ror#18496eor x9,x9,x4,ror#8497orr x17,x17,x28 // Ch(e,f,g)498eor x28,x21,x22 // a^b, b^c in next round499eor x16,x16,x25,ror#41 // Sigma1(e)500eor x10,x10,x21,ror#34501add x20,x20,x17 // h+=Ch(e,f,g)502and x19,x19,x28 // (b^c)&=(a^b)503eor x8,x8,x1,ror#61504eor x9,x9,x4,lsr#7 // sigma0(X[i+1])505add x20,x20,x16 // h+=Sigma1(e)506eor x19,x19,x22 // Maj(a,b,c)507eor x17,x10,x21,ror#39 // Sigma0(a)508eor x8,x8,x1,lsr#6 // sigma1(X[i+14])509add x3,x3,x12510add x24,x24,x20 // d+=h511add x20,x20,x19 // h+=Maj(a,b,c)512ldr x19,[x30],#8 // *K++, x28 in next round513add x3,x3,x9514add x20,x20,x17 // h+=Sigma0(a)515add x3,x3,x8516.Loop_16_xx:517ldr x8,[sp,#8]518str x11,[sp,#0]519ror x16,x24,#14520add x27,x27,x19 // h+=K[i]521ror x10,x5,#1522and x17,x25,x24523ror x9,x2,#19524bic x19,x26,x24525ror x11,x20,#28526add x27,x27,x3 // h+=X[i]527eor x16,x16,x24,ror#18528eor x10,x10,x5,ror#8529orr x17,x17,x19 // Ch(e,f,g)530eor x19,x20,x21 // a^b, b^c in next round531eor x16,x16,x24,ror#41 // Sigma1(e)532eor x11,x11,x20,ror#34533add x27,x27,x17 // h+=Ch(e,f,g)534and x28,x28,x19 // (b^c)&=(a^b)535eor x9,x9,x2,ror#61536eor x10,x10,x5,lsr#7 // sigma0(X[i+1])537add x27,x27,x16 // h+=Sigma1(e)538eor x28,x28,x21 // Maj(a,b,c)539eor x17,x11,x20,ror#39 // Sigma0(a)540eor x9,x9,x2,lsr#6 // sigma1(X[i+14])541add x4,x4,x13542add x23,x23,x27 // d+=h543add x27,x27,x28 // h+=Maj(a,b,c)544ldr x28,[x30],#8 // *K++, x19 in next round545add x4,x4,x10546add x27,x27,x17 // h+=Sigma0(a)547add x4,x4,x9548ldr x9,[sp,#16]549str x12,[sp,#8]550ror x16,x23,#14551add x26,x26,x28 // h+=K[i]552ror x11,x6,#1553and x17,x24,x23554ror x10,x3,#19555bic x28,x25,x23556ror x12,x27,#28557add x26,x26,x4 // h+=X[i]558eor x16,x16,x23,ror#18559eor x11,x11,x6,ror#8560orr x17,x17,x28 // Ch(e,f,g)561eor x28,x27,x20 // a^b, b^c in next round562eor x16,x16,x23,ror#41 // Sigma1(e)563eor x12,x12,x27,ror#34564add x26,x26,x17 // h+=Ch(e,f,g)565and x19,x19,x28 // (b^c)&=(a^b)566eor x10,x10,x3,ror#61567eor x11,x11,x6,lsr#7 // sigma0(X[i+1])568add x26,x26,x16 // h+=Sigma1(e)569eor x19,x19,x20 // Maj(a,b,c)570eor x17,x12,x27,ror#39 // Sigma0(a)571eor x10,x10,x3,lsr#6 // sigma1(X[i+14])572add x5,x5,x14573add x22,x22,x26 // d+=h574add x26,x26,x19 // h+=Maj(a,b,c)575ldr x19,[x30],#8 // *K++, x28 in next round576add x5,x5,x11577add x26,x26,x17 // h+=Sigma0(a)578add x5,x5,x10579ldr x10,[sp,#24]580str x13,[sp,#16]581ror x16,x22,#14582add x25,x25,x19 // h+=K[i]583ror x12,x7,#1584and x17,x23,x22585ror x11,x4,#19586bic x19,x24,x22587ror x13,x26,#28588add x25,x25,x5 // h+=X[i]589eor x16,x16,x22,ror#18590eor x12,x12,x7,ror#8591orr x17,x17,x19 // Ch(e,f,g)592eor x19,x26,x27 // a^b, b^c in next round593eor x16,x16,x22,ror#41 // Sigma1(e)594eor x13,x13,x26,ror#34595add x25,x25,x17 // h+=Ch(e,f,g)596and x28,x28,x19 // (b^c)&=(a^b)597eor x11,x11,x4,ror#61598eor x12,x12,x7,lsr#7 // sigma0(X[i+1])599add x25,x25,x16 // h+=Sigma1(e)600eor x28,x28,x27 // Maj(a,b,c)601eor x17,x13,x26,ror#39 // Sigma0(a)602eor x11,x11,x4,lsr#6 // sigma1(X[i+14])603add x6,x6,x15604add x21,x21,x25 // d+=h605add x25,x25,x28 // h+=Maj(a,b,c)606ldr x28,[x30],#8 // *K++, x19 in next round607add x6,x6,x12608add x25,x25,x17 // h+=Sigma0(a)609add x6,x6,x11610ldr x11,[sp,#0]611str x14,[sp,#24]612ror x16,x21,#14613add x24,x24,x28 // h+=K[i]614ror x13,x8,#1615and x17,x22,x21616ror x12,x5,#19617bic x28,x23,x21618ror x14,x25,#28619add x24,x24,x6 // h+=X[i]620eor x16,x16,x21,ror#18621eor x13,x13,x8,ror#8622orr x17,x17,x28 // Ch(e,f,g)623eor x28,x25,x26 // a^b, b^c in next round624eor x16,x16,x21,ror#41 // Sigma1(e)625eor x14,x14,x25,ror#34626add x24,x24,x17 // h+=Ch(e,f,g)627and x19,x19,x28 // (b^c)&=(a^b)628eor x12,x12,x5,ror#61629eor x13,x13,x8,lsr#7 // sigma0(X[i+1])630add x24,x24,x16 // h+=Sigma1(e)631eor x19,x19,x26 // Maj(a,b,c)632eor x17,x14,x25,ror#39 // Sigma0(a)633eor x12,x12,x5,lsr#6 // sigma1(X[i+14])634add x7,x7,x0635add x20,x20,x24 // d+=h636add x24,x24,x19 // h+=Maj(a,b,c)637ldr x19,[x30],#8 // *K++, x28 in next round638add x7,x7,x13639add x24,x24,x17 // h+=Sigma0(a)640add x7,x7,x12641ldr x12,[sp,#8]642str x15,[sp,#0]643ror x16,x20,#14644add x23,x23,x19 // h+=K[i]645ror x14,x9,#1646and x17,x21,x20647ror x13,x6,#19648bic x19,x22,x20649ror x15,x24,#28650add x23,x23,x7 // h+=X[i]651eor x16,x16,x20,ror#18652eor x14,x14,x9,ror#8653orr x17,x17,x19 // Ch(e,f,g)654eor x19,x24,x25 // a^b, b^c in next round655eor x16,x16,x20,ror#41 // Sigma1(e)656eor x15,x15,x24,ror#34657add x23,x23,x17 // h+=Ch(e,f,g)658and x28,x28,x19 // (b^c)&=(a^b)659eor x13,x13,x6,ror#61660eor x14,x14,x9,lsr#7 // sigma0(X[i+1])661add x23,x23,x16 // h+=Sigma1(e)662eor x28,x28,x25 // Maj(a,b,c)663eor x17,x15,x24,ror#39 // Sigma0(a)664eor x13,x13,x6,lsr#6 // sigma1(X[i+14])665add x8,x8,x1666add x27,x27,x23 // d+=h667add x23,x23,x28 // h+=Maj(a,b,c)668ldr x28,[x30],#8 // *K++, x19 in next round669add x8,x8,x14670add x23,x23,x17 // h+=Sigma0(a)671add x8,x8,x13672ldr x13,[sp,#16]673str x0,[sp,#8]674ror x16,x27,#14675add x22,x22,x28 // h+=K[i]676ror x15,x10,#1677and x17,x20,x27678ror x14,x7,#19679bic x28,x21,x27680ror x0,x23,#28681add x22,x22,x8 // h+=X[i]682eor x16,x16,x27,ror#18683eor x15,x15,x10,ror#8684orr x17,x17,x28 // Ch(e,f,g)685eor x28,x23,x24 // a^b, b^c in next round686eor x16,x16,x27,ror#41 // Sigma1(e)687eor x0,x0,x23,ror#34688add x22,x22,x17 // h+=Ch(e,f,g)689and x19,x19,x28 // (b^c)&=(a^b)690eor x14,x14,x7,ror#61691eor x15,x15,x10,lsr#7 // sigma0(X[i+1])692add x22,x22,x16 // h+=Sigma1(e)693eor x19,x19,x24 // Maj(a,b,c)694eor x17,x0,x23,ror#39 // Sigma0(a)695eor x14,x14,x7,lsr#6 // sigma1(X[i+14])696add x9,x9,x2697add x26,x26,x22 // d+=h698add x22,x22,x19 // h+=Maj(a,b,c)699ldr x19,[x30],#8 // *K++, x28 in next round700add x9,x9,x15701add x22,x22,x17 // h+=Sigma0(a)702add x9,x9,x14703ldr x14,[sp,#24]704str x1,[sp,#16]705ror x16,x26,#14706add x21,x21,x19 // h+=K[i]707ror x0,x11,#1708and x17,x27,x26709ror x15,x8,#19710bic x19,x20,x26711ror x1,x22,#28712add x21,x21,x9 // h+=X[i]713eor x16,x16,x26,ror#18714eor x0,x0,x11,ror#8715orr x17,x17,x19 // Ch(e,f,g)716eor x19,x22,x23 // a^b, b^c in next round717eor x16,x16,x26,ror#41 // Sigma1(e)718eor x1,x1,x22,ror#34719add x21,x21,x17 // h+=Ch(e,f,g)720and x28,x28,x19 // (b^c)&=(a^b)721eor x15,x15,x8,ror#61722eor x0,x0,x11,lsr#7 // sigma0(X[i+1])723add x21,x21,x16 // h+=Sigma1(e)724eor x28,x28,x23 // Maj(a,b,c)725eor x17,x1,x22,ror#39 // Sigma0(a)726eor x15,x15,x8,lsr#6 // sigma1(X[i+14])727add x10,x10,x3728add x25,x25,x21 // d+=h729add x21,x21,x28 // h+=Maj(a,b,c)730ldr x28,[x30],#8 // *K++, x19 in next round731add x10,x10,x0732add x21,x21,x17 // h+=Sigma0(a)733add x10,x10,x15734ldr x15,[sp,#0]735str x2,[sp,#24]736ror x16,x25,#14737add x20,x20,x28 // h+=K[i]738ror x1,x12,#1739and x17,x26,x25740ror x0,x9,#19741bic x28,x27,x25742ror x2,x21,#28743add x20,x20,x10 // h+=X[i]744eor x16,x16,x25,ror#18745eor x1,x1,x12,ror#8746orr x17,x17,x28 // Ch(e,f,g)747eor x28,x21,x22 // a^b, b^c in next round748eor x16,x16,x25,ror#41 // Sigma1(e)749eor x2,x2,x21,ror#34750add x20,x20,x17 // h+=Ch(e,f,g)751and x19,x19,x28 // (b^c)&=(a^b)752eor x0,x0,x9,ror#61753eor x1,x1,x12,lsr#7 // sigma0(X[i+1])754add x20,x20,x16 // h+=Sigma1(e)755eor x19,x19,x22 // Maj(a,b,c)756eor x17,x2,x21,ror#39 // Sigma0(a)757eor x0,x0,x9,lsr#6 // sigma1(X[i+14])758add x11,x11,x4759add x24,x24,x20 // d+=h760add x20,x20,x19 // h+=Maj(a,b,c)761ldr x19,[x30],#8 // *K++, x28 in next round762add x11,x11,x1763add x20,x20,x17 // h+=Sigma0(a)764add x11,x11,x0765ldr x0,[sp,#8]766str x3,[sp,#0]767ror x16,x24,#14768add x27,x27,x19 // h+=K[i]769ror x2,x13,#1770and x17,x25,x24771ror x1,x10,#19772bic x19,x26,x24773ror x3,x20,#28774add x27,x27,x11 // h+=X[i]775eor x16,x16,x24,ror#18776eor x2,x2,x13,ror#8777orr x17,x17,x19 // Ch(e,f,g)778eor x19,x20,x21 // a^b, b^c in next round779eor x16,x16,x24,ror#41 // Sigma1(e)780eor x3,x3,x20,ror#34781add x27,x27,x17 // h+=Ch(e,f,g)782and x28,x28,x19 // (b^c)&=(a^b)783eor x1,x1,x10,ror#61784eor x2,x2,x13,lsr#7 // sigma0(X[i+1])785add x27,x27,x16 // h+=Sigma1(e)786eor x28,x28,x21 // Maj(a,b,c)787eor x17,x3,x20,ror#39 // Sigma0(a)788eor x1,x1,x10,lsr#6 // sigma1(X[i+14])789add x12,x12,x5790add x23,x23,x27 // d+=h791add x27,x27,x28 // h+=Maj(a,b,c)792ldr x28,[x30],#8 // *K++, x19 in next round793add x12,x12,x2794add x27,x27,x17 // h+=Sigma0(a)795add x12,x12,x1796ldr x1,[sp,#16]797str x4,[sp,#8]798ror x16,x23,#14799add x26,x26,x28 // h+=K[i]800ror x3,x14,#1801and x17,x24,x23802ror x2,x11,#19803bic x28,x25,x23804ror x4,x27,#28805add x26,x26,x12 // h+=X[i]806eor x16,x16,x23,ror#18807eor x3,x3,x14,ror#8808orr x17,x17,x28 // Ch(e,f,g)809eor x28,x27,x20 // a^b, b^c in next round810eor x16,x16,x23,ror#41 // Sigma1(e)811eor x4,x4,x27,ror#34812add x26,x26,x17 // h+=Ch(e,f,g)813and x19,x19,x28 // (b^c)&=(a^b)814eor x2,x2,x11,ror#61815eor x3,x3,x14,lsr#7 // sigma0(X[i+1])816add x26,x26,x16 // h+=Sigma1(e)817eor x19,x19,x20 // Maj(a,b,c)818eor x17,x4,x27,ror#39 // Sigma0(a)819eor x2,x2,x11,lsr#6 // sigma1(X[i+14])820add x13,x13,x6821add x22,x22,x26 // d+=h822add x26,x26,x19 // h+=Maj(a,b,c)823ldr x19,[x30],#8 // *K++, x28 in next round824add x13,x13,x3825add x26,x26,x17 // h+=Sigma0(a)826add x13,x13,x2827ldr x2,[sp,#24]828str x5,[sp,#16]829ror x16,x22,#14830add x25,x25,x19 // h+=K[i]831ror x4,x15,#1832and x17,x23,x22833ror x3,x12,#19834bic x19,x24,x22835ror x5,x26,#28836add x25,x25,x13 // h+=X[i]837eor x16,x16,x22,ror#18838eor x4,x4,x15,ror#8839orr x17,x17,x19 // Ch(e,f,g)840eor x19,x26,x27 // a^b, b^c in next round841eor x16,x16,x22,ror#41 // Sigma1(e)842eor x5,x5,x26,ror#34843add x25,x25,x17 // h+=Ch(e,f,g)844and x28,x28,x19 // (b^c)&=(a^b)845eor x3,x3,x12,ror#61846eor x4,x4,x15,lsr#7 // sigma0(X[i+1])847add x25,x25,x16 // h+=Sigma1(e)848eor x28,x28,x27 // Maj(a,b,c)849eor x17,x5,x26,ror#39 // Sigma0(a)850eor x3,x3,x12,lsr#6 // sigma1(X[i+14])851add x14,x14,x7852add x21,x21,x25 // d+=h853add x25,x25,x28 // h+=Maj(a,b,c)854ldr x28,[x30],#8 // *K++, x19 in next round855add x14,x14,x4856add x25,x25,x17 // h+=Sigma0(a)857add x14,x14,x3858ldr x3,[sp,#0]859str x6,[sp,#24]860ror x16,x21,#14861add x24,x24,x28 // h+=K[i]862ror x5,x0,#1863and x17,x22,x21864ror x4,x13,#19865bic x28,x23,x21866ror x6,x25,#28867add x24,x24,x14 // h+=X[i]868eor x16,x16,x21,ror#18869eor x5,x5,x0,ror#8870orr x17,x17,x28 // Ch(e,f,g)871eor x28,x25,x26 // a^b, b^c in next round872eor x16,x16,x21,ror#41 // Sigma1(e)873eor x6,x6,x25,ror#34874add x24,x24,x17 // h+=Ch(e,f,g)875and x19,x19,x28 // (b^c)&=(a^b)876eor x4,x4,x13,ror#61877eor x5,x5,x0,lsr#7 // sigma0(X[i+1])878add x24,x24,x16 // h+=Sigma1(e)879eor x19,x19,x26 // Maj(a,b,c)880eor x17,x6,x25,ror#39 // Sigma0(a)881eor x4,x4,x13,lsr#6 // sigma1(X[i+14])882add x15,x15,x8883add x20,x20,x24 // d+=h884add x24,x24,x19 // h+=Maj(a,b,c)885ldr x19,[x30],#8 // *K++, x28 in next round886add x15,x15,x5887add x24,x24,x17 // h+=Sigma0(a)888add x15,x15,x4889ldr x4,[sp,#8]890str x7,[sp,#0]891ror x16,x20,#14892add x23,x23,x19 // h+=K[i]893ror x6,x1,#1894and x17,x21,x20895ror x5,x14,#19896bic x19,x22,x20897ror x7,x24,#28898add x23,x23,x15 // h+=X[i]899eor x16,x16,x20,ror#18900eor x6,x6,x1,ror#8901orr x17,x17,x19 // Ch(e,f,g)902eor x19,x24,x25 // a^b, b^c in next round903eor x16,x16,x20,ror#41 // Sigma1(e)904eor x7,x7,x24,ror#34905add x23,x23,x17 // h+=Ch(e,f,g)906and x28,x28,x19 // (b^c)&=(a^b)907eor x5,x5,x14,ror#61908eor x6,x6,x1,lsr#7 // sigma0(X[i+1])909add x23,x23,x16 // h+=Sigma1(e)910eor x28,x28,x25 // Maj(a,b,c)911eor x17,x7,x24,ror#39 // Sigma0(a)912eor x5,x5,x14,lsr#6 // sigma1(X[i+14])913add x0,x0,x9914add x27,x27,x23 // d+=h915add x23,x23,x28 // h+=Maj(a,b,c)916ldr x28,[x30],#8 // *K++, x19 in next round917add x0,x0,x6918add x23,x23,x17 // h+=Sigma0(a)919add x0,x0,x5920ldr x5,[sp,#16]921str x8,[sp,#8]922ror x16,x27,#14923add x22,x22,x28 // h+=K[i]924ror x7,x2,#1925and x17,x20,x27926ror x6,x15,#19927bic x28,x21,x27928ror x8,x23,#28929add x22,x22,x0 // h+=X[i]930eor x16,x16,x27,ror#18931eor x7,x7,x2,ror#8932orr x17,x17,x28 // Ch(e,f,g)933eor x28,x23,x24 // a^b, b^c in next round934eor x16,x16,x27,ror#41 // Sigma1(e)935eor x8,x8,x23,ror#34936add x22,x22,x17 // h+=Ch(e,f,g)937and x19,x19,x28 // (b^c)&=(a^b)938eor x6,x6,x15,ror#61939eor x7,x7,x2,lsr#7 // sigma0(X[i+1])940add x22,x22,x16 // h+=Sigma1(e)941eor x19,x19,x24 // Maj(a,b,c)942eor x17,x8,x23,ror#39 // Sigma0(a)943eor x6,x6,x15,lsr#6 // sigma1(X[i+14])944add x1,x1,x10945add x26,x26,x22 // d+=h946add x22,x22,x19 // h+=Maj(a,b,c)947ldr x19,[x30],#8 // *K++, x28 in next round948add x1,x1,x7949add x22,x22,x17 // h+=Sigma0(a)950add x1,x1,x6951ldr x6,[sp,#24]952str x9,[sp,#16]953ror x16,x26,#14954add x21,x21,x19 // h+=K[i]955ror x8,x3,#1956and x17,x27,x26957ror x7,x0,#19958bic x19,x20,x26959ror x9,x22,#28960add x21,x21,x1 // h+=X[i]961eor x16,x16,x26,ror#18962eor x8,x8,x3,ror#8963orr x17,x17,x19 // Ch(e,f,g)964eor x19,x22,x23 // a^b, b^c in next round965eor x16,x16,x26,ror#41 // Sigma1(e)966eor x9,x9,x22,ror#34967add x21,x21,x17 // h+=Ch(e,f,g)968and x28,x28,x19 // (b^c)&=(a^b)969eor x7,x7,x0,ror#61970eor x8,x8,x3,lsr#7 // sigma0(X[i+1])971add x21,x21,x16 // h+=Sigma1(e)972eor x28,x28,x23 // Maj(a,b,c)973eor x17,x9,x22,ror#39 // Sigma0(a)974eor x7,x7,x0,lsr#6 // sigma1(X[i+14])975add x2,x2,x11976add x25,x25,x21 // d+=h977add x21,x21,x28 // h+=Maj(a,b,c)978ldr x28,[x30],#8 // *K++, x19 in next round979add x2,x2,x8980add x21,x21,x17 // h+=Sigma0(a)981add x2,x2,x7982ldr x7,[sp,#0]983str x10,[sp,#24]984ror x16,x25,#14985add x20,x20,x28 // h+=K[i]986ror x9,x4,#1987and x17,x26,x25988ror x8,x1,#19989bic x28,x27,x25990ror x10,x21,#28991add x20,x20,x2 // h+=X[i]992eor x16,x16,x25,ror#18993eor x9,x9,x4,ror#8994orr x17,x17,x28 // Ch(e,f,g)995eor x28,x21,x22 // a^b, b^c in next round996eor x16,x16,x25,ror#41 // Sigma1(e)997eor x10,x10,x21,ror#34998add x20,x20,x17 // h+=Ch(e,f,g)999and x19,x19,x28 // (b^c)&=(a^b)1000eor x8,x8,x1,ror#611001eor x9,x9,x4,lsr#7 // sigma0(X[i+1])1002add x20,x20,x16 // h+=Sigma1(e)1003eor x19,x19,x22 // Maj(a,b,c)1004eor x17,x10,x21,ror#39 // Sigma0(a)1005eor x8,x8,x1,lsr#6 // sigma1(X[i+14])1006add x3,x3,x121007add x24,x24,x20 // d+=h1008add x20,x20,x19 // h+=Maj(a,b,c)1009ldr x19,[x30],#8 // *K++, x28 in next round1010add x3,x3,x91011add x20,x20,x17 // h+=Sigma0(a)1012add x3,x3,x81013cbnz x19,.Loop_16_xx10141015ldp x0,x2,[x29,#96]1016ldr x1,[x29,#112]1017sub x30,x30,#648 // rewind10181019ldp x3,x4,[x0]1020ldp x5,x6,[x0,#2*8]1021add x1,x1,#14*8 // advance input pointer1022ldp x7,x8,[x0,#4*8]1023add x20,x20,x31024ldp x9,x10,[x0,#6*8]1025add x21,x21,x41026add x22,x22,x51027add x23,x23,x61028stp x20,x21,[x0]1029add x24,x24,x71030add x25,x25,x81031stp x22,x23,[x0,#2*8]1032add x26,x26,x91033add x27,x27,x101034cmp x1,x21035stp x24,x25,[x0,#4*8]1036stp x26,x27,[x0,#6*8]1037b.ne .Loop10381039ldp x19,x20,[x29,#16]1040add sp,sp,#4*81041ldp x21,x22,[x29,#32]1042ldp x23,x24,[x29,#48]1043ldp x25,x26,[x29,#64]1044ldp x27,x28,[x29,#80]1045ldp x29,x30,[sp],#1281046ret1047.size zfs_sha512_block_armv7,.-zfs_sha512_block_armv7104810491050.globl zfs_sha512_block_armv81051.type zfs_sha512_block_armv8,%function1052.align 61053zfs_sha512_block_armv8:1054hint #34 // bti c1055.Lv8_entry:1056// Armv8.3-A PAuth: even though x30 is pushed to stack it is not popped later1057stp x29,x30,[sp,#-16]!1058add x29,sp,#010591060ld1 {v16.16b-v19.16b},[x1],#64 // load input1061ld1 {v20.16b-v23.16b},[x1],#6410621063ld1 {v0.2d-v3.2d},[x0] // load context1064adr x3,.LK51210651066rev64 v16.16b,v16.16b1067rev64 v17.16b,v17.16b1068rev64 v18.16b,v18.16b1069rev64 v19.16b,v19.16b1070rev64 v20.16b,v20.16b1071rev64 v21.16b,v21.16b1072rev64 v22.16b,v22.16b1073rev64 v23.16b,v23.16b1074b .Loop_hw10751076.align 41077.Loop_hw:1078ld1 {v24.2d},[x3],#161079subs x2,x2,#11080sub x4,x1,#1281081orr v26.16b,v0.16b,v0.16b // offload1082orr v27.16b,v1.16b,v1.16b1083orr v28.16b,v2.16b,v2.16b1084orr v29.16b,v3.16b,v3.16b1085csel x1,x1,x4,ne // conditional rewind1086add v24.2d,v24.2d,v16.2d1087ld1 {v25.2d},[x3],#161088ext v24.16b,v24.16b,v24.16b,#81089ext v5.16b,v2.16b,v3.16b,#81090ext v6.16b,v1.16b,v2.16b,#81091add v3.2d,v3.2d,v24.2d // "T1 + H + K512[i]"1092.inst 0xcec08230 //sha512su0 v16.16b,v17.16b1093ext v7.16b,v20.16b,v21.16b,#81094.inst 0xce6680a3 //sha512h v3.16b,v5.16b,v6.16b1095.inst 0xce678af0 //sha512su1 v16.16b,v23.16b,v7.16b1096add v4.2d,v1.2d,v3.2d // "D + T1"1097.inst 0xce608423 //sha512h2 v3.16b,v1.16b,v0.16b1098add v25.2d,v25.2d,v17.2d1099ld1 {v24.2d},[x3],#161100ext v25.16b,v25.16b,v25.16b,#81101ext v5.16b,v4.16b,v2.16b,#81102ext v6.16b,v0.16b,v4.16b,#81103add v2.2d,v2.2d,v25.2d // "T1 + H + K512[i]"1104.inst 0xcec08251 //sha512su0 v17.16b,v18.16b1105ext v7.16b,v21.16b,v22.16b,#81106.inst 0xce6680a2 //sha512h v2.16b,v5.16b,v6.16b1107.inst 0xce678a11 //sha512su1 v17.16b,v16.16b,v7.16b1108add v1.2d,v0.2d,v2.2d // "D + T1"1109.inst 0xce638402 //sha512h2 v2.16b,v0.16b,v3.16b1110add v24.2d,v24.2d,v18.2d1111ld1 {v25.2d},[x3],#161112ext v24.16b,v24.16b,v24.16b,#81113ext v5.16b,v1.16b,v4.16b,#81114ext v6.16b,v3.16b,v1.16b,#81115add v4.2d,v4.2d,v24.2d // "T1 + H + K512[i]"1116.inst 0xcec08272 //sha512su0 v18.16b,v19.16b1117ext v7.16b,v22.16b,v23.16b,#81118.inst 0xce6680a4 //sha512h v4.16b,v5.16b,v6.16b1119.inst 0xce678a32 //sha512su1 v18.16b,v17.16b,v7.16b1120add v0.2d,v3.2d,v4.2d // "D + T1"1121.inst 0xce628464 //sha512h2 v4.16b,v3.16b,v2.16b1122add v25.2d,v25.2d,v19.2d1123ld1 {v24.2d},[x3],#161124ext v25.16b,v25.16b,v25.16b,#81125ext v5.16b,v0.16b,v1.16b,#81126ext v6.16b,v2.16b,v0.16b,#81127add v1.2d,v1.2d,v25.2d // "T1 + H + K512[i]"1128.inst 0xcec08293 //sha512su0 v19.16b,v20.16b1129ext v7.16b,v23.16b,v16.16b,#81130.inst 0xce6680a1 //sha512h v1.16b,v5.16b,v6.16b1131.inst 0xce678a53 //sha512su1 v19.16b,v18.16b,v7.16b1132add v3.2d,v2.2d,v1.2d // "D + T1"1133.inst 0xce648441 //sha512h2 v1.16b,v2.16b,v4.16b1134add v24.2d,v24.2d,v20.2d1135ld1 {v25.2d},[x3],#161136ext v24.16b,v24.16b,v24.16b,#81137ext v5.16b,v3.16b,v0.16b,#81138ext v6.16b,v4.16b,v3.16b,#81139add v0.2d,v0.2d,v24.2d // "T1 + H + K512[i]"1140.inst 0xcec082b4 //sha512su0 v20.16b,v21.16b1141ext v7.16b,v16.16b,v17.16b,#81142.inst 0xce6680a0 //sha512h v0.16b,v5.16b,v6.16b1143.inst 0xce678a74 //sha512su1 v20.16b,v19.16b,v7.16b1144add v2.2d,v4.2d,v0.2d // "D + T1"1145.inst 0xce618480 //sha512h2 v0.16b,v4.16b,v1.16b1146add v25.2d,v25.2d,v21.2d1147ld1 {v24.2d},[x3],#161148ext v25.16b,v25.16b,v25.16b,#81149ext v5.16b,v2.16b,v3.16b,#81150ext v6.16b,v1.16b,v2.16b,#81151add v3.2d,v3.2d,v25.2d // "T1 + H + K512[i]"1152.inst 0xcec082d5 //sha512su0 v21.16b,v22.16b1153ext v7.16b,v17.16b,v18.16b,#81154.inst 0xce6680a3 //sha512h v3.16b,v5.16b,v6.16b1155.inst 0xce678a95 //sha512su1 v21.16b,v20.16b,v7.16b1156add v4.2d,v1.2d,v3.2d // "D + T1"1157.inst 0xce608423 //sha512h2 v3.16b,v1.16b,v0.16b1158add v24.2d,v24.2d,v22.2d1159ld1 {v25.2d},[x3],#161160ext v24.16b,v24.16b,v24.16b,#81161ext v5.16b,v4.16b,v2.16b,#81162ext v6.16b,v0.16b,v4.16b,#81163add v2.2d,v2.2d,v24.2d // "T1 + H + K512[i]"1164.inst 0xcec082f6 //sha512su0 v22.16b,v23.16b1165ext v7.16b,v18.16b,v19.16b,#81166.inst 0xce6680a2 //sha512h v2.16b,v5.16b,v6.16b1167.inst 0xce678ab6 //sha512su1 v22.16b,v21.16b,v7.16b1168add v1.2d,v0.2d,v2.2d // "D + T1"1169.inst 0xce638402 //sha512h2 v2.16b,v0.16b,v3.16b1170add v25.2d,v25.2d,v23.2d1171ld1 {v24.2d},[x3],#161172ext v25.16b,v25.16b,v25.16b,#81173ext v5.16b,v1.16b,v4.16b,#81174ext v6.16b,v3.16b,v1.16b,#81175add v4.2d,v4.2d,v25.2d // "T1 + H + K512[i]"1176.inst 0xcec08217 //sha512su0 v23.16b,v16.16b1177ext v7.16b,v19.16b,v20.16b,#81178.inst 0xce6680a4 //sha512h v4.16b,v5.16b,v6.16b1179.inst 0xce678ad7 //sha512su1 v23.16b,v22.16b,v7.16b1180add v0.2d,v3.2d,v4.2d // "D + T1"1181.inst 0xce628464 //sha512h2 v4.16b,v3.16b,v2.16b1182add v24.2d,v24.2d,v16.2d1183ld1 {v25.2d},[x3],#161184ext v24.16b,v24.16b,v24.16b,#81185ext v5.16b,v0.16b,v1.16b,#81186ext v6.16b,v2.16b,v0.16b,#81187add v1.2d,v1.2d,v24.2d // "T1 + H + K512[i]"1188.inst 0xcec08230 //sha512su0 v16.16b,v17.16b1189ext v7.16b,v20.16b,v21.16b,#81190.inst 0xce6680a1 //sha512h v1.16b,v5.16b,v6.16b1191.inst 0xce678af0 //sha512su1 v16.16b,v23.16b,v7.16b1192add v3.2d,v2.2d,v1.2d // "D + T1"1193.inst 0xce648441 //sha512h2 v1.16b,v2.16b,v4.16b1194add v25.2d,v25.2d,v17.2d1195ld1 {v24.2d},[x3],#161196ext v25.16b,v25.16b,v25.16b,#81197ext v5.16b,v3.16b,v0.16b,#81198ext v6.16b,v4.16b,v3.16b,#81199add v0.2d,v0.2d,v25.2d // "T1 + H + K512[i]"1200.inst 0xcec08251 //sha512su0 v17.16b,v18.16b1201ext v7.16b,v21.16b,v22.16b,#81202.inst 0xce6680a0 //sha512h v0.16b,v5.16b,v6.16b1203.inst 0xce678a11 //sha512su1 v17.16b,v16.16b,v7.16b1204add v2.2d,v4.2d,v0.2d // "D + T1"1205.inst 0xce618480 //sha512h2 v0.16b,v4.16b,v1.16b1206add v24.2d,v24.2d,v18.2d1207ld1 {v25.2d},[x3],#161208ext v24.16b,v24.16b,v24.16b,#81209ext v5.16b,v2.16b,v3.16b,#81210ext v6.16b,v1.16b,v2.16b,#81211add v3.2d,v3.2d,v24.2d // "T1 + H + K512[i]"1212.inst 0xcec08272 //sha512su0 v18.16b,v19.16b1213ext v7.16b,v22.16b,v23.16b,#81214.inst 0xce6680a3 //sha512h v3.16b,v5.16b,v6.16b1215.inst 0xce678a32 //sha512su1 v18.16b,v17.16b,v7.16b1216add v4.2d,v1.2d,v3.2d // "D + T1"1217.inst 0xce608423 //sha512h2 v3.16b,v1.16b,v0.16b1218add v25.2d,v25.2d,v19.2d1219ld1 {v24.2d},[x3],#161220ext v25.16b,v25.16b,v25.16b,#81221ext v5.16b,v4.16b,v2.16b,#81222ext v6.16b,v0.16b,v4.16b,#81223add v2.2d,v2.2d,v25.2d // "T1 + H + K512[i]"1224.inst 0xcec08293 //sha512su0 v19.16b,v20.16b1225ext v7.16b,v23.16b,v16.16b,#81226.inst 0xce6680a2 //sha512h v2.16b,v5.16b,v6.16b1227.inst 0xce678a53 //sha512su1 v19.16b,v18.16b,v7.16b1228add v1.2d,v0.2d,v2.2d // "D + T1"1229.inst 0xce638402 //sha512h2 v2.16b,v0.16b,v3.16b1230add v24.2d,v24.2d,v20.2d1231ld1 {v25.2d},[x3],#161232ext v24.16b,v24.16b,v24.16b,#81233ext v5.16b,v1.16b,v4.16b,#81234ext v6.16b,v3.16b,v1.16b,#81235add v4.2d,v4.2d,v24.2d // "T1 + H + K512[i]"1236.inst 0xcec082b4 //sha512su0 v20.16b,v21.16b1237ext v7.16b,v16.16b,v17.16b,#81238.inst 0xce6680a4 //sha512h v4.16b,v5.16b,v6.16b1239.inst 0xce678a74 //sha512su1 v20.16b,v19.16b,v7.16b1240add v0.2d,v3.2d,v4.2d // "D + T1"1241.inst 0xce628464 //sha512h2 v4.16b,v3.16b,v2.16b1242add v25.2d,v25.2d,v21.2d1243ld1 {v24.2d},[x3],#161244ext v25.16b,v25.16b,v25.16b,#81245ext v5.16b,v0.16b,v1.16b,#81246ext v6.16b,v2.16b,v0.16b,#81247add v1.2d,v1.2d,v25.2d // "T1 + H + K512[i]"1248.inst 0xcec082d5 //sha512su0 v21.16b,v22.16b1249ext v7.16b,v17.16b,v18.16b,#81250.inst 0xce6680a1 //sha512h v1.16b,v5.16b,v6.16b1251.inst 0xce678a95 //sha512su1 v21.16b,v20.16b,v7.16b1252add v3.2d,v2.2d,v1.2d // "D + T1"1253.inst 0xce648441 //sha512h2 v1.16b,v2.16b,v4.16b1254add v24.2d,v24.2d,v22.2d1255ld1 {v25.2d},[x3],#161256ext v24.16b,v24.16b,v24.16b,#81257ext v5.16b,v3.16b,v0.16b,#81258ext v6.16b,v4.16b,v3.16b,#81259add v0.2d,v0.2d,v24.2d // "T1 + H + K512[i]"1260.inst 0xcec082f6 //sha512su0 v22.16b,v23.16b1261ext v7.16b,v18.16b,v19.16b,#81262.inst 0xce6680a0 //sha512h v0.16b,v5.16b,v6.16b1263.inst 0xce678ab6 //sha512su1 v22.16b,v21.16b,v7.16b1264add v2.2d,v4.2d,v0.2d // "D + T1"1265.inst 0xce618480 //sha512h2 v0.16b,v4.16b,v1.16b1266add v25.2d,v25.2d,v23.2d1267ld1 {v24.2d},[x3],#161268ext v25.16b,v25.16b,v25.16b,#81269ext v5.16b,v2.16b,v3.16b,#81270ext v6.16b,v1.16b,v2.16b,#81271add v3.2d,v3.2d,v25.2d // "T1 + H + K512[i]"1272.inst 0xcec08217 //sha512su0 v23.16b,v16.16b1273ext v7.16b,v19.16b,v20.16b,#81274.inst 0xce6680a3 //sha512h v3.16b,v5.16b,v6.16b1275.inst 0xce678ad7 //sha512su1 v23.16b,v22.16b,v7.16b1276add v4.2d,v1.2d,v3.2d // "D + T1"1277.inst 0xce608423 //sha512h2 v3.16b,v1.16b,v0.16b1278add v24.2d,v24.2d,v16.2d1279ld1 {v25.2d},[x3],#161280ext v24.16b,v24.16b,v24.16b,#81281ext v5.16b,v4.16b,v2.16b,#81282ext v6.16b,v0.16b,v4.16b,#81283add v2.2d,v2.2d,v24.2d // "T1 + H + K512[i]"1284.inst 0xcec08230 //sha512su0 v16.16b,v17.16b1285ext v7.16b,v20.16b,v21.16b,#81286.inst 0xce6680a2 //sha512h v2.16b,v5.16b,v6.16b1287.inst 0xce678af0 //sha512su1 v16.16b,v23.16b,v7.16b1288add v1.2d,v0.2d,v2.2d // "D + T1"1289.inst 0xce638402 //sha512h2 v2.16b,v0.16b,v3.16b1290add v25.2d,v25.2d,v17.2d1291ld1 {v24.2d},[x3],#161292ext v25.16b,v25.16b,v25.16b,#81293ext v5.16b,v1.16b,v4.16b,#81294ext v6.16b,v3.16b,v1.16b,#81295add v4.2d,v4.2d,v25.2d // "T1 + H + K512[i]"1296.inst 0xcec08251 //sha512su0 v17.16b,v18.16b1297ext v7.16b,v21.16b,v22.16b,#81298.inst 0xce6680a4 //sha512h v4.16b,v5.16b,v6.16b1299.inst 0xce678a11 //sha512su1 v17.16b,v16.16b,v7.16b1300add v0.2d,v3.2d,v4.2d // "D + T1"1301.inst 0xce628464 //sha512h2 v4.16b,v3.16b,v2.16b1302add v24.2d,v24.2d,v18.2d1303ld1 {v25.2d},[x3],#161304ext v24.16b,v24.16b,v24.16b,#81305ext v5.16b,v0.16b,v1.16b,#81306ext v6.16b,v2.16b,v0.16b,#81307add v1.2d,v1.2d,v24.2d // "T1 + H + K512[i]"1308.inst 0xcec08272 //sha512su0 v18.16b,v19.16b1309ext v7.16b,v22.16b,v23.16b,#81310.inst 0xce6680a1 //sha512h v1.16b,v5.16b,v6.16b1311.inst 0xce678a32 //sha512su1 v18.16b,v17.16b,v7.16b1312add v3.2d,v2.2d,v1.2d // "D + T1"1313.inst 0xce648441 //sha512h2 v1.16b,v2.16b,v4.16b1314add v25.2d,v25.2d,v19.2d1315ld1 {v24.2d},[x3],#161316ext v25.16b,v25.16b,v25.16b,#81317ext v5.16b,v3.16b,v0.16b,#81318ext v6.16b,v4.16b,v3.16b,#81319add v0.2d,v0.2d,v25.2d // "T1 + H + K512[i]"1320.inst 0xcec08293 //sha512su0 v19.16b,v20.16b1321ext v7.16b,v23.16b,v16.16b,#81322.inst 0xce6680a0 //sha512h v0.16b,v5.16b,v6.16b1323.inst 0xce678a53 //sha512su1 v19.16b,v18.16b,v7.16b1324add v2.2d,v4.2d,v0.2d // "D + T1"1325.inst 0xce618480 //sha512h2 v0.16b,v4.16b,v1.16b1326add v24.2d,v24.2d,v20.2d1327ld1 {v25.2d},[x3],#161328ext v24.16b,v24.16b,v24.16b,#81329ext v5.16b,v2.16b,v3.16b,#81330ext v6.16b,v1.16b,v2.16b,#81331add v3.2d,v3.2d,v24.2d // "T1 + H + K512[i]"1332.inst 0xcec082b4 //sha512su0 v20.16b,v21.16b1333ext v7.16b,v16.16b,v17.16b,#81334.inst 0xce6680a3 //sha512h v3.16b,v5.16b,v6.16b1335.inst 0xce678a74 //sha512su1 v20.16b,v19.16b,v7.16b1336add v4.2d,v1.2d,v3.2d // "D + T1"1337.inst 0xce608423 //sha512h2 v3.16b,v1.16b,v0.16b1338add v25.2d,v25.2d,v21.2d1339ld1 {v24.2d},[x3],#161340ext v25.16b,v25.16b,v25.16b,#81341ext v5.16b,v4.16b,v2.16b,#81342ext v6.16b,v0.16b,v4.16b,#81343add v2.2d,v2.2d,v25.2d // "T1 + H + K512[i]"1344.inst 0xcec082d5 //sha512su0 v21.16b,v22.16b1345ext v7.16b,v17.16b,v18.16b,#81346.inst 0xce6680a2 //sha512h v2.16b,v5.16b,v6.16b1347.inst 0xce678a95 //sha512su1 v21.16b,v20.16b,v7.16b1348add v1.2d,v0.2d,v2.2d // "D + T1"1349.inst 0xce638402 //sha512h2 v2.16b,v0.16b,v3.16b1350add v24.2d,v24.2d,v22.2d1351ld1 {v25.2d},[x3],#161352ext v24.16b,v24.16b,v24.16b,#81353ext v5.16b,v1.16b,v4.16b,#81354ext v6.16b,v3.16b,v1.16b,#81355add v4.2d,v4.2d,v24.2d // "T1 + H + K512[i]"1356.inst 0xcec082f6 //sha512su0 v22.16b,v23.16b1357ext v7.16b,v18.16b,v19.16b,#81358.inst 0xce6680a4 //sha512h v4.16b,v5.16b,v6.16b1359.inst 0xce678ab6 //sha512su1 v22.16b,v21.16b,v7.16b1360add v0.2d,v3.2d,v4.2d // "D + T1"1361.inst 0xce628464 //sha512h2 v4.16b,v3.16b,v2.16b1362add v25.2d,v25.2d,v23.2d1363ld1 {v24.2d},[x3],#161364ext v25.16b,v25.16b,v25.16b,#81365ext v5.16b,v0.16b,v1.16b,#81366ext v6.16b,v2.16b,v0.16b,#81367add v1.2d,v1.2d,v25.2d // "T1 + H + K512[i]"1368.inst 0xcec08217 //sha512su0 v23.16b,v16.16b1369ext v7.16b,v19.16b,v20.16b,#81370.inst 0xce6680a1 //sha512h v1.16b,v5.16b,v6.16b1371.inst 0xce678ad7 //sha512su1 v23.16b,v22.16b,v7.16b1372add v3.2d,v2.2d,v1.2d // "D + T1"1373.inst 0xce648441 //sha512h2 v1.16b,v2.16b,v4.16b1374add v24.2d,v24.2d,v16.2d1375ld1 {v25.2d},[x3],#161376ext v24.16b,v24.16b,v24.16b,#81377ext v5.16b,v3.16b,v0.16b,#81378ext v6.16b,v4.16b,v3.16b,#81379add v0.2d,v0.2d,v24.2d // "T1 + H + K512[i]"1380.inst 0xcec08230 //sha512su0 v16.16b,v17.16b1381ext v7.16b,v20.16b,v21.16b,#81382.inst 0xce6680a0 //sha512h v0.16b,v5.16b,v6.16b1383.inst 0xce678af0 //sha512su1 v16.16b,v23.16b,v7.16b1384add v2.2d,v4.2d,v0.2d // "D + T1"1385.inst 0xce618480 //sha512h2 v0.16b,v4.16b,v1.16b1386add v25.2d,v25.2d,v17.2d1387ld1 {v24.2d},[x3],#161388ext v25.16b,v25.16b,v25.16b,#81389ext v5.16b,v2.16b,v3.16b,#81390ext v6.16b,v1.16b,v2.16b,#81391add v3.2d,v3.2d,v25.2d // "T1 + H + K512[i]"1392.inst 0xcec08251 //sha512su0 v17.16b,v18.16b1393ext v7.16b,v21.16b,v22.16b,#81394.inst 0xce6680a3 //sha512h v3.16b,v5.16b,v6.16b1395.inst 0xce678a11 //sha512su1 v17.16b,v16.16b,v7.16b1396add v4.2d,v1.2d,v3.2d // "D + T1"1397.inst 0xce608423 //sha512h2 v3.16b,v1.16b,v0.16b1398add v24.2d,v24.2d,v18.2d1399ld1 {v25.2d},[x3],#161400ext v24.16b,v24.16b,v24.16b,#81401ext v5.16b,v4.16b,v2.16b,#81402ext v6.16b,v0.16b,v4.16b,#81403add v2.2d,v2.2d,v24.2d // "T1 + H + K512[i]"1404.inst 0xcec08272 //sha512su0 v18.16b,v19.16b1405ext v7.16b,v22.16b,v23.16b,#81406.inst 0xce6680a2 //sha512h v2.16b,v5.16b,v6.16b1407.inst 0xce678a32 //sha512su1 v18.16b,v17.16b,v7.16b1408add v1.2d,v0.2d,v2.2d // "D + T1"1409.inst 0xce638402 //sha512h2 v2.16b,v0.16b,v3.16b1410add v25.2d,v25.2d,v19.2d1411ld1 {v24.2d},[x3],#161412ext v25.16b,v25.16b,v25.16b,#81413ext v5.16b,v1.16b,v4.16b,#81414ext v6.16b,v3.16b,v1.16b,#81415add v4.2d,v4.2d,v25.2d // "T1 + H + K512[i]"1416.inst 0xcec08293 //sha512su0 v19.16b,v20.16b1417ext v7.16b,v23.16b,v16.16b,#81418.inst 0xce6680a4 //sha512h v4.16b,v5.16b,v6.16b1419.inst 0xce678a53 //sha512su1 v19.16b,v18.16b,v7.16b1420add v0.2d,v3.2d,v4.2d // "D + T1"1421.inst 0xce628464 //sha512h2 v4.16b,v3.16b,v2.16b1422add v24.2d,v24.2d,v20.2d1423ld1 {v25.2d},[x3],#161424ext v24.16b,v24.16b,v24.16b,#81425ext v5.16b,v0.16b,v1.16b,#81426ext v6.16b,v2.16b,v0.16b,#81427add v1.2d,v1.2d,v24.2d // "T1 + H + K512[i]"1428.inst 0xcec082b4 //sha512su0 v20.16b,v21.16b1429ext v7.16b,v16.16b,v17.16b,#81430.inst 0xce6680a1 //sha512h v1.16b,v5.16b,v6.16b1431.inst 0xce678a74 //sha512su1 v20.16b,v19.16b,v7.16b1432add v3.2d,v2.2d,v1.2d // "D + T1"1433.inst 0xce648441 //sha512h2 v1.16b,v2.16b,v4.16b1434add v25.2d,v25.2d,v21.2d1435ld1 {v24.2d},[x3],#161436ext v25.16b,v25.16b,v25.16b,#81437ext v5.16b,v3.16b,v0.16b,#81438ext v6.16b,v4.16b,v3.16b,#81439add v0.2d,v0.2d,v25.2d // "T1 + H + K512[i]"1440.inst 0xcec082d5 //sha512su0 v21.16b,v22.16b1441ext v7.16b,v17.16b,v18.16b,#81442.inst 0xce6680a0 //sha512h v0.16b,v5.16b,v6.16b1443.inst 0xce678a95 //sha512su1 v21.16b,v20.16b,v7.16b1444add v2.2d,v4.2d,v0.2d // "D + T1"1445.inst 0xce618480 //sha512h2 v0.16b,v4.16b,v1.16b1446add v24.2d,v24.2d,v22.2d1447ld1 {v25.2d},[x3],#161448ext v24.16b,v24.16b,v24.16b,#81449ext v5.16b,v2.16b,v3.16b,#81450ext v6.16b,v1.16b,v2.16b,#81451add v3.2d,v3.2d,v24.2d // "T1 + H + K512[i]"1452.inst 0xcec082f6 //sha512su0 v22.16b,v23.16b1453ext v7.16b,v18.16b,v19.16b,#81454.inst 0xce6680a3 //sha512h v3.16b,v5.16b,v6.16b1455.inst 0xce678ab6 //sha512su1 v22.16b,v21.16b,v7.16b1456add v4.2d,v1.2d,v3.2d // "D + T1"1457.inst 0xce608423 //sha512h2 v3.16b,v1.16b,v0.16b1458add v25.2d,v25.2d,v23.2d1459ld1 {v24.2d},[x3],#161460ext v25.16b,v25.16b,v25.16b,#81461ext v5.16b,v4.16b,v2.16b,#81462ext v6.16b,v0.16b,v4.16b,#81463add v2.2d,v2.2d,v25.2d // "T1 + H + K512[i]"1464.inst 0xcec08217 //sha512su0 v23.16b,v16.16b1465ext v7.16b,v19.16b,v20.16b,#81466.inst 0xce6680a2 //sha512h v2.16b,v5.16b,v6.16b1467.inst 0xce678ad7 //sha512su1 v23.16b,v22.16b,v7.16b1468add v1.2d,v0.2d,v2.2d // "D + T1"1469.inst 0xce638402 //sha512h2 v2.16b,v0.16b,v3.16b1470ld1 {v25.2d},[x3],#161471add v24.2d,v24.2d,v16.2d1472ld1 {v16.16b},[x1],#16 // load next input1473ext v24.16b,v24.16b,v24.16b,#81474ext v5.16b,v1.16b,v4.16b,#81475ext v6.16b,v3.16b,v1.16b,#81476add v4.2d,v4.2d,v24.2d // "T1 + H + K512[i]"1477.inst 0xce6680a4 //sha512h v4.16b,v5.16b,v6.16b1478rev64 v16.16b,v16.16b1479add v0.2d,v3.2d,v4.2d // "D + T1"1480.inst 0xce628464 //sha512h2 v4.16b,v3.16b,v2.16b1481ld1 {v24.2d},[x3],#161482add v25.2d,v25.2d,v17.2d1483ld1 {v17.16b},[x1],#16 // load next input1484ext v25.16b,v25.16b,v25.16b,#81485ext v5.16b,v0.16b,v1.16b,#81486ext v6.16b,v2.16b,v0.16b,#81487add v1.2d,v1.2d,v25.2d // "T1 + H + K512[i]"1488.inst 0xce6680a1 //sha512h v1.16b,v5.16b,v6.16b1489rev64 v17.16b,v17.16b1490add v3.2d,v2.2d,v1.2d // "D + T1"1491.inst 0xce648441 //sha512h2 v1.16b,v2.16b,v4.16b1492ld1 {v25.2d},[x3],#161493add v24.2d,v24.2d,v18.2d1494ld1 {v18.16b},[x1],#16 // load next input1495ext v24.16b,v24.16b,v24.16b,#81496ext v5.16b,v3.16b,v0.16b,#81497ext v6.16b,v4.16b,v3.16b,#81498add v0.2d,v0.2d,v24.2d // "T1 + H + K512[i]"1499.inst 0xce6680a0 //sha512h v0.16b,v5.16b,v6.16b1500rev64 v18.16b,v18.16b1501add v2.2d,v4.2d,v0.2d // "D + T1"1502.inst 0xce618480 //sha512h2 v0.16b,v4.16b,v1.16b1503ld1 {v24.2d},[x3],#161504add v25.2d,v25.2d,v19.2d1505ld1 {v19.16b},[x1],#16 // load next input1506ext v25.16b,v25.16b,v25.16b,#81507ext v5.16b,v2.16b,v3.16b,#81508ext v6.16b,v1.16b,v2.16b,#81509add v3.2d,v3.2d,v25.2d // "T1 + H + K512[i]"1510.inst 0xce6680a3 //sha512h v3.16b,v5.16b,v6.16b1511rev64 v19.16b,v19.16b1512add v4.2d,v1.2d,v3.2d // "D + T1"1513.inst 0xce608423 //sha512h2 v3.16b,v1.16b,v0.16b1514ld1 {v25.2d},[x3],#161515add v24.2d,v24.2d,v20.2d1516ld1 {v20.16b},[x1],#16 // load next input1517ext v24.16b,v24.16b,v24.16b,#81518ext v5.16b,v4.16b,v2.16b,#81519ext v6.16b,v0.16b,v4.16b,#81520add v2.2d,v2.2d,v24.2d // "T1 + H + K512[i]"1521.inst 0xce6680a2 //sha512h v2.16b,v5.16b,v6.16b1522rev64 v20.16b,v20.16b1523add v1.2d,v0.2d,v2.2d // "D + T1"1524.inst 0xce638402 //sha512h2 v2.16b,v0.16b,v3.16b1525ld1 {v24.2d},[x3],#161526add v25.2d,v25.2d,v21.2d1527ld1 {v21.16b},[x1],#16 // load next input1528ext v25.16b,v25.16b,v25.16b,#81529ext v5.16b,v1.16b,v4.16b,#81530ext v6.16b,v3.16b,v1.16b,#81531add v4.2d,v4.2d,v25.2d // "T1 + H + K512[i]"1532.inst 0xce6680a4 //sha512h v4.16b,v5.16b,v6.16b1533rev64 v21.16b,v21.16b1534add v0.2d,v3.2d,v4.2d // "D + T1"1535.inst 0xce628464 //sha512h2 v4.16b,v3.16b,v2.16b1536ld1 {v25.2d},[x3],#161537add v24.2d,v24.2d,v22.2d1538ld1 {v22.16b},[x1],#16 // load next input1539ext v24.16b,v24.16b,v24.16b,#81540ext v5.16b,v0.16b,v1.16b,#81541ext v6.16b,v2.16b,v0.16b,#81542add v1.2d,v1.2d,v24.2d // "T1 + H + K512[i]"1543.inst 0xce6680a1 //sha512h v1.16b,v5.16b,v6.16b1544rev64 v22.16b,v22.16b1545add v3.2d,v2.2d,v1.2d // "D + T1"1546.inst 0xce648441 //sha512h2 v1.16b,v2.16b,v4.16b1547sub x3,x3,#80*8 // rewind1548add v25.2d,v25.2d,v23.2d1549ld1 {v23.16b},[x1],#16 // load next input1550ext v25.16b,v25.16b,v25.16b,#81551ext v5.16b,v3.16b,v0.16b,#81552ext v6.16b,v4.16b,v3.16b,#81553add v0.2d,v0.2d,v25.2d // "T1 + H + K512[i]"1554.inst 0xce6680a0 //sha512h v0.16b,v5.16b,v6.16b1555rev64 v23.16b,v23.16b1556add v2.2d,v4.2d,v0.2d // "D + T1"1557.inst 0xce618480 //sha512h2 v0.16b,v4.16b,v1.16b1558add v0.2d,v0.2d,v26.2d // accumulate1559add v1.2d,v1.2d,v27.2d1560add v2.2d,v2.2d,v28.2d1561add v3.2d,v3.2d,v29.2d15621563cbnz x2,.Loop_hw15641565st1 {v0.2d-v3.2d},[x0] // store context15661567ldr x29,[sp],#161568ret1569.size zfs_sha512_block_armv8,.-zfs_sha512_block_armv81570#endif157115721573