Write CPSR as it is initiated from instructions to allow regs switch

This commit is contained in:
lazymio
2021-11-24 17:10:51 +01:00
parent 78e0ddbc4d
commit 221cde18df
2 changed files with 46 additions and 3 deletions

View File

@ -251,17 +251,17 @@ static void reg_write(CPUARMState *env, unsigned int regid, const void *value)
case UC_ARM_REG_APSR:
if (!arm_feature(env, ARM_FEATURE_M)) {
cpsr_write(env, *(uint32_t *)value,
(CPSR_NZCV | CPSR_Q | CPSR_GE), CPSRWriteRaw);
(CPSR_NZCV | CPSR_Q | CPSR_GE), CPSRWriteByInstr);
} else {
// Same with UC_ARM_REG_APSR_NZCVQ
v7m_msr_xpsr(env, 0b1000, 0, *(uint32_t *)value);
}
break;
case UC_ARM_REG_APSR_NZCV:
cpsr_write(env, *(uint32_t *)value, CPSR_NZCV, CPSRWriteRaw);
cpsr_write(env, *(uint32_t *)value, CPSR_NZCV, CPSRWriteByInstr);
break;
case UC_ARM_REG_CPSR:
cpsr_write(env, *(uint32_t *)value, ~0, CPSRWriteRaw);
cpsr_write(env, *(uint32_t *)value, ~0, CPSRWriteByInstr);
break;
case UC_ARM_REG_SPSR:
env->spsr = *(uint32_t *)value;