From nobody Sat Apr 20 07:25:49 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.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=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1634158530775669.2448377672752; Wed, 13 Oct 2021 13:55:30 -0700 (PDT) Received: from localhost ([::1]:33856 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1malHd-0005yd-Op for importer@patchew.org; Wed, 13 Oct 2021 16:55:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35524) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1malDT-0007Mt-WB for qemu-devel@nongnu.org; Wed, 13 Oct 2021 16:51:12 -0400 Received: from mail-pj1-x1036.google.com ([2607:f8b0:4864:20::1036]:45594) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1malDR-000824-OE for qemu-devel@nongnu.org; Wed, 13 Oct 2021 16:51:11 -0400 Received: by mail-pj1-x1036.google.com with SMTP id ls14-20020a17090b350e00b001a00e2251c8so3197106pjb.4 for ; Wed, 13 Oct 2021 13:51:07 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t71sm383043pgc.29.2021.10.13.13.51.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 Oct 2021 13:51:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Ur4NYkKvb4IwfCVRQ66xGSUcq2q0ktl5nOkYZP/fju8=; b=EKlg/FVFPlK1GTIJsbaQ9VQ4PjSq1na328JumULUD5CQvUDWkO6lS/pKUcycf+/DkV LHKQCng2TE6jDOSclKGcDjCJEf/tsJtZK39yk1SHv/nKXrigIaPnW+8SyINxtuj4s9ky +DWpnyAX41YHap/IvrLLGO16lJ52NVJUs4o+WtVnikKAhHHZqAhC+Xes/22ZxczMn35A cxrZpUoAqGF0hmXySTQoJYNrgdmYHPZ6vCl55E4m6yWACh4Ec5UnaRSpsjrMUBvsUqlc Vv5uriO3XS/w2Vt7oZn4iBgsmZFeZJ0K9v0c0Q7d+mK0Hf3Y3vQeqyM3AF/cyEMf4/61 /Gag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Ur4NYkKvb4IwfCVRQ66xGSUcq2q0ktl5nOkYZP/fju8=; b=GB3N69nHzaRtVbl7GWc6ES94cnNpx+v5GRj4HsyCiifCYE9t7JR4Wiv1ctpr+4kOXt 09wywG+AIX0U8oSOAHnJUgey6BJdC/FFxFvivnLHcT4cwWt0Za2CFXAo8imH3WZJ/kTi h5wFnlxCfM80mEBnoVAEuzJ4XGpMGMPzSWb99aj6vUfJeA5aUhoej+9XNYJ0Ia7D6D7o HNEL9wvGs8nEVz5urLpCZP5FCWHvURoKPnZ2GRGoSxjKQIAkvZs1/vzV1CHuGAb5O3TA EvH8L27q83Gt+8PPodhIoh5QS2Ir9s5DCaFh8KLxCZg1MnU6CS8IMXJXIs3mFM+xb3su LZcA== X-Gm-Message-State: AOAM530Z1I8PuzofYASvmWXUApSCFSf9Xpeo//UuYknSfcCVICb7Kkv1 q/GhgLFjJZa9xV1vCX/R6U+gFNZ6nPOPTQ== X-Google-Smtp-Source: ABdhPJyW2KgSayuZmm7yZy6oDSMPdIIbDLXGyjzoC53ygz9mVem7Zk/etyl/r6RCx1MwbuTKnUfAUA== X-Received: by 2002:a17:90a:384a:: with SMTP id l10mr1678055pjf.168.1634158267047; Wed, 13 Oct 2021 13:51:07 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 01/13] target/riscv: Move cpu_get_tb_cpu_state out of line Date: Wed, 13 Oct 2021 13:50:52 -0700 Message-Id: <20211013205104.1031679-2-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211013205104.1031679-1-richard.henderson@linaro.org> References: <20211013205104.1031679-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=2607:f8b0:4864:20::1036; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1036.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: alistair.francis@wdc.com, frederic.petrot@univ-grenoble-alpes.fr, qemu-riscv@nongnu.org, zhiwei_liu@c-sky.com, fabien.portas@grenoble-inp.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1634158531485100001 Content-Type: text/plain; charset="utf-8" Move the function to cpu_helper.c, as it is large and growing. Reviewed-by: LIU Zhiwei Reviewed-by: Alistair Francis Signed-off-by: Richard Henderson --- target/riscv/cpu.h | 47 ++------------------------------------- target/riscv/cpu_helper.c | 46 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 45 deletions(-) diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h index 9e55b2f5b1..7084efc452 100644 --- a/target/riscv/cpu.h +++ b/target/riscv/cpu.h @@ -413,51 +413,8 @@ static inline uint32_t vext_get_vlmax(RISCVCPU *cpu, t= arget_ulong vtype) return cpu->cfg.vlen >> (sew + 3 - lmul); } =20 -static inline void cpu_get_tb_cpu_state(CPURISCVState *env, target_ulong *= pc, - target_ulong *cs_base, uint32_t *p= flags) -{ - uint32_t flags =3D 0; - - *pc =3D env->pc; - *cs_base =3D 0; - - if (riscv_has_ext(env, RVV)) { - uint32_t vlmax =3D vext_get_vlmax(env_archcpu(env), env->vtype); - bool vl_eq_vlmax =3D (env->vstart =3D=3D 0) && (vlmax =3D=3D env->= vl); - flags =3D FIELD_DP32(flags, TB_FLAGS, VILL, - FIELD_EX64(env->vtype, VTYPE, VILL)); - flags =3D FIELD_DP32(flags, TB_FLAGS, SEW, - FIELD_EX64(env->vtype, VTYPE, VSEW)); - flags =3D FIELD_DP32(flags, TB_FLAGS, LMUL, - FIELD_EX64(env->vtype, VTYPE, VLMUL)); - flags =3D FIELD_DP32(flags, TB_FLAGS, VL_EQ_VLMAX, vl_eq_vlmax); - } else { - flags =3D FIELD_DP32(flags, TB_FLAGS, VILL, 1); - } - -#ifdef CONFIG_USER_ONLY - flags |=3D TB_FLAGS_MSTATUS_FS; -#else - flags |=3D cpu_mmu_index(env, 0); - if (riscv_cpu_fp_enabled(env)) { - flags |=3D env->mstatus & MSTATUS_FS; - } - - if (riscv_has_ext(env, RVH)) { - if (env->priv =3D=3D PRV_M || - (env->priv =3D=3D PRV_S && !riscv_cpu_virt_enabled(env)) || - (env->priv =3D=3D PRV_U && !riscv_cpu_virt_enabled(env) && - get_field(env->hstatus, HSTATUS_HU))) { - flags =3D FIELD_DP32(flags, TB_FLAGS, HLSX, 1); - } - - flags =3D FIELD_DP32(flags, TB_FLAGS, MSTATUS_HS_FS, - get_field(env->mstatus_hs, MSTATUS_FS)); - } -#endif - - *pflags =3D flags; -} +void cpu_get_tb_cpu_state(CPURISCVState *env, target_ulong *pc, + target_ulong *cs_base, uint32_t *pflags); =20 RISCVException riscv_csrrw(CPURISCVState *env, int csrno, target_ulong *ret_value, diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c index d41d5cd27c..14d1d3cb72 100644 --- a/target/riscv/cpu_helper.c +++ b/target/riscv/cpu_helper.c @@ -35,6 +35,52 @@ int riscv_cpu_mmu_index(CPURISCVState *env, bool ifetch) #endif } =20 +void cpu_get_tb_cpu_state(CPURISCVState *env, target_ulong *pc, + target_ulong *cs_base, uint32_t *pflags) +{ + uint32_t flags =3D 0; + + *pc =3D env->pc; + *cs_base =3D 0; + + if (riscv_has_ext(env, RVV)) { + uint32_t vlmax =3D vext_get_vlmax(env_archcpu(env), env->vtype); + bool vl_eq_vlmax =3D (env->vstart =3D=3D 0) && (vlmax =3D=3D env->= vl); + flags =3D FIELD_DP32(flags, TB_FLAGS, VILL, + FIELD_EX64(env->vtype, VTYPE, VILL)); + flags =3D FIELD_DP32(flags, TB_FLAGS, SEW, + FIELD_EX64(env->vtype, VTYPE, VSEW)); + flags =3D FIELD_DP32(flags, TB_FLAGS, LMUL, + FIELD_EX64(env->vtype, VTYPE, VLMUL)); + flags =3D FIELD_DP32(flags, TB_FLAGS, VL_EQ_VLMAX, vl_eq_vlmax); + } else { + flags =3D FIELD_DP32(flags, TB_FLAGS, VILL, 1); + } + +#ifdef CONFIG_USER_ONLY + flags |=3D TB_FLAGS_MSTATUS_FS; +#else + flags |=3D cpu_mmu_index(env, 0); + if (riscv_cpu_fp_enabled(env)) { + flags |=3D env->mstatus & MSTATUS_FS; + } + + if (riscv_has_ext(env, RVH)) { + if (env->priv =3D=3D PRV_M || + (env->priv =3D=3D PRV_S && !riscv_cpu_virt_enabled(env)) || + (env->priv =3D=3D PRV_U && !riscv_cpu_virt_enabled(env) && + get_field(env->hstatus, HSTATUS_HU))) { + flags =3D FIELD_DP32(flags, TB_FLAGS, HLSX, 1); + } + + flags =3D FIELD_DP32(flags, TB_FLAGS, MSTATUS_HS_FS, + get_field(env->mstatus_hs, MSTATUS_FS)); + } +#endif + + *pflags =3D flags; +} + #ifndef CONFIG_USER_ONLY static int riscv_cpu_local_irq_pending(CPURISCVState *env) { --=20 2.25.1 From nobody Sat Apr 20 07:25:49 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.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=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1634158393301757.9208085097314; Wed, 13 Oct 2021 13:53:13 -0700 (PDT) Received: from localhost ([::1]:55574 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1malFP-0001d7-Ue for importer@patchew.org; Wed, 13 Oct 2021 16:53:12 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35522) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1malDT-0007Ms-TY for qemu-devel@nongnu.org; Wed, 13 Oct 2021 16:51:11 -0400 Received: from mail-pf1-x42d.google.com ([2607:f8b0:4864:20::42d]:35407) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1malDR-000837-Ng for qemu-devel@nongnu.org; Wed, 13 Oct 2021 16:51:11 -0400 Received: by mail-pf1-x42d.google.com with SMTP id c29so3567146pfp.2 for ; Wed, 13 Oct 2021 13:51:09 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t71sm383043pgc.29.2021.10.13.13.51.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 Oct 2021 13:51:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=JW/tzOqQKK5hRD4CRoj0kca6rOybKGXTUDDhLFOWwb8=; b=EqILzztPTSxPua6iFy6dHn3jeX6cXzqW77Yl3/exjx7p+vLROqBR+ZNvehvsfpV+vX nBeib442CuPXopJsSX9r7Y+wCHhqnztRRWWyWM8i7NTWSdOdkAWkPVXdTm0SIzf46J80 by/lYBIkyBLRju9BGchrTiXYrmGentSl94w2/7oty6Uzgc3vwFzhFUzzM/1aAp5W+xCu I2aLDe++4wXbUh2cvZRcHk7B2C6SbO9zoZaRdFyxsIcUwvtSwKjXAN8Clnn3IXkrZLiv G1HijfFtjCVd77CQz5fWlqCquxbQmfJ/tCXKEOwl6N1Q5mDHx3N+7UojpA4UP1dXBEuN 38mw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=JW/tzOqQKK5hRD4CRoj0kca6rOybKGXTUDDhLFOWwb8=; b=PFI82nvXF/ZoXlAxepj5qelORAZPj14m0PTm9N1fEId/a+/M+uQH1oZame/lmfRsbW E9Guw5OXOD8bwXNhJZEXFUeb5hZpORrhGAkSgA1JS5l5+yVA1vqZrKm+oBR5YUZeiPza kDFttdu2gco0Gw6VGJqJULJwSeG6hHfwDD1MmQXqqpsI7hscbhEbN1jXpxujfnW16wCS iTx3ibVR0NQncn7wjOIZDmetlXUbmeadh9RKilV3q0Lj8pwDL+CENnRz3v+/Mu7jvq70 I3IBDcozuzKwutZsEs8JyCF0ls30fcZhilmvmtluEh7lZwjK63/cwg9bbnSyNX3nyqAC gjwA== X-Gm-Message-State: AOAM5328x3arXdByewGHplOVkw5rT2fSrYVjYTkL/5YfqzAcKkxNJU98 P4XzVxHaIcmDXO2uaA1nSaFe8xowg3L/rQ== X-Google-Smtp-Source: ABdhPJwrJFPfJ6/V8iyAtjRsITpGLi2DFp9t9aXsYGMdmU3w3c9T9JV7kNu4ylnUlv0QA4sPPoCUrQ== X-Received: by 2002:a63:af15:: with SMTP id w21mr1123470pge.205.1634158268069; Wed, 13 Oct 2021 13:51:08 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 02/13] target/riscv: Create RISCVMXL enumeration Date: Wed, 13 Oct 2021 13:50:53 -0700 Message-Id: <20211013205104.1031679-3-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211013205104.1031679-1-richard.henderson@linaro.org> References: <20211013205104.1031679-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=2607:f8b0:4864:20::42d; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x42d.google.com X-Spam_score_int: -1 X-Spam_score: -0.2 X-Spam_bar: / X-Spam_report: (-0.2 / 5.0 requ) DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: alistair.francis@wdc.com, frederic.petrot@univ-grenoble-alpes.fr, qemu-riscv@nongnu.org, zhiwei_liu@c-sky.com, fabien.portas@grenoble-inp.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1634158394282100001 Content-Type: text/plain; charset="utf-8" Move the MXL_RV* defines to enumerators. Reviewed-by: LIU Zhiwei Reviewed-by: Alistair Francis Signed-off-by: Richard Henderson --- target/riscv/cpu_bits.h | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/target/riscv/cpu_bits.h b/target/riscv/cpu_bits.h index 999187a9ee..e248c6bf6d 100644 --- a/target/riscv/cpu_bits.h +++ b/target/riscv/cpu_bits.h @@ -364,9 +364,11 @@ #define MISA32_MXL 0xC0000000 #define MISA64_MXL 0xC000000000000000ULL =20 -#define MXL_RV32 1 -#define MXL_RV64 2 -#define MXL_RV128 3 +typedef enum { + MXL_RV32 =3D 1, + MXL_RV64 =3D 2, + MXL_RV128 =3D 3, +} RISCVMXL; =20 /* sstatus CSR bits */ #define SSTATUS_UIE 0x00000001 --=20 2.25.1 From nobody Sat Apr 20 07:25:49 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.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=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 163415839935541.82655911966219; Wed, 13 Oct 2021 13:53:19 -0700 (PDT) Received: from localhost ([::1]:55958 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1malFW-0001sA-3Y for importer@patchew.org; Wed, 13 Oct 2021 16:53:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35592) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1malDW-0007QN-CS for qemu-devel@nongnu.org; Wed, 13 Oct 2021 16:51:14 -0400 Received: from mail-pl1-x62b.google.com ([2607:f8b0:4864:20::62b]:37681) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1malDS-00084I-S7 for qemu-devel@nongnu.org; Wed, 13 Oct 2021 16:51:13 -0400 Received: by mail-pl1-x62b.google.com with SMTP id n11so2651536plf.4 for ; Wed, 13 Oct 2021 13:51:10 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t71sm383043pgc.29.2021.10.13.13.51.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 Oct 2021 13:51:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=kzHo+seD6SV4NLI0NEAzqy6KxFFPVcQ6+LG9WI9/gJk=; b=OcLTOVdDTCojbAJNMqiGdGkeIPY6CvSrsyoGlSmTna7mgDd7NOidVWohaiJ80LxiAg CsxJI1Gsj8ERQiuGkO0AXDZ4oGgQkr5VGv4svgm8QVfkjR/Vd6IajizVIYtmv7O2QPqM 2zXUfHum1lnXLvuhd+TCVKfl5HaSwDPrXPmNntUodaDh8tnEXrTT0XKJ/I1LQ3A7ZuHg zeQ3cTeZpg4vS6RX4ozNiscCudJB8YqRMkniHLaiRJIN8b5AzhS9e/7dxDwqlSNvvsct Jt18SU3oLVvf9jfUUzrbVM5v/aIhOCEE+ZUoAO19xbCNmfMjFaqgFshvdd+1kDO1nTwc MAew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=kzHo+seD6SV4NLI0NEAzqy6KxFFPVcQ6+LG9WI9/gJk=; b=AuRPLwy/FcZ19v23T1C4SDScAG3vfn3OPF5VZHlzgZK+Ea03nfMvCjLjB9Gn4J3wsx ZTuLYeQofceEya4G6ysRdd+dC7AtTqYoaDFMSkCTL7QyNoj+/KZUklPT8xLtMSiwBSJa N5qA3J4XHhMfgje9I+Eet9YkTv3Hu2rnwT8nnmy+bGv7n0vkowuxYGbpM4SgkO39z6/f XQ9qhbv8pV4oT33iITEjAqIStsPnrPuamj/lVqxwtQQXbApOjyOThKWSkeX0zP+Fy7wy JKl/A64q//aBBFDEEAAuRLjgyZKO7IRxRoGJJQxLWGWyBQ6F2hR7loTUnIAXtf34wx9H iyWA== X-Gm-Message-State: AOAM533KMs6qtnQyevXEO47fj1KszWClZKyc92/nYhm7L+/7el/3PgIn km7oq46N8p3U3fCqi9EYiqmJyInLQDPcUw== X-Google-Smtp-Source: ABdhPJwA6/NzEZde8bBKlYH+clxpCe+z6367630TZ/hN3RxkHrKODOcHr5p5PWVvYy6iZJNGNCPrfg== X-Received: by 2002:a17:90b:3ecc:: with SMTP id rm12mr1754098pjb.48.1634158269432; Wed, 13 Oct 2021 13:51:09 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 03/13] target/riscv: Split misa.mxl and misa.ext Date: Wed, 13 Oct 2021 13:50:54 -0700 Message-Id: <20211013205104.1031679-4-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211013205104.1031679-1-richard.henderson@linaro.org> References: <20211013205104.1031679-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=2607:f8b0:4864:20::62b; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62b.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action 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: alistair.francis@wdc.com, frederic.petrot@univ-grenoble-alpes.fr, qemu-riscv@nongnu.org, zhiwei_liu@c-sky.com, fabien.portas@grenoble-inp.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1634158400608100001 Content-Type: text/plain; charset="utf-8" The hw representation of misa.mxl is at the high bits of the misa csr. Representing this in the same way inside QEMU results in overly complex code trying to check that field. Signed-off-by: Richard Henderson Reviewed-by: Alistair Francis --- v2: Reset misa.mxl. --- target/riscv/cpu.h | 15 +++---- linux-user/elfload.c | 2 +- linux-user/riscv/cpu_loop.c | 2 +- target/riscv/cpu.c | 78 +++++++++++++++++++++---------------- target/riscv/csr.c | 44 ++++++++++++++------- target/riscv/gdbstub.c | 8 ++-- target/riscv/machine.c | 10 +++-- target/riscv/translate.c | 10 +++-- 8 files changed, 100 insertions(+), 69 deletions(-) diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h index 7084efc452..e708fcc168 100644 --- a/target/riscv/cpu.h +++ b/target/riscv/cpu.h @@ -25,6 +25,7 @@ #include "exec/cpu-defs.h" #include "fpu/softfloat-types.h" #include "qom/object.h" +#include "cpu_bits.h" =20 #define TCG_GUEST_DEFAULT_MO 0 =20 @@ -51,9 +52,6 @@ # define TYPE_RISCV_CPU_BASE TYPE_RISCV_CPU_BASE64 #endif =20 -#define RV32 ((target_ulong)1 << (TARGET_LONG_BITS - 2)) -#define RV64 ((target_ulong)2 << (TARGET_LONG_BITS - 2)) - #define RV(x) ((target_ulong)1 << (x - 'A')) =20 #define RVI RV('I') @@ -133,8 +131,12 @@ struct CPURISCVState { target_ulong priv_ver; target_ulong bext_ver; target_ulong vext_ver; - target_ulong misa; - target_ulong misa_mask; + + /* RISCVMXL, but uint32_t for vmstate migration */ + uint32_t misa_mxl; /* current mxl */ + uint32_t misa_mxl_max; /* max mxl for this cpu */ + uint32_t misa_ext; /* current extensions */ + uint32_t misa_ext_mask; /* max ext for this cpu */ =20 uint32_t features; =20 @@ -313,7 +315,7 @@ struct RISCVCPU { =20 static inline int riscv_has_ext(CPURISCVState *env, target_ulong ext) { - return (env->misa & ext) !=3D 0; + return (env->misa_ext & ext) !=3D 0; } =20 static inline bool riscv_feature(CPURISCVState *env, int feature) @@ -322,7 +324,6 @@ static inline bool riscv_feature(CPURISCVState *env, in= t feature) } =20 #include "cpu_user.h" -#include "cpu_bits.h" =20 extern const char * const riscv_int_regnames[]; extern const char * const riscv_fpr_regnames[]; diff --git a/linux-user/elfload.c b/linux-user/elfload.c index 2404d482ba..214c1aa40d 100644 --- a/linux-user/elfload.c +++ b/linux-user/elfload.c @@ -1448,7 +1448,7 @@ static uint32_t get_elf_hwcap(void) uint32_t mask =3D MISA_BIT('I') | MISA_BIT('M') | MISA_BIT('A') | MISA_BIT('F') | MISA_BIT('D') | MISA_BIT('C'); =20 - return cpu->env.misa & mask; + return cpu->env.misa_ext & mask; #undef MISA_BIT } =20 diff --git a/linux-user/riscv/cpu_loop.c b/linux-user/riscv/cpu_loop.c index 9859a366e4..e5bb6d908a 100644 --- a/linux-user/riscv/cpu_loop.c +++ b/linux-user/riscv/cpu_loop.c @@ -133,7 +133,7 @@ void target_cpu_copy_regs(CPUArchState *env, struct tar= get_pt_regs *regs) env->gpr[xSP] =3D regs->sp; env->elf_flags =3D info->elf_flags; =20 - if ((env->misa & RVE) && !(env->elf_flags & EF_RISCV_RVE)) { + if ((env->misa_ext & RVE) && !(env->elf_flags & EF_RISCV_RVE)) { error_report("Incompatible ELF: RVE cpu requires RVE ABI binary"); exit(EXIT_FAILURE); } diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c index 1d69d1887e..fdf031a394 100644 --- a/target/riscv/cpu.c +++ b/target/riscv/cpu.c @@ -110,16 +110,13 @@ const char *riscv_cpu_get_trap_name(target_ulong caus= e, bool async) =20 bool riscv_cpu_is_32bit(CPURISCVState *env) { - if (env->misa & RV64) { - return false; - } - - return true; + return env->misa_mxl =3D=3D MXL_RV32; } =20 -static void set_misa(CPURISCVState *env, target_ulong misa) +static void set_misa(CPURISCVState *env, RISCVMXL mxl, uint32_t ext) { - env->misa_mask =3D env->misa =3D misa; + env->misa_mxl_max =3D env->misa_mxl =3D mxl; + env->misa_ext_mask =3D env->misa_ext =3D ext; } =20 static void set_priv_version(CPURISCVState *env, int priv_ver) @@ -148,9 +145,9 @@ static void riscv_any_cpu_init(Object *obj) { CPURISCVState *env =3D &RISCV_CPU(obj)->env; #if defined(TARGET_RISCV32) - set_misa(env, RV32 | RVI | RVM | RVA | RVF | RVD | RVC | RVU); + set_misa(env, MXL_RV32, RVI | RVM | RVA | RVF | RVD | RVC | RVU); #elif defined(TARGET_RISCV64) - set_misa(env, RV64 | RVI | RVM | RVA | RVF | RVD | RVC | RVU); + set_misa(env, MXL_RV64, RVI | RVM | RVA | RVF | RVD | RVC | RVU); #endif set_priv_version(env, PRIV_VERSION_1_11_0); } @@ -160,20 +157,20 @@ static void rv64_base_cpu_init(Object *obj) { CPURISCVState *env =3D &RISCV_CPU(obj)->env; /* We set this in the realise function */ - set_misa(env, RV64); + set_misa(env, MXL_RV64, 0); } =20 static void rv64_sifive_u_cpu_init(Object *obj) { CPURISCVState *env =3D &RISCV_CPU(obj)->env; - set_misa(env, RV64 | RVI | RVM | RVA | RVF | RVD | RVC | RVS | RVU); + set_misa(env, MXL_RV64, RVI | RVM | RVA | RVF | RVD | RVC | RVS | RVU); set_priv_version(env, PRIV_VERSION_1_10_0); } =20 static void rv64_sifive_e_cpu_init(Object *obj) { CPURISCVState *env =3D &RISCV_CPU(obj)->env; - set_misa(env, RV64 | RVI | RVM | RVA | RVC | RVU); + set_misa(env, MXL_RV64, RVI | RVM | RVA | RVC | RVU); set_priv_version(env, PRIV_VERSION_1_10_0); qdev_prop_set_bit(DEVICE(obj), "mmu", false); } @@ -182,20 +179,20 @@ static void rv32_base_cpu_init(Object *obj) { CPURISCVState *env =3D &RISCV_CPU(obj)->env; /* We set this in the realise function */ - set_misa(env, RV32); + set_misa(env, MXL_RV32, 0); } =20 static void rv32_sifive_u_cpu_init(Object *obj) { CPURISCVState *env =3D &RISCV_CPU(obj)->env; - set_misa(env, RV32 | RVI | RVM | RVA | RVF | RVD | RVC | RVS | RVU); + set_misa(env, MXL_RV32, RVI | RVM | RVA | RVF | RVD | RVC | RVS | RVU); set_priv_version(env, PRIV_VERSION_1_10_0); } =20 static void rv32_sifive_e_cpu_init(Object *obj) { CPURISCVState *env =3D &RISCV_CPU(obj)->env; - set_misa(env, RV32 | RVI | RVM | RVA | RVC | RVU); + set_misa(env, MXL_RV32, RVI | RVM | RVA | RVC | RVU); set_priv_version(env, PRIV_VERSION_1_10_0); qdev_prop_set_bit(DEVICE(obj), "mmu", false); } @@ -203,7 +200,7 @@ static void rv32_sifive_e_cpu_init(Object *obj) static void rv32_ibex_cpu_init(Object *obj) { CPURISCVState *env =3D &RISCV_CPU(obj)->env; - set_misa(env, RV32 | RVI | RVM | RVC | RVU); + set_misa(env, MXL_RV32, RVI | RVM | RVC | RVU); set_priv_version(env, PRIV_VERSION_1_10_0); qdev_prop_set_bit(DEVICE(obj), "mmu", false); qdev_prop_set_bit(DEVICE(obj), "x-epmp", true); @@ -212,7 +209,7 @@ static void rv32_ibex_cpu_init(Object *obj) static void rv32_imafcu_nommu_cpu_init(Object *obj) { CPURISCVState *env =3D &RISCV_CPU(obj)->env; - set_misa(env, RV32 | RVI | RVM | RVA | RVF | RVC | RVU); + set_misa(env, MXL_RV32, RVI | RVM | RVA | RVF | RVC | RVU); set_priv_version(env, PRIV_VERSION_1_10_0); set_resetvec(env, DEFAULT_RSTVEC); qdev_prop_set_bit(DEVICE(obj), "mmu", false); @@ -360,6 +357,7 @@ static void riscv_cpu_reset(DeviceState *dev) =20 mcc->parent_reset(dev); #ifndef CONFIG_USER_ONLY + env->misa_mxl =3D env->misa_mxl_max; env->priv =3D PRV_M; env->mstatus &=3D ~(MSTATUS_MIE | MSTATUS_MPRV); env->mcause =3D 0; @@ -388,7 +386,6 @@ static void riscv_cpu_realize(DeviceState *dev, Error *= *errp) CPURISCVState *env =3D &cpu->env; RISCVCPUClass *mcc =3D RISCV_CPU_GET_CLASS(dev); int priv_version =3D 0; - target_ulong target_misa =3D env->misa; Error *local_err =3D NULL; =20 cpu_exec_realizefn(cs, &local_err); @@ -434,8 +431,23 @@ static void riscv_cpu_realize(DeviceState *dev, Error = **errp) =20 set_resetvec(env, cpu->cfg.resetvec); =20 - /* If only XLEN is set for misa, then set misa from properties */ - if (env->misa =3D=3D RV32 || env->misa =3D=3D RV64) { + /* Validate that MISA_MXL is set properly. */ + switch (env->misa_mxl_max) { +#ifdef TARGET_RISCV64 + case MXL_RV64: + break; +#endif + case MXL_RV32: + break; + default: + g_assert_not_reached(); + } + assert(env->misa_mxl_max =3D=3D env->misa_mxl); + + /* If only MISA_EXT is unset for misa, then set it from properties */ + if (env->misa_ext =3D=3D 0) { + uint32_t ext =3D 0; + /* Do some ISA extension error checking */ if (cpu->cfg.ext_i && cpu->cfg.ext_e) { error_setg(errp, @@ -462,38 +474,38 @@ static void riscv_cpu_realize(DeviceState *dev, Error= **errp) =20 /* Set the ISA extensions, checks should have happened above */ if (cpu->cfg.ext_i) { - target_misa |=3D RVI; + ext |=3D RVI; } if (cpu->cfg.ext_e) { - target_misa |=3D RVE; + ext |=3D RVE; } if (cpu->cfg.ext_m) { - target_misa |=3D RVM; + ext |=3D RVM; } if (cpu->cfg.ext_a) { - target_misa |=3D RVA; + ext |=3D RVA; } if (cpu->cfg.ext_f) { - target_misa |=3D RVF; + ext |=3D RVF; } if (cpu->cfg.ext_d) { - target_misa |=3D RVD; + ext |=3D RVD; } if (cpu->cfg.ext_c) { - target_misa |=3D RVC; + ext |=3D RVC; } if (cpu->cfg.ext_s) { - target_misa |=3D RVS; + ext |=3D RVS; } if (cpu->cfg.ext_u) { - target_misa |=3D RVU; + ext |=3D RVU; } if (cpu->cfg.ext_h) { - target_misa |=3D RVH; + ext |=3D RVH; } if (cpu->cfg.ext_v) { int vext_version =3D VEXT_VERSION_0_07_1; - target_misa |=3D RVV; + ext |=3D RVV; if (!is_power_of_2(cpu->cfg.vlen)) { error_setg(errp, "Vector extension VLEN must be power of 2"); @@ -532,7 +544,7 @@ static void riscv_cpu_realize(DeviceState *dev, Error *= *errp) set_vext_version(env, vext_version); } =20 - set_misa(env, target_misa); + set_misa(env, env->misa_mxl, ext); } =20 riscv_cpu_register_gdb_regs_for_features(cs); @@ -705,7 +717,7 @@ char *riscv_isa_string(RISCVCPU *cpu) char *isa_str =3D g_new(char, maxlen); char *p =3D isa_str + snprintf(isa_str, maxlen, "rv%d", TARGET_LONG_BI= TS); for (i =3D 0; i < sizeof(riscv_exts); i++) { - if (cpu->env.misa & RV(riscv_exts[i])) { + if (cpu->env.misa_ext & RV(riscv_exts[i])) { *p++ =3D qemu_tolower(riscv_exts[i]); } } diff --git a/target/riscv/csr.c b/target/riscv/csr.c index 23fbbd3216..d0c86a300d 100644 --- a/target/riscv/csr.c +++ b/target/riscv/csr.c @@ -39,7 +39,7 @@ static RISCVException fs(CPURISCVState *env, int csrno) { #if !defined(CONFIG_USER_ONLY) /* loose check condition for fcsr in vector extension */ - if ((csrno =3D=3D CSR_FCSR) && (env->misa & RVV)) { + if ((csrno =3D=3D CSR_FCSR) && (env->misa_ext & RVV)) { return RISCV_EXCP_NONE; } if (!env->debugger && !riscv_cpu_fp_enabled(env)) { @@ -51,7 +51,7 @@ static RISCVException fs(CPURISCVState *env, int csrno) =20 static RISCVException vs(CPURISCVState *env, int csrno) { - if (env->misa & RVV) { + if (env->misa_ext & RVV) { return RISCV_EXCP_NONE; } return RISCV_EXCP_ILLEGAL_INST; @@ -557,7 +557,22 @@ static RISCVException write_mstatush(CPURISCVState *en= v, int csrno, static RISCVException read_misa(CPURISCVState *env, int csrno, target_ulong *val) { - *val =3D env->misa; + target_ulong misa; + + switch (env->misa_mxl) { + case MXL_RV32: + misa =3D (target_ulong)MXL_RV32 << 30; + break; +#ifdef TARGET_RISCV64 + case MXL_RV64: + misa =3D (target_ulong)MXL_RV64 << 62; + break; +#endif + default: + g_assert_not_reached(); + } + + *val =3D misa | env->misa_ext; return RISCV_EXCP_NONE; } =20 @@ -583,8 +598,13 @@ static RISCVException write_misa(CPURISCVState *env, i= nt csrno, return RISCV_EXCP_NONE; } =20 + /* + * misa.MXL writes are not supported by QEMU. + * Drop writes to those bits. + */ + /* Mask extensions that are not supported by this hart */ - val &=3D env->misa_mask; + val &=3D env->misa_ext_mask; =20 /* Mask extensions that are not supported by QEMU */ val &=3D (RVI | RVE | RVM | RVA | RVF | RVD | RVC | RVS | RVU); @@ -601,20 +621,14 @@ static RISCVException write_misa(CPURISCVState *env, = int csrno, val &=3D ~RVC; } =20 - /* misa.MXL writes are not supported by QEMU */ - if (riscv_cpu_is_32bit(env)) { - val =3D (env->misa & MISA32_MXL) | (val & ~MISA32_MXL); - } else { - val =3D (env->misa & MISA64_MXL) | (val & ~MISA64_MXL); + /* If nothing changed, do nothing. */ + if (val =3D=3D env->misa_ext) { + return RISCV_EXCP_NONE; } =20 /* flush translation cache */ - if (val !=3D env->misa) { - tb_flush(env_cpu(env)); - } - - env->misa =3D val; - + tb_flush(env_cpu(env)); + env->misa_ext =3D val; return RISCV_EXCP_NONE; } =20 diff --git a/target/riscv/gdbstub.c b/target/riscv/gdbstub.c index a7a9c0b1fe..5257df0217 100644 --- a/target/riscv/gdbstub.c +++ b/target/riscv/gdbstub.c @@ -54,10 +54,10 @@ int riscv_cpu_gdb_write_register(CPUState *cs, uint8_t = *mem_buf, int n) static int riscv_gdb_get_fpu(CPURISCVState *env, GByteArray *buf, int n) { if (n < 32) { - if (env->misa & RVD) { + if (env->misa_ext & RVD) { return gdb_get_reg64(buf, env->fpr[n]); } - if (env->misa & RVF) { + if (env->misa_ext & RVF) { return gdb_get_reg32(buf, env->fpr[n]); } /* there is hole between ft11 and fflags in fpu.xml */ @@ -191,10 +191,10 @@ void riscv_cpu_register_gdb_regs_for_features(CPUStat= e *cs) { RISCVCPU *cpu =3D RISCV_CPU(cs); CPURISCVState *env =3D &cpu->env; - if (env->misa & RVD) { + if (env->misa_ext & RVD) { gdb_register_coprocessor(cs, riscv_gdb_get_fpu, riscv_gdb_set_fpu, 36, "riscv-64bit-fpu.xml", 0); - } else if (env->misa & RVF) { + } else if (env->misa_ext & RVF) { gdb_register_coprocessor(cs, riscv_gdb_get_fpu, riscv_gdb_set_fpu, 36, "riscv-32bit-fpu.xml", 0); } diff --git a/target/riscv/machine.c b/target/riscv/machine.c index 16a08302da..f64b2a96c1 100644 --- a/target/riscv/machine.c +++ b/target/riscv/machine.c @@ -140,8 +140,8 @@ static const VMStateDescription vmstate_hyper =3D { =20 const VMStateDescription vmstate_riscv_cpu =3D { .name =3D "cpu", - .version_id =3D 2, - .minimum_version_id =3D 2, + .version_id =3D 3, + .minimum_version_id =3D 3, .fields =3D (VMStateField[]) { VMSTATE_UINTTL_ARRAY(env.gpr, RISCVCPU, 32), VMSTATE_UINT64_ARRAY(env.fpr, RISCVCPU, 32), @@ -153,8 +153,10 @@ const VMStateDescription vmstate_riscv_cpu =3D { VMSTATE_UINTTL(env.guest_phys_fault_addr, RISCVCPU), VMSTATE_UINTTL(env.priv_ver, RISCVCPU), VMSTATE_UINTTL(env.vext_ver, RISCVCPU), - VMSTATE_UINTTL(env.misa, RISCVCPU), - VMSTATE_UINTTL(env.misa_mask, RISCVCPU), + VMSTATE_UINT32(env.misa_mxl, RISCVCPU), + VMSTATE_UINT32(env.misa_ext, RISCVCPU), + VMSTATE_UINT32(env.misa_mxl_max, RISCVCPU), + VMSTATE_UINT32(env.misa_ext_mask, RISCVCPU), VMSTATE_UINT32(env.features, RISCVCPU), VMSTATE_UINTTL(env.priv, RISCVCPU), VMSTATE_UINTTL(env.virt, RISCVCPU), diff --git a/target/riscv/translate.c b/target/riscv/translate.c index d2442f0cf5..422f8ab8d0 100644 --- a/target/riscv/translate.c +++ b/target/riscv/translate.c @@ -55,7 +55,8 @@ typedef struct DisasContext { /* pc_succ_insn points to the instruction following base.pc_next */ target_ulong pc_succ_insn; target_ulong priv_ver; - target_ulong misa; + RISCVMXL xl; + uint32_t misa_ext; uint32_t opcode; uint32_t mstatus_fs; uint32_t mstatus_hs_fs; @@ -86,7 +87,7 @@ typedef struct DisasContext { =20 static inline bool has_ext(DisasContext *ctx, uint32_t ext) { - return ctx->misa & ext; + return ctx->misa_ext & ext; } =20 #ifdef TARGET_RISCV32 @@ -96,7 +97,7 @@ static inline bool has_ext(DisasContext *ctx, uint32_t ex= t) #else static inline bool is_32bit(DisasContext *ctx) { - return (ctx->misa & RV32) =3D=3D RV32; + return ctx->xl =3D=3D MXL_RV32; } #endif =20 @@ -538,7 +539,8 @@ static void riscv_tr_init_disas_context(DisasContextBas= e *dcbase, CPUState *cs) #else ctx->virt_enabled =3D false; #endif - ctx->misa =3D env->misa; + ctx->xl =3D env->misa_mxl; + ctx->misa_ext =3D env->misa_ext; ctx->frm =3D -1; /* unknown rounding mode */ ctx->ext_ifencei =3D cpu->cfg.ext_ifencei; ctx->vlen =3D cpu->cfg.vlen; --=20 2.25.1 From nobody Sat Apr 20 07:25:49 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.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=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 163415856743494.54638686035855; Wed, 13 Oct 2021 13:56:07 -0700 (PDT) Received: from localhost ([::1]:34426 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1malIE-0006ME-CQ for importer@patchew.org; Wed, 13 Oct 2021 16:56:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35700) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1malDa-0007XG-H2 for qemu-devel@nongnu.org; Wed, 13 Oct 2021 16:51:18 -0400 Received: from mail-pg1-x535.google.com ([2607:f8b0:4864:20::535]:42783) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1malDT-00085N-Nt for qemu-devel@nongnu.org; Wed, 13 Oct 2021 16:51:17 -0400 Received: by mail-pg1-x535.google.com with SMTP id 66so3466512pgc.9 for ; Wed, 13 Oct 2021 13:51:11 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t71sm383043pgc.29.2021.10.13.13.51.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 Oct 2021 13:51:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=4Tfk6rOkPFBJ6N3/4OlCjFDtsGaLD4ljr9lrSt09j54=; b=t0s+vv3Nmr+rq13d5cs76Urxj8YeqYAIiVfupQsSBDhTY2ZPvRsp0wglr7xXk4umpn LrdyraL59RyEZ2i8Ha3O19Fv2l+sbuuJOHnYGQqJLDySmwC9p4r0tQw17aBchAAUPWnX XBMv9da/GgN64rUEIFwWcgwZ8CWX+/2lDB/IRpgO78gfux2PRolSNNzIGs5G+q1f87jR C3CuiL2t+s/Vih9UxxnAIOThXe3oPDeR49V6UgpdQ2lR32DPhuhrQAhcljWRp5KQqp5C ij7iOhtta2at/ie7DMp36pF+VCyw5cft2u2kmp+gcUvS1XrjjPFPf85cj85y6nxGzCeA b22g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=4Tfk6rOkPFBJ6N3/4OlCjFDtsGaLD4ljr9lrSt09j54=; b=qTp84PjZUbiDYBAp/uGjfBdydiEOMVPCrqqRvLdThr+cHU8I8Icqe5I+uP6/iURU47 ACphimmTAhjWXkau8UXlq1h/N26YOO5xBh8+BOQsJl+qnyJqRy/sZhSGvhVumitenrCs lLLRRAXlX66dP9nsJXFWJw1O48tOWRODn+ztMI5qVW6Kmz6sgIAC2KmEBs4LfKMEXsqA negw3JL2I47PXGB/L7PUAFcN6VHRYNCg5WRbwyj22H6z12joE3CIZR+99xUgUOZ2cZ21 jKvl5CRV2Qkp79rUkFDrdRje/eHOI3XpTCgROU4WB6aURXI1k9WFYu84c0s4lJiLGp3N 9RSQ== X-Gm-Message-State: AOAM532wJmlwqflA735jLhnhzOstHvdlZUA59CYBernOJ2XVzJgsC6O3 L544JxZeJuSltgDZ0rm3N0JQt1By7bRY+A== X-Google-Smtp-Source: ABdhPJxKj5gij5fYoQGeqjewzjAMd1VlIbd+DWLPCJ0Ucnquw6QFtyf/SNTTUcq6NRG6Yd6mnBbl/g== X-Received: by 2002:a65:6a15:: with SMTP id m21mr1109788pgu.415.1634158270210; Wed, 13 Oct 2021 13:51:10 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 04/13] target/riscv: Replace riscv_cpu_is_32bit with riscv_cpu_mxl Date: Wed, 13 Oct 2021 13:50:55 -0700 Message-Id: <20211013205104.1031679-5-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211013205104.1031679-1-richard.henderson@linaro.org> References: <20211013205104.1031679-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=2607:f8b0:4864:20::535; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x535.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: alistair.francis@wdc.com, frederic.petrot@univ-grenoble-alpes.fr, qemu-riscv@nongnu.org, zhiwei_liu@c-sky.com, fabien.portas@grenoble-inp.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1634158568385100003 Content-Type: text/plain; charset="utf-8" Shortly, the set of supported XL will not be just 32 and 64, and representing that properly using the enumeration will be imperative. Two places, booting and gdb, intentionally use misa_mxl_max to emphasize the use of the reset value of misa.mxl, and not the current cpu state. Signed-off-by: Richard Henderson Reviewed-by: Alistair Francis --- target/riscv/cpu.h | 9 ++++++++- hw/riscv/boot.c | 2 +- semihosting/arm-compat-semi.c | 2 +- target/riscv/cpu.c | 24 ++++++++++++++---------- target/riscv/cpu_helper.c | 12 ++++++------ target/riscv/csr.c | 24 ++++++++++++------------ target/riscv/gdbstub.c | 2 +- target/riscv/monitor.c | 4 ++-- 8 files changed, 45 insertions(+), 34 deletions(-) diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h index e708fcc168..87248b562a 100644 --- a/target/riscv/cpu.h +++ b/target/riscv/cpu.h @@ -396,7 +396,14 @@ FIELD(TB_FLAGS, VILL, 8, 1) FIELD(TB_FLAGS, HLSX, 9, 1) FIELD(TB_FLAGS, MSTATUS_HS_FS, 10, 2) =20 -bool riscv_cpu_is_32bit(CPURISCVState *env); +#ifdef CONFIG_RISCV32 +#define riscv_cpu_mxl(env) MXL_RV32 +#else +static inline RISCVMXL riscv_cpu_mxl(CPURISCVState *env) +{ + return env->misa_mxl; +} +#endif =20 /* * A simplification for VLMAX diff --git a/hw/riscv/boot.c b/hw/riscv/boot.c index 993bf89064..d1ffc7b56c 100644 --- a/hw/riscv/boot.c +++ b/hw/riscv/boot.c @@ -35,7 +35,7 @@ =20 bool riscv_is_32bit(RISCVHartArrayState *harts) { - return riscv_cpu_is_32bit(&harts->harts[0].env); + return harts->harts[0].env.misa_mxl_max =3D=3D MXL_RV32; } =20 target_ulong riscv_calc_kernel_start_addr(RISCVHartArrayState *harts, diff --git a/semihosting/arm-compat-semi.c b/semihosting/arm-compat-semi.c index 01badea99c..37963becae 100644 --- a/semihosting/arm-compat-semi.c +++ b/semihosting/arm-compat-semi.c @@ -775,7 +775,7 @@ static inline bool is_64bit_semihosting(CPUArchState *e= nv) #if defined(TARGET_ARM) return is_a64(env); #elif defined(TARGET_RISCV) - return !riscv_cpu_is_32bit(env); + return riscv_cpu_mxl(env) !=3D MXL_RV32; #else #error un-handled architecture #endif diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c index fdf031a394..1857670a69 100644 --- a/target/riscv/cpu.c +++ b/target/riscv/cpu.c @@ -108,11 +108,6 @@ const char *riscv_cpu_get_trap_name(target_ulong cause= , bool async) } } =20 -bool riscv_cpu_is_32bit(CPURISCVState *env) -{ - return env->misa_mxl =3D=3D MXL_RV32; -} - static void set_misa(CPURISCVState *env, RISCVMXL mxl, uint32_t ext) { env->misa_mxl_max =3D env->misa_mxl =3D mxl; @@ -249,7 +244,7 @@ static void riscv_cpu_dump_state(CPUState *cs, FILE *f,= int flags) #ifndef CONFIG_USER_ONLY qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "mhartid ", env->mhartid); qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "mstatus ", (target_ulong)e= nv->mstatus); - if (riscv_cpu_is_32bit(env)) { + if (riscv_cpu_mxl(env) =3D=3D MXL_RV32) { qemu_fprintf(f, " %s " TARGET_FMT_lx "\n", "mstatush ", (target_ulong)(env->mstatus >> 32)); } @@ -372,10 +367,16 @@ static void riscv_cpu_reset(DeviceState *dev) static void riscv_cpu_disas_set_info(CPUState *s, disassemble_info *info) { RISCVCPU *cpu =3D RISCV_CPU(s); - if (riscv_cpu_is_32bit(&cpu->env)) { + + switch (riscv_cpu_mxl(&cpu->env)) { + case MXL_RV32: info->print_insn =3D print_insn_riscv32; - } else { + break; + case MXL_RV64: info->print_insn =3D print_insn_riscv64; + break; + default: + g_assert_not_reached(); } } =20 @@ -631,10 +632,13 @@ static gchar *riscv_gdb_arch_name(CPUState *cs) RISCVCPU *cpu =3D RISCV_CPU(cs); CPURISCVState *env =3D &cpu->env; =20 - if (riscv_cpu_is_32bit(env)) { + switch (riscv_cpu_mxl(env)) { + case MXL_RV32: return g_strdup("riscv:rv32"); - } else { + case MXL_RV64: return g_strdup("riscv:rv64"); + default: + g_assert_not_reached(); } } =20 diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c index 14d1d3cb72..403f54171d 100644 --- a/target/riscv/cpu_helper.c +++ b/target/riscv/cpu_helper.c @@ -152,7 +152,7 @@ bool riscv_cpu_fp_enabled(CPURISCVState *env) =20 void riscv_cpu_swap_hypervisor_regs(CPURISCVState *env) { - uint64_t sd =3D riscv_cpu_is_32bit(env) ? MSTATUS32_SD : MSTATUS64_SD; + uint64_t sd =3D riscv_cpu_mxl(env) =3D=3D MXL_RV32 ? MSTATUS32_SD : MS= TATUS64_SD; uint64_t mstatus_mask =3D MSTATUS_MXR | MSTATUS_SUM | MSTATUS_FS | MSTATUS_SPP | MSTATUS_SPIE | MSTATUS_SIE | MSTATUS64_UXL | sd; @@ -447,7 +447,7 @@ static int get_physical_address(CPURISCVState *env, hwa= ddr *physical, =20 if (first_stage =3D=3D true) { if (use_background) { - if (riscv_cpu_is_32bit(env)) { + if (riscv_cpu_mxl(env) =3D=3D MXL_RV32) { base =3D (hwaddr)get_field(env->vsatp, SATP32_PPN) << PGSH= IFT; vm =3D get_field(env->vsatp, SATP32_MODE); } else { @@ -455,7 +455,7 @@ static int get_physical_address(CPURISCVState *env, hwa= ddr *physical, vm =3D get_field(env->vsatp, SATP64_MODE); } } else { - if (riscv_cpu_is_32bit(env)) { + if (riscv_cpu_mxl(env) =3D=3D MXL_RV32) { base =3D (hwaddr)get_field(env->satp, SATP32_PPN) << PGSHI= FT; vm =3D get_field(env->satp, SATP32_MODE); } else { @@ -465,7 +465,7 @@ static int get_physical_address(CPURISCVState *env, hwa= ddr *physical, } widened =3D 0; } else { - if (riscv_cpu_is_32bit(env)) { + if (riscv_cpu_mxl(env) =3D=3D MXL_RV32) { base =3D (hwaddr)get_field(env->hgatp, SATP32_PPN) << PGSHIFT; vm =3D get_field(env->hgatp, SATP32_MODE); } else { @@ -558,7 +558,7 @@ restart: } =20 target_ulong pte; - if (riscv_cpu_is_32bit(env)) { + if (riscv_cpu_mxl(env) =3D=3D MXL_RV32) { pte =3D address_space_ldl(cs->as, pte_addr, attrs, &res); } else { pte =3D address_space_ldq(cs->as, pte_addr, attrs, &res); @@ -678,7 +678,7 @@ static void raise_mmu_exception(CPURISCVState *env, tar= get_ulong address, int page_fault_exceptions, vm; uint64_t stap_mode; =20 - if (riscv_cpu_is_32bit(env)) { + if (riscv_cpu_mxl(env) =3D=3D MXL_RV32) { stap_mode =3D SATP32_MODE; } else { stap_mode =3D SATP64_MODE; diff --git a/target/riscv/csr.c b/target/riscv/csr.c index d0c86a300d..9c0753bc8b 100644 --- a/target/riscv/csr.c +++ b/target/riscv/csr.c @@ -95,7 +95,7 @@ static RISCVException ctr(CPURISCVState *env, int csrno) } break; } - if (riscv_cpu_is_32bit(env)) { + if (riscv_cpu_mxl(env) =3D=3D MXL_RV32) { switch (csrno) { case CSR_CYCLEH: if (!get_field(env->hcounteren, COUNTEREN_CY) && @@ -130,7 +130,7 @@ static RISCVException ctr(CPURISCVState *env, int csrno) =20 static RISCVException ctr32(CPURISCVState *env, int csrno) { - if (!riscv_cpu_is_32bit(env)) { + if (riscv_cpu_mxl(env) !=3D MXL_RV32) { return RISCV_EXCP_ILLEGAL_INST; } =20 @@ -145,7 +145,7 @@ static RISCVException any(CPURISCVState *env, int csrno) =20 static RISCVException any32(CPURISCVState *env, int csrno) { - if (!riscv_cpu_is_32bit(env)) { + if (riscv_cpu_mxl(env) !=3D MXL_RV32) { return RISCV_EXCP_ILLEGAL_INST; } =20 @@ -180,7 +180,7 @@ static RISCVException hmode(CPURISCVState *env, int csr= no) =20 static RISCVException hmode32(CPURISCVState *env, int csrno) { - if (!riscv_cpu_is_32bit(env)) { + if (riscv_cpu_mxl(env) !=3D MXL_RV32) { if (riscv_cpu_virt_enabled(env)) { return RISCV_EXCP_ILLEGAL_INST; } else { @@ -486,7 +486,7 @@ static RISCVException read_mstatus(CPURISCVState *env, = int csrno, =20 static int validate_vm(CPURISCVState *env, target_ulong vm) { - if (riscv_cpu_is_32bit(env)) { + if (riscv_cpu_mxl(env) =3D=3D MXL_RV32) { return valid_vm_1_10_32[vm & 0xf]; } else { return valid_vm_1_10_64[vm & 0xf]; @@ -510,7 +510,7 @@ static RISCVException write_mstatus(CPURISCVState *env,= int csrno, MSTATUS_MPP | MSTATUS_MXR | MSTATUS_TVM | MSTATUS_TSR | MSTATUS_TW; =20 - if (!riscv_cpu_is_32bit(env)) { + if (riscv_cpu_mxl(env) !=3D MXL_RV32) { /* * RV32: MPV and GVA are not in mstatus. The current plan is to * add them to mstatush. For now, we just don't support it. @@ -522,7 +522,7 @@ static RISCVException write_mstatus(CPURISCVState *env,= int csrno, =20 dirty =3D ((mstatus & MSTATUS_FS) =3D=3D MSTATUS_FS) | ((mstatus & MSTATUS_XS) =3D=3D MSTATUS_XS); - if (riscv_cpu_is_32bit(env)) { + if (riscv_cpu_mxl(env) =3D=3D MXL_RV32) { mstatus =3D set_field(mstatus, MSTATUS32_SD, dirty); } else { mstatus =3D set_field(mstatus, MSTATUS64_SD, dirty); @@ -795,7 +795,7 @@ static RISCVException read_sstatus(CPURISCVState *env, = int csrno, { target_ulong mask =3D (sstatus_v1_10_mask); =20 - if (riscv_cpu_is_32bit(env)) { + if (riscv_cpu_mxl(env) =3D=3D MXL_RV32) { mask |=3D SSTATUS32_SD; } else { mask |=3D SSTATUS64_SD; @@ -1006,7 +1006,7 @@ static RISCVException write_satp(CPURISCVState *env, = int csrno, return RISCV_EXCP_NONE; } =20 - if (riscv_cpu_is_32bit(env)) { + if (riscv_cpu_mxl(env) =3D=3D MXL_RV32) { vm =3D validate_vm(env, get_field(val, SATP32_MODE)); mask =3D (val ^ env->satp) & (SATP32_MODE | SATP32_ASID | SATP32_P= PN); asid =3D (val ^ env->satp) & SATP32_ASID; @@ -1034,7 +1034,7 @@ static RISCVException read_hstatus(CPURISCVState *env= , int csrno, target_ulong *val) { *val =3D env->hstatus; - if (!riscv_cpu_is_32bit(env)) { + if (riscv_cpu_mxl(env) !=3D MXL_RV32) { /* We only support 64-bit VSXL */ *val =3D set_field(*val, HSTATUS_VSXL, 2); } @@ -1047,7 +1047,7 @@ static RISCVException write_hstatus(CPURISCVState *en= v, int csrno, target_ulong val) { env->hstatus =3D val; - if (!riscv_cpu_is_32bit(env) && get_field(val, HSTATUS_VSXL) !=3D 2) { + if (riscv_cpu_mxl(env) !=3D MXL_RV32 && get_field(val, HSTATUS_VSXL) != =3D 2) { qemu_log_mask(LOG_UNIMP, "QEMU does not support mixed HSXLEN optio= ns."); } if (get_field(val, HSTATUS_VSBE) !=3D 0) { @@ -1215,7 +1215,7 @@ static RISCVException write_htimedelta(CPURISCVState = *env, int csrno, return RISCV_EXCP_ILLEGAL_INST; } =20 - if (riscv_cpu_is_32bit(env)) { + if (riscv_cpu_mxl(env) =3D=3D MXL_RV32) { env->htimedelta =3D deposit64(env->htimedelta, 0, 32, (uint64_t)va= l); } else { env->htimedelta =3D val; diff --git a/target/riscv/gdbstub.c b/target/riscv/gdbstub.c index 5257df0217..23429179e2 100644 --- a/target/riscv/gdbstub.c +++ b/target/riscv/gdbstub.c @@ -161,7 +161,7 @@ static int riscv_gen_dynamic_csr_xml(CPUState *cs, int = base_reg) CPURISCVState *env =3D &cpu->env; GString *s =3D g_string_new(NULL); riscv_csr_predicate_fn predicate; - int bitsize =3D riscv_cpu_is_32bit(env) ? 32 : 64; + int bitsize =3D 16 << env->misa_mxl_max; int i; =20 g_string_printf(s, ""); diff --git a/target/riscv/monitor.c b/target/riscv/monitor.c index f7e6ea72b3..7efb4b62c1 100644 --- a/target/riscv/monitor.c +++ b/target/riscv/monitor.c @@ -150,7 +150,7 @@ static void mem_info_svxx(Monitor *mon, CPUArchState *e= nv) target_ulong last_size; int last_attr; =20 - if (riscv_cpu_is_32bit(env)) { + if (riscv_cpu_mxl(env) =3D=3D MXL_RV32) { base =3D (hwaddr)get_field(env->satp, SATP32_PPN) << PGSHIFT; vm =3D get_field(env->satp, SATP32_MODE); } else { @@ -220,7 +220,7 @@ void hmp_info_mem(Monitor *mon, const QDict *qdict) return; } =20 - if (riscv_cpu_is_32bit(env)) { + if (riscv_cpu_mxl(env) =3D=3D MXL_RV32) { if (!(env->satp & SATP32_MODE)) { monitor_printf(mon, "No translation or protection\n"); return; --=20 2.25.1 From nobody Sat Apr 20 07:25:49 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.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=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1634158703266772.6853155392524; Wed, 13 Oct 2021 13:58:23 -0700 (PDT) Received: from localhost ([::1]:41064 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1malKQ-0002Vs-A7 for importer@patchew.org; Wed, 13 Oct 2021 16:58:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35694) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1malDa-0007Wm-Ay for qemu-devel@nongnu.org; Wed, 13 Oct 2021 16:51:18 -0400 Received: from mail-pl1-x629.google.com ([2607:f8b0:4864:20::629]:34543) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1malDU-00086H-Gm for qemu-devel@nongnu.org; Wed, 13 Oct 2021 16:51:15 -0400 Received: by mail-pl1-x629.google.com with SMTP id g5so2665479plg.1 for ; Wed, 13 Oct 2021 13:51:12 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t71sm383043pgc.29.2021.10.13.13.51.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 Oct 2021 13:51:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=MqhE78TFfZKSqdDQIPLXWw2Iyqlc7crjN8RZq6dg1n8=; b=vUOjnY/pxMofKtV3bxDUHUb6P30gY0K+HLEp9m/T5yQ2zMAuwY30I5weKDoSM1g1T6 qrUyy0uU+AJQ5cNLxnyYVrLu7j9SZvHTxlOQzCy04RXJwAt4K3MVahsmev4jh6lejJXk nHCXahgz72ofVR+ffZw8bXqvgPXPMvGZdoKZfmKAn7OhaaWr+ebWu7xEO/1cnNZddQrE 1JKDhlx2Tha7LOc9j7UYAA9LXNhBLKW0WDF/RAGM/msij5YCoKv/avIQS2yvWAbcIZqG tWl2EWnTtYBNrG6uzEvBQ3KZ5A+edQdnO9cAFdMDBDsbxkcJNBjR8HNuFiHo8QN3fh+A cDBQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=MqhE78TFfZKSqdDQIPLXWw2Iyqlc7crjN8RZq6dg1n8=; b=niJ71PLEyp3mXzZ2dgPNLM7xoyG5wlpK25lTRr03gluw0iVGnOH8l+ga1wGONyCcy0 J6KzOCCiwHVpxlIIx+gBtJQXiyJ/BVzPV5ktb08CvUgCjR4Hf6yJZCxWun17mABf19K+ 3hSOqQukz8mdO7k+HkZ7bCbDxLbPWG5WhXJnBH3NZQ5XWkP/I+SEkwDMNVURS4lD2bAp nh2Y6br7ps036xKVjkiFuUN9rdrsVcHLc/MTj17WyGjbXcz/cxvTdq8PG6IQB5gvKhD1 r3+s2U+cLs/AhtTTy8SZ40eDewr1y6LbImTii0OrtGLkaea031BCIVQK8N3aWFp5gi1o q4VQ== X-Gm-Message-State: AOAM531Raeh9k6y2ZTPBgtRG/s32vnMRn6DVldjwkFj7KlnqlAltUuaS PbTp4HaLSon4Znmm2Tpr72GsvZwnkOXgHg== X-Google-Smtp-Source: ABdhPJwZNbIBLV3Eje5zerDIolE2xgVO/Q4+2NTXHBtn9IZALSVXDoUpELkNnaVK8JMOaOCQULAJsQ== X-Received: by 2002:a17:90b:2509:: with SMTP id ns9mr16120158pjb.47.1634158271182; Wed, 13 Oct 2021 13:51:11 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 05/13] target/riscv: Add MXL/SXL/UXL to TB_FLAGS Date: Wed, 13 Oct 2021 13:50:56 -0700 Message-Id: <20211013205104.1031679-6-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211013205104.1031679-1-richard.henderson@linaro.org> References: <20211013205104.1031679-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=2607:f8b0:4864:20::629; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x629.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: alistair.francis@wdc.com, frederic.petrot@univ-grenoble-alpes.fr, qemu-riscv@nongnu.org, zhiwei_liu@c-sky.com, fabien.portas@grenoble-inp.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1634158705322100002 Content-Type: text/plain; charset="utf-8" Begin adding support for switching XLEN at runtime. Extract the effective XLEN from MISA and MSTATUS and store for use during translation. Signed-off-by: Richard Henderson Reviewed-by: Alistair Francis --- v2: Force SXL and UXL to valid values. --- target/riscv/cpu.h | 2 ++ target/riscv/cpu.c | 8 ++++++++ target/riscv/cpu_helper.c | 33 +++++++++++++++++++++++++++++++++ target/riscv/csr.c | 3 +++ target/riscv/translate.c | 2 +- 5 files changed, 47 insertions(+), 1 deletion(-) diff --git a/target/riscv/cpu.h b/target/riscv/cpu.h index 87248b562a..445ba5b395 100644 --- a/target/riscv/cpu.h +++ b/target/riscv/cpu.h @@ -395,6 +395,8 @@ FIELD(TB_FLAGS, VILL, 8, 1) /* Is a Hypervisor instruction load/store allowed? */ FIELD(TB_FLAGS, HLSX, 9, 1) FIELD(TB_FLAGS, MSTATUS_HS_FS, 10, 2) +/* The combination of MXL/SXL/UXL that applies to the current cpu mode. */ +FIELD(TB_FLAGS, XL, 12, 2) =20 #ifdef CONFIG_RISCV32 #define riscv_cpu_mxl(env) MXL_RV32 diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c index 1857670a69..840edd66f8 100644 --- a/target/riscv/cpu.c +++ b/target/riscv/cpu.c @@ -355,6 +355,14 @@ static void riscv_cpu_reset(DeviceState *dev) env->misa_mxl =3D env->misa_mxl_max; env->priv =3D PRV_M; env->mstatus &=3D ~(MSTATUS_MIE | MSTATUS_MPRV); + if (env->misa_mxl > MXL_RV32) { + /* + * The reset status of SXL/UXL is officially undefined, + * but invalid settings would result in a tcg assert. + */ + env->mstatus =3D set_field(env->mstatus, MSTATUS64_SXL, env->misa_= mxl); + env->mstatus =3D set_field(env->mstatus, MSTATUS64_UXL, env->misa_= mxl); + } env->mcause =3D 0; env->pc =3D env->resetvec; env->two_stage_lookup =3D false; diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c index 403f54171d..429afd1f48 100644 --- a/target/riscv/cpu_helper.c +++ b/target/riscv/cpu_helper.c @@ -35,6 +35,37 @@ int riscv_cpu_mmu_index(CPURISCVState *env, bool ifetch) #endif } =20 +static RISCVMXL cpu_get_xl(CPURISCVState *env) +{ +#if defined(TARGET_RISCV32) + return MXL_RV32; +#elif defined(CONFIG_USER_ONLY) + return MXL_RV64; +#else + RISCVMXL xl =3D riscv_cpu_mxl(env); + + /* + * When emulating a 32-bit-only cpu, use RV32. + * When emulating a 64-bit cpu, and MXL has been reduced to RV32, + * MSTATUSH doesn't have UXL/SXL, therefore XLEN cannot be widened + * back to RV64 for lower privs. + */ + if (xl !=3D MXL_RV32) { + switch (env->priv) { + case PRV_M: + break; + case PRV_U: + xl =3D get_field(env->mstatus, MSTATUS64_UXL); + break; + default: /* PRV_S | PRV_H */ + xl =3D get_field(env->mstatus, MSTATUS64_SXL); + break; + } + } + return xl; +#endif +} + void cpu_get_tb_cpu_state(CPURISCVState *env, target_ulong *pc, target_ulong *cs_base, uint32_t *pflags) { @@ -78,6 +109,8 @@ void cpu_get_tb_cpu_state(CPURISCVState *env, target_ulo= ng *pc, } #endif =20 + flags =3D FIELD_DP32(flags, TB_FLAGS, XL, cpu_get_xl(env)); + *pflags =3D flags; } =20 diff --git a/target/riscv/csr.c b/target/riscv/csr.c index 9c0753bc8b..c4a479ddd2 100644 --- a/target/riscv/csr.c +++ b/target/riscv/csr.c @@ -526,6 +526,9 @@ static RISCVException write_mstatus(CPURISCVState *env,= int csrno, mstatus =3D set_field(mstatus, MSTATUS32_SD, dirty); } else { mstatus =3D set_field(mstatus, MSTATUS64_SD, dirty); + /* SXL and UXL fields are for now read only */ + mstatus =3D set_field(mstatus, MSTATUS64_SXL, MXL_RV64); + mstatus =3D set_field(mstatus, MSTATUS64_UXL, MXL_RV64); } env->mstatus =3D mstatus; =20 diff --git a/target/riscv/translate.c b/target/riscv/translate.c index 422f8ab8d0..7e7bb67d15 100644 --- a/target/riscv/translate.c +++ b/target/riscv/translate.c @@ -539,7 +539,6 @@ static void riscv_tr_init_disas_context(DisasContextBas= e *dcbase, CPUState *cs) #else ctx->virt_enabled =3D false; #endif - ctx->xl =3D env->misa_mxl; ctx->misa_ext =3D env->misa_ext; ctx->frm =3D -1; /* unknown rounding mode */ ctx->ext_ifencei =3D cpu->cfg.ext_ifencei; @@ -551,6 +550,7 @@ static void riscv_tr_init_disas_context(DisasContextBas= e *dcbase, CPUState *cs) ctx->lmul =3D FIELD_EX32(tb_flags, TB_FLAGS, LMUL); ctx->mlen =3D 1 << (ctx->sew + 3 - ctx->lmul); ctx->vl_eq_vlmax =3D FIELD_EX32(tb_flags, TB_FLAGS, VL_EQ_VLMAX); + ctx->xl =3D FIELD_EX32(tb_flags, TB_FLAGS, XL); ctx->cs =3D cs; ctx->w =3D false; ctx->ntemp =3D 0; --=20 2.25.1 From nobody Sat Apr 20 07:25:49 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.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=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1634158699733256.99735542581163; Wed, 13 Oct 2021 13:58:19 -0700 (PDT) Received: from localhost ([::1]:40708 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1malKM-0002HQ-IU for importer@patchew.org; Wed, 13 Oct 2021 16:58:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35702) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1malDa-0007XJ-H2 for qemu-devel@nongnu.org; Wed, 13 Oct 2021 16:51:18 -0400 Received: from mail-pf1-x431.google.com ([2607:f8b0:4864:20::431]:37710) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1malDV-00086y-Ir for qemu-devel@nongnu.org; Wed, 13 Oct 2021 16:51:17 -0400 Received: by mail-pf1-x431.google.com with SMTP id q19so3559347pfl.4 for ; Wed, 13 Oct 2021 13:51:13 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t71sm383043pgc.29.2021.10.13.13.51.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 Oct 2021 13:51:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=HrXgWQxe5rXDfowZg2OUbllL3iUHpHaeDyMxH/BRtUg=; b=D+RKIJSrxfJNHpcJGNzGycK6QYRa2BPNPGcZASr0Mla9czcCQPwiLvZkJ5Pm8bempd AdxdQtZrD+QFLcWmBPcMbS0WT9qFd3WekablEFYreDsdePz0ChK9v/8Kk8wHXkfZ2P1s Riordpm/8amCr94KJMuJFD5GdWdQga7xSqF+sKL3Z/7nAQsD9WYZSxBwUdOgf8sCb1a9 HsU9FlXSGLag5DfSy3tUC3TPXwnEynKHXV7Iwaf1slawled1eZxfJNoKqGSC6h52wGHC CmUgJMyqWiD5bXIMBqbcoa7x/8/LE0DX9wlEgxfRr+h3iu/F27yUdyYm4/IM7On2pDhJ cDJQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=HrXgWQxe5rXDfowZg2OUbllL3iUHpHaeDyMxH/BRtUg=; b=4UDDTrvhwSGtrPxvzQl2H8yMpEAlZMTGUnrfiALkH2KT2CjLkf41qjO3t2B88Byh+z 5YHxtmp/XrBD5jFvGGNtkj4N2Qc7sFI3KCpBUFw1H6S9DAh2ghoQrvhk24PjbkJbLCT8 hcJOMg2dMm9v6hwvW87HcrZHEj3Plni0+XbzQ+gaJIP+GEw9zUpwQjIk9yczY57qj5jE L/soanS+CE4N/dD2ESwTCIe9KqQ3FaYDUHzhnsyjm6DaR2qTPEauq3CyHf+CJ3XAmKdF d8DBp+94r+HHegMSJKK+g/FHEaqxKiE1b1ic0KzMP7LYm5TKYd62V+ze9xAJ34+EyLZA hn4w== X-Gm-Message-State: AOAM531UqhQcIepcFb2NGzFz/LykvQIqQ1XOpsgvXt6XSOpzGcFOA4HV f11eEWX5AvL22U4U2erPnPYCW5k9AR0= X-Google-Smtp-Source: ABdhPJxh0gc84dzAMCgttITqPpWRTfQieRfX3fWwJ6mQjXwixLmW3uE9hzJbdaId3iY0Jcpl9eShRg== X-Received: by 2002:a62:e40a:0:b0:44d:a86:43ce with SMTP id r10-20020a62e40a000000b0044d0a8643cemr1533646pfh.69.1634158272192; Wed, 13 Oct 2021 13:51:12 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 06/13] target/riscv: Use REQUIRE_64BIT in amo_check64 Date: Wed, 13 Oct 2021 13:50:57 -0700 Message-Id: <20211013205104.1031679-7-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211013205104.1031679-1-richard.henderson@linaro.org> References: <20211013205104.1031679-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=2607:f8b0:4864:20::431; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x431.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: alistair.francis@wdc.com, frederic.petrot@univ-grenoble-alpes.fr, qemu-riscv@nongnu.org, zhiwei_liu@c-sky.com, fabien.portas@grenoble-inp.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1634158701169100001 Content-Type: text/plain; charset="utf-8" Use the same REQUIRE_64BIT check that we use elsewhere, rather than open-coding the use of is_32bit. Signed-off-by: Richard Henderson Reviewed-by: Alistair Francis Reviewed-by: LIU Zhiwei --- target/riscv/insn_trans/trans_rvv.c.inc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/target/riscv/insn_trans/trans_rvv.c.inc b/target/riscv/insn_tr= ans/trans_rvv.c.inc index fa451938f1..bbc5c93ef1 100644 --- a/target/riscv/insn_trans/trans_rvv.c.inc +++ b/target/riscv/insn_trans/trans_rvv.c.inc @@ -743,7 +743,8 @@ static bool amo_check(DisasContext *s, arg_rwdvm* a) =20 static bool amo_check64(DisasContext *s, arg_rwdvm* a) { - return !is_32bit(s) && amo_check(s, a); + REQUIRE_64BIT(s); + return amo_check(s, a); } =20 GEN_VEXT_TRANS(vamoswapw_v, 0, rwdvm, amo_op, amo_check) --=20 2.25.1 From nobody Sat Apr 20 07:25:49 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.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=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1634158569369146.35217881792494; Wed, 13 Oct 2021 13:56:09 -0700 (PDT) Received: from localhost ([::1]:34666 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1malIG-0006Vc-B6 for importer@patchew.org; Wed, 13 Oct 2021 16:56:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35842) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1malDk-0007eR-UU for qemu-devel@nongnu.org; Wed, 13 Oct 2021 16:51:34 -0400 Received: from mail-pg1-x52d.google.com ([2607:f8b0:4864:20::52d]:36471) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1malDX-00088h-2N for qemu-devel@nongnu.org; Wed, 13 Oct 2021 16:51:25 -0400 Received: by mail-pg1-x52d.google.com with SMTP id 75so3495914pga.3 for ; Wed, 13 Oct 2021 13:51:14 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t71sm383043pgc.29.2021.10.13.13.51.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 Oct 2021 13:51:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=D7b+ydnd4zMrVyDCywxRov6Sf650NgZr4E9SJVFsXBA=; b=dXbDW0NIE255Ziv7RFBPFNjsyhlhjaaNb0LuR4itErhnaWOUQEzx8iHH1oQ2CMBOHH afJQRy5B4oSw+R9yPFe6jl1LAzEzw713gMt/RRR7J9wWeyKBQE9ohEAih3t//CAMps74 tkruXm3kb/j+5sGGXgXcWk1qn71LXlvmqdJ59HyhpHqjaTSAp4OIEXEIDMYVHd6At1k2 ps4MF9B9i9IKSfhGxyo43qgYC3QVxkleYfSV5tvUrjck01hI33DUUN+vAZQ9nIl7R6uQ lFdmbkSi5eju6vgrJuDXU2bq8G5kgSV8ghA20OBaS1brzN2nSGms6YvJnG9WJAJenW1v 2LcQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=D7b+ydnd4zMrVyDCywxRov6Sf650NgZr4E9SJVFsXBA=; b=RffmSZ/jtUYmq9ANlheGopTfhoxyNfJUdBmX7Suxc5FIaXsdzCx8musWzRu9QtSOoN FV7IxIcLH8YbuV+Af619NoWQWfbNytY0FWC5S78kvlTv17m3aXFQwsEJheDLfIp0oCU1 4JSrc8VP0x2wEt4ci8jaz+Vyzin3WBTAVaGpJStYrmCfW7UjkBz/ssTFPKG5lFrvFhxJ qXUXGgkeOQ7bkAdew8Pcuur/c8EWxPkspqFzt1X8Fo7O5eRGT15Ak4D7aIaLnVis7otJ qdJTZhxO5CgECVfQyRbxgVN5xvzH8B86/HitFQXJr950wDNa6uhhMqAglXJlaxfpBKkf 7jiA== X-Gm-Message-State: AOAM530KXmBYZmHHsYwd2cpR3F8k5gTWSiYLFmEL190IhqtZNnkaqfMe 9uMdyHHeNNvmpb3ItTeOWbPibFsfcPk= X-Google-Smtp-Source: ABdhPJztp8wFqQ6j+yBm3WuhCo1sVbzc9VEpQ9sJ9fHAETBXvixS3qyA9/66JS3p7TYtXSTl4j5h3A== X-Received: by 2002:a63:9542:: with SMTP id t2mr1128771pgn.428.1634158273387; Wed, 13 Oct 2021 13:51:13 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 07/13] target/riscv: Properly check SEW in amo_op Date: Wed, 13 Oct 2021 13:50:58 -0700 Message-Id: <20211013205104.1031679-8-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211013205104.1031679-1-richard.henderson@linaro.org> References: <20211013205104.1031679-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=2607:f8b0:4864:20::52d; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52d.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action 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: alistair.francis@wdc.com, frederic.petrot@univ-grenoble-alpes.fr, qemu-riscv@nongnu.org, zhiwei_liu@c-sky.com, fabien.portas@grenoble-inp.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1634158570436100005 Content-Type: text/plain; charset="utf-8" We're currently assuming SEW <=3D 3, and the "else" from the SEW =3D=3D 3 must be less. Use a switch and explicitly bound both SEW and SEQ for all cases. Signed-off-by: Richard Henderson Reviewed-by: Alistair Francis Reviewed-by: LIU Zhiwei --- target/riscv/insn_trans/trans_rvv.c.inc | 26 +++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/target/riscv/insn_trans/trans_rvv.c.inc b/target/riscv/insn_tr= ans/trans_rvv.c.inc index bbc5c93ef1..91fca4a2d1 100644 --- a/target/riscv/insn_trans/trans_rvv.c.inc +++ b/target/riscv/insn_trans/trans_rvv.c.inc @@ -704,18 +704,20 @@ static bool amo_op(DisasContext *s, arg_rwdvm *a, uin= t8_t seq) gen_helper_exit_atomic(cpu_env); s->base.is_jmp =3D DISAS_NORETURN; return true; - } else { - if (s->sew =3D=3D 3) { - if (!is_32bit(s)) { - fn =3D fnsd[seq]; - } else { - /* Check done in amo_check(). */ - g_assert_not_reached(); - } - } else { - assert(seq < ARRAY_SIZE(fnsw)); - fn =3D fnsw[seq]; - } + } + + switch (s->sew) { + case 0 ... 2: + assert(seq < ARRAY_SIZE(fnsw)); + fn =3D fnsw[seq]; + break; + case 3: + /* XLEN check done in amo_check(). */ + assert(seq < ARRAY_SIZE(fnsd)); + fn =3D fnsd[seq]; + break; + default: + g_assert_not_reached(); } =20 data =3D FIELD_DP32(data, VDATA, MLEN, s->mlen); --=20 2.25.1 From nobody Sat Apr 20 07:25:49 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.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=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1634158828586849.282598015222; Wed, 13 Oct 2021 14:00:28 -0700 (PDT) Received: from localhost ([::1]:46874 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1malMR-0006LP-FO for importer@patchew.org; Wed, 13 Oct 2021 17:00:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35798) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1malDh-0007cY-56 for qemu-devel@nongnu.org; Wed, 13 Oct 2021 16:51:25 -0400 Received: from mail-pl1-x629.google.com ([2607:f8b0:4864:20::629]:33740) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1malDZ-00089n-38 for qemu-devel@nongnu.org; Wed, 13 Oct 2021 16:51:19 -0400 Received: by mail-pl1-x629.google.com with SMTP id y4so2686255plb.0 for ; Wed, 13 Oct 2021 13:51:15 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t71sm383043pgc.29.2021.10.13.13.51.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 Oct 2021 13:51:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=H87ppfQkVyn08RbjkKfsggea9i4sKXYDOxyW8HmfWE8=; b=Gz6YhoNNp+oMZOFD2hQPsHJx7jxxKYWbE/7zKZe8Y4BjimllvOKwsWkVsgaBUZG2wA UskH1uDWSJHosUjEegPXLiZ83E+1R+5ThjakcVbwqr7/TEe1obLLyN2ExIg+0XwwIUop ElqISCAtN8xyQ5OVpUaYftvWgBqYYE9KDnC1CCJCEcwehSoj76p5hHXoI+aBK5pWfCtq 92Hg5N4MzNEl4rzVHZMvgh4rP4i2cvXL4esP4mFiipd77eP8sOtRdHGTGT5q13PWiki8 Sq1uTHkrnCTc4Gyw0a1OTSYW52U8WPPdoARZAdb234bG2v3oZ9P1Xwf+4cOu8VxBX2yf Kg5A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=H87ppfQkVyn08RbjkKfsggea9i4sKXYDOxyW8HmfWE8=; b=EYO5i3X6pXZCGH9qhPr/HF2mC0uO2uou5Y2zU6Ck86eRt3rprxI5FwIACd5TbYtU5l MHF6Edm/wnKUoZC/O2OD+T4FdbKviSkoMLJo1XmgUyn4ZjANhDdUHbfYWrCcVgUGlpTb Jhkqqtg9O7JXubaOFB7wAt40iTRps0n7UyIgYPvxAQGtxqPKmQ9cKRgKzwBgTq2h4XBQ SFVAUXelItKOKXxdd8ycrHy26N53YZPQ+ah1lnDDlI5O3p6Ydp/3AUmnf9ZBr9C3LO2f YrYGlu+yId5wbaK3FsEDMeNIlVYZdbOgaxQBJVebgWA6l9cSIivGavLMAXoizpPOAVW0 C8Lg== X-Gm-Message-State: AOAM530YG6f6FvFfJ+nF0QzWp34RXNK8OT1Y673c9NmE84R4xEDb/tCd fRjcccbM1x6GtLk7XpazI669ezDkG8dUYQ== X-Google-Smtp-Source: ABdhPJzyftLiqWABagjtNd/OgEXl2PS5JctbBlDiNugr19rfJMF/KgyCNr5f8hyuZ+qOlf5/ZQ/Qyg== X-Received: by 2002:a17:90b:4b48:: with SMTP id mi8mr1692920pjb.26.1634158274424; Wed, 13 Oct 2021 13:51:14 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 08/13] target/riscv: Replace is_32bit with get_xl/get_xlen Date: Wed, 13 Oct 2021 13:50:59 -0700 Message-Id: <20211013205104.1031679-9-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211013205104.1031679-1-richard.henderson@linaro.org> References: <20211013205104.1031679-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=2607:f8b0:4864:20::629; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x629.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: alistair.francis@wdc.com, frederic.petrot@univ-grenoble-alpes.fr, qemu-riscv@nongnu.org, zhiwei_liu@c-sky.com, fabien.portas@grenoble-inp.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1634158829936100001 Content-Type: text/plain; charset="utf-8" In preparation for RV128, replace a simple predicate with a more versatile test. Signed-off-by: Richard Henderson Reviewed-by: Alistair Francis Reviewed-by: LIU Zhiwei --- target/riscv/translate.c | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) diff --git a/target/riscv/translate.c b/target/riscv/translate.c index 7e7bb67d15..5724a62bb0 100644 --- a/target/riscv/translate.c +++ b/target/riscv/translate.c @@ -91,16 +91,18 @@ static inline bool has_ext(DisasContext *ctx, uint32_t = ext) } =20 #ifdef TARGET_RISCV32 -# define is_32bit(ctx) true +#define get_xl(ctx) MXL_RV32 #elif defined(CONFIG_USER_ONLY) -# define is_32bit(ctx) false +#define get_xl(ctx) MXL_RV64 #else -static inline bool is_32bit(DisasContext *ctx) -{ - return ctx->xl =3D=3D MXL_RV32; -} +#define get_xl(ctx) ((ctx)->xl) #endif =20 +static inline int get_xlen(DisasContext *ctx) +{ + return 16 << get_xl(ctx); +} + /* The word size for this operation. */ static inline int oper_len(DisasContext *ctx) { @@ -282,7 +284,7 @@ static void gen_jal(DisasContext *ctx, int rd, target_u= long imm) static void mark_fs_dirty(DisasContext *ctx) { TCGv tmp; - target_ulong sd =3D is_32bit(ctx) ? MSTATUS32_SD : MSTATUS64_SD; + target_ulong sd =3D get_xl(ctx) =3D=3D MXL_RV32 ? MSTATUS32_SD : MSTAT= US64_SD; =20 if (ctx->mstatus_fs !=3D MSTATUS_FS) { /* Remember the state change for the rest of the TB. */ @@ -341,16 +343,16 @@ EX_SH(12) } \ } while (0) =20 -#define REQUIRE_32BIT(ctx) do { \ - if (!is_32bit(ctx)) { \ - return false; \ - } \ +#define REQUIRE_32BIT(ctx) do { \ + if (get_xl(ctx) !=3D MXL_RV32) { \ + return false; \ + } \ } while (0) =20 -#define REQUIRE_64BIT(ctx) do { \ - if (is_32bit(ctx)) { \ - return false; \ - } \ +#define REQUIRE_64BIT(ctx) do { \ + if (get_xl(ctx) < MXL_RV64) { \ + return false; \ + } \ } while (0) =20 static int ex_rvc_register(DisasContext *ctx, int reg) --=20 2.25.1 From nobody Sat Apr 20 07:25:49 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.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=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1634159010796109.31242027601013; Wed, 13 Oct 2021 14:03:30 -0700 (PDT) Received: from localhost ([::1]:51436 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1malPN-00016m-I0 for importer@patchew.org; Wed, 13 Oct 2021 17:03:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35818) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1malDi-0007ds-E0 for qemu-devel@nongnu.org; Wed, 13 Oct 2021 16:51:27 -0400 Received: from mail-pg1-x532.google.com ([2607:f8b0:4864:20::532]:36476) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1malDZ-0008AU-V7 for qemu-devel@nongnu.org; Wed, 13 Oct 2021 16:51:22 -0400 Received: by mail-pg1-x532.google.com with SMTP id 75so3495977pga.3 for ; Wed, 13 Oct 2021 13:51:16 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t71sm383043pgc.29.2021.10.13.13.51.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 Oct 2021 13:51:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=5BmUKj5ZFDfEAmKDg/dVXECTi9BNeky+S0S3T1g9RSg=; b=juH1Z5qsnceT9siUWgFUSnfR0VV6n92dpM2ofAB1buXemzwWhf+K9vA1z/kM3I7Yqk +cXRJundO2PMQgTQQZqwBK41xU2Y9GKuZ92QhbHU+xq3/y+web3efa6ShuXzeyM53tQf DyTonAL7eKcy3KvbIlqYpNr+C2T+GWCk2vw/qY1HUeC0DON8zyJCQBYOOLPJ3tmBUc8s Wxuf3K0mEWdUERec6444adA6uL5SbETcD/UgOuO4K9N2mldq/Q//nbSn9o3Dagdo0SQk wDOmdmaBvBoZ3FED2zdwS+MD2zHEdr95Cv1Uz4A4Da18whEJqoAfEXz2xHFIr3X1FKsY 32tQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=5BmUKj5ZFDfEAmKDg/dVXECTi9BNeky+S0S3T1g9RSg=; b=J5AdDCztnuBLsyNP+W8WmHNBBq0PR6SG3Xf3u1JYZ0zScY8caRojFIXXPZI8leZn0e swSaNEUJe/Hl/n03NnrilIzYDDN1tGIOssLBjPlVWhSw9viQwsOee5nP2UoqSCJ/pY2f pTNRsoccrwWXxMcKljHxhK8x6sBjgBM+jXpwzy0Qkb58FpmZNfQ1n66LWOTzhc87FjIG KDhjXhHLfcYbtJTZpm08Hd5RvclKzNznKvPWpseUsSJ3McAFHq3ImZWosqUCudY8z5cn o9YtU45ys4gUwfNKcX2cRA3FwVDbfLNGSUlGaa8Zi8qfSYWdivUazg/0yZCAUF3ZKls3 2VXw== X-Gm-Message-State: AOAM533RuYm1EFurrLPG3q3QyiDQjdklZdlVBZ5PaQjFwJrdcbvm0e1s n0HWvTD7D8b5K1g+sfqWMXqxXoSmqm3z3g== X-Google-Smtp-Source: ABdhPJzzLRqHFXBfxrKIz8XFqBrXFHenpH7YPr6eHVlGXtBTaA9YD8W7pzq5GYh5CUrV/bYPCuZFIA== X-Received: by 2002:a63:e613:: with SMTP id g19mr1196812pgh.12.1634158275380; Wed, 13 Oct 2021 13:51:15 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 09/13] target/riscv: Replace DisasContext.w with DisasContext.ol Date: Wed, 13 Oct 2021 13:51:00 -0700 Message-Id: <20211013205104.1031679-10-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211013205104.1031679-1-richard.henderson@linaro.org> References: <20211013205104.1031679-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=2607:f8b0:4864:20::532; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x532.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: alistair.francis@wdc.com, frederic.petrot@univ-grenoble-alpes.fr, qemu-riscv@nongnu.org, zhiwei_liu@c-sky.com, fabien.portas@grenoble-inp.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1634159012704100001 Content-Type: text/plain; charset="utf-8" In preparation for RV128, consider more than just "w" for operand size modification. This will be used for the "d" insns from RV128 as well. Rename oper_len to get_olen to better match get_xlen. Signed-off-by: Richard Henderson Reviewed-by: Alistair Francis --- target/riscv/translate.c | 71 ++++++++++++++++--------- target/riscv/insn_trans/trans_rvb.c.inc | 8 +-- target/riscv/insn_trans/trans_rvi.c.inc | 18 +++---- target/riscv/insn_trans/trans_rvm.c.inc | 10 ++-- 4 files changed, 63 insertions(+), 44 deletions(-) diff --git a/target/riscv/translate.c b/target/riscv/translate.c index 5724a62bb0..6ab5c6aa58 100644 --- a/target/riscv/translate.c +++ b/target/riscv/translate.c @@ -67,7 +67,7 @@ typedef struct DisasContext { to any system register, which includes CSR_FRM, so we do not have to reset this known value. */ int frm; - bool w; + RISCVMXL ol; bool virt_enabled; bool ext_ifencei; bool hlsx; @@ -103,12 +103,17 @@ static inline int get_xlen(DisasContext *ctx) return 16 << get_xl(ctx); } =20 -/* The word size for this operation. */ -static inline int oper_len(DisasContext *ctx) -{ - return ctx->w ? 32 : TARGET_LONG_BITS; -} +/* The operation length, as opposed to the xlen. */ +#ifdef TARGET_RISCV32 +#define get_ol(ctx) MXL_RV32 +#else +#define get_ol(ctx) ((ctx)->ol) +#endif =20 +static inline int get_olen(DisasContext *ctx) +{ + return 16 << get_ol(ctx); +} =20 /* * RISC-V requires NaN-boxing of narrower width floating point values. @@ -221,24 +226,34 @@ static TCGv get_gpr(DisasContext *ctx, int reg_num, D= isasExtend ext) return ctx->zero; } =20 - switch (ctx->w ? ext : EXT_NONE) { - case EXT_NONE: - return cpu_gpr[reg_num]; - case EXT_SIGN: - t =3D temp_new(ctx); - tcg_gen_ext32s_tl(t, cpu_gpr[reg_num]); - return t; - case EXT_ZERO: - t =3D temp_new(ctx); - tcg_gen_ext32u_tl(t, cpu_gpr[reg_num]); - return t; + switch (get_ol(ctx)) { + case MXL_RV32: + switch (ext) { + case EXT_NONE: + break; + case EXT_SIGN: + t =3D temp_new(ctx); + tcg_gen_ext32s_tl(t, cpu_gpr[reg_num]); + return t; + case EXT_ZERO: + t =3D temp_new(ctx); + tcg_gen_ext32u_tl(t, cpu_gpr[reg_num]); + return t; + default: + g_assert_not_reached(); + } + break; + case MXL_RV64: + break; + default: + g_assert_not_reached(); } - g_assert_not_reached(); + return cpu_gpr[reg_num]; } =20 static TCGv dest_gpr(DisasContext *ctx, int reg_num) { - if (reg_num =3D=3D 0 || ctx->w) { + if (reg_num =3D=3D 0 || get_olen(ctx) < TARGET_LONG_BITS) { return temp_new(ctx); } return cpu_gpr[reg_num]; @@ -247,10 +262,15 @@ static TCGv dest_gpr(DisasContext *ctx, int reg_num) static void gen_set_gpr(DisasContext *ctx, int reg_num, TCGv t) { if (reg_num !=3D 0) { - if (ctx->w) { + switch (get_ol(ctx)) { + case MXL_RV32: tcg_gen_ext32s_tl(cpu_gpr[reg_num], t); - } else { + break; + case MXL_RV64: tcg_gen_mov_tl(cpu_gpr[reg_num], t); + break; + default: + g_assert_not_reached(); } } } @@ -411,7 +431,7 @@ static bool gen_shift_imm_fn(DisasContext *ctx, arg_shi= ft *a, DisasExtend ext, void (*func)(TCGv, TCGv, target_long)) { TCGv dest, src1; - int max_len =3D oper_len(ctx); + int max_len =3D get_olen(ctx); =20 if (a->shamt >=3D max_len) { return false; @@ -430,7 +450,7 @@ static bool gen_shift_imm_tl(DisasContext *ctx, arg_shi= ft *a, DisasExtend ext, void (*func)(TCGv, TCGv, TCGv)) { TCGv dest, src1, src2; - int max_len =3D oper_len(ctx); + int max_len =3D get_olen(ctx); =20 if (a->shamt >=3D max_len) { return false; @@ -454,7 +474,7 @@ static bool gen_shift(DisasContext *ctx, arg_r *a, Disa= sExtend ext, TCGv src2 =3D get_gpr(ctx, a->rs2, EXT_NONE); TCGv ext2 =3D tcg_temp_new(); =20 - tcg_gen_andi_tl(ext2, src2, oper_len(ctx) - 1); + tcg_gen_andi_tl(ext2, src2, get_olen(ctx) - 1); func(dest, src1, ext2); =20 gen_set_gpr(ctx, a->rd, dest); @@ -554,7 +574,6 @@ static void riscv_tr_init_disas_context(DisasContextBas= e *dcbase, CPUState *cs) ctx->vl_eq_vlmax =3D FIELD_EX32(tb_flags, TB_FLAGS, VL_EQ_VLMAX); ctx->xl =3D FIELD_EX32(tb_flags, TB_FLAGS, XL); ctx->cs =3D cs; - ctx->w =3D false; ctx->ntemp =3D 0; memset(ctx->temp, 0, sizeof(ctx->temp)); =20 @@ -578,9 +597,9 @@ static void riscv_tr_translate_insn(DisasContextBase *d= cbase, CPUState *cpu) CPURISCVState *env =3D cpu->env_ptr; uint16_t opcode16 =3D translator_lduw(env, &ctx->base, ctx->base.pc_ne= xt); =20 + ctx->ol =3D ctx->xl; decode_opc(env, ctx, opcode16); ctx->base.pc_next =3D ctx->pc_succ_insn; - ctx->w =3D false; =20 for (int i =3D ctx->ntemp - 1; i >=3D 0; --i) { tcg_temp_free(ctx->temp[i]); diff --git a/target/riscv/insn_trans/trans_rvb.c.inc b/target/riscv/insn_tr= ans/trans_rvb.c.inc index 185c3e9a60..66dd51de49 100644 --- a/target/riscv/insn_trans/trans_rvb.c.inc +++ b/target/riscv/insn_trans/trans_rvb.c.inc @@ -341,7 +341,7 @@ static bool trans_cpopw(DisasContext *ctx, arg_cpopw *a) { REQUIRE_64BIT(ctx); REQUIRE_ZBB(ctx); - ctx->w =3D true; + ctx->ol =3D MXL_RV32; return gen_unary(ctx, a, EXT_ZERO, tcg_gen_ctpop_tl); } =20 @@ -367,7 +367,7 @@ static bool trans_rorw(DisasContext *ctx, arg_rorw *a) { REQUIRE_64BIT(ctx); REQUIRE_ZBB(ctx); - ctx->w =3D true; + ctx->ol =3D MXL_RV32; return gen_shift(ctx, a, EXT_NONE, gen_rorw); } =20 @@ -375,7 +375,7 @@ static bool trans_roriw(DisasContext *ctx, arg_roriw *a) { REQUIRE_64BIT(ctx); REQUIRE_ZBB(ctx); - ctx->w =3D true; + ctx->ol =3D MXL_RV32; return gen_shift_imm_tl(ctx, a, EXT_NONE, gen_rorw); } =20 @@ -401,7 +401,7 @@ static bool trans_rolw(DisasContext *ctx, arg_rolw *a) { REQUIRE_64BIT(ctx); REQUIRE_ZBB(ctx); - ctx->w =3D true; + ctx->ol =3D MXL_RV32; return gen_shift(ctx, a, EXT_NONE, gen_rolw); } =20 diff --git a/target/riscv/insn_trans/trans_rvi.c.inc b/target/riscv/insn_tr= ans/trans_rvi.c.inc index 920ae0edb3..c0a46d823f 100644 --- a/target/riscv/insn_trans/trans_rvi.c.inc +++ b/target/riscv/insn_trans/trans_rvi.c.inc @@ -333,14 +333,14 @@ static bool trans_and(DisasContext *ctx, arg_and *a) static bool trans_addiw(DisasContext *ctx, arg_addiw *a) { REQUIRE_64BIT(ctx); - ctx->w =3D true; + ctx->ol =3D MXL_RV32; return gen_arith_imm_fn(ctx, a, EXT_NONE, tcg_gen_addi_tl); } =20 static bool trans_slliw(DisasContext *ctx, arg_slliw *a) { REQUIRE_64BIT(ctx); - ctx->w =3D true; + ctx->ol =3D MXL_RV32; return gen_shift_imm_fn(ctx, a, EXT_NONE, tcg_gen_shli_tl); } =20 @@ -352,7 +352,7 @@ static void gen_srliw(TCGv dst, TCGv src, target_long s= hamt) static bool trans_srliw(DisasContext *ctx, arg_srliw *a) { REQUIRE_64BIT(ctx); - ctx->w =3D true; + ctx->ol =3D MXL_RV32; return gen_shift_imm_fn(ctx, a, EXT_NONE, gen_srliw); } =20 @@ -364,42 +364,42 @@ static void gen_sraiw(TCGv dst, TCGv src, target_long= shamt) static bool trans_sraiw(DisasContext *ctx, arg_sraiw *a) { REQUIRE_64BIT(ctx); - ctx->w =3D true; + ctx->ol =3D MXL_RV32; return gen_shift_imm_fn(ctx, a, EXT_NONE, gen_sraiw); } =20 static bool trans_addw(DisasContext *ctx, arg_addw *a) { REQUIRE_64BIT(ctx); - ctx->w =3D true; + ctx->ol =3D MXL_RV32; return gen_arith(ctx, a, EXT_NONE, tcg_gen_add_tl); } =20 static bool trans_subw(DisasContext *ctx, arg_subw *a) { REQUIRE_64BIT(ctx); - ctx->w =3D true; + ctx->ol =3D MXL_RV32; return gen_arith(ctx, a, EXT_NONE, tcg_gen_sub_tl); } =20 static bool trans_sllw(DisasContext *ctx, arg_sllw *a) { REQUIRE_64BIT(ctx); - ctx->w =3D true; + ctx->ol =3D MXL_RV32; return gen_shift(ctx, a, EXT_NONE, tcg_gen_shl_tl); } =20 static bool trans_srlw(DisasContext *ctx, arg_srlw *a) { REQUIRE_64BIT(ctx); - ctx->w =3D true; + ctx->ol =3D MXL_RV32; return gen_shift(ctx, a, EXT_ZERO, tcg_gen_shr_tl); } =20 static bool trans_sraw(DisasContext *ctx, arg_sraw *a) { REQUIRE_64BIT(ctx); - ctx->w =3D true; + ctx->ol =3D MXL_RV32; return gen_shift(ctx, a, EXT_SIGN, tcg_gen_sar_tl); } =20 diff --git a/target/riscv/insn_trans/trans_rvm.c.inc b/target/riscv/insn_tr= ans/trans_rvm.c.inc index b89a85ad3a..9a1fe3c799 100644 --- a/target/riscv/insn_trans/trans_rvm.c.inc +++ b/target/riscv/insn_trans/trans_rvm.c.inc @@ -214,7 +214,7 @@ static bool trans_mulw(DisasContext *ctx, arg_mulw *a) { REQUIRE_64BIT(ctx); REQUIRE_EXT(ctx, RVM); - ctx->w =3D true; + ctx->ol =3D MXL_RV32; return gen_arith(ctx, a, EXT_NONE, tcg_gen_mul_tl); } =20 @@ -222,7 +222,7 @@ static bool trans_divw(DisasContext *ctx, arg_divw *a) { REQUIRE_64BIT(ctx); REQUIRE_EXT(ctx, RVM); - ctx->w =3D true; + ctx->ol =3D MXL_RV32; return gen_arith(ctx, a, EXT_SIGN, gen_div); } =20 @@ -230,7 +230,7 @@ static bool trans_divuw(DisasContext *ctx, arg_divuw *a) { REQUIRE_64BIT(ctx); REQUIRE_EXT(ctx, RVM); - ctx->w =3D true; + ctx->ol =3D MXL_RV32; return gen_arith(ctx, a, EXT_ZERO, gen_divu); } =20 @@ -238,7 +238,7 @@ static bool trans_remw(DisasContext *ctx, arg_remw *a) { REQUIRE_64BIT(ctx); REQUIRE_EXT(ctx, RVM); - ctx->w =3D true; + ctx->ol =3D MXL_RV32; return gen_arith(ctx, a, EXT_SIGN, gen_rem); } =20 @@ -246,6 +246,6 @@ static bool trans_remuw(DisasContext *ctx, arg_remuw *a) { REQUIRE_64BIT(ctx); REQUIRE_EXT(ctx, RVM); - ctx->w =3D true; + ctx->ol =3D MXL_RV32; return gen_arith(ctx, a, EXT_ZERO, gen_remu); } --=20 2.25.1 From nobody Sat Apr 20 07:25:49 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.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=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1634159199317421.8296619676853; Wed, 13 Oct 2021 14:06:39 -0700 (PDT) Received: from localhost ([::1]:55410 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1malSQ-0003rj-62 for importer@patchew.org; Wed, 13 Oct 2021 17:06:38 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35836) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1malDk-0007eM-Tt for qemu-devel@nongnu.org; Wed, 13 Oct 2021 16:51:32 -0400 Received: from mail-pj1-x1031.google.com ([2607:f8b0:4864:20::1031]:39759) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1malDb-0008BT-7g for qemu-devel@nongnu.org; Wed, 13 Oct 2021 16:51:25 -0400 Received: by mail-pj1-x1031.google.com with SMTP id ls18-20020a17090b351200b001a00250584aso5340444pjb.4 for ; Wed, 13 Oct 2021 13:51:17 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t71sm383043pgc.29.2021.10.13.13.51.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 Oct 2021 13:51:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=joleVnTQvmCPUfTbQ24Gv4VvWMa3K0Rbxd/UEEUltmA=; b=lZTKUtWGiX/x0UK7tnEBqVeVa0mgTZK34p3pQ9bsmfHxMXPtalXSW12wsnCbKQvT7P icrcl+lwu/AkNl6j+scsVx/XX1zEBCi4sY6tekyaC5LfKBLZ5qfkeKAJIq/bFkf4Cu/L WLBHcrKEPq3EaAega38TrO+J04GKWrITr6qwm/xV8RHDYkYQ4monoRSJrnQhXGGBVS66 3S0I01wW3MI9VP9Q7n9LmmzvRGePV9C54WYPAS6pbp9jrGL5DqWdPQrbpUFQMP2AplFK j7wvj0wl+r5JfXraS0HEbT8f9aR5mHa5A62r7WNKGCv6eLMKItdY8UE75KMU8fbW9KMC 5Q7g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=joleVnTQvmCPUfTbQ24Gv4VvWMa3K0Rbxd/UEEUltmA=; b=VmEnaCeoqebVXgGW1BE884PkdMxrG4/hX96R0HdVxp+V0REdMSd94X/keQ4f4QRClM R1xoJNg2N4QNUxdtjX+4kzxHFpJGCHqH9I9t0dLvHgw8fGDJNtqa4naFSPswklUttyUN i9FzCBQTZgIb3UGM7NjI9sr4JsrKwdO++UZDBV3z+NY7+yMqdhR/bK90oiQPC64ppjx9 l1scE6Ekk6PCK3KmWzRdVWOp66jQsLoAq5RDaYrRdPnYPx5y1Fv7l3yaVcrVGSalRvQw AhGlxttrKKfUusukvbt+BL00gCSfvRasoCvkNcVU2zps9UgL/vpRpSxZkEK98RBxVkCG 7Wiw== X-Gm-Message-State: AOAM532gZOxJSKfKT7XT0tCGoPqKy4N5gHtY5g1frip90FzHxbxiUEwx 6bdHekli7K0Ey3HKzp39y14HcDglVSmN1w== X-Google-Smtp-Source: ABdhPJyjuuASdaFiQobwXqTFjE2G0ofVOOfzu6teGkagcABXiGDGsqb8G812kSOQlQ2DhfTlfnDjCQ== X-Received: by 2002:a17:90b:1101:: with SMTP id gi1mr15844911pjb.11.1634158276170; Wed, 13 Oct 2021 13:51:16 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 10/13] target/riscv: Use gen_arith_per_ol for RVM Date: Wed, 13 Oct 2021 13:51:01 -0700 Message-Id: <20211013205104.1031679-11-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211013205104.1031679-1-richard.henderson@linaro.org> References: <20211013205104.1031679-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=2607:f8b0:4864:20::1031; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1031.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: alistair.francis@wdc.com, frederic.petrot@univ-grenoble-alpes.fr, qemu-riscv@nongnu.org, zhiwei_liu@c-sky.com, fabien.portas@grenoble-inp.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1634159200048100001 Content-Type: text/plain; charset="utf-8" The multiply high-part instructions require a separate implementation for RV32 when TARGET_LONG_BITS =3D=3D 64. Reviewed-by: LIU Zhiwei Signed-off-by: Richard Henderson --- target/riscv/translate.c | 16 +++++++++++++++ target/riscv/insn_trans/trans_rvm.c.inc | 26 ++++++++++++++++++++++--- 2 files changed, 39 insertions(+), 3 deletions(-) diff --git a/target/riscv/translate.c b/target/riscv/translate.c index 6ab5c6aa58..f960929c16 100644 --- a/target/riscv/translate.c +++ b/target/riscv/translate.c @@ -427,6 +427,22 @@ static bool gen_arith(DisasContext *ctx, arg_r *a, Dis= asExtend ext, return true; } =20 +static bool gen_arith_per_ol(DisasContext *ctx, arg_r *a, DisasExtend ext, + void (*f_tl)(TCGv, TCGv, TCGv), + void (*f_32)(TCGv, TCGv, TCGv)) +{ + int olen =3D get_olen(ctx); + + if (olen !=3D TARGET_LONG_BITS) { + if (olen =3D=3D 32) { + f_tl =3D f_32; + } else { + g_assert_not_reached(); + } + } + return gen_arith(ctx, a, ext, f_tl); +} + static bool gen_shift_imm_fn(DisasContext *ctx, arg_shift *a, DisasExtend = ext, void (*func)(TCGv, TCGv, target_long)) { diff --git a/target/riscv/insn_trans/trans_rvm.c.inc b/target/riscv/insn_tr= ans/trans_rvm.c.inc index 9a1fe3c799..2af0e5c139 100644 --- a/target/riscv/insn_trans/trans_rvm.c.inc +++ b/target/riscv/insn_trans/trans_rvm.c.inc @@ -33,10 +33,16 @@ static void gen_mulh(TCGv ret, TCGv s1, TCGv s2) tcg_temp_free(discard); } =20 +static void gen_mulh_w(TCGv ret, TCGv s1, TCGv s2) +{ + tcg_gen_mul_tl(ret, s1, s2); + tcg_gen_sari_tl(ret, ret, 32); +} + static bool trans_mulh(DisasContext *ctx, arg_mulh *a) { REQUIRE_EXT(ctx, RVM); - return gen_arith(ctx, a, EXT_NONE, gen_mulh); + return gen_arith_per_ol(ctx, a, EXT_SIGN, gen_mulh, gen_mulh_w); } =20 static void gen_mulhsu(TCGv ret, TCGv arg1, TCGv arg2) @@ -54,10 +60,23 @@ static void gen_mulhsu(TCGv ret, TCGv arg1, TCGv arg2) tcg_temp_free(rh); } =20 +static void gen_mulhsu_w(TCGv ret, TCGv arg1, TCGv arg2) +{ + TCGv t1 =3D tcg_temp_new(); + TCGv t2 =3D tcg_temp_new(); + + tcg_gen_ext32s_tl(t1, arg1); + tcg_gen_ext32u_tl(t2, arg2); + tcg_gen_mul_tl(ret, t1, t2); + tcg_temp_free(t1); + tcg_temp_free(t2); + tcg_gen_sari_tl(ret, ret, 32); +} + static bool trans_mulhsu(DisasContext *ctx, arg_mulhsu *a) { REQUIRE_EXT(ctx, RVM); - return gen_arith(ctx, a, EXT_NONE, gen_mulhsu); + return gen_arith_per_ol(ctx, a, EXT_NONE, gen_mulhsu, gen_mulhsu_w); } =20 static void gen_mulhu(TCGv ret, TCGv s1, TCGv s2) @@ -71,7 +90,8 @@ static void gen_mulhu(TCGv ret, TCGv s1, TCGv s2) static bool trans_mulhu(DisasContext *ctx, arg_mulhu *a) { REQUIRE_EXT(ctx, RVM); - return gen_arith(ctx, a, EXT_NONE, gen_mulhu); + /* gen_mulh_w works for either sign as input. */ + return gen_arith_per_ol(ctx, a, EXT_ZERO, gen_mulhu, gen_mulh_w); } =20 static void gen_div(TCGv ret, TCGv source1, TCGv source2) --=20 2.25.1 From nobody Sat Apr 20 07:25:49 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.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=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 163415932028835.79724885540247; Wed, 13 Oct 2021 14:08:40 -0700 (PDT) Received: from localhost ([::1]:59514 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1malUN-0006kL-57 for importer@patchew.org; Wed, 13 Oct 2021 17:08:39 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35840) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1malDk-0007eQ-U3 for qemu-devel@nongnu.org; Wed, 13 Oct 2021 16:51:33 -0400 Received: from mail-pf1-x429.google.com ([2607:f8b0:4864:20::429]:41582) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1malDb-0008Ba-5Y for qemu-devel@nongnu.org; Wed, 13 Oct 2021 16:51:24 -0400 Received: by mail-pf1-x429.google.com with SMTP id y7so3543454pfg.8 for ; Wed, 13 Oct 2021 13:51:17 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t71sm383043pgc.29.2021.10.13.13.51.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 Oct 2021 13:51:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=IQFOShy9YY1DJepfHOqgY9HuwdDNt5MEpkLMhh7pnt4=; b=mUOn2z/jepdSdSYWlT1WRRQ+azV1Pbd53yQlH1Lfw5IR3zvl/uLdtKHxtu1lqz+itn oCFd8Umq+XGuJsnDfkqkmKh9FsmX01CHIqW46sKKWOHMsG1ttEwGMIxgzDb3ivZBi5lW hFEvIc93s9O5bkx74S8AeI3/1h5eCJDsuKah3kw+qVCBzgjShZTXhAgJzpqzfhn6D5oW Tr0haP85h8VyBfdmnfYpWe+2d7OgBA3ghoVnZW0xKD7Eq5yMp7kjssq9WKYHbAyzYrpP PQoWzNtv7Xoxavxdo4DsRdRNi1Jmh+RraLnOWKMnL2621lb6zS/A9ST5QpEjWmLDthUm +A9A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=IQFOShy9YY1DJepfHOqgY9HuwdDNt5MEpkLMhh7pnt4=; b=Gq1oTViS9Qb0Xy7Pen1CU5xIXbGaYey9VZU1VFco4qWGIc3PPEYBL4FORHm3r4Vmhc VTk/XDPatQUuiiLbT3H12tOSjBNG/dZNWEKaaTlRXLByWhfxyVLOzgTuWe+s6YxouMJs WQy6QV1nt25MWgYLG1pcYwem0MUjVZVhItrBemNqhiv6PBlUOfvIRh2R2PSCgl65GERm JPkQt0gSm4S4+SfRxhRx/voaBKeP4WG42n6ugMLDjVnakNZPgHBnRdLmCxK6S5AJKcYI 8olZhfMaNpIOXfkXofx8q3DKj23FJrD7KosaJGvqTBvhWztxopgTAuHh/K0JqtbW+VbG wU9g== X-Gm-Message-State: AOAM533hW0gAWCX4UMgey8G6enNhfZJpp0WerttcixdPipHvIEiHMAl0 LcjnNmDpCmg6MykNZgj1OjkBux6gu1+Pdw== X-Google-Smtp-Source: ABdhPJx4MFGixDAjQlcD/hF6DCDI66FxlptO4U0Fc9etDGu6LUuIhy34MlFfKxplx//E0ag1Q/ZzwQ== X-Received: by 2002:a63:1125:: with SMTP id g37mr1098471pgl.403.1634158276844; Wed, 13 Oct 2021 13:51:16 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 11/13] target/riscv: Adjust trans_rev8_32 for riscv64 Date: Wed, 13 Oct 2021 13:51:02 -0700 Message-Id: <20211013205104.1031679-12-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211013205104.1031679-1-richard.henderson@linaro.org> References: <20211013205104.1031679-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=2607:f8b0:4864:20::429; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x429.google.com X-Spam_score_int: -1 X-Spam_score: -0.2 X-Spam_bar: / X-Spam_report: (-0.2 / 5.0 requ) DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: alistair.francis@wdc.com, frederic.petrot@univ-grenoble-alpes.fr, qemu-riscv@nongnu.org, zhiwei_liu@c-sky.com, fabien.portas@grenoble-inp.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1634159321939100001 Content-Type: text/plain; charset="utf-8" When target_long is 64-bit, we still want a 32-bit bswap for rev8. Since this opcode is specific to RV32, we need not conditionalize. Reviewed-by: LIU Zhiwei Signed-off-by: Richard Henderson Acked-by: Alistair Francis --- target/riscv/insn_trans/trans_rvb.c.inc | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/target/riscv/insn_trans/trans_rvb.c.inc b/target/riscv/insn_tr= ans/trans_rvb.c.inc index 66dd51de49..c62eea433a 100644 --- a/target/riscv/insn_trans/trans_rvb.c.inc +++ b/target/riscv/insn_trans/trans_rvb.c.inc @@ -232,11 +232,16 @@ static bool trans_rol(DisasContext *ctx, arg_rol *a) return gen_shift(ctx, a, EXT_NONE, tcg_gen_rotl_tl); } =20 +static void gen_rev8_32(TCGv ret, TCGv src1) +{ + tcg_gen_bswap32_tl(ret, src1, TCG_BSWAP_OS); +} + static bool trans_rev8_32(DisasContext *ctx, arg_rev8_32 *a) { REQUIRE_32BIT(ctx); REQUIRE_ZBB(ctx); - return gen_unary(ctx, a, EXT_NONE, tcg_gen_bswap_tl); + return gen_unary(ctx, a, EXT_NONE, gen_rev8_32); } =20 static bool trans_rev8_64(DisasContext *ctx, arg_rev8_64 *a) --=20 2.25.1 From nobody Sat Apr 20 07:25:49 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.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=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 163415870397583.10007033448574; Wed, 13 Oct 2021 13:58:23 -0700 (PDT) Received: from localhost ([::1]:41096 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1malKQ-0002X1-Th for importer@patchew.org; Wed, 13 Oct 2021 16:58:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35850) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1malDl-0007eh-9f for qemu-devel@nongnu.org; Wed, 13 Oct 2021 16:51:34 -0400 Received: from mail-pl1-x62b.google.com ([2607:f8b0:4864:20::62b]:46759) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1malDf-0008C3-2y for qemu-devel@nongnu.org; Wed, 13 Oct 2021 16:51:26 -0400 Received: by mail-pl1-x62b.google.com with SMTP id 21so2625308plo.13 for ; Wed, 13 Oct 2021 13:51:18 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t71sm383043pgc.29.2021.10.13.13.51.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 Oct 2021 13:51:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=52+7i3/z0p2mVcXTUw31SI3gQpQFEgTKVc2f0m0MGrc=; b=hqwmDn+yD12/jgy3l0PA39P6ee5NXYtpi9kWuV3gwlMo3nbvh5HVuDROQyi9bkQUWN cKGtRuibidUz+cpheo1gJrYQXcqFHPWZQpEGNS09oG3kVl72+p/ukNjNuiBbWemsx0tx hJliwNF/w+sq3lfzSJICCMRLm4CxRfurjE+r++PYFZdgkkxi8wo6Dty124RX/H4W4H3r Hx+Jzo7BCoM2cGvSIPh7A+tS+6ZlY9Bsq5Vj4dsNvndCECmyi8xtxIYsIDf84043xLA2 T5u4e15yatOxPEXT3ctRt3rm+bCLWhlFndNuxFHueNAw1+B2rUJRYXR9swk7HtRxzxdB o3gw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=52+7i3/z0p2mVcXTUw31SI3gQpQFEgTKVc2f0m0MGrc=; b=P58QZ6nwSyLkAk8P3AwSL02Qb+SWKkkDh3Jm30vPkg45iZGjzODuXfhTMXMiX9ZWto tvwRsT38S5QVX0XmkD5pDpwV+WjfR7F8kyIzW4oiwGVIcX3OZSkUFvJYZ/6c0JRO8T80 DhdBaY12uzHO3J8SzNYBgozc5ZKfSfwOoqk8pK+y5x2S7k0e9YBpX44XIlM3JNAazQ8K JIfWti25tt8q3RAYojeWSuVkR86yvDE8L0qX8WkoK1KScn3OKiiwZFRc4aPV0YyECxaU ZjrtPkRfCJi3TbAhDSKn2cOnUGWDMnWrbkgXq0dTujO+7qU7EnSlTBZEdXrPKvg23dyp PBHg== X-Gm-Message-State: AOAM531oLBb7daD/6+qREHQ/O8ZXZ0Ne+fj7Bw10ET9dH1RV/Vwq6+OH dPurDXPvHGBRT2L2aPS+14pj91sgPx5OjQ== X-Google-Smtp-Source: ABdhPJwo19QM3GNxVag48wlwwLy+LSlfRprjcwnHV8PxPvJsgKaEG3kg3SfVYaYZTE1a+Mlv6K77CQ== X-Received: by 2002:a17:90a:e7c6:: with SMTP id kb6mr1746132pjb.84.1634158277806; Wed, 13 Oct 2021 13:51:17 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 12/13] target/riscv: Use gen_unary_per_ol for RVB Date: Wed, 13 Oct 2021 13:51:03 -0700 Message-Id: <20211013205104.1031679-13-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211013205104.1031679-1-richard.henderson@linaro.org> References: <20211013205104.1031679-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=2607:f8b0:4864:20::62b; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x62b.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: alistair.francis@wdc.com, frederic.petrot@univ-grenoble-alpes.fr, qemu-riscv@nongnu.org, zhiwei_liu@c-sky.com, fabien.portas@grenoble-inp.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1634158705309100001 Content-Type: text/plain; charset="utf-8" The count zeros instructions require a separate implementation for RV32 when TARGET_LONG_BITS =3D=3D 64. Reviewed-by: LIU Zhiwei Signed-off-by: Richard Henderson --- target/riscv/translate.c | 16 ++++++++++++ target/riscv/insn_trans/trans_rvb.c.inc | 33 ++++++++++++------------- 2 files changed, 32 insertions(+), 17 deletions(-) diff --git a/target/riscv/translate.c b/target/riscv/translate.c index f960929c16..be458ae0c2 100644 --- a/target/riscv/translate.c +++ b/target/riscv/translate.c @@ -510,6 +510,22 @@ static bool gen_unary(DisasContext *ctx, arg_r2 *a, Di= sasExtend ext, return true; } =20 +static bool gen_unary_per_ol(DisasContext *ctx, arg_r2 *a, DisasExtend ext, + void (*f_tl)(TCGv, TCGv), + void (*f_32)(TCGv, TCGv)) +{ + int olen =3D get_olen(ctx); + + if (olen !=3D TARGET_LONG_BITS) { + if (olen =3D=3D 32) { + f_tl =3D f_32; + } else { + g_assert_not_reached(); + } + } + return gen_unary(ctx, a, ext, f_tl); +} + static uint32_t opcode_at(DisasContextBase *dcbase, target_ulong pc) { DisasContext *ctx =3D container_of(dcbase, DisasContext, base); diff --git a/target/riscv/insn_trans/trans_rvb.c.inc b/target/riscv/insn_tr= ans/trans_rvb.c.inc index c62eea433a..0c2120428d 100644 --- a/target/riscv/insn_trans/trans_rvb.c.inc +++ b/target/riscv/insn_trans/trans_rvb.c.inc @@ -47,10 +47,18 @@ static void gen_clz(TCGv ret, TCGv arg1) tcg_gen_clzi_tl(ret, arg1, TARGET_LONG_BITS); } =20 +static void gen_clzw(TCGv ret, TCGv arg1) +{ + TCGv t =3D tcg_temp_new(); + tcg_gen_shli_tl(t, arg1, 32); + tcg_gen_clzi_tl(ret, t, 32); + tcg_temp_free(t); +} + static bool trans_clz(DisasContext *ctx, arg_clz *a) { REQUIRE_ZBB(ctx); - return gen_unary(ctx, a, EXT_ZERO, gen_clz); + return gen_unary_per_ol(ctx, a, EXT_NONE, gen_clz, gen_clzw); } =20 static void gen_ctz(TCGv ret, TCGv arg1) @@ -58,10 +66,15 @@ static void gen_ctz(TCGv ret, TCGv arg1) tcg_gen_ctzi_tl(ret, arg1, TARGET_LONG_BITS); } =20 +static void gen_ctzw(TCGv ret, TCGv arg1) +{ + tcg_gen_ctzi_tl(ret, arg1, 32); +} + static bool trans_ctz(DisasContext *ctx, arg_ctz *a) { REQUIRE_ZBB(ctx); - return gen_unary(ctx, a, EXT_ZERO, gen_ctz); + return gen_unary_per_ol(ctx, a, EXT_ZERO, gen_ctz, gen_ctzw); } =20 static bool trans_cpop(DisasContext *ctx, arg_cpop *a) @@ -314,14 +327,6 @@ static bool trans_zext_h_64(DisasContext *ctx, arg_zex= t_h_64 *a) return gen_unary(ctx, a, EXT_NONE, tcg_gen_ext16u_tl); } =20 -static void gen_clzw(TCGv ret, TCGv arg1) -{ - TCGv t =3D tcg_temp_new(); - tcg_gen_shli_tl(t, arg1, 32); - tcg_gen_clzi_tl(ret, t, 32); - tcg_temp_free(t); -} - static bool trans_clzw(DisasContext *ctx, arg_clzw *a) { REQUIRE_64BIT(ctx); @@ -329,17 +334,11 @@ static bool trans_clzw(DisasContext *ctx, arg_clzw *a) return gen_unary(ctx, a, EXT_NONE, gen_clzw); } =20 -static void gen_ctzw(TCGv ret, TCGv arg1) -{ - tcg_gen_ori_tl(ret, arg1, (target_ulong)MAKE_64BIT_MASK(32, 32)); - tcg_gen_ctzi_tl(ret, ret, 64); -} - static bool trans_ctzw(DisasContext *ctx, arg_ctzw *a) { REQUIRE_64BIT(ctx); REQUIRE_ZBB(ctx); - return gen_unary(ctx, a, EXT_NONE, gen_ctzw); + return gen_unary(ctx, a, EXT_ZERO, gen_ctzw); } =20 static bool trans_cpopw(DisasContext *ctx, arg_cpopw *a) --=20 2.25.1 From nobody Sat Apr 20 07:25:49 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.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=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1634158916682852.0565006837214; Wed, 13 Oct 2021 14:01:56 -0700 (PDT) Received: from localhost ([::1]:47960 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1malNr-000754-0D for importer@patchew.org; Wed, 13 Oct 2021 17:01:55 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:35870) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1malDn-0007ep-Lz for qemu-devel@nongnu.org; Wed, 13 Oct 2021 16:51:35 -0400 Received: from mail-pf1-x434.google.com ([2607:f8b0:4864:20::434]:38896) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1malDj-0008EE-Hp for qemu-devel@nongnu.org; Wed, 13 Oct 2021 16:51:31 -0400 Received: by mail-pf1-x434.google.com with SMTP id k26so3552120pfi.5 for ; Wed, 13 Oct 2021 13:51:19 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id t71sm383043pgc.29.2021.10.13.13.51.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 Oct 2021 13:51:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=hFX0fvXr5Wap2rZ4hX9nslOYuGD0ytu8pOqgf+y/nUY=; b=m9+lA5G9i/iT0gftRgn7lDIyill4lyRFL20JlE+hd2WuPV82hAr9za+Bd3wzYFvXAU yLHVnKI3ES6+prsdGCugqBeGDcT3vi92fpzmxvnBfjm0MA73QGCLC5Z3ssf3rqhUSryO 6ioSW7j1cXYcVCu+EuDL6D7XsMLv0RLk2yFOGH4GM5wIGU5QvCgSqmPWCHItLPleJdXv f/9bNjgIWShGtDTlsfHxoiRvjax+esvIxgEEtEQ+lBz/4KOXbof3WnQHLPebg6E7Zsb0 MIZU0ubGyzoOMswZHK8uXjbm3N/N/UyCtCqyS4vkqxOOtsOFJLXj57gQVVNqPEwBDaMQ pvBQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=hFX0fvXr5Wap2rZ4hX9nslOYuGD0ytu8pOqgf+y/nUY=; b=mLkhPDPHPUq3sruoflkweGz0fjJ03e08Yv7WxmtWXmsS6S1zFtXvr+7HjBu2KbX6pC SGuvvKctSXyrfkVyRsG+HNvJhrP2SJIHBVHiu/Z78A9sA6wXhA3B4+zu5f7o55xlLAo2 LCBOzgFXUg4OwejAKZjNvP+AX9z1r6kd+KPvObYZ40dlyXcOq5nB43wd9YYzqDUSP9ES pU5mbr2gVDfS7tPt4ElDRvzgn3Dt2fHm3f83u9lSvrAti4R7gaX6MaP+6N36gRGdJCBq sl74TycwDx+eXB8pWAZzvw33BTp5O8lGZjMtUFuOTVMAXQ7KQwiXRAFMX7XHT32hgg3N L+mQ== X-Gm-Message-State: AOAM533euqNtK3CTRr77tXyJWEr0mv9VsxBtsRL4TDkadnecd77vwppq p7UQmuRojYTK6LcLCyXGca17piPyjxN1Sg== X-Google-Smtp-Source: ABdhPJwxQvyEQTYSUnGMCtp/ibhdyY7p1d/YMcJjUQ/+atEiUjBHETEZih/H9kDuzqcG6ZUFwlgsIg== X-Received: by 2002:a63:5544:: with SMTP id f4mr1104128pgm.431.1634158278565; Wed, 13 Oct 2021 13:51:18 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 13/13] target/riscv: Use gen_shift*_per_ol for RVB, RVI Date: Wed, 13 Oct 2021 13:51:04 -0700 Message-Id: <20211013205104.1031679-14-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211013205104.1031679-1-richard.henderson@linaro.org> References: <20211013205104.1031679-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=2607:f8b0:4864:20::434; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x434.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action 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: alistair.francis@wdc.com, frederic.petrot@univ-grenoble-alpes.fr, qemu-riscv@nongnu.org, zhiwei_liu@c-sky.com, fabien.portas@grenoble-inp.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1634158918589100001 Content-Type: text/plain; charset="utf-8" Most shift instructions require a separate implementation for RV32 when TARGET_LONG_BITS =3D=3D 64. Reviewed-by: LIU Zhiwei Signed-off-by: Richard Henderson --- target/riscv/translate.c | 31 +++++++++ target/riscv/insn_trans/trans_rvb.c.inc | 92 ++++++++++++++----------- target/riscv/insn_trans/trans_rvi.c.inc | 26 +++---- 3 files changed, 97 insertions(+), 52 deletions(-) diff --git a/target/riscv/translate.c b/target/riscv/translate.c index be458ae0c2..dbe3670ff3 100644 --- a/target/riscv/translate.c +++ b/target/riscv/translate.c @@ -462,6 +462,22 @@ static bool gen_shift_imm_fn(DisasContext *ctx, arg_sh= ift *a, DisasExtend ext, return true; } =20 +static bool gen_shift_imm_fn_per_ol(DisasContext *ctx, arg_shift *a, + DisasExtend ext, + void (*f_tl)(TCGv, TCGv, target_long), + void (*f_32)(TCGv, TCGv, target_long)) +{ + int olen =3D get_olen(ctx); + if (olen !=3D TARGET_LONG_BITS) { + if (olen =3D=3D 32) { + f_tl =3D f_32; + } else { + g_assert_not_reached(); + } + } + return gen_shift_imm_fn(ctx, a, ext, f_tl); +} + static bool gen_shift_imm_tl(DisasContext *ctx, arg_shift *a, DisasExtend = ext, void (*func)(TCGv, TCGv, TCGv)) { @@ -498,6 +514,21 @@ static bool gen_shift(DisasContext *ctx, arg_r *a, Dis= asExtend ext, return true; } =20 +static bool gen_shift_per_ol(DisasContext *ctx, arg_r *a, DisasExtend ext, + void (*f_tl)(TCGv, TCGv, TCGv), + void (*f_32)(TCGv, TCGv, TCGv)) +{ + int olen =3D get_olen(ctx); + if (olen !=3D TARGET_LONG_BITS) { + if (olen =3D=3D 32) { + f_tl =3D f_32; + } else { + g_assert_not_reached(); + } + } + return gen_shift(ctx, a, ext, f_tl); +} + static bool gen_unary(DisasContext *ctx, arg_r2 *a, DisasExtend ext, void (*func)(TCGv, TCGv)) { diff --git a/target/riscv/insn_trans/trans_rvb.c.inc b/target/riscv/insn_tr= ans/trans_rvb.c.inc index 0c2120428d..cc39e6033b 100644 --- a/target/riscv/insn_trans/trans_rvb.c.inc +++ b/target/riscv/insn_trans/trans_rvb.c.inc @@ -227,22 +227,70 @@ static bool trans_bexti(DisasContext *ctx, arg_bexti = *a) return gen_shift_imm_tl(ctx, a, EXT_NONE, gen_bext); } =20 +static void gen_rorw(TCGv ret, TCGv arg1, TCGv arg2) +{ + TCGv_i32 t1 =3D tcg_temp_new_i32(); + TCGv_i32 t2 =3D tcg_temp_new_i32(); + + /* truncate to 32-bits */ + tcg_gen_trunc_tl_i32(t1, arg1); + tcg_gen_trunc_tl_i32(t2, arg2); + + tcg_gen_rotr_i32(t1, t1, t2); + + /* sign-extend 64-bits */ + tcg_gen_ext_i32_tl(ret, t1); + + tcg_temp_free_i32(t1); + tcg_temp_free_i32(t2); +} + static bool trans_ror(DisasContext *ctx, arg_ror *a) { REQUIRE_ZBB(ctx); - return gen_shift(ctx, a, EXT_NONE, tcg_gen_rotr_tl); + return gen_shift_per_ol(ctx, a, EXT_NONE, tcg_gen_rotr_tl, gen_rorw); +} + +static void gen_roriw(TCGv ret, TCGv arg1, target_long shamt) +{ + TCGv_i32 t1 =3D tcg_temp_new_i32(); + + tcg_gen_trunc_tl_i32(t1, arg1); + tcg_gen_rotri_i32(t1, t1, shamt); + tcg_gen_ext_i32_tl(ret, t1); + + tcg_temp_free_i32(t1); } =20 static bool trans_rori(DisasContext *ctx, arg_rori *a) { REQUIRE_ZBB(ctx); - return gen_shift_imm_fn(ctx, a, EXT_NONE, tcg_gen_rotri_tl); + return gen_shift_imm_fn_per_ol(ctx, a, EXT_NONE, + tcg_gen_rotri_tl, gen_roriw); +} + +static void gen_rolw(TCGv ret, TCGv arg1, TCGv arg2) +{ + TCGv_i32 t1 =3D tcg_temp_new_i32(); + TCGv_i32 t2 =3D tcg_temp_new_i32(); + + /* truncate to 32-bits */ + tcg_gen_trunc_tl_i32(t1, arg1); + tcg_gen_trunc_tl_i32(t2, arg2); + + tcg_gen_rotl_i32(t1, t1, t2); + + /* sign-extend 64-bits */ + tcg_gen_ext_i32_tl(ret, t1); + + tcg_temp_free_i32(t1); + tcg_temp_free_i32(t2); } =20 static bool trans_rol(DisasContext *ctx, arg_rol *a) { REQUIRE_ZBB(ctx); - return gen_shift(ctx, a, EXT_NONE, tcg_gen_rotl_tl); + return gen_shift_per_ol(ctx, a, EXT_NONE, tcg_gen_rotl_tl, gen_rolw); } =20 static void gen_rev8_32(TCGv ret, TCGv src1) @@ -349,24 +397,6 @@ static bool trans_cpopw(DisasContext *ctx, arg_cpopw *= a) return gen_unary(ctx, a, EXT_ZERO, tcg_gen_ctpop_tl); } =20 -static void gen_rorw(TCGv ret, TCGv arg1, TCGv arg2) -{ - TCGv_i32 t1 =3D tcg_temp_new_i32(); - TCGv_i32 t2 =3D tcg_temp_new_i32(); - - /* truncate to 32-bits */ - tcg_gen_trunc_tl_i32(t1, arg1); - tcg_gen_trunc_tl_i32(t2, arg2); - - tcg_gen_rotr_i32(t1, t1, t2); - - /* sign-extend 64-bits */ - tcg_gen_ext_i32_tl(ret, t1); - - tcg_temp_free_i32(t1); - tcg_temp_free_i32(t2); -} - static bool trans_rorw(DisasContext *ctx, arg_rorw *a) { REQUIRE_64BIT(ctx); @@ -380,25 +410,7 @@ static bool trans_roriw(DisasContext *ctx, arg_roriw *= a) REQUIRE_64BIT(ctx); REQUIRE_ZBB(ctx); ctx->ol =3D MXL_RV32; - return gen_shift_imm_tl(ctx, a, EXT_NONE, gen_rorw); -} - -static void gen_rolw(TCGv ret, TCGv arg1, TCGv arg2) -{ - TCGv_i32 t1 =3D tcg_temp_new_i32(); - TCGv_i32 t2 =3D tcg_temp_new_i32(); - - /* truncate to 32-bits */ - tcg_gen_trunc_tl_i32(t1, arg1); - tcg_gen_trunc_tl_i32(t2, arg2); - - tcg_gen_rotl_i32(t1, t1, t2); - - /* sign-extend 64-bits */ - tcg_gen_ext_i32_tl(ret, t1); - - tcg_temp_free_i32(t1); - tcg_temp_free_i32(t2); + return gen_shift_imm_fn(ctx, a, EXT_NONE, gen_roriw); } =20 static bool trans_rolw(DisasContext *ctx, arg_rolw *a) diff --git a/target/riscv/insn_trans/trans_rvi.c.inc b/target/riscv/insn_tr= ans/trans_rvi.c.inc index c0a46d823f..b0fdec97de 100644 --- a/target/riscv/insn_trans/trans_rvi.c.inc +++ b/target/riscv/insn_trans/trans_rvi.c.inc @@ -270,14 +270,26 @@ static bool trans_slli(DisasContext *ctx, arg_slli *a) return gen_shift_imm_fn(ctx, a, EXT_NONE, tcg_gen_shli_tl); } =20 +static void gen_srliw(TCGv dst, TCGv src, target_long shamt) +{ + tcg_gen_extract_tl(dst, src, shamt, 32 - shamt); +} + static bool trans_srli(DisasContext *ctx, arg_srli *a) { - return gen_shift_imm_fn(ctx, a, EXT_ZERO, tcg_gen_shri_tl); + return gen_shift_imm_fn_per_ol(ctx, a, EXT_NONE, + tcg_gen_shri_tl, gen_srliw); +} + +static void gen_sraiw(TCGv dst, TCGv src, target_long shamt) +{ + tcg_gen_sextract_tl(dst, src, shamt, 32 - shamt); } =20 static bool trans_srai(DisasContext *ctx, arg_srai *a) { - return gen_shift_imm_fn(ctx, a, EXT_SIGN, tcg_gen_sari_tl); + return gen_shift_imm_fn_per_ol(ctx, a, EXT_NONE, + tcg_gen_sari_tl, gen_sraiw); } =20 static bool trans_add(DisasContext *ctx, arg_add *a) @@ -344,11 +356,6 @@ static bool trans_slliw(DisasContext *ctx, arg_slliw *= a) return gen_shift_imm_fn(ctx, a, EXT_NONE, tcg_gen_shli_tl); } =20 -static void gen_srliw(TCGv dst, TCGv src, target_long shamt) -{ - tcg_gen_extract_tl(dst, src, shamt, 32 - shamt); -} - static bool trans_srliw(DisasContext *ctx, arg_srliw *a) { REQUIRE_64BIT(ctx); @@ -356,11 +363,6 @@ static bool trans_srliw(DisasContext *ctx, arg_srliw *= a) return gen_shift_imm_fn(ctx, a, EXT_NONE, gen_srliw); } =20 -static void gen_sraiw(TCGv dst, TCGv src, target_long shamt) -{ - tcg_gen_sextract_tl(dst, src, shamt, 32 - shamt); -} - static bool trans_sraiw(DisasContext *ctx, arg_sraiw *a) { REQUIRE_64BIT(ctx); --=20 2.25.1