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.global sha1_block_data_order 8*0a6a1f1dSLionel Sambuc.type sha1_block_data_order,%function 9*0a6a1f1dSLionel Sambuc 10*0a6a1f1dSLionel Sambuc.align 5 11*0a6a1f1dSLionel Sambucsha1_block_data_order: 12*0a6a1f1dSLionel Sambuc#if __ARM_MAX_ARCH__>=7 13*0a6a1f1dSLionel Sambuc sub r3,pc,#8 @ sha1_block_data_order 14*0a6a1f1dSLionel Sambuc ldr r12,.LOPENSSL_armcap 15*0a6a1f1dSLionel Sambuc ldr r12,[r3,r12] @ OPENSSL_armcap_P 16*0a6a1f1dSLionel Sambuc tst r12,#ARMV8_SHA1 17*0a6a1f1dSLionel Sambuc bne .LARMv8 18*0a6a1f1dSLionel Sambuc tst r12,#ARMV7_NEON 19*0a6a1f1dSLionel Sambuc bne .LNEON 20*0a6a1f1dSLionel Sambuc#endif 21*0a6a1f1dSLionel Sambuc stmdb sp!,{r4-r12,lr} 22*0a6a1f1dSLionel Sambuc add r2,r1,r2,lsl#6 @ r2 to point at the end of r1 23*0a6a1f1dSLionel Sambuc ldmia r0,{r3,r4,r5,r6,r7} 24*0a6a1f1dSLionel Sambuc.Lloop: 25*0a6a1f1dSLionel Sambuc ldr r8,.LK_00_19 26*0a6a1f1dSLionel Sambuc mov r14,sp 27*0a6a1f1dSLionel Sambuc sub sp,sp,#15*4 28*0a6a1f1dSLionel Sambuc mov r5,r5,ror#30 29*0a6a1f1dSLionel Sambuc mov r6,r6,ror#30 30*0a6a1f1dSLionel Sambuc mov r7,r7,ror#30 @ [6] 31*0a6a1f1dSLionel Sambuc.L_00_15: 32*0a6a1f1dSLionel Sambuc#if __ARM_ARCH__<7 33*0a6a1f1dSLionel Sambuc ldrb r10,[r1,#2] 34*0a6a1f1dSLionel Sambuc ldrb r9,[r1,#3] 35*0a6a1f1dSLionel Sambuc ldrb r11,[r1,#1] 36*0a6a1f1dSLionel Sambuc add r7,r8,r7,ror#2 @ E+=K_00_19 37*0a6a1f1dSLionel Sambuc ldrb r12,[r1],#4 38*0a6a1f1dSLionel Sambuc orr r9,r9,r10,lsl#8 39*0a6a1f1dSLionel Sambuc eor r10,r5,r6 @ F_xx_xx 40*0a6a1f1dSLionel Sambuc orr r9,r9,r11,lsl#16 41*0a6a1f1dSLionel Sambuc add r7,r7,r3,ror#27 @ E+=ROR(A,27) 42*0a6a1f1dSLionel Sambuc orr r9,r9,r12,lsl#24 43*0a6a1f1dSLionel Sambuc#else 44*0a6a1f1dSLionel Sambuc ldr r9,[r1],#4 @ handles unaligned 45*0a6a1f1dSLionel Sambuc add r7,r8,r7,ror#2 @ E+=K_00_19 46*0a6a1f1dSLionel Sambuc eor r10,r5,r6 @ F_xx_xx 47*0a6a1f1dSLionel Sambuc add r7,r7,r3,ror#27 @ E+=ROR(A,27) 48*0a6a1f1dSLionel Sambuc#ifdef __ARMEL__ 49*0a6a1f1dSLionel Sambuc rev r9,r9 @ byte swap 50*0a6a1f1dSLionel Sambuc#endif 51*0a6a1f1dSLionel Sambuc#endif 52*0a6a1f1dSLionel Sambuc and r10,r4,r10,ror#2 53*0a6a1f1dSLionel Sambuc add r7,r7,r9 @ E+=X[i] 54*0a6a1f1dSLionel Sambuc eor r10,r10,r6,ror#2 @ F_00_19(B,C,D) 55*0a6a1f1dSLionel Sambuc str r9,[r14,#-4]! 56*0a6a1f1dSLionel Sambuc add r7,r7,r10 @ E+=F_00_19(B,C,D) 57*0a6a1f1dSLionel Sambuc#if __ARM_ARCH__<7 58*0a6a1f1dSLionel Sambuc ldrb r10,[r1,#2] 59*0a6a1f1dSLionel Sambuc ldrb r9,[r1,#3] 60*0a6a1f1dSLionel Sambuc ldrb r11,[r1,#1] 61*0a6a1f1dSLionel Sambuc add r6,r8,r6,ror#2 @ E+=K_00_19 62*0a6a1f1dSLionel Sambuc ldrb r12,[r1],#4 63*0a6a1f1dSLionel Sambuc orr r9,r9,r10,lsl#8 64*0a6a1f1dSLionel Sambuc eor r10,r4,r5 @ F_xx_xx 65*0a6a1f1dSLionel Sambuc orr r9,r9,r11,lsl#16 66*0a6a1f1dSLionel Sambuc add r6,r6,r7,ror#27 @ E+=ROR(A,27) 67*0a6a1f1dSLionel Sambuc orr r9,r9,r12,lsl#24 68*0a6a1f1dSLionel Sambuc#else 69*0a6a1f1dSLionel Sambuc ldr r9,[r1],#4 @ handles unaligned 70*0a6a1f1dSLionel Sambuc add r6,r8,r6,ror#2 @ E+=K_00_19 71*0a6a1f1dSLionel Sambuc eor r10,r4,r5 @ F_xx_xx 72*0a6a1f1dSLionel Sambuc add r6,r6,r7,ror#27 @ E+=ROR(A,27) 73*0a6a1f1dSLionel Sambuc#ifdef __ARMEL__ 74*0a6a1f1dSLionel Sambuc rev r9,r9 @ byte swap 75*0a6a1f1dSLionel Sambuc#endif 76*0a6a1f1dSLionel Sambuc#endif 77*0a6a1f1dSLionel Sambuc and r10,r3,r10,ror#2 78*0a6a1f1dSLionel Sambuc add r6,r6,r9 @ E+=X[i] 79*0a6a1f1dSLionel Sambuc eor r10,r10,r5,ror#2 @ F_00_19(B,C,D) 80*0a6a1f1dSLionel Sambuc str r9,[r14,#-4]! 81*0a6a1f1dSLionel Sambuc add r6,r6,r10 @ E+=F_00_19(B,C,D) 82*0a6a1f1dSLionel Sambuc#if __ARM_ARCH__<7 83*0a6a1f1dSLionel Sambuc ldrb r10,[r1,#2] 84*0a6a1f1dSLionel Sambuc ldrb r9,[r1,#3] 85*0a6a1f1dSLionel Sambuc ldrb r11,[r1,#1] 86*0a6a1f1dSLionel Sambuc add r5,r8,r5,ror#2 @ E+=K_00_19 87*0a6a1f1dSLionel Sambuc ldrb r12,[r1],#4 88*0a6a1f1dSLionel Sambuc orr r9,r9,r10,lsl#8 89*0a6a1f1dSLionel Sambuc eor r10,r3,r4 @ F_xx_xx 90*0a6a1f1dSLionel Sambuc orr r9,r9,r11,lsl#16 91*0a6a1f1dSLionel Sambuc add r5,r5,r6,ror#27 @ E+=ROR(A,27) 92*0a6a1f1dSLionel Sambuc orr r9,r9,r12,lsl#24 93*0a6a1f1dSLionel Sambuc#else 94*0a6a1f1dSLionel Sambuc ldr r9,[r1],#4 @ handles unaligned 95*0a6a1f1dSLionel Sambuc add r5,r8,r5,ror#2 @ E+=K_00_19 96*0a6a1f1dSLionel Sambuc eor r10,r3,r4 @ F_xx_xx 97*0a6a1f1dSLionel Sambuc add r5,r5,r6,ror#27 @ E+=ROR(A,27) 98*0a6a1f1dSLionel Sambuc#ifdef __ARMEL__ 99*0a6a1f1dSLionel Sambuc rev r9,r9 @ byte swap 100*0a6a1f1dSLionel Sambuc#endif 101*0a6a1f1dSLionel Sambuc#endif 102*0a6a1f1dSLionel Sambuc and r10,r7,r10,ror#2 103*0a6a1f1dSLionel Sambuc add r5,r5,r9 @ E+=X[i] 104*0a6a1f1dSLionel Sambuc eor r10,r10,r4,ror#2 @ F_00_19(B,C,D) 105*0a6a1f1dSLionel Sambuc str r9,[r14,#-4]! 106*0a6a1f1dSLionel Sambuc add r5,r5,r10 @ E+=F_00_19(B,C,D) 107*0a6a1f1dSLionel Sambuc#if __ARM_ARCH__<7 108*0a6a1f1dSLionel Sambuc ldrb r10,[r1,#2] 109*0a6a1f1dSLionel Sambuc ldrb r9,[r1,#3] 110*0a6a1f1dSLionel Sambuc ldrb r11,[r1,#1] 111*0a6a1f1dSLionel Sambuc add r4,r8,r4,ror#2 @ E+=K_00_19 112*0a6a1f1dSLionel Sambuc ldrb r12,[r1],#4 113*0a6a1f1dSLionel Sambuc orr r9,r9,r10,lsl#8 114*0a6a1f1dSLionel Sambuc eor r10,r7,r3 @ F_xx_xx 115*0a6a1f1dSLionel Sambuc orr r9,r9,r11,lsl#16 116*0a6a1f1dSLionel Sambuc add r4,r4,r5,ror#27 @ E+=ROR(A,27) 117*0a6a1f1dSLionel Sambuc orr r9,r9,r12,lsl#24 118*0a6a1f1dSLionel Sambuc#else 119*0a6a1f1dSLionel Sambuc ldr r9,[r1],#4 @ handles unaligned 120*0a6a1f1dSLionel Sambuc add r4,r8,r4,ror#2 @ E+=K_00_19 121*0a6a1f1dSLionel Sambuc eor r10,r7,r3 @ F_xx_xx 122*0a6a1f1dSLionel Sambuc add r4,r4,r5,ror#27 @ E+=ROR(A,27) 123*0a6a1f1dSLionel Sambuc#ifdef __ARMEL__ 124*0a6a1f1dSLionel Sambuc rev r9,r9 @ byte swap 125*0a6a1f1dSLionel Sambuc#endif 126*0a6a1f1dSLionel Sambuc#endif 127*0a6a1f1dSLionel Sambuc and r10,r6,r10,ror#2 128*0a6a1f1dSLionel Sambuc add r4,r4,r9 @ E+=X[i] 129*0a6a1f1dSLionel Sambuc eor r10,r10,r3,ror#2 @ F_00_19(B,C,D) 130*0a6a1f1dSLionel Sambuc str r9,[r14,#-4]! 131*0a6a1f1dSLionel Sambuc add r4,r4,r10 @ E+=F_00_19(B,C,D) 132*0a6a1f1dSLionel Sambuc#if __ARM_ARCH__<7 133*0a6a1f1dSLionel Sambuc ldrb r10,[r1,#2] 134*0a6a1f1dSLionel Sambuc ldrb r9,[r1,#3] 135*0a6a1f1dSLionel Sambuc ldrb r11,[r1,#1] 136*0a6a1f1dSLionel Sambuc add r3,r8,r3,ror#2 @ E+=K_00_19 137*0a6a1f1dSLionel Sambuc ldrb r12,[r1],#4 138*0a6a1f1dSLionel Sambuc orr r9,r9,r10,lsl#8 139*0a6a1f1dSLionel Sambuc eor r10,r6,r7 @ F_xx_xx 140*0a6a1f1dSLionel Sambuc orr r9,r9,r11,lsl#16 141*0a6a1f1dSLionel Sambuc add r3,r3,r4,ror#27 @ E+=ROR(A,27) 142*0a6a1f1dSLionel Sambuc orr r9,r9,r12,lsl#24 143*0a6a1f1dSLionel Sambuc#else 144*0a6a1f1dSLionel Sambuc ldr r9,[r1],#4 @ handles unaligned 145*0a6a1f1dSLionel Sambuc add r3,r8,r3,ror#2 @ E+=K_00_19 146*0a6a1f1dSLionel Sambuc eor r10,r6,r7 @ F_xx_xx 147*0a6a1f1dSLionel Sambuc add r3,r3,r4,ror#27 @ E+=ROR(A,27) 148*0a6a1f1dSLionel Sambuc#ifdef __ARMEL__ 149*0a6a1f1dSLionel Sambuc rev r9,r9 @ byte swap 150*0a6a1f1dSLionel Sambuc#endif 151*0a6a1f1dSLionel Sambuc#endif 152*0a6a1f1dSLionel Sambuc and r10,r5,r10,ror#2 153*0a6a1f1dSLionel Sambuc add r3,r3,r9 @ E+=X[i] 154*0a6a1f1dSLionel Sambuc eor r10,r10,r7,ror#2 @ F_00_19(B,C,D) 155*0a6a1f1dSLionel Sambuc str r9,[r14,#-4]! 156*0a6a1f1dSLionel Sambuc add r3,r3,r10 @ E+=F_00_19(B,C,D) 157*0a6a1f1dSLionel Sambuc teq r14,sp 158*0a6a1f1dSLionel Sambuc bne .L_00_15 @ [((11+4)*5+2)*3] 159*0a6a1f1dSLionel Sambuc sub sp,sp,#25*4 160*0a6a1f1dSLionel Sambuc#if __ARM_ARCH__<7 161*0a6a1f1dSLionel Sambuc ldrb r10,[r1,#2] 162*0a6a1f1dSLionel Sambuc ldrb r9,[r1,#3] 163*0a6a1f1dSLionel Sambuc ldrb r11,[r1,#1] 164*0a6a1f1dSLionel Sambuc add r7,r8,r7,ror#2 @ E+=K_00_19 165*0a6a1f1dSLionel Sambuc ldrb r12,[r1],#4 166*0a6a1f1dSLionel Sambuc orr r9,r9,r10,lsl#8 167*0a6a1f1dSLionel Sambuc eor r10,r5,r6 @ F_xx_xx 168*0a6a1f1dSLionel Sambuc orr r9,r9,r11,lsl#16 169*0a6a1f1dSLionel Sambuc add r7,r7,r3,ror#27 @ E+=ROR(A,27) 170*0a6a1f1dSLionel Sambuc orr r9,r9,r12,lsl#24 171*0a6a1f1dSLionel Sambuc#else 172*0a6a1f1dSLionel Sambuc ldr r9,[r1],#4 @ handles unaligned 173*0a6a1f1dSLionel Sambuc add r7,r8,r7,ror#2 @ E+=K_00_19 174*0a6a1f1dSLionel Sambuc eor r10,r5,r6 @ F_xx_xx 175*0a6a1f1dSLionel Sambuc add r7,r7,r3,ror#27 @ E+=ROR(A,27) 176*0a6a1f1dSLionel Sambuc#ifdef __ARMEL__ 177*0a6a1f1dSLionel Sambuc rev r9,r9 @ byte swap 178*0a6a1f1dSLionel Sambuc#endif 179*0a6a1f1dSLionel Sambuc#endif 180*0a6a1f1dSLionel Sambuc and r10,r4,r10,ror#2 181*0a6a1f1dSLionel Sambuc add r7,r7,r9 @ E+=X[i] 182*0a6a1f1dSLionel Sambuc eor r10,r10,r6,ror#2 @ F_00_19(B,C,D) 183*0a6a1f1dSLionel Sambuc str r9,[r14,#-4]! 184*0a6a1f1dSLionel Sambuc add r7,r7,r10 @ E+=F_00_19(B,C,D) 185*0a6a1f1dSLionel Sambuc ldr r9,[r14,#15*4] 186*0a6a1f1dSLionel Sambuc ldr r10,[r14,#13*4] 187*0a6a1f1dSLionel Sambuc ldr r11,[r14,#7*4] 188*0a6a1f1dSLionel Sambuc add r6,r8,r6,ror#2 @ E+=K_xx_xx 189*0a6a1f1dSLionel Sambuc ldr r12,[r14,#2*4] 190*0a6a1f1dSLionel Sambuc eor r9,r9,r10 191*0a6a1f1dSLionel Sambuc eor r11,r11,r12 @ 1 cycle stall 192*0a6a1f1dSLionel Sambuc eor r10,r4,r5 @ F_xx_xx 193*0a6a1f1dSLionel Sambuc mov r9,r9,ror#31 194*0a6a1f1dSLionel Sambuc add r6,r6,r7,ror#27 @ E+=ROR(A,27) 195*0a6a1f1dSLionel Sambuc eor r9,r9,r11,ror#31 196*0a6a1f1dSLionel Sambuc str r9,[r14,#-4]! 197*0a6a1f1dSLionel Sambuc and r10,r3,r10,ror#2 @ F_xx_xx 198*0a6a1f1dSLionel Sambuc @ F_xx_xx 199*0a6a1f1dSLionel Sambuc add r6,r6,r9 @ E+=X[i] 200*0a6a1f1dSLionel Sambuc eor r10,r10,r5,ror#2 @ F_00_19(B,C,D) 201*0a6a1f1dSLionel Sambuc add r6,r6,r10 @ E+=F_00_19(B,C,D) 202*0a6a1f1dSLionel Sambuc ldr r9,[r14,#15*4] 203*0a6a1f1dSLionel Sambuc ldr r10,[r14,#13*4] 204*0a6a1f1dSLionel Sambuc ldr r11,[r14,#7*4] 205*0a6a1f1dSLionel Sambuc add r5,r8,r5,ror#2 @ E+=K_xx_xx 206*0a6a1f1dSLionel Sambuc ldr r12,[r14,#2*4] 207*0a6a1f1dSLionel Sambuc eor r9,r9,r10 208*0a6a1f1dSLionel Sambuc eor r11,r11,r12 @ 1 cycle stall 209*0a6a1f1dSLionel Sambuc eor r10,r3,r4 @ F_xx_xx 210*0a6a1f1dSLionel Sambuc mov r9,r9,ror#31 211*0a6a1f1dSLionel Sambuc add r5,r5,r6,ror#27 @ E+=ROR(A,27) 212*0a6a1f1dSLionel Sambuc eor r9,r9,r11,ror#31 213*0a6a1f1dSLionel Sambuc str r9,[r14,#-4]! 214*0a6a1f1dSLionel Sambuc and r10,r7,r10,ror#2 @ F_xx_xx 215*0a6a1f1dSLionel Sambuc @ F_xx_xx 216*0a6a1f1dSLionel Sambuc add r5,r5,r9 @ E+=X[i] 217*0a6a1f1dSLionel Sambuc eor r10,r10,r4,ror#2 @ F_00_19(B,C,D) 218*0a6a1f1dSLionel Sambuc add r5,r5,r10 @ E+=F_00_19(B,C,D) 219*0a6a1f1dSLionel Sambuc ldr r9,[r14,#15*4] 220*0a6a1f1dSLionel Sambuc ldr r10,[r14,#13*4] 221*0a6a1f1dSLionel Sambuc ldr r11,[r14,#7*4] 222*0a6a1f1dSLionel Sambuc add r4,r8,r4,ror#2 @ E+=K_xx_xx 223*0a6a1f1dSLionel Sambuc ldr r12,[r14,#2*4] 224*0a6a1f1dSLionel Sambuc eor r9,r9,r10 225*0a6a1f1dSLionel Sambuc eor r11,r11,r12 @ 1 cycle stall 226*0a6a1f1dSLionel Sambuc eor r10,r7,r3 @ F_xx_xx 227*0a6a1f1dSLionel Sambuc mov r9,r9,ror#31 228*0a6a1f1dSLionel Sambuc add r4,r4,r5,ror#27 @ E+=ROR(A,27) 229*0a6a1f1dSLionel Sambuc eor r9,r9,r11,ror#31 230*0a6a1f1dSLionel Sambuc str r9,[r14,#-4]! 231*0a6a1f1dSLionel Sambuc and r10,r6,r10,ror#2 @ F_xx_xx 232*0a6a1f1dSLionel Sambuc @ F_xx_xx 233*0a6a1f1dSLionel Sambuc add r4,r4,r9 @ E+=X[i] 234*0a6a1f1dSLionel Sambuc eor r10,r10,r3,ror#2 @ F_00_19(B,C,D) 235*0a6a1f1dSLionel Sambuc add r4,r4,r10 @ E+=F_00_19(B,C,D) 236*0a6a1f1dSLionel Sambuc ldr r9,[r14,#15*4] 237*0a6a1f1dSLionel Sambuc ldr r10,[r14,#13*4] 238*0a6a1f1dSLionel Sambuc ldr r11,[r14,#7*4] 239*0a6a1f1dSLionel Sambuc add r3,r8,r3,ror#2 @ E+=K_xx_xx 240*0a6a1f1dSLionel Sambuc ldr r12,[r14,#2*4] 241*0a6a1f1dSLionel Sambuc eor r9,r9,r10 242*0a6a1f1dSLionel Sambuc eor r11,r11,r12 @ 1 cycle stall 243*0a6a1f1dSLionel Sambuc eor r10,r6,r7 @ F_xx_xx 244*0a6a1f1dSLionel Sambuc mov r9,r9,ror#31 245*0a6a1f1dSLionel Sambuc add r3,r3,r4,ror#27 @ E+=ROR(A,27) 246*0a6a1f1dSLionel Sambuc eor r9,r9,r11,ror#31 247*0a6a1f1dSLionel Sambuc str r9,[r14,#-4]! 248*0a6a1f1dSLionel Sambuc and r10,r5,r10,ror#2 @ F_xx_xx 249*0a6a1f1dSLionel Sambuc @ F_xx_xx 250*0a6a1f1dSLionel Sambuc add r3,r3,r9 @ E+=X[i] 251*0a6a1f1dSLionel Sambuc eor r10,r10,r7,ror#2 @ F_00_19(B,C,D) 252*0a6a1f1dSLionel Sambuc add r3,r3,r10 @ E+=F_00_19(B,C,D) 253*0a6a1f1dSLionel Sambuc 254*0a6a1f1dSLionel Sambuc ldr r8,.LK_20_39 @ [+15+16*4] 255*0a6a1f1dSLionel Sambuc cmn sp,#0 @ [+3], clear carry to denote 20_39 256*0a6a1f1dSLionel Sambuc.L_20_39_or_60_79: 257*0a6a1f1dSLionel Sambuc ldr r9,[r14,#15*4] 258*0a6a1f1dSLionel Sambuc ldr r10,[r14,#13*4] 259*0a6a1f1dSLionel Sambuc ldr r11,[r14,#7*4] 260*0a6a1f1dSLionel Sambuc add r7,r8,r7,ror#2 @ E+=K_xx_xx 261*0a6a1f1dSLionel Sambuc ldr r12,[r14,#2*4] 262*0a6a1f1dSLionel Sambuc eor r9,r9,r10 263*0a6a1f1dSLionel Sambuc eor r11,r11,r12 @ 1 cycle stall 264*0a6a1f1dSLionel Sambuc eor r10,r5,r6 @ F_xx_xx 265*0a6a1f1dSLionel Sambuc mov r9,r9,ror#31 266*0a6a1f1dSLionel Sambuc add r7,r7,r3,ror#27 @ E+=ROR(A,27) 267*0a6a1f1dSLionel Sambuc eor r9,r9,r11,ror#31 268*0a6a1f1dSLionel Sambuc str r9,[r14,#-4]! 269*0a6a1f1dSLionel Sambuc eor r10,r4,r10,ror#2 @ F_xx_xx 270*0a6a1f1dSLionel Sambuc @ F_xx_xx 271*0a6a1f1dSLionel Sambuc add r7,r7,r9 @ E+=X[i] 272*0a6a1f1dSLionel Sambuc add r7,r7,r10 @ E+=F_20_39(B,C,D) 273*0a6a1f1dSLionel Sambuc ldr r9,[r14,#15*4] 274*0a6a1f1dSLionel Sambuc ldr r10,[r14,#13*4] 275*0a6a1f1dSLionel Sambuc ldr r11,[r14,#7*4] 276*0a6a1f1dSLionel Sambuc add r6,r8,r6,ror#2 @ E+=K_xx_xx 277*0a6a1f1dSLionel Sambuc ldr r12,[r14,#2*4] 278*0a6a1f1dSLionel Sambuc eor r9,r9,r10 279*0a6a1f1dSLionel Sambuc eor r11,r11,r12 @ 1 cycle stall 280*0a6a1f1dSLionel Sambuc eor r10,r4,r5 @ F_xx_xx 281*0a6a1f1dSLionel Sambuc mov r9,r9,ror#31 282*0a6a1f1dSLionel Sambuc add r6,r6,r7,ror#27 @ E+=ROR(A,27) 283*0a6a1f1dSLionel Sambuc eor r9,r9,r11,ror#31 284*0a6a1f1dSLionel Sambuc str r9,[r14,#-4]! 285*0a6a1f1dSLionel Sambuc eor r10,r3,r10,ror#2 @ F_xx_xx 286*0a6a1f1dSLionel Sambuc @ F_xx_xx 287*0a6a1f1dSLionel Sambuc add r6,r6,r9 @ E+=X[i] 288*0a6a1f1dSLionel Sambuc add r6,r6,r10 @ E+=F_20_39(B,C,D) 289*0a6a1f1dSLionel Sambuc ldr r9,[r14,#15*4] 290*0a6a1f1dSLionel Sambuc ldr r10,[r14,#13*4] 291*0a6a1f1dSLionel Sambuc ldr r11,[r14,#7*4] 292*0a6a1f1dSLionel Sambuc add r5,r8,r5,ror#2 @ E+=K_xx_xx 293*0a6a1f1dSLionel Sambuc ldr r12,[r14,#2*4] 294*0a6a1f1dSLionel Sambuc eor r9,r9,r10 295*0a6a1f1dSLionel Sambuc eor r11,r11,r12 @ 1 cycle stall 296*0a6a1f1dSLionel Sambuc eor r10,r3,r4 @ F_xx_xx 297*0a6a1f1dSLionel Sambuc mov r9,r9,ror#31 298*0a6a1f1dSLionel Sambuc add r5,r5,r6,ror#27 @ E+=ROR(A,27) 299*0a6a1f1dSLionel Sambuc eor r9,r9,r11,ror#31 300*0a6a1f1dSLionel Sambuc str r9,[r14,#-4]! 301*0a6a1f1dSLionel Sambuc eor r10,r7,r10,ror#2 @ F_xx_xx 302*0a6a1f1dSLionel Sambuc @ F_xx_xx 303*0a6a1f1dSLionel Sambuc add r5,r5,r9 @ E+=X[i] 304*0a6a1f1dSLionel Sambuc add r5,r5,r10 @ E+=F_20_39(B,C,D) 305*0a6a1f1dSLionel Sambuc ldr r9,[r14,#15*4] 306*0a6a1f1dSLionel Sambuc ldr r10,[r14,#13*4] 307*0a6a1f1dSLionel Sambuc ldr r11,[r14,#7*4] 308*0a6a1f1dSLionel Sambuc add r4,r8,r4,ror#2 @ E+=K_xx_xx 309*0a6a1f1dSLionel Sambuc ldr r12,[r14,#2*4] 310*0a6a1f1dSLionel Sambuc eor r9,r9,r10 311*0a6a1f1dSLionel Sambuc eor r11,r11,r12 @ 1 cycle stall 312*0a6a1f1dSLionel Sambuc eor r10,r7,r3 @ F_xx_xx 313*0a6a1f1dSLionel Sambuc mov r9,r9,ror#31 314*0a6a1f1dSLionel Sambuc add r4,r4,r5,ror#27 @ E+=ROR(A,27) 315*0a6a1f1dSLionel Sambuc eor r9,r9,r11,ror#31 316*0a6a1f1dSLionel Sambuc str r9,[r14,#-4]! 317*0a6a1f1dSLionel Sambuc eor r10,r6,r10,ror#2 @ F_xx_xx 318*0a6a1f1dSLionel Sambuc @ F_xx_xx 319*0a6a1f1dSLionel Sambuc add r4,r4,r9 @ E+=X[i] 320*0a6a1f1dSLionel Sambuc add r4,r4,r10 @ E+=F_20_39(B,C,D) 321*0a6a1f1dSLionel Sambuc ldr r9,[r14,#15*4] 322*0a6a1f1dSLionel Sambuc ldr r10,[r14,#13*4] 323*0a6a1f1dSLionel Sambuc ldr r11,[r14,#7*4] 324*0a6a1f1dSLionel Sambuc add r3,r8,r3,ror#2 @ E+=K_xx_xx 325*0a6a1f1dSLionel Sambuc ldr r12,[r14,#2*4] 326*0a6a1f1dSLionel Sambuc eor r9,r9,r10 327*0a6a1f1dSLionel Sambuc eor r11,r11,r12 @ 1 cycle stall 328*0a6a1f1dSLionel Sambuc eor r10,r6,r7 @ F_xx_xx 329*0a6a1f1dSLionel Sambuc mov r9,r9,ror#31 330*0a6a1f1dSLionel Sambuc add r3,r3,r4,ror#27 @ E+=ROR(A,27) 331*0a6a1f1dSLionel Sambuc eor r9,r9,r11,ror#31 332*0a6a1f1dSLionel Sambuc str r9,[r14,#-4]! 333*0a6a1f1dSLionel Sambuc eor r10,r5,r10,ror#2 @ F_xx_xx 334*0a6a1f1dSLionel Sambuc @ F_xx_xx 335*0a6a1f1dSLionel Sambuc add r3,r3,r9 @ E+=X[i] 336*0a6a1f1dSLionel Sambuc add r3,r3,r10 @ E+=F_20_39(B,C,D) 337*0a6a1f1dSLionel Sambuc teq r14,sp @ preserve carry 338*0a6a1f1dSLionel Sambuc bne .L_20_39_or_60_79 @ [+((12+3)*5+2)*4] 339*0a6a1f1dSLionel Sambuc bcs .L_done @ [+((12+3)*5+2)*4], spare 300 bytes 340*0a6a1f1dSLionel Sambuc 341*0a6a1f1dSLionel Sambuc ldr r8,.LK_40_59 342*0a6a1f1dSLionel Sambuc sub sp,sp,#20*4 @ [+2] 343*0a6a1f1dSLionel Sambuc.L_40_59: 344*0a6a1f1dSLionel Sambuc ldr r9,[r14,#15*4] 345*0a6a1f1dSLionel Sambuc ldr r10,[r14,#13*4] 346*0a6a1f1dSLionel Sambuc ldr r11,[r14,#7*4] 347*0a6a1f1dSLionel Sambuc add r7,r8,r7,ror#2 @ E+=K_xx_xx 348*0a6a1f1dSLionel Sambuc ldr r12,[r14,#2*4] 349*0a6a1f1dSLionel Sambuc eor r9,r9,r10 350*0a6a1f1dSLionel Sambuc eor r11,r11,r12 @ 1 cycle stall 351*0a6a1f1dSLionel Sambuc eor r10,r5,r6 @ F_xx_xx 352*0a6a1f1dSLionel Sambuc mov r9,r9,ror#31 353*0a6a1f1dSLionel Sambuc add r7,r7,r3,ror#27 @ E+=ROR(A,27) 354*0a6a1f1dSLionel Sambuc eor r9,r9,r11,ror#31 355*0a6a1f1dSLionel Sambuc str r9,[r14,#-4]! 356*0a6a1f1dSLionel Sambuc and r10,r4,r10,ror#2 @ F_xx_xx 357*0a6a1f1dSLionel Sambuc and r11,r5,r6 @ F_xx_xx 358*0a6a1f1dSLionel Sambuc add r7,r7,r9 @ E+=X[i] 359*0a6a1f1dSLionel Sambuc add r7,r7,r10 @ E+=F_40_59(B,C,D) 360*0a6a1f1dSLionel Sambuc add r7,r7,r11,ror#2 361*0a6a1f1dSLionel Sambuc ldr r9,[r14,#15*4] 362*0a6a1f1dSLionel Sambuc ldr r10,[r14,#13*4] 363*0a6a1f1dSLionel Sambuc ldr r11,[r14,#7*4] 364*0a6a1f1dSLionel Sambuc add r6,r8,r6,ror#2 @ E+=K_xx_xx 365*0a6a1f1dSLionel Sambuc ldr r12,[r14,#2*4] 366*0a6a1f1dSLionel Sambuc eor r9,r9,r10 367*0a6a1f1dSLionel Sambuc eor r11,r11,r12 @ 1 cycle stall 368*0a6a1f1dSLionel Sambuc eor r10,r4,r5 @ F_xx_xx 369*0a6a1f1dSLionel Sambuc mov r9,r9,ror#31 370*0a6a1f1dSLionel Sambuc add r6,r6,r7,ror#27 @ E+=ROR(A,27) 371*0a6a1f1dSLionel Sambuc eor r9,r9,r11,ror#31 372*0a6a1f1dSLionel Sambuc str r9,[r14,#-4]! 373*0a6a1f1dSLionel Sambuc and r10,r3,r10,ror#2 @ F_xx_xx 374*0a6a1f1dSLionel Sambuc and r11,r4,r5 @ F_xx_xx 375*0a6a1f1dSLionel Sambuc add r6,r6,r9 @ E+=X[i] 376*0a6a1f1dSLionel Sambuc add r6,r6,r10 @ E+=F_40_59(B,C,D) 377*0a6a1f1dSLionel Sambuc add r6,r6,r11,ror#2 378*0a6a1f1dSLionel Sambuc ldr r9,[r14,#15*4] 379*0a6a1f1dSLionel Sambuc ldr r10,[r14,#13*4] 380*0a6a1f1dSLionel Sambuc ldr r11,[r14,#7*4] 381*0a6a1f1dSLionel Sambuc add r5,r8,r5,ror#2 @ E+=K_xx_xx 382*0a6a1f1dSLionel Sambuc ldr r12,[r14,#2*4] 383*0a6a1f1dSLionel Sambuc eor r9,r9,r10 384*0a6a1f1dSLionel Sambuc eor r11,r11,r12 @ 1 cycle stall 385*0a6a1f1dSLionel Sambuc eor r10,r3,r4 @ F_xx_xx 386*0a6a1f1dSLionel Sambuc mov r9,r9,ror#31 387*0a6a1f1dSLionel Sambuc add r5,r5,r6,ror#27 @ E+=ROR(A,27) 388*0a6a1f1dSLionel Sambuc eor r9,r9,r11,ror#31 389*0a6a1f1dSLionel Sambuc str r9,[r14,#-4]! 390*0a6a1f1dSLionel Sambuc and r10,r7,r10,ror#2 @ F_xx_xx 391*0a6a1f1dSLionel Sambuc and r11,r3,r4 @ F_xx_xx 392*0a6a1f1dSLionel Sambuc add r5,r5,r9 @ E+=X[i] 393*0a6a1f1dSLionel Sambuc add r5,r5,r10 @ E+=F_40_59(B,C,D) 394*0a6a1f1dSLionel Sambuc add r5,r5,r11,ror#2 395*0a6a1f1dSLionel Sambuc ldr r9,[r14,#15*4] 396*0a6a1f1dSLionel Sambuc ldr r10,[r14,#13*4] 397*0a6a1f1dSLionel Sambuc ldr r11,[r14,#7*4] 398*0a6a1f1dSLionel Sambuc add r4,r8,r4,ror#2 @ E+=K_xx_xx 399*0a6a1f1dSLionel Sambuc ldr r12,[r14,#2*4] 400*0a6a1f1dSLionel Sambuc eor r9,r9,r10 401*0a6a1f1dSLionel Sambuc eor r11,r11,r12 @ 1 cycle stall 402*0a6a1f1dSLionel Sambuc eor r10,r7,r3 @ F_xx_xx 403*0a6a1f1dSLionel Sambuc mov r9,r9,ror#31 404*0a6a1f1dSLionel Sambuc add r4,r4,r5,ror#27 @ E+=ROR(A,27) 405*0a6a1f1dSLionel Sambuc eor r9,r9,r11,ror#31 406*0a6a1f1dSLionel Sambuc str r9,[r14,#-4]! 407*0a6a1f1dSLionel Sambuc and r10,r6,r10,ror#2 @ F_xx_xx 408*0a6a1f1dSLionel Sambuc and r11,r7,r3 @ F_xx_xx 409*0a6a1f1dSLionel Sambuc add r4,r4,r9 @ E+=X[i] 410*0a6a1f1dSLionel Sambuc add r4,r4,r10 @ E+=F_40_59(B,C,D) 411*0a6a1f1dSLionel Sambuc add r4,r4,r11,ror#2 412*0a6a1f1dSLionel Sambuc ldr r9,[r14,#15*4] 413*0a6a1f1dSLionel Sambuc ldr r10,[r14,#13*4] 414*0a6a1f1dSLionel Sambuc ldr r11,[r14,#7*4] 415*0a6a1f1dSLionel Sambuc add r3,r8,r3,ror#2 @ E+=K_xx_xx 416*0a6a1f1dSLionel Sambuc ldr r12,[r14,#2*4] 417*0a6a1f1dSLionel Sambuc eor r9,r9,r10 418*0a6a1f1dSLionel Sambuc eor r11,r11,r12 @ 1 cycle stall 419*0a6a1f1dSLionel Sambuc eor r10,r6,r7 @ F_xx_xx 420*0a6a1f1dSLionel Sambuc mov r9,r9,ror#31 421*0a6a1f1dSLionel Sambuc add r3,r3,r4,ror#27 @ E+=ROR(A,27) 422*0a6a1f1dSLionel Sambuc eor r9,r9,r11,ror#31 423*0a6a1f1dSLionel Sambuc str r9,[r14,#-4]! 424*0a6a1f1dSLionel Sambuc and r10,r5,r10,ror#2 @ F_xx_xx 425*0a6a1f1dSLionel Sambuc and r11,r6,r7 @ F_xx_xx 426*0a6a1f1dSLionel Sambuc add r3,r3,r9 @ E+=X[i] 427*0a6a1f1dSLionel Sambuc add r3,r3,r10 @ E+=F_40_59(B,C,D) 428*0a6a1f1dSLionel Sambuc add r3,r3,r11,ror#2 429*0a6a1f1dSLionel Sambuc teq r14,sp 430*0a6a1f1dSLionel Sambuc bne .L_40_59 @ [+((12+5)*5+2)*4] 431*0a6a1f1dSLionel Sambuc 432*0a6a1f1dSLionel Sambuc ldr r8,.LK_60_79 433*0a6a1f1dSLionel Sambuc sub sp,sp,#20*4 434*0a6a1f1dSLionel Sambuc cmp sp,#0 @ set carry to denote 60_79 435*0a6a1f1dSLionel Sambuc b .L_20_39_or_60_79 @ [+4], spare 300 bytes 436*0a6a1f1dSLionel Sambuc.L_done: 437*0a6a1f1dSLionel Sambuc add sp,sp,#80*4 @ "deallocate" stack frame 438*0a6a1f1dSLionel Sambuc ldmia r0,{r8,r9,r10,r11,r12} 439*0a6a1f1dSLionel Sambuc add r3,r8,r3 440*0a6a1f1dSLionel Sambuc add r4,r9,r4 441*0a6a1f1dSLionel Sambuc add r5,r10,r5,ror#2 442*0a6a1f1dSLionel Sambuc add r6,r11,r6,ror#2 443*0a6a1f1dSLionel Sambuc add r7,r12,r7,ror#2 444*0a6a1f1dSLionel Sambuc stmia r0,{r3,r4,r5,r6,r7} 445*0a6a1f1dSLionel Sambuc teq r1,r2 446*0a6a1f1dSLionel Sambuc bne .Lloop @ [+18], total 1307 447*0a6a1f1dSLionel Sambuc 448*0a6a1f1dSLionel Sambuc#if __ARM_ARCH__>=5 449*0a6a1f1dSLionel Sambuc ldmia sp!,{r4-r12,pc} 450*0a6a1f1dSLionel Sambuc#else 451*0a6a1f1dSLionel Sambuc ldmia sp!,{r4-r12,lr} 452*0a6a1f1dSLionel Sambuc tst lr,#1 453*0a6a1f1dSLionel Sambuc moveq pc,lr @ be binary compatible with V4, yet 454*0a6a1f1dSLionel Sambuc .word 0xe12fff1e @ interoperable with Thumb ISA:-) 455*0a6a1f1dSLionel Sambuc#endif 456*0a6a1f1dSLionel Sambuc.size sha1_block_data_order,.-sha1_block_data_order 457*0a6a1f1dSLionel Sambuc 458*0a6a1f1dSLionel Sambuc.align 5 459*0a6a1f1dSLionel Sambuc.LK_00_19: .word 0x5a827999 460*0a6a1f1dSLionel Sambuc.LK_20_39: .word 0x6ed9eba1 461*0a6a1f1dSLionel Sambuc.LK_40_59: .word 0x8f1bbcdc 462*0a6a1f1dSLionel Sambuc.LK_60_79: .word 0xca62c1d6 463*0a6a1f1dSLionel Sambuc#if __ARM_MAX_ARCH__>=7 464*0a6a1f1dSLionel Sambuc.LOPENSSL_armcap: 465*0a6a1f1dSLionel Sambuc.word OPENSSL_armcap_P-sha1_block_data_order 466*0a6a1f1dSLionel Sambuc#endif 467*0a6a1f1dSLionel Sambuc.asciz "SHA1 block transform for ARMv4/NEON/ARMv8, CRYPTOGAMS by <appro@openssl.org>" 468*0a6a1f1dSLionel Sambuc.align 5 469*0a6a1f1dSLionel Sambuc#if __ARM_MAX_ARCH__>=7 470*0a6a1f1dSLionel Sambuc.arch armv7-a 471*0a6a1f1dSLionel Sambuc.fpu neon 472*0a6a1f1dSLionel Sambuc 473*0a6a1f1dSLionel Sambuc.type sha1_block_data_order_neon,%function 474*0a6a1f1dSLionel Sambuc.align 4 475*0a6a1f1dSLionel Sambucsha1_block_data_order_neon: 476*0a6a1f1dSLionel Sambuc.LNEON: 477*0a6a1f1dSLionel Sambuc stmdb sp!,{r4-r12,lr} 478*0a6a1f1dSLionel Sambuc add r2,r1,r2,lsl#6 @ r2 to point at the end of r1 479*0a6a1f1dSLionel Sambuc @ dmb @ errata #451034 on early Cortex A8 480*0a6a1f1dSLionel Sambuc @ vstmdb sp!,{d8-d15} @ ABI specification says so 481*0a6a1f1dSLionel Sambuc mov r14,sp 482*0a6a1f1dSLionel Sambuc sub sp,sp,#64 @ alloca 483*0a6a1f1dSLionel Sambuc adr r8,.LK_00_19 484*0a6a1f1dSLionel Sambuc bic sp,sp,#15 @ align for 128-bit stores 485*0a6a1f1dSLionel Sambuc 486*0a6a1f1dSLionel Sambuc ldmia r0,{r3,r4,r5,r6,r7} @ load context 487*0a6a1f1dSLionel Sambuc mov r12,sp 488*0a6a1f1dSLionel Sambuc 489*0a6a1f1dSLionel Sambuc vld1.8 {q0-q1},[r1]! @ handles unaligned 490*0a6a1f1dSLionel Sambuc veor q15,q15,q15 491*0a6a1f1dSLionel Sambuc vld1.8 {q2-q3},[r1]! 492*0a6a1f1dSLionel Sambuc vld1.32 {d28[],d29[]},[r8,:32]! @ load K_00_19 493*0a6a1f1dSLionel Sambuc vrev32.8 q0,q0 @ yes, even on 494*0a6a1f1dSLionel Sambuc vrev32.8 q1,q1 @ big-endian... 495*0a6a1f1dSLionel Sambuc vrev32.8 q2,q2 496*0a6a1f1dSLionel Sambuc vadd.i32 q8,q0,q14 497*0a6a1f1dSLionel Sambuc vrev32.8 q3,q3 498*0a6a1f1dSLionel Sambuc vadd.i32 q9,q1,q14 499*0a6a1f1dSLionel Sambuc vst1.32 {q8},[r12,:128]! 500*0a6a1f1dSLionel Sambuc vadd.i32 q10,q2,q14 501*0a6a1f1dSLionel Sambuc vst1.32 {q9},[r12,:128]! 502*0a6a1f1dSLionel Sambuc vst1.32 {q10},[r12,:128]! 503*0a6a1f1dSLionel Sambuc ldr r9,[sp] @ big RAW stall 504*0a6a1f1dSLionel Sambuc 505*0a6a1f1dSLionel Sambuc.Loop_neon: 506*0a6a1f1dSLionel Sambuc vext.8 q8,q0,q1,#8 507*0a6a1f1dSLionel Sambuc bic r10,r6,r4 508*0a6a1f1dSLionel Sambuc add r7,r7,r9 509*0a6a1f1dSLionel Sambuc and r11,r5,r4 510*0a6a1f1dSLionel Sambuc vadd.i32 q13,q3,q14 511*0a6a1f1dSLionel Sambuc ldr r9,[sp,#4] 512*0a6a1f1dSLionel Sambuc add r7,r7,r3,ror#27 513*0a6a1f1dSLionel Sambuc vext.8 q12,q3,q15,#4 514*0a6a1f1dSLionel Sambuc eor r11,r11,r10 515*0a6a1f1dSLionel Sambuc mov r4,r4,ror#2 516*0a6a1f1dSLionel Sambuc add r7,r7,r11 517*0a6a1f1dSLionel Sambuc veor q8,q8,q0 518*0a6a1f1dSLionel Sambuc bic r10,r5,r3 519*0a6a1f1dSLionel Sambuc add r6,r6,r9 520*0a6a1f1dSLionel Sambuc veor q12,q12,q2 521*0a6a1f1dSLionel Sambuc and r11,r4,r3 522*0a6a1f1dSLionel Sambuc ldr r9,[sp,#8] 523*0a6a1f1dSLionel Sambuc veor q12,q12,q8 524*0a6a1f1dSLionel Sambuc add r6,r6,r7,ror#27 525*0a6a1f1dSLionel Sambuc eor r11,r11,r10 526*0a6a1f1dSLionel Sambuc vst1.32 {q13},[r12,:128]! 527*0a6a1f1dSLionel Sambuc sub r12,r12,#64 528*0a6a1f1dSLionel Sambuc mov r3,r3,ror#2 529*0a6a1f1dSLionel Sambuc add r6,r6,r11 530*0a6a1f1dSLionel Sambuc vext.8 q13,q15,q12,#4 531*0a6a1f1dSLionel Sambuc bic r10,r4,r7 532*0a6a1f1dSLionel Sambuc add r5,r5,r9 533*0a6a1f1dSLionel Sambuc vadd.i32 q8,q12,q12 534*0a6a1f1dSLionel Sambuc and r11,r3,r7 535*0a6a1f1dSLionel Sambuc ldr r9,[sp,#12] 536*0a6a1f1dSLionel Sambuc vsri.32 q8,q12,#31 537*0a6a1f1dSLionel Sambuc add r5,r5,r6,ror#27 538*0a6a1f1dSLionel Sambuc eor r11,r11,r10 539*0a6a1f1dSLionel Sambuc mov r7,r7,ror#2 540*0a6a1f1dSLionel Sambuc vshr.u32 q12,q13,#30 541*0a6a1f1dSLionel Sambuc add r5,r5,r11 542*0a6a1f1dSLionel Sambuc bic r10,r3,r6 543*0a6a1f1dSLionel Sambuc vshl.u32 q13,q13,#2 544*0a6a1f1dSLionel Sambuc add r4,r4,r9 545*0a6a1f1dSLionel Sambuc and r11,r7,r6 546*0a6a1f1dSLionel Sambuc veor q8,q8,q12 547*0a6a1f1dSLionel Sambuc ldr r9,[sp,#16] 548*0a6a1f1dSLionel Sambuc add r4,r4,r5,ror#27 549*0a6a1f1dSLionel Sambuc veor q8,q8,q13 550*0a6a1f1dSLionel Sambuc eor r11,r11,r10 551*0a6a1f1dSLionel Sambuc mov r6,r6,ror#2 552*0a6a1f1dSLionel Sambuc add r4,r4,r11 553*0a6a1f1dSLionel Sambuc vext.8 q9,q1,q2,#8 554*0a6a1f1dSLionel Sambuc bic r10,r7,r5 555*0a6a1f1dSLionel Sambuc add r3,r3,r9 556*0a6a1f1dSLionel Sambuc and r11,r6,r5 557*0a6a1f1dSLionel Sambuc vadd.i32 q13,q8,q14 558*0a6a1f1dSLionel Sambuc ldr r9,[sp,#20] 559*0a6a1f1dSLionel Sambuc vld1.32 {d28[],d29[]},[r8,:32]! 560*0a6a1f1dSLionel Sambuc add r3,r3,r4,ror#27 561*0a6a1f1dSLionel Sambuc vext.8 q12,q8,q15,#4 562*0a6a1f1dSLionel Sambuc eor r11,r11,r10 563*0a6a1f1dSLionel Sambuc mov r5,r5,ror#2 564*0a6a1f1dSLionel Sambuc add r3,r3,r11 565*0a6a1f1dSLionel Sambuc veor q9,q9,q1 566*0a6a1f1dSLionel Sambuc bic r10,r6,r4 567*0a6a1f1dSLionel Sambuc add r7,r7,r9 568*0a6a1f1dSLionel Sambuc veor q12,q12,q3 569*0a6a1f1dSLionel Sambuc and r11,r5,r4 570*0a6a1f1dSLionel Sambuc ldr r9,[sp,#24] 571*0a6a1f1dSLionel Sambuc veor q12,q12,q9 572*0a6a1f1dSLionel Sambuc add r7,r7,r3,ror#27 573*0a6a1f1dSLionel Sambuc eor r11,r11,r10 574*0a6a1f1dSLionel Sambuc vst1.32 {q13},[r12,:128]! 575*0a6a1f1dSLionel Sambuc mov r4,r4,ror#2 576*0a6a1f1dSLionel Sambuc add r7,r7,r11 577*0a6a1f1dSLionel Sambuc vext.8 q13,q15,q12,#4 578*0a6a1f1dSLionel Sambuc bic r10,r5,r3 579*0a6a1f1dSLionel Sambuc add r6,r6,r9 580*0a6a1f1dSLionel Sambuc vadd.i32 q9,q12,q12 581*0a6a1f1dSLionel Sambuc and r11,r4,r3 582*0a6a1f1dSLionel Sambuc ldr r9,[sp,#28] 583*0a6a1f1dSLionel Sambuc vsri.32 q9,q12,#31 584*0a6a1f1dSLionel Sambuc add r6,r6,r7,ror#27 585*0a6a1f1dSLionel Sambuc eor r11,r11,r10 586*0a6a1f1dSLionel Sambuc mov r3,r3,ror#2 587*0a6a1f1dSLionel Sambuc vshr.u32 q12,q13,#30 588*0a6a1f1dSLionel Sambuc add r6,r6,r11 589*0a6a1f1dSLionel Sambuc bic r10,r4,r7 590*0a6a1f1dSLionel Sambuc vshl.u32 q13,q13,#2 591*0a6a1f1dSLionel Sambuc add r5,r5,r9 592*0a6a1f1dSLionel Sambuc and r11,r3,r7 593*0a6a1f1dSLionel Sambuc veor q9,q9,q12 594*0a6a1f1dSLionel Sambuc ldr r9,[sp,#32] 595*0a6a1f1dSLionel Sambuc add r5,r5,r6,ror#27 596*0a6a1f1dSLionel Sambuc veor q9,q9,q13 597*0a6a1f1dSLionel Sambuc eor r11,r11,r10 598*0a6a1f1dSLionel Sambuc mov r7,r7,ror#2 599*0a6a1f1dSLionel Sambuc add r5,r5,r11 600*0a6a1f1dSLionel Sambuc vext.8 q10,q2,q3,#8 601*0a6a1f1dSLionel Sambuc bic r10,r3,r6 602*0a6a1f1dSLionel Sambuc add r4,r4,r9 603*0a6a1f1dSLionel Sambuc and r11,r7,r6 604*0a6a1f1dSLionel Sambuc vadd.i32 q13,q9,q14 605*0a6a1f1dSLionel Sambuc ldr r9,[sp,#36] 606*0a6a1f1dSLionel Sambuc add r4,r4,r5,ror#27 607*0a6a1f1dSLionel Sambuc vext.8 q12,q9,q15,#4 608*0a6a1f1dSLionel Sambuc eor r11,r11,r10 609*0a6a1f1dSLionel Sambuc mov r6,r6,ror#2 610*0a6a1f1dSLionel Sambuc add r4,r4,r11 611*0a6a1f1dSLionel Sambuc veor q10,q10,q2 612*0a6a1f1dSLionel Sambuc bic r10,r7,r5 613*0a6a1f1dSLionel Sambuc add r3,r3,r9 614*0a6a1f1dSLionel Sambuc veor q12,q12,q8 615*0a6a1f1dSLionel Sambuc and r11,r6,r5 616*0a6a1f1dSLionel Sambuc ldr r9,[sp,#40] 617*0a6a1f1dSLionel Sambuc veor q12,q12,q10 618*0a6a1f1dSLionel Sambuc add r3,r3,r4,ror#27 619*0a6a1f1dSLionel Sambuc eor r11,r11,r10 620*0a6a1f1dSLionel Sambuc vst1.32 {q13},[r12,:128]! 621*0a6a1f1dSLionel Sambuc mov r5,r5,ror#2 622*0a6a1f1dSLionel Sambuc add r3,r3,r11 623*0a6a1f1dSLionel Sambuc vext.8 q13,q15,q12,#4 624*0a6a1f1dSLionel Sambuc bic r10,r6,r4 625*0a6a1f1dSLionel Sambuc add r7,r7,r9 626*0a6a1f1dSLionel Sambuc vadd.i32 q10,q12,q12 627*0a6a1f1dSLionel Sambuc and r11,r5,r4 628*0a6a1f1dSLionel Sambuc ldr r9,[sp,#44] 629*0a6a1f1dSLionel Sambuc vsri.32 q10,q12,#31 630*0a6a1f1dSLionel Sambuc add r7,r7,r3,ror#27 631*0a6a1f1dSLionel Sambuc eor r11,r11,r10 632*0a6a1f1dSLionel Sambuc mov r4,r4,ror#2 633*0a6a1f1dSLionel Sambuc vshr.u32 q12,q13,#30 634*0a6a1f1dSLionel Sambuc add r7,r7,r11 635*0a6a1f1dSLionel Sambuc bic r10,r5,r3 636*0a6a1f1dSLionel Sambuc vshl.u32 q13,q13,#2 637*0a6a1f1dSLionel Sambuc add r6,r6,r9 638*0a6a1f1dSLionel Sambuc and r11,r4,r3 639*0a6a1f1dSLionel Sambuc veor q10,q10,q12 640*0a6a1f1dSLionel Sambuc ldr r9,[sp,#48] 641*0a6a1f1dSLionel Sambuc add r6,r6,r7,ror#27 642*0a6a1f1dSLionel Sambuc veor q10,q10,q13 643*0a6a1f1dSLionel Sambuc eor r11,r11,r10 644*0a6a1f1dSLionel Sambuc mov r3,r3,ror#2 645*0a6a1f1dSLionel Sambuc add r6,r6,r11 646*0a6a1f1dSLionel Sambuc vext.8 q11,q3,q8,#8 647*0a6a1f1dSLionel Sambuc bic r10,r4,r7 648*0a6a1f1dSLionel Sambuc add r5,r5,r9 649*0a6a1f1dSLionel Sambuc and r11,r3,r7 650*0a6a1f1dSLionel Sambuc vadd.i32 q13,q10,q14 651*0a6a1f1dSLionel Sambuc ldr r9,[sp,#52] 652*0a6a1f1dSLionel Sambuc add r5,r5,r6,ror#27 653*0a6a1f1dSLionel Sambuc vext.8 q12,q10,q15,#4 654*0a6a1f1dSLionel Sambuc eor r11,r11,r10 655*0a6a1f1dSLionel Sambuc mov r7,r7,ror#2 656*0a6a1f1dSLionel Sambuc add r5,r5,r11 657*0a6a1f1dSLionel Sambuc veor q11,q11,q3 658*0a6a1f1dSLionel Sambuc bic r10,r3,r6 659*0a6a1f1dSLionel Sambuc add r4,r4,r9 660*0a6a1f1dSLionel Sambuc veor q12,q12,q9 661*0a6a1f1dSLionel Sambuc and r11,r7,r6 662*0a6a1f1dSLionel Sambuc ldr r9,[sp,#56] 663*0a6a1f1dSLionel Sambuc veor q12,q12,q11 664*0a6a1f1dSLionel Sambuc add r4,r4,r5,ror#27 665*0a6a1f1dSLionel Sambuc eor r11,r11,r10 666*0a6a1f1dSLionel Sambuc vst1.32 {q13},[r12,:128]! 667*0a6a1f1dSLionel Sambuc mov r6,r6,ror#2 668*0a6a1f1dSLionel Sambuc add r4,r4,r11 669*0a6a1f1dSLionel Sambuc vext.8 q13,q15,q12,#4 670*0a6a1f1dSLionel Sambuc bic r10,r7,r5 671*0a6a1f1dSLionel Sambuc add r3,r3,r9 672*0a6a1f1dSLionel Sambuc vadd.i32 q11,q12,q12 673*0a6a1f1dSLionel Sambuc and r11,r6,r5 674*0a6a1f1dSLionel Sambuc ldr r9,[sp,#60] 675*0a6a1f1dSLionel Sambuc vsri.32 q11,q12,#31 676*0a6a1f1dSLionel Sambuc add r3,r3,r4,ror#27 677*0a6a1f1dSLionel Sambuc eor r11,r11,r10 678*0a6a1f1dSLionel Sambuc mov r5,r5,ror#2 679*0a6a1f1dSLionel Sambuc vshr.u32 q12,q13,#30 680*0a6a1f1dSLionel Sambuc add r3,r3,r11 681*0a6a1f1dSLionel Sambuc bic r10,r6,r4 682*0a6a1f1dSLionel Sambuc vshl.u32 q13,q13,#2 683*0a6a1f1dSLionel Sambuc add r7,r7,r9 684*0a6a1f1dSLionel Sambuc and r11,r5,r4 685*0a6a1f1dSLionel Sambuc veor q11,q11,q12 686*0a6a1f1dSLionel Sambuc ldr r9,[sp,#0] 687*0a6a1f1dSLionel Sambuc add r7,r7,r3,ror#27 688*0a6a1f1dSLionel Sambuc veor q11,q11,q13 689*0a6a1f1dSLionel Sambuc eor r11,r11,r10 690*0a6a1f1dSLionel Sambuc mov r4,r4,ror#2 691*0a6a1f1dSLionel Sambuc add r7,r7,r11 692*0a6a1f1dSLionel Sambuc vext.8 q12,q10,q11,#8 693*0a6a1f1dSLionel Sambuc bic r10,r5,r3 694*0a6a1f1dSLionel Sambuc add r6,r6,r9 695*0a6a1f1dSLionel Sambuc and r11,r4,r3 696*0a6a1f1dSLionel Sambuc veor q0,q0,q8 697*0a6a1f1dSLionel Sambuc ldr r9,[sp,#4] 698*0a6a1f1dSLionel Sambuc add r6,r6,r7,ror#27 699*0a6a1f1dSLionel Sambuc veor q0,q0,q1 700*0a6a1f1dSLionel Sambuc eor r11,r11,r10 701*0a6a1f1dSLionel Sambuc mov r3,r3,ror#2 702*0a6a1f1dSLionel Sambuc vadd.i32 q13,q11,q14 703*0a6a1f1dSLionel Sambuc add r6,r6,r11 704*0a6a1f1dSLionel Sambuc bic r10,r4,r7 705*0a6a1f1dSLionel Sambuc veor q12,q12,q0 706*0a6a1f1dSLionel Sambuc add r5,r5,r9 707*0a6a1f1dSLionel Sambuc and r11,r3,r7 708*0a6a1f1dSLionel Sambuc vshr.u32 q0,q12,#30 709*0a6a1f1dSLionel Sambuc ldr r9,[sp,#8] 710*0a6a1f1dSLionel Sambuc add r5,r5,r6,ror#27 711*0a6a1f1dSLionel Sambuc vst1.32 {q13},[r12,:128]! 712*0a6a1f1dSLionel Sambuc sub r12,r12,#64 713*0a6a1f1dSLionel Sambuc eor r11,r11,r10 714*0a6a1f1dSLionel Sambuc mov r7,r7,ror#2 715*0a6a1f1dSLionel Sambuc vsli.32 q0,q12,#2 716*0a6a1f1dSLionel Sambuc add r5,r5,r11 717*0a6a1f1dSLionel Sambuc bic r10,r3,r6 718*0a6a1f1dSLionel Sambuc add r4,r4,r9 719*0a6a1f1dSLionel Sambuc and r11,r7,r6 720*0a6a1f1dSLionel Sambuc ldr r9,[sp,#12] 721*0a6a1f1dSLionel Sambuc add r4,r4,r5,ror#27 722*0a6a1f1dSLionel Sambuc eor r11,r11,r10 723*0a6a1f1dSLionel Sambuc mov r6,r6,ror#2 724*0a6a1f1dSLionel Sambuc add r4,r4,r11 725*0a6a1f1dSLionel Sambuc bic r10,r7,r5 726*0a6a1f1dSLionel Sambuc add r3,r3,r9 727*0a6a1f1dSLionel Sambuc and r11,r6,r5 728*0a6a1f1dSLionel Sambuc ldr r9,[sp,#16] 729*0a6a1f1dSLionel Sambuc add r3,r3,r4,ror#27 730*0a6a1f1dSLionel Sambuc eor r11,r11,r10 731*0a6a1f1dSLionel Sambuc mov r5,r5,ror#2 732*0a6a1f1dSLionel Sambuc add r3,r3,r11 733*0a6a1f1dSLionel Sambuc vext.8 q12,q11,q0,#8 734*0a6a1f1dSLionel Sambuc eor r10,r4,r6 735*0a6a1f1dSLionel Sambuc add r7,r7,r9 736*0a6a1f1dSLionel Sambuc ldr r9,[sp,#20] 737*0a6a1f1dSLionel Sambuc veor q1,q1,q9 738*0a6a1f1dSLionel Sambuc eor r11,r10,r5 739*0a6a1f1dSLionel Sambuc add r7,r7,r3,ror#27 740*0a6a1f1dSLionel Sambuc veor q1,q1,q2 741*0a6a1f1dSLionel Sambuc mov r4,r4,ror#2 742*0a6a1f1dSLionel Sambuc add r7,r7,r11 743*0a6a1f1dSLionel Sambuc vadd.i32 q13,q0,q14 744*0a6a1f1dSLionel Sambuc eor r10,r3,r5 745*0a6a1f1dSLionel Sambuc add r6,r6,r9 746*0a6a1f1dSLionel Sambuc veor q12,q12,q1 747*0a6a1f1dSLionel Sambuc ldr r9,[sp,#24] 748*0a6a1f1dSLionel Sambuc eor r11,r10,r4 749*0a6a1f1dSLionel Sambuc vshr.u32 q1,q12,#30 750*0a6a1f1dSLionel Sambuc add r6,r6,r7,ror#27 751*0a6a1f1dSLionel Sambuc mov r3,r3,ror#2 752*0a6a1f1dSLionel Sambuc vst1.32 {q13},[r12,:128]! 753*0a6a1f1dSLionel Sambuc add r6,r6,r11 754*0a6a1f1dSLionel Sambuc eor r10,r7,r4 755*0a6a1f1dSLionel Sambuc vsli.32 q1,q12,#2 756*0a6a1f1dSLionel Sambuc add r5,r5,r9 757*0a6a1f1dSLionel Sambuc ldr r9,[sp,#28] 758*0a6a1f1dSLionel Sambuc eor r11,r10,r3 759*0a6a1f1dSLionel Sambuc add r5,r5,r6,ror#27 760*0a6a1f1dSLionel Sambuc mov r7,r7,ror#2 761*0a6a1f1dSLionel Sambuc add r5,r5,r11 762*0a6a1f1dSLionel Sambuc eor r10,r6,r3 763*0a6a1f1dSLionel Sambuc add r4,r4,r9 764*0a6a1f1dSLionel Sambuc ldr r9,[sp,#32] 765*0a6a1f1dSLionel Sambuc eor r11,r10,r7 766*0a6a1f1dSLionel Sambuc add r4,r4,r5,ror#27 767*0a6a1f1dSLionel Sambuc mov r6,r6,ror#2 768*0a6a1f1dSLionel Sambuc add r4,r4,r11 769*0a6a1f1dSLionel Sambuc vext.8 q12,q0,q1,#8 770*0a6a1f1dSLionel Sambuc eor r10,r5,r7 771*0a6a1f1dSLionel Sambuc add r3,r3,r9 772*0a6a1f1dSLionel Sambuc ldr r9,[sp,#36] 773*0a6a1f1dSLionel Sambuc veor q2,q2,q10 774*0a6a1f1dSLionel Sambuc eor r11,r10,r6 775*0a6a1f1dSLionel Sambuc add r3,r3,r4,ror#27 776*0a6a1f1dSLionel Sambuc veor q2,q2,q3 777*0a6a1f1dSLionel Sambuc mov r5,r5,ror#2 778*0a6a1f1dSLionel Sambuc add r3,r3,r11 779*0a6a1f1dSLionel Sambuc vadd.i32 q13,q1,q14 780*0a6a1f1dSLionel Sambuc eor r10,r4,r6 781*0a6a1f1dSLionel Sambuc vld1.32 {d28[],d29[]},[r8,:32]! 782*0a6a1f1dSLionel Sambuc add r7,r7,r9 783*0a6a1f1dSLionel Sambuc veor q12,q12,q2 784*0a6a1f1dSLionel Sambuc ldr r9,[sp,#40] 785*0a6a1f1dSLionel Sambuc eor r11,r10,r5 786*0a6a1f1dSLionel Sambuc vshr.u32 q2,q12,#30 787*0a6a1f1dSLionel Sambuc add r7,r7,r3,ror#27 788*0a6a1f1dSLionel Sambuc mov r4,r4,ror#2 789*0a6a1f1dSLionel Sambuc vst1.32 {q13},[r12,:128]! 790*0a6a1f1dSLionel Sambuc add r7,r7,r11 791*0a6a1f1dSLionel Sambuc eor r10,r3,r5 792*0a6a1f1dSLionel Sambuc vsli.32 q2,q12,#2 793*0a6a1f1dSLionel Sambuc add r6,r6,r9 794*0a6a1f1dSLionel Sambuc ldr r9,[sp,#44] 795*0a6a1f1dSLionel Sambuc eor r11,r10,r4 796*0a6a1f1dSLionel Sambuc add r6,r6,r7,ror#27 797*0a6a1f1dSLionel Sambuc mov r3,r3,ror#2 798*0a6a1f1dSLionel Sambuc add r6,r6,r11 799*0a6a1f1dSLionel Sambuc eor r10,r7,r4 800*0a6a1f1dSLionel Sambuc add r5,r5,r9 801*0a6a1f1dSLionel Sambuc ldr r9,[sp,#48] 802*0a6a1f1dSLionel Sambuc eor r11,r10,r3 803*0a6a1f1dSLionel Sambuc add r5,r5,r6,ror#27 804*0a6a1f1dSLionel Sambuc mov r7,r7,ror#2 805*0a6a1f1dSLionel Sambuc add r5,r5,r11 806*0a6a1f1dSLionel Sambuc vext.8 q12,q1,q2,#8 807*0a6a1f1dSLionel Sambuc eor r10,r6,r3 808*0a6a1f1dSLionel Sambuc add r4,r4,r9 809*0a6a1f1dSLionel Sambuc ldr r9,[sp,#52] 810*0a6a1f1dSLionel Sambuc veor q3,q3,q11 811*0a6a1f1dSLionel Sambuc eor r11,r10,r7 812*0a6a1f1dSLionel Sambuc add r4,r4,r5,ror#27 813*0a6a1f1dSLionel Sambuc veor q3,q3,q8 814*0a6a1f1dSLionel Sambuc mov r6,r6,ror#2 815*0a6a1f1dSLionel Sambuc add r4,r4,r11 816*0a6a1f1dSLionel Sambuc vadd.i32 q13,q2,q14 817*0a6a1f1dSLionel Sambuc eor r10,r5,r7 818*0a6a1f1dSLionel Sambuc add r3,r3,r9 819*0a6a1f1dSLionel Sambuc veor q12,q12,q3 820*0a6a1f1dSLionel Sambuc ldr r9,[sp,#56] 821*0a6a1f1dSLionel Sambuc eor r11,r10,r6 822*0a6a1f1dSLionel Sambuc vshr.u32 q3,q12,#30 823*0a6a1f1dSLionel Sambuc add r3,r3,r4,ror#27 824*0a6a1f1dSLionel Sambuc mov r5,r5,ror#2 825*0a6a1f1dSLionel Sambuc vst1.32 {q13},[r12,:128]! 826*0a6a1f1dSLionel Sambuc add r3,r3,r11 827*0a6a1f1dSLionel Sambuc eor r10,r4,r6 828*0a6a1f1dSLionel Sambuc vsli.32 q3,q12,#2 829*0a6a1f1dSLionel Sambuc add r7,r7,r9 830*0a6a1f1dSLionel Sambuc ldr r9,[sp,#60] 831*0a6a1f1dSLionel Sambuc eor r11,r10,r5 832*0a6a1f1dSLionel Sambuc add r7,r7,r3,ror#27 833*0a6a1f1dSLionel Sambuc mov r4,r4,ror#2 834*0a6a1f1dSLionel Sambuc add r7,r7,r11 835*0a6a1f1dSLionel Sambuc eor r10,r3,r5 836*0a6a1f1dSLionel Sambuc add r6,r6,r9 837*0a6a1f1dSLionel Sambuc ldr r9,[sp,#0] 838*0a6a1f1dSLionel Sambuc eor r11,r10,r4 839*0a6a1f1dSLionel Sambuc add r6,r6,r7,ror#27 840*0a6a1f1dSLionel Sambuc mov r3,r3,ror#2 841*0a6a1f1dSLionel Sambuc add r6,r6,r11 842*0a6a1f1dSLionel Sambuc vext.8 q12,q2,q3,#8 843*0a6a1f1dSLionel Sambuc eor r10,r7,r4 844*0a6a1f1dSLionel Sambuc add r5,r5,r9 845*0a6a1f1dSLionel Sambuc ldr r9,[sp,#4] 846*0a6a1f1dSLionel Sambuc veor q8,q8,q0 847*0a6a1f1dSLionel Sambuc eor r11,r10,r3 848*0a6a1f1dSLionel Sambuc add r5,r5,r6,ror#27 849*0a6a1f1dSLionel Sambuc veor q8,q8,q9 850*0a6a1f1dSLionel Sambuc mov r7,r7,ror#2 851*0a6a1f1dSLionel Sambuc add r5,r5,r11 852*0a6a1f1dSLionel Sambuc vadd.i32 q13,q3,q14 853*0a6a1f1dSLionel Sambuc eor r10,r6,r3 854*0a6a1f1dSLionel Sambuc add r4,r4,r9 855*0a6a1f1dSLionel Sambuc veor q12,q12,q8 856*0a6a1f1dSLionel Sambuc ldr r9,[sp,#8] 857*0a6a1f1dSLionel Sambuc eor r11,r10,r7 858*0a6a1f1dSLionel Sambuc vshr.u32 q8,q12,#30 859*0a6a1f1dSLionel Sambuc add r4,r4,r5,ror#27 860*0a6a1f1dSLionel Sambuc mov r6,r6,ror#2 861*0a6a1f1dSLionel Sambuc vst1.32 {q13},[r12,:128]! 862*0a6a1f1dSLionel Sambuc sub r12,r12,#64 863*0a6a1f1dSLionel Sambuc add r4,r4,r11 864*0a6a1f1dSLionel Sambuc eor r10,r5,r7 865*0a6a1f1dSLionel Sambuc vsli.32 q8,q12,#2 866*0a6a1f1dSLionel Sambuc add r3,r3,r9 867*0a6a1f1dSLionel Sambuc ldr r9,[sp,#12] 868*0a6a1f1dSLionel Sambuc eor r11,r10,r6 869*0a6a1f1dSLionel Sambuc add r3,r3,r4,ror#27 870*0a6a1f1dSLionel Sambuc mov r5,r5,ror#2 871*0a6a1f1dSLionel Sambuc add r3,r3,r11 872*0a6a1f1dSLionel Sambuc eor r10,r4,r6 873*0a6a1f1dSLionel Sambuc add r7,r7,r9 874*0a6a1f1dSLionel Sambuc ldr r9,[sp,#16] 875*0a6a1f1dSLionel Sambuc eor r11,r10,r5 876*0a6a1f1dSLionel Sambuc add r7,r7,r3,ror#27 877*0a6a1f1dSLionel Sambuc mov r4,r4,ror#2 878*0a6a1f1dSLionel Sambuc add r7,r7,r11 879*0a6a1f1dSLionel Sambuc vext.8 q12,q3,q8,#8 880*0a6a1f1dSLionel Sambuc eor r10,r3,r5 881*0a6a1f1dSLionel Sambuc add r6,r6,r9 882*0a6a1f1dSLionel Sambuc ldr r9,[sp,#20] 883*0a6a1f1dSLionel Sambuc veor q9,q9,q1 884*0a6a1f1dSLionel Sambuc eor r11,r10,r4 885*0a6a1f1dSLionel Sambuc add r6,r6,r7,ror#27 886*0a6a1f1dSLionel Sambuc veor q9,q9,q10 887*0a6a1f1dSLionel Sambuc mov r3,r3,ror#2 888*0a6a1f1dSLionel Sambuc add r6,r6,r11 889*0a6a1f1dSLionel Sambuc vadd.i32 q13,q8,q14 890*0a6a1f1dSLionel Sambuc eor r10,r7,r4 891*0a6a1f1dSLionel Sambuc add r5,r5,r9 892*0a6a1f1dSLionel Sambuc veor q12,q12,q9 893*0a6a1f1dSLionel Sambuc ldr r9,[sp,#24] 894*0a6a1f1dSLionel Sambuc eor r11,r10,r3 895*0a6a1f1dSLionel Sambuc vshr.u32 q9,q12,#30 896*0a6a1f1dSLionel Sambuc add r5,r5,r6,ror#27 897*0a6a1f1dSLionel Sambuc mov r7,r7,ror#2 898*0a6a1f1dSLionel Sambuc vst1.32 {q13},[r12,:128]! 899*0a6a1f1dSLionel Sambuc add r5,r5,r11 900*0a6a1f1dSLionel Sambuc eor r10,r6,r3 901*0a6a1f1dSLionel Sambuc vsli.32 q9,q12,#2 902*0a6a1f1dSLionel Sambuc add r4,r4,r9 903*0a6a1f1dSLionel Sambuc ldr r9,[sp,#28] 904*0a6a1f1dSLionel Sambuc eor r11,r10,r7 905*0a6a1f1dSLionel Sambuc add r4,r4,r5,ror#27 906*0a6a1f1dSLionel Sambuc mov r6,r6,ror#2 907*0a6a1f1dSLionel Sambuc add r4,r4,r11 908*0a6a1f1dSLionel Sambuc eor r10,r5,r7 909*0a6a1f1dSLionel Sambuc add r3,r3,r9 910*0a6a1f1dSLionel Sambuc ldr r9,[sp,#32] 911*0a6a1f1dSLionel Sambuc eor r11,r10,r6 912*0a6a1f1dSLionel Sambuc add r3,r3,r4,ror#27 913*0a6a1f1dSLionel Sambuc mov r5,r5,ror#2 914*0a6a1f1dSLionel Sambuc add r3,r3,r11 915*0a6a1f1dSLionel Sambuc vext.8 q12,q8,q9,#8 916*0a6a1f1dSLionel Sambuc add r7,r7,r9 917*0a6a1f1dSLionel Sambuc and r10,r5,r6 918*0a6a1f1dSLionel Sambuc ldr r9,[sp,#36] 919*0a6a1f1dSLionel Sambuc veor q10,q10,q2 920*0a6a1f1dSLionel Sambuc add r7,r7,r3,ror#27 921*0a6a1f1dSLionel Sambuc eor r11,r5,r6 922*0a6a1f1dSLionel Sambuc veor q10,q10,q11 923*0a6a1f1dSLionel Sambuc add r7,r7,r10 924*0a6a1f1dSLionel Sambuc and r11,r11,r4 925*0a6a1f1dSLionel Sambuc vadd.i32 q13,q9,q14 926*0a6a1f1dSLionel Sambuc mov r4,r4,ror#2 927*0a6a1f1dSLionel Sambuc add r7,r7,r11 928*0a6a1f1dSLionel Sambuc veor q12,q12,q10 929*0a6a1f1dSLionel Sambuc add r6,r6,r9 930*0a6a1f1dSLionel Sambuc and r10,r4,r5 931*0a6a1f1dSLionel Sambuc vshr.u32 q10,q12,#30 932*0a6a1f1dSLionel Sambuc ldr r9,[sp,#40] 933*0a6a1f1dSLionel Sambuc add r6,r6,r7,ror#27 934*0a6a1f1dSLionel Sambuc vst1.32 {q13},[r12,:128]! 935*0a6a1f1dSLionel Sambuc eor r11,r4,r5 936*0a6a1f1dSLionel Sambuc add r6,r6,r10 937*0a6a1f1dSLionel Sambuc vsli.32 q10,q12,#2 938*0a6a1f1dSLionel Sambuc and r11,r11,r3 939*0a6a1f1dSLionel Sambuc mov r3,r3,ror#2 940*0a6a1f1dSLionel Sambuc add r6,r6,r11 941*0a6a1f1dSLionel Sambuc add r5,r5,r9 942*0a6a1f1dSLionel Sambuc and r10,r3,r4 943*0a6a1f1dSLionel Sambuc ldr r9,[sp,#44] 944*0a6a1f1dSLionel Sambuc add r5,r5,r6,ror#27 945*0a6a1f1dSLionel Sambuc eor r11,r3,r4 946*0a6a1f1dSLionel Sambuc add r5,r5,r10 947*0a6a1f1dSLionel Sambuc and r11,r11,r7 948*0a6a1f1dSLionel Sambuc mov r7,r7,ror#2 949*0a6a1f1dSLionel Sambuc add r5,r5,r11 950*0a6a1f1dSLionel Sambuc add r4,r4,r9 951*0a6a1f1dSLionel Sambuc and r10,r7,r3 952*0a6a1f1dSLionel Sambuc ldr r9,[sp,#48] 953*0a6a1f1dSLionel Sambuc add r4,r4,r5,ror#27 954*0a6a1f1dSLionel Sambuc eor r11,r7,r3 955*0a6a1f1dSLionel Sambuc add r4,r4,r10 956*0a6a1f1dSLionel Sambuc and r11,r11,r6 957*0a6a1f1dSLionel Sambuc mov r6,r6,ror#2 958*0a6a1f1dSLionel Sambuc add r4,r4,r11 959*0a6a1f1dSLionel Sambuc vext.8 q12,q9,q10,#8 960*0a6a1f1dSLionel Sambuc add r3,r3,r9 961*0a6a1f1dSLionel Sambuc and r10,r6,r7 962*0a6a1f1dSLionel Sambuc ldr r9,[sp,#52] 963*0a6a1f1dSLionel Sambuc veor q11,q11,q3 964*0a6a1f1dSLionel Sambuc add r3,r3,r4,ror#27 965*0a6a1f1dSLionel Sambuc eor r11,r6,r7 966*0a6a1f1dSLionel Sambuc veor q11,q11,q0 967*0a6a1f1dSLionel Sambuc add r3,r3,r10 968*0a6a1f1dSLionel Sambuc and r11,r11,r5 969*0a6a1f1dSLionel Sambuc vadd.i32 q13,q10,q14 970*0a6a1f1dSLionel Sambuc mov r5,r5,ror#2 971*0a6a1f1dSLionel Sambuc vld1.32 {d28[],d29[]},[r8,:32]! 972*0a6a1f1dSLionel Sambuc add r3,r3,r11 973*0a6a1f1dSLionel Sambuc veor q12,q12,q11 974*0a6a1f1dSLionel Sambuc add r7,r7,r9 975*0a6a1f1dSLionel Sambuc and r10,r5,r6 976*0a6a1f1dSLionel Sambuc vshr.u32 q11,q12,#30 977*0a6a1f1dSLionel Sambuc ldr r9,[sp,#56] 978*0a6a1f1dSLionel Sambuc add r7,r7,r3,ror#27 979*0a6a1f1dSLionel Sambuc vst1.32 {q13},[r12,:128]! 980*0a6a1f1dSLionel Sambuc eor r11,r5,r6 981*0a6a1f1dSLionel Sambuc add r7,r7,r10 982*0a6a1f1dSLionel Sambuc vsli.32 q11,q12,#2 983*0a6a1f1dSLionel Sambuc and r11,r11,r4 984*0a6a1f1dSLionel Sambuc mov r4,r4,ror#2 985*0a6a1f1dSLionel Sambuc add r7,r7,r11 986*0a6a1f1dSLionel Sambuc add r6,r6,r9 987*0a6a1f1dSLionel Sambuc and r10,r4,r5 988*0a6a1f1dSLionel Sambuc ldr r9,[sp,#60] 989*0a6a1f1dSLionel Sambuc add r6,r6,r7,ror#27 990*0a6a1f1dSLionel Sambuc eor r11,r4,r5 991*0a6a1f1dSLionel Sambuc add r6,r6,r10 992*0a6a1f1dSLionel Sambuc and r11,r11,r3 993*0a6a1f1dSLionel Sambuc mov r3,r3,ror#2 994*0a6a1f1dSLionel Sambuc add r6,r6,r11 995*0a6a1f1dSLionel Sambuc add r5,r5,r9 996*0a6a1f1dSLionel Sambuc and r10,r3,r4 997*0a6a1f1dSLionel Sambuc ldr r9,[sp,#0] 998*0a6a1f1dSLionel Sambuc add r5,r5,r6,ror#27 999*0a6a1f1dSLionel Sambuc eor r11,r3,r4 1000*0a6a1f1dSLionel Sambuc add r5,r5,r10 1001*0a6a1f1dSLionel Sambuc and r11,r11,r7 1002*0a6a1f1dSLionel Sambuc mov r7,r7,ror#2 1003*0a6a1f1dSLionel Sambuc add r5,r5,r11 1004*0a6a1f1dSLionel Sambuc vext.8 q12,q10,q11,#8 1005*0a6a1f1dSLionel Sambuc add r4,r4,r9 1006*0a6a1f1dSLionel Sambuc and r10,r7,r3 1007*0a6a1f1dSLionel Sambuc ldr r9,[sp,#4] 1008*0a6a1f1dSLionel Sambuc veor q0,q0,q8 1009*0a6a1f1dSLionel Sambuc add r4,r4,r5,ror#27 1010*0a6a1f1dSLionel Sambuc eor r11,r7,r3 1011*0a6a1f1dSLionel Sambuc veor q0,q0,q1 1012*0a6a1f1dSLionel Sambuc add r4,r4,r10 1013*0a6a1f1dSLionel Sambuc and r11,r11,r6 1014*0a6a1f1dSLionel Sambuc vadd.i32 q13,q11,q14 1015*0a6a1f1dSLionel Sambuc mov r6,r6,ror#2 1016*0a6a1f1dSLionel Sambuc add r4,r4,r11 1017*0a6a1f1dSLionel Sambuc veor q12,q12,q0 1018*0a6a1f1dSLionel Sambuc add r3,r3,r9 1019*0a6a1f1dSLionel Sambuc and r10,r6,r7 1020*0a6a1f1dSLionel Sambuc vshr.u32 q0,q12,#30 1021*0a6a1f1dSLionel Sambuc ldr r9,[sp,#8] 1022*0a6a1f1dSLionel Sambuc add r3,r3,r4,ror#27 1023*0a6a1f1dSLionel Sambuc vst1.32 {q13},[r12,:128]! 1024*0a6a1f1dSLionel Sambuc sub r12,r12,#64 1025*0a6a1f1dSLionel Sambuc eor r11,r6,r7 1026*0a6a1f1dSLionel Sambuc add r3,r3,r10 1027*0a6a1f1dSLionel Sambuc vsli.32 q0,q12,#2 1028*0a6a1f1dSLionel Sambuc and r11,r11,r5 1029*0a6a1f1dSLionel Sambuc mov r5,r5,ror#2 1030*0a6a1f1dSLionel Sambuc add r3,r3,r11 1031*0a6a1f1dSLionel Sambuc add r7,r7,r9 1032*0a6a1f1dSLionel Sambuc and r10,r5,r6 1033*0a6a1f1dSLionel Sambuc ldr r9,[sp,#12] 1034*0a6a1f1dSLionel Sambuc add r7,r7,r3,ror#27 1035*0a6a1f1dSLionel Sambuc eor r11,r5,r6 1036*0a6a1f1dSLionel Sambuc add r7,r7,r10 1037*0a6a1f1dSLionel Sambuc and r11,r11,r4 1038*0a6a1f1dSLionel Sambuc mov r4,r4,ror#2 1039*0a6a1f1dSLionel Sambuc add r7,r7,r11 1040*0a6a1f1dSLionel Sambuc add r6,r6,r9 1041*0a6a1f1dSLionel Sambuc and r10,r4,r5 1042*0a6a1f1dSLionel Sambuc ldr r9,[sp,#16] 1043*0a6a1f1dSLionel Sambuc add r6,r6,r7,ror#27 1044*0a6a1f1dSLionel Sambuc eor r11,r4,r5 1045*0a6a1f1dSLionel Sambuc add r6,r6,r10 1046*0a6a1f1dSLionel Sambuc and r11,r11,r3 1047*0a6a1f1dSLionel Sambuc mov r3,r3,ror#2 1048*0a6a1f1dSLionel Sambuc add r6,r6,r11 1049*0a6a1f1dSLionel Sambuc vext.8 q12,q11,q0,#8 1050*0a6a1f1dSLionel Sambuc add r5,r5,r9 1051*0a6a1f1dSLionel Sambuc and r10,r3,r4 1052*0a6a1f1dSLionel Sambuc ldr r9,[sp,#20] 1053*0a6a1f1dSLionel Sambuc veor q1,q1,q9 1054*0a6a1f1dSLionel Sambuc add r5,r5,r6,ror#27 1055*0a6a1f1dSLionel Sambuc eor r11,r3,r4 1056*0a6a1f1dSLionel Sambuc veor q1,q1,q2 1057*0a6a1f1dSLionel Sambuc add r5,r5,r10 1058*0a6a1f1dSLionel Sambuc and r11,r11,r7 1059*0a6a1f1dSLionel Sambuc vadd.i32 q13,q0,q14 1060*0a6a1f1dSLionel Sambuc mov r7,r7,ror#2 1061*0a6a1f1dSLionel Sambuc add r5,r5,r11 1062*0a6a1f1dSLionel Sambuc veor q12,q12,q1 1063*0a6a1f1dSLionel Sambuc add r4,r4,r9 1064*0a6a1f1dSLionel Sambuc and r10,r7,r3 1065*0a6a1f1dSLionel Sambuc vshr.u32 q1,q12,#30 1066*0a6a1f1dSLionel Sambuc ldr r9,[sp,#24] 1067*0a6a1f1dSLionel Sambuc add r4,r4,r5,ror#27 1068*0a6a1f1dSLionel Sambuc vst1.32 {q13},[r12,:128]! 1069*0a6a1f1dSLionel Sambuc eor r11,r7,r3 1070*0a6a1f1dSLionel Sambuc add r4,r4,r10 1071*0a6a1f1dSLionel Sambuc vsli.32 q1,q12,#2 1072*0a6a1f1dSLionel Sambuc and r11,r11,r6 1073*0a6a1f1dSLionel Sambuc mov r6,r6,ror#2 1074*0a6a1f1dSLionel Sambuc add r4,r4,r11 1075*0a6a1f1dSLionel Sambuc add r3,r3,r9 1076*0a6a1f1dSLionel Sambuc and r10,r6,r7 1077*0a6a1f1dSLionel Sambuc ldr r9,[sp,#28] 1078*0a6a1f1dSLionel Sambuc add r3,r3,r4,ror#27 1079*0a6a1f1dSLionel Sambuc eor r11,r6,r7 1080*0a6a1f1dSLionel Sambuc add r3,r3,r10 1081*0a6a1f1dSLionel Sambuc and r11,r11,r5 1082*0a6a1f1dSLionel Sambuc mov r5,r5,ror#2 1083*0a6a1f1dSLionel Sambuc add r3,r3,r11 1084*0a6a1f1dSLionel Sambuc add r7,r7,r9 1085*0a6a1f1dSLionel Sambuc and r10,r5,r6 1086*0a6a1f1dSLionel Sambuc ldr r9,[sp,#32] 1087*0a6a1f1dSLionel Sambuc add r7,r7,r3,ror#27 1088*0a6a1f1dSLionel Sambuc eor r11,r5,r6 1089*0a6a1f1dSLionel Sambuc add r7,r7,r10 1090*0a6a1f1dSLionel Sambuc and r11,r11,r4 1091*0a6a1f1dSLionel Sambuc mov r4,r4,ror#2 1092*0a6a1f1dSLionel Sambuc add r7,r7,r11 1093*0a6a1f1dSLionel Sambuc vext.8 q12,q0,q1,#8 1094*0a6a1f1dSLionel Sambuc add r6,r6,r9 1095*0a6a1f1dSLionel Sambuc and r10,r4,r5 1096*0a6a1f1dSLionel Sambuc ldr r9,[sp,#36] 1097*0a6a1f1dSLionel Sambuc veor q2,q2,q10 1098*0a6a1f1dSLionel Sambuc add r6,r6,r7,ror#27 1099*0a6a1f1dSLionel Sambuc eor r11,r4,r5 1100*0a6a1f1dSLionel Sambuc veor q2,q2,q3 1101*0a6a1f1dSLionel Sambuc add r6,r6,r10 1102*0a6a1f1dSLionel Sambuc and r11,r11,r3 1103*0a6a1f1dSLionel Sambuc vadd.i32 q13,q1,q14 1104*0a6a1f1dSLionel Sambuc mov r3,r3,ror#2 1105*0a6a1f1dSLionel Sambuc add r6,r6,r11 1106*0a6a1f1dSLionel Sambuc veor q12,q12,q2 1107*0a6a1f1dSLionel Sambuc add r5,r5,r9 1108*0a6a1f1dSLionel Sambuc and r10,r3,r4 1109*0a6a1f1dSLionel Sambuc vshr.u32 q2,q12,#30 1110*0a6a1f1dSLionel Sambuc ldr r9,[sp,#40] 1111*0a6a1f1dSLionel Sambuc add r5,r5,r6,ror#27 1112*0a6a1f1dSLionel Sambuc vst1.32 {q13},[r12,:128]! 1113*0a6a1f1dSLionel Sambuc eor r11,r3,r4 1114*0a6a1f1dSLionel Sambuc add r5,r5,r10 1115*0a6a1f1dSLionel Sambuc vsli.32 q2,q12,#2 1116*0a6a1f1dSLionel Sambuc and r11,r11,r7 1117*0a6a1f1dSLionel Sambuc mov r7,r7,ror#2 1118*0a6a1f1dSLionel Sambuc add r5,r5,r11 1119*0a6a1f1dSLionel Sambuc add r4,r4,r9 1120*0a6a1f1dSLionel Sambuc and r10,r7,r3 1121*0a6a1f1dSLionel Sambuc ldr r9,[sp,#44] 1122*0a6a1f1dSLionel Sambuc add r4,r4,r5,ror#27 1123*0a6a1f1dSLionel Sambuc eor r11,r7,r3 1124*0a6a1f1dSLionel Sambuc add r4,r4,r10 1125*0a6a1f1dSLionel Sambuc and r11,r11,r6 1126*0a6a1f1dSLionel Sambuc mov r6,r6,ror#2 1127*0a6a1f1dSLionel Sambuc add r4,r4,r11 1128*0a6a1f1dSLionel Sambuc add r3,r3,r9 1129*0a6a1f1dSLionel Sambuc and r10,r6,r7 1130*0a6a1f1dSLionel Sambuc ldr r9,[sp,#48] 1131*0a6a1f1dSLionel Sambuc add r3,r3,r4,ror#27 1132*0a6a1f1dSLionel Sambuc eor r11,r6,r7 1133*0a6a1f1dSLionel Sambuc add r3,r3,r10 1134*0a6a1f1dSLionel Sambuc and r11,r11,r5 1135*0a6a1f1dSLionel Sambuc mov r5,r5,ror#2 1136*0a6a1f1dSLionel Sambuc add r3,r3,r11 1137*0a6a1f1dSLionel Sambuc vext.8 q12,q1,q2,#8 1138*0a6a1f1dSLionel Sambuc eor r10,r4,r6 1139*0a6a1f1dSLionel Sambuc add r7,r7,r9 1140*0a6a1f1dSLionel Sambuc ldr r9,[sp,#52] 1141*0a6a1f1dSLionel Sambuc veor q3,q3,q11 1142*0a6a1f1dSLionel Sambuc eor r11,r10,r5 1143*0a6a1f1dSLionel Sambuc add r7,r7,r3,ror#27 1144*0a6a1f1dSLionel Sambuc veor q3,q3,q8 1145*0a6a1f1dSLionel Sambuc mov r4,r4,ror#2 1146*0a6a1f1dSLionel Sambuc add r7,r7,r11 1147*0a6a1f1dSLionel Sambuc vadd.i32 q13,q2,q14 1148*0a6a1f1dSLionel Sambuc eor r10,r3,r5 1149*0a6a1f1dSLionel Sambuc add r6,r6,r9 1150*0a6a1f1dSLionel Sambuc veor q12,q12,q3 1151*0a6a1f1dSLionel Sambuc ldr r9,[sp,#56] 1152*0a6a1f1dSLionel Sambuc eor r11,r10,r4 1153*0a6a1f1dSLionel Sambuc vshr.u32 q3,q12,#30 1154*0a6a1f1dSLionel Sambuc add r6,r6,r7,ror#27 1155*0a6a1f1dSLionel Sambuc mov r3,r3,ror#2 1156*0a6a1f1dSLionel Sambuc vst1.32 {q13},[r12,:128]! 1157*0a6a1f1dSLionel Sambuc add r6,r6,r11 1158*0a6a1f1dSLionel Sambuc eor r10,r7,r4 1159*0a6a1f1dSLionel Sambuc vsli.32 q3,q12,#2 1160*0a6a1f1dSLionel Sambuc add r5,r5,r9 1161*0a6a1f1dSLionel Sambuc ldr r9,[sp,#60] 1162*0a6a1f1dSLionel Sambuc eor r11,r10,r3 1163*0a6a1f1dSLionel Sambuc add r5,r5,r6,ror#27 1164*0a6a1f1dSLionel Sambuc mov r7,r7,ror#2 1165*0a6a1f1dSLionel Sambuc add r5,r5,r11 1166*0a6a1f1dSLionel Sambuc eor r10,r6,r3 1167*0a6a1f1dSLionel Sambuc add r4,r4,r9 1168*0a6a1f1dSLionel Sambuc ldr r9,[sp,#0] 1169*0a6a1f1dSLionel Sambuc eor r11,r10,r7 1170*0a6a1f1dSLionel Sambuc add r4,r4,r5,ror#27 1171*0a6a1f1dSLionel Sambuc mov r6,r6,ror#2 1172*0a6a1f1dSLionel Sambuc add r4,r4,r11 1173*0a6a1f1dSLionel Sambuc vadd.i32 q13,q3,q14 1174*0a6a1f1dSLionel Sambuc eor r10,r5,r7 1175*0a6a1f1dSLionel Sambuc add r3,r3,r9 1176*0a6a1f1dSLionel Sambuc vst1.32 {q13},[r12,:128]! 1177*0a6a1f1dSLionel Sambuc sub r12,r12,#64 1178*0a6a1f1dSLionel Sambuc teq r1,r2 1179*0a6a1f1dSLionel Sambuc sub r8,r8,#16 1180*0a6a1f1dSLionel Sambuc subeq r1,r1,#64 1181*0a6a1f1dSLionel Sambuc vld1.8 {q0-q1},[r1]! 1182*0a6a1f1dSLionel Sambuc ldr r9,[sp,#4] 1183*0a6a1f1dSLionel Sambuc eor r11,r10,r6 1184*0a6a1f1dSLionel Sambuc vld1.8 {q2-q3},[r1]! 1185*0a6a1f1dSLionel Sambuc add r3,r3,r4,ror#27 1186*0a6a1f1dSLionel Sambuc mov r5,r5,ror#2 1187*0a6a1f1dSLionel Sambuc vld1.32 {d28[],d29[]},[r8,:32]! 1188*0a6a1f1dSLionel Sambuc add r3,r3,r11 1189*0a6a1f1dSLionel Sambuc eor r10,r4,r6 1190*0a6a1f1dSLionel Sambuc vrev32.8 q0,q0 1191*0a6a1f1dSLionel Sambuc add r7,r7,r9 1192*0a6a1f1dSLionel Sambuc ldr r9,[sp,#8] 1193*0a6a1f1dSLionel Sambuc eor r11,r10,r5 1194*0a6a1f1dSLionel Sambuc add r7,r7,r3,ror#27 1195*0a6a1f1dSLionel Sambuc mov r4,r4,ror#2 1196*0a6a1f1dSLionel Sambuc add r7,r7,r11 1197*0a6a1f1dSLionel Sambuc eor r10,r3,r5 1198*0a6a1f1dSLionel Sambuc add r6,r6,r9 1199*0a6a1f1dSLionel Sambuc ldr r9,[sp,#12] 1200*0a6a1f1dSLionel Sambuc eor r11,r10,r4 1201*0a6a1f1dSLionel Sambuc add r6,r6,r7,ror#27 1202*0a6a1f1dSLionel Sambuc mov r3,r3,ror#2 1203*0a6a1f1dSLionel Sambuc add r6,r6,r11 1204*0a6a1f1dSLionel Sambuc eor r10,r7,r4 1205*0a6a1f1dSLionel Sambuc add r5,r5,r9 1206*0a6a1f1dSLionel Sambuc ldr r9,[sp,#16] 1207*0a6a1f1dSLionel Sambuc eor r11,r10,r3 1208*0a6a1f1dSLionel Sambuc add r5,r5,r6,ror#27 1209*0a6a1f1dSLionel Sambuc mov r7,r7,ror#2 1210*0a6a1f1dSLionel Sambuc add r5,r5,r11 1211*0a6a1f1dSLionel Sambuc vrev32.8 q1,q1 1212*0a6a1f1dSLionel Sambuc eor r10,r6,r3 1213*0a6a1f1dSLionel Sambuc add r4,r4,r9 1214*0a6a1f1dSLionel Sambuc vadd.i32 q8,q0,q14 1215*0a6a1f1dSLionel Sambuc ldr r9,[sp,#20] 1216*0a6a1f1dSLionel Sambuc eor r11,r10,r7 1217*0a6a1f1dSLionel Sambuc vst1.32 {q8},[r12,:128]! 1218*0a6a1f1dSLionel Sambuc add r4,r4,r5,ror#27 1219*0a6a1f1dSLionel Sambuc mov r6,r6,ror#2 1220*0a6a1f1dSLionel Sambuc add r4,r4,r11 1221*0a6a1f1dSLionel Sambuc eor r10,r5,r7 1222*0a6a1f1dSLionel Sambuc add r3,r3,r9 1223*0a6a1f1dSLionel Sambuc ldr r9,[sp,#24] 1224*0a6a1f1dSLionel Sambuc eor r11,r10,r6 1225*0a6a1f1dSLionel Sambuc add r3,r3,r4,ror#27 1226*0a6a1f1dSLionel Sambuc mov r5,r5,ror#2 1227*0a6a1f1dSLionel Sambuc add r3,r3,r11 1228*0a6a1f1dSLionel Sambuc eor r10,r4,r6 1229*0a6a1f1dSLionel Sambuc add r7,r7,r9 1230*0a6a1f1dSLionel Sambuc ldr r9,[sp,#28] 1231*0a6a1f1dSLionel Sambuc eor r11,r10,r5 1232*0a6a1f1dSLionel Sambuc add r7,r7,r3,ror#27 1233*0a6a1f1dSLionel Sambuc mov r4,r4,ror#2 1234*0a6a1f1dSLionel Sambuc add r7,r7,r11 1235*0a6a1f1dSLionel Sambuc eor r10,r3,r5 1236*0a6a1f1dSLionel Sambuc add r6,r6,r9 1237*0a6a1f1dSLionel Sambuc ldr r9,[sp,#32] 1238*0a6a1f1dSLionel Sambuc eor r11,r10,r4 1239*0a6a1f1dSLionel Sambuc add r6,r6,r7,ror#27 1240*0a6a1f1dSLionel Sambuc mov r3,r3,ror#2 1241*0a6a1f1dSLionel Sambuc add r6,r6,r11 1242*0a6a1f1dSLionel Sambuc vrev32.8 q2,q2 1243*0a6a1f1dSLionel Sambuc eor r10,r7,r4 1244*0a6a1f1dSLionel Sambuc add r5,r5,r9 1245*0a6a1f1dSLionel Sambuc vadd.i32 q9,q1,q14 1246*0a6a1f1dSLionel Sambuc ldr r9,[sp,#36] 1247*0a6a1f1dSLionel Sambuc eor r11,r10,r3 1248*0a6a1f1dSLionel Sambuc vst1.32 {q9},[r12,:128]! 1249*0a6a1f1dSLionel Sambuc add r5,r5,r6,ror#27 1250*0a6a1f1dSLionel Sambuc mov r7,r7,ror#2 1251*0a6a1f1dSLionel Sambuc add r5,r5,r11 1252*0a6a1f1dSLionel Sambuc eor r10,r6,r3 1253*0a6a1f1dSLionel Sambuc add r4,r4,r9 1254*0a6a1f1dSLionel Sambuc ldr r9,[sp,#40] 1255*0a6a1f1dSLionel Sambuc eor r11,r10,r7 1256*0a6a1f1dSLionel Sambuc add r4,r4,r5,ror#27 1257*0a6a1f1dSLionel Sambuc mov r6,r6,ror#2 1258*0a6a1f1dSLionel Sambuc add r4,r4,r11 1259*0a6a1f1dSLionel Sambuc eor r10,r5,r7 1260*0a6a1f1dSLionel Sambuc add r3,r3,r9 1261*0a6a1f1dSLionel Sambuc ldr r9,[sp,#44] 1262*0a6a1f1dSLionel Sambuc eor r11,r10,r6 1263*0a6a1f1dSLionel Sambuc add r3,r3,r4,ror#27 1264*0a6a1f1dSLionel Sambuc mov r5,r5,ror#2 1265*0a6a1f1dSLionel Sambuc add r3,r3,r11 1266*0a6a1f1dSLionel Sambuc eor r10,r4,r6 1267*0a6a1f1dSLionel Sambuc add r7,r7,r9 1268*0a6a1f1dSLionel Sambuc ldr r9,[sp,#48] 1269*0a6a1f1dSLionel Sambuc eor r11,r10,r5 1270*0a6a1f1dSLionel Sambuc add r7,r7,r3,ror#27 1271*0a6a1f1dSLionel Sambuc mov r4,r4,ror#2 1272*0a6a1f1dSLionel Sambuc add r7,r7,r11 1273*0a6a1f1dSLionel Sambuc vrev32.8 q3,q3 1274*0a6a1f1dSLionel Sambuc eor r10,r3,r5 1275*0a6a1f1dSLionel Sambuc add r6,r6,r9 1276*0a6a1f1dSLionel Sambuc vadd.i32 q10,q2,q14 1277*0a6a1f1dSLionel Sambuc ldr r9,[sp,#52] 1278*0a6a1f1dSLionel Sambuc eor r11,r10,r4 1279*0a6a1f1dSLionel Sambuc vst1.32 {q10},[r12,:128]! 1280*0a6a1f1dSLionel Sambuc add r6,r6,r7,ror#27 1281*0a6a1f1dSLionel Sambuc mov r3,r3,ror#2 1282*0a6a1f1dSLionel Sambuc add r6,r6,r11 1283*0a6a1f1dSLionel Sambuc eor r10,r7,r4 1284*0a6a1f1dSLionel Sambuc add r5,r5,r9 1285*0a6a1f1dSLionel Sambuc ldr r9,[sp,#56] 1286*0a6a1f1dSLionel Sambuc eor r11,r10,r3 1287*0a6a1f1dSLionel Sambuc add r5,r5,r6,ror#27 1288*0a6a1f1dSLionel Sambuc mov r7,r7,ror#2 1289*0a6a1f1dSLionel Sambuc add r5,r5,r11 1290*0a6a1f1dSLionel Sambuc eor r10,r6,r3 1291*0a6a1f1dSLionel Sambuc add r4,r4,r9 1292*0a6a1f1dSLionel Sambuc ldr r9,[sp,#60] 1293*0a6a1f1dSLionel Sambuc eor r11,r10,r7 1294*0a6a1f1dSLionel Sambuc add r4,r4,r5,ror#27 1295*0a6a1f1dSLionel Sambuc mov r6,r6,ror#2 1296*0a6a1f1dSLionel Sambuc add r4,r4,r11 1297*0a6a1f1dSLionel Sambuc eor r10,r5,r7 1298*0a6a1f1dSLionel Sambuc add r3,r3,r9 1299*0a6a1f1dSLionel Sambuc eor r11,r10,r6 1300*0a6a1f1dSLionel Sambuc add r3,r3,r4,ror#27 1301*0a6a1f1dSLionel Sambuc mov r5,r5,ror#2 1302*0a6a1f1dSLionel Sambuc add r3,r3,r11 1303*0a6a1f1dSLionel Sambuc ldmia r0,{r9,r10,r11,r12} @ accumulate context 1304*0a6a1f1dSLionel Sambuc add r3,r3,r9 1305*0a6a1f1dSLionel Sambuc ldr r9,[r0,#16] 1306*0a6a1f1dSLionel Sambuc add r4,r4,r10 1307*0a6a1f1dSLionel Sambuc add r5,r5,r11 1308*0a6a1f1dSLionel Sambuc add r6,r6,r12 1309*0a6a1f1dSLionel Sambuc moveq sp,r14 1310*0a6a1f1dSLionel Sambuc add r7,r7,r9 1311*0a6a1f1dSLionel Sambuc ldrne r9,[sp] 1312*0a6a1f1dSLionel Sambuc stmia r0,{r3,r4,r5,r6,r7} 1313*0a6a1f1dSLionel Sambuc addne r12,sp,#3*16 1314*0a6a1f1dSLionel Sambuc bne .Loop_neon 1315*0a6a1f1dSLionel Sambuc 1316*0a6a1f1dSLionel Sambuc @ vldmia sp!,{d8-d15} 1317*0a6a1f1dSLionel Sambuc ldmia sp!,{r4-r12,pc} 1318*0a6a1f1dSLionel Sambuc.size sha1_block_data_order_neon,.-sha1_block_data_order_neon 1319*0a6a1f1dSLionel Sambuc#endif 1320*0a6a1f1dSLionel Sambuc#if __ARM_MAX_ARCH__>=7 1321*0a6a1f1dSLionel Sambuc.type sha1_block_data_order_armv8,%function 1322*0a6a1f1dSLionel Sambuc.align 5 1323*0a6a1f1dSLionel Sambucsha1_block_data_order_armv8: 1324*0a6a1f1dSLionel Sambuc.LARMv8: 1325*0a6a1f1dSLionel Sambuc vstmdb sp!,{d8-d15} @ ABI specification says so 1326*0a6a1f1dSLionel Sambuc 1327*0a6a1f1dSLionel Sambuc veor q1,q1,q1 1328*0a6a1f1dSLionel Sambuc adr r3,.LK_00_19 1329*0a6a1f1dSLionel Sambuc vld1.32 {q0},[r0]! 1330*0a6a1f1dSLionel Sambuc vld1.32 {d2[0]},[r0] 1331*0a6a1f1dSLionel Sambuc sub r0,r0,#16 1332*0a6a1f1dSLionel Sambuc vld1.32 {d16[],d17[]},[r3,:32]! 1333*0a6a1f1dSLionel Sambuc vld1.32 {d18[],d19[]},[r3,:32]! 1334*0a6a1f1dSLionel Sambuc vld1.32 {d20[],d21[]},[r3,:32]! 1335*0a6a1f1dSLionel Sambuc vld1.32 {d22[],d23[]},[r3,:32] 1336*0a6a1f1dSLionel Sambuc 1337*0a6a1f1dSLionel Sambuc.Loop_v8: 1338*0a6a1f1dSLionel Sambuc vld1.8 {q4-q5},[r1]! 1339*0a6a1f1dSLionel Sambuc vld1.8 {q6-q7},[r1]! 1340*0a6a1f1dSLionel Sambuc vrev32.8 q4,q4 1341*0a6a1f1dSLionel Sambuc vrev32.8 q5,q5 1342*0a6a1f1dSLionel Sambuc 1343*0a6a1f1dSLionel Sambuc vadd.i32 q12,q8,q4 1344*0a6a1f1dSLionel Sambuc vrev32.8 q6,q6 1345*0a6a1f1dSLionel Sambuc vmov q14,q0 @ offload 1346*0a6a1f1dSLionel Sambuc subs r2,r2,#1 1347*0a6a1f1dSLionel Sambuc 1348*0a6a1f1dSLionel Sambuc vadd.i32 q13,q8,q5 1349*0a6a1f1dSLionel Sambuc vrev32.8 q7,q7 1350*0a6a1f1dSLionel Sambuc .inst 0xf3b962c0 @ sha1h q3,q0 @ 0 1351*0a6a1f1dSLionel Sambuc .inst 0xf2020c68 @ sha1c q0,q1,q12 1352*0a6a1f1dSLionel Sambuc vadd.i32 q12,q8,q6 1353*0a6a1f1dSLionel Sambuc .inst 0xf23a8c4c @ sha1su0 q4,q5,q6 1354*0a6a1f1dSLionel Sambuc .inst 0xf3b942c0 @ sha1h q2,q0 @ 1 1355*0a6a1f1dSLionel Sambuc .inst 0xf2060c6a @ sha1c q0,q3,q13 1356*0a6a1f1dSLionel Sambuc vadd.i32 q13,q8,q7 1357*0a6a1f1dSLionel Sambuc .inst 0xf3ba838e @ sha1su1 q4,q7 1358*0a6a1f1dSLionel Sambuc .inst 0xf23cac4e @ sha1su0 q5,q6,q7 1359*0a6a1f1dSLionel Sambuc .inst 0xf3b962c0 @ sha1h q3,q0 @ 2 1360*0a6a1f1dSLionel Sambuc .inst 0xf2040c68 @ sha1c q0,q2,q12 1361*0a6a1f1dSLionel Sambuc vadd.i32 q12,q8,q4 1362*0a6a1f1dSLionel Sambuc .inst 0xf3baa388 @ sha1su1 q5,q4 1363*0a6a1f1dSLionel Sambuc .inst 0xf23ecc48 @ sha1su0 q6,q7,q4 1364*0a6a1f1dSLionel Sambuc .inst 0xf3b942c0 @ sha1h q2,q0 @ 3 1365*0a6a1f1dSLionel Sambuc .inst 0xf2060c6a @ sha1c q0,q3,q13 1366*0a6a1f1dSLionel Sambuc vadd.i32 q13,q9,q5 1367*0a6a1f1dSLionel Sambuc .inst 0xf3bac38a @ sha1su1 q6,q5 1368*0a6a1f1dSLionel Sambuc .inst 0xf238ec4a @ sha1su0 q7,q4,q5 1369*0a6a1f1dSLionel Sambuc .inst 0xf3b962c0 @ sha1h q3,q0 @ 4 1370*0a6a1f1dSLionel Sambuc .inst 0xf2040c68 @ sha1c q0,q2,q12 1371*0a6a1f1dSLionel Sambuc vadd.i32 q12,q9,q6 1372*0a6a1f1dSLionel Sambuc .inst 0xf3bae38c @ sha1su1 q7,q6 1373*0a6a1f1dSLionel Sambuc .inst 0xf23a8c4c @ sha1su0 q4,q5,q6 1374*0a6a1f1dSLionel Sambuc .inst 0xf3b942c0 @ sha1h q2,q0 @ 5 1375*0a6a1f1dSLionel Sambuc .inst 0xf2160c6a @ sha1p q0,q3,q13 1376*0a6a1f1dSLionel Sambuc vadd.i32 q13,q9,q7 1377*0a6a1f1dSLionel Sambuc .inst 0xf3ba838e @ sha1su1 q4,q7 1378*0a6a1f1dSLionel Sambuc .inst 0xf23cac4e @ sha1su0 q5,q6,q7 1379*0a6a1f1dSLionel Sambuc .inst 0xf3b962c0 @ sha1h q3,q0 @ 6 1380*0a6a1f1dSLionel Sambuc .inst 0xf2140c68 @ sha1p q0,q2,q12 1381*0a6a1f1dSLionel Sambuc vadd.i32 q12,q9,q4 1382*0a6a1f1dSLionel Sambuc .inst 0xf3baa388 @ sha1su1 q5,q4 1383*0a6a1f1dSLionel Sambuc .inst 0xf23ecc48 @ sha1su0 q6,q7,q4 1384*0a6a1f1dSLionel Sambuc .inst 0xf3b942c0 @ sha1h q2,q0 @ 7 1385*0a6a1f1dSLionel Sambuc .inst 0xf2160c6a @ sha1p q0,q3,q13 1386*0a6a1f1dSLionel Sambuc vadd.i32 q13,q9,q5 1387*0a6a1f1dSLionel Sambuc .inst 0xf3bac38a @ sha1su1 q6,q5 1388*0a6a1f1dSLionel Sambuc .inst 0xf238ec4a @ sha1su0 q7,q4,q5 1389*0a6a1f1dSLionel Sambuc .inst 0xf3b962c0 @ sha1h q3,q0 @ 8 1390*0a6a1f1dSLionel Sambuc .inst 0xf2140c68 @ sha1p q0,q2,q12 1391*0a6a1f1dSLionel Sambuc vadd.i32 q12,q10,q6 1392*0a6a1f1dSLionel Sambuc .inst 0xf3bae38c @ sha1su1 q7,q6 1393*0a6a1f1dSLionel Sambuc .inst 0xf23a8c4c @ sha1su0 q4,q5,q6 1394*0a6a1f1dSLionel Sambuc .inst 0xf3b942c0 @ sha1h q2,q0 @ 9 1395*0a6a1f1dSLionel Sambuc .inst 0xf2160c6a @ sha1p q0,q3,q13 1396*0a6a1f1dSLionel Sambuc vadd.i32 q13,q10,q7 1397*0a6a1f1dSLionel Sambuc .inst 0xf3ba838e @ sha1su1 q4,q7 1398*0a6a1f1dSLionel Sambuc .inst 0xf23cac4e @ sha1su0 q5,q6,q7 1399*0a6a1f1dSLionel Sambuc .inst 0xf3b962c0 @ sha1h q3,q0 @ 10 1400*0a6a1f1dSLionel Sambuc .inst 0xf2240c68 @ sha1m q0,q2,q12 1401*0a6a1f1dSLionel Sambuc vadd.i32 q12,q10,q4 1402*0a6a1f1dSLionel Sambuc .inst 0xf3baa388 @ sha1su1 q5,q4 1403*0a6a1f1dSLionel Sambuc .inst 0xf23ecc48 @ sha1su0 q6,q7,q4 1404*0a6a1f1dSLionel Sambuc .inst 0xf3b942c0 @ sha1h q2,q0 @ 11 1405*0a6a1f1dSLionel Sambuc .inst 0xf2260c6a @ sha1m q0,q3,q13 1406*0a6a1f1dSLionel Sambuc vadd.i32 q13,q10,q5 1407*0a6a1f1dSLionel Sambuc .inst 0xf3bac38a @ sha1su1 q6,q5 1408*0a6a1f1dSLionel Sambuc .inst 0xf238ec4a @ sha1su0 q7,q4,q5 1409*0a6a1f1dSLionel Sambuc .inst 0xf3b962c0 @ sha1h q3,q0 @ 12 1410*0a6a1f1dSLionel Sambuc .inst 0xf2240c68 @ sha1m q0,q2,q12 1411*0a6a1f1dSLionel Sambuc vadd.i32 q12,q10,q6 1412*0a6a1f1dSLionel Sambuc .inst 0xf3bae38c @ sha1su1 q7,q6 1413*0a6a1f1dSLionel Sambuc .inst 0xf23a8c4c @ sha1su0 q4,q5,q6 1414*0a6a1f1dSLionel Sambuc .inst 0xf3b942c0 @ sha1h q2,q0 @ 13 1415*0a6a1f1dSLionel Sambuc .inst 0xf2260c6a @ sha1m q0,q3,q13 1416*0a6a1f1dSLionel Sambuc vadd.i32 q13,q11,q7 1417*0a6a1f1dSLionel Sambuc .inst 0xf3ba838e @ sha1su1 q4,q7 1418*0a6a1f1dSLionel Sambuc .inst 0xf23cac4e @ sha1su0 q5,q6,q7 1419*0a6a1f1dSLionel Sambuc .inst 0xf3b962c0 @ sha1h q3,q0 @ 14 1420*0a6a1f1dSLionel Sambuc .inst 0xf2240c68 @ sha1m q0,q2,q12 1421*0a6a1f1dSLionel Sambuc vadd.i32 q12,q11,q4 1422*0a6a1f1dSLionel Sambuc .inst 0xf3baa388 @ sha1su1 q5,q4 1423*0a6a1f1dSLionel Sambuc .inst 0xf23ecc48 @ sha1su0 q6,q7,q4 1424*0a6a1f1dSLionel Sambuc .inst 0xf3b942c0 @ sha1h q2,q0 @ 15 1425*0a6a1f1dSLionel Sambuc .inst 0xf2160c6a @ sha1p q0,q3,q13 1426*0a6a1f1dSLionel Sambuc vadd.i32 q13,q11,q5 1427*0a6a1f1dSLionel Sambuc .inst 0xf3bac38a @ sha1su1 q6,q5 1428*0a6a1f1dSLionel Sambuc .inst 0xf238ec4a @ sha1su0 q7,q4,q5 1429*0a6a1f1dSLionel Sambuc .inst 0xf3b962c0 @ sha1h q3,q0 @ 16 1430*0a6a1f1dSLionel Sambuc .inst 0xf2140c68 @ sha1p q0,q2,q12 1431*0a6a1f1dSLionel Sambuc vadd.i32 q12,q11,q6 1432*0a6a1f1dSLionel Sambuc .inst 0xf3bae38c @ sha1su1 q7,q6 1433*0a6a1f1dSLionel Sambuc .inst 0xf3b942c0 @ sha1h q2,q0 @ 17 1434*0a6a1f1dSLionel Sambuc .inst 0xf2160c6a @ sha1p q0,q3,q13 1435*0a6a1f1dSLionel Sambuc vadd.i32 q13,q11,q7 1436*0a6a1f1dSLionel Sambuc 1437*0a6a1f1dSLionel Sambuc .inst 0xf3b962c0 @ sha1h q3,q0 @ 18 1438*0a6a1f1dSLionel Sambuc .inst 0xf2140c68 @ sha1p q0,q2,q12 1439*0a6a1f1dSLionel Sambuc 1440*0a6a1f1dSLionel Sambuc .inst 0xf3b942c0 @ sha1h q2,q0 @ 19 1441*0a6a1f1dSLionel Sambuc .inst 0xf2160c6a @ sha1p q0,q3,q13 1442*0a6a1f1dSLionel Sambuc 1443*0a6a1f1dSLionel Sambuc vadd.i32 q1,q1,q2 1444*0a6a1f1dSLionel Sambuc vadd.i32 q0,q0,q14 1445*0a6a1f1dSLionel Sambuc bne .Loop_v8 1446*0a6a1f1dSLionel Sambuc 1447*0a6a1f1dSLionel Sambuc vst1.32 {q0},[r0]! 1448*0a6a1f1dSLionel Sambuc vst1.32 {d2[0]},[r0] 1449*0a6a1f1dSLionel Sambuc 1450*0a6a1f1dSLionel Sambuc vldmia sp!,{d8-d15} 1451*0a6a1f1dSLionel Sambuc RET @ bx lr 1452*0a6a1f1dSLionel Sambuc.size sha1_block_data_order_armv8,.-sha1_block_data_order_armv8 1453*0a6a1f1dSLionel Sambuc#endif 1454*0a6a1f1dSLionel Sambuc#if __ARM_MAX_ARCH__>=7 1455*0a6a1f1dSLionel Sambuc.comm OPENSSL_armcap_P,4,4 1456*0a6a1f1dSLionel Sambuc#endif 1457