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