diff options
Diffstat (limited to 'src/devices/cpu/arm7/arm7.h')
-rw-r--r-- | src/devices/cpu/arm7/arm7.h | 240 |
1 files changed, 121 insertions, 119 deletions
diff --git a/src/devices/cpu/arm7/arm7.h b/src/devices/cpu/arm7/arm7.h index def6bed007b..d2fc97a27c5 100644 --- a/src/devices/cpu/arm7/arm7.h +++ b/src/devices/cpu/arm7/arm7.h @@ -130,7 +130,7 @@ protected: virtual void state_string_export(const device_state_entry &entry, std::string &str) const override; // device_disasm_interface overrides - virtual util::disasm_interface *create_disassembler() override; + virtual std::unique_ptr<util::disasm_interface> create_disassembler() override; virtual bool get_t_flag() const override; address_space_config m_program_config; @@ -374,6 +374,8 @@ protected: /* internal compiler state */ struct compiler_state { + compiler_state &operator=(compiler_state const &) = delete; + uint32_t cycles; /* accumulated cycles */ uint8_t checkints; /* need to check interrupts before next instruction */ uint8_t checksoftints; /* need to check software interrupts before next instruction */ @@ -426,114 +428,114 @@ protected: hotspot_info hotspot[ARM7_MAX_HOTSPOTS]; } m_impstate; - typedef void ( arm7_cpu_device::*arm7thumb_drcophandler)(drcuml_block*, compiler_state*, const opcode_desc*); + typedef void ( arm7_cpu_device::*arm7thumb_drcophandler)(drcuml_block &, compiler_state &, const opcode_desc *); static const arm7thumb_drcophandler drcthumb_handler[0x40*0x10]; - void drctg00_0(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* Shift left */ - void drctg00_1(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* Shift right */ - void drctg01_0(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); - void drctg01_10(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); - void drctg01_11(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* SUB Rd, Rs, Rn */ - void drctg01_12(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* ADD Rd, Rs, #imm */ - void drctg01_13(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* SUB Rd, Rs, #imm */ - void drctg02_0(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); - void drctg02_1(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); - void drctg03_0(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* ADD Rd, #Offset8 */ - void drctg03_1(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* SUB Rd, #Offset8 */ - void drctg04_00_00(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* AND Rd, Rs */ - void drctg04_00_01(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* EOR Rd, Rs */ - void drctg04_00_02(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* LSL Rd, Rs */ - void drctg04_00_03(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* LSR Rd, Rs */ - void drctg04_00_04(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* ASR Rd, Rs */ - void drctg04_00_05(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* ADC Rd, Rs */ - void drctg04_00_06(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* SBC Rd, Rs */ - void drctg04_00_07(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* ROR Rd, Rs */ - void drctg04_00_08(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* TST Rd, Rs */ - void drctg04_00_09(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* NEG Rd, Rs */ - void drctg04_00_0a(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* CMP Rd, Rs */ - void drctg04_00_0b(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* CMN Rd, Rs - check flags, add dasm */ - void drctg04_00_0c(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* ORR Rd, Rs */ - void drctg04_00_0d(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* MUL Rd, Rs */ - void drctg04_00_0e(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* BIC Rd, Rs */ - void drctg04_00_0f(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* MVN Rd, Rs */ - void drctg04_01_00(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); - void drctg04_01_01(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* ADD Rd, HRs */ - void drctg04_01_02(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* ADD HRd, Rs */ - void drctg04_01_03(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* Add HRd, HRs */ - void drctg04_01_10(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* CMP Rd, Rs */ - void drctg04_01_11(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* CMP Rd, Hs */ - void drctg04_01_12(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* CMP Hd, Rs */ - void drctg04_01_13(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* CMP Hd, Hs */ - void drctg04_01_20(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* MOV Rd, Rs (undefined) */ - void drctg04_01_21(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* MOV Rd, Hs */ - void drctg04_01_22(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* MOV Hd, Rs */ - void drctg04_01_23(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* MOV Hd, Hs */ - void drctg04_01_30(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); - void drctg04_01_31(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); - void drctg04_01_32(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); - void drctg04_01_33(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); - void drctg04_0203(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); - void drctg05_0(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* STR Rd, [Rn, Rm] */ - void drctg05_1(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* STRH Rd, [Rn, Rm] */ - void drctg05_2(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* STRB Rd, [Rn, Rm] */ - void drctg05_3(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* LDSB Rd, [Rn, Rm] todo, add dasm */ - void drctg05_4(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* LDR Rd, [Rn, Rm] */ - void drctg05_5(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* LDRH Rd, [Rn, Rm] */ - void drctg05_6(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* LDRB Rd, [Rn, Rm] */ - void drctg05_7(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* LDSH Rd, [Rn, Rm] */ - void drctg06_0(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* Store */ - void drctg06_1(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* Load */ - void drctg07_0(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* Store */ - void drctg07_1(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* Load */ - void drctg08_0(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* Store */ - void drctg08_1(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* Load */ - void drctg09_0(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* Store */ - void drctg09_1(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* Load */ - void drctg0a_0(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* ADD Rd, PC, #nn */ - void drctg0a_1(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* ADD Rd, SP, #nn */ - void drctg0b_0(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* ADD SP, #imm */ - void drctg0b_1(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); - void drctg0b_2(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); - void drctg0b_3(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); - void drctg0b_4(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* PUSH {Rlist} */ - void drctg0b_5(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* PUSH {Rlist}{LR} */ - void drctg0b_6(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); - void drctg0b_7(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); - void drctg0b_8(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); - void drctg0b_9(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); - void drctg0b_a(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); - void drctg0b_b(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); - void drctg0b_c(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* POP {Rlist} */ - void drctg0b_d(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* POP {Rlist}{PC} */ - void drctg0b_e(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); - void drctg0b_f(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); - void drctg0c_0(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* Store */ - void drctg0c_1(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* Load */ - void drctg0d_0(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); // COND_EQ: - void drctg0d_1(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); // COND_NE: - void drctg0d_2(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); // COND_CS: - void drctg0d_3(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); // COND_CC: - void drctg0d_4(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); // COND_MI: - void drctg0d_5(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); // COND_PL: - void drctg0d_6(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); // COND_VS: - void drctg0d_7(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); // COND_VC: - void drctg0d_8(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); // COND_HI: - void drctg0d_9(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); // COND_LS: - void drctg0d_a(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); // COND_GE: - void drctg0d_b(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); // COND_LT: - void drctg0d_c(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); // COND_GT: - void drctg0d_d(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); // COND_LE: - void drctg0d_e(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); // COND_AL: - void drctg0d_f(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); // SWI (this is sort of a "hole" in the opcode encoding) - void drctg0e_0(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); - void drctg0e_1(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); - void drctg0f_0(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); - void drctg0f_1(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); /* BL */ + void drctg00_0(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* Shift left */ + void drctg00_1(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* Shift right */ + void drctg01_0(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); + void drctg01_10(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); + void drctg01_11(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* SUB Rd, Rs, Rn */ + void drctg01_12(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* ADD Rd, Rs, #imm */ + void drctg01_13(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* SUB Rd, Rs, #imm */ + void drctg02_0(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); + void drctg02_1(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); + void drctg03_0(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* ADD Rd, #Offset8 */ + void drctg03_1(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* SUB Rd, #Offset8 */ + void drctg04_00_00(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* AND Rd, Rs */ + void drctg04_00_01(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* EOR Rd, Rs */ + void drctg04_00_02(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* LSL Rd, Rs */ + void drctg04_00_03(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* LSR Rd, Rs */ + void drctg04_00_04(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* ASR Rd, Rs */ + void drctg04_00_05(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* ADC Rd, Rs */ + void drctg04_00_06(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* SBC Rd, Rs */ + void drctg04_00_07(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* ROR Rd, Rs */ + void drctg04_00_08(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* TST Rd, Rs */ + void drctg04_00_09(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* NEG Rd, Rs */ + void drctg04_00_0a(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* CMP Rd, Rs */ + void drctg04_00_0b(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* CMN Rd, Rs - check flags, add dasm */ + void drctg04_00_0c(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* ORR Rd, Rs */ + void drctg04_00_0d(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* MUL Rd, Rs */ + void drctg04_00_0e(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* BIC Rd, Rs */ + void drctg04_00_0f(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* MVN Rd, Rs */ + void drctg04_01_00(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); + void drctg04_01_01(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* ADD Rd, HRs */ + void drctg04_01_02(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* ADD HRd, Rs */ + void drctg04_01_03(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* Add HRd, HRs */ + void drctg04_01_10(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* CMP Rd, Rs */ + void drctg04_01_11(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* CMP Rd, Hs */ + void drctg04_01_12(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* CMP Hd, Rs */ + void drctg04_01_13(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* CMP Hd, Hs */ + void drctg04_01_20(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* MOV Rd, Rs (undefined) */ + void drctg04_01_21(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* MOV Rd, Hs */ + void drctg04_01_22(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* MOV Hd, Rs */ + void drctg04_01_23(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* MOV Hd, Hs */ + void drctg04_01_30(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); + void drctg04_01_31(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); + void drctg04_01_32(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); + void drctg04_01_33(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); + void drctg04_0203(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); + void drctg05_0(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* STR Rd, [Rn, Rm] */ + void drctg05_1(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* STRH Rd, [Rn, Rm] */ + void drctg05_2(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* STRB Rd, [Rn, Rm] */ + void drctg05_3(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* LDSB Rd, [Rn, Rm] todo, add dasm */ + void drctg05_4(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* LDR Rd, [Rn, Rm] */ + void drctg05_5(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* LDRH Rd, [Rn, Rm] */ + void drctg05_6(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* LDRB Rd, [Rn, Rm] */ + void drctg05_7(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* LDSH Rd, [Rn, Rm] */ + void drctg06_0(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* Store */ + void drctg06_1(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* Load */ + void drctg07_0(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* Store */ + void drctg07_1(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* Load */ + void drctg08_0(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* Store */ + void drctg08_1(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* Load */ + void drctg09_0(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* Store */ + void drctg09_1(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* Load */ + void drctg0a_0(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* ADD Rd, PC, #nn */ + void drctg0a_1(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* ADD Rd, SP, #nn */ + void drctg0b_0(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* ADD SP, #imm */ + void drctg0b_1(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); + void drctg0b_2(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); + void drctg0b_3(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); + void drctg0b_4(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* PUSH {Rlist} */ + void drctg0b_5(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* PUSH {Rlist}{LR} */ + void drctg0b_6(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); + void drctg0b_7(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); + void drctg0b_8(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); + void drctg0b_9(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); + void drctg0b_a(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); + void drctg0b_b(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); + void drctg0b_c(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* POP {Rlist} */ + void drctg0b_d(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* POP {Rlist}{PC} */ + void drctg0b_e(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); + void drctg0b_f(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); + void drctg0c_0(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* Store */ + void drctg0c_1(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* Load */ + void drctg0d_0(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); // COND_EQ: + void drctg0d_1(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); // COND_NE: + void drctg0d_2(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); // COND_CS: + void drctg0d_3(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); // COND_CC: + void drctg0d_4(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); // COND_MI: + void drctg0d_5(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); // COND_PL: + void drctg0d_6(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); // COND_VS: + void drctg0d_7(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); // COND_VC: + void drctg0d_8(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); // COND_HI: + void drctg0d_9(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); // COND_LS: + void drctg0d_a(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); // COND_GE: + void drctg0d_b(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); // COND_LT: + void drctg0d_c(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); // COND_GT: + void drctg0d_d(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); // COND_LE: + void drctg0d_e(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); // COND_AL: + void drctg0d_f(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); // SWI (this is sort of a "hole" in the opcode encoding) + void drctg0e_0(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); + void drctg0e_1(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); + void drctg0f_0(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); + void drctg0f_1(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); /* BL */ void update_reg_ptr(); const int* m_reg_group; - void load_fast_iregs(drcuml_block *block); - void save_fast_iregs(drcuml_block *block); + void load_fast_iregs(drcuml_block &block); + void save_fast_iregs(drcuml_block &block); void arm7_drc_init(); void arm7_drc_exit(); void execute_run_drc(); @@ -550,24 +552,24 @@ protected: void static_generate_out_of_cycles(); void static_generate_detect_fault(uml::code_handle **handleptr); void static_generate_tlb_translate(uml::code_handle **handleptr); - void static_generate_memory_accessor(int size, bool istlb, bool iswrite, const char *name, uml::code_handle **handleptr); - void generate_update_cycles(drcuml_block *block, compiler_state *compiler, uml::parameter param); - void generate_checksum_block(drcuml_block *block, compiler_state *compiler, const opcode_desc *seqhead, const opcode_desc *seqlast); - void generate_sequence_instruction(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); - void generate_delay_slot_and_branch(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc, uint8_t linkreg); + void static_generate_memory_accessor(int size, bool istlb, bool iswrite, const char *name, uml::code_handle *&handleptr); + void generate_update_cycles(drcuml_block &block, compiler_state &compiler, uml::parameter param); + void generate_checksum_block(drcuml_block &block, compiler_state &compiler, const opcode_desc *seqhead, const opcode_desc *seqlast); + void generate_sequence_instruction(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); + void generate_delay_slot_and_branch(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc, uint8_t linkreg); - typedef bool ( arm7_cpu_device::*drcarm7ops_ophandler)(drcuml_block*, compiler_state*, const opcode_desc*, uint32_t); + typedef bool ( arm7_cpu_device::*drcarm7ops_ophandler)(drcuml_block &, compiler_state &, const opcode_desc *, uint32_t); static const drcarm7ops_ophandler drcops_handler[0x10]; - void saturate_qbit_overflow(drcuml_block *block); - bool drcarm7ops_0123(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc, uint32_t op); - bool drcarm7ops_4567(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc, uint32_t op); - bool drcarm7ops_89(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc, uint32_t op); - bool drcarm7ops_ab(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc, uint32_t op); - bool drcarm7ops_cd(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc, uint32_t op); - bool drcarm7ops_e(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc, uint32_t op); - bool drcarm7ops_f(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc, uint32_t op); - bool generate_opcode(drcuml_block *block, compiler_state *compiler, const opcode_desc *desc); + void saturate_qbit_overflow(drcuml_block &block); + bool drcarm7ops_0123(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc, uint32_t op); + bool drcarm7ops_4567(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc, uint32_t op); + bool drcarm7ops_89(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc, uint32_t op); + bool drcarm7ops_ab(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc, uint32_t op); + bool drcarm7ops_cd(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc, uint32_t op); + bool drcarm7ops_e(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc, uint32_t op); + bool drcarm7ops_f(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc, uint32_t op); + bool generate_opcode(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc); }; |