From nobody Sun Oct 5 14:30:47 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=mail.uni-paderborn.de ARC-Seal: i=1; a=rsa-sha256; t=1560785054; cv=none; d=zoho.com; s=zohoarc; b=fLYAgaF9SAH87zPZG4Kp0glHDGZ/eMVXauE5+72/7qYvx0SRAQUx4uBM/X9AE+nAQk9EWS+KfQHlvj+XPKXfxPdhEAa8uwWFs9GT0g1DXJxDeWd1WufAVnwpOQE1O3zCnwodDcMLEHwcQ16as2U5R90jtmkXMTz+s+2w6Df6QYo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1560785054; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=pp+igUut0CwbwIkYDbiPKGu+Wv7pYJt+XP6UeEM3Oio=; b=FedJ0X2MkGor8zS+CyuZ+IB7AF6rsoD2p5bw11XdWIHYIBPuozjobP5y7WsEV2Cdh257ga8PJ8OvfZVkL4zEzhkbBs6AAR1vnxOUau9/xz9ND2stiPqgwPtmRJ/j8ReooUOXtILo+l/htRyMU0tmlOtoCLCgJHgvFKRdUtB1Adk= ARC-Authentication-Results: i=1; mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1560785054563668.7546197606398; Mon, 17 Jun 2019 08:24:14 -0700 (PDT) Received: from localhost ([::1]:48434 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hctUT-0001j2-J9 for importer@patchew.org; Mon, 17 Jun 2019 11:24:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:47233) by lists.gnu.org with esmtp (Exim 4.86_2) (envelope-from ) id 1hcsjk-0004rD-Fv for qemu-devel@nongnu.org; Mon, 17 Jun 2019 10:35:57 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1hcsjj-0000bI-6a for qemu-devel@nongnu.org; Mon, 17 Jun 2019 10:35:56 -0400 Received: from amazonia.uni-paderborn.de ([131.234.189.15]:34308) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1hcsji-0000as-W1 for qemu-devel@nongnu.org; Mon, 17 Jun 2019 10:35:55 -0400 Received: from magmaria.uni-paderborn.de ([131.234.189.24] helo=localhost.localdomain) by mail.uni-paderborn.de with esmtp (Exim 4.89 amazonia) id 1hcsjh-0000Jd-7m; Mon, 17 Jun 2019 16:35:53 +0200 Received: from mail.uni-paderborn.de by magmaria with queue id 3427224-3; Mon, 17 Jun 2019 14:35:51 GMT X-Envelope-From: From: Bastian Koppelmann To: qemu-devel@nongnu.org Date: Mon, 17 Jun 2019 16:35:33 +0200 Message-Id: <20190617143533.15013-4-kbastian@mail.uni-paderborn.de> X-Mailer: git-send-email 2.22.0 In-Reply-To: <20190617143533.15013-1-kbastian@mail.uni-paderborn.de> References: <20190617143533.15013-1-kbastian@mail.uni-paderborn.de> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-PMX-Version: 6.4.6.2792898, Antispam-Engine: 2.7.2.2107409, Antispam-Data: 2019.6.17.142717, AntiVirus-Engine: 5.63.0, AntiVirus-Data: 2019.6.4.5630002 X-IMT-Spam-Score: 0.0 () X-IMT-Authenticated-Sender: X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 131.234.189.15 Subject: [Qemu-devel] [PATCH 3/3] target/tricore: Use translate_loop X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: kbastian@mail.uni-paderborn.de, david.brenken@efs-auto.de Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" Signed-off-by: Bastian Koppelmann --- target/tricore/translate.c | 117 +++++++++++++++++++++++-------------- 1 file changed, 74 insertions(+), 43 deletions(-) diff --git a/target/tricore/translate.c b/target/tricore/translate.c index b4e332777a..f3b297639a 100644 --- a/target/tricore/translate.c +++ b/target/tricore/translate.c @@ -8763,7 +8763,7 @@ static void decode_32Bit_opc(DisasContext *ctx) } } =20 -static void decode_opc(DisasContext *ctx, int *is_branch) +static void decode_opc(DisasContext *ctx) { /* 16-Bit Instruction */ if ((ctx->opcode & 0x1) =3D=3D 0) { @@ -8776,56 +8776,87 @@ static void decode_opc(DisasContext *ctx, int *is_b= ranch) } } =20 -void gen_intermediate_code(CPUState *cs, TranslationBlock *tb, int max_ins= ns) +static void tricore_tr_init_disas_context(DisasContextBase *dcbase, + CPUState *cs) { + DisasContext *ctx =3D container_of(dcbase, DisasContext, base); CPUTriCoreState *env =3D cs->env_ptr; - DisasContext ctx; - target_ulong pc_start; - int num_insns =3D 0; - - pc_start =3D tb->pc; - ctx.base.pc_next =3D pc_start; - ctx.base.tb =3D tb; - ctx.base.singlestep_enabled =3D cs->singlestep_enabled; - ctx.base.is_jmp =3D DISAS_NEXT; - ctx.mem_idx =3D cpu_mmu_index(env, false); - ctx.env =3D env; - - tcg_clear_temp_count(); - gen_tb_start(tb); - while (ctx.base.is_jmp =3D=3D DISAS_NEXT) { - tcg_gen_insn_start(ctx.base.pc_next); - num_insns++; - - ctx.opcode =3D cpu_ldl_code(env, ctx.base.pc_next); - decode_opc(&ctx, 0); - - if (num_insns >=3D max_insns || tcg_op_buf_full()) { - gen_save_pc(ctx.pc_succ_insn); - tcg_gen_exit_tb(NULL, 0); - break; + ctx->base.pc_next =3D ctx->base.pc_first; + ctx->mem_idx =3D cpu_mmu_index(env, false); +} + +static void tricore_tr_tb_start(DisasContextBase *db, CPUState *cpu) +{ +} + +static void tricore_tr_insn_start(DisasContextBase *dcbase, CPUState *cpu) +{ + DisasContext *ctx =3D container_of(dcbase, DisasContext, base); + + tcg_gen_insn_start(ctx->base.pc_next); +} + +static bool tricore_tr_breakpoint_check(DisasContextBase *dcbase, CPUState= *cpu, + const CPUBreakpoint *bp) +{ + return true; +} + +static void tricore_tr_translate_insn(DisasContextBase *dcbase, CPUState *= cpu) +{ + DisasContext *ctx =3D container_of(dcbase, DisasContext, base); + CPUTriCoreState *env =3D cpu->env_ptr; + + ctx->opcode =3D cpu_ldl_code(env, ctx->base.pc_next); + decode_opc(ctx); + ctx->base.pc_next =3D ctx->pc_succ_insn; + + if (ctx->base.is_jmp =3D=3D DISAS_NEXT) { + target_ulong page_start; + + page_start =3D ctx->base.pc_first & TARGET_PAGE_MASK; + if (ctx->base.pc_next - page_start >=3D TARGET_PAGE_SIZE) { + ctx->base.is_jmp =3D DISAS_TOO_MANY; } - ctx.base.pc_next =3D ctx.pc_succ_insn; } +} =20 - gen_tb_end(tb, num_insns); - tb->size =3D ctx.base.pc_next - pc_start; - tb->icount =3D num_insns; +static void tricore_tr_tb_stop(DisasContextBase *dcbase, CPUState *cpu) +{ + DisasContext *ctx =3D container_of(dcbase, DisasContext, base); =20 - if (tcg_check_temp_count()) { - printf("LEAK at %08x\n", env->PC); + switch (ctx->base.is_jmp) { + case DISAS_TOO_MANY: + gen_goto_tb(ctx, 0, ctx->base.pc_next); + break; + case DISAS_NORETURN: + break; + default: + g_assert_not_reached(); } +} =20 -#ifdef DEBUG_DISAS - if (qemu_loglevel_mask(CPU_LOG_TB_IN_ASM) - && qemu_log_in_addr_range(pc_start)) { - qemu_log_lock(); - qemu_log("IN: %s\n", lookup_symbol(pc_start)); - log_target_disas(cs, pc_start, ctx.base.pc_next - pc_start); - qemu_log("\n"); - qemu_log_unlock(); - } -#endif +static void tricore_tr_disas_log(const DisasContextBase *dcbase, CPUState = *cpu) +{ + qemu_log("IN: %s\n", lookup_symbol(dcbase->pc_first)); + log_target_disas(cpu, dcbase->pc_first, dcbase->tb->size); +} + +static const TranslatorOps tricore_tr_ops =3D { + .init_disas_context =3D tricore_tr_init_disas_context, + .tb_start =3D tricore_tr_tb_start, + .insn_start =3D tricore_tr_insn_start, + .breakpoint_check =3D tricore_tr_breakpoint_check, + .translate_insn =3D tricore_tr_translate_insn, + .tb_stop =3D tricore_tr_tb_stop, + .disas_log =3D tricore_tr_disas_log, +}; + + +void gen_intermediate_code(CPUState *cs, TranslationBlock *tb, int max_ins= ns) +{ + DisasContext ctx; + translator_loop(&tricore_tr_ops, &ctx.base, cs, tb, max_insns); } =20 void --=20 2.22.0