Como você detecta o tipo de arquitetura da CPU durante o tempo de execução com o GCC e o Inline ASM?
-
20-09-2019 - |
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;
}
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