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__)
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;
QuadIntPair & operator-=(QuadIntPair const &a)
QuadInt & operator[](Player pl)
const QuadInt & operator[](Player pl) const
QuadInt & operator[](int i)
const QuadInt & operator[](int i) const
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
const int & operator[](int i) const
QuadInt & operator-=(QuadInt const &si)
QuadInt(QuadInt const &si)
QuadInt & operator*=(int scale)
QuadInt & operator=(QuadInt const &si)
QuadInt operator-() const
QuadInt & operator+=(QuadInt const &si)
CArray< long long, 2 > llv