Skip to content

Commit f898d78

Browse files
WIP avxOK
1 parent 9490567 commit f898d78

1 file changed

Lines changed: 29 additions & 29 deletions

File tree

include/xsimd/arch/xsimd_avx512f.hpp

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -372,36 +372,36 @@ namespace xsimd
372372
detail::store_masked(mem, src, mask.mask(), Mode {});
373373
}
374374

375-
// namespace detail
376-
// {
377-
// template <class A, class T>
378-
// std::array<batch_bool<T, A>, 2> zip_complex_mask(batch_bool<T, A> mask)
379-
// {
380-
// using mask_register_type = typename batch_bool<T, A>::register_type;
381-
// mask_register_type nmask = mask.to_native();
382-
383-
// constexpr mask_register_type lo_bitmask = xsimd::utils::make_low_mask<mask_register_type>(mask.size / 2);
384-
// mask_register_type lo_mask = nmask & lo_bitmask;
385-
// lo_mask |= lo_mask << (mask.size / 2);
386-
387-
// constexpr mask_register_type hi_bitmask = lo_bitmask << (mask.size / 2);
388-
// mask_register_type hi_mask = nmask & hi_bitmask;
389-
// hi_mask |= hi_mask >> (mask.size / 2);
390-
391-
// return { batch_bool<T, A>{ lo_mask }, batch_bool<T, A>{ hi_mask } };
392-
// }
393-
// }
375+
namespace detail
376+
{
377+
template <class A, class T>
378+
std::array<batch_bool<T, A>, 2> zip_complex_mask(batch_bool<T, A> mask)
379+
{
380+
using mask_register_type = typename batch_bool<T, A>::register_type;
381+
mask_register_type nmask = mask.to_native();
382+
383+
constexpr mask_register_type lo_bitmask = xsimd::utils::make_low_mask<mask_register_type>(mask.size / 2);
384+
mask_register_type lo_mask = nmask & lo_bitmask;
385+
lo_mask |= lo_mask << (mask.size / 2);
394386

395-
//template <class A, class T, class Mode>
396-
//XSIMD_INLINE void
397-
//store_complex_masked(std::complex<T>* mem, batch<std::complex<T>, A> const& src, batch_bool<T, A> mask, Mode mode, requires_arch<avx512f>) noexcept
398-
//{
399-
// auto [lo_mask, hi_mask] = detail::zip_complex_mask(mask);
400-
// batch<T, A> src_lo = zip_lo(src.real(), src.imag());
401-
// batch<T, A> src_hi = zip_hi(src.real(), src.imag());
402-
// detail::store_masked(reinterpret_cast<T*>(mem), src_lo, lo_mask, mode);
403-
// detail::store_masked(reinterpret_cast<T*>(mem) + src.size, src_hi, hi_mask, mode);
404-
//}
387+
constexpr mask_register_type hi_bitmask = lo_bitmask << (mask.size / 2);
388+
mask_register_type hi_mask = nmask & hi_bitmask;
389+
hi_mask |= hi_mask >> (mask.size / 2);
390+
391+
return { batch_bool<T, A>{ lo_mask }, batch_bool<T, A>{ hi_mask } };
392+
}
393+
}
394+
395+
template <class A, class T, class Mode>
396+
XSIMD_INLINE void
397+
store_complex_masked(std::complex<T>* mem, batch<std::complex<T>, A> const& src, batch_bool<T, A> mask, Mode mode, requires_arch<avx512f>) noexcept
398+
{
399+
auto [lo_mask, hi_mask] = detail::zip_complex_mask(mask);
400+
batch<T, A> src_lo = zip_lo(src.real(), src.imag());
401+
batch<T, A> src_hi = zip_hi(src.real(), src.imag());
402+
detail::store_masked(reinterpret_cast<T*>(mem), src_lo, lo_mask, mode);
403+
detail::store_masked(reinterpret_cast<T*>(mem) + src.size, src_hi, hi_mask, mode);
404+
}
405405

406406
// abs
407407
template <class A>

0 commit comments

Comments
 (0)