dsh-remote 0.8.47 → 0.8.49

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. package/lib/client.js +89 -16
  2. package/lib/ignore.js +46 -0
  3. package/lib/index.js +68 -23
  4. package/lib/remote-shell-child.cjs +305 -0
  5. package/lib/remote-shell.js +518 -0
  6. package/lib/search.js +8 -3
  7. package/package.json +1 -1
  8. package/node_modules/buildcheck/.eslintrc.js +0 -5
  9. package/node_modules/buildcheck/.github/workflows/ci.yml +0 -88
  10. package/node_modules/buildcheck/.github/workflows/lint.yml +0 -27
  11. package/node_modules/buildcheck/.npmignore +0 -3
  12. package/node_modules/buildcheck/LICENSE +0 -19
  13. package/node_modules/buildcheck/README.md +0 -106
  14. package/node_modules/buildcheck/deps/Find-VisualStudio.cs +0 -250
  15. package/node_modules/buildcheck/lib/findvs.js +0 -361
  16. package/node_modules/buildcheck/lib/index.js +0 -738
  17. package/node_modules/buildcheck/package.json +0 -36
  18. package/node_modules/buildcheck/test/test.js +0 -8
  19. package/node_modules/cpu-features/.eslintrc.js +0 -5
  20. package/node_modules/cpu-features/.github/workflows/ci.yml +0 -74
  21. package/node_modules/cpu-features/.github/workflows/lint.yml +0 -27
  22. package/node_modules/cpu-features/LICENSE +0 -19
  23. package/node_modules/cpu-features/README.md +0 -59
  24. package/node_modules/cpu-features/binding.gyp +0 -16
  25. package/node_modules/cpu-features/buildcheck.js +0 -32
  26. package/node_modules/cpu-features/deps/cpu_features/.clang-format +0 -4
  27. package/node_modules/cpu-features/deps/cpu_features/.dockerignore +0 -31
  28. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/Dockerfile +0 -5
  29. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/aarch64_linux_cmake.yml +0 -30
  30. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/amd64_freebsd_cmake.yml +0 -22
  31. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/amd64_linux_bazel.yml +0 -26
  32. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/amd64_linux_cmake.yml +0 -31
  33. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/amd64_macos_cmake.yml +0 -43
  34. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/amd64_windows_cmake.yml +0 -25
  35. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/arm_linux_cmake.yml +0 -31
  36. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/clang_format.yml +0 -24
  37. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/mips_linux_cmake.yml +0 -30
  38. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/power_linux_cmake.yml +0 -29
  39. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/riscv_linux_cmake.yml +0 -28
  40. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/s390x_linux_cmake.yml +0 -27
  41. package/node_modules/cpu-features/deps/cpu_features/.grenrc.yml +0 -21
  42. package/node_modules/cpu-features/deps/cpu_features/BUILD.bazel +0 -329
  43. package/node_modules/cpu-features/deps/cpu_features/CMakeLists.txt +0 -261
  44. package/node_modules/cpu-features/deps/cpu_features/CONTRIBUTING.md +0 -23
  45. package/node_modules/cpu-features/deps/cpu_features/LICENSE +0 -230
  46. package/node_modules/cpu-features/deps/cpu_features/README.md +0 -272
  47. package/node_modules/cpu-features/deps/cpu_features/WORKSPACE +0 -19
  48. package/node_modules/cpu-features/deps/cpu_features/bazel/ci/README.md +0 -5
  49. package/node_modules/cpu-features/deps/cpu_features/bazel/platforms.bzl +0 -11
  50. package/node_modules/cpu-features/deps/cpu_features/cmake/CpuFeaturesConfig.cmake.in +0 -3
  51. package/node_modules/cpu-features/deps/cpu_features/cmake/CpuFeaturesNdkCompatConfig.cmake.in +0 -3
  52. package/node_modules/cpu-features/deps/cpu_features/cmake/README.md +0 -30
  53. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/Makefile +0 -252
  54. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/README.md +0 -40
  55. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/doc/docker.dot +0 -64
  56. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/doc/docker.svg +0 -312
  57. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/doc/generate_image.sh +0 -7
  58. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/docker/amd64/Dockerfile +0 -48
  59. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/docker/toolchain/Dockerfile +0 -34
  60. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/sample/CMakeLists.txt +0 -22
  61. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/sample/main.cpp +0 -11
  62. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/vagrant/freebsd/Vagrantfile +0 -107
  63. package/node_modules/cpu-features/deps/cpu_features/cmake/googletest.CMakeLists.txt.in +0 -15
  64. package/node_modules/cpu-features/deps/cpu_features/cpu_features.gyp +0 -105
  65. package/node_modules/cpu-features/deps/cpu_features/include/cpu_features_cache_info.h +0 -54
  66. package/node_modules/cpu-features/deps/cpu_features/include/cpu_features_macros.h +0 -384
  67. package/node_modules/cpu-features/deps/cpu_features/include/cpuinfo_aarch64.h +0 -259
  68. package/node_modules/cpu-features/deps/cpu_features/include/cpuinfo_arm.h +0 -121
  69. package/node_modules/cpu-features/deps/cpu_features/include/cpuinfo_mips.h +0 -74
  70. package/node_modules/cpu-features/deps/cpu_features/include/cpuinfo_ppc.h +0 -149
  71. package/node_modules/cpu-features/deps/cpu_features/include/cpuinfo_riscv.h +0 -72
  72. package/node_modules/cpu-features/deps/cpu_features/include/cpuinfo_s390x.h +0 -108
  73. package/node_modules/cpu-features/deps/cpu_features/include/cpuinfo_x86.h +0 -288
  74. package/node_modules/cpu-features/deps/cpu_features/include/internal/bit_utils.h +0 -40
  75. package/node_modules/cpu-features/deps/cpu_features/include/internal/cpuid_x86.h +0 -37
  76. package/node_modules/cpu-features/deps/cpu_features/include/internal/filesystem.h +0 -39
  77. package/node_modules/cpu-features/deps/cpu_features/include/internal/hwcaps.h +0 -240
  78. package/node_modules/cpu-features/deps/cpu_features/include/internal/stack_line_reader.h +0 -49
  79. package/node_modules/cpu-features/deps/cpu_features/include/internal/string_view.h +0 -110
  80. package/node_modules/cpu-features/deps/cpu_features/include/internal/windows_utils.h +0 -70
  81. package/node_modules/cpu-features/deps/cpu_features/ndk_compat/CMakeLists.txt +0 -60
  82. package/node_modules/cpu-features/deps/cpu_features/ndk_compat/README.md +0 -4
  83. package/node_modules/cpu-features/deps/cpu_features/ndk_compat/cpu-features.c +0 -205
  84. package/node_modules/cpu-features/deps/cpu_features/ndk_compat/cpu-features.h +0 -320
  85. package/node_modules/cpu-features/deps/cpu_features/ndk_compat/ndk-compat-test.c +0 -12
  86. package/node_modules/cpu-features/deps/cpu_features/patches/0001-Add-Apple-Silicon-Support.patch +0 -456
  87. package/node_modules/cpu-features/deps/cpu_features/scripts/generate_badges.d +0 -165
  88. package/node_modules/cpu-features/deps/cpu_features/scripts/make_release.sh +0 -75
  89. package/node_modules/cpu-features/deps/cpu_features/scripts/run_integration.sh +0 -490
  90. package/node_modules/cpu-features/deps/cpu_features/scripts/test_integration.sh +0 -79
  91. package/node_modules/cpu-features/deps/cpu_features/src/copy.inl +0 -19
  92. package/node_modules/cpu-features/deps/cpu_features/src/define_introspection.inl +0 -86
  93. package/node_modules/cpu-features/deps/cpu_features/src/define_introspection_and_hwcaps.inl +0 -26
  94. package/node_modules/cpu-features/deps/cpu_features/src/equals.inl +0 -22
  95. package/node_modules/cpu-features/deps/cpu_features/src/filesystem.c +0 -62
  96. package/node_modules/cpu-features/deps/cpu_features/src/hwcaps.c +0 -169
  97. package/node_modules/cpu-features/deps/cpu_features/src/impl_aarch64__base_implementation.inl +0 -88
  98. package/node_modules/cpu-features/deps/cpu_features/src/impl_aarch64_linux_or_android.c +0 -79
  99. package/node_modules/cpu-features/deps/cpu_features/src/impl_aarch64_macos_or_iphone.c +0 -82
  100. package/node_modules/cpu-features/deps/cpu_features/src/impl_aarch64_windows.c +0 -138
  101. package/node_modules/cpu-features/deps/cpu_features/src/impl_arm_linux_or_android.c +0 -212
  102. package/node_modules/cpu-features/deps/cpu_features/src/impl_mips_linux_or_android.c +0 -93
  103. package/node_modules/cpu-features/deps/cpu_features/src/impl_ppc_linux.c +0 -163
  104. package/node_modules/cpu-features/deps/cpu_features/src/impl_riscv_linux.c +0 -111
  105. package/node_modules/cpu-features/deps/cpu_features/src/impl_s390x_linux.c +0 -120
  106. package/node_modules/cpu-features/deps/cpu_features/src/impl_x86__base_implementation.inl +0 -2055
  107. package/node_modules/cpu-features/deps/cpu_features/src/impl_x86_freebsd.c +0 -68
  108. package/node_modules/cpu-features/deps/cpu_features/src/impl_x86_linux_or_android.c +0 -58
  109. package/node_modules/cpu-features/deps/cpu_features/src/impl_x86_macos.c +0 -57
  110. package/node_modules/cpu-features/deps/cpu_features/src/impl_x86_windows.c +0 -58
  111. package/node_modules/cpu-features/deps/cpu_features/src/stack_line_reader.c +0 -132
  112. package/node_modules/cpu-features/deps/cpu_features/src/string_view.c +0 -192
  113. package/node_modules/cpu-features/deps/cpu_features/src/utils/list_cpu_features.c +0 -461
  114. package/node_modules/cpu-features/deps/cpu_features/test/CMakeLists.txt +0 -114
  115. package/node_modules/cpu-features/deps/cpu_features/test/bit_utils_test.cc +0 -53
  116. package/node_modules/cpu-features/deps/cpu_features/test/cpuinfo_aarch64_test.cc +0 -396
  117. package/node_modules/cpu-features/deps/cpu_features/test/cpuinfo_arm_test.cc +0 -384
  118. package/node_modules/cpu-features/deps/cpu_features/test/cpuinfo_mips_test.cc +0 -176
  119. package/node_modules/cpu-features/deps/cpu_features/test/cpuinfo_ppc_test.cc +0 -131
  120. package/node_modules/cpu-features/deps/cpu_features/test/cpuinfo_riscv_test.cc +0 -180
  121. package/node_modules/cpu-features/deps/cpu_features/test/cpuinfo_s390x_test.cc +0 -82
  122. package/node_modules/cpu-features/deps/cpu_features/test/cpuinfo_x86_test.cc +0 -1729
  123. package/node_modules/cpu-features/deps/cpu_features/test/filesystem_for_testing.cc +0 -103
  124. package/node_modules/cpu-features/deps/cpu_features/test/filesystem_for_testing.h +0 -61
  125. package/node_modules/cpu-features/deps/cpu_features/test/hwcaps_for_testing.cc +0 -52
  126. package/node_modules/cpu-features/deps/cpu_features/test/hwcaps_for_testing.h +0 -31
  127. package/node_modules/cpu-features/deps/cpu_features/test/stack_line_reader_test.cc +0 -132
  128. package/node_modules/cpu-features/deps/cpu_features/test/string_view_test.cc +0 -202
  129. package/node_modules/cpu-features/lib/index.js +0 -5
  130. package/node_modules/cpu-features/package.json +0 -40
  131. package/node_modules/cpu-features/src/binding.cc +0 -151
  132. package/node_modules/cpu-features/test/test.js +0 -12
@@ -1,1729 +0,0 @@
1
- // Copyright 2017 Google LLC
2
- //
3
- // Licensed under the Apache License, Version 2.0 (the "License");
4
- // you may not use this file except in compliance with the License.
5
- // You may obtain a copy of the License at
6
- //
7
- // http://www.apache.org/licenses/LICENSE-2.0
8
- //
9
- // Unless required by applicable law or agreed to in writing, software
10
- // distributed under the License is distributed on an "AS IS" BASIS,
11
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- // See the License for the specific language governing permissions and
13
- // limitations under the License.
14
-
15
- #include "cpuinfo_x86.h"
16
-
17
- #include <cassert>
18
- #include <cstdio>
19
- #include <map>
20
- #include <set>
21
- #if defined(CPU_FEATURES_OS_WINDOWS)
22
- #include "internal/windows_utils.h"
23
- #endif // CPU_FEATURES_OS_WINDOWS
24
-
25
- #include "filesystem_for_testing.h"
26
- #include "gtest/gtest.h"
27
- #include "internal/cpuid_x86.h"
28
-
29
- namespace cpu_features {
30
-
31
- class FakeCpu {
32
- public:
33
- Leaf GetCpuidLeaf(uint32_t leaf_id, int ecx) const {
34
- const auto itr = cpuid_leaves_.find(std::make_pair(leaf_id, ecx));
35
- if (itr != cpuid_leaves_.end()) {
36
- return itr->second;
37
- }
38
- return {0, 0, 0, 0};
39
- }
40
-
41
- uint32_t GetXCR0Eax() const { return xcr0_eax_; }
42
-
43
- void SetLeaves(std::map<std::pair<uint32_t, int>, Leaf> configuration) {
44
- cpuid_leaves_ = std::move(configuration);
45
- }
46
-
47
- void SetOsBackupsExtendedRegisters(bool os_backups_extended_registers) {
48
- xcr0_eax_ = os_backups_extended_registers ? -1 : 0;
49
- }
50
-
51
- #if defined(CPU_FEATURES_OS_MACOS)
52
- bool GetDarwinSysCtlByName(std::string name) const {
53
- return darwin_sysctlbyname_.count(name);
54
- }
55
-
56
- void SetDarwinSysCtlByName(std::string name) {
57
- darwin_sysctlbyname_.insert(name);
58
- }
59
- #endif // CPU_FEATURES_OS_MACOS
60
-
61
- #if defined(CPU_FEATURES_OS_WINDOWS)
62
- bool GetWindowsIsProcessorFeaturePresent(DWORD ProcessorFeature) {
63
- return windows_isprocessorfeaturepresent_.count(ProcessorFeature);
64
- }
65
-
66
- void SetWindowsIsProcessorFeaturePresent(DWORD ProcessorFeature) {
67
- windows_isprocessorfeaturepresent_.insert(ProcessorFeature);
68
- }
69
- #endif // CPU_FEATURES_OS_WINDOWS
70
-
71
- private:
72
- std::map<std::pair<uint32_t, int>, Leaf> cpuid_leaves_;
73
- #if defined(CPU_FEATURES_OS_MACOS)
74
- std::set<std::string> darwin_sysctlbyname_;
75
- #endif // CPU_FEATURES_OS_MACOS
76
- #if defined(CPU_FEATURES_OS_WINDOWS)
77
- std::set<DWORD> windows_isprocessorfeaturepresent_;
78
- #endif // CPU_FEATURES_OS_WINDOWS
79
- uint32_t xcr0_eax_;
80
- };
81
-
82
- static FakeCpu* g_fake_cpu_instance = nullptr;
83
-
84
- static FakeCpu& cpu() {
85
- assert(g_fake_cpu_instance != nullptr);
86
- return *g_fake_cpu_instance;
87
- }
88
-
89
- extern "C" Leaf GetCpuidLeaf(uint32_t leaf_id, int ecx) {
90
- return cpu().GetCpuidLeaf(leaf_id, ecx);
91
- }
92
-
93
- extern "C" uint32_t GetXCR0Eax(void) { return cpu().GetXCR0Eax(); }
94
-
95
- #if defined(CPU_FEATURES_OS_MACOS)
96
- extern "C" bool GetDarwinSysCtlByName(const char* name) {
97
- return cpu().GetDarwinSysCtlByName(name);
98
- }
99
- #endif // CPU_FEATURES_OS_MACOS
100
-
101
- #if defined(CPU_FEATURES_OS_WINDOWS)
102
- extern "C" bool GetWindowsIsProcessorFeaturePresent(DWORD ProcessorFeature) {
103
- return cpu().GetWindowsIsProcessorFeaturePresent(ProcessorFeature);
104
- }
105
- #endif // CPU_FEATURES_OS_WINDOWS
106
-
107
- namespace {
108
-
109
- class CpuidX86Test : public ::testing::Test {
110
- protected:
111
- void SetUp() override {
112
- assert(g_fake_cpu_instance == nullptr);
113
- g_fake_cpu_instance = new FakeCpu();
114
- }
115
- void TearDown() override {
116
- delete g_fake_cpu_instance;
117
- g_fake_cpu_instance = nullptr;
118
- }
119
- };
120
-
121
- TEST_F(CpuidX86Test, X86MicroarchitectureEnum) {
122
- const char *last_name = GetX86MicroarchitectureName(X86_MICROARCHITECTURE_LAST_);
123
- EXPECT_STREQ(last_name, "unknown microarchitecture");
124
- for (int i = static_cast<int>(X86_UNKNOWN); i != static_cast<int>(X86_MICROARCHITECTURE_LAST_); ++i) {
125
- const auto micro = static_cast<X86Microarchitecture>(i);
126
- const char *name = GetX86MicroarchitectureName(micro);
127
- ASSERT_FALSE(name == nullptr);
128
- EXPECT_STRNE(name, "");
129
- EXPECT_STRNE(name, last_name);
130
- }
131
- }
132
-
133
- TEST_F(CpuidX86Test, X86FeaturesEnum) {
134
- const char *last_name = GetX86FeaturesEnumName(X86_LAST_);
135
- EXPECT_STREQ(last_name, "unknown_feature");
136
- for (int i = static_cast<int>(X86_FPU); i != static_cast<int>(X86_LAST_); ++i) {
137
- const auto feature = static_cast<X86FeaturesEnum>(i);
138
- const char *name = GetX86FeaturesEnumName(feature);
139
- ASSERT_FALSE(name == nullptr);
140
- EXPECT_STRNE(name, "");
141
- EXPECT_STRNE(name, last_name);
142
- }
143
- }
144
-
145
- TEST_F(CpuidX86Test, SandyBridge) {
146
- cpu().SetOsBackupsExtendedRegisters(true);
147
- cpu().SetLeaves({
148
- {{0x00000000, 0}, Leaf{0x0000000D, 0x756E6547, 0x6C65746E, 0x49656E69}},
149
- {{0x00000001, 0}, Leaf{0x000206A6, 0x00100800, 0x1F9AE3BF, 0xBFEBFBFF}},
150
- {{0x00000007, 0}, Leaf{0x00000000, 0x00000000, 0x00000000, 0x00000000}},
151
- });
152
- const auto info = GetX86Info();
153
- EXPECT_STREQ(info.vendor, CPU_FEATURES_VENDOR_GENUINE_INTEL);
154
- EXPECT_EQ(info.family, 0x06);
155
- EXPECT_EQ(info.model, 0x02A);
156
- EXPECT_EQ(info.stepping, 0x06);
157
- // Leaf 7 is zeroed out so none of the Leaf 7 flags are set.
158
- const auto features = info.features;
159
- EXPECT_FALSE(features.erms);
160
- EXPECT_FALSE(features.avx2);
161
- EXPECT_FALSE(features.avx512f);
162
- EXPECT_FALSE(features.avx512cd);
163
- EXPECT_FALSE(features.avx512er);
164
- EXPECT_FALSE(features.avx512pf);
165
- EXPECT_FALSE(features.avx512bw);
166
- EXPECT_FALSE(features.avx512dq);
167
- EXPECT_FALSE(features.avx512vl);
168
- EXPECT_FALSE(features.avx512ifma);
169
- EXPECT_FALSE(features.avx512vbmi);
170
- EXPECT_FALSE(features.avx512vbmi2);
171
- EXPECT_FALSE(features.avx512vnni);
172
- EXPECT_FALSE(features.avx512bitalg);
173
- EXPECT_FALSE(features.avx512vpopcntdq);
174
- EXPECT_FALSE(features.avx512_4vnniw);
175
- EXPECT_FALSE(features.avx512_4fmaps);
176
- // All old cpu features should be set.
177
- EXPECT_TRUE(features.aes);
178
- EXPECT_TRUE(features.ssse3);
179
- EXPECT_TRUE(features.sse4_1);
180
- EXPECT_TRUE(features.sse4_2);
181
- EXPECT_TRUE(features.avx);
182
- EXPECT_FALSE(features.sha);
183
- EXPECT_TRUE(features.popcnt);
184
- EXPECT_FALSE(features.movbe);
185
- EXPECT_FALSE(features.rdrnd);
186
- EXPECT_FALSE(features.adx);
187
- }
188
-
189
- const int UNDEF = -1;
190
- const int KiB = 1024;
191
- const int MiB = 1024 * KiB;
192
-
193
- TEST_F(CpuidX86Test, SandyBridgeTestOsSupport) {
194
- cpu().SetLeaves({
195
- {{0x00000000, 0}, Leaf{0x0000000D, 0x756E6547, 0x6C65746E, 0x49656E69}},
196
- {{0x00000001, 0}, Leaf{0x000206A6, 0x00100800, 0x1F9AE3BF, 0xBFEBFBFF}},
197
- {{0x00000007, 0}, Leaf{0x00000000, 0x00000000, 0x00000000, 0x00000000}},
198
- });
199
- // avx is disabled if os does not support backing up ymm registers.
200
- cpu().SetOsBackupsExtendedRegisters(false);
201
- EXPECT_FALSE(GetX86Info().features.avx);
202
- // avx is disabled if os does not support backing up ymm registers.
203
- cpu().SetOsBackupsExtendedRegisters(true);
204
- EXPECT_TRUE(GetX86Info().features.avx);
205
- }
206
-
207
- TEST_F(CpuidX86Test, SkyLake) {
208
- cpu().SetOsBackupsExtendedRegisters(true);
209
- cpu().SetLeaves({
210
- {{0x00000000, 0}, Leaf{0x00000016, 0x756E6547, 0x6C65746E, 0x49656E69}},
211
- {{0x00000001, 0}, Leaf{0x000406E3, 0x00100800, 0x7FFAFBBF, 0xBFEBFBFF}},
212
- {{0x00000007, 0}, Leaf{0x00000000, 0x029C67AF, 0x00000000, 0x00000000}},
213
- });
214
- const auto info = GetX86Info();
215
- EXPECT_STREQ(info.vendor, CPU_FEATURES_VENDOR_GENUINE_INTEL);
216
- EXPECT_EQ(info.family, 0x06);
217
- EXPECT_EQ(info.model, 0x04E);
218
- EXPECT_EQ(info.stepping, 0x03);
219
- EXPECT_EQ(GetX86Microarchitecture(&info), X86Microarchitecture::INTEL_SKL);
220
- }
221
-
222
- // http://users.atw.hu/instlatx64/GenuineIntel/GenuineIntel0050654_SkylakeXeon_CPUID8.txt
223
- TEST_F(CpuidX86Test, SkyLakeXeon) {
224
- cpu().SetLeaves({
225
- {{0x00000000, 0}, Leaf{0x00000016, 0x756E6547, 0x6C65746E, 0x49656E69}},
226
- {{0x00000001, 0}, Leaf{0x00050654, 0x00100800, 0x7FFEFBFF, 0xBFEBFBFF}}
227
- });
228
- const auto info = GetX86Info();
229
- EXPECT_STREQ(info.vendor, CPU_FEATURES_VENDOR_GENUINE_INTEL);
230
- EXPECT_EQ(info.family, 0x06);
231
- EXPECT_EQ(info.model, 0x055);
232
- EXPECT_EQ(info.stepping, 0x04);
233
- EXPECT_EQ(GetX86Microarchitecture(&info), X86Microarchitecture::INTEL_SKL);
234
- }
235
-
236
- // http://users.atw.hu/instlatx64/GenuineIntel/GenuineIntel0050657_CascadeLakeXeon_CPUID.txt
237
- TEST_F(CpuidX86Test, CascadeLake) {
238
- cpu().SetLeaves({
239
- {{0x00000000, 0}, Leaf{0x00000016, 0x756E6547, 0x6C65746E, 0x49656E69}},
240
- {{0x00000001, 0}, Leaf{0x00050657, 0x00400800, 0x7FFEFBFF, 0xBFEBFBFF}}
241
- });
242
- const auto info = GetX86Info();
243
- EXPECT_STREQ(info.vendor, CPU_FEATURES_VENDOR_GENUINE_INTEL);
244
- EXPECT_EQ(info.family, 0x06);
245
- EXPECT_EQ(info.model, 0x055);
246
- EXPECT_EQ(info.stepping, 0x07);
247
- EXPECT_EQ(GetX86Microarchitecture(&info), X86Microarchitecture::INTEL_CCL);
248
- }
249
-
250
- TEST_F(CpuidX86Test, Branding) {
251
- cpu().SetLeaves({
252
- {{0x00000000, 0}, Leaf{0x00000016, 0x756E6547, 0x6C65746E, 0x49656E69}},
253
- {{0x00000001, 0}, Leaf{0x000406E3, 0x00100800, 0x7FFAFBBF, 0xBFEBFBFF}},
254
- {{0x00000007, 0}, Leaf{0x00000000, 0x029C67AF, 0x00000000, 0x00000000}},
255
- {{0x80000000, 0}, Leaf{0x80000008, 0x00000000, 0x00000000, 0x00000000}},
256
- {{0x80000001, 0}, Leaf{0x00000000, 0x00000000, 0x00000121, 0x2C100000}},
257
- {{0x80000002, 0}, Leaf{0x65746E49, 0x2952286C, 0x726F4320, 0x4D542865}},
258
- {{0x80000003, 0}, Leaf{0x37692029, 0x3035362D, 0x43205530, 0x40205550}},
259
- {{0x80000004, 0}, Leaf{0x352E3220, 0x7A484730, 0x00000000, 0x00000000}},
260
- });
261
- const auto info = GetX86Info();
262
- EXPECT_STREQ(info.brand_string, "Intel(R) Core(TM) i7-6500U CPU @ 2.50GHz");
263
- }
264
-
265
- TEST_F(CpuidX86Test, KabyLakeCache) {
266
- cpu().SetLeaves({
267
- {{0x00000000, 0}, Leaf{0x00000016, 0x756E6547, 0x6C65746E, 0x49656E69}},
268
- {{0x00000001, 0}, Leaf{0x000406E3, 0x00100800, 0x7FFAFBBF, 0xBFEBFBFF}},
269
- {{0x00000004, 0}, Leaf{0x1C004121, 0x01C0003F, 0x0000003F, 0x00000000}},
270
- {{0x00000004, 1}, Leaf{0x1C004122, 0x01C0003F, 0x0000003F, 0x00000000}},
271
- {{0x00000004, 2}, Leaf{0x1C004143, 0x00C0003F, 0x000003FF, 0x00000000}},
272
- {{0x00000004, 3}, Leaf{0x1C03C163, 0x02C0003F, 0x00001FFF, 0x00000002}},
273
- {{0x00000007, 0}, Leaf{0x00000000, 0x029C67AF, 0x00000000, 0x00000000}},
274
- {{0x80000000, 0}, Leaf{0x80000008, 0x00000000, 0x00000000, 0x00000000}},
275
- {{0x80000001, 0}, Leaf{0x00000000, 0x00000000, 0x00000121, 0x2C100000}},
276
- {{0x80000002, 0}, Leaf{0x65746E49, 0x2952286C, 0x726F4320, 0x4D542865}},
277
- {{0x80000003, 0}, Leaf{0x37692029, 0x3035362D, 0x43205530, 0x40205550}},
278
- });
279
- const auto info = GetX86CacheInfo();
280
- EXPECT_EQ(info.size, 4);
281
- EXPECT_EQ(info.levels[0].level, 1);
282
- EXPECT_EQ(info.levels[0].cache_type, CacheType::CPU_FEATURE_CACHE_DATA);
283
- EXPECT_EQ(info.levels[0].cache_size, 32 * KiB);
284
- EXPECT_EQ(info.levels[0].ways, 8);
285
- EXPECT_EQ(info.levels[0].line_size, 64);
286
- EXPECT_EQ(info.levels[0].tlb_entries, 64);
287
- EXPECT_EQ(info.levels[0].partitioning, 1);
288
-
289
- EXPECT_EQ(info.levels[1].level, 1);
290
- EXPECT_EQ(info.levels[1].cache_type,
291
- CacheType::CPU_FEATURE_CACHE_INSTRUCTION);
292
- EXPECT_EQ(info.levels[1].cache_size, 32 * KiB);
293
- EXPECT_EQ(info.levels[1].ways, 8);
294
- EXPECT_EQ(info.levels[1].line_size, 64);
295
- EXPECT_EQ(info.levels[1].tlb_entries, 64);
296
- EXPECT_EQ(info.levels[1].partitioning, 1);
297
-
298
- EXPECT_EQ(info.levels[2].level, 2);
299
- EXPECT_EQ(info.levels[2].cache_type, CacheType::CPU_FEATURE_CACHE_UNIFIED);
300
- EXPECT_EQ(info.levels[2].cache_size, 256 * KiB);
301
- EXPECT_EQ(info.levels[2].ways, 4);
302
- EXPECT_EQ(info.levels[2].line_size, 64);
303
- EXPECT_EQ(info.levels[2].tlb_entries, 1024);
304
- EXPECT_EQ(info.levels[2].partitioning, 1);
305
-
306
- EXPECT_EQ(info.levels[3].level, 3);
307
- EXPECT_EQ(info.levels[3].cache_type, CacheType::CPU_FEATURE_CACHE_UNIFIED);
308
- EXPECT_EQ(info.levels[3].cache_size, 6 * MiB);
309
- EXPECT_EQ(info.levels[3].ways, 12);
310
- EXPECT_EQ(info.levels[3].line_size, 64);
311
- EXPECT_EQ(info.levels[3].tlb_entries, 8192);
312
- EXPECT_EQ(info.levels[3].partitioning, 1);
313
- }
314
-
315
- TEST_F(CpuidX86Test, HSWCache) {
316
- cpu().SetLeaves({
317
- {{0x00000000, 0}, Leaf{0x00000016, 0x756E6547, 0x6C65746E, 0x49656E69}},
318
- {{0x00000001, 0}, Leaf{0x000406E3, 0x00100800, 0x7FFAFBBF, 0xBFEBFBFF}},
319
- {{0x00000004, 0}, Leaf{0x1C004121, 0x01C0003F, 0x0000003F, 0x00000000}},
320
- {{0x00000004, 1}, Leaf{0x1C004122, 0x01C0003F, 0x0000003F, 0x00000000}},
321
- {{0x00000004, 2}, Leaf{0x1C004143, 0x01C0003F, 0x000001FF, 0x00000000}},
322
- {{0x00000004, 3}, Leaf{0x1C03C163, 0x02C0003F, 0x00001FFF, 0x00000006}},
323
- {{0x00000007, 0}, Leaf{0x00000000, 0x029C67AF, 0x00000000, 0x00000000}},
324
- {{0x80000000, 0}, Leaf{0x80000008, 0x00000000, 0x00000000, 0x00000000}},
325
- {{0x80000001, 0}, Leaf{0x00000000, 0x00000000, 0x00000121, 0x2C100000}},
326
- {{0x80000002, 0}, Leaf{0x65746E49, 0x2952286C, 0x726F4320, 0x4D542865}},
327
- {{0x80000003, 0}, Leaf{0x37692029, 0x3035362D, 0x43205530, 0x40205550}},
328
- });
329
- const auto info = GetX86CacheInfo();
330
- EXPECT_EQ(info.size, 4);
331
- EXPECT_EQ(info.levels[0].level, 1);
332
- EXPECT_EQ(info.levels[0].cache_type, CacheType::CPU_FEATURE_CACHE_DATA);
333
- EXPECT_EQ(info.levels[0].cache_size, 32 * KiB);
334
- EXPECT_EQ(info.levels[0].ways, 8);
335
- EXPECT_EQ(info.levels[0].line_size, 64);
336
- EXPECT_EQ(info.levels[0].tlb_entries, 64);
337
- EXPECT_EQ(info.levels[0].partitioning, 1);
338
-
339
- EXPECT_EQ(info.levels[1].level, 1);
340
- EXPECT_EQ(info.levels[1].cache_type,
341
- CacheType::CPU_FEATURE_CACHE_INSTRUCTION);
342
- EXPECT_EQ(info.levels[1].cache_size, 32 * KiB);
343
- EXPECT_EQ(info.levels[1].ways, 8);
344
- EXPECT_EQ(info.levels[1].line_size, 64);
345
- EXPECT_EQ(info.levels[1].tlb_entries, 64);
346
- EXPECT_EQ(info.levels[1].partitioning, 1);
347
-
348
- EXPECT_EQ(info.levels[2].level, 2);
349
- EXPECT_EQ(info.levels[2].cache_type, CacheType::CPU_FEATURE_CACHE_UNIFIED);
350
- EXPECT_EQ(info.levels[2].cache_size, 256 * KiB);
351
- EXPECT_EQ(info.levels[2].ways, 8);
352
- EXPECT_EQ(info.levels[2].line_size, 64);
353
- EXPECT_EQ(info.levels[2].tlb_entries, 512);
354
- EXPECT_EQ(info.levels[2].partitioning, 1);
355
-
356
- EXPECT_EQ(info.levels[3].level, 3);
357
- EXPECT_EQ(info.levels[3].cache_type, CacheType::CPU_FEATURE_CACHE_UNIFIED);
358
- EXPECT_EQ(info.levels[3].cache_size, 6 * MiB);
359
- EXPECT_EQ(info.levels[3].ways, 12);
360
- EXPECT_EQ(info.levels[3].line_size, 64);
361
- EXPECT_EQ(info.levels[3].tlb_entries, 8192);
362
- EXPECT_EQ(info.levels[3].partitioning, 1);
363
- }
364
-
365
- // http://users.atw.hu/instlatx64/AuthenticAMD/AuthenticAMD0200F30_K11_Griffin_CPUID.txt
366
- TEST_F(CpuidX86Test, AMD_K11_GRIFFIN) {
367
- cpu().SetLeaves({
368
- {{0x00000000, 0}, Leaf{0x00000001, 0x68747541, 0x444D4163, 0x69746E65}},
369
- {{0x00000001, 0}, Leaf{0x00200F30, 0x00020800, 0x00002001, 0x178BFBFF}},
370
- {{0x80000000, 0}, Leaf{0x8000001A, 0x68747541, 0x444D4163, 0x69746E65}},
371
- {{0x80000001, 0}, Leaf{0x00200F30, 0x20000000, 0x0000131F, 0xEBD3FBFF}},
372
- });
373
- const auto info = GetX86Info();
374
-
375
- EXPECT_STREQ(info.vendor, CPU_FEATURES_VENDOR_AUTHENTIC_AMD);
376
- EXPECT_EQ(info.family, 0x11);
377
- EXPECT_EQ(info.model, 0x03);
378
- EXPECT_EQ(GetX86Microarchitecture(&info), X86Microarchitecture::AMD_K11);
379
- }
380
-
381
- // http://users.atw.hu/instlatx64/AuthenticAMD/AuthenticAMD0300F10_K12_Llano_CPUID.txt
382
- TEST_F(CpuidX86Test, AMD_K12_LLANO) {
383
- cpu().SetLeaves({
384
- {{0x00000000, 0}, Leaf{0x00000006, 0x68747541, 0x444D4163, 0x69746E65}},
385
- {{0x00000001, 0}, Leaf{0x00300F10, 0x00040800, 0x00802009, 0x178BFBFF}},
386
- {{0x80000000, 0}, Leaf{0x8000001B, 0x68747541, 0x444D4163, 0x69746E65}},
387
- {{0x80000001, 0}, Leaf{0x00300F10, 0x20002B31, 0x000037FF, 0xEFD3FBFF}},
388
- });
389
- const auto info = GetX86Info();
390
-
391
- EXPECT_STREQ(info.vendor, CPU_FEATURES_VENDOR_AUTHENTIC_AMD);
392
- EXPECT_EQ(info.family, 0x12);
393
- EXPECT_EQ(info.model, 0x01);
394
- EXPECT_EQ(GetX86Microarchitecture(&info), X86Microarchitecture::AMD_K12);
395
- }
396
-
397
- // http://users.atw.hu/instlatx64/AuthenticAMD/AuthenticAMD0500F01_K14_Bobcat_CPUID.txt
398
- TEST_F(CpuidX86Test, AMD_K14_BOBCAT_AMD0500F01) {
399
- cpu().SetLeaves({
400
- {{0x00000000, 0}, Leaf{0x00000006, 0x68747541, 0x444D4163, 0x69746E65}},
401
- {{0x00000001, 0}, Leaf{0x00500F01, 0x00020800, 0x00802209, 0x178BFBFF}},
402
- {{0x80000000, 0}, Leaf{0x8000001B, 0x68747541, 0x444D4163, 0x69746E65}},
403
- {{0x80000001, 0}, Leaf{0x00500F01, 0x00000000, 0x000035FF, 0x2FD3FBFF}},
404
- });
405
- const auto info = GetX86Info();
406
-
407
- EXPECT_STREQ(info.vendor, CPU_FEATURES_VENDOR_AUTHENTIC_AMD);
408
- EXPECT_EQ(info.family, 0x14);
409
- EXPECT_EQ(info.model, 0x00);
410
- EXPECT_EQ(GetX86Microarchitecture(&info), X86Microarchitecture::AMD_BOBCAT);
411
- }
412
-
413
- // http://users.atw.hu/instlatx64/AuthenticAMD/AuthenticAMD0500F10_K14_Bobcat_CPUID.txt
414
- TEST_F(CpuidX86Test, AMD_K14_BOBCAT_AMD0500F10) {
415
- cpu().SetLeaves({
416
- {{0x00000000, 0}, Leaf{0x00000006, 0x68747541, 0x444D4163, 0x69746E65}},
417
- {{0x00000001, 0}, Leaf{0x00500F10, 0x00020800, 0x00802209, 0x178BFBFF}},
418
- {{0x00000002, 0}, Leaf{0x00000000, 0x00000000, 0x00000000, 0x00000000}},
419
- {{0x00000003, 0}, Leaf{0x00000000, 0x00000000, 0x00000000, 0x00000000}},
420
- {{0x00000005, 0}, Leaf{0x00000040, 0x00000040, 0x00000003, 0x00000000}},
421
- {{0x00000006, 0}, Leaf{0x00000000, 0x00000000, 0x00000001, 0x00000000}},
422
- {{0x80000000, 0}, Leaf{0x8000001B, 0x68747541, 0x444D4163, 0x69746E65}},
423
- {{0x80000001, 0}, Leaf{0x00500F10, 0x00001242, 0x000035FF, 0x2FD3FBFF}},
424
- {{0x80000002, 0}, Leaf{0x20444D41, 0x35332D45, 0x72502030, 0x7365636F}},
425
- {{0x80000003, 0}, Leaf{0x00726F73, 0x00000000, 0x00000000, 0x00000000}},
426
- {{0x80000004, 0}, Leaf{0x00000000, 0x00000000, 0x00000000, 0x00000000}},
427
- {{0x80000005, 0}, Leaf{0xFF08FF08, 0xFF280000, 0x20080140, 0x20020140}},
428
- });
429
- const auto info = GetX86Info();
430
-
431
- EXPECT_STREQ(info.vendor, CPU_FEATURES_VENDOR_AUTHENTIC_AMD);
432
- EXPECT_EQ(info.family, 0x14);
433
- EXPECT_EQ(info.model, 0x01);
434
- EXPECT_EQ(GetX86Microarchitecture(&info), X86Microarchitecture::AMD_BOBCAT);
435
- }
436
-
437
- // http://users.atw.hu/instlatx64/AuthenticAMD/AuthenticAMD0500F20_K14_Bobcat_CPUID.txt
438
- TEST_F(CpuidX86Test, AMD_K14_BOBCAT_AMD0500F20) {
439
- cpu().SetLeaves({
440
- {{0x00000000, 0}, Leaf{0x00000006, 0x68747541, 0x444D4163, 0x69746E65}},
441
- {{0x00000001, 0}, Leaf{0x00500F20, 0x00020800, 0x00802209, 0x178BFBFF}},
442
- {{0x80000000, 0}, Leaf{0x8000001B, 0x68747541, 0x444D4163, 0x69746E65}},
443
- {{0x80000001, 0}, Leaf{0x00500F20, 0x000012E9, 0x000035FF, 0x2FD3FBFF}},
444
- });
445
- const auto info = GetX86Info();
446
-
447
- EXPECT_STREQ(info.vendor, CPU_FEATURES_VENDOR_AUTHENTIC_AMD);
448
- EXPECT_EQ(info.family, 0x14);
449
- EXPECT_EQ(info.model, 0x02);
450
- EXPECT_EQ(GetX86Microarchitecture(&info), X86Microarchitecture::AMD_BOBCAT);
451
- }
452
-
453
- // http://users.atw.hu/instlatx64/AuthenticAMD/AuthenticAMD0670F00_K15_StoneyRidge_CPUID.txt
454
- TEST_F(CpuidX86Test, AMD_K15_EXCAVATOR_STONEY_RIDGE) {
455
- cpu().SetLeaves({
456
- {{0x00000000, 0}, Leaf{0x0000000D, 0x68747541, 0x444D4163, 0x69746E65}},
457
- {{0x00000001, 0}, Leaf{0x00670F00, 0x00020800, 0x7ED8320B, 0x178BFBFF}},
458
- {{0x00000007, 0}, Leaf{0x00000000, 0x000001A9, 0x00000000, 0x00000000}},
459
- {{0x80000000, 0}, Leaf{0x8000001E, 0x68747541, 0x444D4163, 0x69746E65}},
460
- {{0x80000001, 0}, Leaf{0x00670F00, 0x00000000, 0x2FABBFFF, 0x2FD3FBFF}},
461
- {{0x80000002, 0}, Leaf{0x20444D41, 0x392D3941, 0x20303134, 0x45444152}},
462
- {{0x80000003, 0}, Leaf{0x52204E4F, 0x35202C35, 0x4D4F4320, 0x45545550}},
463
- {{0x80000004, 0}, Leaf{0x524F4320, 0x32205345, 0x47332B43, 0x00202020}},
464
- });
465
- const auto info = GetX86Info();
466
-
467
- EXPECT_STREQ(info.vendor, CPU_FEATURES_VENDOR_AUTHENTIC_AMD);
468
- EXPECT_EQ(info.family, 0x15);
469
- EXPECT_EQ(info.model, 0x70);
470
- EXPECT_STREQ(info.brand_string,
471
- "AMD A9-9410 RADEON R5, 5 COMPUTE CORES 2C+3G ");
472
- EXPECT_EQ(GetX86Microarchitecture(&info),
473
- X86Microarchitecture::AMD_EXCAVATOR);
474
- }
475
-
476
- // http://users.atw.hu/instlatx64/AuthenticAMD/AuthenticAMD0600F20_K15_AbuDhabi_CPUID0.txt
477
- TEST_F(CpuidX86Test, AMD_K15_PILEDRIVER_ABU_DHABI) {
478
- cpu().SetLeaves({
479
- {{0x00000000, 0}, Leaf{0x0000000D, 0x68747541, 0x444D4163, 0x69746E65}},
480
- {{0x00000001, 0}, Leaf{0x00600F20, 0x00100800, 0x3E98320B, 0x178BFBFF}},
481
- {{0x00000007, 0}, Leaf{0x00000000, 0x00000008, 0x00000000, 0x00000000}},
482
- {{0x80000000, 0}, Leaf{0x8000001E, 0x68747541, 0x444D4163, 0x69746E65}},
483
- {{0x80000001, 0}, Leaf{0x00600F20, 0x30000000, 0x01EBBFFF, 0x2FD3FBFF}},
484
- {{0x80000002, 0}, Leaf{0x20444D41, 0x6574704F, 0x286E6F72, 0x20296D74}},
485
- {{0x80000003, 0}, Leaf{0x636F7250, 0x6F737365, 0x33362072, 0x20203637}},
486
- {{0x80000004, 0}, Leaf{0x20202020, 0x20202020, 0x20202020, 0x00202020}},
487
- });
488
- const auto info = GetX86Info();
489
-
490
- EXPECT_STREQ(info.vendor, CPU_FEATURES_VENDOR_AUTHENTIC_AMD);
491
- EXPECT_EQ(info.family, 0x15);
492
- EXPECT_EQ(info.model, 0x02);
493
- EXPECT_STREQ(info.brand_string,
494
- "AMD Opteron(tm) Processor 6376 ");
495
- EXPECT_EQ(GetX86Microarchitecture(&info),
496
- X86Microarchitecture::AMD_PILEDRIVER);
497
-
498
- EXPECT_STREQ(info.brand_string, "AMD Opteron(tm) Processor 6376 ");
499
- }
500
-
501
- // http://users.atw.hu/instlatx64/AuthenticAMD/AuthenticAMD0600F20_K15_AbuDhabi_CPUID0.txt
502
- TEST_F(CpuidX86Test, AMD_K15_PILEDRIVER_ABU_DHABI_CACHE_INFO) {
503
- cpu().SetLeaves({
504
- {{0x00000000, 0}, Leaf{0x0000000D, 0x68747541, 0x444D4163, 0x69746E65}},
505
- {{0x00000001, 0}, Leaf{0x00600F20, 0x00100800, 0x3E98320B, 0x178BFBFF}},
506
- {{0x80000000, 0}, Leaf{0x8000001E, 0x68747541, 0x444D4163, 0x69746E65}},
507
- {{0x80000001, 0}, Leaf{0x00600F20, 0x30000000, 0x01EBBFFF, 0x2FD3FBFF}},
508
- {{0x8000001D, 0}, Leaf{0x00000121, 0x00C0003F, 0x0000003F, 0x00000000}},
509
- {{0x8000001D, 1}, Leaf{0x00004122, 0x0040003F, 0x000001FF, 0x00000000}},
510
- {{0x8000001D, 2}, Leaf{0x00004143, 0x03C0003F, 0x000007FF, 0x00000001}},
511
- {{0x8000001D, 3}, Leaf{0x0001C163, 0x0BC0003F, 0x000007FF, 0x00000001}},
512
- });
513
- const auto info = GetX86CacheInfo();
514
-
515
- EXPECT_EQ(info.size, 4);
516
- EXPECT_EQ(info.levels[0].level, 1);
517
- EXPECT_EQ(info.levels[0].cache_type, CacheType::CPU_FEATURE_CACHE_DATA);
518
- EXPECT_EQ(info.levels[0].cache_size, 16 * KiB);
519
- EXPECT_EQ(info.levels[0].ways, 4);
520
- EXPECT_EQ(info.levels[0].line_size, 64);
521
- EXPECT_EQ(info.levels[0].tlb_entries, 64);
522
- EXPECT_EQ(info.levels[0].partitioning, 1);
523
-
524
- EXPECT_EQ(info.levels[1].level, 1);
525
- EXPECT_EQ(info.levels[1].cache_type,
526
- CacheType::CPU_FEATURE_CACHE_INSTRUCTION);
527
- EXPECT_EQ(info.levels[1].cache_size, 64 * KiB);
528
- EXPECT_EQ(info.levels[1].ways, 2);
529
- EXPECT_EQ(info.levels[1].line_size, 64);
530
- EXPECT_EQ(info.levels[1].tlb_entries, 512);
531
- EXPECT_EQ(info.levels[1].partitioning, 1);
532
-
533
- EXPECT_EQ(info.levels[2].level, 2);
534
- EXPECT_EQ(info.levels[2].cache_type, CacheType::CPU_FEATURE_CACHE_UNIFIED);
535
- EXPECT_EQ(info.levels[2].cache_size, 2 * MiB);
536
- EXPECT_EQ(info.levels[2].ways, 16);
537
- EXPECT_EQ(info.levels[2].line_size, 64);
538
- EXPECT_EQ(info.levels[2].tlb_entries, 2048);
539
- EXPECT_EQ(info.levels[2].partitioning, 1);
540
-
541
- EXPECT_EQ(info.levels[3].level, 3);
542
- EXPECT_EQ(info.levels[3].cache_type, CacheType::CPU_FEATURE_CACHE_UNIFIED);
543
- EXPECT_EQ(info.levels[3].cache_size, 6 * MiB);
544
- EXPECT_EQ(info.levels[3].ways, 48);
545
- EXPECT_EQ(info.levels[3].line_size, 64);
546
- EXPECT_EQ(info.levels[3].tlb_entries, 2048);
547
- EXPECT_EQ(info.levels[3].partitioning, 1);
548
- }
549
-
550
- // https://github.com/InstLatx64/InstLatx64/blob/master/AuthenticAMD/AuthenticAMD0610F01_K15_Piledriver_CPUID.txt
551
- TEST_F(CpuidX86Test, AMD_K15_PILEDRIVER_A10) {
552
- cpu().SetLeaves({
553
- {{0x00000000, 0}, Leaf{0x0000000D, 0x68747541, 0x444D4163, 0x69746E65}},
554
- {{0x00000001, 0}, Leaf{0x00610F01, 0x00040800, 0x3E98320B, 0x178BFBFF}},
555
- {{0x00000007, 0}, Leaf{0x00000000, 0x00000008, 0x00000000, 0x00000000}},
556
- {{0x80000000, 0}, Leaf{0x8000001E, 0x68747541, 0x444D4163, 0x69746E65}},
557
- {{0x80000001, 0}, Leaf{0x00610F01, 0x20000000, 0x01EBBFFF, 0x2FD3FBFF}},
558
- {{0x80000002, 0}, Leaf{0x20444D41, 0x2D303141, 0x30303835, 0x5041204B}},
559
- {{0x80000003, 0}, Leaf{0x69772055, 0x52206874, 0x6F656461, 0x6D74286E}},
560
- {{0x80000004, 0}, Leaf{0x44482029, 0x61724720, 0x63696870, 0x00202073}},
561
- });
562
- const auto info = GetX86Info();
563
-
564
- EXPECT_STREQ(info.vendor, CPU_FEATURES_VENDOR_AUTHENTIC_AMD);
565
- EXPECT_EQ(info.family, 0x15);
566
- EXPECT_EQ(info.model, 0x10);
567
- EXPECT_STREQ(info.brand_string,
568
- "AMD A10-5800K APU with Radeon(tm) HD Graphics ");
569
- EXPECT_EQ(GetX86Microarchitecture(&info),
570
- X86Microarchitecture::AMD_PILEDRIVER);
571
- }
572
-
573
- // http://users.atw.hu/instlatx64/AuthenticAMD/AuthenticAMD0600F12_K15_Interlagos_CPUID3.txt
574
- TEST_F(CpuidX86Test, AMD_K15_BULLDOZER_INTERLAGOS) {
575
- cpu().SetLeaves({
576
- {{0x00000000, 0}, Leaf{0x0000000D, 0x68747541, 0x444D4163, 0x69746E65}},
577
- {{0x00000001, 0}, Leaf{0x00600F12, 0x000C0800, 0x1E98220B, 0x178BFBFF}},
578
- {{0x00000007, 0}, Leaf{0x00000000, 0x00000000, 0x00000000, 0x00000000}},
579
- {{0x80000000, 0}, Leaf{0x8000001E, 0x68747541, 0x444D4163, 0x69746E65}},
580
- {{0x80000001, 0}, Leaf{0x00600F12, 0x30000000, 0x01C9BFFF, 0x2FD3FBFF}},
581
- {{0x80000002, 0}, Leaf{0x20444D41, 0x6574704F, 0x286E6F72, 0x20294D54}},
582
- {{0x80000003, 0}, Leaf{0x636F7250, 0x6F737365, 0x32362072, 0x20203833}},
583
- {{0x80000004, 0}, Leaf{0x20202020, 0x20202020, 0x20202020, 0x00202020}},
584
- });
585
- const auto info = GetX86Info();
586
-
587
- EXPECT_STREQ(info.vendor, CPU_FEATURES_VENDOR_AUTHENTIC_AMD);
588
- EXPECT_EQ(info.family, 0x15);
589
- EXPECT_EQ(info.model, 0x01);
590
- EXPECT_STREQ(info.brand_string,
591
- "AMD Opteron(TM) Processor 6238 ");
592
- EXPECT_EQ(GetX86Microarchitecture(&info),
593
- X86Microarchitecture::AMD_BULLDOZER);
594
- }
595
-
596
- // http://users.atw.hu/instlatx64/AuthenticAMD0630F81_K15_Godavari_CPUID.txt
597
- TEST_F(CpuidX86Test, AMD_K15_STREAMROLLER_GODAVARI) {
598
- cpu().SetLeaves({
599
- {{0x00000000, 0}, Leaf{0x0000000D, 0x68747541, 0x444D4163, 0x69746E65}},
600
- {{0x00000001, 0}, Leaf{0x00630F81, 0x00040800, 0x3E98320B, 0x178BFBFF}},
601
- {{0x00000007, 0}, Leaf{0x00000000, 0x00000000, 0x00000000, 0x00000000}},
602
- {{0x80000000, 0}, Leaf{0x8000001E, 0x68747541, 0x444D4163, 0x69746E65}},
603
- {{0x80000001, 0}, Leaf{0x00630F81, 0x10000000, 0x0FEBBFFF, 0x2FD3FBFF}},
604
- {{0x80000002, 0}, Leaf{0x20444D41, 0x372D3841, 0x4B303736, 0x64615220}},
605
- {{0x80000003, 0}, Leaf{0x206E6F65, 0x202C3752, 0x43203031, 0x75706D6F}},
606
- {{0x80000004, 0}, Leaf{0x43206574, 0x7365726F, 0x2B433420, 0x00204736}},
607
- {{0x80000005, 0}, Leaf{0xFF40FF18, 0xFF40FF30, 0x10040140, 0x60030140}},
608
- });
609
- const auto info = GetX86Info();
610
-
611
- EXPECT_STREQ(info.vendor, CPU_FEATURES_VENDOR_AUTHENTIC_AMD);
612
- EXPECT_EQ(info.family, 0x15);
613
- EXPECT_EQ(info.model, 0x38);
614
- EXPECT_EQ(info.stepping, 0x01);
615
- EXPECT_STREQ(info.brand_string,
616
- "AMD A8-7670K Radeon R7, 10 Compute Cores 4C+6G ");
617
- EXPECT_EQ(GetX86Microarchitecture(&info),
618
- X86Microarchitecture::AMD_STREAMROLLER);
619
- }
620
-
621
- // http://users.atw.hu/instlatx64/AuthenticAMD/AuthenticAMD0600F12_K15_Zambezi8C_CPUID.txt
622
- TEST_F(CpuidX86Test, AMD_K15_BULLDOZER_ZAMBEZI_ABM) {
623
- cpu().SetLeaves({
624
- {{0x00000000, 0}, Leaf{0x0000000D, 0x68747541, 0x444D4163, 0x69746E65}},
625
- {{0x00000001, 0}, Leaf{0x00600F12, 0x00080800, 0x1E98220B, 0x178BFBFF}},
626
- {{0x00000007, 0}, Leaf{0x00000000, 0x00000000, 0x00000000, 0x00000000}},
627
- {{0x80000000, 0}, Leaf{0x8000001E, 0x68747541, 0x444D4163, 0x69746E65}},
628
- {{0x80000001, 0}, Leaf{0x00600F12, 0x10000000, 0x01C9BFFF, 0x2FD3FBFF}},
629
- });
630
- const auto info = GetX86Info();
631
-
632
- EXPECT_STREQ(info.vendor, CPU_FEATURES_VENDOR_AUTHENTIC_AMD);
633
- EXPECT_EQ(info.family, 0x15);
634
- EXPECT_EQ(info.model, 0x01);
635
-
636
- EXPECT_EQ(GetX86Microarchitecture(&info),
637
- X86Microarchitecture::AMD_BULLDOZER);
638
-
639
- EXPECT_TRUE(info.features.lzcnt);
640
- }
641
-
642
- // http://users.atw.hu/instlatx64/AuthenticAMD/AuthenticAMD0700F01_K16_Kabini_CPUID.txt
643
- TEST_F(CpuidX86Test, AMD_K16_JAGUAR_KABINI) {
644
- cpu().SetLeaves({
645
- {{0x00000000, 0}, Leaf{0x0000000D, 0x68747541, 0x444D4163, 0x69746E65}},
646
- {{0x00000001, 0}, Leaf{0x00700F01, 0x00040800, 0x3ED8220B, 0x178BFBFF}},
647
- {{0x00000007, 0}, Leaf{0x00000000, 0x00000008, 0x00000000, 0x00000000}},
648
- {{0x80000000, 0}, Leaf{0x8000001E, 0x68747541, 0x444D4163, 0x69746E65}},
649
- {{0x80000001, 0}, Leaf{0x00700F01, 0x00000000, 0x154037FF, 0x2FD3FBFF}},
650
- {{0x80000002, 0}, Leaf{0x20444D41, 0x352D3441, 0x20303030, 0x20555041}},
651
- {{0x80000003, 0}, Leaf{0x68746977, 0x64615220, 0x286E6F65, 0x20294D54}},
652
- {{0x80000004, 0}, Leaf{0x47204448, 0x68706172, 0x20736369, 0x00202020}},
653
- });
654
- const auto info = GetX86Info();
655
-
656
- EXPECT_STREQ(info.vendor, CPU_FEATURES_VENDOR_AUTHENTIC_AMD);
657
- EXPECT_EQ(info.family, 0x16);
658
- EXPECT_EQ(info.model, 0x00);
659
- EXPECT_STREQ(info.brand_string,
660
- "AMD A4-5000 APU with Radeon(TM) HD Graphics ");
661
- EXPECT_EQ(GetX86Microarchitecture(&info), X86Microarchitecture::AMD_JAGUAR);
662
- }
663
-
664
- // http://users.atw.hu/instlatx64/AuthenticAMD/AuthenticAMD0730F01_K16_Beema_CPUID2.txt
665
- TEST_F(CpuidX86Test, AMD_K16_PUMA_BEEMA) {
666
- cpu().SetLeaves({
667
- {{0x00000000, 0}, Leaf{0x0000000D, 0x68747541, 0x444D4163, 0x69746E65}},
668
- {{0x00000001, 0}, Leaf{0x00730F01, 0x00040800, 0x7ED8220B, 0x178BFBFF}},
669
- {{0x00000007, 0}, Leaf{0x00000000, 0x00000008, 0x00000000, 0x00000000}},
670
- {{0x80000000, 0}, Leaf{0x8000001E, 0x68747541, 0x444D4163, 0x69746E65}},
671
- {{0x80000001, 0}, Leaf{0x00730F01, 0x00000000, 0x1D4037FF, 0x2FD3FBFF}},
672
- {{0x80000002, 0}, Leaf{0x20444D41, 0x362D3641, 0x20303133, 0x20555041}},
673
- {{0x80000003, 0}, Leaf{0x68746977, 0x444D4120, 0x64615220, 0x206E6F65}},
674
- {{0x80000004, 0}, Leaf{0x47203452, 0x68706172, 0x20736369, 0x00202020}},
675
- });
676
- const auto info = GetX86Info();
677
-
678
- EXPECT_STREQ(info.vendor, CPU_FEATURES_VENDOR_AUTHENTIC_AMD);
679
- EXPECT_EQ(info.family, 0x16);
680
- EXPECT_EQ(info.model, 0x30);
681
- EXPECT_STREQ(info.brand_string,
682
- "AMD A6-6310 APU with AMD Radeon R4 Graphics ");
683
- EXPECT_EQ(GetX86Microarchitecture(&info), X86Microarchitecture::AMD_PUMA);
684
- }
685
-
686
- // https://github.com/InstLatx64/InstLatx64/blob/master/AuthenticAMD/AuthenticAMD0720F61_K16_Cato_CPUID.txt
687
- TEST_F(CpuidX86Test, AMD_K16_CATO) {
688
- cpu().SetLeaves({
689
- {{0x00000000, 0}, Leaf{0x0000000D, 0x68747541, 0x444D4163, 0x69746E65}},
690
- {{0x00000001, 0}, Leaf{0x00720F61, 0x00080800, 0x3ED8220B, 0x178BFBFF}},
691
- {{0x00000007, 0}, Leaf{0x00000000, 0x00000008, 0x00000000, 0x00000000}},
692
- {{0x80000000, 0}, Leaf{0x8000001E, 0x68747541, 0x444D4163, 0x69746E65}},
693
- {{0x80000001, 0}, Leaf{0x00720F61, 0x00000000, 0x154837FF, 0x2FD3FBFF}},
694
- {{0x80000002, 0}, Leaf{0x20444D41, 0x392D3941, 0x20303238, 0x636F7250}},
695
- {{0x80000003, 0}, Leaf{0x6F737365, 0x00000072, 0x00000000, 0x00000000}},
696
- {{0x80000004, 0}, Leaf{0x00000000, 0x00000000, 0x00000000, 0x00000000}},
697
- });
698
- const auto info = GetX86Info();
699
-
700
- EXPECT_STREQ(info.vendor, CPU_FEATURES_VENDOR_AUTHENTIC_AMD);
701
- EXPECT_EQ(info.family, 0x16);
702
- EXPECT_EQ(info.model, 0x26);
703
- EXPECT_STREQ(info.brand_string,
704
- "AMD A9-9820 Processor");
705
- EXPECT_EQ(GetX86Microarchitecture(&info), X86Microarchitecture::AMD_JAGUAR);
706
- }
707
-
708
- // http://users.atw.hu/instlatx64/AuthenticAMD/AuthenticAMD0820F01_K17_Dali_CPUID.txt
709
- TEST_F(CpuidX86Test, AMD_K17_ZEN_DALI) {
710
- cpu().SetLeaves({
711
- {{0x00000000, 0}, Leaf{0x0000000D, 0x68747541, 0x444D4163, 0x69746E65}},
712
- {{0x00000001, 0}, Leaf{0x00820F01, 0x00020800, 0x7ED8320B, 0x178BFBFF}},
713
- {{0x00000007, 0}, Leaf{0x00000000, 0x209C01A9, 0x00000000, 0x00000000}},
714
- {{0x80000000, 0}, Leaf{0x8000001F, 0x68747541, 0x444D4163, 0x69746E65}},
715
- {{0x80000001, 0}, Leaf{0x00820F01, 0x00000000, 0x35C233FF, 0x2FD3FBFF}},
716
- {{0x80000002, 0}, Leaf{0x20444D41, 0x30323033, 0x69772065, 0x52206874}},
717
- {{0x80000003, 0}, Leaf{0x6F656461, 0x7247206E, 0x69687061, 0x20207363}},
718
- {{0x80000004, 0}, Leaf{0x20202020, 0x20202020, 0x20202020, 0x00202020}},
719
- });
720
- const auto info = GetX86Info();
721
-
722
- EXPECT_STREQ(info.vendor, CPU_FEATURES_VENDOR_AUTHENTIC_AMD);
723
- EXPECT_EQ(info.family, 0x17);
724
- EXPECT_EQ(info.model, 0x20);
725
- EXPECT_STREQ(info.brand_string,
726
- "AMD 3020e with Radeon Graphics ");
727
- EXPECT_EQ(GetX86Microarchitecture(&info), X86Microarchitecture::AMD_ZEN);
728
- }
729
-
730
- // http://users.atw.hu/instlatx64/AuthenticAMD/AuthenticAMD0800F82_K17_ZenP_CPUID.txt
731
- TEST_F(CpuidX86Test, AMD_K17_ZEN_PLUS_PINNACLE_RIDGE) {
732
- cpu().SetLeaves({
733
- {{0x00000000, 0}, Leaf{0x0000000D, 0x68747541, 0x444D4163, 0x69746E65}},
734
- {{0x00000001, 0}, Leaf{0x00800F82, 0x00100800, 0x7ED8320B, 0x178BFBFF}},
735
- {{0x00000007, 0}, Leaf{0x00000000, 0x209C01A9, 0x00000000, 0x00000000}},
736
- {{0x80000000, 0}, Leaf{0x8000001F, 0x68747541, 0x444D4163, 0x69746E65}},
737
- {{0x80000001, 0}, Leaf{0x00800F82, 0x20000000, 0x35C233FF, 0x2FD3FBFF}},
738
- {{0x80000002, 0}, Leaf{0x20444D41, 0x657A7952, 0x2037206E, 0x30303732}},
739
- {{0x80000003, 0}, Leaf{0x69452058, 0x2D746867, 0x65726F43, 0x6F725020}},
740
- {{0x80000004, 0}, Leaf{0x73736563, 0x2020726F, 0x20202020, 0x00202020}},
741
- });
742
- const auto info = GetX86Info();
743
-
744
- EXPECT_STREQ(info.vendor, CPU_FEATURES_VENDOR_AUTHENTIC_AMD);
745
- EXPECT_EQ(info.family, 0x17);
746
- EXPECT_EQ(info.model, 0x08);
747
- EXPECT_STREQ(info.brand_string,
748
- "AMD Ryzen 7 2700X Eight-Core Processor ");
749
- EXPECT_EQ(GetX86Microarchitecture(&info), X86Microarchitecture::AMD_ZEN_PLUS);
750
- }
751
-
752
- // http://users.atw.hu/instlatx64/AuthenticAMD/AuthenticAMD0840F70_K17_CPUID.txt
753
- TEST_F(CpuidX86Test, AMD_K17_ZEN2_XBOX_SERIES_X) {
754
- cpu().SetLeaves({
755
- {{0x00000000, 0}, Leaf{0x00000010, 0x68747541, 0x444D4163, 0x69746E65}},
756
- {{0x00000001, 0}, Leaf{0x00840F70, 0x00100800, 0x7ED8320B, 0x178BFBFF}},
757
- {{0x00000007, 0}, Leaf{0x00000000, 0x219C91A9, 0x00400004, 0x00000000}},
758
- {{0x80000000, 0}, Leaf{0x80000020, 0x68747541, 0x444D4163, 0x69746E65}},
759
- {{0x80000001, 0}, Leaf{0x00840F70, 0x00000000, 0xF5C2B7FF, 0x2FD3FBFF}},
760
- {{0x80000002, 0}, Leaf{0x20444D41, 0x30303734, 0x2D382053, 0x65726F43}},
761
- {{0x80000003, 0}, Leaf{0x6F725020, 0x73736563, 0x4420726F, 0x746B7365}},
762
- {{0x80000004, 0}, Leaf{0x4B20706F, 0x00007469, 0x00000000, 0x00000000}},
763
- });
764
- const auto info = GetX86Info();
765
-
766
- EXPECT_STREQ(info.vendor, CPU_FEATURES_VENDOR_AUTHENTIC_AMD);
767
- EXPECT_EQ(info.family, 0x17);
768
- EXPECT_EQ(info.model, 0x47);
769
- EXPECT_STREQ(info.brand_string, "AMD 4700S 8-Core Processor Desktop Kit");
770
- EXPECT_EQ(GetX86Microarchitecture(&info), X86Microarchitecture::AMD_ZEN2);
771
- }
772
-
773
- // http://users.atw.hu/instlatx64/HygonGenuine/HygonGenuine0900F02_Hygon_CPUID3.txt
774
- TEST_F(CpuidX86Test, AMD_K18_ZEN_DHYANA) {
775
- cpu().SetLeaves({
776
- {{0x00000000, 0}, Leaf{0x0000000D, 0x6F677948, 0x656E6975, 0x6E65476E}},
777
- {{0x00000001, 0}, Leaf{0x00900F02, 0x00100800, 0x74D83209, 0x178BFBFF}},
778
- {{0x00000007, 0}, Leaf{0x00000000, 0x009C01A9, 0x0040068C, 0x00000000}},
779
- {{0x80000000, 0}, Leaf{0x8000001F, 0x6F677948, 0x656E6975, 0x6E65476E}},
780
- {{0x80000001, 0}, Leaf{0x00900F02, 0x60000000, 0x35C233FF, 0x2FD3FBFF}},
781
- {{0x80000002, 0}, Leaf{0x6F677948, 0x3843206E, 0x31332036, 0x20203538}},
782
- {{0x80000003, 0}, Leaf{0x6F632D38, 0x50206572, 0x65636F72, 0x726F7373}},
783
- {{0x80000004, 0}, Leaf{0x20202020, 0x20202020, 0x20202020, 0x00202020}},
784
- });
785
- const auto info = GetX86Info();
786
-
787
- EXPECT_STREQ(info.vendor, CPU_FEATURES_VENDOR_HYGON_GENUINE);
788
- EXPECT_EQ(info.family, 0x18);
789
- EXPECT_EQ(info.model, 0x00);
790
- EXPECT_STREQ(info.brand_string,
791
- "Hygon C86 3185 8-core Processor ");
792
- EXPECT_EQ(GetX86Microarchitecture(&info), X86Microarchitecture::AMD_ZEN);
793
- }
794
-
795
- // http://users.atw.hu/instlatx64/HygonGenuine/HygonGenuine0900F02_Hygon_CPUID.txt
796
- TEST_F(CpuidX86Test, AMD_K18_ZEN_DHYANA_CACHE_INFO) {
797
- cpu().SetLeaves({
798
- {{0x00000000, 0}, Leaf{0x0000000D, 0x6F677948, 0x656E6975, 0x6E65476E}},
799
- {{0x00000001, 0}, Leaf{0x00900F02, 0x00100800, 0x74D83209, 0x178BFBFF}},
800
- {{0x80000000, 0}, Leaf{0x8000001F, 0x6F677948, 0x656E6975, 0x6E65476E}},
801
- {{0x80000001, 0}, Leaf{0x00900F02, 0x60000000, 0x35C233FF, 0x2FD3FBFF}},
802
- {{0x8000001D, 0}, Leaf{0x00004121, 0x01C0003F, 0x0000003F, 0x00000000}},
803
- {{0x8000001D, 1}, Leaf{0x00004122, 0x00C0003F, 0x000000FF, 0x00000000}},
804
- {{0x8000001D, 2}, Leaf{0x00004143, 0x01C0003F, 0x000003FF, 0x00000002}},
805
- {{0x8000001D, 3}, Leaf{0x0001C163, 0x03C0003F, 0x00001FFF, 0x00000001}},
806
- });
807
- const auto info = GetX86CacheInfo();
808
-
809
- EXPECT_EQ(info.size, 4);
810
- EXPECT_EQ(info.levels[0].level, 1);
811
- EXPECT_EQ(info.levels[0].cache_type, CacheType::CPU_FEATURE_CACHE_DATA);
812
- EXPECT_EQ(info.levels[0].cache_size, 32 * KiB);
813
- EXPECT_EQ(info.levels[0].ways, 8);
814
- EXPECT_EQ(info.levels[0].line_size, 64);
815
- EXPECT_EQ(info.levels[0].tlb_entries, 64);
816
- EXPECT_EQ(info.levels[0].partitioning, 1);
817
-
818
- EXPECT_EQ(info.levels[1].level, 1);
819
- EXPECT_EQ(info.levels[1].cache_type,
820
- CacheType::CPU_FEATURE_CACHE_INSTRUCTION);
821
- EXPECT_EQ(info.levels[1].cache_size, 64 * KiB);
822
- EXPECT_EQ(info.levels[1].ways, 4);
823
- EXPECT_EQ(info.levels[1].line_size, 64);
824
- EXPECT_EQ(info.levels[1].tlb_entries, 256);
825
- EXPECT_EQ(info.levels[1].partitioning, 1);
826
-
827
- EXPECT_EQ(info.levels[2].level, 2);
828
- EXPECT_EQ(info.levels[2].cache_type, CacheType::CPU_FEATURE_CACHE_UNIFIED);
829
- EXPECT_EQ(info.levels[2].cache_size, 512 * KiB);
830
- EXPECT_EQ(info.levels[2].ways, 8);
831
- EXPECT_EQ(info.levels[2].line_size, 64);
832
- EXPECT_EQ(info.levels[2].tlb_entries, 1024);
833
- EXPECT_EQ(info.levels[2].partitioning, 1);
834
-
835
- EXPECT_EQ(info.levels[3].level, 3);
836
- EXPECT_EQ(info.levels[3].cache_type, CacheType::CPU_FEATURE_CACHE_UNIFIED);
837
- EXPECT_EQ(info.levels[3].cache_size, 8 * MiB);
838
- EXPECT_EQ(info.levels[3].ways, 16);
839
- EXPECT_EQ(info.levels[3].line_size, 64);
840
- EXPECT_EQ(info.levels[3].tlb_entries, 8192);
841
- EXPECT_EQ(info.levels[3].partitioning, 1);
842
- }
843
-
844
- // http://users.atw.hu/instlatx64/AuthenticAMD/AuthenticAMD0A20F10_K19_Vermeer2_CPUID.txt
845
- TEST_F(CpuidX86Test, AMD_K19_ZEN3_VERMEER) {
846
- cpu().SetLeaves({
847
- {{0x00000000, 0}, Leaf{0x00000010, 0x68747541, 0x444D4163, 0x69746E65}},
848
- {{0x00000001, 0}, Leaf{0x00A20F10, 0x01180800, 0x7ED8320B, 0x178BFBFF}},
849
- {{0x00000007, 0}, Leaf{0x00000000, 0x219C97A9, 0x0040068C, 0x00000000}},
850
- {{0x80000000, 0}, Leaf{0x80000023, 0x68747541, 0x444D4163, 0x69746E65}},
851
- {{0x80000001, 0}, Leaf{0x00A20F10, 0x20000000, 0x75C237FF, 0x2FD3FBFF}},
852
- {{0x80000002, 0}, Leaf{0x20444D41, 0x657A7952, 0x2039206E, 0x30303935}},
853
- {{0x80000003, 0}, Leaf{0x32312058, 0x726F432D, 0x72502065, 0x7365636F}},
854
- {{0x80000004, 0}, Leaf{0x20726F73, 0x20202020, 0x20202020, 0x00202020}},
855
- });
856
- const auto info = GetX86Info();
857
-
858
- EXPECT_STREQ(info.vendor, CPU_FEATURES_VENDOR_AUTHENTIC_AMD);
859
- EXPECT_EQ(info.family, 0x19);
860
- EXPECT_EQ(info.model, 0x21);
861
- EXPECT_STREQ(info.brand_string,
862
- "AMD Ryzen 9 5900X 12-Core Processor ");
863
- EXPECT_EQ(GetX86Microarchitecture(&info), X86Microarchitecture::AMD_ZEN3);
864
- }
865
-
866
- // http://users.atw.hu/instlatx64/AuthenticAMD/AuthenticAMD0A40F41_K19_Rembrandt_03_CPUID.txt
867
- TEST_F(CpuidX86Test, AMD_K19_ZEN3) {
868
- cpu().SetLeaves({
869
- {{0x00000000, 0}, Leaf{0x00000010, 0x68747541, 0x444D4163, 0x69746E65}},
870
- {{0x00000001, 0}, Leaf{0x00A40F41, 0x00100800, 0x7EF8320B, 0x178BFBFF}},
871
- {{0x80000000, 0}, Leaf{0x80000023, 0x68747541, 0x444D4163, 0x69746E65}},
872
- {{0x80000001, 0}, Leaf{0x00A40F41, 0x50000000, 0x75C237FF, 0x2FD3FBFF}},
873
- {{0x80000002, 0}, Leaf{0x20444D41, 0x657A7952, 0x2039206E, 0x30303936}},
874
- {{0x80000003, 0}, Leaf{0x77205848, 0x20687469, 0x65646152, 0x47206E6F}},
875
- {{0x80000004, 0}, Leaf{0x68706172, 0x20736369, 0x20202020, 0x00202020}},
876
- });
877
- const auto info = GetX86Info();
878
-
879
- EXPECT_STREQ(info.vendor, CPU_FEATURES_VENDOR_AUTHENTIC_AMD);
880
- EXPECT_EQ(info.family, 0x19);
881
- EXPECT_EQ(info.model, 0x44);
882
- EXPECT_STREQ(info.brand_string,
883
- "AMD Ryzen 9 6900HX with Radeon Graphics ");
884
- EXPECT_EQ(GetX86Microarchitecture(&info), X86Microarchitecture::AMD_ZEN3);
885
- }
886
-
887
- // http://users.atw.hu/instlatx64/AuthenticAMD/AuthenticAMD0A60F12_K19_Raphael_01_CPUID.txt
888
- TEST_F(CpuidX86Test, AMD_K19_ZEN4_RAPHAEL) {
889
- cpu().SetLeaves({
890
- {{0x00000000, 0}, Leaf{0x00000010, 0x68747541, 0x444D4163, 0x69746E65}},
891
- {{0x00000001, 0}, Leaf{0x00A60F12, 0x000C0800, 0x7EF8320B, 0x178BFBFF}},
892
- {{0x80000000, 0}, Leaf{0x80000028, 0x68747541, 0x444D4163, 0x69746E65}},
893
- {{0x80000001, 0}, Leaf{0x00A60F12, 0x00000000, 0x75C237FF, 0x2FD3FBFF}},
894
- {{0x80000002, 0}, Leaf{0x20444D41, 0x657A7952, 0x2035206E, 0x30303637}},
895
- {{0x80000003, 0}, Leaf{0x2D362058, 0x65726F43, 0x6F725020, 0x73736563}},
896
- {{0x80000004, 0}, Leaf{0x2020726F, 0x20202020, 0x20202020, 0x00202020}},
897
- });
898
- const auto info = GetX86Info();
899
-
900
- EXPECT_STREQ(info.vendor, CPU_FEATURES_VENDOR_AUTHENTIC_AMD);
901
- EXPECT_EQ(info.family, 0x19);
902
- EXPECT_EQ(info.model, 0x61);
903
- EXPECT_STREQ(info.brand_string,
904
- "AMD Ryzen 5 7600X 6-Core Processor ");
905
- EXPECT_EQ(GetX86Microarchitecture(&info), X86Microarchitecture::AMD_ZEN4);
906
- }
907
-
908
- // http://users.atw.hu/instlatx64/HygonGenuine/HygonGenuine0900F11_Hygon_01_CPUID.txt
909
- TEST_F(CpuidX86Test, AMD_K18_ZEN_DHYANA_OCTAL_CORE_C86_3250) {
910
- cpu().SetLeaves({
911
- {{0x00000000, 0}, Leaf{0x0000000D, 0x6F677948, 0x656E6975, 0x6E65476E}},
912
- {{0x00000001, 0}, Leaf{0x00900F11, 0x00100800, 0x76D8320B, 0x178BFBFF}},
913
- {{0x80000000, 0}, Leaf{0x8000001F, 0x6F677948, 0x656E6975, 0x6E65476E}},
914
- {{0x80000001, 0}, Leaf{0x00900F11, 0x60000000, 0x35C233FF, 0x2FD3FBFF}},
915
- {{0x80000002, 0}, Leaf{0x6F677948, 0x3843206E, 0x32332036, 0x20203035}},
916
- {{0x80000003, 0}, Leaf{0x6F632D38, 0x50206572, 0x65636F72, 0x726F7373}},
917
- {{0x80000004, 0}, Leaf{0x20202020, 0x20202020, 0x20202020, 0x00202020}},
918
- });
919
- const auto info = GetX86Info();
920
-
921
- EXPECT_EQ(info.model, 0x01);
922
- EXPECT_EQ(info.family, 0x18);
923
- EXPECT_STREQ(info.vendor, CPU_FEATURES_VENDOR_HYGON_GENUINE);
924
- EXPECT_STREQ(info.brand_string,
925
- "Hygon C86 3250 8-core Processor ");
926
- EXPECT_EQ(GetX86Microarchitecture(&info), X86Microarchitecture::AMD_ZEN);
927
- }
928
-
929
- // http://users.atw.hu/instlatx64/AuthenticAMD/AuthenticAMD08A0F00_K17_Mendocino_01_CPUID.txt
930
- TEST_F(CpuidX86Test, AMD_ZEN2_MENDOCINO) {
931
- cpu().SetLeaves({
932
- {{0x00000000, 0}, Leaf{0x00000010, 0x68747541, 0x444D4163, 0x69746E65}},
933
- {{0x00000001, 0}, Leaf{0x008A0F00, 0x00080800, 0x7EF8320B, 0x178BFBFF}},
934
- });
935
- const auto info = GetX86Info();
936
-
937
- EXPECT_EQ(info.model, 0xA0);
938
- EXPECT_EQ(info.family, 0x17);
939
- EXPECT_STREQ(info.vendor, CPU_FEATURES_VENDOR_AUTHENTIC_AMD);
940
- EXPECT_EQ(GetX86Microarchitecture(&info), X86Microarchitecture::AMD_ZEN2);
941
- }
942
-
943
- // http://users.atw.hu/instlatx64/GenuineIntel/GenuineIntel00906A4_AlderLakeP_00_CPUID.txt
944
- TEST_F(CpuidX86Test, INTEL_ALDER_LAKE_AVX_VNNI) {
945
- cpu().SetOsBackupsExtendedRegisters(true);
946
- cpu().SetLeaves({
947
- {{0x00000000, 0}, Leaf{0x00000020, 0x756E6547, 0x6C65746E, 0x49656E69}},
948
- {{0x00000001, 0}, Leaf{0x000906A4, 0x00400800, 0x7FFAFBBF, 0xBFEBFBFF}},
949
- {{0x00000007, 0}, Leaf{0x00000001, 0x239CA7EB, 0x984007AC, 0xFC18C410}},
950
- {{0x00000007, 1}, Leaf{0x00400810, 0x00000000, 0x00000000, 0x00000000}},
951
- });
952
- const auto info = GetX86Info();
953
-
954
- EXPECT_STREQ(info.vendor, CPU_FEATURES_VENDOR_GENUINE_INTEL);
955
- EXPECT_EQ(info.family, 0x06);
956
- EXPECT_EQ(info.model, 0x9A);
957
- EXPECT_TRUE(info.features.avx_vnni);
958
- EXPECT_EQ(GetX86Microarchitecture(&info), X86Microarchitecture::INTEL_ADL);
959
- }
960
-
961
- // https://github.com/InstLatx64/InstLatx64/blob/master/GenuineIntel/GenuineIntel0090672_AlderLake_BC_AVX512_CPUID01.txt
962
- TEST_F(CpuidX86Test, INTEL_ALDER_LAKE_AVX512) {
963
- cpu().SetOsBackupsExtendedRegisters(true);
964
- #if defined(CPU_FEATURES_OS_MACOS)
965
- cpu().SetDarwinSysCtlByName("hw.optional.avx512f");
966
- #endif
967
- cpu().SetLeaves({
968
- {{0x00000000, 0}, Leaf{0x00000020, 0x756E6547, 0x6C65746E, 0x49656E69}},
969
- {{0x00000001, 0}, Leaf{0x000906A4, 0x00400800, 0x7FFAFBBF, 0xBFEBFBFF}},
970
- {{0x00000007, 0}, Leaf{0x00000001, 0xF3BFA7EB, 0x98C07FEE, 0xFC9CC510}},
971
- {{0x00000007, 1}, Leaf{0x00401C30, 0x00000000, 0x00000000, 0x00000000}},
972
- });
973
-
974
- const auto info = GetX86Info();
975
-
976
- EXPECT_STREQ(info.vendor, CPU_FEATURES_VENDOR_GENUINE_INTEL);
977
- EXPECT_EQ(info.family, 0x06);
978
- EXPECT_EQ(info.model, 0x9A);
979
- EXPECT_TRUE(info.features.avx512f);
980
- EXPECT_TRUE(info.features.avx512bw);
981
- EXPECT_TRUE(info.features.avx512dq);
982
- EXPECT_TRUE(info.features.avx512cd);
983
- EXPECT_TRUE(info.features.avx512vl);
984
- EXPECT_TRUE(info.features.avx512_vp2intersect);
985
- EXPECT_TRUE(info.features.avx512vbmi);
986
- EXPECT_TRUE(info.features.avx512vbmi2);
987
- EXPECT_TRUE(info.features.avx512bitalg);
988
- EXPECT_TRUE(info.features.avx512vpopcntdq);
989
- EXPECT_TRUE(info.features.avx512ifma);
990
- EXPECT_TRUE(info.features.avx512_bf16);
991
- EXPECT_TRUE(info.features.avx512_fp16);
992
-
993
- EXPECT_EQ(GetX86Microarchitecture(&info), X86Microarchitecture::INTEL_ADL);
994
- }
995
-
996
- // https://github.com/InstLatx64/InstLatx64/blob/master/GenuineIntel/GenuineIntel00806C1_TigerLake_CPUID3.txt
997
- TEST_F(CpuidX86Test, INTEL_TIGER_LAKE_AVX512) {
998
- cpu().SetOsBackupsExtendedRegisters(true);
999
- #if defined(CPU_FEATURES_OS_MACOS)
1000
- cpu().SetDarwinSysCtlByName("hw.optional.avx512f");
1001
- #endif
1002
- cpu().SetLeaves({
1003
- {{0x00000000, 0}, Leaf{0x0000001B, 0x756E6547, 0x6C65746E, 0x49656E69}},
1004
- {{0x00000001, 0}, Leaf{0x000806C1, 0x00100800, 0x7FFAFBBF, 0xBFEBFBFF}},
1005
- {{0x00000007, 0}, Leaf{0x00000000, 0xF3BFA7EB, 0x18C05FCE, 0xFC100510}},
1006
- });
1007
-
1008
- const auto info = GetX86Info();
1009
-
1010
- EXPECT_STREQ(info.vendor, CPU_FEATURES_VENDOR_GENUINE_INTEL);
1011
- EXPECT_EQ(info.family, 0x06);
1012
- EXPECT_EQ(info.model, 0x8C);
1013
- EXPECT_TRUE(info.features.avx512f);
1014
- EXPECT_TRUE(info.features.avx512bw);
1015
- EXPECT_TRUE(info.features.avx512dq);
1016
- EXPECT_TRUE(info.features.avx512cd);
1017
- EXPECT_TRUE(info.features.avx512vl);
1018
- EXPECT_TRUE(info.features.avx512_vp2intersect);
1019
- EXPECT_TRUE(info.features.avx512vbmi);
1020
- EXPECT_TRUE(info.features.avx512vbmi2);
1021
- EXPECT_TRUE(info.features.avx512bitalg);
1022
- EXPECT_TRUE(info.features.avx512vpopcntdq);
1023
- EXPECT_TRUE(info.features.avx512ifma);
1024
-
1025
- EXPECT_EQ(GetX86Microarchitecture(&info), X86Microarchitecture::INTEL_TGL);
1026
- }
1027
-
1028
- // http://users.atw.hu/instlatx64/GenuineIntel/GenuineIntel00706E5_IceLakeY_CPUID.txt
1029
- TEST_F(CpuidX86Test, INTEL_ICE_LAKE_GFNI) {
1030
- cpu().SetLeaves({
1031
- {{0x00000000, 0}, Leaf{0x0000001B, 0x756E6547, 0x6C65746E, 0x49656E69}},
1032
- {{0x00000001, 0}, Leaf{0x000706E5, 0x00100800, 0x7FFAFBBF, 0xBFEBFBFF}},
1033
- {{0x00000007, 0}, Leaf{0x00000000, 0xF2BF27EF, 0x40405F4E, 0xBC000410}},
1034
- });
1035
-
1036
- const auto info = GetX86Info();
1037
-
1038
- EXPECT_STREQ(info.vendor, CPU_FEATURES_VENDOR_GENUINE_INTEL);
1039
- EXPECT_EQ(info.family, 0x06);
1040
- EXPECT_EQ(info.model, 0x7E);
1041
- EXPECT_TRUE(info.features.gfni);
1042
-
1043
- EXPECT_EQ(GetX86Microarchitecture(&info), X86Microarchitecture::INTEL_ICL);
1044
- }
1045
-
1046
- // http://users.atw.hu/instlatx64/GenuineIntel/GenuineIntel00906C0_JasperLake_CPUID01.txt
1047
- TEST_F(CpuidX86Test, INTEL_TREMONT_JASPER_LAKE_MOVDR) {
1048
- cpu().SetLeaves({
1049
- {{0x00000000, 0}, Leaf{0x0000001B, 0x756E6547, 0x6C65746E, 0x49656E69}},
1050
- {{0x00000001, 0}, Leaf{0x00090661, 0x00800800, 0x4FF8EBBF, 0xBFEBFBFF}},
1051
- {{0x00000007, 0}, Leaf{0x00000000, 0x2394A2C3, 0x18400124, 0xFC000400}},
1052
- });
1053
-
1054
- const auto info = GetX86Info();
1055
-
1056
- EXPECT_STREQ(info.vendor, CPU_FEATURES_VENDOR_GENUINE_INTEL);
1057
- EXPECT_EQ(info.family, 0x06);
1058
- EXPECT_EQ(info.model, 0x96);
1059
- EXPECT_TRUE(info.features.movdiri);
1060
- EXPECT_TRUE(info.features.movdir64b);
1061
-
1062
- EXPECT_EQ(GetX86Microarchitecture(&info), X86Microarchitecture::INTEL_ATOM_TMT);
1063
- }
1064
-
1065
- // http://users.atw.hu/instlatx64/GenuineIntel/GenuineIntel0090672_AlderLake_LC_BC_CPUID01.txt
1066
- TEST_F(CpuidX86Test, INTEL_ALDER_LAKE_REP) {
1067
- cpu().SetLeaves({
1068
- {{0x00000000, 0}, Leaf{0x00000020, 0x756E6547, 0x6C65746E, 0x49656E69}},
1069
- {{0x00000001, 0}, Leaf{0x00090672, 0x00800800, 0x7FFAFBFF, 0xBFEBFBFF}},
1070
- {{0x00000007, 0}, Leaf{0x00000001, 0x239CA7EB, 0x98C027AC, 0xFC1CC410}},
1071
- {{0x00000007, 1}, Leaf{0x00400810, 0x00000000, 0x00000000, 0x00000000}},
1072
- });
1073
-
1074
- const auto info = GetX86Info();
1075
-
1076
- EXPECT_STREQ(info.vendor, CPU_FEATURES_VENDOR_GENUINE_INTEL);
1077
- EXPECT_EQ(info.family, 0x06);
1078
- EXPECT_EQ(info.model, 0x97);
1079
- EXPECT_TRUE(info.features.erms);
1080
- EXPECT_TRUE(info.features.fs_rep_mov);
1081
- EXPECT_FALSE(info.features.fz_rep_movsb);
1082
- EXPECT_TRUE(info.features.fs_rep_stosb);
1083
- EXPECT_FALSE(info.features.fs_rep_cmpsb_scasb);
1084
-
1085
- EXPECT_EQ(GetX86Microarchitecture(&info), X86Microarchitecture::INTEL_ADL);
1086
- }
1087
-
1088
- // http://users.atw.hu/instlatx64/AuthenticAMD/AuthenticAMD0100FA0_K10_Thuban_CPUID.txt
1089
- TEST_F(CpuidX86Test, AMD_THUBAN_CACHE_INFO) {
1090
- cpu().SetLeaves({
1091
- {{0x00000000, 0}, Leaf{0x00000006, 0x68747541, 0x444D4163, 0x69746E65}},
1092
- {{0x80000000, 0}, Leaf{0x8000001B, 0x68747541, 0x444D4163, 0x69746E65}},
1093
- {{0x80000001, 0}, Leaf{0x00100FA0, 0x10000050, 0x000037FF, 0xEFD3FBFF}},
1094
- {{0x80000005, 0}, Leaf{0xFF30FF10, 0xFF30FF20, 0x40020140, 0x40020140}},
1095
- {{0x80000006, 0}, Leaf{0x20800000, 0x42004200, 0x02008140, 0x0030B140}},
1096
- });
1097
- const auto info = GetX86CacheInfo();
1098
-
1099
- EXPECT_EQ(info.size, 4);
1100
- EXPECT_EQ(info.levels[0].level, 1);
1101
- EXPECT_EQ(info.levels[0].cache_type, CacheType::CPU_FEATURE_CACHE_DATA);
1102
- EXPECT_EQ(info.levels[0].cache_size, 64 * KiB);
1103
- EXPECT_EQ(info.levels[0].ways, 2);
1104
- EXPECT_EQ(info.levels[0].line_size, 64);
1105
-
1106
- EXPECT_EQ(info.levels[1].level, 1);
1107
- EXPECT_EQ(info.levels[1].cache_type,
1108
- CacheType::CPU_FEATURE_CACHE_INSTRUCTION);
1109
- EXPECT_EQ(info.levels[1].cache_size, 64 * KiB);
1110
- EXPECT_EQ(info.levels[1].ways, 2);
1111
- EXPECT_EQ(info.levels[1].line_size, 64);
1112
-
1113
- EXPECT_EQ(info.levels[2].level, 2);
1114
- EXPECT_EQ(info.levels[2].cache_type, CacheType::CPU_FEATURE_CACHE_UNIFIED);
1115
- EXPECT_EQ(info.levels[2].cache_size, 512 * KiB);
1116
- EXPECT_EQ(info.levels[2].ways, 16);
1117
- EXPECT_EQ(info.levels[2].line_size, 64);
1118
-
1119
- EXPECT_EQ(info.levels[3].level, 3);
1120
- EXPECT_EQ(info.levels[3].cache_type, CacheType::CPU_FEATURE_CACHE_UNIFIED);
1121
- EXPECT_EQ(info.levels[3].cache_size, 6 * MiB);
1122
- EXPECT_EQ(info.levels[3].ways, 48);
1123
- EXPECT_EQ(info.levels[3].line_size, 64);
1124
- }
1125
-
1126
- // http://users.atw.hu/instlatx64/AuthenticAMD/AuthenticAMD0020FB1_K8_Manchester_CPUID.txt
1127
- TEST_F(CpuidX86Test, AMD_MANCHESTER_CACHE_INFO) {
1128
- cpu().SetLeaves({
1129
- {{0x00000000, 0}, Leaf{0x00000001, 0x68747541, 0x444D4163, 0x69746E65}},
1130
- {{0x80000000, 0}, Leaf{0x80000018, 0x68747541, 0x444D4163, 0x69746E65}},
1131
- {{0x80000001, 0}, Leaf{0x00020FB1, 0x00000150, 0x00000003, 0xE3D3FBFF}},
1132
- {{0x80000005, 0}, Leaf{0xFF08FF08, 0xFF20FF20, 0x40020140, 0x40020140}},
1133
- {{0x80000006, 0}, Leaf{0x00000000, 0x42004200, 0x02008140, 0x00000000}},
1134
- });
1135
- const auto info = GetX86CacheInfo();
1136
-
1137
- EXPECT_EQ(info.size, 3);
1138
- EXPECT_EQ(info.levels[0].level, 1);
1139
- EXPECT_EQ(info.levels[0].cache_type, CacheType::CPU_FEATURE_CACHE_DATA);
1140
- EXPECT_EQ(info.levels[0].cache_size, 64 * KiB);
1141
- EXPECT_EQ(info.levels[0].ways, 2);
1142
- EXPECT_EQ(info.levels[0].line_size, 64);
1143
-
1144
- EXPECT_EQ(info.levels[1].level, 1);
1145
- EXPECT_EQ(info.levels[1].cache_type,
1146
- CacheType::CPU_FEATURE_CACHE_INSTRUCTION);
1147
- EXPECT_EQ(info.levels[1].cache_size, 64 * KiB);
1148
- EXPECT_EQ(info.levels[1].ways, 2);
1149
- EXPECT_EQ(info.levels[1].line_size, 64);
1150
-
1151
- EXPECT_EQ(info.levels[2].level, 2);
1152
- EXPECT_EQ(info.levels[2].cache_type, CacheType::CPU_FEATURE_CACHE_UNIFIED);
1153
- EXPECT_EQ(info.levels[2].cache_size, 512 * KiB);
1154
- EXPECT_EQ(info.levels[2].ways, 16);
1155
- EXPECT_EQ(info.levels[2].line_size, 64);
1156
- }
1157
-
1158
- // http://users.atw.hu/instlatx64/AuthenticAMD/AuthenticAMD0100F22_K10_Agena_CPUID.txt
1159
- TEST_F(CpuidX86Test, AMD_AGENA_CACHE_INFO) {
1160
- cpu().SetLeaves({
1161
- {{0x00000000, 0}, Leaf{0x00000005, 0x68747541, 0x444D4163, 0x69746E65}},
1162
- {{0x80000000, 0}, Leaf{0x8000001A, 0x68747541, 0x444D4163, 0x69746E65}},
1163
- {{0x80000001, 0}, Leaf{0x00100F22, 0x10000000, 0x000007FF, 0xEFD3FBFF}},
1164
- {{0x80000005, 0}, Leaf{0xFF30FF10, 0xFF30FF20, 0x40020140, 0x40020140}},
1165
- {{0x80000006, 0}, Leaf{0x20800000, 0x42004200, 0x02008140, 0x0010A140}},
1166
- });
1167
- const auto info = GetX86CacheInfo();
1168
-
1169
- EXPECT_EQ(info.size, 4);
1170
- EXPECT_EQ(info.levels[0].level, 1);
1171
- EXPECT_EQ(info.levels[0].cache_type, CacheType::CPU_FEATURE_CACHE_DATA);
1172
- EXPECT_EQ(info.levels[0].cache_size, 64 * KiB);
1173
- EXPECT_EQ(info.levels[0].ways, 2);
1174
- EXPECT_EQ(info.levels[0].line_size, 64);
1175
-
1176
- EXPECT_EQ(info.levels[1].level, 1);
1177
- EXPECT_EQ(info.levels[1].cache_type,
1178
- CacheType::CPU_FEATURE_CACHE_INSTRUCTION);
1179
- EXPECT_EQ(info.levels[1].cache_size, 64 * KiB);
1180
- EXPECT_EQ(info.levels[1].ways, 2);
1181
- EXPECT_EQ(info.levels[1].line_size, 64);
1182
-
1183
- EXPECT_EQ(info.levels[2].level, 2);
1184
- EXPECT_EQ(info.levels[2].cache_type, CacheType::CPU_FEATURE_CACHE_UNIFIED);
1185
- EXPECT_EQ(info.levels[2].cache_size, 512 * KiB);
1186
- EXPECT_EQ(info.levels[2].ways, 16);
1187
- EXPECT_EQ(info.levels[2].line_size, 64);
1188
-
1189
- EXPECT_EQ(info.levels[3].level, 3);
1190
- EXPECT_EQ(info.levels[3].cache_type, CacheType::CPU_FEATURE_CACHE_UNIFIED);
1191
- EXPECT_EQ(info.levels[3].cache_size, 2 * MiB);
1192
- EXPECT_EQ(info.levels[3].ways, 32);
1193
- EXPECT_EQ(info.levels[3].line_size, 64);
1194
- }
1195
-
1196
- // https://github.com/InstLatx64/InstLatx64/blob/master/GenuineIntel/GenuineIntel00106A1_Nehalem_CPUID.txt
1197
- TEST_F(CpuidX86Test, Nehalem) {
1198
- // Pre AVX cpus don't have xsave
1199
- cpu().SetOsBackupsExtendedRegisters(false);
1200
- #if defined(CPU_FEATURES_OS_WINDOWS)
1201
- cpu().SetWindowsIsProcessorFeaturePresent(PF_XMMI_INSTRUCTIONS_AVAILABLE);
1202
- cpu().SetWindowsIsProcessorFeaturePresent(PF_XMMI64_INSTRUCTIONS_AVAILABLE);
1203
- cpu().SetWindowsIsProcessorFeaturePresent(PF_SSE3_INSTRUCTIONS_AVAILABLE);
1204
- cpu().SetWindowsIsProcessorFeaturePresent(PF_SSSE3_INSTRUCTIONS_AVAILABLE);
1205
- cpu().SetWindowsIsProcessorFeaturePresent(PF_SSE4_1_INSTRUCTIONS_AVAILABLE);
1206
- cpu().SetWindowsIsProcessorFeaturePresent(PF_SSE4_2_INSTRUCTIONS_AVAILABLE);
1207
- #elif defined(CPU_FEATURES_OS_MACOS)
1208
- cpu().SetDarwinSysCtlByName("hw.optional.sse");
1209
- cpu().SetDarwinSysCtlByName("hw.optional.sse2");
1210
- cpu().SetDarwinSysCtlByName("hw.optional.sse3");
1211
- cpu().SetDarwinSysCtlByName("hw.optional.supplementalsse3");
1212
- cpu().SetDarwinSysCtlByName("hw.optional.sse4_1");
1213
- cpu().SetDarwinSysCtlByName("hw.optional.sse4_2");
1214
- #elif defined(CPU_FEATURES_OS_FREEBSD)
1215
- auto& fs = GetEmptyFilesystem();
1216
- fs.CreateFile("/var/run/dmesg.boot", R"(
1217
- ---<<BOOT>>---
1218
- Copyright (c) 1992-2020 The FreeBSD Project.
1219
- FreeBSD is a registered trademark of The FreeBSD Foundation.
1220
- Features=0x1783fbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,MMX,FXSR,SSE,SSE2,HTT>
1221
- Features2=0x5eda2203<SSE3,PCLMULQDQ,SSSE3,CX16,PCID,SSE4.1,SSE4.2,MOVBE,POPCNT,AESNI,XSAVE,OSXSAVE,RDRAND>
1222
- real memory = 2147418112 (2047 MB)
1223
- )");
1224
- #elif defined(CPU_FEATURES_OS_LINUX) || defined(CPU_FEATURES_OS_ANDROID)
1225
- auto& fs = GetEmptyFilesystem();
1226
- fs.CreateFile("/proc/cpuinfo", R"(processor :
1227
- flags : fpu mmx sse sse2 pni ssse3 sse4_1 sse4_2
1228
- )");
1229
- #endif
1230
- cpu().SetLeaves({
1231
- {{0x00000000, 0}, Leaf{0x0000000B, 0x756E6547, 0x6C65746E, 0x49656E69}},
1232
- {{0x00000001, 0}, Leaf{0x000106A2, 0x00100800, 0x00BCE3BD, 0xBFEBFBFF}},
1233
- {{0x00000002, 0}, Leaf{0x55035A01, 0x00F0B0E3, 0x00000000, 0x09CA212C}},
1234
- {{0x00000003, 0}, Leaf{0x00000000, 0x00000000, 0x00000000, 0x00000000}},
1235
- {{0x00000004, 0}, Leaf{0x1C004121, 0x01C0003F, 0x0000003F, 0x00000000}},
1236
- {{0x00000004, 0}, Leaf{0x1C004122, 0x00C0003F, 0x0000007F, 0x00000000}},
1237
- {{0x00000004, 0}, Leaf{0x1C004143, 0x01C0003F, 0x000001FF, 0x00000000}},
1238
- {{0x00000004, 0}, Leaf{0x1C03C163, 0x03C0003F, 0x00000FFF, 0x00000002}},
1239
- {{0x00000005, 0}, Leaf{0x00000040, 0x00000040, 0x00000003, 0x00021120}},
1240
- {{0x00000006, 0}, Leaf{0x00000001, 0x00000002, 0x00000001, 0x00000000}},
1241
- {{0x00000007, 0}, Leaf{0x00000000, 0x00000000, 0x00000000, 0x00000000}},
1242
- {{0x00000008, 0}, Leaf{0x00000000, 0x00000000, 0x00000000, 0x00000000}},
1243
- {{0x00000009, 0}, Leaf{0x00000000, 0x00000000, 0x00000000, 0x00000000}},
1244
- {{0x0000000A, 0}, Leaf{0x07300403, 0x00000000, 0x00000000, 0x00000603}},
1245
- {{0x0000000B, 0}, Leaf{0x00000001, 0x00000001, 0x00000100, 0x00000000}},
1246
- {{0x0000000B, 0}, Leaf{0x00000004, 0x00000002, 0x00000201, 0x00000000}},
1247
- {{0x80000000, 0}, Leaf{0x80000008, 0x00000000, 0x00000000, 0x00000000}},
1248
- {{0x80000001, 0}, Leaf{0x00000000, 0x00000000, 0x00000001, 0x28100000}},
1249
- {{0x80000002, 0}, Leaf{0x756E6547, 0x20656E69, 0x65746E49, 0x2952286C}},
1250
- {{0x80000003, 0}, Leaf{0x55504320, 0x20202020, 0x20202020, 0x40202020}},
1251
- {{0x80000004, 0}, Leaf{0x30303020, 0x20402030, 0x37382E31, 0x007A4847}},
1252
- {{0x80000005, 0}, Leaf{0x00000000, 0x00000000, 0x00000000, 0x00000000}},
1253
- {{0x80000006, 0}, Leaf{0x00000000, 0x00000000, 0x01006040, 0x00000000}},
1254
- {{0x80000007, 0}, Leaf{0x00000000, 0x00000000, 0x00000000, 0x00000100}},
1255
- {{0x80000008, 0}, Leaf{0x00003028, 0x00000000, 0x00000000, 0x00000000}},
1256
- });
1257
- const auto info = GetX86Info();
1258
-
1259
- EXPECT_STREQ(info.vendor, CPU_FEATURES_VENDOR_GENUINE_INTEL);
1260
- EXPECT_EQ(info.family, 0x06);
1261
- EXPECT_EQ(info.model, 0x1A);
1262
- EXPECT_EQ(info.stepping, 0x02);
1263
- EXPECT_STREQ(info.brand_string,
1264
- "Genuine Intel(R) CPU @ 0000 @ 1.87GHz");
1265
- EXPECT_EQ(GetX86Microarchitecture(&info), X86Microarchitecture::INTEL_NHM);
1266
-
1267
- EXPECT_TRUE(info.features.sse);
1268
- EXPECT_TRUE(info.features.sse2);
1269
- EXPECT_TRUE(info.features.sse3);
1270
- EXPECT_TRUE(info.features.ssse3);
1271
- EXPECT_TRUE(info.features.sse4_1);
1272
- EXPECT_TRUE(info.features.sse4_2);
1273
- }
1274
-
1275
- // https://github.com/InstLatx64/InstLatx64/blob/master/GenuineIntel/GenuineIntel0030673_Silvermont3_CPUID.txt
1276
- TEST_F(CpuidX86Test, Atom) {
1277
- // Pre AVX cpus don't have xsave
1278
- cpu().SetOsBackupsExtendedRegisters(false);
1279
- #if defined(CPU_FEATURES_OS_WINDOWS)
1280
- cpu().SetWindowsIsProcessorFeaturePresent(PF_XMMI_INSTRUCTIONS_AVAILABLE);
1281
- cpu().SetWindowsIsProcessorFeaturePresent(PF_XMMI64_INSTRUCTIONS_AVAILABLE);
1282
- cpu().SetWindowsIsProcessorFeaturePresent(PF_SSE3_INSTRUCTIONS_AVAILABLE);
1283
- cpu().SetWindowsIsProcessorFeaturePresent(PF_SSSE3_INSTRUCTIONS_AVAILABLE);
1284
- cpu().SetWindowsIsProcessorFeaturePresent(PF_SSE4_1_INSTRUCTIONS_AVAILABLE);
1285
- cpu().SetWindowsIsProcessorFeaturePresent(PF_SSE4_2_INSTRUCTIONS_AVAILABLE);
1286
- #elif defined(CPU_FEATURES_OS_MACOS)
1287
- cpu().SetDarwinSysCtlByName("hw.optional.sse");
1288
- cpu().SetDarwinSysCtlByName("hw.optional.sse2");
1289
- cpu().SetDarwinSysCtlByName("hw.optional.sse3");
1290
- cpu().SetDarwinSysCtlByName("hw.optional.supplementalsse3");
1291
- cpu().SetDarwinSysCtlByName("hw.optional.sse4_1");
1292
- cpu().SetDarwinSysCtlByName("hw.optional.sse4_2");
1293
- #elif defined(CPU_FEATURES_OS_FREEBSD)
1294
- auto& fs = GetEmptyFilesystem();
1295
- fs.CreateFile("/var/run/dmesg.boot", R"(
1296
- ---<<BOOT>>---
1297
- Copyright (c) 1992-2020 The FreeBSD Project.
1298
- FreeBSD is a registered trademark of The FreeBSD Foundation.
1299
- Features=0x1783fbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,MMX,FXSR,SSE,SSE2,HTT>
1300
- Features2=0x5eda2203<SSE3,PCLMULQDQ,SSSE3,CX16,PCID,SSE4.1,SSE4.2,MOVBE,POPCNT,AESNI,XSAVE,OSXSAVE,RDRAND>
1301
- real memory = 2147418112 (2047 MB)
1302
- )");
1303
- #elif defined(CPU_FEATURES_OS_LINUX) || defined(CPU_FEATURES_OS_ANDROID)
1304
- auto& fs = GetEmptyFilesystem();
1305
- fs.CreateFile("/proc/cpuinfo", R"(
1306
- flags : fpu mmx sse sse2 pni ssse3 sse4_1 sse4_2
1307
- )");
1308
- #endif
1309
- cpu().SetLeaves({
1310
- {{0x00000000, 0}, Leaf{0x0000000B, 0x756E6547, 0x6C65746E, 0x49656E69}},
1311
- {{0x00000001, 0}, Leaf{0x00030673, 0x00100800, 0x41D8E3BF, 0xBFEBFBFF}},
1312
- {{0x00000002, 0}, Leaf{0x61B3A001, 0x0000FFC2, 0x00000000, 0x00000000}},
1313
- {{0x00000003, 0}, Leaf{0x00000000, 0x00000000, 0x00000000, 0x00000000}},
1314
- {{0x00000004, 0}, Leaf{0x1C000121, 0x0140003F, 0x0000003F, 0x00000001}},
1315
- {{0x00000004, 1}, Leaf{0x1C000122, 0x01C0003F, 0x0000003F, 0x00000001}},
1316
- {{0x00000004, 2}, Leaf{0x1C00C143, 0x03C0003F, 0x000003FF, 0x00000001}},
1317
- {{0x00000005, 0}, Leaf{0x00000040, 0x00000040, 0x00000003, 0x33000020}},
1318
- {{0x00000006, 0}, Leaf{0x00000005, 0x00000002, 0x00000009, 0x00000000}},
1319
- {{0x00000007, 0}, Leaf{0x00000000, 0x00002282, 0x00000000, 0x00000000}},
1320
- {{0x00000008, 0}, Leaf{0x00000000, 0x00000000, 0x00000000, 0x00000000}},
1321
- {{0x00000009, 0}, Leaf{0x00000000, 0x00000000, 0x00000000, 0x00000000}},
1322
- {{0x0000000A, 0}, Leaf{0x07280203, 0x00000000, 0x00000000, 0x00004503}},
1323
- {{0x0000000B, 0}, Leaf{0x00000001, 0x00000001, 0x00000100, 0x00000000}},
1324
- {{0x0000000B, 1}, Leaf{0x00000004, 0x00000004, 0x00000201, 0x00000000}},
1325
- {{0x80000000, 0}, Leaf{0x80000008, 0x00000000, 0x00000000, 0x00000000}},
1326
- {{0x80000001, 0}, Leaf{0x00000000, 0x00000000, 0x00000101, 0x28100000}},
1327
- {{0x80000002, 0}, Leaf{0x20202020, 0x6E492020, 0x286C6574, 0x43202952}},
1328
- {{0x80000003, 0}, Leaf{0x72656C65, 0x52286E6F, 0x50432029, 0x4A202055}},
1329
- {{0x80000004, 0}, Leaf{0x30303931, 0x20402020, 0x39392E31, 0x007A4847}},
1330
- {{0x80000005, 0}, Leaf{0x00000000, 0x00000000, 0x00000000, 0x00000000}},
1331
- {{0x80000006, 0}, Leaf{0x00000000, 0x00000000, 0x04008040, 0x00000000}},
1332
- {{0x80000007, 0}, Leaf{0x00000000, 0x00000000, 0x00000000, 0x00000100}},
1333
- {{0x80000008, 0}, Leaf{0x00003024, 0x00000000, 0x00000000, 0x00000000}},
1334
- });
1335
- const auto info = GetX86Info();
1336
-
1337
- EXPECT_STREQ(info.vendor, CPU_FEATURES_VENDOR_GENUINE_INTEL);
1338
- EXPECT_EQ(info.family, 0x06);
1339
- EXPECT_EQ(info.model, 0x37);
1340
- EXPECT_EQ(info.stepping, 0x03);
1341
- EXPECT_STREQ(info.brand_string,
1342
- " Intel(R) Celeron(R) CPU J1900 @ 1.99GHz");
1343
- EXPECT_EQ(GetX86Microarchitecture(&info),
1344
- X86Microarchitecture::INTEL_ATOM_SMT);
1345
-
1346
- EXPECT_TRUE(info.features.sse);
1347
- EXPECT_TRUE(info.features.sse2);
1348
- EXPECT_TRUE(info.features.sse3);
1349
- EXPECT_TRUE(info.features.ssse3);
1350
- EXPECT_TRUE(info.features.sse4_1);
1351
- EXPECT_TRUE(info.features.sse4_2);
1352
- }
1353
-
1354
- // https://www.felixcloutier.com/x86/cpuid#example-3-1--example-of-cache-and-tlb-interpretation
1355
- TEST_F(CpuidX86Test, P4_CacheInfo) {
1356
- cpu().SetLeaves({
1357
- {{0x00000000, 0}, Leaf{0x00000002, 0x756E6547, 0x6C65746E, 0x49656E69}},
1358
- {{0x00000001, 0}, Leaf{0x00000F0A, 0x00010808, 0x00000000, 0x3FEBFBFF}},
1359
- {{0x00000002, 0}, Leaf{0x665B5001, 0x00000000, 0x00000000, 0x007A7000}},
1360
- });
1361
-
1362
- const auto info = GetX86CacheInfo();
1363
- EXPECT_EQ(info.size, 5);
1364
-
1365
- EXPECT_EQ(info.levels[0].level, UNDEF);
1366
- EXPECT_EQ(info.levels[0].cache_type, CacheType::CPU_FEATURE_CACHE_TLB);
1367
- EXPECT_EQ(info.levels[0].cache_size, 4 * KiB);
1368
- EXPECT_EQ(info.levels[0].ways, UNDEF);
1369
- EXPECT_EQ(info.levels[0].line_size, UNDEF);
1370
- EXPECT_EQ(info.levels[0].tlb_entries, 64);
1371
- EXPECT_EQ(info.levels[0].partitioning, 0);
1372
-
1373
- EXPECT_EQ(info.levels[1].level, UNDEF);
1374
- EXPECT_EQ(info.levels[1].cache_type, CacheType::CPU_FEATURE_CACHE_TLB);
1375
- EXPECT_EQ(info.levels[1].cache_size, 4 * KiB);
1376
- EXPECT_EQ(info.levels[1].ways, UNDEF);
1377
- EXPECT_EQ(info.levels[1].line_size, UNDEF);
1378
- EXPECT_EQ(info.levels[1].tlb_entries, 64);
1379
- EXPECT_EQ(info.levels[1].partitioning, 0);
1380
-
1381
- EXPECT_EQ(info.levels[2].level, 1);
1382
- EXPECT_EQ(info.levels[2].cache_type, CacheType::CPU_FEATURE_CACHE_DATA);
1383
- EXPECT_EQ(info.levels[2].cache_size, 8 * KiB);
1384
- EXPECT_EQ(info.levels[2].ways, 4);
1385
- EXPECT_EQ(info.levels[2].line_size, 64);
1386
- EXPECT_EQ(info.levels[2].tlb_entries, UNDEF);
1387
- EXPECT_EQ(info.levels[2].partitioning, 0);
1388
-
1389
- EXPECT_EQ(info.levels[3].level, 1);
1390
- EXPECT_EQ(info.levels[3].cache_type,
1391
- CacheType::CPU_FEATURE_CACHE_INSTRUCTION);
1392
- EXPECT_EQ(info.levels[3].cache_size, 12 * KiB);
1393
- EXPECT_EQ(info.levels[3].ways, 8);
1394
- EXPECT_EQ(info.levels[3].line_size, UNDEF);
1395
- EXPECT_EQ(info.levels[3].tlb_entries, UNDEF);
1396
- EXPECT_EQ(info.levels[3].partitioning, 0);
1397
-
1398
- EXPECT_EQ(info.levels[4].level, 2);
1399
- EXPECT_EQ(info.levels[4].cache_type, CacheType::CPU_FEATURE_CACHE_DATA);
1400
- EXPECT_EQ(info.levels[4].cache_size, 256 * KiB);
1401
- EXPECT_EQ(info.levels[4].ways, 8);
1402
- EXPECT_EQ(info.levels[4].line_size, 64);
1403
- EXPECT_EQ(info.levels[4].tlb_entries, UNDEF);
1404
- EXPECT_EQ(info.levels[4].partitioning, 2);
1405
- }
1406
-
1407
- // https://github.com/InstLatx64/InstLatx64/blob/master/GenuineIntel/GenuineIntel0000673_P3_KatmaiDP_CPUID.txt
1408
- TEST_F(CpuidX86Test, P3) {
1409
- // Pre AVX cpus don't have xsave
1410
- cpu().SetOsBackupsExtendedRegisters(false);
1411
- #if defined(CPU_FEATURES_OS_WINDOWS)
1412
- cpu().SetWindowsIsProcessorFeaturePresent(PF_XMMI_INSTRUCTIONS_AVAILABLE);
1413
- #elif defined(CPU_FEATURES_OS_MACOS)
1414
- cpu().SetDarwinSysCtlByName("hw.optional.sse");
1415
- #elif defined(CPU_FEATURES_OS_FREEBSD)
1416
- auto& fs = GetEmptyFilesystem();
1417
- fs.CreateFile("/var/run/dmesg.boot", R"(
1418
- ---<<BOOT>>---
1419
- Copyright (c) 1992-2020 The FreeBSD Project.
1420
- FreeBSD is a registered trademark of The FreeBSD Foundation.
1421
- Features=0x1783fbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,MMX,FXSR,SSE>
1422
- real memory = 2147418112 (2047 MB)
1423
- )");
1424
- #elif defined(CPU_FEATURES_OS_LINUX) || defined(CPU_FEATURES_OS_ANDROID)
1425
- auto& fs = GetEmptyFilesystem();
1426
- fs.CreateFile("/proc/cpuinfo", R"(
1427
- flags : fpu mmx sse
1428
- )");
1429
- #endif
1430
- cpu().SetLeaves({
1431
- {{0x00000000, 0}, Leaf{0x00000003, 0x756E6547, 0x6C65746E, 0x49656E69}},
1432
- {{0x00000001, 0}, Leaf{0x00000673, 0x00000000, 0x00000000, 0x0387FBFF}},
1433
- {{0x00000002, 0}, Leaf{0x03020101, 0x00000000, 0x00000000, 0x0C040843}},
1434
- {{0x00000003, 0}, Leaf{0x00000000, 0x00000000, 0x4CECC782, 0x00006778}},
1435
- });
1436
- const auto info = GetX86Info();
1437
-
1438
- EXPECT_STREQ(info.vendor, CPU_FEATURES_VENDOR_GENUINE_INTEL);
1439
- EXPECT_EQ(info.family, 0x06);
1440
- EXPECT_EQ(info.model, 0x07);
1441
- EXPECT_EQ(info.stepping, 0x03);
1442
- EXPECT_STREQ(info.brand_string, "");
1443
- EXPECT_EQ(GetX86Microarchitecture(&info), X86Microarchitecture::X86_UNKNOWN);
1444
-
1445
- EXPECT_TRUE(info.features.mmx);
1446
- EXPECT_TRUE(info.features.sse);
1447
- EXPECT_FALSE(info.features.sse2);
1448
- EXPECT_FALSE(info.features.sse3);
1449
- EXPECT_FALSE(info.features.ssse3);
1450
- EXPECT_FALSE(info.features.sse4_1);
1451
- EXPECT_FALSE(info.features.sse4_2);
1452
- }
1453
-
1454
- // https://github.com/InstLatx64/InstLatx64/blob/master/GenuineIntel/GenuineIntel0000480_486_CPUID.txt
1455
- TEST_F(CpuidX86Test, INTEL_80486) {
1456
- cpu().SetLeaves({
1457
- {{0x00000000, 0}, Leaf{0x00000001, 0x756E6547, 0x6C65746E, 0x49656E69}},
1458
- {{0x00000001, 0}, Leaf{0x00000480, 0x00000000, 0x00000000, 0x00000003}},
1459
- });
1460
- const auto info = GetX86Info();
1461
-
1462
- EXPECT_STREQ(info.vendor, CPU_FEATURES_VENDOR_GENUINE_INTEL);
1463
- EXPECT_EQ(info.family, 0x04);
1464
- EXPECT_EQ(info.model, 0x08);
1465
- EXPECT_EQ(GetX86Microarchitecture(&info), X86Microarchitecture::INTEL_80486);
1466
- }
1467
-
1468
- // https://github.com/InstLatx64/InstLatx64/blob/master/GenuineIntel/GenuineIntel0000526_P54C_CPUID.txt
1469
- TEST_F(CpuidX86Test, INTEL_P54C) {
1470
- cpu().SetLeaves({
1471
- {{0x00000000, 0}, Leaf{0x00000001, 0x756E6547, 0x6C65746E, 0x49656E69}},
1472
- {{0x00000001, 0}, Leaf{0x00000525, 0x00000000, 0x00000000, 0x000001BF}},
1473
- });
1474
- const auto info = GetX86Info();
1475
-
1476
- EXPECT_STREQ(info.vendor, CPU_FEATURES_VENDOR_GENUINE_INTEL);
1477
- EXPECT_EQ(info.family, 0x05);
1478
- EXPECT_EQ(info.model, 0x02);
1479
- EXPECT_EQ(GetX86Microarchitecture(&info), X86Microarchitecture::INTEL_P5);
1480
- }
1481
-
1482
- // https://github.com/InstLatx64/InstLatx64/blob/master/GenuineIntel/GenuineIntel0000590_Lakemont_CPUID2.txt
1483
- TEST_F(CpuidX86Test, INTEL_LAKEMONT) {
1484
- cpu().SetLeaves({
1485
- {{0x00000000, 0}, Leaf{0x00000002, 0x756E6547, 0x6c65746E, 0x49656E69}},
1486
- {{0x00000001, 0}, Leaf{0x00000590, 0x00000000, 0x00010200, 0x8000237B}},
1487
- });
1488
- const auto info = GetX86Info();
1489
-
1490
- EXPECT_STREQ(info.vendor, CPU_FEATURES_VENDOR_GENUINE_INTEL);
1491
- EXPECT_EQ(info.family, 0x05);
1492
- EXPECT_EQ(info.model, 0x09);
1493
- EXPECT_EQ(GetX86Microarchitecture(&info),
1494
- X86Microarchitecture::INTEL_LAKEMONT);
1495
- }
1496
-
1497
- // https://github.com/InstLatx64/InstLatx64/blob/master/GenuineIntel/GenuineIntel00006E8_PM_Yonah_CPUID.txt
1498
- TEST_F(CpuidX86Test, INTEL_CORE_YONAH) {
1499
- cpu().SetLeaves({
1500
- {{0x00000000, 0}, Leaf{0x0000000A, 0x756E6547, 0x6C65746E, 0x49656E69}},
1501
- {{0x00000001, 0}, Leaf{0x000006E8, 0x00010800, 0x0000C109, 0xAFE9FBFF}},
1502
- });
1503
- const auto info = GetX86Info();
1504
-
1505
- EXPECT_STREQ(info.vendor, CPU_FEATURES_VENDOR_GENUINE_INTEL);
1506
- EXPECT_EQ(info.family, 0x06);
1507
- EXPECT_EQ(info.model, 0x0E);
1508
- EXPECT_EQ(GetX86Microarchitecture(&info), X86Microarchitecture::INTEL_CORE);
1509
- }
1510
-
1511
- // https://github.com/InstLatx64/InstLatx64/blob/master/GenuineIntel/GenuineIntel00706A8_GoldmontPlus_CPUID.txt
1512
- TEST_F(CpuidX86Test, INTEL_GOLDMONT_PLUS) {
1513
- cpu().SetLeaves({
1514
- {{0x00000000, 0}, Leaf{0x00000018, 0x756E6547, 0x6c65746E, 0x49656E69}},
1515
- {{0x00000001, 0}, Leaf{0x000706A8, 0x00400800, 0x4FF8EBBF, 0xBFEBFBFF}},
1516
- });
1517
- const auto info = GetX86Info();
1518
-
1519
- EXPECT_STREQ(info.vendor, CPU_FEATURES_VENDOR_GENUINE_INTEL);
1520
- EXPECT_EQ(info.family, 0x06);
1521
- EXPECT_EQ(info.model, 0x7A);
1522
- EXPECT_EQ(GetX86Microarchitecture(&info),
1523
- X86Microarchitecture::INTEL_ATOM_GMT_PLUS);
1524
- }
1525
-
1526
- // https://github.com/InstLatx64/InstLatx64/blob/master/GenuineIntel/GenuineIntel0050670_KnightsLanding_CPUID.txt
1527
- TEST_F(CpuidX86Test, INTEL_KNIGHTS_LANDING) {
1528
- cpu().SetLeaves({
1529
- {{0x00000000, 0}, Leaf{0x0000000D, 0x756E6547, 0x6C65746E, 0x49656E69}},
1530
- {{0x00000001, 0}, Leaf{0x00050670, 0x02FF0800, 0x7FF8F3BF, 0xBFEBFBFF}},
1531
- });
1532
- const auto info = GetX86Info();
1533
-
1534
- EXPECT_STREQ(info.vendor, CPU_FEATURES_VENDOR_GENUINE_INTEL);
1535
- EXPECT_EQ(info.family, 0x06);
1536
- EXPECT_EQ(info.model, 0x57);
1537
- EXPECT_EQ(GetX86Microarchitecture(&info),
1538
- X86Microarchitecture::INTEL_KNIGHTS_L);
1539
- }
1540
-
1541
- // http://users.atw.hu/instlatx64/GenuineIntel/GenuineIntel00806EC_CometLake_CPUID2.txt
1542
- TEST_F(CpuidX86Test, INTEL_CML_U) {
1543
- cpu().SetLeaves({
1544
- {{0x00000000, 0}, Leaf{0x00000016, 0x756E6547, 0x6C65746E, 0x49656E69}},
1545
- {{0x00000001, 0}, Leaf{0x000806EC, 0x00100800, 0x7FFAFBBF, 0xBFEBFBFF}},
1546
- });
1547
- const auto info = GetX86Info();
1548
-
1549
- EXPECT_STREQ(info.vendor, CPU_FEATURES_VENDOR_GENUINE_INTEL);
1550
- EXPECT_EQ(info.family, 0x06);
1551
- EXPECT_EQ(info.model, 0x8E);
1552
- EXPECT_EQ(info.stepping, 0x0C);
1553
- EXPECT_EQ(GetX86Microarchitecture(&info), X86Microarchitecture::INTEL_CML);
1554
- }
1555
-
1556
- // http://users.atw.hu/instlatx64/GenuineIntel/GenuineIntel00A0652_CometLake_CPUID1.txt
1557
- TEST_F(CpuidX86Test, INTEL_CML_H) {
1558
- cpu().SetLeaves({
1559
- {{0x00000000, 0}, Leaf{0x00000016, 0x756E6547, 0x6C65746E, 0x49656E69}},
1560
- {{0x00000001, 0}, Leaf{0x000A0652, 0x00100800, 0x7FFAFBBF, 0xBFEBFBFF}},
1561
- });
1562
- const auto info = GetX86Info();
1563
-
1564
- EXPECT_STREQ(info.vendor, CPU_FEATURES_VENDOR_GENUINE_INTEL);
1565
- EXPECT_EQ(info.family, 0x06);
1566
- EXPECT_EQ(info.model, 0xA5);
1567
- EXPECT_EQ(GetX86Microarchitecture(&info), X86Microarchitecture::INTEL_CML);
1568
- }
1569
-
1570
- // https://github.com/InstLatx64/InstLatx64/blob/master/GenuineIntel/GenuineIntel00A0660_CometLake_CPUID1.txt
1571
- TEST_F(CpuidX86Test, INTEL_CML_U2) {
1572
- cpu().SetLeaves({
1573
- {{0x00000000, 0}, Leaf{0x00000016, 0x756E6547, 0x6C65746E, 0x49656E69}},
1574
- {{0x00000001, 0}, Leaf{0x000A0660, 0x00100800, 0x7FFAFBBF, 0xBFEBFBFF}},
1575
- });
1576
- const auto info = GetX86Info();
1577
-
1578
- EXPECT_STREQ(info.vendor, CPU_FEATURES_VENDOR_GENUINE_INTEL);
1579
- EXPECT_EQ(info.family, 0x06);
1580
- EXPECT_EQ(info.model, 0xA6);
1581
- EXPECT_EQ(info.stepping, 0x00);
1582
- EXPECT_EQ(GetX86Microarchitecture(&info), X86Microarchitecture::INTEL_CML);
1583
- }
1584
-
1585
- // http://users.atw.hu/instlatx64/GenuineIntel/GenuineIntel00806A1_Lakefield_CPUID.txt
1586
- TEST_F(CpuidX86Test, INTEL_ATOM_TMT_LAKEFIELD) {
1587
- cpu().SetLeaves({
1588
- {{0x00000000, 0}, Leaf{0x0000001B, 0x756E6547, 0x6C65746E, 0x49656E69}},
1589
- {{0x00000001, 0}, Leaf{0x000806A1, 0x00100800, 0x4FD8EBBF, 0xBFEBFBFF}},
1590
- });
1591
- const auto info = GetX86Info();
1592
-
1593
- EXPECT_STREQ(info.vendor, CPU_FEATURES_VENDOR_GENUINE_INTEL);
1594
- EXPECT_EQ(info.family, 0x06);
1595
- EXPECT_EQ(info.model, 0x8A);
1596
- EXPECT_EQ(GetX86Microarchitecture(&info), X86Microarchitecture::INTEL_ATOM_TMT);
1597
- }
1598
-
1599
- // https://github.com/InstLatx64/InstLatx64/blob/master/GenuineIntel/GenuineIntel0090661_ElkhartLake_CPUID01.txt
1600
- TEST_F(CpuidX86Test, INTEL_ATOM_TMT_ELKHART_LAKE) {
1601
- cpu().SetLeaves({
1602
- {{0x00000000, 0}, Leaf{0x0000001B, 0x756E6547, 0x6C65746E, 0x49656E69}},
1603
- {{0x00000001, 0}, Leaf{0x00090661, 0x00800800, 0x4FF8EBBF, 0xBFEBFBFF}},
1604
- });
1605
- const auto info = GetX86Info();
1606
-
1607
- EXPECT_STREQ(info.vendor, CPU_FEATURES_VENDOR_GENUINE_INTEL);
1608
- EXPECT_EQ(info.family, 0x06);
1609
- EXPECT_EQ(info.model, 0x96);
1610
- EXPECT_EQ(GetX86Microarchitecture(&info), X86Microarchitecture::INTEL_ATOM_TMT);
1611
- }
1612
-
1613
- // https://github.com/InstLatx64/InstLatx64/blob/master/GenuineIntel/GenuineIntel00906C0_JasperLake_01_CPUID.txt
1614
- TEST_F(CpuidX86Test, INTEL_ATOM_TMT_JASPER_LAKE) {
1615
- cpu().SetLeaves({
1616
- {{0x00000000, 0}, Leaf{0x0000001B, 0x756E6547, 0x6C65746E, 0x49656E69}},
1617
- {{0x00000001, 0}, Leaf{0x000906C0, 0x00800800, 0x4FF8EBBF, 0xBFEBFBFF}},
1618
- });
1619
- const auto info = GetX86Info();
1620
-
1621
- EXPECT_STREQ(info.vendor, CPU_FEATURES_VENDOR_GENUINE_INTEL);
1622
- EXPECT_EQ(info.family, 0x06);
1623
- EXPECT_EQ(info.model, 0x9C);
1624
- EXPECT_EQ(GetX86Microarchitecture(&info), X86Microarchitecture::INTEL_ATOM_TMT);
1625
- }
1626
-
1627
- // http://users.atw.hu/instlatx64/GenuineIntel/GenuineIntel00B0671_RaptorLake_02_CPUID.txt
1628
- TEST_F(CpuidX86Test, INTEL_RAPTOR_LAKE) {
1629
- cpu().SetLeaves({
1630
- {{0x00000000, 0}, Leaf{0x00000020, 0x756E6547, 0x6C65746E, 0x49656E69}},
1631
- {{0x00000001, 0}, Leaf{0x000B0671, 0x00800800, 0x7FFAFBBF, 0xBFEBFBFF}},
1632
- });
1633
- const auto info = GetX86Info();
1634
-
1635
- EXPECT_STREQ(info.vendor, CPU_FEATURES_VENDOR_GENUINE_INTEL);
1636
- EXPECT_EQ(info.family, 0x06);
1637
- EXPECT_EQ(info.model, 0xB7);
1638
- EXPECT_EQ(GetX86Microarchitecture(&info), X86Microarchitecture::INTEL_RPL);
1639
- }
1640
-
1641
- // http://users.atw.hu/instlatx64/GenuineIntel/GenuineIntel00306F2_HaswellEP2_CPUID.txt
1642
- TEST_F(CpuidX86Test, INTEL_HASWELL_LZCNT) {
1643
- cpu().SetLeaves({
1644
- {{0x00000000, 0}, Leaf{0x0000000F, 0x756E6547, 0x6C65746E, 0x49656E69}},
1645
- {{0x00000001, 0}, Leaf{0x000306F2, 0x00200800, 0x7FFEFBFF, 0xBFEBFBFF}},
1646
- {{0x00000007, 0}, Leaf{0x00000000, 0x000037AB, 0x00000000, 0x00000000}},
1647
- {{0x80000000, 0}, Leaf{0x80000008, 0x00000000, 0x00000000, 0x00000000}},
1648
- {{0x80000001, 0}, Leaf{0x00000000, 0x00000000, 0x00000021, 0x2C100000}},
1649
- });
1650
- const auto info = GetX86Info();
1651
-
1652
- EXPECT_STREQ(info.vendor, CPU_FEATURES_VENDOR_GENUINE_INTEL);
1653
- EXPECT_EQ(info.family, 0x06);
1654
- EXPECT_EQ(info.model, 0x3F);
1655
- EXPECT_EQ(GetX86Microarchitecture(&info), X86Microarchitecture::INTEL_HSW);
1656
-
1657
- EXPECT_TRUE(info.features.lzcnt);
1658
- }
1659
-
1660
- // http://users.atw.hu/instlatx64/GenuineIntel/GenuineIntel00B06A2_RaptorLakeP_03_CPUID.txt
1661
- TEST_F(CpuidX86Test, INTEL_RAPTOR_LAKE_P) {
1662
- cpu().SetLeaves({
1663
- {{0x00000000, 0}, Leaf{0x00000020, 0x756E6547, 0x6C65746E, 0x49656E69}},
1664
- {{0x00000001, 0}, Leaf{0x000B06A3, 0x00400800, 0x7FFAFBFF, 0xBFEBFBFF}},
1665
- {{0x80000000, 0}, Leaf{0x80000008, 0x00000000, 0x00000000, 0x00000000}},
1666
- {{0x80000001, 0}, Leaf{0x00000000, 0x00000000, 0x00000121, 0x2C100000}},
1667
- });
1668
- const auto info = GetX86Info();
1669
-
1670
- EXPECT_STREQ(info.vendor, CPU_FEATURES_VENDOR_GENUINE_INTEL);
1671
- EXPECT_EQ(info.family, 0x06);
1672
- EXPECT_EQ(info.model, 0xBA);
1673
- EXPECT_EQ(GetX86Microarchitecture(&info), X86Microarchitecture::INTEL_RPL);
1674
- }
1675
-
1676
- // http://users.atw.hu/instlatx64/GenuineIntel/GenuineIntel00B06F2_RaptorLakeS_02_CPUID.txt
1677
- TEST_F(CpuidX86Test, INTEL_RAPTOR_LAKE_S) {
1678
- cpu().SetLeaves({
1679
- {{0x00000000, 0}, Leaf{0x00000020, 0x756E6547, 0x6C65746E, 0x49656E69}},
1680
- {{0x00000001, 0}, Leaf{0x000B06F2, 0x00800800, 0x7FFAFBFF, 0xBFEBFBFF}},
1681
- {{0x80000000, 0}, Leaf{0x80000008, 0x00000000, 0x00000000, 0x00000000}},
1682
- {{0x80000001, 0}, Leaf{0x00000000, 0x00000000, 0x00000121, 0x2C100000}},
1683
- });
1684
- const auto info = GetX86Info();
1685
-
1686
- EXPECT_STREQ(info.vendor, CPU_FEATURES_VENDOR_GENUINE_INTEL);
1687
- EXPECT_EQ(info.family, 0x06);
1688
- EXPECT_EQ(info.model, 0xBF);
1689
- EXPECT_EQ(GetX86Microarchitecture(&info), X86Microarchitecture::INTEL_RPL);
1690
- }
1691
-
1692
- // https://github.com/google/cpu_features/issues/200
1693
- // http://users.atw.hu/instlatx64/GenuineIntel/GenuineIntel00206F2_Eagleton_CPUID.txt
1694
- #if defined(CPU_FEATURES_OS_WINDOWS)
1695
- TEST_F(CpuidX86Test, WIN_INTEL_WESTMERE_EX) {
1696
- // Pre AVX cpus don't have xsave
1697
- cpu().SetOsBackupsExtendedRegisters(false);
1698
- cpu().SetWindowsIsProcessorFeaturePresent(PF_XMMI_INSTRUCTIONS_AVAILABLE);
1699
- cpu().SetWindowsIsProcessorFeaturePresent(PF_XMMI64_INSTRUCTIONS_AVAILABLE);
1700
- cpu().SetWindowsIsProcessorFeaturePresent(PF_SSE3_INSTRUCTIONS_AVAILABLE);
1701
- cpu().SetWindowsIsProcessorFeaturePresent(PF_SSSE3_INSTRUCTIONS_AVAILABLE);
1702
- cpu().SetWindowsIsProcessorFeaturePresent(PF_SSE4_1_INSTRUCTIONS_AVAILABLE);
1703
- cpu().SetWindowsIsProcessorFeaturePresent(PF_SSE4_2_INSTRUCTIONS_AVAILABLE);
1704
-
1705
- cpu().SetLeaves({
1706
- {{0x00000000, 0}, Leaf{0x0000000B, 0x756E6547, 0x6C65746E, 0x49656E69}},
1707
- {{0x00000001, 0}, Leaf{0x000206F2, 0x00400800, 0x02BEE3FF, 0xBFEBFBFF}},
1708
- });
1709
- const auto info = GetX86Info();
1710
-
1711
- EXPECT_EQ(info.family, 0x06);
1712
- EXPECT_EQ(info.model, 0x2F);
1713
- EXPECT_EQ(GetX86Microarchitecture(&info), X86Microarchitecture::INTEL_WSM);
1714
-
1715
- EXPECT_TRUE(info.features.sse);
1716
- EXPECT_TRUE(info.features.sse2);
1717
- EXPECT_TRUE(info.features.sse3);
1718
- EXPECT_TRUE(info.features.ssse3);
1719
- EXPECT_TRUE(info.features.sse4_1);
1720
- EXPECT_TRUE(info.features.sse4_2);
1721
- }
1722
- #endif // CPU_FEATURES_OS_WINDOWS
1723
-
1724
- // TODO(user): test what happens when xsave/osxsave are not present.
1725
- // TODO(user): test what happens when xmm/ymm/zmm os support are not
1726
- // present.
1727
-
1728
- } // namespace
1729
- } // namespace cpu_features