From nobody Wed May 22 02:14:33 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 1634404933347110.24930209571426; Sat, 16 Oct 2021 10:22:13 -0700 (PDT) Received: from localhost ([::1]:48730 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mbnNs-0001AI-Ab for importer@patchew.org; Sat, 16 Oct 2021 13:22:12 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60368) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mbnGF-0000yr-Vu for qemu-devel@nongnu.org; Sat, 16 Oct 2021 13:14:21 -0400 Received: from mail-pj1-x102e.google.com ([2607:f8b0:4864:20::102e]:46836) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mbnGD-000673-Uz for qemu-devel@nongnu.org; Sat, 16 Oct 2021 13:14:19 -0400 Received: by mail-pj1-x102e.google.com with SMTP id pi19-20020a17090b1e5300b0019fdd3557d3so9611054pjb.5 for ; Sat, 16 Oct 2021 10:14:15 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id l4sm2330281pfc.121.2021.10.16.10.14.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 16 Oct 2021 10:14: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=Ur4NYkKvb4IwfCVRQ66xGSUcq2q0ktl5nOkYZP/fju8=; b=Zn1ANtPn4HgOcjbUpaMkr+0/RGuaC2ozaaTEJwCsRQ3Q/EnxTiD2l/GWY94MCc0OYL Wud+6DMehEajkG2BHpERJeJPvB1+MZmO3Zl4svXC0z4dyDYO2OMibk6oOgFl79fWZBL6 NaR6W3BGECVYM5job2BtTxpmzyhkixKcqkauHAAIaR9Ct1Aim/fckgRV1Yjz6LoY0Mos ssQQSIySvTllVbLqZvpiyminHm01c3dldqR2uFTH9oF1GCRA/FJDES2XC9V7boVjtrsS M5pVFqVTRBraEBHngdXQH/cqksM+MY/E965yNOmDC4inMyzYAPPD654XkDVkJ7/499UT eilA== 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=eNZ3CzpKbauYFd8hbjM2IHsNZ1x4kBk7df3hkSS/d4NT7otn1ICbp9qU/1YRSlsmQ8 KRQ95mxWUoY8cTIxxLxvHGcaFXZ+Eda++uqWJy6mEBhvcJYZnMa/3JMdyMaXeFS187v5 1VUpvGdFEqg8Eu04W5YNse1y4T5XyQExlQaINCqGYYfqdz8k9QOZro3C+Co7+CJfyvxV K1Q6kiUDZWaC/bHXq1NhsndX4WVgjnpg6Xyh8rWWdEyITeyKNarcQDxqE4MKdRfvN5H3 KSolVBmeHvCJfXqYGLkYzX++Us8wCzk+N+OMOe4aDKNDyRuZM3b9xFO6shFnEWNU2rno wEAg== X-Gm-Message-State: AOAM530Av8WROMErER9Uqpb0WMh5/Smqk6zE64JC9ZEiGLGCTbCW6Q6E za1U/9jGoCDMh4kWl7t8G3EMIY/v0tGxwQ== X-Google-Smtp-Source: ABdhPJxbPezNA7yiZUFn6J3fxkhQyCAB3fU5Hy6HJIgG5T+0P5ZY5PwOyOz+StCNzom6Gf76PRerSQ== X-Received: by 2002:a17:902:d48a:b0:13f:4411:8ae9 with SMTP id c10-20020a170902d48a00b0013f44118ae9mr17481467plg.86.1634404454593; Sat, 16 Oct 2021 10:14:14 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v3 01/14] target/riscv: Move cpu_get_tb_cpu_state out of line Date: Sat, 16 Oct 2021 10:13:59 -0700 Message-Id: <20211016171412.3163784-2-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211016171412.3163784-1-richard.henderson@linaro.org> References: <20211016171412.3163784-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::102e; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102e.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: qemu-riscv@nongnu.org, frank.chang@sifive.com, alistair.francis@wdc.com, fabien.portas@grenoble-inp.org, frederic.petrot@univ-grenoble-alpes.fr, zhiwei_liu@c-sky.com 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: 1634404934919100001 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 Wed May 22 02:14:33 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 1634404685850134.2456706558728; Sat, 16 Oct 2021 10:18:05 -0700 (PDT) Received: from localhost ([::1]:40474 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mbnJs-00040G-N0 for importer@patchew.org; Sat, 16 Oct 2021 13:18:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60398) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mbnGH-0000yu-3b for qemu-devel@nongnu.org; Sat, 16 Oct 2021 13:14:21 -0400 Received: from mail-pj1-x102d.google.com ([2607:f8b0:4864:20::102d]:44942) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mbnGE-00068N-2F for qemu-devel@nongnu.org; Sat, 16 Oct 2021 13:14:20 -0400 Received: by mail-pj1-x102d.google.com with SMTP id oa12-20020a17090b1bcc00b0019f715462a8so9621512pjb.3 for ; Sat, 16 Oct 2021 10:14:17 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id l4sm2330281pfc.121.2021.10.16.10.14.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 16 Oct 2021 10:14: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=JW/tzOqQKK5hRD4CRoj0kca6rOybKGXTUDDhLFOWwb8=; b=u/Ho6YpMB/JA3oBuwbhMUdzOubnEI0b+vpFFEabycbDn46ml2EVDt1ucL2Tt7PikHE HpmwE7LgiYCkdpnw29zGXPQUYGe4xypgHOojz1x862OGoBEFJOCwSxUiJEUVZBrOx9Za HxvjNFwZBUWvaot19hpaNIdpvQ1v96kdRC/U3Ty/j4sDereJyCBPO00pEhEtPbHxLW9A oijDkh2M4MK2Xkot1D6hqhr2wmuuKS6ujwAigqVaqC56kUmvpRijpIQxCDpoOLUNWeZo TEAKuJ7oQfuHg5cA7FtCUnVHLyW503yKt53Z8w4WbQJX2YSTORZ7VMSOYpgSKzD8D3Du ucHA== 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=hsJAeGbNA1rVlXEYg1G1fZV1Qf0i0ayH2ydw/YQwl5+CnFXXkfUv5afxvmIaVOrE4N lM1kxVMdzz/me+NXAfdZjyJ0Z85En+HWWwDlro/ZBN7y/zZ2MRvKObEQsevuUSp8JC0x P7Ik+L+T6zwtv+M5BtmukQCIO35JZWnj9Rrna2IXsh9q7gN4jmivZflwmlFvLKfkhPcy GvAdYwWPVLIb2kzsta+0rH7CFC3WAVVFNBpdtuC+9AdPVS8sgGWV/ryHrA4CNPhW4lbh xAz4xEylCObtdy7CnSwWRovgz1+oRiOdv0W0jHw4xptmcEky6hVmYp+X4InN4yadEI/r vAFw== X-Gm-Message-State: AOAM532PyWnxNfZJnDZRm2whKMGTWfQbNi39kUFDEhajZ3zZBAbevWlj Mj9b/HnU+TOsCQP/v479qzuMhrRKPEJIOA== X-Google-Smtp-Source: ABdhPJwLBTVqvj5/GGBUJ5vRpABaryIMDAWERDwz4Aw/yM2m09T4GFKSn08KFJnKfAap0A+yxwGJnA== X-Received: by 2002:a17:90a:8985:: with SMTP id v5mr35678507pjn.222.1634404456283; Sat, 16 Oct 2021 10:14:16 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v3 02/14] target/riscv: Create RISCVMXL enumeration Date: Sat, 16 Oct 2021 10:14:00 -0700 Message-Id: <20211016171412.3163784-3-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211016171412.3163784-1-richard.henderson@linaro.org> References: <20211016171412.3163784-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::102d; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102d.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: qemu-riscv@nongnu.org, frank.chang@sifive.com, alistair.francis@wdc.com, fabien.portas@grenoble-inp.org, frederic.petrot@univ-grenoble-alpes.fr, zhiwei_liu@c-sky.com 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: 1634404687162100001 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 Wed May 22 02:14:33 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 1634405099473483.85178942216794; Sat, 16 Oct 2021 10:24:59 -0700 (PDT) Received: from localhost ([::1]:55644 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mbnQY-0005lQ-4S for importer@patchew.org; Sat, 16 Oct 2021 13:24:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60456) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mbnGJ-0000zl-IB for qemu-devel@nongnu.org; Sat, 16 Oct 2021 13:14:23 -0400 Received: from mail-pg1-x52f.google.com ([2607:f8b0:4864:20::52f]:33748) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mbnGE-000693-Kl for qemu-devel@nongnu.org; Sat, 16 Oct 2021 13:14:21 -0400 Received: by mail-pg1-x52f.google.com with SMTP id j190so4947322pgd.0 for ; Sat, 16 Oct 2021 10:14:18 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id l4sm2330281pfc.121.2021.10.16.10.14.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 16 Oct 2021 10:14: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=GS6E9YZwFeoOM8Lf6qgR8RnzA4Vzo2g8bfTyNcqnx18=; b=t+G2E+4bBW1lAhVUVsydSxD6ZenAGwVs+abjnYd+nyb2saiFl7osh9bVZdGwPiLzN5 QboM98xpYjcgufvJZ09nK5wLe26p+enxLEz0bacZMynmN8lRTMiV5j9fhzp4lXkMxszu NJ3UAatrBYSRDLRA6cacSzKhgOkdx1JILJECEUnrKUzIBfFSMPxQAje7X3CtMfmJLj3S /ht3G9HVd8nGonFcf70J1V0AG1tzj+MVAsHu1EqHLaNJBCDuHC/c7Wj7o83ymKrjW1eH c0GH3Xi5RQ8gY4/iF9HMZSccUfbvkXpyqnqFUPc9J47lwkMgRAQclA0Hntj/O9iP1v+o 99jg== 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=GS6E9YZwFeoOM8Lf6qgR8RnzA4Vzo2g8bfTyNcqnx18=; b=ZKJ/GSyTzhH0RduuzmymGJ3mabuo2srdQoY9ZDDiBekCBHo4djFwxC/IF6bXou3vdV VnPt3oYdlF8FyWbwFQcMBtNT34f0Q0R5HAtno63f8pILqa+/V981fAUYx/ReJflRE/AM HdHFNWNqZPli5rw/0ZrreAYfo3t/s6fAs4ugO11Ms67nZOq+8GvjbWCRGgNYesvKZ8YA 8cUNK+GqYGCBSOqdNzDDNXpaUnteGBl7aUgYBGxOFTH1JaBr+yj61pIGymGxrW5czEkR zjvTysazwLu5O0inWNI2thZ3WYOa8lXyxLaBg+5n4r/GH22c46pJzCHx+hYc18wr3IPj +iLw== X-Gm-Message-State: AOAM532WQ1Nl7AY9I4a0ZxeRuJSjO8j4IAO+C/X+RKEzslis2965M9IC /MsCTBOBM2lKo738BxWkxmNbafBFYAU= X-Google-Smtp-Source: ABdhPJz/b7ENSWVD0dyNSICwZJBaKPESjqZTjEupuGzR2IZUv99INYuQhfvBFggIxyfxT6PS6/DyRQ== X-Received: by 2002:a63:3e84:: with SMTP id l126mr3064615pga.341.1634404457102; Sat, 16 Oct 2021 10:14:17 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v3 03/14] target/riscv: Split misa.mxl and misa.ext Date: Sat, 16 Oct 2021 10:14:01 -0700 Message-Id: <20211016171412.3163784-4-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211016171412.3163784-1-richard.henderson@linaro.org> References: <20211016171412.3163784-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::52f; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52f.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: qemu-riscv@nongnu.org, frank.chang@sifive.com, alistair.francis@wdc.com, fabien.portas@grenoble-inp.org, frederic.petrot@univ-grenoble-alpes.fr, zhiwei_liu@c-sky.com 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: 1634405100984100001 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. Reviewed-by: Alistair Francis Signed-off-by: Richard Henderson Reviewed-by: LIU Zhiwei --- 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 Wed May 22 02:14:33 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 1634404943505348.05164607249435; Sat, 16 Oct 2021 10:22:23 -0700 (PDT) Received: from localhost ([::1]:48870 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mbnO1-0001G9-Nn for importer@patchew.org; Sat, 16 Oct 2021 13:22:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60486) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mbnGK-00010y-N0 for qemu-devel@nongnu.org; Sat, 16 Oct 2021 13:14:25 -0400 Received: from mail-pl1-x62b.google.com ([2607:f8b0:4864:20::62b]:34405) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mbnGF-00069K-GJ for qemu-devel@nongnu.org; Sat, 16 Oct 2021 13:14:24 -0400 Received: by mail-pl1-x62b.google.com with SMTP id g5so8448760plg.1 for ; Sat, 16 Oct 2021 10:14:19 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id l4sm2330281pfc.121.2021.10.16.10.14.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 16 Oct 2021 10:14: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=fDRDQ/28tUA44g3uwclTlM7GmYlI0g8Pi30MXZwPkn0=; b=e/tWFQ4qEI07MDjgC6fdWPJB+U0vsxBu8Prf6/Xj4zoE+5A7QfmWWAf3MeqqGXal6p Gx1HLZhtsEhx+mspI4VBcezy9Tfa/H/+HPFkpAxjaxtZnEj0xEX4qFxluK8E/Tf/PIJu Y/UFHPxoiKqmWkleofWhtt+t9ueuN1d5288dl/OJL4Swiaea07yygK/QlbuG/O7+lZ41 ss70StAAYuJDySZNyjf5F0ZI12RjXggW1kOAQdD4Z1SW1OssQ8AU2MfoIVajOwXVyA2j PtheUne8NvPUY0X2Zm0dxOWDQd2FZ8uq0fVcRBI5ftbHkw54pCZ41EGs1kYRPmUDQ5VU LIvQ== 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=fDRDQ/28tUA44g3uwclTlM7GmYlI0g8Pi30MXZwPkn0=; b=m97fFzpBm2ROgk4st8HPrF2V/JCbDI5FNTOsVID62hOCDtdxd4tvI9Nb8Wo5qmfD3W 31FZ1H1bcqEAdArIVK5LXs2Mv7e/KIpnseFytusmoyelmHSFCqeF0WgWN3uhvVNx/z/4 YyBD/cqB1+EDw4Qx+3h6aXjGaxfCF4z5CINxdfSjTVcIvhFU1kOj2/DrAKRLPGa3aqHY o1ydGpHwx+tNHOZVncNjH3fzbDdqI1pBzSsuJYxYhSO892jdz0yI0rGg48lxNMJ60EeK WnV6KJuB86X71JEfHiC+kfE4rF0AvfSYyyADZmTe8yPlKhWXbt3C6dwi2UfML9VeOer6 H4dA== X-Gm-Message-State: AOAM530K6sbqSuu1o2SAu1Mt2mYAy4RVaYXyQpp0DzA+GTxJmt8EIxCi MnCUZqA97Yfr9JxTrLAzpGS+leTIAUaLFw== X-Google-Smtp-Source: ABdhPJwssZsorYSUZd1RVZWYYiymkVse9v6q6G3Wp3zgYJYgTDqa5WgapYB/wQaZUjTvw58sDbAfTw== X-Received: by 2002:a17:90a:de16:: with SMTP id m22mr35752495pjv.38.1634404458115; Sat, 16 Oct 2021 10:14:18 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v3 04/14] target/riscv: Replace riscv_cpu_is_32bit with riscv_cpu_mxl Date: Sat, 16 Oct 2021 10:14:02 -0700 Message-Id: <20211016171412.3163784-5-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211016171412.3163784-1-richard.henderson@linaro.org> References: <20211016171412.3163784-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: qemu-riscv@nongnu.org, frank.chang@sifive.com, alistair.francis@wdc.com, fabien.portas@grenoble-inp.org, frederic.petrot@univ-grenoble-alpes.fr, zhiwei_liu@c-sky.com 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: 1634404945437100001 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. Reviewed-by: Alistair Francis Signed-off-by: Richard Henderson Reviewed-by: LIU Zhiwei --- 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..d0e82135a9 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 TARGET_RISCV32 +#define riscv_cpu_mxl(env) ((void)(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 Wed May 22 02:14:33 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 1634404716820994.2162228803683; Sat, 16 Oct 2021 10:18:36 -0700 (PDT) Received: from localhost ([::1]:41658 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mbnKN-0004n6-RT for importer@patchew.org; Sat, 16 Oct 2021 13:18:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60528) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mbnGL-00012R-HA for qemu-devel@nongnu.org; Sat, 16 Oct 2021 13:14:27 -0400 Received: from mail-pg1-x529.google.com ([2607:f8b0:4864:20::529]:38886) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mbnGG-0006AS-DJ for qemu-devel@nongnu.org; Sat, 16 Oct 2021 13:14:25 -0400 Received: by mail-pg1-x529.google.com with SMTP id e65so9286539pgc.5 for ; Sat, 16 Oct 2021 10:14:19 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id l4sm2330281pfc.121.2021.10.16.10.14.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 16 Oct 2021 10:14: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=HfhIYs6BYtJZrJhyDqdjqFsTT/I7BM3RSYSu00CViw4=; b=kZ73zNZFvXuOLh9u9aSdPoK7MVceaAKYSlzm0vrGdXwQh/eYBaYqi6f+8B0ibuda1m 84iy2tv4EYaj/yYi/MKGbKSaJn8PK4DEeAafddraJrQX/n2bIOuBGgUmuieFdKxJFxXV w5KcXY6sIOycGLZw0QitfenNRA10BcBfJ+21mBt9E9NtaZz6eQUlvP27kQZBMS7dL8au LbQVazNFNtmjuHctPLdFr56oDcxOLoXhIVj1pZ+vQzSi+dm0pI6X+6gcTmLwXzZHBBRV OCpAvkJ0glQmaVaqh/8/0TjAj2Ckkq/u7EP39ylFdqUYRv8jLv6PUs127H7a2T8diZw3 X2pA== 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=HfhIYs6BYtJZrJhyDqdjqFsTT/I7BM3RSYSu00CViw4=; b=1TpB/myz4qOqPGAtzmSYTaIvM5NmJxVvpJt6oY7vdQqTIjPNj/d2+Af9B/cBeDDniB RU0Nqu0VeYwhW52/s31cO2V86kP4rdW4KFHEg9dV/ebId4NqMDvpWGW8HfcSkJRwq4qd d1PuxOlg8LPzqZ11q5nuqoDvz92k0UCwmrKkgNy0D8pIGYxb8eST8GJxHIWQyZh+AzDw VTz3wQbhjdnwyOEQVjrM/5Owb0XQFirLlBxY1N9cStcIlMEsFtbvt5juohie+rMJuveX rBu51B+BhNnQXiG0Uq/xCJknKBD7iui1TrVVAtBxZ+EXMOpluJRKW19taK4cjW+PTCZn 01yQ== X-Gm-Message-State: AOAM5321VT2srqxiJE/DZ2eXn5aiN0454J6W/YyKDgt8PvxoWr3ykiNE WvoB6E79OqF41/0nsR4ukFJJ4mTCexT14A== X-Google-Smtp-Source: ABdhPJwledNFtzOQwIGrVn1qwc/UQdBdJLmGBmzUqXp9pn2zEkIdvfktk+rxUWoasCIos5s4LFYdvw== X-Received: by 2002:a63:a80c:: with SMTP id o12mr14553211pgf.422.1634404459051; Sat, 16 Oct 2021 10:14:19 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v3 05/14] target/riscv: Add MXL/SXL/UXL to TB_FLAGS Date: Sat, 16 Oct 2021 10:14:03 -0700 Message-Id: <20211016171412.3163784-6-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211016171412.3163784-1-richard.henderson@linaro.org> References: <20211016171412.3163784-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::529; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x529.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: qemu-riscv@nongnu.org, frank.chang@sifive.com, alistair.francis@wdc.com, fabien.portas@grenoble-inp.org, frederic.petrot@univ-grenoble-alpes.fr, zhiwei_liu@c-sky.com 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: 1634404718066100001 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. Reviewed-by: Alistair Francis Signed-off-by: Richard Henderson Reviewed-by: LIU Zhiwei --- 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 d0e82135a9..c24bc9a039 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 TARGET_RISCV32 #define riscv_cpu_mxl(env) ((void)(env), MXL_RV32) diff --git a/target/riscv/cpu.c b/target/riscv/cpu.c index 1857670a69..4e1920d5f0 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 undefined, but mstatus is WARL + * and we must ensure that the value after init is valid for read. + */ + 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 Wed May 22 02:14:33 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 1634405104595961.0355644888925; Sat, 16 Oct 2021 10:25:04 -0700 (PDT) Received: from localhost ([::1]:56002 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mbnQd-0005zn-FQ for importer@patchew.org; Sat, 16 Oct 2021 13:25:03 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60574) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mbnGM-00012W-RQ for qemu-devel@nongnu.org; Sat, 16 Oct 2021 13:14:27 -0400 Received: from mail-pl1-x632.google.com ([2607:f8b0:4864:20::632]:40606) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mbnGJ-0006CD-A9 for qemu-devel@nongnu.org; Sat, 16 Oct 2021 13:14:26 -0400 Received: by mail-pl1-x632.google.com with SMTP id v20so8422871plo.7 for ; Sat, 16 Oct 2021 10:14:21 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id l4sm2330281pfc.121.2021.10.16.10.14.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 16 Oct 2021 10:14:19 -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=PWp+DyK/MXQrYSGCBqie9Ey1GjpSYq8FmATujtXXGIU=; b=tI/HZQOM/f7v85O4Y420RHliIEJFRgOK86vAn9cQ8UzDdhd7FPsgLYlQDS1yQ4ogGl yNfojEyUZ1GQObmY2diwNuMzsnNhi6kjPP/3JM+m8Q6bJSsES+MihTrAtI+PW4woNrCX 16/oPLDy2s0v+vgb4cmVZ0Kvxur31Yc3U/MYKzh1TVPl0DznMfQdQ+FrALgIFObcssed 1NuShc1btS3lgEu/HLAcEUgy3sEVJwVGMhJb+rMzGXZiLIq5MIM4TbYLDJFVyNOqEeL9 sOe+SnA0t0cEduIePx1pk3aNbpLMYCKpBwB1tpenpI89tkMazr0ybEJbPLD5jHNwUsPi rL1A== 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=PWp+DyK/MXQrYSGCBqie9Ey1GjpSYq8FmATujtXXGIU=; b=QAOp1G6+Ii4hUpWmeK2DsgTFeKfZAGzKsOzEXwoCRQzqMWK/1HdGuvDa5+LcN8B30E RmyeSpf/6EF51jANnmHOPb2Kle5QMUM22I7E9VlOmQN6seZTRc/GJsYgEWTkzPdeVax0 evEsDJkKTnJKFQhc8ZDs8KV/8JpgoB1BA9ulJ2VzVDW34MSeD681B96uxod4YJ4Z/5li JloRvUQWp5GdfQiHGE+GZCAHC+XqJA4TCTLCaL43rDyWJJh5DL158NN2rIBqeR0P5fQC 8pvJvWvU1YFMkVE0Le2Ai8bsEfaLPh7sdAHzyZ9FPszYhDIp4YD4VFM5Qe46G5fdNgjV lVlQ== X-Gm-Message-State: AOAM533Zp1OrNRJ3XseDTaFAxN1U61aNseWIFDd3LxsNrB9klxcVHRK7 gEI7FwLfpksFcF5BULgt0wn6/YzejXSyeA== X-Google-Smtp-Source: ABdhPJyshR25TWEskYEY9XvRsM5CBsDaCqjh58315XIyybjVXbF64peTz85dUKheoS8YAoBGCCjMXw== X-Received: by 2002:a17:90a:1a42:: with SMTP id 2mr22170039pjl.202.1634404460321; Sat, 16 Oct 2021 10:14:20 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v3 06/14] target/riscv: Use REQUIRE_64BIT in amo_check64 Date: Sat, 16 Oct 2021 10:14:04 -0700 Message-Id: <20211016171412.3163784-7-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211016171412.3163784-1-richard.henderson@linaro.org> References: <20211016171412.3163784-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::632; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x632.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: qemu-riscv@nongnu.org, frank.chang@sifive.com, alistair.francis@wdc.com, fabien.portas@grenoble-inp.org, frederic.petrot@univ-grenoble-alpes.fr, zhiwei_liu@c-sky.com 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: 1634405105019100001 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. Reviewed-by: LIU Zhiwei Reviewed-by: Alistair Francis Signed-off-by: Richard Henderson --- 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 Wed May 22 02:14:33 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 1634404955724221.44109371112506; Sat, 16 Oct 2021 10:22:35 -0700 (PDT) Received: from localhost ([::1]:49684 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mbnOE-0001mn-J6 for importer@patchew.org; Sat, 16 Oct 2021 13:22:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60532) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mbnGL-00012S-TJ for qemu-devel@nongnu.org; Sat, 16 Oct 2021 13:14:27 -0400 Received: from mail-pg1-x532.google.com ([2607:f8b0:4864:20::532]:33751) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mbnGJ-0006Cg-AO for qemu-devel@nongnu.org; Sat, 16 Oct 2021 13:14:25 -0400 Received: by mail-pg1-x532.google.com with SMTP id j190so4947443pgd.0 for ; Sat, 16 Oct 2021 10:14:22 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id l4sm2330281pfc.121.2021.10.16.10.14.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 16 Oct 2021 10:14:21 -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=sefFRWXuAIwA9Hn9aMW9zKhBMiydf7kE/zMEjZquoTs=; b=FinqihW5F838ZFLUFQXSASvcn4kgsAE233XQSszP7T8g07v7J2OuLhq70Wn+G3rr0G FZerP1aDK4OYppbSaX4mp3Rgc3IWJ0fz+XwcKC6a07PMqc0D3mKUIYhMudGKma0BHIIw e3poNEMilyJxRwYxgtvV9DZnUvgMENiJA3A8IygfcIVPrbdueRWxn5u5DHAqs2OnD/j/ sVv1SFWoZm+EEpYnsPCW+ia2z/BL3cekWXXW0EJG8w4mAfv93vdVvjCLoVFceyjbX8xw bJnpPcJqxD+sb9TpH4ktYl/RZVHwzVpv+BWXdMAuPtvCjDuwepvbZa9ybHK7vN9WI5s6 f8BA== 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=sefFRWXuAIwA9Hn9aMW9zKhBMiydf7kE/zMEjZquoTs=; b=zB+3xzIaGN9+Bi7liQysYTDR/XrbxoT8aZM6buJlFhfiMrZSS0TYjKL1wkDx+lcPdf 2t0XTH7ZQIqfZD8RvR7zHdjjJsbTNy+ZvQ0CcpzVotu0C5eMyebLaM0BF67qyMOCkvmf l3ZfUSvIZIMkSh1OZQUcD7zx7Sat7JAOKuej0JEZl8+8q8JDHs4uVcIOV3DpLJ0GzvtP mHYq8F3wC1xUgIxLDJeCI0PCDGtFXsboZCMKJratHh4e2vbxzDQqtq+INHzQr242/AxO Si0IwIijB824000I+4bMOqclv9JD/Kgqnt2x4IDSG+D40AgMsvXPr+knvkKKo5Wf19vJ z9iw== X-Gm-Message-State: AOAM531ItrNGV+6g0q8MLQ2WKyVjHrE0OWONHN7nb01z0kIbVTIdSd5C UNSyFAgtmBBaIVrCLweSvZEfhPuemJi1IQ== X-Google-Smtp-Source: ABdhPJytipreVyb9xVymZdp06ulsQoSugUFsDDvJIR5XEIPoKDkdyqq45v+aLQtYD2PutXL9kphxbg== X-Received: by 2002:a63:b006:: with SMTP id h6mr6913792pgf.366.1634404461409; Sat, 16 Oct 2021 10:14:21 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v3 07/14] target/riscv: Properly check SEW in amo_op Date: Sat, 16 Oct 2021 10:14:05 -0700 Message-Id: <20211016171412.3163784-8-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211016171412.3163784-1-richard.henderson@linaro.org> References: <20211016171412.3163784-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: qemu-riscv@nongnu.org, frank.chang@sifive.com, alistair.francis@wdc.com, fabien.portas@grenoble-inp.org, frederic.petrot@univ-grenoble-alpes.fr, zhiwei_liu@c-sky.com 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: 1634404957888100001 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. Reviewed-by: LIU Zhiwei Reviewed-by: Alistair Francis Signed-off-by: Richard Henderson --- 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 Wed May 22 02:14:33 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 163440510183883.54093184337523; Sat, 16 Oct 2021 10:25:01 -0700 (PDT) Received: from localhost ([::1]:55874 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mbnQa-0005uh-Pa for importer@patchew.org; Sat, 16 Oct 2021 13:25:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60556) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mbnGM-00012V-LV for qemu-devel@nongnu.org; Sat, 16 Oct 2021 13:14:27 -0400 Received: from mail-pl1-x633.google.com ([2607:f8b0:4864:20::633]:46067) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mbnGJ-0006Da-FO for qemu-devel@nongnu.org; Sat, 16 Oct 2021 13:14:25 -0400 Received: by mail-pl1-x633.google.com with SMTP id s1so6612849plg.12 for ; Sat, 16 Oct 2021 10:14:23 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id l4sm2330281pfc.121.2021.10.16.10.14.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 16 Oct 2021 10:14:21 -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=eqYHtG7U6Thazj4+tYJjUHiaULEjGKehA71xuneoPd8=; b=lUftEJfOO9og9QvDBw6eIdRfZxb/xiM04IiPT402HFoPju69kJcnsqanyLDqgDL1Tf y2n0617pXghIbQSUT2BzNLZrx2z9bRDQrmcBc8iyZHRRoemxYs4Q3yV1DAtahQMfR3/k kDepu+KB1ZtESfa40gwmvRKUx6OFHm1iQgrB4zOe6pejD3Mamh1CF0WerCrniFDWmRri Gk/p4RtrSsITl2A5EZ3WO41cda9I52QdDyMIBSItCKLokmVxa5tarAGeve/8WH7rFZZL MC7JQ7l/d0czjccFEJ9Jzmn2OgZbTixlzNDKpTC3cZyoDbjCfIn2b2MPqOeLTTFHFlUE zHIA== 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=eqYHtG7U6Thazj4+tYJjUHiaULEjGKehA71xuneoPd8=; b=SVE5bYmneQpY/mm68drd+ecPqiBZ12Uv2lF/SQxy2ShXrJpoNhP9xgF5kK+DXXKoLp I6GsDvpKruFrrSClaGw/336iUruV61L/zx2XXjQcVtAyl2lgLE4WAi5nzefizR50nG3O PBWwvtoTGgLZOPwavvYVJdnJwGidyaZgxIf7O16rX9jwiueJsnaltVy3n0sc4ah+zRd+ kaenyjqPKkXJ186Z90ObB8k6AWoW6u+1feTGxz7teLYTjdl2GO3va8r2v/eo9nytV1JL agIX9U8AhOsJY4Wj//X6Yu7FTDG2q/SWDZo98HQD4hWhSD8dXvyrQMUW0qE3y4d/i/QB /qPA== X-Gm-Message-State: AOAM533eOkpALUwMvnq2KrgtpHTswVfexPne0DtoJc4jGeFzm/YnA9mV TxYnqFjHpXKUuQijJN91OfI4UqhbV1K+NA== X-Google-Smtp-Source: ABdhPJw6jLHMum4U97cIcswfFr+Ui9rEP0s+5JcHAM8x68mjK7dvaxNyRfnTMJXw3qr9qe9LcQbsow== X-Received: by 2002:a17:90b:350f:: with SMTP id ls15mr21592887pjb.220.1634404462190; Sat, 16 Oct 2021 10:14:22 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v3 08/14] target/riscv: Replace is_32bit with get_xl/get_xlen Date: Sat, 16 Oct 2021 10:14:06 -0700 Message-Id: <20211016171412.3163784-9-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211016171412.3163784-1-richard.henderson@linaro.org> References: <20211016171412.3163784-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::633; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x633.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: qemu-riscv@nongnu.org, frank.chang@sifive.com, alistair.francis@wdc.com, fabien.portas@grenoble-inp.org, frederic.petrot@univ-grenoble-alpes.fr, zhiwei_liu@c-sky.com 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: 1634405102806100003 Content-Type: text/plain; charset="utf-8" In preparation for RV128, replace a simple predicate with a more versatile test. Reviewed-by: LIU Zhiwei Reviewed-by: Alistair Francis Signed-off-by: Richard Henderson --- target/riscv/translate.c | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/target/riscv/translate.c b/target/riscv/translate.c index 7e7bb67d15..2624d65fc2 100644 --- a/target/riscv/translate.c +++ b/target/riscv/translate.c @@ -91,16 +91,19 @@ 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 +/* The word size for this machine mode. */ +static inline int __attribute__((unused)) get_xlen(DisasContext *ctx) +{ + return 16 << get_xl(ctx); +} + /* The word size for this operation. */ static inline int oper_len(DisasContext *ctx) { @@ -282,7 +285,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 +344,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 Wed May 22 02:14:33 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 1634405245218360.9739974401691; Sat, 16 Oct 2021 10:27:25 -0700 (PDT) Received: from localhost ([::1]:33670 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mbnSu-0001ak-3j for importer@patchew.org; Sat, 16 Oct 2021 13:27:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60628) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mbnGO-000182-HJ for qemu-devel@nongnu.org; Sat, 16 Oct 2021 13:14:28 -0400 Received: from mail-pf1-x433.google.com ([2607:f8b0:4864:20::433]:36599) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mbnGK-0006F1-QG for qemu-devel@nongnu.org; Sat, 16 Oct 2021 13:14:28 -0400 Received: by mail-pf1-x433.google.com with SMTP id m26so11203560pff.3 for ; Sat, 16 Oct 2021 10:14:24 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id l4sm2330281pfc.121.2021.10.16.10.14.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 16 Oct 2021 10:14:22 -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=fNVTuA82R0kiEF4GZGrepYKCpelSSEsHaIGIO3M+tdo=; b=sNNYkpmw+2cC3La18JUDGu6+eWpU5WXMQCdsPhfwPxNES50TKupaLS0l56Btny41pp yem58vwOmloPz9dLvifCvavrtr5Wx7yaqK24OGMnLDWzdY/UPtF7+PzAEDgsa6e2t5Jn mAag6cJNapQ1MfGigQhVVfZTA6VwZ8z06bkry+ZOjerwVAk7w39zW0iQmZsC8TlhKZ9I U9Ya+r8MgC/YkkOAkSDPyZUKOObWdG/7lPAzC+Rxz4Olx96jIhdARBc+9fwbplgXxKsb 40CaMLO/WRark289gQSVLLrX2XSXlW3WXDH+QgQTCIOsG8zAxuLJktAhinhttmUz2ShJ yPRA== 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=fNVTuA82R0kiEF4GZGrepYKCpelSSEsHaIGIO3M+tdo=; b=ciQsVdwGc4cZpzTWE6Dpc7R8Gt9o8AvKjFH21DeAr+NHDVNLKh88P8Qr9L8Xnw4y7S ND3PQYxJk6EV+qhBcg/chl87xdPVJoAfARTn8vsIxG24wgnOc0fbpMGpgEiF3EGAwkWH 6i9VPLh/pdzWxOk7uTt5PIrIXb4Ijbl8DUyAe1CVmtW2SZM7SdlETdtLgM+hpvKV7+8i U9haq8CDz36Ku71p4zPILZGi563Ikf2NoJgtRShjKZ6GXAMoVsjRdoHWUz+Fn3u2Z6Mt FPMzyZytRk6UxGnm9YOOOQIoQFFBzYNlbCFYKB5M115SH6emMQhkIeht6D29zdUTHR8Q 09Ig== X-Gm-Message-State: AOAM533tMwpPcyDm8Kl/8JqXqLIguTufvIpoCDrOoaqFOhTgOLgNRrqD gsRPFZct/UYyxCeI1C33AClNiAKk+erMIg== X-Google-Smtp-Source: ABdhPJwpF7jy2knWp4v0GUFnVehoAc358uCZjdJX/RO8WixY655yIIUeFY4DOWvkbwhj5VexEFdlrQ== X-Received: by 2002:aa7:88cb:0:b0:44d:4b3f:36c1 with SMTP id k11-20020aa788cb000000b0044d4b3f36c1mr18086156pff.76.1634404463235; Sat, 16 Oct 2021 10:14:23 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v3 09/14] target/riscv: Replace DisasContext.w with DisasContext.ol Date: Sat, 16 Oct 2021 10:14:07 -0700 Message-Id: <20211016171412.3163784-10-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211016171412.3163784-1-richard.henderson@linaro.org> References: <20211016171412.3163784-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::433; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x433.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: qemu-riscv@nongnu.org, frank.chang@sifive.com, alistair.francis@wdc.com, fabien.portas@grenoble-inp.org, frederic.petrot@univ-grenoble-alpes.fr, zhiwei_liu@c-sky.com 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: 1634405246123100001 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. Reviewed-by: Alistair Francis Signed-off-by: Richard Henderson --- 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 2624d65fc2..172eea3935 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; @@ -104,12 +104,17 @@ static inline int __attribute__((unused)) get_xlen(Di= sasContext *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. @@ -222,24 +227,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]; @@ -248,10 +263,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(); } } } @@ -412,7 +432,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; @@ -431,7 +451,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; @@ -455,7 +475,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); @@ -555,7 +575,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 @@ -579,9 +598,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 Wed May 22 02:14:33 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 1634405246527112.90438280183889; Sat, 16 Oct 2021 10:27:26 -0700 (PDT) Received: from localhost ([::1]:33774 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mbnSv-0001el-Ad for importer@patchew.org; Sat, 16 Oct 2021 13:27:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60622) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mbnGO-000177-96 for qemu-devel@nongnu.org; Sat, 16 Oct 2021 13:14:28 -0400 Received: from mail-pj1-x1031.google.com ([2607:f8b0:4864:20::1031]:52156) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mbnGM-0006Fy-9f for qemu-devel@nongnu.org; Sat, 16 Oct 2021 13:14:27 -0400 Received: by mail-pj1-x1031.google.com with SMTP id kk10so9439599pjb.1 for ; Sat, 16 Oct 2021 10:14:25 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id l4sm2330281pfc.121.2021.10.16.10.14.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 16 Oct 2021 10:14:23 -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=CMzXowYp45MDo1QL85pdXlIgOHzRQK8VX891q2+N84Y=; b=xzn+fScSeqBIWXSIdjyESljiycd1lSWc5NiiuteaqRWxZuW2BR47C5VvALeIvsmvG+ hEBl7RQ/qFNTbeZjzwBF/CqXRa+rjiF6Wnn12PgR4AXLkpS9bHiUEpeBnYjaU+/QUAJU TtWEzaMPKruDpZjsxZBDtguzWXl1IJCSg2IS+7IJaC0hU90YwNAxC+pe9+/YCqajATDm TrGyG8WNa9P/T29ZF4br4xWvf+KlNlszWlT/oWXQsFVBzfuu5wUK6AJtNvNIRYa7MwGr EozO0xgn1UKi+aax2OqQ1W3sWvHXkuEPn6BVLL4iVbeVVaZaLkfWPXONaiOfwpF6+ZSa Ka9A== 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=CMzXowYp45MDo1QL85pdXlIgOHzRQK8VX891q2+N84Y=; b=mdHavmws7Hd+LeCw2PzU0hM+kBUPxaXq9tx/+Dcsyk09uW97O4rDrpxg6T5ZHencF/ kORyWItOxRRDfXLlMaEvrWU8/kVxbQ7iIq/7qQTBA6y4KHXRrINQSjZwCp0Z+YZ5+60+ poXVDq5wnTy9pFvbRW+cpiUme1ZSVyfG0bjZthvlUntYo0ZgN0snv7HldyVVApvou7Pj HzBcA+CyZdlvyD7ptAdjZ+Z1dp/4VthUIEa2ZtwKbfFKgJGidyIC1ni7u/LkKd3UgbKr yPjdeNfDX5OoriFijv8yNcDV17sQE8u+9nfHaIBCvfvKxY9gVC8T7wwo9f+rcbnxZ/qn UYxg== X-Gm-Message-State: AOAM531gbF2mi/l14xEjAr5DbXUw4+LDHWyqa11aTHsY0VIf6HaC/x4r aNArNUYuWKXZiDhtEE+AmPjCxn7j/qWKzA== X-Google-Smtp-Source: ABdhPJxhaehDyiyy+24AxT/h6OMGmclNNVTLqix/eGl7gQx8mwJyoxyFuL7L9V7pJv4lQvYdFHgL1w== X-Received: by 2002:a17:90a:3e0c:: with SMTP id j12mr36206653pjc.23.1634404464266; Sat, 16 Oct 2021 10:14:24 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v3 10/14] target/riscv: Use gen_arith_per_ol for RVM Date: Sat, 16 Oct 2021 10:14:08 -0700 Message-Id: <20211016171412.3163784-11-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211016171412.3163784-1-richard.henderson@linaro.org> References: <20211016171412.3163784-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: qemu-riscv@nongnu.org, frank.chang@sifive.com, alistair.francis@wdc.com, fabien.portas@grenoble-inp.org, frederic.petrot@univ-grenoble-alpes.fr, zhiwei_liu@c-sky.com 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: 1634405248105100003 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 Reviewed-by: Alistair Francis --- 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 172eea3935..8f5f39d143 100644 --- a/target/riscv/translate.c +++ b/target/riscv/translate.c @@ -428,6 +428,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 Wed May 22 02:14:33 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 1634405368165323.5435365846391; Sat, 16 Oct 2021 10:29:28 -0700 (PDT) Received: from localhost ([::1]:38056 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mbnUt-0004WI-3y for importer@patchew.org; Sat, 16 Oct 2021 13:29:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60626) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mbnGO-00017a-Dp for qemu-devel@nongnu.org; Sat, 16 Oct 2021 13:14:28 -0400 Received: from mail-pg1-x532.google.com ([2607:f8b0:4864:20::532]:39899) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mbnGM-0006Gl-Jr for qemu-devel@nongnu.org; Sat, 16 Oct 2021 13:14:27 -0400 Received: by mail-pg1-x532.google.com with SMTP id g184so11679179pgc.6 for ; Sat, 16 Oct 2021 10:14:26 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id l4sm2330281pfc.121.2021.10.16.10.14.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 16 Oct 2021 10:14:24 -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=VHU6Zq495CGWvucF4SFdns/LDCGAVtayMjBnfRKFC6c=; b=vqN5B88gt4UxlDLREu1jcSDEbUOGA2R6NktQT7Pt4xW+PBm7gMFevvzSH39AyUEUaW HRcIkCPayRz718iOu36b7wkj61s95TqWfb0zcCF4SX0udn5WyubeeRwckE9+IBaynMNh o77/rxL/ySA7FVn+LVn+9rS0jsUbjovAcNGGopa42pkoOeWRBywNo7ypnBtskEWkXDUs VSf9mnMxOw6OD7pGz1/a+sKBvrudfCVpB+Bt7Mkv0JcDBZkJKp/nDi9B7IVAw6aiQBN7 rEXyYtpN/yKjC2SXqX6oYH4SyyppYcgdxevBGv5dpSlbmRGRt2vG8g44wdCis9gmgn2j IxNw== 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=VHU6Zq495CGWvucF4SFdns/LDCGAVtayMjBnfRKFC6c=; b=iKDiLfdUXK8L+9cbjKSYskuqjpXpTqRj9hLZ8nEM3E8beBUmiAmAY0D/bUU8LRmt0Y tuGvNJ/UmxdisU4J8OHOGEzFGYIx3RGnB7E1UejKbrKc6NlylGRqrkrEKcgeffcanPBe 6uEDMNIXd5XskgX3RetsiHA0+2axMDanblPKTQZQK/Nmj3A519ock2I7rfdHDkaTwdnn Lpk3Gsh7C0Us4YQjBj0r82IirzNRAhyERidDahMT2zamr2U3iaZpfs0WX0Jf7uEAb4+7 rLVuSGOkMMx1YbE3V+C+C9agaTEvyqgNb7bmv4bKn6tvoj28TVLfMMSF9QSiJ6hkCG5f mSCg== X-Gm-Message-State: AOAM532OCToXs1NRd8WrhftZ2XQCxo1lS/N+EZVBPDD0TdkXKlNrolnr EOfUL+5jKYWwM8BP5Knyts0UVtUX8Mr/PQ== X-Google-Smtp-Source: ABdhPJwfq3uSsS1sBvbwMGIDdH1h7UHr9gkp5F+2YE6Xu+lkmIUdzqtW0CocWBlq77twn4HLr7bn5g== X-Received: by 2002:a62:7bd5:0:b0:44c:72f5:5da4 with SMTP id w204-20020a627bd5000000b0044c72f55da4mr18755681pfc.48.1634404465337; Sat, 16 Oct 2021 10:14:25 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v3 11/14] target/riscv: Adjust trans_rev8_32 for riscv64 Date: Sat, 16 Oct 2021 10:14:09 -0700 Message-Id: <20211016171412.3163784-12-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211016171412.3163784-1-richard.henderson@linaro.org> References: <20211016171412.3163784-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: qemu-riscv@nongnu.org, frank.chang@sifive.com, alistair.francis@wdc.com, fabien.portas@grenoble-inp.org, frederic.petrot@univ-grenoble-alpes.fr, zhiwei_liu@c-sky.com 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: 1634405369501100001 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. Acked-by: Alistair Francis Reviewed-by: LIU Zhiwei Signed-off-by: Richard Henderson --- 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 Wed May 22 02:14:33 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 16344054978571014.4341893892725; Sat, 16 Oct 2021 10:31:37 -0700 (PDT) Received: from localhost ([::1]:42284 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mbnWy-0007JP-SQ for importer@patchew.org; Sat, 16 Oct 2021 13:31:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60714) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mbnGS-0001Bw-LA for qemu-devel@nongnu.org; Sat, 16 Oct 2021 13:14:32 -0400 Received: from mail-pf1-x435.google.com ([2607:f8b0:4864:20::435]:45576) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mbnGN-0006Hr-Hp for qemu-devel@nongnu.org; Sat, 16 Oct 2021 13:14:30 -0400 Received: by mail-pf1-x435.google.com with SMTP id f11so7300955pfc.12 for ; Sat, 16 Oct 2021 10:14:27 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id l4sm2330281pfc.121.2021.10.16.10.14.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 16 Oct 2021 10:14:25 -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=MhO46tZFuMUDidCZq/rrb5TP1fNwRv/vtgGGT7XUyfo=; b=MwyCMD+R9QJO6NO2aBrND2+OUnn6U70uu9mHkFVHPqaXjV+JMx7kesTzqbZecUFwLx IgglMkeX72y5qTGXbRGsaT3JMD1U+pLuOoTfgXM/Gmle0wMFjXUPXnTKfg6nIDH4TJow Kp0wZ4JEQnMu9Zr8Zyg1w/VucDEbHJjq+G9GcPMU7vfpvgd841asYRJucKRDv6mHWaui e4wvMF4e9WKIKPDW1D7L5Zhm5Iga+hQvnmuoW6MfWbTqAmzTSYiLXghV/8bgNwkuJx14 wJ2FTHbgg1cMRR7BNvq2NpL9Mt6ipVFIqe5GSB+9t7Sht4zIeO/n4KUNg68xreHkF3IZ SlPw== 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=MhO46tZFuMUDidCZq/rrb5TP1fNwRv/vtgGGT7XUyfo=; b=PoKi0Bu2XifPq9Id2UIe3vmQJYF9fLYOqOH12bPg/GNqZ9p8+BgGgzhGOfQnxmVAHf zbe267wKSMQFtfb/KUwAmbQrEC4+C71EHr4WcQl0iSRY7o2qEDCEE4gzcIq9rIg8x2Tj lTXP2Sz7Ce9Ss3WGv/kqbBWYmIK0ldcmLD+9lVfhtHVU4sRyCmnwldvEHrqgWOLKPD/e z9AX+fErOd/mfQC5CpsfJMsXD7tPw8kooMcHd7SiKkdA1KQJybBldvN52Gw8/OPWFs1Q 6tLRE/0q9rZ5MZ9NTpRPbBpJ4eFTrgn7WfXKoHNTqIoZ9NYQdezTHlibHhwiHyR0dE0J USwQ== X-Gm-Message-State: AOAM533k3GOsD9iVqP/FKoggrElFzuOR2Z1qhfZf7AlrRuQjvwB31q51 kSxXc/pBW/CXHEBrGYcoRQJES1yK4WeDiQ== X-Google-Smtp-Source: ABdhPJx9i1n60v5jM4MODxmRa8Txr0QDeNZNYZxmpwdwjzqLPoAyOqV+/CSruQ5BDVi10lLVKmBF1Q== X-Received: by 2002:aa7:9f92:0:b0:44d:bd1:98b2 with SMTP id z18-20020aa79f92000000b0044d0bd198b2mr18900292pfr.82.1634404466142; Sat, 16 Oct 2021 10:14:26 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v3 12/14] target/riscv: Use gen_unary_per_ol for RVB Date: Sat, 16 Oct 2021 10:14:10 -0700 Message-Id: <20211016171412.3163784-13-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211016171412.3163784-1-richard.henderson@linaro.org> References: <20211016171412.3163784-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::435; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x435.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: qemu-riscv@nongnu.org, frank.chang@sifive.com, alistair.francis@wdc.com, fabien.portas@grenoble-inp.org, frederic.petrot@univ-grenoble-alpes.fr, zhiwei_liu@c-sky.com 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: 1634405499705100001 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 Reviewed-by: Alistair Francis --- 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 8f5f39d143..7286791c0f 100644 --- a/target/riscv/translate.c +++ b/target/riscv/translate.c @@ -511,6 +511,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 Wed May 22 02:14:33 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 1634405378454987.5227911257492; Sat, 16 Oct 2021 10:29:38 -0700 (PDT) Received: from localhost ([::1]:38606 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mbnV3-0004rx-Eb for importer@patchew.org; Sat, 16 Oct 2021 13:29:37 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60724) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mbnGT-0001F5-BM for qemu-devel@nongnu.org; Sat, 16 Oct 2021 13:14:35 -0400 Received: from mail-pg1-x52c.google.com ([2607:f8b0:4864:20::52c]:39894) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mbnGO-0006JC-MG for qemu-devel@nongnu.org; Sat, 16 Oct 2021 13:14:33 -0400 Received: by mail-pg1-x52c.google.com with SMTP id g184so11679270pgc.6 for ; Sat, 16 Oct 2021 10:14:27 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id l4sm2330281pfc.121.2021.10.16.10.14.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 16 Oct 2021 10:14:26 -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=NqaZYwMNZOn8YEHdsz2WHA25s2Dfar4hRERGPbJZMrk=; b=CvE6xoXaCt1vsxTPhQ9jH9JHCo6eDbGfnPsNMFCJrAuCn8/TdNyhfuGqJ2PxttI3re Z0SAbkOiXwjTKJxotaL8+/asN5U8iOWJ5gdIf6jN56h2TJJjhthtPY5D5XkE9aFg1LFY /Fkh0nQByODhs/RauW4iXo4hkPvZWlmJgPQEu8SXoXyF2yd20uMxyvBWgdCICi9zSgkk Aljj7brMe8Em64jdFYY+pxVIMwsenlztfHubNCrJV/ly1/zA3Zz94Hy7808XM2YBywLG CnumOXZ1b3Q10W2rHlGQlL/6uDcZnyNaW+Bjvo5vKpuuiWpTHBqVYlH+DyaZ8GiH3wdg ygeg== 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=NqaZYwMNZOn8YEHdsz2WHA25s2Dfar4hRERGPbJZMrk=; b=xaZO4jbcq4pdOe90Ahc+je3n2/YRa8hZL49GbgrZeaSkxi/oWUUO04uoZbSsn7r4Q2 VPLuDPlh5uqEFJFbCIKzR5m5RJmAObEGtND5KAAysozOhOXBluNcC1Z52JWl3ZZvoold vJIMUM5mEfKP416QVtcX62Lz7xCwoFdsKPtc66q2fb7q0X+yaR9tSg1Cl4sMxlY9CXVW YAL1OnSpNFs6+UfNf01fkww9TlTGoAA4/GrN/zOlpJGidBvh4TOZxdTPNzXhW4A7mf5A 2/JoBTwFxQJV+JmfxXx3ojgcfUg9qmtzd0JO5UgIODGG8o/17+QFub01Y0dcW14XKHXf YEqA== X-Gm-Message-State: AOAM532a977FFDfnNwQpR83DDmhz+2uBgj5KceIpYpIEceqV01QupuSE mrI3ji9hVMxqb66+hZ3HUXj9hkW/cshJ8Q== X-Google-Smtp-Source: ABdhPJwHkt4cxkZbUG2z2c8ZH4hDCOAD5ZeVv9e5CENxutYWTNZ3rsytxB7AL7xuFY9TmlCiCfHCGg== X-Received: by 2002:a05:6a00:24c1:b0:44d:3047:4229 with SMTP id d1-20020a056a0024c100b0044d30474229mr18602370pfv.70.1634404467135; Sat, 16 Oct 2021 10:14:27 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v3 13/14] target/riscv: Use gen_shift*_per_ol for RVB, RVI Date: Sat, 16 Oct 2021 10:14:11 -0700 Message-Id: <20211016171412.3163784-14-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211016171412.3163784-1-richard.henderson@linaro.org> References: <20211016171412.3163784-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::52c; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52c.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=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: qemu-riscv@nongnu.org, frank.chang@sifive.com, alistair.francis@wdc.com, fabien.portas@grenoble-inp.org, frederic.petrot@univ-grenoble-alpes.fr, zhiwei_liu@c-sky.com 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: 1634405379945100001 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 Reviewed-by: Alistair Francis --- 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 7286791c0f..0b3da060fd 100644 --- a/target/riscv/translate.c +++ b/target/riscv/translate.c @@ -463,6 +463,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)) { @@ -499,6 +515,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 From nobody Wed May 22 02:14:33 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 1634405612018726.303760708587; Sat, 16 Oct 2021 10:33:32 -0700 (PDT) Received: from localhost ([::1]:44736 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mbnYp-0000bi-1M for importer@patchew.org; Sat, 16 Oct 2021 13:33:31 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:60722) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mbnGT-0001Eq-AP for qemu-devel@nongnu.org; Sat, 16 Oct 2021 13:14:35 -0400 Received: from mail-pg1-x531.google.com ([2607:f8b0:4864:20::531]:36651) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1mbnGP-0006Jv-Id for qemu-devel@nongnu.org; Sat, 16 Oct 2021 13:14:32 -0400 Received: by mail-pg1-x531.google.com with SMTP id 75so11708447pga.3 for ; Sat, 16 Oct 2021 10:14:29 -0700 (PDT) Received: from localhost.localdomain ([71.212.134.125]) by smtp.gmail.com with ESMTPSA id l4sm2330281pfc.121.2021.10.16.10.14.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 16 Oct 2021 10:14:27 -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=WcO69y7fRhIPjDl33xuVTBWJJpv6P5w5RfyOrurLbZc=; b=F773o8sLHBLeoJHjJp0Bw5QUo6Ibx0XoFd8Lpgav+p5RoZt4swX/rZbXNosFgX6FTL rXmwH23plcWzDrTL4zYdjC9vNe09OSsUsHZ2XxRbxXhC5Ck/QyPZutghSvW2JykDKwOE BLsDWKFSa5M7oBcvxud2jSgGY/TQqnjB1AozduOoPooDXwUZzTUDs+9WEGyU17MUEzs2 FSbkX56Q8Rxy1e62t8O9FHRpbsVA/Fqyq9OFuQMnErZt4QNswMZAzBysAJjU7yAnVE9G p9W4ICLDb5d+SLcM5JYZICPmCX/Ts4QwHJFzD5hgdOt1rsPhAh2/TpX2YZgKjk8QtV0H Ta8A== 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=WcO69y7fRhIPjDl33xuVTBWJJpv6P5w5RfyOrurLbZc=; b=phTcHtWLVM2pvHpQ39v5vu2SkKIhO+RA5MgHCFOIkLF6HEQhzeKA0cz5KamKnbh2CV U+JcmEtsXm2VJa5o51bCYfSWQe9HPkp9s7FKDu0riXFIPIuiZjjuQzESdektSTBOH479 XRV3f7L/sDy7nF8EC3nO62it0FOlIftF6knMTVFNQMhIgwtB//zodkylwBlKv+epbMg1 WcP17ZMqqgiotlwch+Ncob4rtmsnvFqJ7+mJwW9Yl+hJ9+HZ2mNJdc7T42F53wXOXwVI FHqscnOfn0M+xH7wmNDfLDoAbqUz8Shz6qkIoHTtsZunDoi16kDfIkp2kl9pvDLRCyxq A6Rg== X-Gm-Message-State: AOAM531Ew6P7UJH9Lb7f42YDXaEpy5TKcPI7rtsxLLyAFMKjZYkyk9/J +ElhcIbSqxP6kQW00m27CZbNsGvhCJRPUw== X-Google-Smtp-Source: ABdhPJyrFp7BX1qnpguWDLYHfsZby4JmcqE15D2/ilW+oYSInOp57w+qOGrlFelJdE1yqKYJbynkfw== X-Received: by 2002:aa7:8882:0:b0:44c:9270:1cba with SMTP id z2-20020aa78882000000b0044c92701cbamr18932404pfe.26.1634404468120; Sat, 16 Oct 2021 10:14:28 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v3 14/14] target/riscv: Compute mstatus.sd on demand Date: Sat, 16 Oct 2021 10:14:12 -0700 Message-Id: <20211016171412.3163784-15-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211016171412.3163784-1-richard.henderson@linaro.org> References: <20211016171412.3163784-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::531; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x531.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: qemu-riscv@nongnu.org, frank.chang@sifive.com, alistair.francis@wdc.com, fabien.portas@grenoble-inp.org, frederic.petrot@univ-grenoble-alpes.fr, zhiwei_liu@c-sky.com 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: 1634405613657100001 Content-Type: text/plain; charset="utf-8" The position of this read-only field is dependent on the current cpu width. Rather than having to compute that difference in many places, compute it only on read. Signed-off-by: Richard Henderson --- target/riscv/cpu_helper.c | 3 +-- target/riscv/csr.c | 37 ++++++++++++++++++++++--------------- target/riscv/translate.c | 5 ++--- 3 files changed, 25 insertions(+), 20 deletions(-) diff --git a/target/riscv/cpu_helper.c b/target/riscv/cpu_helper.c index 429afd1f48..0d1132f39d 100644 --- a/target/riscv/cpu_helper.c +++ b/target/riscv/cpu_helper.c @@ -185,10 +185,9 @@ bool riscv_cpu_fp_enabled(CPURISCVState *env) =20 void riscv_cpu_swap_hypervisor_regs(CPURISCVState *env) { - 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; + MSTATUS64_UXL; bool current_virt =3D riscv_cpu_virt_enabled(env); =20 g_assert(riscv_has_ext(env, RVH)); diff --git a/target/riscv/csr.c b/target/riscv/csr.c index c4a479ddd2..69e4d65fcd 100644 --- a/target/riscv/csr.c +++ b/target/riscv/csr.c @@ -477,10 +477,28 @@ static RISCVException read_mhartid(CPURISCVState *env= , int csrno, } =20 /* Machine Trap Setup */ + +/* We do not store SD explicitly, only compute it on demand. */ +static uint64_t add_status_sd(RISCVMXL xl, uint64_t status) +{ + if ((status & MSTATUS_FS) =3D=3D MSTATUS_FS || + (status & MSTATUS_XS) =3D=3D MSTATUS_XS) { + switch (xl) { + case MXL_RV32: + return status | MSTATUS32_SD; + case MXL_RV64: + return status | MSTATUS64_SD; + default: + g_assert_not_reached(); + } + } + return status; +} + static RISCVException read_mstatus(CPURISCVState *env, int csrno, target_ulong *val) { - *val =3D env->mstatus; + *val =3D add_status_sd(riscv_cpu_mxl(env), env->mstatus); return RISCV_EXCP_NONE; } =20 @@ -498,7 +516,6 @@ static RISCVException write_mstatus(CPURISCVState *env,= int csrno, { uint64_t mstatus =3D env->mstatus; uint64_t mask =3D 0; - int dirty; =20 /* flush tlb on mstatus fields that affect VM */ if ((val ^ mstatus) & (MSTATUS_MXR | MSTATUS_MPP | MSTATUS_MPV | @@ -520,12 +537,7 @@ static RISCVException write_mstatus(CPURISCVState *env= , int csrno, =20 mstatus =3D (mstatus & ~mask) | (val & mask); =20 - dirty =3D ((mstatus & MSTATUS_FS) =3D=3D MSTATUS_FS) | - ((mstatus & MSTATUS_XS) =3D=3D MSTATUS_XS); - 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); + if (riscv_cpu_mxl(env) =3D=3D MXL_RV64) { /* 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); @@ -798,13 +810,8 @@ static RISCVException read_sstatus(CPURISCVState *env,= int csrno, { target_ulong mask =3D (sstatus_v1_10_mask); =20 - if (riscv_cpu_mxl(env) =3D=3D MXL_RV32) { - mask |=3D SSTATUS32_SD; - } else { - mask |=3D SSTATUS64_SD; - } - - *val =3D env->mstatus & mask; + /* TODO: Use SXL not MXL. */ + *val =3D add_status_sd(riscv_cpu_mxl(env), env->mstatus & mask); return RISCV_EXCP_NONE; } =20 diff --git a/target/riscv/translate.c b/target/riscv/translate.c index 0b3da060fd..1d6bf01a48 100644 --- a/target/riscv/translate.c +++ b/target/riscv/translate.c @@ -305,7 +305,6 @@ 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 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. */ @@ -313,7 +312,7 @@ static void mark_fs_dirty(DisasContext *ctx) =20 tmp =3D tcg_temp_new(); tcg_gen_ld_tl(tmp, cpu_env, offsetof(CPURISCVState, mstatus)); - tcg_gen_ori_tl(tmp, tmp, MSTATUS_FS | sd); + tcg_gen_ori_tl(tmp, tmp, MSTATUS_FS); tcg_gen_st_tl(tmp, cpu_env, offsetof(CPURISCVState, mstatus)); tcg_temp_free(tmp); } @@ -324,7 +323,7 @@ static void mark_fs_dirty(DisasContext *ctx) =20 tmp =3D tcg_temp_new(); tcg_gen_ld_tl(tmp, cpu_env, offsetof(CPURISCVState, mstatus_hs)); - tcg_gen_ori_tl(tmp, tmp, MSTATUS_FS | sd); + tcg_gen_ori_tl(tmp, tmp, MSTATUS_FS); tcg_gen_st_tl(tmp, cpu_env, offsetof(CPURISCVState, mstatus_hs)); tcg_temp_free(tmp); } --=20 2.25.1