Como você detecta o tipo de arquitetura da CPU durante o tempo de execução com o GCC e o Inline ASM?

StackOverflow https://stackoverflow.com/questions/1917761

Pergunta

Preciso encontrar o tipo de arquitetura de uma CPU. Não tenho acesso a /proc /cpuinfo, pois a máquina está executando o syslinux. Eu sei que existe uma maneira de fazer isso com o ASM embutido, no entanto, acredito que minha sintaxe está incorreta, pois minha variável IEDX não está sendo definida corretamente.

Estou morrendo junto com o ASM, e de modo algum um especialista. Se alguém tiver alguma dica ou me apontar na direção certa, eu seria muito obrigado.

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;
}
Foi útil?

Solução

Quantos bugs você pode caber em tão poucas linhas;)

Tentar

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;
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top