1 1.3 martin #include "arm_asm.h" 2 1.4 christos // Copyright 2014-2020 The OpenSSL Project Authors. All Rights Reserved. 3 1.2 christos // 4 1.6 christos // Licensed under the Apache License 2.0 (the "License"). You may not use 5 1.2 christos // this file except in compliance with the License. You can obtain a copy 6 1.2 christos // in the file LICENSE in the source distribution or at 7 1.2 christos // https://www.openssl.org/source/license.html 8 1.2 christos 9 1.2 christos // ==================================================================== 10 1.2 christos // Written by Andy Polyakov <appro (at) openssl.org> for the OpenSSL 11 1.2 christos // project. The module is, however, dual licensed under OpenSSL and 12 1.2 christos // CRYPTOGAMS licenses depending on where you obtain it. For further 13 1.2 christos // details see http://www.openssl.org/~appro/cryptogams/. 14 1.2 christos // 15 1.2 christos // Permission to use under GPLv2 terms is granted. 16 1.2 christos // ==================================================================== 17 1.2 christos // 18 1.2 christos // SHA256/512 for ARMv8. 19 1.2 christos // 20 1.2 christos // Performance in cycles per processed byte and improvement coefficient 21 1.2 christos // over code generated with "default" compiler: 22 1.2 christos // 23 1.2 christos // SHA256-hw SHA256(*) SHA512 24 1.2 christos // Apple A7 1.97 10.5 (+33%) 6.73 (-1%(**)) 25 1.2 christos // Cortex-A53 2.38 15.5 (+115%) 10.0 (+150%(***)) 26 1.2 christos // Cortex-A57 2.31 11.6 (+86%) 7.51 (+260%(***)) 27 1.2 christos // Denver 2.01 10.5 (+26%) 6.70 (+8%) 28 1.2 christos // X-Gene 20.0 (+100%) 12.8 (+300%(***)) 29 1.2 christos // Mongoose 2.36 13.0 (+50%) 8.36 (+33%) 30 1.2 christos // Kryo 1.92 17.4 (+30%) 11.2 (+8%) 31 1.6 christos // ThunderX2 2.54 13.2 (+40%) 8.40 (+18%) 32 1.2 christos // 33 1.2 christos // (*) Software SHA256 results are of lesser relevance, presented 34 1.2 christos // mostly for informational purposes. 35 1.2 christos // (**) The result is a trade-off: it's possible to improve it by 36 1.2 christos // 10% (or by 1 cycle per round), but at the cost of 20% loss 37 1.2 christos // on Cortex-A53 (or by 4 cycles per round). 38 1.2 christos // (***) Super-impressive coefficients over gcc-generated code are 39 1.2 christos // indication of some compiler "pathology", most notably code 40 1.2 christos // generated with -mgeneral-regs-only is significantly faster 41 1.2 christos // and the gap is only 40-90%. 42 1.2 christos // 43 1.2 christos // October 2016. 44 1.2 christos // 45 1.2 christos // Originally it was reckoned that it makes no sense to implement NEON 46 1.2 christos // version of SHA256 for 64-bit processors. This is because performance 47 1.2 christos // improvement on most wide-spread Cortex-A5x processors was observed 48 1.2 christos // to be marginal, same on Cortex-A53 and ~10% on A57. But then it was 49 1.2 christos // observed that 32-bit NEON SHA256 performs significantly better than 50 1.2 christos // 64-bit scalar version on *some* of the more recent processors. As 51 1.2 christos // result 64-bit NEON version of SHA256 was added to provide best 52 1.2 christos // all-round performance. For example it executes ~30% faster on X-Gene 53 1.2 christos // and Mongoose. [For reference, NEON version of SHA512 is bound to 54 1.2 christos // deliver much less improvement, likely *negative* on Cortex-A5x. 55 1.2 christos // Which is why NEON support is limited to SHA256.] 56 1.2 christos 57 1.6 christos // $output is the last argument if it looks like a file (it has an extension) 58 1.6 christos // $flavour is the first argument if it doesn't look like a file 59 1.2 christos #ifndef __KERNEL__ 60 1.2 christos # include "arm_arch.h" 61 1.6 christos 62 1.6 christos .hidden OPENSSL_armcap_P 63 1.2 christos #endif 64 1.1 christos 65 1.1 christos .text 66 1.1 christos 67 1.1 christos .globl sha256_block_data_order 68 1.1 christos .type sha256_block_data_order,%function 69 1.1 christos .align 6 70 1.1 christos sha256_block_data_order: 71 1.2 christos #ifndef __KERNEL__ 72 1.6 christos adrp x16,OPENSSL_armcap_P 73 1.6 christos ldr w16,[x16,#:lo12:OPENSSL_armcap_P] 74 1.1 christos tst w16,#ARMV8_SHA256 75 1.1 christos b.ne .Lv8_entry 76 1.2 christos tst w16,#ARMV7_NEON 77 1.2 christos b.ne .Lneon_entry 78 1.2 christos #endif 79 1.4 christos .inst 0xd503233f // paciasp 80 1.1 christos stp x29,x30,[sp,#-128]! 81 1.1 christos add x29,sp,#0 82 1.1 christos 83 1.1 christos stp x19,x20,[sp,#16] 84 1.1 christos stp x21,x22,[sp,#32] 85 1.1 christos stp x23,x24,[sp,#48] 86 1.1 christos stp x25,x26,[sp,#64] 87 1.1 christos stp x27,x28,[sp,#80] 88 1.1 christos sub sp,sp,#4*4 89 1.1 christos 90 1.1 christos ldp w20,w21,[x0] // load context 91 1.1 christos ldp w22,w23,[x0,#2*4] 92 1.1 christos ldp w24,w25,[x0,#4*4] 93 1.1 christos add x2,x1,x2,lsl#6 // end of input 94 1.1 christos ldp w26,w27,[x0,#6*4] 95 1.1 christos adr x30,.LK256 96 1.1 christos stp x0,x2,[x29,#96] 97 1.1 christos 98 1.1 christos .Loop: 99 1.1 christos ldp w3,w4,[x1],#2*4 100 1.1 christos ldr w19,[x30],#4 // *K++ 101 1.1 christos eor w28,w21,w22 // magic seed 102 1.1 christos str x1,[x29,#112] 103 1.2 christos #ifndef __AARCH64EB__ 104 1.1 christos rev w3,w3 // 0 105 1.1 christos #endif 106 1.1 christos ror w16,w24,#6 107 1.1 christos add w27,w27,w19 // h+=K[i] 108 1.1 christos eor w6,w24,w24,ror#14 109 1.1 christos and w17,w25,w24 110 1.1 christos bic w19,w26,w24 111 1.1 christos add w27,w27,w3 // h+=X[i] 112 1.1 christos orr w17,w17,w19 // Ch(e,f,g) 113 1.1 christos eor w19,w20,w21 // a^b, b^c in next round 114 1.1 christos eor w16,w16,w6,ror#11 // Sigma1(e) 115 1.1 christos ror w6,w20,#2 116 1.1 christos add w27,w27,w17 // h+=Ch(e,f,g) 117 1.1 christos eor w17,w20,w20,ror#9 118 1.1 christos add w27,w27,w16 // h+=Sigma1(e) 119 1.1 christos and w28,w28,w19 // (b^c)&=(a^b) 120 1.1 christos add w23,w23,w27 // d+=h 121 1.1 christos eor w28,w28,w21 // Maj(a,b,c) 122 1.1 christos eor w17,w6,w17,ror#13 // Sigma0(a) 123 1.1 christos add w27,w27,w28 // h+=Maj(a,b,c) 124 1.1 christos ldr w28,[x30],#4 // *K++, w19 in next round 125 1.1 christos //add w27,w27,w17 // h+=Sigma0(a) 126 1.2 christos #ifndef __AARCH64EB__ 127 1.1 christos rev w4,w4 // 1 128 1.1 christos #endif 129 1.1 christos ldp w5,w6,[x1],#2*4 130 1.1 christos add w27,w27,w17 // h+=Sigma0(a) 131 1.1 christos ror w16,w23,#6 132 1.1 christos add w26,w26,w28 // h+=K[i] 133 1.1 christos eor w7,w23,w23,ror#14 134 1.1 christos and w17,w24,w23 135 1.1 christos bic w28,w25,w23 136 1.1 christos add w26,w26,w4 // h+=X[i] 137 1.1 christos orr w17,w17,w28 // Ch(e,f,g) 138 1.1 christos eor w28,w27,w20 // a^b, b^c in next round 139 1.1 christos eor w16,w16,w7,ror#11 // Sigma1(e) 140 1.1 christos ror w7,w27,#2 141 1.1 christos add w26,w26,w17 // h+=Ch(e,f,g) 142 1.1 christos eor w17,w27,w27,ror#9 143 1.1 christos add w26,w26,w16 // h+=Sigma1(e) 144 1.1 christos and w19,w19,w28 // (b^c)&=(a^b) 145 1.1 christos add w22,w22,w26 // d+=h 146 1.1 christos eor w19,w19,w20 // Maj(a,b,c) 147 1.1 christos eor w17,w7,w17,ror#13 // Sigma0(a) 148 1.1 christos add w26,w26,w19 // h+=Maj(a,b,c) 149 1.1 christos ldr w19,[x30],#4 // *K++, w28 in next round 150 1.1 christos //add w26,w26,w17 // h+=Sigma0(a) 151 1.2 christos #ifndef __AARCH64EB__ 152 1.1 christos rev w5,w5 // 2 153 1.1 christos #endif 154 1.1 christos add w26,w26,w17 // h+=Sigma0(a) 155 1.1 christos ror w16,w22,#6 156 1.1 christos add w25,w25,w19 // h+=K[i] 157 1.1 christos eor w8,w22,w22,ror#14 158 1.1 christos and w17,w23,w22 159 1.1 christos bic w19,w24,w22 160 1.1 christos add w25,w25,w5 // h+=X[i] 161 1.1 christos orr w17,w17,w19 // Ch(e,f,g) 162 1.1 christos eor w19,w26,w27 // a^b, b^c in next round 163 1.1 christos eor w16,w16,w8,ror#11 // Sigma1(e) 164 1.1 christos ror w8,w26,#2 165 1.1 christos add w25,w25,w17 // h+=Ch(e,f,g) 166 1.1 christos eor w17,w26,w26,ror#9 167 1.1 christos add w25,w25,w16 // h+=Sigma1(e) 168 1.1 christos and w28,w28,w19 // (b^c)&=(a^b) 169 1.1 christos add w21,w21,w25 // d+=h 170 1.1 christos eor w28,w28,w27 // Maj(a,b,c) 171 1.1 christos eor w17,w8,w17,ror#13 // Sigma0(a) 172 1.1 christos add w25,w25,w28 // h+=Maj(a,b,c) 173 1.1 christos ldr w28,[x30],#4 // *K++, w19 in next round 174 1.1 christos //add w25,w25,w17 // h+=Sigma0(a) 175 1.2 christos #ifndef __AARCH64EB__ 176 1.1 christos rev w6,w6 // 3 177 1.1 christos #endif 178 1.1 christos ldp w7,w8,[x1],#2*4 179 1.1 christos add w25,w25,w17 // h+=Sigma0(a) 180 1.1 christos ror w16,w21,#6 181 1.1 christos add w24,w24,w28 // h+=K[i] 182 1.1 christos eor w9,w21,w21,ror#14 183 1.1 christos and w17,w22,w21 184 1.1 christos bic w28,w23,w21 185 1.1 christos add w24,w24,w6 // h+=X[i] 186 1.1 christos orr w17,w17,w28 // Ch(e,f,g) 187 1.1 christos eor w28,w25,w26 // a^b, b^c in next round 188 1.1 christos eor w16,w16,w9,ror#11 // Sigma1(e) 189 1.1 christos ror w9,w25,#2 190 1.1 christos add w24,w24,w17 // h+=Ch(e,f,g) 191 1.1 christos eor w17,w25,w25,ror#9 192 1.1 christos add w24,w24,w16 // h+=Sigma1(e) 193 1.1 christos and w19,w19,w28 // (b^c)&=(a^b) 194 1.1 christos add w20,w20,w24 // d+=h 195 1.1 christos eor w19,w19,w26 // Maj(a,b,c) 196 1.1 christos eor w17,w9,w17,ror#13 // Sigma0(a) 197 1.1 christos add w24,w24,w19 // h+=Maj(a,b,c) 198 1.1 christos ldr w19,[x30],#4 // *K++, w28 in next round 199 1.1 christos //add w24,w24,w17 // h+=Sigma0(a) 200 1.2 christos #ifndef __AARCH64EB__ 201 1.1 christos rev w7,w7 // 4 202 1.1 christos #endif 203 1.1 christos add w24,w24,w17 // h+=Sigma0(a) 204 1.1 christos ror w16,w20,#6 205 1.1 christos add w23,w23,w19 // h+=K[i] 206 1.1 christos eor w10,w20,w20,ror#14 207 1.1 christos and w17,w21,w20 208 1.1 christos bic w19,w22,w20 209 1.1 christos add w23,w23,w7 // h+=X[i] 210 1.1 christos orr w17,w17,w19 // Ch(e,f,g) 211 1.1 christos eor w19,w24,w25 // a^b, b^c in next round 212 1.1 christos eor w16,w16,w10,ror#11 // Sigma1(e) 213 1.1 christos ror w10,w24,#2 214 1.1 christos add w23,w23,w17 // h+=Ch(e,f,g) 215 1.1 christos eor w17,w24,w24,ror#9 216 1.1 christos add w23,w23,w16 // h+=Sigma1(e) 217 1.1 christos and w28,w28,w19 // (b^c)&=(a^b) 218 1.1 christos add w27,w27,w23 // d+=h 219 1.1 christos eor w28,w28,w25 // Maj(a,b,c) 220 1.1 christos eor w17,w10,w17,ror#13 // Sigma0(a) 221 1.1 christos add w23,w23,w28 // h+=Maj(a,b,c) 222 1.1 christos ldr w28,[x30],#4 // *K++, w19 in next round 223 1.1 christos //add w23,w23,w17 // h+=Sigma0(a) 224 1.2 christos #ifndef __AARCH64EB__ 225 1.1 christos rev w8,w8 // 5 226 1.1 christos #endif 227 1.1 christos ldp w9,w10,[x1],#2*4 228 1.1 christos add w23,w23,w17 // h+=Sigma0(a) 229 1.1 christos ror w16,w27,#6 230 1.1 christos add w22,w22,w28 // h+=K[i] 231 1.1 christos eor w11,w27,w27,ror#14 232 1.1 christos and w17,w20,w27 233 1.1 christos bic w28,w21,w27 234 1.1 christos add w22,w22,w8 // h+=X[i] 235 1.1 christos orr w17,w17,w28 // Ch(e,f,g) 236 1.1 christos eor w28,w23,w24 // a^b, b^c in next round 237 1.1 christos eor w16,w16,w11,ror#11 // Sigma1(e) 238 1.1 christos ror w11,w23,#2 239 1.1 christos add w22,w22,w17 // h+=Ch(e,f,g) 240 1.1 christos eor w17,w23,w23,ror#9 241 1.1 christos add w22,w22,w16 // h+=Sigma1(e) 242 1.1 christos and w19,w19,w28 // (b^c)&=(a^b) 243 1.1 christos add w26,w26,w22 // d+=h 244 1.1 christos eor w19,w19,w24 // Maj(a,b,c) 245 1.1 christos eor w17,w11,w17,ror#13 // Sigma0(a) 246 1.1 christos add w22,w22,w19 // h+=Maj(a,b,c) 247 1.1 christos ldr w19,[x30],#4 // *K++, w28 in next round 248 1.1 christos //add w22,w22,w17 // h+=Sigma0(a) 249 1.2 christos #ifndef __AARCH64EB__ 250 1.1 christos rev w9,w9 // 6 251 1.1 christos #endif 252 1.1 christos add w22,w22,w17 // h+=Sigma0(a) 253 1.1 christos ror w16,w26,#6 254 1.1 christos add w21,w21,w19 // h+=K[i] 255 1.1 christos eor w12,w26,w26,ror#14 256 1.1 christos and w17,w27,w26 257 1.1 christos bic w19,w20,w26 258 1.1 christos add w21,w21,w9 // h+=X[i] 259 1.1 christos orr w17,w17,w19 // Ch(e,f,g) 260 1.1 christos eor w19,w22,w23 // a^b, b^c in next round 261 1.1 christos eor w16,w16,w12,ror#11 // Sigma1(e) 262 1.1 christos ror w12,w22,#2 263 1.1 christos add w21,w21,w17 // h+=Ch(e,f,g) 264 1.1 christos eor w17,w22,w22,ror#9 265 1.1 christos add w21,w21,w16 // h+=Sigma1(e) 266 1.1 christos and w28,w28,w19 // (b^c)&=(a^b) 267 1.1 christos add w25,w25,w21 // d+=h 268 1.1 christos eor w28,w28,w23 // Maj(a,b,c) 269 1.1 christos eor w17,w12,w17,ror#13 // Sigma0(a) 270 1.1 christos add w21,w21,w28 // h+=Maj(a,b,c) 271 1.1 christos ldr w28,[x30],#4 // *K++, w19 in next round 272 1.1 christos //add w21,w21,w17 // h+=Sigma0(a) 273 1.2 christos #ifndef __AARCH64EB__ 274 1.1 christos rev w10,w10 // 7 275 1.1 christos #endif 276 1.1 christos ldp w11,w12,[x1],#2*4 277 1.1 christos add w21,w21,w17 // h+=Sigma0(a) 278 1.1 christos ror w16,w25,#6 279 1.1 christos add w20,w20,w28 // h+=K[i] 280 1.1 christos eor w13,w25,w25,ror#14 281 1.1 christos and w17,w26,w25 282 1.1 christos bic w28,w27,w25 283 1.1 christos add w20,w20,w10 // h+=X[i] 284 1.1 christos orr w17,w17,w28 // Ch(e,f,g) 285 1.1 christos eor w28,w21,w22 // a^b, b^c in next round 286 1.1 christos eor w16,w16,w13,ror#11 // Sigma1(e) 287 1.1 christos ror w13,w21,#2 288 1.1 christos add w20,w20,w17 // h+=Ch(e,f,g) 289 1.1 christos eor w17,w21,w21,ror#9 290 1.1 christos add w20,w20,w16 // h+=Sigma1(e) 291 1.1 christos and w19,w19,w28 // (b^c)&=(a^b) 292 1.1 christos add w24,w24,w20 // d+=h 293 1.1 christos eor w19,w19,w22 // Maj(a,b,c) 294 1.1 christos eor w17,w13,w17,ror#13 // Sigma0(a) 295 1.1 christos add w20,w20,w19 // h+=Maj(a,b,c) 296 1.1 christos ldr w19,[x30],#4 // *K++, w28 in next round 297 1.1 christos //add w20,w20,w17 // h+=Sigma0(a) 298 1.2 christos #ifndef __AARCH64EB__ 299 1.1 christos rev w11,w11 // 8 300 1.1 christos #endif 301 1.1 christos add w20,w20,w17 // h+=Sigma0(a) 302 1.1 christos ror w16,w24,#6 303 1.1 christos add w27,w27,w19 // h+=K[i] 304 1.1 christos eor w14,w24,w24,ror#14 305 1.1 christos and w17,w25,w24 306 1.1 christos bic w19,w26,w24 307 1.1 christos add w27,w27,w11 // h+=X[i] 308 1.1 christos orr w17,w17,w19 // Ch(e,f,g) 309 1.1 christos eor w19,w20,w21 // a^b, b^c in next round 310 1.1 christos eor w16,w16,w14,ror#11 // Sigma1(e) 311 1.1 christos ror w14,w20,#2 312 1.1 christos add w27,w27,w17 // h+=Ch(e,f,g) 313 1.1 christos eor w17,w20,w20,ror#9 314 1.1 christos add w27,w27,w16 // h+=Sigma1(e) 315 1.1 christos and w28,w28,w19 // (b^c)&=(a^b) 316 1.1 christos add w23,w23,w27 // d+=h 317 1.1 christos eor w28,w28,w21 // Maj(a,b,c) 318 1.1 christos eor w17,w14,w17,ror#13 // Sigma0(a) 319 1.1 christos add w27,w27,w28 // h+=Maj(a,b,c) 320 1.1 christos ldr w28,[x30],#4 // *K++, w19 in next round 321 1.1 christos //add w27,w27,w17 // h+=Sigma0(a) 322 1.2 christos #ifndef __AARCH64EB__ 323 1.1 christos rev w12,w12 // 9 324 1.1 christos #endif 325 1.1 christos ldp w13,w14,[x1],#2*4 326 1.1 christos add w27,w27,w17 // h+=Sigma0(a) 327 1.1 christos ror w16,w23,#6 328 1.1 christos add w26,w26,w28 // h+=K[i] 329 1.1 christos eor w15,w23,w23,ror#14 330 1.1 christos and w17,w24,w23 331 1.1 christos bic w28,w25,w23 332 1.1 christos add w26,w26,w12 // h+=X[i] 333 1.1 christos orr w17,w17,w28 // Ch(e,f,g) 334 1.1 christos eor w28,w27,w20 // a^b, b^c in next round 335 1.1 christos eor w16,w16,w15,ror#11 // Sigma1(e) 336 1.1 christos ror w15,w27,#2 337 1.1 christos add w26,w26,w17 // h+=Ch(e,f,g) 338 1.1 christos eor w17,w27,w27,ror#9 339 1.1 christos add w26,w26,w16 // h+=Sigma1(e) 340 1.1 christos and w19,w19,w28 // (b^c)&=(a^b) 341 1.1 christos add w22,w22,w26 // d+=h 342 1.1 christos eor w19,w19,w20 // Maj(a,b,c) 343 1.1 christos eor w17,w15,w17,ror#13 // Sigma0(a) 344 1.1 christos add w26,w26,w19 // h+=Maj(a,b,c) 345 1.1 christos ldr w19,[x30],#4 // *K++, w28 in next round 346 1.1 christos //add w26,w26,w17 // h+=Sigma0(a) 347 1.2 christos #ifndef __AARCH64EB__ 348 1.1 christos rev w13,w13 // 10 349 1.1 christos #endif 350 1.1 christos add w26,w26,w17 // h+=Sigma0(a) 351 1.1 christos ror w16,w22,#6 352 1.1 christos add w25,w25,w19 // h+=K[i] 353 1.1 christos eor w0,w22,w22,ror#14 354 1.1 christos and w17,w23,w22 355 1.1 christos bic w19,w24,w22 356 1.1 christos add w25,w25,w13 // h+=X[i] 357 1.1 christos orr w17,w17,w19 // Ch(e,f,g) 358 1.1 christos eor w19,w26,w27 // a^b, b^c in next round 359 1.1 christos eor w16,w16,w0,ror#11 // Sigma1(e) 360 1.1 christos ror w0,w26,#2 361 1.1 christos add w25,w25,w17 // h+=Ch(e,f,g) 362 1.1 christos eor w17,w26,w26,ror#9 363 1.1 christos add w25,w25,w16 // h+=Sigma1(e) 364 1.1 christos and w28,w28,w19 // (b^c)&=(a^b) 365 1.1 christos add w21,w21,w25 // d+=h 366 1.1 christos eor w28,w28,w27 // Maj(a,b,c) 367 1.1 christos eor w17,w0,w17,ror#13 // Sigma0(a) 368 1.1 christos add w25,w25,w28 // h+=Maj(a,b,c) 369 1.1 christos ldr w28,[x30],#4 // *K++, w19 in next round 370 1.1 christos //add w25,w25,w17 // h+=Sigma0(a) 371 1.2 christos #ifndef __AARCH64EB__ 372 1.1 christos rev w14,w14 // 11 373 1.1 christos #endif 374 1.1 christos ldp w15,w0,[x1],#2*4 375 1.1 christos add w25,w25,w17 // h+=Sigma0(a) 376 1.1 christos str w6,[sp,#12] 377 1.1 christos ror w16,w21,#6 378 1.1 christos add w24,w24,w28 // h+=K[i] 379 1.1 christos eor w6,w21,w21,ror#14 380 1.1 christos and w17,w22,w21 381 1.1 christos bic w28,w23,w21 382 1.1 christos add w24,w24,w14 // h+=X[i] 383 1.1 christos orr w17,w17,w28 // Ch(e,f,g) 384 1.1 christos eor w28,w25,w26 // a^b, b^c in next round 385 1.1 christos eor w16,w16,w6,ror#11 // Sigma1(e) 386 1.1 christos ror w6,w25,#2 387 1.1 christos add w24,w24,w17 // h+=Ch(e,f,g) 388 1.1 christos eor w17,w25,w25,ror#9 389 1.1 christos add w24,w24,w16 // h+=Sigma1(e) 390 1.1 christos and w19,w19,w28 // (b^c)&=(a^b) 391 1.1 christos add w20,w20,w24 // d+=h 392 1.1 christos eor w19,w19,w26 // Maj(a,b,c) 393 1.1 christos eor w17,w6,w17,ror#13 // Sigma0(a) 394 1.1 christos add w24,w24,w19 // h+=Maj(a,b,c) 395 1.1 christos ldr w19,[x30],#4 // *K++, w28 in next round 396 1.1 christos //add w24,w24,w17 // h+=Sigma0(a) 397 1.2 christos #ifndef __AARCH64EB__ 398 1.1 christos rev w15,w15 // 12 399 1.1 christos #endif 400 1.1 christos add w24,w24,w17 // h+=Sigma0(a) 401 1.1 christos str w7,[sp,#0] 402 1.1 christos ror w16,w20,#6 403 1.1 christos add w23,w23,w19 // h+=K[i] 404 1.1 christos eor w7,w20,w20,ror#14 405 1.1 christos and w17,w21,w20 406 1.1 christos bic w19,w22,w20 407 1.1 christos add w23,w23,w15 // h+=X[i] 408 1.1 christos orr w17,w17,w19 // Ch(e,f,g) 409 1.1 christos eor w19,w24,w25 // a^b, b^c in next round 410 1.1 christos eor w16,w16,w7,ror#11 // Sigma1(e) 411 1.1 christos ror w7,w24,#2 412 1.1 christos add w23,w23,w17 // h+=Ch(e,f,g) 413 1.1 christos eor w17,w24,w24,ror#9 414 1.1 christos add w23,w23,w16 // h+=Sigma1(e) 415 1.1 christos and w28,w28,w19 // (b^c)&=(a^b) 416 1.1 christos add w27,w27,w23 // d+=h 417 1.1 christos eor w28,w28,w25 // Maj(a,b,c) 418 1.1 christos eor w17,w7,w17,ror#13 // Sigma0(a) 419 1.1 christos add w23,w23,w28 // h+=Maj(a,b,c) 420 1.1 christos ldr w28,[x30],#4 // *K++, w19 in next round 421 1.1 christos //add w23,w23,w17 // h+=Sigma0(a) 422 1.2 christos #ifndef __AARCH64EB__ 423 1.1 christos rev w0,w0 // 13 424 1.1 christos #endif 425 1.1 christos ldp w1,w2,[x1] 426 1.1 christos add w23,w23,w17 // h+=Sigma0(a) 427 1.1 christos str w8,[sp,#4] 428 1.1 christos ror w16,w27,#6 429 1.1 christos add w22,w22,w28 // h+=K[i] 430 1.1 christos eor w8,w27,w27,ror#14 431 1.1 christos and w17,w20,w27 432 1.1 christos bic w28,w21,w27 433 1.1 christos add w22,w22,w0 // h+=X[i] 434 1.1 christos orr w17,w17,w28 // Ch(e,f,g) 435 1.1 christos eor w28,w23,w24 // a^b, b^c in next round 436 1.1 christos eor w16,w16,w8,ror#11 // Sigma1(e) 437 1.1 christos ror w8,w23,#2 438 1.1 christos add w22,w22,w17 // h+=Ch(e,f,g) 439 1.1 christos eor w17,w23,w23,ror#9 440 1.1 christos add w22,w22,w16 // h+=Sigma1(e) 441 1.1 christos and w19,w19,w28 // (b^c)&=(a^b) 442 1.1 christos add w26,w26,w22 // d+=h 443 1.1 christos eor w19,w19,w24 // Maj(a,b,c) 444 1.1 christos eor w17,w8,w17,ror#13 // Sigma0(a) 445 1.1 christos add w22,w22,w19 // h+=Maj(a,b,c) 446 1.1 christos ldr w19,[x30],#4 // *K++, w28 in next round 447 1.1 christos //add w22,w22,w17 // h+=Sigma0(a) 448 1.2 christos #ifndef __AARCH64EB__ 449 1.1 christos rev w1,w1 // 14 450 1.1 christos #endif 451 1.1 christos ldr w6,[sp,#12] 452 1.1 christos add w22,w22,w17 // h+=Sigma0(a) 453 1.1 christos str w9,[sp,#8] 454 1.1 christos ror w16,w26,#6 455 1.1 christos add w21,w21,w19 // h+=K[i] 456 1.1 christos eor w9,w26,w26,ror#14 457 1.1 christos and w17,w27,w26 458 1.1 christos bic w19,w20,w26 459 1.1 christos add w21,w21,w1 // h+=X[i] 460 1.1 christos orr w17,w17,w19 // Ch(e,f,g) 461 1.1 christos eor w19,w22,w23 // a^b, b^c in next round 462 1.1 christos eor w16,w16,w9,ror#11 // Sigma1(e) 463 1.1 christos ror w9,w22,#2 464 1.1 christos add w21,w21,w17 // h+=Ch(e,f,g) 465 1.1 christos eor w17,w22,w22,ror#9 466 1.1 christos add w21,w21,w16 // h+=Sigma1(e) 467 1.1 christos and w28,w28,w19 // (b^c)&=(a^b) 468 1.1 christos add w25,w25,w21 // d+=h 469 1.1 christos eor w28,w28,w23 // Maj(a,b,c) 470 1.1 christos eor w17,w9,w17,ror#13 // Sigma0(a) 471 1.1 christos add w21,w21,w28 // h+=Maj(a,b,c) 472 1.1 christos ldr w28,[x30],#4 // *K++, w19 in next round 473 1.1 christos //add w21,w21,w17 // h+=Sigma0(a) 474 1.2 christos #ifndef __AARCH64EB__ 475 1.1 christos rev w2,w2 // 15 476 1.1 christos #endif 477 1.1 christos ldr w7,[sp,#0] 478 1.1 christos add w21,w21,w17 // h+=Sigma0(a) 479 1.1 christos str w10,[sp,#12] 480 1.1 christos ror w16,w25,#6 481 1.1 christos add w20,w20,w28 // h+=K[i] 482 1.1 christos ror w9,w4,#7 483 1.1 christos and w17,w26,w25 484 1.1 christos ror w8,w1,#17 485 1.1 christos bic w28,w27,w25 486 1.1 christos ror w10,w21,#2 487 1.1 christos add w20,w20,w2 // h+=X[i] 488 1.1 christos eor w16,w16,w25,ror#11 489 1.1 christos eor w9,w9,w4,ror#18 490 1.1 christos orr w17,w17,w28 // Ch(e,f,g) 491 1.1 christos eor w28,w21,w22 // a^b, b^c in next round 492 1.1 christos eor w16,w16,w25,ror#25 // Sigma1(e) 493 1.1 christos eor w10,w10,w21,ror#13 494 1.1 christos add w20,w20,w17 // h+=Ch(e,f,g) 495 1.1 christos and w19,w19,w28 // (b^c)&=(a^b) 496 1.1 christos eor w8,w8,w1,ror#19 497 1.1 christos eor w9,w9,w4,lsr#3 // sigma0(X[i+1]) 498 1.1 christos add w20,w20,w16 // h+=Sigma1(e) 499 1.1 christos eor w19,w19,w22 // Maj(a,b,c) 500 1.1 christos eor w17,w10,w21,ror#22 // Sigma0(a) 501 1.1 christos eor w8,w8,w1,lsr#10 // sigma1(X[i+14]) 502 1.1 christos add w3,w3,w12 503 1.1 christos add w24,w24,w20 // d+=h 504 1.1 christos add w20,w20,w19 // h+=Maj(a,b,c) 505 1.1 christos ldr w19,[x30],#4 // *K++, w28 in next round 506 1.1 christos add w3,w3,w9 507 1.1 christos add w20,w20,w17 // h+=Sigma0(a) 508 1.1 christos add w3,w3,w8 509 1.1 christos .Loop_16_xx: 510 1.1 christos ldr w8,[sp,#4] 511 1.1 christos str w11,[sp,#0] 512 1.1 christos ror w16,w24,#6 513 1.1 christos add w27,w27,w19 // h+=K[i] 514 1.1 christos ror w10,w5,#7 515 1.1 christos and w17,w25,w24 516 1.1 christos ror w9,w2,#17 517 1.1 christos bic w19,w26,w24 518 1.1 christos ror w11,w20,#2 519 1.1 christos add w27,w27,w3 // h+=X[i] 520 1.1 christos eor w16,w16,w24,ror#11 521 1.1 christos eor w10,w10,w5,ror#18 522 1.1 christos orr w17,w17,w19 // Ch(e,f,g) 523 1.1 christos eor w19,w20,w21 // a^b, b^c in next round 524 1.1 christos eor w16,w16,w24,ror#25 // Sigma1(e) 525 1.1 christos eor w11,w11,w20,ror#13 526 1.1 christos add w27,w27,w17 // h+=Ch(e,f,g) 527 1.1 christos and w28,w28,w19 // (b^c)&=(a^b) 528 1.1 christos eor w9,w9,w2,ror#19 529 1.1 christos eor w10,w10,w5,lsr#3 // sigma0(X[i+1]) 530 1.1 christos add w27,w27,w16 // h+=Sigma1(e) 531 1.1 christos eor w28,w28,w21 // Maj(a,b,c) 532 1.1 christos eor w17,w11,w20,ror#22 // Sigma0(a) 533 1.1 christos eor w9,w9,w2,lsr#10 // sigma1(X[i+14]) 534 1.1 christos add w4,w4,w13 535 1.1 christos add w23,w23,w27 // d+=h 536 1.1 christos add w27,w27,w28 // h+=Maj(a,b,c) 537 1.1 christos ldr w28,[x30],#4 // *K++, w19 in next round 538 1.1 christos add w4,w4,w10 539 1.1 christos add w27,w27,w17 // h+=Sigma0(a) 540 1.1 christos add w4,w4,w9 541 1.1 christos ldr w9,[sp,#8] 542 1.1 christos str w12,[sp,#4] 543 1.1 christos ror w16,w23,#6 544 1.1 christos add w26,w26,w28 // h+=K[i] 545 1.1 christos ror w11,w6,#7 546 1.1 christos and w17,w24,w23 547 1.1 christos ror w10,w3,#17 548 1.1 christos bic w28,w25,w23 549 1.1 christos ror w12,w27,#2 550 1.1 christos add w26,w26,w4 // h+=X[i] 551 1.1 christos eor w16,w16,w23,ror#11 552 1.1 christos eor w11,w11,w6,ror#18 553 1.1 christos orr w17,w17,w28 // Ch(e,f,g) 554 1.1 christos eor w28,w27,w20 // a^b, b^c in next round 555 1.1 christos eor w16,w16,w23,ror#25 // Sigma1(e) 556 1.1 christos eor w12,w12,w27,ror#13 557 1.1 christos add w26,w26,w17 // h+=Ch(e,f,g) 558 1.1 christos and w19,w19,w28 // (b^c)&=(a^b) 559 1.1 christos eor w10,w10,w3,ror#19 560 1.1 christos eor w11,w11,w6,lsr#3 // sigma0(X[i+1]) 561 1.1 christos add w26,w26,w16 // h+=Sigma1(e) 562 1.1 christos eor w19,w19,w20 // Maj(a,b,c) 563 1.1 christos eor w17,w12,w27,ror#22 // Sigma0(a) 564 1.1 christos eor w10,w10,w3,lsr#10 // sigma1(X[i+14]) 565 1.1 christos add w5,w5,w14 566 1.1 christos add w22,w22,w26 // d+=h 567 1.1 christos add w26,w26,w19 // h+=Maj(a,b,c) 568 1.1 christos ldr w19,[x30],#4 // *K++, w28 in next round 569 1.1 christos add w5,w5,w11 570 1.1 christos add w26,w26,w17 // h+=Sigma0(a) 571 1.1 christos add w5,w5,w10 572 1.1 christos ldr w10,[sp,#12] 573 1.1 christos str w13,[sp,#8] 574 1.1 christos ror w16,w22,#6 575 1.1 christos add w25,w25,w19 // h+=K[i] 576 1.1 christos ror w12,w7,#7 577 1.1 christos and w17,w23,w22 578 1.1 christos ror w11,w4,#17 579 1.1 christos bic w19,w24,w22 580 1.1 christos ror w13,w26,#2 581 1.1 christos add w25,w25,w5 // h+=X[i] 582 1.1 christos eor w16,w16,w22,ror#11 583 1.1 christos eor w12,w12,w7,ror#18 584 1.1 christos orr w17,w17,w19 // Ch(e,f,g) 585 1.1 christos eor w19,w26,w27 // a^b, b^c in next round 586 1.1 christos eor w16,w16,w22,ror#25 // Sigma1(e) 587 1.1 christos eor w13,w13,w26,ror#13 588 1.1 christos add w25,w25,w17 // h+=Ch(e,f,g) 589 1.1 christos and w28,w28,w19 // (b^c)&=(a^b) 590 1.1 christos eor w11,w11,w4,ror#19 591 1.1 christos eor w12,w12,w7,lsr#3 // sigma0(X[i+1]) 592 1.1 christos add w25,w25,w16 // h+=Sigma1(e) 593 1.1 christos eor w28,w28,w27 // Maj(a,b,c) 594 1.1 christos eor w17,w13,w26,ror#22 // Sigma0(a) 595 1.1 christos eor w11,w11,w4,lsr#10 // sigma1(X[i+14]) 596 1.1 christos add w6,w6,w15 597 1.1 christos add w21,w21,w25 // d+=h 598 1.1 christos add w25,w25,w28 // h+=Maj(a,b,c) 599 1.1 christos ldr w28,[x30],#4 // *K++, w19 in next round 600 1.1 christos add w6,w6,w12 601 1.1 christos add w25,w25,w17 // h+=Sigma0(a) 602 1.1 christos add w6,w6,w11 603 1.1 christos ldr w11,[sp,#0] 604 1.1 christos str w14,[sp,#12] 605 1.1 christos ror w16,w21,#6 606 1.1 christos add w24,w24,w28 // h+=K[i] 607 1.1 christos ror w13,w8,#7 608 1.1 christos and w17,w22,w21 609 1.1 christos ror w12,w5,#17 610 1.1 christos bic w28,w23,w21 611 1.1 christos ror w14,w25,#2 612 1.1 christos add w24,w24,w6 // h+=X[i] 613 1.1 christos eor w16,w16,w21,ror#11 614 1.1 christos eor w13,w13,w8,ror#18 615 1.1 christos orr w17,w17,w28 // Ch(e,f,g) 616 1.1 christos eor w28,w25,w26 // a^b, b^c in next round 617 1.1 christos eor w16,w16,w21,ror#25 // Sigma1(e) 618 1.1 christos eor w14,w14,w25,ror#13 619 1.1 christos add w24,w24,w17 // h+=Ch(e,f,g) 620 1.1 christos and w19,w19,w28 // (b^c)&=(a^b) 621 1.1 christos eor w12,w12,w5,ror#19 622 1.1 christos eor w13,w13,w8,lsr#3 // sigma0(X[i+1]) 623 1.1 christos add w24,w24,w16 // h+=Sigma1(e) 624 1.1 christos eor w19,w19,w26 // Maj(a,b,c) 625 1.1 christos eor w17,w14,w25,ror#22 // Sigma0(a) 626 1.1 christos eor w12,w12,w5,lsr#10 // sigma1(X[i+14]) 627 1.1 christos add w7,w7,w0 628 1.1 christos add w20,w20,w24 // d+=h 629 1.1 christos add w24,w24,w19 // h+=Maj(a,b,c) 630 1.1 christos ldr w19,[x30],#4 // *K++, w28 in next round 631 1.1 christos add w7,w7,w13 632 1.1 christos add w24,w24,w17 // h+=Sigma0(a) 633 1.1 christos add w7,w7,w12 634 1.1 christos ldr w12,[sp,#4] 635 1.1 christos str w15,[sp,#0] 636 1.1 christos ror w16,w20,#6 637 1.1 christos add w23,w23,w19 // h+=K[i] 638 1.1 christos ror w14,w9,#7 639 1.1 christos and w17,w21,w20 640 1.1 christos ror w13,w6,#17 641 1.1 christos bic w19,w22,w20 642 1.1 christos ror w15,w24,#2 643 1.1 christos add w23,w23,w7 // h+=X[i] 644 1.1 christos eor w16,w16,w20,ror#11 645 1.1 christos eor w14,w14,w9,ror#18 646 1.1 christos orr w17,w17,w19 // Ch(e,f,g) 647 1.1 christos eor w19,w24,w25 // a^b, b^c in next round 648 1.1 christos eor w16,w16,w20,ror#25 // Sigma1(e) 649 1.1 christos eor w15,w15,w24,ror#13 650 1.1 christos add w23,w23,w17 // h+=Ch(e,f,g) 651 1.1 christos and w28,w28,w19 // (b^c)&=(a^b) 652 1.1 christos eor w13,w13,w6,ror#19 653 1.1 christos eor w14,w14,w9,lsr#3 // sigma0(X[i+1]) 654 1.1 christos add w23,w23,w16 // h+=Sigma1(e) 655 1.1 christos eor w28,w28,w25 // Maj(a,b,c) 656 1.1 christos eor w17,w15,w24,ror#22 // Sigma0(a) 657 1.1 christos eor w13,w13,w6,lsr#10 // sigma1(X[i+14]) 658 1.1 christos add w8,w8,w1 659 1.1 christos add w27,w27,w23 // d+=h 660 1.1 christos add w23,w23,w28 // h+=Maj(a,b,c) 661 1.1 christos ldr w28,[x30],#4 // *K++, w19 in next round 662 1.1 christos add w8,w8,w14 663 1.1 christos add w23,w23,w17 // h+=Sigma0(a) 664 1.1 christos add w8,w8,w13 665 1.1 christos ldr w13,[sp,#8] 666 1.1 christos str w0,[sp,#4] 667 1.1 christos ror w16,w27,#6 668 1.1 christos add w22,w22,w28 // h+=K[i] 669 1.1 christos ror w15,w10,#7 670 1.1 christos and w17,w20,w27 671 1.1 christos ror w14,w7,#17 672 1.1 christos bic w28,w21,w27 673 1.1 christos ror w0,w23,#2 674 1.1 christos add w22,w22,w8 // h+=X[i] 675 1.1 christos eor w16,w16,w27,ror#11 676 1.1 christos eor w15,w15,w10,ror#18 677 1.1 christos orr w17,w17,w28 // Ch(e,f,g) 678 1.1 christos eor w28,w23,w24 // a^b, b^c in next round 679 1.1 christos eor w16,w16,w27,ror#25 // Sigma1(e) 680 1.1 christos eor w0,w0,w23,ror#13 681 1.1 christos add w22,w22,w17 // h+=Ch(e,f,g) 682 1.1 christos and w19,w19,w28 // (b^c)&=(a^b) 683 1.1 christos eor w14,w14,w7,ror#19 684 1.1 christos eor w15,w15,w10,lsr#3 // sigma0(X[i+1]) 685 1.1 christos add w22,w22,w16 // h+=Sigma1(e) 686 1.1 christos eor w19,w19,w24 // Maj(a,b,c) 687 1.1 christos eor w17,w0,w23,ror#22 // Sigma0(a) 688 1.1 christos eor w14,w14,w7,lsr#10 // sigma1(X[i+14]) 689 1.1 christos add w9,w9,w2 690 1.1 christos add w26,w26,w22 // d+=h 691 1.1 christos add w22,w22,w19 // h+=Maj(a,b,c) 692 1.1 christos ldr w19,[x30],#4 // *K++, w28 in next round 693 1.1 christos add w9,w9,w15 694 1.1 christos add w22,w22,w17 // h+=Sigma0(a) 695 1.1 christos add w9,w9,w14 696 1.1 christos ldr w14,[sp,#12] 697 1.1 christos str w1,[sp,#8] 698 1.1 christos ror w16,w26,#6 699 1.1 christos add w21,w21,w19 // h+=K[i] 700 1.1 christos ror w0,w11,#7 701 1.1 christos and w17,w27,w26 702 1.1 christos ror w15,w8,#17 703 1.1 christos bic w19,w20,w26 704 1.1 christos ror w1,w22,#2 705 1.1 christos add w21,w21,w9 // h+=X[i] 706 1.1 christos eor w16,w16,w26,ror#11 707 1.1 christos eor w0,w0,w11,ror#18 708 1.1 christos orr w17,w17,w19 // Ch(e,f,g) 709 1.1 christos eor w19,w22,w23 // a^b, b^c in next round 710 1.1 christos eor w16,w16,w26,ror#25 // Sigma1(e) 711 1.1 christos eor w1,w1,w22,ror#13 712 1.1 christos add w21,w21,w17 // h+=Ch(e,f,g) 713 1.1 christos and w28,w28,w19 // (b^c)&=(a^b) 714 1.1 christos eor w15,w15,w8,ror#19 715 1.1 christos eor w0,w0,w11,lsr#3 // sigma0(X[i+1]) 716 1.1 christos add w21,w21,w16 // h+=Sigma1(e) 717 1.1 christos eor w28,w28,w23 // Maj(a,b,c) 718 1.1 christos eor w17,w1,w22,ror#22 // Sigma0(a) 719 1.1 christos eor w15,w15,w8,lsr#10 // sigma1(X[i+14]) 720 1.1 christos add w10,w10,w3 721 1.1 christos add w25,w25,w21 // d+=h 722 1.1 christos add w21,w21,w28 // h+=Maj(a,b,c) 723 1.1 christos ldr w28,[x30],#4 // *K++, w19 in next round 724 1.1 christos add w10,w10,w0 725 1.1 christos add w21,w21,w17 // h+=Sigma0(a) 726 1.1 christos add w10,w10,w15 727 1.1 christos ldr w15,[sp,#0] 728 1.1 christos str w2,[sp,#12] 729 1.1 christos ror w16,w25,#6 730 1.1 christos add w20,w20,w28 // h+=K[i] 731 1.1 christos ror w1,w12,#7 732 1.1 christos and w17,w26,w25 733 1.1 christos ror w0,w9,#17 734 1.1 christos bic w28,w27,w25 735 1.1 christos ror w2,w21,#2 736 1.1 christos add w20,w20,w10 // h+=X[i] 737 1.1 christos eor w16,w16,w25,ror#11 738 1.1 christos eor w1,w1,w12,ror#18 739 1.1 christos orr w17,w17,w28 // Ch(e,f,g) 740 1.1 christos eor w28,w21,w22 // a^b, b^c in next round 741 1.1 christos eor w16,w16,w25,ror#25 // Sigma1(e) 742 1.1 christos eor w2,w2,w21,ror#13 743 1.1 christos add w20,w20,w17 // h+=Ch(e,f,g) 744 1.1 christos and w19,w19,w28 // (b^c)&=(a^b) 745 1.1 christos eor w0,w0,w9,ror#19 746 1.1 christos eor w1,w1,w12,lsr#3 // sigma0(X[i+1]) 747 1.1 christos add w20,w20,w16 // h+=Sigma1(e) 748 1.1 christos eor w19,w19,w22 // Maj(a,b,c) 749 1.1 christos eor w17,w2,w21,ror#22 // Sigma0(a) 750 1.1 christos eor w0,w0,w9,lsr#10 // sigma1(X[i+14]) 751 1.1 christos add w11,w11,w4 752 1.1 christos add w24,w24,w20 // d+=h 753 1.1 christos add w20,w20,w19 // h+=Maj(a,b,c) 754 1.1 christos ldr w19,[x30],#4 // *K++, w28 in next round 755 1.1 christos add w11,w11,w1 756 1.1 christos add w20,w20,w17 // h+=Sigma0(a) 757 1.1 christos add w11,w11,w0 758 1.1 christos ldr w0,[sp,#4] 759 1.1 christos str w3,[sp,#0] 760 1.1 christos ror w16,w24,#6 761 1.1 christos add w27,w27,w19 // h+=K[i] 762 1.1 christos ror w2,w13,#7 763 1.1 christos and w17,w25,w24 764 1.1 christos ror w1,w10,#17 765 1.1 christos bic w19,w26,w24 766 1.1 christos ror w3,w20,#2 767 1.1 christos add w27,w27,w11 // h+=X[i] 768 1.1 christos eor w16,w16,w24,ror#11 769 1.1 christos eor w2,w2,w13,ror#18 770 1.1 christos orr w17,w17,w19 // Ch(e,f,g) 771 1.1 christos eor w19,w20,w21 // a^b, b^c in next round 772 1.1 christos eor w16,w16,w24,ror#25 // Sigma1(e) 773 1.1 christos eor w3,w3,w20,ror#13 774 1.1 christos add w27,w27,w17 // h+=Ch(e,f,g) 775 1.1 christos and w28,w28,w19 // (b^c)&=(a^b) 776 1.1 christos eor w1,w1,w10,ror#19 777 1.1 christos eor w2,w2,w13,lsr#3 // sigma0(X[i+1]) 778 1.1 christos add w27,w27,w16 // h+=Sigma1(e) 779 1.1 christos eor w28,w28,w21 // Maj(a,b,c) 780 1.1 christos eor w17,w3,w20,ror#22 // Sigma0(a) 781 1.1 christos eor w1,w1,w10,lsr#10 // sigma1(X[i+14]) 782 1.1 christos add w12,w12,w5 783 1.1 christos add w23,w23,w27 // d+=h 784 1.1 christos add w27,w27,w28 // h+=Maj(a,b,c) 785 1.1 christos ldr w28,[x30],#4 // *K++, w19 in next round 786 1.1 christos add w12,w12,w2 787 1.1 christos add w27,w27,w17 // h+=Sigma0(a) 788 1.1 christos add w12,w12,w1 789 1.1 christos ldr w1,[sp,#8] 790 1.1 christos str w4,[sp,#4] 791 1.1 christos ror w16,w23,#6 792 1.1 christos add w26,w26,w28 // h+=K[i] 793 1.1 christos ror w3,w14,#7 794 1.1 christos and w17,w24,w23 795 1.1 christos ror w2,w11,#17 796 1.1 christos bic w28,w25,w23 797 1.1 christos ror w4,w27,#2 798 1.1 christos add w26,w26,w12 // h+=X[i] 799 1.1 christos eor w16,w16,w23,ror#11 800 1.1 christos eor w3,w3,w14,ror#18 801 1.1 christos orr w17,w17,w28 // Ch(e,f,g) 802 1.1 christos eor w28,w27,w20 // a^b, b^c in next round 803 1.1 christos eor w16,w16,w23,ror#25 // Sigma1(e) 804 1.1 christos eor w4,w4,w27,ror#13 805 1.1 christos add w26,w26,w17 // h+=Ch(e,f,g) 806 1.1 christos and w19,w19,w28 // (b^c)&=(a^b) 807 1.1 christos eor w2,w2,w11,ror#19 808 1.1 christos eor w3,w3,w14,lsr#3 // sigma0(X[i+1]) 809 1.1 christos add w26,w26,w16 // h+=Sigma1(e) 810 1.1 christos eor w19,w19,w20 // Maj(a,b,c) 811 1.1 christos eor w17,w4,w27,ror#22 // Sigma0(a) 812 1.1 christos eor w2,w2,w11,lsr#10 // sigma1(X[i+14]) 813 1.1 christos add w13,w13,w6 814 1.1 christos add w22,w22,w26 // d+=h 815 1.1 christos add w26,w26,w19 // h+=Maj(a,b,c) 816 1.1 christos ldr w19,[x30],#4 // *K++, w28 in next round 817 1.1 christos add w13,w13,w3 818 1.1 christos add w26,w26,w17 // h+=Sigma0(a) 819 1.1 christos add w13,w13,w2 820 1.1 christos ldr w2,[sp,#12] 821 1.1 christos str w5,[sp,#8] 822 1.1 christos ror w16,w22,#6 823 1.1 christos add w25,w25,w19 // h+=K[i] 824 1.1 christos ror w4,w15,#7 825 1.1 christos and w17,w23,w22 826 1.1 christos ror w3,w12,#17 827 1.1 christos bic w19,w24,w22 828 1.1 christos ror w5,w26,#2 829 1.1 christos add w25,w25,w13 // h+=X[i] 830 1.1 christos eor w16,w16,w22,ror#11 831 1.1 christos eor w4,w4,w15,ror#18 832 1.1 christos orr w17,w17,w19 // Ch(e,f,g) 833 1.1 christos eor w19,w26,w27 // a^b, b^c in next round 834 1.1 christos eor w16,w16,w22,ror#25 // Sigma1(e) 835 1.1 christos eor w5,w5,w26,ror#13 836 1.1 christos add w25,w25,w17 // h+=Ch(e,f,g) 837 1.1 christos and w28,w28,w19 // (b^c)&=(a^b) 838 1.1 christos eor w3,w3,w12,ror#19 839 1.1 christos eor w4,w4,w15,lsr#3 // sigma0(X[i+1]) 840 1.1 christos add w25,w25,w16 // h+=Sigma1(e) 841 1.1 christos eor w28,w28,w27 // Maj(a,b,c) 842 1.1 christos eor w17,w5,w26,ror#22 // Sigma0(a) 843 1.1 christos eor w3,w3,w12,lsr#10 // sigma1(X[i+14]) 844 1.1 christos add w14,w14,w7 845 1.1 christos add w21,w21,w25 // d+=h 846 1.1 christos add w25,w25,w28 // h+=Maj(a,b,c) 847 1.1 christos ldr w28,[x30],#4 // *K++, w19 in next round 848 1.1 christos add w14,w14,w4 849 1.1 christos add w25,w25,w17 // h+=Sigma0(a) 850 1.1 christos add w14,w14,w3 851 1.1 christos ldr w3,[sp,#0] 852 1.1 christos str w6,[sp,#12] 853 1.1 christos ror w16,w21,#6 854 1.1 christos add w24,w24,w28 // h+=K[i] 855 1.1 christos ror w5,w0,#7 856 1.1 christos and w17,w22,w21 857 1.1 christos ror w4,w13,#17 858 1.1 christos bic w28,w23,w21 859 1.1 christos ror w6,w25,#2 860 1.1 christos add w24,w24,w14 // h+=X[i] 861 1.1 christos eor w16,w16,w21,ror#11 862 1.1 christos eor w5,w5,w0,ror#18 863 1.1 christos orr w17,w17,w28 // Ch(e,f,g) 864 1.1 christos eor w28,w25,w26 // a^b, b^c in next round 865 1.1 christos eor w16,w16,w21,ror#25 // Sigma1(e) 866 1.1 christos eor w6,w6,w25,ror#13 867 1.1 christos add w24,w24,w17 // h+=Ch(e,f,g) 868 1.1 christos and w19,w19,w28 // (b^c)&=(a^b) 869 1.1 christos eor w4,w4,w13,ror#19 870 1.1 christos eor w5,w5,w0,lsr#3 // sigma0(X[i+1]) 871 1.1 christos add w24,w24,w16 // h+=Sigma1(e) 872 1.1 christos eor w19,w19,w26 // Maj(a,b,c) 873 1.1 christos eor w17,w6,w25,ror#22 // Sigma0(a) 874 1.1 christos eor w4,w4,w13,lsr#10 // sigma1(X[i+14]) 875 1.1 christos add w15,w15,w8 876 1.1 christos add w20,w20,w24 // d+=h 877 1.1 christos add w24,w24,w19 // h+=Maj(a,b,c) 878 1.1 christos ldr w19,[x30],#4 // *K++, w28 in next round 879 1.1 christos add w15,w15,w5 880 1.1 christos add w24,w24,w17 // h+=Sigma0(a) 881 1.1 christos add w15,w15,w4 882 1.1 christos ldr w4,[sp,#4] 883 1.1 christos str w7,[sp,#0] 884 1.1 christos ror w16,w20,#6 885 1.1 christos add w23,w23,w19 // h+=K[i] 886 1.1 christos ror w6,w1,#7 887 1.1 christos and w17,w21,w20 888 1.1 christos ror w5,w14,#17 889 1.1 christos bic w19,w22,w20 890 1.1 christos ror w7,w24,#2 891 1.1 christos add w23,w23,w15 // h+=X[i] 892 1.1 christos eor w16,w16,w20,ror#11 893 1.1 christos eor w6,w6,w1,ror#18 894 1.1 christos orr w17,w17,w19 // Ch(e,f,g) 895 1.1 christos eor w19,w24,w25 // a^b, b^c in next round 896 1.1 christos eor w16,w16,w20,ror#25 // Sigma1(e) 897 1.1 christos eor w7,w7,w24,ror#13 898 1.1 christos add w23,w23,w17 // h+=Ch(e,f,g) 899 1.1 christos and w28,w28,w19 // (b^c)&=(a^b) 900 1.1 christos eor w5,w5,w14,ror#19 901 1.1 christos eor w6,w6,w1,lsr#3 // sigma0(X[i+1]) 902 1.1 christos add w23,w23,w16 // h+=Sigma1(e) 903 1.1 christos eor w28,w28,w25 // Maj(a,b,c) 904 1.1 christos eor w17,w7,w24,ror#22 // Sigma0(a) 905 1.1 christos eor w5,w5,w14,lsr#10 // sigma1(X[i+14]) 906 1.1 christos add w0,w0,w9 907 1.1 christos add w27,w27,w23 // d+=h 908 1.1 christos add w23,w23,w28 // h+=Maj(a,b,c) 909 1.1 christos ldr w28,[x30],#4 // *K++, w19 in next round 910 1.1 christos add w0,w0,w6 911 1.1 christos add w23,w23,w17 // h+=Sigma0(a) 912 1.1 christos add w0,w0,w5 913 1.1 christos ldr w5,[sp,#8] 914 1.1 christos str w8,[sp,#4] 915 1.1 christos ror w16,w27,#6 916 1.1 christos add w22,w22,w28 // h+=K[i] 917 1.1 christos ror w7,w2,#7 918 1.1 christos and w17,w20,w27 919 1.1 christos ror w6,w15,#17 920 1.1 christos bic w28,w21,w27 921 1.1 christos ror w8,w23,#2 922 1.1 christos add w22,w22,w0 // h+=X[i] 923 1.1 christos eor w16,w16,w27,ror#11 924 1.1 christos eor w7,w7,w2,ror#18 925 1.1 christos orr w17,w17,w28 // Ch(e,f,g) 926 1.1 christos eor w28,w23,w24 // a^b, b^c in next round 927 1.1 christos eor w16,w16,w27,ror#25 // Sigma1(e) 928 1.1 christos eor w8,w8,w23,ror#13 929 1.1 christos add w22,w22,w17 // h+=Ch(e,f,g) 930 1.1 christos and w19,w19,w28 // (b^c)&=(a^b) 931 1.1 christos eor w6,w6,w15,ror#19 932 1.1 christos eor w7,w7,w2,lsr#3 // sigma0(X[i+1]) 933 1.1 christos add w22,w22,w16 // h+=Sigma1(e) 934 1.1 christos eor w19,w19,w24 // Maj(a,b,c) 935 1.1 christos eor w17,w8,w23,ror#22 // Sigma0(a) 936 1.1 christos eor w6,w6,w15,lsr#10 // sigma1(X[i+14]) 937 1.1 christos add w1,w1,w10 938 1.1 christos add w26,w26,w22 // d+=h 939 1.1 christos add w22,w22,w19 // h+=Maj(a,b,c) 940 1.1 christos ldr w19,[x30],#4 // *K++, w28 in next round 941 1.1 christos add w1,w1,w7 942 1.1 christos add w22,w22,w17 // h+=Sigma0(a) 943 1.1 christos add w1,w1,w6 944 1.1 christos ldr w6,[sp,#12] 945 1.1 christos str w9,[sp,#8] 946 1.1 christos ror w16,w26,#6 947 1.1 christos add w21,w21,w19 // h+=K[i] 948 1.1 christos ror w8,w3,#7 949 1.1 christos and w17,w27,w26 950 1.1 christos ror w7,w0,#17 951 1.1 christos bic w19,w20,w26 952 1.1 christos ror w9,w22,#2 953 1.1 christos add w21,w21,w1 // h+=X[i] 954 1.1 christos eor w16,w16,w26,ror#11 955 1.1 christos eor w8,w8,w3,ror#18 956 1.1 christos orr w17,w17,w19 // Ch(e,f,g) 957 1.1 christos eor w19,w22,w23 // a^b, b^c in next round 958 1.1 christos eor w16,w16,w26,ror#25 // Sigma1(e) 959 1.1 christos eor w9,w9,w22,ror#13 960 1.1 christos add w21,w21,w17 // h+=Ch(e,f,g) 961 1.1 christos and w28,w28,w19 // (b^c)&=(a^b) 962 1.1 christos eor w7,w7,w0,ror#19 963 1.1 christos eor w8,w8,w3,lsr#3 // sigma0(X[i+1]) 964 1.1 christos add w21,w21,w16 // h+=Sigma1(e) 965 1.1 christos eor w28,w28,w23 // Maj(a,b,c) 966 1.1 christos eor w17,w9,w22,ror#22 // Sigma0(a) 967 1.1 christos eor w7,w7,w0,lsr#10 // sigma1(X[i+14]) 968 1.1 christos add w2,w2,w11 969 1.1 christos add w25,w25,w21 // d+=h 970 1.1 christos add w21,w21,w28 // h+=Maj(a,b,c) 971 1.1 christos ldr w28,[x30],#4 // *K++, w19 in next round 972 1.1 christos add w2,w2,w8 973 1.1 christos add w21,w21,w17 // h+=Sigma0(a) 974 1.1 christos add w2,w2,w7 975 1.1 christos ldr w7,[sp,#0] 976 1.1 christos str w10,[sp,#12] 977 1.1 christos ror w16,w25,#6 978 1.1 christos add w20,w20,w28 // h+=K[i] 979 1.1 christos ror w9,w4,#7 980 1.1 christos and w17,w26,w25 981 1.1 christos ror w8,w1,#17 982 1.1 christos bic w28,w27,w25 983 1.1 christos ror w10,w21,#2 984 1.1 christos add w20,w20,w2 // h+=X[i] 985 1.1 christos eor w16,w16,w25,ror#11 986 1.1 christos eor w9,w9,w4,ror#18 987 1.1 christos orr w17,w17,w28 // Ch(e,f,g) 988 1.1 christos eor w28,w21,w22 // a^b, b^c in next round 989 1.1 christos eor w16,w16,w25,ror#25 // Sigma1(e) 990 1.1 christos eor w10,w10,w21,ror#13 991 1.1 christos add w20,w20,w17 // h+=Ch(e,f,g) 992 1.1 christos and w19,w19,w28 // (b^c)&=(a^b) 993 1.1 christos eor w8,w8,w1,ror#19 994 1.1 christos eor w9,w9,w4,lsr#3 // sigma0(X[i+1]) 995 1.1 christos add w20,w20,w16 // h+=Sigma1(e) 996 1.1 christos eor w19,w19,w22 // Maj(a,b,c) 997 1.1 christos eor w17,w10,w21,ror#22 // Sigma0(a) 998 1.1 christos eor w8,w8,w1,lsr#10 // sigma1(X[i+14]) 999 1.1 christos add w3,w3,w12 1000 1.1 christos add w24,w24,w20 // d+=h 1001 1.1 christos add w20,w20,w19 // h+=Maj(a,b,c) 1002 1.1 christos ldr w19,[x30],#4 // *K++, w28 in next round 1003 1.1 christos add w3,w3,w9 1004 1.1 christos add w20,w20,w17 // h+=Sigma0(a) 1005 1.1 christos add w3,w3,w8 1006 1.1 christos cbnz w19,.Loop_16_xx 1007 1.1 christos 1008 1.1 christos ldp x0,x2,[x29,#96] 1009 1.1 christos ldr x1,[x29,#112] 1010 1.1 christos sub x30,x30,#260 // rewind 1011 1.1 christos 1012 1.1 christos ldp w3,w4,[x0] 1013 1.1 christos ldp w5,w6,[x0,#2*4] 1014 1.1 christos add x1,x1,#14*4 // advance input pointer 1015 1.1 christos ldp w7,w8,[x0,#4*4] 1016 1.1 christos add w20,w20,w3 1017 1.1 christos ldp w9,w10,[x0,#6*4] 1018 1.1 christos add w21,w21,w4 1019 1.1 christos add w22,w22,w5 1020 1.1 christos add w23,w23,w6 1021 1.1 christos stp w20,w21,[x0] 1022 1.1 christos add w24,w24,w7 1023 1.1 christos add w25,w25,w8 1024 1.1 christos stp w22,w23,[x0,#2*4] 1025 1.1 christos add w26,w26,w9 1026 1.1 christos add w27,w27,w10 1027 1.1 christos cmp x1,x2 1028 1.1 christos stp w24,w25,[x0,#4*4] 1029 1.1 christos stp w26,w27,[x0,#6*4] 1030 1.1 christos b.ne .Loop 1031 1.1 christos 1032 1.1 christos ldp x19,x20,[x29,#16] 1033 1.1 christos add sp,sp,#4*4 1034 1.1 christos ldp x21,x22,[x29,#32] 1035 1.1 christos ldp x23,x24,[x29,#48] 1036 1.1 christos ldp x25,x26,[x29,#64] 1037 1.1 christos ldp x27,x28,[x29,#80] 1038 1.1 christos ldp x29,x30,[sp],#128 1039 1.4 christos .inst 0xd50323bf // autiasp 1040 1.1 christos ret 1041 1.1 christos .size sha256_block_data_order,.-sha256_block_data_order 1042 1.1 christos 1043 1.1 christos .align 6 1044 1.1 christos .type .LK256,%object 1045 1.1 christos .LK256: 1046 1.1 christos .long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5 1047 1.1 christos .long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5 1048 1.1 christos .long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3 1049 1.1 christos .long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174 1050 1.1 christos .long 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc 1051 1.1 christos .long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da 1052 1.1 christos .long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7 1053 1.1 christos .long 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967 1054 1.1 christos .long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13 1055 1.1 christos .long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85 1056 1.1 christos .long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3 1057 1.1 christos .long 0xd192e819,0xd6990624,0xf40e3585,0x106aa070 1058 1.1 christos .long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5 1059 1.1 christos .long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3 1060 1.1 christos .long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208 1061 1.1 christos .long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2 1062 1.1 christos .long 0 //terminator 1063 1.1 christos .size .LK256,.-.LK256 1064 1.1 christos .byte 83,72,65,50,53,54,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,65,82,77,118,56,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0 1065 1.1 christos .align 2 1066 1.1 christos .align 2 1067 1.2 christos #ifndef __KERNEL__ 1068 1.1 christos .type sha256_block_armv8,%function 1069 1.1 christos .align 6 1070 1.1 christos sha256_block_armv8: 1071 1.1 christos .Lv8_entry: 1072 1.1 christos stp x29,x30,[sp,#-16]! 1073 1.1 christos add x29,sp,#0 1074 1.1 christos 1075 1.1 christos ld1 {v0.4s,v1.4s},[x0] 1076 1.1 christos adr x3,.LK256 1077 1.1 christos 1078 1.1 christos .Loop_hw: 1079 1.1 christos ld1 {v4.16b,v5.16b,v6.16b,v7.16b},[x1],#64 1080 1.1 christos sub x2,x2,#1 1081 1.1 christos ld1 {v16.4s},[x3],#16 1082 1.1 christos rev32 v4.16b,v4.16b 1083 1.1 christos rev32 v5.16b,v5.16b 1084 1.1 christos rev32 v6.16b,v6.16b 1085 1.1 christos rev32 v7.16b,v7.16b 1086 1.1 christos orr v18.16b,v0.16b,v0.16b // offload 1087 1.1 christos orr v19.16b,v1.16b,v1.16b 1088 1.1 christos ld1 {v17.4s},[x3],#16 1089 1.1 christos add v16.4s,v16.4s,v4.4s 1090 1.1 christos .inst 0x5e2828a4 //sha256su0 v4.16b,v5.16b 1091 1.1 christos orr v2.16b,v0.16b,v0.16b 1092 1.1 christos .inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s 1093 1.1 christos .inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s 1094 1.1 christos .inst 0x5e0760c4 //sha256su1 v4.16b,v6.16b,v7.16b 1095 1.1 christos ld1 {v16.4s},[x3],#16 1096 1.1 christos add v17.4s,v17.4s,v5.4s 1097 1.1 christos .inst 0x5e2828c5 //sha256su0 v5.16b,v6.16b 1098 1.1 christos orr v2.16b,v0.16b,v0.16b 1099 1.1 christos .inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s 1100 1.1 christos .inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s 1101 1.1 christos .inst 0x5e0460e5 //sha256su1 v5.16b,v7.16b,v4.16b 1102 1.1 christos ld1 {v17.4s},[x3],#16 1103 1.1 christos add v16.4s,v16.4s,v6.4s 1104 1.1 christos .inst 0x5e2828e6 //sha256su0 v6.16b,v7.16b 1105 1.1 christos orr v2.16b,v0.16b,v0.16b 1106 1.1 christos .inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s 1107 1.1 christos .inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s 1108 1.1 christos .inst 0x5e056086 //sha256su1 v6.16b,v4.16b,v5.16b 1109 1.1 christos ld1 {v16.4s},[x3],#16 1110 1.1 christos add v17.4s,v17.4s,v7.4s 1111 1.1 christos .inst 0x5e282887 //sha256su0 v7.16b,v4.16b 1112 1.1 christos orr v2.16b,v0.16b,v0.16b 1113 1.1 christos .inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s 1114 1.1 christos .inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s 1115 1.1 christos .inst 0x5e0660a7 //sha256su1 v7.16b,v5.16b,v6.16b 1116 1.1 christos ld1 {v17.4s},[x3],#16 1117 1.1 christos add v16.4s,v16.4s,v4.4s 1118 1.1 christos .inst 0x5e2828a4 //sha256su0 v4.16b,v5.16b 1119 1.1 christos orr v2.16b,v0.16b,v0.16b 1120 1.1 christos .inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s 1121 1.1 christos .inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s 1122 1.1 christos .inst 0x5e0760c4 //sha256su1 v4.16b,v6.16b,v7.16b 1123 1.1 christos ld1 {v16.4s},[x3],#16 1124 1.1 christos add v17.4s,v17.4s,v5.4s 1125 1.1 christos .inst 0x5e2828c5 //sha256su0 v5.16b,v6.16b 1126 1.1 christos orr v2.16b,v0.16b,v0.16b 1127 1.1 christos .inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s 1128 1.1 christos .inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s 1129 1.1 christos .inst 0x5e0460e5 //sha256su1 v5.16b,v7.16b,v4.16b 1130 1.1 christos ld1 {v17.4s},[x3],#16 1131 1.1 christos add v16.4s,v16.4s,v6.4s 1132 1.1 christos .inst 0x5e2828e6 //sha256su0 v6.16b,v7.16b 1133 1.1 christos orr v2.16b,v0.16b,v0.16b 1134 1.1 christos .inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s 1135 1.1 christos .inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s 1136 1.1 christos .inst 0x5e056086 //sha256su1 v6.16b,v4.16b,v5.16b 1137 1.1 christos ld1 {v16.4s},[x3],#16 1138 1.1 christos add v17.4s,v17.4s,v7.4s 1139 1.1 christos .inst 0x5e282887 //sha256su0 v7.16b,v4.16b 1140 1.1 christos orr v2.16b,v0.16b,v0.16b 1141 1.1 christos .inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s 1142 1.1 christos .inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s 1143 1.1 christos .inst 0x5e0660a7 //sha256su1 v7.16b,v5.16b,v6.16b 1144 1.1 christos ld1 {v17.4s},[x3],#16 1145 1.1 christos add v16.4s,v16.4s,v4.4s 1146 1.1 christos .inst 0x5e2828a4 //sha256su0 v4.16b,v5.16b 1147 1.1 christos orr v2.16b,v0.16b,v0.16b 1148 1.1 christos .inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s 1149 1.1 christos .inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s 1150 1.1 christos .inst 0x5e0760c4 //sha256su1 v4.16b,v6.16b,v7.16b 1151 1.1 christos ld1 {v16.4s},[x3],#16 1152 1.1 christos add v17.4s,v17.4s,v5.4s 1153 1.1 christos .inst 0x5e2828c5 //sha256su0 v5.16b,v6.16b 1154 1.1 christos orr v2.16b,v0.16b,v0.16b 1155 1.1 christos .inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s 1156 1.1 christos .inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s 1157 1.1 christos .inst 0x5e0460e5 //sha256su1 v5.16b,v7.16b,v4.16b 1158 1.1 christos ld1 {v17.4s},[x3],#16 1159 1.1 christos add v16.4s,v16.4s,v6.4s 1160 1.1 christos .inst 0x5e2828e6 //sha256su0 v6.16b,v7.16b 1161 1.1 christos orr v2.16b,v0.16b,v0.16b 1162 1.1 christos .inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s 1163 1.1 christos .inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s 1164 1.1 christos .inst 0x5e056086 //sha256su1 v6.16b,v4.16b,v5.16b 1165 1.1 christos ld1 {v16.4s},[x3],#16 1166 1.1 christos add v17.4s,v17.4s,v7.4s 1167 1.1 christos .inst 0x5e282887 //sha256su0 v7.16b,v4.16b 1168 1.1 christos orr v2.16b,v0.16b,v0.16b 1169 1.1 christos .inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s 1170 1.1 christos .inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s 1171 1.1 christos .inst 0x5e0660a7 //sha256su1 v7.16b,v5.16b,v6.16b 1172 1.1 christos ld1 {v17.4s},[x3],#16 1173 1.1 christos add v16.4s,v16.4s,v4.4s 1174 1.1 christos orr v2.16b,v0.16b,v0.16b 1175 1.1 christos .inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s 1176 1.1 christos .inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s 1177 1.1 christos 1178 1.1 christos ld1 {v16.4s},[x3],#16 1179 1.1 christos add v17.4s,v17.4s,v5.4s 1180 1.1 christos orr v2.16b,v0.16b,v0.16b 1181 1.1 christos .inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s 1182 1.1 christos .inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s 1183 1.1 christos 1184 1.1 christos ld1 {v17.4s},[x3] 1185 1.1 christos add v16.4s,v16.4s,v6.4s 1186 1.1 christos sub x3,x3,#64*4-16 // rewind 1187 1.1 christos orr v2.16b,v0.16b,v0.16b 1188 1.1 christos .inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s 1189 1.1 christos .inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s 1190 1.1 christos 1191 1.1 christos add v17.4s,v17.4s,v7.4s 1192 1.1 christos orr v2.16b,v0.16b,v0.16b 1193 1.1 christos .inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s 1194 1.1 christos .inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s 1195 1.1 christos 1196 1.1 christos add v0.4s,v0.4s,v18.4s 1197 1.1 christos add v1.4s,v1.4s,v19.4s 1198 1.1 christos 1199 1.1 christos cbnz x2,.Loop_hw 1200 1.1 christos 1201 1.1 christos st1 {v0.4s,v1.4s},[x0] 1202 1.1 christos 1203 1.1 christos ldr x29,[sp],#16 1204 1.1 christos ret 1205 1.1 christos .size sha256_block_armv8,.-sha256_block_armv8 1206 1.2 christos #endif 1207 1.2 christos #ifdef __KERNEL__ 1208 1.2 christos .globl sha256_block_neon 1209 1.2 christos #endif 1210 1.2 christos .type sha256_block_neon,%function 1211 1.2 christos .align 4 1212 1.2 christos sha256_block_neon: 1213 1.2 christos .Lneon_entry: 1214 1.2 christos stp x29, x30, [sp, #-16]! 1215 1.2 christos mov x29, sp 1216 1.2 christos sub sp,sp,#16*4 1217 1.2 christos 1218 1.2 christos adr x16,.LK256 1219 1.2 christos add x2,x1,x2,lsl#6 // len to point at the end of inp 1220 1.2 christos 1221 1.2 christos ld1 {v0.16b},[x1], #16 1222 1.2 christos ld1 {v1.16b},[x1], #16 1223 1.2 christos ld1 {v2.16b},[x1], #16 1224 1.2 christos ld1 {v3.16b},[x1], #16 1225 1.2 christos ld1 {v4.4s},[x16], #16 1226 1.2 christos ld1 {v5.4s},[x16], #16 1227 1.2 christos ld1 {v6.4s},[x16], #16 1228 1.2 christos ld1 {v7.4s},[x16], #16 1229 1.2 christos rev32 v0.16b,v0.16b // yes, even on 1230 1.2 christos rev32 v1.16b,v1.16b // big-endian 1231 1.2 christos rev32 v2.16b,v2.16b 1232 1.2 christos rev32 v3.16b,v3.16b 1233 1.2 christos mov x17,sp 1234 1.2 christos add v4.4s,v4.4s,v0.4s 1235 1.2 christos add v5.4s,v5.4s,v1.4s 1236 1.2 christos add v6.4s,v6.4s,v2.4s 1237 1.2 christos st1 {v4.4s,v5.4s},[x17], #32 1238 1.2 christos add v7.4s,v7.4s,v3.4s 1239 1.2 christos st1 {v6.4s,v7.4s},[x17] 1240 1.2 christos sub x17,x17,#32 1241 1.2 christos 1242 1.2 christos ldp w3,w4,[x0] 1243 1.2 christos ldp w5,w6,[x0,#8] 1244 1.2 christos ldp w7,w8,[x0,#16] 1245 1.2 christos ldp w9,w10,[x0,#24] 1246 1.2 christos ldr w12,[sp,#0] 1247 1.2 christos mov w13,wzr 1248 1.2 christos eor w14,w4,w5 1249 1.2 christos mov w15,wzr 1250 1.2 christos b .L_00_48 1251 1.2 christos 1252 1.2 christos .align 4 1253 1.2 christos .L_00_48: 1254 1.2 christos ext v4.16b,v0.16b,v1.16b,#4 1255 1.2 christos add w10,w10,w12 1256 1.2 christos add w3,w3,w15 1257 1.2 christos and w12,w8,w7 1258 1.2 christos bic w15,w9,w7 1259 1.2 christos ext v7.16b,v2.16b,v3.16b,#4 1260 1.2 christos eor w11,w7,w7,ror#5 1261 1.2 christos add w3,w3,w13 1262 1.2 christos mov d19,v3.d[1] 1263 1.2 christos orr w12,w12,w15 1264 1.2 christos eor w11,w11,w7,ror#19 1265 1.2 christos ushr v6.4s,v4.4s,#7 1266 1.2 christos eor w15,w3,w3,ror#11 1267 1.2 christos ushr v5.4s,v4.4s,#3 1268 1.2 christos add w10,w10,w12 1269 1.2 christos add v0.4s,v0.4s,v7.4s 1270 1.2 christos ror w11,w11,#6 1271 1.2 christos sli v6.4s,v4.4s,#25 1272 1.2 christos eor w13,w3,w4 1273 1.2 christos eor w15,w15,w3,ror#20 1274 1.2 christos ushr v7.4s,v4.4s,#18 1275 1.2 christos add w10,w10,w11 1276 1.2 christos ldr w12,[sp,#4] 1277 1.2 christos and w14,w14,w13 1278 1.2 christos eor v5.16b,v5.16b,v6.16b 1279 1.2 christos ror w15,w15,#2 1280 1.2 christos add w6,w6,w10 1281 1.2 christos sli v7.4s,v4.4s,#14 1282 1.2 christos eor w14,w14,w4 1283 1.2 christos ushr v16.4s,v19.4s,#17 1284 1.2 christos add w9,w9,w12 1285 1.2 christos add w10,w10,w15 1286 1.2 christos and w12,w7,w6 1287 1.2 christos eor v5.16b,v5.16b,v7.16b 1288 1.2 christos bic w15,w8,w6 1289 1.2 christos eor w11,w6,w6,ror#5 1290 1.2 christos sli v16.4s,v19.4s,#15 1291 1.2 christos add w10,w10,w14 1292 1.2 christos orr w12,w12,w15 1293 1.2 christos ushr v17.4s,v19.4s,#10 1294 1.2 christos eor w11,w11,w6,ror#19 1295 1.2 christos eor w15,w10,w10,ror#11 1296 1.2 christos ushr v7.4s,v19.4s,#19 1297 1.2 christos add w9,w9,w12 1298 1.2 christos ror w11,w11,#6 1299 1.2 christos add v0.4s,v0.4s,v5.4s 1300 1.2 christos eor w14,w10,w3 1301 1.2 christos eor w15,w15,w10,ror#20 1302 1.2 christos sli v7.4s,v19.4s,#13 1303 1.2 christos add w9,w9,w11 1304 1.2 christos ldr w12,[sp,#8] 1305 1.2 christos and w13,w13,w14 1306 1.2 christos eor v17.16b,v17.16b,v16.16b 1307 1.2 christos ror w15,w15,#2 1308 1.2 christos add w5,w5,w9 1309 1.2 christos eor w13,w13,w3 1310 1.2 christos eor v17.16b,v17.16b,v7.16b 1311 1.2 christos add w8,w8,w12 1312 1.2 christos add w9,w9,w15 1313 1.2 christos and w12,w6,w5 1314 1.2 christos add v0.4s,v0.4s,v17.4s 1315 1.2 christos bic w15,w7,w5 1316 1.2 christos eor w11,w5,w5,ror#5 1317 1.2 christos add w9,w9,w13 1318 1.2 christos ushr v18.4s,v0.4s,#17 1319 1.2 christos orr w12,w12,w15 1320 1.2 christos ushr v19.4s,v0.4s,#10 1321 1.2 christos eor w11,w11,w5,ror#19 1322 1.2 christos eor w15,w9,w9,ror#11 1323 1.2 christos sli v18.4s,v0.4s,#15 1324 1.2 christos add w8,w8,w12 1325 1.2 christos ushr v17.4s,v0.4s,#19 1326 1.2 christos ror w11,w11,#6 1327 1.2 christos eor w13,w9,w10 1328 1.2 christos eor v19.16b,v19.16b,v18.16b 1329 1.2 christos eor w15,w15,w9,ror#20 1330 1.2 christos add w8,w8,w11 1331 1.2 christos sli v17.4s,v0.4s,#13 1332 1.2 christos ldr w12,[sp,#12] 1333 1.2 christos and w14,w14,w13 1334 1.2 christos ror w15,w15,#2 1335 1.2 christos ld1 {v4.4s},[x16], #16 1336 1.2 christos add w4,w4,w8 1337 1.2 christos eor v19.16b,v19.16b,v17.16b 1338 1.2 christos eor w14,w14,w10 1339 1.2 christos eor v17.16b,v17.16b,v17.16b 1340 1.2 christos add w7,w7,w12 1341 1.2 christos add w8,w8,w15 1342 1.2 christos and w12,w5,w4 1343 1.2 christos mov v17.d[1],v19.d[0] 1344 1.2 christos bic w15,w6,w4 1345 1.2 christos eor w11,w4,w4,ror#5 1346 1.2 christos add w8,w8,w14 1347 1.2 christos add v0.4s,v0.4s,v17.4s 1348 1.2 christos orr w12,w12,w15 1349 1.2 christos eor w11,w11,w4,ror#19 1350 1.2 christos eor w15,w8,w8,ror#11 1351 1.2 christos add v4.4s,v4.4s,v0.4s 1352 1.2 christos add w7,w7,w12 1353 1.2 christos ror w11,w11,#6 1354 1.2 christos eor w14,w8,w9 1355 1.2 christos eor w15,w15,w8,ror#20 1356 1.2 christos add w7,w7,w11 1357 1.2 christos ldr w12,[sp,#16] 1358 1.2 christos and w13,w13,w14 1359 1.2 christos ror w15,w15,#2 1360 1.2 christos add w3,w3,w7 1361 1.2 christos eor w13,w13,w9 1362 1.2 christos st1 {v4.4s},[x17], #16 1363 1.2 christos ext v4.16b,v1.16b,v2.16b,#4 1364 1.2 christos add w6,w6,w12 1365 1.2 christos add w7,w7,w15 1366 1.2 christos and w12,w4,w3 1367 1.2 christos bic w15,w5,w3 1368 1.2 christos ext v7.16b,v3.16b,v0.16b,#4 1369 1.2 christos eor w11,w3,w3,ror#5 1370 1.2 christos add w7,w7,w13 1371 1.2 christos mov d19,v0.d[1] 1372 1.2 christos orr w12,w12,w15 1373 1.2 christos eor w11,w11,w3,ror#19 1374 1.2 christos ushr v6.4s,v4.4s,#7 1375 1.2 christos eor w15,w7,w7,ror#11 1376 1.2 christos ushr v5.4s,v4.4s,#3 1377 1.2 christos add w6,w6,w12 1378 1.2 christos add v1.4s,v1.4s,v7.4s 1379 1.2 christos ror w11,w11,#6 1380 1.2 christos sli v6.4s,v4.4s,#25 1381 1.2 christos eor w13,w7,w8 1382 1.2 christos eor w15,w15,w7,ror#20 1383 1.2 christos ushr v7.4s,v4.4s,#18 1384 1.2 christos add w6,w6,w11 1385 1.2 christos ldr w12,[sp,#20] 1386 1.2 christos and w14,w14,w13 1387 1.2 christos eor v5.16b,v5.16b,v6.16b 1388 1.2 christos ror w15,w15,#2 1389 1.2 christos add w10,w10,w6 1390 1.2 christos sli v7.4s,v4.4s,#14 1391 1.2 christos eor w14,w14,w8 1392 1.2 christos ushr v16.4s,v19.4s,#17 1393 1.2 christos add w5,w5,w12 1394 1.2 christos add w6,w6,w15 1395 1.2 christos and w12,w3,w10 1396 1.2 christos eor v5.16b,v5.16b,v7.16b 1397 1.2 christos bic w15,w4,w10 1398 1.2 christos eor w11,w10,w10,ror#5 1399 1.2 christos sli v16.4s,v19.4s,#15 1400 1.2 christos add w6,w6,w14 1401 1.2 christos orr w12,w12,w15 1402 1.2 christos ushr v17.4s,v19.4s,#10 1403 1.2 christos eor w11,w11,w10,ror#19 1404 1.2 christos eor w15,w6,w6,ror#11 1405 1.2 christos ushr v7.4s,v19.4s,#19 1406 1.2 christos add w5,w5,w12 1407 1.2 christos ror w11,w11,#6 1408 1.2 christos add v1.4s,v1.4s,v5.4s 1409 1.2 christos eor w14,w6,w7 1410 1.2 christos eor w15,w15,w6,ror#20 1411 1.2 christos sli v7.4s,v19.4s,#13 1412 1.2 christos add w5,w5,w11 1413 1.2 christos ldr w12,[sp,#24] 1414 1.2 christos and w13,w13,w14 1415 1.2 christos eor v17.16b,v17.16b,v16.16b 1416 1.2 christos ror w15,w15,#2 1417 1.2 christos add w9,w9,w5 1418 1.2 christos eor w13,w13,w7 1419 1.2 christos eor v17.16b,v17.16b,v7.16b 1420 1.2 christos add w4,w4,w12 1421 1.2 christos add w5,w5,w15 1422 1.2 christos and w12,w10,w9 1423 1.2 christos add v1.4s,v1.4s,v17.4s 1424 1.2 christos bic w15,w3,w9 1425 1.2 christos eor w11,w9,w9,ror#5 1426 1.2 christos add w5,w5,w13 1427 1.2 christos ushr v18.4s,v1.4s,#17 1428 1.2 christos orr w12,w12,w15 1429 1.2 christos ushr v19.4s,v1.4s,#10 1430 1.2 christos eor w11,w11,w9,ror#19 1431 1.2 christos eor w15,w5,w5,ror#11 1432 1.2 christos sli v18.4s,v1.4s,#15 1433 1.2 christos add w4,w4,w12 1434 1.2 christos ushr v17.4s,v1.4s,#19 1435 1.2 christos ror w11,w11,#6 1436 1.2 christos eor w13,w5,w6 1437 1.2 christos eor v19.16b,v19.16b,v18.16b 1438 1.2 christos eor w15,w15,w5,ror#20 1439 1.2 christos add w4,w4,w11 1440 1.2 christos sli v17.4s,v1.4s,#13 1441 1.2 christos ldr w12,[sp,#28] 1442 1.2 christos and w14,w14,w13 1443 1.2 christos ror w15,w15,#2 1444 1.2 christos ld1 {v4.4s},[x16], #16 1445 1.2 christos add w8,w8,w4 1446 1.2 christos eor v19.16b,v19.16b,v17.16b 1447 1.2 christos eor w14,w14,w6 1448 1.2 christos eor v17.16b,v17.16b,v17.16b 1449 1.2 christos add w3,w3,w12 1450 1.2 christos add w4,w4,w15 1451 1.2 christos and w12,w9,w8 1452 1.2 christos mov v17.d[1],v19.d[0] 1453 1.2 christos bic w15,w10,w8 1454 1.2 christos eor w11,w8,w8,ror#5 1455 1.2 christos add w4,w4,w14 1456 1.2 christos add v1.4s,v1.4s,v17.4s 1457 1.2 christos orr w12,w12,w15 1458 1.2 christos eor w11,w11,w8,ror#19 1459 1.2 christos eor w15,w4,w4,ror#11 1460 1.2 christos add v4.4s,v4.4s,v1.4s 1461 1.2 christos add w3,w3,w12 1462 1.2 christos ror w11,w11,#6 1463 1.2 christos eor w14,w4,w5 1464 1.2 christos eor w15,w15,w4,ror#20 1465 1.2 christos add w3,w3,w11 1466 1.2 christos ldr w12,[sp,#32] 1467 1.2 christos and w13,w13,w14 1468 1.2 christos ror w15,w15,#2 1469 1.2 christos add w7,w7,w3 1470 1.2 christos eor w13,w13,w5 1471 1.2 christos st1 {v4.4s},[x17], #16 1472 1.2 christos ext v4.16b,v2.16b,v3.16b,#4 1473 1.2 christos add w10,w10,w12 1474 1.2 christos add w3,w3,w15 1475 1.2 christos and w12,w8,w7 1476 1.2 christos bic w15,w9,w7 1477 1.2 christos ext v7.16b,v0.16b,v1.16b,#4 1478 1.2 christos eor w11,w7,w7,ror#5 1479 1.2 christos add w3,w3,w13 1480 1.2 christos mov d19,v1.d[1] 1481 1.2 christos orr w12,w12,w15 1482 1.2 christos eor w11,w11,w7,ror#19 1483 1.2 christos ushr v6.4s,v4.4s,#7 1484 1.2 christos eor w15,w3,w3,ror#11 1485 1.2 christos ushr v5.4s,v4.4s,#3 1486 1.2 christos add w10,w10,w12 1487 1.2 christos add v2.4s,v2.4s,v7.4s 1488 1.2 christos ror w11,w11,#6 1489 1.2 christos sli v6.4s,v4.4s,#25 1490 1.2 christos eor w13,w3,w4 1491 1.2 christos eor w15,w15,w3,ror#20 1492 1.2 christos ushr v7.4s,v4.4s,#18 1493 1.2 christos add w10,w10,w11 1494 1.2 christos ldr w12,[sp,#36] 1495 1.2 christos and w14,w14,w13 1496 1.2 christos eor v5.16b,v5.16b,v6.16b 1497 1.2 christos ror w15,w15,#2 1498 1.2 christos add w6,w6,w10 1499 1.2 christos sli v7.4s,v4.4s,#14 1500 1.2 christos eor w14,w14,w4 1501 1.2 christos ushr v16.4s,v19.4s,#17 1502 1.2 christos add w9,w9,w12 1503 1.2 christos add w10,w10,w15 1504 1.2 christos and w12,w7,w6 1505 1.2 christos eor v5.16b,v5.16b,v7.16b 1506 1.2 christos bic w15,w8,w6 1507 1.2 christos eor w11,w6,w6,ror#5 1508 1.2 christos sli v16.4s,v19.4s,#15 1509 1.2 christos add w10,w10,w14 1510 1.2 christos orr w12,w12,w15 1511 1.2 christos ushr v17.4s,v19.4s,#10 1512 1.2 christos eor w11,w11,w6,ror#19 1513 1.2 christos eor w15,w10,w10,ror#11 1514 1.2 christos ushr v7.4s,v19.4s,#19 1515 1.2 christos add w9,w9,w12 1516 1.2 christos ror w11,w11,#6 1517 1.2 christos add v2.4s,v2.4s,v5.4s 1518 1.2 christos eor w14,w10,w3 1519 1.2 christos eor w15,w15,w10,ror#20 1520 1.2 christos sli v7.4s,v19.4s,#13 1521 1.2 christos add w9,w9,w11 1522 1.2 christos ldr w12,[sp,#40] 1523 1.2 christos and w13,w13,w14 1524 1.2 christos eor v17.16b,v17.16b,v16.16b 1525 1.2 christos ror w15,w15,#2 1526 1.2 christos add w5,w5,w9 1527 1.2 christos eor w13,w13,w3 1528 1.2 christos eor v17.16b,v17.16b,v7.16b 1529 1.2 christos add w8,w8,w12 1530 1.2 christos add w9,w9,w15 1531 1.2 christos and w12,w6,w5 1532 1.2 christos add v2.4s,v2.4s,v17.4s 1533 1.2 christos bic w15,w7,w5 1534 1.2 christos eor w11,w5,w5,ror#5 1535 1.2 christos add w9,w9,w13 1536 1.2 christos ushr v18.4s,v2.4s,#17 1537 1.2 christos orr w12,w12,w15 1538 1.2 christos ushr v19.4s,v2.4s,#10 1539 1.2 christos eor w11,w11,w5,ror#19 1540 1.2 christos eor w15,w9,w9,ror#11 1541 1.2 christos sli v18.4s,v2.4s,#15 1542 1.2 christos add w8,w8,w12 1543 1.2 christos ushr v17.4s,v2.4s,#19 1544 1.2 christos ror w11,w11,#6 1545 1.2 christos eor w13,w9,w10 1546 1.2 christos eor v19.16b,v19.16b,v18.16b 1547 1.2 christos eor w15,w15,w9,ror#20 1548 1.2 christos add w8,w8,w11 1549 1.2 christos sli v17.4s,v2.4s,#13 1550 1.2 christos ldr w12,[sp,#44] 1551 1.2 christos and w14,w14,w13 1552 1.2 christos ror w15,w15,#2 1553 1.2 christos ld1 {v4.4s},[x16], #16 1554 1.2 christos add w4,w4,w8 1555 1.2 christos eor v19.16b,v19.16b,v17.16b 1556 1.2 christos eor w14,w14,w10 1557 1.2 christos eor v17.16b,v17.16b,v17.16b 1558 1.2 christos add w7,w7,w12 1559 1.2 christos add w8,w8,w15 1560 1.2 christos and w12,w5,w4 1561 1.2 christos mov v17.d[1],v19.d[0] 1562 1.2 christos bic w15,w6,w4 1563 1.2 christos eor w11,w4,w4,ror#5 1564 1.2 christos add w8,w8,w14 1565 1.2 christos add v2.4s,v2.4s,v17.4s 1566 1.2 christos orr w12,w12,w15 1567 1.2 christos eor w11,w11,w4,ror#19 1568 1.2 christos eor w15,w8,w8,ror#11 1569 1.2 christos add v4.4s,v4.4s,v2.4s 1570 1.2 christos add w7,w7,w12 1571 1.2 christos ror w11,w11,#6 1572 1.2 christos eor w14,w8,w9 1573 1.2 christos eor w15,w15,w8,ror#20 1574 1.2 christos add w7,w7,w11 1575 1.2 christos ldr w12,[sp,#48] 1576 1.2 christos and w13,w13,w14 1577 1.2 christos ror w15,w15,#2 1578 1.2 christos add w3,w3,w7 1579 1.2 christos eor w13,w13,w9 1580 1.2 christos st1 {v4.4s},[x17], #16 1581 1.2 christos ext v4.16b,v3.16b,v0.16b,#4 1582 1.2 christos add w6,w6,w12 1583 1.2 christos add w7,w7,w15 1584 1.2 christos and w12,w4,w3 1585 1.2 christos bic w15,w5,w3 1586 1.2 christos ext v7.16b,v1.16b,v2.16b,#4 1587 1.2 christos eor w11,w3,w3,ror#5 1588 1.2 christos add w7,w7,w13 1589 1.2 christos mov d19,v2.d[1] 1590 1.2 christos orr w12,w12,w15 1591 1.2 christos eor w11,w11,w3,ror#19 1592 1.2 christos ushr v6.4s,v4.4s,#7 1593 1.2 christos eor w15,w7,w7,ror#11 1594 1.2 christos ushr v5.4s,v4.4s,#3 1595 1.2 christos add w6,w6,w12 1596 1.2 christos add v3.4s,v3.4s,v7.4s 1597 1.2 christos ror w11,w11,#6 1598 1.2 christos sli v6.4s,v4.4s,#25 1599 1.2 christos eor w13,w7,w8 1600 1.2 christos eor w15,w15,w7,ror#20 1601 1.2 christos ushr v7.4s,v4.4s,#18 1602 1.2 christos add w6,w6,w11 1603 1.2 christos ldr w12,[sp,#52] 1604 1.2 christos and w14,w14,w13 1605 1.2 christos eor v5.16b,v5.16b,v6.16b 1606 1.2 christos ror w15,w15,#2 1607 1.2 christos add w10,w10,w6 1608 1.2 christos sli v7.4s,v4.4s,#14 1609 1.2 christos eor w14,w14,w8 1610 1.2 christos ushr v16.4s,v19.4s,#17 1611 1.2 christos add w5,w5,w12 1612 1.2 christos add w6,w6,w15 1613 1.2 christos and w12,w3,w10 1614 1.2 christos eor v5.16b,v5.16b,v7.16b 1615 1.2 christos bic w15,w4,w10 1616 1.2 christos eor w11,w10,w10,ror#5 1617 1.2 christos sli v16.4s,v19.4s,#15 1618 1.2 christos add w6,w6,w14 1619 1.2 christos orr w12,w12,w15 1620 1.2 christos ushr v17.4s,v19.4s,#10 1621 1.2 christos eor w11,w11,w10,ror#19 1622 1.2 christos eor w15,w6,w6,ror#11 1623 1.2 christos ushr v7.4s,v19.4s,#19 1624 1.2 christos add w5,w5,w12 1625 1.2 christos ror w11,w11,#6 1626 1.2 christos add v3.4s,v3.4s,v5.4s 1627 1.2 christos eor w14,w6,w7 1628 1.2 christos eor w15,w15,w6,ror#20 1629 1.2 christos sli v7.4s,v19.4s,#13 1630 1.2 christos add w5,w5,w11 1631 1.2 christos ldr w12,[sp,#56] 1632 1.2 christos and w13,w13,w14 1633 1.2 christos eor v17.16b,v17.16b,v16.16b 1634 1.2 christos ror w15,w15,#2 1635 1.2 christos add w9,w9,w5 1636 1.2 christos eor w13,w13,w7 1637 1.2 christos eor v17.16b,v17.16b,v7.16b 1638 1.2 christos add w4,w4,w12 1639 1.2 christos add w5,w5,w15 1640 1.2 christos and w12,w10,w9 1641 1.2 christos add v3.4s,v3.4s,v17.4s 1642 1.2 christos bic w15,w3,w9 1643 1.2 christos eor w11,w9,w9,ror#5 1644 1.2 christos add w5,w5,w13 1645 1.2 christos ushr v18.4s,v3.4s,#17 1646 1.2 christos orr w12,w12,w15 1647 1.2 christos ushr v19.4s,v3.4s,#10 1648 1.2 christos eor w11,w11,w9,ror#19 1649 1.2 christos eor w15,w5,w5,ror#11 1650 1.2 christos sli v18.4s,v3.4s,#15 1651 1.2 christos add w4,w4,w12 1652 1.2 christos ushr v17.4s,v3.4s,#19 1653 1.2 christos ror w11,w11,#6 1654 1.2 christos eor w13,w5,w6 1655 1.2 christos eor v19.16b,v19.16b,v18.16b 1656 1.2 christos eor w15,w15,w5,ror#20 1657 1.2 christos add w4,w4,w11 1658 1.2 christos sli v17.4s,v3.4s,#13 1659 1.2 christos ldr w12,[sp,#60] 1660 1.2 christos and w14,w14,w13 1661 1.2 christos ror w15,w15,#2 1662 1.2 christos ld1 {v4.4s},[x16], #16 1663 1.2 christos add w8,w8,w4 1664 1.2 christos eor v19.16b,v19.16b,v17.16b 1665 1.2 christos eor w14,w14,w6 1666 1.2 christos eor v17.16b,v17.16b,v17.16b 1667 1.2 christos add w3,w3,w12 1668 1.2 christos add w4,w4,w15 1669 1.2 christos and w12,w9,w8 1670 1.2 christos mov v17.d[1],v19.d[0] 1671 1.2 christos bic w15,w10,w8 1672 1.2 christos eor w11,w8,w8,ror#5 1673 1.2 christos add w4,w4,w14 1674 1.2 christos add v3.4s,v3.4s,v17.4s 1675 1.2 christos orr w12,w12,w15 1676 1.2 christos eor w11,w11,w8,ror#19 1677 1.2 christos eor w15,w4,w4,ror#11 1678 1.2 christos add v4.4s,v4.4s,v3.4s 1679 1.2 christos add w3,w3,w12 1680 1.2 christos ror w11,w11,#6 1681 1.2 christos eor w14,w4,w5 1682 1.2 christos eor w15,w15,w4,ror#20 1683 1.2 christos add w3,w3,w11 1684 1.2 christos ldr w12,[x16] 1685 1.2 christos and w13,w13,w14 1686 1.2 christos ror w15,w15,#2 1687 1.2 christos add w7,w7,w3 1688 1.2 christos eor w13,w13,w5 1689 1.2 christos st1 {v4.4s},[x17], #16 1690 1.2 christos cmp w12,#0 // check for K256 terminator 1691 1.2 christos ldr w12,[sp,#0] 1692 1.2 christos sub x17,x17,#64 1693 1.2 christos bne .L_00_48 1694 1.2 christos 1695 1.2 christos sub x16,x16,#256 // rewind x16 1696 1.2 christos cmp x1,x2 1697 1.2 christos mov x17, #64 1698 1.2 christos csel x17, x17, xzr, eq 1699 1.2 christos sub x1,x1,x17 // avoid SEGV 1700 1.2 christos mov x17,sp 1701 1.2 christos add w10,w10,w12 1702 1.2 christos add w3,w3,w15 1703 1.2 christos and w12,w8,w7 1704 1.2 christos ld1 {v0.16b},[x1],#16 1705 1.2 christos bic w15,w9,w7 1706 1.2 christos eor w11,w7,w7,ror#5 1707 1.2 christos ld1 {v4.4s},[x16],#16 1708 1.2 christos add w3,w3,w13 1709 1.2 christos orr w12,w12,w15 1710 1.2 christos eor w11,w11,w7,ror#19 1711 1.2 christos eor w15,w3,w3,ror#11 1712 1.2 christos rev32 v0.16b,v0.16b 1713 1.2 christos add w10,w10,w12 1714 1.2 christos ror w11,w11,#6 1715 1.2 christos eor w13,w3,w4 1716 1.2 christos eor w15,w15,w3,ror#20 1717 1.2 christos add v4.4s,v4.4s,v0.4s 1718 1.2 christos add w10,w10,w11 1719 1.2 christos ldr w12,[sp,#4] 1720 1.2 christos and w14,w14,w13 1721 1.2 christos ror w15,w15,#2 1722 1.2 christos add w6,w6,w10 1723 1.2 christos eor w14,w14,w4 1724 1.2 christos add w9,w9,w12 1725 1.2 christos add w10,w10,w15 1726 1.2 christos and w12,w7,w6 1727 1.2 christos bic w15,w8,w6 1728 1.2 christos eor w11,w6,w6,ror#5 1729 1.2 christos add w10,w10,w14 1730 1.2 christos orr w12,w12,w15 1731 1.2 christos eor w11,w11,w6,ror#19 1732 1.2 christos eor w15,w10,w10,ror#11 1733 1.2 christos add w9,w9,w12 1734 1.2 christos ror w11,w11,#6 1735 1.2 christos eor w14,w10,w3 1736 1.2 christos eor w15,w15,w10,ror#20 1737 1.2 christos add w9,w9,w11 1738 1.2 christos ldr w12,[sp,#8] 1739 1.2 christos and w13,w13,w14 1740 1.2 christos ror w15,w15,#2 1741 1.2 christos add w5,w5,w9 1742 1.2 christos eor w13,w13,w3 1743 1.2 christos add w8,w8,w12 1744 1.2 christos add w9,w9,w15 1745 1.2 christos and w12,w6,w5 1746 1.2 christos bic w15,w7,w5 1747 1.2 christos eor w11,w5,w5,ror#5 1748 1.2 christos add w9,w9,w13 1749 1.2 christos orr w12,w12,w15 1750 1.2 christos eor w11,w11,w5,ror#19 1751 1.2 christos eor w15,w9,w9,ror#11 1752 1.2 christos add w8,w8,w12 1753 1.2 christos ror w11,w11,#6 1754 1.2 christos eor w13,w9,w10 1755 1.2 christos eor w15,w15,w9,ror#20 1756 1.2 christos add w8,w8,w11 1757 1.2 christos ldr w12,[sp,#12] 1758 1.2 christos and w14,w14,w13 1759 1.2 christos ror w15,w15,#2 1760 1.2 christos add w4,w4,w8 1761 1.2 christos eor w14,w14,w10 1762 1.2 christos add w7,w7,w12 1763 1.2 christos add w8,w8,w15 1764 1.2 christos and w12,w5,w4 1765 1.2 christos bic w15,w6,w4 1766 1.2 christos eor w11,w4,w4,ror#5 1767 1.2 christos add w8,w8,w14 1768 1.2 christos orr w12,w12,w15 1769 1.2 christos eor w11,w11,w4,ror#19 1770 1.2 christos eor w15,w8,w8,ror#11 1771 1.2 christos add w7,w7,w12 1772 1.2 christos ror w11,w11,#6 1773 1.2 christos eor w14,w8,w9 1774 1.2 christos eor w15,w15,w8,ror#20 1775 1.2 christos add w7,w7,w11 1776 1.2 christos ldr w12,[sp,#16] 1777 1.2 christos and w13,w13,w14 1778 1.2 christos ror w15,w15,#2 1779 1.2 christos add w3,w3,w7 1780 1.2 christos eor w13,w13,w9 1781 1.2 christos st1 {v4.4s},[x17], #16 1782 1.2 christos add w6,w6,w12 1783 1.2 christos add w7,w7,w15 1784 1.2 christos and w12,w4,w3 1785 1.2 christos ld1 {v1.16b},[x1],#16 1786 1.2 christos bic w15,w5,w3 1787 1.2 christos eor w11,w3,w3,ror#5 1788 1.2 christos ld1 {v4.4s},[x16],#16 1789 1.2 christos add w7,w7,w13 1790 1.2 christos orr w12,w12,w15 1791 1.2 christos eor w11,w11,w3,ror#19 1792 1.2 christos eor w15,w7,w7,ror#11 1793 1.2 christos rev32 v1.16b,v1.16b 1794 1.2 christos add w6,w6,w12 1795 1.2 christos ror w11,w11,#6 1796 1.2 christos eor w13,w7,w8 1797 1.2 christos eor w15,w15,w7,ror#20 1798 1.2 christos add v4.4s,v4.4s,v1.4s 1799 1.2 christos add w6,w6,w11 1800 1.2 christos ldr w12,[sp,#20] 1801 1.2 christos and w14,w14,w13 1802 1.2 christos ror w15,w15,#2 1803 1.2 christos add w10,w10,w6 1804 1.2 christos eor w14,w14,w8 1805 1.2 christos add w5,w5,w12 1806 1.2 christos add w6,w6,w15 1807 1.2 christos and w12,w3,w10 1808 1.2 christos bic w15,w4,w10 1809 1.2 christos eor w11,w10,w10,ror#5 1810 1.2 christos add w6,w6,w14 1811 1.2 christos orr w12,w12,w15 1812 1.2 christos eor w11,w11,w10,ror#19 1813 1.2 christos eor w15,w6,w6,ror#11 1814 1.2 christos add w5,w5,w12 1815 1.2 christos ror w11,w11,#6 1816 1.2 christos eor w14,w6,w7 1817 1.2 christos eor w15,w15,w6,ror#20 1818 1.2 christos add w5,w5,w11 1819 1.2 christos ldr w12,[sp,#24] 1820 1.2 christos and w13,w13,w14 1821 1.2 christos ror w15,w15,#2 1822 1.2 christos add w9,w9,w5 1823 1.2 christos eor w13,w13,w7 1824 1.2 christos add w4,w4,w12 1825 1.2 christos add w5,w5,w15 1826 1.2 christos and w12,w10,w9 1827 1.2 christos bic w15,w3,w9 1828 1.2 christos eor w11,w9,w9,ror#5 1829 1.2 christos add w5,w5,w13 1830 1.2 christos orr w12,w12,w15 1831 1.2 christos eor w11,w11,w9,ror#19 1832 1.2 christos eor w15,w5,w5,ror#11 1833 1.2 christos add w4,w4,w12 1834 1.2 christos ror w11,w11,#6 1835 1.2 christos eor w13,w5,w6 1836 1.2 christos eor w15,w15,w5,ror#20 1837 1.2 christos add w4,w4,w11 1838 1.2 christos ldr w12,[sp,#28] 1839 1.2 christos and w14,w14,w13 1840 1.2 christos ror w15,w15,#2 1841 1.2 christos add w8,w8,w4 1842 1.2 christos eor w14,w14,w6 1843 1.2 christos add w3,w3,w12 1844 1.2 christos add w4,w4,w15 1845 1.2 christos and w12,w9,w8 1846 1.2 christos bic w15,w10,w8 1847 1.2 christos eor w11,w8,w8,ror#5 1848 1.2 christos add w4,w4,w14 1849 1.2 christos orr w12,w12,w15 1850 1.2 christos eor w11,w11,w8,ror#19 1851 1.2 christos eor w15,w4,w4,ror#11 1852 1.2 christos add w3,w3,w12 1853 1.2 christos ror w11,w11,#6 1854 1.2 christos eor w14,w4,w5 1855 1.2 christos eor w15,w15,w4,ror#20 1856 1.2 christos add w3,w3,w11 1857 1.2 christos ldr w12,[sp,#32] 1858 1.2 christos and w13,w13,w14 1859 1.2 christos ror w15,w15,#2 1860 1.2 christos add w7,w7,w3 1861 1.2 christos eor w13,w13,w5 1862 1.2 christos st1 {v4.4s},[x17], #16 1863 1.2 christos add w10,w10,w12 1864 1.2 christos add w3,w3,w15 1865 1.2 christos and w12,w8,w7 1866 1.2 christos ld1 {v2.16b},[x1],#16 1867 1.2 christos bic w15,w9,w7 1868 1.2 christos eor w11,w7,w7,ror#5 1869 1.2 christos ld1 {v4.4s},[x16],#16 1870 1.2 christos add w3,w3,w13 1871 1.2 christos orr w12,w12,w15 1872 1.2 christos eor w11,w11,w7,ror#19 1873 1.2 christos eor w15,w3,w3,ror#11 1874 1.2 christos rev32 v2.16b,v2.16b 1875 1.2 christos add w10,w10,w12 1876 1.2 christos ror w11,w11,#6 1877 1.2 christos eor w13,w3,w4 1878 1.2 christos eor w15,w15,w3,ror#20 1879 1.2 christos add v4.4s,v4.4s,v2.4s 1880 1.2 christos add w10,w10,w11 1881 1.2 christos ldr w12,[sp,#36] 1882 1.2 christos and w14,w14,w13 1883 1.2 christos ror w15,w15,#2 1884 1.2 christos add w6,w6,w10 1885 1.2 christos eor w14,w14,w4 1886 1.2 christos add w9,w9,w12 1887 1.2 christos add w10,w10,w15 1888 1.2 christos and w12,w7,w6 1889 1.2 christos bic w15,w8,w6 1890 1.2 christos eor w11,w6,w6,ror#5 1891 1.2 christos add w10,w10,w14 1892 1.2 christos orr w12,w12,w15 1893 1.2 christos eor w11,w11,w6,ror#19 1894 1.2 christos eor w15,w10,w10,ror#11 1895 1.2 christos add w9,w9,w12 1896 1.2 christos ror w11,w11,#6 1897 1.2 christos eor w14,w10,w3 1898 1.2 christos eor w15,w15,w10,ror#20 1899 1.2 christos add w9,w9,w11 1900 1.2 christos ldr w12,[sp,#40] 1901 1.2 christos and w13,w13,w14 1902 1.2 christos ror w15,w15,#2 1903 1.2 christos add w5,w5,w9 1904 1.2 christos eor w13,w13,w3 1905 1.2 christos add w8,w8,w12 1906 1.2 christos add w9,w9,w15 1907 1.2 christos and w12,w6,w5 1908 1.2 christos bic w15,w7,w5 1909 1.2 christos eor w11,w5,w5,ror#5 1910 1.2 christos add w9,w9,w13 1911 1.2 christos orr w12,w12,w15 1912 1.2 christos eor w11,w11,w5,ror#19 1913 1.2 christos eor w15,w9,w9,ror#11 1914 1.2 christos add w8,w8,w12 1915 1.2 christos ror w11,w11,#6 1916 1.2 christos eor w13,w9,w10 1917 1.2 christos eor w15,w15,w9,ror#20 1918 1.2 christos add w8,w8,w11 1919 1.2 christos ldr w12,[sp,#44] 1920 1.2 christos and w14,w14,w13 1921 1.2 christos ror w15,w15,#2 1922 1.2 christos add w4,w4,w8 1923 1.2 christos eor w14,w14,w10 1924 1.2 christos add w7,w7,w12 1925 1.2 christos add w8,w8,w15 1926 1.2 christos and w12,w5,w4 1927 1.2 christos bic w15,w6,w4 1928 1.2 christos eor w11,w4,w4,ror#5 1929 1.2 christos add w8,w8,w14 1930 1.2 christos orr w12,w12,w15 1931 1.2 christos eor w11,w11,w4,ror#19 1932 1.2 christos eor w15,w8,w8,ror#11 1933 1.2 christos add w7,w7,w12 1934 1.2 christos ror w11,w11,#6 1935 1.2 christos eor w14,w8,w9 1936 1.2 christos eor w15,w15,w8,ror#20 1937 1.2 christos add w7,w7,w11 1938 1.2 christos ldr w12,[sp,#48] 1939 1.2 christos and w13,w13,w14 1940 1.2 christos ror w15,w15,#2 1941 1.2 christos add w3,w3,w7 1942 1.2 christos eor w13,w13,w9 1943 1.2 christos st1 {v4.4s},[x17], #16 1944 1.2 christos add w6,w6,w12 1945 1.2 christos add w7,w7,w15 1946 1.2 christos and w12,w4,w3 1947 1.2 christos ld1 {v3.16b},[x1],#16 1948 1.2 christos bic w15,w5,w3 1949 1.2 christos eor w11,w3,w3,ror#5 1950 1.2 christos ld1 {v4.4s},[x16],#16 1951 1.2 christos add w7,w7,w13 1952 1.2 christos orr w12,w12,w15 1953 1.2 christos eor w11,w11,w3,ror#19 1954 1.2 christos eor w15,w7,w7,ror#11 1955 1.2 christos rev32 v3.16b,v3.16b 1956 1.2 christos add w6,w6,w12 1957 1.2 christos ror w11,w11,#6 1958 1.2 christos eor w13,w7,w8 1959 1.2 christos eor w15,w15,w7,ror#20 1960 1.2 christos add v4.4s,v4.4s,v3.4s 1961 1.2 christos add w6,w6,w11 1962 1.2 christos ldr w12,[sp,#52] 1963 1.2 christos and w14,w14,w13 1964 1.2 christos ror w15,w15,#2 1965 1.2 christos add w10,w10,w6 1966 1.2 christos eor w14,w14,w8 1967 1.2 christos add w5,w5,w12 1968 1.2 christos add w6,w6,w15 1969 1.2 christos and w12,w3,w10 1970 1.2 christos bic w15,w4,w10 1971 1.2 christos eor w11,w10,w10,ror#5 1972 1.2 christos add w6,w6,w14 1973 1.2 christos orr w12,w12,w15 1974 1.2 christos eor w11,w11,w10,ror#19 1975 1.2 christos eor w15,w6,w6,ror#11 1976 1.2 christos add w5,w5,w12 1977 1.2 christos ror w11,w11,#6 1978 1.2 christos eor w14,w6,w7 1979 1.2 christos eor w15,w15,w6,ror#20 1980 1.2 christos add w5,w5,w11 1981 1.2 christos ldr w12,[sp,#56] 1982 1.2 christos and w13,w13,w14 1983 1.2 christos ror w15,w15,#2 1984 1.2 christos add w9,w9,w5 1985 1.2 christos eor w13,w13,w7 1986 1.2 christos add w4,w4,w12 1987 1.2 christos add w5,w5,w15 1988 1.2 christos and w12,w10,w9 1989 1.2 christos bic w15,w3,w9 1990 1.2 christos eor w11,w9,w9,ror#5 1991 1.2 christos add w5,w5,w13 1992 1.2 christos orr w12,w12,w15 1993 1.2 christos eor w11,w11,w9,ror#19 1994 1.2 christos eor w15,w5,w5,ror#11 1995 1.2 christos add w4,w4,w12 1996 1.2 christos ror w11,w11,#6 1997 1.2 christos eor w13,w5,w6 1998 1.2 christos eor w15,w15,w5,ror#20 1999 1.2 christos add w4,w4,w11 2000 1.2 christos ldr w12,[sp,#60] 2001 1.2 christos and w14,w14,w13 2002 1.2 christos ror w15,w15,#2 2003 1.2 christos add w8,w8,w4 2004 1.2 christos eor w14,w14,w6 2005 1.2 christos add w3,w3,w12 2006 1.2 christos add w4,w4,w15 2007 1.2 christos and w12,w9,w8 2008 1.2 christos bic w15,w10,w8 2009 1.2 christos eor w11,w8,w8,ror#5 2010 1.2 christos add w4,w4,w14 2011 1.2 christos orr w12,w12,w15 2012 1.2 christos eor w11,w11,w8,ror#19 2013 1.2 christos eor w15,w4,w4,ror#11 2014 1.2 christos add w3,w3,w12 2015 1.2 christos ror w11,w11,#6 2016 1.2 christos eor w14,w4,w5 2017 1.2 christos eor w15,w15,w4,ror#20 2018 1.2 christos add w3,w3,w11 2019 1.2 christos and w13,w13,w14 2020 1.2 christos ror w15,w15,#2 2021 1.2 christos add w7,w7,w3 2022 1.2 christos eor w13,w13,w5 2023 1.2 christos st1 {v4.4s},[x17], #16 2024 1.2 christos add w3,w3,w15 // h+=Sigma0(a) from the past 2025 1.2 christos ldp w11,w12,[x0,#0] 2026 1.2 christos add w3,w3,w13 // h+=Maj(a,b,c) from the past 2027 1.2 christos ldp w13,w14,[x0,#8] 2028 1.2 christos add w3,w3,w11 // accumulate 2029 1.2 christos add w4,w4,w12 2030 1.2 christos ldp w11,w12,[x0,#16] 2031 1.2 christos add w5,w5,w13 2032 1.2 christos add w6,w6,w14 2033 1.2 christos ldp w13,w14,[x0,#24] 2034 1.2 christos add w7,w7,w11 2035 1.2 christos add w8,w8,w12 2036 1.2 christos ldr w12,[sp,#0] 2037 1.2 christos stp w3,w4,[x0,#0] 2038 1.2 christos add w9,w9,w13 2039 1.2 christos mov w13,wzr 2040 1.2 christos stp w5,w6,[x0,#8] 2041 1.2 christos add w10,w10,w14 2042 1.2 christos stp w7,w8,[x0,#16] 2043 1.2 christos eor w14,w4,w5 2044 1.2 christos stp w9,w10,[x0,#24] 2045 1.2 christos mov w15,wzr 2046 1.2 christos mov x17,sp 2047 1.2 christos b.ne .L_00_48 2048 1.2 christos 2049 1.2 christos ldr x29,[x29] 2050 1.2 christos add sp,sp,#16*4+16 2051 1.2 christos ret 2052 1.2 christos .size sha256_block_neon,.-sha256_block_neon 2053