1#ifndef SSE_FUSED_SPIN_PROJ_H
2#define SSE_FUSED_SPIN_PROJ_H
5#include "sse_mult_adj_su3_mat_hwvec.h"
35 template<
class T1,
class T2>
58template<
class T1,
class C1,
class T2,
class C2>
82 CreateLeaf<QDPExpr<NewExpr1_t,C1> >::make(NewExpr1_t(l.expression().child())),
83 CreateLeaf<QDPExpr<NewExpr2_t,C2> >::make(NewExpr2_t(r.expression().child()))
96template<
typename T1,
typename T2>
104 return(
adj(a)*tmp );
119 &(d.elem(0).elem(0).real()),
122 su3_matrixf *am = (su3_matrixf *)&(a.
elem().elem(0,0).real());
123 half_wilson_vectorf *dh = (half_wilson_vectorf *)&(d.elem(0).elem(0).real());
124 half_wilson_vectorf *reth = (half_wilson_vectorf *)&(ret.elem(0).elem(0).real());
126 intrin_sse_mult_adj_su3_mat_hwvec(am, dh, reth);
143struct FnAdjMultSprojDir0Minus
150 template<
class T1,
class T2>
170template<
class T1,
class C1,
class T2,
class C2>
194 CreateLeaf<QDPExpr<NewExpr1_t,C1> >::make(NewExpr1_t(l.expression().child())),
195 CreateLeaf<QDPExpr<NewExpr2_t,C2> >::make(NewExpr2_t(r.expression().child()))
208template<
typename T1,
typename T2>
216 return(
adj(a)*tmp );
230 &(d.elem(0).elem(0).real()),
233 su3_matrixf *am = (su3_matrixf *)&(a.
elem().elem(0,0).real());
234 half_wilson_vectorf *dh = (half_wilson_vectorf *)&(d.elem(0).elem(0).real());
235 half_wilson_vectorf *reth = (half_wilson_vectorf *)&(ret.elem(0).elem(0).real());
237 intrin_sse_mult_adj_su3_mat_hwvec(am, dh, reth);
253struct FnAdjMultSprojDir1Plus
260 template<
class T1,
class T2>
280template<
class T1,
class C1,
class T2,
class C2>
304 CreateLeaf<QDPExpr<NewExpr1_t,C1> >::make(NewExpr1_t(l.expression().child())),
305 CreateLeaf<QDPExpr<NewExpr2_t,C2> >::make(NewExpr2_t(r.expression().child()))
318template<
typename T1,
typename T2>
326 return(
adj(a)*tmp );
340 &(d.elem(0).elem(0).real()),
344 su3_matrixf *am = (su3_matrixf *)&(a.
elem().elem(0,0).real());
345 half_wilson_vectorf *dh = (half_wilson_vectorf *)&(d.elem(0).elem(0).real());
346 half_wilson_vectorf *reth = (half_wilson_vectorf *)&(ret.elem(0).elem(0).real());
348 intrin_sse_mult_adj_su3_mat_hwvec(am, dh, reth);
364struct FnAdjMultSprojDir1Minus
371 template<
class T1,
class T2>
392template<
class T1,
class C1,
class T2,
class C2>
416 CreateLeaf<QDPExpr<NewExpr1_t,C1> >::make(NewExpr1_t(l.expression().child())),
417 CreateLeaf<QDPExpr<NewExpr2_t,C2> >::make(NewExpr2_t(r.expression().child()))
430template<
typename T1,
typename T2>
438 return(
adj(a)*tmp );
453 &(d.elem(0).elem(0).real()),
456 su3_matrixf *am = (su3_matrixf *)&(a.
elem().elem(0,0).real());
457 half_wilson_vectorf *dh = (half_wilson_vectorf *)&(d.elem(0).elem(0).real());
458 half_wilson_vectorf *reth = (half_wilson_vectorf *)&(ret.elem(0).elem(0).real());
460 intrin_sse_mult_adj_su3_mat_hwvec(am, dh, reth);
476struct FnAdjMultSprojDir2Plus
483 template<
class T1,
class T2>
503template<
class T1,
class C1,
class T2,
class C2>
527 CreateLeaf<QDPExpr<NewExpr1_t,C1> >::make(NewExpr1_t(l.expression().child())),
528 CreateLeaf<QDPExpr<NewExpr2_t,C2> >::make(NewExpr2_t(r.expression().child()))
541template<
typename T1,
typename T2>
549 return(
adj(a)*tmp );
563 &(d.elem(0).elem(0).real()),
566 su3_matrixf *am = (su3_matrixf *)&(a.
elem().elem(0,0).real());
567 half_wilson_vectorf *dh = (half_wilson_vectorf *)&(d.elem(0).elem(0).real());
568 half_wilson_vectorf *reth = (half_wilson_vectorf *)&(ret.elem(0).elem(0).real());
570 intrin_sse_mult_adj_su3_mat_hwvec(am, dh, reth);
585struct FnAdjMultSprojDir2Minus
592 template<
class T1,
class T2>
613template<
class T1,
class C1,
class T2,
class C2>
637 CreateLeaf<QDPExpr<NewExpr1_t,C1> >::make(NewExpr1_t(l.expression().child())),
638 CreateLeaf<QDPExpr<NewExpr2_t,C2> >::make(NewExpr2_t(r.expression().child()))
651template<
typename T1,
typename T2>
659 return(
adj(a)*tmp );
673 &(d.elem(0).elem(0).real()),
676 su3_matrixf *am = (su3_matrixf *)&(a.
elem().elem(0,0).real());
677 half_wilson_vectorf *dh = (half_wilson_vectorf *)&(d.elem(0).elem(0).real());
678 half_wilson_vectorf *reth = (half_wilson_vectorf *)&(ret.elem(0).elem(0).real());
680 intrin_sse_mult_adj_su3_mat_hwvec(am, dh, reth);
694struct FnAdjMultSprojDir3Plus
701 template<
class T1,
class T2>
721template<
class T1,
class C1,
class T2,
class C2>
745 CreateLeaf<QDPExpr<NewExpr1_t,C1> >::make(NewExpr1_t(l.expression().child())),
746 CreateLeaf<QDPExpr<NewExpr2_t,C2> >::make(NewExpr2_t(r.expression().child()))
759template<
typename T1,
typename T2>
767 return(
adj(a)*tmp );
781 &(d.elem(0).elem(0).real()),
785 su3_matrixf *am = (su3_matrixf *)&(a.
elem().elem(0,0).real());
786 half_wilson_vectorf *dh = (half_wilson_vectorf *)&(d.elem(0).elem(0).real());
787 half_wilson_vectorf *reth = (half_wilson_vectorf *)&(ret.elem(0).elem(0).real());
789 intrin_sse_mult_adj_su3_mat_hwvec(am, dh, reth);
804struct FnAdjMultSprojDir3Minus
811 template<
class T1,
class T2>
832template<
class T1,
class C1,
class T2,
class C2>
856 CreateLeaf<QDPExpr<NewExpr1_t,C1> >::make(NewExpr1_t(l.expression().child())),
857 CreateLeaf<QDPExpr<NewExpr2_t,C2> >::make(NewExpr2_t(r.expression().child()))
870template<
typename T1,
typename T2>
878 return(
adj(a)*tmp );
892 &(d.elem(0).elem(0).real()),
895 su3_matrixf *am = (su3_matrixf *)&(a.
elem().elem(0,0).real());
896 half_wilson_vectorf *dh = (half_wilson_vectorf *)&(d.elem(0).elem(0).real());
897 half_wilson_vectorf *reth = (half_wilson_vectorf *)&(ret.elem(0).elem(0).real());
899 intrin_sse_mult_adj_su3_mat_hwvec(am, dh, reth);
#define PETE_EMPTY_CONSTRUCTORS(CLASS)
Primitive color Matrix class.
Primitive color Vector class.
Primitive spin Vector class.
Yet another random number generator.
MakeReturn< UnaryNode< FnAdjoint, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnAdjoint >::Type_t >::Expression_t adj(const QDPExpr< T1, C1 > &l)
MakeReturn< UnaryNode< FnSpinProjectDir2Minus, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnSpinProjectDir2Minus >::Type_t >::Expression_t spinProjectDir2Minus(const QDPExpr< T1, C1 > &l)
BinaryReturn< T1, T2, FnAdjMultSprojDir3Minus >::Type_t adjMultSprojDir3Minus(const T1 &a, const T2 &b)
PSpinVector< ColVec32, 2 > Spin2_32
MakeReturn< UnaryNode< FnSpinProjectDir1Minus, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnSpinProjectDir1Minus >::Type_t >::Expression_t spinProjectDir1Minus(const QDPExpr< T1, C1 > &l)
BinaryReturn< T1, T2, FnAdjMultSprojDir0Minus >::Type_t adjMultSprojDir0Minus(const T1 &a, const T2 &b)
MakeReturn< UnaryNode< FnSpinProjectDir0Plus, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnSpinProjectDir0Plus >::Type_t >::Expression_t spinProjectDir0Plus(const QDPExpr< T1, C1 > &l)
PColorMatrix< RComplex< REAL32 >, 3 > ColMat32
MakeReturn< BinaryNode< OpMultiply, typenameCreateLeaf< QDPType< T1, C1 > >::Leaf_t, typenameCreateLeaf< QDPExpr< T2, C2 > >::Leaf_t >, typenameBinaryReturn< C1, C2, OpMultiply >::Type_t >::Expression_t operator*(const QDPType< T1, C1 > &l, const QDPExpr< T2, C2 > &r)
BinaryReturn< T1, T2, FnAdjMultSprojDir2Plus >::Type_t adjMultSprojDir2Plus(const T1 &a, const T2 &b)
MakeReturn< UnaryNode< FnSpinProjectDir3Minus, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnSpinProjectDir3Minus >::Type_t >::Expression_t spinProjectDir3Minus(const QDPExpr< T1, C1 > &l)
BinaryReturn< T1, T2, FnAdjMultSprojDir1Minus >::Type_t adjMultSprojDir1Minus(const T1 &a, const T2 &b)
void inlineSpinProjDir0Minus(const REAL *src, REAL *dst, unsigned int n_vec)
Spin Project (1/2)(1-\gamma_0).
BinaryReturn< T1, T2, FnAdjMultSprojDir0Plus >::Type_t adjMultSprojDir0Plus(const T1 &a, const T2 &b)
PColorVector< RComplex< REAL32 >, 3 > ColVec32
void inlineSpinProjDir0Plus(const REAL *src, REAL *dst, unsigned int n_vec)
Spin Project (1/2)(1+\gamma_0).
BinaryReturn< T1, T2, FnAdjMultSprojDir2Minus >::Type_t adjMultSprojDir2Minus(const T1 &a, const T2 &b)
MakeReturn< UnaryNode< FnSpinProjectDir2Plus, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnSpinProjectDir2Plus >::Type_t >::Expression_t spinProjectDir2Plus(const QDPExpr< T1, C1 > &l)
void inlineSpinProjDir1Minus(const REAL *src, REAL *dst, unsigned int n_vec)
Spin Project (1/2)(1-\gamma_1).
PSpinVector< ColVec32, 4 > Spin4_32
void inlineSpinProjDir1Plus(const REAL *src, REAL *dst, unsigned int n_vec)
Spin Project (1/2)(1+\gamma_1).
BinaryReturn< T1, T2, FnAdjMultSprojDir3Plus >::Type_t adjMultSprojDir3Plus(const T1 &a, const T2 &b)
void inlineSpinProjDir3Plus(const REAL *src, REAL *dst, unsigned int n_vec)
Spin Project (1/2)(1+\gamma_3).
MakeReturn< UnaryNode< FnSpinProjectDir3Plus, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnSpinProjectDir3Plus >::Type_t >::Expression_t spinProjectDir3Plus(const QDPExpr< T1, C1 > &l)
void inlineSpinProjDir3Minus(const REAL *src, REAL *dst, unsigned int n_vec)
Spin Project (1/2)(1-\gamma_3).
void inlineSpinProjDir2Minus(const REAL *src, REAL *dst, unsigned int n_vec)
Spin Project (1/2)(1-\gamma_2).
BinaryReturn< T1, T2, FnAdjMultSprojDir1Plus >::Type_t adjMultSprojDir1Plus(const T1 &a, const T2 &b)
void inlineSpinProjDir2Plus(const REAL *src, REAL *dst, unsigned int n_vec)
Spin Project (1/2)(1+\gamma_2).
MakeReturn< UnaryNode< FnSpinProjectDir0Minus, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnSpinProjectDir0Minus >::Type_t >::Expression_t spinProjectDir0Minus(const QDPExpr< T1, C1 > &l)
MakeReturn< UnaryNode< FnSpinProjectDir1Plus, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnSpinProjectDir1Plus >::Type_t >::Expression_t spinProjectDir1Plus(const QDPExpr< T1, C1 > &l)
Promote< T1, T2 >::Type_t Type_t
Promote< T1, T2 >::Type_t Type_t
BinaryReturn< T1, T2, FnAdjMultSprojDir0Minus >::Type_t operator()(const T1 &a, const T2 &b) const
BinaryReturn< T1, T2, FnAdjMultSprojDir0Plus >::Type_t operator()(const T1 &a, const T2 &b) const
BinaryReturn< T1, T2, FnAdjMultSprojDir1Minus >::Type_t operator()(const T1 &a, const T2 &b) const
BinaryReturn< T1, T2, FnAdjMultSprojDir1Plus >::Type_t operator()(const T1 &a, const T2 &b) const
BinaryReturn< T1, T2, FnAdjMultSprojDir2Minus >::Type_t operator()(const T1 &a, const T2 &b) const
BinaryReturn< T1, T2, FnAdjMultSprojDir2Plus >::Type_t operator()(const T1 &a, const T2 &b) const
BinaryReturn< T1, T2, FnAdjMultSprojDir3Minus >::Type_t operator()(const T1 &a, const T2 &b) const
BinaryReturn< T1, T2, FnAdjMultSprojDir3Plus >::Type_t operator()(const T1 &a, const T2 &b) const