1305153Sjkim/* $FreeBSD: stable/11/secure/lib/libcrypto/arm/sha256-armv4.S 326663 2017-12-07 18:04:48Z jkim $ */ 2305153Sjkim/* Do not modify. This file is auto-generated from sha256-armv4.pl. */ 3304636Sjkim 4304636Sjkim@ ==================================================================== 5304636Sjkim@ Written by Andy Polyakov <appro@openssl.org> for the OpenSSL 6304636Sjkim@ project. The module is, however, dual licensed under OpenSSL and 7304636Sjkim@ CRYPTOGAMS licenses depending on where you obtain it. For further 8304636Sjkim@ details see http://www.openssl.org/~appro/cryptogams/. 9304636Sjkim@ 10304636Sjkim@ Permission to use under GPL terms is granted. 11304636Sjkim@ ==================================================================== 12304636Sjkim 13304636Sjkim@ SHA256 block procedure for ARMv4. May 2007. 14304636Sjkim 15304636Sjkim@ Performance is ~2x better than gcc 3.4 generated code and in "abso- 16304636Sjkim@ lute" terms is ~2250 cycles per 64-byte block or ~35 cycles per 17304636Sjkim@ byte [on single-issue Xscale PXA250 core]. 18304636Sjkim 19304636Sjkim@ July 2010. 20304636Sjkim@ 21304636Sjkim@ Rescheduling for dual-issue pipeline resulted in 22% improvement on 22304636Sjkim@ Cortex A8 core and ~20 cycles per processed byte. 23304636Sjkim 24304636Sjkim@ February 2011. 25304636Sjkim@ 26304636Sjkim@ Profiler-assisted and platform-specific optimization resulted in 16% 27304636Sjkim@ improvement on Cortex A8 core and ~15.4 cycles per processed byte. 28304636Sjkim 29304636Sjkim@ September 2013. 30304636Sjkim@ 31304636Sjkim@ Add NEON implementation. On Cortex A8 it was measured to process one 32304636Sjkim@ byte in 12.5 cycles or 23% faster than integer-only code. Snapdragon 33304636Sjkim@ S4 does it in 12.5 cycles too, but it's 50% faster than integer-only 34304636Sjkim@ code (meaning that latter performs sub-optimally, nothing was done 35304636Sjkim@ about it). 36304636Sjkim 37304636Sjkim@ May 2014. 38304636Sjkim@ 39304636Sjkim@ Add ARMv8 code path performing at 2.0 cpb on Apple A7. 40304636Sjkim 41304636Sjkim#ifndef __KERNEL__ 42304636Sjkim# include "arm_arch.h" 43304636Sjkim#else 44304636Sjkim# define __ARM_ARCH__ __LINUX_ARM_ARCH__ 45304636Sjkim# define __ARM_MAX_ARCH__ 7 46304636Sjkim#endif 47304636Sjkim 48304636Sjkim.text 49304636Sjkim#if __ARM_ARCH__<7 50304636Sjkim.code 32 51304636Sjkim#else 52304636Sjkim.syntax unified 53304636Sjkim# ifdef __thumb2__ 54304636Sjkim.thumb 55304636Sjkim# else 56304636Sjkim.code 32 57304636Sjkim# endif 58304636Sjkim#endif 59304636Sjkim 60304636Sjkim.type K256,%object 61304636Sjkim.align 5 62304636SjkimK256: 63304636Sjkim.word 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5 64304636Sjkim.word 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5 65304636Sjkim.word 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3 66304636Sjkim.word 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174 67304636Sjkim.word 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc 68304636Sjkim.word 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da 69304636Sjkim.word 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7 70304636Sjkim.word 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967 71304636Sjkim.word 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13 72304636Sjkim.word 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85 73304636Sjkim.word 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3 74304636Sjkim.word 0xd192e819,0xd6990624,0xf40e3585,0x106aa070 75304636Sjkim.word 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5 76304636Sjkim.word 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3 77304636Sjkim.word 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208 78304636Sjkim.word 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2 79304636Sjkim.size K256,.-K256 80304636Sjkim.word 0 @ terminator 81304636Sjkim#if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__) 82304636Sjkim.LOPENSSL_armcap: 83304636Sjkim.word OPENSSL_armcap_P-sha256_block_data_order 84304636Sjkim#endif 85304636Sjkim.align 5 86304636Sjkim 87304636Sjkim.global sha256_block_data_order 88304636Sjkim.type sha256_block_data_order,%function 89304636Sjkimsha256_block_data_order: 90304636Sjkim#if __ARM_ARCH__<7 91304636Sjkim sub r3,pc,#8 @ sha256_block_data_order 92304636Sjkim#else 93326663Sjkim adr r3,. 94304636Sjkim#endif 95304636Sjkim#if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__) 96304636Sjkim ldr r12,.LOPENSSL_armcap 97304636Sjkim ldr r12,[r3,r12] @ OPENSSL_armcap_P 98304636Sjkim tst r12,#ARMV8_SHA256 99304636Sjkim bne .LARMv8 100304636Sjkim tst r12,#ARMV7_NEON 101304636Sjkim bne .LNEON 102304636Sjkim#endif 103304636Sjkim add r2,r1,r2,lsl#6 @ len to point at the end of inp 104304636Sjkim stmdb sp!,{r0,r1,r2,r4-r11,lr} 105304636Sjkim ldmia r0,{r4,r5,r6,r7,r8,r9,r10,r11} 106304636Sjkim sub r14,r3,#256+32 @ K256 107304636Sjkim sub sp,sp,#16*4 @ alloca(X[16]) 108304636Sjkim.Loop: 109304636Sjkim# if __ARM_ARCH__>=7 110304636Sjkim ldr r2,[r1],#4 111304636Sjkim# else 112304636Sjkim ldrb r2,[r1,#3] 113304636Sjkim# endif 114304636Sjkim eor r3,r5,r6 @ magic 115304636Sjkim eor r12,r12,r12 116304636Sjkim#if __ARM_ARCH__>=7 117304636Sjkim @ ldr r2,[r1],#4 @ 0 118304636Sjkim# if 0==15 119304636Sjkim str r1,[sp,#17*4] @ make room for r1 120304636Sjkim# endif 121304636Sjkim eor r0,r8,r8,ror#5 122304636Sjkim add r4,r4,r12 @ h+=Maj(a,b,c) from the past 123304636Sjkim eor r0,r0,r8,ror#19 @ Sigma1(e) 124304636Sjkim rev r2,r2 125304636Sjkim#else 126304636Sjkim @ ldrb r2,[r1,#3] @ 0 127304636Sjkim add r4,r4,r12 @ h+=Maj(a,b,c) from the past 128304636Sjkim ldrb r12,[r1,#2] 129304636Sjkim ldrb r0,[r1,#1] 130304636Sjkim orr r2,r2,r12,lsl#8 131304636Sjkim ldrb r12,[r1],#4 132304636Sjkim orr r2,r2,r0,lsl#16 133304636Sjkim# if 0==15 134304636Sjkim str r1,[sp,#17*4] @ make room for r1 135304636Sjkim# endif 136304636Sjkim eor r0,r8,r8,ror#5 137304636Sjkim orr r2,r2,r12,lsl#24 138304636Sjkim eor r0,r0,r8,ror#19 @ Sigma1(e) 139304636Sjkim#endif 140304636Sjkim ldr r12,[r14],#4 @ *K256++ 141304636Sjkim add r11,r11,r2 @ h+=X[i] 142304636Sjkim str r2,[sp,#0*4] 143304636Sjkim eor r2,r9,r10 144304636Sjkim add r11,r11,r0,ror#6 @ h+=Sigma1(e) 145304636Sjkim and r2,r2,r8 146304636Sjkim add r11,r11,r12 @ h+=K256[i] 147304636Sjkim eor r2,r2,r10 @ Ch(e,f,g) 148304636Sjkim eor r0,r4,r4,ror#11 149304636Sjkim add r11,r11,r2 @ h+=Ch(e,f,g) 150304636Sjkim#if 0==31 151304636Sjkim and r12,r12,#0xff 152304636Sjkim cmp r12,#0xf2 @ done? 153304636Sjkim#endif 154304636Sjkim#if 0<15 155304636Sjkim# if __ARM_ARCH__>=7 156304636Sjkim ldr r2,[r1],#4 @ prefetch 157304636Sjkim# else 158304636Sjkim ldrb r2,[r1,#3] 159304636Sjkim# endif 160304636Sjkim eor r12,r4,r5 @ a^b, b^c in next round 161304636Sjkim#else 162304636Sjkim ldr r2,[sp,#2*4] @ from future BODY_16_xx 163304636Sjkim eor r12,r4,r5 @ a^b, b^c in next round 164304636Sjkim ldr r1,[sp,#15*4] @ from future BODY_16_xx 165304636Sjkim#endif 166304636Sjkim eor r0,r0,r4,ror#20 @ Sigma0(a) 167304636Sjkim and r3,r3,r12 @ (b^c)&=(a^b) 168304636Sjkim add r7,r7,r11 @ d+=h 169304636Sjkim eor r3,r3,r5 @ Maj(a,b,c) 170304636Sjkim add r11,r11,r0,ror#2 @ h+=Sigma0(a) 171304636Sjkim @ add r11,r11,r3 @ h+=Maj(a,b,c) 172304636Sjkim#if __ARM_ARCH__>=7 173304636Sjkim @ ldr r2,[r1],#4 @ 1 174304636Sjkim# if 1==15 175304636Sjkim str r1,[sp,#17*4] @ make room for r1 176304636Sjkim# endif 177304636Sjkim eor r0,r7,r7,ror#5 178304636Sjkim add r11,r11,r3 @ h+=Maj(a,b,c) from the past 179304636Sjkim eor r0,r0,r7,ror#19 @ Sigma1(e) 180304636Sjkim rev r2,r2 181304636Sjkim#else 182304636Sjkim @ ldrb r2,[r1,#3] @ 1 183304636Sjkim add r11,r11,r3 @ h+=Maj(a,b,c) from the past 184304636Sjkim ldrb r3,[r1,#2] 185304636Sjkim ldrb r0,[r1,#1] 186304636Sjkim orr r2,r2,r3,lsl#8 187304636Sjkim ldrb r3,[r1],#4 188304636Sjkim orr r2,r2,r0,lsl#16 189304636Sjkim# if 1==15 190304636Sjkim str r1,[sp,#17*4] @ make room for r1 191304636Sjkim# endif 192304636Sjkim eor r0,r7,r7,ror#5 193304636Sjkim orr r2,r2,r3,lsl#24 194304636Sjkim eor r0,r0,r7,ror#19 @ Sigma1(e) 195304636Sjkim#endif 196304636Sjkim ldr r3,[r14],#4 @ *K256++ 197304636Sjkim add r10,r10,r2 @ h+=X[i] 198304636Sjkim str r2,[sp,#1*4] 199304636Sjkim eor r2,r8,r9 200304636Sjkim add r10,r10,r0,ror#6 @ h+=Sigma1(e) 201304636Sjkim and r2,r2,r7 202304636Sjkim add r10,r10,r3 @ h+=K256[i] 203304636Sjkim eor r2,r2,r9 @ Ch(e,f,g) 204304636Sjkim eor r0,r11,r11,ror#11 205304636Sjkim add r10,r10,r2 @ h+=Ch(e,f,g) 206304636Sjkim#if 1==31 207304636Sjkim and r3,r3,#0xff 208304636Sjkim cmp r3,#0xf2 @ done? 209304636Sjkim#endif 210304636Sjkim#if 1<15 211304636Sjkim# if __ARM_ARCH__>=7 212304636Sjkim ldr r2,[r1],#4 @ prefetch 213304636Sjkim# else 214304636Sjkim ldrb r2,[r1,#3] 215304636Sjkim# endif 216304636Sjkim eor r3,r11,r4 @ a^b, b^c in next round 217304636Sjkim#else 218304636Sjkim ldr r2,[sp,#3*4] @ from future BODY_16_xx 219304636Sjkim eor r3,r11,r4 @ a^b, b^c in next round 220304636Sjkim ldr r1,[sp,#0*4] @ from future BODY_16_xx 221304636Sjkim#endif 222304636Sjkim eor r0,r0,r11,ror#20 @ Sigma0(a) 223304636Sjkim and r12,r12,r3 @ (b^c)&=(a^b) 224304636Sjkim add r6,r6,r10 @ d+=h 225304636Sjkim eor r12,r12,r4 @ Maj(a,b,c) 226304636Sjkim add r10,r10,r0,ror#2 @ h+=Sigma0(a) 227304636Sjkim @ add r10,r10,r12 @ h+=Maj(a,b,c) 228304636Sjkim#if __ARM_ARCH__>=7 229304636Sjkim @ ldr r2,[r1],#4 @ 2 230304636Sjkim# if 2==15 231304636Sjkim str r1,[sp,#17*4] @ make room for r1 232304636Sjkim# endif 233304636Sjkim eor r0,r6,r6,ror#5 234304636Sjkim add r10,r10,r12 @ h+=Maj(a,b,c) from the past 235304636Sjkim eor r0,r0,r6,ror#19 @ Sigma1(e) 236304636Sjkim rev r2,r2 237304636Sjkim#else 238304636Sjkim @ ldrb r2,[r1,#3] @ 2 239304636Sjkim add r10,r10,r12 @ h+=Maj(a,b,c) from the past 240304636Sjkim ldrb r12,[r1,#2] 241304636Sjkim ldrb r0,[r1,#1] 242304636Sjkim orr r2,r2,r12,lsl#8 243304636Sjkim ldrb r12,[r1],#4 244304636Sjkim orr r2,r2,r0,lsl#16 245304636Sjkim# if 2==15 246304636Sjkim str r1,[sp,#17*4] @ make room for r1 247304636Sjkim# endif 248304636Sjkim eor r0,r6,r6,ror#5 249304636Sjkim orr r2,r2,r12,lsl#24 250304636Sjkim eor r0,r0,r6,ror#19 @ Sigma1(e) 251304636Sjkim#endif 252304636Sjkim ldr r12,[r14],#4 @ *K256++ 253304636Sjkim add r9,r9,r2 @ h+=X[i] 254304636Sjkim str r2,[sp,#2*4] 255304636Sjkim eor r2,r7,r8 256304636Sjkim add r9,r9,r0,ror#6 @ h+=Sigma1(e) 257304636Sjkim and r2,r2,r6 258304636Sjkim add r9,r9,r12 @ h+=K256[i] 259304636Sjkim eor r2,r2,r8 @ Ch(e,f,g) 260304636Sjkim eor r0,r10,r10,ror#11 261304636Sjkim add r9,r9,r2 @ h+=Ch(e,f,g) 262304636Sjkim#if 2==31 263304636Sjkim and r12,r12,#0xff 264304636Sjkim cmp r12,#0xf2 @ done? 265304636Sjkim#endif 266304636Sjkim#if 2<15 267304636Sjkim# if __ARM_ARCH__>=7 268304636Sjkim ldr r2,[r1],#4 @ prefetch 269304636Sjkim# else 270304636Sjkim ldrb r2,[r1,#3] 271304636Sjkim# endif 272304636Sjkim eor r12,r10,r11 @ a^b, b^c in next round 273304636Sjkim#else 274304636Sjkim ldr r2,[sp,#4*4] @ from future BODY_16_xx 275304636Sjkim eor r12,r10,r11 @ a^b, b^c in next round 276304636Sjkim ldr r1,[sp,#1*4] @ from future BODY_16_xx 277304636Sjkim#endif 278304636Sjkim eor r0,r0,r10,ror#20 @ Sigma0(a) 279304636Sjkim and r3,r3,r12 @ (b^c)&=(a^b) 280304636Sjkim add r5,r5,r9 @ d+=h 281304636Sjkim eor r3,r3,r11 @ Maj(a,b,c) 282304636Sjkim add r9,r9,r0,ror#2 @ h+=Sigma0(a) 283304636Sjkim @ add r9,r9,r3 @ h+=Maj(a,b,c) 284304636Sjkim#if __ARM_ARCH__>=7 285304636Sjkim @ ldr r2,[r1],#4 @ 3 286304636Sjkim# if 3==15 287304636Sjkim str r1,[sp,#17*4] @ make room for r1 288304636Sjkim# endif 289304636Sjkim eor r0,r5,r5,ror#5 290304636Sjkim add r9,r9,r3 @ h+=Maj(a,b,c) from the past 291304636Sjkim eor r0,r0,r5,ror#19 @ Sigma1(e) 292304636Sjkim rev r2,r2 293304636Sjkim#else 294304636Sjkim @ ldrb r2,[r1,#3] @ 3 295304636Sjkim add r9,r9,r3 @ h+=Maj(a,b,c) from the past 296304636Sjkim ldrb r3,[r1,#2] 297304636Sjkim ldrb r0,[r1,#1] 298304636Sjkim orr r2,r2,r3,lsl#8 299304636Sjkim ldrb r3,[r1],#4 300304636Sjkim orr r2,r2,r0,lsl#16 301304636Sjkim# if 3==15 302304636Sjkim str r1,[sp,#17*4] @ make room for r1 303304636Sjkim# endif 304304636Sjkim eor r0,r5,r5,ror#5 305304636Sjkim orr r2,r2,r3,lsl#24 306304636Sjkim eor r0,r0,r5,ror#19 @ Sigma1(e) 307304636Sjkim#endif 308304636Sjkim ldr r3,[r14],#4 @ *K256++ 309304636Sjkim add r8,r8,r2 @ h+=X[i] 310304636Sjkim str r2,[sp,#3*4] 311304636Sjkim eor r2,r6,r7 312304636Sjkim add r8,r8,r0,ror#6 @ h+=Sigma1(e) 313304636Sjkim and r2,r2,r5 314304636Sjkim add r8,r8,r3 @ h+=K256[i] 315304636Sjkim eor r2,r2,r7 @ Ch(e,f,g) 316304636Sjkim eor r0,r9,r9,ror#11 317304636Sjkim add r8,r8,r2 @ h+=Ch(e,f,g) 318304636Sjkim#if 3==31 319304636Sjkim and r3,r3,#0xff 320304636Sjkim cmp r3,#0xf2 @ done? 321304636Sjkim#endif 322304636Sjkim#if 3<15 323304636Sjkim# if __ARM_ARCH__>=7 324304636Sjkim ldr r2,[r1],#4 @ prefetch 325304636Sjkim# else 326304636Sjkim ldrb r2,[r1,#3] 327304636Sjkim# endif 328304636Sjkim eor r3,r9,r10 @ a^b, b^c in next round 329304636Sjkim#else 330304636Sjkim ldr r2,[sp,#5*4] @ from future BODY_16_xx 331304636Sjkim eor r3,r9,r10 @ a^b, b^c in next round 332304636Sjkim ldr r1,[sp,#2*4] @ from future BODY_16_xx 333304636Sjkim#endif 334304636Sjkim eor r0,r0,r9,ror#20 @ Sigma0(a) 335304636Sjkim and r12,r12,r3 @ (b^c)&=(a^b) 336304636Sjkim add r4,r4,r8 @ d+=h 337304636Sjkim eor r12,r12,r10 @ Maj(a,b,c) 338304636Sjkim add r8,r8,r0,ror#2 @ h+=Sigma0(a) 339304636Sjkim @ add r8,r8,r12 @ h+=Maj(a,b,c) 340304636Sjkim#if __ARM_ARCH__>=7 341304636Sjkim @ ldr r2,[r1],#4 @ 4 342304636Sjkim# if 4==15 343304636Sjkim str r1,[sp,#17*4] @ make room for r1 344304636Sjkim# endif 345304636Sjkim eor r0,r4,r4,ror#5 346304636Sjkim add r8,r8,r12 @ h+=Maj(a,b,c) from the past 347304636Sjkim eor r0,r0,r4,ror#19 @ Sigma1(e) 348304636Sjkim rev r2,r2 349304636Sjkim#else 350304636Sjkim @ ldrb r2,[r1,#3] @ 4 351304636Sjkim add r8,r8,r12 @ h+=Maj(a,b,c) from the past 352304636Sjkim ldrb r12,[r1,#2] 353304636Sjkim ldrb r0,[r1,#1] 354304636Sjkim orr r2,r2,r12,lsl#8 355304636Sjkim ldrb r12,[r1],#4 356304636Sjkim orr r2,r2,r0,lsl#16 357304636Sjkim# if 4==15 358304636Sjkim str r1,[sp,#17*4] @ make room for r1 359304636Sjkim# endif 360304636Sjkim eor r0,r4,r4,ror#5 361304636Sjkim orr r2,r2,r12,lsl#24 362304636Sjkim eor r0,r0,r4,ror#19 @ Sigma1(e) 363304636Sjkim#endif 364304636Sjkim ldr r12,[r14],#4 @ *K256++ 365304636Sjkim add r7,r7,r2 @ h+=X[i] 366304636Sjkim str r2,[sp,#4*4] 367304636Sjkim eor r2,r5,r6 368304636Sjkim add r7,r7,r0,ror#6 @ h+=Sigma1(e) 369304636Sjkim and r2,r2,r4 370304636Sjkim add r7,r7,r12 @ h+=K256[i] 371304636Sjkim eor r2,r2,r6 @ Ch(e,f,g) 372304636Sjkim eor r0,r8,r8,ror#11 373304636Sjkim add r7,r7,r2 @ h+=Ch(e,f,g) 374304636Sjkim#if 4==31 375304636Sjkim and r12,r12,#0xff 376304636Sjkim cmp r12,#0xf2 @ done? 377304636Sjkim#endif 378304636Sjkim#if 4<15 379304636Sjkim# if __ARM_ARCH__>=7 380304636Sjkim ldr r2,[r1],#4 @ prefetch 381304636Sjkim# else 382304636Sjkim ldrb r2,[r1,#3] 383304636Sjkim# endif 384304636Sjkim eor r12,r8,r9 @ a^b, b^c in next round 385304636Sjkim#else 386304636Sjkim ldr r2,[sp,#6*4] @ from future BODY_16_xx 387304636Sjkim eor r12,r8,r9 @ a^b, b^c in next round 388304636Sjkim ldr r1,[sp,#3*4] @ from future BODY_16_xx 389304636Sjkim#endif 390304636Sjkim eor r0,r0,r8,ror#20 @ Sigma0(a) 391304636Sjkim and r3,r3,r12 @ (b^c)&=(a^b) 392304636Sjkim add r11,r11,r7 @ d+=h 393304636Sjkim eor r3,r3,r9 @ Maj(a,b,c) 394304636Sjkim add r7,r7,r0,ror#2 @ h+=Sigma0(a) 395304636Sjkim @ add r7,r7,r3 @ h+=Maj(a,b,c) 396304636Sjkim#if __ARM_ARCH__>=7 397304636Sjkim @ ldr r2,[r1],#4 @ 5 398304636Sjkim# if 5==15 399304636Sjkim str r1,[sp,#17*4] @ make room for r1 400304636Sjkim# endif 401304636Sjkim eor r0,r11,r11,ror#5 402304636Sjkim add r7,r7,r3 @ h+=Maj(a,b,c) from the past 403304636Sjkim eor r0,r0,r11,ror#19 @ Sigma1(e) 404304636Sjkim rev r2,r2 405304636Sjkim#else 406304636Sjkim @ ldrb r2,[r1,#3] @ 5 407304636Sjkim add r7,r7,r3 @ h+=Maj(a,b,c) from the past 408304636Sjkim ldrb r3,[r1,#2] 409304636Sjkim ldrb r0,[r1,#1] 410304636Sjkim orr r2,r2,r3,lsl#8 411304636Sjkim ldrb r3,[r1],#4 412304636Sjkim orr r2,r2,r0,lsl#16 413304636Sjkim# if 5==15 414304636Sjkim str r1,[sp,#17*4] @ make room for r1 415304636Sjkim# endif 416304636Sjkim eor r0,r11,r11,ror#5 417304636Sjkim orr r2,r2,r3,lsl#24 418304636Sjkim eor r0,r0,r11,ror#19 @ Sigma1(e) 419304636Sjkim#endif 420304636Sjkim ldr r3,[r14],#4 @ *K256++ 421304636Sjkim add r6,r6,r2 @ h+=X[i] 422304636Sjkim str r2,[sp,#5*4] 423304636Sjkim eor r2,r4,r5 424304636Sjkim add r6,r6,r0,ror#6 @ h+=Sigma1(e) 425304636Sjkim and r2,r2,r11 426304636Sjkim add r6,r6,r3 @ h+=K256[i] 427304636Sjkim eor r2,r2,r5 @ Ch(e,f,g) 428304636Sjkim eor r0,r7,r7,ror#11 429304636Sjkim add r6,r6,r2 @ h+=Ch(e,f,g) 430304636Sjkim#if 5==31 431304636Sjkim and r3,r3,#0xff 432304636Sjkim cmp r3,#0xf2 @ done? 433304636Sjkim#endif 434304636Sjkim#if 5<15 435304636Sjkim# if __ARM_ARCH__>=7 436304636Sjkim ldr r2,[r1],#4 @ prefetch 437304636Sjkim# else 438304636Sjkim ldrb r2,[r1,#3] 439304636Sjkim# endif 440304636Sjkim eor r3,r7,r8 @ a^b, b^c in next round 441304636Sjkim#else 442304636Sjkim ldr r2,[sp,#7*4] @ from future BODY_16_xx 443304636Sjkim eor r3,r7,r8 @ a^b, b^c in next round 444304636Sjkim ldr r1,[sp,#4*4] @ from future BODY_16_xx 445304636Sjkim#endif 446304636Sjkim eor r0,r0,r7,ror#20 @ Sigma0(a) 447304636Sjkim and r12,r12,r3 @ (b^c)&=(a^b) 448304636Sjkim add r10,r10,r6 @ d+=h 449304636Sjkim eor r12,r12,r8 @ Maj(a,b,c) 450304636Sjkim add r6,r6,r0,ror#2 @ h+=Sigma0(a) 451304636Sjkim @ add r6,r6,r12 @ h+=Maj(a,b,c) 452304636Sjkim#if __ARM_ARCH__>=7 453304636Sjkim @ ldr r2,[r1],#4 @ 6 454304636Sjkim# if 6==15 455304636Sjkim str r1,[sp,#17*4] @ make room for r1 456304636Sjkim# endif 457304636Sjkim eor r0,r10,r10,ror#5 458304636Sjkim add r6,r6,r12 @ h+=Maj(a,b,c) from the past 459304636Sjkim eor r0,r0,r10,ror#19 @ Sigma1(e) 460304636Sjkim rev r2,r2 461304636Sjkim#else 462304636Sjkim @ ldrb r2,[r1,#3] @ 6 463304636Sjkim add r6,r6,r12 @ h+=Maj(a,b,c) from the past 464304636Sjkim ldrb r12,[r1,#2] 465304636Sjkim ldrb r0,[r1,#1] 466304636Sjkim orr r2,r2,r12,lsl#8 467304636Sjkim ldrb r12,[r1],#4 468304636Sjkim orr r2,r2,r0,lsl#16 469304636Sjkim# if 6==15 470304636Sjkim str r1,[sp,#17*4] @ make room for r1 471304636Sjkim# endif 472304636Sjkim eor r0,r10,r10,ror#5 473304636Sjkim orr r2,r2,r12,lsl#24 474304636Sjkim eor r0,r0,r10,ror#19 @ Sigma1(e) 475304636Sjkim#endif 476304636Sjkim ldr r12,[r14],#4 @ *K256++ 477304636Sjkim add r5,r5,r2 @ h+=X[i] 478304636Sjkim str r2,[sp,#6*4] 479304636Sjkim eor r2,r11,r4 480304636Sjkim add r5,r5,r0,ror#6 @ h+=Sigma1(e) 481304636Sjkim and r2,r2,r10 482304636Sjkim add r5,r5,r12 @ h+=K256[i] 483304636Sjkim eor r2,r2,r4 @ Ch(e,f,g) 484304636Sjkim eor r0,r6,r6,ror#11 485304636Sjkim add r5,r5,r2 @ h+=Ch(e,f,g) 486304636Sjkim#if 6==31 487304636Sjkim and r12,r12,#0xff 488304636Sjkim cmp r12,#0xf2 @ done? 489304636Sjkim#endif 490304636Sjkim#if 6<15 491304636Sjkim# if __ARM_ARCH__>=7 492304636Sjkim ldr r2,[r1],#4 @ prefetch 493304636Sjkim# else 494304636Sjkim ldrb r2,[r1,#3] 495304636Sjkim# endif 496304636Sjkim eor r12,r6,r7 @ a^b, b^c in next round 497304636Sjkim#else 498304636Sjkim ldr r2,[sp,#8*4] @ from future BODY_16_xx 499304636Sjkim eor r12,r6,r7 @ a^b, b^c in next round 500304636Sjkim ldr r1,[sp,#5*4] @ from future BODY_16_xx 501304636Sjkim#endif 502304636Sjkim eor r0,r0,r6,ror#20 @ Sigma0(a) 503304636Sjkim and r3,r3,r12 @ (b^c)&=(a^b) 504304636Sjkim add r9,r9,r5 @ d+=h 505304636Sjkim eor r3,r3,r7 @ Maj(a,b,c) 506304636Sjkim add r5,r5,r0,ror#2 @ h+=Sigma0(a) 507304636Sjkim @ add r5,r5,r3 @ h+=Maj(a,b,c) 508304636Sjkim#if __ARM_ARCH__>=7 509304636Sjkim @ ldr r2,[r1],#4 @ 7 510304636Sjkim# if 7==15 511304636Sjkim str r1,[sp,#17*4] @ make room for r1 512304636Sjkim# endif 513304636Sjkim eor r0,r9,r9,ror#5 514304636Sjkim add r5,r5,r3 @ h+=Maj(a,b,c) from the past 515304636Sjkim eor r0,r0,r9,ror#19 @ Sigma1(e) 516304636Sjkim rev r2,r2 517304636Sjkim#else 518304636Sjkim @ ldrb r2,[r1,#3] @ 7 519304636Sjkim add r5,r5,r3 @ h+=Maj(a,b,c) from the past 520304636Sjkim ldrb r3,[r1,#2] 521304636Sjkim ldrb r0,[r1,#1] 522304636Sjkim orr r2,r2,r3,lsl#8 523304636Sjkim ldrb r3,[r1],#4 524304636Sjkim orr r2,r2,r0,lsl#16 525304636Sjkim# if 7==15 526304636Sjkim str r1,[sp,#17*4] @ make room for r1 527304636Sjkim# endif 528304636Sjkim eor r0,r9,r9,ror#5 529304636Sjkim orr r2,r2,r3,lsl#24 530304636Sjkim eor r0,r0,r9,ror#19 @ Sigma1(e) 531304636Sjkim#endif 532304636Sjkim ldr r3,[r14],#4 @ *K256++ 533304636Sjkim add r4,r4,r2 @ h+=X[i] 534304636Sjkim str r2,[sp,#7*4] 535304636Sjkim eor r2,r10,r11 536304636Sjkim add r4,r4,r0,ror#6 @ h+=Sigma1(e) 537304636Sjkim and r2,r2,r9 538304636Sjkim add r4,r4,r3 @ h+=K256[i] 539304636Sjkim eor r2,r2,r11 @ Ch(e,f,g) 540304636Sjkim eor r0,r5,r5,ror#11 541304636Sjkim add r4,r4,r2 @ h+=Ch(e,f,g) 542304636Sjkim#if 7==31 543304636Sjkim and r3,r3,#0xff 544304636Sjkim cmp r3,#0xf2 @ done? 545304636Sjkim#endif 546304636Sjkim#if 7<15 547304636Sjkim# if __ARM_ARCH__>=7 548304636Sjkim ldr r2,[r1],#4 @ prefetch 549304636Sjkim# else 550304636Sjkim ldrb r2,[r1,#3] 551304636Sjkim# endif 552304636Sjkim eor r3,r5,r6 @ a^b, b^c in next round 553304636Sjkim#else 554304636Sjkim ldr r2,[sp,#9*4] @ from future BODY_16_xx 555304636Sjkim eor r3,r5,r6 @ a^b, b^c in next round 556304636Sjkim ldr r1,[sp,#6*4] @ from future BODY_16_xx 557304636Sjkim#endif 558304636Sjkim eor r0,r0,r5,ror#20 @ Sigma0(a) 559304636Sjkim and r12,r12,r3 @ (b^c)&=(a^b) 560304636Sjkim add r8,r8,r4 @ d+=h 561304636Sjkim eor r12,r12,r6 @ Maj(a,b,c) 562304636Sjkim add r4,r4,r0,ror#2 @ h+=Sigma0(a) 563304636Sjkim @ add r4,r4,r12 @ h+=Maj(a,b,c) 564304636Sjkim#if __ARM_ARCH__>=7 565304636Sjkim @ ldr r2,[r1],#4 @ 8 566304636Sjkim# if 8==15 567304636Sjkim str r1,[sp,#17*4] @ make room for r1 568304636Sjkim# endif 569304636Sjkim eor r0,r8,r8,ror#5 570304636Sjkim add r4,r4,r12 @ h+=Maj(a,b,c) from the past 571304636Sjkim eor r0,r0,r8,ror#19 @ Sigma1(e) 572304636Sjkim rev r2,r2 573304636Sjkim#else 574304636Sjkim @ ldrb r2,[r1,#3] @ 8 575304636Sjkim add r4,r4,r12 @ h+=Maj(a,b,c) from the past 576304636Sjkim ldrb r12,[r1,#2] 577304636Sjkim ldrb r0,[r1,#1] 578304636Sjkim orr r2,r2,r12,lsl#8 579304636Sjkim ldrb r12,[r1],#4 580304636Sjkim orr r2,r2,r0,lsl#16 581304636Sjkim# if 8==15 582304636Sjkim str r1,[sp,#17*4] @ make room for r1 583304636Sjkim# endif 584304636Sjkim eor r0,r8,r8,ror#5 585304636Sjkim orr r2,r2,r12,lsl#24 586304636Sjkim eor r0,r0,r8,ror#19 @ Sigma1(e) 587304636Sjkim#endif 588304636Sjkim ldr r12,[r14],#4 @ *K256++ 589304636Sjkim add r11,r11,r2 @ h+=X[i] 590304636Sjkim str r2,[sp,#8*4] 591304636Sjkim eor r2,r9,r10 592304636Sjkim add r11,r11,r0,ror#6 @ h+=Sigma1(e) 593304636Sjkim and r2,r2,r8 594304636Sjkim add r11,r11,r12 @ h+=K256[i] 595304636Sjkim eor r2,r2,r10 @ Ch(e,f,g) 596304636Sjkim eor r0,r4,r4,ror#11 597304636Sjkim add r11,r11,r2 @ h+=Ch(e,f,g) 598304636Sjkim#if 8==31 599304636Sjkim and r12,r12,#0xff 600304636Sjkim cmp r12,#0xf2 @ done? 601304636Sjkim#endif 602304636Sjkim#if 8<15 603304636Sjkim# if __ARM_ARCH__>=7 604304636Sjkim ldr r2,[r1],#4 @ prefetch 605304636Sjkim# else 606304636Sjkim ldrb r2,[r1,#3] 607304636Sjkim# endif 608304636Sjkim eor r12,r4,r5 @ a^b, b^c in next round 609304636Sjkim#else 610304636Sjkim ldr r2,[sp,#10*4] @ from future BODY_16_xx 611304636Sjkim eor r12,r4,r5 @ a^b, b^c in next round 612304636Sjkim ldr r1,[sp,#7*4] @ from future BODY_16_xx 613304636Sjkim#endif 614304636Sjkim eor r0,r0,r4,ror#20 @ Sigma0(a) 615304636Sjkim and r3,r3,r12 @ (b^c)&=(a^b) 616304636Sjkim add r7,r7,r11 @ d+=h 617304636Sjkim eor r3,r3,r5 @ Maj(a,b,c) 618304636Sjkim add r11,r11,r0,ror#2 @ h+=Sigma0(a) 619304636Sjkim @ add r11,r11,r3 @ h+=Maj(a,b,c) 620304636Sjkim#if __ARM_ARCH__>=7 621304636Sjkim @ ldr r2,[r1],#4 @ 9 622304636Sjkim# if 9==15 623304636Sjkim str r1,[sp,#17*4] @ make room for r1 624304636Sjkim# endif 625304636Sjkim eor r0,r7,r7,ror#5 626304636Sjkim add r11,r11,r3 @ h+=Maj(a,b,c) from the past 627304636Sjkim eor r0,r0,r7,ror#19 @ Sigma1(e) 628304636Sjkim rev r2,r2 629304636Sjkim#else 630304636Sjkim @ ldrb r2,[r1,#3] @ 9 631304636Sjkim add r11,r11,r3 @ h+=Maj(a,b,c) from the past 632304636Sjkim ldrb r3,[r1,#2] 633304636Sjkim ldrb r0,[r1,#1] 634304636Sjkim orr r2,r2,r3,lsl#8 635304636Sjkim ldrb r3,[r1],#4 636304636Sjkim orr r2,r2,r0,lsl#16 637304636Sjkim# if 9==15 638304636Sjkim str r1,[sp,#17*4] @ make room for r1 639304636Sjkim# endif 640304636Sjkim eor r0,r7,r7,ror#5 641304636Sjkim orr r2,r2,r3,lsl#24 642304636Sjkim eor r0,r0,r7,ror#19 @ Sigma1(e) 643304636Sjkim#endif 644304636Sjkim ldr r3,[r14],#4 @ *K256++ 645304636Sjkim add r10,r10,r2 @ h+=X[i] 646304636Sjkim str r2,[sp,#9*4] 647304636Sjkim eor r2,r8,r9 648304636Sjkim add r10,r10,r0,ror#6 @ h+=Sigma1(e) 649304636Sjkim and r2,r2,r7 650304636Sjkim add r10,r10,r3 @ h+=K256[i] 651304636Sjkim eor r2,r2,r9 @ Ch(e,f,g) 652304636Sjkim eor r0,r11,r11,ror#11 653304636Sjkim add r10,r10,r2 @ h+=Ch(e,f,g) 654304636Sjkim#if 9==31 655304636Sjkim and r3,r3,#0xff 656304636Sjkim cmp r3,#0xf2 @ done? 657304636Sjkim#endif 658304636Sjkim#if 9<15 659304636Sjkim# if __ARM_ARCH__>=7 660304636Sjkim ldr r2,[r1],#4 @ prefetch 661304636Sjkim# else 662304636Sjkim ldrb r2,[r1,#3] 663304636Sjkim# endif 664304636Sjkim eor r3,r11,r4 @ a^b, b^c in next round 665304636Sjkim#else 666304636Sjkim ldr r2,[sp,#11*4] @ from future BODY_16_xx 667304636Sjkim eor r3,r11,r4 @ a^b, b^c in next round 668304636Sjkim ldr r1,[sp,#8*4] @ from future BODY_16_xx 669304636Sjkim#endif 670304636Sjkim eor r0,r0,r11,ror#20 @ Sigma0(a) 671304636Sjkim and r12,r12,r3 @ (b^c)&=(a^b) 672304636Sjkim add r6,r6,r10 @ d+=h 673304636Sjkim eor r12,r12,r4 @ Maj(a,b,c) 674304636Sjkim add r10,r10,r0,ror#2 @ h+=Sigma0(a) 675304636Sjkim @ add r10,r10,r12 @ h+=Maj(a,b,c) 676304636Sjkim#if __ARM_ARCH__>=7 677304636Sjkim @ ldr r2,[r1],#4 @ 10 678304636Sjkim# if 10==15 679304636Sjkim str r1,[sp,#17*4] @ make room for r1 680304636Sjkim# endif 681304636Sjkim eor r0,r6,r6,ror#5 682304636Sjkim add r10,r10,r12 @ h+=Maj(a,b,c) from the past 683304636Sjkim eor r0,r0,r6,ror#19 @ Sigma1(e) 684304636Sjkim rev r2,r2 685304636Sjkim#else 686304636Sjkim @ ldrb r2,[r1,#3] @ 10 687304636Sjkim add r10,r10,r12 @ h+=Maj(a,b,c) from the past 688304636Sjkim ldrb r12,[r1,#2] 689304636Sjkim ldrb r0,[r1,#1] 690304636Sjkim orr r2,r2,r12,lsl#8 691304636Sjkim ldrb r12,[r1],#4 692304636Sjkim orr r2,r2,r0,lsl#16 693304636Sjkim# if 10==15 694304636Sjkim str r1,[sp,#17*4] @ make room for r1 695304636Sjkim# endif 696304636Sjkim eor r0,r6,r6,ror#5 697304636Sjkim orr r2,r2,r12,lsl#24 698304636Sjkim eor r0,r0,r6,ror#19 @ Sigma1(e) 699304636Sjkim#endif 700304636Sjkim ldr r12,[r14],#4 @ *K256++ 701304636Sjkim add r9,r9,r2 @ h+=X[i] 702304636Sjkim str r2,[sp,#10*4] 703304636Sjkim eor r2,r7,r8 704304636Sjkim add r9,r9,r0,ror#6 @ h+=Sigma1(e) 705304636Sjkim and r2,r2,r6 706304636Sjkim add r9,r9,r12 @ h+=K256[i] 707304636Sjkim eor r2,r2,r8 @ Ch(e,f,g) 708304636Sjkim eor r0,r10,r10,ror#11 709304636Sjkim add r9,r9,r2 @ h+=Ch(e,f,g) 710304636Sjkim#if 10==31 711304636Sjkim and r12,r12,#0xff 712304636Sjkim cmp r12,#0xf2 @ done? 713304636Sjkim#endif 714304636Sjkim#if 10<15 715304636Sjkim# if __ARM_ARCH__>=7 716304636Sjkim ldr r2,[r1],#4 @ prefetch 717304636Sjkim# else 718304636Sjkim ldrb r2,[r1,#3] 719304636Sjkim# endif 720304636Sjkim eor r12,r10,r11 @ a^b, b^c in next round 721304636Sjkim#else 722304636Sjkim ldr r2,[sp,#12*4] @ from future BODY_16_xx 723304636Sjkim eor r12,r10,r11 @ a^b, b^c in next round 724304636Sjkim ldr r1,[sp,#9*4] @ from future BODY_16_xx 725304636Sjkim#endif 726304636Sjkim eor r0,r0,r10,ror#20 @ Sigma0(a) 727304636Sjkim and r3,r3,r12 @ (b^c)&=(a^b) 728304636Sjkim add r5,r5,r9 @ d+=h 729304636Sjkim eor r3,r3,r11 @ Maj(a,b,c) 730304636Sjkim add r9,r9,r0,ror#2 @ h+=Sigma0(a) 731304636Sjkim @ add r9,r9,r3 @ h+=Maj(a,b,c) 732304636Sjkim#if __ARM_ARCH__>=7 733304636Sjkim @ ldr r2,[r1],#4 @ 11 734304636Sjkim# if 11==15 735304636Sjkim str r1,[sp,#17*4] @ make room for r1 736304636Sjkim# endif 737304636Sjkim eor r0,r5,r5,ror#5 738304636Sjkim add r9,r9,r3 @ h+=Maj(a,b,c) from the past 739304636Sjkim eor r0,r0,r5,ror#19 @ Sigma1(e) 740304636Sjkim rev r2,r2 741304636Sjkim#else 742304636Sjkim @ ldrb r2,[r1,#3] @ 11 743304636Sjkim add r9,r9,r3 @ h+=Maj(a,b,c) from the past 744304636Sjkim ldrb r3,[r1,#2] 745304636Sjkim ldrb r0,[r1,#1] 746304636Sjkim orr r2,r2,r3,lsl#8 747304636Sjkim ldrb r3,[r1],#4 748304636Sjkim orr r2,r2,r0,lsl#16 749304636Sjkim# if 11==15 750304636Sjkim str r1,[sp,#17*4] @ make room for r1 751304636Sjkim# endif 752304636Sjkim eor r0,r5,r5,ror#5 753304636Sjkim orr r2,r2,r3,lsl#24 754304636Sjkim eor r0,r0,r5,ror#19 @ Sigma1(e) 755304636Sjkim#endif 756304636Sjkim ldr r3,[r14],#4 @ *K256++ 757304636Sjkim add r8,r8,r2 @ h+=X[i] 758304636Sjkim str r2,[sp,#11*4] 759304636Sjkim eor r2,r6,r7 760304636Sjkim add r8,r8,r0,ror#6 @ h+=Sigma1(e) 761304636Sjkim and r2,r2,r5 762304636Sjkim add r8,r8,r3 @ h+=K256[i] 763304636Sjkim eor r2,r2,r7 @ Ch(e,f,g) 764304636Sjkim eor r0,r9,r9,ror#11 765304636Sjkim add r8,r8,r2 @ h+=Ch(e,f,g) 766304636Sjkim#if 11==31 767304636Sjkim and r3,r3,#0xff 768304636Sjkim cmp r3,#0xf2 @ done? 769304636Sjkim#endif 770304636Sjkim#if 11<15 771304636Sjkim# if __ARM_ARCH__>=7 772304636Sjkim ldr r2,[r1],#4 @ prefetch 773304636Sjkim# else 774304636Sjkim ldrb r2,[r1,#3] 775304636Sjkim# endif 776304636Sjkim eor r3,r9,r10 @ a^b, b^c in next round 777304636Sjkim#else 778304636Sjkim ldr r2,[sp,#13*4] @ from future BODY_16_xx 779304636Sjkim eor r3,r9,r10 @ a^b, b^c in next round 780304636Sjkim ldr r1,[sp,#10*4] @ from future BODY_16_xx 781304636Sjkim#endif 782304636Sjkim eor r0,r0,r9,ror#20 @ Sigma0(a) 783304636Sjkim and r12,r12,r3 @ (b^c)&=(a^b) 784304636Sjkim add r4,r4,r8 @ d+=h 785304636Sjkim eor r12,r12,r10 @ Maj(a,b,c) 786304636Sjkim add r8,r8,r0,ror#2 @ h+=Sigma0(a) 787304636Sjkim @ add r8,r8,r12 @ h+=Maj(a,b,c) 788304636Sjkim#if __ARM_ARCH__>=7 789304636Sjkim @ ldr r2,[r1],#4 @ 12 790304636Sjkim# if 12==15 791304636Sjkim str r1,[sp,#17*4] @ make room for r1 792304636Sjkim# endif 793304636Sjkim eor r0,r4,r4,ror#5 794304636Sjkim add r8,r8,r12 @ h+=Maj(a,b,c) from the past 795304636Sjkim eor r0,r0,r4,ror#19 @ Sigma1(e) 796304636Sjkim rev r2,r2 797304636Sjkim#else 798304636Sjkim @ ldrb r2,[r1,#3] @ 12 799304636Sjkim add r8,r8,r12 @ h+=Maj(a,b,c) from the past 800304636Sjkim ldrb r12,[r1,#2] 801304636Sjkim ldrb r0,[r1,#1] 802304636Sjkim orr r2,r2,r12,lsl#8 803304636Sjkim ldrb r12,[r1],#4 804304636Sjkim orr r2,r2,r0,lsl#16 805304636Sjkim# if 12==15 806304636Sjkim str r1,[sp,#17*4] @ make room for r1 807304636Sjkim# endif 808304636Sjkim eor r0,r4,r4,ror#5 809304636Sjkim orr r2,r2,r12,lsl#24 810304636Sjkim eor r0,r0,r4,ror#19 @ Sigma1(e) 811304636Sjkim#endif 812304636Sjkim ldr r12,[r14],#4 @ *K256++ 813304636Sjkim add r7,r7,r2 @ h+=X[i] 814304636Sjkim str r2,[sp,#12*4] 815304636Sjkim eor r2,r5,r6 816304636Sjkim add r7,r7,r0,ror#6 @ h+=Sigma1(e) 817304636Sjkim and r2,r2,r4 818304636Sjkim add r7,r7,r12 @ h+=K256[i] 819304636Sjkim eor r2,r2,r6 @ Ch(e,f,g) 820304636Sjkim eor r0,r8,r8,ror#11 821304636Sjkim add r7,r7,r2 @ h+=Ch(e,f,g) 822304636Sjkim#if 12==31 823304636Sjkim and r12,r12,#0xff 824304636Sjkim cmp r12,#0xf2 @ done? 825304636Sjkim#endif 826304636Sjkim#if 12<15 827304636Sjkim# if __ARM_ARCH__>=7 828304636Sjkim ldr r2,[r1],#4 @ prefetch 829304636Sjkim# else 830304636Sjkim ldrb r2,[r1,#3] 831304636Sjkim# endif 832304636Sjkim eor r12,r8,r9 @ a^b, b^c in next round 833304636Sjkim#else 834304636Sjkim ldr r2,[sp,#14*4] @ from future BODY_16_xx 835304636Sjkim eor r12,r8,r9 @ a^b, b^c in next round 836304636Sjkim ldr r1,[sp,#11*4] @ from future BODY_16_xx 837304636Sjkim#endif 838304636Sjkim eor r0,r0,r8,ror#20 @ Sigma0(a) 839304636Sjkim and r3,r3,r12 @ (b^c)&=(a^b) 840304636Sjkim add r11,r11,r7 @ d+=h 841304636Sjkim eor r3,r3,r9 @ Maj(a,b,c) 842304636Sjkim add r7,r7,r0,ror#2 @ h+=Sigma0(a) 843304636Sjkim @ add r7,r7,r3 @ h+=Maj(a,b,c) 844304636Sjkim#if __ARM_ARCH__>=7 845304636Sjkim @ ldr r2,[r1],#4 @ 13 846304636Sjkim# if 13==15 847304636Sjkim str r1,[sp,#17*4] @ make room for r1 848304636Sjkim# endif 849304636Sjkim eor r0,r11,r11,ror#5 850304636Sjkim add r7,r7,r3 @ h+=Maj(a,b,c) from the past 851304636Sjkim eor r0,r0,r11,ror#19 @ Sigma1(e) 852304636Sjkim rev r2,r2 853304636Sjkim#else 854304636Sjkim @ ldrb r2,[r1,#3] @ 13 855304636Sjkim add r7,r7,r3 @ h+=Maj(a,b,c) from the past 856304636Sjkim ldrb r3,[r1,#2] 857304636Sjkim ldrb r0,[r1,#1] 858304636Sjkim orr r2,r2,r3,lsl#8 859304636Sjkim ldrb r3,[r1],#4 860304636Sjkim orr r2,r2,r0,lsl#16 861304636Sjkim# if 13==15 862304636Sjkim str r1,[sp,#17*4] @ make room for r1 863304636Sjkim# endif 864304636Sjkim eor r0,r11,r11,ror#5 865304636Sjkim orr r2,r2,r3,lsl#24 866304636Sjkim eor r0,r0,r11,ror#19 @ Sigma1(e) 867304636Sjkim#endif 868304636Sjkim ldr r3,[r14],#4 @ *K256++ 869304636Sjkim add r6,r6,r2 @ h+=X[i] 870304636Sjkim str r2,[sp,#13*4] 871304636Sjkim eor r2,r4,r5 872304636Sjkim add r6,r6,r0,ror#6 @ h+=Sigma1(e) 873304636Sjkim and r2,r2,r11 874304636Sjkim add r6,r6,r3 @ h+=K256[i] 875304636Sjkim eor r2,r2,r5 @ Ch(e,f,g) 876304636Sjkim eor r0,r7,r7,ror#11 877304636Sjkim add r6,r6,r2 @ h+=Ch(e,f,g) 878304636Sjkim#if 13==31 879304636Sjkim and r3,r3,#0xff 880304636Sjkim cmp r3,#0xf2 @ done? 881304636Sjkim#endif 882304636Sjkim#if 13<15 883304636Sjkim# if __ARM_ARCH__>=7 884304636Sjkim ldr r2,[r1],#4 @ prefetch 885304636Sjkim# else 886304636Sjkim ldrb r2,[r1,#3] 887304636Sjkim# endif 888304636Sjkim eor r3,r7,r8 @ a^b, b^c in next round 889304636Sjkim#else 890304636Sjkim ldr r2,[sp,#15*4] @ from future BODY_16_xx 891304636Sjkim eor r3,r7,r8 @ a^b, b^c in next round 892304636Sjkim ldr r1,[sp,#12*4] @ from future BODY_16_xx 893304636Sjkim#endif 894304636Sjkim eor r0,r0,r7,ror#20 @ Sigma0(a) 895304636Sjkim and r12,r12,r3 @ (b^c)&=(a^b) 896304636Sjkim add r10,r10,r6 @ d+=h 897304636Sjkim eor r12,r12,r8 @ Maj(a,b,c) 898304636Sjkim add r6,r6,r0,ror#2 @ h+=Sigma0(a) 899304636Sjkim @ add r6,r6,r12 @ h+=Maj(a,b,c) 900304636Sjkim#if __ARM_ARCH__>=7 901304636Sjkim @ ldr r2,[r1],#4 @ 14 902304636Sjkim# if 14==15 903304636Sjkim str r1,[sp,#17*4] @ make room for r1 904304636Sjkim# endif 905304636Sjkim eor r0,r10,r10,ror#5 906304636Sjkim add r6,r6,r12 @ h+=Maj(a,b,c) from the past 907304636Sjkim eor r0,r0,r10,ror#19 @ Sigma1(e) 908304636Sjkim rev r2,r2 909304636Sjkim#else 910304636Sjkim @ ldrb r2,[r1,#3] @ 14 911304636Sjkim add r6,r6,r12 @ h+=Maj(a,b,c) from the past 912304636Sjkim ldrb r12,[r1,#2] 913304636Sjkim ldrb r0,[r1,#1] 914304636Sjkim orr r2,r2,r12,lsl#8 915304636Sjkim ldrb r12,[r1],#4 916304636Sjkim orr r2,r2,r0,lsl#16 917304636Sjkim# if 14==15 918304636Sjkim str r1,[sp,#17*4] @ make room for r1 919304636Sjkim# endif 920304636Sjkim eor r0,r10,r10,ror#5 921304636Sjkim orr r2,r2,r12,lsl#24 922304636Sjkim eor r0,r0,r10,ror#19 @ Sigma1(e) 923304636Sjkim#endif 924304636Sjkim ldr r12,[r14],#4 @ *K256++ 925304636Sjkim add r5,r5,r2 @ h+=X[i] 926304636Sjkim str r2,[sp,#14*4] 927304636Sjkim eor r2,r11,r4 928304636Sjkim add r5,r5,r0,ror#6 @ h+=Sigma1(e) 929304636Sjkim and r2,r2,r10 930304636Sjkim add r5,r5,r12 @ h+=K256[i] 931304636Sjkim eor r2,r2,r4 @ Ch(e,f,g) 932304636Sjkim eor r0,r6,r6,ror#11 933304636Sjkim add r5,r5,r2 @ h+=Ch(e,f,g) 934304636Sjkim#if 14==31 935304636Sjkim and r12,r12,#0xff 936304636Sjkim cmp r12,#0xf2 @ done? 937304636Sjkim#endif 938304636Sjkim#if 14<15 939304636Sjkim# if __ARM_ARCH__>=7 940304636Sjkim ldr r2,[r1],#4 @ prefetch 941304636Sjkim# else 942304636Sjkim ldrb r2,[r1,#3] 943304636Sjkim# endif 944304636Sjkim eor r12,r6,r7 @ a^b, b^c in next round 945304636Sjkim#else 946304636Sjkim ldr r2,[sp,#0*4] @ from future BODY_16_xx 947304636Sjkim eor r12,r6,r7 @ a^b, b^c in next round 948304636Sjkim ldr r1,[sp,#13*4] @ from future BODY_16_xx 949304636Sjkim#endif 950304636Sjkim eor r0,r0,r6,ror#20 @ Sigma0(a) 951304636Sjkim and r3,r3,r12 @ (b^c)&=(a^b) 952304636Sjkim add r9,r9,r5 @ d+=h 953304636Sjkim eor r3,r3,r7 @ Maj(a,b,c) 954304636Sjkim add r5,r5,r0,ror#2 @ h+=Sigma0(a) 955304636Sjkim @ add r5,r5,r3 @ h+=Maj(a,b,c) 956304636Sjkim#if __ARM_ARCH__>=7 957304636Sjkim @ ldr r2,[r1],#4 @ 15 958304636Sjkim# if 15==15 959304636Sjkim str r1,[sp,#17*4] @ make room for r1 960304636Sjkim# endif 961304636Sjkim eor r0,r9,r9,ror#5 962304636Sjkim add r5,r5,r3 @ h+=Maj(a,b,c) from the past 963304636Sjkim eor r0,r0,r9,ror#19 @ Sigma1(e) 964304636Sjkim rev r2,r2 965304636Sjkim#else 966304636Sjkim @ ldrb r2,[r1,#3] @ 15 967304636Sjkim add r5,r5,r3 @ h+=Maj(a,b,c) from the past 968304636Sjkim ldrb r3,[r1,#2] 969304636Sjkim ldrb r0,[r1,#1] 970304636Sjkim orr r2,r2,r3,lsl#8 971304636Sjkim ldrb r3,[r1],#4 972304636Sjkim orr r2,r2,r0,lsl#16 973304636Sjkim# if 15==15 974304636Sjkim str r1,[sp,#17*4] @ make room for r1 975304636Sjkim# endif 976304636Sjkim eor r0,r9,r9,ror#5 977304636Sjkim orr r2,r2,r3,lsl#24 978304636Sjkim eor r0,r0,r9,ror#19 @ Sigma1(e) 979304636Sjkim#endif 980304636Sjkim ldr r3,[r14],#4 @ *K256++ 981304636Sjkim add r4,r4,r2 @ h+=X[i] 982304636Sjkim str r2,[sp,#15*4] 983304636Sjkim eor r2,r10,r11 984304636Sjkim add r4,r4,r0,ror#6 @ h+=Sigma1(e) 985304636Sjkim and r2,r2,r9 986304636Sjkim add r4,r4,r3 @ h+=K256[i] 987304636Sjkim eor r2,r2,r11 @ Ch(e,f,g) 988304636Sjkim eor r0,r5,r5,ror#11 989304636Sjkim add r4,r4,r2 @ h+=Ch(e,f,g) 990304636Sjkim#if 15==31 991304636Sjkim and r3,r3,#0xff 992304636Sjkim cmp r3,#0xf2 @ done? 993304636Sjkim#endif 994304636Sjkim#if 15<15 995304636Sjkim# if __ARM_ARCH__>=7 996304636Sjkim ldr r2,[r1],#4 @ prefetch 997304636Sjkim# else 998304636Sjkim ldrb r2,[r1,#3] 999304636Sjkim# endif 1000304636Sjkim eor r3,r5,r6 @ a^b, b^c in next round 1001304636Sjkim#else 1002304636Sjkim ldr r2,[sp,#1*4] @ from future BODY_16_xx 1003304636Sjkim eor r3,r5,r6 @ a^b, b^c in next round 1004304636Sjkim ldr r1,[sp,#14*4] @ from future BODY_16_xx 1005304636Sjkim#endif 1006304636Sjkim eor r0,r0,r5,ror#20 @ Sigma0(a) 1007304636Sjkim and r12,r12,r3 @ (b^c)&=(a^b) 1008304636Sjkim add r8,r8,r4 @ d+=h 1009304636Sjkim eor r12,r12,r6 @ Maj(a,b,c) 1010304636Sjkim add r4,r4,r0,ror#2 @ h+=Sigma0(a) 1011304636Sjkim @ add r4,r4,r12 @ h+=Maj(a,b,c) 1012304636Sjkim.Lrounds_16_xx: 1013304636Sjkim @ ldr r2,[sp,#1*4] @ 16 1014304636Sjkim @ ldr r1,[sp,#14*4] 1015304636Sjkim mov r0,r2,ror#7 1016304636Sjkim add r4,r4,r12 @ h+=Maj(a,b,c) from the past 1017304636Sjkim mov r12,r1,ror#17 1018304636Sjkim eor r0,r0,r2,ror#18 1019304636Sjkim eor r12,r12,r1,ror#19 1020304636Sjkim eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1021304636Sjkim ldr r2,[sp,#0*4] 1022304636Sjkim eor r12,r12,r1,lsr#10 @ sigma1(X[i+14]) 1023304636Sjkim ldr r1,[sp,#9*4] 1024304636Sjkim 1025304636Sjkim add r12,r12,r0 1026304636Sjkim eor r0,r8,r8,ror#5 @ from BODY_00_15 1027304636Sjkim add r2,r2,r12 1028304636Sjkim eor r0,r0,r8,ror#19 @ Sigma1(e) 1029304636Sjkim add r2,r2,r1 @ X[i] 1030304636Sjkim ldr r12,[r14],#4 @ *K256++ 1031304636Sjkim add r11,r11,r2 @ h+=X[i] 1032304636Sjkim str r2,[sp,#0*4] 1033304636Sjkim eor r2,r9,r10 1034304636Sjkim add r11,r11,r0,ror#6 @ h+=Sigma1(e) 1035304636Sjkim and r2,r2,r8 1036304636Sjkim add r11,r11,r12 @ h+=K256[i] 1037304636Sjkim eor r2,r2,r10 @ Ch(e,f,g) 1038304636Sjkim eor r0,r4,r4,ror#11 1039304636Sjkim add r11,r11,r2 @ h+=Ch(e,f,g) 1040304636Sjkim#if 16==31 1041304636Sjkim and r12,r12,#0xff 1042304636Sjkim cmp r12,#0xf2 @ done? 1043304636Sjkim#endif 1044304636Sjkim#if 16<15 1045304636Sjkim# if __ARM_ARCH__>=7 1046304636Sjkim ldr r2,[r1],#4 @ prefetch 1047304636Sjkim# else 1048304636Sjkim ldrb r2,[r1,#3] 1049304636Sjkim# endif 1050304636Sjkim eor r12,r4,r5 @ a^b, b^c in next round 1051304636Sjkim#else 1052304636Sjkim ldr r2,[sp,#2*4] @ from future BODY_16_xx 1053304636Sjkim eor r12,r4,r5 @ a^b, b^c in next round 1054304636Sjkim ldr r1,[sp,#15*4] @ from future BODY_16_xx 1055304636Sjkim#endif 1056304636Sjkim eor r0,r0,r4,ror#20 @ Sigma0(a) 1057304636Sjkim and r3,r3,r12 @ (b^c)&=(a^b) 1058304636Sjkim add r7,r7,r11 @ d+=h 1059304636Sjkim eor r3,r3,r5 @ Maj(a,b,c) 1060304636Sjkim add r11,r11,r0,ror#2 @ h+=Sigma0(a) 1061304636Sjkim @ add r11,r11,r3 @ h+=Maj(a,b,c) 1062304636Sjkim @ ldr r2,[sp,#2*4] @ 17 1063304636Sjkim @ ldr r1,[sp,#15*4] 1064304636Sjkim mov r0,r2,ror#7 1065304636Sjkim add r11,r11,r3 @ h+=Maj(a,b,c) from the past 1066304636Sjkim mov r3,r1,ror#17 1067304636Sjkim eor r0,r0,r2,ror#18 1068304636Sjkim eor r3,r3,r1,ror#19 1069304636Sjkim eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1070304636Sjkim ldr r2,[sp,#1*4] 1071304636Sjkim eor r3,r3,r1,lsr#10 @ sigma1(X[i+14]) 1072304636Sjkim ldr r1,[sp,#10*4] 1073304636Sjkim 1074304636Sjkim add r3,r3,r0 1075304636Sjkim eor r0,r7,r7,ror#5 @ from BODY_00_15 1076304636Sjkim add r2,r2,r3 1077304636Sjkim eor r0,r0,r7,ror#19 @ Sigma1(e) 1078304636Sjkim add r2,r2,r1 @ X[i] 1079304636Sjkim ldr r3,[r14],#4 @ *K256++ 1080304636Sjkim add r10,r10,r2 @ h+=X[i] 1081304636Sjkim str r2,[sp,#1*4] 1082304636Sjkim eor r2,r8,r9 1083304636Sjkim add r10,r10,r0,ror#6 @ h+=Sigma1(e) 1084304636Sjkim and r2,r2,r7 1085304636Sjkim add r10,r10,r3 @ h+=K256[i] 1086304636Sjkim eor r2,r2,r9 @ Ch(e,f,g) 1087304636Sjkim eor r0,r11,r11,ror#11 1088304636Sjkim add r10,r10,r2 @ h+=Ch(e,f,g) 1089304636Sjkim#if 17==31 1090304636Sjkim and r3,r3,#0xff 1091304636Sjkim cmp r3,#0xf2 @ done? 1092304636Sjkim#endif 1093304636Sjkim#if 17<15 1094304636Sjkim# if __ARM_ARCH__>=7 1095304636Sjkim ldr r2,[r1],#4 @ prefetch 1096304636Sjkim# else 1097304636Sjkim ldrb r2,[r1,#3] 1098304636Sjkim# endif 1099304636Sjkim eor r3,r11,r4 @ a^b, b^c in next round 1100304636Sjkim#else 1101304636Sjkim ldr r2,[sp,#3*4] @ from future BODY_16_xx 1102304636Sjkim eor r3,r11,r4 @ a^b, b^c in next round 1103304636Sjkim ldr r1,[sp,#0*4] @ from future BODY_16_xx 1104304636Sjkim#endif 1105304636Sjkim eor r0,r0,r11,ror#20 @ Sigma0(a) 1106304636Sjkim and r12,r12,r3 @ (b^c)&=(a^b) 1107304636Sjkim add r6,r6,r10 @ d+=h 1108304636Sjkim eor r12,r12,r4 @ Maj(a,b,c) 1109304636Sjkim add r10,r10,r0,ror#2 @ h+=Sigma0(a) 1110304636Sjkim @ add r10,r10,r12 @ h+=Maj(a,b,c) 1111304636Sjkim @ ldr r2,[sp,#3*4] @ 18 1112304636Sjkim @ ldr r1,[sp,#0*4] 1113304636Sjkim mov r0,r2,ror#7 1114304636Sjkim add r10,r10,r12 @ h+=Maj(a,b,c) from the past 1115304636Sjkim mov r12,r1,ror#17 1116304636Sjkim eor r0,r0,r2,ror#18 1117304636Sjkim eor r12,r12,r1,ror#19 1118304636Sjkim eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1119304636Sjkim ldr r2,[sp,#2*4] 1120304636Sjkim eor r12,r12,r1,lsr#10 @ sigma1(X[i+14]) 1121304636Sjkim ldr r1,[sp,#11*4] 1122304636Sjkim 1123304636Sjkim add r12,r12,r0 1124304636Sjkim eor r0,r6,r6,ror#5 @ from BODY_00_15 1125304636Sjkim add r2,r2,r12 1126304636Sjkim eor r0,r0,r6,ror#19 @ Sigma1(e) 1127304636Sjkim add r2,r2,r1 @ X[i] 1128304636Sjkim ldr r12,[r14],#4 @ *K256++ 1129304636Sjkim add r9,r9,r2 @ h+=X[i] 1130304636Sjkim str r2,[sp,#2*4] 1131304636Sjkim eor r2,r7,r8 1132304636Sjkim add r9,r9,r0,ror#6 @ h+=Sigma1(e) 1133304636Sjkim and r2,r2,r6 1134304636Sjkim add r9,r9,r12 @ h+=K256[i] 1135304636Sjkim eor r2,r2,r8 @ Ch(e,f,g) 1136304636Sjkim eor r0,r10,r10,ror#11 1137304636Sjkim add r9,r9,r2 @ h+=Ch(e,f,g) 1138304636Sjkim#if 18==31 1139304636Sjkim and r12,r12,#0xff 1140304636Sjkim cmp r12,#0xf2 @ done? 1141304636Sjkim#endif 1142304636Sjkim#if 18<15 1143304636Sjkim# if __ARM_ARCH__>=7 1144304636Sjkim ldr r2,[r1],#4 @ prefetch 1145304636Sjkim# else 1146304636Sjkim ldrb r2,[r1,#3] 1147304636Sjkim# endif 1148304636Sjkim eor r12,r10,r11 @ a^b, b^c in next round 1149304636Sjkim#else 1150304636Sjkim ldr r2,[sp,#4*4] @ from future BODY_16_xx 1151304636Sjkim eor r12,r10,r11 @ a^b, b^c in next round 1152304636Sjkim ldr r1,[sp,#1*4] @ from future BODY_16_xx 1153304636Sjkim#endif 1154304636Sjkim eor r0,r0,r10,ror#20 @ Sigma0(a) 1155304636Sjkim and r3,r3,r12 @ (b^c)&=(a^b) 1156304636Sjkim add r5,r5,r9 @ d+=h 1157304636Sjkim eor r3,r3,r11 @ Maj(a,b,c) 1158304636Sjkim add r9,r9,r0,ror#2 @ h+=Sigma0(a) 1159304636Sjkim @ add r9,r9,r3 @ h+=Maj(a,b,c) 1160304636Sjkim @ ldr r2,[sp,#4*4] @ 19 1161304636Sjkim @ ldr r1,[sp,#1*4] 1162304636Sjkim mov r0,r2,ror#7 1163304636Sjkim add r9,r9,r3 @ h+=Maj(a,b,c) from the past 1164304636Sjkim mov r3,r1,ror#17 1165304636Sjkim eor r0,r0,r2,ror#18 1166304636Sjkim eor r3,r3,r1,ror#19 1167304636Sjkim eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1168304636Sjkim ldr r2,[sp,#3*4] 1169304636Sjkim eor r3,r3,r1,lsr#10 @ sigma1(X[i+14]) 1170304636Sjkim ldr r1,[sp,#12*4] 1171304636Sjkim 1172304636Sjkim add r3,r3,r0 1173304636Sjkim eor r0,r5,r5,ror#5 @ from BODY_00_15 1174304636Sjkim add r2,r2,r3 1175304636Sjkim eor r0,r0,r5,ror#19 @ Sigma1(e) 1176304636Sjkim add r2,r2,r1 @ X[i] 1177304636Sjkim ldr r3,[r14],#4 @ *K256++ 1178304636Sjkim add r8,r8,r2 @ h+=X[i] 1179304636Sjkim str r2,[sp,#3*4] 1180304636Sjkim eor r2,r6,r7 1181304636Sjkim add r8,r8,r0,ror#6 @ h+=Sigma1(e) 1182304636Sjkim and r2,r2,r5 1183304636Sjkim add r8,r8,r3 @ h+=K256[i] 1184304636Sjkim eor r2,r2,r7 @ Ch(e,f,g) 1185304636Sjkim eor r0,r9,r9,ror#11 1186304636Sjkim add r8,r8,r2 @ h+=Ch(e,f,g) 1187304636Sjkim#if 19==31 1188304636Sjkim and r3,r3,#0xff 1189304636Sjkim cmp r3,#0xf2 @ done? 1190304636Sjkim#endif 1191304636Sjkim#if 19<15 1192304636Sjkim# if __ARM_ARCH__>=7 1193304636Sjkim ldr r2,[r1],#4 @ prefetch 1194304636Sjkim# else 1195304636Sjkim ldrb r2,[r1,#3] 1196304636Sjkim# endif 1197304636Sjkim eor r3,r9,r10 @ a^b, b^c in next round 1198304636Sjkim#else 1199304636Sjkim ldr r2,[sp,#5*4] @ from future BODY_16_xx 1200304636Sjkim eor r3,r9,r10 @ a^b, b^c in next round 1201304636Sjkim ldr r1,[sp,#2*4] @ from future BODY_16_xx 1202304636Sjkim#endif 1203304636Sjkim eor r0,r0,r9,ror#20 @ Sigma0(a) 1204304636Sjkim and r12,r12,r3 @ (b^c)&=(a^b) 1205304636Sjkim add r4,r4,r8 @ d+=h 1206304636Sjkim eor r12,r12,r10 @ Maj(a,b,c) 1207304636Sjkim add r8,r8,r0,ror#2 @ h+=Sigma0(a) 1208304636Sjkim @ add r8,r8,r12 @ h+=Maj(a,b,c) 1209304636Sjkim @ ldr r2,[sp,#5*4] @ 20 1210304636Sjkim @ ldr r1,[sp,#2*4] 1211304636Sjkim mov r0,r2,ror#7 1212304636Sjkim add r8,r8,r12 @ h+=Maj(a,b,c) from the past 1213304636Sjkim mov r12,r1,ror#17 1214304636Sjkim eor r0,r0,r2,ror#18 1215304636Sjkim eor r12,r12,r1,ror#19 1216304636Sjkim eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1217304636Sjkim ldr r2,[sp,#4*4] 1218304636Sjkim eor r12,r12,r1,lsr#10 @ sigma1(X[i+14]) 1219304636Sjkim ldr r1,[sp,#13*4] 1220304636Sjkim 1221304636Sjkim add r12,r12,r0 1222304636Sjkim eor r0,r4,r4,ror#5 @ from BODY_00_15 1223304636Sjkim add r2,r2,r12 1224304636Sjkim eor r0,r0,r4,ror#19 @ Sigma1(e) 1225304636Sjkim add r2,r2,r1 @ X[i] 1226304636Sjkim ldr r12,[r14],#4 @ *K256++ 1227304636Sjkim add r7,r7,r2 @ h+=X[i] 1228304636Sjkim str r2,[sp,#4*4] 1229304636Sjkim eor r2,r5,r6 1230304636Sjkim add r7,r7,r0,ror#6 @ h+=Sigma1(e) 1231304636Sjkim and r2,r2,r4 1232304636Sjkim add r7,r7,r12 @ h+=K256[i] 1233304636Sjkim eor r2,r2,r6 @ Ch(e,f,g) 1234304636Sjkim eor r0,r8,r8,ror#11 1235304636Sjkim add r7,r7,r2 @ h+=Ch(e,f,g) 1236304636Sjkim#if 20==31 1237304636Sjkim and r12,r12,#0xff 1238304636Sjkim cmp r12,#0xf2 @ done? 1239304636Sjkim#endif 1240304636Sjkim#if 20<15 1241304636Sjkim# if __ARM_ARCH__>=7 1242304636Sjkim ldr r2,[r1],#4 @ prefetch 1243304636Sjkim# else 1244304636Sjkim ldrb r2,[r1,#3] 1245304636Sjkim# endif 1246304636Sjkim eor r12,r8,r9 @ a^b, b^c in next round 1247304636Sjkim#else 1248304636Sjkim ldr r2,[sp,#6*4] @ from future BODY_16_xx 1249304636Sjkim eor r12,r8,r9 @ a^b, b^c in next round 1250304636Sjkim ldr r1,[sp,#3*4] @ from future BODY_16_xx 1251304636Sjkim#endif 1252304636Sjkim eor r0,r0,r8,ror#20 @ Sigma0(a) 1253304636Sjkim and r3,r3,r12 @ (b^c)&=(a^b) 1254304636Sjkim add r11,r11,r7 @ d+=h 1255304636Sjkim eor r3,r3,r9 @ Maj(a,b,c) 1256304636Sjkim add r7,r7,r0,ror#2 @ h+=Sigma0(a) 1257304636Sjkim @ add r7,r7,r3 @ h+=Maj(a,b,c) 1258304636Sjkim @ ldr r2,[sp,#6*4] @ 21 1259304636Sjkim @ ldr r1,[sp,#3*4] 1260304636Sjkim mov r0,r2,ror#7 1261304636Sjkim add r7,r7,r3 @ h+=Maj(a,b,c) from the past 1262304636Sjkim mov r3,r1,ror#17 1263304636Sjkim eor r0,r0,r2,ror#18 1264304636Sjkim eor r3,r3,r1,ror#19 1265304636Sjkim eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1266304636Sjkim ldr r2,[sp,#5*4] 1267304636Sjkim eor r3,r3,r1,lsr#10 @ sigma1(X[i+14]) 1268304636Sjkim ldr r1,[sp,#14*4] 1269304636Sjkim 1270304636Sjkim add r3,r3,r0 1271304636Sjkim eor r0,r11,r11,ror#5 @ from BODY_00_15 1272304636Sjkim add r2,r2,r3 1273304636Sjkim eor r0,r0,r11,ror#19 @ Sigma1(e) 1274304636Sjkim add r2,r2,r1 @ X[i] 1275304636Sjkim ldr r3,[r14],#4 @ *K256++ 1276304636Sjkim add r6,r6,r2 @ h+=X[i] 1277304636Sjkim str r2,[sp,#5*4] 1278304636Sjkim eor r2,r4,r5 1279304636Sjkim add r6,r6,r0,ror#6 @ h+=Sigma1(e) 1280304636Sjkim and r2,r2,r11 1281304636Sjkim add r6,r6,r3 @ h+=K256[i] 1282304636Sjkim eor r2,r2,r5 @ Ch(e,f,g) 1283304636Sjkim eor r0,r7,r7,ror#11 1284304636Sjkim add r6,r6,r2 @ h+=Ch(e,f,g) 1285304636Sjkim#if 21==31 1286304636Sjkim and r3,r3,#0xff 1287304636Sjkim cmp r3,#0xf2 @ done? 1288304636Sjkim#endif 1289304636Sjkim#if 21<15 1290304636Sjkim# if __ARM_ARCH__>=7 1291304636Sjkim ldr r2,[r1],#4 @ prefetch 1292304636Sjkim# else 1293304636Sjkim ldrb r2,[r1,#3] 1294304636Sjkim# endif 1295304636Sjkim eor r3,r7,r8 @ a^b, b^c in next round 1296304636Sjkim#else 1297304636Sjkim ldr r2,[sp,#7*4] @ from future BODY_16_xx 1298304636Sjkim eor r3,r7,r8 @ a^b, b^c in next round 1299304636Sjkim ldr r1,[sp,#4*4] @ from future BODY_16_xx 1300304636Sjkim#endif 1301304636Sjkim eor r0,r0,r7,ror#20 @ Sigma0(a) 1302304636Sjkim and r12,r12,r3 @ (b^c)&=(a^b) 1303304636Sjkim add r10,r10,r6 @ d+=h 1304304636Sjkim eor r12,r12,r8 @ Maj(a,b,c) 1305304636Sjkim add r6,r6,r0,ror#2 @ h+=Sigma0(a) 1306304636Sjkim @ add r6,r6,r12 @ h+=Maj(a,b,c) 1307304636Sjkim @ ldr r2,[sp,#7*4] @ 22 1308304636Sjkim @ ldr r1,[sp,#4*4] 1309304636Sjkim mov r0,r2,ror#7 1310304636Sjkim add r6,r6,r12 @ h+=Maj(a,b,c) from the past 1311304636Sjkim mov r12,r1,ror#17 1312304636Sjkim eor r0,r0,r2,ror#18 1313304636Sjkim eor r12,r12,r1,ror#19 1314304636Sjkim eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1315304636Sjkim ldr r2,[sp,#6*4] 1316304636Sjkim eor r12,r12,r1,lsr#10 @ sigma1(X[i+14]) 1317304636Sjkim ldr r1,[sp,#15*4] 1318304636Sjkim 1319304636Sjkim add r12,r12,r0 1320304636Sjkim eor r0,r10,r10,ror#5 @ from BODY_00_15 1321304636Sjkim add r2,r2,r12 1322304636Sjkim eor r0,r0,r10,ror#19 @ Sigma1(e) 1323304636Sjkim add r2,r2,r1 @ X[i] 1324304636Sjkim ldr r12,[r14],#4 @ *K256++ 1325304636Sjkim add r5,r5,r2 @ h+=X[i] 1326304636Sjkim str r2,[sp,#6*4] 1327304636Sjkim eor r2,r11,r4 1328304636Sjkim add r5,r5,r0,ror#6 @ h+=Sigma1(e) 1329304636Sjkim and r2,r2,r10 1330304636Sjkim add r5,r5,r12 @ h+=K256[i] 1331304636Sjkim eor r2,r2,r4 @ Ch(e,f,g) 1332304636Sjkim eor r0,r6,r6,ror#11 1333304636Sjkim add r5,r5,r2 @ h+=Ch(e,f,g) 1334304636Sjkim#if 22==31 1335304636Sjkim and r12,r12,#0xff 1336304636Sjkim cmp r12,#0xf2 @ done? 1337304636Sjkim#endif 1338304636Sjkim#if 22<15 1339304636Sjkim# if __ARM_ARCH__>=7 1340304636Sjkim ldr r2,[r1],#4 @ prefetch 1341304636Sjkim# else 1342304636Sjkim ldrb r2,[r1,#3] 1343304636Sjkim# endif 1344304636Sjkim eor r12,r6,r7 @ a^b, b^c in next round 1345304636Sjkim#else 1346304636Sjkim ldr r2,[sp,#8*4] @ from future BODY_16_xx 1347304636Sjkim eor r12,r6,r7 @ a^b, b^c in next round 1348304636Sjkim ldr r1,[sp,#5*4] @ from future BODY_16_xx 1349304636Sjkim#endif 1350304636Sjkim eor r0,r0,r6,ror#20 @ Sigma0(a) 1351304636Sjkim and r3,r3,r12 @ (b^c)&=(a^b) 1352304636Sjkim add r9,r9,r5 @ d+=h 1353304636Sjkim eor r3,r3,r7 @ Maj(a,b,c) 1354304636Sjkim add r5,r5,r0,ror#2 @ h+=Sigma0(a) 1355304636Sjkim @ add r5,r5,r3 @ h+=Maj(a,b,c) 1356304636Sjkim @ ldr r2,[sp,#8*4] @ 23 1357304636Sjkim @ ldr r1,[sp,#5*4] 1358304636Sjkim mov r0,r2,ror#7 1359304636Sjkim add r5,r5,r3 @ h+=Maj(a,b,c) from the past 1360304636Sjkim mov r3,r1,ror#17 1361304636Sjkim eor r0,r0,r2,ror#18 1362304636Sjkim eor r3,r3,r1,ror#19 1363304636Sjkim eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1364304636Sjkim ldr r2,[sp,#7*4] 1365304636Sjkim eor r3,r3,r1,lsr#10 @ sigma1(X[i+14]) 1366304636Sjkim ldr r1,[sp,#0*4] 1367304636Sjkim 1368304636Sjkim add r3,r3,r0 1369304636Sjkim eor r0,r9,r9,ror#5 @ from BODY_00_15 1370304636Sjkim add r2,r2,r3 1371304636Sjkim eor r0,r0,r9,ror#19 @ Sigma1(e) 1372304636Sjkim add r2,r2,r1 @ X[i] 1373304636Sjkim ldr r3,[r14],#4 @ *K256++ 1374304636Sjkim add r4,r4,r2 @ h+=X[i] 1375304636Sjkim str r2,[sp,#7*4] 1376304636Sjkim eor r2,r10,r11 1377304636Sjkim add r4,r4,r0,ror#6 @ h+=Sigma1(e) 1378304636Sjkim and r2,r2,r9 1379304636Sjkim add r4,r4,r3 @ h+=K256[i] 1380304636Sjkim eor r2,r2,r11 @ Ch(e,f,g) 1381304636Sjkim eor r0,r5,r5,ror#11 1382304636Sjkim add r4,r4,r2 @ h+=Ch(e,f,g) 1383304636Sjkim#if 23==31 1384304636Sjkim and r3,r3,#0xff 1385304636Sjkim cmp r3,#0xf2 @ done? 1386304636Sjkim#endif 1387304636Sjkim#if 23<15 1388304636Sjkim# if __ARM_ARCH__>=7 1389304636Sjkim ldr r2,[r1],#4 @ prefetch 1390304636Sjkim# else 1391304636Sjkim ldrb r2,[r1,#3] 1392304636Sjkim# endif 1393304636Sjkim eor r3,r5,r6 @ a^b, b^c in next round 1394304636Sjkim#else 1395304636Sjkim ldr r2,[sp,#9*4] @ from future BODY_16_xx 1396304636Sjkim eor r3,r5,r6 @ a^b, b^c in next round 1397304636Sjkim ldr r1,[sp,#6*4] @ from future BODY_16_xx 1398304636Sjkim#endif 1399304636Sjkim eor r0,r0,r5,ror#20 @ Sigma0(a) 1400304636Sjkim and r12,r12,r3 @ (b^c)&=(a^b) 1401304636Sjkim add r8,r8,r4 @ d+=h 1402304636Sjkim eor r12,r12,r6 @ Maj(a,b,c) 1403304636Sjkim add r4,r4,r0,ror#2 @ h+=Sigma0(a) 1404304636Sjkim @ add r4,r4,r12 @ h+=Maj(a,b,c) 1405304636Sjkim @ ldr r2,[sp,#9*4] @ 24 1406304636Sjkim @ ldr r1,[sp,#6*4] 1407304636Sjkim mov r0,r2,ror#7 1408304636Sjkim add r4,r4,r12 @ h+=Maj(a,b,c) from the past 1409304636Sjkim mov r12,r1,ror#17 1410304636Sjkim eor r0,r0,r2,ror#18 1411304636Sjkim eor r12,r12,r1,ror#19 1412304636Sjkim eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1413304636Sjkim ldr r2,[sp,#8*4] 1414304636Sjkim eor r12,r12,r1,lsr#10 @ sigma1(X[i+14]) 1415304636Sjkim ldr r1,[sp,#1*4] 1416304636Sjkim 1417304636Sjkim add r12,r12,r0 1418304636Sjkim eor r0,r8,r8,ror#5 @ from BODY_00_15 1419304636Sjkim add r2,r2,r12 1420304636Sjkim eor r0,r0,r8,ror#19 @ Sigma1(e) 1421304636Sjkim add r2,r2,r1 @ X[i] 1422304636Sjkim ldr r12,[r14],#4 @ *K256++ 1423304636Sjkim add r11,r11,r2 @ h+=X[i] 1424304636Sjkim str r2,[sp,#8*4] 1425304636Sjkim eor r2,r9,r10 1426304636Sjkim add r11,r11,r0,ror#6 @ h+=Sigma1(e) 1427304636Sjkim and r2,r2,r8 1428304636Sjkim add r11,r11,r12 @ h+=K256[i] 1429304636Sjkim eor r2,r2,r10 @ Ch(e,f,g) 1430304636Sjkim eor r0,r4,r4,ror#11 1431304636Sjkim add r11,r11,r2 @ h+=Ch(e,f,g) 1432304636Sjkim#if 24==31 1433304636Sjkim and r12,r12,#0xff 1434304636Sjkim cmp r12,#0xf2 @ done? 1435304636Sjkim#endif 1436304636Sjkim#if 24<15 1437304636Sjkim# if __ARM_ARCH__>=7 1438304636Sjkim ldr r2,[r1],#4 @ prefetch 1439304636Sjkim# else 1440304636Sjkim ldrb r2,[r1,#3] 1441304636Sjkim# endif 1442304636Sjkim eor r12,r4,r5 @ a^b, b^c in next round 1443304636Sjkim#else 1444304636Sjkim ldr r2,[sp,#10*4] @ from future BODY_16_xx 1445304636Sjkim eor r12,r4,r5 @ a^b, b^c in next round 1446304636Sjkim ldr r1,[sp,#7*4] @ from future BODY_16_xx 1447304636Sjkim#endif 1448304636Sjkim eor r0,r0,r4,ror#20 @ Sigma0(a) 1449304636Sjkim and r3,r3,r12 @ (b^c)&=(a^b) 1450304636Sjkim add r7,r7,r11 @ d+=h 1451304636Sjkim eor r3,r3,r5 @ Maj(a,b,c) 1452304636Sjkim add r11,r11,r0,ror#2 @ h+=Sigma0(a) 1453304636Sjkim @ add r11,r11,r3 @ h+=Maj(a,b,c) 1454304636Sjkim @ ldr r2,[sp,#10*4] @ 25 1455304636Sjkim @ ldr r1,[sp,#7*4] 1456304636Sjkim mov r0,r2,ror#7 1457304636Sjkim add r11,r11,r3 @ h+=Maj(a,b,c) from the past 1458304636Sjkim mov r3,r1,ror#17 1459304636Sjkim eor r0,r0,r2,ror#18 1460304636Sjkim eor r3,r3,r1,ror#19 1461304636Sjkim eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1462304636Sjkim ldr r2,[sp,#9*4] 1463304636Sjkim eor r3,r3,r1,lsr#10 @ sigma1(X[i+14]) 1464304636Sjkim ldr r1,[sp,#2*4] 1465304636Sjkim 1466304636Sjkim add r3,r3,r0 1467304636Sjkim eor r0,r7,r7,ror#5 @ from BODY_00_15 1468304636Sjkim add r2,r2,r3 1469304636Sjkim eor r0,r0,r7,ror#19 @ Sigma1(e) 1470304636Sjkim add r2,r2,r1 @ X[i] 1471304636Sjkim ldr r3,[r14],#4 @ *K256++ 1472304636Sjkim add r10,r10,r2 @ h+=X[i] 1473304636Sjkim str r2,[sp,#9*4] 1474304636Sjkim eor r2,r8,r9 1475304636Sjkim add r10,r10,r0,ror#6 @ h+=Sigma1(e) 1476304636Sjkim and r2,r2,r7 1477304636Sjkim add r10,r10,r3 @ h+=K256[i] 1478304636Sjkim eor r2,r2,r9 @ Ch(e,f,g) 1479304636Sjkim eor r0,r11,r11,ror#11 1480304636Sjkim add r10,r10,r2 @ h+=Ch(e,f,g) 1481304636Sjkim#if 25==31 1482304636Sjkim and r3,r3,#0xff 1483304636Sjkim cmp r3,#0xf2 @ done? 1484304636Sjkim#endif 1485304636Sjkim#if 25<15 1486304636Sjkim# if __ARM_ARCH__>=7 1487304636Sjkim ldr r2,[r1],#4 @ prefetch 1488304636Sjkim# else 1489304636Sjkim ldrb r2,[r1,#3] 1490304636Sjkim# endif 1491304636Sjkim eor r3,r11,r4 @ a^b, b^c in next round 1492304636Sjkim#else 1493304636Sjkim ldr r2,[sp,#11*4] @ from future BODY_16_xx 1494304636Sjkim eor r3,r11,r4 @ a^b, b^c in next round 1495304636Sjkim ldr r1,[sp,#8*4] @ from future BODY_16_xx 1496304636Sjkim#endif 1497304636Sjkim eor r0,r0,r11,ror#20 @ Sigma0(a) 1498304636Sjkim and r12,r12,r3 @ (b^c)&=(a^b) 1499304636Sjkim add r6,r6,r10 @ d+=h 1500304636Sjkim eor r12,r12,r4 @ Maj(a,b,c) 1501304636Sjkim add r10,r10,r0,ror#2 @ h+=Sigma0(a) 1502304636Sjkim @ add r10,r10,r12 @ h+=Maj(a,b,c) 1503304636Sjkim @ ldr r2,[sp,#11*4] @ 26 1504304636Sjkim @ ldr r1,[sp,#8*4] 1505304636Sjkim mov r0,r2,ror#7 1506304636Sjkim add r10,r10,r12 @ h+=Maj(a,b,c) from the past 1507304636Sjkim mov r12,r1,ror#17 1508304636Sjkim eor r0,r0,r2,ror#18 1509304636Sjkim eor r12,r12,r1,ror#19 1510304636Sjkim eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1511304636Sjkim ldr r2,[sp,#10*4] 1512304636Sjkim eor r12,r12,r1,lsr#10 @ sigma1(X[i+14]) 1513304636Sjkim ldr r1,[sp,#3*4] 1514304636Sjkim 1515304636Sjkim add r12,r12,r0 1516304636Sjkim eor r0,r6,r6,ror#5 @ from BODY_00_15 1517304636Sjkim add r2,r2,r12 1518304636Sjkim eor r0,r0,r6,ror#19 @ Sigma1(e) 1519304636Sjkim add r2,r2,r1 @ X[i] 1520304636Sjkim ldr r12,[r14],#4 @ *K256++ 1521304636Sjkim add r9,r9,r2 @ h+=X[i] 1522304636Sjkim str r2,[sp,#10*4] 1523304636Sjkim eor r2,r7,r8 1524304636Sjkim add r9,r9,r0,ror#6 @ h+=Sigma1(e) 1525304636Sjkim and r2,r2,r6 1526304636Sjkim add r9,r9,r12 @ h+=K256[i] 1527304636Sjkim eor r2,r2,r8 @ Ch(e,f,g) 1528304636Sjkim eor r0,r10,r10,ror#11 1529304636Sjkim add r9,r9,r2 @ h+=Ch(e,f,g) 1530304636Sjkim#if 26==31 1531304636Sjkim and r12,r12,#0xff 1532304636Sjkim cmp r12,#0xf2 @ done? 1533304636Sjkim#endif 1534304636Sjkim#if 26<15 1535304636Sjkim# if __ARM_ARCH__>=7 1536304636Sjkim ldr r2,[r1],#4 @ prefetch 1537304636Sjkim# else 1538304636Sjkim ldrb r2,[r1,#3] 1539304636Sjkim# endif 1540304636Sjkim eor r12,r10,r11 @ a^b, b^c in next round 1541304636Sjkim#else 1542304636Sjkim ldr r2,[sp,#12*4] @ from future BODY_16_xx 1543304636Sjkim eor r12,r10,r11 @ a^b, b^c in next round 1544304636Sjkim ldr r1,[sp,#9*4] @ from future BODY_16_xx 1545304636Sjkim#endif 1546304636Sjkim eor r0,r0,r10,ror#20 @ Sigma0(a) 1547304636Sjkim and r3,r3,r12 @ (b^c)&=(a^b) 1548304636Sjkim add r5,r5,r9 @ d+=h 1549304636Sjkim eor r3,r3,r11 @ Maj(a,b,c) 1550304636Sjkim add r9,r9,r0,ror#2 @ h+=Sigma0(a) 1551304636Sjkim @ add r9,r9,r3 @ h+=Maj(a,b,c) 1552304636Sjkim @ ldr r2,[sp,#12*4] @ 27 1553304636Sjkim @ ldr r1,[sp,#9*4] 1554304636Sjkim mov r0,r2,ror#7 1555304636Sjkim add r9,r9,r3 @ h+=Maj(a,b,c) from the past 1556304636Sjkim mov r3,r1,ror#17 1557304636Sjkim eor r0,r0,r2,ror#18 1558304636Sjkim eor r3,r3,r1,ror#19 1559304636Sjkim eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1560304636Sjkim ldr r2,[sp,#11*4] 1561304636Sjkim eor r3,r3,r1,lsr#10 @ sigma1(X[i+14]) 1562304636Sjkim ldr r1,[sp,#4*4] 1563304636Sjkim 1564304636Sjkim add r3,r3,r0 1565304636Sjkim eor r0,r5,r5,ror#5 @ from BODY_00_15 1566304636Sjkim add r2,r2,r3 1567304636Sjkim eor r0,r0,r5,ror#19 @ Sigma1(e) 1568304636Sjkim add r2,r2,r1 @ X[i] 1569304636Sjkim ldr r3,[r14],#4 @ *K256++ 1570304636Sjkim add r8,r8,r2 @ h+=X[i] 1571304636Sjkim str r2,[sp,#11*4] 1572304636Sjkim eor r2,r6,r7 1573304636Sjkim add r8,r8,r0,ror#6 @ h+=Sigma1(e) 1574304636Sjkim and r2,r2,r5 1575304636Sjkim add r8,r8,r3 @ h+=K256[i] 1576304636Sjkim eor r2,r2,r7 @ Ch(e,f,g) 1577304636Sjkim eor r0,r9,r9,ror#11 1578304636Sjkim add r8,r8,r2 @ h+=Ch(e,f,g) 1579304636Sjkim#if 27==31 1580304636Sjkim and r3,r3,#0xff 1581304636Sjkim cmp r3,#0xf2 @ done? 1582304636Sjkim#endif 1583304636Sjkim#if 27<15 1584304636Sjkim# if __ARM_ARCH__>=7 1585304636Sjkim ldr r2,[r1],#4 @ prefetch 1586304636Sjkim# else 1587304636Sjkim ldrb r2,[r1,#3] 1588304636Sjkim# endif 1589304636Sjkim eor r3,r9,r10 @ a^b, b^c in next round 1590304636Sjkim#else 1591304636Sjkim ldr r2,[sp,#13*4] @ from future BODY_16_xx 1592304636Sjkim eor r3,r9,r10 @ a^b, b^c in next round 1593304636Sjkim ldr r1,[sp,#10*4] @ from future BODY_16_xx 1594304636Sjkim#endif 1595304636Sjkim eor r0,r0,r9,ror#20 @ Sigma0(a) 1596304636Sjkim and r12,r12,r3 @ (b^c)&=(a^b) 1597304636Sjkim add r4,r4,r8 @ d+=h 1598304636Sjkim eor r12,r12,r10 @ Maj(a,b,c) 1599304636Sjkim add r8,r8,r0,ror#2 @ h+=Sigma0(a) 1600304636Sjkim @ add r8,r8,r12 @ h+=Maj(a,b,c) 1601304636Sjkim @ ldr r2,[sp,#13*4] @ 28 1602304636Sjkim @ ldr r1,[sp,#10*4] 1603304636Sjkim mov r0,r2,ror#7 1604304636Sjkim add r8,r8,r12 @ h+=Maj(a,b,c) from the past 1605304636Sjkim mov r12,r1,ror#17 1606304636Sjkim eor r0,r0,r2,ror#18 1607304636Sjkim eor r12,r12,r1,ror#19 1608304636Sjkim eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1609304636Sjkim ldr r2,[sp,#12*4] 1610304636Sjkim eor r12,r12,r1,lsr#10 @ sigma1(X[i+14]) 1611304636Sjkim ldr r1,[sp,#5*4] 1612304636Sjkim 1613304636Sjkim add r12,r12,r0 1614304636Sjkim eor r0,r4,r4,ror#5 @ from BODY_00_15 1615304636Sjkim add r2,r2,r12 1616304636Sjkim eor r0,r0,r4,ror#19 @ Sigma1(e) 1617304636Sjkim add r2,r2,r1 @ X[i] 1618304636Sjkim ldr r12,[r14],#4 @ *K256++ 1619304636Sjkim add r7,r7,r2 @ h+=X[i] 1620304636Sjkim str r2,[sp,#12*4] 1621304636Sjkim eor r2,r5,r6 1622304636Sjkim add r7,r7,r0,ror#6 @ h+=Sigma1(e) 1623304636Sjkim and r2,r2,r4 1624304636Sjkim add r7,r7,r12 @ h+=K256[i] 1625304636Sjkim eor r2,r2,r6 @ Ch(e,f,g) 1626304636Sjkim eor r0,r8,r8,ror#11 1627304636Sjkim add r7,r7,r2 @ h+=Ch(e,f,g) 1628304636Sjkim#if 28==31 1629304636Sjkim and r12,r12,#0xff 1630304636Sjkim cmp r12,#0xf2 @ done? 1631304636Sjkim#endif 1632304636Sjkim#if 28<15 1633304636Sjkim# if __ARM_ARCH__>=7 1634304636Sjkim ldr r2,[r1],#4 @ prefetch 1635304636Sjkim# else 1636304636Sjkim ldrb r2,[r1,#3] 1637304636Sjkim# endif 1638304636Sjkim eor r12,r8,r9 @ a^b, b^c in next round 1639304636Sjkim#else 1640304636Sjkim ldr r2,[sp,#14*4] @ from future BODY_16_xx 1641304636Sjkim eor r12,r8,r9 @ a^b, b^c in next round 1642304636Sjkim ldr r1,[sp,#11*4] @ from future BODY_16_xx 1643304636Sjkim#endif 1644304636Sjkim eor r0,r0,r8,ror#20 @ Sigma0(a) 1645304636Sjkim and r3,r3,r12 @ (b^c)&=(a^b) 1646304636Sjkim add r11,r11,r7 @ d+=h 1647304636Sjkim eor r3,r3,r9 @ Maj(a,b,c) 1648304636Sjkim add r7,r7,r0,ror#2 @ h+=Sigma0(a) 1649304636Sjkim @ add r7,r7,r3 @ h+=Maj(a,b,c) 1650304636Sjkim @ ldr r2,[sp,#14*4] @ 29 1651304636Sjkim @ ldr r1,[sp,#11*4] 1652304636Sjkim mov r0,r2,ror#7 1653304636Sjkim add r7,r7,r3 @ h+=Maj(a,b,c) from the past 1654304636Sjkim mov r3,r1,ror#17 1655304636Sjkim eor r0,r0,r2,ror#18 1656304636Sjkim eor r3,r3,r1,ror#19 1657304636Sjkim eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1658304636Sjkim ldr r2,[sp,#13*4] 1659304636Sjkim eor r3,r3,r1,lsr#10 @ sigma1(X[i+14]) 1660304636Sjkim ldr r1,[sp,#6*4] 1661304636Sjkim 1662304636Sjkim add r3,r3,r0 1663304636Sjkim eor r0,r11,r11,ror#5 @ from BODY_00_15 1664304636Sjkim add r2,r2,r3 1665304636Sjkim eor r0,r0,r11,ror#19 @ Sigma1(e) 1666304636Sjkim add r2,r2,r1 @ X[i] 1667304636Sjkim ldr r3,[r14],#4 @ *K256++ 1668304636Sjkim add r6,r6,r2 @ h+=X[i] 1669304636Sjkim str r2,[sp,#13*4] 1670304636Sjkim eor r2,r4,r5 1671304636Sjkim add r6,r6,r0,ror#6 @ h+=Sigma1(e) 1672304636Sjkim and r2,r2,r11 1673304636Sjkim add r6,r6,r3 @ h+=K256[i] 1674304636Sjkim eor r2,r2,r5 @ Ch(e,f,g) 1675304636Sjkim eor r0,r7,r7,ror#11 1676304636Sjkim add r6,r6,r2 @ h+=Ch(e,f,g) 1677304636Sjkim#if 29==31 1678304636Sjkim and r3,r3,#0xff 1679304636Sjkim cmp r3,#0xf2 @ done? 1680304636Sjkim#endif 1681304636Sjkim#if 29<15 1682304636Sjkim# if __ARM_ARCH__>=7 1683304636Sjkim ldr r2,[r1],#4 @ prefetch 1684304636Sjkim# else 1685304636Sjkim ldrb r2,[r1,#3] 1686304636Sjkim# endif 1687304636Sjkim eor r3,r7,r8 @ a^b, b^c in next round 1688304636Sjkim#else 1689304636Sjkim ldr r2,[sp,#15*4] @ from future BODY_16_xx 1690304636Sjkim eor r3,r7,r8 @ a^b, b^c in next round 1691304636Sjkim ldr r1,[sp,#12*4] @ from future BODY_16_xx 1692304636Sjkim#endif 1693304636Sjkim eor r0,r0,r7,ror#20 @ Sigma0(a) 1694304636Sjkim and r12,r12,r3 @ (b^c)&=(a^b) 1695304636Sjkim add r10,r10,r6 @ d+=h 1696304636Sjkim eor r12,r12,r8 @ Maj(a,b,c) 1697304636Sjkim add r6,r6,r0,ror#2 @ h+=Sigma0(a) 1698304636Sjkim @ add r6,r6,r12 @ h+=Maj(a,b,c) 1699304636Sjkim @ ldr r2,[sp,#15*4] @ 30 1700304636Sjkim @ ldr r1,[sp,#12*4] 1701304636Sjkim mov r0,r2,ror#7 1702304636Sjkim add r6,r6,r12 @ h+=Maj(a,b,c) from the past 1703304636Sjkim mov r12,r1,ror#17 1704304636Sjkim eor r0,r0,r2,ror#18 1705304636Sjkim eor r12,r12,r1,ror#19 1706304636Sjkim eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1707304636Sjkim ldr r2,[sp,#14*4] 1708304636Sjkim eor r12,r12,r1,lsr#10 @ sigma1(X[i+14]) 1709304636Sjkim ldr r1,[sp,#7*4] 1710304636Sjkim 1711304636Sjkim add r12,r12,r0 1712304636Sjkim eor r0,r10,r10,ror#5 @ from BODY_00_15 1713304636Sjkim add r2,r2,r12 1714304636Sjkim eor r0,r0,r10,ror#19 @ Sigma1(e) 1715304636Sjkim add r2,r2,r1 @ X[i] 1716304636Sjkim ldr r12,[r14],#4 @ *K256++ 1717304636Sjkim add r5,r5,r2 @ h+=X[i] 1718304636Sjkim str r2,[sp,#14*4] 1719304636Sjkim eor r2,r11,r4 1720304636Sjkim add r5,r5,r0,ror#6 @ h+=Sigma1(e) 1721304636Sjkim and r2,r2,r10 1722304636Sjkim add r5,r5,r12 @ h+=K256[i] 1723304636Sjkim eor r2,r2,r4 @ Ch(e,f,g) 1724304636Sjkim eor r0,r6,r6,ror#11 1725304636Sjkim add r5,r5,r2 @ h+=Ch(e,f,g) 1726304636Sjkim#if 30==31 1727304636Sjkim and r12,r12,#0xff 1728304636Sjkim cmp r12,#0xf2 @ done? 1729304636Sjkim#endif 1730304636Sjkim#if 30<15 1731304636Sjkim# if __ARM_ARCH__>=7 1732304636Sjkim ldr r2,[r1],#4 @ prefetch 1733304636Sjkim# else 1734304636Sjkim ldrb r2,[r1,#3] 1735304636Sjkim# endif 1736304636Sjkim eor r12,r6,r7 @ a^b, b^c in next round 1737304636Sjkim#else 1738304636Sjkim ldr r2,[sp,#0*4] @ from future BODY_16_xx 1739304636Sjkim eor r12,r6,r7 @ a^b, b^c in next round 1740304636Sjkim ldr r1,[sp,#13*4] @ from future BODY_16_xx 1741304636Sjkim#endif 1742304636Sjkim eor r0,r0,r6,ror#20 @ Sigma0(a) 1743304636Sjkim and r3,r3,r12 @ (b^c)&=(a^b) 1744304636Sjkim add r9,r9,r5 @ d+=h 1745304636Sjkim eor r3,r3,r7 @ Maj(a,b,c) 1746304636Sjkim add r5,r5,r0,ror#2 @ h+=Sigma0(a) 1747304636Sjkim @ add r5,r5,r3 @ h+=Maj(a,b,c) 1748304636Sjkim @ ldr r2,[sp,#0*4] @ 31 1749304636Sjkim @ ldr r1,[sp,#13*4] 1750304636Sjkim mov r0,r2,ror#7 1751304636Sjkim add r5,r5,r3 @ h+=Maj(a,b,c) from the past 1752304636Sjkim mov r3,r1,ror#17 1753304636Sjkim eor r0,r0,r2,ror#18 1754304636Sjkim eor r3,r3,r1,ror#19 1755304636Sjkim eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1756304636Sjkim ldr r2,[sp,#15*4] 1757304636Sjkim eor r3,r3,r1,lsr#10 @ sigma1(X[i+14]) 1758304636Sjkim ldr r1,[sp,#8*4] 1759304636Sjkim 1760304636Sjkim add r3,r3,r0 1761304636Sjkim eor r0,r9,r9,ror#5 @ from BODY_00_15 1762304636Sjkim add r2,r2,r3 1763304636Sjkim eor r0,r0,r9,ror#19 @ Sigma1(e) 1764304636Sjkim add r2,r2,r1 @ X[i] 1765304636Sjkim ldr r3,[r14],#4 @ *K256++ 1766304636Sjkim add r4,r4,r2 @ h+=X[i] 1767304636Sjkim str r2,[sp,#15*4] 1768304636Sjkim eor r2,r10,r11 1769304636Sjkim add r4,r4,r0,ror#6 @ h+=Sigma1(e) 1770304636Sjkim and r2,r2,r9 1771304636Sjkim add r4,r4,r3 @ h+=K256[i] 1772304636Sjkim eor r2,r2,r11 @ Ch(e,f,g) 1773304636Sjkim eor r0,r5,r5,ror#11 1774304636Sjkim add r4,r4,r2 @ h+=Ch(e,f,g) 1775304636Sjkim#if 31==31 1776304636Sjkim and r3,r3,#0xff 1777304636Sjkim cmp r3,#0xf2 @ done? 1778304636Sjkim#endif 1779304636Sjkim#if 31<15 1780304636Sjkim# if __ARM_ARCH__>=7 1781304636Sjkim ldr r2,[r1],#4 @ prefetch 1782304636Sjkim# else 1783304636Sjkim ldrb r2,[r1,#3] 1784304636Sjkim# endif 1785304636Sjkim eor r3,r5,r6 @ a^b, b^c in next round 1786304636Sjkim#else 1787304636Sjkim ldr r2,[sp,#1*4] @ from future BODY_16_xx 1788304636Sjkim eor r3,r5,r6 @ a^b, b^c in next round 1789304636Sjkim ldr r1,[sp,#14*4] @ from future BODY_16_xx 1790304636Sjkim#endif 1791304636Sjkim eor r0,r0,r5,ror#20 @ Sigma0(a) 1792304636Sjkim and r12,r12,r3 @ (b^c)&=(a^b) 1793304636Sjkim add r8,r8,r4 @ d+=h 1794304636Sjkim eor r12,r12,r6 @ Maj(a,b,c) 1795304636Sjkim add r4,r4,r0,ror#2 @ h+=Sigma0(a) 1796304636Sjkim @ add r4,r4,r12 @ h+=Maj(a,b,c) 1797304636Sjkim#if __ARM_ARCH__>=7 1798304636Sjkim ite eq @ Thumb2 thing, sanity check in ARM 1799304636Sjkim#endif 1800304636Sjkim ldreq r3,[sp,#16*4] @ pull ctx 1801304636Sjkim bne .Lrounds_16_xx 1802304636Sjkim 1803304636Sjkim add r4,r4,r12 @ h+=Maj(a,b,c) from the past 1804304636Sjkim ldr r0,[r3,#0] 1805304636Sjkim ldr r2,[r3,#4] 1806304636Sjkim ldr r12,[r3,#8] 1807304636Sjkim add r4,r4,r0 1808304636Sjkim ldr r0,[r3,#12] 1809304636Sjkim add r5,r5,r2 1810304636Sjkim ldr r2,[r3,#16] 1811304636Sjkim add r6,r6,r12 1812304636Sjkim ldr r12,[r3,#20] 1813304636Sjkim add r7,r7,r0 1814304636Sjkim ldr r0,[r3,#24] 1815304636Sjkim add r8,r8,r2 1816304636Sjkim ldr r2,[r3,#28] 1817304636Sjkim add r9,r9,r12 1818304636Sjkim ldr r1,[sp,#17*4] @ pull inp 1819304636Sjkim ldr r12,[sp,#18*4] @ pull inp+len 1820304636Sjkim add r10,r10,r0 1821304636Sjkim add r11,r11,r2 1822304636Sjkim stmia r3,{r4,r5,r6,r7,r8,r9,r10,r11} 1823304636Sjkim cmp r1,r12 1824304636Sjkim sub r14,r14,#256 @ rewind Ktbl 1825304636Sjkim bne .Loop 1826304636Sjkim 1827304636Sjkim add sp,sp,#19*4 @ destroy frame 1828304636Sjkim#if __ARM_ARCH__>=5 1829304636Sjkim ldmia sp!,{r4-r11,pc} 1830304636Sjkim#else 1831304636Sjkim ldmia sp!,{r4-r11,lr} 1832304636Sjkim tst lr,#1 1833304636Sjkim moveq pc,lr @ be binary compatible with V4, yet 1834304636Sjkim .word 0xe12fff1e @ interoperable with Thumb ISA:-) 1835304636Sjkim#endif 1836304636Sjkim.size sha256_block_data_order,.-sha256_block_data_order 1837304636Sjkim#if __ARM_MAX_ARCH__>=7 1838304636Sjkim.arch armv7-a 1839304636Sjkim.fpu neon 1840304636Sjkim 1841304636Sjkim.global sha256_block_data_order_neon 1842304636Sjkim.type sha256_block_data_order_neon,%function 1843304636Sjkim.align 4 1844304636Sjkimsha256_block_data_order_neon: 1845304636Sjkim.LNEON: 1846304636Sjkim stmdb sp!,{r4-r12,lr} 1847304636Sjkim 1848304636Sjkim sub r11,sp,#16*4+16 1849304636Sjkim adr r14,K256 1850304636Sjkim bic r11,r11,#15 @ align for 128-bit stores 1851304636Sjkim mov r12,sp 1852304636Sjkim mov sp,r11 @ alloca 1853304636Sjkim add r2,r1,r2,lsl#6 @ len to point at the end of inp 1854304636Sjkim 1855304636Sjkim vld1.8 {q0},[r1]! 1856304636Sjkim vld1.8 {q1},[r1]! 1857304636Sjkim vld1.8 {q2},[r1]! 1858304636Sjkim vld1.8 {q3},[r1]! 1859304636Sjkim vld1.32 {q8},[r14,:128]! 1860304636Sjkim vld1.32 {q9},[r14,:128]! 1861304636Sjkim vld1.32 {q10},[r14,:128]! 1862304636Sjkim vld1.32 {q11},[r14,:128]! 1863304636Sjkim vrev32.8 q0,q0 @ yes, even on 1864304636Sjkim str r0,[sp,#64] 1865304636Sjkim vrev32.8 q1,q1 @ big-endian 1866304636Sjkim str r1,[sp,#68] 1867304636Sjkim mov r1,sp 1868304636Sjkim vrev32.8 q2,q2 1869304636Sjkim str r2,[sp,#72] 1870304636Sjkim vrev32.8 q3,q3 1871304636Sjkim str r12,[sp,#76] @ save original sp 1872304636Sjkim vadd.i32 q8,q8,q0 1873304636Sjkim vadd.i32 q9,q9,q1 1874304636Sjkim vst1.32 {q8},[r1,:128]! 1875304636Sjkim vadd.i32 q10,q10,q2 1876304636Sjkim vst1.32 {q9},[r1,:128]! 1877304636Sjkim vadd.i32 q11,q11,q3 1878304636Sjkim vst1.32 {q10},[r1,:128]! 1879304636Sjkim vst1.32 {q11},[r1,:128]! 1880304636Sjkim 1881304636Sjkim ldmia r0,{r4-r11} 1882304636Sjkim sub r1,r1,#64 1883304636Sjkim ldr r2,[sp,#0] 1884304636Sjkim eor r12,r12,r12 1885304636Sjkim eor r3,r5,r6 1886304636Sjkim b .L_00_48 1887304636Sjkim 1888304636Sjkim.align 4 1889304636Sjkim.L_00_48: 1890304636Sjkim vext.8 q8,q0,q1,#4 1891304636Sjkim add r11,r11,r2 1892304636Sjkim eor r2,r9,r10 1893304636Sjkim eor r0,r8,r8,ror#5 1894304636Sjkim vext.8 q9,q2,q3,#4 1895304636Sjkim add r4,r4,r12 1896304636Sjkim and r2,r2,r8 1897304636Sjkim eor r12,r0,r8,ror#19 1898304636Sjkim vshr.u32 q10,q8,#7 1899304636Sjkim eor r0,r4,r4,ror#11 1900304636Sjkim eor r2,r2,r10 1901304636Sjkim vadd.i32 q0,q0,q9 1902304636Sjkim add r11,r11,r12,ror#6 1903304636Sjkim eor r12,r4,r5 1904304636Sjkim vshr.u32 q9,q8,#3 1905304636Sjkim eor r0,r0,r4,ror#20 1906304636Sjkim add r11,r11,r2 1907304636Sjkim vsli.32 q10,q8,#25 1908304636Sjkim ldr r2,[sp,#4] 1909304636Sjkim and r3,r3,r12 1910304636Sjkim vshr.u32 q11,q8,#18 1911304636Sjkim add r7,r7,r11 1912304636Sjkim add r11,r11,r0,ror#2 1913304636Sjkim eor r3,r3,r5 1914304636Sjkim veor q9,q9,q10 1915304636Sjkim add r10,r10,r2 1916304636Sjkim vsli.32 q11,q8,#14 1917304636Sjkim eor r2,r8,r9 1918304636Sjkim eor r0,r7,r7,ror#5 1919304636Sjkim vshr.u32 d24,d7,#17 1920304636Sjkim add r11,r11,r3 1921304636Sjkim and r2,r2,r7 1922304636Sjkim veor q9,q9,q11 1923304636Sjkim eor r3,r0,r7,ror#19 1924304636Sjkim eor r0,r11,r11,ror#11 1925304636Sjkim vsli.32 d24,d7,#15 1926304636Sjkim eor r2,r2,r9 1927304636Sjkim add r10,r10,r3,ror#6 1928304636Sjkim vshr.u32 d25,d7,#10 1929304636Sjkim eor r3,r11,r4 1930304636Sjkim eor r0,r0,r11,ror#20 1931304636Sjkim vadd.i32 q0,q0,q9 1932304636Sjkim add r10,r10,r2 1933304636Sjkim ldr r2,[sp,#8] 1934304636Sjkim veor d25,d25,d24 1935304636Sjkim and r12,r12,r3 1936304636Sjkim add r6,r6,r10 1937304636Sjkim vshr.u32 d24,d7,#19 1938304636Sjkim add r10,r10,r0,ror#2 1939304636Sjkim eor r12,r12,r4 1940304636Sjkim vsli.32 d24,d7,#13 1941304636Sjkim add r9,r9,r2 1942304636Sjkim eor r2,r7,r8 1943304636Sjkim veor d25,d25,d24 1944304636Sjkim eor r0,r6,r6,ror#5 1945304636Sjkim add r10,r10,r12 1946304636Sjkim vadd.i32 d0,d0,d25 1947304636Sjkim and r2,r2,r6 1948304636Sjkim eor r12,r0,r6,ror#19 1949304636Sjkim vshr.u32 d24,d0,#17 1950304636Sjkim eor r0,r10,r10,ror#11 1951304636Sjkim eor r2,r2,r8 1952304636Sjkim vsli.32 d24,d0,#15 1953304636Sjkim add r9,r9,r12,ror#6 1954304636Sjkim eor r12,r10,r11 1955304636Sjkim vshr.u32 d25,d0,#10 1956304636Sjkim eor r0,r0,r10,ror#20 1957304636Sjkim add r9,r9,r2 1958304636Sjkim veor d25,d25,d24 1959304636Sjkim ldr r2,[sp,#12] 1960304636Sjkim and r3,r3,r12 1961304636Sjkim vshr.u32 d24,d0,#19 1962304636Sjkim add r5,r5,r9 1963304636Sjkim add r9,r9,r0,ror#2 1964304636Sjkim eor r3,r3,r11 1965304636Sjkim vld1.32 {q8},[r14,:128]! 1966304636Sjkim add r8,r8,r2 1967304636Sjkim vsli.32 d24,d0,#13 1968304636Sjkim eor r2,r6,r7 1969304636Sjkim eor r0,r5,r5,ror#5 1970304636Sjkim veor d25,d25,d24 1971304636Sjkim add r9,r9,r3 1972304636Sjkim and r2,r2,r5 1973304636Sjkim vadd.i32 d1,d1,d25 1974304636Sjkim eor r3,r0,r5,ror#19 1975304636Sjkim eor r0,r9,r9,ror#11 1976304636Sjkim vadd.i32 q8,q8,q0 1977304636Sjkim eor r2,r2,r7 1978304636Sjkim add r8,r8,r3,ror#6 1979304636Sjkim eor r3,r9,r10 1980304636Sjkim eor r0,r0,r9,ror#20 1981304636Sjkim add r8,r8,r2 1982304636Sjkim ldr r2,[sp,#16] 1983304636Sjkim and r12,r12,r3 1984304636Sjkim add r4,r4,r8 1985304636Sjkim vst1.32 {q8},[r1,:128]! 1986304636Sjkim add r8,r8,r0,ror#2 1987304636Sjkim eor r12,r12,r10 1988304636Sjkim vext.8 q8,q1,q2,#4 1989304636Sjkim add r7,r7,r2 1990304636Sjkim eor r2,r5,r6 1991304636Sjkim eor r0,r4,r4,ror#5 1992304636Sjkim vext.8 q9,q3,q0,#4 1993304636Sjkim add r8,r8,r12 1994304636Sjkim and r2,r2,r4 1995304636Sjkim eor r12,r0,r4,ror#19 1996304636Sjkim vshr.u32 q10,q8,#7 1997304636Sjkim eor r0,r8,r8,ror#11 1998304636Sjkim eor r2,r2,r6 1999304636Sjkim vadd.i32 q1,q1,q9 2000304636Sjkim add r7,r7,r12,ror#6 2001304636Sjkim eor r12,r8,r9 2002304636Sjkim vshr.u32 q9,q8,#3 2003304636Sjkim eor r0,r0,r8,ror#20 2004304636Sjkim add r7,r7,r2 2005304636Sjkim vsli.32 q10,q8,#25 2006304636Sjkim ldr r2,[sp,#20] 2007304636Sjkim and r3,r3,r12 2008304636Sjkim vshr.u32 q11,q8,#18 2009304636Sjkim add r11,r11,r7 2010304636Sjkim add r7,r7,r0,ror#2 2011304636Sjkim eor r3,r3,r9 2012304636Sjkim veor q9,q9,q10 2013304636Sjkim add r6,r6,r2 2014304636Sjkim vsli.32 q11,q8,#14 2015304636Sjkim eor r2,r4,r5 2016304636Sjkim eor r0,r11,r11,ror#5 2017304636Sjkim vshr.u32 d24,d1,#17 2018304636Sjkim add r7,r7,r3 2019304636Sjkim and r2,r2,r11 2020304636Sjkim veor q9,q9,q11 2021304636Sjkim eor r3,r0,r11,ror#19 2022304636Sjkim eor r0,r7,r7,ror#11 2023304636Sjkim vsli.32 d24,d1,#15 2024304636Sjkim eor r2,r2,r5 2025304636Sjkim add r6,r6,r3,ror#6 2026304636Sjkim vshr.u32 d25,d1,#10 2027304636Sjkim eor r3,r7,r8 2028304636Sjkim eor r0,r0,r7,ror#20 2029304636Sjkim vadd.i32 q1,q1,q9 2030304636Sjkim add r6,r6,r2 2031304636Sjkim ldr r2,[sp,#24] 2032304636Sjkim veor d25,d25,d24 2033304636Sjkim and r12,r12,r3 2034304636Sjkim add r10,r10,r6 2035304636Sjkim vshr.u32 d24,d1,#19 2036304636Sjkim add r6,r6,r0,ror#2 2037304636Sjkim eor r12,r12,r8 2038304636Sjkim vsli.32 d24,d1,#13 2039304636Sjkim add r5,r5,r2 2040304636Sjkim eor r2,r11,r4 2041304636Sjkim veor d25,d25,d24 2042304636Sjkim eor r0,r10,r10,ror#5 2043304636Sjkim add r6,r6,r12 2044304636Sjkim vadd.i32 d2,d2,d25 2045304636Sjkim and r2,r2,r10 2046304636Sjkim eor r12,r0,r10,ror#19 2047304636Sjkim vshr.u32 d24,d2,#17 2048304636Sjkim eor r0,r6,r6,ror#11 2049304636Sjkim eor r2,r2,r4 2050304636Sjkim vsli.32 d24,d2,#15 2051304636Sjkim add r5,r5,r12,ror#6 2052304636Sjkim eor r12,r6,r7 2053304636Sjkim vshr.u32 d25,d2,#10 2054304636Sjkim eor r0,r0,r6,ror#20 2055304636Sjkim add r5,r5,r2 2056304636Sjkim veor d25,d25,d24 2057304636Sjkim ldr r2,[sp,#28] 2058304636Sjkim and r3,r3,r12 2059304636Sjkim vshr.u32 d24,d2,#19 2060304636Sjkim add r9,r9,r5 2061304636Sjkim add r5,r5,r0,ror#2 2062304636Sjkim eor r3,r3,r7 2063304636Sjkim vld1.32 {q8},[r14,:128]! 2064304636Sjkim add r4,r4,r2 2065304636Sjkim vsli.32 d24,d2,#13 2066304636Sjkim eor r2,r10,r11 2067304636Sjkim eor r0,r9,r9,ror#5 2068304636Sjkim veor d25,d25,d24 2069304636Sjkim add r5,r5,r3 2070304636Sjkim and r2,r2,r9 2071304636Sjkim vadd.i32 d3,d3,d25 2072304636Sjkim eor r3,r0,r9,ror#19 2073304636Sjkim eor r0,r5,r5,ror#11 2074304636Sjkim vadd.i32 q8,q8,q1 2075304636Sjkim eor r2,r2,r11 2076304636Sjkim add r4,r4,r3,ror#6 2077304636Sjkim eor r3,r5,r6 2078304636Sjkim eor r0,r0,r5,ror#20 2079304636Sjkim add r4,r4,r2 2080304636Sjkim ldr r2,[sp,#32] 2081304636Sjkim and r12,r12,r3 2082304636Sjkim add r8,r8,r4 2083304636Sjkim vst1.32 {q8},[r1,:128]! 2084304636Sjkim add r4,r4,r0,ror#2 2085304636Sjkim eor r12,r12,r6 2086304636Sjkim vext.8 q8,q2,q3,#4 2087304636Sjkim add r11,r11,r2 2088304636Sjkim eor r2,r9,r10 2089304636Sjkim eor r0,r8,r8,ror#5 2090304636Sjkim vext.8 q9,q0,q1,#4 2091304636Sjkim add r4,r4,r12 2092304636Sjkim and r2,r2,r8 2093304636Sjkim eor r12,r0,r8,ror#19 2094304636Sjkim vshr.u32 q10,q8,#7 2095304636Sjkim eor r0,r4,r4,ror#11 2096304636Sjkim eor r2,r2,r10 2097304636Sjkim vadd.i32 q2,q2,q9 2098304636Sjkim add r11,r11,r12,ror#6 2099304636Sjkim eor r12,r4,r5 2100304636Sjkim vshr.u32 q9,q8,#3 2101304636Sjkim eor r0,r0,r4,ror#20 2102304636Sjkim add r11,r11,r2 2103304636Sjkim vsli.32 q10,q8,#25 2104304636Sjkim ldr r2,[sp,#36] 2105304636Sjkim and r3,r3,r12 2106304636Sjkim vshr.u32 q11,q8,#18 2107304636Sjkim add r7,r7,r11 2108304636Sjkim add r11,r11,r0,ror#2 2109304636Sjkim eor r3,r3,r5 2110304636Sjkim veor q9,q9,q10 2111304636Sjkim add r10,r10,r2 2112304636Sjkim vsli.32 q11,q8,#14 2113304636Sjkim eor r2,r8,r9 2114304636Sjkim eor r0,r7,r7,ror#5 2115304636Sjkim vshr.u32 d24,d3,#17 2116304636Sjkim add r11,r11,r3 2117304636Sjkim and r2,r2,r7 2118304636Sjkim veor q9,q9,q11 2119304636Sjkim eor r3,r0,r7,ror#19 2120304636Sjkim eor r0,r11,r11,ror#11 2121304636Sjkim vsli.32 d24,d3,#15 2122304636Sjkim eor r2,r2,r9 2123304636Sjkim add r10,r10,r3,ror#6 2124304636Sjkim vshr.u32 d25,d3,#10 2125304636Sjkim eor r3,r11,r4 2126304636Sjkim eor r0,r0,r11,ror#20 2127304636Sjkim vadd.i32 q2,q2,q9 2128304636Sjkim add r10,r10,r2 2129304636Sjkim ldr r2,[sp,#40] 2130304636Sjkim veor d25,d25,d24 2131304636Sjkim and r12,r12,r3 2132304636Sjkim add r6,r6,r10 2133304636Sjkim vshr.u32 d24,d3,#19 2134304636Sjkim add r10,r10,r0,ror#2 2135304636Sjkim eor r12,r12,r4 2136304636Sjkim vsli.32 d24,d3,#13 2137304636Sjkim add r9,r9,r2 2138304636Sjkim eor r2,r7,r8 2139304636Sjkim veor d25,d25,d24 2140304636Sjkim eor r0,r6,r6,ror#5 2141304636Sjkim add r10,r10,r12 2142304636Sjkim vadd.i32 d4,d4,d25 2143304636Sjkim and r2,r2,r6 2144304636Sjkim eor r12,r0,r6,ror#19 2145304636Sjkim vshr.u32 d24,d4,#17 2146304636Sjkim eor r0,r10,r10,ror#11 2147304636Sjkim eor r2,r2,r8 2148304636Sjkim vsli.32 d24,d4,#15 2149304636Sjkim add r9,r9,r12,ror#6 2150304636Sjkim eor r12,r10,r11 2151304636Sjkim vshr.u32 d25,d4,#10 2152304636Sjkim eor r0,r0,r10,ror#20 2153304636Sjkim add r9,r9,r2 2154304636Sjkim veor d25,d25,d24 2155304636Sjkim ldr r2,[sp,#44] 2156304636Sjkim and r3,r3,r12 2157304636Sjkim vshr.u32 d24,d4,#19 2158304636Sjkim add r5,r5,r9 2159304636Sjkim add r9,r9,r0,ror#2 2160304636Sjkim eor r3,r3,r11 2161304636Sjkim vld1.32 {q8},[r14,:128]! 2162304636Sjkim add r8,r8,r2 2163304636Sjkim vsli.32 d24,d4,#13 2164304636Sjkim eor r2,r6,r7 2165304636Sjkim eor r0,r5,r5,ror#5 2166304636Sjkim veor d25,d25,d24 2167304636Sjkim add r9,r9,r3 2168304636Sjkim and r2,r2,r5 2169304636Sjkim vadd.i32 d5,d5,d25 2170304636Sjkim eor r3,r0,r5,ror#19 2171304636Sjkim eor r0,r9,r9,ror#11 2172304636Sjkim vadd.i32 q8,q8,q2 2173304636Sjkim eor r2,r2,r7 2174304636Sjkim add r8,r8,r3,ror#6 2175304636Sjkim eor r3,r9,r10 2176304636Sjkim eor r0,r0,r9,ror#20 2177304636Sjkim add r8,r8,r2 2178304636Sjkim ldr r2,[sp,#48] 2179304636Sjkim and r12,r12,r3 2180304636Sjkim add r4,r4,r8 2181304636Sjkim vst1.32 {q8},[r1,:128]! 2182304636Sjkim add r8,r8,r0,ror#2 2183304636Sjkim eor r12,r12,r10 2184304636Sjkim vext.8 q8,q3,q0,#4 2185304636Sjkim add r7,r7,r2 2186304636Sjkim eor r2,r5,r6 2187304636Sjkim eor r0,r4,r4,ror#5 2188304636Sjkim vext.8 q9,q1,q2,#4 2189304636Sjkim add r8,r8,r12 2190304636Sjkim and r2,r2,r4 2191304636Sjkim eor r12,r0,r4,ror#19 2192304636Sjkim vshr.u32 q10,q8,#7 2193304636Sjkim eor r0,r8,r8,ror#11 2194304636Sjkim eor r2,r2,r6 2195304636Sjkim vadd.i32 q3,q3,q9 2196304636Sjkim add r7,r7,r12,ror#6 2197304636Sjkim eor r12,r8,r9 2198304636Sjkim vshr.u32 q9,q8,#3 2199304636Sjkim eor r0,r0,r8,ror#20 2200304636Sjkim add r7,r7,r2 2201304636Sjkim vsli.32 q10,q8,#25 2202304636Sjkim ldr r2,[sp,#52] 2203304636Sjkim and r3,r3,r12 2204304636Sjkim vshr.u32 q11,q8,#18 2205304636Sjkim add r11,r11,r7 2206304636Sjkim add r7,r7,r0,ror#2 2207304636Sjkim eor r3,r3,r9 2208304636Sjkim veor q9,q9,q10 2209304636Sjkim add r6,r6,r2 2210304636Sjkim vsli.32 q11,q8,#14 2211304636Sjkim eor r2,r4,r5 2212304636Sjkim eor r0,r11,r11,ror#5 2213304636Sjkim vshr.u32 d24,d5,#17 2214304636Sjkim add r7,r7,r3 2215304636Sjkim and r2,r2,r11 2216304636Sjkim veor q9,q9,q11 2217304636Sjkim eor r3,r0,r11,ror#19 2218304636Sjkim eor r0,r7,r7,ror#11 2219304636Sjkim vsli.32 d24,d5,#15 2220304636Sjkim eor r2,r2,r5 2221304636Sjkim add r6,r6,r3,ror#6 2222304636Sjkim vshr.u32 d25,d5,#10 2223304636Sjkim eor r3,r7,r8 2224304636Sjkim eor r0,r0,r7,ror#20 2225304636Sjkim vadd.i32 q3,q3,q9 2226304636Sjkim add r6,r6,r2 2227304636Sjkim ldr r2,[sp,#56] 2228304636Sjkim veor d25,d25,d24 2229304636Sjkim and r12,r12,r3 2230304636Sjkim add r10,r10,r6 2231304636Sjkim vshr.u32 d24,d5,#19 2232304636Sjkim add r6,r6,r0,ror#2 2233304636Sjkim eor r12,r12,r8 2234304636Sjkim vsli.32 d24,d5,#13 2235304636Sjkim add r5,r5,r2 2236304636Sjkim eor r2,r11,r4 2237304636Sjkim veor d25,d25,d24 2238304636Sjkim eor r0,r10,r10,ror#5 2239304636Sjkim add r6,r6,r12 2240304636Sjkim vadd.i32 d6,d6,d25 2241304636Sjkim and r2,r2,r10 2242304636Sjkim eor r12,r0,r10,ror#19 2243304636Sjkim vshr.u32 d24,d6,#17 2244304636Sjkim eor r0,r6,r6,ror#11 2245304636Sjkim eor r2,r2,r4 2246304636Sjkim vsli.32 d24,d6,#15 2247304636Sjkim add r5,r5,r12,ror#6 2248304636Sjkim eor r12,r6,r7 2249304636Sjkim vshr.u32 d25,d6,#10 2250304636Sjkim eor r0,r0,r6,ror#20 2251304636Sjkim add r5,r5,r2 2252304636Sjkim veor d25,d25,d24 2253304636Sjkim ldr r2,[sp,#60] 2254304636Sjkim and r3,r3,r12 2255304636Sjkim vshr.u32 d24,d6,#19 2256304636Sjkim add r9,r9,r5 2257304636Sjkim add r5,r5,r0,ror#2 2258304636Sjkim eor r3,r3,r7 2259304636Sjkim vld1.32 {q8},[r14,:128]! 2260304636Sjkim add r4,r4,r2 2261304636Sjkim vsli.32 d24,d6,#13 2262304636Sjkim eor r2,r10,r11 2263304636Sjkim eor r0,r9,r9,ror#5 2264304636Sjkim veor d25,d25,d24 2265304636Sjkim add r5,r5,r3 2266304636Sjkim and r2,r2,r9 2267304636Sjkim vadd.i32 d7,d7,d25 2268304636Sjkim eor r3,r0,r9,ror#19 2269304636Sjkim eor r0,r5,r5,ror#11 2270304636Sjkim vadd.i32 q8,q8,q3 2271304636Sjkim eor r2,r2,r11 2272304636Sjkim add r4,r4,r3,ror#6 2273304636Sjkim eor r3,r5,r6 2274304636Sjkim eor r0,r0,r5,ror#20 2275304636Sjkim add r4,r4,r2 2276304636Sjkim ldr r2,[r14] 2277304636Sjkim and r12,r12,r3 2278304636Sjkim add r8,r8,r4 2279304636Sjkim vst1.32 {q8},[r1,:128]! 2280304636Sjkim add r4,r4,r0,ror#2 2281304636Sjkim eor r12,r12,r6 2282304636Sjkim teq r2,#0 @ check for K256 terminator 2283304636Sjkim ldr r2,[sp,#0] 2284304636Sjkim sub r1,r1,#64 2285304636Sjkim bne .L_00_48 2286304636Sjkim 2287304636Sjkim ldr r1,[sp,#68] 2288304636Sjkim ldr r0,[sp,#72] 2289304636Sjkim sub r14,r14,#256 @ rewind r14 2290304636Sjkim teq r1,r0 2291304636Sjkim it eq 2292304636Sjkim subeq r1,r1,#64 @ avoid SEGV 2293304636Sjkim vld1.8 {q0},[r1]! @ load next input block 2294304636Sjkim vld1.8 {q1},[r1]! 2295304636Sjkim vld1.8 {q2},[r1]! 2296304636Sjkim vld1.8 {q3},[r1]! 2297304636Sjkim it ne 2298304636Sjkim strne r1,[sp,#68] 2299304636Sjkim mov r1,sp 2300304636Sjkim add r11,r11,r2 2301304636Sjkim eor r2,r9,r10 2302304636Sjkim eor r0,r8,r8,ror#5 2303304636Sjkim add r4,r4,r12 2304304636Sjkim vld1.32 {q8},[r14,:128]! 2305304636Sjkim and r2,r2,r8 2306304636Sjkim eor r12,r0,r8,ror#19 2307304636Sjkim eor r0,r4,r4,ror#11 2308304636Sjkim eor r2,r2,r10 2309304636Sjkim vrev32.8 q0,q0 2310304636Sjkim add r11,r11,r12,ror#6 2311304636Sjkim eor r12,r4,r5 2312304636Sjkim eor r0,r0,r4,ror#20 2313304636Sjkim add r11,r11,r2 2314304636Sjkim vadd.i32 q8,q8,q0 2315304636Sjkim ldr r2,[sp,#4] 2316304636Sjkim and r3,r3,r12 2317304636Sjkim add r7,r7,r11 2318304636Sjkim add r11,r11,r0,ror#2 2319304636Sjkim eor r3,r3,r5 2320304636Sjkim add r10,r10,r2 2321304636Sjkim eor r2,r8,r9 2322304636Sjkim eor r0,r7,r7,ror#5 2323304636Sjkim add r11,r11,r3 2324304636Sjkim and r2,r2,r7 2325304636Sjkim eor r3,r0,r7,ror#19 2326304636Sjkim eor r0,r11,r11,ror#11 2327304636Sjkim eor r2,r2,r9 2328304636Sjkim add r10,r10,r3,ror#6 2329304636Sjkim eor r3,r11,r4 2330304636Sjkim eor r0,r0,r11,ror#20 2331304636Sjkim add r10,r10,r2 2332304636Sjkim ldr r2,[sp,#8] 2333304636Sjkim and r12,r12,r3 2334304636Sjkim add r6,r6,r10 2335304636Sjkim add r10,r10,r0,ror#2 2336304636Sjkim eor r12,r12,r4 2337304636Sjkim add r9,r9,r2 2338304636Sjkim eor r2,r7,r8 2339304636Sjkim eor r0,r6,r6,ror#5 2340304636Sjkim add r10,r10,r12 2341304636Sjkim and r2,r2,r6 2342304636Sjkim eor r12,r0,r6,ror#19 2343304636Sjkim eor r0,r10,r10,ror#11 2344304636Sjkim eor r2,r2,r8 2345304636Sjkim add r9,r9,r12,ror#6 2346304636Sjkim eor r12,r10,r11 2347304636Sjkim eor r0,r0,r10,ror#20 2348304636Sjkim add r9,r9,r2 2349304636Sjkim ldr r2,[sp,#12] 2350304636Sjkim and r3,r3,r12 2351304636Sjkim add r5,r5,r9 2352304636Sjkim add r9,r9,r0,ror#2 2353304636Sjkim eor r3,r3,r11 2354304636Sjkim add r8,r8,r2 2355304636Sjkim eor r2,r6,r7 2356304636Sjkim eor r0,r5,r5,ror#5 2357304636Sjkim add r9,r9,r3 2358304636Sjkim and r2,r2,r5 2359304636Sjkim eor r3,r0,r5,ror#19 2360304636Sjkim eor r0,r9,r9,ror#11 2361304636Sjkim eor r2,r2,r7 2362304636Sjkim add r8,r8,r3,ror#6 2363304636Sjkim eor r3,r9,r10 2364304636Sjkim eor r0,r0,r9,ror#20 2365304636Sjkim add r8,r8,r2 2366304636Sjkim ldr r2,[sp,#16] 2367304636Sjkim and r12,r12,r3 2368304636Sjkim add r4,r4,r8 2369304636Sjkim add r8,r8,r0,ror#2 2370304636Sjkim eor r12,r12,r10 2371304636Sjkim vst1.32 {q8},[r1,:128]! 2372304636Sjkim add r7,r7,r2 2373304636Sjkim eor r2,r5,r6 2374304636Sjkim eor r0,r4,r4,ror#5 2375304636Sjkim add r8,r8,r12 2376304636Sjkim vld1.32 {q8},[r14,:128]! 2377304636Sjkim and r2,r2,r4 2378304636Sjkim eor r12,r0,r4,ror#19 2379304636Sjkim eor r0,r8,r8,ror#11 2380304636Sjkim eor r2,r2,r6 2381304636Sjkim vrev32.8 q1,q1 2382304636Sjkim add r7,r7,r12,ror#6 2383304636Sjkim eor r12,r8,r9 2384304636Sjkim eor r0,r0,r8,ror#20 2385304636Sjkim add r7,r7,r2 2386304636Sjkim vadd.i32 q8,q8,q1 2387304636Sjkim ldr r2,[sp,#20] 2388304636Sjkim and r3,r3,r12 2389304636Sjkim add r11,r11,r7 2390304636Sjkim add r7,r7,r0,ror#2 2391304636Sjkim eor r3,r3,r9 2392304636Sjkim add r6,r6,r2 2393304636Sjkim eor r2,r4,r5 2394304636Sjkim eor r0,r11,r11,ror#5 2395304636Sjkim add r7,r7,r3 2396304636Sjkim and r2,r2,r11 2397304636Sjkim eor r3,r0,r11,ror#19 2398304636Sjkim eor r0,r7,r7,ror#11 2399304636Sjkim eor r2,r2,r5 2400304636Sjkim add r6,r6,r3,ror#6 2401304636Sjkim eor r3,r7,r8 2402304636Sjkim eor r0,r0,r7,ror#20 2403304636Sjkim add r6,r6,r2 2404304636Sjkim ldr r2,[sp,#24] 2405304636Sjkim and r12,r12,r3 2406304636Sjkim add r10,r10,r6 2407304636Sjkim add r6,r6,r0,ror#2 2408304636Sjkim eor r12,r12,r8 2409304636Sjkim add r5,r5,r2 2410304636Sjkim eor r2,r11,r4 2411304636Sjkim eor r0,r10,r10,ror#5 2412304636Sjkim add r6,r6,r12 2413304636Sjkim and r2,r2,r10 2414304636Sjkim eor r12,r0,r10,ror#19 2415304636Sjkim eor r0,r6,r6,ror#11 2416304636Sjkim eor r2,r2,r4 2417304636Sjkim add r5,r5,r12,ror#6 2418304636Sjkim eor r12,r6,r7 2419304636Sjkim eor r0,r0,r6,ror#20 2420304636Sjkim add r5,r5,r2 2421304636Sjkim ldr r2,[sp,#28] 2422304636Sjkim and r3,r3,r12 2423304636Sjkim add r9,r9,r5 2424304636Sjkim add r5,r5,r0,ror#2 2425304636Sjkim eor r3,r3,r7 2426304636Sjkim add r4,r4,r2 2427304636Sjkim eor r2,r10,r11 2428304636Sjkim eor r0,r9,r9,ror#5 2429304636Sjkim add r5,r5,r3 2430304636Sjkim and r2,r2,r9 2431304636Sjkim eor r3,r0,r9,ror#19 2432304636Sjkim eor r0,r5,r5,ror#11 2433304636Sjkim eor r2,r2,r11 2434304636Sjkim add r4,r4,r3,ror#6 2435304636Sjkim eor r3,r5,r6 2436304636Sjkim eor r0,r0,r5,ror#20 2437304636Sjkim add r4,r4,r2 2438304636Sjkim ldr r2,[sp,#32] 2439304636Sjkim and r12,r12,r3 2440304636Sjkim add r8,r8,r4 2441304636Sjkim add r4,r4,r0,ror#2 2442304636Sjkim eor r12,r12,r6 2443304636Sjkim vst1.32 {q8},[r1,:128]! 2444304636Sjkim add r11,r11,r2 2445304636Sjkim eor r2,r9,r10 2446304636Sjkim eor r0,r8,r8,ror#5 2447304636Sjkim add r4,r4,r12 2448304636Sjkim vld1.32 {q8},[r14,:128]! 2449304636Sjkim and r2,r2,r8 2450304636Sjkim eor r12,r0,r8,ror#19 2451304636Sjkim eor r0,r4,r4,ror#11 2452304636Sjkim eor r2,r2,r10 2453304636Sjkim vrev32.8 q2,q2 2454304636Sjkim add r11,r11,r12,ror#6 2455304636Sjkim eor r12,r4,r5 2456304636Sjkim eor r0,r0,r4,ror#20 2457304636Sjkim add r11,r11,r2 2458304636Sjkim vadd.i32 q8,q8,q2 2459304636Sjkim ldr r2,[sp,#36] 2460304636Sjkim and r3,r3,r12 2461304636Sjkim add r7,r7,r11 2462304636Sjkim add r11,r11,r0,ror#2 2463304636Sjkim eor r3,r3,r5 2464304636Sjkim add r10,r10,r2 2465304636Sjkim eor r2,r8,r9 2466304636Sjkim eor r0,r7,r7,ror#5 2467304636Sjkim add r11,r11,r3 2468304636Sjkim and r2,r2,r7 2469304636Sjkim eor r3,r0,r7,ror#19 2470304636Sjkim eor r0,r11,r11,ror#11 2471304636Sjkim eor r2,r2,r9 2472304636Sjkim add r10,r10,r3,ror#6 2473304636Sjkim eor r3,r11,r4 2474304636Sjkim eor r0,r0,r11,ror#20 2475304636Sjkim add r10,r10,r2 2476304636Sjkim ldr r2,[sp,#40] 2477304636Sjkim and r12,r12,r3 2478304636Sjkim add r6,r6,r10 2479304636Sjkim add r10,r10,r0,ror#2 2480304636Sjkim eor r12,r12,r4 2481304636Sjkim add r9,r9,r2 2482304636Sjkim eor r2,r7,r8 2483304636Sjkim eor r0,r6,r6,ror#5 2484304636Sjkim add r10,r10,r12 2485304636Sjkim and r2,r2,r6 2486304636Sjkim eor r12,r0,r6,ror#19 2487304636Sjkim eor r0,r10,r10,ror#11 2488304636Sjkim eor r2,r2,r8 2489304636Sjkim add r9,r9,r12,ror#6 2490304636Sjkim eor r12,r10,r11 2491304636Sjkim eor r0,r0,r10,ror#20 2492304636Sjkim add r9,r9,r2 2493304636Sjkim ldr r2,[sp,#44] 2494304636Sjkim and r3,r3,r12 2495304636Sjkim add r5,r5,r9 2496304636Sjkim add r9,r9,r0,ror#2 2497304636Sjkim eor r3,r3,r11 2498304636Sjkim add r8,r8,r2 2499304636Sjkim eor r2,r6,r7 2500304636Sjkim eor r0,r5,r5,ror#5 2501304636Sjkim add r9,r9,r3 2502304636Sjkim and r2,r2,r5 2503304636Sjkim eor r3,r0,r5,ror#19 2504304636Sjkim eor r0,r9,r9,ror#11 2505304636Sjkim eor r2,r2,r7 2506304636Sjkim add r8,r8,r3,ror#6 2507304636Sjkim eor r3,r9,r10 2508304636Sjkim eor r0,r0,r9,ror#20 2509304636Sjkim add r8,r8,r2 2510304636Sjkim ldr r2,[sp,#48] 2511304636Sjkim and r12,r12,r3 2512304636Sjkim add r4,r4,r8 2513304636Sjkim add r8,r8,r0,ror#2 2514304636Sjkim eor r12,r12,r10 2515304636Sjkim vst1.32 {q8},[r1,:128]! 2516304636Sjkim add r7,r7,r2 2517304636Sjkim eor r2,r5,r6 2518304636Sjkim eor r0,r4,r4,ror#5 2519304636Sjkim add r8,r8,r12 2520304636Sjkim vld1.32 {q8},[r14,:128]! 2521304636Sjkim and r2,r2,r4 2522304636Sjkim eor r12,r0,r4,ror#19 2523304636Sjkim eor r0,r8,r8,ror#11 2524304636Sjkim eor r2,r2,r6 2525304636Sjkim vrev32.8 q3,q3 2526304636Sjkim add r7,r7,r12,ror#6 2527304636Sjkim eor r12,r8,r9 2528304636Sjkim eor r0,r0,r8,ror#20 2529304636Sjkim add r7,r7,r2 2530304636Sjkim vadd.i32 q8,q8,q3 2531304636Sjkim ldr r2,[sp,#52] 2532304636Sjkim and r3,r3,r12 2533304636Sjkim add r11,r11,r7 2534304636Sjkim add r7,r7,r0,ror#2 2535304636Sjkim eor r3,r3,r9 2536304636Sjkim add r6,r6,r2 2537304636Sjkim eor r2,r4,r5 2538304636Sjkim eor r0,r11,r11,ror#5 2539304636Sjkim add r7,r7,r3 2540304636Sjkim and r2,r2,r11 2541304636Sjkim eor r3,r0,r11,ror#19 2542304636Sjkim eor r0,r7,r7,ror#11 2543304636Sjkim eor r2,r2,r5 2544304636Sjkim add r6,r6,r3,ror#6 2545304636Sjkim eor r3,r7,r8 2546304636Sjkim eor r0,r0,r7,ror#20 2547304636Sjkim add r6,r6,r2 2548304636Sjkim ldr r2,[sp,#56] 2549304636Sjkim and r12,r12,r3 2550304636Sjkim add r10,r10,r6 2551304636Sjkim add r6,r6,r0,ror#2 2552304636Sjkim eor r12,r12,r8 2553304636Sjkim add r5,r5,r2 2554304636Sjkim eor r2,r11,r4 2555304636Sjkim eor r0,r10,r10,ror#5 2556304636Sjkim add r6,r6,r12 2557304636Sjkim and r2,r2,r10 2558304636Sjkim eor r12,r0,r10,ror#19 2559304636Sjkim eor r0,r6,r6,ror#11 2560304636Sjkim eor r2,r2,r4 2561304636Sjkim add r5,r5,r12,ror#6 2562304636Sjkim eor r12,r6,r7 2563304636Sjkim eor r0,r0,r6,ror#20 2564304636Sjkim add r5,r5,r2 2565304636Sjkim ldr r2,[sp,#60] 2566304636Sjkim and r3,r3,r12 2567304636Sjkim add r9,r9,r5 2568304636Sjkim add r5,r5,r0,ror#2 2569304636Sjkim eor r3,r3,r7 2570304636Sjkim add r4,r4,r2 2571304636Sjkim eor r2,r10,r11 2572304636Sjkim eor r0,r9,r9,ror#5 2573304636Sjkim add r5,r5,r3 2574304636Sjkim and r2,r2,r9 2575304636Sjkim eor r3,r0,r9,ror#19 2576304636Sjkim eor r0,r5,r5,ror#11 2577304636Sjkim eor r2,r2,r11 2578304636Sjkim add r4,r4,r3,ror#6 2579304636Sjkim eor r3,r5,r6 2580304636Sjkim eor r0,r0,r5,ror#20 2581304636Sjkim add r4,r4,r2 2582304636Sjkim ldr r2,[sp,#64] 2583304636Sjkim and r12,r12,r3 2584304636Sjkim add r8,r8,r4 2585304636Sjkim add r4,r4,r0,ror#2 2586304636Sjkim eor r12,r12,r6 2587304636Sjkim vst1.32 {q8},[r1,:128]! 2588304636Sjkim ldr r0,[r2,#0] 2589304636Sjkim add r4,r4,r12 @ h+=Maj(a,b,c) from the past 2590304636Sjkim ldr r12,[r2,#4] 2591304636Sjkim ldr r3,[r2,#8] 2592304636Sjkim ldr r1,[r2,#12] 2593304636Sjkim add r4,r4,r0 @ accumulate 2594304636Sjkim ldr r0,[r2,#16] 2595304636Sjkim add r5,r5,r12 2596304636Sjkim ldr r12,[r2,#20] 2597304636Sjkim add r6,r6,r3 2598304636Sjkim ldr r3,[r2,#24] 2599304636Sjkim add r7,r7,r1 2600304636Sjkim ldr r1,[r2,#28] 2601304636Sjkim add r8,r8,r0 2602304636Sjkim str r4,[r2],#4 2603304636Sjkim add r9,r9,r12 2604304636Sjkim str r5,[r2],#4 2605304636Sjkim add r10,r10,r3 2606304636Sjkim str r6,[r2],#4 2607304636Sjkim add r11,r11,r1 2608304636Sjkim str r7,[r2],#4 2609304636Sjkim stmia r2,{r8-r11} 2610304636Sjkim 2611304636Sjkim ittte ne 2612304636Sjkim movne r1,sp 2613304636Sjkim ldrne r2,[sp,#0] 2614304636Sjkim eorne r12,r12,r12 2615304636Sjkim ldreq sp,[sp,#76] @ restore original sp 2616304636Sjkim itt ne 2617304636Sjkim eorne r3,r5,r6 2618304636Sjkim bne .L_00_48 2619304636Sjkim 2620304636Sjkim ldmia sp!,{r4-r12,pc} 2621304636Sjkim.size sha256_block_data_order_neon,.-sha256_block_data_order_neon 2622304636Sjkim#endif 2623304636Sjkim#if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__) 2624304636Sjkim 2625304636Sjkim# ifdef __thumb2__ 2626304636Sjkim# define INST(a,b,c,d) .byte c,d|0xc,a,b 2627304636Sjkim# else 2628304636Sjkim# define INST(a,b,c,d) .byte a,b,c,d 2629304636Sjkim# endif 2630304636Sjkim 2631304636Sjkim.type sha256_block_data_order_armv8,%function 2632304636Sjkim.align 5 2633304636Sjkimsha256_block_data_order_armv8: 2634304636Sjkim.LARMv8: 2635304636Sjkim vld1.32 {q0,q1},[r0] 2636304636Sjkim# ifdef __thumb2__ 2637304636Sjkim adr r3,.LARMv8 2638304636Sjkim sub r3,r3,#.LARMv8-K256 2639304636Sjkim# else 2640304636Sjkim sub r3,r3,#256+32 2641304636Sjkim# endif 2642304636Sjkim add r2,r1,r2,lsl#6 @ len to point at the end of inp 2643304636Sjkim 2644304636Sjkim.Loop_v8: 2645304636Sjkim vld1.8 {q8-q9},[r1]! 2646304636Sjkim vld1.8 {q10-q11},[r1]! 2647304636Sjkim vld1.32 {q12},[r3]! 2648304636Sjkim vrev32.8 q8,q8 2649304636Sjkim vrev32.8 q9,q9 2650304636Sjkim vrev32.8 q10,q10 2651304636Sjkim vrev32.8 q11,q11 2652304636Sjkim vmov q14,q0 @ offload 2653304636Sjkim vmov q15,q1 2654304636Sjkim teq r1,r2 2655304636Sjkim vld1.32 {q13},[r3]! 2656304636Sjkim vadd.i32 q12,q12,q8 2657304636Sjkim INST(0xe2,0x03,0xfa,0xf3) @ sha256su0 q8,q9 2658304636Sjkim vmov q2,q0 2659304636Sjkim INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q12 2660304636Sjkim INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q12 2661304636Sjkim INST(0xe6,0x0c,0x64,0xf3) @ sha256su1 q8,q10,q11 2662304636Sjkim vld1.32 {q12},[r3]! 2663304636Sjkim vadd.i32 q13,q13,q9 2664304636Sjkim INST(0xe4,0x23,0xfa,0xf3) @ sha256su0 q9,q10 2665304636Sjkim vmov q2,q0 2666304636Sjkim INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q13 2667304636Sjkim INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q13 2668304636Sjkim INST(0xe0,0x2c,0x66,0xf3) @ sha256su1 q9,q11,q8 2669304636Sjkim vld1.32 {q13},[r3]! 2670304636Sjkim vadd.i32 q12,q12,q10 2671304636Sjkim INST(0xe6,0x43,0xfa,0xf3) @ sha256su0 q10,q11 2672304636Sjkim vmov q2,q0 2673304636Sjkim INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q12 2674304636Sjkim INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q12 2675304636Sjkim INST(0xe2,0x4c,0x60,0xf3) @ sha256su1 q10,q8,q9 2676304636Sjkim vld1.32 {q12},[r3]! 2677304636Sjkim vadd.i32 q13,q13,q11 2678304636Sjkim INST(0xe0,0x63,0xfa,0xf3) @ sha256su0 q11,q8 2679304636Sjkim vmov q2,q0 2680304636Sjkim INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q13 2681304636Sjkim INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q13 2682304636Sjkim INST(0xe4,0x6c,0x62,0xf3) @ sha256su1 q11,q9,q10 2683304636Sjkim vld1.32 {q13},[r3]! 2684304636Sjkim vadd.i32 q12,q12,q8 2685304636Sjkim INST(0xe2,0x03,0xfa,0xf3) @ sha256su0 q8,q9 2686304636Sjkim vmov q2,q0 2687304636Sjkim INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q12 2688304636Sjkim INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q12 2689304636Sjkim INST(0xe6,0x0c,0x64,0xf3) @ sha256su1 q8,q10,q11 2690304636Sjkim vld1.32 {q12},[r3]! 2691304636Sjkim vadd.i32 q13,q13,q9 2692304636Sjkim INST(0xe4,0x23,0xfa,0xf3) @ sha256su0 q9,q10 2693304636Sjkim vmov q2,q0 2694304636Sjkim INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q13 2695304636Sjkim INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q13 2696304636Sjkim INST(0xe0,0x2c,0x66,0xf3) @ sha256su1 q9,q11,q8 2697304636Sjkim vld1.32 {q13},[r3]! 2698304636Sjkim vadd.i32 q12,q12,q10 2699304636Sjkim INST(0xe6,0x43,0xfa,0xf3) @ sha256su0 q10,q11 2700304636Sjkim vmov q2,q0 2701304636Sjkim INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q12 2702304636Sjkim INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q12 2703304636Sjkim INST(0xe2,0x4c,0x60,0xf3) @ sha256su1 q10,q8,q9 2704304636Sjkim vld1.32 {q12},[r3]! 2705304636Sjkim vadd.i32 q13,q13,q11 2706304636Sjkim INST(0xe0,0x63,0xfa,0xf3) @ sha256su0 q11,q8 2707304636Sjkim vmov q2,q0 2708304636Sjkim INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q13 2709304636Sjkim INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q13 2710304636Sjkim INST(0xe4,0x6c,0x62,0xf3) @ sha256su1 q11,q9,q10 2711304636Sjkim vld1.32 {q13},[r3]! 2712304636Sjkim vadd.i32 q12,q12,q8 2713304636Sjkim INST(0xe2,0x03,0xfa,0xf3) @ sha256su0 q8,q9 2714304636Sjkim vmov q2,q0 2715304636Sjkim INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q12 2716304636Sjkim INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q12 2717304636Sjkim INST(0xe6,0x0c,0x64,0xf3) @ sha256su1 q8,q10,q11 2718304636Sjkim vld1.32 {q12},[r3]! 2719304636Sjkim vadd.i32 q13,q13,q9 2720304636Sjkim INST(0xe4,0x23,0xfa,0xf3) @ sha256su0 q9,q10 2721304636Sjkim vmov q2,q0 2722304636Sjkim INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q13 2723304636Sjkim INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q13 2724304636Sjkim INST(0xe0,0x2c,0x66,0xf3) @ sha256su1 q9,q11,q8 2725304636Sjkim vld1.32 {q13},[r3]! 2726304636Sjkim vadd.i32 q12,q12,q10 2727304636Sjkim INST(0xe6,0x43,0xfa,0xf3) @ sha256su0 q10,q11 2728304636Sjkim vmov q2,q0 2729304636Sjkim INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q12 2730304636Sjkim INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q12 2731304636Sjkim INST(0xe2,0x4c,0x60,0xf3) @ sha256su1 q10,q8,q9 2732304636Sjkim vld1.32 {q12},[r3]! 2733304636Sjkim vadd.i32 q13,q13,q11 2734304636Sjkim INST(0xe0,0x63,0xfa,0xf3) @ sha256su0 q11,q8 2735304636Sjkim vmov q2,q0 2736304636Sjkim INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q13 2737304636Sjkim INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q13 2738304636Sjkim INST(0xe4,0x6c,0x62,0xf3) @ sha256su1 q11,q9,q10 2739304636Sjkim vld1.32 {q13},[r3]! 2740304636Sjkim vadd.i32 q12,q12,q8 2741304636Sjkim vmov q2,q0 2742304636Sjkim INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q12 2743304636Sjkim INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q12 2744304636Sjkim 2745304636Sjkim vld1.32 {q12},[r3]! 2746304636Sjkim vadd.i32 q13,q13,q9 2747304636Sjkim vmov q2,q0 2748304636Sjkim INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q13 2749304636Sjkim INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q13 2750304636Sjkim 2751304636Sjkim vld1.32 {q13},[r3] 2752304636Sjkim vadd.i32 q12,q12,q10 2753304636Sjkim sub r3,r3,#256-16 @ rewind 2754304636Sjkim vmov q2,q0 2755304636Sjkim INST(0x68,0x0c,0x02,0xf3) @ sha256h q0,q1,q12 2756304636Sjkim INST(0x68,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q12 2757304636Sjkim 2758304636Sjkim vadd.i32 q13,q13,q11 2759304636Sjkim vmov q2,q0 2760304636Sjkim INST(0x6a,0x0c,0x02,0xf3) @ sha256h q0,q1,q13 2761304636Sjkim INST(0x6a,0x2c,0x14,0xf3) @ sha256h2 q1,q2,q13 2762304636Sjkim 2763304636Sjkim vadd.i32 q0,q0,q14 2764304636Sjkim vadd.i32 q1,q1,q15 2765304636Sjkim it ne 2766304636Sjkim bne .Loop_v8 2767304636Sjkim 2768304636Sjkim vst1.32 {q0,q1},[r0] 2769304636Sjkim 2770304636Sjkim bx lr @ bx lr 2771304636Sjkim.size sha256_block_data_order_armv8,.-sha256_block_data_order_armv8 2772304636Sjkim#endif 2773304636Sjkim.asciz "SHA256 block transform for ARMv4/NEON/ARMv8, CRYPTOGAMS by <appro@openssl.org>" 2774304636Sjkim.align 2 2775304636Sjkim#if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__) 2776304636Sjkim.comm OPENSSL_armcap_P,4,4 2777304636Sjkim#endif 2778