mat4_transpose: Use SSE intrinsics;

~1.6x
This commit is contained in:
bjorn 2018-10-06 20:04:39 -07:00
parent 7354465e12
commit 11e6580717
1 changed files with 13 additions and 0 deletions

View File

@ -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