mirror of
https://github.com/recp/cglm.git
synced 2026-02-17 03:39:05 +00:00
optimize min and max for vec4
This commit is contained in:
@@ -633,10 +633,14 @@ glm_vec4_distance(vec4 v1, vec4 v2) {
|
|||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec4_maxv(vec4 v1, vec4 v2, vec4 dest) {
|
glm_vec4_maxv(vec4 v1, vec4 v2, vec4 dest) {
|
||||||
|
#if defined( __SSE__ ) || defined( __SSE2__ )
|
||||||
|
_mm_store_ps(dest, _mm_max_ps(_mm_load_ps(v1), _mm_load_ps(v2)));
|
||||||
|
#else
|
||||||
dest[0] = glm_max(v1[0], v2[0]);
|
dest[0] = glm_max(v1[0], v2[0]);
|
||||||
dest[1] = glm_max(v1[1], v2[1]);
|
dest[1] = glm_max(v1[1], v2[1]);
|
||||||
dest[2] = glm_max(v1[2], v2[2]);
|
dest[2] = glm_max(v1[2], v2[2]);
|
||||||
dest[3] = glm_max(v1[3], v2[3]);
|
dest[3] = glm_max(v1[3], v2[3]);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@@ -649,10 +653,14 @@ glm_vec4_maxv(vec4 v1, vec4 v2, vec4 dest) {
|
|||||||
CGLM_INLINE
|
CGLM_INLINE
|
||||||
void
|
void
|
||||||
glm_vec4_minv(vec4 v1, vec4 v2, vec4 dest) {
|
glm_vec4_minv(vec4 v1, vec4 v2, vec4 dest) {
|
||||||
|
#if defined( __SSE__ ) || defined( __SSE2__ )
|
||||||
|
_mm_store_ps(dest, _mm_min_ps(_mm_load_ps(v1), _mm_load_ps(v2)));
|
||||||
|
#else
|
||||||
dest[0] = glm_min(v1[0], v2[0]);
|
dest[0] = glm_min(v1[0], v2[0]);
|
||||||
dest[1] = glm_min(v1[1], v2[1]);
|
dest[1] = glm_min(v1[1], v2[1]);
|
||||||
dest[2] = glm_min(v1[2], v2[2]);
|
dest[2] = glm_min(v1[2], v2[2]);
|
||||||
dest[3] = glm_min(v1[3], v2[3]);
|
dest[3] = glm_min(v1[3], v2[3]);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
|||||||
@@ -38,9 +38,25 @@ test_vec4_norm(vec4 vec) {
|
|||||||
return sqrtf(test_vec4_dot(vec, vec));
|
return sqrtf(test_vec4_dot(vec, vec));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
test_vec4_maxv(vec4 v1, vec4 v2, vec4 dest) {
|
||||||
|
dest[0] = glm_max(v1[0], v2[0]);
|
||||||
|
dest[1] = glm_max(v1[1], v2[1]);
|
||||||
|
dest[2] = glm_max(v1[2], v2[2]);
|
||||||
|
dest[3] = glm_max(v1[3], v2[3]);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
test_vec4_minv(vec4 v1, vec4 v2, vec4 dest) {
|
||||||
|
dest[0] = glm_min(v1[0], v2[0]);
|
||||||
|
dest[1] = glm_min(v1[1], v2[1]);
|
||||||
|
dest[2] = glm_min(v1[2], v2[2]);
|
||||||
|
dest[3] = glm_min(v1[3], v2[3]);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
test_vec4(void **state) {
|
test_vec4(void **state) {
|
||||||
vec4 v, v1, v2;
|
vec4 v, v1, v2, v3, v4;
|
||||||
int i;
|
int i;
|
||||||
float d1, d2;
|
float d1, d2;
|
||||||
|
|
||||||
@@ -123,4 +139,16 @@ test_vec4(void **state) {
|
|||||||
glm_vec4_broadcast(3, v2);
|
glm_vec4_broadcast(3, v2);
|
||||||
glm_vec4_muladd(v1, v2, v);
|
glm_vec4_muladd(v1, v2, v);
|
||||||
assert_true(glmc_vec4_eq_eps(v, 10));
|
assert_true(glmc_vec4_eq_eps(v, 10));
|
||||||
|
|
||||||
|
/* min, max */
|
||||||
|
test_rand_vec4(v1);
|
||||||
|
test_rand_vec4(v2);
|
||||||
|
|
||||||
|
glm_vec4_maxv(v1, v2, v3);
|
||||||
|
test_vec4_maxv(v1, v2, v4);
|
||||||
|
test_assert_vec4_eq(v3, v4);
|
||||||
|
|
||||||
|
glm_vec4_minv(v1, v2, v3);
|
||||||
|
test_vec4_minv(v1, v2, v4);
|
||||||
|
test_assert_vec4_eq(v3, v4);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user