diff mbox series

target/xtensa: drop gen_io_end call

Message ID 20200622053537.25245-1-jcmvbkbc@gmail.com
State New
Headers show
Series target/xtensa: drop gen_io_end call | expand

Commit Message

Max Filippov June 22, 2020, 5:35 a.m. UTC
Since commit
ba3e7926691e ("icount: clean up cpu_can_io at the entry to the block")
it has been unnecessary for target code to call gen_io_end() after an IO
instruction in icount mode; it is sufficient to call gen_io_start()
before it and to force the end of the TB.
Remaining call in xtensa target translator is for the opcodes that may
change IRQ state. All of them end current TB, so gen_io_end is not
needed. Drop gen_io_end call from the xtensa target translator.

Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
---
 target/xtensa/translate.c | 3 ---
 1 file changed, 3 deletions(-)

Comments

Peter Maydell June 22, 2020, 10:23 a.m. UTC | #1
On Mon, 22 Jun 2020 at 06:36, Max Filippov <jcmvbkbc@gmail.com> wrote:
>
> Since commit
> ba3e7926691e ("icount: clean up cpu_can_io at the entry to the block")
> it has been unnecessary for target code to call gen_io_end() after an IO
> instruction in icount mode; it is sufficient to call gen_io_start()
> before it and to force the end of the TB.
> Remaining call in xtensa target translator is for the opcodes that may
> change IRQ state. All of them end current TB, so gen_io_end is not
> needed. Drop gen_io_end call from the xtensa target translator.

Most of the insns which set XTENSA_OP_CHECK_INTERRUPTS in their
.op_flags also set XTENSA_OP_EXIT_TB_M1 or XTENSA_OP_EXIT_TB_0;
the ones which don't are "rfe", "rfi", "rfwo" and "rfwu". Looking
through what they do, they all end up calling gen_jump(), which
will end the TB.

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>

thanks
-- PMM
diff mbox series

Patch

diff --git a/target/xtensa/translate.c b/target/xtensa/translate.c
index 4bc15252c8a5..6346b2eef014 100644
--- a/target/xtensa/translate.c
+++ b/target/xtensa/translate.c
@@ -595,9 +595,6 @@  static int gen_postprocess(DisasContext *dc, int slot)
             gen_io_start();
         }
         gen_helper_check_interrupts(cpu_env);
-        if (tb_cflags(dc->base.tb) & CF_USE_ICOUNT) {
-            gen_io_end();
-        }
     }
 #endif
     if (op_flags & XTENSA_OP_SYNC_REGISTER_WINDOW) {