aboutsummaryrefslogtreecommitdiff
path: root/target/xtensa
diff options
context:
space:
mode:
authorMax Filippov <jcmvbkbc@gmail.com>2018-09-01 21:56:21 -0700
committerMax Filippov <jcmvbkbc@gmail.com>2018-10-01 11:08:36 -0700
commit06ec08a0be86c249163284dbb5e9f4828155fa83 (patch)
tree19afdc6c2cbff4c9f41422828d2440276427a0eb /target/xtensa
parent9dccbd1c69fd928a8eafbb171374029967143673 (diff)
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')
-rw-r--r--target/xtensa/translate.c13
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)