// File: /workspace/github_c_makefile_star2_O1/Nealsbo[P]C-Software-Renderer/src/libmath.c
// Function: mat4_inv
void mat4_inv( mat4 m1, mat4 dest ){
    mat4 m;
    float det;
    int i, j;

    dest[0]  =  m1[5] * m1[10] * m1[15] - m1[5] * m1[11] * m1[14] - m1[9]  * m1[6]  * m1[15] + m1[9]  * m1[7]  * m1[14] + m1[13] * m1[6]  * m1[11] - m1[13] * m1[7]  * m1[10];
    dest[4]  = -m1[4] * m1[10] * m1[15] + m1[4] * m1[11] * m1[14] + m1[8]  * m1[6]  * m1[15] - m1[8]  * m1[7]  * m1[14] - m1[12] * m1[6]  * m1[11] + m1[12] * m1[7]  * m1[10];
    dest[8]  =  m1[4] * m1[9]  * m1[15] - m1[4]  * m1[11] * m1[13] - m1[8]  * m1[5] * m1[15] + m1[8]  * m1[7] * m1[13] + m1[12] * m1[5] * m1[11] - m1[12] * m1[7] * m1[9];
    dest[12] = -m1[4] * m1[9]  * m1[14] + m1[4]  * m1[10] * m1[13] + m1[8]  * m1[5] * m1[14] - m1[8]  * m1[6] * m1[13] - m1[12] * m1[5] * m1[10] + m1[12] * m1[6] * m1[9];
    dest[1]  = -m1[1] * m1[10] * m1[15] + m1[1]  * m1[11] * m1[14] + m1[9]  * m1[2] * m1[15] - m1[9]  * m1[3] * m1[14] - m1[13] * m1[2] * m1[11] + m1[13] * m1[3] * m1[10];
    dest[5]  =  m1[0] * m1[10] * m1[15] - m1[0]  * m1[11] * m1[14] - m1[8]  * m1[2] * m1[15] + m1[8]  * m1[3] * m1[14] + m1[12] * m1[2] * m1[11] - m1[12] * m1[3] * m1[10];
    dest[9]  = -m1[0] * m1[9]  * m1[15] + m1[0]  * m1[11] * m1[13] + m1[8]  * m1[1] * m1[15] - m1[8]  * m1[3] * m1[13] - m1[12] * m1[1] * m1[11] + m1[12] * m1[3] * m1[9];
    dest[13] =  m1[0] * m1[9]  * m1[14] - m1[0]  * m1[10] * m1[13] - m1[8]  * m1[1] * m1[14] + m1[8]  * m1[2] * m1[13] + m1[12] * m1[1] * m1[10] - m1[12] * m1[2] * m1[9];
    dest[2]  =  m1[1] * m1[6]  * m1[15] - m1[1]  * m1[7] * m1[14] - m1[5]  * m1[2] * m1[15] + m1[5]  * m1[3] * m1[14] + m1[13] * m1[2] * m1[7] - m1[13] * m1[3] * m1[6];
    dest[6]  = -m1[0] * m1[6]  * m1[15] + m1[0]  * m1[7] * m1[14] + m1[4]  * m1[2] * m1[15] - m1[4]  * m1[3] * m1[14] - m1[12] * m1[2] * m1[7] + m1[12] * m1[3] * m1[6];
    dest[10] =  m1[0] * m1[5]  * m1[15] - m1[0]  * m1[7] * m1[13] - m1[4]  * m1[1] * m1[15] + m1[4]  * m1[3] * m1[13] + m1[12] * m1[1] * m1[7] - m1[12] * m1[3] * m1[5];
    dest[14] = -m1[0] * m1[5]  * m1[14] + m1[0]  * m1[6] * m1[13] + m1[4]  * m1[1] * m1[14] - m1[4]  * m1[2] * m1[13] - m1[12] * m1[1] * m1[6] + m1[12] * m1[2] * m1[5];
    dest[3]  = -m1[1] * m1[6]  * m1[11] + m1[1] * m1[7] * m1[10] + m1[5] * m1[2] * m1[11] - m1[5] * m1[3] * m1[10] - m1[9] * m1[2] * m1[7] + m1[9] * m1[3] * m1[6];
    dest[7]  =  m1[0] * m1[6]  * m1[11] - m1[0] * m1[7] * m1[10] - m1[4] * m1[2] * m1[11] + m1[4] * m1[3] * m1[10] + m1[8] * m1[2] * m1[7] - m1[8] * m1[3] * m1[6];
    dest[11] = -m1[0] * m1[5]  * m1[11] + m1[0] * m1[7] * m1[9] + m1[4] * m1[1] * m1[11] - m1[4] * m1[3] * m1[9] - m1[8] * m1[1] * m1[7] + m1[8] * m1[3] * m1[5];
    dest[15] =  m1[0] * m1[5]  * m1[10] - m1[0] * m1[6] * m1[9] - m1[4] * m1[1] * m1[10] + m1[4] * m1[2] * m1[9] + m1[8] * m1[1] * m1[6] - m1[8] * m1[2] * m1[5];

    det = m1[0] * dest[0] + m1[1] * dest[4] + m1[2] * dest[8] + m1[3] * dest[12];

    det = 1.0 / det;

    for( i = 0; i < 16; i++ ) {
        dest[i] = dest[i] * det;
    }
}

// Assembly:
movss 0x28(%rdi), %xmm1
movss 0x14(%rdi), %xmm2
movss 0x18(%rdi), %xmm0
movss 0x3c(%rdi), %xmm4
movss 0x2c(%rdi), %xmm5
movss 0x38(%rdi), %xmm3
movaps %xmm0, %xmm6
movss 0x34(%rdi), %xmm7
mulss %xmm7, %xmm0
mulss %xmm5, %xmm0
mulss %xmm2, %xmm5
mulss %xmm1, %xmm2
mulss %xmm3, %xmm5
mulss %xmm4, %xmm2
subss %xmm5, %xmm2
movss 0x24(%rdi), %xmm5
mulss %xmm5, %xmm6
mulss %xmm4, %xmm6
subss %xmm6, %xmm2
movss 0x1c(%rdi), %xmm4
mulss %xmm4, %xmm5
mulss %xmm3, %xmm5
addss %xmm2, %xmm5
addss %xmm5, %xmm0
mulss %xmm7, %xmm4
mulss %xmm1, %xmm4
subss %xmm4, %xmm0
movss %xmm0, (%rsi)
movss 0x28(%rdi), %xmm5
movss 0x10(%rdi), %xmm3
movss 0x18(%rdi), %xmm2
movss 0x20(%rdi), %xmm6
movaps %xmm6, %xmm4
movss 0x1c(%rdi), %xmm1
mulss %xmm1, %xmm6
movss 0x30(%rdi), %xmm7
mulss %xmm7, %xmm1
mulss %xmm5, %xmm1
mulss %xmm3, %xmm5
movss 0x3c(%rdi), %xmm8
movss 0x2c(%rdi), %xmm9
mulss %xmm9, %xmm3
movss 0x38(%rdi), %xmm10
mulss %xmm10, %xmm3
mulss %xmm8, %xmm5
subss %xmm5, %xmm3
mulss %xmm2, %xmm4
mulss %xmm8, %xmm4
addss %xmm3, %xmm4
mulss %xmm10, %xmm6
subss %xmm6, %xmm4
mulss %xmm7, %xmm2
mulss %xmm9, %xmm2
subss %xmm2, %xmm4
addss %xmm4, %xmm1
movss %xmm1, 0x10(%rsi)
movss 0x24(%rdi), %xmm3
movss 0x10(%rdi), %xmm4
movss 0x14(%rdi), %xmm2
movss 0x3c(%rdi), %xmm6
movss 0x2c(%rdi), %xmm7
movss 0x34(%rdi), %xmm5
movaps %xmm2, %xmm8
movss 0x30(%rdi), %xmm9
mulss %xmm9, %xmm2
mulss %xmm7, %xmm2
mulss %xmm4, %xmm7
mulss %xmm3, %xmm4
mulss %xmm5, %xmm7
mulss %xmm6, %xmm4
subss %xmm7, %xmm4
movss 0x20(%rdi), %xmm7
mulss %xmm7, %xmm8
mulss %xmm6, %xmm8
subss %xmm8, %xmm4
movss 0x1c(%rdi), %xmm6
mulss %xmm6, %xmm7
mulss %xmm5, %xmm7
addss %xmm4, %xmm7
addss %xmm7, %xmm2
mulss %xmm9, %xmm6
mulss %xmm3, %xmm6
subss %xmm6, %xmm2
movss %xmm2, 0x20(%rsi)
movss 0x24(%rdi), %xmm7
movss 0x10(%rdi), %xmm5
movss 0x14(%rdi), %xmm4
movss 0x20(%rdi), %xmm8
movaps %xmm8, %xmm6
movss 0x18(%rdi), %xmm3
mulss %xmm3, %xmm8
movss 0x30(%rdi), %xmm9
mulss %xmm9, %xmm3
mulss %xmm7, %xmm3
mulss %xmm5, %xmm7
movss 0x38(%rdi), %xmm10
movss 0x28(%rdi), %xmm11
mulss %xmm11, %xmm5
movss 0x34(%rdi), %xmm12
mulss %xmm12, %xmm5
mulss %xmm10, %xmm7
subss %xmm7, %xmm5
mulss %xmm4, %xmm6
mulss %xmm10, %xmm6
addss %xmm5, %xmm6
mulss %xmm12, %xmm8
subss %xmm8, %xmm6
mulss %xmm9, %xmm4
mulss %xmm11, %xmm4
subss %xmm4, %xmm6
addss %xmm6, %xmm3
movss %xmm3, 0x30(%rsi)
movss 0x28(%rdi), %xmm6
movss 0x4(%rdi), %xmm4
movss 0x24(%rdi), %xmm7
movaps %xmm7, %xmm5
movss 0xc(%rdi), %xmm8
mulss %xmm8, %xmm7
movss 0x34(%rdi), %xmm9
mulss %xmm9, %xmm8
mulss %xmm6, %xmm8
mulss %xmm4, %xmm6
movss 0x3c(%rdi), %xmm10
movss 0x2c(%rdi), %xmm11
mulss %xmm11, %xmm4
movss 0x38(%rdi), %xmm12
mulss %xmm12, %xmm4
mulss %xmm10, %xmm6
subss %xmm6, %xmm4
movss 0x8(%rdi), %xmm6
mulss %xmm6, %xmm5
mulss %xmm10, %xmm5
addss %xmm4, %xmm5
mulss %xmm12, %xmm7
subss %xmm7, %xmm5
mulss %xmm9, %xmm6
mulss %xmm11, %xmm6
subss %xmm6, %xmm5
addss %xmm5, %xmm8
movss %xmm8, 0x4(%rsi)
movss 0x28(%rdi), %xmm5
movss (%rdi), %xmm6
movss 0x8(%rdi), %xmm4
movss 0x3c(%rdi), %xmm8
movss 0x2c(%rdi), %xmm9
movss 0x38(%rdi), %xmm7
movaps %xmm4, %xmm10
movss 0x30(%rdi), %xmm11
mulss %xmm11, %xmm4
mulss %xmm9, %xmm4
mulss %xmm6, %xmm9
mulss %xmm5, %xmm6
mulss %xmm7, %xmm9
mulss %xmm8, %xmm6
subss %xmm9, %xmm6
movss 0x20(%rdi), %xmm9
mulss %xmm9, %xmm10
mulss %xmm8, %xmm10
subss %xmm10, %xmm6
movss 0xc(%rdi), %xmm8
mulss %xmm8, %xmm9
mulss %xmm7, %xmm9
addss %xmm6, %xmm9
addss %xmm9, %xmm4
mulss %xmm11, %xmm8
mulss %xmm5, %xmm8
subss %xmm8, %xmm4
movss %xmm4, 0x14(%rsi)
movss 0x24(%rdi), %xmm6
movss (%rdi), %xmm4
movss 0x20(%rdi), %xmm7
movaps %xmm7, %xmm5
movss 0xc(%rdi), %xmm8
mulss %xmm8, %xmm7
movss 0x30(%rdi), %xmm9
mulss %xmm9, %xmm8
mulss %xmm6, %xmm8
mulss %xmm4, %xmm6
movss 0x3c(%rdi), %xmm10
movss 0x2c(%rdi), %xmm11
mulss %xmm11, %xmm4
movss 0x34(%rdi), %xmm12
mulss %xmm12, %xmm4
mulss %xmm10, %xmm6
subss %xmm6, %xmm4
movss 0x4(%rdi), %xmm6
mulss %xmm6, %xmm5
mulss %xmm10, %xmm5
addss %xmm4, %xmm5
mulss %xmm12, %xmm7
subss %xmm7, %xmm5
mulss %xmm9, %xmm6
mulss %xmm11, %xmm6
subss %xmm6, %xmm5
addss %xmm5, %xmm8
movss %xmm8, 0x24(%rsi)
movss 0x24(%rdi), %xmm5
movss (%rdi), %xmm6
movss 0x4(%rdi), %xmm4
movss 0x38(%rdi), %xmm8
movss 0x28(%rdi), %xmm9
movss 0x34(%rdi), %xmm7
movaps %xmm4, %xmm10
movss 0x30(%rdi), %xmm11
mulss %xmm11, %xmm4
mulss %xmm9, %xmm4
mulss %xmm6, %xmm9
mulss %xmm5, %xmm6
mulss %xmm7, %xmm9
mulss %xmm8, %xmm6
subss %xmm9, %xmm6
movss 0x20(%rdi), %xmm9
mulss %xmm9, %xmm10
mulss %xmm8, %xmm10
subss %xmm10, %xmm6
movss 0x8(%rdi), %xmm8
mulss %xmm8, %xmm9
mulss %xmm7, %xmm9
addss %xmm6, %xmm9
addss %xmm9, %xmm4
mulss %xmm11, %xmm8
mulss %xmm5, %xmm8
subss %xmm8, %xmm4
movss %xmm4, 0x34(%rsi)
movss 0x18(%rdi), %xmm5
movss 0x4(%rdi), %xmm6
movss 0x8(%rdi), %xmm4
movss 0x3c(%rdi), %xmm8
movss 0x1c(%rdi), %xmm9
movss 0x38(%rdi), %xmm7
movaps %xmm4, %xmm10
movss 0x34(%rdi), %xmm11
mulss %xmm11, %xmm4
mulss %xmm9, %xmm4
mulss %xmm6, %xmm9
mulss %xmm5, %xmm6
mulss %xmm7, %xmm9
mulss %xmm8, %xmm6
subss %xmm9, %xmm6
movss 0x14(%rdi), %xmm9
mulss %xmm9, %xmm10
mulss %xmm8, %xmm10
subss %xmm10, %xmm6
movss 0xc(%rdi), %xmm8
mulss %xmm8, %xmm9
mulss %xmm7, %xmm9
addss %xmm6, %xmm9
addss %xmm9, %xmm4
mulss %xmm11, %xmm8
mulss %xmm5, %xmm8
subss %xmm8, %xmm4
movss %xmm4, 0x8(%rsi)
movss 0x18(%rdi), %xmm6
movss (%rdi), %xmm4
movss 0x10(%rdi), %xmm7
movaps %xmm7, %xmm5
movss 0xc(%rdi), %xmm8
mulss %xmm8, %xmm7
movss 0x30(%rdi), %xmm9
mulss %xmm9, %xmm8
mulss %xmm6, %xmm8
mulss %xmm4, %xmm6
movss 0x3c(%rdi), %xmm10
movss 0x1c(%rdi), %xmm11
mulss %xmm11, %xmm4
movss 0x38(%rdi), %xmm12
mulss %xmm12, %xmm4
mulss %xmm10, %xmm6
subss %xmm6, %xmm4
movss 0x8(%rdi), %xmm6
mulss %xmm6, %xmm5
mulss %xmm10, %xmm5
addss %xmm4, %xmm5
mulss %xmm12, %xmm7
subss %xmm7, %xmm5
mulss %xmm9, %xmm6
mulss %xmm11, %xmm6
subss %xmm6, %xmm5
addss %xmm5, %xmm8
movss %xmm8, 0x18(%rsi)
movss 0x14(%rdi), %xmm5
movss (%rdi), %xmm6
movss 0x4(%rdi), %xmm4
movss 0x3c(%rdi), %xmm8
movss 0x1c(%rdi), %xmm9
movss 0x34(%rdi), %xmm7
movaps %xmm4, %xmm10
movss 0x30(%rdi), %xmm11
mulss %xmm11, %xmm4
mulss %xmm9, %xmm4
mulss %xmm6, %xmm9
mulss %xmm5, %xmm6
mulss %xmm7, %xmm9
mulss %xmm8, %xmm6
subss %xmm9, %xmm6
movss 0x10(%rdi), %xmm9
mulss %xmm9, %xmm10
mulss %xmm8, %xmm10
subss %xmm10, %xmm6
movss 0xc(%rdi), %xmm8
mulss %xmm8, %xmm9
mulss %xmm7, %xmm9
addss %xmm6, %xmm9
addss %xmm9, %xmm4
mulss %xmm11, %xmm8
mulss %xmm5, %xmm8
subss %xmm8, %xmm4
movss %xmm4, 0x28(%rsi)
movss 0x14(%rdi), %xmm6
movss (%rdi), %xmm4
movss 0x10(%rdi), %xmm7
movaps %xmm7, %xmm5
movss 0x8(%rdi), %xmm8
mulss %xmm8, %xmm7
movss 0x30(%rdi), %xmm9
mulss %xmm9, %xmm8
mulss %xmm6, %xmm8
mulss %xmm4, %xmm6
movss 0x38(%rdi), %xmm10
movss 0x18(%rdi), %xmm11
mulss %xmm11, %xmm4
movss 0x34(%rdi), %xmm12
mulss %xmm12, %xmm4
mulss %xmm10, %xmm6
subss %xmm6, %xmm4
movss 0x4(%rdi), %xmm6
mulss %xmm6, %xmm5
mulss %xmm10, %xmm5
addss %xmm4, %xmm5
mulss %xmm12, %xmm7
subss %xmm7, %xmm5
mulss %xmm9, %xmm6
mulss %xmm11, %xmm6
subss %xmm6, %xmm5
addss %xmm5, %xmm8
movss %xmm8, 0x38(%rsi)
movss 0x18(%rdi), %xmm6
movss 0x4(%rdi), %xmm4
movss 0x14(%rdi), %xmm7
movaps %xmm7, %xmm5
movss 0xc(%rdi), %xmm8
mulss %xmm8, %xmm7
movss 0x24(%rdi), %xmm9
mulss %xmm9, %xmm8
mulss %xmm6, %xmm8
mulss %xmm4, %xmm6
movss 0x2c(%rdi), %xmm10
movss 0x1c(%rdi), %xmm11
mulss %xmm11, %xmm4
movss 0x28(%rdi), %xmm12
mulss %xmm12, %xmm4
mulss %xmm10, %xmm6
subss %xmm6, %xmm4
movss 0x8(%rdi), %xmm6
mulss %xmm6, %xmm5
mulss %xmm10, %xmm5
addss %xmm4, %xmm5
mulss %xmm12, %xmm7
subss %xmm7, %xmm5
mulss %xmm9, %xmm6
mulss %xmm11, %xmm6
subss %xmm6, %xmm5
addss %xmm5, %xmm8
movss %xmm8, 0xc(%rsi)
movss 0x18(%rdi), %xmm5
movss (%rdi), %xmm6
movss 0x8(%rdi), %xmm4
movss 0x2c(%rdi), %xmm8
movss 0x1c(%rdi), %xmm9
movss 0x28(%rdi), %xmm7
movaps %xmm4, %xmm10
movss 0x20(%rdi), %xmm11
mulss %xmm11, %xmm4
mulss %xmm9, %xmm4
mulss %xmm6, %xmm9
mulss %xmm5, %xmm6
mulss %xmm7, %xmm9
mulss %xmm8, %xmm6
subss %xmm9, %xmm6
movss 0x10(%rdi), %xmm9
mulss %xmm9, %xmm10
mulss %xmm8, %xmm10
subss %xmm10, %xmm6
movss 0xc(%rdi), %xmm8
mulss %xmm8, %xmm9
mulss %xmm7, %xmm9
addss %xmm6, %xmm9
addss %xmm9, %xmm4
mulss %xmm11, %xmm8
mulss %xmm5, %xmm8
subss %xmm8, %xmm4
movss %xmm4, 0x1c(%rsi)
movss 0x14(%rdi), %xmm6
movss (%rdi), %xmm4
movss 0x10(%rdi), %xmm7
movaps %xmm7, %xmm5
movss 0xc(%rdi), %xmm8
mulss %xmm8, %xmm7
movss 0x20(%rdi), %xmm9
mulss %xmm9, %xmm8
mulss %xmm6, %xmm8
mulss %xmm4, %xmm6
movss 0x2c(%rdi), %xmm10
movss 0x1c(%rdi), %xmm11
mulss %xmm11, %xmm4
movss 0x24(%rdi), %xmm12
mulss %xmm12, %xmm4
mulss %xmm10, %xmm6
subss %xmm6, %xmm4
movss 0x4(%rdi), %xmm6
mulss %xmm6, %xmm5
mulss %xmm10, %xmm5
addss %xmm4, %xmm5
mulss %xmm12, %xmm7
subss %xmm7, %xmm5
mulss %xmm9, %xmm6
mulss %xmm11, %xmm6
subss %xmm6, %xmm5
addss %xmm5, %xmm8
movss %xmm8, 0x2c(%rsi)
movss 0x14(%rdi), %xmm5
movss (%rdi), %xmm6
movss 0x4(%rdi), %xmm4
movss 0x28(%rdi), %xmm8
movss 0x18(%rdi), %xmm9
movss 0x24(%rdi), %xmm7
movaps %xmm4, %xmm10
movss 0x20(%rdi), %xmm11
mulss %xmm11, %xmm4
mulss %xmm9, %xmm4
mulss %xmm6, %xmm9
mulss %xmm5, %xmm6
mulss %xmm7, %xmm9
mulss %xmm8, %xmm6
subss %xmm9, %xmm6
movss 0x10(%rdi), %xmm9
mulss %xmm9, %xmm10
mulss %xmm8, %xmm10
subss %xmm10, %xmm6
movss 0x8(%rdi), %xmm8
mulss %xmm8, %xmm9
mulss %xmm7, %xmm9
addss %xmm6, %xmm9
addss %xmm9, %xmm4
mulss %xmm11, %xmm8
mulss %xmm5, %xmm8
subss %xmm8, %xmm4
movss %xmm4, 0x3c(%rsi)
mulss 0x4(%rdi), %xmm1
mulss (%rdi), %xmm0
mulss 0x8(%rdi), %xmm2
addss %xmm1, %xmm0
addss %xmm0, %xmm2
mulss 0xc(%rdi), %xmm3
addss %xmm2, %xmm3
movss 0x45e7(%rip), %xmm0     # 0x8014
divss %xmm3, %xmm0
xorl %eax, %eax
movss (%rsi,%rax,4), %xmm1
mulss %xmm0, %xmm1
movss %xmm1, (%rsi,%rax,4)
incq %rax
cmpq $0x10, %rax
jne 0x3a33
retq