diff options
author | Reid Kleckner <reid@kleckner.net> | 2013-08-16 22:42:42 +0000 |
---|---|---|
committer | Reid Kleckner <reid@kleckner.net> | 2013-08-16 22:42:42 +0000 |
commit | bf4f9ebb9f40857b6afe783f51d6c68a67c90ff6 (patch) | |
tree | 3ddaa91e926cb102afd83029b853ac8b128e760d /llvm | |
parent | 627d8314a9db83796e8ef702ac832a4d70301632 (diff) | |
download | bcm5719-llvm-bf4f9ebb9f40857b6afe783f51d6c68a67c90ff6.tar.gz bcm5719-llvm-bf4f9ebb9f40857b6afe783f51d6c68a67c90ff6.zip |
Actually, use GNU inline asm for cpuid with clang
Clang doesn't support the MSVC __cpuid intrinsic yet, and fixing that is
blocked on some fairly complicated issues.
llvm-svn: 188584
Diffstat (limited to 'llvm')
-rw-r--r-- | llvm/lib/Support/Host.cpp | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/llvm/lib/Support/Host.cpp b/llvm/lib/Support/Host.cpp index 9360cb979f7..ad0ac93b6bd 100644 --- a/llvm/lib/Support/Host.cpp +++ b/llvm/lib/Support/Host.cpp @@ -54,16 +54,7 @@ using namespace llvm; /// specified arguments. If we can't run cpuid on the host, return true. static bool GetX86CpuIDAndInfo(unsigned value, unsigned *rEAX, unsigned *rEBX, unsigned *rECX, unsigned *rEDX) { -#if defined(_MSC_VER) - // The MSVC intrinsic is portable across x86 and x64. - int registers[4]; - __cpuid(registers, value); - *rEAX = registers[0]; - *rEBX = registers[1]; - *rECX = registers[2]; - *rEDX = registers[3]; - return false; -#elif defined(__GNUC__) +#if defined(__GNUC__) || defined(__clang__) #if defined(__x86_64__) || defined(_M_AMD64) || defined (_M_X64) // gcc doesn't know cpuid would clobber ebx/rbx. Preseve it manually. asm ("movq\t%%rbx, %%rsi\n\t" @@ -90,6 +81,15 @@ static bool GetX86CpuIDAndInfo(unsigned value, unsigned *rEAX, unsigned *rEBX, #else return true; #endif +#elif defined(_MSC_VER) + // The MSVC intrinsic is portable across x86 and x64. + int registers[4]; + __cpuid(registers, value); + *rEAX = registers[0]; + *rEBX = registers[1]; + *rECX = registers[2]; + *rEDX = registers[3]; + return false; #else return true; #endif |