aboutsummaryrefslogtreecommitdiff
path: root/target/i386/tcg/translate.c
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2024-05-16 18:43:44 +0200
committerPaolo Bonzini <pbonzini@redhat.com>2024-05-25 13:28:01 +0200
commit69d728126223941de298b34798eb433be28b2734 (patch)
tree9a0285da6c1f0677aa5a6aab31bbc9fd18768679 /target/i386/tcg/translate.c
parentf0f0136abba688a6516647a79cc91e03fad6d5d7 (diff)
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>
Diffstat (limited to 'target/i386/tcg/translate.c')
-rw-r--r--target/i386/tcg/translate.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/target/i386/tcg/translate.c b/target/i386/tcg/translate.c
index 9782250b20..849864d1aa 100644
--- a/target/i386/tcg/translate.c
+++ b/target/i386/tcg/translate.c
@@ -4488,9 +4488,8 @@ static void disas_insn_old(DisasContext *s, CPUState *cpu, int b)
/* we should not be in SMM mode */
g_assert_not_reached();
#else
- gen_update_cc_op(s);
- gen_update_eip_next(s);
gen_helper_rsm(tcg_env);
+ set_cc_op(s, CC_OP_EFLAGS);
#endif /* CONFIG_USER_ONLY */
s->base.is_jmp = DISAS_EOB_ONLY;
break;