From da5ad698631208e5615de476d149a5f186fcd128 Mon Sep 17 00:00:00 2001 From: Recep Aslantas Date: Thu, 10 May 2018 14:27:53 +0300 Subject: [PATCH] simd: rename _mm_ extensions to glmm_ --- include/cglm/simd/intrin.h | 26 ++++---- include/cglm/simd/sse2/affine.h | 50 +++++++------- include/cglm/simd/sse2/mat3.h | 22 +++---- include/cglm/simd/sse2/mat4.h | 112 +++++++++++++++----------------- include/cglm/simd/sse2/quat.h | 14 ++-- include/cglm/vec4-ext.h | 6 +- include/cglm/vec4.h | 8 +-- 7 files changed, 115 insertions(+), 123 deletions(-) diff --git a/include/cglm/simd/intrin.h b/include/cglm/simd/intrin.h index a5fa455..2f79b01 100644 --- a/include/cglm/simd/intrin.h +++ b/include/cglm/simd/intrin.h @@ -29,29 +29,27 @@ # include /* OPTIONAL: You may save some instructions but latency (not sure) */ -#ifdef CGLM_USE_INT_DOM_FOR_SHUFF -# define _mm_shuffle1_ps(xmm, z, y, x, w) \ - _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(xmm), \ - _MM_SHUFFLE(z, y, x, w))) +#ifdef CGLM_USE_INT_DOMAIN +# define glmm_shuff1(xmm, z, y, x, w) \ + _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(xmm), \ + _MM_SHUFFLE(z, y, x, w))) #else -# define _mm_shuffle1_ps(xmm, z, y, x, w) \ +# define glmm_shuff1(xmm, z, y, x, w) \ _mm_shuffle_ps(xmm, xmm, _MM_SHUFFLE(z, y, x, w)) #endif -# define _mm_shuffle1_ps1(xmm, x) \ - _mm_shuffle1_ps(xmm, x, x, x, x) - -# define _mm_shuffle2_ps(a, b, z0, y0, x0, w0, z1, y1, x1, w1) \ - _mm_shuffle1_ps(_mm_shuffle_ps(a, b, _MM_SHUFFLE(z0, y0, x0, w0)), \ - z1, y1, x1, w1) +#define glmm_shuff1x(xmm, x) glmm_shuff1(xmm, x, x, x, x) +#define glmm_shuff2(a, b, z0, y0, x0, w0, z1, y1, x1, w1) \ + glmm_shuff1(_mm_shuffle_ps(a, b, _MM_SHUFFLE(z0, y0, x0, w0)), \ + z1, y1, x1, w1) static inline __m128 glmm_dot(__m128 a, __m128 b) { __m128 x0; x0 = _mm_mul_ps(a, b); - x0 = _mm_add_ps(x0, _mm_shuffle1_ps(x0, 1, 0, 3, 2)); - return _mm_add_ps(x0, _mm_shuffle1_ps(x0, 0, 1, 0, 1)); + x0 = _mm_add_ps(x0, glmm_shuff1(x0, 1, 0, 3, 2)); + return _mm_add_ps(x0, glmm_shuff1(x0, 0, 1, 0, 1)); } static inline @@ -76,7 +74,7 @@ static inline void glmm_store3(__m128 vx, float v[3]) { _mm_storel_pi((__m64 *)&v[0], vx); - _mm_store_ss(&v[2], _mm_shuffle1_ps(vx, 2, 2, 2, 2)); + _mm_store_ss(&v[2], glmm_shuff1(vx, 2, 2, 2, 2)); } #ifdef CGLM_ALL_UNALIGNED diff --git a/include/cglm/simd/sse2/affine.h b/include/cglm/simd/sse2/affine.h index 8a644d3..87db1b8 100644 --- a/include/cglm/simd/sse2/affine.h +++ b/include/cglm/simd/sse2/affine.h @@ -25,28 +25,28 @@ glm_mul_sse2(mat4 m1, mat4 m2, mat4 dest) { r = glmm_load(m2[0]); glmm_store(dest[0], - _mm_add_ps(_mm_add_ps(_mm_mul_ps(_mm_shuffle1_ps1(r, 0), l0), - _mm_mul_ps(_mm_shuffle1_ps1(r, 1), l1)), - _mm_mul_ps(_mm_shuffle1_ps1(r, 2), l2))); + _mm_add_ps(_mm_add_ps(_mm_mul_ps(glmm_shuff1x(r, 0), l0), + _mm_mul_ps(glmm_shuff1x(r, 1), l1)), + _mm_mul_ps(glmm_shuff1x(r, 2), l2))); r = glmm_load(m2[1]); glmm_store(dest[1], - _mm_add_ps(_mm_add_ps(_mm_mul_ps(_mm_shuffle1_ps1(r, 0), l0), - _mm_mul_ps(_mm_shuffle1_ps1(r, 1), l1)), - _mm_mul_ps(_mm_shuffle1_ps1(r, 2), l2))); + _mm_add_ps(_mm_add_ps(_mm_mul_ps(glmm_shuff1x(r, 0), l0), + _mm_mul_ps(glmm_shuff1x(r, 1), l1)), + _mm_mul_ps(glmm_shuff1x(r, 2), l2))); r = glmm_load(m2[2]); glmm_store(dest[2], - _mm_add_ps(_mm_add_ps(_mm_mul_ps(_mm_shuffle1_ps1(r, 0), l0), - _mm_mul_ps(_mm_shuffle1_ps1(r, 1), l1)), - _mm_mul_ps(_mm_shuffle1_ps1(r, 2), l2))); + _mm_add_ps(_mm_add_ps(_mm_mul_ps(glmm_shuff1x(r, 0), l0), + _mm_mul_ps(glmm_shuff1x(r, 1), l1)), + _mm_mul_ps(glmm_shuff1x(r, 2), l2))); r = glmm_load(m2[3]); glmm_store(dest[3], - _mm_add_ps(_mm_add_ps(_mm_mul_ps(_mm_shuffle1_ps1(r, 0), l0), - _mm_mul_ps(_mm_shuffle1_ps1(r, 1), l1)), - _mm_add_ps(_mm_mul_ps(_mm_shuffle1_ps1(r, 2), l2), - _mm_mul_ps(_mm_shuffle1_ps1(r, 3), l3)))); + _mm_add_ps(_mm_add_ps(_mm_mul_ps(glmm_shuff1x(r, 0), l0), + _mm_mul_ps(glmm_shuff1x(r, 1), l1)), + _mm_add_ps(_mm_mul_ps(glmm_shuff1x(r, 2), l2), + _mm_mul_ps(glmm_shuff1x(r, 3), l3)))); } CGLM_INLINE @@ -62,21 +62,21 @@ glm_mul_rot_sse2(mat4 m1, mat4 m2, mat4 dest) { r = glmm_load(m2[0]); glmm_store(dest[0], - _mm_add_ps(_mm_add_ps(_mm_mul_ps(_mm_shuffle1_ps1(r, 0), l0), - _mm_mul_ps(_mm_shuffle1_ps1(r, 1), l1)), - _mm_mul_ps(_mm_shuffle1_ps1(r, 2), l2))); + _mm_add_ps(_mm_add_ps(_mm_mul_ps(glmm_shuff1x(r, 0), l0), + _mm_mul_ps(glmm_shuff1x(r, 1), l1)), + _mm_mul_ps(glmm_shuff1x(r, 2), l2))); r = glmm_load(m2[1]); glmm_store(dest[1], - _mm_add_ps(_mm_add_ps(_mm_mul_ps(_mm_shuffle1_ps1(r, 0), l0), - _mm_mul_ps(_mm_shuffle1_ps1(r, 1), l1)), - _mm_mul_ps(_mm_shuffle1_ps1(r, 2), l2))); + _mm_add_ps(_mm_add_ps(_mm_mul_ps(glmm_shuff1x(r, 0), l0), + _mm_mul_ps(glmm_shuff1x(r, 1), l1)), + _mm_mul_ps(glmm_shuff1x(r, 2), l2))); r = glmm_load(m2[2]); glmm_store(dest[2], - _mm_add_ps(_mm_add_ps(_mm_mul_ps(_mm_shuffle1_ps1(r, 0), l0), - _mm_mul_ps(_mm_shuffle1_ps1(r, 1), l1)), - _mm_mul_ps(_mm_shuffle1_ps1(r, 2), l2))); + _mm_add_ps(_mm_add_ps(_mm_mul_ps(glmm_shuff1x(r, 0), l0), + _mm_mul_ps(glmm_shuff1x(r, 1), l1)), + _mm_mul_ps(glmm_shuff1x(r, 2), l2))); glmm_store(dest[3], l3); } @@ -94,9 +94,9 @@ glm_inv_tr_sse2(mat4 mat) { _MM_TRANSPOSE4_PS(r0, r1, r2, x1); - x0 = _mm_add_ps(_mm_mul_ps(r0, _mm_shuffle1_ps(r3, 0, 0, 0, 0)), - _mm_mul_ps(r1, _mm_shuffle1_ps(r3, 1, 1, 1, 1))); - x0 = _mm_add_ps(x0, _mm_mul_ps(r2, _mm_shuffle1_ps(r3, 2, 2, 2, 2))); + x0 = _mm_add_ps(_mm_mul_ps(r0, glmm_shuff1(r3, 0, 0, 0, 0)), + _mm_mul_ps(r1, glmm_shuff1(r3, 1, 1, 1, 1))); + x0 = _mm_add_ps(x0, _mm_mul_ps(r2, glmm_shuff1(r3, 2, 2, 2, 2))); x0 = _mm_xor_ps(x0, _mm_set1_ps(-0.f)); x0 = _mm_add_ps(x0, x1); diff --git a/include/cglm/simd/sse2/mat3.h b/include/cglm/simd/sse2/mat3.h index a0dcc02..9c972ff 100644 --- a/include/cglm/simd/sse2/mat3.h +++ b/include/cglm/simd/sse2/mat3.h @@ -27,27 +27,25 @@ glm_mat3_mul_sse2(mat3 m1, mat3 m2, mat3 dest) { r1 = _mm_loadu_ps(&m2[1][1]); r2 = _mm_set1_ps(m2[2][2]); - x1 = _mm_shuffle2_ps(l0, l1, 1, 0, 3, 3, 0, 3, 2, 0); - x2 = _mm_shuffle2_ps(l1, l2, 0, 0, 3, 2, 0, 2, 1, 0); + x1 = glmm_shuff2(l0, l1, 1, 0, 3, 3, 0, 3, 2, 0); + x2 = glmm_shuff2(l1, l2, 0, 0, 3, 2, 0, 2, 1, 0); - x0 = _mm_add_ps(_mm_mul_ps(_mm_shuffle1_ps(l0, 0, 2, 1, 0), - _mm_shuffle1_ps(r0, 3, 0, 0, 0)), - _mm_mul_ps(x1, - _mm_shuffle2_ps(r0, r1, 0, 0, 1, 1, 2, 0, 0, 0))); + x0 = _mm_add_ps(_mm_mul_ps(glmm_shuff1(l0, 0, 2, 1, 0), + glmm_shuff1(r0, 3, 0, 0, 0)), + _mm_mul_ps(x1, glmm_shuff2(r0, r1, 0, 0, 1, 1, 2, 0, 0, 0))); x0 = _mm_add_ps(x0, - _mm_mul_ps(x2, - _mm_shuffle2_ps(r0, r1, 1, 1, 2, 2, 2, 0, 0, 0))); + _mm_mul_ps(x2, glmm_shuff2(r0, r1, 1, 1, 2, 2, 2, 0, 0, 0))); _mm_storeu_ps(dest[0], x0); - x0 = _mm_add_ps(_mm_mul_ps(_mm_shuffle1_ps(l0, 1, 0, 2, 1), + x0 = _mm_add_ps(_mm_mul_ps(glmm_shuff1(l0, 1, 0, 2, 1), _mm_shuffle_ps(r0, r1, _MM_SHUFFLE(2, 2, 3, 3))), - _mm_mul_ps(_mm_shuffle1_ps(x1, 1, 0, 2, 1), - _mm_shuffle1_ps(r1, 3, 3, 0, 0))); + _mm_mul_ps(glmm_shuff1(x1, 1, 0, 2, 1), + glmm_shuff1(r1, 3, 3, 0, 0))); x0 = _mm_add_ps(x0, - _mm_mul_ps(_mm_shuffle1_ps(x2, 1, 0, 2, 1), + _mm_mul_ps(glmm_shuff1(x2, 1, 0, 2, 1), _mm_shuffle_ps(r1, r2, _MM_SHUFFLE(0, 0, 1, 1)))); _mm_storeu_ps(&dest[1][1], x0); diff --git a/include/cglm/simd/sse2/mat4.h b/include/cglm/simd/sse2/mat4.h index 1f82c08..20afeae 100644 --- a/include/cglm/simd/sse2/mat4.h +++ b/include/cglm/simd/sse2/mat4.h @@ -58,29 +58,29 @@ glm_mat4_mul_sse2(mat4 m1, mat4 m2, mat4 dest) { r = glmm_load(m2[0]); glmm_store(dest[0], - _mm_add_ps(_mm_add_ps(_mm_mul_ps(_mm_shuffle1_ps1(r, 0), l0), - _mm_mul_ps(_mm_shuffle1_ps1(r, 1), l1)), - _mm_add_ps(_mm_mul_ps(_mm_shuffle1_ps1(r, 2), l2), - _mm_mul_ps(_mm_shuffle1_ps1(r, 3), l3)))); + _mm_add_ps(_mm_add_ps(_mm_mul_ps(glmm_shuff1x(r, 0), l0), + _mm_mul_ps(glmm_shuff1x(r, 1), l1)), + _mm_add_ps(_mm_mul_ps(glmm_shuff1x(r, 2), l2), + _mm_mul_ps(glmm_shuff1x(r, 3), l3)))); r = glmm_load(m2[1]); glmm_store(dest[1], - _mm_add_ps(_mm_add_ps(_mm_mul_ps(_mm_shuffle1_ps1(r, 0), l0), - _mm_mul_ps(_mm_shuffle1_ps1(r, 1), l1)), - _mm_add_ps(_mm_mul_ps(_mm_shuffle1_ps1(r, 2), l2), - _mm_mul_ps(_mm_shuffle1_ps1(r, 3), l3)))); + _mm_add_ps(_mm_add_ps(_mm_mul_ps(glmm_shuff1x(r, 0), l0), + _mm_mul_ps(glmm_shuff1x(r, 1), l1)), + _mm_add_ps(_mm_mul_ps(glmm_shuff1x(r, 2), l2), + _mm_mul_ps(glmm_shuff1x(r, 3), l3)))); r = glmm_load(m2[2]); glmm_store(dest[2], - _mm_add_ps(_mm_add_ps(_mm_mul_ps(_mm_shuffle1_ps1(r, 0), l0), - _mm_mul_ps(_mm_shuffle1_ps1(r, 1), l1)), - _mm_add_ps(_mm_mul_ps(_mm_shuffle1_ps1(r, 2), l2), - _mm_mul_ps(_mm_shuffle1_ps1(r, 3), l3)))); + _mm_add_ps(_mm_add_ps(_mm_mul_ps(glmm_shuff1x(r, 0), l0), + _mm_mul_ps(glmm_shuff1x(r, 1), l1)), + _mm_add_ps(_mm_mul_ps(glmm_shuff1x(r, 2), l2), + _mm_mul_ps(glmm_shuff1x(r, 3), l3)))); r = glmm_load(m2[3]); glmm_store(dest[3], - _mm_add_ps(_mm_add_ps(_mm_mul_ps(_mm_shuffle1_ps1(r, 0), l0), - _mm_mul_ps(_mm_shuffle1_ps1(r, 1), l1)), - _mm_add_ps(_mm_mul_ps(_mm_shuffle1_ps1(r, 2), l2), - _mm_mul_ps(_mm_shuffle1_ps1(r, 3), l3)))); + _mm_add_ps(_mm_add_ps(_mm_mul_ps(glmm_shuff1x(r, 0), l0), + _mm_mul_ps(glmm_shuff1x(r, 1), l1)), + _mm_add_ps(_mm_mul_ps(glmm_shuff1x(r, 2), l2), + _mm_mul_ps(glmm_shuff1x(r, 3), l3)))); } CGLM_INLINE @@ -89,15 +89,11 @@ glm_mat4_mulv_sse2(mat4 m, vec4 v, vec4 dest) { __m128 x0, x1, x2; x0 = glmm_load(v); - x1 = _mm_add_ps(_mm_mul_ps(glmm_load(m[0]), - _mm_shuffle1_ps1(x0, 0)), - _mm_mul_ps(glmm_load(m[1]), - _mm_shuffle1_ps1(x0, 1))); + x1 = _mm_add_ps(_mm_mul_ps(glmm_load(m[0]), glmm_shuff1x(x0, 0)), + _mm_mul_ps(glmm_load(m[1]), glmm_shuff1x(x0, 1))); - x2 = _mm_add_ps(_mm_mul_ps(glmm_load(m[2]), - _mm_shuffle1_ps1(x0, 2)), - _mm_mul_ps(glmm_load(m[3]), - _mm_shuffle1_ps1(x0, 3))); + x2 = _mm_add_ps(_mm_mul_ps(glmm_load(m[2]), glmm_shuff1x(x0, 2)), + _mm_mul_ps(glmm_load(m[3]), glmm_shuff1x(x0, 3))); glmm_store(dest, _mm_add_ps(x1, x2)); } @@ -119,20 +115,20 @@ glm_mat4_det_sse2(mat4 mat) { t[3] = i * p - m * l; t[4] = i * o - m * k; */ - x0 = _mm_sub_ps(_mm_mul_ps(_mm_shuffle1_ps(r2, 0, 0, 1, 1), - _mm_shuffle1_ps(r3, 2, 3, 2, 3)), - _mm_mul_ps(_mm_shuffle1_ps(r3, 0, 0, 1, 1), - _mm_shuffle1_ps(r2, 2, 3, 2, 3))); + x0 = _mm_sub_ps(_mm_mul_ps(glmm_shuff1(r2, 0, 0, 1, 1), + glmm_shuff1(r3, 2, 3, 2, 3)), + _mm_mul_ps(glmm_shuff1(r3, 0, 0, 1, 1), + glmm_shuff1(r2, 2, 3, 2, 3))); /* t[0] = k * p - o * l; t[0] = k * p - o * l; t[5] = i * n - m * j; t[5] = i * n - m * j; */ - x1 = _mm_sub_ps(_mm_mul_ps(_mm_shuffle1_ps(r2, 0, 0, 2, 2), - _mm_shuffle1_ps(r3, 1, 1, 3, 3)), - _mm_mul_ps(_mm_shuffle1_ps(r3, 0, 0, 2, 2), - _mm_shuffle1_ps(r2, 1, 1, 3, 3))); + x1 = _mm_sub_ps(_mm_mul_ps(glmm_shuff1(r2, 0, 0, 2, 2), + glmm_shuff1(r3, 1, 1, 3, 3)), + _mm_mul_ps(glmm_shuff1(r3, 0, 0, 2, 2), + glmm_shuff1(r2, 1, 1, 3, 3))); /* a * (f * t[0] - g * t[1] + h * t[2]) @@ -140,19 +136,19 @@ glm_mat4_det_sse2(mat4 mat) { + c * (e * t[1] - f * t[3] + h * t[5]) - d * (e * t[2] - f * t[4] + g * t[5]) */ - x2 = _mm_sub_ps(_mm_mul_ps(_mm_shuffle1_ps(r1, 0, 0, 0, 1), + x2 = _mm_sub_ps(_mm_mul_ps(glmm_shuff1(r1, 0, 0, 0, 1), _mm_shuffle_ps(x1, x0, _MM_SHUFFLE(1, 0, 0, 0))), - _mm_mul_ps(_mm_shuffle1_ps(r1, 1, 1, 2, 2), - _mm_shuffle1_ps(x0, 3, 2, 2, 0))); + _mm_mul_ps(glmm_shuff1(r1, 1, 1, 2, 2), + glmm_shuff1(x0, 3, 2, 2, 0))); x2 = _mm_add_ps(x2, - _mm_mul_ps(_mm_shuffle1_ps(r1, 2, 3, 3, 3), + _mm_mul_ps(glmm_shuff1(r1, 2, 3, 3, 3), _mm_shuffle_ps(x0, x1, _MM_SHUFFLE(2, 2, 3, 1)))); x2 = _mm_xor_ps(x2, _mm_set_ps(-0.f, 0.f, -0.f, 0.f)); x0 = _mm_mul_ps(r0, x2); - x0 = _mm_add_ps(x0, _mm_shuffle1_ps(x0, 0, 1, 2, 3)); - x0 = _mm_add_ps(x0, _mm_shuffle1_ps(x0, 1, 3, 3, 1)); + x0 = _mm_add_ps(x0, glmm_shuff1(x0, 0, 1, 2, 3)); + x0 = _mm_add_ps(x0, glmm_shuff1(x0, 1, 3, 3, 1)); return _mm_cvtss_f32(x0); } @@ -172,8 +168,8 @@ glm_mat4_inv_fast_sse2(mat4 mat, mat4 dest) { r3 = glmm_load(mat[3]); /* p o n m */ x0 = _mm_shuffle_ps(r2, r3, _MM_SHUFFLE(3, 2, 3, 2)); /* p o l k */ - x1 = _mm_shuffle1_ps(x0, 1, 3, 3, 3); /* l p p p */ - x2 = _mm_shuffle1_ps(x0, 0, 2, 2, 2); /* k o o o */ + x1 = glmm_shuff1(x0, 1, 3, 3, 3); /* l p p p */ + x2 = glmm_shuff1(x0, 0, 2, 2, 2); /* k o o o */ x0 = _mm_shuffle_ps(r2, r1, _MM_SHUFFLE(3, 3, 3, 3)); /* h h l l */ x3 = _mm_shuffle_ps(r2, r1, _MM_SHUFFLE(2, 2, 2, 2)); /* g g k k */ @@ -184,7 +180,7 @@ glm_mat4_inv_fast_sse2(mat4 mat, mat4 dest) { t0 = _mm_sub_ps(_mm_mul_ps(x3, x1), _mm_mul_ps(x2, x0)); x4 = _mm_shuffle_ps(r2, r3, _MM_SHUFFLE(2, 1, 2, 1)); /* o n k j */ - x4 = _mm_shuffle1_ps(x4, 0, 2, 2, 2); /* j n n n */ + x4 = glmm_shuff1(x4, 0, 2, 2, 2); /* j n n n */ x5 = _mm_shuffle_ps(r2, r1, _MM_SHUFFLE(1, 1, 1, 1)); /* f f j j */ /* t1[1] = j * p - n * l; @@ -200,7 +196,7 @@ glm_mat4_inv_fast_sse2(mat4 mat, mat4 dest) { t2 = _mm_sub_ps(_mm_mul_ps(x5, x2), _mm_mul_ps(x4, x3)); x6 = _mm_shuffle_ps(r2, r1, _MM_SHUFFLE(0, 0, 0, 0)); /* e e i i */ - x7 = _mm_shuffle2_ps(r3, r2, 0, 0, 0, 0, 2, 0, 0, 0); /* i m m m */ + x7 = glmm_shuff2(r3, r2, 0, 0, 0, 0, 2, 0, 0, 0); /* i m m m */ /* t1[3] = i * p - m * l; t1[3] = i * p - m * l; @@ -220,10 +216,10 @@ glm_mat4_inv_fast_sse2(mat4 mat, mat4 dest) { t3[5] = e * j - i * f; */ t5 = _mm_sub_ps(_mm_mul_ps(x6, x4), _mm_mul_ps(x7, x5)); - x0 = _mm_shuffle2_ps(r1, r0, 0, 0, 0, 0, 2, 2, 2, 0); /* a a a e */ - x1 = _mm_shuffle2_ps(r1, r0, 1, 1, 1, 1, 2, 2, 2, 0); /* b b b f */ - x2 = _mm_shuffle2_ps(r1, r0, 2, 2, 2, 2, 2, 2, 2, 0); /* c c c g */ - x3 = _mm_shuffle2_ps(r1, r0, 3, 3, 3, 3, 2, 2, 2, 0); /* d d d h */ + x0 = glmm_shuff2(r1, r0, 0, 0, 0, 0, 2, 2, 2, 0); /* a a a e */ + x1 = glmm_shuff2(r1, r0, 1, 1, 1, 1, 2, 2, 2, 0); /* b b b f */ + x2 = glmm_shuff2(r1, r0, 2, 2, 2, 2, 2, 2, 2, 0); /* c c c g */ + x3 = glmm_shuff2(r1, r0, 3, 3, 3, 3, 2, 2, 2, 0); /* d d d h */ /* dest[0][0] = f * t1[0] - g * t1[1] + h * t1[2]; @@ -271,8 +267,8 @@ glm_mat4_inv_fast_sse2(mat4 mat, mat4 dest) { x0 = _mm_shuffle_ps(x0, x1, _MM_SHUFFLE(2, 0, 2, 0)); x0 = _mm_mul_ps(x0, r0); - x0 = _mm_add_ps(x0, _mm_shuffle1_ps(x0, 0, 1, 2, 3)); - x0 = _mm_add_ps(x0, _mm_shuffle1_ps(x0, 1, 0, 0, 1)); + x0 = _mm_add_ps(x0, glmm_shuff1(x0, 0, 1, 2, 3)); + x0 = _mm_add_ps(x0, glmm_shuff1(x0, 1, 0, 0, 1)); x0 = _mm_rcp_ps(x0); glmm_store(dest[0], _mm_mul_ps(v0, x0)); @@ -296,8 +292,8 @@ glm_mat4_inv_sse2(mat4 mat, mat4 dest) { r3 = glmm_load(mat[3]); /* p o n m */ x0 = _mm_shuffle_ps(r2, r3, _MM_SHUFFLE(3, 2, 3, 2)); /* p o l k */ - x1 = _mm_shuffle1_ps(x0, 1, 3, 3, 3); /* l p p p */ - x2 = _mm_shuffle1_ps(x0, 0, 2, 2, 2); /* k o o o */ + x1 = glmm_shuff1(x0, 1, 3, 3, 3); /* l p p p */ + x2 = glmm_shuff1(x0, 0, 2, 2, 2); /* k o o o */ x0 = _mm_shuffle_ps(r2, r1, _MM_SHUFFLE(3, 3, 3, 3)); /* h h l l */ x3 = _mm_shuffle_ps(r2, r1, _MM_SHUFFLE(2, 2, 2, 2)); /* g g k k */ @@ -308,7 +304,7 @@ glm_mat4_inv_sse2(mat4 mat, mat4 dest) { t0 = _mm_sub_ps(_mm_mul_ps(x3, x1), _mm_mul_ps(x2, x0)); x4 = _mm_shuffle_ps(r2, r3, _MM_SHUFFLE(2, 1, 2, 1)); /* o n k j */ - x4 = _mm_shuffle1_ps(x4, 0, 2, 2, 2); /* j n n n */ + x4 = glmm_shuff1(x4, 0, 2, 2, 2); /* j n n n */ x5 = _mm_shuffle_ps(r2, r1, _MM_SHUFFLE(1, 1, 1, 1)); /* f f j j */ /* t1[1] = j * p - n * l; @@ -324,7 +320,7 @@ glm_mat4_inv_sse2(mat4 mat, mat4 dest) { t2 = _mm_sub_ps(_mm_mul_ps(x5, x2), _mm_mul_ps(x4, x3)); x6 = _mm_shuffle_ps(r2, r1, _MM_SHUFFLE(0, 0, 0, 0)); /* e e i i */ - x7 = _mm_shuffle2_ps(r3, r2, 0, 0, 0, 0, 2, 0, 0, 0); /* i m m m */ + x7 = glmm_shuff2(r3, r2, 0, 0, 0, 0, 2, 0, 0, 0); /* i m m m */ /* t1[3] = i * p - m * l; t1[3] = i * p - m * l; @@ -344,10 +340,10 @@ glm_mat4_inv_sse2(mat4 mat, mat4 dest) { t3[5] = e * j - i * f; */ t5 = _mm_sub_ps(_mm_mul_ps(x6, x4), _mm_mul_ps(x7, x5)); - x0 = _mm_shuffle2_ps(r1, r0, 0, 0, 0, 0, 2, 2, 2, 0); /* a a a e */ - x1 = _mm_shuffle2_ps(r1, r0, 1, 1, 1, 1, 2, 2, 2, 0); /* b b b f */ - x2 = _mm_shuffle2_ps(r1, r0, 2, 2, 2, 2, 2, 2, 2, 0); /* c c c g */ - x3 = _mm_shuffle2_ps(r1, r0, 3, 3, 3, 3, 2, 2, 2, 0); /* d d d h */ + x0 = glmm_shuff2(r1, r0, 0, 0, 0, 0, 2, 2, 2, 0); /* a a a e */ + x1 = glmm_shuff2(r1, r0, 1, 1, 1, 1, 2, 2, 2, 0); /* b b b f */ + x2 = glmm_shuff2(r1, r0, 2, 2, 2, 2, 2, 2, 2, 0); /* c c c g */ + x3 = glmm_shuff2(r1, r0, 3, 3, 3, 3, 2, 2, 2, 0); /* d d d h */ /* dest[0][0] = f * t1[0] - g * t1[1] + h * t1[2]; @@ -395,8 +391,8 @@ glm_mat4_inv_sse2(mat4 mat, mat4 dest) { x0 = _mm_shuffle_ps(x0, x1, _MM_SHUFFLE(2, 0, 2, 0)); x0 = _mm_mul_ps(x0, r0); - x0 = _mm_add_ps(x0, _mm_shuffle1_ps(x0, 0, 1, 2, 3)); - x0 = _mm_add_ps(x0, _mm_shuffle1_ps(x0, 1, 0, 0, 1)); + x0 = _mm_add_ps(x0, glmm_shuff1(x0, 0, 1, 2, 3)); + x0 = _mm_add_ps(x0, glmm_shuff1(x0, 1, 0, 0, 1)); x0 = _mm_div_ps(_mm_set1_ps(1.0f), x0); glmm_store(dest[0], _mm_mul_ps(v0, x0)); diff --git a/include/cglm/simd/sse2/quat.h b/include/cglm/simd/sse2/quat.h index a8b517c..0173f94 100644 --- a/include/cglm/simd/sse2/quat.h +++ b/include/cglm/simd/sse2/quat.h @@ -27,16 +27,16 @@ glm_quat_mul_sse2(versor p, versor q, versor dest) { xp = glmm_load(p); /* 3 2 1 0 */ xq = glmm_load(q); - r = _mm_mul_ps(_mm_shuffle1_ps1(xp, 3), xq); + r = _mm_mul_ps(glmm_shuff1x(xp, 3), xq); - x0 = _mm_xor_ps(_mm_shuffle1_ps1(xp, 0), _mm_set_ps(-0.f, 0.f, -0.f, 0.f)); - r = _mm_add_ps(r, _mm_mul_ps(x0, _mm_shuffle1_ps(xq, 0, 1, 2, 3))); + x0 = _mm_xor_ps(glmm_shuff1x(xp, 0), _mm_set_ps(-0.f, 0.f, -0.f, 0.f)); + r = _mm_add_ps(r, _mm_mul_ps(x0, glmm_shuff1(xq, 0, 1, 2, 3))); - x0 = _mm_xor_ps(_mm_shuffle1_ps1(xp, 1), _mm_set_ps(-0.f, -0.f, 0.f, 0.f)); - r = _mm_add_ps(r, _mm_mul_ps(x0, _mm_shuffle1_ps(xq, 1, 0, 3, 2))); + x0 = _mm_xor_ps(glmm_shuff1x(xp, 1), _mm_set_ps(-0.f, -0.f, 0.f, 0.f)); + r = _mm_add_ps(r, _mm_mul_ps(x0, glmm_shuff1(xq, 1, 0, 3, 2))); - x0 = _mm_xor_ps(_mm_shuffle1_ps1(xp, 2), _mm_set_ps(-0.f, 0.f, 0.f, -0.f)); - r = _mm_add_ps(r, _mm_mul_ps(x0, _mm_shuffle1_ps(xq, 2, 3, 0, 1))); + x0 = _mm_xor_ps(glmm_shuff1x(xp, 2), _mm_set_ps(-0.f, 0.f, 0.f, -0.f)); + r = _mm_add_ps(r, _mm_mul_ps(x0, glmm_shuff1(xq, 2, 3, 0, 1))); glmm_store(dest, r); } diff --git a/include/cglm/vec4-ext.h b/include/cglm/vec4-ext.h index 94150da..b7902b6 100644 --- a/include/cglm/vec4-ext.h +++ b/include/cglm/vec4-ext.h @@ -225,10 +225,10 @@ glm_vec4_sign(vec4 v, vec4 dest) { x0 = glmm_load(v); x1 = _mm_set_ps(0.0f, 0.0f, 1.0f, -1.0f); - x2 = _mm_shuffle1_ps1(x1, 2); + x2 = glmm_shuff1x(x1, 2); - x3 = _mm_and_ps(_mm_cmpgt_ps(x0, x2), _mm_shuffle1_ps1(x1, 1)); - x4 = _mm_and_ps(_mm_cmplt_ps(x0, x2), _mm_shuffle1_ps1(x1, 0)); + x3 = _mm_and_ps(_mm_cmpgt_ps(x0, x2), glmm_shuff1x(x1, 1)); + x4 = _mm_and_ps(_mm_cmplt_ps(x0, x2), glmm_shuff1x(x1, 0)); glmm_store(dest, _mm_or_ps(x3, x4)); #else diff --git a/include/cglm/vec4.h b/include/cglm/vec4.h index b98190b..3b3a452 100644 --- a/include/cglm/vec4.h +++ b/include/cglm/vec4.h @@ -170,8 +170,8 @@ glm_vec4_dot(vec4 a, vec4 b) { #if defined( __SSE__ ) || defined( __SSE2__ ) __m128 x0; x0 = _mm_mul_ps(glmm_load(a), glmm_load(b)); - x0 = _mm_add_ps(x0, _mm_shuffle1_ps(x0, 1, 0, 3, 2)); - return _mm_cvtss_f32(_mm_add_ss(x0, _mm_shuffle1_ps(x0, 0, 1, 0, 1))); + x0 = _mm_add_ps(x0, glmm_shuff1(x0, 1, 0, 3, 2)); + return _mm_cvtss_f32(_mm_add_ss(x0, glmm_shuff1(x0, 0, 1, 0, 1))); #else return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3]; #endif @@ -195,8 +195,8 @@ glm_vec4_norm2(vec4 v) { __m128 x0; x0 = glmm_load(v); x0 = _mm_mul_ps(x0, x0); - x0 = _mm_add_ps(x0, _mm_shuffle1_ps(x0, 1, 0, 3, 2)); - return _mm_cvtss_f32(_mm_add_ss(x0, _mm_shuffle1_ps(x0, 0, 1, 0, 1))); + x0 = _mm_add_ps(x0, glmm_shuff1(x0, 1, 0, 3, 2)); + return _mm_cvtss_f32(_mm_add_ss(x0, glmm_shuff1(x0, 0, 1, 0, 1))); #else return v[0] * v[0] + v[1] * v[1] + v[2] * v[2] + v[3] * v[3]; #endif