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

1 year ago
  1. #pragma once
  2. #if defined(__i386__) || defined(__i486__) || defined(__i586__) || defined(__i686__) || defined(_M_IX86)
  3. #define CPU_ARCH_X86 1
  4. #endif
  5. #if defined(__x86_64__) || defined(__x86_64) || defined(_M_X64) || defined(_M_AMD64)
  6. #define CPU_ARCH_X86_64 1
  7. #endif
  8. #if defined(__arm__) || defined(_M_ARM)
  9. #define CPU_ARCH_ARM 1
  10. #endif
  11. #if defined(__aarch64__) || defined(_M_ARM64)
  12. #define CPU_ARCH_ARM64 1
  13. #endif
  14. #if defined(EMSCRIPTEN)
  15. #define CPU_ARCH_ASMJS 1
  16. #endif
  17. namespace vlc
  18. {
  19. class ICPUInfo
  20. {
  21. public:
  22. ICPUInfo() = default;
  23. virtual ~ICPUInfo() = default;
  24. ICPUInfo(const ICPUInfo&) = delete;
  25. ICPUInfo& operator = (const ICPUInfo&) = delete;
  26. virtual const char* vendorName() const = 0;
  27. virtual const char* cpuName() const = 0;
  28. virtual bool isX86() const = 0;
  29. virtual bool isARM() const = 0;
  30. virtual bool hasSSE2() const = 0;
  31. virtual bool hasSSE3() const = 0;
  32. virtual bool hasSSSE3() const = 0;
  33. virtual bool hasSSE41() const = 0;
  34. virtual bool hasSSE42() const = 0;
  35. virtual bool hasAVX() const = 0;
  36. virtual bool hasAVX2() const = 0;
  37. virtual bool hasFMA() const = 0;
  38. virtual bool hasNEON() const = 0;
  39. virtual uint32_t L2CacheLineSize() const = 0;
  40. virtual uint32_t L2CacheTotalSize() const = 0;
  41. };
  42. class CPUInfo : public ICPUInfo
  43. {
  44. public:
  45. CPUInfo();
  46. ~CPUInfo();
  47. CPUInfo(const CPUInfo&) = delete;
  48. CPUInfo& operator = (const CPUInfo&) = delete;
  49. const char* vendorName() const override;
  50. const char* cpuName() const override;
  51. bool isX86() const override;
  52. bool isARM() const override;
  53. bool hasSSE2() const override;
  54. bool hasSSE3() const override;
  55. bool hasSSSE3() const override;
  56. bool hasSSE41() const override;
  57. bool hasSSE42() const override;
  58. bool hasAVX() const override;
  59. bool hasAVX2() const override;
  60. bool hasFMA() const override;
  61. bool hasNEON() const override;
  62. uint32_t L2CacheLineSize() const override;
  63. uint32_t L2CacheTotalSize() const override;
  64. private:
  65. struct PlatformCPUInfo;
  66. PlatformCPUInfo* m_info = nullptr;
  67. };
  68. }