forked from OSchip/llvm-project
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
This commit is contained in:
parent
c18b36625e
commit
12fb89ec51
|
@ -53,6 +53,7 @@ void __addfsword(unsigned long, unsigned short);
|
||||||
void __code_seg(const char *);
|
void __code_seg(const char *);
|
||||||
static __inline__
|
static __inline__
|
||||||
void __cpuid(int[4], int);
|
void __cpuid(int[4], int);
|
||||||
|
static __inline__
|
||||||
void __cpuidex(int[4], int, int);
|
void __cpuidex(int[4], int, int);
|
||||||
void __debugbreak(void);
|
void __debugbreak(void);
|
||||||
__int64 __emul(int, int);
|
__int64 __emul(int, int);
|
||||||
|
@ -876,14 +877,13 @@ _ReturnAddress(void) {
|
||||||
}
|
}
|
||||||
static __inline__ void __attribute__((__always_inline__, __nodebug__))
|
static __inline__ void __attribute__((__always_inline__, __nodebug__))
|
||||||
__cpuid(int __info[4], int __level) {
|
__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])
|
__asm__ ("cpuid" : "=a"(__info[0]), "=b" (__info[1]), "=c"(__info[2]), "=d"(__info[3])
|
||||||
: "0"(__level));
|
: "a"(__level));
|
||||||
#endif
|
}
|
||||||
|
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__))
|
static __inline__ unsigned __int64 __cdecl __attribute__((__always_inline__, __nodebug__))
|
||||||
_xgetbv(unsigned int __xcr_no) {
|
_xgetbv(unsigned int __xcr_no) {
|
||||||
|
|
Loading…
Reference in New Issue