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