diff options
author | Richard Henderson <rth@twiddle.net> | 2017-05-24 13:00:16 -0700 |
---|---|---|
committer | Richard Henderson <rth@twiddle.net> | 2017-06-06 14:34:32 -0700 |
commit | 06fc03486cf9b825f8afd9defe80a255364ed02c (patch) | |
tree | 7a7752e4c088121cea96232c0c38edbe2c44b53e /target/s390x/translate.c | |
parent | 99e57856f6c6da8031dcbca5f1aa6735da04bb6f (diff) |
target/s390x: End the TB after EXECUTE
This split will be required for implementing EXECUTE properly.
Do this now as a separate step to aid comparison of before and
after TB listings.
Reviewed-by: Aurelien Jarno <aurelien@aurel32.net>
Signed-off-by: Richard Henderson <rth@twiddle.net>
Diffstat (limited to 'target/s390x/translate.c')
-rw-r--r-- | target/s390x/translate.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/target/s390x/translate.c b/target/s390x/translate.c index 5c7e5c1c27..b6b9d755f9 100644 --- a/target/s390x/translate.c +++ b/target/s390x/translate.c @@ -1168,6 +1168,8 @@ typedef enum { the PC (for whatever reason), so there's no need to do it again on exiting the TB. */ EXIT_PC_UPDATED, + /* We have updated the PC and CC values. */ + EXIT_PC_CC_UPDATED, /* We are exiting the TB, but have neither emitted a goto_tb, nor updated the PC for the next instruction to be executed. */ EXIT_PC_STALE, @@ -2221,7 +2223,7 @@ static ExitStatus op_ex(DisasContext *s, DisasOps *o) tcg_temp_free_i64(v1); } - return NO_EXIT; + return EXIT_PC_CC_UPDATED; } static ExitStatus op_fieb(DisasContext *s, DisasOps *o) @@ -5494,6 +5496,8 @@ void gen_intermediate_code(CPUS390XState *env, struct TranslationBlock *tb) /* Next TB starts off with CC_OP_DYNAMIC, so make sure the cc op type is in env */ update_cc_op(&dc); + /* FALLTHRU */ + case EXIT_PC_CC_UPDATED: /* Exit the TB, either by raising a debug exception or by return. */ if (do_debug) { gen_exception(EXCP_DEBUG); |