Rewrite SIMD sum 4-to-1

This commit is contained in:
Jean Pierre Cimalando 2021-02-16 00:36:46 +01:00
parent cfb2b94532
commit cb9cc622d0

View file

@ -11,6 +11,7 @@
#include <simde/simde-features.h>
#if SIMDE_NATURAL_VECTOR_SIZE_GE(128)
#include <simde/x86/sse.h>
#include <simde/arm/neon/addv.h>
#endif
namespace sfz {
@ -63,15 +64,7 @@ public:
simde__m128 x = simde_mm_sub_ps(simde_mm_setr_ps(-1, 0, 1, 2), simde_mm_set1_ps(coeff));
simde__m128 h = hermite3x4(x);
simde__m128 y = simde_mm_mul_ps(h, simde_mm_loadu_ps(values - 1));
// sum 4 to 1
simde__m128 xmm0 = y;
simde__m128 xmm1 = simde_mm_shuffle_ps(xmm0, xmm0, 0xe5);
simde__m128 xmm2 = simde_mm_movehl_ps(xmm0, xmm0);
xmm1 = simde_mm_add_ss(xmm1, xmm0);
xmm0 = simde_mm_shuffle_ps(xmm0, xmm0, 0xe7);
xmm2 = simde_mm_add_ss(xmm2, xmm1);
xmm0 = simde_mm_add_ss(xmm0, xmm2);
return simde_mm_cvtss_f32(xmm0);
return simde_vaddvq_f32(y);
}
};
#endif
@ -107,15 +100,7 @@ public:
simde__m128 x = simde_mm_sub_ps(simde_mm_setr_ps(-1, 0, 1, 2), simde_mm_set1_ps(coeff));
simde__m128 h = bspline3x4(x);
simde__m128 y = simde_mm_mul_ps(h, simde_mm_loadu_ps(values - 1));
// sum 4 to 1
simde__m128 xmm0 = y;
simde__m128 xmm1 = simde_mm_shuffle_ps(xmm0, xmm0, 0xe5);
simde__m128 xmm2 = simde_mm_movehl_ps(xmm0, xmm0);
xmm1 = simde_mm_add_ss(xmm1, xmm0);
xmm0 = simde_mm_shuffle_ps(xmm0, xmm0, 0xe7);
xmm2 = simde_mm_add_ss(xmm2, xmm1);
xmm0 = simde_mm_add_ss(xmm0, xmm2);
return simde_mm_cvtss_f32(xmm0);
return simde_vaddvq_f32(y);
}
};
#endif
@ -218,15 +203,7 @@ public:
i += 4;
} while (i < Points);
// sum 4 to 1
simde__m128 xmm0 = y;
simde__m128 xmm1 = simde_mm_shuffle_ps(xmm0, xmm0, 0xe5);
simde__m128 xmm2 = simde_mm_movehl_ps(xmm0, xmm0);
xmm1 = simde_mm_add_ss(xmm1, xmm0);
xmm0 = simde_mm_shuffle_ps(xmm0, xmm0, 0xe7);
xmm2 = simde_mm_add_ss(xmm2, xmm1);
xmm0 = simde_mm_add_ss(xmm0, xmm2);
return simde_mm_cvtss_f32(xmm0);
return simde_vaddvq_f32(y);
}
};
#endif