// File: /workspace/github_cpp_makefile_star2_O2/Luthaf[P]zeopp/geometry.cc
// Function: invertMatrix(double (*) [3], double (*) [3])
void invertMatrix(double matrix [3][3], double newMatrix[3][3]){
    double determinant = calcDeterminant(matrix);
    if(determinant == 0){
        cerr << "Determinant of provided matrix is 0. Matrix is not invertible."
        << "\n" << "Exiting ..." << "\n";
        exit(1);
    }
    
    double invDet = 1/determinant;
    newMatrix[0][0] = invDet*   (matrix[2][2]*matrix[1][1]-matrix[2][1]*matrix[1][2]);
    newMatrix[0][1] = invDet*-1*(matrix[2][2]*matrix[0][1]-matrix[2][1]*matrix[0][2]);
    newMatrix[0][2] = invDet*   (matrix[1][2]*matrix[0][1]-matrix[1][1]*matrix[0][2]);
    newMatrix[1][0] = invDet*-1*(matrix[2][2]*matrix[1][0]-matrix[2][0]*matrix[1][2]);
    newMatrix[1][1] = invDet*   (matrix[2][2]*matrix[0][0]-matrix[2][0]*matrix[0][2]);
    newMatrix[1][2] = invDet*-1*(matrix[1][2]*matrix[0][0]-matrix[1][0]*matrix[0][2]);
    newMatrix[2][0] = invDet*   (matrix[2][1]*matrix[1][0]-matrix[2][0]*matrix[1][1]);
    newMatrix[2][1] = invDet*-1*(matrix[2][1]*matrix[0][0]-matrix[2][0]*matrix[0][1]);
    newMatrix[2][2] = invDet*   (matrix[1][1]*matrix[0][0]-matrix[1][0]*matrix[0][1]);
}

// Assembly:
pushq %r14
pushq %rbx
pushq %rax
movq %rsi, %rbx
movq %rdi, %r14
callq 0x63835
xorpd %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jne 0x638ff
jnp 0x63a67
movsd 0x98751(%rip), %xmm1    # 0xfc058
divsd %xmm0, %xmm1
movsd 0x28(%r14), %xmm0
movsd 0x40(%r14), %xmm2
mulsd 0x38(%r14), %xmm0
mulsd 0x20(%r14), %xmm2
subsd %xmm0, %xmm2
mulsd %xmm1, %xmm2
movsd %xmm2, (%rbx)
movapd 0x9cc99(%rip), %xmm0    # 0x1005d0
xorpd %xmm1, %xmm0
movsd 0x10(%r14), %xmm2
mulsd 0x38(%r14), %xmm2
movsd 0x40(%r14), %xmm3
mulsd 0x8(%r14), %xmm3
subsd %xmm2, %xmm3
mulsd %xmm0, %xmm3
movsd %xmm3, 0x8(%rbx)
movsd 0x10(%r14), %xmm2
movsd 0x28(%r14), %xmm3
mulsd 0x20(%r14), %xmm2
mulsd 0x8(%r14), %xmm3
subsd %xmm2, %xmm3
mulsd %xmm1, %xmm3
movsd %xmm3, 0x10(%rbx)
movsd 0x28(%r14), %xmm2
movsd 0x40(%r14), %xmm3
mulsd 0x30(%r14), %xmm2
mulsd 0x18(%r14), %xmm3
subsd %xmm2, %xmm3
mulsd %xmm0, %xmm3
movsd %xmm3, 0x18(%rbx)
movsd 0x10(%r14), %xmm2
mulsd 0x30(%r14), %xmm2
movsd 0x40(%r14), %xmm3
mulsd (%r14), %xmm3
subsd %xmm2, %xmm3
mulsd %xmm1, %xmm3
movsd %xmm3, 0x20(%rbx)
movsd 0x10(%r14), %xmm2
movsd 0x28(%r14), %xmm3
mulsd 0x18(%r14), %xmm2
mulsd (%r14), %xmm3
subsd %xmm2, %xmm3
mulsd %xmm0, %xmm3
movsd %xmm3, 0x28(%rbx)
movsd 0x20(%r14), %xmm2
movsd 0x38(%r14), %xmm3
mulsd 0x30(%r14), %xmm2
mulsd 0x18(%r14), %xmm3
subsd %xmm2, %xmm3
mulsd %xmm1, %xmm3
movsd %xmm3, 0x30(%rbx)
movsd 0x8(%r14), %xmm2
mulsd 0x30(%r14), %xmm2
movsd 0x38(%r14), %xmm3
mulsd (%r14), %xmm3
subsd %xmm2, %xmm3
mulsd %xmm0, %xmm3
movsd %xmm3, 0x38(%rbx)
movsd 0x8(%r14), %xmm0
movsd 0x20(%r14), %xmm2
mulsd 0x18(%r14), %xmm0
mulsd (%r14), %xmm2
subsd %xmm0, %xmm2
mulsd %xmm1, %xmm2
movsd %xmm2, 0x40(%rbx)
addq $0x8, %rsp
popq %rbx
popq %r14
retq
movq 0xec582(%rip), %rdi     # 0x14fff0
leaq 0xa058b(%rip), %rsi     # 0x104000
callq 0x4480
leaq 0x9eafd(%rip), %rbx     # 0x10257e
movq %rax, %rdi
movq %rbx, %rsi
callq 0x4480
leaq 0x99120(%rip), %rsi     # 0xfcbb3
movq %rax, %rdi
callq 0x4480
movq %rax, %rdi
movq %rbx, %rsi
callq 0x4480
pushq $0x1
popq %rdi
callq 0x524c