25 #define bit_SSE3 (1 << 0)
26 #define bit_PCLMUL (1 << 1)
27 #define bit_SSSE3 (1 << 9)
28 #define bit_FMA (1 << 12)
29 #define bit_CMPXCHG16B (1 << 13)
30 #define bit_SSE4_1 (1 << 19)
31 #define bit_SSE4_2 (1 << 20)
32 #define bit_MOVBE (1 << 22)
33 #define bit_POPCNT (1 << 23)
34 #define bit_AES (1 << 25)
35 #define bit_XSAVE (1 << 26)
36 #define bit_OSXSAVE (1 << 27)
37 #define bit_AVX (1 << 28)
38 #define bit_F16C (1 << 29)
39 #define bit_RDRND (1 << 30)
42 #define bit_CMPXCHG8B (1 << 8)
43 #define bit_CMOV (1 << 15)
44 #define bit_MMX (1 << 23)
45 #define bit_FXSAVE (1 << 24)
46 #define bit_SSE (1 << 25)
47 #define bit_SSE2 (1 << 26)
51 #define bit_LAHF_LM (1 << 0)
52 #define bit_ABM (1 << 5)
53 #define bit_SSE4a (1 << 6)
54 #define bit_XOP (1 << 11)
55 #define bit_LWP (1 << 15)
56 #define bit_FMA4 (1 << 16)
57 #define bit_TBM (1 << 21)
60 #define bit_MMXEXT (1 << 22)
61 #define bit_LM (1 << 29)
62 #define bit_3DNOWP (1 << 30)
63 #define bit_3DNOW (1 << 31)
66 #define bit_FSGSBASE (1 << 0)
67 #define bit_BMI (1 << 3)
69 #if defined(__i386__) && defined(__PIC__)
72 #define __cpuid(level, a, b, c, d) \
73 __asm__ ("xchg{l}\t{%%}ebx, %1\n\t" \
75 "xchg{l}\t{%%}ebx, %1\n\t" \
76 : "=a" (a), "=r" (b), "=c" (c), "=d" (d) \
79 #define __cpuid_count(level, count, a, b, c, d) \
80 __asm__ ("xchg{l}\t{%%}ebx, %1\n\t" \
82 "xchg{l}\t{%%}ebx, %1\n\t" \
83 : "=a" (a), "=r" (b), "=c" (c), "=d" (d) \
84 : "0" (level), "2" (count))
88 #define __cpuid(level, a, b, c, d) \
89 __asm__ ("xchgl\t%%ebx, %1\n\t" \
91 "xchgl\t%%ebx, %1\n\t" \
92 : "=a" (a), "=r" (b), "=c" (c), "=d" (d) \
95 #define __cpuid_count(level, count, a, b, c, d) \
96 __asm__ ("xchgl\t%%ebx, %1\n\t" \
98 "xchgl\t%%ebx, %1\n\t" \
99 : "=a" (a), "=r" (b), "=c" (c), "=d" (d) \
100 : "0" (level), "2" (count))
103 #define __cpuid(level, a, b, c, d) \
104 __asm__ ("cpuid\n\t" \
105 : "=a" (a), "=b" (b), "=c" (c), "=d" (d) \
108 #define __cpuid_count(level, count, a, b, c, d) \
109 __asm__ ("cpuid\n\t" \
110 : "=a" (a), "=b" (b), "=c" (c), "=d" (d) \
111 : "0" (level), "2" (count))
121 static __inline
unsigned int
124 unsigned int __eax, __ebx, __ecx, __edx;
129 __asm__ (
"pushf{l|d}\n\t"
132 "mov{l}\t{%0, %1|%1, %0}\n\t"
133 "xor{l}\t{%2, %0|%0, %2}\n\t"
139 :
"=&r" (__eax),
"=&r" (__ebx)
144 __asm__ (
"pushfl\n\t"
154 :
"=&r" (__eax),
"=&r" (__ebx)
158 if (!((__eax ^ __ebx) & 0x00200000))
163 __cpuid (__ext, __eax, __ebx, __ecx, __edx);
178 unsigned int *__eax,
unsigned int *__ebx,
179 unsigned int *__ecx,
unsigned int *__edx)
181 unsigned int __ext = __level & 0x80000000;
186 __cpuid (__level, *__eax, *__ebx, *__ecx, *__edx);
static __inline unsigned int __get_cpuid_max(unsigned int __ext, unsigned int *__sig)
Definition: gcc_x86_cpuid.h:122
static __inline int __get_cpuid(unsigned int __level, unsigned int *__eax, unsigned int *__ebx, unsigned int *__ecx, unsigned int *__edx)
Definition: gcc_x86_cpuid.h:177
#define __cpuid(level, a, b, c, d)
Definition: gcc_x86_cpuid.h:103