// File: /workspace/github_c_makefile_star2_O2/AlexCharlton[P]Hyperscene/hypermath/src/hypermath.c
// Function: hpmMultMat4
void hpmMultMat4(const float *matA, const float *matB, float *result){
    HPMmat4 *a = (HPMmat4 *) matA;
    HPMmat4 *b = (HPMmat4 *) matB;
    HPMmat4 *r = (HPMmat4 *) result;
    r->_11 = a->_11*b->_11 + a->_12*b->_21 + a->_13*b->_31 + a->_14*b->_41;
    r->_12 = a->_11*b->_12 + a->_12*b->_22 + a->_13*b->_32 + a->_14*b->_42;
    r->_13 = a->_11*b->_13 + a->_12*b->_23 + a->_13*b->_33 + a->_14*b->_43;
    r->_14 = a->_11*b->_14 + a->_12*b->_24 + a->_13*b->_34 + a->_14*b->_44;

    r->_21 = a->_21*b->_11 + a->_22*b->_21 + a->_23*b->_31 + a->_24*b->_41;
    r->_22 = a->_21*b->_12 + a->_22*b->_22 + a->_23*b->_32 + a->_24*b->_42;
    r->_23 = a->_21*b->_13 + a->_22*b->_23 + a->_23*b->_33 + a->_24*b->_43;
    r->_24 = a->_21*b->_14 + a->_22*b->_24 + a->_23*b->_34 + a->_24*b->_44;

    r->_31 = a->_31*b->_11 + a->_32*b->_21 + a->_33*b->_31 + a->_34*b->_41;
    r->_32 = a->_31*b->_12 + a->_32*b->_22 + a->_33*b->_32 + a->_34*b->_42;
    r->_33 = a->_31*b->_13 + a->_32*b->_23 + a->_33*b->_33 + a->_34*b->_43;
    r->_34 = a->_31*b->_14 + a->_32*b->_24 + a->_33*b->_34 + a->_34*b->_44;

    r->_41 = a->_41*b->_11 + a->_42*b->_21 + a->_43*b->_31 + a->_44*b->_41;
    r->_42 = a->_41*b->_12 + a->_42*b->_22 + a->_43*b->_32 + a->_44*b->_42;
    r->_43 = a->_41*b->_13 + a->_42*b->_23 + a->_43*b->_33 + a->_44*b->_43;
    r->_44 = a->_41*b->_14 + a->_42*b->_24 + a->_43*b->_34 + a->_44*b->_44;
}

// Assembly:
subq $0x58, %rsp
movss (%rdi), %xmm1
movss 0x10(%rdi), %xmm3
movaps %xmm3, -0x60(%rsp)
movss 0x4(%rsi), %xmm0
movss 0x8(%rsi), %xmm2
mulss (%rsi), %xmm1
mulss %xmm0, %xmm3
addss %xmm3, %xmm1
movss 0x20(%rdi), %xmm3
movaps %xmm3, -0x50(%rsp)
mulss %xmm2, %xmm3
addss %xmm1, %xmm3
movss 0x30(%rdi), %xmm4
movaps %xmm4, -0x70(%rsp)
movss 0xc(%rsi), %xmm1
mulss %xmm1, %xmm4
addss %xmm3, %xmm4
movss %xmm4, (%rdx)
movss 0x14(%rsi), %xmm13
movss 0x18(%rsi), %xmm3
movss 0x1c(%rsi), %xmm11
movss 0x24(%rsi), %xmm4
movaps %xmm4, -0x10(%rsp)
movss 0x28(%rsi), %xmm4
movaps %xmm4, (%rsp)
movss (%rsi), %xmm9
movss 0x14(%rdi), %xmm10
mulss %xmm10, %xmm0
movss 0x4(%rdi), %xmm4
mulss %xmm9, %xmm4
addss %xmm0, %xmm4
movss 0x24(%rdi), %xmm12
movaps %xmm12, %xmm0
mulss %xmm2, %xmm0
addss %xmm4, %xmm0
movss 0x34(%rdi), %xmm4
movss %xmm4, -0x74(%rsp)
mulss %xmm1, %xmm4
addss %xmm0, %xmm4
movss 0x2c(%rsi), %xmm5
movss 0x34(%rsi), %xmm0
movaps %xmm0, 0x10(%rsp)
movss 0x38(%rsi), %xmm0
movaps %xmm0, 0x30(%rsp)
movss 0x3c(%rsi), %xmm0
movaps %xmm0, 0x40(%rsp)
movss 0x10(%rsi), %xmm15
movss (%rdi), %xmm7
movaps %xmm7, -0x30(%rsp)
movss 0x20(%rsi), %xmm0
movaps %xmm0, -0x20(%rsp)
movss 0x30(%rsi), %xmm0
movaps %xmm0, 0x20(%rsp)
movss %xmm4, 0x4(%rdx)
movss 0x18(%rdi), %xmm4
movss 0x4(%rsi), %xmm0
movaps %xmm4, %xmm6
mulss %xmm0, %xmm6
movss 0x8(%rdi), %xmm8
mulss %xmm9, %xmm8
addss %xmm6, %xmm8
movss 0x28(%rdi), %xmm14
mulss %xmm14, %xmm2
addss %xmm8, %xmm2
movss 0x38(%rdi), %xmm8
movss %xmm8, -0x7c(%rsp)
mulss %xmm1, %xmm8
addss %xmm2, %xmm8
movss 0x4(%rdi), %xmm6
movss %xmm8, 0x8(%rdx)
movss 0x1c(%rdi), %xmm2
movaps %xmm2, %xmm8
unpcklps -0x60(%rsp), %xmm8      # xmm8 = xmm8[0],mem[0],xmm8[1],mem[1]
mulss %xmm13, %xmm10
unpcklps %xmm13, %xmm0           # xmm0 = xmm0[0],xmm13[0],xmm0[1],xmm13[1]
mulps %xmm8, %xmm0
unpcklps %xmm15, %xmm9           # xmm9 = xmm9[0],xmm15[0],xmm9[1],xmm15[1]
movss 0xc(%rdi), %xmm8
unpcklps %xmm7, %xmm8            # xmm8 = xmm8[0],xmm7[0],xmm8[1],xmm7[1]
mulps %xmm8, %xmm9
addps %xmm0, %xmm9
movss 0x2c(%rdi), %xmm15
movaps %xmm15, -0x60(%rsp)
unpcklps -0x50(%rsp), %xmm15     # xmm15 = xmm15[0],mem[0],xmm15[1],mem[1]
movss 0x8(%rsi), %xmm0
unpcklps %xmm3, %xmm0            # xmm0 = xmm0[0],xmm3[0],xmm0[1],xmm3[1]
mulps %xmm15, %xmm0
addps %xmm9, %xmm0
movss 0x3c(%rdi), %xmm8
movaps %xmm8, -0x50(%rsp)
unpcklps -0x70(%rsp), %xmm8      # xmm8 = xmm8[0],mem[0],xmm8[1],mem[1]
movaps %xmm8, -0x70(%rsp)
unpcklps %xmm11, %xmm1           # xmm1 = xmm1[0],xmm11[0],xmm1[1],xmm11[1]
mulps %xmm8, %xmm1
addps %xmm0, %xmm1
movss 0x8(%rdi), %xmm13
movlps %xmm1, 0xc(%rdx)
movss 0x10(%rsi), %xmm0
movaps %xmm6, %xmm1
mulss %xmm0, %xmm1
addss %xmm10, %xmm1
movaps %xmm12, %xmm7
mulss %xmm3, %xmm7
addss %xmm1, %xmm7
movss -0x74(%rsp), %xmm8
movaps %xmm8, %xmm1
mulss %xmm11, %xmm1
addss %xmm7, %xmm1
movss 0x10(%rdi), %xmm9
movaps %xmm9, -0x40(%rsp)
movss %xmm1, 0x14(%rdx)
movss 0x14(%rsi), %xmm7
mulss %xmm7, %xmm4
movaps %xmm13, %xmm1
mulss %xmm0, %xmm1
addss %xmm4, %xmm1
mulss %xmm14, %xmm3
addss %xmm1, %xmm3
movss -0x7c(%rsp), %xmm1
mulss %xmm11, %xmm1
addss %xmm3, %xmm1
movss 0x14(%rdi), %xmm3
movss %xmm3, -0x78(%rsp)
movss %xmm1, 0x18(%rdx)
unpcklps %xmm9, %xmm2            # xmm2 = xmm2[0],xmm9[0],xmm2[1],xmm9[1]
movaps -0x10(%rsp), %xmm3
unpcklps %xmm3, %xmm7            # xmm7 = xmm7[0],xmm3[0],xmm7[1],xmm3[1]
mulps %xmm2, %xmm7
movss 0xc(%rdi), %xmm9
movaps %xmm9, %xmm4
unpcklps -0x30(%rsp), %xmm4      # xmm4 = xmm4[0],mem[0],xmm4[1],mem[1]
unpcklps -0x20(%rsp), %xmm0      # xmm0 = xmm0[0],mem[0],xmm0[1],mem[1]
mulps %xmm4, %xmm0
addps %xmm7, %xmm0
movss 0x18(%rsi), %xmm2
movaps (%rsp), %xmm1
unpcklps %xmm1, %xmm2            # xmm2 = xmm2[0],xmm1[0],xmm2[1],xmm1[1]
mulps %xmm15, %xmm2
addps %xmm0, %xmm2
unpcklps %xmm5, %xmm11           # xmm11 = xmm11[0],xmm5[0],xmm11[1],xmm5[1]
movaps -0x70(%rsp), %xmm15
mulps %xmm15, %xmm11
addps %xmm2, %xmm11
movss 0x18(%rdi), %xmm10
movlps %xmm11, 0x1c(%rdx)
movss -0x78(%rsp), %xmm2
mulss %xmm2, %xmm3
movss 0x20(%rsi), %xmm11
movaps %xmm6, %xmm7
mulss %xmm11, %xmm7
addss %xmm3, %xmm7
mulss %xmm1, %xmm12
addss %xmm7, %xmm12
movaps %xmm8, %xmm0
movaps %xmm8, %xmm3
mulss %xmm5, %xmm0
addss %xmm12, %xmm0
movss 0x20(%rdi), %xmm7
movss %xmm0, 0x24(%rdx)
movss 0x24(%rsi), %xmm8
movaps %xmm10, %xmm0
mulss %xmm8, %xmm0
movaps %xmm13, %xmm12
mulss %xmm11, %xmm12
addss %xmm0, %xmm12
mulss %xmm1, %xmm14
addss %xmm12, %xmm14
movss -0x7c(%rsp), %xmm0
mulss %xmm5, %xmm0
addss %xmm14, %xmm0
movss 0x24(%rdi), %xmm12
movss %xmm0, 0x28(%rdx)
movss 0x1c(%rdi), %xmm0
movaps %xmm0, %xmm14
unpcklps -0x40(%rsp), %xmm14     # xmm14 = xmm14[0],mem[0],xmm14[1],mem[1]
movaps 0x10(%rsp), %xmm1
mulss %xmm1, %xmm2
unpcklps %xmm1, %xmm8            # xmm8 = xmm8[0],xmm1[0],xmm8[1],xmm1[1]
mulps %xmm14, %xmm8
unpcklps 0x20(%rsp), %xmm11      # xmm11 = xmm11[0],mem[0],xmm11[1],mem[1]
mulps %xmm4, %xmm11
addps %xmm8, %xmm11
movaps -0x60(%rsp), %xmm1
unpcklps %xmm7, %xmm1            # xmm1 = xmm1[0],xmm7[0],xmm1[1],xmm7[1]
movss 0x28(%rsi), %xmm4
movaps 0x30(%rsp), %xmm8
unpcklps %xmm8, %xmm4            # xmm4 = xmm4[0],xmm8[0],xmm4[1],xmm8[1]
mulps %xmm1, %xmm4
addps %xmm11, %xmm4
movaps 0x40(%rsp), %xmm7
unpcklps %xmm7, %xmm5            # xmm5 = xmm5[0],xmm7[0],xmm5[1],xmm7[1]
mulps %xmm15, %xmm5
addps %xmm4, %xmm5
movaps %xmm8, %xmm4
mulss %xmm8, %xmm12
mulss 0x28(%rdi), %xmm4
movaps %xmm4, %xmm8
movlps %xmm5, 0x2c(%rdx)
movss 0x30(%rsi), %xmm4
mulss %xmm4, %xmm6
addss %xmm2, %xmm6
addss %xmm12, %xmm6
mulss %xmm7, %xmm3
addss %xmm6, %xmm3
movss %xmm3, 0x34(%rdx)
movss 0x34(%rsi), %xmm3
mulss %xmm3, %xmm10
mulss %xmm4, %xmm13
addss %xmm10, %xmm13
addss %xmm8, %xmm13
movss -0x7c(%rsp), %xmm1
mulss %xmm7, %xmm1
addss %xmm13, %xmm1
movss %xmm1, 0x38(%rdx)
mulss %xmm0, %xmm3
mulss %xmm4, %xmm9
addss %xmm3, %xmm9
movss 0x2c(%rdi), %xmm0
mulss 0x38(%rsi), %xmm0
addss %xmm9, %xmm0
movaps -0x50(%rsp), %xmm1
mulss %xmm7, %xmm1
addss %xmm0, %xmm1
movss %xmm1, 0x3c(%rdx)
addq $0x58, %rsp
retq