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