Path: blob/main/sys/contrib/openzfs/module/icp/asm-arm/sha2/sha256-armv7.S
48775 views
// SPDX-License-Identifier: Apache-2.01/*2* Copyright 2004-2022 The OpenSSL Project Authors. All Rights Reserved.3*4* Licensed under the Apache License, Version 2.0 (the "License");5* you may not use this file except in compliance with the License.6* You may obtain a copy of the License at7*8* https://www.apache.org/licenses/LICENSE-2.09*10* Unless required by applicable law or agreed to in writing, software11* distributed under the License is distributed on an "AS IS" BASIS,12* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.13* See the License for the specific language governing permissions and14* limitations under the License.15*/1617/*18* Portions Copyright (c) 2022 Tino Reichardt <[email protected]>19* - modified assembly to fit into OpenZFS20*/2122#if defined(__arm__)2324#ifndef __ARM_ARCH25# define __ARM_ARCH__ 726#else27# define __ARM_ARCH__ __ARM_ARCH28#endif2930#if defined(__thumb2__)31.syntax unified32.thumb33#else34.code 3235#endif3637.text3839.type K256,%object40.align 541K256:42.word 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba543.word 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed544.word 0xd807aa98,0x12835b01,0x243185be,0x550c7dc345.word 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf17446.word 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc47.word 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da48.word 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc749.word 0xc6e00bf3,0xd5a79147,0x06ca6351,0x1429296750.word 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d1351.word 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c8552.word 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a353.word 0xd192e819,0xd6990624,0xf40e3585,0x106aa07054.word 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb555.word 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff356.word 0x748f82ee,0x78a5636f,0x84c87814,0x8cc7020857.word 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f258.size K256,.-K25659.word 0 @ terminator6061.align 562.globl zfs_sha256_block_armv763.type zfs_sha256_block_armv7,%function64zfs_sha256_block_armv7:65.Lzfs_sha256_block_armv7:6667#if __ARM_ARCH__<7 && !defined(__thumb2__)68sub r3,pc,#8 @ zfs_sha256_block_armv769#else70adr r3,.Lzfs_sha256_block_armv771#endif7273add r2,r1,r2,lsl#6 @ len to point at the end of inp74stmdb sp!,{r0,r1,r2,r4-r11,lr}75ldmia r0,{r4,r5,r6,r7,r8,r9,r10,r11}76sub r14,r3,#256+32 @ K25677sub sp,sp,#16*4 @ alloca(X[16])78.Loop:79# if __ARM_ARCH__>=780ldr r2,[r1],#481# else82ldrb r2,[r1,#3]83# endif84eor r3,r5,r6 @ magic85eor r12,r12,r1286#if __ARM_ARCH__>=787@ ldr r2,[r1],#4 @ 088# if 0==1589str r1,[sp,#17*4] @ make room for r190# endif91eor r0,r8,r8,ror#592add r4,r4,r12 @ h+=Maj(a,b,c) from the past93eor r0,r0,r8,ror#19 @ Sigma1(e)94# ifndef __ARMEB__95rev r2,r296# endif97#else98@ ldrb r2,[r1,#3] @ 099add r4,r4,r12 @ h+=Maj(a,b,c) from the past100ldrb r12,[r1,#2]101ldrb r0,[r1,#1]102orr r2,r2,r12,lsl#8103ldrb r12,[r1],#4104orr r2,r2,r0,lsl#16105# if 0==15106str r1,[sp,#17*4] @ make room for r1107# endif108eor r0,r8,r8,ror#5109orr r2,r2,r12,lsl#24110eor r0,r0,r8,ror#19 @ Sigma1(e)111#endif112ldr r12,[r14],#4 @ *K256++113add r11,r11,r2 @ h+=X[i]114str r2,[sp,#0*4]115eor r2,r9,r10116add r11,r11,r0,ror#6 @ h+=Sigma1(e)117and r2,r2,r8118add r11,r11,r12 @ h+=K256[i]119eor r2,r2,r10 @ Ch(e,f,g)120eor r0,r4,r4,ror#11121add r11,r11,r2 @ h+=Ch(e,f,g)122#if 0==31123and r12,r12,#0xff124cmp r12,#0xf2 @ done?125#endif126#if 0<15127# if __ARM_ARCH__>=7128ldr r2,[r1],#4 @ prefetch129# else130ldrb r2,[r1,#3]131# endif132eor r12,r4,r5 @ a^b, b^c in next round133#else134ldr r2,[sp,#2*4] @ from future BODY_16_xx135eor r12,r4,r5 @ a^b, b^c in next round136ldr r1,[sp,#15*4] @ from future BODY_16_xx137#endif138eor r0,r0,r4,ror#20 @ Sigma0(a)139and r3,r3,r12 @ (b^c)&=(a^b)140add r7,r7,r11 @ d+=h141eor r3,r3,r5 @ Maj(a,b,c)142add r11,r11,r0,ror#2 @ h+=Sigma0(a)143@ add r11,r11,r3 @ h+=Maj(a,b,c)144#if __ARM_ARCH__>=7145@ ldr r2,[r1],#4 @ 1146# if 1==15147str r1,[sp,#17*4] @ make room for r1148# endif149eor r0,r7,r7,ror#5150add r11,r11,r3 @ h+=Maj(a,b,c) from the past151eor r0,r0,r7,ror#19 @ Sigma1(e)152# ifndef __ARMEB__153rev r2,r2154# endif155#else156@ ldrb r2,[r1,#3] @ 1157add r11,r11,r3 @ h+=Maj(a,b,c) from the past158ldrb r3,[r1,#2]159ldrb r0,[r1,#1]160orr r2,r2,r3,lsl#8161ldrb r3,[r1],#4162orr r2,r2,r0,lsl#16163# if 1==15164str r1,[sp,#17*4] @ make room for r1165# endif166eor r0,r7,r7,ror#5167orr r2,r2,r3,lsl#24168eor r0,r0,r7,ror#19 @ Sigma1(e)169#endif170ldr r3,[r14],#4 @ *K256++171add r10,r10,r2 @ h+=X[i]172str r2,[sp,#1*4]173eor r2,r8,r9174add r10,r10,r0,ror#6 @ h+=Sigma1(e)175and r2,r2,r7176add r10,r10,r3 @ h+=K256[i]177eor r2,r2,r9 @ Ch(e,f,g)178eor r0,r11,r11,ror#11179add r10,r10,r2 @ h+=Ch(e,f,g)180#if 1==31181and r3,r3,#0xff182cmp r3,#0xf2 @ done?183#endif184#if 1<15185# if __ARM_ARCH__>=7186ldr r2,[r1],#4 @ prefetch187# else188ldrb r2,[r1,#3]189# endif190eor r3,r11,r4 @ a^b, b^c in next round191#else192ldr r2,[sp,#3*4] @ from future BODY_16_xx193eor r3,r11,r4 @ a^b, b^c in next round194ldr r1,[sp,#0*4] @ from future BODY_16_xx195#endif196eor r0,r0,r11,ror#20 @ Sigma0(a)197and r12,r12,r3 @ (b^c)&=(a^b)198add r6,r6,r10 @ d+=h199eor r12,r12,r4 @ Maj(a,b,c)200add r10,r10,r0,ror#2 @ h+=Sigma0(a)201@ add r10,r10,r12 @ h+=Maj(a,b,c)202#if __ARM_ARCH__>=7203@ ldr r2,[r1],#4 @ 2204# if 2==15205str r1,[sp,#17*4] @ make room for r1206# endif207eor r0,r6,r6,ror#5208add r10,r10,r12 @ h+=Maj(a,b,c) from the past209eor r0,r0,r6,ror#19 @ Sigma1(e)210# ifndef __ARMEB__211rev r2,r2212# endif213#else214@ ldrb r2,[r1,#3] @ 2215add r10,r10,r12 @ h+=Maj(a,b,c) from the past216ldrb r12,[r1,#2]217ldrb r0,[r1,#1]218orr r2,r2,r12,lsl#8219ldrb r12,[r1],#4220orr r2,r2,r0,lsl#16221# if 2==15222str r1,[sp,#17*4] @ make room for r1223# endif224eor r0,r6,r6,ror#5225orr r2,r2,r12,lsl#24226eor r0,r0,r6,ror#19 @ Sigma1(e)227#endif228ldr r12,[r14],#4 @ *K256++229add r9,r9,r2 @ h+=X[i]230str r2,[sp,#2*4]231eor r2,r7,r8232add r9,r9,r0,ror#6 @ h+=Sigma1(e)233and r2,r2,r6234add r9,r9,r12 @ h+=K256[i]235eor r2,r2,r8 @ Ch(e,f,g)236eor r0,r10,r10,ror#11237add r9,r9,r2 @ h+=Ch(e,f,g)238#if 2==31239and r12,r12,#0xff240cmp r12,#0xf2 @ done?241#endif242#if 2<15243# if __ARM_ARCH__>=7244ldr r2,[r1],#4 @ prefetch245# else246ldrb r2,[r1,#3]247# endif248eor r12,r10,r11 @ a^b, b^c in next round249#else250ldr r2,[sp,#4*4] @ from future BODY_16_xx251eor r12,r10,r11 @ a^b, b^c in next round252ldr r1,[sp,#1*4] @ from future BODY_16_xx253#endif254eor r0,r0,r10,ror#20 @ Sigma0(a)255and r3,r3,r12 @ (b^c)&=(a^b)256add r5,r5,r9 @ d+=h257eor r3,r3,r11 @ Maj(a,b,c)258add r9,r9,r0,ror#2 @ h+=Sigma0(a)259@ add r9,r9,r3 @ h+=Maj(a,b,c)260#if __ARM_ARCH__>=7261@ ldr r2,[r1],#4 @ 3262# if 3==15263str r1,[sp,#17*4] @ make room for r1264# endif265eor r0,r5,r5,ror#5266add r9,r9,r3 @ h+=Maj(a,b,c) from the past267eor r0,r0,r5,ror#19 @ Sigma1(e)268# ifndef __ARMEB__269rev r2,r2270# endif271#else272@ ldrb r2,[r1,#3] @ 3273add r9,r9,r3 @ h+=Maj(a,b,c) from the past274ldrb r3,[r1,#2]275ldrb r0,[r1,#1]276orr r2,r2,r3,lsl#8277ldrb r3,[r1],#4278orr r2,r2,r0,lsl#16279# if 3==15280str r1,[sp,#17*4] @ make room for r1281# endif282eor r0,r5,r5,ror#5283orr r2,r2,r3,lsl#24284eor r0,r0,r5,ror#19 @ Sigma1(e)285#endif286ldr r3,[r14],#4 @ *K256++287add r8,r8,r2 @ h+=X[i]288str r2,[sp,#3*4]289eor r2,r6,r7290add r8,r8,r0,ror#6 @ h+=Sigma1(e)291and r2,r2,r5292add r8,r8,r3 @ h+=K256[i]293eor r2,r2,r7 @ Ch(e,f,g)294eor r0,r9,r9,ror#11295add r8,r8,r2 @ h+=Ch(e,f,g)296#if 3==31297and r3,r3,#0xff298cmp r3,#0xf2 @ done?299#endif300#if 3<15301# if __ARM_ARCH__>=7302ldr r2,[r1],#4 @ prefetch303# else304ldrb r2,[r1,#3]305# endif306eor r3,r9,r10 @ a^b, b^c in next round307#else308ldr r2,[sp,#5*4] @ from future BODY_16_xx309eor r3,r9,r10 @ a^b, b^c in next round310ldr r1,[sp,#2*4] @ from future BODY_16_xx311#endif312eor r0,r0,r9,ror#20 @ Sigma0(a)313and r12,r12,r3 @ (b^c)&=(a^b)314add r4,r4,r8 @ d+=h315eor r12,r12,r10 @ Maj(a,b,c)316add r8,r8,r0,ror#2 @ h+=Sigma0(a)317@ add r8,r8,r12 @ h+=Maj(a,b,c)318#if __ARM_ARCH__>=7319@ ldr r2,[r1],#4 @ 4320# if 4==15321str r1,[sp,#17*4] @ make room for r1322# endif323eor r0,r4,r4,ror#5324add r8,r8,r12 @ h+=Maj(a,b,c) from the past325eor r0,r0,r4,ror#19 @ Sigma1(e)326# ifndef __ARMEB__327rev r2,r2328# endif329#else330@ ldrb r2,[r1,#3] @ 4331add r8,r8,r12 @ h+=Maj(a,b,c) from the past332ldrb r12,[r1,#2]333ldrb r0,[r1,#1]334orr r2,r2,r12,lsl#8335ldrb r12,[r1],#4336orr r2,r2,r0,lsl#16337# if 4==15338str r1,[sp,#17*4] @ make room for r1339# endif340eor r0,r4,r4,ror#5341orr r2,r2,r12,lsl#24342eor r0,r0,r4,ror#19 @ Sigma1(e)343#endif344ldr r12,[r14],#4 @ *K256++345add r7,r7,r2 @ h+=X[i]346str r2,[sp,#4*4]347eor r2,r5,r6348add r7,r7,r0,ror#6 @ h+=Sigma1(e)349and r2,r2,r4350add r7,r7,r12 @ h+=K256[i]351eor r2,r2,r6 @ Ch(e,f,g)352eor r0,r8,r8,ror#11353add r7,r7,r2 @ h+=Ch(e,f,g)354#if 4==31355and r12,r12,#0xff356cmp r12,#0xf2 @ done?357#endif358#if 4<15359# if __ARM_ARCH__>=7360ldr r2,[r1],#4 @ prefetch361# else362ldrb r2,[r1,#3]363# endif364eor r12,r8,r9 @ a^b, b^c in next round365#else366ldr r2,[sp,#6*4] @ from future BODY_16_xx367eor r12,r8,r9 @ a^b, b^c in next round368ldr r1,[sp,#3*4] @ from future BODY_16_xx369#endif370eor r0,r0,r8,ror#20 @ Sigma0(a)371and r3,r3,r12 @ (b^c)&=(a^b)372add r11,r11,r7 @ d+=h373eor r3,r3,r9 @ Maj(a,b,c)374add r7,r7,r0,ror#2 @ h+=Sigma0(a)375@ add r7,r7,r3 @ h+=Maj(a,b,c)376#if __ARM_ARCH__>=7377@ ldr r2,[r1],#4 @ 5378# if 5==15379str r1,[sp,#17*4] @ make room for r1380# endif381eor r0,r11,r11,ror#5382add r7,r7,r3 @ h+=Maj(a,b,c) from the past383eor r0,r0,r11,ror#19 @ Sigma1(e)384# ifndef __ARMEB__385rev r2,r2386# endif387#else388@ ldrb r2,[r1,#3] @ 5389add r7,r7,r3 @ h+=Maj(a,b,c) from the past390ldrb r3,[r1,#2]391ldrb r0,[r1,#1]392orr r2,r2,r3,lsl#8393ldrb r3,[r1],#4394orr r2,r2,r0,lsl#16395# if 5==15396str r1,[sp,#17*4] @ make room for r1397# endif398eor r0,r11,r11,ror#5399orr r2,r2,r3,lsl#24400eor r0,r0,r11,ror#19 @ Sigma1(e)401#endif402ldr r3,[r14],#4 @ *K256++403add r6,r6,r2 @ h+=X[i]404str r2,[sp,#5*4]405eor r2,r4,r5406add r6,r6,r0,ror#6 @ h+=Sigma1(e)407and r2,r2,r11408add r6,r6,r3 @ h+=K256[i]409eor r2,r2,r5 @ Ch(e,f,g)410eor r0,r7,r7,ror#11411add r6,r6,r2 @ h+=Ch(e,f,g)412#if 5==31413and r3,r3,#0xff414cmp r3,#0xf2 @ done?415#endif416#if 5<15417# if __ARM_ARCH__>=7418ldr r2,[r1],#4 @ prefetch419# else420ldrb r2,[r1,#3]421# endif422eor r3,r7,r8 @ a^b, b^c in next round423#else424ldr r2,[sp,#7*4] @ from future BODY_16_xx425eor r3,r7,r8 @ a^b, b^c in next round426ldr r1,[sp,#4*4] @ from future BODY_16_xx427#endif428eor r0,r0,r7,ror#20 @ Sigma0(a)429and r12,r12,r3 @ (b^c)&=(a^b)430add r10,r10,r6 @ d+=h431eor r12,r12,r8 @ Maj(a,b,c)432add r6,r6,r0,ror#2 @ h+=Sigma0(a)433@ add r6,r6,r12 @ h+=Maj(a,b,c)434#if __ARM_ARCH__>=7435@ ldr r2,[r1],#4 @ 6436# if 6==15437str r1,[sp,#17*4] @ make room for r1438# endif439eor r0,r10,r10,ror#5440add r6,r6,r12 @ h+=Maj(a,b,c) from the past441eor r0,r0,r10,ror#19 @ Sigma1(e)442# ifndef __ARMEB__443rev r2,r2444# endif445#else446@ ldrb r2,[r1,#3] @ 6447add r6,r6,r12 @ h+=Maj(a,b,c) from the past448ldrb r12,[r1,#2]449ldrb r0,[r1,#1]450orr r2,r2,r12,lsl#8451ldrb r12,[r1],#4452orr r2,r2,r0,lsl#16453# if 6==15454str r1,[sp,#17*4] @ make room for r1455# endif456eor r0,r10,r10,ror#5457orr r2,r2,r12,lsl#24458eor r0,r0,r10,ror#19 @ Sigma1(e)459#endif460ldr r12,[r14],#4 @ *K256++461add r5,r5,r2 @ h+=X[i]462str r2,[sp,#6*4]463eor r2,r11,r4464add r5,r5,r0,ror#6 @ h+=Sigma1(e)465and r2,r2,r10466add r5,r5,r12 @ h+=K256[i]467eor r2,r2,r4 @ Ch(e,f,g)468eor r0,r6,r6,ror#11469add r5,r5,r2 @ h+=Ch(e,f,g)470#if 6==31471and r12,r12,#0xff472cmp r12,#0xf2 @ done?473#endif474#if 6<15475# if __ARM_ARCH__>=7476ldr r2,[r1],#4 @ prefetch477# else478ldrb r2,[r1,#3]479# endif480eor r12,r6,r7 @ a^b, b^c in next round481#else482ldr r2,[sp,#8*4] @ from future BODY_16_xx483eor r12,r6,r7 @ a^b, b^c in next round484ldr r1,[sp,#5*4] @ from future BODY_16_xx485#endif486eor r0,r0,r6,ror#20 @ Sigma0(a)487and r3,r3,r12 @ (b^c)&=(a^b)488add r9,r9,r5 @ d+=h489eor r3,r3,r7 @ Maj(a,b,c)490add r5,r5,r0,ror#2 @ h+=Sigma0(a)491@ add r5,r5,r3 @ h+=Maj(a,b,c)492#if __ARM_ARCH__>=7493@ ldr r2,[r1],#4 @ 7494# if 7==15495str r1,[sp,#17*4] @ make room for r1496# endif497eor r0,r9,r9,ror#5498add r5,r5,r3 @ h+=Maj(a,b,c) from the past499eor r0,r0,r9,ror#19 @ Sigma1(e)500# ifndef __ARMEB__501rev r2,r2502# endif503#else504@ ldrb r2,[r1,#3] @ 7505add r5,r5,r3 @ h+=Maj(a,b,c) from the past506ldrb r3,[r1,#2]507ldrb r0,[r1,#1]508orr r2,r2,r3,lsl#8509ldrb r3,[r1],#4510orr r2,r2,r0,lsl#16511# if 7==15512str r1,[sp,#17*4] @ make room for r1513# endif514eor r0,r9,r9,ror#5515orr r2,r2,r3,lsl#24516eor r0,r0,r9,ror#19 @ Sigma1(e)517#endif518ldr r3,[r14],#4 @ *K256++519add r4,r4,r2 @ h+=X[i]520str r2,[sp,#7*4]521eor r2,r10,r11522add r4,r4,r0,ror#6 @ h+=Sigma1(e)523and r2,r2,r9524add r4,r4,r3 @ h+=K256[i]525eor r2,r2,r11 @ Ch(e,f,g)526eor r0,r5,r5,ror#11527add r4,r4,r2 @ h+=Ch(e,f,g)528#if 7==31529and r3,r3,#0xff530cmp r3,#0xf2 @ done?531#endif532#if 7<15533# if __ARM_ARCH__>=7534ldr r2,[r1],#4 @ prefetch535# else536ldrb r2,[r1,#3]537# endif538eor r3,r5,r6 @ a^b, b^c in next round539#else540ldr r2,[sp,#9*4] @ from future BODY_16_xx541eor r3,r5,r6 @ a^b, b^c in next round542ldr r1,[sp,#6*4] @ from future BODY_16_xx543#endif544eor r0,r0,r5,ror#20 @ Sigma0(a)545and r12,r12,r3 @ (b^c)&=(a^b)546add r8,r8,r4 @ d+=h547eor r12,r12,r6 @ Maj(a,b,c)548add r4,r4,r0,ror#2 @ h+=Sigma0(a)549@ add r4,r4,r12 @ h+=Maj(a,b,c)550#if __ARM_ARCH__>=7551@ ldr r2,[r1],#4 @ 8552# if 8==15553str r1,[sp,#17*4] @ make room for r1554# endif555eor r0,r8,r8,ror#5556add r4,r4,r12 @ h+=Maj(a,b,c) from the past557eor r0,r0,r8,ror#19 @ Sigma1(e)558# ifndef __ARMEB__559rev r2,r2560# endif561#else562@ ldrb r2,[r1,#3] @ 8563add r4,r4,r12 @ h+=Maj(a,b,c) from the past564ldrb r12,[r1,#2]565ldrb r0,[r1,#1]566orr r2,r2,r12,lsl#8567ldrb r12,[r1],#4568orr r2,r2,r0,lsl#16569# if 8==15570str r1,[sp,#17*4] @ make room for r1571# endif572eor r0,r8,r8,ror#5573orr r2,r2,r12,lsl#24574eor r0,r0,r8,ror#19 @ Sigma1(e)575#endif576ldr r12,[r14],#4 @ *K256++577add r11,r11,r2 @ h+=X[i]578str r2,[sp,#8*4]579eor r2,r9,r10580add r11,r11,r0,ror#6 @ h+=Sigma1(e)581and r2,r2,r8582add r11,r11,r12 @ h+=K256[i]583eor r2,r2,r10 @ Ch(e,f,g)584eor r0,r4,r4,ror#11585add r11,r11,r2 @ h+=Ch(e,f,g)586#if 8==31587and r12,r12,#0xff588cmp r12,#0xf2 @ done?589#endif590#if 8<15591# if __ARM_ARCH__>=7592ldr r2,[r1],#4 @ prefetch593# else594ldrb r2,[r1,#3]595# endif596eor r12,r4,r5 @ a^b, b^c in next round597#else598ldr r2,[sp,#10*4] @ from future BODY_16_xx599eor r12,r4,r5 @ a^b, b^c in next round600ldr r1,[sp,#7*4] @ from future BODY_16_xx601#endif602eor r0,r0,r4,ror#20 @ Sigma0(a)603and r3,r3,r12 @ (b^c)&=(a^b)604add r7,r7,r11 @ d+=h605eor r3,r3,r5 @ Maj(a,b,c)606add r11,r11,r0,ror#2 @ h+=Sigma0(a)607@ add r11,r11,r3 @ h+=Maj(a,b,c)608#if __ARM_ARCH__>=7609@ ldr r2,[r1],#4 @ 9610# if 9==15611str r1,[sp,#17*4] @ make room for r1612# endif613eor r0,r7,r7,ror#5614add r11,r11,r3 @ h+=Maj(a,b,c) from the past615eor r0,r0,r7,ror#19 @ Sigma1(e)616# ifndef __ARMEB__617rev r2,r2618# endif619#else620@ ldrb r2,[r1,#3] @ 9621add r11,r11,r3 @ h+=Maj(a,b,c) from the past622ldrb r3,[r1,#2]623ldrb r0,[r1,#1]624orr r2,r2,r3,lsl#8625ldrb r3,[r1],#4626orr r2,r2,r0,lsl#16627# if 9==15628str r1,[sp,#17*4] @ make room for r1629# endif630eor r0,r7,r7,ror#5631orr r2,r2,r3,lsl#24632eor r0,r0,r7,ror#19 @ Sigma1(e)633#endif634ldr r3,[r14],#4 @ *K256++635add r10,r10,r2 @ h+=X[i]636str r2,[sp,#9*4]637eor r2,r8,r9638add r10,r10,r0,ror#6 @ h+=Sigma1(e)639and r2,r2,r7640add r10,r10,r3 @ h+=K256[i]641eor r2,r2,r9 @ Ch(e,f,g)642eor r0,r11,r11,ror#11643add r10,r10,r2 @ h+=Ch(e,f,g)644#if 9==31645and r3,r3,#0xff646cmp r3,#0xf2 @ done?647#endif648#if 9<15649# if __ARM_ARCH__>=7650ldr r2,[r1],#4 @ prefetch651# else652ldrb r2,[r1,#3]653# endif654eor r3,r11,r4 @ a^b, b^c in next round655#else656ldr r2,[sp,#11*4] @ from future BODY_16_xx657eor r3,r11,r4 @ a^b, b^c in next round658ldr r1,[sp,#8*4] @ from future BODY_16_xx659#endif660eor r0,r0,r11,ror#20 @ Sigma0(a)661and r12,r12,r3 @ (b^c)&=(a^b)662add r6,r6,r10 @ d+=h663eor r12,r12,r4 @ Maj(a,b,c)664add r10,r10,r0,ror#2 @ h+=Sigma0(a)665@ add r10,r10,r12 @ h+=Maj(a,b,c)666#if __ARM_ARCH__>=7667@ ldr r2,[r1],#4 @ 10668# if 10==15669str r1,[sp,#17*4] @ make room for r1670# endif671eor r0,r6,r6,ror#5672add r10,r10,r12 @ h+=Maj(a,b,c) from the past673eor r0,r0,r6,ror#19 @ Sigma1(e)674# ifndef __ARMEB__675rev r2,r2676# endif677#else678@ ldrb r2,[r1,#3] @ 10679add r10,r10,r12 @ h+=Maj(a,b,c) from the past680ldrb r12,[r1,#2]681ldrb r0,[r1,#1]682orr r2,r2,r12,lsl#8683ldrb r12,[r1],#4684orr r2,r2,r0,lsl#16685# if 10==15686str r1,[sp,#17*4] @ make room for r1687# endif688eor r0,r6,r6,ror#5689orr r2,r2,r12,lsl#24690eor r0,r0,r6,ror#19 @ Sigma1(e)691#endif692ldr r12,[r14],#4 @ *K256++693add r9,r9,r2 @ h+=X[i]694str r2,[sp,#10*4]695eor r2,r7,r8696add r9,r9,r0,ror#6 @ h+=Sigma1(e)697and r2,r2,r6698add r9,r9,r12 @ h+=K256[i]699eor r2,r2,r8 @ Ch(e,f,g)700eor r0,r10,r10,ror#11701add r9,r9,r2 @ h+=Ch(e,f,g)702#if 10==31703and r12,r12,#0xff704cmp r12,#0xf2 @ done?705#endif706#if 10<15707# if __ARM_ARCH__>=7708ldr r2,[r1],#4 @ prefetch709# else710ldrb r2,[r1,#3]711# endif712eor r12,r10,r11 @ a^b, b^c in next round713#else714ldr r2,[sp,#12*4] @ from future BODY_16_xx715eor r12,r10,r11 @ a^b, b^c in next round716ldr r1,[sp,#9*4] @ from future BODY_16_xx717#endif718eor r0,r0,r10,ror#20 @ Sigma0(a)719and r3,r3,r12 @ (b^c)&=(a^b)720add r5,r5,r9 @ d+=h721eor r3,r3,r11 @ Maj(a,b,c)722add r9,r9,r0,ror#2 @ h+=Sigma0(a)723@ add r9,r9,r3 @ h+=Maj(a,b,c)724#if __ARM_ARCH__>=7725@ ldr r2,[r1],#4 @ 11726# if 11==15727str r1,[sp,#17*4] @ make room for r1728# endif729eor r0,r5,r5,ror#5730add r9,r9,r3 @ h+=Maj(a,b,c) from the past731eor r0,r0,r5,ror#19 @ Sigma1(e)732# ifndef __ARMEB__733rev r2,r2734# endif735#else736@ ldrb r2,[r1,#3] @ 11737add r9,r9,r3 @ h+=Maj(a,b,c) from the past738ldrb r3,[r1,#2]739ldrb r0,[r1,#1]740orr r2,r2,r3,lsl#8741ldrb r3,[r1],#4742orr r2,r2,r0,lsl#16743# if 11==15744str r1,[sp,#17*4] @ make room for r1745# endif746eor r0,r5,r5,ror#5747orr r2,r2,r3,lsl#24748eor r0,r0,r5,ror#19 @ Sigma1(e)749#endif750ldr r3,[r14],#4 @ *K256++751add r8,r8,r2 @ h+=X[i]752str r2,[sp,#11*4]753eor r2,r6,r7754add r8,r8,r0,ror#6 @ h+=Sigma1(e)755and r2,r2,r5756add r8,r8,r3 @ h+=K256[i]757eor r2,r2,r7 @ Ch(e,f,g)758eor r0,r9,r9,ror#11759add r8,r8,r2 @ h+=Ch(e,f,g)760#if 11==31761and r3,r3,#0xff762cmp r3,#0xf2 @ done?763#endif764#if 11<15765# if __ARM_ARCH__>=7766ldr r2,[r1],#4 @ prefetch767# else768ldrb r2,[r1,#3]769# endif770eor r3,r9,r10 @ a^b, b^c in next round771#else772ldr r2,[sp,#13*4] @ from future BODY_16_xx773eor r3,r9,r10 @ a^b, b^c in next round774ldr r1,[sp,#10*4] @ from future BODY_16_xx775#endif776eor r0,r0,r9,ror#20 @ Sigma0(a)777and r12,r12,r3 @ (b^c)&=(a^b)778add r4,r4,r8 @ d+=h779eor r12,r12,r10 @ Maj(a,b,c)780add r8,r8,r0,ror#2 @ h+=Sigma0(a)781@ add r8,r8,r12 @ h+=Maj(a,b,c)782#if __ARM_ARCH__>=7783@ ldr r2,[r1],#4 @ 12784# if 12==15785str r1,[sp,#17*4] @ make room for r1786# endif787eor r0,r4,r4,ror#5788add r8,r8,r12 @ h+=Maj(a,b,c) from the past789eor r0,r0,r4,ror#19 @ Sigma1(e)790# ifndef __ARMEB__791rev r2,r2792# endif793#else794@ ldrb r2,[r1,#3] @ 12795add r8,r8,r12 @ h+=Maj(a,b,c) from the past796ldrb r12,[r1,#2]797ldrb r0,[r1,#1]798orr r2,r2,r12,lsl#8799ldrb r12,[r1],#4800orr r2,r2,r0,lsl#16801# if 12==15802str r1,[sp,#17*4] @ make room for r1803# endif804eor r0,r4,r4,ror#5805orr r2,r2,r12,lsl#24806eor r0,r0,r4,ror#19 @ Sigma1(e)807#endif808ldr r12,[r14],#4 @ *K256++809add r7,r7,r2 @ h+=X[i]810str r2,[sp,#12*4]811eor r2,r5,r6812add r7,r7,r0,ror#6 @ h+=Sigma1(e)813and r2,r2,r4814add r7,r7,r12 @ h+=K256[i]815eor r2,r2,r6 @ Ch(e,f,g)816eor r0,r8,r8,ror#11817add r7,r7,r2 @ h+=Ch(e,f,g)818#if 12==31819and r12,r12,#0xff820cmp r12,#0xf2 @ done?821#endif822#if 12<15823# if __ARM_ARCH__>=7824ldr r2,[r1],#4 @ prefetch825# else826ldrb r2,[r1,#3]827# endif828eor r12,r8,r9 @ a^b, b^c in next round829#else830ldr r2,[sp,#14*4] @ from future BODY_16_xx831eor r12,r8,r9 @ a^b, b^c in next round832ldr r1,[sp,#11*4] @ from future BODY_16_xx833#endif834eor r0,r0,r8,ror#20 @ Sigma0(a)835and r3,r3,r12 @ (b^c)&=(a^b)836add r11,r11,r7 @ d+=h837eor r3,r3,r9 @ Maj(a,b,c)838add r7,r7,r0,ror#2 @ h+=Sigma0(a)839@ add r7,r7,r3 @ h+=Maj(a,b,c)840#if __ARM_ARCH__>=7841@ ldr r2,[r1],#4 @ 13842# if 13==15843str r1,[sp,#17*4] @ make room for r1844# endif845eor r0,r11,r11,ror#5846add r7,r7,r3 @ h+=Maj(a,b,c) from the past847eor r0,r0,r11,ror#19 @ Sigma1(e)848# ifndef __ARMEB__849rev r2,r2850# endif851#else852@ ldrb r2,[r1,#3] @ 13853add r7,r7,r3 @ h+=Maj(a,b,c) from the past854ldrb r3,[r1,#2]855ldrb r0,[r1,#1]856orr r2,r2,r3,lsl#8857ldrb r3,[r1],#4858orr r2,r2,r0,lsl#16859# if 13==15860str r1,[sp,#17*4] @ make room for r1861# endif862eor r0,r11,r11,ror#5863orr r2,r2,r3,lsl#24864eor r0,r0,r11,ror#19 @ Sigma1(e)865#endif866ldr r3,[r14],#4 @ *K256++867add r6,r6,r2 @ h+=X[i]868str r2,[sp,#13*4]869eor r2,r4,r5870add r6,r6,r0,ror#6 @ h+=Sigma1(e)871and r2,r2,r11872add r6,r6,r3 @ h+=K256[i]873eor r2,r2,r5 @ Ch(e,f,g)874eor r0,r7,r7,ror#11875add r6,r6,r2 @ h+=Ch(e,f,g)876#if 13==31877and r3,r3,#0xff878cmp r3,#0xf2 @ done?879#endif880#if 13<15881# if __ARM_ARCH__>=7882ldr r2,[r1],#4 @ prefetch883# else884ldrb r2,[r1,#3]885# endif886eor r3,r7,r8 @ a^b, b^c in next round887#else888ldr r2,[sp,#15*4] @ from future BODY_16_xx889eor r3,r7,r8 @ a^b, b^c in next round890ldr r1,[sp,#12*4] @ from future BODY_16_xx891#endif892eor r0,r0,r7,ror#20 @ Sigma0(a)893and r12,r12,r3 @ (b^c)&=(a^b)894add r10,r10,r6 @ d+=h895eor r12,r12,r8 @ Maj(a,b,c)896add r6,r6,r0,ror#2 @ h+=Sigma0(a)897@ add r6,r6,r12 @ h+=Maj(a,b,c)898#if __ARM_ARCH__>=7899@ ldr r2,[r1],#4 @ 14900# if 14==15901str r1,[sp,#17*4] @ make room for r1902# endif903eor r0,r10,r10,ror#5904add r6,r6,r12 @ h+=Maj(a,b,c) from the past905eor r0,r0,r10,ror#19 @ Sigma1(e)906# ifndef __ARMEB__907rev r2,r2908# endif909#else910@ ldrb r2,[r1,#3] @ 14911add r6,r6,r12 @ h+=Maj(a,b,c) from the past912ldrb r12,[r1,#2]913ldrb r0,[r1,#1]914orr r2,r2,r12,lsl#8915ldrb r12,[r1],#4916orr r2,r2,r0,lsl#16917# if 14==15918str r1,[sp,#17*4] @ make room for r1919# endif920eor r0,r10,r10,ror#5921orr r2,r2,r12,lsl#24922eor r0,r0,r10,ror#19 @ Sigma1(e)923#endif924ldr r12,[r14],#4 @ *K256++925add r5,r5,r2 @ h+=X[i]926str r2,[sp,#14*4]927eor r2,r11,r4928add r5,r5,r0,ror#6 @ h+=Sigma1(e)929and r2,r2,r10930add r5,r5,r12 @ h+=K256[i]931eor r2,r2,r4 @ Ch(e,f,g)932eor r0,r6,r6,ror#11933add r5,r5,r2 @ h+=Ch(e,f,g)934#if 14==31935and r12,r12,#0xff936cmp r12,#0xf2 @ done?937#endif938#if 14<15939# if __ARM_ARCH__>=7940ldr r2,[r1],#4 @ prefetch941# else942ldrb r2,[r1,#3]943# endif944eor r12,r6,r7 @ a^b, b^c in next round945#else946ldr r2,[sp,#0*4] @ from future BODY_16_xx947eor r12,r6,r7 @ a^b, b^c in next round948ldr r1,[sp,#13*4] @ from future BODY_16_xx949#endif950eor r0,r0,r6,ror#20 @ Sigma0(a)951and r3,r3,r12 @ (b^c)&=(a^b)952add r9,r9,r5 @ d+=h953eor r3,r3,r7 @ Maj(a,b,c)954add r5,r5,r0,ror#2 @ h+=Sigma0(a)955@ add r5,r5,r3 @ h+=Maj(a,b,c)956#if __ARM_ARCH__>=7957@ ldr r2,[r1],#4 @ 15958# if 15==15959str r1,[sp,#17*4] @ make room for r1960# endif961eor r0,r9,r9,ror#5962add r5,r5,r3 @ h+=Maj(a,b,c) from the past963eor r0,r0,r9,ror#19 @ Sigma1(e)964# ifndef __ARMEB__965rev r2,r2966# endif967#else968@ ldrb r2,[r1,#3] @ 15969add r5,r5,r3 @ h+=Maj(a,b,c) from the past970ldrb r3,[r1,#2]971ldrb r0,[r1,#1]972orr r2,r2,r3,lsl#8973ldrb r3,[r1],#4974orr r2,r2,r0,lsl#16975# if 15==15976str r1,[sp,#17*4] @ make room for r1977# endif978eor r0,r9,r9,ror#5979orr r2,r2,r3,lsl#24980eor r0,r0,r9,ror#19 @ Sigma1(e)981#endif982ldr r3,[r14],#4 @ *K256++983add r4,r4,r2 @ h+=X[i]984str r2,[sp,#15*4]985eor r2,r10,r11986add r4,r4,r0,ror#6 @ h+=Sigma1(e)987and r2,r2,r9988add r4,r4,r3 @ h+=K256[i]989eor r2,r2,r11 @ Ch(e,f,g)990eor r0,r5,r5,ror#11991add r4,r4,r2 @ h+=Ch(e,f,g)992#if 15==31993and r3,r3,#0xff994cmp r3,#0xf2 @ done?995#endif996#if 15<15997# if __ARM_ARCH__>=7998ldr r2,[r1],#4 @ prefetch999# else1000ldrb r2,[r1,#3]1001# endif1002eor r3,r5,r6 @ a^b, b^c in next round1003#else1004ldr r2,[sp,#1*4] @ from future BODY_16_xx1005eor r3,r5,r6 @ a^b, b^c in next round1006ldr r1,[sp,#14*4] @ from future BODY_16_xx1007#endif1008eor r0,r0,r5,ror#20 @ Sigma0(a)1009and r12,r12,r3 @ (b^c)&=(a^b)1010add r8,r8,r4 @ d+=h1011eor r12,r12,r6 @ Maj(a,b,c)1012add r4,r4,r0,ror#2 @ h+=Sigma0(a)1013@ add r4,r4,r12 @ h+=Maj(a,b,c)1014.Lrounds_16_xx:1015@ ldr r2,[sp,#1*4] @ 161016@ ldr r1,[sp,#14*4]1017mov r0,r2,ror#71018add r4,r4,r12 @ h+=Maj(a,b,c) from the past1019mov r12,r1,ror#171020eor r0,r0,r2,ror#181021eor r12,r12,r1,ror#191022eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])1023ldr r2,[sp,#0*4]1024eor r12,r12,r1,lsr#10 @ sigma1(X[i+14])1025ldr r1,[sp,#9*4]10261027add r12,r12,r01028eor r0,r8,r8,ror#5 @ from BODY_00_151029add r2,r2,r121030eor r0,r0,r8,ror#19 @ Sigma1(e)1031add r2,r2,r1 @ X[i]1032ldr r12,[r14],#4 @ *K256++1033add r11,r11,r2 @ h+=X[i]1034str r2,[sp,#0*4]1035eor r2,r9,r101036add r11,r11,r0,ror#6 @ h+=Sigma1(e)1037and r2,r2,r81038add r11,r11,r12 @ h+=K256[i]1039eor r2,r2,r10 @ Ch(e,f,g)1040eor r0,r4,r4,ror#111041add r11,r11,r2 @ h+=Ch(e,f,g)1042#if 16==311043and r12,r12,#0xff1044cmp r12,#0xf2 @ done?1045#endif1046#if 16<151047# if __ARM_ARCH__>=71048ldr r2,[r1],#4 @ prefetch1049# else1050ldrb r2,[r1,#3]1051# endif1052eor r12,r4,r5 @ a^b, b^c in next round1053#else1054ldr r2,[sp,#2*4] @ from future BODY_16_xx1055eor r12,r4,r5 @ a^b, b^c in next round1056ldr r1,[sp,#15*4] @ from future BODY_16_xx1057#endif1058eor r0,r0,r4,ror#20 @ Sigma0(a)1059and r3,r3,r12 @ (b^c)&=(a^b)1060add r7,r7,r11 @ d+=h1061eor r3,r3,r5 @ Maj(a,b,c)1062add r11,r11,r0,ror#2 @ h+=Sigma0(a)1063@ add r11,r11,r3 @ h+=Maj(a,b,c)1064@ ldr r2,[sp,#2*4] @ 171065@ ldr r1,[sp,#15*4]1066mov r0,r2,ror#71067add r11,r11,r3 @ h+=Maj(a,b,c) from the past1068mov r3,r1,ror#171069eor r0,r0,r2,ror#181070eor r3,r3,r1,ror#191071eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])1072ldr r2,[sp,#1*4]1073eor r3,r3,r1,lsr#10 @ sigma1(X[i+14])1074ldr r1,[sp,#10*4]10751076add r3,r3,r01077eor r0,r7,r7,ror#5 @ from BODY_00_151078add r2,r2,r31079eor r0,r0,r7,ror#19 @ Sigma1(e)1080add r2,r2,r1 @ X[i]1081ldr r3,[r14],#4 @ *K256++1082add r10,r10,r2 @ h+=X[i]1083str r2,[sp,#1*4]1084eor r2,r8,r91085add r10,r10,r0,ror#6 @ h+=Sigma1(e)1086and r2,r2,r71087add r10,r10,r3 @ h+=K256[i]1088eor r2,r2,r9 @ Ch(e,f,g)1089eor r0,r11,r11,ror#111090add r10,r10,r2 @ h+=Ch(e,f,g)1091#if 17==311092and r3,r3,#0xff1093cmp r3,#0xf2 @ done?1094#endif1095#if 17<151096# if __ARM_ARCH__>=71097ldr r2,[r1],#4 @ prefetch1098# else1099ldrb r2,[r1,#3]1100# endif1101eor r3,r11,r4 @ a^b, b^c in next round1102#else1103ldr r2,[sp,#3*4] @ from future BODY_16_xx1104eor r3,r11,r4 @ a^b, b^c in next round1105ldr r1,[sp,#0*4] @ from future BODY_16_xx1106#endif1107eor r0,r0,r11,ror#20 @ Sigma0(a)1108and r12,r12,r3 @ (b^c)&=(a^b)1109add r6,r6,r10 @ d+=h1110eor r12,r12,r4 @ Maj(a,b,c)1111add r10,r10,r0,ror#2 @ h+=Sigma0(a)1112@ add r10,r10,r12 @ h+=Maj(a,b,c)1113@ ldr r2,[sp,#3*4] @ 181114@ ldr r1,[sp,#0*4]1115mov r0,r2,ror#71116add r10,r10,r12 @ h+=Maj(a,b,c) from the past1117mov r12,r1,ror#171118eor r0,r0,r2,ror#181119eor r12,r12,r1,ror#191120eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])1121ldr r2,[sp,#2*4]1122eor r12,r12,r1,lsr#10 @ sigma1(X[i+14])1123ldr r1,[sp,#11*4]11241125add r12,r12,r01126eor r0,r6,r6,ror#5 @ from BODY_00_151127add r2,r2,r121128eor r0,r0,r6,ror#19 @ Sigma1(e)1129add r2,r2,r1 @ X[i]1130ldr r12,[r14],#4 @ *K256++1131add r9,r9,r2 @ h+=X[i]1132str r2,[sp,#2*4]1133eor r2,r7,r81134add r9,r9,r0,ror#6 @ h+=Sigma1(e)1135and r2,r2,r61136add r9,r9,r12 @ h+=K256[i]1137eor r2,r2,r8 @ Ch(e,f,g)1138eor r0,r10,r10,ror#111139add r9,r9,r2 @ h+=Ch(e,f,g)1140#if 18==311141and r12,r12,#0xff1142cmp r12,#0xf2 @ done?1143#endif1144#if 18<151145# if __ARM_ARCH__>=71146ldr r2,[r1],#4 @ prefetch1147# else1148ldrb r2,[r1,#3]1149# endif1150eor r12,r10,r11 @ a^b, b^c in next round1151#else1152ldr r2,[sp,#4*4] @ from future BODY_16_xx1153eor r12,r10,r11 @ a^b, b^c in next round1154ldr r1,[sp,#1*4] @ from future BODY_16_xx1155#endif1156eor r0,r0,r10,ror#20 @ Sigma0(a)1157and r3,r3,r12 @ (b^c)&=(a^b)1158add r5,r5,r9 @ d+=h1159eor r3,r3,r11 @ Maj(a,b,c)1160add r9,r9,r0,ror#2 @ h+=Sigma0(a)1161@ add r9,r9,r3 @ h+=Maj(a,b,c)1162@ ldr r2,[sp,#4*4] @ 191163@ ldr r1,[sp,#1*4]1164mov r0,r2,ror#71165add r9,r9,r3 @ h+=Maj(a,b,c) from the past1166mov r3,r1,ror#171167eor r0,r0,r2,ror#181168eor r3,r3,r1,ror#191169eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])1170ldr r2,[sp,#3*4]1171eor r3,r3,r1,lsr#10 @ sigma1(X[i+14])1172ldr r1,[sp,#12*4]11731174add r3,r3,r01175eor r0,r5,r5,ror#5 @ from BODY_00_151176add r2,r2,r31177eor r0,r0,r5,ror#19 @ Sigma1(e)1178add r2,r2,r1 @ X[i]1179ldr r3,[r14],#4 @ *K256++1180add r8,r8,r2 @ h+=X[i]1181str r2,[sp,#3*4]1182eor r2,r6,r71183add r8,r8,r0,ror#6 @ h+=Sigma1(e)1184and r2,r2,r51185add r8,r8,r3 @ h+=K256[i]1186eor r2,r2,r7 @ Ch(e,f,g)1187eor r0,r9,r9,ror#111188add r8,r8,r2 @ h+=Ch(e,f,g)1189#if 19==311190and r3,r3,#0xff1191cmp r3,#0xf2 @ done?1192#endif1193#if 19<151194# if __ARM_ARCH__>=71195ldr r2,[r1],#4 @ prefetch1196# else1197ldrb r2,[r1,#3]1198# endif1199eor r3,r9,r10 @ a^b, b^c in next round1200#else1201ldr r2,[sp,#5*4] @ from future BODY_16_xx1202eor r3,r9,r10 @ a^b, b^c in next round1203ldr r1,[sp,#2*4] @ from future BODY_16_xx1204#endif1205eor r0,r0,r9,ror#20 @ Sigma0(a)1206and r12,r12,r3 @ (b^c)&=(a^b)1207add r4,r4,r8 @ d+=h1208eor r12,r12,r10 @ Maj(a,b,c)1209add r8,r8,r0,ror#2 @ h+=Sigma0(a)1210@ add r8,r8,r12 @ h+=Maj(a,b,c)1211@ ldr r2,[sp,#5*4] @ 201212@ ldr r1,[sp,#2*4]1213mov r0,r2,ror#71214add r8,r8,r12 @ h+=Maj(a,b,c) from the past1215mov r12,r1,ror#171216eor r0,r0,r2,ror#181217eor r12,r12,r1,ror#191218eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])1219ldr r2,[sp,#4*4]1220eor r12,r12,r1,lsr#10 @ sigma1(X[i+14])1221ldr r1,[sp,#13*4]12221223add r12,r12,r01224eor r0,r4,r4,ror#5 @ from BODY_00_151225add r2,r2,r121226eor r0,r0,r4,ror#19 @ Sigma1(e)1227add r2,r2,r1 @ X[i]1228ldr r12,[r14],#4 @ *K256++1229add r7,r7,r2 @ h+=X[i]1230str r2,[sp,#4*4]1231eor r2,r5,r61232add r7,r7,r0,ror#6 @ h+=Sigma1(e)1233and r2,r2,r41234add r7,r7,r12 @ h+=K256[i]1235eor r2,r2,r6 @ Ch(e,f,g)1236eor r0,r8,r8,ror#111237add r7,r7,r2 @ h+=Ch(e,f,g)1238#if 20==311239and r12,r12,#0xff1240cmp r12,#0xf2 @ done?1241#endif1242#if 20<151243# if __ARM_ARCH__>=71244ldr r2,[r1],#4 @ prefetch1245# else1246ldrb r2,[r1,#3]1247# endif1248eor r12,r8,r9 @ a^b, b^c in next round1249#else1250ldr r2,[sp,#6*4] @ from future BODY_16_xx1251eor r12,r8,r9 @ a^b, b^c in next round1252ldr r1,[sp,#3*4] @ from future BODY_16_xx1253#endif1254eor r0,r0,r8,ror#20 @ Sigma0(a)1255and r3,r3,r12 @ (b^c)&=(a^b)1256add r11,r11,r7 @ d+=h1257eor r3,r3,r9 @ Maj(a,b,c)1258add r7,r7,r0,ror#2 @ h+=Sigma0(a)1259@ add r7,r7,r3 @ h+=Maj(a,b,c)1260@ ldr r2,[sp,#6*4] @ 211261@ ldr r1,[sp,#3*4]1262mov r0,r2,ror#71263add r7,r7,r3 @ h+=Maj(a,b,c) from the past1264mov r3,r1,ror#171265eor r0,r0,r2,ror#181266eor r3,r3,r1,ror#191267eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])1268ldr r2,[sp,#5*4]1269eor r3,r3,r1,lsr#10 @ sigma1(X[i+14])1270ldr r1,[sp,#14*4]12711272add r3,r3,r01273eor r0,r11,r11,ror#5 @ from BODY_00_151274add r2,r2,r31275eor r0,r0,r11,ror#19 @ Sigma1(e)1276add r2,r2,r1 @ X[i]1277ldr r3,[r14],#4 @ *K256++1278add r6,r6,r2 @ h+=X[i]1279str r2,[sp,#5*4]1280eor r2,r4,r51281add r6,r6,r0,ror#6 @ h+=Sigma1(e)1282and r2,r2,r111283add r6,r6,r3 @ h+=K256[i]1284eor r2,r2,r5 @ Ch(e,f,g)1285eor r0,r7,r7,ror#111286add r6,r6,r2 @ h+=Ch(e,f,g)1287#if 21==311288and r3,r3,#0xff1289cmp r3,#0xf2 @ done?1290#endif1291#if 21<151292# if __ARM_ARCH__>=71293ldr r2,[r1],#4 @ prefetch1294# else1295ldrb r2,[r1,#3]1296# endif1297eor r3,r7,r8 @ a^b, b^c in next round1298#else1299ldr r2,[sp,#7*4] @ from future BODY_16_xx1300eor r3,r7,r8 @ a^b, b^c in next round1301ldr r1,[sp,#4*4] @ from future BODY_16_xx1302#endif1303eor r0,r0,r7,ror#20 @ Sigma0(a)1304and r12,r12,r3 @ (b^c)&=(a^b)1305add r10,r10,r6 @ d+=h1306eor r12,r12,r8 @ Maj(a,b,c)1307add r6,r6,r0,ror#2 @ h+=Sigma0(a)1308@ add r6,r6,r12 @ h+=Maj(a,b,c)1309@ ldr r2,[sp,#7*4] @ 221310@ ldr r1,[sp,#4*4]1311mov r0,r2,ror#71312add r6,r6,r12 @ h+=Maj(a,b,c) from the past1313mov r12,r1,ror#171314eor r0,r0,r2,ror#181315eor r12,r12,r1,ror#191316eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])1317ldr r2,[sp,#6*4]1318eor r12,r12,r1,lsr#10 @ sigma1(X[i+14])1319ldr r1,[sp,#15*4]13201321add r12,r12,r01322eor r0,r10,r10,ror#5 @ from BODY_00_151323add r2,r2,r121324eor r0,r0,r10,ror#19 @ Sigma1(e)1325add r2,r2,r1 @ X[i]1326ldr r12,[r14],#4 @ *K256++1327add r5,r5,r2 @ h+=X[i]1328str r2,[sp,#6*4]1329eor r2,r11,r41330add r5,r5,r0,ror#6 @ h+=Sigma1(e)1331and r2,r2,r101332add r5,r5,r12 @ h+=K256[i]1333eor r2,r2,r4 @ Ch(e,f,g)1334eor r0,r6,r6,ror#111335add r5,r5,r2 @ h+=Ch(e,f,g)1336#if 22==311337and r12,r12,#0xff1338cmp r12,#0xf2 @ done?1339#endif1340#if 22<151341# if __ARM_ARCH__>=71342ldr r2,[r1],#4 @ prefetch1343# else1344ldrb r2,[r1,#3]1345# endif1346eor r12,r6,r7 @ a^b, b^c in next round1347#else1348ldr r2,[sp,#8*4] @ from future BODY_16_xx1349eor r12,r6,r7 @ a^b, b^c in next round1350ldr r1,[sp,#5*4] @ from future BODY_16_xx1351#endif1352eor r0,r0,r6,ror#20 @ Sigma0(a)1353and r3,r3,r12 @ (b^c)&=(a^b)1354add r9,r9,r5 @ d+=h1355eor r3,r3,r7 @ Maj(a,b,c)1356add r5,r5,r0,ror#2 @ h+=Sigma0(a)1357@ add r5,r5,r3 @ h+=Maj(a,b,c)1358@ ldr r2,[sp,#8*4] @ 231359@ ldr r1,[sp,#5*4]1360mov r0,r2,ror#71361add r5,r5,r3 @ h+=Maj(a,b,c) from the past1362mov r3,r1,ror#171363eor r0,r0,r2,ror#181364eor r3,r3,r1,ror#191365eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])1366ldr r2,[sp,#7*4]1367eor r3,r3,r1,lsr#10 @ sigma1(X[i+14])1368ldr r1,[sp,#0*4]13691370add r3,r3,r01371eor r0,r9,r9,ror#5 @ from BODY_00_151372add r2,r2,r31373eor r0,r0,r9,ror#19 @ Sigma1(e)1374add r2,r2,r1 @ X[i]1375ldr r3,[r14],#4 @ *K256++1376add r4,r4,r2 @ h+=X[i]1377str r2,[sp,#7*4]1378eor r2,r10,r111379add r4,r4,r0,ror#6 @ h+=Sigma1(e)1380and r2,r2,r91381add r4,r4,r3 @ h+=K256[i]1382eor r2,r2,r11 @ Ch(e,f,g)1383eor r0,r5,r5,ror#111384add r4,r4,r2 @ h+=Ch(e,f,g)1385#if 23==311386and r3,r3,#0xff1387cmp r3,#0xf2 @ done?1388#endif1389#if 23<151390# if __ARM_ARCH__>=71391ldr r2,[r1],#4 @ prefetch1392# else1393ldrb r2,[r1,#3]1394# endif1395eor r3,r5,r6 @ a^b, b^c in next round1396#else1397ldr r2,[sp,#9*4] @ from future BODY_16_xx1398eor r3,r5,r6 @ a^b, b^c in next round1399ldr r1,[sp,#6*4] @ from future BODY_16_xx1400#endif1401eor r0,r0,r5,ror#20 @ Sigma0(a)1402and r12,r12,r3 @ (b^c)&=(a^b)1403add r8,r8,r4 @ d+=h1404eor r12,r12,r6 @ Maj(a,b,c)1405add r4,r4,r0,ror#2 @ h+=Sigma0(a)1406@ add r4,r4,r12 @ h+=Maj(a,b,c)1407@ ldr r2,[sp,#9*4] @ 241408@ ldr r1,[sp,#6*4]1409mov r0,r2,ror#71410add r4,r4,r12 @ h+=Maj(a,b,c) from the past1411mov r12,r1,ror#171412eor r0,r0,r2,ror#181413eor r12,r12,r1,ror#191414eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])1415ldr r2,[sp,#8*4]1416eor r12,r12,r1,lsr#10 @ sigma1(X[i+14])1417ldr r1,[sp,#1*4]14181419add r12,r12,r01420eor r0,r8,r8,ror#5 @ from BODY_00_151421add r2,r2,r121422eor r0,r0,r8,ror#19 @ Sigma1(e)1423add r2,r2,r1 @ X[i]1424ldr r12,[r14],#4 @ *K256++1425add r11,r11,r2 @ h+=X[i]1426str r2,[sp,#8*4]1427eor r2,r9,r101428add r11,r11,r0,ror#6 @ h+=Sigma1(e)1429and r2,r2,r81430add r11,r11,r12 @ h+=K256[i]1431eor r2,r2,r10 @ Ch(e,f,g)1432eor r0,r4,r4,ror#111433add r11,r11,r2 @ h+=Ch(e,f,g)1434#if 24==311435and r12,r12,#0xff1436cmp r12,#0xf2 @ done?1437#endif1438#if 24<151439# if __ARM_ARCH__>=71440ldr r2,[r1],#4 @ prefetch1441# else1442ldrb r2,[r1,#3]1443# endif1444eor r12,r4,r5 @ a^b, b^c in next round1445#else1446ldr r2,[sp,#10*4] @ from future BODY_16_xx1447eor r12,r4,r5 @ a^b, b^c in next round1448ldr r1,[sp,#7*4] @ from future BODY_16_xx1449#endif1450eor r0,r0,r4,ror#20 @ Sigma0(a)1451and r3,r3,r12 @ (b^c)&=(a^b)1452add r7,r7,r11 @ d+=h1453eor r3,r3,r5 @ Maj(a,b,c)1454add r11,r11,r0,ror#2 @ h+=Sigma0(a)1455@ add r11,r11,r3 @ h+=Maj(a,b,c)1456@ ldr r2,[sp,#10*4] @ 251457@ ldr r1,[sp,#7*4]1458mov r0,r2,ror#71459add r11,r11,r3 @ h+=Maj(a,b,c) from the past1460mov r3,r1,ror#171461eor r0,r0,r2,ror#181462eor r3,r3,r1,ror#191463eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])1464ldr r2,[sp,#9*4]1465eor r3,r3,r1,lsr#10 @ sigma1(X[i+14])1466ldr r1,[sp,#2*4]14671468add r3,r3,r01469eor r0,r7,r7,ror#5 @ from BODY_00_151470add r2,r2,r31471eor r0,r0,r7,ror#19 @ Sigma1(e)1472add r2,r2,r1 @ X[i]1473ldr r3,[r14],#4 @ *K256++1474add r10,r10,r2 @ h+=X[i]1475str r2,[sp,#9*4]1476eor r2,r8,r91477add r10,r10,r0,ror#6 @ h+=Sigma1(e)1478and r2,r2,r71479add r10,r10,r3 @ h+=K256[i]1480eor r2,r2,r9 @ Ch(e,f,g)1481eor r0,r11,r11,ror#111482add r10,r10,r2 @ h+=Ch(e,f,g)1483#if 25==311484and r3,r3,#0xff1485cmp r3,#0xf2 @ done?1486#endif1487#if 25<151488# if __ARM_ARCH__>=71489ldr r2,[r1],#4 @ prefetch1490# else1491ldrb r2,[r1,#3]1492# endif1493eor r3,r11,r4 @ a^b, b^c in next round1494#else1495ldr r2,[sp,#11*4] @ from future BODY_16_xx1496eor r3,r11,r4 @ a^b, b^c in next round1497ldr r1,[sp,#8*4] @ from future BODY_16_xx1498#endif1499eor r0,r0,r11,ror#20 @ Sigma0(a)1500and r12,r12,r3 @ (b^c)&=(a^b)1501add r6,r6,r10 @ d+=h1502eor r12,r12,r4 @ Maj(a,b,c)1503add r10,r10,r0,ror#2 @ h+=Sigma0(a)1504@ add r10,r10,r12 @ h+=Maj(a,b,c)1505@ ldr r2,[sp,#11*4] @ 261506@ ldr r1,[sp,#8*4]1507mov r0,r2,ror#71508add r10,r10,r12 @ h+=Maj(a,b,c) from the past1509mov r12,r1,ror#171510eor r0,r0,r2,ror#181511eor r12,r12,r1,ror#191512eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])1513ldr r2,[sp,#10*4]1514eor r12,r12,r1,lsr#10 @ sigma1(X[i+14])1515ldr r1,[sp,#3*4]15161517add r12,r12,r01518eor r0,r6,r6,ror#5 @ from BODY_00_151519add r2,r2,r121520eor r0,r0,r6,ror#19 @ Sigma1(e)1521add r2,r2,r1 @ X[i]1522ldr r12,[r14],#4 @ *K256++1523add r9,r9,r2 @ h+=X[i]1524str r2,[sp,#10*4]1525eor r2,r7,r81526add r9,r9,r0,ror#6 @ h+=Sigma1(e)1527and r2,r2,r61528add r9,r9,r12 @ h+=K256[i]1529eor r2,r2,r8 @ Ch(e,f,g)1530eor r0,r10,r10,ror#111531add r9,r9,r2 @ h+=Ch(e,f,g)1532#if 26==311533and r12,r12,#0xff1534cmp r12,#0xf2 @ done?1535#endif1536#if 26<151537# if __ARM_ARCH__>=71538ldr r2,[r1],#4 @ prefetch1539# else1540ldrb r2,[r1,#3]1541# endif1542eor r12,r10,r11 @ a^b, b^c in next round1543#else1544ldr r2,[sp,#12*4] @ from future BODY_16_xx1545eor r12,r10,r11 @ a^b, b^c in next round1546ldr r1,[sp,#9*4] @ from future BODY_16_xx1547#endif1548eor r0,r0,r10,ror#20 @ Sigma0(a)1549and r3,r3,r12 @ (b^c)&=(a^b)1550add r5,r5,r9 @ d+=h1551eor r3,r3,r11 @ Maj(a,b,c)1552add r9,r9,r0,ror#2 @ h+=Sigma0(a)1553@ add r9,r9,r3 @ h+=Maj(a,b,c)1554@ ldr r2,[sp,#12*4] @ 271555@ ldr r1,[sp,#9*4]1556mov r0,r2,ror#71557add r9,r9,r3 @ h+=Maj(a,b,c) from the past1558mov r3,r1,ror#171559eor r0,r0,r2,ror#181560eor r3,r3,r1,ror#191561eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])1562ldr r2,[sp,#11*4]1563eor r3,r3,r1,lsr#10 @ sigma1(X[i+14])1564ldr r1,[sp,#4*4]15651566add r3,r3,r01567eor r0,r5,r5,ror#5 @ from BODY_00_151568add r2,r2,r31569eor r0,r0,r5,ror#19 @ Sigma1(e)1570add r2,r2,r1 @ X[i]1571ldr r3,[r14],#4 @ *K256++1572add r8,r8,r2 @ h+=X[i]1573str r2,[sp,#11*4]1574eor r2,r6,r71575add r8,r8,r0,ror#6 @ h+=Sigma1(e)1576and r2,r2,r51577add r8,r8,r3 @ h+=K256[i]1578eor r2,r2,r7 @ Ch(e,f,g)1579eor r0,r9,r9,ror#111580add r8,r8,r2 @ h+=Ch(e,f,g)1581#if 27==311582and r3,r3,#0xff1583cmp r3,#0xf2 @ done?1584#endif1585#if 27<151586# if __ARM_ARCH__>=71587ldr r2,[r1],#4 @ prefetch1588# else1589ldrb r2,[r1,#3]1590# endif1591eor r3,r9,r10 @ a^b, b^c in next round1592#else1593ldr r2,[sp,#13*4] @ from future BODY_16_xx1594eor r3,r9,r10 @ a^b, b^c in next round1595ldr r1,[sp,#10*4] @ from future BODY_16_xx1596#endif1597eor r0,r0,r9,ror#20 @ Sigma0(a)1598and r12,r12,r3 @ (b^c)&=(a^b)1599add r4,r4,r8 @ d+=h1600eor r12,r12,r10 @ Maj(a,b,c)1601add r8,r8,r0,ror#2 @ h+=Sigma0(a)1602@ add r8,r8,r12 @ h+=Maj(a,b,c)1603@ ldr r2,[sp,#13*4] @ 281604@ ldr r1,[sp,#10*4]1605mov r0,r2,ror#71606add r8,r8,r12 @ h+=Maj(a,b,c) from the past1607mov r12,r1,ror#171608eor r0,r0,r2,ror#181609eor r12,r12,r1,ror#191610eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])1611ldr r2,[sp,#12*4]1612eor r12,r12,r1,lsr#10 @ sigma1(X[i+14])1613ldr r1,[sp,#5*4]16141615add r12,r12,r01616eor r0,r4,r4,ror#5 @ from BODY_00_151617add r2,r2,r121618eor r0,r0,r4,ror#19 @ Sigma1(e)1619add r2,r2,r1 @ X[i]1620ldr r12,[r14],#4 @ *K256++1621add r7,r7,r2 @ h+=X[i]1622str r2,[sp,#12*4]1623eor r2,r5,r61624add r7,r7,r0,ror#6 @ h+=Sigma1(e)1625and r2,r2,r41626add r7,r7,r12 @ h+=K256[i]1627eor r2,r2,r6 @ Ch(e,f,g)1628eor r0,r8,r8,ror#111629add r7,r7,r2 @ h+=Ch(e,f,g)1630#if 28==311631and r12,r12,#0xff1632cmp r12,#0xf2 @ done?1633#endif1634#if 28<151635# if __ARM_ARCH__>=71636ldr r2,[r1],#4 @ prefetch1637# else1638ldrb r2,[r1,#3]1639# endif1640eor r12,r8,r9 @ a^b, b^c in next round1641#else1642ldr r2,[sp,#14*4] @ from future BODY_16_xx1643eor r12,r8,r9 @ a^b, b^c in next round1644ldr r1,[sp,#11*4] @ from future BODY_16_xx1645#endif1646eor r0,r0,r8,ror#20 @ Sigma0(a)1647and r3,r3,r12 @ (b^c)&=(a^b)1648add r11,r11,r7 @ d+=h1649eor r3,r3,r9 @ Maj(a,b,c)1650add r7,r7,r0,ror#2 @ h+=Sigma0(a)1651@ add r7,r7,r3 @ h+=Maj(a,b,c)1652@ ldr r2,[sp,#14*4] @ 291653@ ldr r1,[sp,#11*4]1654mov r0,r2,ror#71655add r7,r7,r3 @ h+=Maj(a,b,c) from the past1656mov r3,r1,ror#171657eor r0,r0,r2,ror#181658eor r3,r3,r1,ror#191659eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])1660ldr r2,[sp,#13*4]1661eor r3,r3,r1,lsr#10 @ sigma1(X[i+14])1662ldr r1,[sp,#6*4]16631664add r3,r3,r01665eor r0,r11,r11,ror#5 @ from BODY_00_151666add r2,r2,r31667eor r0,r0,r11,ror#19 @ Sigma1(e)1668add r2,r2,r1 @ X[i]1669ldr r3,[r14],#4 @ *K256++1670add r6,r6,r2 @ h+=X[i]1671str r2,[sp,#13*4]1672eor r2,r4,r51673add r6,r6,r0,ror#6 @ h+=Sigma1(e)1674and r2,r2,r111675add r6,r6,r3 @ h+=K256[i]1676eor r2,r2,r5 @ Ch(e,f,g)1677eor r0,r7,r7,ror#111678add r6,r6,r2 @ h+=Ch(e,f,g)1679#if 29==311680and r3,r3,#0xff1681cmp r3,#0xf2 @ done?1682#endif1683#if 29<151684# if __ARM_ARCH__>=71685ldr r2,[r1],#4 @ prefetch1686# else1687ldrb r2,[r1,#3]1688# endif1689eor r3,r7,r8 @ a^b, b^c in next round1690#else1691ldr r2,[sp,#15*4] @ from future BODY_16_xx1692eor r3,r7,r8 @ a^b, b^c in next round1693ldr r1,[sp,#12*4] @ from future BODY_16_xx1694#endif1695eor r0,r0,r7,ror#20 @ Sigma0(a)1696and r12,r12,r3 @ (b^c)&=(a^b)1697add r10,r10,r6 @ d+=h1698eor r12,r12,r8 @ Maj(a,b,c)1699add r6,r6,r0,ror#2 @ h+=Sigma0(a)1700@ add r6,r6,r12 @ h+=Maj(a,b,c)1701@ ldr r2,[sp,#15*4] @ 301702@ ldr r1,[sp,#12*4]1703mov r0,r2,ror#71704add r6,r6,r12 @ h+=Maj(a,b,c) from the past1705mov r12,r1,ror#171706eor r0,r0,r2,ror#181707eor r12,r12,r1,ror#191708eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])1709ldr r2,[sp,#14*4]1710eor r12,r12,r1,lsr#10 @ sigma1(X[i+14])1711ldr r1,[sp,#7*4]17121713add r12,r12,r01714eor r0,r10,r10,ror#5 @ from BODY_00_151715add r2,r2,r121716eor r0,r0,r10,ror#19 @ Sigma1(e)1717add r2,r2,r1 @ X[i]1718ldr r12,[r14],#4 @ *K256++1719add r5,r5,r2 @ h+=X[i]1720str r2,[sp,#14*4]1721eor r2,r11,r41722add r5,r5,r0,ror#6 @ h+=Sigma1(e)1723and r2,r2,r101724add r5,r5,r12 @ h+=K256[i]1725eor r2,r2,r4 @ Ch(e,f,g)1726eor r0,r6,r6,ror#111727add r5,r5,r2 @ h+=Ch(e,f,g)1728#if 30==311729and r12,r12,#0xff1730cmp r12,#0xf2 @ done?1731#endif1732#if 30<151733# if __ARM_ARCH__>=71734ldr r2,[r1],#4 @ prefetch1735# else1736ldrb r2,[r1,#3]1737# endif1738eor r12,r6,r7 @ a^b, b^c in next round1739#else1740ldr r2,[sp,#0*4] @ from future BODY_16_xx1741eor r12,r6,r7 @ a^b, b^c in next round1742ldr r1,[sp,#13*4] @ from future BODY_16_xx1743#endif1744eor r0,r0,r6,ror#20 @ Sigma0(a)1745and r3,r3,r12 @ (b^c)&=(a^b)1746add r9,r9,r5 @ d+=h1747eor r3,r3,r7 @ Maj(a,b,c)1748add r5,r5,r0,ror#2 @ h+=Sigma0(a)1749@ add r5,r5,r3 @ h+=Maj(a,b,c)1750@ ldr r2,[sp,#0*4] @ 311751@ ldr r1,[sp,#13*4]1752mov r0,r2,ror#71753add r5,r5,r3 @ h+=Maj(a,b,c) from the past1754mov r3,r1,ror#171755eor r0,r0,r2,ror#181756eor r3,r3,r1,ror#191757eor r0,r0,r2,lsr#3 @ sigma0(X[i+1])1758ldr r2,[sp,#15*4]1759eor r3,r3,r1,lsr#10 @ sigma1(X[i+14])1760ldr r1,[sp,#8*4]17611762add r3,r3,r01763eor r0,r9,r9,ror#5 @ from BODY_00_151764add r2,r2,r31765eor r0,r0,r9,ror#19 @ Sigma1(e)1766add r2,r2,r1 @ X[i]1767ldr r3,[r14],#4 @ *K256++1768add r4,r4,r2 @ h+=X[i]1769str r2,[sp,#15*4]1770eor r2,r10,r111771add r4,r4,r0,ror#6 @ h+=Sigma1(e)1772and r2,r2,r91773add r4,r4,r3 @ h+=K256[i]1774eor r2,r2,r11 @ Ch(e,f,g)1775eor r0,r5,r5,ror#111776add r4,r4,r2 @ h+=Ch(e,f,g)1777#if 31==311778and r3,r3,#0xff1779cmp r3,#0xf2 @ done?1780#endif1781#if 31<151782# if __ARM_ARCH__>=71783ldr r2,[r1],#4 @ prefetch1784# else1785ldrb r2,[r1,#3]1786# endif1787eor r3,r5,r6 @ a^b, b^c in next round1788#else1789ldr r2,[sp,#1*4] @ from future BODY_16_xx1790eor r3,r5,r6 @ a^b, b^c in next round1791ldr r1,[sp,#14*4] @ from future BODY_16_xx1792#endif1793eor r0,r0,r5,ror#20 @ Sigma0(a)1794and r12,r12,r3 @ (b^c)&=(a^b)1795add r8,r8,r4 @ d+=h1796eor r12,r12,r6 @ Maj(a,b,c)1797add r4,r4,r0,ror#2 @ h+=Sigma0(a)1798@ add r4,r4,r12 @ h+=Maj(a,b,c)1799#ifdef __thumb2__1800ite eq @ Thumb2 thing, sanity check in ARM1801#endif1802ldreq r3,[sp,#16*4] @ pull ctx1803bne .Lrounds_16_xx18041805add r4,r4,r12 @ h+=Maj(a,b,c) from the past1806ldr r0,[r3,#0]1807ldr r2,[r3,#4]1808ldr r12,[r3,#8]1809add r4,r4,r01810ldr r0,[r3,#12]1811add r5,r5,r21812ldr r2,[r3,#16]1813add r6,r6,r121814ldr r12,[r3,#20]1815add r7,r7,r01816ldr r0,[r3,#24]1817add r8,r8,r21818ldr r2,[r3,#28]1819add r9,r9,r121820ldr r1,[sp,#17*4] @ pull inp1821ldr r12,[sp,#18*4] @ pull inp+len1822add r10,r10,r01823add r11,r11,r21824stmia r3,{r4,r5,r6,r7,r8,r9,r10,r11}1825cmp r1,r121826sub r14,r14,#256 @ rewind Ktbl1827bne .Loop18281829add sp,sp,#19*4 @ destroy frame1830#if __ARM_ARCH__>=51831ldmia sp!,{r4-r11,pc}1832#else1833ldmia sp!,{r4-r11,lr}1834tst lr,#11835moveq pc,lr @ be binary compatible with V4, yet1836.word 0xe12fff1e @ interoperable with Thumb ISA:-)1837#endif1838.size zfs_sha256_block_armv7,.-zfs_sha256_block_armv718391840#if __ARM_ARCH__ >= 71841.arch armv7-a1842.fpu neon18431844.globl zfs_sha256_block_neon1845.type zfs_sha256_block_neon,%function1846.align 51847.skip 161848zfs_sha256_block_neon:1849.LNEON:1850stmdb sp!,{r4-r12,lr}18511852sub r11,sp,#16*4+161853adr r14,K2561854bic r11,r11,#15 @ align for 128-bit stores1855mov r12,sp1856mov sp,r11 @ alloca1857add r2,r1,r2,lsl#6 @ len to point at the end of inp18581859vld1.8 {q0},[r1]!1860vld1.8 {q1},[r1]!1861vld1.8 {q2},[r1]!1862vld1.8 {q3},[r1]!1863vld1.32 {q8},[r14,:128]!1864vld1.32 {q9},[r14,:128]!1865vld1.32 {q10},[r14,:128]!1866vld1.32 {q11},[r14,:128]!1867vrev32.8 q0,q0 @ yes, even on1868str r0,[sp,#64]1869vrev32.8 q1,q1 @ big-endian1870str r1,[sp,#68]1871mov r1,sp1872vrev32.8 q2,q21873str r2,[sp,#72]1874vrev32.8 q3,q31875str r12,[sp,#76] @ save original sp1876vadd.i32 q8,q8,q01877vadd.i32 q9,q9,q11878vst1.32 {q8},[r1,:128]!1879vadd.i32 q10,q10,q21880vst1.32 {q9},[r1,:128]!1881vadd.i32 q11,q11,q31882vst1.32 {q10},[r1,:128]!1883vst1.32 {q11},[r1,:128]!18841885ldmia r0,{r4-r11}1886sub r1,r1,#641887ldr r2,[sp,#0]1888eor r12,r12,r121889eor r3,r5,r61890b .L_00_4818911892.align 41893.L_00_48:1894vext.8 q8,q0,q1,#41895add r11,r11,r21896eor r2,r9,r101897eor r0,r8,r8,ror#51898vext.8 q9,q2,q3,#41899add r4,r4,r121900and r2,r2,r81901eor r12,r0,r8,ror#191902vshr.u32 q10,q8,#71903eor r0,r4,r4,ror#111904eor r2,r2,r101905vadd.i32 q0,q0,q91906add r11,r11,r12,ror#61907eor r12,r4,r51908vshr.u32 q9,q8,#31909eor r0,r0,r4,ror#201910add r11,r11,r21911vsli.32 q10,q8,#251912ldr r2,[sp,#4]1913and r3,r3,r121914vshr.u32 q11,q8,#181915add r7,r7,r111916add r11,r11,r0,ror#21917eor r3,r3,r51918veor q9,q9,q101919add r10,r10,r21920vsli.32 q11,q8,#141921eor r2,r8,r91922eor r0,r7,r7,ror#51923vshr.u32 d24,d7,#171924add r11,r11,r31925and r2,r2,r71926veor q9,q9,q111927eor r3,r0,r7,ror#191928eor r0,r11,r11,ror#111929vsli.32 d24,d7,#151930eor r2,r2,r91931add r10,r10,r3,ror#61932vshr.u32 d25,d7,#101933eor r3,r11,r41934eor r0,r0,r11,ror#201935vadd.i32 q0,q0,q91936add r10,r10,r21937ldr r2,[sp,#8]1938veor d25,d25,d241939and r12,r12,r31940add r6,r6,r101941vshr.u32 d24,d7,#191942add r10,r10,r0,ror#21943eor r12,r12,r41944vsli.32 d24,d7,#131945add r9,r9,r21946eor r2,r7,r81947veor d25,d25,d241948eor r0,r6,r6,ror#51949add r10,r10,r121950vadd.i32 d0,d0,d251951and r2,r2,r61952eor r12,r0,r6,ror#191953vshr.u32 d24,d0,#171954eor r0,r10,r10,ror#111955eor r2,r2,r81956vsli.32 d24,d0,#151957add r9,r9,r12,ror#61958eor r12,r10,r111959vshr.u32 d25,d0,#101960eor r0,r0,r10,ror#201961add r9,r9,r21962veor d25,d25,d241963ldr r2,[sp,#12]1964and r3,r3,r121965vshr.u32 d24,d0,#191966add r5,r5,r91967add r9,r9,r0,ror#21968eor r3,r3,r111969vld1.32 {q8},[r14,:128]!1970add r8,r8,r21971vsli.32 d24,d0,#131972eor r2,r6,r71973eor r0,r5,r5,ror#51974veor d25,d25,d241975add r9,r9,r31976and r2,r2,r51977vadd.i32 d1,d1,d251978eor r3,r0,r5,ror#191979eor r0,r9,r9,ror#111980vadd.i32 q8,q8,q01981eor r2,r2,r71982add r8,r8,r3,ror#61983eor r3,r9,r101984eor r0,r0,r9,ror#201985add r8,r8,r21986ldr r2,[sp,#16]1987and r12,r12,r31988add r4,r4,r81989vst1.32 {q8},[r1,:128]!1990add r8,r8,r0,ror#21991eor r12,r12,r101992vext.8 q8,q1,q2,#41993add r7,r7,r21994eor r2,r5,r61995eor r0,r4,r4,ror#51996vext.8 q9,q3,q0,#41997add r8,r8,r121998and r2,r2,r41999eor r12,r0,r4,ror#192000vshr.u32 q10,q8,#72001eor r0,r8,r8,ror#112002eor r2,r2,r62003vadd.i32 q1,q1,q92004add r7,r7,r12,ror#62005eor r12,r8,r92006vshr.u32 q9,q8,#32007eor r0,r0,r8,ror#202008add r7,r7,r22009vsli.32 q10,q8,#252010ldr r2,[sp,#20]2011and r3,r3,r122012vshr.u32 q11,q8,#182013add r11,r11,r72014add r7,r7,r0,ror#22015eor r3,r3,r92016veor q9,q9,q102017add r6,r6,r22018vsli.32 q11,q8,#142019eor r2,r4,r52020eor r0,r11,r11,ror#52021vshr.u32 d24,d1,#172022add r7,r7,r32023and r2,r2,r112024veor q9,q9,q112025eor r3,r0,r11,ror#192026eor r0,r7,r7,ror#112027vsli.32 d24,d1,#152028eor r2,r2,r52029add r6,r6,r3,ror#62030vshr.u32 d25,d1,#102031eor r3,r7,r82032eor r0,r0,r7,ror#202033vadd.i32 q1,q1,q92034add r6,r6,r22035ldr r2,[sp,#24]2036veor d25,d25,d242037and r12,r12,r32038add r10,r10,r62039vshr.u32 d24,d1,#192040add r6,r6,r0,ror#22041eor r12,r12,r82042vsli.32 d24,d1,#132043add r5,r5,r22044eor r2,r11,r42045veor d25,d25,d242046eor r0,r10,r10,ror#52047add r6,r6,r122048vadd.i32 d2,d2,d252049and r2,r2,r102050eor r12,r0,r10,ror#192051vshr.u32 d24,d2,#172052eor r0,r6,r6,ror#112053eor r2,r2,r42054vsli.32 d24,d2,#152055add r5,r5,r12,ror#62056eor r12,r6,r72057vshr.u32 d25,d2,#102058eor r0,r0,r6,ror#202059add r5,r5,r22060veor d25,d25,d242061ldr r2,[sp,#28]2062and r3,r3,r122063vshr.u32 d24,d2,#192064add r9,r9,r52065add r5,r5,r0,ror#22066eor r3,r3,r72067vld1.32 {q8},[r14,:128]!2068add r4,r4,r22069vsli.32 d24,d2,#132070eor r2,r10,r112071eor r0,r9,r9,ror#52072veor d25,d25,d242073add r5,r5,r32074and r2,r2,r92075vadd.i32 d3,d3,d252076eor r3,r0,r9,ror#192077eor r0,r5,r5,ror#112078vadd.i32 q8,q8,q12079eor r2,r2,r112080add r4,r4,r3,ror#62081eor r3,r5,r62082eor r0,r0,r5,ror#202083add r4,r4,r22084ldr r2,[sp,#32]2085and r12,r12,r32086add r8,r8,r42087vst1.32 {q8},[r1,:128]!2088add r4,r4,r0,ror#22089eor r12,r12,r62090vext.8 q8,q2,q3,#42091add r11,r11,r22092eor r2,r9,r102093eor r0,r8,r8,ror#52094vext.8 q9,q0,q1,#42095add r4,r4,r122096and r2,r2,r82097eor r12,r0,r8,ror#192098vshr.u32 q10,q8,#72099eor r0,r4,r4,ror#112100eor r2,r2,r102101vadd.i32 q2,q2,q92102add r11,r11,r12,ror#62103eor r12,r4,r52104vshr.u32 q9,q8,#32105eor r0,r0,r4,ror#202106add r11,r11,r22107vsli.32 q10,q8,#252108ldr r2,[sp,#36]2109and r3,r3,r122110vshr.u32 q11,q8,#182111add r7,r7,r112112add r11,r11,r0,ror#22113eor r3,r3,r52114veor q9,q9,q102115add r10,r10,r22116vsli.32 q11,q8,#142117eor r2,r8,r92118eor r0,r7,r7,ror#52119vshr.u32 d24,d3,#172120add r11,r11,r32121and r2,r2,r72122veor q9,q9,q112123eor r3,r0,r7,ror#192124eor r0,r11,r11,ror#112125vsli.32 d24,d3,#152126eor r2,r2,r92127add r10,r10,r3,ror#62128vshr.u32 d25,d3,#102129eor r3,r11,r42130eor r0,r0,r11,ror#202131vadd.i32 q2,q2,q92132add r10,r10,r22133ldr r2,[sp,#40]2134veor d25,d25,d242135and r12,r12,r32136add r6,r6,r102137vshr.u32 d24,d3,#192138add r10,r10,r0,ror#22139eor r12,r12,r42140vsli.32 d24,d3,#132141add r9,r9,r22142eor r2,r7,r82143veor d25,d25,d242144eor r0,r6,r6,ror#52145add r10,r10,r122146vadd.i32 d4,d4,d252147and r2,r2,r62148eor r12,r0,r6,ror#192149vshr.u32 d24,d4,#172150eor r0,r10,r10,ror#112151eor r2,r2,r82152vsli.32 d24,d4,#152153add r9,r9,r12,ror#62154eor r12,r10,r112155vshr.u32 d25,d4,#102156eor r0,r0,r10,ror#202157add r9,r9,r22158veor d25,d25,d242159ldr r2,[sp,#44]2160and r3,r3,r122161vshr.u32 d24,d4,#192162add r5,r5,r92163add r9,r9,r0,ror#22164eor r3,r3,r112165vld1.32 {q8},[r14,:128]!2166add r8,r8,r22167vsli.32 d24,d4,#132168eor r2,r6,r72169eor r0,r5,r5,ror#52170veor d25,d25,d242171add r9,r9,r32172and r2,r2,r52173vadd.i32 d5,d5,d252174eor r3,r0,r5,ror#192175eor r0,r9,r9,ror#112176vadd.i32 q8,q8,q22177eor r2,r2,r72178add r8,r8,r3,ror#62179eor r3,r9,r102180eor r0,r0,r9,ror#202181add r8,r8,r22182ldr r2,[sp,#48]2183and r12,r12,r32184add r4,r4,r82185vst1.32 {q8},[r1,:128]!2186add r8,r8,r0,ror#22187eor r12,r12,r102188vext.8 q8,q3,q0,#42189add r7,r7,r22190eor r2,r5,r62191eor r0,r4,r4,ror#52192vext.8 q9,q1,q2,#42193add r8,r8,r122194and r2,r2,r42195eor r12,r0,r4,ror#192196vshr.u32 q10,q8,#72197eor r0,r8,r8,ror#112198eor r2,r2,r62199vadd.i32 q3,q3,q92200add r7,r7,r12,ror#62201eor r12,r8,r92202vshr.u32 q9,q8,#32203eor r0,r0,r8,ror#202204add r7,r7,r22205vsli.32 q10,q8,#252206ldr r2,[sp,#52]2207and r3,r3,r122208vshr.u32 q11,q8,#182209add r11,r11,r72210add r7,r7,r0,ror#22211eor r3,r3,r92212veor q9,q9,q102213add r6,r6,r22214vsli.32 q11,q8,#142215eor r2,r4,r52216eor r0,r11,r11,ror#52217vshr.u32 d24,d5,#172218add r7,r7,r32219and r2,r2,r112220veor q9,q9,q112221eor r3,r0,r11,ror#192222eor r0,r7,r7,ror#112223vsli.32 d24,d5,#152224eor r2,r2,r52225add r6,r6,r3,ror#62226vshr.u32 d25,d5,#102227eor r3,r7,r82228eor r0,r0,r7,ror#202229vadd.i32 q3,q3,q92230add r6,r6,r22231ldr r2,[sp,#56]2232veor d25,d25,d242233and r12,r12,r32234add r10,r10,r62235vshr.u32 d24,d5,#192236add r6,r6,r0,ror#22237eor r12,r12,r82238vsli.32 d24,d5,#132239add r5,r5,r22240eor r2,r11,r42241veor d25,d25,d242242eor r0,r10,r10,ror#52243add r6,r6,r122244vadd.i32 d6,d6,d252245and r2,r2,r102246eor r12,r0,r10,ror#192247vshr.u32 d24,d6,#172248eor r0,r6,r6,ror#112249eor r2,r2,r42250vsli.32 d24,d6,#152251add r5,r5,r12,ror#62252eor r12,r6,r72253vshr.u32 d25,d6,#102254eor r0,r0,r6,ror#202255add r5,r5,r22256veor d25,d25,d242257ldr r2,[sp,#60]2258and r3,r3,r122259vshr.u32 d24,d6,#192260add r9,r9,r52261add r5,r5,r0,ror#22262eor r3,r3,r72263vld1.32 {q8},[r14,:128]!2264add r4,r4,r22265vsli.32 d24,d6,#132266eor r2,r10,r112267eor r0,r9,r9,ror#52268veor d25,d25,d242269add r5,r5,r32270and r2,r2,r92271vadd.i32 d7,d7,d252272eor r3,r0,r9,ror#192273eor r0,r5,r5,ror#112274vadd.i32 q8,q8,q32275eor r2,r2,r112276add r4,r4,r3,ror#62277eor r3,r5,r62278eor r0,r0,r5,ror#202279add r4,r4,r22280ldr r2,[r14]2281and r12,r12,r32282add r8,r8,r42283vst1.32 {q8},[r1,:128]!2284add r4,r4,r0,ror#22285eor r12,r12,r62286teq r2,#0 @ check for K256 terminator2287ldr r2,[sp,#0]2288sub r1,r1,#642289bne .L_00_4822902291ldr r1,[sp,#68]2292ldr r0,[sp,#72]2293sub r14,r14,#256 @ rewind r142294teq r1,r02295it eq2296subeq r1,r1,#64 @ avoid SEGV2297vld1.8 {q0},[r1]! @ load next input block2298vld1.8 {q1},[r1]!2299vld1.8 {q2},[r1]!2300vld1.8 {q3},[r1]!2301it ne2302strne r1,[sp,#68]2303mov r1,sp2304add r11,r11,r22305eor r2,r9,r102306eor r0,r8,r8,ror#52307add r4,r4,r122308vld1.32 {q8},[r14,:128]!2309and r2,r2,r82310eor r12,r0,r8,ror#192311eor r0,r4,r4,ror#112312eor r2,r2,r102313vrev32.8 q0,q02314add r11,r11,r12,ror#62315eor r12,r4,r52316eor r0,r0,r4,ror#202317add r11,r11,r22318vadd.i32 q8,q8,q02319ldr r2,[sp,#4]2320and r3,r3,r122321add r7,r7,r112322add r11,r11,r0,ror#22323eor r3,r3,r52324add r10,r10,r22325eor r2,r8,r92326eor r0,r7,r7,ror#52327add r11,r11,r32328and r2,r2,r72329eor r3,r0,r7,ror#192330eor r0,r11,r11,ror#112331eor r2,r2,r92332add r10,r10,r3,ror#62333eor r3,r11,r42334eor r0,r0,r11,ror#202335add r10,r10,r22336ldr r2,[sp,#8]2337and r12,r12,r32338add r6,r6,r102339add r10,r10,r0,ror#22340eor r12,r12,r42341add r9,r9,r22342eor r2,r7,r82343eor r0,r6,r6,ror#52344add r10,r10,r122345and r2,r2,r62346eor r12,r0,r6,ror#192347eor r0,r10,r10,ror#112348eor r2,r2,r82349add r9,r9,r12,ror#62350eor r12,r10,r112351eor r0,r0,r10,ror#202352add r9,r9,r22353ldr r2,[sp,#12]2354and r3,r3,r122355add r5,r5,r92356add r9,r9,r0,ror#22357eor r3,r3,r112358add r8,r8,r22359eor r2,r6,r72360eor r0,r5,r5,ror#52361add r9,r9,r32362and r2,r2,r52363eor r3,r0,r5,ror#192364eor r0,r9,r9,ror#112365eor r2,r2,r72366add r8,r8,r3,ror#62367eor r3,r9,r102368eor r0,r0,r9,ror#202369add r8,r8,r22370ldr r2,[sp,#16]2371and r12,r12,r32372add r4,r4,r82373add r8,r8,r0,ror#22374eor r12,r12,r102375vst1.32 {q8},[r1,:128]!2376add r7,r7,r22377eor r2,r5,r62378eor r0,r4,r4,ror#52379add r8,r8,r122380vld1.32 {q8},[r14,:128]!2381and r2,r2,r42382eor r12,r0,r4,ror#192383eor r0,r8,r8,ror#112384eor r2,r2,r62385vrev32.8 q1,q12386add r7,r7,r12,ror#62387eor r12,r8,r92388eor r0,r0,r8,ror#202389add r7,r7,r22390vadd.i32 q8,q8,q12391ldr r2,[sp,#20]2392and r3,r3,r122393add r11,r11,r72394add r7,r7,r0,ror#22395eor r3,r3,r92396add r6,r6,r22397eor r2,r4,r52398eor r0,r11,r11,ror#52399add r7,r7,r32400and r2,r2,r112401eor r3,r0,r11,ror#192402eor r0,r7,r7,ror#112403eor r2,r2,r52404add r6,r6,r3,ror#62405eor r3,r7,r82406eor r0,r0,r7,ror#202407add r6,r6,r22408ldr r2,[sp,#24]2409and r12,r12,r32410add r10,r10,r62411add r6,r6,r0,ror#22412eor r12,r12,r82413add r5,r5,r22414eor r2,r11,r42415eor r0,r10,r10,ror#52416add r6,r6,r122417and r2,r2,r102418eor r12,r0,r10,ror#192419eor r0,r6,r6,ror#112420eor r2,r2,r42421add r5,r5,r12,ror#62422eor r12,r6,r72423eor r0,r0,r6,ror#202424add r5,r5,r22425ldr r2,[sp,#28]2426and r3,r3,r122427add r9,r9,r52428add r5,r5,r0,ror#22429eor r3,r3,r72430add r4,r4,r22431eor r2,r10,r112432eor r0,r9,r9,ror#52433add r5,r5,r32434and r2,r2,r92435eor r3,r0,r9,ror#192436eor r0,r5,r5,ror#112437eor r2,r2,r112438add r4,r4,r3,ror#62439eor r3,r5,r62440eor r0,r0,r5,ror#202441add r4,r4,r22442ldr r2,[sp,#32]2443and r12,r12,r32444add r8,r8,r42445add r4,r4,r0,ror#22446eor r12,r12,r62447vst1.32 {q8},[r1,:128]!2448add r11,r11,r22449eor r2,r9,r102450eor r0,r8,r8,ror#52451add r4,r4,r122452vld1.32 {q8},[r14,:128]!2453and r2,r2,r82454eor r12,r0,r8,ror#192455eor r0,r4,r4,ror#112456eor r2,r2,r102457vrev32.8 q2,q22458add r11,r11,r12,ror#62459eor r12,r4,r52460eor r0,r0,r4,ror#202461add r11,r11,r22462vadd.i32 q8,q8,q22463ldr r2,[sp,#36]2464and r3,r3,r122465add r7,r7,r112466add r11,r11,r0,ror#22467eor r3,r3,r52468add r10,r10,r22469eor r2,r8,r92470eor r0,r7,r7,ror#52471add r11,r11,r32472and r2,r2,r72473eor r3,r0,r7,ror#192474eor r0,r11,r11,ror#112475eor r2,r2,r92476add r10,r10,r3,ror#62477eor r3,r11,r42478eor r0,r0,r11,ror#202479add r10,r10,r22480ldr r2,[sp,#40]2481and r12,r12,r32482add r6,r6,r102483add r10,r10,r0,ror#22484eor r12,r12,r42485add r9,r9,r22486eor r2,r7,r82487eor r0,r6,r6,ror#52488add r10,r10,r122489and r2,r2,r62490eor r12,r0,r6,ror#192491eor r0,r10,r10,ror#112492eor r2,r2,r82493add r9,r9,r12,ror#62494eor r12,r10,r112495eor r0,r0,r10,ror#202496add r9,r9,r22497ldr r2,[sp,#44]2498and r3,r3,r122499add r5,r5,r92500add r9,r9,r0,ror#22501eor r3,r3,r112502add r8,r8,r22503eor r2,r6,r72504eor r0,r5,r5,ror#52505add r9,r9,r32506and r2,r2,r52507eor r3,r0,r5,ror#192508eor r0,r9,r9,ror#112509eor r2,r2,r72510add r8,r8,r3,ror#62511eor r3,r9,r102512eor r0,r0,r9,ror#202513add r8,r8,r22514ldr r2,[sp,#48]2515and r12,r12,r32516add r4,r4,r82517add r8,r8,r0,ror#22518eor r12,r12,r102519vst1.32 {q8},[r1,:128]!2520add r7,r7,r22521eor r2,r5,r62522eor r0,r4,r4,ror#52523add r8,r8,r122524vld1.32 {q8},[r14,:128]!2525and r2,r2,r42526eor r12,r0,r4,ror#192527eor r0,r8,r8,ror#112528eor r2,r2,r62529vrev32.8 q3,q32530add r7,r7,r12,ror#62531eor r12,r8,r92532eor r0,r0,r8,ror#202533add r7,r7,r22534vadd.i32 q8,q8,q32535ldr r2,[sp,#52]2536and r3,r3,r122537add r11,r11,r72538add r7,r7,r0,ror#22539eor r3,r3,r92540add r6,r6,r22541eor r2,r4,r52542eor r0,r11,r11,ror#52543add r7,r7,r32544and r2,r2,r112545eor r3,r0,r11,ror#192546eor r0,r7,r7,ror#112547eor r2,r2,r52548add r6,r6,r3,ror#62549eor r3,r7,r82550eor r0,r0,r7,ror#202551add r6,r6,r22552ldr r2,[sp,#56]2553and r12,r12,r32554add r10,r10,r62555add r6,r6,r0,ror#22556eor r12,r12,r82557add r5,r5,r22558eor r2,r11,r42559eor r0,r10,r10,ror#52560add r6,r6,r122561and r2,r2,r102562eor r12,r0,r10,ror#192563eor r0,r6,r6,ror#112564eor r2,r2,r42565add r5,r5,r12,ror#62566eor r12,r6,r72567eor r0,r0,r6,ror#202568add r5,r5,r22569ldr r2,[sp,#60]2570and r3,r3,r122571add r9,r9,r52572add r5,r5,r0,ror#22573eor r3,r3,r72574add r4,r4,r22575eor r2,r10,r112576eor r0,r9,r9,ror#52577add r5,r5,r32578and r2,r2,r92579eor r3,r0,r9,ror#192580eor r0,r5,r5,ror#112581eor r2,r2,r112582add r4,r4,r3,ror#62583eor r3,r5,r62584eor r0,r0,r5,ror#202585add r4,r4,r22586ldr r2,[sp,#64]2587and r12,r12,r32588add r8,r8,r42589add r4,r4,r0,ror#22590eor r12,r12,r62591vst1.32 {q8},[r1,:128]!2592ldr r0,[r2,#0]2593add r4,r4,r12 @ h+=Maj(a,b,c) from the past2594ldr r12,[r2,#4]2595ldr r3,[r2,#8]2596ldr r1,[r2,#12]2597add r4,r4,r0 @ accumulate2598ldr r0,[r2,#16]2599add r5,r5,r122600ldr r12,[r2,#20]2601add r6,r6,r32602ldr r3,[r2,#24]2603add r7,r7,r12604ldr r1,[r2,#28]2605add r8,r8,r02606str r4,[r2],#42607add r9,r9,r122608str r5,[r2],#42609add r10,r10,r32610str r6,[r2],#42611add r11,r11,r12612str r7,[r2],#42613stmia r2,{r8-r11}26142615ittte ne2616movne r1,sp2617ldrne r2,[sp,#0]2618eorne r12,r12,r122619ldreq sp,[sp,#76] @ restore original sp2620itt ne2621eorne r3,r5,r62622bne .L_00_4826232624ldmia sp!,{r4-r12,pc}2625.size zfs_sha256_block_neon,.-zfs_sha256_block_neon26262627# if defined(__thumb2__)2628# define INST(a,b,c,d) .byte c,d|0xc,a,b2629# else2630# define INST(a,b,c,d) .byte a,b,c,d2631# endif26322633.globl zfs_sha256_block_armv82634.type zfs_sha256_block_armv8,%function2635.align 52636zfs_sha256_block_armv8:2637.LARMv8:2638vld1.32 {q0,q1},[r0]2639sub r3,r3,#256+322640add r2,r1,r2,lsl#6 @ len to point at the end of inp2641b .Loop_v826422643.align 42644.Loop_v8:2645vld1.8 {q8-q9},[r1]!2646vld1.8 {q10-q11},[r1]!2647vld1.32 {q12},[r3]!2648vrev32.8 q8,q82649vrev32.8 q9,q92650vrev32.8 q10,q102651vrev32.8 q11,q112652vmov q14,q0 @ offload2653vmov q15,q12654teq r1,r22655vld1.32 {q13},[r3]!2656vadd.i32 q12,q12,q82657INST(0xe2,0x03,0xfa,0xf3) @ sha256su0 q8,q92658vmov q2,q02659INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q122660INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q122661INST(0xe6,0x0c,0x64,0xf3) @ sha256su1 q8,q10,q112662vld1.32 {q12},[r3]!2663vadd.i32 q13,q13,q92664INST(0xe4,0x23,0xfa,0xf3) @ sha256su0 q9,q102665vmov q2,q02666INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q132667INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q132668INST(0xe0,0x2c,0x66,0xf3) @ sha256su1 q9,q11,q82669vld1.32 {q13},[r3]!2670vadd.i32 q12,q12,q102671INST(0xe6,0x43,0xfa,0xf3) @ sha256su0 q10,q112672vmov q2,q02673INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q122674INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q122675INST(0xe2,0x4c,0x60,0xf3) @ sha256su1 q10,q8,q92676vld1.32 {q12},[r3]!2677vadd.i32 q13,q13,q112678INST(0xe0,0x63,0xfa,0xf3) @ sha256su0 q11,q82679vmov q2,q02680INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q132681INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q132682INST(0xe4,0x6c,0x62,0xf3) @ sha256su1 q11,q9,q102683vld1.32 {q13},[r3]!2684vadd.i32 q12,q12,q82685INST(0xe2,0x03,0xfa,0xf3) @ sha256su0 q8,q92686vmov q2,q02687INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q122688INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q122689INST(0xe6,0x0c,0x64,0xf3) @ sha256su1 q8,q10,q112690vld1.32 {q12},[r3]!2691vadd.i32 q13,q13,q92692INST(0xe4,0x23,0xfa,0xf3) @ sha256su0 q9,q102693vmov q2,q02694INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q132695INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q132696INST(0xe0,0x2c,0x66,0xf3) @ sha256su1 q9,q11,q82697vld1.32 {q13},[r3]!2698vadd.i32 q12,q12,q102699INST(0xe6,0x43,0xfa,0xf3) @ sha256su0 q10,q112700vmov q2,q02701INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q122702INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q122703INST(0xe2,0x4c,0x60,0xf3) @ sha256su1 q10,q8,q92704vld1.32 {q12},[r3]!2705vadd.i32 q13,q13,q112706INST(0xe0,0x63,0xfa,0xf3) @ sha256su0 q11,q82707vmov q2,q02708INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q132709INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q132710INST(0xe4,0x6c,0x62,0xf3) @ sha256su1 q11,q9,q102711vld1.32 {q13},[r3]!2712vadd.i32 q12,q12,q82713INST(0xe2,0x03,0xfa,0xf3) @ sha256su0 q8,q92714vmov q2,q02715INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q122716INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q122717INST(0xe6,0x0c,0x64,0xf3) @ sha256su1 q8,q10,q112718vld1.32 {q12},[r3]!2719vadd.i32 q13,q13,q92720INST(0xe4,0x23,0xfa,0xf3) @ sha256su0 q9,q102721vmov q2,q02722INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q132723INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q132724INST(0xe0,0x2c,0x66,0xf3) @ sha256su1 q9,q11,q82725vld1.32 {q13},[r3]!2726vadd.i32 q12,q12,q102727INST(0xe6,0x43,0xfa,0xf3) @ sha256su0 q10,q112728vmov q2,q02729INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q122730INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q122731INST(0xe2,0x4c,0x60,0xf3) @ sha256su1 q10,q8,q92732vld1.32 {q12},[r3]!2733vadd.i32 q13,q13,q112734INST(0xe0,0x63,0xfa,0xf3) @ sha256su0 q11,q82735vmov q2,q02736INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q132737INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q132738INST(0xe4,0x6c,0x62,0xf3) @ sha256su1 q11,q9,q102739vld1.32 {q13},[r3]!2740vadd.i32 q12,q12,q82741vmov q2,q02742INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q122743INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q1227442745vld1.32 {q12},[r3]!2746vadd.i32 q13,q13,q92747vmov q2,q02748INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q132749INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q1327502751vld1.32 {q13},[r3]2752vadd.i32 q12,q12,q102753sub r3,r3,#256-16 @ rewind2754vmov q2,q02755INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q122756INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q1227572758vadd.i32 q13,q13,q112759vmov q2,q02760INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q132761INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q1327622763vadd.i32 q0,q0,q142764vadd.i32 q1,q1,q152765it ne2766bne .Loop_v827672768vst1.32 {q0,q1},[r0]27692770bx lr @ bx lr2771.size zfs_sha256_block_armv8,.-zfs_sha256_block_armv827722773#endif // #if __ARM_ARCH__ >= 72774#endif // #if defined(__arm__)277527762777