@zowe/cli 8.37.0 → 8.37.1

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 (644) hide show
  1. package/lib/zosfiles/edit/Edit.utils.d.ts.map +1 -1
  2. package/lib/zosfiles/edit/Edit.utils.js +5 -1
  3. package/lib/zosfiles/edit/Edit.utils.js.map +1 -1
  4. package/node_modules/@zowe/core-for-zowe-sdk/package.json +3 -3
  5. package/node_modules/@zowe/imperative/lib/imperative/src/config/cmd/report-env/EnvItems.d.ts +1 -1
  6. package/node_modules/@zowe/imperative/lib/imperative/src/config/cmd/report-env/EnvItems.d.ts.map +1 -1
  7. package/node_modules/@zowe/imperative/lib/imperative/src/config/cmd/report-env/EnvItems.js +10 -12
  8. package/node_modules/@zowe/imperative/lib/imperative/src/config/cmd/report-env/EnvItems.js.map +1 -1
  9. package/node_modules/@zowe/imperative/lib/imperative/src/config/cmd/report-env/EnvQuery.d.ts.map +1 -1
  10. package/node_modules/@zowe/imperative/lib/imperative/src/config/cmd/report-env/EnvQuery.js +1 -4
  11. package/node_modules/@zowe/imperative/lib/imperative/src/config/cmd/report-env/EnvQuery.js.map +1 -1
  12. package/node_modules/@zowe/imperative/package.json +1 -1
  13. package/node_modules/@zowe/imperative/web-help/package-lock.json +58 -58
  14. package/node_modules/@zowe/provisioning-for-zowe-sdk/package.json +4 -4
  15. package/node_modules/@zowe/zos-console-for-zowe-sdk/package.json +4 -4
  16. package/node_modules/@zowe/zos-files-for-zowe-sdk/package.json +5 -5
  17. package/node_modules/@zowe/zos-jobs-for-zowe-sdk/package.json +5 -5
  18. package/node_modules/@zowe/zos-logs-for-zowe-sdk/package.json +4 -4
  19. package/node_modules/@zowe/zos-tso-for-zowe-sdk/package.json +5 -5
  20. package/node_modules/@zowe/zos-uss-for-zowe-sdk/package.json +3 -3
  21. package/node_modules/@zowe/zos-workflows-for-zowe-sdk/package.json +5 -5
  22. package/node_modules/@zowe/zosmf-for-zowe-sdk/package.json +4 -4
  23. package/node_modules/buildcheck/.eslintrc.js +5 -0
  24. package/node_modules/buildcheck/.github/workflows/ci.yml +72 -0
  25. package/node_modules/buildcheck/.github/workflows/lint.yml +23 -0
  26. package/node_modules/buildcheck/.npmignore +3 -0
  27. package/node_modules/{@zowe/zos-files-for-zowe-sdk/node_modules/brace-expansion → buildcheck}/LICENSE +10 -14
  28. package/node_modules/buildcheck/README.md +106 -0
  29. package/node_modules/buildcheck/deps/Find-VisualStudio.cs +250 -0
  30. package/node_modules/buildcheck/lib/findvs.js +345 -0
  31. package/node_modules/buildcheck/lib/index.js +738 -0
  32. package/node_modules/buildcheck/package.json +36 -0
  33. package/node_modules/buildcheck/test/test.js +8 -0
  34. package/node_modules/cpu-features/.eslintrc.js +5 -0
  35. package/node_modules/cpu-features/.github/workflows/ci.yml +68 -0
  36. package/node_modules/cpu-features/.github/workflows/lint.yml +27 -0
  37. package/node_modules/cpu-features/LICENSE +19 -0
  38. package/node_modules/cpu-features/README.md +59 -0
  39. package/node_modules/cpu-features/binding.gyp +16 -0
  40. package/node_modules/cpu-features/buildcheck.gypi +19 -0
  41. package/node_modules/cpu-features/buildcheck.js +32 -0
  42. package/node_modules/cpu-features/deps/cpu_features/.clang-format +4 -0
  43. package/node_modules/cpu-features/deps/cpu_features/.dockerignore +31 -0
  44. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/Dockerfile +5 -0
  45. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/aarch64_linux_cmake.yml +30 -0
  46. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/amd64_freebsd_cmake.yml +22 -0
  47. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/amd64_linux_bazel.yml +26 -0
  48. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/amd64_linux_cmake.yml +31 -0
  49. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/amd64_macos_cmake.yml +43 -0
  50. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/amd64_windows_cmake.yml +25 -0
  51. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/arm_linux_cmake.yml +31 -0
  52. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/clang_format.yml +24 -0
  53. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/mips_linux_cmake.yml +30 -0
  54. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/power_linux_cmake.yml +29 -0
  55. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/riscv_linux_cmake.yml +28 -0
  56. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/s390x_linux_cmake.yml +27 -0
  57. package/node_modules/cpu-features/deps/cpu_features/.grenrc.yml +21 -0
  58. package/node_modules/cpu-features/deps/cpu_features/BUILD.bazel +329 -0
  59. package/node_modules/cpu-features/deps/cpu_features/CMakeLists.txt +261 -0
  60. package/node_modules/cpu-features/deps/cpu_features/CONTRIBUTING.md +23 -0
  61. package/node_modules/cpu-features/deps/cpu_features/LICENSE +230 -0
  62. package/node_modules/cpu-features/deps/cpu_features/README.md +272 -0
  63. package/node_modules/cpu-features/deps/cpu_features/WORKSPACE +19 -0
  64. package/node_modules/cpu-features/deps/cpu_features/bazel/ci/README.md +5 -0
  65. package/node_modules/cpu-features/deps/cpu_features/bazel/platforms.bzl +11 -0
  66. package/node_modules/cpu-features/deps/cpu_features/cmake/CpuFeaturesConfig.cmake.in +3 -0
  67. package/node_modules/cpu-features/deps/cpu_features/cmake/CpuFeaturesNdkCompatConfig.cmake.in +3 -0
  68. package/node_modules/cpu-features/deps/cpu_features/cmake/README.md +30 -0
  69. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/Makefile +252 -0
  70. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/README.md +40 -0
  71. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/doc/docker.dot +64 -0
  72. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/doc/docker.svg +312 -0
  73. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/doc/generate_image.sh +7 -0
  74. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/docker/amd64/Dockerfile +48 -0
  75. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/docker/toolchain/Dockerfile +34 -0
  76. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/sample/CMakeLists.txt +22 -0
  77. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/sample/main.cpp +11 -0
  78. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/vagrant/freebsd/Vagrantfile +107 -0
  79. package/node_modules/cpu-features/deps/cpu_features/cmake/googletest.CMakeLists.txt.in +15 -0
  80. package/node_modules/cpu-features/deps/cpu_features/cpu_features.gyp +104 -0
  81. package/node_modules/cpu-features/deps/cpu_features/include/cpu_features_cache_info.h +54 -0
  82. package/node_modules/cpu-features/deps/cpu_features/include/cpu_features_macros.h +384 -0
  83. package/node_modules/cpu-features/deps/cpu_features/include/cpuinfo_aarch64.h +259 -0
  84. package/node_modules/cpu-features/deps/cpu_features/include/cpuinfo_arm.h +121 -0
  85. package/node_modules/cpu-features/deps/cpu_features/include/cpuinfo_mips.h +74 -0
  86. package/node_modules/cpu-features/deps/cpu_features/include/cpuinfo_ppc.h +149 -0
  87. package/node_modules/cpu-features/deps/cpu_features/include/cpuinfo_riscv.h +72 -0
  88. package/node_modules/cpu-features/deps/cpu_features/include/cpuinfo_s390x.h +108 -0
  89. package/node_modules/cpu-features/deps/cpu_features/include/cpuinfo_x86.h +288 -0
  90. package/node_modules/cpu-features/deps/cpu_features/include/internal/bit_utils.h +40 -0
  91. package/node_modules/cpu-features/deps/cpu_features/include/internal/cpuid_x86.h +37 -0
  92. package/node_modules/cpu-features/deps/cpu_features/include/internal/filesystem.h +39 -0
  93. package/node_modules/cpu-features/deps/cpu_features/include/internal/hwcaps.h +240 -0
  94. package/node_modules/cpu-features/deps/cpu_features/include/internal/stack_line_reader.h +49 -0
  95. package/node_modules/cpu-features/deps/cpu_features/include/internal/string_view.h +110 -0
  96. package/node_modules/cpu-features/deps/cpu_features/include/internal/windows_utils.h +70 -0
  97. package/node_modules/cpu-features/deps/cpu_features/ndk_compat/CMakeLists.txt +60 -0
  98. package/node_modules/cpu-features/deps/cpu_features/ndk_compat/README.md +4 -0
  99. package/node_modules/cpu-features/deps/cpu_features/ndk_compat/cpu-features.c +205 -0
  100. package/node_modules/cpu-features/deps/cpu_features/ndk_compat/cpu-features.h +320 -0
  101. package/node_modules/cpu-features/deps/cpu_features/ndk_compat/ndk-compat-test.c +12 -0
  102. package/node_modules/cpu-features/deps/cpu_features/patches/0001-Add-Apple-Silicon-Support.patch +456 -0
  103. package/node_modules/cpu-features/deps/cpu_features/scripts/generate_badges.d +165 -0
  104. package/node_modules/cpu-features/deps/cpu_features/scripts/make_release.sh +75 -0
  105. package/node_modules/cpu-features/deps/cpu_features/scripts/run_integration.sh +490 -0
  106. package/node_modules/cpu-features/deps/cpu_features/scripts/test_integration.sh +79 -0
  107. package/node_modules/cpu-features/deps/cpu_features/src/copy.inl +19 -0
  108. package/node_modules/cpu-features/deps/cpu_features/src/define_introspection.inl +86 -0
  109. package/node_modules/cpu-features/deps/cpu_features/src/define_introspection_and_hwcaps.inl +26 -0
  110. package/node_modules/cpu-features/deps/cpu_features/src/equals.inl +22 -0
  111. package/node_modules/cpu-features/deps/cpu_features/src/filesystem.c +62 -0
  112. package/node_modules/cpu-features/deps/cpu_features/src/hwcaps.c +169 -0
  113. package/node_modules/cpu-features/deps/cpu_features/src/impl_aarch64__base_implementation.inl +88 -0
  114. package/node_modules/cpu-features/deps/cpu_features/src/impl_aarch64_linux_or_android.c +79 -0
  115. package/node_modules/cpu-features/deps/cpu_features/src/impl_aarch64_macos_or_iphone.c +82 -0
  116. package/node_modules/cpu-features/deps/cpu_features/src/impl_aarch64_windows.c +138 -0
  117. package/node_modules/cpu-features/deps/cpu_features/src/impl_arm_linux_or_android.c +212 -0
  118. package/node_modules/cpu-features/deps/cpu_features/src/impl_mips_linux_or_android.c +93 -0
  119. package/node_modules/cpu-features/deps/cpu_features/src/impl_ppc_linux.c +163 -0
  120. package/node_modules/cpu-features/deps/cpu_features/src/impl_riscv_linux.c +111 -0
  121. package/node_modules/cpu-features/deps/cpu_features/src/impl_s390x_linux.c +120 -0
  122. package/node_modules/cpu-features/deps/cpu_features/src/impl_x86__base_implementation.inl +2055 -0
  123. package/node_modules/cpu-features/deps/cpu_features/src/impl_x86_freebsd.c +68 -0
  124. package/node_modules/cpu-features/deps/cpu_features/src/impl_x86_linux_or_android.c +58 -0
  125. package/node_modules/cpu-features/deps/cpu_features/src/impl_x86_macos.c +57 -0
  126. package/node_modules/cpu-features/deps/cpu_features/src/impl_x86_windows.c +58 -0
  127. package/node_modules/cpu-features/deps/cpu_features/src/stack_line_reader.c +132 -0
  128. package/node_modules/cpu-features/deps/cpu_features/src/string_view.c +192 -0
  129. package/node_modules/cpu-features/deps/cpu_features/src/utils/list_cpu_features.c +461 -0
  130. package/node_modules/cpu-features/deps/cpu_features/test/CMakeLists.txt +114 -0
  131. package/node_modules/cpu-features/deps/cpu_features/test/bit_utils_test.cc +53 -0
  132. package/node_modules/cpu-features/deps/cpu_features/test/cpuinfo_aarch64_test.cc +396 -0
  133. package/node_modules/cpu-features/deps/cpu_features/test/cpuinfo_arm_test.cc +384 -0
  134. package/node_modules/cpu-features/deps/cpu_features/test/cpuinfo_mips_test.cc +176 -0
  135. package/node_modules/cpu-features/deps/cpu_features/test/cpuinfo_ppc_test.cc +131 -0
  136. package/node_modules/cpu-features/deps/cpu_features/test/cpuinfo_riscv_test.cc +180 -0
  137. package/node_modules/cpu-features/deps/cpu_features/test/cpuinfo_s390x_test.cc +82 -0
  138. package/node_modules/cpu-features/deps/cpu_features/test/cpuinfo_x86_test.cc +1729 -0
  139. package/node_modules/cpu-features/deps/cpu_features/test/filesystem_for_testing.cc +103 -0
  140. package/node_modules/cpu-features/deps/cpu_features/test/filesystem_for_testing.h +61 -0
  141. package/node_modules/cpu-features/deps/cpu_features/test/hwcaps_for_testing.cc +52 -0
  142. package/node_modules/cpu-features/deps/cpu_features/test/hwcaps_for_testing.h +31 -0
  143. package/node_modules/cpu-features/deps/cpu_features/test/stack_line_reader_test.cc +132 -0
  144. package/node_modules/cpu-features/deps/cpu_features/test/string_view_test.cc +202 -0
  145. package/node_modules/cpu-features/lib/index.js +5 -0
  146. package/node_modules/cpu-features/package.json +40 -0
  147. package/node_modules/cpu-features/src/binding.cc +151 -0
  148. package/node_modules/cpu-features/test/test.js +12 -0
  149. package/node_modules/{@zowe/imperative → cross-spawn}/node_modules/which/README.md +16 -13
  150. package/node_modules/{@zowe/imperative → cross-spawn/node_modules/which}/node_modules/isexe/LICENSE +1 -1
  151. package/node_modules/cross-spawn/node_modules/which/node_modules/isexe/README.md +51 -0
  152. package/node_modules/cross-spawn/node_modules/which/node_modules/isexe/package.json +31 -0
  153. package/node_modules/cross-spawn/node_modules/which/package.json +43 -0
  154. package/node_modules/isexe/LICENSE +1 -1
  155. package/node_modules/isexe/README.md +40 -17
  156. package/node_modules/isexe/package.json +79 -14
  157. package/node_modules/which/README.md +13 -16
  158. package/node_modules/which/package.json +34 -20
  159. package/package.json +13 -13
  160. package/node_modules/@zowe/imperative/node_modules/isexe/README.md +0 -74
  161. package/node_modules/@zowe/imperative/node_modules/isexe/package.json +0 -96
  162. package/node_modules/@zowe/imperative/node_modules/which/package.json +0 -57
  163. package/node_modules/@zowe/secrets-for-zowe-sdk/prebuilds/keyring.darwin-arm64.node +0 -0
  164. package/node_modules/@zowe/secrets-for-zowe-sdk/prebuilds/keyring.darwin-x64.node +0 -0
  165. package/node_modules/@zowe/secrets-for-zowe-sdk/prebuilds/keyring.linux-arm-gnueabihf.node +0 -0
  166. package/node_modules/@zowe/secrets-for-zowe-sdk/prebuilds/keyring.linux-arm64-gnu.node +0 -0
  167. package/node_modules/@zowe/secrets-for-zowe-sdk/prebuilds/keyring.linux-arm64-musl.node +0 -0
  168. package/node_modules/@zowe/secrets-for-zowe-sdk/prebuilds/keyring.linux-ia32-gnu.node +0 -0
  169. package/node_modules/@zowe/secrets-for-zowe-sdk/prebuilds/keyring.linux-x64-gnu.node +0 -0
  170. package/node_modules/@zowe/secrets-for-zowe-sdk/prebuilds/keyring.linux-x64-musl.node +0 -0
  171. package/node_modules/@zowe/secrets-for-zowe-sdk/prebuilds/keyring.win32-arm64-msvc.node +0 -0
  172. package/node_modules/@zowe/secrets-for-zowe-sdk/prebuilds/keyring.win32-ia32-msvc.node +0 -0
  173. package/node_modules/@zowe/secrets-for-zowe-sdk/prebuilds/keyring.win32-x64-msvc.node +0 -0
  174. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/balanced-match/LICENSE.md +0 -23
  175. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/balanced-match/README.md +0 -57
  176. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/balanced-match/dist/commonjs/index.d.ts +0 -9
  177. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/balanced-match/dist/commonjs/index.d.ts.map +0 -1
  178. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/balanced-match/dist/commonjs/index.js +0 -59
  179. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/balanced-match/dist/commonjs/index.js.map +0 -1
  180. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/balanced-match/dist/esm/index.d.ts +0 -9
  181. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/balanced-match/dist/esm/index.d.ts.map +0 -1
  182. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/balanced-match/dist/esm/index.js +0 -54
  183. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/balanced-match/dist/esm/index.js.map +0 -1
  184. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/balanced-match/package.json +0 -68
  185. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/brace-expansion/README.md +0 -105
  186. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/brace-expansion/dist/commonjs/index.d.ts +0 -8
  187. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/brace-expansion/dist/commonjs/index.d.ts.map +0 -1
  188. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/brace-expansion/dist/commonjs/index.js +0 -289
  189. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/brace-expansion/dist/commonjs/index.js.map +0 -1
  190. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/brace-expansion/dist/commonjs/package.json +0 -3
  191. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/brace-expansion/dist/esm/index.d.ts +0 -8
  192. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/brace-expansion/dist/esm/index.d.ts.map +0 -1
  193. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/brace-expansion/dist/esm/index.js +0 -285
  194. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/brace-expansion/dist/esm/index.js.map +0 -1
  195. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/brace-expansion/dist/esm/package.json +0 -3
  196. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/brace-expansion/package.json +0 -64
  197. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/minimatch/LICENSE.md +0 -55
  198. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/minimatch/README.md +0 -528
  199. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/minimatch/dist/commonjs/assert-valid-pattern.d.ts +0 -2
  200. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/minimatch/dist/commonjs/assert-valid-pattern.d.ts.map +0 -1
  201. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/minimatch/dist/commonjs/assert-valid-pattern.js +0 -14
  202. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/minimatch/dist/commonjs/assert-valid-pattern.js.map +0 -1
  203. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/minimatch/dist/commonjs/ast.d.ts +0 -22
  204. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/minimatch/dist/commonjs/ast.d.ts.map +0 -1
  205. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/minimatch/dist/commonjs/ast.js +0 -846
  206. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/minimatch/dist/commonjs/ast.js.map +0 -1
  207. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/minimatch/dist/commonjs/brace-expressions.d.ts +0 -8
  208. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/minimatch/dist/commonjs/brace-expressions.d.ts.map +0 -1
  209. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/minimatch/dist/commonjs/brace-expressions.js +0 -150
  210. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/minimatch/dist/commonjs/brace-expressions.js.map +0 -1
  211. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/minimatch/dist/commonjs/escape.d.ts +0 -15
  212. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/minimatch/dist/commonjs/escape.d.ts.map +0 -1
  213. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/minimatch/dist/commonjs/escape.js +0 -30
  214. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/minimatch/dist/commonjs/escape.js.map +0 -1
  215. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/minimatch/dist/commonjs/index.d.ts +0 -174
  216. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/minimatch/dist/commonjs/index.d.ts.map +0 -1
  217. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/minimatch/dist/commonjs/index.js +0 -1121
  218. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/minimatch/dist/commonjs/index.js.map +0 -1
  219. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/minimatch/dist/commonjs/package.json +0 -3
  220. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/minimatch/dist/commonjs/unescape.d.ts +0 -22
  221. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/minimatch/dist/commonjs/unescape.d.ts.map +0 -1
  222. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/minimatch/dist/commonjs/unescape.js +0 -38
  223. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/minimatch/dist/commonjs/unescape.js.map +0 -1
  224. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/minimatch/dist/esm/assert-valid-pattern.d.ts +0 -2
  225. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/minimatch/dist/esm/assert-valid-pattern.d.ts.map +0 -1
  226. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/minimatch/dist/esm/assert-valid-pattern.js +0 -10
  227. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/minimatch/dist/esm/assert-valid-pattern.js.map +0 -1
  228. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/minimatch/dist/esm/ast.d.ts +0 -22
  229. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/minimatch/dist/esm/ast.d.ts.map +0 -1
  230. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/minimatch/dist/esm/ast.js +0 -842
  231. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/minimatch/dist/esm/ast.js.map +0 -1
  232. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/minimatch/dist/esm/brace-expressions.d.ts +0 -8
  233. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/minimatch/dist/esm/brace-expressions.d.ts.map +0 -1
  234. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/minimatch/dist/esm/brace-expressions.js +0 -146
  235. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/minimatch/dist/esm/brace-expressions.js.map +0 -1
  236. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/minimatch/dist/esm/escape.d.ts +0 -15
  237. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/minimatch/dist/esm/escape.d.ts.map +0 -1
  238. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/minimatch/dist/esm/escape.js +0 -26
  239. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/minimatch/dist/esm/escape.js.map +0 -1
  240. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/minimatch/dist/esm/index.d.ts +0 -174
  241. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/minimatch/dist/esm/index.d.ts.map +0 -1
  242. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/minimatch/dist/esm/index.js +0 -1108
  243. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/minimatch/dist/esm/index.js.map +0 -1
  244. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/minimatch/dist/esm/package.json +0 -3
  245. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/minimatch/dist/esm/unescape.d.ts +0 -22
  246. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/minimatch/dist/esm/unescape.d.ts.map +0 -1
  247. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/minimatch/dist/esm/unescape.js +0 -34
  248. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/minimatch/dist/esm/unescape.js.map +0 -1
  249. package/node_modules/@zowe/zos-files-for-zowe-sdk/node_modules/minimatch/package.json +0 -67
  250. package/node_modules/tar/node_modules/yallist/dist/commonjs/package.json +0 -3
  251. package/node_modules/tar/node_modules/yallist/dist/esm/package.json +0 -3
  252. /package/node_modules/{strip-ansi/node_modules/ansi-regex → ansi-regex}/index.d.ts +0 -0
  253. /package/node_modules/{strip-ansi/node_modules/ansi-regex → ansi-regex}/index.js +0 -0
  254. /package/node_modules/{shebang-command/node_modules/shebang-regex → ansi-regex}/license +0 -0
  255. /package/node_modules/{strip-ansi/node_modules/ansi-regex → ansi-regex}/package.json +0 -0
  256. /package/node_modules/{strip-ansi/node_modules/ansi-regex → ansi-regex}/readme.md +0 -0
  257. /package/node_modules/{winston/node_modules/async → async}/CHANGELOG.md +0 -0
  258. /package/node_modules/{winston/node_modules/async → async}/LICENSE +0 -0
  259. /package/node_modules/{winston/node_modules/async → async}/README.md +0 -0
  260. /package/node_modules/{winston/node_modules/async → async}/all.js +0 -0
  261. /package/node_modules/{winston/node_modules/async → async}/allLimit.js +0 -0
  262. /package/node_modules/{winston/node_modules/async → async}/allSeries.js +0 -0
  263. /package/node_modules/{winston/node_modules/async → async}/any.js +0 -0
  264. /package/node_modules/{winston/node_modules/async → async}/anyLimit.js +0 -0
  265. /package/node_modules/{winston/node_modules/async → async}/anySeries.js +0 -0
  266. /package/node_modules/{winston/node_modules/async → async}/apply.js +0 -0
  267. /package/node_modules/{winston/node_modules/async → async}/applyEach.js +0 -0
  268. /package/node_modules/{winston/node_modules/async → async}/applyEachSeries.js +0 -0
  269. /package/node_modules/{winston/node_modules/async → async}/asyncify.js +0 -0
  270. /package/node_modules/{winston/node_modules/async → async}/auto.js +0 -0
  271. /package/node_modules/{winston/node_modules/async → async}/autoInject.js +0 -0
  272. /package/node_modules/{winston/node_modules/async → async}/bower.json +0 -0
  273. /package/node_modules/{winston/node_modules/async → async}/cargo.js +0 -0
  274. /package/node_modules/{winston/node_modules/async → async}/cargoQueue.js +0 -0
  275. /package/node_modules/{winston/node_modules/async → async}/compose.js +0 -0
  276. /package/node_modules/{winston/node_modules/async → async}/concat.js +0 -0
  277. /package/node_modules/{winston/node_modules/async → async}/concatLimit.js +0 -0
  278. /package/node_modules/{winston/node_modules/async → async}/concatSeries.js +0 -0
  279. /package/node_modules/{winston/node_modules/async → async}/constant.js +0 -0
  280. /package/node_modules/{winston/node_modules/async → async}/detect.js +0 -0
  281. /package/node_modules/{winston/node_modules/async → async}/detectLimit.js +0 -0
  282. /package/node_modules/{winston/node_modules/async → async}/detectSeries.js +0 -0
  283. /package/node_modules/{winston/node_modules/async → async}/dir.js +0 -0
  284. /package/node_modules/{winston/node_modules/async → async}/dist/async.js +0 -0
  285. /package/node_modules/{winston/node_modules/async → async}/dist/async.min.js +0 -0
  286. /package/node_modules/{winston/node_modules/async → async}/dist/async.mjs +0 -0
  287. /package/node_modules/{winston/node_modules/async → async}/doDuring.js +0 -0
  288. /package/node_modules/{winston/node_modules/async → async}/doUntil.js +0 -0
  289. /package/node_modules/{winston/node_modules/async → async}/doWhilst.js +0 -0
  290. /package/node_modules/{winston/node_modules/async → async}/during.js +0 -0
  291. /package/node_modules/{winston/node_modules/async → async}/each.js +0 -0
  292. /package/node_modules/{winston/node_modules/async → async}/eachLimit.js +0 -0
  293. /package/node_modules/{winston/node_modules/async → async}/eachOf.js +0 -0
  294. /package/node_modules/{winston/node_modules/async → async}/eachOfLimit.js +0 -0
  295. /package/node_modules/{winston/node_modules/async → async}/eachOfSeries.js +0 -0
  296. /package/node_modules/{winston/node_modules/async → async}/eachSeries.js +0 -0
  297. /package/node_modules/{winston/node_modules/async → async}/ensureAsync.js +0 -0
  298. /package/node_modules/{winston/node_modules/async → async}/every.js +0 -0
  299. /package/node_modules/{winston/node_modules/async → async}/everyLimit.js +0 -0
  300. /package/node_modules/{winston/node_modules/async → async}/everySeries.js +0 -0
  301. /package/node_modules/{winston/node_modules/async → async}/filter.js +0 -0
  302. /package/node_modules/{winston/node_modules/async → async}/filterLimit.js +0 -0
  303. /package/node_modules/{winston/node_modules/async → async}/filterSeries.js +0 -0
  304. /package/node_modules/{winston/node_modules/async → async}/find.js +0 -0
  305. /package/node_modules/{winston/node_modules/async → async}/findLimit.js +0 -0
  306. /package/node_modules/{winston/node_modules/async → async}/findSeries.js +0 -0
  307. /package/node_modules/{winston/node_modules/async → async}/flatMap.js +0 -0
  308. /package/node_modules/{winston/node_modules/async → async}/flatMapLimit.js +0 -0
  309. /package/node_modules/{winston/node_modules/async → async}/flatMapSeries.js +0 -0
  310. /package/node_modules/{winston/node_modules/async → async}/foldl.js +0 -0
  311. /package/node_modules/{winston/node_modules/async → async}/foldr.js +0 -0
  312. /package/node_modules/{winston/node_modules/async → async}/forEach.js +0 -0
  313. /package/node_modules/{winston/node_modules/async → async}/forEachLimit.js +0 -0
  314. /package/node_modules/{winston/node_modules/async → async}/forEachOf.js +0 -0
  315. /package/node_modules/{winston/node_modules/async → async}/forEachOfLimit.js +0 -0
  316. /package/node_modules/{winston/node_modules/async → async}/forEachOfSeries.js +0 -0
  317. /package/node_modules/{winston/node_modules/async → async}/forEachSeries.js +0 -0
  318. /package/node_modules/{winston/node_modules/async → async}/forever.js +0 -0
  319. /package/node_modules/{winston/node_modules/async → async}/groupBy.js +0 -0
  320. /package/node_modules/{winston/node_modules/async → async}/groupByLimit.js +0 -0
  321. /package/node_modules/{winston/node_modules/async → async}/groupBySeries.js +0 -0
  322. /package/node_modules/{winston/node_modules/async → async}/index.js +0 -0
  323. /package/node_modules/{winston/node_modules/async → async}/inject.js +0 -0
  324. /package/node_modules/{winston/node_modules/async → async}/internal/DoublyLinkedList.js +0 -0
  325. /package/node_modules/{winston/node_modules/async → async}/internal/Heap.js +0 -0
  326. /package/node_modules/{winston/node_modules/async → async}/internal/applyEach.js +0 -0
  327. /package/node_modules/{winston/node_modules/async → async}/internal/asyncEachOfLimit.js +0 -0
  328. /package/node_modules/{winston/node_modules/async → async}/internal/awaitify.js +0 -0
  329. /package/node_modules/{winston/node_modules/async → async}/internal/breakLoop.js +0 -0
  330. /package/node_modules/{winston/node_modules/async → async}/internal/consoleFunc.js +0 -0
  331. /package/node_modules/{winston/node_modules/async → async}/internal/createTester.js +0 -0
  332. /package/node_modules/{winston/node_modules/async → async}/internal/eachOfLimit.js +0 -0
  333. /package/node_modules/{winston/node_modules/async → async}/internal/filter.js +0 -0
  334. /package/node_modules/{winston/node_modules/async → async}/internal/getIterator.js +0 -0
  335. /package/node_modules/{winston/node_modules/async → async}/internal/initialParams.js +0 -0
  336. /package/node_modules/{winston/node_modules/async → async}/internal/isArrayLike.js +0 -0
  337. /package/node_modules/{winston/node_modules/async → async}/internal/iterator.js +0 -0
  338. /package/node_modules/{winston/node_modules/async → async}/internal/map.js +0 -0
  339. /package/node_modules/{winston/node_modules/async → async}/internal/once.js +0 -0
  340. /package/node_modules/{winston/node_modules/async → async}/internal/onlyOnce.js +0 -0
  341. /package/node_modules/{winston/node_modules/async → async}/internal/parallel.js +0 -0
  342. /package/node_modules/{winston/node_modules/async → async}/internal/promiseCallback.js +0 -0
  343. /package/node_modules/{winston/node_modules/async → async}/internal/queue.js +0 -0
  344. /package/node_modules/{winston/node_modules/async → async}/internal/range.js +0 -0
  345. /package/node_modules/{winston/node_modules/async → async}/internal/reject.js +0 -0
  346. /package/node_modules/{winston/node_modules/async → async}/internal/setImmediate.js +0 -0
  347. /package/node_modules/{winston/node_modules/async → async}/internal/withoutIndex.js +0 -0
  348. /package/node_modules/{winston/node_modules/async → async}/internal/wrapAsync.js +0 -0
  349. /package/node_modules/{winston/node_modules/async → async}/log.js +0 -0
  350. /package/node_modules/{winston/node_modules/async → async}/map.js +0 -0
  351. /package/node_modules/{winston/node_modules/async → async}/mapLimit.js +0 -0
  352. /package/node_modules/{winston/node_modules/async → async}/mapSeries.js +0 -0
  353. /package/node_modules/{winston/node_modules/async → async}/mapValues.js +0 -0
  354. /package/node_modules/{winston/node_modules/async → async}/mapValuesLimit.js +0 -0
  355. /package/node_modules/{winston/node_modules/async → async}/mapValuesSeries.js +0 -0
  356. /package/node_modules/{winston/node_modules/async → async}/memoize.js +0 -0
  357. /package/node_modules/{winston/node_modules/async → async}/nextTick.js +0 -0
  358. /package/node_modules/{winston/node_modules/async → async}/package.json +0 -0
  359. /package/node_modules/{winston/node_modules/async → async}/parallel.js +0 -0
  360. /package/node_modules/{winston/node_modules/async → async}/parallelLimit.js +0 -0
  361. /package/node_modules/{winston/node_modules/async → async}/priorityQueue.js +0 -0
  362. /package/node_modules/{winston/node_modules/async → async}/queue.js +0 -0
  363. /package/node_modules/{winston/node_modules/async → async}/race.js +0 -0
  364. /package/node_modules/{winston/node_modules/async → async}/reduce.js +0 -0
  365. /package/node_modules/{winston/node_modules/async → async}/reduceRight.js +0 -0
  366. /package/node_modules/{winston/node_modules/async → async}/reflect.js +0 -0
  367. /package/node_modules/{winston/node_modules/async → async}/reflectAll.js +0 -0
  368. /package/node_modules/{winston/node_modules/async → async}/reject.js +0 -0
  369. /package/node_modules/{winston/node_modules/async → async}/rejectLimit.js +0 -0
  370. /package/node_modules/{winston/node_modules/async → async}/rejectSeries.js +0 -0
  371. /package/node_modules/{winston/node_modules/async → async}/retry.js +0 -0
  372. /package/node_modules/{winston/node_modules/async → async}/retryable.js +0 -0
  373. /package/node_modules/{winston/node_modules/async → async}/select.js +0 -0
  374. /package/node_modules/{winston/node_modules/async → async}/selectLimit.js +0 -0
  375. /package/node_modules/{winston/node_modules/async → async}/selectSeries.js +0 -0
  376. /package/node_modules/{winston/node_modules/async → async}/seq.js +0 -0
  377. /package/node_modules/{winston/node_modules/async → async}/series.js +0 -0
  378. /package/node_modules/{winston/node_modules/async → async}/setImmediate.js +0 -0
  379. /package/node_modules/{winston/node_modules/async → async}/some.js +0 -0
  380. /package/node_modules/{winston/node_modules/async → async}/someLimit.js +0 -0
  381. /package/node_modules/{winston/node_modules/async → async}/someSeries.js +0 -0
  382. /package/node_modules/{winston/node_modules/async → async}/sortBy.js +0 -0
  383. /package/node_modules/{winston/node_modules/async → async}/timeout.js +0 -0
  384. /package/node_modules/{winston/node_modules/async → async}/times.js +0 -0
  385. /package/node_modules/{winston/node_modules/async → async}/timesLimit.js +0 -0
  386. /package/node_modules/{winston/node_modules/async → async}/timesSeries.js +0 -0
  387. /package/node_modules/{winston/node_modules/async → async}/transform.js +0 -0
  388. /package/node_modules/{winston/node_modules/async → async}/tryEach.js +0 -0
  389. /package/node_modules/{winston/node_modules/async → async}/unmemoize.js +0 -0
  390. /package/node_modules/{winston/node_modules/async → async}/until.js +0 -0
  391. /package/node_modules/{winston/node_modules/async → async}/waterfall.js +0 -0
  392. /package/node_modules/{winston/node_modules/async → async}/whilst.js +0 -0
  393. /package/node_modules/{winston/node_modules/async → async}/wrapSync.js +0 -0
  394. /package/node_modules/{yargs/node_modules/cliui → cliui}/LICENSE.txt +0 -0
  395. /package/node_modules/{yargs/node_modules/cliui → cliui}/README.md +0 -0
  396. /package/node_modules/{yargs/node_modules/cliui → cliui}/build/index.cjs +0 -0
  397. /package/node_modules/{yargs/node_modules/cliui → cliui}/build/index.d.cts +0 -0
  398. /package/node_modules/{yargs/node_modules/cliui → cliui}/build/lib/index.js +0 -0
  399. /package/node_modules/{yargs/node_modules/cliui → cliui}/build/lib/string-utils.js +0 -0
  400. /package/node_modules/{yargs/node_modules/cliui → cliui}/index.mjs +0 -0
  401. /package/node_modules/{yargs/node_modules/cliui → cliui}/package.json +0 -0
  402. /package/node_modules/color/node_modules/{color-name → color-convert/node_modules/color-name}/.eslintrc.json +0 -0
  403. /package/node_modules/color/node_modules/{color-name → color-convert/node_modules/color-name}/.npmignore +0 -0
  404. /package/node_modules/color/node_modules/{color-name → color-convert/node_modules/color-name}/LICENSE +0 -0
  405. /package/node_modules/color/node_modules/{color-name → color-convert/node_modules/color-name}/README.md +0 -0
  406. /package/node_modules/color/node_modules/{color-name → color-convert/node_modules/color-name}/index.js +0 -0
  407. /package/node_modules/color/node_modules/{color-name → color-convert/node_modules/color-name}/package.json +0 -0
  408. /package/node_modules/color/node_modules/{color-name → color-convert/node_modules/color-name}/test.js +0 -0
  409. /package/node_modules/{@zowe/imperative → cross-spawn}/node_modules/which/LICENSE +0 -0
  410. /package/node_modules/{which → cross-spawn/node_modules/which}/bin/node-which +0 -0
  411. /package/node_modules/{isexe → cross-spawn/node_modules/which/node_modules/isexe}/.npmignore +0 -0
  412. /package/node_modules/{isexe → cross-spawn/node_modules/which/node_modules/isexe}/index.js +0 -0
  413. /package/node_modules/{isexe → cross-spawn/node_modules/which/node_modules/isexe}/mode.js +0 -0
  414. /package/node_modules/{isexe → cross-spawn/node_modules/which/node_modules/isexe}/test/basic.js +0 -0
  415. /package/node_modules/{isexe → cross-spawn/node_modules/which/node_modules/isexe}/windows.js +0 -0
  416. /package/node_modules/{which → cross-spawn/node_modules/which}/which.js +0 -0
  417. /package/node_modules/{sanitize-html/node_modules/dom-serializer → dom-serializer}/LICENSE +0 -0
  418. /package/node_modules/{sanitize-html/node_modules/dom-serializer → dom-serializer}/README.md +0 -0
  419. /package/node_modules/{sanitize-html/node_modules/dom-serializer → dom-serializer}/dist/foreign-names.d.ts +0 -0
  420. /package/node_modules/{sanitize-html/node_modules/dom-serializer → dom-serializer}/dist/foreign-names.d.ts.map +0 -0
  421. /package/node_modules/{sanitize-html/node_modules/dom-serializer → dom-serializer}/dist/foreign-names.js +0 -0
  422. /package/node_modules/{sanitize-html/node_modules/dom-serializer → dom-serializer}/dist/foreign-names.js.map +0 -0
  423. /package/node_modules/{sanitize-html/node_modules/dom-serializer → dom-serializer}/dist/index.d.ts +0 -0
  424. /package/node_modules/{sanitize-html/node_modules/dom-serializer → dom-serializer}/dist/index.d.ts.map +0 -0
  425. /package/node_modules/{sanitize-html/node_modules/dom-serializer → dom-serializer}/dist/index.js +0 -0
  426. /package/node_modules/{sanitize-html/node_modules/dom-serializer → dom-serializer}/dist/index.js.map +0 -0
  427. /package/node_modules/{sanitize-html/node_modules/dom-serializer → dom-serializer}/package.json +0 -0
  428. /package/node_modules/{sanitize-html/node_modules/dom-serializer → dom-serializer}/src/foreign-names.ts +0 -0
  429. /package/node_modules/{sanitize-html/node_modules/dom-serializer → dom-serializer}/src/index.ts +0 -0
  430. /package/node_modules/{sanitize-html/node_modules/domelementtype → domelementtype}/LICENSE +0 -0
  431. /package/node_modules/{sanitize-html/node_modules/domelementtype → domelementtype}/dist/index.d.ts +0 -0
  432. /package/node_modules/{sanitize-html/node_modules/domelementtype → domelementtype}/dist/index.d.ts.map +0 -0
  433. /package/node_modules/{sanitize-html/node_modules/domelementtype → domelementtype}/dist/index.js +0 -0
  434. /package/node_modules/{sanitize-html/node_modules/domelementtype → domelementtype}/package.json +0 -0
  435. /package/node_modules/{sanitize-html/node_modules/domelementtype → domelementtype}/readme.md +0 -0
  436. /package/node_modules/{sanitize-html/node_modules/domhandler → domhandler}/LICENSE +0 -0
  437. /package/node_modules/{sanitize-html/node_modules/domhandler → domhandler}/dist/index.d.ts +0 -0
  438. /package/node_modules/{sanitize-html/node_modules/domhandler → domhandler}/dist/index.d.ts.map +0 -0
  439. /package/node_modules/{sanitize-html/node_modules/domhandler → domhandler}/dist/index.js +0 -0
  440. /package/node_modules/{sanitize-html/node_modules/domhandler → domhandler}/dist/node.d.ts +0 -0
  441. /package/node_modules/{sanitize-html/node_modules/domhandler → domhandler}/dist/node.d.ts.map +0 -0
  442. /package/node_modules/{sanitize-html/node_modules/domhandler → domhandler}/dist/node.js +0 -0
  443. /package/node_modules/{sanitize-html/node_modules/domhandler → domhandler}/package.json +0 -0
  444. /package/node_modules/{sanitize-html/node_modules/domhandler → domhandler}/readme.md +0 -0
  445. /package/node_modules/{sanitize-html/node_modules/domutils → domutils}/LICENSE +0 -0
  446. /package/node_modules/{sanitize-html/node_modules/domutils → domutils}/dist/feeds.d.ts +0 -0
  447. /package/node_modules/{sanitize-html/node_modules/domutils → domutils}/dist/feeds.d.ts.map +0 -0
  448. /package/node_modules/{sanitize-html/node_modules/domutils → domutils}/dist/feeds.js +0 -0
  449. /package/node_modules/{sanitize-html/node_modules/domutils → domutils}/dist/feeds.js.map +0 -0
  450. /package/node_modules/{sanitize-html/node_modules/domutils → domutils}/dist/helpers.d.ts +0 -0
  451. /package/node_modules/{sanitize-html/node_modules/domutils → domutils}/dist/helpers.d.ts.map +0 -0
  452. /package/node_modules/{sanitize-html/node_modules/domutils → domutils}/dist/helpers.js +0 -0
  453. /package/node_modules/{sanitize-html/node_modules/domutils → domutils}/dist/helpers.js.map +0 -0
  454. /package/node_modules/{sanitize-html/node_modules/domutils → domutils}/dist/index.d.ts +0 -0
  455. /package/node_modules/{sanitize-html/node_modules/domutils → domutils}/dist/index.d.ts.map +0 -0
  456. /package/node_modules/{sanitize-html/node_modules/domutils → domutils}/dist/index.js +0 -0
  457. /package/node_modules/{sanitize-html/node_modules/domutils → domutils}/dist/index.js.map +0 -0
  458. /package/node_modules/{sanitize-html/node_modules/domutils → domutils}/dist/legacy.d.ts +0 -0
  459. /package/node_modules/{sanitize-html/node_modules/domutils → domutils}/dist/legacy.d.ts.map +0 -0
  460. /package/node_modules/{sanitize-html/node_modules/domutils → domutils}/dist/legacy.js +0 -0
  461. /package/node_modules/{sanitize-html/node_modules/domutils → domutils}/dist/legacy.js.map +0 -0
  462. /package/node_modules/{sanitize-html/node_modules/domutils → domutils}/dist/manipulation.d.ts +0 -0
  463. /package/node_modules/{sanitize-html/node_modules/domutils → domutils}/dist/manipulation.d.ts.map +0 -0
  464. /package/node_modules/{sanitize-html/node_modules/domutils → domutils}/dist/manipulation.js +0 -0
  465. /package/node_modules/{sanitize-html/node_modules/domutils → domutils}/dist/manipulation.js.map +0 -0
  466. /package/node_modules/{sanitize-html/node_modules/domutils → domutils}/dist/querying.d.ts +0 -0
  467. /package/node_modules/{sanitize-html/node_modules/domutils → domutils}/dist/querying.d.ts.map +0 -0
  468. /package/node_modules/{sanitize-html/node_modules/domutils → domutils}/dist/querying.js +0 -0
  469. /package/node_modules/{sanitize-html/node_modules/domutils → domutils}/dist/querying.js.map +0 -0
  470. /package/node_modules/{sanitize-html/node_modules/domutils → domutils}/dist/stringify.d.ts +0 -0
  471. /package/node_modules/{sanitize-html/node_modules/domutils → domutils}/dist/stringify.d.ts.map +0 -0
  472. /package/node_modules/{sanitize-html/node_modules/domutils → domutils}/dist/stringify.js +0 -0
  473. /package/node_modules/{sanitize-html/node_modules/domutils → domutils}/dist/stringify.js.map +0 -0
  474. /package/node_modules/{sanitize-html/node_modules/domutils → domutils}/dist/traversal.d.ts +0 -0
  475. /package/node_modules/{sanitize-html/node_modules/domutils → domutils}/dist/traversal.d.ts.map +0 -0
  476. /package/node_modules/{sanitize-html/node_modules/domutils → domutils}/dist/traversal.js +0 -0
  477. /package/node_modules/{sanitize-html/node_modules/domutils → domutils}/dist/traversal.js.map +0 -0
  478. /package/node_modules/{sanitize-html/node_modules/domutils → domutils}/package.json +0 -0
  479. /package/node_modules/{sanitize-html/node_modules/domutils → domutils}/readme.md +0 -0
  480. /package/node_modules/{sanitize-html/node_modules/domutils → domutils}/src/__snapshots__/feeds.spec.ts.snap +0 -0
  481. /package/node_modules/{sanitize-html/node_modules/domutils → domutils}/src/feeds.ts +0 -0
  482. /package/node_modules/{sanitize-html/node_modules/domutils → domutils}/src/helpers.ts +0 -0
  483. /package/node_modules/{sanitize-html/node_modules/domutils → domutils}/src/index.ts +0 -0
  484. /package/node_modules/{sanitize-html/node_modules/domutils → domutils}/src/legacy.ts +0 -0
  485. /package/node_modules/{sanitize-html/node_modules/domutils → domutils}/src/manipulation.ts +0 -0
  486. /package/node_modules/{sanitize-html/node_modules/domutils → domutils}/src/querying.ts +0 -0
  487. /package/node_modules/{sanitize-html/node_modules/domutils → domutils}/src/stringify.ts +0 -0
  488. /package/node_modules/{sanitize-html/node_modules/domutils → domutils}/src/traversal.ts +0 -0
  489. /package/node_modules/{sanitize-html/node_modules/htmlparser2 → htmlparser2}/LICENSE +0 -0
  490. /package/node_modules/{sanitize-html/node_modules/htmlparser2 → htmlparser2}/README.md +0 -0
  491. /package/node_modules/{sanitize-html/node_modules/htmlparser2 → htmlparser2}/dist/Parser.d.ts +0 -0
  492. /package/node_modules/{sanitize-html/node_modules/htmlparser2 → htmlparser2}/dist/Parser.d.ts.map +0 -0
  493. /package/node_modules/{sanitize-html/node_modules/htmlparser2 → htmlparser2}/dist/Parser.js +0 -0
  494. /package/node_modules/{sanitize-html/node_modules/htmlparser2 → htmlparser2}/dist/Parser.js.map +0 -0
  495. /package/node_modules/{sanitize-html/node_modules/htmlparser2 → htmlparser2}/dist/Tokenizer.d.ts +0 -0
  496. /package/node_modules/{sanitize-html/node_modules/htmlparser2 → htmlparser2}/dist/Tokenizer.d.ts.map +0 -0
  497. /package/node_modules/{sanitize-html/node_modules/htmlparser2 → htmlparser2}/dist/Tokenizer.js +0 -0
  498. /package/node_modules/{sanitize-html/node_modules/htmlparser2 → htmlparser2}/dist/Tokenizer.js.map +0 -0
  499. /package/node_modules/{sanitize-html/node_modules/htmlparser2 → htmlparser2}/dist/WebWritableStream.d.ts +0 -0
  500. /package/node_modules/{sanitize-html/node_modules/htmlparser2 → htmlparser2}/dist/WebWritableStream.d.ts.map +0 -0
  501. /package/node_modules/{sanitize-html/node_modules/htmlparser2 → htmlparser2}/dist/WebWritableStream.js +0 -0
  502. /package/node_modules/{sanitize-html/node_modules/htmlparser2 → htmlparser2}/dist/WebWritableStream.js.map +0 -0
  503. /package/node_modules/{sanitize-html/node_modules/htmlparser2 → htmlparser2}/dist/WritableStream.d.ts +0 -0
  504. /package/node_modules/{sanitize-html/node_modules/htmlparser2 → htmlparser2}/dist/WritableStream.d.ts.map +0 -0
  505. /package/node_modules/{sanitize-html/node_modules/htmlparser2 → htmlparser2}/dist/WritableStream.js +0 -0
  506. /package/node_modules/{sanitize-html/node_modules/htmlparser2 → htmlparser2}/dist/WritableStream.js.map +0 -0
  507. /package/node_modules/{sanitize-html/node_modules/htmlparser2 → htmlparser2}/dist/index.d.ts +0 -0
  508. /package/node_modules/{sanitize-html/node_modules/htmlparser2 → htmlparser2}/dist/index.d.ts.map +0 -0
  509. /package/node_modules/{sanitize-html/node_modules/htmlparser2 → htmlparser2}/dist/index.js +0 -0
  510. /package/node_modules/{sanitize-html/node_modules/htmlparser2 → htmlparser2}/dist/index.js.map +0 -0
  511. /package/node_modules/{sanitize-html → htmlparser2}/node_modules/entities/LICENSE +0 -0
  512. /package/node_modules/{sanitize-html → htmlparser2}/node_modules/entities/dist/decode-codepoint.d.ts +0 -0
  513. /package/node_modules/{sanitize-html → htmlparser2}/node_modules/entities/dist/decode-codepoint.d.ts.map +0 -0
  514. /package/node_modules/{sanitize-html → htmlparser2}/node_modules/entities/dist/decode-codepoint.js +0 -0
  515. /package/node_modules/{sanitize-html → htmlparser2}/node_modules/entities/dist/decode-codepoint.js.map +0 -0
  516. /package/node_modules/{sanitize-html → htmlparser2}/node_modules/entities/dist/decode.d.ts +0 -0
  517. /package/node_modules/{sanitize-html → htmlparser2}/node_modules/entities/dist/decode.d.ts.map +0 -0
  518. /package/node_modules/{sanitize-html → htmlparser2}/node_modules/entities/dist/decode.js +0 -0
  519. /package/node_modules/{sanitize-html → htmlparser2}/node_modules/entities/dist/decode.js.map +0 -0
  520. /package/node_modules/{sanitize-html → htmlparser2}/node_modules/entities/dist/encode.d.ts +0 -0
  521. /package/node_modules/{sanitize-html → htmlparser2}/node_modules/entities/dist/encode.d.ts.map +0 -0
  522. /package/node_modules/{sanitize-html → htmlparser2}/node_modules/entities/dist/encode.js +0 -0
  523. /package/node_modules/{sanitize-html → htmlparser2}/node_modules/entities/dist/encode.js.map +0 -0
  524. /package/node_modules/{sanitize-html → htmlparser2}/node_modules/entities/dist/escape.d.ts +0 -0
  525. /package/node_modules/{sanitize-html → htmlparser2}/node_modules/entities/dist/escape.d.ts.map +0 -0
  526. /package/node_modules/{sanitize-html → htmlparser2}/node_modules/entities/dist/escape.js +0 -0
  527. /package/node_modules/{sanitize-html → htmlparser2}/node_modules/entities/dist/escape.js.map +0 -0
  528. /package/node_modules/{sanitize-html → htmlparser2}/node_modules/entities/dist/generated/decode-data-html.d.ts +0 -0
  529. /package/node_modules/{sanitize-html → htmlparser2}/node_modules/entities/dist/generated/decode-data-html.d.ts.map +0 -0
  530. /package/node_modules/{sanitize-html → htmlparser2}/node_modules/entities/dist/generated/decode-data-html.js +0 -0
  531. /package/node_modules/{sanitize-html → htmlparser2}/node_modules/entities/dist/generated/decode-data-html.js.map +0 -0
  532. /package/node_modules/{sanitize-html → htmlparser2}/node_modules/entities/dist/generated/decode-data-xml.d.ts +0 -0
  533. /package/node_modules/{sanitize-html → htmlparser2}/node_modules/entities/dist/generated/decode-data-xml.d.ts.map +0 -0
  534. /package/node_modules/{sanitize-html → htmlparser2}/node_modules/entities/dist/generated/decode-data-xml.js +0 -0
  535. /package/node_modules/{sanitize-html → htmlparser2}/node_modules/entities/dist/generated/decode-data-xml.js.map +0 -0
  536. /package/node_modules/{sanitize-html → htmlparser2}/node_modules/entities/dist/generated/encode-html.d.ts +0 -0
  537. /package/node_modules/{sanitize-html → htmlparser2}/node_modules/entities/dist/generated/encode-html.d.ts.map +0 -0
  538. /package/node_modules/{sanitize-html → htmlparser2}/node_modules/entities/dist/generated/encode-html.js +0 -0
  539. /package/node_modules/{sanitize-html → htmlparser2}/node_modules/entities/dist/generated/encode-html.js.map +0 -0
  540. /package/node_modules/{sanitize-html → htmlparser2}/node_modules/entities/dist/index.d.ts +0 -0
  541. /package/node_modules/{sanitize-html → htmlparser2}/node_modules/entities/dist/index.d.ts.map +0 -0
  542. /package/node_modules/{sanitize-html → htmlparser2}/node_modules/entities/dist/index.js +0 -0
  543. /package/node_modules/{sanitize-html → htmlparser2}/node_modules/entities/dist/index.js.map +0 -0
  544. /package/node_modules/{sanitize-html → htmlparser2}/node_modules/entities/dist/internal/bin-trie-flags.d.ts +0 -0
  545. /package/node_modules/{sanitize-html → htmlparser2}/node_modules/entities/dist/internal/bin-trie-flags.d.ts.map +0 -0
  546. /package/node_modules/{sanitize-html → htmlparser2}/node_modules/entities/dist/internal/bin-trie-flags.js +0 -0
  547. /package/node_modules/{sanitize-html → htmlparser2}/node_modules/entities/dist/internal/bin-trie-flags.js.map +0 -0
  548. /package/node_modules/{sanitize-html → htmlparser2}/node_modules/entities/dist/internal/decode-shared.d.ts +0 -0
  549. /package/node_modules/{sanitize-html → htmlparser2}/node_modules/entities/dist/internal/decode-shared.d.ts.map +0 -0
  550. /package/node_modules/{sanitize-html → htmlparser2}/node_modules/entities/dist/internal/decode-shared.js +0 -0
  551. /package/node_modules/{sanitize-html → htmlparser2}/node_modules/entities/dist/internal/decode-shared.js.map +0 -0
  552. /package/node_modules/{sanitize-html → htmlparser2}/node_modules/entities/package.json +0 -0
  553. /package/node_modules/{sanitize-html → htmlparser2}/node_modules/entities/readme.md +0 -0
  554. /package/node_modules/{sanitize-html → htmlparser2}/node_modules/entities/src/decode-codepoint.ts +0 -0
  555. /package/node_modules/{sanitize-html → htmlparser2}/node_modules/entities/src/decode.ts +0 -0
  556. /package/node_modules/{sanitize-html → htmlparser2}/node_modules/entities/src/encode.ts +0 -0
  557. /package/node_modules/{sanitize-html → htmlparser2}/node_modules/entities/src/escape.ts +0 -0
  558. /package/node_modules/{sanitize-html → htmlparser2}/node_modules/entities/src/generated/decode-data-html.ts +0 -0
  559. /package/node_modules/{sanitize-html → htmlparser2}/node_modules/entities/src/generated/decode-data-xml.ts +0 -0
  560. /package/node_modules/{sanitize-html → htmlparser2}/node_modules/entities/src/generated/encode-html.ts +0 -0
  561. /package/node_modules/{sanitize-html → htmlparser2}/node_modules/entities/src/index.ts +0 -0
  562. /package/node_modules/{sanitize-html → htmlparser2}/node_modules/entities/src/internal/bin-trie-flags.ts +0 -0
  563. /package/node_modules/{sanitize-html → htmlparser2}/node_modules/entities/src/internal/decode-shared.ts +0 -0
  564. /package/node_modules/{sanitize-html/node_modules/htmlparser2 → htmlparser2}/package.json +0 -0
  565. /package/node_modules/{sanitize-html/node_modules/htmlparser2 → htmlparser2}/src/Parser.ts +0 -0
  566. /package/node_modules/{sanitize-html/node_modules/htmlparser2 → htmlparser2}/src/Tokenizer.ts +0 -0
  567. /package/node_modules/{sanitize-html/node_modules/htmlparser2 → htmlparser2}/src/WebWritableStream.ts +0 -0
  568. /package/node_modules/{sanitize-html/node_modules/htmlparser2 → htmlparser2}/src/WritableStream.ts +0 -0
  569. /package/node_modules/{sanitize-html/node_modules/htmlparser2 → htmlparser2}/src/index.ts +0 -0
  570. /package/node_modules/{simple-swizzle/node_modules/is-arrayish → is-arrayish}/LICENSE +0 -0
  571. /package/node_modules/{simple-swizzle/node_modules/is-arrayish → is-arrayish}/README.md +0 -0
  572. /package/node_modules/{simple-swizzle/node_modules/is-arrayish → is-arrayish}/index.js +0 -0
  573. /package/node_modules/{simple-swizzle/node_modules/is-arrayish → is-arrayish}/package.json +0 -0
  574. /package/node_modules/{simple-swizzle/node_modules/is-arrayish → is-arrayish}/yarn-error.log +0 -0
  575. /package/node_modules/{@zowe/imperative/node_modules/isexe → isexe}/dist/cjs/index.d.ts +0 -0
  576. /package/node_modules/{@zowe/imperative/node_modules/isexe → isexe}/dist/cjs/index.d.ts.map +0 -0
  577. /package/node_modules/{@zowe/imperative/node_modules/isexe → isexe}/dist/cjs/index.js +0 -0
  578. /package/node_modules/{@zowe/imperative/node_modules/isexe → isexe}/dist/cjs/index.js.map +0 -0
  579. /package/node_modules/{@zowe/imperative/node_modules/isexe → isexe}/dist/cjs/options.d.ts +0 -0
  580. /package/node_modules/{@zowe/imperative/node_modules/isexe → isexe}/dist/cjs/options.d.ts.map +0 -0
  581. /package/node_modules/{@zowe/imperative/node_modules/isexe → isexe}/dist/cjs/options.js +0 -0
  582. /package/node_modules/{@zowe/imperative/node_modules/isexe → isexe}/dist/cjs/options.js.map +0 -0
  583. /package/node_modules/{@zowe/imperative/node_modules/isexe → isexe}/dist/cjs/package.json +0 -0
  584. /package/node_modules/{@zowe/imperative/node_modules/isexe → isexe}/dist/cjs/posix.d.ts +0 -0
  585. /package/node_modules/{@zowe/imperative/node_modules/isexe → isexe}/dist/cjs/posix.d.ts.map +0 -0
  586. /package/node_modules/{@zowe/imperative/node_modules/isexe → isexe}/dist/cjs/posix.js +0 -0
  587. /package/node_modules/{@zowe/imperative/node_modules/isexe → isexe}/dist/cjs/posix.js.map +0 -0
  588. /package/node_modules/{@zowe/imperative/node_modules/isexe → isexe}/dist/cjs/win32.d.ts +0 -0
  589. /package/node_modules/{@zowe/imperative/node_modules/isexe → isexe}/dist/cjs/win32.d.ts.map +0 -0
  590. /package/node_modules/{@zowe/imperative/node_modules/isexe → isexe}/dist/cjs/win32.js +0 -0
  591. /package/node_modules/{@zowe/imperative/node_modules/isexe → isexe}/dist/cjs/win32.js.map +0 -0
  592. /package/node_modules/{@zowe/imperative/node_modules/isexe → isexe}/dist/mjs/index.d.ts +0 -0
  593. /package/node_modules/{@zowe/imperative/node_modules/isexe → isexe}/dist/mjs/index.d.ts.map +0 -0
  594. /package/node_modules/{@zowe/imperative/node_modules/isexe → isexe}/dist/mjs/index.js +0 -0
  595. /package/node_modules/{@zowe/imperative/node_modules/isexe → isexe}/dist/mjs/index.js.map +0 -0
  596. /package/node_modules/{@zowe/imperative/node_modules/isexe → isexe}/dist/mjs/options.d.ts +0 -0
  597. /package/node_modules/{@zowe/imperative/node_modules/isexe → isexe}/dist/mjs/options.d.ts.map +0 -0
  598. /package/node_modules/{@zowe/imperative/node_modules/isexe → isexe}/dist/mjs/options.js +0 -0
  599. /package/node_modules/{@zowe/imperative/node_modules/isexe → isexe}/dist/mjs/options.js.map +0 -0
  600. /package/node_modules/{@zowe/imperative/node_modules/isexe → isexe}/dist/mjs/package.json +0 -0
  601. /package/node_modules/{@zowe/imperative/node_modules/isexe → isexe}/dist/mjs/posix.d.ts +0 -0
  602. /package/node_modules/{@zowe/imperative/node_modules/isexe → isexe}/dist/mjs/posix.d.ts.map +0 -0
  603. /package/node_modules/{@zowe/imperative/node_modules/isexe → isexe}/dist/mjs/posix.js +0 -0
  604. /package/node_modules/{@zowe/imperative/node_modules/isexe → isexe}/dist/mjs/posix.js.map +0 -0
  605. /package/node_modules/{@zowe/imperative/node_modules/isexe → isexe}/dist/mjs/win32.d.ts +0 -0
  606. /package/node_modules/{@zowe/imperative/node_modules/isexe → isexe}/dist/mjs/win32.d.ts.map +0 -0
  607. /package/node_modules/{@zowe/imperative/node_modules/isexe → isexe}/dist/mjs/win32.js +0 -0
  608. /package/node_modules/{@zowe/imperative/node_modules/isexe → isexe}/dist/mjs/win32.js.map +0 -0
  609. /package/node_modules/{shebang-command/node_modules/shebang-regex → shebang-regex}/index.d.ts +0 -0
  610. /package/node_modules/{shebang-command/node_modules/shebang-regex → shebang-regex}/index.js +0 -0
  611. /package/node_modules/{strip-ansi/node_modules/ansi-regex → shebang-regex}/license +0 -0
  612. /package/node_modules/{shebang-command/node_modules/shebang-regex → shebang-regex}/package.json +0 -0
  613. /package/node_modules/{shebang-command/node_modules/shebang-regex → shebang-regex}/readme.md +0 -0
  614. /package/node_modules/streamroller/node_modules/{jsonfile → fs-extra/node_modules/jsonfile}/LICENSE +0 -0
  615. /package/node_modules/streamroller/node_modules/{jsonfile → fs-extra/node_modules/jsonfile}/README.md +0 -0
  616. /package/node_modules/streamroller/node_modules/{jsonfile → fs-extra/node_modules/jsonfile}/index.js +0 -0
  617. /package/node_modules/streamroller/node_modules/{jsonfile → fs-extra/node_modules/jsonfile}/package.json +0 -0
  618. /package/node_modules/streamroller/node_modules/{universalify → fs-extra/node_modules/universalify}/LICENSE +0 -0
  619. /package/node_modules/streamroller/node_modules/{universalify → fs-extra/node_modules/universalify}/README.md +0 -0
  620. /package/node_modules/streamroller/node_modules/{universalify → fs-extra/node_modules/universalify}/index.js +0 -0
  621. /package/node_modules/streamroller/node_modules/{universalify → fs-extra/node_modules/universalify}/package.json +0 -0
  622. /package/node_modules/{@zowe/imperative/node_modules/which → which}/bin/which.js +0 -0
  623. /package/node_modules/{@zowe/imperative/node_modules/which → which}/lib/index.js +0 -0
  624. /package/node_modules/{yargs/node_modules/y18n → y18n}/LICENSE +0 -0
  625. /package/node_modules/{yargs/node_modules/y18n → y18n}/README.md +0 -0
  626. /package/node_modules/{yargs/node_modules/y18n → y18n}/build/index.cjs +0 -0
  627. /package/node_modules/{yargs/node_modules/y18n → y18n}/build/lib/cjs.js +0 -0
  628. /package/node_modules/{yargs/node_modules/y18n → y18n}/build/lib/index.js +0 -0
  629. /package/node_modules/{yargs/node_modules/y18n → y18n}/build/lib/platform-shims/node.js +0 -0
  630. /package/node_modules/{yargs/node_modules/y18n → y18n}/index.mjs +0 -0
  631. /package/node_modules/{yargs/node_modules/y18n → y18n}/package.json +0 -0
  632. /package/node_modules/{tar/node_modules/yallist → yallist}/LICENSE.md +0 -0
  633. /package/node_modules/{tar/node_modules/yallist → yallist}/README.md +0 -0
  634. /package/node_modules/{tar/node_modules/yallist → yallist}/dist/commonjs/index.d.ts +0 -0
  635. /package/node_modules/{tar/node_modules/yallist → yallist}/dist/commonjs/index.d.ts.map +0 -0
  636. /package/node_modules/{tar/node_modules/yallist → yallist}/dist/commonjs/index.js +0 -0
  637. /package/node_modules/{tar/node_modules/yallist → yallist}/dist/commonjs/index.js.map +0 -0
  638. /package/node_modules/{@zowe/zos-files-for-zowe-sdk/node_modules/balanced-match → yallist}/dist/commonjs/package.json +0 -0
  639. /package/node_modules/{tar/node_modules/yallist → yallist}/dist/esm/index.d.ts +0 -0
  640. /package/node_modules/{tar/node_modules/yallist → yallist}/dist/esm/index.d.ts.map +0 -0
  641. /package/node_modules/{tar/node_modules/yallist → yallist}/dist/esm/index.js +0 -0
  642. /package/node_modules/{tar/node_modules/yallist → yallist}/dist/esm/index.js.map +0 -0
  643. /package/node_modules/{@zowe/zos-files-for-zowe-sdk/node_modules/balanced-match → yallist}/dist/esm/package.json +0 -0
  644. /package/node_modules/{tar/node_modules/yallist → yallist}/package.json +0 -0
@@ -0,0 +1,1729 @@
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