Skip to content

Commit 7aef429

Browse files
WIP
1 parent c17f5af commit 7aef429

2 files changed

Lines changed: 60 additions & 60 deletions

File tree

include/xsimd/arch/xsimd_avx.hpp

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1025,18 +1025,18 @@ namespace xsimd
10251025
return _mm256_maskload_pd(mem, _mm256_castpd_si256(mask));
10261026
}
10271027

1028-
template <class A, class T, class Mode>
1029-
XSIMD_INLINE batch<std::complex<T>, A>
1030-
load_complex_masked(std::complex<T> const* mem, batch_bool<T, A> mask, Mode mode, requires_arch<avx>) noexcept
1031-
{
1032-
using mask_register_type = typename batch_bool<T, A>::register_type;
1033-
mask_register_type nmask = mask.to_native();
1034-
batch_bool<T, A> lo_mask = zip_lo(batch<T, A>(nmask), batch<T, A>(nmask)).to_native();
1035-
batch_bool<T, A> hi_mask = zip_hi(batch<T, A>(nmask), batch<T, A>(nmask)).to_native();
1036-
batch<T, A> res_lo = batch<T, A>::load(reinterpret_cast<T const*>(mem), lo_mask, mode);
1037-
batch<T, A> res_hi = batch<T, A>::load(reinterpret_cast<T const*>(mem) + mask.size, hi_mask, mode);
1038-
return detail::load_complex(res_lo, res_hi, A{});
1039-
}
1028+
// template <class A, class T, class Mode>
1029+
// XSIMD_INLINE batch<std::complex<T>, A>
1030+
// load_complex_masked(std::complex<T> const* mem, batch_bool<T, A> mask, Mode mode, requires_arch<avx>) noexcept
1031+
// {
1032+
// using mask_register_type = typename batch_bool<T, A>::register_type;
1033+
// mask_register_type nmask = mask.to_native();
1034+
// batch_bool<T, A> lo_mask = zip_lo(batch<T, A>(nmask), batch<T, A>(nmask)).to_native();
1035+
// batch_bool<T, A> hi_mask = zip_hi(batch<T, A>(nmask), batch<T, A>(nmask)).to_native();
1036+
// batch<T, A> res_lo = batch<T, A>::load(reinterpret_cast<T const*>(mem), lo_mask, mode);
1037+
// batch<T, A> res_hi = batch<T, A>::load(reinterpret_cast<T const*>(mem) + mask.size, hi_mask, mode);
1038+
// return detail::load_complex(res_lo, res_hi, A{});
1039+
// }
10401040

10411041
// 4/8-byte ints: bitcast to same-width float, reuse the vmaskmov path.
10421042
template <class A, class T, class Mode>
@@ -1214,15 +1214,15 @@ namespace xsimd
12141214
}
12151215
}
12161216

1217-
template <class A, class T, class Mode>
1218-
XSIMD_INLINE void
1219-
store_complex_masked(std::complex<T>* mem, batch<std::complex<T>, A> const& src, batch_bool<T, A> mask, Mode mode, requires_arch<avx>) noexcept
1220-
{
1221-
auto src_lo = detail::complex_low(src, A{});
1222-
auto src_hi = detail::complex_high(src, A{});
1223-
store_masked(reinterpret_cast<T*>(mem), src_lo, mask, mode, A{});
1224-
store_masked(reinterpret_cast<T*>(mem) + src.size, src_hi, mask, mode, A{});
1225-
}
1217+
//template <class A, class T, class Mode>
1218+
//XSIMD_INLINE void
1219+
//store_complex_masked(std::complex<T>* mem, batch<std::complex<T>, A> const& src, batch_bool<T, A> mask, Mode mode, requires_arch<avx>) noexcept
1220+
//{
1221+
// auto src_lo = detail::complex_low(src, A{});
1222+
// auto src_hi = detail::complex_high(src, A{});
1223+
// store_masked(reinterpret_cast<T*>(mem), src_lo, mask, mode, A{});
1224+
// store_masked(reinterpret_cast<T*>(mem) + src.size, src_hi, mask, mode, A{});
1225+
//}
12261226

12271227
namespace detail
12281228
{

include/xsimd/arch/xsimd_avx512f.hpp

Lines changed: 39 additions & 39 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-
}
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-
}
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+
//}
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>
@@ -1664,15 +1664,15 @@ namespace xsimd
16641664
}
16651665
}
16661666

1667-
template <class A, class T, class Mode>
1668-
XSIMD_INLINE batch<std::complex<T>, A>
1669-
load_complex_masked(std::complex<T> const* mem, batch_bool<T, A> mask, Mode mode, requires_arch<avx512f>) noexcept
1670-
{
1671-
auto [lo_mask, hi_mask] = detail::zip_complex_mask(mask);
1672-
batch<T, A> res_lo = batch<T, A>::load(reinterpret_cast<T const*>(mem), lo_mask, mode);
1673-
batch<T, A> res_hi = batch<T, A>::load(reinterpret_cast<T const*>(mem) + mask.size, hi_mask, mode);
1674-
return detail::load_complex(res_lo, res_hi, A{});
1675-
}
1667+
//template <class A, class T, class Mode>
1668+
//XSIMD_INLINE batch<std::complex<T>, A>
1669+
//load_complex_masked(std::complex<T> const* mem, batch_bool<T, A> mask, Mode mode, requires_arch<avx512f>) noexcept
1670+
//{
1671+
// auto [lo_mask, hi_mask] = detail::zip_complex_mask(mask);
1672+
// batch<T, A> res_lo = batch<T, A>::load(reinterpret_cast<T const*>(mem), lo_mask, mode);
1673+
// batch<T, A> res_hi = batch<T, A>::load(reinterpret_cast<T const*>(mem) + mask.size, hi_mask, mode);
1674+
// return detail::load_complex(res_lo, res_hi, A{});
1675+
//}
16761676

16771677
// load_unaligned
16781678
template <class A, class T, class = std::enable_if_t<std::is_integral_v<T>>>

0 commit comments

Comments
 (0)