Skip to content

Commit

Permalink
Minor clean up of some std::generate calls
Browse files Browse the repository at this point in the history
  • Loading branch information
kcat committed Mar 29, 2024
1 parent 0552559 commit 5bc09d3
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 12 deletions.
7 changes: 4 additions & 3 deletions core/mixer/mixer_neon.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -231,8 +231,8 @@ void Resample_<CubicTag,NEONTag>(const InterpState *state, const float *src, uin
uint32x4_t pos4{vld1q_u32(pos_.data())};

src -= 1;
auto vecout = al::span<float32x4_t>{reinterpret_cast<float32x4_t*>(dst.data()), dst.size()/4};
std::generate(vecout.begin(), vecout.end(), [=,&pos4,&frac4]() -> float32x4_t
auto vecout = al::span{reinterpret_cast<float32x4_t*>(dst.data()), dst.size()/4};
std::generate(vecout.begin(), vecout.end(), [=,&pos4,&frac4]
{
const uint pos0{vgetq_lane_u32(pos4, 0)};
const uint pos1{vgetq_lane_u32(pos4, 1)};
Expand Down Expand Up @@ -279,7 +279,8 @@ void Resample_<CubicTag,NEONTag>(const InterpState *state, const float *src, uin
src += vgetq_lane_u32(pos4, 0);
frac = vgetq_lane_u32(frac4, 0);

std::generate(dst.end()-ptrdiff_t(todo), dst.end(), [&src,&frac,increment,filter]
auto out = dst.last(todo);
std::generate(out.begin(), out.end(), [&src,&frac,increment,filter]
{
const uint pi{frac >> CubicPhaseDiffBits}; ASSUME(pi < CubicPhaseCount);
const float pf{static_cast<float>(frac&CubicPhaseDiffMask) * (1.0f/CubicPhaseDiffOne)};
Expand Down
7 changes: 4 additions & 3 deletions core/mixer/mixer_sse2.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -132,8 +132,8 @@ void Resample_<CubicTag,SSE2Tag>(const InterpState *state, const float *src, uin
static_cast<int>(pos_[2]), static_cast<int>(pos_[3]))};

src -= 1;
auto vecout = al::span<__m128>{reinterpret_cast<__m128*>(dst.data()), dst.size()/4};
std::generate(vecout.begin(), vecout.end(), [=,&pos4,&frac4]() -> __m128
auto vecout = al::span{reinterpret_cast<__m128*>(dst.data()), dst.size()/4};
std::generate(vecout.begin(), vecout.end(), [=,&pos4,&frac4]
{
const auto pos0 = static_cast<uint>(_mm_cvtsi128_si32(pos4));
const auto pos1 = static_cast<uint>(_mm_cvtsi128_si32(_mm_srli_si128(pos4, 4)));
Expand Down Expand Up @@ -186,7 +186,8 @@ void Resample_<CubicTag,SSE2Tag>(const InterpState *state, const float *src, uin
src += static_cast<uint>(_mm_cvtsi128_si32(pos4));
frac = static_cast<uint>(_mm_cvtsi128_si32(frac4));

std::generate(dst.end()-ptrdiff_t(todo), dst.end(), [&src,&frac,increment,filter]
auto out = dst.last(todo);
std::generate(out.begin(), out.end(), [&src,&frac,increment,filter]
{
const uint pi{frac >> CubicPhaseDiffBits}; ASSUME(pi < CubicPhaseCount);
const float pf{static_cast<float>(frac&CubicPhaseDiffMask) * (1.0f/CubicPhaseDiffOne)};
Expand Down
14 changes: 8 additions & 6 deletions core/mixer/mixer_sse41.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -74,8 +74,8 @@ void Resample_<LerpTag,SSE4Tag>(const InterpState*, const float *src, uint frac,
__m128i pos4{_mm_setr_epi32(static_cast<int>(pos_[0]), static_cast<int>(pos_[1]),
static_cast<int>(pos_[2]), static_cast<int>(pos_[3]))};

auto vecout = al::span<__m128>{reinterpret_cast<__m128*>(dst.data()), dst.size()/4};
std::generate(vecout.begin(), vecout.end(), [=,&pos4,&frac4]() -> __m128
auto vecout = al::span{reinterpret_cast<__m128*>(dst.data()), dst.size()/4};
std::generate(vecout.begin(), vecout.end(), [=,&pos4,&frac4]
{
const auto pos0 = static_cast<uint>(_mm_extract_epi32(pos4, 0));
const auto pos1 = static_cast<uint>(_mm_extract_epi32(pos4, 1));
Expand Down Expand Up @@ -104,7 +104,8 @@ void Resample_<LerpTag,SSE4Tag>(const InterpState*, const float *src, uint frac,
src += static_cast<uint>(_mm_cvtsi128_si32(pos4));
frac = static_cast<uint>(_mm_cvtsi128_si32(frac4));

std::generate(dst.end()-ptrdiff_t(todo), dst.end(), [&src,&frac,increment]
auto out = dst.last(todo);
std::generate(out.begin(), out.end(), [&src,&frac,increment]
{
const float out{lerpf(src[0], src[1], static_cast<float>(frac) * (1.0f/MixerFracOne))};

Expand Down Expand Up @@ -137,8 +138,8 @@ void Resample_<CubicTag,SSE4Tag>(const InterpState *state, const float *src, uin
static_cast<int>(pos_[2]), static_cast<int>(pos_[3]))};

src -= 1;
auto vecout = al::span<__m128>{reinterpret_cast<__m128*>(dst.data()), dst.size()/4};
std::generate(vecout.begin(), vecout.end(), [=,&pos4,&frac4]() -> __m128
auto vecout = al::span{reinterpret_cast<__m128*>(dst.data()), dst.size()/4};
std::generate(vecout.begin(), vecout.end(), [=,&pos4,&frac4]
{
const auto pos0 = static_cast<uint>(_mm_extract_epi32(pos4, 0));
const auto pos1 = static_cast<uint>(_mm_extract_epi32(pos4, 1));
Expand Down Expand Up @@ -191,7 +192,8 @@ void Resample_<CubicTag,SSE4Tag>(const InterpState *state, const float *src, uin
src += static_cast<uint>(_mm_cvtsi128_si32(pos4));
frac = static_cast<uint>(_mm_cvtsi128_si32(frac4));

std::generate(dst.end()-ptrdiff_t(todo), dst.end(), [&src,&frac,increment,filter]
auto out = dst.last(todo);
std::generate(out.begin(), out.end(), [&src,&frac,increment,filter]
{
const uint pi{frac >> CubicPhaseDiffBits}; ASSUME(pi < CubicPhaseCount);
const float pf{static_cast<float>(frac&CubicPhaseDiffMask) * (1.0f/CubicPhaseDiffOne)};
Expand Down

0 comments on commit 5bc09d3

Please sign in to comment.