hrydgard/ppsspp

Declaration vs definition argument order in XEmitter

Nemoumbra opened this issue · 1 comments

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.

I'll fix the header, it seems the actual implementations in the cpp file are consistently the correct ones.