| 1624 | |
| 1625 | COVERAGE(HMM_DivM4F, 1) |
| 1626 | static inline HMM_Mat4 HMM_DivM4F(HMM_Mat4 Matrix, float Scalar) |
| 1627 | { |
| 1628 | ASSERT_COVERED(HMM_DivM4F); |
| 1629 | |
| 1630 | HMM_Mat4 Result; |
| 1631 | |
| 1632 | #ifdef HANDMADE_MATH__USE_SSE |
| 1633 | __m128 SSEScalar = _mm_set1_ps(Scalar); |
| 1634 | Result.Columns[0].SSE = _mm_div_ps(Matrix.Columns[0].SSE, SSEScalar); |
| 1635 | Result.Columns[1].SSE = _mm_div_ps(Matrix.Columns[1].SSE, SSEScalar); |
| 1636 | Result.Columns[2].SSE = _mm_div_ps(Matrix.Columns[2].SSE, SSEScalar); |
| 1637 | Result.Columns[3].SSE = _mm_div_ps(Matrix.Columns[3].SSE, SSEScalar); |
| 1638 | #else |
| 1639 | Result.Elements[0][0] = Matrix.Elements[0][0] / Scalar; |
| 1640 | Result.Elements[0][1] = Matrix.Elements[0][1] / Scalar; |
| 1641 | Result.Elements[0][2] = Matrix.Elements[0][2] / Scalar; |
| 1642 | Result.Elements[0][3] = Matrix.Elements[0][3] / Scalar; |
| 1643 | Result.Elements[1][0] = Matrix.Elements[1][0] / Scalar; |
| 1644 | Result.Elements[1][1] = Matrix.Elements[1][1] / Scalar; |
| 1645 | Result.Elements[1][2] = Matrix.Elements[1][2] / Scalar; |
| 1646 | Result.Elements[1][3] = Matrix.Elements[1][3] / Scalar; |
| 1647 | Result.Elements[2][0] = Matrix.Elements[2][0] / Scalar; |
| 1648 | Result.Elements[2][1] = Matrix.Elements[2][1] / Scalar; |
| 1649 | Result.Elements[2][2] = Matrix.Elements[2][2] / Scalar; |
| 1650 | Result.Elements[2][3] = Matrix.Elements[2][3] / Scalar; |
| 1651 | Result.Elements[3][0] = Matrix.Elements[3][0] / Scalar; |
| 1652 | Result.Elements[3][1] = Matrix.Elements[3][1] / Scalar; |
| 1653 | Result.Elements[3][2] = Matrix.Elements[3][2] / Scalar; |
| 1654 | Result.Elements[3][3] = Matrix.Elements[3][3] / Scalar; |
| 1655 | #endif |
| 1656 | |
| 1657 | return Result; |
| 1658 | } |
| 1659 | |
| 1660 | COVERAGE(HMM_DeterminantM4, 1) |
| 1661 | static inline float HMM_DeterminantM4(HMM_Mat4 Matrix) |