Path: blob/main/sys/crypto/openssl/aarch64/sha256-armv8.S
39536 views
/* Do not modify. This file is auto-generated from sha512-armv8.pl. */1// Copyright 2014-2025 The OpenSSL Project Authors. All Rights Reserved.2//3// Licensed under the Apache License 2.0 (the "License"). You may not use4// this file except in compliance with the License. You can obtain a copy5// in the file LICENSE in the source distribution or at6// https://www.openssl.org/source/license.html78// ====================================================================9// Written by Andy Polyakov <appro@openssl.org> for the OpenSSL10// project. The module is, however, dual licensed under OpenSSL and11// CRYPTOGAMS licenses depending on where you obtain it. For further12// details see http://www.openssl.org/~appro/cryptogams/.13//14// Permission to use under GPLv2 terms is granted.15// ====================================================================16//17// SHA256/512 for ARMv8.18//19// Performance in cycles per processed byte and improvement coefficient20// over code generated with "default" compiler:21//22// SHA256-hw SHA256(*) SHA51223// Apple A7 1.97 10.5 (+33%) 6.73 (-1%(**))24// Cortex-A53 2.38 15.5 (+115%) 10.0 (+150%(***))25// Cortex-A57 2.31 11.6 (+86%) 7.51 (+260%(***))26// Denver 2.01 10.5 (+26%) 6.70 (+8%)27// X-Gene 20.0 (+100%) 12.8 (+300%(***))28// Mongoose 2.36 13.0 (+50%) 8.36 (+33%)29// Kryo 1.92 17.4 (+30%) 11.2 (+8%)30// ThunderX2 2.54 13.2 (+40%) 8.40 (+18%)31//32// (*) Software SHA256 results are of lesser relevance, presented33// mostly for informational purposes.34// (**) The result is a trade-off: it's possible to improve it by35// 10% (or by 1 cycle per round), but at the cost of 20% loss36// on Cortex-A53 (or by 4 cycles per round).37// (***) Super-impressive coefficients over gcc-generated code are38// indication of some compiler "pathology", most notably code39// generated with -mgeneral-regs-only is significantly faster40// and the gap is only 40-90%.41//42// October 2016.43//44// Originally it was reckoned that it makes no sense to implement NEON45// version of SHA256 for 64-bit processors. This is because performance46// improvement on most wide-spread Cortex-A5x processors was observed47// to be marginal, same on Cortex-A53 and ~10% on A57. But then it was48// observed that 32-bit NEON SHA256 performs significantly better than49// 64-bit scalar version on *some* of the more recent processors. As50// result 64-bit NEON version of SHA256 was added to provide best51// all-round performance. For example it executes ~30% faster on X-Gene52// and Mongoose. [For reference, NEON version of SHA512 is bound to53// deliver much less improvement, likely *negative* on Cortex-A5x.54// Which is why NEON support is limited to SHA256.]5556// $output is the last argument if it looks like a file (it has an extension)57// $flavour is the first argument if it doesn't look like a file58#include "arm_arch.h"59#ifndef __KERNEL__6061.hidden OPENSSL_armcap_P62#endif6364.text6566.globl sha256_block_data_order67.type sha256_block_data_order,%function68.align 669sha256_block_data_order:70AARCH64_VALID_CALL_TARGET71#ifndef __KERNEL__72adrp x16,OPENSSL_armcap_P73ldr w16,[x16,#:lo12:OPENSSL_armcap_P]74tst w16,#ARMV8_SHA25675b.ne .Lv8_entry76tst w16,#ARMV7_NEON77b.ne .Lneon_entry78#endif79AARCH64_SIGN_LINK_REGISTER80stp x29,x30,[sp,#-128]!81add x29,sp,#08283stp x19,x20,[sp,#16]84stp x21,x22,[sp,#32]85stp x23,x24,[sp,#48]86stp x25,x26,[sp,#64]87stp x27,x28,[sp,#80]88sub sp,sp,#4*48990ldp w20,w21,[x0] // load context91ldp w22,w23,[x0,#2*4]92ldp w24,w25,[x0,#4*4]93add x2,x1,x2,lsl#6 // end of input94ldp w26,w27,[x0,#6*4]95adrp x30,.LK25696add x30,x30,#:lo12:.LK25697stp x0,x2,[x29,#96]9899.Loop:100ldp w3,w4,[x1],#2*4101ldr w19,[x30],#4 // *K++102eor w28,w21,w22 // magic seed103str x1,[x29,#112]104#ifndef __AARCH64EB__105rev w3,w3 // 0106#endif107ror w16,w24,#6108add w27,w27,w19 // h+=K[i]109eor w6,w24,w24,ror#14110and w17,w25,w24111bic w19,w26,w24112add w27,w27,w3 // h+=X[i]113orr w17,w17,w19 // Ch(e,f,g)114eor w19,w20,w21 // a^b, b^c in next round115eor w16,w16,w6,ror#11 // Sigma1(e)116ror w6,w20,#2117add w27,w27,w17 // h+=Ch(e,f,g)118eor w17,w20,w20,ror#9119add w27,w27,w16 // h+=Sigma1(e)120and w28,w28,w19 // (b^c)&=(a^b)121add w23,w23,w27 // d+=h122eor w28,w28,w21 // Maj(a,b,c)123eor w17,w6,w17,ror#13 // Sigma0(a)124add w27,w27,w28 // h+=Maj(a,b,c)125ldr w28,[x30],#4 // *K++, w19 in next round126//add w27,w27,w17 // h+=Sigma0(a)127#ifndef __AARCH64EB__128rev w4,w4 // 1129#endif130ldp w5,w6,[x1],#2*4131add w27,w27,w17 // h+=Sigma0(a)132ror w16,w23,#6133add w26,w26,w28 // h+=K[i]134eor w7,w23,w23,ror#14135and w17,w24,w23136bic w28,w25,w23137add w26,w26,w4 // h+=X[i]138orr w17,w17,w28 // Ch(e,f,g)139eor w28,w27,w20 // a^b, b^c in next round140eor w16,w16,w7,ror#11 // Sigma1(e)141ror w7,w27,#2142add w26,w26,w17 // h+=Ch(e,f,g)143eor w17,w27,w27,ror#9144add w26,w26,w16 // h+=Sigma1(e)145and w19,w19,w28 // (b^c)&=(a^b)146add w22,w22,w26 // d+=h147eor w19,w19,w20 // Maj(a,b,c)148eor w17,w7,w17,ror#13 // Sigma0(a)149add w26,w26,w19 // h+=Maj(a,b,c)150ldr w19,[x30],#4 // *K++, w28 in next round151//add w26,w26,w17 // h+=Sigma0(a)152#ifndef __AARCH64EB__153rev w5,w5 // 2154#endif155add w26,w26,w17 // h+=Sigma0(a)156ror w16,w22,#6157add w25,w25,w19 // h+=K[i]158eor w8,w22,w22,ror#14159and w17,w23,w22160bic w19,w24,w22161add w25,w25,w5 // h+=X[i]162orr w17,w17,w19 // Ch(e,f,g)163eor w19,w26,w27 // a^b, b^c in next round164eor w16,w16,w8,ror#11 // Sigma1(e)165ror w8,w26,#2166add w25,w25,w17 // h+=Ch(e,f,g)167eor w17,w26,w26,ror#9168add w25,w25,w16 // h+=Sigma1(e)169and w28,w28,w19 // (b^c)&=(a^b)170add w21,w21,w25 // d+=h171eor w28,w28,w27 // Maj(a,b,c)172eor w17,w8,w17,ror#13 // Sigma0(a)173add w25,w25,w28 // h+=Maj(a,b,c)174ldr w28,[x30],#4 // *K++, w19 in next round175//add w25,w25,w17 // h+=Sigma0(a)176#ifndef __AARCH64EB__177rev w6,w6 // 3178#endif179ldp w7,w8,[x1],#2*4180add w25,w25,w17 // h+=Sigma0(a)181ror w16,w21,#6182add w24,w24,w28 // h+=K[i]183eor w9,w21,w21,ror#14184and w17,w22,w21185bic w28,w23,w21186add w24,w24,w6 // h+=X[i]187orr w17,w17,w28 // Ch(e,f,g)188eor w28,w25,w26 // a^b, b^c in next round189eor w16,w16,w9,ror#11 // Sigma1(e)190ror w9,w25,#2191add w24,w24,w17 // h+=Ch(e,f,g)192eor w17,w25,w25,ror#9193add w24,w24,w16 // h+=Sigma1(e)194and w19,w19,w28 // (b^c)&=(a^b)195add w20,w20,w24 // d+=h196eor w19,w19,w26 // Maj(a,b,c)197eor w17,w9,w17,ror#13 // Sigma0(a)198add w24,w24,w19 // h+=Maj(a,b,c)199ldr w19,[x30],#4 // *K++, w28 in next round200//add w24,w24,w17 // h+=Sigma0(a)201#ifndef __AARCH64EB__202rev w7,w7 // 4203#endif204add w24,w24,w17 // h+=Sigma0(a)205ror w16,w20,#6206add w23,w23,w19 // h+=K[i]207eor w10,w20,w20,ror#14208and w17,w21,w20209bic w19,w22,w20210add w23,w23,w7 // h+=X[i]211orr w17,w17,w19 // Ch(e,f,g)212eor w19,w24,w25 // a^b, b^c in next round213eor w16,w16,w10,ror#11 // Sigma1(e)214ror w10,w24,#2215add w23,w23,w17 // h+=Ch(e,f,g)216eor w17,w24,w24,ror#9217add w23,w23,w16 // h+=Sigma1(e)218and w28,w28,w19 // (b^c)&=(a^b)219add w27,w27,w23 // d+=h220eor w28,w28,w25 // Maj(a,b,c)221eor w17,w10,w17,ror#13 // Sigma0(a)222add w23,w23,w28 // h+=Maj(a,b,c)223ldr w28,[x30],#4 // *K++, w19 in next round224//add w23,w23,w17 // h+=Sigma0(a)225#ifndef __AARCH64EB__226rev w8,w8 // 5227#endif228ldp w9,w10,[x1],#2*4229add w23,w23,w17 // h+=Sigma0(a)230ror w16,w27,#6231add w22,w22,w28 // h+=K[i]232eor w11,w27,w27,ror#14233and w17,w20,w27234bic w28,w21,w27235add w22,w22,w8 // h+=X[i]236orr w17,w17,w28 // Ch(e,f,g)237eor w28,w23,w24 // a^b, b^c in next round238eor w16,w16,w11,ror#11 // Sigma1(e)239ror w11,w23,#2240add w22,w22,w17 // h+=Ch(e,f,g)241eor w17,w23,w23,ror#9242add w22,w22,w16 // h+=Sigma1(e)243and w19,w19,w28 // (b^c)&=(a^b)244add w26,w26,w22 // d+=h245eor w19,w19,w24 // Maj(a,b,c)246eor w17,w11,w17,ror#13 // Sigma0(a)247add w22,w22,w19 // h+=Maj(a,b,c)248ldr w19,[x30],#4 // *K++, w28 in next round249//add w22,w22,w17 // h+=Sigma0(a)250#ifndef __AARCH64EB__251rev w9,w9 // 6252#endif253add w22,w22,w17 // h+=Sigma0(a)254ror w16,w26,#6255add w21,w21,w19 // h+=K[i]256eor w12,w26,w26,ror#14257and w17,w27,w26258bic w19,w20,w26259add w21,w21,w9 // h+=X[i]260orr w17,w17,w19 // Ch(e,f,g)261eor w19,w22,w23 // a^b, b^c in next round262eor w16,w16,w12,ror#11 // Sigma1(e)263ror w12,w22,#2264add w21,w21,w17 // h+=Ch(e,f,g)265eor w17,w22,w22,ror#9266add w21,w21,w16 // h+=Sigma1(e)267and w28,w28,w19 // (b^c)&=(a^b)268add w25,w25,w21 // d+=h269eor w28,w28,w23 // Maj(a,b,c)270eor w17,w12,w17,ror#13 // Sigma0(a)271add w21,w21,w28 // h+=Maj(a,b,c)272ldr w28,[x30],#4 // *K++, w19 in next round273//add w21,w21,w17 // h+=Sigma0(a)274#ifndef __AARCH64EB__275rev w10,w10 // 7276#endif277ldp w11,w12,[x1],#2*4278add w21,w21,w17 // h+=Sigma0(a)279ror w16,w25,#6280add w20,w20,w28 // h+=K[i]281eor w13,w25,w25,ror#14282and w17,w26,w25283bic w28,w27,w25284add w20,w20,w10 // h+=X[i]285orr w17,w17,w28 // Ch(e,f,g)286eor w28,w21,w22 // a^b, b^c in next round287eor w16,w16,w13,ror#11 // Sigma1(e)288ror w13,w21,#2289add w20,w20,w17 // h+=Ch(e,f,g)290eor w17,w21,w21,ror#9291add w20,w20,w16 // h+=Sigma1(e)292and w19,w19,w28 // (b^c)&=(a^b)293add w24,w24,w20 // d+=h294eor w19,w19,w22 // Maj(a,b,c)295eor w17,w13,w17,ror#13 // Sigma0(a)296add w20,w20,w19 // h+=Maj(a,b,c)297ldr w19,[x30],#4 // *K++, w28 in next round298//add w20,w20,w17 // h+=Sigma0(a)299#ifndef __AARCH64EB__300rev w11,w11 // 8301#endif302add w20,w20,w17 // h+=Sigma0(a)303ror w16,w24,#6304add w27,w27,w19 // h+=K[i]305eor w14,w24,w24,ror#14306and w17,w25,w24307bic w19,w26,w24308add w27,w27,w11 // h+=X[i]309orr w17,w17,w19 // Ch(e,f,g)310eor w19,w20,w21 // a^b, b^c in next round311eor w16,w16,w14,ror#11 // Sigma1(e)312ror w14,w20,#2313add w27,w27,w17 // h+=Ch(e,f,g)314eor w17,w20,w20,ror#9315add w27,w27,w16 // h+=Sigma1(e)316and w28,w28,w19 // (b^c)&=(a^b)317add w23,w23,w27 // d+=h318eor w28,w28,w21 // Maj(a,b,c)319eor w17,w14,w17,ror#13 // Sigma0(a)320add w27,w27,w28 // h+=Maj(a,b,c)321ldr w28,[x30],#4 // *K++, w19 in next round322//add w27,w27,w17 // h+=Sigma0(a)323#ifndef __AARCH64EB__324rev w12,w12 // 9325#endif326ldp w13,w14,[x1],#2*4327add w27,w27,w17 // h+=Sigma0(a)328ror w16,w23,#6329add w26,w26,w28 // h+=K[i]330eor w15,w23,w23,ror#14331and w17,w24,w23332bic w28,w25,w23333add w26,w26,w12 // h+=X[i]334orr w17,w17,w28 // Ch(e,f,g)335eor w28,w27,w20 // a^b, b^c in next round336eor w16,w16,w15,ror#11 // Sigma1(e)337ror w15,w27,#2338add w26,w26,w17 // h+=Ch(e,f,g)339eor w17,w27,w27,ror#9340add w26,w26,w16 // h+=Sigma1(e)341and w19,w19,w28 // (b^c)&=(a^b)342add w22,w22,w26 // d+=h343eor w19,w19,w20 // Maj(a,b,c)344eor w17,w15,w17,ror#13 // Sigma0(a)345add w26,w26,w19 // h+=Maj(a,b,c)346ldr w19,[x30],#4 // *K++, w28 in next round347//add w26,w26,w17 // h+=Sigma0(a)348#ifndef __AARCH64EB__349rev w13,w13 // 10350#endif351add w26,w26,w17 // h+=Sigma0(a)352ror w16,w22,#6353add w25,w25,w19 // h+=K[i]354eor w0,w22,w22,ror#14355and w17,w23,w22356bic w19,w24,w22357add w25,w25,w13 // h+=X[i]358orr w17,w17,w19 // Ch(e,f,g)359eor w19,w26,w27 // a^b, b^c in next round360eor w16,w16,w0,ror#11 // Sigma1(e)361ror w0,w26,#2362add w25,w25,w17 // h+=Ch(e,f,g)363eor w17,w26,w26,ror#9364add w25,w25,w16 // h+=Sigma1(e)365and w28,w28,w19 // (b^c)&=(a^b)366add w21,w21,w25 // d+=h367eor w28,w28,w27 // Maj(a,b,c)368eor w17,w0,w17,ror#13 // Sigma0(a)369add w25,w25,w28 // h+=Maj(a,b,c)370ldr w28,[x30],#4 // *K++, w19 in next round371//add w25,w25,w17 // h+=Sigma0(a)372#ifndef __AARCH64EB__373rev w14,w14 // 11374#endif375ldp w15,w0,[x1],#2*4376add w25,w25,w17 // h+=Sigma0(a)377str w6,[sp,#12]378ror w16,w21,#6379add w24,w24,w28 // h+=K[i]380eor w6,w21,w21,ror#14381and w17,w22,w21382bic w28,w23,w21383add w24,w24,w14 // h+=X[i]384orr w17,w17,w28 // Ch(e,f,g)385eor w28,w25,w26 // a^b, b^c in next round386eor w16,w16,w6,ror#11 // Sigma1(e)387ror w6,w25,#2388add w24,w24,w17 // h+=Ch(e,f,g)389eor w17,w25,w25,ror#9390add w24,w24,w16 // h+=Sigma1(e)391and w19,w19,w28 // (b^c)&=(a^b)392add w20,w20,w24 // d+=h393eor w19,w19,w26 // Maj(a,b,c)394eor w17,w6,w17,ror#13 // Sigma0(a)395add w24,w24,w19 // h+=Maj(a,b,c)396ldr w19,[x30],#4 // *K++, w28 in next round397//add w24,w24,w17 // h+=Sigma0(a)398#ifndef __AARCH64EB__399rev w15,w15 // 12400#endif401add w24,w24,w17 // h+=Sigma0(a)402str w7,[sp,#0]403ror w16,w20,#6404add w23,w23,w19 // h+=K[i]405eor w7,w20,w20,ror#14406and w17,w21,w20407bic w19,w22,w20408add w23,w23,w15 // h+=X[i]409orr w17,w17,w19 // Ch(e,f,g)410eor w19,w24,w25 // a^b, b^c in next round411eor w16,w16,w7,ror#11 // Sigma1(e)412ror w7,w24,#2413add w23,w23,w17 // h+=Ch(e,f,g)414eor w17,w24,w24,ror#9415add w23,w23,w16 // h+=Sigma1(e)416and w28,w28,w19 // (b^c)&=(a^b)417add w27,w27,w23 // d+=h418eor w28,w28,w25 // Maj(a,b,c)419eor w17,w7,w17,ror#13 // Sigma0(a)420add w23,w23,w28 // h+=Maj(a,b,c)421ldr w28,[x30],#4 // *K++, w19 in next round422//add w23,w23,w17 // h+=Sigma0(a)423#ifndef __AARCH64EB__424rev w0,w0 // 13425#endif426ldp w1,w2,[x1]427add w23,w23,w17 // h+=Sigma0(a)428str w8,[sp,#4]429ror w16,w27,#6430add w22,w22,w28 // h+=K[i]431eor w8,w27,w27,ror#14432and w17,w20,w27433bic w28,w21,w27434add w22,w22,w0 // h+=X[i]435orr w17,w17,w28 // Ch(e,f,g)436eor w28,w23,w24 // a^b, b^c in next round437eor w16,w16,w8,ror#11 // Sigma1(e)438ror w8,w23,#2439add w22,w22,w17 // h+=Ch(e,f,g)440eor w17,w23,w23,ror#9441add w22,w22,w16 // h+=Sigma1(e)442and w19,w19,w28 // (b^c)&=(a^b)443add w26,w26,w22 // d+=h444eor w19,w19,w24 // Maj(a,b,c)445eor w17,w8,w17,ror#13 // Sigma0(a)446add w22,w22,w19 // h+=Maj(a,b,c)447ldr w19,[x30],#4 // *K++, w28 in next round448//add w22,w22,w17 // h+=Sigma0(a)449#ifndef __AARCH64EB__450rev w1,w1 // 14451#endif452ldr w6,[sp,#12]453add w22,w22,w17 // h+=Sigma0(a)454str w9,[sp,#8]455ror w16,w26,#6456add w21,w21,w19 // h+=K[i]457eor w9,w26,w26,ror#14458and w17,w27,w26459bic w19,w20,w26460add w21,w21,w1 // h+=X[i]461orr w17,w17,w19 // Ch(e,f,g)462eor w19,w22,w23 // a^b, b^c in next round463eor w16,w16,w9,ror#11 // Sigma1(e)464ror w9,w22,#2465add w21,w21,w17 // h+=Ch(e,f,g)466eor w17,w22,w22,ror#9467add w21,w21,w16 // h+=Sigma1(e)468and w28,w28,w19 // (b^c)&=(a^b)469add w25,w25,w21 // d+=h470eor w28,w28,w23 // Maj(a,b,c)471eor w17,w9,w17,ror#13 // Sigma0(a)472add w21,w21,w28 // h+=Maj(a,b,c)473ldr w28,[x30],#4 // *K++, w19 in next round474//add w21,w21,w17 // h+=Sigma0(a)475#ifndef __AARCH64EB__476rev w2,w2 // 15477#endif478ldr w7,[sp,#0]479add w21,w21,w17 // h+=Sigma0(a)480str w10,[sp,#12]481ror w16,w25,#6482add w20,w20,w28 // h+=K[i]483ror w9,w4,#7484and w17,w26,w25485ror w8,w1,#17486bic w28,w27,w25487ror w10,w21,#2488add w20,w20,w2 // h+=X[i]489eor w16,w16,w25,ror#11490eor w9,w9,w4,ror#18491orr w17,w17,w28 // Ch(e,f,g)492eor w28,w21,w22 // a^b, b^c in next round493eor w16,w16,w25,ror#25 // Sigma1(e)494eor w10,w10,w21,ror#13495add w20,w20,w17 // h+=Ch(e,f,g)496and w19,w19,w28 // (b^c)&=(a^b)497eor w8,w8,w1,ror#19498eor w9,w9,w4,lsr#3 // sigma0(X[i+1])499add w20,w20,w16 // h+=Sigma1(e)500eor w19,w19,w22 // Maj(a,b,c)501eor w17,w10,w21,ror#22 // Sigma0(a)502eor w8,w8,w1,lsr#10 // sigma1(X[i+14])503add w3,w3,w12504add w24,w24,w20 // d+=h505add w20,w20,w19 // h+=Maj(a,b,c)506ldr w19,[x30],#4 // *K++, w28 in next round507add w3,w3,w9508add w20,w20,w17 // h+=Sigma0(a)509add w3,w3,w8510.Loop_16_xx:511ldr w8,[sp,#4]512str w11,[sp,#0]513ror w16,w24,#6514add w27,w27,w19 // h+=K[i]515ror w10,w5,#7516and w17,w25,w24517ror w9,w2,#17518bic w19,w26,w24519ror w11,w20,#2520add w27,w27,w3 // h+=X[i]521eor w16,w16,w24,ror#11522eor w10,w10,w5,ror#18523orr w17,w17,w19 // Ch(e,f,g)524eor w19,w20,w21 // a^b, b^c in next round525eor w16,w16,w24,ror#25 // Sigma1(e)526eor w11,w11,w20,ror#13527add w27,w27,w17 // h+=Ch(e,f,g)528and w28,w28,w19 // (b^c)&=(a^b)529eor w9,w9,w2,ror#19530eor w10,w10,w5,lsr#3 // sigma0(X[i+1])531add w27,w27,w16 // h+=Sigma1(e)532eor w28,w28,w21 // Maj(a,b,c)533eor w17,w11,w20,ror#22 // Sigma0(a)534eor w9,w9,w2,lsr#10 // sigma1(X[i+14])535add w4,w4,w13536add w23,w23,w27 // d+=h537add w27,w27,w28 // h+=Maj(a,b,c)538ldr w28,[x30],#4 // *K++, w19 in next round539add w4,w4,w10540add w27,w27,w17 // h+=Sigma0(a)541add w4,w4,w9542ldr w9,[sp,#8]543str w12,[sp,#4]544ror w16,w23,#6545add w26,w26,w28 // h+=K[i]546ror w11,w6,#7547and w17,w24,w23548ror w10,w3,#17549bic w28,w25,w23550ror w12,w27,#2551add w26,w26,w4 // h+=X[i]552eor w16,w16,w23,ror#11553eor w11,w11,w6,ror#18554orr w17,w17,w28 // Ch(e,f,g)555eor w28,w27,w20 // a^b, b^c in next round556eor w16,w16,w23,ror#25 // Sigma1(e)557eor w12,w12,w27,ror#13558add w26,w26,w17 // h+=Ch(e,f,g)559and w19,w19,w28 // (b^c)&=(a^b)560eor w10,w10,w3,ror#19561eor w11,w11,w6,lsr#3 // sigma0(X[i+1])562add w26,w26,w16 // h+=Sigma1(e)563eor w19,w19,w20 // Maj(a,b,c)564eor w17,w12,w27,ror#22 // Sigma0(a)565eor w10,w10,w3,lsr#10 // sigma1(X[i+14])566add w5,w5,w14567add w22,w22,w26 // d+=h568add w26,w26,w19 // h+=Maj(a,b,c)569ldr w19,[x30],#4 // *K++, w28 in next round570add w5,w5,w11571add w26,w26,w17 // h+=Sigma0(a)572add w5,w5,w10573ldr w10,[sp,#12]574str w13,[sp,#8]575ror w16,w22,#6576add w25,w25,w19 // h+=K[i]577ror w12,w7,#7578and w17,w23,w22579ror w11,w4,#17580bic w19,w24,w22581ror w13,w26,#2582add w25,w25,w5 // h+=X[i]583eor w16,w16,w22,ror#11584eor w12,w12,w7,ror#18585orr w17,w17,w19 // Ch(e,f,g)586eor w19,w26,w27 // a^b, b^c in next round587eor w16,w16,w22,ror#25 // Sigma1(e)588eor w13,w13,w26,ror#13589add w25,w25,w17 // h+=Ch(e,f,g)590and w28,w28,w19 // (b^c)&=(a^b)591eor w11,w11,w4,ror#19592eor w12,w12,w7,lsr#3 // sigma0(X[i+1])593add w25,w25,w16 // h+=Sigma1(e)594eor w28,w28,w27 // Maj(a,b,c)595eor w17,w13,w26,ror#22 // Sigma0(a)596eor w11,w11,w4,lsr#10 // sigma1(X[i+14])597add w6,w6,w15598add w21,w21,w25 // d+=h599add w25,w25,w28 // h+=Maj(a,b,c)600ldr w28,[x30],#4 // *K++, w19 in next round601add w6,w6,w12602add w25,w25,w17 // h+=Sigma0(a)603add w6,w6,w11604ldr w11,[sp,#0]605str w14,[sp,#12]606ror w16,w21,#6607add w24,w24,w28 // h+=K[i]608ror w13,w8,#7609and w17,w22,w21610ror w12,w5,#17611bic w28,w23,w21612ror w14,w25,#2613add w24,w24,w6 // h+=X[i]614eor w16,w16,w21,ror#11615eor w13,w13,w8,ror#18616orr w17,w17,w28 // Ch(e,f,g)617eor w28,w25,w26 // a^b, b^c in next round618eor w16,w16,w21,ror#25 // Sigma1(e)619eor w14,w14,w25,ror#13620add w24,w24,w17 // h+=Ch(e,f,g)621and w19,w19,w28 // (b^c)&=(a^b)622eor w12,w12,w5,ror#19623eor w13,w13,w8,lsr#3 // sigma0(X[i+1])624add w24,w24,w16 // h+=Sigma1(e)625eor w19,w19,w26 // Maj(a,b,c)626eor w17,w14,w25,ror#22 // Sigma0(a)627eor w12,w12,w5,lsr#10 // sigma1(X[i+14])628add w7,w7,w0629add w20,w20,w24 // d+=h630add w24,w24,w19 // h+=Maj(a,b,c)631ldr w19,[x30],#4 // *K++, w28 in next round632add w7,w7,w13633add w24,w24,w17 // h+=Sigma0(a)634add w7,w7,w12635ldr w12,[sp,#4]636str w15,[sp,#0]637ror w16,w20,#6638add w23,w23,w19 // h+=K[i]639ror w14,w9,#7640and w17,w21,w20641ror w13,w6,#17642bic w19,w22,w20643ror w15,w24,#2644add w23,w23,w7 // h+=X[i]645eor w16,w16,w20,ror#11646eor w14,w14,w9,ror#18647orr w17,w17,w19 // Ch(e,f,g)648eor w19,w24,w25 // a^b, b^c in next round649eor w16,w16,w20,ror#25 // Sigma1(e)650eor w15,w15,w24,ror#13651add w23,w23,w17 // h+=Ch(e,f,g)652and w28,w28,w19 // (b^c)&=(a^b)653eor w13,w13,w6,ror#19654eor w14,w14,w9,lsr#3 // sigma0(X[i+1])655add w23,w23,w16 // h+=Sigma1(e)656eor w28,w28,w25 // Maj(a,b,c)657eor w17,w15,w24,ror#22 // Sigma0(a)658eor w13,w13,w6,lsr#10 // sigma1(X[i+14])659add w8,w8,w1660add w27,w27,w23 // d+=h661add w23,w23,w28 // h+=Maj(a,b,c)662ldr w28,[x30],#4 // *K++, w19 in next round663add w8,w8,w14664add w23,w23,w17 // h+=Sigma0(a)665add w8,w8,w13666ldr w13,[sp,#8]667str w0,[sp,#4]668ror w16,w27,#6669add w22,w22,w28 // h+=K[i]670ror w15,w10,#7671and w17,w20,w27672ror w14,w7,#17673bic w28,w21,w27674ror w0,w23,#2675add w22,w22,w8 // h+=X[i]676eor w16,w16,w27,ror#11677eor w15,w15,w10,ror#18678orr w17,w17,w28 // Ch(e,f,g)679eor w28,w23,w24 // a^b, b^c in next round680eor w16,w16,w27,ror#25 // Sigma1(e)681eor w0,w0,w23,ror#13682add w22,w22,w17 // h+=Ch(e,f,g)683and w19,w19,w28 // (b^c)&=(a^b)684eor w14,w14,w7,ror#19685eor w15,w15,w10,lsr#3 // sigma0(X[i+1])686add w22,w22,w16 // h+=Sigma1(e)687eor w19,w19,w24 // Maj(a,b,c)688eor w17,w0,w23,ror#22 // Sigma0(a)689eor w14,w14,w7,lsr#10 // sigma1(X[i+14])690add w9,w9,w2691add w26,w26,w22 // d+=h692add w22,w22,w19 // h+=Maj(a,b,c)693ldr w19,[x30],#4 // *K++, w28 in next round694add w9,w9,w15695add w22,w22,w17 // h+=Sigma0(a)696add w9,w9,w14697ldr w14,[sp,#12]698str w1,[sp,#8]699ror w16,w26,#6700add w21,w21,w19 // h+=K[i]701ror w0,w11,#7702and w17,w27,w26703ror w15,w8,#17704bic w19,w20,w26705ror w1,w22,#2706add w21,w21,w9 // h+=X[i]707eor w16,w16,w26,ror#11708eor w0,w0,w11,ror#18709orr w17,w17,w19 // Ch(e,f,g)710eor w19,w22,w23 // a^b, b^c in next round711eor w16,w16,w26,ror#25 // Sigma1(e)712eor w1,w1,w22,ror#13713add w21,w21,w17 // h+=Ch(e,f,g)714and w28,w28,w19 // (b^c)&=(a^b)715eor w15,w15,w8,ror#19716eor w0,w0,w11,lsr#3 // sigma0(X[i+1])717add w21,w21,w16 // h+=Sigma1(e)718eor w28,w28,w23 // Maj(a,b,c)719eor w17,w1,w22,ror#22 // Sigma0(a)720eor w15,w15,w8,lsr#10 // sigma1(X[i+14])721add w10,w10,w3722add w25,w25,w21 // d+=h723add w21,w21,w28 // h+=Maj(a,b,c)724ldr w28,[x30],#4 // *K++, w19 in next round725add w10,w10,w0726add w21,w21,w17 // h+=Sigma0(a)727add w10,w10,w15728ldr w15,[sp,#0]729str w2,[sp,#12]730ror w16,w25,#6731add w20,w20,w28 // h+=K[i]732ror w1,w12,#7733and w17,w26,w25734ror w0,w9,#17735bic w28,w27,w25736ror w2,w21,#2737add w20,w20,w10 // h+=X[i]738eor w16,w16,w25,ror#11739eor w1,w1,w12,ror#18740orr w17,w17,w28 // Ch(e,f,g)741eor w28,w21,w22 // a^b, b^c in next round742eor w16,w16,w25,ror#25 // Sigma1(e)743eor w2,w2,w21,ror#13744add w20,w20,w17 // h+=Ch(e,f,g)745and w19,w19,w28 // (b^c)&=(a^b)746eor w0,w0,w9,ror#19747eor w1,w1,w12,lsr#3 // sigma0(X[i+1])748add w20,w20,w16 // h+=Sigma1(e)749eor w19,w19,w22 // Maj(a,b,c)750eor w17,w2,w21,ror#22 // Sigma0(a)751eor w0,w0,w9,lsr#10 // sigma1(X[i+14])752add w11,w11,w4753add w24,w24,w20 // d+=h754add w20,w20,w19 // h+=Maj(a,b,c)755ldr w19,[x30],#4 // *K++, w28 in next round756add w11,w11,w1757add w20,w20,w17 // h+=Sigma0(a)758add w11,w11,w0759ldr w0,[sp,#4]760str w3,[sp,#0]761ror w16,w24,#6762add w27,w27,w19 // h+=K[i]763ror w2,w13,#7764and w17,w25,w24765ror w1,w10,#17766bic w19,w26,w24767ror w3,w20,#2768add w27,w27,w11 // h+=X[i]769eor w16,w16,w24,ror#11770eor w2,w2,w13,ror#18771orr w17,w17,w19 // Ch(e,f,g)772eor w19,w20,w21 // a^b, b^c in next round773eor w16,w16,w24,ror#25 // Sigma1(e)774eor w3,w3,w20,ror#13775add w27,w27,w17 // h+=Ch(e,f,g)776and w28,w28,w19 // (b^c)&=(a^b)777eor w1,w1,w10,ror#19778eor w2,w2,w13,lsr#3 // sigma0(X[i+1])779add w27,w27,w16 // h+=Sigma1(e)780eor w28,w28,w21 // Maj(a,b,c)781eor w17,w3,w20,ror#22 // Sigma0(a)782eor w1,w1,w10,lsr#10 // sigma1(X[i+14])783add w12,w12,w5784add w23,w23,w27 // d+=h785add w27,w27,w28 // h+=Maj(a,b,c)786ldr w28,[x30],#4 // *K++, w19 in next round787add w12,w12,w2788add w27,w27,w17 // h+=Sigma0(a)789add w12,w12,w1790ldr w1,[sp,#8]791str w4,[sp,#4]792ror w16,w23,#6793add w26,w26,w28 // h+=K[i]794ror w3,w14,#7795and w17,w24,w23796ror w2,w11,#17797bic w28,w25,w23798ror w4,w27,#2799add w26,w26,w12 // h+=X[i]800eor w16,w16,w23,ror#11801eor w3,w3,w14,ror#18802orr w17,w17,w28 // Ch(e,f,g)803eor w28,w27,w20 // a^b, b^c in next round804eor w16,w16,w23,ror#25 // Sigma1(e)805eor w4,w4,w27,ror#13806add w26,w26,w17 // h+=Ch(e,f,g)807and w19,w19,w28 // (b^c)&=(a^b)808eor w2,w2,w11,ror#19809eor w3,w3,w14,lsr#3 // sigma0(X[i+1])810add w26,w26,w16 // h+=Sigma1(e)811eor w19,w19,w20 // Maj(a,b,c)812eor w17,w4,w27,ror#22 // Sigma0(a)813eor w2,w2,w11,lsr#10 // sigma1(X[i+14])814add w13,w13,w6815add w22,w22,w26 // d+=h816add w26,w26,w19 // h+=Maj(a,b,c)817ldr w19,[x30],#4 // *K++, w28 in next round818add w13,w13,w3819add w26,w26,w17 // h+=Sigma0(a)820add w13,w13,w2821ldr w2,[sp,#12]822str w5,[sp,#8]823ror w16,w22,#6824add w25,w25,w19 // h+=K[i]825ror w4,w15,#7826and w17,w23,w22827ror w3,w12,#17828bic w19,w24,w22829ror w5,w26,#2830add w25,w25,w13 // h+=X[i]831eor w16,w16,w22,ror#11832eor w4,w4,w15,ror#18833orr w17,w17,w19 // Ch(e,f,g)834eor w19,w26,w27 // a^b, b^c in next round835eor w16,w16,w22,ror#25 // Sigma1(e)836eor w5,w5,w26,ror#13837add w25,w25,w17 // h+=Ch(e,f,g)838and w28,w28,w19 // (b^c)&=(a^b)839eor w3,w3,w12,ror#19840eor w4,w4,w15,lsr#3 // sigma0(X[i+1])841add w25,w25,w16 // h+=Sigma1(e)842eor w28,w28,w27 // Maj(a,b,c)843eor w17,w5,w26,ror#22 // Sigma0(a)844eor w3,w3,w12,lsr#10 // sigma1(X[i+14])845add w14,w14,w7846add w21,w21,w25 // d+=h847add w25,w25,w28 // h+=Maj(a,b,c)848ldr w28,[x30],#4 // *K++, w19 in next round849add w14,w14,w4850add w25,w25,w17 // h+=Sigma0(a)851add w14,w14,w3852ldr w3,[sp,#0]853str w6,[sp,#12]854ror w16,w21,#6855add w24,w24,w28 // h+=K[i]856ror w5,w0,#7857and w17,w22,w21858ror w4,w13,#17859bic w28,w23,w21860ror w6,w25,#2861add w24,w24,w14 // h+=X[i]862eor w16,w16,w21,ror#11863eor w5,w5,w0,ror#18864orr w17,w17,w28 // Ch(e,f,g)865eor w28,w25,w26 // a^b, b^c in next round866eor w16,w16,w21,ror#25 // Sigma1(e)867eor w6,w6,w25,ror#13868add w24,w24,w17 // h+=Ch(e,f,g)869and w19,w19,w28 // (b^c)&=(a^b)870eor w4,w4,w13,ror#19871eor w5,w5,w0,lsr#3 // sigma0(X[i+1])872add w24,w24,w16 // h+=Sigma1(e)873eor w19,w19,w26 // Maj(a,b,c)874eor w17,w6,w25,ror#22 // Sigma0(a)875eor w4,w4,w13,lsr#10 // sigma1(X[i+14])876add w15,w15,w8877add w20,w20,w24 // d+=h878add w24,w24,w19 // h+=Maj(a,b,c)879ldr w19,[x30],#4 // *K++, w28 in next round880add w15,w15,w5881add w24,w24,w17 // h+=Sigma0(a)882add w15,w15,w4883ldr w4,[sp,#4]884str w7,[sp,#0]885ror w16,w20,#6886add w23,w23,w19 // h+=K[i]887ror w6,w1,#7888and w17,w21,w20889ror w5,w14,#17890bic w19,w22,w20891ror w7,w24,#2892add w23,w23,w15 // h+=X[i]893eor w16,w16,w20,ror#11894eor w6,w6,w1,ror#18895orr w17,w17,w19 // Ch(e,f,g)896eor w19,w24,w25 // a^b, b^c in next round897eor w16,w16,w20,ror#25 // Sigma1(e)898eor w7,w7,w24,ror#13899add w23,w23,w17 // h+=Ch(e,f,g)900and w28,w28,w19 // (b^c)&=(a^b)901eor w5,w5,w14,ror#19902eor w6,w6,w1,lsr#3 // sigma0(X[i+1])903add w23,w23,w16 // h+=Sigma1(e)904eor w28,w28,w25 // Maj(a,b,c)905eor w17,w7,w24,ror#22 // Sigma0(a)906eor w5,w5,w14,lsr#10 // sigma1(X[i+14])907add w0,w0,w9908add w27,w27,w23 // d+=h909add w23,w23,w28 // h+=Maj(a,b,c)910ldr w28,[x30],#4 // *K++, w19 in next round911add w0,w0,w6912add w23,w23,w17 // h+=Sigma0(a)913add w0,w0,w5914ldr w5,[sp,#8]915str w8,[sp,#4]916ror w16,w27,#6917add w22,w22,w28 // h+=K[i]918ror w7,w2,#7919and w17,w20,w27920ror w6,w15,#17921bic w28,w21,w27922ror w8,w23,#2923add w22,w22,w0 // h+=X[i]924eor w16,w16,w27,ror#11925eor w7,w7,w2,ror#18926orr w17,w17,w28 // Ch(e,f,g)927eor w28,w23,w24 // a^b, b^c in next round928eor w16,w16,w27,ror#25 // Sigma1(e)929eor w8,w8,w23,ror#13930add w22,w22,w17 // h+=Ch(e,f,g)931and w19,w19,w28 // (b^c)&=(a^b)932eor w6,w6,w15,ror#19933eor w7,w7,w2,lsr#3 // sigma0(X[i+1])934add w22,w22,w16 // h+=Sigma1(e)935eor w19,w19,w24 // Maj(a,b,c)936eor w17,w8,w23,ror#22 // Sigma0(a)937eor w6,w6,w15,lsr#10 // sigma1(X[i+14])938add w1,w1,w10939add w26,w26,w22 // d+=h940add w22,w22,w19 // h+=Maj(a,b,c)941ldr w19,[x30],#4 // *K++, w28 in next round942add w1,w1,w7943add w22,w22,w17 // h+=Sigma0(a)944add w1,w1,w6945ldr w6,[sp,#12]946str w9,[sp,#8]947ror w16,w26,#6948add w21,w21,w19 // h+=K[i]949ror w8,w3,#7950and w17,w27,w26951ror w7,w0,#17952bic w19,w20,w26953ror w9,w22,#2954add w21,w21,w1 // h+=X[i]955eor w16,w16,w26,ror#11956eor w8,w8,w3,ror#18957orr w17,w17,w19 // Ch(e,f,g)958eor w19,w22,w23 // a^b, b^c in next round959eor w16,w16,w26,ror#25 // Sigma1(e)960eor w9,w9,w22,ror#13961add w21,w21,w17 // h+=Ch(e,f,g)962and w28,w28,w19 // (b^c)&=(a^b)963eor w7,w7,w0,ror#19964eor w8,w8,w3,lsr#3 // sigma0(X[i+1])965add w21,w21,w16 // h+=Sigma1(e)966eor w28,w28,w23 // Maj(a,b,c)967eor w17,w9,w22,ror#22 // Sigma0(a)968eor w7,w7,w0,lsr#10 // sigma1(X[i+14])969add w2,w2,w11970add w25,w25,w21 // d+=h971add w21,w21,w28 // h+=Maj(a,b,c)972ldr w28,[x30],#4 // *K++, w19 in next round973add w2,w2,w8974add w21,w21,w17 // h+=Sigma0(a)975add w2,w2,w7976ldr w7,[sp,#0]977str w10,[sp,#12]978ror w16,w25,#6979add w20,w20,w28 // h+=K[i]980ror w9,w4,#7981and w17,w26,w25982ror w8,w1,#17983bic w28,w27,w25984ror w10,w21,#2985add w20,w20,w2 // h+=X[i]986eor w16,w16,w25,ror#11987eor w9,w9,w4,ror#18988orr w17,w17,w28 // Ch(e,f,g)989eor w28,w21,w22 // a^b, b^c in next round990eor w16,w16,w25,ror#25 // Sigma1(e)991eor w10,w10,w21,ror#13992add w20,w20,w17 // h+=Ch(e,f,g)993and w19,w19,w28 // (b^c)&=(a^b)994eor w8,w8,w1,ror#19995eor w9,w9,w4,lsr#3 // sigma0(X[i+1])996add w20,w20,w16 // h+=Sigma1(e)997eor w19,w19,w22 // Maj(a,b,c)998eor w17,w10,w21,ror#22 // Sigma0(a)999eor w8,w8,w1,lsr#10 // sigma1(X[i+14])1000add w3,w3,w121001add w24,w24,w20 // d+=h1002add w20,w20,w19 // h+=Maj(a,b,c)1003ldr w19,[x30],#4 // *K++, w28 in next round1004add w3,w3,w91005add w20,w20,w17 // h+=Sigma0(a)1006add w3,w3,w81007cbnz w19,.Loop_16_xx10081009ldp x0,x2,[x29,#96]1010ldr x1,[x29,#112]1011sub x30,x30,#260 // rewind10121013ldp w3,w4,[x0]1014ldp w5,w6,[x0,#2*4]1015add x1,x1,#14*4 // advance input pointer1016ldp w7,w8,[x0,#4*4]1017add w20,w20,w31018ldp w9,w10,[x0,#6*4]1019add w21,w21,w41020add w22,w22,w51021add w23,w23,w61022stp w20,w21,[x0]1023add w24,w24,w71024add w25,w25,w81025stp w22,w23,[x0,#2*4]1026add w26,w26,w91027add w27,w27,w101028cmp x1,x21029stp w24,w25,[x0,#4*4]1030stp w26,w27,[x0,#6*4]1031b.ne .Loop10321033ldp x19,x20,[x29,#16]1034add sp,sp,#4*41035ldp x21,x22,[x29,#32]1036ldp x23,x24,[x29,#48]1037ldp x25,x26,[x29,#64]1038ldp x27,x28,[x29,#80]1039ldp x29,x30,[sp],#1281040AARCH64_VALIDATE_LINK_REGISTER1041ret1042.size sha256_block_data_order,.-sha256_block_data_order10431044.section .rodata10451046.align 61047.type .LK256,%object1048.LK256:1049.long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba51050.long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed51051.long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc31052.long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf1741053.long 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc1054.long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da1055.long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc71056.long 0xc6e00bf3,0xd5a79147,0x06ca6351,0x142929671057.long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d131058.long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c851059.long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a31060.long 0xd192e819,0xd6990624,0xf40e3585,0x106aa0701061.long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb51062.long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff31063.long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc702081064.long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f21065.long 0 //terminator1066.size .LK256,.-.LK2561067.byte 83,72,65,50,53,54,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,01068.align 21069.align 210701071.text1072#ifndef __KERNEL__1073.type sha256_block_armv8,%function1074.align 61075sha256_block_armv8:1076.Lv8_entry:1077// Armv8.3-A PAuth: even though x30 is pushed to stack it is not popped later.1078stp x29,x30,[sp,#-16]!1079add x29,sp,#010801081ld1 {v0.4s,v1.4s},[x0]1082adrp x3,.LK2561083add x3,x3,#:lo12:.LK25610841085.Loop_hw:1086ld1 {v4.16b,v5.16b,v6.16b,v7.16b},[x1],#641087sub x2,x2,#11088ld1 {v16.4s},[x3],#161089rev32 v4.16b,v4.16b1090rev32 v5.16b,v5.16b1091rev32 v6.16b,v6.16b1092rev32 v7.16b,v7.16b1093orr v18.16b,v0.16b,v0.16b // offload1094orr v19.16b,v1.16b,v1.16b1095ld1 {v17.4s},[x3],#161096add v16.4s,v16.4s,v4.4s1097.inst 0x5e2828a4 //sha256su0 v4.16b,v5.16b1098orr v2.16b,v0.16b,v0.16b1099.inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s1100.inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s1101.inst 0x5e0760c4 //sha256su1 v4.16b,v6.16b,v7.16b1102ld1 {v16.4s},[x3],#161103add v17.4s,v17.4s,v5.4s1104.inst 0x5e2828c5 //sha256su0 v5.16b,v6.16b1105orr v2.16b,v0.16b,v0.16b1106.inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s1107.inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s1108.inst 0x5e0460e5 //sha256su1 v5.16b,v7.16b,v4.16b1109ld1 {v17.4s},[x3],#161110add v16.4s,v16.4s,v6.4s1111.inst 0x5e2828e6 //sha256su0 v6.16b,v7.16b1112orr v2.16b,v0.16b,v0.16b1113.inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s1114.inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s1115.inst 0x5e056086 //sha256su1 v6.16b,v4.16b,v5.16b1116ld1 {v16.4s},[x3],#161117add v17.4s,v17.4s,v7.4s1118.inst 0x5e282887 //sha256su0 v7.16b,v4.16b1119orr v2.16b,v0.16b,v0.16b1120.inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s1121.inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s1122.inst 0x5e0660a7 //sha256su1 v7.16b,v5.16b,v6.16b1123ld1 {v17.4s},[x3],#161124add v16.4s,v16.4s,v4.4s1125.inst 0x5e2828a4 //sha256su0 v4.16b,v5.16b1126orr v2.16b,v0.16b,v0.16b1127.inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s1128.inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s1129.inst 0x5e0760c4 //sha256su1 v4.16b,v6.16b,v7.16b1130ld1 {v16.4s},[x3],#161131add v17.4s,v17.4s,v5.4s1132.inst 0x5e2828c5 //sha256su0 v5.16b,v6.16b1133orr v2.16b,v0.16b,v0.16b1134.inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s1135.inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s1136.inst 0x5e0460e5 //sha256su1 v5.16b,v7.16b,v4.16b1137ld1 {v17.4s},[x3],#161138add v16.4s,v16.4s,v6.4s1139.inst 0x5e2828e6 //sha256su0 v6.16b,v7.16b1140orr v2.16b,v0.16b,v0.16b1141.inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s1142.inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s1143.inst 0x5e056086 //sha256su1 v6.16b,v4.16b,v5.16b1144ld1 {v16.4s},[x3],#161145add v17.4s,v17.4s,v7.4s1146.inst 0x5e282887 //sha256su0 v7.16b,v4.16b1147orr v2.16b,v0.16b,v0.16b1148.inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s1149.inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s1150.inst 0x5e0660a7 //sha256su1 v7.16b,v5.16b,v6.16b1151ld1 {v17.4s},[x3],#161152add v16.4s,v16.4s,v4.4s1153.inst 0x5e2828a4 //sha256su0 v4.16b,v5.16b1154orr v2.16b,v0.16b,v0.16b1155.inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s1156.inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s1157.inst 0x5e0760c4 //sha256su1 v4.16b,v6.16b,v7.16b1158ld1 {v16.4s},[x3],#161159add v17.4s,v17.4s,v5.4s1160.inst 0x5e2828c5 //sha256su0 v5.16b,v6.16b1161orr v2.16b,v0.16b,v0.16b1162.inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s1163.inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s1164.inst 0x5e0460e5 //sha256su1 v5.16b,v7.16b,v4.16b1165ld1 {v17.4s},[x3],#161166add v16.4s,v16.4s,v6.4s1167.inst 0x5e2828e6 //sha256su0 v6.16b,v7.16b1168orr v2.16b,v0.16b,v0.16b1169.inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s1170.inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s1171.inst 0x5e056086 //sha256su1 v6.16b,v4.16b,v5.16b1172ld1 {v16.4s},[x3],#161173add v17.4s,v17.4s,v7.4s1174.inst 0x5e282887 //sha256su0 v7.16b,v4.16b1175orr v2.16b,v0.16b,v0.16b1176.inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s1177.inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s1178.inst 0x5e0660a7 //sha256su1 v7.16b,v5.16b,v6.16b1179ld1 {v17.4s},[x3],#161180add v16.4s,v16.4s,v4.4s1181orr v2.16b,v0.16b,v0.16b1182.inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s1183.inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s11841185ld1 {v16.4s},[x3],#161186add v17.4s,v17.4s,v5.4s1187orr v2.16b,v0.16b,v0.16b1188.inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s1189.inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s11901191ld1 {v17.4s},[x3]1192add v16.4s,v16.4s,v6.4s1193sub x3,x3,#64*4-16 // rewind1194orr v2.16b,v0.16b,v0.16b1195.inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s1196.inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s11971198add v17.4s,v17.4s,v7.4s1199orr v2.16b,v0.16b,v0.16b1200.inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s1201.inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s12021203add v0.4s,v0.4s,v18.4s1204add v1.4s,v1.4s,v19.4s12051206cbnz x2,.Loop_hw12071208st1 {v0.4s,v1.4s},[x0]12091210ldr x29,[sp],#161211ret1212.size sha256_block_armv8,.-sha256_block_armv81213#endif1214#ifdef __KERNEL__1215.globl sha256_block_neon1216#endif1217.type sha256_block_neon,%function1218.align 41219sha256_block_neon:1220AARCH64_VALID_CALL_TARGET1221.Lneon_entry:1222// Armv8.3-A PAuth: even though x30 is pushed to stack it is not popped later1223stp x29, x30, [sp, #-16]!1224mov x29, sp1225sub sp,sp,#16*412261227adrp x16,.LK2561228add x16,x16,#:lo12:.LK2561229add x2,x1,x2,lsl#6 // len to point at the end of inp12301231ld1 {v0.16b},[x1], #161232ld1 {v1.16b},[x1], #161233ld1 {v2.16b},[x1], #161234ld1 {v3.16b},[x1], #161235ld1 {v4.4s},[x16], #161236ld1 {v5.4s},[x16], #161237ld1 {v6.4s},[x16], #161238ld1 {v7.4s},[x16], #161239rev32 v0.16b,v0.16b // yes, even on1240rev32 v1.16b,v1.16b // big-endian1241rev32 v2.16b,v2.16b1242rev32 v3.16b,v3.16b1243mov x17,sp1244add v4.4s,v4.4s,v0.4s1245add v5.4s,v5.4s,v1.4s1246add v6.4s,v6.4s,v2.4s1247st1 {v4.4s,v5.4s},[x17], #321248add v7.4s,v7.4s,v3.4s1249st1 {v6.4s,v7.4s},[x17]1250sub x17,x17,#3212511252ldp w3,w4,[x0]1253ldp w5,w6,[x0,#8]1254ldp w7,w8,[x0,#16]1255ldp w9,w10,[x0,#24]1256ldr w12,[sp,#0]1257mov w13,wzr1258eor w14,w4,w51259mov w15,wzr1260b .L_00_4812611262.align 41263.L_00_48:1264ext v4.16b,v0.16b,v1.16b,#41265add w10,w10,w121266add w3,w3,w151267and w12,w8,w71268bic w15,w9,w71269ext v7.16b,v2.16b,v3.16b,#41270eor w11,w7,w7,ror#51271add w3,w3,w131272mov d19,v3.d[1]1273orr w12,w12,w151274eor w11,w11,w7,ror#191275ushr v6.4s,v4.4s,#71276eor w15,w3,w3,ror#111277ushr v5.4s,v4.4s,#31278add w10,w10,w121279add v0.4s,v0.4s,v7.4s1280ror w11,w11,#61281sli v6.4s,v4.4s,#251282eor w13,w3,w41283eor w15,w15,w3,ror#201284ushr v7.4s,v4.4s,#181285add w10,w10,w111286ldr w12,[sp,#4]1287and w14,w14,w131288eor v5.16b,v5.16b,v6.16b1289ror w15,w15,#21290add w6,w6,w101291sli v7.4s,v4.4s,#141292eor w14,w14,w41293ushr v16.4s,v19.4s,#171294add w9,w9,w121295add w10,w10,w151296and w12,w7,w61297eor v5.16b,v5.16b,v7.16b1298bic w15,w8,w61299eor w11,w6,w6,ror#51300sli v16.4s,v19.4s,#151301add w10,w10,w141302orr w12,w12,w151303ushr v17.4s,v19.4s,#101304eor w11,w11,w6,ror#191305eor w15,w10,w10,ror#111306ushr v7.4s,v19.4s,#191307add w9,w9,w121308ror w11,w11,#61309add v0.4s,v0.4s,v5.4s1310eor w14,w10,w31311eor w15,w15,w10,ror#201312sli v7.4s,v19.4s,#131313add w9,w9,w111314ldr w12,[sp,#8]1315and w13,w13,w141316eor v17.16b,v17.16b,v16.16b1317ror w15,w15,#21318add w5,w5,w91319eor w13,w13,w31320eor v17.16b,v17.16b,v7.16b1321add w8,w8,w121322add w9,w9,w151323and w12,w6,w51324add v0.4s,v0.4s,v17.4s1325bic w15,w7,w51326eor w11,w5,w5,ror#51327add w9,w9,w131328ushr v18.4s,v0.4s,#171329orr w12,w12,w151330ushr v19.4s,v0.4s,#101331eor w11,w11,w5,ror#191332eor w15,w9,w9,ror#111333sli v18.4s,v0.4s,#151334add w8,w8,w121335ushr v17.4s,v0.4s,#191336ror w11,w11,#61337eor w13,w9,w101338eor v19.16b,v19.16b,v18.16b1339eor w15,w15,w9,ror#201340add w8,w8,w111341sli v17.4s,v0.4s,#131342ldr w12,[sp,#12]1343and w14,w14,w131344ror w15,w15,#21345ld1 {v4.4s},[x16], #161346add w4,w4,w81347eor v19.16b,v19.16b,v17.16b1348eor w14,w14,w101349eor v17.16b,v17.16b,v17.16b1350add w7,w7,w121351add w8,w8,w151352and w12,w5,w41353mov v17.d[1],v19.d[0]1354bic w15,w6,w41355eor w11,w4,w4,ror#51356add w8,w8,w141357add v0.4s,v0.4s,v17.4s1358orr w12,w12,w151359eor w11,w11,w4,ror#191360eor w15,w8,w8,ror#111361add v4.4s,v4.4s,v0.4s1362add w7,w7,w121363ror w11,w11,#61364eor w14,w8,w91365eor w15,w15,w8,ror#201366add w7,w7,w111367ldr w12,[sp,#16]1368and w13,w13,w141369ror w15,w15,#21370add w3,w3,w71371eor w13,w13,w91372st1 {v4.4s},[x17], #161373ext v4.16b,v1.16b,v2.16b,#41374add w6,w6,w121375add w7,w7,w151376and w12,w4,w31377bic w15,w5,w31378ext v7.16b,v3.16b,v0.16b,#41379eor w11,w3,w3,ror#51380add w7,w7,w131381mov d19,v0.d[1]1382orr w12,w12,w151383eor w11,w11,w3,ror#191384ushr v6.4s,v4.4s,#71385eor w15,w7,w7,ror#111386ushr v5.4s,v4.4s,#31387add w6,w6,w121388add v1.4s,v1.4s,v7.4s1389ror w11,w11,#61390sli v6.4s,v4.4s,#251391eor w13,w7,w81392eor w15,w15,w7,ror#201393ushr v7.4s,v4.4s,#181394add w6,w6,w111395ldr w12,[sp,#20]1396and w14,w14,w131397eor v5.16b,v5.16b,v6.16b1398ror w15,w15,#21399add w10,w10,w61400sli v7.4s,v4.4s,#141401eor w14,w14,w81402ushr v16.4s,v19.4s,#171403add w5,w5,w121404add w6,w6,w151405and w12,w3,w101406eor v5.16b,v5.16b,v7.16b1407bic w15,w4,w101408eor w11,w10,w10,ror#51409sli v16.4s,v19.4s,#151410add w6,w6,w141411orr w12,w12,w151412ushr v17.4s,v19.4s,#101413eor w11,w11,w10,ror#191414eor w15,w6,w6,ror#111415ushr v7.4s,v19.4s,#191416add w5,w5,w121417ror w11,w11,#61418add v1.4s,v1.4s,v5.4s1419eor w14,w6,w71420eor w15,w15,w6,ror#201421sli v7.4s,v19.4s,#131422add w5,w5,w111423ldr w12,[sp,#24]1424and w13,w13,w141425eor v17.16b,v17.16b,v16.16b1426ror w15,w15,#21427add w9,w9,w51428eor w13,w13,w71429eor v17.16b,v17.16b,v7.16b1430add w4,w4,w121431add w5,w5,w151432and w12,w10,w91433add v1.4s,v1.4s,v17.4s1434bic w15,w3,w91435eor w11,w9,w9,ror#51436add w5,w5,w131437ushr v18.4s,v1.4s,#171438orr w12,w12,w151439ushr v19.4s,v1.4s,#101440eor w11,w11,w9,ror#191441eor w15,w5,w5,ror#111442sli v18.4s,v1.4s,#151443add w4,w4,w121444ushr v17.4s,v1.4s,#191445ror w11,w11,#61446eor w13,w5,w61447eor v19.16b,v19.16b,v18.16b1448eor w15,w15,w5,ror#201449add w4,w4,w111450sli v17.4s,v1.4s,#131451ldr w12,[sp,#28]1452and w14,w14,w131453ror w15,w15,#21454ld1 {v4.4s},[x16], #161455add w8,w8,w41456eor v19.16b,v19.16b,v17.16b1457eor w14,w14,w61458eor v17.16b,v17.16b,v17.16b1459add w3,w3,w121460add w4,w4,w151461and w12,w9,w81462mov v17.d[1],v19.d[0]1463bic w15,w10,w81464eor w11,w8,w8,ror#51465add w4,w4,w141466add v1.4s,v1.4s,v17.4s1467orr w12,w12,w151468eor w11,w11,w8,ror#191469eor w15,w4,w4,ror#111470add v4.4s,v4.4s,v1.4s1471add w3,w3,w121472ror w11,w11,#61473eor w14,w4,w51474eor w15,w15,w4,ror#201475add w3,w3,w111476ldr w12,[sp,#32]1477and w13,w13,w141478ror w15,w15,#21479add w7,w7,w31480eor w13,w13,w51481st1 {v4.4s},[x17], #161482ext v4.16b,v2.16b,v3.16b,#41483add w10,w10,w121484add w3,w3,w151485and w12,w8,w71486bic w15,w9,w71487ext v7.16b,v0.16b,v1.16b,#41488eor w11,w7,w7,ror#51489add w3,w3,w131490mov d19,v1.d[1]1491orr w12,w12,w151492eor w11,w11,w7,ror#191493ushr v6.4s,v4.4s,#71494eor w15,w3,w3,ror#111495ushr v5.4s,v4.4s,#31496add w10,w10,w121497add v2.4s,v2.4s,v7.4s1498ror w11,w11,#61499sli v6.4s,v4.4s,#251500eor w13,w3,w41501eor w15,w15,w3,ror#201502ushr v7.4s,v4.4s,#181503add w10,w10,w111504ldr w12,[sp,#36]1505and w14,w14,w131506eor v5.16b,v5.16b,v6.16b1507ror w15,w15,#21508add w6,w6,w101509sli v7.4s,v4.4s,#141510eor w14,w14,w41511ushr v16.4s,v19.4s,#171512add w9,w9,w121513add w10,w10,w151514and w12,w7,w61515eor v5.16b,v5.16b,v7.16b1516bic w15,w8,w61517eor w11,w6,w6,ror#51518sli v16.4s,v19.4s,#151519add w10,w10,w141520orr w12,w12,w151521ushr v17.4s,v19.4s,#101522eor w11,w11,w6,ror#191523eor w15,w10,w10,ror#111524ushr v7.4s,v19.4s,#191525add w9,w9,w121526ror w11,w11,#61527add v2.4s,v2.4s,v5.4s1528eor w14,w10,w31529eor w15,w15,w10,ror#201530sli v7.4s,v19.4s,#131531add w9,w9,w111532ldr w12,[sp,#40]1533and w13,w13,w141534eor v17.16b,v17.16b,v16.16b1535ror w15,w15,#21536add w5,w5,w91537eor w13,w13,w31538eor v17.16b,v17.16b,v7.16b1539add w8,w8,w121540add w9,w9,w151541and w12,w6,w51542add v2.4s,v2.4s,v17.4s1543bic w15,w7,w51544eor w11,w5,w5,ror#51545add w9,w9,w131546ushr v18.4s,v2.4s,#171547orr w12,w12,w151548ushr v19.4s,v2.4s,#101549eor w11,w11,w5,ror#191550eor w15,w9,w9,ror#111551sli v18.4s,v2.4s,#151552add w8,w8,w121553ushr v17.4s,v2.4s,#191554ror w11,w11,#61555eor w13,w9,w101556eor v19.16b,v19.16b,v18.16b1557eor w15,w15,w9,ror#201558add w8,w8,w111559sli v17.4s,v2.4s,#131560ldr w12,[sp,#44]1561and w14,w14,w131562ror w15,w15,#21563ld1 {v4.4s},[x16], #161564add w4,w4,w81565eor v19.16b,v19.16b,v17.16b1566eor w14,w14,w101567eor v17.16b,v17.16b,v17.16b1568add w7,w7,w121569add w8,w8,w151570and w12,w5,w41571mov v17.d[1],v19.d[0]1572bic w15,w6,w41573eor w11,w4,w4,ror#51574add w8,w8,w141575add v2.4s,v2.4s,v17.4s1576orr w12,w12,w151577eor w11,w11,w4,ror#191578eor w15,w8,w8,ror#111579add v4.4s,v4.4s,v2.4s1580add w7,w7,w121581ror w11,w11,#61582eor w14,w8,w91583eor w15,w15,w8,ror#201584add w7,w7,w111585ldr w12,[sp,#48]1586and w13,w13,w141587ror w15,w15,#21588add w3,w3,w71589eor w13,w13,w91590st1 {v4.4s},[x17], #161591ext v4.16b,v3.16b,v0.16b,#41592add w6,w6,w121593add w7,w7,w151594and w12,w4,w31595bic w15,w5,w31596ext v7.16b,v1.16b,v2.16b,#41597eor w11,w3,w3,ror#51598add w7,w7,w131599mov d19,v2.d[1]1600orr w12,w12,w151601eor w11,w11,w3,ror#191602ushr v6.4s,v4.4s,#71603eor w15,w7,w7,ror#111604ushr v5.4s,v4.4s,#31605add w6,w6,w121606add v3.4s,v3.4s,v7.4s1607ror w11,w11,#61608sli v6.4s,v4.4s,#251609eor w13,w7,w81610eor w15,w15,w7,ror#201611ushr v7.4s,v4.4s,#181612add w6,w6,w111613ldr w12,[sp,#52]1614and w14,w14,w131615eor v5.16b,v5.16b,v6.16b1616ror w15,w15,#21617add w10,w10,w61618sli v7.4s,v4.4s,#141619eor w14,w14,w81620ushr v16.4s,v19.4s,#171621add w5,w5,w121622add w6,w6,w151623and w12,w3,w101624eor v5.16b,v5.16b,v7.16b1625bic w15,w4,w101626eor w11,w10,w10,ror#51627sli v16.4s,v19.4s,#151628add w6,w6,w141629orr w12,w12,w151630ushr v17.4s,v19.4s,#101631eor w11,w11,w10,ror#191632eor w15,w6,w6,ror#111633ushr v7.4s,v19.4s,#191634add w5,w5,w121635ror w11,w11,#61636add v3.4s,v3.4s,v5.4s1637eor w14,w6,w71638eor w15,w15,w6,ror#201639sli v7.4s,v19.4s,#131640add w5,w5,w111641ldr w12,[sp,#56]1642and w13,w13,w141643eor v17.16b,v17.16b,v16.16b1644ror w15,w15,#21645add w9,w9,w51646eor w13,w13,w71647eor v17.16b,v17.16b,v7.16b1648add w4,w4,w121649add w5,w5,w151650and w12,w10,w91651add v3.4s,v3.4s,v17.4s1652bic w15,w3,w91653eor w11,w9,w9,ror#51654add w5,w5,w131655ushr v18.4s,v3.4s,#171656orr w12,w12,w151657ushr v19.4s,v3.4s,#101658eor w11,w11,w9,ror#191659eor w15,w5,w5,ror#111660sli v18.4s,v3.4s,#151661add w4,w4,w121662ushr v17.4s,v3.4s,#191663ror w11,w11,#61664eor w13,w5,w61665eor v19.16b,v19.16b,v18.16b1666eor w15,w15,w5,ror#201667add w4,w4,w111668sli v17.4s,v3.4s,#131669ldr w12,[sp,#60]1670and w14,w14,w131671ror w15,w15,#21672ld1 {v4.4s},[x16], #161673add w8,w8,w41674eor v19.16b,v19.16b,v17.16b1675eor w14,w14,w61676eor v17.16b,v17.16b,v17.16b1677add w3,w3,w121678add w4,w4,w151679and w12,w9,w81680mov v17.d[1],v19.d[0]1681bic w15,w10,w81682eor w11,w8,w8,ror#51683add w4,w4,w141684add v3.4s,v3.4s,v17.4s1685orr w12,w12,w151686eor w11,w11,w8,ror#191687eor w15,w4,w4,ror#111688add v4.4s,v4.4s,v3.4s1689add w3,w3,w121690ror w11,w11,#61691eor w14,w4,w51692eor w15,w15,w4,ror#201693add w3,w3,w111694ldr w12,[x16]1695and w13,w13,w141696ror w15,w15,#21697add w7,w7,w31698eor w13,w13,w51699st1 {v4.4s},[x17], #161700cmp w12,#0 // check for K256 terminator1701ldr w12,[sp,#0]1702sub x17,x17,#641703bne .L_00_4817041705sub x16,x16,#256 // rewind x161706cmp x1,x21707mov x17, #641708csel x17, x17, xzr, eq1709sub x1,x1,x17 // avoid SEGV1710mov x17,sp1711add w10,w10,w121712add w3,w3,w151713and w12,w8,w71714ld1 {v0.16b},[x1],#161715bic w15,w9,w71716eor w11,w7,w7,ror#51717ld1 {v4.4s},[x16],#161718add w3,w3,w131719orr w12,w12,w151720eor w11,w11,w7,ror#191721eor w15,w3,w3,ror#111722rev32 v0.16b,v0.16b1723add w10,w10,w121724ror w11,w11,#61725eor w13,w3,w41726eor w15,w15,w3,ror#201727add v4.4s,v4.4s,v0.4s1728add w10,w10,w111729ldr w12,[sp,#4]1730and w14,w14,w131731ror w15,w15,#21732add w6,w6,w101733eor w14,w14,w41734add w9,w9,w121735add w10,w10,w151736and w12,w7,w61737bic w15,w8,w61738eor w11,w6,w6,ror#51739add w10,w10,w141740orr w12,w12,w151741eor w11,w11,w6,ror#191742eor w15,w10,w10,ror#111743add w9,w9,w121744ror w11,w11,#61745eor w14,w10,w31746eor w15,w15,w10,ror#201747add w9,w9,w111748ldr w12,[sp,#8]1749and w13,w13,w141750ror w15,w15,#21751add w5,w5,w91752eor w13,w13,w31753add w8,w8,w121754add w9,w9,w151755and w12,w6,w51756bic w15,w7,w51757eor w11,w5,w5,ror#51758add w9,w9,w131759orr w12,w12,w151760eor w11,w11,w5,ror#191761eor w15,w9,w9,ror#111762add w8,w8,w121763ror w11,w11,#61764eor w13,w9,w101765eor w15,w15,w9,ror#201766add w8,w8,w111767ldr w12,[sp,#12]1768and w14,w14,w131769ror w15,w15,#21770add w4,w4,w81771eor w14,w14,w101772add w7,w7,w121773add w8,w8,w151774and w12,w5,w41775bic w15,w6,w41776eor w11,w4,w4,ror#51777add w8,w8,w141778orr w12,w12,w151779eor w11,w11,w4,ror#191780eor w15,w8,w8,ror#111781add w7,w7,w121782ror w11,w11,#61783eor w14,w8,w91784eor w15,w15,w8,ror#201785add w7,w7,w111786ldr w12,[sp,#16]1787and w13,w13,w141788ror w15,w15,#21789add w3,w3,w71790eor w13,w13,w91791st1 {v4.4s},[x17], #161792add w6,w6,w121793add w7,w7,w151794and w12,w4,w31795ld1 {v1.16b},[x1],#161796bic w15,w5,w31797eor w11,w3,w3,ror#51798ld1 {v4.4s},[x16],#161799add w7,w7,w131800orr w12,w12,w151801eor w11,w11,w3,ror#191802eor w15,w7,w7,ror#111803rev32 v1.16b,v1.16b1804add w6,w6,w121805ror w11,w11,#61806eor w13,w7,w81807eor w15,w15,w7,ror#201808add v4.4s,v4.4s,v1.4s1809add w6,w6,w111810ldr w12,[sp,#20]1811and w14,w14,w131812ror w15,w15,#21813add w10,w10,w61814eor w14,w14,w81815add w5,w5,w121816add w6,w6,w151817and w12,w3,w101818bic w15,w4,w101819eor w11,w10,w10,ror#51820add w6,w6,w141821orr w12,w12,w151822eor w11,w11,w10,ror#191823eor w15,w6,w6,ror#111824add w5,w5,w121825ror w11,w11,#61826eor w14,w6,w71827eor w15,w15,w6,ror#201828add w5,w5,w111829ldr w12,[sp,#24]1830and w13,w13,w141831ror w15,w15,#21832add w9,w9,w51833eor w13,w13,w71834add w4,w4,w121835add w5,w5,w151836and w12,w10,w91837bic w15,w3,w91838eor w11,w9,w9,ror#51839add w5,w5,w131840orr w12,w12,w151841eor w11,w11,w9,ror#191842eor w15,w5,w5,ror#111843add w4,w4,w121844ror w11,w11,#61845eor w13,w5,w61846eor w15,w15,w5,ror#201847add w4,w4,w111848ldr w12,[sp,#28]1849and w14,w14,w131850ror w15,w15,#21851add w8,w8,w41852eor w14,w14,w61853add w3,w3,w121854add w4,w4,w151855and w12,w9,w81856bic w15,w10,w81857eor w11,w8,w8,ror#51858add w4,w4,w141859orr w12,w12,w151860eor w11,w11,w8,ror#191861eor w15,w4,w4,ror#111862add w3,w3,w121863ror w11,w11,#61864eor w14,w4,w51865eor w15,w15,w4,ror#201866add w3,w3,w111867ldr w12,[sp,#32]1868and w13,w13,w141869ror w15,w15,#21870add w7,w7,w31871eor w13,w13,w51872st1 {v4.4s},[x17], #161873add w10,w10,w121874add w3,w3,w151875and w12,w8,w71876ld1 {v2.16b},[x1],#161877bic w15,w9,w71878eor w11,w7,w7,ror#51879ld1 {v4.4s},[x16],#161880add w3,w3,w131881orr w12,w12,w151882eor w11,w11,w7,ror#191883eor w15,w3,w3,ror#111884rev32 v2.16b,v2.16b1885add w10,w10,w121886ror w11,w11,#61887eor w13,w3,w41888eor w15,w15,w3,ror#201889add v4.4s,v4.4s,v2.4s1890add w10,w10,w111891ldr w12,[sp,#36]1892and w14,w14,w131893ror w15,w15,#21894add w6,w6,w101895eor w14,w14,w41896add w9,w9,w121897add w10,w10,w151898and w12,w7,w61899bic w15,w8,w61900eor w11,w6,w6,ror#51901add w10,w10,w141902orr w12,w12,w151903eor w11,w11,w6,ror#191904eor w15,w10,w10,ror#111905add w9,w9,w121906ror w11,w11,#61907eor w14,w10,w31908eor w15,w15,w10,ror#201909add w9,w9,w111910ldr w12,[sp,#40]1911and w13,w13,w141912ror w15,w15,#21913add w5,w5,w91914eor w13,w13,w31915add w8,w8,w121916add w9,w9,w151917and w12,w6,w51918bic w15,w7,w51919eor w11,w5,w5,ror#51920add w9,w9,w131921orr w12,w12,w151922eor w11,w11,w5,ror#191923eor w15,w9,w9,ror#111924add w8,w8,w121925ror w11,w11,#61926eor w13,w9,w101927eor w15,w15,w9,ror#201928add w8,w8,w111929ldr w12,[sp,#44]1930and w14,w14,w131931ror w15,w15,#21932add w4,w4,w81933eor w14,w14,w101934add w7,w7,w121935add w8,w8,w151936and w12,w5,w41937bic w15,w6,w41938eor w11,w4,w4,ror#51939add w8,w8,w141940orr w12,w12,w151941eor w11,w11,w4,ror#191942eor w15,w8,w8,ror#111943add w7,w7,w121944ror w11,w11,#61945eor w14,w8,w91946eor w15,w15,w8,ror#201947add w7,w7,w111948ldr w12,[sp,#48]1949and w13,w13,w141950ror w15,w15,#21951add w3,w3,w71952eor w13,w13,w91953st1 {v4.4s},[x17], #161954add w6,w6,w121955add w7,w7,w151956and w12,w4,w31957ld1 {v3.16b},[x1],#161958bic w15,w5,w31959eor w11,w3,w3,ror#51960ld1 {v4.4s},[x16],#161961add w7,w7,w131962orr w12,w12,w151963eor w11,w11,w3,ror#191964eor w15,w7,w7,ror#111965rev32 v3.16b,v3.16b1966add w6,w6,w121967ror w11,w11,#61968eor w13,w7,w81969eor w15,w15,w7,ror#201970add v4.4s,v4.4s,v3.4s1971add w6,w6,w111972ldr w12,[sp,#52]1973and w14,w14,w131974ror w15,w15,#21975add w10,w10,w61976eor w14,w14,w81977add w5,w5,w121978add w6,w6,w151979and w12,w3,w101980bic w15,w4,w101981eor w11,w10,w10,ror#51982add w6,w6,w141983orr w12,w12,w151984eor w11,w11,w10,ror#191985eor w15,w6,w6,ror#111986add w5,w5,w121987ror w11,w11,#61988eor w14,w6,w71989eor w15,w15,w6,ror#201990add w5,w5,w111991ldr w12,[sp,#56]1992and w13,w13,w141993ror w15,w15,#21994add w9,w9,w51995eor w13,w13,w71996add w4,w4,w121997add w5,w5,w151998and w12,w10,w91999bic w15,w3,w92000eor w11,w9,w9,ror#52001add w5,w5,w132002orr w12,w12,w152003eor w11,w11,w9,ror#192004eor w15,w5,w5,ror#112005add w4,w4,w122006ror w11,w11,#62007eor w13,w5,w62008eor w15,w15,w5,ror#202009add w4,w4,w112010ldr w12,[sp,#60]2011and w14,w14,w132012ror w15,w15,#22013add w8,w8,w42014eor w14,w14,w62015add w3,w3,w122016add w4,w4,w152017and w12,w9,w82018bic w15,w10,w82019eor w11,w8,w8,ror#52020add w4,w4,w142021orr w12,w12,w152022eor w11,w11,w8,ror#192023eor w15,w4,w4,ror#112024add w3,w3,w122025ror w11,w11,#62026eor w14,w4,w52027eor w15,w15,w4,ror#202028add w3,w3,w112029and w13,w13,w142030ror w15,w15,#22031add w7,w7,w32032eor w13,w13,w52033st1 {v4.4s},[x17], #162034add w3,w3,w15 // h+=Sigma0(a) from the past2035ldp w11,w12,[x0,#0]2036add w3,w3,w13 // h+=Maj(a,b,c) from the past2037ldp w13,w14,[x0,#8]2038add w3,w3,w11 // accumulate2039add w4,w4,w122040ldp w11,w12,[x0,#16]2041add w5,w5,w132042add w6,w6,w142043ldp w13,w14,[x0,#24]2044add w7,w7,w112045add w8,w8,w122046ldr w12,[sp,#0]2047stp w3,w4,[x0,#0]2048add w9,w9,w132049mov w13,wzr2050stp w5,w6,[x0,#8]2051add w10,w10,w142052stp w7,w8,[x0,#16]2053eor w14,w4,w52054stp w9,w10,[x0,#24]2055mov w15,wzr2056mov x17,sp2057b.ne .L_00_4820582059ldr x29,[x29]2060add sp,sp,#16*4+162061ret2062.size sha256_block_neon,.-sha256_block_neon206320642065