1// SPDX-License-Identifier: GPL-2.0 2 3// This code is taken from the OpenSSL project but the author (Andy Polyakov) 4// has relicensed it under the GPLv2. Therefore this program is free software; 5// you can redistribute it and/or modify it under the terms of the GNU General 6// Public License version 2 as published by the Free Software Foundation. 7// 8// The original headers, including the original license headers, are 9// included below for completeness. 10 11// Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved. 12// 13// Licensed under the OpenSSL license (the "License"). You may not use 14// this file except in compliance with the License. You can obtain a copy 15// in the file LICENSE in the source distribution or at 16// https://www.openssl.org/source/license.html 17 18// ==================================================================== 19// Written by Andy Polyakov <appro@openssl.org> for the OpenSSL 20// project. The module is, however, dual licensed under OpenSSL and 21// CRYPTOGAMS licenses depending on where you obtain it. For further 22// details see http://www.openssl.org/~appro/cryptogams/. 23// ==================================================================== 24// 25// SHA256/512 for ARMv8. 26// 27// Performance in cycles per processed byte and improvement coefficient 28// over code generated with "default" compiler: 29// 30// SHA256-hw SHA256(*) SHA512 31// Apple A7 1.97 10.5 (+33%) 6.73 (-1%(**)) 32// Cortex-A53 2.38 15.5 (+115%) 10.0 (+150%(***)) 33// Cortex-A57 2.31 11.6 (+86%) 7.51 (+260%(***)) 34// Denver 2.01 10.5 (+26%) 6.70 (+8%) 35// X-Gene 20.0 (+100%) 12.8 (+300%(***)) 36// Mongoose 2.36 13.0 (+50%) 8.36 (+33%) 37// 38// (*) Software SHA256 results are of lesser relevance, presented 39// mostly for informational purposes. 40// (**) The result is a trade-off: it's possible to improve it by 41// 10% (or by 1 cycle per round), but at the cost of 20% loss 42// on Cortex-A53 (or by 4 cycles per round). 43// (***) Super-impressive coefficients over gcc-generated code are 44// indication of some compiler "pathology", most notably code 45// generated with -mgeneral-regs-only is significanty faster 46// and the gap is only 40-90%. 47// 48// October 2016. 49// 50// Originally it was reckoned that it makes no sense to implement NEON 51// version of SHA256 for 64-bit processors. This is because performance 52// improvement on most wide-spread Cortex-A5x processors was observed 53// to be marginal, same on Cortex-A53 and ~10% on A57. But then it was 54// observed that 32-bit NEON SHA256 performs significantly better than 55// 64-bit scalar version on *some* of the more recent processors. As 56// result 64-bit NEON version of SHA256 was added to provide best 57// all-round performance. For example it executes ~30% faster on X-Gene 58// and Mongoose. [For reference, NEON version of SHA512 is bound to 59// deliver much less improvement, likely *negative* on Cortex-A5x. 60// Which is why NEON support is limited to SHA256.] 61 62#ifndef __KERNEL__ 63# include "arm_arch.h" 64#endif 65 66.text 67 68.extern OPENSSL_armcap_P 69.globl sha512_block_data_order 70.type sha512_block_data_order,%function 71.align 6 72sha512_block_data_order: 73 stp x29,x30,[sp,#-128]! 74 add x29,sp,#0 75 76 stp x19,x20,[sp,#16] 77 stp x21,x22,[sp,#32] 78 stp x23,x24,[sp,#48] 79 stp x25,x26,[sp,#64] 80 stp x27,x28,[sp,#80] 81 sub sp,sp,#4*8 82 83 ldp x20,x21,[x0] // load context 84 ldp x22,x23,[x0,#2*8] 85 ldp x24,x25,[x0,#4*8] 86 add x2,x1,x2,lsl#7 // end of input 87 ldp x26,x27,[x0,#6*8] 88 adr x30,.LK512 89 stp x0,x2,[x29,#96] 90 91.Loop: 92 ldp x3,x4,[x1],#2*8 93 ldr x19,[x30],#8 // *K++ 94 eor x28,x21,x22 // magic seed 95 str x1,[x29,#112] 96#ifndef __AARCH64EB__ 97 rev x3,x3 // 0 98#endif 99 ror x16,x24,#14 100 add x27,x27,x19 // h+=K[i] 101 eor x6,x24,x24,ror#23 102 and x17,x25,x24 103 bic x19,x26,x24 104 add x27,x27,x3 // h+=X[i] 105 orr x17,x17,x19 // Ch(e,f,g) 106 eor x19,x20,x21 // a^b, b^c in next round 107 eor x16,x16,x6,ror#18 // Sigma1(e) 108 ror x6,x20,#28 109 add x27,x27,x17 // h+=Ch(e,f,g) 110 eor x17,x20,x20,ror#5 111 add x27,x27,x16 // h+=Sigma1(e) 112 and x28,x28,x19 // (b^c)&=(a^b) 113 add x23,x23,x27 // d+=h 114 eor x28,x28,x21 // Maj(a,b,c) 115 eor x17,x6,x17,ror#34 // Sigma0(a) 116 add x27,x27,x28 // h+=Maj(a,b,c) 117 ldr x28,[x30],#8 // *K++, x19 in next round 118 //add x27,x27,x17 // h+=Sigma0(a) 119#ifndef __AARCH64EB__ 120 rev x4,x4 // 1 121#endif 122 ldp x5,x6,[x1],#2*8 123 add x27,x27,x17 // h+=Sigma0(a) 124 ror x16,x23,#14 125 add x26,x26,x28 // h+=K[i] 126 eor x7,x23,x23,ror#23 127 and x17,x24,x23 128 bic x28,x25,x23 129 add x26,x26,x4 // h+=X[i] 130 orr x17,x17,x28 // Ch(e,f,g) 131 eor x28,x27,x20 // a^b, b^c in next round 132 eor x16,x16,x7,ror#18 // Sigma1(e) 133 ror x7,x27,#28 134 add x26,x26,x17 // h+=Ch(e,f,g) 135 eor x17,x27,x27,ror#5 136 add x26,x26,x16 // h+=Sigma1(e) 137 and x19,x19,x28 // (b^c)&=(a^b) 138 add x22,x22,x26 // d+=h 139 eor x19,x19,x20 // Maj(a,b,c) 140 eor x17,x7,x17,ror#34 // Sigma0(a) 141 add x26,x26,x19 // h+=Maj(a,b,c) 142 ldr x19,[x30],#8 // *K++, x28 in next round 143 //add x26,x26,x17 // h+=Sigma0(a) 144#ifndef __AARCH64EB__ 145 rev x5,x5 // 2 146#endif 147 add x26,x26,x17 // h+=Sigma0(a) 148 ror x16,x22,#14 149 add x25,x25,x19 // h+=K[i] 150 eor x8,x22,x22,ror#23 151 and x17,x23,x22 152 bic x19,x24,x22 153 add x25,x25,x5 // h+=X[i] 154 orr x17,x17,x19 // Ch(e,f,g) 155 eor x19,x26,x27 // a^b, b^c in next round 156 eor x16,x16,x8,ror#18 // Sigma1(e) 157 ror x8,x26,#28 158 add x25,x25,x17 // h+=Ch(e,f,g) 159 eor x17,x26,x26,ror#5 160 add x25,x25,x16 // h+=Sigma1(e) 161 and x28,x28,x19 // (b^c)&=(a^b) 162 add x21,x21,x25 // d+=h 163 eor x28,x28,x27 // Maj(a,b,c) 164 eor x17,x8,x17,ror#34 // Sigma0(a) 165 add x25,x25,x28 // h+=Maj(a,b,c) 166 ldr x28,[x30],#8 // *K++, x19 in next round 167 //add x25,x25,x17 // h+=Sigma0(a) 168#ifndef __AARCH64EB__ 169 rev x6,x6 // 3 170#endif 171 ldp x7,x8,[x1],#2*8 172 add x25,x25,x17 // h+=Sigma0(a) 173 ror x16,x21,#14 174 add x24,x24,x28 // h+=K[i] 175 eor x9,x21,x21,ror#23 176 and x17,x22,x21 177 bic x28,x23,x21 178 add x24,x24,x6 // h+=X[i] 179 orr x17,x17,x28 // Ch(e,f,g) 180 eor x28,x25,x26 // a^b, b^c in next round 181 eor x16,x16,x9,ror#18 // Sigma1(e) 182 ror x9,x25,#28 183 add x24,x24,x17 // h+=Ch(e,f,g) 184 eor x17,x25,x25,ror#5 185 add x24,x24,x16 // h+=Sigma1(e) 186 and x19,x19,x28 // (b^c)&=(a^b) 187 add x20,x20,x24 // d+=h 188 eor x19,x19,x26 // Maj(a,b,c) 189 eor x17,x9,x17,ror#34 // Sigma0(a) 190 add x24,x24,x19 // h+=Maj(a,b,c) 191 ldr x19,[x30],#8 // *K++, x28 in next round 192 //add x24,x24,x17 // h+=Sigma0(a) 193#ifndef __AARCH64EB__ 194 rev x7,x7 // 4 195#endif 196 add x24,x24,x17 // h+=Sigma0(a) 197 ror x16,x20,#14 198 add x23,x23,x19 // h+=K[i] 199 eor x10,x20,x20,ror#23 200 and x17,x21,x20 201 bic x19,x22,x20 202 add x23,x23,x7 // h+=X[i] 203 orr x17,x17,x19 // Ch(e,f,g) 204 eor x19,x24,x25 // a^b, b^c in next round 205 eor x16,x16,x10,ror#18 // Sigma1(e) 206 ror x10,x24,#28 207 add x23,x23,x17 // h+=Ch(e,f,g) 208 eor x17,x24,x24,ror#5 209 add x23,x23,x16 // h+=Sigma1(e) 210 and x28,x28,x19 // (b^c)&=(a^b) 211 add x27,x27,x23 // d+=h 212 eor x28,x28,x25 // Maj(a,b,c) 213 eor x17,x10,x17,ror#34 // Sigma0(a) 214 add x23,x23,x28 // h+=Maj(a,b,c) 215 ldr x28,[x30],#8 // *K++, x19 in next round 216 //add x23,x23,x17 // h+=Sigma0(a) 217#ifndef __AARCH64EB__ 218 rev x8,x8 // 5 219#endif 220 ldp x9,x10,[x1],#2*8 221 add x23,x23,x17 // h+=Sigma0(a) 222 ror x16,x27,#14 223 add x22,x22,x28 // h+=K[i] 224 eor x11,x27,x27,ror#23 225 and x17,x20,x27 226 bic x28,x21,x27 227 add x22,x22,x8 // h+=X[i] 228 orr x17,x17,x28 // Ch(e,f,g) 229 eor x28,x23,x24 // a^b, b^c in next round 230 eor x16,x16,x11,ror#18 // Sigma1(e) 231 ror x11,x23,#28 232 add x22,x22,x17 // h+=Ch(e,f,g) 233 eor x17,x23,x23,ror#5 234 add x22,x22,x16 // h+=Sigma1(e) 235 and x19,x19,x28 // (b^c)&=(a^b) 236 add x26,x26,x22 // d+=h 237 eor x19,x19,x24 // Maj(a,b,c) 238 eor x17,x11,x17,ror#34 // Sigma0(a) 239 add x22,x22,x19 // h+=Maj(a,b,c) 240 ldr x19,[x30],#8 // *K++, x28 in next round 241 //add x22,x22,x17 // h+=Sigma0(a) 242#ifndef __AARCH64EB__ 243 rev x9,x9 // 6 244#endif 245 add x22,x22,x17 // h+=Sigma0(a) 246 ror x16,x26,#14 247 add x21,x21,x19 // h+=K[i] 248 eor x12,x26,x26,ror#23 249 and x17,x27,x26 250 bic x19,x20,x26 251 add x21,x21,x9 // h+=X[i] 252 orr x17,x17,x19 // Ch(e,f,g) 253 eor x19,x22,x23 // a^b, b^c in next round 254 eor x16,x16,x12,ror#18 // Sigma1(e) 255 ror x12,x22,#28 256 add x21,x21,x17 // h+=Ch(e,f,g) 257 eor x17,x22,x22,ror#5 258 add x21,x21,x16 // h+=Sigma1(e) 259 and x28,x28,x19 // (b^c)&=(a^b) 260 add x25,x25,x21 // d+=h 261 eor x28,x28,x23 // Maj(a,b,c) 262 eor x17,x12,x17,ror#34 // Sigma0(a) 263 add x21,x21,x28 // h+=Maj(a,b,c) 264 ldr x28,[x30],#8 // *K++, x19 in next round 265 //add x21,x21,x17 // h+=Sigma0(a) 266#ifndef __AARCH64EB__ 267 rev x10,x10 // 7 268#endif 269 ldp x11,x12,[x1],#2*8 270 add x21,x21,x17 // h+=Sigma0(a) 271 ror x16,x25,#14 272 add x20,x20,x28 // h+=K[i] 273 eor x13,x25,x25,ror#23 274 and x17,x26,x25 275 bic x28,x27,x25 276 add x20,x20,x10 // h+=X[i] 277 orr x17,x17,x28 // Ch(e,f,g) 278 eor x28,x21,x22 // a^b, b^c in next round 279 eor x16,x16,x13,ror#18 // Sigma1(e) 280 ror x13,x21,#28 281 add x20,x20,x17 // h+=Ch(e,f,g) 282 eor x17,x21,x21,ror#5 283 add x20,x20,x16 // h+=Sigma1(e) 284 and x19,x19,x28 // (b^c)&=(a^b) 285 add x24,x24,x20 // d+=h 286 eor x19,x19,x22 // Maj(a,b,c) 287 eor x17,x13,x17,ror#34 // Sigma0(a) 288 add x20,x20,x19 // h+=Maj(a,b,c) 289 ldr x19,[x30],#8 // *K++, x28 in next round 290 //add x20,x20,x17 // h+=Sigma0(a) 291#ifndef __AARCH64EB__ 292 rev x11,x11 // 8 293#endif 294 add x20,x20,x17 // h+=Sigma0(a) 295 ror x16,x24,#14 296 add x27,x27,x19 // h+=K[i] 297 eor x14,x24,x24,ror#23 298 and x17,x25,x24 299 bic x19,x26,x24 300 add x27,x27,x11 // h+=X[i] 301 orr x17,x17,x19 // Ch(e,f,g) 302 eor x19,x20,x21 // a^b, b^c in next round 303 eor x16,x16,x14,ror#18 // Sigma1(e) 304 ror x14,x20,#28 305 add x27,x27,x17 // h+=Ch(e,f,g) 306 eor x17,x20,x20,ror#5 307 add x27,x27,x16 // h+=Sigma1(e) 308 and x28,x28,x19 // (b^c)&=(a^b) 309 add x23,x23,x27 // d+=h 310 eor x28,x28,x21 // Maj(a,b,c) 311 eor x17,x14,x17,ror#34 // Sigma0(a) 312 add x27,x27,x28 // h+=Maj(a,b,c) 313 ldr x28,[x30],#8 // *K++, x19 in next round 314 //add x27,x27,x17 // h+=Sigma0(a) 315#ifndef __AARCH64EB__ 316 rev x12,x12 // 9 317#endif 318 ldp x13,x14,[x1],#2*8 319 add x27,x27,x17 // h+=Sigma0(a) 320 ror x16,x23,#14 321 add x26,x26,x28 // h+=K[i] 322 eor x15,x23,x23,ror#23 323 and x17,x24,x23 324 bic x28,x25,x23 325 add x26,x26,x12 // h+=X[i] 326 orr x17,x17,x28 // Ch(e,f,g) 327 eor x28,x27,x20 // a^b, b^c in next round 328 eor x16,x16,x15,ror#18 // Sigma1(e) 329 ror x15,x27,#28 330 add x26,x26,x17 // h+=Ch(e,f,g) 331 eor x17,x27,x27,ror#5 332 add x26,x26,x16 // h+=Sigma1(e) 333 and x19,x19,x28 // (b^c)&=(a^b) 334 add x22,x22,x26 // d+=h 335 eor x19,x19,x20 // Maj(a,b,c) 336 eor x17,x15,x17,ror#34 // Sigma0(a) 337 add x26,x26,x19 // h+=Maj(a,b,c) 338 ldr x19,[x30],#8 // *K++, x28 in next round 339 //add x26,x26,x17 // h+=Sigma0(a) 340#ifndef __AARCH64EB__ 341 rev x13,x13 // 10 342#endif 343 add x26,x26,x17 // h+=Sigma0(a) 344 ror x16,x22,#14 345 add x25,x25,x19 // h+=K[i] 346 eor x0,x22,x22,ror#23 347 and x17,x23,x22 348 bic x19,x24,x22 349 add x25,x25,x13 // h+=X[i] 350 orr x17,x17,x19 // Ch(e,f,g) 351 eor x19,x26,x27 // a^b, b^c in next round 352 eor x16,x16,x0,ror#18 // Sigma1(e) 353 ror x0,x26,#28 354 add x25,x25,x17 // h+=Ch(e,f,g) 355 eor x17,x26,x26,ror#5 356 add x25,x25,x16 // h+=Sigma1(e) 357 and x28,x28,x19 // (b^c)&=(a^b) 358 add x21,x21,x25 // d+=h 359 eor x28,x28,x27 // Maj(a,b,c) 360 eor x17,x0,x17,ror#34 // Sigma0(a) 361 add x25,x25,x28 // h+=Maj(a,b,c) 362 ldr x28,[x30],#8 // *K++, x19 in next round 363 //add x25,x25,x17 // h+=Sigma0(a) 364#ifndef __AARCH64EB__ 365 rev x14,x14 // 11 366#endif 367 ldp x15,x0,[x1],#2*8 368 add x25,x25,x17 // h+=Sigma0(a) 369 str x6,[sp,#24] 370 ror x16,x21,#14 371 add x24,x24,x28 // h+=K[i] 372 eor x6,x21,x21,ror#23 373 and x17,x22,x21 374 bic x28,x23,x21 375 add x24,x24,x14 // h+=X[i] 376 orr x17,x17,x28 // Ch(e,f,g) 377 eor x28,x25,x26 // a^b, b^c in next round 378 eor x16,x16,x6,ror#18 // Sigma1(e) 379 ror x6,x25,#28 380 add x24,x24,x17 // h+=Ch(e,f,g) 381 eor x17,x25,x25,ror#5 382 add x24,x24,x16 // h+=Sigma1(e) 383 and x19,x19,x28 // (b^c)&=(a^b) 384 add x20,x20,x24 // d+=h 385 eor x19,x19,x26 // Maj(a,b,c) 386 eor x17,x6,x17,ror#34 // Sigma0(a) 387 add x24,x24,x19 // h+=Maj(a,b,c) 388 ldr x19,[x30],#8 // *K++, x28 in next round 389 //add x24,x24,x17 // h+=Sigma0(a) 390#ifndef __AARCH64EB__ 391 rev x15,x15 // 12 392#endif 393 add x24,x24,x17 // h+=Sigma0(a) 394 str x7,[sp,#0] 395 ror x16,x20,#14 396 add x23,x23,x19 // h+=K[i] 397 eor x7,x20,x20,ror#23 398 and x17,x21,x20 399 bic x19,x22,x20 400 add x23,x23,x15 // h+=X[i] 401 orr x17,x17,x19 // Ch(e,f,g) 402 eor x19,x24,x25 // a^b, b^c in next round 403 eor x16,x16,x7,ror#18 // Sigma1(e) 404 ror x7,x24,#28 405 add x23,x23,x17 // h+=Ch(e,f,g) 406 eor x17,x24,x24,ror#5 407 add x23,x23,x16 // h+=Sigma1(e) 408 and x28,x28,x19 // (b^c)&=(a^b) 409 add x27,x27,x23 // d+=h 410 eor x28,x28,x25 // Maj(a,b,c) 411 eor x17,x7,x17,ror#34 // Sigma0(a) 412 add x23,x23,x28 // h+=Maj(a,b,c) 413 ldr x28,[x30],#8 // *K++, x19 in next round 414 //add x23,x23,x17 // h+=Sigma0(a) 415#ifndef __AARCH64EB__ 416 rev x0,x0 // 13 417#endif 418 ldp x1,x2,[x1] 419 add x23,x23,x17 // h+=Sigma0(a) 420 str x8,[sp,#8] 421 ror x16,x27,#14 422 add x22,x22,x28 // h+=K[i] 423 eor x8,x27,x27,ror#23 424 and x17,x20,x27 425 bic x28,x21,x27 426 add x22,x22,x0 // h+=X[i] 427 orr x17,x17,x28 // Ch(e,f,g) 428 eor x28,x23,x24 // a^b, b^c in next round 429 eor x16,x16,x8,ror#18 // Sigma1(e) 430 ror x8,x23,#28 431 add x22,x22,x17 // h+=Ch(e,f,g) 432 eor x17,x23,x23,ror#5 433 add x22,x22,x16 // h+=Sigma1(e) 434 and x19,x19,x28 // (b^c)&=(a^b) 435 add x26,x26,x22 // d+=h 436 eor x19,x19,x24 // Maj(a,b,c) 437 eor x17,x8,x17,ror#34 // Sigma0(a) 438 add x22,x22,x19 // h+=Maj(a,b,c) 439 ldr x19,[x30],#8 // *K++, x28 in next round 440 //add x22,x22,x17 // h+=Sigma0(a) 441#ifndef __AARCH64EB__ 442 rev x1,x1 // 14 443#endif 444 ldr x6,[sp,#24] 445 add x22,x22,x17 // h+=Sigma0(a) 446 str x9,[sp,#16] 447 ror x16,x26,#14 448 add x21,x21,x19 // h+=K[i] 449 eor x9,x26,x26,ror#23 450 and x17,x27,x26 451 bic x19,x20,x26 452 add x21,x21,x1 // h+=X[i] 453 orr x17,x17,x19 // Ch(e,f,g) 454 eor x19,x22,x23 // a^b, b^c in next round 455 eor x16,x16,x9,ror#18 // Sigma1(e) 456 ror x9,x22,#28 457 add x21,x21,x17 // h+=Ch(e,f,g) 458 eor x17,x22,x22,ror#5 459 add x21,x21,x16 // h+=Sigma1(e) 460 and x28,x28,x19 // (b^c)&=(a^b) 461 add x25,x25,x21 // d+=h 462 eor x28,x28,x23 // Maj(a,b,c) 463 eor x17,x9,x17,ror#34 // Sigma0(a) 464 add x21,x21,x28 // h+=Maj(a,b,c) 465 ldr x28,[x30],#8 // *K++, x19 in next round 466 //add x21,x21,x17 // h+=Sigma0(a) 467#ifndef __AARCH64EB__ 468 rev x2,x2 // 15 469#endif 470 ldr x7,[sp,#0] 471 add x21,x21,x17 // h+=Sigma0(a) 472 str x10,[sp,#24] 473 ror x16,x25,#14 474 add x20,x20,x28 // h+=K[i] 475 ror x9,x4,#1 476 and x17,x26,x25 477 ror x8,x1,#19 478 bic x28,x27,x25 479 ror x10,x21,#28 480 add x20,x20,x2 // h+=X[i] 481 eor x16,x16,x25,ror#18 482 eor x9,x9,x4,ror#8 483 orr x17,x17,x28 // Ch(e,f,g) 484 eor x28,x21,x22 // a^b, b^c in next round 485 eor x16,x16,x25,ror#41 // Sigma1(e) 486 eor x10,x10,x21,ror#34 487 add x20,x20,x17 // h+=Ch(e,f,g) 488 and x19,x19,x28 // (b^c)&=(a^b) 489 eor x8,x8,x1,ror#61 490 eor x9,x9,x4,lsr#7 // sigma0(X[i+1]) 491 add x20,x20,x16 // h+=Sigma1(e) 492 eor x19,x19,x22 // Maj(a,b,c) 493 eor x17,x10,x21,ror#39 // Sigma0(a) 494 eor x8,x8,x1,lsr#6 // sigma1(X[i+14]) 495 add x3,x3,x12 496 add x24,x24,x20 // d+=h 497 add x20,x20,x19 // h+=Maj(a,b,c) 498 ldr x19,[x30],#8 // *K++, x28 in next round 499 add x3,x3,x9 500 add x20,x20,x17 // h+=Sigma0(a) 501 add x3,x3,x8 502.Loop_16_xx: 503 ldr x8,[sp,#8] 504 str x11,[sp,#0] 505 ror x16,x24,#14 506 add x27,x27,x19 // h+=K[i] 507 ror x10,x5,#1 508 and x17,x25,x24 509 ror x9,x2,#19 510 bic x19,x26,x24 511 ror x11,x20,#28 512 add x27,x27,x3 // h+=X[i] 513 eor x16,x16,x24,ror#18 514 eor x10,x10,x5,ror#8 515 orr x17,x17,x19 // Ch(e,f,g) 516 eor x19,x20,x21 // a^b, b^c in next round 517 eor x16,x16,x24,ror#41 // Sigma1(e) 518 eor x11,x11,x20,ror#34 519 add x27,x27,x17 // h+=Ch(e,f,g) 520 and x28,x28,x19 // (b^c)&=(a^b) 521 eor x9,x9,x2,ror#61 522 eor x10,x10,x5,lsr#7 // sigma0(X[i+1]) 523 add x27,x27,x16 // h+=Sigma1(e) 524 eor x28,x28,x21 // Maj(a,b,c) 525 eor x17,x11,x20,ror#39 // Sigma0(a) 526 eor x9,x9,x2,lsr#6 // sigma1(X[i+14]) 527 add x4,x4,x13 528 add x23,x23,x27 // d+=h 529 add x27,x27,x28 // h+=Maj(a,b,c) 530 ldr x28,[x30],#8 // *K++, x19 in next round 531 add x4,x4,x10 532 add x27,x27,x17 // h+=Sigma0(a) 533 add x4,x4,x9 534 ldr x9,[sp,#16] 535 str x12,[sp,#8] 536 ror x16,x23,#14 537 add x26,x26,x28 // h+=K[i] 538 ror x11,x6,#1 539 and x17,x24,x23 540 ror x10,x3,#19 541 bic x28,x25,x23 542 ror x12,x27,#28 543 add x26,x26,x4 // h+=X[i] 544 eor x16,x16,x23,ror#18 545 eor x11,x11,x6,ror#8 546 orr x17,x17,x28 // Ch(e,f,g) 547 eor x28,x27,x20 // a^b, b^c in next round 548 eor x16,x16,x23,ror#41 // Sigma1(e) 549 eor x12,x12,x27,ror#34 550 add x26,x26,x17 // h+=Ch(e,f,g) 551 and x19,x19,x28 // (b^c)&=(a^b) 552 eor x10,x10,x3,ror#61 553 eor x11,x11,x6,lsr#7 // sigma0(X[i+1]) 554 add x26,x26,x16 // h+=Sigma1(e) 555 eor x19,x19,x20 // Maj(a,b,c) 556 eor x17,x12,x27,ror#39 // Sigma0(a) 557 eor x10,x10,x3,lsr#6 // sigma1(X[i+14]) 558 add x5,x5,x14 559 add x22,x22,x26 // d+=h 560 add x26,x26,x19 // h+=Maj(a,b,c) 561 ldr x19,[x30],#8 // *K++, x28 in next round 562 add x5,x5,x11 563 add x26,x26,x17 // h+=Sigma0(a) 564 add x5,x5,x10 565 ldr x10,[sp,#24] 566 str x13,[sp,#16] 567 ror x16,x22,#14 568 add x25,x25,x19 // h+=K[i] 569 ror x12,x7,#1 570 and x17,x23,x22 571 ror x11,x4,#19 572 bic x19,x24,x22 573 ror x13,x26,#28 574 add x25,x25,x5 // h+=X[i] 575 eor x16,x16,x22,ror#18 576 eor x12,x12,x7,ror#8 577 orr x17,x17,x19 // Ch(e,f,g) 578 eor x19,x26,x27 // a^b, b^c in next round 579 eor x16,x16,x22,ror#41 // Sigma1(e) 580 eor x13,x13,x26,ror#34 581 add x25,x25,x17 // h+=Ch(e,f,g) 582 and x28,x28,x19 // (b^c)&=(a^b) 583 eor x11,x11,x4,ror#61 584 eor x12,x12,x7,lsr#7 // sigma0(X[i+1]) 585 add x25,x25,x16 // h+=Sigma1(e) 586 eor x28,x28,x27 // Maj(a,b,c) 587 eor x17,x13,x26,ror#39 // Sigma0(a) 588 eor x11,x11,x4,lsr#6 // sigma1(X[i+14]) 589 add x6,x6,x15 590 add x21,x21,x25 // d+=h 591 add x25,x25,x28 // h+=Maj(a,b,c) 592 ldr x28,[x30],#8 // *K++, x19 in next round 593 add x6,x6,x12 594 add x25,x25,x17 // h+=Sigma0(a) 595 add x6,x6,x11 596 ldr x11,[sp,#0] 597 str x14,[sp,#24] 598 ror x16,x21,#14 599 add x24,x24,x28 // h+=K[i] 600 ror x13,x8,#1 601 and x17,x22,x21 602 ror x12,x5,#19 603 bic x28,x23,x21 604 ror x14,x25,#28 605 add x24,x24,x6 // h+=X[i] 606 eor x16,x16,x21,ror#18 607 eor x13,x13,x8,ror#8 608 orr x17,x17,x28 // Ch(e,f,g) 609 eor x28,x25,x26 // a^b, b^c in next round 610 eor x16,x16,x21,ror#41 // Sigma1(e) 611 eor x14,x14,x25,ror#34 612 add x24,x24,x17 // h+=Ch(e,f,g) 613 and x19,x19,x28 // (b^c)&=(a^b) 614 eor x12,x12,x5,ror#61 615 eor x13,x13,x8,lsr#7 // sigma0(X[i+1]) 616 add x24,x24,x16 // h+=Sigma1(e) 617 eor x19,x19,x26 // Maj(a,b,c) 618 eor x17,x14,x25,ror#39 // Sigma0(a) 619 eor x12,x12,x5,lsr#6 // sigma1(X[i+14]) 620 add x7,x7,x0 621 add x20,x20,x24 // d+=h 622 add x24,x24,x19 // h+=Maj(a,b,c) 623 ldr x19,[x30],#8 // *K++, x28 in next round 624 add x7,x7,x13 625 add x24,x24,x17 // h+=Sigma0(a) 626 add x7,x7,x12 627 ldr x12,[sp,#8] 628 str x15,[sp,#0] 629 ror x16,x20,#14 630 add x23,x23,x19 // h+=K[i] 631 ror x14,x9,#1 632 and x17,x21,x20 633 ror x13,x6,#19 634 bic x19,x22,x20 635 ror x15,x24,#28 636 add x23,x23,x7 // h+=X[i] 637 eor x16,x16,x20,ror#18 638 eor x14,x14,x9,ror#8 639 orr x17,x17,x19 // Ch(e,f,g) 640 eor x19,x24,x25 // a^b, b^c in next round 641 eor x16,x16,x20,ror#41 // Sigma1(e) 642 eor x15,x15,x24,ror#34 643 add x23,x23,x17 // h+=Ch(e,f,g) 644 and x28,x28,x19 // (b^c)&=(a^b) 645 eor x13,x13,x6,ror#61 646 eor x14,x14,x9,lsr#7 // sigma0(X[i+1]) 647 add x23,x23,x16 // h+=Sigma1(e) 648 eor x28,x28,x25 // Maj(a,b,c) 649 eor x17,x15,x24,ror#39 // Sigma0(a) 650 eor x13,x13,x6,lsr#6 // sigma1(X[i+14]) 651 add x8,x8,x1 652 add x27,x27,x23 // d+=h 653 add x23,x23,x28 // h+=Maj(a,b,c) 654 ldr x28,[x30],#8 // *K++, x19 in next round 655 add x8,x8,x14 656 add x23,x23,x17 // h+=Sigma0(a) 657 add x8,x8,x13 658 ldr x13,[sp,#16] 659 str x0,[sp,#8] 660 ror x16,x27,#14 661 add x22,x22,x28 // h+=K[i] 662 ror x15,x10,#1 663 and x17,x20,x27 664 ror x14,x7,#19 665 bic x28,x21,x27 666 ror x0,x23,#28 667 add x22,x22,x8 // h+=X[i] 668 eor x16,x16,x27,ror#18 669 eor x15,x15,x10,ror#8 670 orr x17,x17,x28 // Ch(e,f,g) 671 eor x28,x23,x24 // a^b, b^c in next round 672 eor x16,x16,x27,ror#41 // Sigma1(e) 673 eor x0,x0,x23,ror#34 674 add x22,x22,x17 // h+=Ch(e,f,g) 675 and x19,x19,x28 // (b^c)&=(a^b) 676 eor x14,x14,x7,ror#61 677 eor x15,x15,x10,lsr#7 // sigma0(X[i+1]) 678 add x22,x22,x16 // h+=Sigma1(e) 679 eor x19,x19,x24 // Maj(a,b,c) 680 eor x17,x0,x23,ror#39 // Sigma0(a) 681 eor x14,x14,x7,lsr#6 // sigma1(X[i+14]) 682 add x9,x9,x2 683 add x26,x26,x22 // d+=h 684 add x22,x22,x19 // h+=Maj(a,b,c) 685 ldr x19,[x30],#8 // *K++, x28 in next round 686 add x9,x9,x15 687 add x22,x22,x17 // h+=Sigma0(a) 688 add x9,x9,x14 689 ldr x14,[sp,#24] 690 str x1,[sp,#16] 691 ror x16,x26,#14 692 add x21,x21,x19 // h+=K[i] 693 ror x0,x11,#1 694 and x17,x27,x26 695 ror x15,x8,#19 696 bic x19,x20,x26 697 ror x1,x22,#28 698 add x21,x21,x9 // h+=X[i] 699 eor x16,x16,x26,ror#18 700 eor x0,x0,x11,ror#8 701 orr x17,x17,x19 // Ch(e,f,g) 702 eor x19,x22,x23 // a^b, b^c in next round 703 eor x16,x16,x26,ror#41 // Sigma1(e) 704 eor x1,x1,x22,ror#34 705 add x21,x21,x17 // h+=Ch(e,f,g) 706 and x28,x28,x19 // (b^c)&=(a^b) 707 eor x15,x15,x8,ror#61 708 eor x0,x0,x11,lsr#7 // sigma0(X[i+1]) 709 add x21,x21,x16 // h+=Sigma1(e) 710 eor x28,x28,x23 // Maj(a,b,c) 711 eor x17,x1,x22,ror#39 // Sigma0(a) 712 eor x15,x15,x8,lsr#6 // sigma1(X[i+14]) 713 add x10,x10,x3 714 add x25,x25,x21 // d+=h 715 add x21,x21,x28 // h+=Maj(a,b,c) 716 ldr x28,[x30],#8 // *K++, x19 in next round 717 add x10,x10,x0 718 add x21,x21,x17 // h+=Sigma0(a) 719 add x10,x10,x15 720 ldr x15,[sp,#0] 721 str x2,[sp,#24] 722 ror x16,x25,#14 723 add x20,x20,x28 // h+=K[i] 724 ror x1,x12,#1 725 and x17,x26,x25 726 ror x0,x9,#19 727 bic x28,x27,x25 728 ror x2,x21,#28 729 add x20,x20,x10 // h+=X[i] 730 eor x16,x16,x25,ror#18 731 eor x1,x1,x12,ror#8 732 orr x17,x17,x28 // Ch(e,f,g) 733 eor x28,x21,x22 // a^b, b^c in next round 734 eor x16,x16,x25,ror#41 // Sigma1(e) 735 eor x2,x2,x21,ror#34 736 add x20,x20,x17 // h+=Ch(e,f,g) 737 and x19,x19,x28 // (b^c)&=(a^b) 738 eor x0,x0,x9,ror#61 739 eor x1,x1,x12,lsr#7 // sigma0(X[i+1]) 740 add x20,x20,x16 // h+=Sigma1(e) 741 eor x19,x19,x22 // Maj(a,b,c) 742 eor x17,x2,x21,ror#39 // Sigma0(a) 743 eor x0,x0,x9,lsr#6 // sigma1(X[i+14]) 744 add x11,x11,x4 745 add x24,x24,x20 // d+=h 746 add x20,x20,x19 // h+=Maj(a,b,c) 747 ldr x19,[x30],#8 // *K++, x28 in next round 748 add x11,x11,x1 749 add x20,x20,x17 // h+=Sigma0(a) 750 add x11,x11,x0 751 ldr x0,[sp,#8] 752 str x3,[sp,#0] 753 ror x16,x24,#14 754 add x27,x27,x19 // h+=K[i] 755 ror x2,x13,#1 756 and x17,x25,x24 757 ror x1,x10,#19 758 bic x19,x26,x24 759 ror x3,x20,#28 760 add x27,x27,x11 // h+=X[i] 761 eor x16,x16,x24,ror#18 762 eor x2,x2,x13,ror#8 763 orr x17,x17,x19 // Ch(e,f,g) 764 eor x19,x20,x21 // a^b, b^c in next round 765 eor x16,x16,x24,ror#41 // Sigma1(e) 766 eor x3,x3,x20,ror#34 767 add x27,x27,x17 // h+=Ch(e,f,g) 768 and x28,x28,x19 // (b^c)&=(a^b) 769 eor x1,x1,x10,ror#61 770 eor x2,x2,x13,lsr#7 // sigma0(X[i+1]) 771 add x27,x27,x16 // h+=Sigma1(e) 772 eor x28,x28,x21 // Maj(a,b,c) 773 eor x17,x3,x20,ror#39 // Sigma0(a) 774 eor x1,x1,x10,lsr#6 // sigma1(X[i+14]) 775 add x12,x12,x5 776 add x23,x23,x27 // d+=h 777 add x27,x27,x28 // h+=Maj(a,b,c) 778 ldr x28,[x30],#8 // *K++, x19 in next round 779 add x12,x12,x2 780 add x27,x27,x17 // h+=Sigma0(a) 781 add x12,x12,x1 782 ldr x1,[sp,#16] 783 str x4,[sp,#8] 784 ror x16,x23,#14 785 add x26,x26,x28 // h+=K[i] 786 ror x3,x14,#1 787 and x17,x24,x23 788 ror x2,x11,#19 789 bic x28,x25,x23 790 ror x4,x27,#28 791 add x26,x26,x12 // h+=X[i] 792 eor x16,x16,x23,ror#18 793 eor x3,x3,x14,ror#8 794 orr x17,x17,x28 // Ch(e,f,g) 795 eor x28,x27,x20 // a^b, b^c in next round 796 eor x16,x16,x23,ror#41 // Sigma1(e) 797 eor x4,x4,x27,ror#34 798 add x26,x26,x17 // h+=Ch(e,f,g) 799 and x19,x19,x28 // (b^c)&=(a^b) 800 eor x2,x2,x11,ror#61 801 eor x3,x3,x14,lsr#7 // sigma0(X[i+1]) 802 add x26,x26,x16 // h+=Sigma1(e) 803 eor x19,x19,x20 // Maj(a,b,c) 804 eor x17,x4,x27,ror#39 // Sigma0(a) 805 eor x2,x2,x11,lsr#6 // sigma1(X[i+14]) 806 add x13,x13,x6 807 add x22,x22,x26 // d+=h 808 add x26,x26,x19 // h+=Maj(a,b,c) 809 ldr x19,[x30],#8 // *K++, x28 in next round 810 add x13,x13,x3 811 add x26,x26,x17 // h+=Sigma0(a) 812 add x13,x13,x2 813 ldr x2,[sp,#24] 814 str x5,[sp,#16] 815 ror x16,x22,#14 816 add x25,x25,x19 // h+=K[i] 817 ror x4,x15,#1 818 and x17,x23,x22 819 ror x3,x12,#19 820 bic x19,x24,x22 821 ror x5,x26,#28 822 add x25,x25,x13 // h+=X[i] 823 eor x16,x16,x22,ror#18 824 eor x4,x4,x15,ror#8 825 orr x17,x17,x19 // Ch(e,f,g) 826 eor x19,x26,x27 // a^b, b^c in next round 827 eor x16,x16,x22,ror#41 // Sigma1(e) 828 eor x5,x5,x26,ror#34 829 add x25,x25,x17 // h+=Ch(e,f,g) 830 and x28,x28,x19 // (b^c)&=(a^b) 831 eor x3,x3,x12,ror#61 832 eor x4,x4,x15,lsr#7 // sigma0(X[i+1]) 833 add x25,x25,x16 // h+=Sigma1(e) 834 eor x28,x28,x27 // Maj(a,b,c) 835 eor x17,x5,x26,ror#39 // Sigma0(a) 836 eor x3,x3,x12,lsr#6 // sigma1(X[i+14]) 837 add x14,x14,x7 838 add x21,x21,x25 // d+=h 839 add x25,x25,x28 // h+=Maj(a,b,c) 840 ldr x28,[x30],#8 // *K++, x19 in next round 841 add x14,x14,x4 842 add x25,x25,x17 // h+=Sigma0(a) 843 add x14,x14,x3 844 ldr x3,[sp,#0] 845 str x6,[sp,#24] 846 ror x16,x21,#14 847 add x24,x24,x28 // h+=K[i] 848 ror x5,x0,#1 849 and x17,x22,x21 850 ror x4,x13,#19 851 bic x28,x23,x21 852 ror x6,x25,#28 853 add x24,x24,x14 // h+=X[i] 854 eor x16,x16,x21,ror#18 855 eor x5,x5,x0,ror#8 856 orr x17,x17,x28 // Ch(e,f,g) 857 eor x28,x25,x26 // a^b, b^c in next round 858 eor x16,x16,x21,ror#41 // Sigma1(e) 859 eor x6,x6,x25,ror#34 860 add x24,x24,x17 // h+=Ch(e,f,g) 861 and x19,x19,x28 // (b^c)&=(a^b) 862 eor x4,x4,x13,ror#61 863 eor x5,x5,x0,lsr#7 // sigma0(X[i+1]) 864 add x24,x24,x16 // h+=Sigma1(e) 865 eor x19,x19,x26 // Maj(a,b,c) 866 eor x17,x6,x25,ror#39 // Sigma0(a) 867 eor x4,x4,x13,lsr#6 // sigma1(X[i+14]) 868 add x15,x15,x8 869 add x20,x20,x24 // d+=h 870 add x24,x24,x19 // h+=Maj(a,b,c) 871 ldr x19,[x30],#8 // *K++, x28 in next round 872 add x15,x15,x5 873 add x24,x24,x17 // h+=Sigma0(a) 874 add x15,x15,x4 875 ldr x4,[sp,#8] 876 str x7,[sp,#0] 877 ror x16,x20,#14 878 add x23,x23,x19 // h+=K[i] 879 ror x6,x1,#1 880 and x17,x21,x20 881 ror x5,x14,#19 882 bic x19,x22,x20 883 ror x7,x24,#28 884 add x23,x23,x15 // h+=X[i] 885 eor x16,x16,x20,ror#18 886 eor x6,x6,x1,ror#8 887 orr x17,x17,x19 // Ch(e,f,g) 888 eor x19,x24,x25 // a^b, b^c in next round 889 eor x16,x16,x20,ror#41 // Sigma1(e) 890 eor x7,x7,x24,ror#34 891 add x23,x23,x17 // h+=Ch(e,f,g) 892 and x28,x28,x19 // (b^c)&=(a^b) 893 eor x5,x5,x14,ror#61 894 eor x6,x6,x1,lsr#7 // sigma0(X[i+1]) 895 add x23,x23,x16 // h+=Sigma1(e) 896 eor x28,x28,x25 // Maj(a,b,c) 897 eor x17,x7,x24,ror#39 // Sigma0(a) 898 eor x5,x5,x14,lsr#6 // sigma1(X[i+14]) 899 add x0,x0,x9 900 add x27,x27,x23 // d+=h 901 add x23,x23,x28 // h+=Maj(a,b,c) 902 ldr x28,[x30],#8 // *K++, x19 in next round 903 add x0,x0,x6 904 add x23,x23,x17 // h+=Sigma0(a) 905 add x0,x0,x5 906 ldr x5,[sp,#16] 907 str x8,[sp,#8] 908 ror x16,x27,#14 909 add x22,x22,x28 // h+=K[i] 910 ror x7,x2,#1 911 and x17,x20,x27 912 ror x6,x15,#19 913 bic x28,x21,x27 914 ror x8,x23,#28 915 add x22,x22,x0 // h+=X[i] 916 eor x16,x16,x27,ror#18 917 eor x7,x7,x2,ror#8 918 orr x17,x17,x28 // Ch(e,f,g) 919 eor x28,x23,x24 // a^b, b^c in next round 920 eor x16,x16,x27,ror#41 // Sigma1(e) 921 eor x8,x8,x23,ror#34 922 add x22,x22,x17 // h+=Ch(e,f,g) 923 and x19,x19,x28 // (b^c)&=(a^b) 924 eor x6,x6,x15,ror#61 925 eor x7,x7,x2,lsr#7 // sigma0(X[i+1]) 926 add x22,x22,x16 // h+=Sigma1(e) 927 eor x19,x19,x24 // Maj(a,b,c) 928 eor x17,x8,x23,ror#39 // Sigma0(a) 929 eor x6,x6,x15,lsr#6 // sigma1(X[i+14]) 930 add x1,x1,x10 931 add x26,x26,x22 // d+=h 932 add x22,x22,x19 // h+=Maj(a,b,c) 933 ldr x19,[x30],#8 // *K++, x28 in next round 934 add x1,x1,x7 935 add x22,x22,x17 // h+=Sigma0(a) 936 add x1,x1,x6 937 ldr x6,[sp,#24] 938 str x9,[sp,#16] 939 ror x16,x26,#14 940 add x21,x21,x19 // h+=K[i] 941 ror x8,x3,#1 942 and x17,x27,x26 943 ror x7,x0,#19 944 bic x19,x20,x26 945 ror x9,x22,#28 946 add x21,x21,x1 // h+=X[i] 947 eor x16,x16,x26,ror#18 948 eor x8,x8,x3,ror#8 949 orr x17,x17,x19 // Ch(e,f,g) 950 eor x19,x22,x23 // a^b, b^c in next round 951 eor x16,x16,x26,ror#41 // Sigma1(e) 952 eor x9,x9,x22,ror#34 953 add x21,x21,x17 // h+=Ch(e,f,g) 954 and x28,x28,x19 // (b^c)&=(a^b) 955 eor x7,x7,x0,ror#61 956 eor x8,x8,x3,lsr#7 // sigma0(X[i+1]) 957 add x21,x21,x16 // h+=Sigma1(e) 958 eor x28,x28,x23 // Maj(a,b,c) 959 eor x17,x9,x22,ror#39 // Sigma0(a) 960 eor x7,x7,x0,lsr#6 // sigma1(X[i+14]) 961 add x2,x2,x11 962 add x25,x25,x21 // d+=h 963 add x21,x21,x28 // h+=Maj(a,b,c) 964 ldr x28,[x30],#8 // *K++, x19 in next round 965 add x2,x2,x8 966 add x21,x21,x17 // h+=Sigma0(a) 967 add x2,x2,x7 968 ldr x7,[sp,#0] 969 str x10,[sp,#24] 970 ror x16,x25,#14 971 add x20,x20,x28 // h+=K[i] 972 ror x9,x4,#1 973 and x17,x26,x25 974 ror x8,x1,#19 975 bic x28,x27,x25 976 ror x10,x21,#28 977 add x20,x20,x2 // h+=X[i] 978 eor x16,x16,x25,ror#18 979 eor x9,x9,x4,ror#8 980 orr x17,x17,x28 // Ch(e,f,g) 981 eor x28,x21,x22 // a^b, b^c in next round 982 eor x16,x16,x25,ror#41 // Sigma1(e) 983 eor x10,x10,x21,ror#34 984 add x20,x20,x17 // h+=Ch(e,f,g) 985 and x19,x19,x28 // (b^c)&=(a^b) 986 eor x8,x8,x1,ror#61 987 eor x9,x9,x4,lsr#7 // sigma0(X[i+1]) 988 add x20,x20,x16 // h+=Sigma1(e) 989 eor x19,x19,x22 // Maj(a,b,c) 990 eor x17,x10,x21,ror#39 // Sigma0(a) 991 eor x8,x8,x1,lsr#6 // sigma1(X[i+14]) 992 add x3,x3,x12 993 add x24,x24,x20 // d+=h 994 add x20,x20,x19 // h+=Maj(a,b,c) 995 ldr x19,[x30],#8 // *K++, x28 in next round 996 add x3,x3,x9 997 add x20,x20,x17 // h+=Sigma0(a) 998 add x3,x3,x8 999 cbnz x19,.Loop_16_xx 1000 1001 ldp x0,x2,[x29,#96] 1002 ldr x1,[x29,#112] 1003 sub x30,x30,#648 // rewind 1004 1005 ldp x3,x4,[x0] 1006 ldp x5,x6,[x0,#2*8] 1007 add x1,x1,#14*8 // advance input pointer 1008 ldp x7,x8,[x0,#4*8] 1009 add x20,x20,x3 1010 ldp x9,x10,[x0,#6*8] 1011 add x21,x21,x4 1012 add x22,x22,x5 1013 add x23,x23,x6 1014 stp x20,x21,[x0] 1015 add x24,x24,x7 1016 add x25,x25,x8 1017 stp x22,x23,[x0,#2*8] 1018 add x26,x26,x9 1019 add x27,x27,x10 1020 cmp x1,x2 1021 stp x24,x25,[x0,#4*8] 1022 stp x26,x27,[x0,#6*8] 1023 b.ne .Loop 1024 1025 ldp x19,x20,[x29,#16] 1026 add sp,sp,#4*8 1027 ldp x21,x22,[x29,#32] 1028 ldp x23,x24,[x29,#48] 1029 ldp x25,x26,[x29,#64] 1030 ldp x27,x28,[x29,#80] 1031 ldp x29,x30,[sp],#128 1032 ret 1033.size sha512_block_data_order,.-sha512_block_data_order 1034 1035.align 6 1036.type .LK512,%object 1037.LK512: 1038 .quad 0x428a2f98d728ae22,0x7137449123ef65cd 1039 .quad 0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc 1040 .quad 0x3956c25bf348b538,0x59f111f1b605d019 1041 .quad 0x923f82a4af194f9b,0xab1c5ed5da6d8118 1042 .quad 0xd807aa98a3030242,0x12835b0145706fbe 1043 .quad 0x243185be4ee4b28c,0x550c7dc3d5ffb4e2 1044 .quad 0x72be5d74f27b896f,0x80deb1fe3b1696b1 1045 .quad 0x9bdc06a725c71235,0xc19bf174cf692694 1046 .quad 0xe49b69c19ef14ad2,0xefbe4786384f25e3 1047 .quad 0x0fc19dc68b8cd5b5,0x240ca1cc77ac9c65 1048 .quad 0x2de92c6f592b0275,0x4a7484aa6ea6e483 1049 .quad 0x5cb0a9dcbd41fbd4,0x76f988da831153b5 1050 .quad 0x983e5152ee66dfab,0xa831c66d2db43210 1051 .quad 0xb00327c898fb213f,0xbf597fc7beef0ee4 1052 .quad 0xc6e00bf33da88fc2,0xd5a79147930aa725 1053 .quad 0x06ca6351e003826f,0x142929670a0e6e70 1054 .quad 0x27b70a8546d22ffc,0x2e1b21385c26c926 1055 .quad 0x4d2c6dfc5ac42aed,0x53380d139d95b3df 1056 .quad 0x650a73548baf63de,0x766a0abb3c77b2a8 1057 .quad 0x81c2c92e47edaee6,0x92722c851482353b 1058 .quad 0xa2bfe8a14cf10364,0xa81a664bbc423001 1059 .quad 0xc24b8b70d0f89791,0xc76c51a30654be30 1060 .quad 0xd192e819d6ef5218,0xd69906245565a910 1061 .quad 0xf40e35855771202a,0x106aa07032bbd1b8 1062 .quad 0x19a4c116b8d2d0c8,0x1e376c085141ab53 1063 .quad 0x2748774cdf8eeb99,0x34b0bcb5e19b48a8 1064 .quad 0x391c0cb3c5c95a63,0x4ed8aa4ae3418acb 1065 .quad 0x5b9cca4f7763e373,0x682e6ff3d6b2b8a3 1066 .quad 0x748f82ee5defb2fc,0x78a5636f43172f60 1067 .quad 0x84c87814a1f0ab72,0x8cc702081a6439ec 1068 .quad 0x90befffa23631e28,0xa4506cebde82bde9 1069 .quad 0xbef9a3f7b2c67915,0xc67178f2e372532b 1070 .quad 0xca273eceea26619c,0xd186b8c721c0c207 1071 .quad 0xeada7dd6cde0eb1e,0xf57d4f7fee6ed178 1072 .quad 0x06f067aa72176fba,0x0a637dc5a2c898a6 1073 .quad 0x113f9804bef90dae,0x1b710b35131c471b 1074 .quad 0x28db77f523047d84,0x32caab7b40c72493 1075 .quad 0x3c9ebe0a15c9bebc,0x431d67c49c100d4c 1076 .quad 0x4cc5d4becb3e42b6,0x597f299cfc657e2a 1077 .quad 0x5fcb6fab3ad6faec,0x6c44198c4a475817 1078 .quad 0 // terminator 1079.size .LK512,.-.LK512 1080#ifndef __KERNEL__ 1081.align 3 1082.LOPENSSL_armcap_P: 1083# ifdef __ILP32__ 1084 .long OPENSSL_armcap_P-. 1085# else 1086 .quad OPENSSL_armcap_P-. 1087# endif 1088#endif 1089.asciz "SHA512 block transform for ARMv8, CRYPTOGAMS by <appro@openssl.org>" 1090.align 2 1091#ifndef __KERNEL__ 1092.comm OPENSSL_armcap_P,4,4 1093#endif 1094