diff mbox series

[v2,18/28] target/openrisc: Use translator_use_goto_tb

Message ID 20210630183226.3290849-19-richard.henderson@linaro.org
State Superseded
Headers show
Series accel/tcg: Introduce translator_use_goto_tb | expand

Commit Message

Richard Henderson June 30, 2021, 6:32 p.m. UTC
Reorder the cases in openrisc_tr_tb_stop to make this easier to read.

Cc: Stafford Horne <shorne@gmail.com>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>

---
 target/openrisc/translate.c | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

-- 
2.25.1

Comments

Stafford Horne July 7, 2021, 8:59 p.m. UTC | #1
On Wed, Jun 30, 2021 at 11:32:16AM -0700, Richard Henderson wrote:
> Reorder the cases in openrisc_tr_tb_stop to make this easier to read.


Hi Richard,

For me the description is a bit misleading.  I don't see it as a simple
reorder for making things easier to read, because we need to understand
what is inside of translator_use_goto_tb now.

From the patch basically translator_use_goto_tb indicates that a jump is in
the same page and we are not single stepping.

The old code was:

  If single step
   DEBUG
  else if not same page
   tcg_gen_lookup_and_goto_ptr()
  else *same page*
   jump same page

Now:

  If translator_use_goto_tb() (same page & not single step)
    jump same page

  If single step
    DEBUG
  else *not same page*
    tcg_gen_lookup_and_goto_ptr()

It would be a bit easier to understand if the description was something like,
Reorder the control statements to allow using the page boundary check from
translator_use_goto_tb().

That said it looks correct so:

Reviewed-by: Stafford Horne <shorne@gmail.com>



> Cc: Stafford Horne <shorne@gmail.com>

> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>

> ---

>  target/openrisc/translate.c | 15 ++++++++-------

>  1 file changed, 8 insertions(+), 7 deletions(-)

> 

> diff --git a/target/openrisc/translate.c b/target/openrisc/translate.c

> index a9c81f8bd5..2d142d8577 100644

> --- a/target/openrisc/translate.c

> +++ b/target/openrisc/translate.c

> @@ -1720,16 +1720,17 @@ static void openrisc_tr_tb_stop(DisasContextBase *dcbase, CPUState *cs)

>          /* fallthru */

>  

>      case DISAS_TOO_MANY:

> -        if (unlikely(dc->base.singlestep_enabled)) {

> -            tcg_gen_movi_tl(cpu_pc, jmp_dest);

> -            gen_exception(dc, EXCP_DEBUG);

> -        } else if ((dc->base.pc_first ^ jmp_dest) & TARGET_PAGE_MASK) {

> -            tcg_gen_movi_tl(cpu_pc, jmp_dest);

> -            tcg_gen_lookup_and_goto_ptr();

> -        } else {

> +        if (translator_use_goto_tb(&dc->base, jmp_dest)) {

>              tcg_gen_goto_tb(0);

>              tcg_gen_movi_tl(cpu_pc, jmp_dest);

>              tcg_gen_exit_tb(dc->base.tb, 0);

> +            break;

> +        }

> +        tcg_gen_movi_tl(cpu_pc, jmp_dest);

> +        if (unlikely(dc->base.singlestep_enabled)) {

> +            gen_exception(dc, EXCP_DEBUG);

> +        } else {

> +            tcg_gen_lookup_and_goto_ptr();

>          }

>          break;

>  

> -- 

> 2.25.1

>
diff mbox series

Patch

diff --git a/target/openrisc/translate.c b/target/openrisc/translate.c
index a9c81f8bd5..2d142d8577 100644
--- a/target/openrisc/translate.c
+++ b/target/openrisc/translate.c
@@ -1720,16 +1720,17 @@  static void openrisc_tr_tb_stop(DisasContextBase *dcbase, CPUState *cs)
         /* fallthru */
 
     case DISAS_TOO_MANY:
-        if (unlikely(dc->base.singlestep_enabled)) {
-            tcg_gen_movi_tl(cpu_pc, jmp_dest);
-            gen_exception(dc, EXCP_DEBUG);
-        } else if ((dc->base.pc_first ^ jmp_dest) & TARGET_PAGE_MASK) {
-            tcg_gen_movi_tl(cpu_pc, jmp_dest);
-            tcg_gen_lookup_and_goto_ptr();
-        } else {
+        if (translator_use_goto_tb(&dc->base, jmp_dest)) {
             tcg_gen_goto_tb(0);
             tcg_gen_movi_tl(cpu_pc, jmp_dest);
             tcg_gen_exit_tb(dc->base.tb, 0);
+            break;
+        }
+        tcg_gen_movi_tl(cpu_pc, jmp_dest);
+        if (unlikely(dc->base.singlestep_enabled)) {
+            gen_exception(dc, EXCP_DEBUG);
+        } else {
+            tcg_gen_lookup_and_goto_ptr();
         }
         break;