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