32 #ifndef PLANCK_SSE_UTILS_H 33 #define PLANCK_SSE_UTILS_H 35 #if (defined(__SSE__)) 37 #include <xmmintrin.h> 50 static inline v4sf build_v4sf (
float a,
float b,
float c,
float d)
51 {
return _mm_set_ps(d,c,b,a); }
52 static inline void read_v4sf (v4sf v,
float *a,
float *b,
float *c,
float *d)
68 #if (defined(__SSE2__)) 70 #include <emmintrin.h> 90 #define V2DF_SIGNMASK _mm_set1_pd(-0.0) 92 static inline v2df build_v2df (
double a,
double b)
93 {
return _mm_set_pd(b,a); }
94 static inline void read_v2df (v2df v,
double *a,
double *b)
95 { _mm_store_sd(a,v); _mm_storeh_pd(b,v); }
97 static inline int v2df_any_gt (v2df a, v2df b)
99 return (_mm_movemask_pd(_mm_cmpgt_pd(_mm_andnot_pd(V2DF_SIGNMASK,a),b))!=0);
101 static inline int v2df_all_ge (v2df a, v2df b)
103 return (_mm_movemask_pd(_mm_cmplt_pd(_mm_andnot_pd(V2DF_SIGNMASK,a),b))==0);
105 static inline V2DF to_V2DF (v2df x)
106 { V2DF X; X.v=x;
return X; }
107 static inline V2DF2 to_V2DF2 (v2df2 x)
108 { V2DF2 X; X.a.v=x.a; X.b.v=x.b;
return X; }
109 static inline v2df2 to_v2df2 (V2DF2 X)
110 { v2df2 x; x.a=X.a.v; x.b=X.b.v;
return x; }
111 static inline v2df2 zero_v2df2(
void)
112 { v2df2 x; x.a=x.b=_mm_setzero_pd();
return x; }
120 #if (defined(__SSE3__)) 122 #include <pmmintrin.h>