From 926f2194dffb9e85b86318b1b86c3487023d37a4 Mon Sep 17 00:00:00 2001 From: Brian Smith Date: Wed, 3 Feb 2016 20:26:25 -1000 Subject: [PATCH] Enable MSVC 128-bit multiplication regardless of OPENSSL_NO_ASM. This allows much code to be subsequently simplified and removed. Change-Id: I0ac256957c6eae9f35a70508bd454cb44f3f8653 Reviewed-on: https://boringssl-review.googlesource.com/7042 Reviewed-by: David Benjamin --- crypto/bn/internal.h | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/crypto/bn/internal.h b/crypto/bn/internal.h index c8f06347..0246aa99 100644 --- a/crypto/bn/internal.h +++ b/crypto/bn/internal.h @@ -125,7 +125,7 @@ #include -#if defined(OPENSSL_X86_64) && defined(_MSC_VER) && _MSC_VER >= 1400 +#if defined(OPENSSL_X86_64) && defined(_MSC_VER) #pragma warning(push, 3) #include #pragma warning(pop) @@ -259,8 +259,11 @@ int bn_mul_mont(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp, #endif /* !defined(BN_ULLONG) */ -#if !defined(OPENSSL_NO_ASM) && defined(OPENSSL_X86_64) -# if defined(__GNUC__) && __GNUC__ >= 2 +#if defined(OPENSSL_X86_64) +# if defined(_MSC_VER) +# define BN_UMULT_HIGH(a, b) __umulh((a), (b)) +# define BN_UMULT_LOHI(low, high, a, b) ((low) = _umul128((a), (b), &(high))) +# elif !defined(OPENSSL_NO_ASM) && defined(__GNUC__) # define BN_UMULT_HIGH(a,b) ({ \ register BN_ULONG ret,discard; \ __asm__ ("mulq %3" \ @@ -273,12 +276,11 @@ int bn_mul_mont(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp, : "=a"(low),"=d"(high) \ : "a"(a),"g"(b) \ : "cc"); -# elif defined(_MSC_VER) && _MSC_VER >= 1400 -# define BN_UMULT_HIGH(a, b) __umulh((a), (b)) -# define BN_UMULT_LOHI(low, high, a, b) ((low) = _umul128((a), (b), &(high))) # endif -#elif !defined(OPENSSL_NO_ASM) && defined(OPENSSL_AARCH64) -# if defined(__GNUC__) && __GNUC__>=2 +#endif + +#if defined(OPENSSL_AARCH64) +# if !defined(OPENSSL_NO_ASM) && defined(__GNUC__) # define BN_UMULT_HIGH(a,b) ({ \ register BN_ULONG ret; \ __asm__ ("umulh %0,%1,%2" \