diff options
Diffstat (limited to 'target-ppc')
-rw-r--r-- | target-ppc/mem_helper.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/target-ppc/mem_helper.c b/target-ppc/mem_helper.c index 581d9faa23..6d584c9126 100644 --- a/target-ppc/mem_helper.c +++ b/target-ppc/mem_helper.c @@ -102,8 +102,9 @@ void helper_lswx(CPUPPCState *env, target_ulong addr, uint32_t reg, { if (likely(xer_bc != 0)) { int num_used_regs = (xer_bc + 3) / 4; - if (unlikely((ra != 0 && reg < ra && (reg + num_used_regs) > ra) || - (reg < rb && (reg + num_used_regs) > rb))) { + if (unlikely((ra != 0 && lsw_reg_in_range(reg, num_used_regs, ra)) || + lsw_reg_in_range(reg, num_used_regs, rb))) { + env->nip += 4; /* Compensate the "nip - 4" from gen_lswx() */ helper_raise_exception_err(env, POWERPC_EXCP_PROGRAM, POWERPC_EXCP_INVAL | POWERPC_EXCP_INVAL_LSWX); |