diff --git a/include/xsimd/types/xsimd_avx_int8.hpp b/include/xsimd/types/xsimd_avx_int8.hpp index 6d852978e..09fcd8f61 100644 --- a/include/xsimd/types/xsimd_avx_int8.hpp +++ b/include/xsimd/types/xsimd_avx_int8.hpp @@ -291,7 +291,7 @@ namespace xsimd template template inline avx_int_batch_bool::avx_int_batch_bool(Args... args) - : m_value(avx_detail::int_init(std::integral_constant{}, static_cast(-static_cast(args))...)) + : m_value(avx_detail::int_init(std::integral_constant{}, -static_cast(static_cast(args))...)) { } diff --git a/include/xsimd/types/xsimd_sse_int8.hpp b/include/xsimd/types/xsimd_sse_int8.hpp index 90af8bc3d..43079e9fd 100644 --- a/include/xsimd/types/xsimd_sse_int8.hpp +++ b/include/xsimd/types/xsimd_sse_int8.hpp @@ -234,7 +234,7 @@ namespace xsimd template template inline sse_batch_bool::sse_batch_bool(Args... args) - : m_value(sse_detail::int_init(std::integral_constant{}, static_cast(-static_cast(args))...)) + : m_value(sse_detail::int_init(std::integral_constant{}, -static_cast(static_cast(args))...)) { } @@ -587,9 +587,8 @@ namespace xsimd #if XSIMD_X86_INSTR_SET >= XSIMD_X86_SSSE3_VERSION return _mm_sign_epi8(rhs, rhs); #else - __m128i sign = _mm_srai_epi8(rhs, 31); - __m128i inv = _mm_xor_si128(rhs, sign); - return _mm_sub_epi8(inv, sign); + __m128i neg = _mm_sub_epi8(_mm_setzero_si128(), rhs); + return _mm_min_epu8(rhs, neg); #endif } }; diff --git a/test/xsimd_basic_test.hpp b/test/xsimd_basic_test.hpp index a943a8d35..a67a9a7f0 100644 --- a/test/xsimd_basic_test.hpp +++ b/test/xsimd_basic_test.hpp @@ -787,8 +787,8 @@ namespace xsimd for (std::size_t i = 0; i < 64; ++i) { - non_algn[i] = i; - algn[i] = i; + non_algn[i] = static_cast(i); + algn[i] = static_cast(i); } batch bx, by, bz;