bn_lcl.h: gcc removed support for "h" constraint, which broke inline

assembler [from HEAD].
This commit is contained in:
Andy Polyakov 2012-09-01 13:21:24 +00:00
parent 957c7c0e88
commit d46a1a6178

View file

@ -300,16 +300,23 @@ extern "C" {
# endif # endif
# elif defined(__mips) && (defined(SIXTY_FOUR_BIT) || defined(SIXTY_FOUR_BIT_LONG)) # elif defined(__mips) && (defined(SIXTY_FOUR_BIT) || defined(SIXTY_FOUR_BIT_LONG))
# if defined(__GNUC__) && __GNUC__>=2 # if defined(__GNUC__) && __GNUC__>=2
# define BN_UMULT_HIGH(a,b) ({ \ # if __GNUC__>=4 && __GNUC_MINOR__>=4 /* "h" constraint is no more since 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; \ register BN_ULONG ret; \
asm ("dmultu %1,%2" \ asm ("dmultu %1,%2" \
: "=h"(ret) \ : "=h"(ret) \
: "r"(a), "r"(b) : "l"); \ : "r"(a), "r"(b) : "l"); \
ret; }) ret; })
# define BN_UMULT_LOHI(low,high,a,b) \ # define BN_UMULT_LOHI(low,high,a,b)\
asm ("dmultu %2,%3" \ asm ("dmultu %2,%3" \
: "=l"(low),"=h"(high) \ : "=l"(low),"=h"(high) \
: "r"(a), "r"(b)); : "r"(a), "r"(b));
# endif
# endif # endif
# endif /* cpu */ # endif /* cpu */
#endif /* OPENSSL_NO_ASM */ #endif /* OPENSSL_NO_ASM */