All of lore.kernel.org
 help / color / mirror / Atom feed
From: Michael Clark <mjc@sifive.com>
To: "Emilio G. Cota" <cota@braap.org>
Cc: QEMU Developers <qemu-devel@nongnu.org>,
	Richard Henderson <richard.henderson@linaro.org>
Subject: Re: [Qemu-devel] [PATCH 01/18] translator: merge max_insns into DisasContextBase
Date: Wed, 9 May 2018 22:04:33 +1200	[thread overview]
Message-ID: <CAHNT7NvVy6M=hMXZSidCeCw9FAO4keMyXL_8sedoaO-wz4wQRQ@mail.gmail.com> (raw)
In-Reply-To: <1524250517-28032-2-git-send-email-cota@braap.org>

On Sat, Apr 21, 2018 at 6:55 AM, Emilio G. Cota <cota@braap.org> wrote:

> While at it, use int for both num_insns and max_insns to make
> sure we have same-type comparisons.
>
> Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
> Signed-off-by: Emilio G. Cota <cota@braap.org>
>

Reviewed-by: Michael Clark <mjc@sifive.com>


> ---
>  accel/tcg/translator.c     | 21 ++++++++++-----------
>  include/exec/translator.h  |  8 ++++----
>  target/alpha/translate.c   |  6 ++----
>  target/arm/translate-a64.c |  8 +++-----
>  target/arm/translate.c     |  9 +++------
>  target/hppa/translate.c    |  7 ++-----
>  target/i386/translate.c    |  5 +----
>  target/ppc/translate.c     |  5 ++---
>  8 files changed, 27 insertions(+), 42 deletions(-)
>
> diff --git a/accel/tcg/translator.c b/accel/tcg/translator.c
> index 23c6602..0f9dca9 100644
> --- a/accel/tcg/translator.c
> +++ b/accel/tcg/translator.c
> @@ -34,8 +34,6 @@ void translator_loop_temp_check(DisasContextBase *db)
>  void translator_loop(const TranslatorOps *ops, DisasContextBase *db,
>                       CPUState *cpu, TranslationBlock *tb)
>  {
> -    int max_insns;
> -
>      /* Initialize DisasContext */
>      db->tb = tb;
>      db->pc_first = tb->pc;
> @@ -45,18 +43,18 @@ void translator_loop(const TranslatorOps *ops,
> DisasContextBase *db,
>      db->singlestep_enabled = cpu->singlestep_enabled;
>
>      /* Instruction counting */
> -    max_insns = tb_cflags(db->tb) & CF_COUNT_MASK;
> -    if (max_insns == 0) {
> -        max_insns = CF_COUNT_MASK;
> +    db->max_insns = tb_cflags(db->tb) & CF_COUNT_MASK;
> +    if (db->max_insns == 0) {
> +        db->max_insns = CF_COUNT_MASK;
>      }
> -    if (max_insns > TCG_MAX_INSNS) {
> -        max_insns = TCG_MAX_INSNS;
> +    if (db->max_insns > TCG_MAX_INSNS) {
> +        db->max_insns = TCG_MAX_INSNS;
>      }
>      if (db->singlestep_enabled || singlestep) {
> -        max_insns = 1;
> +        db->max_insns = 1;
>      }
>
> -    max_insns = ops->init_disas_context(db, cpu, max_insns);
> +    ops->init_disas_context(db, cpu);
>      tcg_debug_assert(db->is_jmp == DISAS_NEXT);  /* no early exit */
>
>      /* Reset the temp count so that we can identify leaks */
> @@ -95,7 +93,8 @@ void translator_loop(const TranslatorOps *ops,
> DisasContextBase *db,
>             update db->pc_next and db->is_jmp to indicate what should be
>             done next -- either exiting this loop or locate the start of
>             the next instruction.  */
> -        if (db->num_insns == max_insns && (tb_cflags(db->tb) &
> CF_LAST_IO)) {
> +        if (db->num_insns == db->max_insns
> +            && (tb_cflags(db->tb) & CF_LAST_IO)) {
>              /* Accept I/O on the last instruction.  */
>              gen_io_start();
>              ops->translate_insn(db, cpu);
> @@ -111,7 +110,7 @@ void translator_loop(const TranslatorOps *ops,
> DisasContextBase *db,
>
>          /* Stop translation if the output buffer is full,
>             or we have executed all of the allowed instructions.  */
> -        if (tcg_op_buf_full() || db->num_insns >= max_insns) {
> +        if (tcg_op_buf_full() || db->num_insns >= db->max_insns) {
>              db->is_jmp = DISAS_TOO_MANY;
>              break;
>          }
> diff --git a/include/exec/translator.h b/include/exec/translator.h
> index e2dc2a0..71e7b2c 100644
> --- a/include/exec/translator.h
> +++ b/include/exec/translator.h
> @@ -58,6 +58,7 @@ typedef enum DisasJumpType {
>   *           disassembly).
>   * @is_jmp: What instruction to disassemble next.
>   * @num_insns: Number of translated instructions (including current).
> + * @max_insns: Maximum number of instructions to be translated in this TB.
>   * @singlestep_enabled: "Hardware" single stepping enabled.
>   *
>   * Architecture-agnostic disassembly context.
> @@ -67,7 +68,8 @@ typedef struct DisasContextBase {
>      target_ulong pc_first;
>      target_ulong pc_next;
>      DisasJumpType is_jmp;
> -    unsigned int num_insns;
> +    int num_insns;
> +    int max_insns;
>      bool singlestep_enabled;
>  } DisasContextBase;
>
> @@ -76,7 +78,6 @@ typedef struct DisasContextBase {
>   * @init_disas_context:
>   *      Initialize the target-specific portions of DisasContext struct.
>   *      The generic DisasContextBase has already been initialized.
> - *      Return max_insns, modified as necessary by db->tb->flags.
>   *
>   * @tb_start:
>   *      Emit any code required before the start of the main loop,
> @@ -106,8 +107,7 @@ typedef struct DisasContextBase {
>   *      Print instruction disassembly to log.
>   */
>  typedef struct TranslatorOps {
> -    int (*init_disas_context)(DisasContextBase *db, CPUState *cpu,
> -                              int max_insns);
> +    void (*init_disas_context)(DisasContextBase *db, CPUState *cpu);
>      void (*tb_start)(DisasContextBase *db, CPUState *cpu);
>      void (*insn_start)(DisasContextBase *db, CPUState *cpu);
>      bool (*breakpoint_check)(DisasContextBase *db, CPUState *cpu,
> diff --git a/target/alpha/translate.c b/target/alpha/translate.c
> index 73a1b5e..15eca71 100644
> --- a/target/alpha/translate.c
> +++ b/target/alpha/translate.c
> @@ -2919,8 +2919,7 @@ static DisasJumpType translate_one(DisasContext
> *ctx, uint32_t insn)
>      return ret;
>  }
>
> -static int alpha_tr_init_disas_context(DisasContextBase *dcbase,
> -                                       CPUState *cpu, int max_insns)
> +static void alpha_tr_init_disas_context(DisasContextBase *dcbase,
> CPUState *cpu)
>  {
>      DisasContext *ctx = container_of(dcbase, DisasContext, base);
>      CPUAlphaState *env = cpu->env_ptr;
> @@ -2959,8 +2958,7 @@ static int alpha_tr_init_disas_context(DisasContextBase
> *dcbase,
>          mask = TARGET_PAGE_MASK;
>      }
>      bound = -(ctx->base.pc_first | mask) / 4;
> -
> -    return MIN(max_insns, bound);
> +    ctx->base.max_insns = MIN(ctx->base.max_insns, bound);
>  }
>
>  static void alpha_tr_tb_start(DisasContextBase *db, CPUState *cpu)
> diff --git a/target/arm/translate-a64.c b/target/arm/translate-a64.c
> index c913292..1bf16ff 100644
> --- a/target/arm/translate-a64.c
> +++ b/target/arm/translate-a64.c
> @@ -13218,8 +13218,8 @@ static void disas_a64_insn(CPUARMState *env,
> DisasContext *s)
>      free_tmp_a64(s);
>  }
>
> -static int aarch64_tr_init_disas_context(DisasContextBase *dcbase,
> -                                         CPUState *cpu, int max_insns)
> +static void aarch64_tr_init_disas_context(DisasContextBase *dcbase,
> +                                          CPUState *cpu)
>  {
>      DisasContext *dc = container_of(dcbase, DisasContext, base);
>      CPUARMState *env = cpu->env_ptr;
> @@ -13282,11 +13282,9 @@ static int aarch64_tr_init_disas_context(DisasContextBase
> *dcbase,
>      if (dc->ss_active) {
>          bound = 1;
>      }
> -    max_insns = MIN(max_insns, bound);
> +    dc->base.max_insns = MIN(dc->base.max_insns, bound);
>
>      init_tmp_a64_array(dc);
> -
> -    return max_insns;
>  }
>
>  static void aarch64_tr_tb_start(DisasContextBase *db, CPUState *cpu)
> diff --git a/target/arm/translate.c b/target/arm/translate.c
> index d80c0c4..acf539f 100644
> --- a/target/arm/translate.c
> +++ b/target/arm/translate.c
> @@ -12216,8 +12216,7 @@ static bool insn_crosses_page(CPUARMState *env,
> DisasContext *s)
>      return !thumb_insn_is_16bit(s, insn);
>  }
>
> -static int arm_tr_init_disas_context(DisasContextBase *dcbase,
> -                                     CPUState *cs, int max_insns)
> +static void arm_tr_init_disas_context(DisasContextBase *dcbase, CPUState
> *cs)
>  {
>      DisasContext *dc = container_of(dcbase, DisasContext, base);
>      CPUARMState *env = cs->env_ptr;
> @@ -12278,14 +12277,14 @@ static int arm_tr_init_disas_context(DisasContextBase
> *dcbase,
>
>      /* If architectural single step active, limit to 1.  */
>      if (is_singlestepping(dc)) {
> -        max_insns = 1;
> +        dc->base.max_insns = 1;
>      }
>
>      /* ARM is a fixed-length ISA.  Bound the number of insns to execute
>         to those left on the page.  */
>      if (!dc->thumb) {
>          int bound = -(dc->base.pc_first | TARGET_PAGE_MASK) / 4;
> -        max_insns = MIN(max_insns, bound);
> +        dc->base.max_insns = MIN(dc->base.max_insns, bound);
>      }
>
>      cpu_F0s = tcg_temp_new_i32();
> @@ -12296,8 +12295,6 @@ static int arm_tr_init_disas_context(DisasContextBase
> *dcbase,
>      cpu_V1 = cpu_F1d;
>      /* FIXME: cpu_M0 can probably be the same as cpu_V0.  */
>      cpu_M0 = tcg_temp_new_i64();
> -
> -    return max_insns;
>  }
>
>  static void arm_tr_tb_start(DisasContextBase *dcbase, CPUState *cpu)
> diff --git a/target/hppa/translate.c b/target/hppa/translate.c
> index c532889..424991f 100644
> --- a/target/hppa/translate.c
> +++ b/target/hppa/translate.c
> @@ -4681,8 +4681,7 @@ static DisasJumpType translate_one(DisasContext
> *ctx, uint32_t insn)
>      return gen_illegal(ctx);
>  }
>
> -static int hppa_tr_init_disas_context(DisasContextBase *dcbase,
> -                                      CPUState *cs, int max_insns)
> +static void hppa_tr_init_disas_context(DisasContextBase *dcbase,
> CPUState *cs)
>  {
>      DisasContext *ctx = container_of(dcbase, DisasContext, base);
>      int bound;
> @@ -4712,14 +4711,12 @@ static int hppa_tr_init_disas_context(DisasContextBase
> *dcbase,
>
>      /* Bound the number of instructions by those left on the page.  */
>      bound = -(ctx->base.pc_first | TARGET_PAGE_MASK) / 4;
> -    bound = MIN(max_insns, bound);
> +    ctx->base.max_insns = MIN(ctx->base.max_insns, bound);
>
>      ctx->ntempr = 0;
>      ctx->ntempl = 0;
>      memset(ctx->tempr, 0, sizeof(ctx->tempr));
>      memset(ctx->templ, 0, sizeof(ctx->templ));
> -
> -    return bound;
>  }
>
>  static void hppa_tr_tb_start(DisasContextBase *dcbase, CPUState *cs)
> diff --git a/target/i386/translate.c b/target/i386/translate.c
> index c9ed8dc..b0f6983 100644
> --- a/target/i386/translate.c
> +++ b/target/i386/translate.c
> @@ -8402,8 +8402,7 @@ void tcg_x86_init(void)
>      }
>  }
>
> -static int i386_tr_init_disas_context(DisasContextBase *dcbase, CPUState
> *cpu,
> -                                      int max_insns)
> +static void i386_tr_init_disas_context(DisasContextBase *dcbase,
> CPUState *cpu)
>  {
>      DisasContext *dc = container_of(dcbase, DisasContext, base);
>      CPUX86State *env = cpu->env_ptr;
> @@ -8470,8 +8469,6 @@ static int i386_tr_init_disas_context(DisasContextBase
> *dcbase, CPUState *cpu,
>      cpu_ptr0 = tcg_temp_new_ptr();
>      cpu_ptr1 = tcg_temp_new_ptr();
>      cpu_cc_srcT = tcg_temp_local_new();
> -
> -    return max_insns;
>  }
>
>  static void i386_tr_tb_start(DisasContextBase *db, CPUState *cpu)
> diff --git a/target/ppc/translate.c b/target/ppc/translate.c
> index 3457d29..019489b 100644
> --- a/target/ppc/translate.c
> +++ b/target/ppc/translate.c
> @@ -7212,8 +7212,7 @@ void ppc_cpu_dump_statistics(CPUState *cs, FILE*f,
>  #endif
>  }
>
> -static int ppc_tr_init_disas_context(DisasContextBase *dcbase,
> -                                     CPUState *cs, int max_insns)
> +static void ppc_tr_init_disas_context(DisasContextBase *dcbase, CPUState
> *cs)
>  {
>      DisasContext *ctx = container_of(dcbase, DisasContext, base);
>      CPUPPCState *env = cs->env_ptr;
> @@ -7278,7 +7277,7 @@ static int ppc_tr_init_disas_context(DisasContextBase
> *dcbase,
>  #endif
>
>      bound = -(ctx->base.pc_first | TARGET_PAGE_MASK) / 4;
> -    return MIN(max_insns, bound);
> +    ctx->base.max_insns = MIN(ctx->base.max_insns, bound);
>  }
>
>  static void ppc_tr_tb_start(DisasContextBase *db, CPUState *cs)
> --
> 2.7.4
>
>
>

  reply	other threads:[~2018-05-09 10:04 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-04-20 18:54 [Qemu-devel] [PATCH v3 00/18] Translation loop conversion for sh4/sparc/mips/s390x/openrisc/riscv targets Emilio G. Cota
2018-04-20 18:55 ` [Qemu-devel] [PATCH 01/18] translator: merge max_insns into DisasContextBase Emilio G. Cota
2018-05-09 10:04   ` Michael Clark [this message]
2018-04-20 18:55 ` [Qemu-devel] [PATCH 02/18] target/sh4: convert to TranslatorOps Emilio G. Cota
2018-04-20 18:55 ` [Qemu-devel] [PATCH 03/18] target/sparc: convert to DisasJumpType Emilio G. Cota
2018-04-20 18:55 ` [Qemu-devel] [PATCH 04/18] target/sparc: convert to DisasContextBase Emilio G. Cota
2018-04-20 18:55 ` [Qemu-devel] [PATCH 05/18] target/sparc: convert to TranslatorOps Emilio G. Cota
2018-04-20 18:55 ` [Qemu-devel] [PATCH 06/18] target/mips: use lookup_and_goto_ptr on BS_STOP Emilio G. Cota
2018-04-22 19:37   ` Richard Henderson
2018-04-20 18:55 ` [Qemu-devel] [PATCH 07/18] target/mips: convert to DisasJumpType Emilio G. Cota
2018-04-22 19:52   ` Richard Henderson
2018-04-23 16:54     ` Emilio G. Cota
2018-04-20 18:55 ` [Qemu-devel] [PATCH 08/18] target/mips: convert to DisasContextBase Emilio G. Cota
2018-04-20 18:55 ` [Qemu-devel] [PATCH 09/18] target/mips: use *ctx for DisasContext Emilio G. Cota
2018-04-20 18:55 ` [Qemu-devel] [PATCH 10/18] target/mips: convert to TranslatorOps Emilio G. Cota
2018-04-22 19:54   ` Richard Henderson
2018-04-20 18:55 ` [Qemu-devel] [PATCH 11/18] target/s390x: convert to DisasJumpType Emilio G. Cota
2018-04-20 18:55 ` [Qemu-devel] [PATCH 12/18] target/s390x: convert to DisasContextBase Emilio G. Cota
2018-04-20 18:55 ` [Qemu-devel] [PATCH 13/18] target/s390x: convert to TranslatorOps Emilio G. Cota
2018-04-20 18:55 ` [Qemu-devel] [PATCH 14/18] target/openrisc: convert to DisasContextBase Emilio G. Cota
2018-04-20 19:44   ` Philippe Mathieu-Daudé
2018-04-20 18:55 ` [Qemu-devel] [PATCH 15/18] target/openrisc: convert to TranslatorOps Emilio G. Cota
2018-04-20 18:55 ` [Qemu-devel] [PATCH 16/18] target/riscv: convert to DisasJumpType Emilio G. Cota
2018-04-20 18:55 ` [Qemu-devel] [PATCH 17/18] target/riscv: convert to DisasContextBase Emilio G. Cota
2018-04-20 18:55 ` [Qemu-devel] [PATCH 18/18] target/riscv: convert to TranslatorOps Emilio G. Cota
2018-05-09 10:11   ` Michael Clark

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAHNT7NvVy6M=hMXZSidCeCw9FAO4keMyXL_8sedoaO-wz4wQRQ@mail.gmail.com' \
    --to=mjc@sifive.com \
    --cc=cota@braap.org \
    --cc=qemu-devel@nongnu.org \
    --cc=richard.henderson@linaro.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.