|
FD.io VPP
v21.06-3-gbb25fbf28
Vector Packet Processing
|
Go to the documentation of this file.
38 #ifndef included_clib_h
39 #define included_clib_h
43 #if __has_include(<vppinfra/config.h>)
44 #include <vppinfra/config.h>
48 #include <x86intrin.h>
52 #if ! defined (CLIB_STANDALONE) && ! defined (CLIB_LINUX_KERNEL)
66 #define NULL ((void *) 0)
69 #define BITS(x) (8*sizeof(x))
70 #define ARRAY_LEN(x) (sizeof (x)/sizeof (x[0]))
72 #define _STRUCT_FIELD(t,f) (((t *) 0)->f)
73 #define STRUCT_OFFSET_OF(t,f) offsetof(t, f)
74 #define STRUCT_BIT_OFFSET_OF(t,f) (BITS(u8) * STRUCT_OFFSET_OF (t, f))
75 #define STRUCT_SIZE_OF(t,f) (sizeof (_STRUCT_FIELD (t, f)))
76 #define STRUCT_BITS_OF(t,f) (BITS (_STRUCT_FIELD (t, f)))
77 #define STRUCT_ARRAY_LEN(t,f) ARRAY_LEN (_STRUCT_FIELD (t, f))
78 #define STRUCT_MARK(mark) u8 mark[0]
79 #define STRUCT_MARK_PTR(v, f) &(v)->f
82 #define STRUCT_STRIDE_OF(t,f) \
83 ( ((uword) & (((t *) 0)[1].f)) \
84 - ((uword) & (((t *) 0)[0].f)))
86 #define STRUCT_OFFSET_OF_VAR(v,f) ((uword) (&(v)->f) - (uword) (v))
89 #define CLIB_PACKED(x) x __attribute__ ((packed))
90 #define CLIB_UNUSED(x) x __attribute__ ((unused))
93 #define CLIB_ALIGN_MARK(name, alignment) u8 name[0] __attribute__((aligned(alignment)))
96 #define CLIB_STRING_MACRO(x) #x
98 #define __clib_unused __attribute__ ((unused))
99 #define __clib_weak __attribute__ ((weak))
100 #define __clib_packed __attribute__ ((packed))
101 #define __clib_constructor __attribute__ ((constructor))
102 #define __clib_noinline __attribute__ ((noinline))
103 #define __clib_aligned(x) __attribute__ ((aligned(x)))
104 #define __clib_section(s) __attribute__ ((section(s)))
105 #define __clib_warn_unused_result __attribute__ ((warn_unused_result))
106 #define __clib_export __attribute__ ((visibility("default")))
108 #define never_inline __attribute__ ((__noinline__))
111 #define always_inline static inline
112 #define static_always_inline static inline
114 #define always_inline static inline __attribute__ ((__always_inline__))
115 #define static_always_inline static inline __attribute__ ((__always_inline__))
121 #define CLIB_PAD_FROM_TO(from,to) u8 pad_##from[(to) - (from)]
124 #define PREDICT_FALSE(x) __builtin_expect((x),0)
125 #define PREDICT_TRUE(x) __builtin_expect((x),1)
126 #define COMPILE_TIME_CONST(x) __builtin_constant_p (x)
134 #define CLIB_COMPILER_BARRIER() asm volatile ("":::"memory")
137 #define CLIB_MEMORY_BARRIER() __sync_synchronize ()
140 #define CLIB_MEMORY_STORE_BARRIER() __builtin_ia32_sfence ()
142 #define CLIB_MEMORY_STORE_BARRIER() __sync_synchronize ()
146 #define INIT_FUNCTION(decl) \
147 decl __attribute ((constructor)); \
151 #define EXIT_FUNCTION(decl) \
152 decl __attribute ((destructor)); \
157 #define count_leading_zeros(x) __builtin_clzll (x)
158 #define count_trailing_zeros(x) __builtin_ctzll (x)
160 #define count_leading_zeros(x) __builtin_clzl (x)
161 #define count_trailing_zeros(x) __builtin_ctzl (x)
164 #if defined (count_leading_zeros)
169 return _blsr_u64 (x);
207 const u64 table = 0x3333333322221104LL;
208 uword t = (table >> (4 *
a)) & 0xf;
209 r = t < 4 ?
r + t : ~0;
213 const u32 table = 0x22221104;
214 uword t = (
a & 8) ? 3 : ((table >> (4 *
a)) & 0xf);
215 r = t < 4 ?
r + t : ~0;
226 if (x > ((
uword) 1 << l))
269 return 0 == (x & (x - 1));
275 return (x) & ~(pow2 - 1);
281 return (x + pow2 - 1) & ~(pow2 - 1);
287 return (x + pow2 - 1) & ~(pow2 - 1);
300 #ifdef count_trailing_zeros
317 return (
word) (x + .5);
330 return _bextr_u64 (x, start,
count);
335 #define clib_max(x,y) \
337 __typeof__ (x) _x = (x); \
338 __typeof__ (y) _y = (y); \
342 #define clib_min(x,y) \
344 __typeof__ (x) _x = (x); \
345 __typeof__ (y) _y = (y); \
349 #define clib_clamp(x,lo,hi) \
351 __typeof__ (x) _x = (x); \
352 __typeof__ (lo) _lo = (lo); \
353 __typeof__ (hi) _hi = (hi); \
354 _x < _lo ? _lo : (_x > _hi ? _hi : _x); \
357 #define clib_abs(x) \
359 __typeof__ (x) _x = (x); \
365 void clib_standalone_init (
void *
memory,
uword memory_bytes);
368 int (*)(
const void *,
const void *));
static u64 min_log2_u64(u64 x)
static f64 flt_round_down(f64 x)
#define count_trailing_zeros(x)
static uword pow2_mask(uword x)
#define count_leading_zeros(x)
vnet_hw_if_output_node_runtime_t * r
static uword max_log2(uword x)
static uword round_pow2(uword x, uword pow2)
static f64 flt_round_to_multiple(f64 x, f64 f)
vhost_user_memory_t memory
static u64 round_pow2_u64(u64 x, u64 pow2)
static uword extract_bits(uword x, int start, int count)
static word flt_round_nearest(f64 x)
static uword log2_first_set(uword x)
static uword clear_lowest_set_bit(uword x)
static uword round_down_pow2(uword x, uword pow2)
uword clib_backtrace(uword *callers, uword max_callers, uword n_frames_to_skip)
static uword max_pow2(uword x)
void qsort(void *base, uword n, uword size, int(*compar)(const void *, const void *))
static uword min_log2(uword x)
static uword is_pow2(uword x)
static uword first_set(uword x)