From 3c9f26a7f22bb3654828786d51e86e87eca08b7f Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Mon, 28 Mar 2016 10:48:51 -0700 Subject: [PATCH] Add CPUID::getAllFeatures --- libraries/shared/src/CPUID.cpp | 58 +++++++++++++++++++++++++++++ libraries/shared/src/CPUID.h | 9 ++++- libraries/shared/src/SharedUtil.cpp | 4 ++ 3 files changed, 70 insertions(+), 1 deletion(-) diff --git a/libraries/shared/src/CPUID.cpp b/libraries/shared/src/CPUID.cpp index 44eb28f9db..e0eae248f3 100644 --- a/libraries/shared/src/CPUID.cpp +++ b/libraries/shared/src/CPUID.cpp @@ -14,4 +14,62 @@ const CPUID::CPUID_Internal CPUID::CPU_Rep; +std::vector CPUID::getAllFeatures() { + std::vector features; + + features.push_back({ "3DNOW", CPUID::_3DNOW() }); + features.push_back({ "3DNOWEXT", CPUID::_3DNOWEXT() }); + features.push_back({ "ABM", CPUID::ABM() }); + features.push_back({ "ADX", CPUID::ADX() }); + features.push_back({ "AES", CPUID::AES() }); + features.push_back({ "AVX", CPUID::AVX() }); + features.push_back({ "AVX2", CPUID::AVX2() }); + features.push_back({ "AVX512CD", CPUID::AVX512CD() }); + features.push_back({ "AVX512ER", CPUID::AVX512ER() }); + features.push_back({ "AVX512F", CPUID::AVX512F() }); + features.push_back({ "AVX512PF", CPUID::AVX512PF() }); + features.push_back({ "BMI1", CPUID::BMI1() }); + features.push_back({ "BMI2", CPUID::BMI2() }); + features.push_back({ "CLFSH", CPUID::CLFSH() }); + features.push_back({ "CMPXCHG16B", CPUID::CMPXCHG16B() }); + features.push_back({ "CX8", CPUID::CX8() }); + features.push_back({ "ERMS", CPUID::ERMS() }); + features.push_back({ "F16C", CPUID::F16C() }); + features.push_back({ "FMA", CPUID::FMA() }); + features.push_back({ "FSGSBASE", CPUID::FSGSBASE() }); + features.push_back({ "FXSR", CPUID::FXSR() }); + features.push_back({ "HLE", CPUID::HLE() }); + features.push_back({ "INVPCID", CPUID::INVPCID() }); + features.push_back({ "LAHF", CPUID::LAHF() }); + features.push_back({ "LZCNT", CPUID::LZCNT() }); + features.push_back({ "MMX", CPUID::MMX() }); + features.push_back({ "MMXEXT", CPUID::MMXEXT() }); + features.push_back({ "MONITOR", CPUID::MONITOR() }); + features.push_back({ "MOVBE", CPUID::MOVBE() }); + features.push_back({ "MSR", CPUID::MSR() }); + features.push_back({ "OSXSAVE", CPUID::OSXSAVE() }); + features.push_back({ "PCLMULQDQ", CPUID::PCLMULQDQ() }); + features.push_back({ "POPCNT", CPUID::POPCNT() }); + features.push_back({ "PREFETCHWT1", CPUID::PREFETCHWT1() }); + features.push_back({ "RDRAND", CPUID::RDRAND() }); + features.push_back({ "RDSEED", CPUID::RDSEED() }); + features.push_back({ "RDTSCP", CPUID::RDTSCP() }); + features.push_back({ "RTM", CPUID::RTM() }); + features.push_back({ "SEP", CPUID::SEP() }); + features.push_back({ "SHA", CPUID::SHA() }); + features.push_back({ "SSE", CPUID::SSE() }); + features.push_back({ "SSE2", CPUID::SSE2() }); + features.push_back({ "SSE3", CPUID::SSE3() }); + features.push_back({ "SSE4.1", CPUID::SSE41() }); + features.push_back({ "SSE4.2", CPUID::SSE42() }); + features.push_back({ "SSE4a", CPUID::SSE4a() }); + features.push_back({ "SSSE3", CPUID::SSSE3() }); + features.push_back({ "SYSCALL", CPUID::SYSCALL() }); + features.push_back({ "TBM", CPUID::TBM() }); + features.push_back({ "XOP", CPUID::XOP() }); + features.push_back({ "XSAVE", CPUID::XSAVE() }); + + return features; +}; + #endif \ No newline at end of file diff --git a/libraries/shared/src/CPUID.h b/libraries/shared/src/CPUID.h index bc697c8781..a8b8921d19 100644 --- a/libraries/shared/src/CPUID.h +++ b/libraries/shared/src/CPUID.h @@ -35,7 +35,13 @@ class CPUID class CPUID_Internal; public: - // getters + struct Feature { + std::string name; + bool supported; + }; + + static std::vector getAllFeatures(); + static std::string Vendor(void) { return CPU_Rep.vendor_; } static std::string Brand(void) { return CPU_Rep.brand_; } @@ -198,6 +204,7 @@ private: std::vector> data_; std::vector> extdata_; }; + }; #endif diff --git a/libraries/shared/src/SharedUtil.cpp b/libraries/shared/src/SharedUtil.cpp index 31d4f32a5e..2f0fde8ddc 100644 --- a/libraries/shared/src/SharedUtil.cpp +++ b/libraries/shared/src/SharedUtil.cpp @@ -765,6 +765,10 @@ void printSystemInformation() { qDebug() << "\tCPU Vendor: " << CPUID::Vendor().c_str(); qDebug() << "\tCPU Brand: " << CPUID::Brand().c_str(); + for (auto& feature : CPUID::getAllFeatures()) { + qDebug().nospace().noquote() << "\t[" << (feature.supported ? "x" : " ") << "] " << feature.name.c_str(); + } + printSupported("3DNOW", CPUID::_3DNOW()); printSupported("3DNOWEXT", CPUID::_3DNOWEXT()); printSupported("ABM", CPUID::ABM());