FD.io VPP  v21.10.1-2-g0a485f517
Vector Packet Processing
vector_neon.h File Reference
+ Include dependency graph for vector_neon.h:

Go to the source code of this file.

Macros

#define vreinterpretq_u8_u8(a)   a
 
#define vminvq_u64(x)
 
#define foreach_neon_vec128i   _(i,8,16,s8) _(i,16,8,s16) _(i,32,4,s32) _(i,64,2,s64)
 
#define foreach_neon_vec128u   _(u,8,16,u8) _(u,16,8,u16) _(u,32,4,u32) _(u,64,2,u64)
 
#define foreach_neon_vec128f   _(f,32,4,f32) _(f,64,2,f64)
 
#define u8x16_word_shift_left(x, n)   vextq_u8(u8x16_splat (0), x, 16 - n)
 
#define u8x16_word_shift_right(x, n)   vextq_u8(x, u8x16_splat (0), n)
 
#define CLIB_HAVE_VEC128_MSB_MASK
 
#define CLIB_HAVE_VEC128_UNALIGNED_LOAD_STORE
 
#define CLIB_VEC128_SPLAT_DEFINED
 

Functions

static u32 u8x16_compare_byte_mask (u8x16 v)
 
foreach_neon_vec128i foreach_neon_vec128u static_always_inline u16x8 u16x8_byte_swap (u16x8 v)
 
static_always_inline u32x4 u32x4_byte_swap (u32x4 v)
 
static_always_inline u8x16 u8x16_shuffle (u8x16 v, u8x16 m)
 
static_always_inline u32x4 u32x4_hadd (u32x4 v1, u32x4 v2)
 
static_always_inline u64x2 u64x2_from_u32x4 (u32x4 v)
 
static_always_inline u64x2 u64x2_from_u32x4_high (u32x4 v)
 
static_always_inline u16 u8x16_msb_mask (u8x16 v)
 
static_always_inline u64x2 u64x2_gather (void *p0, void *p1)
 
static_always_inline u32x4 u32x4_gather (void *p0, void *p1, void *p2, void *p3)
 
static_always_inline void u64x2_scatter (u64x2 r, void *p0, void *p1)
 
static_always_inline void u32x4_scatter (u32x4 r, void *p0, void *p1, void *p2, void *p3)
 
static_always_inline u32 u32x4_min_scalar (u32x4 v)
 
static_always_inline u8x16 u8x16_reflect (u8x16 v)
 
static_always_inline u8x16 u8x16_xor3 (u8x16 a, u8x16 b, u8x16 c)
 

Macro Definition Documentation

◆ CLIB_HAVE_VEC128_MSB_MASK

#define CLIB_HAVE_VEC128_MSB_MASK

Definition at line 234 of file vector_neon.h.

◆ CLIB_HAVE_VEC128_UNALIGNED_LOAD_STORE

#define CLIB_HAVE_VEC128_UNALIGNED_LOAD_STORE

Definition at line 236 of file vector_neon.h.

◆ CLIB_VEC128_SPLAT_DEFINED

#define CLIB_VEC128_SPLAT_DEFINED

Definition at line 237 of file vector_neon.h.

◆ foreach_neon_vec128f

#define foreach_neon_vec128f   _(f,32,4,f32) _(f,64,2,f64)

Definition at line 51 of file vector_neon.h.

◆ foreach_neon_vec128i

#define foreach_neon_vec128i   _(i,8,16,s8) _(i,16,8,s16) _(i,32,4,s32) _(i,64,2,s64)

Definition at line 47 of file vector_neon.h.

◆ foreach_neon_vec128u

#define foreach_neon_vec128u   _(u,8,16,u8) _(u,16,8,u16) _(u,32,4,u32) _(u,64,2,u64)

Definition at line 49 of file vector_neon.h.

◆ u8x16_word_shift_left

#define u8x16_word_shift_left (   x,
 
)    vextq_u8(u8x16_splat (0), x, 16 - n)

Definition at line 211 of file vector_neon.h.

◆ u8x16_word_shift_right

#define u8x16_word_shift_right (   x,
 
)    vextq_u8(x, u8x16_splat (0), n)

Definition at line 212 of file vector_neon.h.

◆ vminvq_u64

#define vminvq_u64 (   x)
Value:
({ \
u64 x0 = vgetq_lane_u64(x, 0); \
u64 x1 = vgetq_lane_u64(x, 1); \
x0 < x1 ? x0 : x1; \
})

Definition at line 23 of file vector_neon.h.

◆ vreinterpretq_u8_u8

#define vreinterpretq_u8_u8 (   a)    a

Definition at line 21 of file vector_neon.h.

Function Documentation

◆ u16x8_byte_swap()

Definition at line 121 of file vector_neon.h.

◆ u32x4_byte_swap()

static_always_inline u32x4 u32x4_byte_swap ( u32x4  v)

Definition at line 127 of file vector_neon.h.

+ Here is the caller graph for this function:

◆ u32x4_gather()

static_always_inline u32x4 u32x4_gather ( void *  p0,
void *  p1,
void *  p2,
void *  p3 
)

Definition at line 180 of file vector_neon.h.

+ Here is the caller graph for this function:

◆ u32x4_hadd()

static_always_inline u32x4 u32x4_hadd ( u32x4  v1,
u32x4  v2 
)

Definition at line 139 of file vector_neon.h.

◆ u32x4_min_scalar()

static_always_inline u32 u32x4_min_scalar ( u32x4  v)

Definition at line 206 of file vector_neon.h.

+ Here is the caller graph for this function:

◆ u32x4_scatter()

static_always_inline void u32x4_scatter ( u32x4  r,
void *  p0,
void *  p1,
void *  p2,
void *  p3 
)

Definition at line 197 of file vector_neon.h.

◆ u64x2_from_u32x4()

static_always_inline u64x2 u64x2_from_u32x4 ( u32x4  v)

Definition at line 145 of file vector_neon.h.

+ Here is the caller graph for this function:

◆ u64x2_from_u32x4_high()

static_always_inline u64x2 u64x2_from_u32x4_high ( u32x4  v)

Definition at line 151 of file vector_neon.h.

+ Here is the caller graph for this function:

◆ u64x2_gather()

static_always_inline u64x2 u64x2_gather ( void *  p0,
void *  p1 
)

Definition at line 172 of file vector_neon.h.

◆ u64x2_scatter()

static_always_inline void u64x2_scatter ( u64x2  r,
void *  p0,
void *  p1 
)

Definition at line 190 of file vector_neon.h.

◆ u8x16_compare_byte_mask()

static u32 u8x16_compare_byte_mask ( u8x16  v)
inlinestatic

Definition at line 32 of file vector_neon.h.

◆ u8x16_msb_mask()

static_always_inline u16 u8x16_msb_mask ( u8x16  v)

Definition at line 158 of file vector_neon.h.

+ Here is the caller graph for this function:

◆ u8x16_reflect()

static_always_inline u8x16 u8x16_reflect ( u8x16  v)

Definition at line 215 of file vector_neon.h.

+ Here is the caller graph for this function:

◆ u8x16_shuffle()

static_always_inline u8x16 u8x16_shuffle ( u8x16  v,
u8x16  m 
)

Definition at line 133 of file vector_neon.h.

◆ u8x16_xor3()

static_always_inline u8x16 u8x16_xor3 ( u8x16  a,
u8x16  b,
u8x16  c 
)

Definition at line 224 of file vector_neon.h.

+ Here is the caller graph for this function: