external/boringssl: bump revision.

This change bumps the BoringSSL revision to the current tip-of-tree.

Change-Id: I91d5bf467e16e8d86cb19a4de873985f524e5faa
diff --git a/linux-arm/crypto/aes/aes-armv4.S b/linux-arm/crypto/aes/aes-armv4.S
index 0b7d193..1135020 100644
--- a/linux-arm/crypto/aes/aes-armv4.S
+++ b/linux-arm/crypto/aes/aes-armv4.S
@@ -43,7 +43,7 @@
 .code	32
 #else
 .syntax	unified
-# ifdef __thumb2__
+# if defined(__thumb2__) && !defined(__APPLE__)
 .thumb
 # else
 .code	32
@@ -158,9 +158,9 @@
 
 @ void asm_AES_encrypt(const unsigned char *in, unsigned char *out,
 @ 		       const AES_KEY *key) {
-.global asm_AES_encrypt
-.hidden asm_AES_encrypt
-.type   asm_AES_encrypt,%function
+.globl	asm_AES_encrypt
+.hidden	asm_AES_encrypt
+.type	asm_AES_encrypt,%function
 .align	5
 asm_AES_encrypt:
 #if __ARM_ARCH__<7
@@ -168,10 +168,14 @@
 #else
 	adr	r3,asm_AES_encrypt
 #endif
-	stmdb   sp!,{r1,r4-r12,lr}
+	stmdb	sp!,{r1,r4-r12,lr}
+#ifdef	__APPLE__
+	adr	r10,AES_Te
+#else
+	sub	r10,r3,#asm_AES_encrypt-AES_Te	@ Te
+#endif
 	mov	r12,r0		@ inp
 	mov	r11,r2
-	sub	r10,r3,#asm_AES_encrypt-AES_Te	@ Te
 #if __ARM_ARCH__<7
 	ldrb	r0,[r12,#3]	@ load input data in endian-neutral
 	ldrb	r4,[r12,#2]	@ manner...
@@ -258,20 +262,20 @@
 	strb	r3,[r12,#15]
 #endif
 #if __ARM_ARCH__>=5
-	ldmia	sp!,{r4-r12,pc}
+	ldmia	sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,pc}
 #else
-	ldmia   sp!,{r4-r12,lr}
+	ldmia	sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr}
 	tst	lr,#1
 	moveq	pc,lr			@ be binary compatible with V4, yet
-	.word	0xe12fff1e			@ interoperable with Thumb ISA:-)
+.word	0xe12fff1e			@ interoperable with Thumb ISA:-)
 #endif
 .size	asm_AES_encrypt,.-asm_AES_encrypt
 
-.type   _armv4_AES_encrypt,%function
+.type	_armv4_AES_encrypt,%function
 .align	2
 _armv4_AES_encrypt:
 	str	lr,[sp,#-4]!		@ push lr
-	ldmia	r11!,{r4-r7}
+	ldmia	r11!,{r4,r5,r6,r7}
 	eor	r0,r0,r4
 	ldr	r12,[r11,#240-16]
 	eor	r1,r1,r5
@@ -404,9 +408,9 @@
 	ldr	pc,[sp],#4		@ pop and return
 .size	_armv4_AES_encrypt,.-_armv4_AES_encrypt
 
-.global asm_AES_set_encrypt_key
-.hidden asm_AES_set_encrypt_key
-.type   asm_AES_set_encrypt_key,%function
+.globl	asm_AES_set_encrypt_key
+.hidden	asm_AES_set_encrypt_key
+.type	asm_AES_set_encrypt_key,%function
 .align	5
 asm_AES_set_encrypt_key:
 _armv4_AES_set_encrypt_key:
@@ -439,13 +443,17 @@
 	movne	r0,#-1
 	bne	.Labrt
 
-.Lok:	stmdb   sp!,{r4-r12,lr}
-	sub	r10,r3,#_armv4_AES_set_encrypt_key-AES_Te-1024	@ Te4
-
+.Lok:	stmdb	sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr}
 	mov	r12,r0		@ inp
 	mov	lr,r1			@ bits
 	mov	r11,r2			@ key
 
+#ifdef	__APPLE__
+	adr	r10,AES_Te+1024				@ Te4
+#else
+	sub	r10,r3,#_armv4_AES_set_encrypt_key-AES_Te-1024	@ Te4
+#endif
+
 #if __ARM_ARCH__<7
 	ldrb	r0,[r12,#3]	@ load input data in endian-neutral
 	ldrb	r4,[r12,#2]	@ manner...
@@ -696,20 +704,20 @@
 
 .align	2
 .Ldone:	mov	r0,#0
-	ldmia   sp!,{r4-r12,lr}
+	ldmia	sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr}
 .Labrt:
-#if defined(__thumb2__) && __ARM_ARCH__>=7
-	.short	0x4770			@ .word	0xe12fff1e in Thumb2 encoding
+#if __ARM_ARCH__>=5
+	bx	lr				@ .word	0xe12fff1e
 #else
 	tst	lr,#1
 	moveq	pc,lr			@ be binary compatible with V4, yet
-	.word	0xe12fff1e			@ interoperable with Thumb ISA:-)
+.word	0xe12fff1e			@ interoperable with Thumb ISA:-)
 #endif
 .size	asm_AES_set_encrypt_key,.-asm_AES_set_encrypt_key
 
-.global asm_AES_set_decrypt_key
-.hidden asm_AES_set_decrypt_key
-.type   asm_AES_set_decrypt_key,%function
+.globl	asm_AES_set_decrypt_key
+.hidden	asm_AES_set_decrypt_key
+.type	asm_AES_set_decrypt_key,%function
 .align	5
 asm_AES_set_decrypt_key:
 	str	lr,[sp,#-4]!            @ push lr
@@ -724,13 +732,13 @@
 .size	asm_AES_set_decrypt_key,.-asm_AES_set_decrypt_key
 
 @ void AES_set_enc2dec_key(const AES_KEY *inp,AES_KEY *out)
-.global	AES_set_enc2dec_key
+.globl	AES_set_enc2dec_key
 .hidden	AES_set_enc2dec_key
 .type	AES_set_enc2dec_key,%function
 .align	5
 AES_set_enc2dec_key:
 _armv4_AES_set_enc2dec_key:
-	stmdb   sp!,{r4-r12,lr}
+	stmdb	sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr}
 
 	ldr	r12,[r0,#240]
 	mov	r7,r0			@ input
@@ -812,12 +820,12 @@
 
 	mov	r0,#0
 #if __ARM_ARCH__>=5
-	ldmia	sp!,{r4-r12,pc}
+	ldmia	sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,pc}
 #else
-	ldmia   sp!,{r4-r12,lr}
+	ldmia	sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr}
 	tst	lr,#1
 	moveq	pc,lr			@ be binary compatible with V4, yet
-	.word	0xe12fff1e			@ interoperable with Thumb ISA:-)
+.word	0xe12fff1e			@ interoperable with Thumb ISA:-)
 #endif
 .size	AES_set_enc2dec_key,.-AES_set_enc2dec_key
 
@@ -925,9 +933,9 @@
 
 @ void asm_AES_decrypt(const unsigned char *in, unsigned char *out,
 @ 		       const AES_KEY *key) {
-.global asm_AES_decrypt
-.hidden asm_AES_decrypt
-.type   asm_AES_decrypt,%function
+.globl	asm_AES_decrypt
+.hidden	asm_AES_decrypt
+.type	asm_AES_decrypt,%function
 .align	5
 asm_AES_decrypt:
 #if __ARM_ARCH__<7
@@ -935,10 +943,14 @@
 #else
 	adr	r3,asm_AES_decrypt
 #endif
-	stmdb   sp!,{r1,r4-r12,lr}
+	stmdb	sp!,{r1,r4-r12,lr}
+#ifdef	__APPLE__
+	adr	r10,AES_Td
+#else
+	sub	r10,r3,#asm_AES_decrypt-AES_Td	@ Td
+#endif
 	mov	r12,r0		@ inp
 	mov	r11,r2
-	sub	r10,r3,#asm_AES_decrypt-AES_Td		@ Td
 #if __ARM_ARCH__<7
 	ldrb	r0,[r12,#3]	@ load input data in endian-neutral
 	ldrb	r4,[r12,#2]	@ manner...
@@ -1025,20 +1037,20 @@
 	strb	r3,[r12,#15]
 #endif
 #if __ARM_ARCH__>=5
-	ldmia	sp!,{r4-r12,pc}
+	ldmia	sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,pc}
 #else
-	ldmia   sp!,{r4-r12,lr}
+	ldmia	sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr}
 	tst	lr,#1
 	moveq	pc,lr			@ be binary compatible with V4, yet
-	.word	0xe12fff1e			@ interoperable with Thumb ISA:-)
+.word	0xe12fff1e			@ interoperable with Thumb ISA:-)
 #endif
 .size	asm_AES_decrypt,.-asm_AES_decrypt
 
-.type   _armv4_AES_decrypt,%function
+.type	_armv4_AES_decrypt,%function
 .align	2
 _armv4_AES_decrypt:
 	str	lr,[sp,#-4]!		@ push lr
-	ldmia	r11!,{r4-r7}
+	ldmia	r11!,{r4,r5,r6,r7}
 	eor	r0,r0,r4
 	ldr	r12,[r11,#240-16]
 	eor	r1,r1,r5
@@ -1179,7 +1191,8 @@
 	sub	r10,r10,#1024
 	ldr	pc,[sp],#4		@ pop and return
 .size	_armv4_AES_decrypt,.-_armv4_AES_decrypt
-.asciz	"AES for ARMv4, CRYPTOGAMS by <appro@openssl.org>"
+.byte	65,69,83,32,102,111,114,32,65,82,77,118,52,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
+.align	2
 .align	2
 
 #endif
diff --git a/linux-arm/crypto/aes/aesv8-armx.S b/linux-arm/crypto/aes/aesv8-armx.S
index fede6ed..006300c 100644
--- a/linux-arm/crypto/aes/aesv8-armx.S
+++ b/linux-arm/crypto/aes/aesv8-armx.S
@@ -6,7 +6,7 @@
 .fpu	neon
 .code	32
 .align	5
-rcon:
+.Lrcon:
 .long	0x01,0x01,0x01,0x01
 .long	0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d	@ rotate-n-splat
 .long	0x1b,0x1b,0x1b,0x1b
@@ -29,7 +29,7 @@
 	tst	r1,#0x3f
 	bne	.Lenc_key_abort
 
-	adr	r3,rcon
+	adr	r3,.Lrcon
 	cmp	r1,#192
 
 	veor	q0,q0,q0
@@ -47,14 +47,14 @@
 	vtbl.8	d21,{q3},d5
 	vext.8	q9,q0,q3,#12
 	vst1.32	{q3},[r2]!
-	.byte	0x00,0x43,0xf0,0xf3	@ aese q10,q0
+.byte	0x00,0x43,0xf0,0xf3	@ aese q10,q0
 	subs	r1,r1,#1
 
 	veor	q3,q3,q9
 	vext.8	q9,q0,q9,#12
 	veor	q3,q3,q9
 	vext.8	q9,q0,q9,#12
-	 veor	q10,q10,q1
+	veor	q10,q10,q1
 	veor	q3,q3,q9
 	vshl.u8	q1,q1,#1
 	veor	q3,q3,q10
@@ -66,13 +66,13 @@
 	vtbl.8	d21,{q3},d5
 	vext.8	q9,q0,q3,#12
 	vst1.32	{q3},[r2]!
-	.byte	0x00,0x43,0xf0,0xf3	@ aese q10,q0
+.byte	0x00,0x43,0xf0,0xf3	@ aese q10,q0
 
 	veor	q3,q3,q9
 	vext.8	q9,q0,q9,#12
 	veor	q3,q3,q9
 	vext.8	q9,q0,q9,#12
-	 veor	q10,q10,q1
+	veor	q10,q10,q1
 	veor	q3,q3,q9
 	vshl.u8	q1,q1,#1
 	veor	q3,q3,q10
@@ -81,13 +81,13 @@
 	vtbl.8	d21,{q3},d5
 	vext.8	q9,q0,q3,#12
 	vst1.32	{q3},[r2]!
-	.byte	0x00,0x43,0xf0,0xf3	@ aese q10,q0
+.byte	0x00,0x43,0xf0,0xf3	@ aese q10,q0
 
 	veor	q3,q3,q9
 	vext.8	q9,q0,q9,#12
 	veor	q3,q3,q9
 	vext.8	q9,q0,q9,#12
-	 veor	q10,q10,q1
+	veor	q10,q10,q1
 	veor	q3,q3,q9
 	veor	q3,q3,q10
 	vst1.32	{q3},[r2]
@@ -108,7 +108,7 @@
 	vtbl.8	d21,{q8},d5
 	vext.8	q9,q0,q3,#12
 	vst1.32	{d16},[r2]!
-	.byte	0x00,0x43,0xf0,0xf3	@ aese q10,q0
+.byte	0x00,0x43,0xf0,0xf3	@ aese q10,q0
 	subs	r1,r1,#1
 
 	veor	q3,q3,q9
@@ -119,7 +119,7 @@
 
 	vdup.32	q9,d7[1]
 	veor	q9,q9,q8
-	 veor	q10,q10,q1
+	veor	q10,q10,q1
 	vext.8	q8,q0,q8,#12
 	vshl.u8	q1,q1,#1
 	veor	q8,q8,q9
@@ -144,14 +144,14 @@
 	vtbl.8	d21,{q8},d5
 	vext.8	q9,q0,q3,#12
 	vst1.32	{q8},[r2]!
-	.byte	0x00,0x43,0xf0,0xf3	@ aese q10,q0
+.byte	0x00,0x43,0xf0,0xf3	@ aese q10,q0
 	subs	r1,r1,#1
 
 	veor	q3,q3,q9
 	vext.8	q9,q0,q9,#12
 	veor	q3,q3,q9
 	vext.8	q9,q0,q9,#12
-	 veor	q10,q10,q1
+	veor	q10,q10,q1
 	veor	q3,q3,q9
 	vshl.u8	q1,q1,#1
 	veor	q3,q3,q10
@@ -160,7 +160,7 @@
 
 	vdup.32	q10,d7[1]
 	vext.8	q9,q0,q8,#12
-	.byte	0x00,0x43,0xf0,0xf3	@ aese q10,q0
+.byte	0x00,0x43,0xf0,0xf3	@ aese q10,q0
 
 	veor	q8,q8,q9
 	vext.8	q9,q0,q9,#12
@@ -177,7 +177,7 @@
 
 .Lenc_key_abort:
 	mov	r0,r3			@ return value
-	
+
 	bx	lr
 .size	aes_v8_set_encrypt_key,.-aes_v8_set_encrypt_key
 
@@ -203,15 +203,15 @@
 .Loop_imc:
 	vld1.32	{q0},[r2]
 	vld1.32	{q1},[r0]
-	.byte	0xc0,0x03,0xb0,0xf3	@ aesimc q0,q0
-	.byte	0xc2,0x23,0xb0,0xf3	@ aesimc q1,q1
+.byte	0xc0,0x03,0xb0,0xf3	@ aesimc q0,q0
+.byte	0xc2,0x23,0xb0,0xf3	@ aesimc q1,q1
 	vst1.32	{q0},[r0],r4
 	vst1.32	{q1},[r2]!
 	cmp	r0,r2
 	bhi	.Loop_imc
 
 	vld1.32	{q0},[r2]
-	.byte	0xc0,0x03,0xb0,0xf3	@ aesimc q0,q0
+.byte	0xc0,0x03,0xb0,0xf3	@ aesimc q0,q0
 	vst1.32	{q0},[r0]
 
 	eor	r0,r0,r0		@ return value
@@ -229,19 +229,19 @@
 	vld1.32	{q1},[r2]!
 
 .Loop_enc:
-	.byte	0x00,0x43,0xb0,0xf3	@ aese q2,q0
+.byte	0x00,0x43,0xb0,0xf3	@ aese q2,q0
+.byte	0x84,0x43,0xb0,0xf3	@ aesmc q2,q2
 	vld1.32	{q0},[r2]!
-	.byte	0x84,0x43,0xb0,0xf3	@ aesmc q2,q2
 	subs	r3,r3,#2
-	.byte	0x02,0x43,0xb0,0xf3	@ aese q2,q1
+.byte	0x02,0x43,0xb0,0xf3	@ aese q2,q1
+.byte	0x84,0x43,0xb0,0xf3	@ aesmc q2,q2
 	vld1.32	{q1},[r2]!
-	.byte	0x84,0x43,0xb0,0xf3	@ aesmc q2,q2
 	bgt	.Loop_enc
 
-	.byte	0x00,0x43,0xb0,0xf3	@ aese q2,q0
+.byte	0x00,0x43,0xb0,0xf3	@ aese q2,q0
+.byte	0x84,0x43,0xb0,0xf3	@ aesmc q2,q2
 	vld1.32	{q0},[r2]
-	.byte	0x84,0x43,0xb0,0xf3	@ aesmc q2,q2
-	.byte	0x02,0x43,0xb0,0xf3	@ aese q2,q1
+.byte	0x02,0x43,0xb0,0xf3	@ aese q2,q1
 	veor	q2,q2,q0
 
 	vst1.8	{q2},[r1]
@@ -258,19 +258,19 @@
 	vld1.32	{q1},[r2]!
 
 .Loop_dec:
-	.byte	0x40,0x43,0xb0,0xf3	@ aesd q2,q0
+.byte	0x40,0x43,0xb0,0xf3	@ aesd q2,q0
+.byte	0xc4,0x43,0xb0,0xf3	@ aesimc q2,q2
 	vld1.32	{q0},[r2]!
-	.byte	0xc4,0x43,0xb0,0xf3	@ aesimc q2,q2
 	subs	r3,r3,#2
-	.byte	0x42,0x43,0xb0,0xf3	@ aesd q2,q1
+.byte	0x42,0x43,0xb0,0xf3	@ aesd q2,q1
+.byte	0xc4,0x43,0xb0,0xf3	@ aesimc q2,q2
 	vld1.32	{q1},[r2]!
-	.byte	0xc4,0x43,0xb0,0xf3	@ aesimc q2,q2
 	bgt	.Loop_dec
 
-	.byte	0x40,0x43,0xb0,0xf3	@ aesd q2,q0
+.byte	0x40,0x43,0xb0,0xf3	@ aesd q2,q0
+.byte	0xc4,0x43,0xb0,0xf3	@ aesimc q2,q2
 	vld1.32	{q0},[r2]
-	.byte	0xc4,0x43,0xb0,0xf3	@ aesimc q2,q2
-	.byte	0x42,0x43,0xb0,0xf3	@ aesd q2,q1
+.byte	0x42,0x43,0xb0,0xf3	@ aesd q2,q1
 	veor	q2,q2,q0
 
 	vst1.8	{q2},[r1]
@@ -281,9 +281,9 @@
 .align	5
 aes_v8_cbc_encrypt:
 	mov	ip,sp
-	stmdb	sp!,{r4-r8,lr}
-	vstmdb	sp!,{d8-d15}            @ ABI specification says so
-	ldmia	ip,{r4-r5}		@ load remaining args
+	stmdb	sp!,{r4,r5,r6,r7,r8,lr}
+	vstmdb	sp!,{d8,d9,d10,d11,d12,d13,d14,d15}            @ ABI specification says so
+	ldmia	ip,{r4,r5}		@ load remaining args
 	subs	r2,r2,#16
 	mov	r8,#16
 	blo	.Lcbc_abort
@@ -295,13 +295,13 @@
 	vld1.8	{q6},[r4]
 	vld1.8	{q0},[r0],r8
 
-	vld1.32	{q8-q9},[r3]		@ load key schedule...
+	vld1.32	{q8,q9},[r3]		@ load key schedule...
 	sub	r5,r5,#6
 	add	r7,r3,r5,lsl#4	@ pointer to last 7 round keys
 	sub	r5,r5,#2
-	vld1.32	{q10-q11},[r7]!
-	vld1.32	{q12-q13},[r7]!
-	vld1.32	{q14-q15},[r7]!
+	vld1.32	{q10,q11},[r7]!
+	vld1.32	{q12,q13},[r7]!
+	vld1.32	{q14,q15},[r7]!
 	vld1.32	{q7},[r7]
 
 	add	r7,r3,#32
@@ -313,77 +313,100 @@
 	veor	q5,q8,q7
 	beq	.Lcbc_enc128
 
+	vld1.32	{q2,q3},[r7]
+	add	r7,r3,#16
+	add	r6,r3,#16*4
+	add	r12,r3,#16*5
+.byte	0x20,0x03,0xb0,0xf3	@ aese q0,q8
+.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
+	add	r14,r3,#16*6
+	add	r3,r3,#16*7
+	b	.Lenter_cbc_enc
+
+.align	4
 .Loop_cbc_enc:
-	.byte	0x20,0x03,0xb0,0xf3	@ aese q0,q8
-	vld1.32	{q8},[r7]!
-	.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
-	subs	r6,r6,#2
-	.byte	0x22,0x03,0xb0,0xf3	@ aese q0,q9
-	vld1.32	{q9},[r7]!
-	.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
-	bgt	.Loop_cbc_enc
-
-	.byte	0x20,0x03,0xb0,0xf3	@ aese q0,q8
-	.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
-	 subs	r2,r2,#16
-	.byte	0x22,0x03,0xb0,0xf3	@ aese q0,q9
-	.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
-	 moveq	r8,#0
-	.byte	0x24,0x03,0xb0,0xf3	@ aese q0,q10
-	.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
-	 add	r7,r3,#16
-	.byte	0x26,0x03,0xb0,0xf3	@ aese q0,q11
-	.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
-	 vld1.8	{q8},[r0],r8
-	.byte	0x28,0x03,0xb0,0xf3	@ aese q0,q12
-	.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
-	 veor	q8,q8,q5
-	.byte	0x2a,0x03,0xb0,0xf3	@ aese q0,q13
-	.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
-	 vld1.32 {q9},[r7]!	@ re-pre-load rndkey[1]
-	.byte	0x2c,0x03,0xb0,0xf3	@ aese q0,q14
-	.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
-	.byte	0x2e,0x03,0xb0,0xf3	@ aese q0,q15
-
-	 mov	r6,r5
-	veor	q6,q0,q7
+.byte	0x20,0x03,0xb0,0xf3	@ aese q0,q8
+.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
 	vst1.8	{q6},[r1]!
+.Lenter_cbc_enc:
+.byte	0x22,0x03,0xb0,0xf3	@ aese q0,q9
+.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
+.byte	0x04,0x03,0xb0,0xf3	@ aese q0,q2
+.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
+	vld1.32	{q8},[r6]
+	cmp	r5,#4
+.byte	0x06,0x03,0xb0,0xf3	@ aese q0,q3
+.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
+	vld1.32	{q9},[r12]
+	beq	.Lcbc_enc192
+
+.byte	0x20,0x03,0xb0,0xf3	@ aese q0,q8
+.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
+	vld1.32	{q8},[r14]
+.byte	0x22,0x03,0xb0,0xf3	@ aese q0,q9
+.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
+	vld1.32	{q9},[r3]
+	nop
+
+.Lcbc_enc192:
+.byte	0x20,0x03,0xb0,0xf3	@ aese q0,q8
+.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
+	subs	r2,r2,#16
+.byte	0x22,0x03,0xb0,0xf3	@ aese q0,q9
+.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
+	moveq	r8,#0
+.byte	0x24,0x03,0xb0,0xf3	@ aese q0,q10
+.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
+.byte	0x26,0x03,0xb0,0xf3	@ aese q0,q11
+.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
+	vld1.8	{q8},[r0],r8
+.byte	0x28,0x03,0xb0,0xf3	@ aese q0,q12
+.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
+	veor	q8,q8,q5
+.byte	0x2a,0x03,0xb0,0xf3	@ aese q0,q13
+.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
+	vld1.32	{q9},[r7]		@ re-pre-load rndkey[1]
+.byte	0x2c,0x03,0xb0,0xf3	@ aese q0,q14
+.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
+.byte	0x2e,0x03,0xb0,0xf3	@ aese q0,q15
+	veor	q6,q0,q7
 	bhs	.Loop_cbc_enc
 
+	vst1.8	{q6},[r1]!
 	b	.Lcbc_done
 
 .align	5
 .Lcbc_enc128:
-	vld1.32	{q2-q3},[r7]
-	.byte	0x20,0x03,0xb0,0xf3	@ aese q0,q8
-	.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
+	vld1.32	{q2,q3},[r7]
+.byte	0x20,0x03,0xb0,0xf3	@ aese q0,q8
+.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
 	b	.Lenter_cbc_enc128
 .Loop_cbc_enc128:
-	.byte	0x20,0x03,0xb0,0xf3	@ aese q0,q8
-	.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
-	 vst1.8	{q6},[r1]!
+.byte	0x20,0x03,0xb0,0xf3	@ aese q0,q8
+.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
+	vst1.8	{q6},[r1]!
 .Lenter_cbc_enc128:
-	.byte	0x22,0x03,0xb0,0xf3	@ aese q0,q9
-	.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
-	 subs	r2,r2,#16
-	.byte	0x04,0x03,0xb0,0xf3	@ aese q0,q2
-	.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
-	 moveq	r8,#0
-	.byte	0x06,0x03,0xb0,0xf3	@ aese q0,q3
-	.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
-	.byte	0x24,0x03,0xb0,0xf3	@ aese q0,q10
-	.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
-	.byte	0x26,0x03,0xb0,0xf3	@ aese q0,q11
-	.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
-	 vld1.8	{q8},[r0],r8
-	.byte	0x28,0x03,0xb0,0xf3	@ aese q0,q12
-	.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
-	.byte	0x2a,0x03,0xb0,0xf3	@ aese q0,q13
-	.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
-	.byte	0x2c,0x03,0xb0,0xf3	@ aese q0,q14
-	.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
-	 veor	q8,q8,q5
-	.byte	0x2e,0x03,0xb0,0xf3	@ aese q0,q15
+.byte	0x22,0x03,0xb0,0xf3	@ aese q0,q9
+.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
+	subs	r2,r2,#16
+.byte	0x04,0x03,0xb0,0xf3	@ aese q0,q2
+.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
+	moveq	r8,#0
+.byte	0x06,0x03,0xb0,0xf3	@ aese q0,q3
+.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
+.byte	0x24,0x03,0xb0,0xf3	@ aese q0,q10
+.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
+.byte	0x26,0x03,0xb0,0xf3	@ aese q0,q11
+.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
+	vld1.8	{q8},[r0],r8
+.byte	0x28,0x03,0xb0,0xf3	@ aese q0,q12
+.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
+.byte	0x2a,0x03,0xb0,0xf3	@ aese q0,q13
+.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
+.byte	0x2c,0x03,0xb0,0xf3	@ aese q0,q14
+.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
+	veor	q8,q8,q5
+.byte	0x2e,0x03,0xb0,0xf3	@ aese q0,q15
 	veor	q6,q0,q7
 	bhs	.Loop_cbc_enc128
 
@@ -406,82 +429,81 @@
 	vorr	q11,q10,q10
 
 .Loop3x_cbc_dec:
-	.byte	0x60,0x03,0xb0,0xf3	@ aesd q0,q8
-	.byte	0x60,0x23,0xb0,0xf3	@ aesd q1,q8
-	.byte	0x60,0x43,0xf0,0xf3	@ aesd q10,q8
+.byte	0x60,0x03,0xb0,0xf3	@ aesd q0,q8
+.byte	0xc0,0x03,0xb0,0xf3	@ aesimc q0,q0
+.byte	0x60,0x23,0xb0,0xf3	@ aesd q1,q8
+.byte	0xc2,0x23,0xb0,0xf3	@ aesimc q1,q1
+.byte	0x60,0x43,0xf0,0xf3	@ aesd q10,q8
+.byte	0xe4,0x43,0xf0,0xf3	@ aesimc q10,q10
 	vld1.32	{q8},[r7]!
-	.byte	0xc0,0x03,0xb0,0xf3	@ aesimc q0,q0
-	.byte	0xc2,0x23,0xb0,0xf3	@ aesimc q1,q1
-	.byte	0xe4,0x43,0xf0,0xf3	@ aesimc q10,q10
 	subs	r6,r6,#2
-	.byte	0x62,0x03,0xb0,0xf3	@ aesd q0,q9
-	.byte	0x62,0x23,0xb0,0xf3	@ aesd q1,q9
-	.byte	0x62,0x43,0xf0,0xf3	@ aesd q10,q9
+.byte	0x62,0x03,0xb0,0xf3	@ aesd q0,q9
+.byte	0xc0,0x03,0xb0,0xf3	@ aesimc q0,q0
+.byte	0x62,0x23,0xb0,0xf3	@ aesd q1,q9
+.byte	0xc2,0x23,0xb0,0xf3	@ aesimc q1,q1
+.byte	0x62,0x43,0xf0,0xf3	@ aesd q10,q9
+.byte	0xe4,0x43,0xf0,0xf3	@ aesimc q10,q10
 	vld1.32	{q9},[r7]!
-	.byte	0xc0,0x03,0xb0,0xf3	@ aesimc q0,q0
-	.byte	0xc2,0x23,0xb0,0xf3	@ aesimc q1,q1
-	.byte	0xe4,0x43,0xf0,0xf3	@ aesimc q10,q10
 	bgt	.Loop3x_cbc_dec
 
-	.byte	0x60,0x03,0xb0,0xf3	@ aesd q0,q8
-	.byte	0x60,0x23,0xb0,0xf3	@ aesd q1,q8
-	.byte	0x60,0x43,0xf0,0xf3	@ aesd q10,q8
-	 veor	q4,q6,q7
-	.byte	0xc0,0x03,0xb0,0xf3	@ aesimc q0,q0
-	.byte	0xc2,0x23,0xb0,0xf3	@ aesimc q1,q1
-	.byte	0xe4,0x43,0xf0,0xf3	@ aesimc q10,q10
-	 veor	q5,q2,q7
-	.byte	0x62,0x03,0xb0,0xf3	@ aesd q0,q9
-	.byte	0x62,0x23,0xb0,0xf3	@ aesd q1,q9
-	.byte	0x62,0x43,0xf0,0xf3	@ aesd q10,q9
-	 veor	q9,q3,q7
-	 subs	r2,r2,#0x30
-	.byte	0xc0,0x03,0xb0,0xf3	@ aesimc q0,q0
-	.byte	0xc2,0x23,0xb0,0xf3	@ aesimc q1,q1
-	.byte	0xe4,0x43,0xf0,0xf3	@ aesimc q10,q10
-	 vorr	q6,q11,q11
-	 movlo	r6,r2			@ r6, r6, is zero at this point
-	.byte	0x68,0x03,0xb0,0xf3	@ aesd q0,q12
-	.byte	0x68,0x23,0xb0,0xf3	@ aesd q1,q12
-	.byte	0x68,0x43,0xf0,0xf3	@ aesd q10,q12
-	 add	r0,r0,r6		@ r0 is adjusted in such way that
+.byte	0x60,0x03,0xb0,0xf3	@ aesd q0,q8
+.byte	0xc0,0x03,0xb0,0xf3	@ aesimc q0,q0
+.byte	0x60,0x23,0xb0,0xf3	@ aesd q1,q8
+.byte	0xc2,0x23,0xb0,0xf3	@ aesimc q1,q1
+.byte	0x60,0x43,0xf0,0xf3	@ aesd q10,q8
+.byte	0xe4,0x43,0xf0,0xf3	@ aesimc q10,q10
+	veor	q4,q6,q7
+	subs	r2,r2,#0x30
+	veor	q5,q2,q7
+	movlo	r6,r2			@ r6, r6, is zero at this point
+.byte	0x62,0x03,0xb0,0xf3	@ aesd q0,q9
+.byte	0xc0,0x03,0xb0,0xf3	@ aesimc q0,q0
+.byte	0x62,0x23,0xb0,0xf3	@ aesd q1,q9
+.byte	0xc2,0x23,0xb0,0xf3	@ aesimc q1,q1
+.byte	0x62,0x43,0xf0,0xf3	@ aesd q10,q9
+.byte	0xe4,0x43,0xf0,0xf3	@ aesimc q10,q10
+	veor	q9,q3,q7
+	add	r0,r0,r6		@ r0 is adjusted in such way that
 					@ at exit from the loop q1-q10
 					@ are loaded with last "words"
-	.byte	0xc0,0x03,0xb0,0xf3	@ aesimc q0,q0
-	.byte	0xc2,0x23,0xb0,0xf3	@ aesimc q1,q1
-	.byte	0xe4,0x43,0xf0,0xf3	@ aesimc q10,q10
-	 mov	r7,r3
-	.byte	0x6a,0x03,0xb0,0xf3	@ aesd q0,q13
-	.byte	0x6a,0x23,0xb0,0xf3	@ aesd q1,q13
-	.byte	0x6a,0x43,0xf0,0xf3	@ aesd q10,q13
-	 vld1.8	{q2},[r0]!
-	.byte	0xc0,0x03,0xb0,0xf3	@ aesimc q0,q0
-	.byte	0xc2,0x23,0xb0,0xf3	@ aesimc q1,q1
-	.byte	0xe4,0x43,0xf0,0xf3	@ aesimc q10,q10
-	 vld1.8	{q3},[r0]!
-	.byte	0x6c,0x03,0xb0,0xf3	@ aesd q0,q14
-	.byte	0x6c,0x23,0xb0,0xf3	@ aesd q1,q14
-	.byte	0x6c,0x43,0xf0,0xf3	@ aesd q10,q14
-	 vld1.8	{q11},[r0]!
-	.byte	0xc0,0x03,0xb0,0xf3	@ aesimc q0,q0
-	.byte	0xc2,0x23,0xb0,0xf3	@ aesimc q1,q1
-	.byte	0xe4,0x43,0xf0,0xf3	@ aesimc q10,q10
-	 vld1.32 {q8},[r7]!	@ re-pre-load rndkey[0]
-	.byte	0x6e,0x03,0xb0,0xf3	@ aesd q0,q15
-	.byte	0x6e,0x23,0xb0,0xf3	@ aesd q1,q15
-	.byte	0x6e,0x43,0xf0,0xf3	@ aesd q10,q15
-
-	 add	r6,r5,#2
+	vorr	q6,q11,q11
+	mov	r7,r3
+.byte	0x68,0x03,0xb0,0xf3	@ aesd q0,q12
+.byte	0xc0,0x03,0xb0,0xf3	@ aesimc q0,q0
+.byte	0x68,0x23,0xb0,0xf3	@ aesd q1,q12
+.byte	0xc2,0x23,0xb0,0xf3	@ aesimc q1,q1
+.byte	0x68,0x43,0xf0,0xf3	@ aesd q10,q12
+.byte	0xe4,0x43,0xf0,0xf3	@ aesimc q10,q10
+	vld1.8	{q2},[r0]!
+.byte	0x6a,0x03,0xb0,0xf3	@ aesd q0,q13
+.byte	0xc0,0x03,0xb0,0xf3	@ aesimc q0,q0
+.byte	0x6a,0x23,0xb0,0xf3	@ aesd q1,q13
+.byte	0xc2,0x23,0xb0,0xf3	@ aesimc q1,q1
+.byte	0x6a,0x43,0xf0,0xf3	@ aesd q10,q13
+.byte	0xe4,0x43,0xf0,0xf3	@ aesimc q10,q10
+	vld1.8	{q3},[r0]!
+.byte	0x6c,0x03,0xb0,0xf3	@ aesd q0,q14
+.byte	0xc0,0x03,0xb0,0xf3	@ aesimc q0,q0
+.byte	0x6c,0x23,0xb0,0xf3	@ aesd q1,q14
+.byte	0xc2,0x23,0xb0,0xf3	@ aesimc q1,q1
+.byte	0x6c,0x43,0xf0,0xf3	@ aesd q10,q14
+.byte	0xe4,0x43,0xf0,0xf3	@ aesimc q10,q10
+	vld1.8	{q11},[r0]!
+.byte	0x6e,0x03,0xb0,0xf3	@ aesd q0,q15
+.byte	0x6e,0x23,0xb0,0xf3	@ aesd q1,q15
+.byte	0x6e,0x43,0xf0,0xf3	@ aesd q10,q15
+	vld1.32	{q8},[r7]!	@ re-pre-load rndkey[0]
+	add	r6,r5,#2
 	veor	q4,q4,q0
 	veor	q5,q5,q1
 	veor	q10,q10,q9
-	 vld1.32 {q9},[r7]!	@ re-pre-load rndkey[1]
-	 vorr	q0,q2,q2
+	vld1.32	{q9},[r7]!	@ re-pre-load rndkey[1]
 	vst1.8	{q4},[r1]!
-	 vorr	q1,q3,q3
+	vorr	q0,q2,q2
 	vst1.8	{q5},[r1]!
+	vorr	q1,q3,q3
 	vst1.8	{q10},[r1]!
-	 vorr	q10,q11,q11
+	vorr	q10,q11,q11
 	bhs	.Loop3x_cbc_dec
 
 	cmn	r2,#0x30
@@ -489,244 +511,244 @@
 	nop
 
 .Lcbc_dec_tail:
-	.byte	0x60,0x23,0xb0,0xf3	@ aesd q1,q8
-	.byte	0x60,0x43,0xf0,0xf3	@ aesd q10,q8
+.byte	0x60,0x23,0xb0,0xf3	@ aesd q1,q8
+.byte	0xc2,0x23,0xb0,0xf3	@ aesimc q1,q1
+.byte	0x60,0x43,0xf0,0xf3	@ aesd q10,q8
+.byte	0xe4,0x43,0xf0,0xf3	@ aesimc q10,q10
 	vld1.32	{q8},[r7]!
-	.byte	0xc2,0x23,0xb0,0xf3	@ aesimc q1,q1
-	.byte	0xe4,0x43,0xf0,0xf3	@ aesimc q10,q10
 	subs	r6,r6,#2
-	.byte	0x62,0x23,0xb0,0xf3	@ aesd q1,q9
-	.byte	0x62,0x43,0xf0,0xf3	@ aesd q10,q9
+.byte	0x62,0x23,0xb0,0xf3	@ aesd q1,q9
+.byte	0xc2,0x23,0xb0,0xf3	@ aesimc q1,q1
+.byte	0x62,0x43,0xf0,0xf3	@ aesd q10,q9
+.byte	0xe4,0x43,0xf0,0xf3	@ aesimc q10,q10
 	vld1.32	{q9},[r7]!
-	.byte	0xc2,0x23,0xb0,0xf3	@ aesimc q1,q1
-	.byte	0xe4,0x43,0xf0,0xf3	@ aesimc q10,q10
 	bgt	.Lcbc_dec_tail
 
-	.byte	0x60,0x23,0xb0,0xf3	@ aesd q1,q8
-	.byte	0x60,0x43,0xf0,0xf3	@ aesd q10,q8
-	.byte	0xc2,0x23,0xb0,0xf3	@ aesimc q1,q1
-	.byte	0xe4,0x43,0xf0,0xf3	@ aesimc q10,q10
-	.byte	0x62,0x23,0xb0,0xf3	@ aesd q1,q9
-	.byte	0x62,0x43,0xf0,0xf3	@ aesd q10,q9
-	.byte	0xc2,0x23,0xb0,0xf3	@ aesimc q1,q1
-	.byte	0xe4,0x43,0xf0,0xf3	@ aesimc q10,q10
-	.byte	0x68,0x23,0xb0,0xf3	@ aesd q1,q12
-	.byte	0x68,0x43,0xf0,0xf3	@ aesd q10,q12
-	.byte	0xc2,0x23,0xb0,0xf3	@ aesimc q1,q1
-	.byte	0xe4,0x43,0xf0,0xf3	@ aesimc q10,q10
-	 cmn	r2,#0x20
-	.byte	0x6a,0x23,0xb0,0xf3	@ aesd q1,q13
-	.byte	0x6a,0x43,0xf0,0xf3	@ aesd q10,q13
-	.byte	0xc2,0x23,0xb0,0xf3	@ aesimc q1,q1
-	.byte	0xe4,0x43,0xf0,0xf3	@ aesimc q10,q10
-	 veor	q5,q6,q7
-	.byte	0x6c,0x23,0xb0,0xf3	@ aesd q1,q14
-	.byte	0x6c,0x43,0xf0,0xf3	@ aesd q10,q14
-	.byte	0xc2,0x23,0xb0,0xf3	@ aesimc q1,q1
-	.byte	0xe4,0x43,0xf0,0xf3	@ aesimc q10,q10
-	 veor	q9,q3,q7
-	.byte	0x6e,0x23,0xb0,0xf3	@ aesd q1,q15
-	.byte	0x6e,0x43,0xf0,0xf3	@ aesd q10,q15
+.byte	0x60,0x23,0xb0,0xf3	@ aesd q1,q8
+.byte	0xc2,0x23,0xb0,0xf3	@ aesimc q1,q1
+.byte	0x60,0x43,0xf0,0xf3	@ aesd q10,q8
+.byte	0xe4,0x43,0xf0,0xf3	@ aesimc q10,q10
+.byte	0x62,0x23,0xb0,0xf3	@ aesd q1,q9
+.byte	0xc2,0x23,0xb0,0xf3	@ aesimc q1,q1
+.byte	0x62,0x43,0xf0,0xf3	@ aesd q10,q9
+.byte	0xe4,0x43,0xf0,0xf3	@ aesimc q10,q10
+.byte	0x68,0x23,0xb0,0xf3	@ aesd q1,q12
+.byte	0xc2,0x23,0xb0,0xf3	@ aesimc q1,q1
+.byte	0x68,0x43,0xf0,0xf3	@ aesd q10,q12
+.byte	0xe4,0x43,0xf0,0xf3	@ aesimc q10,q10
+	cmn	r2,#0x20
+.byte	0x6a,0x23,0xb0,0xf3	@ aesd q1,q13
+.byte	0xc2,0x23,0xb0,0xf3	@ aesimc q1,q1
+.byte	0x6a,0x43,0xf0,0xf3	@ aesd q10,q13
+.byte	0xe4,0x43,0xf0,0xf3	@ aesimc q10,q10
+	veor	q5,q6,q7
+.byte	0x6c,0x23,0xb0,0xf3	@ aesd q1,q14
+.byte	0xc2,0x23,0xb0,0xf3	@ aesimc q1,q1
+.byte	0x6c,0x43,0xf0,0xf3	@ aesd q10,q14
+.byte	0xe4,0x43,0xf0,0xf3	@ aesimc q10,q10
+	veor	q9,q3,q7
+.byte	0x6e,0x23,0xb0,0xf3	@ aesd q1,q15
+.byte	0x6e,0x43,0xf0,0xf3	@ aesd q10,q15
 	beq	.Lcbc_dec_one
 	veor	q5,q5,q1
 	veor	q9,q9,q10
-	 vorr	q6,q11,q11
+	vorr	q6,q11,q11
 	vst1.8	{q5},[r1]!
 	vst1.8	{q9},[r1]!
 	b	.Lcbc_done
 
 .Lcbc_dec_one:
 	veor	q5,q5,q10
-	 vorr	q6,q11,q11
+	vorr	q6,q11,q11
 	vst1.8	{q5},[r1]!
 
 .Lcbc_done:
 	vst1.8	{q6},[r4]
 .Lcbc_abort:
-	vldmia	sp!,{d8-d15}
-	ldmia	sp!,{r4-r8,pc}
+	vldmia	sp!,{d8,d9,d10,d11,d12,d13,d14,d15}
+	ldmia	sp!,{r4,r5,r6,r7,r8,pc}
 .size	aes_v8_cbc_encrypt,.-aes_v8_cbc_encrypt
 .globl	aes_v8_ctr32_encrypt_blocks
 .type	aes_v8_ctr32_encrypt_blocks,%function
 .align	5
 aes_v8_ctr32_encrypt_blocks:
-	mov		ip,sp
-	stmdb		sp!,{r4-r10,lr}
-	vstmdb		sp!,{d8-d15}            @ ABI specification says so
-	ldr		r4, [ip]		@ load remaining arg
-	ldr		r5,[r3,#240]
+	mov	ip,sp
+	stmdb	sp!,{r4,r5,r6,r7,r8,r9,r10,lr}
+	vstmdb	sp!,{d8,d9,d10,d11,d12,d13,d14,d15}            @ ABI specification says so
+	ldr	r4, [ip]		@ load remaining arg
+	ldr	r5,[r3,#240]
 
-	ldr		r8, [r4, #12]
-	vld1.32		{q0},[r4]
+	ldr	r8, [r4, #12]
+	vld1.32	{q0},[r4]
 
-	vld1.32		{q8-q9},[r3]		@ load key schedule...
-	sub		r5,r5,#4
-	mov		r12,#16
-	cmp		r2,#2
-	add		r7,r3,r5,lsl#4	@ pointer to last 5 round keys
-	sub		r5,r5,#2
-	vld1.32		{q12-q13},[r7]!
-	vld1.32		{q14-q15},[r7]!
-	vld1.32		{q7},[r7]
-	add		r7,r3,#32
-	mov		r6,r5
+	vld1.32	{q8,q9},[r3]		@ load key schedule...
+	sub	r5,r5,#4
+	mov	r12,#16
+	cmp	r2,#2
+	add	r7,r3,r5,lsl#4	@ pointer to last 5 round keys
+	sub	r5,r5,#2
+	vld1.32	{q12,q13},[r7]!
+	vld1.32	{q14,q15},[r7]!
+	vld1.32	{q7},[r7]
+	add	r7,r3,#32
+	mov	r6,r5
 	movlo	r12,#0
 #ifndef __ARMEB__
-	rev		r8, r8
+	rev	r8, r8
 #endif
-	vorr		q1,q0,q0
-	add		r10, r8, #1
-	vorr		q10,q0,q0
-	add		r8, r8, #2
-	vorr		q6,q0,q0
-	rev		r10, r10
+	vorr	q1,q0,q0
+	add	r10, r8, #1
+	vorr	q10,q0,q0
+	add	r8, r8, #2
+	vorr	q6,q0,q0
+	rev	r10, r10
 	vmov.32	d3[1],r10
-	bls		.Lctr32_tail
-	rev		r12, r8
-	sub		r2,r2,#3		@ bias
+	bls	.Lctr32_tail
+	rev	r12, r8
+	sub	r2,r2,#3		@ bias
 	vmov.32	d21[1],r12
-	b		.Loop3x_ctr32
+	b	.Loop3x_ctr32
 
 .align	4
 .Loop3x_ctr32:
-	.byte	0x20,0x03,0xb0,0xf3	@ aese q0,q8
-	.byte	0x20,0x23,0xb0,0xf3	@ aese q1,q8
-	.byte	0x20,0x43,0xf0,0xf3	@ aese q10,q8
-	vld1.32		{q8},[r7]!
-	.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
-	.byte	0x82,0x23,0xb0,0xf3	@ aesmc q1,q1
-	.byte	0xa4,0x43,0xf0,0xf3	@ aesmc q10,q10
-	subs		r6,r6,#2
-	.byte	0x22,0x03,0xb0,0xf3	@ aese q0,q9
-	.byte	0x22,0x23,0xb0,0xf3	@ aese q1,q9
-	.byte	0x22,0x43,0xf0,0xf3	@ aese q10,q9
-	vld1.32		{q9},[r7]!
-	.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
-	.byte	0x82,0x23,0xb0,0xf3	@ aesmc q1,q1
-	.byte	0xa4,0x43,0xf0,0xf3	@ aesmc q10,q10
-	bgt		.Loop3x_ctr32
+.byte	0x20,0x03,0xb0,0xf3	@ aese q0,q8
+.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
+.byte	0x20,0x23,0xb0,0xf3	@ aese q1,q8
+.byte	0x82,0x23,0xb0,0xf3	@ aesmc q1,q1
+.byte	0x20,0x43,0xf0,0xf3	@ aese q10,q8
+.byte	0xa4,0x43,0xf0,0xf3	@ aesmc q10,q10
+	vld1.32	{q8},[r7]!
+	subs	r6,r6,#2
+.byte	0x22,0x03,0xb0,0xf3	@ aese q0,q9
+.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
+.byte	0x22,0x23,0xb0,0xf3	@ aese q1,q9
+.byte	0x82,0x23,0xb0,0xf3	@ aesmc q1,q1
+.byte	0x22,0x43,0xf0,0xf3	@ aese q10,q9
+.byte	0xa4,0x43,0xf0,0xf3	@ aesmc q10,q10
+	vld1.32	{q9},[r7]!
+	bgt	.Loop3x_ctr32
 
-	.byte	0x20,0x03,0xb0,0xf3	@ aese q0,q8
-	.byte	0x20,0x23,0xb0,0xf3	@ aese q1,q8
-	.byte	0x20,0x43,0xf0,0xf3	@ aese q10,q8
-	 mov		r7,r3
-	.byte	0x80,0x83,0xb0,0xf3	@ aesmc q4,q0
-	 vld1.8		{q2},[r0]!
-	.byte	0x82,0xa3,0xb0,0xf3	@ aesmc q5,q1
-	.byte	0xa4,0x43,0xf0,0xf3	@ aesmc q10,q10
-	 vorr		q0,q6,q6
-	.byte	0x22,0x83,0xb0,0xf3	@ aese q4,q9
-	 vld1.8		{q3},[r0]!
-	.byte	0x22,0xa3,0xb0,0xf3	@ aese q5,q9
-	.byte	0x22,0x43,0xf0,0xf3	@ aese q10,q9
-	 vorr		q1,q6,q6
-	.byte	0x88,0x83,0xb0,0xf3	@ aesmc q4,q4
-	 vld1.8		{q11},[r0]!
-	.byte	0x8a,0xa3,0xb0,0xf3	@ aesmc q5,q5
-	.byte	0xa4,0x23,0xf0,0xf3	@ aesmc q9,q10
-	 vorr		q10,q6,q6
-	 add		r9,r8,#1
-	.byte	0x28,0x83,0xb0,0xf3	@ aese q4,q12
-	.byte	0x28,0xa3,0xb0,0xf3	@ aese q5,q12
-	.byte	0x28,0x23,0xf0,0xf3	@ aese q9,q12
-	 veor		q2,q2,q7
-	 add		r10,r8,#2
-	.byte	0x88,0x83,0xb0,0xf3	@ aesmc q4,q4
-	.byte	0x8a,0xa3,0xb0,0xf3	@ aesmc q5,q5
-	.byte	0xa2,0x23,0xf0,0xf3	@ aesmc q9,q9
-	 veor		q3,q3,q7
-	 add		r8,r8,#3
-	.byte	0x2a,0x83,0xb0,0xf3	@ aese q4,q13
-	.byte	0x2a,0xa3,0xb0,0xf3	@ aese q5,q13
-	.byte	0x2a,0x23,0xf0,0xf3	@ aese q9,q13
-	 veor		q11,q11,q7
-	 rev		r9,r9
-	.byte	0x88,0x83,0xb0,0xf3	@ aesmc q4,q4
-	 vld1.32	 {q8},[r7]!	@ re-pre-load rndkey[0]
-	.byte	0x8a,0xa3,0xb0,0xf3	@ aesmc q5,q5
-	.byte	0xa2,0x23,0xf0,0xf3	@ aesmc q9,q9
-	 vmov.32	d1[1], r9
-	 rev		r10,r10
-	.byte	0x2c,0x83,0xb0,0xf3	@ aese q4,q14
-	.byte	0x2c,0xa3,0xb0,0xf3	@ aese q5,q14
-	.byte	0x2c,0x23,0xf0,0xf3	@ aese q9,q14
-	 vmov.32	d3[1], r10
-	 rev		r12,r8
-	.byte	0x88,0x83,0xb0,0xf3	@ aesmc q4,q4
-	.byte	0x8a,0xa3,0xb0,0xf3	@ aesmc q5,q5
-	.byte	0xa2,0x23,0xf0,0xf3	@ aesmc q9,q9
-	 vmov.32	d21[1], r12
-	 subs		r2,r2,#3
-	.byte	0x2e,0x83,0xb0,0xf3	@ aese q4,q15
-	.byte	0x2e,0xa3,0xb0,0xf3	@ aese q5,q15
-	.byte	0x2e,0x23,0xf0,0xf3	@ aese q9,q15
+.byte	0x20,0x03,0xb0,0xf3	@ aese q0,q8
+.byte	0x80,0x83,0xb0,0xf3	@ aesmc q4,q0
+.byte	0x20,0x23,0xb0,0xf3	@ aese q1,q8
+.byte	0x82,0xa3,0xb0,0xf3	@ aesmc q5,q1
+	vld1.8	{q2},[r0]!
+	vorr	q0,q6,q6
+.byte	0x20,0x43,0xf0,0xf3	@ aese q10,q8
+.byte	0xa4,0x43,0xf0,0xf3	@ aesmc q10,q10
+	vld1.8	{q3},[r0]!
+	vorr	q1,q6,q6
+.byte	0x22,0x83,0xb0,0xf3	@ aese q4,q9
+.byte	0x88,0x83,0xb0,0xf3	@ aesmc q4,q4
+.byte	0x22,0xa3,0xb0,0xf3	@ aese q5,q9
+.byte	0x8a,0xa3,0xb0,0xf3	@ aesmc q5,q5
+	vld1.8	{q11},[r0]!
+	mov	r7,r3
+.byte	0x22,0x43,0xf0,0xf3	@ aese q10,q9
+.byte	0xa4,0x23,0xf0,0xf3	@ aesmc q9,q10
+	vorr	q10,q6,q6
+	add	r9,r8,#1
+.byte	0x28,0x83,0xb0,0xf3	@ aese q4,q12
+.byte	0x88,0x83,0xb0,0xf3	@ aesmc q4,q4
+.byte	0x28,0xa3,0xb0,0xf3	@ aese q5,q12
+.byte	0x8a,0xa3,0xb0,0xf3	@ aesmc q5,q5
+	veor	q2,q2,q7
+	add	r10,r8,#2
+.byte	0x28,0x23,0xf0,0xf3	@ aese q9,q12
+.byte	0xa2,0x23,0xf0,0xf3	@ aesmc q9,q9
+	veor	q3,q3,q7
+	add	r8,r8,#3
+.byte	0x2a,0x83,0xb0,0xf3	@ aese q4,q13
+.byte	0x88,0x83,0xb0,0xf3	@ aesmc q4,q4
+.byte	0x2a,0xa3,0xb0,0xf3	@ aese q5,q13
+.byte	0x8a,0xa3,0xb0,0xf3	@ aesmc q5,q5
+	veor	q11,q11,q7
+	rev	r9,r9
+.byte	0x2a,0x23,0xf0,0xf3	@ aese q9,q13
+.byte	0xa2,0x23,0xf0,0xf3	@ aesmc q9,q9
+	vmov.32	d1[1], r9
+	rev	r10,r10
+.byte	0x2c,0x83,0xb0,0xf3	@ aese q4,q14
+.byte	0x88,0x83,0xb0,0xf3	@ aesmc q4,q4
+.byte	0x2c,0xa3,0xb0,0xf3	@ aese q5,q14
+.byte	0x8a,0xa3,0xb0,0xf3	@ aesmc q5,q5
+	vmov.32	d3[1], r10
+	rev	r12,r8
+.byte	0x2c,0x23,0xf0,0xf3	@ aese q9,q14
+.byte	0xa2,0x23,0xf0,0xf3	@ aesmc q9,q9
+	vmov.32	d21[1], r12
+	subs	r2,r2,#3
+.byte	0x2e,0x83,0xb0,0xf3	@ aese q4,q15
+.byte	0x2e,0xa3,0xb0,0xf3	@ aese q5,q15
+.byte	0x2e,0x23,0xf0,0xf3	@ aese q9,q15
 
-	 mov		r6,r5
-	veor		q2,q2,q4
-	veor		q3,q3,q5
-	veor		q11,q11,q9
-	 vld1.32	 {q9},[r7]!	@ re-pre-load rndkey[1]
-	vst1.8		{q2},[r1]!
-	vst1.8		{q3},[r1]!
-	vst1.8		{q11},[r1]!
-	bhs		.Loop3x_ctr32
+	veor	q2,q2,q4
+	vld1.32	{q8},[r7]!	@ re-pre-load rndkey[0]
+	vst1.8	{q2},[r1]!
+	veor	q3,q3,q5
+	mov	r6,r5
+	vst1.8	{q3},[r1]!
+	veor	q11,q11,q9
+	vld1.32	{q9},[r7]!	@ re-pre-load rndkey[1]
+	vst1.8	{q11},[r1]!
+	bhs	.Loop3x_ctr32
 
-	adds		r2,r2,#3
-	beq		.Lctr32_done
-	cmp		r2,#1
-	mov		r12,#16
+	adds	r2,r2,#3
+	beq	.Lctr32_done
+	cmp	r2,#1
+	mov	r12,#16
 	moveq	r12,#0
 
 .Lctr32_tail:
-	.byte	0x20,0x03,0xb0,0xf3	@ aese q0,q8
-	.byte	0x20,0x23,0xb0,0xf3	@ aese q1,q8
-	vld1.32		{q8},[r7]!
-	.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
-	.byte	0x82,0x23,0xb0,0xf3	@ aesmc q1,q1
-	subs		r6,r6,#2
-	.byte	0x22,0x03,0xb0,0xf3	@ aese q0,q9
-	.byte	0x22,0x23,0xb0,0xf3	@ aese q1,q9
-	vld1.32		{q9},[r7]!
-	.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
-	.byte	0x82,0x23,0xb0,0xf3	@ aesmc q1,q1
-	bgt		.Lctr32_tail
+.byte	0x20,0x03,0xb0,0xf3	@ aese q0,q8
+.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
+.byte	0x20,0x23,0xb0,0xf3	@ aese q1,q8
+.byte	0x82,0x23,0xb0,0xf3	@ aesmc q1,q1
+	vld1.32	{q8},[r7]!
+	subs	r6,r6,#2
+.byte	0x22,0x03,0xb0,0xf3	@ aese q0,q9
+.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
+.byte	0x22,0x23,0xb0,0xf3	@ aese q1,q9
+.byte	0x82,0x23,0xb0,0xf3	@ aesmc q1,q1
+	vld1.32	{q9},[r7]!
+	bgt	.Lctr32_tail
 
-	.byte	0x20,0x03,0xb0,0xf3	@ aese q0,q8
-	.byte	0x20,0x23,0xb0,0xf3	@ aese q1,q8
-	.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
-	.byte	0x82,0x23,0xb0,0xf3	@ aesmc q1,q1
-	.byte	0x22,0x03,0xb0,0xf3	@ aese q0,q9
-	.byte	0x22,0x23,0xb0,0xf3	@ aese q1,q9
-	.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
-	.byte	0x82,0x23,0xb0,0xf3	@ aesmc q1,q1
-	 vld1.8		{q2},[r0],r12
-	.byte	0x28,0x03,0xb0,0xf3	@ aese q0,q12
-	.byte	0x28,0x23,0xb0,0xf3	@ aese q1,q12
-	 vld1.8		{q3},[r0]
-	.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
-	.byte	0x82,0x23,0xb0,0xf3	@ aesmc q1,q1
-	.byte	0x2a,0x03,0xb0,0xf3	@ aese q0,q13
-	.byte	0x2a,0x23,0xb0,0xf3	@ aese q1,q13
-	.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
-	.byte	0x82,0x23,0xb0,0xf3	@ aesmc q1,q1
-	.byte	0x2c,0x03,0xb0,0xf3	@ aese q0,q14
-	.byte	0x2c,0x23,0xb0,0xf3	@ aese q1,q14
-	 veor		q2,q2,q7
-	.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
-	.byte	0x82,0x23,0xb0,0xf3	@ aesmc q1,q1
-	 veor		q3,q3,q7
-	.byte	0x2e,0x03,0xb0,0xf3	@ aese q0,q15
-	.byte	0x2e,0x23,0xb0,0xf3	@ aese q1,q15
+.byte	0x20,0x03,0xb0,0xf3	@ aese q0,q8
+.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
+.byte	0x20,0x23,0xb0,0xf3	@ aese q1,q8
+.byte	0x82,0x23,0xb0,0xf3	@ aesmc q1,q1
+.byte	0x22,0x03,0xb0,0xf3	@ aese q0,q9
+.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
+.byte	0x22,0x23,0xb0,0xf3	@ aese q1,q9
+.byte	0x82,0x23,0xb0,0xf3	@ aesmc q1,q1
+	vld1.8	{q2},[r0],r12
+.byte	0x28,0x03,0xb0,0xf3	@ aese q0,q12
+.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
+.byte	0x28,0x23,0xb0,0xf3	@ aese q1,q12
+.byte	0x82,0x23,0xb0,0xf3	@ aesmc q1,q1
+	vld1.8	{q3},[r0]
+.byte	0x2a,0x03,0xb0,0xf3	@ aese q0,q13
+.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
+.byte	0x2a,0x23,0xb0,0xf3	@ aese q1,q13
+.byte	0x82,0x23,0xb0,0xf3	@ aesmc q1,q1
+	veor	q2,q2,q7
+.byte	0x2c,0x03,0xb0,0xf3	@ aese q0,q14
+.byte	0x80,0x03,0xb0,0xf3	@ aesmc q0,q0
+.byte	0x2c,0x23,0xb0,0xf3	@ aese q1,q14
+.byte	0x82,0x23,0xb0,0xf3	@ aesmc q1,q1
+	veor	q3,q3,q7
+.byte	0x2e,0x03,0xb0,0xf3	@ aese q0,q15
+.byte	0x2e,0x23,0xb0,0xf3	@ aese q1,q15
 
-	cmp		r2,#1
-	veor		q2,q2,q0
-	veor		q3,q3,q1
-	vst1.8		{q2},[r1]!
-	beq		.Lctr32_done
-	vst1.8		{q3},[r1]
+	cmp	r2,#1
+	veor	q2,q2,q0
+	veor	q3,q3,q1
+	vst1.8	{q2},[r1]!
+	beq	.Lctr32_done
+	vst1.8	{q3},[r1]
 
 .Lctr32_done:
-	vldmia		sp!,{d8-d15}
-	ldmia		sp!,{r4-r10,pc}
+	vldmia	sp!,{d8,d9,d10,d11,d12,d13,d14,d15}
+	ldmia	sp!,{r4,r5,r6,r7,r8,r9,r10,pc}
 .size	aes_v8_ctr32_encrypt_blocks,.-aes_v8_ctr32_encrypt_blocks
 #endif
diff --git a/linux-arm/crypto/aes/bsaes-armv7.S b/linux-arm/crypto/aes/bsaes-armv7.S
index cbc32fb..0feeab0 100644
--- a/linux-arm/crypto/aes/bsaes-armv7.S
+++ b/linux-arm/crypto/aes/bsaes-armv7.S
@@ -60,135 +60,141 @@
 # define BSAES_ASM_EXTENDED_KEY
 # define XTS_CHAIN_TWEAK
 # define __ARM_ARCH__ __LINUX_ARM_ARCH__
+# define __ARM_MAX_ARCH__ 7
 #endif
 
 #ifdef __thumb__
 # define adrl adr
 #endif
 
-#if __ARM_ARCH__>=7
+#if __ARM_MAX_ARCH__>=7
+.arch	armv7-a
+.fpu	neon
+
 .text
 .syntax	unified 	@ ARMv7-capable assembler is expected to handle this
-#ifdef __thumb2__
+#if defined(__thumb2__) && !defined(__APPLE__)
 .thumb
 #else
-.code   32
+.code	32
 #endif
 
-.fpu	neon
-
 .type	_bsaes_decrypt8,%function
 .align	4
 _bsaes_decrypt8:
 	adr	r6,_bsaes_decrypt8
 	vldmia	r4!, {q9}		@ round 0 key
+#ifdef	__APPLE__
+	adr	r6,.LM0ISR
+#else
 	add	r6,r6,#.LM0ISR-_bsaes_decrypt8
+#endif
 
 	vldmia	r6!, {q8}		@ .LM0ISR
 	veor	q10, q0, q9	@ xor with round0 key
 	veor	q11, q1, q9
-	 vtbl.8	d0, {q10}, d16
-	 vtbl.8	d1, {q10}, d17
+	vtbl.8	d0, {q10}, d16
+	vtbl.8	d1, {q10}, d17
 	veor	q12, q2, q9
-	 vtbl.8	d2, {q11}, d16
-	 vtbl.8	d3, {q11}, d17
+	vtbl.8	d2, {q11}, d16
+	vtbl.8	d3, {q11}, d17
 	veor	q13, q3, q9
-	 vtbl.8	d4, {q12}, d16
-	 vtbl.8	d5, {q12}, d17
+	vtbl.8	d4, {q12}, d16
+	vtbl.8	d5, {q12}, d17
 	veor	q14, q4, q9
-	 vtbl.8	d6, {q13}, d16
-	 vtbl.8	d7, {q13}, d17
+	vtbl.8	d6, {q13}, d16
+	vtbl.8	d7, {q13}, d17
 	veor	q15, q5, q9
-	 vtbl.8	d8, {q14}, d16
-	 vtbl.8	d9, {q14}, d17
+	vtbl.8	d8, {q14}, d16
+	vtbl.8	d9, {q14}, d17
 	veor	q10, q6, q9
-	 vtbl.8	d10, {q15}, d16
-	 vtbl.8	d11, {q15}, d17
+	vtbl.8	d10, {q15}, d16
+	vtbl.8	d11, {q15}, d17
 	veor	q11, q7, q9
-	 vtbl.8	d12, {q10}, d16
-	 vtbl.8	d13, {q10}, d17
-	 vtbl.8	d14, {q11}, d16
-	 vtbl.8	d15, {q11}, d17
+	vtbl.8	d12, {q10}, d16
+	vtbl.8	d13, {q10}, d17
+	vtbl.8	d14, {q11}, d16
+	vtbl.8	d15, {q11}, d17
 	vmov.i8	q8,#0x55			@ compose .LBS0
 	vmov.i8	q9,#0x33			@ compose .LBS1
 	vshr.u64	q10, q6, #1
-	 vshr.u64	q11, q4, #1
-	veor		q10, q10, q7
-	 veor		q11, q11, q5
-	vand		q10, q10, q8
-	 vand		q11, q11, q8
-	veor		q7, q7, q10
+	vshr.u64	q11, q4, #1
+	veor	q10, q10, q7
+	veor	q11, q11, q5
+	vand	q10, q10, q8
+	vand	q11, q11, q8
+	veor	q7, q7, q10
 	vshl.u64	q10, q10, #1
-	 veor		q5, q5, q11
-	 vshl.u64	q11, q11, #1
-	veor		q6, q6, q10
-	 veor		q4, q4, q11
+	veor	q5, q5, q11
+	vshl.u64	q11, q11, #1
+	veor	q6, q6, q10
+	veor	q4, q4, q11
 	vshr.u64	q10, q2, #1
-	 vshr.u64	q11, q0, #1
-	veor		q10, q10, q3
-	 veor		q11, q11, q1
-	vand		q10, q10, q8
-	 vand		q11, q11, q8
-	veor		q3, q3, q10
+	vshr.u64	q11, q0, #1
+	veor	q10, q10, q3
+	veor	q11, q11, q1
+	vand	q10, q10, q8
+	vand	q11, q11, q8
+	veor	q3, q3, q10
 	vshl.u64	q10, q10, #1
-	 veor		q1, q1, q11
-	 vshl.u64	q11, q11, #1
-	veor		q2, q2, q10
-	 veor		q0, q0, q11
+	veor	q1, q1, q11
+	vshl.u64	q11, q11, #1
+	veor	q2, q2, q10
+	veor	q0, q0, q11
 	vmov.i8	q8,#0x0f			@ compose .LBS2
 	vshr.u64	q10, q5, #2
-	 vshr.u64	q11, q4, #2
-	veor		q10, q10, q7
-	 veor		q11, q11, q6
-	vand		q10, q10, q9
-	 vand		q11, q11, q9
-	veor		q7, q7, q10
+	vshr.u64	q11, q4, #2
+	veor	q10, q10, q7
+	veor	q11, q11, q6
+	vand	q10, q10, q9
+	vand	q11, q11, q9
+	veor	q7, q7, q10
 	vshl.u64	q10, q10, #2
-	 veor		q6, q6, q11
-	 vshl.u64	q11, q11, #2
-	veor		q5, q5, q10
-	 veor		q4, q4, q11
+	veor	q6, q6, q11
+	vshl.u64	q11, q11, #2
+	veor	q5, q5, q10
+	veor	q4, q4, q11
 	vshr.u64	q10, q1, #2
-	 vshr.u64	q11, q0, #2
-	veor		q10, q10, q3
-	 veor		q11, q11, q2
-	vand		q10, q10, q9
-	 vand		q11, q11, q9
-	veor		q3, q3, q10
+	vshr.u64	q11, q0, #2
+	veor	q10, q10, q3
+	veor	q11, q11, q2
+	vand	q10, q10, q9
+	vand	q11, q11, q9
+	veor	q3, q3, q10
 	vshl.u64	q10, q10, #2
-	 veor		q2, q2, q11
-	 vshl.u64	q11, q11, #2
-	veor		q1, q1, q10
-	 veor		q0, q0, q11
+	veor	q2, q2, q11
+	vshl.u64	q11, q11, #2
+	veor	q1, q1, q10
+	veor	q0, q0, q11
 	vshr.u64	q10, q3, #4
-	 vshr.u64	q11, q2, #4
-	veor		q10, q10, q7
-	 veor		q11, q11, q6
-	vand		q10, q10, q8
-	 vand		q11, q11, q8
-	veor		q7, q7, q10
+	vshr.u64	q11, q2, #4
+	veor	q10, q10, q7
+	veor	q11, q11, q6
+	vand	q10, q10, q8
+	vand	q11, q11, q8
+	veor	q7, q7, q10
 	vshl.u64	q10, q10, #4
-	 veor		q6, q6, q11
-	 vshl.u64	q11, q11, #4
-	veor		q3, q3, q10
-	 veor		q2, q2, q11
+	veor	q6, q6, q11
+	vshl.u64	q11, q11, #4
+	veor	q3, q3, q10
+	veor	q2, q2, q11
 	vshr.u64	q10, q1, #4
-	 vshr.u64	q11, q0, #4
-	veor		q10, q10, q5
-	 veor		q11, q11, q4
-	vand		q10, q10, q8
-	 vand		q11, q11, q8
-	veor		q5, q5, q10
+	vshr.u64	q11, q0, #4
+	veor	q10, q10, q5
+	veor	q11, q11, q4
+	vand	q10, q10, q8
+	vand	q11, q11, q8
+	veor	q5, q5, q10
 	vshl.u64	q10, q10, #4
-	 veor		q4, q4, q11
-	 vshl.u64	q11, q11, #4
-	veor		q1, q1, q10
-	 veor		q0, q0, q11
+	veor	q4, q4, q11
+	vshl.u64	q11, q11, #4
+	veor	q1, q1, q10
+	veor	q0, q0, q11
 	sub	r5,r5,#1
 	b	.Ldec_sbox
 .align	4
 .Ldec_loop:
-	vldmia	r4!, {q8-q11}
+	vldmia	r4!, {q8,q9,q10,q11}
 	veor	q8, q8, q0
 	veor	q9, q9, q1
 	vtbl.8	d0, {q8}, d24
@@ -218,17 +224,17 @@
 	vtbl.8	d14, {q11}, d24
 	vtbl.8	d15, {q11}, d25
 .Ldec_sbox:
-	 veor	q1, q1, q4
+	veor	q1, q1, q4
 	veor	q3, q3, q4
 
 	veor	q4, q4, q7
-	 veor	q1, q1, q6
+	veor	q1, q1, q6
 	veor	q2, q2, q7
 	veor	q6, q6, q4
 
 	veor	q0, q0, q1
 	veor	q2, q2, q5
-	 veor	q7, q7, q6
+	veor	q7, q7, q6
 	veor	q3, q3, q0
 	veor	q5, q5, q0
 	veor	q1, q1, q3
@@ -236,7 +242,7 @@
 	veor	q10, q7, q4
 	veor	q9, q1, q6
 	veor	q13, q4, q0
-	 vmov	q8, q10
+	vmov	q8, q10
 	veor	q12, q5, q2
 
 	vorr	q10, q10, q9
@@ -293,7 +299,7 @@
 	veor	q14, q14, q11
 	veor	q12, q5, q2
 	veor	q8, q1, q6
-	veor 	q10, q15, q14
+	veor	q10, q15, q14
 	vand	q10, q10, q5
 	veor	q5, q5, q1
 	vand	q11, q1, q15
@@ -303,19 +309,19 @@
 	veor	q15, q15, q13
 	veor	q14, q14, q9
 	veor	q11, q15, q14
-	 veor 	q10, q13, q9
+	veor	q10, q13, q9
 	vand	q11, q11, q12
-	 vand	q10, q10, q2
+	vand	q10, q10, q2
 	veor	q12, q12, q8
-	 veor	q2, q2, q6
+	veor	q2, q2, q6
 	vand	q8, q8, q15
-	 vand	q6, q6, q13
+	vand	q6, q6, q13
 	vand	q12, q12, q14
-	 vand	q2, q2, q9
+	vand	q2, q2, q9
 	veor	q8, q8, q12
-	 veor	q2, q2, q6
+	veor	q2, q2, q6
 	veor	q12, q12, q11
-	 veor	q6, q6, q10
+	veor	q6, q6, q10
 	veor	q5, q5, q12
 	veor	q2, q2, q12
 	veor	q1, q1, q8
@@ -324,22 +330,22 @@
 	veor	q12, q3, q0
 	veor	q8, q7, q4
 	veor	q11, q15, q14
-	 veor 	q10, q13, q9
+	veor	q10, q13, q9
 	vand	q11, q11, q12
-	 vand	q10, q10, q0
+	vand	q10, q10, q0
 	veor	q12, q12, q8
-	 veor	q0, q0, q4
+	veor	q0, q0, q4
 	vand	q8, q8, q15
-	 vand	q4, q4, q13
+	vand	q4, q4, q13
 	vand	q12, q12, q14
-	 vand	q0, q0, q9
+	vand	q0, q0, q9
 	veor	q8, q8, q12
-	 veor	q0, q0, q4
+	veor	q0, q0, q4
 	veor	q12, q12, q11
-	 veor	q4, q4, q10
+	veor	q4, q4, q10
 	veor	q15, q15, q13
 	veor	q14, q14, q9
-	veor 	q10, q15, q14
+	veor	q10, q15, q14
 	vand	q10, q10, q3
 	veor	q3, q3, q7
 	vand	q11, q7, q15
@@ -357,10 +363,10 @@
 	veor	q2, q2, q7
 	veor	q5, q5, q7
 	veor	q4, q4, q2
-	 veor 	q7, q7, q0
+	veor	q7, q7, q0
 	veor	q4, q4, q5
-	 veor	q3, q3, q6
-	 veor	q6, q6, q1
+	veor	q3, q3, q6
+	veor	q6, q6, q1
 	veor	q3, q3, q4
 
 	veor	q4, q4, q0
@@ -385,58 +391,58 @@
 	veor	q12, q12, q2
 	veor	q13, q13, q7
 
-	 veor	q0, q0, q14
-	 veor	q1, q1, q14
-	 veor	q6, q6, q8
-	 veor	q2, q2, q10
-	 veor	q4, q4, q9
-	 veor	q1, q1, q15
-	 veor	q6, q6, q15
-	 veor	q2, q2, q14
-	 veor	q7, q7, q11
-	 veor	q4, q4, q14
-	 veor	q3, q3, q12
-	 veor	q2, q2, q15
-	 veor	q7, q7, q15
-	 veor	q5, q5, q13
+	veor	q0, q0, q14
+	veor	q1, q1, q14
+	veor	q6, q6, q8
+	veor	q2, q2, q10
+	veor	q4, q4, q9
+	veor	q1, q1, q15
+	veor	q6, q6, q15
+	veor	q2, q2, q14
+	veor	q7, q7, q11
+	veor	q4, q4, q14
+	veor	q3, q3, q12
+	veor	q2, q2, q15
+	veor	q7, q7, q15
+	veor	q5, q5, q13
 	vext.8	q8, q0, q0, #12	@ x0 <<< 32
 	vext.8	q9, q1, q1, #12
-	 veor	q0, q0, q8		@ x0 ^ (x0 <<< 32)
+	veor	q0, q0, q8		@ x0 ^ (x0 <<< 32)
 	vext.8	q10, q6, q6, #12
-	 veor	q1, q1, q9
+	veor	q1, q1, q9
 	vext.8	q11, q4, q4, #12
-	 veor	q6, q6, q10
+	veor	q6, q6, q10
 	vext.8	q12, q2, q2, #12
-	 veor	q4, q4, q11
+	veor	q4, q4, q11
 	vext.8	q13, q7, q7, #12
-	 veor	q2, q2, q12
+	veor	q2, q2, q12
 	vext.8	q14, q3, q3, #12
-	 veor	q7, q7, q13
+	veor	q7, q7, q13
 	vext.8	q15, q5, q5, #12
-	 veor	q3, q3, q14
+	veor	q3, q3, q14
 
 	veor	q9, q9, q0
-	 veor	q5, q5, q15
-	 vext.8	q0, q0, q0, #8		@ (x0 ^ (x0 <<< 32)) <<< 64)
+	veor	q5, q5, q15
+	vext.8	q0, q0, q0, #8		@ (x0 ^ (x0 <<< 32)) <<< 64)
 	veor	q10, q10, q1
 	veor	q8, q8, q5
 	veor	q9, q9, q5
-	 vext.8	q1, q1, q1, #8
+	vext.8	q1, q1, q1, #8
 	veor	q13, q13, q2
-	 veor	q0, q0, q8
+	veor	q0, q0, q8
 	veor	q14, q14, q7
-	 veor	q1, q1, q9
-	 vext.8	q8, q2, q2, #8
+	veor	q1, q1, q9
+	vext.8	q8, q2, q2, #8
 	veor	q12, q12, q4
-	 vext.8	q9, q7, q7, #8
+	vext.8	q9, q7, q7, #8
 	veor	q15, q15, q3
-	 vext.8	q2, q4, q4, #8
+	vext.8	q2, q4, q4, #8
 	veor	q11, q11, q6
-	 vext.8	q7, q5, q5, #8
+	vext.8	q7, q5, q5, #8
 	veor	q12, q12, q5
-	 vext.8	q4, q3, q3, #8
+	vext.8	q4, q3, q3, #8
 	veor	q11, q11, q5
-	 vext.8	q3, q6, q6, #8
+	vext.8	q3, q6, q6, #8
 	veor	q5, q9, q13
 	veor	q11, q11, q2
 	veor	q7, q7, q15
@@ -456,78 +462,78 @@
 	vmov.i8	q8,#0x55			@ compose .LBS0
 	vmov.i8	q9,#0x33			@ compose .LBS1
 	vshr.u64	q10, q3, #1
-	 vshr.u64	q11, q2, #1
-	veor		q10, q10, q5
-	 veor		q11, q11, q7
-	vand		q10, q10, q8
-	 vand		q11, q11, q8
-	veor		q5, q5, q10
+	vshr.u64	q11, q2, #1
+	veor	q10, q10, q5
+	veor	q11, q11, q7
+	vand	q10, q10, q8
+	vand	q11, q11, q8
+	veor	q5, q5, q10
 	vshl.u64	q10, q10, #1
-	 veor		q7, q7, q11
-	 vshl.u64	q11, q11, #1
-	veor		q3, q3, q10
-	 veor		q2, q2, q11
+	veor	q7, q7, q11
+	vshl.u64	q11, q11, #1
+	veor	q3, q3, q10
+	veor	q2, q2, q11
 	vshr.u64	q10, q6, #1
-	 vshr.u64	q11, q0, #1
-	veor		q10, q10, q4
-	 veor		q11, q11, q1
-	vand		q10, q10, q8
-	 vand		q11, q11, q8
-	veor		q4, q4, q10
+	vshr.u64	q11, q0, #1
+	veor	q10, q10, q4
+	veor	q11, q11, q1
+	vand	q10, q10, q8
+	vand	q11, q11, q8
+	veor	q4, q4, q10
 	vshl.u64	q10, q10, #1
-	 veor		q1, q1, q11
-	 vshl.u64	q11, q11, #1
-	veor		q6, q6, q10
-	 veor		q0, q0, q11
+	veor	q1, q1, q11
+	vshl.u64	q11, q11, #1
+	veor	q6, q6, q10
+	veor	q0, q0, q11
 	vmov.i8	q8,#0x0f			@ compose .LBS2
 	vshr.u64	q10, q7, #2
-	 vshr.u64	q11, q2, #2
-	veor		q10, q10, q5
-	 veor		q11, q11, q3
-	vand		q10, q10, q9
-	 vand		q11, q11, q9
-	veor		q5, q5, q10
+	vshr.u64	q11, q2, #2
+	veor	q10, q10, q5
+	veor	q11, q11, q3
+	vand	q10, q10, q9
+	vand	q11, q11, q9
+	veor	q5, q5, q10
 	vshl.u64	q10, q10, #2
-	 veor		q3, q3, q11
-	 vshl.u64	q11, q11, #2
-	veor		q7, q7, q10
-	 veor		q2, q2, q11
+	veor	q3, q3, q11
+	vshl.u64	q11, q11, #2
+	veor	q7, q7, q10
+	veor	q2, q2, q11
 	vshr.u64	q10, q1, #2
-	 vshr.u64	q11, q0, #2
-	veor		q10, q10, q4
-	 veor		q11, q11, q6
-	vand		q10, q10, q9
-	 vand		q11, q11, q9
-	veor		q4, q4, q10
+	vshr.u64	q11, q0, #2
+	veor	q10, q10, q4
+	veor	q11, q11, q6
+	vand	q10, q10, q9
+	vand	q11, q11, q9
+	veor	q4, q4, q10
 	vshl.u64	q10, q10, #2
-	 veor		q6, q6, q11
-	 vshl.u64	q11, q11, #2
-	veor		q1, q1, q10
-	 veor		q0, q0, q11
+	veor	q6, q6, q11
+	vshl.u64	q11, q11, #2
+	veor	q1, q1, q10
+	veor	q0, q0, q11
 	vshr.u64	q10, q4, #4
-	 vshr.u64	q11, q6, #4
-	veor		q10, q10, q5
-	 veor		q11, q11, q3
-	vand		q10, q10, q8
-	 vand		q11, q11, q8
-	veor		q5, q5, q10
+	vshr.u64	q11, q6, #4
+	veor	q10, q10, q5
+	veor	q11, q11, q3
+	vand	q10, q10, q8
+	vand	q11, q11, q8
+	veor	q5, q5, q10
 	vshl.u64	q10, q10, #4
-	 veor		q3, q3, q11
-	 vshl.u64	q11, q11, #4
-	veor		q4, q4, q10
-	 veor		q6, q6, q11
+	veor	q3, q3, q11
+	vshl.u64	q11, q11, #4
+	veor	q4, q4, q10
+	veor	q6, q6, q11
 	vshr.u64	q10, q1, #4
-	 vshr.u64	q11, q0, #4
-	veor		q10, q10, q7
-	 veor		q11, q11, q2
-	vand		q10, q10, q8
-	 vand		q11, q11, q8
-	veor		q7, q7, q10
+	vshr.u64	q11, q0, #4
+	veor	q10, q10, q7
+	veor	q11, q11, q2
+	vand	q10, q10, q8
+	vand	q11, q11, q8
+	veor	q7, q7, q10
 	vshl.u64	q10, q10, #4
-	 veor		q2, q2, q11
-	 vshl.u64	q11, q11, #4
-	veor		q1, q1, q10
-	 veor		q0, q0, q11
+	veor	q2, q2, q11
+	vshl.u64	q11, q11, #4
+	veor	q1, q1, q10
+	veor	q0, q0, q11
 	vldmia	r4, {q8}			@ last round key
 	veor	q6, q6, q8
 	veor	q4, q4, q8
@@ -543,23 +549,24 @@
 .type	_bsaes_const,%object
 .align	6
 _bsaes_const:
-.LM0ISR:	@ InvShiftRows constants
-	.quad	0x0a0e0206070b0f03, 0x0004080c0d010509
+.LM0ISR:@ InvShiftRows constants
+.quad	0x0a0e0206070b0f03, 0x0004080c0d010509
 .LISR:
-	.quad	0x0504070602010003, 0x0f0e0d0c080b0a09
+.quad	0x0504070602010003, 0x0f0e0d0c080b0a09
 .LISRM0:
-	.quad	0x01040b0e0205080f, 0x0306090c00070a0d
-.LM0SR:		@ ShiftRows constants
-	.quad	0x0a0e02060f03070b, 0x0004080c05090d01
+.quad	0x01040b0e0205080f, 0x0306090c00070a0d
+.LM0SR:@ ShiftRows constants
+.quad	0x0a0e02060f03070b, 0x0004080c05090d01
 .LSR:
-	.quad	0x0504070600030201, 0x0f0e0d0c0a09080b
+.quad	0x0504070600030201, 0x0f0e0d0c0a09080b
 .LSRM0:
-	.quad	0x0304090e00050a0f, 0x01060b0c0207080d
+.quad	0x0304090e00050a0f, 0x01060b0c0207080d
 .LM0:
-	.quad	0x02060a0e03070b0f, 0x0004080c0105090d
+.quad	0x02060a0e03070b0f, 0x0004080c0105090d
 .LREVM0SR:
-	.quad	0x090d01050c000408, 0x03070b0f060a0e02
-.asciz	"Bit-sliced AES for NEON, CRYPTOGAMS by <appro@openssl.org>"
+.quad	0x090d01050c000408, 0x03070b0f060a0e02
+.byte	66,105,116,45,115,108,105,99,101,100,32,65,69,83,32,102,111,114,32,78,69,79,78,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
+.align	2
 .align	6
 .size	_bsaes_const,.-_bsaes_const
 
@@ -568,115 +575,119 @@
 _bsaes_encrypt8:
 	adr	r6,_bsaes_encrypt8
 	vldmia	r4!, {q9}		@ round 0 key
+#ifdef	__APPLE__
+	adr	r6,.LM0SR
+#else
 	sub	r6,r6,#_bsaes_encrypt8-.LM0SR
+#endif
 
 	vldmia	r6!, {q8}		@ .LM0SR
 _bsaes_encrypt8_alt:
 	veor	q10, q0, q9	@ xor with round0 key
 	veor	q11, q1, q9
-	 vtbl.8	d0, {q10}, d16
-	 vtbl.8	d1, {q10}, d17
+	vtbl.8	d0, {q10}, d16
+	vtbl.8	d1, {q10}, d17
 	veor	q12, q2, q9
-	 vtbl.8	d2, {q11}, d16
-	 vtbl.8	d3, {q11}, d17
+	vtbl.8	d2, {q11}, d16
+	vtbl.8	d3, {q11}, d17
 	veor	q13, q3, q9
-	 vtbl.8	d4, {q12}, d16
-	 vtbl.8	d5, {q12}, d17
+	vtbl.8	d4, {q12}, d16
+	vtbl.8	d5, {q12}, d17
 	veor	q14, q4, q9
-	 vtbl.8	d6, {q13}, d16
-	 vtbl.8	d7, {q13}, d17
+	vtbl.8	d6, {q13}, d16
+	vtbl.8	d7, {q13}, d17
 	veor	q15, q5, q9
-	 vtbl.8	d8, {q14}, d16
-	 vtbl.8	d9, {q14}, d17
+	vtbl.8	d8, {q14}, d16
+	vtbl.8	d9, {q14}, d17
 	veor	q10, q6, q9
-	 vtbl.8	d10, {q15}, d16
-	 vtbl.8	d11, {q15}, d17
+	vtbl.8	d10, {q15}, d16
+	vtbl.8	d11, {q15}, d17
 	veor	q11, q7, q9
-	 vtbl.8	d12, {q10}, d16
-	 vtbl.8	d13, {q10}, d17
-	 vtbl.8	d14, {q11}, d16
-	 vtbl.8	d15, {q11}, d17
+	vtbl.8	d12, {q10}, d16
+	vtbl.8	d13, {q10}, d17
+	vtbl.8	d14, {q11}, d16
+	vtbl.8	d15, {q11}, d17
 _bsaes_encrypt8_bitslice:
 	vmov.i8	q8,#0x55			@ compose .LBS0
 	vmov.i8	q9,#0x33			@ compose .LBS1
 	vshr.u64	q10, q6, #1
-	 vshr.u64	q11, q4, #1
-	veor		q10, q10, q7
-	 veor		q11, q11, q5
-	vand		q10, q10, q8
-	 vand		q11, q11, q8
-	veor		q7, q7, q10
+	vshr.u64	q11, q4, #1
+	veor	q10, q10, q7
+	veor	q11, q11, q5
+	vand	q10, q10, q8
+	vand	q11, q11, q8
+	veor	q7, q7, q10
 	vshl.u64	q10, q10, #1
-	 veor		q5, q5, q11
-	 vshl.u64	q11, q11, #1
-	veor		q6, q6, q10
-	 veor		q4, q4, q11
+	veor	q5, q5, q11
+	vshl.u64	q11, q11, #1
+	veor	q6, q6, q10
+	veor	q4, q4, q11
 	vshr.u64	q10, q2, #1
-	 vshr.u64	q11, q0, #1
-	veor		q10, q10, q3
-	 veor		q11, q11, q1
-	vand		q10, q10, q8
-	 vand		q11, q11, q8
-	veor		q3, q3, q10
+	vshr.u64	q11, q0, #1
+	veor	q10, q10, q3
+	veor	q11, q11, q1
+	vand	q10, q10, q8
+	vand	q11, q11, q8
+	veor	q3, q3, q10
 	vshl.u64	q10, q10, #1
-	 veor		q1, q1, q11
-	 vshl.u64	q11, q11, #1
-	veor		q2, q2, q10
-	 veor		q0, q0, q11
+	veor	q1, q1, q11
+	vshl.u64	q11, q11, #1
+	veor	q2, q2, q10
+	veor	q0, q0, q11
 	vmov.i8	q8,#0x0f			@ compose .LBS2
 	vshr.u64	q10, q5, #2
-	 vshr.u64	q11, q4, #2
-	veor		q10, q10, q7
-	 veor		q11, q11, q6
-	vand		q10, q10, q9
-	 vand		q11, q11, q9
-	veor		q7, q7, q10
+	vshr.u64	q11, q4, #2
+	veor	q10, q10, q7
+	veor	q11, q11, q6
+	vand	q10, q10, q9
+	vand	q11, q11, q9
+	veor	q7, q7, q10
 	vshl.u64	q10, q10, #2
-	 veor		q6, q6, q11
-	 vshl.u64	q11, q11, #2
-	veor		q5, q5, q10
-	 veor		q4, q4, q11
+	veor	q6, q6, q11
+	vshl.u64	q11, q11, #2
+	veor	q5, q5, q10
+	veor	q4, q4, q11
 	vshr.u64	q10, q1, #2
-	 vshr.u64	q11, q0, #2
-	veor		q10, q10, q3
-	 veor		q11, q11, q2
-	vand		q10, q10, q9
-	 vand		q11, q11, q9
-	veor		q3, q3, q10
+	vshr.u64	q11, q0, #2
+	veor	q10, q10, q3
+	veor	q11, q11, q2
+	vand	q10, q10, q9
+	vand	q11, q11, q9
+	veor	q3, q3, q10
 	vshl.u64	q10, q10, #2
-	 veor		q2, q2, q11
-	 vshl.u64	q11, q11, #2
-	veor		q1, q1, q10
-	 veor		q0, q0, q11
+	veor	q2, q2, q11
+	vshl.u64	q11, q11, #2
+	veor	q1, q1, q10
+	veor	q0, q0, q11
 	vshr.u64	q10, q3, #4
-	 vshr.u64	q11, q2, #4
-	veor		q10, q10, q7
-	 veor		q11, q11, q6
-	vand		q10, q10, q8
-	 vand		q11, q11, q8
-	veor		q7, q7, q10
+	vshr.u64	q11, q2, #4
+	veor	q10, q10, q7
+	veor	q11, q11, q6
+	vand	q10, q10, q8
+	vand	q11, q11, q8
+	veor	q7, q7, q10
 	vshl.u64	q10, q10, #4
-	 veor		q6, q6, q11
-	 vshl.u64	q11, q11, #4
-	veor		q3, q3, q10
-	 veor		q2, q2, q11
+	veor	q6, q6, q11
+	vshl.u64	q11, q11, #4
+	veor	q3, q3, q10
+	veor	q2, q2, q11
 	vshr.u64	q10, q1, #4
-	 vshr.u64	q11, q0, #4
-	veor		q10, q10, q5
-	 veor		q11, q11, q4
-	vand		q10, q10, q8
-	 vand		q11, q11, q8
-	veor		q5, q5, q10
+	vshr.u64	q11, q0, #4
+	veor	q10, q10, q5
+	veor	q11, q11, q4
+	vand	q10, q10, q8
+	vand	q11, q11, q8
+	veor	q5, q5, q10
 	vshl.u64	q10, q10, #4
-	 veor		q4, q4, q11
-	 vshl.u64	q11, q11, #4
-	veor		q1, q1, q10
-	 veor		q0, q0, q11
+	veor	q4, q4, q11
+	vshl.u64	q11, q11, #4
+	veor	q1, q1, q10
+	veor	q0, q0, q11
 	sub	r5,r5,#1
 	b	.Lenc_sbox
 .align	4
 .Lenc_loop:
-	vldmia	r4!, {q8-q11}
+	vldmia	r4!, {q8,q9,q10,q11}
 	veor	q8, q8, q0
 	veor	q9, q9, q1
 	vtbl.8	d0, {q8}, d24
@@ -725,7 +736,7 @@
 	veor	q10, q1, q2
 	veor	q9, q5, q3
 	veor	q13, q2, q4
-	 vmov	q8, q10
+	vmov	q8, q10
 	veor	q12, q6, q0
 
 	vorr	q10, q10, q9
@@ -782,7 +793,7 @@
 	veor	q14, q14, q11
 	veor	q12, q6, q0
 	veor	q8, q5, q3
-	veor 	q10, q15, q14
+	veor	q10, q15, q14
 	vand	q10, q10, q6
 	veor	q6, q6, q5
 	vand	q11, q5, q15
@@ -792,19 +803,19 @@
 	veor	q15, q15, q13
 	veor	q14, q14, q9
 	veor	q11, q15, q14
-	 veor 	q10, q13, q9
+	veor	q10, q13, q9
 	vand	q11, q11, q12
-	 vand	q10, q10, q0
+	vand	q10, q10, q0
 	veor	q12, q12, q8
-	 veor	q0, q0, q3
+	veor	q0, q0, q3
 	vand	q8, q8, q15
-	 vand	q3, q3, q13
+	vand	q3, q3, q13
 	vand	q12, q12, q14
-	 vand	q0, q0, q9
+	vand	q0, q0, q9
 	veor	q8, q8, q12
-	 veor	q0, q0, q3
+	veor	q0, q0, q3
 	veor	q12, q12, q11
-	 veor	q3, q3, q10
+	veor	q3, q3, q10
 	veor	q6, q6, q12
 	veor	q0, q0, q12
 	veor	q5, q5, q8
@@ -813,22 +824,22 @@
 	veor	q12, q7, q4
 	veor	q8, q1, q2
 	veor	q11, q15, q14
-	 veor 	q10, q13, q9
+	veor	q10, q13, q9
 	vand	q11, q11, q12
-	 vand	q10, q10, q4
+	vand	q10, q10, q4
 	veor	q12, q12, q8
-	 veor	q4, q4, q2
+	veor	q4, q4, q2
 	vand	q8, q8, q15
-	 vand	q2, q2, q13
+	vand	q2, q2, q13
 	vand	q12, q12, q14
-	 vand	q4, q4, q9
+	vand	q4, q4, q9
 	veor	q8, q8, q12
-	 veor	q4, q4, q2
+	veor	q4, q4, q2
 	veor	q12, q12, q11
-	 veor	q2, q2, q10
+	veor	q2, q2, q10
 	veor	q15, q15, q13
 	veor	q14, q14, q9
-	veor 	q10, q15, q14
+	veor	q10, q15, q14
 	vand	q10, q10, q7
 	veor	q7, q7, q1
 	vand	q11, q1, q15
@@ -856,42 +867,42 @@
 	bcc	.Lenc_done
 	vext.8	q8, q0, q0, #12	@ x0 <<< 32
 	vext.8	q9, q1, q1, #12
-	 veor	q0, q0, q8		@ x0 ^ (x0 <<< 32)
+	veor	q0, q0, q8		@ x0 ^ (x0 <<< 32)
 	vext.8	q10, q4, q4, #12
-	 veor	q1, q1, q9
+	veor	q1, q1, q9
 	vext.8	q11, q6, q6, #12
-	 veor	q4, q4, q10
+	veor	q4, q4, q10
 	vext.8	q12, q3, q3, #12
-	 veor	q6, q6, q11
+	veor	q6, q6, q11
 	vext.8	q13, q7, q7, #12
-	 veor	q3, q3, q12
+	veor	q3, q3, q12
 	vext.8	q14, q2, q2, #12
-	 veor	q7, q7, q13
+	veor	q7, q7, q13
 	vext.8	q15, q5, q5, #12
-	 veor	q2, q2, q14
+	veor	q2, q2, q14
 
 	veor	q9, q9, q0
-	 veor	q5, q5, q15
-	 vext.8	q0, q0, q0, #8		@ (x0 ^ (x0 <<< 32)) <<< 64)
+	veor	q5, q5, q15
+	vext.8	q0, q0, q0, #8		@ (x0 ^ (x0 <<< 32)) <<< 64)
 	veor	q10, q10, q1
 	veor	q8, q8, q5
 	veor	q9, q9, q5
-	 vext.8	q1, q1, q1, #8
+	vext.8	q1, q1, q1, #8
 	veor	q13, q13, q3
-	 veor	q0, q0, q8
+	veor	q0, q0, q8
 	veor	q14, q14, q7
-	 veor	q1, q1, q9
-	 vext.8	q8, q3, q3, #8
+	veor	q1, q1, q9
+	vext.8	q8, q3, q3, #8
 	veor	q12, q12, q6
-	 vext.8	q9, q7, q7, #8
+	vext.8	q9, q7, q7, #8
 	veor	q15, q15, q2
-	 vext.8	q3, q6, q6, #8
+	vext.8	q3, q6, q6, #8
 	veor	q11, q11, q4
-	 vext.8	q7, q5, q5, #8
+	vext.8	q7, q5, q5, #8
 	veor	q12, q12, q5
-	 vext.8	q6, q2, q2, #8
+	vext.8	q6, q2, q2, #8
 	veor	q11, q11, q5
-	 vext.8	q2, q4, q4, #8
+	vext.8	q2, q4, q4, #8
 	veor	q5, q9, q13
 	veor	q4, q8, q12
 	veor	q3, q3, q11
@@ -911,78 +922,78 @@
 	vmov.i8	q8,#0x55			@ compose .LBS0
 	vmov.i8	q9,#0x33			@ compose .LBS1
 	vshr.u64	q10, q2, #1
-	 vshr.u64	q11, q3, #1
-	veor		q10, q10, q5
-	 veor		q11, q11, q7
-	vand		q10, q10, q8
-	 vand		q11, q11, q8
-	veor		q5, q5, q10
+	vshr.u64	q11, q3, #1
+	veor	q10, q10, q5
+	veor	q11, q11, q7
+	vand	q10, q10, q8
+	vand	q11, q11, q8
+	veor	q5, q5, q10
 	vshl.u64	q10, q10, #1
-	 veor		q7, q7, q11
-	 vshl.u64	q11, q11, #1
-	veor		q2, q2, q10
-	 veor		q3, q3, q11
+	veor	q7, q7, q11
+	vshl.u64	q11, q11, #1
+	veor	q2, q2, q10
+	veor	q3, q3, q11
 	vshr.u64	q10, q4, #1
-	 vshr.u64	q11, q0, #1
-	veor		q10, q10, q6
-	 veor		q11, q11, q1
-	vand		q10, q10, q8
-	 vand		q11, q11, q8
-	veor		q6, q6, q10
+	vshr.u64	q11, q0, #1
+	veor	q10, q10, q6
+	veor	q11, q11, q1
+	vand	q10, q10, q8
+	vand	q11, q11, q8
+	veor	q6, q6, q10
 	vshl.u64	q10, q10, #1
-	 veor		q1, q1, q11
-	 vshl.u64	q11, q11, #1
-	veor		q4, q4, q10
-	 veor		q0, q0, q11
+	veor	q1, q1, q11
+	vshl.u64	q11, q11, #1
+	veor	q4, q4, q10
+	veor	q0, q0, q11
 	vmov.i8	q8,#0x0f			@ compose .LBS2
 	vshr.u64	q10, q7, #2
-	 vshr.u64	q11, q3, #2
-	veor		q10, q10, q5
-	 veor		q11, q11, q2
-	vand		q10, q10, q9
-	 vand		q11, q11, q9
-	veor		q5, q5, q10
+	vshr.u64	q11, q3, #2
+	veor	q10, q10, q5
+	veor	q11, q11, q2
+	vand	q10, q10, q9
+	vand	q11, q11, q9
+	veor	q5, q5, q10
 	vshl.u64	q10, q10, #2
-	 veor		q2, q2, q11
-	 vshl.u64	q11, q11, #2
-	veor		q7, q7, q10
-	 veor		q3, q3, q11
+	veor	q2, q2, q11
+	vshl.u64	q11, q11, #2
+	veor	q7, q7, q10
+	veor	q3, q3, q11
 	vshr.u64	q10, q1, #2
-	 vshr.u64	q11, q0, #2
-	veor		q10, q10, q6
-	 veor		q11, q11, q4
-	vand		q10, q10, q9
-	 vand		q11, q11, q9
-	veor		q6, q6, q10
+	vshr.u64	q11, q0, #2
+	veor	q10, q10, q6
+	veor	q11, q11, q4
+	vand	q10, q10, q9
+	vand	q11, q11, q9
+	veor	q6, q6, q10
 	vshl.u64	q10, q10, #2
-	 veor		q4, q4, q11
-	 vshl.u64	q11, q11, #2
-	veor		q1, q1, q10
-	 veor		q0, q0, q11
+	veor	q4, q4, q11
+	vshl.u64	q11, q11, #2
+	veor	q1, q1, q10
+	veor	q0, q0, q11
 	vshr.u64	q10, q6, #4
-	 vshr.u64	q11, q4, #4
-	veor		q10, q10, q5
-	 veor		q11, q11, q2
-	vand		q10, q10, q8
-	 vand		q11, q11, q8
-	veor		q5, q5, q10
+	vshr.u64	q11, q4, #4
+	veor	q10, q10, q5
+	veor	q11, q11, q2
+	vand	q10, q10, q8
+	vand	q11, q11, q8
+	veor	q5, q5, q10
 	vshl.u64	q10, q10, #4
-	 veor		q2, q2, q11
-	 vshl.u64	q11, q11, #4
-	veor		q6, q6, q10
-	 veor		q4, q4, q11
+	veor	q2, q2, q11
+	vshl.u64	q11, q11, #4
+	veor	q6, q6, q10
+	veor	q4, q4, q11
 	vshr.u64	q10, q1, #4
-	 vshr.u64	q11, q0, #4
-	veor		q10, q10, q7
-	 veor		q11, q11, q3
-	vand		q10, q10, q8
-	 vand		q11, q11, q8
-	veor		q7, q7, q10
+	vshr.u64	q11, q0, #4
+	veor	q10, q10, q7
+	veor	q11, q11, q3
+	vand	q10, q10, q8
+	vand	q11, q11, q8
+	veor	q7, q7, q10
 	vshl.u64	q10, q10, #4
-	 veor		q3, q3, q11
-	 vshl.u64	q11, q11, #4
-	veor		q1, q1, q10
-	 veor		q0, q0, q11
+	veor	q3, q3, q11
+	vshl.u64	q11, q11, #4
+	veor	q1, q1, q10
+	veor	q0, q0, q11
 	vldmia	r4, {q8}			@ last round key
 	veor	q4, q4, q8
 	veor	q6, q6, q8
@@ -999,7 +1010,11 @@
 _bsaes_key_convert:
 	adr	r6,_bsaes_key_convert
 	vld1.8	{q7},  [r4]!		@ load round 0 key
+#ifdef	__APPLE__
+	adr	r6,.LM0
+#else
 	sub	r6,r6,#_bsaes_key_convert-.LM0
+#endif
 	vld1.8	{q15}, [r4]!		@ load round 1 key
 
 	vmov.i8	q8,  #0x01			@ bit masks
@@ -1042,17 +1057,17 @@
 	vrev32.8	q15, q15
 #endif
 	subs	r5,r5,#1
-	vstmia	r12!,{q0-q7}		@ write bit-sliced round key
+	vstmia	r12!,{q0,q1,q2,q3,q4,q5,q6,q7}		@ write bit-sliced round key
 	bne	.Lkey_loop
 
 	vmov.i8	q7,#0x63			@ compose .L63
 	@ don't save last round key
 	bx	lr
 .size	_bsaes_key_convert,.-_bsaes_key_convert
-.extern AES_cbc_encrypt
-.extern AES_decrypt
 
-.global	bsaes_cbc_encrypt
+
+
+.globl	bsaes_cbc_encrypt
 .hidden	bsaes_cbc_encrypt
 .type	bsaes_cbc_encrypt,%function
 .align	5
@@ -1071,7 +1086,7 @@
 	@ it is up to the caller to make sure we are called with enc == 0
 
 	mov	ip, sp
-	stmdb	sp!, {r4-r10, lr}
+	stmdb	sp!, {r4,r5,r6,r7,r8,r9,r10, lr}
 	VFP_ABI_PUSH
 	ldr	r8, [ip]			@ IV is 1st arg on the stack
 	mov	r2, r2, lsr#4		@ len in 16 byte blocks
@@ -1111,7 +1126,7 @@
 	vstmia	r4, {q7}
 
 .align	2
-0:
+
 #endif
 
 	vld1.8	{q15}, [r8]		@ load IV
@@ -1122,33 +1137,33 @@
 	subs	r2, r2, #0x8
 	bmi	.Lcbc_dec_loop_finish
 
-	vld1.8	{q0-q1}, [r0]!	@ load input
-	vld1.8	{q2-q3}, [r0]!
+	vld1.8	{q0,q1}, [r0]!	@ load input
+	vld1.8	{q2,q3}, [r0]!
 #ifndef	BSAES_ASM_EXTENDED_KEY
 	mov	r4, sp			@ pass the key
 #else
 	add	r4, r3, #248
 #endif
-	vld1.8	{q4-q5}, [r0]!
+	vld1.8	{q4,q5}, [r0]!
 	mov	r5, r10
-	vld1.8	{q6-q7}, [r0]
+	vld1.8	{q6,q7}, [r0]
 	sub	r0, r0, #0x60
 	vstmia	r9, {q15}			@ put aside IV
 
 	bl	_bsaes_decrypt8
 
 	vldmia	r9, {q14}			@ reload IV
-	vld1.8	{q8-q9}, [r0]!	@ reload input
+	vld1.8	{q8,q9}, [r0]!	@ reload input
 	veor	q0, q0, q14	@ ^= IV
-	vld1.8	{q10-q11}, [r0]!
+	vld1.8	{q10,q11}, [r0]!
 	veor	q1, q1, q8
 	veor	q6, q6, q9
-	vld1.8	{q12-q13}, [r0]!
+	vld1.8	{q12,q13}, [r0]!
 	veor	q4, q4, q10
 	veor	q2, q2, q11
-	vld1.8	{q14-q15}, [r0]!
+	vld1.8	{q14,q15}, [r0]!
 	veor	q7, q7, q12
-	vst1.8	{q0-q1}, [r1]!	@ write output
+	vst1.8	{q0,q1}, [r1]!	@ write output
 	veor	q3, q3, q13
 	vst1.8	{q6}, [r1]!
 	veor	q5, q5, q14
@@ -1192,17 +1207,17 @@
 	bl	_bsaes_decrypt8
 
 	vldmia	r9, {q14}			@ reload IV
-	vld1.8	{q8-q9}, [r0]!	@ reload input
+	vld1.8	{q8,q9}, [r0]!	@ reload input
 	veor	q0, q0, q14	@ ^= IV
-	vld1.8	{q10-q11}, [r0]!
+	vld1.8	{q10,q11}, [r0]!
 	veor	q1, q1, q8
 	veor	q6, q6, q9
-	vld1.8	{q12-q13}, [r0]!
+	vld1.8	{q12,q13}, [r0]!
 	veor	q4, q4, q10
 	veor	q2, q2, q11
 	vld1.8	{q15}, [r0]!
 	veor	q7, q7, q12
-	vst1.8	{q0-q1}, [r1]!	@ write output
+	vst1.8	{q0,q1}, [r1]!	@ write output
 	veor	q3, q3, q13
 	vst1.8	{q6}, [r1]!
 	vst1.8	{q4}, [r1]!
@@ -1215,9 +1230,9 @@
 	sub	r0, r0, #0x60
 	bl	_bsaes_decrypt8
 	vldmia	r9,{q14}			@ reload IV
-	vld1.8	{q8-q9}, [r0]!	@ reload input
+	vld1.8	{q8,q9}, [r0]!	@ reload input
 	veor	q0, q0, q14	@ ^= IV
-	vld1.8	{q10-q11}, [r0]!
+	vld1.8	{q10,q11}, [r0]!
 	veor	q1, q1, q8
 	veor	q6, q6, q9
 	vld1.8	{q12}, [r0]!
@@ -1225,7 +1240,7 @@
 	veor	q2, q2, q11
 	vld1.8	{q15}, [r0]!
 	veor	q7, q7, q12
-	vst1.8	{q0-q1}, [r1]!	@ write output
+	vst1.8	{q0,q1}, [r1]!	@ write output
 	vst1.8	{q6}, [r1]!
 	vst1.8	{q4}, [r1]!
 	vst1.8	{q2}, [r1]!
@@ -1236,14 +1251,14 @@
 	sub	r0, r0, #0x50
 	bl	_bsaes_decrypt8
 	vldmia	r9, {q14}			@ reload IV
-	vld1.8	{q8-q9}, [r0]!	@ reload input
+	vld1.8	{q8,q9}, [r0]!	@ reload input
 	veor	q0, q0, q14	@ ^= IV
-	vld1.8	{q10-q11}, [r0]!
+	vld1.8	{q10,q11}, [r0]!
 	veor	q1, q1, q8
 	veor	q6, q6, q9
 	vld1.8	{q15}, [r0]!
 	veor	q4, q4, q10
-	vst1.8	{q0-q1}, [r1]!	@ write output
+	vst1.8	{q0,q1}, [r1]!	@ write output
 	veor	q2, q2, q11
 	vst1.8	{q6}, [r1]!
 	vst1.8	{q4}, [r1]!
@@ -1254,14 +1269,14 @@
 	sub	r0, r0, #0x40
 	bl	_bsaes_decrypt8
 	vldmia	r9, {q14}			@ reload IV
-	vld1.8	{q8-q9}, [r0]!	@ reload input
+	vld1.8	{q8,q9}, [r0]!	@ reload input
 	veor	q0, q0, q14	@ ^= IV
 	vld1.8	{q10}, [r0]!
 	veor	q1, q1, q8
 	veor	q6, q6, q9
 	vld1.8	{q15}, [r0]!
 	veor	q4, q4, q10
-	vst1.8	{q0-q1}, [r1]!	@ write output
+	vst1.8	{q0,q1}, [r1]!	@ write output
 	vst1.8	{q6}, [r1]!
 	vst1.8	{q4}, [r1]!
 	b	.Lcbc_dec_done
@@ -1270,12 +1285,12 @@
 	sub	r0, r0, #0x30
 	bl	_bsaes_decrypt8
 	vldmia	r9, {q14}			@ reload IV
-	vld1.8	{q8-q9}, [r0]!	@ reload input
+	vld1.8	{q8,q9}, [r0]!	@ reload input
 	veor	q0, q0, q14	@ ^= IV
 	vld1.8	{q15}, [r0]!
 	veor	q1, q1, q8
 	veor	q6, q6, q9
-	vst1.8	{q0-q1}, [r1]!	@ write output
+	vst1.8	{q0,q1}, [r1]!	@ write output
 	vst1.8	{q6}, [r1]!
 	b	.Lcbc_dec_done
 .align	4
@@ -1287,7 +1302,7 @@
 	veor	q0, q0, q14	@ ^= IV
 	vld1.8	{q15}, [r0]!		@ reload input
 	veor	q1, q1, q8
-	vst1.8	{q0-q1}, [r1]!	@ write output
+	vst1.8	{q0,q1}, [r1]!	@ write output
 	b	.Lcbc_dec_done
 .align	4
 .Lcbc_dec_one:
@@ -1307,20 +1322,20 @@
 #ifndef	BSAES_ASM_EXTENDED_KEY
 	vmov.i32	q0, #0
 	vmov.i32	q1, #0
-.Lcbc_dec_bzero:				@ wipe key schedule [if any]
-	vstmia		sp!, {q0-q1}
-	cmp		sp, r9
-	bne		.Lcbc_dec_bzero
+.Lcbc_dec_bzero:@ wipe key schedule [if any]
+	vstmia	sp!, {q0,q1}
+	cmp	sp, r9
+	bne	.Lcbc_dec_bzero
 #endif
 
 	mov	sp, r9
 	add	sp, #0x10			@ add sp,r9,#0x10 is no good for thumb
 	vst1.8	{q15}, [r8]		@ return IV
 	VFP_ABI_POP
-	ldmia	sp!, {r4-r10, pc}
+	ldmia	sp!, {r4,r5,r6,r7,r8,r9,r10, pc}
 .size	bsaes_cbc_encrypt,.-bsaes_cbc_encrypt
-.extern	AES_encrypt
-.global	bsaes_ctr32_encrypt_blocks
+
+.globl	bsaes_ctr32_encrypt_blocks
 .hidden	bsaes_ctr32_encrypt_blocks
 .type	bsaes_ctr32_encrypt_blocks,%function
 .align	5
@@ -1329,7 +1344,7 @@
 	blo	.Lctr_enc_short			@ small sizes
 
 	mov	ip, sp
-	stmdb	sp!, {r4-r10, lr}
+	stmdb	sp!, {r4,r5,r6,r7,r8,r9,r10, lr}
 	VFP_ABI_PUSH
 	ldr	r8, [ip]			@ ctr is 1st arg on the stack
 	sub	sp, sp, #0x10			@ scratch space to carry over the ctr
@@ -1350,7 +1365,12 @@
 	vstmia	r12, {q7}			@ save last round key
 
 	vld1.8	{q0}, [r8]		@ load counter
+#ifdef	__APPLE__
+	mov	r8, #.LREVM0SR-.LM0
+	add	r8, r6, r8
+#else
 	add	r8, r6, #.LREVM0SR-.LM0	@ borrow r8
+#endif
 	vldmia	sp, {q4}		@ load round0 key
 #else
 	ldr	r12, [r3, #244]
@@ -1367,7 +1387,7 @@
 	vstmia	r12, {q7}			@ save last round key
 
 .align	2
-0:	add	r12, r3, #248
+	add	r12, r3, #248
 	vld1.8	{q0}, [r8]		@ load counter
 	adrl	r8, .LREVM0SR			@ borrow r8
 	vldmia	r12, {q4}			@ load round0 key
@@ -1375,9 +1395,9 @@
 #endif
 
 	vmov.i32	q8,#1		@ compose 1<<96
-	veor		q9,q9,q9
+	veor	q9,q9,q9
 	vrev32.8	q0,q0
-	vext.8		q8,q9,q8,#4
+	vext.8	q8,q9,q8,#4
 	vrev32.8	q4,q4
 	vadd.u32	q9,q8,q8	@ compose 2<<96
 	vstmia	sp, {q4}		@ save adjusted round0 key
@@ -1398,117 +1418,122 @@
 	@ Borrow prologue from _bsaes_encrypt8 to use the opportunity
 	@ to flip byte order in 32-bit counter
 
-	vldmia		sp, {q9}		@ load round0 key
+	vldmia	sp, {q9}		@ load round0 key
 #ifndef	BSAES_ASM_EXTENDED_KEY
-	add		r4, sp, #0x10		@ pass next round key
+	add	r4, sp, #0x10		@ pass next round key
 #else
-	add		r4, r3, #264
+	add	r4, r3, #264
 #endif
-	vldmia		r8, {q8}			@ .LREVM0SR
-	mov		r5, r10			@ pass rounds
-	vstmia		r9, {q10}			@ save next counter
-	sub		r6, r8, #.LREVM0SR-.LSR	@ pass constants
+	vldmia	r8, {q8}			@ .LREVM0SR
+	mov	r5, r10			@ pass rounds
+	vstmia	r9, {q10}			@ save next counter
+#ifdef	__APPLE__
+	mov	r6, #.LREVM0SR-.LSR
+	sub	r6, r8, r6
+#else
+	sub	r6, r8, #.LREVM0SR-.LSR	@ pass constants
+#endif
 
-	bl		_bsaes_encrypt8_alt
+	bl	_bsaes_encrypt8_alt
 
-	subs		r2, r2, #8
-	blo		.Lctr_enc_loop_done
+	subs	r2, r2, #8
+	blo	.Lctr_enc_loop_done
 
-	vld1.8		{q8-q9}, [r0]!	@ load input
-	vld1.8		{q10-q11}, [r0]!
-	veor		q0, q8
-	veor		q1, q9
-	vld1.8		{q12-q13}, [r0]!
-	veor		q4, q10
-	veor		q6, q11
-	vld1.8		{q14-q15}, [r0]!
-	veor		q3, q12
-	vst1.8		{q0-q1}, [r1]!	@ write output
-	veor		q7, q13
-	veor		q2, q14
-	vst1.8		{q4}, [r1]!
-	veor		q5, q15
-	vst1.8		{q6}, [r1]!
+	vld1.8	{q8,q9}, [r0]!	@ load input
+	vld1.8	{q10,q11}, [r0]!
+	veor	q0, q8
+	veor	q1, q9
+	vld1.8	{q12,q13}, [r0]!
+	veor	q4, q10
+	veor	q6, q11
+	vld1.8	{q14,q15}, [r0]!
+	veor	q3, q12
+	vst1.8	{q0,q1}, [r1]!	@ write output
+	veor	q7, q13
+	veor	q2, q14
+	vst1.8	{q4}, [r1]!
+	veor	q5, q15
+	vst1.8	{q6}, [r1]!
 	vmov.i32	q8, #1			@ compose 1<<96
-	vst1.8		{q3}, [r1]!
-	veor		q9, q9, q9
-	vst1.8		{q7}, [r1]!
-	vext.8		q8, q9, q8, #4
-	vst1.8		{q2}, [r1]!
+	vst1.8	{q3}, [r1]!
+	veor	q9, q9, q9
+	vst1.8	{q7}, [r1]!
+	vext.8	q8, q9, q8, #4
+	vst1.8	{q2}, [r1]!
 	vadd.u32	q9,q8,q8		@ compose 2<<96
-	vst1.8		{q5}, [r1]!
-	vldmia		r9, {q0}			@ load counter
+	vst1.8	{q5}, [r1]!
+	vldmia	r9, {q0}			@ load counter
 
-	bne		.Lctr_enc_loop
-	b		.Lctr_enc_done
+	bne	.Lctr_enc_loop
+	b	.Lctr_enc_done
 
 .align	4
 .Lctr_enc_loop_done:
-	add		r2, r2, #8
-	vld1.8		{q8}, [r0]!	@ load input
-	veor		q0, q8
-	vst1.8		{q0}, [r1]!	@ write output
-	cmp		r2, #2
-	blo		.Lctr_enc_done
-	vld1.8		{q9}, [r0]!
-	veor		q1, q9
-	vst1.8		{q1}, [r1]!
-	beq		.Lctr_enc_done
-	vld1.8		{q10}, [r0]!
-	veor		q4, q10
-	vst1.8		{q4}, [r1]!
-	cmp		r2, #4
-	blo		.Lctr_enc_done
-	vld1.8		{q11}, [r0]!
-	veor		q6, q11
-	vst1.8		{q6}, [r1]!
-	beq		.Lctr_enc_done
-	vld1.8		{q12}, [r0]!
-	veor		q3, q12
-	vst1.8		{q3}, [r1]!
-	cmp		r2, #6
-	blo		.Lctr_enc_done
-	vld1.8		{q13}, [r0]!
-	veor		q7, q13
-	vst1.8		{q7}, [r1]!
-	beq		.Lctr_enc_done
-	vld1.8		{q14}, [r0]
-	veor		q2, q14
-	vst1.8		{q2}, [r1]!
+	add	r2, r2, #8
+	vld1.8	{q8}, [r0]!	@ load input
+	veor	q0, q8
+	vst1.8	{q0}, [r1]!	@ write output
+	cmp	r2, #2
+	blo	.Lctr_enc_done
+	vld1.8	{q9}, [r0]!
+	veor	q1, q9
+	vst1.8	{q1}, [r1]!
+	beq	.Lctr_enc_done
+	vld1.8	{q10}, [r0]!
+	veor	q4, q10
+	vst1.8	{q4}, [r1]!
+	cmp	r2, #4
+	blo	.Lctr_enc_done
+	vld1.8	{q11}, [r0]!
+	veor	q6, q11
+	vst1.8	{q6}, [r1]!
+	beq	.Lctr_enc_done
+	vld1.8	{q12}, [r0]!
+	veor	q3, q12
+	vst1.8	{q3}, [r1]!
+	cmp	r2, #6
+	blo	.Lctr_enc_done
+	vld1.8	{q13}, [r0]!
+	veor	q7, q13
+	vst1.8	{q7}, [r1]!
+	beq	.Lctr_enc_done
+	vld1.8	{q14}, [r0]
+	veor	q2, q14
+	vst1.8	{q2}, [r1]!
 
 .Lctr_enc_done:
 	vmov.i32	q0, #0
 	vmov.i32	q1, #0
 #ifndef	BSAES_ASM_EXTENDED_KEY
-.Lctr_enc_bzero:			@ wipe key schedule [if any]
-	vstmia		sp!, {q0-q1}
-	cmp		sp, r9
-	bne		.Lctr_enc_bzero
+.Lctr_enc_bzero:@ wipe key schedule [if any]
+	vstmia	sp!, {q0,q1}
+	cmp	sp, r9
+	bne	.Lctr_enc_bzero
 #else
-	vstmia		sp, {q0-q1}
+	vstmia	sp, {q0,q1}
 #endif
 
 	mov	sp, r9
 	add	sp, #0x10		@ add sp,r9,#0x10 is no good for thumb
 	VFP_ABI_POP
-	ldmia	sp!, {r4-r10, pc}	@ return
+	ldmia	sp!, {r4,r5,r6,r7,r8,r9,r10, pc}	@ return
 
 .align	4
 .Lctr_enc_short:
 	ldr	ip, [sp]		@ ctr pointer is passed on stack
-	stmdb	sp!, {r4-r8, lr}
+	stmdb	sp!, {r4,r5,r6,r7,r8, lr}
 
 	mov	r4, r0		@ copy arguments
 	mov	r5, r1
 	mov	r6, r2
 	mov	r7, r3
-	ldr	r8, [ip, #12]		@ load counter LSW
+	ldr	r8, [ip, #12]		@ load counter .LSW
 	vld1.8	{q1}, [ip]		@ load whole counter value
 #ifdef __ARMEL__
 	rev	r8, r8
 #endif
 	sub	sp, sp, #0x10
-	vst1.8	{q1}, [sp,:64]	@ copy counter value
+	vst1.8	{q1}, [sp]		@ copy counter value
 	sub	sp, sp, #0x10
 
 .Lctr_enc_short_loop:
@@ -1519,7 +1544,7 @@
 	bl	AES_encrypt
 
 	vld1.8	{q0}, [r4]!	@ load input
-	vld1.8	{q1}, [sp,:64]	@ load encrypted counter
+	vld1.8	{q1}, [sp]		@ load encrypted counter
 	add	r8, r8, #1
 #ifdef __ARMEL__
 	rev	r0, r8
@@ -1534,9 +1559,9 @@
 
 	vmov.i32	q0, #0
 	vmov.i32	q1, #0
-	vstmia		sp!, {q0-q1}
+	vstmia	sp!, {q0,q1}
 
-	ldmia	sp!, {r4-r8, pc}
+	ldmia	sp!, {r4,r5,r6,r7,r8, pc}
 .size	bsaes_ctr32_encrypt_blocks,.-bsaes_ctr32_encrypt_blocks
 .globl	bsaes_xts_encrypt
 .hidden	bsaes_xts_encrypt
@@ -1544,7 +1569,7 @@
 .align	4
 bsaes_xts_encrypt:
 	mov	ip, sp
-	stmdb	sp!, {r4-r10, lr}		@ 0x20
+	stmdb	sp!, {r4,r5,r6,r7,r8,r9,r10, lr}		@ 0x20
 	VFP_ABI_PUSH
 	mov	r6, sp				@ future r3
 
@@ -1598,7 +1623,7 @@
 	vstmia	r12, {q7}
 
 .align	2
-0:	sub	sp, #0x90			@ place for tweak[9]
+	sub	sp, #0x90			@ place for tweak[9]
 #endif
 
 	vld1.8	{q8}, [r0]			@ initial tweak
@@ -1610,422 +1635,422 @@
 
 .align	4
 .Lxts_enc_loop:
-	vldmia		r2, {q5}	@ load XTS magic
+	vldmia	r2, {q5}	@ load XTS magic
 	vshr.s64	q6, q8, #63
-	mov		r0, sp
-	vand		q6, q6, q5
+	mov	r0, sp
+	vand	q6, q6, q5
 	vadd.u64	q9, q8, q8
-	vst1.64		{q8}, [r0,:128]!
-	vswp		d13,d12
+	vst1.64	{q8}, [r0,:128]!
+	vswp	d13,d12
 	vshr.s64	q7, q9, #63
-	veor		q9, q9, q6
-	vand		q7, q7, q5
+	veor	q9, q9, q6
+	vand	q7, q7, q5
 	vadd.u64	q10, q9, q9
-	vst1.64		{q9}, [r0,:128]!
-	vswp		d15,d14
+	vst1.64	{q9}, [r0,:128]!
+	vswp	d15,d14
 	vshr.s64	q6, q10, #63
-	veor		q10, q10, q7
-	vand		q6, q6, q5
-	vld1.8		{q0}, [r7]!
+	veor	q10, q10, q7
+	vand	q6, q6, q5
+	vld1.8	{q0}, [r7]!
 	vadd.u64	q11, q10, q10
-	vst1.64		{q10}, [r0,:128]!
-	vswp		d13,d12
+	vst1.64	{q10}, [r0,:128]!
+	vswp	d13,d12
 	vshr.s64	q7, q11, #63
-	veor		q11, q11, q6
-	vand		q7, q7, q5
-	vld1.8		{q1}, [r7]!
-	veor		q0, q0, q8
+	veor	q11, q11, q6
+	vand	q7, q7, q5
+	vld1.8	{q1}, [r7]!
+	veor	q0, q0, q8
 	vadd.u64	q12, q11, q11
-	vst1.64		{q11}, [r0,:128]!
-	vswp		d15,d14
+	vst1.64	{q11}, [r0,:128]!
+	vswp	d15,d14
 	vshr.s64	q6, q12, #63
-	veor		q12, q12, q7
-	vand		q6, q6, q5
-	vld1.8		{q2}, [r7]!
-	veor		q1, q1, q9
+	veor	q12, q12, q7
+	vand	q6, q6, q5
+	vld1.8	{q2}, [r7]!
+	veor	q1, q1, q9
 	vadd.u64	q13, q12, q12
-	vst1.64		{q12}, [r0,:128]!
-	vswp		d13,d12
+	vst1.64	{q12}, [r0,:128]!
+	vswp	d13,d12
 	vshr.s64	q7, q13, #63
-	veor		q13, q13, q6
-	vand		q7, q7, q5
-	vld1.8		{q3}, [r7]!
-	veor		q2, q2, q10
+	veor	q13, q13, q6
+	vand	q7, q7, q5
+	vld1.8	{q3}, [r7]!
+	veor	q2, q2, q10
 	vadd.u64	q14, q13, q13
-	vst1.64		{q13}, [r0,:128]!
-	vswp		d15,d14
+	vst1.64	{q13}, [r0,:128]!
+	vswp	d15,d14
 	vshr.s64	q6, q14, #63
-	veor		q14, q14, q7
-	vand		q6, q6, q5
-	vld1.8		{q4}, [r7]!
-	veor		q3, q3, q11
+	veor	q14, q14, q7
+	vand	q6, q6, q5
+	vld1.8	{q4}, [r7]!
+	veor	q3, q3, q11
 	vadd.u64	q15, q14, q14
-	vst1.64		{q14}, [r0,:128]!
-	vswp		d13,d12
+	vst1.64	{q14}, [r0,:128]!
+	vswp	d13,d12
 	vshr.s64	q7, q15, #63
-	veor		q15, q15, q6
-	vand		q7, q7, q5
-	vld1.8		{q5}, [r7]!
-	veor		q4, q4, q12
+	veor	q15, q15, q6
+	vand	q7, q7, q5
+	vld1.8	{q5}, [r7]!
+	veor	q4, q4, q12
 	vadd.u64	q8, q15, q15
-	vst1.64		{q15}, [r0,:128]!
-	vswp		d15,d14
-	veor		q8, q8, q7
-	vst1.64		{q8}, [r0,:128]		@ next round tweak
+	vst1.64	{q15}, [r0,:128]!
+	vswp	d15,d14
+	veor	q8, q8, q7
+	vst1.64	{q8}, [r0,:128]		@ next round tweak
 
-	vld1.8		{q6-q7}, [r7]!
-	veor		q5, q5, q13
+	vld1.8	{q6,q7}, [r7]!
+	veor	q5, q5, q13
 #ifndef	BSAES_ASM_EXTENDED_KEY
-	add		r4, sp, #0x90			@ pass key schedule
+	add	r4, sp, #0x90			@ pass key schedule
 #else
-	add		r4, r10, #248			@ pass key schedule
+	add	r4, r10, #248			@ pass key schedule
 #endif
-	veor		q6, q6, q14
-	mov		r5, r1			@ pass rounds
-	veor		q7, q7, q15
-	mov		r0, sp
+	veor	q6, q6, q14
+	mov	r5, r1			@ pass rounds
+	veor	q7, q7, q15
+	mov	r0, sp
 
-	bl		_bsaes_encrypt8
+	bl	_bsaes_encrypt8
 
-	vld1.64		{q8-q9}, [r0,:128]!
-	vld1.64		{q10-q11}, [r0,:128]!
-	veor		q0, q0, q8
-	vld1.64		{q12-q13}, [r0,:128]!
-	veor		q1, q1, q9
-	veor		q8, q4, q10
-	vst1.8		{q0-q1}, [r8]!
-	veor		q9, q6, q11
-	vld1.64		{q14-q15}, [r0,:128]!
-	veor		q10, q3, q12
-	vst1.8		{q8-q9}, [r8]!
-	veor		q11, q7, q13
-	veor		q12, q2, q14
-	vst1.8		{q10-q11}, [r8]!
-	veor		q13, q5, q15
-	vst1.8		{q12-q13}, [r8]!
+	vld1.64	{q8,q9}, [r0,:128]!
+	vld1.64	{q10,q11}, [r0,:128]!
+	veor	q0, q0, q8
+	vld1.64	{q12,q13}, [r0,:128]!
+	veor	q1, q1, q9
+	veor	q8, q4, q10
+	vst1.8	{q0,q1}, [r8]!
+	veor	q9, q6, q11
+	vld1.64	{q14,q15}, [r0,:128]!
+	veor	q10, q3, q12
+	vst1.8	{q8,q9}, [r8]!
+	veor	q11, q7, q13
+	veor	q12, q2, q14
+	vst1.8	{q10,q11}, [r8]!
+	veor	q13, q5, q15
+	vst1.8	{q12,q13}, [r8]!
 
-	vld1.64		{q8}, [r0,:128]		@ next round tweak
+	vld1.64	{q8}, [r0,:128]		@ next round tweak
 
-	subs		r9, #0x80
-	bpl		.Lxts_enc_loop
+	subs	r9, #0x80
+	bpl	.Lxts_enc_loop
 
 .Lxts_enc_short:
-	adds		r9, #0x70
-	bmi		.Lxts_enc_done
+	adds	r9, #0x70
+	bmi	.Lxts_enc_done
 
-	vldmia		r2, {q5}	@ load XTS magic
+	vldmia	r2, {q5}	@ load XTS magic
 	vshr.s64	q7, q8, #63
-	mov		r0, sp
-	vand		q7, q7, q5
+	mov	r0, sp
+	vand	q7, q7, q5
 	vadd.u64	q9, q8, q8
-	vst1.64		{q8}, [r0,:128]!
-	vswp		d15,d14
+	vst1.64	{q8}, [r0,:128]!
+	vswp	d15,d14
 	vshr.s64	q6, q9, #63
-	veor		q9, q9, q7
-	vand		q6, q6, q5
+	veor	q9, q9, q7
+	vand	q6, q6, q5
 	vadd.u64	q10, q9, q9
-	vst1.64		{q9}, [r0,:128]!
-	vswp		d13,d12
+	vst1.64	{q9}, [r0,:128]!
+	vswp	d13,d12
 	vshr.s64	q7, q10, #63
-	veor		q10, q10, q6
-	vand		q7, q7, q5
-	vld1.8		{q0}, [r7]!
-	subs		r9, #0x10
-	bmi		.Lxts_enc_1
+	veor	q10, q10, q6
+	vand	q7, q7, q5
+	vld1.8	{q0}, [r7]!
+	subs	r9, #0x10
+	bmi	.Lxts_enc_1
 	vadd.u64	q11, q10, q10
-	vst1.64		{q10}, [r0,:128]!
-	vswp		d15,d14
+	vst1.64	{q10}, [r0,:128]!
+	vswp	d15,d14
 	vshr.s64	q6, q11, #63
-	veor		q11, q11, q7
-	vand		q6, q6, q5
-	vld1.8		{q1}, [r7]!
-	subs		r9, #0x10
-	bmi		.Lxts_enc_2
-	veor		q0, q0, q8
+	veor	q11, q11, q7
+	vand	q6, q6, q5
+	vld1.8	{q1}, [r7]!
+	subs	r9, #0x10
+	bmi	.Lxts_enc_2
+	veor	q0, q0, q8
 	vadd.u64	q12, q11, q11
-	vst1.64		{q11}, [r0,:128]!
-	vswp		d13,d12
+	vst1.64	{q11}, [r0,:128]!
+	vswp	d13,d12
 	vshr.s64	q7, q12, #63
-	veor		q12, q12, q6
-	vand		q7, q7, q5
-	vld1.8		{q2}, [r7]!
-	subs		r9, #0x10
-	bmi		.Lxts_enc_3
-	veor		q1, q1, q9
+	veor	q12, q12, q6
+	vand	q7, q7, q5
+	vld1.8	{q2}, [r7]!
+	subs	r9, #0x10
+	bmi	.Lxts_enc_3
+	veor	q1, q1, q9
 	vadd.u64	q13, q12, q12
-	vst1.64		{q12}, [r0,:128]!
-	vswp		d15,d14
+	vst1.64	{q12}, [r0,:128]!
+	vswp	d15,d14
 	vshr.s64	q6, q13, #63
-	veor		q13, q13, q7
-	vand		q6, q6, q5
-	vld1.8		{q3}, [r7]!
-	subs		r9, #0x10
-	bmi		.Lxts_enc_4
-	veor		q2, q2, q10
+	veor	q13, q13, q7
+	vand	q6, q6, q5
+	vld1.8	{q3}, [r7]!
+	subs	r9, #0x10
+	bmi	.Lxts_enc_4
+	veor	q2, q2, q10
 	vadd.u64	q14, q13, q13
-	vst1.64		{q13}, [r0,:128]!
-	vswp		d13,d12
+	vst1.64	{q13}, [r0,:128]!
+	vswp	d13,d12
 	vshr.s64	q7, q14, #63
-	veor		q14, q14, q6
-	vand		q7, q7, q5
-	vld1.8		{q4}, [r7]!
-	subs		r9, #0x10
-	bmi		.Lxts_enc_5
-	veor		q3, q3, q11
+	veor	q14, q14, q6
+	vand	q7, q7, q5
+	vld1.8	{q4}, [r7]!
+	subs	r9, #0x10
+	bmi	.Lxts_enc_5
+	veor	q3, q3, q11
 	vadd.u64	q15, q14, q14
-	vst1.64		{q14}, [r0,:128]!
-	vswp		d15,d14
+	vst1.64	{q14}, [r0,:128]!
+	vswp	d15,d14
 	vshr.s64	q6, q15, #63
-	veor		q15, q15, q7
-	vand		q6, q6, q5
-	vld1.8		{q5}, [r7]!
-	subs		r9, #0x10
-	bmi		.Lxts_enc_6
-	veor		q4, q4, q12
-	sub		r9, #0x10
-	vst1.64		{q15}, [r0,:128]		@ next round tweak
+	veor	q15, q15, q7
+	vand	q6, q6, q5
+	vld1.8	{q5}, [r7]!
+	subs	r9, #0x10
+	bmi	.Lxts_enc_6
+	veor	q4, q4, q12
+	sub	r9, #0x10
+	vst1.64	{q15}, [r0,:128]		@ next round tweak
 
-	vld1.8		{q6}, [r7]!
-	veor		q5, q5, q13
+	vld1.8	{q6}, [r7]!
+	veor	q5, q5, q13
 #ifndef	BSAES_ASM_EXTENDED_KEY
-	add		r4, sp, #0x90			@ pass key schedule
+	add	r4, sp, #0x90			@ pass key schedule
 #else
-	add		r4, r10, #248			@ pass key schedule
+	add	r4, r10, #248			@ pass key schedule
 #endif
-	veor		q6, q6, q14
-	mov		r5, r1			@ pass rounds
-	mov		r0, sp
+	veor	q6, q6, q14
+	mov	r5, r1			@ pass rounds
+	mov	r0, sp
 
-	bl		_bsaes_encrypt8
+	bl	_bsaes_encrypt8
 
-	vld1.64		{q8-q9}, [r0,:128]!
-	vld1.64		{q10-q11}, [r0,:128]!
-	veor		q0, q0, q8
-	vld1.64		{q12-q13}, [r0,:128]!
-	veor		q1, q1, q9
-	veor		q8, q4, q10
-	vst1.8		{q0-q1}, [r8]!
-	veor		q9, q6, q11
-	vld1.64		{q14}, [r0,:128]!
-	veor		q10, q3, q12
-	vst1.8		{q8-q9}, [r8]!
-	veor		q11, q7, q13
-	veor		q12, q2, q14
-	vst1.8		{q10-q11}, [r8]!
-	vst1.8		{q12}, [r8]!
+	vld1.64	{q8,q9}, [r0,:128]!
+	vld1.64	{q10,q11}, [r0,:128]!
+	veor	q0, q0, q8
+	vld1.64	{q12,q13}, [r0,:128]!
+	veor	q1, q1, q9
+	veor	q8, q4, q10
+	vst1.8	{q0,q1}, [r8]!
+	veor	q9, q6, q11
+	vld1.64	{q14}, [r0,:128]!
+	veor	q10, q3, q12
+	vst1.8	{q8,q9}, [r8]!
+	veor	q11, q7, q13
+	veor	q12, q2, q14
+	vst1.8	{q10,q11}, [r8]!
+	vst1.8	{q12}, [r8]!
 
-	vld1.64		{q8}, [r0,:128]		@ next round tweak
-	b		.Lxts_enc_done
+	vld1.64	{q8}, [r0,:128]		@ next round tweak
+	b	.Lxts_enc_done
 .align	4
 .Lxts_enc_6:
-	vst1.64		{q14}, [r0,:128]		@ next round tweak
+	vst1.64	{q14}, [r0,:128]		@ next round tweak
 
-	veor		q4, q4, q12
+	veor	q4, q4, q12
 #ifndef	BSAES_ASM_EXTENDED_KEY
-	add		r4, sp, #0x90			@ pass key schedule
+	add	r4, sp, #0x90			@ pass key schedule
 #else
-	add		r4, r10, #248			@ pass key schedule
+	add	r4, r10, #248			@ pass key schedule
 #endif
-	veor		q5, q5, q13
-	mov		r5, r1			@ pass rounds
-	mov		r0, sp
+	veor	q5, q5, q13
+	mov	r5, r1			@ pass rounds
+	mov	r0, sp
 
-	bl		_bsaes_encrypt8
+	bl	_bsaes_encrypt8
 
-	vld1.64		{q8-q9}, [r0,:128]!
-	vld1.64		{q10-q11}, [r0,:128]!
-	veor		q0, q0, q8
-	vld1.64		{q12-q13}, [r0,:128]!
-	veor		q1, q1, q9
-	veor		q8, q4, q10
-	vst1.8		{q0-q1}, [r8]!
-	veor		q9, q6, q11
-	veor		q10, q3, q12
-	vst1.8		{q8-q9}, [r8]!
-	veor		q11, q7, q13
-	vst1.8		{q10-q11}, [r8]!
+	vld1.64	{q8,q9}, [r0,:128]!
+	vld1.64	{q10,q11}, [r0,:128]!
+	veor	q0, q0, q8
+	vld1.64	{q12,q13}, [r0,:128]!
+	veor	q1, q1, q9
+	veor	q8, q4, q10
+	vst1.8	{q0,q1}, [r8]!
+	veor	q9, q6, q11
+	veor	q10, q3, q12
+	vst1.8	{q8,q9}, [r8]!
+	veor	q11, q7, q13
+	vst1.8	{q10,q11}, [r8]!
 
-	vld1.64		{q8}, [r0,:128]		@ next round tweak
-	b		.Lxts_enc_done
+	vld1.64	{q8}, [r0,:128]		@ next round tweak
+	b	.Lxts_enc_done
 
 @ put this in range for both ARM and Thumb mode adr instructions
 .align	5
 .Lxts_magic:
-	.quad	1, 0x87
+.quad	1, 0x87
 
 .align	5
 .Lxts_enc_5:
-	vst1.64		{q13}, [r0,:128]		@ next round tweak
+	vst1.64	{q13}, [r0,:128]		@ next round tweak
 
-	veor		q3, q3, q11
+	veor	q3, q3, q11
 #ifndef	BSAES_ASM_EXTENDED_KEY
-	add		r4, sp, #0x90			@ pass key schedule
+	add	r4, sp, #0x90			@ pass key schedule
 #else
-	add		r4, r10, #248			@ pass key schedule
+	add	r4, r10, #248			@ pass key schedule
 #endif
-	veor		q4, q4, q12
-	mov		r5, r1			@ pass rounds
-	mov		r0, sp
+	veor	q4, q4, q12
+	mov	r5, r1			@ pass rounds
+	mov	r0, sp
 
-	bl		_bsaes_encrypt8
+	bl	_bsaes_encrypt8
 
-	vld1.64		{q8-q9}, [r0,:128]!
-	vld1.64		{q10-q11}, [r0,:128]!
-	veor		q0, q0, q8
-	vld1.64		{q12}, [r0,:128]!
-	veor		q1, q1, q9
-	veor		q8, q4, q10
-	vst1.8		{q0-q1}, [r8]!
-	veor		q9, q6, q11
-	veor		q10, q3, q12
-	vst1.8		{q8-q9}, [r8]!
-	vst1.8		{q10}, [r8]!
+	vld1.64	{q8,q9}, [r0,:128]!
+	vld1.64	{q10,q11}, [r0,:128]!
+	veor	q0, q0, q8
+	vld1.64	{q12}, [r0,:128]!
+	veor	q1, q1, q9
+	veor	q8, q4, q10
+	vst1.8	{q0,q1}, [r8]!
+	veor	q9, q6, q11
+	veor	q10, q3, q12
+	vst1.8	{q8,q9}, [r8]!
+	vst1.8	{q10}, [r8]!
 
-	vld1.64		{q8}, [r0,:128]		@ next round tweak
-	b		.Lxts_enc_done
+	vld1.64	{q8}, [r0,:128]		@ next round tweak
+	b	.Lxts_enc_done
 .align	4
 .Lxts_enc_4:
-	vst1.64		{q12}, [r0,:128]		@ next round tweak
+	vst1.64	{q12}, [r0,:128]		@ next round tweak
 
-	veor		q2, q2, q10
+	veor	q2, q2, q10
 #ifndef	BSAES_ASM_EXTENDED_KEY
-	add		r4, sp, #0x90			@ pass key schedule
+	add	r4, sp, #0x90			@ pass key schedule
 #else
-	add		r4, r10, #248			@ pass key schedule
+	add	r4, r10, #248			@ pass key schedule
 #endif
-	veor		q3, q3, q11
-	mov		r5, r1			@ pass rounds
-	mov		r0, sp
+	veor	q3, q3, q11
+	mov	r5, r1			@ pass rounds
+	mov	r0, sp
 
-	bl		_bsaes_encrypt8
+	bl	_bsaes_encrypt8
 
-	vld1.64		{q8-q9}, [r0,:128]!
-	vld1.64		{q10-q11}, [r0,:128]!
-	veor		q0, q0, q8
-	veor		q1, q1, q9
-	veor		q8, q4, q10
-	vst1.8		{q0-q1}, [r8]!
-	veor		q9, q6, q11
-	vst1.8		{q8-q9}, [r8]!
+	vld1.64	{q8,q9}, [r0,:128]!
+	vld1.64	{q10,q11}, [r0,:128]!
+	veor	q0, q0, q8
+	veor	q1, q1, q9
+	veor	q8, q4, q10
+	vst1.8	{q0,q1}, [r8]!
+	veor	q9, q6, q11
+	vst1.8	{q8,q9}, [r8]!
 
-	vld1.64		{q8}, [r0,:128]		@ next round tweak
-	b		.Lxts_enc_done
+	vld1.64	{q8}, [r0,:128]		@ next round tweak
+	b	.Lxts_enc_done
 .align	4
 .Lxts_enc_3:
-	vst1.64		{q11}, [r0,:128]		@ next round tweak
+	vst1.64	{q11}, [r0,:128]		@ next round tweak
 
-	veor		q1, q1, q9
+	veor	q1, q1, q9
 #ifndef	BSAES_ASM_EXTENDED_KEY
-	add		r4, sp, #0x90			@ pass key schedule
+	add	r4, sp, #0x90			@ pass key schedule
 #else
-	add		r4, r10, #248			@ pass key schedule
+	add	r4, r10, #248			@ pass key schedule
 #endif
-	veor		q2, q2, q10
-	mov		r5, r1			@ pass rounds
-	mov		r0, sp
+	veor	q2, q2, q10
+	mov	r5, r1			@ pass rounds
+	mov	r0, sp
 
-	bl		_bsaes_encrypt8
+	bl	_bsaes_encrypt8
 
-	vld1.64		{q8-q9}, [r0,:128]!
-	vld1.64		{q10}, [r0,:128]!
-	veor		q0, q0, q8
-	veor		q1, q1, q9
-	veor		q8, q4, q10
-	vst1.8		{q0-q1}, [r8]!
-	vst1.8		{q8}, [r8]!
+	vld1.64	{q8,q9}, [r0,:128]!
+	vld1.64	{q10}, [r0,:128]!
+	veor	q0, q0, q8
+	veor	q1, q1, q9
+	veor	q8, q4, q10
+	vst1.8	{q0,q1}, [r8]!
+	vst1.8	{q8}, [r8]!
 
-	vld1.64		{q8}, [r0,:128]		@ next round tweak
-	b		.Lxts_enc_done
+	vld1.64	{q8}, [r0,:128]		@ next round tweak
+	b	.Lxts_enc_done
 .align	4
 .Lxts_enc_2:
-	vst1.64		{q10}, [r0,:128]		@ next round tweak
+	vst1.64	{q10}, [r0,:128]		@ next round tweak
 
-	veor		q0, q0, q8
+	veor	q0, q0, q8
 #ifndef	BSAES_ASM_EXTENDED_KEY
-	add		r4, sp, #0x90			@ pass key schedule
+	add	r4, sp, #0x90			@ pass key schedule
 #else
-	add		r4, r10, #248			@ pass key schedule
+	add	r4, r10, #248			@ pass key schedule
 #endif
-	veor		q1, q1, q9
-	mov		r5, r1			@ pass rounds
-	mov		r0, sp
+	veor	q1, q1, q9
+	mov	r5, r1			@ pass rounds
+	mov	r0, sp
 
-	bl		_bsaes_encrypt8
+	bl	_bsaes_encrypt8
 
-	vld1.64		{q8-q9}, [r0,:128]!
-	veor		q0, q0, q8
-	veor		q1, q1, q9
-	vst1.8		{q0-q1}, [r8]!
+	vld1.64	{q8,q9}, [r0,:128]!
+	veor	q0, q0, q8
+	veor	q1, q1, q9
+	vst1.8	{q0,q1}, [r8]!
 
-	vld1.64		{q8}, [r0,:128]		@ next round tweak
-	b		.Lxts_enc_done
+	vld1.64	{q8}, [r0,:128]		@ next round tweak
+	b	.Lxts_enc_done
 .align	4
 .Lxts_enc_1:
-	mov		r0, sp
-	veor		q0, q8
-	mov		r1, sp
-	vst1.8		{q0}, [sp,:128]
-	mov		r2, r10
-	mov		r4, r3				@ preserve fp
+	mov	r0, sp
+	veor	q0, q8
+	mov	r1, sp
+	vst1.8	{q0}, [sp,:128]
+	mov	r2, r10
+	mov	r4, r3				@ preserve fp
 
-	bl		AES_encrypt
+	bl	AES_encrypt
 
-	vld1.8		{q0}, [sp,:128]
-	veor		q0, q0, q8
-	vst1.8		{q0}, [r8]!
-	mov		r3, r4
+	vld1.8	{q0}, [sp,:128]
+	veor	q0, q0, q8
+	vst1.8	{q0}, [r8]!
+	mov	r3, r4
 
-	vmov		q8, q9		@ next round tweak
+	vmov	q8, q9		@ next round tweak
 
 .Lxts_enc_done:
 #ifndef	XTS_CHAIN_TWEAK
-	adds		r9, #0x10
-	beq		.Lxts_enc_ret
-	sub		r6, r8, #0x10
+	adds	r9, #0x10
+	beq	.Lxts_enc_ret
+	sub	r6, r8, #0x10
 
 .Lxts_enc_steal:
-	ldrb		r0, [r7], #1
-	ldrb		r1, [r8, #-0x10]
-	strb		r0, [r8, #-0x10]
-	strb		r1, [r8], #1
+	ldrb	r0, [r7], #1
+	ldrb	r1, [r8, #-0x10]
+	strb	r0, [r8, #-0x10]
+	strb	r1, [r8], #1
 
-	subs		r9, #1
-	bhi		.Lxts_enc_steal
+	subs	r9, #1
+	bhi	.Lxts_enc_steal
 
-	vld1.8		{q0}, [r6]
-	mov		r0, sp
-	veor		q0, q0, q8
-	mov		r1, sp
-	vst1.8		{q0}, [sp,:128]
-	mov		r2, r10
-	mov		r4, r3			@ preserve fp
+	vld1.8	{q0}, [r6]
+	mov	r0, sp
+	veor	q0, q0, q8
+	mov	r1, sp
+	vst1.8	{q0}, [sp,:128]
+	mov	r2, r10
+	mov	r4, r3			@ preserve fp
 
-	bl		AES_encrypt
+	bl	AES_encrypt
 
-	vld1.8		{q0}, [sp,:128]
-	veor		q0, q0, q8
-	vst1.8		{q0}, [r6]
-	mov		r3, r4
+	vld1.8	{q0}, [sp,:128]
+	veor	q0, q0, q8
+	vst1.8	{q0}, [r6]
+	mov	r3, r4
 #endif
 
 .Lxts_enc_ret:
-	bic		r0, r3, #0xf
+	bic	r0, r3, #0xf
 	vmov.i32	q0, #0
 	vmov.i32	q1, #0
 #ifdef	XTS_CHAIN_TWEAK
-	ldr		r1, [r3, #0x20+VFP_ABI_FRAME]	@ chain tweak
+	ldr	r1, [r3, #0x20+VFP_ABI_FRAME]	@ chain tweak
 #endif
-.Lxts_enc_bzero:				@ wipe key schedule [if any]
-	vstmia		sp!, {q0-q1}
-	cmp		sp, r0
-	bne		.Lxts_enc_bzero
+.Lxts_enc_bzero:@ wipe key schedule [if any]
+	vstmia	sp!, {q0,q1}
+	cmp	sp, r0
+	bne	.Lxts_enc_bzero
 
-	mov		sp, r3
+	mov	sp, r3
 #ifdef	XTS_CHAIN_TWEAK
-	vst1.8		{q8}, [r1]
+	vst1.8	{q8}, [r1]
 #endif
 	VFP_ABI_POP
-	ldmia		sp!, {r4-r10, pc}	@ return
+	ldmia	sp!, {r4,r5,r6,r7,r8,r9,r10, pc}	@ return
 
 .size	bsaes_xts_encrypt,.-bsaes_xts_encrypt
 
@@ -2035,7 +2060,7 @@
 .align	4
 bsaes_xts_decrypt:
 	mov	ip, sp
-	stmdb	sp!, {r4-r10, lr}		@ 0x20
+	stmdb	sp!, {r4,r5,r6,r7,r8,r9,r10, lr}		@ 0x20
 	VFP_ABI_PUSH
 	mov	r6, sp				@ future r3
 
@@ -2095,14 +2120,16 @@
 	vstmia	r4, {q7}
 
 .align	2
-0:	sub	sp, #0x90			@ place for tweak[9]
+	sub	sp, #0x90			@ place for tweak[9]
 #endif
 	vld1.8	{q8}, [r0]			@ initial tweak
 	adr	r2, .Lxts_magic
 
+#ifndef	XTS_CHAIN_TWEAK
 	tst	r9, #0xf			@ if not multiple of 16
 	it	ne				@ Thumb2 thing, sanity check in ARM
 	subne	r9, #0x10			@ subtract another 16 bytes
+#endif
 	subs	r9, #0x80
 
 	blo	.Lxts_dec_short
@@ -2110,440 +2137,440 @@
 
 .align	4
 .Lxts_dec_loop:
-	vldmia		r2, {q5}	@ load XTS magic
+	vldmia	r2, {q5}	@ load XTS magic
 	vshr.s64	q6, q8, #63
-	mov		r0, sp
-	vand		q6, q6, q5
+	mov	r0, sp
+	vand	q6, q6, q5
 	vadd.u64	q9, q8, q8
-	vst1.64		{q8}, [r0,:128]!
-	vswp		d13,d12
+	vst1.64	{q8}, [r0,:128]!
+	vswp	d13,d12
 	vshr.s64	q7, q9, #63
-	veor		q9, q9, q6
-	vand		q7, q7, q5
+	veor	q9, q9, q6
+	vand	q7, q7, q5
 	vadd.u64	q10, q9, q9
-	vst1.64		{q9}, [r0,:128]!
-	vswp		d15,d14
+	vst1.64	{q9}, [r0,:128]!
+	vswp	d15,d14
 	vshr.s64	q6, q10, #63
-	veor		q10, q10, q7
-	vand		q6, q6, q5
-	vld1.8		{q0}, [r7]!
+	veor	q10, q10, q7
+	vand	q6, q6, q5
+	vld1.8	{q0}, [r7]!
 	vadd.u64	q11, q10, q10
-	vst1.64		{q10}, [r0,:128]!
-	vswp		d13,d12
+	vst1.64	{q10}, [r0,:128]!
+	vswp	d13,d12
 	vshr.s64	q7, q11, #63
-	veor		q11, q11, q6
-	vand		q7, q7, q5
-	vld1.8		{q1}, [r7]!
-	veor		q0, q0, q8
+	veor	q11, q11, q6
+	vand	q7, q7, q5
+	vld1.8	{q1}, [r7]!
+	veor	q0, q0, q8
 	vadd.u64	q12, q11, q11
-	vst1.64		{q11}, [r0,:128]!
-	vswp		d15,d14
+	vst1.64	{q11}, [r0,:128]!
+	vswp	d15,d14
 	vshr.s64	q6, q12, #63
-	veor		q12, q12, q7
-	vand		q6, q6, q5
-	vld1.8		{q2}, [r7]!
-	veor		q1, q1, q9
+	veor	q12, q12, q7
+	vand	q6, q6, q5
+	vld1.8	{q2}, [r7]!
+	veor	q1, q1, q9
 	vadd.u64	q13, q12, q12
-	vst1.64		{q12}, [r0,:128]!
-	vswp		d13,d12
+	vst1.64	{q12}, [r0,:128]!
+	vswp	d13,d12
 	vshr.s64	q7, q13, #63
-	veor		q13, q13, q6
-	vand		q7, q7, q5
-	vld1.8		{q3}, [r7]!
-	veor		q2, q2, q10
+	veor	q13, q13, q6
+	vand	q7, q7, q5
+	vld1.8	{q3}, [r7]!
+	veor	q2, q2, q10
 	vadd.u64	q14, q13, q13
-	vst1.64		{q13}, [r0,:128]!
-	vswp		d15,d14
+	vst1.64	{q13}, [r0,:128]!
+	vswp	d15,d14
 	vshr.s64	q6, q14, #63
-	veor		q14, q14, q7
-	vand		q6, q6, q5
-	vld1.8		{q4}, [r7]!
-	veor		q3, q3, q11
+	veor	q14, q14, q7
+	vand	q6, q6, q5
+	vld1.8	{q4}, [r7]!
+	veor	q3, q3, q11
 	vadd.u64	q15, q14, q14
-	vst1.64		{q14}, [r0,:128]!
-	vswp		d13,d12
+	vst1.64	{q14}, [r0,:128]!
+	vswp	d13,d12
 	vshr.s64	q7, q15, #63
-	veor		q15, q15, q6
-	vand		q7, q7, q5
-	vld1.8		{q5}, [r7]!
-	veor		q4, q4, q12
+	veor	q15, q15, q6
+	vand	q7, q7, q5
+	vld1.8	{q5}, [r7]!
+	veor	q4, q4, q12
 	vadd.u64	q8, q15, q15
-	vst1.64		{q15}, [r0,:128]!
-	vswp		d15,d14
-	veor		q8, q8, q7
-	vst1.64		{q8}, [r0,:128]		@ next round tweak
+	vst1.64	{q15}, [r0,:128]!
+	vswp	d15,d14
+	veor	q8, q8, q7
+	vst1.64	{q8}, [r0,:128]		@ next round tweak
 
-	vld1.8		{q6-q7}, [r7]!
-	veor		q5, q5, q13
+	vld1.8	{q6,q7}, [r7]!
+	veor	q5, q5, q13
 #ifndef	BSAES_ASM_EXTENDED_KEY
-	add		r4, sp, #0x90			@ pass key schedule
+	add	r4, sp, #0x90			@ pass key schedule
 #else
-	add		r4, r10, #248			@ pass key schedule
+	add	r4, r10, #248			@ pass key schedule
 #endif
-	veor		q6, q6, q14
-	mov		r5, r1			@ pass rounds
-	veor		q7, q7, q15
-	mov		r0, sp
+	veor	q6, q6, q14
+	mov	r5, r1			@ pass rounds
+	veor	q7, q7, q15
+	mov	r0, sp
 
-	bl		_bsaes_decrypt8
+	bl	_bsaes_decrypt8
 
-	vld1.64		{q8-q9}, [r0,:128]!
-	vld1.64		{q10-q11}, [r0,:128]!
-	veor		q0, q0, q8
-	vld1.64		{q12-q13}, [r0,:128]!
-	veor		q1, q1, q9
-	veor		q8, q6, q10
-	vst1.8		{q0-q1}, [r8]!
-	veor		q9, q4, q11
-	vld1.64		{q14-q15}, [r0,:128]!
-	veor		q10, q2, q12
-	vst1.8		{q8-q9}, [r8]!
-	veor		q11, q7, q13
-	veor		q12, q3, q14
-	vst1.8		{q10-q11}, [r8]!
-	veor		q13, q5, q15
-	vst1.8		{q12-q13}, [r8]!
+	vld1.64	{q8,q9}, [r0,:128]!
+	vld1.64	{q10,q11}, [r0,:128]!
+	veor	q0, q0, q8
+	vld1.64	{q12,q13}, [r0,:128]!
+	veor	q1, q1, q9
+	veor	q8, q6, q10
+	vst1.8	{q0,q1}, [r8]!
+	veor	q9, q4, q11
+	vld1.64	{q14,q15}, [r0,:128]!
+	veor	q10, q2, q12
+	vst1.8	{q8,q9}, [r8]!
+	veor	q11, q7, q13
+	veor	q12, q3, q14
+	vst1.8	{q10,q11}, [r8]!
+	veor	q13, q5, q15
+	vst1.8	{q12,q13}, [r8]!
 
-	vld1.64		{q8}, [r0,:128]		@ next round tweak
+	vld1.64	{q8}, [r0,:128]		@ next round tweak
 
-	subs		r9, #0x80
-	bpl		.Lxts_dec_loop
+	subs	r9, #0x80
+	bpl	.Lxts_dec_loop
 
 .Lxts_dec_short:
-	adds		r9, #0x70
-	bmi		.Lxts_dec_done
+	adds	r9, #0x70
+	bmi	.Lxts_dec_done
 
-	vldmia		r2, {q5}	@ load XTS magic
+	vldmia	r2, {q5}	@ load XTS magic
 	vshr.s64	q7, q8, #63
-	mov		r0, sp
-	vand		q7, q7, q5
+	mov	r0, sp
+	vand	q7, q7, q5
 	vadd.u64	q9, q8, q8
-	vst1.64		{q8}, [r0,:128]!
-	vswp		d15,d14
+	vst1.64	{q8}, [r0,:128]!
+	vswp	d15,d14
 	vshr.s64	q6, q9, #63
-	veor		q9, q9, q7
-	vand		q6, q6, q5
+	veor	q9, q9, q7
+	vand	q6, q6, q5
 	vadd.u64	q10, q9, q9
-	vst1.64		{q9}, [r0,:128]!
-	vswp		d13,d12
+	vst1.64	{q9}, [r0,:128]!
+	vswp	d13,d12
 	vshr.s64	q7, q10, #63
-	veor		q10, q10, q6
-	vand		q7, q7, q5
-	vld1.8		{q0}, [r7]!
-	subs		r9, #0x10
-	bmi		.Lxts_dec_1
+	veor	q10, q10, q6
+	vand	q7, q7, q5
+	vld1.8	{q0}, [r7]!
+	subs	r9, #0x10
+	bmi	.Lxts_dec_1
 	vadd.u64	q11, q10, q10
-	vst1.64		{q10}, [r0,:128]!
-	vswp		d15,d14
+	vst1.64	{q10}, [r0,:128]!
+	vswp	d15,d14
 	vshr.s64	q6, q11, #63
-	veor		q11, q11, q7
-	vand		q6, q6, q5
-	vld1.8		{q1}, [r7]!
-	subs		r9, #0x10
-	bmi		.Lxts_dec_2
-	veor		q0, q0, q8
+	veor	q11, q11, q7
+	vand	q6, q6, q5
+	vld1.8	{q1}, [r7]!
+	subs	r9, #0x10
+	bmi	.Lxts_dec_2
+	veor	q0, q0, q8
 	vadd.u64	q12, q11, q11
-	vst1.64		{q11}, [r0,:128]!
-	vswp		d13,d12
+	vst1.64	{q11}, [r0,:128]!
+	vswp	d13,d12
 	vshr.s64	q7, q12, #63
-	veor		q12, q12, q6
-	vand		q7, q7, q5
-	vld1.8		{q2}, [r7]!
-	subs		r9, #0x10
-	bmi		.Lxts_dec_3
-	veor		q1, q1, q9
+	veor	q12, q12, q6
+	vand	q7, q7, q5
+	vld1.8	{q2}, [r7]!
+	subs	r9, #0x10
+	bmi	.Lxts_dec_3
+	veor	q1, q1, q9
 	vadd.u64	q13, q12, q12
-	vst1.64		{q12}, [r0,:128]!
-	vswp		d15,d14
+	vst1.64	{q12}, [r0,:128]!
+	vswp	d15,d14
 	vshr.s64	q6, q13, #63
-	veor		q13, q13, q7
-	vand		q6, q6, q5
-	vld1.8		{q3}, [r7]!
-	subs		r9, #0x10
-	bmi		.Lxts_dec_4
-	veor		q2, q2, q10
+	veor	q13, q13, q7
+	vand	q6, q6, q5
+	vld1.8	{q3}, [r7]!
+	subs	r9, #0x10
+	bmi	.Lxts_dec_4
+	veor	q2, q2, q10
 	vadd.u64	q14, q13, q13
-	vst1.64		{q13}, [r0,:128]!
-	vswp		d13,d12
+	vst1.64	{q13}, [r0,:128]!
+	vswp	d13,d12
 	vshr.s64	q7, q14, #63
-	veor		q14, q14, q6
-	vand		q7, q7, q5
-	vld1.8		{q4}, [r7]!
-	subs		r9, #0x10
-	bmi		.Lxts_dec_5
-	veor		q3, q3, q11
+	veor	q14, q14, q6
+	vand	q7, q7, q5
+	vld1.8	{q4}, [r7]!
+	subs	r9, #0x10
+	bmi	.Lxts_dec_5
+	veor	q3, q3, q11
 	vadd.u64	q15, q14, q14
-	vst1.64		{q14}, [r0,:128]!
-	vswp		d15,d14
+	vst1.64	{q14}, [r0,:128]!
+	vswp	d15,d14
 	vshr.s64	q6, q15, #63
-	veor		q15, q15, q7
-	vand		q6, q6, q5
-	vld1.8		{q5}, [r7]!
-	subs		r9, #0x10
-	bmi		.Lxts_dec_6
-	veor		q4, q4, q12
-	sub		r9, #0x10
-	vst1.64		{q15}, [r0,:128]		@ next round tweak
+	veor	q15, q15, q7
+	vand	q6, q6, q5
+	vld1.8	{q5}, [r7]!
+	subs	r9, #0x10
+	bmi	.Lxts_dec_6
+	veor	q4, q4, q12
+	sub	r9, #0x10
+	vst1.64	{q15}, [r0,:128]		@ next round tweak
 
-	vld1.8		{q6}, [r7]!
-	veor		q5, q5, q13
+	vld1.8	{q6}, [r7]!
+	veor	q5, q5, q13
 #ifndef	BSAES_ASM_EXTENDED_KEY
-	add		r4, sp, #0x90			@ pass key schedule
+	add	r4, sp, #0x90			@ pass key schedule
 #else
-	add		r4, r10, #248			@ pass key schedule
+	add	r4, r10, #248			@ pass key schedule
 #endif
-	veor		q6, q6, q14
-	mov		r5, r1			@ pass rounds
-	mov		r0, sp
+	veor	q6, q6, q14
+	mov	r5, r1			@ pass rounds
+	mov	r0, sp
 
-	bl		_bsaes_decrypt8
+	bl	_bsaes_decrypt8
 
-	vld1.64		{q8-q9}, [r0,:128]!
-	vld1.64		{q10-q11}, [r0,:128]!
-	veor		q0, q0, q8
-	vld1.64		{q12-q13}, [r0,:128]!
-	veor		q1, q1, q9
-	veor		q8, q6, q10
-	vst1.8		{q0-q1}, [r8]!
-	veor		q9, q4, q11
-	vld1.64		{q14}, [r0,:128]!
-	veor		q10, q2, q12
-	vst1.8		{q8-q9}, [r8]!
-	veor		q11, q7, q13
-	veor		q12, q3, q14
-	vst1.8		{q10-q11}, [r8]!
-	vst1.8		{q12}, [r8]!
+	vld1.64	{q8,q9}, [r0,:128]!
+	vld1.64	{q10,q11}, [r0,:128]!
+	veor	q0, q0, q8
+	vld1.64	{q12,q13}, [r0,:128]!
+	veor	q1, q1, q9
+	veor	q8, q6, q10
+	vst1.8	{q0,q1}, [r8]!
+	veor	q9, q4, q11
+	vld1.64	{q14}, [r0,:128]!
+	veor	q10, q2, q12
+	vst1.8	{q8,q9}, [r8]!
+	veor	q11, q7, q13
+	veor	q12, q3, q14
+	vst1.8	{q10,q11}, [r8]!
+	vst1.8	{q12}, [r8]!
 
-	vld1.64		{q8}, [r0,:128]		@ next round tweak
-	b		.Lxts_dec_done
+	vld1.64	{q8}, [r0,:128]		@ next round tweak
+	b	.Lxts_dec_done
 .align	4
 .Lxts_dec_6:
-	vst1.64		{q14}, [r0,:128]		@ next round tweak
+	vst1.64	{q14}, [r0,:128]		@ next round tweak
 
-	veor		q4, q4, q12
+	veor	q4, q4, q12
 #ifndef	BSAES_ASM_EXTENDED_KEY
-	add		r4, sp, #0x90			@ pass key schedule
+	add	r4, sp, #0x90			@ pass key schedule
 #else
-	add		r4, r10, #248			@ pass key schedule
+	add	r4, r10, #248			@ pass key schedule
 #endif
-	veor		q5, q5, q13
-	mov		r5, r1			@ pass rounds
-	mov		r0, sp
+	veor	q5, q5, q13
+	mov	r5, r1			@ pass rounds
+	mov	r0, sp
 
-	bl		_bsaes_decrypt8
+	bl	_bsaes_decrypt8
 
-	vld1.64		{q8-q9}, [r0,:128]!
-	vld1.64		{q10-q11}, [r0,:128]!
-	veor		q0, q0, q8
-	vld1.64		{q12-q13}, [r0,:128]!
-	veor		q1, q1, q9
-	veor		q8, q6, q10
-	vst1.8		{q0-q1}, [r8]!
-	veor		q9, q4, q11
-	veor		q10, q2, q12
-	vst1.8		{q8-q9}, [r8]!
-	veor		q11, q7, q13
-	vst1.8		{q10-q11}, [r8]!
+	vld1.64	{q8,q9}, [r0,:128]!
+	vld1.64	{q10,q11}, [r0,:128]!
+	veor	q0, q0, q8
+	vld1.64	{q12,q13}, [r0,:128]!
+	veor	q1, q1, q9
+	veor	q8, q6, q10
+	vst1.8	{q0,q1}, [r8]!
+	veor	q9, q4, q11
+	veor	q10, q2, q12
+	vst1.8	{q8,q9}, [r8]!
+	veor	q11, q7, q13
+	vst1.8	{q10,q11}, [r8]!
 
-	vld1.64		{q8}, [r0,:128]		@ next round tweak
-	b		.Lxts_dec_done
+	vld1.64	{q8}, [r0,:128]		@ next round tweak
+	b	.Lxts_dec_done
 .align	4
 .Lxts_dec_5:
-	vst1.64		{q13}, [r0,:128]		@ next round tweak
+	vst1.64	{q13}, [r0,:128]		@ next round tweak
 
-	veor		q3, q3, q11
+	veor	q3, q3, q11
 #ifndef	BSAES_ASM_EXTENDED_KEY
-	add		r4, sp, #0x90			@ pass key schedule
+	add	r4, sp, #0x90			@ pass key schedule
 #else
-	add		r4, r10, #248			@ pass key schedule
+	add	r4, r10, #248			@ pass key schedule
 #endif
-	veor		q4, q4, q12
-	mov		r5, r1			@ pass rounds
-	mov		r0, sp
+	veor	q4, q4, q12
+	mov	r5, r1			@ pass rounds
+	mov	r0, sp
 
-	bl		_bsaes_decrypt8
+	bl	_bsaes_decrypt8
 
-	vld1.64		{q8-q9}, [r0,:128]!
-	vld1.64		{q10-q11}, [r0,:128]!
-	veor		q0, q0, q8
-	vld1.64		{q12}, [r0,:128]!
-	veor		q1, q1, q9
-	veor		q8, q6, q10
-	vst1.8		{q0-q1}, [r8]!
-	veor		q9, q4, q11
-	veor		q10, q2, q12
-	vst1.8		{q8-q9}, [r8]!
-	vst1.8		{q10}, [r8]!
+	vld1.64	{q8,q9}, [r0,:128]!
+	vld1.64	{q10,q11}, [r0,:128]!
+	veor	q0, q0, q8
+	vld1.64	{q12}, [r0,:128]!
+	veor	q1, q1, q9
+	veor	q8, q6, q10
+	vst1.8	{q0,q1}, [r8]!
+	veor	q9, q4, q11
+	veor	q10, q2, q12
+	vst1.8	{q8,q9}, [r8]!
+	vst1.8	{q10}, [r8]!
 
-	vld1.64		{q8}, [r0,:128]		@ next round tweak
-	b		.Lxts_dec_done
+	vld1.64	{q8}, [r0,:128]		@ next round tweak
+	b	.Lxts_dec_done
 .align	4
 .Lxts_dec_4:
-	vst1.64		{q12}, [r0,:128]		@ next round tweak
+	vst1.64	{q12}, [r0,:128]		@ next round tweak
 
-	veor		q2, q2, q10
+	veor	q2, q2, q10
 #ifndef	BSAES_ASM_EXTENDED_KEY
-	add		r4, sp, #0x90			@ pass key schedule
+	add	r4, sp, #0x90			@ pass key schedule
 #else
-	add		r4, r10, #248			@ pass key schedule
+	add	r4, r10, #248			@ pass key schedule
 #endif
-	veor		q3, q3, q11
-	mov		r5, r1			@ pass rounds
-	mov		r0, sp
+	veor	q3, q3, q11
+	mov	r5, r1			@ pass rounds
+	mov	r0, sp
 
-	bl		_bsaes_decrypt8
+	bl	_bsaes_decrypt8
 
-	vld1.64		{q8-q9}, [r0,:128]!
-	vld1.64		{q10-q11}, [r0,:128]!
-	veor		q0, q0, q8
-	veor		q1, q1, q9
-	veor		q8, q6, q10
-	vst1.8		{q0-q1}, [r8]!
-	veor		q9, q4, q11
-	vst1.8		{q8-q9}, [r8]!
+	vld1.64	{q8,q9}, [r0,:128]!
+	vld1.64	{q10,q11}, [r0,:128]!
+	veor	q0, q0, q8
+	veor	q1, q1, q9
+	veor	q8, q6, q10
+	vst1.8	{q0,q1}, [r8]!
+	veor	q9, q4, q11
+	vst1.8	{q8,q9}, [r8]!
 
-	vld1.64		{q8}, [r0,:128]		@ next round tweak
-	b		.Lxts_dec_done
+	vld1.64	{q8}, [r0,:128]		@ next round tweak
+	b	.Lxts_dec_done
 .align	4
 .Lxts_dec_3:
-	vst1.64		{q11}, [r0,:128]		@ next round tweak
+	vst1.64	{q11}, [r0,:128]		@ next round tweak
 
-	veor		q1, q1, q9
+	veor	q1, q1, q9
 #ifndef	BSAES_ASM_EXTENDED_KEY
-	add		r4, sp, #0x90			@ pass key schedule
+	add	r4, sp, #0x90			@ pass key schedule
 #else
-	add		r4, r10, #248			@ pass key schedule
+	add	r4, r10, #248			@ pass key schedule
 #endif
-	veor		q2, q2, q10
-	mov		r5, r1			@ pass rounds
-	mov		r0, sp
+	veor	q2, q2, q10
+	mov	r5, r1			@ pass rounds
+	mov	r0, sp
 
-	bl		_bsaes_decrypt8
+	bl	_bsaes_decrypt8
 
-	vld1.64		{q8-q9}, [r0,:128]!
-	vld1.64		{q10}, [r0,:128]!
-	veor		q0, q0, q8
-	veor		q1, q1, q9
-	veor		q8, q6, q10
-	vst1.8		{q0-q1}, [r8]!
-	vst1.8		{q8}, [r8]!
+	vld1.64	{q8,q9}, [r0,:128]!
+	vld1.64	{q10}, [r0,:128]!
+	veor	q0, q0, q8
+	veor	q1, q1, q9
+	veor	q8, q6, q10
+	vst1.8	{q0,q1}, [r8]!
+	vst1.8	{q8}, [r8]!
 
-	vld1.64		{q8}, [r0,:128]		@ next round tweak
-	b		.Lxts_dec_done
+	vld1.64	{q8}, [r0,:128]		@ next round tweak
+	b	.Lxts_dec_done
 .align	4
 .Lxts_dec_2:
-	vst1.64		{q10}, [r0,:128]		@ next round tweak
+	vst1.64	{q10}, [r0,:128]		@ next round tweak
 
-	veor		q0, q0, q8
+	veor	q0, q0, q8
 #ifndef	BSAES_ASM_EXTENDED_KEY
-	add		r4, sp, #0x90			@ pass key schedule
+	add	r4, sp, #0x90			@ pass key schedule
 #else
-	add		r4, r10, #248			@ pass key schedule
+	add	r4, r10, #248			@ pass key schedule
 #endif
-	veor		q1, q1, q9
-	mov		r5, r1			@ pass rounds
-	mov		r0, sp
+	veor	q1, q1, q9
+	mov	r5, r1			@ pass rounds
+	mov	r0, sp
 
-	bl		_bsaes_decrypt8
+	bl	_bsaes_decrypt8
 
-	vld1.64		{q8-q9}, [r0,:128]!
-	veor		q0, q0, q8
-	veor		q1, q1, q9
-	vst1.8		{q0-q1}, [r8]!
+	vld1.64	{q8,q9}, [r0,:128]!
+	veor	q0, q0, q8
+	veor	q1, q1, q9
+	vst1.8	{q0,q1}, [r8]!
 
-	vld1.64		{q8}, [r0,:128]		@ next round tweak
-	b		.Lxts_dec_done
+	vld1.64	{q8}, [r0,:128]		@ next round tweak
+	b	.Lxts_dec_done
 .align	4
 .Lxts_dec_1:
-	mov		r0, sp
-	veor		q0, q8
-	mov		r1, sp
-	vst1.8		{q0}, [sp,:128]
-	mov		r2, r10
-	mov		r4, r3				@ preserve fp
-	mov		r5, r2			@ preserve magic
+	mov	r0, sp
+	veor	q0, q8
+	mov	r1, sp
+	vst1.8	{q0}, [sp,:128]
+	mov	r2, r10
+	mov	r4, r3				@ preserve fp
+	mov	r5, r2			@ preserve magic
 
-	bl		AES_decrypt
+	bl	AES_decrypt
 
-	vld1.8		{q0}, [sp,:128]
-	veor		q0, q0, q8
-	vst1.8		{q0}, [r8]!
-	mov		r3, r4
-	mov		r2, r5
+	vld1.8	{q0}, [sp,:128]
+	veor	q0, q0, q8
+	vst1.8	{q0}, [r8]!
+	mov	r3, r4
+	mov	r2, r5
 
-	vmov		q8, q9		@ next round tweak
+	vmov	q8, q9		@ next round tweak
 
 .Lxts_dec_done:
 #ifndef	XTS_CHAIN_TWEAK
-	adds		r9, #0x10
-	beq		.Lxts_dec_ret
+	adds	r9, #0x10
+	beq	.Lxts_dec_ret
 
 	@ calculate one round of extra tweak for the stolen ciphertext
-	vldmia		r2, {q5}
+	vldmia	r2, {q5}
 	vshr.s64	q6, q8, #63
-	vand		q6, q6, q5
+	vand	q6, q6, q5
 	vadd.u64	q9, q8, q8
-	vswp		d13,d12
-	veor		q9, q9, q6
+	vswp	d13,d12
+	veor	q9, q9, q6
 
 	@ perform the final decryption with the last tweak value
-	vld1.8		{q0}, [r7]!
-	mov		r0, sp
-	veor		q0, q0, q9
-	mov		r1, sp
-	vst1.8		{q0}, [sp,:128]
-	mov		r2, r10
-	mov		r4, r3			@ preserve fp
+	vld1.8	{q0}, [r7]!
+	mov	r0, sp
+	veor	q0, q0, q9
+	mov	r1, sp
+	vst1.8	{q0}, [sp,:128]
+	mov	r2, r10
+	mov	r4, r3			@ preserve fp
 
-	bl		AES_decrypt
+	bl	AES_decrypt
 
-	vld1.8		{q0}, [sp,:128]
-	veor		q0, q0, q9
-	vst1.8		{q0}, [r8]
+	vld1.8	{q0}, [sp,:128]
+	veor	q0, q0, q9
+	vst1.8	{q0}, [r8]
 
-	mov		r6, r8
+	mov	r6, r8
 .Lxts_dec_steal:
-	ldrb		r1, [r8]
-	ldrb		r0, [r7], #1
-	strb		r1, [r8, #0x10]
-	strb		r0, [r8], #1
+	ldrb	r1, [r8]
+	ldrb	r0, [r7], #1
+	strb	r1, [r8, #0x10]
+	strb	r0, [r8], #1
 
-	subs		r9, #1
-	bhi		.Lxts_dec_steal
+	subs	r9, #1
+	bhi	.Lxts_dec_steal
 
-	vld1.8		{q0}, [r6]
-	mov		r0, sp
-	veor		q0, q8
-	mov		r1, sp
-	vst1.8		{q0}, [sp,:128]
-	mov		r2, r10
+	vld1.8	{q0}, [r6]
+	mov	r0, sp
+	veor	q0, q8
+	mov	r1, sp
+	vst1.8	{q0}, [sp,:128]
+	mov	r2, r10
 
-	bl		AES_decrypt
+	bl	AES_decrypt
 
-	vld1.8		{q0}, [sp,:128]
-	veor		q0, q0, q8
-	vst1.8		{q0}, [r6]
-	mov		r3, r4
+	vld1.8	{q0}, [sp,:128]
+	veor	q0, q0, q8
+	vst1.8	{q0}, [r6]
+	mov	r3, r4
 #endif
 
 .Lxts_dec_ret:
-	bic		r0, r3, #0xf
+	bic	r0, r3, #0xf
 	vmov.i32	q0, #0
 	vmov.i32	q1, #0
 #ifdef	XTS_CHAIN_TWEAK
-	ldr		r1, [r3, #0x20+VFP_ABI_FRAME]	@ chain tweak
+	ldr	r1, [r3, #0x20+VFP_ABI_FRAME]	@ chain tweak
 #endif
-.Lxts_dec_bzero:				@ wipe key schedule [if any]
-	vstmia		sp!, {q0-q1}
-	cmp		sp, r0
-	bne		.Lxts_dec_bzero
+.Lxts_dec_bzero:@ wipe key schedule [if any]
+	vstmia	sp!, {q0,q1}
+	cmp	sp, r0
+	bne	.Lxts_dec_bzero
 
-	mov		sp, r3
+	mov	sp, r3
 #ifdef	XTS_CHAIN_TWEAK
-	vst1.8		{q8}, [r1]
+	vst1.8	{q8}, [r1]
 #endif
 	VFP_ABI_POP
-	ldmia		sp!, {r4-r10, pc}	@ return
+	ldmia	sp!, {r4,r5,r6,r7,r8,r9,r10, pc}	@ return
 
 .size	bsaes_xts_decrypt,.-bsaes_xts_decrypt
 #endif
diff --git a/linux-arm/crypto/bn/armv4-mont.S b/linux-arm/crypto/bn/armv4-mont.S
index fa30dab..81dcbeb 100644
--- a/linux-arm/crypto/bn/armv4-mont.S
+++ b/linux-arm/crypto/bn/armv4-mont.S
@@ -3,26 +3,30 @@
 .text
 .code	32
 
-#if __ARM_ARCH__>=7
+#if __ARM_MAX_ARCH__>=7
 .align	5
 .LOPENSSL_armcap:
-.word	OPENSSL_armcap_P-bn_mul_mont
+.word	OPENSSL_armcap_P-.Lbn_mul_mont
 #endif
 
-.global	bn_mul_mont
+.globl	bn_mul_mont
 .hidden	bn_mul_mont
 .type	bn_mul_mont,%function
 
 .align	5
 bn_mul_mont:
+.Lbn_mul_mont:
 	ldr	ip,[sp,#4]		@ load num
 	stmdb	sp!,{r0,r2}		@ sp points at argument block
-#if __ARM_ARCH__>=7
+#if __ARM_MAX_ARCH__>=7
 	tst	ip,#7
 	bne	.Lialu
 	adr	r0,bn_mul_mont
 	ldr	r2,.LOPENSSL_armcap
 	ldr	r0,[r0,r2]
+#ifdef	__APPLE__
+	ldr	r0,[r0]
+#endif
 	tst	r0,#1			@ NEON available?
 	ldmia	sp, {r0,r2}
 	beq	.Lialu
@@ -37,7 +41,7 @@
 	addlt	sp,sp,#2*4
 	blt	.Labrt
 
-	stmdb	sp!,{r4-r12,lr}		@ save 10 registers
+	stmdb	sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr}		@ save 10 registers
 
 	mov	r0,r0,lsl#2		@ rescale r0 for byte count
 	sub	sp,sp,r0		@ alloca(4*num)
@@ -81,7 +85,7 @@
 	adc	r14,r14,#0
 	str	r12,[r0]		@ tp[num-1]=
 	str	r14,[r0,#4]		@ tp[num]=
-
+
 .Louter:
 	sub	r7,r0,sp		@ "original" r0-1 value
 	sub	r1,r1,r7		@ "rewind" ap to &ap[1]
@@ -129,7 +133,7 @@
 
 	cmp	r4,r7
 	bne	.Louter
-
+
 	ldr	r2,[r0,#12*4]		@ pull rp
 	add	r0,r0,#4		@ r0 to point at &tp[num]
 	sub	r5,r0,sp		@ "original" num value
@@ -159,34 +163,40 @@
 	bne	.Lcopy
 
 	add	sp,r0,#4		@ skip over tp[num+1]
-	ldmia	sp!,{r4-r12,lr}		@ restore registers
+	ldmia	sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr}		@ restore registers
 	add	sp,sp,#2*4		@ skip over {r0,r2}
 	mov	r0,#1
-.Labrt:	tst	lr,#1
+.Labrt:
+#if __ARM_ARCH__>=5
+	bx	lr				@ .word	0xe12fff1e
+#else
+	tst	lr,#1
 	moveq	pc,lr			@ be binary compatible with V4, yet
-	.word	0xe12fff1e			@ interoperable with Thumb ISA:-)
+.word	0xe12fff1e			@ interoperable with Thumb ISA:-)
+#endif
 .size	bn_mul_mont,.-bn_mul_mont
-#if __ARM_ARCH__>=7
+#if __ARM_MAX_ARCH__>=7
+.arch	armv7-a
 .fpu	neon
 
 .type	bn_mul8x_mont_neon,%function
 .align	5
 bn_mul8x_mont_neon:
 	mov	ip,sp
-	stmdb	sp!,{r4-r11}
-	vstmdb	sp!,{d8-d15}		@ ABI specification says so
-	ldmia	ip,{r4-r5}		@ load rest of parameter block
+	stmdb	sp!,{r4,r5,r6,r7,r8,r9,r10,r11}
+	vstmdb	sp!,{d8,d9,d10,d11,d12,d13,d14,d15}		@ ABI specification says so
+	ldmia	ip,{r4,r5}		@ load rest of parameter block
 
-	sub		r7,sp,#16
-	vld1.32		{d28[0]}, [r2,:32]!
-	sub		r7,r7,r5,lsl#4
-	vld1.32		{d0-d3},  [r1]!		@ can't specify :32 :-(
-	and		r7,r7,#-64
-	vld1.32		{d30[0]}, [r4,:32]
-	mov		sp,r7			@ alloca
-	veor		d8,d8,d8
-	subs		r8,r5,#8
-	vzip.16		d28,d8
+	sub	r7,sp,#16
+	vld1.32	{d28[0]}, [r2,:32]!
+	sub	r7,r7,r5,lsl#4
+	vld1.32	{d0,d1,d2,d3},  [r1]!		@ can't specify :32 :-(
+	and	r7,r7,#-64
+	vld1.32	{d30[0]}, [r4,:32]
+	mov	sp,r7			@ alloca
+	veor	d8,d8,d8
+	subs	r8,r5,#8
+	vzip.16	d28,d8
 
 	vmull.u32	q6,d28,d0[0]
 	vmull.u32	q7,d28,d0[1]
@@ -195,14 +205,14 @@
 	vmull.u32	q9,d28,d1[1]
 
 	vadd.u64	d10,d10,d12
-	veor		d8,d8,d8
+	veor	d8,d8,d8
 	vmul.u32	d29,d10,d30
 
 	vmull.u32	q10,d28,d2[0]
-	 vld1.32	{d4-d7}, [r3]!
+	vld1.32	{d4,d5,d6,d7}, [r3]!
 	vmull.u32	q11,d28,d2[1]
 	vmull.u32	q12,d28,d3[0]
-	vzip.16		d29,d8
+	vzip.16	d29,d8
 	vmull.u32	q13,d28,d3[1]
 
 	bne	.LNEON_1st
@@ -210,35 +220,35 @@
 	@ special case for num=8, everything is in register bank...
 
 	vmlal.u32	q6,d29,d4[0]
-	sub		r9,r5,#1
+	sub	r9,r5,#1
 	vmlal.u32	q7,d29,d4[1]
 	vmlal.u32	q8,d29,d5[0]
 	vmlal.u32	q9,d29,d5[1]
 
 	vmlal.u32	q10,d29,d6[0]
-	vmov		q5,q6
+	vmov	q5,q6
 	vmlal.u32	q11,d29,d6[1]
-	vmov		q6,q7
+	vmov	q6,q7
 	vmlal.u32	q12,d29,d7[0]
-	vmov		q7,q8
+	vmov	q7,q8
 	vmlal.u32	q13,d29,d7[1]
-	vmov		q8,q9
-	vmov		q9,q10
+	vmov	q8,q9
+	vmov	q9,q10
 	vshr.u64	d10,d10,#16
-	vmov		q10,q11
-	vmov		q11,q12
+	vmov	q10,q11
+	vmov	q11,q12
 	vadd.u64	d10,d10,d11
-	vmov		q12,q13
-	veor		q13,q13
+	vmov	q12,q13
+	veor	q13,q13
 	vshr.u64	d10,d10,#16
 
 	b	.LNEON_outer8
 
 .align	4
 .LNEON_outer8:
-	vld1.32		{d28[0]}, [r2,:32]!
-	veor		d8,d8,d8
-	vzip.16		d28,d8
+	vld1.32	{d28[0]}, [r2,:32]!
+	veor	d8,d8,d8
+	vzip.16	d28,d8
 	vadd.u64	d12,d12,d10
 
 	vmlal.u32	q6,d28,d0[0]
@@ -248,14 +258,14 @@
 	vmlal.u32	q9,d28,d1[1]
 
 	vadd.u64	d10,d10,d12
-	veor		d8,d8,d8
-	subs		r9,r9,#1
+	veor	d8,d8,d8
+	subs	r9,r9,#1
 	vmul.u32	d29,d10,d30
 
 	vmlal.u32	q10,d28,d2[0]
 	vmlal.u32	q11,d28,d2[1]
 	vmlal.u32	q12,d28,d3[0]
-	vzip.16		d29,d8
+	vzip.16	d29,d8
 	vmlal.u32	q13,d28,d3[1]
 
 	vmlal.u32	q6,d29,d4[0]
@@ -264,59 +274,59 @@
 	vmlal.u32	q9,d29,d5[1]
 
 	vmlal.u32	q10,d29,d6[0]
-	vmov		q5,q6
+	vmov	q5,q6
 	vmlal.u32	q11,d29,d6[1]
-	vmov		q6,q7
+	vmov	q6,q7
 	vmlal.u32	q12,d29,d7[0]
-	vmov		q7,q8
+	vmov	q7,q8
 	vmlal.u32	q13,d29,d7[1]
-	vmov		q8,q9
-	vmov		q9,q10
+	vmov	q8,q9
+	vmov	q9,q10
 	vshr.u64	d10,d10,#16
-	vmov		q10,q11
-	vmov		q11,q12
+	vmov	q10,q11
+	vmov	q11,q12
 	vadd.u64	d10,d10,d11
-	vmov		q12,q13
-	veor		q13,q13
+	vmov	q12,q13
+	veor	q13,q13
 	vshr.u64	d10,d10,#16
 
 	bne	.LNEON_outer8
 
 	vadd.u64	d12,d12,d10
-	mov		r7,sp
+	mov	r7,sp
 	vshr.u64	d10,d12,#16
-	mov		r8,r5
+	mov	r8,r5
 	vadd.u64	d13,d13,d10
-	add		r6,sp,#16
+	add	r6,sp,#16
 	vshr.u64	d10,d13,#16
-	vzip.16		d12,d13
+	vzip.16	d12,d13
 
 	b	.LNEON_tail2
 
 .align	4
 .LNEON_1st:
 	vmlal.u32	q6,d29,d4[0]
-	 vld1.32	{d0-d3}, [r1]!
+	vld1.32	{d0,d1,d2,d3}, [r1]!
 	vmlal.u32	q7,d29,d4[1]
-	subs		r8,r8,#8
+	subs	r8,r8,#8
 	vmlal.u32	q8,d29,d5[0]
 	vmlal.u32	q9,d29,d5[1]
 
 	vmlal.u32	q10,d29,d6[0]
-	 vld1.32	{d4-d5}, [r3]!
+	vld1.32	{d4,d5}, [r3]!
 	vmlal.u32	q11,d29,d6[1]
-	 vst1.64	{q6-q7}, [r7,:256]!
+	vst1.64	{q6,q7}, [r7,:256]!
 	vmlal.u32	q12,d29,d7[0]
 	vmlal.u32	q13,d29,d7[1]
-	 vst1.64	{q8-q9}, [r7,:256]!
+	vst1.64	{q8,q9}, [r7,:256]!
 
 	vmull.u32	q6,d28,d0[0]
-	 vld1.32	{d6-d7}, [r3]!
+	vld1.32	{d6,d7}, [r3]!
 	vmull.u32	q7,d28,d0[1]
-	 vst1.64	{q10-q11}, [r7,:256]!
+	vst1.64	{q10,q11}, [r7,:256]!
 	vmull.u32	q8,d28,d1[0]
 	vmull.u32	q9,d28,d1[1]
-	 vst1.64	{q12-q13}, [r7,:256]!
+	vst1.64	{q12,q13}, [r7,:256]!
 
 	vmull.u32	q10,d28,d2[0]
 	vmull.u32	q11,d28,d2[1]
@@ -326,93 +336,93 @@
 	bne	.LNEON_1st
 
 	vmlal.u32	q6,d29,d4[0]
-	add		r6,sp,#16
+	add	r6,sp,#16
 	vmlal.u32	q7,d29,d4[1]
-	sub		r1,r1,r5,lsl#2		@ rewind r1
+	sub	r1,r1,r5,lsl#2		@ rewind r1
 	vmlal.u32	q8,d29,d5[0]
-	 vld1.64	{q5}, [sp,:128]
+	vld1.64	{q5}, [sp,:128]
 	vmlal.u32	q9,d29,d5[1]
-	sub		r9,r5,#1
+	sub	r9,r5,#1
 
 	vmlal.u32	q10,d29,d6[0]
-	vst1.64		{q6-q7}, [r7,:256]!
+	vst1.64	{q6,q7}, [r7,:256]!
 	vmlal.u32	q11,d29,d6[1]
 	vshr.u64	d10,d10,#16
-	 vld1.64	{q6},       [r6, :128]!
+	vld1.64	{q6},       [r6, :128]!
 	vmlal.u32	q12,d29,d7[0]
-	vst1.64		{q8-q9}, [r7,:256]!
+	vst1.64	{q8,q9}, [r7,:256]!
 	vmlal.u32	q13,d29,d7[1]
 
-	vst1.64		{q10-q11}, [r7,:256]!
+	vst1.64	{q10,q11}, [r7,:256]!
 	vadd.u64	d10,d10,d11
-	veor		q4,q4,q4
-	vst1.64		{q12-q13}, [r7,:256]!
-	 vld1.64	{q7-q8}, [r6, :256]!
-	vst1.64		{q4},          [r7,:128]
+	veor	q4,q4,q4
+	vst1.64	{q12,q13}, [r7,:256]!
+	vld1.64	{q7,q8}, [r6, :256]!
+	vst1.64	{q4},          [r7,:128]
 	vshr.u64	d10,d10,#16
 
-	b		.LNEON_outer
+	b	.LNEON_outer
 
 .align	4
 .LNEON_outer:
-	vld1.32		{d28[0]}, [r2,:32]!
-	sub		r3,r3,r5,lsl#2		@ rewind r3
-	vld1.32		{d0-d3},  [r1]!
-	veor		d8,d8,d8
-	mov		r7,sp
-	vzip.16		d28,d8
-	sub		r8,r5,#8
+	vld1.32	{d28[0]}, [r2,:32]!
+	sub	r3,r3,r5,lsl#2		@ rewind r3
+	vld1.32	{d0,d1,d2,d3},  [r1]!
+	veor	d8,d8,d8
+	mov	r7,sp
+	vzip.16	d28,d8
+	sub	r8,r5,#8
 	vadd.u64	d12,d12,d10
 
 	vmlal.u32	q6,d28,d0[0]
-	 vld1.64	{q9-q10},[r6,:256]!
+	vld1.64	{q9,q10},[r6,:256]!
 	vmlal.u32	q7,d28,d0[1]
 	vmlal.u32	q8,d28,d1[0]
-	 vld1.64	{q11-q12},[r6,:256]!
+	vld1.64	{q11,q12},[r6,:256]!
 	vmlal.u32	q9,d28,d1[1]
 
 	vshl.i64	d10,d13,#16
-	veor		d8,d8,d8
+	veor	d8,d8,d8
 	vadd.u64	d10,d10,d12
-	 vld1.64	{q13},[r6,:128]!
+	vld1.64	{q13},[r6,:128]!
 	vmul.u32	d29,d10,d30
 
 	vmlal.u32	q10,d28,d2[0]
-	 vld1.32	{d4-d7}, [r3]!
+	vld1.32	{d4,d5,d6,d7}, [r3]!
 	vmlal.u32	q11,d28,d2[1]
 	vmlal.u32	q12,d28,d3[0]
-	vzip.16		d29,d8
+	vzip.16	d29,d8
 	vmlal.u32	q13,d28,d3[1]
 
 .LNEON_inner:
 	vmlal.u32	q6,d29,d4[0]
-	 vld1.32	{d0-d3}, [r1]!
+	vld1.32	{d0,d1,d2,d3}, [r1]!
 	vmlal.u32	q7,d29,d4[1]
-	 subs		r8,r8,#8
+	subs	r8,r8,#8
 	vmlal.u32	q8,d29,d5[0]
 	vmlal.u32	q9,d29,d5[1]
-	vst1.64		{q6-q7}, [r7,:256]!
+	vst1.64	{q6,q7}, [r7,:256]!
 
 	vmlal.u32	q10,d29,d6[0]
-	 vld1.64	{q6},       [r6, :128]!
+	vld1.64	{q6},       [r6, :128]!
 	vmlal.u32	q11,d29,d6[1]
-	vst1.64		{q8-q9}, [r7,:256]!
+	vst1.64	{q8,q9}, [r7,:256]!
 	vmlal.u32	q12,d29,d7[0]
-	 vld1.64	{q7-q8}, [r6, :256]!
+	vld1.64	{q7,q8}, [r6, :256]!
 	vmlal.u32	q13,d29,d7[1]
-	vst1.64		{q10-q11}, [r7,:256]!
+	vst1.64	{q10,q11}, [r7,:256]!
 
 	vmlal.u32	q6,d28,d0[0]
-	 vld1.64	{q9-q10}, [r6, :256]!
+	vld1.64	{q9,q10}, [r6, :256]!
 	vmlal.u32	q7,d28,d0[1]
-	vst1.64		{q12-q13}, [r7,:256]!
+	vst1.64	{q12,q13}, [r7,:256]!
 	vmlal.u32	q8,d28,d1[0]
-	 vld1.64	{q11-q12}, [r6, :256]!
+	vld1.64	{q11,q12}, [r6, :256]!
 	vmlal.u32	q9,d28,d1[1]
-	 vld1.32	{d4-d7}, [r3]!
+	vld1.32	{d4,d5,d6,d7}, [r3]!
 
 	vmlal.u32	q10,d28,d2[0]
-	 vld1.64	{q13},       [r6, :128]!
+	vld1.64	{q13},       [r6, :128]!
 	vmlal.u32	q11,d28,d2[1]
 	vmlal.u32	q12,d28,d3[0]
 	vmlal.u32	q13,d28,d3[1]
@@ -420,97 +430,97 @@
 	bne	.LNEON_inner
 
 	vmlal.u32	q6,d29,d4[0]
-	add		r6,sp,#16
+	add	r6,sp,#16
 	vmlal.u32	q7,d29,d4[1]
-	sub		r1,r1,r5,lsl#2		@ rewind r1
+	sub	r1,r1,r5,lsl#2		@ rewind r1
 	vmlal.u32	q8,d29,d5[0]
-	 vld1.64	{q5}, [sp,:128]
+	vld1.64	{q5}, [sp,:128]
 	vmlal.u32	q9,d29,d5[1]
-	subs		r9,r9,#1
+	subs	r9,r9,#1
 
 	vmlal.u32	q10,d29,d6[0]
-	vst1.64		{q6-q7}, [r7,:256]!
+	vst1.64	{q6,q7}, [r7,:256]!
 	vmlal.u32	q11,d29,d6[1]
-	 vld1.64	{q6},       [r6, :128]!
+	vld1.64	{q6},       [r6, :128]!
 	vshr.u64	d10,d10,#16
-	vst1.64		{q8-q9}, [r7,:256]!
+	vst1.64	{q8,q9}, [r7,:256]!
 	vmlal.u32	q12,d29,d7[0]
-	 vld1.64	{q7-q8}, [r6, :256]!
+	vld1.64	{q7,q8}, [r6, :256]!
 	vmlal.u32	q13,d29,d7[1]
 
-	vst1.64		{q10-q11}, [r7,:256]!
+	vst1.64	{q10,q11}, [r7,:256]!
 	vadd.u64	d10,d10,d11
-	vst1.64		{q12-q13}, [r7,:256]!
+	vst1.64	{q12,q13}, [r7,:256]!
 	vshr.u64	d10,d10,#16
 
 	bne	.LNEON_outer
 
-	mov		r7,sp
-	mov		r8,r5
+	mov	r7,sp
+	mov	r8,r5
 
 .LNEON_tail:
 	vadd.u64	d12,d12,d10
-	vld1.64		{q9-q10}, [r6, :256]!
+	vld1.64	{q9,q10}, [r6, :256]!
 	vshr.u64	d10,d12,#16
 	vadd.u64	d13,d13,d10
-	vld1.64		{q11-q12}, [r6, :256]!
+	vld1.64	{q11,q12}, [r6, :256]!
 	vshr.u64	d10,d13,#16
-	vld1.64		{q13},       [r6, :128]!
-	vzip.16		d12,d13
+	vld1.64	{q13},       [r6, :128]!
+	vzip.16	d12,d13
 
 .LNEON_tail2:
 	vadd.u64	d14,d14,d10
-	vst1.32		{d12[0]}, [r7, :32]!
+	vst1.32	{d12[0]}, [r7, :32]!
 	vshr.u64	d10,d14,#16
 	vadd.u64	d15,d15,d10
 	vshr.u64	d10,d15,#16
-	vzip.16		d14,d15
+	vzip.16	d14,d15
 
 	vadd.u64	d16,d16,d10
-	vst1.32		{d14[0]}, [r7, :32]!
+	vst1.32	{d14[0]}, [r7, :32]!
 	vshr.u64	d10,d16,#16
 	vadd.u64	d17,d17,d10
 	vshr.u64	d10,d17,#16
-	vzip.16		d16,d17
+	vzip.16	d16,d17
 
 	vadd.u64	d18,d18,d10
-	vst1.32		{d16[0]}, [r7, :32]!
+	vst1.32	{d16[0]}, [r7, :32]!
 	vshr.u64	d10,d18,#16
 	vadd.u64	d19,d19,d10
 	vshr.u64	d10,d19,#16
-	vzip.16		d18,d19
+	vzip.16	d18,d19
 
 	vadd.u64	d20,d20,d10
-	vst1.32		{d18[0]}, [r7, :32]!
+	vst1.32	{d18[0]}, [r7, :32]!
 	vshr.u64	d10,d20,#16
 	vadd.u64	d21,d21,d10
 	vshr.u64	d10,d21,#16
-	vzip.16		d20,d21
+	vzip.16	d20,d21
 
 	vadd.u64	d22,d22,d10
-	vst1.32		{d20[0]}, [r7, :32]!
+	vst1.32	{d20[0]}, [r7, :32]!
 	vshr.u64	d10,d22,#16
 	vadd.u64	d23,d23,d10
 	vshr.u64	d10,d23,#16
-	vzip.16		d22,d23
+	vzip.16	d22,d23
 
 	vadd.u64	d24,d24,d10
-	vst1.32		{d22[0]}, [r7, :32]!
+	vst1.32	{d22[0]}, [r7, :32]!
 	vshr.u64	d10,d24,#16
 	vadd.u64	d25,d25,d10
-	vld1.64		{q6}, [r6, :128]!
+	vld1.64	{q6}, [r6, :128]!
 	vshr.u64	d10,d25,#16
-	vzip.16		d24,d25
+	vzip.16	d24,d25
 
 	vadd.u64	d26,d26,d10
-	vst1.32		{d24[0]}, [r7, :32]!
+	vst1.32	{d24[0]}, [r7, :32]!
 	vshr.u64	d10,d26,#16
 	vadd.u64	d27,d27,d10
-	vld1.64		{q7-q8},	[r6, :256]!
+	vld1.64	{q7,q8},	[r6, :256]!
 	vshr.u64	d10,d27,#16
-	vzip.16		d26,d27
-	subs		r8,r8,#8
-	vst1.32		{d26[0]}, [r7, :32]!
+	vzip.16	d26,d27
+	subs	r8,r8,#8
+	vst1.32	{d26[0]}, [r7, :32]!
 
 	bne	.LNEON_tail
 
@@ -520,14 +530,14 @@
 	add	r2,sp,r5,lsl#2
 
 .LNEON_sub:
-	ldmia	r1!, {r4-r7}
-	ldmia	r3!, {r8-r11}
+	ldmia	r1!, {r4,r5,r6,r7}
+	ldmia	r3!, {r8,r9,r10,r11}
 	sbcs	r8, r4,r8
 	sbcs	r9, r5,r9
 	sbcs	r10,r6,r10
 	sbcs	r11,r7,r11
 	teq	r1,r2				@ preserves carry
-	stmia	r0!, {r8-r11}
+	stmia	r0!, {r8,r9,r10,r11}
 	bne	.LNEON_sub
 
 	ldr	r10, [r1]				@ load top-most bit
@@ -540,36 +550,38 @@
 	sbcs	r10,r10,#0				@ result is carry flag
 
 .LNEON_copy_n_zap:
-	ldmia	r1!, {r4-r7}
-	ldmia	r0,  {r8-r11}
+	ldmia	r1!, {r4,r5,r6,r7}
+	ldmia	r0,  {r8,r9,r10,r11}
 	movcc	r8, r4
-	vst1.64	{q0-q1}, [r3,:256]!			@ wipe
+	vst1.64	{q0,q1}, [r3,:256]!			@ wipe
 	movcc	r9, r5
 	movcc	r10,r6
-	vst1.64	{q0-q1}, [r3,:256]!			@ wipe
+	vst1.64	{q0,q1}, [r3,:256]!			@ wipe
 	movcc	r11,r7
-	ldmia	r1, {r4-r7}
-	stmia	r0!, {r8-r11}
+	ldmia	r1, {r4,r5,r6,r7}
+	stmia	r0!, {r8,r9,r10,r11}
 	sub	r1,r1,#16
-	ldmia	r0, {r8-r11}
+	ldmia	r0, {r8,r9,r10,r11}
 	movcc	r8, r4
-	vst1.64	{q0-q1}, [r1,:256]!			@ wipe
+	vst1.64	{q0,q1}, [r1,:256]!			@ wipe
 	movcc	r9, r5
 	movcc	r10,r6
-	vst1.64	{q0-q1}, [r3,:256]!			@ wipe
+	vst1.64	{q0,q1}, [r3,:256]!			@ wipe
 	movcc	r11,r7
 	teq	r1,r2				@ preserves carry
-	stmia	r0!, {r8-r11}
+	stmia	r0!, {r8,r9,r10,r11}
 	bne	.LNEON_copy_n_zap
 
 	sub	sp,ip,#96
-        vldmia  sp!,{d8-d15}
-        ldmia   sp!,{r4-r11}
-	.word	0xe12fff1e
+	vldmia	sp!,{d8,d9,d10,d11,d12,d13,d14,d15}
+	ldmia	sp!,{r4,r5,r6,r7,r8,r9,r10,r11}
+	bx	lr						@ .word	0xe12fff1e
 .size	bn_mul8x_mont_neon,.-bn_mul8x_mont_neon
 #endif
-.asciz	"Montgomery multiplication for ARMv4/NEON, CRYPTOGAMS by <appro@openssl.org>"
+.byte	77,111,110,116,103,111,109,101,114,121,32,109,117,108,116,105,112,108,105,99,97,116,105,111,110,32,102,111,114,32,65,82,77,118,52,47,78,69,79,78,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
 .align	2
-#if __ARM_ARCH__>=7
+.align	2
+#if __ARM_MAX_ARCH__>=7
 .comm	OPENSSL_armcap_P,4,4
+.hidden	OPENSSL_armcap_P
 #endif
diff --git a/linux-arm/crypto/modes/ghash-armv4.S b/linux-arm/crypto/modes/ghash-armv4.S
index 8c81975..b6c7e9b 100644
--- a/linux-arm/crypto/modes/ghash-armv4.S
+++ b/linux-arm/crypto/modes/ghash-armv4.S
@@ -1,11 +1,16 @@
 #if defined(__arm__)
 #include "arm_arch.h"
 
-.syntax unified
+.syntax	unified
 
 .text
 .code	32
 
+#ifdef  __APPLE__
+#define ldrplb  ldrbpl
+#define ldrneb  ldrbne
+#endif
+
 .type	rem_4bit,%object
 .align	5
 rem_4bit:
@@ -23,17 +28,17 @@
 	nop
 .size	rem_4bit_get,.-rem_4bit_get
 
-.global	gcm_ghash_4bit
+.globl	gcm_ghash_4bit
 .hidden	gcm_ghash_4bit
 .type	gcm_ghash_4bit,%function
 gcm_ghash_4bit:
 	sub	r12,pc,#8
 	add	r3,r2,r3		@ r3 to point at the end
-	stmdb	sp!,{r3-r11,lr}		@ save r3/end too
+	stmdb	sp!,{r3,r4,r5,r6,r7,r8,r9,r10,r11,lr}		@ save r3/end too
 	sub	r12,r12,#48		@ &rem_4bit
 
-	ldmia	r12,{r4-r11}		@ copy rem_4bit ...
-	stmdb	sp!,{r4-r11}		@ ... to stack
+	ldmia	r12,{r4,r5,r6,r7,r8,r9,r10,r11}		@ copy rem_4bit ...
+	stmdb	sp!,{r4,r5,r6,r7,r8,r9,r10,r11}		@ ... to stack
 
 	ldrb	r12,[r2,#15]
 	ldrb	r14,[r0,#15]
@@ -44,12 +49,12 @@
 	mov	r3,#14
 
 	add	r7,r1,r12,lsl#4
-	ldmia	r7,{r4-r7}	@ load Htbl[nlo]
+	ldmia	r7,{r4,r5,r6,r7}	@ load Htbl[nlo]
 	add	r11,r1,r14
 	ldrb	r12,[r2,#14]
 
 	and	r14,r4,#0xf		@ rem
-	ldmia	r11,{r8-r11}	@ load Htbl[nhi]
+	ldmia	r11,{r8,r9,r10,r11}	@ load Htbl[nhi]
 	add	r14,r14,r14
 	eor	r4,r8,r4,lsr#4
 	ldrh	r8,[sp,r14]		@ rem_4bit[rem]
@@ -70,7 +75,7 @@
 	and	r12,r4,#0xf		@ rem
 	subs	r3,r3,#1
 	add	r12,r12,r12
-	ldmia	r11,{r8-r11}	@ load Htbl[nlo]
+	ldmia	r11,{r8,r9,r10,r11}	@ load Htbl[nlo]
 	eor	r4,r8,r4,lsr#4
 	eor	r4,r4,r5,lsl#28
 	eor	r5,r9,r5,lsr#4
@@ -85,7 +90,7 @@
 	and	r14,r4,#0xf		@ rem
 	eor	r7,r7,r8,lsl#16	@ ^= rem_4bit[rem]
 	add	r14,r14,r14
-	ldmia	r11,{r8-r11}	@ load Htbl[nhi]
+	ldmia	r11,{r8,r9,r10,r11}	@ load Htbl[nhi]
 	eor	r4,r8,r4,lsr#4
 	ldrbpl	r8,[r0,r3]
 	eor	r4,r4,r5,lsl#28
@@ -148,7 +153,7 @@
 	strb	r10,[r0,#4+1]
 	strb	r11,[r0,#4]
 #endif
-	
+
 #if __ARM_ARCH__>=7 && defined(__ARMEL__)
 	rev	r7,r7
 	str	r7,[r0,#0]
@@ -163,25 +168,25 @@
 	strb	r10,[r0,#0+1]
 	strb	r11,[r0,#0]
 #endif
-	
+
 	bne	.Louter
 
 	add	sp,sp,#36
 #if __ARM_ARCH__>=5
-	ldmia	sp!,{r4-r11,pc}
+	ldmia	sp!,{r4,r5,r6,r7,r8,r9,r10,r11,pc}
 #else
-	ldmia	sp!,{r4-r11,lr}
+	ldmia	sp!,{r4,r5,r6,r7,r8,r9,r10,r11,lr}
 	tst	lr,#1
 	moveq	pc,lr			@ be binary compatible with V4, yet
-	.word	0xe12fff1e			@ interoperable with Thumb ISA:-)
+.word	0xe12fff1e			@ interoperable with Thumb ISA:-)
 #endif
 .size	gcm_ghash_4bit,.-gcm_ghash_4bit
 
-.global	gcm_gmult_4bit
+.globl	gcm_gmult_4bit
 .hidden	gcm_gmult_4bit
 .type	gcm_gmult_4bit,%function
 gcm_gmult_4bit:
-	stmdb	sp!,{r4-r11,lr}
+	stmdb	sp!,{r4,r5,r6,r7,r8,r9,r10,r11,lr}
 	ldrb	r12,[r0,#15]
 	b	rem_4bit_get
 .Lrem_4bit_got:
@@ -190,12 +195,12 @@
 	mov	r3,#14
 
 	add	r7,r1,r12,lsl#4
-	ldmia	r7,{r4-r7}	@ load Htbl[nlo]
+	ldmia	r7,{r4,r5,r6,r7}	@ load Htbl[nlo]
 	ldrb	r12,[r0,#14]
 
 	add	r11,r1,r14
 	and	r14,r4,#0xf		@ rem
-	ldmia	r11,{r8-r11}	@ load Htbl[nhi]
+	ldmia	r11,{r8,r9,r10,r11}	@ load Htbl[nhi]
 	add	r14,r14,r14
 	eor	r4,r8,r4,lsr#4
 	ldrh	r8,[r2,r14]	@ rem_4bit[rem]
@@ -214,7 +219,7 @@
 	and	r12,r4,#0xf		@ rem
 	subs	r3,r3,#1
 	add	r12,r12,r12
-	ldmia	r11,{r8-r11}	@ load Htbl[nlo]
+	ldmia	r11,{r8,r9,r10,r11}	@ load Htbl[nlo]
 	eor	r4,r8,r4,lsr#4
 	eor	r4,r4,r5,lsl#28
 	eor	r5,r9,r5,lsr#4
@@ -229,7 +234,7 @@
 	and	r14,r4,#0xf		@ rem
 	eor	r7,r7,r8,lsl#16	@ ^= rem_4bit[rem]
 	add	r14,r14,r14
-	ldmia	r11,{r8-r11}	@ load Htbl[nhi]
+	ldmia	r11,{r8,r9,r10,r11}	@ load Htbl[nhi]
 	eor	r4,r8,r4,lsr#4
 	eor	r4,r4,r5,lsl#28
 	eor	r5,r9,r5,lsr#4
@@ -256,7 +261,7 @@
 	strb	r10,[r0,#12+1]
 	strb	r11,[r0,#12]
 #endif
-	
+
 #if __ARM_ARCH__>=7 && defined(__ARMEL__)
 	rev	r5,r5
 	str	r5,[r0,#8]
@@ -271,7 +276,7 @@
 	strb	r10,[r0,#8+1]
 	strb	r11,[r0,#8]
 #endif
-	
+
 #if __ARM_ARCH__>=7 && defined(__ARMEL__)
 	rev	r6,r6
 	str	r6,[r0,#4]
@@ -286,7 +291,7 @@
 	strb	r10,[r0,#4+1]
 	strb	r11,[r0,#4]
 #endif
-	
+
 #if __ARM_ARCH__>=7 && defined(__ARMEL__)
 	rev	r7,r7
 	str	r7,[r0,#0]
@@ -301,232 +306,234 @@
 	strb	r10,[r0,#0+1]
 	strb	r11,[r0,#0]
 #endif
-	
+
 #if __ARM_ARCH__>=5
-	ldmia	sp!,{r4-r11,pc}
+	ldmia	sp!,{r4,r5,r6,r7,r8,r9,r10,r11,pc}
 #else
-	ldmia	sp!,{r4-r11,lr}
+	ldmia	sp!,{r4,r5,r6,r7,r8,r9,r10,r11,lr}
 	tst	lr,#1
 	moveq	pc,lr			@ be binary compatible with V4, yet
-	.word	0xe12fff1e			@ interoperable with Thumb ISA:-)
+.word	0xe12fff1e			@ interoperable with Thumb ISA:-)
 #endif
 .size	gcm_gmult_4bit,.-gcm_gmult_4bit
-#if __ARM_ARCH__>=7
+#if __ARM_MAX_ARCH__>=7
+.arch	armv7-a
 .fpu	neon
 
-.global	gcm_init_neon
+.globl	gcm_init_neon
 .hidden	gcm_init_neon
 .type	gcm_init_neon,%function
 .align	4
 gcm_init_neon:
-	vld1.64		d7,[r1,:64]!	@ load H
-	vmov.i8		q8,#0xe1
-	vld1.64		d6,[r1,:64]
+	vld1.64	d7,[r1]!		@ load H
+	vmov.i8	q8,#0xe1
+	vld1.64	d6,[r1]
 	vshl.i64	d17,#57
 	vshr.u64	d16,#63		@ t0=0xc2....01
-	vdup.8		q9,d7[7]
+	vdup.8	q9,d7[7]
 	vshr.u64	d26,d6,#63
-	vshr.s8		q9,#7			@ broadcast carry bit
+	vshr.s8	q9,#7			@ broadcast carry bit
 	vshl.i64	q3,q3,#1
-	vand		q8,q8,q9
-	vorr		d7,d26		@ H<<<=1
-	veor		q3,q3,q8		@ twisted H
-	vstmia		r0,{q3}
+	vand	q8,q8,q9
+	vorr	d7,d26		@ H<<<=1
+	veor	q3,q3,q8		@ twisted H
+	vstmia	r0,{q3}
 
-	.word	0xe12fff1e
+	bx	lr					@ bx lr
 .size	gcm_init_neon,.-gcm_init_neon
 
-.global	gcm_gmult_neon
+.globl	gcm_gmult_neon
 .hidden	gcm_gmult_neon
 .type	gcm_gmult_neon,%function
 .align	4
 gcm_gmult_neon:
-	vld1.64		d7,[r0,:64]!	@ load Xi
-	vld1.64		d6,[r0,:64]!
+	vld1.64	d7,[r0]!		@ load Xi
+	vld1.64	d6,[r0]!
 	vmov.i64	d29,#0x0000ffffffffffff
-	vldmia		r1,{d26-d27}	@ load twisted H
+	vldmia	r1,{d26,d27}	@ load twisted H
 	vmov.i64	d30,#0x00000000ffffffff
 #ifdef __ARMEL__
 	vrev64.8	q3,q3
 #endif
 	vmov.i64	d31,#0x000000000000ffff
-	veor		d28,d26,d27		@ Karatsuba pre-processing
-	mov		r3,#16
-	b		.Lgmult_neon
+	veor	d28,d26,d27		@ Karatsuba pre-processing
+	mov	r3,#16
+	b	.Lgmult_neon
 .size	gcm_gmult_neon,.-gcm_gmult_neon
 
-.global	gcm_ghash_neon
+.globl	gcm_ghash_neon
 .hidden	gcm_ghash_neon
 .type	gcm_ghash_neon,%function
 .align	4
 gcm_ghash_neon:
-	vld1.64		d1,[r0,:64]!	@ load Xi
-	vld1.64		d0,[r0,:64]!
+	vld1.64	d1,[r0]!		@ load Xi
+	vld1.64	d0,[r0]!
 	vmov.i64	d29,#0x0000ffffffffffff
-	vldmia		r1,{d26-d27}	@ load twisted H
+	vldmia	r1,{d26,d27}	@ load twisted H
 	vmov.i64	d30,#0x00000000ffffffff
 #ifdef __ARMEL__
 	vrev64.8	q0,q0
 #endif
 	vmov.i64	d31,#0x000000000000ffff
-	veor		d28,d26,d27		@ Karatsuba pre-processing
+	veor	d28,d26,d27		@ Karatsuba pre-processing
 
 .Loop_neon:
-	vld1.64		d7,[r2]!		@ load inp
-	vld1.64		d6,[r2]!
+	vld1.64	d7,[r2]!		@ load inp
+	vld1.64	d6,[r2]!
 #ifdef __ARMEL__
 	vrev64.8	q3,q3
 #endif
-	veor		q3,q0			@ inp^=Xi
+	veor	q3,q0			@ inp^=Xi
 .Lgmult_neon:
-	vext.8		d16, d26, d26, #1	@ A1
+	vext.8	d16, d26, d26, #1	@ A1
 	vmull.p8	q8, d16, d6		@ F = A1*B
-	vext.8		d0, d6, d6, #1	@ B1
+	vext.8	d0, d6, d6, #1	@ B1
 	vmull.p8	q0, d26, d0		@ E = A*B1
-	vext.8		d18, d26, d26, #2	@ A2
+	vext.8	d18, d26, d26, #2	@ A2
 	vmull.p8	q9, d18, d6		@ H = A2*B
-	vext.8		d22, d6, d6, #2	@ B2
+	vext.8	d22, d6, d6, #2	@ B2
 	vmull.p8	q11, d26, d22		@ G = A*B2
-	vext.8		d20, d26, d26, #3	@ A3
-	veor		q8, q8, q0		@ L = E + F
+	vext.8	d20, d26, d26, #3	@ A3
+	veor	q8, q8, q0		@ L = E + F
 	vmull.p8	q10, d20, d6		@ J = A3*B
-	vext.8		d0, d6, d6, #3	@ B3
-	veor		q9, q9, q11		@ M = G + H
+	vext.8	d0, d6, d6, #3	@ B3
+	veor	q9, q9, q11		@ M = G + H
 	vmull.p8	q0, d26, d0		@ I = A*B3
-	veor		d16, d16, d17	@ t0 = (L) (P0 + P1) << 8
-	vand		d17, d17, d29
-	vext.8		d22, d6, d6, #4	@ B4
-	veor		d18, d18, d19	@ t1 = (M) (P2 + P3) << 16
-	vand		d19, d19, d30
+	veor	d16, d16, d17	@ t0 = (L) (P0 + P1) << 8
+	vand	d17, d17, d29
+	vext.8	d22, d6, d6, #4	@ B4
+	veor	d18, d18, d19	@ t1 = (M) (P2 + P3) << 16
+	vand	d19, d19, d30
 	vmull.p8	q11, d26, d22		@ K = A*B4
-	veor		q10, q10, q0		@ N = I + J
-	veor		d16, d16, d17
-	veor		d18, d18, d19
-	veor		d20, d20, d21	@ t2 = (N) (P4 + P5) << 24
-	vand		d21, d21, d31
-	vext.8		q8, q8, q8, #15
-	veor		d22, d22, d23	@ t3 = (K) (P6 + P7) << 32
+	veor	q10, q10, q0		@ N = I + J
+	veor	d16, d16, d17
+	veor	d18, d18, d19
+	veor	d20, d20, d21	@ t2 = (N) (P4 + P5) << 24
+	vand	d21, d21, d31
+	vext.8	q8, q8, q8, #15
+	veor	d22, d22, d23	@ t3 = (K) (P6 + P7) << 32
 	vmov.i64	d23, #0
-	vext.8		q9, q9, q9, #14
-	veor		d20, d20, d21
+	vext.8	q9, q9, q9, #14
+	veor	d20, d20, d21
 	vmull.p8	q0, d26, d6		@ D = A*B
-	vext.8		q11, q11, q11, #12
-	vext.8		q10, q10, q10, #13
-	veor		q8, q8, q9
-	veor		q10, q10, q11
-	veor		q0, q0, q8
-	veor		q0, q0, q10
-	veor		d6,d6,d7	@ Karatsuba pre-processing
-	vext.8		d16, d28, d28, #1	@ A1
+	vext.8	q11, q11, q11, #12
+	vext.8	q10, q10, q10, #13
+	veor	q8, q8, q9
+	veor	q10, q10, q11
+	veor	q0, q0, q8
+	veor	q0, q0, q10
+	veor	d6,d6,d7	@ Karatsuba pre-processing
+	vext.8	d16, d28, d28, #1	@ A1
 	vmull.p8	q8, d16, d6		@ F = A1*B
-	vext.8		d2, d6, d6, #1	@ B1
+	vext.8	d2, d6, d6, #1	@ B1
 	vmull.p8	q1, d28, d2		@ E = A*B1
-	vext.8		d18, d28, d28, #2	@ A2
+	vext.8	d18, d28, d28, #2	@ A2
 	vmull.p8	q9, d18, d6		@ H = A2*B
-	vext.8		d22, d6, d6, #2	@ B2
+	vext.8	d22, d6, d6, #2	@ B2
 	vmull.p8	q11, d28, d22		@ G = A*B2
-	vext.8		d20, d28, d28, #3	@ A3
-	veor		q8, q8, q1		@ L = E + F
+	vext.8	d20, d28, d28, #3	@ A3
+	veor	q8, q8, q1		@ L = E + F
 	vmull.p8	q10, d20, d6		@ J = A3*B
-	vext.8		d2, d6, d6, #3	@ B3
-	veor		q9, q9, q11		@ M = G + H
+	vext.8	d2, d6, d6, #3	@ B3
+	veor	q9, q9, q11		@ M = G + H
 	vmull.p8	q1, d28, d2		@ I = A*B3
-	veor		d16, d16, d17	@ t0 = (L) (P0 + P1) << 8
-	vand		d17, d17, d29
-	vext.8		d22, d6, d6, #4	@ B4
-	veor		d18, d18, d19	@ t1 = (M) (P2 + P3) << 16
-	vand		d19, d19, d30
+	veor	d16, d16, d17	@ t0 = (L) (P0 + P1) << 8
+	vand	d17, d17, d29
+	vext.8	d22, d6, d6, #4	@ B4
+	veor	d18, d18, d19	@ t1 = (M) (P2 + P3) << 16
+	vand	d19, d19, d30
 	vmull.p8	q11, d28, d22		@ K = A*B4
-	veor		q10, q10, q1		@ N = I + J
-	veor		d16, d16, d17
-	veor		d18, d18, d19
-	veor		d20, d20, d21	@ t2 = (N) (P4 + P5) << 24
-	vand		d21, d21, d31
-	vext.8		q8, q8, q8, #15
-	veor		d22, d22, d23	@ t3 = (K) (P6 + P7) << 32
+	veor	q10, q10, q1		@ N = I + J
+	veor	d16, d16, d17
+	veor	d18, d18, d19
+	veor	d20, d20, d21	@ t2 = (N) (P4 + P5) << 24
+	vand	d21, d21, d31
+	vext.8	q8, q8, q8, #15
+	veor	d22, d22, d23	@ t3 = (K) (P6 + P7) << 32
 	vmov.i64	d23, #0
-	vext.8		q9, q9, q9, #14
-	veor		d20, d20, d21
+	vext.8	q9, q9, q9, #14
+	veor	d20, d20, d21
 	vmull.p8	q1, d28, d6		@ D = A*B
-	vext.8		q11, q11, q11, #12
-	vext.8		q10, q10, q10, #13
-	veor		q8, q8, q9
-	veor		q10, q10, q11
-	veor		q1, q1, q8
-	veor		q1, q1, q10
-	vext.8		d16, d27, d27, #1	@ A1
+	vext.8	q11, q11, q11, #12
+	vext.8	q10, q10, q10, #13
+	veor	q8, q8, q9
+	veor	q10, q10, q11
+	veor	q1, q1, q8
+	veor	q1, q1, q10
+	vext.8	d16, d27, d27, #1	@ A1
 	vmull.p8	q8, d16, d7		@ F = A1*B
-	vext.8		d4, d7, d7, #1	@ B1
+	vext.8	d4, d7, d7, #1	@ B1
 	vmull.p8	q2, d27, d4		@ E = A*B1
-	vext.8		d18, d27, d27, #2	@ A2
+	vext.8	d18, d27, d27, #2	@ A2
 	vmull.p8	q9, d18, d7		@ H = A2*B
-	vext.8		d22, d7, d7, #2	@ B2
+	vext.8	d22, d7, d7, #2	@ B2
 	vmull.p8	q11, d27, d22		@ G = A*B2
-	vext.8		d20, d27, d27, #3	@ A3
-	veor		q8, q8, q2		@ L = E + F
+	vext.8	d20, d27, d27, #3	@ A3
+	veor	q8, q8, q2		@ L = E + F
 	vmull.p8	q10, d20, d7		@ J = A3*B
-	vext.8		d4, d7, d7, #3	@ B3
-	veor		q9, q9, q11		@ M = G + H
+	vext.8	d4, d7, d7, #3	@ B3
+	veor	q9, q9, q11		@ M = G + H
 	vmull.p8	q2, d27, d4		@ I = A*B3
-	veor		d16, d16, d17	@ t0 = (L) (P0 + P1) << 8
-	vand		d17, d17, d29
-	vext.8		d22, d7, d7, #4	@ B4
-	veor		d18, d18, d19	@ t1 = (M) (P2 + P3) << 16
-	vand		d19, d19, d30
+	veor	d16, d16, d17	@ t0 = (L) (P0 + P1) << 8
+	vand	d17, d17, d29
+	vext.8	d22, d7, d7, #4	@ B4
+	veor	d18, d18, d19	@ t1 = (M) (P2 + P3) << 16
+	vand	d19, d19, d30
 	vmull.p8	q11, d27, d22		@ K = A*B4
-	veor		q10, q10, q2		@ N = I + J
-	veor		d16, d16, d17
-	veor		d18, d18, d19
-	veor		d20, d20, d21	@ t2 = (N) (P4 + P5) << 24
-	vand		d21, d21, d31
-	vext.8		q8, q8, q8, #15
-	veor		d22, d22, d23	@ t3 = (K) (P6 + P7) << 32
+	veor	q10, q10, q2		@ N = I + J
+	veor	d16, d16, d17
+	veor	d18, d18, d19
+	veor	d20, d20, d21	@ t2 = (N) (P4 + P5) << 24
+	vand	d21, d21, d31
+	vext.8	q8, q8, q8, #15
+	veor	d22, d22, d23	@ t3 = (K) (P6 + P7) << 32
 	vmov.i64	d23, #0
-	vext.8		q9, q9, q9, #14
-	veor		d20, d20, d21
+	vext.8	q9, q9, q9, #14
+	veor	d20, d20, d21
 	vmull.p8	q2, d27, d7		@ D = A*B
-	vext.8		q11, q11, q11, #12
-	vext.8		q10, q10, q10, #13
-	veor		q8, q8, q9
-	veor		q10, q10, q11
-	veor		q2, q2, q8
-	veor		q2, q2, q10
-	veor		q1,q1,q0		@ Karatsuba post-processing
-	veor		q1,q1,q2
-	veor		d1,d1,d2
-	veor		d4,d4,d3	@ Xh|Xl - 256-bit result
+	vext.8	q11, q11, q11, #12
+	vext.8	q10, q10, q10, #13
+	veor	q8, q8, q9
+	veor	q10, q10, q11
+	veor	q2, q2, q8
+	veor	q2, q2, q10
+	veor	q1,q1,q0		@ Karatsuba post-processing
+	veor	q1,q1,q2
+	veor	d1,d1,d2
+	veor	d4,d4,d3	@ Xh|Xl - 256-bit result
 
 	@ equivalent of reduction_avx from ghash-x86_64.pl
 	vshl.i64	q9,q0,#57		@ 1st phase
 	vshl.i64	q10,q0,#62
-	veor		q10,q10,q9		@
+	veor	q10,q10,q9		@
 	vshl.i64	q9,q0,#63
-	veor		q10, q10, q9		@
- 	veor		d1,d1,d20	@
-	veor		d4,d4,d21
+	veor	q10, q10, q9		@
+	veor	d1,d1,d20	@
+	veor	d4,d4,d21
 
 	vshr.u64	q10,q0,#1		@ 2nd phase
-	veor		q2,q2,q0
-	veor		q0,q0,q10		@
+	veor	q2,q2,q0
+	veor	q0,q0,q10		@
 	vshr.u64	q10,q10,#6
 	vshr.u64	q0,q0,#1		@
-	veor		q0,q0,q2		@
-	veor		q0,q0,q10		@
+	veor	q0,q0,q2		@
+	veor	q0,q0,q10		@
 
-	subs		r3,#16
-	bne		.Loop_neon
+	subs	r3,#16
+	bne	.Loop_neon
 
 #ifdef __ARMEL__
 	vrev64.8	q0,q0
 #endif
-	sub		r0,#16	
-	vst1.64		d1,[r0,:64]!	@ write out Xi
-	vst1.64		d0,[r0,:64]
+	sub	r0,#16
+	vst1.64	d1,[r0]!		@ write out Xi
+	vst1.64	d0,[r0]
 
-	.word	0xe12fff1e
+	bx	lr					@ bx lr
 .size	gcm_ghash_neon,.-gcm_ghash_neon
 #endif
-.asciz  "GHASH for ARMv4/NEON, CRYPTOGAMS by <appro@openssl.org>"
-.align  2
+.byte	71,72,65,83,72,32,102,111,114,32,65,82,77,118,52,47,78,69,79,78,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
+.align	2
+.align	2
 
 #endif
diff --git a/linux-arm/crypto/modes/ghashv8-armx.S b/linux-arm/crypto/modes/ghashv8-armx.S
index 570d917..71913fb 100644
--- a/linux-arm/crypto/modes/ghashv8-armx.S
+++ b/linux-arm/crypto/modes/ghashv8-armx.S
@@ -3,114 +3,229 @@
 .text
 .fpu	neon
 .code	32
-.global	gcm_init_v8
+.globl	gcm_init_v8
 .type	gcm_init_v8,%function
 .align	4
 gcm_init_v8:
-	vld1.64		{q9},[r1]		@ load H
-	vmov.i8		q8,#0xe1
-	vext.8		q3,q9,q9,#8
-	vshl.i64	q8,q8,#57
-	vshr.u64	q10,q8,#63
-	vext.8		q8,q10,q8,#8		@ t0=0xc2....01
+	vld1.64	{q9},[r1]		@ load input H
+	vmov.i8	q11,#0xe1
+	vshl.i64	q11,q11,#57		@ 0xc2.0
+	vext.8	q3,q9,q9,#8
+	vshr.u64	q10,q11,#63
 	vdup.32	q9,d18[1]
-	vshr.u64	q11,q3,#63
+	vext.8	q8,q10,q11,#8		@ t0=0xc2....01
+	vshr.u64	q10,q3,#63
 	vshr.s32	q9,q9,#31		@ broadcast carry bit
-	vand		q11,q11,q8
+	vand	q10,q10,q8
 	vshl.i64	q3,q3,#1
-	vext.8		q11,q11,q11,#8
-	vand		q8,q8,q9
-	vorr		q3,q3,q11		@ H<<<=1
-	veor		q3,q3,q8		@ twisted H
-	vst1.64		{q3},[r0]
+	vext.8	q10,q10,q10,#8
+	vand	q8,q8,q9
+	vorr	q3,q3,q10		@ H<<<=1
+	veor	q12,q3,q8		@ twisted H
+	vst1.64	{q12},[r0]!		@ store Htable[0]
+
+	@ calculate H^2
+	vext.8	q8,q12,q12,#8		@ Karatsuba pre-processing
+.byte	0xa8,0x0e,0xa8,0xf2	@ pmull q0,q12,q12
+	veor	q8,q8,q12
+.byte	0xa9,0x4e,0xa9,0xf2	@ pmull2 q2,q12,q12
+.byte	0xa0,0x2e,0xa0,0xf2	@ pmull q1,q8,q8
+
+	vext.8	q9,q0,q2,#8		@ Karatsuba post-processing
+	veor	q10,q0,q2
+	veor	q1,q1,q9
+	veor	q1,q1,q10
+.byte	0x26,0x4e,0xe0,0xf2	@ pmull q10,q0,q11		@ 1st phase
+
+	vmov	d4,d3		@ Xh|Xm - 256-bit result
+	vmov	d3,d0		@ Xm is rotated Xl
+	veor	q0,q1,q10
+
+	vext.8	q10,q0,q0,#8		@ 2nd phase
+.byte	0x26,0x0e,0xa0,0xf2	@ pmull q0,q0,q11
+	veor	q10,q10,q2
+	veor	q14,q0,q10
+
+	vext.8	q9,q14,q14,#8		@ Karatsuba pre-processing
+	veor	q9,q9,q14
+	vext.8	q13,q8,q9,#8		@ pack Karatsuba pre-processed
+	vst1.64	{q13,q14},[r0]		@ store Htable[1..2]
 
 	bx	lr
 .size	gcm_init_v8,.-gcm_init_v8
-
-.global	gcm_gmult_v8
+.globl	gcm_gmult_v8
 .type	gcm_gmult_v8,%function
 .align	4
 gcm_gmult_v8:
-	vld1.64		{q9},[r0]		@ load Xi
-	vmov.i8		q11,#0xe1
-	vld1.64		{q12},[r1]		@ load twisted H
+	vld1.64	{q9},[r0]		@ load Xi
+	vmov.i8	q11,#0xe1
+	vld1.64	{q12,q13},[r1]	@ load twisted H, ...
 	vshl.u64	q11,q11,#57
 #ifndef __ARMEB__
 	vrev64.8	q9,q9
 #endif
-	vext.8		q13,q12,q12,#8
-	mov		r3,#0
-	vext.8		q3,q9,q9,#8
-	mov		r12,#0
-	veor		q13,q13,q12		@ Karatsuba pre-processing
-	mov		r2,r0
-	b		.Lgmult_v8
-.size	gcm_gmult_v8,.-gcm_gmult_v8
+	vext.8	q3,q9,q9,#8
 
-.global	gcm_ghash_v8
+.byte	0x86,0x0e,0xa8,0xf2	@ pmull q0,q12,q3		@ H.lo·Xi.lo
+	veor	q9,q9,q3		@ Karatsuba pre-processing
+.byte	0x87,0x4e,0xa9,0xf2	@ pmull2 q2,q12,q3		@ H.hi·Xi.hi
+.byte	0xa2,0x2e,0xaa,0xf2	@ pmull q1,q13,q9		@ (H.lo+H.hi)·(Xi.lo+Xi.hi)
+
+	vext.8	q9,q0,q2,#8		@ Karatsuba post-processing
+	veor	q10,q0,q2
+	veor	q1,q1,q9
+	veor	q1,q1,q10
+.byte	0x26,0x4e,0xe0,0xf2	@ pmull q10,q0,q11		@ 1st phase of reduction
+
+	vmov	d4,d3		@ Xh|Xm - 256-bit result
+	vmov	d3,d0		@ Xm is rotated Xl
+	veor	q0,q1,q10
+
+	vext.8	q10,q0,q0,#8		@ 2nd phase of reduction
+.byte	0x26,0x0e,0xa0,0xf2	@ pmull q0,q0,q11
+	veor	q10,q10,q2
+	veor	q0,q0,q10
+
+#ifndef __ARMEB__
+	vrev64.8	q0,q0
+#endif
+	vext.8	q0,q0,q0,#8
+	vst1.64	{q0},[r0]		@ write out Xi
+
+	bx	lr
+.size	gcm_gmult_v8,.-gcm_gmult_v8
+.globl	gcm_ghash_v8
 .type	gcm_ghash_v8,%function
 .align	4
 gcm_ghash_v8:
-	vld1.64		{q0},[r0]		@ load [rotated] Xi
-	subs		r3,r3,#16
-	vmov.i8		q11,#0xe1
-	mov		r12,#16
-	vld1.64		{q12},[r1]		@ load twisted H
-	moveq	r12,#0
-	vext.8		q0,q0,q0,#8
-	vshl.u64	q11,q11,#57
-	vld1.64		{q9},[r2],r12	@ load [rotated] inp
-	vext.8		q13,q12,q12,#8
+	vstmdb	sp!,{d8,d9,d10,d11,d12,d13,d14,d15}		@ 32-bit ABI says so
+	vld1.64	{q0},[r0]		@ load [rotated] Xi
+						@ "[rotated]" means that
+						@ loaded value would have
+						@ to be rotated in order to
+						@ make it appear as in
+						@ alorithm specification
+	subs	r3,r3,#32		@ see if r3 is 32 or larger
+	mov	r12,#16		@ r12 is used as post-
+						@ increment for input pointer;
+						@ as loop is modulo-scheduled
+						@ r12 is zeroed just in time
+						@ to preclude oversteping
+						@ inp[len], which means that
+						@ last block[s] are actually
+						@ loaded twice, but last
+						@ copy is not processed
+	vld1.64	{q12,q13},[r1]!	@ load twisted H, ..., H^2
+	vmov.i8	q11,#0xe1
+	vld1.64	{q14},[r1]
+	moveq	r12,#0			@ is it time to zero r12?
+	vext.8	q0,q0,q0,#8		@ rotate Xi
+	vld1.64	{q8},[r2]!	@ load [rotated] I[0]
+	vshl.u64	q11,q11,#57		@ compose 0xc2.0 constant
 #ifndef __ARMEB__
+	vrev64.8	q8,q8
 	vrev64.8	q0,q0
+#endif
+	vext.8	q3,q8,q8,#8		@ rotate I[0]
+	blo	.Lodd_tail_v8		@ r3 was less than 32
+	vld1.64	{q9},[r2],r12	@ load [rotated] I[1]
+#ifndef __ARMEB__
 	vrev64.8	q9,q9
 #endif
-	veor		q13,q13,q12		@ Karatsuba pre-processing
-	vext.8		q3,q9,q9,#8
-	b		.Loop_v8
+	vext.8	q7,q9,q9,#8
+	veor	q3,q3,q0		@ I[i]^=Xi
+.byte	0x8e,0x8e,0xa8,0xf2	@ pmull q4,q12,q7		@ H·Ii+1
+	veor	q9,q9,q7		@ Karatsuba pre-processing
+.byte	0x8f,0xce,0xa9,0xf2	@ pmull2 q6,q12,q7
+	b	.Loop_mod2x_v8
 
 .align	4
-.Loop_v8:
-	vext.8		q10,q0,q0,#8
-	veor		q3,q3,q0		@ inp^=Xi
-	veor		q9,q9,q10		@ q9 is rotated inp^Xi
+.Loop_mod2x_v8:
+	vext.8	q10,q3,q3,#8
+	subs	r3,r3,#32		@ is there more data?
+.byte	0x86,0x0e,0xac,0xf2	@ pmull q0,q14,q3		@ H^2.lo·Xi.lo
+	movlo	r12,#0			@ is it time to zero r12?
 
-.Lgmult_v8:
-	.byte	0x86,0x0e,0xa8,0xf2	@ pmull q0,q12,q3		@ H.lo·Xi.lo
-	veor		q9,q9,q3		@ Karatsuba pre-processing
-	.byte	0x87,0x4e,0xa9,0xf2	@ pmull2 q2,q12,q3		@ H.hi·Xi.hi
-	subs		r3,r3,#16
-	.byte	0xa2,0x2e,0xaa,0xf2	@ pmull q1,q13,q9		@ (H.lo+H.hi)·(Xi.lo+Xi.hi)
-	moveq	r12,#0
+.byte	0xa2,0xae,0xaa,0xf2	@ pmull q5,q13,q9
+	veor	q10,q10,q3		@ Karatsuba pre-processing
+.byte	0x87,0x4e,0xad,0xf2	@ pmull2 q2,q14,q3		@ H^2.hi·Xi.hi
+	veor	q0,q0,q4		@ accumulate
+.byte	0xa5,0x2e,0xab,0xf2	@ pmull2 q1,q13,q10		@ (H^2.lo+H^2.hi)·(Xi.lo+Xi.hi)
+	vld1.64	{q8},[r2],r12	@ load [rotated] I[i+2]
 
-	vext.8		q9,q0,q2,#8		@ Karatsuba post-processing
-	veor		q10,q0,q2
-	veor		q1,q1,q9
-	 vld1.64	{q9},[r2],r12	@ load [rotated] inp
-	veor		q1,q1,q10
-	.byte	0x26,0x4e,0xe0,0xf2	@ pmull q10,q0,q11		@ 1st phase
+	veor	q2,q2,q6
+	moveq	r12,#0			@ is it time to zero r12?
+	veor	q1,q1,q5
 
-	vmov		d4,d3		@ Xh|Xm - 256-bit result
-	vmov		d3,d0		@ Xm is rotated Xl
+	vext.8	q9,q0,q2,#8		@ Karatsuba post-processing
+	veor	q10,q0,q2
+	veor	q1,q1,q9
+	vld1.64	{q9},[r2],r12	@ load [rotated] I[i+3]
 #ifndef __ARMEB__
-	 vrev64.8	q9,q9
+	vrev64.8	q8,q8
 #endif
-	veor		q0,q1,q10
-	 vext.8		q3,q9,q9,#8
+	veor	q1,q1,q10
+.byte	0x26,0x4e,0xe0,0xf2	@ pmull q10,q0,q11		@ 1st phase of reduction
 
-	vext.8		q10,q0,q0,#8		@ 2nd phase
-	.byte	0x26,0x0e,0xa0,0xf2	@ pmull q0,q0,q11
-	veor		q10,q10,q2
-	veor		q0,q0,q10
-	bhs		.Loop_v8
+#ifndef __ARMEB__
+	vrev64.8	q9,q9
+#endif
+	vmov	d4,d3		@ Xh|Xm - 256-bit result
+	vmov	d3,d0		@ Xm is rotated Xl
+	vext.8	q7,q9,q9,#8
+	vext.8	q3,q8,q8,#8
+	veor	q0,q1,q10
+.byte	0x8e,0x8e,0xa8,0xf2	@ pmull q4,q12,q7		@ H·Ii+1
+	veor	q3,q3,q2		@ accumulate q3 early
 
+	vext.8	q10,q0,q0,#8		@ 2nd phase of reduction
+.byte	0x26,0x0e,0xa0,0xf2	@ pmull q0,q0,q11
+	veor	q3,q3,q10
+	veor	q9,q9,q7		@ Karatsuba pre-processing
+	veor	q3,q3,q0
+.byte	0x8f,0xce,0xa9,0xf2	@ pmull2 q6,q12,q7
+	bhs	.Loop_mod2x_v8		@ there was at least 32 more bytes
+
+	veor	q2,q2,q10
+	vext.8	q3,q8,q8,#8		@ re-construct q3
+	adds	r3,r3,#32		@ re-construct r3
+	veor	q0,q0,q2		@ re-construct q0
+	beq	.Ldone_v8		@ is r3 zero?
+.Lodd_tail_v8:
+	vext.8	q10,q0,q0,#8
+	veor	q3,q3,q0		@ inp^=Xi
+	veor	q9,q8,q10		@ q9 is rotated inp^Xi
+
+.byte	0x86,0x0e,0xa8,0xf2	@ pmull q0,q12,q3		@ H.lo·Xi.lo
+	veor	q9,q9,q3		@ Karatsuba pre-processing
+.byte	0x87,0x4e,0xa9,0xf2	@ pmull2 q2,q12,q3		@ H.hi·Xi.hi
+.byte	0xa2,0x2e,0xaa,0xf2	@ pmull q1,q13,q9		@ (H.lo+H.hi)·(Xi.lo+Xi.hi)
+
+	vext.8	q9,q0,q2,#8		@ Karatsuba post-processing
+	veor	q10,q0,q2
+	veor	q1,q1,q9
+	veor	q1,q1,q10
+.byte	0x26,0x4e,0xe0,0xf2	@ pmull q10,q0,q11		@ 1st phase of reduction
+
+	vmov	d4,d3		@ Xh|Xm - 256-bit result
+	vmov	d3,d0		@ Xm is rotated Xl
+	veor	q0,q1,q10
+
+	vext.8	q10,q0,q0,#8		@ 2nd phase of reduction
+.byte	0x26,0x0e,0xa0,0xf2	@ pmull q0,q0,q11
+	veor	q10,q10,q2
+	veor	q0,q0,q10
+
+.Ldone_v8:
 #ifndef __ARMEB__
 	vrev64.8	q0,q0
 #endif
-	vext.8		q0,q0,q0,#8
-	vst1.64		{q0},[r0]		@ write out Xi
+	vext.8	q0,q0,q0,#8
+	vst1.64	{q0},[r0]		@ write out Xi
 
+	vldmia	sp!,{d8,d9,d10,d11,d12,d13,d14,d15}		@ 32-bit ABI says so
 	bx	lr
 .size	gcm_ghash_v8,.-gcm_ghash_v8
-.asciz  "GHASH for ARMv8, CRYPTOGAMS by <appro@openssl.org>"
-.align  2
+.byte	71,72,65,83,72,32,102,111,114,32,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
+.align	2
+.align	2
diff --git a/linux-arm/crypto/sha/sha1-armv4-large.S b/linux-arm/crypto/sha/sha1-armv4-large.S
index 5abc328..52c99bf 100644
--- a/linux-arm/crypto/sha/sha1-armv4-large.S
+++ b/linux-arm/crypto/sha/sha1-armv4-large.S
@@ -3,7 +3,7 @@
 .text
 .code	32
 
-.global	sha1_block_data_order
+.globl	sha1_block_data_order
 .type	sha1_block_data_order,%function
 
 .align	5
@@ -12,12 +12,15 @@
 	sub	r3,pc,#8		@ sha1_block_data_order
 	ldr	r12,.LOPENSSL_armcap
 	ldr	r12,[r3,r12]		@ OPENSSL_armcap_P
+#ifdef	__APPLE__
+	ldr	r12,[r12]
+#endif
 	tst	r12,#ARMV8_SHA1
 	bne	.LARMv8
 	tst	r12,#ARMV7_NEON
 	bne	.LNEON
 #endif
-	stmdb	sp!,{r4-r12,lr}
+	stmdb	sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr}
 	add	r2,r1,r2,lsl#6	@ r2 to point at the end of r1
 	ldmia	r0,{r3,r4,r5,r6,r7}
 .Lloop:
@@ -193,7 +196,7 @@
 	add	r6,r6,r7,ror#27			@ E+=ROR(A,27)
 	eor	r9,r9,r11,ror#31
 	str	r9,[r14,#-4]!
-	and r10,r3,r10,ror#2					@ F_xx_xx
+	and	r10,r3,r10,ror#2					@ F_xx_xx
 						@ F_xx_xx
 	add	r6,r6,r9			@ E+=X[i]
 	eor	r10,r10,r5,ror#2		@ F_00_19(B,C,D)
@@ -210,7 +213,7 @@
 	add	r5,r5,r6,ror#27			@ E+=ROR(A,27)
 	eor	r9,r9,r11,ror#31
 	str	r9,[r14,#-4]!
-	and r10,r7,r10,ror#2					@ F_xx_xx
+	and	r10,r7,r10,ror#2					@ F_xx_xx
 						@ F_xx_xx
 	add	r5,r5,r9			@ E+=X[i]
 	eor	r10,r10,r4,ror#2		@ F_00_19(B,C,D)
@@ -227,7 +230,7 @@
 	add	r4,r4,r5,ror#27			@ E+=ROR(A,27)
 	eor	r9,r9,r11,ror#31
 	str	r9,[r14,#-4]!
-	and r10,r6,r10,ror#2					@ F_xx_xx
+	and	r10,r6,r10,ror#2					@ F_xx_xx
 						@ F_xx_xx
 	add	r4,r4,r9			@ E+=X[i]
 	eor	r10,r10,r3,ror#2		@ F_00_19(B,C,D)
@@ -244,7 +247,7 @@
 	add	r3,r3,r4,ror#27			@ E+=ROR(A,27)
 	eor	r9,r9,r11,ror#31
 	str	r9,[r14,#-4]!
-	and r10,r5,r10,ror#2					@ F_xx_xx
+	and	r10,r5,r10,ror#2					@ F_xx_xx
 						@ F_xx_xx
 	add	r3,r3,r9			@ E+=X[i]
 	eor	r10,r10,r7,ror#2		@ F_00_19(B,C,D)
@@ -265,7 +268,7 @@
 	add	r7,r7,r3,ror#27			@ E+=ROR(A,27)
 	eor	r9,r9,r11,ror#31
 	str	r9,[r14,#-4]!
-	eor r10,r4,r10,ror#2					@ F_xx_xx
+	eor	r10,r4,r10,ror#2					@ F_xx_xx
 						@ F_xx_xx
 	add	r7,r7,r9			@ E+=X[i]
 	add	r7,r7,r10			@ E+=F_20_39(B,C,D)
@@ -281,7 +284,7 @@
 	add	r6,r6,r7,ror#27			@ E+=ROR(A,27)
 	eor	r9,r9,r11,ror#31
 	str	r9,[r14,#-4]!
-	eor r10,r3,r10,ror#2					@ F_xx_xx
+	eor	r10,r3,r10,ror#2					@ F_xx_xx
 						@ F_xx_xx
 	add	r6,r6,r9			@ E+=X[i]
 	add	r6,r6,r10			@ E+=F_20_39(B,C,D)
@@ -297,7 +300,7 @@
 	add	r5,r5,r6,ror#27			@ E+=ROR(A,27)
 	eor	r9,r9,r11,ror#31
 	str	r9,[r14,#-4]!
-	eor r10,r7,r10,ror#2					@ F_xx_xx
+	eor	r10,r7,r10,ror#2					@ F_xx_xx
 						@ F_xx_xx
 	add	r5,r5,r9			@ E+=X[i]
 	add	r5,r5,r10			@ E+=F_20_39(B,C,D)
@@ -313,7 +316,7 @@
 	add	r4,r4,r5,ror#27			@ E+=ROR(A,27)
 	eor	r9,r9,r11,ror#31
 	str	r9,[r14,#-4]!
-	eor r10,r6,r10,ror#2					@ F_xx_xx
+	eor	r10,r6,r10,ror#2					@ F_xx_xx
 						@ F_xx_xx
 	add	r4,r4,r9			@ E+=X[i]
 	add	r4,r4,r10			@ E+=F_20_39(B,C,D)
@@ -329,7 +332,7 @@
 	add	r3,r3,r4,ror#27			@ E+=ROR(A,27)
 	eor	r9,r9,r11,ror#31
 	str	r9,[r14,#-4]!
-	eor r10,r5,r10,ror#2					@ F_xx_xx
+	eor	r10,r5,r10,ror#2					@ F_xx_xx
 						@ F_xx_xx
 	add	r3,r3,r9			@ E+=X[i]
 	add	r3,r3,r10			@ E+=F_20_39(B,C,D)
@@ -352,8 +355,8 @@
 	add	r7,r7,r3,ror#27			@ E+=ROR(A,27)
 	eor	r9,r9,r11,ror#31
 	str	r9,[r14,#-4]!
-	and r10,r4,r10,ror#2					@ F_xx_xx
-	and r11,r5,r6					@ F_xx_xx
+	and	r10,r4,r10,ror#2					@ F_xx_xx
+	and	r11,r5,r6					@ F_xx_xx
 	add	r7,r7,r9			@ E+=X[i]
 	add	r7,r7,r10			@ E+=F_40_59(B,C,D)
 	add	r7,r7,r11,ror#2
@@ -369,8 +372,8 @@
 	add	r6,r6,r7,ror#27			@ E+=ROR(A,27)
 	eor	r9,r9,r11,ror#31
 	str	r9,[r14,#-4]!
-	and r10,r3,r10,ror#2					@ F_xx_xx
-	and r11,r4,r5					@ F_xx_xx
+	and	r10,r3,r10,ror#2					@ F_xx_xx
+	and	r11,r4,r5					@ F_xx_xx
 	add	r6,r6,r9			@ E+=X[i]
 	add	r6,r6,r10			@ E+=F_40_59(B,C,D)
 	add	r6,r6,r11,ror#2
@@ -386,8 +389,8 @@
 	add	r5,r5,r6,ror#27			@ E+=ROR(A,27)
 	eor	r9,r9,r11,ror#31
 	str	r9,[r14,#-4]!
-	and r10,r7,r10,ror#2					@ F_xx_xx
-	and r11,r3,r4					@ F_xx_xx
+	and	r10,r7,r10,ror#2					@ F_xx_xx
+	and	r11,r3,r4					@ F_xx_xx
 	add	r5,r5,r9			@ E+=X[i]
 	add	r5,r5,r10			@ E+=F_40_59(B,C,D)
 	add	r5,r5,r11,ror#2
@@ -403,8 +406,8 @@
 	add	r4,r4,r5,ror#27			@ E+=ROR(A,27)
 	eor	r9,r9,r11,ror#31
 	str	r9,[r14,#-4]!
-	and r10,r6,r10,ror#2					@ F_xx_xx
-	and r11,r7,r3					@ F_xx_xx
+	and	r10,r6,r10,ror#2					@ F_xx_xx
+	and	r11,r7,r3					@ F_xx_xx
 	add	r4,r4,r9			@ E+=X[i]
 	add	r4,r4,r10			@ E+=F_40_59(B,C,D)
 	add	r4,r4,r11,ror#2
@@ -420,8 +423,8 @@
 	add	r3,r3,r4,ror#27			@ E+=ROR(A,27)
 	eor	r9,r9,r11,ror#31
 	str	r9,[r14,#-4]!
-	and r10,r5,r10,ror#2					@ F_xx_xx
-	and r11,r6,r7					@ F_xx_xx
+	and	r10,r5,r10,ror#2					@ F_xx_xx
+	and	r11,r6,r7					@ F_xx_xx
 	add	r3,r3,r9			@ E+=X[i]
 	add	r3,r3,r10			@ E+=F_40_59(B,C,D)
 	add	r3,r3,r11,ror#2
@@ -445,25 +448,26 @@
 	bne	.Lloop			@ [+18], total 1307
 
 #if __ARM_ARCH__>=5
-	ldmia	sp!,{r4-r12,pc}
+	ldmia	sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,pc}
 #else
-	ldmia	sp!,{r4-r12,lr}
+	ldmia	sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr}
 	tst	lr,#1
 	moveq	pc,lr			@ be binary compatible with V4, yet
-	.word	0xe12fff1e			@ interoperable with Thumb ISA:-)
+.word	0xe12fff1e			@ interoperable with Thumb ISA:-)
 #endif
 .size	sha1_block_data_order,.-sha1_block_data_order
 
 .align	5
-.LK_00_19:	.word	0x5a827999
-.LK_20_39:	.word	0x6ed9eba1
-.LK_40_59:	.word	0x8f1bbcdc
-.LK_60_79:	.word	0xca62c1d6
+.LK_00_19:.word	0x5a827999
+.LK_20_39:.word	0x6ed9eba1
+.LK_40_59:.word	0x8f1bbcdc
+.LK_60_79:.word	0xca62c1d6
 #if __ARM_MAX_ARCH__>=7
 .LOPENSSL_armcap:
 .word	OPENSSL_armcap_P-sha1_block_data_order
 #endif
-.asciz	"SHA1 block transform for ARMv4/NEON/ARMv8, CRYPTOGAMS by <appro@openssl.org>"
+.byte	83,72,65,49,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
+.align	2
 .align	5
 #if __ARM_MAX_ARCH__>=7
 .arch	armv7-a
@@ -473,7 +477,7 @@
 .align	4
 sha1_block_data_order_neon:
 .LNEON:
-	stmdb	sp!,{r4-r12,lr}
+	stmdb	sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr}
 	add	r2,r1,r2,lsl#6	@ r2 to point at the end of r1
 	@ dmb				@ errata #451034 on early Cortex A8
 	@ vstmdb	sp!,{d8-d15}	@ ABI specification says so
@@ -485,21 +489,21 @@
 	ldmia	r0,{r3,r4,r5,r6,r7}	@ load context
 	mov	r12,sp
 
-	vld1.8		{q0-q1},[r1]!	@ handles unaligned
-	veor		q15,q15,q15
-	vld1.8		{q2-q3},[r1]!
-	vld1.32		{d28[],d29[]},[r8,:32]!	@ load K_00_19
+	vld1.8	{q0,q1},[r1]!	@ handles unaligned
+	veor	q15,q15,q15
+	vld1.8	{q2,q3},[r1]!
+	vld1.32	{d28[],d29[]},[r8,:32]!	@ load K_00_19
 	vrev32.8	q0,q0		@ yes, even on
 	vrev32.8	q1,q1		@ big-endian...
 	vrev32.8	q2,q2
 	vadd.i32	q8,q0,q14
 	vrev32.8	q3,q3
 	vadd.i32	q9,q1,q14
-	vst1.32		{q8},[r12,:128]!
+	vst1.32	{q8},[r12,:128]!
 	vadd.i32	q10,q2,q14
-	vst1.32		{q9},[r12,:128]!
-	vst1.32		{q10},[r12,:128]!
-	ldr		r9,[sp]			@ big RAW stall
+	vst1.32	{q9},[r12,:128]!
+	vst1.32	{q10},[r12,:128]!
+	ldr	r9,[sp]			@ big RAW stall
 
 .Loop_neon:
 	vext.8	q8,q0,q1,#8
@@ -1177,10 +1181,10 @@
 	teq	r1,r2
 	sub	r8,r8,#16
 	subeq	r1,r1,#64
-	vld1.8	{q0-q1},[r1]!
+	vld1.8	{q0,q1},[r1]!
 	ldr	r9,[sp,#4]
 	eor	r11,r10,r6
-	vld1.8	{q2-q3},[r1]!
+	vld1.8	{q2,q3},[r1]!
 	add	r3,r3,r4,ror#27
 	mov	r5,r5,ror#2
 	vld1.32	{d28[],d29[]},[r8,:32]!
@@ -1313,7 +1317,7 @@
 	bne	.Loop_neon
 
 	@ vldmia	sp!,{d8-d15}
-	ldmia	sp!,{r4-r12,pc}
+	ldmia	sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,pc}
 .size	sha1_block_data_order_neon,.-sha1_block_data_order_neon
 #endif
 #if __ARM_MAX_ARCH__>=7
@@ -1321,7 +1325,7 @@
 .align	5
 sha1_block_data_order_armv8:
 .LARMv8:
-	vstmdb	sp!,{d8-d15}		@ ABI specification says so
+	vstmdb	sp!,{d8,d9,d10,d11,d12,d13,d14,d15}		@ ABI specification says so
 
 	veor	q1,q1,q1
 	adr	r3,.LK_00_19
@@ -1334,119 +1338,119 @@
 	vld1.32	{d22[],d23[]},[r3,:32]
 
 .Loop_v8:
-	vld1.8		{q4-q5},[r1]!
-	vld1.8		{q6-q7},[r1]!
+	vld1.8	{q4,q5},[r1]!
+	vld1.8	{q6,q7},[r1]!
 	vrev32.8	q4,q4
 	vrev32.8	q5,q5
 
 	vadd.i32	q12,q8,q4
 	vrev32.8	q6,q6
-	vmov		q14,q0	@ offload
-	subs		r2,r2,#1
+	vmov	q14,q0	@ offload
+	subs	r2,r2,#1
 
 	vadd.i32	q13,q8,q5
 	vrev32.8	q7,q7
-	.byte	0xc0,0x62,0xb9,0xf3	@ sha1h q3,q0		@ 0
-	.byte	0x68,0x0c,0x02,0xf2	@ sha1c q0,q1,q12
+.byte	0xc0,0x62,0xb9,0xf3	@ sha1h q3,q0		@ 0
+.byte	0x68,0x0c,0x02,0xf2	@ sha1c q0,q1,q12
 	vadd.i32	q12,q8,q6
-	.byte	0x4c,0x8c,0x3a,0xf2	@ sha1su0 q4,q5,q6
-	.byte	0xc0,0x42,0xb9,0xf3	@ sha1h q2,q0		@ 1
-	.byte	0x6a,0x0c,0x06,0xf2	@ sha1c q0,q3,q13
+.byte	0x4c,0x8c,0x3a,0xf2	@ sha1su0 q4,q5,q6
+.byte	0xc0,0x42,0xb9,0xf3	@ sha1h q2,q0		@ 1
+.byte	0x6a,0x0c,0x06,0xf2	@ sha1c q0,q3,q13
 	vadd.i32	q13,q8,q7
-	.byte	0x8e,0x83,0xba,0xf3	@ sha1su1 q4,q7
-	.byte	0x4e,0xac,0x3c,0xf2	@ sha1su0 q5,q6,q7
-	.byte	0xc0,0x62,0xb9,0xf3	@ sha1h q3,q0		@ 2
-	.byte	0x68,0x0c,0x04,0xf2	@ sha1c q0,q2,q12
+.byte	0x8e,0x83,0xba,0xf3	@ sha1su1 q4,q7
+.byte	0x4e,0xac,0x3c,0xf2	@ sha1su0 q5,q6,q7
+.byte	0xc0,0x62,0xb9,0xf3	@ sha1h q3,q0		@ 2
+.byte	0x68,0x0c,0x04,0xf2	@ sha1c q0,q2,q12
 	vadd.i32	q12,q8,q4
-	.byte	0x88,0xa3,0xba,0xf3	@ sha1su1 q5,q4
-	.byte	0x48,0xcc,0x3e,0xf2	@ sha1su0 q6,q7,q4
-	.byte	0xc0,0x42,0xb9,0xf3	@ sha1h q2,q0		@ 3
-	.byte	0x6a,0x0c,0x06,0xf2	@ sha1c q0,q3,q13
+.byte	0x88,0xa3,0xba,0xf3	@ sha1su1 q5,q4
+.byte	0x48,0xcc,0x3e,0xf2	@ sha1su0 q6,q7,q4
+.byte	0xc0,0x42,0xb9,0xf3	@ sha1h q2,q0		@ 3
+.byte	0x6a,0x0c,0x06,0xf2	@ sha1c q0,q3,q13
 	vadd.i32	q13,q9,q5
-	.byte	0x8a,0xc3,0xba,0xf3	@ sha1su1 q6,q5
-	.byte	0x4a,0xec,0x38,0xf2	@ sha1su0 q7,q4,q5
-	.byte	0xc0,0x62,0xb9,0xf3	@ sha1h q3,q0		@ 4
-	.byte	0x68,0x0c,0x04,0xf2	@ sha1c q0,q2,q12
+.byte	0x8a,0xc3,0xba,0xf3	@ sha1su1 q6,q5
+.byte	0x4a,0xec,0x38,0xf2	@ sha1su0 q7,q4,q5
+.byte	0xc0,0x62,0xb9,0xf3	@ sha1h q3,q0		@ 4
+.byte	0x68,0x0c,0x04,0xf2	@ sha1c q0,q2,q12
 	vadd.i32	q12,q9,q6
-	.byte	0x8c,0xe3,0xba,0xf3	@ sha1su1 q7,q6
-	.byte	0x4c,0x8c,0x3a,0xf2	@ sha1su0 q4,q5,q6
-	.byte	0xc0,0x42,0xb9,0xf3	@ sha1h q2,q0		@ 5
-	.byte	0x6a,0x0c,0x16,0xf2	@ sha1p q0,q3,q13
+.byte	0x8c,0xe3,0xba,0xf3	@ sha1su1 q7,q6
+.byte	0x4c,0x8c,0x3a,0xf2	@ sha1su0 q4,q5,q6
+.byte	0xc0,0x42,0xb9,0xf3	@ sha1h q2,q0		@ 5
+.byte	0x6a,0x0c,0x16,0xf2	@ sha1p q0,q3,q13
 	vadd.i32	q13,q9,q7
-	.byte	0x8e,0x83,0xba,0xf3	@ sha1su1 q4,q7
-	.byte	0x4e,0xac,0x3c,0xf2	@ sha1su0 q5,q6,q7
-	.byte	0xc0,0x62,0xb9,0xf3	@ sha1h q3,q0		@ 6
-	.byte	0x68,0x0c,0x14,0xf2	@ sha1p q0,q2,q12
+.byte	0x8e,0x83,0xba,0xf3	@ sha1su1 q4,q7
+.byte	0x4e,0xac,0x3c,0xf2	@ sha1su0 q5,q6,q7
+.byte	0xc0,0x62,0xb9,0xf3	@ sha1h q3,q0		@ 6
+.byte	0x68,0x0c,0x14,0xf2	@ sha1p q0,q2,q12
 	vadd.i32	q12,q9,q4
-	.byte	0x88,0xa3,0xba,0xf3	@ sha1su1 q5,q4
-	.byte	0x48,0xcc,0x3e,0xf2	@ sha1su0 q6,q7,q4
-	.byte	0xc0,0x42,0xb9,0xf3	@ sha1h q2,q0		@ 7
-	.byte	0x6a,0x0c,0x16,0xf2	@ sha1p q0,q3,q13
+.byte	0x88,0xa3,0xba,0xf3	@ sha1su1 q5,q4
+.byte	0x48,0xcc,0x3e,0xf2	@ sha1su0 q6,q7,q4
+.byte	0xc0,0x42,0xb9,0xf3	@ sha1h q2,q0		@ 7
+.byte	0x6a,0x0c,0x16,0xf2	@ sha1p q0,q3,q13
 	vadd.i32	q13,q9,q5
-	.byte	0x8a,0xc3,0xba,0xf3	@ sha1su1 q6,q5
-	.byte	0x4a,0xec,0x38,0xf2	@ sha1su0 q7,q4,q5
-	.byte	0xc0,0x62,0xb9,0xf3	@ sha1h q3,q0		@ 8
-	.byte	0x68,0x0c,0x14,0xf2	@ sha1p q0,q2,q12
+.byte	0x8a,0xc3,0xba,0xf3	@ sha1su1 q6,q5
+.byte	0x4a,0xec,0x38,0xf2	@ sha1su0 q7,q4,q5
+.byte	0xc0,0x62,0xb9,0xf3	@ sha1h q3,q0		@ 8
+.byte	0x68,0x0c,0x14,0xf2	@ sha1p q0,q2,q12
 	vadd.i32	q12,q10,q6
-	.byte	0x8c,0xe3,0xba,0xf3	@ sha1su1 q7,q6
-	.byte	0x4c,0x8c,0x3a,0xf2	@ sha1su0 q4,q5,q6
-	.byte	0xc0,0x42,0xb9,0xf3	@ sha1h q2,q0		@ 9
-	.byte	0x6a,0x0c,0x16,0xf2	@ sha1p q0,q3,q13
+.byte	0x8c,0xe3,0xba,0xf3	@ sha1su1 q7,q6
+.byte	0x4c,0x8c,0x3a,0xf2	@ sha1su0 q4,q5,q6
+.byte	0xc0,0x42,0xb9,0xf3	@ sha1h q2,q0		@ 9
+.byte	0x6a,0x0c,0x16,0xf2	@ sha1p q0,q3,q13
 	vadd.i32	q13,q10,q7
-	.byte	0x8e,0x83,0xba,0xf3	@ sha1su1 q4,q7
-	.byte	0x4e,0xac,0x3c,0xf2	@ sha1su0 q5,q6,q7
-	.byte	0xc0,0x62,0xb9,0xf3	@ sha1h q3,q0		@ 10
-	.byte	0x68,0x0c,0x24,0xf2	@ sha1m q0,q2,q12
+.byte	0x8e,0x83,0xba,0xf3	@ sha1su1 q4,q7
+.byte	0x4e,0xac,0x3c,0xf2	@ sha1su0 q5,q6,q7
+.byte	0xc0,0x62,0xb9,0xf3	@ sha1h q3,q0		@ 10
+.byte	0x68,0x0c,0x24,0xf2	@ sha1m q0,q2,q12
 	vadd.i32	q12,q10,q4
-	.byte	0x88,0xa3,0xba,0xf3	@ sha1su1 q5,q4
-	.byte	0x48,0xcc,0x3e,0xf2	@ sha1su0 q6,q7,q4
-	.byte	0xc0,0x42,0xb9,0xf3	@ sha1h q2,q0		@ 11
-	.byte	0x6a,0x0c,0x26,0xf2	@ sha1m q0,q3,q13
+.byte	0x88,0xa3,0xba,0xf3	@ sha1su1 q5,q4
+.byte	0x48,0xcc,0x3e,0xf2	@ sha1su0 q6,q7,q4
+.byte	0xc0,0x42,0xb9,0xf3	@ sha1h q2,q0		@ 11
+.byte	0x6a,0x0c,0x26,0xf2	@ sha1m q0,q3,q13
 	vadd.i32	q13,q10,q5
-	.byte	0x8a,0xc3,0xba,0xf3	@ sha1su1 q6,q5
-	.byte	0x4a,0xec,0x38,0xf2	@ sha1su0 q7,q4,q5
-	.byte	0xc0,0x62,0xb9,0xf3	@ sha1h q3,q0		@ 12
-	.byte	0x68,0x0c,0x24,0xf2	@ sha1m q0,q2,q12
+.byte	0x8a,0xc3,0xba,0xf3	@ sha1su1 q6,q5
+.byte	0x4a,0xec,0x38,0xf2	@ sha1su0 q7,q4,q5
+.byte	0xc0,0x62,0xb9,0xf3	@ sha1h q3,q0		@ 12
+.byte	0x68,0x0c,0x24,0xf2	@ sha1m q0,q2,q12
 	vadd.i32	q12,q10,q6
-	.byte	0x8c,0xe3,0xba,0xf3	@ sha1su1 q7,q6
-	.byte	0x4c,0x8c,0x3a,0xf2	@ sha1su0 q4,q5,q6
-	.byte	0xc0,0x42,0xb9,0xf3	@ sha1h q2,q0		@ 13
-	.byte	0x6a,0x0c,0x26,0xf2	@ sha1m q0,q3,q13
+.byte	0x8c,0xe3,0xba,0xf3	@ sha1su1 q7,q6
+.byte	0x4c,0x8c,0x3a,0xf2	@ sha1su0 q4,q5,q6
+.byte	0xc0,0x42,0xb9,0xf3	@ sha1h q2,q0		@ 13
+.byte	0x6a,0x0c,0x26,0xf2	@ sha1m q0,q3,q13
 	vadd.i32	q13,q11,q7
-	.byte	0x8e,0x83,0xba,0xf3	@ sha1su1 q4,q7
-	.byte	0x4e,0xac,0x3c,0xf2	@ sha1su0 q5,q6,q7
-	.byte	0xc0,0x62,0xb9,0xf3	@ sha1h q3,q0		@ 14
-	.byte	0x68,0x0c,0x24,0xf2	@ sha1m q0,q2,q12
+.byte	0x8e,0x83,0xba,0xf3	@ sha1su1 q4,q7
+.byte	0x4e,0xac,0x3c,0xf2	@ sha1su0 q5,q6,q7
+.byte	0xc0,0x62,0xb9,0xf3	@ sha1h q3,q0		@ 14
+.byte	0x68,0x0c,0x24,0xf2	@ sha1m q0,q2,q12
 	vadd.i32	q12,q11,q4
-	.byte	0x88,0xa3,0xba,0xf3	@ sha1su1 q5,q4
-	.byte	0x48,0xcc,0x3e,0xf2	@ sha1su0 q6,q7,q4
-	.byte	0xc0,0x42,0xb9,0xf3	@ sha1h q2,q0		@ 15
-	.byte	0x6a,0x0c,0x16,0xf2	@ sha1p q0,q3,q13
+.byte	0x88,0xa3,0xba,0xf3	@ sha1su1 q5,q4
+.byte	0x48,0xcc,0x3e,0xf2	@ sha1su0 q6,q7,q4
+.byte	0xc0,0x42,0xb9,0xf3	@ sha1h q2,q0		@ 15
+.byte	0x6a,0x0c,0x16,0xf2	@ sha1p q0,q3,q13
 	vadd.i32	q13,q11,q5
-	.byte	0x8a,0xc3,0xba,0xf3	@ sha1su1 q6,q5
-	.byte	0x4a,0xec,0x38,0xf2	@ sha1su0 q7,q4,q5
-	.byte	0xc0,0x62,0xb9,0xf3	@ sha1h q3,q0		@ 16
-	.byte	0x68,0x0c,0x14,0xf2	@ sha1p q0,q2,q12
+.byte	0x8a,0xc3,0xba,0xf3	@ sha1su1 q6,q5
+.byte	0x4a,0xec,0x38,0xf2	@ sha1su0 q7,q4,q5
+.byte	0xc0,0x62,0xb9,0xf3	@ sha1h q3,q0		@ 16
+.byte	0x68,0x0c,0x14,0xf2	@ sha1p q0,q2,q12
 	vadd.i32	q12,q11,q6
-	.byte	0x8c,0xe3,0xba,0xf3	@ sha1su1 q7,q6
-	.byte	0xc0,0x42,0xb9,0xf3	@ sha1h q2,q0		@ 17
-	.byte	0x6a,0x0c,0x16,0xf2	@ sha1p q0,q3,q13
+.byte	0x8c,0xe3,0xba,0xf3	@ sha1su1 q7,q6
+.byte	0xc0,0x42,0xb9,0xf3	@ sha1h q2,q0		@ 17
+.byte	0x6a,0x0c,0x16,0xf2	@ sha1p q0,q3,q13
 	vadd.i32	q13,q11,q7
 
-	.byte	0xc0,0x62,0xb9,0xf3	@ sha1h q3,q0		@ 18
-	.byte	0x68,0x0c,0x14,0xf2	@ sha1p q0,q2,q12
+.byte	0xc0,0x62,0xb9,0xf3	@ sha1h q3,q0		@ 18
+.byte	0x68,0x0c,0x14,0xf2	@ sha1p q0,q2,q12
 
-	.byte	0xc0,0x42,0xb9,0xf3	@ sha1h q2,q0		@ 19
-	.byte	0x6a,0x0c,0x16,0xf2	@ sha1p q0,q3,q13
+.byte	0xc0,0x42,0xb9,0xf3	@ sha1h q2,q0		@ 19
+.byte	0x6a,0x0c,0x16,0xf2	@ sha1p q0,q3,q13
 
 	vadd.i32	q1,q1,q2
 	vadd.i32	q0,q0,q14
-	bne		.Loop_v8
+	bne	.Loop_v8
 
-	vst1.32		{q0},[r0]!
-	vst1.32		{d2[0]},[r0]
+	vst1.32	{q0},[r0]!
+	vst1.32	{d2[0]},[r0]
 
-	vldmia	sp!,{d8-d15}
+	vldmia	sp!,{d8,d9,d10,d11,d12,d13,d14,d15}
 	bx	lr					@ bx lr
 .size	sha1_block_data_order_armv8,.-sha1_block_data_order_armv8
 #endif
diff --git a/linux-arm/crypto/sha/sha256-armv4.S b/linux-arm/crypto/sha/sha256-armv4.S
index 3c41010..ba37795 100644
--- a/linux-arm/crypto/sha/sha256-armv4.S
+++ b/linux-arm/crypto/sha/sha256-armv4.S
@@ -1,7 +1,60 @@
-#include "arm_arch.h"
+
+@ ====================================================================
+@ Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
+@ project. The module is, however, dual licensed under OpenSSL and
+@ CRYPTOGAMS licenses depending on where you obtain it. For further
+@ details see http://www.openssl.org/~appro/cryptogams/.
+@
+@ Permission to use under GPL terms is granted.
+@ ====================================================================
+
+@ SHA256 block procedure for ARMv4. May 2007.
+
+@ Performance is ~2x better than gcc 3.4 generated code and in "abso-
+@ lute" terms is ~2250 cycles per 64-byte block or ~35 cycles per
+@ byte [on single-issue Xscale PXA250 core].
+
+@ July 2010.
+@
+@ Rescheduling for dual-issue pipeline resulted in 22% improvement on
+@ Cortex A8 core and ~20 cycles per processed byte.
+
+@ February 2011.
+@
+@ Profiler-assisted and platform-specific optimization resulted in 16%
+@ improvement on Cortex A8 core and ~15.4 cycles per processed byte.
+
+@ September 2013.
+@
+@ Add NEON implementation. On Cortex A8 it was measured to process one
+@ byte in 12.5 cycles or 23% faster than integer-only code. Snapdragon
+@ S4 does it in 12.5 cycles too, but it's 50% faster than integer-only
+@ code (meaning that latter performs sub-optimally, nothing was done
+@ about it).
+
+@ May 2014.
+@
+@ Add ARMv8 code path performing at 2.0 cpb on Apple A7.
+
+#ifndef __KERNEL__
+# include "arm_arch.h"
+#else
+# define __ARM_ARCH__ __LINUX_ARM_ARCH__
+# define __ARM_MAX_ARCH__ 7
+#endif
 
 .text
+#if __ARM_ARCH__<7
 .code	32
+#else
+.syntax	unified
+# if defined(__thumb2__) && !defined(__APPLE__)
+#  define adrl adr
+.thumb
+# else
+.code	32
+# endif
+#endif
 
 .type	K256,%object
 .align	5
@@ -24,25 +77,33 @@
 .word	0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2
 .size	K256,.-K256
 .word	0				@ terminator
-#if __ARM_MAX_ARCH__>=7
+#if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__)
 .LOPENSSL_armcap:
-.word	OPENSSL_armcap_P-sha256_block_data_order
+.word	OPENSSL_armcap_P-.Lsha256_block_data_order
 #endif
 .align	5
 
-.global	sha256_block_data_order
+.globl	sha256_block_data_order
 .type	sha256_block_data_order,%function
 sha256_block_data_order:
+.Lsha256_block_data_order:
+#if __ARM_ARCH__<7
 	sub	r3,pc,#8		@ sha256_block_data_order
-	add	r2,r1,r2,lsl#6	@ len to point at the end of inp
-#if __ARM_MAX_ARCH__>=7
+#else
+	adr	r3,sha256_block_data_order
+#endif
+#if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__)
 	ldr	r12,.LOPENSSL_armcap
 	ldr	r12,[r3,r12]		@ OPENSSL_armcap_P
+#ifdef	__APPLE__
+	ldr	r12,[r12]
+#endif
 	tst	r12,#ARMV8_SHA256
 	bne	.LARMv8
 	tst	r12,#ARMV7_NEON
 	bne	.LNEON
 #endif
+	add	r2,r1,r2,lsl#6	@ len to point at the end of inp
 	stmdb	sp!,{r0,r1,r2,r4-r11,lr}
 	ldmia	r0,{r4,r5,r6,r7,r8,r9,r10,r11}
 	sub	r14,r3,#256+32	@ K256
@@ -63,7 +124,9 @@
 	eor	r0,r8,r8,ror#5
 	add	r4,r4,r12			@ h+=Maj(a,b,c) from the past
 	eor	r0,r0,r8,ror#19	@ Sigma1(e)
+# ifndef __ARMEB__
 	rev	r2,r2
+# endif
 #else
 	@ ldrb	r2,[r1,#3]			@ 0
 	add	r4,r4,r12			@ h+=Maj(a,b,c) from the past
@@ -119,7 +182,9 @@
 	eor	r0,r7,r7,ror#5
 	add	r11,r11,r3			@ h+=Maj(a,b,c) from the past
 	eor	r0,r0,r7,ror#19	@ Sigma1(e)
+# ifndef __ARMEB__
 	rev	r2,r2
+# endif
 #else
 	@ ldrb	r2,[r1,#3]			@ 1
 	add	r11,r11,r3			@ h+=Maj(a,b,c) from the past
@@ -175,7 +240,9 @@
 	eor	r0,r6,r6,ror#5
 	add	r10,r10,r12			@ h+=Maj(a,b,c) from the past
 	eor	r0,r0,r6,ror#19	@ Sigma1(e)
+# ifndef __ARMEB__
 	rev	r2,r2
+# endif
 #else
 	@ ldrb	r2,[r1,#3]			@ 2
 	add	r10,r10,r12			@ h+=Maj(a,b,c) from the past
@@ -231,7 +298,9 @@
 	eor	r0,r5,r5,ror#5
 	add	r9,r9,r3			@ h+=Maj(a,b,c) from the past
 	eor	r0,r0,r5,ror#19	@ Sigma1(e)
+# ifndef __ARMEB__
 	rev	r2,r2
+# endif
 #else
 	@ ldrb	r2,[r1,#3]			@ 3
 	add	r9,r9,r3			@ h+=Maj(a,b,c) from the past
@@ -287,7 +356,9 @@
 	eor	r0,r4,r4,ror#5
 	add	r8,r8,r12			@ h+=Maj(a,b,c) from the past
 	eor	r0,r0,r4,ror#19	@ Sigma1(e)
+# ifndef __ARMEB__
 	rev	r2,r2
+# endif
 #else
 	@ ldrb	r2,[r1,#3]			@ 4
 	add	r8,r8,r12			@ h+=Maj(a,b,c) from the past
@@ -343,7 +414,9 @@
 	eor	r0,r11,r11,ror#5
 	add	r7,r7,r3			@ h+=Maj(a,b,c) from the past
 	eor	r0,r0,r11,ror#19	@ Sigma1(e)
+# ifndef __ARMEB__
 	rev	r2,r2
+# endif
 #else
 	@ ldrb	r2,[r1,#3]			@ 5
 	add	r7,r7,r3			@ h+=Maj(a,b,c) from the past
@@ -399,7 +472,9 @@
 	eor	r0,r10,r10,ror#5
 	add	r6,r6,r12			@ h+=Maj(a,b,c) from the past
 	eor	r0,r0,r10,ror#19	@ Sigma1(e)
+# ifndef __ARMEB__
 	rev	r2,r2
+# endif
 #else
 	@ ldrb	r2,[r1,#3]			@ 6
 	add	r6,r6,r12			@ h+=Maj(a,b,c) from the past
@@ -455,7 +530,9 @@
 	eor	r0,r9,r9,ror#5
 	add	r5,r5,r3			@ h+=Maj(a,b,c) from the past
 	eor	r0,r0,r9,ror#19	@ Sigma1(e)
+# ifndef __ARMEB__
 	rev	r2,r2
+# endif
 #else
 	@ ldrb	r2,[r1,#3]			@ 7
 	add	r5,r5,r3			@ h+=Maj(a,b,c) from the past
@@ -511,7 +588,9 @@
 	eor	r0,r8,r8,ror#5
 	add	r4,r4,r12			@ h+=Maj(a,b,c) from the past
 	eor	r0,r0,r8,ror#19	@ Sigma1(e)
+# ifndef __ARMEB__
 	rev	r2,r2
+# endif
 #else
 	@ ldrb	r2,[r1,#3]			@ 8
 	add	r4,r4,r12			@ h+=Maj(a,b,c) from the past
@@ -567,7 +646,9 @@
 	eor	r0,r7,r7,ror#5
 	add	r11,r11,r3			@ h+=Maj(a,b,c) from the past
 	eor	r0,r0,r7,ror#19	@ Sigma1(e)
+# ifndef __ARMEB__
 	rev	r2,r2
+# endif
 #else
 	@ ldrb	r2,[r1,#3]			@ 9
 	add	r11,r11,r3			@ h+=Maj(a,b,c) from the past
@@ -623,7 +704,9 @@
 	eor	r0,r6,r6,ror#5
 	add	r10,r10,r12			@ h+=Maj(a,b,c) from the past
 	eor	r0,r0,r6,ror#19	@ Sigma1(e)
+# ifndef __ARMEB__
 	rev	r2,r2
+# endif
 #else
 	@ ldrb	r2,[r1,#3]			@ 10
 	add	r10,r10,r12			@ h+=Maj(a,b,c) from the past
@@ -679,7 +762,9 @@
 	eor	r0,r5,r5,ror#5
 	add	r9,r9,r3			@ h+=Maj(a,b,c) from the past
 	eor	r0,r0,r5,ror#19	@ Sigma1(e)
+# ifndef __ARMEB__
 	rev	r2,r2
+# endif
 #else
 	@ ldrb	r2,[r1,#3]			@ 11
 	add	r9,r9,r3			@ h+=Maj(a,b,c) from the past
@@ -735,7 +820,9 @@
 	eor	r0,r4,r4,ror#5
 	add	r8,r8,r12			@ h+=Maj(a,b,c) from the past
 	eor	r0,r0,r4,ror#19	@ Sigma1(e)
+# ifndef __ARMEB__
 	rev	r2,r2
+# endif
 #else
 	@ ldrb	r2,[r1,#3]			@ 12
 	add	r8,r8,r12			@ h+=Maj(a,b,c) from the past
@@ -791,7 +878,9 @@
 	eor	r0,r11,r11,ror#5
 	add	r7,r7,r3			@ h+=Maj(a,b,c) from the past
 	eor	r0,r0,r11,ror#19	@ Sigma1(e)
+# ifndef __ARMEB__
 	rev	r2,r2
+# endif
 #else
 	@ ldrb	r2,[r1,#3]			@ 13
 	add	r7,r7,r3			@ h+=Maj(a,b,c) from the past
@@ -847,7 +936,9 @@
 	eor	r0,r10,r10,ror#5
 	add	r6,r6,r12			@ h+=Maj(a,b,c) from the past
 	eor	r0,r0,r10,ror#19	@ Sigma1(e)
+# ifndef __ARMEB__
 	rev	r2,r2
+# endif
 #else
 	@ ldrb	r2,[r1,#3]			@ 14
 	add	r6,r6,r12			@ h+=Maj(a,b,c) from the past
@@ -903,7 +994,9 @@
 	eor	r0,r9,r9,ror#5
 	add	r5,r5,r3			@ h+=Maj(a,b,c) from the past
 	eor	r0,r0,r9,ror#19	@ Sigma1(e)
+# ifndef __ARMEB__
 	rev	r2,r2
+# endif
 #else
 	@ ldrb	r2,[r1,#3]			@ 15
 	add	r5,r5,r3			@ h+=Maj(a,b,c) from the past
@@ -1736,6 +1829,9 @@
 	eor	r12,r12,r6			@ Maj(a,b,c)
 	add	r4,r4,r0,ror#2	@ h+=Sigma0(a)
 	@ add	r4,r4,r12			@ h+=Maj(a,b,c)
+#if __ARM_ARCH__>=7
+	ite	eq			@ Thumb2 thing, sanity check in ARM
+#endif
 	ldreq	r3,[sp,#16*4]		@ pull ctx
 	bne	.Lrounds_16_xx
 
@@ -1765,61 +1861,64 @@
 
 	add	sp,sp,#19*4	@ destroy frame
 #if __ARM_ARCH__>=5
-	ldmia	sp!,{r4-r11,pc}
+	ldmia	sp!,{r4,r5,r6,r7,r8,r9,r10,r11,pc}
 #else
-	ldmia	sp!,{r4-r11,lr}
+	ldmia	sp!,{r4,r5,r6,r7,r8,r9,r10,r11,lr}
 	tst	lr,#1
 	moveq	pc,lr			@ be binary compatible with V4, yet
-	.word	0xe12fff1e			@ interoperable with Thumb ISA:-)
+.word	0xe12fff1e			@ interoperable with Thumb ISA:-)
 #endif
 .size	sha256_block_data_order,.-sha256_block_data_order
 #if __ARM_MAX_ARCH__>=7
 .arch	armv7-a
 .fpu	neon
 
+.globl	sha256_block_data_order_neon
 .type	sha256_block_data_order_neon,%function
 .align	4
 sha256_block_data_order_neon:
 .LNEON:
-	stmdb	sp!,{r4-r12,lr}
+	stmdb	sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr}
 
+	sub	r11,sp,#16*4+16
+	adr	r14,K256
+	bic	r11,r11,#15		@ align for 128-bit stores
 	mov	r12,sp
-	sub	sp,sp,#16*4+16		@ alloca
-	sub	r14,r3,#256+32	@ K256
-	bic	sp,sp,#15		@ align for 128-bit stores
+	mov	sp,r11			@ alloca
+	add	r2,r1,r2,lsl#6	@ len to point at the end of inp
 
-	vld1.8		{q0},[r1]!
-	vld1.8		{q1},[r1]!
-	vld1.8		{q2},[r1]!
-	vld1.8		{q3},[r1]!
-	vld1.32		{q8},[r14,:128]!
-	vld1.32		{q9},[r14,:128]!
-	vld1.32		{q10},[r14,:128]!
-	vld1.32		{q11},[r14,:128]!
+	vld1.8	{q0},[r1]!
+	vld1.8	{q1},[r1]!
+	vld1.8	{q2},[r1]!
+	vld1.8	{q3},[r1]!
+	vld1.32	{q8},[r14,:128]!
+	vld1.32	{q9},[r14,:128]!
+	vld1.32	{q10},[r14,:128]!
+	vld1.32	{q11},[r14,:128]!
 	vrev32.8	q0,q0		@ yes, even on
-	str		r0,[sp,#64]
+	str	r0,[sp,#64]
 	vrev32.8	q1,q1		@ big-endian
-	str		r1,[sp,#68]
-	mov		r1,sp
+	str	r1,[sp,#68]
+	mov	r1,sp
 	vrev32.8	q2,q2
-	str		r2,[sp,#72]
+	str	r2,[sp,#72]
 	vrev32.8	q3,q3
-	str		r12,[sp,#76]		@ save original sp
+	str	r12,[sp,#76]		@ save original sp
 	vadd.i32	q8,q8,q0
 	vadd.i32	q9,q9,q1
-	vst1.32		{q8},[r1,:128]!
+	vst1.32	{q8},[r1,:128]!
 	vadd.i32	q10,q10,q2
-	vst1.32		{q9},[r1,:128]!
+	vst1.32	{q9},[r1,:128]!
 	vadd.i32	q11,q11,q3
-	vst1.32		{q10},[r1,:128]!
-	vst1.32		{q11},[r1,:128]!
+	vst1.32	{q10},[r1,:128]!
+	vst1.32	{q11},[r1,:128]!
 
-	ldmia		r0,{r4-r11}
-	sub		r1,r1,#64
-	ldr		r2,[sp,#0]
-	eor		r12,r12,r12
-	eor		r3,r5,r6
-	b		.L_00_48
+	ldmia	r0,{r4,r5,r6,r7,r8,r9,r10,r11}
+	sub	r1,r1,#64
+	ldr	r2,[sp,#0]
+	eor	r12,r12,r12
+	eor	r3,r5,r6
+	b	.L_00_48
 
 .align	4
 .L_00_48:
@@ -2220,17 +2319,19 @@
 	sub	r1,r1,#64
 	bne	.L_00_48
 
-	ldr		r1,[sp,#68]
-	ldr		r0,[sp,#72]
-	sub		r14,r14,#256	@ rewind r14
-	teq		r1,r0
-	subeq		r1,r1,#64		@ avoid SEGV
-	vld1.8		{q0},[r1]!		@ load next input block
-	vld1.8		{q1},[r1]!
-	vld1.8		{q2},[r1]!
-	vld1.8		{q3},[r1]!
-	strne		r1,[sp,#68]
-	mov		r1,sp
+	ldr	r1,[sp,#68]
+	ldr	r0,[sp,#72]
+	sub	r14,r14,#256	@ rewind r14
+	teq	r1,r0
+	it	eq
+	subeq	r1,r1,#64		@ avoid SEGV
+	vld1.8	{q0},[r1]!		@ load next input block
+	vld1.8	{q1},[r1]!
+	vld1.8	{q2},[r1]!
+	vld1.8	{q3},[r1]!
+	it	ne
+	strne	r1,[sp,#68]
+	mov	r1,sp
 	add	r11,r11,r2
 	eor	r2,r9,r10
 	eor	r0,r8,r8,ror#5
@@ -2540,157 +2641,176 @@
 	str	r6,[r2],#4
 	add	r11,r11,r1
 	str	r7,[r2],#4
-	stmia	r2,{r8-r11}
+	stmia	r2,{r8,r9,r10,r11}
 
+	ittte	ne
 	movne	r1,sp
 	ldrne	r2,[sp,#0]
 	eorne	r12,r12,r12
 	ldreq	sp,[sp,#76]			@ restore original sp
+	itt	ne
 	eorne	r3,r5,r6
 	bne	.L_00_48
 
-	ldmia	sp!,{r4-r12,pc}
+	ldmia	sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,pc}
 .size	sha256_block_data_order_neon,.-sha256_block_data_order_neon
 #endif
-#if __ARM_MAX_ARCH__>=7
+#if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__)
+
+# if defined(__thumb2__) && !defined(__APPLE__)
+#  define INST(a,b,c,d)	.byte	c,d|0xc,a,b
+# else
+#  define INST(a,b,c,d)	.byte	a,b,c,d
+# endif
+
 .type	sha256_block_data_order_armv8,%function
 .align	5
 sha256_block_data_order_armv8:
 .LARMv8:
 	vld1.32	{q0,q1},[r0]
-	sub	r3,r3,#sha256_block_data_order-K256
+# ifdef	__APPLE__
+	sub	r3,r3,#256+32
+# elif	defined(__thumb2__)
+	adr	r3,.LARMv8
+	sub	r3,r3,#.LARMv8-K256
+# else
+	adrl	r3,K256
+# endif
+	add	r2,r1,r2,lsl#6	@ len to point at the end of inp
 
 .Loop_v8:
-	vld1.8		{q8-q9},[r1]!
-	vld1.8		{q10-q11},[r1]!
-	vld1.32		{q12},[r3]!
+	vld1.8	{q8,q9},[r1]!
+	vld1.8	{q10,q11},[r1]!
+	vld1.32	{q12},[r3]!
 	vrev32.8	q8,q8
 	vrev32.8	q9,q9
 	vrev32.8	q10,q10
 	vrev32.8	q11,q11
-	vmov		q14,q0	@ offload
-	vmov		q15,q1
-	teq		r1,r2
-	vld1.32		{q13},[r3]!
+	vmov	q14,q0	@ offload
+	vmov	q15,q1
+	teq	r1,r2
+	vld1.32	{q13},[r3]!
 	vadd.i32	q12,q12,q8
-	.byte	0xe2,0x03,0xfa,0xf3	@ sha256su0 q8,q9
-	vmov		q2,q0
-	.byte	0x68,0x0c,0x02,0xf3	@ sha256h q0,q1,q12
-	.byte	0x68,0x2c,0x14,0xf3	@ sha256h2 q1,q2,q12
-	.byte	0xe6,0x0c,0x64,0xf3	@ sha256su1 q8,q10,q11
-	vld1.32		{q12},[r3]!
+	INST(0xe2,0x03,0xfa,0xf3)	@ sha256su0 q8,q9
+	vmov	q2,q0
+	INST(0x68,0x0c,0x02,0xf3)	@ sha256h q0,q1,q12
+	INST(0x68,0x2c,0x14,0xf3)	@ sha256h2 q1,q2,q12
+	INST(0xe6,0x0c,0x64,0xf3)	@ sha256su1 q8,q10,q11
+	vld1.32	{q12},[r3]!
 	vadd.i32	q13,q13,q9
-	.byte	0xe4,0x23,0xfa,0xf3	@ sha256su0 q9,q10
-	vmov		q2,q0
-	.byte	0x6a,0x0c,0x02,0xf3	@ sha256h q0,q1,q13
-	.byte	0x6a,0x2c,0x14,0xf3	@ sha256h2 q1,q2,q13
-	.byte	0xe0,0x2c,0x66,0xf3	@ sha256su1 q9,q11,q8
-	vld1.32		{q13},[r3]!
+	INST(0xe4,0x23,0xfa,0xf3)	@ sha256su0 q9,q10
+	vmov	q2,q0
+	INST(0x6a,0x0c,0x02,0xf3)	@ sha256h q0,q1,q13
+	INST(0x6a,0x2c,0x14,0xf3)	@ sha256h2 q1,q2,q13
+	INST(0xe0,0x2c,0x66,0xf3)	@ sha256su1 q9,q11,q8
+	vld1.32	{q13},[r3]!
 	vadd.i32	q12,q12,q10
-	.byte	0xe6,0x43,0xfa,0xf3	@ sha256su0 q10,q11
-	vmov		q2,q0
-	.byte	0x68,0x0c,0x02,0xf3	@ sha256h q0,q1,q12
-	.byte	0x68,0x2c,0x14,0xf3	@ sha256h2 q1,q2,q12
-	.byte	0xe2,0x4c,0x60,0xf3	@ sha256su1 q10,q8,q9
-	vld1.32		{q12},[r3]!
+	INST(0xe6,0x43,0xfa,0xf3)	@ sha256su0 q10,q11
+	vmov	q2,q0
+	INST(0x68,0x0c,0x02,0xf3)	@ sha256h q0,q1,q12
+	INST(0x68,0x2c,0x14,0xf3)	@ sha256h2 q1,q2,q12
+	INST(0xe2,0x4c,0x60,0xf3)	@ sha256su1 q10,q8,q9
+	vld1.32	{q12},[r3]!
 	vadd.i32	q13,q13,q11
-	.byte	0xe0,0x63,0xfa,0xf3	@ sha256su0 q11,q8
-	vmov		q2,q0
-	.byte	0x6a,0x0c,0x02,0xf3	@ sha256h q0,q1,q13
-	.byte	0x6a,0x2c,0x14,0xf3	@ sha256h2 q1,q2,q13
-	.byte	0xe4,0x6c,0x62,0xf3	@ sha256su1 q11,q9,q10
-	vld1.32		{q13},[r3]!
+	INST(0xe0,0x63,0xfa,0xf3)	@ sha256su0 q11,q8
+	vmov	q2,q0
+	INST(0x6a,0x0c,0x02,0xf3)	@ sha256h q0,q1,q13
+	INST(0x6a,0x2c,0x14,0xf3)	@ sha256h2 q1,q2,q13
+	INST(0xe4,0x6c,0x62,0xf3)	@ sha256su1 q11,q9,q10
+	vld1.32	{q13},[r3]!
 	vadd.i32	q12,q12,q8
-	.byte	0xe2,0x03,0xfa,0xf3	@ sha256su0 q8,q9
-	vmov		q2,q0
-	.byte	0x68,0x0c,0x02,0xf3	@ sha256h q0,q1,q12
-	.byte	0x68,0x2c,0x14,0xf3	@ sha256h2 q1,q2,q12
-	.byte	0xe6,0x0c,0x64,0xf3	@ sha256su1 q8,q10,q11
-	vld1.32		{q12},[r3]!
+	INST(0xe2,0x03,0xfa,0xf3)	@ sha256su0 q8,q9
+	vmov	q2,q0
+	INST(0x68,0x0c,0x02,0xf3)	@ sha256h q0,q1,q12
+	INST(0x68,0x2c,0x14,0xf3)	@ sha256h2 q1,q2,q12
+	INST(0xe6,0x0c,0x64,0xf3)	@ sha256su1 q8,q10,q11
+	vld1.32	{q12},[r3]!
 	vadd.i32	q13,q13,q9
-	.byte	0xe4,0x23,0xfa,0xf3	@ sha256su0 q9,q10
-	vmov		q2,q0
-	.byte	0x6a,0x0c,0x02,0xf3	@ sha256h q0,q1,q13
-	.byte	0x6a,0x2c,0x14,0xf3	@ sha256h2 q1,q2,q13
-	.byte	0xe0,0x2c,0x66,0xf3	@ sha256su1 q9,q11,q8
-	vld1.32		{q13},[r3]!
+	INST(0xe4,0x23,0xfa,0xf3)	@ sha256su0 q9,q10
+	vmov	q2,q0
+	INST(0x6a,0x0c,0x02,0xf3)	@ sha256h q0,q1,q13
+	INST(0x6a,0x2c,0x14,0xf3)	@ sha256h2 q1,q2,q13
+	INST(0xe0,0x2c,0x66,0xf3)	@ sha256su1 q9,q11,q8
+	vld1.32	{q13},[r3]!
 	vadd.i32	q12,q12,q10
-	.byte	0xe6,0x43,0xfa,0xf3	@ sha256su0 q10,q11
-	vmov		q2,q0
-	.byte	0x68,0x0c,0x02,0xf3	@ sha256h q0,q1,q12
-	.byte	0x68,0x2c,0x14,0xf3	@ sha256h2 q1,q2,q12
-	.byte	0xe2,0x4c,0x60,0xf3	@ sha256su1 q10,q8,q9
-	vld1.32		{q12},[r3]!
+	INST(0xe6,0x43,0xfa,0xf3)	@ sha256su0 q10,q11
+	vmov	q2,q0
+	INST(0x68,0x0c,0x02,0xf3)	@ sha256h q0,q1,q12
+	INST(0x68,0x2c,0x14,0xf3)	@ sha256h2 q1,q2,q12
+	INST(0xe2,0x4c,0x60,0xf3)	@ sha256su1 q10,q8,q9
+	vld1.32	{q12},[r3]!
 	vadd.i32	q13,q13,q11
-	.byte	0xe0,0x63,0xfa,0xf3	@ sha256su0 q11,q8
-	vmov		q2,q0
-	.byte	0x6a,0x0c,0x02,0xf3	@ sha256h q0,q1,q13
-	.byte	0x6a,0x2c,0x14,0xf3	@ sha256h2 q1,q2,q13
-	.byte	0xe4,0x6c,0x62,0xf3	@ sha256su1 q11,q9,q10
-	vld1.32		{q13},[r3]!
+	INST(0xe0,0x63,0xfa,0xf3)	@ sha256su0 q11,q8
+	vmov	q2,q0
+	INST(0x6a,0x0c,0x02,0xf3)	@ sha256h q0,q1,q13
+	INST(0x6a,0x2c,0x14,0xf3)	@ sha256h2 q1,q2,q13
+	INST(0xe4,0x6c,0x62,0xf3)	@ sha256su1 q11,q9,q10
+	vld1.32	{q13},[r3]!
 	vadd.i32	q12,q12,q8
-	.byte	0xe2,0x03,0xfa,0xf3	@ sha256su0 q8,q9
-	vmov		q2,q0
-	.byte	0x68,0x0c,0x02,0xf3	@ sha256h q0,q1,q12
-	.byte	0x68,0x2c,0x14,0xf3	@ sha256h2 q1,q2,q12
-	.byte	0xe6,0x0c,0x64,0xf3	@ sha256su1 q8,q10,q11
-	vld1.32		{q12},[r3]!
+	INST(0xe2,0x03,0xfa,0xf3)	@ sha256su0 q8,q9
+	vmov	q2,q0
+	INST(0x68,0x0c,0x02,0xf3)	@ sha256h q0,q1,q12
+	INST(0x68,0x2c,0x14,0xf3)	@ sha256h2 q1,q2,q12
+	INST(0xe6,0x0c,0x64,0xf3)	@ sha256su1 q8,q10,q11
+	vld1.32	{q12},[r3]!
 	vadd.i32	q13,q13,q9
-	.byte	0xe4,0x23,0xfa,0xf3	@ sha256su0 q9,q10
-	vmov		q2,q0
-	.byte	0x6a,0x0c,0x02,0xf3	@ sha256h q0,q1,q13
-	.byte	0x6a,0x2c,0x14,0xf3	@ sha256h2 q1,q2,q13
-	.byte	0xe0,0x2c,0x66,0xf3	@ sha256su1 q9,q11,q8
-	vld1.32		{q13},[r3]!
+	INST(0xe4,0x23,0xfa,0xf3)	@ sha256su0 q9,q10
+	vmov	q2,q0
+	INST(0x6a,0x0c,0x02,0xf3)	@ sha256h q0,q1,q13
+	INST(0x6a,0x2c,0x14,0xf3)	@ sha256h2 q1,q2,q13
+	INST(0xe0,0x2c,0x66,0xf3)	@ sha256su1 q9,q11,q8
+	vld1.32	{q13},[r3]!
 	vadd.i32	q12,q12,q10
-	.byte	0xe6,0x43,0xfa,0xf3	@ sha256su0 q10,q11
-	vmov		q2,q0
-	.byte	0x68,0x0c,0x02,0xf3	@ sha256h q0,q1,q12
-	.byte	0x68,0x2c,0x14,0xf3	@ sha256h2 q1,q2,q12
-	.byte	0xe2,0x4c,0x60,0xf3	@ sha256su1 q10,q8,q9
-	vld1.32		{q12},[r3]!
+	INST(0xe6,0x43,0xfa,0xf3)	@ sha256su0 q10,q11
+	vmov	q2,q0
+	INST(0x68,0x0c,0x02,0xf3)	@ sha256h q0,q1,q12
+	INST(0x68,0x2c,0x14,0xf3)	@ sha256h2 q1,q2,q12
+	INST(0xe2,0x4c,0x60,0xf3)	@ sha256su1 q10,q8,q9
+	vld1.32	{q12},[r3]!
 	vadd.i32	q13,q13,q11
-	.byte	0xe0,0x63,0xfa,0xf3	@ sha256su0 q11,q8
-	vmov		q2,q0
-	.byte	0x6a,0x0c,0x02,0xf3	@ sha256h q0,q1,q13
-	.byte	0x6a,0x2c,0x14,0xf3	@ sha256h2 q1,q2,q13
-	.byte	0xe4,0x6c,0x62,0xf3	@ sha256su1 q11,q9,q10
-	vld1.32		{q13},[r3]!
+	INST(0xe0,0x63,0xfa,0xf3)	@ sha256su0 q11,q8
+	vmov	q2,q0
+	INST(0x6a,0x0c,0x02,0xf3)	@ sha256h q0,q1,q13
+	INST(0x6a,0x2c,0x14,0xf3)	@ sha256h2 q1,q2,q13
+	INST(0xe4,0x6c,0x62,0xf3)	@ sha256su1 q11,q9,q10
+	vld1.32	{q13},[r3]!
 	vadd.i32	q12,q12,q8
-	vmov		q2,q0
-	.byte	0x68,0x0c,0x02,0xf3	@ sha256h q0,q1,q12
-	.byte	0x68,0x2c,0x14,0xf3	@ sha256h2 q1,q2,q12
+	vmov	q2,q0
+	INST(0x68,0x0c,0x02,0xf3)	@ sha256h q0,q1,q12
+	INST(0x68,0x2c,0x14,0xf3)	@ sha256h2 q1,q2,q12
 
-	vld1.32		{q12},[r3]!
+	vld1.32	{q12},[r3]!
 	vadd.i32	q13,q13,q9
-	vmov		q2,q0
-	.byte	0x6a,0x0c,0x02,0xf3	@ sha256h q0,q1,q13
-	.byte	0x6a,0x2c,0x14,0xf3	@ sha256h2 q1,q2,q13
+	vmov	q2,q0
+	INST(0x6a,0x0c,0x02,0xf3)	@ sha256h q0,q1,q13
+	INST(0x6a,0x2c,0x14,0xf3)	@ sha256h2 q1,q2,q13
 
-	vld1.32		{q13},[r3]
+	vld1.32	{q13},[r3]
 	vadd.i32	q12,q12,q10
-	sub		r3,r3,#256-16	@ rewind
-	vmov		q2,q0
-	.byte	0x68,0x0c,0x02,0xf3	@ sha256h q0,q1,q12
-	.byte	0x68,0x2c,0x14,0xf3	@ sha256h2 q1,q2,q12
+	sub	r3,r3,#256-16	@ rewind
+	vmov	q2,q0
+	INST(0x68,0x0c,0x02,0xf3)	@ sha256h q0,q1,q12
+	INST(0x68,0x2c,0x14,0xf3)	@ sha256h2 q1,q2,q12
 
 	vadd.i32	q13,q13,q11
-	vmov		q2,q0
-	.byte	0x6a,0x0c,0x02,0xf3	@ sha256h q0,q1,q13
-	.byte	0x6a,0x2c,0x14,0xf3	@ sha256h2 q1,q2,q13
+	vmov	q2,q0
+	INST(0x6a,0x0c,0x02,0xf3)	@ sha256h q0,q1,q13
+	INST(0x6a,0x2c,0x14,0xf3)	@ sha256h2 q1,q2,q13
 
 	vadd.i32	q0,q0,q14
 	vadd.i32	q1,q1,q15
-	bne		.Loop_v8
+	it	ne
+	bne	.Loop_v8
 
-	vst1.32		{q0,q1},[r0]
+	vst1.32	{q0,q1},[r0]
 
 	bx	lr		@ bx lr
 .size	sha256_block_data_order_armv8,.-sha256_block_data_order_armv8
 #endif
-.asciz  "SHA256 block transform for ARMv4/NEON/ARMv8, CRYPTOGAMS by <appro@openssl.org>"
+.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
 .align	2
-#if __ARM_MAX_ARCH__>=7
-.comm   OPENSSL_armcap_P,4,4
-.hidden OPENSSL_armcap_P
+.align	2
+#if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__)
+.comm	OPENSSL_armcap_P,4,4
+.hidden	OPENSSL_armcap_P
 #endif
diff --git a/linux-arm/crypto/sha/sha512-armv4.S b/linux-arm/crypto/sha/sha512-armv4.S
index 37cfca3..1a3d467 100644
--- a/linux-arm/crypto/sha/sha512-armv4.S
+++ b/linux-arm/crypto/sha/sha512-armv4.S
@@ -1,4 +1,61 @@
-#include "arm_arch.h"
+
+@ ====================================================================
+@ Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
+@ project. The module is, however, dual licensed under OpenSSL and
+@ CRYPTOGAMS licenses depending on where you obtain it. For further
+@ details see http://www.openssl.org/~appro/cryptogams/.
+@
+@ Permission to use under GPL terms is granted.
+@ ====================================================================
+
+@ SHA512 block procedure for ARMv4. September 2007.
+
+@ This code is ~4.5 (four and a half) times faster than code generated
+@ by gcc 3.4 and it spends ~72 clock cycles per byte [on single-issue
+@ Xscale PXA250 core].
+@
+@ July 2010.
+@
+@ Rescheduling for dual-issue pipeline resulted in 6% improvement on
+@ Cortex A8 core and ~40 cycles per processed byte.
+
+@ February 2011.
+@
+@ Profiler-assisted and platform-specific optimization resulted in 7%
+@ improvement on Coxtex A8 core and ~38 cycles per byte.
+
+@ March 2011.
+@
+@ Add NEON implementation. On Cortex A8 it was measured to process
+@ one byte in 23.3 cycles or ~60% faster than integer-only code.
+
+@ August 2012.
+@
+@ Improve NEON performance by 12% on Snapdragon S4. In absolute
+@ terms it's 22.6 cycles per byte, which is disappointing result.
+@ Technical writers asserted that 3-way S4 pipeline can sustain
+@ multiple NEON instructions per cycle, but dual NEON issue could
+@ not be observed, see http://www.openssl.org/~appro/Snapdragon-S4.html
+@ for further details. On side note Cortex-A15 processes one byte in
+@ 16 cycles.
+
+@ Byte order [in]dependence. =========================================
+@
+@ Originally caller was expected to maintain specific *dword* order in
+@ h[0-7], namely with most significant dword at *lower* address, which
+@ was reflected in below two parameters as 0 and 4. Now caller is
+@ expected to maintain native byte order for whole 64-bit values.
+#ifndef __KERNEL__
+# include "arm_arch.h"
+# define VFP_ABI_PUSH	vstmdb	sp!,{d8-d15}
+# define VFP_ABI_POP	vldmia	sp!,{d8-d15}
+#else
+# define __ARM_ARCH__ __LINUX_ARM_ARCH__
+# define __ARM_MAX_ARCH__ 7
+# define VFP_ABI_PUSH
+# define VFP_ABI_POP
+#endif
+
 #ifdef __ARMEL__
 # define LO 0
 # define HI 4
@@ -10,71 +67,90 @@
 #endif
 
 .text
+#if __ARM_ARCH__<7 || defined(__APPLE__)
 .code	32
+#else
+.syntax	unified
+# ifdef __thumb2__
+#  define adrl adr
+.thumb
+# else
+.code	32
+# endif
+#endif
+
 .type	K512,%object
 .align	5
 K512:
-WORD64(0x428a2f98,0xd728ae22, 0x71374491,0x23ef65cd)
-WORD64(0xb5c0fbcf,0xec4d3b2f, 0xe9b5dba5,0x8189dbbc)
-WORD64(0x3956c25b,0xf348b538, 0x59f111f1,0xb605d019)
-WORD64(0x923f82a4,0xaf194f9b, 0xab1c5ed5,0xda6d8118)
-WORD64(0xd807aa98,0xa3030242, 0x12835b01,0x45706fbe)
-WORD64(0x243185be,0x4ee4b28c, 0x550c7dc3,0xd5ffb4e2)
-WORD64(0x72be5d74,0xf27b896f, 0x80deb1fe,0x3b1696b1)
-WORD64(0x9bdc06a7,0x25c71235, 0xc19bf174,0xcf692694)
-WORD64(0xe49b69c1,0x9ef14ad2, 0xefbe4786,0x384f25e3)
-WORD64(0x0fc19dc6,0x8b8cd5b5, 0x240ca1cc,0x77ac9c65)
-WORD64(0x2de92c6f,0x592b0275, 0x4a7484aa,0x6ea6e483)
-WORD64(0x5cb0a9dc,0xbd41fbd4, 0x76f988da,0x831153b5)
-WORD64(0x983e5152,0xee66dfab, 0xa831c66d,0x2db43210)
-WORD64(0xb00327c8,0x98fb213f, 0xbf597fc7,0xbeef0ee4)
-WORD64(0xc6e00bf3,0x3da88fc2, 0xd5a79147,0x930aa725)
-WORD64(0x06ca6351,0xe003826f, 0x14292967,0x0a0e6e70)
-WORD64(0x27b70a85,0x46d22ffc, 0x2e1b2138,0x5c26c926)
-WORD64(0x4d2c6dfc,0x5ac42aed, 0x53380d13,0x9d95b3df)
-WORD64(0x650a7354,0x8baf63de, 0x766a0abb,0x3c77b2a8)
-WORD64(0x81c2c92e,0x47edaee6, 0x92722c85,0x1482353b)
-WORD64(0xa2bfe8a1,0x4cf10364, 0xa81a664b,0xbc423001)
-WORD64(0xc24b8b70,0xd0f89791, 0xc76c51a3,0x0654be30)
-WORD64(0xd192e819,0xd6ef5218, 0xd6990624,0x5565a910)
-WORD64(0xf40e3585,0x5771202a, 0x106aa070,0x32bbd1b8)
-WORD64(0x19a4c116,0xb8d2d0c8, 0x1e376c08,0x5141ab53)
-WORD64(0x2748774c,0xdf8eeb99, 0x34b0bcb5,0xe19b48a8)
-WORD64(0x391c0cb3,0xc5c95a63, 0x4ed8aa4a,0xe3418acb)
-WORD64(0x5b9cca4f,0x7763e373, 0x682e6ff3,0xd6b2b8a3)
-WORD64(0x748f82ee,0x5defb2fc, 0x78a5636f,0x43172f60)
-WORD64(0x84c87814,0xa1f0ab72, 0x8cc70208,0x1a6439ec)
-WORD64(0x90befffa,0x23631e28, 0xa4506ceb,0xde82bde9)
-WORD64(0xbef9a3f7,0xb2c67915, 0xc67178f2,0xe372532b)
-WORD64(0xca273ece,0xea26619c, 0xd186b8c7,0x21c0c207)
-WORD64(0xeada7dd6,0xcde0eb1e, 0xf57d4f7f,0xee6ed178)
-WORD64(0x06f067aa,0x72176fba, 0x0a637dc5,0xa2c898a6)
-WORD64(0x113f9804,0xbef90dae, 0x1b710b35,0x131c471b)
-WORD64(0x28db77f5,0x23047d84, 0x32caab7b,0x40c72493)
-WORD64(0x3c9ebe0a,0x15c9bebc, 0x431d67c4,0x9c100d4c)
-WORD64(0x4cc5d4be,0xcb3e42b6, 0x597f299c,0xfc657e2a)
-WORD64(0x5fcb6fab,0x3ad6faec, 0x6c44198c,0x4a475817)
+	WORD64(0x428a2f98,0xd728ae22,	0x71374491,0x23ef65cd)
+	WORD64(0xb5c0fbcf,0xec4d3b2f,	0xe9b5dba5,0x8189dbbc)
+	WORD64(0x3956c25b,0xf348b538,	0x59f111f1,0xb605d019)
+	WORD64(0x923f82a4,0xaf194f9b,	0xab1c5ed5,0xda6d8118)
+	WORD64(0xd807aa98,0xa3030242,	0x12835b01,0x45706fbe)
+	WORD64(0x243185be,0x4ee4b28c,	0x550c7dc3,0xd5ffb4e2)
+	WORD64(0x72be5d74,0xf27b896f,	0x80deb1fe,0x3b1696b1)
+	WORD64(0x9bdc06a7,0x25c71235,	0xc19bf174,0xcf692694)
+	WORD64(0xe49b69c1,0x9ef14ad2,	0xefbe4786,0x384f25e3)
+	WORD64(0x0fc19dc6,0x8b8cd5b5,	0x240ca1cc,0x77ac9c65)
+	WORD64(0x2de92c6f,0x592b0275,	0x4a7484aa,0x6ea6e483)
+	WORD64(0x5cb0a9dc,0xbd41fbd4,	0x76f988da,0x831153b5)
+	WORD64(0x983e5152,0xee66dfab,	0xa831c66d,0x2db43210)
+	WORD64(0xb00327c8,0x98fb213f,	0xbf597fc7,0xbeef0ee4)
+	WORD64(0xc6e00bf3,0x3da88fc2,	0xd5a79147,0x930aa725)
+	WORD64(0x06ca6351,0xe003826f,	0x14292967,0x0a0e6e70)
+	WORD64(0x27b70a85,0x46d22ffc,	0x2e1b2138,0x5c26c926)
+	WORD64(0x4d2c6dfc,0x5ac42aed,	0x53380d13,0x9d95b3df)
+	WORD64(0x650a7354,0x8baf63de,	0x766a0abb,0x3c77b2a8)
+	WORD64(0x81c2c92e,0x47edaee6,	0x92722c85,0x1482353b)
+	WORD64(0xa2bfe8a1,0x4cf10364,	0xa81a664b,0xbc423001)
+	WORD64(0xc24b8b70,0xd0f89791,	0xc76c51a3,0x0654be30)
+	WORD64(0xd192e819,0xd6ef5218,	0xd6990624,0x5565a910)
+	WORD64(0xf40e3585,0x5771202a,	0x106aa070,0x32bbd1b8)
+	WORD64(0x19a4c116,0xb8d2d0c8,	0x1e376c08,0x5141ab53)
+	WORD64(0x2748774c,0xdf8eeb99,	0x34b0bcb5,0xe19b48a8)
+	WORD64(0x391c0cb3,0xc5c95a63,	0x4ed8aa4a,0xe3418acb)
+	WORD64(0x5b9cca4f,0x7763e373,	0x682e6ff3,0xd6b2b8a3)
+	WORD64(0x748f82ee,0x5defb2fc,	0x78a5636f,0x43172f60)
+	WORD64(0x84c87814,0xa1f0ab72,	0x8cc70208,0x1a6439ec)
+	WORD64(0x90befffa,0x23631e28,	0xa4506ceb,0xde82bde9)
+	WORD64(0xbef9a3f7,0xb2c67915,	0xc67178f2,0xe372532b)
+	WORD64(0xca273ece,0xea26619c,	0xd186b8c7,0x21c0c207)
+	WORD64(0xeada7dd6,0xcde0eb1e,	0xf57d4f7f,0xee6ed178)
+	WORD64(0x06f067aa,0x72176fba,	0x0a637dc5,0xa2c898a6)
+	WORD64(0x113f9804,0xbef90dae,	0x1b710b35,0x131c471b)
+	WORD64(0x28db77f5,0x23047d84,	0x32caab7b,0x40c72493)
+	WORD64(0x3c9ebe0a,0x15c9bebc,	0x431d67c4,0x9c100d4c)
+	WORD64(0x4cc5d4be,0xcb3e42b6,	0x597f299c,0xfc657e2a)
+	WORD64(0x5fcb6fab,0x3ad6faec,	0x6c44198c,0x4a475817)
 .size	K512,.-K512
-#if __ARM_MAX_ARCH__>=7
+#if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__)
 .LOPENSSL_armcap:
-.word	OPENSSL_armcap_P-sha512_block_data_order
+.word	OPENSSL_armcap_P-.Lsha512_block_data_order
 .skip	32-4
 #else
 .skip	32
 #endif
 
-.global	sha512_block_data_order
+.globl	sha512_block_data_order
 .type	sha512_block_data_order,%function
 sha512_block_data_order:
+.Lsha512_block_data_order:
+#if __ARM_ARCH__<7
 	sub	r3,pc,#8		@ sha512_block_data_order
-	add	r2,r1,r2,lsl#7	@ len to point at the end of inp
-#if __ARM_MAX_ARCH__>=7
+#else
+	adr	r3,sha512_block_data_order
+#endif
+#if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__)
 	ldr	r12,.LOPENSSL_armcap
 	ldr	r12,[r3,r12]		@ OPENSSL_armcap_P
+#ifdef	__APPLE__
+	ldr	r12,[r12]
+#endif
 	tst	r12,#1
 	bne	.LNEON
 #endif
-	stmdb	sp!,{r4-r12,lr}
+	add	r2,r1,r2,lsl#7	@ len to point at the end of inp
+	stmdb	sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr}
 	sub	r14,r3,#672		@ K512
 	sub	sp,sp,#9*8
 
@@ -186,6 +262,9 @@
 	teq	r9,#148
 
 	ldr	r12,[sp,#16+0]	@ c.lo
+#if __ARM_ARCH__>=7
+	it	eq			@ Thumb2 thing, sanity check in ARM
+#endif
 	orreq	r14,r14,#1
 	@ Sigma0(x)	(ROTR((x),28) ^ ROTR((x),34) ^ ROTR((x),39))
 	@ LO		lo>>28^hi<<4  ^ hi>>2^lo<<30 ^ hi>>7^lo<<25
@@ -323,6 +402,9 @@
 	teq	r9,#23
 
 	ldr	r12,[sp,#16+0]	@ c.lo
+#if __ARM_ARCH__>=7
+	it	eq			@ Thumb2 thing, sanity check in ARM
+#endif
 	orreq	r14,r14,#1
 	@ Sigma0(x)	(ROTR((x),28) ^ ROTR((x),34) ^ ROTR((x),39))
 	@ LO		lo>>28^hi<<4  ^ hi>>2^lo<<30 ^ hi>>7^lo<<25
@@ -357,6 +439,9 @@
 	adc	r6,r6,r4		@ h += T
 	tst	r14,#1
 	add	r14,r14,#8
+#if __ARM_ARCH__>=7
+	ittt	eq			@ Thumb2 thing, sanity check in ARM
+#endif
 	ldreq	r9,[sp,#184+0]
 	ldreq	r10,[sp,#184+4]
 	beq	.L16_79
@@ -434,1343 +519,1349 @@
 
 	add	sp,sp,#8*9		@ destroy frame
 #if __ARM_ARCH__>=5
-	ldmia	sp!,{r4-r12,pc}
+	ldmia	sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,pc}
 #else
-	ldmia	sp!,{r4-r12,lr}
+	ldmia	sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr}
 	tst	lr,#1
 	moveq	pc,lr			@ be binary compatible with V4, yet
-	.word	0xe12fff1e			@ interoperable with Thumb ISA:-)
+.word	0xe12fff1e			@ interoperable with Thumb ISA:-)
 #endif
+.size	sha512_block_data_order,.-sha512_block_data_order
 #if __ARM_MAX_ARCH__>=7
 .arch	armv7-a
 .fpu	neon
 
+.globl	sha512_block_data_order_neon
+.type	sha512_block_data_order_neon,%function
 .align	4
+sha512_block_data_order_neon:
 .LNEON:
-	dmb				@ errata #451034 on early Cortex A8
-	vstmdb	sp!,{d8-d15}		@ ABI specification says so
-	sub	r3,r3,#672		@ K512
-	vldmia	r0,{d16-d23}		@ load context
+	dmb	@ errata #451034 on early Cortex A8
+	add	r2,r1,r2,lsl#7	@ len to point at the end of inp
+	adr	r3,K512
+	VFP_ABI_PUSH
+	vldmia	r0,{d16,d17,d18,d19,d20,d21,d22,d23}		@ load context
 .Loop_neon:
 	vshr.u64	d24,d20,#14	@ 0
 #if 0<16
-	vld1.64		{d0},[r1]!	@ handles unaligned
+	vld1.64	{d0},[r1]!	@ handles unaligned
 #endif
 	vshr.u64	d25,d20,#18
 #if 0>0
-	 vadd.i64	d16,d30			@ h+=Maj from the past
+	vadd.i64	d16,d30			@ h+=Maj from the past
 #endif
 	vshr.u64	d26,d20,#41
-	vld1.64		{d28},[r3,:64]!	@ K[i++]
-	vsli.64		d24,d20,#50
-	vsli.64		d25,d20,#46
-	vmov		d29,d20
-	vsli.64		d26,d20,#23
+	vld1.64	{d28},[r3,:64]!	@ K[i++]
+	vsli.64	d24,d20,#50
+	vsli.64	d25,d20,#46
+	vmov	d29,d20
+	vsli.64	d26,d20,#23
 #if 0<16 && defined(__ARMEL__)
 	vrev64.8	d0,d0
 #endif
-	veor		d25,d24
-	vbsl		d29,d21,d22		@ Ch(e,f,g)
+	veor	d25,d24
+	vbsl	d29,d21,d22		@ Ch(e,f,g)
 	vshr.u64	d24,d16,#28
-	veor		d26,d25			@ Sigma1(e)
+	veor	d26,d25			@ Sigma1(e)
 	vadd.i64	d27,d29,d23
 	vshr.u64	d25,d16,#34
-	vsli.64		d24,d16,#36
+	vsli.64	d24,d16,#36
 	vadd.i64	d27,d26
 	vshr.u64	d26,d16,#39
 	vadd.i64	d28,d0
-	vsli.64		d25,d16,#30
-	veor		d30,d16,d17
-	vsli.64		d26,d16,#25
-	veor		d23,d24,d25
+	vsli.64	d25,d16,#30
+	veor	d30,d16,d17
+	vsli.64	d26,d16,#25
+	veor	d23,d24,d25
 	vadd.i64	d27,d28
-	vbsl		d30,d18,d17		@ Maj(a,b,c)
-	veor		d23,d26			@ Sigma0(a)
+	vbsl	d30,d18,d17		@ Maj(a,b,c)
+	veor	d23,d26			@ Sigma0(a)
 	vadd.i64	d19,d27
 	vadd.i64	d30,d27
 	@ vadd.i64	d23,d30
 	vshr.u64	d24,d19,#14	@ 1
 #if 1<16
-	vld1.64		{d1},[r1]!	@ handles unaligned
+	vld1.64	{d1},[r1]!	@ handles unaligned
 #endif
 	vshr.u64	d25,d19,#18
 #if 1>0
-	 vadd.i64	d23,d30			@ h+=Maj from the past
+	vadd.i64	d23,d30			@ h+=Maj from the past
 #endif
 	vshr.u64	d26,d19,#41
-	vld1.64		{d28},[r3,:64]!	@ K[i++]
-	vsli.64		d24,d19,#50
-	vsli.64		d25,d19,#46
-	vmov		d29,d19
-	vsli.64		d26,d19,#23
+	vld1.64	{d28},[r3,:64]!	@ K[i++]
+	vsli.64	d24,d19,#50
+	vsli.64	d25,d19,#46
+	vmov	d29,d19
+	vsli.64	d26,d19,#23
 #if 1<16 && defined(__ARMEL__)
 	vrev64.8	d1,d1
 #endif
-	veor		d25,d24
-	vbsl		d29,d20,d21		@ Ch(e,f,g)
+	veor	d25,d24
+	vbsl	d29,d20,d21		@ Ch(e,f,g)
 	vshr.u64	d24,d23,#28
-	veor		d26,d25			@ Sigma1(e)
+	veor	d26,d25			@ Sigma1(e)
 	vadd.i64	d27,d29,d22
 	vshr.u64	d25,d23,#34
-	vsli.64		d24,d23,#36
+	vsli.64	d24,d23,#36
 	vadd.i64	d27,d26
 	vshr.u64	d26,d23,#39
 	vadd.i64	d28,d1
-	vsli.64		d25,d23,#30
-	veor		d30,d23,d16
-	vsli.64		d26,d23,#25
-	veor		d22,d24,d25
+	vsli.64	d25,d23,#30
+	veor	d30,d23,d16
+	vsli.64	d26,d23,#25
+	veor	d22,d24,d25
 	vadd.i64	d27,d28
-	vbsl		d30,d17,d16		@ Maj(a,b,c)
-	veor		d22,d26			@ Sigma0(a)
+	vbsl	d30,d17,d16		@ Maj(a,b,c)
+	veor	d22,d26			@ Sigma0(a)
 	vadd.i64	d18,d27
 	vadd.i64	d30,d27
 	@ vadd.i64	d22,d30
 	vshr.u64	d24,d18,#14	@ 2
 #if 2<16
-	vld1.64		{d2},[r1]!	@ handles unaligned
+	vld1.64	{d2},[r1]!	@ handles unaligned
 #endif
 	vshr.u64	d25,d18,#18
 #if 2>0
-	 vadd.i64	d22,d30			@ h+=Maj from the past
+	vadd.i64	d22,d30			@ h+=Maj from the past
 #endif
 	vshr.u64	d26,d18,#41
-	vld1.64		{d28},[r3,:64]!	@ K[i++]
-	vsli.64		d24,d18,#50
-	vsli.64		d25,d18,#46
-	vmov		d29,d18
-	vsli.64		d26,d18,#23
+	vld1.64	{d28},[r3,:64]!	@ K[i++]
+	vsli.64	d24,d18,#50
+	vsli.64	d25,d18,#46
+	vmov	d29,d18
+	vsli.64	d26,d18,#23
 #if 2<16 && defined(__ARMEL__)
 	vrev64.8	d2,d2
 #endif
-	veor		d25,d24
-	vbsl		d29,d19,d20		@ Ch(e,f,g)
+	veor	d25,d24
+	vbsl	d29,d19,d20		@ Ch(e,f,g)
 	vshr.u64	d24,d22,#28
-	veor		d26,d25			@ Sigma1(e)
+	veor	d26,d25			@ Sigma1(e)
 	vadd.i64	d27,d29,d21
 	vshr.u64	d25,d22,#34
-	vsli.64		d24,d22,#36
+	vsli.64	d24,d22,#36
 	vadd.i64	d27,d26
 	vshr.u64	d26,d22,#39
 	vadd.i64	d28,d2
-	vsli.64		d25,d22,#30
-	veor		d30,d22,d23
-	vsli.64		d26,d22,#25
-	veor		d21,d24,d25
+	vsli.64	d25,d22,#30
+	veor	d30,d22,d23
+	vsli.64	d26,d22,#25
+	veor	d21,d24,d25
 	vadd.i64	d27,d28
-	vbsl		d30,d16,d23		@ Maj(a,b,c)
-	veor		d21,d26			@ Sigma0(a)
+	vbsl	d30,d16,d23		@ Maj(a,b,c)
+	veor	d21,d26			@ Sigma0(a)
 	vadd.i64	d17,d27
 	vadd.i64	d30,d27
 	@ vadd.i64	d21,d30
 	vshr.u64	d24,d17,#14	@ 3
 #if 3<16
-	vld1.64		{d3},[r1]!	@ handles unaligned
+	vld1.64	{d3},[r1]!	@ handles unaligned
 #endif
 	vshr.u64	d25,d17,#18
 #if 3>0
-	 vadd.i64	d21,d30			@ h+=Maj from the past
+	vadd.i64	d21,d30			@ h+=Maj from the past
 #endif
 	vshr.u64	d26,d17,#41
-	vld1.64		{d28},[r3,:64]!	@ K[i++]
-	vsli.64		d24,d17,#50
-	vsli.64		d25,d17,#46
-	vmov		d29,d17
-	vsli.64		d26,d17,#23
+	vld1.64	{d28},[r3,:64]!	@ K[i++]
+	vsli.64	d24,d17,#50
+	vsli.64	d25,d17,#46
+	vmov	d29,d17
+	vsli.64	d26,d17,#23
 #if 3<16 && defined(__ARMEL__)
 	vrev64.8	d3,d3
 #endif
-	veor		d25,d24
-	vbsl		d29,d18,d19		@ Ch(e,f,g)
+	veor	d25,d24
+	vbsl	d29,d18,d19		@ Ch(e,f,g)
 	vshr.u64	d24,d21,#28
-	veor		d26,d25			@ Sigma1(e)
+	veor	d26,d25			@ Sigma1(e)
 	vadd.i64	d27,d29,d20
 	vshr.u64	d25,d21,#34
-	vsli.64		d24,d21,#36
+	vsli.64	d24,d21,#36
 	vadd.i64	d27,d26
 	vshr.u64	d26,d21,#39
 	vadd.i64	d28,d3
-	vsli.64		d25,d21,#30
-	veor		d30,d21,d22
-	vsli.64		d26,d21,#25
-	veor		d20,d24,d25
+	vsli.64	d25,d21,#30
+	veor	d30,d21,d22
+	vsli.64	d26,d21,#25
+	veor	d20,d24,d25
 	vadd.i64	d27,d28
-	vbsl		d30,d23,d22		@ Maj(a,b,c)
-	veor		d20,d26			@ Sigma0(a)
+	vbsl	d30,d23,d22		@ Maj(a,b,c)
+	veor	d20,d26			@ Sigma0(a)
 	vadd.i64	d16,d27
 	vadd.i64	d30,d27
 	@ vadd.i64	d20,d30
 	vshr.u64	d24,d16,#14	@ 4
 #if 4<16
-	vld1.64		{d4},[r1]!	@ handles unaligned
+	vld1.64	{d4},[r1]!	@ handles unaligned
 #endif
 	vshr.u64	d25,d16,#18
 #if 4>0
-	 vadd.i64	d20,d30			@ h+=Maj from the past
+	vadd.i64	d20,d30			@ h+=Maj from the past
 #endif
 	vshr.u64	d26,d16,#41
-	vld1.64		{d28},[r3,:64]!	@ K[i++]
-	vsli.64		d24,d16,#50
-	vsli.64		d25,d16,#46
-	vmov		d29,d16
-	vsli.64		d26,d16,#23
+	vld1.64	{d28},[r3,:64]!	@ K[i++]
+	vsli.64	d24,d16,#50
+	vsli.64	d25,d16,#46
+	vmov	d29,d16
+	vsli.64	d26,d16,#23
 #if 4<16 && defined(__ARMEL__)
 	vrev64.8	d4,d4
 #endif
-	veor		d25,d24
-	vbsl		d29,d17,d18		@ Ch(e,f,g)
+	veor	d25,d24
+	vbsl	d29,d17,d18		@ Ch(e,f,g)
 	vshr.u64	d24,d20,#28
-	veor		d26,d25			@ Sigma1(e)
+	veor	d26,d25			@ Sigma1(e)
 	vadd.i64	d27,d29,d19
 	vshr.u64	d25,d20,#34
-	vsli.64		d24,d20,#36
+	vsli.64	d24,d20,#36
 	vadd.i64	d27,d26
 	vshr.u64	d26,d20,#39
 	vadd.i64	d28,d4
-	vsli.64		d25,d20,#30
-	veor		d30,d20,d21
-	vsli.64		d26,d20,#25
-	veor		d19,d24,d25
+	vsli.64	d25,d20,#30
+	veor	d30,d20,d21
+	vsli.64	d26,d20,#25
+	veor	d19,d24,d25
 	vadd.i64	d27,d28
-	vbsl		d30,d22,d21		@ Maj(a,b,c)
-	veor		d19,d26			@ Sigma0(a)
+	vbsl	d30,d22,d21		@ Maj(a,b,c)
+	veor	d19,d26			@ Sigma0(a)
 	vadd.i64	d23,d27
 	vadd.i64	d30,d27
 	@ vadd.i64	d19,d30
 	vshr.u64	d24,d23,#14	@ 5
 #if 5<16
-	vld1.64		{d5},[r1]!	@ handles unaligned
+	vld1.64	{d5},[r1]!	@ handles unaligned
 #endif
 	vshr.u64	d25,d23,#18
 #if 5>0
-	 vadd.i64	d19,d30			@ h+=Maj from the past
+	vadd.i64	d19,d30			@ h+=Maj from the past
 #endif
 	vshr.u64	d26,d23,#41
-	vld1.64		{d28},[r3,:64]!	@ K[i++]
-	vsli.64		d24,d23,#50
-	vsli.64		d25,d23,#46
-	vmov		d29,d23
-	vsli.64		d26,d23,#23
+	vld1.64	{d28},[r3,:64]!	@ K[i++]
+	vsli.64	d24,d23,#50
+	vsli.64	d25,d23,#46
+	vmov	d29,d23
+	vsli.64	d26,d23,#23
 #if 5<16 && defined(__ARMEL__)
 	vrev64.8	d5,d5
 #endif
-	veor		d25,d24
-	vbsl		d29,d16,d17		@ Ch(e,f,g)
+	veor	d25,d24
+	vbsl	d29,d16,d17		@ Ch(e,f,g)
 	vshr.u64	d24,d19,#28
-	veor		d26,d25			@ Sigma1(e)
+	veor	d26,d25			@ Sigma1(e)
 	vadd.i64	d27,d29,d18
 	vshr.u64	d25,d19,#34
-	vsli.64		d24,d19,#36
+	vsli.64	d24,d19,#36
 	vadd.i64	d27,d26
 	vshr.u64	d26,d19,#39
 	vadd.i64	d28,d5
-	vsli.64		d25,d19,#30
-	veor		d30,d19,d20
-	vsli.64		d26,d19,#25
-	veor		d18,d24,d25
+	vsli.64	d25,d19,#30
+	veor	d30,d19,d20
+	vsli.64	d26,d19,#25
+	veor	d18,d24,d25
 	vadd.i64	d27,d28
-	vbsl		d30,d21,d20		@ Maj(a,b,c)
-	veor		d18,d26			@ Sigma0(a)
+	vbsl	d30,d21,d20		@ Maj(a,b,c)
+	veor	d18,d26			@ Sigma0(a)
 	vadd.i64	d22,d27
 	vadd.i64	d30,d27
 	@ vadd.i64	d18,d30
 	vshr.u64	d24,d22,#14	@ 6
 #if 6<16
-	vld1.64		{d6},[r1]!	@ handles unaligned
+	vld1.64	{d6},[r1]!	@ handles unaligned
 #endif
 	vshr.u64	d25,d22,#18
 #if 6>0
-	 vadd.i64	d18,d30			@ h+=Maj from the past
+	vadd.i64	d18,d30			@ h+=Maj from the past
 #endif
 	vshr.u64	d26,d22,#41
-	vld1.64		{d28},[r3,:64]!	@ K[i++]
-	vsli.64		d24,d22,#50
-	vsli.64		d25,d22,#46
-	vmov		d29,d22
-	vsli.64		d26,d22,#23
+	vld1.64	{d28},[r3,:64]!	@ K[i++]
+	vsli.64	d24,d22,#50
+	vsli.64	d25,d22,#46
+	vmov	d29,d22
+	vsli.64	d26,d22,#23
 #if 6<16 && defined(__ARMEL__)
 	vrev64.8	d6,d6
 #endif
-	veor		d25,d24
-	vbsl		d29,d23,d16		@ Ch(e,f,g)
+	veor	d25,d24
+	vbsl	d29,d23,d16		@ Ch(e,f,g)
 	vshr.u64	d24,d18,#28
-	veor		d26,d25			@ Sigma1(e)
+	veor	d26,d25			@ Sigma1(e)
 	vadd.i64	d27,d29,d17
 	vshr.u64	d25,d18,#34
-	vsli.64		d24,d18,#36
+	vsli.64	d24,d18,#36
 	vadd.i64	d27,d26
 	vshr.u64	d26,d18,#39
 	vadd.i64	d28,d6
-	vsli.64		d25,d18,#30
-	veor		d30,d18,d19
-	vsli.64		d26,d18,#25
-	veor		d17,d24,d25
+	vsli.64	d25,d18,#30
+	veor	d30,d18,d19
+	vsli.64	d26,d18,#25
+	veor	d17,d24,d25
 	vadd.i64	d27,d28
-	vbsl		d30,d20,d19		@ Maj(a,b,c)
-	veor		d17,d26			@ Sigma0(a)
+	vbsl	d30,d20,d19		@ Maj(a,b,c)
+	veor	d17,d26			@ Sigma0(a)
 	vadd.i64	d21,d27
 	vadd.i64	d30,d27
 	@ vadd.i64	d17,d30
 	vshr.u64	d24,d21,#14	@ 7
 #if 7<16
-	vld1.64		{d7},[r1]!	@ handles unaligned
+	vld1.64	{d7},[r1]!	@ handles unaligned
 #endif
 	vshr.u64	d25,d21,#18
 #if 7>0
-	 vadd.i64	d17,d30			@ h+=Maj from the past
+	vadd.i64	d17,d30			@ h+=Maj from the past
 #endif
 	vshr.u64	d26,d21,#41
-	vld1.64		{d28},[r3,:64]!	@ K[i++]
-	vsli.64		d24,d21,#50
-	vsli.64		d25,d21,#46
-	vmov		d29,d21
-	vsli.64		d26,d21,#23
+	vld1.64	{d28},[r3,:64]!	@ K[i++]
+	vsli.64	d24,d21,#50
+	vsli.64	d25,d21,#46
+	vmov	d29,d21
+	vsli.64	d26,d21,#23
 #if 7<16 && defined(__ARMEL__)
 	vrev64.8	d7,d7
 #endif
-	veor		d25,d24
-	vbsl		d29,d22,d23		@ Ch(e,f,g)
+	veor	d25,d24
+	vbsl	d29,d22,d23		@ Ch(e,f,g)
 	vshr.u64	d24,d17,#28
-	veor		d26,d25			@ Sigma1(e)
+	veor	d26,d25			@ Sigma1(e)
 	vadd.i64	d27,d29,d16
 	vshr.u64	d25,d17,#34
-	vsli.64		d24,d17,#36
+	vsli.64	d24,d17,#36
 	vadd.i64	d27,d26
 	vshr.u64	d26,d17,#39
 	vadd.i64	d28,d7
-	vsli.64		d25,d17,#30
-	veor		d30,d17,d18
-	vsli.64		d26,d17,#25
-	veor		d16,d24,d25
+	vsli.64	d25,d17,#30
+	veor	d30,d17,d18
+	vsli.64	d26,d17,#25
+	veor	d16,d24,d25
 	vadd.i64	d27,d28
-	vbsl		d30,d19,d18		@ Maj(a,b,c)
-	veor		d16,d26			@ Sigma0(a)
+	vbsl	d30,d19,d18		@ Maj(a,b,c)
+	veor	d16,d26			@ Sigma0(a)
 	vadd.i64	d20,d27
 	vadd.i64	d30,d27
 	@ vadd.i64	d16,d30
 	vshr.u64	d24,d20,#14	@ 8
 #if 8<16
-	vld1.64		{d8},[r1]!	@ handles unaligned
+	vld1.64	{d8},[r1]!	@ handles unaligned
 #endif
 	vshr.u64	d25,d20,#18
 #if 8>0
-	 vadd.i64	d16,d30			@ h+=Maj from the past
+	vadd.i64	d16,d30			@ h+=Maj from the past
 #endif
 	vshr.u64	d26,d20,#41
-	vld1.64		{d28},[r3,:64]!	@ K[i++]
-	vsli.64		d24,d20,#50
-	vsli.64		d25,d20,#46
-	vmov		d29,d20
-	vsli.64		d26,d20,#23
+	vld1.64	{d28},[r3,:64]!	@ K[i++]
+	vsli.64	d24,d20,#50
+	vsli.64	d25,d20,#46
+	vmov	d29,d20
+	vsli.64	d26,d20,#23
 #if 8<16 && defined(__ARMEL__)
 	vrev64.8	d8,d8
 #endif
-	veor		d25,d24
-	vbsl		d29,d21,d22		@ Ch(e,f,g)
+	veor	d25,d24
+	vbsl	d29,d21,d22		@ Ch(e,f,g)
 	vshr.u64	d24,d16,#28
-	veor		d26,d25			@ Sigma1(e)
+	veor	d26,d25			@ Sigma1(e)
 	vadd.i64	d27,d29,d23
 	vshr.u64	d25,d16,#34
-	vsli.64		d24,d16,#36
+	vsli.64	d24,d16,#36
 	vadd.i64	d27,d26
 	vshr.u64	d26,d16,#39
 	vadd.i64	d28,d8
-	vsli.64		d25,d16,#30
-	veor		d30,d16,d17
-	vsli.64		d26,d16,#25
-	veor		d23,d24,d25
+	vsli.64	d25,d16,#30
+	veor	d30,d16,d17
+	vsli.64	d26,d16,#25
+	veor	d23,d24,d25
 	vadd.i64	d27,d28
-	vbsl		d30,d18,d17		@ Maj(a,b,c)
-	veor		d23,d26			@ Sigma0(a)
+	vbsl	d30,d18,d17		@ Maj(a,b,c)
+	veor	d23,d26			@ Sigma0(a)
 	vadd.i64	d19,d27
 	vadd.i64	d30,d27
 	@ vadd.i64	d23,d30
 	vshr.u64	d24,d19,#14	@ 9
 #if 9<16
-	vld1.64		{d9},[r1]!	@ handles unaligned
+	vld1.64	{d9},[r1]!	@ handles unaligned
 #endif
 	vshr.u64	d25,d19,#18
 #if 9>0
-	 vadd.i64	d23,d30			@ h+=Maj from the past
+	vadd.i64	d23,d30			@ h+=Maj from the past
 #endif
 	vshr.u64	d26,d19,#41
-	vld1.64		{d28},[r3,:64]!	@ K[i++]
-	vsli.64		d24,d19,#50
-	vsli.64		d25,d19,#46
-	vmov		d29,d19
-	vsli.64		d26,d19,#23
+	vld1.64	{d28},[r3,:64]!	@ K[i++]
+	vsli.64	d24,d19,#50
+	vsli.64	d25,d19,#46
+	vmov	d29,d19
+	vsli.64	d26,d19,#23
 #if 9<16 && defined(__ARMEL__)
 	vrev64.8	d9,d9
 #endif
-	veor		d25,d24
-	vbsl		d29,d20,d21		@ Ch(e,f,g)
+	veor	d25,d24
+	vbsl	d29,d20,d21		@ Ch(e,f,g)
 	vshr.u64	d24,d23,#28
-	veor		d26,d25			@ Sigma1(e)
+	veor	d26,d25			@ Sigma1(e)
 	vadd.i64	d27,d29,d22
 	vshr.u64	d25,d23,#34
-	vsli.64		d24,d23,#36
+	vsli.64	d24,d23,#36
 	vadd.i64	d27,d26
 	vshr.u64	d26,d23,#39
 	vadd.i64	d28,d9
-	vsli.64		d25,d23,#30
-	veor		d30,d23,d16
-	vsli.64		d26,d23,#25
-	veor		d22,d24,d25
+	vsli.64	d25,d23,#30
+	veor	d30,d23,d16
+	vsli.64	d26,d23,#25
+	veor	d22,d24,d25
 	vadd.i64	d27,d28
-	vbsl		d30,d17,d16		@ Maj(a,b,c)
-	veor		d22,d26			@ Sigma0(a)
+	vbsl	d30,d17,d16		@ Maj(a,b,c)
+	veor	d22,d26			@ Sigma0(a)
 	vadd.i64	d18,d27
 	vadd.i64	d30,d27
 	@ vadd.i64	d22,d30
 	vshr.u64	d24,d18,#14	@ 10
 #if 10<16
-	vld1.64		{d10},[r1]!	@ handles unaligned
+	vld1.64	{d10},[r1]!	@ handles unaligned
 #endif
 	vshr.u64	d25,d18,#18
 #if 10>0
-	 vadd.i64	d22,d30			@ h+=Maj from the past
+	vadd.i64	d22,d30			@ h+=Maj from the past
 #endif
 	vshr.u64	d26,d18,#41
-	vld1.64		{d28},[r3,:64]!	@ K[i++]
-	vsli.64		d24,d18,#50
-	vsli.64		d25,d18,#46
-	vmov		d29,d18
-	vsli.64		d26,d18,#23
+	vld1.64	{d28},[r3,:64]!	@ K[i++]
+	vsli.64	d24,d18,#50
+	vsli.64	d25,d18,#46
+	vmov	d29,d18
+	vsli.64	d26,d18,#23
 #if 10<16 && defined(__ARMEL__)
 	vrev64.8	d10,d10
 #endif
-	veor		d25,d24
-	vbsl		d29,d19,d20		@ Ch(e,f,g)
+	veor	d25,d24
+	vbsl	d29,d19,d20		@ Ch(e,f,g)
 	vshr.u64	d24,d22,#28
-	veor		d26,d25			@ Sigma1(e)
+	veor	d26,d25			@ Sigma1(e)
 	vadd.i64	d27,d29,d21
 	vshr.u64	d25,d22,#34
-	vsli.64		d24,d22,#36
+	vsli.64	d24,d22,#36
 	vadd.i64	d27,d26
 	vshr.u64	d26,d22,#39
 	vadd.i64	d28,d10
-	vsli.64		d25,d22,#30
-	veor		d30,d22,d23
-	vsli.64		d26,d22,#25
-	veor		d21,d24,d25
+	vsli.64	d25,d22,#30
+	veor	d30,d22,d23
+	vsli.64	d26,d22,#25
+	veor	d21,d24,d25
 	vadd.i64	d27,d28
-	vbsl		d30,d16,d23		@ Maj(a,b,c)
-	veor		d21,d26			@ Sigma0(a)
+	vbsl	d30,d16,d23		@ Maj(a,b,c)
+	veor	d21,d26			@ Sigma0(a)
 	vadd.i64	d17,d27
 	vadd.i64	d30,d27
 	@ vadd.i64	d21,d30
 	vshr.u64	d24,d17,#14	@ 11
 #if 11<16
-	vld1.64		{d11},[r1]!	@ handles unaligned
+	vld1.64	{d11},[r1]!	@ handles unaligned
 #endif
 	vshr.u64	d25,d17,#18
 #if 11>0
-	 vadd.i64	d21,d30			@ h+=Maj from the past
+	vadd.i64	d21,d30			@ h+=Maj from the past
 #endif
 	vshr.u64	d26,d17,#41
-	vld1.64		{d28},[r3,:64]!	@ K[i++]
-	vsli.64		d24,d17,#50
-	vsli.64		d25,d17,#46
-	vmov		d29,d17
-	vsli.64		d26,d17,#23
+	vld1.64	{d28},[r3,:64]!	@ K[i++]
+	vsli.64	d24,d17,#50
+	vsli.64	d25,d17,#46
+	vmov	d29,d17
+	vsli.64	d26,d17,#23
 #if 11<16 && defined(__ARMEL__)
 	vrev64.8	d11,d11
 #endif
-	veor		d25,d24
-	vbsl		d29,d18,d19		@ Ch(e,f,g)
+	veor	d25,d24
+	vbsl	d29,d18,d19		@ Ch(e,f,g)
 	vshr.u64	d24,d21,#28
-	veor		d26,d25			@ Sigma1(e)
+	veor	d26,d25			@ Sigma1(e)
 	vadd.i64	d27,d29,d20
 	vshr.u64	d25,d21,#34
-	vsli.64		d24,d21,#36
+	vsli.64	d24,d21,#36
 	vadd.i64	d27,d26
 	vshr.u64	d26,d21,#39
 	vadd.i64	d28,d11
-	vsli.64		d25,d21,#30
-	veor		d30,d21,d22
-	vsli.64		d26,d21,#25
-	veor		d20,d24,d25
+	vsli.64	d25,d21,#30
+	veor	d30,d21,d22
+	vsli.64	d26,d21,#25
+	veor	d20,d24,d25
 	vadd.i64	d27,d28
-	vbsl		d30,d23,d22		@ Maj(a,b,c)
-	veor		d20,d26			@ Sigma0(a)
+	vbsl	d30,d23,d22		@ Maj(a,b,c)
+	veor	d20,d26			@ Sigma0(a)
 	vadd.i64	d16,d27
 	vadd.i64	d30,d27
 	@ vadd.i64	d20,d30
 	vshr.u64	d24,d16,#14	@ 12
 #if 12<16
-	vld1.64		{d12},[r1]!	@ handles unaligned
+	vld1.64	{d12},[r1]!	@ handles unaligned
 #endif
 	vshr.u64	d25,d16,#18
 #if 12>0
-	 vadd.i64	d20,d30			@ h+=Maj from the past
+	vadd.i64	d20,d30			@ h+=Maj from the past
 #endif
 	vshr.u64	d26,d16,#41
-	vld1.64		{d28},[r3,:64]!	@ K[i++]
-	vsli.64		d24,d16,#50
-	vsli.64		d25,d16,#46
-	vmov		d29,d16
-	vsli.64		d26,d16,#23
+	vld1.64	{d28},[r3,:64]!	@ K[i++]
+	vsli.64	d24,d16,#50
+	vsli.64	d25,d16,#46
+	vmov	d29,d16
+	vsli.64	d26,d16,#23
 #if 12<16 && defined(__ARMEL__)
 	vrev64.8	d12,d12
 #endif
-	veor		d25,d24
-	vbsl		d29,d17,d18		@ Ch(e,f,g)
+	veor	d25,d24
+	vbsl	d29,d17,d18		@ Ch(e,f,g)
 	vshr.u64	d24,d20,#28
-	veor		d26,d25			@ Sigma1(e)
+	veor	d26,d25			@ Sigma1(e)
 	vadd.i64	d27,d29,d19
 	vshr.u64	d25,d20,#34
-	vsli.64		d24,d20,#36
+	vsli.64	d24,d20,#36
 	vadd.i64	d27,d26
 	vshr.u64	d26,d20,#39
 	vadd.i64	d28,d12
-	vsli.64		d25,d20,#30
-	veor		d30,d20,d21
-	vsli.64		d26,d20,#25
-	veor		d19,d24,d25
+	vsli.64	d25,d20,#30
+	veor	d30,d20,d21
+	vsli.64	d26,d20,#25
+	veor	d19,d24,d25
 	vadd.i64	d27,d28
-	vbsl		d30,d22,d21		@ Maj(a,b,c)
-	veor		d19,d26			@ Sigma0(a)
+	vbsl	d30,d22,d21		@ Maj(a,b,c)
+	veor	d19,d26			@ Sigma0(a)
 	vadd.i64	d23,d27
 	vadd.i64	d30,d27
 	@ vadd.i64	d19,d30
 	vshr.u64	d24,d23,#14	@ 13
 #if 13<16
-	vld1.64		{d13},[r1]!	@ handles unaligned
+	vld1.64	{d13},[r1]!	@ handles unaligned
 #endif
 	vshr.u64	d25,d23,#18
 #if 13>0
-	 vadd.i64	d19,d30			@ h+=Maj from the past
+	vadd.i64	d19,d30			@ h+=Maj from the past
 #endif
 	vshr.u64	d26,d23,#41
-	vld1.64		{d28},[r3,:64]!	@ K[i++]
-	vsli.64		d24,d23,#50
-	vsli.64		d25,d23,#46
-	vmov		d29,d23
-	vsli.64		d26,d23,#23
+	vld1.64	{d28},[r3,:64]!	@ K[i++]
+	vsli.64	d24,d23,#50
+	vsli.64	d25,d23,#46
+	vmov	d29,d23
+	vsli.64	d26,d23,#23
 #if 13<16 && defined(__ARMEL__)
 	vrev64.8	d13,d13
 #endif
-	veor		d25,d24
-	vbsl		d29,d16,d17		@ Ch(e,f,g)
+	veor	d25,d24
+	vbsl	d29,d16,d17		@ Ch(e,f,g)
 	vshr.u64	d24,d19,#28
-	veor		d26,d25			@ Sigma1(e)
+	veor	d26,d25			@ Sigma1(e)
 	vadd.i64	d27,d29,d18
 	vshr.u64	d25,d19,#34
-	vsli.64		d24,d19,#36
+	vsli.64	d24,d19,#36
 	vadd.i64	d27,d26
 	vshr.u64	d26,d19,#39
 	vadd.i64	d28,d13
-	vsli.64		d25,d19,#30
-	veor		d30,d19,d20
-	vsli.64		d26,d19,#25
-	veor		d18,d24,d25
+	vsli.64	d25,d19,#30
+	veor	d30,d19,d20
+	vsli.64	d26,d19,#25
+	veor	d18,d24,d25
 	vadd.i64	d27,d28
-	vbsl		d30,d21,d20		@ Maj(a,b,c)
-	veor		d18,d26			@ Sigma0(a)
+	vbsl	d30,d21,d20		@ Maj(a,b,c)
+	veor	d18,d26			@ Sigma0(a)
 	vadd.i64	d22,d27
 	vadd.i64	d30,d27
 	@ vadd.i64	d18,d30
 	vshr.u64	d24,d22,#14	@ 14
 #if 14<16
-	vld1.64		{d14},[r1]!	@ handles unaligned
+	vld1.64	{d14},[r1]!	@ handles unaligned
 #endif
 	vshr.u64	d25,d22,#18
 #if 14>0
-	 vadd.i64	d18,d30			@ h+=Maj from the past
+	vadd.i64	d18,d30			@ h+=Maj from the past
 #endif
 	vshr.u64	d26,d22,#41
-	vld1.64		{d28},[r3,:64]!	@ K[i++]
-	vsli.64		d24,d22,#50
-	vsli.64		d25,d22,#46
-	vmov		d29,d22
-	vsli.64		d26,d22,#23
+	vld1.64	{d28},[r3,:64]!	@ K[i++]
+	vsli.64	d24,d22,#50
+	vsli.64	d25,d22,#46
+	vmov	d29,d22
+	vsli.64	d26,d22,#23
 #if 14<16 && defined(__ARMEL__)
 	vrev64.8	d14,d14
 #endif
-	veor		d25,d24
-	vbsl		d29,d23,d16		@ Ch(e,f,g)
+	veor	d25,d24
+	vbsl	d29,d23,d16		@ Ch(e,f,g)
 	vshr.u64	d24,d18,#28
-	veor		d26,d25			@ Sigma1(e)
+	veor	d26,d25			@ Sigma1(e)
 	vadd.i64	d27,d29,d17
 	vshr.u64	d25,d18,#34
-	vsli.64		d24,d18,#36
+	vsli.64	d24,d18,#36
 	vadd.i64	d27,d26
 	vshr.u64	d26,d18,#39
 	vadd.i64	d28,d14
-	vsli.64		d25,d18,#30
-	veor		d30,d18,d19
-	vsli.64		d26,d18,#25
-	veor		d17,d24,d25
+	vsli.64	d25,d18,#30
+	veor	d30,d18,d19
+	vsli.64	d26,d18,#25
+	veor	d17,d24,d25
 	vadd.i64	d27,d28
-	vbsl		d30,d20,d19		@ Maj(a,b,c)
-	veor		d17,d26			@ Sigma0(a)
+	vbsl	d30,d20,d19		@ Maj(a,b,c)
+	veor	d17,d26			@ Sigma0(a)
 	vadd.i64	d21,d27
 	vadd.i64	d30,d27
 	@ vadd.i64	d17,d30
 	vshr.u64	d24,d21,#14	@ 15
 #if 15<16
-	vld1.64		{d15},[r1]!	@ handles unaligned
+	vld1.64	{d15},[r1]!	@ handles unaligned
 #endif
 	vshr.u64	d25,d21,#18
 #if 15>0
-	 vadd.i64	d17,d30			@ h+=Maj from the past
+	vadd.i64	d17,d30			@ h+=Maj from the past
 #endif
 	vshr.u64	d26,d21,#41
-	vld1.64		{d28},[r3,:64]!	@ K[i++]
-	vsli.64		d24,d21,#50
-	vsli.64		d25,d21,#46
-	vmov		d29,d21
-	vsli.64		d26,d21,#23
+	vld1.64	{d28},[r3,:64]!	@ K[i++]
+	vsli.64	d24,d21,#50
+	vsli.64	d25,d21,#46
+	vmov	d29,d21
+	vsli.64	d26,d21,#23
 #if 15<16 && defined(__ARMEL__)
 	vrev64.8	d15,d15
 #endif
-	veor		d25,d24
-	vbsl		d29,d22,d23		@ Ch(e,f,g)
+	veor	d25,d24
+	vbsl	d29,d22,d23		@ Ch(e,f,g)
 	vshr.u64	d24,d17,#28
-	veor		d26,d25			@ Sigma1(e)
+	veor	d26,d25			@ Sigma1(e)
 	vadd.i64	d27,d29,d16
 	vshr.u64	d25,d17,#34
-	vsli.64		d24,d17,#36
+	vsli.64	d24,d17,#36
 	vadd.i64	d27,d26
 	vshr.u64	d26,d17,#39
 	vadd.i64	d28,d15
-	vsli.64		d25,d17,#30
-	veor		d30,d17,d18
-	vsli.64		d26,d17,#25
-	veor		d16,d24,d25
+	vsli.64	d25,d17,#30
+	veor	d30,d17,d18
+	vsli.64	d26,d17,#25
+	veor	d16,d24,d25
 	vadd.i64	d27,d28
-	vbsl		d30,d19,d18		@ Maj(a,b,c)
-	veor		d16,d26			@ Sigma0(a)
+	vbsl	d30,d19,d18		@ Maj(a,b,c)
+	veor	d16,d26			@ Sigma0(a)
 	vadd.i64	d20,d27
 	vadd.i64	d30,d27
 	@ vadd.i64	d16,d30
-	mov		r12,#4
+	mov	r12,#4
 .L16_79_neon:
-	subs		r12,#1
+	subs	r12,#1
 	vshr.u64	q12,q7,#19
 	vshr.u64	q13,q7,#61
-	 vadd.i64	d16,d30			@ h+=Maj from the past
+	vadd.i64	d16,d30			@ h+=Maj from the past
 	vshr.u64	q15,q7,#6
-	vsli.64		q12,q7,#45
-	vext.8		q14,q0,q1,#8	@ X[i+1]
-	vsli.64		q13,q7,#3
-	veor		q15,q12
+	vsli.64	q12,q7,#45
+	vext.8	q14,q0,q1,#8	@ X[i+1]
+	vsli.64	q13,q7,#3
+	veor	q15,q12
 	vshr.u64	q12,q14,#1
-	veor		q15,q13				@ sigma1(X[i+14])
+	veor	q15,q13				@ sigma1(X[i+14])
 	vshr.u64	q13,q14,#8
 	vadd.i64	q0,q15
 	vshr.u64	q15,q14,#7
-	vsli.64		q12,q14,#63
-	vsli.64		q13,q14,#56
-	vext.8		q14,q4,q5,#8	@ X[i+9]
-	veor		q15,q12
+	vsli.64	q12,q14,#63
+	vsli.64	q13,q14,#56
+	vext.8	q14,q4,q5,#8	@ X[i+9]
+	veor	q15,q12
 	vshr.u64	d24,d20,#14		@ from NEON_00_15
 	vadd.i64	q0,q14
 	vshr.u64	d25,d20,#18		@ from NEON_00_15
-	veor		q15,q13				@ sigma0(X[i+1])
+	veor	q15,q13				@ sigma0(X[i+1])
 	vshr.u64	d26,d20,#41		@ from NEON_00_15
 	vadd.i64	q0,q15
-	vld1.64		{d28},[r3,:64]!	@ K[i++]
-	vsli.64		d24,d20,#50
-	vsli.64		d25,d20,#46
-	vmov		d29,d20
-	vsli.64		d26,d20,#23
+	vld1.64	{d28},[r3,:64]!	@ K[i++]
+	vsli.64	d24,d20,#50
+	vsli.64	d25,d20,#46
+	vmov	d29,d20
+	vsli.64	d26,d20,#23
 #if 16<16 && defined(__ARMEL__)
 	vrev64.8	,
 #endif
-	veor		d25,d24
-	vbsl		d29,d21,d22		@ Ch(e,f,g)
+	veor	d25,d24
+	vbsl	d29,d21,d22		@ Ch(e,f,g)
 	vshr.u64	d24,d16,#28
-	veor		d26,d25			@ Sigma1(e)
+	veor	d26,d25			@ Sigma1(e)
 	vadd.i64	d27,d29,d23
 	vshr.u64	d25,d16,#34
-	vsli.64		d24,d16,#36
+	vsli.64	d24,d16,#36
 	vadd.i64	d27,d26
 	vshr.u64	d26,d16,#39
 	vadd.i64	d28,d0
-	vsli.64		d25,d16,#30
-	veor		d30,d16,d17
-	vsli.64		d26,d16,#25
-	veor		d23,d24,d25
+	vsli.64	d25,d16,#30
+	veor	d30,d16,d17
+	vsli.64	d26,d16,#25
+	veor	d23,d24,d25
 	vadd.i64	d27,d28
-	vbsl		d30,d18,d17		@ Maj(a,b,c)
-	veor		d23,d26			@ Sigma0(a)
+	vbsl	d30,d18,d17		@ Maj(a,b,c)
+	veor	d23,d26			@ Sigma0(a)
 	vadd.i64	d19,d27
 	vadd.i64	d30,d27
 	@ vadd.i64	d23,d30
 	vshr.u64	d24,d19,#14	@ 17
 #if 17<16
-	vld1.64		{d1},[r1]!	@ handles unaligned
+	vld1.64	{d1},[r1]!	@ handles unaligned
 #endif
 	vshr.u64	d25,d19,#18
 #if 17>0
-	 vadd.i64	d23,d30			@ h+=Maj from the past
+	vadd.i64	d23,d30			@ h+=Maj from the past
 #endif
 	vshr.u64	d26,d19,#41
-	vld1.64		{d28},[r3,:64]!	@ K[i++]
-	vsli.64		d24,d19,#50
-	vsli.64		d25,d19,#46
-	vmov		d29,d19
-	vsli.64		d26,d19,#23
+	vld1.64	{d28},[r3,:64]!	@ K[i++]
+	vsli.64	d24,d19,#50
+	vsli.64	d25,d19,#46
+	vmov	d29,d19
+	vsli.64	d26,d19,#23
 #if 17<16 && defined(__ARMEL__)
 	vrev64.8	,
 #endif
-	veor		d25,d24
-	vbsl		d29,d20,d21		@ Ch(e,f,g)
+	veor	d25,d24
+	vbsl	d29,d20,d21		@ Ch(e,f,g)
 	vshr.u64	d24,d23,#28
-	veor		d26,d25			@ Sigma1(e)
+	veor	d26,d25			@ Sigma1(e)
 	vadd.i64	d27,d29,d22
 	vshr.u64	d25,d23,#34
-	vsli.64		d24,d23,#36
+	vsli.64	d24,d23,#36
 	vadd.i64	d27,d26
 	vshr.u64	d26,d23,#39
 	vadd.i64	d28,d1
-	vsli.64		d25,d23,#30
-	veor		d30,d23,d16
-	vsli.64		d26,d23,#25
-	veor		d22,d24,d25
+	vsli.64	d25,d23,#30
+	veor	d30,d23,d16
+	vsli.64	d26,d23,#25
+	veor	d22,d24,d25
 	vadd.i64	d27,d28
-	vbsl		d30,d17,d16		@ Maj(a,b,c)
-	veor		d22,d26			@ Sigma0(a)
+	vbsl	d30,d17,d16		@ Maj(a,b,c)
+	veor	d22,d26			@ Sigma0(a)
 	vadd.i64	d18,d27
 	vadd.i64	d30,d27
 	@ vadd.i64	d22,d30
 	vshr.u64	q12,q0,#19
 	vshr.u64	q13,q0,#61
-	 vadd.i64	d22,d30			@ h+=Maj from the past
+	vadd.i64	d22,d30			@ h+=Maj from the past
 	vshr.u64	q15,q0,#6
-	vsli.64		q12,q0,#45
-	vext.8		q14,q1,q2,#8	@ X[i+1]
-	vsli.64		q13,q0,#3
-	veor		q15,q12
+	vsli.64	q12,q0,#45
+	vext.8	q14,q1,q2,#8	@ X[i+1]
+	vsli.64	q13,q0,#3
+	veor	q15,q12
 	vshr.u64	q12,q14,#1
-	veor		q15,q13				@ sigma1(X[i+14])
+	veor	q15,q13				@ sigma1(X[i+14])
 	vshr.u64	q13,q14,#8
 	vadd.i64	q1,q15
 	vshr.u64	q15,q14,#7
-	vsli.64		q12,q14,#63
-	vsli.64		q13,q14,#56
-	vext.8		q14,q5,q6,#8	@ X[i+9]
-	veor		q15,q12
+	vsli.64	q12,q14,#63
+	vsli.64	q13,q14,#56
+	vext.8	q14,q5,q6,#8	@ X[i+9]
+	veor	q15,q12
 	vshr.u64	d24,d18,#14		@ from NEON_00_15
 	vadd.i64	q1,q14
 	vshr.u64	d25,d18,#18		@ from NEON_00_15
-	veor		q15,q13				@ sigma0(X[i+1])
+	veor	q15,q13				@ sigma0(X[i+1])
 	vshr.u64	d26,d18,#41		@ from NEON_00_15
 	vadd.i64	q1,q15
-	vld1.64		{d28},[r3,:64]!	@ K[i++]
-	vsli.64		d24,d18,#50
-	vsli.64		d25,d18,#46
-	vmov		d29,d18
-	vsli.64		d26,d18,#23
+	vld1.64	{d28},[r3,:64]!	@ K[i++]
+	vsli.64	d24,d18,#50
+	vsli.64	d25,d18,#46
+	vmov	d29,d18
+	vsli.64	d26,d18,#23
 #if 18<16 && defined(__ARMEL__)
 	vrev64.8	,
 #endif
-	veor		d25,d24
-	vbsl		d29,d19,d20		@ Ch(e,f,g)
+	veor	d25,d24
+	vbsl	d29,d19,d20		@ Ch(e,f,g)
 	vshr.u64	d24,d22,#28
-	veor		d26,d25			@ Sigma1(e)
+	veor	d26,d25			@ Sigma1(e)
 	vadd.i64	d27,d29,d21
 	vshr.u64	d25,d22,#34
-	vsli.64		d24,d22,#36
+	vsli.64	d24,d22,#36
 	vadd.i64	d27,d26
 	vshr.u64	d26,d22,#39
 	vadd.i64	d28,d2
-	vsli.64		d25,d22,#30
-	veor		d30,d22,d23
-	vsli.64		d26,d22,#25
-	veor		d21,d24,d25
+	vsli.64	d25,d22,#30
+	veor	d30,d22,d23
+	vsli.64	d26,d22,#25
+	veor	d21,d24,d25
 	vadd.i64	d27,d28
-	vbsl		d30,d16,d23		@ Maj(a,b,c)
-	veor		d21,d26			@ Sigma0(a)
+	vbsl	d30,d16,d23		@ Maj(a,b,c)
+	veor	d21,d26			@ Sigma0(a)
 	vadd.i64	d17,d27
 	vadd.i64	d30,d27
 	@ vadd.i64	d21,d30
 	vshr.u64	d24,d17,#14	@ 19
 #if 19<16
-	vld1.64		{d3},[r1]!	@ handles unaligned
+	vld1.64	{d3},[r1]!	@ handles unaligned
 #endif
 	vshr.u64	d25,d17,#18
 #if 19>0
-	 vadd.i64	d21,d30			@ h+=Maj from the past
+	vadd.i64	d21,d30			@ h+=Maj from the past
 #endif
 	vshr.u64	d26,d17,#41
-	vld1.64		{d28},[r3,:64]!	@ K[i++]
-	vsli.64		d24,d17,#50
-	vsli.64		d25,d17,#46
-	vmov		d29,d17
-	vsli.64		d26,d17,#23
+	vld1.64	{d28},[r3,:64]!	@ K[i++]
+	vsli.64	d24,d17,#50
+	vsli.64	d25,d17,#46
+	vmov	d29,d17
+	vsli.64	d26,d17,#23
 #if 19<16 && defined(__ARMEL__)
 	vrev64.8	,
 #endif
-	veor		d25,d24
-	vbsl		d29,d18,d19		@ Ch(e,f,g)
+	veor	d25,d24
+	vbsl	d29,d18,d19		@ Ch(e,f,g)
 	vshr.u64	d24,d21,#28
-	veor		d26,d25			@ Sigma1(e)
+	veor	d26,d25			@ Sigma1(e)
 	vadd.i64	d27,d29,d20
 	vshr.u64	d25,d21,#34
-	vsli.64		d24,d21,#36
+	vsli.64	d24,d21,#36
 	vadd.i64	d27,d26
 	vshr.u64	d26,d21,#39
 	vadd.i64	d28,d3
-	vsli.64		d25,d21,#30
-	veor		d30,d21,d22
-	vsli.64		d26,d21,#25
-	veor		d20,d24,d25
+	vsli.64	d25,d21,#30
+	veor	d30,d21,d22
+	vsli.64	d26,d21,#25
+	veor	d20,d24,d25
 	vadd.i64	d27,d28
-	vbsl		d30,d23,d22		@ Maj(a,b,c)
-	veor		d20,d26			@ Sigma0(a)
+	vbsl	d30,d23,d22		@ Maj(a,b,c)
+	veor	d20,d26			@ Sigma0(a)
 	vadd.i64	d16,d27
 	vadd.i64	d30,d27
 	@ vadd.i64	d20,d30
 	vshr.u64	q12,q1,#19
 	vshr.u64	q13,q1,#61
-	 vadd.i64	d20,d30			@ h+=Maj from the past
+	vadd.i64	d20,d30			@ h+=Maj from the past
 	vshr.u64	q15,q1,#6
-	vsli.64		q12,q1,#45
-	vext.8		q14,q2,q3,#8	@ X[i+1]
-	vsli.64		q13,q1,#3
-	veor		q15,q12
+	vsli.64	q12,q1,#45
+	vext.8	q14,q2,q3,#8	@ X[i+1]
+	vsli.64	q13,q1,#3
+	veor	q15,q12
 	vshr.u64	q12,q14,#1
-	veor		q15,q13				@ sigma1(X[i+14])
+	veor	q15,q13				@ sigma1(X[i+14])
 	vshr.u64	q13,q14,#8
 	vadd.i64	q2,q15
 	vshr.u64	q15,q14,#7
-	vsli.64		q12,q14,#63
-	vsli.64		q13,q14,#56
-	vext.8		q14,q6,q7,#8	@ X[i+9]
-	veor		q15,q12
+	vsli.64	q12,q14,#63
+	vsli.64	q13,q14,#56
+	vext.8	q14,q6,q7,#8	@ X[i+9]
+	veor	q15,q12
 	vshr.u64	d24,d16,#14		@ from NEON_00_15
 	vadd.i64	q2,q14
 	vshr.u64	d25,d16,#18		@ from NEON_00_15
-	veor		q15,q13				@ sigma0(X[i+1])
+	veor	q15,q13				@ sigma0(X[i+1])
 	vshr.u64	d26,d16,#41		@ from NEON_00_15
 	vadd.i64	q2,q15
-	vld1.64		{d28},[r3,:64]!	@ K[i++]
-	vsli.64		d24,d16,#50
-	vsli.64		d25,d16,#46
-	vmov		d29,d16
-	vsli.64		d26,d16,#23
+	vld1.64	{d28},[r3,:64]!	@ K[i++]
+	vsli.64	d24,d16,#50
+	vsli.64	d25,d16,#46
+	vmov	d29,d16
+	vsli.64	d26,d16,#23
 #if 20<16 && defined(__ARMEL__)
 	vrev64.8	,
 #endif
-	veor		d25,d24
-	vbsl		d29,d17,d18		@ Ch(e,f,g)
+	veor	d25,d24
+	vbsl	d29,d17,d18		@ Ch(e,f,g)
 	vshr.u64	d24,d20,#28
-	veor		d26,d25			@ Sigma1(e)
+	veor	d26,d25			@ Sigma1(e)
 	vadd.i64	d27,d29,d19
 	vshr.u64	d25,d20,#34
-	vsli.64		d24,d20,#36
+	vsli.64	d24,d20,#36
 	vadd.i64	d27,d26
 	vshr.u64	d26,d20,#39
 	vadd.i64	d28,d4
-	vsli.64		d25,d20,#30
-	veor		d30,d20,d21
-	vsli.64		d26,d20,#25
-	veor		d19,d24,d25
+	vsli.64	d25,d20,#30
+	veor	d30,d20,d21
+	vsli.64	d26,d20,#25
+	veor	d19,d24,d25
 	vadd.i64	d27,d28
-	vbsl		d30,d22,d21		@ Maj(a,b,c)
-	veor		d19,d26			@ Sigma0(a)
+	vbsl	d30,d22,d21		@ Maj(a,b,c)
+	veor	d19,d26			@ Sigma0(a)
 	vadd.i64	d23,d27
 	vadd.i64	d30,d27
 	@ vadd.i64	d19,d30
 	vshr.u64	d24,d23,#14	@ 21
 #if 21<16
-	vld1.64		{d5},[r1]!	@ handles unaligned
+	vld1.64	{d5},[r1]!	@ handles unaligned
 #endif
 	vshr.u64	d25,d23,#18
 #if 21>0
-	 vadd.i64	d19,d30			@ h+=Maj from the past
+	vadd.i64	d19,d30			@ h+=Maj from the past
 #endif
 	vshr.u64	d26,d23,#41
-	vld1.64		{d28},[r3,:64]!	@ K[i++]
-	vsli.64		d24,d23,#50
-	vsli.64		d25,d23,#46
-	vmov		d29,d23
-	vsli.64		d26,d23,#23
+	vld1.64	{d28},[r3,:64]!	@ K[i++]
+	vsli.64	d24,d23,#50
+	vsli.64	d25,d23,#46
+	vmov	d29,d23
+	vsli.64	d26,d23,#23
 #if 21<16 && defined(__ARMEL__)
 	vrev64.8	,
 #endif
-	veor		d25,d24
-	vbsl		d29,d16,d17		@ Ch(e,f,g)
+	veor	d25,d24
+	vbsl	d29,d16,d17		@ Ch(e,f,g)
 	vshr.u64	d24,d19,#28
-	veor		d26,d25			@ Sigma1(e)
+	veor	d26,d25			@ Sigma1(e)
 	vadd.i64	d27,d29,d18
 	vshr.u64	d25,d19,#34
-	vsli.64		d24,d19,#36
+	vsli.64	d24,d19,#36
 	vadd.i64	d27,d26
 	vshr.u64	d26,d19,#39
 	vadd.i64	d28,d5
-	vsli.64		d25,d19,#30
-	veor		d30,d19,d20
-	vsli.64		d26,d19,#25
-	veor		d18,d24,d25
+	vsli.64	d25,d19,#30
+	veor	d30,d19,d20
+	vsli.64	d26,d19,#25
+	veor	d18,d24,d25
 	vadd.i64	d27,d28
-	vbsl		d30,d21,d20		@ Maj(a,b,c)
-	veor		d18,d26			@ Sigma0(a)
+	vbsl	d30,d21,d20		@ Maj(a,b,c)
+	veor	d18,d26			@ Sigma0(a)
 	vadd.i64	d22,d27
 	vadd.i64	d30,d27
 	@ vadd.i64	d18,d30
 	vshr.u64	q12,q2,#19
 	vshr.u64	q13,q2,#61
-	 vadd.i64	d18,d30			@ h+=Maj from the past
+	vadd.i64	d18,d30			@ h+=Maj from the past
 	vshr.u64	q15,q2,#6
-	vsli.64		q12,q2,#45
-	vext.8		q14,q3,q4,#8	@ X[i+1]
-	vsli.64		q13,q2,#3
-	veor		q15,q12
+	vsli.64	q12,q2,#45
+	vext.8	q14,q3,q4,#8	@ X[i+1]
+	vsli.64	q13,q2,#3
+	veor	q15,q12
 	vshr.u64	q12,q14,#1
-	veor		q15,q13				@ sigma1(X[i+14])
+	veor	q15,q13				@ sigma1(X[i+14])
 	vshr.u64	q13,q14,#8
 	vadd.i64	q3,q15
 	vshr.u64	q15,q14,#7
-	vsli.64		q12,q14,#63
-	vsli.64		q13,q14,#56
-	vext.8		q14,q7,q0,#8	@ X[i+9]
-	veor		q15,q12
+	vsli.64	q12,q14,#63
+	vsli.64	q13,q14,#56
+	vext.8	q14,q7,q0,#8	@ X[i+9]
+	veor	q15,q12
 	vshr.u64	d24,d22,#14		@ from NEON_00_15
 	vadd.i64	q3,q14
 	vshr.u64	d25,d22,#18		@ from NEON_00_15
-	veor		q15,q13				@ sigma0(X[i+1])
+	veor	q15,q13				@ sigma0(X[i+1])
 	vshr.u64	d26,d22,#41		@ from NEON_00_15
 	vadd.i64	q3,q15
-	vld1.64		{d28},[r3,:64]!	@ K[i++]
-	vsli.64		d24,d22,#50
-	vsli.64		d25,d22,#46
-	vmov		d29,d22
-	vsli.64		d26,d22,#23
+	vld1.64	{d28},[r3,:64]!	@ K[i++]
+	vsli.64	d24,d22,#50
+	vsli.64	d25,d22,#46
+	vmov	d29,d22
+	vsli.64	d26,d22,#23
 #if 22<16 && defined(__ARMEL__)
 	vrev64.8	,
 #endif
-	veor		d25,d24
-	vbsl		d29,d23,d16		@ Ch(e,f,g)
+	veor	d25,d24
+	vbsl	d29,d23,d16		@ Ch(e,f,g)
 	vshr.u64	d24,d18,#28
-	veor		d26,d25			@ Sigma1(e)
+	veor	d26,d25			@ Sigma1(e)
 	vadd.i64	d27,d29,d17
 	vshr.u64	d25,d18,#34
-	vsli.64		d24,d18,#36
+	vsli.64	d24,d18,#36
 	vadd.i64	d27,d26
 	vshr.u64	d26,d18,#39
 	vadd.i64	d28,d6
-	vsli.64		d25,d18,#30
-	veor		d30,d18,d19
-	vsli.64		d26,d18,#25
-	veor		d17,d24,d25
+	vsli.64	d25,d18,#30
+	veor	d30,d18,d19
+	vsli.64	d26,d18,#25
+	veor	d17,d24,d25
 	vadd.i64	d27,d28
-	vbsl		d30,d20,d19		@ Maj(a,b,c)
-	veor		d17,d26			@ Sigma0(a)
+	vbsl	d30,d20,d19		@ Maj(a,b,c)
+	veor	d17,d26			@ Sigma0(a)
 	vadd.i64	d21,d27
 	vadd.i64	d30,d27
 	@ vadd.i64	d17,d30
 	vshr.u64	d24,d21,#14	@ 23
 #if 23<16
-	vld1.64		{d7},[r1]!	@ handles unaligned
+	vld1.64	{d7},[r1]!	@ handles unaligned
 #endif
 	vshr.u64	d25,d21,#18
 #if 23>0
-	 vadd.i64	d17,d30			@ h+=Maj from the past
+	vadd.i64	d17,d30			@ h+=Maj from the past
 #endif
 	vshr.u64	d26,d21,#41
-	vld1.64		{d28},[r3,:64]!	@ K[i++]
-	vsli.64		d24,d21,#50
-	vsli.64		d25,d21,#46
-	vmov		d29,d21
-	vsli.64		d26,d21,#23
+	vld1.64	{d28},[r3,:64]!	@ K[i++]
+	vsli.64	d24,d21,#50
+	vsli.64	d25,d21,#46
+	vmov	d29,d21
+	vsli.64	d26,d21,#23
 #if 23<16 && defined(__ARMEL__)
 	vrev64.8	,
 #endif
-	veor		d25,d24
-	vbsl		d29,d22,d23		@ Ch(e,f,g)
+	veor	d25,d24
+	vbsl	d29,d22,d23		@ Ch(e,f,g)
 	vshr.u64	d24,d17,#28
-	veor		d26,d25			@ Sigma1(e)
+	veor	d26,d25			@ Sigma1(e)
 	vadd.i64	d27,d29,d16
 	vshr.u64	d25,d17,#34
-	vsli.64		d24,d17,#36
+	vsli.64	d24,d17,#36
 	vadd.i64	d27,d26
 	vshr.u64	d26,d17,#39
 	vadd.i64	d28,d7
-	vsli.64		d25,d17,#30
-	veor		d30,d17,d18
-	vsli.64		d26,d17,#25
-	veor		d16,d24,d25
+	vsli.64	d25,d17,#30
+	veor	d30,d17,d18
+	vsli.64	d26,d17,#25
+	veor	d16,d24,d25
 	vadd.i64	d27,d28
-	vbsl		d30,d19,d18		@ Maj(a,b,c)
-	veor		d16,d26			@ Sigma0(a)
+	vbsl	d30,d19,d18		@ Maj(a,b,c)
+	veor	d16,d26			@ Sigma0(a)
 	vadd.i64	d20,d27
 	vadd.i64	d30,d27
 	@ vadd.i64	d16,d30
 	vshr.u64	q12,q3,#19
 	vshr.u64	q13,q3,#61
-	 vadd.i64	d16,d30			@ h+=Maj from the past
+	vadd.i64	d16,d30			@ h+=Maj from the past
 	vshr.u64	q15,q3,#6
-	vsli.64		q12,q3,#45
-	vext.8		q14,q4,q5,#8	@ X[i+1]
-	vsli.64		q13,q3,#3
-	veor		q15,q12
+	vsli.64	q12,q3,#45
+	vext.8	q14,q4,q5,#8	@ X[i+1]
+	vsli.64	q13,q3,#3
+	veor	q15,q12
 	vshr.u64	q12,q14,#1
-	veor		q15,q13				@ sigma1(X[i+14])
+	veor	q15,q13				@ sigma1(X[i+14])
 	vshr.u64	q13,q14,#8
 	vadd.i64	q4,q15
 	vshr.u64	q15,q14,#7
-	vsli.64		q12,q14,#63
-	vsli.64		q13,q14,#56
-	vext.8		q14,q0,q1,#8	@ X[i+9]
-	veor		q15,q12
+	vsli.64	q12,q14,#63
+	vsli.64	q13,q14,#56
+	vext.8	q14,q0,q1,#8	@ X[i+9]
+	veor	q15,q12
 	vshr.u64	d24,d20,#14		@ from NEON_00_15
 	vadd.i64	q4,q14
 	vshr.u64	d25,d20,#18		@ from NEON_00_15
-	veor		q15,q13				@ sigma0(X[i+1])
+	veor	q15,q13				@ sigma0(X[i+1])
 	vshr.u64	d26,d20,#41		@ from NEON_00_15
 	vadd.i64	q4,q15
-	vld1.64		{d28},[r3,:64]!	@ K[i++]
-	vsli.64		d24,d20,#50
-	vsli.64		d25,d20,#46
-	vmov		d29,d20
-	vsli.64		d26,d20,#23
+	vld1.64	{d28},[r3,:64]!	@ K[i++]
+	vsli.64	d24,d20,#50
+	vsli.64	d25,d20,#46
+	vmov	d29,d20
+	vsli.64	d26,d20,#23
 #if 24<16 && defined(__ARMEL__)
 	vrev64.8	,
 #endif
-	veor		d25,d24
-	vbsl		d29,d21,d22		@ Ch(e,f,g)
+	veor	d25,d24
+	vbsl	d29,d21,d22		@ Ch(e,f,g)
 	vshr.u64	d24,d16,#28
-	veor		d26,d25			@ Sigma1(e)
+	veor	d26,d25			@ Sigma1(e)
 	vadd.i64	d27,d29,d23
 	vshr.u64	d25,d16,#34
-	vsli.64		d24,d16,#36
+	vsli.64	d24,d16,#36
 	vadd.i64	d27,d26
 	vshr.u64	d26,d16,#39
 	vadd.i64	d28,d8
-	vsli.64		d25,d16,#30
-	veor		d30,d16,d17
-	vsli.64		d26,d16,#25
-	veor		d23,d24,d25
+	vsli.64	d25,d16,#30
+	veor	d30,d16,d17
+	vsli.64	d26,d16,#25
+	veor	d23,d24,d25
 	vadd.i64	d27,d28
-	vbsl		d30,d18,d17		@ Maj(a,b,c)
-	veor		d23,d26			@ Sigma0(a)
+	vbsl	d30,d18,d17		@ Maj(a,b,c)
+	veor	d23,d26			@ Sigma0(a)
 	vadd.i64	d19,d27
 	vadd.i64	d30,d27
 	@ vadd.i64	d23,d30
 	vshr.u64	d24,d19,#14	@ 25
 #if 25<16
-	vld1.64		{d9},[r1]!	@ handles unaligned
+	vld1.64	{d9},[r1]!	@ handles unaligned
 #endif
 	vshr.u64	d25,d19,#18
 #if 25>0
-	 vadd.i64	d23,d30			@ h+=Maj from the past
+	vadd.i64	d23,d30			@ h+=Maj from the past
 #endif
 	vshr.u64	d26,d19,#41
-	vld1.64		{d28},[r3,:64]!	@ K[i++]
-	vsli.64		d24,d19,#50
-	vsli.64		d25,d19,#46
-	vmov		d29,d19
-	vsli.64		d26,d19,#23
+	vld1.64	{d28},[r3,:64]!	@ K[i++]
+	vsli.64	d24,d19,#50
+	vsli.64	d25,d19,#46
+	vmov	d29,d19
+	vsli.64	d26,d19,#23
 #if 25<16 && defined(__ARMEL__)
 	vrev64.8	,
 #endif
-	veor		d25,d24
-	vbsl		d29,d20,d21		@ Ch(e,f,g)
+	veor	d25,d24
+	vbsl	d29,d20,d21		@ Ch(e,f,g)
 	vshr.u64	d24,d23,#28
-	veor		d26,d25			@ Sigma1(e)
+	veor	d26,d25			@ Sigma1(e)
 	vadd.i64	d27,d29,d22
 	vshr.u64	d25,d23,#34
-	vsli.64		d24,d23,#36
+	vsli.64	d24,d23,#36
 	vadd.i64	d27,d26
 	vshr.u64	d26,d23,#39
 	vadd.i64	d28,d9
-	vsli.64		d25,d23,#30
-	veor		d30,d23,d16
-	vsli.64		d26,d23,#25
-	veor		d22,d24,d25
+	vsli.64	d25,d23,#30
+	veor	d30,d23,d16
+	vsli.64	d26,d23,#25
+	veor	d22,d24,d25
 	vadd.i64	d27,d28
-	vbsl		d30,d17,d16		@ Maj(a,b,c)
-	veor		d22,d26			@ Sigma0(a)
+	vbsl	d30,d17,d16		@ Maj(a,b,c)
+	veor	d22,d26			@ Sigma0(a)
 	vadd.i64	d18,d27
 	vadd.i64	d30,d27
 	@ vadd.i64	d22,d30
 	vshr.u64	q12,q4,#19
 	vshr.u64	q13,q4,#61
-	 vadd.i64	d22,d30			@ h+=Maj from the past
+	vadd.i64	d22,d30			@ h+=Maj from the past
 	vshr.u64	q15,q4,#6
-	vsli.64		q12,q4,#45
-	vext.8		q14,q5,q6,#8	@ X[i+1]
-	vsli.64		q13,q4,#3
-	veor		q15,q12
+	vsli.64	q12,q4,#45
+	vext.8	q14,q5,q6,#8	@ X[i+1]
+	vsli.64	q13,q4,#3
+	veor	q15,q12
 	vshr.u64	q12,q14,#1
-	veor		q15,q13				@ sigma1(X[i+14])
+	veor	q15,q13				@ sigma1(X[i+14])
 	vshr.u64	q13,q14,#8
 	vadd.i64	q5,q15
 	vshr.u64	q15,q14,#7
-	vsli.64		q12,q14,#63
-	vsli.64		q13,q14,#56
-	vext.8		q14,q1,q2,#8	@ X[i+9]
-	veor		q15,q12
+	vsli.64	q12,q14,#63
+	vsli.64	q13,q14,#56
+	vext.8	q14,q1,q2,#8	@ X[i+9]
+	veor	q15,q12
 	vshr.u64	d24,d18,#14		@ from NEON_00_15
 	vadd.i64	q5,q14
 	vshr.u64	d25,d18,#18		@ from NEON_00_15
-	veor		q15,q13				@ sigma0(X[i+1])
+	veor	q15,q13				@ sigma0(X[i+1])
 	vshr.u64	d26,d18,#41		@ from NEON_00_15
 	vadd.i64	q5,q15
-	vld1.64		{d28},[r3,:64]!	@ K[i++]
-	vsli.64		d24,d18,#50
-	vsli.64		d25,d18,#46
-	vmov		d29,d18
-	vsli.64		d26,d18,#23
+	vld1.64	{d28},[r3,:64]!	@ K[i++]
+	vsli.64	d24,d18,#50
+	vsli.64	d25,d18,#46
+	vmov	d29,d18
+	vsli.64	d26,d18,#23
 #if 26<16 && defined(__ARMEL__)
 	vrev64.8	,
 #endif
-	veor		d25,d24
-	vbsl		d29,d19,d20		@ Ch(e,f,g)
+	veor	d25,d24
+	vbsl	d29,d19,d20		@ Ch(e,f,g)
 	vshr.u64	d24,d22,#28
-	veor		d26,d25			@ Sigma1(e)
+	veor	d26,d25			@ Sigma1(e)
 	vadd.i64	d27,d29,d21
 	vshr.u64	d25,d22,#34
-	vsli.64		d24,d22,#36
+	vsli.64	d24,d22,#36
 	vadd.i64	d27,d26
 	vshr.u64	d26,d22,#39
 	vadd.i64	d28,d10
-	vsli.64		d25,d22,#30
-	veor		d30,d22,d23
-	vsli.64		d26,d22,#25
-	veor		d21,d24,d25
+	vsli.64	d25,d22,#30
+	veor	d30,d22,d23
+	vsli.64	d26,d22,#25
+	veor	d21,d24,d25
 	vadd.i64	d27,d28
-	vbsl		d30,d16,d23		@ Maj(a,b,c)
-	veor		d21,d26			@ Sigma0(a)
+	vbsl	d30,d16,d23		@ Maj(a,b,c)
+	veor	d21,d26			@ Sigma0(a)
 	vadd.i64	d17,d27
 	vadd.i64	d30,d27
 	@ vadd.i64	d21,d30
 	vshr.u64	d24,d17,#14	@ 27
 #if 27<16
-	vld1.64		{d11},[r1]!	@ handles unaligned
+	vld1.64	{d11},[r1]!	@ handles unaligned
 #endif
 	vshr.u64	d25,d17,#18
 #if 27>0
-	 vadd.i64	d21,d30			@ h+=Maj from the past
+	vadd.i64	d21,d30			@ h+=Maj from the past
 #endif
 	vshr.u64	d26,d17,#41
-	vld1.64		{d28},[r3,:64]!	@ K[i++]
-	vsli.64		d24,d17,#50
-	vsli.64		d25,d17,#46
-	vmov		d29,d17
-	vsli.64		d26,d17,#23
+	vld1.64	{d28},[r3,:64]!	@ K[i++]
+	vsli.64	d24,d17,#50
+	vsli.64	d25,d17,#46
+	vmov	d29,d17
+	vsli.64	d26,d17,#23
 #if 27<16 && defined(__ARMEL__)
 	vrev64.8	,
 #endif
-	veor		d25,d24
-	vbsl		d29,d18,d19		@ Ch(e,f,g)
+	veor	d25,d24
+	vbsl	d29,d18,d19		@ Ch(e,f,g)
 	vshr.u64	d24,d21,#28
-	veor		d26,d25			@ Sigma1(e)
+	veor	d26,d25			@ Sigma1(e)
 	vadd.i64	d27,d29,d20
 	vshr.u64	d25,d21,#34
-	vsli.64		d24,d21,#36
+	vsli.64	d24,d21,#36
 	vadd.i64	d27,d26
 	vshr.u64	d26,d21,#39
 	vadd.i64	d28,d11
-	vsli.64		d25,d21,#30
-	veor		d30,d21,d22
-	vsli.64		d26,d21,#25
-	veor		d20,d24,d25
+	vsli.64	d25,d21,#30
+	veor	d30,d21,d22
+	vsli.64	d26,d21,#25
+	veor	d20,d24,d25
 	vadd.i64	d27,d28
-	vbsl		d30,d23,d22		@ Maj(a,b,c)
-	veor		d20,d26			@ Sigma0(a)
+	vbsl	d30,d23,d22		@ Maj(a,b,c)
+	veor	d20,d26			@ Sigma0(a)
 	vadd.i64	d16,d27
 	vadd.i64	d30,d27
 	@ vadd.i64	d20,d30
 	vshr.u64	q12,q5,#19
 	vshr.u64	q13,q5,#61
-	 vadd.i64	d20,d30			@ h+=Maj from the past
+	vadd.i64	d20,d30			@ h+=Maj from the past
 	vshr.u64	q15,q5,#6
-	vsli.64		q12,q5,#45
-	vext.8		q14,q6,q7,#8	@ X[i+1]
-	vsli.64		q13,q5,#3
-	veor		q15,q12
+	vsli.64	q12,q5,#45
+	vext.8	q14,q6,q7,#8	@ X[i+1]
+	vsli.64	q13,q5,#3
+	veor	q15,q12
 	vshr.u64	q12,q14,#1
-	veor		q15,q13				@ sigma1(X[i+14])
+	veor	q15,q13				@ sigma1(X[i+14])
 	vshr.u64	q13,q14,#8
 	vadd.i64	q6,q15
 	vshr.u64	q15,q14,#7
-	vsli.64		q12,q14,#63
-	vsli.64		q13,q14,#56
-	vext.8		q14,q2,q3,#8	@ X[i+9]
-	veor		q15,q12
+	vsli.64	q12,q14,#63
+	vsli.64	q13,q14,#56
+	vext.8	q14,q2,q3,#8	@ X[i+9]
+	veor	q15,q12
 	vshr.u64	d24,d16,#14		@ from NEON_00_15
 	vadd.i64	q6,q14
 	vshr.u64	d25,d16,#18		@ from NEON_00_15
-	veor		q15,q13				@ sigma0(X[i+1])
+	veor	q15,q13				@ sigma0(X[i+1])
 	vshr.u64	d26,d16,#41		@ from NEON_00_15
 	vadd.i64	q6,q15
-	vld1.64		{d28},[r3,:64]!	@ K[i++]
-	vsli.64		d24,d16,#50
-	vsli.64		d25,d16,#46
-	vmov		d29,d16
-	vsli.64		d26,d16,#23
+	vld1.64	{d28},[r3,:64]!	@ K[i++]
+	vsli.64	d24,d16,#50
+	vsli.64	d25,d16,#46
+	vmov	d29,d16
+	vsli.64	d26,d16,#23
 #if 28<16 && defined(__ARMEL__)
 	vrev64.8	,
 #endif
-	veor		d25,d24
-	vbsl		d29,d17,d18		@ Ch(e,f,g)
+	veor	d25,d24
+	vbsl	d29,d17,d18		@ Ch(e,f,g)
 	vshr.u64	d24,d20,#28
-	veor		d26,d25			@ Sigma1(e)
+	veor	d26,d25			@ Sigma1(e)
 	vadd.i64	d27,d29,d19
 	vshr.u64	d25,d20,#34
-	vsli.64		d24,d20,#36
+	vsli.64	d24,d20,#36
 	vadd.i64	d27,d26
 	vshr.u64	d26,d20,#39
 	vadd.i64	d28,d12
-	vsli.64		d25,d20,#30
-	veor		d30,d20,d21
-	vsli.64		d26,d20,#25
-	veor		d19,d24,d25
+	vsli.64	d25,d20,#30
+	veor	d30,d20,d21
+	vsli.64	d26,d20,#25
+	veor	d19,d24,d25
 	vadd.i64	d27,d28
-	vbsl		d30,d22,d21		@ Maj(a,b,c)
-	veor		d19,d26			@ Sigma0(a)
+	vbsl	d30,d22,d21		@ Maj(a,b,c)
+	veor	d19,d26			@ Sigma0(a)
 	vadd.i64	d23,d27
 	vadd.i64	d30,d27
 	@ vadd.i64	d19,d30
 	vshr.u64	d24,d23,#14	@ 29
 #if 29<16
-	vld1.64		{d13},[r1]!	@ handles unaligned
+	vld1.64	{d13},[r1]!	@ handles unaligned
 #endif
 	vshr.u64	d25,d23,#18
 #if 29>0
-	 vadd.i64	d19,d30			@ h+=Maj from the past
+	vadd.i64	d19,d30			@ h+=Maj from the past
 #endif
 	vshr.u64	d26,d23,#41
-	vld1.64		{d28},[r3,:64]!	@ K[i++]
-	vsli.64		d24,d23,#50
-	vsli.64		d25,d23,#46
-	vmov		d29,d23
-	vsli.64		d26,d23,#23
+	vld1.64	{d28},[r3,:64]!	@ K[i++]
+	vsli.64	d24,d23,#50
+	vsli.64	d25,d23,#46
+	vmov	d29,d23
+	vsli.64	d26,d23,#23
 #if 29<16 && defined(__ARMEL__)
 	vrev64.8	,
 #endif
-	veor		d25,d24
-	vbsl		d29,d16,d17		@ Ch(e,f,g)
+	veor	d25,d24
+	vbsl	d29,d16,d17		@ Ch(e,f,g)
 	vshr.u64	d24,d19,#28
-	veor		d26,d25			@ Sigma1(e)
+	veor	d26,d25			@ Sigma1(e)
 	vadd.i64	d27,d29,d18
 	vshr.u64	d25,d19,#34
-	vsli.64		d24,d19,#36
+	vsli.64	d24,d19,#36
 	vadd.i64	d27,d26
 	vshr.u64	d26,d19,#39
 	vadd.i64	d28,d13
-	vsli.64		d25,d19,#30
-	veor		d30,d19,d20
-	vsli.64		d26,d19,#25
-	veor		d18,d24,d25
+	vsli.64	d25,d19,#30
+	veor	d30,d19,d20
+	vsli.64	d26,d19,#25
+	veor	d18,d24,d25
 	vadd.i64	d27,d28
-	vbsl		d30,d21,d20		@ Maj(a,b,c)
-	veor		d18,d26			@ Sigma0(a)
+	vbsl	d30,d21,d20		@ Maj(a,b,c)
+	veor	d18,d26			@ Sigma0(a)
 	vadd.i64	d22,d27
 	vadd.i64	d30,d27
 	@ vadd.i64	d18,d30
 	vshr.u64	q12,q6,#19
 	vshr.u64	q13,q6,#61
-	 vadd.i64	d18,d30			@ h+=Maj from the past
+	vadd.i64	d18,d30			@ h+=Maj from the past
 	vshr.u64	q15,q6,#6
-	vsli.64		q12,q6,#45
-	vext.8		q14,q7,q0,#8	@ X[i+1]
-	vsli.64		q13,q6,#3
-	veor		q15,q12
+	vsli.64	q12,q6,#45
+	vext.8	q14,q7,q0,#8	@ X[i+1]
+	vsli.64	q13,q6,#3
+	veor	q15,q12
 	vshr.u64	q12,q14,#1
-	veor		q15,q13				@ sigma1(X[i+14])
+	veor	q15,q13				@ sigma1(X[i+14])
 	vshr.u64	q13,q14,#8
 	vadd.i64	q7,q15
 	vshr.u64	q15,q14,#7
-	vsli.64		q12,q14,#63
-	vsli.64		q13,q14,#56
-	vext.8		q14,q3,q4,#8	@ X[i+9]
-	veor		q15,q12
+	vsli.64	q12,q14,#63
+	vsli.64	q13,q14,#56
+	vext.8	q14,q3,q4,#8	@ X[i+9]
+	veor	q15,q12
 	vshr.u64	d24,d22,#14		@ from NEON_00_15
 	vadd.i64	q7,q14
 	vshr.u64	d25,d22,#18		@ from NEON_00_15
-	veor		q15,q13				@ sigma0(X[i+1])
+	veor	q15,q13				@ sigma0(X[i+1])
 	vshr.u64	d26,d22,#41		@ from NEON_00_15
 	vadd.i64	q7,q15
-	vld1.64		{d28},[r3,:64]!	@ K[i++]
-	vsli.64		d24,d22,#50
-	vsli.64		d25,d22,#46
-	vmov		d29,d22
-	vsli.64		d26,d22,#23
+	vld1.64	{d28},[r3,:64]!	@ K[i++]
+	vsli.64	d24,d22,#50
+	vsli.64	d25,d22,#46
+	vmov	d29,d22
+	vsli.64	d26,d22,#23
 #if 30<16 && defined(__ARMEL__)
 	vrev64.8	,
 #endif
-	veor		d25,d24
-	vbsl		d29,d23,d16		@ Ch(e,f,g)
+	veor	d25,d24
+	vbsl	d29,d23,d16		@ Ch(e,f,g)
 	vshr.u64	d24,d18,#28
-	veor		d26,d25			@ Sigma1(e)
+	veor	d26,d25			@ Sigma1(e)
 	vadd.i64	d27,d29,d17
 	vshr.u64	d25,d18,#34
-	vsli.64		d24,d18,#36
+	vsli.64	d24,d18,#36
 	vadd.i64	d27,d26
 	vshr.u64	d26,d18,#39
 	vadd.i64	d28,d14
-	vsli.64		d25,d18,#30
-	veor		d30,d18,d19
-	vsli.64		d26,d18,#25
-	veor		d17,d24,d25
+	vsli.64	d25,d18,#30
+	veor	d30,d18,d19
+	vsli.64	d26,d18,#25
+	veor	d17,d24,d25
 	vadd.i64	d27,d28
-	vbsl		d30,d20,d19		@ Maj(a,b,c)
-	veor		d17,d26			@ Sigma0(a)
+	vbsl	d30,d20,d19		@ Maj(a,b,c)
+	veor	d17,d26			@ Sigma0(a)
 	vadd.i64	d21,d27
 	vadd.i64	d30,d27
 	@ vadd.i64	d17,d30
 	vshr.u64	d24,d21,#14	@ 31
 #if 31<16
-	vld1.64		{d15},[r1]!	@ handles unaligned
+	vld1.64	{d15},[r1]!	@ handles unaligned
 #endif
 	vshr.u64	d25,d21,#18
 #if 31>0
-	 vadd.i64	d17,d30			@ h+=Maj from the past
+	vadd.i64	d17,d30			@ h+=Maj from the past
 #endif
 	vshr.u64	d26,d21,#41
-	vld1.64		{d28},[r3,:64]!	@ K[i++]
-	vsli.64		d24,d21,#50
-	vsli.64		d25,d21,#46
-	vmov		d29,d21
-	vsli.64		d26,d21,#23
+	vld1.64	{d28},[r3,:64]!	@ K[i++]
+	vsli.64	d24,d21,#50
+	vsli.64	d25,d21,#46
+	vmov	d29,d21
+	vsli.64	d26,d21,#23
 #if 31<16 && defined(__ARMEL__)
 	vrev64.8	,
 #endif
-	veor		d25,d24
-	vbsl		d29,d22,d23		@ Ch(e,f,g)
+	veor	d25,d24
+	vbsl	d29,d22,d23		@ Ch(e,f,g)
 	vshr.u64	d24,d17,#28
-	veor		d26,d25			@ Sigma1(e)
+	veor	d26,d25			@ Sigma1(e)
 	vadd.i64	d27,d29,d16
 	vshr.u64	d25,d17,#34
-	vsli.64		d24,d17,#36
+	vsli.64	d24,d17,#36
 	vadd.i64	d27,d26
 	vshr.u64	d26,d17,#39
 	vadd.i64	d28,d15
-	vsli.64		d25,d17,#30
-	veor		d30,d17,d18
-	vsli.64		d26,d17,#25
-	veor		d16,d24,d25
+	vsli.64	d25,d17,#30
+	veor	d30,d17,d18
+	vsli.64	d26,d17,#25
+	veor	d16,d24,d25
 	vadd.i64	d27,d28
-	vbsl		d30,d19,d18		@ Maj(a,b,c)
-	veor		d16,d26			@ Sigma0(a)
+	vbsl	d30,d19,d18		@ Maj(a,b,c)
+	veor	d16,d26			@ Sigma0(a)
 	vadd.i64	d20,d27
 	vadd.i64	d30,d27
 	@ vadd.i64	d16,d30
-	bne		.L16_79_neon
+	bne	.L16_79_neon
 
-	 vadd.i64	d16,d30		@ h+=Maj from the past
-	vldmia		r0,{d24-d31}	@ load context to temp
+	vadd.i64	d16,d30		@ h+=Maj from the past
+	vldmia	r0,{d24,d25,d26,d27,d28,d29,d30,d31}	@ load context to temp
 	vadd.i64	q8,q12		@ vectorized accumulate
 	vadd.i64	q9,q13
 	vadd.i64	q10,q14
 	vadd.i64	q11,q15
-	vstmia		r0,{d16-d23}	@ save context
-	teq		r1,r2
-	sub		r3,#640	@ rewind K512
-	bne		.Loop_neon
+	vstmia	r0,{d16,d17,d18,d19,d20,d21,d22,d23}	@ save context
+	teq	r1,r2
+	sub	r3,#640	@ rewind K512
+	bne	.Loop_neon
 
-	vldmia	sp!,{d8-d15}		@ epilogue
+	VFP_ABI_POP
 	bx	lr				@ .word	0xe12fff1e
+.size	sha512_block_data_order_neon,.-sha512_block_data_order_neon
 #endif
-.size	sha512_block_data_order,.-sha512_block_data_order
-.asciz	"SHA512 block transform for ARMv4/NEON, CRYPTOGAMS by <appro@openssl.org>"
+.byte	83,72,65,53,49,50,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,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
 .align	2
-#if __ARM_MAX_ARCH__>=7
+.align	2
+#if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__)
 .comm	OPENSSL_armcap_P,4,4
 .hidden	OPENSSL_armcap_P
 #endif