[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