mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2025-07-31 19:24:42 +02:00
Thumb2 ASM fixes
Make a separate AES for IAR that has AES_encrypt_block and AES_decrypt_block inlined. Default code is relying on compiler to use specific registers and not modify others. Improve performance of small SP ASM code for RSA.
This commit is contained in:
@@ -670,10 +670,10 @@ L_AES_invert_key_mix_loop:
|
|||||||
EOR r8, r8, r9, ROR #24
|
EOR r8, r8, r9, ROR #24
|
||||||
STR r8, [r0], #4
|
STR r8, [r0], #4
|
||||||
SUBS r11, r11, #0x1
|
SUBS r11, r11, #0x1
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
BNE L_AES_invert_key_mix_loop
|
BNE L_AES_invert_key_mix_loop
|
||||||
#else
|
#else
|
||||||
BNE.N L_AES_invert_key_mix_loop
|
BNE.W L_AES_invert_key_mix_loop
|
||||||
#endif
|
#endif
|
||||||
POP {r4, r5, r6, r7, r8, r9, r10, r11, pc}
|
POP {r4, r5, r6, r7, r8, r9, r10, r11, pc}
|
||||||
/* Cycle Count = 165 */
|
/* Cycle Count = 165 */
|
||||||
@@ -703,16 +703,16 @@ AES_set_encrypt_key:
|
|||||||
LDR r10, L_AES_Thumb2_te
|
LDR r10, L_AES_Thumb2_te
|
||||||
ADR lr, L_AES_Thumb2_rcon
|
ADR lr, L_AES_Thumb2_rcon
|
||||||
CMP r1, #0x80
|
CMP r1, #0x80
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
BEQ L_AES_set_encrypt_key_start_128
|
BEQ L_AES_set_encrypt_key_start_128
|
||||||
#else
|
#else
|
||||||
BEQ.N L_AES_set_encrypt_key_start_128
|
BEQ.W L_AES_set_encrypt_key_start_128
|
||||||
#endif
|
#endif
|
||||||
CMP r1, #0xc0
|
CMP r1, #0xc0
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
BEQ L_AES_set_encrypt_key_start_192
|
BEQ L_AES_set_encrypt_key_start_192
|
||||||
#else
|
#else
|
||||||
BEQ.N L_AES_set_encrypt_key_start_192
|
BEQ.W L_AES_set_encrypt_key_start_192
|
||||||
#endif
|
#endif
|
||||||
LDRD r4, r5, [r0]
|
LDRD r4, r5, [r0]
|
||||||
LDRD r6, r7, [r0, #8]
|
LDRD r6, r7, [r0, #8]
|
||||||
@@ -799,7 +799,11 @@ L_AES_set_encrypt_key_loop_256:
|
|||||||
ADD r2, r2, #0x10
|
ADD r2, r2, #0x10
|
||||||
STM r2, {r4, r5, r6, r7}
|
STM r2, {r4, r5, r6, r7}
|
||||||
SUB r2, r2, #0x10
|
SUB r2, r2, #0x10
|
||||||
|
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
||||||
B L_AES_set_encrypt_key_end
|
B L_AES_set_encrypt_key_end
|
||||||
|
#else
|
||||||
|
B.N L_AES_set_encrypt_key_end
|
||||||
|
#endif
|
||||||
L_AES_set_encrypt_key_start_192:
|
L_AES_set_encrypt_key_start_192:
|
||||||
LDRD r4, r5, [r0]
|
LDRD r4, r5, [r0]
|
||||||
LDRD r6, r7, [r0, #8]
|
LDRD r6, r7, [r0, #8]
|
||||||
@@ -861,7 +865,11 @@ L_AES_set_encrypt_key_loop_192:
|
|||||||
EOR r6, r6, r5
|
EOR r6, r6, r5
|
||||||
EOR r7, r7, r6
|
EOR r7, r7, r6
|
||||||
STM r2, {r4, r5, r6, r7}
|
STM r2, {r4, r5, r6, r7}
|
||||||
|
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
||||||
B L_AES_set_encrypt_key_end
|
B L_AES_set_encrypt_key_end
|
||||||
|
#else
|
||||||
|
B.N L_AES_set_encrypt_key_end
|
||||||
|
#endif
|
||||||
L_AES_set_encrypt_key_start_128:
|
L_AES_set_encrypt_key_start_128:
|
||||||
LDRD r4, r5, [r0]
|
LDRD r4, r5, [r0]
|
||||||
LDRD r6, r7, [r0, #8]
|
LDRD r6, r7, [r0, #8]
|
||||||
@@ -1009,10 +1017,10 @@ L_AES_encrypt_block_nr:
|
|||||||
EOR r6, r6, r10
|
EOR r6, r6, r10
|
||||||
EOR r7, r7, r11
|
EOR r7, r7, r11
|
||||||
SUBS r1, r1, #0x1
|
SUBS r1, r1, #0x1
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
BNE L_AES_encrypt_block_nr
|
BNE L_AES_encrypt_block_nr
|
||||||
#else
|
#else
|
||||||
BNE.N L_AES_encrypt_block_nr
|
BNE.W L_AES_encrypt_block_nr
|
||||||
#endif
|
#endif
|
||||||
UBFX r8, r5, #16, #8
|
UBFX r8, r5, #16, #8
|
||||||
LSR r11, r4, #24
|
LSR r11, r4, #24
|
||||||
@@ -1137,16 +1145,16 @@ AES_ECB_encrypt:
|
|||||||
LDR r12, [sp, #36]
|
LDR r12, [sp, #36]
|
||||||
PUSH {r3}
|
PUSH {r3}
|
||||||
CMP r12, #0xa
|
CMP r12, #0xa
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
BEQ L_AES_ECB_encrypt_start_block_128
|
BEQ L_AES_ECB_encrypt_start_block_128
|
||||||
#else
|
#else
|
||||||
BEQ.N L_AES_ECB_encrypt_start_block_128
|
BEQ.W L_AES_ECB_encrypt_start_block_128
|
||||||
#endif
|
#endif
|
||||||
CMP r12, #0xc
|
CMP r12, #0xc
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
BEQ L_AES_ECB_encrypt_start_block_192
|
BEQ L_AES_ECB_encrypt_start_block_192
|
||||||
#else
|
#else
|
||||||
BEQ.N L_AES_ECB_encrypt_start_block_192
|
BEQ.W L_AES_ECB_encrypt_start_block_192
|
||||||
#endif
|
#endif
|
||||||
L_AES_ECB_encrypt_loop_block_256:
|
L_AES_ECB_encrypt_loop_block_256:
|
||||||
LDR r4, [lr]
|
LDR r4, [lr]
|
||||||
@@ -1179,12 +1187,16 @@ L_AES_ECB_encrypt_loop_block_256:
|
|||||||
SUBS r2, r2, #0x10
|
SUBS r2, r2, #0x10
|
||||||
ADD lr, lr, #0x10
|
ADD lr, lr, #0x10
|
||||||
ADD r1, r1, #0x10
|
ADD r1, r1, #0x10
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
BNE L_AES_ECB_encrypt_loop_block_256
|
BNE L_AES_ECB_encrypt_loop_block_256
|
||||||
#else
|
#else
|
||||||
BNE.N L_AES_ECB_encrypt_loop_block_256
|
BNE.W L_AES_ECB_encrypt_loop_block_256
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
||||||
B L_AES_ECB_encrypt_end
|
B L_AES_ECB_encrypt_end
|
||||||
|
#else
|
||||||
|
B.N L_AES_ECB_encrypt_end
|
||||||
|
#endif
|
||||||
L_AES_ECB_encrypt_start_block_192:
|
L_AES_ECB_encrypt_start_block_192:
|
||||||
L_AES_ECB_encrypt_loop_block_192:
|
L_AES_ECB_encrypt_loop_block_192:
|
||||||
LDR r4, [lr]
|
LDR r4, [lr]
|
||||||
@@ -1217,12 +1229,16 @@ L_AES_ECB_encrypt_loop_block_192:
|
|||||||
SUBS r2, r2, #0x10
|
SUBS r2, r2, #0x10
|
||||||
ADD lr, lr, #0x10
|
ADD lr, lr, #0x10
|
||||||
ADD r1, r1, #0x10
|
ADD r1, r1, #0x10
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
BNE L_AES_ECB_encrypt_loop_block_192
|
BNE L_AES_ECB_encrypt_loop_block_192
|
||||||
#else
|
#else
|
||||||
BNE.N L_AES_ECB_encrypt_loop_block_192
|
BNE.W L_AES_ECB_encrypt_loop_block_192
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
||||||
B L_AES_ECB_encrypt_end
|
B L_AES_ECB_encrypt_end
|
||||||
|
#else
|
||||||
|
B.N L_AES_ECB_encrypt_end
|
||||||
|
#endif
|
||||||
L_AES_ECB_encrypt_start_block_128:
|
L_AES_ECB_encrypt_start_block_128:
|
||||||
L_AES_ECB_encrypt_loop_block_128:
|
L_AES_ECB_encrypt_loop_block_128:
|
||||||
LDR r4, [lr]
|
LDR r4, [lr]
|
||||||
@@ -1255,10 +1271,10 @@ L_AES_ECB_encrypt_loop_block_128:
|
|||||||
SUBS r2, r2, #0x10
|
SUBS r2, r2, #0x10
|
||||||
ADD lr, lr, #0x10
|
ADD lr, lr, #0x10
|
||||||
ADD r1, r1, #0x10
|
ADD r1, r1, #0x10
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
BNE L_AES_ECB_encrypt_loop_block_128
|
BNE L_AES_ECB_encrypt_loop_block_128
|
||||||
#else
|
#else
|
||||||
BNE.N L_AES_ECB_encrypt_loop_block_128
|
BNE.W L_AES_ECB_encrypt_loop_block_128
|
||||||
#endif
|
#endif
|
||||||
L_AES_ECB_encrypt_end:
|
L_AES_ECB_encrypt_end:
|
||||||
POP {r3}
|
POP {r3}
|
||||||
@@ -1280,16 +1296,16 @@ AES_CBC_encrypt:
|
|||||||
LDM r9, {r4, r5, r6, r7}
|
LDM r9, {r4, r5, r6, r7}
|
||||||
PUSH {r3, r9}
|
PUSH {r3, r9}
|
||||||
CMP r8, #0xa
|
CMP r8, #0xa
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
BEQ L_AES_CBC_encrypt_start_block_128
|
BEQ L_AES_CBC_encrypt_start_block_128
|
||||||
#else
|
#else
|
||||||
BEQ.N L_AES_CBC_encrypt_start_block_128
|
BEQ.W L_AES_CBC_encrypt_start_block_128
|
||||||
#endif
|
#endif
|
||||||
CMP r8, #0xc
|
CMP r8, #0xc
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
BEQ L_AES_CBC_encrypt_start_block_192
|
BEQ L_AES_CBC_encrypt_start_block_192
|
||||||
#else
|
#else
|
||||||
BEQ.N L_AES_CBC_encrypt_start_block_192
|
BEQ.W L_AES_CBC_encrypt_start_block_192
|
||||||
#endif
|
#endif
|
||||||
L_AES_CBC_encrypt_loop_block_256:
|
L_AES_CBC_encrypt_loop_block_256:
|
||||||
LDR r8, [lr]
|
LDR r8, [lr]
|
||||||
@@ -1326,12 +1342,16 @@ L_AES_CBC_encrypt_loop_block_256:
|
|||||||
SUBS r2, r2, #0x10
|
SUBS r2, r2, #0x10
|
||||||
ADD lr, lr, #0x10
|
ADD lr, lr, #0x10
|
||||||
ADD r1, r1, #0x10
|
ADD r1, r1, #0x10
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
BNE L_AES_CBC_encrypt_loop_block_256
|
BNE L_AES_CBC_encrypt_loop_block_256
|
||||||
#else
|
#else
|
||||||
BNE.N L_AES_CBC_encrypt_loop_block_256
|
BNE.W L_AES_CBC_encrypt_loop_block_256
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
||||||
B L_AES_CBC_encrypt_end
|
B L_AES_CBC_encrypt_end
|
||||||
|
#else
|
||||||
|
B.N L_AES_CBC_encrypt_end
|
||||||
|
#endif
|
||||||
L_AES_CBC_encrypt_start_block_192:
|
L_AES_CBC_encrypt_start_block_192:
|
||||||
L_AES_CBC_encrypt_loop_block_192:
|
L_AES_CBC_encrypt_loop_block_192:
|
||||||
LDR r8, [lr]
|
LDR r8, [lr]
|
||||||
@@ -1368,12 +1388,16 @@ L_AES_CBC_encrypt_loop_block_192:
|
|||||||
SUBS r2, r2, #0x10
|
SUBS r2, r2, #0x10
|
||||||
ADD lr, lr, #0x10
|
ADD lr, lr, #0x10
|
||||||
ADD r1, r1, #0x10
|
ADD r1, r1, #0x10
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
BNE L_AES_CBC_encrypt_loop_block_192
|
BNE L_AES_CBC_encrypt_loop_block_192
|
||||||
#else
|
#else
|
||||||
BNE.N L_AES_CBC_encrypt_loop_block_192
|
BNE.W L_AES_CBC_encrypt_loop_block_192
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
||||||
B L_AES_CBC_encrypt_end
|
B L_AES_CBC_encrypt_end
|
||||||
|
#else
|
||||||
|
B.N L_AES_CBC_encrypt_end
|
||||||
|
#endif
|
||||||
L_AES_CBC_encrypt_start_block_128:
|
L_AES_CBC_encrypt_start_block_128:
|
||||||
L_AES_CBC_encrypt_loop_block_128:
|
L_AES_CBC_encrypt_loop_block_128:
|
||||||
LDR r8, [lr]
|
LDR r8, [lr]
|
||||||
@@ -1410,10 +1434,10 @@ L_AES_CBC_encrypt_loop_block_128:
|
|||||||
SUBS r2, r2, #0x10
|
SUBS r2, r2, #0x10
|
||||||
ADD lr, lr, #0x10
|
ADD lr, lr, #0x10
|
||||||
ADD r1, r1, #0x10
|
ADD r1, r1, #0x10
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
BNE L_AES_CBC_encrypt_loop_block_128
|
BNE L_AES_CBC_encrypt_loop_block_128
|
||||||
#else
|
#else
|
||||||
BNE.N L_AES_CBC_encrypt_loop_block_128
|
BNE.W L_AES_CBC_encrypt_loop_block_128
|
||||||
#endif
|
#endif
|
||||||
L_AES_CBC_encrypt_end:
|
L_AES_CBC_encrypt_end:
|
||||||
POP {r3, r9}
|
POP {r3, r9}
|
||||||
@@ -1441,16 +1465,16 @@ AES_CTR_encrypt:
|
|||||||
STM r8, {r4, r5, r6, r7}
|
STM r8, {r4, r5, r6, r7}
|
||||||
PUSH {r3, r8}
|
PUSH {r3, r8}
|
||||||
CMP r12, #0xa
|
CMP r12, #0xa
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
BEQ L_AES_CTR_encrypt_start_block_128
|
BEQ L_AES_CTR_encrypt_start_block_128
|
||||||
#else
|
#else
|
||||||
BEQ.N L_AES_CTR_encrypt_start_block_128
|
BEQ.W L_AES_CTR_encrypt_start_block_128
|
||||||
#endif
|
#endif
|
||||||
CMP r12, #0xc
|
CMP r12, #0xc
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
BEQ L_AES_CTR_encrypt_start_block_192
|
BEQ L_AES_CTR_encrypt_start_block_192
|
||||||
#else
|
#else
|
||||||
BEQ.N L_AES_CTR_encrypt_start_block_192
|
BEQ.W L_AES_CTR_encrypt_start_block_192
|
||||||
#endif
|
#endif
|
||||||
L_AES_CTR_encrypt_loop_block_256:
|
L_AES_CTR_encrypt_loop_block_256:
|
||||||
PUSH {r1, r2, lr}
|
PUSH {r1, r2, lr}
|
||||||
@@ -1491,12 +1515,16 @@ L_AES_CTR_encrypt_loop_block_256:
|
|||||||
SUBS r2, r2, #0x10
|
SUBS r2, r2, #0x10
|
||||||
ADD lr, lr, #0x10
|
ADD lr, lr, #0x10
|
||||||
ADD r1, r1, #0x10
|
ADD r1, r1, #0x10
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
BNE L_AES_CTR_encrypt_loop_block_256
|
BNE L_AES_CTR_encrypt_loop_block_256
|
||||||
#else
|
#else
|
||||||
BNE.N L_AES_CTR_encrypt_loop_block_256
|
BNE.W L_AES_CTR_encrypt_loop_block_256
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef __GNUC__
|
||||||
B L_AES_CTR_encrypt_end
|
B L_AES_CTR_encrypt_end
|
||||||
|
#else
|
||||||
|
B.W L_AES_CTR_encrypt_end
|
||||||
|
#endif
|
||||||
L_AES_CTR_encrypt_start_block_192:
|
L_AES_CTR_encrypt_start_block_192:
|
||||||
L_AES_CTR_encrypt_loop_block_192:
|
L_AES_CTR_encrypt_loop_block_192:
|
||||||
PUSH {r1, r2, lr}
|
PUSH {r1, r2, lr}
|
||||||
@@ -1537,12 +1565,16 @@ L_AES_CTR_encrypt_loop_block_192:
|
|||||||
SUBS r2, r2, #0x10
|
SUBS r2, r2, #0x10
|
||||||
ADD lr, lr, #0x10
|
ADD lr, lr, #0x10
|
||||||
ADD r1, r1, #0x10
|
ADD r1, r1, #0x10
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
BNE L_AES_CTR_encrypt_loop_block_192
|
BNE L_AES_CTR_encrypt_loop_block_192
|
||||||
#else
|
#else
|
||||||
BNE.N L_AES_CTR_encrypt_loop_block_192
|
BNE.W L_AES_CTR_encrypt_loop_block_192
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef __GNUC__
|
||||||
B L_AES_CTR_encrypt_end
|
B L_AES_CTR_encrypt_end
|
||||||
|
#else
|
||||||
|
B.W L_AES_CTR_encrypt_end
|
||||||
|
#endif
|
||||||
L_AES_CTR_encrypt_start_block_128:
|
L_AES_CTR_encrypt_start_block_128:
|
||||||
L_AES_CTR_encrypt_loop_block_128:
|
L_AES_CTR_encrypt_loop_block_128:
|
||||||
PUSH {r1, r2, lr}
|
PUSH {r1, r2, lr}
|
||||||
@@ -1583,10 +1615,10 @@ L_AES_CTR_encrypt_loop_block_128:
|
|||||||
SUBS r2, r2, #0x10
|
SUBS r2, r2, #0x10
|
||||||
ADD lr, lr, #0x10
|
ADD lr, lr, #0x10
|
||||||
ADD r1, r1, #0x10
|
ADD r1, r1, #0x10
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
BNE L_AES_CTR_encrypt_loop_block_128
|
BNE L_AES_CTR_encrypt_loop_block_128
|
||||||
#else
|
#else
|
||||||
BNE.N L_AES_CTR_encrypt_loop_block_128
|
BNE.W L_AES_CTR_encrypt_loop_block_128
|
||||||
#endif
|
#endif
|
||||||
L_AES_CTR_encrypt_end:
|
L_AES_CTR_encrypt_end:
|
||||||
POP {r3, r8}
|
POP {r3, r8}
|
||||||
@@ -1709,10 +1741,10 @@ L_AES_decrypt_block_nr:
|
|||||||
EOR r6, r6, r10
|
EOR r6, r6, r10
|
||||||
EOR r7, r7, r11
|
EOR r7, r7, r11
|
||||||
SUBS r1, r1, #0x1
|
SUBS r1, r1, #0x1
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
BNE L_AES_decrypt_block_nr
|
BNE L_AES_decrypt_block_nr
|
||||||
#else
|
#else
|
||||||
BNE.N L_AES_decrypt_block_nr
|
BNE.W L_AES_decrypt_block_nr
|
||||||
#endif
|
#endif
|
||||||
UBFX r8, r7, #16, #8
|
UBFX r8, r7, #16, #8
|
||||||
LSR r11, r4, #24
|
LSR r11, r4, #24
|
||||||
@@ -2097,16 +2129,16 @@ AES_ECB_decrypt:
|
|||||||
MOV r12, r2
|
MOV r12, r2
|
||||||
ADR r2, L_AES_Thumb2_td4
|
ADR r2, L_AES_Thumb2_td4
|
||||||
CMP r8, #0xa
|
CMP r8, #0xa
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
BEQ L_AES_ECB_decrypt_start_block_128
|
BEQ L_AES_ECB_decrypt_start_block_128
|
||||||
#else
|
#else
|
||||||
BEQ.N L_AES_ECB_decrypt_start_block_128
|
BEQ.W L_AES_ECB_decrypt_start_block_128
|
||||||
#endif
|
#endif
|
||||||
CMP r8, #0xc
|
CMP r8, #0xc
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
BEQ L_AES_ECB_decrypt_start_block_192
|
BEQ L_AES_ECB_decrypt_start_block_192
|
||||||
#else
|
#else
|
||||||
BEQ.N L_AES_ECB_decrypt_start_block_192
|
BEQ.W L_AES_ECB_decrypt_start_block_192
|
||||||
#endif
|
#endif
|
||||||
L_AES_ECB_decrypt_loop_block_256:
|
L_AES_ECB_decrypt_loop_block_256:
|
||||||
LDR r4, [lr]
|
LDR r4, [lr]
|
||||||
@@ -2138,12 +2170,16 @@ L_AES_ECB_decrypt_loop_block_256:
|
|||||||
SUBS r12, r12, #0x10
|
SUBS r12, r12, #0x10
|
||||||
ADD lr, lr, #0x10
|
ADD lr, lr, #0x10
|
||||||
ADD r1, r1, #0x10
|
ADD r1, r1, #0x10
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
BNE L_AES_ECB_decrypt_loop_block_256
|
BNE L_AES_ECB_decrypt_loop_block_256
|
||||||
#else
|
#else
|
||||||
BNE.N L_AES_ECB_decrypt_loop_block_256
|
BNE.W L_AES_ECB_decrypt_loop_block_256
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
||||||
B L_AES_ECB_decrypt_end
|
B L_AES_ECB_decrypt_end
|
||||||
|
#else
|
||||||
|
B.N L_AES_ECB_decrypt_end
|
||||||
|
#endif
|
||||||
L_AES_ECB_decrypt_start_block_192:
|
L_AES_ECB_decrypt_start_block_192:
|
||||||
L_AES_ECB_decrypt_loop_block_192:
|
L_AES_ECB_decrypt_loop_block_192:
|
||||||
LDR r4, [lr]
|
LDR r4, [lr]
|
||||||
@@ -2175,12 +2211,16 @@ L_AES_ECB_decrypt_loop_block_192:
|
|||||||
SUBS r12, r12, #0x10
|
SUBS r12, r12, #0x10
|
||||||
ADD lr, lr, #0x10
|
ADD lr, lr, #0x10
|
||||||
ADD r1, r1, #0x10
|
ADD r1, r1, #0x10
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
BNE L_AES_ECB_decrypt_loop_block_192
|
BNE L_AES_ECB_decrypt_loop_block_192
|
||||||
#else
|
#else
|
||||||
BNE.N L_AES_ECB_decrypt_loop_block_192
|
BNE.W L_AES_ECB_decrypt_loop_block_192
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
||||||
B L_AES_ECB_decrypt_end
|
B L_AES_ECB_decrypt_end
|
||||||
|
#else
|
||||||
|
B.N L_AES_ECB_decrypt_end
|
||||||
|
#endif
|
||||||
L_AES_ECB_decrypt_start_block_128:
|
L_AES_ECB_decrypt_start_block_128:
|
||||||
L_AES_ECB_decrypt_loop_block_128:
|
L_AES_ECB_decrypt_loop_block_128:
|
||||||
LDR r4, [lr]
|
LDR r4, [lr]
|
||||||
@@ -2212,10 +2252,10 @@ L_AES_ECB_decrypt_loop_block_128:
|
|||||||
SUBS r12, r12, #0x10
|
SUBS r12, r12, #0x10
|
||||||
ADD lr, lr, #0x10
|
ADD lr, lr, #0x10
|
||||||
ADD r1, r1, #0x10
|
ADD r1, r1, #0x10
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
BNE L_AES_ECB_decrypt_loop_block_128
|
BNE L_AES_ECB_decrypt_loop_block_128
|
||||||
#else
|
#else
|
||||||
BNE.N L_AES_ECB_decrypt_loop_block_128
|
BNE.W L_AES_ECB_decrypt_loop_block_128
|
||||||
#endif
|
#endif
|
||||||
L_AES_ECB_decrypt_end:
|
L_AES_ECB_decrypt_end:
|
||||||
POP {r4, r5, r6, r7, r8, r9, r10, r11, pc}
|
POP {r4, r5, r6, r7, r8, r9, r10, r11, pc}
|
||||||
@@ -2237,16 +2277,16 @@ AES_CBC_decrypt:
|
|||||||
ADR r2, L_AES_Thumb2_td4
|
ADR r2, L_AES_Thumb2_td4
|
||||||
PUSH {r3, r4}
|
PUSH {r3, r4}
|
||||||
CMP r8, #0xa
|
CMP r8, #0xa
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
BEQ L_AES_CBC_decrypt_loop_block_128
|
BEQ L_AES_CBC_decrypt_loop_block_128
|
||||||
#else
|
#else
|
||||||
BEQ.N L_AES_CBC_decrypt_loop_block_128
|
BEQ.W L_AES_CBC_decrypt_loop_block_128
|
||||||
#endif
|
#endif
|
||||||
CMP r8, #0xc
|
CMP r8, #0xc
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
BEQ L_AES_CBC_decrypt_loop_block_192
|
BEQ L_AES_CBC_decrypt_loop_block_192
|
||||||
#else
|
#else
|
||||||
BEQ.N L_AES_CBC_decrypt_loop_block_192
|
BEQ.W L_AES_CBC_decrypt_loop_block_192
|
||||||
#endif
|
#endif
|
||||||
L_AES_CBC_decrypt_loop_block_256:
|
L_AES_CBC_decrypt_loop_block_256:
|
||||||
PUSH {r1, r12, lr}
|
PUSH {r1, r12, lr}
|
||||||
@@ -2288,10 +2328,10 @@ L_AES_CBC_decrypt_loop_block_256:
|
|||||||
SUBS r12, r12, #0x10
|
SUBS r12, r12, #0x10
|
||||||
ADD lr, lr, #0x10
|
ADD lr, lr, #0x10
|
||||||
ADD r1, r1, #0x10
|
ADD r1, r1, #0x10
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
BEQ L_AES_CBC_decrypt_end_odd
|
BEQ L_AES_CBC_decrypt_end_odd
|
||||||
#else
|
#else
|
||||||
BEQ.N L_AES_CBC_decrypt_end_odd
|
BEQ.W L_AES_CBC_decrypt_end_odd
|
||||||
#endif
|
#endif
|
||||||
PUSH {r1, r12, lr}
|
PUSH {r1, r12, lr}
|
||||||
LDR r4, [lr]
|
LDR r4, [lr]
|
||||||
@@ -2333,12 +2373,16 @@ L_AES_CBC_decrypt_loop_block_256:
|
|||||||
SUBS r12, r12, #0x10
|
SUBS r12, r12, #0x10
|
||||||
ADD lr, lr, #0x10
|
ADD lr, lr, #0x10
|
||||||
ADD r1, r1, #0x10
|
ADD r1, r1, #0x10
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
BNE L_AES_CBC_decrypt_loop_block_256
|
BNE L_AES_CBC_decrypt_loop_block_256
|
||||||
#else
|
#else
|
||||||
BNE.N L_AES_CBC_decrypt_loop_block_256
|
BNE.W L_AES_CBC_decrypt_loop_block_256
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef __GNUC__
|
||||||
B L_AES_CBC_decrypt_end
|
B L_AES_CBC_decrypt_end
|
||||||
|
#else
|
||||||
|
B.W L_AES_CBC_decrypt_end
|
||||||
|
#endif
|
||||||
L_AES_CBC_decrypt_loop_block_192:
|
L_AES_CBC_decrypt_loop_block_192:
|
||||||
PUSH {r1, r12, lr}
|
PUSH {r1, r12, lr}
|
||||||
LDR r4, [lr]
|
LDR r4, [lr]
|
||||||
@@ -2379,10 +2423,10 @@ L_AES_CBC_decrypt_loop_block_192:
|
|||||||
SUBS r12, r12, #0x10
|
SUBS r12, r12, #0x10
|
||||||
ADD lr, lr, #0x10
|
ADD lr, lr, #0x10
|
||||||
ADD r1, r1, #0x10
|
ADD r1, r1, #0x10
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
BEQ L_AES_CBC_decrypt_end_odd
|
BEQ L_AES_CBC_decrypt_end_odd
|
||||||
#else
|
#else
|
||||||
BEQ.N L_AES_CBC_decrypt_end_odd
|
BEQ.W L_AES_CBC_decrypt_end_odd
|
||||||
#endif
|
#endif
|
||||||
PUSH {r1, r12, lr}
|
PUSH {r1, r12, lr}
|
||||||
LDR r4, [lr]
|
LDR r4, [lr]
|
||||||
@@ -2424,12 +2468,16 @@ L_AES_CBC_decrypt_loop_block_192:
|
|||||||
SUBS r12, r12, #0x10
|
SUBS r12, r12, #0x10
|
||||||
ADD lr, lr, #0x10
|
ADD lr, lr, #0x10
|
||||||
ADD r1, r1, #0x10
|
ADD r1, r1, #0x10
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
BNE L_AES_CBC_decrypt_loop_block_192
|
BNE L_AES_CBC_decrypt_loop_block_192
|
||||||
#else
|
#else
|
||||||
BNE.N L_AES_CBC_decrypt_loop_block_192
|
BNE.W L_AES_CBC_decrypt_loop_block_192
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef __GNUC__
|
||||||
B L_AES_CBC_decrypt_end
|
B L_AES_CBC_decrypt_end
|
||||||
|
#else
|
||||||
|
B.W L_AES_CBC_decrypt_end
|
||||||
|
#endif
|
||||||
L_AES_CBC_decrypt_loop_block_128:
|
L_AES_CBC_decrypt_loop_block_128:
|
||||||
PUSH {r1, r12, lr}
|
PUSH {r1, r12, lr}
|
||||||
LDR r4, [lr]
|
LDR r4, [lr]
|
||||||
@@ -2470,10 +2518,10 @@ L_AES_CBC_decrypt_loop_block_128:
|
|||||||
SUBS r12, r12, #0x10
|
SUBS r12, r12, #0x10
|
||||||
ADD lr, lr, #0x10
|
ADD lr, lr, #0x10
|
||||||
ADD r1, r1, #0x10
|
ADD r1, r1, #0x10
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
BEQ L_AES_CBC_decrypt_end_odd
|
BEQ L_AES_CBC_decrypt_end_odd
|
||||||
#else
|
#else
|
||||||
BEQ.N L_AES_CBC_decrypt_end_odd
|
BEQ.W L_AES_CBC_decrypt_end_odd
|
||||||
#endif
|
#endif
|
||||||
PUSH {r1, r12, lr}
|
PUSH {r1, r12, lr}
|
||||||
LDR r4, [lr]
|
LDR r4, [lr]
|
||||||
@@ -2515,12 +2563,16 @@ L_AES_CBC_decrypt_loop_block_128:
|
|||||||
SUBS r12, r12, #0x10
|
SUBS r12, r12, #0x10
|
||||||
ADD lr, lr, #0x10
|
ADD lr, lr, #0x10
|
||||||
ADD r1, r1, #0x10
|
ADD r1, r1, #0x10
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
BNE L_AES_CBC_decrypt_loop_block_128
|
BNE L_AES_CBC_decrypt_loop_block_128
|
||||||
#else
|
#else
|
||||||
BNE.N L_AES_CBC_decrypt_loop_block_128
|
BNE.W L_AES_CBC_decrypt_loop_block_128
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
||||||
B L_AES_CBC_decrypt_end
|
B L_AES_CBC_decrypt_end
|
||||||
|
#else
|
||||||
|
B.N L_AES_CBC_decrypt_end
|
||||||
|
#endif
|
||||||
L_AES_CBC_decrypt_end_odd:
|
L_AES_CBC_decrypt_end_odd:
|
||||||
LDR r4, [sp, #4]
|
LDR r4, [sp, #4]
|
||||||
LDRD r8, r9, [r4, #16]
|
LDRD r8, r9, [r4, #16]
|
||||||
@@ -3109,10 +3161,10 @@ L_GCM_gmult_len_start_block:
|
|||||||
POP {r3}
|
POP {r3}
|
||||||
SUBS r3, r3, #0x10
|
SUBS r3, r3, #0x10
|
||||||
ADD r2, r2, #0x10
|
ADD r2, r2, #0x10
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
BNE L_GCM_gmult_len_start_block
|
BNE L_GCM_gmult_len_start_block
|
||||||
#else
|
#else
|
||||||
BNE.N L_GCM_gmult_len_start_block
|
BNE.W L_GCM_gmult_len_start_block
|
||||||
#endif
|
#endif
|
||||||
POP {r4, r5, r6, r7, r8, r9, r10, r11, pc}
|
POP {r4, r5, r6, r7, r8, r9, r10, r11, pc}
|
||||||
/* Cycle Count = 742 */
|
/* Cycle Count = 742 */
|
||||||
@@ -3141,16 +3193,16 @@ AES_GCM_encrypt:
|
|||||||
STM r8, {r4, r5, r6, r7}
|
STM r8, {r4, r5, r6, r7}
|
||||||
PUSH {r3, r8}
|
PUSH {r3, r8}
|
||||||
CMP r12, #0xa
|
CMP r12, #0xa
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
BEQ L_AES_GCM_encrypt_start_block_128
|
BEQ L_AES_GCM_encrypt_start_block_128
|
||||||
#else
|
#else
|
||||||
BEQ.N L_AES_GCM_encrypt_start_block_128
|
BEQ.W L_AES_GCM_encrypt_start_block_128
|
||||||
#endif
|
#endif
|
||||||
CMP r12, #0xc
|
CMP r12, #0xc
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
BEQ L_AES_GCM_encrypt_start_block_192
|
BEQ L_AES_GCM_encrypt_start_block_192
|
||||||
#else
|
#else
|
||||||
BEQ.N L_AES_GCM_encrypt_start_block_192
|
BEQ.W L_AES_GCM_encrypt_start_block_192
|
||||||
#endif
|
#endif
|
||||||
L_AES_GCM_encrypt_loop_block_256:
|
L_AES_GCM_encrypt_loop_block_256:
|
||||||
PUSH {r1, r2, lr}
|
PUSH {r1, r2, lr}
|
||||||
@@ -3188,12 +3240,16 @@ L_AES_GCM_encrypt_loop_block_256:
|
|||||||
SUBS r2, r2, #0x10
|
SUBS r2, r2, #0x10
|
||||||
ADD lr, lr, #0x10
|
ADD lr, lr, #0x10
|
||||||
ADD r1, r1, #0x10
|
ADD r1, r1, #0x10
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
BNE L_AES_GCM_encrypt_loop_block_256
|
BNE L_AES_GCM_encrypt_loop_block_256
|
||||||
#else
|
#else
|
||||||
BNE.N L_AES_GCM_encrypt_loop_block_256
|
BNE.W L_AES_GCM_encrypt_loop_block_256
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef __GNUC__
|
||||||
B L_AES_GCM_encrypt_end
|
B L_AES_GCM_encrypt_end
|
||||||
|
#else
|
||||||
|
B.W L_AES_GCM_encrypt_end
|
||||||
|
#endif
|
||||||
L_AES_GCM_encrypt_start_block_192:
|
L_AES_GCM_encrypt_start_block_192:
|
||||||
L_AES_GCM_encrypt_loop_block_192:
|
L_AES_GCM_encrypt_loop_block_192:
|
||||||
PUSH {r1, r2, lr}
|
PUSH {r1, r2, lr}
|
||||||
@@ -3231,12 +3287,16 @@ L_AES_GCM_encrypt_loop_block_192:
|
|||||||
SUBS r2, r2, #0x10
|
SUBS r2, r2, #0x10
|
||||||
ADD lr, lr, #0x10
|
ADD lr, lr, #0x10
|
||||||
ADD r1, r1, #0x10
|
ADD r1, r1, #0x10
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
BNE L_AES_GCM_encrypt_loop_block_192
|
BNE L_AES_GCM_encrypt_loop_block_192
|
||||||
#else
|
#else
|
||||||
BNE.N L_AES_GCM_encrypt_loop_block_192
|
BNE.W L_AES_GCM_encrypt_loop_block_192
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef __GNUC__
|
||||||
B L_AES_GCM_encrypt_end
|
B L_AES_GCM_encrypt_end
|
||||||
|
#else
|
||||||
|
B.W L_AES_GCM_encrypt_end
|
||||||
|
#endif
|
||||||
L_AES_GCM_encrypt_start_block_128:
|
L_AES_GCM_encrypt_start_block_128:
|
||||||
L_AES_GCM_encrypt_loop_block_128:
|
L_AES_GCM_encrypt_loop_block_128:
|
||||||
PUSH {r1, r2, lr}
|
PUSH {r1, r2, lr}
|
||||||
@@ -3274,10 +3334,10 @@ L_AES_GCM_encrypt_loop_block_128:
|
|||||||
SUBS r2, r2, #0x10
|
SUBS r2, r2, #0x10
|
||||||
ADD lr, lr, #0x10
|
ADD lr, lr, #0x10
|
||||||
ADD r1, r1, #0x10
|
ADD r1, r1, #0x10
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
BNE L_AES_GCM_encrypt_loop_block_128
|
BNE L_AES_GCM_encrypt_loop_block_128
|
||||||
#else
|
#else
|
||||||
BNE.N L_AES_GCM_encrypt_loop_block_128
|
BNE.W L_AES_GCM_encrypt_loop_block_128
|
||||||
#endif
|
#endif
|
||||||
L_AES_GCM_encrypt_end:
|
L_AES_GCM_encrypt_end:
|
||||||
POP {r3, r8}
|
POP {r3, r8}
|
||||||
|
@@ -301,18 +301,19 @@ void AES_invert_key(unsigned char* ks, word32 rounds)
|
|||||||
"EOR r8, r8, r9, ROR #24\n\t"
|
"EOR r8, r8, r9, ROR #24\n\t"
|
||||||
"STR r8, [%[ks]], #4\n\t"
|
"STR r8, [%[ks]], #4\n\t"
|
||||||
"SUBS r11, r11, #0x1\n\t"
|
"SUBS r11, r11, #0x1\n\t"
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
"BNE L_AES_invert_key_mix_loop\n\t"
|
"BNE L_AES_invert_key_mix_loop\n\t"
|
||||||
#else
|
#else
|
||||||
"BNE.N L_AES_invert_key_mix_loop\n\t"
|
"BNE.W L_AES_invert_key_mix_loop\n\t"
|
||||||
#endif
|
#endif
|
||||||
: [ks] "+r" (ks), [rounds] "+r" (rounds),
|
|
||||||
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
[L_AES_Thumb2_te] "+r" (L_AES_Thumb2_te_c), [L_AES_Thumb2_td] "+r" (L_AES_Thumb2_td_c)
|
: [ks] "+r" (ks), [rounds] "+r" (rounds),
|
||||||
#else
|
[L_AES_Thumb2_te] "+r" (L_AES_Thumb2_te_c), [L_AES_Thumb2_td] "+r" (L_AES_Thumb2_td_c)
|
||||||
[L_AES_Thumb2_te] "r" (L_AES_Thumb2_te), [L_AES_Thumb2_td] "r" (L_AES_Thumb2_td)
|
|
||||||
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
|
|
||||||
:
|
:
|
||||||
|
#else
|
||||||
|
: [ks] "+r" (ks), [rounds] "+r" (rounds)
|
||||||
|
: [L_AES_Thumb2_te] "r" (L_AES_Thumb2_te), [L_AES_Thumb2_td] "r" (L_AES_Thumb2_td)
|
||||||
|
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
: "memory", "r12", "lr", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11"
|
: "memory", "r12", "lr", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -321,7 +322,7 @@ void AES_invert_key(unsigned char* ks, word32 rounds)
|
|||||||
static const uint32_t L_AES_Thumb2_rcon[] = {
|
static const uint32_t L_AES_Thumb2_rcon[] = {
|
||||||
0x01000000, 0x02000000, 0x04000000, 0x08000000,
|
0x01000000, 0x02000000, 0x04000000, 0x08000000,
|
||||||
0x10000000, 0x20000000, 0x40000000, 0x80000000,
|
0x10000000, 0x20000000, 0x40000000, 0x80000000,
|
||||||
0x1b000000, 0x36000000,
|
0x1b000000, 0x36000000
|
||||||
};
|
};
|
||||||
|
|
||||||
void AES_set_encrypt_key(const unsigned char* key, word32 len,
|
void AES_set_encrypt_key(const unsigned char* key, word32 len,
|
||||||
@@ -344,16 +345,16 @@ void AES_set_encrypt_key(const unsigned char* key, word32 len, unsigned char* ks
|
|||||||
"MOV r10, %[L_AES_Thumb2_te]\n\t"
|
"MOV r10, %[L_AES_Thumb2_te]\n\t"
|
||||||
"MOV lr, %[L_AES_Thumb2_rcon]\n\t"
|
"MOV lr, %[L_AES_Thumb2_rcon]\n\t"
|
||||||
"CMP %[len], #0x80\n\t"
|
"CMP %[len], #0x80\n\t"
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
"BEQ L_AES_set_encrypt_key_start_128\n\t"
|
"BEQ L_AES_set_encrypt_key_start_128\n\t"
|
||||||
#else
|
#else
|
||||||
"BEQ.N L_AES_set_encrypt_key_start_128\n\t"
|
"BEQ.W L_AES_set_encrypt_key_start_128\n\t"
|
||||||
#endif
|
#endif
|
||||||
"CMP %[len], #0xc0\n\t"
|
"CMP %[len], #0xc0\n\t"
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
"BEQ L_AES_set_encrypt_key_start_192\n\t"
|
"BEQ L_AES_set_encrypt_key_start_192\n\t"
|
||||||
#else
|
#else
|
||||||
"BEQ.N L_AES_set_encrypt_key_start_192\n\t"
|
"BEQ.W L_AES_set_encrypt_key_start_192\n\t"
|
||||||
#endif
|
#endif
|
||||||
"LDRD r4, r5, [%[key]]\n\t"
|
"LDRD r4, r5, [%[key]]\n\t"
|
||||||
"LDRD r6, r7, [%[key], #8]\n\t"
|
"LDRD r6, r7, [%[key], #8]\n\t"
|
||||||
@@ -441,7 +442,11 @@ void AES_set_encrypt_key(const unsigned char* key, word32 len, unsigned char* ks
|
|||||||
"ADD %[ks], %[ks], #0x10\n\t"
|
"ADD %[ks], %[ks], #0x10\n\t"
|
||||||
"STM %[ks], {r4, r5, r6, r7}\n\t"
|
"STM %[ks], {r4, r5, r6, r7}\n\t"
|
||||||
"SUB %[ks], %[ks], #0x10\n\t"
|
"SUB %[ks], %[ks], #0x10\n\t"
|
||||||
|
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
||||||
"B L_AES_set_encrypt_key_end\n\t"
|
"B L_AES_set_encrypt_key_end\n\t"
|
||||||
|
#else
|
||||||
|
"B.N L_AES_set_encrypt_key_end\n\t"
|
||||||
|
#endif
|
||||||
"\n"
|
"\n"
|
||||||
"L_AES_set_encrypt_key_start_192:\n\t"
|
"L_AES_set_encrypt_key_start_192:\n\t"
|
||||||
"LDRD r4, r5, [%[key]]\n\t"
|
"LDRD r4, r5, [%[key]]\n\t"
|
||||||
@@ -505,7 +510,11 @@ void AES_set_encrypt_key(const unsigned char* key, word32 len, unsigned char* ks
|
|||||||
"EOR r6, r6, r5\n\t"
|
"EOR r6, r6, r5\n\t"
|
||||||
"EOR r7, r7, r6\n\t"
|
"EOR r7, r7, r6\n\t"
|
||||||
"STM %[ks], {r4, r5, r6, r7}\n\t"
|
"STM %[ks], {r4, r5, r6, r7}\n\t"
|
||||||
|
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
||||||
"B L_AES_set_encrypt_key_end\n\t"
|
"B L_AES_set_encrypt_key_end\n\t"
|
||||||
|
#else
|
||||||
|
"B.N L_AES_set_encrypt_key_end\n\t"
|
||||||
|
#endif
|
||||||
"\n"
|
"\n"
|
||||||
"L_AES_set_encrypt_key_start_128:\n\t"
|
"L_AES_set_encrypt_key_start_128:\n\t"
|
||||||
"LDRD r4, r5, [%[key]]\n\t"
|
"LDRD r4, r5, [%[key]]\n\t"
|
||||||
@@ -545,13 +554,14 @@ void AES_set_encrypt_key(const unsigned char* key, word32 len, unsigned char* ks
|
|||||||
#endif
|
#endif
|
||||||
"\n"
|
"\n"
|
||||||
"L_AES_set_encrypt_key_end:\n\t"
|
"L_AES_set_encrypt_key_end:\n\t"
|
||||||
: [key] "+r" (key), [len] "+r" (len), [ks] "+r" (ks),
|
|
||||||
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
[L_AES_Thumb2_te] "+r" (L_AES_Thumb2_te_c), [L_AES_Thumb2_rcon] "+r" (L_AES_Thumb2_rcon_c)
|
: [key] "+r" (key), [len] "+r" (len), [ks] "+r" (ks),
|
||||||
#else
|
[L_AES_Thumb2_te] "+r" (L_AES_Thumb2_te_c), [L_AES_Thumb2_rcon] "+r" (L_AES_Thumb2_rcon_c)
|
||||||
[L_AES_Thumb2_te] "r" (L_AES_Thumb2_te), [L_AES_Thumb2_rcon] "r" (L_AES_Thumb2_rcon)
|
|
||||||
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
|
|
||||||
:
|
:
|
||||||
|
#else
|
||||||
|
: [key] "+r" (key), [len] "+r" (len), [ks] "+r" (ks)
|
||||||
|
: [L_AES_Thumb2_te] "r" (L_AES_Thumb2_te), [L_AES_Thumb2_rcon] "r" (L_AES_Thumb2_rcon)
|
||||||
|
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
: "memory", "r12", "lr", "r5", "r6", "r7", "r8", "r9", "r10"
|
: "memory", "r12", "lr", "r5", "r6", "r7", "r8", "r9", "r10"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -674,10 +684,10 @@ void AES_encrypt_block(const uint32_t* te, int nr, int len, const uint32_t* ks)
|
|||||||
"EOR r6, r6, r10\n\t"
|
"EOR r6, r6, r10\n\t"
|
||||||
"EOR r7, r7, r11\n\t"
|
"EOR r7, r7, r11\n\t"
|
||||||
"SUBS %[nr], %[nr], #0x1\n\t"
|
"SUBS %[nr], %[nr], #0x1\n\t"
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
"BNE L_AES_encrypt_block_nr\n\t"
|
"BNE L_AES_encrypt_block_nr\n\t"
|
||||||
#else
|
#else
|
||||||
"BNE.N L_AES_encrypt_block_nr\n\t"
|
"BNE.W L_AES_encrypt_block_nr\n\t"
|
||||||
#endif
|
#endif
|
||||||
"UBFX r8, r5, #16, #8\n\t"
|
"UBFX r8, r5, #16, #8\n\t"
|
||||||
"LSR r11, r4, #24\n\t"
|
"LSR r11, r4, #24\n\t"
|
||||||
@@ -809,19 +819,23 @@ void AES_ECB_encrypt(const unsigned char* in, unsigned char* out, unsigned long
|
|||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
"MOV lr, %[in]\n\t"
|
"MOV lr, %[in]\n\t"
|
||||||
"MOV r0, %[L_AES_Thumb2_te_ecb]\n\t"
|
"MOV r0, %[L_AES_Thumb2_te_ecb]\n\t"
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
"MOV r12, r4\n\t"
|
"MOV r12, r4\n\t"
|
||||||
|
#else
|
||||||
|
"LDR r12, [sp, #36]\n\t"
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
"PUSH {%[ks]}\n\t"
|
"PUSH {%[ks]}\n\t"
|
||||||
"CMP r12, #0xa\n\t"
|
"CMP r12, #0xa\n\t"
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
"BEQ L_AES_ECB_encrypt_start_block_128\n\t"
|
"BEQ L_AES_ECB_encrypt_start_block_128\n\t"
|
||||||
#else
|
#else
|
||||||
"BEQ.N L_AES_ECB_encrypt_start_block_128\n\t"
|
"BEQ.W L_AES_ECB_encrypt_start_block_128\n\t"
|
||||||
#endif
|
#endif
|
||||||
"CMP r12, #0xc\n\t"
|
"CMP r12, #0xc\n\t"
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
"BEQ L_AES_ECB_encrypt_start_block_192\n\t"
|
"BEQ L_AES_ECB_encrypt_start_block_192\n\t"
|
||||||
#else
|
#else
|
||||||
"BEQ.N L_AES_ECB_encrypt_start_block_192\n\t"
|
"BEQ.W L_AES_ECB_encrypt_start_block_192\n\t"
|
||||||
#endif
|
#endif
|
||||||
"\n"
|
"\n"
|
||||||
"L_AES_ECB_encrypt_loop_block_256:\n\t"
|
"L_AES_ECB_encrypt_loop_block_256:\n\t"
|
||||||
@@ -855,12 +869,16 @@ void AES_ECB_encrypt(const unsigned char* in, unsigned char* out, unsigned long
|
|||||||
"SUBS %[len], %[len], #0x10\n\t"
|
"SUBS %[len], %[len], #0x10\n\t"
|
||||||
"ADD lr, lr, #0x10\n\t"
|
"ADD lr, lr, #0x10\n\t"
|
||||||
"ADD %[out], %[out], #0x10\n\t"
|
"ADD %[out], %[out], #0x10\n\t"
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
"BNE L_AES_ECB_encrypt_loop_block_256\n\t"
|
"BNE L_AES_ECB_encrypt_loop_block_256\n\t"
|
||||||
#else
|
#else
|
||||||
"BNE.N L_AES_ECB_encrypt_loop_block_256\n\t"
|
"BNE.W L_AES_ECB_encrypt_loop_block_256\n\t"
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
||||||
"B L_AES_ECB_encrypt_end\n\t"
|
"B L_AES_ECB_encrypt_end\n\t"
|
||||||
|
#else
|
||||||
|
"B.N L_AES_ECB_encrypt_end\n\t"
|
||||||
|
#endif
|
||||||
"\n"
|
"\n"
|
||||||
"L_AES_ECB_encrypt_start_block_192:\n\t"
|
"L_AES_ECB_encrypt_start_block_192:\n\t"
|
||||||
"\n"
|
"\n"
|
||||||
@@ -895,12 +913,16 @@ void AES_ECB_encrypt(const unsigned char* in, unsigned char* out, unsigned long
|
|||||||
"SUBS %[len], %[len], #0x10\n\t"
|
"SUBS %[len], %[len], #0x10\n\t"
|
||||||
"ADD lr, lr, #0x10\n\t"
|
"ADD lr, lr, #0x10\n\t"
|
||||||
"ADD %[out], %[out], #0x10\n\t"
|
"ADD %[out], %[out], #0x10\n\t"
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
"BNE L_AES_ECB_encrypt_loop_block_192\n\t"
|
"BNE L_AES_ECB_encrypt_loop_block_192\n\t"
|
||||||
#else
|
#else
|
||||||
"BNE.N L_AES_ECB_encrypt_loop_block_192\n\t"
|
"BNE.W L_AES_ECB_encrypt_loop_block_192\n\t"
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
||||||
"B L_AES_ECB_encrypt_end\n\t"
|
"B L_AES_ECB_encrypt_end\n\t"
|
||||||
|
#else
|
||||||
|
"B.N L_AES_ECB_encrypt_end\n\t"
|
||||||
|
#endif
|
||||||
"\n"
|
"\n"
|
||||||
"L_AES_ECB_encrypt_start_block_128:\n\t"
|
"L_AES_ECB_encrypt_start_block_128:\n\t"
|
||||||
"\n"
|
"\n"
|
||||||
@@ -935,21 +957,22 @@ void AES_ECB_encrypt(const unsigned char* in, unsigned char* out, unsigned long
|
|||||||
"SUBS %[len], %[len], #0x10\n\t"
|
"SUBS %[len], %[len], #0x10\n\t"
|
||||||
"ADD lr, lr, #0x10\n\t"
|
"ADD lr, lr, #0x10\n\t"
|
||||||
"ADD %[out], %[out], #0x10\n\t"
|
"ADD %[out], %[out], #0x10\n\t"
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
"BNE L_AES_ECB_encrypt_loop_block_128\n\t"
|
"BNE L_AES_ECB_encrypt_loop_block_128\n\t"
|
||||||
#else
|
#else
|
||||||
"BNE.N L_AES_ECB_encrypt_loop_block_128\n\t"
|
"BNE.W L_AES_ECB_encrypt_loop_block_128\n\t"
|
||||||
#endif
|
#endif
|
||||||
"\n"
|
"\n"
|
||||||
"L_AES_ECB_encrypt_end:\n\t"
|
"L_AES_ECB_encrypt_end:\n\t"
|
||||||
"POP {%[ks]}\n\t"
|
"POP {%[ks]}\n\t"
|
||||||
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks), [nr] "+r" (nr),
|
|
||||||
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
[L_AES_Thumb2_te_ecb] "+r" (L_AES_Thumb2_te_ecb_c)
|
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks), [nr] "+r" (nr),
|
||||||
#else
|
[L_AES_Thumb2_te_ecb] "+r" (L_AES_Thumb2_te_ecb_c)
|
||||||
[L_AES_Thumb2_te_ecb] "r" (L_AES_Thumb2_te_ecb)
|
|
||||||
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
|
|
||||||
:
|
:
|
||||||
|
#else
|
||||||
|
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks), [nr] "+r" (nr)
|
||||||
|
: [L_AES_Thumb2_te_ecb] "r" (L_AES_Thumb2_te_ecb)
|
||||||
|
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
: "memory", "r12", "lr", "r6", "r7", "r8", "r9", "r10", "r11"
|
: "memory", "r12", "lr", "r6", "r7", "r8", "r9", "r10", "r11"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -975,23 +998,31 @@ void AES_CBC_encrypt(const unsigned char* in, unsigned char* out, unsigned long
|
|||||||
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
"MOV r8, r4\n\t"
|
"MOV r8, r4\n\t"
|
||||||
|
#else
|
||||||
|
"LDR r8, [sp, #36]\n\t"
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
"MOV r9, r5\n\t"
|
"MOV r9, r5\n\t"
|
||||||
|
#else
|
||||||
|
"LDR r9, [sp, #40]\n\t"
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
"MOV lr, %[in]\n\t"
|
"MOV lr, %[in]\n\t"
|
||||||
"MOV r0, %[L_AES_Thumb2_te_ecb]\n\t"
|
"MOV r0, %[L_AES_Thumb2_te_ecb]\n\t"
|
||||||
"LDM r9, {r4, r5, r6, r7}\n\t"
|
"LDM r9, {r4, r5, r6, r7}\n\t"
|
||||||
"PUSH {%[ks], r9}\n\t"
|
"PUSH {%[ks], r9}\n\t"
|
||||||
"CMP r8, #0xa\n\t"
|
"CMP r8, #0xa\n\t"
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
"BEQ L_AES_CBC_encrypt_start_block_128\n\t"
|
"BEQ L_AES_CBC_encrypt_start_block_128\n\t"
|
||||||
#else
|
#else
|
||||||
"BEQ.N L_AES_CBC_encrypt_start_block_128\n\t"
|
"BEQ.W L_AES_CBC_encrypt_start_block_128\n\t"
|
||||||
#endif
|
#endif
|
||||||
"CMP r8, #0xc\n\t"
|
"CMP r8, #0xc\n\t"
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
"BEQ L_AES_CBC_encrypt_start_block_192\n\t"
|
"BEQ L_AES_CBC_encrypt_start_block_192\n\t"
|
||||||
#else
|
#else
|
||||||
"BEQ.N L_AES_CBC_encrypt_start_block_192\n\t"
|
"BEQ.W L_AES_CBC_encrypt_start_block_192\n\t"
|
||||||
#endif
|
#endif
|
||||||
"\n"
|
"\n"
|
||||||
"L_AES_CBC_encrypt_loop_block_256:\n\t"
|
"L_AES_CBC_encrypt_loop_block_256:\n\t"
|
||||||
@@ -1029,12 +1060,16 @@ void AES_CBC_encrypt(const unsigned char* in, unsigned char* out, unsigned long
|
|||||||
"SUBS %[len], %[len], #0x10\n\t"
|
"SUBS %[len], %[len], #0x10\n\t"
|
||||||
"ADD lr, lr, #0x10\n\t"
|
"ADD lr, lr, #0x10\n\t"
|
||||||
"ADD %[out], %[out], #0x10\n\t"
|
"ADD %[out], %[out], #0x10\n\t"
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
"BNE L_AES_CBC_encrypt_loop_block_256\n\t"
|
"BNE L_AES_CBC_encrypt_loop_block_256\n\t"
|
||||||
#else
|
#else
|
||||||
"BNE.N L_AES_CBC_encrypt_loop_block_256\n\t"
|
"BNE.W L_AES_CBC_encrypt_loop_block_256\n\t"
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
||||||
"B L_AES_CBC_encrypt_end\n\t"
|
"B L_AES_CBC_encrypt_end\n\t"
|
||||||
|
#else
|
||||||
|
"B.N L_AES_CBC_encrypt_end\n\t"
|
||||||
|
#endif
|
||||||
"\n"
|
"\n"
|
||||||
"L_AES_CBC_encrypt_start_block_192:\n\t"
|
"L_AES_CBC_encrypt_start_block_192:\n\t"
|
||||||
"\n"
|
"\n"
|
||||||
@@ -1073,12 +1108,16 @@ void AES_CBC_encrypt(const unsigned char* in, unsigned char* out, unsigned long
|
|||||||
"SUBS %[len], %[len], #0x10\n\t"
|
"SUBS %[len], %[len], #0x10\n\t"
|
||||||
"ADD lr, lr, #0x10\n\t"
|
"ADD lr, lr, #0x10\n\t"
|
||||||
"ADD %[out], %[out], #0x10\n\t"
|
"ADD %[out], %[out], #0x10\n\t"
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
"BNE L_AES_CBC_encrypt_loop_block_192\n\t"
|
"BNE L_AES_CBC_encrypt_loop_block_192\n\t"
|
||||||
#else
|
#else
|
||||||
"BNE.N L_AES_CBC_encrypt_loop_block_192\n\t"
|
"BNE.W L_AES_CBC_encrypt_loop_block_192\n\t"
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
||||||
"B L_AES_CBC_encrypt_end\n\t"
|
"B L_AES_CBC_encrypt_end\n\t"
|
||||||
|
#else
|
||||||
|
"B.N L_AES_CBC_encrypt_end\n\t"
|
||||||
|
#endif
|
||||||
"\n"
|
"\n"
|
||||||
"L_AES_CBC_encrypt_start_block_128:\n\t"
|
"L_AES_CBC_encrypt_start_block_128:\n\t"
|
||||||
"\n"
|
"\n"
|
||||||
@@ -1117,22 +1156,23 @@ void AES_CBC_encrypt(const unsigned char* in, unsigned char* out, unsigned long
|
|||||||
"SUBS %[len], %[len], #0x10\n\t"
|
"SUBS %[len], %[len], #0x10\n\t"
|
||||||
"ADD lr, lr, #0x10\n\t"
|
"ADD lr, lr, #0x10\n\t"
|
||||||
"ADD %[out], %[out], #0x10\n\t"
|
"ADD %[out], %[out], #0x10\n\t"
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
"BNE L_AES_CBC_encrypt_loop_block_128\n\t"
|
"BNE L_AES_CBC_encrypt_loop_block_128\n\t"
|
||||||
#else
|
#else
|
||||||
"BNE.N L_AES_CBC_encrypt_loop_block_128\n\t"
|
"BNE.W L_AES_CBC_encrypt_loop_block_128\n\t"
|
||||||
#endif
|
#endif
|
||||||
"\n"
|
"\n"
|
||||||
"L_AES_CBC_encrypt_end:\n\t"
|
"L_AES_CBC_encrypt_end:\n\t"
|
||||||
"POP {%[ks], r9}\n\t"
|
"POP {%[ks], r9}\n\t"
|
||||||
"STM r9, {r4, r5, r6, r7}\n\t"
|
"STM r9, {r4, r5, r6, r7}\n\t"
|
||||||
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks), [nr] "+r" (nr), [iv] "+r" (iv),
|
|
||||||
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
[L_AES_Thumb2_te_ecb] "+r" (L_AES_Thumb2_te_ecb_c)
|
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks), [nr] "+r" (nr), [iv] "+r" (iv),
|
||||||
#else
|
[L_AES_Thumb2_te_ecb] "+r" (L_AES_Thumb2_te_ecb_c)
|
||||||
[L_AES_Thumb2_te_ecb] "r" (L_AES_Thumb2_te_ecb)
|
|
||||||
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
|
|
||||||
:
|
:
|
||||||
|
#else
|
||||||
|
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks), [nr] "+r" (nr), [iv] "+r" (iv)
|
||||||
|
: [L_AES_Thumb2_te_ecb] "r" (L_AES_Thumb2_te_ecb)
|
||||||
|
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
: "memory", "r12", "lr", "r7", "r8", "r9", "r10", "r11"
|
: "memory", "r12", "lr", "r7", "r8", "r9", "r10", "r11"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -1158,8 +1198,16 @@ void AES_CTR_encrypt(const unsigned char* in, unsigned char* out, unsigned long
|
|||||||
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
"MOV r12, r4\n\t"
|
"MOV r12, r4\n\t"
|
||||||
|
#else
|
||||||
|
"LDR r12, [sp, #36]\n\t"
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
"MOV r8, r5\n\t"
|
"MOV r8, r5\n\t"
|
||||||
|
#else
|
||||||
|
"LDR r8, [sp, #40]\n\t"
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
"MOV lr, %[in]\n\t"
|
"MOV lr, %[in]\n\t"
|
||||||
"MOV r0, %[L_AES_Thumb2_te_ecb]\n\t"
|
"MOV r0, %[L_AES_Thumb2_te_ecb]\n\t"
|
||||||
"LDM r8, {r4, r5, r6, r7}\n\t"
|
"LDM r8, {r4, r5, r6, r7}\n\t"
|
||||||
@@ -1170,16 +1218,16 @@ void AES_CTR_encrypt(const unsigned char* in, unsigned char* out, unsigned long
|
|||||||
"STM r8, {r4, r5, r6, r7}\n\t"
|
"STM r8, {r4, r5, r6, r7}\n\t"
|
||||||
"PUSH {%[ks], r8}\n\t"
|
"PUSH {%[ks], r8}\n\t"
|
||||||
"CMP r12, #0xa\n\t"
|
"CMP r12, #0xa\n\t"
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
"BEQ L_AES_CTR_encrypt_start_block_128\n\t"
|
"BEQ L_AES_CTR_encrypt_start_block_128\n\t"
|
||||||
#else
|
#else
|
||||||
"BEQ.N L_AES_CTR_encrypt_start_block_128\n\t"
|
"BEQ.W L_AES_CTR_encrypt_start_block_128\n\t"
|
||||||
#endif
|
#endif
|
||||||
"CMP r12, #0xc\n\t"
|
"CMP r12, #0xc\n\t"
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
"BEQ L_AES_CTR_encrypt_start_block_192\n\t"
|
"BEQ L_AES_CTR_encrypt_start_block_192\n\t"
|
||||||
#else
|
#else
|
||||||
"BEQ.N L_AES_CTR_encrypt_start_block_192\n\t"
|
"BEQ.W L_AES_CTR_encrypt_start_block_192\n\t"
|
||||||
#endif
|
#endif
|
||||||
"\n"
|
"\n"
|
||||||
"L_AES_CTR_encrypt_loop_block_256:\n\t"
|
"L_AES_CTR_encrypt_loop_block_256:\n\t"
|
||||||
@@ -1221,12 +1269,16 @@ void AES_CTR_encrypt(const unsigned char* in, unsigned char* out, unsigned long
|
|||||||
"SUBS %[len], %[len], #0x10\n\t"
|
"SUBS %[len], %[len], #0x10\n\t"
|
||||||
"ADD lr, lr, #0x10\n\t"
|
"ADD lr, lr, #0x10\n\t"
|
||||||
"ADD %[out], %[out], #0x10\n\t"
|
"ADD %[out], %[out], #0x10\n\t"
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
"BNE L_AES_CTR_encrypt_loop_block_256\n\t"
|
"BNE L_AES_CTR_encrypt_loop_block_256\n\t"
|
||||||
#else
|
#else
|
||||||
"BNE.N L_AES_CTR_encrypt_loop_block_256\n\t"
|
"BNE.W L_AES_CTR_encrypt_loop_block_256\n\t"
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef __GNUC__
|
||||||
"B L_AES_CTR_encrypt_end\n\t"
|
"B L_AES_CTR_encrypt_end\n\t"
|
||||||
|
#else
|
||||||
|
"B.W L_AES_CTR_encrypt_end\n\t"
|
||||||
|
#endif
|
||||||
"\n"
|
"\n"
|
||||||
"L_AES_CTR_encrypt_start_block_192:\n\t"
|
"L_AES_CTR_encrypt_start_block_192:\n\t"
|
||||||
"\n"
|
"\n"
|
||||||
@@ -1269,12 +1321,16 @@ void AES_CTR_encrypt(const unsigned char* in, unsigned char* out, unsigned long
|
|||||||
"SUBS %[len], %[len], #0x10\n\t"
|
"SUBS %[len], %[len], #0x10\n\t"
|
||||||
"ADD lr, lr, #0x10\n\t"
|
"ADD lr, lr, #0x10\n\t"
|
||||||
"ADD %[out], %[out], #0x10\n\t"
|
"ADD %[out], %[out], #0x10\n\t"
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
"BNE L_AES_CTR_encrypt_loop_block_192\n\t"
|
"BNE L_AES_CTR_encrypt_loop_block_192\n\t"
|
||||||
#else
|
#else
|
||||||
"BNE.N L_AES_CTR_encrypt_loop_block_192\n\t"
|
"BNE.W L_AES_CTR_encrypt_loop_block_192\n\t"
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef __GNUC__
|
||||||
"B L_AES_CTR_encrypt_end\n\t"
|
"B L_AES_CTR_encrypt_end\n\t"
|
||||||
|
#else
|
||||||
|
"B.W L_AES_CTR_encrypt_end\n\t"
|
||||||
|
#endif
|
||||||
"\n"
|
"\n"
|
||||||
"L_AES_CTR_encrypt_start_block_128:\n\t"
|
"L_AES_CTR_encrypt_start_block_128:\n\t"
|
||||||
"\n"
|
"\n"
|
||||||
@@ -1317,10 +1373,10 @@ void AES_CTR_encrypt(const unsigned char* in, unsigned char* out, unsigned long
|
|||||||
"SUBS %[len], %[len], #0x10\n\t"
|
"SUBS %[len], %[len], #0x10\n\t"
|
||||||
"ADD lr, lr, #0x10\n\t"
|
"ADD lr, lr, #0x10\n\t"
|
||||||
"ADD %[out], %[out], #0x10\n\t"
|
"ADD %[out], %[out], #0x10\n\t"
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
"BNE L_AES_CTR_encrypt_loop_block_128\n\t"
|
"BNE L_AES_CTR_encrypt_loop_block_128\n\t"
|
||||||
#else
|
#else
|
||||||
"BNE.N L_AES_CTR_encrypt_loop_block_128\n\t"
|
"BNE.W L_AES_CTR_encrypt_loop_block_128\n\t"
|
||||||
#endif
|
#endif
|
||||||
"\n"
|
"\n"
|
||||||
"L_AES_CTR_encrypt_end:\n\t"
|
"L_AES_CTR_encrypt_end:\n\t"
|
||||||
@@ -1330,13 +1386,14 @@ void AES_CTR_encrypt(const unsigned char* in, unsigned char* out, unsigned long
|
|||||||
"REV r6, r6\n\t"
|
"REV r6, r6\n\t"
|
||||||
"REV r7, r7\n\t"
|
"REV r7, r7\n\t"
|
||||||
"STM r8, {r4, r5, r6, r7}\n\t"
|
"STM r8, {r4, r5, r6, r7}\n\t"
|
||||||
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks), [nr] "+r" (nr), [ctr] "+r" (ctr),
|
|
||||||
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
[L_AES_Thumb2_te_ecb] "+r" (L_AES_Thumb2_te_ecb_c)
|
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks), [nr] "+r" (nr), [ctr] "+r" (ctr),
|
||||||
#else
|
[L_AES_Thumb2_te_ecb] "+r" (L_AES_Thumb2_te_ecb_c)
|
||||||
[L_AES_Thumb2_te_ecb] "r" (L_AES_Thumb2_te_ecb)
|
|
||||||
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
|
|
||||||
:
|
:
|
||||||
|
#else
|
||||||
|
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks), [nr] "+r" (nr), [ctr] "+r" (ctr)
|
||||||
|
: [L_AES_Thumb2_te_ecb] "r" (L_AES_Thumb2_te_ecb)
|
||||||
|
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
: "memory", "r12", "lr", "r7", "r8", "r9", "r10", "r11"
|
: "memory", "r12", "lr", "r7", "r8", "r9", "r10", "r11"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -1461,10 +1518,10 @@ void AES_decrypt_block(const uint32_t* td, int nr, const uint8_t* td4)
|
|||||||
"EOR r6, r6, r10\n\t"
|
"EOR r6, r6, r10\n\t"
|
||||||
"EOR r7, r7, r11\n\t"
|
"EOR r7, r7, r11\n\t"
|
||||||
"SUBS %[nr], %[nr], #0x1\n\t"
|
"SUBS %[nr], %[nr], #0x1\n\t"
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
"BNE L_AES_decrypt_block_nr\n\t"
|
"BNE L_AES_decrypt_block_nr\n\t"
|
||||||
#else
|
#else
|
||||||
"BNE.N L_AES_decrypt_block_nr\n\t"
|
"BNE.W L_AES_decrypt_block_nr\n\t"
|
||||||
#endif
|
#endif
|
||||||
"UBFX r8, r7, #16, #8\n\t"
|
"UBFX r8, r7, #16, #8\n\t"
|
||||||
"LSR r11, r4, #24\n\t"
|
"LSR r11, r4, #24\n\t"
|
||||||
@@ -1628,22 +1685,26 @@ void AES_ECB_decrypt(const unsigned char* in, unsigned char* out, unsigned long
|
|||||||
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
"MOV r8, r4\n\t"
|
"MOV r8, r4\n\t"
|
||||||
|
#else
|
||||||
|
"LDR r8, [sp, #36]\n\t"
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
"MOV lr, %[in]\n\t"
|
"MOV lr, %[in]\n\t"
|
||||||
"MOV r0, %[L_AES_Thumb2_td_ecb]\n\t"
|
"MOV r0, %[L_AES_Thumb2_td_ecb]\n\t"
|
||||||
"MOV r12, %[len]\n\t"
|
"MOV r12, %[len]\n\t"
|
||||||
"MOV r2, %[L_AES_Thumb2_td4]\n\t"
|
"MOV r2, %[L_AES_Thumb2_td4]\n\t"
|
||||||
"CMP r8, #0xa\n\t"
|
"CMP r8, #0xa\n\t"
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
"BEQ L_AES_ECB_decrypt_start_block_128\n\t"
|
"BEQ L_AES_ECB_decrypt_start_block_128\n\t"
|
||||||
#else
|
#else
|
||||||
"BEQ.N L_AES_ECB_decrypt_start_block_128\n\t"
|
"BEQ.W L_AES_ECB_decrypt_start_block_128\n\t"
|
||||||
#endif
|
#endif
|
||||||
"CMP r8, #0xc\n\t"
|
"CMP r8, #0xc\n\t"
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
"BEQ L_AES_ECB_decrypt_start_block_192\n\t"
|
"BEQ L_AES_ECB_decrypt_start_block_192\n\t"
|
||||||
#else
|
#else
|
||||||
"BEQ.N L_AES_ECB_decrypt_start_block_192\n\t"
|
"BEQ.W L_AES_ECB_decrypt_start_block_192\n\t"
|
||||||
#endif
|
#endif
|
||||||
"\n"
|
"\n"
|
||||||
"L_AES_ECB_decrypt_loop_block_256:\n\t"
|
"L_AES_ECB_decrypt_loop_block_256:\n\t"
|
||||||
@@ -1676,12 +1737,16 @@ void AES_ECB_decrypt(const unsigned char* in, unsigned char* out, unsigned long
|
|||||||
"SUBS r12, r12, #0x10\n\t"
|
"SUBS r12, r12, #0x10\n\t"
|
||||||
"ADD lr, lr, #0x10\n\t"
|
"ADD lr, lr, #0x10\n\t"
|
||||||
"ADD %[out], %[out], #0x10\n\t"
|
"ADD %[out], %[out], #0x10\n\t"
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
"BNE L_AES_ECB_decrypt_loop_block_256\n\t"
|
"BNE L_AES_ECB_decrypt_loop_block_256\n\t"
|
||||||
#else
|
#else
|
||||||
"BNE.N L_AES_ECB_decrypt_loop_block_256\n\t"
|
"BNE.W L_AES_ECB_decrypt_loop_block_256\n\t"
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
||||||
"B L_AES_ECB_decrypt_end\n\t"
|
"B L_AES_ECB_decrypt_end\n\t"
|
||||||
|
#else
|
||||||
|
"B.N L_AES_ECB_decrypt_end\n\t"
|
||||||
|
#endif
|
||||||
"\n"
|
"\n"
|
||||||
"L_AES_ECB_decrypt_start_block_192:\n\t"
|
"L_AES_ECB_decrypt_start_block_192:\n\t"
|
||||||
"\n"
|
"\n"
|
||||||
@@ -1715,12 +1780,16 @@ void AES_ECB_decrypt(const unsigned char* in, unsigned char* out, unsigned long
|
|||||||
"SUBS r12, r12, #0x10\n\t"
|
"SUBS r12, r12, #0x10\n\t"
|
||||||
"ADD lr, lr, #0x10\n\t"
|
"ADD lr, lr, #0x10\n\t"
|
||||||
"ADD %[out], %[out], #0x10\n\t"
|
"ADD %[out], %[out], #0x10\n\t"
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
"BNE L_AES_ECB_decrypt_loop_block_192\n\t"
|
"BNE L_AES_ECB_decrypt_loop_block_192\n\t"
|
||||||
#else
|
#else
|
||||||
"BNE.N L_AES_ECB_decrypt_loop_block_192\n\t"
|
"BNE.W L_AES_ECB_decrypt_loop_block_192\n\t"
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
||||||
"B L_AES_ECB_decrypt_end\n\t"
|
"B L_AES_ECB_decrypt_end\n\t"
|
||||||
|
#else
|
||||||
|
"B.N L_AES_ECB_decrypt_end\n\t"
|
||||||
|
#endif
|
||||||
"\n"
|
"\n"
|
||||||
"L_AES_ECB_decrypt_start_block_128:\n\t"
|
"L_AES_ECB_decrypt_start_block_128:\n\t"
|
||||||
"\n"
|
"\n"
|
||||||
@@ -1754,20 +1823,21 @@ void AES_ECB_decrypt(const unsigned char* in, unsigned char* out, unsigned long
|
|||||||
"SUBS r12, r12, #0x10\n\t"
|
"SUBS r12, r12, #0x10\n\t"
|
||||||
"ADD lr, lr, #0x10\n\t"
|
"ADD lr, lr, #0x10\n\t"
|
||||||
"ADD %[out], %[out], #0x10\n\t"
|
"ADD %[out], %[out], #0x10\n\t"
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
"BNE L_AES_ECB_decrypt_loop_block_128\n\t"
|
"BNE L_AES_ECB_decrypt_loop_block_128\n\t"
|
||||||
#else
|
#else
|
||||||
"BNE.N L_AES_ECB_decrypt_loop_block_128\n\t"
|
"BNE.W L_AES_ECB_decrypt_loop_block_128\n\t"
|
||||||
#endif
|
#endif
|
||||||
"\n"
|
"\n"
|
||||||
"L_AES_ECB_decrypt_end:\n\t"
|
"L_AES_ECB_decrypt_end:\n\t"
|
||||||
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks), [nr] "+r" (nr),
|
|
||||||
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
[L_AES_Thumb2_td_ecb] "+r" (L_AES_Thumb2_td_ecb_c), [L_AES_Thumb2_td4] "+r" (L_AES_Thumb2_td4_c)
|
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks), [nr] "+r" (nr),
|
||||||
#else
|
[L_AES_Thumb2_td_ecb] "+r" (L_AES_Thumb2_td_ecb_c), [L_AES_Thumb2_td4] "+r" (L_AES_Thumb2_td4_c)
|
||||||
[L_AES_Thumb2_td_ecb] "r" (L_AES_Thumb2_td_ecb), [L_AES_Thumb2_td4] "r" (L_AES_Thumb2_td4)
|
|
||||||
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
|
|
||||||
:
|
:
|
||||||
|
#else
|
||||||
|
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks), [nr] "+r" (nr)
|
||||||
|
: [L_AES_Thumb2_td_ecb] "r" (L_AES_Thumb2_td_ecb), [L_AES_Thumb2_td4] "r" (L_AES_Thumb2_td4)
|
||||||
|
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
: "memory", "r12", "lr", "r7", "r8", "r9", "r10", "r11"
|
: "memory", "r12", "lr", "r7", "r8", "r9", "r10", "r11"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -1794,24 +1864,32 @@ void AES_CBC_decrypt(const unsigned char* in, unsigned char* out, unsigned long
|
|||||||
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
"MOV r8, r4\n\t"
|
"MOV r8, r4\n\t"
|
||||||
|
#else
|
||||||
|
"LDR r8, [sp, #36]\n\t"
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
"MOV r4, r5\n\t"
|
"MOV r4, r5\n\t"
|
||||||
|
#else
|
||||||
|
"LDR r4, [sp, #40]\n\t"
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
"MOV lr, %[in]\n\t"
|
"MOV lr, %[in]\n\t"
|
||||||
"MOV r0, %[L_AES_Thumb2_td_ecb]\n\t"
|
"MOV r0, %[L_AES_Thumb2_td_ecb]\n\t"
|
||||||
"MOV r12, %[len]\n\t"
|
"MOV r12, %[len]\n\t"
|
||||||
"MOV r2, %[L_AES_Thumb2_td4]\n\t"
|
"MOV r2, %[L_AES_Thumb2_td4]\n\t"
|
||||||
"PUSH {%[ks], r4}\n\t"
|
"PUSH {%[ks], r4}\n\t"
|
||||||
"CMP r8, #0xa\n\t"
|
"CMP r8, #0xa\n\t"
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
"BEQ L_AES_CBC_decrypt_loop_block_128\n\t"
|
"BEQ L_AES_CBC_decrypt_loop_block_128\n\t"
|
||||||
#else
|
#else
|
||||||
"BEQ.N L_AES_CBC_decrypt_loop_block_128\n\t"
|
"BEQ.W L_AES_CBC_decrypt_loop_block_128\n\t"
|
||||||
#endif
|
#endif
|
||||||
"CMP r8, #0xc\n\t"
|
"CMP r8, #0xc\n\t"
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
"BEQ L_AES_CBC_decrypt_loop_block_192\n\t"
|
"BEQ L_AES_CBC_decrypt_loop_block_192\n\t"
|
||||||
#else
|
#else
|
||||||
"BEQ.N L_AES_CBC_decrypt_loop_block_192\n\t"
|
"BEQ.W L_AES_CBC_decrypt_loop_block_192\n\t"
|
||||||
#endif
|
#endif
|
||||||
"\n"
|
"\n"
|
||||||
"L_AES_CBC_decrypt_loop_block_256:\n\t"
|
"L_AES_CBC_decrypt_loop_block_256:\n\t"
|
||||||
@@ -1854,10 +1932,10 @@ void AES_CBC_decrypt(const unsigned char* in, unsigned char* out, unsigned long
|
|||||||
"SUBS r12, r12, #0x10\n\t"
|
"SUBS r12, r12, #0x10\n\t"
|
||||||
"ADD lr, lr, #0x10\n\t"
|
"ADD lr, lr, #0x10\n\t"
|
||||||
"ADD %[out], %[out], #0x10\n\t"
|
"ADD %[out], %[out], #0x10\n\t"
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
"BEQ L_AES_CBC_decrypt_end_odd\n\t"
|
"BEQ L_AES_CBC_decrypt_end_odd\n\t"
|
||||||
#else
|
#else
|
||||||
"BEQ.N L_AES_CBC_decrypt_end_odd\n\t"
|
"BEQ.W L_AES_CBC_decrypt_end_odd\n\t"
|
||||||
#endif
|
#endif
|
||||||
"PUSH {r1, r12, lr}\n\t"
|
"PUSH {r1, r12, lr}\n\t"
|
||||||
"LDR r4, [lr]\n\t"
|
"LDR r4, [lr]\n\t"
|
||||||
@@ -1899,12 +1977,16 @@ void AES_CBC_decrypt(const unsigned char* in, unsigned char* out, unsigned long
|
|||||||
"SUBS r12, r12, #0x10\n\t"
|
"SUBS r12, r12, #0x10\n\t"
|
||||||
"ADD lr, lr, #0x10\n\t"
|
"ADD lr, lr, #0x10\n\t"
|
||||||
"ADD %[out], %[out], #0x10\n\t"
|
"ADD %[out], %[out], #0x10\n\t"
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
"BNE L_AES_CBC_decrypt_loop_block_256\n\t"
|
"BNE L_AES_CBC_decrypt_loop_block_256\n\t"
|
||||||
#else
|
#else
|
||||||
"BNE.N L_AES_CBC_decrypt_loop_block_256\n\t"
|
"BNE.W L_AES_CBC_decrypt_loop_block_256\n\t"
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef __GNUC__
|
||||||
"B L_AES_CBC_decrypt_end\n\t"
|
"B L_AES_CBC_decrypt_end\n\t"
|
||||||
|
#else
|
||||||
|
"B.W L_AES_CBC_decrypt_end\n\t"
|
||||||
|
#endif
|
||||||
"\n"
|
"\n"
|
||||||
"L_AES_CBC_decrypt_loop_block_192:\n\t"
|
"L_AES_CBC_decrypt_loop_block_192:\n\t"
|
||||||
"PUSH {r1, r12, lr}\n\t"
|
"PUSH {r1, r12, lr}\n\t"
|
||||||
@@ -1946,10 +2028,10 @@ void AES_CBC_decrypt(const unsigned char* in, unsigned char* out, unsigned long
|
|||||||
"SUBS r12, r12, #0x10\n\t"
|
"SUBS r12, r12, #0x10\n\t"
|
||||||
"ADD lr, lr, #0x10\n\t"
|
"ADD lr, lr, #0x10\n\t"
|
||||||
"ADD %[out], %[out], #0x10\n\t"
|
"ADD %[out], %[out], #0x10\n\t"
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
"BEQ L_AES_CBC_decrypt_end_odd\n\t"
|
"BEQ L_AES_CBC_decrypt_end_odd\n\t"
|
||||||
#else
|
#else
|
||||||
"BEQ.N L_AES_CBC_decrypt_end_odd\n\t"
|
"BEQ.W L_AES_CBC_decrypt_end_odd\n\t"
|
||||||
#endif
|
#endif
|
||||||
"PUSH {r1, r12, lr}\n\t"
|
"PUSH {r1, r12, lr}\n\t"
|
||||||
"LDR r4, [lr]\n\t"
|
"LDR r4, [lr]\n\t"
|
||||||
@@ -1991,12 +2073,16 @@ void AES_CBC_decrypt(const unsigned char* in, unsigned char* out, unsigned long
|
|||||||
"SUBS r12, r12, #0x10\n\t"
|
"SUBS r12, r12, #0x10\n\t"
|
||||||
"ADD lr, lr, #0x10\n\t"
|
"ADD lr, lr, #0x10\n\t"
|
||||||
"ADD %[out], %[out], #0x10\n\t"
|
"ADD %[out], %[out], #0x10\n\t"
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
"BNE L_AES_CBC_decrypt_loop_block_192\n\t"
|
"BNE L_AES_CBC_decrypt_loop_block_192\n\t"
|
||||||
#else
|
#else
|
||||||
"BNE.N L_AES_CBC_decrypt_loop_block_192\n\t"
|
"BNE.W L_AES_CBC_decrypt_loop_block_192\n\t"
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef __GNUC__
|
||||||
"B L_AES_CBC_decrypt_end\n\t"
|
"B L_AES_CBC_decrypt_end\n\t"
|
||||||
|
#else
|
||||||
|
"B.W L_AES_CBC_decrypt_end\n\t"
|
||||||
|
#endif
|
||||||
"\n"
|
"\n"
|
||||||
"L_AES_CBC_decrypt_loop_block_128:\n\t"
|
"L_AES_CBC_decrypt_loop_block_128:\n\t"
|
||||||
"PUSH {r1, r12, lr}\n\t"
|
"PUSH {r1, r12, lr}\n\t"
|
||||||
@@ -2038,10 +2124,10 @@ void AES_CBC_decrypt(const unsigned char* in, unsigned char* out, unsigned long
|
|||||||
"SUBS r12, r12, #0x10\n\t"
|
"SUBS r12, r12, #0x10\n\t"
|
||||||
"ADD lr, lr, #0x10\n\t"
|
"ADD lr, lr, #0x10\n\t"
|
||||||
"ADD %[out], %[out], #0x10\n\t"
|
"ADD %[out], %[out], #0x10\n\t"
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
"BEQ L_AES_CBC_decrypt_end_odd\n\t"
|
"BEQ L_AES_CBC_decrypt_end_odd\n\t"
|
||||||
#else
|
#else
|
||||||
"BEQ.N L_AES_CBC_decrypt_end_odd\n\t"
|
"BEQ.W L_AES_CBC_decrypt_end_odd\n\t"
|
||||||
#endif
|
#endif
|
||||||
"PUSH {r1, r12, lr}\n\t"
|
"PUSH {r1, r12, lr}\n\t"
|
||||||
"LDR r4, [lr]\n\t"
|
"LDR r4, [lr]\n\t"
|
||||||
@@ -2083,12 +2169,16 @@ void AES_CBC_decrypt(const unsigned char* in, unsigned char* out, unsigned long
|
|||||||
"SUBS r12, r12, #0x10\n\t"
|
"SUBS r12, r12, #0x10\n\t"
|
||||||
"ADD lr, lr, #0x10\n\t"
|
"ADD lr, lr, #0x10\n\t"
|
||||||
"ADD %[out], %[out], #0x10\n\t"
|
"ADD %[out], %[out], #0x10\n\t"
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
"BNE L_AES_CBC_decrypt_loop_block_128\n\t"
|
"BNE L_AES_CBC_decrypt_loop_block_128\n\t"
|
||||||
#else
|
#else
|
||||||
"BNE.N L_AES_CBC_decrypt_loop_block_128\n\t"
|
"BNE.W L_AES_CBC_decrypt_loop_block_128\n\t"
|
||||||
#endif
|
#endif
|
||||||
|
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
||||||
"B L_AES_CBC_decrypt_end\n\t"
|
"B L_AES_CBC_decrypt_end\n\t"
|
||||||
|
#else
|
||||||
|
"B.N L_AES_CBC_decrypt_end\n\t"
|
||||||
|
#endif
|
||||||
"\n"
|
"\n"
|
||||||
"L_AES_CBC_decrypt_end_odd:\n\t"
|
"L_AES_CBC_decrypt_end_odd:\n\t"
|
||||||
"LDR r4, [sp, #4]\n\t"
|
"LDR r4, [sp, #4]\n\t"
|
||||||
@@ -2099,13 +2189,14 @@ void AES_CBC_decrypt(const unsigned char* in, unsigned char* out, unsigned long
|
|||||||
"\n"
|
"\n"
|
||||||
"L_AES_CBC_decrypt_end:\n\t"
|
"L_AES_CBC_decrypt_end:\n\t"
|
||||||
"POP {%[ks], r4}\n\t"
|
"POP {%[ks], r4}\n\t"
|
||||||
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks), [nr] "+r" (nr), [iv] "+r" (iv),
|
|
||||||
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
[L_AES_Thumb2_td_ecb] "+r" (L_AES_Thumb2_td_ecb_c), [L_AES_Thumb2_td4] "+r" (L_AES_Thumb2_td4_c)
|
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks), [nr] "+r" (nr), [iv] "+r" (iv),
|
||||||
#else
|
[L_AES_Thumb2_td_ecb] "+r" (L_AES_Thumb2_td_ecb_c), [L_AES_Thumb2_td4] "+r" (L_AES_Thumb2_td4_c)
|
||||||
[L_AES_Thumb2_td_ecb] "r" (L_AES_Thumb2_td_ecb), [L_AES_Thumb2_td4] "r" (L_AES_Thumb2_td4)
|
|
||||||
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
|
|
||||||
:
|
:
|
||||||
|
#else
|
||||||
|
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks), [nr] "+r" (nr), [iv] "+r" (iv)
|
||||||
|
: [L_AES_Thumb2_td_ecb] "r" (L_AES_Thumb2_td_ecb), [L_AES_Thumb2_td4] "r" (L_AES_Thumb2_td4)
|
||||||
|
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
: "memory", "r12", "lr", "r8", "r9", "r10", "r11"
|
: "memory", "r12", "lr", "r8", "r9", "r10", "r11"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -2685,18 +2776,19 @@ void GCM_gmult_len(unsigned char* x, const unsigned char** m, const unsigned cha
|
|||||||
"POP {r3}\n\t"
|
"POP {r3}\n\t"
|
||||||
"SUBS %[len], %[len], #0x10\n\t"
|
"SUBS %[len], %[len], #0x10\n\t"
|
||||||
"ADD %[data], %[data], #0x10\n\t"
|
"ADD %[data], %[data], #0x10\n\t"
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
"BNE L_GCM_gmult_len_start_block\n\t"
|
"BNE L_GCM_gmult_len_start_block\n\t"
|
||||||
#else
|
#else
|
||||||
"BNE.N L_GCM_gmult_len_start_block\n\t"
|
"BNE.W L_GCM_gmult_len_start_block\n\t"
|
||||||
#endif
|
#endif
|
||||||
: [x] "+r" (x), [m] "+r" (m), [data] "+r" (data), [len] "+r" (len),
|
|
||||||
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
[L_GCM_gmult_len_r] "+r" (L_GCM_gmult_len_r_c)
|
: [x] "+r" (x), [m] "+r" (m), [data] "+r" (data), [len] "+r" (len),
|
||||||
#else
|
[L_GCM_gmult_len_r] "+r" (L_GCM_gmult_len_r_c)
|
||||||
[L_GCM_gmult_len_r] "r" (L_GCM_gmult_len_r)
|
|
||||||
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
|
|
||||||
:
|
:
|
||||||
|
#else
|
||||||
|
: [x] "+r" (x), [m] "+r" (m), [data] "+r" (data), [len] "+r" (len)
|
||||||
|
: [L_GCM_gmult_len_r] "r" (L_GCM_gmult_len_r)
|
||||||
|
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
: "memory", "r12", "lr", "r5", "r6", "r7", "r8", "r9", "r10", "r11"
|
: "memory", "r12", "lr", "r5", "r6", "r7", "r8", "r9", "r10", "r11"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -2721,8 +2813,16 @@ void AES_GCM_encrypt(const unsigned char* in, unsigned char* out, unsigned long
|
|||||||
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
|
||||||
__asm__ __volatile__ (
|
__asm__ __volatile__ (
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
"MOV r12, r4\n\t"
|
"MOV r12, r4\n\t"
|
||||||
|
#else
|
||||||
|
"LDR r12, [sp, #36]\n\t"
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
"MOV r8, r5\n\t"
|
"MOV r8, r5\n\t"
|
||||||
|
#else
|
||||||
|
"LDR r8, [sp, #40]\n\t"
|
||||||
|
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
"MOV lr, %[in]\n\t"
|
"MOV lr, %[in]\n\t"
|
||||||
"MOV r0, %[L_AES_Thumb2_te_gcm]\n\t"
|
"MOV r0, %[L_AES_Thumb2_te_gcm]\n\t"
|
||||||
"LDM r8, {r4, r5, r6, r7}\n\t"
|
"LDM r8, {r4, r5, r6, r7}\n\t"
|
||||||
@@ -2733,16 +2833,16 @@ void AES_GCM_encrypt(const unsigned char* in, unsigned char* out, unsigned long
|
|||||||
"STM r8, {r4, r5, r6, r7}\n\t"
|
"STM r8, {r4, r5, r6, r7}\n\t"
|
||||||
"PUSH {%[ks], r8}\n\t"
|
"PUSH {%[ks], r8}\n\t"
|
||||||
"CMP r12, #0xa\n\t"
|
"CMP r12, #0xa\n\t"
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
"BEQ L_AES_GCM_encrypt_start_block_128\n\t"
|
"BEQ L_AES_GCM_encrypt_start_block_128\n\t"
|
||||||
#else
|
#else
|
||||||
"BEQ.N L_AES_GCM_encrypt_start_block_128\n\t"
|
"BEQ.W L_AES_GCM_encrypt_start_block_128\n\t"
|
||||||
#endif
|
#endif
|
||||||
"CMP r12, #0xc\n\t"
|
"CMP r12, #0xc\n\t"
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
"BEQ L_AES_GCM_encrypt_start_block_192\n\t"
|
"BEQ L_AES_GCM_encrypt_start_block_192\n\t"
|
||||||
#else
|
#else
|
||||||
"BEQ.N L_AES_GCM_encrypt_start_block_192\n\t"
|
"BEQ.W L_AES_GCM_encrypt_start_block_192\n\t"
|
||||||
#endif
|
#endif
|
||||||
"\n"
|
"\n"
|
||||||
"L_AES_GCM_encrypt_loop_block_256:\n\t"
|
"L_AES_GCM_encrypt_loop_block_256:\n\t"
|
||||||
@@ -2781,12 +2881,16 @@ void AES_GCM_encrypt(const unsigned char* in, unsigned char* out, unsigned long
|
|||||||
"SUBS %[len], %[len], #0x10\n\t"
|
"SUBS %[len], %[len], #0x10\n\t"
|
||||||
"ADD lr, lr, #0x10\n\t"
|
"ADD lr, lr, #0x10\n\t"
|
||||||
"ADD %[out], %[out], #0x10\n\t"
|
"ADD %[out], %[out], #0x10\n\t"
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
"BNE L_AES_GCM_encrypt_loop_block_256\n\t"
|
"BNE L_AES_GCM_encrypt_loop_block_256\n\t"
|
||||||
#else
|
#else
|
||||||
"BNE.N L_AES_GCM_encrypt_loop_block_256\n\t"
|
"BNE.W L_AES_GCM_encrypt_loop_block_256\n\t"
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef __GNUC__
|
||||||
"B L_AES_GCM_encrypt_end\n\t"
|
"B L_AES_GCM_encrypt_end\n\t"
|
||||||
|
#else
|
||||||
|
"B.W L_AES_GCM_encrypt_end\n\t"
|
||||||
|
#endif
|
||||||
"\n"
|
"\n"
|
||||||
"L_AES_GCM_encrypt_start_block_192:\n\t"
|
"L_AES_GCM_encrypt_start_block_192:\n\t"
|
||||||
"\n"
|
"\n"
|
||||||
@@ -2826,12 +2930,16 @@ void AES_GCM_encrypt(const unsigned char* in, unsigned char* out, unsigned long
|
|||||||
"SUBS %[len], %[len], #0x10\n\t"
|
"SUBS %[len], %[len], #0x10\n\t"
|
||||||
"ADD lr, lr, #0x10\n\t"
|
"ADD lr, lr, #0x10\n\t"
|
||||||
"ADD %[out], %[out], #0x10\n\t"
|
"ADD %[out], %[out], #0x10\n\t"
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
"BNE L_AES_GCM_encrypt_loop_block_192\n\t"
|
"BNE L_AES_GCM_encrypt_loop_block_192\n\t"
|
||||||
#else
|
#else
|
||||||
"BNE.N L_AES_GCM_encrypt_loop_block_192\n\t"
|
"BNE.W L_AES_GCM_encrypt_loop_block_192\n\t"
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef __GNUC__
|
||||||
"B L_AES_GCM_encrypt_end\n\t"
|
"B L_AES_GCM_encrypt_end\n\t"
|
||||||
|
#else
|
||||||
|
"B.W L_AES_GCM_encrypt_end\n\t"
|
||||||
|
#endif
|
||||||
"\n"
|
"\n"
|
||||||
"L_AES_GCM_encrypt_start_block_128:\n\t"
|
"L_AES_GCM_encrypt_start_block_128:\n\t"
|
||||||
"\n"
|
"\n"
|
||||||
@@ -2871,10 +2979,10 @@ void AES_GCM_encrypt(const unsigned char* in, unsigned char* out, unsigned long
|
|||||||
"SUBS %[len], %[len], #0x10\n\t"
|
"SUBS %[len], %[len], #0x10\n\t"
|
||||||
"ADD lr, lr, #0x10\n\t"
|
"ADD lr, lr, #0x10\n\t"
|
||||||
"ADD %[out], %[out], #0x10\n\t"
|
"ADD %[out], %[out], #0x10\n\t"
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
"BNE L_AES_GCM_encrypt_loop_block_128\n\t"
|
"BNE L_AES_GCM_encrypt_loop_block_128\n\t"
|
||||||
#else
|
#else
|
||||||
"BNE.N L_AES_GCM_encrypt_loop_block_128\n\t"
|
"BNE.W L_AES_GCM_encrypt_loop_block_128\n\t"
|
||||||
#endif
|
#endif
|
||||||
"\n"
|
"\n"
|
||||||
"L_AES_GCM_encrypt_end:\n\t"
|
"L_AES_GCM_encrypt_end:\n\t"
|
||||||
@@ -2884,13 +2992,14 @@ void AES_GCM_encrypt(const unsigned char* in, unsigned char* out, unsigned long
|
|||||||
"REV r6, r6\n\t"
|
"REV r6, r6\n\t"
|
||||||
"REV r7, r7\n\t"
|
"REV r7, r7\n\t"
|
||||||
"STM r8, {r4, r5, r6, r7}\n\t"
|
"STM r8, {r4, r5, r6, r7}\n\t"
|
||||||
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks), [nr] "+r" (nr), [ctr] "+r" (ctr),
|
|
||||||
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
[L_AES_Thumb2_te_gcm] "+r" (L_AES_Thumb2_te_gcm_c)
|
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks), [nr] "+r" (nr), [ctr] "+r" (ctr),
|
||||||
#else
|
[L_AES_Thumb2_te_gcm] "+r" (L_AES_Thumb2_te_gcm_c)
|
||||||
[L_AES_Thumb2_te_gcm] "r" (L_AES_Thumb2_te_gcm)
|
|
||||||
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
|
|
||||||
:
|
:
|
||||||
|
#else
|
||||||
|
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks), [nr] "+r" (nr), [ctr] "+r" (ctr)
|
||||||
|
: [L_AES_Thumb2_te_gcm] "r" (L_AES_Thumb2_te_gcm)
|
||||||
|
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
: "memory", "r12", "lr", "r7", "r8", "r9", "r10", "r11"
|
: "memory", "r12", "lr", "r7", "r8", "r9", "r10", "r11"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@@ -925,10 +925,10 @@ L_SHA256_transform_len_start:
|
|||||||
STR r9, [sp, #60]
|
STR r9, [sp, #60]
|
||||||
ADD r3, r3, #0x40
|
ADD r3, r3, #0x40
|
||||||
SUBS r12, r12, #0x1
|
SUBS r12, r12, #0x1
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
BNE L_SHA256_transform_len_start
|
BNE L_SHA256_transform_len_start
|
||||||
#else
|
#else
|
||||||
BNE.N L_SHA256_transform_len_start
|
BNE.W L_SHA256_transform_len_start
|
||||||
#endif
|
#endif
|
||||||
/* Round 0 */
|
/* Round 0 */
|
||||||
LDR r5, [r0, #16]
|
LDR r5, [r0, #16]
|
||||||
@@ -1470,10 +1470,10 @@ L_SHA256_transform_len_start:
|
|||||||
SUBS r2, r2, #0x40
|
SUBS r2, r2, #0x40
|
||||||
SUB r3, r3, #0xc0
|
SUB r3, r3, #0xc0
|
||||||
ADD r1, r1, #0x40
|
ADD r1, r1, #0x40
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
BNE L_SHA256_transform_len_begin
|
BNE L_SHA256_transform_len_begin
|
||||||
#else
|
#else
|
||||||
BNE.N L_SHA256_transform_len_begin
|
BNE.W L_SHA256_transform_len_begin
|
||||||
#endif
|
#endif
|
||||||
ADD sp, sp, #0xc0
|
ADD sp, sp, #0xc0
|
||||||
POP {r4, r5, r6, r7, r8, r9, r10, r11, pc}
|
POP {r4, r5, r6, r7, r8, r9, r10, r11, pc}
|
||||||
|
@@ -904,10 +904,10 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
|
|||||||
"STR r9, [sp, #60]\n\t"
|
"STR r9, [sp, #60]\n\t"
|
||||||
"ADD r3, r3, #0x40\n\t"
|
"ADD r3, r3, #0x40\n\t"
|
||||||
"SUBS r12, r12, #0x1\n\t"
|
"SUBS r12, r12, #0x1\n\t"
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
"BNE L_SHA256_transform_len_start\n\t"
|
"BNE L_SHA256_transform_len_start\n\t"
|
||||||
#else
|
#else
|
||||||
"BNE.N L_SHA256_transform_len_start\n\t"
|
"BNE.W L_SHA256_transform_len_start\n\t"
|
||||||
#endif
|
#endif
|
||||||
/* Round 0 */
|
/* Round 0 */
|
||||||
"LDR r5, [%[sha256], #16]\n\t"
|
"LDR r5, [%[sha256], #16]\n\t"
|
||||||
@@ -1449,19 +1449,20 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
|
|||||||
"SUBS %[len], %[len], #0x40\n\t"
|
"SUBS %[len], %[len], #0x40\n\t"
|
||||||
"SUB r3, r3, #0xc0\n\t"
|
"SUB r3, r3, #0xc0\n\t"
|
||||||
"ADD %[data], %[data], #0x40\n\t"
|
"ADD %[data], %[data], #0x40\n\t"
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
"BNE L_SHA256_transform_len_begin\n\t"
|
"BNE L_SHA256_transform_len_begin\n\t"
|
||||||
#else
|
#else
|
||||||
"BNE.N L_SHA256_transform_len_begin\n\t"
|
"BNE.W L_SHA256_transform_len_begin\n\t"
|
||||||
#endif
|
#endif
|
||||||
"ADD sp, sp, #0xc0\n\t"
|
"ADD sp, sp, #0xc0\n\t"
|
||||||
: [sha256] "+r" (sha256), [data] "+r" (data), [len] "+r" (len),
|
|
||||||
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
[L_SHA256_transform_len_k] "+r" (L_SHA256_transform_len_k_c)
|
: [sha256] "+r" (sha256), [data] "+r" (data), [len] "+r" (len),
|
||||||
#else
|
[L_SHA256_transform_len_k] "+r" (L_SHA256_transform_len_k_c)
|
||||||
[L_SHA256_transform_len_k] "r" (L_SHA256_transform_len_k)
|
|
||||||
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
|
|
||||||
:
|
:
|
||||||
|
#else
|
||||||
|
: [sha256] "+r" (sha256), [data] "+r" (data), [len] "+r" (len)
|
||||||
|
: [L_SHA256_transform_len_k] "r" (L_SHA256_transform_len_k)
|
||||||
|
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
: "memory", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
|
: "memory", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@@ -2319,10 +2319,10 @@ L_SHA512_transform_len_start:
|
|||||||
STRD r4, r5, [sp, #120]
|
STRD r4, r5, [sp, #120]
|
||||||
ADD r3, r3, #0x80
|
ADD r3, r3, #0x80
|
||||||
SUBS r12, r12, #0x1
|
SUBS r12, r12, #0x1
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
BNE L_SHA512_transform_len_start
|
BNE L_SHA512_transform_len_start
|
||||||
#else
|
#else
|
||||||
BNE.N L_SHA512_transform_len_start
|
BNE.W L_SHA512_transform_len_start
|
||||||
#endif
|
#endif
|
||||||
/* Round 0 */
|
/* Round 0 */
|
||||||
LDRD r4, r5, [r0, #32]
|
LDRD r4, r5, [r0, #32]
|
||||||
@@ -3656,10 +3656,10 @@ L_SHA512_transform_len_start:
|
|||||||
SUBS r2, r2, #0x80
|
SUBS r2, r2, #0x80
|
||||||
SUB r3, r3, #0x200
|
SUB r3, r3, #0x200
|
||||||
ADD r1, r1, #0x80
|
ADD r1, r1, #0x80
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
BNE L_SHA512_transform_len_begin
|
BNE L_SHA512_transform_len_begin
|
||||||
#else
|
#else
|
||||||
BNE.N L_SHA512_transform_len_begin
|
BNE.W L_SHA512_transform_len_begin
|
||||||
#endif
|
#endif
|
||||||
EOR r0, r0, r0
|
EOR r0, r0, r0
|
||||||
ADD sp, sp, #0xc0
|
ADD sp, sp, #0xc0
|
||||||
|
@@ -2226,10 +2226,10 @@ void Transform_Sha512_Len(wc_Sha512* sha512, const byte* data, word32 len)
|
|||||||
"STRD r4, r5, [sp, #120]\n\t"
|
"STRD r4, r5, [sp, #120]\n\t"
|
||||||
"ADD r3, r3, #0x80\n\t"
|
"ADD r3, r3, #0x80\n\t"
|
||||||
"SUBS r12, r12, #0x1\n\t"
|
"SUBS r12, r12, #0x1\n\t"
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
"BNE L_SHA512_transform_len_start\n\t"
|
"BNE L_SHA512_transform_len_start\n\t"
|
||||||
#else
|
#else
|
||||||
"BNE.N L_SHA512_transform_len_start\n\t"
|
"BNE.W L_SHA512_transform_len_start\n\t"
|
||||||
#endif
|
#endif
|
||||||
/* Round 0 */
|
/* Round 0 */
|
||||||
"LDRD r4, r5, [%[sha512], #32]\n\t"
|
"LDRD r4, r5, [%[sha512], #32]\n\t"
|
||||||
@@ -3563,20 +3563,21 @@ void Transform_Sha512_Len(wc_Sha512* sha512, const byte* data, word32 len)
|
|||||||
"SUBS %[len], %[len], #0x80\n\t"
|
"SUBS %[len], %[len], #0x80\n\t"
|
||||||
"SUB r3, r3, #0x200\n\t"
|
"SUB r3, r3, #0x200\n\t"
|
||||||
"ADD %[data], %[data], #0x80\n\t"
|
"ADD %[data], %[data], #0x80\n\t"
|
||||||
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
|
#ifdef __GNUC__
|
||||||
"BNE L_SHA512_transform_len_begin\n\t"
|
"BNE L_SHA512_transform_len_begin\n\t"
|
||||||
#else
|
#else
|
||||||
"BNE.N L_SHA512_transform_len_begin\n\t"
|
"BNE.W L_SHA512_transform_len_begin\n\t"
|
||||||
#endif
|
#endif
|
||||||
"EOR r0, r0, r0\n\t"
|
"EOR r0, r0, r0\n\t"
|
||||||
"ADD sp, sp, #0xc0\n\t"
|
"ADD sp, sp, #0xc0\n\t"
|
||||||
: [sha512] "+r" (sha512), [data] "+r" (data), [len] "+r" (len),
|
|
||||||
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
|
||||||
[L_SHA512_transform_len_k] "+r" (L_SHA512_transform_len_k_c)
|
: [sha512] "+r" (sha512), [data] "+r" (data), [len] "+r" (len),
|
||||||
#else
|
[L_SHA512_transform_len_k] "+r" (L_SHA512_transform_len_k_c)
|
||||||
[L_SHA512_transform_len_k] "r" (L_SHA512_transform_len_k)
|
|
||||||
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
|
|
||||||
:
|
:
|
||||||
|
#else
|
||||||
|
: [sha512] "+r" (sha512), [data] "+r" (data), [len] "+r" (len)
|
||||||
|
: [L_SHA512_transform_len_k] "r" (L_SHA512_transform_len_k)
|
||||||
|
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
|
||||||
: "memory", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
|
: "memory", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user