Skip to content

Commit 6cd5f69

Browse files
committed
Try direct reinterpret in from_bool
1 parent 168ea32 commit 6cd5f69

1 file changed

Lines changed: 4 additions & 8 deletions

File tree

include/xsimd/arch/xsimd_neon.hpp

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -303,8 +303,7 @@ namespace xsimd
303303
template <class A, class T, detail::enable_sized_signed_t<T, 1> = 0>
304304
XSIMD_INLINE batch<T, A> from_bool(batch_bool<T, A> const& arg, requires_arch<neon>) noexcept
305305
{
306-
auto const arg_int = wrap::x_vreinterpretq<int8_t, project_num_t<T>>(arg.data);
307-
return vandq_s8(arg_int, vdupq_n_s8(1));
306+
return vreinterpretq_s8_u8(vandq_u8(arg.data, vdupq_n_u8(1)));
308307
}
309308

310309
template <class A, class T, detail::enable_sized_unsigned_t<T, 2> = 0>
@@ -316,8 +315,7 @@ namespace xsimd
316315
template <class A, class T, detail::enable_sized_signed_t<T, 2> = 0>
317316
XSIMD_INLINE batch<T, A> from_bool(batch_bool<T, A> const& arg, requires_arch<neon>) noexcept
318317
{
319-
auto const arg_int = wrap::x_vreinterpretq<int16_t, project_num_t<T>>(arg.data);
320-
return vandq_s16(arg_int, vdupq_n_s16(1));
318+
return vreinterpretq_s16_u16(vandq_u16(arg.data, vdupq_n_u16(1)));
321319
}
322320

323321
template <class A, class T, detail::enable_sized_unsigned_t<T, 4> = 0>
@@ -329,8 +327,7 @@ namespace xsimd
329327
template <class A, class T, detail::enable_sized_signed_t<T, 4> = 0>
330328
XSIMD_INLINE batch<T, A> from_bool(batch_bool<T, A> const& arg, requires_arch<neon>) noexcept
331329
{
332-
auto const arg_int = wrap::x_vreinterpretq<int32_t, project_num_t<T>>(arg.data);
333-
return vandq_s32(arg_int, vdupq_n_s32(1));
330+
return vreinterpretq_s32_u32(vandq_u32(arg.data, vdupq_n_u32(1)));
334331
}
335332

336333
template <class A, class T, detail::enable_sized_unsigned_t<T, 8> = 0>
@@ -342,8 +339,7 @@ namespace xsimd
342339
template <class A, class T, detail::enable_sized_signed_t<T, 8> = 0>
343340
XSIMD_INLINE batch<T, A> from_bool(batch_bool<T, A> const& arg, requires_arch<neon>) noexcept
344341
{
345-
auto const arg_int = wrap::x_vreinterpretq<int64_t, project_num_t<T>>(arg.data);
346-
return vandq_s64(arg_int, vdupq_n_s64(1));
342+
return vreinterpretq_s64_u64(vandq_u64(arg.data, vdupq_n_u64(1)));
347343
}
348344

349345
template <class A>

0 commit comments

Comments
 (0)