From 040ac916dba3c33b9fa12cd52de7835db37faf47 Mon Sep 17 00:00:00 2001 From: Erik Schnetter Date: Thu, 25 Jul 2013 14:05:15 -0700 Subject: Correct and simplify convert_int and convert_float for SSE doubles --- vec_avx_double4.h | 19 ++++++++++--------- vec_sse_double2.h | 13 ++++++------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/vec_avx_double4.h b/vec_avx_double4.h index 9867c85..e4699d8 100644 --- a/vec_avx_double4.h +++ b/vec_avx_double4.h @@ -499,16 +499,12 @@ namespace vecmathlib { intvec_t as_int() const { return _mm256_castpd_si256(v); } intvec_t convert_int() const { -#ifdef __x86_64__ intvec_t r; - r.set_elt(0, _mm_cvttsd_si64(_mm_set_sd((*this)[0]))); - r.set_elt(1, _mm_cvttsd_si64(_mm_set_sd((*this)[1]))); - r.set_elt(2, _mm_cvttsd_si64(_mm_set_sd((*this)[2]))); - r.set_elt(3, _mm_cvttsd_si64(_mm_set_sd((*this)[3]))); + r.set_elt(0, floatprops::convert_int((*this)[0])); + r.set_elt(1, floatprops::convert_int((*this)[1])); + r.set_elt(2, floatprops::convert_int((*this)[2])); + r.set_elt(3, floatprops::convert_int((*this)[3])); return r; -#else - return floatprops::convert_int(v); -#endif } @@ -698,7 +694,12 @@ namespace vecmathlib { inline realvec intvec::convert_float() const { - return MF::vml_convert_float(*this); + realvec_t r; + r.set_elt(0, floatprops::convert_float((*this)[0])); + r.set_elt(1, floatprops::convert_float((*this)[1])); + r.set_elt(2, floatprops::convert_float((*this)[2])); + r.set_elt(3, floatprops::convert_float((*this)[3])); + return r; } } // namespace vecmathlib diff --git a/vec_sse_double2.h b/vec_sse_double2.h index d76f18d..0d847aa 100644 --- a/vec_sse_double2.h +++ b/vec_sse_double2.h @@ -468,14 +468,10 @@ namespace vecmathlib { intvec_t as_int() const { return _mm_castpd_si128(v); } intvec_t convert_int() const { -#ifdef __x86_64__ intvec_t r; - r.set_elt(0, _mm_cvttsd_si64(_mm_set_sd((*this)[0]))); - r.set_elt(1, _mm_cvttsd_si64(_mm_set_sd((*this)[1]))); + r.set_elt(0, floatprops::convert_int((*this)[0])); + r.set_elt(1, floatprops::convert_int((*this)[1])); return r; -#else - return floatprops::convert_int(v); -#endif } @@ -679,7 +675,10 @@ namespace vecmathlib { inline realvec intvec::convert_float() const { - return MF::vml_convert_float(*this); + realvec_t r; + r.set_elt(0, floatprops::convert_float((*this)[0])); + r.set_elt(1, floatprops::convert_float((*this)[1])); + return r; } } // namespace vecmathlib -- cgit v1.1