From nobody Fri Apr 19 18:57:31 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of _spf.google.com designates 209.85.221.48 as permitted sender) client-ip=209.85.221.48; envelope-from=philippe.mathieu.daude@gmail.com; helo=mail-wr1-f48.google.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of _spf.google.com designates 209.85.221.48 as permitted sender) smtp.mailfrom=philippe.mathieu.daude@gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1610488514; cv=none; d=zohomail.com; s=zohoarc; b=SkhhxXzO1FHZutsUEhGqq3HJI+u21BOJ5FbzkzRCDRe9Xd0ZpM0ijWrbcMr/o2apN+7Od6IBz8zzBoKtNzfn7RxQvwYv7nBCNQSu5pT5xczx37GMhdkpJ/xpLcQbbNUqFqA2vqEN0XbR/Lh1b10GpzLTvtCNwH/0g+4IgRg3t7E= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1610488514; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Sender:Subject:To; bh=R5+CptAzrxEHDBYh29wFpGC187htOzgdNCjnN5XvwCI=; b=C59hvssiSAFq+EvJPJ76iaLAq6PX4SC47hCxxPycRRPo1wlZgrJX8DBFhd0jI1FWXhTWMAWtdTZkLc614AtepCwJXUwyjs+MomthaUMwxqKDjuVtDdEcKk2Dcrq+zz2XxsN3ZT+zDeNmvGz+hCzuelLvWOTYH7TXLRSprVP8o0E= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of _spf.google.com designates 209.85.221.48 as permitted sender) smtp.mailfrom=philippe.mathieu.daude@gmail.com Received: from mail-wr1-f48.google.com (mail-wr1-f48.google.com [209.85.221.48]) by mx.zohomail.com with SMTPS id 1610488514945253.38644478762694; Tue, 12 Jan 2021 13:55:14 -0800 (PST) Received: by mail-wr1-f48.google.com with SMTP id d13so4021619wrc.13 for ; Tue, 12 Jan 2021 13:55:14 -0800 (PST) Return-Path: Return-Path: Received: from x1w.redhat.com (190.red-83-57-173.dynamicip.rima-tde.net. [83.57.173.190]) by smtp.gmail.com with ESMTPSA id h16sm5609960wmb.41.2021.01.12.13.55.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Jan 2021 13:55:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=R5+CptAzrxEHDBYh29wFpGC187htOzgdNCjnN5XvwCI=; b=OCi/7PPdCubpE/c1YGbvItN8Lus43KTft0crVkPZEh3v+wKXkibv0r5G8DPThsMCiq bDHvi915BFBtMwWPJZsWs2ymeIB41zXtJBljhydP8+qZC+QuviOA+jT5CbNpxvt5yMf7 BdwyMkxNG+sjcuX8+rz2WJlqJHIABM+aPpkm90v1Z9VxM7LfXYQSDNBZBUzfEPZID7XW 7eFwb1Ny5LshEp3qnL47gmLQbCCQNIaJO5bYZlLEKfGu5iDDvKCgn0DaRsG1zQT7z4rh j4RxUyT8ycFgMxMxQdjTpV4Rc/D6j0sEJ2+lMo6BfauKrg/YQW5a/FVM4xR4gcIT6LTy yzTg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=R5+CptAzrxEHDBYh29wFpGC187htOzgdNCjnN5XvwCI=; b=m4gcQYOSkrKR2N7NjgC4gUXfqAtkSs7AaTdBt6rjVVkXju6oHzTB7J7vx4iWJeTBzs ETalRuYuHwaQH73taOi+9HKfqNh9RH6rZmCSX01rKjCJRl2cM8xusSSi1qPJCqZSuEk1 QkIzLP6/GEBuLHZE4VrSW8A2EUda3wZQf9lhOT1bw5sYFoze6nL85UWqBbp1E7frnDSI rZp4oTAeTOX1xWXCJb2rvaDUA6IzBHEh6Dj+dA+xu9XhrGJB0aDDU7K99UyRVaXpDPEd ShvWwOYr4tf+6Hm8RtEloKd1gnKyWWx5mhwgsh26OeHmserhTp3PstpmfWMbgAOWFqgv Vwxg== X-Gm-Message-State: AOAM530CNH5hBjD5P5Io0J+o3Tu1VpHg6ie+IV/KrrqWU378D+jTfSLV c9BjUhdS3I11dI7efHO7yvM= X-Google-Smtp-Source: ABdhPJzMBcnPXrKy4BIW6pIYL+mccqHozAO6UWN6KE1lFANP/0Mf+DjQqu0jAh2mUw8jI0x0vSwYmA== X-Received: by 2002:adf:8342:: with SMTP id 60mr842567wrd.140.1610488513085; Tue, 12 Jan 2021 13:55:13 -0800 (PST) Sender: =?UTF-8?Q?Philippe_Mathieu=2DDaud=C3=A9?= From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org Cc: Aurelien Jarno , Huacai Chen , Jiaxun Yang , Richard Henderson , Aleksandar Rikalo , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH 1/6] target/mips: Re-introduce OPC_ADDUH_QB_DSP and OPC_MUL_PH_DSP Date: Tue, 12 Jan 2021 22:54:59 +0100 Message-Id: <20210112215504.2093955-2-f4bug@amsat.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20210112215504.2093955-1-f4bug@amsat.org> References: <20210112215504.2093955-1-f4bug@amsat.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @gmail.com) There is no issue having multiple enum declarations with the same value. As we are going to remove the OPC_MULT_G_2E definition in few commits, restore the OPC_ADDUH_QB_DSP and OPC_MUL_PH_DSP definitions and use them where they belong. Signed-off-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Jiaxun Yang Reviewed-by: Richard Henderson --- target/mips/translate.c | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/target/mips/translate.c b/target/mips/translate.c index a2b3026132d..cbd152eff50 100644 --- a/target/mips/translate.c +++ b/target/mips/translate.c @@ -399,16 +399,14 @@ enum { OPC_ADDU_OB_DSP =3D 0x14 | OPC_SPECIAL3, OPC_ABSQ_S_PH_DSP =3D 0x12 | OPC_SPECIAL3, OPC_ABSQ_S_QH_DSP =3D 0x16 | OPC_SPECIAL3, - /* OPC_ADDUH_QB_DSP is same as OPC_MULT_G_2E. */ - /* OPC_ADDUH_QB_DSP =3D 0x18 | OPC_SPECIAL3, */ + OPC_ADDUH_QB_DSP =3D 0x18 | OPC_SPECIAL3, OPC_CMPU_EQ_QB_DSP =3D 0x11 | OPC_SPECIAL3, OPC_CMPU_EQ_OB_DSP =3D 0x15 | OPC_SPECIAL3, /* MIPS DSP GPR-Based Shift Sub-class */ OPC_SHLL_QB_DSP =3D 0x13 | OPC_SPECIAL3, OPC_SHLL_OB_DSP =3D 0x17 | OPC_SPECIAL3, /* MIPS DSP Multiply Sub-class insns */ - /* OPC_MUL_PH_DSP is same as OPC_ADDUH_QB_DSP. */ - /* OPC_MUL_PH_DSP =3D 0x18 | OPC_SPECIAL3, */ + OPC_MUL_PH_DSP =3D 0x18 | OPC_SPECIAL3, OPC_DPA_W_PH_DSP =3D 0x30 | OPC_SPECIAL3, OPC_DPAQ_W_QH_DSP =3D 0x34 | OPC_SPECIAL3, /* DSP Bit/Manipulation Sub-class */ @@ -566,7 +564,6 @@ enum { OPC_MULQ_S_PH =3D (0x1E << 6) | OPC_ADDU_QB_DSP, }; =20 -#define OPC_ADDUH_QB_DSP OPC_MULT_G_2E #define MASK_ADDUH_QB(op) (MASK_SPECIAL3(op) | (op & (0x1F << 6)= )) enum { /* MIPS DSP Arithmetic Sub-class */ @@ -22681,8 +22678,7 @@ static void gen_mipsdsp_arith(DisasContext *ctx, ui= nt32_t op1, uint32_t op2, gen_load_gpr(v2_t, v2); =20 switch (op1) { - /* OPC_MULT_G_2E is equal OPC_ADDUH_QB_DSP */ - case OPC_MULT_G_2E: + case OPC_ADDUH_QB_DSP: check_dsp_r2(ctx); switch (op2) { case OPC_ADDUH_QB: @@ -23376,11 +23372,7 @@ static void gen_mipsdsp_multiply(DisasContext *ctx= , uint32_t op1, uint32_t op2, gen_load_gpr(v2_t, v2); =20 switch (op1) { - /* - * OPC_MULT_G_2E, OPC_ADDUH_QB_DSP, OPC_MUL_PH_DSP have - * the same mask and op1. - */ - case OPC_MULT_G_2E: + case OPC_MUL_PH_DSP: check_dsp_r2(ctx); switch (op2) { case OPC_MUL_PH: @@ -27337,7 +27329,7 @@ static void decode_opc_special3_legacy(CPUMIPSState= *env, DisasContext *ctx) * OPC_MULT_G_2E, OPC_ADDUH_QB_DSP, OPC_MUL_PH_DSP have * the same mask and op1. */ - if ((ctx->insn_flags & ASE_DSP_R2) && (op1 =3D=3D OPC_MULT_G_2E)) { + if ((ctx->insn_flags & ASE_DSP_R2) && (op1 =3D=3D OPC_MUL_PH_DSP))= { op2 =3D MASK_ADDUH_QB(ctx->opcode); switch (op2) { case OPC_ADDUH_QB: --=20 2.26.2 From nobody Fri Apr 19 18:57:31 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of _spf.google.com designates 209.85.128.44 as permitted sender) client-ip=209.85.128.44; envelope-from=philippe.mathieu.daude@gmail.com; helo=mail-wm1-f44.google.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of _spf.google.com designates 209.85.128.44 as permitted sender) smtp.mailfrom=philippe.mathieu.daude@gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1610488520; cv=none; d=zohomail.com; s=zohoarc; b=nUGXqDRr9ttcNW01l1JFJdQ/QrEIiMRF8F4zzPOdUEZ0FWH4R6nvjmPs0F4YZySLQO0fasf3St+NV4LGVqhjSUIc0UXQbWjqvy5b/3h0R9DiPaYo1Sof2TW54E4+vzic7pTmplJAy3/gKzbvVHNJVNwklx13wMCnjtBHg1AbtUA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1610488520; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Sender:Subject:To; bh=Efga8C9/tgnHmSbNOP3ZUS6CFBkLsRNYxdS981blvVE=; b=jGl8HkDXYsPHQz/XSvwd8BMS44PP7hLg6KUOvqgn6u5K+2kFi/qDS4enICieL1aN6IkjQtyW3IEXMb0RpmGKHbN9MjEpkhYx6KmJyFYHqr33+qPQ7/ssOt5cwgiy44MW96B/XwEFpMhjN2SrCg8vS09Nnz+pMgZzyDAlr5koKeI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of _spf.google.com designates 209.85.128.44 as permitted sender) smtp.mailfrom=philippe.mathieu.daude@gmail.com Received: from mail-wm1-f44.google.com (mail-wm1-f44.google.com [209.85.128.44]) by mx.zohomail.com with SMTPS id 1610488520458139.2176909684838; Tue, 12 Jan 2021 13:55:20 -0800 (PST) Received: by mail-wm1-f44.google.com with SMTP id 3so3498091wmg.4 for ; Tue, 12 Jan 2021 13:55:19 -0800 (PST) Return-Path: Return-Path: Received: from x1w.redhat.com (190.red-83-57-173.dynamicip.rima-tde.net. [83.57.173.190]) by smtp.gmail.com with ESMTPSA id m21sm5426293wml.13.2021.01.12.13.55.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Jan 2021 13:55:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Efga8C9/tgnHmSbNOP3ZUS6CFBkLsRNYxdS981blvVE=; b=fdvY5HEPMrGv6leYNZcZuxlP7yn3lBD4wBaGsTtR0ausd57bja1lcQ5aTX4GhCi4xh h1o8aUeFC4RvOQkzCqc32XoiTiRCpusOPXBoJlPK1PMw6I3AnFjLJQ+RRHLP1xrY8ws+ SV3hBnS7yyO9V9LPQVaWuHirBNqsn80ZDun9LLznnBn0NzYaq8kolG+47oPOZcRaOVKk EYU6JuLUyQTx0ifwUHQO/qy9WAiAmvRfxb5et2t5ZUVlsVReoC3GI0eJpCq2dxPw4MPp IluoXUf5/vh2+PUDXi49FvfPXB+NMKtaqazvD9c+LcuBb50P7bI5gDrB7yjeCvAm0evz Ox3w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=Efga8C9/tgnHmSbNOP3ZUS6CFBkLsRNYxdS981blvVE=; b=VipxgIabEacVKg71Eyl67H7Q0Et1mgcq+/8J3G7c/934EKpDJOvgVE3PHLfIECjGuV 7Qjsy2WNV0FymfnG8GhlE6GQfTgSap99KSQXGThvKXESjQqvyjSUUtytyDTBSRPmRchH UjLAITDSJ9bKl1rp/nibePbTeTfIDes9r0vsHNuHARyV1q9UkLbBwy5EMQG9vDXIEo0P BZI5KzW8jJFFSQoDkNVhvFQiRf7KqwS/K6tB9KI0DtqcL+PR/F69pp/xFe9Q7qJ0ah9I 0GqmLdrsxyOZUYKhMMAUUntazkhTtEZv60MTaf627IB12dKzojxHucHcjarlgQ+yVgLl jSKg== X-Gm-Message-State: AOAM530ambwTS3/DZ07mgC9TvsZDVRyr75OqjzThcXw18FgcrLd5Mwuz YvDDjy0tfJKqx5riKUPlD2o= X-Google-Smtp-Source: ABdhPJyxrXXGTEiudugBPqh7Ttn5S0gf8Ds1a5VN1dKTSemK44nAr51qixKtuK9vpkgR1Ow3sT62xg== X-Received: by 2002:a1c:5fd4:: with SMTP id t203mr1087495wmb.15.1610488518513; Tue, 12 Jan 2021 13:55:18 -0800 (PST) Sender: =?UTF-8?Q?Philippe_Mathieu=2DDaud=C3=A9?= From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org Cc: Aurelien Jarno , Huacai Chen , Jiaxun Yang , Richard Henderson , Aleksandar Rikalo , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH 2/6] target/mips: Convert Loongson DDIV.G opcodes to decodetree Date: Tue, 12 Jan 2021 22:55:00 +0100 Message-Id: <20210112215504.2093955-3-f4bug@amsat.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20210112215504.2093955-1-f4bug@amsat.org> References: <20210112215504.2093955-1-f4bug@amsat.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @gmail.com) Introduce decode_loongson() to decode all Loongson vendor specific opcodes. Start converting a single opcode: DDIV.G (divide 64-bit signed integers). Signed-off-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Richard Henderson --- target/mips/translate.h | 1 + target/mips/godson2.decode | 16 +++++++ target/mips/loong-ext.decode | 17 +++++++ target/mips/loong_translate.c | 89 +++++++++++++++++++++++++++++++++++ target/mips/translate.c | 28 ++--------- target/mips/meson.build | 3 ++ 6 files changed, 131 insertions(+), 23 deletions(-) create mode 100644 target/mips/godson2.decode create mode 100644 target/mips/loong-ext.decode create mode 100644 target/mips/loong_translate.c diff --git a/target/mips/translate.h b/target/mips/translate.h index 11730f5b2e6..b67c45012b8 100644 --- a/target/mips/translate.h +++ b/target/mips/translate.h @@ -164,5 +164,6 @@ void msa_translate_init(void); /* decodetree generated */ bool decode_isa_rel6(DisasContext *ctx, uint32_t insn); bool decode_ase_msa(DisasContext *ctx, uint32_t insn); +bool decode_loongson(DisasContext *ctx, uint32_t insn); =20 #endif diff --git a/target/mips/godson2.decode b/target/mips/godson2.decode new file mode 100644 index 00000000000..cbe22285740 --- /dev/null +++ b/target/mips/godson2.decode @@ -0,0 +1,16 @@ +# Godson2 Integer instructions +# +# Copyright (C) 2021 Philippe Mathieu-Daud=C3=A9 +# +# SPDX-License-Identifier: LGPL-2.1-or-later +# +# Reference: +# Godson-2E Software Manual +# (Document Number: godson2e-user-manual-V0.6) +# + +&muldiv rs rt rd + +@rs_rt_rd ...... rs:5 rt:5 rd:5 ..... ...... &muldiv + +DDIV.G 011111 ..... ..... ..... 00000 011110 @rs_rt_rd diff --git a/target/mips/loong-ext.decode b/target/mips/loong-ext.decode new file mode 100644 index 00000000000..557fe06c14a --- /dev/null +++ b/target/mips/loong-ext.decode @@ -0,0 +1,17 @@ +# Loongson Extension instructions +# +# Copyright (C) 2021 Philippe Mathieu-Daud=C3=A9 +# +# SPDX-License-Identifier: LGPL-2.1-or-later +# +# Reference: +# STLS2F01 User Manual +# Appendix A: new integer instructions +# (Document Number: UM0447) +# + +&muldiv rs rt rd !extern + +@rs_rt_rd ...... rs:5 rt:5 rd:5 ..... ...... &muldiv + +DDIV.G 011100 ..... ..... ..... 00000 010101 @rs_rt_rd diff --git a/target/mips/loong_translate.c b/target/mips/loong_translate.c new file mode 100644 index 00000000000..c452472e7a7 --- /dev/null +++ b/target/mips/loong_translate.c @@ -0,0 +1,89 @@ +/* + * MIPS Loongson translation routines + * + * Copyright (c) 2004-2005 Jocelyn Mayer + * Copyright (c) 2006 Marius Groeger (FPU operations) + * Copyright (c) 2006 Thiemo Seufer (MIPS32R2 support) + * Copyright (c) 2011 Richard Henderson + * Copyright (c) 2021 Philippe Mathieu-Daud=C3=A9 + * + * This code is licensed under the GNU GPLv2 and later. + */ + +#include "qemu/osdep.h" +#include "tcg/tcg-op.h" +#include "exec/helper-gen.h" +#include "translate.h" + +/* Include the auto-generated decoder. */ +#include "decode-godson2.c.inc" +#include "decode-loong-ext.c.inc" + +/* + * Word or double-word Fixed-point instructions. + * -------------------------------------------- + * + * Fixed-point multiplies and divisions write only one result + * into general-purpose registers. + */ + +static bool gen_lext_DIV_G(DisasContext *s, int rd, int rs, int rt) +{ + TCGv t0, t1; + TCGLabel *l1, *l2, *l3; + + if (TARGET_LONG_BITS !=3D 64) { + return false; + } + check_mips_64(s); + + if (rd =3D=3D 0) { + /* Treat as NOP. */ + return true; + } + + t0 =3D tcg_temp_local_new(); + t1 =3D tcg_temp_local_new(); + l1 =3D gen_new_label(); + l2 =3D gen_new_label(); + l3 =3D gen_new_label(); + + gen_load_gpr(t0, rs); + gen_load_gpr(t1, rt); + + tcg_gen_brcondi_tl(TCG_COND_NE, t1, 0, l1); + tcg_gen_movi_tl(cpu_gpr[rd], 0); + tcg_gen_br(l3); + gen_set_label(l1); + + tcg_gen_brcondi_tl(TCG_COND_NE, t0, -1LL << 63, l2); + tcg_gen_brcondi_tl(TCG_COND_NE, t1, -1LL, l2); + tcg_gen_mov_tl(cpu_gpr[rd], t0); + + tcg_gen_br(l3); + gen_set_label(l2); + tcg_gen_div_tl(cpu_gpr[rd], t0, t1); + gen_set_label(l3); + + tcg_temp_free(t0); + tcg_temp_free(t1); + + return true; +} + +static bool trans_DDIV_G(DisasContext *s, arg_muldiv *a) +{ + return gen_lext_DIV_G(s, a->rt, a->rs, a->rd); +} + +bool decode_loongson(DisasContext *ctx, uint32_t insn) +{ + if ((ctx->insn_flags & INSN_LOONGSON2E) + && decode_godson2(ctx, ctx->opcode)) { + return true; + } + if ((ctx->insn_flags & ASE_LEXT) && decode_loong_ext(ctx, ctx->opcode)= ) { + return true; + } + return false; +} diff --git a/target/mips/translate.c b/target/mips/translate.c index cbd152eff50..c427ea98952 100644 --- a/target/mips/translate.c +++ b/target/mips/translate.c @@ -343,7 +343,6 @@ enum { OPC_MULTU_G_2F =3D 0x12 | OPC_SPECIAL2, OPC_DMULTU_G_2F =3D 0x13 | OPC_SPECIAL2, OPC_DIV_G_2F =3D 0x14 | OPC_SPECIAL2, - OPC_DDIV_G_2F =3D 0x15 | OPC_SPECIAL2, OPC_DIVU_G_2F =3D 0x16 | OPC_SPECIAL2, OPC_DDIVU_G_2F =3D 0x17 | OPC_SPECIAL2, OPC_MOD_G_2F =3D 0x1c | OPC_SPECIAL2, @@ -385,7 +384,6 @@ enum { OPC_DIVU_G_2E =3D 0x1B | OPC_SPECIAL3, OPC_DMULT_G_2E =3D 0x1C | OPC_SPECIAL3, OPC_DMULTU_G_2E =3D 0x1D | OPC_SPECIAL3, - OPC_DDIV_G_2E =3D 0x1E | OPC_SPECIAL3, OPC_DDIVU_G_2E =3D 0x1F | OPC_SPECIAL3, OPC_MOD_G_2E =3D 0x22 | OPC_SPECIAL3, OPC_MODU_G_2E =3D 0x23 | OPC_SPECIAL3, @@ -5108,25 +5106,6 @@ static void gen_loongson_integer(DisasContext *ctx, = uint32_t opc, case OPC_DMULTU_G_2F: tcg_gen_mul_tl(cpu_gpr[rd], t0, t1); break; - case OPC_DDIV_G_2E: - case OPC_DDIV_G_2F: - { - TCGLabel *l1 =3D gen_new_label(); - TCGLabel *l2 =3D gen_new_label(); - TCGLabel *l3 =3D gen_new_label(); - tcg_gen_brcondi_tl(TCG_COND_NE, t1, 0, l1); - tcg_gen_movi_tl(cpu_gpr[rd], 0); - tcg_gen_br(l3); - gen_set_label(l1); - tcg_gen_brcondi_tl(TCG_COND_NE, t0, -1LL << 63, l2); - tcg_gen_brcondi_tl(TCG_COND_NE, t1, -1LL, l2); - tcg_gen_mov_tl(cpu_gpr[rd], t0); - tcg_gen_br(l3); - gen_set_label(l2); - tcg_gen_div_tl(cpu_gpr[rd], t0, t1); - gen_set_label(l3); - } - break; case OPC_DDIVU_G_2E: case OPC_DDIVU_G_2F: { @@ -27180,7 +27159,6 @@ static void decode_opc_special2_legacy(CPUMIPSState= *env, DisasContext *ctx) break; case OPC_DMULT_G_2F: case OPC_DMULTU_G_2F: - case OPC_DDIV_G_2F: case OPC_DDIVU_G_2F: case OPC_DMOD_G_2F: case OPC_DMODU_G_2F: @@ -27590,7 +27568,6 @@ static void decode_opc_special3_legacy(CPUMIPSState= *env, DisasContext *ctx) } break; #if defined(TARGET_MIPS64) - case OPC_DDIV_G_2E: case OPC_DDIVU_G_2E: case OPC_DMULT_G_2E: case OPC_DMULTU_G_2E: @@ -28976,6 +28953,11 @@ static void decode_opc(CPUMIPSState *env, DisasCon= text *ctx) =20 /* Transition to the auto-generated decoder. */ =20 + /* Vendor specific extensions */ + if (decode_loongson(ctx, ctx->opcode)) { + return; + } + /* ISA extensions */ if (ase_msa_available(env) && decode_ase_msa(ctx, ctx->opcode)) { return; diff --git a/target/mips/meson.build b/target/mips/meson.build index 9741545440c..0b6067f96c3 100644 --- a/target/mips/meson.build +++ b/target/mips/meson.build @@ -1,4 +1,6 @@ gen =3D [ + decodetree.process('godson2.decode', extra_args: ['--static-decode=3Ddec= ode_godson2']), + decodetree.process('loong-ext.decode', extra_args: ['--static-decode=3Dd= ecode_loong_ext']), decodetree.process('mips32r6.decode', extra_args: '--static-decode=3Ddec= ode_mips32r6'), decodetree.process('mips64r6.decode', extra_args: '--static-decode=3Ddec= ode_mips64r6'), decodetree.process('msa32.decode', extra_args: '--static-decode=3Ddecode= _msa32'), @@ -15,6 +17,7 @@ 'dsp_helper.c', 'fpu_helper.c', 'lmmi_helper.c', + 'loong_translate.c', 'msa_helper.c', 'msa_translate.c', 'op_helper.c', --=20 2.26.2 From nobody Fri Apr 19 18:57:31 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of _spf.google.com designates 209.85.221.52 as permitted sender) client-ip=209.85.221.52; envelope-from=philippe.mathieu.daude@gmail.com; helo=mail-wr1-f52.google.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of _spf.google.com designates 209.85.221.52 as permitted sender) smtp.mailfrom=philippe.mathieu.daude@gmail.com; dmarc=fail(p=none dis=none) header.from=amsat.org ARC-Seal: i=1; a=rsa-sha256; t=1610488525; cv=none; d=zohomail.com; s=zohoarc; b=IeriqYeyN6oAxwWym7JiSZ4SQ8syOOC9SPKHTSWy41+12JroERoxQ7hXyNgdY3S2y3acXSli99p/mzI4/PpvP8O6Zq14TMzBOQ8m7g2fchQdsxt4GNE9VT5o3ymu1hpyVugbf9rtbqCCFAbsNpqXTCok2qPMnjV3oelTYKBpv3o= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1610488525; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Sender:Subject:To; bh=ENLslfsm1B59+V1dnfv0a0Wd7gr1IJbCp3QQ6a86opw=; b=NfIeanyiVhXAH86/piwud4BbCBCQI5TQZk84ohmZQfhatE8ctVtENV5CZv4o1gaeP/bueQy6qTr3eJGEjnR7vT/UmM/nhqTPClzkA9NNgP1GZwtvr6yAGgWl9G9Deg0uSoHMSpP+jGgswT2EWjkrA6EknCwx/jntQ7WCPGVoAJ0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of _spf.google.com designates 209.85.221.52 as permitted sender) smtp.mailfrom=philippe.mathieu.daude@gmail.com; dmarc=fail header.from= (p=none dis=none) header.from= Received: from mail-wr1-f52.google.com (mail-wr1-f52.google.com [209.85.221.52]) by mx.zohomail.com with SMTPS id 1610488525431495.2016748654497; Tue, 12 Jan 2021 13:55:25 -0800 (PST) Received: by mail-wr1-f52.google.com with SMTP id y17so413wrr.10 for ; Tue, 12 Jan 2021 13:55:24 -0800 (PST) Return-Path: Return-Path: Received: from x1w.redhat.com (190.red-83-57-173.dynamicip.rima-tde.net. [83.57.173.190]) by smtp.gmail.com with ESMTPSA id u13sm7152891wrw.11.2021.01.12.13.55.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Jan 2021 13:55:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=ENLslfsm1B59+V1dnfv0a0Wd7gr1IJbCp3QQ6a86opw=; b=jwHL3yK0QzVqGNZ7kBvsw/cUxs1DXYRhMbBlEFIORgFwicR8ugrqb2duqWBHMotAJK 429++HQ8Zfcm5n4kXrswMaDPORMRpLt9B+89RnuJLCq7iuzjKQBU908ITDbdfa3UKnvI Z607Eo83KoyJdPpyQeTgmKvjY0VEr66wD7jpvpZ5R0YHPxi4ZVFS1u2166aeAoVoKZmw aCe3rrkwBacEV3BnqwoEGAMLwkYUbPjus6x+HErUatJCaPQIi0t68DJe/EWRYDtiHMKn 7kMEAPBX+gG30NcykOEC6D1t0FhK1ep8O6tQjId94wJxCTSWDKgn6nGQ/TRN0QdWvnhp CQTw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=ENLslfsm1B59+V1dnfv0a0Wd7gr1IJbCp3QQ6a86opw=; b=FXsYRL1rC7omUTiK2KwVDTPiCHz4XGM1/guRL+UwozsOfJ9KIa2IKdVwwdj9kyd1aB dsGNqrhjHRV17dhQUctX1cPFnoKOM6l8SqPuHuGLkxRaCnxvEJERLk69IX+czh48Z6sa ZIKIy7Uor3FS1ePAWWdIBme5AiJz6qg/6KAJ30AS/xU6bY+u9I50Bl4qMvn11Tz/IOb3 C9Ok3MAYArlYdBJda4F+ZuuODQPv0KH2qyoSFlziurxzA2xW2CKpufspvzhMk64szwC4 bhy4HkLtbmevYprCKPsr4gxTrPnoXF05m/SrRLCb+CUnCrlOg3MMGHTwe6ZQMsXh0GoZ SkBA== X-Gm-Message-State: AOAM531UTbR8oy/XkxxjX45n9bhgX2OuXSWOgZ8z8qlytrW1Q9nPzTKS bjZguHS4sJQ7+cm+HFUnNUM= X-Google-Smtp-Source: ABdhPJwfIge+0wGWzxa05FnaKaUIU0h0TR4j7BgXugS4cTG3Inmw14u+mp3TzHaiFCYkCQdh+lfvVg== X-Received: by 2002:a5d:4d8b:: with SMTP id b11mr799831wru.215.1610488523579; Tue, 12 Jan 2021 13:55:23 -0800 (PST) Sender: =?UTF-8?Q?Philippe_Mathieu=2DDaud=C3=A9?= From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org Cc: Aurelien Jarno , Huacai Chen , Jiaxun Yang , Richard Henderson , Aleksandar Rikalo , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH 3/6] target/mips: Convert Loongson DIV.G opcodes to decodetree Date: Tue, 12 Jan 2021 22:55:01 +0100 Message-Id: <20210112215504.2093955-4-f4bug@amsat.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20210112215504.2093955-1-f4bug@amsat.org> References: <20210112215504.2093955-1-f4bug@amsat.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @gmail.com) DIV.G and DDIV.G are very similar. Provide gen_lext_DIV_G() a 'is_double' argument so it can generate DIV.G (divide 32-bit signed integers). With this commit we explicit the template used to generate opcode for 32/64-bit word variants. Next commits will be less verbose by providing both variants at once. Signed-off-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Richard Henderson --- target/mips/godson2.decode | 1 + target/mips/loong-ext.decode | 1 + target/mips/loong_translate.c | 28 ++++++++++++++++++++++------ target/mips/translate.c | 26 -------------------------- 4 files changed, 24 insertions(+), 32 deletions(-) diff --git a/target/mips/godson2.decode b/target/mips/godson2.decode index cbe22285740..b56a93a1999 100644 --- a/target/mips/godson2.decode +++ b/target/mips/godson2.decode @@ -13,4 +13,5 @@ =20 @rs_rt_rd ...... rs:5 rt:5 rd:5 ..... ...... &muldiv =20 +DIV.G 011111 ..... ..... ..... 00000 011010 @rs_rt_rd DDIV.G 011111 ..... ..... ..... 00000 011110 @rs_rt_rd diff --git a/target/mips/loong-ext.decode b/target/mips/loong-ext.decode index 557fe06c14a..331c2226ae3 100644 --- a/target/mips/loong-ext.decode +++ b/target/mips/loong-ext.decode @@ -14,4 +14,5 @@ =20 @rs_rt_rd ...... rs:5 rt:5 rd:5 ..... ...... &muldiv =20 +DIV.G 011100 ..... ..... ..... 00000 010100 @rs_rt_rd DDIV.G 011100 ..... ..... ..... 00000 010101 @rs_rt_rd diff --git a/target/mips/loong_translate.c b/target/mips/loong_translate.c index c452472e7a7..634d4ba8031 100644 --- a/target/mips/loong_translate.c +++ b/target/mips/loong_translate.c @@ -27,15 +27,18 @@ * into general-purpose registers. */ =20 -static bool gen_lext_DIV_G(DisasContext *s, int rd, int rs, int rt) +static bool gen_lext_DIV_G(DisasContext *s, int rd, int rs, int rt, + bool is_double) { TCGv t0, t1; TCGLabel *l1, *l2, *l3; =20 - if (TARGET_LONG_BITS !=3D 64) { - return false; + if (is_double) { + if (TARGET_LONG_BITS !=3D 64) { + return false; + } + check_mips_64(s); } - check_mips_64(s); =20 if (rd =3D=3D 0) { /* Treat as NOP. */ @@ -51,18 +54,26 @@ static bool gen_lext_DIV_G(DisasContext *s, int rd, int= rs, int rt) gen_load_gpr(t0, rs); gen_load_gpr(t1, rt); =20 + if (!is_double) { + tcg_gen_ext32s_tl(t0, t0); + tcg_gen_ext32s_tl(t0, t0); + tcg_gen_ext32s_tl(t1, t1); + } tcg_gen_brcondi_tl(TCG_COND_NE, t1, 0, l1); tcg_gen_movi_tl(cpu_gpr[rd], 0); tcg_gen_br(l3); gen_set_label(l1); =20 - tcg_gen_brcondi_tl(TCG_COND_NE, t0, -1LL << 63, l2); + tcg_gen_brcondi_tl(TCG_COND_NE, t0, is_double ? -1LL << 63 : INT_MIN, = l2); tcg_gen_brcondi_tl(TCG_COND_NE, t1, -1LL, l2); tcg_gen_mov_tl(cpu_gpr[rd], t0); =20 tcg_gen_br(l3); gen_set_label(l2); tcg_gen_div_tl(cpu_gpr[rd], t0, t1); + if (!is_double) { + tcg_gen_ext32s_tl(cpu_gpr[rd], cpu_gpr[rd]); + } gen_set_label(l3); =20 tcg_temp_free(t0); @@ -71,9 +82,14 @@ static bool gen_lext_DIV_G(DisasContext *s, int rd, int = rs, int rt) return true; } =20 +static bool trans_DIV_G(DisasContext *s, arg_muldiv *a) +{ + return gen_lext_DIV_G(s, a->rt, a->rs, a->rd, false); +} + static bool trans_DDIV_G(DisasContext *s, arg_muldiv *a) { - return gen_lext_DIV_G(s, a->rt, a->rs, a->rd); + return gen_lext_DIV_G(s, a->rt, a->rs, a->rd, true); } =20 bool decode_loongson(DisasContext *ctx, uint32_t insn) diff --git a/target/mips/translate.c b/target/mips/translate.c index c427ea98952..7cefff44d74 100644 --- a/target/mips/translate.c +++ b/target/mips/translate.c @@ -342,7 +342,6 @@ enum { OPC_DMULT_G_2F =3D 0x11 | OPC_SPECIAL2, OPC_MULTU_G_2F =3D 0x12 | OPC_SPECIAL2, OPC_DMULTU_G_2F =3D 0x13 | OPC_SPECIAL2, - OPC_DIV_G_2F =3D 0x14 | OPC_SPECIAL2, OPC_DIVU_G_2F =3D 0x16 | OPC_SPECIAL2, OPC_DDIVU_G_2F =3D 0x17 | OPC_SPECIAL2, OPC_MOD_G_2F =3D 0x1c | OPC_SPECIAL2, @@ -380,7 +379,6 @@ enum { /* Loongson 2E */ OPC_MULT_G_2E =3D 0x18 | OPC_SPECIAL3, OPC_MULTU_G_2E =3D 0x19 | OPC_SPECIAL3, - OPC_DIV_G_2E =3D 0x1A | OPC_SPECIAL3, OPC_DIVU_G_2E =3D 0x1B | OPC_SPECIAL3, OPC_DMULT_G_2E =3D 0x1C | OPC_SPECIAL3, OPC_DMULTU_G_2E =3D 0x1D | OPC_SPECIAL3, @@ -5023,28 +5021,6 @@ static void gen_loongson_integer(DisasContext *ctx, = uint32_t opc, tcg_gen_mul_tl(cpu_gpr[rd], t0, t1); tcg_gen_ext32s_tl(cpu_gpr[rd], cpu_gpr[rd]); break; - case OPC_DIV_G_2E: - case OPC_DIV_G_2F: - { - TCGLabel *l1 =3D gen_new_label(); - TCGLabel *l2 =3D gen_new_label(); - TCGLabel *l3 =3D gen_new_label(); - tcg_gen_ext32s_tl(t0, t0); - tcg_gen_ext32s_tl(t1, t1); - tcg_gen_brcondi_tl(TCG_COND_NE, t1, 0, l1); - tcg_gen_movi_tl(cpu_gpr[rd], 0); - tcg_gen_br(l3); - gen_set_label(l1); - tcg_gen_brcondi_tl(TCG_COND_NE, t0, INT_MIN, l2); - tcg_gen_brcondi_tl(TCG_COND_NE, t1, -1, l2); - tcg_gen_mov_tl(cpu_gpr[rd], t0); - tcg_gen_br(l3); - gen_set_label(l2); - tcg_gen_div_tl(cpu_gpr[rd], t0, t1); - tcg_gen_ext32s_tl(cpu_gpr[rd], cpu_gpr[rd]); - gen_set_label(l3); - } - break; case OPC_DIVU_G_2E: case OPC_DIVU_G_2F: { @@ -27124,7 +27100,6 @@ static void decode_opc_special2_legacy(CPUMIPSState= *env, DisasContext *ctx) case OPC_MUL: gen_arith(ctx, op1, rd, rs, rt); break; - case OPC_DIV_G_2F: case OPC_DIVU_G_2F: case OPC_MULT_G_2F: case OPC_MULTU_G_2F: @@ -27297,7 +27272,6 @@ static void decode_opc_special3_legacy(CPUMIPSState= *env, DisasContext *ctx) =20 op1 =3D MASK_SPECIAL3(ctx->opcode); switch (op1) { - case OPC_DIV_G_2E: case OPC_DIVU_G_2E: case OPC_MOD_G_2E: case OPC_MODU_G_2E: --=20 2.26.2 From nobody Fri Apr 19 18:57:31 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of _spf.google.com designates 209.85.128.51 as permitted sender) client-ip=209.85.128.51; envelope-from=philippe.mathieu.daude@gmail.com; helo=mail-wm1-f51.google.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of _spf.google.com designates 209.85.128.51 as permitted sender) smtp.mailfrom=philippe.mathieu.daude@gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1610488530; cv=none; d=zohomail.com; s=zohoarc; b=TNoxc3pVS+OsBFugW9XAWns6cRna2EreZbdfdhTMvfbNOJoVxL6meAtrfk4wVkTf3V7/fpFZqBRsjlOEU32jwjqDx0po0HVgwPpS6yltxyRqVs5hGBZyi5ygDJJBDTubecHtdU0K4nskITtMmhIm4W8Za+zddO8W5Hfvi8zvv2c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1610488530; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Sender:Subject:To; bh=aKF8Ov+jUrnlot8cgyBolauUR7tCFJnSWhClvDT6qUI=; b=NThPUF6lO49cQZX6iUplPweuHhMDop0EzAE98JFMqaJ+flUTB1rts9wi+rlA2wt5cwV0ZMnnZoCO6R58wPEsd/UpSYFh7/wt9iaTREOJR0xGHYotL1wH7owFBgZS5k4/yCDVYSO8wUW9z9in3dL1rojuH3kGZj5Ko0p6kZUxF7U= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of _spf.google.com designates 209.85.128.51 as permitted sender) smtp.mailfrom=philippe.mathieu.daude@gmail.com Received: from mail-wm1-f51.google.com (mail-wm1-f51.google.com [209.85.128.51]) by mx.zohomail.com with SMTPS id 1610488530681268.2350178504088; Tue, 12 Jan 2021 13:55:30 -0800 (PST) Received: by mail-wm1-f51.google.com with SMTP id y187so3505399wmd.3 for ; Tue, 12 Jan 2021 13:55:30 -0800 (PST) Return-Path: Return-Path: Received: from x1w.redhat.com (190.red-83-57-173.dynamicip.rima-tde.net. [83.57.173.190]) by smtp.gmail.com with ESMTPSA id 67sm5919951wmb.47.2021.01.12.13.55.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Jan 2021 13:55:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=aKF8Ov+jUrnlot8cgyBolauUR7tCFJnSWhClvDT6qUI=; b=obrDR8Q/JnJPgEcBNfrY96HbbtFv907pyMXpAfi8SBDKpsw8TssLrWsGmcfkbtWUI3 2+rBDgo4677QQ8iDogdiA1tmqo7s1i889Rn9aGbBZmqUITncRrF420L9o8DLbv8yh5qZ ytu5g8ZuX/oxrHrQ7QpO+8/XV63JbGGMkwXoW6t9crt9Yr1uot0NqmaS5od71FFZj/3g hE5N0GZCDGMMhliqeYSzqWr/1mlH/oZrMs/yvGgMqcutw0xIOKNzdUQTM991ozbWFnLw C5j3ACG6nxI6DHxJ8EZ427kwAoZb5ggIQ56M/CKPpDqZh4XxA1S4rRS81OuXrq2CDtwO QLjg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=aKF8Ov+jUrnlot8cgyBolauUR7tCFJnSWhClvDT6qUI=; b=J4krD381mh8PioX5qzAlZ/vWRrViQpyGidrvTyYfbXEfXMbxig2JjofadvznoAIjfQ aw7fWU9HxXVd+F5rgTHwSN2x5N9g4+P5MsAsydm0vSjlDH06kM/zGMNRYSV38hPnvMNP yScTZ05JqfoL1Iv/eylszpGRMrIodL0rDOqNZOUR33FKdepEnsG53vlJJlX9GcdPo4ZC qagVaJZXErIpbY4r5hazadjkvctUVNcjYF+zASqOFFUU1nTxngkF8JPdZkKkLip5j1qc NqGwVV8gL9z2NaJ2qfqxC0W2XnJ7O0kLmYxAs6gQ9BiKXQ8CnE7yENx+l3jWzJAXd1wc p89Q== X-Gm-Message-State: AOAM533m2TmNss/xWiO3nfWujHGrFnh6KSHs9Mt45LjTFnbRQQX+DNqD D5ONwJuiC6uwyfAg3UfGDC/tOQlgqV8= X-Google-Smtp-Source: ABdhPJx3A1+V4QwYl/XLcjA7f17B7O8ieQshWGd67jeUhD8byghP2pKa517sw0oj2o4O164zsJtu/w== X-Received: by 2002:a7b:cd91:: with SMTP id y17mr1054053wmj.171.1610488528744; Tue, 12 Jan 2021 13:55:28 -0800 (PST) Sender: =?UTF-8?Q?Philippe_Mathieu=2DDaud=C3=A9?= From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org Cc: Aurelien Jarno , Huacai Chen , Jiaxun Yang , Richard Henderson , Aleksandar Rikalo , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH 4/6] target/mips: Convert Loongson [D]DIVU.G opcodes to decodetree Date: Tue, 12 Jan 2021 22:55:02 +0100 Message-Id: <20210112215504.2093955-5-f4bug@amsat.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20210112215504.2093955-1-f4bug@amsat.org> References: <20210112215504.2093955-1-f4bug@amsat.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @gmail.com) Convert DIVU.G (divide 32-bit unsigned integers) and DDIVU.G (divide 64-bit unsigned integers) opcodes to decodetree. Signed-off-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Richard Henderson --- target/mips/godson2.decode | 2 ++ target/mips/loong-ext.decode | 2 ++ target/mips/loong_translate.c | 55 +++++++++++++++++++++++++++++++++++ target/mips/translate.c | 37 ----------------------- 4 files changed, 59 insertions(+), 37 deletions(-) diff --git a/target/mips/godson2.decode b/target/mips/godson2.decode index b56a93a1999..0d5a72064d2 100644 --- a/target/mips/godson2.decode +++ b/target/mips/godson2.decode @@ -14,4 +14,6 @@ @rs_rt_rd ...... rs:5 rt:5 rd:5 ..... ...... &muldiv =20 DIV.G 011111 ..... ..... ..... 00000 011010 @rs_rt_rd +DIVU.G 011111 ..... ..... ..... 00000 011011 @rs_rt_rd DDIV.G 011111 ..... ..... ..... 00000 011110 @rs_rt_rd +DDIVU.G 011111 ..... ..... ..... 00000 011111 @rs_rt_rd diff --git a/target/mips/loong-ext.decode b/target/mips/loong-ext.decode index 331c2226ae3..2e98262b81d 100644 --- a/target/mips/loong-ext.decode +++ b/target/mips/loong-ext.decode @@ -16,3 +16,5 @@ =20 DIV.G 011100 ..... ..... ..... 00000 010100 @rs_rt_rd DDIV.G 011100 ..... ..... ..... 00000 010101 @rs_rt_rd +DIVU.G 011100 ..... ..... ..... 00000 010110 @rs_rt_rd +DDIVU.G 011100 ..... ..... ..... 00000 010111 @rs_rt_rd diff --git a/target/mips/loong_translate.c b/target/mips/loong_translate.c index 634d4ba8031..7b3304ec749 100644 --- a/target/mips/loong_translate.c +++ b/target/mips/loong_translate.c @@ -92,6 +92,61 @@ static bool trans_DDIV_G(DisasContext *s, arg_muldiv *a) return gen_lext_DIV_G(s, a->rt, a->rs, a->rd, true); } =20 +static bool gen_lext_DIVU_G(DisasContext *s, int rd, int rs, int rt, + bool is_double) +{ + TCGv t0, t1; + TCGLabel *l1, *l2; + + if (is_double) { + if (TARGET_LONG_BITS !=3D 64) { + return false; + } + check_mips_64(s); + } + + if (rd =3D=3D 0) { + /* Treat as NOP. */ + return true; + } + + t0 =3D tcg_temp_local_new(); + t1 =3D tcg_temp_local_new(); + l1 =3D gen_new_label(); + l2 =3D gen_new_label(); + + gen_load_gpr(t0, rs); + gen_load_gpr(t1, rt); + + if (!is_double) { + tcg_gen_ext32u_tl(t0, t0); + tcg_gen_ext32u_tl(t1, t1); + } + tcg_gen_brcondi_tl(TCG_COND_NE, t1, 0, l1); + tcg_gen_movi_tl(cpu_gpr[rd], 0); + + tcg_gen_br(l2); + gen_set_label(l1); + tcg_gen_divu_tl(cpu_gpr[rd], t0, t1); + tcg_gen_ext32s_tl(cpu_gpr[rd], cpu_gpr[rd]); + gen_set_label(l2); + + tcg_temp_free(t0); + tcg_temp_free(t1); + + return true; +} + +static bool trans_DIVU_G(DisasContext *s, arg_muldiv *a) +{ + return gen_lext_DIVU_G(s, a->rt, a->rs, a->rd, false); +} + +static bool trans_DDIVU_G(DisasContext *s, arg_muldiv *a) +{ + return gen_lext_DIVU_G(s, a->rt, a->rs, a->rd, true); +} + bool decode_loongson(DisasContext *ctx, uint32_t insn) { if ((ctx->insn_flags & INSN_LOONGSON2E) diff --git a/target/mips/translate.c b/target/mips/translate.c index 7cefff44d74..69463e3b42d 100644 --- a/target/mips/translate.c +++ b/target/mips/translate.c @@ -342,8 +342,6 @@ enum { OPC_DMULT_G_2F =3D 0x11 | OPC_SPECIAL2, OPC_MULTU_G_2F =3D 0x12 | OPC_SPECIAL2, OPC_DMULTU_G_2F =3D 0x13 | OPC_SPECIAL2, - OPC_DIVU_G_2F =3D 0x16 | OPC_SPECIAL2, - OPC_DDIVU_G_2F =3D 0x17 | OPC_SPECIAL2, OPC_MOD_G_2F =3D 0x1c | OPC_SPECIAL2, OPC_DMOD_G_2F =3D 0x1d | OPC_SPECIAL2, OPC_MODU_G_2F =3D 0x1e | OPC_SPECIAL2, @@ -379,10 +377,8 @@ enum { /* Loongson 2E */ OPC_MULT_G_2E =3D 0x18 | OPC_SPECIAL3, OPC_MULTU_G_2E =3D 0x19 | OPC_SPECIAL3, - OPC_DIVU_G_2E =3D 0x1B | OPC_SPECIAL3, OPC_DMULT_G_2E =3D 0x1C | OPC_SPECIAL3, OPC_DMULTU_G_2E =3D 0x1D | OPC_SPECIAL3, - OPC_DDIVU_G_2E =3D 0x1F | OPC_SPECIAL3, OPC_MOD_G_2E =3D 0x22 | OPC_SPECIAL3, OPC_MODU_G_2E =3D 0x23 | OPC_SPECIAL3, OPC_DMOD_G_2E =3D 0x26 | OPC_SPECIAL3, @@ -5021,22 +5017,6 @@ static void gen_loongson_integer(DisasContext *ctx, = uint32_t opc, tcg_gen_mul_tl(cpu_gpr[rd], t0, t1); tcg_gen_ext32s_tl(cpu_gpr[rd], cpu_gpr[rd]); break; - case OPC_DIVU_G_2E: - case OPC_DIVU_G_2F: - { - TCGLabel *l1 =3D gen_new_label(); - TCGLabel *l2 =3D gen_new_label(); - tcg_gen_ext32u_tl(t0, t0); - tcg_gen_ext32u_tl(t1, t1); - tcg_gen_brcondi_tl(TCG_COND_NE, t1, 0, l1); - tcg_gen_movi_tl(cpu_gpr[rd], 0); - tcg_gen_br(l2); - gen_set_label(l1); - tcg_gen_divu_tl(cpu_gpr[rd], t0, t1); - tcg_gen_ext32s_tl(cpu_gpr[rd], cpu_gpr[rd]); - gen_set_label(l2); - } - break; case OPC_MOD_G_2E: case OPC_MOD_G_2F: { @@ -5082,19 +5062,6 @@ static void gen_loongson_integer(DisasContext *ctx, = uint32_t opc, case OPC_DMULTU_G_2F: tcg_gen_mul_tl(cpu_gpr[rd], t0, t1); break; - case OPC_DDIVU_G_2E: - case OPC_DDIVU_G_2F: - { - TCGLabel *l1 =3D gen_new_label(); - TCGLabel *l2 =3D gen_new_label(); - tcg_gen_brcondi_tl(TCG_COND_NE, t1, 0, l1); - tcg_gen_movi_tl(cpu_gpr[rd], 0); - tcg_gen_br(l2); - gen_set_label(l1); - tcg_gen_divu_tl(cpu_gpr[rd], t0, t1); - gen_set_label(l2); - } - break; case OPC_DMOD_G_2E: case OPC_DMOD_G_2F: { @@ -27100,7 +27067,6 @@ static void decode_opc_special2_legacy(CPUMIPSState= *env, DisasContext *ctx) case OPC_MUL: gen_arith(ctx, op1, rd, rs, rt); break; - case OPC_DIVU_G_2F: case OPC_MULT_G_2F: case OPC_MULTU_G_2F: case OPC_MOD_G_2F: @@ -27134,7 +27100,6 @@ static void decode_opc_special2_legacy(CPUMIPSState= *env, DisasContext *ctx) break; case OPC_DMULT_G_2F: case OPC_DMULTU_G_2F: - case OPC_DDIVU_G_2F: case OPC_DMOD_G_2F: case OPC_DMODU_G_2F: check_insn(ctx, INSN_LOONGSON2F | ASE_LEXT); @@ -27272,7 +27237,6 @@ static void decode_opc_special3_legacy(CPUMIPSState= *env, DisasContext *ctx) =20 op1 =3D MASK_SPECIAL3(ctx->opcode); switch (op1) { - case OPC_DIVU_G_2E: case OPC_MOD_G_2E: case OPC_MODU_G_2E: case OPC_MULT_G_2E: @@ -27542,7 +27506,6 @@ static void decode_opc_special3_legacy(CPUMIPSState= *env, DisasContext *ctx) } break; #if defined(TARGET_MIPS64) - case OPC_DDIVU_G_2E: case OPC_DMULT_G_2E: case OPC_DMULTU_G_2E: case OPC_DMOD_G_2E: --=20 2.26.2 From nobody Fri Apr 19 18:57:31 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of _spf.google.com designates 209.85.221.43 as permitted sender) client-ip=209.85.221.43; envelope-from=philippe.mathieu.daude@gmail.com; helo=mail-wr1-f43.google.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of _spf.google.com designates 209.85.221.43 as permitted sender) smtp.mailfrom=philippe.mathieu.daude@gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1610488535; cv=none; d=zohomail.com; s=zohoarc; b=hW3tBmXHRWP7qnt7YESwZ0xqJq55tcEHLkl4M0GZICmD9jo3DGHFZ7QSAgOtwIzCAaFBY76SQ/6bwcy89duEHgPfYBKV4FyEOcTsFjloRz7JmVsGa5xf3zO93j+hrtFakL3EIFszRIEuO1qcCAv8a/p8gJteNzLmIaNTuag83YE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1610488535; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Sender:Subject:To; bh=gGCMmxvlx4ZHqOffAOkN9CXPMwMwdru/fLrpk0jKgDg=; b=bEiKsVbZBNo7p3xQvDWrIRYyqY454ngGSwgIlCoqipciTgO+YB+0X2v9BYln+p6s1uHJ6R6QuJ485EooX1mcf7PTRzd3gb5BgW6ikM6fyuTnrZJN5I8hNaUdXvIvt4ljUjHdBwHznEsVSzTRF666FmGV1a2SY6Kvr9kQrtyRxqo= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of _spf.google.com designates 209.85.221.43 as permitted sender) smtp.mailfrom=philippe.mathieu.daude@gmail.com Received: from mail-wr1-f43.google.com (mail-wr1-f43.google.com [209.85.221.43]) by mx.zohomail.com with SMTPS id 1610488535822111.26168196092317; Tue, 12 Jan 2021 13:55:35 -0800 (PST) Received: by mail-wr1-f43.google.com with SMTP id t16so30321wra.3 for ; Tue, 12 Jan 2021 13:55:35 -0800 (PST) Return-Path: Return-Path: Received: from x1w.redhat.com (190.red-83-57-173.dynamicip.rima-tde.net. [83.57.173.190]) by smtp.gmail.com with ESMTPSA id d191sm5531790wmd.24.2021.01.12.13.55.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Jan 2021 13:55:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=gGCMmxvlx4ZHqOffAOkN9CXPMwMwdru/fLrpk0jKgDg=; b=dXLfnec4hKvYB/E/Duy+mRNmCpe0HMRr44fzl11aNqdSdi9GgrAFyp8JZzeK7IXNCj qijrNvzPYLxVru7vZ8OJ+Icz8lwePmj5o3UpE6Z7LkRVV0/zL2vjxi1kth9yOPuPGVbW xAP2AvED+gRuBqr9z0MjCAizdyQbI6JBgvlROypTVNnZq47nHgrWntzqY+TkdIv6uf1+ HM/ZhClqTK3r/n3aY/ioDFrfzxyOSUvgIzeOyv7qNkYCVyOq6Iw9/QFsbBtVVbYe05sF TAg8REersff1veHOGjaUmuBDJGJaohX/nP+LfQ+U88XOVOiUzNyYDbXL4jhvCnerc8Lh PkOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=gGCMmxvlx4ZHqOffAOkN9CXPMwMwdru/fLrpk0jKgDg=; b=ftWV8vI74eaJBDbM9GfdoRLH6HJnoYXqveXMlolZie79z43tAcgsG5KxTQUNX6jExk 7EHsMegjqNwjAvjl/XNQZLfhr0mjJ60kuL8FFoJkROaJYwVYwcJXx6W45Bh6CCdlCISz 1CjwQSUYbzwsyauquT7uZO6VbjpAN4yCp9cnUvVPbvMRQWKdRfcGy7yd9wUgPIvD6gSV OYgmxrOQiiNbsVbHUx1cT3Axy+iisiyXNucRJuc1IyR2ggEqZxQfEWHxp4gU2uNOun1a 8/iC5/2DugaPGxMWMex3iCL6hTx5xe8KTSF45EwCrcdUP9ndG8N59zjlIRatvW6OTtOK BN9g== X-Gm-Message-State: AOAM5317FjQJUJqn+Ddm2wqCPf/2WXRopBz2ty2M17VANmg178jWCxOv CzwW4WEmazkt64H4hrjBqUM= X-Google-Smtp-Source: ABdhPJxb1zLgu+BWT9uUhKjX2x9l0cgWDjmfCakoV4PHkYEuqfiNtRCAz/pj3+d7sS1ctnVRcHrBVQ== X-Received: by 2002:a05:6000:1882:: with SMTP id a2mr797004wri.237.1610488533925; Tue, 12 Jan 2021 13:55:33 -0800 (PST) Sender: =?UTF-8?Q?Philippe_Mathieu=2DDaud=C3=A9?= From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org Cc: Aurelien Jarno , Huacai Chen , Jiaxun Yang , Richard Henderson , Aleksandar Rikalo , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH 5/6] target/mips: Convert Loongson [D]MOD[U].G opcodes to decodetree Date: Tue, 12 Jan 2021 22:55:03 +0100 Message-Id: <20210112215504.2093955-6-f4bug@amsat.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20210112215504.2093955-1-f4bug@amsat.org> References: <20210112215504.2093955-1-f4bug@amsat.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @gmail.com) Convert the following opcodes to decodetree: - MOD.G - mod 32-bit signed integers - MODU.G - mod 32-bit unsigned integers - DMOD.G - mod 64-bit signed integers - DMODU.G - mod 64-bit unsigned integers Signed-off-by: Philippe Mathieu-Daud=C3=A9 Reviewed-by: Richard Henderson --- target/mips/godson2.decode | 5 ++ target/mips/loong-ext.decode | 5 ++ target/mips/loong_translate.c | 116 ++++++++++++++++++++++++++++++++++ target/mips/translate.c | 86 ------------------------- 4 files changed, 126 insertions(+), 86 deletions(-) diff --git a/target/mips/godson2.decode b/target/mips/godson2.decode index 0d5a72064d2..805452fa975 100644 --- a/target/mips/godson2.decode +++ b/target/mips/godson2.decode @@ -17,3 +17,8 @@ DIV.G 011111 ..... ..... ..... 00000 011010 @= rs_rt_rd DIVU.G 011111 ..... ..... ..... 00000 011011 @rs_rt_rd DDIV.G 011111 ..... ..... ..... 00000 011110 @rs_rt_rd DDIVU.G 011111 ..... ..... ..... 00000 011111 @rs_rt_rd + +MOD.G 011111 ..... ..... ..... 00000 100010 @rs_rt_rd +MODU.G 011111 ..... ..... ..... 00000 100011 @rs_rt_rd +DMOD.G 011111 ..... ..... ..... 00000 100110 @rs_rt_rd +DMODU.G 011111 ..... ..... ..... 00000 100111 @rs_rt_rd diff --git a/target/mips/loong-ext.decode b/target/mips/loong-ext.decode index 2e98262b81d..b0715894ee1 100644 --- a/target/mips/loong-ext.decode +++ b/target/mips/loong-ext.decode @@ -18,3 +18,8 @@ DIV.G 011100 ..... ..... ..... 00000 010100 @= rs_rt_rd DDIV.G 011100 ..... ..... ..... 00000 010101 @rs_rt_rd DIVU.G 011100 ..... ..... ..... 00000 010110 @rs_rt_rd DDIVU.G 011100 ..... ..... ..... 00000 010111 @rs_rt_rd + +MOD.G 011100 ..... ..... ..... 00000 011100 @rs_rt_rd +DMOD.G 011100 ..... ..... ..... 00000 011101 @rs_rt_rd +MODU.G 011100 ..... ..... ..... 00000 011110 @rs_rt_rd +DMODU.G 011100 ..... ..... ..... 00000 011111 @rs_rt_rd diff --git a/target/mips/loong_translate.c b/target/mips/loong_translate.c index 7b3304ec749..50609ce4178 100644 --- a/target/mips/loong_translate.c +++ b/target/mips/loong_translate.c @@ -147,6 +147,122 @@ static bool trans_DDIVU_G(DisasContext *s, arg_muldiv= *a) return gen_lext_DIVU_G(s, a->rt, a->rs, a->rd, true); } =20 +static bool gen_lext_MOD_G(DisasContext *s, int rd, int rs, int rt, + bool is_double) +{ + TCGv t0, t1; + TCGLabel *l1, *l2, *l3; + + if (is_double) { + if (TARGET_LONG_BITS !=3D 64) { + return false; + } + check_mips_64(s); + } + + if (rd =3D=3D 0) { + /* Treat as NOP. */ + return true; + } + + t0 =3D tcg_temp_local_new(); + t1 =3D tcg_temp_local_new(); + l1 =3D gen_new_label(); + l2 =3D gen_new_label(); + l3 =3D gen_new_label(); + + gen_load_gpr(t0, rs); + gen_load_gpr(t1, rt); + + if (!is_double) { + tcg_gen_ext32u_tl(t0, t0); + tcg_gen_ext32u_tl(t1, t1); + } + tcg_gen_brcondi_tl(TCG_COND_EQ, t1, 0, l1); + tcg_gen_brcondi_tl(TCG_COND_NE, t0, is_double ? -1LL << 63 : INT_MIN, = l2); + tcg_gen_brcondi_tl(TCG_COND_NE, t1, -1LL, l2); + gen_set_label(l1); + tcg_gen_movi_tl(cpu_gpr[rd], 0); + tcg_gen_br(l3); + gen_set_label(l2); + tcg_gen_rem_tl(cpu_gpr[rd], t0, t1); + if (!is_double) { + tcg_gen_ext32s_tl(cpu_gpr[rd], cpu_gpr[rd]); + } + gen_set_label(l3); + + tcg_temp_free(t0); + tcg_temp_free(t1); + + return true; +} + +static bool trans_MOD_G(DisasContext *s, arg_muldiv *a) +{ + return gen_lext_MOD_G(s, a->rt, a->rs, a->rd, false); +} + +static bool trans_DMOD_G(DisasContext *s, arg_muldiv *a) +{ + return gen_lext_MOD_G(s, a->rt, a->rs, a->rd, true); +} + +static bool gen_lext_MODU_G(DisasContext *s, int rd, int rs, int rt, + bool is_double) +{ + TCGv t0, t1; + TCGLabel *l1, *l2; + + if (is_double) { + if (TARGET_LONG_BITS !=3D 64) { + return false; + } + check_mips_64(s); + } + + if (rd =3D=3D 0) { + /* Treat as NOP. */ + return true; + } + + t0 =3D tcg_temp_local_new(); + t1 =3D tcg_temp_local_new(); + l1 =3D gen_new_label(); + l2 =3D gen_new_label(); + + gen_load_gpr(t0, rs); + gen_load_gpr(t1, rt); + + if (!is_double) { + tcg_gen_ext32u_tl(t0, t0); + tcg_gen_ext32u_tl(t1, t1); + } + tcg_gen_brcondi_tl(TCG_COND_NE, t1, 0, l1); + tcg_gen_movi_tl(cpu_gpr[rd], 0); + tcg_gen_br(l2); + gen_set_label(l1); + tcg_gen_remu_tl(cpu_gpr[rd], t0, t1); + if (!is_double) { + tcg_gen_ext32s_tl(cpu_gpr[rd], cpu_gpr[rd]); + } + gen_set_label(l2); + + tcg_temp_free(t0); + tcg_temp_free(t1); + + return true; +} + +static bool trans_MODU_G(DisasContext *s, arg_muldiv *a) +{ + return gen_lext_MODU_G(s, a->rt, a->rs, a->rd, false); +} + +static bool trans_DMODU_G(DisasContext *s, arg_muldiv *a) +{ + return gen_lext_MODU_G(s, a->rt, a->rs, a->rd, true); +} + bool decode_loongson(DisasContext *ctx, uint32_t insn) { if ((ctx->insn_flags & INSN_LOONGSON2E) diff --git a/target/mips/translate.c b/target/mips/translate.c index 69463e3b42d..144e51b063a 100644 --- a/target/mips/translate.c +++ b/target/mips/translate.c @@ -342,10 +342,6 @@ enum { OPC_DMULT_G_2F =3D 0x11 | OPC_SPECIAL2, OPC_MULTU_G_2F =3D 0x12 | OPC_SPECIAL2, OPC_DMULTU_G_2F =3D 0x13 | OPC_SPECIAL2, - OPC_MOD_G_2F =3D 0x1c | OPC_SPECIAL2, - OPC_DMOD_G_2F =3D 0x1d | OPC_SPECIAL2, - OPC_MODU_G_2F =3D 0x1e | OPC_SPECIAL2, - OPC_DMODU_G_2F =3D 0x1f | OPC_SPECIAL2, /* Misc */ OPC_CLZ =3D 0x20 | OPC_SPECIAL2, OPC_CLO =3D 0x21 | OPC_SPECIAL2, @@ -379,10 +375,6 @@ enum { OPC_MULTU_G_2E =3D 0x19 | OPC_SPECIAL3, OPC_DMULT_G_2E =3D 0x1C | OPC_SPECIAL3, OPC_DMULTU_G_2E =3D 0x1D | OPC_SPECIAL3, - OPC_MOD_G_2E =3D 0x22 | OPC_SPECIAL3, - OPC_MODU_G_2E =3D 0x23 | OPC_SPECIAL3, - OPC_DMOD_G_2E =3D 0x26 | OPC_SPECIAL3, - OPC_DMODU_G_2E =3D 0x27 | OPC_SPECIAL3, =20 /* MIPS DSP Load */ OPC_LX_DSP =3D 0x0A | OPC_SPECIAL3, @@ -4995,10 +4987,6 @@ static void gen_loongson_integer(DisasContext *ctx, = uint32_t opc, t0 =3D tcg_temp_new(); t1 =3D tcg_temp_new(); break; - default: - t0 =3D tcg_temp_local_new(); - t1 =3D tcg_temp_local_new(); - break; } =20 gen_load_gpr(t0, rs); @@ -5017,42 +5005,6 @@ static void gen_loongson_integer(DisasContext *ctx, = uint32_t opc, tcg_gen_mul_tl(cpu_gpr[rd], t0, t1); tcg_gen_ext32s_tl(cpu_gpr[rd], cpu_gpr[rd]); break; - case OPC_MOD_G_2E: - case OPC_MOD_G_2F: - { - TCGLabel *l1 =3D gen_new_label(); - TCGLabel *l2 =3D gen_new_label(); - TCGLabel *l3 =3D gen_new_label(); - tcg_gen_ext32u_tl(t0, t0); - tcg_gen_ext32u_tl(t1, t1); - tcg_gen_brcondi_tl(TCG_COND_EQ, t1, 0, l1); - tcg_gen_brcondi_tl(TCG_COND_NE, t0, INT_MIN, l2); - tcg_gen_brcondi_tl(TCG_COND_NE, t1, -1, l2); - gen_set_label(l1); - tcg_gen_movi_tl(cpu_gpr[rd], 0); - tcg_gen_br(l3); - gen_set_label(l2); - tcg_gen_rem_tl(cpu_gpr[rd], t0, t1); - tcg_gen_ext32s_tl(cpu_gpr[rd], cpu_gpr[rd]); - gen_set_label(l3); - } - break; - case OPC_MODU_G_2E: - case OPC_MODU_G_2F: - { - TCGLabel *l1 =3D gen_new_label(); - TCGLabel *l2 =3D gen_new_label(); - tcg_gen_ext32u_tl(t0, t0); - tcg_gen_ext32u_tl(t1, t1); - tcg_gen_brcondi_tl(TCG_COND_NE, t1, 0, l1); - tcg_gen_movi_tl(cpu_gpr[rd], 0); - tcg_gen_br(l2); - gen_set_label(l1); - tcg_gen_remu_tl(cpu_gpr[rd], t0, t1); - tcg_gen_ext32s_tl(cpu_gpr[rd], cpu_gpr[rd]); - gen_set_label(l2); - } - break; #if defined(TARGET_MIPS64) case OPC_DMULT_G_2E: case OPC_DMULT_G_2F: @@ -5062,36 +5014,6 @@ static void gen_loongson_integer(DisasContext *ctx, = uint32_t opc, case OPC_DMULTU_G_2F: tcg_gen_mul_tl(cpu_gpr[rd], t0, t1); break; - case OPC_DMOD_G_2E: - case OPC_DMOD_G_2F: - { - TCGLabel *l1 =3D gen_new_label(); - TCGLabel *l2 =3D gen_new_label(); - TCGLabel *l3 =3D gen_new_label(); - tcg_gen_brcondi_tl(TCG_COND_EQ, t1, 0, l1); - tcg_gen_brcondi_tl(TCG_COND_NE, t0, -1LL << 63, l2); - tcg_gen_brcondi_tl(TCG_COND_NE, t1, -1LL, l2); - gen_set_label(l1); - tcg_gen_movi_tl(cpu_gpr[rd], 0); - tcg_gen_br(l3); - gen_set_label(l2); - tcg_gen_rem_tl(cpu_gpr[rd], t0, t1); - gen_set_label(l3); - } - break; - case OPC_DMODU_G_2E: - case OPC_DMODU_G_2F: - { - TCGLabel *l1 =3D gen_new_label(); - TCGLabel *l2 =3D gen_new_label(); - tcg_gen_brcondi_tl(TCG_COND_NE, t1, 0, l1); - tcg_gen_movi_tl(cpu_gpr[rd], 0); - tcg_gen_br(l2); - gen_set_label(l1); - tcg_gen_remu_tl(cpu_gpr[rd], t0, t1); - gen_set_label(l2); - } - break; #endif } =20 @@ -27069,8 +26991,6 @@ static void decode_opc_special2_legacy(CPUMIPSState= *env, DisasContext *ctx) break; case OPC_MULT_G_2F: case OPC_MULTU_G_2F: - case OPC_MOD_G_2F: - case OPC_MODU_G_2F: check_insn(ctx, INSN_LOONGSON2F | ASE_LEXT); gen_loongson_integer(ctx, op1, rd, rs, rt); break; @@ -27100,8 +27020,6 @@ static void decode_opc_special2_legacy(CPUMIPSState= *env, DisasContext *ctx) break; case OPC_DMULT_G_2F: case OPC_DMULTU_G_2F: - case OPC_DMOD_G_2F: - case OPC_DMODU_G_2F: check_insn(ctx, INSN_LOONGSON2F | ASE_LEXT); gen_loongson_integer(ctx, op1, rd, rs, rt); break; @@ -27237,8 +27155,6 @@ static void decode_opc_special3_legacy(CPUMIPSState= *env, DisasContext *ctx) =20 op1 =3D MASK_SPECIAL3(ctx->opcode); switch (op1) { - case OPC_MOD_G_2E: - case OPC_MODU_G_2E: case OPC_MULT_G_2E: case OPC_MULTU_G_2E: /* @@ -27508,8 +27424,6 @@ static void decode_opc_special3_legacy(CPUMIPSState= *env, DisasContext *ctx) #if defined(TARGET_MIPS64) case OPC_DMULT_G_2E: case OPC_DMULTU_G_2E: - case OPC_DMOD_G_2E: - case OPC_DMODU_G_2E: check_insn(ctx, INSN_LOONGSON2E); gen_loongson_integer(ctx, op1, rd, rs, rt); break; --=20 2.26.2 From nobody Fri Apr 19 18:57:31 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of _spf.google.com designates 209.85.221.51 as permitted sender) client-ip=209.85.221.51; envelope-from=philippe.mathieu.daude@gmail.com; helo=mail-wr1-f51.google.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of _spf.google.com designates 209.85.221.51 as permitted sender) smtp.mailfrom=philippe.mathieu.daude@gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1610488540; cv=none; d=zohomail.com; s=zohoarc; b=HoD3Z1+FI2fvnqXPSzOhYMeKThlNWINlijGWj0OvAsOV1hxfZwQyr/gdwHiDS/1Z0MkiFNzpBYrTQDOUMOa0Lqa/53mfVrJxS6o9t5rwuw4wZmbcmskdNL8IKYZNMUCuxaLV5Yu/0blOsGAnxT2CUW4JTLWsj31Mf5Q5GoI8wgc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1610488540; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:MIME-Version:Message-ID:References:Sender:Subject:To; bh=2UwynuTY25WflRngIJOfXryHldqB2m/mNIeXjl6Uo3s=; b=NOr2l1HeoIs4n+a0Y6Jhk7sZFNOhIzEhQTwzIM3ajworqU89UEMpf7XKT+JGqxEyY9cTPkbKOCn7PZC3aCMuejWHtXRWPEBPqsqIDwlo68Dd2SEJBXC8SB/S53kRkw17Iig1oSkpBqbXZ4PAPRF4j6GGoHJAJgX3qDojLB2Gj7E= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of _spf.google.com designates 209.85.221.51 as permitted sender) smtp.mailfrom=philippe.mathieu.daude@gmail.com Received: from mail-wr1-f51.google.com (mail-wr1-f51.google.com [209.85.221.51]) by mx.zohomail.com with SMTPS id 1610488540989280.85275567327346; Tue, 12 Jan 2021 13:55:40 -0800 (PST) Received: by mail-wr1-f51.google.com with SMTP id r7so22829wrc.5 for ; Tue, 12 Jan 2021 13:55:40 -0800 (PST) Return-Path: Return-Path: Received: from x1w.redhat.com (190.red-83-57-173.dynamicip.rima-tde.net. [83.57.173.190]) by smtp.gmail.com with ESMTPSA id u66sm5781625wmg.30.2021.01.12.13.55.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Jan 2021 13:55:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=2UwynuTY25WflRngIJOfXryHldqB2m/mNIeXjl6Uo3s=; b=LjpMlyQIJTTP3c2apY9hDtXdY4/abFyUjFlJZ3qv8MGe6d1J6+Rm8+mN38LTAQTRbZ 57dQ/SAmfGIgXTZ1zEjVFtNhnLjGz+l5OC/og8zO6sSoWND1tkx6LSgCpCuuJg/yMzIx 2Ye0cWP1I/smCos9LEGfoMq08u9OM0qABVzBMdus5avel+w0+t6fhBbB6G5Pd1Puktii EfWS42ysT8crZZJ3NdarPFu1Lt5Qlp7Cvm5reO6Qt7mszeg7I2DNyGU3aPnwJKIkUcmT Ttvvewg9yJqJ7vVT9iePu1H2IgfZpnyQQlFAPFsqaV+XXYTQUeBjtEPf5YSqJr8CfIbF IcPA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=2UwynuTY25WflRngIJOfXryHldqB2m/mNIeXjl6Uo3s=; b=EbYuzVBOZsEn7ya1SrtbGJoi9ZswRIdAnDNtLVMC2wT9hxQFM+bDANAaZZrLOPeHrO dJFqEU3briPPH4BhnNcwnDDy/rH7VjLLBPCzIqro8f+SRcTAdWgtztPc6PSfBkZIHU+C dX/azwv8v6otR74SYk+0xtcMiXHD56X9z3eoymOIe/z+sQQl/R/Qosuqrdjo8CmL0SIT Q1KDtOBIubVvcni5troIZHKYHRRdaSZmW0Tor/HDU2ddMgHG4xmOQcnm7WJyfJKfj97y ZpjzhU2tgcNFsOA6/G/HmRCEWhimP0bXu4EjyYTuYz6Ad9qOzMqOLWaBEW9LYVLw8jkn cWEg== X-Gm-Message-State: AOAM533YKqXPGKsFPZwNF59PwIMVT+sw4boQiB+QRv/0oqJkBzoRP4Hi uD6dt8V7Y84QWO1MQUNl4hA= X-Google-Smtp-Source: ABdhPJyG336SI2stbjS4zJcOMh1LSez+AIyNXQROwrkEr4GEhUZj0Zh33eFx12qAHyQceeRJ7wGACA== X-Received: by 2002:adf:d238:: with SMTP id k24mr805143wrh.414.1610488539049; Tue, 12 Jan 2021 13:55:39 -0800 (PST) Sender: =?UTF-8?Q?Philippe_Mathieu=2DDaud=C3=A9?= From: =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= To: qemu-devel@nongnu.org Cc: Aurelien Jarno , Huacai Chen , Jiaxun Yang , Richard Henderson , Aleksandar Rikalo , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH 6/6] target/mips: Convert Loongson [D]MULT[U].G opcodes to decodetree Date: Tue, 12 Jan 2021 22:55:04 +0100 Message-Id: <20210112215504.2093955-7-f4bug@amsat.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20210112215504.2093955-1-f4bug@amsat.org> References: <20210112215504.2093955-1-f4bug@amsat.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @gmail.com) Convert the following opcodes to decodetree: - MULT.G - multiply 32-bit signed integers - MULTU.G - multiply 32-bit unsigned integers - DMULT.G - multiply 64-bit signed integers - DMULTU.G - multiply 64-bit unsigned integers Now that all opcodes from the extension have been converted, we can remove completely gen_loongson_integer() and its 2 calls in decode_opc_special2_legacy() and decode_opc_special3_legacy(). Signed-off-by: Philippe Mathieu-Daud=C3=A9 --- target/mips/godson2.decode | 5 ++ target/mips/loong-ext.decode | 5 ++ target/mips/loong_translate.c | 58 ++++++++++++++++++++++ target/mips/translate.c | 92 +---------------------------------- 4 files changed, 70 insertions(+), 90 deletions(-) diff --git a/target/mips/godson2.decode b/target/mips/godson2.decode index 805452fa975..cf12d9072ec 100644 --- a/target/mips/godson2.decode +++ b/target/mips/godson2.decode @@ -13,6 +13,11 @@ =20 @rs_rt_rd ...... rs:5 rt:5 rd:5 ..... ...... &muldiv =20 +MULT.G 011111 ..... ..... ..... 00000 011000 @rs_rt_rd +MULTU.G 011111 ..... ..... ..... 00000 011001 @rs_rt_rd +DMULT.G 011111 ..... ..... ..... 00000 011100 @rs_rt_rd +DMULTU.G 011111 ..... ..... ..... 00000 011101 @rs_rt_rd + DIV.G 011111 ..... ..... ..... 00000 011010 @rs_rt_rd DIVU.G 011111 ..... ..... ..... 00000 011011 @rs_rt_rd DDIV.G 011111 ..... ..... ..... 00000 011110 @rs_rt_rd diff --git a/target/mips/loong-ext.decode b/target/mips/loong-ext.decode index b0715894ee1..2281afaad95 100644 --- a/target/mips/loong-ext.decode +++ b/target/mips/loong-ext.decode @@ -14,6 +14,11 @@ =20 @rs_rt_rd ...... rs:5 rt:5 rd:5 ..... ...... &muldiv =20 +MULT.G 011100 ..... ..... ..... 00000 010000 @rs_rt_rd +DMULT.G 011100 ..... ..... ..... 00000 010001 @rs_rt_rd +MULTU.G 011100 ..... ..... ..... 00000 010010 @rs_rt_rd +DMULTU.G 011100 ..... ..... ..... 00000 010011 @rs_rt_rd + DIV.G 011100 ..... ..... ..... 00000 010100 @rs_rt_rd DDIV.G 011100 ..... ..... ..... 00000 010101 @rs_rt_rd DIVU.G 011100 ..... ..... ..... 00000 010110 @rs_rt_rd diff --git a/target/mips/loong_translate.c b/target/mips/loong_translate.c index 50609ce4178..2af94535921 100644 --- a/target/mips/loong_translate.c +++ b/target/mips/loong_translate.c @@ -263,6 +263,64 @@ static bool trans_DMODU_G(DisasContext *s, arg_muldiv = *a) return gen_lext_MODU_G(s, a->rt, a->rs, a->rd, true); } =20 +static bool gen_lext_MULT_G(DisasContext *s, int rd, int rs, int rt, + bool is_double, bool is_unsigned) +{ + TCGv t0, t1; + + if (is_double) { + if (TARGET_LONG_BITS !=3D 64) { + return false; + } + check_mips_64(s); + } + + if (rd =3D=3D 0) { + /* Treat as NOP. */ + return true; + } + + t0 =3D tcg_temp_new(); + t1 =3D tcg_temp_new(); + + gen_load_gpr(t0, rs); + gen_load_gpr(t1, rt); + + if (is_unsigned && !is_double) { + tcg_gen_ext32u_tl(t0, t0); + tcg_gen_ext32u_tl(t1, t1); + } + tcg_gen_mul_tl(cpu_gpr[rd], t0, t1); + if (!is_double) { + tcg_gen_ext32s_tl(cpu_gpr[rd], cpu_gpr[rd]); + } + + tcg_temp_free(t0); + tcg_temp_free(t1); + + return true; +} + +static bool trans_MULT_G(DisasContext *s, arg_muldiv *a) +{ + return gen_lext_MULT_G(s, a->rt, a->rs, a->rd, false, false); +} + +static bool trans_MULTU_G(DisasContext *s, arg_muldiv *a) +{ + return gen_lext_MULT_G(s, a->rt, a->rs, a->rd, false, true); +} + +static bool trans_DMULT_G(DisasContext *s, arg_muldiv *a) +{ + return gen_lext_MULT_G(s, a->rt, a->rs, a->rd, true, false); +} + +static bool trans_DMULTU_G(DisasContext *s, arg_muldiv *a) +{ + return gen_lext_MULT_G(s, a->rt, a->rs, a->rd, true, true); +} + bool decode_loongson(DisasContext *ctx, uint32_t insn) { if ((ctx->insn_flags & INSN_LOONGSON2E) diff --git a/target/mips/translate.c b/target/mips/translate.c index 144e51b063a..5b5fe31c534 100644 --- a/target/mips/translate.c +++ b/target/mips/translate.c @@ -337,11 +337,6 @@ enum { OPC_MUL =3D 0x02 | OPC_SPECIAL2, OPC_MSUB =3D 0x04 | OPC_SPECIAL2, OPC_MSUBU =3D 0x05 | OPC_SPECIAL2, - /* Loongson 2F */ - OPC_MULT_G_2F =3D 0x10 | OPC_SPECIAL2, - OPC_DMULT_G_2F =3D 0x11 | OPC_SPECIAL2, - OPC_MULTU_G_2F =3D 0x12 | OPC_SPECIAL2, - OPC_DMULTU_G_2F =3D 0x13 | OPC_SPECIAL2, /* Misc */ OPC_CLZ =3D 0x20 | OPC_SPECIAL2, OPC_CLO =3D 0x21 | OPC_SPECIAL2, @@ -370,12 +365,6 @@ enum { OPC_RDHWR =3D 0x3B | OPC_SPECIAL3, OPC_GINV =3D 0x3D | OPC_SPECIAL3, =20 - /* Loongson 2E */ - OPC_MULT_G_2E =3D 0x18 | OPC_SPECIAL3, - OPC_MULTU_G_2E =3D 0x19 | OPC_SPECIAL3, - OPC_DMULT_G_2E =3D 0x1C | OPC_SPECIAL3, - OPC_DMULTU_G_2E =3D 0x1D | OPC_SPECIAL3, - /* MIPS DSP Load */ OPC_LX_DSP =3D 0x0A | OPC_SPECIAL3, /* MIPS DSP Arithmetic */ @@ -4962,65 +4951,6 @@ static void gen_cl(DisasContext *ctx, uint32_t opc, } } =20 -/* Godson integer instructions */ -static void gen_loongson_integer(DisasContext *ctx, uint32_t opc, - int rd, int rs, int rt) -{ - TCGv t0, t1; - - if (rd =3D=3D 0) { - /* Treat as NOP. */ - return; - } - - switch (opc) { - case OPC_MULT_G_2E: - case OPC_MULT_G_2F: - case OPC_MULTU_G_2E: - case OPC_MULTU_G_2F: -#if defined(TARGET_MIPS64) - case OPC_DMULT_G_2E: - case OPC_DMULT_G_2F: - case OPC_DMULTU_G_2E: - case OPC_DMULTU_G_2F: -#endif - t0 =3D tcg_temp_new(); - t1 =3D tcg_temp_new(); - break; - } - - gen_load_gpr(t0, rs); - gen_load_gpr(t1, rt); - - switch (opc) { - case OPC_MULT_G_2E: - case OPC_MULT_G_2F: - tcg_gen_mul_tl(cpu_gpr[rd], t0, t1); - tcg_gen_ext32s_tl(cpu_gpr[rd], cpu_gpr[rd]); - break; - case OPC_MULTU_G_2E: - case OPC_MULTU_G_2F: - tcg_gen_ext32u_tl(t0, t0); - tcg_gen_ext32u_tl(t1, t1); - tcg_gen_mul_tl(cpu_gpr[rd], t0, t1); - tcg_gen_ext32s_tl(cpu_gpr[rd], cpu_gpr[rd]); - break; -#if defined(TARGET_MIPS64) - case OPC_DMULT_G_2E: - case OPC_DMULT_G_2F: - tcg_gen_mul_tl(cpu_gpr[rd], t0, t1); - break; - case OPC_DMULTU_G_2E: - case OPC_DMULTU_G_2F: - tcg_gen_mul_tl(cpu_gpr[rd], t0, t1); - break; -#endif - } - - tcg_temp_free(t0); - tcg_temp_free(t1); -} - /* Loongson multimedia instructions */ static void gen_loongson_multimedia(DisasContext *ctx, int rd, int rs, int= rt) { @@ -26989,11 +26919,6 @@ static void decode_opc_special2_legacy(CPUMIPSStat= e *env, DisasContext *ctx) case OPC_MUL: gen_arith(ctx, op1, rd, rs, rt); break; - case OPC_MULT_G_2F: - case OPC_MULTU_G_2F: - check_insn(ctx, INSN_LOONGSON2F | ASE_LEXT); - gen_loongson_integer(ctx, op1, rd, rs, rt); - break; case OPC_CLO: case OPC_CLZ: check_insn(ctx, ISA_MIPS_R1); @@ -27018,11 +26943,6 @@ static void decode_opc_special2_legacy(CPUMIPSStat= e *env, DisasContext *ctx) check_mips_64(ctx); gen_cl(ctx, op1, rd, rs); break; - case OPC_DMULT_G_2F: - case OPC_DMULTU_G_2F: - check_insn(ctx, INSN_LOONGSON2F | ASE_LEXT); - gen_loongson_integer(ctx, op1, rd, rs, rt); - break; #endif default: /* Invalid */ MIPS_INVAL("special2_legacy"); @@ -27155,10 +27075,9 @@ static void decode_opc_special3_legacy(CPUMIPSStat= e *env, DisasContext *ctx) =20 op1 =3D MASK_SPECIAL3(ctx->opcode); switch (op1) { - case OPC_MULT_G_2E: - case OPC_MULTU_G_2E: + case OPC_MUL_PH_DSP: /* - * OPC_MULT_G_2E, OPC_ADDUH_QB_DSP, OPC_MUL_PH_DSP have + * OPC_ADDUH_QB_DSP, OPC_MUL_PH_DSP have * the same mask and op1. */ if ((ctx->insn_flags & ASE_DSP_R2) && (op1 =3D=3D OPC_MUL_PH_DSP))= { @@ -27189,8 +27108,6 @@ static void decode_opc_special3_legacy(CPUMIPSState= *env, DisasContext *ctx) gen_reserved_instruction(ctx); break; } - } else if (ctx->insn_flags & INSN_LOONGSON2E) { - gen_loongson_integer(ctx, op1, rd, rs, rt); } else { gen_reserved_instruction(ctx); } @@ -27422,11 +27339,6 @@ static void decode_opc_special3_legacy(CPUMIPSStat= e *env, DisasContext *ctx) } break; #if defined(TARGET_MIPS64) - case OPC_DMULT_G_2E: - case OPC_DMULTU_G_2E: - check_insn(ctx, INSN_LOONGSON2E); - gen_loongson_integer(ctx, op1, rd, rs, rt); - break; case OPC_ABSQ_S_QH_DSP: op2 =3D MASK_ABSQ_S_QH(ctx->opcode); switch (op2) { --=20 2.26.2