3 #ifndef EVAL_CONTAINER_QUAD_INT_H
4 #define EVAL_CONTAINER_QUAD_INT_H
10 #if (defined __INTEL_COMPILER || defined __clang__)
11 # include <emmintrin.h>
12 # ifdef __INTEL_COMPILER
13 # define __builtin_ia32_pxor128 _mm_xor_pd
15 # define __builtin_ia32_psubd128 _mm_sub_epi32
16 # define __builtin_ia32_paddd128 _mm_add_epi32
20 #if (defined __x86_64__) || (defined __i386__)
22 # define OSL_USE_SSE 1
25 # warning "QuadInt without SSE"
34 # ifdef __INTEL_COMPILER
78 v.v4=(v4si){ 0, 0, 0, 0 };
96 v.v4=__builtin_ia32_paddd128(
v.v4,si.
v.v4);
98 for(
int i=0;i<4;i++)
v.
iv[i]+=si.
v.
iv[i];
104 v.v4=__builtin_ia32_psubd128(
v.v4,si.
v.v4);
106 for(
int i=0;i<4;i++)
v.
iv[i]-=si.
v.
iv[i];
113 unsigned long long scalescale=(
unsigned long long )((
unsigned int)scale);
114 scalescale|=scalescale<<32ull;
115 val.v2=__builtin_ia32_vec_set_v2di(val.v2,(
long long)scalescale,0);
116 val.v2=__builtin_ia32_vec_set_v2di(val.v2,(
long long)scalescale,1);
117 v.v4=__builtin_ia32_pmulld128(
v.v4,val.v4);
119 for(
int i=0;i<4;i++)
v.
iv[i]*=scale;
123 static size_t size() {
return 4; }
196 return l[0] == r[0] && l[1] == r[1];
200 using container::QuadInt;
201 using container::QuadIntPair;
const QuadInt & operator[](int i) const
QuadIntPair & operator+=(QuadIntPair const &a)
QuadInt & operator[](int i)
const QuadInt & operator[](Player pl) const
QuadInt & operator[](Player pl)
QuadIntPair & operator-=(QuadIntPair const &a)
QuadInt operator*(QuadInt const &si0, int scale)
bool operator==(BitXmask l, BitXmask r)
QuadInt operator+(QuadInt const &si0, QuadInt const &si1)
QuadInt operator-(QuadInt const &si0, QuadInt const &si1)
bool operator<(BitXmask l, BitXmask r)
const PtypeO PTYPEO_EDGE __attribute__((unused))
union osl::container::QuadInt::XMM v
QuadInt & operator=(QuadInt const &si)
QuadInt(QuadInt const &si)
QuadInt & operator-=(QuadInt const &si)
const int & operator[](int i) const
QuadInt operator-() const
QuadInt & operator+=(QuadInt const &si)
QuadInt & operator*=(int scale)
CArray< long long, 2 > llv