Skip to content

Commit 9ac3083

Browse files
committed
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.
1 parent 8c61b2c commit 9ac3083

8 files changed

Lines changed: 2417 additions & 901 deletions

File tree

wolfcrypt/src/port/arm/thumb2-aes-asm.S

Lines changed: 138 additions & 78 deletions
Large diffs are not rendered by default.

wolfcrypt/src/port/arm/thumb2-aes-asm_c.c

Lines changed: 224 additions & 115 deletions
Large diffs are not rendered by default.

wolfcrypt/src/port/arm/thumb2-sha256-asm.S

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -925,10 +925,10 @@ L_SHA256_transform_len_start:
925925
STR r9, [sp, #60]
926926
ADD r3, r3, #0x40
927927
SUBS r12, r12, #0x1
928-
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
928+
#ifdef __GNUC__
929929
BNE L_SHA256_transform_len_start
930930
#else
931-
BNE.N L_SHA256_transform_len_start
931+
BNE.W L_SHA256_transform_len_start
932932
#endif
933933
/* Round 0 */
934934
LDR r5, [r0, #16]
@@ -1470,10 +1470,10 @@ L_SHA256_transform_len_start:
14701470
SUBS r2, r2, #0x40
14711471
SUB r3, r3, #0xc0
14721472
ADD r1, r1, #0x40
1473-
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
1473+
#ifdef __GNUC__
14741474
BNE L_SHA256_transform_len_begin
14751475
#else
1476-
BNE.N L_SHA256_transform_len_begin
1476+
BNE.W L_SHA256_transform_len_begin
14771477
#endif
14781478
ADD sp, sp, #0xc0
14791479
POP {r4, r5, r6, r7, r8, r9, r10, r11, pc}

wolfcrypt/src/port/arm/thumb2-sha256-asm_c.c

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -904,10 +904,10 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
904904
"STR r9, [sp, #60]\n\t"
905905
"ADD r3, r3, #0x40\n\t"
906906
"SUBS r12, r12, #0x1\n\t"
907-
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
907+
#ifdef __GNUC__
908908
"BNE L_SHA256_transform_len_start\n\t"
909909
#else
910-
"BNE.N L_SHA256_transform_len_start\n\t"
910+
"BNE.W L_SHA256_transform_len_start\n\t"
911911
#endif
912912
/* Round 0 */
913913
"LDR r5, [%[sha256], #16]\n\t"
@@ -1449,19 +1449,20 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
14491449
"SUBS %[len], %[len], #0x40\n\t"
14501450
"SUB r3, r3, #0xc0\n\t"
14511451
"ADD %[data], %[data], #0x40\n\t"
1452-
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
1452+
#ifdef __GNUC__
14531453
"BNE L_SHA256_transform_len_begin\n\t"
14541454
#else
1455-
"BNE.N L_SHA256_transform_len_begin\n\t"
1455+
"BNE.W L_SHA256_transform_len_begin\n\t"
14561456
#endif
14571457
"ADD sp, sp, #0xc0\n\t"
1458-
: [sha256] "+r" (sha256), [data] "+r" (data), [len] "+r" (len),
14591458
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
1460-
[L_SHA256_transform_len_k] "+r" (L_SHA256_transform_len_k_c)
1459+
: [sha256] "+r" (sha256), [data] "+r" (data), [len] "+r" (len),
1460+
[L_SHA256_transform_len_k] "+r" (L_SHA256_transform_len_k_c)
1461+
:
14611462
#else
1462-
[L_SHA256_transform_len_k] "r" (L_SHA256_transform_len_k)
1463+
: [sha256] "+r" (sha256), [data] "+r" (data), [len] "+r" (len)
1464+
: [L_SHA256_transform_len_k] "r" (L_SHA256_transform_len_k)
14631465
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
1464-
:
14651466
: "memory", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
14661467
);
14671468
}

wolfcrypt/src/port/arm/thumb2-sha512-asm.S

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2319,10 +2319,10 @@ L_SHA512_transform_len_start:
23192319
STRD r4, r5, [sp, #120]
23202320
ADD r3, r3, #0x80
23212321
SUBS r12, r12, #0x1
2322-
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
2322+
#ifdef __GNUC__
23232323
BNE L_SHA512_transform_len_start
23242324
#else
2325-
BNE.N L_SHA512_transform_len_start
2325+
BNE.W L_SHA512_transform_len_start
23262326
#endif
23272327
/* Round 0 */
23282328
LDRD r4, r5, [r0, #32]
@@ -3656,10 +3656,10 @@ L_SHA512_transform_len_start:
36563656
SUBS r2, r2, #0x80
36573657
SUB r3, r3, #0x200
36583658
ADD r1, r1, #0x80
3659-
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
3659+
#ifdef __GNUC__
36603660
BNE L_SHA512_transform_len_begin
36613661
#else
3662-
BNE.N L_SHA512_transform_len_begin
3662+
BNE.W L_SHA512_transform_len_begin
36633663
#endif
36643664
EOR r0, r0, r0
36653665
ADD sp, sp, #0xc0

wolfcrypt/src/port/arm/thumb2-sha512-asm_c.c

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2226,10 +2226,10 @@ void Transform_Sha512_Len(wc_Sha512* sha512, const byte* data, word32 len)
22262226
"STRD r4, r5, [sp, #120]\n\t"
22272227
"ADD r3, r3, #0x80\n\t"
22282228
"SUBS r12, r12, #0x1\n\t"
2229-
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
2229+
#ifdef __GNUC__
22302230
"BNE L_SHA512_transform_len_start\n\t"
22312231
#else
2232-
"BNE.N L_SHA512_transform_len_start\n\t"
2232+
"BNE.W L_SHA512_transform_len_start\n\t"
22332233
#endif
22342234
/* Round 0 */
22352235
"LDRD r4, r5, [%[sha512], #32]\n\t"
@@ -3563,20 +3563,21 @@ void Transform_Sha512_Len(wc_Sha512* sha512, const byte* data, word32 len)
35633563
"SUBS %[len], %[len], #0x80\n\t"
35643564
"SUB r3, r3, #0x200\n\t"
35653565
"ADD %[data], %[data], #0x80\n\t"
3566-
#if defined(__GNUC__) || defined(__ICCARM__) || defined(__IAR_SYSTEMS_ICC__)
3566+
#ifdef __GNUC__
35673567
"BNE L_SHA512_transform_len_begin\n\t"
35683568
#else
3569-
"BNE.N L_SHA512_transform_len_begin\n\t"
3569+
"BNE.W L_SHA512_transform_len_begin\n\t"
35703570
#endif
35713571
"EOR r0, r0, r0\n\t"
35723572
"ADD sp, sp, #0xc0\n\t"
3573-
: [sha512] "+r" (sha512), [data] "+r" (data), [len] "+r" (len),
35743573
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
3575-
[L_SHA512_transform_len_k] "+r" (L_SHA512_transform_len_k_c)
3574+
: [sha512] "+r" (sha512), [data] "+r" (data), [len] "+r" (len),
3575+
[L_SHA512_transform_len_k] "+r" (L_SHA512_transform_len_k_c)
3576+
:
35763577
#else
3577-
[L_SHA512_transform_len_k] "r" (L_SHA512_transform_len_k)
3578+
: [sha512] "+r" (sha512), [data] "+r" (data), [len] "+r" (len)
3579+
: [L_SHA512_transform_len_k] "r" (L_SHA512_transform_len_k)
35783580
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
3579-
:
35803581
: "memory", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12"
35813582
);
35823583
}

0 commit comments

Comments
 (0)