mirror of
https://github.com/cemu-project/Cemu.git
synced 2025-07-09 00:11:17 +12:00
Fix compilation on GCC and other Linux fixes (#80)
This commit is contained in:
parent
96dcc7c82e
commit
454b587e36
43 changed files with 339 additions and 292 deletions
|
@ -345,20 +345,20 @@ typedef struct
|
|||
PPCRecFunction_t* ppcRecompilerFuncTable[PPC_REC_ALIGN_TO_4MB(PPC_REC_CODE_AREA_SIZE/4)]; // one virtual-function pointer for each potential ppc instruction
|
||||
PPCREC_JUMP_ENTRY ppcRecompilerDirectJumpTable[PPC_REC_ALIGN_TO_4MB(PPC_REC_CODE_AREA_SIZE/4)]; // lookup table for ppc offset to native code function
|
||||
// x64 data
|
||||
uint64 __declspec(align(16)) _x64XMM_xorNegateMaskBottom[2];
|
||||
uint64 __declspec(align(16)) _x64XMM_xorNegateMaskPair[2];
|
||||
uint64 __declspec(align(16)) _x64XMM_xorNOTMask[2];
|
||||
uint64 __declspec(align(16)) _x64XMM_andAbsMaskBottom[2];
|
||||
uint64 __declspec(align(16)) _x64XMM_andAbsMaskPair[2];
|
||||
uint32 __declspec(align(16)) _x64XMM_andFloatAbsMaskBottom[4];
|
||||
uint64 __declspec(align(16)) _x64XMM_singleWordMask[2];
|
||||
double __declspec(align(16)) _x64XMM_constDouble1_1[2];
|
||||
double __declspec(align(16)) _x64XMM_constDouble0_0[2];
|
||||
float __declspec(align(16)) _x64XMM_constFloat0_0[2];
|
||||
float __declspec(align(16)) _x64XMM_constFloat1_1[2];
|
||||
float __declspec(align(16)) _x64XMM_constFloatMin[2];
|
||||
uint32 __declspec(align(16)) _x64XMM_flushDenormalMask1[4];
|
||||
uint32 __declspec(align(16)) _x64XMM_flushDenormalMaskResetSignBits[4];
|
||||
alignas(16) uint64 _x64XMM_xorNegateMaskBottom[2];
|
||||
alignas(16) uint64 _x64XMM_xorNegateMaskPair[2];
|
||||
alignas(16) uint64 _x64XMM_xorNOTMask[2];
|
||||
alignas(16) uint64 _x64XMM_andAbsMaskBottom[2];
|
||||
alignas(16) uint64 _x64XMM_andAbsMaskPair[2];
|
||||
alignas(16) uint32 _x64XMM_andFloatAbsMaskBottom[4];
|
||||
alignas(16) uint64 _x64XMM_singleWordMask[2];
|
||||
alignas(16) double _x64XMM_constDouble1_1[2];
|
||||
alignas(16) double _x64XMM_constDouble0_0[2];
|
||||
alignas(16) float _x64XMM_constFloat0_0[2];
|
||||
alignas(16) float _x64XMM_constFloat1_1[2];
|
||||
alignas(16) float _x64XMM_constFloatMin[2];
|
||||
alignas(16) uint32 _x64XMM_flushDenormalMask1[4];
|
||||
alignas(16) uint32 _x64XMM_flushDenormalMaskResetSignBits[4];
|
||||
// PSQ load/store scale tables
|
||||
double _psq_ld_scale_ps0_ps1[64 * 2];
|
||||
double _psq_ld_scale_ps0_1[64 * 2];
|
||||
|
@ -396,4 +396,4 @@ extern bool hasAVXSupport;
|
|||
|
||||
void PPCRecompiler_recompileIfUnvisited(uint32 enterAddress);
|
||||
void PPCRecompiler_attemptEnter(struct PPCInterpreter_t* hCPU, uint32 enterAddress);
|
||||
void PPCRecompiler_attemptEnterWithoutRecompile(struct PPCInterpreter_t* hCPU, uint32 enterAddress);
|
||||
void PPCRecompiler_attemptEnterWithoutRecompile(struct PPCInterpreter_t* hCPU, uint32 enterAddress);
|
||||
|
|
|
@ -2221,7 +2221,10 @@ void PPCRecompilerX64Gen_imlInstruction_r_name(PPCRecFunction_t* PPCRecFunction,
|
|||
else if (sprIndex == SPR_XER)
|
||||
x64Emit_mov_reg64_mem32(x64GenContext, tempToRealRegister(imlInstruction->op_r_name.registerIndex), REG_RSP, offsetof(PPCInterpreter_t, spr.XER));
|
||||
else if (sprIndex >= SPR_UGQR0 && sprIndex <= SPR_UGQR7)
|
||||
x64Emit_mov_reg64_mem32(x64GenContext, tempToRealRegister(imlInstruction->op_r_name.registerIndex), REG_RSP, offsetof(PPCInterpreter_t, spr.UGQR[sprIndex - SPR_UGQR0]));
|
||||
{
|
||||
sint32 memOffset = offsetof(PPCInterpreter_t, spr.UGQR) + sizeof(PPCInterpreter_t::spr.UGQR[0]) * (sprIndex - SPR_UGQR0);
|
||||
x64Emit_mov_reg64_mem32(x64GenContext, tempToRealRegister(imlInstruction->op_r_name.registerIndex), REG_RSP, memOffset);
|
||||
}
|
||||
else
|
||||
assert_dbg();
|
||||
//x64Emit_mov_reg64_mem32(x64GenContext, tempToRealRegister(imlInstruction->op_r_name.registerIndex), REG_RSP, offsetof(PPCInterpreter_t, spr)+sizeof(uint32)*(name-PPCREC_NAME_SPR0));
|
||||
|
@ -2247,7 +2250,10 @@ void PPCRecompilerX64Gen_imlInstruction_name_r(PPCRecFunction_t* PPCRecFunction,
|
|||
else if (sprIndex == SPR_XER)
|
||||
x64Emit_mov_mem32_reg64(x64GenContext, REG_RSP, offsetof(PPCInterpreter_t, spr.XER), tempToRealRegister(imlInstruction->op_r_name.registerIndex));
|
||||
else if (sprIndex >= SPR_UGQR0 && sprIndex <= SPR_UGQR7)
|
||||
x64Emit_mov_mem32_reg64(x64GenContext, REG_RSP, offsetof(PPCInterpreter_t, spr.UGQR[sprIndex-SPR_UGQR0]), tempToRealRegister(imlInstruction->op_r_name.registerIndex));
|
||||
{
|
||||
sint32 memOffset = offsetof(PPCInterpreter_t, spr.UGQR) + sizeof(PPCInterpreter_t::spr.UGQR[0]) * (sprIndex - SPR_UGQR0);
|
||||
x64Emit_mov_mem32_reg64(x64GenContext, REG_RSP, memOffset, tempToRealRegister(imlInstruction->op_r_name.registerIndex));
|
||||
}
|
||||
else
|
||||
assert_dbg();
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue