]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
Add ROTATE inline RISC-V zbb/zbkb asm for chacha
authorHongren (Zenithal) Zheng <i@zenithal.me>
Wed, 11 May 2022 10:09:46 +0000 (18:09 +0800)
committerHugo Landau <hlandau@openssl.org>
Wed, 13 Jul 2022 17:15:12 +0000 (18:15 +0100)
Reviewed-by: Hugo Landau <hlandau@openssl.org>
Reviewed-by: Paul Dale <pauli@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/18289)

crypto/chacha/chacha_enc.c

index c5d1d63d80272f02fce98b1018f049ee4d729aee..f8f1835906d6c1881fdf8fd493552acb5afc5379 100644 (file)
@@ -24,6 +24,28 @@ typedef union {
 
 # define ROTATE(v, n) (((v) << (n)) | ((v) >> (32 - (n))))
 
+# ifndef PEDANTIC
+#  if defined(__GNUC__) && __GNUC__>=2 && \
+      !defined(OPENSSL_NO_ASM) && !defined(OPENSSL_NO_INLINE_ASM)
+#   if defined(__riscv_zbb) || defined(__riscv_zbkb)
+#    if __riscv_xlen == 64
+#    undef ROTATE
+#    define ROTATE(x, n) ({ u32 ret;                   \
+                        asm ("roriw %0, %1, %2"        \
+                        : "=r"(ret)                    \
+                        : "r"(x), "i"(32 - (n))); ret;})
+#    endif
+#    if __riscv_xlen == 32
+#    undef ROTATE
+#    define ROTATE(x, n) ({ u32 ret;                   \
+                        asm ("rori %0, %1, %2"         \
+                        : "=r"(ret)                    \
+                        : "r"(x), "i"(32 - (n))); ret;})
+#    endif
+#   endif
+#  endif
+# endif
+
 # define U32TO8_LITTLE(p, v) do { \
                                 (p)[0] = (u8)(v >>  0); \
                                 (p)[1] = (u8)(v >>  8); \