ARM9: Implement BLX (2)

This commit is contained in:
Jeffrey Pfau 2016-06-06 00:28:27 -07:00
parent 3796c32eb4
commit 89936d1b94
5 changed files with 19 additions and 1 deletions

View File

@ -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

View File

@ -250,6 +250,7 @@ static const char* _armMnemonicStrings[] = {
"bic",
"bkpt",
"bl",
"blx",
"bx",
"cdp",
"clz",

View File

@ -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,

View File

@ -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), \

View File

@ -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 {