Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.
 
 
 
 

241 righe
41 KiB

  1. #include <stdio.h>
  2. #include "../cpu_info.hpp"
  3. auto print_full_cpu_info() -> void {
  4. Cpu_Info info;
  5. get_cpu_info(&info);
  6. printf("-------------------\n");
  7. printf(" CPU INFO \n");
  8. printf("-------------------\n");
  9. printf("vendor: %s\n", info.vendor);
  10. printf("brand: %s\n", info.brand);
  11. printf("-------------------\n");
  12. printf("Edx_1_Feature_Flags\n");
  13. printf("-------------------\n");
  14. printf("fpu: %s // Onboard x87 FPU\n", query_cpu_feature(&info, Edx_1_Feature_Flags::fpu) ? "yes" : "no ");
  15. printf("vme: %s // Virtual 8086 mode extensions (such as VIF, VIP, PIV)\n", query_cpu_feature(&info, Edx_1_Feature_Flags::vme) ? "yes" : "no ");
  16. printf("de: %s // Debugging extensions (CR4 bit 3)\n", query_cpu_feature(&info, Edx_1_Feature_Flags::de) ? "yes" : "no ");
  17. printf("pse: %s // Page Size Extension\n", query_cpu_feature(&info, Edx_1_Feature_Flags::pse) ? "yes" : "no ");
  18. printf("tsc: %s // Time Stamp Counter\n", query_cpu_feature(&info, Edx_1_Feature_Flags::tsc) ? "yes" : "no ");
  19. printf("msr: %s // Model-specific registers\n", query_cpu_feature(&info, Edx_1_Feature_Flags::msr) ? "yes" : "no ");
  20. printf("pae: %s // Physical Address Extension\n", query_cpu_feature(&info, Edx_1_Feature_Flags::pae) ? "yes" : "no ");
  21. printf("mce: %s // Machine Check Exception\n", query_cpu_feature(&info, Edx_1_Feature_Flags::mce) ? "yes" : "no ");
  22. printf("cx8: %s // CMPXCHG8 (compare-and-swap) instruction\n", query_cpu_feature(&info, Edx_1_Feature_Flags::cx8) ? "yes" : "no ");
  23. printf("apic: %s // Onboard Advanced Programmable Interrupt Controller\n", query_cpu_feature(&info, Edx_1_Feature_Flags::apic) ? "yes" : "no ");
  24. printf("_resv1: %s // (reserved)\n", query_cpu_feature(&info, Edx_1_Feature_Flags::_resv1) ? "yes" : "no ");
  25. printf("sep: %s // SYSENTER and SYSEXIT instructions\n", query_cpu_feature(&info, Edx_1_Feature_Flags::sep) ? "yes" : "no ");
  26. printf("mtrr: %s // Memory Type Range Registers\n", query_cpu_feature(&info, Edx_1_Feature_Flags::mtrr) ? "yes" : "no ");
  27. printf("pge: %s // Page Global Enable bit in CR4\n", query_cpu_feature(&info, Edx_1_Feature_Flags::pge) ? "yes" : "no ");
  28. printf("mca: %s // Machine check architecture\n", query_cpu_feature(&info, Edx_1_Feature_Flags::mca) ? "yes" : "no ");
  29. printf("cmov: %s // Conditional move and FCMOV instructions\n", query_cpu_feature(&info, Edx_1_Feature_Flags::cmov) ? "yes" : "no ");
  30. printf("pat: %s // Page Attribute Table\n", query_cpu_feature(&info, Edx_1_Feature_Flags::pat) ? "yes" : "no ");
  31. printf("pse_36: %s // 36-bit page size extension\n", query_cpu_feature(&info, Edx_1_Feature_Flags::pse_36) ? "yes" : "no ");
  32. printf("psn: %s // Processor Serial Number\n", query_cpu_feature(&info, Edx_1_Feature_Flags::psn) ? "yes" : "no ");
  33. printf("clfsh: %s // CLFLUSH instruction (SSE2)\n", query_cpu_feature(&info, Edx_1_Feature_Flags::clfsh) ? "yes" : "no ");
  34. printf("_resv2: %s // (reserved)\n", query_cpu_feature(&info, Edx_1_Feature_Flags::_resv2) ? "yes" : "no ");
  35. printf("ds: %s // Debug store: save trace of executed jumps\n", query_cpu_feature(&info, Edx_1_Feature_Flags::ds) ? "yes" : "no ");
  36. printf("acpi: %s // Onboard thermal control MSRs for ACPI\n", query_cpu_feature(&info, Edx_1_Feature_Flags::acpi) ? "yes" : "no ");
  37. printf("mmx: %s // MMX instructions\n", query_cpu_feature(&info, Edx_1_Feature_Flags::mmx) ? "yes" : "no ");
  38. printf("fxsr: %s // FXSAVE, FXRESTOR instructions, CR4 bit 9\n", query_cpu_feature(&info, Edx_1_Feature_Flags::fxsr) ? "yes" : "no ");
  39. printf("sse: %s // SSE instructions (a.k.a. Katmai New Instructions)\n", query_cpu_feature(&info, Edx_1_Feature_Flags::sse) ? "yes" : "no ");
  40. printf("sse2: %s // SSE2 instructions\n", query_cpu_feature(&info, Edx_1_Feature_Flags::sse2) ? "yes" : "no ");
  41. printf("ss: %s // CPU cache implements self-snoop\n", query_cpu_feature(&info, Edx_1_Feature_Flags::ss) ? "yes" : "no ");
  42. printf("htt: %s // Hyper-threading\n", query_cpu_feature(&info, Edx_1_Feature_Flags::htt) ? "yes" : "no ");
  43. printf("tm: %s // Thermal monitor automatically limits temperature\n", query_cpu_feature(&info, Edx_1_Feature_Flags::tm) ? "yes" : "no ");
  44. printf("ia64: %s // IA64 processor emulating x86\n", query_cpu_feature(&info, Edx_1_Feature_Flags::ia64) ? "yes" : "no ");
  45. printf("pbe: %s // Pending Break Enable (PBE# pin) wakeup capability\n", query_cpu_feature(&info, Edx_1_Feature_Flags::pbe) ? "yes" : "no ");
  46. printf("-------------------\n");
  47. printf("Ecx_1_Feature_Flags\n");
  48. printf("-------------------\n");
  49. printf("sse3: %s // Prescott New Instructions-SSE3 (PNI)\n", query_cpu_feature(&info, Ecx_1_Feature_Flags::sse3) ? "yes" : "no ");
  50. printf("pclmulqdq: %s // PCLMULQDQ\n", query_cpu_feature(&info, Ecx_1_Feature_Flags::pclmulqdq) ? "yes" : "no ");
  51. printf("dtes64: %s // 64-bit debug store (edx bit 21)\n", query_cpu_feature(&info, Ecx_1_Feature_Flags::dtes64) ? "yes" : "no ");
  52. printf("monitor: %s // MONITOR and MWAIT instructions (SSE3)\n", query_cpu_feature(&info, Ecx_1_Feature_Flags::monitor) ? "yes" : "no ");
  53. printf("ds_cpl: %s // CPL qualified debug store\n", query_cpu_feature(&info, Ecx_1_Feature_Flags::ds_cpl) ? "yes" : "no ");
  54. printf("vmx: %s // Virtual Machine eXtensions\n", query_cpu_feature(&info, Ecx_1_Feature_Flags::vmx) ? "yes" : "no ");
  55. printf("smx: %s // Safer Mode Extensions (LaGrande)\n", query_cpu_feature(&info, Ecx_1_Feature_Flags::smx) ? "yes" : "no ");
  56. printf("est: %s // Enhanced SpeedStep\n", query_cpu_feature(&info, Ecx_1_Feature_Flags::est) ? "yes" : "no ");
  57. printf("tm2: %s // Thermal Monitor 2\n", query_cpu_feature(&info, Ecx_1_Feature_Flags::tm2) ? "yes" : "no ");
  58. printf("ssse3: %s // Supplemental SSE3 instructions\n", query_cpu_feature(&info, Ecx_1_Feature_Flags::ssse3) ? "yes" : "no ");
  59. printf("cnxt_id: %s // L1 Context ID\n", query_cpu_feature(&info, Ecx_1_Feature_Flags::cnxt_id) ? "yes" : "no ");
  60. printf("sdbg: %s // Silicon Debug interface\n", query_cpu_feature(&info, Ecx_1_Feature_Flags::sdbg) ? "yes" : "no ");
  61. printf("fma: %s // Fused multiply-add (FMA3)\n", query_cpu_feature(&info, Ecx_1_Feature_Flags::fma) ? "yes" : "no ");
  62. printf("cx16: %s // CMPXCHG16B instruction\n", query_cpu_feature(&info, Ecx_1_Feature_Flags::cx16) ? "yes" : "no ");
  63. printf("xtpr: %s // Can disable sending task priority messages\n", query_cpu_feature(&info, Ecx_1_Feature_Flags::xtpr) ? "yes" : "no ");
  64. printf("pdcm: %s // Perfmon & debug capability\n", query_cpu_feature(&info, Ecx_1_Feature_Flags::pdcm) ? "yes" : "no ");
  65. printf("_resv1: %s // (reserved)\n", query_cpu_feature(&info, Ecx_1_Feature_Flags::_resv1) ? "yes" : "no ");
  66. printf("pcid: %s // Process context identifiers (CR4 bit 17)\n", query_cpu_feature(&info, Ecx_1_Feature_Flags::pcid) ? "yes" : "no ");
  67. printf("dca: %s // Direct cache access for DMA writes\n", query_cpu_feature(&info, Ecx_1_Feature_Flags::dca) ? "yes" : "no ");
  68. printf("sse4_1: %s // SSE4.1 instructions\n", query_cpu_feature(&info, Ecx_1_Feature_Flags::sse4_1) ? "yes" : "no ");
  69. printf("sse4_2: %s // SSE4.2 instructions\n", query_cpu_feature(&info, Ecx_1_Feature_Flags::sse4_2) ? "yes" : "no ");
  70. printf("x2apic: %s // x2APIC\n", query_cpu_feature(&info, Ecx_1_Feature_Flags::x2apic) ? "yes" : "no ");
  71. printf("movbe: %s // MOVBE instruction (big-endian)\n", query_cpu_feature(&info, Ecx_1_Feature_Flags::movbe) ? "yes" : "no ");
  72. printf("popcnt: %s // POPCNT instruction\n", query_cpu_feature(&info, Ecx_1_Feature_Flags::popcnt) ? "yes" : "no ");
  73. printf("tsc_deadline: %s // APIC implements one-shot operation using a TSC deadline value\n", query_cpu_feature(&info, Ecx_1_Feature_Flags::tsc_deadline) ? "yes" : "no ");
  74. printf("aes: %s // AES instruction set\n", query_cpu_feature(&info, Ecx_1_Feature_Flags::aes) ? "yes" : "no ");
  75. printf("xsave: %s // XSAVE, XRESTOR, XSETBV, XGETBV\n", query_cpu_feature(&info, Ecx_1_Feature_Flags::xsave) ? "yes" : "no ");
  76. printf("osxsave: %s // XSAVE enabled by OS\n", query_cpu_feature(&info, Ecx_1_Feature_Flags::osxsave) ? "yes" : "no ");
  77. printf("avx: %s // Advanced Vector Extensions\n", query_cpu_feature(&info, Ecx_1_Feature_Flags::avx) ? "yes" : "no ");
  78. printf("f16c: %s // F16C (half-precision) FP feature\n", query_cpu_feature(&info, Ecx_1_Feature_Flags::f16c) ? "yes" : "no ");
  79. printf("rdrnd: %s // RDRAND (on-chip random number generator) feature\n", query_cpu_feature(&info, Ecx_1_Feature_Flags::rdrnd) ? "yes" : "no ");
  80. printf("hypervisor: %s // Hypervisor present (always zero on physical CPUs)\n", query_cpu_feature(&info, Ecx_1_Feature_Flags::hypervisor) ? "yes" : "no ");
  81. printf("----------------------------\n");
  82. printf("Ebx_7_Extended_Feature_Flags\n");
  83. printf("----------------------------\n");
  84. printf("fsgsbase: %s // Access to base of %%fs and %%gs\n", query_cpu_feature(&info, Ebx_7_Extended_Feature_Flags::fsgsbase) ? "yes" : "no ");
  85. printf("_idk1: %s //\n", query_cpu_feature(&info, Ebx_7_Extended_Feature_Flags::_idk1) ? "yes" : "no ");
  86. printf("sgx: %s // Software Guard Extensions\n", query_cpu_feature(&info, Ebx_7_Extended_Feature_Flags::sgx) ? "yes" : "no ");
  87. printf("bmi1: %s // Bit Manipulation Instruction Set 1\n", query_cpu_feature(&info, Ebx_7_Extended_Feature_Flags::bmi1) ? "yes" : "no ");
  88. printf("hle: %s // TSX Hardware Lock Elision\n", query_cpu_feature(&info, Ebx_7_Extended_Feature_Flags::hle) ? "yes" : "no ");
  89. printf("avx2: %s // Advanced Vector Extensions 2\n", query_cpu_feature(&info, Ebx_7_Extended_Feature_Flags::avx2) ? "yes" : "no ");
  90. printf("_idk2: %s //\n", query_cpu_feature(&info, Ebx_7_Extended_Feature_Flags::_idk2) ? "yes" : "no ");
  91. printf("smep: %s // Supervisor Mode Execution Prevention\n", query_cpu_feature(&info, Ebx_7_Extended_Feature_Flags::smep) ? "yes" : "no ");
  92. printf("bmi2: %s // Bit Manipulation Instruction Set 2\n", query_cpu_feature(&info, Ebx_7_Extended_Feature_Flags::bmi2) ? "yes" : "no ");
  93. printf("erms: %s // Enhanced REP MOVSB/STOSB\n", query_cpu_feature(&info, Ebx_7_Extended_Feature_Flags::erms) ? "yes" : "no ");
  94. printf("invpcid: %s // INVPCID instruction\n", query_cpu_feature(&info, Ebx_7_Extended_Feature_Flags::invpcid) ? "yes" : "no ");
  95. printf("rtm: %s // TSX Restricted Transactional Memory\n", query_cpu_feature(&info, Ebx_7_Extended_Feature_Flags::rtm) ? "yes" : "no ");
  96. printf("pqm: %s // Platform Quality of Service Monitoring\n", query_cpu_feature(&info, Ebx_7_Extended_Feature_Flags::pqm) ? "yes" : "no ");
  97. printf("_idk3: %s //\n", query_cpu_feature(&info, Ebx_7_Extended_Feature_Flags::_idk3) ? "yes" : "no ");
  98. printf("mpx: %s // Intel MPX (Memory Protection Extensions)\n", query_cpu_feature(&info, Ebx_7_Extended_Feature_Flags::mpx) ? "yes" : "no ");
  99. printf("pqe: %s // Platform Quality of Service Enforcement\n", query_cpu_feature(&info, Ebx_7_Extended_Feature_Flags::pqe) ? "yes" : "no ");
  100. printf("avx512_f: %s // AVX-512 Foundation\n", query_cpu_feature(&info, Ebx_7_Extended_Feature_Flags::avx512_f) ? "yes" : "no ");
  101. printf("avx512_dq: %s // AVX-512 Doubleword and Quadword Instructions\n", query_cpu_feature(&info, Ebx_7_Extended_Feature_Flags::avx512_dq) ? "yes" : "no ");
  102. printf("rdseed: %s // RDSEED instruction\n", query_cpu_feature(&info, Ebx_7_Extended_Feature_Flags::rdseed) ? "yes" : "no ");
  103. printf("adx: %s // Intel ADX (Multi-Precision Add-Carry Instruction Extensions)\n", query_cpu_feature(&info, Ebx_7_Extended_Feature_Flags::adx) ? "yes" : "no ");
  104. printf("smap: %s // Supervisor Mode Access Prevention\n", query_cpu_feature(&info, Ebx_7_Extended_Feature_Flags::smap) ? "yes" : "no ");
  105. printf("avx512_ifma: %s // AVX-512 Integer Fused Multiply-Add Instructions\n", query_cpu_feature(&info, Ebx_7_Extended_Feature_Flags::avx512_ifma) ? "yes" : "no ");
  106. printf("pcommit: %s // PCOMMIT instruction\n", query_cpu_feature(&info, Ebx_7_Extended_Feature_Flags::pcommit) ? "yes" : "no ");
  107. printf("clflushopt: %s // CLFLUSHOPT instruction\n", query_cpu_feature(&info, Ebx_7_Extended_Feature_Flags::clflushopt) ? "yes" : "no ");
  108. printf("clwb: %s // CLWB instruction\n", query_cpu_feature(&info, Ebx_7_Extended_Feature_Flags::clwb) ? "yes" : "no ");
  109. printf("intel_pt: %s // Intel Processor Trace\n", query_cpu_feature(&info, Ebx_7_Extended_Feature_Flags::intel_pt) ? "yes" : "no ");
  110. printf("avx512_pf: %s // AVX-512 Prefetch Instructions\n", query_cpu_feature(&info, Ebx_7_Extended_Feature_Flags::avx512_pf) ? "yes" : "no ");
  111. printf("avx512_er: %s // AVX-512 Exponential and Reciprocal Instructions\n", query_cpu_feature(&info, Ebx_7_Extended_Feature_Flags::avx512_er) ? "yes" : "no ");
  112. printf("avx512_cd: %s // AVX-512 Conflict Detection Instructions\n", query_cpu_feature(&info, Ebx_7_Extended_Feature_Flags::avx512_cd) ? "yes" : "no ");
  113. printf("sha: %s // Intel SHA extensions\n", query_cpu_feature(&info, Ebx_7_Extended_Feature_Flags::sha) ? "yes" : "no ");
  114. printf("avx512_bw: %s // AVX-512 Byte and Word Instructions\n", query_cpu_feature(&info, Ebx_7_Extended_Feature_Flags::avx512_bw) ? "yes" : "no ");
  115. printf("avx512_vl: %s // AVX-512 Vector Length Extensions\n", query_cpu_feature(&info, Ebx_7_Extended_Feature_Flags::avx512_vl) ? "yes" : "no ");
  116. printf("----------------------------\n");
  117. printf("Ecx_7_Extended_Feature_Flags\n");
  118. printf("----------------------------\n");
  119. printf("prefetchwt1: %s // PREFETCHWT1 instruction\n", query_cpu_feature(&info, Ecx_7_Extended_Feature_Flags::prefetchwt1) ? "yes" : "no ");
  120. printf("avx512_vbmi: %s // AVX-512 Vector Bit Manipulation Instructions\n", query_cpu_feature(&info, Ecx_7_Extended_Feature_Flags::avx512_vbmi) ? "yes" : "no ");
  121. printf("umip: %s // User-mode Instruction Prevention\n", query_cpu_feature(&info, Ecx_7_Extended_Feature_Flags::umip) ? "yes" : "no ");
  122. printf("pku: %s // Memory Protection Keys for User-mode pages\n", query_cpu_feature(&info, Ecx_7_Extended_Feature_Flags::pku) ? "yes" : "no ");
  123. printf("ospke: %s // PKU enabled by OS\n", query_cpu_feature(&info, Ecx_7_Extended_Feature_Flags::ospke) ? "yes" : "no ");
  124. printf("waitpkg: %s // Timed pause and user-level monitor/wait\n", query_cpu_feature(&info, Ecx_7_Extended_Feature_Flags::waitpkg) ? "yes" : "no ");
  125. printf("avx512_vbmi2: %s // AVX-512 Vector Bit Manipulation Instructions 2\n", query_cpu_feature(&info, Ecx_7_Extended_Feature_Flags::avx512_vbmi2) ? "yes" : "no ");
  126. printf("cet_ss: %s // Control flow enforcement (CET) shadow stack\n", query_cpu_feature(&info, Ecx_7_Extended_Feature_Flags::cet_ss) ? "yes" : "no ");
  127. printf("gfni: %s // Galois Field instructions\n", query_cpu_feature(&info, Ecx_7_Extended_Feature_Flags::gfni) ? "yes" : "no ");
  128. printf("vaes: %s // Vector AES instruction set (VEX-256/EVEX)\n", query_cpu_feature(&info, Ecx_7_Extended_Feature_Flags::vaes) ? "yes" : "no ");
  129. printf("vpclmulqdq: %s // CLMUL instruction set (VEX-256/EVEX)\n", query_cpu_feature(&info, Ecx_7_Extended_Feature_Flags::vpclmulqdq) ? "yes" : "no ");
  130. printf("avx512_vnni: %s // AVX-512 Vector Neural Network Instructions\n", query_cpu_feature(&info, Ecx_7_Extended_Feature_Flags::avx512_vnni) ? "yes" : "no ");
  131. printf("avx512_bitalg: %s // AVX-512 BITALG instructions\n", query_cpu_feature(&info, Ecx_7_Extended_Feature_Flags::avx512_bitalg) ? "yes" : "no ");
  132. printf("_resv1: %s // (reserved)\n", query_cpu_feature(&info, Ecx_7_Extended_Feature_Flags::_resv1) ? "yes" : "no ");
  133. printf("avx512_vpopcntdq: %s // AVX-512 Vector Population Count Double and Quad-word\n", query_cpu_feature(&info, Ecx_7_Extended_Feature_Flags::avx512_vpopcntdq)? "yes" : "no ");
  134. printf("_resv2: %s // (reserved)\n", query_cpu_feature(&info, Ecx_7_Extended_Feature_Flags::_resv2) ? "yes" : "no ");
  135. printf("intel_5lp: %s // 5-level paging\n", query_cpu_feature(&info, Ecx_7_Extended_Feature_Flags::intel_5lp) ? "yes" : "no ");
  136. printf("mawau1: %s // The value of userspace MPX Address-Width Adjust used ...\n", query_cpu_feature(&info, Ecx_7_Extended_Feature_Flags::mawau1) ? "yes" : "no ");
  137. printf("mawau2: %s // ... by the BNDLDX and BNDSTX Intel MPX instructions ...\n", query_cpu_feature(&info, Ecx_7_Extended_Feature_Flags::mawau2) ? "yes" : "no ");
  138. printf("mawau3: %s // ... in 64-bit mode\n", query_cpu_feature(&info, Ecx_7_Extended_Feature_Flags::mawau3) ? "yes" : "no ");
  139. printf("mawau4: %s //\n", query_cpu_feature(&info, Ecx_7_Extended_Feature_Flags::mawau4) ? "yes" : "no ");
  140. printf("mawau5: %s //\n", query_cpu_feature(&info, Ecx_7_Extended_Feature_Flags::mawau5) ? "yes" : "no ");
  141. printf("rdpid: %s // Read Processor ID and IA32_TSC_AUX\n", query_cpu_feature(&info, Ecx_7_Extended_Feature_Flags::rdpid) ? "yes" : "no ");
  142. printf("_resv3: %s // (reserved)\n", query_cpu_feature(&info, Ecx_7_Extended_Feature_Flags::_resv3) ? "yes" : "no ");
  143. printf("_resv4: %s // (reserved)\n", query_cpu_feature(&info, Ecx_7_Extended_Feature_Flags::_resv4) ? "yes" : "no ");
  144. printf("cldemote: %s // Cache line demote\n", query_cpu_feature(&info, Ecx_7_Extended_Feature_Flags::cldemote) ? "yes" : "no ");
  145. printf("_resv5: %s // (reserved)\n", query_cpu_feature(&info, Ecx_7_Extended_Feature_Flags::_resv5) ? "yes" : "no ");
  146. printf("movdiri: %s //\n", query_cpu_feature(&info, Ecx_7_Extended_Feature_Flags::movdiri) ? "yes" : "no ");
  147. printf("movdir64b: %s //\n", query_cpu_feature(&info, Ecx_7_Extended_Feature_Flags::movdir64b) ? "yes" : "no ");
  148. printf("enqcmd: %s // Enqueue Stores\n", query_cpu_feature(&info, Ecx_7_Extended_Feature_Flags::enqcmd) ? "yes" : "no ");
  149. printf("sgx_lc: %s // SGX Launch Configuration\n", query_cpu_feature(&info, Ecx_7_Extended_Feature_Flags::sgx_lc) ? "yes" : "no ");
  150. printf("pks: %s // Protection keys for supervisor-mode pages\n", query_cpu_feature(&info, Ecx_7_Extended_Feature_Flags::pks) ? "yes" : "no ");
  151. printf("----------------------------\n");
  152. printf("Edx_7_Extended_Feature_Flags\n");
  153. printf("----------------------------\n");
  154. printf("_resv1: %s // (reserved)\n", query_cpu_feature(&info, Edx_7_Extended_Feature_Flags::_resv1) ? "yes" : "no ");
  155. printf("_resv2: %s // (reserved)\n", query_cpu_feature(&info, Edx_7_Extended_Feature_Flags::_resv2) ? "yes" : "no ");
  156. printf("avx512_4vnniw: %s // AVX-512 4-register Neural Network Instructions\n", query_cpu_feature(&info, Edx_7_Extended_Feature_Flags::avx512_4vnniw) ? "yes" : "no ");
  157. printf("avx512_4fmaps: %s // AVX-512 4-register Multiply Accumulation Single precision\n", query_cpu_feature(&info, Edx_7_Extended_Feature_Flags::avx512_4fmaps) ? "yes" : "no ");
  158. printf("fsrm: %s // Fast Short REP MOVSB\n", query_cpu_feature(&info, Edx_7_Extended_Feature_Flags::fsrm) ? "yes" : "no ");
  159. printf("_resv3: %s // (reserved)\n", query_cpu_feature(&info, Edx_7_Extended_Feature_Flags::_resv3) ? "yes" : "no ");
  160. printf("_resv4: %s // (reserved)\n", query_cpu_feature(&info, Edx_7_Extended_Feature_Flags::_resv4) ? "yes" : "no ");
  161. printf("_resv5: %s // (reserved)\n", query_cpu_feature(&info, Edx_7_Extended_Feature_Flags::_resv5) ? "yes" : "no ");
  162. printf("avx512_vp2intersect: %s // AVX-512 VP2INTERSECT Doubleword and Quadword Instructions\n", query_cpu_feature(&info, Edx_7_Extended_Feature_Flags::avx512_vp2intersect) ? "yes" : "no ");
  163. printf("SRBDS_CTRL: %s // Special Register Buffer Data Sampling Mitigations\n", query_cpu_feature(&info, Edx_7_Extended_Feature_Flags::SRBDS_CTRL) ? "yes" : "no ");
  164. printf("md_clear: %s // VERW instruction clears CPU buffers\n", query_cpu_feature(&info, Edx_7_Extended_Feature_Flags::md_clear) ? "yes" : "no ");
  165. printf("_resv6: %s // (reserved)\n", query_cpu_feature(&info, Edx_7_Extended_Feature_Flags::_resv6) ? "yes" : "no ");
  166. printf("_resv7: %s // (reserved)\n", query_cpu_feature(&info, Edx_7_Extended_Feature_Flags::_resv7) ? "yes" : "no ");
  167. printf("tsx_force_abort: %s //\n", query_cpu_feature(&info, Edx_7_Extended_Feature_Flags::tsx_force_abort) ? "yes" : "no ");
  168. printf("serialize: %s // Serialize instruction execution\n", query_cpu_feature(&info, Edx_7_Extended_Feature_Flags::serialize) ? "yes" : "no ");
  169. printf("hybrid: %s //\n", query_cpu_feature(&info, Edx_7_Extended_Feature_Flags::hybrid) ? "yes" : "no ");
  170. printf("TSXLDTRK: %s // TSX suspend load address tracking\n", query_cpu_feature(&info, Edx_7_Extended_Feature_Flags::TSXLDTRK) ? "yes" : "no ");
  171. printf("_resv8: %s // (reserved)\n", query_cpu_feature(&info, Edx_7_Extended_Feature_Flags::_resv8) ? "yes" : "no ");
  172. printf("pconfig: %s // Platform configuration (Memory Encryption Technologies Instructions)\n", query_cpu_feature(&info, Edx_7_Extended_Feature_Flags::pconfig) ? "yes" : "no ");
  173. printf("lbr: %s // Architectural Last Branch Records\n", query_cpu_feature(&info, Edx_7_Extended_Feature_Flags::lbr) ? "yes" : "no ");
  174. printf("cet_ibt: %s // Control flow enforcement (CET) indirect branch tracking\n", query_cpu_feature(&info, Edx_7_Extended_Feature_Flags::cet_ibt) ? "yes" : "no ");
  175. printf("_resv9: %s // (reserved)\n", query_cpu_feature(&info, Edx_7_Extended_Feature_Flags::_resv9) ? "yes" : "no ");
  176. printf("amx_bf16: %s // Tile computation on bfloat16 numbers\n", query_cpu_feature(&info, Edx_7_Extended_Feature_Flags::amx_bf16) ? "yes" : "no ");
  177. printf("_resv10: %s // (reserved)\n", query_cpu_feature(&info, Edx_7_Extended_Feature_Flags::_resv10) ? "yes" : "no ");
  178. printf("amx_tile: %s // Tile architecture\n", query_cpu_feature(&info, Edx_7_Extended_Feature_Flags::amx_tile) ? "yes" : "no ");
  179. printf("amx_int8: %s // Tile computation on 8-bit integers\n", query_cpu_feature(&info, Edx_7_Extended_Feature_Flags::amx_int8) ? "yes" : "no ");
  180. printf("spec_ctrl: %s // Speculation Control, part of Indirect Branch Control (IBC): Indirect Branch Restricted Speculation (IBRS) and Indirect Branch Prediction Barrier (IBPB)\n", query_cpu_feature(&info, Edx_7_Extended_Feature_Flags::spec_ctrl) ? "yes" : "no ");
  181. printf("stibp: %s // Single Thread Indirect Branch Predictor, part of IBC\n", query_cpu_feature(&info, Edx_7_Extended_Feature_Flags::stibp) ? "yes" : "no ");
  182. printf("l1d_flush: %s // IA32_FLUSH_CMD MSR\n", query_cpu_feature(&info, Edx_7_Extended_Feature_Flags::l1d_flush) ? "yes" : "no ");
  183. printf("ia32_arch_capabilities: %s // Speculative Side Channel Mitigations\n", query_cpu_feature(&info, Edx_7_Extended_Feature_Flags::ia32_arch_capabilities) ? "yes" : "no ");
  184. printf("ia32_core_capabilities: %s // Support for a MSR listing model-specific core capabilities\n", query_cpu_feature(&info, Edx_7_Extended_Feature_Flags::ia32_core_capabilities) ? "yes" : "no ");
  185. printf("ssbd: %s // Speculative Store Bypass Disable, as mitigation for Speculative Store Bypass (IA32_SPEC_CTRL)\n", query_cpu_feature(&info, Edx_7_Extended_Feature_Flags::ssbd) ? "yes" : "no ");
  186. printf("-----------------------------\n");
  187. printf("Ebx_81_Extended_Feature_Flags\n");
  188. printf("-----------------------------\n");
  189. printf("syscall: %s // SYSCALL and SYSRET instructions\n", query_cpu_feature(&info, Edx_81_Extended_Feature_Flags::syscall) ? "yes" : "no ");
  190. printf("mp: %s // Multiprocessor Capable\n", query_cpu_feature(&info, Edx_81_Extended_Feature_Flags::mp) ? "yes" : "no ");
  191. printf("nx: %s // NX (no-execute) bit\n", query_cpu_feature(&info, Edx_81_Extended_Feature_Flags::nx) ? "yes" : "no ");
  192. printf("mmxext: %s // Extended MMX\n", query_cpu_feature(&info, Edx_81_Extended_Feature_Flags::mmxext) ? "yes" : "no ");
  193. printf("fxsr_opt: %s // FXSAVE/FXRSTOR optimizations\n", query_cpu_feature(&info, Edx_81_Extended_Feature_Flags::fxsr_opt) ? "yes" : "no ");
  194. printf("pdpe1gb: %s // Gibibyte pages\n", query_cpu_feature(&info, Edx_81_Extended_Feature_Flags::pdpe1gb) ? "yes" : "no ");
  195. printf("rdtscp: %s // RDTSCP instruction\n", query_cpu_feature(&info, Edx_81_Extended_Feature_Flags::rdtscp) ? "yes" : "no ");
  196. printf("l1d_flush: %s // IA32_FLUSH_CMD MSR\n", query_cpu_feature(&info, Edx_81_Extended_Feature_Flags::l1d_flush) ? "yes" : "no ");
  197. printf("lm: %s // Long mode\n", query_cpu_feature(&info, Edx_81_Extended_Feature_Flags::lm) ? "yes" : "no ");
  198. printf("_3dnowext: %s // Extended 3DNow!\n", query_cpu_feature(&info, Edx_81_Extended_Feature_Flags::_3dnowext) ? "yes" : "no ");
  199. printf("_3dnow: %s // 3DNow!\n", query_cpu_feature(&info, Edx_81_Extended_Feature_Flags::_3dnow) ? "yes" : "no ");
  200. printf("-----------------------------\n");
  201. printf("Ecx_81_Extended_Feature_Flags\n");
  202. printf("-----------------------------\n");
  203. printf("lahf_lm: %s // LAHF/SAHF in long mode\n", query_cpu_feature(&info, Ecx_81_Extended_Feature_Flags::lahf_lm) ? "yes" : "no ");
  204. printf("cmp_legacy: %s // Hyperthreading not valid\n", query_cpu_feature(&info, Ecx_81_Extended_Feature_Flags::cmp_legacy) ? "yes" : "no ");
  205. printf("svm: %s // Secure Virtual Machine\n", query_cpu_feature(&info, Ecx_81_Extended_Feature_Flags::svm) ? "yes" : "no ");
  206. printf("extapic: %s // Extended APIC space\n", query_cpu_feature(&info, Ecx_81_Extended_Feature_Flags::extapic) ? "yes" : "no ");
  207. printf("cr8_legacy: %s // CR8 in 32-bit mode\n", query_cpu_feature(&info, Ecx_81_Extended_Feature_Flags::cr8_legacy) ? "yes" : "no ");
  208. printf("abm: %s // Advanced bit manipulation (lzcnt and popcnt)\n", query_cpu_feature(&info, Ecx_81_Extended_Feature_Flags::abm) ? "yes" : "no ");
  209. printf("sse4a: %s // SSE4a\n", query_cpu_feature(&info, Ecx_81_Extended_Feature_Flags::sse4a) ? "yes" : "no ");
  210. printf("misalignsse: %s // Misaligned SSE mode\n", query_cpu_feature(&info, Ecx_81_Extended_Feature_Flags::misalignsse) ? "yes" : "no ");
  211. printf("_3dnowprefetch: %s // PREFETCH and PREFETCHW instructions\n", query_cpu_feature(&info, Ecx_81_Extended_Feature_Flags::_3dnowprefetch) ? "yes" : "no ");
  212. printf("osvw: %s // OS Visible Workaround\n", query_cpu_feature(&info, Ecx_81_Extended_Feature_Flags::osvw) ? "yes" : "no ");
  213. printf("ibs: %s // Instruction Based Sampling\n", query_cpu_feature(&info, Ecx_81_Extended_Feature_Flags::ibs) ? "yes" : "no ");
  214. printf("xop: %s // XOP instruction set\n", query_cpu_feature(&info, Ecx_81_Extended_Feature_Flags::xop) ? "yes" : "no ");
  215. printf("skinit: %s // SKINIT/STGI instructions\n", query_cpu_feature(&info, Ecx_81_Extended_Feature_Flags::skinit) ? "yes" : "no ");
  216. printf("wdt: %s // Watchdog timer\n", query_cpu_feature(&info, Ecx_81_Extended_Feature_Flags::wdt) ? "yes" : "no ");
  217. printf("_resv1: %s // (reserved)\n", query_cpu_feature(&info, Ecx_81_Extended_Feature_Flags::_resv1) ? "yes" : "no ");
  218. printf("lwp: %s // Light Weight Profiling\n", query_cpu_feature(&info, Ecx_81_Extended_Feature_Flags::lwp) ? "yes" : "no ");
  219. printf("fma4: %s // 4 operands fused multiply-add\n", query_cpu_feature(&info, Ecx_81_Extended_Feature_Flags::fma4) ? "yes" : "no ");
  220. printf("tce: %s // Translation Cache Extension\n", query_cpu_feature(&info, Ecx_81_Extended_Feature_Flags::tce) ? "yes" : "no ");
  221. printf("_resv2: %s // (reserved)\n", query_cpu_feature(&info, Ecx_81_Extended_Feature_Flags::_resv2) ? "yes" : "no ");
  222. printf("nodeid_msr: %s // NodeID MSR\n", query_cpu_feature(&info, Ecx_81_Extended_Feature_Flags::nodeid_msr) ? "yes" : "no ");
  223. printf("_resv3: %s // (reserved)\n", query_cpu_feature(&info, Ecx_81_Extended_Feature_Flags::_resv3) ? "yes" : "no ");
  224. printf("tbm: %s // Trailing Bit Manipulation\n", query_cpu_feature(&info, Ecx_81_Extended_Feature_Flags::tbm) ? "yes" : "no ");
  225. printf("topoext: %s // opology Extensions\n", query_cpu_feature(&info, Ecx_81_Extended_Feature_Flags::topoext) ? "yes" : "no ");
  226. printf("perfctr_core: %s // Core performance counter extensions\n", query_cpu_feature(&info, Ecx_81_Extended_Feature_Flags::perfctr_core) ? "yes" : "no ");
  227. printf("perfctr_nb: %s // NB performance counter extensions\n", query_cpu_feature(&info, Ecx_81_Extended_Feature_Flags::perfctr_nb) ? "yes" : "no ");
  228. printf("_resv4: %s // (reserved)\n", query_cpu_feature(&info, Ecx_81_Extended_Feature_Flags::_resv4) ? "yes" : "no ");
  229. printf("dbx: %s // Data breakpoint extensions\n", query_cpu_feature(&info, Ecx_81_Extended_Feature_Flags::dbx) ? "yes" : "no ");
  230. printf("perftsc: %s // Performance TSC\n", query_cpu_feature(&info, Ecx_81_Extended_Feature_Flags::perftsc) ? "yes" : "no ");
  231. printf("pcx_l2i: %s // L2I perf counter extensions\n", query_cpu_feature(&info, Ecx_81_Extended_Feature_Flags::pcx_l2i) ? "yes" : "no ");
  232. printf("_resv5: %s // (reserved)\n", query_cpu_feature(&info, Ecx_81_Extended_Feature_Flags::_resv5) ? "yes" : "no ");
  233. printf("_resv6: %s // (reserved)\n", query_cpu_feature(&info, Ecx_81_Extended_Feature_Flags::_resv6) ? "yes" : "no ");
  234. printf("_resv7: %s // (reserved)\n", query_cpu_feature(&info, Ecx_81_Extended_Feature_Flags::_resv7) ? "yes" : "no ");
  235. }
  236. int main() {
  237. print_full_cpu_info();
  238. }