hreg_store_msr was both returning 0 or an exception number which could be POWERPC_EXCP_NONE. In case POWERPC_EXCP_NONE was returned, helper_store_msr was handling uncorrectly this return value and raise an exception. This patch correct this behavior by making hreg_store_msr always return an exception number, and helper_store_msr test for POWERPC_EXCP_NONE.
Signed-off-by: Pierre Mallard <mallard.pie...@gmail.com> --- target-ppc/excp_helper.c | 2 +- target-ppc/helper_regs.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/target-ppc/excp_helper.c b/target-ppc/excp_helper.c index 922e86d..f76942b 100644 --- a/target-ppc/excp_helper.c +++ b/target-ppc/excp_helper.c @@ -855,7 +855,7 @@ void helper_store_msr(CPUPPCState *env, target_ulong val) CPUState *cs; val = hreg_store_msr(env, val, 0); - if (val != 0) { + if (val != POWERPC_EXCP_NONE) { cs = CPU(ppc_env_get_cpu(env)); cs->interrupt_request |= CPU_INTERRUPT_EXITTB; helper_raise_exception(env, val); diff --git a/target-ppc/helper_regs.h b/target-ppc/helper_regs.h index 271fddf..36a522a 100644 --- a/target-ppc/helper_regs.h +++ b/target-ppc/helper_regs.h @@ -72,7 +72,7 @@ static inline int hreg_store_msr(CPUPPCState *env, target_ulong value, CPUState *cs = CPU(ppc_env_get_cpu(env)); #endif - excp = 0; + excp = POWERPC_EXCP_NONE; value &= env->msr_mask; #if !defined(CONFIG_USER_ONLY) if (!alter_hv) { -- 1.7.10.4