Skip to content

Commit 7e14258

Browse files
authored
Merge pull request #7221 from SparkiDev/thumb2_inline_asm_iar_fix
Thumbs inline ASM IAR: fix register clobber list
2 parents dec4caa + fff4eff commit 7e14258

3 files changed

Lines changed: 58 additions & 17 deletions

File tree

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

Lines changed: 54 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -310,11 +310,12 @@ void AES_invert_key(unsigned char* ks, word32 rounds)
310310
: [ks] "+r" (ks), [rounds] "+r" (rounds),
311311
[L_AES_Thumb2_te] "+r" (L_AES_Thumb2_te_c), [L_AES_Thumb2_td] "+r" (L_AES_Thumb2_td_c)
312312
:
313+
: "memory", "r12", "lr", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "cc"
313314
#else
314315
: [ks] "+r" (ks), [rounds] "+r" (rounds)
315316
: [L_AES_Thumb2_te] "r" (L_AES_Thumb2_te), [L_AES_Thumb2_td] "r" (L_AES_Thumb2_td)
316-
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
317317
: "memory", "r12", "lr", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "cc"
318+
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
318319
);
319320
}
320321

@@ -558,11 +559,12 @@ void AES_set_encrypt_key(const unsigned char* key, word32 len, unsigned char* ks
558559
: [key] "+r" (key), [len] "+r" (len), [ks] "+r" (ks),
559560
[L_AES_Thumb2_te] "+r" (L_AES_Thumb2_te_c), [L_AES_Thumb2_rcon] "+r" (L_AES_Thumb2_rcon_c)
560561
:
562+
: "memory", "r12", "lr", "r5", "r6", "r7", "r8", "r9", "r10", "cc"
561563
#else
562564
: [key] "+r" (key), [len] "+r" (len), [ks] "+r" (ks)
563565
: [L_AES_Thumb2_te] "r" (L_AES_Thumb2_te), [L_AES_Thumb2_rcon] "r" (L_AES_Thumb2_rcon)
564-
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
565566
: "memory", "r12", "lr", "r5", "r6", "r7", "r8", "r9", "r10", "cc"
567+
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
566568
);
567569
}
568570

@@ -969,12 +971,16 @@ void AES_ECB_encrypt(const unsigned char* in, unsigned char* out, unsigned long
969971
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks), [nr] "+r" (nr),
970972
[L_AES_Thumb2_te_ecb] "+r" (L_AES_Thumb2_te_ecb_c)
971973
:
974+
: "memory", "r12", "lr", "r6", "r7", "r8", "r9", "r10", "r11", "cc"
972975
#else
973-
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks), [nr] "+r" (nr)
976+
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks)
974977
: [L_AES_Thumb2_te_ecb] "r" (L_AES_Thumb2_te_ecb)
978+
: "memory", "r12", "lr", "r4", "r6", "r7", "r8", "r9", "r10", "r11", "cc"
975979
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
976-
: "memory", "r12", "lr", "r6", "r7", "r8", "r9", "r10", "r11", "cc"
977980
);
981+
#ifdef WOLFSSL_NO_VAR_ASSIGN_REG
982+
(void)nr;
983+
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
978984
}
979985

980986
#endif /* HAVE_AESCCM || HAVE_AESGCM || WOLFSSL_AES_DIRECT || WOLFSSL_AES_COUNTER */
@@ -1169,12 +1175,19 @@ void AES_CBC_encrypt(const unsigned char* in, unsigned char* out, unsigned long
11691175
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks), [nr] "+r" (nr), [iv] "+r" (iv),
11701176
[L_AES_Thumb2_te_ecb] "+r" (L_AES_Thumb2_te_ecb_c)
11711177
:
1178+
: "memory", "r12", "lr", "r7", "r8", "r9", "r10", "r11", "cc"
11721179
#else
1173-
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks), [nr] "+r" (nr), [iv] "+r" (iv)
1180+
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks)
11741181
: [L_AES_Thumb2_te_ecb] "r" (L_AES_Thumb2_te_ecb)
1182+
: "memory", "r12", "lr", "r4", "r5", "r7", "r8", "r9", "r10", "r11", "cc"
11751183
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
1176-
: "memory", "r12", "lr", "r7", "r8", "r9", "r10", "r11", "cc"
11771184
);
1185+
#ifdef WOLFSSL_NO_VAR_ASSIGN_REG
1186+
(void)nr;
1187+
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
1188+
#ifdef WOLFSSL_NO_VAR_ASSIGN_REG
1189+
(void)iv;
1190+
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
11781191
}
11791192

11801193
#endif /* HAVE_AES_CBC */
@@ -1390,12 +1403,19 @@ void AES_CTR_encrypt(const unsigned char* in, unsigned char* out, unsigned long
13901403
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks), [nr] "+r" (nr), [ctr] "+r" (ctr),
13911404
[L_AES_Thumb2_te_ecb] "+r" (L_AES_Thumb2_te_ecb_c)
13921405
:
1406+
: "memory", "r12", "lr", "r7", "r8", "r9", "r10", "r11", "cc"
13931407
#else
1394-
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks), [nr] "+r" (nr), [ctr] "+r" (ctr)
1408+
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks)
13951409
: [L_AES_Thumb2_te_ecb] "r" (L_AES_Thumb2_te_ecb)
1410+
: "memory", "r12", "lr", "r4", "r5", "r7", "r8", "r9", "r10", "r11", "cc"
13961411
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
1397-
: "memory", "r12", "lr", "r7", "r8", "r9", "r10", "r11", "cc"
13981412
);
1413+
#ifdef WOLFSSL_NO_VAR_ASSIGN_REG
1414+
(void)nr;
1415+
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
1416+
#ifdef WOLFSSL_NO_VAR_ASSIGN_REG
1417+
(void)ctr;
1418+
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
13991419
}
14001420

14011421
#endif /* WOLFSSL_AES_COUNTER */
@@ -1834,12 +1854,16 @@ void AES_ECB_decrypt(const unsigned char* in, unsigned char* out, unsigned long
18341854
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks), [nr] "+r" (nr),
18351855
[L_AES_Thumb2_td_ecb] "+r" (L_AES_Thumb2_td_ecb_c), [L_AES_Thumb2_td4] "+r" (L_AES_Thumb2_td4_c)
18361856
:
1857+
: "memory", "r12", "lr", "r7", "r8", "r9", "r10", "r11", "cc"
18371858
#else
1838-
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks), [nr] "+r" (nr)
1859+
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks)
18391860
: [L_AES_Thumb2_td_ecb] "r" (L_AES_Thumb2_td_ecb), [L_AES_Thumb2_td4] "r" (L_AES_Thumb2_td4)
1861+
: "memory", "r12", "lr", "r4", "r7", "r8", "r9", "r10", "r11", "cc"
18401862
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
1841-
: "memory", "r12", "lr", "r7", "r8", "r9", "r10", "r11", "cc"
18421863
);
1864+
#ifdef WOLFSSL_NO_VAR_ASSIGN_REG
1865+
(void)nr;
1866+
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
18431867
}
18441868

18451869
#endif /* WOLFSSL_AES_DIRECT || WOLFSSL_AES_COUNTER */
@@ -2193,12 +2217,19 @@ void AES_CBC_decrypt(const unsigned char* in, unsigned char* out, unsigned long
21932217
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks), [nr] "+r" (nr), [iv] "+r" (iv),
21942218
[L_AES_Thumb2_td_ecb] "+r" (L_AES_Thumb2_td_ecb_c), [L_AES_Thumb2_td4] "+r" (L_AES_Thumb2_td4_c)
21952219
:
2220+
: "memory", "r12", "lr", "r8", "r9", "r10", "r11", "cc"
21962221
#else
2197-
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks), [nr] "+r" (nr), [iv] "+r" (iv)
2222+
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks)
21982223
: [L_AES_Thumb2_td_ecb] "r" (L_AES_Thumb2_td_ecb), [L_AES_Thumb2_td4] "r" (L_AES_Thumb2_td4)
2224+
: "memory", "r12", "lr", "r4", "r5", "r8", "r9", "r10", "r11", "cc"
21992225
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
2200-
: "memory", "r12", "lr", "r8", "r9", "r10", "r11", "cc"
22012226
);
2227+
#ifdef WOLFSSL_NO_VAR_ASSIGN_REG
2228+
(void)nr;
2229+
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
2230+
#ifdef WOLFSSL_NO_VAR_ASSIGN_REG
2231+
(void)iv;
2232+
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
22022233
}
22032234
22042235
#endif /* HAVE_AES_CBC */
@@ -2785,11 +2816,12 @@ void GCM_gmult_len(unsigned char* x, const unsigned char** m, const unsigned cha
27852816
: [x] "+r" (x), [m] "+r" (m), [data] "+r" (data), [len] "+r" (len),
27862817
[L_GCM_gmult_len_r] "+r" (L_GCM_gmult_len_r_c)
27872818
:
2819+
: "memory", "r12", "lr", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "cc"
27882820
#else
27892821
: [x] "+r" (x), [m] "+r" (m), [data] "+r" (data), [len] "+r" (len)
27902822
: [L_GCM_gmult_len_r] "r" (L_GCM_gmult_len_r)
2791-
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
27922823
: "memory", "r12", "lr", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "cc"
2824+
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
27932825
);
27942826
}
27952827

@@ -2996,12 +3028,19 @@ void AES_GCM_encrypt(const unsigned char* in, unsigned char* out, unsigned long
29963028
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks), [nr] "+r" (nr), [ctr] "+r" (ctr),
29973029
[L_AES_Thumb2_te_gcm] "+r" (L_AES_Thumb2_te_gcm_c)
29983030
:
3031+
: "memory", "r12", "lr", "r7", "r8", "r9", "r10", "r11", "cc"
29993032
#else
3000-
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks), [nr] "+r" (nr), [ctr] "+r" (ctr)
3033+
: [in] "+r" (in), [out] "+r" (out), [len] "+r" (len), [ks] "+r" (ks)
30013034
: [L_AES_Thumb2_te_gcm] "r" (L_AES_Thumb2_te_gcm)
3035+
: "memory", "r12", "lr", "r4", "r5", "r7", "r8", "r9", "r10", "r11", "cc"
30023036
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
3003-
: "memory", "r12", "lr", "r7", "r8", "r9", "r10", "r11", "cc"
30043037
);
3038+
#ifdef WOLFSSL_NO_VAR_ASSIGN_REG
3039+
(void)nr;
3040+
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
3041+
#ifdef WOLFSSL_NO_VAR_ASSIGN_REG
3042+
(void)ctr;
3043+
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
30053044
}
30063045

30073046
#endif /* HAVE_AESGCM */

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1459,11 +1459,12 @@ void Transform_Sha256_Len(wc_Sha256* sha256, const byte* data, word32 len)
14591459
: [sha256] "+r" (sha256), [data] "+r" (data), [len] "+r" (len),
14601460
[L_SHA256_transform_len_k] "+r" (L_SHA256_transform_len_k_c)
14611461
:
1462+
: "memory", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "cc"
14621463
#else
14631464
: [sha256] "+r" (sha256), [data] "+r" (data), [len] "+r" (len)
14641465
: [L_SHA256_transform_len_k] "r" (L_SHA256_transform_len_k)
1465-
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
14661466
: "memory", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "cc"
1467+
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
14671468
);
14681469
}
14691470

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3574,11 +3574,12 @@ void Transform_Sha512_Len(wc_Sha512* sha512, const byte* data, word32 len)
35743574
: [sha512] "+r" (sha512), [data] "+r" (data), [len] "+r" (len),
35753575
[L_SHA512_transform_len_k] "+r" (L_SHA512_transform_len_k_c)
35763576
:
3577+
: "memory", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "cc"
35773578
#else
35783579
: [sha512] "+r" (sha512), [data] "+r" (data), [len] "+r" (len)
35793580
: [L_SHA512_transform_len_k] "r" (L_SHA512_transform_len_k)
3580-
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
35813581
: "memory", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "cc"
3582+
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
35823583
);
35833584
}
35843585

0 commit comments

Comments
 (0)