Come si fa a rilevare il tipo di architettura della CPU durante il run-time con GCC e asm inline?

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

Domanda

Ho bisogno di trovare il tipo di architettura di una CPU. Non ho accesso a / proc / cpuinfo, in quanto la macchina è in funzione syslinux. So che c'è un modo per farlo con inline, tuttavia credo che la mia sintassi non è corretta come il mio iedx variabile non è stato impostato correttamente.

Sono drudging insieme a ASM, e per nulla un esperto. Se qualcuno ha qualche consiglio o mi può puntare nella direzione giusta, sarei molto obbligato.

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;
}
È stato utile?

Soluzione

Quanti bug che può andare bene in così poche righe;)

Prova

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;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top