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

Go to the source code of this file.

Macros

#define foreach_sse42_vec128i   _(i,8,16,epi8) _(i,16,8,epi16) _(i,32,4,epi32) _(i,64,2,epi64x)
 
#define foreach_sse42_vec128u   _(u,8,16,epi8) _(u,16,8,epi16) _(u,32,4,epi32) _(u,64,2,epi64x)
 
#define foreach_sse42_vec128f   _(f,32,4,ps) _(f,64,2,pd)
 
#define CLIB_VEC128_SPLAT_DEFINED
 
#define CLIB_HAVE_VEC128_UNALIGNED_LOAD_STORE
 
#define u8x16_word_shift_left(a, n)   (u8x16) _mm_slli_si128((__m128i) a, n)
 
#define u8x16_word_shift_right(a, n)   (u8x16) _mm_srli_si128((__m128i) a, n)
 
#define i8x16_word_shift_left(a, n)   ((i8x16) u8x16_word_shift_left((u8x16) (a), (n)))
 
#define i8x16_word_shift_right(a, n)   ((i8x16) u8x16_word_shift_right((u8x16) (a), (n)))
 
#define u16x8_word_shift_left(a, n)   ((u16x8) u8x16_word_shift_left((u8x16) (a), (n) * sizeof (u16)))
 
#define i16x8_word_shift_left(a, n)   ((u16x8) u8x16_word_shift_left((u8x16) (a), (n) * sizeof (u16)))
 
#define u16x8_word_shift_right(a, n)   ((u16x8) u8x16_word_shift_right((u8x16) (a), (n) * sizeof (u16)))
 
#define i16x8_word_shift_right(a, n)   ((i16x8) u8x16_word_shift_right((u8x16) (a), (n) * sizeof (u16)))
 
#define u32x4_word_shift_left(a, n)   ((u32x4) u8x16_word_shift_left((u8x16) (a), (n) * sizeof (u32)))
 
#define i32x4_word_shift_left(a, n)   ((u32x4) u8x16_word_shift_left((u8x16) (a), (n) * sizeof (u32)))
 
#define u32x4_word_shift_right(a, n)   ((u32x4) u8x16_word_shift_right((u8x16) (a), (n) * sizeof (u32)))
 
#define i32x4_word_shift_right(a, n)   ((i32x4) u8x16_word_shift_right((u8x16) (a), (n) * sizeof (u32)))
 
#define u64x2_word_shift_left(a, n)   ((u64x2) u8x16_word_shift_left((u8x16) (a), (n) * sizeof (u64)))
 
#define i64x2_word_shift_left(a, n)   ((u64x2) u8x16_word_shift_left((u8x16) (a), (n) * sizeof (u64)))
 
#define u64x2_word_shift_right(a, n)   ((u64x2) u8x16_word_shift_right((u8x16) (a), (n) * sizeof (u64)))
 
#define i64x2_word_shift_right(a, n)   ((i64x2) u8x16_word_shift_right((u8x16) (a), (n) * sizeof (u64)))
 
#define u8x16_align_right(a, b, imm)   (u8x16) _mm_alignr_epi8 ((__m128i) a, (__m128i) b, imm)
 
#define CLIB_HAVE_VEC128_MSB_MASK
 

Functions

static u8x16 u8x16_interleave_hi (u8x16 a, u8x16 b)
 
static u8x16 u8x16_interleave_lo (u8x16 a, u8x16 b)
 
static u16x8 u16x8_interleave_hi (u16x8 a, u16x8 b)
 
static u16x8 u16x8_interleave_lo (u16x8 a, u16x8 b)
 
static u32x4 u32x4_interleave_hi (u32x4 a, u32x4 b)
 
static u32x4 u32x4_interleave_lo (u32x4 a, u32x4 b)
 
static u64x2 u64x2_interleave_hi (u64x2 a, u64x2 b)
 
static u64x2 u64x2_interleave_lo (u64x2 a, u64x2 b)
 
adds_epu static subs_epu i16x8 i16x8_mul_lo (i16x8 x, i16x8 y)
 
static u16x8 u16x8_mul_lo (u16x8 x, u16x8 y)
 
static i16x8 i16x8_mul_hi (i16x8 x, i16x8 y)
 
static u16x8 u16x8_mul_hi (u16x8 x, u16x8 y)
 
static u32 u8x16_max_scalar (u8x16 x)
 
static u8 u8x16_min_scalar (u8x16 x)
 
static i16 i16x8_max_scalar (i16x8 x)
 
static i16 i16x8_min_scalar (i16x8 x)
 
static_always_inline u32 u32x4_min_scalar (u32x4 v)
 
static_always_inline u32 u32x4_max_scalar (u32x4 v)
 
static_always_inline u32 i32x4_min_scalar (i32x4 v)
 
static_always_inline u32 i32x4_max_scalar (i32x4 v)
 
static_always_inline u16 u8x16_msb_mask (u8x16 v)
 
static_always_inline u16 i8x16_msb_mask (i8x16 v)
 
static_always_inline u32x4 u32x4_byte_swap (u32x4 v)
 
static_always_inline u16x8 u16x8_byte_swap (u16x8 v)
 
static_always_inline u8x16 u8x16_reflect (u8x16 v)
 
static_always_inline u32x4 u32x4_hadd (u32x4 v1, u32x4 v2)
 
static_always_inline u32 __clib_unused u32x4_sum_elts (u32x4 sum4)
 
static_always_inline u8x16 u8x16_shuffle (u8x16 v, u8x16 m)
 
static_always_inline u32x4 u32x4_shuffle (u32x4 v, const int a, const int b, const int c, const int d)
 
epu8_epi32 epu16_epi32 epu32_epi64 epi8_epi32 epi16_epi32 epi32_epi64 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 void u64x2_scatter_one (u64x2 r, int index, void *p)
 
static_always_inline void u32x4_scatter_one (u32x4 r, int index, void *p)
 
static_always_inline u8x16 u8x16_is_greater (u8x16 v1, u8x16 v2)
 
static_always_inline u8x16 u8x16_blend (u8x16 v1, u8x16 v2, u8x16 mask)
 
static_always_inline u8x16 u8x16_xor3 (u8x16 a, u8x16 b, u8x16 c)
 

Variables

 u8x16
 
_mm_packus_epi16 u16x8
 
 add_saturate
 
adds_epu sub_saturate
 
 left
 
sll right
 
 u32x4
 
epu8_epi32 epu16_epi32 u64x2
 
epu8_epi32 epu16_epi32 epu32_epi64 i32x4
 
epu8_epi32 epu16_epi32 epu32_epi64 epi8_epi32 epi16_epi32 i64x2
 

Macro Definition Documentation

◆ CLIB_HAVE_VEC128_MSB_MASK

#define CLIB_HAVE_VEC128_MSB_MASK

Definition at line 369 of file vector_sse42.h.

◆ CLIB_HAVE_VEC128_UNALIGNED_LOAD_STORE

#define CLIB_HAVE_VEC128_UNALIGNED_LOAD_STORE

Definition at line 98 of file vector_sse42.h.

◆ CLIB_VEC128_SPLAT_DEFINED

#define CLIB_VEC128_SPLAT_DEFINED

Definition at line 97 of file vector_sse42.h.

◆ foreach_sse42_vec128f

#define foreach_sse42_vec128f   _(f,32,4,ps) _(f,64,2,pd)

Definition at line 49 of file vector_sse42.h.

◆ foreach_sse42_vec128i

#define foreach_sse42_vec128i   _(i,8,16,epi8) _(i,16,8,epi16) _(i,32,4,epi32) _(i,64,2,epi64x)

Definition at line 45 of file vector_sse42.h.

◆ foreach_sse42_vec128u

#define foreach_sse42_vec128u   _(u,8,16,epi8) _(u,16,8,epi16) _(u,32,4,epi32) _(u,64,2,epi64x)

Definition at line 47 of file vector_sse42.h.

◆ i16x8_word_shift_left

#define i16x8_word_shift_left (   a,
 
)    ((u16x8) u8x16_word_shift_left((u8x16) (a), (n) * sizeof (u16)))

◆ i16x8_word_shift_right

#define i16x8_word_shift_right (   a,
 
)    ((i16x8) u8x16_word_shift_right((u8x16) (a), (n) * sizeof (u16)))

◆ i32x4_word_shift_left

#define i32x4_word_shift_left (   a,
 
)    ((u32x4) u8x16_word_shift_left((u8x16) (a), (n) * sizeof (u32)))

◆ i32x4_word_shift_right

#define i32x4_word_shift_right (   a,
 
)    ((i32x4) u8x16_word_shift_right((u8x16) (a), (n) * sizeof (u32)))

◆ i64x2_word_shift_left

#define i64x2_word_shift_left (   a,
 
)    ((u64x2) u8x16_word_shift_left((u8x16) (a), (n) * sizeof (u64)))

◆ i64x2_word_shift_right

#define i64x2_word_shift_right (   a,
 
)    ((i64x2) u8x16_word_shift_right((u8x16) (a), (n) * sizeof (u64)))

◆ i8x16_word_shift_left

#define i8x16_word_shift_left (   a,
 
)    ((i8x16) u8x16_word_shift_left((u8x16) (a), (n)))

◆ i8x16_word_shift_right

#define i8x16_word_shift_right (   a,
 
)    ((i8x16) u8x16_word_shift_right((u8x16) (a), (n)))

◆ u16x8_word_shift_left

#define u16x8_word_shift_left (   a,
 
)    ((u16x8) u8x16_word_shift_left((u8x16) (a), (n) * sizeof (u16)))

◆ u16x8_word_shift_right

#define u16x8_word_shift_right (   a,
 
)    ((u16x8) u8x16_word_shift_right((u8x16) (a), (n) * sizeof (u16)))

◆ u32x4_word_shift_left

#define u32x4_word_shift_left (   a,
 
)    ((u32x4) u8x16_word_shift_left((u8x16) (a), (n) * sizeof (u32)))

◆ u32x4_word_shift_right

#define u32x4_word_shift_right (   a,
 
)    ((u32x4) u8x16_word_shift_right((u8x16) (a), (n) * sizeof (u32)))

◆ u64x2_word_shift_left

#define u64x2_word_shift_left (   a,
 
)    ((u64x2) u8x16_word_shift_left((u8x16) (a), (n) * sizeof (u64)))

◆ u64x2_word_shift_right

#define u64x2_word_shift_right (   a,
 
)    ((u64x2) u8x16_word_shift_right((u8x16) (a), (n) * sizeof (u64)))

◆ u8x16_align_right

#define u8x16_align_right (   a,
  b,
  imm 
)    (u8x16) _mm_alignr_epi8 ((__m128i) a, (__m128i) b, imm)

Definition at line 322 of file vector_sse42.h.

◆ u8x16_word_shift_left

#define u8x16_word_shift_left (   a,
 
)    (u8x16) _mm_slli_si128((__m128i) a, n)

◆ u8x16_word_shift_right

#define u8x16_word_shift_right (   a,
 
)    (u8x16) _mm_srli_si128((__m128i) a, n)

Function Documentation

◆ i16x8_max_scalar()

static i16 i16x8_max_scalar ( i16x8  x)
inlinestatic

Definition at line 305 of file vector_sse42.h.

◆ i16x8_min_scalar()

static i16 i16x8_min_scalar ( i16x8  x)
inlinestatic

Definition at line 314 of file vector_sse42.h.

◆ i16x8_mul_hi()

static i16x8 i16x8_mul_hi ( i16x8  x,
i16x8  y 
)
inlinestatic

Definition at line 191 of file vector_sse42.h.

◆ i16x8_mul_lo()

adds_epu static subs_epu i16x8 i16x8_mul_lo ( i16x8  x,
i16x8  y 
)
inlinestatic

Definition at line 179 of file vector_sse42.h.

◆ i32x4_max_scalar()

static_always_inline u32 i32x4_max_scalar ( i32x4  v)

Definition at line 350 of file vector_sse42.h.

◆ i32x4_min_scalar()

static_always_inline u32 i32x4_min_scalar ( i32x4  v)

Definition at line 342 of file vector_sse42.h.

◆ i8x16_msb_mask()

static_always_inline u16 i8x16_msb_mask ( i8x16  v)

Definition at line 364 of file vector_sse42.h.

+ Here is the caller graph for this function:

◆ u16x8_byte_swap()

static_always_inline u16x8 u16x8_byte_swap ( u16x8  v)

Definition at line 383 of file vector_sse42.h.

◆ u16x8_interleave_hi()

static u16x8 u16x8_interleave_hi ( u16x8  a,
u16x8  b 
)
inlinestatic

Definition at line 114 of file vector_sse42.h.

◆ u16x8_interleave_lo()

static u16x8 u16x8_interleave_lo ( u16x8  a,
u16x8  b 
)
inlinestatic

Definition at line 120 of file vector_sse42.h.

◆ u16x8_mul_hi()

static u16x8 u16x8_mul_hi ( u16x8  x,
u16x8  y 
)
inlinestatic

Definition at line 197 of file vector_sse42.h.

◆ u16x8_mul_lo()

static u16x8 u16x8_mul_lo ( u16x8  x,
u16x8  y 
)
inlinestatic

Definition at line 185 of file vector_sse42.h.

◆ u32x4_byte_swap()

static_always_inline u32x4 u32x4_byte_swap ( u32x4  v)

Definition at line 374 of file vector_sse42.h.

◆ u32x4_gather()

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

Definition at line 463 of file vector_sse42.h.

◆ u32x4_hadd()

static_always_inline u32x4 u32x4_hadd ( u32x4  v1,
u32x4  v2 
)

Definition at line 401 of file vector_sse42.h.

◆ u32x4_interleave_hi()

static u32x4 u32x4_interleave_hi ( u32x4  a,
u32x4  b 
)
inlinestatic

Definition at line 126 of file vector_sse42.h.

◆ u32x4_interleave_lo()

static u32x4 u32x4_interleave_lo ( u32x4  a,
u32x4  b 
)
inlinestatic

Definition at line 132 of file vector_sse42.h.

◆ u32x4_max_scalar()

static_always_inline u32 u32x4_max_scalar ( u32x4  v)

Definition at line 334 of file vector_sse42.h.

◆ u32x4_min_scalar()

static_always_inline u32 u32x4_min_scalar ( u32x4  v)

Definition at line 326 of file vector_sse42.h.

◆ u32x4_scatter()

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

Definition at line 478 of file vector_sse42.h.

◆ u32x4_scatter_one()

static_always_inline void u32x4_scatter_one ( u32x4  r,
int  index,
void *  p 
)

Definition at line 493 of file vector_sse42.h.

◆ u32x4_shuffle()

static_always_inline u32x4 u32x4_shuffle ( u32x4  v,
const int  a,
const int  b,
const int  c,
const int  d 
)

Definition at line 421 of file vector_sse42.h.

+ Here is the caller graph for this function:

◆ u32x4_sum_elts()

static_always_inline u32 __clib_unused u32x4_sum_elts ( u32x4  sum4)

Definition at line 407 of file vector_sse42.h.

◆ u64x2_gather()

epu8_epi32 epu16_epi32 epu32_epi64 epi8_epi32 epi16_epi32 epi32_epi64 static_always_inline u64x2 u64x2_gather ( void *  p0,
void *  p1 
)

Definition at line 456 of file vector_sse42.h.

◆ u64x2_interleave_hi()

static u64x2 u64x2_interleave_hi ( u64x2  a,
u64x2  b 
)
inlinestatic

Definition at line 138 of file vector_sse42.h.

◆ u64x2_interleave_lo()

static u64x2 u64x2_interleave_lo ( u64x2  a,
u64x2  b 
)
inlinestatic

Definition at line 144 of file vector_sse42.h.

◆ u64x2_scatter()

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

Definition at line 471 of file vector_sse42.h.

◆ u64x2_scatter_one()

static_always_inline void u64x2_scatter_one ( u64x2  r,
int  index,
void *  p 
)

Definition at line 487 of file vector_sse42.h.

◆ u8x16_blend()

static_always_inline u8x16 u8x16_blend ( u8x16  v1,
u8x16  v2,
u8x16  mask 
)

Definition at line 505 of file vector_sse42.h.

+ Here is the caller graph for this function:

◆ u8x16_interleave_hi()

static u8x16 u8x16_interleave_hi ( u8x16  a,
u8x16  b 
)
inlinestatic

Definition at line 102 of file vector_sse42.h.

◆ u8x16_interleave_lo()

static u8x16 u8x16_interleave_lo ( u8x16  a,
u8x16  b 
)
inlinestatic

Definition at line 108 of file vector_sse42.h.

◆ u8x16_is_greater()

static_always_inline u8x16 u8x16_is_greater ( u8x16  v1,
u8x16  v2 
)

Definition at line 499 of file vector_sse42.h.

+ Here is the caller graph for this function:

◆ u8x16_max_scalar()

static u32 u8x16_max_scalar ( u8x16  x)
inlinestatic

Definition at line 285 of file vector_sse42.h.

◆ u8x16_min_scalar()

static u8 u8x16_min_scalar ( u8x16  x)
inlinestatic

Definition at line 295 of file vector_sse42.h.

◆ u8x16_msb_mask()

static_always_inline u16 u8x16_msb_mask ( u8x16  v)

Definition at line 358 of file vector_sse42.h.

◆ u8x16_reflect()

static_always_inline u8x16 u8x16_reflect ( u8x16  v)

Definition at line 392 of file vector_sse42.h.

◆ u8x16_shuffle()

static_always_inline u8x16 u8x16_shuffle ( u8x16  v,
u8x16  m 
)

Definition at line 415 of file vector_sse42.h.

◆ u8x16_xor3()

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

Definition at line 511 of file vector_sse42.h.

Variable Documentation

◆ add_saturate

add_saturate

Definition at line 175 of file vector_sse42.h.

◆ i32x4

epu8_epi32 epu16_epi32 epu32_epi64 epi8_epi32 i32x4

Definition at line 447 of file vector_sse42.h.

◆ i64x2

epu8_epi32 epu16_epi32 epu32_epi64 epi8_epi32 epi16_epi32 i64x2

Definition at line 451 of file vector_sse42.h.

◆ left

sll srl srl sll sra left

Definition at line 212 of file vector_sse42.h.

◆ right

sll srl srl sll sra right

Definition at line 214 of file vector_sse42.h.

◆ sub_saturate

adds_epu sub_saturate

Definition at line 177 of file vector_sse42.h.

◆ u16x8

_mm_packus_epi16 u16x8

Definition at line 159 of file vector_sse42.h.

◆ u32x4

epu8_epi32 u32x4

Definition at line 440 of file vector_sse42.h.

◆ u64x2

epu8_epi32 epu16_epi32 u64x2

Definition at line 444 of file vector_sse42.h.

◆ u8x16

u8x16

Definition at line 157 of file vector_sse42.h.