Declaration vs definition argument order in XEmitter
Nemoumbra opened this issue · 1 comments
Nemoumbra commented
Game or games this happens in
What area of the game / PPSSPP
The following functions from the XEmitter class have mismatching declarations/definitions: WriteModRM, DPPS, VMOVHPD, VMOVLPS, VMOVLPD.
For instance,
// x64Emitter.h
void VMOVLPS(X64Reg regOp2, X64Reg regOp1, OpArg arg); // <-- note how it says "reg2", then "reg1"
// x64Emitter.cpp
void XEmitter::VMOVLPS(X64Reg regOp1, X64Reg regOp2, OpArg arg) { // <-- note how it says "reg1", then "reg2"
_assert_msg_(!arg.IsSimpleReg(), "VMOVLPS cannot be used for registers");
WriteAVXOp(0, 0x00, sseMOVLPfromRM, regOp1, regOp2, arg);
}Found by CppCheck.
What should happen
Please investigate all these methods, decide on the correct signatures for them and check if there are bugs in JIT due to these inconsistencies.
Logs
No response
Platform
Windows
Mobile device model or graphics card (GPU)
PPSSPP version affected
Last working version
No response
Graphics backend (3D API)
Vulkan
Checklist
- Test in the latest git build in case it's already fixed.
- Search for other reports of the same issue.
- Try resetting settings or older versions and include if the issue is related.
- Try without any cheats and without loading any save states.
- Include logs or screenshots of issue.
hrydgard commented
I'll fix the header, it seems the actual implementations in the cpp file are consistently the correct ones.