1#ifndef SSE_FUSED_SPIN_RECON_H
2#define SSE_FUSED_SPIN_RECON_H
4#include "sse_mult_su3_mat_hwvec.h"
43 template<
class T1,
class T2,
int N>
54template<
class T1,
class T2,
int N>
55struct BinaryReturn< PScalar<T1>, PSpinVector<T2, N>, FnSReconDir0MinusProd>
62template<
class T1,
class T2,
int N>
74template<
class T1,
class T2,
template<
class>
class C,
int N >
81 Reference< QDPType< PScalar<T1> ,
C<PScalar<T1> > > >,
82 Reference< QDPType< PSpinVector<T2,N>,
C<PSpinVector<T2,N> > > >
84 typename BinaryReturn< QDPType< PScalar<T1> ,
C<PScalar<T1> > >,
85 QDPType< PSpinVector<T2,N>,
C<PSpinVector<T2,N> > >,
97 CreateLeaf<QDPType<PScalar<T1> ,
C<PScalar<T1> > > >::make(l.expression().left()),
98 CreateLeaf<QDPType<PSpinVector<T2,N>,
C<PSpinVector<T2,N> > > >::make(l.expression().right())
112 template<
class T1,
class T2,
int N>
113 inline typename BinaryReturn<PScalar<T1>, PSpinVector<T2,N>, FnSReconDir0PlusProd>::Type_t
123template<
class T1,
class T2,
int N>
124struct BinaryReturn< PScalar<T1>, PSpinVector<T2, N>, FnSReconDir0PlusProd>
131template<
class T1,
class T2,
int N>
143template<
class T1,
class T2,
template<
class>
class C,
int N >
150 Reference< QDPType< PScalar<T1> ,
C<PScalar<T1> > > >,
151 Reference< QDPType< PSpinVector<T2,N>,
C<PSpinVector<T2,N> > > >
153 typename BinaryReturn< QDPType< PScalar<T1> ,
C<PScalar<T1> > >,
154 QDPType< PSpinVector<T2,N>,
C<PSpinVector<T2,N> > >,
166 CreateLeaf<QDPType<PScalar<T1> ,
C<PScalar<T1> > > >::make(l.expression().left()),
167 CreateLeaf<QDPType<PSpinVector<T2,N>,
C<PSpinVector<T2,N> > > >::make(l.expression().right())
181 template<
class T1,
class T2,
int N>
182 inline typename BinaryReturn<PScalar<T1>, PSpinVector<T2,N>, FnSReconDir1MinusProd>::Type_t
192template<
class T1,
class T2,
int N>
193struct BinaryReturn< PScalar<T1>, PSpinVector<T2, N>, FnSReconDir1MinusProd>
200template<
class T1,
class T2,
int N>
212template<
class T1,
class T2,
template<
class>
class C,
int N >
219 Reference< QDPType< PScalar<T1> ,
C<PScalar<T1> > > >,
220 Reference< QDPType< PSpinVector<T2,N>,
C<PSpinVector<T2,N> > > >
222 typename BinaryReturn< QDPType< PScalar<T1> ,
C<PScalar<T1> > >,
223 QDPType< PSpinVector<T2,N>,
C<PSpinVector<T2,N> > >,
235 CreateLeaf<QDPType<PScalar<T1> ,
C<PScalar<T1> > > >::make(l.expression().left()),
236 CreateLeaf<QDPType<PSpinVector<T2,N>,
C<PSpinVector<T2,N> > > >::make(l.expression().right())
250 template<
class T1,
class T2,
int N>
251 inline typename BinaryReturn<PScalar<T1>, PSpinVector<T2,N>, FnSReconDir1PlusProd>::Type_t
261template<
class T1,
class T2,
int N>
262struct BinaryReturn< PScalar<T1>, PSpinVector<T2, N>, FnSReconDir1PlusProd>
269template<
class T1,
class T2,
int N>
281template<
class T1,
class T2,
template<
class>
class C,
int N >
288 Reference< QDPType< PScalar<T1> ,
C<PScalar<T1> > > >,
289 Reference< QDPType< PSpinVector<T2,N>,
C<PSpinVector<T2,N> > > >
291 typename BinaryReturn< QDPType< PScalar<T1> ,
C<PScalar<T1> > >,
292 QDPType< PSpinVector<T2,N>,
C<PSpinVector<T2,N> > >,
304 CreateLeaf<QDPType<PScalar<T1> ,
C<PScalar<T1> > > >::make(l.expression().left()),
305 CreateLeaf<QDPType<PSpinVector<T2,N>,
C<PSpinVector<T2,N> > > >::make(l.expression().right())
320 template<
class T1,
class T2,
int N>
321 inline typename BinaryReturn<PScalar<T1>, PSpinVector<T2,N>, FnSReconDir2MinusProd>::Type_t
331template<
class T1,
class T2,
int N>
332struct BinaryReturn< PScalar<T1>, PSpinVector<T2, N>, FnSReconDir2MinusProd>
339template<
class T1,
class T2,
int N>
351template<
class T1,
class T2,
template<
class>
class C,
int N >
358 Reference< QDPType< PScalar<T1> ,
C<PScalar<T1> > > >,
359 Reference< QDPType< PSpinVector<T2,N>,
C<PSpinVector<T2,N> > > >
361 typename BinaryReturn< QDPType< PScalar<T1> ,
C<PScalar<T1> > >,
362 QDPType< PSpinVector<T2,N>,
C<PSpinVector<T2,N> > >,
374 CreateLeaf<QDPType<PScalar<T1> ,
C<PScalar<T1> > > >::make(l.expression().left()),
375 CreateLeaf<QDPType<PSpinVector<T2,N>,
C<PSpinVector<T2,N> > > >::make(l.expression().right())
389 template<
class T1,
class T2,
int N>
390 inline typename BinaryReturn<PScalar<T1>, PSpinVector<T2,N>, FnSReconDir2PlusProd>::Type_t
400template<
class T1,
class T2,
int N>
401struct BinaryReturn< PScalar<T1>, PSpinVector<T2, N>, FnSReconDir2PlusProd>
408template<
class T1,
class T2,
int N>
420template<
class T1,
class T2,
template<
class>
class C,
int N >
427 Reference< QDPType< PScalar<T1> ,
C<PScalar<T1> > > >,
428 Reference< QDPType< PSpinVector<T2,N>,
C<PSpinVector<T2,N> > > >
430 typename BinaryReturn< QDPType< PScalar<T1> ,
C<PScalar<T1> > >,
431 QDPType< PSpinVector<T2,N>,
C<PSpinVector<T2,N> > >,
443 CreateLeaf<QDPType<PScalar<T1> ,
C<PScalar<T1> > > >::make(l.expression().left()),
444 CreateLeaf<QDPType<PSpinVector<T2,N>,
C<PSpinVector<T2,N> > > >::make(l.expression().right())
459 template<
class T1,
class T2,
int N>
460 inline typename BinaryReturn<PScalar<T1>, PSpinVector<T2,N>, FnSReconDir3MinusProd>::Type_t
470template<
class T1,
class T2,
int N>
471struct BinaryReturn< PScalar<T1>, PSpinVector<T2, N>, FnSReconDir3MinusProd>
478template<
class T1,
class T2,
int N>
490template<
class T1,
class T2,
template<
class>
class C,
int N >
497 Reference< QDPType< PScalar<T1> ,
C<PScalar<T1> > > >,
498 Reference< QDPType< PSpinVector<T2,N>,
C<PSpinVector<T2,N> > > >
500 typename BinaryReturn< QDPType< PScalar<T1> ,
C<PScalar<T1> > >,
501 QDPType< PSpinVector<T2,N>,
C<PSpinVector<T2,N> > >,
512 CreateLeaf<QDPType<PScalar<T1> ,
C<PScalar<T1> > > >::make(l.expression().left()),
513 CreateLeaf<QDPType<PSpinVector<T2,N>,
C<PSpinVector<T2,N> > > >::make(l.expression().right())
527 template<
class T1,
class T2,
int N>
528 inline typename BinaryReturn<PScalar<T1>, PSpinVector<T2,N>, FnSReconDir3PlusProd>::Type_t
538template<
class T1,
class T2,
int N>
539struct BinaryReturn< PScalar<T1>, PSpinVector<T2, N>, FnSReconDir3PlusProd>
546template<
class T1,
class T2,
int N>
558template<
class T1,
class T2,
template<
class>
class C,
int N >
565 Reference< QDPType< PScalar<T1> ,
C<PScalar<T1> > > >,
566 Reference< QDPType< PSpinVector<T2,N>,
C<PSpinVector<T2,N> > > >
568 typename BinaryReturn< QDPType< PScalar<T1> ,
C<PScalar<T1> > >,
569 QDPType< PSpinVector<T2,N>,
C<PSpinVector<T2,N> > >,
580 CreateLeaf<QDPType<PScalar<T1> ,
C<PScalar<T1> > > >::make(l.expression().left()),
581 CreateLeaf<QDPType<PSpinVector<T2,N>,
C<PSpinVector<T2,N> > > >::make(l.expression().right())
602 su3_matrixf *am = (su3_matrixf *)&( a.
elem().elem(0,0).real());
603 half_wilson_vectorf *bh = (half_wilson_vectorf *)&( b.
elem(0).elem(0).real());
604 half_wilson_vectorf *dh = (half_wilson_vectorf *)&( d.
elem(0).elem(0).real());
606 intrin_sse_mult_su3_mat_hwvec(am,bh,dh);
609 &(ret.elem(0).elem(0).real()),
624 su3_matrixf *am = (su3_matrixf *)&( a.
elem().elem(0,0).real());
625 half_wilson_vectorf *bh = (half_wilson_vectorf *)&( b.
elem(0).elem(0).real());
626 half_wilson_vectorf *dh = (half_wilson_vectorf *)&( d.
elem(0).elem(0).real());
628 intrin_sse_mult_su3_mat_hwvec(am,bh,dh);
631 &(ret.elem(0).elem(0).real()),
646 su3_matrixf *am = (su3_matrixf *)&( a.
elem().elem(0,0).real());
647 half_wilson_vectorf *bh = (half_wilson_vectorf *)&( b.
elem(0).elem(0).real());
648 half_wilson_vectorf *dh = (half_wilson_vectorf *)&( d.
elem(0).elem(0).real());
650 intrin_sse_mult_su3_mat_hwvec(am,bh,dh);
653 &(ret.elem(0).elem(0).real()),
667 su3_matrixf *am = (su3_matrixf *)&( a.
elem().elem(0,0).real());
668 half_wilson_vectorf *bh = (half_wilson_vectorf *)&( b.
elem(0).elem(0).real());
669 half_wilson_vectorf *dh = (half_wilson_vectorf *)&( d.
elem(0).elem(0).real());
671 intrin_sse_mult_su3_mat_hwvec(am,bh,dh);
675 &(ret.elem(0).elem(0).real()),
689 su3_matrixf *am = (su3_matrixf *)&( a.
elem().elem(0,0).real());
690 half_wilson_vectorf *bh = (half_wilson_vectorf *)&( b.
elem(0).elem(0).real());
691 half_wilson_vectorf *dh = (half_wilson_vectorf *)&( d.
elem(0).elem(0).real());
693 intrin_sse_mult_su3_mat_hwvec(am,bh,dh);
696 &(ret.elem(0).elem(0).real()),
710 su3_matrixf *am = (su3_matrixf *)&( a.
elem().elem(0,0).real());
711 half_wilson_vectorf *bh = (half_wilson_vectorf *)&( b.
elem(0).elem(0).real());
712 half_wilson_vectorf *dh = (half_wilson_vectorf *)&( d.
elem(0).elem(0).real());
714 intrin_sse_mult_su3_mat_hwvec(am,bh,dh);
717 &(ret.elem(0).elem(0).real()),
732 su3_matrixf *am = (su3_matrixf *)&( a.
elem().elem(0,0).real());
733 half_wilson_vectorf *bh = (half_wilson_vectorf *)&( b.
elem(0).elem(0).real());
734 half_wilson_vectorf *dh = (half_wilson_vectorf *)&( d.
elem(0).elem(0).real());
736 intrin_sse_mult_su3_mat_hwvec(am,bh,dh);
739 &(ret.elem(0).elem(0).real()),
754 su3_matrixf *am = (su3_matrixf *)&( a.
elem().elem(0,0).real());
755 half_wilson_vectorf *bh = (half_wilson_vectorf *)&( b.
elem(0).elem(0).real());
756 half_wilson_vectorf *dh = (half_wilson_vectorf *)&( d.
elem(0).elem(0).real());
758 intrin_sse_mult_su3_mat_hwvec(am,bh,dh);
761 &(ret.elem(0).elem(0).real()),
#define PETE_EMPTY_CONSTRUCTORS(CLASS)
Outer grid Scalar class */.
Primitive color Matrix class.
Primitive color Vector class.
Primitive spin Vector class.
QDPType - major type class/container for all QDP objects.
Yet another random number generator.
BinaryReturn< PScalar< T1 >, PSpinVector< T2, N >, FnSReconDir2PlusProd >::Type_t sreconDir2Plus(const PScalar< T1 > &a, const PSpinVector< T2, N > &b)
void inlineSpinReconDir0Minus(const REAL *src, REAL *dst, unsigned int n_vec)
Spin recon (1/2)(1-\gamma_0).
PSpinVector< ColVec32, 2 > Spin2_32
PColorMatrix< RComplex< REAL32 >, 3 > ColMat32
MakeReturn< UnaryNode< FnSpinReconstructDir2Minus, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnSpinReconstructDir2Minus >::Type_t >::Expression_t spinReconstructDir2Minus(const QDPExpr< T1, C1 > &l)
void inlineSpinReconDir2Plus(const REAL *src, REAL *dst, unsigned int n_vec)
Spin recon (1/2)(1+\gamma_2).
MakeReturn< UnaryNode< FnSpinReconstructDir2Plus, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnSpinReconstructDir2Plus >::Type_t >::Expression_t spinReconstructDir2Plus(const QDPExpr< T1, C1 > &l)
void inlineSpinReconDir1Minus(const REAL *src, REAL *dst, unsigned int n_vec)
Spin recon (1/2)(1-\gamma_1).
BinaryReturn< PScalar< T1 >, PSpinVector< T2, N >, FnSReconDir3PlusProd >::Type_t sreconDir3Plus(const PScalar< T1 > &a, const PSpinVector< T2, N > &b)
MakeReturn< UnaryNode< FnSpinReconstructDir0Plus, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnSpinReconstructDir0Plus >::Type_t >::Expression_t spinReconstructDir0Plus(const QDPExpr< T1, C1 > &l)
PColorVector< RComplex< REAL32 >, 3 > ColVec32
BinaryReturn< PScalar< T1 >, PSpinVector< T2, N >, FnSReconDir0MinusProd >::Type_t sreconDir0Minus(const PScalar< T1 > &a, const PSpinVector< T2, N > &b)
MakeReturn< UnaryNode< FnSpinReconstructDir1Plus, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnSpinReconstructDir1Plus >::Type_t >::Expression_t spinReconstructDir1Plus(const QDPExpr< T1, C1 > &l)
BinaryReturn< PScalar< T1 >, PSpinVector< T2, N >, FnSReconDir3MinusProd >::Type_t sreconDir3Minus(const PScalar< T1 > &a, const PSpinVector< T2, N > &b)
MakeReturn< UnaryNode< FnSpinReconstructDir1Minus, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnSpinReconstructDir1Minus >::Type_t >::Expression_t spinReconstructDir1Minus(const QDPExpr< T1, C1 > &l)
PSpinVector< ColVec32, 4 > Spin4_32
BinaryReturn< PScalar< T1 >, PSpinVector< T2, N >, FnSReconDir1PlusProd >::Type_t sreconDir1Plus(const PScalar< T1 > &a, const PSpinVector< T2, N > &b)
void inlineSpinReconDir2Minus(const REAL *src, REAL *dst, unsigned int n_vec)
Spin recon (1/2)(1-\gamma_2).
BinaryReturn< PScalar< T1 >, PSpinVector< T2, N >, FnSReconDir0PlusProd >::Type_t sreconDir0Plus(const PScalar< T1 > &a, const PSpinVector< T2, N > &b)
BinaryReturn< PScalar< T1 >, PSpinVector< T2, N >, FnSReconDir1MinusProd >::Type_t sreconDir1Minus(const PScalar< T1 > &a, const PSpinVector< T2, N > &b)
BinaryReturn< PScalar< T1 >, PSpinVector< T2, N >, FnSReconDir2MinusProd >::Type_t sreconDir2Minus(const PScalar< T1 > &a, const PSpinVector< T2, N > &b)
MakeReturn< UnaryNode< FnSpinReconstructDir3Minus, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnSpinReconstructDir3Minus >::Type_t >::Expression_t spinReconstructDir3Minus(const QDPExpr< T1, C1 > &l)
void inlineSpinReconDir3Minus(const REAL *src, REAL *dst, unsigned int n_vec)
Spin recon (1/2)(1-\gamma3).
void inlineSpinReconDir3Plus(const REAL *src, REAL *dst, unsigned int n_vec)
Spin recon (1/2)(1+\gamma3).
MakeReturn< UnaryNode< FnSpinReconstructDir0Minus, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnSpinReconstructDir0Minus >::Type_t >::Expression_t spinReconstructDir0Minus(const QDPExpr< T1, C1 > &l)
void inlineSpinReconDir1Plus(const REAL *src, REAL *dst, unsigned int n_vec)
Spin recon (1/2)(1+\gamma_1).
void inlineSpinReconDir0Plus(const REAL *src, REAL *dst, unsigned int n_vec)
Spin recon (1/2)(1+\gamma_0).
MakeReturn< UnaryNode< FnSpinReconstructDir3Plus, typenameCreateLeaf< QDPExpr< T1, C1 > >::Leaf_t >, typenameUnaryReturn< C1, FnSpinReconstructDir3Plus >::Type_t >::Expression_t spinReconstructDir3Plus(const QDPExpr< T1, C1 > &l)
OLattice< PScalar< PColorMatrix< RComplexFloat, 3 > > > C
UnaryReturn< PSpinVector< T2, N >, FnSpinReconstructDir0Minus >::Type_t Type_t
UnaryReturn< PSpinVector< T2, N >, FnSpinReconstructDir0Plus >::Type_t Type_t
UnaryReturn< PSpinVector< T2, N >, FnSpinReconstructDir1Minus >::Type_t Type_t
UnaryReturn< PSpinVector< T2, N >, FnSpinReconstructDir1Plus >::Type_t Type_t
UnaryReturn< PSpinVector< T2, N >, FnSpinReconstructDir2Minus >::Type_t Type_t
UnaryReturn< PSpinVector< T2, N >, FnSpinReconstructDir2Plus >::Type_t Type_t
UnaryReturn< PSpinVector< T2, N >, FnSpinReconstructDir3Minus >::Type_t Type_t
UnaryReturn< PSpinVector< T2, N >, FnSpinReconstructDir3Plus >::Type_t Type_t
OLattice< Spin2_32 > Type_t
OScalar< Spin2_32 > Type_t
Reconstruct Dir0Minus Fused.
BinaryReturn< PScalar< T1 >, PSpinVector< T2, N >, FnSReconDir0MinusProd >::Type_t operator()(const PScalar< T1 > &a, const PSpinVector< T2, N > &b) const
Reconstruct Dir0Plus Fused.
BinaryReturn< PScalar< T1 >, PSpinVector< T2, N >, FnSReconDir0PlusProd >::Type_t operator()(const PScalar< T1 > &a, const PSpinVector< T2, N > &b) const
Reconstruct Dir1Minus Fused.
BinaryReturn< PScalar< T1 >, PSpinVector< T2, N >, FnSReconDir1MinusProd >::Type_t operator()(const PScalar< T1 > &a, const PSpinVector< T2, N > &b) const
Reconstruct Dir1Plus Fused.
BinaryReturn< PScalar< T1 >, PSpinVector< T2, N >, FnSReconDir1PlusProd >::Type_t operator()(const PScalar< T1 > &a, const PSpinVector< T2, N > &b) const
Reconstruct Dir2Minus Fused.
BinaryReturn< PScalar< T1 >, PSpinVector< T2, N >, FnSReconDir2MinusProd >::Type_t operator()(const PScalar< T1 > &a, const PSpinVector< T2, N > &b) const
Reconstruct Dir2Plus Fused.
BinaryReturn< PScalar< T1 >, PSpinVector< T2, N >, FnSReconDir2PlusProd >::Type_t operator()(const PScalar< T1 > &a, const PSpinVector< T2, N > &b) const
Reconstruct Dir3Minus Fused.
BinaryReturn< PScalar< T1 >, PSpinVector< T2, N >, FnSReconDir3MinusProd >::Type_t operator()(const PScalar< T1 > &a, const PSpinVector< T2, N > &b) const
Reconstruct Dir3Plus Fused.
BinaryReturn< PScalar< T1 >, PSpinVector< T2, N >, FnSReconDir3PlusProd >::Type_t operator()(const PScalar< T1 > &a, const PSpinVector< T2, N > &b) const