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