From c87dff7e8f2ebdd8b42137ee95daf6a86c3e416c Mon Sep 17 00:00:00 2001 From: Erik Hofman Date: Tue, 31 Jan 2017 00:04:01 +0100 Subject: [PATCH] More code cleanups ans fix a Clang problem. And disable AVX for good, I don't have time for this crap anymore: it looks like a hardware or compielr bug --- simgear/math/simd.hxx | 38 ++++++++++++++++++++------------------ simgear/math/simd4x4.hxx | 2 +- 2 files changed, 21 insertions(+), 19 deletions(-) diff --git a/simgear/math/simd.hxx b/simgear/math/simd.hxx index a32a85ea..48b1d69d 100644 --- a/simgear/math/simd.hxx +++ b/simgear/math/simd.hxx @@ -125,7 +125,9 @@ private: }; public: - simd4_t(void) {} + simd4_t(void) { + for (int i=0; i<4; ++i) _v4[i] = 0; + } simd4_t(T s) { for (int i=0; i operator*(simd4_t v, T f) { # ifdef __SSE__ namespace simd4 { -static const uint32_t m2a32[] alignas(16) = { +alignas(16) static const uint32_t m2a32[] = { 0xffffffff,0xffffffff,0,0 }; -static const uint32_t m3a32[] alignas(16) = { +alignas(16) static const uint32_t m3a32[] = { 0xffffffff,0xffffffff,0xffffffff,0 }; -static const uint64_t m2a64[] alignas(32) = { +alignas(32) static const uint64_t m2a64[] = { 0xffffffffffffffff,0xffffffffffffffff,0,0 }; -static const uint64_t m3a64[] alignas(32) = { +alignas(32) static const uint64_t m3a64[] = { 0xffffffffffffffff,0xffffffffffffffff,0xffffffffffffffff,0 }; }; /* namespace simd4 */ @@ -323,13 +325,13 @@ class alignas(16) simd4_t private: typedef float __vec4f_t[N]; - union alignas(16) { + union { __m128 simd4; - alignas(16) __vec4f_t vec; + __vec4f_t vec; }; public: - simd4_t(void) {} + simd4_t(void) : simd4(_mm_setzero_ps()) {} simd4_t(float f) {} simd4_t(float x, float y) : simd4_t(x,y,0,0) {} simd4_t(float x, float y, float z) : simd4_t(x,y,z,0) {} @@ -558,20 +560,20 @@ inline simd4_tabs(simd4_t v) { # endif -# ifdef __AVX__ +# ifdef __AVX_unsupported__ template class alignas(32) simd4_t { private: typedef double __vec4d_t[N]; - union alignas(32) { + union { __m256d simd4; - alignas(32) __vec4d_t vec; + __vec4d_t vec; }; public: - simd4_t(void) {} + simd4_t(void) : simd4(_mm256_setzero_pd()) {} simd4_t(double d) {} simd4_t(double x, double y) : simd4_t(x,y,0,0) {} simd4_t(double x, double y, double z) : simd4_t(x,y,z,0) {} @@ -800,13 +802,13 @@ class alignas(16) simd4_t private: typedef double __vec4d_t[N]; - union alignas(16) { + union { __m128d simd4[2]; - alignas(16) __vec4d_t vec; + __vec4d_t vec; }; public: - simd4_t(void) {} + simd4_t(void) { simd4[0] = simd4[1] = _mm_setzero_pd(); } simd4_t(double d) {} simd4_t(double x, double y) : simd4_t(x,y,0,0) {} simd4_t(double x, double y, double z) : simd4_t(x,y,z,0) {} @@ -1083,13 +1085,13 @@ class alignas(16) simd4_t private: typedef int __vec4i_t[N]; - union alignas(16) { + union { __m128i simd4; - alignas(16) __vec4i_t vec; + __vec4i_t vec; }; public: - simd4_t(void) {} + simd4_t(void) : simd4(_mm_setzero_si128()) {} simd4_t(int i) {} simd4_t(int x, int y) : simd4_t(x,y,0,0) {} simd4_t(int x, int y, int z) : simd4_t(x,y,z,0) {} diff --git a/simgear/math/simd4x4.hxx b/simgear/math/simd4x4.hxx index b880bb97..3c5ceb43 100644 --- a/simgear/math/simd4x4.hxx +++ b/simgear/math/simd4x4.hxx @@ -488,7 +488,7 @@ inline simd4_t transform(const simd4x4_t& m, const simd # endif -# ifdef __AVX__ +# ifdef __AVX_unsupported__ template<> class alignas(32) simd4x4_t {