Rewrite SIMD sum 4-to-1
This commit is contained in:
parent
cfb2b94532
commit
cb9cc622d0
1 changed files with 4 additions and 27 deletions
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue