New Project Libicuid
Published: Estimated Reading Time: ~1 minute
The cpuid instruction recently caught my interest and I decided to write a library libicuid that gathers and decodes all the information it outputs. It provides a C interface that is compatible with C++ programs, is written in C and Assembly, and supports all major compilers GCC, Clang, and Microsoft Visual Studio. I licensed it under the ISC License which is functionally equivalent to the BSD 2-Clause License. You can visit its homepage here.
Example C program code:
#include <stdio.h>
#include <icuid/icuid.h>
int main(int argc, char **argv)
{
    int ret = -1;
    cpuid_raw_data_t raw;
    cpuid_data_t data;
    ret = cpuid_get_raw_data(&raw);
    if (ret != ICUID_OK) {
        printf("%s\n", icuid_errorstr(ret));
        return ret;
    }
    ret = icuid_identify(&raw, &data);
    if (ret != ICUID_OK) {
        printf("%s\n", icuid_errorstr(ret));
        return ret;
    }
    printf("Vendor: %s\n", data.vendor_str);
    printf("CPU: %s\n", data.brand_str);
    printf("Codename: %s\n", data.codename);
    printf("Cores: %u\n", data.cores);
    printf("Logical: %u\n", data.logical_cpus);
   if (data.flags[CPU_FEATURE_AVX])
       printf("CPU Supports AVX\n");
   return ret;
}