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