// File: /workspace/github_cpp_makefile_star2_O1/misohena[P]drawstars/./vmath.h
// Function: Mat4<float> operator*<float>(Mat4<float> const&, Mat4<float> const&)
Mat4<T> operator*(const Mat4<T> &lhs, const Mat4<T> &rhs)
{
    return Mat4<T>(
        lhs.e00*rhs.e00 + lhs.e01*rhs.e10 + lhs.e02*rhs.e20 + lhs.e03*rhs.e30,
        lhs.e10*rhs.e00 + lhs.e11*rhs.e10 + lhs.e12*rhs.e20 + lhs.e13*rhs.e30,
        lhs.e20*rhs.e00 + lhs.e21*rhs.e10 + lhs.e22*rhs.e20 + lhs.e23*rhs.e30,
        lhs.e30*rhs.e00 + lhs.e31*rhs.e10 + lhs.e32*rhs.e20 + lhs.e33*rhs.e30,

        lhs.e00*rhs.e01 + lhs.e01*rhs.e11 + lhs.e02*rhs.e21 + lhs.e03*rhs.e31,
        lhs.e10*rhs.e01 + lhs.e11*rhs.e11 + lhs.e12*rhs.e21 + lhs.e13*rhs.e31,
        lhs.e20*rhs.e01 + lhs.e21*rhs.e11 + lhs.e22*rhs.e21 + lhs.e23*rhs.e31,
        lhs.e30*rhs.e01 + lhs.e31*rhs.e11 + lhs.e32*rhs.e21 + lhs.e33*rhs.e31,

        lhs.e00*rhs.e02 + lhs.e01*rhs.e12 + lhs.e02*rhs.e22 + lhs.e03*rhs.e32,
        lhs.e10*rhs.e02 + lhs.e11*rhs.e12 + lhs.e12*rhs.e22 + lhs.e13*rhs.e32,
        lhs.e20*rhs.e02 + lhs.e21*rhs.e12 + lhs.e22*rhs.e22 + lhs.e23*rhs.e32,
        lhs.e30*rhs.e02 + lhs.e31*rhs.e12 + lhs.e32*rhs.e22 + lhs.e33*rhs.e32,

        lhs.e00*rhs.e03 + lhs.e01*rhs.e13 + lhs.e02*rhs.e23 + lhs.e03*rhs.e33,
        lhs.e10*rhs.e03 + lhs.e11*rhs.e13 + lhs.e12*rhs.e23 + lhs.e13*rhs.e33,
        lhs.e20*rhs.e03 + lhs.e21*rhs.e13 + lhs.e22*rhs.e23 + lhs.e23*rhs.e33,
        lhs.e30*rhs.e03 + lhs.e31*rhs.e13 + lhs.e32*rhs.e23 + lhs.e33*rhs.e33);
}

// Assembly:
movq %rdi, %rax
movups (%rdx), %xmm9
movups 0x4(%rdx), %xmm3
movups 0x8(%rdx), %xmm8
movups 0xc(%rdx), %xmm0
movups 0x10(%rdx), %xmm14
movups 0x14(%rdx), %xmm15
movups 0x18(%rdx), %xmm11
movups 0x1c(%rdx), %xmm12
movups 0x20(%rdx), %xmm7
movups 0x24(%rdx), %xmm10
movups 0x28(%rdx), %xmm4
movups 0x2c(%rdx), %xmm5
movups 0x30(%rdx), %xmm1
shufps $0x0, %xmm3, %xmm3      # xmm3 = xmm3[0,0,0,0]
movups (%rsi), %xmm13
movaps %xmm13, -0x18(%rsp)
movups 0x10(%rsi), %xmm6
movups 0x20(%rsi), %xmm2
mulps %xmm6, %xmm3
shufps $0x0, %xmm9, %xmm9      # xmm9 = xmm9[0,0,0,0]
mulps %xmm13, %xmm9
addps %xmm3, %xmm9
movups 0x30(%rsi), %xmm3
shufps $0x0, %xmm8, %xmm8      # xmm8 = xmm8[0,0,0,0]
mulps %xmm2, %xmm8
addps %xmm9, %xmm8
shufps $0x0, %xmm0, %xmm0      # xmm0 = xmm0[0,0,0,0]
mulps %xmm3, %xmm0
addps %xmm8, %xmm0
movss 0x34(%rdx), %xmm13
movss 0x38(%rdx), %xmm8
movss 0x3c(%rdx), %xmm9
movups %xmm0, (%rdi)
shufps $0x0, %xmm15, %xmm15    # xmm15 = xmm15[0,0,0,0]
mulps %xmm6, %xmm15
shufps $0x0, %xmm14, %xmm14    # xmm14 = xmm14[0,0,0,0]
movaps -0x18(%rsp), %xmm0
mulps %xmm0, %xmm14
addps %xmm15, %xmm14
shufps $0x0, %xmm11, %xmm11    # xmm11 = xmm11[0,0,0,0]
mulps %xmm2, %xmm11
addps %xmm14, %xmm11
shufps $0x0, %xmm12, %xmm12    # xmm12 = xmm12[0,0,0,0]
mulps %xmm3, %xmm12
addps %xmm11, %xmm12
movups %xmm12, 0x10(%rdi)
shufps $0x0, %xmm10, %xmm10    # xmm10 = xmm10[0,0,0,0]
mulps %xmm6, %xmm10
shufps $0x0, %xmm7, %xmm7      # xmm7 = xmm7[0,0,0,0]
mulps %xmm0, %xmm7
addps %xmm10, %xmm7
shufps $0x0, %xmm4, %xmm4      # xmm4 = xmm4[0,0,0,0]
mulps %xmm2, %xmm4
addps %xmm7, %xmm4
shufps $0x0, %xmm5, %xmm5      # xmm5 = xmm5[0,0,0,0]
mulps %xmm3, %xmm5
addps %xmm4, %xmm5
movups %xmm5, 0x20(%rdi)
shufps $0x0, %xmm13, %xmm13    # xmm13 = xmm13[0,0,0,0]
mulps %xmm6, %xmm13
shufps $0x0, %xmm1, %xmm1      # xmm1 = xmm1[0,0,0,0]
mulps %xmm0, %xmm1
addps %xmm13, %xmm1
shufps $0x0, %xmm8, %xmm8      # xmm8 = xmm8[0,0,0,0]
mulps %xmm2, %xmm8
addps %xmm1, %xmm8
shufps $0x0, %xmm9, %xmm9      # xmm9 = xmm9[0,0,0,0]
mulps %xmm3, %xmm9
addps %xmm8, %xmm9
movups %xmm9, 0x30(%rdi)
retq