Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- CGLM_INLINE
- void
- glm_rotate_make_sse(mat4 m, float angle, vec3 axis) {
- __m128 x0, x1, x2, x3, x4, x5, x6, x7, x8;
- float c, s;
- c = cosf(angle);
- s = sinf(angle);
- x0 = glm_simd_load_v3(axis);
- x0 = _mm_div_ps(x0, glm_simd_norm(x0));
- x1 = _mm_set_ps(s, c, 1.0f, 0.0f);
- x2 = _mm_mul_ps(x0, _mm_sub_ps(_mm_shuffle1_ps1(x1, 1),
- _mm_shuffle1_ps1(x1, 2)));
- x3 = _mm_mul_ps(x0, _mm_shuffle1_ps1(x2, 0));
- x4 = _mm_mul_ps(x0, _mm_shuffle1_ps1(x2, 1));
- x5 = _mm_mul_ps(x0, _mm_shuffle1_ps1(x2, 2));
- x2 = _mm_mul_ps(x0, _mm_shuffle1_ps1(x1, 3));
- x6 = _mm_shuffle2_ps(x1, x2, 1, 2, 2, 0, 0, 3, 2, 1);
- x7 = _mm_shuffle2_ps(x1, x2, 0, 2, 2, 0, 0, 3, 1, 2);
- x8 = _mm_shuffle2_ps(x1, x2, 0, 1, 2, 0, 0, 1, 3, 2);
- x6 = _mm_xor_ps(x6, _mm_set_ps(0.f, -0.f, 0.f, 0.f));
- x7 = _mm_xor_ps(x7, _mm_set_ps(0.f, 0.f, 0.f, -0.f));
- x8 = _mm_xor_ps(x8, _mm_set_ps(0.f, 0.f, -0.f, 0.f));
- _mm_store_ps(m[0], _mm_add_ps(x3, x6));
- _mm_store_ps(m[1], _mm_add_ps(x4, x7));
- _mm_store_ps(m[2], _mm_add_ps(x5, x8));
- _mm_store_ps(m[3], _mm_shuffle1_ps(x1, 1, 0, 0, 0));
- }
Add Comment
Please, Sign In to add comment