32template <
class Scalar_type,
class Vector_type>
41 Scalar_type
s[
sizeof(Vector_type) /
sizeof(Scalar_type)];
45 static constexpr int nvec=2;
49 static_assert( (
sizeof(Vector_type) /
sizeof(Scalar_type) >= 1),
" size mismatch " );
51 return nvec*
sizeof(Vector_type) /
sizeof(Scalar_type);
55 for(
int n=0;n<
nvec;n++)
v[n] = rhs.v[n];
59 for(
int n=0;n<
nvec;n++)
v[n] = rhs.
v[n];
88 *y = (*a) * (*x) + (*y);
108 const Scalar_type *__restrict__ a,
110 *y = (*a) * (*x) + (*y);
113 const Scalar_type *__restrict__ l,
118 const Scalar_type *__restrict__ l,
123 const Scalar_type *__restrict__ l,
130 const Scalar_type *__restrict__ x) {
131 *y = (*a) * (*x) + (*y);
135 const Scalar_type *__restrict__ r) {
140 const Scalar_type *__restrict__ r) {
145 const Scalar_type *__restrict__ r) {
153 for(
int n=0;n<
nvec;n++)
vset(ret.
v[n],a);
232 template <
class functor>
235 for(
int n=0;n<
nvec;n++){
240 template <
class functor>
245 for(
int n=0;n<
nvec;n++){
255 out1.
v[0] = in1.
v[0];
256 out1.
v[1] = in2.
v[0];
257 out2.
v[0] = in1.
v[1];
258 out2.
v[1] = in2.
v[1];
364template <
class S,
class V>
368template <
class S,
class V>
370 vec.putlane(_S,lane);
372template <
class S,IfNotSimd<S> = 0 >
376template <
class S,IfNotSimd<S> = 0 >
380template <
class S,
class V>
384template <
class S,
class V>
386 vec.putlane(_S,lane);
394template <
class S,
class V>
396 S* typepun =(S*) &src;
397 vsplat(ret,typepun[lane]);
399template <
class S,
class V, IfComplex<S> =0>
401 typedef typename V::vector_type vector_type;
402 S* typepun =(S*) &src;
413template <
class S,
class V, IfComplex<S> = 0,
class ABtype>
420template <
class S,
class V>
424template <
class S,
class V>
431template <
class S,
class V>
443template <
class S,
class V, IfComplex<S> = 0>
447template <
class S,
class V, IfComplex<S> = 0>
451template <
class S,
class V, IfComplex<S> = 0>
456template <
class S,
class V, IfComplex<S> = 0>
458 vsplat(ret, S(1.0, -1.0));
460template <
class S,
class V, IfComplex<S> = 0>
462 vsplat(ret, S(-1.0, 1.0));
466template <
class S,
class V, IfReal<S> = 0>
470template <
class S,
class V, IfReal<S> = 0>
476template <
class S,
class V, IfInteger<S> = 0>
480template <
class S,
class V, IfInteger<S> = 0>
484template <
class S,
class V, IfInteger<S> = 0>
488template <
class S,
class V, IfInteger<S> = 0>
492template <
class S,
class V>
500template <
class S,
class V, IfReal<S> = 0>
505template <
class S,
class V, IfComplex<S> = 0>
510template <
class S,
class V, IfInteger<S> = 0>
519template <
class S,
class V>
522 ret.
v[0] = a.
v[0]+b.
v[0];
523 ret.
v[1] = a.
v[1]+b.
v[1];
527template <
class S,
class V>
530 ret.
v[0] = a.
v[0]-b.
v[0];
531 ret.
v[1] = a.
v[1]-b.
v[1];
536template <
class S,
class V, IfComplex<S> = 0>
543template <
class S,
class V, IfComplex<S> = 0>
553template <
class S,
class V>
556 ret.
v[0] = a.
v[0]*b.
v[0];
557 ret.
v[1] = a.
v[1]*b.
v[1];
562template <
class S,
class V>
565 ret.
v[0] = a.
v[0]/b.
v[0];
566 ret.
v[1] = a.
v[1]/b.
v[1];
573template <
class S,
class V>
580template <
class S,
class V, IfNotInteger<S> = 0>
588template <
class S,
class V>
593template <
class S,
class V>
604template <
class S,
class V>
609template <
class S,
class V>
620template <
class S,
class V>
624template <
class S,
class V>
629template <
class S,
class V>
639 Optimization::PrecisionChange::StoD(in.
v,out.
v[0].
v,out.
v[1].
v);
642 out.
v=Optimization::PrecisionChange::DtoS(in.
v[0].
v,in.
v[1].
v);
652 Optimization::PrecisionChange::StoD(in.
v,out.
v[0].
v,out.
v[1].
v);
655 out.
v=Optimization::PrecisionChange::DtoS(in.
v[0].
v,in.
v[1].
v);
#define accelerator_inline
Optimization::Vsplat VsplatSIMD
accelerator_inline void vrsign(Grid_simd2< S, V > &ret)
accelerator_inline S getlane(const Grid_simd< S, V > &in, int lane)
accelerator_inline void vzero(Grid_simd2< S, V > &ret)
accelerator_inline void vtrue(Grid_simd2< S, V > &ret)
accelerator_inline Grid_simd2< S, V > real_mult(Grid_simd2< S, V > a, Grid_simd2< S, V > b)
accelerator_inline Grid_simd2< S, V > innerProduct(const Grid_simd2< S, V > &l, const Grid_simd2< S, V > &r)
accelerator_inline void vstream(Grid_simd2< S, V > &out, const Grid_simd2< S, V > &in)
accelerator_inline void vfalse(Grid_simd2< S, V > &ret)
accelerator_inline void vcomplex_i(Grid_simd2< S, V > &ret)
accelerator_inline void precisionChange(vComplexD2 &out, const vComplexF &in)
accelerator_inline Grid_simd2< S, V > operator*(Grid_simd2< S, V > a, Grid_simd2< S, V > b)
accelerator_inline void vone(Grid_simd2< S, V > &ret)
accelerator_inline Grid_simd2< S, V > conjugate(const Grid_simd2< S, V > &in)
Invoke< std::enable_if< is_simd< T >::value, int > > IfSimd
accelerator_inline Grid_simd2< S, V > real_madd(Grid_simd2< S, V > a, Grid_simd2< S, V > b, Grid_simd2< S, V > c)
accelerator_inline Grid_simd2< S, V > adj(const Grid_simd2< S, V > &in)
accelerator_inline void timesMinusI(Grid_simd2< S, V > &ret, const Grid_simd2< S, V > &in)
accelerator_inline void zeroit(Grid_simd2< S, V > &z)
accelerator_inline Grid_simd2< S, V > operator-(Grid_simd2< S, V > a, Grid_simd2< S, V > b)
accelerator_inline void rsplat(Grid_simd2< S, V > &ret, EnableIf< is_complex< S >, S > c)
accelerator_inline void putlane(Grid_simd< S, V > &vec, const S &_S, int lane)
accelerator_inline void timesI(Grid_simd2< S, V > &ret, const Grid_simd2< S, V > &in)
Invoke< std::enable_if<!is_simd< T >::value, unsigned > > IfNotSimd
accelerator_inline void rbroadcast(Grid_simd2< S, V > &ret, const Grid_simd2< S, V > &src, int lane)
accelerator_inline Grid_simd2< S, V > trace(const Grid_simd2< S, V > &arg)
accelerator_inline void visign(Grid_simd2< S, V > &ret)
accelerator_inline Grid_simd2< S, V > outerProduct(const Grid_simd2< S, V > &l, const Grid_simd2< S, V > &r)
accelerator_inline Grid_simd2< S, V > operator/(Grid_simd2< S, V > a, Grid_simd2< S, V > b)
Grid_simd2< complex< double >, vComplexD > vComplexD2
Grid_simd2< double, vRealD > vRealD2
accelerator_inline Grid_simd2< S, V > operator+(Grid_simd2< S, V > a, Grid_simd2< S, V > b)
accelerator_inline void vsplat(Grid_simd2< S, V > &ret, ABtype a, ABtype b)
accelerator_inline void vbroadcast(Grid_simd2< S, V > &ret, const Grid_simd2< S, V > &src, int lane)
Grid_simd< complex< float >, SIMD_Ftype > vComplexF
Out accelerator_inline unary(Input src, Operation op)
Grid_simd< uint16_t, SIMD_Htype > vRealH
Grid_simd< complex< uint16_t >, SIMD_Htype > vComplexH
Grid_simd< float, SIMD_Ftype > vRealF
Grid_simd< complex< double >, SIMD_Dtype > vComplexD
Invoke< std::enable_if<!Condition::value, ReturnType > > NotEnableIf
Invoke< std::enable_if< Condition::value, ReturnType > > EnableIf
Grid_simd< Integer, SIMD_Itype > vInteger
Grid_simd< double, SIMD_Dtype > vRealD
Lattice< vobj > real(const Lattice< vobj > &lhs)
Lattice< vobj > imag(const Lattice< vobj > &lhs)
#define NAMESPACE_BEGIN(A)
accelerator_inline Grid_simd2 & operator*=(const Grid_simd2 &r)
friend accelerator_inline Scalar_type Reduce(const Grid_simd2 &in)
friend accelerator_inline void sub(Grid_simd2 *__restrict__ y, const Grid_simd2 *__restrict__ l, const Grid_simd2 *__restrict__ r)
friend accelerator_inline void exchange(Grid_simd2 &out1, Grid_simd2 &out2, Grid_simd2 in1, Grid_simd2 in2, int n)
friend accelerator_inline void exchange0(Grid_simd2 &out1, Grid_simd2 &out2, Grid_simd2 in1, Grid_simd2 in2)
friend accelerator_inline void permute0(Grid_simd2 &y, Grid_simd2 b)
static constexpr int nvec
friend accelerator_inline Grid_simd2 operator/(const Scalar_type &a, Grid_simd2 b)
friend accelerator_inline void mult(Grid_simd2 *__restrict__ y, const Scalar_type *__restrict__ l, const Grid_simd2 *__restrict__ r)
friend accelerator_inline void add(Grid_simd2 *__restrict__ y, const Grid_simd2 *__restrict__ l, const Scalar_type *__restrict__ r)
accelerator Grid_simd2()=default
friend accelerator_inline Grid_simd2 SimdApplyBinop(const functor &func, const Grid_simd2 &x, const Grid_simd2 &y)
friend accelerator_inline void permute4(Grid_simd2 &y, Grid_simd2 b)
friend accelerator_inline void exchange2(Grid_simd2 &out1, Grid_simd2 &out2, Grid_simd2 in1, Grid_simd2 in2)
accelerator_inline Grid_simd2 & operator-=(const Grid_simd2 &r)
accelerator_inline Grid_simd2 & operator=(const Grid_simd2 &&rhs)
friend accelerator_inline void sub(Grid_simd2 *__restrict__ y, const Scalar_type *__restrict__ l, const Grid_simd2 *__restrict__ r)
friend accelerator_inline void mult(Grid_simd2 *__restrict__ y, const Grid_simd2 *__restrict__ l, const Grid_simd2 *__restrict__ r)
accelerator_inline Grid_simd2(const Grid_simd2 &rhs)
accelerator_inline Grid_simd2(const typename std::enable_if< is_complex< S >::value, S >::type a)
friend accelerator_inline void mac(Grid_simd2 *__restrict__ y, const Grid_simd2 *__restrict__ a, const Scalar_type *__restrict__ x)
friend accelerator_inline void mult(Grid_simd2 *__restrict__ y, const Grid_simd2 *__restrict__ l, const Scalar_type *__restrict__ r)
friend accelerator_inline void mac(Grid_simd2 *__restrict__ y, const Scalar_type *__restrict__ a, const Grid_simd2 *__restrict__ x)
friend accelerator_inline void permute(Grid_simd2 &y, Grid_simd2 b, int perm)
friend accelerator_inline Grid_simd2 operator*(Grid_simd2 b, const Scalar_type &a)
accelerator_inline void putlane(const Scalar_type &S, int lane)
friend accelerator_inline Grid_simd2 operator/(Grid_simd2 b, const Scalar_type &a)
static accelerator_inline constexpr int Nsimd(void)
friend accelerator_inline void add(Grid_simd2 *__restrict__ y, const Scalar_type *__restrict__ l, const Grid_simd2 *__restrict__ r)
accelerator_inline Grid_simd2 & operator=(const Grid_simd2 &rhs)
accelerator_inline Grid_simd2(const Real a)
accelerator_inline Grid_simd2(const Grid_simd2 &&rhs)
friend accelerator_inline Grid_simd2 operator*(const Scalar_type &a, Grid_simd2 b)
friend accelerator_inline void vprefetch(const Grid_simd2 &v)
friend accelerator_inline void mac(Grid_simd2 *__restrict__ y, const Grid_simd2 *__restrict__ a, const Grid_simd2 *__restrict__ x)
friend accelerator_inline void sub(Grid_simd2 *__restrict__ y, const Grid_simd2 *__restrict__ l, const Scalar_type *__restrict__ r)
friend accelerator_inline void exchange1(Grid_simd2 &out1, Grid_simd2 &out2, Grid_simd2 in1, Grid_simd2 in2)
friend accelerator_inline Grid_simd2 SimdApply(const functor &func, const Grid_simd2 &v)
union Grid_simd2::conv_t_union conv_t
friend accelerator_inline void vstore(const Grid_simd2 &ret, Scalar_type *a)
friend accelerator_inline void permute1(Grid_simd2 &y, Grid_simd2 b)
accelerator_inline Grid_simd2 & operator=(const Zero &z)
friend accelerator_inline void exchange4(Grid_simd2 &out1, Grid_simd2 &out2, Grid_simd2 in1, Grid_simd2 in2)
friend accelerator_inline void permute2(Grid_simd2 &y, Grid_simd2 b)
friend accelerator_inline Grid_simd2 operator-(const Grid_simd2 &r)
friend accelerator_inline void exchange3(Grid_simd2 &out1, Grid_simd2 &out2, Grid_simd2 in1, Grid_simd2 in2)
friend accelerator_inline void vset(Grid_simd2 &ret, Scalar_type *a)
accelerator_inline Scalar_type getlane(int lane) const
accelerator_inline Grid_simd2 & operator+=(const Grid_simd2 &r)
friend accelerator_inline void add(Grid_simd2 *__restrict__ y, const Grid_simd2 *__restrict__ l, const Grid_simd2 *__restrict__ r)
friend accelerator_inline void permute3(Grid_simd2 &y, Grid_simd2 b)
RealPart< Scalar_type >::type Real
accelerator_inline Scalar_type getlane(int lane) const
static accelerator_inline constexpr int Nsimd(void)
accelerator_inline conv_t_union()
Scalar_type s[sizeof(Vector_type)/sizeof(Scalar_type)]