Fixed __umul128 for MSVC ARM64.

This commit is contained in:
XMRig 2025-06-15 04:58:03 +07:00
parent 9c7468df64
commit 3b863cf88f
No known key found for this signature in database
GPG key ID: 446A53638BE94409

View file

@ -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;