FD.io VPP  v18.04-17-g3a0d853
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 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)
 

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)
 
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 int u8x16_is_all_zero (u8x16 x)
 
static int u16x8_is_all_zero (u16x8 x)
 
static int u32x4_is_all_zero (u32x4 x)
 
static int u64x2_is_all_zero (u64x2 x)
 
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)
 

Variables

 add_saturate
 
adds_epu sub_saturate
 
adds_epu subs_epu i16x8 y
 
 left
 
sll right
 
sll srl srl sll sra u16x4 i
 
u8 u32x4_compare_word_mask_table [256]
 

Macro Definition Documentation

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

Definition at line 327 of file vector_sse42.h.

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

Definition at line 331 of file vector_sse42.h.

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

Definition at line 336 of file vector_sse42.h.

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

Definition at line 340 of file vector_sse42.h.

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

Definition at line 345 of file vector_sse42.h.

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

Definition at line 349 of file vector_sse42.h.

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

Definition at line 320 of file vector_sse42.h.

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

Definition at line 322 of file vector_sse42.h.

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

Definition at line 325 of file vector_sse42.h.

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

Definition at line 329 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; \
})
adds_epu subs_epu i16x8 y
Definition: vector_sse42.h:227
unsigned long long u32x4
Definition: ixge.c:28

Definition at line 430 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:430
sll srl srl sll sra u16x4 i
Definition: vector_sse42.h:271

Definition at line 440 of file vector_sse42.h.

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

Definition at line 334 of file vector_sse42.h.

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

Definition at line 338 of file vector_sse42.h.

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

Definition at line 343 of file vector_sse42.h.

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

Definition at line 347 of file vector_sse42.h.

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

Definition at line 317 of file vector_sse42.h.

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

Definition at line 318 of file vector_sse42.h.

Function Documentation

static i8x8 i16x4_pack ( i16x4  lo,
i16x4  hi 
)
inlinestatic

Definition at line 157 of file vector_sse42.h.

static i16x4 i16x4_shift_left ( i16x4  x,
i16x4  i 
)
inlinestatic

Definition at line 294 of file vector_sse42.h.

static i16x4 i16x4_shift_right ( i16x4  x,
i16x4  i 
)
inlinestatic

Definition at line 306 of file vector_sse42.h.

static i16x8 i16x8_max ( i16x8  x,
i16x8  y 
)
inlinestatic

Definition at line 548 of file vector_sse42.h.

+ Here is the caller graph for this function:

static i16 i16x8_max_scalar ( i16x8  x)
inlinestatic

Definition at line 554 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 563 of file vector_sse42.h.

+ Here is the caller graph for this function:

static i16 i16x8_min_scalar ( i16x8  x)
inlinestatic

Definition at line 569 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 238 of file vector_sse42.h.

static i8x16 i16x8_pack ( i16x8  lo,
i16x8  hi 
)
inlinestatic

Definition at line 138 of file vector_sse42.h.

static i16x4 i32x2_pack ( i32x2  lo,
i32x2  hi 
)
inlinestatic

Definition at line 169 of file vector_sse42.h.

static i32x2 i32x2_shift_left ( i32x2  x,
i32x2  i 
)
inlinestatic

Definition at line 300 of file vector_sse42.h.

static i32x2 i32x2_shift_right ( i32x2  x,
i32x2  i 
)
inlinestatic

Definition at line 312 of file vector_sse42.h.

static i32 i32x4_get0 ( i32x4  x)
inlinestatic

Definition at line 472 of file vector_sse42.h.

+ Here is the call graph for this function:

static i32x4 i32x4_set0 ( i32  x)
inlinestatic

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

static u16x4 u16x4_interleave_lo ( u16x4  a,
u16x4  b 
)
inlinestatic

Definition at line 113 of file vector_sse42.h.

static u8x8 u16x4_pack ( u16x4  lo,
u16x4  hi 
)
inlinestatic

Definition at line 151 of file vector_sse42.h.

static u16x4 u16x4_shift_right ( u16x4  x,
u16x4  i 
)
inlinestatic

Definition at line 282 of file vector_sse42.h.

static u16x8 u16x8_interleave_hi ( u16x8  a,
u16x8  b 
)
inlinestatic

Definition at line 58 of file vector_sse42.h.

static u16x8 u16x8_interleave_lo ( u16x8  a,
u16x8  b 
)
inlinestatic

Definition at line 64 of file vector_sse42.h.

static int u16x8_is_all_zero ( u16x8  x)
inlinestatic

Definition at line 413 of file vector_sse42.h.

static u16x8 u16x8_mul_hi ( u16x8  x,
u16x8  y 
)
inlinestatic

Definition at line 244 of file vector_sse42.h.

static u16x8 u16x8_mul_lo ( u16x8  x,
u16x8  y 
)
inlinestatic

Definition at line 232 of file vector_sse42.h.

static u8x16 u16x8_pack ( u16x8  lo,
u16x8  hi 
)
inlinestatic

Definition at line 132 of file vector_sse42.h.

static u32 u16x8_zero_byte_mask ( u16x8  x)
inlinestatic

Definition at line 502 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 119 of file vector_sse42.h.

static u32x2 u32x2_interleave_lo ( u32x2  a,
u32x2  b 
)
inlinestatic

Definition at line 125 of file vector_sse42.h.

static u16x4 u32x2_pack ( u32x2  lo,
u32x2  hi 
)
inlinestatic

Definition at line 163 of file vector_sse42.h.

static u32x2 u32x2_shift_left ( u32x2  x,
u32x2  i 
)
inlinestatic

Definition at line 276 of file vector_sse42.h.

static u32x2 u32x2_shift_right ( u32x2  x,
u32x2  i 
)
inlinestatic

Definition at line 288 of file vector_sse42.h.

static u32 u32x4_compare_word_mask ( u32x4  x)
inlinestatic

Definition at line 487 of file vector_sse42.h.

+ Here is the call graph for this function:

static u32 u32x4_get0 ( u32x4  x)
inlinestatic

Definition at line 448 of file vector_sse42.h.

+ Here is the caller graph for this function:

static u32x4 u32x4_interleave_hi ( u32x4  a,
u32x4  b 
)
inlinestatic

Definition at line 70 of file vector_sse42.h.

static u32x4 u32x4_interleave_lo ( u32x4  a,
u32x4  b 
)
inlinestatic

Definition at line 76 of file vector_sse42.h.

static int u32x4_is_all_zero ( u32x4  x)
inlinestatic

Definition at line 419 of file vector_sse42.h.

static u16x8 u32x4_pack ( u32x4  lo,
u32x4  hi 
)
inlinestatic

Definition at line 144 of file vector_sse42.h.

static u32x4 u32x4_set0 ( u32  x)
inlinestatic

Definition at line 457 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 509 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 82 of file vector_sse42.h.

static u64x2 u64x2_interleave_lo ( u64x2  a,
u64x2  b 
)
inlinestatic

Definition at line 88 of file vector_sse42.h.

static int u64x2_is_all_zero ( u64x2  x)
inlinestatic

Definition at line 425 of file vector_sse42.h.

static u64x2 u64x2_read_hi ( u64x2  x,
u64 a 
)
inlinestatic

Definition at line 182 of file vector_sse42.h.

static u64x2 u64x2_read_lo ( u64x2  x,
u64 a 
)
inlinestatic

Definition at line 176 of file vector_sse42.h.

static void u64x2_write_hi ( u64x2  x,
u64 a 
)
inlinestatic

Definition at line 194 of file vector_sse42.h.

static void u64x2_write_lo ( u64x2  x,
u64 a 
)
inlinestatic

Definition at line 188 of file vector_sse42.h.

static u32 u8x16_compare_byte_mask ( u8x16  x)
inlinestatic

Definition at line 479 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 46 of file vector_sse42.h.

static u8x16 u8x16_interleave_lo ( u8x16  a,
u8x16  b 
)
inlinestatic

Definition at line 52 of file vector_sse42.h.

static int u8x16_is_all_zero ( u8x16  x)
inlinestatic

Definition at line 407 of file vector_sse42.h.

static u8x16 u8x16_max ( u8x16  x,
u8x16  y 
)
inlinestatic

Definition at line 516 of file vector_sse42.h.

+ Here is the caller graph for this function:

static u32 u8x16_max_scalar ( u8x16  x)
inlinestatic

Definition at line 522 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 532 of file vector_sse42.h.

+ Here is the caller graph for this function:

static u8 u8x16_min_scalar ( u8x16  x)
inlinestatic

Definition at line 538 of file vector_sse42.h.

+ Here is the call graph for this function:

static u32 u8x16_zero_byte_mask ( u8x16  x)
inlinestatic

Definition at line 495 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 95 of file vector_sse42.h.

static u8x8 u8x8_interleave_lo ( u8x8  a,
u8x8  b 
)
inlinestatic

Definition at line 101 of file vector_sse42.h.

Variable Documentation

add_saturate

Definition at line 221 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:271

Definition at line 271 of file vector_sse42.h.

sll srl srl left

Definition at line 259 of file vector_sse42.h.

sll srl srl sll right

Definition at line 261 of file vector_sse42.h.

adds_epu sub_saturate

Definition at line 223 of file vector_sse42.h.

u8 u32x4_compare_word_mask_table[256]
adds_epu subs_epu i16x8 y
Initial value:
{
return (i16x8) _mm_mullo_epi16 ((__m128i) x, (__m128i) y)
adds_epu subs_epu i16x8 y
Definition: vector_sse42.h:227
vmrglw i16x8

Definition at line 227 of file vector_sse42.h.