diff --git a/src/devices/cpu/arm/arm.cpp b/src/devices/cpu/arm/arm.cpp index a51e1fd8882..1b342b3ea56 100644 --- a/src/devices/cpu/arm/arm.cpp +++ b/src/devices/cpu/arm/arm.cpp @@ -675,7 +675,7 @@ void arm_cpu_device::HandleMemSingle( uint32_t insn ) { if (rd == eR15) { - R15 = (cpu_read32(rnv) & ADDRESS_MASK) | (R15 & PSR_MASK) | (R15 & MODE_MASK); + R15 = (cpu_read32(rnv) & ADDRESS_MASK) | (R15 & PSR_MASK) | (R15 & IRQ_MASK) | (R15 & MODE_MASK); /* The docs are explicit in that the bottom bits should be masked off @@ -1364,7 +1364,7 @@ uint32_t arm_cpu_device::decodeShift(uint32_t insn, uint32_t *pCarry) if (k) { while (k > 32) k -= 32; - if (pCarry) *pCarry = rm & SIGN_BIT; + if (pCarry) *pCarry = rm & (1 << (k - 1)); return ROR(rm, k); } else