You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

87 lines
2.0 KiB

#pragma once
#if defined(__i386__) || defined(__i486__) || defined(__i586__) || defined(__i686__) || defined(_M_IX86)
#define CPU_ARCH_X86 1
#endif
#if defined(__x86_64__) || defined(__x86_64) || defined(_M_X64) || defined(_M_AMD64)
#define CPU_ARCH_X86_64 1
#endif
#if defined(__arm__) || defined(_M_ARM)
#define CPU_ARCH_ARM 1
#endif
#if defined(__aarch64__) || defined(_M_ARM64)
#define CPU_ARCH_ARM64 1
#endif
#if defined(EMSCRIPTEN)
#define CPU_ARCH_ASMJS 1
#endif
namespace vlc
{
class ICPUInfo
{
public:
ICPUInfo() = default;
virtual ~ICPUInfo() = default;
ICPUInfo(const ICPUInfo&) = delete;
ICPUInfo& operator = (const ICPUInfo&) = delete;
virtual const char* vendorName() const = 0;
virtual const char* cpuName() const = 0;
virtual bool isX86() const = 0;
virtual bool isARM() const = 0;
virtual bool hasSSE2() const = 0;
virtual bool hasSSE3() const = 0;
virtual bool hasSSSE3() const = 0;
virtual bool hasSSE41() const = 0;
virtual bool hasSSE42() const = 0;
virtual bool hasAVX() const = 0;
virtual bool hasAVX2() const = 0;
virtual bool hasFMA() const = 0;
virtual bool hasNEON() const = 0;
virtual uint32_t L2CacheLineSize() const = 0;
virtual uint32_t L2CacheTotalSize() const = 0;
};
class CPUInfo : public ICPUInfo
{
public:
CPUInfo();
~CPUInfo();
CPUInfo(const CPUInfo&) = delete;
CPUInfo& operator = (const CPUInfo&) = delete;
const char* vendorName() const override;
const char* cpuName() const override;
bool isX86() const override;
bool isARM() const override;
bool hasSSE2() const override;
bool hasSSE3() const override;
bool hasSSSE3() const override;
bool hasSSE41() const override;
bool hasSSE42() const override;
bool hasAVX() const override;
bool hasAVX2() const override;
bool hasFMA() const override;
bool hasNEON() const override;
uint32_t L2CacheLineSize() const override;
uint32_t L2CacheTotalSize() const override;
private:
struct PlatformCPUInfo;
PlatformCPUInfo* m_info = nullptr;
};
}