Armjit: Combine mul.s + neg.s to VNMUL. Implement VNMUL, VNMLA, VNMLS.
I had implemented mul.s + add/sub.s + add/sub.s -> VADD/VSUB + V(N)ML(A/S). Turns out it doesn't happen enough though (once or twice per game).
project file fix: Set LTCG to default, as suggested in #2138.
Return a more accurate mpeg ringbuffer decode pos.
Don't allow sceMpegInit() twice.
Delay sceMpegCreate() a bit to match PSP firmware.
Apparently, return 1 is not needed now.  Hurray.
Don't read more than total packets per mpeg put.

And add notes on how it's supposed to really work.
Make sure to decode reordered mpeg frames.
Set video end only when we run out of frames.
Don't use m_pFrame->pkt_duration directly.

Docs say you're supposed to call this func instead.
Cut down on void *'s for easier debugging.

Nice to be able to see inside structs with the debugger.
Try to handle video end more correctly.
Calculate packets left based on decode, not read.

This seems to be more correct.  Fixes #2039.
Fix crash in sceKernelGetThreadmanIdType().
Detect audio end separately from video end.

Fixes Crisis Core, broken by Wipeout Pure fix.
Merge pull request #2143 from unknownbrackets/mpeg-fix

Improvements to sceMpeg: fix end cutoff, early audio end, and minor
Invalidate GPU cache in sceDmacMemcpy().
Invalidate FBOs when it's obvious they should be.

This fixes videos not being visible in for example Star Ocean.
Most likely any games doing a copy directly from the mpeg decode.
PSP can decode directly to vram, so detect that.

Not sure if any games do this but I did it in a test.
Merge pull request #2145 from unknownbrackets/fbo-invalidate

Invalidate FBOs when written to a bit more