|
|
- #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;
- };
- }
|