From ade2bed5149e817f8bea94b5d232899c60352888 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Fri, 12 Dec 2014 06:31:16 +0100 Subject: CPU interpreter - group Thumb opcode case ranges 0x20 - 0x27 together --- cpu.c | 27 ++++----------------------- 1 file changed, 4 insertions(+), 23 deletions(-) (limited to 'cpu.c') diff --git a/cpu.c b/cpu.c index 5e36c52..3362eaf 100644 --- a/cpu.c +++ b/cpu.c @@ -1656,6 +1656,7 @@ void execute_arm(u32 cycles) cpu_alert_type cpu_alert; u32 old_pc; + u32 thumb_opcode_val = 0, arm_opcode_val = 0; if(!pc_address_block) pc_address_block = load_gamepak_page(pc_region & 0x3FF); @@ -3261,8 +3262,9 @@ thumb_loop: check_pc_region(); pc &= ~0x01; opcode = address16(pc_address_block, (pc & 0x7FFF)); + thumb_opcode_val = (opcode >> 8) & 0xFF; - switch((opcode >> 8) & 0xFF) + switch(thumb_opcode_val) { case 0x00 ... 0x07: /* LSL rd, rs, offset */ @@ -3301,42 +3303,21 @@ thumb_loop: case 0x20: /* MOV r0, imm */ - thumb_logic(imm, 0, imm); - break; - case 0x21: /* MOV r1, imm */ - thumb_logic(imm, 1, imm); - break; - case 0x22: /* MOV r2, imm */ - thumb_logic(imm, 2, imm); - break; - case 0x23: /* MOV r3, imm */ - thumb_logic(imm, 3, imm); - break; - case 0x24: /* MOV r4, imm */ - thumb_logic(imm, 4, imm); - break; - case 0x25: /* MOV r5, imm */ - thumb_logic(imm, 5, imm); - break; - case 0x26: /* MOV r6, imm */ - thumb_logic(imm, 6, imm); - break; - case 0x27: /* MOV r7, imm */ - thumb_logic(imm, 7, imm); + thumb_logic(imm, thumb_opcode_val - 0x20, imm); break; case 0x28: -- cgit v1.2.3