Skip to content

Commit cfab666

Browse files
committed
ARM32/Thumb2 ASM: fix WOLFSSL_NO_VAR_ASSIGN_REG
Thumb2 needed constants defined even with no register assignments. ARM32 needed support added fo rnot having registers assigned to variables.
1 parent 61cdcd7 commit cfab666

17 files changed

Lines changed: 737 additions & 24 deletions

wolfcrypt/src/port/arm/armv8-32-aes-asm.S

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3850,13 +3850,13 @@ L_AES_ECB_decrypt_end:
38503850
.type AES_CBC_decrypt, %function
38513851
AES_CBC_decrypt:
38523852
push {r4, r5, r6, r7, r8, r9, r10, r11, lr}
3853-
ldr r8, [sp, #36]
3854-
ldr r4, [sp, #40]
38553853
mov lr, r0
38563854
adr r0, L_AES_ARM32_td_ecb
38573855
ldr r0, [r0]
38583856
mov r12, r2
38593857
adr r2, L_AES_ARM32_td4
3858+
ldr r8, [sp, #36]
3859+
ldr r4, [sp, #40]
38603860
push {r3, r4}
38613861
cmp r8, #10
38623862
beq L_AES_CBC_decrypt_loop_block_128

wolfcrypt/src/port/arm/armv8-32-aes-asm_c.c

Lines changed: 155 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,15 @@
4444
#ifdef __IAR_SYSTEMS_ICC__
4545
#define __asm__ asm
4646
#define __volatile__ volatile
47+
#define WOLFSSL_NO_VAR_ASSIGN_REG
4748
#endif /* __IAR_SYSTEMS_ICC__ */
4849
#ifdef __KEIL__
4950
#define __asm__ __asm
5051
#define __volatile__ volatile
5152
#endif /* __KEIL__ */
53+
#ifdef __ghs__
54+
#define WOLFSSL_NO_VAR_ASSIGN_REG
55+
#endif /* __ghs__ */
5256
#ifndef NO_AES
5357
#include <wolfssl/wolfcrypt/aes.h>
5458

@@ -204,12 +208,23 @@ static const word32* L_AES_ARM32_te = L_AES_ARM32_te_data;
204208
* WOLFSSL_AES_DIRECT || WOLFSSL_AES_COUNTER */
205209
#ifdef HAVE_AES_DECRYPT
206210
void AES_invert_key(unsigned char* ks_p, word32 rounds_p);
211+
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
207212
void AES_invert_key(unsigned char* ks_p, word32 rounds_p)
213+
#else
214+
void AES_invert_key(unsigned char* ks, word32 rounds)
215+
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
208216
{
217+
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
209218
register unsigned char* ks asm ("r0") = (unsigned char*)ks_p;
210219
register word32 rounds asm ("r1") = (word32)rounds_p;
211220
register word32* L_AES_ARM32_te_c asm ("r2") = (word32*)L_AES_ARM32_te;
212221
register word32* L_AES_ARM32_td_c asm ("r3") = (word32*)L_AES_ARM32_td;
222+
#else
223+
register word32* L_AES_ARM32_te_c = (word32*)L_AES_ARM32_te;
224+
225+
register word32* L_AES_ARM32_td_c = (word32*)L_AES_ARM32_td;
226+
227+
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
213228

214229
__asm__ __volatile__ (
215230
"mov r12, %[L_AES_ARM32_te]\n\t"
@@ -423,15 +438,27 @@ static const word32 L_AES_ARM32_rcon[] = {
423438

424439
void AES_set_encrypt_key(const unsigned char* key_p, word32 len_p,
425440
unsigned char* ks_p);
441+
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
426442
void AES_set_encrypt_key(const unsigned char* key_p, word32 len_p,
427443
unsigned char* ks_p)
444+
#else
445+
void AES_set_encrypt_key(const unsigned char* key, word32 len,
446+
unsigned char* ks)
447+
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
428448
{
449+
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
429450
register const unsigned char* key asm ("r0") = (const unsigned char*)key_p;
430451
register word32 len asm ("r1") = (word32)len_p;
431452
register unsigned char* ks asm ("r2") = (unsigned char*)ks_p;
432453
register word32* L_AES_ARM32_te_c asm ("r3") = (word32*)L_AES_ARM32_te;
433454
register word32* L_AES_ARM32_rcon_c asm ("r4") =
434455
(word32*)&L_AES_ARM32_rcon;
456+
#else
457+
register word32* L_AES_ARM32_te_c = (word32*)L_AES_ARM32_te;
458+
459+
register word32* L_AES_ARM32_rcon_c = (word32*)&L_AES_ARM32_rcon;
460+
461+
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
435462

436463
__asm__ __volatile__ (
437464
"mov r8, %[L_AES_ARM32_te]\n\t"
@@ -939,13 +966,19 @@ void AES_set_encrypt_key(const unsigned char* key_p, word32 len_p,
939966

940967
void AES_encrypt_block(const word32* te_p, int nr_p, int len_p,
941968
const word32* ks_p);
969+
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
942970
void AES_encrypt_block(const word32* te_p, int nr_p, int len_p,
943971
const word32* ks_p)
972+
#else
973+
void AES_encrypt_block(const word32* te, int nr, int len, const word32* ks)
974+
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
944975
{
976+
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
945977
register const word32* te asm ("r0") = (const word32*)te_p;
946978
register int nr asm ("r1") = (int)nr_p;
947979
register int len asm ("r2") = (int)len_p;
948980
register const word32* ks asm ("r3") = (const word32*)ks_p;
981+
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
949982

950983
__asm__ __volatile__ (
951984
"\n"
@@ -1595,21 +1628,35 @@ void AES_encrypt_block(const word32* te_p, int nr_p, int len_p,
15951628
static const word32* L_AES_ARM32_te_ecb = L_AES_ARM32_te_data;
15961629
void AES_ECB_encrypt(const unsigned char* in_p, unsigned char* out_p,
15971630
unsigned long len_p, const unsigned char* ks_p, int nr_p);
1631+
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
15981632
void AES_ECB_encrypt(const unsigned char* in_p, unsigned char* out_p,
15991633
unsigned long len_p, const unsigned char* ks_p, int nr_p)
1634+
#else
1635+
void AES_ECB_encrypt(const unsigned char* in, unsigned char* out,
1636+
unsigned long len, const unsigned char* ks, int nr)
1637+
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
16001638
{
1639+
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
16011640
register const unsigned char* in asm ("r0") = (const unsigned char*)in_p;
16021641
register unsigned char* out asm ("r1") = (unsigned char*)out_p;
16031642
register unsigned long len asm ("r2") = (unsigned long)len_p;
16041643
register const unsigned char* ks asm ("r3") = (const unsigned char*)ks_p;
16051644
register int nr asm ("r4") = (int)nr_p;
16061645
register word32* L_AES_ARM32_te_ecb_c asm ("r5") =
16071646
(word32*)L_AES_ARM32_te_ecb;
1647+
#else
1648+
register word32* L_AES_ARM32_te_ecb_c = (word32*)L_AES_ARM32_te_ecb;
1649+
1650+
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
16081651

16091652
__asm__ __volatile__ (
16101653
"mov lr, %[in]\n\t"
16111654
"mov r0, %[L_AES_ARM32_te_ecb]\n\t"
1655+
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
16121656
"mov r12, r4\n\t"
1657+
#else
1658+
"mov r12, %[nr]\n\t"
1659+
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
16131660
"push {%[ks]}\n\t"
16141661
"cmp r12, #10\n\t"
16151662
"beq L_AES_ECB_encrypt_start_block_128_%=\n\t"
@@ -1851,10 +1898,16 @@ static const word32* L_AES_ARM32_te_cbc = L_AES_ARM32_te_data;
18511898
void AES_CBC_encrypt(const unsigned char* in_p, unsigned char* out_p,
18521899
unsigned long len_p, const unsigned char* ks_p, int nr_p,
18531900
unsigned char* iv_p);
1901+
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
18541902
void AES_CBC_encrypt(const unsigned char* in_p, unsigned char* out_p,
18551903
unsigned long len_p, const unsigned char* ks_p, int nr_p,
18561904
unsigned char* iv_p)
1905+
#else
1906+
void AES_CBC_encrypt(const unsigned char* in, unsigned char* out,
1907+
unsigned long len, const unsigned char* ks, int nr, unsigned char* iv)
1908+
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
18571909
{
1910+
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
18581911
register const unsigned char* in asm ("r0") = (const unsigned char*)in_p;
18591912
register unsigned char* out asm ("r1") = (unsigned char*)out_p;
18601913
register unsigned long len asm ("r2") = (unsigned long)len_p;
@@ -1863,10 +1916,22 @@ void AES_CBC_encrypt(const unsigned char* in_p, unsigned char* out_p,
18631916
register unsigned char* iv asm ("r5") = (unsigned char*)iv_p;
18641917
register word32* L_AES_ARM32_te_cbc_c asm ("r6") =
18651918
(word32*)L_AES_ARM32_te_cbc;
1919+
#else
1920+
register word32* L_AES_ARM32_te_cbc_c = (word32*)L_AES_ARM32_te_cbc;
1921+
1922+
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
18661923

18671924
__asm__ __volatile__ (
1925+
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
18681926
"mov r8, r4\n\t"
1927+
#else
1928+
"mov r8, %[nr]\n\t"
1929+
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
1930+
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
18691931
"mov r9, r5\n\t"
1932+
#else
1933+
"mov r9, %[iv]\n\t"
1934+
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
18701935
"mov lr, %[in]\n\t"
18711936
"mov r0, %[L_AES_ARM32_te_cbc]\n\t"
18721937
"ldm r9, {r4, r5, r6, r7}\n\t"
@@ -2124,10 +2189,16 @@ static const word32* L_AES_ARM32_te_ctr = L_AES_ARM32_te_data;
21242189
void AES_CTR_encrypt(const unsigned char* in_p, unsigned char* out_p,
21252190
unsigned long len_p, const unsigned char* ks_p, int nr_p,
21262191
unsigned char* ctr_p);
2192+
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
21272193
void AES_CTR_encrypt(const unsigned char* in_p, unsigned char* out_p,
21282194
unsigned long len_p, const unsigned char* ks_p, int nr_p,
21292195
unsigned char* ctr_p)
2196+
#else
2197+
void AES_CTR_encrypt(const unsigned char* in, unsigned char* out,
2198+
unsigned long len, const unsigned char* ks, int nr, unsigned char* ctr)
2199+
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
21302200
{
2201+
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
21312202
register const unsigned char* in asm ("r0") = (const unsigned char*)in_p;
21322203
register unsigned char* out asm ("r1") = (unsigned char*)out_p;
21332204
register unsigned long len asm ("r2") = (unsigned long)len_p;
@@ -2136,10 +2207,22 @@ void AES_CTR_encrypt(const unsigned char* in_p, unsigned char* out_p,
21362207
register unsigned char* ctr asm ("r5") = (unsigned char*)ctr_p;
21372208
register word32* L_AES_ARM32_te_ctr_c asm ("r6") =
21382209
(word32*)L_AES_ARM32_te_ctr;
2210+
#else
2211+
register word32* L_AES_ARM32_te_ctr_c = (word32*)L_AES_ARM32_te_ctr;
2212+
2213+
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
21392214

21402215
__asm__ __volatile__ (
2216+
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
21412217
"mov r12, r4\n\t"
2218+
#else
2219+
"mov r12, %[nr]\n\t"
2220+
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
2221+
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
21422222
"mov r8, r5\n\t"
2223+
#else
2224+
"mov r8, %[ctr]\n\t"
2225+
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
21432226
"mov lr, %[in]\n\t"
21442227
"mov r0, %[L_AES_ARM32_te_ctr]\n\t"
21452228
"ldm r8, {r4, r5, r6, r7}\n\t"
@@ -2398,11 +2481,17 @@ void AES_CTR_encrypt(const unsigned char* in_p, unsigned char* out_p,
23982481
#if defined(WOLFSSL_AES_DIRECT) || defined(WOLFSSL_AES_COUNTER) || \
23992482
defined(HAVE_AES_CBC)
24002483
void AES_decrypt_block(const word32* td_p, int nr_p, const byte* td4_p);
2484+
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
24012485
void AES_decrypt_block(const word32* td_p, int nr_p, const byte* td4_p)
2486+
#else
2487+
void AES_decrypt_block(const word32* td, int nr, const byte* td4)
2488+
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
24022489
{
2490+
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
24032491
register const word32* td asm ("r0") = (const word32*)td_p;
24042492
register int nr asm ("r1") = (int)nr_p;
24052493
register const byte* td4 asm ("r2") = (const byte*)td4_p;
2494+
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
24062495

24072496
__asm__ __volatile__ (
24082497
"\n"
@@ -3086,9 +3175,15 @@ static const byte L_AES_ARM32_td4[] = {
30863175
#if defined(WOLFSSL_AES_DIRECT) || defined(WOLFSSL_AES_COUNTER)
30873176
void AES_ECB_decrypt(const unsigned char* in_p, unsigned char* out_p,
30883177
unsigned long len_p, const unsigned char* ks_p, int nr_p);
3178+
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
30893179
void AES_ECB_decrypt(const unsigned char* in_p, unsigned char* out_p,
30903180
unsigned long len_p, const unsigned char* ks_p, int nr_p)
3181+
#else
3182+
void AES_ECB_decrypt(const unsigned char* in, unsigned char* out,
3183+
unsigned long len, const unsigned char* ks, int nr)
3184+
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
30913185
{
3186+
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
30923187
register const unsigned char* in asm ("r0") = (const unsigned char*)in_p;
30933188
register unsigned char* out asm ("r1") = (unsigned char*)out_p;
30943189
register unsigned long len asm ("r2") = (unsigned long)len_p;
@@ -3097,9 +3192,19 @@ void AES_ECB_decrypt(const unsigned char* in_p, unsigned char* out_p,
30973192
register word32* L_AES_ARM32_td_ecb_c asm ("r5") =
30983193
(word32*)L_AES_ARM32_td_ecb;
30993194
register byte* L_AES_ARM32_td4_c asm ("r6") = (byte*)&L_AES_ARM32_td4;
3195+
#else
3196+
register word32* L_AES_ARM32_td_ecb_c = (word32*)L_AES_ARM32_td_ecb;
3197+
3198+
register byte* L_AES_ARM32_td4_c = (byte*)&L_AES_ARM32_td4;
3199+
3200+
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
31003201

31013202
__asm__ __volatile__ (
3203+
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
31023204
"mov r8, r4\n\t"
3205+
#else
3206+
"mov r8, %[nr]\n\t"
3207+
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
31033208
"mov lr, %[in]\n\t"
31043209
"mov r0, %[L_AES_ARM32_td_ecb]\n\t"
31053210
"mov r12, %[len]\n\t"
@@ -3339,10 +3444,16 @@ void AES_ECB_decrypt(const unsigned char* in_p, unsigned char* out_p,
33393444
void AES_CBC_decrypt(const unsigned char* in_p, unsigned char* out_p,
33403445
unsigned long len_p, const unsigned char* ks_p, int nr_p,
33413446
unsigned char* iv_p);
3447+
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
33423448
void AES_CBC_decrypt(const unsigned char* in_p, unsigned char* out_p,
33433449
unsigned long len_p, const unsigned char* ks_p, int nr_p,
33443450
unsigned char* iv_p)
3451+
#else
3452+
void AES_CBC_decrypt(const unsigned char* in, unsigned char* out,
3453+
unsigned long len, const unsigned char* ks, int nr, unsigned char* iv)
3454+
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
33453455
{
3456+
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
33463457
register const unsigned char* in asm ("r0") = (const unsigned char*)in_p;
33473458
register unsigned char* out asm ("r1") = (unsigned char*)out_p;
33483459
register unsigned long len asm ("r2") = (unsigned long)len_p;
@@ -3352,14 +3463,28 @@ void AES_CBC_decrypt(const unsigned char* in_p, unsigned char* out_p,
33523463
register word32* L_AES_ARM32_td_ecb_c asm ("r6") =
33533464
(word32*)L_AES_ARM32_td_ecb;
33543465
register byte* L_AES_ARM32_td4_c asm ("r7") = (byte*)&L_AES_ARM32_td4;
3466+
#else
3467+
register word32* L_AES_ARM32_td_ecb_c = (word32*)L_AES_ARM32_td_ecb;
3468+
3469+
register byte* L_AES_ARM32_td4_c = (byte*)&L_AES_ARM32_td4;
3470+
3471+
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
33553472

33563473
__asm__ __volatile__ (
3357-
"mov r8, r4\n\t"
3358-
"mov r4, r5\n\t"
33593474
"mov lr, %[in]\n\t"
33603475
"mov r0, %[L_AES_ARM32_td_ecb]\n\t"
33613476
"mov r12, %[len]\n\t"
33623477
"mov r2, %[L_AES_ARM32_td4]\n\t"
3478+
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
3479+
"mov r8, r4\n\t"
3480+
#else
3481+
"mov r8, %[nr]\n\t"
3482+
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
3483+
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
3484+
"mov r4, r5\n\t"
3485+
#else
3486+
"mov r4, %[iv]\n\t"
3487+
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
33633488
"push {%[ks]-r4}\n\t"
33643489
"cmp r8, #10\n\t"
33653490
"beq L_AES_CBC_decrypt_loop_block_128_%=\n\t"
@@ -3983,16 +4108,26 @@ static const word32 L_GCM_gmult_len_r[] = {
39834108

39844109
void GCM_gmult_len(unsigned char* x_p, const unsigned char** m_p,
39854110
const unsigned char* data_p, unsigned long len_p);
4111+
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
39864112
void GCM_gmult_len(unsigned char* x_p, const unsigned char** m_p,
39874113
const unsigned char* data_p, unsigned long len_p)
4114+
#else
4115+
void GCM_gmult_len(unsigned char* x, const unsigned char** m,
4116+
const unsigned char* data, unsigned long len)
4117+
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
39884118
{
4119+
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
39894120
register unsigned char* x asm ("r0") = (unsigned char*)x_p;
39904121
register const unsigned char** m asm ("r1") = (const unsigned char**)m_p;
39914122
register const unsigned char* data asm ("r2") =
39924123
(const unsigned char*)data_p;
39934124
register unsigned long len asm ("r3") = (unsigned long)len_p;
39944125
register word32* L_GCM_gmult_len_r_c asm ("r4") =
39954126
(word32*)&L_GCM_gmult_len_r;
4127+
#else
4128+
register word32* L_GCM_gmult_len_r_c = (word32*)&L_GCM_gmult_len_r;
4129+
4130+
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
39964131

39974132
__asm__ __volatile__ (
39984133
"mov lr, %[L_GCM_gmult_len_r]\n\t"
@@ -4578,10 +4713,16 @@ static const word32* L_AES_ARM32_te_gcm = L_AES_ARM32_te_data;
45784713
void AES_GCM_encrypt(const unsigned char* in_p, unsigned char* out_p,
45794714
unsigned long len_p, const unsigned char* ks_p, int nr_p,
45804715
unsigned char* ctr_p);
4716+
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
45814717
void AES_GCM_encrypt(const unsigned char* in_p, unsigned char* out_p,
45824718
unsigned long len_p, const unsigned char* ks_p, int nr_p,
45834719
unsigned char* ctr_p)
4720+
#else
4721+
void AES_GCM_encrypt(const unsigned char* in, unsigned char* out,
4722+
unsigned long len, const unsigned char* ks, int nr, unsigned char* ctr)
4723+
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
45844724
{
4725+
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
45854726
register const unsigned char* in asm ("r0") = (const unsigned char*)in_p;
45864727
register unsigned char* out asm ("r1") = (unsigned char*)out_p;
45874728
register unsigned long len asm ("r2") = (unsigned long)len_p;
@@ -4590,10 +4731,22 @@ void AES_GCM_encrypt(const unsigned char* in_p, unsigned char* out_p,
45904731
register unsigned char* ctr asm ("r5") = (unsigned char*)ctr_p;
45914732
register word32* L_AES_ARM32_te_gcm_c asm ("r6") =
45924733
(word32*)L_AES_ARM32_te_gcm;
4734+
#else
4735+
register word32* L_AES_ARM32_te_gcm_c = (word32*)L_AES_ARM32_te_gcm;
4736+
4737+
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
45934738

45944739
__asm__ __volatile__ (
4740+
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
45954741
"mov r12, r4\n\t"
4742+
#else
4743+
"mov r12, %[nr]\n\t"
4744+
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
4745+
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
45964746
"mov r8, r5\n\t"
4747+
#else
4748+
"mov r8, %[ctr]\n\t"
4749+
#endif /* !WOLFSSL_NO_VAR_ASSIGN_REG */
45974750
"mov lr, %[in]\n\t"
45984751
"mov r0, %[L_AES_ARM32_te_gcm]\n\t"
45994752
"ldm r8, {r4, r5, r6, r7}\n\t"

0 commit comments

Comments
 (0)