How do you detect the CPU architecture type during run-time with GCC and inline asm?

3

I need to find the architecture type of a CPU. I do not have access to /proc/cpuinfo, as the machine is running syslinux. I know there is a way to do it with inline ASM, however I believe my syntax is incorrect as my variable iedx is not being set properly.

I'm drudging along with ASM, and by no means an expert. If anyone has any tips or can point me in the right direction, I would be much obliged.

static int is64Bit(void) {
    int iedx = 0;
    asm("mov %eax, 0x80000001");
    asm("cpuid");
    asm("mov %0, %%eax" : : "a" (iedx));
    if ((iedx) && (1 << 29))
    {
        return 1;
    }
    return 0;
}
c
gcc
cpu
detection
inline-assembly
asked on Stack Overflow Dec 16, 2009 by Jared Jensen • edited Jun 21, 2018 by melpomene

1 Answer

6

How many bugs can you fit in so few lines ;)

Try

static int is64bit(void) {
        int iedx = 0;
        asm volatile ("movl $0x80000001, %%eax\n"
                "cpuid\n"
        : "=d"(iedx)
        : /* No Inputs */
        : "eax", "ebx", "ecx"
        );

        if(iedx & (1 << 29))
        {
                return 1;
        }
        return 0;
}
answered on Stack Overflow Dec 16, 2009 by tyranid • edited Jun 21, 2018 by Peter Cordes

User contributions licensed under CC BY-SA 3.0