STLdoc
STLdocumentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Macros | Functions
cpuid.h File Reference

Go to the source code of this file.

Macros

#define bit_SSE3   (1 << 0)
 
#define bit_PCLMUL   (1 << 1)
 
#define bit_LZCNT   (1 << 5)
 
#define bit_SSSE3   (1 << 9)
 
#define bit_FMA   (1 << 12)
 
#define bit_CMPXCHG16B   (1 << 13)
 
#define bit_SSE4_1   (1 << 19)
 
#define bit_SSE4_2   (1 << 20)
 
#define bit_MOVBE   (1 << 22)
 
#define bit_POPCNT   (1 << 23)
 
#define bit_AES   (1 << 25)
 
#define bit_XSAVE   (1 << 26)
 
#define bit_OSXSAVE   (1 << 27)
 
#define bit_AVX   (1 << 28)
 
#define bit_F16C   (1 << 29)
 
#define bit_RDRND   (1 << 30)
 
#define bit_CMPXCHG8B   (1 << 8)
 
#define bit_CMOV   (1 << 15)
 
#define bit_MMX   (1 << 23)
 
#define bit_FXSAVE   (1 << 24)
 
#define bit_SSE   (1 << 25)
 
#define bit_SSE2   (1 << 26)
 
#define bit_LAHF_LM   (1 << 0)
 
#define bit_ABM   (1 << 5)
 
#define bit_SSE4a   (1 << 6)
 
#define bit_PRFCHW   (1 << 8)
 
#define bit_XOP   (1 << 11)
 
#define bit_LWP   (1 << 15)
 
#define bit_FMA4   (1 << 16)
 
#define bit_TBM   (1 << 21)
 
#define bit_MMXEXT   (1 << 22)
 
#define bit_LM   (1 << 29)
 
#define bit_3DNOWP   (1 << 30)
 
#define bit_3DNOW   (1 << 31)
 
#define bit_FSGSBASE   (1 << 0)
 
#define bit_BMI   (1 << 3)
 
#define bit_HLE   (1 << 4)
 
#define bit_AVX2   (1 << 5)
 
#define bit_BMI2   (1 << 8)
 
#define bit_RTM   (1 << 11)
 
#define bit_RDSEED   (1 << 18)
 
#define bit_ADX   (1 << 19)
 
#define bit_XSAVEOPT   (1 << 0)
 
#define signature_AMD_ebx   0x68747541
 
#define signature_AMD_ecx   0x444d4163
 
#define signature_AMD_edx   0x69746e65
 
#define signature_CENTAUR_ebx   0x746e6543
 
#define signature_CENTAUR_ecx   0x736c7561
 
#define signature_CENTAUR_edx   0x48727561
 
#define signature_CYRIX_ebx   0x69727943
 
#define signature_CYRIX_ecx   0x64616574
 
#define signature_CYRIX_edx   0x736e4978
 
#define signature_INTEL_ebx   0x756e6547
 
#define signature_INTEL_ecx   0x6c65746e
 
#define signature_INTEL_edx   0x49656e69
 
#define signature_TM1_ebx   0x6e617254
 
#define signature_TM1_ecx   0x55504361
 
#define signature_TM1_edx   0x74656d73
 
#define signature_TM2_ebx   0x756e6547
 
#define signature_TM2_ecx   0x3638784d
 
#define signature_TM2_edx   0x54656e69
 
#define signature_NSC_ebx   0x646f6547
 
#define signature_NSC_ecx   0x43534e20
 
#define signature_NSC_edx   0x79622065
 
#define signature_NEXGEN_ebx   0x4778654e
 
#define signature_NEXGEN_ecx   0x6e657669
 
#define signature_NEXGEN_edx   0x72446e65
 
#define signature_RISE_ebx   0x65736952
 
#define signature_RISE_ecx   0x65736952
 
#define signature_RISE_edx   0x65736952
 
#define signature_SIS_ebx   0x20536953
 
#define signature_SIS_ecx   0x20536953
 
#define signature_SIS_edx   0x20536953
 
#define signature_UMC_ebx   0x20434d55
 
#define signature_UMC_ecx   0x20434d55
 
#define signature_UMC_edx   0x20434d55
 
#define signature_VIA_ebx   0x20414956
 
#define signature_VIA_ecx   0x20414956
 
#define signature_VIA_edx   0x20414956
 
#define signature_VORTEX_ebx   0x74726f56
 
#define signature_VORTEX_ecx   0x436f5320
 
#define signature_VORTEX_edx   0x36387865
 
#define __cpuid(level, a, b, c, d)
 
#define __cpuid_count(level, count, a, b, c, d)
 

Functions

static __inline unsigned int __get_cpuid_max (unsigned int __ext, unsigned int *__sig)
 
static __inline int __get_cpuid (unsigned int __level, unsigned int *__eax, unsigned int *__ebx, unsigned int *__ecx, unsigned int *__edx)
 

Macro Definition Documentation

#define __cpuid (   level,
  a,
  b,
  c,
 
)
Value:
__asm__ ("cpuid\n\t" \
: "=a" (a), "=b" (b), "=c" (c), "=d" (d) \
: "0" (level))
#define __cpuid_count (   level,
  count,
  a,
  b,
  c,
 
)
Value:
__asm__ ("cpuid\n\t" \
: "=a" (a), "=b" (b), "=c" (c), "=d" (d) \
: "0" (level), "2" (count))
#define bit_3DNOW   (1 << 31)
#define bit_3DNOWP   (1 << 30)
#define bit_ABM   (1 << 5)
#define bit_ADX   (1 << 19)
#define bit_AES   (1 << 25)
#define bit_AVX   (1 << 28)
#define bit_AVX2   (1 << 5)
#define bit_BMI   (1 << 3)
#define bit_BMI2   (1 << 8)
#define bit_CMOV   (1 << 15)
#define bit_CMPXCHG16B   (1 << 13)
#define bit_CMPXCHG8B   (1 << 8)
#define bit_F16C   (1 << 29)
#define bit_FMA   (1 << 12)
#define bit_FMA4   (1 << 16)
#define bit_FSGSBASE   (1 << 0)
#define bit_FXSAVE   (1 << 24)
#define bit_HLE   (1 << 4)
#define bit_LAHF_LM   (1 << 0)
#define bit_LM   (1 << 29)
#define bit_LWP   (1 << 15)
#define bit_LZCNT   (1 << 5)
#define bit_MMX   (1 << 23)
#define bit_MMXEXT   (1 << 22)
#define bit_MOVBE   (1 << 22)
#define bit_OSXSAVE   (1 << 27)
#define bit_PCLMUL   (1 << 1)
#define bit_POPCNT   (1 << 23)
#define bit_PRFCHW   (1 << 8)
#define bit_RDRND   (1 << 30)
#define bit_RDSEED   (1 << 18)
#define bit_RTM   (1 << 11)
#define bit_SSE   (1 << 25)
#define bit_SSE2   (1 << 26)
#define bit_SSE3   (1 << 0)
#define bit_SSE4_1   (1 << 19)
#define bit_SSE4_2   (1 << 20)
#define bit_SSE4a   (1 << 6)
#define bit_SSSE3   (1 << 9)
#define bit_TBM   (1 << 21)
#define bit_XOP   (1 << 11)
#define bit_XSAVE   (1 << 26)
#define bit_XSAVEOPT   (1 << 0)
#define signature_AMD_ebx   0x68747541
#define signature_AMD_ecx   0x444d4163
#define signature_AMD_edx   0x69746e65
#define signature_CENTAUR_ebx   0x746e6543
#define signature_CENTAUR_ecx   0x736c7561
#define signature_CENTAUR_edx   0x48727561
#define signature_CYRIX_ebx   0x69727943
#define signature_CYRIX_ecx   0x64616574
#define signature_CYRIX_edx   0x736e4978
#define signature_INTEL_ebx   0x756e6547
#define signature_INTEL_ecx   0x6c65746e
#define signature_INTEL_edx   0x49656e69
#define signature_NEXGEN_ebx   0x4778654e
#define signature_NEXGEN_ecx   0x6e657669
#define signature_NEXGEN_edx   0x72446e65
#define signature_NSC_ebx   0x646f6547
#define signature_NSC_ecx   0x43534e20
#define signature_NSC_edx   0x79622065
#define signature_RISE_ebx   0x65736952
#define signature_RISE_ecx   0x65736952
#define signature_RISE_edx   0x65736952
#define signature_SIS_ebx   0x20536953
#define signature_SIS_ecx   0x20536953
#define signature_SIS_edx   0x20536953
#define signature_TM1_ebx   0x6e617254
#define signature_TM1_ecx   0x55504361
#define signature_TM1_edx   0x74656d73
#define signature_TM2_ebx   0x756e6547
#define signature_TM2_ecx   0x3638784d
#define signature_TM2_edx   0x54656e69
#define signature_UMC_ebx   0x20434d55
#define signature_UMC_ecx   0x20434d55
#define signature_UMC_edx   0x20434d55
#define signature_VIA_ebx   0x20414956
#define signature_VIA_ecx   0x20414956
#define signature_VIA_edx   0x20414956
#define signature_VORTEX_ebx   0x74726f56
#define signature_VORTEX_ecx   0x436f5320
#define signature_VORTEX_edx   0x36387865

Function Documentation

static __inline int __get_cpuid ( unsigned int  __level,
unsigned int *  __eax,
unsigned int *  __ebx,
unsigned int *  __ecx,
unsigned int *  __edx 
)
static
260 {
261  unsigned int __ext = __level & 0x80000000;
262 
263  if (__get_cpuid_max (__ext, 0) < __level)
264  return 0;
265 
266  __cpuid (__level, *__eax, *__ebx, *__ecx, *__edx);
267  return 1;
268 }
#define __cpuid(level, a, b, c, d)
Definition: cpuid.h:183
static __inline unsigned int __get_cpuid_max(unsigned int __ext, unsigned int *__sig)
Definition: cpuid.h:202
static __inline unsigned int __get_cpuid_max ( unsigned int  __ext,
unsigned int *  __sig 
)
static
203 {
204  unsigned int __eax, __ebx, __ecx, __edx;
205 
206 #ifndef __x86_64__
207  /* See if we can use cpuid. On AMD64 we always can. */
208 #if __GNUC__ >= 3
209  __asm__ ("pushf{l|d}\n\t"
210  "pushf{l|d}\n\t"
211  "pop{l}\t%0\n\t"
212  "mov{l}\t{%0, %1|%1, %0}\n\t"
213  "xor{l}\t{%2, %0|%0, %2}\n\t"
214  "push{l}\t%0\n\t"
215  "popf{l|d}\n\t"
216  "pushf{l|d}\n\t"
217  "pop{l}\t%0\n\t"
218  "popf{l|d}\n\t"
219  : "=&r" (__eax), "=&r" (__ebx)
220  : "i" (0x00200000));
221 #else
222 /* Host GCCs older than 3.0 weren't supporting Intel asm syntax
223  nor alternatives in i386 code. */
224  __asm__ ("pushfl\n\t"
225  "pushfl\n\t"
226  "popl\t%0\n\t"
227  "movl\t%0, %1\n\t"
228  "xorl\t%2, %0\n\t"
229  "pushl\t%0\n\t"
230  "popfl\n\t"
231  "pushfl\n\t"
232  "popl\t%0\n\t"
233  "popfl\n\t"
234  : "=&r" (__eax), "=&r" (__ebx)
235  : "i" (0x00200000));
236 #endif
237 
238  if (!((__eax ^ __ebx) & 0x00200000))
239  return 0;
240 #endif
241 
242  /* Host supports cpuid. Return highest supported cpuid input value. */
243  __cpuid (__ext, __eax, __ebx, __ecx, __edx);
244 
245  if (__sig)
246  *__sig = __ebx;
247 
248  return __eax;
249 }
#define __cpuid(level, a, b, c, d)
Definition: cpuid.h:183