Imported GCC fix for cpuid function
parent
03fa21464f
commit
47d3a8dffe
|
@ -49,12 +49,28 @@ static float sinc(float x)
|
||||||
static inline void
|
static inline void
|
||||||
__cpuid(int *data, int selector)
|
__cpuid(int *data, int selector)
|
||||||
{
|
{
|
||||||
|
#if defined(__PIC__) && defined(__i386__)
|
||||||
|
asm("xchgl %%ebx, %%esi; cpuid; xchgl %%ebx, %%esi"
|
||||||
|
: "=a" (data[0]),
|
||||||
|
"=S" (data[1]),
|
||||||
|
"=c" (data[2]),
|
||||||
|
"=d" (data[3])
|
||||||
|
: "0" (selector));
|
||||||
|
#elif defined(__PIC__) && defined(__amd64__)
|
||||||
|
asm("xchg{q} {%%}rbx, %q1; cpuid; xchg{q} {%%}rbx, %q1"
|
||||||
|
: "=a" (data[0]),
|
||||||
|
"=&r" (data[1]),
|
||||||
|
"=c" (data[2]),
|
||||||
|
"=d" (data[3])
|
||||||
|
: "0" (selector));
|
||||||
|
#else
|
||||||
asm("cpuid"
|
asm("cpuid"
|
||||||
: "=a" (data[0]),
|
: "=a" (data[0]),
|
||||||
"=b" (data[1]),
|
"=b" (data[1]),
|
||||||
"=c" (data[2]),
|
"=c" (data[2]),
|
||||||
"=d" (data[3])
|
"=d" (data[3])
|
||||||
: "a"(selector));
|
: "0" (selector));
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
#define __cpuid(a,b) memset((a), 0, sizeof(int) * 4)
|
#define __cpuid(a,b) memset((a), 0, sizeof(int) * 4)
|
||||||
|
|
|
@ -49,12 +49,28 @@ static float sinc(float x)
|
||||||
static inline void
|
static inline void
|
||||||
__cpuid(int *data, int selector)
|
__cpuid(int *data, int selector)
|
||||||
{
|
{
|
||||||
|
#if defined(__PIC__) && defined(__i386__)
|
||||||
|
asm("xchgl %%ebx, %%esi; cpuid; xchgl %%ebx, %%esi"
|
||||||
|
: "=a" (data[0]),
|
||||||
|
"=S" (data[1]),
|
||||||
|
"=c" (data[2]),
|
||||||
|
"=d" (data[3])
|
||||||
|
: "0" (selector));
|
||||||
|
#elif defined(__PIC__) && defined(__amd64__)
|
||||||
|
asm("xchg{q} {%%}rbx, %q1; cpuid; xchg{q} {%%}rbx, %q1"
|
||||||
|
: "=a" (data[0]),
|
||||||
|
"=&r" (data[1]),
|
||||||
|
"=c" (data[2]),
|
||||||
|
"=d" (data[3])
|
||||||
|
: "0" (selector));
|
||||||
|
#else
|
||||||
asm("cpuid"
|
asm("cpuid"
|
||||||
: "=a" (data[0]),
|
: "=a" (data[0]),
|
||||||
"=b" (data[1]),
|
"=b" (data[1]),
|
||||||
"=c" (data[2]),
|
"=c" (data[2]),
|
||||||
"=d" (data[3])
|
"=d" (data[3])
|
||||||
: "a"(selector));
|
: "0" (selector));
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
#define __cpuid(a,b) memset((a), 0, sizeof(int) * 4)
|
#define __cpuid(a,b) memset((a), 0, sizeof(int) * 4)
|
||||||
|
|
|
@ -49,12 +49,28 @@ static float sinc(float x)
|
||||||
static inline void
|
static inline void
|
||||||
__cpuid(int *data, int selector)
|
__cpuid(int *data, int selector)
|
||||||
{
|
{
|
||||||
|
#if defined(__PIC__) && defined(__i386__)
|
||||||
|
asm("xchgl %%ebx, %%esi; cpuid; xchgl %%ebx, %%esi"
|
||||||
|
: "=a" (data[0]),
|
||||||
|
"=S" (data[1]),
|
||||||
|
"=c" (data[2]),
|
||||||
|
"=d" (data[3])
|
||||||
|
: "0" (selector));
|
||||||
|
#elif defined(__PIC__) && defined(__amd64__)
|
||||||
|
asm("xchg{q} {%%}rbx, %q1; cpuid; xchg{q} {%%}rbx, %q1"
|
||||||
|
: "=a" (data[0]),
|
||||||
|
"=&r" (data[1]),
|
||||||
|
"=c" (data[2]),
|
||||||
|
"=d" (data[3])
|
||||||
|
: "0" (selector));
|
||||||
|
#else
|
||||||
asm("cpuid"
|
asm("cpuid"
|
||||||
: "=a" (data[0]),
|
: "=a" (data[0]),
|
||||||
"=b" (data[1]),
|
"=b" (data[1]),
|
||||||
"=c" (data[2]),
|
"=c" (data[2]),
|
||||||
"=d" (data[3])
|
"=d" (data[3])
|
||||||
: "a"(selector));
|
: "0" (selector));
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
#define __cpuid(a,b) memset((a), 0, sizeof(int) * 4)
|
#define __cpuid(a,b) memset((a), 0, sizeof(int) * 4)
|
||||||
|
|
Loading…
Reference in New Issue