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