bn_lcl.h: add MIPS III-specific BN_UMULT_LOHI as alternative to porting
crypto/bn/asm/mips3.s from IRIX. Performance improvement is not as impressive as with complete assembler, but still... it's almost 2.5x [on R5000].
This commit is contained in:
parent
4407700c40
commit
4f38565204
@ -238,7 +238,7 @@ extern "C" {
|
|||||||
# if defined(__DECC)
|
# if defined(__DECC)
|
||||||
# include <c_asm.h>
|
# include <c_asm.h>
|
||||||
# define BN_UMULT_HIGH(a,b) (BN_ULONG)asm("umulh %a0,%a1,%v0",(a),(b))
|
# define BN_UMULT_HIGH(a,b) (BN_ULONG)asm("umulh %a0,%a1,%v0",(a),(b))
|
||||||
# elif defined(__GNUC__)
|
# elif defined(__GNUC__) && __GNUC__>=2
|
||||||
# define BN_UMULT_HIGH(a,b) ({ \
|
# define BN_UMULT_HIGH(a,b) ({ \
|
||||||
register BN_ULONG ret; \
|
register BN_ULONG ret; \
|
||||||
asm ("umulh %1,%2,%0" \
|
asm ("umulh %1,%2,%0" \
|
||||||
@ -247,7 +247,7 @@ extern "C" {
|
|||||||
ret; })
|
ret; })
|
||||||
# endif /* compiler */
|
# endif /* compiler */
|
||||||
# elif defined(_ARCH_PPC) && defined(__64BIT__) && defined(SIXTY_FOUR_BIT_LONG)
|
# elif defined(_ARCH_PPC) && defined(__64BIT__) && defined(SIXTY_FOUR_BIT_LONG)
|
||||||
# if defined(__GNUC__)
|
# if defined(__GNUC__) && __GNUC__>=2
|
||||||
# define BN_UMULT_HIGH(a,b) ({ \
|
# define BN_UMULT_HIGH(a,b) ({ \
|
||||||
register BN_ULONG ret; \
|
register BN_ULONG ret; \
|
||||||
asm ("mulhdu %0,%1,%2" \
|
asm ("mulhdu %0,%1,%2" \
|
||||||
@ -257,7 +257,7 @@ extern "C" {
|
|||||||
# endif /* compiler */
|
# endif /* compiler */
|
||||||
# elif (defined(__x86_64) || defined(__x86_64__)) && \
|
# elif (defined(__x86_64) || defined(__x86_64__)) && \
|
||||||
(defined(SIXTY_FOUR_BIT_LONG) || defined(SIXTY_FOUR_BIT))
|
(defined(SIXTY_FOUR_BIT_LONG) || defined(SIXTY_FOUR_BIT))
|
||||||
# if defined(__GNUC__)
|
# if defined(__GNUC__) && __GNUC__>=2
|
||||||
# define BN_UMULT_HIGH(a,b) ({ \
|
# define BN_UMULT_HIGH(a,b) ({ \
|
||||||
register BN_ULONG ret,discard; \
|
register BN_ULONG ret,discard; \
|
||||||
asm ("mulq %3" \
|
asm ("mulq %3" \
|
||||||
@ -280,6 +280,19 @@ extern "C" {
|
|||||||
# define BN_UMULT_HIGH(a,b) __umulh((a),(b))
|
# define BN_UMULT_HIGH(a,b) __umulh((a),(b))
|
||||||
# define BN_UMULT_LOHI(low,high,a,b) ((low)=_umul128((a),(b),&(high)))
|
# define BN_UMULT_LOHI(low,high,a,b) ((low)=_umul128((a),(b),&(high)))
|
||||||
# endif
|
# endif
|
||||||
|
# elif defined(__mips) && (defined(SIXTY_FOUR_BIT) || defined(SIXTY_FOUR_BIT_LONG))
|
||||||
|
# if defined(__GNUC__) && __GNUC__>=2
|
||||||
|
# define BN_UMULT_HIGH(a,b) ({ \
|
||||||
|
register BN_ULONG ret; \
|
||||||
|
asm ("dmultu %1,%2" \
|
||||||
|
: "=h"(ret) \
|
||||||
|
: "r"(a), "r"(b) : "l"); \
|
||||||
|
ret; })
|
||||||
|
# define BN_UMULT_LOHI(low,high,a,b) \
|
||||||
|
asm ("dmultu %2,%3" \
|
||||||
|
: "=l"(low),"=h"(high) \
|
||||||
|
: "r"(a), "r"(b));
|
||||||
|
# endif
|
||||||
# endif /* cpu */
|
# endif /* cpu */
|
||||||
#endif /* OPENSSL_NO_ASM */
|
#endif /* OPENSSL_NO_ASM */
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user