// File: /workspace/github_c_makefile_star2_O0/adelciotto[P]plasma/src/glmath.h
// Function: Mat4Mul
static inline void Mat4Mul(Mat4 lhs, Mat4 rhs, Mat4 out) {
    out[0] =
        lhs[0] * rhs[0] + lhs[1] * rhs[4] + lhs[2] * rhs[8] + lhs[3] * rhs[12];
    out[1] =
        lhs[0] * rhs[1] + lhs[1] * rhs[5] + lhs[2] * rhs[9] + lhs[3] * rhs[13];
    out[2] =
        lhs[0] * rhs[2] + lhs[1] * rhs[6] + lhs[2] * rhs[10] + lhs[3] * rhs[14];
    out[3] =
        lhs[0] * rhs[3] + lhs[1] * rhs[7] + lhs[2] * rhs[11] + lhs[3] * rhs[15];

    out[4] =
        lhs[4] * rhs[0] + lhs[5] * rhs[4] + lhs[6] * rhs[8] + lhs[7] * rhs[12];
    out[5] =
        lhs[4] * rhs[1] + lhs[5] * rhs[5] + lhs[6] * rhs[9] + lhs[7] * rhs[13];
    out[6] =
        lhs[4] * rhs[2] + lhs[5] * rhs[6] + lhs[6] * rhs[10] + lhs[7] * rhs[14];
    out[7] =
        lhs[4] * rhs[3] + lhs[5] * rhs[7] + lhs[6] * rhs[11] + lhs[7] * rhs[15];

    out[8] = lhs[8] * rhs[0] + lhs[9] * rhs[4] + lhs[10] * rhs[8] +
             lhs[11] * rhs[12];
    out[9] = lhs[8] * rhs[1] + lhs[9] * rhs[5] + lhs[10] * rhs[9] +
             lhs[11] * rhs[13];
    out[10] = lhs[8] * rhs[2] + lhs[9] * rhs[6] + lhs[10] * rhs[10] +
              lhs[11] * rhs[14];
    out[11] = lhs[8] * rhs[3] + lhs[9] * rhs[7] + lhs[10] * rhs[11] +
              lhs[11] * rhs[15];

    out[12] = lhs[12] * rhs[0] + lhs[13] * rhs[4] + lhs[14] * rhs[8] +
              lhs[15] * rhs[12];
    out[13] = lhs[12] * rhs[1] + lhs[13] * rhs[5] + lhs[14] * rhs[9] +
              lhs[15] * rhs[13];
    out[14] = lhs[12] * rhs[2] + lhs[13] * rhs[6] + lhs[14] * rhs[10] +
              lhs[15] * rhs[14];
    out[15] = lhs[12] * rhs[3] + lhs[13] * rhs[7] + lhs[14] * rhs[11] +
              lhs[15] * rhs[15];
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq -0x8(%rbp), %rax
movss (%rax), %xmm0
movq -0x10(%rbp), %rax
movss (%rax), %xmm2
movq -0x8(%rbp), %rax
movss 0x4(%rax), %xmm1
movq -0x10(%rbp), %rax
mulss 0x10(%rax), %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq -0x8(%rbp), %rax
movss 0x8(%rax), %xmm1
movq -0x10(%rbp), %rax
movss 0x20(%rax), %xmm2
mulss %xmm2, %xmm1
addss %xmm0, %xmm1
movq -0x8(%rbp), %rax
movss 0xc(%rax), %xmm0
movq -0x10(%rbp), %rax
movss 0x30(%rax), %xmm2
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq -0x18(%rbp), %rax
movss %xmm0, (%rax)
movq -0x8(%rbp), %rax
movss (%rax), %xmm0
movq -0x10(%rbp), %rax
movss 0x4(%rax), %xmm2
movq -0x8(%rbp), %rax
movss 0x4(%rax), %xmm1
movq -0x10(%rbp), %rax
mulss 0x14(%rax), %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq -0x8(%rbp), %rax
movss 0x8(%rax), %xmm1
movq -0x10(%rbp), %rax
movss 0x24(%rax), %xmm2
mulss %xmm2, %xmm1
addss %xmm0, %xmm1
movq -0x8(%rbp), %rax
movss 0xc(%rax), %xmm0
movq -0x10(%rbp), %rax
movss 0x34(%rax), %xmm2
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq -0x18(%rbp), %rax
movss %xmm0, 0x4(%rax)
movq -0x8(%rbp), %rax
movss (%rax), %xmm0
movq -0x10(%rbp), %rax
movss 0x8(%rax), %xmm2
movq -0x8(%rbp), %rax
movss 0x4(%rax), %xmm1
movq -0x10(%rbp), %rax
mulss 0x18(%rax), %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq -0x8(%rbp), %rax
movss 0x8(%rax), %xmm1
movq -0x10(%rbp), %rax
movss 0x28(%rax), %xmm2
mulss %xmm2, %xmm1
addss %xmm0, %xmm1
movq -0x8(%rbp), %rax
movss 0xc(%rax), %xmm0
movq -0x10(%rbp), %rax
movss 0x38(%rax), %xmm2
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq -0x18(%rbp), %rax
movss %xmm0, 0x8(%rax)
movq -0x8(%rbp), %rax
movss (%rax), %xmm0
movq -0x10(%rbp), %rax
movss 0xc(%rax), %xmm2
movq -0x8(%rbp), %rax
movss 0x4(%rax), %xmm1
movq -0x10(%rbp), %rax
mulss 0x1c(%rax), %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq -0x8(%rbp), %rax
movss 0x8(%rax), %xmm1
movq -0x10(%rbp), %rax
movss 0x2c(%rax), %xmm2
mulss %xmm2, %xmm1
addss %xmm0, %xmm1
movq -0x8(%rbp), %rax
movss 0xc(%rax), %xmm0
movq -0x10(%rbp), %rax
movss 0x3c(%rax), %xmm2
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq -0x18(%rbp), %rax
movss %xmm0, 0xc(%rax)
movq -0x8(%rbp), %rax
movss 0x10(%rax), %xmm0
movq -0x10(%rbp), %rax
movss (%rax), %xmm2
movq -0x8(%rbp), %rax
movss 0x14(%rax), %xmm1
movq -0x10(%rbp), %rax
mulss 0x10(%rax), %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq -0x8(%rbp), %rax
movss 0x18(%rax), %xmm1
movq -0x10(%rbp), %rax
movss 0x20(%rax), %xmm2
mulss %xmm2, %xmm1
addss %xmm0, %xmm1
movq -0x8(%rbp), %rax
movss 0x1c(%rax), %xmm0
movq -0x10(%rbp), %rax
movss 0x30(%rax), %xmm2
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq -0x18(%rbp), %rax
movss %xmm0, 0x10(%rax)
movq -0x8(%rbp), %rax
movss 0x10(%rax), %xmm0
movq -0x10(%rbp), %rax
movss 0x4(%rax), %xmm2
movq -0x8(%rbp), %rax
movss 0x14(%rax), %xmm1
movq -0x10(%rbp), %rax
mulss 0x14(%rax), %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq -0x8(%rbp), %rax
movss 0x18(%rax), %xmm1
movq -0x10(%rbp), %rax
movss 0x24(%rax), %xmm2
mulss %xmm2, %xmm1
addss %xmm0, %xmm1
movq -0x8(%rbp), %rax
movss 0x1c(%rax), %xmm0
movq -0x10(%rbp), %rax
movss 0x34(%rax), %xmm2
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq -0x18(%rbp), %rax
movss %xmm0, 0x14(%rax)
movq -0x8(%rbp), %rax
movss 0x10(%rax), %xmm0
movq -0x10(%rbp), %rax
movss 0x8(%rax), %xmm2
movq -0x8(%rbp), %rax
movss 0x14(%rax), %xmm1
movq -0x10(%rbp), %rax
mulss 0x18(%rax), %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq -0x8(%rbp), %rax
movss 0x18(%rax), %xmm1
movq -0x10(%rbp), %rax
movss 0x28(%rax), %xmm2
mulss %xmm2, %xmm1
addss %xmm0, %xmm1
movq -0x8(%rbp), %rax
movss 0x1c(%rax), %xmm0
movq -0x10(%rbp), %rax
movss 0x38(%rax), %xmm2
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq -0x18(%rbp), %rax
movss %xmm0, 0x18(%rax)
movq -0x8(%rbp), %rax
movss 0x10(%rax), %xmm0
movq -0x10(%rbp), %rax
movss 0xc(%rax), %xmm2
movq -0x8(%rbp), %rax
movss 0x14(%rax), %xmm1
movq -0x10(%rbp), %rax
mulss 0x1c(%rax), %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq -0x8(%rbp), %rax
movss 0x18(%rax), %xmm1
movq -0x10(%rbp), %rax
movss 0x2c(%rax), %xmm2
mulss %xmm2, %xmm1
addss %xmm0, %xmm1
movq -0x8(%rbp), %rax
movss 0x1c(%rax), %xmm0
movq -0x10(%rbp), %rax
movss 0x3c(%rax), %xmm2
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq -0x18(%rbp), %rax
movss %xmm0, 0x1c(%rax)
movq -0x8(%rbp), %rax
movss 0x20(%rax), %xmm0
movq -0x10(%rbp), %rax
movss (%rax), %xmm2
movq -0x8(%rbp), %rax
movss 0x24(%rax), %xmm1
movq -0x10(%rbp), %rax
mulss 0x10(%rax), %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq -0x8(%rbp), %rax
movss 0x28(%rax), %xmm1
movq -0x10(%rbp), %rax
movss 0x20(%rax), %xmm2
mulss %xmm2, %xmm1
addss %xmm0, %xmm1
movq -0x8(%rbp), %rax
movss 0x2c(%rax), %xmm0
movq -0x10(%rbp), %rax
movss 0x30(%rax), %xmm2
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq -0x18(%rbp), %rax
movss %xmm0, 0x20(%rax)
movq -0x8(%rbp), %rax
movss 0x20(%rax), %xmm0
movq -0x10(%rbp), %rax
movss 0x4(%rax), %xmm2
movq -0x8(%rbp), %rax
movss 0x24(%rax), %xmm1
movq -0x10(%rbp), %rax
mulss 0x14(%rax), %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq -0x8(%rbp), %rax
movss 0x28(%rax), %xmm1
movq -0x10(%rbp), %rax
movss 0x24(%rax), %xmm2
mulss %xmm2, %xmm1
addss %xmm0, %xmm1
movq -0x8(%rbp), %rax
movss 0x2c(%rax), %xmm0
movq -0x10(%rbp), %rax
movss 0x34(%rax), %xmm2
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq -0x18(%rbp), %rax
movss %xmm0, 0x24(%rax)
movq -0x8(%rbp), %rax
movss 0x20(%rax), %xmm0
movq -0x10(%rbp), %rax
movss 0x8(%rax), %xmm2
movq -0x8(%rbp), %rax
movss 0x24(%rax), %xmm1
movq -0x10(%rbp), %rax
mulss 0x18(%rax), %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq -0x8(%rbp), %rax
movss 0x28(%rax), %xmm1
movq -0x10(%rbp), %rax
movss 0x28(%rax), %xmm2
mulss %xmm2, %xmm1
addss %xmm0, %xmm1
movq -0x8(%rbp), %rax
movss 0x2c(%rax), %xmm0
movq -0x10(%rbp), %rax
movss 0x38(%rax), %xmm2
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq -0x18(%rbp), %rax
movss %xmm0, 0x28(%rax)
movq -0x8(%rbp), %rax
movss 0x20(%rax), %xmm0
movq -0x10(%rbp), %rax
movss 0xc(%rax), %xmm2
movq -0x8(%rbp), %rax
movss 0x24(%rax), %xmm1
movq -0x10(%rbp), %rax
mulss 0x1c(%rax), %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq -0x8(%rbp), %rax
movss 0x28(%rax), %xmm1
movq -0x10(%rbp), %rax
movss 0x2c(%rax), %xmm2
mulss %xmm2, %xmm1
addss %xmm0, %xmm1
movq -0x8(%rbp), %rax
movss 0x2c(%rax), %xmm0
movq -0x10(%rbp), %rax
movss 0x3c(%rax), %xmm2
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq -0x18(%rbp), %rax
movss %xmm0, 0x2c(%rax)
movq -0x8(%rbp), %rax
movss 0x30(%rax), %xmm0
movq -0x10(%rbp), %rax
movss (%rax), %xmm2
movq -0x8(%rbp), %rax
movss 0x34(%rax), %xmm1
movq -0x10(%rbp), %rax
mulss 0x10(%rax), %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq -0x8(%rbp), %rax
movss 0x38(%rax), %xmm1
movq -0x10(%rbp), %rax
movss 0x20(%rax), %xmm2
mulss %xmm2, %xmm1
addss %xmm0, %xmm1
movq -0x8(%rbp), %rax
movss 0x3c(%rax), %xmm0
movq -0x10(%rbp), %rax
movss 0x30(%rax), %xmm2
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq -0x18(%rbp), %rax
movss %xmm0, 0x30(%rax)
movq -0x8(%rbp), %rax
movss 0x30(%rax), %xmm0
movq -0x10(%rbp), %rax
movss 0x4(%rax), %xmm2
movq -0x8(%rbp), %rax
movss 0x34(%rax), %xmm1
movq -0x10(%rbp), %rax
mulss 0x14(%rax), %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq -0x8(%rbp), %rax
movss 0x38(%rax), %xmm1
movq -0x10(%rbp), %rax
movss 0x24(%rax), %xmm2
mulss %xmm2, %xmm1
addss %xmm0, %xmm1
movq -0x8(%rbp), %rax
movss 0x3c(%rax), %xmm0
movq -0x10(%rbp), %rax
movss 0x34(%rax), %xmm2
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq -0x18(%rbp), %rax
movss %xmm0, 0x34(%rax)
movq -0x8(%rbp), %rax
movss 0x30(%rax), %xmm0
movq -0x10(%rbp), %rax
movss 0x8(%rax), %xmm2
movq -0x8(%rbp), %rax
movss 0x34(%rax), %xmm1
movq -0x10(%rbp), %rax
mulss 0x18(%rax), %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq -0x8(%rbp), %rax
movss 0x38(%rax), %xmm1
movq -0x10(%rbp), %rax
movss 0x28(%rax), %xmm2
mulss %xmm2, %xmm1
addss %xmm0, %xmm1
movq -0x8(%rbp), %rax
movss 0x3c(%rax), %xmm0
movq -0x10(%rbp), %rax
movss 0x38(%rax), %xmm2
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq -0x18(%rbp), %rax
movss %xmm0, 0x38(%rax)
movq -0x8(%rbp), %rax
movss 0x30(%rax), %xmm0
movq -0x10(%rbp), %rax
movss 0xc(%rax), %xmm2
movq -0x8(%rbp), %rax
movss 0x34(%rax), %xmm1
movq -0x10(%rbp), %rax
mulss 0x1c(%rax), %xmm1
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq -0x8(%rbp), %rax
movss 0x38(%rax), %xmm1
movq -0x10(%rbp), %rax
movss 0x2c(%rax), %xmm2
mulss %xmm2, %xmm1
addss %xmm0, %xmm1
movq -0x8(%rbp), %rax
movss 0x3c(%rax), %xmm0
movq -0x10(%rbp), %rax
movss 0x3c(%rax), %xmm2
mulss %xmm2, %xmm0
addss %xmm1, %xmm0
movq -0x18(%rbp), %rax
movss %xmm0, 0x3c(%rax)
popq %rbp
retq