Commit 7aca3298 authored by Andy Polyakov's avatar Andy Polyakov
Browse files

bn/bn_lcl.h: use __int128 whenever possible, not only on MIPS.



Reviewed-by: default avatarRich Salz <rsalz@openssl.org>
parent 46288370
Loading
Loading
Loading
Loading
+9 −11
Original line number Diff line number Diff line
@@ -370,7 +370,13 @@ struct bn_gencb_st {
 *
 *                                      <appro@fy.chalmers.se>
 */
#  if defined(__alpha) && (defined(SIXTY_FOUR_BIT_LONG) || defined(SIXTY_FOUR_BIT))
#  if defined(__SIZEOF_INT128__) && __SIZEOF_INT128__==16 && \
      (defined(SIXRY_FOUR_BIT) || defined(SIXTY_FOUR_BIT_LONG))
#   define BN_UMULT_HIGH(a,b)          (((__uint128_t)(a)*(b))>>64)
#   define BN_UMULT_LOHI(low,high,a,b) ({       \
        __uint128_t ret=(__uint128_t)(a)*(b);   \
        (high)=ret>>64; (low)=ret;       })
#  elif defined(__alpha) && (defined(SIXTY_FOUR_BIT_LONG) || defined(SIXTY_FOUR_BIT))
#   if defined(__DECC)
#    include <c_asm.h>
#    define BN_UMULT_HIGH(a,b)   (BN_ULONG)asm("umulh %a0,%a1,%v0",(a),(b))
@@ -418,13 +424,6 @@ unsigned __int64 _umul128(unsigned __int64 a, unsigned __int64 b,
#   endif
#  elif defined(__mips) && (defined(SIXTY_FOUR_BIT) || defined(SIXTY_FOUR_BIT_LONG))
#   if defined(__GNUC__) && __GNUC__>=2
#    if defined(__SIZEOF_INT128__) && __SIZEOF_INT128__==16
      /* "h" constraint is not an option on R6 and was removed in 4.4 */
#     define BN_UMULT_HIGH(a,b)          (((__uint128_t)(a)*(b))>>64)
#     define BN_UMULT_LOHI(low,high,a,b) ({     \
        __uint128_t ret=(__uint128_t)(a)*(b);   \
        (high)=ret>>64; (low)=ret;       })
#    else
#    define BN_UMULT_HIGH(a,b) ({       \
        register BN_ULONG ret;          \
        asm ("dmultu    %1,%2"          \
@@ -436,7 +435,6 @@ unsigned __int64 _umul128(unsigned __int64 a, unsigned __int64 b,
             : "=l"(low),"=h"(high)     \
             : "r"(a), "r"(b));
#   endif
#   endif
#  elif defined(__aarch64__) && defined(SIXTY_FOUR_BIT_LONG)
#   if defined(__GNUC__) && __GNUC__>=2
#    define BN_UMULT_HIGH(a,b)   ({      \