[PATCH 4/6] rijndael-riscv-zvkned: optimize do_prepare_decryption
Jussi Kivilinna <[email protected]> Mon, 29 Dec 2025 20:01:37 +0200
| Newsgroups | gmane.comp.encryption.gpg.libgcrypt.devel |
|---|---|
| Message-ID | <[email protected]> |
* 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