Fixed __umul128 for MSVC ARM64.
This commit is contained in:
parent
9c7468df64
commit
3b863cf88f
1 changed files with 13 additions and 6 deletions
|
@ -23,15 +23,22 @@
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
|
|
||||||
#ifdef XMRIG_64_BIT
|
#if defined(XMRIG_64_BIT)
|
||||||
# ifdef _MSC_VER
|
# if defined(_MSC_VER)
|
||||||
# include <intrin.h>
|
# include <intrin.h>
|
||||||
# pragma intrinsic(_umul128)
|
# if defined(XMRIG_ARM)
|
||||||
# define __umul128 _umul128
|
#pragma intrinsic(__umulh)
|
||||||
# elif defined __GNUC__
|
static inline uint64_t __umul128(uint64_t a, uint64_t b, uint64_t *high) {
|
||||||
|
*high = __umulh(a, b);
|
||||||
|
return a * b;
|
||||||
|
}
|
||||||
|
# else
|
||||||
|
# pragma intrinsic(_umul128)
|
||||||
|
# define __umul128 _umul128
|
||||||
|
# endif
|
||||||
|
# elif defined(__GNUC__)
|
||||||
static inline uint64_t _umul128(uint64_t a, uint64_t b, uint64_t* hi)
|
static inline uint64_t _umul128(uint64_t a, uint64_t b, uint64_t* hi)
|
||||||
{
|
{
|
||||||
unsigned __int128 r = (unsigned __int128) a * (unsigned __int128) b;
|
unsigned __int128 r = (unsigned __int128) a * (unsigned __int128) b;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue