From dab86796a41c25dddeab825e4aab372d703d37ce Mon Sep 17 00:00:00 2001 From: Recep Aslantas Date: Tue, 9 Jan 2024 21:35:39 +0300 Subject: [PATCH] simd: min / max helpers --- include/cglm/simd/arm.h | 8 +++----- include/cglm/simd/wasm.h | 14 ++++++-------- include/cglm/simd/x86.h | 3 +++ 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/include/cglm/simd/arm.h b/include/cglm/simd/arm.h index e8507d7..1578390 100644 --- a/include/cglm/simd/arm.h +++ b/include/cglm/simd/arm.h @@ -56,11 +56,9 @@ glmm_float32x4_init(float x, float y, float z, float w) { #define glmm_float32x4_SIGNMASK_NPNP glmm_float32x4_init(-0.f, 0.f, -0.f, 0.f) #define glmm_float32x4_SIGNMASK_NPPN glmm_float32x4_init(-0.f, 0.f, 0.f, -0.f) -static inline -float32x4_t -glmm_abs(float32x4_t v) { - return vabsq_f32(v); -} +static inline float32x4_t glmm_abs(float32x4_t v) { return vabsq_f32(v); } +static inline float32x4_t glmm_min(float32x4_t a, float32x4_t b) { return vminq_f32(a, b); } +static inline float32x4_t glmm_max(float32x4_t a, float32x4_t b) { return vmaxq_f32(a, b); } static inline float32x4_t diff --git a/include/cglm/simd/wasm.h b/include/cglm/simd/wasm.h index faaf0c0..d9a18cd 100644 --- a/include/cglm/simd/wasm.h +++ b/include/cglm/simd/wasm.h @@ -34,13 +34,11 @@ #define glmm_float32x4_SIGNMASK_PNPN GLMM__SIGNMASKf(0, GLMM_NEGZEROf, 0, GLMM_NEGZEROf) #define glmm_float32x4_SIGNMASK_NPNP GLMM__SIGNMASKf(GLMM_NEGZEROf, 0, GLMM_NEGZEROf, 0) #define glmm_float32x4_SIGNMASK_NPPN GLMM__SIGNMASKf(GLMM_NEGZEROf, 0, 0, GLMM_NEGZEROf) -#define glmm_float32x4_SIGNMASK_NEG wasm_i32x4_const_splat(GLMM_NEGZEROf) +#define glmm_float32x4_SIGNMASK_NEG wasm_i32x4_const_splat(GLMM_NEGZEROf) -static inline -glmm_128 -glmm_abs(glmm_128 x) { - return wasm_f32x4_abs(x); -} +static inline glmm_128 glmm_abs(glmm_128 x) { return wasm_f32x4_abs(x); } +static inline glmm_128 glmm_min(glmm_128 a, glmm_128 b) { return wasm_f32x4_pmin(b, a); } +static inline glmm_128 glmm_max(glmm_128 a, glmm_128 b) { return wasm_f32x4_pmax(b, a); } static inline glmm_128 @@ -74,7 +72,7 @@ glmm_128 glmm_vhmin(glmm_128 v) { glmm_128 x0, x1, x2; x0 = glmm_shuff1(v, 2, 3, 2, 3); /* [2, 3, 2, 3] */ - x1 = wasm_f32x4_pmin(x0, v); /* [0|2, 1|3, 2|2, 3|3] */ + x1 = wasm_f32x4_pmin(x0, v); /* [0|2, 1|3, 2|2, 3|3] */ x2 = glmm_splat(x1, 1); /* [1|3, 1|3, 1|3, 1|3] */ return wasm_f32x4_pmin(x1, x2); } @@ -90,7 +88,7 @@ glmm_128 glmm_vhmax(glmm_128 v) { glmm_128 x0, x1, x2; x0 = glmm_shuff1(v, 2, 3, 2, 3); /* [2, 3, 2, 3] */ - x1 = wasm_f32x4_pmax(x0, v); /* [0|2, 1|3, 2|2, 3|3] */ + x1 = wasm_f32x4_pmax(x0, v); /* [0|2, 1|3, 2|2, 3|3] */ x2 = glmm_splat(x1, 1); /* [1|3, 1|3, 1|3, 1|3] */ /* _mm_max_ss */ return wasm_i32x4_shuffle(x1, wasm_f32x4_pmax(x1, x2), 4, 1, 2, 3); diff --git a/include/cglm/simd/x86.h b/include/cglm/simd/x86.h index 696410d..8fd5a72 100644 --- a/include/cglm/simd/x86.h +++ b/include/cglm/simd/x86.h @@ -74,6 +74,9 @@ glmm_abs(__m128 x) { return _mm_andnot_ps(glmm_float32x4_SIGNMASK_NEG, x); } +static inline __m128 glmm_min(__m128 a, __m128 b) { return _mm_min_ps(a, b); } +static inline __m128 glmm_max(__m128 a, __m128 b) { return _mm_max_ps(a, b); } + static inline __m128 glmm_vhadd(__m128 v) {