mirror of
https://github.com/recp/cglm.git
synced 2026-02-17 03:39:05 +00:00
refactor vec4 : glm_vec4_distance for SSE/SSE2
According to suggestion by recp at https://github.com/recp/cglm/issues/82#issuecomment-483051704.
This commit is contained in:
@@ -690,12 +690,7 @@ CGLM_INLINE
|
|||||||
float
|
float
|
||||||
glm_vec4_distance(vec4 a, vec4 b) {
|
glm_vec4_distance(vec4 a, vec4 b) {
|
||||||
#if defined( __SSE__ ) || defined( __SSE2__ )
|
#if defined( __SSE__ ) || defined( __SSE2__ )
|
||||||
__m128 x0;
|
return glmm_norm(_mm_sub_ps(glmm_load(b), glmm_load(a)));
|
||||||
x0 = _mm_sub_ps(glmm_load(b), glmm_load(a));
|
|
||||||
x0 = _mm_mul_ps(x0, x0);
|
|
||||||
x0 = _mm_add_ps(x0, glmm_shuff1(x0, 1, 0, 3, 2));
|
|
||||||
return _mm_cvtss_f32(_mm_sqrt_ss(_mm_add_ss(x0,
|
|
||||||
glmm_shuff1(x0, 0, 1, 0, 1))));
|
|
||||||
#elif defined(CGLM_NEON_FP)
|
#elif defined(CGLM_NEON_FP)
|
||||||
return glmm_norm(vsubq_f32(glmm_load(a), glmm_load(b)));
|
return glmm_norm(vsubq_f32(glmm_load(a), glmm_load(b)));
|
||||||
#else
|
#else
|
||||||
|
|||||||
Reference in New Issue
Block a user