all repos — mgba @ 7c8d76eb065f35f1abbe7e2f3aceae3211081c11

mGBA Game Boy Advance Emulator

Implement BX
Jeffrey Pfau jeffrey@endrift.com
Sun, 14 Apr 2013 02:55:12 -0700
commit

7c8d76eb065f35f1abbe7e2f3aceae3211081c11

parent

d7ff6aa14bca10865795a218c863d3149263621f

1 files changed, 14 insertions(+), 1 deletions(-)

jump to
M src/isa-thumb.csrc/isa-thumb.c

@@ -390,7 +390,20 @@ cpu->gprs[ARM_PC] = cpu->gprs[ARM_LR] + immediate; \

cpu->gprs[ARM_LR] = pc - 1; \ THUMB_WRITE_PC;) -DEFINE_INSTRUCTION_THUMB(BX, ARM_STUB) +DEFINE_INSTRUCTION_THUMB(BX, \ + int rm = opcode & 0x0000000F; \ + _ARMSetMode(cpu, cpu->gprs[rm] & 0x00000001); + int misalign = 0; + if (rm == ARM_PC) { + misalign = cpu->gprs[rm] & 0x00000002; + } + cpu->gprs[ARM_PC] = cpu->gprs[rm] & 0xFFFFFFFE - misalign; \ + if (cpu->executionMode == MODE_THUMB) { \ + THUMB_WRITE_PC; \ + } else { \ + ARM_WRITE_PC; \ + }) + DEFINE_INSTRUCTION_THUMB(SWI, ARM_STUB) #define DECLARE_INSTRUCTION_THUMB(EMITTER, NAME) \