FD.io VPP  v18.10-34-gcce845e
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 u32x4_select(A, MASK)
 
#define u32x4_splat_word(x, i)
 
#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)
 
static u8x8 u8x8_interleave_hi (u8x8 a, u8x8 b)
 
static u8x8 u8x8_interleave_lo (u8x8 a, u8x8 b)
 
static u16x4 u16x4_interleave_hi (u16x4 a, u16x4 b)
 
static u16x4 u16x4_interleave_lo (u16x4 a, u16x4 b)
 
static u32x2 u32x2_interleave_hi (u32x2 a, u32x2 b)
 
static u32x2 u32x2_interleave_lo (u32x2 a, u32x2 b)
 
static u8x16 u16x8_pack (u16x8 lo, u16x8 hi)
 
static i8x16 i16x8_pack (i16x8 lo, i16x8 hi)
 
static u16x8 u32x4_pack (u32x4 lo, u32x4 hi)
 
static u8x8 u16x4_pack (u16x4 lo, u16x4 hi)
 
static i8x8 i16x4_pack (i16x4 lo, i16x4 hi)
 
static u16x4 u32x2_pack (u32x2 lo, u32x2 hi)
 
static i16x4 i32x2_pack (i32x2 lo, i32x2 hi)
 
static u64x2 u64x2_read_lo (u64x2 x, u64 *a)
 
static u64x2 u64x2_read_hi (u64x2 x, u64 *a)
 
static void u64x2_write_lo (u64x2 x, u64 *a)
 
static void u64x2_write_hi (u64x2 x, u64 *a)
 
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 u32x2 u32x2_shift_left (u32x2 x, u32x2 i)
 
static u16x4 u16x4_shift_right (u16x4 x, u16x4 i)
 
static u32x2 u32x2_shift_right (u32x2 x, u32x2 i)
 
static i16x4 i16x4_shift_left (i16x4 x, i16x4 i)
 
static i32x2 i32x2_shift_left (i32x2 x, i32x2 i)
 
static i16x4 i16x4_shift_right (i16x4 x, i16x4 i)
 
static i32x2 i32x2_shift_right (i32x2 x, i32x2 i)
 
static u32 u32x4_get0 (u32x4 x)
 
static u32x4 u32x4_set0 (u32 x)
 
static i32x4 i32x4_set0 (i32 x)
 
static i32 i32x4_get0 (i32x4 x)
 
static u32 u8x16_compare_byte_mask (u8x16 x)
 
static u32 u32x4_compare_word_mask (u32x4 x)
 
static u32 u8x16_zero_byte_mask (u8x16 x)
 
static u32 u16x8_zero_byte_mask (u16x8 x)
 
static u32 u32x4_zero_byte_mask (u32x4 x)
 
static u8x16 u8x16_max (u8x16 x, u8x16 y)
 
static u32 u8x16_max_scalar (u8x16 x)
 
static u8x16 u8x16_min (u8x16 x, u8x16 y)
 
static u8 u8x16_min_scalar (u8x16 x)
 
static i16x8 i16x8_max (i16x8 x, i16x8 y)
 
static i16 i16x8_max_scalar (i16x8 x)
 
static i16x8 i16x8_min (i16x8 x, i16x8 y)
 
static i16 i16x8_min_scalar (i16x8 x)
 
static_always_inline u16 u8x16_msb_mask (u8x16 v)
 
static_always_inline u16x8 u16x8_byte_swap (u16x8 v)
 
static_always_inline u32x4 u32x4_hadd (u32x4 v1, u32x4 v2)
 
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)
 

Variables

 add_saturate
 
adds_epu sub_saturate
 
 left
 
sll right
 
sll srl srl sll sra u16x4 i
 
u8 u32x4_compare_word_mask_table [256]
 
 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

#define CLIB_HAVE_VEC128_MSB_MASK

Definition at line 591 of file vector_sse42.h.

#define CLIB_HAVE_VEC128_UNALIGNED_LOAD_STORE

Definition at line 84 of file vector_sse42.h.

#define CLIB_VEC128_SPLAT_DEFINED

Definition at line 83 of file vector_sse42.h.

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

Definition at line 49 of file vector_sse42.h.

#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.

#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.

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

Definition at line 359 of file vector_sse42.h.

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

Definition at line 363 of file vector_sse42.h.

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

Definition at line 368 of file vector_sse42.h.

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

Definition at line 372 of file vector_sse42.h.

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

Definition at line 377 of file vector_sse42.h.

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

Definition at line 381 of file vector_sse42.h.

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

Definition at line 352 of file vector_sse42.h.

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

Definition at line 354 of file vector_sse42.h.

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

Definition at line 357 of file vector_sse42.h.

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

Definition at line 361 of file vector_sse42.h.

#define u32x4_select (   A,
  MASK 
)
Value:
({ \
u32x4 _x, _y; \
_x = (A); \
asm volatile ("pshufd %[mask], %[x], %[y]" \
: /* outputs */ [y] "=x" (_y) \
: /* inputs */ [x] "x" (_x), [mask] "i" (MASK)); \
_y; \
})
u32x4
Definition: vector_sse42.h:636

Definition at line 438 of file vector_sse42.h.

#define u32x4_splat_word (   x,
  i 
)
Value:
u32x4_select ((x), (((i) << (2*0)) \
| ((i) << (2*1)) \
| ((i) << (2*2)) \
| ((i) << (2*3))))
#define u32x4_select(A, MASK)
Definition: vector_sse42.h:438
sll srl srl sll sra u16x4 i
Definition: vector_sse42.h:303

Definition at line 448 of file vector_sse42.h.

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

Definition at line 366 of file vector_sse42.h.

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

Definition at line 370 of file vector_sse42.h.

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

Definition at line 375 of file vector_sse42.h.

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

Definition at line 379 of file vector_sse42.h.

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

Definition at line 349 of file vector_sse42.h.

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

Definition at line 350 of file vector_sse42.h.

Function Documentation

static i8x8 i16x4_pack ( i16x4  lo,
i16x4  hi 
)
inlinestatic

Definition at line 199 of file vector_sse42.h.

static i16x4 i16x4_shift_left ( i16x4  x,
i16x4  i 
)
inlinestatic

Definition at line 326 of file vector_sse42.h.

static i16x4 i16x4_shift_right ( i16x4  x,
i16x4  i 
)
inlinestatic

Definition at line 338 of file vector_sse42.h.

static i16x8 i16x8_max ( i16x8  x,
i16x8  y 
)
inlinestatic

Definition at line 556 of file vector_sse42.h.

+ Here is the caller graph for this function:

static i16 i16x8_max_scalar ( i16x8  x)
inlinestatic

Definition at line 562 of file vector_sse42.h.

+ Here is the call graph for this function:

static i16x8 i16x8_min ( i16x8  x,
i16x8  y 
)
inlinestatic

Definition at line 571 of file vector_sse42.h.

+ Here is the caller graph for this function:

static i16 i16x8_min_scalar ( i16x8  x)
inlinestatic

Definition at line 577 of file vector_sse42.h.

+ Here is the call graph for this function:

static i16x8 i16x8_mul_hi ( i16x8  x,
i16x8  y 
)
inlinestatic

Definition at line 270 of file vector_sse42.h.

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

Definition at line 258 of file vector_sse42.h.

static i8x16 i16x8_pack ( i16x8  lo,
i16x8  hi 
)
inlinestatic

Definition at line 180 of file vector_sse42.h.

static i16x4 i32x2_pack ( i32x2  lo,
i32x2  hi 
)
inlinestatic

Definition at line 211 of file vector_sse42.h.

static i32x2 i32x2_shift_left ( i32x2  x,
i32x2  i 
)
inlinestatic

Definition at line 332 of file vector_sse42.h.

static i32x2 i32x2_shift_right ( i32x2  x,
i32x2  i 
)
inlinestatic

Definition at line 344 of file vector_sse42.h.

static i32 i32x4_get0 ( i32x4  x)
inlinestatic

Definition at line 480 of file vector_sse42.h.

+ Here is the call graph for this function:

static i32x4 i32x4_set0 ( i32  x)
inlinestatic

Definition at line 474 of file vector_sse42.h.

+ Here is the call graph for this function:

static u16x4 u16x4_interleave_hi ( u16x4  a,
u16x4  b 
)
inlinestatic

Definition at line 149 of file vector_sse42.h.

static u16x4 u16x4_interleave_lo ( u16x4  a,
u16x4  b 
)
inlinestatic

Definition at line 155 of file vector_sse42.h.

static u8x8 u16x4_pack ( u16x4  lo,
u16x4  hi 
)
inlinestatic

Definition at line 193 of file vector_sse42.h.

static u16x4 u16x4_shift_right ( u16x4  x,
u16x4  i 
)
inlinestatic

Definition at line 314 of file vector_sse42.h.

static_always_inline u16x8 u16x8_byte_swap ( u16x8  v)

Definition at line 596 of file vector_sse42.h.

static u16x8 u16x8_interleave_hi ( u16x8  a,
u16x8  b 
)
inlinestatic

Definition at line 100 of file vector_sse42.h.

static u16x8 u16x8_interleave_lo ( u16x8  a,
u16x8  b 
)
inlinestatic

Definition at line 106 of file vector_sse42.h.

static u16x8 u16x8_mul_hi ( u16x8  x,
u16x8  y 
)
inlinestatic

Definition at line 276 of file vector_sse42.h.

static u16x8 u16x8_mul_lo ( u16x8  x,
u16x8  y 
)
inlinestatic

Definition at line 264 of file vector_sse42.h.

static u8x16 u16x8_pack ( u16x8  lo,
u16x8  hi 
)
inlinestatic

Definition at line 174 of file vector_sse42.h.

static u32 u16x8_zero_byte_mask ( u16x8  x)
inlinestatic

Definition at line 510 of file vector_sse42.h.

+ Here is the call graph for this function:

static u32x2 u32x2_interleave_hi ( u32x2  a,
u32x2  b 
)
inlinestatic

Definition at line 161 of file vector_sse42.h.

static u32x2 u32x2_interleave_lo ( u32x2  a,
u32x2  b 
)
inlinestatic

Definition at line 167 of file vector_sse42.h.

static u16x4 u32x2_pack ( u32x2  lo,
u32x2  hi 
)
inlinestatic

Definition at line 205 of file vector_sse42.h.

static u32x2 u32x2_shift_left ( u32x2  x,
u32x2  i 
)
inlinestatic

Definition at line 308 of file vector_sse42.h.

static u32x2 u32x2_shift_right ( u32x2  x,
u32x2  i 
)
inlinestatic

Definition at line 320 of file vector_sse42.h.

static u32 u32x4_compare_word_mask ( u32x4  x)
inlinestatic

Definition at line 495 of file vector_sse42.h.

+ Here is the call graph for this function:

static u32 u32x4_get0 ( u32x4  x)
inlinestatic

Definition at line 456 of file vector_sse42.h.

+ Here is the caller graph for this function:

static_always_inline u32x4 u32x4_hadd ( u32x4  v1,
u32x4  v2 
)

Definition at line 605 of file vector_sse42.h.

static u32x4 u32x4_interleave_hi ( u32x4  a,
u32x4  b 
)
inlinestatic

Definition at line 112 of file vector_sse42.h.

static u32x4 u32x4_interleave_lo ( u32x4  a,
u32x4  b 
)
inlinestatic

Definition at line 118 of file vector_sse42.h.

static u16x8 u32x4_pack ( u32x4  lo,
u32x4  hi 
)
inlinestatic

Definition at line 186 of file vector_sse42.h.

static u32x4 u32x4_set0 ( u32  x)
inlinestatic

Definition at line 465 of file vector_sse42.h.

+ Here is the caller graph for this function:

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

Definition at line 617 of file vector_sse42.h.

+ Here is the caller graph for this function:

static u32 u32x4_zero_byte_mask ( u32x4  x)
inlinestatic

Definition at line 517 of file vector_sse42.h.

+ Here is the call graph for this function:

static u64x2 u64x2_interleave_hi ( u64x2  a,
u64x2  b 
)
inlinestatic

Definition at line 124 of file vector_sse42.h.

static u64x2 u64x2_interleave_lo ( u64x2  a,
u64x2  b 
)
inlinestatic

Definition at line 130 of file vector_sse42.h.

static u64x2 u64x2_read_hi ( u64x2  x,
u64 a 
)
inlinestatic

Definition at line 224 of file vector_sse42.h.

static u64x2 u64x2_read_lo ( u64x2  x,
u64 a 
)
inlinestatic

Definition at line 218 of file vector_sse42.h.

static void u64x2_write_hi ( u64x2  x,
u64 a 
)
inlinestatic

Definition at line 236 of file vector_sse42.h.

static void u64x2_write_lo ( u64x2  x,
u64 a 
)
inlinestatic

Definition at line 230 of file vector_sse42.h.

static u32 u8x16_compare_byte_mask ( u8x16  x)
inlinestatic

Definition at line 487 of file vector_sse42.h.

+ Here is the caller graph for this function:

static u8x16 u8x16_interleave_hi ( u8x16  a,
u8x16  b 
)
inlinestatic

Definition at line 88 of file vector_sse42.h.

static u8x16 u8x16_interleave_lo ( u8x16  a,
u8x16  b 
)
inlinestatic

Definition at line 94 of file vector_sse42.h.

static u8x16 u8x16_max ( u8x16  x,
u8x16  y 
)
inlinestatic

Definition at line 524 of file vector_sse42.h.

+ Here is the caller graph for this function:

static u32 u8x16_max_scalar ( u8x16  x)
inlinestatic

Definition at line 530 of file vector_sse42.h.

+ Here is the call graph for this function:

static u8x16 u8x16_min ( u8x16  x,
u8x16  y 
)
inlinestatic

Definition at line 540 of file vector_sse42.h.

+ Here is the caller graph for this function:

static u8 u8x16_min_scalar ( u8x16  x)
inlinestatic

Definition at line 546 of file vector_sse42.h.

+ Here is the call graph for this function:

static_always_inline u16 u8x16_msb_mask ( u8x16  v)

Definition at line 586 of file vector_sse42.h.

+ Here is the caller graph for this function:

static_always_inline u8x16 u8x16_shuffle ( u8x16  v,
u8x16  m 
)

Definition at line 611 of file vector_sse42.h.

static u32 u8x16_zero_byte_mask ( u8x16  x)
inlinestatic

Definition at line 503 of file vector_sse42.h.

+ Here is the call graph for this function:

static u8x8 u8x8_interleave_hi ( u8x8  a,
u8x8  b 
)
inlinestatic

Definition at line 137 of file vector_sse42.h.

static u8x8 u8x8_interleave_lo ( u8x8  a,
u8x8  b 
)
inlinestatic

Definition at line 143 of file vector_sse42.h.

Variable Documentation

add_saturate

Definition at line 254 of file vector_sse42.h.

sll srl srl sll sra u16x4 i
Initial value:
{
return (u16x4) _m_psllw ((__m64) x, (__m64) i)
sll srl srl sll sra u16x4 i
Definition: vector_sse42.h:303

Definition at line 303 of file vector_sse42.h.

epu8_epi32 epu16_epi32 epu32_epi64 epi8_epi32 i32x4

Definition at line 643 of file vector_sse42.h.

epu8_epi32 epu16_epi32 epu32_epi64 epi8_epi32 epi16_epi32 i64x2

Definition at line 647 of file vector_sse42.h.

sll srl srl left

Definition at line 291 of file vector_sse42.h.

sll srl srl sll right

Definition at line 293 of file vector_sse42.h.

adds_epu sub_saturate

Definition at line 256 of file vector_sse42.h.

epu8_epi32 u32x4

Definition at line 636 of file vector_sse42.h.

u8 u32x4_compare_word_mask_table[256]
epu8_epi32 epu16_epi32 u64x2

Definition at line 640 of file vector_sse42.h.