Added backward compatibility support.

This commit is contained in:
XMRig 2022-04-15 14:13:45 +07:00
parent 6106bf30de
commit dfc3b4632a
No known key found for this signature in database
GPG key ID: 446A53638BE94409
4 changed files with 51 additions and 20 deletions

View file

@ -21,27 +21,31 @@
*
*/
#pragma once
#ifndef XMRIG_UMUL128_H
#define XMRIG_UMUL128_H
#include "version.h"
#include <cstdint>
#ifdef XMRIG_64_BIT
# ifdef _MSC_VER
# if defined(_MSC_VER)
# include <intrin.h>
# pragma intrinsic(_umul128)
# define __umul128 _umul128
# elif defined __GNUC__
static inline uint64_t _umul128(uint64_t a, uint64_t b, uint64_t* hi)
# define xmrig_umul128 _umul128
# elif defined(__GNUC__)
static inline uint64_t xmrig_umul128(uint64_t a, uint64_t b, uint64_t* hi)
{
unsigned __int128 r = (unsigned __int128) a * (unsigned __int128) b;
*hi = r >> 64;
return (uint64_t) r;
}
# define __umul128 _umul128
# endif
#else
static inline uint64_t __umul128(uint64_t multiplier, uint64_t multiplicand, uint64_t *product_hi) {
static inline uint64_t xmrig_umul128(uint64_t multiplier, uint64_t multiplicand, uint64_t *product_hi) {
// multiplier = ab = a * 2^32 + b
// multiplicand = cd = c * 2^32 + d
// ab * cd = a * c * 2^64 + (a * d + b * c) * 2^32 + b * d
@ -66,3 +70,11 @@ static inline uint64_t __umul128(uint64_t multiplier, uint64_t multiplicand, uin
return product_lo;
}
#endif
#if !defined(XMRIG_BASE_VERSION)
# define __umul128 xmrig_umul128
#endif
#endif // XMRIG_UMUL128_H