aboutsummaryrefslogtreecommitdiff
path: root/src/ARMJIT_x64/ARMJIT_Compiler.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/ARMJIT_x64/ARMJIT_Compiler.h')
-rw-r--r--src/ARMJIT_x64/ARMJIT_Compiler.h30
1 files changed, 14 insertions, 16 deletions
diff --git a/src/ARMJIT_x64/ARMJIT_Compiler.h b/src/ARMJIT_x64/ARMJIT_Compiler.h
index a751737..45b488a 100644
--- a/src/ARMJIT_x64/ARMJIT_Compiler.h
+++ b/src/ARMJIT_x64/ARMJIT_Compiler.h
@@ -22,19 +22,6 @@ class Compiler;
typedef void (Compiler::*CompileFunc)();
-enum DataRegion
-{
- dataRegionGeneric, // hey, that's me!
- dataRegionMainRAM,
- dataRegionSWRAM,
- dataRegionVRAM,
- dataRegionIO,
- dataRegionExclusive,
- dataRegionsCount,
- dataRegionDTCM = dataRegionExclusive,
- dataRegionWRAM7 = dataRegionExclusive,
-};
-
class Compiler : public Gen::X64CodeBlock
{
public:
@@ -49,8 +36,9 @@ private:
CompileFunc GetCompFunc(int kind);
void Comp_JumpTo(Gen::X64Reg addr, bool restoreCPSR = false);
+ void Comp_JumpTo(u32 addr, bool forceNonConstantCycles = false);
- void Comp_AddCycles_C();
+ void Comp_AddCycles_C(bool forceNonConstant = false);
void Comp_AddCycles_CI(u32 i);
enum
@@ -63,8 +51,6 @@ private:
opInvertOp2 = 1 << 5,
};
- DataRegion ClassifyAddress(u32 addr);
-
void A_Comp_Arith();
void A_Comp_MovOp();
void A_Comp_CmpOp();
@@ -73,6 +59,9 @@ private:
void A_Comp_MemHalf();
void A_Comp_LDM_STM();
+ void A_Comp_BranchImm();
+ void A_Comp_BranchXchangeReg();
+
void T_Comp_ShiftImm();
void T_Comp_AddSub_();
void T_Comp_ALU_Imm8();
@@ -91,6 +80,13 @@ private:
void T_Comp_PUSH_POP();
void T_Comp_LDMIA_STMIA();
+ void T_Comp_BCOND();
+ void T_Comp_B();
+ void T_Comp_BranchXchangeReg();
+ void T_Comp_BL_LONG_1();
+ void T_Comp_BL_LONG_2();
+ void T_Comp_BL_Merged(FetchedInstr prefix);
+
void Comp_MemAccess(Gen::OpArg rd, bool signExtend, bool store, int size);
s32 Comp_MemAccessBlock(Gen::OpArg rb, BitSet16 regs, bool store, bool preinc, bool decrement, bool usermode);
@@ -119,6 +115,8 @@ private:
void LoadCPSR();
void SaveCPSR();
+ Gen::FixupBranch CheckCondition(u32 cond);
+
Gen::OpArg MapReg(int reg)
{
if (reg == 15 && RegCache.Mapping[reg] == Gen::INVALID_REG)