diff --git a/Sources/Core/CpuID.cpp b/Sources/Core/CpuID.cpp index a4b92ab1c..53d0726fc 100644 --- a/Sources/Core/CpuID.cpp +++ b/Sources/Core/CpuID.cpp @@ -16,6 +16,11 @@ namespace spades { std::array regs; #ifdef WIN32 __cpuid(reinterpret_cast(regs.data()), a); +#else +#if defined(__i386__) && (defined(__pic__) || defined(__PIC__)) + asm volatile("mov %%ebx, %%edi\ncpuid\nxchg %%edi, %%ebx\n" + : "=a"(regs[0]), "=D"(regs[1]), "=c"(regs[2]), "=d"(regs[2]) + : "a"(a), "c"(0)); #else asm volatile("cpuid" : "=a"(regs[0]), "=b"(regs[1]), "=c"(regs[2]), "=d"(regs[3])