Path: blob/main/astro/boinc-setiathome/files/patch-client_vector_x86__float4.h
16125 views
--- client/vector/x86_float4.h.orig 2018-01-14 23:02:12 UTC1+++ client/vector/x86_float4.h2@@ -58,8 +58,8 @@ extern const_float4 INDGEN[2];34ALIGNED(static const int sign_bits[4],16)={INT_MIN, INT_MIN, INT_MIN, INT_MIN};5ALIGNED(static const int other_bits[4],16)={INT_MAX, INT_MAX, INT_MAX, INT_MAX};6-#define SIGN_BITS (*(__m128i *)sign_bits)7-#define OTHER_BITS (*(__m128i *)other_bits)8+#define SIGN_BITS (*(__m128 *)sign_bits)9+#define OTHER_BITS (*(__m128 *)other_bits)10111213@@ -104,19 +104,19 @@ struct float4 {14#endif15return rv;16};17- inline float4 operator |(const __m128i &b) const {18+ inline float4 operator |(const __m128 &b) const {19register float4 rv;20#ifdef USE_INTRINSICS21- rv.m=_mm_or_ps(*(__m128 *)&b,m);22+ rv.m=_mm_or_ps(b,m);23#elif defined(__GNUC__)24__asm__ ( "orps %2,%0" : "=x" (rv.m) : "0" (b), "xm" (m));25#endif26return rv;27};28- inline float4 operator &(const __m128i &b) const {29+ inline float4 operator &(const __m128 &b) const {30register float4 rv;31#ifdef USE_INTRINSICS32- rv.m=_mm_and_ps(*(__m128 *)&b,m);33+ rv.m=_mm_and_ps(b,m);34#elif defined(__GNUC__)35__asm__ ( "andps %2,%0" : "=x" (rv.m) : "0" (b), "xm" (m));36#endif37@@ -159,7 +159,9 @@ struct float4 {38return *this;39}40inline operator __m128() {return m;};41+#ifdef __SSE2__42inline operator __m128i() {return *(__m128i *)&m; };43+#endif44inline float4 abs() const {45// clear the sign bits46return *this & OTHER_BITS;47@@ -258,7 +260,9 @@ struct const_float4 : public float4 {48inline const_float4(const float4 &b) { m=b.m; };49inline operator float4() const { return *this; };50inline operator __m128() {return m;};51+#ifdef __SSE2__52inline operator __m128i() {return *(__m128i *)&m; };53+#endif54};5556#endif575859