Skip to content

Commit f8bb889

Browse files
committed
Armv8 (Aarch64) ASM fixes for Green Hills compiler
Change branch instructions to proper form. Use constant value rather than POLY1305_BLOCK_SIZE. Remove duplicate clobber registers - both w and x versions. Make clamp unconditionally compiled.
1 parent 978a29d commit f8bb889

7 files changed

Lines changed: 117 additions & 122 deletions

File tree

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

Lines changed: 41 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -978,9 +978,9 @@ static void wc_aes_ctr_encrypt_asm(Aes* aes, byte* out, const byte* in,
978978
/* double block */
979979
"1: \n"
980980
"CMP w11, #1 \n"
981-
"BEQ 2f \n"
981+
"B.EQ 2f \n"
982982
"CMP w11, #0 \n"
983-
"BEQ 3f \n"
983+
"B.EQ 3f \n"
984984

985985
"MOV v0.16b, v13.16b \n"
986986
"AESE v0.16b, v1.16b \n"
@@ -1129,9 +1129,9 @@ static void wc_aes_ctr_encrypt_asm(Aes* aes, byte* out, const byte* in,
11291129
/* double block */
11301130
"1: \n"
11311131
"CMP w11, #1 \n"
1132-
"BEQ 2f \n"
1132+
"B.EQ 2f \n"
11331133
"CMP w11, #0 \n"
1134-
"BEQ 3f \n"
1134+
"B.EQ 3f \n"
11351135

11361136
"MOV v0.16b, v15.16b \n"
11371137
"AESE v0.16b, v1.16b \n"
@@ -1295,9 +1295,9 @@ static void wc_aes_ctr_encrypt_asm(Aes* aes, byte* out, const byte* in,
12951295
/* double block */
12961296
"1: \n"
12971297
"CMP w11, #1 \n"
1298-
"BEQ 2f \n"
1298+
"B.EQ 2f \n"
12991299
"CMP w11, #0 \n"
1300-
"BEQ 3f \n"
1300+
"B.EQ 3f \n"
13011301

13021302
"MOV v0.16b, v17.16b \n"
13031303
"AESE v0.16b, v1.16b \n"
@@ -22274,7 +22274,7 @@ int AES_GCM_decrypt_AARCH64(Aes* aes, byte* out, const byte* in, word32 sz,
2227422274

2227522275
"MOV r12, %[R] \n"
2227622276
"CMP r12, #10 \n"
22277-
"BEQ 1f \n"
22277+
"B.EQ 1f \n"
2227822278
"VLD1.32 {q1}, [%[Key]]! \n"
2227922279
"AESMC.8 q0, q0\n"
2228022280
"VLD1.32 {q2}, [%[Key]]! \n"
@@ -22283,7 +22283,7 @@ int AES_GCM_decrypt_AARCH64(Aes* aes, byte* out, const byte* in, word32 sz,
2228322283
"AESE.8 q0, q2\n"
2228422284

2228522285
"CMP r12, #12 \n"
22286-
"BEQ 1f \n"
22286+
"B.EQ 1f \n"
2228722287
"VLD1.32 {q1}, [%[Key]]! \n"
2228822288
"AESMC.8 q0, q0\n"
2228922289
"VLD1.32 {q2}, [%[Key]]! \n"
@@ -22350,7 +22350,7 @@ int AES_GCM_decrypt_AARCH64(Aes* aes, byte* out, const byte* in, word32 sz,
2235022350

2235122351
"MOV r12, %[R] \n"
2235222352
"CMP r12, #10 \n"
22353-
"BEQ 1f \n"
22353+
"B.EQ 1f \n"
2235422354
"VLD1.32 {q1}, [%[Key]]! \n"
2235522355
"AESIMC.8 q0, q0\n"
2235622356
"VLD1.32 {q2}, [%[Key]]! \n"
@@ -22359,7 +22359,7 @@ int AES_GCM_decrypt_AARCH64(Aes* aes, byte* out, const byte* in, word32 sz,
2235922359
"AESD.8 q0, q2\n"
2236022360

2236122361
"CMP r12, #12 \n"
22362-
"BEQ 1f \n"
22362+
"B.EQ 1f \n"
2236322363
"VLD1.32 {q1}, [%[Key]]! \n"
2236422364
"AESIMC.8 q0, q0\n"
2236522365
"VLD1.32 {q2}, [%[Key]]! \n"
@@ -22462,7 +22462,7 @@ int AES_GCM_decrypt_AARCH64(Aes* aes, byte* out, const byte* in, word32 sz,
2246222462
"VST1.32 {q0}, [%[out]]! \n"
2246322463

2246422464
"CMP r11, #0 \n"
22465-
"BEQ 2f \n"
22465+
"B.EQ 2f \n"
2246622466
"VLD1.32 {q12}, [%[input]]! \n"
2246722467
"B 1b \n"
2246822468

@@ -22529,7 +22529,7 @@ int AES_GCM_decrypt_AARCH64(Aes* aes, byte* out, const byte* in, word32 sz,
2252922529
"VST1.32 {q0}, [%[out]]! \n"
2253022530

2253122531
"CMP r11, #0 \n"
22532-
"BEQ 2f \n"
22532+
"B.EQ 2f \n"
2253322533
"VLD1.32 {q12}, [%[input]]! \n"
2253422534
"B 1b \n"
2253522535

@@ -22603,7 +22603,7 @@ int AES_GCM_decrypt_AARCH64(Aes* aes, byte* out, const byte* in, word32 sz,
2260322603
"SUB %[Key], %[Key], #16 \n"
2260422604

2260522605
"CMP r11, #0 \n"
22606-
"BEQ 2f \n"
22606+
"B.EQ 2f \n"
2260722607
"VLD1.32 {q12}, [%[input]]! \n"
2260822608
"B 1b \n"
2260922609

@@ -22701,7 +22701,7 @@ int AES_GCM_decrypt_AARCH64(Aes* aes, byte* out, const byte* in, word32 sz,
2270122701
"VMOV.32 q13, q12 \n"
2270222702

2270322703
"CMP r11, #0 \n"
22704-
"BEQ 2f \n"
22704+
"B.EQ 2f \n"
2270522705
"VLD1.32 {q0}, [%[input]]! \n"
2270622706
"B 1b \n"
2270722707

@@ -22770,7 +22770,7 @@ int AES_GCM_decrypt_AARCH64(Aes* aes, byte* out, const byte* in, word32 sz,
2277022770
"VMOV.32 q14, q15 \n"
2277122771

2277222772
"CMP r11, #0 \n"
22773-
"BEQ 2f \n"
22773+
"B.EQ 2f \n"
2277422774
"VLD1.32 {q0}, [%[input]]! \n"
2277522775
"B 1b \n"
2277622776

@@ -22846,7 +22846,7 @@ int AES_GCM_decrypt_AARCH64(Aes* aes, byte* out, const byte* in, word32 sz,
2284622846
"VMOV.32 q14, q15 \n"
2284722847

2284822848
"CMP r11, #0 \n"
22849-
"BEQ 2f \n"
22849+
"B.EQ 2f \n"
2285022850
"VLD1.32 {q0}, [%[input]]! \n"
2285122851
"B 1b \n"
2285222852

@@ -22902,9 +22902,9 @@ static void wc_aes_ctr_encrypt_asm(Aes* aes, byte* out, const byte* in,
2290222902
/* double block */
2290322903
"1: \n"
2290422904
"CMP r11, #1 \n"
22905-
"BEQ 2f \n"
22905+
"B.EQ 2f \n"
2290622906
"CMP r11, #0 \n"
22907-
"BEQ 3f \n"
22907+
"B.EQ 3f \n"
2290822908

2290922909
"VMOV.32 q0, q13 \n"
2291022910
"AESE.8 q0, q1\n"
@@ -23066,9 +23066,9 @@ static void wc_aes_ctr_encrypt_asm(Aes* aes, byte* out, const byte* in,
2306623066
/* double block */
2306723067
"1: \n"
2306823068
"CMP r11, #1 \n"
23069-
"BEQ 2f \n"
23069+
"B.EQ 2f \n"
2307023070
"CMP r11, #0 \n"
23071-
"BEQ 3f \n"
23071+
"B.EQ 3f \n"
2307223072

2307323073
"VMOV.32 q0, q13\n"
2307423074
"AESE.8 q0, q1\n"
@@ -23252,9 +23252,9 @@ static void wc_aes_ctr_encrypt_asm(Aes* aes, byte* out, const byte* in,
2325223252
/* double block */
2325323253
"1: \n"
2325423254
"CMP r11, #1 \n"
23255-
"BEQ 2f \n"
23255+
"B.EQ 2f \n"
2325623256
"CMP r11, #0 \n"
23257-
"BEQ 3f \n"
23257+
"B.EQ 3f \n"
2325823258

2325923259
"VMOV.32 q0, q13 \n"
2326023260
"AESE.8 q0, q1\n"
@@ -25017,11 +25017,11 @@ void AES_XTS_encrypt_AARCH64(XtsAes* xaes, byte* out, const byte* in, word32 sz,
2501725017

2501825018
"# Put last 2 blocks of keys based on rounds into v14, v15\n"
2501925019
"SUBS WZR, %w[rounds], #14 \n"
25020-
"BEQ 40f \n"
25020+
"B.EQ 40f \n"
2502125021
"SUBS WZR, %w[rounds], #12 \n"
2502225022
"MOV v14.16b, v12.16b \n"
2502325023
"MOV v15.16b, v13.16b \n"
25024-
"BEQ 40f \n"
25024+
"B.EQ 40f \n"
2502525025
"MOV v14.16b, v10.16b \n"
2502625026
"MOV v15.16b, v11.16b \n"
2502725027
"40: \n"
@@ -25041,17 +25041,17 @@ void AES_XTS_encrypt_AARCH64(XtsAes* xaes, byte* out, const byte* in, word32 sz,
2504125041

2504225042
"# Put last 2 blocks of keys based on rounds into v14, v15\n"
2504325043
"SUBS WZR, %w[rounds], #14 \n"
25044-
"BEQ 41f \n"
25044+
"B.EQ 41f \n"
2504525045
"SUBS WZR, %w[rounds], #10 \n"
2504625046
"MOV v14.16b, v10.16b \n"
2504725047
"MOV v15.16b, v11.16b \n"
25048-
"BEQ 41f \n"
25048+
"B.EQ 41f \n"
2504925049
"MOV v14.16b, v12.16b \n"
2505025050
"MOV v15.16b, v13.16b \n"
2505125051
"41: \n"
2505225052

2505325053
"SUBS WZR, %w[blocks], #4 \n"
25054-
"BLT 1f \n"
25054+
"B.LT 1f \n"
2505525055

2505625056
"AND %w[sz], %w[sz], 0x3f \n"
2505725057

@@ -25174,7 +25174,7 @@ void AES_XTS_encrypt_AARCH64(XtsAes* xaes, byte* out, const byte* in, word32 sz,
2517425174
"AESMC v19.16b, v19.16b \n"
2517525175

2517625176
"SUBS WZR, %w[rounds], #10 \n"
25177-
"BEQ 21f \n"
25177+
"B.EQ 21f \n"
2517825178
"AESE v16.16b, v10.16b \n"
2517925179
"AESMC v16.16b, v16.16b \n"
2518025180
"AESE v17.16b, v10.16b \n"
@@ -25193,7 +25193,7 @@ void AES_XTS_encrypt_AARCH64(XtsAes* xaes, byte* out, const byte* in, word32 sz,
2519325193
"AESMC v19.16b, v19.16b \n"
2519425194

2519525195
"SUBS WZR, %w[rounds], #12 \n"
25196-
"BEQ 21f \n"
25196+
"B.EQ 21f \n"
2519725197
"AESE v16.16b, v12.16b \n"
2519825198
"AESMC v16.16b, v16.16b \n"
2519925199
"AESE v17.16b, v12.16b \n"
@@ -25231,7 +25231,7 @@ void AES_XTS_encrypt_AARCH64(XtsAes* xaes, byte* out, const byte* in, word32 sz,
2523125231
"ST1 {v16.16b-v19.16b}, [%[out]], #64 \n"
2523225232

2523325233
"SUBS %w[blocks], %w[blocks], #4 \n"
25234-
"BGE 20b \n"
25234+
"B.GE 20b \n"
2523525235
"ADD %w[blocks], %w[blocks], #4 \n"
2523625236

2523725237
"CBZ %w[sz], 3f \n"
@@ -25340,11 +25340,11 @@ void AES_XTS_decrypt_AARCH64(XtsAes* xaes, byte* out, const byte* in, word32 sz,
2534025340
"LD1 {v13.2d-v15.2d}, [x10] \n"
2534125341

2534225342
"SUBS WZR, %w[rounds], #14 \n"
25343-
"BEQ 40f \n"
25343+
"B.EQ 40f \n"
2534425344
"SUBS WZR, %w[rounds], #12 \n"
2534525345
"MOV v14.16b, v12.16b \n"
2534625346
"MOV v15.16b, v13.16b \n"
25347-
"BEQ 40f \n"
25347+
"B.EQ 40f \n"
2534825348
"MOV v14.16b, v10.16b \n"
2534925349
"MOV v15.16b, v11.16b \n"
2535025350
"40: \n"
@@ -25362,19 +25362,19 @@ void AES_XTS_decrypt_AARCH64(XtsAes* xaes, byte* out, const byte* in, word32 sz,
2536225362
"LD1 {v13.2d-v15.2d}, [x11] \n"
2536325363

2536425364
"SUBS WZR, %w[rounds], #14 \n"
25365-
"BEQ 41f \n"
25365+
"B.EQ 41f \n"
2536625366
"SUBS WZR, %w[rounds], #12 \n"
2536725367
"MOV v14.16b, v12.16b \n"
2536825368
"MOV v15.16b, v13.16b \n"
25369-
"BEQ 41f \n"
25369+
"B.EQ 41f \n"
2537025370
"MOV v14.16b, v10.16b \n"
2537125371
"MOV v15.16b, v11.16b \n"
2537225372
"41: \n"
2537325373

2537425374
"CBZ %w[blocks], 3f \n"
2537525375

2537625376
"SUBS WZR, %w[blocks], #4 \n"
25377-
"BLT 1f \n"
25377+
"B.LT 1f \n"
2537825378

2537925379
"AND x17, x19, x10, ASR #63\n"
2538025380
"EXTR x12, x10, x9, #63 \n"
@@ -25495,7 +25495,7 @@ void AES_XTS_decrypt_AARCH64(XtsAes* xaes, byte* out, const byte* in, word32 sz,
2549525495
"AESIMC v19.16b, v19.16b \n"
2549625496

2549725497
"SUBS WZR, %w[rounds], #10 \n"
25498-
"BEQ 21f \n"
25498+
"B.EQ 21f \n"
2549925499
"AESD v16.16b, v10.16b \n"
2550025500
"AESIMC v16.16b, v16.16b \n"
2550125501
"AESD v17.16b, v10.16b \n"
@@ -25514,7 +25514,7 @@ void AES_XTS_decrypt_AARCH64(XtsAes* xaes, byte* out, const byte* in, word32 sz,
2551425514
"AESIMC v19.16b, v19.16b \n"
2551525515

2551625516
"SUBS WZR, %w[rounds], #12 \n"
25517-
"BEQ 21f \n"
25517+
"B.EQ 21f \n"
2551825518
"AESD v16.16b, v12.16b \n"
2551925519
"AESIMC v16.16b, v16.16b \n"
2552025520
"AESD v17.16b, v12.16b \n"
@@ -25553,7 +25553,7 @@ void AES_XTS_decrypt_AARCH64(XtsAes* xaes, byte* out, const byte* in, word32 sz,
2555325553

2555425554
"SUBS %w[blocks], %w[blocks], #4 \n"
2555525555
"SUB %w[sz], %w[sz], #64 \n"
25556-
"BGE 20b \n"
25556+
"B.GE 20b \n"
2555725557
"ADD %w[blocks], %w[blocks], #4 \n"
2555825558

2555925559
"CBZ %w[sz], 4f \n"
@@ -25914,7 +25914,7 @@ int wc_AesXtsEncrypt(XtsAes* xaes, byte* out, const byte* in, word32 sz,
2591425914
"BGT 1b \n"
2591525915

2591625916
"CMP %[sz], #0 \n"
25917-
"BEQ 3f \n"
25917+
"B.EQ 3f \n"
2591825918

2591925919
"30: \n"
2592025920
"#Partial block \n"
@@ -26026,7 +26026,7 @@ int wc_AesXtsDecrypt(XtsAes* xaes, byte* out, const byte* in, word32 sz,
2602626026
"VLD1.32 {d18, d19}, [%[key2]]! \n"
2602726027

2602826028
"CMP %[blocks], #0 \n"
26029-
"BEQ 3f \n"
26029+
"B.EQ 3f \n"
2603026030

2603126031
"1: \n"
2603226032
"VLD1.32 {q0}, [%[in]]! \n"
@@ -26050,7 +26050,7 @@ int wc_AesXtsDecrypt(XtsAes* xaes, byte* out, const byte* in, word32 sz,
2605026050
"BGT 1b \n"
2605126051

2605226052
"CMP %[sz], #0 \n"
26053-
"BEQ 4f \n"
26053+
"B.EQ 4f \n"
2605426054

2605526055
"3: \n"
2605626056

0 commit comments

Comments
 (0)