どのようにGCCインラインアセンブラと実行時にCPUアーキテクチャのタイプを検出しますか?

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

質問

私は、CPUのアーキテクチャタイプを見つける必要があります。マシンはSYSLINUXを実行しているように私は、/ procの/ cpuinfoのにアクセスすることはできません。私は、しかし、私は私の変数iedxが正しく設定されていないとして、私の構文が間違っていると信じて、インラインASMでそれを行うための方法が存在しているはずます。

私はASMとともにdrudging、そして何で専門家を意味しています。誰もが任意のヒントを持っているか、正しい方向に私を指すことができれば、私はずっと義務となります。

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;
}
役に立ちましたか?

解決

あなたがそう数行に収まることができますどのように多くのバグ;)

試してみてください。

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;
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top