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