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


Reply via email to