Vector Optimized Library of Kernels  2.4
Architecture-tuned implementations of math kernels
cpuinfo_x86.c File Reference
#include "cpuinfo_x86.h"
#include <stdbool.h>
#include <string.h>
#include "internal/bit_utils.h"
#include "internal/cpuid_x86.h"
#include "define_tables.h"

Data Structures

struct  OsSupport
 

Macros

#define DEFINE_TABLE_FEATURES
 
#define DEFINE_TABLE_FEATURE_TYPE   X86Features
 
#define DEFINE_TABLE_DONT_GENERATE_HWCAPS
 
#define MASK_XMM   0x2
 
#define MASK_YMM   0x4
 
#define MASK_MASKREG   0x20
 
#define MASK_ZMM0_15   0x40
 
#define MASK_ZMM16_31   0x80
 
#define MASK_XTILECFG   0x20000
 
#define MASK_XTILEDATA   0x40000
 
#define CPUID(FAMILY, MODEL)   ((((FAMILY)&0xFF) << 8) | ((MODEL)&0xFF))
 

Functions

static Leaf CpuId (uint32_t leaf_id)
 
static Leaf SafeCpuIdEx (uint32_t max_cpuid_leaf, uint32_t leaf_id, int ecx)
 
static Leaf SafeCpuId (uint32_t max_cpuid_leaf, uint32_t leaf_id)
 
static bool HasMask (uint32_t value, uint32_t mask)
 
static bool HasXmmOsXSave (uint32_t xcr0_eax)
 
static bool HasYmmOsXSave (uint32_t xcr0_eax)
 
static bool HasZmmOsXSave (uint32_t xcr0_eax)
 
static bool HasTmmOsXSave (uint32_t xcr0_eax)
 
static bool HasSecondFMA (uint32_t model)
 
static void SetVendor (const Leaf leaf, char *const vendor)
 
static int IsVendor (const Leaf leaf, const char *const name)
 
static CacheLevelInfo GetCacheLevelInfo (const uint32_t reg)
 
static void GetByteArrayFromRegister (uint32_t result[4], const uint32_t reg)
 
static void ParseLeaf2 (const int max_cpuid_leaf, CacheInfo *info)
 
static void ParseLeaf4 (const int max_cpuid_leaf, CacheInfo *info)
 
static OsSupport CheckOsSupport (const uint32_t max_cpuid_leaf)
 
static void DetectSseViaOs (X86Features *features)
 
static void ParseCpuId (const uint32_t max_cpuid_leaf, const OsSupport os_support, X86Info *info)
 
static void ParseExtraAMDCpuId (X86Info *info, OsSupport os_support)
 
X86Info GetX86Info (void)
 
CacheInfo GetX86CacheInfo (void)
 
X86Microarchitecture GetX86Microarchitecture (const X86Info *info)
 
static void SetString (const uint32_t max_cpuid_ext_leaf, const uint32_t leaf_id, char *buffer)
 
void FillX86BrandString (char brand_string[49])
 
int GetX86FeaturesEnumValue (const X86Features *features, X86FeaturesEnum value)
 
const char * GetX86FeaturesEnumName (X86FeaturesEnum value)
 
const char * GetX86MicroarchitectureName (X86Microarchitecture uarch)
 

Variables

static const Leaf kEmptyLeaf
 
static const CacheLevelInfo kEmptyCacheLevelInfo
 
static const OsSupport kEmptyOsSupport
 
static const X86Info kEmptyX86Info
 
static const CacheInfo kEmptyCacheInfo
 

Macro Definition Documentation

◆ CPUID

#define CPUID (   FAMILY,
  MODEL 
)    ((((FAMILY)&0xFF) << 8) | ((MODEL)&0xFF))

◆ DEFINE_TABLE_DONT_GENERATE_HWCAPS

#define DEFINE_TABLE_DONT_GENERATE_HWCAPS

◆ DEFINE_TABLE_FEATURE_TYPE

#define DEFINE_TABLE_FEATURE_TYPE   X86Features

◆ DEFINE_TABLE_FEATURES

#define DEFINE_TABLE_FEATURES

◆ MASK_MASKREG

#define MASK_MASKREG   0x20

◆ MASK_XMM

#define MASK_XMM   0x2

◆ MASK_XTILECFG

#define MASK_XTILECFG   0x20000

◆ MASK_XTILEDATA

#define MASK_XTILEDATA   0x40000

◆ MASK_YMM

#define MASK_YMM   0x4

◆ MASK_ZMM0_15

#define MASK_ZMM0_15   0x40

◆ MASK_ZMM16_31

#define MASK_ZMM16_31   0x80

Function Documentation

◆ CheckOsSupport()

static OsSupport CheckOsSupport ( const uint32_t  max_cpuid_leaf)
static

◆ CpuId()

static Leaf CpuId ( uint32_t  leaf_id)
static

◆ DetectSseViaOs()

static void DetectSseViaOs ( X86Features features)
static

◆ FillX86BrandString()

void FillX86BrandString ( char  brand_string[49])

◆ GetByteArrayFromRegister()

static void GetByteArrayFromRegister ( uint32_t  result[4],
const uint32_t  reg 
)
static

◆ GetCacheLevelInfo()

static CacheLevelInfo GetCacheLevelInfo ( const uint32_t  reg)
static

◆ GetX86CacheInfo()

CacheInfo GetX86CacheInfo ( void  )

◆ GetX86FeaturesEnumName()

const char* GetX86FeaturesEnumName ( X86FeaturesEnum  value)

◆ GetX86FeaturesEnumValue()

int GetX86FeaturesEnumValue ( const X86Features features,
X86FeaturesEnum  value 
)

◆ GetX86Info()

X86Info GetX86Info ( void  )

◆ GetX86Microarchitecture()

X86Microarchitecture GetX86Microarchitecture ( const X86Info info)

◆ GetX86MicroarchitectureName()

const char* GetX86MicroarchitectureName ( X86Microarchitecture  uarch)

◆ HasMask()

static bool HasMask ( uint32_t  value,
uint32_t  mask 
)
static

◆ HasSecondFMA()

static bool HasSecondFMA ( uint32_t  model)
static

◆ HasTmmOsXSave()

static bool HasTmmOsXSave ( uint32_t  xcr0_eax)
static

◆ HasXmmOsXSave()

static bool HasXmmOsXSave ( uint32_t  xcr0_eax)
static

◆ HasYmmOsXSave()

static bool HasYmmOsXSave ( uint32_t  xcr0_eax)
static

◆ HasZmmOsXSave()

static bool HasZmmOsXSave ( uint32_t  xcr0_eax)
static

◆ IsVendor()

static int IsVendor ( const Leaf  leaf,
const char *const  name 
)
static

◆ ParseCpuId()

static void ParseCpuId ( const uint32_t  max_cpuid_leaf,
const OsSupport  os_support,
X86Info info 
)
static

◆ ParseExtraAMDCpuId()

static void ParseExtraAMDCpuId ( X86Info info,
OsSupport  os_support 
)
static

◆ ParseLeaf2()

static void ParseLeaf2 ( const int  max_cpuid_leaf,
CacheInfo info 
)
static

◆ ParseLeaf4()

static void ParseLeaf4 ( const int  max_cpuid_leaf,
CacheInfo info 
)
static

◆ SafeCpuId()

static Leaf SafeCpuId ( uint32_t  max_cpuid_leaf,
uint32_t  leaf_id 
)
static

◆ SafeCpuIdEx()

static Leaf SafeCpuIdEx ( uint32_t  max_cpuid_leaf,
uint32_t  leaf_id,
int  ecx 
)
static

◆ SetString()

static void SetString ( const uint32_t  max_cpuid_ext_leaf,
const uint32_t  leaf_id,
char *  buffer 
)
static

◆ SetVendor()

static void SetVendor ( const Leaf  leaf,
char *const  vendor 
)
static

Variable Documentation

◆ kEmptyCacheInfo

const CacheInfo kEmptyCacheInfo
static

◆ kEmptyCacheLevelInfo

const CacheLevelInfo kEmptyCacheLevelInfo
static

◆ kEmptyLeaf

const Leaf kEmptyLeaf
static

◆ kEmptyOsSupport

const OsSupport kEmptyOsSupport
static

◆ kEmptyX86Info

const X86Info kEmptyX86Info
static