mirror of
https://github.com/recp/cglm.git
synced 2025-12-24 12:32:40 +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
|
||||
void
|
||||
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[1] = glm_max(v1[1], v2[1]);
|
||||
dest[2] = glm_max(v1[2], v2[2]);
|
||||
dest[3] = glm_max(v1[3], v2[3]);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*!
|
||||
@@ -649,10 +653,14 @@ glm_vec4_maxv(vec4 v1, vec4 v2, vec4 dest) {
|
||||
CGLM_INLINE
|
||||
void
|
||||
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[1] = glm_min(v1[1], v2[1]);
|
||||
dest[2] = glm_min(v1[2], v2[2]);
|
||||
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));
|
||||
}
|
||||
|
||||
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
|
||||
test_vec4(void **state) {
|
||||
vec4 v, v1, v2;
|
||||
vec4 v, v1, v2, v3, v4;
|
||||
int i;
|
||||
float d1, d2;
|
||||
|
||||
@@ -123,4 +139,16 @@ test_vec4(void **state) {
|
||||
glm_vec4_broadcast(3, v2);
|
||||
glm_vec4_muladd(v1, v2, v);
|
||||
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