[PATCH 3/3] aarch64-asm: use common CLEAR_REG definition
Jussi Kivilinna
jussi.kivilinna at iki.fi
Mon Sep 28 18:43:40 CEST 2026
* cipher/asm-common-aarch64.h (CLEAR_REG): Accept variadic arguments.
* cipher/chacha20-aarch64.S (clear): Remove; use CLEAR_REG.
* cipher/rijndael-armv8-aarch64-ce.S (CLEAR_REG): Remove.
* cipher/sha1-armv8-aarch64-ce.S: Likewise.
* cipher/sha256-armv8-aarch64-ce.S: Likewise.
* cipher/sha512-armv8-aarch64-ce.S: Likewise.
* cipher/sm3-aarch64.S (clear_vec): Remove; use CLEAR_REG.
--
Signed-off-by: Jussi Kivilinna <jussi.kivilinna at iki.fi>
---
cipher/asm-common-aarch64.h | 2 +-
cipher/chacha20-aarch64.S | 91 +++++++++++++++---------------
cipher/rijndael-armv8-aarch64-ce.S | 2 -
cipher/sha1-armv8-aarch64-ce.S | 5 --
cipher/sha256-armv8-aarch64-ce.S | 5 --
cipher/sha512-armv8-aarch64-ce.S | 6 --
cipher/sm3-aarch64.S | 29 +++++-----
7 files changed, 58 insertions(+), 82 deletions(-)
diff --git a/cipher/asm-common-aarch64.h b/cipher/asm-common-aarch64.h
index 821eeda5..d3da14e4 100644
--- a/cipher/asm-common-aarch64.h
+++ b/cipher/asm-common-aarch64.h
@@ -128,7 +128,7 @@
#define ret_spec_stop \
ret; SPEC_STOP;
-#define CLEAR_REG(reg) movi reg.16b, #0;
+#define CLEAR_REG(reg, ...) movi reg.16b, #0;
#define CLEAR_ALL_REGS() \
CLEAR_REG(v0); CLEAR_REG(v1); CLEAR_REG(v2); CLEAR_REG(v3); \
diff --git a/cipher/chacha20-aarch64.S b/cipher/chacha20-aarch64.S
index 692f0f6a..060e0243 100644
--- a/cipher/chacha20-aarch64.S
+++ b/cipher/chacha20-aarch64.S
@@ -107,9 +107,6 @@
vpunpckhqdq(x2, t2, x3); \
vpunpcklqdq(x2, t2, x2);
-#define clear(x) \
- movi x.16b, #0;
-
/**********************************************************************
4-way chacha20
**********************************************************************/
@@ -334,28 +331,28 @@ _gcry_chacha20_aarch64_blocks4:
b.ne .Loop4;
/* clear the used vector registers and stack */
- clear(VTMP0);
- clear(VTMP1);
- clear(VTMP2);
- clear(VTMP3);
- clear(X12_TMP);
- clear(X13_TMP);
- clear(X0);
- clear(X1);
- clear(X2);
- clear(X3);
- clear(X4);
- clear(X5);
- clear(X6);
- clear(X7);
- clear(X8);
- clear(X9);
- clear(X10);
- clear(X11);
- clear(X12);
- clear(X13);
- clear(X14);
- clear(X15);
+ CLEAR_REG(VTMP0);
+ CLEAR_REG(VTMP1);
+ CLEAR_REG(VTMP2);
+ CLEAR_REG(VTMP3);
+ CLEAR_REG(X12_TMP);
+ CLEAR_REG(X13_TMP);
+ CLEAR_REG(X0);
+ CLEAR_REG(X1);
+ CLEAR_REG(X2);
+ CLEAR_REG(X3);
+ CLEAR_REG(X4);
+ CLEAR_REG(X5);
+ CLEAR_REG(X6);
+ CLEAR_REG(X7);
+ CLEAR_REG(X8);
+ CLEAR_REG(X9);
+ CLEAR_REG(X10);
+ CLEAR_REG(X11);
+ CLEAR_REG(X12);
+ CLEAR_REG(X13);
+ CLEAR_REG(X14);
+ CLEAR_REG(X15);
eor x0, x0, x0
ret_spec_stop
@@ -618,28 +615,28 @@ _gcry_chacha20_poly1305_aarch64_blocks4:
POLY1305_STORE_STATE()
/* clear the used vector registers and stack */
- clear(VTMP0);
- clear(VTMP1);
- clear(VTMP2);
- clear(VTMP3);
- clear(X12_TMP);
- clear(X13_TMP);
- clear(X0);
- clear(X1);
- clear(X2);
- clear(X3);
- clear(X4);
- clear(X5);
- clear(X6);
- clear(X7);
- clear(X8);
- clear(X9);
- clear(X10);
- clear(X11);
- clear(X12);
- clear(X13);
- clear(X14);
- clear(X15);
+ CLEAR_REG(VTMP0);
+ CLEAR_REG(VTMP1);
+ CLEAR_REG(VTMP2);
+ CLEAR_REG(VTMP3);
+ CLEAR_REG(X12_TMP);
+ CLEAR_REG(X13_TMP);
+ CLEAR_REG(X0);
+ CLEAR_REG(X1);
+ CLEAR_REG(X2);
+ CLEAR_REG(X3);
+ CLEAR_REG(X4);
+ CLEAR_REG(X5);
+ CLEAR_REG(X6);
+ CLEAR_REG(X7);
+ CLEAR_REG(X8);
+ CLEAR_REG(X9);
+ CLEAR_REG(X10);
+ CLEAR_REG(X11);
+ CLEAR_REG(X12);
+ CLEAR_REG(X13);
+ CLEAR_REG(X14);
+ CLEAR_REG(X15);
eor x0, x0, x0
POLY1305_POP_REGS()
diff --git a/cipher/rijndael-armv8-aarch64-ce.S b/cipher/rijndael-armv8-aarch64-ce.S
index 5152fab7..ffff766e 100644
--- a/cipher/rijndael-armv8-aarch64-ce.S
+++ b/cipher/rijndael-armv8-aarch64-ce.S
@@ -237,8 +237,6 @@
/* Other functional macros */
-#define CLEAR_REG(reg) movi reg.16b, #0;
-
#define aes_clear_keys(nrounds) \
CLEAR_REG(vk0); \
CLEAR_REG(vk1); \
diff --git a/cipher/sha1-armv8-aarch64-ce.S b/cipher/sha1-armv8-aarch64-ce.S
index e309c08c..0eae3401 100644
--- a/cipher/sha1-armv8-aarch64-ce.S
+++ b/cipher/sha1-armv8-aarch64-ce.S
@@ -87,11 +87,6 @@ gcry_sha1_aarch64_ce_K_VEC:
sha1su0_fn( v##w0, v##w1, v##w2 );
-/* Other functional macros */
-
-#define CLEAR_REG(reg) movi reg.16b, #0;
-
-
.text
/*
diff --git a/cipher/sha256-armv8-aarch64-ce.S b/cipher/sha256-armv8-aarch64-ce.S
index 333e792d..bfe1c62c 100644
--- a/cipher/sha256-armv8-aarch64-ce.S
+++ b/cipher/sha256-armv8-aarch64-ce.S
@@ -97,11 +97,6 @@ gcry_sha256_aarch64_ce_K:
su1_fn( v##w0, v##w2, v##w3 );
-/* Other functional macros */
-
-#define CLEAR_REG(reg) movi reg.16b, #0;
-
-
.text
/*
diff --git a/cipher/sha512-armv8-aarch64-ce.S b/cipher/sha512-armv8-aarch64-ce.S
index fa225192..9be37a99 100644
--- a/cipher/sha512-armv8-aarch64-ce.S
+++ b/cipher/sha512-armv8-aarch64-ce.S
@@ -124,12 +124,6 @@
sha512h2 Q##gh, Q##cd, ab.2d; \
-/* Other functional macros */
-
-#undef CLEAR_REG
-#define CLEAR_REG(reg, ...) movi reg.16b, #0;
-
-
/*
* unsigned int
* _gcry_sha512_transform_armv8_ce (u64 state[8], const void *input_data,
diff --git a/cipher/sm3-aarch64.S b/cipher/sm3-aarch64.S
index 7ef64666..9939c815 100644
--- a/cipher/sm3-aarch64.S
+++ b/cipher/sm3-aarch64.S
@@ -125,9 +125,6 @@ ELF(.size _gcry_sm3_aarch64_consts,.-_gcry_sm3_aarch64_consts)
#define _(...) /*_*/
-#define clear_vec(x) \
- movi x.8h, #0;
-
#define rolw(o, a, n) \
ror o, a, #(32 - n);
@@ -596,31 +593,31 @@ _gcry_sm3_transform_aarch64:
/* Update the chaining variables. */
eor ra, ra, s0;
- clear_vec(W0);
+ CLEAR_REG(W0);
eor rb, rb, s1;
- clear_vec(W1);
+ CLEAR_REG(W1);
ldp s0, s1, [RSTATE, #16];
- clear_vec(W2);
+ CLEAR_REG(W2);
eor rc, rc, s2;
- clear_vec(W3);
+ CLEAR_REG(W3);
ldp k_even, k_odd, [RSTATE, #24];
- clear_vec(W4);
+ CLEAR_REG(W4);
eor rd, rd, s3;
- clear_vec(W5);
+ CLEAR_REG(W5);
eor re, re, s0;
- clear_vec(XTMP0);
+ CLEAR_REG(XTMP0);
stp ra, rb, [RSTATE, #0];
- clear_vec(XTMP1);
+ CLEAR_REG(XTMP1);
eor rf, rf, s1;
- clear_vec(XTMP2);
+ CLEAR_REG(XTMP2);
stp rc, rd, [RSTATE, #8];
- clear_vec(XTMP3);
+ CLEAR_REG(XTMP3);
eor rg, rg, k_even;
- clear_vec(XTMP4);
+ CLEAR_REG(XTMP4);
stp re, rf, [RSTATE, #16];
- clear_vec(XTMP5);
+ CLEAR_REG(XTMP5);
eor rh, rh, k_odd;
- clear_vec(XTMP6);
+ CLEAR_REG(XTMP6);
stp rg, rh, [RSTATE, #24];
/* Clear message expansion area */
--
2.53.0
More information about the Gcrypt-devel
mailing list