From nobody Wed May 15 04:56:04 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1683104270; cv=none; d=zohomail.com; s=zohoarc; b=NuSBBVpXzDeiam+eCJRLeTw902AhqXPhKxQ00Gg0odBSKR1A+7m4QDWS0ixy0ljtXGZD3g7trZ/sSJgXIx9eB7Joh0WHESc7nSYLhCEEHY13Iuy/wCFypRu/ey3HIHzzrVW4+SqyNioaZ/qabEZ9e5hot+Scul4wwgNXfCTUhj0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1683104270; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=wlOi6l8UvEFBC2jKg68o28dlg9N04vqro4+oQuR1jyc=; b=Imfoi3NErUIg9XSMZ7BD8WojbwVLfDWiDRWzsbPT9jZ4bTdyf5jiM0iWAg0edo6cKmdnWS436RE1RyPzusjjRDHxR4wwK/441kzAovJC4hhsnB/7gVxrSn4mgmDrWyL+eot1v6OIr6hr+OpFsFy8Ze95xc5WBkGJd+r27s9e+Wk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 168310426997352.1492955479539; Wed, 3 May 2023 01:57:49 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pu8IK-0000vU-5g; Wed, 03 May 2023 04:57:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pu8II-0000u0-9J for qemu-devel@nongnu.org; Wed, 03 May 2023 04:57:02 -0400 Received: from mail-wm1-x32f.google.com ([2a00:1450:4864:20::32f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pu8IG-0006bY-O5 for qemu-devel@nongnu.org; Wed, 03 May 2023 04:57:02 -0400 Received: by mail-wm1-x32f.google.com with SMTP id 5b1f17b1804b1-3f19323259dso47986445e9.3 for ; Wed, 03 May 2023 01:57:00 -0700 (PDT) Received: from stoup.Home ([2a02:c7c:74db:8d00:c01d:9d74:b630:9087]) by smtp.gmail.com with ESMTPSA id f26-20020a7bcd1a000000b003ef5f77901dsm1191307wmj.45.2023.05.03.01.56.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 May 2023 01:56:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1683104219; x=1685696219; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=wlOi6l8UvEFBC2jKg68o28dlg9N04vqro4+oQuR1jyc=; b=svXp2NcW/2K4VZhBDFcI+yZXo6hyeUZO6F1/DTPbMHit4yCFq0bHikXV80ftsYAgx+ kFYzdRQNK/OYSLaKwj3jsfv7AWCHjI6auejMdyQgrH+bL4urFLC5WKI+JL3S9key2omx P+DeQTEoCkTYqQOLUh8gZon1LUqgWqS9oiEofwO9cfMfr7fC8rd/sTr2Z7w8C6VulEck zGavDp11A2+LDRITZeyUdX6MTwCY4/3JpmOlxRFu3s2Q+MBRcg42buzaMjGnnKrnu+Qf lvDq2CfQ7S3Ya4DqY7j05Uap+5+E5Q0OCjpjuB59kZtgjg3YxRJtDY9bkgU1RXbB0++o Dbpg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1683104219; x=1685696219; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=wlOi6l8UvEFBC2jKg68o28dlg9N04vqro4+oQuR1jyc=; b=M6tTIOBRk6/8Nmj3rOfSOwqsION59zat9mz8ToMOMst6/ToOjSWmM78mQGDR2ESJs2 oPK+fIB8OtJd050K1S597okZlhNdMobM4xujj+g2CefdJRXwsJoeCDj6ax4tlnf1Pn/J j/FySUkNdQ+5lZTfNL8xwe/5iDBGw0bEquOl+7jHWNxNYYfmEtcKqBNThBWtqlp0NnRz 0LCdNRftYF9PTRORdGXilzKaymQoAMwQECq0HoGcR1OxyJImZ5NP+HqLTz5j13YUYW1Z Wbq3kyquQpJb7v4puICv6Zr5fl/bQDaTaDDO8EgA5hvbGO2+lqZxGYDEm9M/3qwJq/4o uG0A== X-Gm-Message-State: AC+VfDzgOnv/Gz1/q6w9aKmBeqU4CzHuDij2OcRi6Oj8sAu/v4/+w7kf Nkn0hG7cqa0nnxQiHpDm8KkDXBsWG83QTAePN0eNaA== X-Google-Smtp-Source: ACHHUZ5cWxLrLmM0FjHmJsd4wZCZkKY606ezGdt+6Twkbo3Eaafmu9xK2tYdBW0VgLZecPlOG6odzA== X-Received: by 2002:a7b:cc1a:0:b0:3f0:9564:f4f6 with SMTP id f26-20020a7bcc1a000000b003f09564f4f6mr14414826wmh.1.1683104218884; Wed, 03 May 2023 01:56:58 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: dbarboza@ventanamicro.com Subject: [PATCH 01/11] disas/riscv: Decode czero.{eqz,nez} Date: Wed, 3 May 2023 09:56:47 +0100 Message-Id: <20230503085657.1814850-2-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230503085657.1814850-1-richard.henderson@linaro.org> References: <20230503085657.1814850-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=2a00:1450:4864:20::32f; envelope-from=richard.henderson@linaro.org; helo=mail-wm1-x32f.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, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1683104271295100001 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson Acked-by: Alistair Francis Reviewed-by: Daniel Henrique Barboza --- disas/riscv.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/disas/riscv.c b/disas/riscv.c index d6b0fbe5e8..c0a8b1006a 100644 --- a/disas/riscv.c +++ b/disas/riscv.c @@ -935,6 +935,8 @@ typedef enum { rv_op_vsetvli =3D 766, rv_op_vsetivli =3D 767, rv_op_vsetvl =3D 768, + rv_op_czero_eqz =3D 769, + rv_op_czero_nez =3D 770, } rv_op; =20 /* structures */ @@ -2066,7 +2068,9 @@ const rv_opcode_data opcode_data[] =3D { { "vsext.vf8", rv_codec_v_r, rv_fmt_vd_vs2_vm, NULL, rv_op_vsext_vf8, = rv_op_vsext_vf8, 0 }, { "vsetvli", rv_codec_vsetvli, rv_fmt_vsetvli, NULL, rv_op_vsetvli, rv= _op_vsetvli, 0 }, { "vsetivli", rv_codec_vsetivli, rv_fmt_vsetivli, NULL, rv_op_vsetivli= , rv_op_vsetivli, 0 }, - { "vsetvl", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, rv_op_vsetvl, rv_op_v= setvl, 0 } + { "vsetvl", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, rv_op_vsetvl, rv_op_v= setvl, 0 }, + { "czero.eqz", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, + { "czero.nez", rv_codec_r, rv_fmt_rd_rs1_rs2, NULL, 0, 0, 0 }, }; =20 /* CSR names */ @@ -2792,6 +2796,8 @@ static void decode_inst_opcode(rv_decode *dec, rv_isa= isa) case 45: op =3D rv_op_minu; break; case 46: op =3D rv_op_max; break; case 47: op =3D rv_op_maxu; break; + case 075: op =3D rv_op_czero_eqz; break; + case 077: op =3D rv_op_czero_nez; break; case 130: op =3D rv_op_sh1add; break; case 132: op =3D rv_op_sh2add; break; case 134: op =3D rv_op_sh3add; break; --=20 2.34.1 From nobody Wed May 15 04:56:04 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1683104352; cv=none; d=zohomail.com; s=zohoarc; b=W0uffyYa2WCot63VSnYz735SY17dK0swkpzr/5aRI8kwo7UofgYW+EUYVVrTGzJzrKyP3PZrsAytTq4sIfu6c/iMSCaYiMIYLO45w6Mdjl5LxDlKNkyM1RZ4534qQO+MdcBulNu500RLNQSp4XchOXGFTuXaXr7QhxDyH75GA7w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1683104352; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=JAkfbBkSUOwDhr6+r3Ga4m96gVYkHruiWiQ6F9i3jdI=; b=lHMii3DNJkfFp9U7PKOKvzM5yh5lRv65L9rg485gIJ84DXFgyfo41fZ1hNdTmf0vUTmcMo7gy0Rp20DNUPuMvVUvNcyVBWK5ydkp7WE8mqOd9EYxsiuylE/ZKGirYMjdYEvoeQ5Ulh0vlhSAmhfufF8R+aee3apyXQVyTuZEKqY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1683104352270602.2658269425327; Wed, 3 May 2023 01:59:12 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pu8IL-0000vn-11; Wed, 03 May 2023 04:57:05 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pu8IJ-0000uP-D0 for qemu-devel@nongnu.org; Wed, 03 May 2023 04:57:03 -0400 Received: from mail-wr1-x42a.google.com ([2a00:1450:4864:20::42a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pu8IG-0006bg-Qy for qemu-devel@nongnu.org; Wed, 03 May 2023 04:57:03 -0400 Received: by mail-wr1-x42a.google.com with SMTP id ffacd0b85a97d-3062db220a3so2183316f8f.0 for ; Wed, 03 May 2023 01:57:00 -0700 (PDT) Received: from stoup.Home ([2a02:c7c:74db:8d00:c01d:9d74:b630:9087]) by smtp.gmail.com with ESMTPSA id f26-20020a7bcd1a000000b003ef5f77901dsm1191307wmj.45.2023.05.03.01.56.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 May 2023 01:56:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1683104219; x=1685696219; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=JAkfbBkSUOwDhr6+r3Ga4m96gVYkHruiWiQ6F9i3jdI=; b=iV4b8AM2+JgZiIobiUGwd1Aoo7aeeFVpVFR8yzPsuwxsb06dnaFqb01vLh9Crhhs00 P/H8Y0ADUutn9ZXVD/ycHm90Yp0pPm/epG6VZPuYOvS0fGZ54t7VNXyEtiLKE9/yhPYS /EIzucY6rEYssbdFsiMNSfS3uK+3Dim5kNNoUOhPFYqIRytKbkoiT79wK+CvQyxqmoaY PrysikOmDnp4YA2M8YYid/j0maYXUDX99vXIofBOV4+Y4Ypiw6n5lriAXQbv/179qAUa Dq2ur0VJbEkNb5OXgMa+xatIy+em4lnduAG/V922bmfShDZW+/MmBRxMhPjMV3lE1ju1 P5DQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1683104219; x=1685696219; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=JAkfbBkSUOwDhr6+r3Ga4m96gVYkHruiWiQ6F9i3jdI=; b=ZCydpJtHUrOAJAI9p36AEVLi8FG2Kr1gTeQxKKqPpEAxy7LUNPYWOefXb/bW24c3RI Mad9gFJIPWLO1MYL/SJceZYXfy0wiMLPp2Ez9bNncJfp/yasl+T3Tz7ppwSC3rYCuopJ +5pCmYidL/xa6Y22tYCHZs8Hz34EFvTyo+3JwnY8BKcL20S0FIVnzMTPBCGR7OrN7EQ1 TIf0h+ZPCW0IbST3rbvfipajGgc9dnSehqag6BzOmaVWRR/qPJPP+RWLvUAkmQ9+ilMH 3sFSg75a5bN1myk+s7axrHAjHpHwUYyy9oN0QUwFmGg3hJoX1mZNziteLDcKhmyc0CB4 XguA== X-Gm-Message-State: AC+VfDyAFzMCkM9t8opCbi1T2cMFhp4QWSNtNHSI0mmTT4WJcyJ/KmpF /phyTe+y5ZroRltG4ErX5dcAH71qlKkJRsecdo6TeA== X-Google-Smtp-Source: ACHHUZ7fubJoEavNo/XVfnX3B10mF4Ecxwl+uxgV/9oCcGSGM+OuZ7r9vouxtsHhT0YGg9b8WfaMlQ== X-Received: by 2002:adf:dccc:0:b0:306:37ac:ef8e with SMTP id x12-20020adfdccc000000b0030637acef8emr3808634wrm.56.1683104219420; Wed, 03 May 2023 01:56:59 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: dbarboza@ventanamicro.com Subject: [PATCH 02/11] tcg/riscv: Probe for Zba, Zbb, Zicond extensions Date: Wed, 3 May 2023 09:56:48 +0100 Message-Id: <20230503085657.1814850-3-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230503085657.1814850-1-richard.henderson@linaro.org> References: <20230503085657.1814850-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=2a00:1450:4864:20::42a; envelope-from=richard.henderson@linaro.org; helo=mail-wr1-x42a.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, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1683104353105100001 Content-Type: text/plain; charset="utf-8" Define a useful subset of the extensions. Probe for them via compiler pre-processor feature macros and SIGILL. Signed-off-by: Richard Henderson Acked-by: Alistair Francis Reviewed-by: Daniel Henrique Barboza --- tcg/riscv/tcg-target.h | 6 +++ tcg/riscv/tcg-target.c.inc | 96 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 102 insertions(+) diff --git a/tcg/riscv/tcg-target.h b/tcg/riscv/tcg-target.h index 494c986b49..863ac8ba2f 100644 --- a/tcg/riscv/tcg-target.h +++ b/tcg/riscv/tcg-target.h @@ -90,6 +90,12 @@ typedef enum { #define TCG_TARGET_CALL_ARG_I128 TCG_CALL_ARG_NORMAL #define TCG_TARGET_CALL_RET_I128 TCG_CALL_RET_NORMAL =20 +#if defined(__riscv_arch_test) && defined(__riscv_zbb) +# define have_zbb true +#else +extern bool have_zbb; +#endif + /* optional instructions */ #define TCG_TARGET_HAS_movcond_i32 0 #define TCG_TARGET_HAS_div_i32 1 diff --git a/tcg/riscv/tcg-target.c.inc b/tcg/riscv/tcg-target.c.inc index 4dd33c73e8..49ff9c8b9d 100644 --- a/tcg/riscv/tcg-target.c.inc +++ b/tcg/riscv/tcg-target.c.inc @@ -113,6 +113,20 @@ static const int tcg_target_call_iarg_regs[] =3D { TCG_REG_A7, }; =20 +#ifndef have_zbb +bool have_zbb; +#endif +#if defined(__riscv_arch_test) && defined(__riscv_zba) +# define have_zba true +#else +static bool have_zba; +#endif +#if defined(__riscv_arch_test) && defined(__riscv_zicond) +# define have_zicond true +#else +static bool have_zicond; +#endif + static TCGReg tcg_target_call_oarg_reg(TCGCallReturnKind kind, int slot) { tcg_debug_assert(kind =3D=3D TCG_CALL_RET_NORMAL); @@ -234,6 +248,34 @@ typedef enum { =20 OPC_FENCE =3D 0x0000000f, OPC_NOP =3D OPC_ADDI, /* nop =3D addi r0,r0,0 */ + + /* Zba: Bit manipulation extension, address generation */ + OPC_ADD_UW =3D 0x0800003b, + + /* Zbb: Bit manipulation extension, basic bit manipulaton */ + OPC_ANDN =3D 0x40007033, + OPC_CLZ =3D 0x60001013, + OPC_CLZW =3D 0x6000101b, + OPC_CPOP =3D 0x60201013, + OPC_CPOPW =3D 0x6020101b, + OPC_CTZ =3D 0x60101013, + OPC_CTZW =3D 0x6010101b, + OPC_ORN =3D 0x40006033, + OPC_REV8 =3D 0x6b805013, + OPC_ROL =3D 0x60001033, + OPC_ROLW =3D 0x6000103b, + OPC_ROR =3D 0x60005033, + OPC_RORW =3D 0x6000503b, + OPC_RORI =3D 0x60005013, + OPC_RORIW =3D 0x6000501b, + OPC_SEXT_B =3D 0x60401013, + OPC_SEXT_H =3D 0x60501013, + OPC_XNOR =3D 0x40004033, + OPC_ZEXT_H =3D 0x0800403b, + + /* Zicond: integer conditional operations */ + OPC_CZERO_EQZ =3D 0x0e005033, + OPC_CZERO_NEZ =3D 0x0e007033, } RISCVInsn; =20 /* @@ -1612,8 +1654,62 @@ static void tcg_target_qemu_prologue(TCGContext *s) tcg_out_opc_imm(s, OPC_JALR, TCG_REG_ZERO, TCG_REG_RA, 0); } =20 +static volatile sig_atomic_t got_sigill; + +static void sigill_handler(int signo, siginfo_t *si, void *data) +{ + /* Skip the faulty instruction */ + ucontext_t *uc =3D (ucontext_t *)data; + uc->uc_mcontext.__gregs[REG_PC] +=3D 4; + + got_sigill =3D 1; +} + +static void tcg_target_detect_isa(void) +{ +#if !defined(have_zba) || !defined(have_zbb) || !defined(have_zicond) + /* + * TODO: It is expected that this will be determinable via + * linux riscv_hwprobe syscall, not yet merged. + * In the meantime, test via sigill. + */ + + struct sigaction sa_old, sa_new; + + memset(&sa_new, 0, sizeof(sa_new)); + sa_new.sa_flags =3D SA_SIGINFO; + sa_new.sa_sigaction =3D sigill_handler; + sigaction(SIGILL, &sa_new, &sa_old); + +#ifndef have_zba + /* Probe for Zba: add.uw zero,zero,zero. */ + got_sigill =3D 0; + asm volatile(".insn %0" : : "i"(OPC_ADD_UW) : "memory"); + have_zba =3D !got_sigill; +#endif + +#ifndef have_zbb + /* Probe for Zba: andn zero,zero,zero. */ + got_sigill =3D 0; + asm volatile(".insn %0" : : "i"(OPC_ANDN) : "memory"); + have_zbb =3D !got_sigill; +#endif + +#ifndef have_zicond + /* Probe for Zicond: czero.eqz zero,zero,zero. */ + got_sigill =3D 0; + asm volatile(".insn %0" : : "i"(OPC_CZERO_EQZ) : "memory"); + have_zicond =3D !got_sigill; +#endif + + sigaction(SIGILL, &sa_old, NULL); +#endif +} + static void tcg_target_init(TCGContext *s) { + tcg_target_detect_isa(); + tcg_target_available_regs[TCG_TYPE_I32] =3D 0xffffffff; tcg_target_available_regs[TCG_TYPE_I64] =3D 0xffffffff; =20 --=20 2.34.1 From nobody Wed May 15 04:56:04 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1683104362; cv=none; d=zohomail.com; s=zohoarc; b=T5uA5/HqtyYRS/4OgCwn7xuCg4J2Xygw5zF2GP3cg8pxDMuk0kruBb828u4+pDQaI/cOhNyuR+YIViSg4d389k6cyPKR284O6EMYjbTEWKZxenfpblBZrtMWM/c9T195tCu8moGjhCrA43Zbg+qkOHOCe4wFwGccQ4O/tNnkEwI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1683104362; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=5mRZoE25+tnk51V1W/8EHZSwTBCKVtFJFOYaXfMkXlQ=; b=RMm3orN8T+ewnxYUQAPr8awZljGx4Fiq847k6rMSxx57duYSjlRHwNqFZBbL25hYIDF24quYQdoS22jmpRjzuqwECEymLf6QubqfcbL8syvsZrJYPWmPYHhIH4fwuVa4qK09Jn+omnzIwRNX3TZwWZipWcm4j5hzn8EpmLbYGzg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1683104362780373.4178616526415; Wed, 3 May 2023 01:59:22 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pu8IL-0000wM-PZ; Wed, 03 May 2023 04:57:05 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pu8IJ-0000ug-GC for qemu-devel@nongnu.org; Wed, 03 May 2023 04:57:03 -0400 Received: from mail-wm1-x334.google.com ([2a00:1450:4864:20::334]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pu8IH-0006bt-BN for qemu-devel@nongnu.org; Wed, 03 May 2023 04:57:03 -0400 Received: by mail-wm1-x334.google.com with SMTP id 5b1f17b1804b1-3f4000ec6ecso1257425e9.0 for ; Wed, 03 May 2023 01:57:00 -0700 (PDT) Received: from stoup.Home ([2a02:c7c:74db:8d00:c01d:9d74:b630:9087]) by smtp.gmail.com with ESMTPSA id f26-20020a7bcd1a000000b003ef5f77901dsm1191307wmj.45.2023.05.03.01.56.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 May 2023 01:56:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1683104220; x=1685696220; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=5mRZoE25+tnk51V1W/8EHZSwTBCKVtFJFOYaXfMkXlQ=; b=Y4rC8Ro1bvHztSetWdpnX8G8xotEa8wc7ZvLXxE+4+QNT1dE1WuGeeXMiaHMD7Lq2r JODIKotqcft6R9ceX4YTJ5HhnDefZqrSS+AMqClUi/xlCcJoad442vOYpcqFeuA1pBxI rEmwvLwUtk5SH6CKwrHhiwhIV5OtWD9M9T7DPvX2uf75ZaQgDSJdPHCOu295La3ha29k koeqcgcCJQJaf2dgS8IGJCL5A9E2H7NDvxH7vuKd26GLSTQYITPukYbYBg1hIr6tb+P+ ovHwwQwyasdPJ1jKoYO+F5ytd9rDz0E8YL9d34teag1y3bazWIYWIceLE8S5oF8Q6DR+ OjLQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1683104220; x=1685696220; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=5mRZoE25+tnk51V1W/8EHZSwTBCKVtFJFOYaXfMkXlQ=; b=NMKn+5f0oujmvvQz3bCeUeIIFSLuf8AtZlIZ8G1Mlq92Tef2SNDIUTjt3sBWMIBkUP H82tod5YR2HrsTsNZfXVJAplqZxLqTjINqQDLQyRtHfUCH/uvLXkZYmlVKu+6pe7cU0j 2mnUjz9PvP2zehL1wDPjSJmfZETSWIxk9xMMbGOh/igBw6MfCNEChD4oPMljmAEkX3p5 HGXfXeJgDylBVU4ELIh2KatDHcpWkhsZUAuhYz7KAZP1V2HQuLuYf6n1BkFPJDcUwnyb oN1e86tTGWFl/IaFZ+mK69D9k8pzOb1MXL8ICp9+Z+tTc+/njCQQ2cQ8GPiH351QMDB5 hwGw== X-Gm-Message-State: AC+VfDwy9XwYOQrtYL+TofVXb2+eS+ES2YDj+zWq2vUt9i7QqDEeogOv gZKssIqnXfIiUDUk9lrU3LXz9Bx+Lj9BBI0SOgatgQ== X-Google-Smtp-Source: ACHHUZ6HEpGOQQmhk2/mnpkkN/EmPwK30bERJrQrNvDSw44K2Qh+nxwHJV2Zw4oBbIsEe/581VTIIg== X-Received: by 2002:a1c:ed0e:0:b0:3f1:7372:66d1 with SMTP id l14-20020a1ced0e000000b003f1737266d1mr14168248wmh.0.1683104219857; Wed, 03 May 2023 01:56:59 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: dbarboza@ventanamicro.com Subject: [PATCH 03/11] tcg/riscv: Support ANDN, ORN, XNOR from Zbb Date: Wed, 3 May 2023 09:56:49 +0100 Message-Id: <20230503085657.1814850-4-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230503085657.1814850-1-richard.henderson@linaro.org> References: <20230503085657.1814850-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=2a00:1450:4864:20::334; envelope-from=richard.henderson@linaro.org; helo=mail-wm1-x334.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, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1683104363577100005 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson Acked-by: Alistair Francis Reviewed-by: Daniel Henrique Barboza --- tcg/riscv/tcg-target-con-set.h | 1 + tcg/riscv/tcg-target-con-str.h | 1 + tcg/riscv/tcg-target.h | 12 +++++----- tcg/riscv/tcg-target.c.inc | 41 ++++++++++++++++++++++++++++++++++ 4 files changed, 49 insertions(+), 6 deletions(-) diff --git a/tcg/riscv/tcg-target-con-set.h b/tcg/riscv/tcg-target-con-set.h index d88888d3ac..1a33ece98f 100644 --- a/tcg/riscv/tcg-target-con-set.h +++ b/tcg/riscv/tcg-target-con-set.h @@ -15,6 +15,7 @@ C_O0_I2(rZ, rZ) C_O1_I1(r, r) C_O1_I2(r, r, ri) C_O1_I2(r, r, rI) +C_O1_I2(r, r, rJ) C_O1_I2(r, rZ, rN) C_O1_I2(r, rZ, rZ) C_O2_I4(r, r, rZ, rZ, rM, rM) diff --git a/tcg/riscv/tcg-target-con-str.h b/tcg/riscv/tcg-target-con-str.h index 6f1cfb976c..d5c419dff1 100644 --- a/tcg/riscv/tcg-target-con-str.h +++ b/tcg/riscv/tcg-target-con-str.h @@ -15,6 +15,7 @@ REGS('r', ALL_GENERAL_REGS) * CONST(letter, TCG_CT_CONST_* bit set) */ CONST('I', TCG_CT_CONST_S12) +CONST('J', TCG_CT_CONST_J12) CONST('N', TCG_CT_CONST_N12) CONST('M', TCG_CT_CONST_M12) CONST('Z', TCG_CT_CONST_ZERO) diff --git a/tcg/riscv/tcg-target.h b/tcg/riscv/tcg-target.h index 863ac8ba2f..9f58d46208 100644 --- a/tcg/riscv/tcg-target.h +++ b/tcg/riscv/tcg-target.h @@ -120,9 +120,9 @@ extern bool have_zbb; #define TCG_TARGET_HAS_bswap32_i32 0 #define TCG_TARGET_HAS_not_i32 1 #define TCG_TARGET_HAS_neg_i32 1 -#define TCG_TARGET_HAS_andc_i32 0 -#define TCG_TARGET_HAS_orc_i32 0 -#define TCG_TARGET_HAS_eqv_i32 0 +#define TCG_TARGET_HAS_andc_i32 have_zbb +#define TCG_TARGET_HAS_orc_i32 have_zbb +#define TCG_TARGET_HAS_eqv_i32 have_zbb #define TCG_TARGET_HAS_nand_i32 0 #define TCG_TARGET_HAS_nor_i32 0 #define TCG_TARGET_HAS_clz_i32 0 @@ -154,9 +154,9 @@ extern bool have_zbb; #define TCG_TARGET_HAS_bswap64_i64 0 #define TCG_TARGET_HAS_not_i64 1 #define TCG_TARGET_HAS_neg_i64 1 -#define TCG_TARGET_HAS_andc_i64 0 -#define TCG_TARGET_HAS_orc_i64 0 -#define TCG_TARGET_HAS_eqv_i64 0 +#define TCG_TARGET_HAS_andc_i64 have_zbb +#define TCG_TARGET_HAS_orc_i64 have_zbb +#define TCG_TARGET_HAS_eqv_i64 have_zbb #define TCG_TARGET_HAS_nand_i64 0 #define TCG_TARGET_HAS_nor_i64 0 #define TCG_TARGET_HAS_clz_i64 0 diff --git a/tcg/riscv/tcg-target.c.inc b/tcg/riscv/tcg-target.c.inc index 49ff9c8b9d..c5b060023f 100644 --- a/tcg/riscv/tcg-target.c.inc +++ b/tcg/riscv/tcg-target.c.inc @@ -138,6 +138,7 @@ static TCGReg tcg_target_call_oarg_reg(TCGCallReturnKin= d kind, int slot) #define TCG_CT_CONST_S12 0x200 #define TCG_CT_CONST_N12 0x400 #define TCG_CT_CONST_M12 0x800 +#define TCG_CT_CONST_J12 0x1000 =20 #define ALL_GENERAL_REGS MAKE_64BIT_MASK(0, 32) =20 @@ -174,6 +175,13 @@ static bool tcg_target_const_match(int64_t val, TCGTyp= e type, int ct) if ((ct & TCG_CT_CONST_M12) && val >=3D -0x7ff && val <=3D 0x7ff) { return 1; } + /* + * Inverse of sign extended from 12 bits: ~[-0x800, 0x7ff]. + * Used to map ANDN back to ANDI, etc. + */ + if ((ct & TCG_CT_CONST_J12) && ~val >=3D -0x800 && ~val <=3D 0x7ff) { + return 1; + } return 0; } =20 @@ -1306,6 +1314,31 @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc, } break; =20 + case INDEX_op_andc_i32: + case INDEX_op_andc_i64: + if (c2) { + tcg_out_opc_imm(s, OPC_ANDI, a0, a1, ~a2); + } else { + tcg_out_opc_reg(s, OPC_ANDN, a0, a1, a2); + } + break; + case INDEX_op_orc_i32: + case INDEX_op_orc_i64: + if (c2) { + tcg_out_opc_imm(s, OPC_ORI, a0, a1, ~a2); + } else { + tcg_out_opc_reg(s, OPC_ORN, a0, a1, a2); + } + break; + case INDEX_op_eqv_i32: + case INDEX_op_eqv_i64: + if (c2) { + tcg_out_opc_imm(s, OPC_XORI, a0, a1, ~a2); + } else { + tcg_out_opc_reg(s, OPC_XNOR, a0, a1, a2); + } + break; + case INDEX_op_not_i32: case INDEX_op_not_i64: tcg_out_opc_imm(s, OPC_XORI, a0, a1, -1); @@ -1536,6 +1569,14 @@ static TCGConstraintSetIndex tcg_target_op_def(TCGOp= code op) case INDEX_op_xor_i64: return C_O1_I2(r, r, rI); =20 + case INDEX_op_andc_i32: + case INDEX_op_andc_i64: + case INDEX_op_orc_i32: + case INDEX_op_orc_i64: + case INDEX_op_eqv_i32: + case INDEX_op_eqv_i64: + return C_O1_I2(r, r, rJ); + case INDEX_op_sub_i32: case INDEX_op_sub_i64: return C_O1_I2(r, rZ, rN); --=20 2.34.1 From nobody Wed May 15 04:56:04 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1683104311; cv=none; d=zohomail.com; s=zohoarc; b=ngjaoUkvBhdzJIqwjLe96qYDKPwSbmdzQG+OWIyLcvDXmiDZw6BE7+iRGM5VWx83eV2TRSfzOGFtmeDAusvdLyP11Pkvi2zI2BCGstGt7juDwwr2xGwYiv9tzdEY+IW8ARBVTevjUksnFQ0O4OK2uSi9s0u+YrrYppAd+Y97SCg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1683104311; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=i7IYj+6O0tu3qih1X/ui++MY9beLsqUGE8F3B+8p5C8=; b=PgDzrI/66qVbD6eBGRS8ufRxRxiujxRCvIBcMkt3huiQ9Is4TsgDp1ujQs5WeL/1puX2vDK/FPXEt56/oxba9GPExDl4c7+kSATKINyVa8F9u/8kywM+H3E3EIhZNHMfdpCf2gdxfMh8i5T74yQd7lImT0laVM4xoPx3xRMv4Xo= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1683104311166422.93968890395445; Wed, 3 May 2023 01:58:31 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pu8IL-0000w7-7n; Wed, 03 May 2023 04:57:05 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pu8IJ-0000ur-Kh for qemu-devel@nongnu.org; Wed, 03 May 2023 04:57:03 -0400 Received: from mail-wr1-x42a.google.com ([2a00:1450:4864:20::42a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pu8II-0006bx-1B for qemu-devel@nongnu.org; Wed, 03 May 2023 04:57:03 -0400 Received: by mail-wr1-x42a.google.com with SMTP id ffacd0b85a97d-2fa0ce30ac2so4501650f8f.3 for ; Wed, 03 May 2023 01:57:01 -0700 (PDT) Received: from stoup.Home ([2a02:c7c:74db:8d00:c01d:9d74:b630:9087]) by smtp.gmail.com with ESMTPSA id f26-20020a7bcd1a000000b003ef5f77901dsm1191307wmj.45.2023.05.03.01.56.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 May 2023 01:57:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1683104220; x=1685696220; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=i7IYj+6O0tu3qih1X/ui++MY9beLsqUGE8F3B+8p5C8=; b=xiVx9FyyTdjiB1pMp8DSHblfLnRDVYlyTNqvTOIlbc1hH+rqkgjncqSz3BgLzp5TEi kkhZoF9Nz0yC5RZU15dngGKR/8NnwStJxvvBvvAloD/JuabZbxyqNdQB/hLobsct/AlK gjs/iL4DMWT2P5tfiXhcIlZW8dPCc24KCkPxhU6eYRum++2kqsnT8qNPgJpRAShBrafI rlEi0fRG+GjzPoYZWhOqyJXqHa+zYUXppgGnqQclke8t9mfwkRmbUVjLzgtcO9aGfEab l2D1y/SAdmOuM8QlK7AjzstotHHja1CflWD1z3yNG8Ea05tMgL6o3NFzfUQqMc8OXR0S 0jUA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1683104220; x=1685696220; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=i7IYj+6O0tu3qih1X/ui++MY9beLsqUGE8F3B+8p5C8=; b=f3kK25F4zGFKdU94C4DslVJHNZqQpYVyGA32L8xiAtT5jHZXD10Iz2/VH8Qot0k7+S iTb+Sp+GzqzayjDErGaJV//QavEg8B5aDfEARImx+y3YyfHzVaxWVhH+Vg2BY7ljip4K os/KdCwIBrKio04ldXVI7icKaDUZr+wgwP9gqW7ZcawCU/hksF0tK/RseE/TWd8Ht69k kXWsnurVXfbLjolQxb/rPryAtM396/beqnysOb/Yicrd4FN5Wjc2Ae9ly14Ys8O7FPnz 5aqGQrSnHCEV/usRgC/DpqJ/dUKNIBhDtgEeLBNXlR7oz9+g2zvKsiI3NPuhvAhyurtk g+Tg== X-Gm-Message-State: AC+VfDxO+DVFDGv82wG+jaXMlcmVCf+vhmx+67bc3KMGMw1w7UVHUPUR kfIv1UDPNVG2TCaCCyL7FgnZxsuy7pw7aX314x59aQ== X-Google-Smtp-Source: ACHHUZ6DlAbdbZcvBAmxNgOmgMJt0o+mtkFDeA4CptkW+1uHRHIzgAaruJ37fg2DE9i60Rva6xUyIg== X-Received: by 2002:a5d:6603:0:b0:306:2862:c725 with SMTP id n3-20020a5d6603000000b003062862c725mr8782830wru.7.1683104220363; Wed, 03 May 2023 01:57:00 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: dbarboza@ventanamicro.com Subject: [PATCH 04/11] tcg/riscv: Support ADD.UW, SEXT.B, SEXT.H, ZEXT.H from Zba+Zbb Date: Wed, 3 May 2023 09:56:50 +0100 Message-Id: <20230503085657.1814850-5-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230503085657.1814850-1-richard.henderson@linaro.org> References: <20230503085657.1814850-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=2a00:1450:4864:20::42a; envelope-from=richard.henderson@linaro.org; helo=mail-wr1-x42a.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, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1683104313205100003 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson Acked-by: Alistair Francis Reviewed-by: Daniel Henrique Barboza --- tcg/riscv/tcg-target.c.inc | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/tcg/riscv/tcg-target.c.inc b/tcg/riscv/tcg-target.c.inc index c5b060023f..53a7f97b29 100644 --- a/tcg/riscv/tcg-target.c.inc +++ b/tcg/riscv/tcg-target.c.inc @@ -593,26 +593,42 @@ static void tcg_out_ext8u(TCGContext *s, TCGReg ret, = TCGReg arg) =20 static void tcg_out_ext16u(TCGContext *s, TCGReg ret, TCGReg arg) { - tcg_out_opc_imm(s, OPC_SLLIW, ret, arg, 16); - tcg_out_opc_imm(s, OPC_SRLIW, ret, ret, 16); + if (have_zbb) { + tcg_out_opc_reg(s, OPC_ZEXT_H, ret, arg, TCG_REG_ZERO); + } else { + tcg_out_opc_imm(s, OPC_SLLIW, ret, arg, 16); + tcg_out_opc_imm(s, OPC_SRLIW, ret, ret, 16); + } } =20 static void tcg_out_ext32u(TCGContext *s, TCGReg ret, TCGReg arg) { - tcg_out_opc_imm(s, OPC_SLLI, ret, arg, 32); - tcg_out_opc_imm(s, OPC_SRLI, ret, ret, 32); + if (have_zba) { + tcg_out_opc_reg(s, OPC_ADD_UW, ret, arg, TCG_REG_ZERO); + } else { + tcg_out_opc_imm(s, OPC_SLLI, ret, arg, 32); + tcg_out_opc_imm(s, OPC_SRLI, ret, ret, 32); + } } =20 static void tcg_out_ext8s(TCGContext *s, TCGType type, TCGReg ret, TCGReg = arg) { - tcg_out_opc_imm(s, OPC_SLLIW, ret, arg, 24); - tcg_out_opc_imm(s, OPC_SRAIW, ret, ret, 24); + if (have_zbb) { + tcg_out_opc_imm(s, OPC_SEXT_B, ret, arg, 0); + } else { + tcg_out_opc_imm(s, OPC_SLLIW, ret, arg, 24); + tcg_out_opc_imm(s, OPC_SRAIW, ret, ret, 24); + } } =20 static void tcg_out_ext16s(TCGContext *s, TCGType type, TCGReg ret, TCGReg= arg) { - tcg_out_opc_imm(s, OPC_SLLIW, ret, arg, 16); - tcg_out_opc_imm(s, OPC_SRAIW, ret, ret, 16); + if (have_zbb) { + tcg_out_opc_imm(s, OPC_SEXT_H, ret, arg, 0); + } else { + tcg_out_opc_imm(s, OPC_SLLIW, ret, arg, 16); + tcg_out_opc_imm(s, OPC_SRAIW, ret, ret, 16); + } } =20 static void tcg_out_ext32s(TCGContext *s, TCGReg ret, TCGReg arg) --=20 2.34.1 From nobody Wed May 15 04:56:04 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1683104307; cv=none; d=zohomail.com; s=zohoarc; b=dXvYjFCHBUWIecwccNWVWjrzHh4K/JWpVElsoBmfQQA8zZAxV7byqbcucctqXlMZVhDEIoUza6jkr0hhcFxK2Ffq/FD82XOju10aAyxy9IFucE7R/HEMamUMl8ttSaFwj5tVpK4MXhzAC8lMCj2BcrWhyao9xVBQMisGVwlXoJI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1683104307; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=HW8JSRn5RMrJ+UuW0TSqtYpPCYz7WFz757nhPdtnQaI=; b=d4uT1EQNf03voqPpJQHrzOW+AHFJXnUUIEVSzZ5jKgfKNq7lr6b93WRIHRoaGtcUKgoFKeoLP9m5bY9gfXVBVlfUef2Ob1ugeZO1a0jwIuydcXqZz5cT2WpUb9ckMAkAvhSYwCxWYzGbgug1duBrB/2HmbLXRR9TSvSj66tRZMc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1683104307407606.7524018670006; Wed, 3 May 2023 01:58:27 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pu8IM-0000wl-Ft; Wed, 03 May 2023 04:57:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pu8IK-0000vW-67 for qemu-devel@nongnu.org; Wed, 03 May 2023 04:57:04 -0400 Received: from mail-wm1-x334.google.com ([2a00:1450:4864:20::334]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pu8II-0006c2-De for qemu-devel@nongnu.org; Wed, 03 May 2023 04:57:03 -0400 Received: by mail-wm1-x334.google.com with SMTP id 5b1f17b1804b1-3f19afc4fbfso48537875e9.2 for ; Wed, 03 May 2023 01:57:01 -0700 (PDT) Received: from stoup.Home ([2a02:c7c:74db:8d00:c01d:9d74:b630:9087]) by smtp.gmail.com with ESMTPSA id f26-20020a7bcd1a000000b003ef5f77901dsm1191307wmj.45.2023.05.03.01.57.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 May 2023 01:57:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1683104221; x=1685696221; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=HW8JSRn5RMrJ+UuW0TSqtYpPCYz7WFz757nhPdtnQaI=; b=M+mbFJCyxGsW+d7QWHayicsLeOACU+PoQ0mv0bg3ALw0ZmOvU07Agn+TmaFs6729Q1 e7qFTEB87AgWw2kT2GKPkSiLl4sWMzcEV0BCRrq3x8jj97jqfk55gkyqeBRoN2+lIY2J QKMIONfK0ZQPV2gfikQzfO25sGXb8El7v98S2Q73D3DnQWEUIFz2BhcT9ebDTOkI5Xmr acL5pFfxu1AmKIEvJZgLvL11OyWKN1y+FtidJtni8apzGhdr4mCYa29jmrpJ9ZIKS00v Q/KkBjg98oMnk2pTk0CW4NQ0aL1pWIYk/056yWM1LR7XcH861AA7v2LgJGXR5El5mVr7 4jhg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1683104221; x=1685696221; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=HW8JSRn5RMrJ+UuW0TSqtYpPCYz7WFz757nhPdtnQaI=; b=aciB3Umt7tmtO6UnmWPbLB0ovPSLAZdw3hGjRm8Yvaby+OQFlaSEfIpMd9C15AMfM9 RGtAZCK8qKeJYKZ0++mNTGNbkB4DRLHYb8FgHYtCUrfifzFEf/ug92yxC2Ueg86Jq3O7 YH7Ev4rWZAPs9r1/UBXqkyLo7JW0pWIIJzzLwpo4vTfeg25fHrHswLWHj2tDTYx6R1Vn cV0JOmzC34QOSER7QwSZcZPqu0/q5zmfmpQgNZVVotUCa+gxdVYmMxob7Aa0Mg/NryQt lqtwkBEpg7zANzZeesUQdSB9dKOMf6WyWM2+QGPSaEt2QBIBh5iKmzIEnuFH2+jev+Bu k7jw== X-Gm-Message-State: AC+VfDzv2f3hqHmTvGpLxCkHJzuja9z/ERw4KysxppW3KIsxI0t78RiI Pb7Ow5O9rWBwqIbVHQrkB5hezsyINBc6EzBTxNpKlQ== X-Google-Smtp-Source: ACHHUZ6MKzqan8AEnadNfjiGCsbAvHs8T2bnv69enojnYrjHuRzcJw968lKTjUZ9ouTfxFhxMRvKDg== X-Received: by 2002:a1c:f30b:0:b0:3f1:75d2:a6a7 with SMTP id q11-20020a1cf30b000000b003f175d2a6a7mr14614605wmq.36.1683104220894; Wed, 03 May 2023 01:57:00 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: dbarboza@ventanamicro.com Subject: [PATCH 05/11] tcg/riscv: Use ADD.UW for guest address generation Date: Wed, 3 May 2023 09:56:51 +0100 Message-Id: <20230503085657.1814850-6-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230503085657.1814850-1-richard.henderson@linaro.org> References: <20230503085657.1814850-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=2a00:1450:4864:20::334; envelope-from=richard.henderson@linaro.org; helo=mail-wm1-x334.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, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1683104309184100005 Content-Type: text/plain; charset="utf-8" The instruction is a combined zero-extend and add. Use it for exactly that. Signed-off-by: Richard Henderson Acked-by: Alistair Francis Reviewed-by: Daniel Henrique Barboza --- tcg/riscv/tcg-target.c.inc | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/tcg/riscv/tcg-target.c.inc b/tcg/riscv/tcg-target.c.inc index 53a7f97b29..f64eaa8515 100644 --- a/tcg/riscv/tcg-target.c.inc +++ b/tcg/riscv/tcg-target.c.inc @@ -1039,14 +1039,18 @@ static TCGLabelQemuLdst *prepare_host_addr(TCGConte= xt *s, TCGReg *pbase, tcg_out_opc_branch(s, OPC_BNE, TCG_REG_TMP0, TCG_REG_TMP1, 0); =20 /* TLB Hit - translate address using addend. */ - addr_adj =3D addr_reg; - if (TARGET_LONG_BITS =3D=3D 32) { - addr_adj =3D TCG_REG_TMP0; - tcg_out_ext32u(s, addr_adj, addr_reg); + if (TARGET_LONG_BITS =3D=3D 64) { + tcg_out_opc_reg(s, OPC_ADD, TCG_REG_TMP0, addr_reg, TCG_REG_TMP2); + } else if (have_zba) { + tcg_out_opc_reg(s, OPC_ADD_UW, TCG_REG_TMP0, addr_reg, TCG_REG_TMP= 2); + } else { + tcg_out_ext32u(s, TCG_REG_TMP0, addr_reg); + tcg_out_opc_reg(s, OPC_ADD, TCG_REG_TMP0, TCG_REG_TMP0, TCG_REG_TM= P2); } - tcg_out_opc_reg(s, OPC_ADD, TCG_REG_TMP0, TCG_REG_TMP2, addr_adj); *pbase =3D TCG_REG_TMP0; #else + TCGReg base; + if (a_mask) { ldst =3D new_ldst_label(s); ldst->is_ld =3D is_ld; @@ -1061,14 +1065,21 @@ static TCGLabelQemuLdst *prepare_host_addr(TCGConte= xt *s, TCGReg *pbase, tcg_out_opc_branch(s, OPC_BNE, TCG_REG_TMP1, TCG_REG_ZERO, 0); } =20 - TCGReg base =3D addr_reg; - if (TARGET_LONG_BITS =3D=3D 32) { - tcg_out_ext32u(s, TCG_REG_TMP0, base); - base =3D TCG_REG_TMP0; - } if (guest_base !=3D 0) { - tcg_out_opc_reg(s, OPC_ADD, TCG_REG_TMP0, TCG_GUEST_BASE_REG, base= ); base =3D TCG_REG_TMP0; + if (TARGET_LONG_BITS =3D=3D 64) { + tcg_out_opc_reg(s, OPC_ADD, base, addr_reg, TCG_GUEST_BASE_REG= ); + } else if (have_zba) { + tcg_out_opc_reg(s, OPC_ADD_UW, base, addr_reg, TCG_GUEST_BASE_= REG); + } else { + tcg_out_ext32u(s, base, addr_reg); + tcg_out_opc_reg(s, OPC_ADD, base, base, TCG_GUEST_BASE_REG); + } + } else if (TARGET_LONG_BITS =3D=3D 64) { + base =3D addr_reg; + } else { + base =3D TCG_REG_TMP0; + tcg_out_ext32u(s, base, addr_reg); } *pbase =3D base; #endif --=20 2.34.1 From nobody Wed May 15 04:56:04 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1683104347; cv=none; d=zohomail.com; s=zohoarc; b=Cci8Y9kLNzzGyJn+zS0Lua0WZr/hcKzZfPFbUVHfOTBsdHU68+Wyr1qm9sI1YdINBQ9oEcAVS+t2iQ/BSK+7fPaR+LHEvkbNFhq7bZ8dbzxg0kxC8OeqpuHOH3+RdpgU6x9vbCEgT7BE0yXkairjeb2fMLyOeIj7G7OmNqgpWzk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1683104347; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=ChIPeONpzj2TEPZj/xz2/KXYVtYrlG9OCGeOFkjd/x4=; b=ReNP0CC50h+QbTPzV5Ncy7Deb1QGadmGz61AFcyVOukmrKrD6GbsMFnjp4dS4etL+uTpqTNmLXI2NdIJ66hiTUoPXLQiVvhWHsWrjxsVUqaGFhZgfB4bw8xqyvAALViV/g7JRwb6LPCiipdZxq1+pN9LSu71L8DT9X30JIGLYaY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1683104347247573.2113644310557; Wed, 3 May 2023 01:59:07 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pu8IN-0000xn-7E; Wed, 03 May 2023 04:57:07 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pu8IK-0000vj-Np for qemu-devel@nongnu.org; Wed, 03 May 2023 04:57:04 -0400 Received: from mail-wm1-x333.google.com ([2a00:1450:4864:20::333]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pu8II-0006cD-Ud for qemu-devel@nongnu.org; Wed, 03 May 2023 04:57:04 -0400 Received: by mail-wm1-x333.google.com with SMTP id 5b1f17b1804b1-3f1958d3a53so48270235e9.0 for ; Wed, 03 May 2023 01:57:02 -0700 (PDT) Received: from stoup.Home ([2a02:c7c:74db:8d00:c01d:9d74:b630:9087]) by smtp.gmail.com with ESMTPSA id f26-20020a7bcd1a000000b003ef5f77901dsm1191307wmj.45.2023.05.03.01.57.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 May 2023 01:57:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1683104221; x=1685696221; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ChIPeONpzj2TEPZj/xz2/KXYVtYrlG9OCGeOFkjd/x4=; b=SSWe9pF9V7oMZc/sJ6oWk/9Xfd0bskGSnsAoW5BVY0fYcHLgUmrUXExq+EGmKbiDdS nrccdjpBwTJjx8u1d2xqO/8P+AY5Of7xHtr1ya6k/NTqsffpYXdhvZ/rVzcshJZGbl69 SgQL78xWRq4fFKIErmgxCq6M3vvqICtyvxKrDdaoU5jxw4nMMTED7qHhmIMHTlA+oJHI DrKRmMXMWGpQsytkJyKYnS+6PxXb7Ex/RpsOgcuYYhh/yjz2HgQJbS3dTvP5rsVxpg95 9cagMuxsRnBTWAp5XzFaZesxaMlxLVwWsZDOKv5Ej2kn/yTYTpXRrwgZfK6M1m5WC0yI uoBA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1683104221; x=1685696221; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ChIPeONpzj2TEPZj/xz2/KXYVtYrlG9OCGeOFkjd/x4=; b=dqmvvQYoOPZG6ZpynHNgi57u0EN3YtDsheryRsiIwwa4utJ4S8HKcRQXxLpStno3Xj m6SSw9o/ZMXaF22p/Cx4ljdPwPiOtKa2HzYjxJEKj/RuM6inIkU4ZMHmILYO5hfZmsVV FwV5KUUnF5Ho4jPPRVd2U93VsGDYgvu0nE96+IIaiWG6rAGiQv+SMSq/tZFBHo8UplFV pwOK7bH1PHuhElkd3nsCoQ29V3c35DGjPiPvrc+rm4Zr3ThddeJ3nEpF6y0aeOFpYmr/ kQqboYVEJMlXZbBs/8QtRuvgUU4ay9evTct8sYtFMWuEigerOcZ8mENYBT7wIE0I+umL BMJw== X-Gm-Message-State: AC+VfDz9hm4ZlUuBQY+NSLDtvCXs6wUyCDP5Pq5MTuJbG76/Q30rk6Fg PdwmEaabMMo2Ae08Z1fD7WbLwsbry56EBnTWmn0lhg== X-Google-Smtp-Source: ACHHUZ4vQzYLHSt0o0NZ2XcSPNDGANDgAb4WQ9W1QGR1cp19zAhqsvmjESFVXQM515p9NbytbL+l7A== X-Received: by 2002:a1c:4b06:0:b0:3ed:e5db:52e1 with SMTP id y6-20020a1c4b06000000b003ede5db52e1mr15046080wma.15.1683104221464; Wed, 03 May 2023 01:57:01 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: dbarboza@ventanamicro.com Subject: [PATCH 06/11] tcg/riscv: Support rotates from Zbb Date: Wed, 3 May 2023 09:56:52 +0100 Message-Id: <20230503085657.1814850-7-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230503085657.1814850-1-richard.henderson@linaro.org> References: <20230503085657.1814850-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=2a00:1450:4864:20::333; envelope-from=richard.henderson@linaro.org; helo=mail-wm1-x333.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, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1683104349082100001 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson Acked-by: Alistair Francis Reviewed-by: Daniel Henrique Barboza --- tcg/riscv/tcg-target.h | 4 ++-- tcg/riscv/tcg-target.c.inc | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/tcg/riscv/tcg-target.h b/tcg/riscv/tcg-target.h index 9f58d46208..317d385924 100644 --- a/tcg/riscv/tcg-target.h +++ b/tcg/riscv/tcg-target.h @@ -101,7 +101,7 @@ extern bool have_zbb; #define TCG_TARGET_HAS_div_i32 1 #define TCG_TARGET_HAS_rem_i32 1 #define TCG_TARGET_HAS_div2_i32 0 -#define TCG_TARGET_HAS_rot_i32 0 +#define TCG_TARGET_HAS_rot_i32 have_zbb #define TCG_TARGET_HAS_deposit_i32 0 #define TCG_TARGET_HAS_extract_i32 0 #define TCG_TARGET_HAS_sextract_i32 0 @@ -136,7 +136,7 @@ extern bool have_zbb; #define TCG_TARGET_HAS_div_i64 1 #define TCG_TARGET_HAS_rem_i64 1 #define TCG_TARGET_HAS_div2_i64 0 -#define TCG_TARGET_HAS_rot_i64 0 +#define TCG_TARGET_HAS_rot_i64 have_zbb #define TCG_TARGET_HAS_deposit_i64 0 #define TCG_TARGET_HAS_extract_i64 0 #define TCG_TARGET_HAS_sextract_i64 0 diff --git a/tcg/riscv/tcg-target.c.inc b/tcg/riscv/tcg-target.c.inc index f64eaa8515..58f969b4fe 100644 --- a/tcg/riscv/tcg-target.c.inc +++ b/tcg/riscv/tcg-target.c.inc @@ -1458,6 +1458,36 @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc, } break; =20 + case INDEX_op_rotl_i32: + if (c2) { + tcg_out_opc_imm(s, OPC_RORIW, a0, a1, -a2 & 0x1f); + } else { + tcg_out_opc_reg(s, OPC_ROLW, a0, a1, a2); + } + break; + case INDEX_op_rotl_i64: + if (c2) { + tcg_out_opc_imm(s, OPC_RORI, a0, a1, -a2 & 0x3f); + } else { + tcg_out_opc_reg(s, OPC_ROL, a0, a1, a2); + } + break; + + case INDEX_op_rotr_i32: + if (c2) { + tcg_out_opc_imm(s, OPC_RORIW, a0, a1, a2 & 0x1f); + } else { + tcg_out_opc_reg(s, OPC_RORW, a0, a1, a2); + } + break; + case INDEX_op_rotr_i64: + if (c2) { + tcg_out_opc_imm(s, OPC_RORI, a0, a1, a2 & 0x3f); + } else { + tcg_out_opc_reg(s, OPC_ROR, a0, a1, a2); + } + break; + case INDEX_op_add2_i32: tcg_out_addsub2(s, a0, a1, a2, args[3], args[4], args[5], const_args[4], const_args[5], false, true); @@ -1629,9 +1659,13 @@ static TCGConstraintSetIndex tcg_target_op_def(TCGOp= code op) case INDEX_op_shl_i32: case INDEX_op_shr_i32: case INDEX_op_sar_i32: + case INDEX_op_rotl_i32: + case INDEX_op_rotr_i32: case INDEX_op_shl_i64: case INDEX_op_shr_i64: case INDEX_op_sar_i64: + case INDEX_op_rotl_i64: + case INDEX_op_rotr_i64: return C_O1_I2(r, r, ri); =20 case INDEX_op_brcond_i32: --=20 2.34.1 From nobody Wed May 15 04:56:04 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1683104370; cv=none; d=zohomail.com; s=zohoarc; b=OBF6KXWTSUOImTlRZ6QMHoym4UrwLp46V5I5gp8YBkSQClKceWSSnS/X8rBS1Xwtts6PJLrYg2bg4a6EjTKcHpMzI0qKax4EepVc2rpYjlQMZo0bWu0fMbkeyzpGXp16AZ6xS+8TqFez/m4Xi7BKTrw+VwMWU0aPJRYMhZKWW9w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1683104370; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=vA4s98neZpqj9zeFmYZ5W9ppvIkfNwCZ34PLJ036UyI=; b=OAkLTA6deao+mXU2XPFSzpQCn1WlfMXXW/+6yqXascSc5bEzTfs+wPhn4QKZQ/e5Fu9d91ZjeT/0fp9ZRCf0Ak4UHBgDhbk/61m3EnXlc3djoLX+0uvNOBFH/yFyXuvZuygPW0T2nl3oOrmdDO9r4p8OPUvFXHcRFKYwNquNUdU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1683104370487741.9400245311272; Wed, 3 May 2023 01:59:30 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pu8IN-0000yW-TN; Wed, 03 May 2023 04:57:07 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pu8IL-0000w8-7K for qemu-devel@nongnu.org; Wed, 03 May 2023 04:57:05 -0400 Received: from mail-wm1-x32c.google.com ([2a00:1450:4864:20::32c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pu8IJ-0006cU-F5 for qemu-devel@nongnu.org; Wed, 03 May 2023 04:57:04 -0400 Received: by mail-wm1-x32c.google.com with SMTP id 5b1f17b1804b1-3f193ca059bso29819175e9.3 for ; Wed, 03 May 2023 01:57:03 -0700 (PDT) Received: from stoup.Home ([2a02:c7c:74db:8d00:c01d:9d74:b630:9087]) by smtp.gmail.com with ESMTPSA id f26-20020a7bcd1a000000b003ef5f77901dsm1191307wmj.45.2023.05.03.01.57.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 May 2023 01:57:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1683104222; x=1685696222; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=vA4s98neZpqj9zeFmYZ5W9ppvIkfNwCZ34PLJ036UyI=; b=Ve2lLTsX7+oELdBt1WKFIP58djTcnLds2YzFK5BnvO7FvVAtcBEwAlvKrb/RPwhF2S QRZpo78jcg8vqbMdAVubNxMU+nGFnPKlM6WPezcx9F5jgraLBHzAyLxfB/z12pPODuTj x0mnoBJ+roPLyNQ/pzyW8R6iiiCEWLGEfjQJQYA9OFyv215EWV+fj5z9pmzZ2j0NGl+i 4Y2Il6u+6yASbuFQcRkAjUaREll3xRcvWFAnvZVi+le4JyjiYn7NomrfMX/w8Jqk++Y9 YqirnDu8//UeHADXMBML0t36Es44sCExHqvmld+5N9X4yCbRgJfbJCTxMv6m/AFnhE+f OJ8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1683104222; x=1685696222; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=vA4s98neZpqj9zeFmYZ5W9ppvIkfNwCZ34PLJ036UyI=; b=jwvTIpVR0Punib20/DebkHMF2/1ejf6B1JwpSBv7uHeDQSz/qArZf1KFW2S0n9kdnX 8xZY5jcCq+wkzSQQlIg57pRrKcHBdOV+ipmWZgpttZQArgVdKzIm6EtEJYnQBjwawu6O nuc4dUpWioDG0DjvC/mY9PH+m4sKUSpY0ROMQyaqwL7afPgAvfZd+iBnMDe0wQhViYSA aDNjoObAx/zK58YiP7dpht4fDlJBO5beloQr5SSjKKhZgBWj3QW2DSy1tn8LjGY691vg x6v/GmqQ4AefpTl41hYbyaT7R6vbQg0rizJHW02ApbBrYaIBVUOkkHHQOBk+Aoq91JsK 5QDA== X-Gm-Message-State: AC+VfDxk/y5KOfE3u6L+DAu1IR6nQeHg3jMwTFDE2kzXFaulXkmZ6xm3 gaoGmI/Vy4XirEI14KUCivghkzZMGMoVWp1ryVY4Lw== X-Google-Smtp-Source: ACHHUZ5GZb6EYPb5AszFN38K9wepneS+oXZ+sIjwdNnf//buZpZnEArf3EvB/lKRRy/IJtQzDkBY6w== X-Received: by 2002:a05:600c:21d1:b0:3f1:987b:7a28 with SMTP id x17-20020a05600c21d100b003f1987b7a28mr13798465wmj.29.1683104222051; Wed, 03 May 2023 01:57:02 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: dbarboza@ventanamicro.com Subject: [PATCH 07/11] tcg/riscv: Support REV8 from Zbb Date: Wed, 3 May 2023 09:56:53 +0100 Message-Id: <20230503085657.1814850-8-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230503085657.1814850-1-richard.henderson@linaro.org> References: <20230503085657.1814850-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=2a00:1450:4864:20::32c; envelope-from=richard.henderson@linaro.org; helo=mail-wm1-x32c.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, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1683104371658100001 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson Acked-by: Alistair Francis Reviewed-by: Daniel Henrique Barboza --- tcg/riscv/tcg-target.h | 10 +++++----- tcg/riscv/tcg-target.c.inc | 29 +++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 5 deletions(-) diff --git a/tcg/riscv/tcg-target.h b/tcg/riscv/tcg-target.h index 317d385924..8e327afc3a 100644 --- a/tcg/riscv/tcg-target.h +++ b/tcg/riscv/tcg-target.h @@ -116,8 +116,8 @@ extern bool have_zbb; #define TCG_TARGET_HAS_ext16s_i32 1 #define TCG_TARGET_HAS_ext8u_i32 1 #define TCG_TARGET_HAS_ext16u_i32 1 -#define TCG_TARGET_HAS_bswap16_i32 0 -#define TCG_TARGET_HAS_bswap32_i32 0 +#define TCG_TARGET_HAS_bswap16_i32 have_zbb +#define TCG_TARGET_HAS_bswap32_i32 have_zbb #define TCG_TARGET_HAS_not_i32 1 #define TCG_TARGET_HAS_neg_i32 1 #define TCG_TARGET_HAS_andc_i32 have_zbb @@ -149,9 +149,9 @@ extern bool have_zbb; #define TCG_TARGET_HAS_ext8u_i64 1 #define TCG_TARGET_HAS_ext16u_i64 1 #define TCG_TARGET_HAS_ext32u_i64 1 -#define TCG_TARGET_HAS_bswap16_i64 0 -#define TCG_TARGET_HAS_bswap32_i64 0 -#define TCG_TARGET_HAS_bswap64_i64 0 +#define TCG_TARGET_HAS_bswap16_i64 have_zbb +#define TCG_TARGET_HAS_bswap32_i64 have_zbb +#define TCG_TARGET_HAS_bswap64_i64 have_zbb #define TCG_TARGET_HAS_not_i64 1 #define TCG_TARGET_HAS_neg_i64 1 #define TCG_TARGET_HAS_andc_i64 have_zbb diff --git a/tcg/riscv/tcg-target.c.inc b/tcg/riscv/tcg-target.c.inc index 58f969b4fe..9cbefb2833 100644 --- a/tcg/riscv/tcg-target.c.inc +++ b/tcg/riscv/tcg-target.c.inc @@ -1488,6 +1488,30 @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc, } break; =20 + case INDEX_op_bswap64_i64: + tcg_out_opc_imm(s, OPC_REV8, a0, a1, 0); + break; + case INDEX_op_bswap32_i32: + a2 =3D 0; + /* fall through */ + case INDEX_op_bswap32_i64: + tcg_out_opc_imm(s, OPC_REV8, a0, a1, 0); + if (a2 & TCG_BSWAP_OZ) { + tcg_out_opc_imm(s, OPC_SRLI, a0, a0, 32); + } else { + tcg_out_opc_imm(s, OPC_SRAI, a0, a0, 32); + } + break; + case INDEX_op_bswap16_i64: + case INDEX_op_bswap16_i32: + tcg_out_opc_imm(s, OPC_REV8, a0, a1, 0); + if (a2 & TCG_BSWAP_OZ) { + tcg_out_opc_imm(s, OPC_SRLI, a0, a0, 48); + } else { + tcg_out_opc_imm(s, OPC_SRAI, a0, a0, 48); + } + break; + case INDEX_op_add2_i32: tcg_out_addsub2(s, a0, a1, a2, args[3], args[4], args[5], const_args[4], const_args[5], false, true); @@ -1605,6 +1629,11 @@ static TCGConstraintSetIndex tcg_target_op_def(TCGOp= code op) case INDEX_op_extrl_i64_i32: case INDEX_op_extrh_i64_i32: case INDEX_op_ext_i32_i64: + case INDEX_op_bswap16_i32: + case INDEX_op_bswap32_i32: + case INDEX_op_bswap16_i64: + case INDEX_op_bswap32_i64: + case INDEX_op_bswap64_i64: return C_O1_I1(r, r); =20 case INDEX_op_st8_i32: --=20 2.34.1 From nobody Wed May 15 04:56:04 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1683104341; cv=none; d=zohomail.com; s=zohoarc; b=KY/OuCXrIT3qEW2iO5MJRhgLZii+LE5cS0eu8ubIp3VvweYIyXiTdfTE6bhAkfD1jnpGHLFTzfet1g+aWwMcL3yEAWOFJYtzX0A4FLFVum5bL3Go9WDyO7A6YMrHkBBeioR4roi6ORDM0eL3uOp17cg9yiGLU30dMwXUryjbNic= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1683104341; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=qshuFHelfQFVr2N7hYS5TSyOh9tRjXEkwQ8CGfYtq2M=; b=L3co+ktZ7EjfO9SwgEISQfJPB6wy0mTMLtj/fqZmMuoHXcoMg39H9sAKvUrojh8jWHLdWm3f20+d8Ikg2LYI5QPcxpsgvRFyGbOBXXHeyURpQxPjCDtvpXAqk6QZHtHZ53MWkUMLYq1k0IXtG61V4ZqLsRsIdxdAYs9K0AvjB8M= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1683104341959236.3656996692797; Wed, 3 May 2023 01:59:01 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pu8IO-0000ye-Vi; Wed, 03 May 2023 04:57:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pu8IL-0000wH-JU for qemu-devel@nongnu.org; Wed, 03 May 2023 04:57:05 -0400 Received: from mail-wm1-x333.google.com ([2a00:1450:4864:20::333]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pu8IK-0006cc-1W for qemu-devel@nongnu.org; Wed, 03 May 2023 04:57:05 -0400 Received: by mail-wm1-x333.google.com with SMTP id 5b1f17b1804b1-3f315735514so14291335e9.1 for ; Wed, 03 May 2023 01:57:03 -0700 (PDT) Received: from stoup.Home ([2a02:c7c:74db:8d00:c01d:9d74:b630:9087]) by smtp.gmail.com with ESMTPSA id f26-20020a7bcd1a000000b003ef5f77901dsm1191307wmj.45.2023.05.03.01.57.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 May 2023 01:57:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1683104222; x=1685696222; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=qshuFHelfQFVr2N7hYS5TSyOh9tRjXEkwQ8CGfYtq2M=; b=BFam8d2Y1IYYtVXg5EnpLfNNu3m3oUpSAF4X2oRTHSqi7NBoLBtCfQFijhEdsWmzi0 RyL0qzwET2dZd3zqAiLY1yWInkLQzP89C7yaIfz8bpBUeOb/ViGzVJ+McoGSjiI8qbLU h8IzAO3u2bd2DbhWuYe/vDmClFKxTgu89506XTzHJQR7iS5Xh4un3qYzZdXLIefo++3D 2pl8lSS/fIE6Pqo5GJBWyOIiM7Lp5IyPWOqGIdTcftPf89dTYqGrlUDd7IQ27JwvgkSg 3LtzL3NkVOxzWTLnPjUworhEnnSifpYj67AZwFIwUkuiL7KR36QQUQ/D+/kYhKd9TeFP qu2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1683104222; x=1685696222; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=qshuFHelfQFVr2N7hYS5TSyOh9tRjXEkwQ8CGfYtq2M=; b=Ih4xDGL+9cvaC7JXUt9v/Ho6aJTvAyzboaGim7ps1NE4NSRAdolWv5xXvxQN0Msciu OYoG/lfbZYHG5YykFRtMrLKybYLapncJzmNr0SPMEoo4sYV0u1A2tUJMsKjny/tJVaRU 5gK5mmI6SWURSu0rJn2pQhD3LqUxxk5frq6AyqP437DX6hldbEbqKfC90AQGU7CWrJxE bsq5J0XKA6DQyI7MGRxaR7QA8yjjPw0PzeD4v1PO0uBJYVkLEoV197DDeBBEtt7tsIDF KVYN7T5LdT4zIkdIMvplGb01+VtvsM9zV1JLQNehnBxN8usdLAn2qJWj+rVYJapP5OvQ bBeg== X-Gm-Message-State: AC+VfDyhodt0RAABGDDy3c7A0HiG/+iifbW28eqazC8J7LibaIt+3YLT Fvppvb12Gc4ptXM4Kuc5k/5sdFS6eTqFHbUBWPmn0w== X-Google-Smtp-Source: ACHHUZ67Ck52E0l8dBmkeAdOnqWOl5F6jmfj0KL7MywAYgszJwq3BkiO9p+AqPDEFG0/kyJc4PdC5Q== X-Received: by 2002:a05:600c:3b03:b0:3f1:754e:69e6 with SMTP id m3-20020a05600c3b0300b003f1754e69e6mr907573wms.17.1683104222594; Wed, 03 May 2023 01:57:02 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: dbarboza@ventanamicro.com Subject: [PATCH 08/11] tcg/riscv: Support CPOP from Zbb Date: Wed, 3 May 2023 09:56:54 +0100 Message-Id: <20230503085657.1814850-9-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230503085657.1814850-1-richard.henderson@linaro.org> References: <20230503085657.1814850-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=2a00:1450:4864:20::333; envelope-from=richard.henderson@linaro.org; helo=mail-wm1-x333.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, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1683104342878100001 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson Acked-by: Alistair Francis Reviewed-by: Daniel Henrique Barboza --- tcg/riscv/tcg-target.h | 4 ++-- tcg/riscv/tcg-target.c.inc | 9 +++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/tcg/riscv/tcg-target.h b/tcg/riscv/tcg-target.h index 8e327afc3a..e0b23006c4 100644 --- a/tcg/riscv/tcg-target.h +++ b/tcg/riscv/tcg-target.h @@ -127,7 +127,7 @@ extern bool have_zbb; #define TCG_TARGET_HAS_nor_i32 0 #define TCG_TARGET_HAS_clz_i32 0 #define TCG_TARGET_HAS_ctz_i32 0 -#define TCG_TARGET_HAS_ctpop_i32 0 +#define TCG_TARGET_HAS_ctpop_i32 have_zbb #define TCG_TARGET_HAS_brcond2 1 #define TCG_TARGET_HAS_setcond2 1 #define TCG_TARGET_HAS_qemu_st8_i32 0 @@ -161,7 +161,7 @@ extern bool have_zbb; #define TCG_TARGET_HAS_nor_i64 0 #define TCG_TARGET_HAS_clz_i64 0 #define TCG_TARGET_HAS_ctz_i64 0 -#define TCG_TARGET_HAS_ctpop_i64 0 +#define TCG_TARGET_HAS_ctpop_i64 have_zbb #define TCG_TARGET_HAS_add2_i64 1 #define TCG_TARGET_HAS_sub2_i64 1 #define TCG_TARGET_HAS_mulu2_i64 0 diff --git a/tcg/riscv/tcg-target.c.inc b/tcg/riscv/tcg-target.c.inc index 9cbefb2833..044ddfb160 100644 --- a/tcg/riscv/tcg-target.c.inc +++ b/tcg/riscv/tcg-target.c.inc @@ -1512,6 +1512,13 @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc, } break; =20 + case INDEX_op_ctpop_i32: + tcg_out_opc_imm(s, OPC_CPOPW, a0, a1, 0); + break; + case INDEX_op_ctpop_i64: + tcg_out_opc_imm(s, OPC_CPOP, a0, a1, 0); + break; + case INDEX_op_add2_i32: tcg_out_addsub2(s, a0, a1, a2, args[3], args[4], args[5], const_args[4], const_args[5], false, true); @@ -1634,6 +1641,8 @@ static TCGConstraintSetIndex tcg_target_op_def(TCGOpc= ode op) case INDEX_op_bswap16_i64: case INDEX_op_bswap32_i64: case INDEX_op_bswap64_i64: + case INDEX_op_ctpop_i32: + case INDEX_op_ctpop_i64: return C_O1_I1(r, r); =20 case INDEX_op_st8_i32: --=20 2.34.1 From nobody Wed May 15 04:56:04 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1683104296; cv=none; d=zohomail.com; s=zohoarc; b=PK4LwizpNttbqc60Vl7s9wWnAOcXQZHurmKhxiaAeDkt+t91FsiyD3V15E9m2wHAbXGrJvQtJiS/+oIqQJZ6xyiNcJZ8rubA8zNMF3DE9TNZqXf4nNkDTaEYRV+xP+Ccu9T92KObkZ6QE3ZfRoruYRDhT68K/oIvH7vUoxRv8Ow= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1683104296; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=EI3wOjdBpFbW0dpuzsBYjraKASUcW6h2rL91SDLBvrI=; b=VEFa53OHWCobQQkk4WcKwlJBY76UPwtfUhqK4RRAcDUkiUNl3gOQERb6Yq1fqkNPUM8vhb9OUxWLmFipHLyenMEmsI+JrslgFI6zS2R7NqkjU1RUXaYUSYO2q6VGbF3G3Aaq/WlnEjKGA9c/wZC6yPcTSKPTri2cNgxSAW0aw4I= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1683104296127995.1698241846574; Wed, 3 May 2023 01:58:16 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pu8IO-0000yb-I5; Wed, 03 May 2023 04:57:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pu8IM-0000xL-S4 for qemu-devel@nongnu.org; Wed, 03 May 2023 04:57:06 -0400 Received: from mail-wm1-x32c.google.com ([2a00:1450:4864:20::32c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pu8IK-0006cv-VE for qemu-devel@nongnu.org; Wed, 03 May 2023 04:57:06 -0400 Received: by mail-wm1-x32c.google.com with SMTP id 5b1f17b1804b1-3f19a80a330so30351175e9.2 for ; Wed, 03 May 2023 01:57:04 -0700 (PDT) Received: from stoup.Home ([2a02:c7c:74db:8d00:c01d:9d74:b630:9087]) by smtp.gmail.com with ESMTPSA id f26-20020a7bcd1a000000b003ef5f77901dsm1191307wmj.45.2023.05.03.01.57.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 May 2023 01:57:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1683104223; x=1685696223; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=EI3wOjdBpFbW0dpuzsBYjraKASUcW6h2rL91SDLBvrI=; b=ENA7jdXVsuLApM+hcPXz4O8YMnCYv0xcUIf1gfR/n+gdNgNfiM+moHEzmqMa/7VaLH bvLxCtNfmnCANHEUnYZGY5oOfPhORiqk97wYWBbMccs+DrW5KUO0yWAZ3IV+N0gRhe44 j0Q7nXTjA4DeUoQCIBlfqHIToYOojMPJPLny0fB5anc5G8/BaiyMST2lOB/UKoo4uUUQ C3unG82nanJYWsvKHdOYJk2UiqDm7RIlDSOrGPqwzyGE64W5m24hTO+1bsYwnXnm4McE 1ccRbf4D/oP4w13ZOaQ6NgOpBPHIh1xH/7jcTZVTF7UdB9cpOVb8crAu6BEzR27oJHwb Gebw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1683104223; x=1685696223; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=EI3wOjdBpFbW0dpuzsBYjraKASUcW6h2rL91SDLBvrI=; b=bGrtlpgGtMDIm4WAqDiz+SwjGzF1oX8s/OPLGdxR78hZZzf6gRyUZImDVebuj3P7+w xSfAdIVCaf5hw06NCabIFs7NOY721jwVI6K6vxSWuxwE/FYZdFklp0YISZKOCWn4Lftq kTEn2z9OCD5RVC6a1aiD5dwxRLPo16LyUOpMzZdAHkSR5U5bGC1Df+oviCqrygX2T1Oo ZZrownPEbu87eaRigfBBZIU0yPSBaEUB537UZaM0X6aBQHhlNQNCmVhWetHWi2f8GsyA KwjiaiDlBJ/oM9T+GnwAAVB/0ZnkOZHTZt1l61vcf8vqrNuoQLz5B6JN/ihxviqjBXQD YixQ== X-Gm-Message-State: AC+VfDw3+NdQdnKYw1zilxZb57QpxfKh3RhVrOXjxX6ZkfNnf5kfmpHn lCqOwJJENQ7NZ49xZU3be5R8VOXnqsfe7BD7fCZuFQ== X-Google-Smtp-Source: ACHHUZ5YiRCQkv5XLzyEzREtDeHm6VZCP3piWxJ26Rh/XyM1VPabwjKzOYMYONB7u84+g3RuhJcPSg== X-Received: by 2002:a7b:ce8c:0:b0:3f3:468d:d019 with SMTP id q12-20020a7bce8c000000b003f3468dd019mr3306312wmj.16.1683104223087; Wed, 03 May 2023 01:57:03 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: dbarboza@ventanamicro.com Subject: [PATCH 09/11] tcg/riscv: Improve setcond expansion Date: Wed, 3 May 2023 09:56:55 +0100 Message-Id: <20230503085657.1814850-10-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230503085657.1814850-1-richard.henderson@linaro.org> References: <20230503085657.1814850-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=2a00:1450:4864:20::32c; envelope-from=richard.henderson@linaro.org; helo=mail-wm1-x32c.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, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1683104297280100001 Content-Type: text/plain; charset="utf-8" Split out a helper function, tcg_out_setcond_int, which does not always produce the complete boolean result, but returns a set of flags to do so. Based on 21af16198425, the same improvement for loongarch64. Signed-off-by: Richard Henderson Acked-by: Alistair Francis Reviewed-by: Daniel Henrique Barboza --- tcg/riscv/tcg-target.c.inc | 164 +++++++++++++++++++++++++++---------- 1 file changed, 121 insertions(+), 43 deletions(-) diff --git a/tcg/riscv/tcg-target.c.inc b/tcg/riscv/tcg-target.c.inc index 044ddfb160..84b646105c 100644 --- a/tcg/riscv/tcg-target.c.inc +++ b/tcg/riscv/tcg-target.c.inc @@ -812,50 +812,128 @@ static void tcg_out_brcond(TCGContext *s, TCGCond co= nd, TCGReg arg1, tcg_out_opc_branch(s, op, arg1, arg2, 0); } =20 -static void tcg_out_setcond(TCGContext *s, TCGCond cond, TCGReg ret, - TCGReg arg1, TCGReg arg2) +#define SETCOND_INV TCG_TARGET_NB_REGS +#define SETCOND_NEZ (SETCOND_INV << 1) +#define SETCOND_FLAGS (SETCOND_INV | SETCOND_NEZ) + +static int tcg_out_setcond_int(TCGContext *s, TCGCond cond, TCGReg ret, + TCGReg arg1, tcg_target_long arg2, bool c2) { + int flags =3D 0; + switch (cond) { - case TCG_COND_EQ: - tcg_out_opc_reg(s, OPC_SUB, ret, arg1, arg2); - tcg_out_opc_imm(s, OPC_SLTIU, ret, ret, 1); - break; - case TCG_COND_NE: - tcg_out_opc_reg(s, OPC_SUB, ret, arg1, arg2); - tcg_out_opc_reg(s, OPC_SLTU, ret, TCG_REG_ZERO, ret); - break; - case TCG_COND_LT: - tcg_out_opc_reg(s, OPC_SLT, ret, arg1, arg2); - break; - case TCG_COND_GE: - tcg_out_opc_reg(s, OPC_SLT, ret, arg1, arg2); - tcg_out_opc_imm(s, OPC_XORI, ret, ret, 1); - break; - case TCG_COND_LE: - tcg_out_opc_reg(s, OPC_SLT, ret, arg2, arg1); - tcg_out_opc_imm(s, OPC_XORI, ret, ret, 1); - break; - case TCG_COND_GT: - tcg_out_opc_reg(s, OPC_SLT, ret, arg2, arg1); - break; - case TCG_COND_LTU: - tcg_out_opc_reg(s, OPC_SLTU, ret, arg1, arg2); - break; - case TCG_COND_GEU: - tcg_out_opc_reg(s, OPC_SLTU, ret, arg1, arg2); - tcg_out_opc_imm(s, OPC_XORI, ret, ret, 1); - break; - case TCG_COND_LEU: - tcg_out_opc_reg(s, OPC_SLTU, ret, arg2, arg1); - tcg_out_opc_imm(s, OPC_XORI, ret, ret, 1); - break; - case TCG_COND_GTU: - tcg_out_opc_reg(s, OPC_SLTU, ret, arg2, arg1); + case TCG_COND_EQ: /* -> NE */ + case TCG_COND_GE: /* -> LT */ + case TCG_COND_GEU: /* -> LTU */ + case TCG_COND_GT: /* -> LE */ + case TCG_COND_GTU: /* -> LEU */ + cond =3D tcg_invert_cond(cond); + flags ^=3D SETCOND_INV; break; default: - g_assert_not_reached(); - break; - } + break; + } + + switch (cond) { + case TCG_COND_LE: + case TCG_COND_LEU: + /* + * If we have a constant input, the most efficient way to implement + * LE is by adding 1 and using LT. Watch out for wrap around for = LEU. + * We don't need to care for this for LE because the constant input + * is constrained to signed 12-bit, and 0x800 is representable in = the + * temporary register. + */ + if (c2) { + if (cond =3D=3D TCG_COND_LEU) { + /* unsigned <=3D -1 is true */ + if (arg2 =3D=3D -1) { + tcg_out_movi(s, TCG_TYPE_REG, ret, !(flags & SETCOND_I= NV)); + return ret; + } + cond =3D TCG_COND_LTU; + } else { + cond =3D TCG_COND_LT; + } + tcg_debug_assert(arg2 <=3D 0x7ff); + if (++arg2 =3D=3D 0x800) { + tcg_out_movi(s, TCG_TYPE_REG, TCG_REG_TMP0, arg2); + arg2 =3D TCG_REG_TMP0; + c2 =3D false; + } + } else { + TCGReg tmp =3D arg2; + arg2 =3D arg1; + arg1 =3D tmp; + cond =3D tcg_swap_cond(cond); /* LE -> GE */ + cond =3D tcg_invert_cond(cond); /* GE -> LT */ + flags ^=3D SETCOND_INV; + } + break; + default: + break; + } + + switch (cond) { + case TCG_COND_NE: + flags |=3D SETCOND_NEZ; + if (!c2) { + tcg_out_opc_reg(s, OPC_XOR, ret, arg1, arg2); + } else if (arg2 =3D=3D 0) { + ret =3D arg1; + } else { + tcg_out_opc_reg(s, OPC_XORI, ret, arg1, arg2); + } + break; + + case TCG_COND_LT: + if (c2) { + tcg_out_opc_imm(s, OPC_SLTI, ret, arg1, arg2); + } else { + tcg_out_opc_reg(s, OPC_SLT, ret, arg1, arg2); + } + break; + + case TCG_COND_LTU: + if (c2) { + tcg_out_opc_imm(s, OPC_SLTIU, ret, arg1, arg2); + } else { + tcg_out_opc_reg(s, OPC_SLTU, ret, arg1, arg2); + } + break; + + default: + g_assert_not_reached(); + } + + return ret | flags; +} + +static void tcg_out_setcond(TCGContext *s, TCGCond cond, TCGReg ret, + TCGReg arg1, tcg_target_long arg2, bool c2) +{ + int tmpflags =3D tcg_out_setcond_int(s, cond, ret, arg1, arg2, c2); + + if (tmpflags !=3D ret) { + TCGReg tmp =3D tmpflags & ~SETCOND_FLAGS; + + switch (tmpflags & SETCOND_FLAGS) { + case SETCOND_INV: + /* Intermediate result is boolean: simply invert. */ + tcg_out_opc_imm(s, OPC_XORI, ret, tmp, 1); + break; + case SETCOND_NEZ: + /* Intermediate result is zero/non-zero: test !=3D 0. */ + tcg_out_opc_reg(s, OPC_SLTU, ret, TCG_REG_ZERO, tmp); + break; + case SETCOND_NEZ | SETCOND_INV: + /* Intermediate result is zero/non-zero: test =3D=3D 0. */ + tcg_out_opc_imm(s, OPC_SLTIU, ret, tmp, 1); + break; + default: + g_assert_not_reached(); + } + } } =20 static void tcg_out_call_int(TCGContext *s, const tcg_insn_unit *arg, bool= tail) @@ -1543,7 +1621,7 @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc, =20 case INDEX_op_setcond_i32: case INDEX_op_setcond_i64: - tcg_out_setcond(s, args[3], a0, a1, a2); + tcg_out_setcond(s, args[3], a0, a1, a2, c2); break; =20 case INDEX_op_qemu_ld_i32: @@ -1662,6 +1740,8 @@ static TCGConstraintSetIndex tcg_target_op_def(TCGOpc= ode op) case INDEX_op_and_i64: case INDEX_op_or_i64: case INDEX_op_xor_i64: + case INDEX_op_setcond_i32: + case INDEX_op_setcond_i64: return C_O1_I2(r, r, rI); =20 case INDEX_op_andc_i32: @@ -1683,7 +1763,6 @@ static TCGConstraintSetIndex tcg_target_op_def(TCGOpc= ode op) case INDEX_op_divu_i32: case INDEX_op_rem_i32: case INDEX_op_remu_i32: - case INDEX_op_setcond_i32: case INDEX_op_mul_i64: case INDEX_op_mulsh_i64: case INDEX_op_muluh_i64: @@ -1691,7 +1770,6 @@ static TCGConstraintSetIndex tcg_target_op_def(TCGOpc= ode op) case INDEX_op_divu_i64: case INDEX_op_rem_i64: case INDEX_op_remu_i64: - case INDEX_op_setcond_i64: return C_O1_I2(r, rZ, rZ); =20 case INDEX_op_shl_i32: --=20 2.34.1 From nobody Wed May 15 04:56:04 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1683104298; cv=none; d=zohomail.com; s=zohoarc; b=nbV0KwIR2pb8ooiGbXymvePyG0aPvWwBZaeNT90ymYzcJmb04Oa7wn2CiBOcOWhX5dWEQfwYZfh1UNtK8TPXRp0S0P0/IP67B3OsT0tewel01akZ9w/4BWy8zu8xvUvkNyseql8UqLEVigGMLLopGNDFaB1CTxZ35QFyt72x/nU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1683104298; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=CmoYi5mzvqJYAtMQbdHDy5/NmOb6rMQv5LtvmjoqGcI=; b=aAz7g2/uZw5nVrhiRRGEXIbbI96b07zTJm65masfKfD3vTo+0T9YiUbhVQRQTaaFRpblWWgmFwzpeSyHFFK1IGUuT9I/Sg06ZdL7vsFNM0qXaWjzE7v5/+9KqOsfLD7ZjgQdD//xmVwbqSH2bH2HRY5P3aYayzMzpRwn2PzLIEk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1683104298460346.4126940943522; Wed, 3 May 2023 01:58:18 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pu8IP-0000z0-OX; Wed, 03 May 2023 04:57:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pu8IN-0000y8-DB for qemu-devel@nongnu.org; Wed, 03 May 2023 04:57:07 -0400 Received: from mail-wm1-x331.google.com ([2a00:1450:4864:20::331]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pu8IL-0006d9-El for qemu-devel@nongnu.org; Wed, 03 May 2023 04:57:07 -0400 Received: by mail-wm1-x331.google.com with SMTP id 5b1f17b1804b1-3f315712406so14808145e9.0 for ; Wed, 03 May 2023 01:57:05 -0700 (PDT) Received: from stoup.Home ([2a02:c7c:74db:8d00:c01d:9d74:b630:9087]) by smtp.gmail.com with ESMTPSA id f26-20020a7bcd1a000000b003ef5f77901dsm1191307wmj.45.2023.05.03.01.57.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 May 2023 01:57:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1683104224; x=1685696224; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=CmoYi5mzvqJYAtMQbdHDy5/NmOb6rMQv5LtvmjoqGcI=; b=Ini0iXlo/Ydm/RQ+ID3eAGqiM3z0iSxTZ3r/tiPjWCqbHqYpyWnKzGMArzFhBoZ0T/ rWuIMpxChr9Wj+AcvlxK1YeMwS4Jg2b8vscnoM+LxrcdgC1fcdlDzwo7B1wdGCpf094U BPhXKSb4Lini/M11R6DL5fM3K4UfMRBJ88P93oLLWpYKg894zMlJ1M8AFVC73143byL5 zMdwQXg/XehLpEMSa00hxYz+TDbyseEvXrx5UCHMiYy6gLll1ysortkryKhzIpHE8s0m 02ZIlUntmm2s7B/CyAAWSFheeurYzBx87RIo6JkThgvC4SwmqsBIoJ4gUMDQcgZcTFbz aSdA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1683104224; x=1685696224; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=CmoYi5mzvqJYAtMQbdHDy5/NmOb6rMQv5LtvmjoqGcI=; b=DNkgtBSjinRas4Wgj7eOxKc7XXOJcqLJStsq691Oga+Ybi4Bm8hc5/6nPhGUaxeWc5 7gxsVKFTXTAXU0iLX+72+/k0auwOj9TeGOTuo7BRG+9KDrp7f+rqCS2v+GwQeLADOlEW CkTcn/9BbcTTY7oADBiiAffvzz9Z3mgSOyHn5AjHmM26iSf3W5JE30E7zdtv59px0mbP 7o8MWeWegpRwC1qb+rFYBBwPj+houn0vQ30ASLZNTbGy3IhITv5VBwwwjhxeZSfcIY+E lo2LRG8MJT94dPFy0827fKIXQb37lcucQzJkijsBh9MoToESNucHscfDGldSuOa/UaXN lIWw== X-Gm-Message-State: AC+VfDxuiuv/4Zi6AumME64qyQuxbOY9dYJNU08NPFlpLBEIzzqa1XdG CMcdtyn26ILXxiI/sRAr79ECj/y3j2igVb/WYNcW7g== X-Google-Smtp-Source: ACHHUZ4gVo5NGp6YlxidCocL4QoiaqgQTFPyuNMKMz1IPi2wPyGkpLZG8L5YSnaXf9n3Zu6u5ocynA== X-Received: by 2002:a1c:7915:0:b0:3f1:6880:3308 with SMTP id l21-20020a1c7915000000b003f168803308mr1062485wme.1.1683104223797; Wed, 03 May 2023 01:57:03 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: dbarboza@ventanamicro.com Subject: [PATCH 10/11] tcg/riscv: Implement movcond Date: Wed, 3 May 2023 09:56:56 +0100 Message-Id: <20230503085657.1814850-11-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230503085657.1814850-1-richard.henderson@linaro.org> References: <20230503085657.1814850-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=2a00:1450:4864:20::331; envelope-from=richard.henderson@linaro.org; helo=mail-wm1-x331.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, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1683104360291100001 Content-Type: text/plain; charset="utf-8" Implement with and without Zicond. Without Zicond, we were letting the middle-end expand to a 5 insn sequence; better to use a branch over a single insn. Signed-off-by: Richard Henderson Acked-by: Alistair Francis Reviewed-by: Daniel Henrique Barboza --- tcg/riscv/tcg-target-con-set.h | 1 + tcg/riscv/tcg-target.h | 4 +- tcg/riscv/tcg-target.c.inc | 139 ++++++++++++++++++++++++++++++++- 3 files changed, 141 insertions(+), 3 deletions(-) diff --git a/tcg/riscv/tcg-target-con-set.h b/tcg/riscv/tcg-target-con-set.h index 1a33ece98f..a5cadd303f 100644 --- a/tcg/riscv/tcg-target-con-set.h +++ b/tcg/riscv/tcg-target-con-set.h @@ -18,4 +18,5 @@ C_O1_I2(r, r, rI) C_O1_I2(r, r, rJ) C_O1_I2(r, rZ, rN) C_O1_I2(r, rZ, rZ) +C_O1_I4(r, r, rI, rM, rM) C_O2_I4(r, r, rZ, rZ, rM, rM) diff --git a/tcg/riscv/tcg-target.h b/tcg/riscv/tcg-target.h index e0b23006c4..e9e84be9a5 100644 --- a/tcg/riscv/tcg-target.h +++ b/tcg/riscv/tcg-target.h @@ -97,7 +97,7 @@ extern bool have_zbb; #endif =20 /* optional instructions */ -#define TCG_TARGET_HAS_movcond_i32 0 +#define TCG_TARGET_HAS_movcond_i32 1 #define TCG_TARGET_HAS_div_i32 1 #define TCG_TARGET_HAS_rem_i32 1 #define TCG_TARGET_HAS_div2_i32 0 @@ -132,7 +132,7 @@ extern bool have_zbb; #define TCG_TARGET_HAS_setcond2 1 #define TCG_TARGET_HAS_qemu_st8_i32 0 =20 -#define TCG_TARGET_HAS_movcond_i64 0 +#define TCG_TARGET_HAS_movcond_i64 1 #define TCG_TARGET_HAS_div_i64 1 #define TCG_TARGET_HAS_rem_i64 1 #define TCG_TARGET_HAS_div2_i64 0 diff --git a/tcg/riscv/tcg-target.c.inc b/tcg/riscv/tcg-target.c.inc index 84b646105c..1c57b64182 100644 --- a/tcg/riscv/tcg-target.c.inc +++ b/tcg/riscv/tcg-target.c.inc @@ -169,7 +169,7 @@ static bool tcg_target_const_match(int64_t val, TCGType= type, int ct) } /* * Sign extended from 12 bits, +/- matching: [-0x7ff, 0x7ff]. - * Used by addsub2, which may need the negative operation, + * Used by addsub2 and movcond, which may need the negative value, * and requires the modified constant to be representable. */ if ((ct & TCG_CT_CONST_M12) && val >=3D -0x7ff && val <=3D 0x7ff) { @@ -936,6 +936,133 @@ static void tcg_out_setcond(TCGContext *s, TCGCond co= nd, TCGReg ret, } } =20 +static void tcg_out_movcond_zicond(TCGContext *s, TCGReg ret, TCGReg test_= ne, + int val1, bool c_val1, + int val2, bool c_val2) +{ + if (val1 =3D=3D 0) { + if (c_val2) { + tcg_out_movi(s, TCG_TYPE_REG, TCG_REG_TMP1, val2); + val2 =3D TCG_REG_TMP1; + } + tcg_out_opc_reg(s, OPC_CZERO_NEZ, ret, val2, test_ne); + return; + } + + if (val2 =3D=3D 0) { + if (c_val1) { + tcg_out_movi(s, TCG_TYPE_REG, TCG_REG_TMP1, val1); + val1 =3D TCG_REG_TMP1; + } + tcg_out_opc_reg(s, OPC_CZERO_EQZ, ret, val1, test_ne); + return; + } + + if (c_val2) { + if (c_val1) { + tcg_out_movi(s, TCG_TYPE_REG, TCG_REG_TMP1, val1 - val2); + } else { + tcg_out_opc_imm(s, OPC_ADDI, TCG_REG_TMP1, val1, -val2); + } + tcg_out_opc_reg(s, OPC_CZERO_EQZ, ret, TCG_REG_TMP1, test_ne); + tcg_out_opc_imm(s, OPC_ADDI, ret, ret, val2); + return; + } + + if (c_val1) { + tcg_out_opc_imm(s, OPC_ADDI, TCG_REG_TMP1, val2, -val1); + tcg_out_opc_reg(s, OPC_CZERO_NEZ, ret, TCG_REG_TMP1, test_ne); + tcg_out_opc_imm(s, OPC_ADDI, ret, ret, val1); + return; + } + + tcg_out_opc_reg(s, OPC_CZERO_NEZ, TCG_REG_TMP1, val2, test_ne); + tcg_out_opc_reg(s, OPC_CZERO_EQZ, TCG_REG_TMP0, val1, test_ne); + tcg_out_opc_reg(s, OPC_OR, ret, TCG_REG_TMP0, TCG_REG_TMP1); +} + +static void tcg_out_movcond_br1(TCGContext *s, TCGCond cond, TCGReg ret, + TCGReg cmp1, TCGReg cmp2, + int val, bool c_val) +{ + RISCVInsn op; + int disp =3D 8; + + tcg_debug_assert((unsigned)cond < ARRAY_SIZE(tcg_brcond_to_riscv)); + op =3D tcg_brcond_to_riscv[cond].op; + tcg_debug_assert(op !=3D 0); + + if (tcg_brcond_to_riscv[cond].swap) { + tcg_out_opc_branch(s, op, cmp2, cmp1, disp); + } else { + tcg_out_opc_branch(s, op, cmp1, cmp2, disp); + } + if (c_val) { + tcg_out_opc_imm(s, OPC_ADDI, ret, TCG_REG_ZERO, val); + } else { + tcg_out_opc_imm(s, OPC_ADDI, ret, val, 0); + } +} + +static void tcg_out_movcond_br2(TCGContext *s, TCGCond cond, TCGReg ret, + TCGReg cmp1, TCGReg cmp2, + int val1, bool c_val1, + int val2, bool c_val2) +{ + TCGReg tmp; + + /* TCG optimizer reorders to prefer ret matching val2. */ + if (!c_val2 && ret =3D=3D val2) { + cond =3D tcg_invert_cond(cond); + tcg_out_movcond_br1(s, cond, ret, cmp1, cmp2, val1, c_val1); + return; + } + + if (!c_val1 && ret =3D=3D val1) { + tcg_out_movcond_br1(s, cond, ret, cmp1, cmp2, val2, c_val2); + return; + } + + tmp =3D (ret =3D=3D cmp1 || ret =3D=3D cmp2 ? TCG_REG_TMP1 : ret); + if (c_val1) { + tcg_out_movi(s, TCG_TYPE_REG, tmp, val1); + } else { + tcg_out_mov(s, TCG_TYPE_REG, tmp, val1); + } + tcg_out_movcond_br1(s, cond, tmp, cmp1, cmp2, val2, c_val2); + tcg_out_mov(s, TCG_TYPE_REG, ret, tmp); +} + +static void tcg_out_movcond(TCGContext *s, TCGCond cond, TCGReg ret, + TCGReg cmp1, int cmp2, bool c_cmp2, + TCGReg val1, bool c_val1, + TCGReg val2, bool c_val2) +{ + int tmpflags; + TCGReg t; + + if (!have_zicond && (!c_cmp2 || cmp2 =3D=3D 0)) { + tcg_out_movcond_br2(s, cond, ret, cmp1, cmp2, + val1, c_val1, val2, c_val2); + return; + } + + tmpflags =3D tcg_out_setcond_int(s, cond, TCG_REG_TMP0, cmp1, cmp2, c_= cmp2); + t =3D tmpflags & ~SETCOND_FLAGS; + + if (have_zicond) { + if (tmpflags & SETCOND_INV) { + tcg_out_movcond_zicond(s, ret, t, val2, c_val2, val1, c_val1); + } else { + tcg_out_movcond_zicond(s, ret, t, val1, c_val1, val2, c_val2); + } + } else { + cond =3D tmpflags & SETCOND_INV ? TCG_COND_EQ : TCG_COND_NE; + tcg_out_movcond_br2(s, cond, ret, t, TCG_REG_ZERO, + val1, c_val1, val2, c_val2); + } +} + static void tcg_out_call_int(TCGContext *s, const tcg_insn_unit *arg, bool= tail) { TCGReg link =3D tail ? TCG_REG_ZERO : TCG_REG_RA; @@ -1624,6 +1751,12 @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc, tcg_out_setcond(s, args[3], a0, a1, a2, c2); break; =20 + case INDEX_op_movcond_i32: + case INDEX_op_movcond_i64: + tcg_out_movcond(s, args[5], a0, a1, a2, c2, + args[3], const_args[3], args[4], const_args[4]); + break; + case INDEX_op_qemu_ld_i32: tcg_out_qemu_ld(s, a0, a1, a2, TCG_TYPE_I32); break; @@ -1788,6 +1921,10 @@ static TCGConstraintSetIndex tcg_target_op_def(TCGOp= code op) case INDEX_op_brcond_i64: return C_O0_I2(rZ, rZ); =20 + case INDEX_op_movcond_i32: + case INDEX_op_movcond_i64: + return C_O1_I4(r, r, rI, rM, rM); + case INDEX_op_add2_i32: case INDEX_op_add2_i64: case INDEX_op_sub2_i32: --=20 2.34.1 From nobody Wed May 15 04:56:04 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1683104342; cv=none; d=zohomail.com; s=zohoarc; b=kSuT96XQDHEcBKUzhSVT5qXbCAGP/zAwWF2yI2AVg9aDRj0JwY6L5PRZ62+i/8JmtSRR/fAtt+U/TwtkMK4aYfUBO389h4VH1yk2LbMMIegVhdApogqeYPJ1wZMdEUz7Kl2NJdsCHiW1qz8XKyNRuhz2//2wIo3GJTwN27qwRr0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1683104342; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=+U+88bxpW/MsY8CZaijHYadsAWl6K1XoFCgkecvaIys=; b=EBNxRQYNDe2MqiwcnHDDk8rjsSdew3O5uODLbETn5r2marLCQ05MrQxWcWHDMdeNJsPQLCPU9GaUX+WS97P0TBz1/QZ/66R2HpqVCf2sPrAtSmvdcXfnxRabB1DAg15nc7fMw0aopHmDZd1tIbHKUMjtm3KzMcBfEM/WcR94UWI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1683104342560863.0365564483211; Wed, 3 May 2023 01:59:02 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pu8IP-0000yf-82; Wed, 03 May 2023 04:57:09 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pu8IN-0000yK-I6 for qemu-devel@nongnu.org; Wed, 03 May 2023 04:57:07 -0400 Received: from mail-wm1-x336.google.com ([2a00:1450:4864:20::336]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pu8IL-0006dJ-SD for qemu-devel@nongnu.org; Wed, 03 May 2023 04:57:07 -0400 Received: by mail-wm1-x336.google.com with SMTP id 5b1f17b1804b1-3f178da21afso32511895e9.1 for ; Wed, 03 May 2023 01:57:05 -0700 (PDT) Received: from stoup.Home ([2a02:c7c:74db:8d00:c01d:9d74:b630:9087]) by smtp.gmail.com with ESMTPSA id f26-20020a7bcd1a000000b003ef5f77901dsm1191307wmj.45.2023.05.03.01.57.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 03 May 2023 01:57:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1683104224; x=1685696224; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=+U+88bxpW/MsY8CZaijHYadsAWl6K1XoFCgkecvaIys=; b=kesg1dw38cDWy750IJYCte4rTzJZ1Vt3e90iUc+blaUOHa3CJkNUU6t/7/oQFhSywQ v6hEoKuL804eSJ7R3Rd/ozD4tMtYAoaTQLPzcTH31HAaXx7XyKW8AlWvhRfMisDh8V21 hQJr6AfFoYilz0K2LuVm6+ygrABvQ4k0nnTFj7vZu2lSW1JrDKLHE3u6nC9/WPxZS7Ta lIxbDpC9IGncft2mvaZB144Ygu60U+mHv9lG0lIsueGJwcN1mHBTleYWxKgsxXT0Da2a sBbC/lyxBp7FJRDO8vkEiTLsxsgsOq9x56qwwffPcxJ7iHOxrrqPrKKrSk1gQNPQf5mr 3YMQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1683104224; x=1685696224; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=+U+88bxpW/MsY8CZaijHYadsAWl6K1XoFCgkecvaIys=; b=ct5Pi1VnJtfV1E4i9T9hRCbmvCbGbCX0NmTZ2WpyKzUm3tvd1bBK+oJjSY/ZX2I9Xh pVsA6dfWqVkDkbgjQBQgV9npo3BtpaE3Cok9Ok1Jq/sXZI5FXDcEdQy/JVPviRG7ds4F OiQ+6EJ3Zw3FIzy8d7wummLaisWqmkpBbDXH3ibVcfrphtG2asLXPhjh9oj5rVldMNac i2eBOBTkDbI/d8fJgxcWf8MpJMousAfo37ZJopNXVTH5NeaGxgx+9fn1CPgXZ18nTJ/Z 4NfErm5UnkCCDreQzK70xAjO690uw9JRXzgHwZUxkAvyw5Bgh59SYBqUXLe9AOcU32sR eLkw== X-Gm-Message-State: AC+VfDxjsdBclvUgD2zpIZTXkjNyUNhW54bJ0JGnLJ1CmN0/xYnHOWmD qssY3TPuhqNZ1f61IettdsHvJBR+fqYN2XcEx6vISA== X-Google-Smtp-Source: ACHHUZ7otvNl0ljkNJEPhgFJtUR+AgH6hU9YeL81+1VX9En/XlFohRCQ7ZZ5PQ412YMoMMSo8cBPdQ== X-Received: by 2002:a1c:f607:0:b0:3f1:72ec:4024 with SMTP id w7-20020a1cf607000000b003f172ec4024mr14057047wmc.21.1683104224317; Wed, 03 May 2023 01:57:04 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: dbarboza@ventanamicro.com Subject: [PATCH 11/11] tcg/riscv: Support CTZ, CLZ from Zbb Date: Wed, 3 May 2023 09:56:57 +0100 Message-Id: <20230503085657.1814850-12-richard.henderson@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230503085657.1814850-1-richard.henderson@linaro.org> References: <20230503085657.1814850-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=2a00:1450:4864:20::336; envelope-from=richard.henderson@linaro.org; helo=mail-wm1-x336.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, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1683104343357100005 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson Acked-by: Alistair Francis Reviewed-by: Daniel Henrique Barboza --- tcg/riscv/tcg-target-con-set.h | 1 + tcg/riscv/tcg-target.h | 8 ++++---- tcg/riscv/tcg-target.c.inc | 35 ++++++++++++++++++++++++++++++++++ 3 files changed, 40 insertions(+), 4 deletions(-) diff --git a/tcg/riscv/tcg-target-con-set.h b/tcg/riscv/tcg-target-con-set.h index a5cadd303f..aac5ceee2b 100644 --- a/tcg/riscv/tcg-target-con-set.h +++ b/tcg/riscv/tcg-target-con-set.h @@ -18,5 +18,6 @@ C_O1_I2(r, r, rI) C_O1_I2(r, r, rJ) C_O1_I2(r, rZ, rN) C_O1_I2(r, rZ, rZ) +C_N1_I2(r, r, rM) C_O1_I4(r, r, rI, rM, rM) C_O2_I4(r, r, rZ, rZ, rM, rM) diff --git a/tcg/riscv/tcg-target.h b/tcg/riscv/tcg-target.h index e9e84be9a5..cff5de5c9e 100644 --- a/tcg/riscv/tcg-target.h +++ b/tcg/riscv/tcg-target.h @@ -125,8 +125,8 @@ extern bool have_zbb; #define TCG_TARGET_HAS_eqv_i32 have_zbb #define TCG_TARGET_HAS_nand_i32 0 #define TCG_TARGET_HAS_nor_i32 0 -#define TCG_TARGET_HAS_clz_i32 0 -#define TCG_TARGET_HAS_ctz_i32 0 +#define TCG_TARGET_HAS_clz_i32 1 +#define TCG_TARGET_HAS_ctz_i32 1 #define TCG_TARGET_HAS_ctpop_i32 have_zbb #define TCG_TARGET_HAS_brcond2 1 #define TCG_TARGET_HAS_setcond2 1 @@ -159,8 +159,8 @@ extern bool have_zbb; #define TCG_TARGET_HAS_eqv_i64 have_zbb #define TCG_TARGET_HAS_nand_i64 0 #define TCG_TARGET_HAS_nor_i64 0 -#define TCG_TARGET_HAS_clz_i64 0 -#define TCG_TARGET_HAS_ctz_i64 0 +#define TCG_TARGET_HAS_clz_i64 1 +#define TCG_TARGET_HAS_ctz_i64 1 #define TCG_TARGET_HAS_ctpop_i64 have_zbb #define TCG_TARGET_HAS_add2_i64 1 #define TCG_TARGET_HAS_sub2_i64 1 diff --git a/tcg/riscv/tcg-target.c.inc b/tcg/riscv/tcg-target.c.inc index 1c57b64182..a1c92b0603 100644 --- a/tcg/riscv/tcg-target.c.inc +++ b/tcg/riscv/tcg-target.c.inc @@ -1063,6 +1063,22 @@ static void tcg_out_movcond(TCGContext *s, TCGCond c= ond, TCGReg ret, } } =20 +static void tcg_out_cltz(TCGContext *s, TCGType type, RISCVInsn insn, + TCGReg ret, TCGReg src1, int src2, bool c_src2) +{ + tcg_out_opc_imm(s, insn, ret, src1, 0); + + if (!c_src2 || src2 !=3D (type =3D=3D TCG_TYPE_I32 ? 32 : 64)) { + /* + * The requested zero result does not match the insn, so adjust. + * Note that constraints put 'ret' in a new register, so the + * computation above did not clobber either 'src1' or 'src2'. + */ + tcg_out_movcond(s, TCG_COND_EQ, ret, src1, 0, true, + src2, c_src2, ret, false); + } +} + static void tcg_out_call_int(TCGContext *s, const tcg_insn_unit *arg, bool= tail) { TCGReg link =3D tail ? TCG_REG_ZERO : TCG_REG_RA; @@ -1724,6 +1740,19 @@ static void tcg_out_op(TCGContext *s, TCGOpcode opc, tcg_out_opc_imm(s, OPC_CPOP, a0, a1, 0); break; =20 + case INDEX_op_clz_i32: + tcg_out_cltz(s, TCG_TYPE_I32, OPC_CLZW, a0, a1, a2, c2); + break; + case INDEX_op_clz_i64: + tcg_out_cltz(s, TCG_TYPE_I64, OPC_CLZ, a0, a1, a2, c2); + break; + case INDEX_op_ctz_i32: + tcg_out_cltz(s, TCG_TYPE_I32, OPC_CTZW, a0, a1, a2, c2); + break; + case INDEX_op_ctz_i64: + tcg_out_cltz(s, TCG_TYPE_I64, OPC_CTZ, a0, a1, a2, c2); + break; + case INDEX_op_add2_i32: tcg_out_addsub2(s, a0, a1, a2, args[3], args[4], args[5], const_args[4], const_args[5], false, true); @@ -1917,6 +1946,12 @@ static TCGConstraintSetIndex tcg_target_op_def(TCGOp= code op) case INDEX_op_rotr_i64: return C_O1_I2(r, r, ri); =20 + case INDEX_op_clz_i32: + case INDEX_op_clz_i64: + case INDEX_op_ctz_i32: + case INDEX_op_ctz_i64: + return C_N1_I2(r, r, rM); + case INDEX_op_brcond_i32: case INDEX_op_brcond_i64: return C_O0_I2(rZ, rZ); --=20 2.34.1