// File: /workspace/github_cpp_makefile_star2_O1/koraa[P]sbcrack/cube/geom.cpp
// Function: glmatrixf::determinant() const
float glmatrixf::determinant() const
{
    float a1 = v[0], a2 = v[1], a3 = v[2], a4 = v[3],
          b1 = v[4], b2 = v[5], b3 = v[6], b4 = v[7],
          c1 = v[8], c2 = v[9], c3 = v[10], c4 = v[11],
          d1 = v[12], d2 = v[13], d3 = v[14], d4 = v[15];

    return a1 * det3x3(b2, b3, b4, c2, c3, c4, d2, d3, d4)
         - b1 * det3x3(a2, a3, a4, c2, c3, c4, d2, d3, d4)
         + c1 * det3x3(a2, a3, a4, b2, b3, b4, d2, d3, d4)
         - d1 * det3x3(a2, a3, a4, b2, b3, b4, c2, c3, c4);
}

// Assembly:
movups (%rdi), %xmm1
movss 0x8(%rdi), %xmm13
movss 0xc(%rdi), %xmm11
movups 0x14(%rdi), %xmm2
movss 0x18(%rdi), %xmm4
movss 0x1c(%rdi), %xmm6
movups 0x20(%rdi), %xmm0
movss 0x28(%rdi), %xmm9
movss 0x2c(%rdi), %xmm10
movaps %xmm10, %xmm8
mulss %xmm13, %xmm8
movaps %xmm9, %xmm5
mulss %xmm11, %xmm5
movaps %xmm8, %xmm7
subss %xmm5, %xmm7
movaps %xmm6, %xmm3
mulss %xmm13, %xmm3
movaps %xmm4, %xmm12
mulss %xmm11, %xmm12
subss %xmm12, %xmm3
subss %xmm8, %xmm5
movss 0x3c(%rdi), %xmm14
movaps %xmm6, %xmm12
unpcklps %xmm10, %xmm12          # xmm12 = xmm12[0],xmm10[0],xmm12[1],xmm10[1]
unpcklps %xmm14, %xmm10          # xmm10 = xmm10[0],xmm14[0],xmm10[1],xmm14[1]
movaps %xmm4, %xmm8
unpcklps %xmm9, %xmm8            # xmm8 = xmm8[0],xmm9[0],xmm8[1],xmm9[1]
mulps %xmm10, %xmm8
movss 0x38(%rdi), %xmm15
unpcklps %xmm15, %xmm9           # xmm9 = xmm9[0],xmm15[0],xmm9[1],xmm15[1]
mulps %xmm12, %xmm9
subps %xmm9, %xmm8
movss 0x4(%rdi), %xmm9
movss 0x34(%rdi), %xmm10
movaps %xmm10, %xmm12
unpcklps %xmm9, %xmm12           # xmm12 = xmm12[0],xmm9[0],xmm12[1],xmm9[1]
mulps %xmm8, %xmm12
shufps $0x0, %xmm14, %xmm14    # xmm14 = xmm14[0,0,0,0]
unpcklps %xmm13, %xmm4           # xmm4 = xmm4[0],xmm13[0],xmm4[1],xmm13[1]
mulps %xmm14, %xmm4
shufps $0x0, %xmm15, %xmm15    # xmm15 = xmm15[0,0,0,0]
unpcklps %xmm11, %xmm6           # xmm6 = xmm6[0],xmm11[0],xmm6[1],xmm11[1]
mulps %xmm15, %xmm6
movaps %xmm6, %xmm13
subps %xmm4, %xmm13
movss 0x24(%rdi), %xmm14
movaps %xmm10, %xmm11
unpcklps %xmm14, %xmm10          # xmm10 = xmm10[0],xmm14[0],xmm10[1],xmm14[1]
shufps $0x0, %xmm14, %xmm14    # xmm14 = xmm14[0,0,0,0]
mulps %xmm13, %xmm14
addps %xmm12, %xmm14
shufps $0xd4, %xmm8, %xmm7     # xmm7 = xmm7[0,1],xmm8[1,3]
shufps $0xe2, %xmm8, %xmm7     # xmm7 = xmm7[2,0],xmm8[2,3]
movlhps %xmm2, %xmm11           # xmm11 = xmm11[0],xmm2[0]
shufps $0xe2, %xmm2, %xmm11    # xmm11 = xmm11[2,0],xmm2[2,3]
mulps %xmm7, %xmm11
addps %xmm14, %xmm11
subps %xmm6, %xmm4
movlhps %xmm4, %xmm8            # xmm8 = xmm8[0],xmm4[0]
shufps $0xe2, %xmm4, %xmm8     # xmm8 = xmm8[2,0],xmm4[2,3]
shufps $0x0, %xmm9, %xmm9      # xmm9 = xmm9[0,0,0,0]
mulps %xmm8, %xmm9
shufps $0xd4, %xmm13, %xmm5    # xmm5 = xmm5[0,1],xmm13[1,3]
shufps $0x52, %xmm13, %xmm5    # xmm5 = xmm5[2,0],xmm13[1,1]
shufps $0x0, %xmm2, %xmm2      # xmm2 = xmm2[0,0,0,0]
mulps %xmm5, %xmm2
shufps $0x0, %xmm3, %xmm3      # xmm3 = xmm3[0,0,0,0]
mulps %xmm10, %xmm3
addps %xmm9, %xmm3
addps %xmm2, %xmm3
movss 0x30(%rdi), %xmm2
movlhps %xmm0, %xmm2            # xmm2 = xmm2[0],xmm0[0]
shufps $0xe2, %xmm0, %xmm2     # xmm2 = xmm2[2,0],xmm0[2,3]
mulps %xmm3, %xmm2
movss 0x10(%rdi), %xmm0
movlhps %xmm1, %xmm0            # xmm0 = xmm0[0],xmm1[0]
shufps $0xe2, %xmm1, %xmm0     # xmm0 = xmm0[2,0],xmm1[2,3]
mulps %xmm11, %xmm0
addps %xmm2, %xmm0
movaps %xmm0, %xmm1
shufps $0x55, %xmm0, %xmm1     # xmm1 = xmm1[1,1],xmm0[1,1]
subss %xmm1, %xmm0
retq
nop