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
206210void AES_invert_key (unsigned char * ks_p , word32 rounds_p );
211+ #ifndef WOLFSSL_NO_VAR_ASSIGN_REG
207212void 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
424439void AES_set_encrypt_key (const unsigned char * key_p , word32 len_p ,
425440 unsigned char * ks_p );
441+ #ifndef WOLFSSL_NO_VAR_ASSIGN_REG
426442void 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
940967void 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
942970void 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,
15951628static const word32 * L_AES_ARM32_te_ecb = L_AES_ARM32_te_data ;
15961629void 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
15981632void 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;
18511898void 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
18541902void 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;
21242189void 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
21272193void 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 )
24002483void AES_decrypt_block (const word32 * td_p , int nr_p , const byte * td4_p );
2484+ #ifndef WOLFSSL_NO_VAR_ASSIGN_REG
24012485void 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 )
30873176void 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
30893179void 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,
33393444void 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
33423448void 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
39844109void 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
39864112void 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;
45784713void 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
45814717void 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