mirror of
https://github.com/xemu-project/xemu.git
synced 2024-11-24 12:09:58 +00:00
target-i386: Discard CC_OP computation in set_cc_op also
The shift and rotate insns use movcond to set CC_OP, and thus achieve a conditional EFLAGS setting. By discarding CC_OP in a later flags setting insn, we can discard that movcond. Signed-off-by: Richard Henderson <rth@twiddle.net>
This commit is contained in:
parent
34d80a55ff
commit
e2f515cf2f
@ -239,10 +239,18 @@ static void set_cc_op(DisasContext *s, CCOp op)
|
|||||||
tcg_gen_discard_tl(cpu_cc_srcT);
|
tcg_gen_discard_tl(cpu_cc_srcT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (op == CC_OP_DYNAMIC) {
|
||||||
|
/* The DYNAMIC setting is translator only, and should never be
|
||||||
|
stored. Thus we always consider it clean. */
|
||||||
|
s->cc_op_dirty = false;
|
||||||
|
} else {
|
||||||
|
/* Discard any computed CC_OP value (see shifts). */
|
||||||
|
if (s->cc_op == CC_OP_DYNAMIC) {
|
||||||
|
tcg_gen_discard_i32(cpu_cc_op);
|
||||||
|
}
|
||||||
|
s->cc_op_dirty = true;
|
||||||
|
}
|
||||||
s->cc_op = op;
|
s->cc_op = op;
|
||||||
/* The DYNAMIC setting is translator only, and should never be
|
|
||||||
stored. Thus we always consider it clean. */
|
|
||||||
s->cc_op_dirty = (op != CC_OP_DYNAMIC);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void gen_update_cc_op(DisasContext *s)
|
static void gen_update_cc_op(DisasContext *s)
|
||||||
|
Loading…
Reference in New Issue
Block a user