[PATCH 4/6] rijndael-riscv-zvkned: optimize do_prepare_decryption
Jussi Kivilinna
jussi.kivilinna at iki.fi
Mon Dec 29 19:01:37 CET 2025
* cipher/rijndael-riscv-zvkned.c (do_prepare_decryption): Unroll
loop.
--
Signed-off-by: Jussi Kivilinna <jussi.kivilinna at iki.fi>
---
cipher/rijndael-riscv-zvkned.c | 30 ++++++++++++++++++++++++++----
1 file changed, 26 insertions(+), 4 deletions(-)
diff --git a/cipher/rijndael-riscv-zvkned.c b/cipher/rijndael-riscv-zvkned.c
index 703950e1..434b9562 100644
--- a/cipher/rijndael-riscv-zvkned.c
+++ b/cipher/rijndael-riscv-zvkned.c
@@ -339,14 +339,36 @@ do_prepare_decryption(RIJNDAEL_context *ctx)
int rr;
int r;
+#define COPY_KEY() \
+ __riscv_vse32_v_u32m1(dkey + r * 4, \
+ __riscv_vle32_v_u32m1(ekey + rr * 4, vl), \
+ vl)
+
r = 0;
rr = rounds;
- for (r = 0, rr = rounds; r <= rounds; r++, rr--)
+ COPY_KEY(); r++; rr--;
+ COPY_KEY(); r++; rr--;
+ COPY_KEY(); r++; rr--;
+ COPY_KEY(); r++; rr--;
+ COPY_KEY(); r++; rr--;
+ COPY_KEY(); r++; rr--;
+ COPY_KEY(); r++; rr--;
+ COPY_KEY(); r++; rr--;
+ COPY_KEY(); r++; rr--;
+ COPY_KEY(); r++; rr--;
+ if (rr > 0)
{
- __riscv_vse32_v_u32m1(dkey + r * 4,
- __riscv_vle32_v_u32m1(ekey + rr * 4, vl),
- vl);
+ COPY_KEY(); r++; rr--;
+ COPY_KEY(); r++; rr--;
+ if (rr > 0)
+ {
+ COPY_KEY(); r++; rr--;
+ COPY_KEY(); r++; rr--;
+ }
}
+ COPY_KEY();
+
+#undef COPY_KEY
}
void ASM_FUNC_ATTR_NOINLINE FUNC_ATTR_OPT_O2
--
2.51.0
More information about the Gcrypt-devel
mailing list