FD.io VPP  v20.09-64-g4f7b92f0a
Vector Packet Processing
cpu.h File Reference
+ Include dependency graph for cpu.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define foreach_march_variant(macro, x)
 
#define CLIB_CPU_OPTIMIZED
 
#define CLIB_MULTIARCH_ARCH_CHECK(arch, fn, tgt)
 
#define CLIB_MULTIARCH_SELECT_FN(fn, ...)
 
#define CLIB_MULTIARCH_FN(fn)   fn
 
#define CLIB_MARCH_SFX   CLIB_MULTIARCH_FN
 
#define CLIB_MARCH_FN_POINTER(fn)   clib_march_select_fn_ptr (fn##_march_fn_registrations);
 
#define CLIB_MARCH_FN_REGISTRATION(fn)
 
#define foreach_x86_64_flags
 
#define foreach_aarch64_flags
 
#define AARCH64_CPU_IMPLEMENTER_CAVIUM   0x43
 
#define AARCH64_CPU_PART_THUNDERX2   0x0af
 
#define AARCH64_CPU_PART_OCTEONTX2T96   0x0b2
 
#define AARCH64_CPU_PART_OCTEONTX2T98   0x0b1
 
#define AARCH64_CPU_IMPLEMENTER_QDF24XX   0x51
 
#define AARCH64_CPU_PART_QDF24XX   0xc00
 
#define AARCH64_CPU_IMPLEMENTER_CORTEXA72   0x41
 
#define AARCH64_CPU_PART_CORTEXA72   0xd08
 
#define AARCH64_CPU_IMPLEMENTER_NEOVERSEN1   0x41
 
#define AARCH64_CPU_PART_NEOVERSEN1   0xd0c
 
#define CLIB_MARCH_FN_PRIORITY()   0
 
#define CLIB_MARCH_FN_CONSTRUCTOR(fn)
 
#define CLIB_MARCH_FN(fn, rtype, _args...)
 
#define CLIB_MARCH_FN_SELECT(fn)   (* fn ## _selected)
 

Typedefs

typedef struct _clib_march_fn_registration clib_march_fn_registration
 

Functions

static_always_inline void * clib_march_select_fn_ptr (clib_march_fn_registration *r)
 
static u32 clib_get_current_cpu_id ()
 
static u32 clib_get_current_numa_node ()
 
static int clib_get_cpuid (const u32 lev, u32 *eax, u32 *ebx, u32 *ecx, u32 *edx)
 
static foreach_aarch64_flags int clib_cpu_supports_aes ()
 
static int clib_cpu_march_priority_icl ()
 
static int clib_cpu_march_priority_skx ()
 
static int clib_cpu_march_priority_hsw ()
 
static u32 clib_cpu_implementer ()
 
static u32 clib_cpu_part ()
 
static int clib_cpu_march_priority_octeontx2 ()
 
static int clib_cpu_march_priority_thunderx2t99 ()
 
static int clib_cpu_march_priority_qdf24xx ()
 
static int clib_cpu_march_priority_cortexa72 ()
 
static int clib_cpu_march_priority_neoversen1 ()
 

Variables

format_function_t format_cpu_uarch
 
format_function_t format_cpu_model_name
 
format_function_t format_cpu_flags
 

Macro Definition Documentation

◆ AARCH64_CPU_IMPLEMENTER_CAVIUM

#define AARCH64_CPU_IMPLEMENTER_CAVIUM   0x43

Definition at line 330 of file cpu.h.

◆ AARCH64_CPU_IMPLEMENTER_CORTEXA72

#define AARCH64_CPU_IMPLEMENTER_CORTEXA72   0x41

Definition at line 336 of file cpu.h.

◆ AARCH64_CPU_IMPLEMENTER_NEOVERSEN1

#define AARCH64_CPU_IMPLEMENTER_NEOVERSEN1   0x41

Definition at line 338 of file cpu.h.

◆ AARCH64_CPU_IMPLEMENTER_QDF24XX

#define AARCH64_CPU_IMPLEMENTER_QDF24XX   0x51

Definition at line 334 of file cpu.h.

◆ AARCH64_CPU_PART_CORTEXA72

#define AARCH64_CPU_PART_CORTEXA72   0xd08

Definition at line 337 of file cpu.h.

◆ AARCH64_CPU_PART_NEOVERSEN1

#define AARCH64_CPU_PART_NEOVERSEN1   0xd0c

Definition at line 339 of file cpu.h.

◆ AARCH64_CPU_PART_OCTEONTX2T96

#define AARCH64_CPU_PART_OCTEONTX2T96   0x0b2

Definition at line 332 of file cpu.h.

◆ AARCH64_CPU_PART_OCTEONTX2T98

#define AARCH64_CPU_PART_OCTEONTX2T98   0x0b1

Definition at line 333 of file cpu.h.

◆ AARCH64_CPU_PART_QDF24XX

#define AARCH64_CPU_PART_QDF24XX   0xc00

Definition at line 335 of file cpu.h.

◆ AARCH64_CPU_PART_THUNDERX2

#define AARCH64_CPU_PART_THUNDERX2   0x0af

Definition at line 331 of file cpu.h.

◆ CLIB_CPU_OPTIMIZED

#define CLIB_CPU_OPTIMIZED

Definition at line 40 of file cpu.h.

◆ CLIB_MARCH_FN

#define CLIB_MARCH_FN (   fn,
  rtype,
  _args... 
)
Value:
static rtype CLIB_CPU_OPTIMIZED CLIB_MARCH_SFX (fn ## _ma)(_args); \
rtype (*fn ## _selected) (_args) = & CLIB_MARCH_SFX (fn ## _ma); \
int fn ## _selected_priority = 0; \
static inline rtype CLIB_CPU_OPTIMIZED \
CLIB_MARCH_SFX (fn ## _ma)(_args)
#define CLIB_CPU_OPTIMIZED
Definition: cpu.h:40
#define CLIB_MARCH_SFX
Definition: cpu.h:59

Definition at line 406 of file cpu.h.

◆ CLIB_MARCH_FN_CONSTRUCTOR

#define CLIB_MARCH_FN_CONSTRUCTOR (   fn)
Value:
CLIB_MARCH_SFX(fn ## _march_constructor) (void) \
{ \
if (CLIB_MARCH_FN_PRIORITY() > fn ## _selected_priority) \
{ \
fn ## _selected = & CLIB_MARCH_SFX (fn ## _ma); \
fn ## _selected_priority = CLIB_MARCH_FN_PRIORITY(); \
} \
} \
#define CLIB_MARCH_SFX
Definition: cpu.h:59
#define CLIB_MARCH_FN_PRIORITY()
Definition: cpu.h:390

Definition at line 394 of file cpu.h.

◆ CLIB_MARCH_FN_POINTER

#define CLIB_MARCH_FN_POINTER (   fn)    clib_march_select_fn_ptr (fn##_march_fn_registrations);

Definition at line 87 of file cpu.h.

◆ CLIB_MARCH_FN_PRIORITY

#define CLIB_MARCH_FN_PRIORITY ( )    0

Definition at line 390 of file cpu.h.

◆ CLIB_MARCH_FN_REGISTRATION

#define CLIB_MARCH_FN_REGISTRATION (   fn)
Value:
clib_march_fn_registration *fn##_march_fn_registrations = 0; \
_CLIB_MARCH_FN_REGISTRATION(fn)
struct _clib_march_fn_registration clib_march_fn_registration

Definition at line 113 of file cpu.h.

◆ CLIB_MARCH_FN_SELECT

#define CLIB_MARCH_FN_SELECT (   fn)    (* fn ## _selected)

Definition at line 421 of file cpu.h.

◆ CLIB_MARCH_SFX

#define CLIB_MARCH_SFX   CLIB_MULTIARCH_FN

Definition at line 59 of file cpu.h.

◆ CLIB_MULTIARCH_ARCH_CHECK

#define CLIB_MULTIARCH_ARCH_CHECK (   arch,
  fn,
  tgt 
)
Value:
if (clib_cpu_supports_ ## arch()) \
return & fn ## _ ##arch;

Definition at line 44 of file cpu.h.

◆ CLIB_MULTIARCH_FN

#define CLIB_MULTIARCH_FN (   fn)    fn

Definition at line 56 of file cpu.h.

◆ CLIB_MULTIARCH_SELECT_FN

#define CLIB_MULTIARCH_SELECT_FN (   fn,
  ... 
)

Definition at line 49 of file cpu.h.

◆ foreach_aarch64_flags

#define foreach_aarch64_flags
Value:
_ (fp, 0) \
_ (asimd, 1) \
_ (evtstrm, 2) \
_ (aarch64_aes, 3) \
_ (pmull, 4) \
_ (sha1, 5) \
_ (sha2, 6) \
_ (crc32, 7) \
_ (atomics, 8) \
_ (fphp, 9) \
_ (asimdhp, 10) \
_ (cpuid, 11) \
_ (asimdrdm, 12) \
_ (jscvt, 13) \
_ (fcma, 14) \
_ (lrcpc, 15) \
_ (dcpop, 16) \
_ (sha3, 17) \
_ (sm3, 18) \
_ (sm4, 19) \
_ (asimddp, 20) \
_ (sha512, 21) \
_ (sve, 22)

Definition at line 141 of file cpu.h.

◆ foreach_march_variant

#define foreach_march_variant (   macro,
 
)

Definition at line 33 of file cpu.h.

◆ foreach_x86_64_flags

#define foreach_x86_64_flags
Value:
_ (sse3, 1, ecx, 0) \
_ (pclmulqdq, 1, ecx, 1) \
_ (ssse3, 1, ecx, 9) \
_ (sse41, 1, ecx, 19) \
_ (sse42, 1, ecx, 20) \
_ (avx, 1, ecx, 28) \
_ (rdrand, 1, ecx, 30) \
_ (avx2, 7, ebx, 5) \
_ (rtm, 7, ebx, 11) \
_ (pqm, 7, ebx, 12) \
_ (pqe, 7, ebx, 15) \
_ (avx512f, 7, ebx, 16) \
_ (rdseed, 7, ebx, 18) \
_ (x86_aes, 1, ecx, 25) \
_ (sha, 7, ebx, 29) \
_ (vaes, 7, ecx, 9) \
_ (vpclmulqdq, 7, ecx, 10) \
_ (avx512_vnni, 7, ecx, 11) \
_ (avx512_bitalg, 7, ecx, 12) \
_ (avx512_vpopcntdq, 7, ecx, 14) \
_ (invariant_tsc, 0x80000007, edx, 8)

Definition at line 117 of file cpu.h.

Typedef Documentation

◆ clib_march_fn_registration

typedef struct _clib_march_fn_registration clib_march_fn_registration

Function Documentation

◆ clib_cpu_implementer()

static u32 clib_cpu_implementer ( )
inlinestatic

Definition at line 275 of file cpu.h.

+ Here is the caller graph for this function:

◆ clib_cpu_march_priority_cortexa72()

static int clib_cpu_march_priority_cortexa72 ( )
inlinestatic

Definition at line 370 of file cpu.h.

+ Here is the call graph for this function:

◆ clib_cpu_march_priority_hsw()

static int clib_cpu_march_priority_hsw ( )
inlinestatic

Definition at line 267 of file cpu.h.

◆ clib_cpu_march_priority_icl()

static int clib_cpu_march_priority_icl ( )
inlinestatic

Definition at line 251 of file cpu.h.

◆ clib_cpu_march_priority_neoversen1()

static int clib_cpu_march_priority_neoversen1 ( )
inlinestatic

Definition at line 379 of file cpu.h.

+ Here is the call graph for this function:

◆ clib_cpu_march_priority_octeontx2()

static int clib_cpu_march_priority_octeontx2 ( )
inlinestatic

Definition at line 342 of file cpu.h.

+ Here is the call graph for this function:

◆ clib_cpu_march_priority_qdf24xx()

static int clib_cpu_march_priority_qdf24xx ( )
inlinestatic

Definition at line 361 of file cpu.h.

+ Here is the call graph for this function:

◆ clib_cpu_march_priority_skx()

static int clib_cpu_march_priority_skx ( )
inlinestatic

Definition at line 259 of file cpu.h.

◆ clib_cpu_march_priority_thunderx2t99()

static int clib_cpu_march_priority_thunderx2t99 ( )
inlinestatic

Definition at line 352 of file cpu.h.

+ Here is the call graph for this function:

◆ clib_cpu_part()

static u32 clib_cpu_part ( )
inlinestatic

Definition at line 303 of file cpu.h.

+ Here is the caller graph for this function:

◆ clib_cpu_supports_aes()

static foreach_aarch64_flags int clib_cpu_supports_aes ( )
inlinestatic

Definition at line 239 of file cpu.h.

+ Here is the caller graph for this function:

◆ clib_get_cpuid()

static int clib_get_cpuid ( const u32  lev,
u32 eax,
u32 ebx,
u32 ecx,
u32 edx 
)
inlinestatic

Definition at line 186 of file cpu.h.

◆ clib_get_current_cpu_id()

static u32 clib_get_current_cpu_id ( )
inlinestatic

Definition at line 167 of file cpu.h.

+ Here is the caller graph for this function:

◆ clib_get_current_numa_node()

static u32 clib_get_current_numa_node ( )
inlinestatic

Definition at line 175 of file cpu.h.

+ Here is the caller graph for this function:

◆ clib_march_select_fn_ptr()

static_always_inline void* clib_march_select_fn_ptr ( clib_march_fn_registration r)

Definition at line 70 of file cpu.h.

Variable Documentation

◆ format_cpu_flags

format_function_t format_cpu_flags

Definition at line 425 of file cpu.h.

◆ format_cpu_model_name

format_function_t format_cpu_model_name

Definition at line 424 of file cpu.h.

◆ format_cpu_uarch

format_function_t format_cpu_uarch

Definition at line 423 of file cpu.h.