Vector subtraction functions

Add subtraction family of functions for vectors.
This commit is contained in:
BeeverFeever
2023-12-04 21:32:19 +11:00
parent 049db64a0f
commit 7696374f1e
12 changed files with 875 additions and 0 deletions

View File

@@ -105,6 +105,30 @@ CGLM_EXPORT
void
glmc_vec2_minadd(vec2 a, vec2 b, vec2 dest);
CGLM_EXPORT
void
glmc_vec2_subsub(vec2 a, vec2 b, vec2 dest);
CGLM_EXPORT
void
glmc_vec2_addsub(vec2 a, vec2 b, vec2 dest);
CGLM_EXPORT
void
glmc_vec2_mulsub(vec2 a, vec2 b, vec2 dest);
CGLM_EXPORT
void
glmc_vec2_mulsubs(vec2 a, float s, vec2 dest);
CGLM_EXPORT
void
glmc_vec2_maxsub(vec2 a, vec2 b, vec2 dest);
CGLM_EXPORT
void
glmc_vec2_minsub(vec2 a, vec2 b, vec2 dest);
CGLM_EXPORT
void
glmc_vec2_negate_to(vec2 v, vec2 dest);

View File

@@ -132,6 +132,30 @@ CGLM_EXPORT
void
glmc_vec3_minadd(vec3 a, vec3 b, vec3 dest);
CGLM_EXPORT
void
glmc_vec3_subsub(vec3 a, vec3 b, vec3 dest);
CGLM_EXPORT
void
glmc_vec3_addsub(vec3 a, vec3 b, vec3 dest);
CGLM_EXPORT
void
glmc_vec3_mulsub(vec3 a, vec3 b, vec3 dest);
CGLM_EXPORT
void
glmc_vec3_mulsubs(vec3 a, float s, vec3 dest);
CGLM_EXPORT
void
glmc_vec3_maxsub(vec3 a, vec3 b, vec3 dest);
CGLM_EXPORT
void
glmc_vec3_minsub(vec3 a, vec3 b, vec3 dest);
CGLM_EXPORT
void
glmc_vec3_negate(vec3 v);

View File

@@ -133,6 +133,30 @@ CGLM_EXPORT
void
glmc_vec4_minadd(vec4 a, vec4 b, vec4 dest);
CGLM_EXPORT
void
glmc_vec4_subsub(vec4 a, vec4 b, vec4 dest);
CGLM_EXPORT
void
glmc_vec4_subadd(vec4 a, vec4 b, vec4 dest);
CGLM_EXPORT
void
glmc_vec4_mulsub(vec4 a, vec4 b, vec4 dest);
CGLM_EXPORT
void
glmc_vec4_mulsubs(vec4 a, float s, vec4 dest);
CGLM_EXPORT
void
glmc_vec4_maxsub(vec4 a, vec4 b, vec4 dest);
CGLM_EXPORT
void
glmc_vec4_minsub(vec4 a, vec4 b, vec4 dest);
CGLM_EXPORT
void
glmc_vec4_negate(vec4 v);

View File

@@ -37,6 +37,12 @@
CGLM_INLINE vec2s glms_vec2_muladds(vec2s a, float s, vec2s dest)
CGLM_INLINE vec2s glms_vec2_maxadd(vec2s a, vec2s b, vec2s dest)
CGLM_INLINE vec2s glms_vec2_minadd(vec2s a, vec2s b, vec2s dest)
CGLM_INLINE vec2s glms_vec2_subsub(vec2s a, vec2s b, vec2s dest)
CGLM_INLINE vec2s glms_vec2_addsub(vec2s a, vec2s b, vec2s dest)
CGLM_INLINE vec2s glms_vec2_mulsub(vec2s a, vec2s b, vec2s dest)
CGLM_INLINE vec2s glms_vec2_mulsubs(vec2s a, float s, vec2s dest)
CGLM_INLINE vec2s glms_vec2_maxsub(vec2s a, vec2s b, vec2s dest)
CGLM_INLINE vec2s glms_vec2_minsub(vec2s a, vec2s b, vec2s dest)
CGLM_INLINE vec2s glms_vec2_negate(vec2s v)
CGLM_INLINE vec2s glms_vec2_normalize(vec2s v)
CGLM_INLINE vec2s glms_vec2_rotate(vec2s v, float angle, vec2s axis)
@@ -430,6 +436,102 @@ glms_vec2_(minadd)(vec2s a, vec2s b, vec2s dest) {
return dest;
}
/*!
* @brief sub two vectors and sub result to dest
*
* it applies -= operator so dest must be initialized
*
* @param[in] a vector 1
* @param[in] b vector 2
* @returns dest -= (a - b)
*/
CGLM_INLINE
vec2s
glms_vec2_(subsub)(vec2s a, vec2s b, vec2s dest) {
glm_vec2_subsub(a.raw, b.raw, dest.raw);
return dest;
}
/*!
* @brief add two vectors and sub result to dest
*
* it applies -= operator so dest must be initialized
*
* @param[in] a vector 1
* @param[in] b vector 2
* @returns dest -= (a + b)
*/
CGLM_INLINE
vec2s
glms_vec2_(addsub)(vec2s a, vec2s b, vec2s dest) {
glm_vec2_addsub(a.raw, b.raw, dest.raw);
return dest;
}
/*!
* @brief mul two vectors and sub result to dest
*
* it applies -= operator so dest must be initialized
*
* @param[in] a vector 1
* @param[in] b vector 2
* @returns dest -= (a * b)
*/
CGLM_INLINE
vec2s
glms_vec2_(mulsub)(vec2s a, vec2s b, vec2s dest) {
glm_vec2_mulsub(a.raw, b.raw, dest.raw);
return dest;
}
/*!
* @brief mul vector with scalar and sub result to dest
*
* it applies -= operator so dest must be initialized
*
* @param[in] a vector
* @param[in] s scalar
* @returns dest -= (a * b)
*/
CGLM_INLINE
vec2s
glms_vec2_(mulsubs)(vec2s a, float s, vec2s dest) {
glm_vec2_mulsubs(a.raw, s, dest.raw);
return dest;
}
/*!
* @brief sub max of two vectors to dest
*
* it applies += operator so dest must be initialized
*
* @param[in] a vector 1
* @param[in] b vector 2
* @returns dest -= max(a, b)
*/
CGLM_INLINE
vec2s
glms_vec2_(maxsub)(vec2s a, vec2s b, vec2s dest) {
glm_vec2_maxsub(a.raw, b.raw, dest.raw);
return dest;
}
/*!
* @brief sub min of two vectors to dest
*
* it applies -= operator so dest must be initialized
*
* @param[in] a vector 1
* @param[in] b vector 2
* @returns dest -= min(a, b)
*/
CGLM_INLINE
vec2s
glms_vec2_(minsub)(vec2s a, vec2s b, vec2s dest) {
glm_vec2_minsub(a.raw, b.raw, dest.raw);
return dest;
}
/*!
* @brief negate vector components
*

View File

@@ -41,6 +41,12 @@
CGLM_INLINE vec3s glms_vec3_muladds(vec3s a, float s, vec3s dest);
CGLM_INLINE vec3s glms_vec3_maxadd(vec3s a, vec3s b, vec3s dest);
CGLM_INLINE vec3s glms_vec3_minadd(vec3s a, vec3s b, vec3s dest);
CGLM_INLINE vec3s glms_vec3_subsub(vec3s a, vec3s b, vec3s dest);
CGLM_INLINE vec3s glms_vec3_addsub(vec3s a, vec3s b, vec3s dest);
CGLM_INLINE vec3s glms_vec3_mulsub(vec3s a, vec3s b, vec3s dest);
CGLM_INLINE vec3s glms_vec3_mulsubs(vec3s a, float s, vec3s dest);
CGLM_INLINE vec3s glms_vec3_maxsub(vec3s a, vec3s b, vec3s dest);
CGLM_INLINE vec3s glms_vec3_minsub(vec3s a, vec3s b, vec3s dest);
CGLM_INLINE vec3s glms_vec3_flipsign(vec3s v);
CGLM_INLINE vec3s glms_vec3_negate(vec3s v);
CGLM_INLINE vec3s glms_vec3_normalize(vec3s v);
@@ -484,6 +490,102 @@ glms_vec3_(minadd)(vec3s a, vec3s b, vec3s dest) {
return dest;
}
/*!
* @brief sub two vectors and sub result to dest
*
* it applies -= operator so dest must be initialized
*
* @param[in] a vector 1
* @param[in] b vector 2
* @returns dest -= (a - b)
*/
CGLM_INLINE
vec3s
glms_vec3_(subsub)(vec3s a, vec3s b, vec3s dest) {
glm_vec3_subsub(a.raw, b.raw, dest.raw);
return dest;
}
/*!
* @brief add two vectors and sub result to dest
*
* it applies -= operator so dest must be initialized
*
* @param[in] a vector 1
* @param[in] b vector 2
* @returns dest -= (a + b)
*/
CGLM_INLINE
vec3s
glms_vec3_(addsub)(vec3s a, vec3s b, vec3s dest) {
glm_vec3_addsub(a.raw, b.raw, dest.raw);
return dest;
}
/*!
* @brief mul two vectors and sub result to dest
*
* it applies -= operator so dest must be initialized
*
* @param[in] a vector 1
* @param[in] b vector 2
* @returns dest -= (a * b)
*/
CGLM_INLINE
vec3s
glms_vec3_(mulsub)(vec3s a, vec3s b, vec3s dest) {
glm_vec3_mulsub(a.raw, b.raw, dest.raw);
return dest;
}
/*!
* @brief mul vector with scalar and sub result to dest
*
* it applies -= operator so dest must be initialized
*
* @param[in] a vector
* @param[in] s scalar
* @returns dest -= (a * b)
*/
CGLM_INLINE
vec3s
glms_vec3_(mulsubs)(vec3s a, float s, vec3s dest) {
glm_vec3_mulsubs(a.raw, s, dest.raw);
return dest;
}
/*!
* @brief sub max of two vectors to dest
*
* it applies -= operator so dest must be initialized
*
* @param[in] a vector 1
* @param[in] b vector 2
* @returns dest -= max(a, b)
*/
CGLM_INLINE
vec3s
glms_vec3_(maxsub)(vec3s a, vec3s b, vec3s dest) {
glm_vec3_maxsub(a.raw, b.raw, dest.raw);
return dest;
}
/*!
* @brief sub min of two vectors to dest
*
* it applies -= operator so dest must be initialized
*
* @param[in] a vector 1
* @param[in] b vector 2
* @returns dest -= min(a, b)
*/
CGLM_INLINE
vec3s
glms_vec3_(minsub)(vec3s a, vec3s b, vec3s dest) {
glm_vec3_minsub(a.raw, b.raw, dest.raw);
return dest;
}
/*!
* @brief negate vector components and store result in dest
*

View File

@@ -41,6 +41,12 @@
CGLM_INLINE vec4s glms_vec4_muladds(vec4s a, float s, vec4s dest);
CGLM_INLINE vec4s glms_vec4_maxadd(vec4s a, vec4s b, vec4s dest);
CGLM_INLINE vec4s glms_vec4_minadd(vec4s a, vec4s b, vec4s dest);
CGLM_INLINE vec4s glms_vec4_subsub(vec4s a, vec4s b, vec4s dest);
CGLM_INLINE vec4s glms_vec4_addsub(vec4s a, vec4s b, vec4s dest);
CGLM_INLINE vec4s glms_vec4_mulsub(vec4s a, vec4s b, vec4s dest);
CGLM_INLINE vec4s glms_vec4_mulsubs(vec4s a, float s, vec4s dest);
CGLM_INLINE vec4s glms_vec4_maxsub(vec4s a, vec4s b, vec4s dest);
CGLM_INLINE vec4s glms_vec4_minsub(vec4s a, vec4s b, vec4s dest);
CGLM_INLINE vec4s glms_vec4_negate(vec4s v);
CGLM_INLINE vec4s glms_vec4_normalize(vec4s v);
CGLM_INLINE float glms_vec4_distance(vec4s a, vec4s b);
@@ -513,6 +519,102 @@ glms_vec4_(minadd)(vec4s a, vec4s b, vec4s dest) {
return dest;
}
/*!
* @brief sub two vectors and sub result to dest
*
* it applies -= operator so dest must be initialized
*
* @param[in] a vector 1
* @param[in] b vector 2
* @returns dest -= (a + b)
*/
CGLM_INLINE
vec4s
glms_vec4_(subsub)(vec4s a, vec4s b, vec4s dest) {
glm_vec4_subsub(a.raw, b.raw, dest.raw);
return dest;
}
/*!
* @brief add two vectors and sub result to dest
*
* it applies -= operator so dest must be initialized
*
* @param[in] a vector 1
* @param[in] b vector 2
* @returns dest -= (a + b)
*/
CGLM_INLINE
vec4s
glms_vec4_(addsub)(vec4s a, vec4s b, vec4s dest) {
glm_vec4_addsub(a.raw, b.raw, dest.raw);
return dest;
}
/*!
* @brief mul two vectors and sub result to dest
*
* it applies -= operator so dest must be initialized
*
* @param[in] a vector 1
* @param[in] b vector 2
* @returns dest -= (a * b)
*/
CGLM_INLINE
vec4s
glms_vec4_(mulsub)(vec4s a, vec4s b, vec4s dest) {
glm_vec4_mulsub(a.raw, b.raw, dest.raw);
return dest;
}
/*!
* @brief mul vector with scalar and sub result to dest
*
* it applies -= operator so dest must be initialized
*
* @param[in] a vector
* @param[in] s scalar
* @returns dest -= (a * b)
*/
CGLM_INLINE
vec4s
glms_vec4_(mulsubs)(vec4s a, float s, vec4s dest) {
glm_vec4_mulsubs(a.raw, s, dest.raw);
return dest;
}
/*!
* @brief sub max of two vectors to dest
*
* it applies -= operator so dest must be initialized
*
* @param[in] a vector 1
* @param[in] b vector 2
* @returns dest -= max(a, b)
*/
CGLM_INLINE
vec4s
glms_vec4_(maxsub)(vec4s a, vec4s b, vec4s dest) {
glm_vec4_maxsub(a.raw, b.raw, dest.raw);
return dest;
}
/*!
* @brief sub min of two vectors to dest
*
* it applies -= operator so dest must be initialized
*
* @param[in] a vector 1
* @param[in] b vector 2
* @returns dest -= min(a, b)
*/
CGLM_INLINE
vec4s
glms_vec4_(minsub)(vec4s a, vec4s b, vec4s dest) {
glm_vec4_minsub(a.raw, b.raw, dest.raw);
return dest;
}
/*!
* @brief negate vector components and store result in dest
*

View File

@@ -36,6 +36,12 @@
CGLM_INLINE void glm_vec2_muladds(vec2 a, float s, vec2 dest)
CGLM_INLINE void glm_vec2_maxadd(vec2 a, vec2 b, vec2 dest)
CGLM_INLINE void glm_vec2_minadd(vec2 a, vec2 b, vec2 dest)
CGLM_INLINE void glm_vec2_subsub(vec2 a, vec2 b, vec2 dest)
CGLM_INLINE void glm_vec2_addsub(vec2 a, vec2 b, vec2 dest)
CGLM_INLINE void glm_vec2_mulsub(vec2 a, vec2 b, vec2 dest)
CGLM_INLINE void glm_vec2_mulsubs(vec2 a, float s, vec2 dest)
CGLM_INLINE void glm_vec2_maxsub(vec2 a, vec2 b, vec2 dest)
CGLM_INLINE void glm_vec2_minsub(vec2 a, vec2 b, vec2 dest)
CGLM_INLINE void glm_vec2_negate_to(vec2 v, vec2 dest)
CGLM_INLINE void glm_vec2_negate(vec2 v)
CGLM_INLINE void glm_vec2_normalize(vec2 v)
@@ -403,6 +409,102 @@ glm_vec2_minadd(vec2 a, vec2 b, vec2 dest) {
dest[1] += glm_min(a[1], b[1]);
}
/*!
* @brief sub two vectors and sub result to dest
*
* it applies -= operator so dest must be initialized
*
* @param[in] a vector 1
* @param[in] b vector 2
* @param[out] dest dest -= (a - b)
*/
CGLM_INLINE
void
glm_vec2_subsub(vec2 a, vec2 b, vec2 dest) {
dest[0] -= a[0] - b[0];
dest[1] -= a[1] - b[1];
}
/*!
* @brief add two vectors and sub result to dest
*
* it applies -= operator so dest must be initialized
*
* @param[in] a vector 1
* @param[in] b vector 2
* @param[out] dest dest -= (a + b)
*/
CGLM_INLINE
void
glm_vec2_addsub(vec2 a, vec2 b, vec2 dest) {
dest[0] -= a[0] + b[0];
dest[1] -= a[1] + b[1];
}
/*!
* @brief mul two vectors and sub result to dest
*
* it applies -= operator so dest must be initialized
*
* @param[in] a vector 1
* @param[in] b vector 2
* @param[out] dest dest -= (a * b)
*/
CGLM_INLINE
void
glm_vec2_mulsub(vec2 a, vec2 b, vec2 dest) {
dest[0] -= a[0] * b[0];
dest[1] -= a[1] * b[1];
}
/*!
* @brief mul vector with scalar and sub result to sum
*
* it applies -= operator so dest must be initialized
*
* @param[in] a vector
* @param[in] s scalar
* @param[out] dest dest -= (a * b)
*/
CGLM_INLINE
void
glm_vec2_mulsubs(vec2 a, float s, vec2 dest) {
dest[0] -= a[0] * s;
dest[1] -= a[1] * s;
}
/*!
* @brief sub max of two vectors to result/dest
*
* it applies -= operator so dest must be initialized
*
* @param[in] a vector 1
* @param[in] b vector 2
* @param[out] dest dest -= max(a, b)
*/
CGLM_INLINE
void
glm_vec2_maxsub(vec2 a, vec2 b, vec2 dest) {
dest[0] -= glm_max(a[0], b[0]);
dest[1] -= glm_max(a[1], b[1]);
}
/*!
* @brief sub min of two vectors to result/dest
*
* it applies -= operator so dest must be initialized
*
* @param[in] a vector 1
* @param[in] b vector 2
* @param[out] dest dest -= min(a, b)
*/
CGLM_INLINE
void
glm_vec2_minsub(vec2 a, vec2 b, vec2 dest) {
dest[0] -= glm_min(a[0], b[0]);
dest[1] -= glm_min(a[1], b[1]);
}
/*!
* @brief negate vector components and store result in dest
*

View File

@@ -40,6 +40,12 @@
CGLM_INLINE void glm_vec3_muladds(vec3 a, float s, vec3 dest);
CGLM_INLINE void glm_vec3_maxadd(vec3 a, vec3 b, vec3 dest);
CGLM_INLINE void glm_vec3_minadd(vec3 a, vec3 b, vec3 dest);
CGLM_INLINE void glm_vec3_subsub(vec3 a, vec3 b, vec3 dest);
CGLM_INLINE void glm_vec3_addsub(vec3 a, vec3 b, vec3 dest);
CGLM_INLINE void glm_vec3_mulsub(vec3 a, vec3 b, vec3 dest);
CGLM_INLINE void glm_vec3_mulsubs(vec3 a, float s, vec3 dest);
CGLM_INLINE void glm_vec3_maxsub(vec3 a, vec3 b, vec3 dest);
CGLM_INLINE void glm_vec3_minsub(vec3 a, vec3 b, vec3 dest);
CGLM_INLINE void glm_vec3_flipsign(vec3 v);
CGLM_INLINE void glm_vec3_flipsign_to(vec3 v, vec3 dest);
CGLM_INLINE void glm_vec3_negate_to(vec3 v, vec3 dest);
@@ -503,6 +509,108 @@ glm_vec3_minadd(vec3 a, vec3 b, vec3 dest) {
dest[2] += glm_min(a[2], b[2]);
}
/*!
* @brief sub two vectors and sub result to dest
*
* it applies += operator so dest must be initialized
*
* @param[in] a vector 1
* @param[in] b vector 2
* @param[out] dest dest -= (a - b)
*/
CGLM_INLINE
void
glm_vec3_subsub(vec3 a, vec3 b, vec3 dest) {
dest[0] -= a[0] - b[0];
dest[1] -= a[1] - b[1];
dest[2] -= a[2] - b[2];
}
/*!
* @brief add two vectors and sub result to dest
*
* it applies += operator so dest must be initialized
*
* @param[in] a vector 1
* @param[in] b vector 2
* @param[out] dest dest -= (a + b)
*/
CGLM_INLINE
void
glm_vec3_addsub(vec3 a, vec3 b, vec3 dest) {
dest[0] -= a[0] + b[0];
dest[1] -= a[1] + b[1];
dest[2] -= a[2] + b[2];
}
/*!
* @brief mul two vectors and sub result to dest
*
* it applies -= operator so dest must be initialized
*
* @param[in] a vector 1
* @param[in] b vector 2
* @param[out] dest dest -= (a * b)
*/
CGLM_INLINE
void
glm_vec3_mulsub(vec3 a, vec3 b, vec3 dest) {
dest[0] -= a[0] * b[0];
dest[1] -= a[1] * b[1];
dest[2] -= a[2] * b[2];
}
/*!
* @brief mul vector with scalar and sub result to dest
*
* it applies -= operator so dest must be initialized
*
* @param[in] a vector
* @param[in] s scalar
* @param[out] dest dest -= (a * b)
*/
CGLM_INLINE
void
glm_vec3_mulsubs(vec3 a, float s, vec3 dest) {
dest[0] -= a[0] * s;
dest[1] -= a[1] * s;
dest[2] -= a[2] * s;
}
/*!
* @brief sub max of two vectors to result/dest
*
* it applies -= operator so dest must be initialized
*
* @param[in] a vector 1
* @param[in] b vector 2
* @param[out] dest dest -= max(a, b)
*/
CGLM_INLINE
void
glm_vec3_maxsub(vec3 a, vec3 b, vec3 dest) {
dest[0] -= glm_max(a[0], b[0]);
dest[1] -= glm_max(a[1], b[1]);
dest[2] -= glm_max(a[2], b[2]);
}
/*!
* @brief sub min of two vectors to result/dest
*
* it applies -= operator so dest must be initialized
*
* @param[in] a vector 1
* @param[in] b vector 2
* @param[out] dest dest -= min(a, b)
*/
CGLM_INLINE
void
glm_vec3_minsub(vec3 a, vec3 b, vec3 dest) {
dest[0] -= glm_min(a[0], b[0]);
dest[1] -= glm_min(a[1], b[1]);
dest[2] -= glm_min(a[2], b[2]);
}
/*!
* @brief negate vector components and store result in dest
*

View File

@@ -39,6 +39,12 @@
CGLM_INLINE void glm_vec4_muladds(vec4 a, float s, vec4 dest);
CGLM_INLINE void glm_vec4_maxadd(vec4 a, vec4 b, vec4 dest);
CGLM_INLINE void glm_vec4_minadd(vec4 a, vec4 b, vec4 dest);
CGLM_INLINE void glm_vec4_subsub(vec4 a, vec4 b, vec4 dest);
CGLM_INLINE void glm_vec4_addsub(vec4 a, vec4 b, vec4 dest);
CGLM_INLINE void glm_vec4_mulsub(vec4 a, vec4 b, vec4 dest);
CGLM_INLINE void glm_vec4_mulsubs(vec4 a, float s, vec4 dest);
CGLM_INLINE void glm_vec4_maxsub(vec4 a, vec4 b, vec4 dest);
CGLM_INLINE void glm_vec4_minsub(vec4 a, vec4 b, vec4 dest);
CGLM_INLINE void glm_vec4_negate(vec4 v);
CGLM_INLINE void glm_vec4_inv(vec4 v);
CGLM_INLINE void glm_vec4_inv_to(vec4 v, vec4 dest);
@@ -698,6 +704,178 @@ glm_vec4_minadd(vec4 a, vec4 b, vec4 dest) {
#endif
}
/*!
* @brief sub two vectors and sub result to dest
*
* it applies -= operator so dest must be initialized
*
* @param[in] a vector 1
* @param[in] b vector 2
* @param[out] dest dest -= (a - b)
*/
CGLM_INLINE
void
glm_vec4_subsub(vec4 a, vec4 b, vec4 dest) {
#if defined(__wasm__) && defined(__wasm_simd128__)
glmm_store(dest, wasm_f32x4_sub(
glmm_load(dest),
wasm_f32x4_sub(glmm_load(a), glmm_load(b))));
#elif defined( __SSE__ ) || defined( __SSE2__ )
glmm_store(dest, _mm_sub_ps(glmm_load(dest),
_mm_sub_ps(glmm_load(a),
glmm_load(b))));
#elif defined(CGLM_NEON_FP)
vst1q_f32(dest, vsubq_f32(vld1q_f32(dest),
vsubq_f32(vld1q_f32(a),
vld1q_f32(b))));
#else
dest[0] -= a[0] - b[0];
dest[1] -= a[1] - b[1];
dest[2] -= a[2] - b[2];
dest[3] -= a[3] - b[3];
#endif
}
/*!
* @brief add two vectors and sub result to dest
*
* it applies -= operator so dest must be initialized
*
* @param[in] a vector 1
* @param[in] b vector 2
* @param[out] dest dest -= (a + b)
*/
CGLM_INLINE
void
glm_vec4_addsub(vec4 a, vec4 b, vec4 dest) {
#if defined(__wasm__) && defined(__wasm_simd128__)
glmm_store(dest, wasm_f32x4_add(
glmm_load(dest),
wasm_f32x4_sub(glmm_load(a), glmm_load(b))));
#elif defined( __SSE__ ) || defined( __SSE2__ )
glmm_store(dest, _mm_add_ps(glmm_load(dest),
_mm_sub_ps(glmm_load(a),
glmm_load(b))));
#elif defined(CGLM_NEON_FP)
vst1q_f32(dest, vaddq_f32(vld1q_f32(dest),
vsubq_f32(vld1q_f32(a),
vld1q_f32(b))));
#else
dest[0] += a[0] - b[0];
dest[1] += a[1] - b[1];
dest[2] += a[2] - b[2];
dest[3] += a[3] - b[3];
#endif
}
/*!
* @brief mul two vectors and sub result to dest
*
* it applies -= operator so dest must be initialized
*
* @param[in] a vector 1
* @param[in] b vector 2
* @param[out] dest dest -= (a * b)
*/
CGLM_INLINE
void
glm_vec4_mulsub(vec4 a, vec4 b, vec4 dest) {
#if defined(CGLM_SIMD)
glmm_store(dest, glmm_fmsub(glmm_load(a), glmm_load(b), glmm_load(dest)));
#else
dest[0] -= a[0] * b[0];
dest[1] -= a[1] * b[1];
dest[2] -= a[2] * b[2];
dest[3] -= a[3] * b[3];
#endif
}
/*!
* @brief mul vector with scalar and sub result to dest
*
* it applies -= operator so dest must be initialized
*
* @param[in] a vector
* @param[in] s scalar
* @param[out] dest dest -= (a * b)
*/
CGLM_INLINE
void
glm_vec4_mulsubs(vec4 a, float s, vec4 dest) {
#if defined(CGLM_SIMD)
glmm_store(dest, glmm_fmsub(glmm_load(a), glmm_set1(s), glmm_load(dest)));
#else
dest[0] -= a[0] * s;
dest[1] -= a[1] * s;
dest[2] -= a[2] * s;
dest[3] -= a[3] * s;
#endif
}
/*!
* @brief sub max of two vectors to dest
*
* it applies -= operator so dest must be initialized
*
* @param[in] a vector 1
* @param[in] b vector 2
* @param[out] dest dest -= max(a, b)
*/
CGLM_INLINE
void
glm_vec4_maxsub(vec4 a, vec4 b, vec4 dest) {
#if defined(__wasm__) && defined(__wasm_simd128__)
glmm_store(dest, wasm_f32x4_sub(
glmm_load(dest),
wasm_f32x4_pmax(glmm_load(a), glmm_load(b))));
#elif defined( __SSE__ ) || defined( __SSE2__ )
glmm_store(dest, _mm_sub_ps(glmm_load(dest),
_mm_max_ps(glmm_load(a),
glmm_load(b))));
#elif defined(CGLM_NEON_FP)
vst1q_f32(dest, vsubq_f32(vld1q_f32(dest),
vmaxq_f32(vld1q_f32(a),
vld1q_f32(b))));
#else
dest[0] -= glm_max(a[0], b[0]);
dest[1] -= glm_max(a[1], b[1]);
dest[2] -= glm_max(a[2], b[2]);
dest[3] -= glm_max(a[3], b[3]);
#endif
}
/*!
* @brief sub min of two vectors to dest
*
* it applies -= operator so dest must be initialized
*
* @param[in] a vector 1
* @param[in] b vector 2
* @param[out] dest dest -= min(a, b)
*/
CGLM_INLINE
void
glm_vec4_minsub(vec4 a, vec4 b, vec4 dest) {
#if defined(__wasm__) && defined(__wasm_simd128__)
glmm_store(dest, wasm_f32x4_sub(
glmm_load(dest),
wasm_f32x4_pmin(glmm_load(a), glmm_load(b))));
#elif defined( __SSE__ ) || defined( __SSE2__ )
glmm_store(dest, _mm_sub_ps(glmm_load(dest),
_mm_min_ps(glmm_load(a),
glmm_load(b))));
#elif defined(CGLM_NEON_FP)
vst1q_f32(dest, vsubq_f32(vld1q_f32(dest),
vminq_f32(vld1q_f32(a),
vld1q_f32(b))));
#else
dest[0] -= glm_min(a[0], b[0]);
dest[1] -= glm_min(a[1], b[1]);
dest[2] -= glm_min(a[2], b[2]);
dest[3] -= glm_min(a[3], b[3]);
#endif
}
/*!
* @brief negate vector components and store result in dest
*

View File

@@ -164,6 +164,43 @@ glmc_vec2_minadd(vec2 a, vec2 b, vec2 dest) {
glm_vec2_minadd(a, b, dest);
}
CGLM_EXPORT
void
glmc_vec2_subsub(vec2 a, vec2 b, vec2 dest) {
glm_vec2_subsub(a, b, dest);
}
CGLM_EXPORT
void
glmc_vec2_addsub(vec2 a, vec2 b, vec2 dest) {
glm_vec2_addsub(a, b, dest);
}
CGLM_EXPORT
void
glmc_vec2_mulsub(vec2 a, vec2 b, vec2 dest) {
glm_vec2_mulsub(a, b, dest);
}
CGLM_EXPORT
void
glmc_vec2_mulsubs(vec2 a, float s, vec2 dest) {
glm_vec2_mulsubs(a, s, dest);
}
CGLM_EXPORT
void
glmc_vec2_maxsub(vec2 a, vec2 b, vec2 dest) {
glm_vec2_maxsub(a, b, dest);
}
CGLM_EXPORT
void
glmc_vec2_minsub(vec2 a, vec2 b, vec2 dest) {
glm_vec2_minsub(a, b, dest);
}
CGLM_EXPORT
void
glmc_vec2_negate_to(vec2 v, vec2 dest) {

View File

@@ -176,6 +176,42 @@ glmc_vec3_minadd(vec3 a, vec3 b, vec3 dest) {
glm_vec3_minadd(a, b, dest);
}
CGLM_EXPORT
void
glmc_vec3_subsub(vec3 a, vec3 b, vec3 dest) {
glm_vec3_subsub(a, b, dest);
}
CGLM_EXPORT
void
glmc_vec3_addsub(vec3 a, vec3 b, vec3 dest) {
glm_vec3_addsub(a, b, dest);
}
CGLM_EXPORT
void
glmc_vec3_mulsub(vec3 a, vec3 b, vec3 dest) {
glm_vec3_mulsub(a, b, dest);
}
CGLM_EXPORT
void
glmc_vec3_mulsubs(vec3 a, float s, vec3 dest) {
glm_vec3_mulsubs(a, s, dest);
}
CGLM_EXPORT
void
glmc_vec3_maxsub(vec3 a, vec3 b, vec3 dest) {
glm_vec3_maxsub(a, b, dest);
}
CGLM_EXPORT
void
glmc_vec3_minsub(vec3 a, vec3 b, vec3 dest) {
glm_vec3_minsub(a, b, dest);
}
CGLM_EXPORT
void
glmc_vec3_negate(vec3 v) {

View File

@@ -176,6 +176,42 @@ glmc_vec4_minadd(vec4 a, vec4 b, vec4 dest) {
glm_vec4_minadd(a, b, dest);
}
CGLM_EXPORT
void
glmc_vec4_subsub(vec4 a, vec4 b, vec4 dest) {
glm_vec4_subsub(a, b, dest);
}
CGLM_EXPORT
void
glmc_vec4_addsub(vec4 a, vec4 b, vec4 dest) {
glm_vec4_addsub(a, b, dest);
}
CGLM_EXPORT
void
glmc_vec4_mulsub(vec4 a, vec4 b, vec4 dest) {
glm_vec4_mulsub(a, b, dest);
}
CGLM_EXPORT
void
glmc_vec4_mulsubs(vec4 a, float s, vec4 dest) {
glm_vec4_mulsubs(a, s, dest);
}
CGLM_EXPORT
void
glmc_vec4_maxsub(vec4 a, vec4 b, vec4 dest) {
glm_vec4_maxsub(a, b, dest);
}
CGLM_EXPORT
void
glmc_vec4_minsub(vec4 a, vec4 b, vec4 dest) {
glm_vec4_minsub(a, b, dest);
}
CGLM_EXPORT
void
glmc_vec4_negate(vec4 v) {