QDP++
qdp_scalarvecsite_sse_blas.h
Go to the documentation of this file.
1// $Id: qdp_scalarvecsite_sse_blas.h,v 1.5 2007-06-10 14:32:11 edwards Exp $
7
8
9#ifndef QDP_SCALARVECSITE_SSE_BLAS_H
10#define QDP_SCALARVECSITE_SSE_BLAS_H
12namespace QDP {
13
14// #define QDP_SCALARVECSITE_BLAS_DEBUG
15
16#define QDP_SCALARVECSITE_USE_EVALUATE
17#include "qdp_sse_intrin.h"
18
23
24
25// d = Scalar*ColorMatrix
26template<>
28operator*(const TScal& l, const TCMat& r)
29{
31
32#if defined(QDP_SCALARVECSITE_BLAS_DEBUG)
33 cout << "M*S" << endl;
34#endif
35
36 vReal32 vscale = vmk1(l.elem().elem().elem().elem());
37
38 d.elem().elem(0,0).real().elem_v() = _mm_mul_ps(vscale, r.elem().elem(0,0).real().elem_v());
39 d.elem().elem(0,0).imag().elem_v() = _mm_mul_ps(vscale, r.elem().elem(0,0).imag().elem_v());
40 d.elem().elem(0,1).real().elem_v() = _mm_mul_ps(vscale, r.elem().elem(0,1).real().elem_v());
41 d.elem().elem(0,1).imag().elem_v() = _mm_mul_ps(vscale, r.elem().elem(0,1).imag().elem_v());
42 d.elem().elem(0,2).real().elem_v() = _mm_mul_ps(vscale, r.elem().elem(0,2).real().elem_v());
43 d.elem().elem(0,2).imag().elem_v() = _mm_mul_ps(vscale, r.elem().elem(0,2).imag().elem_v());
44 d.elem().elem(1,0).real().elem_v() = _mm_mul_ps(vscale, r.elem().elem(1,0).real().elem_v());
45 d.elem().elem(1,0).imag().elem_v() = _mm_mul_ps(vscale, r.elem().elem(1,0).imag().elem_v());
46 d.elem().elem(1,1).real().elem_v() = _mm_mul_ps(vscale, r.elem().elem(1,1).real().elem_v());
47 d.elem().elem(1,1).imag().elem_v() = _mm_mul_ps(vscale, r.elem().elem(1,1).imag().elem_v());
48 d.elem().elem(1,2).real().elem_v() = _mm_mul_ps(vscale, r.elem().elem(1,2).real().elem_v());
49 d.elem().elem(1,2).imag().elem_v() = _mm_mul_ps(vscale, r.elem().elem(1,2).imag().elem_v());
50 d.elem().elem(2,0).real().elem_v() = _mm_mul_ps(vscale, r.elem().elem(2,0).real().elem_v());
51 d.elem().elem(2,0).imag().elem_v() = _mm_mul_ps(vscale, r.elem().elem(2,0).imag().elem_v());
52 d.elem().elem(2,1).real().elem_v() = _mm_mul_ps(vscale, r.elem().elem(2,1).real().elem_v());
53 d.elem().elem(2,1).imag().elem_v() = _mm_mul_ps(vscale, r.elem().elem(2,1).imag().elem_v());
54 d.elem().elem(2,2).real().elem_v() = _mm_mul_ps(vscale, r.elem().elem(2,2).real().elem_v());
55 d.elem().elem(2,2).imag().elem_v() = _mm_mul_ps(vscale, r.elem().elem(2,2).imag().elem_v());
56
57 return d;
58}
59
60
61#if defined(QDP_SCALARVECSITE_BLAS_DEBUG)
62#undef QDP_SCALARVECSITE_BLAS_DEBUG
63#endif
64
65#if defined(QDP_SCALARVECSITE_USE_EVALUATE)
66#undef QDP_SCALARVECSITE_USE_EVALUATE
67#endif
68
69
70} // namespace QDP;
71
72#endif // guard
73
Primitive Scalar.
Primitive spin Vector class.
Yet another random number generator.
PScalar< PScalar< RScalar< REAL > > > TScal
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)
Definition qdp.h:2588
PSpinVector< PColorVector< RComplex< ILattice< REAL32, 4 > >, 3 >, 4 > TDirac
PScalar< PColorVector< RComplex< ILattice< REAL32, 4 > >, 3 > > TCVec
PScalar< PColorMatrix< RComplex< ILattice< REAL32, 4 > >, 3 > > TCMat
Promote< T1, T2 >::Type_t Type_t
Definition qdp.h:377