Skip to content

Commit

Permalink
Merge pull request #152 from JohanMabille/int8_abs
Browse files Browse the repository at this point in the history
fix for abs of int8_t with SSE2 instructions set
  • Loading branch information
JohanMabille committed Jul 20, 2018
2 parents 8a53d64 + f75cdb6 commit 2230ed8
Show file tree
Hide file tree
Showing 3 changed files with 6 additions and 7 deletions.
2 changes: 1 addition & 1 deletion include/xsimd/types/xsimd_avx_int8.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -291,7 +291,7 @@ namespace xsimd
template <class T, std::size_t N>
template <class... Args, class>
inline avx_int_batch_bool<T, N>::avx_int_batch_bool(Args... args)
: m_value(avx_detail::int_init(std::integral_constant<std::size_t, sizeof(T)>{}, static_cast<T>(-static_cast<bool>(args))...))
: m_value(avx_detail::int_init(std::integral_constant<std::size_t, sizeof(T)>{}, -static_cast<T>(static_cast<bool>(args))...))
{
}

Expand Down
7 changes: 3 additions & 4 deletions include/xsimd/types/xsimd_sse_int8.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -234,7 +234,7 @@ namespace xsimd
template <class T, std::size_t N>
template <class... Args, class>
inline sse_batch_bool<T, N>::sse_batch_bool(Args... args)
: m_value(sse_detail::int_init(std::integral_constant<std::size_t, sizeof(T)>{}, static_cast<T>(-static_cast<bool>(args))...))
: m_value(sse_detail::int_init(std::integral_constant<std::size_t, sizeof(T)>{}, -static_cast<T>(static_cast<bool>(args))...))
{
}

Expand Down Expand Up @@ -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
}
};
Expand Down
4 changes: 2 additions & 2 deletions test/xsimd_basic_test.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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<char>(i);
algn[i] = static_cast<char>(i);
}

batch<int8_t, N> bx, by, bz;
Expand Down

0 comments on commit 2230ed8

Please sign in to comment.