3 #ifndef EVAL_CONTAINER_QUAD_INT_H
4 #define EVAL_CONTAINER_QUAD_INT_H
10 #ifdef __INTEL_COMPILER
11 # include <emmintrin.h>
12 # define __builtin_ia32_pxor128 _mm_xor_pd
13 # define __builtin_ia32_psubd128 _mm_sub_epi32
14 # define __builtin_ia32_paddd128 _mm_add_epi32
18 #if (defined __x86_64__) || (defined __i386__)
20 # define OSL_USE_SSE 1
23 # warning "QuadInt without SSE"
32 # ifdef __INTEL_COMPILER
44 CArray<long long,2>
llv;
76 v.v4=(
v4si){ 0, 0, 0, 0 };
94 v.v4=__builtin_ia32_paddd128(
v.v4,si.
v.v4);
96 for(
int i=0;i<4;i++)
v.
iv[i]+=si.
v.
iv[i];
102 v.v4=__builtin_ia32_psubd128(
v.v4,si.
v.v4);
104 for(
int i=0;i<4;i++)
v.
iv[i]-=si.
v.
iv[i];
111 unsigned long long scalescale=(
unsigned long long )((
unsigned int)scale);
112 scalescale|=scalescale<<32ull;
113 val.v2=__builtin_ia32_vec_set_v2di(val.v2,(
long long)scalescale,0);
114 val.v2=__builtin_ia32_vec_set_v2di(val.v2,(
long long)scalescale,1);
115 v.v4=__builtin_ia32_pmulld128(
v.v4,val.v4);
117 for(
int i=0;i<4;i++)
v.
iv[i]*=scale;
121 static size_t size() {
return 4; }
194 return l[0] == r[0] && l[1] == r[1];
198 using container::QuadInt;
199 using container::QuadIntPair;
201 #endif // EVAL_CONTAINER_QUAD_INT_H