]> git.proxmox.com Git - mirror_qemu.git/commitdiff
target/xtensa: always end TB on CCOUNT access/CCOMPARE write
authorMax Filippov <jcmvbkbc@gmail.com>
Sun, 2 Sep 2018 04:56:21 +0000 (21:56 -0700)
committerMax Filippov <jcmvbkbc@gmail.com>
Mon, 1 Oct 2018 18:08:36 +0000 (11:08 -0700)
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>
target/xtensa/translate.c

index cb7266970494e90d90c01874c27de3b333281441..7995a4d4ea82c434b991d0a59f38b8800faca433 100644 (file)
@@ -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)