1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(__arm__) 2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "arm_arch.h" 3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.text 5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.code 32 6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.type K256,%object 8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align 5 9116680a4aac90f2aa7413d9095a592090648e557Ben MurdochK256: 10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.word 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5 11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.word 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5 12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.word 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3 13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.word 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174 14116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.word 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc 15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.word 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da 16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.word 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7 17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.word 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967 18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.word 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13 19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.word 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85 20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.word 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3 21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.word 0xd192e819,0xd6990624,0xf40e3585,0x106aa070 22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.word 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5 23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.word 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3 24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.word 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208 25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.word 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2 26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.size K256,.-K256 27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.word 0 @ terminator 28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.LOPENSSL_armcap: 29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.word OPENSSL_armcap_P-sha256_block_data_order 30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align 5 31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.global sha256_block_data_order 335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles).hidden sha256_block_data_order 34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.type sha256_block_data_order,%function 35116680a4aac90f2aa7413d9095a592090648e557Ben Murdochsha256_block_data_order: 36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sub r3,pc,#8 @ sha256_block_data_order 37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r2,r1,r2,lsl#6 @ len to point at the end of inp 38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if __ARM_ARCH__>=7 39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r12,.LOPENSSL_armcap 40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r12,[r3,r12] @ OPENSSL_armcap_P 41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch tst r12,#1 42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bne .LNEON 43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch stmdb sp!,{r0,r1,r2,r4-r11,lr} 45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldmia r0,{r4,r5,r6,r7,r8,r9,r10,r11} 46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sub r14,r3,#256+32 @ K256 47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sub sp,sp,#16*4 @ alloca(X[16]) 48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.Loop: 49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7 50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[r1],#4 51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else 52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r2,[r1,#3] 53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r5,r6 @ magic 55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r12,r12 56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if __ARM_ARCH__>=7 57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldr r2,[r1],#4 @ 0 58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 0==15 59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r1,[sp,#17*4] @ make room for r1 60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r8,r8,ror#5 62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4,r4,r12 @ h+=Maj(a,b,c) from the past 63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r8,ror#19 @ Sigma1(e) 64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch rev r2,r2 65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldrb r2,[r1,#3] @ 0 67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4,r4,r12 @ h+=Maj(a,b,c) from the past 68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r12,[r1,#2] 69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r0,[r1,#1] 70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch orr r2,r2,r12,lsl#8 71116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r12,[r1],#4 72116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch orr r2,r2,r0,lsl#16 73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 0==15 74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r1,[sp,#17*4] @ make room for r1 75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 76116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r8,r8,ror#5 77116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch orr r2,r2,r12,lsl#24 78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r8,ror#19 @ Sigma1(e) 79116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r12,[r14],#4 @ *K256++ 81116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,r11,r2 @ h+=X[i] 82116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r2,[sp,#0*4] 83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r9,r10 84116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,r11,r0,ror#6 @ h+=Sigma1(e) 85116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r8 86116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,r11,r12 @ h+=K256[i] 87116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r10 @ Ch(e,f,g) 88116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r4,r4,ror#11 89116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,r11,r2 @ h+=Ch(e,f,g) 90116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 0==31 91116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r12,r12,#0xff 92116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmp r12,#0xf2 @ done? 93116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 94116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 0<15 95116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7 96116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[r1],#4 @ prefetch 97116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else 98116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r2,[r1,#3] 99116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 100116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r4,r5 @ a^b, b^c in next round 101116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 102116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#2*4] @ from future BODY_16_xx 103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r4,r5 @ a^b, b^c in next round 104116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r1,[sp,#15*4] @ from future BODY_16_xx 105116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 106116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r4,ror#20 @ Sigma0(a) 107116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r3,r3,r12 @ (b^c)&=(a^b) 108116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r7,r7,r11 @ d+=h 109116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r3,r5 @ Maj(a,b,c) 110116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,r11,r0,ror#2 @ h+=Sigma0(a) 111116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ add r11,r11,r3 @ h+=Maj(a,b,c) 112116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if __ARM_ARCH__>=7 113116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldr r2,[r1],#4 @ 1 114116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 1==15 115116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r1,[sp,#17*4] @ make room for r1 116116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 117116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r7,r7,ror#5 118116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,r11,r3 @ h+=Maj(a,b,c) from the past 119116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r7,ror#19 @ Sigma1(e) 120116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch rev r2,r2 121116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 122116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldrb r2,[r1,#3] @ 1 123116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,r11,r3 @ h+=Maj(a,b,c) from the past 124116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r3,[r1,#2] 125116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r0,[r1,#1] 126116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch orr r2,r2,r3,lsl#8 127116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r3,[r1],#4 128116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch orr r2,r2,r0,lsl#16 129116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 1==15 130116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r1,[sp,#17*4] @ make room for r1 131116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 132116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r7,r7,ror#5 133116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch orr r2,r2,r3,lsl#24 134116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r7,ror#19 @ Sigma1(e) 135116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 136116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r3,[r14],#4 @ *K256++ 137116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,r10,r2 @ h+=X[i] 138116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r2,[sp,#1*4] 139116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r8,r9 140116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,r10,r0,ror#6 @ h+=Sigma1(e) 141116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r7 142116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,r10,r3 @ h+=K256[i] 143116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r9 @ Ch(e,f,g) 144116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r11,r11,ror#11 145116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,r10,r2 @ h+=Ch(e,f,g) 146116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 1==31 147116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r3,r3,#0xff 148116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmp r3,#0xf2 @ done? 149116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 150116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 1<15 151116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7 152116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[r1],#4 @ prefetch 153116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else 154116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r2,[r1,#3] 155116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 156116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r11,r4 @ a^b, b^c in next round 157116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 158116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#3*4] @ from future BODY_16_xx 159116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r11,r4 @ a^b, b^c in next round 160116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r1,[sp,#0*4] @ from future BODY_16_xx 161116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 162116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r11,ror#20 @ Sigma0(a) 163116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r12,r12,r3 @ (b^c)&=(a^b) 164116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r6,r6,r10 @ d+=h 165116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r12,r4 @ Maj(a,b,c) 166116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,r10,r0,ror#2 @ h+=Sigma0(a) 167116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ add r10,r10,r12 @ h+=Maj(a,b,c) 168116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if __ARM_ARCH__>=7 169116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldr r2,[r1],#4 @ 2 170116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 2==15 171116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r1,[sp,#17*4] @ make room for r1 172116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 173116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r6,r6,ror#5 174116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,r10,r12 @ h+=Maj(a,b,c) from the past 175116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r6,ror#19 @ Sigma1(e) 176116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch rev r2,r2 177116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 178116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldrb r2,[r1,#3] @ 2 179116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,r10,r12 @ h+=Maj(a,b,c) from the past 180116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r12,[r1,#2] 181116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r0,[r1,#1] 182116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch orr r2,r2,r12,lsl#8 183116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r12,[r1],#4 184116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch orr r2,r2,r0,lsl#16 185116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 2==15 186116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r1,[sp,#17*4] @ make room for r1 187116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 188116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r6,r6,ror#5 189116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch orr r2,r2,r12,lsl#24 190116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r6,ror#19 @ Sigma1(e) 191116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 192116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r12,[r14],#4 @ *K256++ 193116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r9,r9,r2 @ h+=X[i] 194116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r2,[sp,#2*4] 195116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r7,r8 196116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r9,r9,r0,ror#6 @ h+=Sigma1(e) 197116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r6 198116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r9,r9,r12 @ h+=K256[i] 199116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r8 @ Ch(e,f,g) 200116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r10,r10,ror#11 201116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r9,r9,r2 @ h+=Ch(e,f,g) 202116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 2==31 203116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r12,r12,#0xff 204116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmp r12,#0xf2 @ done? 205116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 206116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 2<15 207116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7 208116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[r1],#4 @ prefetch 209116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else 210116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r2,[r1,#3] 211116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 212116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r10,r11 @ a^b, b^c in next round 213116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 214116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#4*4] @ from future BODY_16_xx 215116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r10,r11 @ a^b, b^c in next round 216116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r1,[sp,#1*4] @ from future BODY_16_xx 217116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 218116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r10,ror#20 @ Sigma0(a) 219116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r3,r3,r12 @ (b^c)&=(a^b) 220116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r5,r5,r9 @ d+=h 221116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r3,r11 @ Maj(a,b,c) 222116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r9,r9,r0,ror#2 @ h+=Sigma0(a) 223116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ add r9,r9,r3 @ h+=Maj(a,b,c) 224116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if __ARM_ARCH__>=7 225116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldr r2,[r1],#4 @ 3 226116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 3==15 227116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r1,[sp,#17*4] @ make room for r1 228116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 229116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r5,r5,ror#5 230116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r9,r9,r3 @ h+=Maj(a,b,c) from the past 231116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r5,ror#19 @ Sigma1(e) 232116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch rev r2,r2 233116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 234116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldrb r2,[r1,#3] @ 3 235116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r9,r9,r3 @ h+=Maj(a,b,c) from the past 236116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r3,[r1,#2] 237116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r0,[r1,#1] 238116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch orr r2,r2,r3,lsl#8 239116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r3,[r1],#4 240116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch orr r2,r2,r0,lsl#16 241116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 3==15 242116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r1,[sp,#17*4] @ make room for r1 243116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 244116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r5,r5,ror#5 245116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch orr r2,r2,r3,lsl#24 246116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r5,ror#19 @ Sigma1(e) 247116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 248116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r3,[r14],#4 @ *K256++ 249116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r8,r8,r2 @ h+=X[i] 250116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r2,[sp,#3*4] 251116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r6,r7 252116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r8,r8,r0,ror#6 @ h+=Sigma1(e) 253116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r5 254116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r8,r8,r3 @ h+=K256[i] 255116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r7 @ Ch(e,f,g) 256116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r9,r9,ror#11 257116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r8,r8,r2 @ h+=Ch(e,f,g) 258116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 3==31 259116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r3,r3,#0xff 260116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmp r3,#0xf2 @ done? 261116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 262116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 3<15 263116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7 264116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[r1],#4 @ prefetch 265116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else 266116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r2,[r1,#3] 267116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 268116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r9,r10 @ a^b, b^c in next round 269116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 270116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#5*4] @ from future BODY_16_xx 271116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r9,r10 @ a^b, b^c in next round 272116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r1,[sp,#2*4] @ from future BODY_16_xx 273116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 274116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r9,ror#20 @ Sigma0(a) 275116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r12,r12,r3 @ (b^c)&=(a^b) 276116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4,r4,r8 @ d+=h 277116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r12,r10 @ Maj(a,b,c) 278116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r8,r8,r0,ror#2 @ h+=Sigma0(a) 279116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ add r8,r8,r12 @ h+=Maj(a,b,c) 280116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if __ARM_ARCH__>=7 281116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldr r2,[r1],#4 @ 4 282116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 4==15 283116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r1,[sp,#17*4] @ make room for r1 284116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 285116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r4,r4,ror#5 286116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r8,r8,r12 @ h+=Maj(a,b,c) from the past 287116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r4,ror#19 @ Sigma1(e) 288116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch rev r2,r2 289116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 290116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldrb r2,[r1,#3] @ 4 291116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r8,r8,r12 @ h+=Maj(a,b,c) from the past 292116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r12,[r1,#2] 293116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r0,[r1,#1] 294116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch orr r2,r2,r12,lsl#8 295116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r12,[r1],#4 296116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch orr r2,r2,r0,lsl#16 297116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 4==15 298116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r1,[sp,#17*4] @ make room for r1 299116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 300116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r4,r4,ror#5 301116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch orr r2,r2,r12,lsl#24 302116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r4,ror#19 @ Sigma1(e) 303116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 304116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r12,[r14],#4 @ *K256++ 305116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r7,r7,r2 @ h+=X[i] 306116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r2,[sp,#4*4] 307116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r5,r6 308116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r7,r7,r0,ror#6 @ h+=Sigma1(e) 309116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r4 310116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r7,r7,r12 @ h+=K256[i] 311116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r6 @ Ch(e,f,g) 312116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r8,r8,ror#11 313116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r7,r7,r2 @ h+=Ch(e,f,g) 314116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 4==31 315116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r12,r12,#0xff 316116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmp r12,#0xf2 @ done? 317116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 318116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 4<15 319116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7 320116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[r1],#4 @ prefetch 321116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else 322116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r2,[r1,#3] 323116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 324116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r8,r9 @ a^b, b^c in next round 325116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 326116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#6*4] @ from future BODY_16_xx 327116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r8,r9 @ a^b, b^c in next round 328116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r1,[sp,#3*4] @ from future BODY_16_xx 329116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 330116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r8,ror#20 @ Sigma0(a) 331116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r3,r3,r12 @ (b^c)&=(a^b) 332116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,r11,r7 @ d+=h 333116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r3,r9 @ Maj(a,b,c) 334116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r7,r7,r0,ror#2 @ h+=Sigma0(a) 335116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ add r7,r7,r3 @ h+=Maj(a,b,c) 336116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if __ARM_ARCH__>=7 337116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldr r2,[r1],#4 @ 5 338116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 5==15 339116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r1,[sp,#17*4] @ make room for r1 340116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 341116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r11,r11,ror#5 342116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r7,r7,r3 @ h+=Maj(a,b,c) from the past 343116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r11,ror#19 @ Sigma1(e) 344116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch rev r2,r2 345116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 346116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldrb r2,[r1,#3] @ 5 347116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r7,r7,r3 @ h+=Maj(a,b,c) from the past 348116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r3,[r1,#2] 349116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r0,[r1,#1] 350116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch orr r2,r2,r3,lsl#8 351116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r3,[r1],#4 352116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch orr r2,r2,r0,lsl#16 353116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 5==15 354116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r1,[sp,#17*4] @ make room for r1 355116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 356116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r11,r11,ror#5 357116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch orr r2,r2,r3,lsl#24 358116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r11,ror#19 @ Sigma1(e) 359116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 360116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r3,[r14],#4 @ *K256++ 361116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r6,r6,r2 @ h+=X[i] 362116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r2,[sp,#5*4] 363116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r4,r5 364116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r6,r6,r0,ror#6 @ h+=Sigma1(e) 365116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r11 366116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r6,r6,r3 @ h+=K256[i] 367116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r5 @ Ch(e,f,g) 368116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r7,r7,ror#11 369116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r6,r6,r2 @ h+=Ch(e,f,g) 370116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 5==31 371116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r3,r3,#0xff 372116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmp r3,#0xf2 @ done? 373116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 374116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 5<15 375116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7 376116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[r1],#4 @ prefetch 377116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else 378116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r2,[r1,#3] 379116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 380116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r7,r8 @ a^b, b^c in next round 381116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 382116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#7*4] @ from future BODY_16_xx 383116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r7,r8 @ a^b, b^c in next round 384116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r1,[sp,#4*4] @ from future BODY_16_xx 385116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 386116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r7,ror#20 @ Sigma0(a) 387116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r12,r12,r3 @ (b^c)&=(a^b) 388116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,r10,r6 @ d+=h 389116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r12,r8 @ Maj(a,b,c) 390116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r6,r6,r0,ror#2 @ h+=Sigma0(a) 391116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ add r6,r6,r12 @ h+=Maj(a,b,c) 392116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if __ARM_ARCH__>=7 393116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldr r2,[r1],#4 @ 6 394116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 6==15 395116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r1,[sp,#17*4] @ make room for r1 396116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 397116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r10,r10,ror#5 398116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r6,r6,r12 @ h+=Maj(a,b,c) from the past 399116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r10,ror#19 @ Sigma1(e) 400116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch rev r2,r2 401116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 402116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldrb r2,[r1,#3] @ 6 403116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r6,r6,r12 @ h+=Maj(a,b,c) from the past 404116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r12,[r1,#2] 405116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r0,[r1,#1] 406116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch orr r2,r2,r12,lsl#8 407116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r12,[r1],#4 408116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch orr r2,r2,r0,lsl#16 409116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 6==15 410116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r1,[sp,#17*4] @ make room for r1 411116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 412116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r10,r10,ror#5 413116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch orr r2,r2,r12,lsl#24 414116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r10,ror#19 @ Sigma1(e) 415116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 416116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r12,[r14],#4 @ *K256++ 417116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r5,r5,r2 @ h+=X[i] 418116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r2,[sp,#6*4] 419116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r11,r4 420116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r5,r5,r0,ror#6 @ h+=Sigma1(e) 421116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r10 422116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r5,r5,r12 @ h+=K256[i] 423116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r4 @ Ch(e,f,g) 424116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r6,r6,ror#11 425116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r5,r5,r2 @ h+=Ch(e,f,g) 426116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 6==31 427116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r12,r12,#0xff 428116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmp r12,#0xf2 @ done? 429116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 430116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 6<15 431116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7 432116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[r1],#4 @ prefetch 433116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else 434116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r2,[r1,#3] 435116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 436116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r6,r7 @ a^b, b^c in next round 437116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 438116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#8*4] @ from future BODY_16_xx 439116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r6,r7 @ a^b, b^c in next round 440116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r1,[sp,#5*4] @ from future BODY_16_xx 441116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 442116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r6,ror#20 @ Sigma0(a) 443116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r3,r3,r12 @ (b^c)&=(a^b) 444116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r9,r9,r5 @ d+=h 445116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r3,r7 @ Maj(a,b,c) 446116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r5,r5,r0,ror#2 @ h+=Sigma0(a) 447116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ add r5,r5,r3 @ h+=Maj(a,b,c) 448116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if __ARM_ARCH__>=7 449116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldr r2,[r1],#4 @ 7 450116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 7==15 451116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r1,[sp,#17*4] @ make room for r1 452116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 453116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r9,r9,ror#5 454116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r5,r5,r3 @ h+=Maj(a,b,c) from the past 455116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r9,ror#19 @ Sigma1(e) 456116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch rev r2,r2 457116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 458116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldrb r2,[r1,#3] @ 7 459116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r5,r5,r3 @ h+=Maj(a,b,c) from the past 460116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r3,[r1,#2] 461116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r0,[r1,#1] 462116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch orr r2,r2,r3,lsl#8 463116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r3,[r1],#4 464116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch orr r2,r2,r0,lsl#16 465116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 7==15 466116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r1,[sp,#17*4] @ make room for r1 467116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 468116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r9,r9,ror#5 469116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch orr r2,r2,r3,lsl#24 470116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r9,ror#19 @ Sigma1(e) 471116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 472116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r3,[r14],#4 @ *K256++ 473116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4,r4,r2 @ h+=X[i] 474116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r2,[sp,#7*4] 475116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r10,r11 476116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4,r4,r0,ror#6 @ h+=Sigma1(e) 477116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r9 478116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4,r4,r3 @ h+=K256[i] 479116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r11 @ Ch(e,f,g) 480116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r5,r5,ror#11 481116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4,r4,r2 @ h+=Ch(e,f,g) 482116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 7==31 483116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r3,r3,#0xff 484116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmp r3,#0xf2 @ done? 485116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 486116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 7<15 487116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7 488116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[r1],#4 @ prefetch 489116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else 490116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r2,[r1,#3] 491116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 492116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r5,r6 @ a^b, b^c in next round 493116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 494116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#9*4] @ from future BODY_16_xx 495116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r5,r6 @ a^b, b^c in next round 496116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r1,[sp,#6*4] @ from future BODY_16_xx 497116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 498116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r5,ror#20 @ Sigma0(a) 499116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r12,r12,r3 @ (b^c)&=(a^b) 500116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r8,r8,r4 @ d+=h 501116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r12,r6 @ Maj(a,b,c) 502116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4,r4,r0,ror#2 @ h+=Sigma0(a) 503116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ add r4,r4,r12 @ h+=Maj(a,b,c) 504116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if __ARM_ARCH__>=7 505116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldr r2,[r1],#4 @ 8 506116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 8==15 507116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r1,[sp,#17*4] @ make room for r1 508116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 509116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r8,r8,ror#5 510116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4,r4,r12 @ h+=Maj(a,b,c) from the past 511116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r8,ror#19 @ Sigma1(e) 512116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch rev r2,r2 513116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 514116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldrb r2,[r1,#3] @ 8 515116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4,r4,r12 @ h+=Maj(a,b,c) from the past 516116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r12,[r1,#2] 517116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r0,[r1,#1] 518116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch orr r2,r2,r12,lsl#8 519116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r12,[r1],#4 520116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch orr r2,r2,r0,lsl#16 521116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 8==15 522116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r1,[sp,#17*4] @ make room for r1 523116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 524116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r8,r8,ror#5 525116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch orr r2,r2,r12,lsl#24 526116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r8,ror#19 @ Sigma1(e) 527116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 528116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r12,[r14],#4 @ *K256++ 529116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,r11,r2 @ h+=X[i] 530116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r2,[sp,#8*4] 531116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r9,r10 532116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,r11,r0,ror#6 @ h+=Sigma1(e) 533116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r8 534116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,r11,r12 @ h+=K256[i] 535116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r10 @ Ch(e,f,g) 536116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r4,r4,ror#11 537116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,r11,r2 @ h+=Ch(e,f,g) 538116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 8==31 539116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r12,r12,#0xff 540116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmp r12,#0xf2 @ done? 541116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 542116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 8<15 543116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7 544116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[r1],#4 @ prefetch 545116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else 546116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r2,[r1,#3] 547116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 548116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r4,r5 @ a^b, b^c in next round 549116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 550116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#10*4] @ from future BODY_16_xx 551116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r4,r5 @ a^b, b^c in next round 552116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r1,[sp,#7*4] @ from future BODY_16_xx 553116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 554116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r4,ror#20 @ Sigma0(a) 555116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r3,r3,r12 @ (b^c)&=(a^b) 556116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r7,r7,r11 @ d+=h 557116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r3,r5 @ Maj(a,b,c) 558116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,r11,r0,ror#2 @ h+=Sigma0(a) 559116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ add r11,r11,r3 @ h+=Maj(a,b,c) 560116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if __ARM_ARCH__>=7 561116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldr r2,[r1],#4 @ 9 562116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 9==15 563116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r1,[sp,#17*4] @ make room for r1 564116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 565116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r7,r7,ror#5 566116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,r11,r3 @ h+=Maj(a,b,c) from the past 567116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r7,ror#19 @ Sigma1(e) 568116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch rev r2,r2 569116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 570116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldrb r2,[r1,#3] @ 9 571116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,r11,r3 @ h+=Maj(a,b,c) from the past 572116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r3,[r1,#2] 573116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r0,[r1,#1] 574116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch orr r2,r2,r3,lsl#8 575116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r3,[r1],#4 576116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch orr r2,r2,r0,lsl#16 577116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 9==15 578116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r1,[sp,#17*4] @ make room for r1 579116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 580116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r7,r7,ror#5 581116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch orr r2,r2,r3,lsl#24 582116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r7,ror#19 @ Sigma1(e) 583116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 584116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r3,[r14],#4 @ *K256++ 585116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,r10,r2 @ h+=X[i] 586116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r2,[sp,#9*4] 587116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r8,r9 588116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,r10,r0,ror#6 @ h+=Sigma1(e) 589116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r7 590116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,r10,r3 @ h+=K256[i] 591116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r9 @ Ch(e,f,g) 592116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r11,r11,ror#11 593116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,r10,r2 @ h+=Ch(e,f,g) 594116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 9==31 595116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r3,r3,#0xff 596116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmp r3,#0xf2 @ done? 597116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 598116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 9<15 599116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7 600116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[r1],#4 @ prefetch 601116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else 602116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r2,[r1,#3] 603116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 604116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r11,r4 @ a^b, b^c in next round 605116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 606116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#11*4] @ from future BODY_16_xx 607116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r11,r4 @ a^b, b^c in next round 608116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r1,[sp,#8*4] @ from future BODY_16_xx 609116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 610116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r11,ror#20 @ Sigma0(a) 611116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r12,r12,r3 @ (b^c)&=(a^b) 612116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r6,r6,r10 @ d+=h 613116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r12,r4 @ Maj(a,b,c) 614116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,r10,r0,ror#2 @ h+=Sigma0(a) 615116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ add r10,r10,r12 @ h+=Maj(a,b,c) 616116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if __ARM_ARCH__>=7 617116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldr r2,[r1],#4 @ 10 618116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 10==15 619116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r1,[sp,#17*4] @ make room for r1 620116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 621116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r6,r6,ror#5 622116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,r10,r12 @ h+=Maj(a,b,c) from the past 623116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r6,ror#19 @ Sigma1(e) 624116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch rev r2,r2 625116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 626116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldrb r2,[r1,#3] @ 10 627116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,r10,r12 @ h+=Maj(a,b,c) from the past 628116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r12,[r1,#2] 629116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r0,[r1,#1] 630116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch orr r2,r2,r12,lsl#8 631116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r12,[r1],#4 632116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch orr r2,r2,r0,lsl#16 633116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 10==15 634116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r1,[sp,#17*4] @ make room for r1 635116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 636116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r6,r6,ror#5 637116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch orr r2,r2,r12,lsl#24 638116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r6,ror#19 @ Sigma1(e) 639116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 640116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r12,[r14],#4 @ *K256++ 641116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r9,r9,r2 @ h+=X[i] 642116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r2,[sp,#10*4] 643116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r7,r8 644116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r9,r9,r0,ror#6 @ h+=Sigma1(e) 645116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r6 646116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r9,r9,r12 @ h+=K256[i] 647116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r8 @ Ch(e,f,g) 648116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r10,r10,ror#11 649116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r9,r9,r2 @ h+=Ch(e,f,g) 650116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 10==31 651116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r12,r12,#0xff 652116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmp r12,#0xf2 @ done? 653116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 654116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 10<15 655116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7 656116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[r1],#4 @ prefetch 657116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else 658116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r2,[r1,#3] 659116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 660116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r10,r11 @ a^b, b^c in next round 661116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 662116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#12*4] @ from future BODY_16_xx 663116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r10,r11 @ a^b, b^c in next round 664116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r1,[sp,#9*4] @ from future BODY_16_xx 665116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 666116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r10,ror#20 @ Sigma0(a) 667116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r3,r3,r12 @ (b^c)&=(a^b) 668116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r5,r5,r9 @ d+=h 669116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r3,r11 @ Maj(a,b,c) 670116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r9,r9,r0,ror#2 @ h+=Sigma0(a) 671116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ add r9,r9,r3 @ h+=Maj(a,b,c) 672116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if __ARM_ARCH__>=7 673116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldr r2,[r1],#4 @ 11 674116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 11==15 675116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r1,[sp,#17*4] @ make room for r1 676116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 677116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r5,r5,ror#5 678116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r9,r9,r3 @ h+=Maj(a,b,c) from the past 679116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r5,ror#19 @ Sigma1(e) 680116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch rev r2,r2 681116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 682116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldrb r2,[r1,#3] @ 11 683116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r9,r9,r3 @ h+=Maj(a,b,c) from the past 684116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r3,[r1,#2] 685116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r0,[r1,#1] 686116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch orr r2,r2,r3,lsl#8 687116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r3,[r1],#4 688116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch orr r2,r2,r0,lsl#16 689116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 11==15 690116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r1,[sp,#17*4] @ make room for r1 691116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 692116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r5,r5,ror#5 693116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch orr r2,r2,r3,lsl#24 694116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r5,ror#19 @ Sigma1(e) 695116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 696116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r3,[r14],#4 @ *K256++ 697116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r8,r8,r2 @ h+=X[i] 698116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r2,[sp,#11*4] 699116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r6,r7 700116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r8,r8,r0,ror#6 @ h+=Sigma1(e) 701116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r5 702116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r8,r8,r3 @ h+=K256[i] 703116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r7 @ Ch(e,f,g) 704116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r9,r9,ror#11 705116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r8,r8,r2 @ h+=Ch(e,f,g) 706116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 11==31 707116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r3,r3,#0xff 708116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmp r3,#0xf2 @ done? 709116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 710116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 11<15 711116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7 712116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[r1],#4 @ prefetch 713116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else 714116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r2,[r1,#3] 715116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 716116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r9,r10 @ a^b, b^c in next round 717116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 718116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#13*4] @ from future BODY_16_xx 719116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r9,r10 @ a^b, b^c in next round 720116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r1,[sp,#10*4] @ from future BODY_16_xx 721116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 722116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r9,ror#20 @ Sigma0(a) 723116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r12,r12,r3 @ (b^c)&=(a^b) 724116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4,r4,r8 @ d+=h 725116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r12,r10 @ Maj(a,b,c) 726116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r8,r8,r0,ror#2 @ h+=Sigma0(a) 727116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ add r8,r8,r12 @ h+=Maj(a,b,c) 728116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if __ARM_ARCH__>=7 729116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldr r2,[r1],#4 @ 12 730116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 12==15 731116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r1,[sp,#17*4] @ make room for r1 732116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 733116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r4,r4,ror#5 734116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r8,r8,r12 @ h+=Maj(a,b,c) from the past 735116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r4,ror#19 @ Sigma1(e) 736116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch rev r2,r2 737116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 738116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldrb r2,[r1,#3] @ 12 739116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r8,r8,r12 @ h+=Maj(a,b,c) from the past 740116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r12,[r1,#2] 741116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r0,[r1,#1] 742116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch orr r2,r2,r12,lsl#8 743116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r12,[r1],#4 744116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch orr r2,r2,r0,lsl#16 745116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 12==15 746116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r1,[sp,#17*4] @ make room for r1 747116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 748116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r4,r4,ror#5 749116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch orr r2,r2,r12,lsl#24 750116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r4,ror#19 @ Sigma1(e) 751116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 752116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r12,[r14],#4 @ *K256++ 753116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r7,r7,r2 @ h+=X[i] 754116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r2,[sp,#12*4] 755116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r5,r6 756116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r7,r7,r0,ror#6 @ h+=Sigma1(e) 757116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r4 758116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r7,r7,r12 @ h+=K256[i] 759116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r6 @ Ch(e,f,g) 760116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r8,r8,ror#11 761116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r7,r7,r2 @ h+=Ch(e,f,g) 762116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 12==31 763116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r12,r12,#0xff 764116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmp r12,#0xf2 @ done? 765116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 766116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 12<15 767116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7 768116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[r1],#4 @ prefetch 769116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else 770116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r2,[r1,#3] 771116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 772116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r8,r9 @ a^b, b^c in next round 773116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 774116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#14*4] @ from future BODY_16_xx 775116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r8,r9 @ a^b, b^c in next round 776116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r1,[sp,#11*4] @ from future BODY_16_xx 777116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 778116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r8,ror#20 @ Sigma0(a) 779116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r3,r3,r12 @ (b^c)&=(a^b) 780116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,r11,r7 @ d+=h 781116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r3,r9 @ Maj(a,b,c) 782116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r7,r7,r0,ror#2 @ h+=Sigma0(a) 783116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ add r7,r7,r3 @ h+=Maj(a,b,c) 784116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if __ARM_ARCH__>=7 785116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldr r2,[r1],#4 @ 13 786116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 13==15 787116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r1,[sp,#17*4] @ make room for r1 788116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 789116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r11,r11,ror#5 790116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r7,r7,r3 @ h+=Maj(a,b,c) from the past 791116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r11,ror#19 @ Sigma1(e) 792116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch rev r2,r2 793116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 794116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldrb r2,[r1,#3] @ 13 795116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r7,r7,r3 @ h+=Maj(a,b,c) from the past 796116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r3,[r1,#2] 797116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r0,[r1,#1] 798116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch orr r2,r2,r3,lsl#8 799116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r3,[r1],#4 800116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch orr r2,r2,r0,lsl#16 801116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 13==15 802116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r1,[sp,#17*4] @ make room for r1 803116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 804116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r11,r11,ror#5 805116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch orr r2,r2,r3,lsl#24 806116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r11,ror#19 @ Sigma1(e) 807116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 808116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r3,[r14],#4 @ *K256++ 809116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r6,r6,r2 @ h+=X[i] 810116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r2,[sp,#13*4] 811116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r4,r5 812116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r6,r6,r0,ror#6 @ h+=Sigma1(e) 813116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r11 814116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r6,r6,r3 @ h+=K256[i] 815116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r5 @ Ch(e,f,g) 816116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r7,r7,ror#11 817116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r6,r6,r2 @ h+=Ch(e,f,g) 818116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 13==31 819116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r3,r3,#0xff 820116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmp r3,#0xf2 @ done? 821116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 822116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 13<15 823116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7 824116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[r1],#4 @ prefetch 825116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else 826116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r2,[r1,#3] 827116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 828116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r7,r8 @ a^b, b^c in next round 829116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 830116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#15*4] @ from future BODY_16_xx 831116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r7,r8 @ a^b, b^c in next round 832116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r1,[sp,#12*4] @ from future BODY_16_xx 833116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 834116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r7,ror#20 @ Sigma0(a) 835116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r12,r12,r3 @ (b^c)&=(a^b) 836116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,r10,r6 @ d+=h 837116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r12,r8 @ Maj(a,b,c) 838116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r6,r6,r0,ror#2 @ h+=Sigma0(a) 839116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ add r6,r6,r12 @ h+=Maj(a,b,c) 840116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if __ARM_ARCH__>=7 841116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldr r2,[r1],#4 @ 14 842116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 14==15 843116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r1,[sp,#17*4] @ make room for r1 844116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 845116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r10,r10,ror#5 846116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r6,r6,r12 @ h+=Maj(a,b,c) from the past 847116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r10,ror#19 @ Sigma1(e) 848116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch rev r2,r2 849116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 850116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldrb r2,[r1,#3] @ 14 851116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r6,r6,r12 @ h+=Maj(a,b,c) from the past 852116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r12,[r1,#2] 853116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r0,[r1,#1] 854116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch orr r2,r2,r12,lsl#8 855116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r12,[r1],#4 856116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch orr r2,r2,r0,lsl#16 857116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 14==15 858116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r1,[sp,#17*4] @ make room for r1 859116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 860116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r10,r10,ror#5 861116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch orr r2,r2,r12,lsl#24 862116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r10,ror#19 @ Sigma1(e) 863116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 864116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r12,[r14],#4 @ *K256++ 865116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r5,r5,r2 @ h+=X[i] 866116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r2,[sp,#14*4] 867116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r11,r4 868116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r5,r5,r0,ror#6 @ h+=Sigma1(e) 869116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r10 870116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r5,r5,r12 @ h+=K256[i] 871116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r4 @ Ch(e,f,g) 872116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r6,r6,ror#11 873116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r5,r5,r2 @ h+=Ch(e,f,g) 874116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 14==31 875116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r12,r12,#0xff 876116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmp r12,#0xf2 @ done? 877116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 878116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 14<15 879116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7 880116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[r1],#4 @ prefetch 881116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else 882116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r2,[r1,#3] 883116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 884116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r6,r7 @ a^b, b^c in next round 885116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 886116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#0*4] @ from future BODY_16_xx 887116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r6,r7 @ a^b, b^c in next round 888116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r1,[sp,#13*4] @ from future BODY_16_xx 889116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 890116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r6,ror#20 @ Sigma0(a) 891116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r3,r3,r12 @ (b^c)&=(a^b) 892116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r9,r9,r5 @ d+=h 893116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r3,r7 @ Maj(a,b,c) 894116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r5,r5,r0,ror#2 @ h+=Sigma0(a) 895116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ add r5,r5,r3 @ h+=Maj(a,b,c) 896116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if __ARM_ARCH__>=7 897116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldr r2,[r1],#4 @ 15 898116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 15==15 899116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r1,[sp,#17*4] @ make room for r1 900116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 901116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r9,r9,ror#5 902116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r5,r5,r3 @ h+=Maj(a,b,c) from the past 903116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r9,ror#19 @ Sigma1(e) 904116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch rev r2,r2 905116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 906116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldrb r2,[r1,#3] @ 15 907116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r5,r5,r3 @ h+=Maj(a,b,c) from the past 908116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r3,[r1,#2] 909116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r0,[r1,#1] 910116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch orr r2,r2,r3,lsl#8 911116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r3,[r1],#4 912116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch orr r2,r2,r0,lsl#16 913116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if 15==15 914116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r1,[sp,#17*4] @ make room for r1 915116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 916116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r9,r9,ror#5 917116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch orr r2,r2,r3,lsl#24 918116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r9,ror#19 @ Sigma1(e) 919116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 920116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r3,[r14],#4 @ *K256++ 921116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4,r4,r2 @ h+=X[i] 922116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r2,[sp,#15*4] 923116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r10,r11 924116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4,r4,r0,ror#6 @ h+=Sigma1(e) 925116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r9 926116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4,r4,r3 @ h+=K256[i] 927116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r11 @ Ch(e,f,g) 928116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r5,r5,ror#11 929116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4,r4,r2 @ h+=Ch(e,f,g) 930116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 15==31 931116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r3,r3,#0xff 932116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmp r3,#0xf2 @ done? 933116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 934116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 15<15 935116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7 936116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[r1],#4 @ prefetch 937116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else 938116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r2,[r1,#3] 939116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 940116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r5,r6 @ a^b, b^c in next round 941116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 942116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#1*4] @ from future BODY_16_xx 943116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r5,r6 @ a^b, b^c in next round 944116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r1,[sp,#14*4] @ from future BODY_16_xx 945116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 946116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r5,ror#20 @ Sigma0(a) 947116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r12,r12,r3 @ (b^c)&=(a^b) 948116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r8,r8,r4 @ d+=h 949116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r12,r6 @ Maj(a,b,c) 950116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4,r4,r0,ror#2 @ h+=Sigma0(a) 951116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ add r4,r4,r12 @ h+=Maj(a,b,c) 952116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.Lrounds_16_xx: 953116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldr r2,[sp,#1*4] @ 16 954116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldr r1,[sp,#14*4] 955116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r0,r2,ror#7 956116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4,r4,r12 @ h+=Maj(a,b,c) from the past 957116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r12,r1,ror#17 958116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r2,ror#18 959116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r12,r1,ror#19 960116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 961116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#0*4] 962116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r12,r1,lsr#10 @ sigma1(X[i+14]) 963116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r1,[sp,#9*4] 964116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 965116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r12,r12,r0 966116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r8,r8,ror#5 @ from BODY_00_15 967116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r2,r2,r12 968116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r8,ror#19 @ Sigma1(e) 969116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r2,r2,r1 @ X[i] 970116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r12,[r14],#4 @ *K256++ 971116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,r11,r2 @ h+=X[i] 972116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r2,[sp,#0*4] 973116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r9,r10 974116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,r11,r0,ror#6 @ h+=Sigma1(e) 975116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r8 976116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,r11,r12 @ h+=K256[i] 977116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r10 @ Ch(e,f,g) 978116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r4,r4,ror#11 979116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,r11,r2 @ h+=Ch(e,f,g) 980116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 16==31 981116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r12,r12,#0xff 982116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmp r12,#0xf2 @ done? 983116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 984116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 16<15 985116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7 986116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[r1],#4 @ prefetch 987116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else 988116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r2,[r1,#3] 989116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 990116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r4,r5 @ a^b, b^c in next round 991116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 992116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#2*4] @ from future BODY_16_xx 993116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r4,r5 @ a^b, b^c in next round 994116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r1,[sp,#15*4] @ from future BODY_16_xx 995116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 996116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r4,ror#20 @ Sigma0(a) 997116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r3,r3,r12 @ (b^c)&=(a^b) 998116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r7,r7,r11 @ d+=h 999116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r3,r5 @ Maj(a,b,c) 1000116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,r11,r0,ror#2 @ h+=Sigma0(a) 1001116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ add r11,r11,r3 @ h+=Maj(a,b,c) 1002116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldr r2,[sp,#2*4] @ 17 1003116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldr r1,[sp,#15*4] 1004116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r0,r2,ror#7 1005116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,r11,r3 @ h+=Maj(a,b,c) from the past 1006116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r3,r1,ror#17 1007116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r2,ror#18 1008116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r3,r1,ror#19 1009116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1010116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#1*4] 1011116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r3,r1,lsr#10 @ sigma1(X[i+14]) 1012116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r1,[sp,#10*4] 1013116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1014116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r3,r3,r0 1015116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r7,r7,ror#5 @ from BODY_00_15 1016116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r2,r2,r3 1017116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r7,ror#19 @ Sigma1(e) 1018116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r2,r2,r1 @ X[i] 1019116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r3,[r14],#4 @ *K256++ 1020116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,r10,r2 @ h+=X[i] 1021116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r2,[sp,#1*4] 1022116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r8,r9 1023116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,r10,r0,ror#6 @ h+=Sigma1(e) 1024116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r7 1025116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,r10,r3 @ h+=K256[i] 1026116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r9 @ Ch(e,f,g) 1027116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r11,r11,ror#11 1028116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,r10,r2 @ h+=Ch(e,f,g) 1029116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 17==31 1030116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r3,r3,#0xff 1031116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmp r3,#0xf2 @ done? 1032116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1033116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 17<15 1034116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7 1035116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[r1],#4 @ prefetch 1036116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else 1037116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r2,[r1,#3] 1038116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 1039116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r11,r4 @ a^b, b^c in next round 1040116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 1041116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#3*4] @ from future BODY_16_xx 1042116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r11,r4 @ a^b, b^c in next round 1043116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r1,[sp,#0*4] @ from future BODY_16_xx 1044116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1045116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r11,ror#20 @ Sigma0(a) 1046116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r12,r12,r3 @ (b^c)&=(a^b) 1047116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r6,r6,r10 @ d+=h 1048116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r12,r4 @ Maj(a,b,c) 1049116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,r10,r0,ror#2 @ h+=Sigma0(a) 1050116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ add r10,r10,r12 @ h+=Maj(a,b,c) 1051116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldr r2,[sp,#3*4] @ 18 1052116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldr r1,[sp,#0*4] 1053116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r0,r2,ror#7 1054116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,r10,r12 @ h+=Maj(a,b,c) from the past 1055116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r12,r1,ror#17 1056116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r2,ror#18 1057116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r12,r1,ror#19 1058116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1059116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#2*4] 1060116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r12,r1,lsr#10 @ sigma1(X[i+14]) 1061116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r1,[sp,#11*4] 1062116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1063116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r12,r12,r0 1064116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r6,r6,ror#5 @ from BODY_00_15 1065116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r2,r2,r12 1066116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r6,ror#19 @ Sigma1(e) 1067116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r2,r2,r1 @ X[i] 1068116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r12,[r14],#4 @ *K256++ 1069116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r9,r9,r2 @ h+=X[i] 1070116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r2,[sp,#2*4] 1071116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r7,r8 1072116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r9,r9,r0,ror#6 @ h+=Sigma1(e) 1073116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r6 1074116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r9,r9,r12 @ h+=K256[i] 1075116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r8 @ Ch(e,f,g) 1076116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r10,r10,ror#11 1077116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r9,r9,r2 @ h+=Ch(e,f,g) 1078116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 18==31 1079116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r12,r12,#0xff 1080116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmp r12,#0xf2 @ done? 1081116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1082116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 18<15 1083116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7 1084116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[r1],#4 @ prefetch 1085116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else 1086116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r2,[r1,#3] 1087116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 1088116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r10,r11 @ a^b, b^c in next round 1089116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 1090116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#4*4] @ from future BODY_16_xx 1091116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r10,r11 @ a^b, b^c in next round 1092116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r1,[sp,#1*4] @ from future BODY_16_xx 1093116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1094116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r10,ror#20 @ Sigma0(a) 1095116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r3,r3,r12 @ (b^c)&=(a^b) 1096116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r5,r5,r9 @ d+=h 1097116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r3,r11 @ Maj(a,b,c) 1098116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r9,r9,r0,ror#2 @ h+=Sigma0(a) 1099116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ add r9,r9,r3 @ h+=Maj(a,b,c) 1100116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldr r2,[sp,#4*4] @ 19 1101116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldr r1,[sp,#1*4] 1102116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r0,r2,ror#7 1103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r9,r9,r3 @ h+=Maj(a,b,c) from the past 1104116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r3,r1,ror#17 1105116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r2,ror#18 1106116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r3,r1,ror#19 1107116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1108116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#3*4] 1109116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r3,r1,lsr#10 @ sigma1(X[i+14]) 1110116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r1,[sp,#12*4] 1111116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1112116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r3,r3,r0 1113116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r5,r5,ror#5 @ from BODY_00_15 1114116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r2,r2,r3 1115116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r5,ror#19 @ Sigma1(e) 1116116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r2,r2,r1 @ X[i] 1117116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r3,[r14],#4 @ *K256++ 1118116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r8,r8,r2 @ h+=X[i] 1119116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r2,[sp,#3*4] 1120116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r6,r7 1121116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r8,r8,r0,ror#6 @ h+=Sigma1(e) 1122116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r5 1123116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r8,r8,r3 @ h+=K256[i] 1124116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r7 @ Ch(e,f,g) 1125116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r9,r9,ror#11 1126116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r8,r8,r2 @ h+=Ch(e,f,g) 1127116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 19==31 1128116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r3,r3,#0xff 1129116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmp r3,#0xf2 @ done? 1130116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1131116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 19<15 1132116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7 1133116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[r1],#4 @ prefetch 1134116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else 1135116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r2,[r1,#3] 1136116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 1137116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r9,r10 @ a^b, b^c in next round 1138116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 1139116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#5*4] @ from future BODY_16_xx 1140116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r9,r10 @ a^b, b^c in next round 1141116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r1,[sp,#2*4] @ from future BODY_16_xx 1142116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1143116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r9,ror#20 @ Sigma0(a) 1144116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r12,r12,r3 @ (b^c)&=(a^b) 1145116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4,r4,r8 @ d+=h 1146116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r12,r10 @ Maj(a,b,c) 1147116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r8,r8,r0,ror#2 @ h+=Sigma0(a) 1148116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ add r8,r8,r12 @ h+=Maj(a,b,c) 1149116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldr r2,[sp,#5*4] @ 20 1150116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldr r1,[sp,#2*4] 1151116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r0,r2,ror#7 1152116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r8,r8,r12 @ h+=Maj(a,b,c) from the past 1153116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r12,r1,ror#17 1154116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r2,ror#18 1155116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r12,r1,ror#19 1156116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1157116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#4*4] 1158116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r12,r1,lsr#10 @ sigma1(X[i+14]) 1159116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r1,[sp,#13*4] 1160116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1161116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r12,r12,r0 1162116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r4,r4,ror#5 @ from BODY_00_15 1163116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r2,r2,r12 1164116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r4,ror#19 @ Sigma1(e) 1165116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r2,r2,r1 @ X[i] 1166116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r12,[r14],#4 @ *K256++ 1167116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r7,r7,r2 @ h+=X[i] 1168116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r2,[sp,#4*4] 1169116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r5,r6 1170116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r7,r7,r0,ror#6 @ h+=Sigma1(e) 1171116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r4 1172116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r7,r7,r12 @ h+=K256[i] 1173116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r6 @ Ch(e,f,g) 1174116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r8,r8,ror#11 1175116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r7,r7,r2 @ h+=Ch(e,f,g) 1176116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 20==31 1177116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r12,r12,#0xff 1178116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmp r12,#0xf2 @ done? 1179116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1180116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 20<15 1181116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7 1182116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[r1],#4 @ prefetch 1183116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else 1184116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r2,[r1,#3] 1185116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 1186116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r8,r9 @ a^b, b^c in next round 1187116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 1188116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#6*4] @ from future BODY_16_xx 1189116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r8,r9 @ a^b, b^c in next round 1190116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r1,[sp,#3*4] @ from future BODY_16_xx 1191116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1192116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r8,ror#20 @ Sigma0(a) 1193116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r3,r3,r12 @ (b^c)&=(a^b) 1194116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,r11,r7 @ d+=h 1195116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r3,r9 @ Maj(a,b,c) 1196116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r7,r7,r0,ror#2 @ h+=Sigma0(a) 1197116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ add r7,r7,r3 @ h+=Maj(a,b,c) 1198116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldr r2,[sp,#6*4] @ 21 1199116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldr r1,[sp,#3*4] 1200116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r0,r2,ror#7 1201116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r7,r7,r3 @ h+=Maj(a,b,c) from the past 1202116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r3,r1,ror#17 1203116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r2,ror#18 1204116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r3,r1,ror#19 1205116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1206116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#5*4] 1207116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r3,r1,lsr#10 @ sigma1(X[i+14]) 1208116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r1,[sp,#14*4] 1209116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1210116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r3,r3,r0 1211116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r11,r11,ror#5 @ from BODY_00_15 1212116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r2,r2,r3 1213116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r11,ror#19 @ Sigma1(e) 1214116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r2,r2,r1 @ X[i] 1215116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r3,[r14],#4 @ *K256++ 1216116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r6,r6,r2 @ h+=X[i] 1217116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r2,[sp,#5*4] 1218116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r4,r5 1219116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r6,r6,r0,ror#6 @ h+=Sigma1(e) 1220116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r11 1221116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r6,r6,r3 @ h+=K256[i] 1222116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r5 @ Ch(e,f,g) 1223116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r7,r7,ror#11 1224116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r6,r6,r2 @ h+=Ch(e,f,g) 1225116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 21==31 1226116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r3,r3,#0xff 1227116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmp r3,#0xf2 @ done? 1228116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1229116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 21<15 1230116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7 1231116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[r1],#4 @ prefetch 1232116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else 1233116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r2,[r1,#3] 1234116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 1235116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r7,r8 @ a^b, b^c in next round 1236116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 1237116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#7*4] @ from future BODY_16_xx 1238116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r7,r8 @ a^b, b^c in next round 1239116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r1,[sp,#4*4] @ from future BODY_16_xx 1240116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1241116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r7,ror#20 @ Sigma0(a) 1242116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r12,r12,r3 @ (b^c)&=(a^b) 1243116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,r10,r6 @ d+=h 1244116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r12,r8 @ Maj(a,b,c) 1245116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r6,r6,r0,ror#2 @ h+=Sigma0(a) 1246116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ add r6,r6,r12 @ h+=Maj(a,b,c) 1247116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldr r2,[sp,#7*4] @ 22 1248116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldr r1,[sp,#4*4] 1249116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r0,r2,ror#7 1250116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r6,r6,r12 @ h+=Maj(a,b,c) from the past 1251116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r12,r1,ror#17 1252116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r2,ror#18 1253116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r12,r1,ror#19 1254116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1255116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#6*4] 1256116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r12,r1,lsr#10 @ sigma1(X[i+14]) 1257116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r1,[sp,#15*4] 1258116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1259116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r12,r12,r0 1260116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r10,r10,ror#5 @ from BODY_00_15 1261116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r2,r2,r12 1262116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r10,ror#19 @ Sigma1(e) 1263116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r2,r2,r1 @ X[i] 1264116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r12,[r14],#4 @ *K256++ 1265116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r5,r5,r2 @ h+=X[i] 1266116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r2,[sp,#6*4] 1267116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r11,r4 1268116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r5,r5,r0,ror#6 @ h+=Sigma1(e) 1269116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r10 1270116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r5,r5,r12 @ h+=K256[i] 1271116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r4 @ Ch(e,f,g) 1272116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r6,r6,ror#11 1273116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r5,r5,r2 @ h+=Ch(e,f,g) 1274116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 22==31 1275116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r12,r12,#0xff 1276116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmp r12,#0xf2 @ done? 1277116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1278116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 22<15 1279116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7 1280116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[r1],#4 @ prefetch 1281116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else 1282116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r2,[r1,#3] 1283116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 1284116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r6,r7 @ a^b, b^c in next round 1285116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 1286116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#8*4] @ from future BODY_16_xx 1287116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r6,r7 @ a^b, b^c in next round 1288116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r1,[sp,#5*4] @ from future BODY_16_xx 1289116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1290116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r6,ror#20 @ Sigma0(a) 1291116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r3,r3,r12 @ (b^c)&=(a^b) 1292116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r9,r9,r5 @ d+=h 1293116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r3,r7 @ Maj(a,b,c) 1294116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r5,r5,r0,ror#2 @ h+=Sigma0(a) 1295116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ add r5,r5,r3 @ h+=Maj(a,b,c) 1296116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldr r2,[sp,#8*4] @ 23 1297116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldr r1,[sp,#5*4] 1298116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r0,r2,ror#7 1299116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r5,r5,r3 @ h+=Maj(a,b,c) from the past 1300116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r3,r1,ror#17 1301116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r2,ror#18 1302116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r3,r1,ror#19 1303116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1304116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#7*4] 1305116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r3,r1,lsr#10 @ sigma1(X[i+14]) 1306116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r1,[sp,#0*4] 1307116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1308116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r3,r3,r0 1309116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r9,r9,ror#5 @ from BODY_00_15 1310116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r2,r2,r3 1311116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r9,ror#19 @ Sigma1(e) 1312116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r2,r2,r1 @ X[i] 1313116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r3,[r14],#4 @ *K256++ 1314116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4,r4,r2 @ h+=X[i] 1315116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r2,[sp,#7*4] 1316116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r10,r11 1317116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4,r4,r0,ror#6 @ h+=Sigma1(e) 1318116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r9 1319116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4,r4,r3 @ h+=K256[i] 1320116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r11 @ Ch(e,f,g) 1321116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r5,r5,ror#11 1322116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4,r4,r2 @ h+=Ch(e,f,g) 1323116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 23==31 1324116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r3,r3,#0xff 1325116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmp r3,#0xf2 @ done? 1326116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1327116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 23<15 1328116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7 1329116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[r1],#4 @ prefetch 1330116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else 1331116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r2,[r1,#3] 1332116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 1333116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r5,r6 @ a^b, b^c in next round 1334116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 1335116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#9*4] @ from future BODY_16_xx 1336116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r5,r6 @ a^b, b^c in next round 1337116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r1,[sp,#6*4] @ from future BODY_16_xx 1338116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1339116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r5,ror#20 @ Sigma0(a) 1340116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r12,r12,r3 @ (b^c)&=(a^b) 1341116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r8,r8,r4 @ d+=h 1342116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r12,r6 @ Maj(a,b,c) 1343116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4,r4,r0,ror#2 @ h+=Sigma0(a) 1344116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ add r4,r4,r12 @ h+=Maj(a,b,c) 1345116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldr r2,[sp,#9*4] @ 24 1346116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldr r1,[sp,#6*4] 1347116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r0,r2,ror#7 1348116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4,r4,r12 @ h+=Maj(a,b,c) from the past 1349116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r12,r1,ror#17 1350116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r2,ror#18 1351116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r12,r1,ror#19 1352116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1353116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#8*4] 1354116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r12,r1,lsr#10 @ sigma1(X[i+14]) 1355116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r1,[sp,#1*4] 1356116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1357116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r12,r12,r0 1358116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r8,r8,ror#5 @ from BODY_00_15 1359116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r2,r2,r12 1360116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r8,ror#19 @ Sigma1(e) 1361116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r2,r2,r1 @ X[i] 1362116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r12,[r14],#4 @ *K256++ 1363116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,r11,r2 @ h+=X[i] 1364116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r2,[sp,#8*4] 1365116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r9,r10 1366116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,r11,r0,ror#6 @ h+=Sigma1(e) 1367116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r8 1368116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,r11,r12 @ h+=K256[i] 1369116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r10 @ Ch(e,f,g) 1370116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r4,r4,ror#11 1371116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,r11,r2 @ h+=Ch(e,f,g) 1372116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 24==31 1373116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r12,r12,#0xff 1374116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmp r12,#0xf2 @ done? 1375116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1376116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 24<15 1377116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7 1378116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[r1],#4 @ prefetch 1379116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else 1380116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r2,[r1,#3] 1381116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 1382116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r4,r5 @ a^b, b^c in next round 1383116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 1384116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#10*4] @ from future BODY_16_xx 1385116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r4,r5 @ a^b, b^c in next round 1386116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r1,[sp,#7*4] @ from future BODY_16_xx 1387116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1388116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r4,ror#20 @ Sigma0(a) 1389116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r3,r3,r12 @ (b^c)&=(a^b) 1390116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r7,r7,r11 @ d+=h 1391116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r3,r5 @ Maj(a,b,c) 1392116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,r11,r0,ror#2 @ h+=Sigma0(a) 1393116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ add r11,r11,r3 @ h+=Maj(a,b,c) 1394116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldr r2,[sp,#10*4] @ 25 1395116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldr r1,[sp,#7*4] 1396116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r0,r2,ror#7 1397116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,r11,r3 @ h+=Maj(a,b,c) from the past 1398116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r3,r1,ror#17 1399116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r2,ror#18 1400116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r3,r1,ror#19 1401116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1402116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#9*4] 1403116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r3,r1,lsr#10 @ sigma1(X[i+14]) 1404116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r1,[sp,#2*4] 1405116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1406116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r3,r3,r0 1407116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r7,r7,ror#5 @ from BODY_00_15 1408116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r2,r2,r3 1409116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r7,ror#19 @ Sigma1(e) 1410116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r2,r2,r1 @ X[i] 1411116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r3,[r14],#4 @ *K256++ 1412116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,r10,r2 @ h+=X[i] 1413116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r2,[sp,#9*4] 1414116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r8,r9 1415116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,r10,r0,ror#6 @ h+=Sigma1(e) 1416116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r7 1417116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,r10,r3 @ h+=K256[i] 1418116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r9 @ Ch(e,f,g) 1419116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r11,r11,ror#11 1420116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,r10,r2 @ h+=Ch(e,f,g) 1421116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 25==31 1422116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r3,r3,#0xff 1423116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmp r3,#0xf2 @ done? 1424116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1425116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 25<15 1426116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7 1427116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[r1],#4 @ prefetch 1428116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else 1429116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r2,[r1,#3] 1430116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 1431116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r11,r4 @ a^b, b^c in next round 1432116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 1433116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#11*4] @ from future BODY_16_xx 1434116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r11,r4 @ a^b, b^c in next round 1435116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r1,[sp,#8*4] @ from future BODY_16_xx 1436116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1437116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r11,ror#20 @ Sigma0(a) 1438116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r12,r12,r3 @ (b^c)&=(a^b) 1439116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r6,r6,r10 @ d+=h 1440116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r12,r4 @ Maj(a,b,c) 1441116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,r10,r0,ror#2 @ h+=Sigma0(a) 1442116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ add r10,r10,r12 @ h+=Maj(a,b,c) 1443116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldr r2,[sp,#11*4] @ 26 1444116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldr r1,[sp,#8*4] 1445116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r0,r2,ror#7 1446116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,r10,r12 @ h+=Maj(a,b,c) from the past 1447116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r12,r1,ror#17 1448116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r2,ror#18 1449116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r12,r1,ror#19 1450116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1451116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#10*4] 1452116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r12,r1,lsr#10 @ sigma1(X[i+14]) 1453116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r1,[sp,#3*4] 1454116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1455116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r12,r12,r0 1456116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r6,r6,ror#5 @ from BODY_00_15 1457116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r2,r2,r12 1458116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r6,ror#19 @ Sigma1(e) 1459116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r2,r2,r1 @ X[i] 1460116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r12,[r14],#4 @ *K256++ 1461116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r9,r9,r2 @ h+=X[i] 1462116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r2,[sp,#10*4] 1463116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r7,r8 1464116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r9,r9,r0,ror#6 @ h+=Sigma1(e) 1465116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r6 1466116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r9,r9,r12 @ h+=K256[i] 1467116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r8 @ Ch(e,f,g) 1468116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r10,r10,ror#11 1469116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r9,r9,r2 @ h+=Ch(e,f,g) 1470116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 26==31 1471116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r12,r12,#0xff 1472116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmp r12,#0xf2 @ done? 1473116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1474116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 26<15 1475116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7 1476116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[r1],#4 @ prefetch 1477116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else 1478116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r2,[r1,#3] 1479116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 1480116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r10,r11 @ a^b, b^c in next round 1481116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 1482116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#12*4] @ from future BODY_16_xx 1483116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r10,r11 @ a^b, b^c in next round 1484116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r1,[sp,#9*4] @ from future BODY_16_xx 1485116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1486116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r10,ror#20 @ Sigma0(a) 1487116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r3,r3,r12 @ (b^c)&=(a^b) 1488116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r5,r5,r9 @ d+=h 1489116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r3,r11 @ Maj(a,b,c) 1490116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r9,r9,r0,ror#2 @ h+=Sigma0(a) 1491116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ add r9,r9,r3 @ h+=Maj(a,b,c) 1492116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldr r2,[sp,#12*4] @ 27 1493116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldr r1,[sp,#9*4] 1494116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r0,r2,ror#7 1495116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r9,r9,r3 @ h+=Maj(a,b,c) from the past 1496116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r3,r1,ror#17 1497116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r2,ror#18 1498116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r3,r1,ror#19 1499116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1500116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#11*4] 1501116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r3,r1,lsr#10 @ sigma1(X[i+14]) 1502116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r1,[sp,#4*4] 1503116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1504116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r3,r3,r0 1505116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r5,r5,ror#5 @ from BODY_00_15 1506116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r2,r2,r3 1507116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r5,ror#19 @ Sigma1(e) 1508116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r2,r2,r1 @ X[i] 1509116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r3,[r14],#4 @ *K256++ 1510116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r8,r8,r2 @ h+=X[i] 1511116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r2,[sp,#11*4] 1512116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r6,r7 1513116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r8,r8,r0,ror#6 @ h+=Sigma1(e) 1514116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r5 1515116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r8,r8,r3 @ h+=K256[i] 1516116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r7 @ Ch(e,f,g) 1517116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r9,r9,ror#11 1518116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r8,r8,r2 @ h+=Ch(e,f,g) 1519116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 27==31 1520116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r3,r3,#0xff 1521116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmp r3,#0xf2 @ done? 1522116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1523116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 27<15 1524116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7 1525116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[r1],#4 @ prefetch 1526116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else 1527116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r2,[r1,#3] 1528116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 1529116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r9,r10 @ a^b, b^c in next round 1530116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 1531116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#13*4] @ from future BODY_16_xx 1532116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r9,r10 @ a^b, b^c in next round 1533116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r1,[sp,#10*4] @ from future BODY_16_xx 1534116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1535116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r9,ror#20 @ Sigma0(a) 1536116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r12,r12,r3 @ (b^c)&=(a^b) 1537116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4,r4,r8 @ d+=h 1538116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r12,r10 @ Maj(a,b,c) 1539116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r8,r8,r0,ror#2 @ h+=Sigma0(a) 1540116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ add r8,r8,r12 @ h+=Maj(a,b,c) 1541116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldr r2,[sp,#13*4] @ 28 1542116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldr r1,[sp,#10*4] 1543116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r0,r2,ror#7 1544116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r8,r8,r12 @ h+=Maj(a,b,c) from the past 1545116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r12,r1,ror#17 1546116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r2,ror#18 1547116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r12,r1,ror#19 1548116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1549116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#12*4] 1550116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r12,r1,lsr#10 @ sigma1(X[i+14]) 1551116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r1,[sp,#5*4] 1552116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1553116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r12,r12,r0 1554116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r4,r4,ror#5 @ from BODY_00_15 1555116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r2,r2,r12 1556116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r4,ror#19 @ Sigma1(e) 1557116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r2,r2,r1 @ X[i] 1558116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r12,[r14],#4 @ *K256++ 1559116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r7,r7,r2 @ h+=X[i] 1560116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r2,[sp,#12*4] 1561116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r5,r6 1562116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r7,r7,r0,ror#6 @ h+=Sigma1(e) 1563116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r4 1564116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r7,r7,r12 @ h+=K256[i] 1565116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r6 @ Ch(e,f,g) 1566116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r8,r8,ror#11 1567116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r7,r7,r2 @ h+=Ch(e,f,g) 1568116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 28==31 1569116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r12,r12,#0xff 1570116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmp r12,#0xf2 @ done? 1571116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1572116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 28<15 1573116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7 1574116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[r1],#4 @ prefetch 1575116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else 1576116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r2,[r1,#3] 1577116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 1578116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r8,r9 @ a^b, b^c in next round 1579116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 1580116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#14*4] @ from future BODY_16_xx 1581116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r8,r9 @ a^b, b^c in next round 1582116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r1,[sp,#11*4] @ from future BODY_16_xx 1583116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1584116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r8,ror#20 @ Sigma0(a) 1585116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r3,r3,r12 @ (b^c)&=(a^b) 1586116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,r11,r7 @ d+=h 1587116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r3,r9 @ Maj(a,b,c) 1588116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r7,r7,r0,ror#2 @ h+=Sigma0(a) 1589116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ add r7,r7,r3 @ h+=Maj(a,b,c) 1590116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldr r2,[sp,#14*4] @ 29 1591116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldr r1,[sp,#11*4] 1592116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r0,r2,ror#7 1593116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r7,r7,r3 @ h+=Maj(a,b,c) from the past 1594116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r3,r1,ror#17 1595116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r2,ror#18 1596116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r3,r1,ror#19 1597116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1598116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#13*4] 1599116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r3,r1,lsr#10 @ sigma1(X[i+14]) 1600116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r1,[sp,#6*4] 1601116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1602116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r3,r3,r0 1603116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r11,r11,ror#5 @ from BODY_00_15 1604116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r2,r2,r3 1605116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r11,ror#19 @ Sigma1(e) 1606116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r2,r2,r1 @ X[i] 1607116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r3,[r14],#4 @ *K256++ 1608116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r6,r6,r2 @ h+=X[i] 1609116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r2,[sp,#13*4] 1610116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r4,r5 1611116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r6,r6,r0,ror#6 @ h+=Sigma1(e) 1612116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r11 1613116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r6,r6,r3 @ h+=K256[i] 1614116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r5 @ Ch(e,f,g) 1615116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r7,r7,ror#11 1616116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r6,r6,r2 @ h+=Ch(e,f,g) 1617116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 29==31 1618116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r3,r3,#0xff 1619116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmp r3,#0xf2 @ done? 1620116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1621116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 29<15 1622116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7 1623116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[r1],#4 @ prefetch 1624116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else 1625116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r2,[r1,#3] 1626116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 1627116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r7,r8 @ a^b, b^c in next round 1628116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 1629116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#15*4] @ from future BODY_16_xx 1630116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r7,r8 @ a^b, b^c in next round 1631116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r1,[sp,#12*4] @ from future BODY_16_xx 1632116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1633116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r7,ror#20 @ Sigma0(a) 1634116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r12,r12,r3 @ (b^c)&=(a^b) 1635116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,r10,r6 @ d+=h 1636116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r12,r8 @ Maj(a,b,c) 1637116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r6,r6,r0,ror#2 @ h+=Sigma0(a) 1638116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ add r6,r6,r12 @ h+=Maj(a,b,c) 1639116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldr r2,[sp,#15*4] @ 30 1640116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldr r1,[sp,#12*4] 1641116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r0,r2,ror#7 1642116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r6,r6,r12 @ h+=Maj(a,b,c) from the past 1643116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r12,r1,ror#17 1644116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r2,ror#18 1645116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r12,r1,ror#19 1646116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1647116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#14*4] 1648116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r12,r1,lsr#10 @ sigma1(X[i+14]) 1649116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r1,[sp,#7*4] 1650116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1651116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r12,r12,r0 1652116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r10,r10,ror#5 @ from BODY_00_15 1653116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r2,r2,r12 1654116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r10,ror#19 @ Sigma1(e) 1655116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r2,r2,r1 @ X[i] 1656116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r12,[r14],#4 @ *K256++ 1657116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r5,r5,r2 @ h+=X[i] 1658116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r2,[sp,#14*4] 1659116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r11,r4 1660116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r5,r5,r0,ror#6 @ h+=Sigma1(e) 1661116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r10 1662116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r5,r5,r12 @ h+=K256[i] 1663116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r4 @ Ch(e,f,g) 1664116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r6,r6,ror#11 1665116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r5,r5,r2 @ h+=Ch(e,f,g) 1666116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 30==31 1667116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r12,r12,#0xff 1668116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmp r12,#0xf2 @ done? 1669116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1670116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 30<15 1671116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7 1672116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[r1],#4 @ prefetch 1673116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else 1674116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r2,[r1,#3] 1675116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 1676116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r6,r7 @ a^b, b^c in next round 1677116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 1678116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#0*4] @ from future BODY_16_xx 1679116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r6,r7 @ a^b, b^c in next round 1680116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r1,[sp,#13*4] @ from future BODY_16_xx 1681116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1682116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r6,ror#20 @ Sigma0(a) 1683116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r3,r3,r12 @ (b^c)&=(a^b) 1684116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r9,r9,r5 @ d+=h 1685116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r3,r7 @ Maj(a,b,c) 1686116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r5,r5,r0,ror#2 @ h+=Sigma0(a) 1687116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ add r5,r5,r3 @ h+=Maj(a,b,c) 1688116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldr r2,[sp,#0*4] @ 31 1689116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ ldr r1,[sp,#13*4] 1690116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r0,r2,ror#7 1691116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r5,r5,r3 @ h+=Maj(a,b,c) from the past 1692116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r3,r1,ror#17 1693116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r2,ror#18 1694116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r3,r1,ror#19 1695116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r2,lsr#3 @ sigma0(X[i+1]) 1696116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#15*4] 1697116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r3,r1,lsr#10 @ sigma1(X[i+14]) 1698116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r1,[sp,#8*4] 1699116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1700116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r3,r3,r0 1701116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r9,r9,ror#5 @ from BODY_00_15 1702116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r2,r2,r3 1703116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r9,ror#19 @ Sigma1(e) 1704116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r2,r2,r1 @ X[i] 1705116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r3,[r14],#4 @ *K256++ 1706116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4,r4,r2 @ h+=X[i] 1707116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r2,[sp,#15*4] 1708116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r10,r11 1709116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4,r4,r0,ror#6 @ h+=Sigma1(e) 1710116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r9 1711116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4,r4,r3 @ h+=K256[i] 1712116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r11 @ Ch(e,f,g) 1713116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r5,r5,ror#11 1714116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4,r4,r2 @ h+=Ch(e,f,g) 1715116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 31==31 1716116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r3,r3,#0xff 1717116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmp r3,#0xf2 @ done? 1718116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1719116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if 31<15 1720116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# if __ARM_ARCH__>=7 1721116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[r1],#4 @ prefetch 1722116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# else 1723116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrb r2,[r1,#3] 1724116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# endif 1725116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r5,r6 @ a^b, b^c in next round 1726116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 1727116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#1*4] @ from future BODY_16_xx 1728116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r5,r6 @ a^b, b^c in next round 1729116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r1,[sp,#14*4] @ from future BODY_16_xx 1730116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1731116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r5,ror#20 @ Sigma0(a) 1732116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r12,r12,r3 @ (b^c)&=(a^b) 1733116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r8,r8,r4 @ d+=h 1734116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r12,r6 @ Maj(a,b,c) 1735116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4,r4,r0,ror#2 @ h+=Sigma0(a) 1736116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch @ add r4,r4,r12 @ h+=Maj(a,b,c) 1737116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldreq r3,[sp,#16*4] @ pull ctx 1738116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bne .Lrounds_16_xx 1739116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1740116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4,r4,r12 @ h+=Maj(a,b,c) from the past 1741116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r0,[r3,#0] 1742116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[r3,#4] 1743116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r12,[r3,#8] 1744116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4,r4,r0 1745116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r0,[r3,#12] 1746116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r5,r5,r2 1747116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[r3,#16] 1748116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r6,r6,r12 1749116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r12,[r3,#20] 1750116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r7,r7,r0 1751116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r0,[r3,#24] 1752116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r8,r8,r2 1753116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[r3,#28] 1754116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r9,r9,r12 1755116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r1,[sp,#17*4] @ pull inp 1756116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r12,[sp,#18*4] @ pull inp+len 1757116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,r10,r0 1758116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,r11,r2 1759116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch stmia r3,{r4,r5,r6,r7,r8,r9,r10,r11} 1760116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch cmp r1,r12 1761116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sub r14,r14,#256 @ rewind Ktbl 1762116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bne .Loop 1763116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1764116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add sp,sp,#19*4 @ destroy frame 1765116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if __ARM_ARCH__>=5 1766116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldmia sp!,{r4-r11,pc} 1767116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 1768116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldmia sp!,{r4-r11,lr} 1769116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch tst lr,#1 1770116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch moveq pc,lr @ be binary compatible with V4, yet 1771116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch .word 0xe12fff1e @ interoperable with Thumb ISA:-) 1772116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 1773116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if __ARM_ARCH__>=7 1774116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.fpu neon 1775116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align 4 1776116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.LNEON: 1777116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch stmdb sp!,{r4-r12,lr} 1778116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1779116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r12,sp 1780116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sub sp,sp,#16*4+16 @ alloca 1781116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sub r14,r3,#256+32 @ K256 1782116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bic sp,sp,#15 @ align for 128-bit stores 1783116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1784116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q0},[r1]! 1785116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q1},[r1]! 1786116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q2},[r1]! 1787116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q3},[r1]! 1788116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.32 {q8},[r14,:128]! 1789116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.32 {q9},[r14,:128]! 1790116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.32 {q10},[r14,:128]! 1791116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.32 {q11},[r14,:128]! 1792116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vrev32.8 q0,q0 @ yes, even on 1793116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r0,[sp,#64] 1794116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vrev32.8 q1,q1 @ big-endian 1795116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r1,[sp,#68] 1796116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r1,sp 1797116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vrev32.8 q2,q2 1798116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r2,[sp,#72] 1799116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vrev32.8 q3,q3 1800116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r12,[sp,#76] @ save original sp 1801116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.i32 q8,q8,q0 1802116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.i32 q9,q9,q1 1803116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.32 {q8},[r1,:128]! 1804116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.i32 q10,q10,q2 1805116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.32 {q9},[r1,:128]! 1806116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.i32 q11,q11,q3 1807116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.32 {q10},[r1,:128]! 1808116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.32 {q11},[r1,:128]! 1809116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1810116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldmia r0,{r4-r11} 1811116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sub r1,r1,#64 1812116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#0] 1813116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r12,r12 1814116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r5,r6 1815116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch b .L_00_48 1816116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1817116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align 4 1818116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.L_00_48: 1819116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vext.8 q8,q0,q1,#4 1820116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,r11,r2 1821116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r9,r10 1822116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r8,r8,ror#5 1823116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vext.8 q9,q2,q3,#4 1824116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4,r4,r12 1825116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r8 1826116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r0,r8,ror#19 1827116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u32 q10,q8,#7 1828116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r4,r4,ror#11 1829116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r10 1830116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.i32 q0,q0,q9 1831116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,r11,r12,ror#6 1832116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r4,r5 1833116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u32 q9,q8,#3 1834116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r4,ror#20 1835116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,r11,r2 1836116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vsli.32 q10,q8,#25 1837116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#4] 1838116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r3,r3,r12 1839116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u32 q11,q8,#18 1840116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r7,r7,r11 1841116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,r11,r0,ror#2 1842116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r3,r5 1843116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q9,q9,q10 1844116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,r10,r2 1845116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vsli.32 q11,q8,#14 1846116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r8,r9 1847116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r7,r7,ror#5 1848116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u32 d24,d7,#17 1849116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,r11,r3 1850116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r7 1851116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q9,q9,q11 1852116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r0,r7,ror#19 1853116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r11,r11,ror#11 1854116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vsli.32 d24,d7,#15 1855116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r9 1856116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,r10,r3,ror#6 1857116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u32 d25,d7,#10 1858116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r11,r4 1859116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r11,ror#20 1860116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.i32 q0,q0,q9 1861116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,r10,r2 1862116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#8] 1863116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor d25,d25,d24 1864116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r12,r12,r3 1865116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r6,r6,r10 1866116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u32 d24,d7,#19 1867116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,r10,r0,ror#2 1868116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r12,r4 1869116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vsli.32 d24,d7,#13 1870116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r9,r9,r2 1871116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r7,r8 1872116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor d25,d25,d24 1873116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r6,r6,ror#5 1874116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,r10,r12 1875116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.i32 d0,d0,d25 1876116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r6 1877116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r0,r6,ror#19 1878116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u32 d24,d0,#17 1879116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r10,r10,ror#11 1880116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r8 1881116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vsli.32 d24,d0,#15 1882116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r9,r9,r12,ror#6 1883116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r10,r11 1884116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u32 d25,d0,#10 1885116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r10,ror#20 1886116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r9,r9,r2 1887116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor d25,d25,d24 1888116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#12] 1889116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r3,r3,r12 1890116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u32 d24,d0,#19 1891116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r5,r5,r9 1892116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r9,r9,r0,ror#2 1893116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r3,r11 1894116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.32 {q8},[r14,:128]! 1895116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r8,r8,r2 1896116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vsli.32 d24,d0,#13 1897116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r6,r7 1898116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r5,r5,ror#5 1899116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor d25,d25,d24 1900116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r9,r9,r3 1901116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r5 1902116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.i32 d1,d1,d25 1903116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r0,r5,ror#19 1904116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r9,r9,ror#11 1905116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.i32 q8,q8,q0 1906116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r7 1907116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r8,r8,r3,ror#6 1908116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r9,r10 1909116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r9,ror#20 1910116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r8,r8,r2 1911116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#16] 1912116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r12,r12,r3 1913116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4,r4,r8 1914116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.32 {q8},[r1,:128]! 1915116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r8,r8,r0,ror#2 1916116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r12,r10 1917116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vext.8 q8,q1,q2,#4 1918116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r7,r7,r2 1919116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r5,r6 1920116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r4,r4,ror#5 1921116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vext.8 q9,q3,q0,#4 1922116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r8,r8,r12 1923116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r4 1924116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r0,r4,ror#19 1925116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u32 q10,q8,#7 1926116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r8,r8,ror#11 1927116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r6 1928116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.i32 q1,q1,q9 1929116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r7,r7,r12,ror#6 1930116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r8,r9 1931116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u32 q9,q8,#3 1932116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r8,ror#20 1933116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r7,r7,r2 1934116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vsli.32 q10,q8,#25 1935116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#20] 1936116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r3,r3,r12 1937116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u32 q11,q8,#18 1938116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,r11,r7 1939116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r7,r7,r0,ror#2 1940116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r3,r9 1941116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q9,q9,q10 1942116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r6,r6,r2 1943116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vsli.32 q11,q8,#14 1944116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r4,r5 1945116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r11,r11,ror#5 1946116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u32 d24,d1,#17 1947116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r7,r7,r3 1948116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r11 1949116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q9,q9,q11 1950116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r0,r11,ror#19 1951116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r7,r7,ror#11 1952116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vsli.32 d24,d1,#15 1953116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r5 1954116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r6,r6,r3,ror#6 1955116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u32 d25,d1,#10 1956116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r7,r8 1957116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r7,ror#20 1958116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.i32 q1,q1,q9 1959116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r6,r6,r2 1960116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#24] 1961116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor d25,d25,d24 1962116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r12,r12,r3 1963116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,r10,r6 1964116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u32 d24,d1,#19 1965116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r6,r6,r0,ror#2 1966116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r12,r8 1967116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vsli.32 d24,d1,#13 1968116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r5,r5,r2 1969116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r11,r4 1970116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor d25,d25,d24 1971116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r10,r10,ror#5 1972116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r6,r6,r12 1973116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.i32 d2,d2,d25 1974116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r10 1975116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r0,r10,ror#19 1976116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u32 d24,d2,#17 1977116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r6,r6,ror#11 1978116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r4 1979116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vsli.32 d24,d2,#15 1980116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r5,r5,r12,ror#6 1981116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r6,r7 1982116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u32 d25,d2,#10 1983116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r6,ror#20 1984116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r5,r5,r2 1985116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor d25,d25,d24 1986116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#28] 1987116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r3,r3,r12 1988116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u32 d24,d2,#19 1989116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r9,r9,r5 1990116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r5,r5,r0,ror#2 1991116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r3,r7 1992116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.32 {q8},[r14,:128]! 1993116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4,r4,r2 1994116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vsli.32 d24,d2,#13 1995116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r10,r11 1996116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r9,r9,ror#5 1997116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor d25,d25,d24 1998116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r5,r5,r3 1999116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r9 2000116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.i32 d3,d3,d25 2001116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r0,r9,ror#19 2002116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r5,r5,ror#11 2003116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.i32 q8,q8,q1 2004116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r11 2005116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4,r4,r3,ror#6 2006116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r5,r6 2007116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r5,ror#20 2008116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4,r4,r2 2009116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#32] 2010116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r12,r12,r3 2011116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r8,r8,r4 2012116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.32 {q8},[r1,:128]! 2013116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4,r4,r0,ror#2 2014116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r12,r6 2015116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vext.8 q8,q2,q3,#4 2016116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,r11,r2 2017116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r9,r10 2018116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r8,r8,ror#5 2019116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vext.8 q9,q0,q1,#4 2020116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4,r4,r12 2021116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r8 2022116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r0,r8,ror#19 2023116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u32 q10,q8,#7 2024116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r4,r4,ror#11 2025116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r10 2026116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.i32 q2,q2,q9 2027116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,r11,r12,ror#6 2028116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r4,r5 2029116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u32 q9,q8,#3 2030116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r4,ror#20 2031116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,r11,r2 2032116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vsli.32 q10,q8,#25 2033116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#36] 2034116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r3,r3,r12 2035116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u32 q11,q8,#18 2036116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r7,r7,r11 2037116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,r11,r0,ror#2 2038116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r3,r5 2039116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q9,q9,q10 2040116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,r10,r2 2041116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vsli.32 q11,q8,#14 2042116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r8,r9 2043116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r7,r7,ror#5 2044116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u32 d24,d3,#17 2045116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,r11,r3 2046116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r7 2047116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q9,q9,q11 2048116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r0,r7,ror#19 2049116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r11,r11,ror#11 2050116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vsli.32 d24,d3,#15 2051116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r9 2052116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,r10,r3,ror#6 2053116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u32 d25,d3,#10 2054116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r11,r4 2055116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r11,ror#20 2056116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.i32 q2,q2,q9 2057116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,r10,r2 2058116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#40] 2059116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor d25,d25,d24 2060116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r12,r12,r3 2061116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r6,r6,r10 2062116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u32 d24,d3,#19 2063116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,r10,r0,ror#2 2064116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r12,r4 2065116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vsli.32 d24,d3,#13 2066116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r9,r9,r2 2067116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r7,r8 2068116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor d25,d25,d24 2069116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r6,r6,ror#5 2070116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,r10,r12 2071116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.i32 d4,d4,d25 2072116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r6 2073116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r0,r6,ror#19 2074116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u32 d24,d4,#17 2075116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r10,r10,ror#11 2076116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r8 2077116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vsli.32 d24,d4,#15 2078116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r9,r9,r12,ror#6 2079116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r10,r11 2080116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u32 d25,d4,#10 2081116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r10,ror#20 2082116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r9,r9,r2 2083116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor d25,d25,d24 2084116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#44] 2085116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r3,r3,r12 2086116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u32 d24,d4,#19 2087116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r5,r5,r9 2088116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r9,r9,r0,ror#2 2089116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r3,r11 2090116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.32 {q8},[r14,:128]! 2091116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r8,r8,r2 2092116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vsli.32 d24,d4,#13 2093116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r6,r7 2094116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r5,r5,ror#5 2095116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor d25,d25,d24 2096116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r9,r9,r3 2097116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r5 2098116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.i32 d5,d5,d25 2099116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r0,r5,ror#19 2100116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r9,r9,ror#11 2101116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.i32 q8,q8,q2 2102116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r7 2103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r8,r8,r3,ror#6 2104116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r9,r10 2105116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r9,ror#20 2106116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r8,r8,r2 2107116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#48] 2108116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r12,r12,r3 2109116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4,r4,r8 2110116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.32 {q8},[r1,:128]! 2111116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r8,r8,r0,ror#2 2112116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r12,r10 2113116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vext.8 q8,q3,q0,#4 2114116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r7,r7,r2 2115116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r5,r6 2116116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r4,r4,ror#5 2117116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vext.8 q9,q1,q2,#4 2118116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r8,r8,r12 2119116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r4 2120116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r0,r4,ror#19 2121116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u32 q10,q8,#7 2122116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r8,r8,ror#11 2123116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r6 2124116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.i32 q3,q3,q9 2125116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r7,r7,r12,ror#6 2126116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r8,r9 2127116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u32 q9,q8,#3 2128116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r8,ror#20 2129116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r7,r7,r2 2130116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vsli.32 q10,q8,#25 2131116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#52] 2132116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r3,r3,r12 2133116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u32 q11,q8,#18 2134116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,r11,r7 2135116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r7,r7,r0,ror#2 2136116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r3,r9 2137116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q9,q9,q10 2138116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r6,r6,r2 2139116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vsli.32 q11,q8,#14 2140116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r4,r5 2141116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r11,r11,ror#5 2142116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u32 d24,d5,#17 2143116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r7,r7,r3 2144116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r11 2145116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor q9,q9,q11 2146116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r0,r11,ror#19 2147116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r7,r7,ror#11 2148116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vsli.32 d24,d5,#15 2149116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r5 2150116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r6,r6,r3,ror#6 2151116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u32 d25,d5,#10 2152116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r7,r8 2153116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r7,ror#20 2154116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.i32 q3,q3,q9 2155116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r6,r6,r2 2156116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#56] 2157116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor d25,d25,d24 2158116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r12,r12,r3 2159116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,r10,r6 2160116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u32 d24,d5,#19 2161116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r6,r6,r0,ror#2 2162116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r12,r8 2163116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vsli.32 d24,d5,#13 2164116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r5,r5,r2 2165116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r11,r4 2166116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor d25,d25,d24 2167116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r10,r10,ror#5 2168116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r6,r6,r12 2169116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.i32 d6,d6,d25 2170116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r10 2171116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r0,r10,ror#19 2172116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u32 d24,d6,#17 2173116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r6,r6,ror#11 2174116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r4 2175116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vsli.32 d24,d6,#15 2176116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r5,r5,r12,ror#6 2177116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r6,r7 2178116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u32 d25,d6,#10 2179116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r6,ror#20 2180116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r5,r5,r2 2181116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor d25,d25,d24 2182116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#60] 2183116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r3,r3,r12 2184116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vshr.u32 d24,d6,#19 2185116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r9,r9,r5 2186116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r5,r5,r0,ror#2 2187116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r3,r7 2188116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.32 {q8},[r14,:128]! 2189116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4,r4,r2 2190116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vsli.32 d24,d6,#13 2191116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r10,r11 2192116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r9,r9,ror#5 2193116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch veor d25,d25,d24 2194116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r5,r5,r3 2195116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r9 2196116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.i32 d7,d7,d25 2197116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r0,r9,ror#19 2198116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r5,r5,ror#11 2199116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.i32 q8,q8,q3 2200116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r11 2201116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4,r4,r3,ror#6 2202116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r5,r6 2203116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r5,ror#20 2204116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4,r4,r2 2205116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[r14] 2206116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r12,r12,r3 2207116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r8,r8,r4 2208116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.32 {q8},[r1,:128]! 2209116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4,r4,r0,ror#2 2210116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r12,r6 2211116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch teq r2,#0 @ check for K256 terminator 2212116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#0] 2213116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sub r1,r1,#64 2214116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bne .L_00_48 2215116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2216116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r1,[sp,#68] 2217116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r0,[sp,#72] 2218116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch sub r14,r14,#256 @ rewind r14 2219116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch teq r1,r0 2220116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch subeq r1,r1,#64 @ avoid SEGV 2221116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q0},[r1]! @ load next input block 2222116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q1},[r1]! 2223116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q2},[r1]! 2224116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.8 {q3},[r1]! 2225116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch strne r1,[sp,#68] 2226116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch mov r1,sp 2227116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,r11,r2 2228116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r9,r10 2229116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r8,r8,ror#5 2230116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4,r4,r12 2231116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.32 {q8},[r14,:128]! 2232116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r8 2233116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r0,r8,ror#19 2234116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r4,r4,ror#11 2235116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r10 2236116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vrev32.8 q0,q0 2237116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,r11,r12,ror#6 2238116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r4,r5 2239116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r4,ror#20 2240116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,r11,r2 2241116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.i32 q8,q8,q0 2242116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#4] 2243116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r3,r3,r12 2244116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r7,r7,r11 2245116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,r11,r0,ror#2 2246116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r3,r5 2247116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,r10,r2 2248116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r8,r9 2249116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r7,r7,ror#5 2250116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,r11,r3 2251116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r7 2252116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r0,r7,ror#19 2253116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r11,r11,ror#11 2254116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r9 2255116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,r10,r3,ror#6 2256116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r11,r4 2257116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r11,ror#20 2258116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,r10,r2 2259116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#8] 2260116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r12,r12,r3 2261116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r6,r6,r10 2262116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,r10,r0,ror#2 2263116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r12,r4 2264116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r9,r9,r2 2265116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r7,r8 2266116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r6,r6,ror#5 2267116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,r10,r12 2268116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r6 2269116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r0,r6,ror#19 2270116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r10,r10,ror#11 2271116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r8 2272116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r9,r9,r12,ror#6 2273116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r10,r11 2274116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r10,ror#20 2275116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r9,r9,r2 2276116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#12] 2277116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r3,r3,r12 2278116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r5,r5,r9 2279116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r9,r9,r0,ror#2 2280116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r3,r11 2281116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r8,r8,r2 2282116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r6,r7 2283116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r5,r5,ror#5 2284116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r9,r9,r3 2285116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r5 2286116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r0,r5,ror#19 2287116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r9,r9,ror#11 2288116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r7 2289116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r8,r8,r3,ror#6 2290116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r9,r10 2291116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r9,ror#20 2292116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r8,r8,r2 2293116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#16] 2294116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r12,r12,r3 2295116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4,r4,r8 2296116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r8,r8,r0,ror#2 2297116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r12,r10 2298116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.32 {q8},[r1,:128]! 2299116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r7,r7,r2 2300116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r5,r6 2301116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r4,r4,ror#5 2302116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r8,r8,r12 2303116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.32 {q8},[r14,:128]! 2304116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r4 2305116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r0,r4,ror#19 2306116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r8,r8,ror#11 2307116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r6 2308116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vrev32.8 q1,q1 2309116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r7,r7,r12,ror#6 2310116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r8,r9 2311116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r8,ror#20 2312116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r7,r7,r2 2313116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.i32 q8,q8,q1 2314116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#20] 2315116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r3,r3,r12 2316116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,r11,r7 2317116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r7,r7,r0,ror#2 2318116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r3,r9 2319116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r6,r6,r2 2320116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r4,r5 2321116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r11,r11,ror#5 2322116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r7,r7,r3 2323116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r11 2324116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r0,r11,ror#19 2325116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r7,r7,ror#11 2326116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r5 2327116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r6,r6,r3,ror#6 2328116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r7,r8 2329116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r7,ror#20 2330116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r6,r6,r2 2331116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#24] 2332116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r12,r12,r3 2333116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,r10,r6 2334116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r6,r6,r0,ror#2 2335116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r12,r8 2336116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r5,r5,r2 2337116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r11,r4 2338116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r10,r10,ror#5 2339116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r6,r6,r12 2340116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r10 2341116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r0,r10,ror#19 2342116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r6,r6,ror#11 2343116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r4 2344116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r5,r5,r12,ror#6 2345116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r6,r7 2346116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r6,ror#20 2347116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r5,r5,r2 2348116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#28] 2349116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r3,r3,r12 2350116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r9,r9,r5 2351116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r5,r5,r0,ror#2 2352116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r3,r7 2353116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4,r4,r2 2354116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r10,r11 2355116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r9,r9,ror#5 2356116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r5,r5,r3 2357116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r9 2358116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r0,r9,ror#19 2359116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r5,r5,ror#11 2360116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r11 2361116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4,r4,r3,ror#6 2362116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r5,r6 2363116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r5,ror#20 2364116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4,r4,r2 2365116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#32] 2366116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r12,r12,r3 2367116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r8,r8,r4 2368116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4,r4,r0,ror#2 2369116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r12,r6 2370116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.32 {q8},[r1,:128]! 2371116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,r11,r2 2372116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r9,r10 2373116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r8,r8,ror#5 2374116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4,r4,r12 2375116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.32 {q8},[r14,:128]! 2376116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r8 2377116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r0,r8,ror#19 2378116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r4,r4,ror#11 2379116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r10 2380116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vrev32.8 q2,q2 2381116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,r11,r12,ror#6 2382116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r4,r5 2383116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r4,ror#20 2384116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,r11,r2 2385116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.i32 q8,q8,q2 2386116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#36] 2387116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r3,r3,r12 2388116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r7,r7,r11 2389116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,r11,r0,ror#2 2390116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r3,r5 2391116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,r10,r2 2392116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r8,r9 2393116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r7,r7,ror#5 2394116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,r11,r3 2395116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r7 2396116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r0,r7,ror#19 2397116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r11,r11,ror#11 2398116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r9 2399116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,r10,r3,ror#6 2400116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r11,r4 2401116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r11,ror#20 2402116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,r10,r2 2403116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#40] 2404116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r12,r12,r3 2405116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r6,r6,r10 2406116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,r10,r0,ror#2 2407116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r12,r4 2408116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r9,r9,r2 2409116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r7,r8 2410116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r6,r6,ror#5 2411116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,r10,r12 2412116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r6 2413116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r0,r6,ror#19 2414116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r10,r10,ror#11 2415116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r8 2416116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r9,r9,r12,ror#6 2417116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r10,r11 2418116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r10,ror#20 2419116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r9,r9,r2 2420116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#44] 2421116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r3,r3,r12 2422116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r5,r5,r9 2423116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r9,r9,r0,ror#2 2424116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r3,r11 2425116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r8,r8,r2 2426116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r6,r7 2427116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r5,r5,ror#5 2428116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r9,r9,r3 2429116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r5 2430116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r0,r5,ror#19 2431116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r9,r9,ror#11 2432116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r7 2433116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r8,r8,r3,ror#6 2434116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r9,r10 2435116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r9,ror#20 2436116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r8,r8,r2 2437116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#48] 2438116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r12,r12,r3 2439116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4,r4,r8 2440116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r8,r8,r0,ror#2 2441116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r12,r10 2442116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.32 {q8},[r1,:128]! 2443116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r7,r7,r2 2444116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r5,r6 2445116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r4,r4,ror#5 2446116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r8,r8,r12 2447116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vld1.32 {q8},[r14,:128]! 2448116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r4 2449116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r0,r4,ror#19 2450116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r8,r8,ror#11 2451116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r6 2452116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vrev32.8 q3,q3 2453116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r7,r7,r12,ror#6 2454116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r8,r9 2455116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r8,ror#20 2456116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r7,r7,r2 2457116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vadd.i32 q8,q8,q3 2458116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#52] 2459116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r3,r3,r12 2460116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,r11,r7 2461116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r7,r7,r0,ror#2 2462116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r3,r9 2463116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r6,r6,r2 2464116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r4,r5 2465116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r11,r11,ror#5 2466116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r7,r7,r3 2467116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r11 2468116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r0,r11,ror#19 2469116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r7,r7,ror#11 2470116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r5 2471116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r6,r6,r3,ror#6 2472116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r7,r8 2473116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r7,ror#20 2474116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r6,r6,r2 2475116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#56] 2476116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r12,r12,r3 2477116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,r10,r6 2478116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r6,r6,r0,ror#2 2479116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r12,r8 2480116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r5,r5,r2 2481116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r11,r4 2482116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r10,r10,ror#5 2483116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r6,r6,r12 2484116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r10 2485116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r0,r10,ror#19 2486116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r6,r6,ror#11 2487116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r4 2488116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r5,r5,r12,ror#6 2489116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r6,r7 2490116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r6,ror#20 2491116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r5,r5,r2 2492116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#60] 2493116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r3,r3,r12 2494116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r9,r9,r5 2495116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r5,r5,r0,ror#2 2496116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r3,r7 2497116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4,r4,r2 2498116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r10,r11 2499116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r9,r9,ror#5 2500116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r5,r5,r3 2501116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r2,r2,r9 2502116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r0,r9,ror#19 2503116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r5,r5,ror#11 2504116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r2,r2,r11 2505116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4,r4,r3,ror#6 2506116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r3,r5,r6 2507116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r0,r0,r5,ror#20 2508116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4,r4,r2 2509116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r2,[sp,#64] 2510116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch and r12,r12,r3 2511116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r8,r8,r4 2512116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4,r4,r0,ror#2 2513116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eor r12,r12,r6 2514116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch vst1.32 {q8},[r1,:128]! 2515116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r0,[r2,#0] 2516116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4,r4,r12 @ h+=Maj(a,b,c) from the past 2517116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r12,[r2,#4] 2518116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r3,[r2,#8] 2519116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r1,[r2,#12] 2520116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r4,r4,r0 @ accumulate 2521116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r0,[r2,#16] 2522116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r5,r5,r12 2523116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r12,[r2,#20] 2524116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r6,r6,r3 2525116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r3,[r2,#24] 2526116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r7,r7,r1 2527116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldr r1,[r2,#28] 2528116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r8,r8,r0 2529116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r4,[r2],#4 2530116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r9,r9,r12 2531116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r5,[r2],#4 2532116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r10,r10,r3 2533116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r6,[r2],#4 2534116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch add r11,r11,r1 2535116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch str r7,[r2],#4 2536116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch stmia r2,{r8-r11} 2537116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2538116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch movne r1,sp 2539116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldrne r2,[sp,#0] 2540116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eorne r12,r12,r12 2541116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldreq sp,[sp,#76] @ restore original sp 2542116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch eorne r3,r5,r6 2543116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bne .L_00_48 2544116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2545116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ldmia sp!,{r4-r12,pc} 2546116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 2547116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.size sha256_block_data_order,.-sha256_block_data_order 2548116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.asciz "SHA256 block transform for ARMv4/NEON, CRYPTOGAMS by <appro@openssl.org>" 2549116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.align 2 2550116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch.comm OPENSSL_armcap_P,4,4 2551116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 2552116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 2553