simd: use glmm_set1() to optimize broadcasting single float

This commit is contained in:
Recep Aslantas
2024-04-10 22:52:53 +03:00
parent 62c0448e25
commit 68bdec4510
6 changed files with 24 additions and 17 deletions
+7 -7
View File
@@ -215,7 +215,7 @@ glm_vec4_one(vec4 v) {
#if defined(__wasm__) && defined(__wasm_simd128__)
glmm_store(v, wasm_f32x4_const_splat(1.0f));
#elif defined( __SSE__ ) || defined( __SSE2__ )
glmm_store(v, _mm_set1_ps(1.0f));
glmm_store(v, glmm_set1(1.0f));
#elif defined(CGLM_NEON_FP)
vst1q_f32(v, vdupq_n_f32(1.0f));
#else
@@ -367,7 +367,7 @@ glm_vec4_adds(vec4 v, float s, vec4 dest) {
#if defined(__wasm__) && defined(__wasm_simd128__)
glmm_store(dest, wasm_f32x4_add(glmm_load(v), wasm_f32x4_splat(s)));
#elif defined( __SSE__ ) || defined( __SSE2__ )
glmm_store(dest, _mm_add_ps(glmm_load(v), _mm_set1_ps(s)));
glmm_store(dest, _mm_add_ps(glmm_load(v), glmm_set1(s)));
#elif defined(CGLM_NEON_FP)
vst1q_f32(dest, vaddq_f32(vld1q_f32(v), vdupq_n_f32(s)));
#else
@@ -415,7 +415,7 @@ glm_vec4_subs(vec4 v, float s, vec4 dest) {
#if defined(__wasm__) && defined(__wasm_simd128__)
glmm_store(dest, wasm_f32x4_sub(glmm_load(v), wasm_f32x4_splat(s)));
#elif defined( __SSE__ ) || defined( __SSE2__ )
glmm_store(dest, _mm_sub_ps(glmm_load(v), _mm_set1_ps(s)));
glmm_store(dest, _mm_sub_ps(glmm_load(v), glmm_set1(s)));
#elif defined(CGLM_NEON_FP)
vst1q_f32(dest, vsubq_f32(vld1q_f32(v), vdupq_n_f32(s)));
#else
@@ -463,7 +463,7 @@ glm_vec4_scale(vec4 v, float s, vec4 dest) {
#if defined(__wasm__) && defined(__wasm_simd128__)
glmm_store(dest, wasm_f32x4_mul(glmm_load(v), wasm_f32x4_splat(s)));
#elif defined( __SSE__ ) || defined( __SSE2__ )
glmm_store(dest, _mm_mul_ps(glmm_load(v), _mm_set1_ps(s)));
glmm_store(dest, _mm_mul_ps(glmm_load(v), glmm_set1(s)));
#elif defined(CGLM_NEON_FP)
vst1q_f32(dest, vmulq_f32(vld1q_f32(v), vdupq_n_f32(s)));
#else
@@ -528,7 +528,7 @@ glm_vec4_divs(vec4 v, float s, vec4 dest) {
#if defined(__wasm__) && defined(__wasm_simd128__)
glmm_store(dest, wasm_f32x4_div(glmm_load(v), wasm_f32x4_splat(s)));
#elif defined( __SSE__ ) || defined( __SSE2__ )
glmm_store(dest, _mm_div_ps(glmm_load(v), _mm_set1_ps(s)));
glmm_store(dest, _mm_div_ps(glmm_load(v), glmm_set1(s)));
#else
glm_vec4_scale(v, 1.0f / s, dest);
#endif
@@ -1065,8 +1065,8 @@ glm_vec4_clamp(vec4 v, float minVal, float maxVal) {
glmm_store(v, glmm_min(glmm_max(glmm_load(v), wasm_f32x4_splat(minVal)),
wasm_f32x4_splat(maxVal)));
#elif defined( __SSE__ ) || defined( __SSE2__ )
glmm_store(v, glmm_min(glmm_max(glmm_load(v), _mm_set1_ps(minVal)),
_mm_set1_ps(maxVal)));
glmm_store(v, glmm_min(glmm_max(glmm_load(v), glmm_set1(minVal)),
glmm_set1(maxVal)));
#elif defined(CGLM_NEON_FP)
glmm_store(v, glmm_min(glmm_max(vld1q_f32(v), vdupq_n_f32(minVal)),
vdupq_n_f32(maxVal)));