Fix broken C version of MulMatricesC

Me and cxd4 (Hatcat/mephostophilis) stumbled upon this while backporting some stuff to the libretro version.

The C version of MulMatricesC appears to be totally broken. I guess this went unnoticed before because it would default to the SSE2 codepath version on regular desktops.

Read the explanation by cxd4 here:

https://github.com/libretro/mupen64plus-libretro/pull/159

' repairs were made to the ANSI C code which had broken texture elements in the backgrounds of games like Super Mario 64. In addition, the new ANSI C function is written in vectorized loop style, such that GCC can very easily create the SSE instructions relevant to said loops in a manner perhaps more optimized than the original SSE-fixed code.'
A fair question.  I will check it now, but I anticipate the answer is that it will give the same result.

And yes, _"readability over performance"_ is a good, slow but steady way to ultimately achieve better performance.  I agree about prioritizing that over performance or premature optimization. :) That, and future developers understand the key to each algorithm like you said.  Forcing non-portable code or prematurely optimizing for a limited span of targets (e.g. always use SSE intrinsics) generally worked better in the long run for closed-source projects or those that don't fully appreciate some benefits of open-source.

So if we convert those 4 separate loops I wrote into one single loop as you implied, GCC yields:  the exact same output for both methods!  So yes, your method of changing my loop produces the exact same output within almost certainly any compiler intelligent enough to vectorize them in the first place.  To be more specific, the output it produces is:
`movss   xmm0, DWORD PTR leftrow`
`shufps  xmm0, xmm0, 0`
`mulps   xmm0, XMMWORD PTR row`
`movaps  XMMWORD PTR summand, xmm0`
`movss   xmm0, DWORD PTR leftrow+4`
`shufps  xmm0, xmm0, 0`
`mulps   xmm0, XMMWORD PTR row+16`
`movaps  XMMWORD PTR summand+16, xmm0`
`movss   xmm0, DWORD PTR leftrow+8`
`shufps  xmm0, xmm0, 0`
`mulps   xmm0, XMMWORD PTR row+32`
`movaps  XMMWORD PTR summand+32, xmm0`
`movss   xmm0, DWORD PTR leftrow+12`
`shufps  xmm0, xmm0, 0`
`mulps   xmm0, XMMWORD PTR row+48`
`movaps  XMMWORD PTR summand+48, xmm0`
`ret`

As to whether I'd prefer my method of writing the loops or your method of unifying them in a single loop, they both look good to me.  Yours is probably better for organizing the same "type" of operation going on within its own body of its own loop; mine mostly just focuses on representing each SIMD instruction in C loop form for each individual one, with only a theoretically better chance at enforcing the vectorization individually.  It's a hard syntactical habit of mine for me to break.

But there is also an option C) here as well if you are interested:  You could also do--
`int j, k;`
`for (k = 0; k < 4; k++)`
`    for (j = 0; j < 4; j++)`
`        summand[k][j] = leftrow[k] * row[k][j];`