Path: blob/main/sys/crypto/openssl/arm/sha256-armv4.S
39483 views
/* Do not modify. This file is auto-generated from sha256-armv4.pl. */1@ Copyright 2007-2023 The OpenSSL Project Authors. All Rights Reserved.2@3@ Licensed under the Apache License 2.0 (the "License"). You may not use4@ this file except in compliance with the License. You can obtain a copy5@ in the file LICENSE in the source distribution or at6@ https://www.openssl.org/source/license.html789@ ====================================================================10@ Written by Andy Polyakov <appro@openssl.org> for the OpenSSL11@ project. The module is, however, dual licensed under OpenSSL and12@ CRYPTOGAMS licenses depending on where you obtain it. For further13@ details see http://www.openssl.org/~appro/cryptogams/.14@15@ Permission to use under GPL terms is granted.16@ ====================================================================1718@ SHA256 block procedure for ARMv4. May 2007.1920@ Performance is ~2x better than gcc 3.4 generated code and in "abso-21@ lute" terms is ~2250 cycles per 64-byte block or ~35 cycles per22@ byte [on single-issue Xscale PXA250 core].2324@ July 2010.25@26@ Rescheduling for dual-issue pipeline resulted in 22% improvement on27@ Cortex A8 core and ~20 cycles per processed byte.2829@ February 2011.30@31@ Profiler-assisted and platform-specific optimization resulted in 16%32@ improvement on Cortex A8 core and ~15.4 cycles per processed byte.3334@ September 2013.35@36@ Add NEON implementation. On Cortex A8 it was measured to process one37@ byte in 12.5 cycles or 23% faster than integer-only code. Snapdragon38@ S4 does it in 12.5 cycles too, but it's 50% faster than integer-only39@ code (meaning that latter performs sub-optimally, nothing was done40@ about it).4142@ May 2014.43@44@ Add ARMv8 code path performing at 2.0 cpb on Apple A7.4546@ $output is the last argument if it looks like a file (it has an extension)47@ $flavour is the first argument if it doesn't look like a file48#ifndef __KERNEL__49# include "arm_arch.h"50#else51# define __ARM_ARCH__ __LINUX_ARM_ARCH__52# define __ARM_MAX_ARCH__ 753#endif5455#if defined(__thumb2__)56.syntax unified57.thumb58#else59.code 3260#endif6162.text6364.type K256,%object65.align 566K256:67.word 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba568.word 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed569.word 0xd807aa98,0x12835b01,0x243185be,0x550c7dc370.word 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf17471.word 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc72.word 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da73.word 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc774.word 0xc6e00bf3,0xd5a79147,0x06ca6351,0x1429296775.word 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d1376.word 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c8577.word 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a378.word 0xd192e819,0xd6990624,0xf40e3585,0x106aa07079.word 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb580.word 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff381.word 0x748f82ee,0x78a5636f,0x84c87814,0x8cc7020882.word 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f283.size K256,.-K25684.word 0 @ terminator85#if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__)86.LOPENSSL_armcap:87# ifdef _WIN3288.word OPENSSL_armcap_P89# else90.word OPENSSL_armcap_P-.Lsha256_block_data_order91# endif92#endif93.align 59495.globl sha256_block_data_order96.type sha256_block_data_order,%function97sha256_block_data_order:98.Lsha256_block_data_order:99#if __ARM_ARCH__<7 && !defined(__thumb2__)100sub r3,pc,#8 @ sha256_block_data_order101#else102adr r3,.Lsha256_block_data_order103#endif104#if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__)105ldr r12,.LOPENSSL_armcap106# if !defined(_WIN32)107ldr r12,[r3,r12] @ OPENSSL_armcap_P108# endif109# if defined(__APPLE__) || defined(_WIN32)110ldr r12,[r12]111# endif112tst r12,#ARMV8_SHA256113bne .LARMv8114tst r12,#ARMV7_NEON115bne .LNEON116#endif117add r2,r1,r2,lsl#6 @ len to point at the end of inp118stmdb sp!,{r0,r1,r2,r4-r11,lr}119ldmia r0,{r4,r5,r6,r7,r8,r9,r10,r11}120sub r14,r3,#256+32 @ K256121sub sp,sp,#16*4 @ alloca(X[16])122.Loop:123# if __ARM_ARCH__>=7124ldr r2,[r1],#4125# else126ldrb r2,[r1,#3]127# endif128eor r3,r5,r6 @ magic129eor r12,r12,r12130#if __ARM_ARCH__>=7131@ ldr r2,[r1],#4 @ 0132# if 0==15133str r1,[sp,#17*4] @ make room for r1134# endif135eor r0,r8,r8,ror#5136add r4,r4,r12 @ h+=Maj(a,b,c) from the past137eor r0,r0,r8,ror#19 @ Sigma1(e)138# ifndef __ARMEB__139rev r2,r2140# endif141#else142@ ldrb r2,[r1,#3] @ 0143add r4,r4,r12 @ h+=Maj(a,b,c) from the past144ldrb r12,[r1,#2]145ldrb r0,[r1,#1]146orr r2,r2,r12,lsl#8147ldrb r12,[r1],#4148orr r2,r2,r0,lsl#16149# if 0==15150str r1,[sp,#17*4] @ make room for r1151# endif152eor r0,r8,r8,ror#5153orr r2,r2,r12,lsl#24154eor r0,r0,r8,ror#19 @ Sigma1(e)155#endif156ldr r12,[r14],#4 @ *K256++157add r11,r11,r2 @ h+=X[i]158str r2,[sp,#0*4]159eor r2,r9,r10160add r11,r11,r0,ror#6 @ h+=Sigma1(e)161and r2,r2,r8162add r11,r11,r12 @ h+=K256[i]163eor r2,r2,r10 @ Ch(e,f,g)164eor r0,r4,r4,ror#11165add r11,r11,r2 @ h+=Ch(e,f,g)166#if 0==31167and r12,r12,#0xff168cmp r12,#0xf2 @ done?169#endif170#if 0<15171# if __ARM_ARCH__>=7172ldr r2,[r1],#4 @ prefetch173# else174ldrb r2,[r1,#3]175# endif176eor r12,r4,r5 @ a^b, b^c in next round177#else178ldr r2,[sp,#2*4] @ from future BODY_16_xx179eor r12,r4,r5 @ a^b, b^c in next round180ldr r1,[sp,#15*4] @ from future BODY_16_xx181#endif182eor r0,r0,r4,ror#20 @ Sigma0(a)183and r3,r3,r12 @ (b^c)&=(a^b)184add r7,r7,r11 @ d+=h185eor r3,r3,r5 @ Maj(a,b,c)186add r11,r11,r0,ror#2 @ h+=Sigma0(a)187@ add r11,r11,r3 @ h+=Maj(a,b,c)188#if __ARM_ARCH__>=7189@ ldr r2,[r1],#4 @ 1190# if 1==15191str r1,[sp,#17*4] @ make room for r1192# endif193eor r0,r7,r7,ror#5194add r11,r11,r3 @ h+=Maj(a,b,c) from the past195eor r0,r0,r7,ror#19 @ Sigma1(e)196# ifndef __ARMEB__197rev r2,r2198# endif199#else200@ ldrb r2,[r1,#3] @ 1201add r11,r11,r3 @ h+=Maj(a,b,c) from the past202ldrb r3,[r1,#2]203ldrb r0,[r1,#1]204orr r2,r2,r3,lsl#8205ldrb r3,[r1],#4206orr r2,r2,r0,lsl#16207# if 1==15208str r1,[sp,#17*4] @ make room for r1209# endif210eor r0,r7,r7,ror#5211orr r2,r2,r3,lsl#24212eor r0,r0,r7,ror#19 @ Sigma1(e)213#endif214ldr r3,[r14],#4 @ *K256++215add r10,r10,r2 @ h+=X[i]216str r2,[sp,#1*4]217eor r2,r8,r9218add r10,r10,r0,ror#6 @ h+=Sigma1(e)219and r2,r2,r7220add r10,r10,r3 @ h+=K256[i]221eor r2,r2,r9 @ Ch(e,f,g)222eor r0,r11,r11,ror#11223add r10,r10,r2 @ h+=Ch(e,f,g)224#if 1==31225and r3,r3,#0xff226cmp r3,#0xf2 @ done?227#endif228#if 1<15229# if __ARM_ARCH__>=7230ldr r2,[r1],#4 @ prefetch231# else232ldrb r2,[r1,#3]233# endif234eor r3,r11,r4 @ a^b, b^c in next round235#else236ldr r2,[sp,#3*4] @ from future BODY_16_xx237eor r3,r11,r4 @ a^b, b^c in next round238ldr r1,[sp,#0*4] @ from future BODY_16_xx239#endif240eor r0,r0,r11,ror#20 @ Sigma0(a)241and r12,r12,r3 @ (b^c)&=(a^b)242add r6,r6,r10 @ d+=h243eor r12,r12,r4 @ Maj(a,b,c)244add r10,r10,r0,ror#2 @ h+=Sigma0(a)245@ add r10,r10,r12 @ h+=Maj(a,b,c)246#if __ARM_ARCH__>=7247@ ldr r2,[r1],#4 @ 2248# if 2==15249str r1,[sp,#17*4] @ make room for r1250# endif251eor r0,r6,r6,ror#5252add r10,r10,r12 @ h+=Maj(a,b,c) from the past253eor r0,r0,r6,ror#19 @ Sigma1(e)254# ifndef __ARMEB__255rev r2,r2256# endif257#else258@ ldrb r2,[r1,#3] @ 2259add r10,r10,r12 @ h+=Maj(a,b,c) from the past260ldrb r12,[r1,#2]261ldrb r0,[r1,#1]262orr r2,r2,r12,lsl#8263ldrb r12,[r1],#4264orr r2,r2,r0,lsl#16265# if 2==15266str r1,[sp,#17*4] @ make room for r1267# endif268eor r0,r6,r6,ror#5269orr r2,r2,r12,lsl#24270eor r0,r0,r6,ror#19 @ Sigma1(e)271#endif272ldr r12,[r14],#4 @ *K256++273add r9,r9,r2 @ h+=X[i]274str r2,[sp,#2*4]275eor r2,r7,r8276add r9,r9,r0,ror#6 @ h+=Sigma1(e)277and r2,r2,r6278add r9,r9,r12 @ h+=K256[i]279eor r2,r2,r8 @ Ch(e,f,g)280eor r0,r10,r10,ror#11281add r9,r9,r2 @ h+=Ch(e,f,g)282#if 2==31283and r12,r12,#0xff284cmp r12,#0xf2 @ done?285#endif286#if 2<15287# if __ARM_ARCH__>=7288ldr r2,[r1],#4 @ prefetch289# else290ldrb r2,[r1,#3]291# endif292eor r12,r10,r11 @ a^b, b^c in next round293#else294ldr r2,[sp,#4*4] @ from future BODY_16_xx295eor r12,r10,r11 @ a^b, b^c in next round296ldr r1,[sp,#1*4] @ from future BODY_16_xx297#endif298eor r0,r0,r10,ror#20 @ Sigma0(a)299and r3,r3,r12 @ (b^c)&=(a^b)300add r5,r5,r9 @ d+=h301eor r3,r3,r11 @ Maj(a,b,c)302add r9,r9,r0,ror#2 @ h+=Sigma0(a)303@ add r9,r9,r3 @ h+=Maj(a,b,c)304#if __ARM_ARCH__>=7305@ ldr r2,[r1],#4 @ 3306# if 3==15307str r1,[sp,#17*4] @ make room for r1308# endif309eor r0,r5,r5,ror#5310add r9,r9,r3 @ h+=Maj(a,b,c) from the past311eor r0,r0,r5,ror#19 @ Sigma1(e)312# ifndef __ARMEB__313rev r2,r2314# endif315#else316@ ldrb r2,[r1,#3] @ 3317add r9,r9,r3 @ h+=Maj(a,b,c) from the past318ldrb r3,[r1,#2]319ldrb r0,[r1,#1]320orr r2,r2,r3,lsl#8321ldrb r3,[r1],#4322orr r2,r2,r0,lsl#16323# if 3==15324str r1,[sp,#17*4] @ make room for r1325# endif326eor r0,r5,r5,ror#5327orr r2,r2,r3,lsl#24328eor r0,r0,r5,ror#19 @ Sigma1(e)329#endif330ldr r3,[r14],#4 @ *K256++331add r8,r8,r2 @ h+=X[i]332str r2,[sp,#3*4]333eor r2,r6,r7334add r8,r8,r0,ror#6 @ h+=Sigma1(e)335and r2,r2,r5336add r8,r8,r3 @ h+=K256[i]337eor r2,r2,r7 @ Ch(e,f,g)338eor r0,r9,r9,ror#11339add r8,r8,r2 @ h+=Ch(e,f,g)340#if 3==31341and r3,r3,#0xff342cmp r3,#0xf2 @ done?343#endif344#if 3<15345# if __ARM_ARCH__>=7346ldr r2,[r1],#4 @ prefetch347# else348ldrb r2,[r1,#3]349# endif350eor r3,r9,r10 @ a^b, b^c in next round351#else352ldr r2,[sp,#5*4] @ from future BODY_16_xx353eor r3,r9,r10 @ a^b, b^c in next round354ldr r1,[sp,#2*4] @ from future BODY_16_xx355#endif356eor r0,r0,r9,ror#20 @ Sigma0(a)357and r12,r12,r3 @ (b^c)&=(a^b)358add r4,r4,r8 @ d+=h359eor r12,r12,r10 @ Maj(a,b,c)360add r8,r8,r0,ror#2 @ h+=Sigma0(a)361@ add r8,r8,r12 @ h+=Maj(a,b,c)362#if __ARM_ARCH__>=7363@ ldr r2,[r1],#4 @ 4364# if 4==15365str r1,[sp,#17*4] @ make room for r1366# endif367eor r0,r4,r4,ror#5368add r8,r8,r12 @ h+=Maj(a,b,c) from the past369eor r0,r0,r4,ror#19 @ Sigma1(e)370# ifndef __ARMEB__371rev r2,r2372# endif373#else374@ ldrb r2,[r1,#3] @ 4375add r8,r8,r12 @ h+=Maj(a,b,c) from the past376ldrb r12,[r1,#2]377ldrb r0,[r1,#1]378orr r2,r2,r12,lsl#8379ldrb r12,[r1],#4380orr r2,r2,r0,lsl#16381# if 4==15382str r1,[sp,#17*4] @ make room for r1383# endif384eor r0,r4,r4,ror#5385orr r2,r2,r12,lsl#24386eor r0,r0,r4,ror#19 @ Sigma1(e)387#endif388ldr r12,[r14],#4 @ *K256++389add r7,r7,r2 @ h+=X[i]390str r2,[sp,#4*4]391eor r2,r5,r6392add r7,r7,r0,ror#6 @ h+=Sigma1(e)393and r2,r2,r4394add r7,r7,r12 @ h+=K256[i]395eor r2,r2,r6 @ Ch(e,f,g)396eor r0,r8,r8,ror#11397add r7,r7,r2 @ h+=Ch(e,f,g)398#if 4==31399and r12,r12,#0xff400cmp r12,#0xf2 @ done?401#endif402#if 4<15403# if __ARM_ARCH__>=7404ldr r2,[r1],#4 @ prefetch405# else406ldrb r2,[r1,#3]407# endif408eor r12,r8,r9 @ a^b, b^c in next round409#else410ldr r2,[sp,#6*4] @ from future BODY_16_xx411eor r12,r8,r9 @ a^b, b^c in next round412ldr r1,[sp,#3*4] @ from future BODY_16_xx413#endif414eor r0,r0,r8,ror#20 @ Sigma0(a)415and r3,r3,r12 @ (b^c)&=(a^b)416add r11,r11,r7 @ d+=h417eor r3,r3,r9 @ Maj(a,b,c)418add r7,r7,r0,ror#2 @ h+=Sigma0(a)419@ add r7,r7,r3 @ h+=Maj(a,b,c)420#if __ARM_ARCH__>=7421@ ldr r2,[r1],#4 @ 5422# if 5==15423str r1,[sp,#17*4] @ make room for r1424# endif425eor r0,r11,r11,ror#5426add r7,r7,r3 @ h+=Maj(a,b,c) from the past427eor r0,r0,r11,ror#19 @ Sigma1(e)428# ifndef __ARMEB__429rev r2,r2430# endif431#else432@ ldrb r2,[r1,#3] @ 5433add r7,r7,r3 @ h+=Maj(a,b,c) from the past434ldrb r3,[r1,#2]435ldrb r0,[r1,#1]436orr r2,r2,r3,lsl#8437ldrb r3,[r1],#4438orr r2,r2,r0,lsl#16439# if 5==15440str r1,[sp,#17*4] @ make room for r1441# endif442eor r0,r11,r11,ror#5443orr r2,r2,r3,lsl#24444eor r0,r0,r11,ror#19 @ Sigma1(e)445#endif446ldr r3,[r14],#4 @ *K256++447add r6,r6,r2 @ h+=X[i]448str r2,[sp,#5*4]449eor r2,r4,r5450add r6,r6,r0,ror#6 @ h+=Sigma1(e)451and r2,r2,r11452add r6,r6,r3 @ h+=K256[i]453eor r2,r2,r5 @ Ch(e,f,g)454eor r0,r7,r7,ror#11455add r6,r6,r2 @ h+=Ch(e,f,g)456#if 5==31457and r3,r3,#0xff458cmp r3,#0xf2 @ done?459#endif460#if 5<15461# if __ARM_ARCH__>=7462ldr r2,[r1],#4 @ prefetch463# else464ldrb r2,[r1,#3]465# endif466eor r3,r7,r8 @ a^b, b^c in next round467#else468ldr r2,[sp,#7*4] @ from future BODY_16_xx469eor r3,r7,r8 @ a^b, b^c in next round470ldr r1,[sp,#4*4] @ from future BODY_16_xx471#endif472eor r0,r0,r7,ror#20 @ Sigma0(a)473and r12,r12,r3 @ (b^c)&=(a^b)474add r10,r10,r6 @ d+=h475eor r12,r12,r8 @ Maj(a,b,c)476add r6,r6,r0,ror#2 @ h+=Sigma0(a)477@ add r6,r6,r12 @ h+=Maj(a,b,c)478#if __ARM_ARCH__>=7479@ ldr r2,[r1],#4 @ 6480# if 6==15481str r1,[sp,#17*4] @ make room for r1482# endif483eor r0,r10,r10,ror#5484add r6,r6,r12 @ h+=Maj(a,b,c) from the past485eor r0,r0,r10,ror#19 @ Sigma1(e)486# ifndef __ARMEB__487rev r2,r2488# endif489#else490@ ldrb r2,[r1,#3] @ 6491add r6,r6,r12 @ h+=Maj(a,b,c) from the past492ldrb r12,[r1,#2]493ldrb r0,[r1,#1]494orr r2,r2,r12,lsl#8495ldrb r12,[r1],#4496orr r2,r2,r0,lsl#16497# if 6==15498str r1,[sp,#17*4] @ make room for r1499# endif500eor r0,r10,r10,ror#5501orr r2,r2,r12,lsl#24502eor r0,r0,r10,ror#19 @ Sigma1(e)503#endif504ldr r12,[r14],#4 @ *K256++505add r5,r5,r2 @ h+=X[i]506str r2,[sp,#6*4]507eor r2,r11,r4508add r5,r5,r0,ror#6 @ h+=Sigma1(e)509and r2,r2,r10510add r5,r5,r12 @ h+=K256[i]511eor r2,r2,r4 @ Ch(e,f,g)512eor r0,r6,r6,ror#11513add r5,r5,r2 @ h+=Ch(e,f,g)514#if 6==31515and r12,r12,#0xff516cmp r12,#0xf2 @ done?517#endif518#if 6<15519# if __ARM_ARCH__>=7520ldr r2,[r1],#4 @ prefetch521# else522ldrb r2,[r1,#3]523# endif524eor r12,r6,r7 @ a^b, b^c in next round525#else526ldr r2,[sp,#8*4] @ from future BODY_16_xx527eor r12,r6,r7 @ a^b, b^c in next round528ldr r1,[sp,#5*4] @ from future BODY_16_xx529#endif530eor r0,r0,r6,ror#20 @ Sigma0(a)531and r3,r3,r12 @ (b^c)&=(a^b)532add r9,r9,r5 @ d+=h533eor r3,r3,r7 @ Maj(a,b,c)534add r5,r5,r0,ror#2 @ h+=Sigma0(a)535@ add r5,r5,r3 @ h+=Maj(a,b,c)536#if __ARM_ARCH__>=7537@ ldr r2,[r1],#4 @ 7538# if 7==15539str r1,[sp,#17*4] @ make room for r1540# endif541eor r0,r9,r9,ror#5542add r5,r5,r3 @ h+=Maj(a,b,c) from the past543eor r0,r0,r9,ror#19 @ Sigma1(e)544# ifndef __ARMEB__545rev r2,r2546# endif547#else548@ ldrb r2,[r1,#3] @ 7549add r5,r5,r3 @ h+=Maj(a,b,c) from the past550ldrb r3,[r1,#2]551ldrb r0,[r1,#1]552orr r2,r2,r3,lsl#8553ldrb r3,[r1],#4554orr r2,r2,r0,lsl#16555# if 7==15556str r1,[sp,#17*4] @ make room for r1557# endif558eor r0,r9,r9,ror#5559orr r2,r2,r3,lsl#24560eor r0,r0,r9,ror#19 @ Sigma1(e)561#endif562ldr r3,[r14],#4 @ *K256++563add r4,r4,r2 @ h+=X[i]564str r2,[sp,#7*4]565eor r2,r10,r11566add r4,r4,r0,ror#6 @ h+=Sigma1(e)567and r2,r2,r9568add r4,r4,r3 @ h+=K256[i]569eor r2,r2,r11 @ Ch(e,f,g)570eor r0,r5,r5,ror#11571add r4,r4,r2 @ h+=Ch(e,f,g)572#if 7==31573and r3,r3,#0xff574cmp r3,#0xf2 @ done?575#endif576#if 7<15577# if __ARM_ARCH__>=7578ldr r2,[r1],#4 @ prefetch579# else580ldrb r2,[r1,#3]581# endif582eor r3,r5,r6 @ a^b, b^c in next round583#else584ldr r2,[sp,#9*4] @ from future BODY_16_xx585eor r3,r5,r6 @ a^b, b^c in next round586ldr r1,[sp,#6*4] @ from future BODY_16_xx587#endif588eor r0,r0,r5,ror#20 @ Sigma0(a)589and r12,r12,r3 @ (b^c)&=(a^b)590add r8,r8,r4 @ d+=h591eor r12,r12,r6 @ Maj(a,b,c)592add r4,r4,r0,ror#2 @ h+=Sigma0(a)593@ add r4,r4,r12 @ h+=Maj(a,b,c)594#if __ARM_ARCH__>=7595@ ldr r2,[r1],#4 @ 8596# if 8==15597str r1,[sp,#17*4] @ make room for r1598# endif599eor r0,r8,r8,ror#5600add r4,r4,r12 @ h+=Maj(a,b,c) from the past601eor r0,r0,r8,ror#19 @ Sigma1(e)602# ifndef __ARMEB__603rev r2,r2604# endif605#else606@ ldrb r2,[r1,#3] @ 8607add r4,r4,r12 @ h+=Maj(a,b,c) from the past608ldrb r12,[r1,#2]609ldrb r0,[r1,#1]610orr r2,r2,r12,lsl#8611ldrb r12,[r1],#4612orr r2,r2,r0,lsl#16613# if 8==15614str r1,[sp,#17*4] @ make room for r1615# endif616eor r0,r8,r8,ror#5617orr r2,r2,r12,lsl#24618eor r0,r0,r8,ror#19 @ Sigma1(e)619#endif620ldr r12,[r14],#4 @ *K256++621add r11,r11,r2 @ h+=X[i]622str r2,[sp,#8*4]623eor r2,r9,r10624add r11,r11,r0,ror#6 @ h+=Sigma1(e)625and r2,r2,r8626add r11,r11,r12 @ h+=K256[i]627eor r2,r2,r10 @ Ch(e,f,g)628eor r0,r4,r4,ror#11629add r11,r11,r2 @ h+=Ch(e,f,g)630#if 8==31631and r12,r12,#0xff632cmp r12,#0xf2 @ done?633#endif634#if 8<15635# if __ARM_ARCH__>=7636ldr r2,[r1],#4 @ prefetch637# else638ldrb r2,[r1,#3]639# endif640eor r12,r4,r5 @ a^b, b^c in next round641#else642ldr r2,[sp,#10*4] @ from future BODY_16_xx643eor r12,r4,r5 @ a^b, b^c in next round644ldr r1,[sp,#7*4] @ from future BODY_16_xx645#endif646eor r0,r0,r4,ror#20 @ Sigma0(a)647and r3,r3,r12 @ (b^c)&=(a^b)648add r7,r7,r11 @ d+=h649eor r3,r3,r5 @ Maj(a,b,c)650add r11,r11,r0,ror#2 @ h+=Sigma0(a)651@ add r11,r11,r3 @ h+=Maj(a,b,c)652#if __ARM_ARCH__>=7653@ ldr r2,[r1],#4 @ 9654# if 9==15655str r1,[sp,#17*4] @ make room for r1656# endif657eor r0,r7,r7,ror#5658add r11,r11,r3 @ h+=Maj(a,b,c) from the past659eor r0,r0,r7,ror#19 @ Sigma1(e)660# ifndef __ARMEB__661rev r2,r2662# endif663#else664@ ldrb r2,[r1,#3] @ 9665add r11,r11,r3 @ h+=Maj(a,b,c) from the past666ldrb r3,[r1,#2]667ldrb r0,[r1,#1]668orr r2,r2,r3,lsl#8669ldrb r3,[r1],#4670orr r2,r2,r0,lsl#16671# if 9==15672str r1,[sp,#17*4] @ make room for r1673# endif674eor r0,r7,r7,ror#5675orr r2,r2,r3,lsl#24676eor r0,r0,r7,ror#19 @ Sigma1(e)677#endif678ldr r3,[r14],#4 @ *K256++679add r10,r10,r2 @ h+=X[i]680str r2,[sp,#9*4]681eor r2,r8,r9682add r10,r10,r0,ror#6 @ h+=Sigma1(e)683and r2,r2,r7684add r10,r10,r3 @ h+=K256[i]685eor r2,r2,r9 @ Ch(e,f,g)686eor r0,r11,r11,ror#11687add r10,r10,r2 @ h+=Ch(e,f,g)688#if 9==31689and r3,r3,#0xff690cmp r3,#0xf2 @ done?691#endif692#if 9<15693# if __ARM_ARCH__>=7694ldr r2,[r1],#4 @ prefetch695# else696ldrb r2,[r1,#3]697# endif698eor r3,r11,r4 @ a^b, b^c in next round699#else700ldr r2,[sp,#11*4] @ from future BODY_16_xx701eor r3,r11,r4 @ a^b, b^c in next round702ldr r1,[sp,#8*4] @ from future BODY_16_xx703#endif704eor r0,r0,r11,ror#20 @ Sigma0(a)705and r12,r12,r3 @ (b^c)&=(a^b)706add r6,r6,r10 @ d+=h707eor r12,r12,r4 @ Maj(a,b,c)708add r10,r10,r0,ror#2 @ h+=Sigma0(a)709@ add r10,r10,r12 @ h+=Maj(a,b,c)710#if __ARM_ARCH__>=7711@ ldr r2,[r1],#4 @ 10712# if 10==15713str r1,[sp,#17*4] @ make room for r1714# endif715eor r0,r6,r6,ror#5716add r10,r10,r12 @ h+=Maj(a,b,c) from the past717eor r0,r0,r6,ror#19 @ Sigma1(e)718# ifndef __ARMEB__719rev r2,r2720# endif721#else722@ ldrb r2,[r1,#3] @ 10723add r10,r10,r12 @ h+=Maj(a,b,c) from the past724ldrb r12,[r1,#2]725ldrb r0,[r1,#1]726orr r2,r2,r12,lsl#8727ldrb r12,[r1],#4728orr r2,r2,r0,lsl#16729# if 10==15730str r1,[sp,#17*4] @ make room for r1731# endif732eor r0,r6,r6,ror#5733orr r2,r2,r12,lsl#24734eor r0,r0,r6,ror#19 @ Sigma1(e)735#endif736ldr r12,[r14],#4 @ *K256++737add r9,r9,r2 @ h+=X[i]738str r2,[sp,#10*4]739eor r2,r7,r8740add r9,r9,r0,ror#6 @ h+=Sigma1(e)741and r2,r2,r6742add r9,r9,r12 @ h+=K256[i]743eor r2,r2,r8 @ Ch(e,f,g)744eor r0,r10,r10,ror#11745add r9,r9,r2 @ h+=Ch(e,f,g)746#if 10==31747and r12,r12,#0xff748cmp r12,#0xf2 @ done?749#endif750#if 10<15751# if __ARM_ARCH__>=7752ldr r2,[r1],#4 @ prefetch753# else754ldrb r2,[r1,#3]755# endif756eor r12,r10,r11 @ a^b, b^c in next round757#else758ldr r2,[sp,#12*4] @ from future BODY_16_xx759eor r12,r10,r11 @ a^b, b^c in next round760ldr r1,[sp,#9*4] @ from future BODY_16_xx761#endif762eor r0,r0,r10,ror#20 @ Sigma0(a)763and r3,r3,r12 @ (b^c)&=(a^b)764add r5,r5,r9 @ d+=h765eor r3,r3,r11 @ Maj(a,b,c)766add r9,r9,r0,ror#2 @ h+=Sigma0(a)767@ add r9,r9,r3 @ h+=Maj(a,b,c)768#if __ARM_ARCH__>=7769@ ldr r2,[r1],#4 @ 11770# if 11==15771str r1,[sp,#17*4] @ make room for r1772# endif773eor r0,r5,r5,ror#5774add r9,r9,r3 @ h+=Maj(a,b,c) from the past775eor r0,r0,r5,ror#19 @ Sigma1(e)776# ifndef __ARMEB__777rev r2,r2778# endif779#else780@ ldrb r2,[r1,#3] @ 11781add r9,r9,r3 @ h+=Maj(a,b,c) from the past782ldrb r3,[r1,#2]783ldrb r0,[r1,#1]784orr r2,r2,r3,lsl#8785ldrb r3,[r1],#4786orr r2,r2,r0,lsl#16787# if 11==15788str r1,[sp,#17*4] @ make room for r1789# endif790eor r0,r5,r5,ror#5791orr r2,r2,r3,lsl#24792eor r0,r0,r5,ror#19 @ Sigma1(e)793#endif794ldr r3,[r14],#4 @ *K256++795add r8,r8,r2 @ h+=X[i]796str r2,[sp,#11*4]797eor r2,r6,r7798add r8,r8,r0,ror#6 @ h+=Sigma1(e)799and r2,r2,r5800add r8,r8,r3 @ h+=K256[i]801eor r2,r2,r7 @ Ch(e,f,g)802eor r0,r9,r9,ror#11803add r8,r8,r2 @ h+=Ch(e,f,g)804#if 11==31805and r3,r3,#0xff806cmp r3,#0xf2 @ done?807#endif808#if 11<15809# if __ARM_ARCH__>=7810ldr r2,[r1],#4 @ prefetch811# else812ldrb r2,[r1,#3]813# endif814eor r3,r9,r10 @ a^b, b^c in next round815#else816ldr r2,[sp,#13*4] @ from future BODY_16_xx817eor r3,r9,r10 @ a^b, b^c in next round818ldr r1,[sp,#10*4] @ from future BODY_16_xx819#endif820eor r0,r0,r9,ror#20 @ Sigma0(a)821and r12,r12,r3 @ (b^c)&=(a^b)822add r4,r4,r8 @ d+=h823eor r12,r12,r10 @ Maj(a,b,c)824add r8,r8,r0,ror#2 @ h+=Sigma0(a)825@ add r8,r8,r12 @ h+=Maj(a,b,c)826#if __ARM_ARCH__>=7827@ ldr r2,[r1],#4 @ 12828# if 12==15829str r1,[sp,#17*4] @ make room for r1830# endif831eor r0,r4,r4,ror#5832add r8,r8,r12 @ h+=Maj(a,b,c) from the past833eor r0,r0,r4,ror#19 @ Sigma1(e)834# ifndef __ARMEB__835rev r2,r2836# endif837#else838@ ldrb r2,[r1,#3] @ 12839add r8,r8,r12 @ h+=Maj(a,b,c) from the past840ldrb r12,[r1,#2]841ldrb r0,[r1,#1]842orr r2,r2,r12,lsl#8843ldrb r12,[r1],#4844orr r2,r2,r0,lsl#16845# if 12==15846str r1,[sp,#17*4] @ make room for r1847# endif848eor r0,r4,r4,ror#5849orr r2,r2,r12,lsl#24850eor r0,r0,r4,ror#19 @ Sigma1(e)851#endif852ldr r12,[r14],#4 @ *K256++853add r7,r7,r2 @ h+=X[i]854str r2,[sp,#12*4]855eor r2,r5,r6856add r7,r7,r0,ror#6 @ h+=Sigma1(e)857and r2,r2,r4858add r7,r7,r12 @ h+=K256[i]859eor r2,r2,r6 @ Ch(e,f,g)860eor r0,r8,r8,ror#11861add r7,r7,r2 @ h+=Ch(e,f,g)862#if 12==31863and r12,r12,#0xff864cmp r12,#0xf2 @ done?865#endif866#if 12<15867# if __ARM_ARCH__>=7868ldr r2,[r1],#4 @ prefetch869# else870ldrb r2,[r1,#3]871# endif872eor r12,r8,r9 @ a^b, b^c in next round873#else874ldr r2,[sp,#14*4] @ from future BODY_16_xx875eor r12,r8,r9 @ a^b, b^c in next round876ldr r1,[sp,#11*4] @ from future BODY_16_xx877#endif878eor r0,r0,r8,ror#20 @ Sigma0(a)879and r3,r3,r12 @ (b^c)&=(a^b)880add r11,r11,r7 @ d+=h881eor r3,r3,r9 @ Maj(a,b,c)882add r7,r7,r0,ror#2 @ h+=Sigma0(a)883@ add r7,r7,r3 @ h+=Maj(a,b,c)884#if __ARM_ARCH__>=7885@ ldr r2,[r1],#4 @ 13886# if 13==15887str r1,[sp,#17*4] @ make room for r1888# endif889eor r0,r11,r11,ror#5890add r7,r7,r3 @ h+=Maj(a,b,c) from the past891eor r0,r0,r11,ror#19 @ Sigma1(e)892# ifndef __ARMEB__893rev r2,r2894# endif895#else896@ ldrb r2,[r1,#3] @ 13897add r7,r7,r3 @ h+=Maj(a,b,c) from the past898ldrb r3,[r1,#2]899ldrb r0,[r1,#1]900orr r2,r2,r3,lsl#8901ldrb r3,[r1],#4902orr r2,r2,r0,lsl#16903# if 13==15904str r1,[sp,#17*4] @ make room for r1905# endif906eor r0,r11,r11,ror#5907orr r2,r2,r3,lsl#24908eor r0,r0,r11,ror#19 @ Sigma1(e)909#endif910ldr r3,[r14],#4 @ *K256++911add r6,r6,r2 @ h+=X[i]912str r2,[sp,#13*4]913eor r2,r4,r5914add r6,r6,r0,ror#6 @ h+=Sigma1(e)915and r2,r2,r11916add r6,r6,r3 @ h+=K256[i]917eor r2,r2,r5 @ Ch(e,f,g)918eor r0,r7,r7,ror#11919add r6,r6,r2 @ h+=Ch(e,f,g)920#if 13==31921and r3,r3,#0xff922cmp r3,#0xf2 @ done?923#endif924#if 13<15925# if __ARM_ARCH__>=7926ldr r2,[r1],#4 @ prefetch927# else928ldrb r2,[r1,#3]929# endif930eor r3,r7,r8 @ a^b, b^c in next round931#else932ldr r2,[sp,#15*4] @ from future BODY_16_xx933eor r3,r7,r8 @ a^b, b^c in next round934ldr r1,[sp,#12*4] @ from future BODY_16_xx935#endif936eor r0,r0,r7,ror#20 @ Sigma0(a)937and r12,r12,r3 @ (b^c)&=(a^b)938add r10,r10,r6 @ d+=h939eor r12,r12,r8 @ Maj(a,b,c)940add r6,r6,r0,ror#2 @ h+=Sigma0(a)941@ add r6,r6,r12 @ h+=Maj(a,b,c)942#if __ARM_ARCH__>=7943@ ldr r2,[r1],#4 @ 14944# if 14==15945str r1,[sp,#17*4] @ make room for r1946# endif947eor r0,r10,r10,ror#5948add r6,r6,r12 @ h+=Maj(a,b,c) from the past949eor r0,r0,r10,ror#19 @ Sigma1(e)950# ifndef __ARMEB__951rev r2,r2952# endif953#else954@ ldrb r2,[r1,#3] @ 14955add r6,r6,r12 @ h+=Maj(a,b,c) from the past956ldrb r12,[r1,#2]957ldrb r0,[r1,#1]958orr r2,r2,r12,lsl#8959ldrb r12,[r1],#4960orr r2,r2,r0,lsl#16961# if 14==15962str r1,[sp,#17*4] @ make room for r1963# endif964eor r0,r10,r10,ror#5965orr r2,r2,r12,lsl#24966eor r0,r0,r10,ror#19 @ Sigma1(e)967#endif968ldr r12,[r14],#4 @ *K256++969add r5,r5,r2 @ h+=X[i]970str r2,[sp,#14*4]971eor r2,r11,r4972add r5,r5,r0,ror#6 @ h+=Sigma1(e)973and r2,r2,r10974add r5,r5,r12 @ h+=K256[i]975eor r2,r2,r4 @ Ch(e,f,g)976eor r0,r6,r6,ror#11977add r5,r5,r2 @ h+=Ch(e,f,g)978#if 14==31979and r12,r12,#0xff980cmp r12,#0xf2 @ done?981#endif982#if 14<15983# if __ARM_ARCH__>=7984ldr r2,[r1],#4 @ prefetch985# else986ldrb r2,[r1,#3]987# endif988eor r12,r6,r7 @ a^b, b^c in next round989#else990ldr r2,[sp,#0*4] @ from future BODY_16_xx991eor r12,r6,r7 @ a^b, b^c in next round992ldr r1,[sp,#13*4] @ from future BODY_16_xx993#endif994eor r0,r0,r6,ror#20 @ Sigma0(a)995and r3,r3,r12 @ (b^c)&=(a^b)996add r9,r9,r5 @ d+=h997eor r3,r3,r7 @ Maj(a,b,c)998add r5,r5,r0,ror#2 @ h+=Sigma0(a)999@ add r5,r5,r3 @ h+=Maj(a,b,c)1000#if __ARM_ARCH__>=71001@ ldr r2,[r1],#4 @ 151002# if 15==151003str r1,[sp,#17*4] @ make room for r11004# endif1005eor r0,r9,r9,ror#51006add r5,r5,r3 @ h+=Maj(a,b,c) from the past1007eor r0,r0,r9,ror#19 @ Sigma1(e)1008# ifndef __ARMEB__1009rev r2,r21010# endif1011#else1012@ ldrb r2,[r1,#3] @ 151013add r5,r5,r3 @ h+=Maj(a,b,c) from the past1014ldrb r3,[r1,#2]1015ldrb r0,[r1,#1]1016orr r2,r2,r3,lsl#81017ldrb r3,[r1],#41018orr r2,r2,r0,lsl#161019# if 15==151020str r1,[sp,#17*4] @ make room for r11021# endif1022eor r0,r9,r9,ror#51023orr r2,r2,r3,lsl#241024eor r0,r0,r9,ror#19 @ Sigma1(e)1025#endif1026ldr r3,[r14],#4 @ *K256++1027add r4,r4,r2 @ h+=X[i]1028str r2,[sp,#15*4]1029eor r2,r10,r111030add r4,r4,r0,ror#6 @ h+=Sigma1(e)1031and r2,r2,r91032add r4,r4,r3 @ h+=K256[i]1033eor r2,r2,r11 @ Ch(e,f,g)1034eor r0,r5,r5,ror#111035add r4,r4,r2 @ h+=Ch(e,f,g)1036#if 15==311037and r3,r3,#0xff1038cmp r3,#0xf2 @ done?1039#endif1040#if 15<151041# if __ARM_ARCH__>=71042ldr r2,[r1],#4 @ prefetch1043# else1044ldrb r2,[r1,#3]1045# endif1046eor r3,r5,r6 @ a^b, b^c in next round1047#else1048ldr r2,[sp,#1*4] @ from future BODY_16_xx1049eor r3,r5,r6 @ a^b, b^c in next round1050ldr r1,[sp,#14*4] @ from future BODY_16_xx1051#endif1052eor r0,r0,r5,ror#20 @ Sigma0(a)1053and r12,r12,r3 @ (b^c)&=(a^b)1054add r8,r8,r4 @ d+=h1055eor r12,r12,r6 @ Maj(a,b,c)1056add r4,r4,r0,ror#2 @ h+=Sigma0(a)1057@ add r4,r4,r12 @ h+=Maj(a,b,c)1058.Lrounds_16_xx:1059@ ldr r2,[sp,#1*4] @ 161060@ ldr r1,[sp,#14*4]1061mov r0,r2,ror#71062add r4,r4,r12 @ h+=Maj(a,b,c) from the past1063mov r12,r1,ror#171064eor r0,r0,r2,ror#181065eor r12,r12,r1,ror#191066eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])1067ldr r2,[sp,#0*4]1068eor r12,r12,r1,lsr#10 @ sigma1(X[i+14])1069ldr r1,[sp,#9*4]10701071add r12,r12,r01072eor r0,r8,r8,ror#5 @ from BODY_00_151073add r2,r2,r121074eor r0,r0,r8,ror#19 @ Sigma1(e)1075add r2,r2,r1 @ X[i]1076ldr r12,[r14],#4 @ *K256++1077add r11,r11,r2 @ h+=X[i]1078str r2,[sp,#0*4]1079eor r2,r9,r101080add r11,r11,r0,ror#6 @ h+=Sigma1(e)1081and r2,r2,r81082add r11,r11,r12 @ h+=K256[i]1083eor r2,r2,r10 @ Ch(e,f,g)1084eor r0,r4,r4,ror#111085add r11,r11,r2 @ h+=Ch(e,f,g)1086#if 16==311087and r12,r12,#0xff1088cmp r12,#0xf2 @ done?1089#endif1090#if 16<151091# if __ARM_ARCH__>=71092ldr r2,[r1],#4 @ prefetch1093# else1094ldrb r2,[r1,#3]1095# endif1096eor r12,r4,r5 @ a^b, b^c in next round1097#else1098ldr r2,[sp,#2*4] @ from future BODY_16_xx1099eor r12,r4,r5 @ a^b, b^c in next round1100ldr r1,[sp,#15*4] @ from future BODY_16_xx1101#endif1102eor r0,r0,r4,ror#20 @ Sigma0(a)1103and r3,r3,r12 @ (b^c)&=(a^b)1104add r7,r7,r11 @ d+=h1105eor r3,r3,r5 @ Maj(a,b,c)1106add r11,r11,r0,ror#2 @ h+=Sigma0(a)1107@ add r11,r11,r3 @ h+=Maj(a,b,c)1108@ ldr r2,[sp,#2*4] @ 171109@ ldr r1,[sp,#15*4]1110mov r0,r2,ror#71111add r11,r11,r3 @ h+=Maj(a,b,c) from the past1112mov r3,r1,ror#171113eor r0,r0,r2,ror#181114eor r3,r3,r1,ror#191115eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])1116ldr r2,[sp,#1*4]1117eor r3,r3,r1,lsr#10 @ sigma1(X[i+14])1118ldr r1,[sp,#10*4]11191120add r3,r3,r01121eor r0,r7,r7,ror#5 @ from BODY_00_151122add r2,r2,r31123eor r0,r0,r7,ror#19 @ Sigma1(e)1124add r2,r2,r1 @ X[i]1125ldr r3,[r14],#4 @ *K256++1126add r10,r10,r2 @ h+=X[i]1127str r2,[sp,#1*4]1128eor r2,r8,r91129add r10,r10,r0,ror#6 @ h+=Sigma1(e)1130and r2,r2,r71131add r10,r10,r3 @ h+=K256[i]1132eor r2,r2,r9 @ Ch(e,f,g)1133eor r0,r11,r11,ror#111134add r10,r10,r2 @ h+=Ch(e,f,g)1135#if 17==311136and r3,r3,#0xff1137cmp r3,#0xf2 @ done?1138#endif1139#if 17<151140# if __ARM_ARCH__>=71141ldr r2,[r1],#4 @ prefetch1142# else1143ldrb r2,[r1,#3]1144# endif1145eor r3,r11,r4 @ a^b, b^c in next round1146#else1147ldr r2,[sp,#3*4] @ from future BODY_16_xx1148eor r3,r11,r4 @ a^b, b^c in next round1149ldr r1,[sp,#0*4] @ from future BODY_16_xx1150#endif1151eor r0,r0,r11,ror#20 @ Sigma0(a)1152and r12,r12,r3 @ (b^c)&=(a^b)1153add r6,r6,r10 @ d+=h1154eor r12,r12,r4 @ Maj(a,b,c)1155add r10,r10,r0,ror#2 @ h+=Sigma0(a)1156@ add r10,r10,r12 @ h+=Maj(a,b,c)1157@ ldr r2,[sp,#3*4] @ 181158@ ldr r1,[sp,#0*4]1159mov r0,r2,ror#71160add r10,r10,r12 @ h+=Maj(a,b,c) from the past1161mov r12,r1,ror#171162eor r0,r0,r2,ror#181163eor r12,r12,r1,ror#191164eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])1165ldr r2,[sp,#2*4]1166eor r12,r12,r1,lsr#10 @ sigma1(X[i+14])1167ldr r1,[sp,#11*4]11681169add r12,r12,r01170eor r0,r6,r6,ror#5 @ from BODY_00_151171add r2,r2,r121172eor r0,r0,r6,ror#19 @ Sigma1(e)1173add r2,r2,r1 @ X[i]1174ldr r12,[r14],#4 @ *K256++1175add r9,r9,r2 @ h+=X[i]1176str r2,[sp,#2*4]1177eor r2,r7,r81178add r9,r9,r0,ror#6 @ h+=Sigma1(e)1179and r2,r2,r61180add r9,r9,r12 @ h+=K256[i]1181eor r2,r2,r8 @ Ch(e,f,g)1182eor r0,r10,r10,ror#111183add r9,r9,r2 @ h+=Ch(e,f,g)1184#if 18==311185and r12,r12,#0xff1186cmp r12,#0xf2 @ done?1187#endif1188#if 18<151189# if __ARM_ARCH__>=71190ldr r2,[r1],#4 @ prefetch1191# else1192ldrb r2,[r1,#3]1193# endif1194eor r12,r10,r11 @ a^b, b^c in next round1195#else1196ldr r2,[sp,#4*4] @ from future BODY_16_xx1197eor r12,r10,r11 @ a^b, b^c in next round1198ldr r1,[sp,#1*4] @ from future BODY_16_xx1199#endif1200eor r0,r0,r10,ror#20 @ Sigma0(a)1201and r3,r3,r12 @ (b^c)&=(a^b)1202add r5,r5,r9 @ d+=h1203eor r3,r3,r11 @ Maj(a,b,c)1204add r9,r9,r0,ror#2 @ h+=Sigma0(a)1205@ add r9,r9,r3 @ h+=Maj(a,b,c)1206@ ldr r2,[sp,#4*4] @ 191207@ ldr r1,[sp,#1*4]1208mov r0,r2,ror#71209add r9,r9,r3 @ h+=Maj(a,b,c) from the past1210mov r3,r1,ror#171211eor r0,r0,r2,ror#181212eor r3,r3,r1,ror#191213eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])1214ldr r2,[sp,#3*4]1215eor r3,r3,r1,lsr#10 @ sigma1(X[i+14])1216ldr r1,[sp,#12*4]12171218add r3,r3,r01219eor r0,r5,r5,ror#5 @ from BODY_00_151220add r2,r2,r31221eor r0,r0,r5,ror#19 @ Sigma1(e)1222add r2,r2,r1 @ X[i]1223ldr r3,[r14],#4 @ *K256++1224add r8,r8,r2 @ h+=X[i]1225str r2,[sp,#3*4]1226eor r2,r6,r71227add r8,r8,r0,ror#6 @ h+=Sigma1(e)1228and r2,r2,r51229add r8,r8,r3 @ h+=K256[i]1230eor r2,r2,r7 @ Ch(e,f,g)1231eor r0,r9,r9,ror#111232add r8,r8,r2 @ h+=Ch(e,f,g)1233#if 19==311234and r3,r3,#0xff1235cmp r3,#0xf2 @ done?1236#endif1237#if 19<151238# if __ARM_ARCH__>=71239ldr r2,[r1],#4 @ prefetch1240# else1241ldrb r2,[r1,#3]1242# endif1243eor r3,r9,r10 @ a^b, b^c in next round1244#else1245ldr r2,[sp,#5*4] @ from future BODY_16_xx1246eor r3,r9,r10 @ a^b, b^c in next round1247ldr r1,[sp,#2*4] @ from future BODY_16_xx1248#endif1249eor r0,r0,r9,ror#20 @ Sigma0(a)1250and r12,r12,r3 @ (b^c)&=(a^b)1251add r4,r4,r8 @ d+=h1252eor r12,r12,r10 @ Maj(a,b,c)1253add r8,r8,r0,ror#2 @ h+=Sigma0(a)1254@ add r8,r8,r12 @ h+=Maj(a,b,c)1255@ ldr r2,[sp,#5*4] @ 201256@ ldr r1,[sp,#2*4]1257mov r0,r2,ror#71258add r8,r8,r12 @ h+=Maj(a,b,c) from the past1259mov r12,r1,ror#171260eor r0,r0,r2,ror#181261eor r12,r12,r1,ror#191262eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])1263ldr r2,[sp,#4*4]1264eor r12,r12,r1,lsr#10 @ sigma1(X[i+14])1265ldr r1,[sp,#13*4]12661267add r12,r12,r01268eor r0,r4,r4,ror#5 @ from BODY_00_151269add r2,r2,r121270eor r0,r0,r4,ror#19 @ Sigma1(e)1271add r2,r2,r1 @ X[i]1272ldr r12,[r14],#4 @ *K256++1273add r7,r7,r2 @ h+=X[i]1274str r2,[sp,#4*4]1275eor r2,r5,r61276add r7,r7,r0,ror#6 @ h+=Sigma1(e)1277and r2,r2,r41278add r7,r7,r12 @ h+=K256[i]1279eor r2,r2,r6 @ Ch(e,f,g)1280eor r0,r8,r8,ror#111281add r7,r7,r2 @ h+=Ch(e,f,g)1282#if 20==311283and r12,r12,#0xff1284cmp r12,#0xf2 @ done?1285#endif1286#if 20<151287# if __ARM_ARCH__>=71288ldr r2,[r1],#4 @ prefetch1289# else1290ldrb r2,[r1,#3]1291# endif1292eor r12,r8,r9 @ a^b, b^c in next round1293#else1294ldr r2,[sp,#6*4] @ from future BODY_16_xx1295eor r12,r8,r9 @ a^b, b^c in next round1296ldr r1,[sp,#3*4] @ from future BODY_16_xx1297#endif1298eor r0,r0,r8,ror#20 @ Sigma0(a)1299and r3,r3,r12 @ (b^c)&=(a^b)1300add r11,r11,r7 @ d+=h1301eor r3,r3,r9 @ Maj(a,b,c)1302add r7,r7,r0,ror#2 @ h+=Sigma0(a)1303@ add r7,r7,r3 @ h+=Maj(a,b,c)1304@ ldr r2,[sp,#6*4] @ 211305@ ldr r1,[sp,#3*4]1306mov r0,r2,ror#71307add r7,r7,r3 @ h+=Maj(a,b,c) from the past1308mov r3,r1,ror#171309eor r0,r0,r2,ror#181310eor r3,r3,r1,ror#191311eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])1312ldr r2,[sp,#5*4]1313eor r3,r3,r1,lsr#10 @ sigma1(X[i+14])1314ldr r1,[sp,#14*4]13151316add r3,r3,r01317eor r0,r11,r11,ror#5 @ from BODY_00_151318add r2,r2,r31319eor r0,r0,r11,ror#19 @ Sigma1(e)1320add r2,r2,r1 @ X[i]1321ldr r3,[r14],#4 @ *K256++1322add r6,r6,r2 @ h+=X[i]1323str r2,[sp,#5*4]1324eor r2,r4,r51325add r6,r6,r0,ror#6 @ h+=Sigma1(e)1326and r2,r2,r111327add r6,r6,r3 @ h+=K256[i]1328eor r2,r2,r5 @ Ch(e,f,g)1329eor r0,r7,r7,ror#111330add r6,r6,r2 @ h+=Ch(e,f,g)1331#if 21==311332and r3,r3,#0xff1333cmp r3,#0xf2 @ done?1334#endif1335#if 21<151336# if __ARM_ARCH__>=71337ldr r2,[r1],#4 @ prefetch1338# else1339ldrb r2,[r1,#3]1340# endif1341eor r3,r7,r8 @ a^b, b^c in next round1342#else1343ldr r2,[sp,#7*4] @ from future BODY_16_xx1344eor r3,r7,r8 @ a^b, b^c in next round1345ldr r1,[sp,#4*4] @ from future BODY_16_xx1346#endif1347eor r0,r0,r7,ror#20 @ Sigma0(a)1348and r12,r12,r3 @ (b^c)&=(a^b)1349add r10,r10,r6 @ d+=h1350eor r12,r12,r8 @ Maj(a,b,c)1351add r6,r6,r0,ror#2 @ h+=Sigma0(a)1352@ add r6,r6,r12 @ h+=Maj(a,b,c)1353@ ldr r2,[sp,#7*4] @ 221354@ ldr r1,[sp,#4*4]1355mov r0,r2,ror#71356add r6,r6,r12 @ h+=Maj(a,b,c) from the past1357mov r12,r1,ror#171358eor r0,r0,r2,ror#181359eor r12,r12,r1,ror#191360eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])1361ldr r2,[sp,#6*4]1362eor r12,r12,r1,lsr#10 @ sigma1(X[i+14])1363ldr r1,[sp,#15*4]13641365add r12,r12,r01366eor r0,r10,r10,ror#5 @ from BODY_00_151367add r2,r2,r121368eor r0,r0,r10,ror#19 @ Sigma1(e)1369add r2,r2,r1 @ X[i]1370ldr r12,[r14],#4 @ *K256++1371add r5,r5,r2 @ h+=X[i]1372str r2,[sp,#6*4]1373eor r2,r11,r41374add r5,r5,r0,ror#6 @ h+=Sigma1(e)1375and r2,r2,r101376add r5,r5,r12 @ h+=K256[i]1377eor r2,r2,r4 @ Ch(e,f,g)1378eor r0,r6,r6,ror#111379add r5,r5,r2 @ h+=Ch(e,f,g)1380#if 22==311381and r12,r12,#0xff1382cmp r12,#0xf2 @ done?1383#endif1384#if 22<151385# if __ARM_ARCH__>=71386ldr r2,[r1],#4 @ prefetch1387# else1388ldrb r2,[r1,#3]1389# endif1390eor r12,r6,r7 @ a^b, b^c in next round1391#else1392ldr r2,[sp,#8*4] @ from future BODY_16_xx1393eor r12,r6,r7 @ a^b, b^c in next round1394ldr r1,[sp,#5*4] @ from future BODY_16_xx1395#endif1396eor r0,r0,r6,ror#20 @ Sigma0(a)1397and r3,r3,r12 @ (b^c)&=(a^b)1398add r9,r9,r5 @ d+=h1399eor r3,r3,r7 @ Maj(a,b,c)1400add r5,r5,r0,ror#2 @ h+=Sigma0(a)1401@ add r5,r5,r3 @ h+=Maj(a,b,c)1402@ ldr r2,[sp,#8*4] @ 231403@ ldr r1,[sp,#5*4]1404mov r0,r2,ror#71405add r5,r5,r3 @ h+=Maj(a,b,c) from the past1406mov r3,r1,ror#171407eor r0,r0,r2,ror#181408eor r3,r3,r1,ror#191409eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])1410ldr r2,[sp,#7*4]1411eor r3,r3,r1,lsr#10 @ sigma1(X[i+14])1412ldr r1,[sp,#0*4]14131414add r3,r3,r01415eor r0,r9,r9,ror#5 @ from BODY_00_151416add r2,r2,r31417eor r0,r0,r9,ror#19 @ Sigma1(e)1418add r2,r2,r1 @ X[i]1419ldr r3,[r14],#4 @ *K256++1420add r4,r4,r2 @ h+=X[i]1421str r2,[sp,#7*4]1422eor r2,r10,r111423add r4,r4,r0,ror#6 @ h+=Sigma1(e)1424and r2,r2,r91425add r4,r4,r3 @ h+=K256[i]1426eor r2,r2,r11 @ Ch(e,f,g)1427eor r0,r5,r5,ror#111428add r4,r4,r2 @ h+=Ch(e,f,g)1429#if 23==311430and r3,r3,#0xff1431cmp r3,#0xf2 @ done?1432#endif1433#if 23<151434# if __ARM_ARCH__>=71435ldr r2,[r1],#4 @ prefetch1436# else1437ldrb r2,[r1,#3]1438# endif1439eor r3,r5,r6 @ a^b, b^c in next round1440#else1441ldr r2,[sp,#9*4] @ from future BODY_16_xx1442eor r3,r5,r6 @ a^b, b^c in next round1443ldr r1,[sp,#6*4] @ from future BODY_16_xx1444#endif1445eor r0,r0,r5,ror#20 @ Sigma0(a)1446and r12,r12,r3 @ (b^c)&=(a^b)1447add r8,r8,r4 @ d+=h1448eor r12,r12,r6 @ Maj(a,b,c)1449add r4,r4,r0,ror#2 @ h+=Sigma0(a)1450@ add r4,r4,r12 @ h+=Maj(a,b,c)1451@ ldr r2,[sp,#9*4] @ 241452@ ldr r1,[sp,#6*4]1453mov r0,r2,ror#71454add r4,r4,r12 @ h+=Maj(a,b,c) from the past1455mov r12,r1,ror#171456eor r0,r0,r2,ror#181457eor r12,r12,r1,ror#191458eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])1459ldr r2,[sp,#8*4]1460eor r12,r12,r1,lsr#10 @ sigma1(X[i+14])1461ldr r1,[sp,#1*4]14621463add r12,r12,r01464eor r0,r8,r8,ror#5 @ from BODY_00_151465add r2,r2,r121466eor r0,r0,r8,ror#19 @ Sigma1(e)1467add r2,r2,r1 @ X[i]1468ldr r12,[r14],#4 @ *K256++1469add r11,r11,r2 @ h+=X[i]1470str r2,[sp,#8*4]1471eor r2,r9,r101472add r11,r11,r0,ror#6 @ h+=Sigma1(e)1473and r2,r2,r81474add r11,r11,r12 @ h+=K256[i]1475eor r2,r2,r10 @ Ch(e,f,g)1476eor r0,r4,r4,ror#111477add r11,r11,r2 @ h+=Ch(e,f,g)1478#if 24==311479and r12,r12,#0xff1480cmp r12,#0xf2 @ done?1481#endif1482#if 24<151483# if __ARM_ARCH__>=71484ldr r2,[r1],#4 @ prefetch1485# else1486ldrb r2,[r1,#3]1487# endif1488eor r12,r4,r5 @ a^b, b^c in next round1489#else1490ldr r2,[sp,#10*4] @ from future BODY_16_xx1491eor r12,r4,r5 @ a^b, b^c in next round1492ldr r1,[sp,#7*4] @ from future BODY_16_xx1493#endif1494eor r0,r0,r4,ror#20 @ Sigma0(a)1495and r3,r3,r12 @ (b^c)&=(a^b)1496add r7,r7,r11 @ d+=h1497eor r3,r3,r5 @ Maj(a,b,c)1498add r11,r11,r0,ror#2 @ h+=Sigma0(a)1499@ add r11,r11,r3 @ h+=Maj(a,b,c)1500@ ldr r2,[sp,#10*4] @ 251501@ ldr r1,[sp,#7*4]1502mov r0,r2,ror#71503add r11,r11,r3 @ h+=Maj(a,b,c) from the past1504mov r3,r1,ror#171505eor r0,r0,r2,ror#181506eor r3,r3,r1,ror#191507eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])1508ldr r2,[sp,#9*4]1509eor r3,r3,r1,lsr#10 @ sigma1(X[i+14])1510ldr r1,[sp,#2*4]15111512add r3,r3,r01513eor r0,r7,r7,ror#5 @ from BODY_00_151514add r2,r2,r31515eor r0,r0,r7,ror#19 @ Sigma1(e)1516add r2,r2,r1 @ X[i]1517ldr r3,[r14],#4 @ *K256++1518add r10,r10,r2 @ h+=X[i]1519str r2,[sp,#9*4]1520eor r2,r8,r91521add r10,r10,r0,ror#6 @ h+=Sigma1(e)1522and r2,r2,r71523add r10,r10,r3 @ h+=K256[i]1524eor r2,r2,r9 @ Ch(e,f,g)1525eor r0,r11,r11,ror#111526add r10,r10,r2 @ h+=Ch(e,f,g)1527#if 25==311528and r3,r3,#0xff1529cmp r3,#0xf2 @ done?1530#endif1531#if 25<151532# if __ARM_ARCH__>=71533ldr r2,[r1],#4 @ prefetch1534# else1535ldrb r2,[r1,#3]1536# endif1537eor r3,r11,r4 @ a^b, b^c in next round1538#else1539ldr r2,[sp,#11*4] @ from future BODY_16_xx1540eor r3,r11,r4 @ a^b, b^c in next round1541ldr r1,[sp,#8*4] @ from future BODY_16_xx1542#endif1543eor r0,r0,r11,ror#20 @ Sigma0(a)1544and r12,r12,r3 @ (b^c)&=(a^b)1545add r6,r6,r10 @ d+=h1546eor r12,r12,r4 @ Maj(a,b,c)1547add r10,r10,r0,ror#2 @ h+=Sigma0(a)1548@ add r10,r10,r12 @ h+=Maj(a,b,c)1549@ ldr r2,[sp,#11*4] @ 261550@ ldr r1,[sp,#8*4]1551mov r0,r2,ror#71552add r10,r10,r12 @ h+=Maj(a,b,c) from the past1553mov r12,r1,ror#171554eor r0,r0,r2,ror#181555eor r12,r12,r1,ror#191556eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])1557ldr r2,[sp,#10*4]1558eor r12,r12,r1,lsr#10 @ sigma1(X[i+14])1559ldr r1,[sp,#3*4]15601561add r12,r12,r01562eor r0,r6,r6,ror#5 @ from BODY_00_151563add r2,r2,r121564eor r0,r0,r6,ror#19 @ Sigma1(e)1565add r2,r2,r1 @ X[i]1566ldr r12,[r14],#4 @ *K256++1567add r9,r9,r2 @ h+=X[i]1568str r2,[sp,#10*4]1569eor r2,r7,r81570add r9,r9,r0,ror#6 @ h+=Sigma1(e)1571and r2,r2,r61572add r9,r9,r12 @ h+=K256[i]1573eor r2,r2,r8 @ Ch(e,f,g)1574eor r0,r10,r10,ror#111575add r9,r9,r2 @ h+=Ch(e,f,g)1576#if 26==311577and r12,r12,#0xff1578cmp r12,#0xf2 @ done?1579#endif1580#if 26<151581# if __ARM_ARCH__>=71582ldr r2,[r1],#4 @ prefetch1583# else1584ldrb r2,[r1,#3]1585# endif1586eor r12,r10,r11 @ a^b, b^c in next round1587#else1588ldr r2,[sp,#12*4] @ from future BODY_16_xx1589eor r12,r10,r11 @ a^b, b^c in next round1590ldr r1,[sp,#9*4] @ from future BODY_16_xx1591#endif1592eor r0,r0,r10,ror#20 @ Sigma0(a)1593and r3,r3,r12 @ (b^c)&=(a^b)1594add r5,r5,r9 @ d+=h1595eor r3,r3,r11 @ Maj(a,b,c)1596add r9,r9,r0,ror#2 @ h+=Sigma0(a)1597@ add r9,r9,r3 @ h+=Maj(a,b,c)1598@ ldr r2,[sp,#12*4] @ 271599@ ldr r1,[sp,#9*4]1600mov r0,r2,ror#71601add r9,r9,r3 @ h+=Maj(a,b,c) from the past1602mov r3,r1,ror#171603eor r0,r0,r2,ror#181604eor r3,r3,r1,ror#191605eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])1606ldr r2,[sp,#11*4]1607eor r3,r3,r1,lsr#10 @ sigma1(X[i+14])1608ldr r1,[sp,#4*4]16091610add r3,r3,r01611eor r0,r5,r5,ror#5 @ from BODY_00_151612add r2,r2,r31613eor r0,r0,r5,ror#19 @ Sigma1(e)1614add r2,r2,r1 @ X[i]1615ldr r3,[r14],#4 @ *K256++1616add r8,r8,r2 @ h+=X[i]1617str r2,[sp,#11*4]1618eor r2,r6,r71619add r8,r8,r0,ror#6 @ h+=Sigma1(e)1620and r2,r2,r51621add r8,r8,r3 @ h+=K256[i]1622eor r2,r2,r7 @ Ch(e,f,g)1623eor r0,r9,r9,ror#111624add r8,r8,r2 @ h+=Ch(e,f,g)1625#if 27==311626and r3,r3,#0xff1627cmp r3,#0xf2 @ done?1628#endif1629#if 27<151630# if __ARM_ARCH__>=71631ldr r2,[r1],#4 @ prefetch1632# else1633ldrb r2,[r1,#3]1634# endif1635eor r3,r9,r10 @ a^b, b^c in next round1636#else1637ldr r2,[sp,#13*4] @ from future BODY_16_xx1638eor r3,r9,r10 @ a^b, b^c in next round1639ldr r1,[sp,#10*4] @ from future BODY_16_xx1640#endif1641eor r0,r0,r9,ror#20 @ Sigma0(a)1642and r12,r12,r3 @ (b^c)&=(a^b)1643add r4,r4,r8 @ d+=h1644eor r12,r12,r10 @ Maj(a,b,c)1645add r8,r8,r0,ror#2 @ h+=Sigma0(a)1646@ add r8,r8,r12 @ h+=Maj(a,b,c)1647@ ldr r2,[sp,#13*4] @ 281648@ ldr r1,[sp,#10*4]1649mov r0,r2,ror#71650add r8,r8,r12 @ h+=Maj(a,b,c) from the past1651mov r12,r1,ror#171652eor r0,r0,r2,ror#181653eor r12,r12,r1,ror#191654eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])1655ldr r2,[sp,#12*4]1656eor r12,r12,r1,lsr#10 @ sigma1(X[i+14])1657ldr r1,[sp,#5*4]16581659add r12,r12,r01660eor r0,r4,r4,ror#5 @ from BODY_00_151661add r2,r2,r121662eor r0,r0,r4,ror#19 @ Sigma1(e)1663add r2,r2,r1 @ X[i]1664ldr r12,[r14],#4 @ *K256++1665add r7,r7,r2 @ h+=X[i]1666str r2,[sp,#12*4]1667eor r2,r5,r61668add r7,r7,r0,ror#6 @ h+=Sigma1(e)1669and r2,r2,r41670add r7,r7,r12 @ h+=K256[i]1671eor r2,r2,r6 @ Ch(e,f,g)1672eor r0,r8,r8,ror#111673add r7,r7,r2 @ h+=Ch(e,f,g)1674#if 28==311675and r12,r12,#0xff1676cmp r12,#0xf2 @ done?1677#endif1678#if 28<151679# if __ARM_ARCH__>=71680ldr r2,[r1],#4 @ prefetch1681# else1682ldrb r2,[r1,#3]1683# endif1684eor r12,r8,r9 @ a^b, b^c in next round1685#else1686ldr r2,[sp,#14*4] @ from future BODY_16_xx1687eor r12,r8,r9 @ a^b, b^c in next round1688ldr r1,[sp,#11*4] @ from future BODY_16_xx1689#endif1690eor r0,r0,r8,ror#20 @ Sigma0(a)1691and r3,r3,r12 @ (b^c)&=(a^b)1692add r11,r11,r7 @ d+=h1693eor r3,r3,r9 @ Maj(a,b,c)1694add r7,r7,r0,ror#2 @ h+=Sigma0(a)1695@ add r7,r7,r3 @ h+=Maj(a,b,c)1696@ ldr r2,[sp,#14*4] @ 291697@ ldr r1,[sp,#11*4]1698mov r0,r2,ror#71699add r7,r7,r3 @ h+=Maj(a,b,c) from the past1700mov r3,r1,ror#171701eor r0,r0,r2,ror#181702eor r3,r3,r1,ror#191703eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])1704ldr r2,[sp,#13*4]1705eor r3,r3,r1,lsr#10 @ sigma1(X[i+14])1706ldr r1,[sp,#6*4]17071708add r3,r3,r01709eor r0,r11,r11,ror#5 @ from BODY_00_151710add r2,r2,r31711eor r0,r0,r11,ror#19 @ Sigma1(e)1712add r2,r2,r1 @ X[i]1713ldr r3,[r14],#4 @ *K256++1714add r6,r6,r2 @ h+=X[i]1715str r2,[sp,#13*4]1716eor r2,r4,r51717add r6,r6,r0,ror#6 @ h+=Sigma1(e)1718and r2,r2,r111719add r6,r6,r3 @ h+=K256[i]1720eor r2,r2,r5 @ Ch(e,f,g)1721eor r0,r7,r7,ror#111722add r6,r6,r2 @ h+=Ch(e,f,g)1723#if 29==311724and r3,r3,#0xff1725cmp r3,#0xf2 @ done?1726#endif1727#if 29<151728# if __ARM_ARCH__>=71729ldr r2,[r1],#4 @ prefetch1730# else1731ldrb r2,[r1,#3]1732# endif1733eor r3,r7,r8 @ a^b, b^c in next round1734#else1735ldr r2,[sp,#15*4] @ from future BODY_16_xx1736eor r3,r7,r8 @ a^b, b^c in next round1737ldr r1,[sp,#12*4] @ from future BODY_16_xx1738#endif1739eor r0,r0,r7,ror#20 @ Sigma0(a)1740and r12,r12,r3 @ (b^c)&=(a^b)1741add r10,r10,r6 @ d+=h1742eor r12,r12,r8 @ Maj(a,b,c)1743add r6,r6,r0,ror#2 @ h+=Sigma0(a)1744@ add r6,r6,r12 @ h+=Maj(a,b,c)1745@ ldr r2,[sp,#15*4] @ 301746@ ldr r1,[sp,#12*4]1747mov r0,r2,ror#71748add r6,r6,r12 @ h+=Maj(a,b,c) from the past1749mov r12,r1,ror#171750eor r0,r0,r2,ror#181751eor r12,r12,r1,ror#191752eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])1753ldr r2,[sp,#14*4]1754eor r12,r12,r1,lsr#10 @ sigma1(X[i+14])1755ldr r1,[sp,#7*4]17561757add r12,r12,r01758eor r0,r10,r10,ror#5 @ from BODY_00_151759add r2,r2,r121760eor r0,r0,r10,ror#19 @ Sigma1(e)1761add r2,r2,r1 @ X[i]1762ldr r12,[r14],#4 @ *K256++1763add r5,r5,r2 @ h+=X[i]1764str r2,[sp,#14*4]1765eor r2,r11,r41766add r5,r5,r0,ror#6 @ h+=Sigma1(e)1767and r2,r2,r101768add r5,r5,r12 @ h+=K256[i]1769eor r2,r2,r4 @ Ch(e,f,g)1770eor r0,r6,r6,ror#111771add r5,r5,r2 @ h+=Ch(e,f,g)1772#if 30==311773and r12,r12,#0xff1774cmp r12,#0xf2 @ done?1775#endif1776#if 30<151777# if __ARM_ARCH__>=71778ldr r2,[r1],#4 @ prefetch1779# else1780ldrb r2,[r1,#3]1781# endif1782eor r12,r6,r7 @ a^b, b^c in next round1783#else1784ldr r2,[sp,#0*4] @ from future BODY_16_xx1785eor r12,r6,r7 @ a^b, b^c in next round1786ldr r1,[sp,#13*4] @ from future BODY_16_xx1787#endif1788eor r0,r0,r6,ror#20 @ Sigma0(a)1789and r3,r3,r12 @ (b^c)&=(a^b)1790add r9,r9,r5 @ d+=h1791eor r3,r3,r7 @ Maj(a,b,c)1792add r5,r5,r0,ror#2 @ h+=Sigma0(a)1793@ add r5,r5,r3 @ h+=Maj(a,b,c)1794@ ldr r2,[sp,#0*4] @ 311795@ ldr r1,[sp,#13*4]1796mov r0,r2,ror#71797add r5,r5,r3 @ h+=Maj(a,b,c) from the past1798mov r3,r1,ror#171799eor r0,r0,r2,ror#181800eor r3,r3,r1,ror#191801eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])1802ldr r2,[sp,#15*4]1803eor r3,r3,r1,lsr#10 @ sigma1(X[i+14])1804ldr r1,[sp,#8*4]18051806add r3,r3,r01807eor r0,r9,r9,ror#5 @ from BODY_00_151808add r2,r2,r31809eor r0,r0,r9,ror#19 @ Sigma1(e)1810add r2,r2,r1 @ X[i]1811ldr r3,[r14],#4 @ *K256++1812add r4,r4,r2 @ h+=X[i]1813str r2,[sp,#15*4]1814eor r2,r10,r111815add r4,r4,r0,ror#6 @ h+=Sigma1(e)1816and r2,r2,r91817add r4,r4,r3 @ h+=K256[i]1818eor r2,r2,r11 @ Ch(e,f,g)1819eor r0,r5,r5,ror#111820add r4,r4,r2 @ h+=Ch(e,f,g)1821#if 31==311822and r3,r3,#0xff1823cmp r3,#0xf2 @ done?1824#endif1825#if 31<151826# if __ARM_ARCH__>=71827ldr r2,[r1],#4 @ prefetch1828# else1829ldrb r2,[r1,#3]1830# endif1831eor r3,r5,r6 @ a^b, b^c in next round1832#else1833ldr r2,[sp,#1*4] @ from future BODY_16_xx1834eor r3,r5,r6 @ a^b, b^c in next round1835ldr r1,[sp,#14*4] @ from future BODY_16_xx1836#endif1837eor r0,r0,r5,ror#20 @ Sigma0(a)1838and r12,r12,r3 @ (b^c)&=(a^b)1839add r8,r8,r4 @ d+=h1840eor r12,r12,r6 @ Maj(a,b,c)1841add r4,r4,r0,ror#2 @ h+=Sigma0(a)1842@ add r4,r4,r12 @ h+=Maj(a,b,c)1843#ifdef __thumb2__1844ite eq @ Thumb2 thing, sanity check in ARM1845#endif1846ldreq r3,[sp,#16*4] @ pull ctx1847bne .Lrounds_16_xx18481849add r4,r4,r12 @ h+=Maj(a,b,c) from the past1850ldr r0,[r3,#0]1851ldr r2,[r3,#4]1852ldr r12,[r3,#8]1853add r4,r4,r01854ldr r0,[r3,#12]1855add r5,r5,r21856ldr r2,[r3,#16]1857add r6,r6,r121858ldr r12,[r3,#20]1859add r7,r7,r01860ldr r0,[r3,#24]1861add r8,r8,r21862ldr r2,[r3,#28]1863add r9,r9,r121864ldr r1,[sp,#17*4] @ pull inp1865ldr r12,[sp,#18*4] @ pull inp+len1866add r10,r10,r01867add r11,r11,r21868stmia r3,{r4,r5,r6,r7,r8,r9,r10,r11}1869cmp r1,r121870sub r14,r14,#256 @ rewind Ktbl1871bne .Loop18721873add sp,sp,#19*4 @ destroy frame1874#if __ARM_ARCH__>=51875ldmia sp!,{r4,r5,r6,r7,r8,r9,r10,r11,pc}1876#else1877ldmia sp!,{r4,r5,r6,r7,r8,r9,r10,r11,lr}1878tst lr,#11879moveq pc,lr @ be binary compatible with V4, yet1880.word 0xe12fff1e @ interoperable with Thumb ISA:-)1881#endif1882.size sha256_block_data_order,.-sha256_block_data_order1883#if __ARM_MAX_ARCH__>=71884.arch armv7-a1885.fpu neon18861887.globl sha256_block_data_order_neon1888.type sha256_block_data_order_neon,%function1889.align 51890.skip 161891sha256_block_data_order_neon:1892.LNEON:1893stmdb sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr}18941895sub r11,sp,#16*4+161896adr r14,K2561897bic r11,r11,#15 @ align for 128-bit stores1898mov r12,sp1899mov sp,r11 @ alloca1900add r2,r1,r2,lsl#6 @ len to point at the end of inp19011902vld1.8 {q0},[r1]!1903vld1.8 {q1},[r1]!1904vld1.8 {q2},[r1]!1905vld1.8 {q3},[r1]!1906vld1.32 {q8},[r14,:128]!1907vld1.32 {q9},[r14,:128]!1908vld1.32 {q10},[r14,:128]!1909vld1.32 {q11},[r14,:128]!1910vrev32.8 q0,q0 @ yes, even on1911str r0,[sp,#64]1912vrev32.8 q1,q1 @ big-endian1913str r1,[sp,#68]1914mov r1,sp1915vrev32.8 q2,q21916str r2,[sp,#72]1917vrev32.8 q3,q31918str r12,[sp,#76] @ save original sp1919vadd.i32 q8,q8,q01920vadd.i32 q9,q9,q11921vst1.32 {q8},[r1,:128]!1922vadd.i32 q10,q10,q21923vst1.32 {q9},[r1,:128]!1924vadd.i32 q11,q11,q31925vst1.32 {q10},[r1,:128]!1926vst1.32 {q11},[r1,:128]!19271928ldmia r0,{r4,r5,r6,r7,r8,r9,r10,r11}1929sub r1,r1,#641930ldr r2,[sp,#0]1931eor r12,r12,r121932eor r3,r5,r61933b .L_00_4819341935.align 41936.L_00_48:1937vext.8 q8,q0,q1,#41938add r11,r11,r21939eor r2,r9,r101940eor r0,r8,r8,ror#51941vext.8 q9,q2,q3,#41942add r4,r4,r121943and r2,r2,r81944eor r12,r0,r8,ror#191945vshr.u32 q10,q8,#71946eor r0,r4,r4,ror#111947eor r2,r2,r101948vadd.i32 q0,q0,q91949add r11,r11,r12,ror#61950eor r12,r4,r51951vshr.u32 q9,q8,#31952eor r0,r0,r4,ror#201953add r11,r11,r21954vsli.32 q10,q8,#251955ldr r2,[sp,#4]1956and r3,r3,r121957vshr.u32 q11,q8,#181958add r7,r7,r111959add r11,r11,r0,ror#21960eor r3,r3,r51961veor q9,q9,q101962add r10,r10,r21963vsli.32 q11,q8,#141964eor r2,r8,r91965eor r0,r7,r7,ror#51966vshr.u32 d24,d7,#171967add r11,r11,r31968and r2,r2,r71969veor q9,q9,q111970eor r3,r0,r7,ror#191971eor r0,r11,r11,ror#111972vsli.32 d24,d7,#151973eor r2,r2,r91974add r10,r10,r3,ror#61975vshr.u32 d25,d7,#101976eor r3,r11,r41977eor r0,r0,r11,ror#201978vadd.i32 q0,q0,q91979add r10,r10,r21980ldr r2,[sp,#8]1981veor d25,d25,d241982and r12,r12,r31983add r6,r6,r101984vshr.u32 d24,d7,#191985add r10,r10,r0,ror#21986eor r12,r12,r41987vsli.32 d24,d7,#131988add r9,r9,r21989eor r2,r7,r81990veor d25,d25,d241991eor r0,r6,r6,ror#51992add r10,r10,r121993vadd.i32 d0,d0,d251994and r2,r2,r61995eor r12,r0,r6,ror#191996vshr.u32 d24,d0,#171997eor r0,r10,r10,ror#111998eor r2,r2,r81999vsli.32 d24,d0,#152000add r9,r9,r12,ror#62001eor r12,r10,r112002vshr.u32 d25,d0,#102003eor r0,r0,r10,ror#202004add r9,r9,r22005veor d25,d25,d242006ldr r2,[sp,#12]2007and r3,r3,r122008vshr.u32 d24,d0,#192009add r5,r5,r92010add r9,r9,r0,ror#22011eor r3,r3,r112012vld1.32 {q8},[r14,:128]!2013add r8,r8,r22014vsli.32 d24,d0,#132015eor r2,r6,r72016eor r0,r5,r5,ror#52017veor d25,d25,d242018add r9,r9,r32019and r2,r2,r52020vadd.i32 d1,d1,d252021eor r3,r0,r5,ror#192022eor r0,r9,r9,ror#112023vadd.i32 q8,q8,q02024eor r2,r2,r72025add r8,r8,r3,ror#62026eor r3,r9,r102027eor r0,r0,r9,ror#202028add r8,r8,r22029ldr r2,[sp,#16]2030and r12,r12,r32031add r4,r4,r82032vst1.32 {q8},[r1,:128]!2033add r8,r8,r0,ror#22034eor r12,r12,r102035vext.8 q8,q1,q2,#42036add r7,r7,r22037eor r2,r5,r62038eor r0,r4,r4,ror#52039vext.8 q9,q3,q0,#42040add r8,r8,r122041and r2,r2,r42042eor r12,r0,r4,ror#192043vshr.u32 q10,q8,#72044eor r0,r8,r8,ror#112045eor r2,r2,r62046vadd.i32 q1,q1,q92047add r7,r7,r12,ror#62048eor r12,r8,r92049vshr.u32 q9,q8,#32050eor r0,r0,r8,ror#202051add r7,r7,r22052vsli.32 q10,q8,#252053ldr r2,[sp,#20]2054and r3,r3,r122055vshr.u32 q11,q8,#182056add r11,r11,r72057add r7,r7,r0,ror#22058eor r3,r3,r92059veor q9,q9,q102060add r6,r6,r22061vsli.32 q11,q8,#142062eor r2,r4,r52063eor r0,r11,r11,ror#52064vshr.u32 d24,d1,#172065add r7,r7,r32066and r2,r2,r112067veor q9,q9,q112068eor r3,r0,r11,ror#192069eor r0,r7,r7,ror#112070vsli.32 d24,d1,#152071eor r2,r2,r52072add r6,r6,r3,ror#62073vshr.u32 d25,d1,#102074eor r3,r7,r82075eor r0,r0,r7,ror#202076vadd.i32 q1,q1,q92077add r6,r6,r22078ldr r2,[sp,#24]2079veor d25,d25,d242080and r12,r12,r32081add r10,r10,r62082vshr.u32 d24,d1,#192083add r6,r6,r0,ror#22084eor r12,r12,r82085vsli.32 d24,d1,#132086add r5,r5,r22087eor r2,r11,r42088veor d25,d25,d242089eor r0,r10,r10,ror#52090add r6,r6,r122091vadd.i32 d2,d2,d252092and r2,r2,r102093eor r12,r0,r10,ror#192094vshr.u32 d24,d2,#172095eor r0,r6,r6,ror#112096eor r2,r2,r42097vsli.32 d24,d2,#152098add r5,r5,r12,ror#62099eor r12,r6,r72100vshr.u32 d25,d2,#102101eor r0,r0,r6,ror#202102add r5,r5,r22103veor d25,d25,d242104ldr r2,[sp,#28]2105and r3,r3,r122106vshr.u32 d24,d2,#192107add r9,r9,r52108add r5,r5,r0,ror#22109eor r3,r3,r72110vld1.32 {q8},[r14,:128]!2111add r4,r4,r22112vsli.32 d24,d2,#132113eor r2,r10,r112114eor r0,r9,r9,ror#52115veor d25,d25,d242116add r5,r5,r32117and r2,r2,r92118vadd.i32 d3,d3,d252119eor r3,r0,r9,ror#192120eor r0,r5,r5,ror#112121vadd.i32 q8,q8,q12122eor r2,r2,r112123add r4,r4,r3,ror#62124eor r3,r5,r62125eor r0,r0,r5,ror#202126add r4,r4,r22127ldr r2,[sp,#32]2128and r12,r12,r32129add r8,r8,r42130vst1.32 {q8},[r1,:128]!2131add r4,r4,r0,ror#22132eor r12,r12,r62133vext.8 q8,q2,q3,#42134add r11,r11,r22135eor r2,r9,r102136eor r0,r8,r8,ror#52137vext.8 q9,q0,q1,#42138add r4,r4,r122139and r2,r2,r82140eor r12,r0,r8,ror#192141vshr.u32 q10,q8,#72142eor r0,r4,r4,ror#112143eor r2,r2,r102144vadd.i32 q2,q2,q92145add r11,r11,r12,ror#62146eor r12,r4,r52147vshr.u32 q9,q8,#32148eor r0,r0,r4,ror#202149add r11,r11,r22150vsli.32 q10,q8,#252151ldr r2,[sp,#36]2152and r3,r3,r122153vshr.u32 q11,q8,#182154add r7,r7,r112155add r11,r11,r0,ror#22156eor r3,r3,r52157veor q9,q9,q102158add r10,r10,r22159vsli.32 q11,q8,#142160eor r2,r8,r92161eor r0,r7,r7,ror#52162vshr.u32 d24,d3,#172163add r11,r11,r32164and r2,r2,r72165veor q9,q9,q112166eor r3,r0,r7,ror#192167eor r0,r11,r11,ror#112168vsli.32 d24,d3,#152169eor r2,r2,r92170add r10,r10,r3,ror#62171vshr.u32 d25,d3,#102172eor r3,r11,r42173eor r0,r0,r11,ror#202174vadd.i32 q2,q2,q92175add r10,r10,r22176ldr r2,[sp,#40]2177veor d25,d25,d242178and r12,r12,r32179add r6,r6,r102180vshr.u32 d24,d3,#192181add r10,r10,r0,ror#22182eor r12,r12,r42183vsli.32 d24,d3,#132184add r9,r9,r22185eor r2,r7,r82186veor d25,d25,d242187eor r0,r6,r6,ror#52188add r10,r10,r122189vadd.i32 d4,d4,d252190and r2,r2,r62191eor r12,r0,r6,ror#192192vshr.u32 d24,d4,#172193eor r0,r10,r10,ror#112194eor r2,r2,r82195vsli.32 d24,d4,#152196add r9,r9,r12,ror#62197eor r12,r10,r112198vshr.u32 d25,d4,#102199eor r0,r0,r10,ror#202200add r9,r9,r22201veor d25,d25,d242202ldr r2,[sp,#44]2203and r3,r3,r122204vshr.u32 d24,d4,#192205add r5,r5,r92206add r9,r9,r0,ror#22207eor r3,r3,r112208vld1.32 {q8},[r14,:128]!2209add r8,r8,r22210vsli.32 d24,d4,#132211eor r2,r6,r72212eor r0,r5,r5,ror#52213veor d25,d25,d242214add r9,r9,r32215and r2,r2,r52216vadd.i32 d5,d5,d252217eor r3,r0,r5,ror#192218eor r0,r9,r9,ror#112219vadd.i32 q8,q8,q22220eor r2,r2,r72221add r8,r8,r3,ror#62222eor r3,r9,r102223eor r0,r0,r9,ror#202224add r8,r8,r22225ldr r2,[sp,#48]2226and r12,r12,r32227add r4,r4,r82228vst1.32 {q8},[r1,:128]!2229add r8,r8,r0,ror#22230eor r12,r12,r102231vext.8 q8,q3,q0,#42232add r7,r7,r22233eor r2,r5,r62234eor r0,r4,r4,ror#52235vext.8 q9,q1,q2,#42236add r8,r8,r122237and r2,r2,r42238eor r12,r0,r4,ror#192239vshr.u32 q10,q8,#72240eor r0,r8,r8,ror#112241eor r2,r2,r62242vadd.i32 q3,q3,q92243add r7,r7,r12,ror#62244eor r12,r8,r92245vshr.u32 q9,q8,#32246eor r0,r0,r8,ror#202247add r7,r7,r22248vsli.32 q10,q8,#252249ldr r2,[sp,#52]2250and r3,r3,r122251vshr.u32 q11,q8,#182252add r11,r11,r72253add r7,r7,r0,ror#22254eor r3,r3,r92255veor q9,q9,q102256add r6,r6,r22257vsli.32 q11,q8,#142258eor r2,r4,r52259eor r0,r11,r11,ror#52260vshr.u32 d24,d5,#172261add r7,r7,r32262and r2,r2,r112263veor q9,q9,q112264eor r3,r0,r11,ror#192265eor r0,r7,r7,ror#112266vsli.32 d24,d5,#152267eor r2,r2,r52268add r6,r6,r3,ror#62269vshr.u32 d25,d5,#102270eor r3,r7,r82271eor r0,r0,r7,ror#202272vadd.i32 q3,q3,q92273add r6,r6,r22274ldr r2,[sp,#56]2275veor d25,d25,d242276and r12,r12,r32277add r10,r10,r62278vshr.u32 d24,d5,#192279add r6,r6,r0,ror#22280eor r12,r12,r82281vsli.32 d24,d5,#132282add r5,r5,r22283eor r2,r11,r42284veor d25,d25,d242285eor r0,r10,r10,ror#52286add r6,r6,r122287vadd.i32 d6,d6,d252288and r2,r2,r102289eor r12,r0,r10,ror#192290vshr.u32 d24,d6,#172291eor r0,r6,r6,ror#112292eor r2,r2,r42293vsli.32 d24,d6,#152294add r5,r5,r12,ror#62295eor r12,r6,r72296vshr.u32 d25,d6,#102297eor r0,r0,r6,ror#202298add r5,r5,r22299veor d25,d25,d242300ldr r2,[sp,#60]2301and r3,r3,r122302vshr.u32 d24,d6,#192303add r9,r9,r52304add r5,r5,r0,ror#22305eor r3,r3,r72306vld1.32 {q8},[r14,:128]!2307add r4,r4,r22308vsli.32 d24,d6,#132309eor r2,r10,r112310eor r0,r9,r9,ror#52311veor d25,d25,d242312add r5,r5,r32313and r2,r2,r92314vadd.i32 d7,d7,d252315eor r3,r0,r9,ror#192316eor r0,r5,r5,ror#112317vadd.i32 q8,q8,q32318eor r2,r2,r112319add r4,r4,r3,ror#62320eor r3,r5,r62321eor r0,r0,r5,ror#202322add r4,r4,r22323ldr r2,[r14]2324and r12,r12,r32325add r8,r8,r42326vst1.32 {q8},[r1,:128]!2327add r4,r4,r0,ror#22328eor r12,r12,r62329teq r2,#0 @ check for K256 terminator2330ldr r2,[sp,#0]2331sub r1,r1,#642332bne .L_00_4823332334ldr r1,[sp,#68]2335ldr r0,[sp,#72]2336sub r14,r14,#256 @ rewind r142337teq r1,r02338it eq2339subeq r1,r1,#64 @ avoid SEGV2340vld1.8 {q0},[r1]! @ load next input block2341vld1.8 {q1},[r1]!2342vld1.8 {q2},[r1]!2343vld1.8 {q3},[r1]!2344it ne2345strne r1,[sp,#68]2346mov r1,sp2347add r11,r11,r22348eor r2,r9,r102349eor r0,r8,r8,ror#52350add r4,r4,r122351vld1.32 {q8},[r14,:128]!2352and r2,r2,r82353eor r12,r0,r8,ror#192354eor r0,r4,r4,ror#112355eor r2,r2,r102356vrev32.8 q0,q02357add r11,r11,r12,ror#62358eor r12,r4,r52359eor r0,r0,r4,ror#202360add r11,r11,r22361vadd.i32 q8,q8,q02362ldr r2,[sp,#4]2363and r3,r3,r122364add r7,r7,r112365add r11,r11,r0,ror#22366eor r3,r3,r52367add r10,r10,r22368eor r2,r8,r92369eor r0,r7,r7,ror#52370add r11,r11,r32371and r2,r2,r72372eor r3,r0,r7,ror#192373eor r0,r11,r11,ror#112374eor r2,r2,r92375add r10,r10,r3,ror#62376eor r3,r11,r42377eor r0,r0,r11,ror#202378add r10,r10,r22379ldr r2,[sp,#8]2380and r12,r12,r32381add r6,r6,r102382add r10,r10,r0,ror#22383eor r12,r12,r42384add r9,r9,r22385eor r2,r7,r82386eor r0,r6,r6,ror#52387add r10,r10,r122388and r2,r2,r62389eor r12,r0,r6,ror#192390eor r0,r10,r10,ror#112391eor r2,r2,r82392add r9,r9,r12,ror#62393eor r12,r10,r112394eor r0,r0,r10,ror#202395add r9,r9,r22396ldr r2,[sp,#12]2397and r3,r3,r122398add r5,r5,r92399add r9,r9,r0,ror#22400eor r3,r3,r112401add r8,r8,r22402eor r2,r6,r72403eor r0,r5,r5,ror#52404add r9,r9,r32405and r2,r2,r52406eor r3,r0,r5,ror#192407eor r0,r9,r9,ror#112408eor r2,r2,r72409add r8,r8,r3,ror#62410eor r3,r9,r102411eor r0,r0,r9,ror#202412add r8,r8,r22413ldr r2,[sp,#16]2414and r12,r12,r32415add r4,r4,r82416add r8,r8,r0,ror#22417eor r12,r12,r102418vst1.32 {q8},[r1,:128]!2419add r7,r7,r22420eor r2,r5,r62421eor r0,r4,r4,ror#52422add r8,r8,r122423vld1.32 {q8},[r14,:128]!2424and r2,r2,r42425eor r12,r0,r4,ror#192426eor r0,r8,r8,ror#112427eor r2,r2,r62428vrev32.8 q1,q12429add r7,r7,r12,ror#62430eor r12,r8,r92431eor r0,r0,r8,ror#202432add r7,r7,r22433vadd.i32 q8,q8,q12434ldr r2,[sp,#20]2435and r3,r3,r122436add r11,r11,r72437add r7,r7,r0,ror#22438eor r3,r3,r92439add r6,r6,r22440eor r2,r4,r52441eor r0,r11,r11,ror#52442add r7,r7,r32443and r2,r2,r112444eor r3,r0,r11,ror#192445eor r0,r7,r7,ror#112446eor r2,r2,r52447add r6,r6,r3,ror#62448eor r3,r7,r82449eor r0,r0,r7,ror#202450add r6,r6,r22451ldr r2,[sp,#24]2452and r12,r12,r32453add r10,r10,r62454add r6,r6,r0,ror#22455eor r12,r12,r82456add r5,r5,r22457eor r2,r11,r42458eor r0,r10,r10,ror#52459add r6,r6,r122460and r2,r2,r102461eor r12,r0,r10,ror#192462eor r0,r6,r6,ror#112463eor r2,r2,r42464add r5,r5,r12,ror#62465eor r12,r6,r72466eor r0,r0,r6,ror#202467add r5,r5,r22468ldr r2,[sp,#28]2469and r3,r3,r122470add r9,r9,r52471add r5,r5,r0,ror#22472eor r3,r3,r72473add r4,r4,r22474eor r2,r10,r112475eor r0,r9,r9,ror#52476add r5,r5,r32477and r2,r2,r92478eor r3,r0,r9,ror#192479eor r0,r5,r5,ror#112480eor r2,r2,r112481add r4,r4,r3,ror#62482eor r3,r5,r62483eor r0,r0,r5,ror#202484add r4,r4,r22485ldr r2,[sp,#32]2486and r12,r12,r32487add r8,r8,r42488add r4,r4,r0,ror#22489eor r12,r12,r62490vst1.32 {q8},[r1,:128]!2491add r11,r11,r22492eor r2,r9,r102493eor r0,r8,r8,ror#52494add r4,r4,r122495vld1.32 {q8},[r14,:128]!2496and r2,r2,r82497eor r12,r0,r8,ror#192498eor r0,r4,r4,ror#112499eor r2,r2,r102500vrev32.8 q2,q22501add r11,r11,r12,ror#62502eor r12,r4,r52503eor r0,r0,r4,ror#202504add r11,r11,r22505vadd.i32 q8,q8,q22506ldr r2,[sp,#36]2507and r3,r3,r122508add r7,r7,r112509add r11,r11,r0,ror#22510eor r3,r3,r52511add r10,r10,r22512eor r2,r8,r92513eor r0,r7,r7,ror#52514add r11,r11,r32515and r2,r2,r72516eor r3,r0,r7,ror#192517eor r0,r11,r11,ror#112518eor r2,r2,r92519add r10,r10,r3,ror#62520eor r3,r11,r42521eor r0,r0,r11,ror#202522add r10,r10,r22523ldr r2,[sp,#40]2524and r12,r12,r32525add r6,r6,r102526add r10,r10,r0,ror#22527eor r12,r12,r42528add r9,r9,r22529eor r2,r7,r82530eor r0,r6,r6,ror#52531add r10,r10,r122532and r2,r2,r62533eor r12,r0,r6,ror#192534eor r0,r10,r10,ror#112535eor r2,r2,r82536add r9,r9,r12,ror#62537eor r12,r10,r112538eor r0,r0,r10,ror#202539add r9,r9,r22540ldr r2,[sp,#44]2541and r3,r3,r122542add r5,r5,r92543add r9,r9,r0,ror#22544eor r3,r3,r112545add r8,r8,r22546eor r2,r6,r72547eor r0,r5,r5,ror#52548add r9,r9,r32549and r2,r2,r52550eor r3,r0,r5,ror#192551eor r0,r9,r9,ror#112552eor r2,r2,r72553add r8,r8,r3,ror#62554eor r3,r9,r102555eor r0,r0,r9,ror#202556add r8,r8,r22557ldr r2,[sp,#48]2558and r12,r12,r32559add r4,r4,r82560add r8,r8,r0,ror#22561eor r12,r12,r102562vst1.32 {q8},[r1,:128]!2563add r7,r7,r22564eor r2,r5,r62565eor r0,r4,r4,ror#52566add r8,r8,r122567vld1.32 {q8},[r14,:128]!2568and r2,r2,r42569eor r12,r0,r4,ror#192570eor r0,r8,r8,ror#112571eor r2,r2,r62572vrev32.8 q3,q32573add r7,r7,r12,ror#62574eor r12,r8,r92575eor r0,r0,r8,ror#202576add r7,r7,r22577vadd.i32 q8,q8,q32578ldr r2,[sp,#52]2579and r3,r3,r122580add r11,r11,r72581add r7,r7,r0,ror#22582eor r3,r3,r92583add r6,r6,r22584eor r2,r4,r52585eor r0,r11,r11,ror#52586add r7,r7,r32587and r2,r2,r112588eor r3,r0,r11,ror#192589eor r0,r7,r7,ror#112590eor r2,r2,r52591add r6,r6,r3,ror#62592eor r3,r7,r82593eor r0,r0,r7,ror#202594add r6,r6,r22595ldr r2,[sp,#56]2596and r12,r12,r32597add r10,r10,r62598add r6,r6,r0,ror#22599eor r12,r12,r82600add r5,r5,r22601eor r2,r11,r42602eor r0,r10,r10,ror#52603add r6,r6,r122604and r2,r2,r102605eor r12,r0,r10,ror#192606eor r0,r6,r6,ror#112607eor r2,r2,r42608add r5,r5,r12,ror#62609eor r12,r6,r72610eor r0,r0,r6,ror#202611add r5,r5,r22612ldr r2,[sp,#60]2613and r3,r3,r122614add r9,r9,r52615add r5,r5,r0,ror#22616eor r3,r3,r72617add r4,r4,r22618eor r2,r10,r112619eor r0,r9,r9,ror#52620add r5,r5,r32621and r2,r2,r92622eor r3,r0,r9,ror#192623eor r0,r5,r5,ror#112624eor r2,r2,r112625add r4,r4,r3,ror#62626eor r3,r5,r62627eor r0,r0,r5,ror#202628add r4,r4,r22629ldr r2,[sp,#64]2630and r12,r12,r32631add r8,r8,r42632add r4,r4,r0,ror#22633eor r12,r12,r62634vst1.32 {q8},[r1,:128]!2635ldr r0,[r2,#0]2636add r4,r4,r12 @ h+=Maj(a,b,c) from the past2637ldr r12,[r2,#4]2638ldr r3,[r2,#8]2639ldr r1,[r2,#12]2640add r4,r4,r0 @ accumulate2641ldr r0,[r2,#16]2642add r5,r5,r122643ldr r12,[r2,#20]2644add r6,r6,r32645ldr r3,[r2,#24]2646add r7,r7,r12647ldr r1,[r2,#28]2648add r8,r8,r02649str r4,[r2],#42650add r9,r9,r122651str r5,[r2],#42652add r10,r10,r32653str r6,[r2],#42654add r11,r11,r12655str r7,[r2],#42656stmia r2,{r8,r9,r10,r11}26572658ittte ne2659movne r1,sp2660ldrne r2,[sp,#0]2661eorne r12,r12,r122662ldreq sp,[sp,#76] @ restore original sp2663itt ne2664eorne r3,r5,r62665bne .L_00_4826662667ldmia sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,pc}2668.size sha256_block_data_order_neon,.-sha256_block_data_order_neon2669#endif2670#if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__)26712672# if defined(__thumb2__)2673# define INST(a,b,c,d) .byte c,d|0xc,a,b2674# else2675# define INST(a,b,c,d) .byte a,b,c,d2676# endif26772678.type sha256_block_data_order_armv8,%function2679.align 52680sha256_block_data_order_armv8:2681.LARMv8:2682vld1.32 {q0,q1},[r0]2683sub r3,r3,#256+322684add r2,r1,r2,lsl#6 @ len to point at the end of inp2685b .Loop_v826862687.align 42688.Loop_v8:2689vld1.8 {q8,q9},[r1]!2690vld1.8 {q10,q11},[r1]!2691vld1.32 {q12},[r3]!2692vrev32.8 q8,q82693vrev32.8 q9,q92694vrev32.8 q10,q102695vrev32.8 q11,q112696vmov q14,q0 @ offload2697vmov q15,q12698teq r1,r22699vld1.32 {q13},[r3]!2700vadd.i32 q12,q12,q82701INST(0xe2,0x03,0xfa,0xf3) @ sha256su0 q8,q92702vmov q2,q02703INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q122704INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q122705INST(0xe6,0x0c,0x64,0xf3) @ sha256su1 q8,q10,q112706vld1.32 {q12},[r3]!2707vadd.i32 q13,q13,q92708INST(0xe4,0x23,0xfa,0xf3) @ sha256su0 q9,q102709vmov q2,q02710INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q132711INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q132712INST(0xe0,0x2c,0x66,0xf3) @ sha256su1 q9,q11,q82713vld1.32 {q13},[r3]!2714vadd.i32 q12,q12,q102715INST(0xe6,0x43,0xfa,0xf3) @ sha256su0 q10,q112716vmov q2,q02717INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q122718INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q122719INST(0xe2,0x4c,0x60,0xf3) @ sha256su1 q10,q8,q92720vld1.32 {q12},[r3]!2721vadd.i32 q13,q13,q112722INST(0xe0,0x63,0xfa,0xf3) @ sha256su0 q11,q82723vmov q2,q02724INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q132725INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q132726INST(0xe4,0x6c,0x62,0xf3) @ sha256su1 q11,q9,q102727vld1.32 {q13},[r3]!2728vadd.i32 q12,q12,q82729INST(0xe2,0x03,0xfa,0xf3) @ sha256su0 q8,q92730vmov q2,q02731INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q122732INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q122733INST(0xe6,0x0c,0x64,0xf3) @ sha256su1 q8,q10,q112734vld1.32 {q12},[r3]!2735vadd.i32 q13,q13,q92736INST(0xe4,0x23,0xfa,0xf3) @ sha256su0 q9,q102737vmov q2,q02738INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q132739INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q132740INST(0xe0,0x2c,0x66,0xf3) @ sha256su1 q9,q11,q82741vld1.32 {q13},[r3]!2742vadd.i32 q12,q12,q102743INST(0xe6,0x43,0xfa,0xf3) @ sha256su0 q10,q112744vmov q2,q02745INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q122746INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q122747INST(0xe2,0x4c,0x60,0xf3) @ sha256su1 q10,q8,q92748vld1.32 {q12},[r3]!2749vadd.i32 q13,q13,q112750INST(0xe0,0x63,0xfa,0xf3) @ sha256su0 q11,q82751vmov q2,q02752INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q132753INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q132754INST(0xe4,0x6c,0x62,0xf3) @ sha256su1 q11,q9,q102755vld1.32 {q13},[r3]!2756vadd.i32 q12,q12,q82757INST(0xe2,0x03,0xfa,0xf3) @ sha256su0 q8,q92758vmov q2,q02759INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q122760INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q122761INST(0xe6,0x0c,0x64,0xf3) @ sha256su1 q8,q10,q112762vld1.32 {q12},[r3]!2763vadd.i32 q13,q13,q92764INST(0xe4,0x23,0xfa,0xf3) @ sha256su0 q9,q102765vmov q2,q02766INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q132767INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q132768INST(0xe0,0x2c,0x66,0xf3) @ sha256su1 q9,q11,q82769vld1.32 {q13},[r3]!2770vadd.i32 q12,q12,q102771INST(0xe6,0x43,0xfa,0xf3) @ sha256su0 q10,q112772vmov q2,q02773INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q122774INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q122775INST(0xe2,0x4c,0x60,0xf3) @ sha256su1 q10,q8,q92776vld1.32 {q12},[r3]!2777vadd.i32 q13,q13,q112778INST(0xe0,0x63,0xfa,0xf3) @ sha256su0 q11,q82779vmov q2,q02780INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q132781INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q132782INST(0xe4,0x6c,0x62,0xf3) @ sha256su1 q11,q9,q102783vld1.32 {q13},[r3]!2784vadd.i32 q12,q12,q82785vmov q2,q02786INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q122787INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q1227882789vld1.32 {q12},[r3]!2790vadd.i32 q13,q13,q92791vmov q2,q02792INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q132793INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q1327942795vld1.32 {q13},[r3]2796vadd.i32 q12,q12,q102797sub r3,r3,#256-16 @ rewind2798vmov q2,q02799INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q122800INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q1228012802vadd.i32 q13,q13,q112803vmov q2,q02804INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q132805INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q1328062807vadd.i32 q0,q0,q142808vadd.i32 q1,q1,q152809it ne2810bne .Loop_v828112812vst1.32 {q0,q1},[r0]28132814bx lr @ bx lr2815.size sha256_block_data_order_armv8,.-sha256_block_data_order_armv82816#endif2817.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,52,47,78,69,79,78,47,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,02818.align 22819.align 22820#if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__)28212822.hidden OPENSSL_armcap_P2823#endif282428252826