Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1138)

Unified Diff: third_party/boringssl/linux-arm/crypto/aes/bsaes-armv7.S

Issue 1128293004: Revert of Roll src/third_party/boringssl/src 68de407:de12d6c (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Thanks Rietveld, Thietveld. Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/boringssl/linux-arm/crypto/aes/bsaes-armv7.S
diff --git a/third_party/boringssl/linux-arm/crypto/aes/bsaes-armv7.S b/third_party/boringssl/linux-arm/crypto/aes/bsaes-armv7.S
index 0feeab0b1d65c9ddb04d0f90b6d52b9209bc8d9c..cbc32fb57f6ae729a5ce65bbc93b97aabbf170b5 100644
--- a/third_party/boringssl/linux-arm/crypto/aes/bsaes-armv7.S
+++ b/third_party/boringssl/linux-arm/crypto/aes/bsaes-armv7.S
@@ -60,141 +60,135 @@
# 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_MAX_ARCH__>=7
-.arch armv7-a
-.fpu neon
-
+#if __ARM_ARCH__>=7
.text
.syntax unified @ ARMv7-capable assembler is expected to handle this
-#if defined(__thumb2__) && !defined(__APPLE__)
+#ifdef __thumb2__
.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,q9,q10,q11}
+ vldmia r4!, {q8-q11}
veor q8, q8, q0
veor q9, q9, q1
vtbl.8 d0, {q8}, d24
@@ -224,17 +218,17 @@ _bsaes_decrypt8:
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
@@ -242,7 +236,7 @@ _bsaes_decrypt8:
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
@@ -299,7 +293,7 @@ _bsaes_decrypt8:
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
@@ -309,19 +303,19 @@ _bsaes_decrypt8:
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
@@ -330,22 +324,22 @@ _bsaes_decrypt8:
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
@@ -363,10 +357,10 @@ _bsaes_decrypt8:
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
@@ -391,58 +385,58 @@ _bsaes_decrypt8:
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
@@ -462,78 +456,78 @@ _bsaes_decrypt8:
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
@@ -549,24 +543,23 @@ _bsaes_decrypt8:
.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
-.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
+ .quad 0x090d01050c000408, 0x03070b0f060a0e02
+.asciz "Bit-sliced AES for NEON, CRYPTOGAMS by <appro@openssl.org>"
.align 6
.size _bsaes_const,.-_bsaes_const
@@ -575,119 +568,115 @@ _bsaes_const:
_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,q9,q10,q11}
+ vldmia r4!, {q8-q11}
veor q8, q8, q0
veor q9, q9, q1
vtbl.8 d0, {q8}, d24
@@ -736,7 +725,7 @@ _bsaes_encrypt8_bitslice:
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
@@ -793,7 +782,7 @@ _bsaes_encrypt8_bitslice:
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
@@ -803,19 +792,19 @@ _bsaes_encrypt8_bitslice:
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
@@ -824,22 +813,22 @@ _bsaes_encrypt8_bitslice:
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
@@ -867,42 +856,42 @@ _bsaes_encrypt8_bitslice:
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
@@ -922,78 +911,78 @@ _bsaes_encrypt8_bitslice:
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
@@ -1010,11 +999,7 @@ _bsaes_encrypt8_bitslice:
_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
@@ -1057,17 +1042,17 @@ _bsaes_key_convert:
vrev32.8 q15, q15
#endif
subs r5,r5,#1
- vstmia r12!,{q0,q1,q2,q3,q4,q5,q6,q7} @ write bit-sliced round key
+ vstmia r12!,{q0-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
-
-
-.globl bsaes_cbc_encrypt
+.global bsaes_cbc_encrypt
.hidden bsaes_cbc_encrypt
.type bsaes_cbc_encrypt,%function
.align 5
@@ -1086,7 +1071,7 @@ bsaes_cbc_encrypt:
@ it is up to the caller to make sure we are called with enc == 0
mov ip, sp
- stmdb sp!, {r4,r5,r6,r7,r8,r9,r10, lr}
+ stmdb sp!, {r4-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
@@ -1126,7 +1111,7 @@ bsaes_cbc_encrypt:
vstmia r4, {q7}
.align 2
-
+0:
#endif
vld1.8 {q15}, [r8] @ load IV
@@ -1137,33 +1122,33 @@ bsaes_cbc_encrypt:
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
@@ -1207,17 +1192,17 @@ bsaes_cbc_encrypt:
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]!
@@ -1230,9 +1215,9 @@ bsaes_cbc_encrypt:
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]!
@@ -1240,7 +1225,7 @@ bsaes_cbc_encrypt:
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]!
@@ -1251,14 +1236,14 @@ bsaes_cbc_encrypt:
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]!
@@ -1269,14 +1254,14 @@ bsaes_cbc_encrypt:
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
@@ -1285,12 +1270,12 @@ bsaes_cbc_encrypt:
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
@@ -1302,7 +1287,7 @@ bsaes_cbc_encrypt:
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:
@@ -1322,20 +1307,20 @@ bsaes_cbc_encrypt:
#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,r5,r6,r7,r8,r9,r10, pc}
+ ldmia sp!, {r4-r10, pc}
.size bsaes_cbc_encrypt,.-bsaes_cbc_encrypt
-
-.globl bsaes_ctr32_encrypt_blocks
+.extern AES_encrypt
+.global bsaes_ctr32_encrypt_blocks
.hidden bsaes_ctr32_encrypt_blocks
.type bsaes_ctr32_encrypt_blocks,%function
.align 5
@@ -1344,7 +1329,7 @@ bsaes_ctr32_encrypt_blocks:
blo .Lctr_enc_short @ small sizes
mov ip, sp
- stmdb sp!, {r4,r5,r6,r7,r8,r9,r10, lr}
+ stmdb sp!, {r4-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
@@ -1365,12 +1350,7 @@ bsaes_ctr32_encrypt_blocks:
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]
@@ -1387,7 +1367,7 @@ bsaes_ctr32_encrypt_blocks:
vstmia r12, {q7} @ save last round key
.align 2
- add r12, r3, #248
+0: add r12, r3, #248
vld1.8 {q0}, [r8] @ load counter
adrl r8, .LREVM0SR @ borrow r8
vldmia r12, {q4} @ load round0 key
@@ -1395,9 +1375,9 @@ bsaes_ctr32_encrypt_blocks:
#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
@@ -1418,122 +1398,117 @@ bsaes_ctr32_encrypt_blocks:
@ 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
-#ifdef __APPLE__
- mov r6, #.LREVM0SR-.LSR
- sub r6, r8, r6
-#else
- sub r6, r8, #.LREVM0SR-.LSR @ pass constants
-#endif
-
- bl _bsaes_encrypt8_alt
-
- 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]!
+ vldmia r8, {q8} @ .LREVM0SR
+ mov r5, r10 @ pass rounds
+ vstmia r9, {q10} @ save next counter
+ sub r6, r8, #.LREVM0SR-.LSR @ pass constants
+
+ bl _bsaes_encrypt8_alt
+
+ 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]!
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,r5,r6,r7,r8,r9,r10, pc} @ return
+ ldmia sp!, {r4-r10, pc} @ return
.align 4
.Lctr_enc_short:
ldr ip, [sp] @ ctr pointer is passed on stack
- stmdb sp!, {r4,r5,r6,r7,r8, lr}
+ stmdb sp!, {r4-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] @ copy counter value
+ vst1.8 {q1}, [sp,:64] @ copy counter value
sub sp, sp, #0x10
.Lctr_enc_short_loop:
@@ -1544,7 +1519,7 @@ bsaes_ctr32_encrypt_blocks:
bl AES_encrypt
vld1.8 {q0}, [r4]! @ load input
- vld1.8 {q1}, [sp] @ load encrypted counter
+ vld1.8 {q1}, [sp,:64] @ load encrypted counter
add r8, r8, #1
#ifdef __ARMEL__
rev r0, r8
@@ -1559,9 +1534,9 @@ bsaes_ctr32_encrypt_blocks:
vmov.i32 q0, #0
vmov.i32 q1, #0
- vstmia sp!, {q0,q1}
+ vstmia sp!, {q0-q1}
- ldmia sp!, {r4,r5,r6,r7,r8, pc}
+ ldmia sp!, {r4-r8, pc}
.size bsaes_ctr32_encrypt_blocks,.-bsaes_ctr32_encrypt_blocks
.globl bsaes_xts_encrypt
.hidden bsaes_xts_encrypt
@@ -1569,7 +1544,7 @@ bsaes_ctr32_encrypt_blocks:
.align 4
bsaes_xts_encrypt:
mov ip, sp
- stmdb sp!, {r4,r5,r6,r7,r8,r9,r10, lr} @ 0x20
+ stmdb sp!, {r4-r10, lr} @ 0x20
VFP_ABI_PUSH
mov r6, sp @ future r3
@@ -1623,7 +1598,7 @@ bsaes_xts_encrypt:
vstmia r12, {q7}
.align 2
- sub sp, #0x90 @ place for tweak[9]
+0: sub sp, #0x90 @ place for tweak[9]
#endif
vld1.8 {q8}, [r0] @ initial tweak
@@ -1635,422 +1610,422 @@ bsaes_xts_encrypt:
.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
-
- 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}, [r0,:128] @ next round tweak
-
- subs r9, #0x80
- bpl .Lxts_enc_loop
+ veor q6, q6, q14
+ mov r5, r1 @ pass rounds
+ veor q7, q7, q15
+ mov r0, sp
+
+ 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}, [r0,:128] @ next round tweak
+
+ 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
-
- vld1.8 {q6}, [r7]!
- veor q5, q5, q13
+ 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
#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
-
- 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}, [r0,:128] @ next round tweak
- b .Lxts_enc_done
+ veor q6, q6, q14
+ mov r5, r1 @ pass rounds
+ mov r0, sp
+
+ 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}, [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
-
- 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}, [r0,:128] @ next round tweak
- b .Lxts_enc_done
+ veor q5, q5, q13
+ mov r5, r1 @ pass rounds
+ mov r0, sp
+
+ 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}, [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
-
- 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}, [r0,:128] @ next round tweak
- b .Lxts_enc_done
+ veor q4, q4, q12
+ mov r5, r1 @ pass rounds
+ mov r0, sp
+
+ 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}, [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
-
- 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}, [r0,:128] @ next round tweak
- b .Lxts_enc_done
+ veor q3, q3, q11
+ mov r5, r1 @ pass rounds
+ mov r0, sp
+
+ 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}, [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
-
- 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}, [r0,:128] @ next round tweak
- b .Lxts_enc_done
+ veor q2, q2, q10
+ mov r5, r1 @ pass rounds
+ mov r0, sp
+
+ 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}, [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
-
- 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
-
- bl AES_encrypt
-
- vld1.8 {q0}, [sp,:128]
- veor q0, q0, q8
- vst1.8 {q0}, [r6]
- mov r3, r4
+ ldrb r0, [r7], #1
+ ldrb r1, [r8, #-0x10]
+ strb r0, [r8, #-0x10]
+ strb r1, [r8], #1
+
+ 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
+
+ bl AES_encrypt
+
+ 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,r5,r6,r7,r8,r9,r10, pc} @ return
+ ldmia sp!, {r4-r10, pc} @ return
.size bsaes_xts_encrypt,.-bsaes_xts_encrypt
@@ -2060,7 +2035,7 @@ bsaes_xts_encrypt:
.align 4
bsaes_xts_decrypt:
mov ip, sp
- stmdb sp!, {r4,r5,r6,r7,r8,r9,r10, lr} @ 0x20
+ stmdb sp!, {r4-r10, lr} @ 0x20
VFP_ABI_PUSH
mov r6, sp @ future r3
@@ -2120,16 +2095,14 @@ bsaes_xts_decrypt:
vstmia r4, {q7}
.align 2
- sub sp, #0x90 @ place for tweak[9]
+0: 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
@@ -2137,440 +2110,440 @@ bsaes_xts_decrypt:
.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
-
- 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}, [r0,:128] @ next round tweak
-
- subs r9, #0x80
- bpl .Lxts_dec_loop
+ veor q6, q6, q14
+ mov r5, r1 @ pass rounds
+ veor q7, q7, q15
+ mov r0, sp
+
+ 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}, [r0,:128] @ next round tweak
+
+ 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
-
- vld1.8 {q6}, [r7]!
- veor q5, q5, q13
+ 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
#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
-
- 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}, [r0,:128] @ next round tweak
- b .Lxts_dec_done
+ veor q6, q6, q14
+ mov r5, r1 @ pass rounds
+ mov r0, sp
+
+ 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}, [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
-
- 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}, [r0,:128] @ next round tweak
- b .Lxts_dec_done
+ veor q5, q5, q13
+ mov r5, r1 @ pass rounds
+ mov r0, sp
+
+ 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}, [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
-
- 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}, [r0,:128] @ next round tweak
- b .Lxts_dec_done
+ veor q4, q4, q12
+ mov r5, r1 @ pass rounds
+ mov r0, sp
+
+ 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}, [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
-
- 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}, [r0,:128] @ next round tweak
- b .Lxts_dec_done
+ veor q3, q3, q11
+ mov r5, r1 @ pass rounds
+ mov r0, sp
+
+ 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}, [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
-
- 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}, [r0,:128] @ next round tweak
- b .Lxts_dec_done
+ veor q2, q2, q10
+ mov r5, r1 @ pass rounds
+ mov r0, sp
+
+ 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}, [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
-
- 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
-
- bl AES_decrypt
-
- vld1.8 {q0}, [sp,:128]
- veor q0, q0, q8
- vst1.8 {q0}, [r6]
- mov r3, r4
+ ldrb r1, [r8]
+ ldrb r0, [r7], #1
+ strb r1, [r8, #0x10]
+ strb r0, [r8], #1
+
+ 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
+
+ bl AES_decrypt
+
+ 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,r5,r6,r7,r8,r9,r10, pc} @ return
+ ldmia sp!, {r4-r10, pc} @ return
.size bsaes_xts_decrypt,.-bsaes_xts_decrypt
#endif
« no previous file with comments | « third_party/boringssl/linux-arm/crypto/aes/aes-armv4.S ('k') | third_party/boringssl/linux-arm/crypto/bn/armv4-mont.S » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698