From c5da20e8e1177a57344a48232a8142405273ba22 Mon Sep 17 00:00:00 2001 From: The Tumultuous Unicorn Of Darkness Date: Tue, 22 Apr 2025 19:07:29 +0200 Subject: [PATCH] utils: add decode_cpuid_revision --- .gitignore | 3 ++- utils/decode_cpuid_revision.c | 31 +++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 utils/decode_cpuid_revision.c diff --git a/.gitignore b/.gitignore index 5f34a4c..152efe2 100644 --- a/.gitignore +++ b/.gitignore @@ -37,7 +37,8 @@ ipch libcpuid/x32 libcpuid/x64 cpuid_tool/x32 -cpuid_tool/x64 +cpuid_tool/ +utils/decode_cpuid_revision *.vcxproj.user build /docs diff --git a/utils/decode_cpuid_revision.c b/utils/decode_cpuid_revision.c new file mode 100644 index 0000000..ed153cd --- /dev/null +++ b/utils/decode_cpuid_revision.c @@ -0,0 +1,31 @@ +/* A simple tool to decode the "CPUID Revision". +Build with: +gcc decode_cpuid_revision.c -lcpuid -o decode_cpuid_revision +*/ +#include +#include +#include "../libcpuid/libcpuid.h" + +#define ANSWER_TO_THE_ULTIMATE_QUESTION_OF_LIFE_THE_UNIVERSE_AND_EVERYTHING 42 + + +int main(int argc, char** argv) +{ + struct cpu_raw_data_t raw; + struct cpu_id_t data; + + if (argc < 2) { + printf("%s: x86 CPUID Revision is required as argument.\n", argv[0]); + return 1; + } + raw.basic_cpuid[0][EAX] = ANSWER_TO_THE_ULTIMATE_QUESTION_OF_LIFE_THE_UNIVERSE_AND_EVERYTHING; + raw.basic_cpuid[1][EAX] = strtol(argv[1], NULL, 16); + cpu_identify(&raw, &data); + + printf("%s decoded to:\n", argv[1]); + printf(" family : %1$d (%1$02Xh)\n", data.x86.family); + printf(" model : %1$d (%1$02Xh)\n", data.x86.model); + printf(" stepping : %1$d (%1$02Xh)\n", data.x86.stepping); + printf(" ext_family : %1$d (%1$02Xh)\n", data.x86.ext_family); + printf(" ext_model : %1$d (%1$02Xh)\n", data.x86.ext_model); +}