vec: implement muladd's scalar version

This commit is contained in:
Recep Aslantas
2018-04-13 22:30:44 +03:00
parent 13345f06c1
commit 7f7007574b
8 changed files with 83 additions and 0 deletions

View File

@@ -49,6 +49,7 @@ Functions:
#. :c:func:`glm_vec_addadd` #. :c:func:`glm_vec_addadd`
#. :c:func:`glm_vec_subadd` #. :c:func:`glm_vec_subadd`
#. :c:func:`glm_vec_muladd` #. :c:func:`glm_vec_muladd`
#. :c:func:`glm_vec_muladds`
#. :c:func:`glm_vec_flipsign` #. :c:func:`glm_vec_flipsign`
#. :c:func:`glm_vec_flipsign_to` #. :c:func:`glm_vec_flipsign_to`
#. :c:func:`glm_vec_inv` #. :c:func:`glm_vec_inv`
@@ -253,6 +254,16 @@ Functions documentation
| *[in]* **b** vector 2 | *[in]* **b** vector 2
| *[out]* **dest** dest += (a * b) | *[out]* **dest** dest += (a * b)
.. c:function:: void glm_vec_muladds(vec3 a, float s, vec3 dest)
| mul vector with scalar and add result to sum
| it applies += operator so dest must be initialized
Parameters:
| *[in]* **a** vector
| *[in]* **s** scalar
| *[out]* **dest** dest += (a * b)
.. c:function:: void glm_vec_flipsign(vec3 v) .. c:function:: void glm_vec_flipsign(vec3 v)
flip sign of all vec3 members flip sign of all vec3 members

View File

@@ -41,6 +41,7 @@ Functions:
#. :c:func:`glm_vec4_addadd` #. :c:func:`glm_vec4_addadd`
#. :c:func:`glm_vec4_subadd` #. :c:func:`glm_vec4_subadd`
#. :c:func:`glm_vec4_muladd` #. :c:func:`glm_vec4_muladd`
#. :c:func:`glm_vec4_muladds`
#. :c:func:`glm_vec4_flipsign` #. :c:func:`glm_vec4_flipsign`
#. :c:func:`glm_vec_flipsign_to` #. :c:func:`glm_vec_flipsign_to`
#. :c:func:`glm_vec4_inv` #. :c:func:`glm_vec4_inv`
@@ -238,6 +239,16 @@ Functions documentation
| *[in]* **b** vector 2 | *[in]* **b** vector 2
| *[out]* **dest** dest += (a * b) | *[out]* **dest** dest += (a * b)
.. c:function:: void glm_vec4_muladds(vec4 a, float s, vec4 dest)
| mul vector with scalar and add result to sum
| it applies += operator so dest must be initialized
Parameters:
| *[in]* **a** vector
| *[in]* **s** scalar
| *[out]* **dest** dest += (a * b)
.. c:function:: void glm_vec4_flipsign(vec4 v) .. c:function:: void glm_vec4_flipsign(vec4 v)
flip sign of all vec4 members flip sign of all vec4 members

View File

@@ -104,6 +104,10 @@ CGLM_EXPORT
void void
glmc_vec_muladd(vec3 a, vec3 b, vec3 dest); glmc_vec_muladd(vec3 a, vec3 b, vec3 dest);
CGLM_EXPORT
void
glmc_vec_muladds(vec3 a, float s, vec3 dest);
CGLM_EXPORT CGLM_EXPORT
void void
glmc_vec_flipsign(vec3 v); glmc_vec_flipsign(vec3 v);

View File

@@ -105,6 +105,10 @@ CGLM_EXPORT
void void
glmc_vec4_muladd(vec4 a, vec4 b, vec4 dest); glmc_vec4_muladd(vec4 a, vec4 b, vec4 dest);
CGLM_EXPORT
void
glmc_vec4_muladds(vec4 a, float s, vec4 dest);
CGLM_EXPORT CGLM_EXPORT
void void
glmc_vec4_flipsign(vec4 v); glmc_vec4_flipsign(vec4 v);

View File

@@ -389,6 +389,23 @@ glm_vec_muladd(vec3 a, vec3 b, vec3 dest) {
dest[2] += a[2] * b[2]; dest[2] += a[2] * b[2];
} }
/*!
* @brief mul vector with scalar and add 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_vec_muladds(vec3 a, float s, vec3 dest) {
dest[0] += a[0] * s;
dest[1] += a[1] * s;
dest[2] += a[2] * s;
}
/*! /*!
* @brief flip sign of all vec3 members * @brief flip sign of all vec3 members
* *

View File

@@ -472,6 +472,30 @@ glm_vec4_muladd(vec4 a, vec4 b, vec4 dest) {
#endif #endif
} }
/*!
* @brief mul vector with scalar and add 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_vec4_muladds(vec4 a, float s, vec4 dest) {
#if defined( __SSE__ ) || defined( __SSE2__ )
_mm_store_ps(dest, _mm_add_ps(_mm_load_ps(dest),
_mm_mul_ps(_mm_load_ps(a),
_mm_set1_ps(s))));
#else
dest[0] += a[0] * s;
dest[1] += a[1] * s;
dest[2] += a[2] * s;
dest[3] += a[3] * s;
#endif
}
/*! /*!
* @brief flip sign of all vec4 members * @brief flip sign of all vec4 members
* *

View File

@@ -140,6 +140,12 @@ glmc_vec_muladd(vec3 a, vec3 b, vec3 dest) {
glm_vec_muladd(a, b, dest); glm_vec_muladd(a, b, dest);
} }
CGLM_EXPORT
void
glmc_vec_muladds(vec3 a, float s, vec3 dest) {
glm_vec_muladds(a, s, dest);
}
CGLM_EXPORT CGLM_EXPORT
void void
glmc_vec_flipsign(vec3 v) { glmc_vec_flipsign(vec3 v) {

View File

@@ -140,6 +140,12 @@ glmc_vec4_muladd(vec4 a, vec4 b, vec4 dest) {
glm_vec4_muladd(a, b, dest); glm_vec4_muladd(a, b, dest);
} }
CGLM_EXPORT
void
glmc_vec4_muladds(vec4 a, float s, vec4 dest) {
glm_vec4_muladds(a, s, dest);
}
CGLM_EXPORT CGLM_EXPORT
void void
glmc_vec4_flipsign(vec4 v) { glmc_vec4_flipsign(vec4 v) {