13 #ifndef NO_WARN_X86_INTRINSICS
35 #error "Please read comment above. Use -DNO_WARN_X86_INTRINSICS to disable this warning."
41 #if defined(__linux__) && defined(__ppc64__)
44 #include <emmintrin.h>
46 extern __inline __m128
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
49 const __v4sf even_n0 = {-0.0, 0.0, -0.0, 0.0};
50 __v4sf even_neg_Y =
vec_xor(__Y, even_n0);
51 return (__m128)
vec_add (__X, even_neg_Y);
54 extern __inline __m128d
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
57 const __v2df even_n0 = {-0.0, 0.0};
58 __v2df even_neg_Y =
vec_xor(__Y, even_n0);
59 return (__m128d)
vec_add (__X, even_neg_Y);
62 extern __inline __m128
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
65 __vector
unsigned char xform2 = {
66 0x00, 0x01, 0x02, 0x03,
67 0x08, 0x09, 0x0A, 0x0B,
68 0x10, 0x11, 0x12, 0x13,
69 0x18, 0x19, 0x1A, 0x1B
71 __vector
unsigned char xform1 = {
72 0x04, 0x05, 0x06, 0x07,
73 0x0C, 0x0D, 0x0E, 0x0F,
74 0x14, 0x15, 0x16, 0x17,
75 0x1C, 0x1D, 0x1E, 0x1F
78 vec_perm ((__v4sf) __X, (__v4sf) __Y, xform1));
81 extern __inline __m128
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
84 __vector
unsigned char xform2 = {
85 0x00, 0x01, 0x02, 0x03,
86 0x08, 0x09, 0x0A, 0x0B,
87 0x10, 0x11, 0x12, 0x13,
88 0x18, 0x19, 0x1A, 0x1B
90 __vector
unsigned char xform1 = {
91 0x04, 0x05, 0x06, 0x07,
92 0x0C, 0x0D, 0x0E, 0x0F,
93 0x14, 0x15, 0x16, 0x17,
94 0x1C, 0x1D, 0x1E, 0x1F
97 vec_perm ((__v4sf) __X, (__v4sf) __Y, xform1));
100 extern __inline __m128d
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
107 extern __inline __m128d
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
114 extern __inline __m128
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
117 return (__m128)vec_mergeo ((__v4su)__X, (__v4su)__X);
120 extern __inline __m128
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
123 return (__m128)vec_mergee ((__v4su)__X, (__v4su)__X);
126 extern __inline __m128d
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
132 extern __inline __m128d
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
138 extern __inline __m128i
__attribute__((__gnu_inline__, __always_inline__, __artificial__))
141 return (__m128i) (vec_vsx_ld(0, (
signed int const *)__P));
147 #include_next <pmmintrin.h>
_Float16 __2f16 __attribute__((ext_vector_type(2)))
Zeroes the upper 128 bits (bits 255:128) of all YMM registers.
static __inline__ vector signed char __ATTRS_o_ai vec_splats(signed char __a)
static __inline__ vector signed char __ATTRS_o_ai vec_mergel(vector signed char __a, vector signed char __b)
static __inline__ vector signed char __ATTRS_o_ai vec_perm(vector signed char __a, vector signed char __b, vector unsigned char __c)
static __inline__ vector signed char __ATTRS_o_ai vec_mergeh(vector signed char __a, vector signed char __b)
static __inline__ vector signed char __ATTRS_o_ai vec_add(vector signed char __a, vector signed char __b)
static __inline__ vector unsigned char __ATTRS_o_ai vec_xor(vector unsigned char __a, vector unsigned char __b)
static __inline__ vector signed char __ATTRS_o_ai vec_sub(vector signed char __a, vector signed char __b)
#define _MM_SHUFFLE2(x, y)
#define _mm_shuffle_pd(a, b, i)
Constructs a 128-bit floating-point vector of [2 x double] from two 128-bit vector parameters of [2 x...
static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_lddqu_si128(__m128i const *__p)
Loads data from an unaligned memory location to elements in a 128-bit vector.
static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_hadd_pd(__m128d __a, __m128d __b)
Horizontally adds the pairs of values contained in two 128-bit vectors of [2 x double].
static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_movedup_pd(__m128d __a)
Moves and duplicates the double-precision value in the lower bits of a 128-bit vector of [2 x double]...
static __inline__ __m128 __DEFAULT_FN_ATTRS _mm_hadd_ps(__m128 __a, __m128 __b)
Horizontally adds the adjacent pairs of values contained in two 128-bit vectors of [4 x float].
#define _mm_loaddup_pd(dp)
Moves and duplicates one double-precision value to double-precision values stored in a 128-bit vector...
static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_addsub_pd(__m128d __a, __m128d __b)
Adds the even-indexed values and subtracts the odd-indexed values of two 128-bit vectors of [2 x doub...
static __inline__ __m128d __DEFAULT_FN_ATTRS _mm_hsub_pd(__m128d __a, __m128d __b)
Horizontally subtracts the pairs of values contained in two 128-bit vectors of [2 x double].
static __inline__ __m128 __DEFAULT_FN_ATTRS _mm_movehdup_ps(__m128 __a)
Moves and duplicates odd-indexed values from a 128-bit vector of [4 x float] to float values stored i...
static __inline__ __m128 __DEFAULT_FN_ATTRS _mm_moveldup_ps(__m128 __a)
Duplicates even-indexed values from a 128-bit vector of [4 x float] to float values stored in a 128-b...
static __inline__ __m128 __DEFAULT_FN_ATTRS _mm_addsub_ps(__m128 __a, __m128 __b)
Adds the even-indexed values and subtracts the odd-indexed values of two 128-bit vectors of [4 x floa...
static __inline__ __m128 __DEFAULT_FN_ATTRS _mm_hsub_ps(__m128 __a, __m128 __b)
Horizontally subtracts the adjacent pairs of values contained in two 128-bit vectors of [4 x float].