diff --git a/Source/Core/Common/x64Emitter.h b/Source/Core/Common/x64Emitter.h index 71dcea30f9..6953770986 100644 --- a/Source/Core/Common/x64Emitter.h +++ b/Source/Core/Common/x64Emitter.h @@ -113,8 +113,8 @@ struct OpArg // dummy op arg, used for storage constexpr OpArg() = default; constexpr OpArg(u64 offset_, int scale_, X64Reg rm_reg = RAX, X64Reg scaled_reg = RAX) - : scale{static_cast(scale_)}, offsetOrBaseReg{static_cast(rm_reg)}, - indexReg{static_cast(scaled_reg)}, offset{offset_} + : offset{offset_}, offsetOrBaseReg{static_cast(rm_reg)}, + indexReg{static_cast(scaled_reg)}, scale{static_cast(scale_)} { } constexpr bool operator==(const OpArg& b) const @@ -234,11 +234,11 @@ private: void WriteSingleByteOp(XEmitter* emit, u8 op, X64Reg operandReg, int bits); void WriteNormalOp(XEmitter* emit, bool toRM, NormalOp op, const OpArg& operand, int bits) const; - u8 scale = 0; + u64 offset = 0; // Also used to store immediates. u16 offsetOrBaseReg = 0; u16 indexReg = 0; - u64 offset = 0; // Also used to store immediates. u16 operandReg = 0; + u8 scale = 0; }; template diff --git a/Source/Core/Core/PowerPC/Jit64Common/EmuCodeBlock.cpp b/Source/Core/Core/PowerPC/Jit64Common/EmuCodeBlock.cpp index 58b34698ad..0c186d0972 100644 --- a/Source/Core/Core/PowerPC/Jit64Common/EmuCodeBlock.cpp +++ b/Source/Core/Core/PowerPC/Jit64Common/EmuCodeBlock.cpp @@ -355,7 +355,7 @@ void EmuCodeBlock::SafeLoadToReg(X64Reg reg_value, const Gen::OpArg& opAddress, { NOP(padding); } - info.len = static_cast(GetCodePtr() - info.start); + info.len = static_cast(GetCodePtr() - info.start); js.fastmemLoadStore = mov.address; return; @@ -527,7 +527,7 @@ void EmuCodeBlock::SafeWriteRegToReg(OpArg reg_value, X64Reg reg_addr, int acces { NOP(padding); } - info.len = static_cast(GetCodePtr() - info.start); + info.len = static_cast(GetCodePtr() - info.start); js.fastmemLoadStore = mov.address; diff --git a/Source/Core/Core/PowerPC/Jit64Common/TrampolineInfo.h b/Source/Core/Core/PowerPC/Jit64Common/TrampolineInfo.h index bdf1a1badd..d76d3f724f 100644 --- a/Source/Core/Core/PowerPC/Jit64Common/TrampolineInfo.h +++ b/Source/Core/Core/PowerPC/Jit64Common/TrampolineInfo.h @@ -16,21 +16,7 @@ struct TrampolineInfo final u8* start = nullptr; // The start + len = end of the store operation (points to the next instruction) - u32 len = 0; - - // The PPC PC for the current load/store block - u32 pc = 0; - - // Saved because we need these to make the ABI call in the trampoline - BitSet32 registersInUse{}; - - // The MOV operation - Gen::X64Reg nonAtomicSwapStoreSrc{}; - - // src/dest for load/store - s32 offset = 0; - Gen::X64Reg op_reg{}; - Gen::OpArg op_arg{}; + u16 len = 0; // Original SafeLoadXXX/SafeStoreXXX flags u8 flags = 0; @@ -46,4 +32,18 @@ struct TrampolineInfo final // Set to true if we added the offset to the address and need to undo it bool offsetAddedToAddress : 1 = false; + + // The PPC PC for the current load/store block + u32 pc = 0; + + // Saved because we need these to make the ABI call in the trampoline + BitSet32 registersInUse{}; + + // The MOV operation + Gen::X64Reg nonAtomicSwapStoreSrc{}; + + // src/dest for load/store + s32 offset = 0; + Gen::X64Reg op_reg{}; + Gen::OpArg op_arg{}; };