| 84 | |
| 85 | template<typename B, class A = std::allocator<B>> |
| 86 | void |
| 87 | write_array(std::vector<mipp::Reg<B>, A>& array, |
| 88 | const mipp::Reg<B>& r_idx, |
| 89 | const mipp::Msk<mipp::N<B>()>& m_idx, |
| 90 | const mipp::Reg<B>& r_values) |
| 91 | { |
| 92 | mipp::vector<B> v_iota(mipp::N<B>()); |
| 93 | std::iota(v_iota.begin(), v_iota.end(), 0); |
| 94 | mipp::Reg<B> r_iota = v_iota.data(); |
| 95 | |
| 96 | B idx[mipp::N<B>()]; |
| 97 | r_idx.store(idx); |
| 98 | |
| 99 | for (auto j = 0; j < mipp::N<B>(); j++) |
| 100 | array[idx[j]] = mipp::blend(r_values, array[idx[j]], m_idx & (r_iota == j)); |
| 101 | } |
| 102 | |
| 103 | template<typename B> |
| 104 | mipp::Reg<B> |