mirror of https://github.com/mgba-emu/mgba.git
ARM9: Implement BLX (2)
This commit is contained in:
parent
3796c32eb4
commit
89936d1b94
|
@ -351,6 +351,11 @@ DEFINE_DECODER_ARM(BX, BX,
|
|||
info->operandFormat = ARM_OPERAND_REGISTER_1;
|
||||
info->branchType = ARM_BRANCH_INDIRECT;)
|
||||
|
||||
DEFINE_DECODER_ARM(BLX2, BLX,
|
||||
info->op1.reg = opcode & 0x0000000F;
|
||||
info->operandFormat = ARM_OPERAND_REGISTER_1;
|
||||
info->branchType = ARM_BRANCH_LINKED | ARM_BRANCH_INDIRECT;)
|
||||
|
||||
// End branch definitions
|
||||
|
||||
// Begin coprocessor definitions
|
||||
|
|
|
@ -250,6 +250,7 @@ static const char* _armMnemonicStrings[] = {
|
|||
"bic",
|
||||
"bkpt",
|
||||
"bl",
|
||||
"blx",
|
||||
"bx",
|
||||
"cdp",
|
||||
"clz",
|
||||
|
|
|
@ -158,6 +158,7 @@ enum ARMMnemonic {
|
|||
ARM_MN_BIC,
|
||||
ARM_MN_BKPT,
|
||||
ARM_MN_BL,
|
||||
ARM_MN_BLX,
|
||||
ARM_MN_BX,
|
||||
ARM_MN_CDP,
|
||||
ARM_MN_CLZ,
|
||||
|
|
|
@ -370,7 +370,7 @@
|
|||
DECLARE_INSTRUCTION_ARM(EMITTER, MSR), \
|
||||
DECLARE_INSTRUCTION_ARM(EMITTER, BX), \
|
||||
DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
|
||||
DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
|
||||
DECLARE_INSTRUCTION_ARM(EMITTER, BLX2), \
|
||||
DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
|
||||
DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
|
||||
DECLARE_INSTRUCTION_ARM(EMITTER, ILL), \
|
||||
|
|
|
@ -609,6 +609,17 @@ DEFINE_INSTRUCTION_ARM(BX,
|
|||
int rm = opcode & 0x0000000F;
|
||||
_ARMSetMode(cpu, cpu->gprs[rm] & 0x00000001);
|
||||
cpu->gprs[ARM_PC] = cpu->gprs[rm] & 0xFFFFFFFE;
|
||||
if (cpu->executionMode == MODE_THUMB) {
|
||||
THUMB_WRITE_PC;
|
||||
} else {
|
||||
ARM_WRITE_PC;
|
||||
|
||||
})
|
||||
DEFINE_INSTRUCTION_ARM(BLX2,
|
||||
int rm = opcode & 0x0000000F;
|
||||
cpu->gprs[ARM_LR] = cpu->gprs[ARM_PC] - WORD_SIZE_ARM;
|
||||
_ARMSetMode(cpu, cpu->gprs[rm] & 0x00000001);
|
||||
cpu->gprs[ARM_PC] = cpu->gprs[rm] & 0xFFFFFFFE;
|
||||
if (cpu->executionMode == MODE_THUMB) {
|
||||
THUMB_WRITE_PC;
|
||||
} else {
|
||||
|
|
Loading…
Reference in New Issue