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