mirror of https://gitee.com/openkylin/qemu.git
ppc: Don't update NIP on conditional trap instructions
This is no longer necessary as the helpers will properly retrieve the return address when needed. Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
parent
8c8966e218
commit
72073dcce0
|
@ -1031,7 +1031,8 @@ void helper_tw(CPUPPCState *env, target_ulong arg1, target_ulong arg2,
|
|||
((int32_t)arg1 == (int32_t)arg2 && (flags & 0x04)) ||
|
||||
((uint32_t)arg1 < (uint32_t)arg2 && (flags & 0x02)) ||
|
||||
((uint32_t)arg1 > (uint32_t)arg2 && (flags & 0x01))))) {
|
||||
raise_exception_err(env, POWERPC_EXCP_PROGRAM, POWERPC_EXCP_TRAP);
|
||||
raise_exception_err_ra(env, POWERPC_EXCP_PROGRAM,
|
||||
POWERPC_EXCP_TRAP, GETPC());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1044,7 +1045,8 @@ void helper_td(CPUPPCState *env, target_ulong arg1, target_ulong arg2,
|
|||
((int64_t)arg1 == (int64_t)arg2 && (flags & 0x04)) ||
|
||||
((uint64_t)arg1 < (uint64_t)arg2 && (flags & 0x02)) ||
|
||||
((uint64_t)arg1 > (uint64_t)arg2 && (flags & 0x01))))) {
|
||||
raise_exception_err(env, POWERPC_EXCP_PROGRAM, POWERPC_EXCP_TRAP);
|
||||
raise_exception_err_ra(env, POWERPC_EXCP_PROGRAM,
|
||||
POWERPC_EXCP_TRAP, GETPC());
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -3580,8 +3580,6 @@ static void gen_sc(DisasContext *ctx)
|
|||
static void gen_tw(DisasContext *ctx)
|
||||
{
|
||||
TCGv_i32 t0 = tcg_const_i32(TO(ctx->opcode));
|
||||
/* Update the nip since this might generate a trap exception */
|
||||
gen_update_nip(ctx, ctx->nip - 4);
|
||||
gen_helper_tw(cpu_env, cpu_gpr[rA(ctx->opcode)], cpu_gpr[rB(ctx->opcode)],
|
||||
t0);
|
||||
tcg_temp_free_i32(t0);
|
||||
|
@ -3592,8 +3590,6 @@ static void gen_twi(DisasContext *ctx)
|
|||
{
|
||||
TCGv t0 = tcg_const_tl(SIMM(ctx->opcode));
|
||||
TCGv_i32 t1 = tcg_const_i32(TO(ctx->opcode));
|
||||
/* Update the nip since this might generate a trap exception */
|
||||
gen_update_nip(ctx, ctx->nip - 4);
|
||||
gen_helper_tw(cpu_env, cpu_gpr[rA(ctx->opcode)], t0, t1);
|
||||
tcg_temp_free(t0);
|
||||
tcg_temp_free_i32(t1);
|
||||
|
@ -3604,8 +3600,6 @@ static void gen_twi(DisasContext *ctx)
|
|||
static void gen_td(DisasContext *ctx)
|
||||
{
|
||||
TCGv_i32 t0 = tcg_const_i32(TO(ctx->opcode));
|
||||
/* Update the nip since this might generate a trap exception */
|
||||
gen_update_nip(ctx, ctx->nip - 4);
|
||||
gen_helper_td(cpu_env, cpu_gpr[rA(ctx->opcode)], cpu_gpr[rB(ctx->opcode)],
|
||||
t0);
|
||||
tcg_temp_free_i32(t0);
|
||||
|
@ -3616,8 +3610,6 @@ static void gen_tdi(DisasContext *ctx)
|
|||
{
|
||||
TCGv t0 = tcg_const_tl(SIMM(ctx->opcode));
|
||||
TCGv_i32 t1 = tcg_const_i32(TO(ctx->opcode));
|
||||
/* Update the nip since this might generate a trap exception */
|
||||
gen_update_nip(ctx, ctx->nip - 4);
|
||||
gen_helper_td(cpu_env, cpu_gpr[rA(ctx->opcode)], t0, t1);
|
||||
tcg_temp_free(t0);
|
||||
tcg_temp_free_i32(t1);
|
||||
|
|
Loading…
Reference in New Issue