9#ifndef QDP_SCALARVECSITE_SSE_H
10#define QDP_SCALARVECSITE_SSE_H
15#if defined(__GNUC__) && __GNUC_MINOR__ >= 2
19typedef REAL32 vReal32 __attribute__ ((aligned (16),mode(V4SF)));
22static inline vReal32 vmk1(
REAL32 a)
24 vReal32 v = _mm_load_ss((
float *)&a);
26 v = _mm_shuffle_ps(v,v,0);
48 static const int N = 4;
89 v = vmk1(
REAL32(rhs.elem()));
98 v = _mm_add_ps(v, vmk1(
REAL32(rhs.elem())));
107 v = _mm_sub_ps(v, vmk1(
REAL32(rhs.elem())));
116 v = _mm_mul_ps(v, vmk1(
REAL32(rhs.elem())));
125 v = _mm_div_ps(v, vmk1(
REAL32(rhs.elem())));
144 v = _mm_add_ps(v, rhs.v);
152 v = _mm_sub_ps(v, rhs.v);
160 v = _mm_mul_ps(v, rhs.v);
168 v = _mm_div_ps(v, rhs.v);
193 const T&
elem(
int i)
const {
return ((
REAL32*)&v)[i];}
195 vReal32& elem_v() {
return v;}
196 const vReal32 elem_v()
const {
return v;}
214#error "This is not a GNUC 3.2 or greater compiler, and therefore does not support the GNU specific asm directives."
ILattice & operator*=(const IScalar< T1 > &rhs)
ILattice *= IScalar.
ILattice & operator=(const IScalar< T1 > &rhs)
ILattice = IScalar.
ILattice & operator-=(const IScalar< T1 > &rhs)
ILattice -= IScalar.
ILattice & operator/=(const IScalar< T1 > &rhs)
ILattice /= IScalar.
ILattice & operator+=(const IScalar< T1 > &rhs)
ILattice += IScalar.
Yet another random number generator.