summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorHans Wennborg <hans@hanshq.net>2014-01-31 19:44:55 +0000
committerHans Wennborg <hans@hanshq.net>2014-01-31 19:44:55 +0000
commit12fb89ec519371bcf3024c9b50a7338f6cb91e88 (patch)
tree6c7ff5203b1a4dd7ac9aef575976b726aca87ec1 /clang/lib
parentc18b36625ef3bd04bb8af9860c20ce219c0e1814 (diff)
downloadbcm5719-llvm-12fb89ec519371bcf3024c9b50a7338f6cb91e88.tar.gz
bcm5719-llvm-12fb89ec519371bcf3024c9b50a7338f6cb91e88.zip
MS Intrin.h: implement __cpuidex and simplify __cpuid
The two identical implementations of __cpuid for X86 / X86_64 were leftovers from my first iteration on the patch that implemented it. llvm-svn: 200568
Diffstat (limited to 'clang/lib')
-rw-r--r--clang/lib/Headers/Intrin.h14
1 files changed, 7 insertions, 7 deletions
diff --git a/clang/lib/Headers/Intrin.h b/clang/lib/Headers/Intrin.h
index 6fd1eeb3739..3bb304a3115 100644
--- a/clang/lib/Headers/Intrin.h
+++ b/clang/lib/Headers/Intrin.h
@@ -53,6 +53,7 @@ void __addfsword(unsigned long, unsigned short);
void __code_seg(const char *);
static __inline__
void __cpuid(int[4], int);
+static __inline__
void __cpuidex(int[4], int, int);
void __debugbreak(void);
__int64 __emul(int, int);
@@ -876,14 +877,13 @@ _ReturnAddress(void) {
}
static __inline__ void __attribute__((__always_inline__, __nodebug__))
__cpuid(int __info[4], int __level) {
-#if __i386__
- __asm__ ("cpuid"
- : "=a"(__info[0]), "=b" (__info[1]), "=c"(__info[2]), "=d"(__info[3])
- : "0"(__level));
-#else
__asm__ ("cpuid" : "=a"(__info[0]), "=b" (__info[1]), "=c"(__info[2]), "=d"(__info[3])
- : "0"(__level));
-#endif
+ : "a"(__level));
+}
+static __inline__ void __attribute__((__always_inline__, __nodebug__))
+__cpuidex(int __info[4], int __level, int __ecx) {
+ __asm__ ("cpuid" : "=a"(__info[0]), "=b" (__info[1]), "=c"(__info[2]), "=d"(__info[3])
+ : "a"(__level), "c"(__ecx));
}
static __inline__ unsigned __int64 __cdecl __attribute__((__always_inline__, __nodebug__))
_xgetbv(unsigned int __xcr_no) {
OpenPOWER on IntegriCloud