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