From e74b141e958816be48693e7258f2a5da1d8df04f Mon Sep 17 00:00:00 2001 From: Alex Coyte Date: Mon, 29 Aug 2016 15:07:22 +1000 Subject: [PATCH] rework load_m128_from_u64a() --- src/util/simd_utils.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/util/simd_utils.h b/src/util/simd_utils.h index dc8922fd..b7cb1c0f 100644 --- a/src/util/simd_utils.h +++ b/src/util/simd_utils.h @@ -176,7 +176,15 @@ static really_inline u64a movq(const m128 in) { /* another form of movq */ static really_inline m128 load_m128_from_u64a(const u64a *p) { +#if defined(__GNUC__) && !defined(__INTEL_COMPILER) + /* unfortunately _mm_loadl_epi64() is best avoided as it seems to cause + * trouble on some older compilers, possibly because it is misdefined to + * take an m128 as its parameter */ + return _mm_set_epi64((__m64)0ULL, (__m64)*p); +#else + /* ICC doesn't like casting to __m64 */ return _mm_loadl_epi64((const m128 *)p); +#endif } #define rshiftbyte_m128(a, count_immed) _mm_srli_si128(a, count_immed)