From nobody Wed Oct 29 22:59:17 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1525861103276681.1395758695098; Wed, 9 May 2018 03:18:23 -0700 (PDT) Received: from localhost ([::1]:55513 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fGMAs-0007hU-PR for importer@patchew.org; Wed, 09 May 2018 06:18:18 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:43315) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1fGM6C-0003aM-9u for qemu-devel@nongnu.org; Wed, 09 May 2018 06:13:30 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1fGM6A-0006yP-MC for qemu-devel@nongnu.org; Wed, 09 May 2018 06:13:28 -0400 Received: from mail-pf0-x244.google.com ([2607:f8b0:400e:c00::244]:36165) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1fGM6A-0006x7-CA for qemu-devel@nongnu.org; Wed, 09 May 2018 06:13:26 -0400 Received: by mail-pf0-x244.google.com with SMTP id w129so19972021pfd.3 for ; Wed, 09 May 2018 03:13:26 -0700 (PDT) Received: from localhost.localdomain (122-58-167-38-fibre.bb.spark.co.nz. [122.58.167.38]) by smtp.gmail.com with ESMTPSA id q22sm20610396pfk.4.2018.05.09.03.13.23 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 09 May 2018 03:13:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=8TlNUxN6zyVojq+fHaouyr6s0GzzjunLDEj2jYU531o=; b=VCf19SviktQYahFcJBxvfK6mGBbPdr7wOPuuROAw8d2Wup2gSnmEKJpyzSqk0nKDvj zTvfBUZcRgkQDVDsd5YrkSZqjd8/zGHzza2C95CjsW5PJ6v1OjsKLCXKMJMIdYgL3dbi E5y94dcysRJ3w3Dl8LKuQ67ioxwKUaN7i33ftnahBmcKJrwGK+TbW1EaphLJf4Et6k03 Tne+P02coJmZl5nUh4zJgN2w4jPhCoNStcFJCNinHrIuB/BbWfESIq9/qw4Q8xG554JN QvE0g0UcnnCGPp6g1IZ8JsZgOBrHR9j9I+wBTCdu3hfKoh6xhn2vwPt2lFEo8qA8vK6U KpZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=8TlNUxN6zyVojq+fHaouyr6s0GzzjunLDEj2jYU531o=; b=XnOw66rGXUFLJvgrdOc7ANgMPXElW+Yn3xGpl4f2x5xCJ6Pjb+X72MTS9k5e6o5fPg PI/ZYe+IqhnHaJyNw82TvxMM5zfvUBaYAbzz6c0Zc6JROpZ6JchOaKWCWOkz88kgRvZL hKydZlqpVtFujUxr7uV+tMN451QvbCJXMj9Wu3jaQOFaMfjj69vhO3SBlVvqNbEUKw91 AvXPU2RndUkCU8iaJ8vtkEj8L8Rzqj/EuyN3RqZaOS+7Hszv1jKHM5UpGmq0VfwOaGlV R6PxeFwaeiDmMcxyiEWZ41b6FiTtZTvWKXw9wshXQHBVhhJsODkJ8qawQQZp8e1YY/vU OeoA== X-Gm-Message-State: ALQs6tDZdh+7MjcM7+2uMGGL4CvVjT5JH/p4eCzrKzS4kahd2/Y9xXSD 8cqWaBezWxBKuR/uxb2vsgcWaSvI42A= X-Google-Smtp-Source: AB8JxZqIj6xc1ig8+AHQbN1vYcSmW+MDvwCblvxS0qK+oNlOv1xs5rwHGpIZIfaz5V5f4HtS54/DcA== X-Received: by 2002:a63:a503:: with SMTP id n3-v6mr35011611pgf.19.1525860805249; Wed, 09 May 2018 03:13:25 -0700 (PDT) From: Michael Clark To: qemu-devel@nongnu.org Date: Wed, 9 May 2018 22:11:49 +1200 Message-Id: <1525860713-3476-3-git-send-email-mjc@sifive.com> X-Mailer: git-send-email 2.7.0 In-Reply-To: <1525860713-3476-1-git-send-email-mjc@sifive.com> References: <1525860713-3476-1-git-send-email-mjc@sifive.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c00::244 Subject: [Qemu-devel] [PATCH v1 2/6] translator: merge max_insns into DisasContextBase X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: patches@groups.riscv.org, "Emilio G. Cota" Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: "Emilio G. Cota" While at it, use int for both num_insns and max_insns to make sure we have same-type comparisons. Reviewed-by: Richard Henderson Signed-off-by: Emilio G. Cota --- 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 | 11 ++++------- target/hppa/translate.c | 7 ++----- target/i386/translate.c | 5 +---- target/ppc/translate.c | 5 ++--- 8 files changed, 28 insertions(+), 43 deletions(-) diff --git a/accel/tcg/translator.c b/accel/tcg/translator.c index 23c6602cd921..0f9dca911399 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 =3D tb; db->pc_first =3D tb->pc; @@ -45,18 +43,18 @@ void translator_loop(const TranslatorOps *ops, DisasCon= textBase *db, db->singlestep_enabled =3D cpu->singlestep_enabled; =20 /* Instruction counting */ - max_insns =3D tb_cflags(db->tb) & CF_COUNT_MASK; - if (max_insns =3D=3D 0) { - max_insns =3D CF_COUNT_MASK; + db->max_insns =3D tb_cflags(db->tb) & CF_COUNT_MASK; + if (db->max_insns =3D=3D 0) { + db->max_insns =3D CF_COUNT_MASK; } - if (max_insns > TCG_MAX_INSNS) { - max_insns =3D TCG_MAX_INSNS; + if (db->max_insns > TCG_MAX_INSNS) { + db->max_insns =3D TCG_MAX_INSNS; } if (db->singlestep_enabled || singlestep) { - max_insns =3D 1; + db->max_insns =3D 1; } =20 - max_insns =3D ops->init_disas_context(db, cpu, max_insns); + ops->init_disas_context(db, cpu); tcg_debug_assert(db->is_jmp =3D=3D DISAS_NEXT); /* no early exit */ =20 /* Reset the temp count so that we can identify leaks */ @@ -95,7 +93,8 @@ void translator_loop(const TranslatorOps *ops, DisasConte= xtBase *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 =3D=3D max_insns && (tb_cflags(db->tb) & CF_LAST= _IO)) { + if (db->num_insns =3D=3D 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, DisasCon= textBase *db, =20 /* 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 >=3D max_insns) { + if (tcg_op_buf_full() || db->num_insns >=3D db->max_insns) { db->is_jmp =3D DISAS_TOO_MANY; break; } diff --git a/include/exec/translator.h b/include/exec/translator.h index e2dc2a04ae37..71e7b2c34714 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; =20 @@ -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 73a1b5e63ed1..15eca71d49f7 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; } =20 -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 =3D container_of(dcbase, DisasContext, base); CPUAlphaState *env =3D cpu->env_ptr; @@ -2959,8 +2958,7 @@ static int alpha_tr_init_disas_context(DisasContextBa= se *dcbase, mask =3D TARGET_PAGE_MASK; } bound =3D -(ctx->base.pc_first | mask) / 4; - - return MIN(max_insns, bound); + ctx->base.max_insns =3D MIN(ctx->base.max_insns, bound); } =20 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 6d49f30b4a4e..1e7c150514ca 100644 --- a/target/arm/translate-a64.c +++ b/target/arm/translate-a64.c @@ -13224,8 +13224,8 @@ static void disas_a64_insn(CPUARMState *env, DisasC= ontext *s) free_tmp_a64(s); } =20 -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 =3D container_of(dcbase, DisasContext, base); CPUARMState *env =3D cpu->env_ptr; @@ -13288,11 +13288,9 @@ static int aarch64_tr_init_disas_context(DisasCont= extBase *dcbase, if (dc->ss_active) { bound =3D 1; } - max_insns =3D MIN(max_insns, bound); + dc->base.max_insns =3D MIN(dc->base.max_insns, bound); =20 init_tmp_a64_array(dc); - - return max_insns; } =20 static void aarch64_tr_tb_start(DisasContextBase *db, CPUState *cpu) diff --git a/target/arm/translate.c b/target/arm/translate.c index ad208867a79f..47f990cc0d01 100644 --- a/target/arm/translate.c +++ b/target/arm/translate.c @@ -12243,8 +12243,7 @@ static bool insn_crosses_page(CPUARMState *env, Dis= asContext *s) return !thumb_insn_is_16bit(s, insn); } =20 -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 =3D container_of(dcbase, DisasContext, base); CPUARMState *env =3D cs->env_ptr; @@ -12306,14 +12305,14 @@ static int arm_tr_init_disas_context(DisasContext= Base *dcbase, =20 /* If architectural single step active, limit to 1. */ if (is_singlestepping(dc)) { - max_insns =3D 1; + dc->base.max_insns =3D 1; } =20 /* ARM is a fixed-length ISA. Bound the number of insns to execute to those left on the page. */ if (!dc->thumb) { - int bound =3D (dc->next_page_start - dc->base.pc_first) / 4; - max_insns =3D MIN(max_insns, bound); + int bound =3D -(dc->base.pc_first | TARGET_PAGE_MASK) / 4; + dc->base.max_insns =3D MIN(dc->base.max_insns, bound); } =20 cpu_F0s =3D tcg_temp_new_i32(); @@ -12324,8 +12323,6 @@ static int arm_tr_init_disas_context(DisasContextBa= se *dcbase, cpu_V1 =3D cpu_F1d; /* FIXME: cpu_M0 can probably be the same as cpu_V0. */ cpu_M0 =3D tcg_temp_new_i64(); - - return max_insns; } =20 static void arm_tr_tb_start(DisasContextBase *dcbase, CPUState *cpu) diff --git a/target/hppa/translate.c b/target/hppa/translate.c index cdc397308b9f..5320b217deb0 100644 --- a/target/hppa/translate.c +++ b/target/hppa/translate.c @@ -4669,8 +4669,7 @@ static DisasJumpType translate_one(DisasContext *ctx,= uint32_t insn) return gen_illegal(ctx); } =20 -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 =3D container_of(dcbase, DisasContext, base); int bound; @@ -4700,14 +4699,12 @@ static int hppa_tr_init_disas_context(DisasContextB= ase *dcbase, =20 /* Bound the number of instructions by those left on the page. */ bound =3D -(ctx->base.pc_first | TARGET_PAGE_MASK) / 4; - bound =3D MIN(max_insns, bound); + ctx->base.max_insns =3D MIN(ctx->base.max_insns, bound); =20 ctx->ntempr =3D 0; ctx->ntempl =3D 0; memset(ctx->tempr, 0, sizeof(ctx->tempr)); memset(ctx->templ, 0, sizeof(ctx->templ)); - - return bound; } =20 static void hppa_tr_tb_start(DisasContextBase *dcbase, CPUState *cs) diff --git a/target/i386/translate.c b/target/i386/translate.c index c9ed8dc70978..b0f69838f24b 100644 --- a/target/i386/translate.c +++ b/target/i386/translate.c @@ -8402,8 +8402,7 @@ void tcg_x86_init(void) } } =20 -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 =3D container_of(dcbase, DisasContext, base); CPUX86State *env =3D cpu->env_ptr; @@ -8470,8 +8469,6 @@ static int i386_tr_init_disas_context(DisasContextBas= e *dcbase, CPUState *cpu, cpu_ptr0 =3D tcg_temp_new_ptr(); cpu_ptr1 =3D tcg_temp_new_ptr(); cpu_cc_srcT =3D tcg_temp_local_new(); - - return max_insns; } =20 static void i386_tr_tb_start(DisasContextBase *db, CPUState *cpu) diff --git a/target/ppc/translate.c b/target/ppc/translate.c index 2a4140f42062..7972e6b4101e 100644 --- a/target/ppc/translate.c +++ b/target/ppc/translate.c @@ -7215,8 +7215,7 @@ void ppc_cpu_dump_statistics(CPUState *cs, FILE*f, #endif } =20 -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 =3D container_of(dcbase, DisasContext, base); CPUPPCState *env =3D cs->env_ptr; @@ -7281,7 +7280,7 @@ static int ppc_tr_init_disas_context(DisasContextBase= *dcbase, #endif =20 bound =3D -(ctx->base.pc_first | TARGET_PAGE_MASK) / 4; - return MIN(max_insns, bound); + ctx->base.max_insns =3D MIN(ctx->base.max_insns, bound); } =20 static void ppc_tr_tb_start(DisasContextBase *db, CPUState *cs) --=20 2.7.0