diff options
author | Max Filippov | 2018-09-02 06:56:21 +0200 |
---|---|---|
committer | Max Filippov | 2018-10-01 20:08:36 +0200 |
commit | 06ec08a0be86c249163284dbb5e9f4828155fa83 (patch) | |
tree | 19afdc6c2cbff4c9f41422828d2440276427a0eb /target/xtensa/translate.c | |
parent | target/xtensa: change SR number checks to assertions (diff) | |
download | qemu-06ec08a0be86c249163284dbb5e9f4828155fa83.tar.gz qemu-06ec08a0be86c249163284dbb5e9f4828155fa83.tar.xz qemu-06ec08a0be86c249163284dbb5e9f4828155fa83.zip |
target/xtensa: always end TB on CCOUNT access/CCOMPARE write
Currently we only end TB in icount mode, because access to CCOUNT or
write to CCOMPARE are IO operations. Simplify the behaviour a bit and
end TB unconditionally.
Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
Diffstat (limited to 'target/xtensa/translate.c')
-rw-r--r-- | target/xtensa/translate.c | 13 |
1 files changed, 5 insertions, 8 deletions
diff --git a/target/xtensa/translate.c b/target/xtensa/translate.c index cb72669704..7995a4d4ea 100644 --- a/target/xtensa/translate.c +++ b/target/xtensa/translate.c @@ -505,9 +505,8 @@ static bool gen_rsr_ccount(DisasContext *dc, TCGv_i32 d, uint32_t sr) tcg_gen_mov_i32(d, cpu_SR[sr]); if (tb_cflags(dc->base.tb) & CF_USE_ICOUNT) { gen_io_end(); - return true; } - return false; + return true; } static bool gen_rsr_ptevaddr(DisasContext *dc, TCGv_i32 d, uint32_t sr) @@ -735,10 +734,9 @@ static bool gen_wsr_ccount(DisasContext *dc, uint32_t sr, TCGv_i32 v) gen_helper_wsr_ccount(cpu_env, v); if (tb_cflags(dc->base.tb) & CF_USE_ICOUNT) { gen_io_end(); - gen_jumpi_check_loop_end(dc, 0); - return true; } - return false; + gen_jumpi_check_loop_end(dc, 0); + return true; } static bool gen_wsr_icount(DisasContext *dc, uint32_t sr, TCGv_i32 v) @@ -773,10 +771,9 @@ static bool gen_wsr_ccompare(DisasContext *dc, uint32_t sr, TCGv_i32 v) tcg_temp_free(tmp); if (tb_cflags(dc->base.tb) & CF_USE_ICOUNT) { gen_io_end(); - gen_jumpi_check_loop_end(dc, 0); - return true; } - return false; + gen_jumpi_check_loop_end(dc, 0); + return true; } #else static void gen_check_interrupts(DisasContext *dc) |