Fix cpuid stub for MSVC.

This commit is contained in:
XMRig 2017-06-12 16:55:21 +03:00
parent 3df545cfc5
commit 9580c30d8a
2 changed files with 20 additions and 13 deletions

View file

@ -22,11 +22,14 @@
*/ */
#ifdef _MSC_VER #ifdef _MSC_VER
# include <intrin.h> # include <intrin.h>
#else
# include <cpuid.h> # define bit_AES (1 << 25)
#endif # define bit_BMI2 (1 << 8)
#else
# include <cpuid.h>
#endif
#include <string.h> #include <string.h>
@ -48,15 +51,21 @@
#define EDX_Reg (3) #define EDX_Reg (3)
#ifdef _MSC_VER
static inline void cpuid(int level, int output[4]) {
__cpuid(output, level);
}
#else
static inline void cpuid(int level, int output[4]) { static inline void cpuid(int level, int output[4]) {
int a, b, c, d; int a, b, c, d;
//__cpuid_count(level, 0, a, b, c, d); __cpuid_count(level, 0, a, b, c, d);
output[0] = a; output[0] = a;
output[1] = b; output[1] = b;
output[2] = c; output[2] = c;
output[3] = d; output[3] = d;
} }
#endif
static inline void cpu_brand_string(char* s) { static inline void cpu_brand_string(char* s) {
@ -78,8 +87,7 @@ static inline bool has_aes_ni()
int cpu_info[4] = { 0 }; int cpu_info[4] = { 0 };
cpuid(PROCESSOR_INFO, cpu_info); cpuid(PROCESSOR_INFO, cpu_info);
return false; return cpu_info[ECX_Reg] & bit_AES;
//return cpu_info[ECX_Reg] & bit_AES;
} }
@ -87,8 +95,7 @@ static inline bool has_bmi2() {
int cpu_info[4] = { 0 }; int cpu_info[4] = { 0 };
cpuid(EXTENDED_FEATURES, cpu_info); cpuid(EXTENDED_FEATURES, cpu_info);
return false; return cpu_info[EBX_Reg] & bit_BMI2;
//return cpu_info[EBX_Reg] & bit_BMI2;
} }
@ -112,7 +119,7 @@ void Cpu::initCommon()
{ {
cpu_brand_string(m_brand); cpu_brand_string(m_brand);
# ifdef __x86_64__ # if defined(__x86_64__) || defined(_M_AMD64)
m_flags |= X86_64; m_flags |= X86_64;
# endif # endif

View file

@ -73,7 +73,7 @@ void (* const extra_hashes[4])(const void *, size_t, char *) = {do_blake_hash, d
#if defined(__x86_64__) || defined(_WIN64) #if defined(__x86_64__) || defined(_M_AMD64)
# define EXTRACT64(X) _mm_cvtsi128_si64(X) # define EXTRACT64(X) _mm_cvtsi128_si64(X)
# ifdef __GNUC__ # ifdef __GNUC__
@ -86,7 +86,7 @@ static inline uint64_t __umul128(uint64_t a, uint64_t b, uint64_t* hi)
# else # else
#define __umul128 _umul128 #define __umul128 _umul128
# endif # endif
#elif defined(__i386__) #elif defined(__i386__) || defined(_M_IX86)
# define HI32(X) \ # define HI32(X) \
_mm_srli_si128((X), 4) _mm_srli_si128((X), 4)