target/i386: cc_op is not dynamic in gen_jcc1

Resetting cc_op to CC_OP_DYNAMIC should be done at control flow junctions,
which is not the case here.  This translation block is ending and the
only effect of calling set_cc_op() would be a discard of s->cc_srcT.
This discard is useless (it's a temporary, not a global) and in fact
prevents gen_prepare_cc from returning s->cc_srcT.

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
Paolo Bonzini 2024-04-10 12:29:52 +02:00
parent e995f3f944
commit 64ddadc6bb

View File

@ -1227,13 +1227,13 @@ static inline void gen_jcc1_noeob(DisasContext *s, int b, TCGLabel *l1)
/* Generate a conditional jump to label 'l1' according to jump opcode /* Generate a conditional jump to label 'l1' according to jump opcode
value 'b'. In the fast case, T0 is guaranteed not to be used. value 'b'. In the fast case, T0 is guaranteed not to be used.
A translation block must end soon. */ One or both of the branches will call gen_jmp_rel, so ensure
cc_op is clean. */
static inline void gen_jcc1(DisasContext *s, int b, TCGLabel *l1) static inline void gen_jcc1(DisasContext *s, int b, TCGLabel *l1)
{ {
CCPrepare cc = gen_prepare_cc(s, b, s->T0); CCPrepare cc = gen_prepare_cc(s, b, s->T0);
gen_update_cc_op(s); gen_update_cc_op(s);
set_cc_op(s, CC_OP_DYNAMIC);
if (cc.use_reg2) { if (cc.use_reg2) {
tcg_gen_brcond_tl(cc.cond, cc.reg, cc.reg2, l1); tcg_gen_brcond_tl(cc.cond, cc.reg, cc.reg2, l1);
} else { } else {