{project64] Move compiling load/store instructions in to x86/x86RecompilerOps.cpp
This commit is contained in:
parent
97816b15c9
commit
c8cd2914a6
|
@ -483,11 +483,11 @@ R4300iOp::Func * R4300iOp::BuildInterpreter()
|
|||
Jump_CoP1_S[7] = COP1_S_NEG;
|
||||
Jump_CoP1_S[8] = COP1_S_ROUND_L;
|
||||
Jump_CoP1_S[9] = COP1_S_TRUNC_L;
|
||||
Jump_CoP1_S[10] = COP1_S_CEIL_L; //added by Witten
|
||||
Jump_CoP1_S[11] = COP1_S_FLOOR_L; //added by Witten
|
||||
Jump_CoP1_S[10] = COP1_S_CEIL_L;
|
||||
Jump_CoP1_S[11] = COP1_S_FLOOR_L;
|
||||
Jump_CoP1_S[12] = COP1_S_ROUND_W;
|
||||
Jump_CoP1_S[13] = COP1_S_TRUNC_W;
|
||||
Jump_CoP1_S[14] = COP1_S_CEIL_W; //added by Witten
|
||||
Jump_CoP1_S[14] = COP1_S_CEIL_W;
|
||||
Jump_CoP1_S[15] = COP1_S_FLOOR_W;
|
||||
Jump_CoP1_S[16] = UnknownOpcode;
|
||||
Jump_CoP1_S[17] = UnknownOpcode;
|
||||
|
@ -547,13 +547,13 @@ R4300iOp::Func * R4300iOp::BuildInterpreter()
|
|||
Jump_CoP1_D[6] = COP1_D_MOV;
|
||||
Jump_CoP1_D[7] = COP1_D_NEG;
|
||||
Jump_CoP1_D[8] = COP1_D_ROUND_L;
|
||||
Jump_CoP1_D[9] = COP1_D_TRUNC_L; //added by Witten
|
||||
Jump_CoP1_D[10] = COP1_D_CEIL_L; //added by Witten
|
||||
Jump_CoP1_D[11] = COP1_D_FLOOR_L; //added by Witten
|
||||
Jump_CoP1_D[9] = COP1_D_TRUNC_L;
|
||||
Jump_CoP1_D[10] = COP1_D_CEIL_L;
|
||||
Jump_CoP1_D[11] = COP1_D_FLOOR_L;
|
||||
Jump_CoP1_D[12] = COP1_D_ROUND_W;
|
||||
Jump_CoP1_D[13] = COP1_D_TRUNC_W;
|
||||
Jump_CoP1_D[14] = COP1_D_CEIL_W; //added by Witten
|
||||
Jump_CoP1_D[15] = COP1_D_FLOOR_W; //added by Witten
|
||||
Jump_CoP1_D[14] = COP1_D_CEIL_W;
|
||||
Jump_CoP1_D[15] = COP1_D_FLOOR_W;
|
||||
Jump_CoP1_D[16] = UnknownOpcode;
|
||||
Jump_CoP1_D[17] = UnknownOpcode;
|
||||
Jump_CoP1_D[18] = UnknownOpcode;
|
||||
|
@ -2474,13 +2474,13 @@ void R4300iOp::COP1_S_TRUNC_L()
|
|||
}
|
||||
|
||||
void R4300iOp::COP1_S_CEIL_L()
|
||||
{ //added by Witten
|
||||
{
|
||||
TEST_COP1_USABLE_EXCEPTION();
|
||||
Float_RoundToInteger64(&*(int64_t *)_FPR_D[m_Opcode.fd], &*(float *)_FPR_S[m_Opcode.fs], FE_UPWARD);
|
||||
}
|
||||
|
||||
void R4300iOp::COP1_S_FLOOR_L()
|
||||
{ //added by Witten
|
||||
{
|
||||
TEST_COP1_USABLE_EXCEPTION();
|
||||
Float_RoundToInteger64(&*(int64_t *)_FPR_D[m_Opcode.fd], &*(float *)_FPR_S[m_Opcode.fs], FE_DOWNWARD);
|
||||
}
|
||||
|
@ -2498,7 +2498,7 @@ void R4300iOp::COP1_S_TRUNC_W()
|
|||
}
|
||||
|
||||
void R4300iOp::COP1_S_CEIL_W()
|
||||
{ //added by Witten
|
||||
{
|
||||
TEST_COP1_USABLE_EXCEPTION();
|
||||
Float_RoundToInteger32(&*(int32_t *)_FPR_S[m_Opcode.fd], &*(float *)_FPR_S[m_Opcode.fs], FE_UPWARD);
|
||||
}
|
||||
|
@ -2665,19 +2665,19 @@ void R4300iOp::COP1_D_ROUND_L()
|
|||
}
|
||||
|
||||
void R4300iOp::COP1_D_TRUNC_L()
|
||||
{ //added by Witten
|
||||
{
|
||||
TEST_COP1_USABLE_EXCEPTION();
|
||||
Double_RoundToInteger64(&*(uint64_t *)_FPR_S[m_Opcode.fd], &*(double *)_FPR_D[m_Opcode.fs], FE_TOWARDZERO);
|
||||
}
|
||||
|
||||
void R4300iOp::COP1_D_CEIL_L()
|
||||
{ //added by Witten
|
||||
{
|
||||
TEST_COP1_USABLE_EXCEPTION();
|
||||
Double_RoundToInteger64(&*(uint64_t *)_FPR_S[m_Opcode.fd], &*(double *)_FPR_D[m_Opcode.fs], FE_UPWARD);
|
||||
}
|
||||
|
||||
void R4300iOp::COP1_D_FLOOR_L()
|
||||
{ //added by Witten
|
||||
{
|
||||
TEST_COP1_USABLE_EXCEPTION();
|
||||
Double_RoundToInteger64(&*(uint64_t *)_FPR_D[m_Opcode.fd], &*(double *)_FPR_S[m_Opcode.fs], FE_DOWNWARD);
|
||||
}
|
||||
|
@ -2695,13 +2695,13 @@ void R4300iOp::COP1_D_TRUNC_W()
|
|||
}
|
||||
|
||||
void R4300iOp::COP1_D_CEIL_W()
|
||||
{ //added by Witten
|
||||
{
|
||||
TEST_COP1_USABLE_EXCEPTION();
|
||||
Double_RoundToInteger32(&*(uint32_t *)_FPR_S[m_Opcode.fd], &*(double *)_FPR_D[m_Opcode.fs], FE_UPWARD);
|
||||
}
|
||||
|
||||
void R4300iOp::COP1_D_FLOOR_W()
|
||||
{ //added by Witten
|
||||
{
|
||||
TEST_COP1_USABLE_EXCEPTION();
|
||||
Double_RoundToInteger32(&*(uint32_t *)_FPR_D[m_Opcode.fd], &*(double *)_FPR_S[m_Opcode.fs], FE_DOWNWARD);
|
||||
}
|
||||
|
|
|
@ -162,11 +162,11 @@ public:
|
|||
static void COP1_S_NEG();
|
||||
static void COP1_S_ROUND_L();
|
||||
static void COP1_S_TRUNC_L();
|
||||
static void COP1_S_CEIL_L(); //added by Witten
|
||||
static void COP1_S_FLOOR_L(); //added by Witten
|
||||
static void COP1_S_CEIL_L();
|
||||
static void COP1_S_FLOOR_L();
|
||||
static void COP1_S_ROUND_W();
|
||||
static void COP1_S_TRUNC_W();
|
||||
static void COP1_S_CEIL_W(); //added by Witten
|
||||
static void COP1_S_CEIL_W();
|
||||
static void COP1_S_FLOOR_W();
|
||||
static void COP1_S_CVT_D();
|
||||
static void COP1_S_CVT_W();
|
||||
|
@ -183,13 +183,13 @@ public:
|
|||
static void COP1_D_MOV();
|
||||
static void COP1_D_NEG();
|
||||
static void COP1_D_ROUND_L();
|
||||
static void COP1_D_TRUNC_L(); //added by Witten
|
||||
static void COP1_D_CEIL_L(); //added by Witten
|
||||
static void COP1_D_FLOOR_L(); //added by Witten
|
||||
static void COP1_D_TRUNC_L();
|
||||
static void COP1_D_CEIL_L();
|
||||
static void COP1_D_FLOOR_L();
|
||||
static void COP1_D_ROUND_W();
|
||||
static void COP1_D_TRUNC_W();
|
||||
static void COP1_D_CEIL_W(); //added by Witten
|
||||
static void COP1_D_FLOOR_W(); //added by Witten
|
||||
static void COP1_D_CEIL_W();
|
||||
static void COP1_D_FLOOR_W();
|
||||
static void COP1_D_CVT_S();
|
||||
static void COP1_D_CVT_W();
|
||||
static void COP1_D_CVT_L();
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -116,44 +116,7 @@ public:
|
|||
|
||||
//Compilation Functions
|
||||
void ResetMemoryStack();
|
||||
|
||||
void Compile_LB();
|
||||
void Compile_LBU();
|
||||
void Compile_LH();
|
||||
void Compile_LHU();
|
||||
void Compile_LW();
|
||||
void Compile_LL();
|
||||
void Compile_LWC1();
|
||||
void Compile_LWU();
|
||||
void Compile_LWL();
|
||||
void Compile_LWR();
|
||||
void Compile_LD();
|
||||
void Compile_LDC1();
|
||||
void Compile_LDL();
|
||||
void Compile_LDR();
|
||||
void Compile_SB();
|
||||
void Compile_SH();
|
||||
void Compile_SW();
|
||||
void Compile_SWL();
|
||||
void Compile_SWR();
|
||||
void Compile_SD();
|
||||
void Compile_SDL();
|
||||
void Compile_SDR();
|
||||
void Compile_SC();
|
||||
void Compile_SWC1();
|
||||
void Compile_SDC1();
|
||||
|
||||
void ResetMemoryStack(CRegInfo& RegInfo);
|
||||
void Compile_LB(CX86Ops::x86Reg Reg, uint32_t Addr, bool SignExtend);
|
||||
void Compile_LH(CX86Ops::x86Reg Reg, uint32_t Addr, bool SignExtend);
|
||||
void Compile_LW(CX86Ops::x86Reg Reg, uint32_t Addr);
|
||||
void Compile_SB_Const(uint8_t Value, uint32_t Addr);
|
||||
void Compile_SB_Register(CX86Ops::x86Reg Reg, uint32_t Addr);
|
||||
void Compile_SH_Const(uint16_t Value, uint32_t Addr);
|
||||
void Compile_SH_Register(CX86Ops::x86Reg Reg, uint32_t Addr);
|
||||
void Compile_SW_Const(uint32_t Value, uint32_t Addr);
|
||||
|
||||
void Compile_SW_Register(CX86Ops::x86Reg Reg, uint32_t Addr);
|
||||
|
||||
//Functions for TLB notification
|
||||
void TLB_Mapped(uint32_t VAddr, uint32_t Len, uint32_t PAddr, bool bReadOnly);
|
||||
|
@ -172,6 +135,7 @@ private:
|
|||
CMipsMemoryVM(const CMipsMemoryVM&); // Disable copy constructor
|
||||
CMipsMemoryVM& operator=(const CMipsMemoryVM&); // Disable assignment
|
||||
|
||||
friend CRecompilerOps;
|
||||
void Compile_LW(bool ResultSigned, bool bRecordLLbit);
|
||||
void Compile_SW(bool bCheckLLbit);
|
||||
|
||||
|
@ -187,8 +151,6 @@ private:
|
|||
bool SH_NonMemory(uint32_t PAddr, uint16_t Value);
|
||||
bool SW_NonMemory(uint32_t PAddr, uint32_t Value);
|
||||
|
||||
void Compile_StoreInstructClean(x86Reg AddressReg, int32_t Length);
|
||||
|
||||
static void Load32RDRAMRegisters(void);
|
||||
static void Load32SPRegisters(void);
|
||||
static void Load32DPCommand(void);
|
||||
|
@ -261,7 +223,6 @@ private:
|
|||
uint32_t m_HalfLine;
|
||||
uint32_t m_HalfLineCheck;
|
||||
uint32_t m_FieldSerration;
|
||||
uint32_t m_TempValue;
|
||||
|
||||
//Initializing and resetting information about the memory system
|
||||
void FreeMemory();
|
||||
|
@ -275,4 +236,5 @@ private:
|
|||
static uint32_t m_MemLookupAddress;
|
||||
static MIPS_DWORD m_MemLookupValue;
|
||||
static bool m_MemLookupValid;
|
||||
static uint32_t RegModValue;
|
||||
};
|
||||
|
|
|
@ -1125,32 +1125,32 @@ bool CCodeSection::GenerateNativeCode(uint32_t Test)
|
|||
case R4300i_BGTZL:Compile_BranchLikely(BGTZ_Compare, false); break;
|
||||
case R4300i_BLEZL:Compile_BranchLikely(BLEZ_Compare, false); break;
|
||||
case R4300i_DADDIU: DADDIU(); break;
|
||||
case R4300i_LDL: g_MMU->Compile_LDL(); break;
|
||||
case R4300i_LDR: g_MMU->Compile_LDR(); break;
|
||||
case R4300i_LB: g_MMU->Compile_LB(); break;
|
||||
case R4300i_LH: g_MMU->Compile_LH(); break;
|
||||
case R4300i_LWL: g_MMU->Compile_LWL(); break;
|
||||
case R4300i_LW: g_MMU->Compile_LW(); break;
|
||||
case R4300i_LBU: g_MMU->Compile_LBU(); break;
|
||||
case R4300i_LHU: g_MMU->Compile_LHU(); break;
|
||||
case R4300i_LWR: g_MMU->Compile_LWR(); break;
|
||||
case R4300i_LWU: g_MMU->Compile_LWU(); break; //added by Witten
|
||||
case R4300i_SB: g_MMU->Compile_SB(); break;
|
||||
case R4300i_SH: g_MMU->Compile_SH(); break;
|
||||
case R4300i_SWL: g_MMU->Compile_SWL(); break;
|
||||
case R4300i_SW: g_MMU->Compile_SW(); break;
|
||||
case R4300i_SWR: g_MMU->Compile_SWR(); break;
|
||||
case R4300i_SDL: g_MMU->Compile_SDL(); break;
|
||||
case R4300i_SDR: g_MMU->Compile_SDR(); break;
|
||||
case R4300i_LDL: LDL(); break;
|
||||
case R4300i_LDR: LDR(); break;
|
||||
case R4300i_LB: LB(); break;
|
||||
case R4300i_LH: LH(); break;
|
||||
case R4300i_LWL: LWL(); break;
|
||||
case R4300i_LW: LW(); break;
|
||||
case R4300i_LBU: LBU(); break;
|
||||
case R4300i_LHU: LHU(); break;
|
||||
case R4300i_LWR: LWR(); break;
|
||||
case R4300i_LWU: LWU(); break; //added by Witten
|
||||
case R4300i_SB: SB(); break;
|
||||
case R4300i_SH: SH(); break;
|
||||
case R4300i_SWL: SWL(); break;
|
||||
case R4300i_SW: SW(); break;
|
||||
case R4300i_SWR: SWR(); break;
|
||||
case R4300i_SDL: SDL(); break;
|
||||
case R4300i_SDR: SDR(); break;
|
||||
case R4300i_CACHE: CACHE(); break;
|
||||
case R4300i_LL: g_MMU->Compile_LL(); break;
|
||||
case R4300i_LWC1: g_MMU->Compile_LWC1(); break;
|
||||
case R4300i_LDC1: g_MMU->Compile_LDC1(); break;
|
||||
case R4300i_SC: g_MMU->Compile_SC(); break;
|
||||
case R4300i_LD: g_MMU->Compile_LD(); break;
|
||||
case R4300i_SWC1: g_MMU->Compile_SWC1(); break;
|
||||
case R4300i_SDC1: g_MMU->Compile_SDC1(); break;
|
||||
case R4300i_SD: g_MMU->Compile_SD(); break;
|
||||
case R4300i_LL: LL(); break;
|
||||
case R4300i_LWC1: LWC1(); break;
|
||||
case R4300i_LDC1: LDC1(); break;
|
||||
case R4300i_SC: SC(); break;
|
||||
case R4300i_LD: LD(); break;
|
||||
case R4300i_SWC1: SWC1(); break;
|
||||
case R4300i_SDC1: SDC1(); break;
|
||||
case R4300i_SD: SD(); break;
|
||||
default:
|
||||
UnknownOpcode(); break;
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -60,32 +60,32 @@ public:
|
|||
static void XORI ();
|
||||
static void LUI ();
|
||||
static void DADDIU ();
|
||||
// static void LDL ();
|
||||
// static void LDR ();
|
||||
// static void LB ();
|
||||
// static void LH ();
|
||||
// static void LWL ();
|
||||
// static void LW ();
|
||||
// static void LBU ();
|
||||
// static void LHU ();
|
||||
// static void LWR ();
|
||||
// static void LWU (); //added by Witten
|
||||
// static void SB ();
|
||||
// static void SH ();
|
||||
// static void SWL ();
|
||||
// static void SW ();
|
||||
// static void SWR ();
|
||||
// static void SDL ();
|
||||
// static void SDR ();
|
||||
static void LDL ();
|
||||
static void LDR ();
|
||||
void LB ();
|
||||
void LH ();
|
||||
void LWL ();
|
||||
void LW ();
|
||||
void LBU ();
|
||||
void LHU ();
|
||||
void LWR ();
|
||||
void LWU ();
|
||||
void SB ();
|
||||
void SH ();
|
||||
void SWL ();
|
||||
void SW ();
|
||||
void SWR ();
|
||||
static void SDL ();
|
||||
static void SDR ();
|
||||
static void CACHE ();
|
||||
// static void LL ();
|
||||
// static void LWC1 ();
|
||||
// static void LDC1 ();
|
||||
// static void LD ();
|
||||
// static void SC ();
|
||||
// static void SWC1 ();
|
||||
// static void SDC1 ();
|
||||
// static void SD ();
|
||||
void LL ();
|
||||
void LWC1 ();
|
||||
void LDC1 ();
|
||||
void LD ();
|
||||
void SC ();
|
||||
void SWC1 ();
|
||||
void SDC1 ();
|
||||
void SD ();
|
||||
|
||||
/********************** R4300i OpCodes: Special **********************/
|
||||
static void SPECIAL_SLL ();
|
||||
|
@ -163,11 +163,11 @@ public:
|
|||
static void COP1_S_MOV ();
|
||||
static void COP1_S_ROUND_L ();
|
||||
static void COP1_S_TRUNC_L ();
|
||||
static void COP1_S_CEIL_L (); //added by Witten
|
||||
static void COP1_S_FLOOR_L (); //added by Witten
|
||||
static void COP1_S_CEIL_L ();
|
||||
static void COP1_S_FLOOR_L ();
|
||||
static void COP1_S_ROUND_W ();
|
||||
static void COP1_S_TRUNC_W ();
|
||||
static void COP1_S_CEIL_W (); //added by Witten
|
||||
static void COP1_S_CEIL_W ();
|
||||
static void COP1_S_FLOOR_W ();
|
||||
static void COP1_S_CVT_D ();
|
||||
static void COP1_S_CVT_W ();
|
||||
|
@ -184,13 +184,13 @@ public:
|
|||
static void COP1_D_SQRT ();
|
||||
static void COP1_D_MOV ();
|
||||
static void COP1_D_ROUND_L ();
|
||||
static void COP1_D_TRUNC_L (); //added by Witten
|
||||
static void COP1_D_CEIL_L (); //added by Witten
|
||||
static void COP1_D_FLOOR_L (); //added by Witten
|
||||
static void COP1_D_TRUNC_L ();
|
||||
static void COP1_D_CEIL_L ();
|
||||
static void COP1_D_FLOOR_L ();
|
||||
static void COP1_D_ROUND_W ();
|
||||
static void COP1_D_TRUNC_W ();
|
||||
static void COP1_D_CEIL_W (); //added by Witten
|
||||
static void COP1_D_FLOOR_W (); //added by Witten
|
||||
static void COP1_D_CEIL_W ();
|
||||
static void COP1_D_FLOOR_W ();
|
||||
static void COP1_D_CVT_S ();
|
||||
static void COP1_D_CVT_W ();
|
||||
static void COP1_D_CVT_L ();
|
||||
|
@ -212,6 +212,7 @@ public:
|
|||
static void AfterCallDirect(CRegInfo & RegSet);
|
||||
static void EnterCodeBlock();
|
||||
static void ExitCodeBlock();
|
||||
void Compile_StoreInstructClean(x86Reg AddressReg, int32_t Length);
|
||||
void CompileReadTLBMiss(uint32_t VirtualAddress, x86Reg LookUpReg);
|
||||
void CompileReadTLBMiss(x86Reg AddressReg, x86Reg LookUpReg);
|
||||
void CompileWriteTLBMiss(x86Reg AddressReg, x86Reg LookUpReg);
|
||||
|
@ -337,6 +338,22 @@ public:
|
|||
public:
|
||||
static uint32_t CompilePC() { return m_CompilePC; }
|
||||
|
||||
protected:
|
||||
void CompileExit(uint32_t JumpPC, uint32_t TargetPC, CRegInfo &ExitRegSet, CExitInfo::EXIT_REASON reason, bool CompileNow, void(*x86Jmp)(const char * Label, uint32_t Value));
|
||||
|
||||
private:
|
||||
void SB_Const(uint8_t Value, uint32_t Addr);
|
||||
void SB_Register(CX86Ops::x86Reg Reg, uint32_t Addr);
|
||||
void SH_Const(uint16_t Value, uint32_t Addr);
|
||||
void SH_Register(CX86Ops::x86Reg Reg, uint32_t Addr);
|
||||
void SW_Const(uint32_t Value, uint32_t Addr);
|
||||
void SW_Register(CX86Ops::x86Reg Reg, uint32_t Addr);
|
||||
void LB_KnownAddress(x86Reg Reg, uint32_t VAddr, bool SignExtend);
|
||||
void LH_KnownAddress(x86Reg Reg, uint32_t VAddr, bool SignExtend);
|
||||
void LW_KnownAddress(x86Reg Reg, uint32_t VAddr);
|
||||
void LW(bool ResultSigned, bool bRecordLLBit);
|
||||
void SW(bool bCheckLLbit);
|
||||
|
||||
EXIT_LIST m_ExitInfo;
|
||||
static uint32_t m_TempValue;
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue