diff --git a/CHANGES b/CHANGES index 4db830b2e..b14d6ea96 100644 --- a/CHANGES +++ b/CHANGES @@ -50,6 +50,8 @@ Emulation fixes: - GBA Video: Fix sprite layer priority updating in GL Other fixes: - ARM: Disassemble Thumb mov pseudo-instruction properly + - ARM: Disassemble ARM asr/lsr #32 properly + - ARM: Disassemble ARM movs properly - Core: Don't attempt to restore rewind diffs past start of rewind - Core: Fix the runloop resuming after a game has crashed (fixes mgba.io/i/2451) - Core: Fix crash if library can't be opened diff --git a/src/arm/decoder-arm.c b/src/arm/decoder-arm.c index 1a7052c83..73d1717e9 100644 --- a/src/arm/decoder-arm.c +++ b/src/arm/decoder-arm.c @@ -19,6 +19,9 @@ info->operandFormat |= ARM_OPERAND_SHIFT_REGISTER_3; \ } else { \ info->op3.shifterImm = (opcode >> 7) & 0x1F; \ + if (!info->op3.shifterImm && (ARM_SHIFT_ ## OP == ARM_SHIFT_LSR || ARM_SHIFT_ ## OP == ARM_SHIFT_ASR)) { \ + info->op3.shifterImm = 32; \ + } \ info->operandFormat |= ARM_OPERAND_SHIFT_IMMEDIATE_3; \ } diff --git a/src/arm/decoder.c b/src/arm/decoder.c index e75023ba1..1c98c3002 100644 --- a/src/arm/decoder.c +++ b/src/arm/decoder.c @@ -416,6 +416,7 @@ int ARMDisassemble(const struct ARMInstructionInfo* info, struct ARMCore* cpu, c case ARM_MN_LSR: case ARM_MN_MLA: case ARM_MN_MUL: + case ARM_MN_MOV: case ARM_MN_MVN: case ARM_MN_ORR: case ARM_MN_ROR: