target/i386: cleanup eob handling of RSM
gen_helper_rsm cannot generate an exception, and reloads the flags. So there's no need to spill cc_op and update cpu_eip, but on the other hand cc_op must be reset to CC_OP_EFLAGS before returning. It all works by chance, because by spilling cc_op before the call to the helper, it becomes non-dirty and gen_eob will not overwrite the CC_OP_EFLAGS value that is placed there by the helper. But let's clean it up. Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
f0f0136abb
commit
69d7281262
@ -4488,9 +4488,8 @@ static void disas_insn_old(DisasContext *s, CPUState *cpu, int b)
|
|||||||
/* we should not be in SMM mode */
|
/* we should not be in SMM mode */
|
||||||
g_assert_not_reached();
|
g_assert_not_reached();
|
||||||
#else
|
#else
|
||||||
gen_update_cc_op(s);
|
|
||||||
gen_update_eip_next(s);
|
|
||||||
gen_helper_rsm(tcg_env);
|
gen_helper_rsm(tcg_env);
|
||||||
|
set_cc_op(s, CC_OP_EFLAGS);
|
||||||
#endif /* CONFIG_USER_ONLY */
|
#endif /* CONFIG_USER_ONLY */
|
||||||
s->base.is_jmp = DISAS_EOB_ONLY;
|
s->base.is_jmp = DISAS_EOB_ONLY;
|
||||||
break;
|
break;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user