1*61145dc2SMartin Matuska// SPDX-License-Identifier: Apache-2.0 22a58b312SMartin Matuska/* 32a58b312SMartin Matuska * Copyright 2004-2022 The OpenSSL Project Authors. All Rights Reserved. 42a58b312SMartin Matuska * 52a58b312SMartin Matuska * Licensed under the Apache License, Version 2.0 (the "License"); 62a58b312SMartin Matuska * you may not use this file except in compliance with the License. 72a58b312SMartin Matuska * You may obtain a copy of the License at 82a58b312SMartin Matuska * 92a58b312SMartin Matuska * https://www.apache.org/licenses/LICENSE-2.0 102a58b312SMartin Matuska * 112a58b312SMartin Matuska * Unless required by applicable law or agreed to in writing, software 122a58b312SMartin Matuska * distributed under the License is distributed on an "AS IS" BASIS, 132a58b312SMartin Matuska * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 142a58b312SMartin Matuska * See the License for the specific language governing permissions and 152a58b312SMartin Matuska * limitations under the License. 162a58b312SMartin Matuska */ 172a58b312SMartin Matuska 182a58b312SMartin Matuska/* 192a58b312SMartin Matuska * Portions Copyright (c) 2022 Tino Reichardt <milky-zfs@mcmilk.de> 202a58b312SMartin Matuska * - modified assembly to fit into OpenZFS 212a58b312SMartin Matuska */ 222a58b312SMartin Matuska 232a58b312SMartin Matuska#if defined(__aarch64__) 242a58b312SMartin Matuska 251719886fSMartin Matuska .section .note.gnu.property,"a",@note 261719886fSMartin Matuska .p2align 3 271719886fSMartin Matuska .word 4 281719886fSMartin Matuska .word 16 291719886fSMartin Matuska .word 5 301719886fSMartin Matuska .asciz "GNU" 311719886fSMartin Matuska .word 3221225472 321719886fSMartin Matuska .word 4 331719886fSMartin Matuska .word 3 341719886fSMartin Matuska .word 0 352a58b312SMartin Matuska.text 362a58b312SMartin Matuska 372a58b312SMartin Matuska.align 6 382a58b312SMartin Matuska.type .LK256,%object 392a58b312SMartin Matuska.LK256: 402a58b312SMartin Matuska .long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5 412a58b312SMartin Matuska .long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5 422a58b312SMartin Matuska .long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3 432a58b312SMartin Matuska .long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174 442a58b312SMartin Matuska .long 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc 452a58b312SMartin Matuska .long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da 462a58b312SMartin Matuska .long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7 472a58b312SMartin Matuska .long 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967 482a58b312SMartin Matuska .long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13 492a58b312SMartin Matuska .long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85 502a58b312SMartin Matuska .long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3 512a58b312SMartin Matuska .long 0xd192e819,0xd6990624,0xf40e3585,0x106aa070 522a58b312SMartin Matuska .long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5 532a58b312SMartin Matuska .long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3 542a58b312SMartin Matuska .long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208 552a58b312SMartin Matuska .long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2 562a58b312SMartin Matuska .long 0 //terminator 572a58b312SMartin Matuska.size .LK256,.-.LK256 582a58b312SMartin Matuska 592a58b312SMartin Matuska.globl zfs_sha256_block_armv7 602a58b312SMartin Matuska.type zfs_sha256_block_armv7,%function 612a58b312SMartin Matuska.align 6 622a58b312SMartin Matuskazfs_sha256_block_armv7: 63f7f4bd06SMartin Matuska hint #34 // bti c 642a58b312SMartin Matuska stp x29,x30,[sp,#-128]! 652a58b312SMartin Matuska add x29,sp,#0 662a58b312SMartin Matuska 672a58b312SMartin Matuska stp x19,x20,[sp,#16] 682a58b312SMartin Matuska stp x21,x22,[sp,#32] 692a58b312SMartin Matuska stp x23,x24,[sp,#48] 702a58b312SMartin Matuska stp x25,x26,[sp,#64] 712a58b312SMartin Matuska stp x27,x28,[sp,#80] 722a58b312SMartin Matuska sub sp,sp,#4*4 732a58b312SMartin Matuska 742a58b312SMartin Matuska ldp w20,w21,[x0] // load context 752a58b312SMartin Matuska ldp w22,w23,[x0,#2*4] 762a58b312SMartin Matuska ldp w24,w25,[x0,#4*4] 772a58b312SMartin Matuska add x2,x1,x2,lsl#6 // end of input 782a58b312SMartin Matuska ldp w26,w27,[x0,#6*4] 792a58b312SMartin Matuska adr x30,.LK256 802a58b312SMartin Matuska stp x0,x2,[x29,#96] 812a58b312SMartin Matuska 822a58b312SMartin Matuska.Loop: 832a58b312SMartin Matuska ldp w3,w4,[x1],#2*4 842a58b312SMartin Matuska ldr w19,[x30],#4 // *K++ 852a58b312SMartin Matuska eor w28,w21,w22 // magic seed 862a58b312SMartin Matuska str x1,[x29,#112] 872a58b312SMartin Matuska#ifndef __AARCH64EB__ 882a58b312SMartin Matuska rev w3,w3 // 0 892a58b312SMartin Matuska#endif 902a58b312SMartin Matuska ror w16,w24,#6 912a58b312SMartin Matuska add w27,w27,w19 // h+=K[i] 922a58b312SMartin Matuska eor w6,w24,w24,ror#14 932a58b312SMartin Matuska and w17,w25,w24 942a58b312SMartin Matuska bic w19,w26,w24 952a58b312SMartin Matuska add w27,w27,w3 // h+=X[i] 962a58b312SMartin Matuska orr w17,w17,w19 // Ch(e,f,g) 972a58b312SMartin Matuska eor w19,w20,w21 // a^b, b^c in next round 982a58b312SMartin Matuska eor w16,w16,w6,ror#11 // Sigma1(e) 992a58b312SMartin Matuska ror w6,w20,#2 1002a58b312SMartin Matuska add w27,w27,w17 // h+=Ch(e,f,g) 1012a58b312SMartin Matuska eor w17,w20,w20,ror#9 1022a58b312SMartin Matuska add w27,w27,w16 // h+=Sigma1(e) 1032a58b312SMartin Matuska and w28,w28,w19 // (b^c)&=(a^b) 1042a58b312SMartin Matuska add w23,w23,w27 // d+=h 1052a58b312SMartin Matuska eor w28,w28,w21 // Maj(a,b,c) 1062a58b312SMartin Matuska eor w17,w6,w17,ror#13 // Sigma0(a) 1072a58b312SMartin Matuska add w27,w27,w28 // h+=Maj(a,b,c) 1082a58b312SMartin Matuska ldr w28,[x30],#4 // *K++, w19 in next round 1092a58b312SMartin Matuska //add w27,w27,w17 // h+=Sigma0(a) 1102a58b312SMartin Matuska#ifndef __AARCH64EB__ 1112a58b312SMartin Matuska rev w4,w4 // 1 1122a58b312SMartin Matuska#endif 1132a58b312SMartin Matuska ldp w5,w6,[x1],#2*4 1142a58b312SMartin Matuska add w27,w27,w17 // h+=Sigma0(a) 1152a58b312SMartin Matuska ror w16,w23,#6 1162a58b312SMartin Matuska add w26,w26,w28 // h+=K[i] 1172a58b312SMartin Matuska eor w7,w23,w23,ror#14 1182a58b312SMartin Matuska and w17,w24,w23 1192a58b312SMartin Matuska bic w28,w25,w23 1202a58b312SMartin Matuska add w26,w26,w4 // h+=X[i] 1212a58b312SMartin Matuska orr w17,w17,w28 // Ch(e,f,g) 1222a58b312SMartin Matuska eor w28,w27,w20 // a^b, b^c in next round 1232a58b312SMartin Matuska eor w16,w16,w7,ror#11 // Sigma1(e) 1242a58b312SMartin Matuska ror w7,w27,#2 1252a58b312SMartin Matuska add w26,w26,w17 // h+=Ch(e,f,g) 1262a58b312SMartin Matuska eor w17,w27,w27,ror#9 1272a58b312SMartin Matuska add w26,w26,w16 // h+=Sigma1(e) 1282a58b312SMartin Matuska and w19,w19,w28 // (b^c)&=(a^b) 1292a58b312SMartin Matuska add w22,w22,w26 // d+=h 1302a58b312SMartin Matuska eor w19,w19,w20 // Maj(a,b,c) 1312a58b312SMartin Matuska eor w17,w7,w17,ror#13 // Sigma0(a) 1322a58b312SMartin Matuska add w26,w26,w19 // h+=Maj(a,b,c) 1332a58b312SMartin Matuska ldr w19,[x30],#4 // *K++, w28 in next round 1342a58b312SMartin Matuska //add w26,w26,w17 // h+=Sigma0(a) 1352a58b312SMartin Matuska#ifndef __AARCH64EB__ 1362a58b312SMartin Matuska rev w5,w5 // 2 1372a58b312SMartin Matuska#endif 1382a58b312SMartin Matuska add w26,w26,w17 // h+=Sigma0(a) 1392a58b312SMartin Matuska ror w16,w22,#6 1402a58b312SMartin Matuska add w25,w25,w19 // h+=K[i] 1412a58b312SMartin Matuska eor w8,w22,w22,ror#14 1422a58b312SMartin Matuska and w17,w23,w22 1432a58b312SMartin Matuska bic w19,w24,w22 1442a58b312SMartin Matuska add w25,w25,w5 // h+=X[i] 1452a58b312SMartin Matuska orr w17,w17,w19 // Ch(e,f,g) 1462a58b312SMartin Matuska eor w19,w26,w27 // a^b, b^c in next round 1472a58b312SMartin Matuska eor w16,w16,w8,ror#11 // Sigma1(e) 1482a58b312SMartin Matuska ror w8,w26,#2 1492a58b312SMartin Matuska add w25,w25,w17 // h+=Ch(e,f,g) 1502a58b312SMartin Matuska eor w17,w26,w26,ror#9 1512a58b312SMartin Matuska add w25,w25,w16 // h+=Sigma1(e) 1522a58b312SMartin Matuska and w28,w28,w19 // (b^c)&=(a^b) 1532a58b312SMartin Matuska add w21,w21,w25 // d+=h 1542a58b312SMartin Matuska eor w28,w28,w27 // Maj(a,b,c) 1552a58b312SMartin Matuska eor w17,w8,w17,ror#13 // Sigma0(a) 1562a58b312SMartin Matuska add w25,w25,w28 // h+=Maj(a,b,c) 1572a58b312SMartin Matuska ldr w28,[x30],#4 // *K++, w19 in next round 1582a58b312SMartin Matuska //add w25,w25,w17 // h+=Sigma0(a) 1592a58b312SMartin Matuska#ifndef __AARCH64EB__ 1602a58b312SMartin Matuska rev w6,w6 // 3 1612a58b312SMartin Matuska#endif 1622a58b312SMartin Matuska ldp w7,w8,[x1],#2*4 1632a58b312SMartin Matuska add w25,w25,w17 // h+=Sigma0(a) 1642a58b312SMartin Matuska ror w16,w21,#6 1652a58b312SMartin Matuska add w24,w24,w28 // h+=K[i] 1662a58b312SMartin Matuska eor w9,w21,w21,ror#14 1672a58b312SMartin Matuska and w17,w22,w21 1682a58b312SMartin Matuska bic w28,w23,w21 1692a58b312SMartin Matuska add w24,w24,w6 // h+=X[i] 1702a58b312SMartin Matuska orr w17,w17,w28 // Ch(e,f,g) 1712a58b312SMartin Matuska eor w28,w25,w26 // a^b, b^c in next round 1722a58b312SMartin Matuska eor w16,w16,w9,ror#11 // Sigma1(e) 1732a58b312SMartin Matuska ror w9,w25,#2 1742a58b312SMartin Matuska add w24,w24,w17 // h+=Ch(e,f,g) 1752a58b312SMartin Matuska eor w17,w25,w25,ror#9 1762a58b312SMartin Matuska add w24,w24,w16 // h+=Sigma1(e) 1772a58b312SMartin Matuska and w19,w19,w28 // (b^c)&=(a^b) 1782a58b312SMartin Matuska add w20,w20,w24 // d+=h 1792a58b312SMartin Matuska eor w19,w19,w26 // Maj(a,b,c) 1802a58b312SMartin Matuska eor w17,w9,w17,ror#13 // Sigma0(a) 1812a58b312SMartin Matuska add w24,w24,w19 // h+=Maj(a,b,c) 1822a58b312SMartin Matuska ldr w19,[x30],#4 // *K++, w28 in next round 1832a58b312SMartin Matuska //add w24,w24,w17 // h+=Sigma0(a) 1842a58b312SMartin Matuska#ifndef __AARCH64EB__ 1852a58b312SMartin Matuska rev w7,w7 // 4 1862a58b312SMartin Matuska#endif 1872a58b312SMartin Matuska add w24,w24,w17 // h+=Sigma0(a) 1882a58b312SMartin Matuska ror w16,w20,#6 1892a58b312SMartin Matuska add w23,w23,w19 // h+=K[i] 1902a58b312SMartin Matuska eor w10,w20,w20,ror#14 1912a58b312SMartin Matuska and w17,w21,w20 1922a58b312SMartin Matuska bic w19,w22,w20 1932a58b312SMartin Matuska add w23,w23,w7 // h+=X[i] 1942a58b312SMartin Matuska orr w17,w17,w19 // Ch(e,f,g) 1952a58b312SMartin Matuska eor w19,w24,w25 // a^b, b^c in next round 1962a58b312SMartin Matuska eor w16,w16,w10,ror#11 // Sigma1(e) 1972a58b312SMartin Matuska ror w10,w24,#2 1982a58b312SMartin Matuska add w23,w23,w17 // h+=Ch(e,f,g) 1992a58b312SMartin Matuska eor w17,w24,w24,ror#9 2002a58b312SMartin Matuska add w23,w23,w16 // h+=Sigma1(e) 2012a58b312SMartin Matuska and w28,w28,w19 // (b^c)&=(a^b) 2022a58b312SMartin Matuska add w27,w27,w23 // d+=h 2032a58b312SMartin Matuska eor w28,w28,w25 // Maj(a,b,c) 2042a58b312SMartin Matuska eor w17,w10,w17,ror#13 // Sigma0(a) 2052a58b312SMartin Matuska add w23,w23,w28 // h+=Maj(a,b,c) 2062a58b312SMartin Matuska ldr w28,[x30],#4 // *K++, w19 in next round 2072a58b312SMartin Matuska //add w23,w23,w17 // h+=Sigma0(a) 2082a58b312SMartin Matuska#ifndef __AARCH64EB__ 2092a58b312SMartin Matuska rev w8,w8 // 5 2102a58b312SMartin Matuska#endif 2112a58b312SMartin Matuska ldp w9,w10,[x1],#2*4 2122a58b312SMartin Matuska add w23,w23,w17 // h+=Sigma0(a) 2132a58b312SMartin Matuska ror w16,w27,#6 2142a58b312SMartin Matuska add w22,w22,w28 // h+=K[i] 2152a58b312SMartin Matuska eor w11,w27,w27,ror#14 2162a58b312SMartin Matuska and w17,w20,w27 2172a58b312SMartin Matuska bic w28,w21,w27 2182a58b312SMartin Matuska add w22,w22,w8 // h+=X[i] 2192a58b312SMartin Matuska orr w17,w17,w28 // Ch(e,f,g) 2202a58b312SMartin Matuska eor w28,w23,w24 // a^b, b^c in next round 2212a58b312SMartin Matuska eor w16,w16,w11,ror#11 // Sigma1(e) 2222a58b312SMartin Matuska ror w11,w23,#2 2232a58b312SMartin Matuska add w22,w22,w17 // h+=Ch(e,f,g) 2242a58b312SMartin Matuska eor w17,w23,w23,ror#9 2252a58b312SMartin Matuska add w22,w22,w16 // h+=Sigma1(e) 2262a58b312SMartin Matuska and w19,w19,w28 // (b^c)&=(a^b) 2272a58b312SMartin Matuska add w26,w26,w22 // d+=h 2282a58b312SMartin Matuska eor w19,w19,w24 // Maj(a,b,c) 2292a58b312SMartin Matuska eor w17,w11,w17,ror#13 // Sigma0(a) 2302a58b312SMartin Matuska add w22,w22,w19 // h+=Maj(a,b,c) 2312a58b312SMartin Matuska ldr w19,[x30],#4 // *K++, w28 in next round 2322a58b312SMartin Matuska //add w22,w22,w17 // h+=Sigma0(a) 2332a58b312SMartin Matuska#ifndef __AARCH64EB__ 2342a58b312SMartin Matuska rev w9,w9 // 6 2352a58b312SMartin Matuska#endif 2362a58b312SMartin Matuska add w22,w22,w17 // h+=Sigma0(a) 2372a58b312SMartin Matuska ror w16,w26,#6 2382a58b312SMartin Matuska add w21,w21,w19 // h+=K[i] 2392a58b312SMartin Matuska eor w12,w26,w26,ror#14 2402a58b312SMartin Matuska and w17,w27,w26 2412a58b312SMartin Matuska bic w19,w20,w26 2422a58b312SMartin Matuska add w21,w21,w9 // h+=X[i] 2432a58b312SMartin Matuska orr w17,w17,w19 // Ch(e,f,g) 2442a58b312SMartin Matuska eor w19,w22,w23 // a^b, b^c in next round 2452a58b312SMartin Matuska eor w16,w16,w12,ror#11 // Sigma1(e) 2462a58b312SMartin Matuska ror w12,w22,#2 2472a58b312SMartin Matuska add w21,w21,w17 // h+=Ch(e,f,g) 2482a58b312SMartin Matuska eor w17,w22,w22,ror#9 2492a58b312SMartin Matuska add w21,w21,w16 // h+=Sigma1(e) 2502a58b312SMartin Matuska and w28,w28,w19 // (b^c)&=(a^b) 2512a58b312SMartin Matuska add w25,w25,w21 // d+=h 2522a58b312SMartin Matuska eor w28,w28,w23 // Maj(a,b,c) 2532a58b312SMartin Matuska eor w17,w12,w17,ror#13 // Sigma0(a) 2542a58b312SMartin Matuska add w21,w21,w28 // h+=Maj(a,b,c) 2552a58b312SMartin Matuska ldr w28,[x30],#4 // *K++, w19 in next round 2562a58b312SMartin Matuska //add w21,w21,w17 // h+=Sigma0(a) 2572a58b312SMartin Matuska#ifndef __AARCH64EB__ 2582a58b312SMartin Matuska rev w10,w10 // 7 2592a58b312SMartin Matuska#endif 2602a58b312SMartin Matuska ldp w11,w12,[x1],#2*4 2612a58b312SMartin Matuska add w21,w21,w17 // h+=Sigma0(a) 2622a58b312SMartin Matuska ror w16,w25,#6 2632a58b312SMartin Matuska add w20,w20,w28 // h+=K[i] 2642a58b312SMartin Matuska eor w13,w25,w25,ror#14 2652a58b312SMartin Matuska and w17,w26,w25 2662a58b312SMartin Matuska bic w28,w27,w25 2672a58b312SMartin Matuska add w20,w20,w10 // h+=X[i] 2682a58b312SMartin Matuska orr w17,w17,w28 // Ch(e,f,g) 2692a58b312SMartin Matuska eor w28,w21,w22 // a^b, b^c in next round 2702a58b312SMartin Matuska eor w16,w16,w13,ror#11 // Sigma1(e) 2712a58b312SMartin Matuska ror w13,w21,#2 2722a58b312SMartin Matuska add w20,w20,w17 // h+=Ch(e,f,g) 2732a58b312SMartin Matuska eor w17,w21,w21,ror#9 2742a58b312SMartin Matuska add w20,w20,w16 // h+=Sigma1(e) 2752a58b312SMartin Matuska and w19,w19,w28 // (b^c)&=(a^b) 2762a58b312SMartin Matuska add w24,w24,w20 // d+=h 2772a58b312SMartin Matuska eor w19,w19,w22 // Maj(a,b,c) 2782a58b312SMartin Matuska eor w17,w13,w17,ror#13 // Sigma0(a) 2792a58b312SMartin Matuska add w20,w20,w19 // h+=Maj(a,b,c) 2802a58b312SMartin Matuska ldr w19,[x30],#4 // *K++, w28 in next round 2812a58b312SMartin Matuska //add w20,w20,w17 // h+=Sigma0(a) 2822a58b312SMartin Matuska#ifndef __AARCH64EB__ 2832a58b312SMartin Matuska rev w11,w11 // 8 2842a58b312SMartin Matuska#endif 2852a58b312SMartin Matuska add w20,w20,w17 // h+=Sigma0(a) 2862a58b312SMartin Matuska ror w16,w24,#6 2872a58b312SMartin Matuska add w27,w27,w19 // h+=K[i] 2882a58b312SMartin Matuska eor w14,w24,w24,ror#14 2892a58b312SMartin Matuska and w17,w25,w24 2902a58b312SMartin Matuska bic w19,w26,w24 2912a58b312SMartin Matuska add w27,w27,w11 // h+=X[i] 2922a58b312SMartin Matuska orr w17,w17,w19 // Ch(e,f,g) 2932a58b312SMartin Matuska eor w19,w20,w21 // a^b, b^c in next round 2942a58b312SMartin Matuska eor w16,w16,w14,ror#11 // Sigma1(e) 2952a58b312SMartin Matuska ror w14,w20,#2 2962a58b312SMartin Matuska add w27,w27,w17 // h+=Ch(e,f,g) 2972a58b312SMartin Matuska eor w17,w20,w20,ror#9 2982a58b312SMartin Matuska add w27,w27,w16 // h+=Sigma1(e) 2992a58b312SMartin Matuska and w28,w28,w19 // (b^c)&=(a^b) 3002a58b312SMartin Matuska add w23,w23,w27 // d+=h 3012a58b312SMartin Matuska eor w28,w28,w21 // Maj(a,b,c) 3022a58b312SMartin Matuska eor w17,w14,w17,ror#13 // Sigma0(a) 3032a58b312SMartin Matuska add w27,w27,w28 // h+=Maj(a,b,c) 3042a58b312SMartin Matuska ldr w28,[x30],#4 // *K++, w19 in next round 3052a58b312SMartin Matuska //add w27,w27,w17 // h+=Sigma0(a) 3062a58b312SMartin Matuska#ifndef __AARCH64EB__ 3072a58b312SMartin Matuska rev w12,w12 // 9 3082a58b312SMartin Matuska#endif 3092a58b312SMartin Matuska ldp w13,w14,[x1],#2*4 3102a58b312SMartin Matuska add w27,w27,w17 // h+=Sigma0(a) 3112a58b312SMartin Matuska ror w16,w23,#6 3122a58b312SMartin Matuska add w26,w26,w28 // h+=K[i] 3132a58b312SMartin Matuska eor w15,w23,w23,ror#14 3142a58b312SMartin Matuska and w17,w24,w23 3152a58b312SMartin Matuska bic w28,w25,w23 3162a58b312SMartin Matuska add w26,w26,w12 // h+=X[i] 3172a58b312SMartin Matuska orr w17,w17,w28 // Ch(e,f,g) 3182a58b312SMartin Matuska eor w28,w27,w20 // a^b, b^c in next round 3192a58b312SMartin Matuska eor w16,w16,w15,ror#11 // Sigma1(e) 3202a58b312SMartin Matuska ror w15,w27,#2 3212a58b312SMartin Matuska add w26,w26,w17 // h+=Ch(e,f,g) 3222a58b312SMartin Matuska eor w17,w27,w27,ror#9 3232a58b312SMartin Matuska add w26,w26,w16 // h+=Sigma1(e) 3242a58b312SMartin Matuska and w19,w19,w28 // (b^c)&=(a^b) 3252a58b312SMartin Matuska add w22,w22,w26 // d+=h 3262a58b312SMartin Matuska eor w19,w19,w20 // Maj(a,b,c) 3272a58b312SMartin Matuska eor w17,w15,w17,ror#13 // Sigma0(a) 3282a58b312SMartin Matuska add w26,w26,w19 // h+=Maj(a,b,c) 3292a58b312SMartin Matuska ldr w19,[x30],#4 // *K++, w28 in next round 3302a58b312SMartin Matuska //add w26,w26,w17 // h+=Sigma0(a) 3312a58b312SMartin Matuska#ifndef __AARCH64EB__ 3322a58b312SMartin Matuska rev w13,w13 // 10 3332a58b312SMartin Matuska#endif 3342a58b312SMartin Matuska add w26,w26,w17 // h+=Sigma0(a) 3352a58b312SMartin Matuska ror w16,w22,#6 3362a58b312SMartin Matuska add w25,w25,w19 // h+=K[i] 3372a58b312SMartin Matuska eor w0,w22,w22,ror#14 3382a58b312SMartin Matuska and w17,w23,w22 3392a58b312SMartin Matuska bic w19,w24,w22 3402a58b312SMartin Matuska add w25,w25,w13 // h+=X[i] 3412a58b312SMartin Matuska orr w17,w17,w19 // Ch(e,f,g) 3422a58b312SMartin Matuska eor w19,w26,w27 // a^b, b^c in next round 3432a58b312SMartin Matuska eor w16,w16,w0,ror#11 // Sigma1(e) 3442a58b312SMartin Matuska ror w0,w26,#2 3452a58b312SMartin Matuska add w25,w25,w17 // h+=Ch(e,f,g) 3462a58b312SMartin Matuska eor w17,w26,w26,ror#9 3472a58b312SMartin Matuska add w25,w25,w16 // h+=Sigma1(e) 3482a58b312SMartin Matuska and w28,w28,w19 // (b^c)&=(a^b) 3492a58b312SMartin Matuska add w21,w21,w25 // d+=h 3502a58b312SMartin Matuska eor w28,w28,w27 // Maj(a,b,c) 3512a58b312SMartin Matuska eor w17,w0,w17,ror#13 // Sigma0(a) 3522a58b312SMartin Matuska add w25,w25,w28 // h+=Maj(a,b,c) 3532a58b312SMartin Matuska ldr w28,[x30],#4 // *K++, w19 in next round 3542a58b312SMartin Matuska //add w25,w25,w17 // h+=Sigma0(a) 3552a58b312SMartin Matuska#ifndef __AARCH64EB__ 3562a58b312SMartin Matuska rev w14,w14 // 11 3572a58b312SMartin Matuska#endif 3582a58b312SMartin Matuska ldp w15,w0,[x1],#2*4 3592a58b312SMartin Matuska add w25,w25,w17 // h+=Sigma0(a) 3602a58b312SMartin Matuska str w6,[sp,#12] 3612a58b312SMartin Matuska ror w16,w21,#6 3622a58b312SMartin Matuska add w24,w24,w28 // h+=K[i] 3632a58b312SMartin Matuska eor w6,w21,w21,ror#14 3642a58b312SMartin Matuska and w17,w22,w21 3652a58b312SMartin Matuska bic w28,w23,w21 3662a58b312SMartin Matuska add w24,w24,w14 // h+=X[i] 3672a58b312SMartin Matuska orr w17,w17,w28 // Ch(e,f,g) 3682a58b312SMartin Matuska eor w28,w25,w26 // a^b, b^c in next round 3692a58b312SMartin Matuska eor w16,w16,w6,ror#11 // Sigma1(e) 3702a58b312SMartin Matuska ror w6,w25,#2 3712a58b312SMartin Matuska add w24,w24,w17 // h+=Ch(e,f,g) 3722a58b312SMartin Matuska eor w17,w25,w25,ror#9 3732a58b312SMartin Matuska add w24,w24,w16 // h+=Sigma1(e) 3742a58b312SMartin Matuska and w19,w19,w28 // (b^c)&=(a^b) 3752a58b312SMartin Matuska add w20,w20,w24 // d+=h 3762a58b312SMartin Matuska eor w19,w19,w26 // Maj(a,b,c) 3772a58b312SMartin Matuska eor w17,w6,w17,ror#13 // Sigma0(a) 3782a58b312SMartin Matuska add w24,w24,w19 // h+=Maj(a,b,c) 3792a58b312SMartin Matuska ldr w19,[x30],#4 // *K++, w28 in next round 3802a58b312SMartin Matuska //add w24,w24,w17 // h+=Sigma0(a) 3812a58b312SMartin Matuska#ifndef __AARCH64EB__ 3822a58b312SMartin Matuska rev w15,w15 // 12 3832a58b312SMartin Matuska#endif 3842a58b312SMartin Matuska add w24,w24,w17 // h+=Sigma0(a) 3852a58b312SMartin Matuska str w7,[sp,#0] 3862a58b312SMartin Matuska ror w16,w20,#6 3872a58b312SMartin Matuska add w23,w23,w19 // h+=K[i] 3882a58b312SMartin Matuska eor w7,w20,w20,ror#14 3892a58b312SMartin Matuska and w17,w21,w20 3902a58b312SMartin Matuska bic w19,w22,w20 3912a58b312SMartin Matuska add w23,w23,w15 // h+=X[i] 3922a58b312SMartin Matuska orr w17,w17,w19 // Ch(e,f,g) 3932a58b312SMartin Matuska eor w19,w24,w25 // a^b, b^c in next round 3942a58b312SMartin Matuska eor w16,w16,w7,ror#11 // Sigma1(e) 3952a58b312SMartin Matuska ror w7,w24,#2 3962a58b312SMartin Matuska add w23,w23,w17 // h+=Ch(e,f,g) 3972a58b312SMartin Matuska eor w17,w24,w24,ror#9 3982a58b312SMartin Matuska add w23,w23,w16 // h+=Sigma1(e) 3992a58b312SMartin Matuska and w28,w28,w19 // (b^c)&=(a^b) 4002a58b312SMartin Matuska add w27,w27,w23 // d+=h 4012a58b312SMartin Matuska eor w28,w28,w25 // Maj(a,b,c) 4022a58b312SMartin Matuska eor w17,w7,w17,ror#13 // Sigma0(a) 4032a58b312SMartin Matuska add w23,w23,w28 // h+=Maj(a,b,c) 4042a58b312SMartin Matuska ldr w28,[x30],#4 // *K++, w19 in next round 4052a58b312SMartin Matuska //add w23,w23,w17 // h+=Sigma0(a) 4062a58b312SMartin Matuska#ifndef __AARCH64EB__ 4072a58b312SMartin Matuska rev w0,w0 // 13 4082a58b312SMartin Matuska#endif 4092a58b312SMartin Matuska ldp w1,w2,[x1] 4102a58b312SMartin Matuska add w23,w23,w17 // h+=Sigma0(a) 4112a58b312SMartin Matuska str w8,[sp,#4] 4122a58b312SMartin Matuska ror w16,w27,#6 4132a58b312SMartin Matuska add w22,w22,w28 // h+=K[i] 4142a58b312SMartin Matuska eor w8,w27,w27,ror#14 4152a58b312SMartin Matuska and w17,w20,w27 4162a58b312SMartin Matuska bic w28,w21,w27 4172a58b312SMartin Matuska add w22,w22,w0 // h+=X[i] 4182a58b312SMartin Matuska orr w17,w17,w28 // Ch(e,f,g) 4192a58b312SMartin Matuska eor w28,w23,w24 // a^b, b^c in next round 4202a58b312SMartin Matuska eor w16,w16,w8,ror#11 // Sigma1(e) 4212a58b312SMartin Matuska ror w8,w23,#2 4222a58b312SMartin Matuska add w22,w22,w17 // h+=Ch(e,f,g) 4232a58b312SMartin Matuska eor w17,w23,w23,ror#9 4242a58b312SMartin Matuska add w22,w22,w16 // h+=Sigma1(e) 4252a58b312SMartin Matuska and w19,w19,w28 // (b^c)&=(a^b) 4262a58b312SMartin Matuska add w26,w26,w22 // d+=h 4272a58b312SMartin Matuska eor w19,w19,w24 // Maj(a,b,c) 4282a58b312SMartin Matuska eor w17,w8,w17,ror#13 // Sigma0(a) 4292a58b312SMartin Matuska add w22,w22,w19 // h+=Maj(a,b,c) 4302a58b312SMartin Matuska ldr w19,[x30],#4 // *K++, w28 in next round 4312a58b312SMartin Matuska //add w22,w22,w17 // h+=Sigma0(a) 4322a58b312SMartin Matuska#ifndef __AARCH64EB__ 4332a58b312SMartin Matuska rev w1,w1 // 14 4342a58b312SMartin Matuska#endif 4352a58b312SMartin Matuska ldr w6,[sp,#12] 4362a58b312SMartin Matuska add w22,w22,w17 // h+=Sigma0(a) 4372a58b312SMartin Matuska str w9,[sp,#8] 4382a58b312SMartin Matuska ror w16,w26,#6 4392a58b312SMartin Matuska add w21,w21,w19 // h+=K[i] 4402a58b312SMartin Matuska eor w9,w26,w26,ror#14 4412a58b312SMartin Matuska and w17,w27,w26 4422a58b312SMartin Matuska bic w19,w20,w26 4432a58b312SMartin Matuska add w21,w21,w1 // h+=X[i] 4442a58b312SMartin Matuska orr w17,w17,w19 // Ch(e,f,g) 4452a58b312SMartin Matuska eor w19,w22,w23 // a^b, b^c in next round 4462a58b312SMartin Matuska eor w16,w16,w9,ror#11 // Sigma1(e) 4472a58b312SMartin Matuska ror w9,w22,#2 4482a58b312SMartin Matuska add w21,w21,w17 // h+=Ch(e,f,g) 4492a58b312SMartin Matuska eor w17,w22,w22,ror#9 4502a58b312SMartin Matuska add w21,w21,w16 // h+=Sigma1(e) 4512a58b312SMartin Matuska and w28,w28,w19 // (b^c)&=(a^b) 4522a58b312SMartin Matuska add w25,w25,w21 // d+=h 4532a58b312SMartin Matuska eor w28,w28,w23 // Maj(a,b,c) 4542a58b312SMartin Matuska eor w17,w9,w17,ror#13 // Sigma0(a) 4552a58b312SMartin Matuska add w21,w21,w28 // h+=Maj(a,b,c) 4562a58b312SMartin Matuska ldr w28,[x30],#4 // *K++, w19 in next round 4572a58b312SMartin Matuska //add w21,w21,w17 // h+=Sigma0(a) 4582a58b312SMartin Matuska#ifndef __AARCH64EB__ 4592a58b312SMartin Matuska rev w2,w2 // 15 4602a58b312SMartin Matuska#endif 4612a58b312SMartin Matuska ldr w7,[sp,#0] 4622a58b312SMartin Matuska add w21,w21,w17 // h+=Sigma0(a) 4632a58b312SMartin Matuska str w10,[sp,#12] 4642a58b312SMartin Matuska ror w16,w25,#6 4652a58b312SMartin Matuska add w20,w20,w28 // h+=K[i] 4662a58b312SMartin Matuska ror w9,w4,#7 4672a58b312SMartin Matuska and w17,w26,w25 4682a58b312SMartin Matuska ror w8,w1,#17 4692a58b312SMartin Matuska bic w28,w27,w25 4702a58b312SMartin Matuska ror w10,w21,#2 4712a58b312SMartin Matuska add w20,w20,w2 // h+=X[i] 4722a58b312SMartin Matuska eor w16,w16,w25,ror#11 4732a58b312SMartin Matuska eor w9,w9,w4,ror#18 4742a58b312SMartin Matuska orr w17,w17,w28 // Ch(e,f,g) 4752a58b312SMartin Matuska eor w28,w21,w22 // a^b, b^c in next round 4762a58b312SMartin Matuska eor w16,w16,w25,ror#25 // Sigma1(e) 4772a58b312SMartin Matuska eor w10,w10,w21,ror#13 4782a58b312SMartin Matuska add w20,w20,w17 // h+=Ch(e,f,g) 4792a58b312SMartin Matuska and w19,w19,w28 // (b^c)&=(a^b) 4802a58b312SMartin Matuska eor w8,w8,w1,ror#19 4812a58b312SMartin Matuska eor w9,w9,w4,lsr#3 // sigma0(X[i+1]) 4822a58b312SMartin Matuska add w20,w20,w16 // h+=Sigma1(e) 4832a58b312SMartin Matuska eor w19,w19,w22 // Maj(a,b,c) 4842a58b312SMartin Matuska eor w17,w10,w21,ror#22 // Sigma0(a) 4852a58b312SMartin Matuska eor w8,w8,w1,lsr#10 // sigma1(X[i+14]) 4862a58b312SMartin Matuska add w3,w3,w12 4872a58b312SMartin Matuska add w24,w24,w20 // d+=h 4882a58b312SMartin Matuska add w20,w20,w19 // h+=Maj(a,b,c) 4892a58b312SMartin Matuska ldr w19,[x30],#4 // *K++, w28 in next round 4902a58b312SMartin Matuska add w3,w3,w9 4912a58b312SMartin Matuska add w20,w20,w17 // h+=Sigma0(a) 4922a58b312SMartin Matuska add w3,w3,w8 4932a58b312SMartin Matuska.Loop_16_xx: 4942a58b312SMartin Matuska ldr w8,[sp,#4] 4952a58b312SMartin Matuska str w11,[sp,#0] 4962a58b312SMartin Matuska ror w16,w24,#6 4972a58b312SMartin Matuska add w27,w27,w19 // h+=K[i] 4982a58b312SMartin Matuska ror w10,w5,#7 4992a58b312SMartin Matuska and w17,w25,w24 5002a58b312SMartin Matuska ror w9,w2,#17 5012a58b312SMartin Matuska bic w19,w26,w24 5022a58b312SMartin Matuska ror w11,w20,#2 5032a58b312SMartin Matuska add w27,w27,w3 // h+=X[i] 5042a58b312SMartin Matuska eor w16,w16,w24,ror#11 5052a58b312SMartin Matuska eor w10,w10,w5,ror#18 5062a58b312SMartin Matuska orr w17,w17,w19 // Ch(e,f,g) 5072a58b312SMartin Matuska eor w19,w20,w21 // a^b, b^c in next round 5082a58b312SMartin Matuska eor w16,w16,w24,ror#25 // Sigma1(e) 5092a58b312SMartin Matuska eor w11,w11,w20,ror#13 5102a58b312SMartin Matuska add w27,w27,w17 // h+=Ch(e,f,g) 5112a58b312SMartin Matuska and w28,w28,w19 // (b^c)&=(a^b) 5122a58b312SMartin Matuska eor w9,w9,w2,ror#19 5132a58b312SMartin Matuska eor w10,w10,w5,lsr#3 // sigma0(X[i+1]) 5142a58b312SMartin Matuska add w27,w27,w16 // h+=Sigma1(e) 5152a58b312SMartin Matuska eor w28,w28,w21 // Maj(a,b,c) 5162a58b312SMartin Matuska eor w17,w11,w20,ror#22 // Sigma0(a) 5172a58b312SMartin Matuska eor w9,w9,w2,lsr#10 // sigma1(X[i+14]) 5182a58b312SMartin Matuska add w4,w4,w13 5192a58b312SMartin Matuska add w23,w23,w27 // d+=h 5202a58b312SMartin Matuska add w27,w27,w28 // h+=Maj(a,b,c) 5212a58b312SMartin Matuska ldr w28,[x30],#4 // *K++, w19 in next round 5222a58b312SMartin Matuska add w4,w4,w10 5232a58b312SMartin Matuska add w27,w27,w17 // h+=Sigma0(a) 5242a58b312SMartin Matuska add w4,w4,w9 5252a58b312SMartin Matuska ldr w9,[sp,#8] 5262a58b312SMartin Matuska str w12,[sp,#4] 5272a58b312SMartin Matuska ror w16,w23,#6 5282a58b312SMartin Matuska add w26,w26,w28 // h+=K[i] 5292a58b312SMartin Matuska ror w11,w6,#7 5302a58b312SMartin Matuska and w17,w24,w23 5312a58b312SMartin Matuska ror w10,w3,#17 5322a58b312SMartin Matuska bic w28,w25,w23 5332a58b312SMartin Matuska ror w12,w27,#2 5342a58b312SMartin Matuska add w26,w26,w4 // h+=X[i] 5352a58b312SMartin Matuska eor w16,w16,w23,ror#11 5362a58b312SMartin Matuska eor w11,w11,w6,ror#18 5372a58b312SMartin Matuska orr w17,w17,w28 // Ch(e,f,g) 5382a58b312SMartin Matuska eor w28,w27,w20 // a^b, b^c in next round 5392a58b312SMartin Matuska eor w16,w16,w23,ror#25 // Sigma1(e) 5402a58b312SMartin Matuska eor w12,w12,w27,ror#13 5412a58b312SMartin Matuska add w26,w26,w17 // h+=Ch(e,f,g) 5422a58b312SMartin Matuska and w19,w19,w28 // (b^c)&=(a^b) 5432a58b312SMartin Matuska eor w10,w10,w3,ror#19 5442a58b312SMartin Matuska eor w11,w11,w6,lsr#3 // sigma0(X[i+1]) 5452a58b312SMartin Matuska add w26,w26,w16 // h+=Sigma1(e) 5462a58b312SMartin Matuska eor w19,w19,w20 // Maj(a,b,c) 5472a58b312SMartin Matuska eor w17,w12,w27,ror#22 // Sigma0(a) 5482a58b312SMartin Matuska eor w10,w10,w3,lsr#10 // sigma1(X[i+14]) 5492a58b312SMartin Matuska add w5,w5,w14 5502a58b312SMartin Matuska add w22,w22,w26 // d+=h 5512a58b312SMartin Matuska add w26,w26,w19 // h+=Maj(a,b,c) 5522a58b312SMartin Matuska ldr w19,[x30],#4 // *K++, w28 in next round 5532a58b312SMartin Matuska add w5,w5,w11 5542a58b312SMartin Matuska add w26,w26,w17 // h+=Sigma0(a) 5552a58b312SMartin Matuska add w5,w5,w10 5562a58b312SMartin Matuska ldr w10,[sp,#12] 5572a58b312SMartin Matuska str w13,[sp,#8] 5582a58b312SMartin Matuska ror w16,w22,#6 5592a58b312SMartin Matuska add w25,w25,w19 // h+=K[i] 5602a58b312SMartin Matuska ror w12,w7,#7 5612a58b312SMartin Matuska and w17,w23,w22 5622a58b312SMartin Matuska ror w11,w4,#17 5632a58b312SMartin Matuska bic w19,w24,w22 5642a58b312SMartin Matuska ror w13,w26,#2 5652a58b312SMartin Matuska add w25,w25,w5 // h+=X[i] 5662a58b312SMartin Matuska eor w16,w16,w22,ror#11 5672a58b312SMartin Matuska eor w12,w12,w7,ror#18 5682a58b312SMartin Matuska orr w17,w17,w19 // Ch(e,f,g) 5692a58b312SMartin Matuska eor w19,w26,w27 // a^b, b^c in next round 5702a58b312SMartin Matuska eor w16,w16,w22,ror#25 // Sigma1(e) 5712a58b312SMartin Matuska eor w13,w13,w26,ror#13 5722a58b312SMartin Matuska add w25,w25,w17 // h+=Ch(e,f,g) 5732a58b312SMartin Matuska and w28,w28,w19 // (b^c)&=(a^b) 5742a58b312SMartin Matuska eor w11,w11,w4,ror#19 5752a58b312SMartin Matuska eor w12,w12,w7,lsr#3 // sigma0(X[i+1]) 5762a58b312SMartin Matuska add w25,w25,w16 // h+=Sigma1(e) 5772a58b312SMartin Matuska eor w28,w28,w27 // Maj(a,b,c) 5782a58b312SMartin Matuska eor w17,w13,w26,ror#22 // Sigma0(a) 5792a58b312SMartin Matuska eor w11,w11,w4,lsr#10 // sigma1(X[i+14]) 5802a58b312SMartin Matuska add w6,w6,w15 5812a58b312SMartin Matuska add w21,w21,w25 // d+=h 5822a58b312SMartin Matuska add w25,w25,w28 // h+=Maj(a,b,c) 5832a58b312SMartin Matuska ldr w28,[x30],#4 // *K++, w19 in next round 5842a58b312SMartin Matuska add w6,w6,w12 5852a58b312SMartin Matuska add w25,w25,w17 // h+=Sigma0(a) 5862a58b312SMartin Matuska add w6,w6,w11 5872a58b312SMartin Matuska ldr w11,[sp,#0] 5882a58b312SMartin Matuska str w14,[sp,#12] 5892a58b312SMartin Matuska ror w16,w21,#6 5902a58b312SMartin Matuska add w24,w24,w28 // h+=K[i] 5912a58b312SMartin Matuska ror w13,w8,#7 5922a58b312SMartin Matuska and w17,w22,w21 5932a58b312SMartin Matuska ror w12,w5,#17 5942a58b312SMartin Matuska bic w28,w23,w21 5952a58b312SMartin Matuska ror w14,w25,#2 5962a58b312SMartin Matuska add w24,w24,w6 // h+=X[i] 5972a58b312SMartin Matuska eor w16,w16,w21,ror#11 5982a58b312SMartin Matuska eor w13,w13,w8,ror#18 5992a58b312SMartin Matuska orr w17,w17,w28 // Ch(e,f,g) 6002a58b312SMartin Matuska eor w28,w25,w26 // a^b, b^c in next round 6012a58b312SMartin Matuska eor w16,w16,w21,ror#25 // Sigma1(e) 6022a58b312SMartin Matuska eor w14,w14,w25,ror#13 6032a58b312SMartin Matuska add w24,w24,w17 // h+=Ch(e,f,g) 6042a58b312SMartin Matuska and w19,w19,w28 // (b^c)&=(a^b) 6052a58b312SMartin Matuska eor w12,w12,w5,ror#19 6062a58b312SMartin Matuska eor w13,w13,w8,lsr#3 // sigma0(X[i+1]) 6072a58b312SMartin Matuska add w24,w24,w16 // h+=Sigma1(e) 6082a58b312SMartin Matuska eor w19,w19,w26 // Maj(a,b,c) 6092a58b312SMartin Matuska eor w17,w14,w25,ror#22 // Sigma0(a) 6102a58b312SMartin Matuska eor w12,w12,w5,lsr#10 // sigma1(X[i+14]) 6112a58b312SMartin Matuska add w7,w7,w0 6122a58b312SMartin Matuska add w20,w20,w24 // d+=h 6132a58b312SMartin Matuska add w24,w24,w19 // h+=Maj(a,b,c) 6142a58b312SMartin Matuska ldr w19,[x30],#4 // *K++, w28 in next round 6152a58b312SMartin Matuska add w7,w7,w13 6162a58b312SMartin Matuska add w24,w24,w17 // h+=Sigma0(a) 6172a58b312SMartin Matuska add w7,w7,w12 6182a58b312SMartin Matuska ldr w12,[sp,#4] 6192a58b312SMartin Matuska str w15,[sp,#0] 6202a58b312SMartin Matuska ror w16,w20,#6 6212a58b312SMartin Matuska add w23,w23,w19 // h+=K[i] 6222a58b312SMartin Matuska ror w14,w9,#7 6232a58b312SMartin Matuska and w17,w21,w20 6242a58b312SMartin Matuska ror w13,w6,#17 6252a58b312SMartin Matuska bic w19,w22,w20 6262a58b312SMartin Matuska ror w15,w24,#2 6272a58b312SMartin Matuska add w23,w23,w7 // h+=X[i] 6282a58b312SMartin Matuska eor w16,w16,w20,ror#11 6292a58b312SMartin Matuska eor w14,w14,w9,ror#18 6302a58b312SMartin Matuska orr w17,w17,w19 // Ch(e,f,g) 6312a58b312SMartin Matuska eor w19,w24,w25 // a^b, b^c in next round 6322a58b312SMartin Matuska eor w16,w16,w20,ror#25 // Sigma1(e) 6332a58b312SMartin Matuska eor w15,w15,w24,ror#13 6342a58b312SMartin Matuska add w23,w23,w17 // h+=Ch(e,f,g) 6352a58b312SMartin Matuska and w28,w28,w19 // (b^c)&=(a^b) 6362a58b312SMartin Matuska eor w13,w13,w6,ror#19 6372a58b312SMartin Matuska eor w14,w14,w9,lsr#3 // sigma0(X[i+1]) 6382a58b312SMartin Matuska add w23,w23,w16 // h+=Sigma1(e) 6392a58b312SMartin Matuska eor w28,w28,w25 // Maj(a,b,c) 6402a58b312SMartin Matuska eor w17,w15,w24,ror#22 // Sigma0(a) 6412a58b312SMartin Matuska eor w13,w13,w6,lsr#10 // sigma1(X[i+14]) 6422a58b312SMartin Matuska add w8,w8,w1 6432a58b312SMartin Matuska add w27,w27,w23 // d+=h 6442a58b312SMartin Matuska add w23,w23,w28 // h+=Maj(a,b,c) 6452a58b312SMartin Matuska ldr w28,[x30],#4 // *K++, w19 in next round 6462a58b312SMartin Matuska add w8,w8,w14 6472a58b312SMartin Matuska add w23,w23,w17 // h+=Sigma0(a) 6482a58b312SMartin Matuska add w8,w8,w13 6492a58b312SMartin Matuska ldr w13,[sp,#8] 6502a58b312SMartin Matuska str w0,[sp,#4] 6512a58b312SMartin Matuska ror w16,w27,#6 6522a58b312SMartin Matuska add w22,w22,w28 // h+=K[i] 6532a58b312SMartin Matuska ror w15,w10,#7 6542a58b312SMartin Matuska and w17,w20,w27 6552a58b312SMartin Matuska ror w14,w7,#17 6562a58b312SMartin Matuska bic w28,w21,w27 6572a58b312SMartin Matuska ror w0,w23,#2 6582a58b312SMartin Matuska add w22,w22,w8 // h+=X[i] 6592a58b312SMartin Matuska eor w16,w16,w27,ror#11 6602a58b312SMartin Matuska eor w15,w15,w10,ror#18 6612a58b312SMartin Matuska orr w17,w17,w28 // Ch(e,f,g) 6622a58b312SMartin Matuska eor w28,w23,w24 // a^b, b^c in next round 6632a58b312SMartin Matuska eor w16,w16,w27,ror#25 // Sigma1(e) 6642a58b312SMartin Matuska eor w0,w0,w23,ror#13 6652a58b312SMartin Matuska add w22,w22,w17 // h+=Ch(e,f,g) 6662a58b312SMartin Matuska and w19,w19,w28 // (b^c)&=(a^b) 6672a58b312SMartin Matuska eor w14,w14,w7,ror#19 6682a58b312SMartin Matuska eor w15,w15,w10,lsr#3 // sigma0(X[i+1]) 6692a58b312SMartin Matuska add w22,w22,w16 // h+=Sigma1(e) 6702a58b312SMartin Matuska eor w19,w19,w24 // Maj(a,b,c) 6712a58b312SMartin Matuska eor w17,w0,w23,ror#22 // Sigma0(a) 6722a58b312SMartin Matuska eor w14,w14,w7,lsr#10 // sigma1(X[i+14]) 6732a58b312SMartin Matuska add w9,w9,w2 6742a58b312SMartin Matuska add w26,w26,w22 // d+=h 6752a58b312SMartin Matuska add w22,w22,w19 // h+=Maj(a,b,c) 6762a58b312SMartin Matuska ldr w19,[x30],#4 // *K++, w28 in next round 6772a58b312SMartin Matuska add w9,w9,w15 6782a58b312SMartin Matuska add w22,w22,w17 // h+=Sigma0(a) 6792a58b312SMartin Matuska add w9,w9,w14 6802a58b312SMartin Matuska ldr w14,[sp,#12] 6812a58b312SMartin Matuska str w1,[sp,#8] 6822a58b312SMartin Matuska ror w16,w26,#6 6832a58b312SMartin Matuska add w21,w21,w19 // h+=K[i] 6842a58b312SMartin Matuska ror w0,w11,#7 6852a58b312SMartin Matuska and w17,w27,w26 6862a58b312SMartin Matuska ror w15,w8,#17 6872a58b312SMartin Matuska bic w19,w20,w26 6882a58b312SMartin Matuska ror w1,w22,#2 6892a58b312SMartin Matuska add w21,w21,w9 // h+=X[i] 6902a58b312SMartin Matuska eor w16,w16,w26,ror#11 6912a58b312SMartin Matuska eor w0,w0,w11,ror#18 6922a58b312SMartin Matuska orr w17,w17,w19 // Ch(e,f,g) 6932a58b312SMartin Matuska eor w19,w22,w23 // a^b, b^c in next round 6942a58b312SMartin Matuska eor w16,w16,w26,ror#25 // Sigma1(e) 6952a58b312SMartin Matuska eor w1,w1,w22,ror#13 6962a58b312SMartin Matuska add w21,w21,w17 // h+=Ch(e,f,g) 6972a58b312SMartin Matuska and w28,w28,w19 // (b^c)&=(a^b) 6982a58b312SMartin Matuska eor w15,w15,w8,ror#19 6992a58b312SMartin Matuska eor w0,w0,w11,lsr#3 // sigma0(X[i+1]) 7002a58b312SMartin Matuska add w21,w21,w16 // h+=Sigma1(e) 7012a58b312SMartin Matuska eor w28,w28,w23 // Maj(a,b,c) 7022a58b312SMartin Matuska eor w17,w1,w22,ror#22 // Sigma0(a) 7032a58b312SMartin Matuska eor w15,w15,w8,lsr#10 // sigma1(X[i+14]) 7042a58b312SMartin Matuska add w10,w10,w3 7052a58b312SMartin Matuska add w25,w25,w21 // d+=h 7062a58b312SMartin Matuska add w21,w21,w28 // h+=Maj(a,b,c) 7072a58b312SMartin Matuska ldr w28,[x30],#4 // *K++, w19 in next round 7082a58b312SMartin Matuska add w10,w10,w0 7092a58b312SMartin Matuska add w21,w21,w17 // h+=Sigma0(a) 7102a58b312SMartin Matuska add w10,w10,w15 7112a58b312SMartin Matuska ldr w15,[sp,#0] 7122a58b312SMartin Matuska str w2,[sp,#12] 7132a58b312SMartin Matuska ror w16,w25,#6 7142a58b312SMartin Matuska add w20,w20,w28 // h+=K[i] 7152a58b312SMartin Matuska ror w1,w12,#7 7162a58b312SMartin Matuska and w17,w26,w25 7172a58b312SMartin Matuska ror w0,w9,#17 7182a58b312SMartin Matuska bic w28,w27,w25 7192a58b312SMartin Matuska ror w2,w21,#2 7202a58b312SMartin Matuska add w20,w20,w10 // h+=X[i] 7212a58b312SMartin Matuska eor w16,w16,w25,ror#11 7222a58b312SMartin Matuska eor w1,w1,w12,ror#18 7232a58b312SMartin Matuska orr w17,w17,w28 // Ch(e,f,g) 7242a58b312SMartin Matuska eor w28,w21,w22 // a^b, b^c in next round 7252a58b312SMartin Matuska eor w16,w16,w25,ror#25 // Sigma1(e) 7262a58b312SMartin Matuska eor w2,w2,w21,ror#13 7272a58b312SMartin Matuska add w20,w20,w17 // h+=Ch(e,f,g) 7282a58b312SMartin Matuska and w19,w19,w28 // (b^c)&=(a^b) 7292a58b312SMartin Matuska eor w0,w0,w9,ror#19 7302a58b312SMartin Matuska eor w1,w1,w12,lsr#3 // sigma0(X[i+1]) 7312a58b312SMartin Matuska add w20,w20,w16 // h+=Sigma1(e) 7322a58b312SMartin Matuska eor w19,w19,w22 // Maj(a,b,c) 7332a58b312SMartin Matuska eor w17,w2,w21,ror#22 // Sigma0(a) 7342a58b312SMartin Matuska eor w0,w0,w9,lsr#10 // sigma1(X[i+14]) 7352a58b312SMartin Matuska add w11,w11,w4 7362a58b312SMartin Matuska add w24,w24,w20 // d+=h 7372a58b312SMartin Matuska add w20,w20,w19 // h+=Maj(a,b,c) 7382a58b312SMartin Matuska ldr w19,[x30],#4 // *K++, w28 in next round 7392a58b312SMartin Matuska add w11,w11,w1 7402a58b312SMartin Matuska add w20,w20,w17 // h+=Sigma0(a) 7412a58b312SMartin Matuska add w11,w11,w0 7422a58b312SMartin Matuska ldr w0,[sp,#4] 7432a58b312SMartin Matuska str w3,[sp,#0] 7442a58b312SMartin Matuska ror w16,w24,#6 7452a58b312SMartin Matuska add w27,w27,w19 // h+=K[i] 7462a58b312SMartin Matuska ror w2,w13,#7 7472a58b312SMartin Matuska and w17,w25,w24 7482a58b312SMartin Matuska ror w1,w10,#17 7492a58b312SMartin Matuska bic w19,w26,w24 7502a58b312SMartin Matuska ror w3,w20,#2 7512a58b312SMartin Matuska add w27,w27,w11 // h+=X[i] 7522a58b312SMartin Matuska eor w16,w16,w24,ror#11 7532a58b312SMartin Matuska eor w2,w2,w13,ror#18 7542a58b312SMartin Matuska orr w17,w17,w19 // Ch(e,f,g) 7552a58b312SMartin Matuska eor w19,w20,w21 // a^b, b^c in next round 7562a58b312SMartin Matuska eor w16,w16,w24,ror#25 // Sigma1(e) 7572a58b312SMartin Matuska eor w3,w3,w20,ror#13 7582a58b312SMartin Matuska add w27,w27,w17 // h+=Ch(e,f,g) 7592a58b312SMartin Matuska and w28,w28,w19 // (b^c)&=(a^b) 7602a58b312SMartin Matuska eor w1,w1,w10,ror#19 7612a58b312SMartin Matuska eor w2,w2,w13,lsr#3 // sigma0(X[i+1]) 7622a58b312SMartin Matuska add w27,w27,w16 // h+=Sigma1(e) 7632a58b312SMartin Matuska eor w28,w28,w21 // Maj(a,b,c) 7642a58b312SMartin Matuska eor w17,w3,w20,ror#22 // Sigma0(a) 7652a58b312SMartin Matuska eor w1,w1,w10,lsr#10 // sigma1(X[i+14]) 7662a58b312SMartin Matuska add w12,w12,w5 7672a58b312SMartin Matuska add w23,w23,w27 // d+=h 7682a58b312SMartin Matuska add w27,w27,w28 // h+=Maj(a,b,c) 7692a58b312SMartin Matuska ldr w28,[x30],#4 // *K++, w19 in next round 7702a58b312SMartin Matuska add w12,w12,w2 7712a58b312SMartin Matuska add w27,w27,w17 // h+=Sigma0(a) 7722a58b312SMartin Matuska add w12,w12,w1 7732a58b312SMartin Matuska ldr w1,[sp,#8] 7742a58b312SMartin Matuska str w4,[sp,#4] 7752a58b312SMartin Matuska ror w16,w23,#6 7762a58b312SMartin Matuska add w26,w26,w28 // h+=K[i] 7772a58b312SMartin Matuska ror w3,w14,#7 7782a58b312SMartin Matuska and w17,w24,w23 7792a58b312SMartin Matuska ror w2,w11,#17 7802a58b312SMartin Matuska bic w28,w25,w23 7812a58b312SMartin Matuska ror w4,w27,#2 7822a58b312SMartin Matuska add w26,w26,w12 // h+=X[i] 7832a58b312SMartin Matuska eor w16,w16,w23,ror#11 7842a58b312SMartin Matuska eor w3,w3,w14,ror#18 7852a58b312SMartin Matuska orr w17,w17,w28 // Ch(e,f,g) 7862a58b312SMartin Matuska eor w28,w27,w20 // a^b, b^c in next round 7872a58b312SMartin Matuska eor w16,w16,w23,ror#25 // Sigma1(e) 7882a58b312SMartin Matuska eor w4,w4,w27,ror#13 7892a58b312SMartin Matuska add w26,w26,w17 // h+=Ch(e,f,g) 7902a58b312SMartin Matuska and w19,w19,w28 // (b^c)&=(a^b) 7912a58b312SMartin Matuska eor w2,w2,w11,ror#19 7922a58b312SMartin Matuska eor w3,w3,w14,lsr#3 // sigma0(X[i+1]) 7932a58b312SMartin Matuska add w26,w26,w16 // h+=Sigma1(e) 7942a58b312SMartin Matuska eor w19,w19,w20 // Maj(a,b,c) 7952a58b312SMartin Matuska eor w17,w4,w27,ror#22 // Sigma0(a) 7962a58b312SMartin Matuska eor w2,w2,w11,lsr#10 // sigma1(X[i+14]) 7972a58b312SMartin Matuska add w13,w13,w6 7982a58b312SMartin Matuska add w22,w22,w26 // d+=h 7992a58b312SMartin Matuska add w26,w26,w19 // h+=Maj(a,b,c) 8002a58b312SMartin Matuska ldr w19,[x30],#4 // *K++, w28 in next round 8012a58b312SMartin Matuska add w13,w13,w3 8022a58b312SMartin Matuska add w26,w26,w17 // h+=Sigma0(a) 8032a58b312SMartin Matuska add w13,w13,w2 8042a58b312SMartin Matuska ldr w2,[sp,#12] 8052a58b312SMartin Matuska str w5,[sp,#8] 8062a58b312SMartin Matuska ror w16,w22,#6 8072a58b312SMartin Matuska add w25,w25,w19 // h+=K[i] 8082a58b312SMartin Matuska ror w4,w15,#7 8092a58b312SMartin Matuska and w17,w23,w22 8102a58b312SMartin Matuska ror w3,w12,#17 8112a58b312SMartin Matuska bic w19,w24,w22 8122a58b312SMartin Matuska ror w5,w26,#2 8132a58b312SMartin Matuska add w25,w25,w13 // h+=X[i] 8142a58b312SMartin Matuska eor w16,w16,w22,ror#11 8152a58b312SMartin Matuska eor w4,w4,w15,ror#18 8162a58b312SMartin Matuska orr w17,w17,w19 // Ch(e,f,g) 8172a58b312SMartin Matuska eor w19,w26,w27 // a^b, b^c in next round 8182a58b312SMartin Matuska eor w16,w16,w22,ror#25 // Sigma1(e) 8192a58b312SMartin Matuska eor w5,w5,w26,ror#13 8202a58b312SMartin Matuska add w25,w25,w17 // h+=Ch(e,f,g) 8212a58b312SMartin Matuska and w28,w28,w19 // (b^c)&=(a^b) 8222a58b312SMartin Matuska eor w3,w3,w12,ror#19 8232a58b312SMartin Matuska eor w4,w4,w15,lsr#3 // sigma0(X[i+1]) 8242a58b312SMartin Matuska add w25,w25,w16 // h+=Sigma1(e) 8252a58b312SMartin Matuska eor w28,w28,w27 // Maj(a,b,c) 8262a58b312SMartin Matuska eor w17,w5,w26,ror#22 // Sigma0(a) 8272a58b312SMartin Matuska eor w3,w3,w12,lsr#10 // sigma1(X[i+14]) 8282a58b312SMartin Matuska add w14,w14,w7 8292a58b312SMartin Matuska add w21,w21,w25 // d+=h 8302a58b312SMartin Matuska add w25,w25,w28 // h+=Maj(a,b,c) 8312a58b312SMartin Matuska ldr w28,[x30],#4 // *K++, w19 in next round 8322a58b312SMartin Matuska add w14,w14,w4 8332a58b312SMartin Matuska add w25,w25,w17 // h+=Sigma0(a) 8342a58b312SMartin Matuska add w14,w14,w3 8352a58b312SMartin Matuska ldr w3,[sp,#0] 8362a58b312SMartin Matuska str w6,[sp,#12] 8372a58b312SMartin Matuska ror w16,w21,#6 8382a58b312SMartin Matuska add w24,w24,w28 // h+=K[i] 8392a58b312SMartin Matuska ror w5,w0,#7 8402a58b312SMartin Matuska and w17,w22,w21 8412a58b312SMartin Matuska ror w4,w13,#17 8422a58b312SMartin Matuska bic w28,w23,w21 8432a58b312SMartin Matuska ror w6,w25,#2 8442a58b312SMartin Matuska add w24,w24,w14 // h+=X[i] 8452a58b312SMartin Matuska eor w16,w16,w21,ror#11 8462a58b312SMartin Matuska eor w5,w5,w0,ror#18 8472a58b312SMartin Matuska orr w17,w17,w28 // Ch(e,f,g) 8482a58b312SMartin Matuska eor w28,w25,w26 // a^b, b^c in next round 8492a58b312SMartin Matuska eor w16,w16,w21,ror#25 // Sigma1(e) 8502a58b312SMartin Matuska eor w6,w6,w25,ror#13 8512a58b312SMartin Matuska add w24,w24,w17 // h+=Ch(e,f,g) 8522a58b312SMartin Matuska and w19,w19,w28 // (b^c)&=(a^b) 8532a58b312SMartin Matuska eor w4,w4,w13,ror#19 8542a58b312SMartin Matuska eor w5,w5,w0,lsr#3 // sigma0(X[i+1]) 8552a58b312SMartin Matuska add w24,w24,w16 // h+=Sigma1(e) 8562a58b312SMartin Matuska eor w19,w19,w26 // Maj(a,b,c) 8572a58b312SMartin Matuska eor w17,w6,w25,ror#22 // Sigma0(a) 8582a58b312SMartin Matuska eor w4,w4,w13,lsr#10 // sigma1(X[i+14]) 8592a58b312SMartin Matuska add w15,w15,w8 8602a58b312SMartin Matuska add w20,w20,w24 // d+=h 8612a58b312SMartin Matuska add w24,w24,w19 // h+=Maj(a,b,c) 8622a58b312SMartin Matuska ldr w19,[x30],#4 // *K++, w28 in next round 8632a58b312SMartin Matuska add w15,w15,w5 8642a58b312SMartin Matuska add w24,w24,w17 // h+=Sigma0(a) 8652a58b312SMartin Matuska add w15,w15,w4 8662a58b312SMartin Matuska ldr w4,[sp,#4] 8672a58b312SMartin Matuska str w7,[sp,#0] 8682a58b312SMartin Matuska ror w16,w20,#6 8692a58b312SMartin Matuska add w23,w23,w19 // h+=K[i] 8702a58b312SMartin Matuska ror w6,w1,#7 8712a58b312SMartin Matuska and w17,w21,w20 8722a58b312SMartin Matuska ror w5,w14,#17 8732a58b312SMartin Matuska bic w19,w22,w20 8742a58b312SMartin Matuska ror w7,w24,#2 8752a58b312SMartin Matuska add w23,w23,w15 // h+=X[i] 8762a58b312SMartin Matuska eor w16,w16,w20,ror#11 8772a58b312SMartin Matuska eor w6,w6,w1,ror#18 8782a58b312SMartin Matuska orr w17,w17,w19 // Ch(e,f,g) 8792a58b312SMartin Matuska eor w19,w24,w25 // a^b, b^c in next round 8802a58b312SMartin Matuska eor w16,w16,w20,ror#25 // Sigma1(e) 8812a58b312SMartin Matuska eor w7,w7,w24,ror#13 8822a58b312SMartin Matuska add w23,w23,w17 // h+=Ch(e,f,g) 8832a58b312SMartin Matuska and w28,w28,w19 // (b^c)&=(a^b) 8842a58b312SMartin Matuska eor w5,w5,w14,ror#19 8852a58b312SMartin Matuska eor w6,w6,w1,lsr#3 // sigma0(X[i+1]) 8862a58b312SMartin Matuska add w23,w23,w16 // h+=Sigma1(e) 8872a58b312SMartin Matuska eor w28,w28,w25 // Maj(a,b,c) 8882a58b312SMartin Matuska eor w17,w7,w24,ror#22 // Sigma0(a) 8892a58b312SMartin Matuska eor w5,w5,w14,lsr#10 // sigma1(X[i+14]) 8902a58b312SMartin Matuska add w0,w0,w9 8912a58b312SMartin Matuska add w27,w27,w23 // d+=h 8922a58b312SMartin Matuska add w23,w23,w28 // h+=Maj(a,b,c) 8932a58b312SMartin Matuska ldr w28,[x30],#4 // *K++, w19 in next round 8942a58b312SMartin Matuska add w0,w0,w6 8952a58b312SMartin Matuska add w23,w23,w17 // h+=Sigma0(a) 8962a58b312SMartin Matuska add w0,w0,w5 8972a58b312SMartin Matuska ldr w5,[sp,#8] 8982a58b312SMartin Matuska str w8,[sp,#4] 8992a58b312SMartin Matuska ror w16,w27,#6 9002a58b312SMartin Matuska add w22,w22,w28 // h+=K[i] 9012a58b312SMartin Matuska ror w7,w2,#7 9022a58b312SMartin Matuska and w17,w20,w27 9032a58b312SMartin Matuska ror w6,w15,#17 9042a58b312SMartin Matuska bic w28,w21,w27 9052a58b312SMartin Matuska ror w8,w23,#2 9062a58b312SMartin Matuska add w22,w22,w0 // h+=X[i] 9072a58b312SMartin Matuska eor w16,w16,w27,ror#11 9082a58b312SMartin Matuska eor w7,w7,w2,ror#18 9092a58b312SMartin Matuska orr w17,w17,w28 // Ch(e,f,g) 9102a58b312SMartin Matuska eor w28,w23,w24 // a^b, b^c in next round 9112a58b312SMartin Matuska eor w16,w16,w27,ror#25 // Sigma1(e) 9122a58b312SMartin Matuska eor w8,w8,w23,ror#13 9132a58b312SMartin Matuska add w22,w22,w17 // h+=Ch(e,f,g) 9142a58b312SMartin Matuska and w19,w19,w28 // (b^c)&=(a^b) 9152a58b312SMartin Matuska eor w6,w6,w15,ror#19 9162a58b312SMartin Matuska eor w7,w7,w2,lsr#3 // sigma0(X[i+1]) 9172a58b312SMartin Matuska add w22,w22,w16 // h+=Sigma1(e) 9182a58b312SMartin Matuska eor w19,w19,w24 // Maj(a,b,c) 9192a58b312SMartin Matuska eor w17,w8,w23,ror#22 // Sigma0(a) 9202a58b312SMartin Matuska eor w6,w6,w15,lsr#10 // sigma1(X[i+14]) 9212a58b312SMartin Matuska add w1,w1,w10 9222a58b312SMartin Matuska add w26,w26,w22 // d+=h 9232a58b312SMartin Matuska add w22,w22,w19 // h+=Maj(a,b,c) 9242a58b312SMartin Matuska ldr w19,[x30],#4 // *K++, w28 in next round 9252a58b312SMartin Matuska add w1,w1,w7 9262a58b312SMartin Matuska add w22,w22,w17 // h+=Sigma0(a) 9272a58b312SMartin Matuska add w1,w1,w6 9282a58b312SMartin Matuska ldr w6,[sp,#12] 9292a58b312SMartin Matuska str w9,[sp,#8] 9302a58b312SMartin Matuska ror w16,w26,#6 9312a58b312SMartin Matuska add w21,w21,w19 // h+=K[i] 9322a58b312SMartin Matuska ror w8,w3,#7 9332a58b312SMartin Matuska and w17,w27,w26 9342a58b312SMartin Matuska ror w7,w0,#17 9352a58b312SMartin Matuska bic w19,w20,w26 9362a58b312SMartin Matuska ror w9,w22,#2 9372a58b312SMartin Matuska add w21,w21,w1 // h+=X[i] 9382a58b312SMartin Matuska eor w16,w16,w26,ror#11 9392a58b312SMartin Matuska eor w8,w8,w3,ror#18 9402a58b312SMartin Matuska orr w17,w17,w19 // Ch(e,f,g) 9412a58b312SMartin Matuska eor w19,w22,w23 // a^b, b^c in next round 9422a58b312SMartin Matuska eor w16,w16,w26,ror#25 // Sigma1(e) 9432a58b312SMartin Matuska eor w9,w9,w22,ror#13 9442a58b312SMartin Matuska add w21,w21,w17 // h+=Ch(e,f,g) 9452a58b312SMartin Matuska and w28,w28,w19 // (b^c)&=(a^b) 9462a58b312SMartin Matuska eor w7,w7,w0,ror#19 9472a58b312SMartin Matuska eor w8,w8,w3,lsr#3 // sigma0(X[i+1]) 9482a58b312SMartin Matuska add w21,w21,w16 // h+=Sigma1(e) 9492a58b312SMartin Matuska eor w28,w28,w23 // Maj(a,b,c) 9502a58b312SMartin Matuska eor w17,w9,w22,ror#22 // Sigma0(a) 9512a58b312SMartin Matuska eor w7,w7,w0,lsr#10 // sigma1(X[i+14]) 9522a58b312SMartin Matuska add w2,w2,w11 9532a58b312SMartin Matuska add w25,w25,w21 // d+=h 9542a58b312SMartin Matuska add w21,w21,w28 // h+=Maj(a,b,c) 9552a58b312SMartin Matuska ldr w28,[x30],#4 // *K++, w19 in next round 9562a58b312SMartin Matuska add w2,w2,w8 9572a58b312SMartin Matuska add w21,w21,w17 // h+=Sigma0(a) 9582a58b312SMartin Matuska add w2,w2,w7 9592a58b312SMartin Matuska ldr w7,[sp,#0] 9602a58b312SMartin Matuska str w10,[sp,#12] 9612a58b312SMartin Matuska ror w16,w25,#6 9622a58b312SMartin Matuska add w20,w20,w28 // h+=K[i] 9632a58b312SMartin Matuska ror w9,w4,#7 9642a58b312SMartin Matuska and w17,w26,w25 9652a58b312SMartin Matuska ror w8,w1,#17 9662a58b312SMartin Matuska bic w28,w27,w25 9672a58b312SMartin Matuska ror w10,w21,#2 9682a58b312SMartin Matuska add w20,w20,w2 // h+=X[i] 9692a58b312SMartin Matuska eor w16,w16,w25,ror#11 9702a58b312SMartin Matuska eor w9,w9,w4,ror#18 9712a58b312SMartin Matuska orr w17,w17,w28 // Ch(e,f,g) 9722a58b312SMartin Matuska eor w28,w21,w22 // a^b, b^c in next round 9732a58b312SMartin Matuska eor w16,w16,w25,ror#25 // Sigma1(e) 9742a58b312SMartin Matuska eor w10,w10,w21,ror#13 9752a58b312SMartin Matuska add w20,w20,w17 // h+=Ch(e,f,g) 9762a58b312SMartin Matuska and w19,w19,w28 // (b^c)&=(a^b) 9772a58b312SMartin Matuska eor w8,w8,w1,ror#19 9782a58b312SMartin Matuska eor w9,w9,w4,lsr#3 // sigma0(X[i+1]) 9792a58b312SMartin Matuska add w20,w20,w16 // h+=Sigma1(e) 9802a58b312SMartin Matuska eor w19,w19,w22 // Maj(a,b,c) 9812a58b312SMartin Matuska eor w17,w10,w21,ror#22 // Sigma0(a) 9822a58b312SMartin Matuska eor w8,w8,w1,lsr#10 // sigma1(X[i+14]) 9832a58b312SMartin Matuska add w3,w3,w12 9842a58b312SMartin Matuska add w24,w24,w20 // d+=h 9852a58b312SMartin Matuska add w20,w20,w19 // h+=Maj(a,b,c) 9862a58b312SMartin Matuska ldr w19,[x30],#4 // *K++, w28 in next round 9872a58b312SMartin Matuska add w3,w3,w9 9882a58b312SMartin Matuska add w20,w20,w17 // h+=Sigma0(a) 9892a58b312SMartin Matuska add w3,w3,w8 9902a58b312SMartin Matuska cbnz w19,.Loop_16_xx 9912a58b312SMartin Matuska 9922a58b312SMartin Matuska ldp x0,x2,[x29,#96] 9932a58b312SMartin Matuska ldr x1,[x29,#112] 9942a58b312SMartin Matuska sub x30,x30,#260 // rewind 9952a58b312SMartin Matuska 9962a58b312SMartin Matuska ldp w3,w4,[x0] 9972a58b312SMartin Matuska ldp w5,w6,[x0,#2*4] 9982a58b312SMartin Matuska add x1,x1,#14*4 // advance input pointer 9992a58b312SMartin Matuska ldp w7,w8,[x0,#4*4] 10002a58b312SMartin Matuska add w20,w20,w3 10012a58b312SMartin Matuska ldp w9,w10,[x0,#6*4] 10022a58b312SMartin Matuska add w21,w21,w4 10032a58b312SMartin Matuska add w22,w22,w5 10042a58b312SMartin Matuska add w23,w23,w6 10052a58b312SMartin Matuska stp w20,w21,[x0] 10062a58b312SMartin Matuska add w24,w24,w7 10072a58b312SMartin Matuska add w25,w25,w8 10082a58b312SMartin Matuska stp w22,w23,[x0,#2*4] 10092a58b312SMartin Matuska add w26,w26,w9 10102a58b312SMartin Matuska add w27,w27,w10 10112a58b312SMartin Matuska cmp x1,x2 10122a58b312SMartin Matuska stp w24,w25,[x0,#4*4] 10132a58b312SMartin Matuska stp w26,w27,[x0,#6*4] 10142a58b312SMartin Matuska b.ne .Loop 10152a58b312SMartin Matuska 10162a58b312SMartin Matuska ldp x19,x20,[x29,#16] 10172a58b312SMartin Matuska add sp,sp,#4*4 10182a58b312SMartin Matuska ldp x21,x22,[x29,#32] 10192a58b312SMartin Matuska ldp x23,x24,[x29,#48] 10202a58b312SMartin Matuska ldp x25,x26,[x29,#64] 10212a58b312SMartin Matuska ldp x27,x28,[x29,#80] 10222a58b312SMartin Matuska ldp x29,x30,[sp],#128 10232a58b312SMartin Matuska ret 10242a58b312SMartin Matuska.size zfs_sha256_block_armv7,.-zfs_sha256_block_armv7 10252a58b312SMartin Matuska 10262a58b312SMartin Matuska.globl zfs_sha256_block_armv8 10272a58b312SMartin Matuska.type zfs_sha256_block_armv8,%function 10282a58b312SMartin Matuska.align 6 10292a58b312SMartin Matuskazfs_sha256_block_armv8: 1030f7f4bd06SMartin Matuska hint #34 // bti c 10312a58b312SMartin Matuska.Lv8_entry: 10322a58b312SMartin Matuska stp x29,x30,[sp,#-16]! 10332a58b312SMartin Matuska add x29,sp,#0 10342a58b312SMartin Matuska 10352a58b312SMartin Matuska ld1 {v0.4s,v1.4s},[x0] 10362a58b312SMartin Matuska adr x3,.LK256 10372a58b312SMartin Matuska 10382a58b312SMartin Matuska.Loop_hw: 10392a58b312SMartin Matuska ld1 {v4.16b-v7.16b},[x1],#64 10402a58b312SMartin Matuska sub x2,x2,#1 10412a58b312SMartin Matuska ld1 {v16.4s},[x3],#16 10422a58b312SMartin Matuska rev32 v4.16b,v4.16b 10432a58b312SMartin Matuska rev32 v5.16b,v5.16b 10442a58b312SMartin Matuska rev32 v6.16b,v6.16b 10452a58b312SMartin Matuska rev32 v7.16b,v7.16b 10462a58b312SMartin Matuska orr v18.16b,v0.16b,v0.16b // offload 10472a58b312SMartin Matuska orr v19.16b,v1.16b,v1.16b 10482a58b312SMartin Matuska ld1 {v17.4s},[x3],#16 10492a58b312SMartin Matuska add v16.4s,v16.4s,v4.4s 10502a58b312SMartin Matuska .inst 0x5e2828a4 //sha256su0 v4.16b,v5.16b 10512a58b312SMartin Matuska orr v2.16b,v0.16b,v0.16b 10522a58b312SMartin Matuska .inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s 10532a58b312SMartin Matuska .inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s 10542a58b312SMartin Matuska .inst 0x5e0760c4 //sha256su1 v4.16b,v6.16b,v7.16b 10552a58b312SMartin Matuska ld1 {v16.4s},[x3],#16 10562a58b312SMartin Matuska add v17.4s,v17.4s,v5.4s 10572a58b312SMartin Matuska .inst 0x5e2828c5 //sha256su0 v5.16b,v6.16b 10582a58b312SMartin Matuska orr v2.16b,v0.16b,v0.16b 10592a58b312SMartin Matuska .inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s 10602a58b312SMartin Matuska .inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s 10612a58b312SMartin Matuska .inst 0x5e0460e5 //sha256su1 v5.16b,v7.16b,v4.16b 10622a58b312SMartin Matuska ld1 {v17.4s},[x3],#16 10632a58b312SMartin Matuska add v16.4s,v16.4s,v6.4s 10642a58b312SMartin Matuska .inst 0x5e2828e6 //sha256su0 v6.16b,v7.16b 10652a58b312SMartin Matuska orr v2.16b,v0.16b,v0.16b 10662a58b312SMartin Matuska .inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s 10672a58b312SMartin Matuska .inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s 10682a58b312SMartin Matuska .inst 0x5e056086 //sha256su1 v6.16b,v4.16b,v5.16b 10692a58b312SMartin Matuska ld1 {v16.4s},[x3],#16 10702a58b312SMartin Matuska add v17.4s,v17.4s,v7.4s 10712a58b312SMartin Matuska .inst 0x5e282887 //sha256su0 v7.16b,v4.16b 10722a58b312SMartin Matuska orr v2.16b,v0.16b,v0.16b 10732a58b312SMartin Matuska .inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s 10742a58b312SMartin Matuska .inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s 10752a58b312SMartin Matuska .inst 0x5e0660a7 //sha256su1 v7.16b,v5.16b,v6.16b 10762a58b312SMartin Matuska ld1 {v17.4s},[x3],#16 10772a58b312SMartin Matuska add v16.4s,v16.4s,v4.4s 10782a58b312SMartin Matuska .inst 0x5e2828a4 //sha256su0 v4.16b,v5.16b 10792a58b312SMartin Matuska orr v2.16b,v0.16b,v0.16b 10802a58b312SMartin Matuska .inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s 10812a58b312SMartin Matuska .inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s 10822a58b312SMartin Matuska .inst 0x5e0760c4 //sha256su1 v4.16b,v6.16b,v7.16b 10832a58b312SMartin Matuska ld1 {v16.4s},[x3],#16 10842a58b312SMartin Matuska add v17.4s,v17.4s,v5.4s 10852a58b312SMartin Matuska .inst 0x5e2828c5 //sha256su0 v5.16b,v6.16b 10862a58b312SMartin Matuska orr v2.16b,v0.16b,v0.16b 10872a58b312SMartin Matuska .inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s 10882a58b312SMartin Matuska .inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s 10892a58b312SMartin Matuska .inst 0x5e0460e5 //sha256su1 v5.16b,v7.16b,v4.16b 10902a58b312SMartin Matuska ld1 {v17.4s},[x3],#16 10912a58b312SMartin Matuska add v16.4s,v16.4s,v6.4s 10922a58b312SMartin Matuska .inst 0x5e2828e6 //sha256su0 v6.16b,v7.16b 10932a58b312SMartin Matuska orr v2.16b,v0.16b,v0.16b 10942a58b312SMartin Matuska .inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s 10952a58b312SMartin Matuska .inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s 10962a58b312SMartin Matuska .inst 0x5e056086 //sha256su1 v6.16b,v4.16b,v5.16b 10972a58b312SMartin Matuska ld1 {v16.4s},[x3],#16 10982a58b312SMartin Matuska add v17.4s,v17.4s,v7.4s 10992a58b312SMartin Matuska .inst 0x5e282887 //sha256su0 v7.16b,v4.16b 11002a58b312SMartin Matuska orr v2.16b,v0.16b,v0.16b 11012a58b312SMartin Matuska .inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s 11022a58b312SMartin Matuska .inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s 11032a58b312SMartin Matuska .inst 0x5e0660a7 //sha256su1 v7.16b,v5.16b,v6.16b 11042a58b312SMartin Matuska ld1 {v17.4s},[x3],#16 11052a58b312SMartin Matuska add v16.4s,v16.4s,v4.4s 11062a58b312SMartin Matuska .inst 0x5e2828a4 //sha256su0 v4.16b,v5.16b 11072a58b312SMartin Matuska orr v2.16b,v0.16b,v0.16b 11082a58b312SMartin Matuska .inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s 11092a58b312SMartin Matuska .inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s 11102a58b312SMartin Matuska .inst 0x5e0760c4 //sha256su1 v4.16b,v6.16b,v7.16b 11112a58b312SMartin Matuska ld1 {v16.4s},[x3],#16 11122a58b312SMartin Matuska add v17.4s,v17.4s,v5.4s 11132a58b312SMartin Matuska .inst 0x5e2828c5 //sha256su0 v5.16b,v6.16b 11142a58b312SMartin Matuska orr v2.16b,v0.16b,v0.16b 11152a58b312SMartin Matuska .inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s 11162a58b312SMartin Matuska .inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s 11172a58b312SMartin Matuska .inst 0x5e0460e5 //sha256su1 v5.16b,v7.16b,v4.16b 11182a58b312SMartin Matuska ld1 {v17.4s},[x3],#16 11192a58b312SMartin Matuska add v16.4s,v16.4s,v6.4s 11202a58b312SMartin Matuska .inst 0x5e2828e6 //sha256su0 v6.16b,v7.16b 11212a58b312SMartin Matuska orr v2.16b,v0.16b,v0.16b 11222a58b312SMartin Matuska .inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s 11232a58b312SMartin Matuska .inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s 11242a58b312SMartin Matuska .inst 0x5e056086 //sha256su1 v6.16b,v4.16b,v5.16b 11252a58b312SMartin Matuska ld1 {v16.4s},[x3],#16 11262a58b312SMartin Matuska add v17.4s,v17.4s,v7.4s 11272a58b312SMartin Matuska .inst 0x5e282887 //sha256su0 v7.16b,v4.16b 11282a58b312SMartin Matuska orr v2.16b,v0.16b,v0.16b 11292a58b312SMartin Matuska .inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s 11302a58b312SMartin Matuska .inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s 11312a58b312SMartin Matuska .inst 0x5e0660a7 //sha256su1 v7.16b,v5.16b,v6.16b 11322a58b312SMartin Matuska ld1 {v17.4s},[x3],#16 11332a58b312SMartin Matuska add v16.4s,v16.4s,v4.4s 11342a58b312SMartin Matuska orr v2.16b,v0.16b,v0.16b 11352a58b312SMartin Matuska .inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s 11362a58b312SMartin Matuska .inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s 11372a58b312SMartin Matuska 11382a58b312SMartin Matuska ld1 {v16.4s},[x3],#16 11392a58b312SMartin Matuska add v17.4s,v17.4s,v5.4s 11402a58b312SMartin Matuska orr v2.16b,v0.16b,v0.16b 11412a58b312SMartin Matuska .inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s 11422a58b312SMartin Matuska .inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s 11432a58b312SMartin Matuska 11442a58b312SMartin Matuska ld1 {v17.4s},[x3] 11452a58b312SMartin Matuska add v16.4s,v16.4s,v6.4s 11462a58b312SMartin Matuska sub x3,x3,#64*4-16 // rewind 11472a58b312SMartin Matuska orr v2.16b,v0.16b,v0.16b 11482a58b312SMartin Matuska .inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s 11492a58b312SMartin Matuska .inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s 11502a58b312SMartin Matuska 11512a58b312SMartin Matuska add v17.4s,v17.4s,v7.4s 11522a58b312SMartin Matuska orr v2.16b,v0.16b,v0.16b 11532a58b312SMartin Matuska .inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s 11542a58b312SMartin Matuska .inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s 11552a58b312SMartin Matuska 11562a58b312SMartin Matuska add v0.4s,v0.4s,v18.4s 11572a58b312SMartin Matuska add v1.4s,v1.4s,v19.4s 11582a58b312SMartin Matuska 11592a58b312SMartin Matuska cbnz x2,.Loop_hw 11602a58b312SMartin Matuska 11612a58b312SMartin Matuska st1 {v0.4s,v1.4s},[x0] 11622a58b312SMartin Matuska 11632a58b312SMartin Matuska ldr x29,[sp],#16 11642a58b312SMartin Matuska ret 11652a58b312SMartin Matuska.size zfs_sha256_block_armv8,.-zfs_sha256_block_armv8 11662a58b312SMartin Matuska 11672a58b312SMartin Matuska.globl zfs_sha256_block_neon 11682a58b312SMartin Matuska.type zfs_sha256_block_neon,%function 11692a58b312SMartin Matuska.align 4 11702a58b312SMartin Matuskazfs_sha256_block_neon: 1171f7f4bd06SMartin Matuska hint #34 // bti c 11722a58b312SMartin Matuska.Lneon_entry: 11732a58b312SMartin Matuska stp x29, x30, [sp, #-16]! 11742a58b312SMartin Matuska mov x29, sp 11752a58b312SMartin Matuska sub sp,sp,#16*4 11762a58b312SMartin Matuska 11772a58b312SMartin Matuska adr x16,.LK256 11782a58b312SMartin Matuska add x2,x1,x2,lsl#6 // len to point at the end of inp 11792a58b312SMartin Matuska 11802a58b312SMartin Matuska ld1 {v0.16b},[x1], #16 11812a58b312SMartin Matuska ld1 {v1.16b},[x1], #16 11822a58b312SMartin Matuska ld1 {v2.16b},[x1], #16 11832a58b312SMartin Matuska ld1 {v3.16b},[x1], #16 11842a58b312SMartin Matuska ld1 {v4.4s},[x16], #16 11852a58b312SMartin Matuska ld1 {v5.4s},[x16], #16 11862a58b312SMartin Matuska ld1 {v6.4s},[x16], #16 11872a58b312SMartin Matuska ld1 {v7.4s},[x16], #16 11882a58b312SMartin Matuska rev32 v0.16b,v0.16b // yes, even on 11892a58b312SMartin Matuska rev32 v1.16b,v1.16b // big-endian 11902a58b312SMartin Matuska rev32 v2.16b,v2.16b 11912a58b312SMartin Matuska rev32 v3.16b,v3.16b 11922a58b312SMartin Matuska mov x17,sp 11932a58b312SMartin Matuska add v4.4s,v4.4s,v0.4s 11942a58b312SMartin Matuska add v5.4s,v5.4s,v1.4s 11952a58b312SMartin Matuska add v6.4s,v6.4s,v2.4s 11962a58b312SMartin Matuska st1 {v4.4s-v5.4s},[x17], #32 11972a58b312SMartin Matuska add v7.4s,v7.4s,v3.4s 11982a58b312SMartin Matuska st1 {v6.4s-v7.4s},[x17] 11992a58b312SMartin Matuska sub x17,x17,#32 12002a58b312SMartin Matuska 12012a58b312SMartin Matuska ldp w3,w4,[x0] 12022a58b312SMartin Matuska ldp w5,w6,[x0,#8] 12032a58b312SMartin Matuska ldp w7,w8,[x0,#16] 12042a58b312SMartin Matuska ldp w9,w10,[x0,#24] 12052a58b312SMartin Matuska ldr w12,[sp,#0] 12062a58b312SMartin Matuska mov w13,wzr 12072a58b312SMartin Matuska eor w14,w4,w5 12082a58b312SMartin Matuska mov w15,wzr 12092a58b312SMartin Matuska b .L_00_48 12102a58b312SMartin Matuska 12112a58b312SMartin Matuska.align 4 12122a58b312SMartin Matuska.L_00_48: 12132a58b312SMartin Matuska ext v4.16b,v0.16b,v1.16b,#4 12142a58b312SMartin Matuska add w10,w10,w12 12152a58b312SMartin Matuska add w3,w3,w15 12162a58b312SMartin Matuska and w12,w8,w7 12172a58b312SMartin Matuska bic w15,w9,w7 12182a58b312SMartin Matuska ext v7.16b,v2.16b,v3.16b,#4 12192a58b312SMartin Matuska eor w11,w7,w7,ror#5 12202a58b312SMartin Matuska add w3,w3,w13 12212a58b312SMartin Matuska mov d19,v3.d[1] 12222a58b312SMartin Matuska orr w12,w12,w15 12232a58b312SMartin Matuska eor w11,w11,w7,ror#19 12242a58b312SMartin Matuska ushr v6.4s,v4.4s,#7 12252a58b312SMartin Matuska eor w15,w3,w3,ror#11 12262a58b312SMartin Matuska ushr v5.4s,v4.4s,#3 12272a58b312SMartin Matuska add w10,w10,w12 12282a58b312SMartin Matuska add v0.4s,v0.4s,v7.4s 12292a58b312SMartin Matuska ror w11,w11,#6 12302a58b312SMartin Matuska sli v6.4s,v4.4s,#25 12312a58b312SMartin Matuska eor w13,w3,w4 12322a58b312SMartin Matuska eor w15,w15,w3,ror#20 12332a58b312SMartin Matuska ushr v7.4s,v4.4s,#18 12342a58b312SMartin Matuska add w10,w10,w11 12352a58b312SMartin Matuska ldr w12,[sp,#4] 12362a58b312SMartin Matuska and w14,w14,w13 12372a58b312SMartin Matuska eor v5.16b,v5.16b,v6.16b 12382a58b312SMartin Matuska ror w15,w15,#2 12392a58b312SMartin Matuska add w6,w6,w10 12402a58b312SMartin Matuska sli v7.4s,v4.4s,#14 12412a58b312SMartin Matuska eor w14,w14,w4 12422a58b312SMartin Matuska ushr v16.4s,v19.4s,#17 12432a58b312SMartin Matuska add w9,w9,w12 12442a58b312SMartin Matuska add w10,w10,w15 12452a58b312SMartin Matuska and w12,w7,w6 12462a58b312SMartin Matuska eor v5.16b,v5.16b,v7.16b 12472a58b312SMartin Matuska bic w15,w8,w6 12482a58b312SMartin Matuska eor w11,w6,w6,ror#5 12492a58b312SMartin Matuska sli v16.4s,v19.4s,#15 12502a58b312SMartin Matuska add w10,w10,w14 12512a58b312SMartin Matuska orr w12,w12,w15 12522a58b312SMartin Matuska ushr v17.4s,v19.4s,#10 12532a58b312SMartin Matuska eor w11,w11,w6,ror#19 12542a58b312SMartin Matuska eor w15,w10,w10,ror#11 12552a58b312SMartin Matuska ushr v7.4s,v19.4s,#19 12562a58b312SMartin Matuska add w9,w9,w12 12572a58b312SMartin Matuska ror w11,w11,#6 12582a58b312SMartin Matuska add v0.4s,v0.4s,v5.4s 12592a58b312SMartin Matuska eor w14,w10,w3 12602a58b312SMartin Matuska eor w15,w15,w10,ror#20 12612a58b312SMartin Matuska sli v7.4s,v19.4s,#13 12622a58b312SMartin Matuska add w9,w9,w11 12632a58b312SMartin Matuska ldr w12,[sp,#8] 12642a58b312SMartin Matuska and w13,w13,w14 12652a58b312SMartin Matuska eor v17.16b,v17.16b,v16.16b 12662a58b312SMartin Matuska ror w15,w15,#2 12672a58b312SMartin Matuska add w5,w5,w9 12682a58b312SMartin Matuska eor w13,w13,w3 12692a58b312SMartin Matuska eor v17.16b,v17.16b,v7.16b 12702a58b312SMartin Matuska add w8,w8,w12 12712a58b312SMartin Matuska add w9,w9,w15 12722a58b312SMartin Matuska and w12,w6,w5 12732a58b312SMartin Matuska add v0.4s,v0.4s,v17.4s 12742a58b312SMartin Matuska bic w15,w7,w5 12752a58b312SMartin Matuska eor w11,w5,w5,ror#5 12762a58b312SMartin Matuska add w9,w9,w13 12772a58b312SMartin Matuska ushr v18.4s,v0.4s,#17 12782a58b312SMartin Matuska orr w12,w12,w15 12792a58b312SMartin Matuska ushr v19.4s,v0.4s,#10 12802a58b312SMartin Matuska eor w11,w11,w5,ror#19 12812a58b312SMartin Matuska eor w15,w9,w9,ror#11 12822a58b312SMartin Matuska sli v18.4s,v0.4s,#15 12832a58b312SMartin Matuska add w8,w8,w12 12842a58b312SMartin Matuska ushr v17.4s,v0.4s,#19 12852a58b312SMartin Matuska ror w11,w11,#6 12862a58b312SMartin Matuska eor w13,w9,w10 12872a58b312SMartin Matuska eor v19.16b,v19.16b,v18.16b 12882a58b312SMartin Matuska eor w15,w15,w9,ror#20 12892a58b312SMartin Matuska add w8,w8,w11 12902a58b312SMartin Matuska sli v17.4s,v0.4s,#13 12912a58b312SMartin Matuska ldr w12,[sp,#12] 12922a58b312SMartin Matuska and w14,w14,w13 12932a58b312SMartin Matuska ror w15,w15,#2 12942a58b312SMartin Matuska ld1 {v4.4s},[x16], #16 12952a58b312SMartin Matuska add w4,w4,w8 12962a58b312SMartin Matuska eor v19.16b,v19.16b,v17.16b 12972a58b312SMartin Matuska eor w14,w14,w10 12982a58b312SMartin Matuska eor v17.16b,v17.16b,v17.16b 12992a58b312SMartin Matuska add w7,w7,w12 13002a58b312SMartin Matuska add w8,w8,w15 13012a58b312SMartin Matuska and w12,w5,w4 13022a58b312SMartin Matuska mov v17.d[1],v19.d[0] 13032a58b312SMartin Matuska bic w15,w6,w4 13042a58b312SMartin Matuska eor w11,w4,w4,ror#5 13052a58b312SMartin Matuska add w8,w8,w14 13062a58b312SMartin Matuska add v0.4s,v0.4s,v17.4s 13072a58b312SMartin Matuska orr w12,w12,w15 13082a58b312SMartin Matuska eor w11,w11,w4,ror#19 13092a58b312SMartin Matuska eor w15,w8,w8,ror#11 13102a58b312SMartin Matuska add v4.4s,v4.4s,v0.4s 13112a58b312SMartin Matuska add w7,w7,w12 13122a58b312SMartin Matuska ror w11,w11,#6 13132a58b312SMartin Matuska eor w14,w8,w9 13142a58b312SMartin Matuska eor w15,w15,w8,ror#20 13152a58b312SMartin Matuska add w7,w7,w11 13162a58b312SMartin Matuska ldr w12,[sp,#16] 13172a58b312SMartin Matuska and w13,w13,w14 13182a58b312SMartin Matuska ror w15,w15,#2 13192a58b312SMartin Matuska add w3,w3,w7 13202a58b312SMartin Matuska eor w13,w13,w9 13212a58b312SMartin Matuska st1 {v4.4s},[x17], #16 13222a58b312SMartin Matuska ext v4.16b,v1.16b,v2.16b,#4 13232a58b312SMartin Matuska add w6,w6,w12 13242a58b312SMartin Matuska add w7,w7,w15 13252a58b312SMartin Matuska and w12,w4,w3 13262a58b312SMartin Matuska bic w15,w5,w3 13272a58b312SMartin Matuska ext v7.16b,v3.16b,v0.16b,#4 13282a58b312SMartin Matuska eor w11,w3,w3,ror#5 13292a58b312SMartin Matuska add w7,w7,w13 13302a58b312SMartin Matuska mov d19,v0.d[1] 13312a58b312SMartin Matuska orr w12,w12,w15 13322a58b312SMartin Matuska eor w11,w11,w3,ror#19 13332a58b312SMartin Matuska ushr v6.4s,v4.4s,#7 13342a58b312SMartin Matuska eor w15,w7,w7,ror#11 13352a58b312SMartin Matuska ushr v5.4s,v4.4s,#3 13362a58b312SMartin Matuska add w6,w6,w12 13372a58b312SMartin Matuska add v1.4s,v1.4s,v7.4s 13382a58b312SMartin Matuska ror w11,w11,#6 13392a58b312SMartin Matuska sli v6.4s,v4.4s,#25 13402a58b312SMartin Matuska eor w13,w7,w8 13412a58b312SMartin Matuska eor w15,w15,w7,ror#20 13422a58b312SMartin Matuska ushr v7.4s,v4.4s,#18 13432a58b312SMartin Matuska add w6,w6,w11 13442a58b312SMartin Matuska ldr w12,[sp,#20] 13452a58b312SMartin Matuska and w14,w14,w13 13462a58b312SMartin Matuska eor v5.16b,v5.16b,v6.16b 13472a58b312SMartin Matuska ror w15,w15,#2 13482a58b312SMartin Matuska add w10,w10,w6 13492a58b312SMartin Matuska sli v7.4s,v4.4s,#14 13502a58b312SMartin Matuska eor w14,w14,w8 13512a58b312SMartin Matuska ushr v16.4s,v19.4s,#17 13522a58b312SMartin Matuska add w5,w5,w12 13532a58b312SMartin Matuska add w6,w6,w15 13542a58b312SMartin Matuska and w12,w3,w10 13552a58b312SMartin Matuska eor v5.16b,v5.16b,v7.16b 13562a58b312SMartin Matuska bic w15,w4,w10 13572a58b312SMartin Matuska eor w11,w10,w10,ror#5 13582a58b312SMartin Matuska sli v16.4s,v19.4s,#15 13592a58b312SMartin Matuska add w6,w6,w14 13602a58b312SMartin Matuska orr w12,w12,w15 13612a58b312SMartin Matuska ushr v17.4s,v19.4s,#10 13622a58b312SMartin Matuska eor w11,w11,w10,ror#19 13632a58b312SMartin Matuska eor w15,w6,w6,ror#11 13642a58b312SMartin Matuska ushr v7.4s,v19.4s,#19 13652a58b312SMartin Matuska add w5,w5,w12 13662a58b312SMartin Matuska ror w11,w11,#6 13672a58b312SMartin Matuska add v1.4s,v1.4s,v5.4s 13682a58b312SMartin Matuska eor w14,w6,w7 13692a58b312SMartin Matuska eor w15,w15,w6,ror#20 13702a58b312SMartin Matuska sli v7.4s,v19.4s,#13 13712a58b312SMartin Matuska add w5,w5,w11 13722a58b312SMartin Matuska ldr w12,[sp,#24] 13732a58b312SMartin Matuska and w13,w13,w14 13742a58b312SMartin Matuska eor v17.16b,v17.16b,v16.16b 13752a58b312SMartin Matuska ror w15,w15,#2 13762a58b312SMartin Matuska add w9,w9,w5 13772a58b312SMartin Matuska eor w13,w13,w7 13782a58b312SMartin Matuska eor v17.16b,v17.16b,v7.16b 13792a58b312SMartin Matuska add w4,w4,w12 13802a58b312SMartin Matuska add w5,w5,w15 13812a58b312SMartin Matuska and w12,w10,w9 13822a58b312SMartin Matuska add v1.4s,v1.4s,v17.4s 13832a58b312SMartin Matuska bic w15,w3,w9 13842a58b312SMartin Matuska eor w11,w9,w9,ror#5 13852a58b312SMartin Matuska add w5,w5,w13 13862a58b312SMartin Matuska ushr v18.4s,v1.4s,#17 13872a58b312SMartin Matuska orr w12,w12,w15 13882a58b312SMartin Matuska ushr v19.4s,v1.4s,#10 13892a58b312SMartin Matuska eor w11,w11,w9,ror#19 13902a58b312SMartin Matuska eor w15,w5,w5,ror#11 13912a58b312SMartin Matuska sli v18.4s,v1.4s,#15 13922a58b312SMartin Matuska add w4,w4,w12 13932a58b312SMartin Matuska ushr v17.4s,v1.4s,#19 13942a58b312SMartin Matuska ror w11,w11,#6 13952a58b312SMartin Matuska eor w13,w5,w6 13962a58b312SMartin Matuska eor v19.16b,v19.16b,v18.16b 13972a58b312SMartin Matuska eor w15,w15,w5,ror#20 13982a58b312SMartin Matuska add w4,w4,w11 13992a58b312SMartin Matuska sli v17.4s,v1.4s,#13 14002a58b312SMartin Matuska ldr w12,[sp,#28] 14012a58b312SMartin Matuska and w14,w14,w13 14022a58b312SMartin Matuska ror w15,w15,#2 14032a58b312SMartin Matuska ld1 {v4.4s},[x16], #16 14042a58b312SMartin Matuska add w8,w8,w4 14052a58b312SMartin Matuska eor v19.16b,v19.16b,v17.16b 14062a58b312SMartin Matuska eor w14,w14,w6 14072a58b312SMartin Matuska eor v17.16b,v17.16b,v17.16b 14082a58b312SMartin Matuska add w3,w3,w12 14092a58b312SMartin Matuska add w4,w4,w15 14102a58b312SMartin Matuska and w12,w9,w8 14112a58b312SMartin Matuska mov v17.d[1],v19.d[0] 14122a58b312SMartin Matuska bic w15,w10,w8 14132a58b312SMartin Matuska eor w11,w8,w8,ror#5 14142a58b312SMartin Matuska add w4,w4,w14 14152a58b312SMartin Matuska add v1.4s,v1.4s,v17.4s 14162a58b312SMartin Matuska orr w12,w12,w15 14172a58b312SMartin Matuska eor w11,w11,w8,ror#19 14182a58b312SMartin Matuska eor w15,w4,w4,ror#11 14192a58b312SMartin Matuska add v4.4s,v4.4s,v1.4s 14202a58b312SMartin Matuska add w3,w3,w12 14212a58b312SMartin Matuska ror w11,w11,#6 14222a58b312SMartin Matuska eor w14,w4,w5 14232a58b312SMartin Matuska eor w15,w15,w4,ror#20 14242a58b312SMartin Matuska add w3,w3,w11 14252a58b312SMartin Matuska ldr w12,[sp,#32] 14262a58b312SMartin Matuska and w13,w13,w14 14272a58b312SMartin Matuska ror w15,w15,#2 14282a58b312SMartin Matuska add w7,w7,w3 14292a58b312SMartin Matuska eor w13,w13,w5 14302a58b312SMartin Matuska st1 {v4.4s},[x17], #16 14312a58b312SMartin Matuska ext v4.16b,v2.16b,v3.16b,#4 14322a58b312SMartin Matuska add w10,w10,w12 14332a58b312SMartin Matuska add w3,w3,w15 14342a58b312SMartin Matuska and w12,w8,w7 14352a58b312SMartin Matuska bic w15,w9,w7 14362a58b312SMartin Matuska ext v7.16b,v0.16b,v1.16b,#4 14372a58b312SMartin Matuska eor w11,w7,w7,ror#5 14382a58b312SMartin Matuska add w3,w3,w13 14392a58b312SMartin Matuska mov d19,v1.d[1] 14402a58b312SMartin Matuska orr w12,w12,w15 14412a58b312SMartin Matuska eor w11,w11,w7,ror#19 14422a58b312SMartin Matuska ushr v6.4s,v4.4s,#7 14432a58b312SMartin Matuska eor w15,w3,w3,ror#11 14442a58b312SMartin Matuska ushr v5.4s,v4.4s,#3 14452a58b312SMartin Matuska add w10,w10,w12 14462a58b312SMartin Matuska add v2.4s,v2.4s,v7.4s 14472a58b312SMartin Matuska ror w11,w11,#6 14482a58b312SMartin Matuska sli v6.4s,v4.4s,#25 14492a58b312SMartin Matuska eor w13,w3,w4 14502a58b312SMartin Matuska eor w15,w15,w3,ror#20 14512a58b312SMartin Matuska ushr v7.4s,v4.4s,#18 14522a58b312SMartin Matuska add w10,w10,w11 14532a58b312SMartin Matuska ldr w12,[sp,#36] 14542a58b312SMartin Matuska and w14,w14,w13 14552a58b312SMartin Matuska eor v5.16b,v5.16b,v6.16b 14562a58b312SMartin Matuska ror w15,w15,#2 14572a58b312SMartin Matuska add w6,w6,w10 14582a58b312SMartin Matuska sli v7.4s,v4.4s,#14 14592a58b312SMartin Matuska eor w14,w14,w4 14602a58b312SMartin Matuska ushr v16.4s,v19.4s,#17 14612a58b312SMartin Matuska add w9,w9,w12 14622a58b312SMartin Matuska add w10,w10,w15 14632a58b312SMartin Matuska and w12,w7,w6 14642a58b312SMartin Matuska eor v5.16b,v5.16b,v7.16b 14652a58b312SMartin Matuska bic w15,w8,w6 14662a58b312SMartin Matuska eor w11,w6,w6,ror#5 14672a58b312SMartin Matuska sli v16.4s,v19.4s,#15 14682a58b312SMartin Matuska add w10,w10,w14 14692a58b312SMartin Matuska orr w12,w12,w15 14702a58b312SMartin Matuska ushr v17.4s,v19.4s,#10 14712a58b312SMartin Matuska eor w11,w11,w6,ror#19 14722a58b312SMartin Matuska eor w15,w10,w10,ror#11 14732a58b312SMartin Matuska ushr v7.4s,v19.4s,#19 14742a58b312SMartin Matuska add w9,w9,w12 14752a58b312SMartin Matuska ror w11,w11,#6 14762a58b312SMartin Matuska add v2.4s,v2.4s,v5.4s 14772a58b312SMartin Matuska eor w14,w10,w3 14782a58b312SMartin Matuska eor w15,w15,w10,ror#20 14792a58b312SMartin Matuska sli v7.4s,v19.4s,#13 14802a58b312SMartin Matuska add w9,w9,w11 14812a58b312SMartin Matuska ldr w12,[sp,#40] 14822a58b312SMartin Matuska and w13,w13,w14 14832a58b312SMartin Matuska eor v17.16b,v17.16b,v16.16b 14842a58b312SMartin Matuska ror w15,w15,#2 14852a58b312SMartin Matuska add w5,w5,w9 14862a58b312SMartin Matuska eor w13,w13,w3 14872a58b312SMartin Matuska eor v17.16b,v17.16b,v7.16b 14882a58b312SMartin Matuska add w8,w8,w12 14892a58b312SMartin Matuska add w9,w9,w15 14902a58b312SMartin Matuska and w12,w6,w5 14912a58b312SMartin Matuska add v2.4s,v2.4s,v17.4s 14922a58b312SMartin Matuska bic w15,w7,w5 14932a58b312SMartin Matuska eor w11,w5,w5,ror#5 14942a58b312SMartin Matuska add w9,w9,w13 14952a58b312SMartin Matuska ushr v18.4s,v2.4s,#17 14962a58b312SMartin Matuska orr w12,w12,w15 14972a58b312SMartin Matuska ushr v19.4s,v2.4s,#10 14982a58b312SMartin Matuska eor w11,w11,w5,ror#19 14992a58b312SMartin Matuska eor w15,w9,w9,ror#11 15002a58b312SMartin Matuska sli v18.4s,v2.4s,#15 15012a58b312SMartin Matuska add w8,w8,w12 15022a58b312SMartin Matuska ushr v17.4s,v2.4s,#19 15032a58b312SMartin Matuska ror w11,w11,#6 15042a58b312SMartin Matuska eor w13,w9,w10 15052a58b312SMartin Matuska eor v19.16b,v19.16b,v18.16b 15062a58b312SMartin Matuska eor w15,w15,w9,ror#20 15072a58b312SMartin Matuska add w8,w8,w11 15082a58b312SMartin Matuska sli v17.4s,v2.4s,#13 15092a58b312SMartin Matuska ldr w12,[sp,#44] 15102a58b312SMartin Matuska and w14,w14,w13 15112a58b312SMartin Matuska ror w15,w15,#2 15122a58b312SMartin Matuska ld1 {v4.4s},[x16], #16 15132a58b312SMartin Matuska add w4,w4,w8 15142a58b312SMartin Matuska eor v19.16b,v19.16b,v17.16b 15152a58b312SMartin Matuska eor w14,w14,w10 15162a58b312SMartin Matuska eor v17.16b,v17.16b,v17.16b 15172a58b312SMartin Matuska add w7,w7,w12 15182a58b312SMartin Matuska add w8,w8,w15 15192a58b312SMartin Matuska and w12,w5,w4 15202a58b312SMartin Matuska mov v17.d[1],v19.d[0] 15212a58b312SMartin Matuska bic w15,w6,w4 15222a58b312SMartin Matuska eor w11,w4,w4,ror#5 15232a58b312SMartin Matuska add w8,w8,w14 15242a58b312SMartin Matuska add v2.4s,v2.4s,v17.4s 15252a58b312SMartin Matuska orr w12,w12,w15 15262a58b312SMartin Matuska eor w11,w11,w4,ror#19 15272a58b312SMartin Matuska eor w15,w8,w8,ror#11 15282a58b312SMartin Matuska add v4.4s,v4.4s,v2.4s 15292a58b312SMartin Matuska add w7,w7,w12 15302a58b312SMartin Matuska ror w11,w11,#6 15312a58b312SMartin Matuska eor w14,w8,w9 15322a58b312SMartin Matuska eor w15,w15,w8,ror#20 15332a58b312SMartin Matuska add w7,w7,w11 15342a58b312SMartin Matuska ldr w12,[sp,#48] 15352a58b312SMartin Matuska and w13,w13,w14 15362a58b312SMartin Matuska ror w15,w15,#2 15372a58b312SMartin Matuska add w3,w3,w7 15382a58b312SMartin Matuska eor w13,w13,w9 15392a58b312SMartin Matuska st1 {v4.4s},[x17], #16 15402a58b312SMartin Matuska ext v4.16b,v3.16b,v0.16b,#4 15412a58b312SMartin Matuska add w6,w6,w12 15422a58b312SMartin Matuska add w7,w7,w15 15432a58b312SMartin Matuska and w12,w4,w3 15442a58b312SMartin Matuska bic w15,w5,w3 15452a58b312SMartin Matuska ext v7.16b,v1.16b,v2.16b,#4 15462a58b312SMartin Matuska eor w11,w3,w3,ror#5 15472a58b312SMartin Matuska add w7,w7,w13 15482a58b312SMartin Matuska mov d19,v2.d[1] 15492a58b312SMartin Matuska orr w12,w12,w15 15502a58b312SMartin Matuska eor w11,w11,w3,ror#19 15512a58b312SMartin Matuska ushr v6.4s,v4.4s,#7 15522a58b312SMartin Matuska eor w15,w7,w7,ror#11 15532a58b312SMartin Matuska ushr v5.4s,v4.4s,#3 15542a58b312SMartin Matuska add w6,w6,w12 15552a58b312SMartin Matuska add v3.4s,v3.4s,v7.4s 15562a58b312SMartin Matuska ror w11,w11,#6 15572a58b312SMartin Matuska sli v6.4s,v4.4s,#25 15582a58b312SMartin Matuska eor w13,w7,w8 15592a58b312SMartin Matuska eor w15,w15,w7,ror#20 15602a58b312SMartin Matuska ushr v7.4s,v4.4s,#18 15612a58b312SMartin Matuska add w6,w6,w11 15622a58b312SMartin Matuska ldr w12,[sp,#52] 15632a58b312SMartin Matuska and w14,w14,w13 15642a58b312SMartin Matuska eor v5.16b,v5.16b,v6.16b 15652a58b312SMartin Matuska ror w15,w15,#2 15662a58b312SMartin Matuska add w10,w10,w6 15672a58b312SMartin Matuska sli v7.4s,v4.4s,#14 15682a58b312SMartin Matuska eor w14,w14,w8 15692a58b312SMartin Matuska ushr v16.4s,v19.4s,#17 15702a58b312SMartin Matuska add w5,w5,w12 15712a58b312SMartin Matuska add w6,w6,w15 15722a58b312SMartin Matuska and w12,w3,w10 15732a58b312SMartin Matuska eor v5.16b,v5.16b,v7.16b 15742a58b312SMartin Matuska bic w15,w4,w10 15752a58b312SMartin Matuska eor w11,w10,w10,ror#5 15762a58b312SMartin Matuska sli v16.4s,v19.4s,#15 15772a58b312SMartin Matuska add w6,w6,w14 15782a58b312SMartin Matuska orr w12,w12,w15 15792a58b312SMartin Matuska ushr v17.4s,v19.4s,#10 15802a58b312SMartin Matuska eor w11,w11,w10,ror#19 15812a58b312SMartin Matuska eor w15,w6,w6,ror#11 15822a58b312SMartin Matuska ushr v7.4s,v19.4s,#19 15832a58b312SMartin Matuska add w5,w5,w12 15842a58b312SMartin Matuska ror w11,w11,#6 15852a58b312SMartin Matuska add v3.4s,v3.4s,v5.4s 15862a58b312SMartin Matuska eor w14,w6,w7 15872a58b312SMartin Matuska eor w15,w15,w6,ror#20 15882a58b312SMartin Matuska sli v7.4s,v19.4s,#13 15892a58b312SMartin Matuska add w5,w5,w11 15902a58b312SMartin Matuska ldr w12,[sp,#56] 15912a58b312SMartin Matuska and w13,w13,w14 15922a58b312SMartin Matuska eor v17.16b,v17.16b,v16.16b 15932a58b312SMartin Matuska ror w15,w15,#2 15942a58b312SMartin Matuska add w9,w9,w5 15952a58b312SMartin Matuska eor w13,w13,w7 15962a58b312SMartin Matuska eor v17.16b,v17.16b,v7.16b 15972a58b312SMartin Matuska add w4,w4,w12 15982a58b312SMartin Matuska add w5,w5,w15 15992a58b312SMartin Matuska and w12,w10,w9 16002a58b312SMartin Matuska add v3.4s,v3.4s,v17.4s 16012a58b312SMartin Matuska bic w15,w3,w9 16022a58b312SMartin Matuska eor w11,w9,w9,ror#5 16032a58b312SMartin Matuska add w5,w5,w13 16042a58b312SMartin Matuska ushr v18.4s,v3.4s,#17 16052a58b312SMartin Matuska orr w12,w12,w15 16062a58b312SMartin Matuska ushr v19.4s,v3.4s,#10 16072a58b312SMartin Matuska eor w11,w11,w9,ror#19 16082a58b312SMartin Matuska eor w15,w5,w5,ror#11 16092a58b312SMartin Matuska sli v18.4s,v3.4s,#15 16102a58b312SMartin Matuska add w4,w4,w12 16112a58b312SMartin Matuska ushr v17.4s,v3.4s,#19 16122a58b312SMartin Matuska ror w11,w11,#6 16132a58b312SMartin Matuska eor w13,w5,w6 16142a58b312SMartin Matuska eor v19.16b,v19.16b,v18.16b 16152a58b312SMartin Matuska eor w15,w15,w5,ror#20 16162a58b312SMartin Matuska add w4,w4,w11 16172a58b312SMartin Matuska sli v17.4s,v3.4s,#13 16182a58b312SMartin Matuska ldr w12,[sp,#60] 16192a58b312SMartin Matuska and w14,w14,w13 16202a58b312SMartin Matuska ror w15,w15,#2 16212a58b312SMartin Matuska ld1 {v4.4s},[x16], #16 16222a58b312SMartin Matuska add w8,w8,w4 16232a58b312SMartin Matuska eor v19.16b,v19.16b,v17.16b 16242a58b312SMartin Matuska eor w14,w14,w6 16252a58b312SMartin Matuska eor v17.16b,v17.16b,v17.16b 16262a58b312SMartin Matuska add w3,w3,w12 16272a58b312SMartin Matuska add w4,w4,w15 16282a58b312SMartin Matuska and w12,w9,w8 16292a58b312SMartin Matuska mov v17.d[1],v19.d[0] 16302a58b312SMartin Matuska bic w15,w10,w8 16312a58b312SMartin Matuska eor w11,w8,w8,ror#5 16322a58b312SMartin Matuska add w4,w4,w14 16332a58b312SMartin Matuska add v3.4s,v3.4s,v17.4s 16342a58b312SMartin Matuska orr w12,w12,w15 16352a58b312SMartin Matuska eor w11,w11,w8,ror#19 16362a58b312SMartin Matuska eor w15,w4,w4,ror#11 16372a58b312SMartin Matuska add v4.4s,v4.4s,v3.4s 16382a58b312SMartin Matuska add w3,w3,w12 16392a58b312SMartin Matuska ror w11,w11,#6 16402a58b312SMartin Matuska eor w14,w4,w5 16412a58b312SMartin Matuska eor w15,w15,w4,ror#20 16422a58b312SMartin Matuska add w3,w3,w11 16432a58b312SMartin Matuska ldr w12,[x16] 16442a58b312SMartin Matuska and w13,w13,w14 16452a58b312SMartin Matuska ror w15,w15,#2 16462a58b312SMartin Matuska add w7,w7,w3 16472a58b312SMartin Matuska eor w13,w13,w5 16482a58b312SMartin Matuska st1 {v4.4s},[x17], #16 16492a58b312SMartin Matuska cmp w12,#0 // check for K256 terminator 16502a58b312SMartin Matuska ldr w12,[sp,#0] 16512a58b312SMartin Matuska sub x17,x17,#64 16522a58b312SMartin Matuska bne .L_00_48 16532a58b312SMartin Matuska 16542a58b312SMartin Matuska sub x16,x16,#256 // rewind x16 16552a58b312SMartin Matuska cmp x1,x2 16562a58b312SMartin Matuska mov x17, #64 16572a58b312SMartin Matuska csel x17, x17, xzr, eq 16582a58b312SMartin Matuska sub x1,x1,x17 // avoid SEGV 16592a58b312SMartin Matuska mov x17,sp 16602a58b312SMartin Matuska add w10,w10,w12 16612a58b312SMartin Matuska add w3,w3,w15 16622a58b312SMartin Matuska and w12,w8,w7 16632a58b312SMartin Matuska ld1 {v0.16b},[x1],#16 16642a58b312SMartin Matuska bic w15,w9,w7 16652a58b312SMartin Matuska eor w11,w7,w7,ror#5 16662a58b312SMartin Matuska ld1 {v4.4s},[x16],#16 16672a58b312SMartin Matuska add w3,w3,w13 16682a58b312SMartin Matuska orr w12,w12,w15 16692a58b312SMartin Matuska eor w11,w11,w7,ror#19 16702a58b312SMartin Matuska eor w15,w3,w3,ror#11 16712a58b312SMartin Matuska rev32 v0.16b,v0.16b 16722a58b312SMartin Matuska add w10,w10,w12 16732a58b312SMartin Matuska ror w11,w11,#6 16742a58b312SMartin Matuska eor w13,w3,w4 16752a58b312SMartin Matuska eor w15,w15,w3,ror#20 16762a58b312SMartin Matuska add v4.4s,v4.4s,v0.4s 16772a58b312SMartin Matuska add w10,w10,w11 16782a58b312SMartin Matuska ldr w12,[sp,#4] 16792a58b312SMartin Matuska and w14,w14,w13 16802a58b312SMartin Matuska ror w15,w15,#2 16812a58b312SMartin Matuska add w6,w6,w10 16822a58b312SMartin Matuska eor w14,w14,w4 16832a58b312SMartin Matuska add w9,w9,w12 16842a58b312SMartin Matuska add w10,w10,w15 16852a58b312SMartin Matuska and w12,w7,w6 16862a58b312SMartin Matuska bic w15,w8,w6 16872a58b312SMartin Matuska eor w11,w6,w6,ror#5 16882a58b312SMartin Matuska add w10,w10,w14 16892a58b312SMartin Matuska orr w12,w12,w15 16902a58b312SMartin Matuska eor w11,w11,w6,ror#19 16912a58b312SMartin Matuska eor w15,w10,w10,ror#11 16922a58b312SMartin Matuska add w9,w9,w12 16932a58b312SMartin Matuska ror w11,w11,#6 16942a58b312SMartin Matuska eor w14,w10,w3 16952a58b312SMartin Matuska eor w15,w15,w10,ror#20 16962a58b312SMartin Matuska add w9,w9,w11 16972a58b312SMartin Matuska ldr w12,[sp,#8] 16982a58b312SMartin Matuska and w13,w13,w14 16992a58b312SMartin Matuska ror w15,w15,#2 17002a58b312SMartin Matuska add w5,w5,w9 17012a58b312SMartin Matuska eor w13,w13,w3 17022a58b312SMartin Matuska add w8,w8,w12 17032a58b312SMartin Matuska add w9,w9,w15 17042a58b312SMartin Matuska and w12,w6,w5 17052a58b312SMartin Matuska bic w15,w7,w5 17062a58b312SMartin Matuska eor w11,w5,w5,ror#5 17072a58b312SMartin Matuska add w9,w9,w13 17082a58b312SMartin Matuska orr w12,w12,w15 17092a58b312SMartin Matuska eor w11,w11,w5,ror#19 17102a58b312SMartin Matuska eor w15,w9,w9,ror#11 17112a58b312SMartin Matuska add w8,w8,w12 17122a58b312SMartin Matuska ror w11,w11,#6 17132a58b312SMartin Matuska eor w13,w9,w10 17142a58b312SMartin Matuska eor w15,w15,w9,ror#20 17152a58b312SMartin Matuska add w8,w8,w11 17162a58b312SMartin Matuska ldr w12,[sp,#12] 17172a58b312SMartin Matuska and w14,w14,w13 17182a58b312SMartin Matuska ror w15,w15,#2 17192a58b312SMartin Matuska add w4,w4,w8 17202a58b312SMartin Matuska eor w14,w14,w10 17212a58b312SMartin Matuska add w7,w7,w12 17222a58b312SMartin Matuska add w8,w8,w15 17232a58b312SMartin Matuska and w12,w5,w4 17242a58b312SMartin Matuska bic w15,w6,w4 17252a58b312SMartin Matuska eor w11,w4,w4,ror#5 17262a58b312SMartin Matuska add w8,w8,w14 17272a58b312SMartin Matuska orr w12,w12,w15 17282a58b312SMartin Matuska eor w11,w11,w4,ror#19 17292a58b312SMartin Matuska eor w15,w8,w8,ror#11 17302a58b312SMartin Matuska add w7,w7,w12 17312a58b312SMartin Matuska ror w11,w11,#6 17322a58b312SMartin Matuska eor w14,w8,w9 17332a58b312SMartin Matuska eor w15,w15,w8,ror#20 17342a58b312SMartin Matuska add w7,w7,w11 17352a58b312SMartin Matuska ldr w12,[sp,#16] 17362a58b312SMartin Matuska and w13,w13,w14 17372a58b312SMartin Matuska ror w15,w15,#2 17382a58b312SMartin Matuska add w3,w3,w7 17392a58b312SMartin Matuska eor w13,w13,w9 17402a58b312SMartin Matuska st1 {v4.4s},[x17], #16 17412a58b312SMartin Matuska add w6,w6,w12 17422a58b312SMartin Matuska add w7,w7,w15 17432a58b312SMartin Matuska and w12,w4,w3 17442a58b312SMartin Matuska ld1 {v1.16b},[x1],#16 17452a58b312SMartin Matuska bic w15,w5,w3 17462a58b312SMartin Matuska eor w11,w3,w3,ror#5 17472a58b312SMartin Matuska ld1 {v4.4s},[x16],#16 17482a58b312SMartin Matuska add w7,w7,w13 17492a58b312SMartin Matuska orr w12,w12,w15 17502a58b312SMartin Matuska eor w11,w11,w3,ror#19 17512a58b312SMartin Matuska eor w15,w7,w7,ror#11 17522a58b312SMartin Matuska rev32 v1.16b,v1.16b 17532a58b312SMartin Matuska add w6,w6,w12 17542a58b312SMartin Matuska ror w11,w11,#6 17552a58b312SMartin Matuska eor w13,w7,w8 17562a58b312SMartin Matuska eor w15,w15,w7,ror#20 17572a58b312SMartin Matuska add v4.4s,v4.4s,v1.4s 17582a58b312SMartin Matuska add w6,w6,w11 17592a58b312SMartin Matuska ldr w12,[sp,#20] 17602a58b312SMartin Matuska and w14,w14,w13 17612a58b312SMartin Matuska ror w15,w15,#2 17622a58b312SMartin Matuska add w10,w10,w6 17632a58b312SMartin Matuska eor w14,w14,w8 17642a58b312SMartin Matuska add w5,w5,w12 17652a58b312SMartin Matuska add w6,w6,w15 17662a58b312SMartin Matuska and w12,w3,w10 17672a58b312SMartin Matuska bic w15,w4,w10 17682a58b312SMartin Matuska eor w11,w10,w10,ror#5 17692a58b312SMartin Matuska add w6,w6,w14 17702a58b312SMartin Matuska orr w12,w12,w15 17712a58b312SMartin Matuska eor w11,w11,w10,ror#19 17722a58b312SMartin Matuska eor w15,w6,w6,ror#11 17732a58b312SMartin Matuska add w5,w5,w12 17742a58b312SMartin Matuska ror w11,w11,#6 17752a58b312SMartin Matuska eor w14,w6,w7 17762a58b312SMartin Matuska eor w15,w15,w6,ror#20 17772a58b312SMartin Matuska add w5,w5,w11 17782a58b312SMartin Matuska ldr w12,[sp,#24] 17792a58b312SMartin Matuska and w13,w13,w14 17802a58b312SMartin Matuska ror w15,w15,#2 17812a58b312SMartin Matuska add w9,w9,w5 17822a58b312SMartin Matuska eor w13,w13,w7 17832a58b312SMartin Matuska add w4,w4,w12 17842a58b312SMartin Matuska add w5,w5,w15 17852a58b312SMartin Matuska and w12,w10,w9 17862a58b312SMartin Matuska bic w15,w3,w9 17872a58b312SMartin Matuska eor w11,w9,w9,ror#5 17882a58b312SMartin Matuska add w5,w5,w13 17892a58b312SMartin Matuska orr w12,w12,w15 17902a58b312SMartin Matuska eor w11,w11,w9,ror#19 17912a58b312SMartin Matuska eor w15,w5,w5,ror#11 17922a58b312SMartin Matuska add w4,w4,w12 17932a58b312SMartin Matuska ror w11,w11,#6 17942a58b312SMartin Matuska eor w13,w5,w6 17952a58b312SMartin Matuska eor w15,w15,w5,ror#20 17962a58b312SMartin Matuska add w4,w4,w11 17972a58b312SMartin Matuska ldr w12,[sp,#28] 17982a58b312SMartin Matuska and w14,w14,w13 17992a58b312SMartin Matuska ror w15,w15,#2 18002a58b312SMartin Matuska add w8,w8,w4 18012a58b312SMartin Matuska eor w14,w14,w6 18022a58b312SMartin Matuska add w3,w3,w12 18032a58b312SMartin Matuska add w4,w4,w15 18042a58b312SMartin Matuska and w12,w9,w8 18052a58b312SMartin Matuska bic w15,w10,w8 18062a58b312SMartin Matuska eor w11,w8,w8,ror#5 18072a58b312SMartin Matuska add w4,w4,w14 18082a58b312SMartin Matuska orr w12,w12,w15 18092a58b312SMartin Matuska eor w11,w11,w8,ror#19 18102a58b312SMartin Matuska eor w15,w4,w4,ror#11 18112a58b312SMartin Matuska add w3,w3,w12 18122a58b312SMartin Matuska ror w11,w11,#6 18132a58b312SMartin Matuska eor w14,w4,w5 18142a58b312SMartin Matuska eor w15,w15,w4,ror#20 18152a58b312SMartin Matuska add w3,w3,w11 18162a58b312SMartin Matuska ldr w12,[sp,#32] 18172a58b312SMartin Matuska and w13,w13,w14 18182a58b312SMartin Matuska ror w15,w15,#2 18192a58b312SMartin Matuska add w7,w7,w3 18202a58b312SMartin Matuska eor w13,w13,w5 18212a58b312SMartin Matuska st1 {v4.4s},[x17], #16 18222a58b312SMartin Matuska add w10,w10,w12 18232a58b312SMartin Matuska add w3,w3,w15 18242a58b312SMartin Matuska and w12,w8,w7 18252a58b312SMartin Matuska ld1 {v2.16b},[x1],#16 18262a58b312SMartin Matuska bic w15,w9,w7 18272a58b312SMartin Matuska eor w11,w7,w7,ror#5 18282a58b312SMartin Matuska ld1 {v4.4s},[x16],#16 18292a58b312SMartin Matuska add w3,w3,w13 18302a58b312SMartin Matuska orr w12,w12,w15 18312a58b312SMartin Matuska eor w11,w11,w7,ror#19 18322a58b312SMartin Matuska eor w15,w3,w3,ror#11 18332a58b312SMartin Matuska rev32 v2.16b,v2.16b 18342a58b312SMartin Matuska add w10,w10,w12 18352a58b312SMartin Matuska ror w11,w11,#6 18362a58b312SMartin Matuska eor w13,w3,w4 18372a58b312SMartin Matuska eor w15,w15,w3,ror#20 18382a58b312SMartin Matuska add v4.4s,v4.4s,v2.4s 18392a58b312SMartin Matuska add w10,w10,w11 18402a58b312SMartin Matuska ldr w12,[sp,#36] 18412a58b312SMartin Matuska and w14,w14,w13 18422a58b312SMartin Matuska ror w15,w15,#2 18432a58b312SMartin Matuska add w6,w6,w10 18442a58b312SMartin Matuska eor w14,w14,w4 18452a58b312SMartin Matuska add w9,w9,w12 18462a58b312SMartin Matuska add w10,w10,w15 18472a58b312SMartin Matuska and w12,w7,w6 18482a58b312SMartin Matuska bic w15,w8,w6 18492a58b312SMartin Matuska eor w11,w6,w6,ror#5 18502a58b312SMartin Matuska add w10,w10,w14 18512a58b312SMartin Matuska orr w12,w12,w15 18522a58b312SMartin Matuska eor w11,w11,w6,ror#19 18532a58b312SMartin Matuska eor w15,w10,w10,ror#11 18542a58b312SMartin Matuska add w9,w9,w12 18552a58b312SMartin Matuska ror w11,w11,#6 18562a58b312SMartin Matuska eor w14,w10,w3 18572a58b312SMartin Matuska eor w15,w15,w10,ror#20 18582a58b312SMartin Matuska add w9,w9,w11 18592a58b312SMartin Matuska ldr w12,[sp,#40] 18602a58b312SMartin Matuska and w13,w13,w14 18612a58b312SMartin Matuska ror w15,w15,#2 18622a58b312SMartin Matuska add w5,w5,w9 18632a58b312SMartin Matuska eor w13,w13,w3 18642a58b312SMartin Matuska add w8,w8,w12 18652a58b312SMartin Matuska add w9,w9,w15 18662a58b312SMartin Matuska and w12,w6,w5 18672a58b312SMartin Matuska bic w15,w7,w5 18682a58b312SMartin Matuska eor w11,w5,w5,ror#5 18692a58b312SMartin Matuska add w9,w9,w13 18702a58b312SMartin Matuska orr w12,w12,w15 18712a58b312SMartin Matuska eor w11,w11,w5,ror#19 18722a58b312SMartin Matuska eor w15,w9,w9,ror#11 18732a58b312SMartin Matuska add w8,w8,w12 18742a58b312SMartin Matuska ror w11,w11,#6 18752a58b312SMartin Matuska eor w13,w9,w10 18762a58b312SMartin Matuska eor w15,w15,w9,ror#20 18772a58b312SMartin Matuska add w8,w8,w11 18782a58b312SMartin Matuska ldr w12,[sp,#44] 18792a58b312SMartin Matuska and w14,w14,w13 18802a58b312SMartin Matuska ror w15,w15,#2 18812a58b312SMartin Matuska add w4,w4,w8 18822a58b312SMartin Matuska eor w14,w14,w10 18832a58b312SMartin Matuska add w7,w7,w12 18842a58b312SMartin Matuska add w8,w8,w15 18852a58b312SMartin Matuska and w12,w5,w4 18862a58b312SMartin Matuska bic w15,w6,w4 18872a58b312SMartin Matuska eor w11,w4,w4,ror#5 18882a58b312SMartin Matuska add w8,w8,w14 18892a58b312SMartin Matuska orr w12,w12,w15 18902a58b312SMartin Matuska eor w11,w11,w4,ror#19 18912a58b312SMartin Matuska eor w15,w8,w8,ror#11 18922a58b312SMartin Matuska add w7,w7,w12 18932a58b312SMartin Matuska ror w11,w11,#6 18942a58b312SMartin Matuska eor w14,w8,w9 18952a58b312SMartin Matuska eor w15,w15,w8,ror#20 18962a58b312SMartin Matuska add w7,w7,w11 18972a58b312SMartin Matuska ldr w12,[sp,#48] 18982a58b312SMartin Matuska and w13,w13,w14 18992a58b312SMartin Matuska ror w15,w15,#2 19002a58b312SMartin Matuska add w3,w3,w7 19012a58b312SMartin Matuska eor w13,w13,w9 19022a58b312SMartin Matuska st1 {v4.4s},[x17], #16 19032a58b312SMartin Matuska add w6,w6,w12 19042a58b312SMartin Matuska add w7,w7,w15 19052a58b312SMartin Matuska and w12,w4,w3 19062a58b312SMartin Matuska ld1 {v3.16b},[x1],#16 19072a58b312SMartin Matuska bic w15,w5,w3 19082a58b312SMartin Matuska eor w11,w3,w3,ror#5 19092a58b312SMartin Matuska ld1 {v4.4s},[x16],#16 19102a58b312SMartin Matuska add w7,w7,w13 19112a58b312SMartin Matuska orr w12,w12,w15 19122a58b312SMartin Matuska eor w11,w11,w3,ror#19 19132a58b312SMartin Matuska eor w15,w7,w7,ror#11 19142a58b312SMartin Matuska rev32 v3.16b,v3.16b 19152a58b312SMartin Matuska add w6,w6,w12 19162a58b312SMartin Matuska ror w11,w11,#6 19172a58b312SMartin Matuska eor w13,w7,w8 19182a58b312SMartin Matuska eor w15,w15,w7,ror#20 19192a58b312SMartin Matuska add v4.4s,v4.4s,v3.4s 19202a58b312SMartin Matuska add w6,w6,w11 19212a58b312SMartin Matuska ldr w12,[sp,#52] 19222a58b312SMartin Matuska and w14,w14,w13 19232a58b312SMartin Matuska ror w15,w15,#2 19242a58b312SMartin Matuska add w10,w10,w6 19252a58b312SMartin Matuska eor w14,w14,w8 19262a58b312SMartin Matuska add w5,w5,w12 19272a58b312SMartin Matuska add w6,w6,w15 19282a58b312SMartin Matuska and w12,w3,w10 19292a58b312SMartin Matuska bic w15,w4,w10 19302a58b312SMartin Matuska eor w11,w10,w10,ror#5 19312a58b312SMartin Matuska add w6,w6,w14 19322a58b312SMartin Matuska orr w12,w12,w15 19332a58b312SMartin Matuska eor w11,w11,w10,ror#19 19342a58b312SMartin Matuska eor w15,w6,w6,ror#11 19352a58b312SMartin Matuska add w5,w5,w12 19362a58b312SMartin Matuska ror w11,w11,#6 19372a58b312SMartin Matuska eor w14,w6,w7 19382a58b312SMartin Matuska eor w15,w15,w6,ror#20 19392a58b312SMartin Matuska add w5,w5,w11 19402a58b312SMartin Matuska ldr w12,[sp,#56] 19412a58b312SMartin Matuska and w13,w13,w14 19422a58b312SMartin Matuska ror w15,w15,#2 19432a58b312SMartin Matuska add w9,w9,w5 19442a58b312SMartin Matuska eor w13,w13,w7 19452a58b312SMartin Matuska add w4,w4,w12 19462a58b312SMartin Matuska add w5,w5,w15 19472a58b312SMartin Matuska and w12,w10,w9 19482a58b312SMartin Matuska bic w15,w3,w9 19492a58b312SMartin Matuska eor w11,w9,w9,ror#5 19502a58b312SMartin Matuska add w5,w5,w13 19512a58b312SMartin Matuska orr w12,w12,w15 19522a58b312SMartin Matuska eor w11,w11,w9,ror#19 19532a58b312SMartin Matuska eor w15,w5,w5,ror#11 19542a58b312SMartin Matuska add w4,w4,w12 19552a58b312SMartin Matuska ror w11,w11,#6 19562a58b312SMartin Matuska eor w13,w5,w6 19572a58b312SMartin Matuska eor w15,w15,w5,ror#20 19582a58b312SMartin Matuska add w4,w4,w11 19592a58b312SMartin Matuska ldr w12,[sp,#60] 19602a58b312SMartin Matuska and w14,w14,w13 19612a58b312SMartin Matuska ror w15,w15,#2 19622a58b312SMartin Matuska add w8,w8,w4 19632a58b312SMartin Matuska eor w14,w14,w6 19642a58b312SMartin Matuska add w3,w3,w12 19652a58b312SMartin Matuska add w4,w4,w15 19662a58b312SMartin Matuska and w12,w9,w8 19672a58b312SMartin Matuska bic w15,w10,w8 19682a58b312SMartin Matuska eor w11,w8,w8,ror#5 19692a58b312SMartin Matuska add w4,w4,w14 19702a58b312SMartin Matuska orr w12,w12,w15 19712a58b312SMartin Matuska eor w11,w11,w8,ror#19 19722a58b312SMartin Matuska eor w15,w4,w4,ror#11 19732a58b312SMartin Matuska add w3,w3,w12 19742a58b312SMartin Matuska ror w11,w11,#6 19752a58b312SMartin Matuska eor w14,w4,w5 19762a58b312SMartin Matuska eor w15,w15,w4,ror#20 19772a58b312SMartin Matuska add w3,w3,w11 19782a58b312SMartin Matuska and w13,w13,w14 19792a58b312SMartin Matuska ror w15,w15,#2 19802a58b312SMartin Matuska add w7,w7,w3 19812a58b312SMartin Matuska eor w13,w13,w5 19822a58b312SMartin Matuska st1 {v4.4s},[x17], #16 19832a58b312SMartin Matuska add w3,w3,w15 // h+=Sigma0(a) from the past 19842a58b312SMartin Matuska ldp w11,w12,[x0,#0] 19852a58b312SMartin Matuska add w3,w3,w13 // h+=Maj(a,b,c) from the past 19862a58b312SMartin Matuska ldp w13,w14,[x0,#8] 19872a58b312SMartin Matuska add w3,w3,w11 // accumulate 19882a58b312SMartin Matuska add w4,w4,w12 19892a58b312SMartin Matuska ldp w11,w12,[x0,#16] 19902a58b312SMartin Matuska add w5,w5,w13 19912a58b312SMartin Matuska add w6,w6,w14 19922a58b312SMartin Matuska ldp w13,w14,[x0,#24] 19932a58b312SMartin Matuska add w7,w7,w11 19942a58b312SMartin Matuska add w8,w8,w12 19952a58b312SMartin Matuska ldr w12,[sp,#0] 19962a58b312SMartin Matuska stp w3,w4,[x0,#0] 19972a58b312SMartin Matuska add w9,w9,w13 19982a58b312SMartin Matuska mov w13,wzr 19992a58b312SMartin Matuska stp w5,w6,[x0,#8] 20002a58b312SMartin Matuska add w10,w10,w14 20012a58b312SMartin Matuska stp w7,w8,[x0,#16] 20022a58b312SMartin Matuska eor w14,w4,w5 20032a58b312SMartin Matuska stp w9,w10,[x0,#24] 20042a58b312SMartin Matuska mov w15,wzr 20052a58b312SMartin Matuska mov x17,sp 20062a58b312SMartin Matuska b.ne .L_00_48 20072a58b312SMartin Matuska 20082a58b312SMartin Matuska ldr x29,[x29] 20092a58b312SMartin Matuska add sp,sp,#16*4+16 20102a58b312SMartin Matuska ret 20112a58b312SMartin Matuska.size zfs_sha256_block_neon,.-zfs_sha256_block_neon 20122a58b312SMartin Matuska 20132a58b312SMartin Matuska#endif 2014