1// This file is generated from a similarly-named Perl script in the BoringSSL 2// source tree. Do not edit by hand. 3 4#include <openssl/asm_base.h> 5 6#if !defined(OPENSSL_NO_ASM) && defined(OPENSSL_AARCH64) && defined(__ELF__) 7// Copyright 2014-2020 The OpenSSL Project Authors. All Rights Reserved. 8// 9// Licensed under the OpenSSL license (the "License"). You may not use 10// this file except in compliance with the License. You can obtain a copy 11// in the file LICENSE in the source distribution or at 12// https://www.openssl.org/source/license.html 13 14// ==================================================================== 15// Written by Andy Polyakov <[email protected]> for the OpenSSL 16// project. The module is, however, dual licensed under OpenSSL and 17// CRYPTOGAMS licenses depending on where you obtain it. For further 18// details see http://www.openssl.org/~appro/cryptogams/. 19// 20// Permission to use under GPLv2 terms is granted. 21// ==================================================================== 22// 23// SHA256/512 for ARMv8. 24// 25// Performance in cycles per processed byte and improvement coefficient 26// over code generated with "default" compiler: 27// 28// SHA256-hw SHA256(*) SHA512 29// Apple A7 1.97 10.5 (+33%) 6.73 (-1%(**)) 30// Cortex-A53 2.38 15.5 (+115%) 10.0 (+150%(***)) 31// Cortex-A57 2.31 11.6 (+86%) 7.51 (+260%(***)) 32// Denver 2.01 10.5 (+26%) 6.70 (+8%) 33// X-Gene 20.0 (+100%) 12.8 (+300%(***)) 34// Mongoose 2.36 13.0 (+50%) 8.36 (+33%) 35// Kryo 1.92 17.4 (+30%) 11.2 (+8%) 36// 37// (*) Software SHA256 results are of lesser relevance, presented 38// mostly for informational purposes. 39// (**) The result is a trade-off: it's possible to improve it by 40// 10% (or by 1 cycle per round), but at the cost of 20% loss 41// on Cortex-A53 (or by 4 cycles per round). 42// (***) Super-impressive coefficients over gcc-generated code are 43// indication of some compiler "pathology", most notably code 44// generated with -mgeneral-regs-only is significantly faster 45// and the gap is only 40-90%. 46 47#ifndef __KERNEL__ 48# include <openssl/arm_arch.h> 49#endif 50 51.text 52 53.globl sha256_block_data_order_nohw 54.hidden sha256_block_data_order_nohw 55.type sha256_block_data_order_nohw,%function 56.align 6 57sha256_block_data_order_nohw: 58 AARCH64_SIGN_LINK_REGISTER 59 stp x29,x30,[sp,#-128]! 60 add x29,sp,#0 61 62 stp x19,x20,[sp,#16] 63 stp x21,x22,[sp,#32] 64 stp x23,x24,[sp,#48] 65 stp x25,x26,[sp,#64] 66 stp x27,x28,[sp,#80] 67 sub sp,sp,#4*4 68 69 ldp w20,w21,[x0] // load context 70 ldp w22,w23,[x0,#2*4] 71 ldp w24,w25,[x0,#4*4] 72 add x2,x1,x2,lsl#6 // end of input 73 ldp w26,w27,[x0,#6*4] 74 adrp x30,.LK256 75 add x30,x30,:lo12:.LK256 76 stp x0,x2,[x29,#96] 77 78.Loop: 79 ldp w3,w4,[x1],#2*4 80 ldr w19,[x30],#4 // *K++ 81 eor w28,w21,w22 // magic seed 82 str x1,[x29,#112] 83#ifndef __AARCH64EB__ 84 rev w3,w3 // 0 85#endif 86 ror w16,w24,#6 87 add w27,w27,w19 // h+=K[i] 88 eor w6,w24,w24,ror#14 89 and w17,w25,w24 90 bic w19,w26,w24 91 add w27,w27,w3 // h+=X[i] 92 orr w17,w17,w19 // Ch(e,f,g) 93 eor w19,w20,w21 // a^b, b^c in next round 94 eor w16,w16,w6,ror#11 // Sigma1(e) 95 ror w6,w20,#2 96 add w27,w27,w17 // h+=Ch(e,f,g) 97 eor w17,w20,w20,ror#9 98 add w27,w27,w16 // h+=Sigma1(e) 99 and w28,w28,w19 // (b^c)&=(a^b) 100 add w23,w23,w27 // d+=h 101 eor w28,w28,w21 // Maj(a,b,c) 102 eor w17,w6,w17,ror#13 // Sigma0(a) 103 add w27,w27,w28 // h+=Maj(a,b,c) 104 ldr w28,[x30],#4 // *K++, w19 in next round 105 //add w27,w27,w17 // h+=Sigma0(a) 106#ifndef __AARCH64EB__ 107 rev w4,w4 // 1 108#endif 109 ldp w5,w6,[x1],#2*4 110 add w27,w27,w17 // h+=Sigma0(a) 111 ror w16,w23,#6 112 add w26,w26,w28 // h+=K[i] 113 eor w7,w23,w23,ror#14 114 and w17,w24,w23 115 bic w28,w25,w23 116 add w26,w26,w4 // h+=X[i] 117 orr w17,w17,w28 // Ch(e,f,g) 118 eor w28,w27,w20 // a^b, b^c in next round 119 eor w16,w16,w7,ror#11 // Sigma1(e) 120 ror w7,w27,#2 121 add w26,w26,w17 // h+=Ch(e,f,g) 122 eor w17,w27,w27,ror#9 123 add w26,w26,w16 // h+=Sigma1(e) 124 and w19,w19,w28 // (b^c)&=(a^b) 125 add w22,w22,w26 // d+=h 126 eor w19,w19,w20 // Maj(a,b,c) 127 eor w17,w7,w17,ror#13 // Sigma0(a) 128 add w26,w26,w19 // h+=Maj(a,b,c) 129 ldr w19,[x30],#4 // *K++, w28 in next round 130 //add w26,w26,w17 // h+=Sigma0(a) 131#ifndef __AARCH64EB__ 132 rev w5,w5 // 2 133#endif 134 add w26,w26,w17 // h+=Sigma0(a) 135 ror w16,w22,#6 136 add w25,w25,w19 // h+=K[i] 137 eor w8,w22,w22,ror#14 138 and w17,w23,w22 139 bic w19,w24,w22 140 add w25,w25,w5 // h+=X[i] 141 orr w17,w17,w19 // Ch(e,f,g) 142 eor w19,w26,w27 // a^b, b^c in next round 143 eor w16,w16,w8,ror#11 // Sigma1(e) 144 ror w8,w26,#2 145 add w25,w25,w17 // h+=Ch(e,f,g) 146 eor w17,w26,w26,ror#9 147 add w25,w25,w16 // h+=Sigma1(e) 148 and w28,w28,w19 // (b^c)&=(a^b) 149 add w21,w21,w25 // d+=h 150 eor w28,w28,w27 // Maj(a,b,c) 151 eor w17,w8,w17,ror#13 // Sigma0(a) 152 add w25,w25,w28 // h+=Maj(a,b,c) 153 ldr w28,[x30],#4 // *K++, w19 in next round 154 //add w25,w25,w17 // h+=Sigma0(a) 155#ifndef __AARCH64EB__ 156 rev w6,w6 // 3 157#endif 158 ldp w7,w8,[x1],#2*4 159 add w25,w25,w17 // h+=Sigma0(a) 160 ror w16,w21,#6 161 add w24,w24,w28 // h+=K[i] 162 eor w9,w21,w21,ror#14 163 and w17,w22,w21 164 bic w28,w23,w21 165 add w24,w24,w6 // h+=X[i] 166 orr w17,w17,w28 // Ch(e,f,g) 167 eor w28,w25,w26 // a^b, b^c in next round 168 eor w16,w16,w9,ror#11 // Sigma1(e) 169 ror w9,w25,#2 170 add w24,w24,w17 // h+=Ch(e,f,g) 171 eor w17,w25,w25,ror#9 172 add w24,w24,w16 // h+=Sigma1(e) 173 and w19,w19,w28 // (b^c)&=(a^b) 174 add w20,w20,w24 // d+=h 175 eor w19,w19,w26 // Maj(a,b,c) 176 eor w17,w9,w17,ror#13 // Sigma0(a) 177 add w24,w24,w19 // h+=Maj(a,b,c) 178 ldr w19,[x30],#4 // *K++, w28 in next round 179 //add w24,w24,w17 // h+=Sigma0(a) 180#ifndef __AARCH64EB__ 181 rev w7,w7 // 4 182#endif 183 add w24,w24,w17 // h+=Sigma0(a) 184 ror w16,w20,#6 185 add w23,w23,w19 // h+=K[i] 186 eor w10,w20,w20,ror#14 187 and w17,w21,w20 188 bic w19,w22,w20 189 add w23,w23,w7 // h+=X[i] 190 orr w17,w17,w19 // Ch(e,f,g) 191 eor w19,w24,w25 // a^b, b^c in next round 192 eor w16,w16,w10,ror#11 // Sigma1(e) 193 ror w10,w24,#2 194 add w23,w23,w17 // h+=Ch(e,f,g) 195 eor w17,w24,w24,ror#9 196 add w23,w23,w16 // h+=Sigma1(e) 197 and w28,w28,w19 // (b^c)&=(a^b) 198 add w27,w27,w23 // d+=h 199 eor w28,w28,w25 // Maj(a,b,c) 200 eor w17,w10,w17,ror#13 // Sigma0(a) 201 add w23,w23,w28 // h+=Maj(a,b,c) 202 ldr w28,[x30],#4 // *K++, w19 in next round 203 //add w23,w23,w17 // h+=Sigma0(a) 204#ifndef __AARCH64EB__ 205 rev w8,w8 // 5 206#endif 207 ldp w9,w10,[x1],#2*4 208 add w23,w23,w17 // h+=Sigma0(a) 209 ror w16,w27,#6 210 add w22,w22,w28 // h+=K[i] 211 eor w11,w27,w27,ror#14 212 and w17,w20,w27 213 bic w28,w21,w27 214 add w22,w22,w8 // h+=X[i] 215 orr w17,w17,w28 // Ch(e,f,g) 216 eor w28,w23,w24 // a^b, b^c in next round 217 eor w16,w16,w11,ror#11 // Sigma1(e) 218 ror w11,w23,#2 219 add w22,w22,w17 // h+=Ch(e,f,g) 220 eor w17,w23,w23,ror#9 221 add w22,w22,w16 // h+=Sigma1(e) 222 and w19,w19,w28 // (b^c)&=(a^b) 223 add w26,w26,w22 // d+=h 224 eor w19,w19,w24 // Maj(a,b,c) 225 eor w17,w11,w17,ror#13 // Sigma0(a) 226 add w22,w22,w19 // h+=Maj(a,b,c) 227 ldr w19,[x30],#4 // *K++, w28 in next round 228 //add w22,w22,w17 // h+=Sigma0(a) 229#ifndef __AARCH64EB__ 230 rev w9,w9 // 6 231#endif 232 add w22,w22,w17 // h+=Sigma0(a) 233 ror w16,w26,#6 234 add w21,w21,w19 // h+=K[i] 235 eor w12,w26,w26,ror#14 236 and w17,w27,w26 237 bic w19,w20,w26 238 add w21,w21,w9 // h+=X[i] 239 orr w17,w17,w19 // Ch(e,f,g) 240 eor w19,w22,w23 // a^b, b^c in next round 241 eor w16,w16,w12,ror#11 // Sigma1(e) 242 ror w12,w22,#2 243 add w21,w21,w17 // h+=Ch(e,f,g) 244 eor w17,w22,w22,ror#9 245 add w21,w21,w16 // h+=Sigma1(e) 246 and w28,w28,w19 // (b^c)&=(a^b) 247 add w25,w25,w21 // d+=h 248 eor w28,w28,w23 // Maj(a,b,c) 249 eor w17,w12,w17,ror#13 // Sigma0(a) 250 add w21,w21,w28 // h+=Maj(a,b,c) 251 ldr w28,[x30],#4 // *K++, w19 in next round 252 //add w21,w21,w17 // h+=Sigma0(a) 253#ifndef __AARCH64EB__ 254 rev w10,w10 // 7 255#endif 256 ldp w11,w12,[x1],#2*4 257 add w21,w21,w17 // h+=Sigma0(a) 258 ror w16,w25,#6 259 add w20,w20,w28 // h+=K[i] 260 eor w13,w25,w25,ror#14 261 and w17,w26,w25 262 bic w28,w27,w25 263 add w20,w20,w10 // h+=X[i] 264 orr w17,w17,w28 // Ch(e,f,g) 265 eor w28,w21,w22 // a^b, b^c in next round 266 eor w16,w16,w13,ror#11 // Sigma1(e) 267 ror w13,w21,#2 268 add w20,w20,w17 // h+=Ch(e,f,g) 269 eor w17,w21,w21,ror#9 270 add w20,w20,w16 // h+=Sigma1(e) 271 and w19,w19,w28 // (b^c)&=(a^b) 272 add w24,w24,w20 // d+=h 273 eor w19,w19,w22 // Maj(a,b,c) 274 eor w17,w13,w17,ror#13 // Sigma0(a) 275 add w20,w20,w19 // h+=Maj(a,b,c) 276 ldr w19,[x30],#4 // *K++, w28 in next round 277 //add w20,w20,w17 // h+=Sigma0(a) 278#ifndef __AARCH64EB__ 279 rev w11,w11 // 8 280#endif 281 add w20,w20,w17 // h+=Sigma0(a) 282 ror w16,w24,#6 283 add w27,w27,w19 // h+=K[i] 284 eor w14,w24,w24,ror#14 285 and w17,w25,w24 286 bic w19,w26,w24 287 add w27,w27,w11 // h+=X[i] 288 orr w17,w17,w19 // Ch(e,f,g) 289 eor w19,w20,w21 // a^b, b^c in next round 290 eor w16,w16,w14,ror#11 // Sigma1(e) 291 ror w14,w20,#2 292 add w27,w27,w17 // h+=Ch(e,f,g) 293 eor w17,w20,w20,ror#9 294 add w27,w27,w16 // h+=Sigma1(e) 295 and w28,w28,w19 // (b^c)&=(a^b) 296 add w23,w23,w27 // d+=h 297 eor w28,w28,w21 // Maj(a,b,c) 298 eor w17,w14,w17,ror#13 // Sigma0(a) 299 add w27,w27,w28 // h+=Maj(a,b,c) 300 ldr w28,[x30],#4 // *K++, w19 in next round 301 //add w27,w27,w17 // h+=Sigma0(a) 302#ifndef __AARCH64EB__ 303 rev w12,w12 // 9 304#endif 305 ldp w13,w14,[x1],#2*4 306 add w27,w27,w17 // h+=Sigma0(a) 307 ror w16,w23,#6 308 add w26,w26,w28 // h+=K[i] 309 eor w15,w23,w23,ror#14 310 and w17,w24,w23 311 bic w28,w25,w23 312 add w26,w26,w12 // h+=X[i] 313 orr w17,w17,w28 // Ch(e,f,g) 314 eor w28,w27,w20 // a^b, b^c in next round 315 eor w16,w16,w15,ror#11 // Sigma1(e) 316 ror w15,w27,#2 317 add w26,w26,w17 // h+=Ch(e,f,g) 318 eor w17,w27,w27,ror#9 319 add w26,w26,w16 // h+=Sigma1(e) 320 and w19,w19,w28 // (b^c)&=(a^b) 321 add w22,w22,w26 // d+=h 322 eor w19,w19,w20 // Maj(a,b,c) 323 eor w17,w15,w17,ror#13 // Sigma0(a) 324 add w26,w26,w19 // h+=Maj(a,b,c) 325 ldr w19,[x30],#4 // *K++, w28 in next round 326 //add w26,w26,w17 // h+=Sigma0(a) 327#ifndef __AARCH64EB__ 328 rev w13,w13 // 10 329#endif 330 add w26,w26,w17 // h+=Sigma0(a) 331 ror w16,w22,#6 332 add w25,w25,w19 // h+=K[i] 333 eor w0,w22,w22,ror#14 334 and w17,w23,w22 335 bic w19,w24,w22 336 add w25,w25,w13 // h+=X[i] 337 orr w17,w17,w19 // Ch(e,f,g) 338 eor w19,w26,w27 // a^b, b^c in next round 339 eor w16,w16,w0,ror#11 // Sigma1(e) 340 ror w0,w26,#2 341 add w25,w25,w17 // h+=Ch(e,f,g) 342 eor w17,w26,w26,ror#9 343 add w25,w25,w16 // h+=Sigma1(e) 344 and w28,w28,w19 // (b^c)&=(a^b) 345 add w21,w21,w25 // d+=h 346 eor w28,w28,w27 // Maj(a,b,c) 347 eor w17,w0,w17,ror#13 // Sigma0(a) 348 add w25,w25,w28 // h+=Maj(a,b,c) 349 ldr w28,[x30],#4 // *K++, w19 in next round 350 //add w25,w25,w17 // h+=Sigma0(a) 351#ifndef __AARCH64EB__ 352 rev w14,w14 // 11 353#endif 354 ldp w15,w0,[x1],#2*4 355 add w25,w25,w17 // h+=Sigma0(a) 356 str w6,[sp,#12] 357 ror w16,w21,#6 358 add w24,w24,w28 // h+=K[i] 359 eor w6,w21,w21,ror#14 360 and w17,w22,w21 361 bic w28,w23,w21 362 add w24,w24,w14 // h+=X[i] 363 orr w17,w17,w28 // Ch(e,f,g) 364 eor w28,w25,w26 // a^b, b^c in next round 365 eor w16,w16,w6,ror#11 // Sigma1(e) 366 ror w6,w25,#2 367 add w24,w24,w17 // h+=Ch(e,f,g) 368 eor w17,w25,w25,ror#9 369 add w24,w24,w16 // h+=Sigma1(e) 370 and w19,w19,w28 // (b^c)&=(a^b) 371 add w20,w20,w24 // d+=h 372 eor w19,w19,w26 // Maj(a,b,c) 373 eor w17,w6,w17,ror#13 // Sigma0(a) 374 add w24,w24,w19 // h+=Maj(a,b,c) 375 ldr w19,[x30],#4 // *K++, w28 in next round 376 //add w24,w24,w17 // h+=Sigma0(a) 377#ifndef __AARCH64EB__ 378 rev w15,w15 // 12 379#endif 380 add w24,w24,w17 // h+=Sigma0(a) 381 str w7,[sp,#0] 382 ror w16,w20,#6 383 add w23,w23,w19 // h+=K[i] 384 eor w7,w20,w20,ror#14 385 and w17,w21,w20 386 bic w19,w22,w20 387 add w23,w23,w15 // h+=X[i] 388 orr w17,w17,w19 // Ch(e,f,g) 389 eor w19,w24,w25 // a^b, b^c in next round 390 eor w16,w16,w7,ror#11 // Sigma1(e) 391 ror w7,w24,#2 392 add w23,w23,w17 // h+=Ch(e,f,g) 393 eor w17,w24,w24,ror#9 394 add w23,w23,w16 // h+=Sigma1(e) 395 and w28,w28,w19 // (b^c)&=(a^b) 396 add w27,w27,w23 // d+=h 397 eor w28,w28,w25 // Maj(a,b,c) 398 eor w17,w7,w17,ror#13 // Sigma0(a) 399 add w23,w23,w28 // h+=Maj(a,b,c) 400 ldr w28,[x30],#4 // *K++, w19 in next round 401 //add w23,w23,w17 // h+=Sigma0(a) 402#ifndef __AARCH64EB__ 403 rev w0,w0 // 13 404#endif 405 ldp w1,w2,[x1] 406 add w23,w23,w17 // h+=Sigma0(a) 407 str w8,[sp,#4] 408 ror w16,w27,#6 409 add w22,w22,w28 // h+=K[i] 410 eor w8,w27,w27,ror#14 411 and w17,w20,w27 412 bic w28,w21,w27 413 add w22,w22,w0 // h+=X[i] 414 orr w17,w17,w28 // Ch(e,f,g) 415 eor w28,w23,w24 // a^b, b^c in next round 416 eor w16,w16,w8,ror#11 // Sigma1(e) 417 ror w8,w23,#2 418 add w22,w22,w17 // h+=Ch(e,f,g) 419 eor w17,w23,w23,ror#9 420 add w22,w22,w16 // h+=Sigma1(e) 421 and w19,w19,w28 // (b^c)&=(a^b) 422 add w26,w26,w22 // d+=h 423 eor w19,w19,w24 // Maj(a,b,c) 424 eor w17,w8,w17,ror#13 // Sigma0(a) 425 add w22,w22,w19 // h+=Maj(a,b,c) 426 ldr w19,[x30],#4 // *K++, w28 in next round 427 //add w22,w22,w17 // h+=Sigma0(a) 428#ifndef __AARCH64EB__ 429 rev w1,w1 // 14 430#endif 431 ldr w6,[sp,#12] 432 add w22,w22,w17 // h+=Sigma0(a) 433 str w9,[sp,#8] 434 ror w16,w26,#6 435 add w21,w21,w19 // h+=K[i] 436 eor w9,w26,w26,ror#14 437 and w17,w27,w26 438 bic w19,w20,w26 439 add w21,w21,w1 // h+=X[i] 440 orr w17,w17,w19 // Ch(e,f,g) 441 eor w19,w22,w23 // a^b, b^c in next round 442 eor w16,w16,w9,ror#11 // Sigma1(e) 443 ror w9,w22,#2 444 add w21,w21,w17 // h+=Ch(e,f,g) 445 eor w17,w22,w22,ror#9 446 add w21,w21,w16 // h+=Sigma1(e) 447 and w28,w28,w19 // (b^c)&=(a^b) 448 add w25,w25,w21 // d+=h 449 eor w28,w28,w23 // Maj(a,b,c) 450 eor w17,w9,w17,ror#13 // Sigma0(a) 451 add w21,w21,w28 // h+=Maj(a,b,c) 452 ldr w28,[x30],#4 // *K++, w19 in next round 453 //add w21,w21,w17 // h+=Sigma0(a) 454#ifndef __AARCH64EB__ 455 rev w2,w2 // 15 456#endif 457 ldr w7,[sp,#0] 458 add w21,w21,w17 // h+=Sigma0(a) 459 str w10,[sp,#12] 460 ror w16,w25,#6 461 add w20,w20,w28 // h+=K[i] 462 ror w9,w4,#7 463 and w17,w26,w25 464 ror w8,w1,#17 465 bic w28,w27,w25 466 ror w10,w21,#2 467 add w20,w20,w2 // h+=X[i] 468 eor w16,w16,w25,ror#11 469 eor w9,w9,w4,ror#18 470 orr w17,w17,w28 // Ch(e,f,g) 471 eor w28,w21,w22 // a^b, b^c in next round 472 eor w16,w16,w25,ror#25 // Sigma1(e) 473 eor w10,w10,w21,ror#13 474 add w20,w20,w17 // h+=Ch(e,f,g) 475 and w19,w19,w28 // (b^c)&=(a^b) 476 eor w8,w8,w1,ror#19 477 eor w9,w9,w4,lsr#3 // sigma0(X[i+1]) 478 add w20,w20,w16 // h+=Sigma1(e) 479 eor w19,w19,w22 // Maj(a,b,c) 480 eor w17,w10,w21,ror#22 // Sigma0(a) 481 eor w8,w8,w1,lsr#10 // sigma1(X[i+14]) 482 add w3,w3,w12 483 add w24,w24,w20 // d+=h 484 add w20,w20,w19 // h+=Maj(a,b,c) 485 ldr w19,[x30],#4 // *K++, w28 in next round 486 add w3,w3,w9 487 add w20,w20,w17 // h+=Sigma0(a) 488 add w3,w3,w8 489.Loop_16_xx: 490 ldr w8,[sp,#4] 491 str w11,[sp,#0] 492 ror w16,w24,#6 493 add w27,w27,w19 // h+=K[i] 494 ror w10,w5,#7 495 and w17,w25,w24 496 ror w9,w2,#17 497 bic w19,w26,w24 498 ror w11,w20,#2 499 add w27,w27,w3 // h+=X[i] 500 eor w16,w16,w24,ror#11 501 eor w10,w10,w5,ror#18 502 orr w17,w17,w19 // Ch(e,f,g) 503 eor w19,w20,w21 // a^b, b^c in next round 504 eor w16,w16,w24,ror#25 // Sigma1(e) 505 eor w11,w11,w20,ror#13 506 add w27,w27,w17 // h+=Ch(e,f,g) 507 and w28,w28,w19 // (b^c)&=(a^b) 508 eor w9,w9,w2,ror#19 509 eor w10,w10,w5,lsr#3 // sigma0(X[i+1]) 510 add w27,w27,w16 // h+=Sigma1(e) 511 eor w28,w28,w21 // Maj(a,b,c) 512 eor w17,w11,w20,ror#22 // Sigma0(a) 513 eor w9,w9,w2,lsr#10 // sigma1(X[i+14]) 514 add w4,w4,w13 515 add w23,w23,w27 // d+=h 516 add w27,w27,w28 // h+=Maj(a,b,c) 517 ldr w28,[x30],#4 // *K++, w19 in next round 518 add w4,w4,w10 519 add w27,w27,w17 // h+=Sigma0(a) 520 add w4,w4,w9 521 ldr w9,[sp,#8] 522 str w12,[sp,#4] 523 ror w16,w23,#6 524 add w26,w26,w28 // h+=K[i] 525 ror w11,w6,#7 526 and w17,w24,w23 527 ror w10,w3,#17 528 bic w28,w25,w23 529 ror w12,w27,#2 530 add w26,w26,w4 // h+=X[i] 531 eor w16,w16,w23,ror#11 532 eor w11,w11,w6,ror#18 533 orr w17,w17,w28 // Ch(e,f,g) 534 eor w28,w27,w20 // a^b, b^c in next round 535 eor w16,w16,w23,ror#25 // Sigma1(e) 536 eor w12,w12,w27,ror#13 537 add w26,w26,w17 // h+=Ch(e,f,g) 538 and w19,w19,w28 // (b^c)&=(a^b) 539 eor w10,w10,w3,ror#19 540 eor w11,w11,w6,lsr#3 // sigma0(X[i+1]) 541 add w26,w26,w16 // h+=Sigma1(e) 542 eor w19,w19,w20 // Maj(a,b,c) 543 eor w17,w12,w27,ror#22 // Sigma0(a) 544 eor w10,w10,w3,lsr#10 // sigma1(X[i+14]) 545 add w5,w5,w14 546 add w22,w22,w26 // d+=h 547 add w26,w26,w19 // h+=Maj(a,b,c) 548 ldr w19,[x30],#4 // *K++, w28 in next round 549 add w5,w5,w11 550 add w26,w26,w17 // h+=Sigma0(a) 551 add w5,w5,w10 552 ldr w10,[sp,#12] 553 str w13,[sp,#8] 554 ror w16,w22,#6 555 add w25,w25,w19 // h+=K[i] 556 ror w12,w7,#7 557 and w17,w23,w22 558 ror w11,w4,#17 559 bic w19,w24,w22 560 ror w13,w26,#2 561 add w25,w25,w5 // h+=X[i] 562 eor w16,w16,w22,ror#11 563 eor w12,w12,w7,ror#18 564 orr w17,w17,w19 // Ch(e,f,g) 565 eor w19,w26,w27 // a^b, b^c in next round 566 eor w16,w16,w22,ror#25 // Sigma1(e) 567 eor w13,w13,w26,ror#13 568 add w25,w25,w17 // h+=Ch(e,f,g) 569 and w28,w28,w19 // (b^c)&=(a^b) 570 eor w11,w11,w4,ror#19 571 eor w12,w12,w7,lsr#3 // sigma0(X[i+1]) 572 add w25,w25,w16 // h+=Sigma1(e) 573 eor w28,w28,w27 // Maj(a,b,c) 574 eor w17,w13,w26,ror#22 // Sigma0(a) 575 eor w11,w11,w4,lsr#10 // sigma1(X[i+14]) 576 add w6,w6,w15 577 add w21,w21,w25 // d+=h 578 add w25,w25,w28 // h+=Maj(a,b,c) 579 ldr w28,[x30],#4 // *K++, w19 in next round 580 add w6,w6,w12 581 add w25,w25,w17 // h+=Sigma0(a) 582 add w6,w6,w11 583 ldr w11,[sp,#0] 584 str w14,[sp,#12] 585 ror w16,w21,#6 586 add w24,w24,w28 // h+=K[i] 587 ror w13,w8,#7 588 and w17,w22,w21 589 ror w12,w5,#17 590 bic w28,w23,w21 591 ror w14,w25,#2 592 add w24,w24,w6 // h+=X[i] 593 eor w16,w16,w21,ror#11 594 eor w13,w13,w8,ror#18 595 orr w17,w17,w28 // Ch(e,f,g) 596 eor w28,w25,w26 // a^b, b^c in next round 597 eor w16,w16,w21,ror#25 // Sigma1(e) 598 eor w14,w14,w25,ror#13 599 add w24,w24,w17 // h+=Ch(e,f,g) 600 and w19,w19,w28 // (b^c)&=(a^b) 601 eor w12,w12,w5,ror#19 602 eor w13,w13,w8,lsr#3 // sigma0(X[i+1]) 603 add w24,w24,w16 // h+=Sigma1(e) 604 eor w19,w19,w26 // Maj(a,b,c) 605 eor w17,w14,w25,ror#22 // Sigma0(a) 606 eor w12,w12,w5,lsr#10 // sigma1(X[i+14]) 607 add w7,w7,w0 608 add w20,w20,w24 // d+=h 609 add w24,w24,w19 // h+=Maj(a,b,c) 610 ldr w19,[x30],#4 // *K++, w28 in next round 611 add w7,w7,w13 612 add w24,w24,w17 // h+=Sigma0(a) 613 add w7,w7,w12 614 ldr w12,[sp,#4] 615 str w15,[sp,#0] 616 ror w16,w20,#6 617 add w23,w23,w19 // h+=K[i] 618 ror w14,w9,#7 619 and w17,w21,w20 620 ror w13,w6,#17 621 bic w19,w22,w20 622 ror w15,w24,#2 623 add w23,w23,w7 // h+=X[i] 624 eor w16,w16,w20,ror#11 625 eor w14,w14,w9,ror#18 626 orr w17,w17,w19 // Ch(e,f,g) 627 eor w19,w24,w25 // a^b, b^c in next round 628 eor w16,w16,w20,ror#25 // Sigma1(e) 629 eor w15,w15,w24,ror#13 630 add w23,w23,w17 // h+=Ch(e,f,g) 631 and w28,w28,w19 // (b^c)&=(a^b) 632 eor w13,w13,w6,ror#19 633 eor w14,w14,w9,lsr#3 // sigma0(X[i+1]) 634 add w23,w23,w16 // h+=Sigma1(e) 635 eor w28,w28,w25 // Maj(a,b,c) 636 eor w17,w15,w24,ror#22 // Sigma0(a) 637 eor w13,w13,w6,lsr#10 // sigma1(X[i+14]) 638 add w8,w8,w1 639 add w27,w27,w23 // d+=h 640 add w23,w23,w28 // h+=Maj(a,b,c) 641 ldr w28,[x30],#4 // *K++, w19 in next round 642 add w8,w8,w14 643 add w23,w23,w17 // h+=Sigma0(a) 644 add w8,w8,w13 645 ldr w13,[sp,#8] 646 str w0,[sp,#4] 647 ror w16,w27,#6 648 add w22,w22,w28 // h+=K[i] 649 ror w15,w10,#7 650 and w17,w20,w27 651 ror w14,w7,#17 652 bic w28,w21,w27 653 ror w0,w23,#2 654 add w22,w22,w8 // h+=X[i] 655 eor w16,w16,w27,ror#11 656 eor w15,w15,w10,ror#18 657 orr w17,w17,w28 // Ch(e,f,g) 658 eor w28,w23,w24 // a^b, b^c in next round 659 eor w16,w16,w27,ror#25 // Sigma1(e) 660 eor w0,w0,w23,ror#13 661 add w22,w22,w17 // h+=Ch(e,f,g) 662 and w19,w19,w28 // (b^c)&=(a^b) 663 eor w14,w14,w7,ror#19 664 eor w15,w15,w10,lsr#3 // sigma0(X[i+1]) 665 add w22,w22,w16 // h+=Sigma1(e) 666 eor w19,w19,w24 // Maj(a,b,c) 667 eor w17,w0,w23,ror#22 // Sigma0(a) 668 eor w14,w14,w7,lsr#10 // sigma1(X[i+14]) 669 add w9,w9,w2 670 add w26,w26,w22 // d+=h 671 add w22,w22,w19 // h+=Maj(a,b,c) 672 ldr w19,[x30],#4 // *K++, w28 in next round 673 add w9,w9,w15 674 add w22,w22,w17 // h+=Sigma0(a) 675 add w9,w9,w14 676 ldr w14,[sp,#12] 677 str w1,[sp,#8] 678 ror w16,w26,#6 679 add w21,w21,w19 // h+=K[i] 680 ror w0,w11,#7 681 and w17,w27,w26 682 ror w15,w8,#17 683 bic w19,w20,w26 684 ror w1,w22,#2 685 add w21,w21,w9 // h+=X[i] 686 eor w16,w16,w26,ror#11 687 eor w0,w0,w11,ror#18 688 orr w17,w17,w19 // Ch(e,f,g) 689 eor w19,w22,w23 // a^b, b^c in next round 690 eor w16,w16,w26,ror#25 // Sigma1(e) 691 eor w1,w1,w22,ror#13 692 add w21,w21,w17 // h+=Ch(e,f,g) 693 and w28,w28,w19 // (b^c)&=(a^b) 694 eor w15,w15,w8,ror#19 695 eor w0,w0,w11,lsr#3 // sigma0(X[i+1]) 696 add w21,w21,w16 // h+=Sigma1(e) 697 eor w28,w28,w23 // Maj(a,b,c) 698 eor w17,w1,w22,ror#22 // Sigma0(a) 699 eor w15,w15,w8,lsr#10 // sigma1(X[i+14]) 700 add w10,w10,w3 701 add w25,w25,w21 // d+=h 702 add w21,w21,w28 // h+=Maj(a,b,c) 703 ldr w28,[x30],#4 // *K++, w19 in next round 704 add w10,w10,w0 705 add w21,w21,w17 // h+=Sigma0(a) 706 add w10,w10,w15 707 ldr w15,[sp,#0] 708 str w2,[sp,#12] 709 ror w16,w25,#6 710 add w20,w20,w28 // h+=K[i] 711 ror w1,w12,#7 712 and w17,w26,w25 713 ror w0,w9,#17 714 bic w28,w27,w25 715 ror w2,w21,#2 716 add w20,w20,w10 // h+=X[i] 717 eor w16,w16,w25,ror#11 718 eor w1,w1,w12,ror#18 719 orr w17,w17,w28 // Ch(e,f,g) 720 eor w28,w21,w22 // a^b, b^c in next round 721 eor w16,w16,w25,ror#25 // Sigma1(e) 722 eor w2,w2,w21,ror#13 723 add w20,w20,w17 // h+=Ch(e,f,g) 724 and w19,w19,w28 // (b^c)&=(a^b) 725 eor w0,w0,w9,ror#19 726 eor w1,w1,w12,lsr#3 // sigma0(X[i+1]) 727 add w20,w20,w16 // h+=Sigma1(e) 728 eor w19,w19,w22 // Maj(a,b,c) 729 eor w17,w2,w21,ror#22 // Sigma0(a) 730 eor w0,w0,w9,lsr#10 // sigma1(X[i+14]) 731 add w11,w11,w4 732 add w24,w24,w20 // d+=h 733 add w20,w20,w19 // h+=Maj(a,b,c) 734 ldr w19,[x30],#4 // *K++, w28 in next round 735 add w11,w11,w1 736 add w20,w20,w17 // h+=Sigma0(a) 737 add w11,w11,w0 738 ldr w0,[sp,#4] 739 str w3,[sp,#0] 740 ror w16,w24,#6 741 add w27,w27,w19 // h+=K[i] 742 ror w2,w13,#7 743 and w17,w25,w24 744 ror w1,w10,#17 745 bic w19,w26,w24 746 ror w3,w20,#2 747 add w27,w27,w11 // h+=X[i] 748 eor w16,w16,w24,ror#11 749 eor w2,w2,w13,ror#18 750 orr w17,w17,w19 // Ch(e,f,g) 751 eor w19,w20,w21 // a^b, b^c in next round 752 eor w16,w16,w24,ror#25 // Sigma1(e) 753 eor w3,w3,w20,ror#13 754 add w27,w27,w17 // h+=Ch(e,f,g) 755 and w28,w28,w19 // (b^c)&=(a^b) 756 eor w1,w1,w10,ror#19 757 eor w2,w2,w13,lsr#3 // sigma0(X[i+1]) 758 add w27,w27,w16 // h+=Sigma1(e) 759 eor w28,w28,w21 // Maj(a,b,c) 760 eor w17,w3,w20,ror#22 // Sigma0(a) 761 eor w1,w1,w10,lsr#10 // sigma1(X[i+14]) 762 add w12,w12,w5 763 add w23,w23,w27 // d+=h 764 add w27,w27,w28 // h+=Maj(a,b,c) 765 ldr w28,[x30],#4 // *K++, w19 in next round 766 add w12,w12,w2 767 add w27,w27,w17 // h+=Sigma0(a) 768 add w12,w12,w1 769 ldr w1,[sp,#8] 770 str w4,[sp,#4] 771 ror w16,w23,#6 772 add w26,w26,w28 // h+=K[i] 773 ror w3,w14,#7 774 and w17,w24,w23 775 ror w2,w11,#17 776 bic w28,w25,w23 777 ror w4,w27,#2 778 add w26,w26,w12 // h+=X[i] 779 eor w16,w16,w23,ror#11 780 eor w3,w3,w14,ror#18 781 orr w17,w17,w28 // Ch(e,f,g) 782 eor w28,w27,w20 // a^b, b^c in next round 783 eor w16,w16,w23,ror#25 // Sigma1(e) 784 eor w4,w4,w27,ror#13 785 add w26,w26,w17 // h+=Ch(e,f,g) 786 and w19,w19,w28 // (b^c)&=(a^b) 787 eor w2,w2,w11,ror#19 788 eor w3,w3,w14,lsr#3 // sigma0(X[i+1]) 789 add w26,w26,w16 // h+=Sigma1(e) 790 eor w19,w19,w20 // Maj(a,b,c) 791 eor w17,w4,w27,ror#22 // Sigma0(a) 792 eor w2,w2,w11,lsr#10 // sigma1(X[i+14]) 793 add w13,w13,w6 794 add w22,w22,w26 // d+=h 795 add w26,w26,w19 // h+=Maj(a,b,c) 796 ldr w19,[x30],#4 // *K++, w28 in next round 797 add w13,w13,w3 798 add w26,w26,w17 // h+=Sigma0(a) 799 add w13,w13,w2 800 ldr w2,[sp,#12] 801 str w5,[sp,#8] 802 ror w16,w22,#6 803 add w25,w25,w19 // h+=K[i] 804 ror w4,w15,#7 805 and w17,w23,w22 806 ror w3,w12,#17 807 bic w19,w24,w22 808 ror w5,w26,#2 809 add w25,w25,w13 // h+=X[i] 810 eor w16,w16,w22,ror#11 811 eor w4,w4,w15,ror#18 812 orr w17,w17,w19 // Ch(e,f,g) 813 eor w19,w26,w27 // a^b, b^c in next round 814 eor w16,w16,w22,ror#25 // Sigma1(e) 815 eor w5,w5,w26,ror#13 816 add w25,w25,w17 // h+=Ch(e,f,g) 817 and w28,w28,w19 // (b^c)&=(a^b) 818 eor w3,w3,w12,ror#19 819 eor w4,w4,w15,lsr#3 // sigma0(X[i+1]) 820 add w25,w25,w16 // h+=Sigma1(e) 821 eor w28,w28,w27 // Maj(a,b,c) 822 eor w17,w5,w26,ror#22 // Sigma0(a) 823 eor w3,w3,w12,lsr#10 // sigma1(X[i+14]) 824 add w14,w14,w7 825 add w21,w21,w25 // d+=h 826 add w25,w25,w28 // h+=Maj(a,b,c) 827 ldr w28,[x30],#4 // *K++, w19 in next round 828 add w14,w14,w4 829 add w25,w25,w17 // h+=Sigma0(a) 830 add w14,w14,w3 831 ldr w3,[sp,#0] 832 str w6,[sp,#12] 833 ror w16,w21,#6 834 add w24,w24,w28 // h+=K[i] 835 ror w5,w0,#7 836 and w17,w22,w21 837 ror w4,w13,#17 838 bic w28,w23,w21 839 ror w6,w25,#2 840 add w24,w24,w14 // h+=X[i] 841 eor w16,w16,w21,ror#11 842 eor w5,w5,w0,ror#18 843 orr w17,w17,w28 // Ch(e,f,g) 844 eor w28,w25,w26 // a^b, b^c in next round 845 eor w16,w16,w21,ror#25 // Sigma1(e) 846 eor w6,w6,w25,ror#13 847 add w24,w24,w17 // h+=Ch(e,f,g) 848 and w19,w19,w28 // (b^c)&=(a^b) 849 eor w4,w4,w13,ror#19 850 eor w5,w5,w0,lsr#3 // sigma0(X[i+1]) 851 add w24,w24,w16 // h+=Sigma1(e) 852 eor w19,w19,w26 // Maj(a,b,c) 853 eor w17,w6,w25,ror#22 // Sigma0(a) 854 eor w4,w4,w13,lsr#10 // sigma1(X[i+14]) 855 add w15,w15,w8 856 add w20,w20,w24 // d+=h 857 add w24,w24,w19 // h+=Maj(a,b,c) 858 ldr w19,[x30],#4 // *K++, w28 in next round 859 add w15,w15,w5 860 add w24,w24,w17 // h+=Sigma0(a) 861 add w15,w15,w4 862 ldr w4,[sp,#4] 863 str w7,[sp,#0] 864 ror w16,w20,#6 865 add w23,w23,w19 // h+=K[i] 866 ror w6,w1,#7 867 and w17,w21,w20 868 ror w5,w14,#17 869 bic w19,w22,w20 870 ror w7,w24,#2 871 add w23,w23,w15 // h+=X[i] 872 eor w16,w16,w20,ror#11 873 eor w6,w6,w1,ror#18 874 orr w17,w17,w19 // Ch(e,f,g) 875 eor w19,w24,w25 // a^b, b^c in next round 876 eor w16,w16,w20,ror#25 // Sigma1(e) 877 eor w7,w7,w24,ror#13 878 add w23,w23,w17 // h+=Ch(e,f,g) 879 and w28,w28,w19 // (b^c)&=(a^b) 880 eor w5,w5,w14,ror#19 881 eor w6,w6,w1,lsr#3 // sigma0(X[i+1]) 882 add w23,w23,w16 // h+=Sigma1(e) 883 eor w28,w28,w25 // Maj(a,b,c) 884 eor w17,w7,w24,ror#22 // Sigma0(a) 885 eor w5,w5,w14,lsr#10 // sigma1(X[i+14]) 886 add w0,w0,w9 887 add w27,w27,w23 // d+=h 888 add w23,w23,w28 // h+=Maj(a,b,c) 889 ldr w28,[x30],#4 // *K++, w19 in next round 890 add w0,w0,w6 891 add w23,w23,w17 // h+=Sigma0(a) 892 add w0,w0,w5 893 ldr w5,[sp,#8] 894 str w8,[sp,#4] 895 ror w16,w27,#6 896 add w22,w22,w28 // h+=K[i] 897 ror w7,w2,#7 898 and w17,w20,w27 899 ror w6,w15,#17 900 bic w28,w21,w27 901 ror w8,w23,#2 902 add w22,w22,w0 // h+=X[i] 903 eor w16,w16,w27,ror#11 904 eor w7,w7,w2,ror#18 905 orr w17,w17,w28 // Ch(e,f,g) 906 eor w28,w23,w24 // a^b, b^c in next round 907 eor w16,w16,w27,ror#25 // Sigma1(e) 908 eor w8,w8,w23,ror#13 909 add w22,w22,w17 // h+=Ch(e,f,g) 910 and w19,w19,w28 // (b^c)&=(a^b) 911 eor w6,w6,w15,ror#19 912 eor w7,w7,w2,lsr#3 // sigma0(X[i+1]) 913 add w22,w22,w16 // h+=Sigma1(e) 914 eor w19,w19,w24 // Maj(a,b,c) 915 eor w17,w8,w23,ror#22 // Sigma0(a) 916 eor w6,w6,w15,lsr#10 // sigma1(X[i+14]) 917 add w1,w1,w10 918 add w26,w26,w22 // d+=h 919 add w22,w22,w19 // h+=Maj(a,b,c) 920 ldr w19,[x30],#4 // *K++, w28 in next round 921 add w1,w1,w7 922 add w22,w22,w17 // h+=Sigma0(a) 923 add w1,w1,w6 924 ldr w6,[sp,#12] 925 str w9,[sp,#8] 926 ror w16,w26,#6 927 add w21,w21,w19 // h+=K[i] 928 ror w8,w3,#7 929 and w17,w27,w26 930 ror w7,w0,#17 931 bic w19,w20,w26 932 ror w9,w22,#2 933 add w21,w21,w1 // h+=X[i] 934 eor w16,w16,w26,ror#11 935 eor w8,w8,w3,ror#18 936 orr w17,w17,w19 // Ch(e,f,g) 937 eor w19,w22,w23 // a^b, b^c in next round 938 eor w16,w16,w26,ror#25 // Sigma1(e) 939 eor w9,w9,w22,ror#13 940 add w21,w21,w17 // h+=Ch(e,f,g) 941 and w28,w28,w19 // (b^c)&=(a^b) 942 eor w7,w7,w0,ror#19 943 eor w8,w8,w3,lsr#3 // sigma0(X[i+1]) 944 add w21,w21,w16 // h+=Sigma1(e) 945 eor w28,w28,w23 // Maj(a,b,c) 946 eor w17,w9,w22,ror#22 // Sigma0(a) 947 eor w7,w7,w0,lsr#10 // sigma1(X[i+14]) 948 add w2,w2,w11 949 add w25,w25,w21 // d+=h 950 add w21,w21,w28 // h+=Maj(a,b,c) 951 ldr w28,[x30],#4 // *K++, w19 in next round 952 add w2,w2,w8 953 add w21,w21,w17 // h+=Sigma0(a) 954 add w2,w2,w7 955 ldr w7,[sp,#0] 956 str w10,[sp,#12] 957 ror w16,w25,#6 958 add w20,w20,w28 // h+=K[i] 959 ror w9,w4,#7 960 and w17,w26,w25 961 ror w8,w1,#17 962 bic w28,w27,w25 963 ror w10,w21,#2 964 add w20,w20,w2 // h+=X[i] 965 eor w16,w16,w25,ror#11 966 eor w9,w9,w4,ror#18 967 orr w17,w17,w28 // Ch(e,f,g) 968 eor w28,w21,w22 // a^b, b^c in next round 969 eor w16,w16,w25,ror#25 // Sigma1(e) 970 eor w10,w10,w21,ror#13 971 add w20,w20,w17 // h+=Ch(e,f,g) 972 and w19,w19,w28 // (b^c)&=(a^b) 973 eor w8,w8,w1,ror#19 974 eor w9,w9,w4,lsr#3 // sigma0(X[i+1]) 975 add w20,w20,w16 // h+=Sigma1(e) 976 eor w19,w19,w22 // Maj(a,b,c) 977 eor w17,w10,w21,ror#22 // Sigma0(a) 978 eor w8,w8,w1,lsr#10 // sigma1(X[i+14]) 979 add w3,w3,w12 980 add w24,w24,w20 // d+=h 981 add w20,w20,w19 // h+=Maj(a,b,c) 982 ldr w19,[x30],#4 // *K++, w28 in next round 983 add w3,w3,w9 984 add w20,w20,w17 // h+=Sigma0(a) 985 add w3,w3,w8 986 cbnz w19,.Loop_16_xx 987 988 ldp x0,x2,[x29,#96] 989 ldr x1,[x29,#112] 990 sub x30,x30,#260 // rewind 991 992 ldp w3,w4,[x0] 993 ldp w5,w6,[x0,#2*4] 994 add x1,x1,#14*4 // advance input pointer 995 ldp w7,w8,[x0,#4*4] 996 add w20,w20,w3 997 ldp w9,w10,[x0,#6*4] 998 add w21,w21,w4 999 add w22,w22,w5 1000 add w23,w23,w6 1001 stp w20,w21,[x0] 1002 add w24,w24,w7 1003 add w25,w25,w8 1004 stp w22,w23,[x0,#2*4] 1005 add w26,w26,w9 1006 add w27,w27,w10 1007 cmp x1,x2 1008 stp w24,w25,[x0,#4*4] 1009 stp w26,w27,[x0,#6*4] 1010 b.ne .Loop 1011 1012 ldp x19,x20,[x29,#16] 1013 add sp,sp,#4*4 1014 ldp x21,x22,[x29,#32] 1015 ldp x23,x24,[x29,#48] 1016 ldp x25,x26,[x29,#64] 1017 ldp x27,x28,[x29,#80] 1018 ldp x29,x30,[sp],#128 1019 AARCH64_VALIDATE_LINK_REGISTER 1020 ret 1021.size sha256_block_data_order_nohw,.-sha256_block_data_order_nohw 1022 1023.section .rodata 1024.align 6 1025.type .LK256,%object 1026.LK256: 1027.long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5 1028.long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5 1029.long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3 1030.long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174 1031.long 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc 1032.long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da 1033.long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7 1034.long 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967 1035.long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13 1036.long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85 1037.long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3 1038.long 0xd192e819,0xd6990624,0xf40e3585,0x106aa070 1039.long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5 1040.long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3 1041.long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208 1042.long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2 1043.long 0 //terminator 1044.size .LK256,.-.LK256 1045.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 1046.align 2 1047.align 2 1048.text 1049#ifndef __KERNEL__ 1050.globl sha256_block_data_order_hw 1051.hidden sha256_block_data_order_hw 1052.type sha256_block_data_order_hw,%function 1053.align 6 1054sha256_block_data_order_hw: 1055 // Armv8.3-A PAuth: even though x30 is pushed to stack it is not popped later. 1056 AARCH64_VALID_CALL_TARGET 1057 stp x29,x30,[sp,#-16]! 1058 add x29,sp,#0 1059 1060 ld1 {v0.4s,v1.4s},[x0] 1061 adrp x3,.LK256 1062 add x3,x3,:lo12:.LK256 1063 1064.Loop_hw: 1065 ld1 {v4.16b,v5.16b,v6.16b,v7.16b},[x1],#64 1066 sub x2,x2,#1 1067 ld1 {v16.4s},[x3],#16 1068 rev32 v4.16b,v4.16b 1069 rev32 v5.16b,v5.16b 1070 rev32 v6.16b,v6.16b 1071 rev32 v7.16b,v7.16b 1072 orr v18.16b,v0.16b,v0.16b // offload 1073 orr v19.16b,v1.16b,v1.16b 1074 ld1 {v17.4s},[x3],#16 1075 add v16.4s,v16.4s,v4.4s 1076.inst 0x5e2828a4 //sha256su0 v4.16b,v5.16b 1077 orr v2.16b,v0.16b,v0.16b 1078.inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s 1079.inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s 1080.inst 0x5e0760c4 //sha256su1 v4.16b,v6.16b,v7.16b 1081 ld1 {v16.4s},[x3],#16 1082 add v17.4s,v17.4s,v5.4s 1083.inst 0x5e2828c5 //sha256su0 v5.16b,v6.16b 1084 orr v2.16b,v0.16b,v0.16b 1085.inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s 1086.inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s 1087.inst 0x5e0460e5 //sha256su1 v5.16b,v7.16b,v4.16b 1088 ld1 {v17.4s},[x3],#16 1089 add v16.4s,v16.4s,v6.4s 1090.inst 0x5e2828e6 //sha256su0 v6.16b,v7.16b 1091 orr v2.16b,v0.16b,v0.16b 1092.inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s 1093.inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s 1094.inst 0x5e056086 //sha256su1 v6.16b,v4.16b,v5.16b 1095 ld1 {v16.4s},[x3],#16 1096 add v17.4s,v17.4s,v7.4s 1097.inst 0x5e282887 //sha256su0 v7.16b,v4.16b 1098 orr v2.16b,v0.16b,v0.16b 1099.inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s 1100.inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s 1101.inst 0x5e0660a7 //sha256su1 v7.16b,v5.16b,v6.16b 1102 ld1 {v17.4s},[x3],#16 1103 add v16.4s,v16.4s,v4.4s 1104.inst 0x5e2828a4 //sha256su0 v4.16b,v5.16b 1105 orr v2.16b,v0.16b,v0.16b 1106.inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s 1107.inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s 1108.inst 0x5e0760c4 //sha256su1 v4.16b,v6.16b,v7.16b 1109 ld1 {v16.4s},[x3],#16 1110 add v17.4s,v17.4s,v5.4s 1111.inst 0x5e2828c5 //sha256su0 v5.16b,v6.16b 1112 orr v2.16b,v0.16b,v0.16b 1113.inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s 1114.inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s 1115.inst 0x5e0460e5 //sha256su1 v5.16b,v7.16b,v4.16b 1116 ld1 {v17.4s},[x3],#16 1117 add v16.4s,v16.4s,v6.4s 1118.inst 0x5e2828e6 //sha256su0 v6.16b,v7.16b 1119 orr v2.16b,v0.16b,v0.16b 1120.inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s 1121.inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s 1122.inst 0x5e056086 //sha256su1 v6.16b,v4.16b,v5.16b 1123 ld1 {v16.4s},[x3],#16 1124 add v17.4s,v17.4s,v7.4s 1125.inst 0x5e282887 //sha256su0 v7.16b,v4.16b 1126 orr v2.16b,v0.16b,v0.16b 1127.inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s 1128.inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s 1129.inst 0x5e0660a7 //sha256su1 v7.16b,v5.16b,v6.16b 1130 ld1 {v17.4s},[x3],#16 1131 add v16.4s,v16.4s,v4.4s 1132.inst 0x5e2828a4 //sha256su0 v4.16b,v5.16b 1133 orr v2.16b,v0.16b,v0.16b 1134.inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s 1135.inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s 1136.inst 0x5e0760c4 //sha256su1 v4.16b,v6.16b,v7.16b 1137 ld1 {v16.4s},[x3],#16 1138 add v17.4s,v17.4s,v5.4s 1139.inst 0x5e2828c5 //sha256su0 v5.16b,v6.16b 1140 orr v2.16b,v0.16b,v0.16b 1141.inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s 1142.inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s 1143.inst 0x5e0460e5 //sha256su1 v5.16b,v7.16b,v4.16b 1144 ld1 {v17.4s},[x3],#16 1145 add v16.4s,v16.4s,v6.4s 1146.inst 0x5e2828e6 //sha256su0 v6.16b,v7.16b 1147 orr v2.16b,v0.16b,v0.16b 1148.inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s 1149.inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s 1150.inst 0x5e056086 //sha256su1 v6.16b,v4.16b,v5.16b 1151 ld1 {v16.4s},[x3],#16 1152 add v17.4s,v17.4s,v7.4s 1153.inst 0x5e282887 //sha256su0 v7.16b,v4.16b 1154 orr v2.16b,v0.16b,v0.16b 1155.inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s 1156.inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s 1157.inst 0x5e0660a7 //sha256su1 v7.16b,v5.16b,v6.16b 1158 ld1 {v17.4s},[x3],#16 1159 add v16.4s,v16.4s,v4.4s 1160 orr v2.16b,v0.16b,v0.16b 1161.inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s 1162.inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s 1163 1164 ld1 {v16.4s},[x3],#16 1165 add v17.4s,v17.4s,v5.4s 1166 orr v2.16b,v0.16b,v0.16b 1167.inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s 1168.inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s 1169 1170 ld1 {v17.4s},[x3] 1171 add v16.4s,v16.4s,v6.4s 1172 sub x3,x3,#64*4-16 // rewind 1173 orr v2.16b,v0.16b,v0.16b 1174.inst 0x5e104020 //sha256h v0.16b,v1.16b,v16.4s 1175.inst 0x5e105041 //sha256h2 v1.16b,v2.16b,v16.4s 1176 1177 add v17.4s,v17.4s,v7.4s 1178 orr v2.16b,v0.16b,v0.16b 1179.inst 0x5e114020 //sha256h v0.16b,v1.16b,v17.4s 1180.inst 0x5e115041 //sha256h2 v1.16b,v2.16b,v17.4s 1181 1182 add v0.4s,v0.4s,v18.4s 1183 add v1.4s,v1.4s,v19.4s 1184 1185 cbnz x2,.Loop_hw 1186 1187 st1 {v0.4s,v1.4s},[x0] 1188 1189 ldr x29,[sp],#16 1190 ret 1191.size sha256_block_data_order_hw,.-sha256_block_data_order_hw 1192#endif 1193#endif // !OPENSSL_NO_ASM && defined(OPENSSL_AARCH64) && defined(__ELF__) 1194