提交 ee0d0be1 编写于 作者: A Aurelien Jarno 提交者: Alexander Graf

target-s390x: fix CC computation for EX instruction

Commit 7a6c7067 optimized CC computation by only saving cc_op before
calling helpers as they either don't touch the CC or generate a new
static value. This however doesn't work for the EX instruction as the
helper changes or not the CC value depending on the actual executed
instruction (e.g. MVC vs CLC).

This patches force a CC computation before calling the helper. This
fixes random memory corruption occuring in guests.
Signed-off-by: NAurelien Jarno <aurelien@aurel32.net>
[agraf: remove set_cc_static in op_ex as suggested by rth]
Signed-off-by: NAlexander Graf <agraf@suse.de>
上级 3b730f57
...@@ -2101,13 +2101,12 @@ static ExitStatus op_ex(DisasContext *s, DisasOps *o) ...@@ -2101,13 +2101,12 @@ static ExitStatus op_ex(DisasContext *s, DisasOps *o)
TCGv_i64 tmp; TCGv_i64 tmp;
update_psw_addr(s); update_psw_addr(s);
update_cc_op(s); gen_op_calc_cc(s);
tmp = tcg_const_i64(s->next_pc); tmp = tcg_const_i64(s->next_pc);
gen_helper_ex(cc_op, cpu_env, cc_op, o->in1, o->in2, tmp); gen_helper_ex(cc_op, cpu_env, cc_op, o->in1, o->in2, tmp);
tcg_temp_free_i64(tmp); tcg_temp_free_i64(tmp);
set_cc_static(s);
return NO_EXIT; return NO_EXIT;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册