From: Alex Coyte Date: Mon, 29 Aug 2016 05:07:22 +0000 (+1000) Subject: rework load_m128_from_u64a() X-Git-Tag: v4.4.0^2~94 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e74b141e958816be48693e7258f2a5da1d8df04f;p=thirdparty%2Fvectorscan.git rework load_m128_from_u64a() --- 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)