* cipher/rijndael-riscv-zvkned.c (do_prepare_decryption): Unroll
loop.
--

Signed-off-by: Jussi Kivilinna <[email protected]>
---
 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


_______________________________________________
Gcrypt-devel mailing list
[email protected]
https://lists.gnupg.org/mailman/listinfo/gcrypt-devel

Reply via email to