// File: /workspace/github_c_makefile_star2_O2/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:
movss (%rdi), %xmm0
movss 0x4(%rdi), %xmm1
mulss 0x10(%rsi), %xmm1
mulss (%rsi), %xmm0
addss %xmm1, %xmm0
movss 0x8(%rdi), %xmm1
mulss 0x20(%rsi), %xmm1
addss %xmm0, %xmm1
movss 0xc(%rdi), %xmm0
mulss 0x30(%rsi), %xmm0
addss %xmm1, %xmm0
movss %xmm0, (%rdx)
movss (%rdi), %xmm0
movss 0x4(%rdi), %xmm1
mulss 0x14(%rsi), %xmm1
mulss 0x4(%rsi), %xmm0
addss %xmm1, %xmm0
movss 0x8(%rdi), %xmm1
mulss 0x24(%rsi), %xmm1
addss %xmm0, %xmm1
movss 0xc(%rdi), %xmm0
mulss 0x34(%rsi), %xmm0
addss %xmm1, %xmm0
movss %xmm0, 0x4(%rdx)
movss (%rdi), %xmm0
movss 0x4(%rdi), %xmm1
mulss 0x18(%rsi), %xmm1
mulss 0x8(%rsi), %xmm0
addss %xmm1, %xmm0
movss 0x8(%rdi), %xmm1
mulss 0x28(%rsi), %xmm1
addss %xmm0, %xmm1
movss 0xc(%rdi), %xmm0
mulss 0x38(%rsi), %xmm0
addss %xmm1, %xmm0
movss %xmm0, 0x8(%rdx)
movss (%rdi), %xmm0
movss 0x4(%rdi), %xmm1
mulss 0x1c(%rsi), %xmm1
mulss 0xc(%rsi), %xmm0
addss %xmm1, %xmm0
movss 0x8(%rdi), %xmm1
mulss 0x2c(%rsi), %xmm1
addss %xmm0, %xmm1
movss 0xc(%rdi), %xmm0
mulss 0x3c(%rsi), %xmm0
addss %xmm1, %xmm0
movss %xmm0, 0xc(%rdx)
movss 0x10(%rdi), %xmm0
movss 0x14(%rdi), %xmm1
mulss 0x10(%rsi), %xmm1
mulss (%rsi), %xmm0
addss %xmm1, %xmm0
movss 0x18(%rdi), %xmm1
mulss 0x20(%rsi), %xmm1
addss %xmm0, %xmm1
movss 0x1c(%rdi), %xmm0
mulss 0x30(%rsi), %xmm0
addss %xmm1, %xmm0
movss %xmm0, 0x10(%rdx)
movss 0x10(%rdi), %xmm0
movss 0x14(%rdi), %xmm1
mulss 0x14(%rsi), %xmm1
mulss 0x4(%rsi), %xmm0
addss %xmm1, %xmm0
movss 0x18(%rdi), %xmm1
mulss 0x24(%rsi), %xmm1
addss %xmm0, %xmm1
movss 0x1c(%rdi), %xmm0
mulss 0x34(%rsi), %xmm0
addss %xmm1, %xmm0
movss %xmm0, 0x14(%rdx)
movss 0x10(%rdi), %xmm0
movss 0x14(%rdi), %xmm1
mulss 0x18(%rsi), %xmm1
mulss 0x8(%rsi), %xmm0
addss %xmm1, %xmm0
movss 0x18(%rdi), %xmm1
mulss 0x28(%rsi), %xmm1
addss %xmm0, %xmm1
movss 0x1c(%rdi), %xmm0
mulss 0x38(%rsi), %xmm0
addss %xmm1, %xmm0
movss %xmm0, 0x18(%rdx)
movss 0x10(%rdi), %xmm0
movss 0x14(%rdi), %xmm1
mulss 0x1c(%rsi), %xmm1
mulss 0xc(%rsi), %xmm0
addss %xmm1, %xmm0
movss 0x18(%rdi), %xmm1
mulss 0x2c(%rsi), %xmm1
addss %xmm0, %xmm1
movss 0x1c(%rdi), %xmm0
mulss 0x3c(%rsi), %xmm0
addss %xmm1, %xmm0
movss %xmm0, 0x1c(%rdx)
movss 0x20(%rdi), %xmm0
movss 0x24(%rdi), %xmm1
mulss 0x10(%rsi), %xmm1
mulss (%rsi), %xmm0
addss %xmm1, %xmm0
movss 0x28(%rdi), %xmm1
mulss 0x20(%rsi), %xmm1
addss %xmm0, %xmm1
movss 0x2c(%rdi), %xmm0
mulss 0x30(%rsi), %xmm0
addss %xmm1, %xmm0
movss %xmm0, 0x20(%rdx)
movss 0x20(%rdi), %xmm0
movss 0x24(%rdi), %xmm1
mulss 0x14(%rsi), %xmm1
mulss 0x4(%rsi), %xmm0
addss %xmm1, %xmm0
movss 0x28(%rdi), %xmm1
mulss 0x24(%rsi), %xmm1
addss %xmm0, %xmm1
movss 0x2c(%rdi), %xmm0
mulss 0x34(%rsi), %xmm0
addss %xmm1, %xmm0
movss %xmm0, 0x24(%rdx)
movss 0x20(%rdi), %xmm0
movss 0x24(%rdi), %xmm1
mulss 0x18(%rsi), %xmm1
mulss 0x8(%rsi), %xmm0
addss %xmm1, %xmm0
movss 0x28(%rdi), %xmm1
mulss 0x28(%rsi), %xmm1
addss %xmm0, %xmm1
movss 0x2c(%rdi), %xmm0
mulss 0x38(%rsi), %xmm0
addss %xmm1, %xmm0
movss %xmm0, 0x28(%rdx)
movss 0x20(%rdi), %xmm0
movss 0x24(%rdi), %xmm1
mulss 0x1c(%rsi), %xmm1
mulss 0xc(%rsi), %xmm0
addss %xmm1, %xmm0
movss 0x28(%rdi), %xmm1
mulss 0x2c(%rsi), %xmm1
addss %xmm0, %xmm1
movss 0x2c(%rdi), %xmm0
mulss 0x3c(%rsi), %xmm0
addss %xmm1, %xmm0
movss %xmm0, 0x2c(%rdx)
movss 0x30(%rdi), %xmm0
movss 0x34(%rdi), %xmm1
mulss 0x10(%rsi), %xmm1
mulss (%rsi), %xmm0
addss %xmm1, %xmm0
movss 0x38(%rdi), %xmm1
mulss 0x20(%rsi), %xmm1
addss %xmm0, %xmm1
movss 0x3c(%rdi), %xmm0
mulss 0x30(%rsi), %xmm0
addss %xmm1, %xmm0
movss %xmm0, 0x30(%rdx)
movss 0x30(%rdi), %xmm0
movss 0x34(%rdi), %xmm1
mulss 0x14(%rsi), %xmm1
mulss 0x4(%rsi), %xmm0
addss %xmm1, %xmm0
movss 0x38(%rdi), %xmm1
mulss 0x24(%rsi), %xmm1
addss %xmm0, %xmm1
movss 0x3c(%rdi), %xmm0
mulss 0x34(%rsi), %xmm0
addss %xmm1, %xmm0
movss %xmm0, 0x34(%rdx)
movss 0x30(%rdi), %xmm0
movss 0x34(%rdi), %xmm1
mulss 0x18(%rsi), %xmm1
mulss 0x8(%rsi), %xmm0
addss %xmm1, %xmm0
movss 0x38(%rdi), %xmm1
mulss 0x28(%rsi), %xmm1
addss %xmm0, %xmm1
movss 0x3c(%rdi), %xmm0
mulss 0x38(%rsi), %xmm0
addss %xmm1, %xmm0
movss %xmm0, 0x38(%rdx)
movss 0x30(%rdi), %xmm0
movss 0x34(%rdi), %xmm1
mulss 0x1c(%rsi), %xmm1
mulss 0xc(%rsi), %xmm0
addss %xmm1, %xmm0
movss 0x38(%rdi), %xmm1
mulss 0x2c(%rsi), %xmm1
addss %xmm0, %xmm1
movss 0x3c(%rdi), %xmm0
mulss 0x3c(%rsi), %xmm0
addss %xmm1, %xmm0
movss %xmm0, 0x3c(%rdx)
retq