1// SPDX-License-Identifier: Apache-2.0 2/* 3 * Copyright 2004-2022 The OpenSSL Project Authors. All Rights Reserved. 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * https://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 18/* 19 * Portions Copyright (c) 2022 Tino Reichardt <milky-zfs@mcmilk.de> 20 * - modified assembly to fit into OpenZFS 21 */ 22 23#if defined(__arm__) 24 25#ifndef __ARM_ARCH 26# define __ARM_ARCH__ 7 27#else 28# define __ARM_ARCH__ __ARM_ARCH 29#endif 30 31#if defined(__thumb2__) 32.syntax unified 33.thumb 34#else 35.code 32 36#endif 37 38.text 39 40.type K256,%object 41.align 5 42K256: 43.word 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5 44.word 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5 45.word 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3 46.word 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174 47.word 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc 48.word 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da 49.word 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7 50.word 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967 51.word 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13 52.word 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85 53.word 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3 54.word 0xd192e819,0xd6990624,0xf40e3585,0x106aa070 55.word 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5 56.word 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3 57.word 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208 58.word 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2 59.size K256,.-K256 60.word 0 @ terminator 61 62.align 5 63.globl zfs_sha256_block_armv7 64.type zfs_sha256_block_armv7,%function 65zfs_sha256_block_armv7: 66.Lzfs_sha256_block_armv7: 67 68#if __ARM_ARCH__<7 && !defined(__thumb2__) 69 sub r3,pc,#8 @ zfs_sha256_block_armv7 70#else 71 adr r3,.Lzfs_sha256_block_armv7 72#endif 73 74 add r2,r1,r2,lsl#6 @ len to point at the end of inp 75 stmdb sp!,{r0,r1,r2,r4-r11,lr} 76 ldmia r0,{r4,r5,r6,r7,r8,r9,r10,r11} 77 sub r14,r3,#256+32 @ K256 78 sub sp,sp,#16*4 @ alloca(X[16]) 79.Loop: 80# if __ARM_ARCH__>=7 81 ldr r2,[r1],#4 82# else 83 ldrb r2,[r1,#3] 84# endif 85 eor r3,r5,r6 @ magic 86 eor r12,r12,r12 87#if __ARM_ARCH__>=7 88 @ ldr r2,[r1],#4 @ 0 89# if 0==15 90 str r1,[sp,#17*4] @ make room for r1 91# endif 92 eor r0,r8,r8,ror#5 93 add r4,r4,r12 @ h+=Maj(a,b,c) from the past 94 eor r0,r0,r8,ror#19 @ Sigma1(e) 95# ifndef __ARMEB__ 96 rev r2,r2 97# endif 98#else 99 @ ldrb r2,[r1,#3] @ 0 100 add r4,r4,r12 @ h+=Maj(a,b,c) from the past 101 ldrb r12,[r1,#2] 102 ldrb r0,[r1,#1] 103 orr r2,r2,r12,lsl#8 104 ldrb r12,[r1],#4 105 orr r2,r2,r0,lsl#16 106# if 0==15 107 str r1,[sp,#17*4] @ make room for r1 108# endif 109 eor r0,r8,r8,ror#5 110 orr r2,r2,r12,lsl#24 111 eor r0,r0,r8,ror#19 @ Sigma1(e) 112#endif 113 ldr r12,[r14],#4 @ *K256++ 114 add r11,r11,r2 @ h+=X[i] 115 str r2,[sp,#0*4] 116 eor r2,r9,r10 117 add r11,r11,r0,ror#6 @ h+=Sigma1(e) 118 and r2,r2,r8 119 add r11,r11,r12 @ h+=K256[i] 120 eor r2,r2,r10 @ Ch(e,f,g) 121 eor r0,r4,r4,ror#11 122 add r11,r11,r2 @ h+=Ch(e,f,g) 123#if 0==31 124 and r12,r12,#0xff 125 cmp r12,#0xf2 @ done? 126#endif 127#if 0<15 128# if __ARM_ARCH__>=7 129 ldr r2,[r1],#4 @ prefetch 130# else 131 ldrb r2,[r1,#3] 132# endif 133 eor r12,r4,r5 @ a^b, b^c in next round 134#else 135 ldr r2,[sp,#2*4] @ from future BODY_16_xx 136 eor r12,r4,r5 @ a^b, b^c in next round 137 ldr r1,[sp,#15*4] @ from future BODY_16_xx 138#endif 139 eor r0,r0,r4,ror#20 @ Sigma0(a) 140 and r3,r3,r12 @ (b^c)&=(a^b) 141 add r7,r7,r11 @ d+=h 142 eor r3,r3,r5 @ Maj(a,b,c) 143 add r11,r11,r0,ror#2 @ h+=Sigma0(a) 144 @ add r11,r11,r3 @ h+=Maj(a,b,c) 145#if __ARM_ARCH__>=7 146 @ ldr r2,[r1],#4 @ 1 147# if 1==15 148 str r1,[sp,#17*4] @ make room for r1 149# endif 150 eor r0,r7,r7,ror#5 151 add r11,r11,r3 @ h+=Maj(a,b,c) from the past 152 eor r0,r0,r7,ror#19 @ Sigma1(e) 153# ifndef __ARMEB__ 154 rev r2,r2 155# endif 156#else 157 @ ldrb r2,[r1,#3] @ 1 158 add r11,r11,r3 @ h+=Maj(a,b,c) from the past 159 ldrb r3,[r1,#2] 160 ldrb r0,[r1,#1] 161 orr r2,r2,r3,lsl#8 162 ldrb r3,[r1],#4 163 orr r2,r2,r0,lsl#16 164# if 1==15 165 str r1,[sp,#17*4] @ make room for r1 166# endif 167 eor r0,r7,r7,ror#5 168 orr r2,r2,r3,lsl#24 169 eor r0,r0,r7,ror#19 @ Sigma1(e) 170#endif 171 ldr r3,[r14],#4 @ *K256++ 172 add r10,r10,r2 @ h+=X[i] 173 str r2,[sp,#1*4] 174 eor r2,r8,r9 175 add r10,r10,r0,ror#6 @ h+=Sigma1(e) 176 and r2,r2,r7 177 add r10,r10,r3 @ h+=K256[i] 178 eor r2,r2,r9 @ Ch(e,f,g) 179 eor r0,r11,r11,ror#11 180 add r10,r10,r2 @ h+=Ch(e,f,g) 181#if 1==31 182 and r3,r3,#0xff 183 cmp r3,#0xf2 @ done? 184#endif 185#if 1<15 186# if __ARM_ARCH__>=7 187 ldr r2,[r1],#4 @ prefetch 188# else 189 ldrb r2,[r1,#3] 190# endif 191 eor r3,r11,r4 @ a^b, b^c in next round 192#else 193 ldr r2,[sp,#3*4] @ from future BODY_16_xx 194 eor r3,r11,r4 @ a^b, b^c in next round 195 ldr r1,[sp,#0*4] @ from future BODY_16_xx 196#endif 197 eor r0,r0,r11,ror#20 @ Sigma0(a) 198 and r12,r12,r3 @ (b^c)&=(a^b) 199 add r6,r6,r10 @ d+=h 200 eor r12,r12,r4 @ Maj(a,b,c) 201 add r10,r10,r0,ror#2 @ h+=Sigma0(a) 202 @ add r10,r10,r12 @ h+=Maj(a,b,c) 203#if __ARM_ARCH__>=7 204 @ ldr r2,[r1],#4 @ 2 205# if 2==15 206 str r1,[sp,#17*4] @ make room for r1 207# endif 208 eor r0,r6,r6,ror#5 209 add r10,r10,r12 @ h+=Maj(a,b,c) from the past 210 eor r0,r0,r6,ror#19 @ Sigma1(e) 211# ifndef __ARMEB__ 212 rev r2,r2 213# endif 214#else 215 @ ldrb r2,[r1,#3] @ 2 216 add r10,r10,r12 @ h+=Maj(a,b,c) from the past 217 ldrb r12,[r1,#2] 218 ldrb r0,[r1,#1] 219 orr r2,r2,r12,lsl#8 220 ldrb r12,[r1],#4 221 orr r2,r2,r0,lsl#16 222# if 2==15 223 str r1,[sp,#17*4] @ make room for r1 224# endif 225 eor r0,r6,r6,ror#5 226 orr r2,r2,r12,lsl#24 227 eor r0,r0,r6,ror#19 @ Sigma1(e) 228#endif 229 ldr r12,[r14],#4 @ *K256++ 230 add r9,r9,r2 @ h+=X[i] 231 str r2,[sp,#2*4] 232 eor r2,r7,r8 233 add r9,r9,r0,ror#6 @ h+=Sigma1(e) 234 and r2,r2,r6 235 add r9,r9,r12 @ h+=K256[i] 236 eor r2,r2,r8 @ Ch(e,f,g) 237 eor r0,r10,r10,ror#11 238 add r9,r9,r2 @ h+=Ch(e,f,g) 239#if 2==31 240 and r12,r12,#0xff 241 cmp r12,#0xf2 @ done? 242#endif 243#if 2<15 244# if __ARM_ARCH__>=7 245 ldr r2,[r1],#4 @ prefetch 246# else 247 ldrb r2,[r1,#3] 248# endif 249 eor r12,r10,r11 @ a^b, b^c in next round 250#else 251 ldr r2,[sp,#4*4] @ from future BODY_16_xx 252 eor r12,r10,r11 @ a^b, b^c in next round 253 ldr r1,[sp,#1*4] @ from future BODY_16_xx 254#endif 255 eor r0,r0,r10,ror#20 @ Sigma0(a) 256 and r3,r3,r12 @ (b^c)&=(a^b) 257 add r5,r5,r9 @ d+=h 258 eor r3,r3,r11 @ Maj(a,b,c) 259 add r9,r9,r0,ror#2 @ h+=Sigma0(a) 260 @ add r9,r9,r3 @ h+=Maj(a,b,c) 261#if __ARM_ARCH__>=7 262 @ ldr r2,[r1],#4 @ 3 263# if 3==15 264 str r1,[sp,#17*4] @ make room for r1 265# endif 266 eor r0,r5,r5,ror#5 267 add r9,r9,r3 @ h+=Maj(a,b,c) from the past 268 eor r0,r0,r5,ror#19 @ Sigma1(e) 269# ifndef __ARMEB__ 270 rev r2,r2 271# endif 272#else 273 @ ldrb r2,[r1,#3] @ 3 274 add r9,r9,r3 @ h+=Maj(a,b,c) from the past 275 ldrb r3,[r1,#2] 276 ldrb r0,[r1,#1] 277 orr r2,r2,r3,lsl#8 278 ldrb r3,[r1],#4 279 orr r2,r2,r0,lsl#16 280# if 3==15 281 str r1,[sp,#17*4] @ make room for r1 282# endif 283 eor r0,r5,r5,ror#5 284 orr r2,r2,r3,lsl#24 285 eor r0,r0,r5,ror#19 @ Sigma1(e) 286#endif 287 ldr r3,[r14],#4 @ *K256++ 288 add r8,r8,r2 @ h+=X[i] 289 str r2,[sp,#3*4] 290 eor r2,r6,r7 291 add r8,r8,r0,ror#6 @ h+=Sigma1(e) 292 and r2,r2,r5 293 add r8,r8,r3 @ h+=K256[i] 294 eor r2,r2,r7 @ Ch(e,f,g) 295 eor r0,r9,r9,ror#11 296 add r8,r8,r2 @ h+=Ch(e,f,g) 297#if 3==31 298 and r3,r3,#0xff 299 cmp r3,#0xf2 @ done? 300#endif 301#if 3<15 302# if __ARM_ARCH__>=7 303 ldr r2,[r1],#4 @ prefetch 304# else 305 ldrb r2,[r1,#3] 306# endif 307 eor r3,r9,r10 @ a^b, b^c in next round 308#else 309 ldr r2,[sp,#5*4] @ from future BODY_16_xx 310 eor r3,r9,r10 @ a^b, b^c in next round 311 ldr r1,[sp,#2*4] @ from future BODY_16_xx 312#endif 313 eor r0,r0,r9,ror#20 @ Sigma0(a) 314 and r12,r12,r3 @ (b^c)&=(a^b) 315 add r4,r4,r8 @ d+=h 316 eor r12,r12,r10 @ Maj(a,b,c) 317 add r8,r8,r0,ror#2 @ h+=Sigma0(a) 318 @ add r8,r8,r12 @ h+=Maj(a,b,c) 319#if __ARM_ARCH__>=7 320 @ ldr r2,[r1],#4 @ 4 321# if 4==15 322 str r1,[sp,#17*4] @ make room for r1 323# endif 324 eor r0,r4,r4,ror#5 325 add r8,r8,r12 @ h+=Maj(a,b,c) from the past 326 eor r0,r0,r4,ror#19 @ Sigma1(e) 327# ifndef __ARMEB__ 328 rev r2,r2 329# endif 330#else 331 @ ldrb r2,[r1,#3] @ 4 332 add r8,r8,r12 @ h+=Maj(a,b,c) from the past 333 ldrb r12,[r1,#2] 334 ldrb r0,[r1,#1] 335 orr r2,r2,r12,lsl#8 336 ldrb r12,[r1],#4 337 orr r2,r2,r0,lsl#16 338# if 4==15 339 str r1,[sp,#17*4] @ make room for r1 340# endif 341 eor r0,r4,r4,ror#5 342 orr r2,r2,r12,lsl#24 343 eor r0,r0,r4,ror#19 @ Sigma1(e) 344#endif 345 ldr r12,[r14],#4 @ *K256++ 346 add r7,r7,r2 @ h+=X[i] 347 str r2,[sp,#4*4] 348 eor r2,r5,r6 349 add r7,r7,r0,ror#6 @ h+=Sigma1(e) 350 and r2,r2,r4 351 add r7,r7,r12 @ h+=K256[i] 352 eor r2,r2,r6 @ Ch(e,f,g) 353 eor r0,r8,r8,ror#11 354 add r7,r7,r2 @ h+=Ch(e,f,g) 355#if 4==31 356 and r12,r12,#0xff 357 cmp r12,#0xf2 @ done? 358#endif 359#if 4<15 360# if __ARM_ARCH__>=7 361 ldr r2,[r1],#4 @ prefetch 362# else 363 ldrb r2,[r1,#3] 364# endif 365 eor r12,r8,r9 @ a^b, b^c in next round 366#else 367 ldr r2,[sp,#6*4] @ from future BODY_16_xx 368 eor r12,r8,r9 @ a^b, b^c in next round 369 ldr r1,[sp,#3*4] @ from future BODY_16_xx 370#endif 371 eor r0,r0,r8,ror#20 @ Sigma0(a) 372 and r3,r3,r12 @ (b^c)&=(a^b) 373 add r11,r11,r7 @ d+=h 374 eor r3,r3,r9 @ Maj(a,b,c) 375 add r7,r7,r0,ror#2 @ h+=Sigma0(a) 376 @ add r7,r7,r3 @ h+=Maj(a,b,c) 377#if __ARM_ARCH__>=7 378 @ ldr r2,[r1],#4 @ 5 379# if 5==15 380 str r1,[sp,#17*4] @ make room for r1 381# endif 382 eor r0,r11,r11,ror#5 383 add r7,r7,r3 @ h+=Maj(a,b,c) from the past 384 eor r0,r0,r11,ror#19 @ Sigma1(e) 385# ifndef __ARMEB__ 386 rev r2,r2 387# endif 388#else 389 @ ldrb r2,[r1,#3] @ 5 390 add r7,r7,r3 @ h+=Maj(a,b,c) from the past 391 ldrb r3,[r1,#2] 392 ldrb r0,[r1,#1] 393 orr r2,r2,r3,lsl#8 394 ldrb r3,[r1],#4 395 orr r2,r2,r0,lsl#16 396# if 5==15 397 str r1,[sp,#17*4] @ make room for r1 398# endif 399 eor r0,r11,r11,ror#5 400 orr r2,r2,r3,lsl#24 401 eor r0,r0,r11,ror#19 @ Sigma1(e) 402#endif 403 ldr r3,[r14],#4 @ *K256++ 404 add r6,r6,r2 @ h+=X[i] 405 str r2,[sp,#5*4] 406 eor r2,r4,r5 407 add r6,r6,r0,ror#6 @ h+=Sigma1(e) 408 and r2,r2,r11 409 add r6,r6,r3 @ h+=K256[i] 410 eor r2,r2,r5 @ Ch(e,f,g) 411 eor r0,r7,r7,ror#11 412 add r6,r6,r2 @ h+=Ch(e,f,g) 413#if 5==31 414 and r3,r3,#0xff 415 cmp r3,#0xf2 @ done? 416#endif 417#if 5<15 418# if __ARM_ARCH__>=7 419 ldr r2,[r1],#4 @ prefetch 420# else 421 ldrb r2,[r1,#3] 422# endif 423 eor r3,r7,r8 @ a^b, b^c in next round 424#else 425 ldr r2,[sp,#7*4] @ from future BODY_16_xx 426 eor r3,r7,r8 @ a^b, b^c in next round 427 ldr r1,[sp,#4*4] @ from future BODY_16_xx 428#endif 429 eor r0,r0,r7,ror#20 @ Sigma0(a) 430 and r12,r12,r3 @ (b^c)&=(a^b) 431 add r10,r10,r6 @ d+=h 432 eor r12,r12,r8 @ Maj(a,b,c) 433 add r6,r6,r0,ror#2 @ h+=Sigma0(a) 434 @ add r6,r6,r12 @ h+=Maj(a,b,c) 435#if __ARM_ARCH__>=7 436 @ ldr r2,[r1],#4 @ 6 437# if 6==15 438 str r1,[sp,#17*4] @ make room for r1 439# endif 440 eor r0,r10,r10,ror#5 441 add r6,r6,r12 @ h+=Maj(a,b,c) from the past 442 eor r0,r0,r10,ror#19 @ Sigma1(e) 443# ifndef __ARMEB__ 444 rev r2,r2 445# endif 446#else 447 @ ldrb r2,[r1,#3] @ 6 448 add r6,r6,r12 @ h+=Maj(a,b,c) from the past 449 ldrb r12,[r1,#2] 450 ldrb r0,[r1,#1] 451 orr r2,r2,r12,lsl#8 452 ldrb r12,[r1],#4 453 orr r2,r2,r0,lsl#16 454# if 6==15 455 str r1,[sp,#17*4] @ make room for r1 456# endif 457 eor r0,r10,r10,ror#5 458 orr r2,r2,r12,lsl#24 459 eor r0,r0,r10,ror#19 @ Sigma1(e) 460#endif 461 ldr r12,[r14],#4 @ *K256++ 462 add r5,r5,r2 @ h+=X[i] 463 str r2,[sp,#6*4] 464 eor r2,r11,r4 465 add r5,r5,r0,ror#6 @ h+=Sigma1(e) 466 and r2,r2,r10 467 add r5,r5,r12 @ h+=K256[i] 468 eor r2,r2,r4 @ Ch(e,f,g) 469 eor r0,r6,r6,ror#11 470 add r5,r5,r2 @ h+=Ch(e,f,g) 471#if 6==31 472 and r12,r12,#0xff 473 cmp r12,#0xf2 @ done? 474#endif 475#if 6<15 476# if __ARM_ARCH__>=7 477 ldr r2,[r1],#4 @ prefetch 478# else 479 ldrb r2,[r1,#3] 480# endif 481 eor r12,r6,r7 @ a^b, b^c in next round 482#else 483 ldr r2,[sp,#8*4] @ from future BODY_16_xx 484 eor r12,r6,r7 @ a^b, b^c in next round 485 ldr r1,[sp,#5*4] @ from future BODY_16_xx 486#endif 487 eor r0,r0,r6,ror#20 @ Sigma0(a) 488 and r3,r3,r12 @ (b^c)&=(a^b) 489 add r9,r9,r5 @ d+=h 490 eor r3,r3,r7 @ Maj(a,b,c) 491 add r5,r5,r0,ror#2 @ h+=Sigma0(a) 492 @ add r5,r5,r3 @ h+=Maj(a,b,c) 493#if __ARM_ARCH__>=7 494 @ ldr r2,[r1],#4 @ 7 495# if 7==15 496 str r1,[sp,#17*4] @ make room for r1 497# endif 498 eor r0,r9,r9,ror#5 499 add r5,r5,r3 @ h+=Maj(a,b,c) from the past 500 eor r0,r0,r9,ror#19 @ Sigma1(e) 501# ifndef __ARMEB__ 502 rev r2,r2 503# endif 504#else 505 @ ldrb r2,[r1,#3] @ 7 506 add r5,r5,r3 @ h+=Maj(a,b,c) from the past 507 ldrb r3,[r1,#2] 508 ldrb r0,[r1,#1] 509 orr r2,r2,r3,lsl#8 510 ldrb r3,[r1],#4 511 orr r2,r2,r0,lsl#16 512# if 7==15 513 str r1,[sp,#17*4] @ make room for r1 514# endif 515 eor r0,r9,r9,ror#5 516 orr r2,r2,r3,lsl#24 517 eor r0,r0,r9,ror#19 @ Sigma1(e) 518#endif 519 ldr r3,[r14],#4 @ *K256++ 520 add r4,r4,r2 @ h+=X[i] 521 str r2,[sp,#7*4] 522 eor r2,r10,r11 523 add r4,r4,r0,ror#6 @ h+=Sigma1(e) 524 and r2,r2,r9 525 add r4,r4,r3 @ h+=K256[i] 526 eor r2,r2,r11 @ Ch(e,f,g) 527 eor r0,r5,r5,ror#11 528 add r4,r4,r2 @ h+=Ch(e,f,g) 529#if 7==31 530 and r3,r3,#0xff 531 cmp r3,#0xf2 @ done? 532#endif 533#if 7<15 534# if __ARM_ARCH__>=7 535 ldr r2,[r1],#4 @ prefetch 536# else 537 ldrb r2,[r1,#3] 538# endif 539 eor r3,r5,r6 @ a^b, b^c in next round 540#else 541 ldr r2,[sp,#9*4] @ from future BODY_16_xx 542 eor r3,r5,r6 @ a^b, b^c in next round 543 ldr r1,[sp,#6*4] @ from future BODY_16_xx 544#endif 545 eor r0,r0,r5,ror#20 @ Sigma0(a) 546 and r12,r12,r3 @ (b^c)&=(a^b) 547 add r8,r8,r4 @ d+=h 548 eor r12,r12,r6 @ Maj(a,b,c) 549 add r4,r4,r0,ror#2 @ h+=Sigma0(a) 550 @ add r4,r4,r12 @ h+=Maj(a,b,c) 551#if __ARM_ARCH__>=7 552 @ ldr r2,[r1],#4 @ 8 553# if 8==15 554 str r1,[sp,#17*4] @ make room for r1 555# endif 556 eor r0,r8,r8,ror#5 557 add r4,r4,r12 @ h+=Maj(a,b,c) from the past 558 eor r0,r0,r8,ror#19 @ Sigma1(e) 559# ifndef __ARMEB__ 560 rev r2,r2 561# endif 562#else 563 @ ldrb r2,[r1,#3] @ 8 564 add r4,r4,r12 @ h+=Maj(a,b,c) from the past 565 ldrb r12,[r1,#2] 566 ldrb r0,[r1,#1] 567 orr r2,r2,r12,lsl#8 568 ldrb r12,[r1],#4 569 orr r2,r2,r0,lsl#16 570# if 8==15 571 str r1,[sp,#17*4] @ make room for r1 572# endif 573 eor r0,r8,r8,ror#5 574 orr r2,r2,r12,lsl#24 575 eor r0,r0,r8,ror#19 @ Sigma1(e) 576#endif 577 ldr r12,[r14],#4 @ *K256++ 578 add r11,r11,r2 @ h+=X[i] 579 str r2,[sp,#8*4] 580 eor r2,r9,r10 581 add r11,r11,r0,ror#6 @ h+=Sigma1(e) 582 and r2,r2,r8 583 add r11,r11,r12 @ h+=K256[i] 584 eor r2,r2,r10 @ Ch(e,f,g) 585 eor r0,r4,r4,ror#11 586 add r11,r11,r2 @ h+=Ch(e,f,g) 587#if 8==31 588 and r12,r12,#0xff 589 cmp r12,#0xf2 @ done? 590#endif 591#if 8<15 592# if __ARM_ARCH__>=7 593 ldr r2,[r1],#4 @ prefetch 594# else 595 ldrb r2,[r1,#3] 596# endif 597 eor r12,r4,r5 @ a^b, b^c in next round 598#else 599 ldr r2,[sp,#10*4] @ from future BODY_16_xx 600 eor r12,r4,r5 @ a^b, b^c in next round 601 ldr r1,[sp,#7*4] @ from future BODY_16_xx 602#endif 603 eor r0,r0,r4,ror#20 @ Sigma0(a) 604 and r3,r3,r12 @ (b^c)&=(a^b) 605 add r7,r7,r11 @ d+=h 606 eor r3,r3,r5 @ Maj(a,b,c) 607 add r11,r11,r0,ror#2 @ h+=Sigma0(a) 608 @ add r11,r11,r3 @ h+=Maj(a,b,c) 609#if __ARM_ARCH__>=7 610 @ ldr r2,[r1],#4 @ 9 611# if 9==15 612 str r1,[sp,#17*4] @ make room for r1 613# endif 614 eor r0,r7,r7,ror#5 615 add r11,r11,r3 @ h+=Maj(a,b,c) from the past 616 eor r0,r0,r7,ror#19 @ Sigma1(e) 617# ifndef __ARMEB__ 618 rev r2,r2 619# endif 620#else 621 @ ldrb r2,[r1,#3] @ 9 622 add r11,r11,r3 @ h+=Maj(a,b,c) from the past 623 ldrb r3,[r1,#2] 624 ldrb r0,[r1,#1] 625 orr r2,r2,r3,lsl#8 626 ldrb r3,[r1],#4 627 orr r2,r2,r0,lsl#16 628# if 9==15 629 str r1,[sp,#17*4] @ make room for r1 630# endif 631 eor r0,r7,r7,ror#5 632 orr r2,r2,r3,lsl#24 633 eor r0,r0,r7,ror#19 @ Sigma1(e) 634#endif 635 ldr r3,[r14],#4 @ *K256++ 636 add r10,r10,r2 @ h+=X[i] 637 str r2,[sp,#9*4] 638 eor r2,r8,r9 639 add r10,r10,r0,ror#6 @ h+=Sigma1(e) 640 and r2,r2,r7 641 add r10,r10,r3 @ h+=K256[i] 642 eor r2,r2,r9 @ Ch(e,f,g) 643 eor r0,r11,r11,ror#11 644 add r10,r10,r2 @ h+=Ch(e,f,g) 645#if 9==31 646 and r3,r3,#0xff 647 cmp r3,#0xf2 @ done? 648#endif 649#if 9<15 650# if __ARM_ARCH__>=7 651 ldr r2,[r1],#4 @ prefetch 652# else 653 ldrb r2,[r1,#3] 654# endif 655 eor r3,r11,r4 @ a^b, b^c in next round 656#else 657 ldr r2,[sp,#11*4] @ from future BODY_16_xx 658 eor r3,r11,r4 @ a^b, b^c in next round 659 ldr r1,[sp,#8*4] @ from future BODY_16_xx 660#endif 661 eor r0,r0,r11,ror#20 @ Sigma0(a) 662 and r12,r12,r3 @ (b^c)&=(a^b) 663 add r6,r6,r10 @ d+=h 664 eor r12,r12,r4 @ Maj(a,b,c) 665 add r10,r10,r0,ror#2 @ h+=Sigma0(a) 666 @ add r10,r10,r12 @ h+=Maj(a,b,c) 667#if __ARM_ARCH__>=7 668 @ ldr r2,[r1],#4 @ 10 669# if 10==15 670 str r1,[sp,#17*4] @ make room for r1 671# endif 672 eor r0,r6,r6,ror#5 673 add r10,r10,r12 @ h+=Maj(a,b,c) from the past 674 eor r0,r0,r6,ror#19 @ Sigma1(e) 675# ifndef __ARMEB__ 676 rev r2,r2 677# endif 678#else 679 @ ldrb r2,[r1,#3] @ 10 680 add r10,r10,r12 @ h+=Maj(a,b,c) from the past 681 ldrb r12,[r1,#2] 682 ldrb r0,[r1,#1] 683 orr r2,r2,r12,lsl#8 684 ldrb r12,[r1],#4 685 orr r2,r2,r0,lsl#16 686# if 10==15 687 str r1,[sp,#17*4] @ make room for r1 688# endif 689 eor r0,r6,r6,ror#5 690 orr r2,r2,r12,lsl#24 691 eor r0,r0,r6,ror#19 @ Sigma1(e) 692#endif 693 ldr r12,[r14],#4 @ *K256++ 694 add r9,r9,r2 @ h+=X[i] 695 str r2,[sp,#10*4] 696 eor r2,r7,r8 697 add r9,r9,r0,ror#6 @ h+=Sigma1(e) 698 and r2,r2,r6 699 add r9,r9,r12 @ h+=K256[i] 700 eor r2,r2,r8 @ Ch(e,f,g) 701 eor r0,r10,r10,ror#11 702 add r9,r9,r2 @ h+=Ch(e,f,g) 703#if 10==31 704 and r12,r12,#0xff 705 cmp r12,#0xf2 @ done? 706#endif 707#if 10<15 708# if __ARM_ARCH__>=7 709 ldr r2,[r1],#4 @ prefetch 710# else 711 ldrb r2,[r1,#3] 712# endif 713 eor r12,r10,r11 @ a^b, b^c in next round 714#else 715 ldr r2,[sp,#12*4] @ from future BODY_16_xx 716 eor r12,r10,r11 @ a^b, b^c in next round 717 ldr r1,[sp,#9*4] @ from future BODY_16_xx 718#endif 719 eor r0,r0,r10,ror#20 @ Sigma0(a) 720 and r3,r3,r12 @ (b^c)&=(a^b) 721 add r5,r5,r9 @ d+=h 722 eor r3,r3,r11 @ Maj(a,b,c) 723 add r9,r9,r0,ror#2 @ h+=Sigma0(a) 724 @ add r9,r9,r3 @ h+=Maj(a,b,c) 725#if __ARM_ARCH__>=7 726 @ ldr r2,[r1],#4 @ 11 727# if 11==15 728 str r1,[sp,#17*4] @ make room for r1 729# endif 730 eor r0,r5,r5,ror#5 731 add r9,r9,r3 @ h+=Maj(a,b,c) from the past 732 eor r0,r0,r5,ror#19 @ Sigma1(e) 733# ifndef __ARMEB__ 734 rev r2,r2 735# endif 736#else 737 @ ldrb r2,[r1,#3] @ 11 738 add r9,r9,r3 @ h+=Maj(a,b,c) from the past 739 ldrb r3,[r1,#2] 740 ldrb r0,[r1,#1] 741 orr r2,r2,r3,lsl#8 742 ldrb r3,[r1],#4 743 orr r2,r2,r0,lsl#16 744# if 11==15 745 str r1,[sp,#17*4] @ make room for r1 746# endif 747 eor r0,r5,r5,ror#5 748 orr r2,r2,r3,lsl#24 749 eor r0,r0,r5,ror#19 @ Sigma1(e) 750#endif 751 ldr r3,[r14],#4 @ *K256++ 752 add r8,r8,r2 @ h+=X[i] 753 str r2,[sp,#11*4] 754 eor r2,r6,r7 755 add r8,r8,r0,ror#6 @ h+=Sigma1(e) 756 and r2,r2,r5 757 add r8,r8,r3 @ h+=K256[i] 758 eor r2,r2,r7 @ Ch(e,f,g) 759 eor r0,r9,r9,ror#11 760 add r8,r8,r2 @ h+=Ch(e,f,g) 761#if 11==31 762 and r3,r3,#0xff 763 cmp r3,#0xf2 @ done? 764#endif 765#if 11<15 766# if __ARM_ARCH__>=7 767 ldr r2,[r1],#4 @ prefetch 768# else 769 ldrb r2,[r1,#3] 770# endif 771 eor r3,r9,r10 @ a^b, b^c in next round 772#else 773 ldr r2,[sp,#13*4] @ from future BODY_16_xx 774 eor r3,r9,r10 @ a^b, b^c in next round 775 ldr r1,[sp,#10*4] @ from future BODY_16_xx 776#endif 777 eor r0,r0,r9,ror#20 @ Sigma0(a) 778 and r12,r12,r3 @ (b^c)&=(a^b) 779 add r4,r4,r8 @ d+=h 780 eor r12,r12,r10 @ Maj(a,b,c) 781 add r8,r8,r0,ror#2 @ h+=Sigma0(a) 782 @ add r8,r8,r12 @ h+=Maj(a,b,c) 783#if __ARM_ARCH__>=7 784 @ ldr r2,[r1],#4 @ 12 785# if 12==15 786 str r1,[sp,#17*4] @ make room for r1 787# endif 788 eor r0,r4,r4,ror#5 789 add r8,r8,r12 @ h+=Maj(a,b,c) from the past 790 eor r0,r0,r4,ror#19 @ Sigma1(e) 791# ifndef __ARMEB__ 792 rev r2,r2 793# endif 794#else 795 @ ldrb r2,[r1,#3] @ 12 796 add r8,r8,r12 @ h+=Maj(a,b,c) from the past 797 ldrb r12,[r1,#2] 798 ldrb r0,[r1,#1] 799 orr r2,r2,r12,lsl#8 800 ldrb r12,[r1],#4 801 orr r2,r2,r0,lsl#16 802# if 12==15 803 str r1,[sp,#17*4] @ make room for r1 804# endif 805 eor r0,r4,r4,ror#5 806 orr r2,r2,r12,lsl#24 807 eor r0,r0,r4,ror#19 @ Sigma1(e) 808#endif 809 ldr r12,[r14],#4 @ *K256++ 810 add r7,r7,r2 @ h+=X[i] 811 str r2,[sp,#12*4] 812 eor r2,r5,r6 813 add r7,r7,r0,ror#6 @ h+=Sigma1(e) 814 and r2,r2,r4 815 add r7,r7,r12 @ h+=K256[i] 816 eor r2,r2,r6 @ Ch(e,f,g) 817 eor r0,r8,r8,ror#11 818 add r7,r7,r2 @ h+=Ch(e,f,g) 819#if 12==31 820 and r12,r12,#0xff 821 cmp r12,#0xf2 @ done? 822#endif 823#if 12<15 824# if __ARM_ARCH__>=7 825 ldr r2,[r1],#4 @ prefetch 826# else 827 ldrb r2,[r1,#3] 828# endif 829 eor r12,r8,r9 @ a^b, b^c in next round 830#else 831 ldr r2,[sp,#14*4] @ from future BODY_16_xx 832 eor r12,r8,r9 @ a^b, b^c in next round 833 ldr r1,[sp,#11*4] @ from future BODY_16_xx 834#endif 835 eor r0,r0,r8,ror#20 @ Sigma0(a) 836 and r3,r3,r12 @ (b^c)&=(a^b) 837 add r11,r11,r7 @ d+=h 838 eor r3,r3,r9 @ Maj(a,b,c) 839 add r7,r7,r0,ror#2 @ h+=Sigma0(a) 840 @ add r7,r7,r3 @ h+=Maj(a,b,c) 841#if __ARM_ARCH__>=7 842 @ ldr r2,[r1],#4 @ 13 843# if 13==15 844 str r1,[sp,#17*4] @ make room for r1 845# endif 846 eor r0,r11,r11,ror#5 847 add r7,r7,r3 @ h+=Maj(a,b,c) from the past 848 eor r0,r0,r11,ror#19 @ Sigma1(e) 849# ifndef __ARMEB__ 850 rev r2,r2 851# endif 852#else 853 @ ldrb r2,[r1,#3] @ 13 854 add r7,r7,r3 @ h+=Maj(a,b,c) from the past 855 ldrb r3,[r1,#2] 856 ldrb r0,[r1,#1] 857 orr r2,r2,r3,lsl#8 858 ldrb r3,[r1],#4 859 orr r2,r2,r0,lsl#16 860# if 13==15 861 str r1,[sp,#17*4] @ make room for r1 862# endif 863 eor r0,r11,r11,ror#5 864 orr r2,r2,r3,lsl#24 865 eor r0,r0,r11,ror#19 @ Sigma1(e) 866#endif 867 ldr r3,[r14],#4 @ *K256++ 868 add r6,r6,r2 @ h+=X[i] 869 str r2,[sp,#13*4] 870 eor r2,r4,r5 871 add r6,r6,r0,ror#6 @ h+=Sigma1(e) 872 and r2,r2,r11 873 add r6,r6,r3 @ h+=K256[i] 874 eor r2,r2,r5 @ Ch(e,f,g) 875 eor r0,r7,r7,ror#11 876 add r6,r6,r2 @ h+=Ch(e,f,g) 877#if 13==31 878 and r3,r3,#0xff 879 cmp r3,#0xf2 @ done? 880#endif 881#if 13<15 882# if __ARM_ARCH__>=7 883 ldr r2,[r1],#4 @ prefetch 884# else 885 ldrb r2,[r1,#3] 886# endif 887 eor r3,r7,r8 @ a^b, b^c in next round 888#else 889 ldr r2,[sp,#15*4] @ from future BODY_16_xx 890 eor r3,r7,r8 @ a^b, b^c in next round 891 ldr r1,[sp,#12*4] @ from future BODY_16_xx 892#endif 893 eor r0,r0,r7,ror#20 @ Sigma0(a) 894 and r12,r12,r3 @ (b^c)&=(a^b) 895 add r10,r10,r6 @ d+=h 896 eor r12,r12,r8 @ Maj(a,b,c) 897 add r6,r6,r0,ror#2 @ h+=Sigma0(a) 898 @ add r6,r6,r12 @ h+=Maj(a,b,c) 899#if __ARM_ARCH__>=7 900 @ ldr r2,[r1],#4 @ 14 901# if 14==15 902 str r1,[sp,#17*4] @ make room for r1 903# endif 904 eor r0,r10,r10,ror#5 905 add r6,r6,r12 @ h+=Maj(a,b,c) from the past 906 eor r0,r0,r10,ror#19 @ Sigma1(e) 907# ifndef __ARMEB__ 908 rev r2,r2 909# endif 910#else 911 @ ldrb r2,[r1,#3] @ 14 912 add r6,r6,r12 @ h+=Maj(a,b,c) from the past 913 ldrb r12,[r1,#2] 914 ldrb r0,[r1,#1] 915 orr r2,r2,r12,lsl#8 916 ldrb r12,[r1],#4 917 orr r2,r2,r0,lsl#16 918# if 14==15 919 str r1,[sp,#17*4] @ make room for r1 920# endif 921 eor r0,r10,r10,ror#5 922 orr r2,r2,r12,lsl#24 923 eor r0,r0,r10,ror#19 @ Sigma1(e) 924#endif 925 ldr r12,[r14],#4 @ *K256++ 926 add r5,r5,r2 @ h+=X[i] 927 str r2,[sp,#14*4] 928 eor r2,r11,r4 929 add r5,r5,r0,ror#6 @ h+=Sigma1(e) 930 and r2,r2,r10 931 add r5,r5,r12 @ h+=K256[i] 932 eor r2,r2,r4 @ Ch(e,f,g) 933 eor r0,r6,r6,ror#11 934 add r5,r5,r2 @ h+=Ch(e,f,g) 935#if 14==31 936 and r12,r12,#0xff 937 cmp r12,#0xf2 @ done? 938#endif 939#if 14<15 940# if __ARM_ARCH__>=7 941 ldr r2,[r1],#4 @ prefetch 942# else 943 ldrb r2,[r1,#3] 944# endif 945 eor r12,r6,r7 @ a^b, b^c in next round 946#else 947 ldr r2,[sp,#0*4] @ from future BODY_16_xx 948 eor r12,r6,r7 @ a^b, b^c in next round 949 ldr r1,[sp,#13*4] @ from future BODY_16_xx 950#endif 951 eor r0,r0,r6,ror#20 @ Sigma0(a) 952 and r3,r3,r12 @ (b^c)&=(a^b) 953 add r9,r9,r5 @ d+=h 954 eor r3,r3,r7 @ Maj(a,b,c) 955 add r5,r5,r0,ror#2 @ h+=Sigma0(a) 956 @ add r5,r5,r3 @ h+=Maj(a,b,c) 957#if __ARM_ARCH__>=7 958 @ ldr r2,[r1],#4 @ 15 959# if 15==15 960 str r1,[sp,#17*4] @ make room for r1 961# endif 962 eor r0,r9,r9,ror#5 963 add r5,r5,r3 @ h+=Maj(a,b,c) from the past 964 eor r0,r0,r9,ror#19 @ Sigma1(e) 965# ifndef __ARMEB__ 966 rev r2,r2 967# endif 968#else 969 @ ldrb r2,[r1,#3] @ 15 970 add r5,r5,r3 @ h+=Maj(a,b,c) from the past 971 ldrb r3,[r1,#2] 972 ldrb r0,[r1,#1] 973 orr r2,r2,r3,lsl#8 974 ldrb r3,[r1],#4 975 orr r2,r2,r0,lsl#16 976# if 15==15 977 str r1,[sp,#17*4] @ make room for r1 978# endif 979 eor r0,r9,r9,ror#5 980 orr r2,r2,r3,lsl#24 981 eor r0,r0,r9,ror#19 @ Sigma1(e) 982#endif 983 ldr r3,[r14],#4 @ *K256++ 984 add r4,r4,r2 @ h+=X[i] 985 str r2,[sp,#15*4] 986 eor r2,r10,r11 987 add r4,r4,r0,ror#6 @ h+=Sigma1(e) 988 and r2,r2,r9 989 add r4,r4,r3 @ h+=K256[i] 990 eor r2,r2,r11 @ Ch(e,f,g) 991 eor r0,r5,r5,ror#11 992 add r4,r4,r2 @ h+=Ch(e,f,g) 993#if 15==31 994 and r3,r3,#0xff 995 cmp r3,#0xf2 @ done? 996#endif 997#if 15<15 998# if __ARM_ARCH__>=7 999 ldr r2,[r1],#4 @ prefetch 1000# else 1001 ldrb r2,[r1,#3] 1002# endif 1003 eor r3,r5,r6 @ a^b, b^c in next round 1004#else 1005 ldr r2,[sp,#1*4] @ from future BODY_16_xx 1006 eor r3,r5,r6 @ a^b, b^c in next round 1007 ldr r1,[sp,#14*4] @ from future BODY_16_xx 1008#endif 1009 eor r0,r0,r5,ror#20 @ Sigma0(a) 1010 and r12,r12,r3 @ (b^c)&=(a^b) 1011 add r8,r8,r4 @ d+=h 1012 eor r12,r12,r6 @ Maj(a,b,c) 1013 add r4,r4,r0,ror#2 @ h+=Sigma0(a) 1014 @ add r4,r4,r12 @ h+=Maj(a,b,c) 1015.Lrounds_16_xx: 1016 @ ldr r2,[sp,#1*4] @ 16 1017 @ ldr r1,[sp,#14*4] 1018 mov r0,r2,ror#7 1019 add r4,r4,r12 @ h+=Maj(a,b,c) from the past 1020 mov r12,r1,ror#17 1021 eor r0,r0,r2,ror#18 1022 eor r12,r12,r1,ror#19 1023 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1024 ldr r2,[sp,#0*4] 1025 eor r12,r12,r1,lsr#10 @ sigma1(X[i+14]) 1026 ldr r1,[sp,#9*4] 1027 1028 add r12,r12,r0 1029 eor r0,r8,r8,ror#5 @ from BODY_00_15 1030 add r2,r2,r12 1031 eor r0,r0,r8,ror#19 @ Sigma1(e) 1032 add r2,r2,r1 @ X[i] 1033 ldr r12,[r14],#4 @ *K256++ 1034 add r11,r11,r2 @ h+=X[i] 1035 str r2,[sp,#0*4] 1036 eor r2,r9,r10 1037 add r11,r11,r0,ror#6 @ h+=Sigma1(e) 1038 and r2,r2,r8 1039 add r11,r11,r12 @ h+=K256[i] 1040 eor r2,r2,r10 @ Ch(e,f,g) 1041 eor r0,r4,r4,ror#11 1042 add r11,r11,r2 @ h+=Ch(e,f,g) 1043#if 16==31 1044 and r12,r12,#0xff 1045 cmp r12,#0xf2 @ done? 1046#endif 1047#if 16<15 1048# if __ARM_ARCH__>=7 1049 ldr r2,[r1],#4 @ prefetch 1050# else 1051 ldrb r2,[r1,#3] 1052# endif 1053 eor r12,r4,r5 @ a^b, b^c in next round 1054#else 1055 ldr r2,[sp,#2*4] @ from future BODY_16_xx 1056 eor r12,r4,r5 @ a^b, b^c in next round 1057 ldr r1,[sp,#15*4] @ from future BODY_16_xx 1058#endif 1059 eor r0,r0,r4,ror#20 @ Sigma0(a) 1060 and r3,r3,r12 @ (b^c)&=(a^b) 1061 add r7,r7,r11 @ d+=h 1062 eor r3,r3,r5 @ Maj(a,b,c) 1063 add r11,r11,r0,ror#2 @ h+=Sigma0(a) 1064 @ add r11,r11,r3 @ h+=Maj(a,b,c) 1065 @ ldr r2,[sp,#2*4] @ 17 1066 @ ldr r1,[sp,#15*4] 1067 mov r0,r2,ror#7 1068 add r11,r11,r3 @ h+=Maj(a,b,c) from the past 1069 mov r3,r1,ror#17 1070 eor r0,r0,r2,ror#18 1071 eor r3,r3,r1,ror#19 1072 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1073 ldr r2,[sp,#1*4] 1074 eor r3,r3,r1,lsr#10 @ sigma1(X[i+14]) 1075 ldr r1,[sp,#10*4] 1076 1077 add r3,r3,r0 1078 eor r0,r7,r7,ror#5 @ from BODY_00_15 1079 add r2,r2,r3 1080 eor r0,r0,r7,ror#19 @ Sigma1(e) 1081 add r2,r2,r1 @ X[i] 1082 ldr r3,[r14],#4 @ *K256++ 1083 add r10,r10,r2 @ h+=X[i] 1084 str r2,[sp,#1*4] 1085 eor r2,r8,r9 1086 add r10,r10,r0,ror#6 @ h+=Sigma1(e) 1087 and r2,r2,r7 1088 add r10,r10,r3 @ h+=K256[i] 1089 eor r2,r2,r9 @ Ch(e,f,g) 1090 eor r0,r11,r11,ror#11 1091 add r10,r10,r2 @ h+=Ch(e,f,g) 1092#if 17==31 1093 and r3,r3,#0xff 1094 cmp r3,#0xf2 @ done? 1095#endif 1096#if 17<15 1097# if __ARM_ARCH__>=7 1098 ldr r2,[r1],#4 @ prefetch 1099# else 1100 ldrb r2,[r1,#3] 1101# endif 1102 eor r3,r11,r4 @ a^b, b^c in next round 1103#else 1104 ldr r2,[sp,#3*4] @ from future BODY_16_xx 1105 eor r3,r11,r4 @ a^b, b^c in next round 1106 ldr r1,[sp,#0*4] @ from future BODY_16_xx 1107#endif 1108 eor r0,r0,r11,ror#20 @ Sigma0(a) 1109 and r12,r12,r3 @ (b^c)&=(a^b) 1110 add r6,r6,r10 @ d+=h 1111 eor r12,r12,r4 @ Maj(a,b,c) 1112 add r10,r10,r0,ror#2 @ h+=Sigma0(a) 1113 @ add r10,r10,r12 @ h+=Maj(a,b,c) 1114 @ ldr r2,[sp,#3*4] @ 18 1115 @ ldr r1,[sp,#0*4] 1116 mov r0,r2,ror#7 1117 add r10,r10,r12 @ h+=Maj(a,b,c) from the past 1118 mov r12,r1,ror#17 1119 eor r0,r0,r2,ror#18 1120 eor r12,r12,r1,ror#19 1121 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1122 ldr r2,[sp,#2*4] 1123 eor r12,r12,r1,lsr#10 @ sigma1(X[i+14]) 1124 ldr r1,[sp,#11*4] 1125 1126 add r12,r12,r0 1127 eor r0,r6,r6,ror#5 @ from BODY_00_15 1128 add r2,r2,r12 1129 eor r0,r0,r6,ror#19 @ Sigma1(e) 1130 add r2,r2,r1 @ X[i] 1131 ldr r12,[r14],#4 @ *K256++ 1132 add r9,r9,r2 @ h+=X[i] 1133 str r2,[sp,#2*4] 1134 eor r2,r7,r8 1135 add r9,r9,r0,ror#6 @ h+=Sigma1(e) 1136 and r2,r2,r6 1137 add r9,r9,r12 @ h+=K256[i] 1138 eor r2,r2,r8 @ Ch(e,f,g) 1139 eor r0,r10,r10,ror#11 1140 add r9,r9,r2 @ h+=Ch(e,f,g) 1141#if 18==31 1142 and r12,r12,#0xff 1143 cmp r12,#0xf2 @ done? 1144#endif 1145#if 18<15 1146# if __ARM_ARCH__>=7 1147 ldr r2,[r1],#4 @ prefetch 1148# else 1149 ldrb r2,[r1,#3] 1150# endif 1151 eor r12,r10,r11 @ a^b, b^c in next round 1152#else 1153 ldr r2,[sp,#4*4] @ from future BODY_16_xx 1154 eor r12,r10,r11 @ a^b, b^c in next round 1155 ldr r1,[sp,#1*4] @ from future BODY_16_xx 1156#endif 1157 eor r0,r0,r10,ror#20 @ Sigma0(a) 1158 and r3,r3,r12 @ (b^c)&=(a^b) 1159 add r5,r5,r9 @ d+=h 1160 eor r3,r3,r11 @ Maj(a,b,c) 1161 add r9,r9,r0,ror#2 @ h+=Sigma0(a) 1162 @ add r9,r9,r3 @ h+=Maj(a,b,c) 1163 @ ldr r2,[sp,#4*4] @ 19 1164 @ ldr r1,[sp,#1*4] 1165 mov r0,r2,ror#7 1166 add r9,r9,r3 @ h+=Maj(a,b,c) from the past 1167 mov r3,r1,ror#17 1168 eor r0,r0,r2,ror#18 1169 eor r3,r3,r1,ror#19 1170 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1171 ldr r2,[sp,#3*4] 1172 eor r3,r3,r1,lsr#10 @ sigma1(X[i+14]) 1173 ldr r1,[sp,#12*4] 1174 1175 add r3,r3,r0 1176 eor r0,r5,r5,ror#5 @ from BODY_00_15 1177 add r2,r2,r3 1178 eor r0,r0,r5,ror#19 @ Sigma1(e) 1179 add r2,r2,r1 @ X[i] 1180 ldr r3,[r14],#4 @ *K256++ 1181 add r8,r8,r2 @ h+=X[i] 1182 str r2,[sp,#3*4] 1183 eor r2,r6,r7 1184 add r8,r8,r0,ror#6 @ h+=Sigma1(e) 1185 and r2,r2,r5 1186 add r8,r8,r3 @ h+=K256[i] 1187 eor r2,r2,r7 @ Ch(e,f,g) 1188 eor r0,r9,r9,ror#11 1189 add r8,r8,r2 @ h+=Ch(e,f,g) 1190#if 19==31 1191 and r3,r3,#0xff 1192 cmp r3,#0xf2 @ done? 1193#endif 1194#if 19<15 1195# if __ARM_ARCH__>=7 1196 ldr r2,[r1],#4 @ prefetch 1197# else 1198 ldrb r2,[r1,#3] 1199# endif 1200 eor r3,r9,r10 @ a^b, b^c in next round 1201#else 1202 ldr r2,[sp,#5*4] @ from future BODY_16_xx 1203 eor r3,r9,r10 @ a^b, b^c in next round 1204 ldr r1,[sp,#2*4] @ from future BODY_16_xx 1205#endif 1206 eor r0,r0,r9,ror#20 @ Sigma0(a) 1207 and r12,r12,r3 @ (b^c)&=(a^b) 1208 add r4,r4,r8 @ d+=h 1209 eor r12,r12,r10 @ Maj(a,b,c) 1210 add r8,r8,r0,ror#2 @ h+=Sigma0(a) 1211 @ add r8,r8,r12 @ h+=Maj(a,b,c) 1212 @ ldr r2,[sp,#5*4] @ 20 1213 @ ldr r1,[sp,#2*4] 1214 mov r0,r2,ror#7 1215 add r8,r8,r12 @ h+=Maj(a,b,c) from the past 1216 mov r12,r1,ror#17 1217 eor r0,r0,r2,ror#18 1218 eor r12,r12,r1,ror#19 1219 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1220 ldr r2,[sp,#4*4] 1221 eor r12,r12,r1,lsr#10 @ sigma1(X[i+14]) 1222 ldr r1,[sp,#13*4] 1223 1224 add r12,r12,r0 1225 eor r0,r4,r4,ror#5 @ from BODY_00_15 1226 add r2,r2,r12 1227 eor r0,r0,r4,ror#19 @ Sigma1(e) 1228 add r2,r2,r1 @ X[i] 1229 ldr r12,[r14],#4 @ *K256++ 1230 add r7,r7,r2 @ h+=X[i] 1231 str r2,[sp,#4*4] 1232 eor r2,r5,r6 1233 add r7,r7,r0,ror#6 @ h+=Sigma1(e) 1234 and r2,r2,r4 1235 add r7,r7,r12 @ h+=K256[i] 1236 eor r2,r2,r6 @ Ch(e,f,g) 1237 eor r0,r8,r8,ror#11 1238 add r7,r7,r2 @ h+=Ch(e,f,g) 1239#if 20==31 1240 and r12,r12,#0xff 1241 cmp r12,#0xf2 @ done? 1242#endif 1243#if 20<15 1244# if __ARM_ARCH__>=7 1245 ldr r2,[r1],#4 @ prefetch 1246# else 1247 ldrb r2,[r1,#3] 1248# endif 1249 eor r12,r8,r9 @ a^b, b^c in next round 1250#else 1251 ldr r2,[sp,#6*4] @ from future BODY_16_xx 1252 eor r12,r8,r9 @ a^b, b^c in next round 1253 ldr r1,[sp,#3*4] @ from future BODY_16_xx 1254#endif 1255 eor r0,r0,r8,ror#20 @ Sigma0(a) 1256 and r3,r3,r12 @ (b^c)&=(a^b) 1257 add r11,r11,r7 @ d+=h 1258 eor r3,r3,r9 @ Maj(a,b,c) 1259 add r7,r7,r0,ror#2 @ h+=Sigma0(a) 1260 @ add r7,r7,r3 @ h+=Maj(a,b,c) 1261 @ ldr r2,[sp,#6*4] @ 21 1262 @ ldr r1,[sp,#3*4] 1263 mov r0,r2,ror#7 1264 add r7,r7,r3 @ h+=Maj(a,b,c) from the past 1265 mov r3,r1,ror#17 1266 eor r0,r0,r2,ror#18 1267 eor r3,r3,r1,ror#19 1268 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1269 ldr r2,[sp,#5*4] 1270 eor r3,r3,r1,lsr#10 @ sigma1(X[i+14]) 1271 ldr r1,[sp,#14*4] 1272 1273 add r3,r3,r0 1274 eor r0,r11,r11,ror#5 @ from BODY_00_15 1275 add r2,r2,r3 1276 eor r0,r0,r11,ror#19 @ Sigma1(e) 1277 add r2,r2,r1 @ X[i] 1278 ldr r3,[r14],#4 @ *K256++ 1279 add r6,r6,r2 @ h+=X[i] 1280 str r2,[sp,#5*4] 1281 eor r2,r4,r5 1282 add r6,r6,r0,ror#6 @ h+=Sigma1(e) 1283 and r2,r2,r11 1284 add r6,r6,r3 @ h+=K256[i] 1285 eor r2,r2,r5 @ Ch(e,f,g) 1286 eor r0,r7,r7,ror#11 1287 add r6,r6,r2 @ h+=Ch(e,f,g) 1288#if 21==31 1289 and r3,r3,#0xff 1290 cmp r3,#0xf2 @ done? 1291#endif 1292#if 21<15 1293# if __ARM_ARCH__>=7 1294 ldr r2,[r1],#4 @ prefetch 1295# else 1296 ldrb r2,[r1,#3] 1297# endif 1298 eor r3,r7,r8 @ a^b, b^c in next round 1299#else 1300 ldr r2,[sp,#7*4] @ from future BODY_16_xx 1301 eor r3,r7,r8 @ a^b, b^c in next round 1302 ldr r1,[sp,#4*4] @ from future BODY_16_xx 1303#endif 1304 eor r0,r0,r7,ror#20 @ Sigma0(a) 1305 and r12,r12,r3 @ (b^c)&=(a^b) 1306 add r10,r10,r6 @ d+=h 1307 eor r12,r12,r8 @ Maj(a,b,c) 1308 add r6,r6,r0,ror#2 @ h+=Sigma0(a) 1309 @ add r6,r6,r12 @ h+=Maj(a,b,c) 1310 @ ldr r2,[sp,#7*4] @ 22 1311 @ ldr r1,[sp,#4*4] 1312 mov r0,r2,ror#7 1313 add r6,r6,r12 @ h+=Maj(a,b,c) from the past 1314 mov r12,r1,ror#17 1315 eor r0,r0,r2,ror#18 1316 eor r12,r12,r1,ror#19 1317 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1318 ldr r2,[sp,#6*4] 1319 eor r12,r12,r1,lsr#10 @ sigma1(X[i+14]) 1320 ldr r1,[sp,#15*4] 1321 1322 add r12,r12,r0 1323 eor r0,r10,r10,ror#5 @ from BODY_00_15 1324 add r2,r2,r12 1325 eor r0,r0,r10,ror#19 @ Sigma1(e) 1326 add r2,r2,r1 @ X[i] 1327 ldr r12,[r14],#4 @ *K256++ 1328 add r5,r5,r2 @ h+=X[i] 1329 str r2,[sp,#6*4] 1330 eor r2,r11,r4 1331 add r5,r5,r0,ror#6 @ h+=Sigma1(e) 1332 and r2,r2,r10 1333 add r5,r5,r12 @ h+=K256[i] 1334 eor r2,r2,r4 @ Ch(e,f,g) 1335 eor r0,r6,r6,ror#11 1336 add r5,r5,r2 @ h+=Ch(e,f,g) 1337#if 22==31 1338 and r12,r12,#0xff 1339 cmp r12,#0xf2 @ done? 1340#endif 1341#if 22<15 1342# if __ARM_ARCH__>=7 1343 ldr r2,[r1],#4 @ prefetch 1344# else 1345 ldrb r2,[r1,#3] 1346# endif 1347 eor r12,r6,r7 @ a^b, b^c in next round 1348#else 1349 ldr r2,[sp,#8*4] @ from future BODY_16_xx 1350 eor r12,r6,r7 @ a^b, b^c in next round 1351 ldr r1,[sp,#5*4] @ from future BODY_16_xx 1352#endif 1353 eor r0,r0,r6,ror#20 @ Sigma0(a) 1354 and r3,r3,r12 @ (b^c)&=(a^b) 1355 add r9,r9,r5 @ d+=h 1356 eor r3,r3,r7 @ Maj(a,b,c) 1357 add r5,r5,r0,ror#2 @ h+=Sigma0(a) 1358 @ add r5,r5,r3 @ h+=Maj(a,b,c) 1359 @ ldr r2,[sp,#8*4] @ 23 1360 @ ldr r1,[sp,#5*4] 1361 mov r0,r2,ror#7 1362 add r5,r5,r3 @ h+=Maj(a,b,c) from the past 1363 mov r3,r1,ror#17 1364 eor r0,r0,r2,ror#18 1365 eor r3,r3,r1,ror#19 1366 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1367 ldr r2,[sp,#7*4] 1368 eor r3,r3,r1,lsr#10 @ sigma1(X[i+14]) 1369 ldr r1,[sp,#0*4] 1370 1371 add r3,r3,r0 1372 eor r0,r9,r9,ror#5 @ from BODY_00_15 1373 add r2,r2,r3 1374 eor r0,r0,r9,ror#19 @ Sigma1(e) 1375 add r2,r2,r1 @ X[i] 1376 ldr r3,[r14],#4 @ *K256++ 1377 add r4,r4,r2 @ h+=X[i] 1378 str r2,[sp,#7*4] 1379 eor r2,r10,r11 1380 add r4,r4,r0,ror#6 @ h+=Sigma1(e) 1381 and r2,r2,r9 1382 add r4,r4,r3 @ h+=K256[i] 1383 eor r2,r2,r11 @ Ch(e,f,g) 1384 eor r0,r5,r5,ror#11 1385 add r4,r4,r2 @ h+=Ch(e,f,g) 1386#if 23==31 1387 and r3,r3,#0xff 1388 cmp r3,#0xf2 @ done? 1389#endif 1390#if 23<15 1391# if __ARM_ARCH__>=7 1392 ldr r2,[r1],#4 @ prefetch 1393# else 1394 ldrb r2,[r1,#3] 1395# endif 1396 eor r3,r5,r6 @ a^b, b^c in next round 1397#else 1398 ldr r2,[sp,#9*4] @ from future BODY_16_xx 1399 eor r3,r5,r6 @ a^b, b^c in next round 1400 ldr r1,[sp,#6*4] @ from future BODY_16_xx 1401#endif 1402 eor r0,r0,r5,ror#20 @ Sigma0(a) 1403 and r12,r12,r3 @ (b^c)&=(a^b) 1404 add r8,r8,r4 @ d+=h 1405 eor r12,r12,r6 @ Maj(a,b,c) 1406 add r4,r4,r0,ror#2 @ h+=Sigma0(a) 1407 @ add r4,r4,r12 @ h+=Maj(a,b,c) 1408 @ ldr r2,[sp,#9*4] @ 24 1409 @ ldr r1,[sp,#6*4] 1410 mov r0,r2,ror#7 1411 add r4,r4,r12 @ h+=Maj(a,b,c) from the past 1412 mov r12,r1,ror#17 1413 eor r0,r0,r2,ror#18 1414 eor r12,r12,r1,ror#19 1415 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1416 ldr r2,[sp,#8*4] 1417 eor r12,r12,r1,lsr#10 @ sigma1(X[i+14]) 1418 ldr r1,[sp,#1*4] 1419 1420 add r12,r12,r0 1421 eor r0,r8,r8,ror#5 @ from BODY_00_15 1422 add r2,r2,r12 1423 eor r0,r0,r8,ror#19 @ Sigma1(e) 1424 add r2,r2,r1 @ X[i] 1425 ldr r12,[r14],#4 @ *K256++ 1426 add r11,r11,r2 @ h+=X[i] 1427 str r2,[sp,#8*4] 1428 eor r2,r9,r10 1429 add r11,r11,r0,ror#6 @ h+=Sigma1(e) 1430 and r2,r2,r8 1431 add r11,r11,r12 @ h+=K256[i] 1432 eor r2,r2,r10 @ Ch(e,f,g) 1433 eor r0,r4,r4,ror#11 1434 add r11,r11,r2 @ h+=Ch(e,f,g) 1435#if 24==31 1436 and r12,r12,#0xff 1437 cmp r12,#0xf2 @ done? 1438#endif 1439#if 24<15 1440# if __ARM_ARCH__>=7 1441 ldr r2,[r1],#4 @ prefetch 1442# else 1443 ldrb r2,[r1,#3] 1444# endif 1445 eor r12,r4,r5 @ a^b, b^c in next round 1446#else 1447 ldr r2,[sp,#10*4] @ from future BODY_16_xx 1448 eor r12,r4,r5 @ a^b, b^c in next round 1449 ldr r1,[sp,#7*4] @ from future BODY_16_xx 1450#endif 1451 eor r0,r0,r4,ror#20 @ Sigma0(a) 1452 and r3,r3,r12 @ (b^c)&=(a^b) 1453 add r7,r7,r11 @ d+=h 1454 eor r3,r3,r5 @ Maj(a,b,c) 1455 add r11,r11,r0,ror#2 @ h+=Sigma0(a) 1456 @ add r11,r11,r3 @ h+=Maj(a,b,c) 1457 @ ldr r2,[sp,#10*4] @ 25 1458 @ ldr r1,[sp,#7*4] 1459 mov r0,r2,ror#7 1460 add r11,r11,r3 @ h+=Maj(a,b,c) from the past 1461 mov r3,r1,ror#17 1462 eor r0,r0,r2,ror#18 1463 eor r3,r3,r1,ror#19 1464 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1465 ldr r2,[sp,#9*4] 1466 eor r3,r3,r1,lsr#10 @ sigma1(X[i+14]) 1467 ldr r1,[sp,#2*4] 1468 1469 add r3,r3,r0 1470 eor r0,r7,r7,ror#5 @ from BODY_00_15 1471 add r2,r2,r3 1472 eor r0,r0,r7,ror#19 @ Sigma1(e) 1473 add r2,r2,r1 @ X[i] 1474 ldr r3,[r14],#4 @ *K256++ 1475 add r10,r10,r2 @ h+=X[i] 1476 str r2,[sp,#9*4] 1477 eor r2,r8,r9 1478 add r10,r10,r0,ror#6 @ h+=Sigma1(e) 1479 and r2,r2,r7 1480 add r10,r10,r3 @ h+=K256[i] 1481 eor r2,r2,r9 @ Ch(e,f,g) 1482 eor r0,r11,r11,ror#11 1483 add r10,r10,r2 @ h+=Ch(e,f,g) 1484#if 25==31 1485 and r3,r3,#0xff 1486 cmp r3,#0xf2 @ done? 1487#endif 1488#if 25<15 1489# if __ARM_ARCH__>=7 1490 ldr r2,[r1],#4 @ prefetch 1491# else 1492 ldrb r2,[r1,#3] 1493# endif 1494 eor r3,r11,r4 @ a^b, b^c in next round 1495#else 1496 ldr r2,[sp,#11*4] @ from future BODY_16_xx 1497 eor r3,r11,r4 @ a^b, b^c in next round 1498 ldr r1,[sp,#8*4] @ from future BODY_16_xx 1499#endif 1500 eor r0,r0,r11,ror#20 @ Sigma0(a) 1501 and r12,r12,r3 @ (b^c)&=(a^b) 1502 add r6,r6,r10 @ d+=h 1503 eor r12,r12,r4 @ Maj(a,b,c) 1504 add r10,r10,r0,ror#2 @ h+=Sigma0(a) 1505 @ add r10,r10,r12 @ h+=Maj(a,b,c) 1506 @ ldr r2,[sp,#11*4] @ 26 1507 @ ldr r1,[sp,#8*4] 1508 mov r0,r2,ror#7 1509 add r10,r10,r12 @ h+=Maj(a,b,c) from the past 1510 mov r12,r1,ror#17 1511 eor r0,r0,r2,ror#18 1512 eor r12,r12,r1,ror#19 1513 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1514 ldr r2,[sp,#10*4] 1515 eor r12,r12,r1,lsr#10 @ sigma1(X[i+14]) 1516 ldr r1,[sp,#3*4] 1517 1518 add r12,r12,r0 1519 eor r0,r6,r6,ror#5 @ from BODY_00_15 1520 add r2,r2,r12 1521 eor r0,r0,r6,ror#19 @ Sigma1(e) 1522 add r2,r2,r1 @ X[i] 1523 ldr r12,[r14],#4 @ *K256++ 1524 add r9,r9,r2 @ h+=X[i] 1525 str r2,[sp,#10*4] 1526 eor r2,r7,r8 1527 add r9,r9,r0,ror#6 @ h+=Sigma1(e) 1528 and r2,r2,r6 1529 add r9,r9,r12 @ h+=K256[i] 1530 eor r2,r2,r8 @ Ch(e,f,g) 1531 eor r0,r10,r10,ror#11 1532 add r9,r9,r2 @ h+=Ch(e,f,g) 1533#if 26==31 1534 and r12,r12,#0xff 1535 cmp r12,#0xf2 @ done? 1536#endif 1537#if 26<15 1538# if __ARM_ARCH__>=7 1539 ldr r2,[r1],#4 @ prefetch 1540# else 1541 ldrb r2,[r1,#3] 1542# endif 1543 eor r12,r10,r11 @ a^b, b^c in next round 1544#else 1545 ldr r2,[sp,#12*4] @ from future BODY_16_xx 1546 eor r12,r10,r11 @ a^b, b^c in next round 1547 ldr r1,[sp,#9*4] @ from future BODY_16_xx 1548#endif 1549 eor r0,r0,r10,ror#20 @ Sigma0(a) 1550 and r3,r3,r12 @ (b^c)&=(a^b) 1551 add r5,r5,r9 @ d+=h 1552 eor r3,r3,r11 @ Maj(a,b,c) 1553 add r9,r9,r0,ror#2 @ h+=Sigma0(a) 1554 @ add r9,r9,r3 @ h+=Maj(a,b,c) 1555 @ ldr r2,[sp,#12*4] @ 27 1556 @ ldr r1,[sp,#9*4] 1557 mov r0,r2,ror#7 1558 add r9,r9,r3 @ h+=Maj(a,b,c) from the past 1559 mov r3,r1,ror#17 1560 eor r0,r0,r2,ror#18 1561 eor r3,r3,r1,ror#19 1562 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1563 ldr r2,[sp,#11*4] 1564 eor r3,r3,r1,lsr#10 @ sigma1(X[i+14]) 1565 ldr r1,[sp,#4*4] 1566 1567 add r3,r3,r0 1568 eor r0,r5,r5,ror#5 @ from BODY_00_15 1569 add r2,r2,r3 1570 eor r0,r0,r5,ror#19 @ Sigma1(e) 1571 add r2,r2,r1 @ X[i] 1572 ldr r3,[r14],#4 @ *K256++ 1573 add r8,r8,r2 @ h+=X[i] 1574 str r2,[sp,#11*4] 1575 eor r2,r6,r7 1576 add r8,r8,r0,ror#6 @ h+=Sigma1(e) 1577 and r2,r2,r5 1578 add r8,r8,r3 @ h+=K256[i] 1579 eor r2,r2,r7 @ Ch(e,f,g) 1580 eor r0,r9,r9,ror#11 1581 add r8,r8,r2 @ h+=Ch(e,f,g) 1582#if 27==31 1583 and r3,r3,#0xff 1584 cmp r3,#0xf2 @ done? 1585#endif 1586#if 27<15 1587# if __ARM_ARCH__>=7 1588 ldr r2,[r1],#4 @ prefetch 1589# else 1590 ldrb r2,[r1,#3] 1591# endif 1592 eor r3,r9,r10 @ a^b, b^c in next round 1593#else 1594 ldr r2,[sp,#13*4] @ from future BODY_16_xx 1595 eor r3,r9,r10 @ a^b, b^c in next round 1596 ldr r1,[sp,#10*4] @ from future BODY_16_xx 1597#endif 1598 eor r0,r0,r9,ror#20 @ Sigma0(a) 1599 and r12,r12,r3 @ (b^c)&=(a^b) 1600 add r4,r4,r8 @ d+=h 1601 eor r12,r12,r10 @ Maj(a,b,c) 1602 add r8,r8,r0,ror#2 @ h+=Sigma0(a) 1603 @ add r8,r8,r12 @ h+=Maj(a,b,c) 1604 @ ldr r2,[sp,#13*4] @ 28 1605 @ ldr r1,[sp,#10*4] 1606 mov r0,r2,ror#7 1607 add r8,r8,r12 @ h+=Maj(a,b,c) from the past 1608 mov r12,r1,ror#17 1609 eor r0,r0,r2,ror#18 1610 eor r12,r12,r1,ror#19 1611 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1612 ldr r2,[sp,#12*4] 1613 eor r12,r12,r1,lsr#10 @ sigma1(X[i+14]) 1614 ldr r1,[sp,#5*4] 1615 1616 add r12,r12,r0 1617 eor r0,r4,r4,ror#5 @ from BODY_00_15 1618 add r2,r2,r12 1619 eor r0,r0,r4,ror#19 @ Sigma1(e) 1620 add r2,r2,r1 @ X[i] 1621 ldr r12,[r14],#4 @ *K256++ 1622 add r7,r7,r2 @ h+=X[i] 1623 str r2,[sp,#12*4] 1624 eor r2,r5,r6 1625 add r7,r7,r0,ror#6 @ h+=Sigma1(e) 1626 and r2,r2,r4 1627 add r7,r7,r12 @ h+=K256[i] 1628 eor r2,r2,r6 @ Ch(e,f,g) 1629 eor r0,r8,r8,ror#11 1630 add r7,r7,r2 @ h+=Ch(e,f,g) 1631#if 28==31 1632 and r12,r12,#0xff 1633 cmp r12,#0xf2 @ done? 1634#endif 1635#if 28<15 1636# if __ARM_ARCH__>=7 1637 ldr r2,[r1],#4 @ prefetch 1638# else 1639 ldrb r2,[r1,#3] 1640# endif 1641 eor r12,r8,r9 @ a^b, b^c in next round 1642#else 1643 ldr r2,[sp,#14*4] @ from future BODY_16_xx 1644 eor r12,r8,r9 @ a^b, b^c in next round 1645 ldr r1,[sp,#11*4] @ from future BODY_16_xx 1646#endif 1647 eor r0,r0,r8,ror#20 @ Sigma0(a) 1648 and r3,r3,r12 @ (b^c)&=(a^b) 1649 add r11,r11,r7 @ d+=h 1650 eor r3,r3,r9 @ Maj(a,b,c) 1651 add r7,r7,r0,ror#2 @ h+=Sigma0(a) 1652 @ add r7,r7,r3 @ h+=Maj(a,b,c) 1653 @ ldr r2,[sp,#14*4] @ 29 1654 @ ldr r1,[sp,#11*4] 1655 mov r0,r2,ror#7 1656 add r7,r7,r3 @ h+=Maj(a,b,c) from the past 1657 mov r3,r1,ror#17 1658 eor r0,r0,r2,ror#18 1659 eor r3,r3,r1,ror#19 1660 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1661 ldr r2,[sp,#13*4] 1662 eor r3,r3,r1,lsr#10 @ sigma1(X[i+14]) 1663 ldr r1,[sp,#6*4] 1664 1665 add r3,r3,r0 1666 eor r0,r11,r11,ror#5 @ from BODY_00_15 1667 add r2,r2,r3 1668 eor r0,r0,r11,ror#19 @ Sigma1(e) 1669 add r2,r2,r1 @ X[i] 1670 ldr r3,[r14],#4 @ *K256++ 1671 add r6,r6,r2 @ h+=X[i] 1672 str r2,[sp,#13*4] 1673 eor r2,r4,r5 1674 add r6,r6,r0,ror#6 @ h+=Sigma1(e) 1675 and r2,r2,r11 1676 add r6,r6,r3 @ h+=K256[i] 1677 eor r2,r2,r5 @ Ch(e,f,g) 1678 eor r0,r7,r7,ror#11 1679 add r6,r6,r2 @ h+=Ch(e,f,g) 1680#if 29==31 1681 and r3,r3,#0xff 1682 cmp r3,#0xf2 @ done? 1683#endif 1684#if 29<15 1685# if __ARM_ARCH__>=7 1686 ldr r2,[r1],#4 @ prefetch 1687# else 1688 ldrb r2,[r1,#3] 1689# endif 1690 eor r3,r7,r8 @ a^b, b^c in next round 1691#else 1692 ldr r2,[sp,#15*4] @ from future BODY_16_xx 1693 eor r3,r7,r8 @ a^b, b^c in next round 1694 ldr r1,[sp,#12*4] @ from future BODY_16_xx 1695#endif 1696 eor r0,r0,r7,ror#20 @ Sigma0(a) 1697 and r12,r12,r3 @ (b^c)&=(a^b) 1698 add r10,r10,r6 @ d+=h 1699 eor r12,r12,r8 @ Maj(a,b,c) 1700 add r6,r6,r0,ror#2 @ h+=Sigma0(a) 1701 @ add r6,r6,r12 @ h+=Maj(a,b,c) 1702 @ ldr r2,[sp,#15*4] @ 30 1703 @ ldr r1,[sp,#12*4] 1704 mov r0,r2,ror#7 1705 add r6,r6,r12 @ h+=Maj(a,b,c) from the past 1706 mov r12,r1,ror#17 1707 eor r0,r0,r2,ror#18 1708 eor r12,r12,r1,ror#19 1709 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1710 ldr r2,[sp,#14*4] 1711 eor r12,r12,r1,lsr#10 @ sigma1(X[i+14]) 1712 ldr r1,[sp,#7*4] 1713 1714 add r12,r12,r0 1715 eor r0,r10,r10,ror#5 @ from BODY_00_15 1716 add r2,r2,r12 1717 eor r0,r0,r10,ror#19 @ Sigma1(e) 1718 add r2,r2,r1 @ X[i] 1719 ldr r12,[r14],#4 @ *K256++ 1720 add r5,r5,r2 @ h+=X[i] 1721 str r2,[sp,#14*4] 1722 eor r2,r11,r4 1723 add r5,r5,r0,ror#6 @ h+=Sigma1(e) 1724 and r2,r2,r10 1725 add r5,r5,r12 @ h+=K256[i] 1726 eor r2,r2,r4 @ Ch(e,f,g) 1727 eor r0,r6,r6,ror#11 1728 add r5,r5,r2 @ h+=Ch(e,f,g) 1729#if 30==31 1730 and r12,r12,#0xff 1731 cmp r12,#0xf2 @ done? 1732#endif 1733#if 30<15 1734# if __ARM_ARCH__>=7 1735 ldr r2,[r1],#4 @ prefetch 1736# else 1737 ldrb r2,[r1,#3] 1738# endif 1739 eor r12,r6,r7 @ a^b, b^c in next round 1740#else 1741 ldr r2,[sp,#0*4] @ from future BODY_16_xx 1742 eor r12,r6,r7 @ a^b, b^c in next round 1743 ldr r1,[sp,#13*4] @ from future BODY_16_xx 1744#endif 1745 eor r0,r0,r6,ror#20 @ Sigma0(a) 1746 and r3,r3,r12 @ (b^c)&=(a^b) 1747 add r9,r9,r5 @ d+=h 1748 eor r3,r3,r7 @ Maj(a,b,c) 1749 add r5,r5,r0,ror#2 @ h+=Sigma0(a) 1750 @ add r5,r5,r3 @ h+=Maj(a,b,c) 1751 @ ldr r2,[sp,#0*4] @ 31 1752 @ ldr r1,[sp,#13*4] 1753 mov r0,r2,ror#7 1754 add r5,r5,r3 @ h+=Maj(a,b,c) from the past 1755 mov r3,r1,ror#17 1756 eor r0,r0,r2,ror#18 1757 eor r3,r3,r1,ror#19 1758 eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1759 ldr r2,[sp,#15*4] 1760 eor r3,r3,r1,lsr#10 @ sigma1(X[i+14]) 1761 ldr r1,[sp,#8*4] 1762 1763 add r3,r3,r0 1764 eor r0,r9,r9,ror#5 @ from BODY_00_15 1765 add r2,r2,r3 1766 eor r0,r0,r9,ror#19 @ Sigma1(e) 1767 add r2,r2,r1 @ X[i] 1768 ldr r3,[r14],#4 @ *K256++ 1769 add r4,r4,r2 @ h+=X[i] 1770 str r2,[sp,#15*4] 1771 eor r2,r10,r11 1772 add r4,r4,r0,ror#6 @ h+=Sigma1(e) 1773 and r2,r2,r9 1774 add r4,r4,r3 @ h+=K256[i] 1775 eor r2,r2,r11 @ Ch(e,f,g) 1776 eor r0,r5,r5,ror#11 1777 add r4,r4,r2 @ h+=Ch(e,f,g) 1778#if 31==31 1779 and r3,r3,#0xff 1780 cmp r3,#0xf2 @ done? 1781#endif 1782#if 31<15 1783# if __ARM_ARCH__>=7 1784 ldr r2,[r1],#4 @ prefetch 1785# else 1786 ldrb r2,[r1,#3] 1787# endif 1788 eor r3,r5,r6 @ a^b, b^c in next round 1789#else 1790 ldr r2,[sp,#1*4] @ from future BODY_16_xx 1791 eor r3,r5,r6 @ a^b, b^c in next round 1792 ldr r1,[sp,#14*4] @ from future BODY_16_xx 1793#endif 1794 eor r0,r0,r5,ror#20 @ Sigma0(a) 1795 and r12,r12,r3 @ (b^c)&=(a^b) 1796 add r8,r8,r4 @ d+=h 1797 eor r12,r12,r6 @ Maj(a,b,c) 1798 add r4,r4,r0,ror#2 @ h+=Sigma0(a) 1799 @ add r4,r4,r12 @ h+=Maj(a,b,c) 1800#ifdef __thumb2__ 1801 ite eq @ Thumb2 thing, sanity check in ARM 1802#endif 1803 ldreq r3,[sp,#16*4] @ pull ctx 1804 bne .Lrounds_16_xx 1805 1806 add r4,r4,r12 @ h+=Maj(a,b,c) from the past 1807 ldr r0,[r3,#0] 1808 ldr r2,[r3,#4] 1809 ldr r12,[r3,#8] 1810 add r4,r4,r0 1811 ldr r0,[r3,#12] 1812 add r5,r5,r2 1813 ldr r2,[r3,#16] 1814 add r6,r6,r12 1815 ldr r12,[r3,#20] 1816 add r7,r7,r0 1817 ldr r0,[r3,#24] 1818 add r8,r8,r2 1819 ldr r2,[r3,#28] 1820 add r9,r9,r12 1821 ldr r1,[sp,#17*4] @ pull inp 1822 ldr r12,[sp,#18*4] @ pull inp+len 1823 add r10,r10,r0 1824 add r11,r11,r2 1825 stmia r3,{r4,r5,r6,r7,r8,r9,r10,r11} 1826 cmp r1,r12 1827 sub r14,r14,#256 @ rewind Ktbl 1828 bne .Loop 1829 1830 add sp,sp,#19*4 @ destroy frame 1831#if __ARM_ARCH__>=5 1832 ldmia sp!,{r4-r11,pc} 1833#else 1834 ldmia sp!,{r4-r11,lr} 1835 tst lr,#1 1836 moveq pc,lr @ be binary compatible with V4, yet 1837 .word 0xe12fff1e @ interoperable with Thumb ISA:-) 1838#endif 1839.size zfs_sha256_block_armv7,.-zfs_sha256_block_armv7 1840 1841#if __ARM_ARCH__ >= 7 1842.arch armv7-a 1843.fpu neon 1844 1845.globl zfs_sha256_block_neon 1846.type zfs_sha256_block_neon,%function 1847.align 5 1848.skip 16 1849zfs_sha256_block_neon: 1850.LNEON: 1851 stmdb sp!,{r4-r12,lr} 1852 1853 sub r11,sp,#16*4+16 1854 adr r14,K256 1855 bic r11,r11,#15 @ align for 128-bit stores 1856 mov r12,sp 1857 mov sp,r11 @ alloca 1858 add r2,r1,r2,lsl#6 @ len to point at the end of inp 1859 1860 vld1.8 {q0},[r1]! 1861 vld1.8 {q1},[r1]! 1862 vld1.8 {q2},[r1]! 1863 vld1.8 {q3},[r1]! 1864 vld1.32 {q8},[r14,:128]! 1865 vld1.32 {q9},[r14,:128]! 1866 vld1.32 {q10},[r14,:128]! 1867 vld1.32 {q11},[r14,:128]! 1868 vrev32.8 q0,q0 @ yes, even on 1869 str r0,[sp,#64] 1870 vrev32.8 q1,q1 @ big-endian 1871 str r1,[sp,#68] 1872 mov r1,sp 1873 vrev32.8 q2,q2 1874 str r2,[sp,#72] 1875 vrev32.8 q3,q3 1876 str r12,[sp,#76] @ save original sp 1877 vadd.i32 q8,q8,q0 1878 vadd.i32 q9,q9,q1 1879 vst1.32 {q8},[r1,:128]! 1880 vadd.i32 q10,q10,q2 1881 vst1.32 {q9},[r1,:128]! 1882 vadd.i32 q11,q11,q3 1883 vst1.32 {q10},[r1,:128]! 1884 vst1.32 {q11},[r1,:128]! 1885 1886 ldmia r0,{r4-r11} 1887 sub r1,r1,#64 1888 ldr r2,[sp,#0] 1889 eor r12,r12,r12 1890 eor r3,r5,r6 1891 b .L_00_48 1892 1893.align 4 1894.L_00_48: 1895 vext.8 q8,q0,q1,#4 1896 add r11,r11,r2 1897 eor r2,r9,r10 1898 eor r0,r8,r8,ror#5 1899 vext.8 q9,q2,q3,#4 1900 add r4,r4,r12 1901 and r2,r2,r8 1902 eor r12,r0,r8,ror#19 1903 vshr.u32 q10,q8,#7 1904 eor r0,r4,r4,ror#11 1905 eor r2,r2,r10 1906 vadd.i32 q0,q0,q9 1907 add r11,r11,r12,ror#6 1908 eor r12,r4,r5 1909 vshr.u32 q9,q8,#3 1910 eor r0,r0,r4,ror#20 1911 add r11,r11,r2 1912 vsli.32 q10,q8,#25 1913 ldr r2,[sp,#4] 1914 and r3,r3,r12 1915 vshr.u32 q11,q8,#18 1916 add r7,r7,r11 1917 add r11,r11,r0,ror#2 1918 eor r3,r3,r5 1919 veor q9,q9,q10 1920 add r10,r10,r2 1921 vsli.32 q11,q8,#14 1922 eor r2,r8,r9 1923 eor r0,r7,r7,ror#5 1924 vshr.u32 d24,d7,#17 1925 add r11,r11,r3 1926 and r2,r2,r7 1927 veor q9,q9,q11 1928 eor r3,r0,r7,ror#19 1929 eor r0,r11,r11,ror#11 1930 vsli.32 d24,d7,#15 1931 eor r2,r2,r9 1932 add r10,r10,r3,ror#6 1933 vshr.u32 d25,d7,#10 1934 eor r3,r11,r4 1935 eor r0,r0,r11,ror#20 1936 vadd.i32 q0,q0,q9 1937 add r10,r10,r2 1938 ldr r2,[sp,#8] 1939 veor d25,d25,d24 1940 and r12,r12,r3 1941 add r6,r6,r10 1942 vshr.u32 d24,d7,#19 1943 add r10,r10,r0,ror#2 1944 eor r12,r12,r4 1945 vsli.32 d24,d7,#13 1946 add r9,r9,r2 1947 eor r2,r7,r8 1948 veor d25,d25,d24 1949 eor r0,r6,r6,ror#5 1950 add r10,r10,r12 1951 vadd.i32 d0,d0,d25 1952 and r2,r2,r6 1953 eor r12,r0,r6,ror#19 1954 vshr.u32 d24,d0,#17 1955 eor r0,r10,r10,ror#11 1956 eor r2,r2,r8 1957 vsli.32 d24,d0,#15 1958 add r9,r9,r12,ror#6 1959 eor r12,r10,r11 1960 vshr.u32 d25,d0,#10 1961 eor r0,r0,r10,ror#20 1962 add r9,r9,r2 1963 veor d25,d25,d24 1964 ldr r2,[sp,#12] 1965 and r3,r3,r12 1966 vshr.u32 d24,d0,#19 1967 add r5,r5,r9 1968 add r9,r9,r0,ror#2 1969 eor r3,r3,r11 1970 vld1.32 {q8},[r14,:128]! 1971 add r8,r8,r2 1972 vsli.32 d24,d0,#13 1973 eor r2,r6,r7 1974 eor r0,r5,r5,ror#5 1975 veor d25,d25,d24 1976 add r9,r9,r3 1977 and r2,r2,r5 1978 vadd.i32 d1,d1,d25 1979 eor r3,r0,r5,ror#19 1980 eor r0,r9,r9,ror#11 1981 vadd.i32 q8,q8,q0 1982 eor r2,r2,r7 1983 add r8,r8,r3,ror#6 1984 eor r3,r9,r10 1985 eor r0,r0,r9,ror#20 1986 add r8,r8,r2 1987 ldr r2,[sp,#16] 1988 and r12,r12,r3 1989 add r4,r4,r8 1990 vst1.32 {q8},[r1,:128]! 1991 add r8,r8,r0,ror#2 1992 eor r12,r12,r10 1993 vext.8 q8,q1,q2,#4 1994 add r7,r7,r2 1995 eor r2,r5,r6 1996 eor r0,r4,r4,ror#5 1997 vext.8 q9,q3,q0,#4 1998 add r8,r8,r12 1999 and r2,r2,r4 2000 eor r12,r0,r4,ror#19 2001 vshr.u32 q10,q8,#7 2002 eor r0,r8,r8,ror#11 2003 eor r2,r2,r6 2004 vadd.i32 q1,q1,q9 2005 add r7,r7,r12,ror#6 2006 eor r12,r8,r9 2007 vshr.u32 q9,q8,#3 2008 eor r0,r0,r8,ror#20 2009 add r7,r7,r2 2010 vsli.32 q10,q8,#25 2011 ldr r2,[sp,#20] 2012 and r3,r3,r12 2013 vshr.u32 q11,q8,#18 2014 add r11,r11,r7 2015 add r7,r7,r0,ror#2 2016 eor r3,r3,r9 2017 veor q9,q9,q10 2018 add r6,r6,r2 2019 vsli.32 q11,q8,#14 2020 eor r2,r4,r5 2021 eor r0,r11,r11,ror#5 2022 vshr.u32 d24,d1,#17 2023 add r7,r7,r3 2024 and r2,r2,r11 2025 veor q9,q9,q11 2026 eor r3,r0,r11,ror#19 2027 eor r0,r7,r7,ror#11 2028 vsli.32 d24,d1,#15 2029 eor r2,r2,r5 2030 add r6,r6,r3,ror#6 2031 vshr.u32 d25,d1,#10 2032 eor r3,r7,r8 2033 eor r0,r0,r7,ror#20 2034 vadd.i32 q1,q1,q9 2035 add r6,r6,r2 2036 ldr r2,[sp,#24] 2037 veor d25,d25,d24 2038 and r12,r12,r3 2039 add r10,r10,r6 2040 vshr.u32 d24,d1,#19 2041 add r6,r6,r0,ror#2 2042 eor r12,r12,r8 2043 vsli.32 d24,d1,#13 2044 add r5,r5,r2 2045 eor r2,r11,r4 2046 veor d25,d25,d24 2047 eor r0,r10,r10,ror#5 2048 add r6,r6,r12 2049 vadd.i32 d2,d2,d25 2050 and r2,r2,r10 2051 eor r12,r0,r10,ror#19 2052 vshr.u32 d24,d2,#17 2053 eor r0,r6,r6,ror#11 2054 eor r2,r2,r4 2055 vsli.32 d24,d2,#15 2056 add r5,r5,r12,ror#6 2057 eor r12,r6,r7 2058 vshr.u32 d25,d2,#10 2059 eor r0,r0,r6,ror#20 2060 add r5,r5,r2 2061 veor d25,d25,d24 2062 ldr r2,[sp,#28] 2063 and r3,r3,r12 2064 vshr.u32 d24,d2,#19 2065 add r9,r9,r5 2066 add r5,r5,r0,ror#2 2067 eor r3,r3,r7 2068 vld1.32 {q8},[r14,:128]! 2069 add r4,r4,r2 2070 vsli.32 d24,d2,#13 2071 eor r2,r10,r11 2072 eor r0,r9,r9,ror#5 2073 veor d25,d25,d24 2074 add r5,r5,r3 2075 and r2,r2,r9 2076 vadd.i32 d3,d3,d25 2077 eor r3,r0,r9,ror#19 2078 eor r0,r5,r5,ror#11 2079 vadd.i32 q8,q8,q1 2080 eor r2,r2,r11 2081 add r4,r4,r3,ror#6 2082 eor r3,r5,r6 2083 eor r0,r0,r5,ror#20 2084 add r4,r4,r2 2085 ldr r2,[sp,#32] 2086 and r12,r12,r3 2087 add r8,r8,r4 2088 vst1.32 {q8},[r1,:128]! 2089 add r4,r4,r0,ror#2 2090 eor r12,r12,r6 2091 vext.8 q8,q2,q3,#4 2092 add r11,r11,r2 2093 eor r2,r9,r10 2094 eor r0,r8,r8,ror#5 2095 vext.8 q9,q0,q1,#4 2096 add r4,r4,r12 2097 and r2,r2,r8 2098 eor r12,r0,r8,ror#19 2099 vshr.u32 q10,q8,#7 2100 eor r0,r4,r4,ror#11 2101 eor r2,r2,r10 2102 vadd.i32 q2,q2,q9 2103 add r11,r11,r12,ror#6 2104 eor r12,r4,r5 2105 vshr.u32 q9,q8,#3 2106 eor r0,r0,r4,ror#20 2107 add r11,r11,r2 2108 vsli.32 q10,q8,#25 2109 ldr r2,[sp,#36] 2110 and r3,r3,r12 2111 vshr.u32 q11,q8,#18 2112 add r7,r7,r11 2113 add r11,r11,r0,ror#2 2114 eor r3,r3,r5 2115 veor q9,q9,q10 2116 add r10,r10,r2 2117 vsli.32 q11,q8,#14 2118 eor r2,r8,r9 2119 eor r0,r7,r7,ror#5 2120 vshr.u32 d24,d3,#17 2121 add r11,r11,r3 2122 and r2,r2,r7 2123 veor q9,q9,q11 2124 eor r3,r0,r7,ror#19 2125 eor r0,r11,r11,ror#11 2126 vsli.32 d24,d3,#15 2127 eor r2,r2,r9 2128 add r10,r10,r3,ror#6 2129 vshr.u32 d25,d3,#10 2130 eor r3,r11,r4 2131 eor r0,r0,r11,ror#20 2132 vadd.i32 q2,q2,q9 2133 add r10,r10,r2 2134 ldr r2,[sp,#40] 2135 veor d25,d25,d24 2136 and r12,r12,r3 2137 add r6,r6,r10 2138 vshr.u32 d24,d3,#19 2139 add r10,r10,r0,ror#2 2140 eor r12,r12,r4 2141 vsli.32 d24,d3,#13 2142 add r9,r9,r2 2143 eor r2,r7,r8 2144 veor d25,d25,d24 2145 eor r0,r6,r6,ror#5 2146 add r10,r10,r12 2147 vadd.i32 d4,d4,d25 2148 and r2,r2,r6 2149 eor r12,r0,r6,ror#19 2150 vshr.u32 d24,d4,#17 2151 eor r0,r10,r10,ror#11 2152 eor r2,r2,r8 2153 vsli.32 d24,d4,#15 2154 add r9,r9,r12,ror#6 2155 eor r12,r10,r11 2156 vshr.u32 d25,d4,#10 2157 eor r0,r0,r10,ror#20 2158 add r9,r9,r2 2159 veor d25,d25,d24 2160 ldr r2,[sp,#44] 2161 and r3,r3,r12 2162 vshr.u32 d24,d4,#19 2163 add r5,r5,r9 2164 add r9,r9,r0,ror#2 2165 eor r3,r3,r11 2166 vld1.32 {q8},[r14,:128]! 2167 add r8,r8,r2 2168 vsli.32 d24,d4,#13 2169 eor r2,r6,r7 2170 eor r0,r5,r5,ror#5 2171 veor d25,d25,d24 2172 add r9,r9,r3 2173 and r2,r2,r5 2174 vadd.i32 d5,d5,d25 2175 eor r3,r0,r5,ror#19 2176 eor r0,r9,r9,ror#11 2177 vadd.i32 q8,q8,q2 2178 eor r2,r2,r7 2179 add r8,r8,r3,ror#6 2180 eor r3,r9,r10 2181 eor r0,r0,r9,ror#20 2182 add r8,r8,r2 2183 ldr r2,[sp,#48] 2184 and r12,r12,r3 2185 add r4,r4,r8 2186 vst1.32 {q8},[r1,:128]! 2187 add r8,r8,r0,ror#2 2188 eor r12,r12,r10 2189 vext.8 q8,q3,q0,#4 2190 add r7,r7,r2 2191 eor r2,r5,r6 2192 eor r0,r4,r4,ror#5 2193 vext.8 q9,q1,q2,#4 2194 add r8,r8,r12 2195 and r2,r2,r4 2196 eor r12,r0,r4,ror#19 2197 vshr.u32 q10,q8,#7 2198 eor r0,r8,r8,ror#11 2199 eor r2,r2,r6 2200 vadd.i32 q3,q3,q9 2201 add r7,r7,r12,ror#6 2202 eor r12,r8,r9 2203 vshr.u32 q9,q8,#3 2204 eor r0,r0,r8,ror#20 2205 add r7,r7,r2 2206 vsli.32 q10,q8,#25 2207 ldr r2,[sp,#52] 2208 and r3,r3,r12 2209 vshr.u32 q11,q8,#18 2210 add r11,r11,r7 2211 add r7,r7,r0,ror#2 2212 eor r3,r3,r9 2213 veor q9,q9,q10 2214 add r6,r6,r2 2215 vsli.32 q11,q8,#14 2216 eor r2,r4,r5 2217 eor r0,r11,r11,ror#5 2218 vshr.u32 d24,d5,#17 2219 add r7,r7,r3 2220 and r2,r2,r11 2221 veor q9,q9,q11 2222 eor r3,r0,r11,ror#19 2223 eor r0,r7,r7,ror#11 2224 vsli.32 d24,d5,#15 2225 eor r2,r2,r5 2226 add r6,r6,r3,ror#6 2227 vshr.u32 d25,d5,#10 2228 eor r3,r7,r8 2229 eor r0,r0,r7,ror#20 2230 vadd.i32 q3,q3,q9 2231 add r6,r6,r2 2232 ldr r2,[sp,#56] 2233 veor d25,d25,d24 2234 and r12,r12,r3 2235 add r10,r10,r6 2236 vshr.u32 d24,d5,#19 2237 add r6,r6,r0,ror#2 2238 eor r12,r12,r8 2239 vsli.32 d24,d5,#13 2240 add r5,r5,r2 2241 eor r2,r11,r4 2242 veor d25,d25,d24 2243 eor r0,r10,r10,ror#5 2244 add r6,r6,r12 2245 vadd.i32 d6,d6,d25 2246 and r2,r2,r10 2247 eor r12,r0,r10,ror#19 2248 vshr.u32 d24,d6,#17 2249 eor r0,r6,r6,ror#11 2250 eor r2,r2,r4 2251 vsli.32 d24,d6,#15 2252 add r5,r5,r12,ror#6 2253 eor r12,r6,r7 2254 vshr.u32 d25,d6,#10 2255 eor r0,r0,r6,ror#20 2256 add r5,r5,r2 2257 veor d25,d25,d24 2258 ldr r2,[sp,#60] 2259 and r3,r3,r12 2260 vshr.u32 d24,d6,#19 2261 add r9,r9,r5 2262 add r5,r5,r0,ror#2 2263 eor r3,r3,r7 2264 vld1.32 {q8},[r14,:128]! 2265 add r4,r4,r2 2266 vsli.32 d24,d6,#13 2267 eor r2,r10,r11 2268 eor r0,r9,r9,ror#5 2269 veor d25,d25,d24 2270 add r5,r5,r3 2271 and r2,r2,r9 2272 vadd.i32 d7,d7,d25 2273 eor r3,r0,r9,ror#19 2274 eor r0,r5,r5,ror#11 2275 vadd.i32 q8,q8,q3 2276 eor r2,r2,r11 2277 add r4,r4,r3,ror#6 2278 eor r3,r5,r6 2279 eor r0,r0,r5,ror#20 2280 add r4,r4,r2 2281 ldr r2,[r14] 2282 and r12,r12,r3 2283 add r8,r8,r4 2284 vst1.32 {q8},[r1,:128]! 2285 add r4,r4,r0,ror#2 2286 eor r12,r12,r6 2287 teq r2,#0 @ check for K256 terminator 2288 ldr r2,[sp,#0] 2289 sub r1,r1,#64 2290 bne .L_00_48 2291 2292 ldr r1,[sp,#68] 2293 ldr r0,[sp,#72] 2294 sub r14,r14,#256 @ rewind r14 2295 teq r1,r0 2296 it eq 2297 subeq r1,r1,#64 @ avoid SEGV 2298 vld1.8 {q0},[r1]! @ load next input block 2299 vld1.8 {q1},[r1]! 2300 vld1.8 {q2},[r1]! 2301 vld1.8 {q3},[r1]! 2302 it ne 2303 strne r1,[sp,#68] 2304 mov r1,sp 2305 add r11,r11,r2 2306 eor r2,r9,r10 2307 eor r0,r8,r8,ror#5 2308 add r4,r4,r12 2309 vld1.32 {q8},[r14,:128]! 2310 and r2,r2,r8 2311 eor r12,r0,r8,ror#19 2312 eor r0,r4,r4,ror#11 2313 eor r2,r2,r10 2314 vrev32.8 q0,q0 2315 add r11,r11,r12,ror#6 2316 eor r12,r4,r5 2317 eor r0,r0,r4,ror#20 2318 add r11,r11,r2 2319 vadd.i32 q8,q8,q0 2320 ldr r2,[sp,#4] 2321 and r3,r3,r12 2322 add r7,r7,r11 2323 add r11,r11,r0,ror#2 2324 eor r3,r3,r5 2325 add r10,r10,r2 2326 eor r2,r8,r9 2327 eor r0,r7,r7,ror#5 2328 add r11,r11,r3 2329 and r2,r2,r7 2330 eor r3,r0,r7,ror#19 2331 eor r0,r11,r11,ror#11 2332 eor r2,r2,r9 2333 add r10,r10,r3,ror#6 2334 eor r3,r11,r4 2335 eor r0,r0,r11,ror#20 2336 add r10,r10,r2 2337 ldr r2,[sp,#8] 2338 and r12,r12,r3 2339 add r6,r6,r10 2340 add r10,r10,r0,ror#2 2341 eor r12,r12,r4 2342 add r9,r9,r2 2343 eor r2,r7,r8 2344 eor r0,r6,r6,ror#5 2345 add r10,r10,r12 2346 and r2,r2,r6 2347 eor r12,r0,r6,ror#19 2348 eor r0,r10,r10,ror#11 2349 eor r2,r2,r8 2350 add r9,r9,r12,ror#6 2351 eor r12,r10,r11 2352 eor r0,r0,r10,ror#20 2353 add r9,r9,r2 2354 ldr r2,[sp,#12] 2355 and r3,r3,r12 2356 add r5,r5,r9 2357 add r9,r9,r0,ror#2 2358 eor r3,r3,r11 2359 add r8,r8,r2 2360 eor r2,r6,r7 2361 eor r0,r5,r5,ror#5 2362 add r9,r9,r3 2363 and r2,r2,r5 2364 eor r3,r0,r5,ror#19 2365 eor r0,r9,r9,ror#11 2366 eor r2,r2,r7 2367 add r8,r8,r3,ror#6 2368 eor r3,r9,r10 2369 eor r0,r0,r9,ror#20 2370 add r8,r8,r2 2371 ldr r2,[sp,#16] 2372 and r12,r12,r3 2373 add r4,r4,r8 2374 add r8,r8,r0,ror#2 2375 eor r12,r12,r10 2376 vst1.32 {q8},[r1,:128]! 2377 add r7,r7,r2 2378 eor r2,r5,r6 2379 eor r0,r4,r4,ror#5 2380 add r8,r8,r12 2381 vld1.32 {q8},[r14,:128]! 2382 and r2,r2,r4 2383 eor r12,r0,r4,ror#19 2384 eor r0,r8,r8,ror#11 2385 eor r2,r2,r6 2386 vrev32.8 q1,q1 2387 add r7,r7,r12,ror#6 2388 eor r12,r8,r9 2389 eor r0,r0,r8,ror#20 2390 add r7,r7,r2 2391 vadd.i32 q8,q8,q1 2392 ldr r2,[sp,#20] 2393 and r3,r3,r12 2394 add r11,r11,r7 2395 add r7,r7,r0,ror#2 2396 eor r3,r3,r9 2397 add r6,r6,r2 2398 eor r2,r4,r5 2399 eor r0,r11,r11,ror#5 2400 add r7,r7,r3 2401 and r2,r2,r11 2402 eor r3,r0,r11,ror#19 2403 eor r0,r7,r7,ror#11 2404 eor r2,r2,r5 2405 add r6,r6,r3,ror#6 2406 eor r3,r7,r8 2407 eor r0,r0,r7,ror#20 2408 add r6,r6,r2 2409 ldr r2,[sp,#24] 2410 and r12,r12,r3 2411 add r10,r10,r6 2412 add r6,r6,r0,ror#2 2413 eor r12,r12,r8 2414 add r5,r5,r2 2415 eor r2,r11,r4 2416 eor r0,r10,r10,ror#5 2417 add r6,r6,r12 2418 and r2,r2,r10 2419 eor r12,r0,r10,ror#19 2420 eor r0,r6,r6,ror#11 2421 eor r2,r2,r4 2422 add r5,r5,r12,ror#6 2423 eor r12,r6,r7 2424 eor r0,r0,r6,ror#20 2425 add r5,r5,r2 2426 ldr r2,[sp,#28] 2427 and r3,r3,r12 2428 add r9,r9,r5 2429 add r5,r5,r0,ror#2 2430 eor r3,r3,r7 2431 add r4,r4,r2 2432 eor r2,r10,r11 2433 eor r0,r9,r9,ror#5 2434 add r5,r5,r3 2435 and r2,r2,r9 2436 eor r3,r0,r9,ror#19 2437 eor r0,r5,r5,ror#11 2438 eor r2,r2,r11 2439 add r4,r4,r3,ror#6 2440 eor r3,r5,r6 2441 eor r0,r0,r5,ror#20 2442 add r4,r4,r2 2443 ldr r2,[sp,#32] 2444 and r12,r12,r3 2445 add r8,r8,r4 2446 add r4,r4,r0,ror#2 2447 eor r12,r12,r6 2448 vst1.32 {q8},[r1,:128]! 2449 add r11,r11,r2 2450 eor r2,r9,r10 2451 eor r0,r8,r8,ror#5 2452 add r4,r4,r12 2453 vld1.32 {q8},[r14,:128]! 2454 and r2,r2,r8 2455 eor r12,r0,r8,ror#19 2456 eor r0,r4,r4,ror#11 2457 eor r2,r2,r10 2458 vrev32.8 q2,q2 2459 add r11,r11,r12,ror#6 2460 eor r12,r4,r5 2461 eor r0,r0,r4,ror#20 2462 add r11,r11,r2 2463 vadd.i32 q8,q8,q2 2464 ldr r2,[sp,#36] 2465 and r3,r3,r12 2466 add r7,r7,r11 2467 add r11,r11,r0,ror#2 2468 eor r3,r3,r5 2469 add r10,r10,r2 2470 eor r2,r8,r9 2471 eor r0,r7,r7,ror#5 2472 add r11,r11,r3 2473 and r2,r2,r7 2474 eor r3,r0,r7,ror#19 2475 eor r0,r11,r11,ror#11 2476 eor r2,r2,r9 2477 add r10,r10,r3,ror#6 2478 eor r3,r11,r4 2479 eor r0,r0,r11,ror#20 2480 add r10,r10,r2 2481 ldr r2,[sp,#40] 2482 and r12,r12,r3 2483 add r6,r6,r10 2484 add r10,r10,r0,ror#2 2485 eor r12,r12,r4 2486 add r9,r9,r2 2487 eor r2,r7,r8 2488 eor r0,r6,r6,ror#5 2489 add r10,r10,r12 2490 and r2,r2,r6 2491 eor r12,r0,r6,ror#19 2492 eor r0,r10,r10,ror#11 2493 eor r2,r2,r8 2494 add r9,r9,r12,ror#6 2495 eor r12,r10,r11 2496 eor r0,r0,r10,ror#20 2497 add r9,r9,r2 2498 ldr r2,[sp,#44] 2499 and r3,r3,r12 2500 add r5,r5,r9 2501 add r9,r9,r0,ror#2 2502 eor r3,r3,r11 2503 add r8,r8,r2 2504 eor r2,r6,r7 2505 eor r0,r5,r5,ror#5 2506 add r9,r9,r3 2507 and r2,r2,r5 2508 eor r3,r0,r5,ror#19 2509 eor r0,r9,r9,ror#11 2510 eor r2,r2,r7 2511 add r8,r8,r3,ror#6 2512 eor r3,r9,r10 2513 eor r0,r0,r9,ror#20 2514 add r8,r8,r2 2515 ldr r2,[sp,#48] 2516 and r12,r12,r3 2517 add r4,r4,r8 2518 add r8,r8,r0,ror#2 2519 eor r12,r12,r10 2520 vst1.32 {q8},[r1,:128]! 2521 add r7,r7,r2 2522 eor r2,r5,r6 2523 eor r0,r4,r4,ror#5 2524 add r8,r8,r12 2525 vld1.32 {q8},[r14,:128]! 2526 and r2,r2,r4 2527 eor r12,r0,r4,ror#19 2528 eor r0,r8,r8,ror#11 2529 eor r2,r2,r6 2530 vrev32.8 q3,q3 2531 add r7,r7,r12,ror#6 2532 eor r12,r8,r9 2533 eor r0,r0,r8,ror#20 2534 add r7,r7,r2 2535 vadd.i32 q8,q8,q3 2536 ldr r2,[sp,#52] 2537 and r3,r3,r12 2538 add r11,r11,r7 2539 add r7,r7,r0,ror#2 2540 eor r3,r3,r9 2541 add r6,r6,r2 2542 eor r2,r4,r5 2543 eor r0,r11,r11,ror#5 2544 add r7,r7,r3 2545 and r2,r2,r11 2546 eor r3,r0,r11,ror#19 2547 eor r0,r7,r7,ror#11 2548 eor r2,r2,r5 2549 add r6,r6,r3,ror#6 2550 eor r3,r7,r8 2551 eor r0,r0,r7,ror#20 2552 add r6,r6,r2 2553 ldr r2,[sp,#56] 2554 and r12,r12,r3 2555 add r10,r10,r6 2556 add r6,r6,r0,ror#2 2557 eor r12,r12,r8 2558 add r5,r5,r2 2559 eor r2,r11,r4 2560 eor r0,r10,r10,ror#5 2561 add r6,r6,r12 2562 and r2,r2,r10 2563 eor r12,r0,r10,ror#19 2564 eor r0,r6,r6,ror#11 2565 eor r2,r2,r4 2566 add r5,r5,r12,ror#6 2567 eor r12,r6,r7 2568 eor r0,r0,r6,ror#20 2569 add r5,r5,r2 2570 ldr r2,[sp,#60] 2571 and r3,r3,r12 2572 add r9,r9,r5 2573 add r5,r5,r0,ror#2 2574 eor r3,r3,r7 2575 add r4,r4,r2 2576 eor r2,r10,r11 2577 eor r0,r9,r9,ror#5 2578 add r5,r5,r3 2579 and r2,r2,r9 2580 eor r3,r0,r9,ror#19 2581 eor r0,r5,r5,ror#11 2582 eor r2,r2,r11 2583 add r4,r4,r3,ror#6 2584 eor r3,r5,r6 2585 eor r0,r0,r5,ror#20 2586 add r4,r4,r2 2587 ldr r2,[sp,#64] 2588 and r12,r12,r3 2589 add r8,r8,r4 2590 add r4,r4,r0,ror#2 2591 eor r12,r12,r6 2592 vst1.32 {q8},[r1,:128]! 2593 ldr r0,[r2,#0] 2594 add r4,r4,r12 @ h+=Maj(a,b,c) from the past 2595 ldr r12,[r2,#4] 2596 ldr r3,[r2,#8] 2597 ldr r1,[r2,#12] 2598 add r4,r4,r0 @ accumulate 2599 ldr r0,[r2,#16] 2600 add r5,r5,r12 2601 ldr r12,[r2,#20] 2602 add r6,r6,r3 2603 ldr r3,[r2,#24] 2604 add r7,r7,r1 2605 ldr r1,[r2,#28] 2606 add r8,r8,r0 2607 str r4,[r2],#4 2608 add r9,r9,r12 2609 str r5,[r2],#4 2610 add r10,r10,r3 2611 str r6,[r2],#4 2612 add r11,r11,r1 2613 str r7,[r2],#4 2614 stmia r2,{r8-r11} 2615 2616 ittte ne 2617 movne r1,sp 2618 ldrne r2,[sp,#0] 2619 eorne r12,r12,r12 2620 ldreq sp,[sp,#76] @ restore original sp 2621 itt ne 2622 eorne r3,r5,r6 2623 bne .L_00_48 2624 2625 ldmia sp!,{r4-r12,pc} 2626.size zfs_sha256_block_neon,.-zfs_sha256_block_neon 2627 2628# if defined(__thumb2__) 2629# define INST(a,b,c,d) .byte c,d|0xc,a,b 2630# else 2631# define INST(a,b,c,d) .byte a,b,c,d 2632# endif 2633 2634.globl zfs_sha256_block_armv8 2635.type zfs_sha256_block_armv8,%function 2636.align 5 2637zfs_sha256_block_armv8: 2638.LARMv8: 2639 vld1.32 {q0,q1},[r0] 2640 sub r3,r3,#256+32 2641 add r2,r1,r2,lsl#6 @ len to point at the end of inp 2642 b .Loop_v8 2643 2644.align 4 2645.Loop_v8: 2646 vld1.8 {q8-q9},[r1]! 2647 vld1.8 {q10-q11},[r1]! 2648 vld1.32 {q12},[r3]! 2649 vrev32.8 q8,q8 2650 vrev32.8 q9,q9 2651 vrev32.8 q10,q10 2652 vrev32.8 q11,q11 2653 vmov q14,q0 @ offload 2654 vmov q15,q1 2655 teq r1,r2 2656 vld1.32 {q13},[r3]! 2657 vadd.i32 q12,q12,q8 2658 INST(0xe2,0x03,0xfa,0xf3) @ sha256su0 q8,q9 2659 vmov q2,q0 2660 INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q12 2661 INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q12 2662 INST(0xe6,0x0c,0x64,0xf3) @ sha256su1 q8,q10,q11 2663 vld1.32 {q12},[r3]! 2664 vadd.i32 q13,q13,q9 2665 INST(0xe4,0x23,0xfa,0xf3) @ sha256su0 q9,q10 2666 vmov q2,q0 2667 INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q13 2668 INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q13 2669 INST(0xe0,0x2c,0x66,0xf3) @ sha256su1 q9,q11,q8 2670 vld1.32 {q13},[r3]! 2671 vadd.i32 q12,q12,q10 2672 INST(0xe6,0x43,0xfa,0xf3) @ sha256su0 q10,q11 2673 vmov q2,q0 2674 INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q12 2675 INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q12 2676 INST(0xe2,0x4c,0x60,0xf3) @ sha256su1 q10,q8,q9 2677 vld1.32 {q12},[r3]! 2678 vadd.i32 q13,q13,q11 2679 INST(0xe0,0x63,0xfa,0xf3) @ sha256su0 q11,q8 2680 vmov q2,q0 2681 INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q13 2682 INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q13 2683 INST(0xe4,0x6c,0x62,0xf3) @ sha256su1 q11,q9,q10 2684 vld1.32 {q13},[r3]! 2685 vadd.i32 q12,q12,q8 2686 INST(0xe2,0x03,0xfa,0xf3) @ sha256su0 q8,q9 2687 vmov q2,q0 2688 INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q12 2689 INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q12 2690 INST(0xe6,0x0c,0x64,0xf3) @ sha256su1 q8,q10,q11 2691 vld1.32 {q12},[r3]! 2692 vadd.i32 q13,q13,q9 2693 INST(0xe4,0x23,0xfa,0xf3) @ sha256su0 q9,q10 2694 vmov q2,q0 2695 INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q13 2696 INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q13 2697 INST(0xe0,0x2c,0x66,0xf3) @ sha256su1 q9,q11,q8 2698 vld1.32 {q13},[r3]! 2699 vadd.i32 q12,q12,q10 2700 INST(0xe6,0x43,0xfa,0xf3) @ sha256su0 q10,q11 2701 vmov q2,q0 2702 INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q12 2703 INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q12 2704 INST(0xe2,0x4c,0x60,0xf3) @ sha256su1 q10,q8,q9 2705 vld1.32 {q12},[r3]! 2706 vadd.i32 q13,q13,q11 2707 INST(0xe0,0x63,0xfa,0xf3) @ sha256su0 q11,q8 2708 vmov q2,q0 2709 INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q13 2710 INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q13 2711 INST(0xe4,0x6c,0x62,0xf3) @ sha256su1 q11,q9,q10 2712 vld1.32 {q13},[r3]! 2713 vadd.i32 q12,q12,q8 2714 INST(0xe2,0x03,0xfa,0xf3) @ sha256su0 q8,q9 2715 vmov q2,q0 2716 INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q12 2717 INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q12 2718 INST(0xe6,0x0c,0x64,0xf3) @ sha256su1 q8,q10,q11 2719 vld1.32 {q12},[r3]! 2720 vadd.i32 q13,q13,q9 2721 INST(0xe4,0x23,0xfa,0xf3) @ sha256su0 q9,q10 2722 vmov q2,q0 2723 INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q13 2724 INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q13 2725 INST(0xe0,0x2c,0x66,0xf3) @ sha256su1 q9,q11,q8 2726 vld1.32 {q13},[r3]! 2727 vadd.i32 q12,q12,q10 2728 INST(0xe6,0x43,0xfa,0xf3) @ sha256su0 q10,q11 2729 vmov q2,q0 2730 INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q12 2731 INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q12 2732 INST(0xe2,0x4c,0x60,0xf3) @ sha256su1 q10,q8,q9 2733 vld1.32 {q12},[r3]! 2734 vadd.i32 q13,q13,q11 2735 INST(0xe0,0x63,0xfa,0xf3) @ sha256su0 q11,q8 2736 vmov q2,q0 2737 INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q13 2738 INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q13 2739 INST(0xe4,0x6c,0x62,0xf3) @ sha256su1 q11,q9,q10 2740 vld1.32 {q13},[r3]! 2741 vadd.i32 q12,q12,q8 2742 vmov q2,q0 2743 INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q12 2744 INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q12 2745 2746 vld1.32 {q12},[r3]! 2747 vadd.i32 q13,q13,q9 2748 vmov q2,q0 2749 INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q13 2750 INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q13 2751 2752 vld1.32 {q13},[r3] 2753 vadd.i32 q12,q12,q10 2754 sub r3,r3,#256-16 @ rewind 2755 vmov q2,q0 2756 INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q12 2757 INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q12 2758 2759 vadd.i32 q13,q13,q11 2760 vmov q2,q0 2761 INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q13 2762 INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q13 2763 2764 vadd.i32 q0,q0,q14 2765 vadd.i32 q1,q1,q15 2766 it ne 2767 bne .Loop_v8 2768 2769 vst1.32 {q0,q1},[r0] 2770 2771 bx lr @ bx lr 2772.size zfs_sha256_block_armv8,.-zfs_sha256_block_armv8 2773 2774#endif // #if __ARM_ARCH__ >= 7 2775#endif // #if defined(__arm__) 2776