FD.io VPP  v21.01.1
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 u16x8_sub_saturate(a, b)   vsubq_u16(a,b)
 
#define i16x8_sub_saturate(a, b)   vsubq_s16(a,b)
 
#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 214 of file vector_neon.h.

◆ CLIB_HAVE_VEC128_UNALIGNED_LOAD_STORE

#define CLIB_HAVE_VEC128_UNALIGNED_LOAD_STORE

Definition at line 216 of file vector_neon.h.

◆ CLIB_VEC128_SPLAT_DEFINED

#define CLIB_VEC128_SPLAT_DEFINED

Definition at line 217 of file vector_neon.h.

◆ foreach_neon_vec128f

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

Definition at line 54 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 50 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 52 of file vector_neon.h.

◆ i16x8_sub_saturate

#define i16x8_sub_saturate (   a,
  b 
)    vsubq_s16(a,b)

Definition at line 22 of file vector_neon.h.

◆ u16x8_sub_saturate

#define u16x8_sub_saturate (   a,
  b 
)    vsubq_u16(a,b)

Definition at line 21 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 191 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 192 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 26 of file vector_neon.h.

◆ vreinterpretq_u8_u8

#define vreinterpretq_u8_u8 (   a)    a

Definition at line 24 of file vector_neon.h.

Function Documentation

◆ u16x8_byte_swap()

Definition at line 101 of file vector_neon.h.

◆ u32x4_byte_swap()

static_always_inline u32x4 u32x4_byte_swap ( u32x4  v)

Definition at line 107 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 160 of file vector_neon.h.

◆ u32x4_hadd()

static_always_inline u32x4 u32x4_hadd ( u32x4  v1,
u32x4  v2 
)

Definition at line 119 of file vector_neon.h.

◆ u32x4_min_scalar()

static_always_inline u32 u32x4_min_scalar ( u32x4  v)

Definition at line 186 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 177 of file vector_neon.h.

◆ u64x2_from_u32x4()

static_always_inline u64x2 u64x2_from_u32x4 ( u32x4  v)

Definition at line 125 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 131 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 152 of file vector_neon.h.

◆ u64x2_scatter()

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

Definition at line 170 of file vector_neon.h.

◆ u8x16_compare_byte_mask()

static u32 u8x16_compare_byte_mask ( u8x16  v)
inlinestatic

Definition at line 35 of file vector_neon.h.

◆ u8x16_msb_mask()

static_always_inline u16 u8x16_msb_mask ( u8x16  v)

Definition at line 138 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 195 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 113 of file vector_neon.h.

+ Here is the caller graph for this function:

◆ u8x16_xor3()

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

Definition at line 204 of file vector_neon.h.

+ Here is the caller graph for this function: