mirror of
https://github.com/xmrig/xmrig.git
synced 2024-11-18 18:11:05 +00:00
Add ASM detection for builds without libcpuid.
This commit is contained in:
parent
8f3d405b34
commit
ad92c3b025
2 changed files with 25 additions and 4 deletions
|
@ -71,7 +71,7 @@ static inline void cpuid(int level, int output[4]) {
|
||||||
|
|
||||||
|
|
||||||
static inline void cpu_brand_string(char* s) {
|
static inline void cpu_brand_string(char* s) {
|
||||||
int cpu_info[4] = { 0 };
|
int32_t cpu_info[4] = { 0 };
|
||||||
cpuid(VENDOR_ID, cpu_info);
|
cpuid(VENDOR_ID, cpu_info);
|
||||||
|
|
||||||
if (cpu_info[EAX_Reg] >= 4) {
|
if (cpu_info[EAX_Reg] >= 4) {
|
||||||
|
@ -86,7 +86,7 @@ static inline void cpu_brand_string(char* s) {
|
||||||
|
|
||||||
static inline bool has_aes_ni()
|
static inline bool has_aes_ni()
|
||||||
{
|
{
|
||||||
int cpu_info[4] = { 0 };
|
int32_t cpu_info[4] = { 0 };
|
||||||
cpuid(PROCESSOR_INFO, cpu_info);
|
cpuid(PROCESSOR_INFO, cpu_info);
|
||||||
|
|
||||||
return (cpu_info[ECX_Reg] & bit_AES) != 0;
|
return (cpu_info[ECX_Reg] & bit_AES) != 0;
|
||||||
|
@ -94,11 +94,32 @@ static inline bool has_aes_ni()
|
||||||
|
|
||||||
|
|
||||||
xmrig::BasicCpuInfo::BasicCpuInfo() :
|
xmrig::BasicCpuInfo::BasicCpuInfo() :
|
||||||
|
m_assembly(ASM_NONE),
|
||||||
m_aes(has_aes_ni()),
|
m_aes(has_aes_ni()),
|
||||||
m_brand(),
|
m_brand(),
|
||||||
m_threads(std::thread::hardware_concurrency())
|
m_threads(std::thread::hardware_concurrency())
|
||||||
{
|
{
|
||||||
cpu_brand_string(m_brand);
|
cpu_brand_string(m_brand);
|
||||||
|
|
||||||
|
# ifndef XMRIG_NO_ASM
|
||||||
|
if (hasAES()) {
|
||||||
|
char vendor[13] = { 0 };
|
||||||
|
int32_t data[4] = { 0 };
|
||||||
|
|
||||||
|
cpuid(0, data);
|
||||||
|
|
||||||
|
memcpy(vendor + 0, &data[1], 4);
|
||||||
|
memcpy(vendor + 4, &data[3], 4);
|
||||||
|
memcpy(vendor + 8, &data[2], 4);
|
||||||
|
|
||||||
|
if (memcmp(vendor, "GenuineIntel", 12) == 0) {
|
||||||
|
m_assembly = ASM_INTEL;
|
||||||
|
}
|
||||||
|
else if (memcmp(vendor, "AuthenticAMD", 12) == 0) {
|
||||||
|
m_assembly = ASM_RYZEN;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
# endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -7,7 +7,6 @@
|
||||||
* Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
|
* Copyright 2017-2018 XMR-Stak <https://github.com/fireice-uk>, <https://github.com/psychocrypt>
|
||||||
* Copyright 2016-2018 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
* Copyright 2016-2018 XMRig <https://github.com/xmrig>, <support@xmrig.com>
|
||||||
*
|
*
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
@ -40,7 +39,7 @@ public:
|
||||||
protected:
|
protected:
|
||||||
size_t optimalThreadsCount(size_t memSize, int maxCpuUsage) const override;
|
size_t optimalThreadsCount(size_t memSize, int maxCpuUsage) const override;
|
||||||
|
|
||||||
inline Assembly assembly() const override { return ASM_NONE; }
|
inline Assembly assembly() const override { return m_assembly; }
|
||||||
inline bool hasAES() const override { return m_aes; }
|
inline bool hasAES() const override { return m_aes; }
|
||||||
inline bool isSupported() const override { return true; }
|
inline bool isSupported() const override { return true; }
|
||||||
inline const char *brand() const override { return m_brand; }
|
inline const char *brand() const override { return m_brand; }
|
||||||
|
@ -58,6 +57,7 @@ protected:
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
Assembly m_assembly;
|
||||||
bool m_aes;
|
bool m_aes;
|
||||||
char m_brand[64];
|
char m_brand[64];
|
||||||
int32_t m_threads;
|
int32_t m_threads;
|
||||||
|
|
Loading…
Reference in a new issue