diff options
author | Laurent Vivier | 2017-01-13 19:36:30 +0100 |
---|---|---|
committer | Laurent Vivier | 2017-01-14 10:06:21 +0100 |
commit | 695576db2daaf2bdc63e7f6d36038b61caed622a (patch) | |
tree | 6f6445c44a336eea367531d3305a1612efc5835a /target | |
parent | target-m68k: fix bit operation with immediate value (diff) | |
download | qemu-695576db2daaf2bdc63e7f6d36038b61caed622a.tar.gz qemu-695576db2daaf2bdc63e7f6d36038b61caed622a.tar.xz qemu-695576db2daaf2bdc63e7f6d36038b61caed622a.zip |
target-m68k: fix gen_flush_flags()
gen_flush_flags() is setting unconditionally cc_op_synced to 1
and s->cc_op to CC_OP_FLAGS, whereas env->cc_op can be set
to something else by a previous tcg fragment.
We fix that by not setting cc_op_synced to 1
(except for gen_helper_flush_flags() that updates env->cc_op)
FIX: https://github.com/vivier/qemu-m68k/issues/19
Signed-off-by: Laurent Vivier <laurent@vivier.eu>
Reviewed-by: Richard Henderson <rth@twiddle.net>
Message-Id: <1484332593-16782-3-git-send-email-laurent@vivier.eu>
Diffstat (limited to 'target')
-rw-r--r-- | target/m68k/translate.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/target/m68k/translate.c b/target/m68k/translate.c index 410f56a05a..0e97900b2c 100644 --- a/target/m68k/translate.c +++ b/target/m68k/translate.c @@ -595,18 +595,19 @@ static void gen_flush_flags(DisasContext *s) case CC_OP_DYNAMIC: gen_helper_flush_flags(cpu_env, QREG_CC_OP); + s->cc_op_synced = 1; break; default: t0 = tcg_const_i32(s->cc_op); gen_helper_flush_flags(cpu_env, t0); tcg_temp_free(t0); + s->cc_op_synced = 1; break; } /* Note that flush_flags also assigned to env->cc_op. */ s->cc_op = CC_OP_FLAGS; - s->cc_op_synced = 1; } static inline TCGv gen_extend(TCGv val, int opsize, int sign) |