void matrix4Invert(float *res, float *m) {
  float cofactor0 = matrix4Cofactor(m[5], m[9], m[13], m[6], m[10], m[14], m[7],
                                    m[11], m[15]);
  float cofactor1 = matrix4Cofactor(m[1], m[9], m[13], m[2], m[10], m[14], m[3],
                                    m[11], m[15]);
  float cofactor2 =
      matrix4Cofactor(m[1], m[5], m[13], m[2], m[6], m[14], m[3], m[7], m[15]);
  float cofactor3 =
      matrix4Cofactor(m[1], m[5], m[9], m[2], m[6], m[10], m[3], m[7], m[11]);
  float determinant = m[0] * cofactor0 - m[4] * cofactor1 + m[8] * cofactor2 -
                      m[12] * cofactor3;
  if (fabs(determinant) <= 0.00001f) {
    matrix4Identity(res);
    return;
  }
  float cofactor4 = matrix4Cofactor(m[4], m[8], m[12], m[6], m[10], m[14], m[7],
                                    m[11], m[15]);
  float cofactor5 = matrix4Cofactor(m[0], m[8], m[12], m[2], m[10], m[14], m[3],
                                    m[11], m[15]);
  float cofactor6 =
      matrix4Cofactor(m[0], m[4], m[12], m[2], m[6], m[14], m[3], m[7], m[15]);
  float cofactor7 =
      matrix4Cofactor(m[0], m[4], m[8], m[2], m[6], m[10], m[3], m[7], m[11]);
  float cofactor8 =
      matrix4Cofactor(m[4], m[8], m[12], m[5], m[9], m[13], m[7], m[11], m[15]);
  float cofactor9 =
      matrix4Cofactor(m[0], m[8], m[12], m[1], m[9], m[13], m[3], m[11], m[15]);
  float cofactor10 =
      matrix4Cofactor(m[0], m[4], m[12], m[1], m[5], m[13], m[3], m[7], m[15]);
  float cofactor11 =
      matrix4Cofactor(m[0], m[4], m[8], m[1], m[5], m[9], m[3], m[7], m[11]);
  float cofactor12 =
      matrix4Cofactor(m[4], m[8], m[12], m[5], m[9], m[13], m[6], m[10], m[14]);
  float cofactor13 =
      matrix4Cofactor(m[0], m[8], m[12], m[1], m[9], m[13], m[2], m[10], m[14]);
  float cofactor14 =
      matrix4Cofactor(m[0], m[4], m[12], m[1], m[5], m[13], m[2], m[6], m[14]);
  float cofactor15 =
      matrix4Cofactor(m[0], m[4], m[8], m[1], m[5], m[9], m[2], m[6], m[10]);
  float invDeterminant = 1.0f / determinant;
  res[0] = invDeterminant * cofactor0;
  res[4] = -invDeterminant * cofactor4;
  res[8] = invDeterminant * cofactor8;
  res[12] = -invDeterminant * cofactor12;
  res[1] = -invDeterminant * cofactor1;
  res[5] = invDeterminant * cofactor5;
  res[9] = -invDeterminant * cofactor9;
  res[13] = invDeterminant * cofactor13;
  res[2] = invDeterminant * cofactor2;
  res[6] = -invDeterminant * cofactor6;
  res[10] = invDeterminant * cofactor10;
  res[14] = -invDeterminant * cofactor14;
  res[3] = -invDeterminant * cofactor3;
  res[7] = invDeterminant * cofactor7;
  res[11] = -invDeterminant * cofactor11;
  res[15] = invDeterminant * cofactor15;
}


x86 assembly (clang, -O0):
<matrix4Invert>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    -0x10(%rbp),%rax
movss  0x14(%rax),%xmm0
cvtss2sd %xmm0,%xmm0
mov    -0x10(%rbp),%rax
movss  0x24(%rax),%xmm1
cvtss2sd %xmm1,%xmm1
mov    -0x10(%rbp),%rax
movss  0x34(%rax),%xmm2
cvtss2sd %xmm2,%xmm2
mov    -0x10(%rbp),%rax
movss  0x18(%rax),%xmm3
cvtss2sd %xmm3,%xmm3
mov    -0x10(%rbp),%rax
movss  0x28(%rax),%xmm4
cvtss2sd %xmm4,%xmm4
mov    -0x10(%rbp),%rax
movss  0x38(%rax),%xmm5
cvtss2sd %xmm5,%xmm5
mov    -0x10(%rbp),%rax
movss  0x1c(%rax),%xmm6
cvtss2sd %xmm6,%xmm6
mov    -0x10(%rbp),%rax
movss  0x2c(%rax),%xmm7
cvtss2sd %xmm7,%xmm7
mov    -0x10(%rbp),%rax
movss  0x3c(%rax),%xmm8
cvtss2sd %xmm8,%xmm8
movsd  %xmm8,(%rsp)
mov    $0x8,%al
call   1040 <matrix4Cofactor@plt>
cvtsi2ss %eax,%xmm0
movss  %xmm0,-0x14(%rbp)
mov    -0x10(%rbp),%rax
movss  0x4(%rax),%xmm0
cvtss2sd %xmm0,%xmm0
mov    -0x10(%rbp),%rax
movss  0x24(%rax),%xmm1
cvtss2sd %xmm1,%xmm1
mov    -0x10(%rbp),%rax
movss  0x34(%rax),%xmm2
cvtss2sd %xmm2,%xmm2
mov    -0x10(%rbp),%rax
movss  0x8(%rax),%xmm3
cvtss2sd %xmm3,%xmm3
mov    -0x10(%rbp),%rax
movss  0x28(%rax),%xmm4
cvtss2sd %xmm4,%xmm4
mov    -0x10(%rbp),%rax
movss  0x38(%rax),%xmm5
cvtss2sd %xmm5,%xmm5
mov    -0x10(%rbp),%rax
movss  0xc(%rax),%xmm6
cvtss2sd %xmm6,%xmm6
mov    -0x10(%rbp),%rax
movss  0x2c(%rax),%xmm7
cvtss2sd %xmm7,%xmm7
mov    -0x10(%rbp),%rax
movss  0x3c(%rax),%xmm8
cvtss2sd %xmm8,%xmm8
movsd  %xmm8,(%rsp)
mov    $0x8,%al
call   1040 <matrix4Cofactor@plt>
cvtsi2ss %eax,%xmm0
movss  %xmm0,-0x18(%rbp)
mov    -0x10(%rbp),%rax
movss  0x4(%rax),%xmm0
cvtss2sd %xmm0,%xmm0
mov    -0x10(%rbp),%rax
movss  0x14(%rax),%xmm1
cvtss2sd %xmm1,%xmm1
mov    -0x10(%rbp),%rax
movss  0x34(%rax),%xmm2
cvtss2sd %xmm2,%xmm2
mov    -0x10(%rbp),%rax
movss  0x8(%rax),%xmm3
cvtss2sd %xmm3,%xmm3
mov    -0x10(%rbp),%rax
movss  0x18(%rax),%xmm4
cvtss2sd %xmm4,%xmm4
mov    -0x10(%rbp),%rax
movss  0x38(%rax),%xmm5
cvtss2sd %xmm5,%xmm5
mov    -0x10(%rbp),%rax
movss  0xc(%rax),%xmm6
cvtss2sd %xmm6,%xmm6
mov    -0x10(%rbp),%rax
movss  0x1c(%rax),%xmm7
cvtss2sd %xmm7,%xmm7
mov    -0x10(%rbp),%rax
movss  0x3c(%rax),%xmm8
cvtss2sd %xmm8,%xmm8
movsd  %xmm8,(%rsp)
mov    $0x8,%al
call   1040 <matrix4Cofactor@plt>
cvtsi2ss %eax,%xmm0
movss  %xmm0,-0x1c(%rbp)
mov    -0x10(%rbp),%rax
movss  0x4(%rax),%xmm0
cvtss2sd %xmm0,%xmm0
mov    -0x10(%rbp),%rax
movss  0x14(%rax),%xmm1
cvtss2sd %xmm1,%xmm1
mov    -0x10(%rbp),%rax
movss  0x24(%rax),%xmm2
cvtss2sd %xmm2,%xmm2
mov    -0x10(%rbp),%rax
movss  0x8(%rax),%xmm3
cvtss2sd %xmm3,%xmm3
mov    -0x10(%rbp),%rax
movss  0x18(%rax),%xmm4
cvtss2sd %xmm4,%xmm4
mov    -0x10(%rbp),%rax
movss  0x28(%rax),%xmm5
cvtss2sd %xmm5,%xmm5
mov    -0x10(%rbp),%rax
movss  0xc(%rax),%xmm6
cvtss2sd %xmm6,%xmm6
mov    -0x10(%rbp),%rax
movss  0x1c(%rax),%xmm7
cvtss2sd %xmm7,%xmm7
mov    -0x10(%rbp),%rax
movss  0x2c(%rax),%xmm8
cvtss2sd %xmm8,%xmm8
movsd  %xmm8,(%rsp)
mov    $0x8,%al
call   1040 <matrix4Cofactor@plt>
cvtsi2ss %eax,%xmm0
movss  %xmm0,-0x20(%rbp)
mov    -0x10(%rbp),%rax
movss  (%rax),%xmm0
movss  -0x14(%rbp),%xmm2
mov    -0x10(%rbp),%rax
movss  0x10(%rax),%xmm1
mulss  -0x18(%rbp),%xmm1
movd   %xmm1,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x10(%rbp),%rax
movss  0x20(%rax),%xmm1
movss  -0x1c(%rbp),%xmm2
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
mov    -0x10(%rbp),%rax
movss  0x30(%rax),%xmm0
movss  -0x20(%rbp),%xmm2
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x24(%rbp)
movss  -0x24(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movaps 0xc2e(%rip),%xmm0
pand   %xmm0,%xmm1
movsd  0xc12(%rip),%xmm0
ucomisd %xmm1,%xmm0
jb     1408 <matrix4Invert+0x2e8>
mov    -0x8(%rbp),%rdi
mov    $0x0,%al
call   1030 <matrix4Identity@plt>
jmp    1c44 <matrix4Invert+0xb24>
mov    -0x10(%rbp),%rax
movss  0x10(%rax),%xmm0
cvtss2sd %xmm0,%xmm0
mov    -0x10(%rbp),%rax
movss  0x20(%rax),%xmm1
cvtss2sd %xmm1,%xmm1
mov    -0x10(%rbp),%rax
movss  0x30(%rax),%xmm2
cvtss2sd %xmm2,%xmm2
mov    -0x10(%rbp),%rax
movss  0x18(%rax),%xmm3
cvtss2sd %xmm3,%xmm3
mov    -0x10(%rbp),%rax
movss  0x28(%rax),%xmm4
cvtss2sd %xmm4,%xmm4
mov    -0x10(%rbp),%rax
movss  0x38(%rax),%xmm5
cvtss2sd %xmm5,%xmm5
mov    -0x10(%rbp),%rax
movss  0x1c(%rax),%xmm6
cvtss2sd %xmm6,%xmm6
mov    -0x10(%rbp),%rax
movss  0x2c(%rax),%xmm7
cvtss2sd %xmm7,%xmm7
mov    -0x10(%rbp),%rax
movss  0x3c(%rax),%xmm8
cvtss2sd %xmm8,%xmm8
movsd  %xmm8,(%rsp)
mov    $0x8,%al
call   1040 <matrix4Cofactor@plt>
cvtsi2ss %eax,%xmm0
movss  %xmm0,-0x28(%rbp)
mov    -0x10(%rbp),%rax
movss  (%rax),%xmm0
cvtss2sd %xmm0,%xmm0
mov    -0x10(%rbp),%rax
movss  0x20(%rax),%xmm1
cvtss2sd %xmm1,%xmm1
mov    -0x10(%rbp),%rax
movss  0x30(%rax),%xmm2
cvtss2sd %xmm2,%xmm2
mov    -0x10(%rbp),%rax
movss  0x8(%rax),%xmm3
cvtss2sd %xmm3,%xmm3
mov    -0x10(%rbp),%rax
movss  0x28(%rax),%xmm4
cvtss2sd %xmm4,%xmm4
mov    -0x10(%rbp),%rax
movss  0x38(%rax),%xmm5
cvtss2sd %xmm5,%xmm5
mov    -0x10(%rbp),%rax
movss  0xc(%rax),%xmm6
cvtss2sd %xmm6,%xmm6
mov    -0x10(%rbp),%rax
movss  0x2c(%rax),%xmm7
cvtss2sd %xmm7,%xmm7
mov    -0x10(%rbp),%rax
movss  0x3c(%rax),%xmm8
cvtss2sd %xmm8,%xmm8
movsd  %xmm8,(%rsp)
mov    $0x8,%al
call   1040 <matrix4Cofactor@plt>
cvtsi2ss %eax,%xmm0
movss  %xmm0,-0x2c(%rbp)
mov    -0x10(%rbp),%rax
movss  (%rax),%xmm0
cvtss2sd %xmm0,%xmm0
mov    -0x10(%rbp),%rax
movss  0x10(%rax),%xmm1
cvtss2sd %xmm1,%xmm1
mov    -0x10(%rbp),%rax
movss  0x30(%rax),%xmm2
cvtss2sd %xmm2,%xmm2
mov    -0x10(%rbp),%rax
movss  0x8(%rax),%xmm3
cvtss2sd %xmm3,%xmm3
mov    -0x10(%rbp),%rax
movss  0x18(%rax),%xmm4
cvtss2sd %xmm4,%xmm4
mov    -0x10(%rbp),%rax
movss  0x38(%rax),%xmm5
cvtss2sd %xmm5,%xmm5
mov    -0x10(%rbp),%rax
movss  0xc(%rax),%xmm6
cvtss2sd %xmm6,%xmm6
mov    -0x10(%rbp),%rax
movss  0x1c(%rax),%xmm7
cvtss2sd %xmm7,%xmm7
mov    -0x10(%rbp),%rax
movss  0x3c(%rax),%xmm8
cvtss2sd %xmm8,%xmm8
movsd  %xmm8,(%rsp)
mov    $0x8,%al
call   1040 <matrix4Cofactor@plt>
cvtsi2ss %eax,%xmm0
movss  %xmm0,-0x30(%rbp)
mov    -0x10(%rbp),%rax
movss  (%rax),%xmm0
cvtss2sd %xmm0,%xmm0
mov    -0x10(%rbp),%rax
movss  0x10(%rax),%xmm1
cvtss2sd %xmm1,%xmm1
mov    -0x10(%rbp),%rax
movss  0x20(%rax),%xmm2
cvtss2sd %xmm2,%xmm2
mov    -0x10(%rbp),%rax
movss  0x8(%rax),%xmm3
cvtss2sd %xmm3,%xmm3
mov    -0x10(%rbp),%rax
movss  0x18(%rax),%xmm4
cvtss2sd %xmm4,%xmm4
mov    -0x10(%rbp),%rax
movss  0x28(%rax),%xmm5
cvtss2sd %xmm5,%xmm5
mov    -0x10(%rbp),%rax
movss  0xc(%rax),%xmm6
cvtss2sd %xmm6,%xmm6
mov    -0x10(%rbp),%rax
movss  0x1c(%rax),%xmm7
cvtss2sd %xmm7,%xmm7
mov    -0x10(%rbp),%rax
movss  0x2c(%rax),%xmm8
cvtss2sd %xmm8,%xmm8
movsd  %xmm8,(%rsp)
mov    $0x8,%al
call   1040 <matrix4Cofactor@plt>
cvtsi2ss %eax,%xmm0
movss  %xmm0,-0x34(%rbp)
mov    -0x10(%rbp),%rax
movss  0x10(%rax),%xmm0
cvtss2sd %xmm0,%xmm0
mov    -0x10(%rbp),%rax
movss  0x20(%rax),%xmm1
cvtss2sd %xmm1,%xmm1
mov    -0x10(%rbp),%rax
movss  0x30(%rax),%xmm2
cvtss2sd %xmm2,%xmm2
mov    -0x10(%rbp),%rax
movss  0x14(%rax),%xmm3
cvtss2sd %xmm3,%xmm3
mov    -0x10(%rbp),%rax
movss  0x24(%rax),%xmm4
cvtss2sd %xmm4,%xmm4
mov    -0x10(%rbp),%rax
movss  0x34(%rax),%xmm5
cvtss2sd %xmm5,%xmm5
mov    -0x10(%rbp),%rax
movss  0x1c(%rax),%xmm6
cvtss2sd %xmm6,%xmm6
mov    -0x10(%rbp),%rax
movss  0x2c(%rax),%xmm7
cvtss2sd %xmm7,%xmm7
mov    -0x10(%rbp),%rax
movss  0x3c(%rax),%xmm8
cvtss2sd %xmm8,%xmm8
movsd  %xmm8,(%rsp)
mov    $0x8,%al
call   1040 <matrix4Cofactor@plt>
cvtsi2ss %eax,%xmm0
movss  %xmm0,-0x38(%rbp)
mov    -0x10(%rbp),%rax
movss  (%rax),%xmm0
cvtss2sd %xmm0,%xmm0
mov    -0x10(%rbp),%rax
movss  0x20(%rax),%xmm1
cvtss2sd %xmm1,%xmm1
mov    -0x10(%rbp),%rax
movss  0x30(%rax),%xmm2
cvtss2sd %xmm2,%xmm2
mov    -0x10(%rbp),%rax
movss  0x4(%rax),%xmm3
cvtss2sd %xmm3,%xmm3
mov    -0x10(%rbp),%rax
movss  0x24(%rax),%xmm4
cvtss2sd %xmm4,%xmm4
mov    -0x10(%rbp),%rax
movss  0x34(%rax),%xmm5
cvtss2sd %xmm5,%xmm5
mov    -0x10(%rbp),%rax
movss  0xc(%rax),%xmm6
cvtss2sd %xmm6,%xmm6
mov    -0x10(%rbp),%rax
movss  0x2c(%rax),%xmm7
cvtss2sd %xmm7,%xmm7
mov    -0x10(%rbp),%rax
movss  0x3c(%rax),%xmm8
cvtss2sd %xmm8,%xmm8
movsd  %xmm8,(%rsp)
mov    $0x8,%al
call   1040 <matrix4Cofactor@plt>
cvtsi2ss %eax,%xmm0
movss  %xmm0,-0x3c(%rbp)
mov    -0x10(%rbp),%rax
movss  (%rax),%xmm0
cvtss2sd %xmm0,%xmm0
mov    -0x10(%rbp),%rax
movss  0x10(%rax),%xmm1
cvtss2sd %xmm1,%xmm1
mov    -0x10(%rbp),%rax
movss  0x30(%rax),%xmm2
cvtss2sd %xmm2,%xmm2
mov    -0x10(%rbp),%rax
movss  0x4(%rax),%xmm3
cvtss2sd %xmm3,%xmm3
mov    -0x10(%rbp),%rax
movss  0x14(%rax),%xmm4
cvtss2sd %xmm4,%xmm4
mov    -0x10(%rbp),%rax
movss  0x34(%rax),%xmm5
cvtss2sd %xmm5,%xmm5
mov    -0x10(%rbp),%rax
movss  0xc(%rax),%xmm6
cvtss2sd %xmm6,%xmm6
mov    -0x10(%rbp),%rax
movss  0x1c(%rax),%xmm7
cvtss2sd %xmm7,%xmm7
mov    -0x10(%rbp),%rax
movss  0x3c(%rax),%xmm8
cvtss2sd %xmm8,%xmm8
movsd  %xmm8,(%rsp)
mov    $0x8,%al
call   1040 <matrix4Cofactor@plt>
cvtsi2ss %eax,%xmm0
movss  %xmm0,-0x40(%rbp)
mov    -0x10(%rbp),%rax
movss  (%rax),%xmm0
cvtss2sd %xmm0,%xmm0
mov    -0x10(%rbp),%rax
movss  0x10(%rax),%xmm1
cvtss2sd %xmm1,%xmm1
mov    -0x10(%rbp),%rax
movss  0x20(%rax),%xmm2
cvtss2sd %xmm2,%xmm2
mov    -0x10(%rbp),%rax
movss  0x4(%rax),%xmm3
cvtss2sd %xmm3,%xmm3
mov    -0x10(%rbp),%rax
movss  0x14(%rax),%xmm4
cvtss2sd %xmm4,%xmm4
mov    -0x10(%rbp),%rax
movss  0x24(%rax),%xmm5
cvtss2sd %xmm5,%xmm5
mov    -0x10(%rbp),%rax
movss  0xc(%rax),%xmm6
cvtss2sd %xmm6,%xmm6
mov    -0x10(%rbp),%rax
movss  0x1c(%rax),%xmm7
cvtss2sd %xmm7,%xmm7
mov    -0x10(%rbp),%rax
movss  0x2c(%rax),%xmm8
cvtss2sd %xmm8,%xmm8
movsd  %xmm8,(%rsp)
mov    $0x8,%al
call   1040 <matrix4Cofactor@plt>
cvtsi2ss %eax,%xmm0
movss  %xmm0,-0x44(%rbp)
mov    -0x10(%rbp),%rax
movss  0x10(%rax),%xmm0
cvtss2sd %xmm0,%xmm0
mov    -0x10(%rbp),%rax
movss  0x20(%rax),%xmm1
cvtss2sd %xmm1,%xmm1
mov    -0x10(%rbp),%rax
movss  0x30(%rax),%xmm2
cvtss2sd %xmm2,%xmm2
mov    -0x10(%rbp),%rax
movss  0x14(%rax),%xmm3
cvtss2sd %xmm3,%xmm3
mov    -0x10(%rbp),%rax
movss  0x24(%rax),%xmm4
cvtss2sd %xmm4,%xmm4
mov    -0x10(%rbp),%rax
movss  0x34(%rax),%xmm5
cvtss2sd %xmm5,%xmm5
mov    -0x10(%rbp),%rax
movss  0x18(%rax),%xmm6
cvtss2sd %xmm6,%xmm6
mov    -0x10(%rbp),%rax
movss  0x28(%rax),%xmm7
cvtss2sd %xmm7,%xmm7
mov    -0x10(%rbp),%rax
movss  0x38(%rax),%xmm8
cvtss2sd %xmm8,%xmm8
movsd  %xmm8,(%rsp)
mov    $0x8,%al
call   1040 <matrix4Cofactor@plt>
cvtsi2ss %eax,%xmm0
movss  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movss  (%rax),%xmm0
cvtss2sd %xmm0,%xmm0
mov    -0x10(%rbp),%rax
movss  0x20(%rax),%xmm1
cvtss2sd %xmm1,%xmm1
mov    -0x10(%rbp),%rax
movss  0x30(%rax),%xmm2
cvtss2sd %xmm2,%xmm2
mov    -0x10(%rbp),%rax
movss  0x4(%rax),%xmm3
cvtss2sd %xmm3,%xmm3
mov    -0x10(%rbp),%rax
movss  0x24(%rax),%xmm4
cvtss2sd %xmm4,%xmm4
mov    -0x10(%rbp),%rax
movss  0x34(%rax),%xmm5
cvtss2sd %xmm5,%xmm5
mov    -0x10(%rbp),%rax
movss  0x8(%rax),%xmm6
cvtss2sd %xmm6,%xmm6
mov    -0x10(%rbp),%rax
movss  0x28(%rax),%xmm7
cvtss2sd %xmm7,%xmm7
mov    -0x10(%rbp),%rax
movss  0x38(%rax),%xmm8
cvtss2sd %xmm8,%xmm8
movsd  %xmm8,(%rsp)
mov    $0x8,%al
call   1040 <matrix4Cofactor@plt>
cvtsi2ss %eax,%xmm0
movss  %xmm0,-0x4c(%rbp)
mov    -0x10(%rbp),%rax
movss  (%rax),%xmm0
cvtss2sd %xmm0,%xmm0
mov    -0x10(%rbp),%rax
movss  0x10(%rax),%xmm1
cvtss2sd %xmm1,%xmm1
mov    -0x10(%rbp),%rax
movss  0x30(%rax),%xmm2
cvtss2sd %xmm2,%xmm2
mov    -0x10(%rbp),%rax
movss  0x4(%rax),%xmm3
cvtss2sd %xmm3,%xmm3
mov    -0x10(%rbp),%rax
movss  0x14(%rax),%xmm4
cvtss2sd %xmm4,%xmm4
mov    -0x10(%rbp),%rax
movss  0x34(%rax),%xmm5
cvtss2sd %xmm5,%xmm5
mov    -0x10(%rbp),%rax
movss  0x8(%rax),%xmm6
cvtss2sd %xmm6,%xmm6
mov    -0x10(%rbp),%rax
movss  0x18(%rax),%xmm7
cvtss2sd %xmm7,%xmm7
mov    -0x10(%rbp),%rax
movss  0x38(%rax),%xmm8
cvtss2sd %xmm8,%xmm8
movsd  %xmm8,(%rsp)
mov    $0x8,%al
call   1040 <matrix4Cofactor@plt>
cvtsi2ss %eax,%xmm0
movss  %xmm0,-0x50(%rbp)
mov    -0x10(%rbp),%rax
movss  (%rax),%xmm0
cvtss2sd %xmm0,%xmm0
mov    -0x10(%rbp),%rax
movss  0x10(%rax),%xmm1
cvtss2sd %xmm1,%xmm1
mov    -0x10(%rbp),%rax
movss  0x20(%rax),%xmm2
cvtss2sd %xmm2,%xmm2
mov    -0x10(%rbp),%rax
movss  0x4(%rax),%xmm3
cvtss2sd %xmm3,%xmm3
mov    -0x10(%rbp),%rax
movss  0x14(%rax),%xmm4
cvtss2sd %xmm4,%xmm4
mov    -0x10(%rbp),%rax
movss  0x24(%rax),%xmm5
cvtss2sd %xmm5,%xmm5
mov    -0x10(%rbp),%rax
movss  0x8(%rax),%xmm6
cvtss2sd %xmm6,%xmm6
mov    -0x10(%rbp),%rax
movss  0x18(%rax),%xmm7
cvtss2sd %xmm7,%xmm7
mov    -0x10(%rbp),%rax
movss  0x28(%rax),%xmm8
cvtss2sd %xmm8,%xmm8
movsd  %xmm8,(%rsp)
mov    $0x8,%al
call   1040 <matrix4Cofactor@plt>
cvtsi2ss %eax,%xmm0
movss  %xmm0,-0x54(%rbp)
movss  0x57d(%rip),%xmm0
divss  -0x24(%rbp),%xmm0
movss  %xmm0,-0x58(%rbp)
movss  -0x58(%rbp),%xmm0
mulss  -0x14(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x58(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mulss  -0x28(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x10(%rax)
movss  -0x58(%rbp),%xmm0
mulss  -0x38(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x20(%rax)
movss  -0x58(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mulss  -0x48(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x30(%rax)
movss  -0x58(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mulss  -0x18(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x4(%rax)
movss  -0x58(%rbp),%xmm0
mulss  -0x2c(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x14(%rax)
movss  -0x58(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mulss  -0x3c(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x24(%rax)
movss  -0x58(%rbp),%xmm0
mulss  -0x4c(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x34(%rax)
movss  -0x58(%rbp),%xmm0
mulss  -0x1c(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x8(%rax)
movss  -0x58(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mulss  -0x30(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x18(%rax)
movss  -0x58(%rbp),%xmm0
mulss  -0x40(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x28(%rax)
movss  -0x58(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mulss  -0x50(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x38(%rax)
movss  -0x58(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mulss  -0x20(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0xc(%rax)
movss  -0x58(%rbp),%xmm0
mulss  -0x34(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x1c(%rax)
movss  -0x58(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mulss  -0x44(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x2c(%rax)
movss  -0x58(%rbp),%xmm0
mulss  -0x54(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x3c(%rax)
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<matrix4Invert>:
push   %rbp
push   %r15
push   %r14
push   %r12
push   %rbx
sub    $0x80,%rsp
mov    %rsi,%rbx
mov    %rdi,%r14
movss  0x14(%rsi),%xmm0
movss  0x18(%rsi),%xmm3
cvtss2sd %xmm0,%xmm0
movss  0x24(%rsi),%xmm1
cvtss2sd %xmm1,%xmm1
movss  0x34(%rsi),%xmm2
cvtss2sd %xmm2,%xmm2
cvtss2sd %xmm3,%xmm3
movss  0x28(%rsi),%xmm4
cvtss2sd %xmm4,%xmm4
movss  0x38(%rsi),%xmm5
cvtss2sd %xmm5,%xmm5
movss  0x1c(%rsi),%xmm6
cvtss2sd %xmm6,%xmm6
movss  0x2c(%rsi),%xmm7
cvtss2sd %xmm7,%xmm7
movss  0x3c(%rsi),%xmm8
cvtss2sd %xmm8,%xmm8
movsd  %xmm8,(%rsp)
mov    $0x8,%al
call   1040 <matrix4Cofactor@plt>
xorps  %xmm0,%xmm0
cvtsi2ss %eax,%xmm0
movaps %xmm0,0x30(%rsp)
movss  0x4(%rbx),%xmm0
movss  0x8(%rbx),%xmm3
cvtss2sd %xmm0,%xmm0
movss  0x24(%rbx),%xmm1
cvtss2sd %xmm1,%xmm1
movss  0x34(%rbx),%xmm2
cvtss2sd %xmm2,%xmm2
cvtss2sd %xmm3,%xmm3
movss  0x28(%rbx),%xmm4
cvtss2sd %xmm4,%xmm4
movss  0x38(%rbx),%xmm5
cvtss2sd %xmm5,%xmm5
movss  0xc(%rbx),%xmm6
cvtss2sd %xmm6,%xmm6
movss  0x2c(%rbx),%xmm7
cvtss2sd %xmm7,%xmm7
movss  0x3c(%rbx),%xmm8
cvtss2sd %xmm8,%xmm8
movsd  %xmm8,(%rsp)
mov    $0x8,%al
call   1040 <matrix4Cofactor@plt>
xorps  %xmm0,%xmm0
cvtsi2ss %eax,%xmm0
movaps %xmm0,0x20(%rsp)
movss  0x4(%rbx),%xmm0
movss  0x8(%rbx),%xmm3
cvtss2sd %xmm0,%xmm0
movss  0x14(%rbx),%xmm1
cvtss2sd %xmm1,%xmm1
movss  0x34(%rbx),%xmm2
cvtss2sd %xmm2,%xmm2
cvtss2sd %xmm3,%xmm3
movss  0x18(%rbx),%xmm4
cvtss2sd %xmm4,%xmm4
movss  0x38(%rbx),%xmm5
cvtss2sd %xmm5,%xmm5
movss  0xc(%rbx),%xmm6
cvtss2sd %xmm6,%xmm6
movss  0x1c(%rbx),%xmm7
cvtss2sd %xmm7,%xmm7
movss  0x3c(%rbx),%xmm8
cvtss2sd %xmm8,%xmm8
movsd  %xmm8,(%rsp)
mov    $0x8,%al
call   1040 <matrix4Cofactor@plt>
xorps  %xmm0,%xmm0
cvtsi2ss %eax,%xmm0
movaps %xmm0,0x10(%rsp)
movss  0x4(%rbx),%xmm0
movss  0x8(%rbx),%xmm3
cvtss2sd %xmm0,%xmm0
movss  0x14(%rbx),%xmm1
cvtss2sd %xmm1,%xmm1
movss  0x24(%rbx),%xmm2
cvtss2sd %xmm2,%xmm2
cvtss2sd %xmm3,%xmm3
movss  0x18(%rbx),%xmm4
cvtss2sd %xmm4,%xmm4
movss  0x28(%rbx),%xmm5
cvtss2sd %xmm5,%xmm5
movss  0xc(%rbx),%xmm6
cvtss2sd %xmm6,%xmm6
movss  0x1c(%rbx),%xmm7
cvtss2sd %xmm7,%xmm7
movss  0x2c(%rbx),%xmm8
cvtss2sd %xmm8,%xmm8
movsd  %xmm8,(%rsp)
mov    $0x8,%al
call   1040 <matrix4Cofactor@plt>
xorps  %xmm5,%xmm5
cvtsi2ss %eax,%xmm5
movss  0x10(%rbx),%xmm0
movss  0x20(%rbx),%xmm1
movaps 0x20(%rsp),%xmm2
mulss  %xmm0,%xmm2
movss  (%rbx),%xmm3
mulss  0x30(%rsp),%xmm3
subss  %xmm2,%xmm3
movaps %xmm1,%xmm6
mulss  0x10(%rsp),%xmm6
addss  %xmm3,%xmm6
movss  0x30(%rbx),%xmm2
movaps %xmm2,%xmm3
mulss  %xmm5,%xmm3
subss  %xmm3,%xmm6
movaps 0xcdb(%rip),%xmm3
andps  %xmm6,%xmm3
movss  0xcf0(%rip),%xmm4
ucomiss %xmm3,%xmm4
jae    18b4 <matrix4Invert+0x794>
cvtss2sd %xmm0,%xmm0
cvtss2sd %xmm1,%xmm1
cvtss2sd %xmm2,%xmm2
movss  0x18(%rbx),%xmm3
movaps %xmm6,0x60(%rsp)
movss  0x1c(%rbx),%xmm6
cvtss2sd %xmm3,%xmm3
movss  0x28(%rbx),%xmm4
cvtss2sd %xmm4,%xmm4
movaps %xmm5,0x70(%rsp)
movss  0x38(%rbx),%xmm5
cvtss2sd %xmm5,%xmm5
cvtss2sd %xmm6,%xmm6
movss  0x2c(%rbx),%xmm7
cvtss2sd %xmm7,%xmm7
movss  0x3c(%rbx),%xmm8
cvtss2sd %xmm8,%xmm8
movsd  %xmm8,(%rsp)
mov    $0x8,%al
call   1040 <matrix4Cofactor@plt>
mov    %eax,%r15d
movss  (%rbx),%xmm0
movss  0x8(%rbx),%xmm3
cvtss2sd %xmm0,%xmm0
movss  0x20(%rbx),%xmm1
cvtss2sd %xmm1,%xmm1
movss  0x30(%rbx),%xmm2
cvtss2sd %xmm2,%xmm2
cvtss2sd %xmm3,%xmm3
movss  0x28(%rbx),%xmm4
cvtss2sd %xmm4,%xmm4
movss  0x38(%rbx),%xmm5
cvtss2sd %xmm5,%xmm5
movss  0xc(%rbx),%xmm6
cvtss2sd %xmm6,%xmm6
movss  0x2c(%rbx),%xmm7
cvtss2sd %xmm7,%xmm7
movss  0x3c(%rbx),%xmm8
cvtss2sd %xmm8,%xmm8
movsd  %xmm8,(%rsp)
mov    $0x8,%al
call   1040 <matrix4Cofactor@plt>
mov    %eax,%r12d
movss  (%rbx),%xmm0
movss  0x8(%rbx),%xmm3
cvtss2sd %xmm0,%xmm0
movss  0x10(%rbx),%xmm1
cvtss2sd %xmm1,%xmm1
movss  0x30(%rbx),%xmm2
cvtss2sd %xmm2,%xmm2
cvtss2sd %xmm3,%xmm3
movss  0x18(%rbx),%xmm4
cvtss2sd %xmm4,%xmm4
movss  0x38(%rbx),%xmm5
cvtss2sd %xmm5,%xmm5
movss  0xc(%rbx),%xmm6
cvtss2sd %xmm6,%xmm6
movss  0x1c(%rbx),%xmm7
cvtss2sd %xmm7,%xmm7
movss  0x3c(%rbx),%xmm8
cvtss2sd %xmm8,%xmm8
movsd  %xmm8,(%rsp)
mov    $0x8,%al
call   1040 <matrix4Cofactor@plt>
mov    %eax,%ebp
movss  (%rbx),%xmm0
movss  0x8(%rbx),%xmm3
cvtss2sd %xmm0,%xmm0
movss  0x10(%rbx),%xmm1
cvtss2sd %xmm1,%xmm1
movss  0x20(%rbx),%xmm2
cvtss2sd %xmm2,%xmm2
cvtss2sd %xmm3,%xmm3
movss  0x18(%rbx),%xmm4
cvtss2sd %xmm4,%xmm4
movss  0x28(%rbx),%xmm5
cvtss2sd %xmm5,%xmm5
movss  0xc(%rbx),%xmm6
cvtss2sd %xmm6,%xmm6
movss  0x1c(%rbx),%xmm7
cvtss2sd %xmm7,%xmm7
movss  0x2c(%rbx),%xmm8
cvtss2sd %xmm8,%xmm8
movsd  %xmm8,(%rsp)
mov    $0x8,%al
call   1040 <matrix4Cofactor@plt>
movd   %r15d,%xmm0
movd   %r12d,%xmm1
punpckldq %xmm1,%xmm0
movd   %ebp,%xmm1
movd   %eax,%xmm2
punpckldq %xmm2,%xmm1
punpcklqdq %xmm1,%xmm0
cvtdq2ps %xmm0,%xmm0
movaps %xmm0,0x50(%rsp)
movss  0x10(%rbx),%xmm0
movss  0x14(%rbx),%xmm3
cvtss2sd %xmm0,%xmm0
movss  0x20(%rbx),%xmm1
cvtss2sd %xmm1,%xmm1
movss  0x30(%rbx),%xmm2
cvtss2sd %xmm2,%xmm2
cvtss2sd %xmm3,%xmm3
movss  0x24(%rbx),%xmm4
cvtss2sd %xmm4,%xmm4
movss  0x34(%rbx),%xmm5
cvtss2sd %xmm5,%xmm5
movss  0x1c(%rbx),%xmm6
cvtss2sd %xmm6,%xmm6
movss  0x2c(%rbx),%xmm7
cvtss2sd %xmm7,%xmm7
movss  0x3c(%rbx),%xmm8
cvtss2sd %xmm8,%xmm8
movsd  %xmm8,(%rsp)
mov    $0x8,%al
call   1040 <matrix4Cofactor@plt>
mov    %eax,%r15d
movss  (%rbx),%xmm0
movss  0x4(%rbx),%xmm3
cvtss2sd %xmm0,%xmm0
movss  0x20(%rbx),%xmm1
cvtss2sd %xmm1,%xmm1
movss  0x30(%rbx),%xmm2
cvtss2sd %xmm2,%xmm2
cvtss2sd %xmm3,%xmm3
movss  0x24(%rbx),%xmm4
cvtss2sd %xmm4,%xmm4
movss  0x34(%rbx),%xmm5
cvtss2sd %xmm5,%xmm5
movss  0xc(%rbx),%xmm6
cvtss2sd %xmm6,%xmm6
movss  0x2c(%rbx),%xmm7
cvtss2sd %xmm7,%xmm7
movss  0x3c(%rbx),%xmm8
cvtss2sd %xmm8,%xmm8
movsd  %xmm8,(%rsp)
mov    $0x8,%al
call   1040 <matrix4Cofactor@plt>
mov    %eax,%r12d
movss  (%rbx),%xmm0
movss  0x4(%rbx),%xmm3
cvtss2sd %xmm0,%xmm0
movss  0x10(%rbx),%xmm1
cvtss2sd %xmm1,%xmm1
movss  0x30(%rbx),%xmm2
cvtss2sd %xmm2,%xmm2
cvtss2sd %xmm3,%xmm3
movss  0x14(%rbx),%xmm4
cvtss2sd %xmm4,%xmm4
movss  0x34(%rbx),%xmm5
cvtss2sd %xmm5,%xmm5
movss  0xc(%rbx),%xmm6
cvtss2sd %xmm6,%xmm6
movss  0x1c(%rbx),%xmm7
cvtss2sd %xmm7,%xmm7
movss  0x3c(%rbx),%xmm8
cvtss2sd %xmm8,%xmm8
movsd  %xmm8,(%rsp)
mov    $0x8,%al
call   1040 <matrix4Cofactor@plt>
mov    %eax,%ebp
movss  (%rbx),%xmm0
movss  0x4(%rbx),%xmm3
cvtss2sd %xmm0,%xmm0
movss  0x10(%rbx),%xmm1
cvtss2sd %xmm1,%xmm1
movss  0x20(%rbx),%xmm2
cvtss2sd %xmm2,%xmm2
cvtss2sd %xmm3,%xmm3
movss  0x14(%rbx),%xmm4
cvtss2sd %xmm4,%xmm4
movss  0x24(%rbx),%xmm5
cvtss2sd %xmm5,%xmm5
movss  0xc(%rbx),%xmm6
cvtss2sd %xmm6,%xmm6
movss  0x1c(%rbx),%xmm7
cvtss2sd %xmm7,%xmm7
movss  0x2c(%rbx),%xmm8
cvtss2sd %xmm8,%xmm8
movsd  %xmm8,(%rsp)
mov    $0x8,%al
call   1040 <matrix4Cofactor@plt>
movd   %r15d,%xmm0
movd   %r12d,%xmm1
punpckldq %xmm1,%xmm0
movd   %ebp,%xmm1
movd   %eax,%xmm2
punpckldq %xmm2,%xmm1
punpcklqdq %xmm1,%xmm0
cvtdq2ps %xmm0,%xmm0
movaps %xmm0,0x40(%rsp)
movss  0x10(%rbx),%xmm0
movss  0x14(%rbx),%xmm3
cvtss2sd %xmm0,%xmm0
movss  0x20(%rbx),%xmm1
cvtss2sd %xmm1,%xmm1
movss  0x30(%rbx),%xmm2
cvtss2sd %xmm2,%xmm2
cvtss2sd %xmm3,%xmm3
movss  0x24(%rbx),%xmm4
cvtss2sd %xmm4,%xmm4
movss  0x34(%rbx),%xmm5
cvtss2sd %xmm5,%xmm5
movss  0x18(%rbx),%xmm6
cvtss2sd %xmm6,%xmm6
movss  0x28(%rbx),%xmm7
cvtss2sd %xmm7,%xmm7
movss  0x38(%rbx),%xmm8
cvtss2sd %xmm8,%xmm8
movsd  %xmm8,(%rsp)
mov    $0x8,%al
call   1040 <matrix4Cofactor@plt>
mov    %eax,%r15d
movss  (%rbx),%xmm0
movss  0x4(%rbx),%xmm3
cvtss2sd %xmm0,%xmm0
movss  0x20(%rbx),%xmm1
cvtss2sd %xmm1,%xmm1
movss  0x30(%rbx),%xmm2
cvtss2sd %xmm2,%xmm2
cvtss2sd %xmm3,%xmm3
movss  0x24(%rbx),%xmm4
cvtss2sd %xmm4,%xmm4
movss  0x34(%rbx),%xmm5
cvtss2sd %xmm5,%xmm5
movss  0x8(%rbx),%xmm6
cvtss2sd %xmm6,%xmm6
movss  0x28(%rbx),%xmm7
cvtss2sd %xmm7,%xmm7
movss  0x38(%rbx),%xmm8
cvtss2sd %xmm8,%xmm8
movsd  %xmm8,(%rsp)
mov    $0x8,%al
call   1040 <matrix4Cofactor@plt>
mov    %eax,%r12d
movss  (%rbx),%xmm0
movss  0x4(%rbx),%xmm3
cvtss2sd %xmm0,%xmm0
movss  0x10(%rbx),%xmm1
cvtss2sd %xmm1,%xmm1
movss  0x30(%rbx),%xmm2
cvtss2sd %xmm2,%xmm2
cvtss2sd %xmm3,%xmm3
movss  0x14(%rbx),%xmm4
cvtss2sd %xmm4,%xmm4
movss  0x34(%rbx),%xmm5
cvtss2sd %xmm5,%xmm5
movss  0x8(%rbx),%xmm6
cvtss2sd %xmm6,%xmm6
movss  0x18(%rbx),%xmm7
cvtss2sd %xmm7,%xmm7
movss  0x38(%rbx),%xmm8
cvtss2sd %xmm8,%xmm8
movsd  %xmm8,(%rsp)
mov    $0x8,%al
call   1040 <matrix4Cofactor@plt>
mov    %eax,%ebp
movss  (%rbx),%xmm0
movss  0x4(%rbx),%xmm3
cvtss2sd %xmm0,%xmm0
movss  0x10(%rbx),%xmm1
cvtss2sd %xmm1,%xmm1
movss  0x20(%rbx),%xmm2
cvtss2sd %xmm2,%xmm2
cvtss2sd %xmm3,%xmm3
movss  0x14(%rbx),%xmm4
cvtss2sd %xmm4,%xmm4
movss  0x24(%rbx),%xmm5
cvtss2sd %xmm5,%xmm5
movss  0x8(%rbx),%xmm6
cvtss2sd %xmm6,%xmm6
movss  0x18(%rbx),%xmm7
cvtss2sd %xmm7,%xmm7
movss  0x28(%rbx),%xmm8
cvtss2sd %xmm8,%xmm8
movsd  %xmm8,(%rsp)
mov    $0x8,%al
call   1040 <matrix4Cofactor@plt>
movd   %r15d,%xmm0
movd   %r12d,%xmm1
punpckldq %xmm1,%xmm0
movd   %ebp,%xmm1
movd   %eax,%xmm2
punpckldq %xmm2,%xmm1
punpcklqdq %xmm1,%xmm0
cvtdq2ps %xmm0,%xmm0
movss  0x7ec(%rip),%xmm1
divss  0x60(%rsp),%xmm1
movaps 0x7cb(%rip),%xmm2
xorps  %xmm1,%xmm2
movaps %xmm1,%xmm3
unpcklps 0x20(%rsp),%xmm3
movaps 0x70(%rsp),%xmm4
movlhps %xmm1,%xmm4
shufps $0x24,%xmm4,%xmm3
movaps 0x10(%rsp),%xmm5
unpcklps %xmm2,%xmm5
movaps 0x30(%rsp),%xmm4
unpcklps %xmm2,%xmm4
movlhps %xmm5,%xmm4
mulps  %xmm3,%xmm4
movups %xmm4,(%r14)
movaps %xmm2,%xmm3
unpcklps %xmm1,%xmm3
movlhps %xmm3,%xmm3
movaps 0x50(%rsp),%xmm4
mulps  %xmm3,%xmm4
movups %xmm4,0x10(%r14)
unpcklps %xmm2,%xmm1
movlhps %xmm1,%xmm1
mulps  0x40(%rsp),%xmm1
movups %xmm1,0x20(%r14)
mulps  %xmm0,%xmm3
movups %xmm3,0x30(%r14)
add    $0x80,%rsp
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
ret
mov    %r14,%rdi
xor    %eax,%eax
add    $0x80,%rsp
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
jmp    1030 <matrix4Identity@plt>

LLVM IR (-O0):
define void @matrix4Invert(float* %0, float* %1) {
%3 = alloca float*
%4 = alloca float*
%5 = alloca float
%6 = alloca float
%7 = alloca float
%8 = alloca float
%9 = alloca float
%10 = alloca float
%11 = alloca float
%12 = alloca float
%13 = alloca float
%14 = alloca float
%15 = alloca float
%16 = alloca float
%17 = alloca float
%18 = alloca float
%19 = alloca float
%20 = alloca float
%21 = alloca float
%22 = alloca float
store float* %0, float** %3
store float* %1, float** %4
%23 = load float*, float** %4
%24 = getelementptr inbounds float, float* %23, i64 5
%25 = load float, float* %24
%26 = fpext float %25 to double
%27 = load float*, float** %4
%28 = getelementptr inbounds float, float* %27, i64 9
%29 = load float, float* %28
%30 = fpext float %29 to double
%31 = load float*, float** %4
%32 = getelementptr inbounds float, float* %31, i64 13
%33 = load float, float* %32
%34 = fpext float %33 to double
%35 = load float*, float** %4
%36 = getelementptr inbounds float, float* %35, i64 6
%37 = load float, float* %36
%38 = fpext float %37 to double
%39 = load float*, float** %4
%40 = getelementptr inbounds float, float* %39, i64 10
%41 = load float, float* %40
%42 = fpext float %41 to double
%43 = load float*, float** %4
%44 = getelementptr inbounds float, float* %43, i64 14
%45 = load float, float* %44
%46 = fpext float %45 to double
%47 = load float*, float** %4
%48 = getelementptr inbounds float, float* %47, i64 7
%49 = load float, float* %48
%50 = fpext float %49 to double
%51 = load float*, float** %4
%52 = getelementptr inbounds float, float* %51, i64 11
%53 = load float, float* %52
%54 = fpext float %53 to double
%55 = load float*, float** %4
%56 = getelementptr inbounds float, float* %55, i64 15
%57 = load float, float* %56
%58 = fpext float %57 to double
%59 = call i32 (double, double, double, double, double, double, double, double, double, ...) bitcast (i32 (...)* @matrix4Cofactor to i32 (double, double, double, double, double, double, double, double, double, ...)*)(double %26, double %30, double %34, double %38, double %42, double %46, double %50, double %54, double %58)
%60 = sitofp i32 %59 to float
store float %60, float* %5
%61 = load float*, float** %4
%62 = getelementptr inbounds float, float* %61, i64 1
%63 = load float, float* %62
%64 = fpext float %63 to double
%65 = load float*, float** %4
%66 = getelementptr inbounds float, float* %65, i64 9
%67 = load float, float* %66
%68 = fpext float %67 to double
%69 = load float*, float** %4
%70 = getelementptr inbounds float, float* %69, i64 13
%71 = load float, float* %70
%72 = fpext float %71 to double
%73 = load float*, float** %4
%74 = getelementptr inbounds float, float* %73, i64 2
%75 = load float, float* %74
%76 = fpext float %75 to double
%77 = load float*, float** %4
%78 = getelementptr inbounds float, float* %77, i64 10
%79 = load float, float* %78
%80 = fpext float %79 to double
%81 = load float*, float** %4
%82 = getelementptr inbounds float, float* %81, i64 14
%83 = load float, float* %82
%84 = fpext float %83 to double
%85 = load float*, float** %4
%86 = getelementptr inbounds float, float* %85, i64 3
%87 = load float, float* %86
%88 = fpext float %87 to double
%89 = load float*, float** %4
%90 = getelementptr inbounds float, float* %89, i64 11
%91 = load float, float* %90
%92 = fpext float %91 to double
%93 = load float*, float** %4
%94 = getelementptr inbounds float, float* %93, i64 15
%95 = load float, float* %94
%96 = fpext float %95 to double
%97 = call i32 (double, double, double, double, double, double, double, double, double, ...) bitcast (i32 (...)* @matrix4Cofactor to i32 (double, double, double, double, double, double, double, double, double, ...)*)(double %64, double %68, double %72, double %76, double %80, double %84, double %88, double %92, double %96)
%98 = sitofp i32 %97 to float
store float %98, float* %6
%99 = load float*, float** %4
%100 = getelementptr inbounds float, float* %99, i64 1
%101 = load float, float* %100
%102 = fpext float %101 to double
%103 = load float*, float** %4
%104 = getelementptr inbounds float, float* %103, i64 5
%105 = load float, float* %104
%106 = fpext float %105 to double
%107 = load float*, float** %4
%108 = getelementptr inbounds float, float* %107, i64 13
%109 = load float, float* %108
%110 = fpext float %109 to double
%111 = load float*, float** %4
%112 = getelementptr inbounds float, float* %111, i64 2
%113 = load float, float* %112
%114 = fpext float %113 to double
%115 = load float*, float** %4
%116 = getelementptr inbounds float, float* %115, i64 6
%117 = load float, float* %116
%118 = fpext float %117 to double
%119 = load float*, float** %4
%120 = getelementptr inbounds float, float* %119, i64 14
%121 = load float, float* %120
%122 = fpext float %121 to double
%123 = load float*, float** %4
%124 = getelementptr inbounds float, float* %123, i64 3
%125 = load float, float* %124
%126 = fpext float %125 to double
%127 = load float*, float** %4
%128 = getelementptr inbounds float, float* %127, i64 7
%129 = load float, float* %128
%130 = fpext float %129 to double
%131 = load float*, float** %4
%132 = getelementptr inbounds float, float* %131, i64 15
%133 = load float, float* %132
%134 = fpext float %133 to double
%135 = call i32 (double, double, double, double, double, double, double, double, double, ...) bitcast (i32 (...)* @matrix4Cofactor to i32 (double, double, double, double, double, double, double, double, double, ...)*)(double %102, double %106, double %110, double %114, double %118, double %122, double %126, double %130, double %134)
%136 = sitofp i32 %135 to float
store float %136, float* %7
%137 = load float*, float** %4
%138 = getelementptr inbounds float, float* %137, i64 1
%139 = load float, float* %138
%140 = fpext float %139 to double
%141 = load float*, float** %4
%142 = getelementptr inbounds float, float* %141, i64 5
%143 = load float, float* %142
%144 = fpext float %143 to double
%145 = load float*, float** %4
%146 = getelementptr inbounds float, float* %145, i64 9
%147 = load float, float* %146
%148 = fpext float %147 to double
%149 = load float*, float** %4
%150 = getelementptr inbounds float, float* %149, i64 2
%151 = load float, float* %150
%152 = fpext float %151 to double
%153 = load float*, float** %4
%154 = getelementptr inbounds float, float* %153, i64 6
%155 = load float, float* %154
%156 = fpext float %155 to double
%157 = load float*, float** %4
%158 = getelementptr inbounds float, float* %157, i64 10
%159 = load float, float* %158
%160 = fpext float %159 to double
%161 = load float*, float** %4
%162 = getelementptr inbounds float, float* %161, i64 3
%163 = load float, float* %162
%164 = fpext float %163 to double
%165 = load float*, float** %4
%166 = getelementptr inbounds float, float* %165, i64 7
%167 = load float, float* %166
%168 = fpext float %167 to double
%169 = load float*, float** %4
%170 = getelementptr inbounds float, float* %169, i64 11
%171 = load float, float* %170
%172 = fpext float %171 to double
%173 = call i32 (double, double, double, double, double, double, double, double, double, ...) bitcast (i32 (...)* @matrix4Cofactor to i32 (double, double, double, double, double, double, double, double, double, ...)*)(double %140, double %144, double %148, double %152, double %156, double %160, double %164, double %168, double %172)
%174 = sitofp i32 %173 to float
store float %174, float* %8
%175 = load float*, float** %4
%176 = getelementptr inbounds float, float* %175, i64 0
%177 = load float, float* %176
%178 = load float, float* %5
%179 = load float*, float** %4
%180 = getelementptr inbounds float, float* %179, i64 4
%181 = load float, float* %180
%182 = load float, float* %6
%183 = fmul float %181, %182
%184 = fneg float %183
%185 = call float @llvm.fmuladd.f32(float %177, float %178, float %184)
%186 = load float*, float** %4
%187 = getelementptr inbounds float, float* %186, i64 8
%188 = load float, float* %187
%189 = load float, float* %7
%190 = call float @llvm.fmuladd.f32(float %188, float %189, float %185)
%191 = load float*, float** %4
%192 = getelementptr inbounds float, float* %191, i64 12
%193 = load float, float* %192
%194 = load float, float* %8
%195 = fneg float %193
%196 = call float @llvm.fmuladd.f32(float %195, float %194, float %190)
store float %196, float* %9
%197 = load float, float* %9
%198 = fpext float %197 to double
%199 = call double @llvm.fabs.f64(double %198)
%200 = fcmp ole double %199, 0x3EE4F8B580000000
br i1 %200, label %201, label %204
201: ; preds = %2
%202 = load float*, float** %3
%203 = call i32 (float*, ...) bitcast (i32 (...)* @matrix4Identity to i32 (float*, ...)*)(float* %202)
br label %751
204: ; preds = %2
%205 = load float*, float** %4
%206 = getelementptr inbounds float, float* %205, i64 4
%207 = load float, float* %206
%208 = fpext float %207 to double
%209 = load float*, float** %4
%210 = getelementptr inbounds float, float* %209, i64 8
%211 = load float, float* %210
%212 = fpext float %211 to double
%213 = load float*, float** %4
%214 = getelementptr inbounds float, float* %213, i64 12
%215 = load float, float* %214
%216 = fpext float %215 to double
%217 = load float*, float** %4
%218 = getelementptr inbounds float, float* %217, i64 6
%219 = load float, float* %218
%220 = fpext float %219 to double
%221 = load float*, float** %4
%222 = getelementptr inbounds float, float* %221, i64 10
%223 = load float, float* %222
%224 = fpext float %223 to double
%225 = load float*, float** %4
%226 = getelementptr inbounds float, float* %225, i64 14
%227 = load float, float* %226
%228 = fpext float %227 to double
%229 = load float*, float** %4
%230 = getelementptr inbounds float, float* %229, i64 7
%231 = load float, float* %230
%232 = fpext float %231 to double
%233 = load float*, float** %4
%234 = getelementptr inbounds float, float* %233, i64 11
%235 = load float, float* %234
%236 = fpext float %235 to double
%237 = load float*, float** %4
%238 = getelementptr inbounds float, float* %237, i64 15
%239 = load float, float* %238
%240 = fpext float %239 to double
%241 = call i32 (double, double, double, double, double, double, double, double, double, ...) bitcast (i32 (...)* @matrix4Cofactor to i32 (double, double, double, double, double, double, double, double, double, ...)*)(double %208, double %212, double %216, double %220, double %224, double %228, double %232, double %236, double %240)
%242 = sitofp i32 %241 to float
store float %242, float* %10
%243 = load float*, float** %4
%244 = getelementptr inbounds float, float* %243, i64 0
%245 = load float, float* %244
%246 = fpext float %245 to double
%247 = load float*, float** %4
%248 = getelementptr inbounds float, float* %247, i64 8
%249 = load float, float* %248
%250 = fpext float %249 to double
%251 = load float*, float** %4
%252 = getelementptr inbounds float, float* %251, i64 12
%253 = load float, float* %252
%254 = fpext float %253 to double
%255 = load float*, float** %4
%256 = getelementptr inbounds float, float* %255, i64 2
%257 = load float, float* %256
%258 = fpext float %257 to double
%259 = load float*, float** %4
%260 = getelementptr inbounds float, float* %259, i64 10
%261 = load float, float* %260
%262 = fpext float %261 to double
%263 = load float*, float** %4
%264 = getelementptr inbounds float, float* %263, i64 14
%265 = load float, float* %264
%266 = fpext float %265 to double
%267 = load float*, float** %4
%268 = getelementptr inbounds float, float* %267, i64 3
%269 = load float, float* %268
%270 = fpext float %269 to double
%271 = load float*, float** %4
%272 = getelementptr inbounds float, float* %271, i64 11
%273 = load float, float* %272
%274 = fpext float %273 to double
%275 = load float*, float** %4
%276 = getelementptr inbounds float, float* %275, i64 15
%277 = load float, float* %276
%278 = fpext float %277 to double
%279 = call i32 (double, double, double, double, double, double, double, double, double, ...) bitcast (i32 (...)* @matrix4Cofactor to i32 (double, double, double, double, double, double, double, double, double, ...)*)(double %246, double %250, double %254, double %258, double %262, double %266, double %270, double %274, double %278)
%280 = sitofp i32 %279 to float
store float %280, float* %11
%281 = load float*, float** %4
%282 = getelementptr inbounds float, float* %281, i64 0
%283 = load float, float* %282
%284 = fpext float %283 to double
%285 = load float*, float** %4
%286 = getelementptr inbounds float, float* %285, i64 4
%287 = load float, float* %286
%288 = fpext float %287 to double
%289 = load float*, float** %4
%290 = getelementptr inbounds float, float* %289, i64 12
%291 = load float, float* %290
%292 = fpext float %291 to double
%293 = load float*, float** %4
%294 = getelementptr inbounds float, float* %293, i64 2
%295 = load float, float* %294
%296 = fpext float %295 to double
%297 = load float*, float** %4
%298 = getelementptr inbounds float, float* %297, i64 6
%299 = load float, float* %298
%300 = fpext float %299 to double
%301 = load float*, float** %4
%302 = getelementptr inbounds float, float* %301, i64 14
%303 = load float, float* %302
%304 = fpext float %303 to double
%305 = load float*, float** %4
%306 = getelementptr inbounds float, float* %305, i64 3
%307 = load float, float* %306
%308 = fpext float %307 to double
%309 = load float*, float** %4
%310 = getelementptr inbounds float, float* %309, i64 7
%311 = load float, float* %310
%312 = fpext float %311 to double
%313 = load float*, float** %4
%314 = getelementptr inbounds float, float* %313, i64 15
%315 = load float, float* %314
%316 = fpext float %315 to double
%317 = call i32 (double, double, double, double, double, double, double, double, double, ...) bitcast (i32 (...)* @matrix4Cofactor to i32 (double, double, double, double, double, double, double, double, double, ...)*)(double %284, double %288, double %292, double %296, double %300, double %304, double %308, double %312, double %316)
%318 = sitofp i32 %317 to float
store float %318, float* %12
%319 = load float*, float** %4
%320 = getelementptr inbounds float, float* %319, i64 0
%321 = load float, float* %320
%322 = fpext float %321 to double
%323 = load float*, float** %4
%324 = getelementptr inbounds float, float* %323, i64 4
%325 = load float, float* %324
%326 = fpext float %325 to double
%327 = load float*, float** %4
%328 = getelementptr inbounds float, float* %327, i64 8
%329 = load float, float* %328
%330 = fpext float %329 to double
%331 = load float*, float** %4
%332 = getelementptr inbounds float, float* %331, i64 2
%333 = load float, float* %332
%334 = fpext float %333 to double
%335 = load float*, float** %4
%336 = getelementptr inbounds float, float* %335, i64 6
%337 = load float, float* %336
%338 = fpext float %337 to double
%339 = load float*, float** %4
%340 = getelementptr inbounds float, float* %339, i64 10
%341 = load float, float* %340
%342 = fpext float %341 to double
%343 = load float*, float** %4
%344 = getelementptr inbounds float, float* %343, i64 3
%345 = load float, float* %344
%346 = fpext float %345 to double
%347 = load float*, float** %4
%348 = getelementptr inbounds float, float* %347, i64 7
%349 = load float, float* %348
%350 = fpext float %349 to double
%351 = load float*, float** %4
%352 = getelementptr inbounds float, float* %351, i64 11
%353 = load float, float* %352
%354 = fpext float %353 to double
%355 = call i32 (double, double, double, double, double, double, double, double, double, ...) bitcast (i32 (...)* @matrix4Cofactor to i32 (double, double, double, double, double, double, double, double, double, ...)*)(double %322, double %326, double %330, double %334, double %338, double %342, double %346, double %350, double %354)
%356 = sitofp i32 %355 to float
store float %356, float* %13
%357 = load float*, float** %4
%358 = getelementptr inbounds float, float* %357, i64 4
%359 = load float, float* %358
%360 = fpext float %359 to double
%361 = load float*, float** %4
%362 = getelementptr inbounds float, float* %361, i64 8
%363 = load float, float* %362
%364 = fpext float %363 to double
%365 = load float*, float** %4
%366 = getelementptr inbounds float, float* %365, i64 12
%367 = load float, float* %366
%368 = fpext float %367 to double
%369 = load float*, float** %4
%370 = getelementptr inbounds float, float* %369, i64 5
%371 = load float, float* %370
%372 = fpext float %371 to double
%373 = load float*, float** %4
%374 = getelementptr inbounds float, float* %373, i64 9
%375 = load float, float* %374
%376 = fpext float %375 to double
%377 = load float*, float** %4
%378 = getelementptr inbounds float, float* %377, i64 13
%379 = load float, float* %378
%380 = fpext float %379 to double
%381 = load float*, float** %4
%382 = getelementptr inbounds float, float* %381, i64 7
%383 = load float, float* %382
%384 = fpext float %383 to double
%385 = load float*, float** %4
%386 = getelementptr inbounds float, float* %385, i64 11
%387 = load float, float* %386
%388 = fpext float %387 to double
%389 = load float*, float** %4
%390 = getelementptr inbounds float, float* %389, i64 15
%391 = load float, float* %390
%392 = fpext float %391 to double
%393 = call i32 (double, double, double, double, double, double, double, double, double, ...) bitcast (i32 (...)* @matrix4Cofactor to i32 (double, double, double, double, double, double, double, double, double, ...)*)(double %360, double %364, double %368, double %372, double %376, double %380, double %384, double %388, double %392)
%394 = sitofp i32 %393 to float
store float %394, float* %14
%395 = load float*, float** %4
%396 = getelementptr inbounds float, float* %395, i64 0
%397 = load float, float* %396
%398 = fpext float %397 to double
%399 = load float*, float** %4
%400 = getelementptr inbounds float, float* %399, i64 8
%401 = load float, float* %400
%402 = fpext float %401 to double
%403 = load float*, float** %4
%404 = getelementptr inbounds float, float* %403, i64 12
%405 = load float, float* %404
%406 = fpext float %405 to double
%407 = load float*, float** %4
%408 = getelementptr inbounds float, float* %407, i64 1
%409 = load float, float* %408
%410 = fpext float %409 to double
%411 = load float*, float** %4
%412 = getelementptr inbounds float, float* %411, i64 9
%413 = load float, float* %412
%414 = fpext float %413 to double
%415 = load float*, float** %4
%416 = getelementptr inbounds float, float* %415, i64 13
%417 = load float, float* %416
%418 = fpext float %417 to double
%419 = load float*, float** %4
%420 = getelementptr inbounds float, float* %419, i64 3
%421 = load float, float* %420
%422 = fpext float %421 to double
%423 = load float*, float** %4
%424 = getelementptr inbounds float, float* %423, i64 11
%425 = load float, float* %424
%426 = fpext float %425 to double
%427 = load float*, float** %4
%428 = getelementptr inbounds float, float* %427, i64 15
%429 = load float, float* %428
%430 = fpext float %429 to double
%431 = call i32 (double, double, double, double, double, double, double, double, double, ...) bitcast (i32 (...)* @matrix4Cofactor to i32 (double, double, double, double, double, double, double, double, double, ...)*)(double %398, double %402, double %406, double %410, double %414, double %418, double %422, double %426, double %430)
%432 = sitofp i32 %431 to float
store float %432, float* %15
%433 = load float*, float** %4
%434 = getelementptr inbounds float, float* %433, i64 0
%435 = load float, float* %434
%436 = fpext float %435 to double
%437 = load float*, float** %4
%438 = getelementptr inbounds float, float* %437, i64 4
%439 = load float, float* %438
%440 = fpext float %439 to double
%441 = load float*, float** %4
%442 = getelementptr inbounds float, float* %441, i64 12
%443 = load float, float* %442
%444 = fpext float %443 to double
%445 = load float*, float** %4
%446 = getelementptr inbounds float, float* %445, i64 1
%447 = load float, float* %446
%448 = fpext float %447 to double
%449 = load float*, float** %4
%450 = getelementptr inbounds float, float* %449, i64 5
%451 = load float, float* %450
%452 = fpext float %451 to double
%453 = load float*, float** %4
%454 = getelementptr inbounds float, float* %453, i64 13
%455 = load float, float* %454
%456 = fpext float %455 to double
%457 = load float*, float** %4
%458 = getelementptr inbounds float, float* %457, i64 3
%459 = load float, float* %458
%460 = fpext float %459 to double
%461 = load float*, float** %4
%462 = getelementptr inbounds float, float* %461, i64 7
%463 = load float, float* %462
%464 = fpext float %463 to double
%465 = load float*, float** %4
%466 = getelementptr inbounds float, float* %465, i64 15
%467 = load float, float* %466
%468 = fpext float %467 to double
%469 = call i32 (double, double, double, double, double, double, double, double, double, ...) bitcast (i32 (...)* @matrix4Cofactor to i32 (double, double, double, double, double, double, double, double, double, ...)*)(double %436, double %440, double %444, double %448, double %452, double %456, double %460, double %464, double %468)
%470 = sitofp i32 %469 to float
store float %470, float* %16
%471 = load float*, float** %4
%472 = getelementptr inbounds float, float* %471, i64 0
%473 = load float, float* %472
%474 = fpext float %473 to double
%475 = load float*, float** %4
%476 = getelementptr inbounds float, float* %475, i64 4
%477 = load float, float* %476
%478 = fpext float %477 to double
%479 = load float*, float** %4
%480 = getelementptr inbounds float, float* %479, i64 8
%481 = load float, float* %480
%482 = fpext float %481 to double
%483 = load float*, float** %4
%484 = getelementptr inbounds float, float* %483, i64 1
%485 = load float, float* %484
%486 = fpext float %485 to double
%487 = load float*, float** %4
%488 = getelementptr inbounds float, float* %487, i64 5
%489 = load float, float* %488
%490 = fpext float %489 to double
%491 = load float*, float** %4
%492 = getelementptr inbounds float, float* %491, i64 9
%493 = load float, float* %492
%494 = fpext float %493 to double
%495 = load float*, float** %4
%496 = getelementptr inbounds float, float* %495, i64 3
%497 = load float, float* %496
%498 = fpext float %497 to double
%499 = load float*, float** %4
%500 = getelementptr inbounds float, float* %499, i64 7
%501 = load float, float* %500
%502 = fpext float %501 to double
%503 = load float*, float** %4
%504 = getelementptr inbounds float, float* %503, i64 11
%505 = load float, float* %504
%506 = fpext float %505 to double
%507 = call i32 (double, double, double, double, double, double, double, double, double, ...) bitcast (i32 (...)* @matrix4Cofactor to i32 (double, double, double, double, double, double, double, double, double, ...)*)(double %474, double %478, double %482, double %486, double %490, double %494, double %498, double %502, double %506)
%508 = sitofp i32 %507 to float
store float %508, float* %17
%509 = load float*, float** %4
%510 = getelementptr inbounds float, float* %509, i64 4
%511 = load float, float* %510
%512 = fpext float %511 to double
%513 = load float*, float** %4
%514 = getelementptr inbounds float, float* %513, i64 8
%515 = load float, float* %514
%516 = fpext float %515 to double
%517 = load float*, float** %4
%518 = getelementptr inbounds float, float* %517, i64 12
%519 = load float, float* %518
%520 = fpext float %519 to double
%521 = load float*, float** %4
%522 = getelementptr inbounds float, float* %521, i64 5
%523 = load float, float* %522
%524 = fpext float %523 to double
%525 = load float*, float** %4
%526 = getelementptr inbounds float, float* %525, i64 9
%527 = load float, float* %526
%528 = fpext float %527 to double
%529 = load float*, float** %4
%530 = getelementptr inbounds float, float* %529, i64 13
%531 = load float, float* %530
%532 = fpext float %531 to double
%533 = load float*, float** %4
%534 = getelementptr inbounds float, float* %533, i64 6
%535 = load float, float* %534
%536 = fpext float %535 to double
%537 = load float*, float** %4
%538 = getelementptr inbounds float, float* %537, i64 10
%539 = load float, float* %538
%540 = fpext float %539 to double
%541 = load float*, float** %4
%542 = getelementptr inbounds float, float* %541, i64 14
%543 = load float, float* %542
%544 = fpext float %543 to double
%545 = call i32 (double, double, double, double, double, double, double, double, double, ...) bitcast (i32 (...)* @matrix4Cofactor to i32 (double, double, double, double, double, double, double, double, double, ...)*)(double %512, double %516, double %520, double %524, double %528, double %532, double %536, double %540, double %544)
%546 = sitofp i32 %545 to float
store float %546, float* %18
%547 = load float*, float** %4
%548 = getelementptr inbounds float, float* %547, i64 0
%549 = load float, float* %548
%550 = fpext float %549 to double
%551 = load float*, float** %4
%552 = getelementptr inbounds float, float* %551, i64 8
%553 = load float, float* %552
%554 = fpext float %553 to double
%555 = load float*, float** %4
%556 = getelementptr inbounds float, float* %555, i64 12
%557 = load float, float* %556
%558 = fpext float %557 to double
%559 = load float*, float** %4
%560 = getelementptr inbounds float, float* %559, i64 1
%561 = load float, float* %560
%562 = fpext float %561 to double
%563 = load float*, float** %4
%564 = getelementptr inbounds float, float* %563, i64 9
%565 = load float, float* %564
%566 = fpext float %565 to double
%567 = load float*, float** %4
%568 = getelementptr inbounds float, float* %567, i64 13
%569 = load float, float* %568
%570 = fpext float %569 to double
%571 = load float*, float** %4
%572 = getelementptr inbounds float, float* %571, i64 2
%573 = load float, float* %572
%574 = fpext float %573 to double
%575 = load float*, float** %4
%576 = getelementptr inbounds float, float* %575, i64 10
%577 = load float, float* %576
%578 = fpext float %577 to double
%579 = load float*, float** %4
%580 = getelementptr inbounds float, float* %579, i64 14
%581 = load float, float* %580
%582 = fpext float %581 to double
%583 = call i32 (double, double, double, double, double, double, double, double, double, ...) bitcast (i32 (...)* @matrix4Cofactor to i32 (double, double, double, double, double, double, double, double, double, ...)*)(double %550, double %554, double %558, double %562, double %566, double %570, double %574, double %578, double %582)
%584 = sitofp i32 %583 to float
store float %584, float* %19
%585 = load float*, float** %4
%586 = getelementptr inbounds float, float* %585, i64 0
%587 = load float, float* %586
%588 = fpext float %587 to double
%589 = load float*, float** %4
%590 = getelementptr inbounds float, float* %589, i64 4
%591 = load float, float* %590
%592 = fpext float %591 to double
%593 = load float*, float** %4
%594 = getelementptr inbounds float, float* %593, i64 12
%595 = load float, float* %594
%596 = fpext float %595 to double
%597 = load float*, float** %4
%598 = getelementptr inbounds float, float* %597, i64 1
%599 = load float, float* %598
%600 = fpext float %599 to double
%601 = load float*, float** %4
%602 = getelementptr inbounds float, float* %601, i64 5
%603 = load float, float* %602
%604 = fpext float %603 to double
%605 = load float*, float** %4
%606 = getelementptr inbounds float, float* %605, i64 13
%607 = load float, float* %606
%608 = fpext float %607 to double
%609 = load float*, float** %4
%610 = getelementptr inbounds float, float* %609, i64 2
%611 = load float, float* %610
%612 = fpext float %611 to double
%613 = load float*, float** %4
%614 = getelementptr inbounds float, float* %613, i64 6
%615 = load float, float* %614
%616 = fpext float %615 to double
%617 = load float*, float** %4
%618 = getelementptr inbounds float, float* %617, i64 14
%619 = load float, float* %618
%620 = fpext float %619 to double
%621 = call i32 (double, double, double, double, double, double, double, double, double, ...) bitcast (i32 (...)* @matrix4Cofactor to i32 (double, double, double, double, double, double, double, double, double, ...)*)(double %588, double %592, double %596, double %600, double %604, double %608, double %612, double %616, double %620)
%622 = sitofp i32 %621 to float
store float %622, float* %20
%623 = load float*, float** %4
%624 = getelementptr inbounds float, float* %623, i64 0
%625 = load float, float* %624
%626 = fpext float %625 to double
%627 = load float*, float** %4
%628 = getelementptr inbounds float, float* %627, i64 4
%629 = load float, float* %628
%630 = fpext float %629 to double
%631 = load float*, float** %4
%632 = getelementptr inbounds float, float* %631, i64 8
%633 = load float, float* %632
%634 = fpext float %633 to double
%635 = load float*, float** %4
%636 = getelementptr inbounds float, float* %635, i64 1
%637 = load float, float* %636
%638 = fpext float %637 to double
%639 = load float*, float** %4
%640 = getelementptr inbounds float, float* %639, i64 5
%641 = load float, float* %640
%642 = fpext float %641 to double
%643 = load float*, float** %4
%644 = getelementptr inbounds float, float* %643, i64 9
%645 = load float, float* %644
%646 = fpext float %645 to double
%647 = load float*, float** %4
%648 = getelementptr inbounds float, float* %647, i64 2
%649 = load float, float* %648
%650 = fpext float %649 to double
%651 = load float*, float** %4
%652 = getelementptr inbounds float, float* %651, i64 6
%653 = load float, float* %652
%654 = fpext float %653 to double
%655 = load float*, float** %4
%656 = getelementptr inbounds float, float* %655, i64 10
%657 = load float, float* %656
%658 = fpext float %657 to double
%659 = call i32 (double, double, double, double, double, double, double, double, double, ...) bitcast (i32 (...)* @matrix4Cofactor to i32 (double, double, double, double, double, double, double, double, double, ...)*)(double %626, double %630, double %634, double %638, double %642, double %646, double %650, double %654, double %658)
%660 = sitofp i32 %659 to float
store float %660, float* %21
%661 = load float, float* %9
%662 = fdiv float 1.000000e+00, %661
store float %662, float* %22
%663 = load float, float* %22
%664 = load float, float* %5
%665 = fmul float %663, %664
%666 = load float*, float** %3
%667 = getelementptr inbounds float, float* %666, i64 0
store float %665, float* %667
%668 = load float, float* %22
%669 = fneg float %668
%670 = load float, float* %10
%671 = fmul float %669, %670
%672 = load float*, float** %3
%673 = getelementptr inbounds float, float* %672, i64 4
store float %671, float* %673
%674 = load float, float* %22
%675 = load float, float* %14
%676 = fmul float %674, %675
%677 = load float*, float** %3
%678 = getelementptr inbounds float, float* %677, i64 8
store float %676, float* %678
%679 = load float, float* %22
%680 = fneg float %679
%681 = load float, float* %18
%682 = fmul float %680, %681
%683 = load float*, float** %3
%684 = getelementptr inbounds float, float* %683, i64 12
store float %682, float* %684
%685 = load float, float* %22
%686 = fneg float %685
%687 = load float, float* %6
%688 = fmul float %686, %687
%689 = load float*, float** %3
%690 = getelementptr inbounds float, float* %689, i64 1
store float %688, float* %690
%691 = load float, float* %22
%692 = load float, float* %11
%693 = fmul float %691, %692
%694 = load float*, float** %3
%695 = getelementptr inbounds float, float* %694, i64 5
store float %693, float* %695
%696 = load float, float* %22
%697 = fneg float %696
%698 = load float, float* %15
%699 = fmul float %697, %698
%700 = load float*, float** %3
%701 = getelementptr inbounds float, float* %700, i64 9
store float %699, float* %701
%702 = load float, float* %22
%703 = load float, float* %19
%704 = fmul float %702, %703
%705 = load float*, float** %3
%706 = getelementptr inbounds float, float* %705, i64 13
store float %704, float* %706
%707 = load float, float* %22
%708 = load float, float* %7
%709 = fmul float %707, %708
%710 = load float*, float** %3
%711 = getelementptr inbounds float, float* %710, i64 2
store float %709, float* %711
%712 = load float, float* %22
%713 = fneg float %712
%714 = load float, float* %12
%715 = fmul float %713, %714
%716 = load float*, float** %3
%717 = getelementptr inbounds float, float* %716, i64 6
store float %715, float* %717
%718 = load float, float* %22
%719 = load float, float* %16
%720 = fmul float %718, %719
%721 = load float*, float** %3
%722 = getelementptr inbounds float, float* %721, i64 10
store float %720, float* %722
%723 = load float, float* %22
%724 = fneg float %723
%725 = load float, float* %20
%726 = fmul float %724, %725
%727 = load float*, float** %3
%728 = getelementptr inbounds float, float* %727, i64 14
store float %726, float* %728
%729 = load float, float* %22
%730 = fneg float %729
%731 = load float, float* %8
%732 = fmul float %730, %731
%733 = load float*, float** %3
%734 = getelementptr inbounds float, float* %733, i64 3
store float %732, float* %734
%735 = load float, float* %22
%736 = load float, float* %13
%737 = fmul float %735, %736
%738 = load float*, float** %3
%739 = getelementptr inbounds float, float* %738, i64 7
store float %737, float* %739
%740 = load float, float* %22
%741 = fneg float %740
%742 = load float, float* %17
%743 = fmul float %741, %742
%744 = load float*, float** %3
%745 = getelementptr inbounds float, float* %744, i64 11
store float %743, float* %745
%746 = load float, float* %22
%747 = load float, float* %21
%748 = fmul float %746, %747
%749 = load float*, float** %3
%750 = getelementptr inbounds float, float* %749, i64 15
store float %748, float* %750
br label %751
751: ; preds = %204, %201
ret void
}

LLVM IR (-O2):
define void @matrix4Invert(float* %0, float* %1) {
%3 = getelementptr inbounds float, float* %1, i64 5
%4 = load float, float* %3
%5 = fpext float %4 to double
%6 = getelementptr inbounds float, float* %1, i64 9
%7 = load float, float* %6
%8 = fpext float %7 to double
%9 = getelementptr inbounds float, float* %1, i64 13
%10 = load float, float* %9
%11 = fpext float %10 to double
%12 = getelementptr inbounds float, float* %1, i64 6
%13 = load float, float* %12
%14 = fpext float %13 to double
%15 = getelementptr inbounds float, float* %1, i64 10
%16 = load float, float* %15
%17 = fpext float %16 to double
%18 = getelementptr inbounds float, float* %1, i64 14
%19 = load float, float* %18
%20 = fpext float %19 to double
%21 = getelementptr inbounds float, float* %1, i64 7
%22 = load float, float* %21
%23 = fpext float %22 to double
%24 = getelementptr inbounds float, float* %1, i64 11
%25 = load float, float* %24
%26 = fpext float %25 to double
%27 = getelementptr inbounds float, float* %1, i64 15
%28 = load float, float* %27
%29 = fpext float %28 to double
%30 = tail call i32 (double, double, double, double, double, double, double, double, double, ...) bitcast (i32 (...)* @matrix4Cofactor to i32 (double, double, double, double, double, double, double, double, double, ...)*)(double %5, double %8, double %11, double %14, double %17, double %20, double %23, double %26, double %29)
%31 = sitofp i32 %30 to float
%32 = getelementptr inbounds float, float* %1, i64 1
%33 = load float, float* %32
%34 = fpext float %33 to double
%35 = load float, float* %6
%36 = fpext float %35 to double
%37 = load float, float* %9
%38 = fpext float %37 to double
%39 = getelementptr inbounds float, float* %1, i64 2
%40 = load float, float* %39
%41 = fpext float %40 to double
%42 = load float, float* %15
%43 = fpext float %42 to double
%44 = load float, float* %18
%45 = fpext float %44 to double
%46 = getelementptr inbounds float, float* %1, i64 3
%47 = load float, float* %46
%48 = fpext float %47 to double
%49 = load float, float* %24
%50 = fpext float %49 to double
%51 = load float, float* %27
%52 = fpext float %51 to double
%53 = tail call i32 (double, double, double, double, double, double, double, double, double, ...) bitcast (i32 (...)* @matrix4Cofactor to i32 (double, double, double, double, double, double, double, double, double, ...)*)(double %34, double %36, double %38, double %41, double %43, double %45, double %48, double %50, double %52)
%54 = sitofp i32 %53 to float
%55 = load float, float* %32
%56 = fpext float %55 to double
%57 = load float, float* %3
%58 = fpext float %57 to double
%59 = load float, float* %9
%60 = fpext float %59 to double
%61 = load float, float* %39
%62 = fpext float %61 to double
%63 = load float, float* %12
%64 = fpext float %63 to double
%65 = load float, float* %18
%66 = fpext float %65 to double
%67 = load float, float* %46
%68 = fpext float %67 to double
%69 = load float, float* %21
%70 = fpext float %69 to double
%71 = load float, float* %27
%72 = fpext float %71 to double
%73 = tail call i32 (double, double, double, double, double, double, double, double, double, ...) bitcast (i32 (...)* @matrix4Cofactor to i32 (double, double, double, double, double, double, double, double, double, ...)*)(double %56, double %58, double %60, double %62, double %64, double %66, double %68, double %70, double %72)
%74 = sitofp i32 %73 to float
%75 = load float, float* %32
%76 = fpext float %75 to double
%77 = load float, float* %3
%78 = fpext float %77 to double
%79 = load float, float* %6
%80 = fpext float %79 to double
%81 = load float, float* %39
%82 = fpext float %81 to double
%83 = load float, float* %12
%84 = fpext float %83 to double
%85 = load float, float* %15
%86 = fpext float %85 to double
%87 = load float, float* %46
%88 = fpext float %87 to double
%89 = load float, float* %21
%90 = fpext float %89 to double
%91 = load float, float* %24
%92 = fpext float %91 to double
%93 = tail call i32 (double, double, double, double, double, double, double, double, double, ...) bitcast (i32 (...)* @matrix4Cofactor to i32 (double, double, double, double, double, double, double, double, double, ...)*)(double %76, double %78, double %80, double %82, double %84, double %86, double %88, double %90, double %92)
%94 = sitofp i32 %93 to float
%95 = load float, float* %1
%96 = getelementptr inbounds float, float* %1, i64 4
%97 = load float, float* %96
%98 = fneg float %97
%99 = fmul float %54, %98
%100 = tail call float @llvm.fmuladd.f32(float %95, float %31, float %99)
%101 = getelementptr inbounds float, float* %1, i64 8
%102 = load float, float* %101
%103 = tail call float @llvm.fmuladd.f32(float %102, float %74, float %100)
%104 = getelementptr inbounds float, float* %1, i64 12
%105 = load float, float* %104
%106 = fneg float %105
%107 = tail call float @llvm.fmuladd.f32(float %106, float %94, float %103)
%108 = tail call float @llvm.fabs.f32(float %107)
%109 = fcmp ugt float %108, 0x3EE4F8B580000000
br i1 %109, label %112, label %110
110: ; preds = %2
%111 = tail call i32 (float*, ...) bitcast (i32 (...)* @matrix4Identity to i32 (float*, ...)*)(float* %0)
br label %379
112: ; preds = %2
%113 = fpext float %97 to double
%114 = fpext float %102 to double
%115 = fpext float %105 to double
%116 = load float, float* %12
%117 = fpext float %116 to double
%118 = load float, float* %15
%119 = fpext float %118 to double
%120 = load float, float* %18
%121 = fpext float %120 to double
%122 = load float, float* %21
%123 = fpext float %122 to double
%124 = load float, float* %24
%125 = fpext float %124 to double
%126 = load float, float* %27
%127 = fpext float %126 to double
%128 = tail call i32 (double, double, double, double, double, double, double, double, double, ...) bitcast (i32 (...)* @matrix4Cofactor to i32 (double, double, double, double, double, double, double, double, double, ...)*)(double %113, double %114, double %115, double %117, double %119, double %121, double %123, double %125, double %127)
%129 = load float, float* %1
%130 = fpext float %129 to double
%131 = load float, float* %101
%132 = fpext float %131 to double
%133 = load float, float* %104
%134 = fpext float %133 to double
%135 = load float, float* %39
%136 = fpext float %135 to double
%137 = load float, float* %15
%138 = fpext float %137 to double
%139 = load float, float* %18
%140 = fpext float %139 to double
%141 = load float, float* %46
%142 = fpext float %141 to double
%143 = load float, float* %24
%144 = fpext float %143 to double
%145 = load float, float* %27
%146 = fpext float %145 to double
%147 = tail call i32 (double, double, double, double, double, double, double, double, double, ...) bitcast (i32 (...)* @matrix4Cofactor to i32 (double, double, double, double, double, double, double, double, double, ...)*)(double %130, double %132, double %134, double %136, double %138, double %140, double %142, double %144, double %146)
%148 = load float, float* %1
%149 = fpext float %148 to double
%150 = load float, float* %96
%151 = fpext float %150 to double
%152 = load float, float* %104
%153 = fpext float %152 to double
%154 = load float, float* %39
%155 = fpext float %154 to double
%156 = load float, float* %12
%157 = fpext float %156 to double
%158 = load float, float* %18
%159 = fpext float %158 to double
%160 = load float, float* %46
%161 = fpext float %160 to double
%162 = load float, float* %21
%163 = fpext float %162 to double
%164 = load float, float* %27
%165 = fpext float %164 to double
%166 = tail call i32 (double, double, double, double, double, double, double, double, double, ...) bitcast (i32 (...)* @matrix4Cofactor to i32 (double, double, double, double, double, double, double, double, double, ...)*)(double %149, double %151, double %153, double %155, double %157, double %159, double %161, double %163, double %165)
%167 = load float, float* %1
%168 = fpext float %167 to double
%169 = load float, float* %96
%170 = fpext float %169 to double
%171 = load float, float* %101
%172 = fpext float %171 to double
%173 = load float, float* %39
%174 = fpext float %173 to double
%175 = load float, float* %12
%176 = fpext float %175 to double
%177 = load float, float* %15
%178 = fpext float %177 to double
%179 = load float, float* %46
%180 = fpext float %179 to double
%181 = load float, float* %21
%182 = fpext float %181 to double
%183 = load float, float* %24
%184 = fpext float %183 to double
%185 = tail call i32 (double, double, double, double, double, double, double, double, double, ...) bitcast (i32 (...)* @matrix4Cofactor to i32 (double, double, double, double, double, double, double, double, double, ...)*)(double %168, double %170, double %172, double %174, double %176, double %178, double %180, double %182, double %184)
%186 = insertelement <4 x i32> poison, i32 %128, i64 0
%187 = insertelement <4 x i32> %186, i32 %147, i64 1
%188 = insertelement <4 x i32> %187, i32 %166, i64 2
%189 = insertelement <4 x i32> %188, i32 %185, i64 3
%190 = sitofp <4 x i32> %189 to <4 x float>
%191 = load float, float* %96
%192 = fpext float %191 to double
%193 = load float, float* %101
%194 = fpext float %193 to double
%195 = load float, float* %104
%196 = fpext float %195 to double
%197 = load float, float* %3
%198 = fpext float %197 to double
%199 = load float, float* %6
%200 = fpext float %199 to double
%201 = load float, float* %9
%202 = fpext float %201 to double
%203 = load float, float* %21
%204 = fpext float %203 to double
%205 = load float, float* %24
%206 = fpext float %205 to double
%207 = load float, float* %27
%208 = fpext float %207 to double
%209 = tail call i32 (double, double, double, double, double, double, double, double, double, ...) bitcast (i32 (...)* @matrix4Cofactor to i32 (double, double, double, double, double, double, double, double, double, ...)*)(double %192, double %194, double %196, double %198, double %200, double %202, double %204, double %206, double %208)
%210 = load float, float* %1
%211 = fpext float %210 to double
%212 = load float, float* %101
%213 = fpext float %212 to double
%214 = load float, float* %104
%215 = fpext float %214 to double
%216 = load float, float* %32
%217 = fpext float %216 to double
%218 = load float, float* %6
%219 = fpext float %218 to double
%220 = load float, float* %9
%221 = fpext float %220 to double
%222 = load float, float* %46
%223 = fpext float %222 to double
%224 = load float, float* %24
%225 = fpext float %224 to double
%226 = load float, float* %27
%227 = fpext float %226 to double
%228 = tail call i32 (double, double, double, double, double, double, double, double, double, ...) bitcast (i32 (...)* @matrix4Cofactor to i32 (double, double, double, double, double, double, double, double, double, ...)*)(double %211, double %213, double %215, double %217, double %219, double %221, double %223, double %225, double %227)
%229 = load float, float* %1
%230 = fpext float %229 to double
%231 = load float, float* %96
%232 = fpext float %231 to double
%233 = load float, float* %104
%234 = fpext float %233 to double
%235 = load float, float* %32
%236 = fpext float %235 to double
%237 = load float, float* %3
%238 = fpext float %237 to double
%239 = load float, float* %9
%240 = fpext float %239 to double
%241 = load float, float* %46
%242 = fpext float %241 to double
%243 = load float, float* %21
%244 = fpext float %243 to double
%245 = load float, float* %27
%246 = fpext float %245 to double
%247 = tail call i32 (double, double, double, double, double, double, double, double, double, ...) bitcast (i32 (...)* @matrix4Cofactor to i32 (double, double, double, double, double, double, double, double, double, ...)*)(double %230, double %232, double %234, double %236, double %238, double %240, double %242, double %244, double %246)
%248 = load float, float* %1
%249 = fpext float %248 to double
%250 = load float, float* %96
%251 = fpext float %250 to double
%252 = load float, float* %101
%253 = fpext float %252 to double
%254 = load float, float* %32
%255 = fpext float %254 to double
%256 = load float, float* %3
%257 = fpext float %256 to double
%258 = load float, float* %6
%259 = fpext float %258 to double
%260 = load float, float* %46
%261 = fpext float %260 to double
%262 = load float, float* %21
%263 = fpext float %262 to double
%264 = load float, float* %24
%265 = fpext float %264 to double
%266 = tail call i32 (double, double, double, double, double, double, double, double, double, ...) bitcast (i32 (...)* @matrix4Cofactor to i32 (double, double, double, double, double, double, double, double, double, ...)*)(double %249, double %251, double %253, double %255, double %257, double %259, double %261, double %263, double %265)
%267 = insertelement <4 x i32> poison, i32 %209, i64 0
%268 = insertelement <4 x i32> %267, i32 %228, i64 1
%269 = insertelement <4 x i32> %268, i32 %247, i64 2
%270 = insertelement <4 x i32> %269, i32 %266, i64 3
%271 = sitofp <4 x i32> %270 to <4 x float>
%272 = load float, float* %96
%273 = fpext float %272 to double
%274 = load float, float* %101
%275 = fpext float %274 to double
%276 = load float, float* %104
%277 = fpext float %276 to double
%278 = load float, float* %3
%279 = fpext float %278 to double
%280 = load float, float* %6
%281 = fpext float %280 to double
%282 = load float, float* %9
%283 = fpext float %282 to double
%284 = load float, float* %12
%285 = fpext float %284 to double
%286 = load float, float* %15
%287 = fpext float %286 to double
%288 = load float, float* %18
%289 = fpext float %288 to double
%290 = tail call i32 (double, double, double, double, double, double, double, double, double, ...) bitcast (i32 (...)* @matrix4Cofactor to i32 (double, double, double, double, double, double, double, double, double, ...)*)(double %273, double %275, double %277, double %279, double %281, double %283, double %285, double %287, double %289)
%291 = load float, float* %1
%292 = fpext float %291 to double
%293 = load float, float* %101
%294 = fpext float %293 to double
%295 = load float, float* %104
%296 = fpext float %295 to double
%297 = load float, float* %32
%298 = fpext float %297 to double
%299 = load float, float* %6
%300 = fpext float %299 to double
%301 = load float, float* %9
%302 = fpext float %301 to double
%303 = load float, float* %39
%304 = fpext float %303 to double
%305 = load float, float* %15
%306 = fpext float %305 to double
%307 = load float, float* %18
%308 = fpext float %307 to double
%309 = tail call i32 (double, double, double, double, double, double, double, double, double, ...) bitcast (i32 (...)* @matrix4Cofactor to i32 (double, double, double, double, double, double, double, double, double, ...)*)(double %292, double %294, double %296, double %298, double %300, double %302, double %304, double %306, double %308)
%310 = load float, float* %1
%311 = fpext float %310 to double
%312 = load float, float* %96
%313 = fpext float %312 to double
%314 = load float, float* %104
%315 = fpext float %314 to double
%316 = load float, float* %32
%317 = fpext float %316 to double
%318 = load float, float* %3
%319 = fpext float %318 to double
%320 = load float, float* %9
%321 = fpext float %320 to double
%322 = load float, float* %39
%323 = fpext float %322 to double
%324 = load float, float* %12
%325 = fpext float %324 to double
%326 = load float, float* %18
%327 = fpext float %326 to double
%328 = tail call i32 (double, double, double, double, double, double, double, double, double, ...) bitcast (i32 (...)* @matrix4Cofactor to i32 (double, double, double, double, double, double, double, double, double, ...)*)(double %311, double %313, double %315, double %317, double %319, double %321, double %323, double %325, double %327)
%329 = load float, float* %1
%330 = fpext float %329 to double
%331 = load float, float* %96
%332 = fpext float %331 to double
%333 = load float, float* %101
%334 = fpext float %333 to double
%335 = load float, float* %32
%336 = fpext float %335 to double
%337 = load float, float* %3
%338 = fpext float %337 to double
%339 = load float, float* %6
%340 = fpext float %339 to double
%341 = load float, float* %39
%342 = fpext float %341 to double
%343 = load float, float* %12
%344 = fpext float %343 to double
%345 = load float, float* %15
%346 = fpext float %345 to double
%347 = tail call i32 (double, double, double, double, double, double, double, double, double, ...) bitcast (i32 (...)* @matrix4Cofactor to i32 (double, double, double, double, double, double, double, double, double, ...)*)(double %330, double %332, double %334, double %336, double %338, double %340, double %342, double %344, double %346)
%348 = insertelement <4 x i32> poison, i32 %290, i64 0
%349 = insertelement <4 x i32> %348, i32 %309, i64 1
%350 = insertelement <4 x i32> %349, i32 %328, i64 2
%351 = insertelement <4 x i32> %350, i32 %347, i64 3
%352 = sitofp <4 x i32> %351 to <4 x float>
%353 = fdiv float 1.000000e+00, %107
%354 = fneg float %353
%355 = getelementptr inbounds float, float* %0, i64 4
%356 = getelementptr inbounds float, float* %0, i64 8
%357 = getelementptr inbounds float, float* %0, i64 12
%358 = insertelement <4 x float> poison, float %353, i64 0
%359 = insertelement <4 x float> %358, float %54, i64 1
%360 = insertelement <4 x float> %359, float %353, i64 2
%361 = insertelement <4 x float> %360, float %94, i64 3
%362 = insertelement <4 x float> poison, float %31, i64 0
%363 = insertelement <4 x float> %362, float %354, i64 1
%364 = insertelement <4 x float> %363, float %74, i64 2
%365 = insertelement <4 x float> %364, float %354, i64 3
%366 = fmul <4 x float> %361, %365
%367 = bitcast float* %0 to <4 x float>*
store <4 x float> %366, <4 x float>* %367
%368 = insertelement <4 x float> poison, float %354, i64 0
%369 = insertelement <4 x float> %368, float %353, i64 1
%370 = shufflevector <4 x float> %369, <4 x float> poison, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
%371 = fmul <4 x float> %370, %190
%372 = bitcast float* %355 to <4 x float>*
store <4 x float> %371, <4 x float>* %372
%373 = insertelement <4 x float> %358, float %354, i64 1
%374 = shufflevector <4 x float> %373, <4 x float> poison, <4 x i32> <i32 0, i32 1, i32 0, i32 1>
%375 = fmul <4 x float> %374, %271
%376 = bitcast float* %356 to <4 x float>*
store <4 x float> %375, <4 x float>* %376
%377 = fmul <4 x float> %370, %352
%378 = bitcast float* %357 to <4 x float>*
store <4 x float> %377, <4 x float>* %378
br label %379
379: ; preds = %112, %110
ret void
}