From 11e6580717d8d5d24764bc239583329d775d8892 Mon Sep 17 00:00:00 2001 From: bjorn Date: Sat, 6 Oct 2018 20:04:39 -0700 Subject: [PATCH] mat4_transpose: Use SSE intrinsics; ~1.6x --- src/math/mat4.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/math/mat4.c b/src/math/mat4.c index 1f78190e..e1a0e496 100644 --- a/src/math/mat4.c +++ b/src/math/mat4.c @@ -109,6 +109,18 @@ mat4 mat4_invert(mat4 m) { } mat4 mat4_transpose(mat4 m) { +#ifdef LOVR_USE_SSE + __m128 c1 = _mm_loadu_ps(m + 0); + __m128 c2 = _mm_loadu_ps(m + 4); + __m128 c3 = _mm_loadu_ps(m + 8); + __m128 c4 = _mm_loadu_ps(m + 12); + _MM_TRANSPOSE4_PS(c1, c2, c3, c4); + _mm_storeu_ps(m + 0, c1); + _mm_storeu_ps(m + 4, c2); + _mm_storeu_ps(m + 8, c3); + _mm_storeu_ps(m + 12, c4); + return m; +#else float a01 = m[1], a02 = m[2], a03 = m[3], a12 = m[6], a13 = m[7], a23 = m[11]; @@ -126,6 +138,7 @@ mat4 mat4_transpose(mat4 m) { m[13] = a13; m[14] = a23; return m; +#endif } // Modified from gl-matrix.c