Guest User

Untitled

a guest
Apr 25th, 2018
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.10 KB | None | 0 0
  1. CGLM_INLINE
  2. void
  3. glm_rotate_make_sse(mat4 m, float angle, vec3 axis) {
  4. __m128 x0, x1, x2, x3, x4, x5, x6, x7, x8;
  5. float c, s;
  6.  
  7. c = cosf(angle);
  8. s = sinf(angle);
  9.  
  10. x0 = glm_simd_load_v3(axis);
  11. x0 = _mm_div_ps(x0, glm_simd_norm(x0));
  12. x1 = _mm_set_ps(s, c, 1.0f, 0.0f);
  13.  
  14. x2 = _mm_mul_ps(x0, _mm_sub_ps(_mm_shuffle1_ps1(x1, 1),
  15. _mm_shuffle1_ps1(x1, 2)));
  16.  
  17. x3 = _mm_mul_ps(x0, _mm_shuffle1_ps1(x2, 0));
  18. x4 = _mm_mul_ps(x0, _mm_shuffle1_ps1(x2, 1));
  19. x5 = _mm_mul_ps(x0, _mm_shuffle1_ps1(x2, 2));
  20.  
  21. x2 = _mm_mul_ps(x0, _mm_shuffle1_ps1(x1, 3));
  22.  
  23. x6 = _mm_shuffle2_ps(x1, x2, 1, 2, 2, 0, 0, 3, 2, 1);
  24. x7 = _mm_shuffle2_ps(x1, x2, 0, 2, 2, 0, 0, 3, 1, 2);
  25. x8 = _mm_shuffle2_ps(x1, x2, 0, 1, 2, 0, 0, 1, 3, 2);
  26.  
  27. x6 = _mm_xor_ps(x6, _mm_set_ps(0.f, -0.f, 0.f, 0.f));
  28. x7 = _mm_xor_ps(x7, _mm_set_ps(0.f, 0.f, 0.f, -0.f));
  29. x8 = _mm_xor_ps(x8, _mm_set_ps(0.f, 0.f, -0.f, 0.f));
  30.  
  31. _mm_store_ps(m[0], _mm_add_ps(x3, x6));
  32. _mm_store_ps(m[1], _mm_add_ps(x4, x7));
  33. _mm_store_ps(m[2], _mm_add_ps(x5, x8));
  34. _mm_store_ps(m[3], _mm_shuffle1_ps(x1, 1, 0, 0, 0));
  35. }
Add Comment
Please, Sign In to add comment