From d01df6f0fe7345b00a19d3fd859f0465dd8a4fef Mon Sep 17 00:00:00 2001 From: jsing <> Date: Tue, 31 Jan 2023 05:53:49 +0000 Subject: Provide inline assembly versions of bn_umul_hilo() for aarch64/amd64/i386. ok tb@ --- src/lib/libcrypto/bn/arch/aarch64/bn_arch.h | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) (limited to 'src/lib/libcrypto/bn/arch/aarch64') diff --git a/src/lib/libcrypto/bn/arch/aarch64/bn_arch.h b/src/lib/libcrypto/bn/arch/aarch64/bn_arch.h index 136adf0e97..5cf25adc48 100644 --- a/src/lib/libcrypto/bn/arch/aarch64/bn_arch.h +++ b/src/lib/libcrypto/bn/arch/aarch64/bn_arch.h @@ -1,4 +1,4 @@ -/* $OpenBSD: bn_arch.h,v 1.1 2023/01/20 10:04:33 jsing Exp $ */ +/* $OpenBSD: bn_arch.h,v 1.2 2023/01/31 05:53:49 jsing Exp $ */ /* * Copyright (c) 2023 Joel Sing * @@ -15,10 +15,30 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +#include + #ifndef HEADER_BN_ARCH_H #define HEADER_BN_ARCH_H #ifndef OPENSSL_NO_ASM +#if defined(__GNUC__) +#define HAVE_BN_UMUL_HILO + +static inline void +bn_umul_hilo(BN_ULONG a, BN_ULONG b, BN_ULONG *out_h, BN_ULONG *out_l) +{ + BN_ULONG h, l; + + /* Unsigned multiplication using a umulh/mul pair. */ + __asm__ ("umulh %0, %2, %3; mul %1, %2, %3" + : "=r"(h), "=r"(l) + : "r"(a), "r"(b)); + + *out_h = h; + *out_l = l; +} +#endif /* __GNUC__ */ + #endif #endif -- cgit v1.2.3-55-g6feb