Created
November 12, 2013 07:34
-
-
Save pedrogk/7427009 to your computer and use it in GitHub Desktop.
Código para parsear la salida del comando cpuid y determinar las capacidades del procesador.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#define HT_FLAG 0x10000000 | |
#define SSE_FLAG 0x02000000 | |
#define SSE2_FLAG 0x04000000 | |
#define SSSE3_FLAG 0x00000200 | |
#define SSE4_1_FLAG 0x00080000 | |
#define SSE4_2_FLAG 0x00100000 | |
void cpuid(unsigned info, unsigned *eax, unsigned *ebx, unsigned *ecx, unsigned *edx) | |
{ | |
*eax = info; | |
asm volatile( | |
"mov %%ebx, %%edi;" | |
"cpuid;" | |
"mov %%ebx, %%esi;" | |
"mov %%edi, %%ebx;" | |
:"+a" (*eax), "=S" (*ebx), "=c" (*ecx), "=d" (*edx) | |
: :"edi"); | |
} | |
void cpuid_parse(char *buf) | |
{ | |
unsigned eax, ebx, ecx, edx; | |
int i=0; | |
cpuid(1, &eax, &ebx, &ecx, &edx); | |
i+=sprintf(buf+i, "CPUID Features(EAX=1): ECX=0x%08x EDX=0x%08x\n", ecx, edx); | |
if (edx & HT_FLAG) i+=sprintf(buf+i, "HT: YES\n"); else i+=sprintf(buf+i, "HT: NO\n"); | |
if (edx & SSE_FLAG) i+=sprintf(buf+i, "SSE: YES\n"); else i+=sprintf(buf+i, "SSE: NO\n"); | |
if (edx & SSE2_FLAG) i+=sprintf(buf+i, "SSE2: YES\n"); else i+=sprintf(buf+i, "SSE2: NO\n"); | |
if (ecx & SSSE3_FLAG) i+=sprintf(buf+i, "SSSE3: YES\n"); else i+=sprintf(buf+i, "SSE3: NO\n"); | |
if (ecx & SSE4_1_FLAG) i+=sprintf(buf+i, "SSE4_1: YES\n"); else i+=sprintf(buf+i, "SSE4_1: NO\n"); | |
if (ecx & SSE4_2_FLAG) i+=sprintf(buf+i, "SSE4_2: YES\n"); else i+=sprintf(buf+i, "SSE4_2: NO\n"); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment