From nobody Thu Dec 18 22:28:31 2025 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=1751646337; cv=none; d=zohomail.com; s=zohoarc; b=MJTzoUYy3j/jifeGbajJp5wMG8ZunfunKnRu7G4Gj5QybjBINSlSTQKRLZ3SkipCYDY8V1Sxy4E86zapErfRMbJvDcPkgYLrXYVLEU7Q7KizqlrTetZaDQ934Q+4pv3Z8tNRu48hqLRsNRYuNh0YTwcmHL06K4J0PgbIOtoowAw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646337; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=0FNB0Y/hxjBPu/8t+fC050+nfMllIieEiCtJqxKj6X8=; b=lqDfaxIvVLw4uPEJ9Pv8e/TBXdHqBKWd2SOJwPGFb//8XRCFxodIgyCi2Cy0uKcH+19Mp2pQBlK3K0QjdYZEdRauHGw469mjSfCVUC98lM2RUNEEkyPYcMQOrlnWuGIZO/dV52bRcNgyUMP4YWd0DelWFHLsMBUdB/80bF3nCx0= 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 1751646337902601.2757772769079; Fri, 4 Jul 2025 09:25:37 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjDp-00086D-Vr; Fri, 04 Jul 2025 12:25:10 -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 1uXjDn-00085M-Nn for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:07 -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 1uXjDl-0005rI-Un for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:07 -0400 Received: by mail-wm1-x334.google.com with SMTP id 5b1f17b1804b1-4535fbe0299so6161755e9.3 for ; Fri, 04 Jul 2025 09:25:05 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.03 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646304; x=1752251104; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=0FNB0Y/hxjBPu/8t+fC050+nfMllIieEiCtJqxKj6X8=; b=ir0uYMR8IgrlCvEdseZPCUBrQh0cVY4uONEZbSDEXqiCshDpRAjo9WFnZN2CMyRvNB tmCpBZvCzSlnlO2AtZ/Jh9T3KtbqJFs225ifKfpeCT9xxExzzHQBVNI1xRfsf46EYxn4 90jc/yNkAi/w0PHvxLo9MovkhczGphN4vnKY7MYD12fUuf/uPoPcIglawyNtFfNz8+rX 2eI7OgrPacmQdkj/nfwkgSVKIRleU8scPNQGICTji6Qpp0NCKFJY1tAOHLFNptMKR5Ce Boed5K1I7IVz6kwYfOWxoC33ppwK3REK0EzANZ7MkgKYTuU2CzGbE+pHtDHa6vndYfFb XM6g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646304; x=1752251104; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=0FNB0Y/hxjBPu/8t+fC050+nfMllIieEiCtJqxKj6X8=; b=Idyb0O+arXaRvHrD/5Ub8MV+GmmxvU/yGenJ88xy9p1BWiiaENHNIt0ZIT3NVxZEDX 4Zc0qm8pqccd2sjML5e9zO/44qoGBWpXjdTDPuztY/MrWgiYBe4WUr7QIG7Sl9T+lFEp 1aAyzu05SBnJN5MHtF1Z4sxTZAMTyyMEccyf7SwS5dFKhr2vCTt1OWhsC75HfYwnEZ83 j/tXm13OtO2pG9kDrGQ0B1qfUnk0ysuv/i7EGFluiKIacvn7ELc3RtB0cnyY0yGaFoj5 Znj/OPWohsmYYeSiPYjZZpCBTbnkQKLDcPk74d2S1oxkoRSaolt3Nv/xiXQLFVaBTZXs Uedg== X-Gm-Message-State: AOJu0YxQ6g2+8jfUK0HtF3JFLMThlCi+EcA3JqOOSLqQKJjZ8uCYAWWU H6vSOH2C8YB5dSL/88OPYsYqNPJxsBdMmAWcritEvs4HjDID8iPKdUMtLQ1m0Zb/66ZKulGrH1d T0CjX X-Gm-Gg: ASbGncsU+NokX/iT68pABk207kKs+NUEdBmloFEw5Vag26sYJIxp2/l639hGwvOFN2d HWdQNGK6Hd9UjmgB2k7OP88gk9i/1zE4gXndkFVv3znzwktf9PG4Vi4CX4zgsatMBGcaqeFGslP AtLUWOsINKCgU4OdDdPIbtxEi9skbmLv9FrcvZ3Un/RnCNyWabuQo1jvDBbW+mveACaOK5oYrBi RibKvwMVgafDM0Nq2K1h1fkzuqcekjizkssAXXKx8Ht8Soi6g3hwo9wtKipXs/55iua9q6dr0GN kaFLMHjUK41RO9gEg/sCABrPd2EZYIKMRA2/yD3lQmy8rEzXXzTSnnHMONDjAx4/Kb6e X-Google-Smtp-Source: AGHT+IHmgJ6dzJmJ7eytg1AsD50sYGIjW6Bw7mgvuH3rHCuoEnZYRfgkiL+yUggK9/kbbaSFB1a57A== X-Received: by 2002:a05:600c:8219:b0:441:b3eb:570a with SMTP id 5b1f17b1804b1-454b3107ef7mr29878825e9.2.1751646304181; Fri, 04 Jul 2025 09:25:04 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 001/119] hw/arm/highbank: Mark the "highbank" and the "midway" machine as deprecated Date: Fri, 4 Jul 2025 17:23:01 +0100 Message-ID: <20250704162501.249138-2-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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=peter.maydell@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 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: 1751646340210116600 Content-Type: text/plain; charset="utf-8" From: Thomas Huth We don't have any automatic regression tests for these machines and when asking the usual suspects on the mailing list we came to the conclusion that nobody tests these machines manually, too, so it seems like this is currently just completely unused code. Mark them as depre- cated to see whether anybody still speaks up during the deprecation period, otherwise we can likely remove these two machines in a couple of releases. Signed-off-by: Thomas Huth Acked-by: Rob Herring Acked-by: Guenter Roeck Message-id: 20250702113051.46483-1-thuth@redhat.com Reviewed-by: Peter Maydell [PMM: tweaked deprecation.rst text] Signed-off-by: Peter Maydell --- docs/about/deprecated.rst | 7 +++++++ hw/arm/highbank.c | 2 ++ 2 files changed, 9 insertions(+) diff --git a/docs/about/deprecated.rst b/docs/about/deprecated.rst index 42037131de1..b24c278f707 100644 --- a/docs/about/deprecated.rst +++ b/docs/about/deprecated.rst @@ -344,6 +344,13 @@ they want to use and avoids confusion. Existing users= of the ``spike`` machine must ensure that they're setting the ``spike`` machine in the command line (``-M spike``). =20 +Arm ``highbank`` and ``midway`` machines (since 10.1) +''''''''''''''''''''''''''''''''''''''''''''''''''''' + +There are no known users left for these machines (if you still use it, +please write a mail to the qemu-devel mailing list). If you just want to +boot a Cortex-A15 or Cortex-A9 Linux, use the ``virt`` machine instead. + =20 System emulator binaries ------------------------ diff --git a/hw/arm/highbank.c b/hw/arm/highbank.c index 3ae26ebebdc..165c0b741a5 100644 --- a/hw/arm/highbank.c +++ b/hw/arm/highbank.c @@ -357,6 +357,7 @@ static void highbank_class_init(ObjectClass *oc, const = void *data) mc->max_cpus =3D 4; mc->ignore_memory_transaction_failures =3D true; mc->default_ram_id =3D "highbank.dram"; + mc->deprecation_reason =3D "no known users left for this machine"; } =20 static const TypeInfo highbank_type =3D { @@ -381,6 +382,7 @@ static void midway_class_init(ObjectClass *oc, const vo= id *data) mc->max_cpus =3D 4; mc->ignore_memory_transaction_failures =3D true; mc->default_ram_id =3D "highbank.dram"; + mc->deprecation_reason =3D "no known users left for this machine"; } =20 static const TypeInfo midway_type =3D { --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646906; cv=none; d=zohomail.com; s=zohoarc; b=ZvZ5lGC/ARH2jtZe8B6f+T2hn8c5wspTb0cALLFEC1KVMKu+jrx6q69Szkr2rCKrXQxTuCGWkPvDM2sqrowvlRG6XJWJLPgOr8pLohZLZm5dseB2lSQ8ZGNozeElCiQkZpyfkfCW5Qtvz69VI0F09ktCP7jELeaFDSJNM+NnUFY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646906; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=/2btOuqcn6Xe57qmXPDc5kx7Q5nom+ioP+Bpq02iGrQ=; b=CQOtVoWyWqCgkUsHF8XRtVgmyM9Vm1y+Y+2JS8jT1Acrv6TYiYBeNkyXGGgbbfKGWnasYKrL/awYcnCLGOCkVU19sul7b41dhW/XJIuWGeETFA6ENB1igrAnMSh3Lj9YlVY2v07kvHoo8MJpOBDKPmigFZfYaH0HaWwIE5vLQPI= 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 1751646906426635.9285486139029; Fri, 4 Jul 2025 09:35:06 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjDs-00087N-J8; Fri, 04 Jul 2025 12:25:12 -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 1uXjDq-00086H-0l for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:10 -0400 Received: from mail-wr1-x429.google.com ([2a00:1450:4864:20::429]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjDo-0005s2-3M for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:09 -0400 Received: by mail-wr1-x429.google.com with SMTP id ffacd0b85a97d-3a536ecbf6fso620463f8f.2 for ; Fri, 04 Jul 2025 09:25:07 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.04 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646305; x=1752251105; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=/2btOuqcn6Xe57qmXPDc5kx7Q5nom+ioP+Bpq02iGrQ=; b=xDZ+HFa63I12Gb8MHs3yC9l16B2eGJCY+ZSZndKyqqtaEJ/ynyWnOPFSBdgq76R0FV und5qW9Dz+VwODSalJosW0zvwLvFjnQ7ka/bhGvwYufDNxpJywmL/6kQoyVGVD4NHceb 0o/wwo2A8USWL7TOJSFm18ZxC/85SOiuzMNhS9CxBskNGfmrktnuB/uA9oqbAIqvR9/j ELNW5TW4IRAzZAqv4Rx5otd6/4N9TOTnyPL03AfNO1M4YW3W4BxJeULeYfNI+zH2Z2b3 KKYK7unkZcQo8xQ42hkfcI9WG67QRngzUdg9FtBZjn27AcefJBSoTMC6Gnj2Jq09gGRR CRTQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646305; x=1752251105; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=/2btOuqcn6Xe57qmXPDc5kx7Q5nom+ioP+Bpq02iGrQ=; b=ZZQAoZUBzp6eEgsLD1VEuq7p4WS1+cqg3fGE0m3N7P7qljUaKx8DH6j/0oJ4Ac7Ges 5kgkv0dkke7qx/IYQODB+PTu7ntXSLCyDHq8R/08A46GuYRHzWD3qExkFJe2MfNa+cCA K8rw4ouLvPQAtdcumLd8nxQLaK2UP3NUONloPPQ/w4wetVhhyrRJ0/mQEjVTmUvXS9r5 FwJPEk11Swsw2L9Qe89hrQbAtj9Z87DtxhhSld3vxlgeTDRFgwNH5ahqnwM5ObmZylU9 GYPCUhHeFRpZUxRgMvAcGVaiG0Tsm24BOCrHwm/7q8iyh/fpGNotXOUKNNj8686XH/O0 acfg== X-Gm-Message-State: AOJu0YzCCYleNsOcjOnHCvVJNKBCXKDgpcOQNQXRh0THdC1dGIC6cg5Y B/4T7jnso/aq7jhyj+c+cQjTAfdeGrxAibVi9c0rf6vlDSix2y02kP4X+Y8HRdXSfxkkuFnfsvY k1xx+ X-Gm-Gg: ASbGnctjZaH2Om5/ciRF/4qBjBnHtrEGVlBYxIVZrYWP7ga22iI0s2553YixfmkzsZN wsvGtlk7u+uEnfM/3bVb9R329nFehUPgL0qbOPdkG7RcB45V6xM64THkhnO185MswoyoyCrhsVo Pooe4bK3C62E0RGQBYkmt/GtbiCUmCNn3v2zQ6G4p9GSXVustHuxHPmyLINMGfjgWg/l5fL0uQL 3Ti/yzDS4q6F7RH08PYthJk/yt80tGRabukQUXBfM2+unAbFjSbtSmKLkue1dWLFkcynpRXy7iV LoVhAL3OnSUpcMhaU3PnBvXbe32LcUrDgCMRwNDVa7yPSG91XnzCb8b2hrUtzoU66P+r X-Google-Smtp-Source: AGHT+IFAIq254uDjtYhKdAJwPXJZF29XCpMFCPqByjsJDWuZVaQlXWL+Piy1MExqph81cwrU1B/FQA== X-Received: by 2002:a5d:64cd:0:b0:3a5:39bb:3d61 with SMTP id ffacd0b85a97d-3b4964f1dfcmr2811134f8f.27.1751646305277; Fri, 04 Jul 2025 09:25:05 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 002/119] target/arm: Bring VLSTM/VLLDM helper store/load closer to the ARM pseudocode Date: Fri, 4 Jul 2025 17:23:02 +0100 Message-ID: <20250704162501.249138-3-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::429; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x429.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751646907081116600 Content-Type: text/plain; charset="utf-8" From: William Kosasih This patch brings the VLSTM and VLLDM helper functions closer to the ARM pseudocode by adding MO_ALIGN to the MemOpIdx of the associated store (`cpu_stl_mmu`) operations and load (`cpu_ldl_mmu`) operations. Note that this is not a bug fix: an 8-byte alignment check already exists and remains in place, enforcing stricter alignment than the 4 bytes requirement in the individual loads and stores. This change merely makes the helper implementations closer to the ARM pseudocode. That said, as a side effect, the MMU index is now resolved once instead of on every `cpu_*_data_ra` call, reducing redundant lookups Signed-off-by: William Kosasih Reviewed-by: Richard Henderson Message-id: 20250703085604.154449-2-kosasihwilliam4@gmail.com Signed-off-by: Peter Maydell --- target/arm/tcg/m_helper.c | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/target/arm/tcg/m_helper.c b/target/arm/tcg/m_helper.c index 6614719832e..251e12edf9c 100644 --- a/target/arm/tcg/m_helper.c +++ b/target/arm/tcg/m_helper.c @@ -1048,6 +1048,9 @@ void HELPER(v7m_vlstm)(CPUARMState *env, uint32_t fpt= r) bool s =3D env->v7m.fpccr[M_REG_S] & R_V7M_FPCCR_S_MASK; bool lspact =3D env->v7m.fpccr[s] & R_V7M_FPCCR_LSPACT_MASK; uintptr_t ra =3D GETPC(); + ARMMMUIdx mmu_idx =3D arm_mmu_idx(env); + MemOpIdx oi =3D make_memop_idx(MO_TEUL | MO_ALIGN, + arm_to_core_mmu_idx(mmu_idx)); =20 assert(env->v7m.secure); =20 @@ -1073,7 +1076,7 @@ void HELPER(v7m_vlstm)(CPUARMState *env, uint32_t fpt= r) * Note that we do not use v7m_stack_write() here, because the * accesses should not set the FSR bits for stacking errors if they * fail. (In pseudocode terms, they are AccType_NORMAL, not AccType_ST= ACK - * or AccType_LAZYFP). Faults in cpu_stl_data_ra() will throw exceptio= ns + * or AccType_LAZYFP). Faults in cpu_stl_mmu() will throw exceptions * and longjmp out. */ if (!(env->v7m.fpccr[M_REG_S] & R_V7M_FPCCR_LSPEN_MASK)) { @@ -1089,12 +1092,12 @@ void HELPER(v7m_vlstm)(CPUARMState *env, uint32_t f= ptr) if (i >=3D 16) { faddr +=3D 8; /* skip the slot for the FPSCR */ } - cpu_stl_data_ra(env, faddr, slo, ra); - cpu_stl_data_ra(env, faddr + 4, shi, ra); + cpu_stl_mmu(env, faddr, slo, oi, ra); + cpu_stl_mmu(env, faddr + 4, shi, oi, ra); } - cpu_stl_data_ra(env, fptr + 0x40, vfp_get_fpscr(env), ra); + cpu_stl_mmu(env, fptr + 0x40, vfp_get_fpscr(env), oi, ra); if (cpu_isar_feature(aa32_mve, cpu)) { - cpu_stl_data_ra(env, fptr + 0x44, env->v7m.vpr, ra); + cpu_stl_mmu(env, fptr + 0x44, env->v7m.vpr, oi, ra); } =20 /* @@ -1121,6 +1124,9 @@ void HELPER(v7m_vlldm)(CPUARMState *env, uint32_t fpt= r) { ARMCPU *cpu =3D env_archcpu(env); uintptr_t ra =3D GETPC(); + ARMMMUIdx mmu_idx =3D arm_mmu_idx(env); + MemOpIdx oi =3D make_memop_idx(MO_TEUL | MO_ALIGN, + arm_to_core_mmu_idx(mmu_idx)); =20 /* fptr is the value of Rn, the frame pointer we load the FP regs from= */ assert(env->v7m.secure); @@ -1155,16 +1161,16 @@ void HELPER(v7m_vlldm)(CPUARMState *env, uint32_t f= ptr) faddr +=3D 8; /* skip the slot for the FPSCR and VPR */ } =20 - slo =3D cpu_ldl_data_ra(env, faddr, ra); - shi =3D cpu_ldl_data_ra(env, faddr + 4, ra); + slo =3D cpu_ldl_mmu(env, faddr, oi, ra); + shi =3D cpu_ldl_mmu(env, faddr + 4, oi, ra); =20 dn =3D (uint64_t) shi << 32 | slo; *aa32_vfp_dreg(env, i / 2) =3D dn; } - fpscr =3D cpu_ldl_data_ra(env, fptr + 0x40, ra); + fpscr =3D cpu_ldl_mmu(env, fptr + 0x40, oi, ra); vfp_set_fpscr(env, fpscr); if (cpu_isar_feature(aa32_mve, cpu)) { - env->v7m.vpr =3D cpu_ldl_data_ra(env, fptr + 0x44, ra); + env->v7m.vpr =3D cpu_ldl_mmu(env, fptr + 0x44, oi, ra); } } =20 --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646337; cv=none; d=zohomail.com; s=zohoarc; b=ZrwmIddeqemQzCfuvMAASzJsWRVp+1p0V7tKKJJs4tpZYQWT8lOy3pw9uRsNm5KUeGgmtn9RV+SpF161k7Es4cF6tMl1LWTuniRJgLGUofnbO6PfRG5AcWTINVFqpyXAcWTVKgaeZeQIN5TX1d8jOoUPUdgp3m0Mc8P/IZ14yHI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646337; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=McuRTgqg5skS78YfFhw3GYQuhK9WPEG6vpPWpuJBgv4=; b=nb6Rbz69dpDpN81VmduHVo4g1dyOf2rFTG6KXYBu1ygIX229UQeDTZw83DVSg678OnKLY83sE3u5DvAwJlhywrSGMo94VGSu1gidNx17+jzRqTBLQhkjjSjFGEnYZr9BTCdhEF7pNCmfs2lxjM1uhiKnmc5NIpAtygguMIsB398= 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 1751646337951898.8164894393984; Fri, 4 Jul 2025 09:25:37 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjDw-0008Cz-2O; Fri, 04 Jul 2025 12:25:16 -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 1uXjDu-00089k-6I for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:14 -0400 Received: from mail-wm1-x32b.google.com ([2a00:1450:4864:20::32b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjDo-0005s1-3m for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:13 -0400 Received: by mail-wm1-x32b.google.com with SMTP id 5b1f17b1804b1-453643020bdso8239985e9.1 for ; Fri, 04 Jul 2025 09:25:07 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.05 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646306; x=1752251106; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=McuRTgqg5skS78YfFhw3GYQuhK9WPEG6vpPWpuJBgv4=; b=Y/5EN2WRFNpCEHd6DAKnAt2JD6vSpUDY3y8lbiOJ/Ox7ukqWn7Jz1yy0sYubgwgtct i8Jk+OUvdjgxme/mN1/iNmqqIpWIxmLIMMIc9iO/XO8v09icU9//4DM88ijDuwzsRQSk QlXeCHAqPgaeJLJ6IaKA5ZFbiZV4uKLX08za3Wo2Fhl3tZclMgODs3zp535WRbHg4P6L V5ctHoefLF4QljlGzcb47479Ncx+zuR4rVt0q6WXag46EPudedbWnSIuLlhKqkILWKVB zsAQcdYtcag/pWJZNIJePXupiy0kvACXNu51a+S8FMZk6xGe13AmMOorKLkff6Hsjy7Q 6eKQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646306; x=1752251106; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=McuRTgqg5skS78YfFhw3GYQuhK9WPEG6vpPWpuJBgv4=; b=f5rD8HgUu6Ae856S/cc4Ln/Md552A0X2fmOTDdO5eqgO3C0aj/ChsAY/SGsf5SYxqI pXmj/nGYfKJpXr7F/nFH+dLIsKx8IdLiFeMk3MRkvh9nh5p/paPoFBoo+jWNORMnrlte DF0mpy80f6BQHGclahleAWYtF0KENoG5+3vU4HipTwyx+qyQ7dbA/F61ygD4olcTo+db P3FoeksFGtNabwMAvUD62r8COB4pUbiKZ2pgODOC+VQ6zFvZY63WF30x1qXkosWWGThh PhyMhj5UQWw7wUMAjfFPXcs4ZPL7dRvVNaFwAMJNYnPHGAk0q+UKCmfpOJBQolgh9SwE rWvg== X-Gm-Message-State: AOJu0YzYjuup+cRUfDXwdsOj7NIpiR192lM+D0ey2Y5i8j63Mniiz9ph lnRjvm/rZ4n88OqOnp4aqaHcSzlVRwmM4Drt8bwkB9OYs5mB1g8ugwn5M0SQP/0E81E37D/byg3 JeTQa X-Gm-Gg: ASbGnctgFky+Xs9DV6IjWiV35L1F5Sa9Zy6KJnCVieahHYXzDFgcI8K90T/lu5MwCLF ty1TdNRGAuGIc1Ixa4ATtR1CZjDfpyJI6BX8YN8VhioL9en2Al+mOa9caQtpKKL7VAVhaUxUp+Q HOIUUjAhnUfieroA6wPBw4U7FGaShibvUKEq758FKonssMC3iChiS1IJwmMpkJWwRZ6sTuMRoDP ISn1X1l3hcwyLnBACw4QKjXuDNFYj0Blf5a+c/B4TupUYlUNERXObsimMb2hz173fpaK6zRSavo vMeaAZFkfI1bJOosOAwPbSzZXrlyYA5pac+epDMeRkkGHR2UD0chIP96eR18yMfnwH2L X-Google-Smtp-Source: AGHT+IGS+Q159v9BHrddpqEbHczGaL/CU7cydj47YeKw1tmqWr5TRCeLtjccIbNimgYWy2Y1O/r2qw== X-Received: by 2002:a05:600c:3151:b0:450:c210:a01b with SMTP id 5b1f17b1804b1-454b3161c16mr39633685e9.17.1751646306290; Fri, 04 Jul 2025 09:25:06 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 003/119] target/arm: Fix BLXNS helper store alignment checks Date: Fri, 4 Jul 2025 17:23:03 +0100 Message-ID: <20250704162501.249138-4-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::32b; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x32b.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751646340169116600 Content-Type: text/plain; charset="utf-8" From: William Kosasih This patch adds alignment checks in the store operations (when stacking the return pc and psr) in the BLXNS instruction. Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1154 Signed-off-by: William Kosasih Reviewed-by: Richard Henderson Message-id: 20250703085604.154449-3-kosasihwilliam4@gmail.com Signed-off-by: Peter Maydell --- target/arm/tcg/m_helper.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/target/arm/tcg/m_helper.c b/target/arm/tcg/m_helper.c index 251e12edf9c..f342d934896 100644 --- a/target/arm/tcg/m_helper.c +++ b/target/arm/tcg/m_helper.c @@ -632,8 +632,11 @@ void HELPER(v7m_blxns)(CPUARMState *env, uint32_t dest) } =20 /* Note that these stores can throw exceptions on MPU faults */ - cpu_stl_data_ra(env, sp, nextinst, GETPC()); - cpu_stl_data_ra(env, sp + 4, saved_psr, GETPC()); + ARMMMUIdx mmu_idx =3D arm_mmu_idx(env); + MemOpIdx oi =3D make_memop_idx(MO_TEUL | MO_ALIGN, + arm_to_core_mmu_idx(mmu_idx)); + cpu_stl_mmu(env, sp, nextinst, oi, GETPC()); + cpu_stl_mmu(env, sp + 4, saved_psr, oi, GETPC()); =20 env->regs[13] =3D sp; env->regs[14] =3D 0xfeffffff; --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646550; cv=none; d=zohomail.com; s=zohoarc; b=XME1oDW0h2hSBacsCLq67AALhjqTEtJFIsn6FPRJBD+HUERFgrLtIYLsTPcknOULwdwXh5CbpVlHdN5xZH4QoW0OykGmAWgIThN3ob16M6MaYWRx0iJ7y72yhzi3PQpu+VtyysBviVwa7Mp40sQn9gDHbgXcbsvVOxYPTqoXzMs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646550; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=IJZT982rv2FiWLlGvuubYPPwI8y9TaD7lxYnflFDfTs=; b=hsn1PVxBKb6XEYKNSn8xzbOA6d8XOrKVWMDoZJKTvxgmXVZjUU1WT8AFOqLomrfB+Bv2IWahD4DPkb//qdY+NPKovYvC0XDkklOHe4h8tMhbFGuoMjFRqNPgjtR2ErFW54Spmb4g8++tiBTpk01jBLiOneypY/596PBg7CQywxs= 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 1751646550503482.90916572897515; Fri, 4 Jul 2025 09:29:10 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjDu-00088R-8F; Fri, 04 Jul 2025 12:25:14 -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 1uXjDq-00086d-Nr for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:10 -0400 Received: from mail-wm1-x32e.google.com ([2a00:1450:4864:20::32e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjDp-0005sT-18 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:10 -0400 Received: by mail-wm1-x32e.google.com with SMTP id 5b1f17b1804b1-451e2f0d9c2so7682085e9.1 for ; Fri, 04 Jul 2025 09:25:08 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.06 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646307; x=1752251107; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=IJZT982rv2FiWLlGvuubYPPwI8y9TaD7lxYnflFDfTs=; b=kw4vZ3nq7i7REMV+Nahhh92hikKHnQG5PQ2cMir+JE206I012dck0Dl2y5hHxSo1Ou ff4EDceINowmy5kZCMIF7wPSV1a/4zmsSCQDTSCsaXh7ia5US6W3on5Fl8WnNapOYrFE ty9OMeJjTDZcwtKGLz4eTPUREdt9hLjWcgpWyD4GhHmcSMXXazVQfKzgnA/vBHBg8T+6 5UwJrQYv3Ho9VqhTnXkN21dhVzB4tX+jiz1qPt/2UyHeM7lsOafrWovZOKKac1fu4pLS qzcp+nFDnApeBnZ9+KyIGuSORGoBLmFCcX5QgOuFXCQG9rizzPsEZRca+oTZXozPvt77 OR+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646307; x=1752251107; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=IJZT982rv2FiWLlGvuubYPPwI8y9TaD7lxYnflFDfTs=; b=Ca+sufr3EBpy5ZuzjGcmJof2T3sEvrQRdfDSc0JEETPMBCzEAPEibFPhmFZ5Y3ajpF ZmNrwH6k/xggnjtqArNZ8ghjBlgPgYVICdvaBEJz2Wm5ko7WitJZ9aIp0/OGUkHLe4Xf xFakFWWLAbXs+kwcUJ8dxdJ1MOogCFEyg2Mo2YpCOWA0PC9KV4lehq9Cf8dr7iv3aAzu tqNWh790pZS5/3caMgrQC0P6+QAR2y6klSHUA0BPKSf3Mx9Q9G8Y5XMzdERvpgbdCLCU OTqEL+69tgAomKSSx13BV/b/yXZZPD09vOGDXO8JpL3G3sPdw5PsOIk78Uw3k7fYLqSH NdNQ== X-Gm-Message-State: AOJu0Yy5xU+8DXt1GVWKYQ9cUxfDUVOp8KIgsaFZQ8PLCe0Z7e9yTDes kcNcxv/pwYEtK4F3npBvqroySp00FeZY4MfoGJdDjNyF3lHkc2LRpvlMNvgA97NPf8KbxgFVgFx qnxXu X-Gm-Gg: ASbGncsAR85ys459lMTHLK49qdyMzQBQ4DmfqnacN/dJMLn1IOPg4aNDgkasPX5Pt+p 5R7nS+Ei62t83ceccKmI9Gp8HwxRfeyoLn6Yi6d/LO3nXu/vSzh+o/GMEv0OO3EjfW7uTc7JjwB vT3r2/QUZg8rVK6K2zCE1YdGqBjSZLGSYjvXyYt2DzNcwbAwLHtwQm+gO4kBiyyV2c1lCoaDTeO xMO/aAe1nnV2pKyYf6dF7PlFJyyGgAPclyWhwsma9JoIx2xCtdY/c5V6CGXzliP7FGK/3AZEPF+ LWE2NC5kbkJeG/iJvrXdmdNMY21CCcVOTnTPYy76HxK81LPDz2O3wFkoN6aLVdytWW1+aibmlyZ P0zo= X-Google-Smtp-Source: AGHT+IEkd3lgkCato2O43K96ck/dFsBWMSzKV/LkfESqbwoIZo333m/0TDGYARTgyitAPTvQoBE9Lg== X-Received: by 2002:a05:600c:1f82:b0:453:ec2:c7b2 with SMTP id 5b1f17b1804b1-454b26b2c22mr36722285e9.7.1751646307367; Fri, 04 Jul 2025 09:25:07 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 004/119] target/arm: Fix function_return helper load alignment checks Date: Fri, 4 Jul 2025 17:23:04 +0100 Message-ID: <20250704162501.249138-5-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::32e; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x32e.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751646552671116600 Content-Type: text/plain; charset="utf-8" From: William Kosasih This patch adds alignment checks in the load operations (when unstacking the return pc and psr) in the FunctionReturn pseudocode. Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1154 Signed-off-by: William Kosasih Reviewed-by: Richard Henderson Message-id: 20250703085604.154449-4-kosasihwilliam4@gmail.com Signed-off-by: Peter Maydell --- target/arm/tcg/m_helper.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/target/arm/tcg/m_helper.c b/target/arm/tcg/m_helper.c index f342d934896..28307b56151 100644 --- a/target/arm/tcg/m_helper.c +++ b/target/arm/tcg/m_helper.c @@ -1946,7 +1946,7 @@ static bool do_v7m_function_return(ARMCPU *cpu) * do them as secure, so work out what MMU index that is. */ mmu_idx =3D arm_v7m_mmu_idx_for_secstate(env, true); - oi =3D make_memop_idx(MO_LEUL, arm_to_core_mmu_idx(mmu_idx)); + oi =3D make_memop_idx(MO_LEUL | MO_ALIGN, arm_to_core_mmu_idx(mmu_= idx)); newpc =3D cpu_ldl_mmu(env, frameptr, oi, 0); newpsr =3D cpu_ldl_mmu(env, frameptr + 4, oi, 0); =20 --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647255; cv=none; d=zohomail.com; s=zohoarc; b=cuYbhlDbmZSBJqqm81J5HoyPFbSlb1flu09u9urKl4JDa/tbqHA6JZvk5JHmi9v500y/nQ/6h1Jpjc7U+VH+vrAVx8Y4VJ/rEM7MgYNbMNkTux6yOsQY1Rzf9Wl2q90pWnzKqNGlT/hTpD+aNye60fTmkapsb6plGdPr3Ebt/mo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647255; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=d/LfvC3NRJWTIueu6Kv0svLLOIPKIUa3RlTtXD3PzRg=; b=HVUzb9jm6sdRqnmtK9i1+R2aLKb12CtznHI4VM9VR+slyEq3xUkErFSX5w7TD8atz0VC3Mwbaxk360mgEE9rqz3TP9mvKf10yum0Cyd1TR0m8gQMXQGsfst+pEA42xpbTikAOO2iOyFdlKyeM/vPE5mER9Oa5qI+ZzmjV98Tpi4= 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 1751647255696332.5756636875109; Fri, 4 Jul 2025 09:40:55 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjDt-00088d-Er; Fri, 04 Jul 2025 12:25:13 -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 1uXjDr-00086w-SS for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:12 -0400 Received: from mail-wm1-x32a.google.com ([2a00:1450:4864:20::32a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjDp-0005yH-Rc for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:11 -0400 Received: by mail-wm1-x32a.google.com with SMTP id 5b1f17b1804b1-4537edf2c3cso11807095e9.3 for ; Fri, 04 Jul 2025 09:25:09 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.07 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646308; x=1752251108; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=d/LfvC3NRJWTIueu6Kv0svLLOIPKIUa3RlTtXD3PzRg=; b=u5ZVDZln6xgbwH8knvLNpQ8f5v8HPxw1WO1SujB4fjplKSZ9MEck5xSoJZbREvLziD gwqS9MRrI98/ZmSBopxxwKf/ATspQNRm6+uHwPdQuIcdIr7/fGKawsIBoFzTTreXA1Jg EQduhjWWpNUKNzN6igFR9PvXNRkHsWl3WG4/ewUY70aR0NwhO5fQN7P/CXkXeV1OxP24 gI5WLvavN6Q6qpCghNcoowcFPwI+LmgXY+DBfI26CC8cVjl5MFguysWWS997KfPyTzv8 Urpzz4mrjp0sMRXXBrAUcYiS1jTQmesB+2h8sMFYYveHR4ea3LQxLbQ4Gv1zq2qY7Spy OwTw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646308; x=1752251108; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=d/LfvC3NRJWTIueu6Kv0svLLOIPKIUa3RlTtXD3PzRg=; b=Xr/JuQTj2RwOtOR8v+wlusNxf43mtwHnKEzcwnWxrUA8iJULW6WQak1miJa1TXqX1V O+174Fm6R4G83yavPBTRXJCuE/rXwLB+Y6rKtx1lUPs6UwTQ+4NgFnB1KmqikElOA7Kk x4wzlnWE4Ee4boKRdLe9H10g0WTZEt1U1OvPPE92g4BDLloIiZONffMxS62/NiFP0yNk fFSFbDpQKDL9ZgQ8HKSpEQnxthQnGq6InH2ruspMYMZMxQHAgxxon/vXiaC24JO1r0yT RyV6+R0plObAvnAcsD84e6gbWKQ3qQoWsNUzSxi2Dq3Ez2uFYWK2942/MG208Dqtj+89 R3/g== X-Gm-Message-State: AOJu0Ywx/CNT+VlFG+8XndMPWj3WOZ/NWDsk71hTPLK2D/uYfnhlUNLi apr+r6kaHdFgTWVaNF7aonH0qIdVUEFQ7ruqDFwNAX7nfIGJ9cq2befRsxzN4ADNUVWdkF63TAX mUnoV X-Gm-Gg: ASbGnctTByiY14Ydx1LP4b2XlJ8/g1t0nt3lVjiWNTfuKJH6Qbdfb/85FAR1UZj8gxw /F1dULGcxv89pKvyKmcxdOVQCwrqxSxi44X5ixmwKO9Gsvb6wW2WYxSqOYWfoMohGDSNowarx2d z/bTIKjDPDWHu520shZuUiNF//MSzDtUcbGILdeVVnV+jgbGORUudelvCHkckivEJ1lNlrtW+Gr xpVMClszY7DpnQfSrm9QYkQ8mz+dakqzvA/29fTfyy/yBoTHhcBFESjEOWay0wJWcmyg2kKb1LG CrFGO6BcDPNXNZy2TEKIK1MLhlZVp+43EFlotUDBpC/+4iUt0UjQAlFZ787kCFupfsUr X-Google-Smtp-Source: AGHT+IHOjKAvkLt/51nVnbJGX61nFsWcEcXrag0hCWPzrdYmw9+SKiH9Kich9iGJajSw8nFpy4+sBg== X-Received: by 2002:a05:600c:8b52:b0:442:f98e:f37 with SMTP id 5b1f17b1804b1-454b30df071mr30296615e9.21.1751646308227; Fri, 04 Jul 2025 09:25:08 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 005/119] target/arm: Fix VLDR helper load alignment checks Date: Fri, 4 Jul 2025 17:23:05 +0100 Message-ID: <20250704162501.249138-6-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::32a; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x32a.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751647256947116600 Content-Type: text/plain; charset="utf-8" From: William Kosasih This patch adds alignment checks in the load operations in the VLDR instruction. Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1154 Signed-off-by: William Kosasih Reviewed-by: Richard Henderson Message-id: 20250703085604.154449-5-kosasihwilliam4@gmail.com Signed-off-by: Peter Maydell --- target/arm/tcg/mve_helper.c | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/target/arm/tcg/mve_helper.c b/target/arm/tcg/mve_helper.c index 506d1c34757..8834523c23f 100644 --- a/target/arm/tcg/mve_helper.c +++ b/target/arm/tcg/mve_helper.c @@ -148,13 +148,15 @@ static void mve_advance_vpt(CPUARMState *env) } =20 /* For loads, predicated lanes are zeroed instead of keeping their old val= ues */ -#define DO_VLDR(OP, MSIZE, LDTYPE, ESIZE, TYPE) \ +#define DO_VLDR(OP, MFLAG, MSIZE, MTYPE, LDTYPE, ESIZE, TYPE) \ void HELPER(mve_##OP)(CPUARMState *env, void *vd, uint32_t addr) \ { \ TYPE *d =3D vd; \ uint16_t mask =3D mve_element_mask(env); \ uint16_t eci_mask =3D mve_eci_mask(env); \ unsigned b, e; \ + int mmu_idx =3D arm_to_core_mmu_idx(arm_mmu_idx(env)); \ + MemOpIdx oi =3D make_memop_idx(MFLAG | MO_ALIGN, mmu_idx); \ /* \ * R_SXTM allows the dest reg to become UNKNOWN for abandoned \ * beats so we don't care if we update part of the dest and \ @@ -163,7 +165,7 @@ static void mve_advance_vpt(CPUARMState *env) for (b =3D 0, e =3D 0; b < 16; b +=3D ESIZE, e++) { = \ if (eci_mask & (1 << b)) { \ d[H##ESIZE(e)] =3D (mask & (1 << b)) ? \ - cpu_##LDTYPE##_data_ra(env, addr, GETPC()) : 0; \ + (MTYPE)cpu_##LDTYPE##_mmu(env, addr, oi, GETPC()) : 0;\ } \ addr +=3D MSIZE; \ } \ @@ -185,20 +187,20 @@ static void mve_advance_vpt(CPUARMState *env) mve_advance_vpt(env); \ } =20 -DO_VLDR(vldrb, 1, ldub, 1, uint8_t) -DO_VLDR(vldrh, 2, lduw, 2, uint16_t) -DO_VLDR(vldrw, 4, ldl, 4, uint32_t) +DO_VLDR(vldrb, MO_UB, 1, uint8_t, ldb, 1, uint8_t) +DO_VLDR(vldrh, MO_TEUW, 2, uint16_t, ldw, 2, uint16_t) +DO_VLDR(vldrw, MO_TEUL, 4, uint32_t, ldl, 4, uint32_t) =20 DO_VSTR(vstrb, 1, stb, 1, uint8_t) DO_VSTR(vstrh, 2, stw, 2, uint16_t) DO_VSTR(vstrw, 4, stl, 4, uint32_t) =20 -DO_VLDR(vldrb_sh, 1, ldsb, 2, int16_t) -DO_VLDR(vldrb_sw, 1, ldsb, 4, int32_t) -DO_VLDR(vldrb_uh, 1, ldub, 2, uint16_t) -DO_VLDR(vldrb_uw, 1, ldub, 4, uint32_t) -DO_VLDR(vldrh_sw, 2, ldsw, 4, int32_t) -DO_VLDR(vldrh_uw, 2, lduw, 4, uint32_t) +DO_VLDR(vldrb_sh, MO_SB, 1, int8_t, ldb, 2, int16_t) +DO_VLDR(vldrb_sw, MO_SB, 1, int8_t, ldb, 4, int32_t) +DO_VLDR(vldrb_uh, MO_UB, 1, uint8_t, ldb, 2, uint16_t) +DO_VLDR(vldrb_uw, MO_UB, 1, uint8_t, ldb, 4, uint32_t) +DO_VLDR(vldrh_sw, MO_TESW, 2, int16_t, ldw, 4, int32_t) +DO_VLDR(vldrh_uw, MO_TEUW, 2, uint16_t, ldw, 4, uint32_t) =20 DO_VSTR(vstrb_h, 1, stb, 2, int16_t) DO_VSTR(vstrb_w, 1, stb, 4, int32_t) --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646537; cv=none; d=zohomail.com; s=zohoarc; b=ZisMfyNZF2XX8vg5SReq5vq+cVVg0KVIVoIDl+uFSTZm/f4FTdjNjfLsrGCJJ+dxhybeMMljjBrtR8Smf6k+4l6rrLecvdb24NfXupr5nfOvnAokhZmFLREIgskcv6YA1llSRsNHAeqjl3xUQtgHxYffuuA09uy1WwqM/ufhNhk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646537; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=KOCKZ7GQe2vYAQmySn/4L9JFTEe27uBhSfrOZQSpCoo=; b=Q4M9NEW6AZo9leS8izNGp2M7pblTKQTigrH75iNGVOIGRWBhxIa9z4NKbxCpemBuZIWxXTKFUi6Kqf51SzUyxIxakG7/oAkU0cwOjRdeH+51ZgKaSNNQa6ep8fm7hKWN6yIF+ZZX0Sex2iZc1Ahya7tVivV8BbcyPc/Su8tm9Ds= 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 17516465375541005.811606414222; Fri, 4 Jul 2025 09:28:57 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjDu-00089w-HV; Fri, 04 Jul 2025 12:25:14 -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 1uXjDs-00087V-L9 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:12 -0400 Received: from mail-wm1-x329.google.com ([2a00:1450:4864:20::329]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjDq-000640-P4 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:12 -0400 Received: by mail-wm1-x329.google.com with SMTP id 5b1f17b1804b1-4537deebb01so6524235e9.0 for ; Fri, 04 Jul 2025 09:25:10 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.08 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646309; x=1752251109; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=KOCKZ7GQe2vYAQmySn/4L9JFTEe27uBhSfrOZQSpCoo=; b=M6BTLoYsO+BB7+8HjAzWl8po3IK0hHTdlsjwnCG8GtL4vyxlroxINyQgBG5LXtC3eW f5RtJ+rjccK7zsPbMkEnnTBEgUcjNq9a5WI29rXMXZXX9m2oV8/WLspFTlmNXh2BP+Rf NsZA7IAi4QLhIYOv/Gy2GeuH4wS75i2y/VyGzAf/vWrJFCPdcA4bVWeNqngKZb0JHKWg Bz+ijKjKoqv6PgKSRVMmdsYEF22FMPpo5Q7JqB4znr/D14wBy4OVCVdBlC9c8ogfsL1l Rsn5NSY7q0EAeZD7oDZAswGCIhkbSK4NTUSXU6sJ/y+UB3u0Cs2ysSzx3OqtOacU0CDg HSDQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646309; x=1752251109; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=KOCKZ7GQe2vYAQmySn/4L9JFTEe27uBhSfrOZQSpCoo=; b=CTtqFza6OFewZdG+24Vwfhmb7H18QHfjn4ZnlPYYusBygMDG4MBSnuorg1Th7ZjJMX lex1do6loPxtCxVOWvqRVi6rIBFqO19L36jRtvN62TBy9rJc3KZfmdjZTxT82lS9VZhB VDB+eNRym/80yjXnGhMBP/v4Ocbgg+chM0GYMe6r5LKz/eWXXUH2Xqo9tNf+iDICz0f3 wYMc4VNIokIT7jaxqbOpjDojvmlakR1yXMYBWRt2ioNpy/sb+N/8LBXWE91bpyBi6QEZ 1G1+wRO3TRfYkgc7KgP9QV0ZabVXBts0woUkS2Dav+RyndyfQ9inta08A0VqFg1+GvH0 WoFw== X-Gm-Message-State: AOJu0YxoCpLd39uFsfWWnQd4v349zSRZmKJi7Ptu91jfVQNXd5DXAQQv SGVnMh7toWP8b9OQLgZ/WAhqZY0/S8C4KobFM1f1ac6DhyvxZjAL6LEiqCSVFjQPpGcveOQv4bj LICFp X-Gm-Gg: ASbGncv807kb2ECH8wBtxQ1HwfsdnzHK1eUeHRjn6cRVSZetqmD0J5iFrEdbXmxximL MCAR8Lf1F42DvrlkHEx4mLrJLC2c2j7I6SNbLX6VqW6VM7xR70HrgbQ+rUnqkC8RKovw8YCmTNZ OptabS35dWTZg/5D7/o/6Amc94JE8tUFvZdpp7S7Ap9Yvi5I/bNS3pNATooim4qyO5zqFulH1kN DzyYnWr9D0pbkGLhO4pjz7jmSw+DWSYe+0jQtomKyiNQQdfJcuc2l9DytqEeHX+JaU7WDBTWvDp VGIGad1VflF7dvUAT7or5yE2v6rgSAa7Lo2T1aP+nzDXDynAB4X847b5U2RsSCvi4kWYSxxt5VW Z56s= X-Google-Smtp-Source: AGHT+IFBR+47XjhjHSRVMIfAfaTDEKhfs2iAgegyY0KWMSk7thG8865ZtS4ggZ0QB2sARzWuEjhjNw== X-Received: by 2002:a05:600c:4f49:b0:450:d30e:ff96 with SMTP id 5b1f17b1804b1-454b8b37c22mr12934755e9.0.1751646309158; Fri, 04 Jul 2025 09:25:09 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 006/119] target/arm: Fix VSTR helper store alignment checks Date: Fri, 4 Jul 2025 17:23:06 +0100 Message-ID: <20250704162501.249138-7-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::329; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x329.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751646538642116600 Content-Type: text/plain; charset="utf-8" From: William Kosasih This patch adds alignment checks in the store operations in the VSTR instruction. Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1154 Signed-off-by: William Kosasih Reviewed-by: Richard Henderson Message-id: 20250703085604.154449-6-kosasihwilliam4@gmail.com Signed-off-by: Peter Maydell --- target/arm/tcg/mve_helper.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/target/arm/tcg/mve_helper.c b/target/arm/tcg/mve_helper.c index 8834523c23f..9587f2da7da 100644 --- a/target/arm/tcg/mve_helper.c +++ b/target/arm/tcg/mve_helper.c @@ -172,15 +172,17 @@ static void mve_advance_vpt(CPUARMState *env) mve_advance_vpt(env); \ } =20 -#define DO_VSTR(OP, MSIZE, STTYPE, ESIZE, TYPE) \ +#define DO_VSTR(OP, MFLAG, MSIZE, STTYPE, ESIZE, TYPE) \ void HELPER(mve_##OP)(CPUARMState *env, void *vd, uint32_t addr) \ { \ TYPE *d =3D vd; \ uint16_t mask =3D mve_element_mask(env); \ unsigned b, e; \ + int mmu_idx =3D arm_to_core_mmu_idx(arm_mmu_idx(env)); \ + MemOpIdx oi =3D make_memop_idx(MFLAG | MO_ALIGN, mmu_idx); \ for (b =3D 0, e =3D 0; b < 16; b +=3D ESIZE, e++) { = \ if (mask & (1 << b)) { \ - cpu_##STTYPE##_data_ra(env, addr, d[H##ESIZE(e)], GETPC())= ; \ + cpu_##STTYPE##_mmu(env, addr, d[H##ESIZE(e)], oi, GETPC())= ; \ } \ addr +=3D MSIZE; \ } \ @@ -191,9 +193,9 @@ DO_VLDR(vldrb, MO_UB, 1, uint8_t, ldb, 1, uint8_t) DO_VLDR(vldrh, MO_TEUW, 2, uint16_t, ldw, 2, uint16_t) DO_VLDR(vldrw, MO_TEUL, 4, uint32_t, ldl, 4, uint32_t) =20 -DO_VSTR(vstrb, 1, stb, 1, uint8_t) -DO_VSTR(vstrh, 2, stw, 2, uint16_t) -DO_VSTR(vstrw, 4, stl, 4, uint32_t) +DO_VSTR(vstrb, MO_UB, 1, stb, 1, uint8_t) +DO_VSTR(vstrh, MO_TEUW, 2, stw, 2, uint16_t) +DO_VSTR(vstrw, MO_TEUL, 4, stl, 4, uint32_t) =20 DO_VLDR(vldrb_sh, MO_SB, 1, int8_t, ldb, 2, int16_t) DO_VLDR(vldrb_sw, MO_SB, 1, int8_t, ldb, 4, int32_t) @@ -202,9 +204,9 @@ DO_VLDR(vldrb_uw, MO_UB, 1, uint8_t, ldb, 4, uint32_t) DO_VLDR(vldrh_sw, MO_TESW, 2, int16_t, ldw, 4, int32_t) DO_VLDR(vldrh_uw, MO_TEUW, 2, uint16_t, ldw, 4, uint32_t) =20 -DO_VSTR(vstrb_h, 1, stb, 2, int16_t) -DO_VSTR(vstrb_w, 1, stb, 4, int32_t) -DO_VSTR(vstrh_w, 2, stw, 4, int32_t) +DO_VSTR(vstrb_h, MO_UB, 1, stb, 2, int16_t) +DO_VSTR(vstrb_w, MO_UB, 1, stb, 4, int32_t) +DO_VSTR(vstrh_w, MO_TEUW, 2, stw, 4, int32_t) =20 #undef DO_VLDR #undef DO_VSTR --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647441; cv=none; d=zohomail.com; s=zohoarc; b=Zn9I19aAg300FNUZXRy6ju8eNs4JYwlzda3LTDf/NEMvVaDubZ1xotOPcWbHkMh/5lCL9qpNOnyUuLw8G1Wm/dAjsWTw+qKiQFoJSDLznBVaNFs7qxfTYhlnVMGb8DqSpBB1JfHzVKYb9qmKQRB6gep+C8N8q961oJcy9809VhM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647441; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=505chJ/it5n+B86DZgwN9X8NZyo5CALyFKYv93L9Mxw=; b=fZAxvD8wW+Eqajx4YQ8Lj/cYvMHyD5HfjNaK5ZOsgrO59OyIx86dHslLPqKyA/wXAwV+ZtW7xQ4QIHUkLLm5RrQrbg7AUpmBMlsvez11+6NqXk3zVGWGRpIjYqvHHh+NwkuwU6gE1y3tioW8/Y/3VnhJPBPA03zX2su+5dlmvyM= 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 1751647441644614.2093087516342; Fri, 4 Jul 2025 09:44:01 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjDy-0008G7-8l; Fri, 04 Jul 2025 12:25:18 -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 1uXjDt-00088y-Nh for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:13 -0400 Received: from mail-wm1-x32b.google.com ([2a00:1450:4864:20::32b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjDr-00064K-Jv for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:13 -0400 Received: by mail-wm1-x32b.google.com with SMTP id 5b1f17b1804b1-45348bff79fso11613335e9.2 for ; Fri, 04 Jul 2025 09:25:11 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.09 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646310; x=1752251110; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=505chJ/it5n+B86DZgwN9X8NZyo5CALyFKYv93L9Mxw=; b=uhOGT5HvbdEQkptUa87XxvOOMaU56GLrzWZi8w43efc3v3aVCtBe1Q+Z06Qt5ram45 tXc74hRRkbHr+4Nk8o26adkN3+MfCm6NZaZ3I1Rff6/a1sMv/0AgR1Jc0LHV+dYEuOUK gRpcUzOEr4GSAaM2DLDEic5uqYiUY5QM2L4L40eSxPsHtOwd6IYYO2Z7B+lYO3Ld7o6b vQ2z2pc8WbjhEukKDrL90EB2IdKc/w/Og3I0W4uWZVXiqX+snBjFDCkgEfZK8kCRFWKa bHuXCf/w7HZSHuCTVtpjNOMmEvZuLbma0WPREGbv+Fb7TSDqCwYyScRfX2pdfNwCWfU0 Sc1Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646310; x=1752251110; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=505chJ/it5n+B86DZgwN9X8NZyo5CALyFKYv93L9Mxw=; b=cfpRPIyi4bs8zfBXnSuSDL7ut1XMdVWUgzdpI2vmogDT97xfT2WC/uj0SsNaZpL4HM fWh6nVWLE/sr3Zt7HVwzCa2b3R63QJ9I376Dm7/Q41TAfS8opGv7f3pFLXswAqdxo6zU u2s+HL4Z16ROpRT/XWg8yVGTw/Snz3K0QH5y9mi6eI6tMv8RjKw2reZTnlBA990YCIt2 5d4t2DM0gIt6NnngRyT8ZxIgChLRDl7sPDSNhAnaFVEMhOkqPGU9Jm+601a/2KzZZUQD LEEf+JiaozAsMIwSjdUmjfvlXmePkI3UVvQ2g8icuO0vJjw4DsUG0Cwwdypy21FXbROb NdNw== X-Gm-Message-State: AOJu0YwO5+SSeFCOxTqGEADaPywMBglCJD9NyFiPaqSX+ldL2RWR+kic 8eOP2eOwKMro2XoNljpBSOib6kyj/nAYbRD6qXoALls90RYySJT2u9kyiyu6zl9/ZKUDXNm5bB6 PHWKp X-Gm-Gg: ASbGncsn4nDwQkJaQ/S9q9z4c+RVKB+mQW7D+Grj6z52vyOUnxlmPhgbW3D8CermNsj Gb1GdDs83HWrqNKHFGLa2eB6Mi40VwA8E6wJijMHdN+lI2Qo7VN1u4xE5jjFhF5qcag9HGR8+H6 5/vPIo7IRihNIfn+m6AC501vQl4n5Ttbbh1DXblCvb3OCAZYXWumlCsNkafjus9dyQE0y6W5lEH afSYHwNqDR0k+74Ur9LKmZgUg4Pwb41mNvkzhnFzUmCGUMTURktUhKS9B2z9WIGCm1uQc6LXNFY ujT9w3PCc0M824myak/eIdmP9giW0dMp3tzL54oowVI/v5nOoovnru1Msj124TeRSa4Z X-Google-Smtp-Source: AGHT+IFq2VK3peUUWIkB4VW1xhGemh1PX96vjweQPlDVm+54lNXELCHEW1C/m9kmte7kbQhlsBLkBQ== X-Received: by 2002:a05:600c:83cc:b0:454:ab87:a0a0 with SMTP id 5b1f17b1804b1-454b4eadc2fmr32027825e9.17.1751646310151; Fri, 04 Jul 2025 09:25:10 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 007/119] target/arm: Fix VLDR_SG helper load alignment checks Date: Fri, 4 Jul 2025 17:23:07 +0100 Message-ID: <20250704162501.249138-8-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::32b; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x32b.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751647443214116600 Content-Type: text/plain; charset="utf-8" From: William Kosasih This patch adds alignment checks in the load operations in the VLDR_SG instructions. Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1154 Signed-off-by: William Kosasih Reviewed-by: Richard Henderson Message-id: 20250703085604.154449-7-kosasihwilliam4@gmail.com Signed-off-by: Peter Maydell --- target/arm/tcg/mve_helper.c | 42 ++++++++++++++++++++++--------------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/target/arm/tcg/mve_helper.c b/target/arm/tcg/mve_helper.c index 9587f2da7da..633f511a7e6 100644 --- a/target/arm/tcg/mve_helper.c +++ b/target/arm/tcg/mve_helper.c @@ -218,7 +218,7 @@ DO_VSTR(vstrh_w, MO_TEUW, 2, stw, 4, int32_t) * For loads, predicated lanes are zeroed instead of retaining * their previous values. */ -#define DO_VLDR_SG(OP, LDTYPE, ESIZE, TYPE, OFFTYPE, ADDRFN, WB) \ +#define DO_VLDR_SG(OP, MFLAG, MTYPE, LDTYPE, ESIZE, TYPE, OFFTYPE, ADDRFN,= WB)\ void HELPER(mve_##OP)(CPUARMState *env, void *vd, void *vm, \ uint32_t base) \ { \ @@ -228,13 +228,15 @@ DO_VSTR(vstrh_w, MO_TEUW, 2, stw, 4, int32_t) uint16_t eci_mask =3D mve_eci_mask(env); \ unsigned e; \ uint32_t addr; \ + int mmu_idx =3D arm_to_core_mmu_idx(arm_mmu_idx(env)); \ + MemOpIdx oi =3D make_memop_idx(MFLAG | MO_ALIGN, mmu_idx); \ for (e =3D 0; e < 16 / ESIZE; e++, mask >>=3D ESIZE, eci_mask >>= =3D ESIZE) { \ if (!(eci_mask & 1)) { \ continue; \ } \ addr =3D ADDRFN(base, m[H##ESIZE(e)]); \ d[H##ESIZE(e)] =3D (mask & 1) ? \ - cpu_##LDTYPE##_data_ra(env, addr, GETPC()) : 0; \ + (MTYPE)cpu_##LDTYPE##_mmu(env, addr, oi, GETPC()) : 0; \ if (WB) { \ m[H##ESIZE(e)] =3D addr; \ } \ @@ -286,13 +288,15 @@ DO_VSTR(vstrh_w, MO_TEUW, 2, stw, 4, int32_t) uint16_t eci_mask =3D mve_eci_mask(env); \ unsigned e; \ uint32_t addr; \ + int mmu_idx =3D arm_to_core_mmu_idx(arm_mmu_idx(env)); \ + MemOpIdx oi =3D make_memop_idx(MO_TEUL | MO_ALIGN, mmu_idx); \ for (e =3D 0; e < 16 / 4; e++, mask >>=3D 4, eci_mask >>=3D 4) { = \ if (!(eci_mask & 1)) { \ continue; \ } \ addr =3D ADDRFN(base, m[H4(e & ~1)]); \ addr +=3D 4 * (e & 1); \ - d[H4(e)] =3D (mask & 1) ? cpu_ldl_data_ra(env, addr, GETPC()) = : 0; \ + d[H4(e)] =3D (mask & 1) ? cpu_ldl_mmu(env, addr, oi, GETPC()) = : 0; \ if (WB && (e & 1)) { \ m[H4(e & ~1)] =3D addr - 4; \ } \ @@ -331,22 +335,26 @@ DO_VSTR(vstrh_w, MO_TEUW, 2, stw, 4, int32_t) #define ADDR_ADD_OSW(BASE, OFFSET) ((BASE) + ((OFFSET) << 2)) #define ADDR_ADD_OSD(BASE, OFFSET) ((BASE) + ((OFFSET) << 3)) =20 -DO_VLDR_SG(vldrb_sg_sh, ldsb, 2, int16_t, uint16_t, ADDR_ADD, false) -DO_VLDR_SG(vldrb_sg_sw, ldsb, 4, int32_t, uint32_t, ADDR_ADD, false) -DO_VLDR_SG(vldrh_sg_sw, ldsw, 4, int32_t, uint32_t, ADDR_ADD, false) +DO_VLDR_SG(vldrb_sg_sh, MO_SB, int8_t, ldb, 2, int16_t, uint16_t, ADDR_ADD= , false) +DO_VLDR_SG(vldrb_sg_sw, MO_SB, int8_t, ldb, 4, int32_t, uint32_t, ADDR_ADD= , false) +DO_VLDR_SG(vldrh_sg_sw, MO_TESW, int16_t, ldw, 4, int32_t, uint32_t, ADDR_= ADD, false) =20 -DO_VLDR_SG(vldrb_sg_ub, ldub, 1, uint8_t, uint8_t, ADDR_ADD, false) -DO_VLDR_SG(vldrb_sg_uh, ldub, 2, uint16_t, uint16_t, ADDR_ADD, false) -DO_VLDR_SG(vldrb_sg_uw, ldub, 4, uint32_t, uint32_t, ADDR_ADD, false) -DO_VLDR_SG(vldrh_sg_uh, lduw, 2, uint16_t, uint16_t, ADDR_ADD, false) -DO_VLDR_SG(vldrh_sg_uw, lduw, 4, uint32_t, uint32_t, ADDR_ADD, false) -DO_VLDR_SG(vldrw_sg_uw, ldl, 4, uint32_t, uint32_t, ADDR_ADD, false) +DO_VLDR_SG(vldrb_sg_ub, MO_UB, uint8_t, ldb, 1, uint8_t, uint8_t, ADDR_ADD= , false) +DO_VLDR_SG(vldrb_sg_uh, MO_UB, uint8_t, ldb, 2, uint16_t, uint16_t, ADDR_A= DD, false) +DO_VLDR_SG(vldrb_sg_uw, MO_UB, uint8_t, ldb, 4, uint32_t, uint32_t, ADDR_A= DD, false) +DO_VLDR_SG(vldrh_sg_uh, MO_TEUW, uint16_t, ldw, 2, uint16_t, uint16_t, ADD= R_ADD, false) +DO_VLDR_SG(vldrh_sg_uw, MO_TEUW, uint16_t, ldw, 4, uint32_t, uint32_t, ADD= R_ADD, false) +DO_VLDR_SG(vldrw_sg_uw, MO_TEUL, uint32_t, ldl, 4, uint32_t, uint32_t, ADD= R_ADD, false) DO_VLDR64_SG(vldrd_sg_ud, ADDR_ADD, false) =20 -DO_VLDR_SG(vldrh_sg_os_sw, ldsw, 4, int32_t, uint32_t, ADDR_ADD_OSH, false) -DO_VLDR_SG(vldrh_sg_os_uh, lduw, 2, uint16_t, uint16_t, ADDR_ADD_OSH, fals= e) -DO_VLDR_SG(vldrh_sg_os_uw, lduw, 4, uint32_t, uint32_t, ADDR_ADD_OSH, fals= e) -DO_VLDR_SG(vldrw_sg_os_uw, ldl, 4, uint32_t, uint32_t, ADDR_ADD_OSW, false) +DO_VLDR_SG(vldrh_sg_os_sw, MO_TESW, int16_t, ldw, 4, + int32_t, uint32_t, ADDR_ADD_OSH, false) +DO_VLDR_SG(vldrh_sg_os_uh, MO_TEUW, uint16_t, ldw, 2, + uint16_t, uint16_t, ADDR_ADD_OSH, false) +DO_VLDR_SG(vldrh_sg_os_uw, MO_TEUW, uint16_t, ldw, 4, + uint32_t, uint32_t, ADDR_ADD_OSH, false) +DO_VLDR_SG(vldrw_sg_os_uw, MO_TEUL, uint32_t, ldl, 4, + uint32_t, uint32_t, ADDR_ADD_OSW, false) DO_VLDR64_SG(vldrd_sg_os_ud, ADDR_ADD_OSD, false) =20 DO_VSTR_SG(vstrb_sg_ub, stb, 1, uint8_t, ADDR_ADD, false) @@ -362,7 +370,7 @@ DO_VSTR_SG(vstrh_sg_os_uw, stw, 4, uint32_t, ADDR_ADD_O= SH, false) DO_VSTR_SG(vstrw_sg_os_uw, stl, 4, uint32_t, ADDR_ADD_OSW, false) DO_VSTR64_SG(vstrd_sg_os_ud, ADDR_ADD_OSD, false) =20 -DO_VLDR_SG(vldrw_sg_wb_uw, ldl, 4, uint32_t, uint32_t, ADDR_ADD, true) +DO_VLDR_SG(vldrw_sg_wb_uw, MO_TEUL, uint32_t, ldl, 4, uint32_t, uint32_t, = ADDR_ADD, true) DO_VLDR64_SG(vldrd_sg_wb_ud, ADDR_ADD, true) DO_VSTR_SG(vstrw_sg_wb_uw, stl, 4, uint32_t, ADDR_ADD, true) DO_VSTR64_SG(vstrd_sg_wb_ud, ADDR_ADD, true) --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646364; cv=none; d=zohomail.com; s=zohoarc; b=mmLgQ8e2TDU1UREPggcbEavD4SIxYpHKYNYf1t8R+54BvK+pm9SpgL5hUt7u3qE53gKEadrzcqnt5qt6P7yQFqY79uIEpCDrj3Y0m+sNXK+WTOAHR1p8AL7E1PBMIkJipyV1yqdB/XBB91MwsU25mfY5qVHxrckOrgyxQl1mlM4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646364; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=rrdXGVKsIjSwX3vkeNxmtYDX97ChzZEx/IEj9RH0imo=; b=k194FNPFX2hcFNM/oB3ghnI43lMpNYLClWNcYrfjX2MfcIdrhIxWuMRCI8PZL4MfeFKQpALCXbO17ovlUwD4NuFVrUu4fV7yvsZAH4iGJ2ezlfT2fLYML3lB1HeOVPqFQRbSfLuowvkeE/oFWvvgnDqXYjCJqBZ3K2Fi3TeeRpU= 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 175164636478556.78123563855297; Fri, 4 Jul 2025 09:26:04 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjE1-0008JL-8S; Fri, 04 Jul 2025 12:25:21 -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 1uXjDu-0008At-VL for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:14 -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 1uXjDs-00064e-SW for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:14 -0400 Received: by mail-wm1-x331.google.com with SMTP id 5b1f17b1804b1-450cf0120cdso8786255e9.2 for ; Fri, 04 Jul 2025 09:25:12 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.10 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646311; x=1752251111; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=rrdXGVKsIjSwX3vkeNxmtYDX97ChzZEx/IEj9RH0imo=; b=XM+dbPqxcKdij96gvlFpvBJZYCQ8L5PVJHt4bjWi5NOI7L06agXx0QvWa3KWnjKpsa pslZGuO8ToJtD6NBxTZ2OoUziQPmJt9BqXc3VD9M+LBWCNsglS+NIex4EMzvg+MDGvxm CZaWnjjDlGJ0iHnt6pL2ezEtk7eNVln3tvyZHwPONQP1k4ov72eMWbYBvzMmcvAhbmI6 NVsoKXsYNdDMW62+F62Azj4tSO8sGxWuTSg2gvpUaHCEUdTYkzgHsG2nFytqbCMC3+Kp Xhx682v8URSzGmxNbS3HdolXyqchGRIX/5JCplkjJzJbrFlbLdtMBYJ/OlYLhcvlAmnr JIUw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646311; x=1752251111; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=rrdXGVKsIjSwX3vkeNxmtYDX97ChzZEx/IEj9RH0imo=; b=vF7XkgLwR6+Nus7CVClA6ofxRJ8mHuv/sENuPBjqRsA+UbUbkmpe0do+Eqm8j62+EA Ff75pXV9A2QHY7rYUVCmPUj64SxxmFegMSdFUIaWiyxsWH5RqM9hr1Mai4hEalJrTCkT ZIKt/AKIgOaV1oGHjneakIWDUCa16EtkY+mBfZ/NQ44fC48Kjq0bXIQNoQLtGGWS6KXE BoH68+8Z3iP19IqXuV2n4Cceuhf8OQczP2bURA1BSccupjmrUFUpsmaAc3S+Ch3Enn0u 00gKbikUR2ViWaNTnxeV1U3ly+xqsN62N26G0xfmsBswbwYP7SDdGiv8xfNi1Y4pS5MT CmPA== X-Gm-Message-State: AOJu0YzZKwSnoSgu2AKyter89JAE8UXOzfRlLiWjGfB50JvrlCQz3qIz L19y6vuOepG3rWAJobbFZk3PS6pGJEdKYoMasw5Yf/95qtr+1suXTaAdbrOJW59r8JdlkCM7iJI I0w5j X-Gm-Gg: ASbGncuGpf/5UzcVzD7ZaAlJioI84UUKxeBDbgUJjdQycOM8kQ9K/gDlAAAskH0y2/0 iQwifRhsRvVY4UR8YV0GI5EPoVR0Oj/Q1mE+jjQEsHC//UezFoHdPROWY0oa8g0Lufb1oKxrghI WBc4faiRFAH6d3RCdQqCBrEUGITka6EOP3lmiEon9r8HucYChcotrzZKiCKJ5FVHMFiPGUVJLsj 0GMqMY4/Kse2FlcfGDojCyDyCCd1f43cXvdzV91JZv/V/7h2dZgwTfMxSOu133Gtum8YE6zK3ND yBncSMbGA+bzsA/N2ilptrCtwpkrQsSxh+tqQYWxaT5Fz/yXzy2cXiURxJpPhc0r/BUK X-Google-Smtp-Source: AGHT+IGlPvXHlnaYP7TnD3VuUvesTp8wTkSBUNoWaBOYmXqtnjg2C+DIqm/L71g+VS1sRzobnwAiVA== X-Received: by 2002:a05:600c:45cf:b0:43d:47b7:b32d with SMTP id 5b1f17b1804b1-454b4eb7f3bmr27954715e9.25.1751646311045; Fri, 04 Jul 2025 09:25:11 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 008/119] target/arm: Fix VSTR_SG helper store alignment checks Date: Fri, 4 Jul 2025 17:23:08 +0100 Message-ID: <20250704162501.249138-9-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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=peter.maydell@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 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: 1751646366338116600 Content-Type: text/plain; charset="utf-8" From: William Kosasih This patch adds alignment checks in the store operations in the VSTR_SG instructions. Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1154 Signed-off-by: William Kosasih Reviewed-by: Richard Henderson Message-id: 20250703085604.154449-8-kosasihwilliam4@gmail.com Signed-off-by: Peter Maydell --- target/arm/tcg/mve_helper.c | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/target/arm/tcg/mve_helper.c b/target/arm/tcg/mve_helper.c index 633f511a7e6..2d21625f244 100644 --- a/target/arm/tcg/mve_helper.c +++ b/target/arm/tcg/mve_helper.c @@ -245,7 +245,7 @@ DO_VSTR(vstrh_w, MO_TEUW, 2, stw, 4, int32_t) } =20 /* We know here TYPE is unsigned so always the same as the offset type */ -#define DO_VSTR_SG(OP, STTYPE, ESIZE, TYPE, ADDRFN, WB) \ +#define DO_VSTR_SG(OP, MFLAG, STTYPE, ESIZE, TYPE, ADDRFN, WB) \ void HELPER(mve_##OP)(CPUARMState *env, void *vd, void *vm, \ uint32_t base) \ { \ @@ -255,13 +255,15 @@ DO_VSTR(vstrh_w, MO_TEUW, 2, stw, 4, int32_t) uint16_t eci_mask =3D mve_eci_mask(env); \ unsigned e; \ uint32_t addr; \ + int mmu_idx =3D arm_to_core_mmu_idx(arm_mmu_idx(env)); \ + MemOpIdx oi =3D make_memop_idx(MFLAG | MO_ALIGN, mmu_idx); \ for (e =3D 0; e < 16 / ESIZE; e++, mask >>=3D ESIZE, eci_mask >>= =3D ESIZE) { \ if (!(eci_mask & 1)) { \ continue; \ } \ addr =3D ADDRFN(base, m[H##ESIZE(e)]); \ if (mask & 1) { \ - cpu_##STTYPE##_data_ra(env, addr, d[H##ESIZE(e)], GETPC())= ; \ + cpu_##STTYPE##_mmu(env, addr, d[H##ESIZE(e)], oi, GETPC())= ; \ } \ if (WB) { \ m[H##ESIZE(e)] =3D addr; \ @@ -314,6 +316,8 @@ DO_VSTR(vstrh_w, MO_TEUW, 2, stw, 4, int32_t) uint16_t eci_mask =3D mve_eci_mask(env); \ unsigned e; \ uint32_t addr; \ + int mmu_idx =3D arm_to_core_mmu_idx(arm_mmu_idx(env)); \ + MemOpIdx oi =3D make_memop_idx(MO_TEUL | MO_ALIGN, mmu_idx); \ for (e =3D 0; e < 16 / 4; e++, mask >>=3D 4, eci_mask >>=3D 4) { = \ if (!(eci_mask & 1)) { \ continue; \ @@ -321,7 +325,7 @@ DO_VSTR(vstrh_w, MO_TEUW, 2, stw, 4, int32_t) addr =3D ADDRFN(base, m[H4(e & ~1)]); \ addr +=3D 4 * (e & 1); \ if (mask & 1) { \ - cpu_stl_data_ra(env, addr, d[H4(e)], GETPC()); \ + cpu_stl_mmu(env, addr, d[H4(e)], oi, GETPC()); \ } \ if (WB && (e & 1)) { \ m[H4(e & ~1)] =3D addr - 4; \ @@ -357,22 +361,22 @@ DO_VLDR_SG(vldrw_sg_os_uw, MO_TEUL, uint32_t, ldl, 4, uint32_t, uint32_t, ADDR_ADD_OSW, false) DO_VLDR64_SG(vldrd_sg_os_ud, ADDR_ADD_OSD, false) =20 -DO_VSTR_SG(vstrb_sg_ub, stb, 1, uint8_t, ADDR_ADD, false) -DO_VSTR_SG(vstrb_sg_uh, stb, 2, uint16_t, ADDR_ADD, false) -DO_VSTR_SG(vstrb_sg_uw, stb, 4, uint32_t, ADDR_ADD, false) -DO_VSTR_SG(vstrh_sg_uh, stw, 2, uint16_t, ADDR_ADD, false) -DO_VSTR_SG(vstrh_sg_uw, stw, 4, uint32_t, ADDR_ADD, false) -DO_VSTR_SG(vstrw_sg_uw, stl, 4, uint32_t, ADDR_ADD, false) +DO_VSTR_SG(vstrb_sg_ub, MO_UB, stb, 1, uint8_t, ADDR_ADD, false) +DO_VSTR_SG(vstrb_sg_uh, MO_UB, stb, 2, uint16_t, ADDR_ADD, false) +DO_VSTR_SG(vstrb_sg_uw, MO_UB, stb, 4, uint32_t, ADDR_ADD, false) +DO_VSTR_SG(vstrh_sg_uh, MO_TEUW, stw, 2, uint16_t, ADDR_ADD, false) +DO_VSTR_SG(vstrh_sg_uw, MO_TEUW, stw, 4, uint32_t, ADDR_ADD, false) +DO_VSTR_SG(vstrw_sg_uw, MO_TEUL, stl, 4, uint32_t, ADDR_ADD, false) DO_VSTR64_SG(vstrd_sg_ud, ADDR_ADD, false) =20 -DO_VSTR_SG(vstrh_sg_os_uh, stw, 2, uint16_t, ADDR_ADD_OSH, false) -DO_VSTR_SG(vstrh_sg_os_uw, stw, 4, uint32_t, ADDR_ADD_OSH, false) -DO_VSTR_SG(vstrw_sg_os_uw, stl, 4, uint32_t, ADDR_ADD_OSW, false) +DO_VSTR_SG(vstrh_sg_os_uh, MO_TEUW, stw, 2, uint16_t, ADDR_ADD_OSH, false) +DO_VSTR_SG(vstrh_sg_os_uw, MO_TEUW, stw, 4, uint32_t, ADDR_ADD_OSH, false) +DO_VSTR_SG(vstrw_sg_os_uw, MO_TEUL, stl, 4, uint32_t, ADDR_ADD_OSW, false) DO_VSTR64_SG(vstrd_sg_os_ud, ADDR_ADD_OSD, false) =20 DO_VLDR_SG(vldrw_sg_wb_uw, MO_TEUL, uint32_t, ldl, 4, uint32_t, uint32_t, = ADDR_ADD, true) DO_VLDR64_SG(vldrd_sg_wb_ud, ADDR_ADD, true) -DO_VSTR_SG(vstrw_sg_wb_uw, stl, 4, uint32_t, ADDR_ADD, true) +DO_VSTR_SG(vstrw_sg_wb_uw, MO_TEUL, stl, 4, uint32_t, ADDR_ADD, true) DO_VSTR64_SG(vstrd_sg_wb_ud, ADDR_ADD, true) =20 /* --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646337; cv=none; d=zohomail.com; s=zohoarc; b=TTbMMeJZbTSOin1lxryqkNOZUjPUMzcQotaaYNeUAaoKH31OOHbu464Am3RQ+5mhkbdlQQ6IHrwAa3TSn74uA8+uiOLmkwWEf7reek9tpgPZnJF0LPeOZNt5sEe0akUssYp3unfDavFrcGw81IgyH7gemOKrS7OmH9Z2hx4aL4U= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646337; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=75h5JYanAAyAMbTMMG7XYWKCz19Fz2IxJzhKVW1CbPM=; b=mQO6wqoyDjGEGinpa5b3D+anf42Z0xjPNsEm56R23IglbMGLHyMrIgJnc1qe7Wiu4BD/2O0kK0iIyiZJT0Ks7DqPalQ+81y51TXBrwRxNDEo9+7QGECUnQjVWOpYK/LqtP4azxDVzbBe/Ac/BR6UiLb2G4cdvTGlh4ovINFhFfs= 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 175164633786583.50997465782996; Fri, 4 Jul 2025 09:25:37 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjDx-0008FR-MG; Fri, 04 Jul 2025 12:25:17 -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 1uXjDv-0008Cm-OJ for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:15 -0400 Received: from mail-wm1-x332.google.com ([2a00:1450:4864:20::332]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjDt-000652-SY for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:15 -0400 Received: by mail-wm1-x332.google.com with SMTP id 5b1f17b1804b1-450cf0120cdso8786315e9.2 for ; Fri, 04 Jul 2025 09:25:13 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.11 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646312; x=1752251112; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=75h5JYanAAyAMbTMMG7XYWKCz19Fz2IxJzhKVW1CbPM=; b=QUbW0Q28QUR6eRW5/qrTXzGI4k+0AqF9kTgLnBSKdjKqMBsiZv2XSS4tmDQ2VJ6nRY BN1CMzgyQ0uW+WRe+U9ryqf03PV6TQfbcKU9BnNg03dLj6rFLYXOwmC/4bh7H1L7Czog TAZZz18lo4Q/dB+KlJA76vUB1xYtQxfeDbo7EBh/QEEA1fKAs6SBDWWac1ABV6wLGTR9 30M1P3+2SNUpPXqbJs1ADxrWsIcDGrBQ90UpUcqL1kCbnOirdSToM6J6JJdqTBfr5rCz DpA+mliB5v+k89rzMHW7rTyuVmeOoS3rsJ92yMStWoVJdPirgdFhAdumNoJrYTRXrYWH Xi9w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646312; x=1752251112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=75h5JYanAAyAMbTMMG7XYWKCz19Fz2IxJzhKVW1CbPM=; b=RuXJVvVG74h2V4mUjOPLLzqhUQrUQbXTx6bm0c/0xOdC50IBvHEnvj6cy4atP+/zx/ CEShv+/K6gH8TAd1SlM/yGGqu8BhRuM9Z1LMhZm6VNZVAeM7q1Ah+hf3JT19tdftnZ/g 9qbsQzVGbo4mmbq8uucHnowYAMeWoNGCu3K9I2HZU5mpnsS1VNqunE+wcSFRzy3JhO6o wB2QSmERXwsn8fy0EUmkPCclm9Vk4Q8hGZbmwF85h1NhK9qK3D5eM8R5nLO7i3Hu45qO R/n9HEUdsAW0pE0zjNEPxiG263SIJjJ6DpHR3fdFxTMkesxVRFZ3SC7qPyWAlwko9h1v BKPA== X-Gm-Message-State: AOJu0Yzvth85PU/cTqvwEXabf4RG1CXIig3pGoSCfv0Buh90Du1+ecH8 Ke7ZKStpfjIx0lnx6pTvLY6xWXSPu6TJQO033Gbww1uIMzrE3cJdqsDD15PmGhw3YB2dCPUziaD CpV8q X-Gm-Gg: ASbGncsBoNTDc0C3FfMIdsBVBbp2tZWi7u5A0iY5ysCp4o7sjerjx7D7u0/AfD4Td6T Wriin6CqIohu+Gnbxlhrcxje6HNkmIY73aVXib7i5C6y7G7c0sh1fLBKWyDaQM6S422clVxXXKs YrhZrR9Ir10VV85L4Or/E6VaeDL1ram+F2gTnBFyauSCf0EvQPGz+tAxIalFT7LFPzF10HCARPq 6HzfiF6kDAE5Mbn2nrErXo5GPG0hppHd6XKFeakzf1IdG5YmWZALN8aDpBfOpXGSKlCZGxNQK4g 5YlC22SIDP/QrrXp/jB9gjda+er+YqJT1oEaUddissQRdWW5n15jw/4rlqd8/ceUEM1g X-Google-Smtp-Source: AGHT+IGr1n5G7pnUww+cWAvxTdweCh0oyFoILozvRYVHP/pEQkOUlFTJ4rGg95WaNdrdE5hlxfke0w== X-Received: by 2002:a05:600c:6383:b0:453:8ab5:17f3 with SMTP id 5b1f17b1804b1-454b4ead145mr22420775e9.22.1751646311864; Fri, 04 Jul 2025 09:25:11 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 009/119] target/arm: Fix VLD4 helper load alignment checks Date: Fri, 4 Jul 2025 17:23:09 +0100 Message-ID: <20250704162501.249138-10-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::332; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x332.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751646340220116600 Content-Type: text/plain; charset="utf-8" From: William Kosasih This patch adds alignment checks in the load operations in the VLD4 instruction. Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1154 Signed-off-by: William Kosasih Reviewed-by: Richard Henderson Message-id: 20250703085604.154449-9-kosasihwilliam4@gmail.com Signed-off-by: Peter Maydell --- target/arm/tcg/mve_helper.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/target/arm/tcg/mve_helper.c b/target/arm/tcg/mve_helper.c index 2d21625f244..7069910db4a 100644 --- a/target/arm/tcg/mve_helper.c +++ b/target/arm/tcg/mve_helper.c @@ -403,13 +403,15 @@ DO_VSTR64_SG(vstrd_sg_wb_ud, ADDR_ADD, true) uint16_t mask =3D mve_eci_mask(env); \ static const uint8_t off[4] =3D { O1, O2, O3, O4 }; \ uint32_t addr, data; \ + int mmu_idx =3D arm_to_core_mmu_idx(arm_mmu_idx(env)); \ + MemOpIdx oi =3D make_memop_idx(MO_TEUL | MO_ALIGN, mmu_idx); \ for (beat =3D 0; beat < 4; beat++, mask >>=3D 4) { = \ if ((mask & 1) =3D=3D 0) { = \ /* ECI says skip this beat */ \ continue; \ } \ addr =3D base + off[beat] * 4; \ - data =3D cpu_ldl_le_data_ra(env, addr, GETPC()); \ + data =3D cpu_ldl_mmu(env, addr, oi, GETPC()); \ for (e =3D 0; e < 4; e++, data >>=3D 8) { = \ uint8_t *qd =3D (uint8_t *)aa32_vfp_qreg(env, qnidx + e); \ qd[H1(off[beat])] =3D data; \ @@ -427,13 +429,15 @@ DO_VSTR64_SG(vstrd_sg_wb_ud, ADDR_ADD, true) uint32_t addr, data; \ int y; /* y counts 0 2 0 2 */ \ uint16_t *qd; \ + int mmu_idx =3D arm_to_core_mmu_idx(arm_mmu_idx(env)); \ + MemOpIdx oi =3D make_memop_idx(MO_TEUL | MO_ALIGN, mmu_idx); \ for (beat =3D 0, y =3D 0; beat < 4; beat++, mask >>=3D 4, y ^=3D 2= ) { \ if ((mask & 1) =3D=3D 0) { = \ /* ECI says skip this beat */ \ continue; \ } \ addr =3D base + off[beat] * 8 + (beat & 1) * 4; \ - data =3D cpu_ldl_le_data_ra(env, addr, GETPC()); \ + data =3D cpu_ldl_mmu(env, addr, oi, GETPC()); \ qd =3D (uint16_t *)aa32_vfp_qreg(env, qnidx + y); \ qd[H2(off[beat])] =3D data; \ data >>=3D 16; \ @@ -452,13 +456,15 @@ DO_VSTR64_SG(vstrd_sg_wb_ud, ADDR_ADD, true) uint32_t addr, data; \ uint32_t *qd; \ int y; \ + int mmu_idx =3D arm_to_core_mmu_idx(arm_mmu_idx(env)); \ + MemOpIdx oi =3D make_memop_idx(MO_TEUL | MO_ALIGN, mmu_idx); \ for (beat =3D 0; beat < 4; beat++, mask >>=3D 4) { = \ if ((mask & 1) =3D=3D 0) { = \ /* ECI says skip this beat */ \ continue; \ } \ addr =3D base + off[beat] * 4; \ - data =3D cpu_ldl_le_data_ra(env, addr, GETPC()); \ + data =3D cpu_ldl_mmu(env, addr, oi, GETPC()); \ y =3D (beat + (O1 & 2)) & 3; \ qd =3D (uint32_t *)aa32_vfp_qreg(env, qnidx + y); \ qd[H4(off[beat] >> 2)] =3D data; \ --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646571; cv=none; d=zohomail.com; s=zohoarc; b=ARErmiBHaMuMbi2o+oEyV5XEyK37F9fTCcDhujHFjN5gtYfkp+DwHD2m+c0YQLO3oFhW5qfjRmBgCubf2Febv0D7YfD7O+UAv+e+0q0/+TLwBQ69luNeMeEBCCw8+pcl3f664Hz1DM1oo0q9+SaAREUCFpDomNzkLqiywVd9kuI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646571; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=LybgX1UB+nJfhl1l61Dt6MY1K3LDNnbZ9wsxzeVq3jk=; b=f34x5W4/qE38WaYZkZcVJze+eaTMnF2Wah6CXwq051hWs3ZZ/eAEBNC/avYh/269HVFX/J+kmNa3JFMY4EkEzgKgopWhbXSnM1EL+Z/Kdz1BMP8TczDq7mTO8CtSW+xfO24EvCpoCpyqm6UGvBGtD9no5M9hhfzAXvjCClKT9Xw= 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 1751646571339320.82189801393895; Fri, 4 Jul 2025 09:29:31 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjE1-0008JN-S7; Fri, 04 Jul 2025 12:25:21 -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 1uXjDw-0008DE-8U for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:16 -0400 Received: from mail-wm1-x32a.google.com ([2a00:1450:4864:20::32a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjDu-00065Q-F1 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:16 -0400 Received: by mail-wm1-x32a.google.com with SMTP id 5b1f17b1804b1-450cfb79177so6456235e9.0 for ; Fri, 04 Jul 2025 09:25:14 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.11 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646313; x=1752251113; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=LybgX1UB+nJfhl1l61Dt6MY1K3LDNnbZ9wsxzeVq3jk=; b=sZ9cuAAnule10J5Zb15OiWQw1MBvFKtUDMkq6wuajswLERyZbB8EA1ovqH4PJhh2RE NmofBqKsVTVzVdF9A04CT9z2i9mYnGpJjprl95ZKMqqG3CTtjxXwdefPFSHipU8KuByO qbowoRi4Q/LJC9AAbhsteXdICEkANN9b78/RcD5oDmR8CIgvO/3leyf5FCBiooUPAp51 KiZTKvwnYJIrc40TiL03AlqM0mqOKfY6A/tvMFib8TYmhJZHNf06jbgHR6WyaDZvNODp sXdNwC+d7lYIO8ZBv7lPGIiUZoMwgCvMVF6Z8gWaBKHVJbiAzG+TbnKLeJZEzBZL6bDg MgcQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646313; x=1752251113; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=LybgX1UB+nJfhl1l61Dt6MY1K3LDNnbZ9wsxzeVq3jk=; b=YF+F1zvX06k6aZhr0kiMsXN/cLLcbE661qsa1/aDFgXPTZlOXoOPkx5AmCopR8p6hT BId9gkEIjJRcJ2eyQUa9jxYOyxH3i0gJZy4anBkJZH9rc8g2ntVqKUibpP9k/uu7NkFW XdNqate4iGSVq4aTuX6pOioqHRIVtZGPsjz+SI3y/cPr80SgUgg7cuS4QlLt5eNoJ0H1 jR5J9WHVCiXF9ZouboeALYmVWcEdKf9WCFsIyrDaHUlhuZ/bQZIeBYZ/38Rq85AbTYpr z3wvEBpGzPWBFSZL2o9RcjcnUlLlx0zG0sfwR0BYSyig+PIJN9FrK8pBoSPvO15w9SM/ Jj2w== X-Gm-Message-State: AOJu0YxKDXsdA5BwtDX40rY3OHC2E6msL/7V79oRJm+upuAsmP/x9OVV QhWuh5GUG08oWWC4HL+gOSuKfsAI4/vFRdHYb9wrnjHDK9I9U0H9KN/c184xxIr/wIT2mv7e6GC WFiO3 X-Gm-Gg: ASbGncuD22+Dg3o35nbXAMT+gAtL1czjG6+GG7rmSH0TDrBKurmZhqHKcnObEusBVln d1ZYDs+GYoRZ0g6v8mvzOm+n+tktnc2td00x9b02k6MxK7TYzfr69lMadkZfvn4Vbrjot4BJD4L UrCCSVmzY9wh4D/A6M9yqAvo2Pe2qimfYUAg/PEDzfeRkyv0wAXc3W0eBQxiP17C40vfo+k2uDu hNcMGlqNsqZv7j7NfDw2dxyLR9gSJ0JZYUwlJ+Q0RYVUrhoP3+egK0JQzA+mgM6seTxW6FESi5U npSHuJ/HGQ/mTunz307u2Dp9Q9UO2RwFYfB7gmAJ5dvgcDKOK73yT2OiniiEbdLJ8XzE X-Google-Smtp-Source: AGHT+IE/axgYSuYWoNtPjwvgWbJfZ4yJftEs1iBnff07S2Y2r9uGon5gRSWG8ccedH5BDLc46i8oPw== X-Received: by 2002:a05:600c:8209:b0:450:d37d:7c with SMTP id 5b1f17b1804b1-454b315e413mr27022975e9.21.1751646312990; Fri, 04 Jul 2025 09:25:12 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 010/119] target/arm: Fix VLD2 helper load alignment checks Date: Fri, 4 Jul 2025 17:23:10 +0100 Message-ID: <20250704162501.249138-11-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::32a; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x32a.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751646572905116600 Content-Type: text/plain; charset="utf-8" From: William Kosasih This patch adds alignment checks in the load operations in the VLD2 instruction. Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1154 Signed-off-by: William Kosasih Reviewed-by: Richard Henderson Message-id: 20250703085604.154449-10-kosasihwilliam4@gmail.com Signed-off-by: Peter Maydell --- target/arm/tcg/mve_helper.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/target/arm/tcg/mve_helper.c b/target/arm/tcg/mve_helper.c index 7069910db4a..7473dfad2d2 100644 --- a/target/arm/tcg/mve_helper.c +++ b/target/arm/tcg/mve_helper.c @@ -495,13 +495,15 @@ DO_VLD4W(vld43w, 6, 7, 8, 9) static const uint8_t off[4] =3D { O1, O2, O3, O4 }; \ uint32_t addr, data; \ uint8_t *qd; \ + int mmu_idx =3D arm_to_core_mmu_idx(arm_mmu_idx(env)); \ + MemOpIdx oi =3D make_memop_idx(MO_TEUL | MO_ALIGN, mmu_idx); \ for (beat =3D 0; beat < 4; beat++, mask >>=3D 4) { = \ if ((mask & 1) =3D=3D 0) { = \ /* ECI says skip this beat */ \ continue; \ } \ addr =3D base + off[beat] * 2; \ - data =3D cpu_ldl_le_data_ra(env, addr, GETPC()); \ + data =3D cpu_ldl_mmu(env, addr, oi, GETPC()); \ for (e =3D 0; e < 4; e++, data >>=3D 8) { = \ qd =3D (uint8_t *)aa32_vfp_qreg(env, qnidx + (e & 1)); \ qd[H1(off[beat] + (e >> 1))] =3D data; \ @@ -519,13 +521,15 @@ DO_VLD4W(vld43w, 6, 7, 8, 9) uint32_t addr, data; \ int e; \ uint16_t *qd; \ + int mmu_idx =3D arm_to_core_mmu_idx(arm_mmu_idx(env)); \ + MemOpIdx oi =3D make_memop_idx(MO_TEUL | MO_ALIGN, mmu_idx); \ for (beat =3D 0; beat < 4; beat++, mask >>=3D 4) { = \ if ((mask & 1) =3D=3D 0) { = \ /* ECI says skip this beat */ \ continue; \ } \ addr =3D base + off[beat] * 4; \ - data =3D cpu_ldl_le_data_ra(env, addr, GETPC()); \ + data =3D cpu_ldl_mmu(env, addr, oi, GETPC()); \ for (e =3D 0; e < 2; e++, data >>=3D 16) { = \ qd =3D (uint16_t *)aa32_vfp_qreg(env, qnidx + e); \ qd[H2(off[beat])] =3D data; \ @@ -542,13 +546,15 @@ DO_VLD4W(vld43w, 6, 7, 8, 9) static const uint8_t off[4] =3D { O1, O2, O3, O4 }; \ uint32_t addr, data; \ uint32_t *qd; \ + int mmu_idx =3D arm_to_core_mmu_idx(arm_mmu_idx(env)); \ + MemOpIdx oi =3D make_memop_idx(MO_TEUL | MO_ALIGN, mmu_idx); \ for (beat =3D 0; beat < 4; beat++, mask >>=3D 4) { = \ if ((mask & 1) =3D=3D 0) { = \ /* ECI says skip this beat */ \ continue; \ } \ addr =3D base + off[beat]; \ - data =3D cpu_ldl_le_data_ra(env, addr, GETPC()); \ + data =3D cpu_ldl_mmu(env, addr, oi, GETPC()); \ qd =3D (uint32_t *)aa32_vfp_qreg(env, qnidx + (beat & 1)); \ qd[H4(off[beat] >> 3)] =3D data; \ } \ --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646576; cv=none; d=zohomail.com; s=zohoarc; b=mRMqBDm/co/rR6qffg3fqeCJ+WnLcm2tVVd7W5TNhpVGQco4v8BgyKMTdI4LBv6pACg9FLJHIRl7g9PQiUAqoiAbbLXoHzCFjSgbGaE9UTXJcuyNTjXTQilbRwoWj6oQU7pOIuVUcNH2Z4/r3jjbFdGStxJbPdg7Oardm9aOS5I= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646576; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=WVsL7KrYHwCP57mTFTbShINVbfgH7p4y5zsRi/3m5gg=; b=isnrTnsmd5r1AXAAwhAClUr6nAMVmzUTC1YWxuLkDeQosjETU7f4ATCOk9gP23z7DiMSoV3braX6c4NQYp28T5J/tac/MugA55OSfo5CJq9BR3gb/WtjO87NyTiX4jDwAHbhPksgTZLUhEmzavRBKfzAGJ5EtsZh9mhiWZLBiMU= 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 1751646576569613.7268772474426; Fri, 4 Jul 2025 09:29:36 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjDz-0008HP-4y; Fri, 04 Jul 2025 12:25:19 -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 1uXjDx-0008Fi-O4 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:17 -0400 Received: from mail-wm1-x32e.google.com ([2a00:1450:4864:20::32e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjDv-00065v-M4 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:17 -0400 Received: by mail-wm1-x32e.google.com with SMTP id 5b1f17b1804b1-453608ed113so12303435e9.0 for ; Fri, 04 Jul 2025 09:25:15 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.13 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646314; x=1752251114; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=WVsL7KrYHwCP57mTFTbShINVbfgH7p4y5zsRi/3m5gg=; b=eEpObgA/iRYkfzjG45qEmbcpJCQ0M8OiIQNRyf+aKykSxef11+Xmdg3aVAgh6ZEGTd kGyfkJYkBx4qYlphH08GzinWDrsIjZBIvYPIg7SyShgb9Dkv80ZUbzrgC5UU2p2SDkxY OEHDoHwPEFevHllCvxfhTs0YnffrgSpp92z0nJEViuv+zuiPNiJcg/xT+dc0d05QXomi ig8MhQA1gh+s/SeD5WqCBG/iLf7aep7FzgZrOtDd6WXWiS946MFG9+uXiXepKyMl8b7z z+S4/VtQqGoT276gsp2s1/QsaevLf/VOaqKRBdjJwC7ugmJX/cgzNbtRIbHx5UJr8ncv BrNA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646314; x=1752251114; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=WVsL7KrYHwCP57mTFTbShINVbfgH7p4y5zsRi/3m5gg=; b=tsFQFmzw8KKAJFdreV6A+k2nqH8fwuZGTU1ML2mfiBybSDcmoeCDNVPrPW5D3ecpgQ Q1Y0RlWQxgFYJXPnunzSIu9c/NGvEyfAFbTYChDo9pD3ylyG8nzztqjXqEEf0qhGoQMa 694DdmJLLcC8X/7SepXQLXEPSgXpYkY6elW6NRi+v3gMU/uOuKYqGVnNbL4/i0BCI6Gd R8nkM6woo236I3W5kyPQNofyJ9Hfql4U3d4TqqPzRy8TcUknE3hwFIdF7cnqQ7xa3sDc kplmwnP9z7xp+LuLTGSrp5KMf8lKqKFXWNPddrP1v/IRZppr6gZ7hUeTSZHgeSKckDoq mmgw== X-Gm-Message-State: AOJu0YwnqRpmTAQM7n1nQ0MeiIPHpnW9+hs6Nx+KIqa7LN0+AiT5hByf wfxdbNqB+2sORgfRptZGZZkQcPEJS0B989u4ud2HlIS0kykaAY1DlluSpSv9aQq8aXLt1DsADwu 9qOGw X-Gm-Gg: ASbGnctRUE6SyGz5+v2TsosFCyfADg0uKIh5yvGJJLeFi2iVGeGrqUpW4aRLuCG1AWa LKo7jFeZ8Gww1Swz5Z/utIiC6IrAntp7kbBa/6d7wQZUshFNCq7KtV1rHvNBdcydWVsFyuxbEen DzCIHgOF/u/lLoHErRRN+oY5b3hgCv2DnFdGS3tyT8Bm/vf4jNon417BjkLuMYAflbvduxpdxBR 3fNOPVSky+lyLCzfTaqAgrqVVJy+bXk/SCMO+rZ+RhHyTo+oQJk+ICkiw0QJcqaFxmrR++F2lxC v3gUabOSj6Uz8RDekFaO16nNVnMYZKgUH0H6WOGPGQk2SXEAM3nVKOq1UfF/mFaJkcJ3 X-Google-Smtp-Source: AGHT+IG2ENzqJfUAbCz9Skb7pmUtgbQr/en65a/m7fDhfW9qqoVQarU0jnfj4egULHZ5XSHIqy2REQ== X-Received: by 2002:a05:600c:6488:b0:441:d437:e3b8 with SMTP id 5b1f17b1804b1-454b30fd93dmr31843705e9.23.1751646313884; Fri, 04 Jul 2025 09:25:13 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 011/119] target/arm: Fix VST4 helper store alignment checks Date: Fri, 4 Jul 2025 17:23:11 +0100 Message-ID: <20250704162501.249138-12-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::32e; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x32e.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751646576875116600 Content-Type: text/plain; charset="utf-8" From: William Kosasih This patch adds alignment checks in the store operations in the VST4 instruction. Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1154 Signed-off-by: William Kosasih Reviewed-by: Richard Henderson Message-id: 20250703085604.154449-11-kosasihwilliam4@gmail.com Signed-off-by: Peter Maydell --- target/arm/tcg/mve_helper.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/target/arm/tcg/mve_helper.c b/target/arm/tcg/mve_helper.c index 7473dfad2d2..5273411389d 100644 --- a/target/arm/tcg/mve_helper.c +++ b/target/arm/tcg/mve_helper.c @@ -577,6 +577,8 @@ DO_VLD2W(vld21w, 8, 12, 16, 20) uint16_t mask =3D mve_eci_mask(env); \ static const uint8_t off[4] =3D { O1, O2, O3, O4 }; \ uint32_t addr, data; \ + int mmu_idx =3D arm_to_core_mmu_idx(arm_mmu_idx(env)); \ + MemOpIdx oi =3D make_memop_idx(MO_TEUL | MO_ALIGN, mmu_idx); \ for (beat =3D 0; beat < 4; beat++, mask >>=3D 4) { = \ if ((mask & 1) =3D=3D 0) { = \ /* ECI says skip this beat */ \ @@ -588,7 +590,7 @@ DO_VLD2W(vld21w, 8, 12, 16, 20) uint8_t *qd =3D (uint8_t *)aa32_vfp_qreg(env, qnidx + e); \ data =3D (data << 8) | qd[H1(off[beat])]; \ } \ - cpu_stl_le_data_ra(env, addr, data, GETPC()); \ + cpu_stl_mmu(env, addr, data, oi, GETPC()); \ } \ } =20 @@ -602,6 +604,8 @@ DO_VLD2W(vld21w, 8, 12, 16, 20) uint32_t addr, data; \ int y; /* y counts 0 2 0 2 */ \ uint16_t *qd; \ + int mmu_idx =3D arm_to_core_mmu_idx(arm_mmu_idx(env)); \ + MemOpIdx oi =3D make_memop_idx(MO_TEUL | MO_ALIGN, mmu_idx); \ for (beat =3D 0, y =3D 0; beat < 4; beat++, mask >>=3D 4, y ^=3D 2= ) { \ if ((mask & 1) =3D=3D 0) { = \ /* ECI says skip this beat */ \ @@ -612,7 +616,7 @@ DO_VLD2W(vld21w, 8, 12, 16, 20) data =3D qd[H2(off[beat])]; \ qd =3D (uint16_t *)aa32_vfp_qreg(env, qnidx + y + 1); \ data |=3D qd[H2(off[beat])] << 16; \ - cpu_stl_le_data_ra(env, addr, data, GETPC()); \ + cpu_stl_mmu(env, addr, data, oi, GETPC()); \ } \ } =20 @@ -626,6 +630,8 @@ DO_VLD2W(vld21w, 8, 12, 16, 20) uint32_t addr, data; \ uint32_t *qd; \ int y; \ + int mmu_idx =3D arm_to_core_mmu_idx(arm_mmu_idx(env)); \ + MemOpIdx oi =3D make_memop_idx(MO_TEUL | MO_ALIGN, mmu_idx); \ for (beat =3D 0; beat < 4; beat++, mask >>=3D 4) { = \ if ((mask & 1) =3D=3D 0) { = \ /* ECI says skip this beat */ \ @@ -635,7 +641,7 @@ DO_VLD2W(vld21w, 8, 12, 16, 20) y =3D (beat + (O1 & 2)) & 3; \ qd =3D (uint32_t *)aa32_vfp_qreg(env, qnidx + y); \ data =3D qd[H4(off[beat] >> 2)]; \ - cpu_stl_le_data_ra(env, addr, data, GETPC()); \ + cpu_stl_mmu(env, addr, data, oi, GETPC()); \ } \ } =20 --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646820; cv=none; d=zohomail.com; s=zohoarc; b=GQGmvVPGFiUW/rmI1IXPrjP+7j0kd2wwM06LfnQCjBPTECUSOaVO/8glJiW13JYM89QT4oVzmyA73HUFRechhuLv5LfSrzkmKBqfzyvWxeJE5m1e59MDM03L4qiCWGz9BAw1aWEFLMxgTPe82ga19VotcSHRGqJjPN4cwQuOIjs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646820; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=TpA2K+wcSCgal+tzmOLuAAQKvE/cMwuvlQchQyQQauw=; b=d9uh2/0gPEMe8cRBBUk0gNXRxwJsnrGQ0XmRpnYhsJbgr24FRKUFyGycmgJd4oUpA9aH+dQUiGnC27hr9+GNwP62jPMI/wl/t390NrRaSojpWMuTSQasdFcXAay9y3m6Mz63kMcOd46PtgKuJuvvGW+KJ4Qj2VK8/dyn4okrM/I= 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 1751646820095927.4446362001977; Fri, 4 Jul 2025 09:33:40 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjDz-0008I3-G2; Fri, 04 Jul 2025 12:25:19 -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 1uXjDy-0008G9-8P for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:18 -0400 Received: from mail-wr1-x42d.google.com ([2a00:1450:4864:20::42d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjDw-00066G-Dt for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:17 -0400 Received: by mail-wr1-x42d.google.com with SMTP id ffacd0b85a97d-3a6f2c6715fso1023986f8f.1 for ; Fri, 04 Jul 2025 09:25:16 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.13 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646315; x=1752251115; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=TpA2K+wcSCgal+tzmOLuAAQKvE/cMwuvlQchQyQQauw=; b=sH5Ph5LIBDDb+RfSBLvVESCfG86HlwMQ7/w/kNWyHwQK9nFdyFm1SE29o7m7TIOSza gYt2kLpLskw7pz+txXUY9YpHgj2+JYYeGQ5ih+DxWoKkm5A9NSoWO6DjSamoNrGQHcZY 4ix9C3gs8X81o/7CqwbTCzS4dPNVKPpJ88PWg5rNZBhtB1pCOZFQe4HH2t8X+FqF/gcb GMhaSPwhASGsbmPEU7/+ZmKPJggaR7AcQHlPmA1Y0EP7PJFi2Doer1rygI+InhBZ/RKr HC6H7aM2ogjQYHIYRiapPIcqFZw9NSfawSMKrXGIRrtsmKk9OG/1GrK/nCKKJ1BcxQJy c49A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646315; x=1752251115; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=TpA2K+wcSCgal+tzmOLuAAQKvE/cMwuvlQchQyQQauw=; b=NHz5ytSF4EI5xhaB7mNwSEHLP13P7bMotpVbO3mFtoLfnBQdEpp1daVPcWPxebabR3 9SU6VzitMeKTS+A90+ljRjBywxmQ+iM7PQ+HCHnb8lREyhaRWelOZSaZzRNHZqZYH5YI 03lAXkouW+WeCvt66EBGTwLA+iUpehW0h0DDWuLfsJ5s1FSHL5CJJbni9JEwfkHjKLMC AM5GNtNN0hg4YuWMROi4Zzu3jDjZCfRMdAcUjR+d4S0x7ZVuqJWDmj0aNdsL7VMUmrzw UNf2fU3fjvgj4tnZUfuQS8u3y7oQW4qKCa85aMsKMNZMqgmrQXUZ2pfUmP952AIcbprv zGiQ== X-Gm-Message-State: AOJu0YwstlYlH9zLR7PY9vG3MOH7ALKcRQubL1SVwXXB0ud8I7D85N+8 CJn1gc2kzyqw3iYmyIkUnrrE3KKRuaLc2uT/U7W/fm56LDZ8pkYpRD7ipMtUpGlfLPFtZB+hFJh pb1/x X-Gm-Gg: ASbGnctC0CEk6VO/A2sDElEMIlhHbMUTpwKmlqIH33g818I/600PVULzD8J8fky2Irk kJbMNC70YrQ3F4CC8754XUaMycgR1J743/4OKapcD3S8pfmBVmcSY3qlC3+u6OEn6QhvUI4XHxM LTouoGp40JpT2V70AMpdtHlaYy/WDFw+IWhfuP7CFxzWxwv3rQ4XCrY08YY8QMEiKSUjtH4ciSx LgIbGpnUNFJmWhZ0/3+b2MIagp9gtMysk5HkQf+oafbcGffa1oE77ap8C05g6Og7WJdt7AZhJdf Cxh8KWczc87rZom1JunTcaJzjX8b49XSHznJiSl3LHoo+69EJhdwr/HY2azHQG4n0UYJ X-Google-Smtp-Source: AGHT+IHNWBH34opzcx/yOxpS0zhtDSiFdwrVaZLdNJCnSHSAefKI9qGGl4Sv3NA8cwfUf0JylcPDvg== X-Received: by 2002:a05:6000:1788:b0:3a4:ef00:a78c with SMTP id ffacd0b85a97d-3b49703630fmr2701795f8f.55.1751646314692; Fri, 04 Jul 2025 09:25:14 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 012/119] target/arm: Fix VST2 helper store alignment checks Date: Fri, 4 Jul 2025 17:23:12 +0100 Message-ID: <20250704162501.249138-13-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::42d; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x42d.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751646821943116600 Content-Type: text/plain; charset="utf-8" From: William Kosasih This patch adds alignment checks in the store operations in the VST2 instruction. Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1154 Signed-off-by: William Kosasih Reviewed-by: Richard Henderson Message-id: 20250703085604.154449-12-kosasihwilliam4@gmail.com Signed-off-by: Peter Maydell --- target/arm/tcg/mve_helper.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/target/arm/tcg/mve_helper.c b/target/arm/tcg/mve_helper.c index 5273411389d..42bb3b979b5 100644 --- a/target/arm/tcg/mve_helper.c +++ b/target/arm/tcg/mve_helper.c @@ -669,6 +669,8 @@ DO_VST4W(vst43w, 6, 7, 8, 9) static const uint8_t off[4] =3D { O1, O2, O3, O4 }; \ uint32_t addr, data; \ uint8_t *qd; \ + int mmu_idx =3D arm_to_core_mmu_idx(arm_mmu_idx(env)); \ + MemOpIdx oi =3D make_memop_idx(MO_TEUL | MO_ALIGN, mmu_idx); \ for (beat =3D 0; beat < 4; beat++, mask >>=3D 4) { = \ if ((mask & 1) =3D=3D 0) { = \ /* ECI says skip this beat */ \ @@ -680,7 +682,7 @@ DO_VST4W(vst43w, 6, 7, 8, 9) qd =3D (uint8_t *)aa32_vfp_qreg(env, qnidx + (e & 1)); \ data =3D (data << 8) | qd[H1(off[beat] + (e >> 1))]; \ } \ - cpu_stl_le_data_ra(env, addr, data, GETPC()); \ + cpu_stl_mmu(env, addr, data, oi, GETPC()); \ } \ } =20 @@ -694,6 +696,8 @@ DO_VST4W(vst43w, 6, 7, 8, 9) uint32_t addr, data; \ int e; \ uint16_t *qd; \ + int mmu_idx =3D arm_to_core_mmu_idx(arm_mmu_idx(env)); \ + MemOpIdx oi =3D make_memop_idx(MO_TEUL | MO_ALIGN, mmu_idx); \ for (beat =3D 0; beat < 4; beat++, mask >>=3D 4) { = \ if ((mask & 1) =3D=3D 0) { = \ /* ECI says skip this beat */ \ @@ -705,7 +709,7 @@ DO_VST4W(vst43w, 6, 7, 8, 9) qd =3D (uint16_t *)aa32_vfp_qreg(env, qnidx + e); \ data =3D (data << 16) | qd[H2(off[beat])]; \ } \ - cpu_stl_le_data_ra(env, addr, data, GETPC()); \ + cpu_stl_mmu(env, addr, data, oi, GETPC()); \ } \ } =20 @@ -718,6 +722,8 @@ DO_VST4W(vst43w, 6, 7, 8, 9) static const uint8_t off[4] =3D { O1, O2, O3, O4 }; \ uint32_t addr, data; \ uint32_t *qd; \ + int mmu_idx =3D arm_to_core_mmu_idx(arm_mmu_idx(env)); \ + MemOpIdx oi =3D make_memop_idx(MO_TEUL | MO_ALIGN, mmu_idx); \ for (beat =3D 0; beat < 4; beat++, mask >>=3D 4) { = \ if ((mask & 1) =3D=3D 0) { = \ /* ECI says skip this beat */ \ @@ -726,7 +732,7 @@ DO_VST4W(vst43w, 6, 7, 8, 9) addr =3D base + off[beat]; \ qd =3D (uint32_t *)aa32_vfp_qreg(env, qnidx + (beat & 1)); \ data =3D qd[H4(off[beat] >> 3)]; \ - cpu_stl_le_data_ra(env, addr, data, GETPC()); \ + cpu_stl_mmu(env, addr, data, oi, GETPC()); \ } \ } =20 --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647284; cv=none; d=zohomail.com; s=zohoarc; b=JrcgYmXBAMAtpkvs4JWmSVFftglnZT8JamQTtuI38jT4Nc+ILpvGrBRUuGajf/73z0j73u4fAOaDIh42zysspQa9+8W1J1WkABHBEdu8d1CFrC0UjhCGlmnIOGoVy+2RcyQojYbwgPaxPmnrKwyF9K8mYc/1EQR3/qoPlhr6uek= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647284; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=CjmSifyultKO92TqHZgAe9D2aJBwtyFLFYx6SMlRFYs=; b=YGsIuIC40qQtU9yQhaxhesPfG9yHboxh6HQliW/HMf4T5M1oIM3fVCShaE7sa1sIy1Y5IKt7RL6Cmrbf08Ceu/fdoaoVNbbwgY/Y0KQfpIhd0XfXJZRMFAlF29XZcMx/XPjgCrdk2e20kGh/d0plwaOgXyEUIbKVn86eZeJWGM8= 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 1751647284667693.2937575664063; Fri, 4 Jul 2025 09:41:24 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjE0-0008J0-Hc; Fri, 04 Jul 2025 12:25:20 -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 1uXjDy-0008Gu-UP for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:18 -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 1uXjDx-00066e-9P for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:18 -0400 Received: by mail-wm1-x331.google.com with SMTP id 5b1f17b1804b1-450ce3a2dd5so9571765e9.3 for ; Fri, 04 Jul 2025 09:25:16 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.14 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646316; x=1752251116; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=CjmSifyultKO92TqHZgAe9D2aJBwtyFLFYx6SMlRFYs=; b=nnx5cexLhSujvJnJScaBf+LXC0N5uS4OqiVd2IZE8V5JLtRnCM+NBvHUl4950Tw3Uo p6b5BTGOUCHiuKNO42LT2IUiNWEUQQEFrtEev0ng+m7Jq582ly7B1rF0a1+Zf/VwFBwS LjwmFSh2wb2JMHEBJPNwzlmPErgmcmzIGCJFlpFs+Oxj1y25Tko9D1v/egFVzNMUOnZ1 AF1QxMJhc11snY4bdRlftivNxufnTspJ+27R9cy+fT5P7PL2I2bnDKf6+dGO75e222zd Rk2RijEHkb6pkA6AtSQyayKBVL61BCrVnkmJ/txVQj8RtehLBKUOp3x7lH60n9jMr8gy kH0g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646316; x=1752251116; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=CjmSifyultKO92TqHZgAe9D2aJBwtyFLFYx6SMlRFYs=; b=qiRX6ZetLsYOw5Ltej9+iPQ5I25bNxMb5SdT/GrrpydWtVKKckQN6ecByDgW3F4qBj 6lhEjNiQOuroAkOQZ1GGyPBiD4SKszdE0WMsBsnlkhSYXLGPk4sLxmjuSulZJgoBihXP tcAvihVKSLx+FJN4dItUGxvtgW+C2NkeqYDo6Dp0j6cDeq+bD9TIuLriXNOWe7g84zmI Zgy4ipcYpddDiQDVISy4bGN1H7bV+lG6RNsIeD0uT84nrtR9qYT7/WhKMneuDcu/INfU EaDVbBc/1E8WD2ii3BjES0PTO463wWCmwASOXJh2nxRdqG/EAVI4taqfANpGTCPxQoYh PyfQ== X-Gm-Message-State: AOJu0YwYeha4fcu0t4bA3Tx6zHRQUJhwiGHb63fzReJiqn6VDgBY0j7+ QJVR4xABk7PaERQf93fa1mt0rqLZ1JW3GQBlYRgRY/GcoHC7e6y1aPBw+JXaT/JW+ZOcXwyu1AS B06R1 X-Gm-Gg: ASbGncu2svE0eX9s3L5e6Ev2rAWka0AksMqv6Xzie7i6KsIBohV+WW7p4D97yjQMFaE fCVCFGZ4DMGk/o0dGPs35AsAPW+DMXirEvRUHEJcKS3HpkMh3NKb9Qu+hPMWL3sGGtB0uwcD27o 34gw74qzFPgXiSCeAAP1wjkyJq6aEZVyWzOnQrvBZ+0Ez/O+Hc+trRS30JonEU/1lvZZx0Dh+OZ BWS0BBdUg4e/zPZWw0JLBZ0C5n3OaWO0pGX+JxmsgELP5/m/0BYXL06Ti3TGUfpx1YG5h1HoWO6 HTyiaf3mDF7FsJ0FCaG+DFgqutKup75Cmo7n5+PUGDWvkI28Im5mS3zX+J+6s+oRWmVA X-Google-Smtp-Source: AGHT+IHZZMdoHpjn3K6htzrnEVlnZpXGQVws6eCSO7YQPlVcWWBn2ak3UPc/xCAVo97OQOHNoE8s2w== X-Received: by 2002:a05:600c:648a:b0:43d:878c:7c40 with SMTP id 5b1f17b1804b1-454b4e769e4mr31289875e9.10.1751646315554; Fri, 04 Jul 2025 09:25:15 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 013/119] target/arm: Fix SME vs AdvSIMD exception priority Date: Fri, 4 Jul 2025 17:23:13 +0100 Message-ID: <20250704162501.249138-14-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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=peter.maydell@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 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: 1751647285338116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson We failed to raise an exception when sme_excp_el =3D=3D 0 and fp_excp_el =3D=3D 1. Cc: qemu-stable@nongnu.org Fixes: 3d74825f4d6 ("target/arm: Add SME enablement checks") Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-2-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/translate-a64.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c index 815225b1301..5c44a5dece9 100644 --- a/target/arm/tcg/translate-a64.c +++ b/target/arm/tcg/translate-a64.c @@ -1488,7 +1488,8 @@ bool sme_enabled_check(DisasContext *s) * to be zero when fp_excp_el has priority. This is because we need * sme_excp_el by itself for cpregs access checks. */ - if (!s->fp_excp_el || s->sme_excp_el < s->fp_excp_el) { + if (s->sme_excp_el + && (!s->fp_excp_el || s->sme_excp_el <=3D s->fp_excp_el)) { bool ret =3D sme_access_check(s); s->fp_access_checked =3D (ret ? 1 : -1); return ret; --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647443; cv=none; d=zohomail.com; s=zohoarc; b=g4NQmWhJGy03dma9AHmjiaCba+Np6RW8A1xELvcyQIx+dgfM1q81N5jKMILUkRr2/ox/qhTcPeyEoukTjuhTe/aoT+T5h+8yhayW8h1tFA8ox/osTqjsr2U8vrRlVQcz6wQpDlruqXBcYLXL/RhspWg82+Yt/aRQX5mS5mdyCR0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647443; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=sdksj7AhuX3HdoRD316K9aYl//4+2BwqWbea6b6KLvM=; b=PKmI5BQdQ1JWpMWsdoyiUTNeMpvHY3+ubW8ChLV0x4LzRzq/ALjRuoF7dW4H5gWqEXA9Poogi786dJL4lLVnPey6RcSBrH39tUeoNhMFQBjqSN9/OdTFdxReILs170+b/mf0FjmNZe69XNUWjX3omD/ydO9dIx2d4o/J8ZgE3Hs= 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 1751647443867192.29558360214423; Fri, 4 Jul 2025 09:44:03 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjE2-0008KF-Rr; Fri, 04 Jul 2025 12:25:22 -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 1uXjE0-0008Ix-HY for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:20 -0400 Received: from mail-wr1-x436.google.com ([2a00:1450:4864:20::436]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjDy-00066q-9a for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:19 -0400 Received: by mail-wr1-x436.google.com with SMTP id ffacd0b85a97d-3a54700a463so653461f8f.1 for ; Fri, 04 Jul 2025 09:25:17 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.15 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646316; x=1752251116; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=sdksj7AhuX3HdoRD316K9aYl//4+2BwqWbea6b6KLvM=; b=UolMWZFThgPsCsYDIae2zdWkdmFT8FPtej7dmTG9vxX49yTx3DzUCqBtFnK4cl2OIk wRZxKz00adx6Nbx0AmerHLsrz8suP/S0dEdZT5QheMm9mNo6ecc2EYiInbK6YmQ4OSfo Zmv0704OexoPq0BrsYBReD998w+KHyv1KKMnDy1vnQhy1tsUUDFr7b2LO6GY77Tz6meJ b74IOjlqR4DmwB2aRea0N+pgKNch6Pb8GTB+hCOaRA2n/R1N0z724ypHx1jSaSvx08J1 xaM5Skk2/cQT8DbiMESi8b9ZrQuoJYRMT4dBtbqfC4WbmWaka1ZdOYl3BG+4rbFmfkoj g/8g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646316; x=1752251116; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=sdksj7AhuX3HdoRD316K9aYl//4+2BwqWbea6b6KLvM=; b=oHWoExeUlDXjXwMpPPauDw2vgNMnuKCQBEMrRO30si4+D40vbjPbFl8Uc/wWVPuloB SgSabJjik40QAHz6j1RCZDfI9M2UtQRi9MyWGKd515DbXVmGIIy0w2gxKep84Y10SJ2o JD4nDzng/54sDIYHPWh87XxCAjYZdbRTEzlbrvfrTJGhzV3GGegMohmDfrOGuo6nlhk7 aZOldMsupEi0iyNk7OJCUwiP5aQftQih5MHklsk+3t59Gs2KOtAIjRcj2OCSlFklmZQg /ieFHP0qrLRQYo3ZYNPEb8LiD4icijTzk3R6+/aH9lojpcUicXLuO6yKDSRelHoLuxhE 3vnA== X-Gm-Message-State: AOJu0YxhmenCVPPQCh0SA/1KuaS7sNSV45onx3b6tfpDRinkxm5t1i5m 1LrRINJP/tIUFYh0ik77CAc8XBJcUBR41wFDlbJFfV29hPsp+QeeeN0SA7oxTrH3JTC3M2FVZx7 66EBS X-Gm-Gg: ASbGncuCc6VjuMU4NQB1rG7srSkvSFWJBVcB0BVL4kYsmI6HZQUDLfqrMpHwDzvWzbw 4jNlch6ugeXFhehs4ohLXba7I/ydUyRbqLCMixLwpGo08NynquWJTuF9mLpvMTLLLDuboe5aLQI sIZqVKkszr9n+fztv/kIFkq5infUw2nDu7hIq7jo2LzUKpdvNUhcrj4IwDaovl9LrIfcXAiIJA4 tLnNhC/nvSG+dPsiFcQ7itS0Vlpu50v3UENZK6qpg5Gr7waAr1PSM9jda+TZ/rYQQU15gCjuNtU Njqj3E2OjeyM9qRk/GfBv6X0u3R46S2ElkyV21UlnegyiKRe5I+q2ZigTFBISXwYE3sz/LHqins bpz4= X-Google-Smtp-Source: AGHT+IGvC1Coz2Sx4wU3o62QTM1Uhkxp1Y4GPeHWzPFpJfud2OWwmRSUUIbF1RlrNE07TU/Zjc9S3A== X-Received: by 2002:a05:6000:4a0a:b0:3a4:da0e:517a with SMTP id ffacd0b85a97d-3b495589716mr3643563f8f.23.1751646316446; Fri, 04 Jul 2025 09:25:16 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 014/119] target/arm: Fix sve_access_check for SME Date: Fri, 4 Jul 2025 17:23:14 +0100 Message-ID: <20250704162501.249138-15-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::436; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x436.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751647445215116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Do not assume SME implies SVE. Ensure that the non-streaming check is present along the SME path, since it is not implied by sme_*_enabled_check. Cc: qemu-stable@nongnu.org Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-3-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/translate-a64.c | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c index 5c44a5dece9..b0caccca46e 100644 --- a/target/arm/tcg/translate-a64.c +++ b/target/arm/tcg/translate-a64.c @@ -1381,11 +1381,8 @@ static bool fp_access_check_only(DisasContext *s) return true; } =20 -static bool fp_access_check(DisasContext *s) +static bool nonstreaming_check(DisasContext *s) { - if (!fp_access_check_only(s)) { - return false; - } if (s->sme_trap_nonstreaming && s->is_nonstreaming) { gen_exception_insn(s, 0, EXCP_UDEF, syn_smetrap(SME_ET_Streaming, false)); @@ -1394,6 +1391,11 @@ static bool fp_access_check(DisasContext *s) return true; } =20 +static bool fp_access_check(DisasContext *s) +{ + return fp_access_check_only(s) && nonstreaming_check(s); +} + /* * Return <0 for non-supported element sizes, with MO_16 controlled by * FEAT_FP16; return 0 for fp disabled; otherwise return >0 for success. @@ -1444,14 +1446,24 @@ static int fp_access_check_vector_hsd(DisasContext = *s, bool is_q, MemOp esz) */ bool sve_access_check(DisasContext *s) { - if (s->pstate_sm || !dc_isar_feature(aa64_sve, s)) { + if (dc_isar_feature(aa64_sme, s)) { bool ret; =20 - assert(dc_isar_feature(aa64_sme, s)); - ret =3D sme_sm_enabled_check(s); + if (s->pstate_sm) { + ret =3D sme_enabled_check(s); + } else if (dc_isar_feature(aa64_sve, s)) { + goto continue_sve; + } else { + ret =3D sme_sm_enabled_check(s); + } + if (ret) { + ret =3D nonstreaming_check(s); + } s->sve_access_checked =3D (ret ? 1 : -1); return ret; } + + continue_sve: if (s->sve_excp_el) { /* Assert that we only raise one exception per instruction. */ assert(!s->sve_access_checked); --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646594; cv=none; d=zohomail.com; s=zohoarc; b=JKXqrtMuGpI+g45yagqdM1b1eYdHbvE+Qg1fOsDTL+daJAcin+nttJjEl5I4FFjUIiQ47cU9jDqnH9OvytVDYwnzq/w8UEJx7vKm3goFfvoLke6qRGMiMi7Bc1s8ZBdaQ/Zy9jsDLkTH5MNI7ndankbBNY36rppf7YJBlwLtwKs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646594; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=PcqEQ5aYdp2E4FjnhQYUUiKF9jfZH90kYn9RZsT1ETo=; b=Ruu7MyWr59+N0VRO7HYx1q2eC85d/J1CG2igz4RXLHlzayrvB5HSWEdc1IR2zA6WUCEWDMZK7EDfqVOYBT1vefhFds0umiefZzOruaXnxjvcEl9g+3CKWb0idDF3iiUpsiknTOw2kjxvXcRVCUUkSA2yGOA6us3GriFpwWGImuk= 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 1751646594139556.1967250990443; Fri, 4 Jul 2025 09:29:54 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjE5-0008Mc-If; Fri, 04 Jul 2025 12:25:25 -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 1uXjE0-0008J2-JK for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:20 -0400 Received: from mail-wm1-x32b.google.com ([2a00:1450:4864:20::32b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjDy-00067H-O8 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:20 -0400 Received: by mail-wm1-x32b.google.com with SMTP id 5b1f17b1804b1-45363645a8eso7850505e9.1 for ; Fri, 04 Jul 2025 09:25:18 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.16 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646317; x=1752251117; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=PcqEQ5aYdp2E4FjnhQYUUiKF9jfZH90kYn9RZsT1ETo=; b=qefEFw2SMETwi6+kjAu7sCMDFvYND5p8vL8nvJLUbR0U5wYSyvRH9wxrd3+XSIy7Wq ThcYAWaiDUW2/nAFxAi9YnJrBpyia3Gjvdj33DnZoUB/s2SlHPrwgw9h/1VUEE2ZEYN0 T1ba2RSNqo+5X8o00NkKCFoE/cIiNTig7KxmWgufDrNerduMa/qGuHHR62fFrZz+11m/ ELe1rrTNx1iU31vshlg++1FnBo7eG65TBUeWQab5u8hXuR1J6IzI1t0nbukq9LAp5vTG ckjTwzMhVyEHx02d9ssnOB6y2HxeuUrWTirgu2BRV/J6aMVGRFHuM90r+o1eWod6UUTW Oz9g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646317; x=1752251117; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=PcqEQ5aYdp2E4FjnhQYUUiKF9jfZH90kYn9RZsT1ETo=; b=xBuC7uny6HJahN1Fg1n97Y4y8cKgAYad12hE3JDTosgvNK4IA1BRQmZ4rD5ffui94N nVrEf5bS4kZTeaUzdSGg4bnN8Ud4m1Y+YQJIu/qTSsEJpj3M99nm9gPB/911OmBiGzp7 SbruywWZWYH2sUPz3CFF6P8EUzyZVN91ZogF9rafZpLcZDGEaQFdSO7OkUnEMjWqK88K K2BJZFBCOVLljd7KCpy7pNJVVj2k8C6S/QggQJG18YkREwm98ionpepdjKeDkoqCpmMU HNxvZ2vM1wSMg01hwMWQzafW8zCc0ofQlC77olAfDR15OKNxnAPiAWEl3Qc1bdmtXz8f lKYg== X-Gm-Message-State: AOJu0YwAno+nl070hcthxFk5APXKC3dgTG+s0s6rE49KTfvUYgXm4BDj fboLWffx+/37rciUikgVtqJxYZyT4MaKV1WSF7fgNCYw3EitdOI98I8aasdjBv7pR8bZ1FB/uJW xUE1u X-Gm-Gg: ASbGncuUiO3yV/Hiq8gJC7kVWv3ReVhF36owFrz/OP4HJJK3tDodTmOzn2UXzTAlFwy 3LZVBP3Gb5ekRTQ6NT2HrkIWY7mmai+5z+qYVidiP1gvLY+19RmyddxJ142G40aVpa6RJROWHF6 gwyUn7URP1KjB6J083ggyvLUYHqwiKtLPWjViRG5QhSn4uTBsXaYdil9WebkDR0zzoapO0zX9u2 tOST5DkaEHURAk5l2TuyZQrkVbQYI70L4QFusqOxJ3hpffaLsGmVKBTO+h+b5Z0pKOxZVQTpnoR pQKZsjlLpuQOdTfS0i5ZLex9ddk+q5tvtMwx+2xL1gYzloiuhiEzTj8tKIwS1H2GxSAT X-Google-Smtp-Source: AGHT+IE3OSMiZZRlY6gmKtMCZsEvupCwB1AmoRa5qKe1TNF5E7o0xKmtDmwpO8KbKJwDrykbW3260g== X-Received: by 2002:a05:600c:1d27:b0:453:9317:8aa0 with SMTP id 5b1f17b1804b1-454b3195611mr30009195e9.32.1751646317276; Fri, 04 Jul 2025 09:25:17 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 015/119] target/arm: Fix 128-bit element ZIP, UZP, TRN Date: Fri, 4 Jul 2025 17:23:15 +0100 Message-ID: <20250704162501.249138-16-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::32b; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x32b.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751646595242116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson We missed the instructions UDEF when the vector size is too small. We missed marking the instructions non-streaming with SME. Cc: qemu-stable@nongnu.org Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-4-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/translate-sve.c | 43 ++++++++++++++++++++++++---------- 1 file changed, 30 insertions(+), 13 deletions(-) diff --git a/target/arm/tcg/translate-sve.c b/target/arm/tcg/translate-sve.c index f3cf028cb92..588a5b006b8 100644 --- a/target/arm/tcg/translate-sve.c +++ b/target/arm/tcg/translate-sve.c @@ -2352,6 +2352,23 @@ TRANS_FEAT(PUNPKHI, aa64_sve, do_perm_pred2, a, 1, g= en_helper_sve_punpk_p) *** SVE Permute - Interleaving Group */ =20 +static bool do_interleave_q(DisasContext *s, gen_helper_gvec_3 *fn, + arg_rrr_esz *a, int data) +{ + if (sve_access_check(s)) { + unsigned vsz =3D vec_full_reg_size(s); + if (vsz < 32) { + unallocated_encoding(s); + } else { + tcg_gen_gvec_3_ool(vec_full_reg_offset(s, a->rd), + vec_full_reg_offset(s, a->rn), + vec_full_reg_offset(s, a->rm), + vsz, vsz, data, fn); + } + } + return true; +} + static gen_helper_gvec_3 * const zip_fns[4] =3D { gen_helper_sve_zip_b, gen_helper_sve_zip_h, gen_helper_sve_zip_s, gen_helper_sve_zip_d, @@ -2361,11 +2378,11 @@ TRANS_FEAT(ZIP1_z, aa64_sve, gen_gvec_ool_arg_zzz, TRANS_FEAT(ZIP2_z, aa64_sve, gen_gvec_ool_arg_zzz, zip_fns[a->esz], a, vec_full_reg_size(s) / 2) =20 -TRANS_FEAT(ZIP1_q, aa64_sve_f64mm, gen_gvec_ool_arg_zzz, - gen_helper_sve2_zip_q, a, 0) -TRANS_FEAT(ZIP2_q, aa64_sve_f64mm, gen_gvec_ool_arg_zzz, - gen_helper_sve2_zip_q, a, - QEMU_ALIGN_DOWN(vec_full_reg_size(s), 32) / 2) +TRANS_FEAT_NONSTREAMING(ZIP1_q, aa64_sve_f64mm, do_interleave_q, + gen_helper_sve2_zip_q, a, 0) +TRANS_FEAT_NONSTREAMING(ZIP2_q, aa64_sve_f64mm, do_interleave_q, + gen_helper_sve2_zip_q, a, + QEMU_ALIGN_DOWN(vec_full_reg_size(s), 32) / 2) =20 static gen_helper_gvec_3 * const uzp_fns[4] =3D { gen_helper_sve_uzp_b, gen_helper_sve_uzp_h, @@ -2377,10 +2394,10 @@ TRANS_FEAT(UZP1_z, aa64_sve, gen_gvec_ool_arg_zzz, TRANS_FEAT(UZP2_z, aa64_sve, gen_gvec_ool_arg_zzz, uzp_fns[a->esz], a, 1 << a->esz) =20 -TRANS_FEAT(UZP1_q, aa64_sve_f64mm, gen_gvec_ool_arg_zzz, - gen_helper_sve2_uzp_q, a, 0) -TRANS_FEAT(UZP2_q, aa64_sve_f64mm, gen_gvec_ool_arg_zzz, - gen_helper_sve2_uzp_q, a, 16) +TRANS_FEAT_NONSTREAMING(UZP1_q, aa64_sve_f64mm, do_interleave_q, + gen_helper_sve2_uzp_q, a, 0) +TRANS_FEAT_NONSTREAMING(UZP2_q, aa64_sve_f64mm, do_interleave_q, + gen_helper_sve2_uzp_q, a, 16) =20 static gen_helper_gvec_3 * const trn_fns[4] =3D { gen_helper_sve_trn_b, gen_helper_sve_trn_h, @@ -2392,10 +2409,10 @@ TRANS_FEAT(TRN1_z, aa64_sve, gen_gvec_ool_arg_zzz, TRANS_FEAT(TRN2_z, aa64_sve, gen_gvec_ool_arg_zzz, trn_fns[a->esz], a, 1 << a->esz) =20 -TRANS_FEAT(TRN1_q, aa64_sve_f64mm, gen_gvec_ool_arg_zzz, - gen_helper_sve2_trn_q, a, 0) -TRANS_FEAT(TRN2_q, aa64_sve_f64mm, gen_gvec_ool_arg_zzz, - gen_helper_sve2_trn_q, a, 16) +TRANS_FEAT_NONSTREAMING(TRN1_q, aa64_sve_f64mm, do_interleave_q, + gen_helper_sve2_trn_q, a, 0) +TRANS_FEAT_NONSTREAMING(TRN2_q, aa64_sve_f64mm, do_interleave_q, + gen_helper_sve2_trn_q, a, 16) =20 /* *** SVE Permute Vector - Predicated Group --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646400; cv=none; d=zohomail.com; s=zohoarc; b=apGJN35qgoh3blLdhrO5rlxFtxe1O8C5xzZxXAru05Sc2xXoyZFvImAmp3DTHVxx0Yl/1Jgfz6qig+1450Os+GNvdQ3P8Auhn/OWDzrBxnyUDvPv1STdoN0BW7dQlZopdMnqBGw3YavQZdu+Famgzju4twkEu0Qo0jv+1HjyWsQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646400; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=dmtyuSjmao+bChYJa65R37Jk6mVzQjSFZFloZ8Y3fhI=; b=DReGh/4RaBFkr1w2qVUaBTMOMkcICd10FxXf4QtUHjlZAklEpJoPXiIxvqjP+Su51lW8dJJ3JctkrJixhcX6Kpcmw/ZDYdNRiWwIZfMk0d2oZCdPzP4ysYwghHhzvprMhJZoPWCJ+spbmbtXCK63gFW9G24OKsOmrrUJTmMwqvM= 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 1751646400273287.70761810815713; Fri, 4 Jul 2025 09:26:40 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjE3-0008KW-44; Fri, 04 Jul 2025 12:25:23 -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 1uXjE2-0008JR-0z for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:22 -0400 Received: from mail-wm1-x32b.google.com ([2a00:1450:4864:20::32b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjE0-00067d-3M for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:21 -0400 Received: by mail-wm1-x32b.google.com with SMTP id 5b1f17b1804b1-451d7b50815so8642245e9.2 for ; Fri, 04 Jul 2025 09:25:19 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.17 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646318; x=1752251118; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=dmtyuSjmao+bChYJa65R37Jk6mVzQjSFZFloZ8Y3fhI=; b=lq1Fu1gBu6LdC81CilHJdZVv7q1ISihYEFj08JsbUw3rwpLdyt9Z4EK1xYZcuF8psT gd5BjklVdZRby1mYuV2oeBVrWW+DyM89X/vQVDc0iYn5A226AaRzILpyEYGoA0CtcUNK My6jzgUEp2uwdpEXoPjO83dwAGsBkt01PLITCzIDyOjOBgztbRu5jcGJ/nZBRkB2q6tQ 8yVRzE1ecDc09B+6D7dLiPzUBRTdgoKAve/AeFwQpucX1ILh6mXQGVSFLxDNu6pRKmQW WY3ES5N26u++FU5QSaUSEEOXBDqS61TgRmsdzj4K8/yjueRu0iB4Yfo2pAbertTRYgHQ 7Cnw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646318; x=1752251118; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=dmtyuSjmao+bChYJa65R37Jk6mVzQjSFZFloZ8Y3fhI=; b=TS48FzU01+P2hlZiQVdEsMFxNsdc8nj0t2wzQAnbL4SEAGOlZcz0CclfXUou5l5wZo /Rp/hmNyDJBbSDd6xZCnl87qelyIFuTHTo9pcz6eRgXkP+P1LmJzYz8tG9N30lPjSXE3 YxblGhoDyKatD5UBKm5rTFEmvGWf6PnKIjzEtcnyYWTE+pTkBsH9ds5WBOG+QVE2UsMM NwhSAOB78oe4V8HniNyovpRoSk9GyPXO9I8ilBByY4JlSTfUUJ+wjEiiHAXOTqVGvCYS lYTHlD1HTBdbNfYdCinRREtGHRS0prUUzadSOq9s8X6zDtgHGJK/JWh8hSlBg9R+r1QS MrKA== X-Gm-Message-State: AOJu0YzmSDKDRUfWsnEm8hpqdUvxd21ApBV7PRMr1hH0IVrRzSXjoosk e1eW0myMoL0wrE2MJj9njzcr04vNfqYTQXUAnBt9Eeu5BPltC8dqnc/F5IZAMxW/JxDVXiAPcHj hJFtj X-Gm-Gg: ASbGncuQXYtvNSY2oqMow2qXAoPdakjrUwvTUVsuQeO37SFIklFYAuUGWcFR9nxNY6l Ocx/HdRSBGNlPpUWKbZ5bm+KYO+vYM7B701UXLb4hk44FYKDcE114653udeu1UfI7YhPdJ1GPcO R/1Ay6SEkU2f0HuJNUlwCM9Hvt4PUcSPqjqzcVZkSyebv5p4GsfWQxSD93H+hs5g9hZl2ER8FYx Jp4N9EPK9/9ezqCJaYWNTHgDma0N+Kmtp918hmhOw1iyPutds/6pwNFNeK3RxawPpG7v7MG8oJD XoyPgsX7xCm4a9ko2xoYRilcNdrk5xeKG0qFiFN6YenKNCMTax5qcVpWqc1MDxrknil0 X-Google-Smtp-Source: AGHT+IHCzrHwfvUf4mfef0B9e6zT7k7Xtuk9GktDTBGGQOoBpojwdw2ZvCcVDwJ9Jfky8LtG4f8ftA== X-Received: by 2002:a05:6000:18a8:b0:3a5:3b56:974e with SMTP id ffacd0b85a97d-3b4964bb5f7mr2799216f8f.6.1751646318166; Fri, 04 Jul 2025 09:25:18 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 016/119] target/arm: Replace @rda_rn_rm_e0 in sve.decode Date: Fri, 4 Jul 2025 17:23:16 +0100 Message-ID: <20250704162501.249138-17-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::32b; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x32b.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751646400794116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Replace @rda_rn_rm_e0 with @rda_rn_rm_ex, and require users to supply an explicit esz. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-5-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/sve.decode | 48 +++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/target/arm/tcg/sve.decode b/target/arm/tcg/sve.decode index 04b6fcc0cfd..3a99eb72998 100644 --- a/target/arm/tcg/sve.decode +++ b/target/arm/tcg/sve.decode @@ -131,11 +131,11 @@ @rda_rn_rm ........ esz:2 . rm:5 ... ... rn:5 rd:5 \ &rrrr_esz ra=3D%reg_movprfx =20 -# Four operand with unused vector element size -@rda_rn_rm_e0 ........ ... rm:5 ... ... rn:5 rd:5 \ - &rrrr_esz esz=3D0 ra=3D%reg_movprfx -@rdn_ra_rm_e0 ........ ... rm:5 ... ... ra:5 rd:5 \ - &rrrr_esz esz=3D0 rn=3D%reg_movprfx +# Four operand with explicit vector element size +@rda_rn_rm_ex ........ ... rm:5 ... ... rn:5 rd:5 \ + &rrrr_esz ra=3D%reg_movprfx +@rdn_ra_rm_ex ........ ... rm:5 ... ... ra:5 rd:5 \ + &rrrr_esz rn=3D%reg_movprfx =20 # Three operand with "memory" size, aka immediate left shift @rd_rn_msz_rm ........ ... rm:5 .... imm:2 rn:5 rd:5 &rrri @@ -428,12 +428,12 @@ XAR 00000100 .. 1 ..... 001 101 rm:5 rd:= 5 &rrri_esz \ rn=3D%reg_movprfx esz=3D%tszimm16_esz imm=3D%tszimm16_shr =20 # SVE2 bitwise ternary operations -EOR3 00000100 00 1 ..... 001 110 ..... ..... @rdn_ra_rm= _e0 -BSL 00000100 00 1 ..... 001 111 ..... ..... @rdn_ra_rm= _e0 -BCAX 00000100 01 1 ..... 001 110 ..... ..... @rdn_ra_rm= _e0 -BSL1N 00000100 01 1 ..... 001 111 ..... ..... @rdn_ra_rm= _e0 -BSL2N 00000100 10 1 ..... 001 111 ..... ..... @rdn_ra_rm= _e0 -NBSL 00000100 11 1 ..... 001 111 ..... ..... @rdn_ra_rm= _e0 +EOR3 00000100 00 1 ..... 001 110 ..... ..... @rdn_ra_rm_ex = esz=3D0 +BSL 00000100 00 1 ..... 001 111 ..... ..... @rdn_ra_rm_ex = esz=3D0 +BCAX 00000100 01 1 ..... 001 110 ..... ..... @rdn_ra_rm_ex = esz=3D0 +BSL1N 00000100 01 1 ..... 001 111 ..... ..... @rdn_ra_rm_ex = esz=3D0 +BSL2N 00000100 10 1 ..... 001 111 ..... ..... @rdn_ra_rm_ex = esz=3D0 +NBSL 00000100 11 1 ..... 001 111 ..... ..... @rdn_ra_rm_ex = esz=3D0 =20 ### SVE Index Generation Group =20 @@ -1450,9 +1450,9 @@ EORTB 01000101 .. 0 ..... 10010 1 ..... ...= .. @rd_rn_rm =20 ## SVE integer matrix multiply accumulate =20 -SMMLA 01000101 00 0 ..... 10011 0 ..... ..... @rda_rn_rm_e0 -USMMLA 01000101 10 0 ..... 10011 0 ..... ..... @rda_rn_rm_e0 -UMMLA 01000101 11 0 ..... 10011 0 ..... ..... @rda_rn_rm_e0 +SMMLA 01000101 00 0 ..... 10011 0 ..... ..... @rda_rn_rm_ex esz= =3D2 +USMMLA 01000101 10 0 ..... 10011 0 ..... ..... @rda_rn_rm_ex esz= =3D2 +UMMLA 01000101 11 0 ..... 10011 0 ..... ..... @rda_rn_rm_ex esz= =3D2 =20 ## SVE2 bitwise permute =20 @@ -1602,9 +1602,9 @@ SQRDCMLAH_zzzz 01000100 esz:2 0 rm:5 0011 rot:2 rn:5= rd:5 ra=3D%reg_movprfx USDOT_zzzz 01000100 .. 0 ..... 011 110 ..... ..... @rda_rn_rm =20 ### SVE2 floating point matrix multiply accumulate -BFMMLA 01100100 01 1 ..... 111 001 ..... ..... @rda_rn_rm_e0 -FMMLA_s 01100100 10 1 ..... 111 001 ..... ..... @rda_rn_rm_e0 -FMMLA_d 01100100 11 1 ..... 111 001 ..... ..... @rda_rn_rm_e0 +BFMMLA 01100100 01 1 ..... 111 001 ..... ..... @rda_rn_rm_ex esz= =3D1 +FMMLA_s 01100100 10 1 ..... 111 001 ..... ..... @rda_rn_rm_ex esz= =3D2 +FMMLA_d 01100100 11 1 ..... 111 001 ..... ..... @rda_rn_rm_ex esz= =3D3 =20 ### SVE2 Memory Gather Load Group =20 @@ -1654,16 +1654,16 @@ FCVTLT_sd 01100100 11 0010 11 101 ... ..... .= .... @rd_pg_rn_e0 FLOGB 01100101 00 011 esz:2 0101 pg:3 rn:5 rd:5 &rpr_esz =20 ### SVE2 floating-point multiply-add long (vectors) -FMLALB_zzzw 01100100 10 1 ..... 10 0 00 0 ..... ..... @rda_rn_rm_e0 -FMLALT_zzzw 01100100 10 1 ..... 10 0 00 1 ..... ..... @rda_rn_rm_e0 -FMLSLB_zzzw 01100100 10 1 ..... 10 1 00 0 ..... ..... @rda_rn_rm_e0 -FMLSLT_zzzw 01100100 10 1 ..... 10 1 00 1 ..... ..... @rda_rn_rm_e0 +FMLALB_zzzw 01100100 10 1 ..... 10 0 00 0 ..... ..... @rda_rn_rm_ex e= sz=3D2 +FMLALT_zzzw 01100100 10 1 ..... 10 0 00 1 ..... ..... @rda_rn_rm_ex e= sz=3D2 +FMLSLB_zzzw 01100100 10 1 ..... 10 1 00 0 ..... ..... @rda_rn_rm_ex e= sz=3D2 +FMLSLT_zzzw 01100100 10 1 ..... 10 1 00 1 ..... ..... @rda_rn_rm_ex e= sz=3D2 =20 -BFMLALB_zzzw 01100100 11 1 ..... 10 0 00 0 ..... ..... @rda_rn_rm_e0 -BFMLALT_zzzw 01100100 11 1 ..... 10 0 00 1 ..... ..... @rda_rn_rm_e0 +BFMLALB_zzzw 01100100 11 1 ..... 10 0 00 0 ..... ..... @rda_rn_rm_ex e= sz=3D2 +BFMLALT_zzzw 01100100 11 1 ..... 10 0 00 1 ..... ..... @rda_rn_rm_ex e= sz=3D2 =20 ### SVE2 floating-point bfloat16 dot-product -BFDOT_zzzz 01100100 01 1 ..... 10 0 00 0 ..... ..... @rda_rn_rm_e0 +BFDOT_zzzz 01100100 01 1 ..... 10 0 00 0 ..... ..... @rda_rn_rm_ex e= sz=3D2 =20 ### SVE2 floating-point multiply-add long (indexed) FMLALB_zzxw 01100100 10 1 ..... 0100.0 ..... ..... @rrxr_3a esz=3D2 --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646530; cv=none; d=zohomail.com; s=zohoarc; b=ILWgvvGqoMAUZeL9Ktb4wHZm8xUh9Ihm+A9CMXBOpfyQtN+yDoDzqElgMgWXvZBH8X3M4MK1wJNVtI3Zf0sDX+mO0Aer1xYzCZCI84JGA21OLVuqNu5vRTvINOCKMQRv9zAgMMvAtBS/ulcT7uwrBV6ZdJDpytF/7o+D3U3s19s= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646530; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=7c4SCBPBgFQ7HiqrH6euDpAw542dy85MtrPOPy42xtg=; b=GkhOL8t9/cjZV/Djviu3rtuLt1xMrb27LVbLhC9jOT8w2YjtWzNlzt4JMLKUTgZN4jFD+eYimdI0YeJYLepxWXvBx7hBQdqD6ROwrGridc6Ym+YlQwW8JBP/BqCHT9loZBcjwVNF2+/mQTnbyjpQmWNeueN+nWxStfYwbrqUPrM= 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 1751646530513171.71127708375343; Fri, 4 Jul 2025 09:28:50 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjE8-0008Oj-5e; Fri, 04 Jul 2025 12:25:28 -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 1uXjE4-0008Lw-IT for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:24 -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 1uXjE1-00067n-SL for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:24 -0400 Received: by mail-wm1-x32c.google.com with SMTP id 5b1f17b1804b1-453749af004so5390745e9.1 for ; Fri, 04 Jul 2025 09:25:21 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.18 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646319; x=1752251119; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=7c4SCBPBgFQ7HiqrH6euDpAw542dy85MtrPOPy42xtg=; b=N/U8DOHPVOKGHAuuPQrtvMzOhpwaaWdQ1V51N4kH4PERHjwZvoYjjloMi4qAVZzDqW clZYZ07aCZa8jeB44uZS8a2y2BNYau44TAtQV3nBPkKLPXzQwzuKBDBKLXFD2KxxOaWW HUHM/I9xPyRYHykHAiYwc/4pVISZDvq4swaHnRPz6HMVmhwL0IE+XxsffuFMYS59/ISK GvIaBrlEV5Hkr7jfh7wMhaA2plOlxnmjxqkXMZYdmwVyGKnfchgE956p/uskj3Z7r1Jj eQkOvSaUuxviypEyXafpAyhPQ5HC1Tg7ATT7k/WhhfZW3OwUakZRpmCfgs8Onq8WCQuv 7y/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646319; x=1752251119; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=7c4SCBPBgFQ7HiqrH6euDpAw542dy85MtrPOPy42xtg=; b=aJ2vWMGCJLPmSzhUEL7bf2ZyAQABiOEasOItFrBHEClmB+bkrDjMfMn8xrs67U1H+Y k9dsjJmDxgUZu3t3vEGFgBUd17og/8l9f4zDd4ckEO9JZTbz9Q66X5skbq2WsNyM1yFf KXBJYDBBsp3/Fl9CsMEN4wEBvWHX1p9M11OeEC7o61wXqcUIAumk87U+DCtWts1FXGXn PQmteQD8u3rMgvMB8GfCwdt264H6WpHgv797FFq7xGlVdCscHK3za80y2taoF7hYppYo XMa6nFVwkAgXLQVlmmMFVhU1mopMUaimotsFTS0crgDHCfcSFzvA+2v1O2ipnz02NacL rNbw== X-Gm-Message-State: AOJu0YxFVpuMj3dIztvgVhjgunop5iaQ4+i8Z2DLmldlu7W7gRoF5ZWT WKP5bTrCEc1SPjx0Hl3aefL8zGaQw9znYBaaRPvQNBRFaVqENy0PrBxs2K8npmLzED7gKiTeNLR 7VJr8 X-Gm-Gg: ASbGncvFE4nsxNukGXm2AGJn55aNqqgE+SNDXcoysX2ldkKWyd/+haAaJb4jqS9WBw4 fjxuueiqXLkl3ZEtwugaghu7Eig7Ulc4UKeV82gxvDCV24d3Ks9j4MUCegKfR1TnxypnhO4GJPS 24l7p3MSEGvXbOWwM2IjvNmoVNleDY3XmKDqWUDpQZc5N7c0sf1izRzcVMcuE0HQogvFEvMA34F mWNLUczSzo6IJ9Baa4dc7Z31G3FMDqiPahAgtHjlyhrFSurJTSfdge/9ZnQ2nTluRAt292vIVg7 eP1b8mcm1CMGXphURDnOvUT14G9XyilYj87ry7yaVrIE/u/6/gWxFxfcniBImSmeyspO X-Google-Smtp-Source: AGHT+IGsFdZfAoRABm8aMH82NTS11QoInSsPtRui9zZHYJADBAJSGd6Kyxw/0oWzxjKfL4xycjpn1g== X-Received: by 2002:a05:600c:35c2:b0:442:e9eb:cba2 with SMTP id 5b1f17b1804b1-454b9cf5297mr2687485e9.0.1751646319071; Fri, 04 Jul 2025 09:25:19 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 017/119] target/arm: Fix FMMLA (64-bit element) for 128-bit VL Date: Fri, 4 Jul 2025 17:23:17 +0100 Message-ID: <20250704162501.249138-18-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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=peter.maydell@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 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: 1751646532376116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-6-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/translate-sve.c | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/target/arm/tcg/translate-sve.c b/target/arm/tcg/translate-sve.c index 588a5b006b8..a0de5b488d6 100644 --- a/target/arm/tcg/translate-sve.c +++ b/target/arm/tcg/translate-sve.c @@ -7025,17 +7025,26 @@ DO_ZPZZ_FP(FMINNMP, aa64_sve2, sve2_fminnmp_zpzz) DO_ZPZZ_FP(FMAXP, aa64_sve2, sve2_fmaxp_zpzz) DO_ZPZZ_FP(FMINP, aa64_sve2, sve2_fminp_zpzz) =20 +static bool do_fmmla(DisasContext *s, arg_rrrr_esz *a, + gen_helper_gvec_4_ptr *fn) +{ + if (sve_access_check(s)) { + if (vec_full_reg_size(s) < 4 * memop_size(a->esz)) { + unallocated_encoding(s); + } else { + gen_gvec_fpst_zzzz(s, fn, a->rd, a->rn, a->rm, a->ra, 0, FPST_= A64); + } + } + return true; +} + +TRANS_FEAT_NONSTREAMING(FMMLA_s, aa64_sve_f32mm, do_fmmla, a, gen_helper_f= mmla_s) +TRANS_FEAT_NONSTREAMING(FMMLA_d, aa64_sve_f64mm, do_fmmla, a, gen_helper_f= mmla_d) + /* * SVE Integer Multiply-Add (unpredicated) */ =20 -TRANS_FEAT_NONSTREAMING(FMMLA_s, aa64_sve_f32mm, gen_gvec_fpst_zzzz, - gen_helper_fmmla_s, a->rd, a->rn, a->rm, a->ra, - 0, FPST_A64) -TRANS_FEAT_NONSTREAMING(FMMLA_d, aa64_sve_f64mm, gen_gvec_fpst_zzzz, - gen_helper_fmmla_d, a->rd, a->rn, a->rm, a->ra, - 0, FPST_A64) - static gen_helper_gvec_4 * const sqdmlal_zzzw_fns[] =3D { NULL, gen_helper_sve2_sqdmlal_zzzw_h, gen_helper_sve2_sqdmlal_zzzw_s, gen_helper_sve2_sqdmlal_zzzw_d, --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647171; cv=none; d=zohomail.com; s=zohoarc; b=e79f/3/9xueTn2GpHQ+TkeHGdpFTtMCLGVDFOWLEdnEt2EuEvMvLnwoHfKX57RhB29WWbol/4BLACG7BaVC7wMpi4n8GbjcM0rC5zmi5AtFJwnMs7VKollyFJEmYNCfWtaKA7w1gMJiMXneTPQjpjAJ00Tw4xgRFlInreWrJXoY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647171; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=VdKchwbJEZ+nSckIGEWeS64CtMCPrL6GOAZLbL9tqic=; b=F96aTnOxA6XrKZcr4tOw3PYN+Rm5wx6Y4IstMfWF6P2bXQFD/TMCer4tcLpr2DvShA/cUMJKgeoQEs+rWv/elo5gUalR4u8iguUu8s5R5pTUzVkKQNitdtZSb8rMMyP64w1HCtv4B2wzxt8rcF6WvlOCnnYYhPnzPjHLjxwDF3k= 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 1751647171393636.702021933563; Fri, 4 Jul 2025 09:39:31 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjE7-0008Oi-SF; Fri, 04 Jul 2025 12:25:27 -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 1uXjE3-0008KY-4l for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:23 -0400 Received: from mail-wm1-x329.google.com ([2a00:1450:4864:20::329]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjE1-000681-GT for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:22 -0400 Received: by mail-wm1-x329.google.com with SMTP id 5b1f17b1804b1-453398e90e9so7306345e9.1 for ; Fri, 04 Jul 2025 09:25:21 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.19 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646320; x=1752251120; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=VdKchwbJEZ+nSckIGEWeS64CtMCPrL6GOAZLbL9tqic=; b=uP8BdVO5o79VUDTRZSZDq57gHJ0LZv2oI4FRow/H0P++cWro1pN5moD+HRt5/kGmYS wqTyvQzoVA9gEaD6bbXZWTt5GFFSwtgUm+wolU/aNpWnYqBx8nx53Jdwk+sXbatuaNWa 6/eXV9I0+cbwOmZIS1LILqKebR1RZZqiYO37wXBPMyu+A+Vr6AHWCA2TS1icZT2JrdZf R46/W8tSQRhj6uHAJlxp/CSsyAaL/Za6J9CxWXiKgsMI5UAYINqj2xe3cLovqyXLM8im LkSCShr1RYjB6/TSMox9178pRMyCrHUaN58JVFHLlM4nTvEcf22k7QcTJpTJ/FASRlp1 RpKw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646320; x=1752251120; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=VdKchwbJEZ+nSckIGEWeS64CtMCPrL6GOAZLbL9tqic=; b=j4g9yCyAToxzyhBtgzHgRU4px6w4CZdeDhLb5al7NF5brVmR3YnaCj/E0K78Xi6jkh tSgGFRRSylvkjF83HMotQvwhXqNoN3tEUEtQbZlHdtINR3QZUmZMCWuglPHHftF/pViM FldqtVOKvkgnpzAbFnMdW3h8ZhQ/DOptIZ5k0yI0A9VWajTa9d/8ow0naDKLzMhNwqbS kFlnoniFBH/UroByb6zgQ3Zqdvena2RivwBcQU5coHIgpT6/QGoXnE8Hbqd3OThE4DzJ t7E6/FXQmiTy6hKWe0HKMMm6B7bYaUGNkb20+pTQ3dP12MVgTmVI1CoOzvCE3PxU+LM8 41cg== X-Gm-Message-State: AOJu0YxA2JLff87yTAUZxl+8QGSQ7q0V7UGbYCDWR9ltiVBs3TFRgTYM FXPcxilsNXMuh1qzIipeFFgAItsoFWlsrF5EVThBxcmRyLSObTEiXcL8zJKjqs5CfA3XCWhWpck a5kcf X-Gm-Gg: ASbGncszow10Os9aaTSuXWe+FFqTGYKce8LSDl0n3/X7pcYO8Lms6WPsqOOODaMLZoU DhKnttKnKtQL9AerzffGrgRzfJNkTwWu1p3caPee04LCEKhmamRxGE/KnvW3MHebio6tH7g/KfV vWSdFvSeIGT7ZfEmFlsFAPNeOVGq+dEPG6HbscPbCexbWLVfEZYa1aNhmHsEv1pvdIvHIBoNr0D T/Qo5uXBLTHOkPCYcNiFY7OzeP9iqH6vCGx71Capzu25glRN2HbEId6yzrVtPMHpfZTUnCScBny SaXU32JTE++oZDtStT1SpRnCfCJihrLHNtNgWmEG+mcTlCXtS6R93IuVnSTy9sUXbSMc X-Google-Smtp-Source: AGHT+IH4BqLtEhBTNP91QcXX/00HgnAisu9VG+gxVIf93epbZke4Ahz++3FEE+yxVfnHxCedVbq/EA== X-Received: by 2002:a05:600c:1c03:b0:43c:f513:9591 with SMTP id 5b1f17b1804b1-454b3124faemr34179895e9.14.1751646319926; Fri, 04 Jul 2025 09:25:19 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 018/119] target/arm: Disable FEAT_F64MM if maximum SVE vector size too small Date: Fri, 4 Jul 2025 17:23:18 +0100 Message-ID: <20250704162501.249138-19-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::329; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x329.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751647172018116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson All F64MM instructions operate on a 256-bit vector. If only 128-bit vectors is supported by the cpu, then the cpu cannot enable F64MM. Suggested-by: Peter Maydell Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-7-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/cpu64.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/target/arm/cpu64.c b/target/arm/cpu64.c index 1f3406708bd..77e7c4a6a52 100644 --- a/target/arm/cpu64.c +++ b/target/arm/cpu64.c @@ -259,6 +259,13 @@ void arm_cpu_sve_finalize(ARMCPU *cpu, Error **errp) /* From now on sve_max_vq is the actual maximum supported length. */ cpu->sve_max_vq =3D max_vq; cpu->sve_vq.map =3D vq_map; + + /* FEAT_F64MM requires the existence of a 256-bit vector size. */ + if (max_vq < 2) { + uint64_t t =3D GET_IDREG(&cpu->isar, ID_AA64ZFR0); + t =3D FIELD_DP64(t, ID_AA64ZFR0, F64MM, 0); + SET_IDREG(&cpu->isar, ID_AA64ZFR0, t); + } } =20 /* --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647178; cv=none; d=zohomail.com; s=zohoarc; b=BG08EDXxEsT6FRqbnAS5OzSfKIER5dyyPEnQ662UjwzpmFvXIldg7a8RdCt8XisS44fGj0AWuVBE1P9Js61Ww198rSRiVrZ2rrO51B8M9sagBiFQUIsMOFpF9FSM4ljcbkpAW7b2fmmO9emy+v77NVJcn8uggEy19T3cnkRGUhk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647178; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=zNF5S8F9V+F3dl1M/qhV6oCSu+10+dz96rceyYRfQ0M=; b=A5MEpc/A/6GRN9IWN8Cjc3Jmz7zzeLI9fb3nqMR299WM8ZezUjps4fCLABHpuvmfvZqBx3CtYnEKm/wRkuKr0z4HLmX6wNcRdIN1i1jxFD/UL8m4XDSBDz36HVl2E7j9feUfnaGW4OUYHBm1wOGeK4A3Uu1vZ+9qyKZrQUdbasM= 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 17516471788410.5380884660837637; Fri, 4 Jul 2025 09:39:38 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjE5-0008N8-V2; Fri, 04 Jul 2025 12:25:25 -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 1uXjE4-0008Lx-Ij for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:24 -0400 Received: from mail-wm1-x32d.google.com ([2a00:1450:4864:20::32d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjE2-00068K-D5 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:24 -0400 Received: by mail-wm1-x32d.google.com with SMTP id 5b1f17b1804b1-454b1d0a115so3624395e9.2 for ; Fri, 04 Jul 2025 09:25:21 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.20 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646321; x=1752251121; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=zNF5S8F9V+F3dl1M/qhV6oCSu+10+dz96rceyYRfQ0M=; b=DcDcWDp4oFHs6WI3TBVjaq/VEJya3IWDToclHBfNCnYyWwvmfnQv3MQvba2QBIic2o rHJRI7fEqmXW1p2f4+XRiJcan7jpusbuQ1PNb8OWTVqpRpRtIwj5A2Z/0czwwDqFW6TG u7+/R7pEHEQ1dGbjPaQxZ238zZFB/PyXKYgM2NURUqYq8o8umAK+SLu7yLzXP2Y4Kk5p c8kMoL5Qu29LTkBSud5RdRCnT4Mk0gc2pNToYUuF1UxfKrkndF4QXOv7+CUtC6LWVJVG gf3PRaWmuuq2qLn9mM2ePoa4r3jAmdVoIEaB1gNhD3N+6W8Xu/dk4sp3wkACKGcr1LAO wQkA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646321; x=1752251121; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=zNF5S8F9V+F3dl1M/qhV6oCSu+10+dz96rceyYRfQ0M=; b=csHYRJi0SSYdZGAuXrKKLlF/rWAqmg2OBfXi6rBtWrg53rKL78/e7SYY/pa52jbr7S 3NTCC3XcPUG3W4MJk7vW7+Uaiw+6QPGvrfLew7BhmakD1MmYE5Ml0495ZQRQbPyVmfb9 RwE6ktS89/fsaU9HE6m9Z9WCsRrGI4OUNpIRiK9DWnqHasdEdWoQNCfWgcThDOPKKChG LTukfg3pBC2T9QLbPnzl2TjUduxcmICl/vKnKKk9DFZ/KgO3z0g0YgHDcS/MfqGt0tXV nBc2pYKFYhVR6hxo+0gvJ6CJL56gSie2f+/yM5wn7EwedVZyWKuxc61VDTSVaOfDe92V xm7A== X-Gm-Message-State: AOJu0Yzn9qnQh8n8qEtx30BDLd34zUshxZALvFy8rDspa9u2dUBhP4AI D7wGP1++kkSEVirekc0olVZabpuBQOnUe+igHYGUzUI7em4FnyBogp1FrFDQT8zEvp5h9yrtMXn REq9w X-Gm-Gg: ASbGnctyl52rAZA0PIeV34/KPs4JjSjYcArv8P8i3UGi2+ibK1/SMOJz4eTWlxVSyJv cHkMGnlwywPTJ1GDnoCtybozXaxDQRwAKvy58mGit6s+SOtZmlJWiMLZK2sAG980GtuNsPoz37E aQNKZp+x7s6RTLzFBzRd5kW+GXq+e88aBhX0Bx4QqLY0nLeIBgdu3pEtyOEYqCG9+iSfD+A5bQw Y7svYrEEvt+X5U1P/zvYeEUsOpDw1JFp3b9lARWISC78H+VPoq8dcYm025kyFnJF5tS46KLQMAO l6TFQHn2PXtz7zwC1kSh4XCoxP7yblWz3FrEvaRPF12c/2+R38VEedL09EmQhuGKSca9 X-Google-Smtp-Source: AGHT+IEMnAvDJMfQcsSpz/fRLuhIcqZfgZImpqe9PqSglrp/aqT1A0fJMU5ESsT68VCph2nTGiPIgQ== X-Received: by 2002:a05:600c:64c6:b0:453:66f:b96e with SMTP id 5b1f17b1804b1-454b4e74691mr26878955e9.11.1751646320763; Fri, 04 Jul 2025 09:25:20 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 019/119] target/arm: Fix PSEL size operands to tcg_gen_gvec_ands Date: Fri, 4 Jul 2025 17:23:19 +0100 Message-ID: <20250704162501.249138-20-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::32d; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x32d.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751647181068116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Gvec only operates on size 8 and multiples of 16. Predicates may be any multiple of 2. Round up the size using the appropriate function. Cc: qemu-stable@nongnu.org Fixes: 598ab0b24c0 ("target/arm: Implement PSEL") Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-8-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/translate-sve.c | 1 + 1 file changed, 1 insertion(+) diff --git a/target/arm/tcg/translate-sve.c b/target/arm/tcg/translate-sve.c index a0de5b488d6..8403034a0e2 100644 --- a/target/arm/tcg/translate-sve.c +++ b/target/arm/tcg/translate-sve.c @@ -7291,6 +7291,7 @@ static bool trans_PSEL(DisasContext *s, arg_psel *a) tcg_gen_neg_i64(tmp, tmp); =20 /* Apply to either copy the source, or write zeros. */ + pl =3D size_for_gvec(pl); tcg_gen_gvec_ands(MO_64, pred_full_reg_offset(s, a->pd), pred_full_reg_offset(s, a->pn), tmp, pl, pl); return true; --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646518; cv=none; d=zohomail.com; s=zohoarc; b=ZEzqhfO9qd84dm1SUpuDevFDUwzAiOVtszgpdpHHsj1Dhp7/VLP32rg+XiB0O2KGTXtJ4dnEwz2A8yMU775x1eQFLvqVdKp0BSvtES1eTNKF5WpkNCwY65bDwenI47j6visVEQrxwy4XmTFy0mqyuumN8Tq/WD6SDwzojdzakeA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646518; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=ZzBhsK295U+QrtJeMulwQMRMjYmffakd1q/LVwjhdAQ=; b=Pp26cicHNk3e7Q2TpgjgteRPhZgaEo6rPuiVNs0x9e0EDwNseSWItWHQgtQXD9Mgjr/W1pAsXHH/l2LFALPh/XpgWORA9xDoPcvwYw4DTwVV/ELmeCRnw1QLm2N2RB+1sWNMGa+zGg3H5gA1Zp6Y//cu2F/3YxBmdD8NzbZBDcg= 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 1751646518965738.7228515780445; Fri, 4 Jul 2025 09:28:38 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjE8-0008Ow-It; Fri, 04 Jul 2025 12:25:28 -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 1uXjE4-0008MA-TT for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:24 -0400 Received: from mail-wm1-x32d.google.com ([2a00:1450:4864:20::32d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjE3-00068X-2p for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:24 -0400 Received: by mail-wm1-x32d.google.com with SMTP id 5b1f17b1804b1-4537edf2c3cso11808805e9.3 for ; Fri, 04 Jul 2025 09:25:22 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.20 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646321; x=1752251121; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=ZzBhsK295U+QrtJeMulwQMRMjYmffakd1q/LVwjhdAQ=; b=h2WMMofP5NjQYQHtGjeprZVljZ/zlbWWOmiR9J0q11OOcHC4c6Knd7XoRFsre6eAUJ 9rD/NBG52OyeiSz+LW/2+vQTSEXwDEdLnxfjzhlbQyBSioqQQFDYJN0OqcKKeDMYDQuj MG9tafh0nUO6dq/+wJ8ag8xPqD+7fY64it8Z/cMgaUfPpyZRaJ5VXqxtgcadg1wICJ4v jIzPYI3dTtmp4V1Fc0iOk+O1D2WnutElBjTMPPnoCBFeqLIFE8/IyHu4YTTBeybpBnjV XM9ef7iAw7gFW2N9XoYB0rmBxuK/vW1Fs9T7jioAJIUxkSU4AQcKe+yOdPjZty2Jas9a qb8w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646321; x=1752251121; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ZzBhsK295U+QrtJeMulwQMRMjYmffakd1q/LVwjhdAQ=; b=OEDk5ofJs6PHzIcNDND+rPGe+SEAbtG6jOsKwbjd0JGQBfk++XcUz1V8OfOP9DJ2gG L72G1gR0fKnLFKqfXUX0jKXfFszTAei5kEb9HyFu0ALn+HxLJZOqON52ueQBYyW7O0qN z3pfmj27o7SNolE9np2GIAaGaDUY3a9r00SRti/z7H0OQoeK5ZF41SoLLjGX6RF0OLJF BAfJCVnrc6gE0O4P3U8akwmubuaHBAuQ0WF7/HPkp7rJ+tGmPgKQEszB6MUpJensmn1P 1VU6izCFPm0Qu76KwYDpsYBNaIVCGrObnKOj0r4AyWP0oaHHARcLOl+3bWKW6blcCP04 GI8w== X-Gm-Message-State: AOJu0Yyfu+j6CLdKxdffgXQrusdfFqjQ404KPA+xA6OKX3t5dYNtDkoi fLl0hLY4Pw/wx+EgV/mgQyK5x3J6QmnISSwwy5SmQ8hrVvMsT2QCCGk/hI4pcgybGhso9+wGlMf mU/qs X-Gm-Gg: ASbGncvKdUdzU3WpCTbQjIFbUiCUfJ2NDQV2KOqetx3j08VVldeuedi0gt2ivo0bimg ypUgXpqnyVyQ1LOJ1fgZJy2EdrdkxdfkscNflccxtuFs5gjuYcAhuk/F3G4uWIcBp6AEEBX/eaG KjOdMjjlCTZzocWmkt0ta2jMdRRmt2hIkBMAWrfylnKZ6O+kCiKdaoNp7+Y4J52ZgPPeXJCvJ0F R54/Ey2M7mrZuZidliMoQ03sguJ17ghUsgHG8mE26lSM2RVfXJN2A47WsO3bli2T+pzl9EOFPjM 3RHFCvLfCRazH0P8vMztJkSR3mQTNMu/jwLQAYViAJ2KR/EOeQs8Dx+KqQWqts/T9sn5 X-Google-Smtp-Source: AGHT+IH19NFgdKVeWxiKF3q0+XaBnOQJ/99B0bkV6A+HVtTmeNSQZiKQeT1JK4HJok2PFFrxut498g== X-Received: by 2002:a05:600c:3b10:b0:441:a715:664a with SMTP id 5b1f17b1804b1-454b91597d9mr9365025e9.20.1751646321561; Fri, 04 Jul 2025 09:25:21 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 020/119] target/arm: Fix f16_dotadd vs nan selection Date: Fri, 4 Jul 2025 17:23:20 +0100 Message-ID: <20250704162501.249138-21-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::32d; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x32d.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751646520355116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Implement FPProcessNaNs4 within f16_dotadd, rather than simply letting NaNs propagate through the function. Cc: qemu-stable@nongnu.org Fixes: 3916841ac75 ("target/arm: Implement FMOPA, FMOPS (widening)") Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-9-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/sme_helper.c | 62 +++++++++++++++++++++++++++---------- 1 file changed, 46 insertions(+), 16 deletions(-) diff --git a/target/arm/tcg/sme_helper.c b/target/arm/tcg/sme_helper.c index de0c6e54d4b..8f33387e4bd 100644 --- a/target/arm/tcg/sme_helper.c +++ b/target/arm/tcg/sme_helper.c @@ -1005,25 +1005,55 @@ static float32 f16_dotadd(float32 sum, uint32_t e1,= uint32_t e2, * - we have pre-set-up copy of s_std which is set to round-to-odd, * for the multiply (see below) */ - float64 e1r =3D float16_to_float64(e1 & 0xffff, true, s_f16); - float64 e1c =3D float16_to_float64(e1 >> 16, true, s_f16); - float64 e2r =3D float16_to_float64(e2 & 0xffff, true, s_f16); - float64 e2c =3D float16_to_float64(e2 >> 16, true, s_f16); - float64 t64; + float16 h1r =3D e1 & 0xffff; + float16 h1c =3D e1 >> 16; + float16 h2r =3D e2 & 0xffff; + float16 h2c =3D e2 >> 16; float32 t32; =20 - /* - * The ARM pseudocode function FPDot performs both multiplies - * and the add with a single rounding operation. Emulate this - * by performing the first multiply in round-to-odd, then doing - * the second multiply as fused multiply-add, and rounding to - * float32 all in one step. - */ - t64 =3D float64_mul(e1r, e2r, s_odd); - t64 =3D float64r32_muladd(e1c, e2c, t64, 0, s_std); + /* C.f. FPProcessNaNs4 */ + if (float16_is_any_nan(h1r) || float16_is_any_nan(h1c) || + float16_is_any_nan(h2r) || float16_is_any_nan(h2c)) { + float16 t16; =20 - /* This conversion is exact, because we've already rounded. */ - t32 =3D float64_to_float32(t64, s_std); + if (float16_is_signaling_nan(h1r, s_f16)) { + t16 =3D h1r; + } else if (float16_is_signaling_nan(h1c, s_f16)) { + t16 =3D h1c; + } else if (float16_is_signaling_nan(h2r, s_f16)) { + t16 =3D h2r; + } else if (float16_is_signaling_nan(h2c, s_f16)) { + t16 =3D h2c; + } else if (float16_is_any_nan(h1r)) { + t16 =3D h1r; + } else if (float16_is_any_nan(h1c)) { + t16 =3D h1c; + } else if (float16_is_any_nan(h2r)) { + t16 =3D h2r; + } else { + t16 =3D h2c; + } + t32 =3D float16_to_float32(t16, true, s_f16); + } else { + float64 e1r =3D float16_to_float64(h1r, true, s_f16); + float64 e1c =3D float16_to_float64(h1c, true, s_f16); + float64 e2r =3D float16_to_float64(h2r, true, s_f16); + float64 e2c =3D float16_to_float64(h2c, true, s_f16); + float64 t64; + + /* + * The ARM pseudocode function FPDot performs both multiplies + * and the add with a single rounding operation. Emulate this + * by performing the first multiply in round-to-odd, then doing + * the second multiply as fused multiply-add, and rounding to + * float32 all in one step. + */ + t64 =3D float64_mul(e1r, e2r, s_odd); + t64 =3D float64r32_muladd(e1c, e2c, t64, 0, s_std); + + /* This conversion is exact, because we've already rounded. */ + t32 =3D float64_to_float32(t64, s_std); + } =20 /* The final accumulation step is not fused. */ return float32_add(sum, t32, s_std); --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646337; cv=none; d=zohomail.com; s=zohoarc; b=mUYJSG4WutMeh90sC9PhVTLQgEEhCnXLicu0EzruiTiT/gZ+HqbApKSKPPJHyXSTJ9aWIZ8y6lCkmMsk9OnnyS5F8lVHc2FcPsEXb8RA3VsLny0l8J/QKRj963ZWyHV/wDC5yRH932HJCaXWBEZJ9wGBTvURwN87ivEKANAFfqE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646337; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=njexzeEwTl1IgweqmLo6Yd5YtbXtihlIHLkI1jD0mCQ=; b=joT6P7l1lWtzBnJooxci+R0qrFtgB77HcUvDkRkBGl8G/gt6OKbtJDAMqkn3lC+bboed12IZh+aCZpQN2ky6qFGH75BMSU44ybjdwp/wTrHkVBVZkyD1xh30CLY0gTUAJJSHkiDZpPNU3ZSB75n1aJoxZgSfVPZLRGP/h/fJ7Rg= 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 1751646337557266.6646465442102; Fri, 4 Jul 2025 09:25:37 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjE9-0008Pa-BC; Fri, 04 Jul 2025 12:25:29 -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 1uXjE5-0008N7-Q6 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:25 -0400 Received: from mail-wr1-x436.google.com ([2a00:1450:4864:20::436]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjE3-00068q-UB for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:25 -0400 Received: by mail-wr1-x436.google.com with SMTP id ffacd0b85a97d-3a52874d593so926873f8f.0 for ; Fri, 04 Jul 2025 09:25:23 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.21 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646322; x=1752251122; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=njexzeEwTl1IgweqmLo6Yd5YtbXtihlIHLkI1jD0mCQ=; b=z6nwQnHeyu0VjEKAk6XgF5GydpyFXA8lkgomsd9KstVy4/Gr0a3NhuaaoMx3RFo2/I 8MYc1+3LdMmS+EYG256PwoTuhle17Q+VoWwmKZNRxmBKp9Kf+wpaW6ei94FnH+hzZzWn H+WjQA3GZ6on4DaJ6T3EB8nkQ2CrlTkpD1lkYbWp+5L/Do1eU6mgatuL1gk6xT7JGcu7 mLbNB5e3C2+gM/6PkpPtJC1KFdHGfcppZhgTAQY6I5R5uYugndULDxqwF1ZoSFS8H+rQ B3Q6m1D1QoYIZx+3oEJtDj93csNHODarpyT8TkP0advKhEzRUEVWq6TAyvlBtdsrcDX9 +6KQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646322; x=1752251122; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=njexzeEwTl1IgweqmLo6Yd5YtbXtihlIHLkI1jD0mCQ=; b=Ec7X6hXUorPsvvmbzgJx92UmQ+2+bHbKdHgOeswYWWNp/41KdBK7mAkKnxMzHwp3e6 bf+4xLDlMDmyVagm/bmdckNzM5pX6Hy/Jzv3z4Tkc/m5IPT67SbdGLvSkj0rqA2N5oZR ttoGzoW+3Z3NZdMIpn8dL7KIQe7q9n4wtxiM2dkhH3HYVG6kWRY1K8qvcWJVgI6Sa+qb DujWSas5N8phIDOtgRo4QGjaqFcRqjFuBEPqTFByxG+J8H/FLEYUhCiF+CHwyRUOBGDN S/go291iCXroFZcPPSHHp+Fb+7X8yF2/VcP9f02DU/vObaCiRy/a+CvwUIezHayDrXg4 tQRA== X-Gm-Message-State: AOJu0Yyz9coRtoaY2uZLCCanxrFlVobEKACqPY52f6XQ0gOE5m0rT0YY ts3uajXHsxXp4tIrwG3dl0VQUlXmlKSsHCsBFXPFV7bX100MjaYlSo7gXFVT2y1cjAEs5dADg9w NUKVD X-Gm-Gg: ASbGncua5Uib9BPHToB/WlWsJpMnU64wefclczF0jpI+Ut6pZqrHG20sHDOpwxZRYJO QYjrVXDYRSCimsW9aJD4R1GsnVPJLQna6pdAjyec8rJuyQmmYGckBIJoD87d9JgMojNMXqADEIg xk56144dlBzixaS2WXig7n44cwHaiO9t/3ykNBNLZwmf8IJijJJuGRR/BzIW1R52wwIPzmDAylV T9S4mLlYgp+oE5mpaBn3rFtD1lXmniR+rUO8TSrqnssu+Kn+F6m8//435PQMEBd222S6N30VCyo h4CgGzv6uRgrpcIh+BvXYZ3EqhUbDcTB7XwvqMBhh0PeW0V2knNgKJB5oql/xTR1jTeO X-Google-Smtp-Source: AGHT+IG3F6pFHHD3TMwlTmFsxdp0NvLZqACDN7HXLBq9tguwQdXn89iBGuD8ylqjay3Jd34Woe9TdQ== X-Received: by 2002:adf:9d8c:0:b0:3b3:1e2e:ee07 with SMTP id ffacd0b85a97d-3b496626856mr2377504f8f.56.1751646322420; Fri, 04 Jul 2025 09:25:22 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 021/119] target/arm: Fix bfdotadd_ebf vs nan selection Date: Fri, 4 Jul 2025 17:23:21 +0100 Message-ID: <20250704162501.249138-22-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::436; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x436.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751646338425116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Implement FPProcessNaNs4 within bfdotadd_ebf, rather than simply letting NaNs propagate through the function. Cc: qemu-stable@nongnu.org Fixes: 0e1850182a1 ("target/arm: Implement FPCR.EBF=3D1 semantics for bfdot= add()") Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell Message-id: 20250704142112.1018902-10-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/vec_helper.c | 75 ++++++++++++++++++++++++++----------- 1 file changed, 53 insertions(+), 22 deletions(-) diff --git a/target/arm/tcg/vec_helper.c b/target/arm/tcg/vec_helper.c index 986eaf8ffa4..3b7f3088033 100644 --- a/target/arm/tcg/vec_helper.c +++ b/target/arm/tcg/vec_helper.c @@ -2989,31 +2989,62 @@ float32 bfdotadd(float32 sum, uint32_t e1, uint32_t= e2, float_status *fpst) float32 bfdotadd_ebf(float32 sum, uint32_t e1, uint32_t e2, float_status *fpst, float_status *fpst_odd) { - /* - * Compare f16_dotadd() in sme_helper.c, but here we have - * bfloat16 inputs. In particular that means that we do not - * want the FPCR.FZ16 flush semantics, so we use the normal - * float_status for the input handling here. - */ - float64 e1r =3D float32_to_float64(e1 << 16, fpst); - float64 e1c =3D float32_to_float64(e1 & 0xffff0000u, fpst); - float64 e2r =3D float32_to_float64(e2 << 16, fpst); - float64 e2c =3D float32_to_float64(e2 & 0xffff0000u, fpst); - float64 t64; + float32 s1r =3D e1 << 16; + float32 s1c =3D e1 & 0xffff0000u; + float32 s2r =3D e2 << 16; + float32 s2c =3D e2 & 0xffff0000u; float32 t32; =20 - /* - * The ARM pseudocode function FPDot performs both multiplies - * and the add with a single rounding operation. Emulate this - * by performing the first multiply in round-to-odd, then doing - * the second multiply as fused multiply-add, and rounding to - * float32 all in one step. - */ - t64 =3D float64_mul(e1r, e2r, fpst_odd); - t64 =3D float64r32_muladd(e1c, e2c, t64, 0, fpst); + /* C.f. FPProcessNaNs4 */ + if (float32_is_any_nan(s1r) || float32_is_any_nan(s1c) || + float32_is_any_nan(s2r) || float32_is_any_nan(s2c)) { + if (float32_is_signaling_nan(s1r, fpst)) { + t32 =3D s1r; + } else if (float32_is_signaling_nan(s1c, fpst)) { + t32 =3D s1c; + } else if (float32_is_signaling_nan(s2r, fpst)) { + t32 =3D s2r; + } else if (float32_is_signaling_nan(s2c, fpst)) { + t32 =3D s2c; + } else if (float32_is_any_nan(s1r)) { + t32 =3D s1r; + } else if (float32_is_any_nan(s1c)) { + t32 =3D s1c; + } else if (float32_is_any_nan(s2r)) { + t32 =3D s2r; + } else { + t32 =3D s2c; + } + /* + * FPConvertNaN(FPProcessNaN(t32)) will be done as part + * of the final addition below. + */ + } else { + /* + * Compare f16_dotadd() in sme_helper.c, but here we have + * bfloat16 inputs. In particular that means that we do not + * want the FPCR.FZ16 flush semantics, so we use the normal + * float_status for the input handling here. + */ + float64 e1r =3D float32_to_float64(s1r, fpst); + float64 e1c =3D float32_to_float64(s1c, fpst); + float64 e2r =3D float32_to_float64(s2r, fpst); + float64 e2c =3D float32_to_float64(s2c, fpst); + float64 t64; =20 - /* This conversion is exact, because we've already rounded. */ - t32 =3D float64_to_float32(t64, fpst); + /* + * The ARM pseudocode function FPDot performs both multiplies + * and the add with a single rounding operation. Emulate this + * by performing the first multiply in round-to-odd, then doing + * the second multiply as fused multiply-add, and rounding to + * float32 all in one step. + */ + t64 =3D float64_mul(e1r, e2r, fpst_odd); + t64 =3D float64r32_muladd(e1c, e2c, t64, 0, fpst); + + /* This conversion is exact, because we've already rounded. */ + t32 =3D float64_to_float32(t64, fpst); + } =20 /* The final accumulation step is not fused. */ return float32_add(sum, t32, fpst); --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647380; cv=none; d=zohomail.com; s=zohoarc; b=ehSDVg9yQEyy5JraeWYIaerILLdXDHSz4Gg+ptsubguMk+YSuTd8FTqtQOEhNzPTCaHKyAxmJRaU8DUL54BGcTPLpTwGkwbVTQm0bO4tIQcUd1iLzYzmdNLbFtjPMNQ+kv/zxC5Xm1DcmAwK5JUmQxjLoDtWVFuoki/YalQTFw0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647380; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=ukiMxm1q7KGMfog7S/dwQl9pKFVx23/cCJZwFH1nOIw=; b=EW8nc+c5C+jfUUt8tSiHmCC54C9Vv97xWWrj2X/2l5P1hxS2B33hirXY2KbOKiTR/OvPBSycPGBHvpW5pgRu72hBuSucRIiFH4tvgopOrBy42/HGXZepSJLjMcfSzatnjvKrdyly0WbGgxpOSsexx810vbsdJzK2RBBJLgVSRT4= 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 1751647380223829.7807372607106; Fri, 4 Jul 2025 09:43:00 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjEA-0008R5-1S; Fri, 04 Jul 2025 12:25:30 -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 1uXjE6-0008OM-FJ for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:26 -0400 Received: from mail-wm1-x32a.google.com ([2a00:1450:4864:20::32a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjE4-000697-Sz for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:26 -0400 Received: by mail-wm1-x32a.google.com with SMTP id 5b1f17b1804b1-4530921461aso8141495e9.0 for ; Fri, 04 Jul 2025 09:25:24 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.22 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646323; x=1752251123; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=ukiMxm1q7KGMfog7S/dwQl9pKFVx23/cCJZwFH1nOIw=; b=WlkNBCwJ0g9me59WWnxX5jigumOUn/zf2lD6jVmUH2jR+ppHROITU2LgJ+5L7MeEmN +C61vRC/+fFsAl41JUzVOF83Tc9N+v9JdAB8QSsFlR4t9pvWWrwAJojYQO5lcVCrkaE1 sTNRA8y8st/yMR4XwEH+pXLgZhMlGySBsiPcb9YGJSl/Efisx3nJ6hlBogEOnzIBATR7 CKjs9CYv3jtntzEaVi2eAcBw/cWTmvAZDgbbke8a6fVCEpydqES1bSpfnVMSFhNsYv44 mcE99wBckCuYooYOusRjHZA2YwqeuQ1+gISG7NqL4VahDQ/sA+joZfSLdgKuWz3sthmq cMfQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646323; x=1752251123; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ukiMxm1q7KGMfog7S/dwQl9pKFVx23/cCJZwFH1nOIw=; b=OIQ26MBWofbLpbjnpZarpM2nDLxf7aJzIte/flwHnfr1Z7FqO0zh4NrnEdWfigwwUL Gi18pZux7UeSp1p/6rPd5BsnghuvLd1sXN7iWkklA4PD2FrPAM45MVsK5bw5bnxkJnLe dUCnFBvIWrw2j9cfVKwZZPBkRvhUYB9lDnqlt5D1IZJynq2pNxQA+4FCgTKyImwqgQ0U OJeg3oCx8x9ZB/+cdbeRLLmqEVhB/aK/Z4PUppkXPuy1TUjdcNIQ4PUy0HvgVd4Hn5jl YVtwurfbMYpEefKTQMcK8jGGfkiCmPIzJ78in13YR8RfxIku7qsn6Fh6pYmXrdB2LDV5 D4dQ== X-Gm-Message-State: AOJu0Yy0uX/FNKSrAVUG7hwkshsLlX+qVas638wT+VsWMN+EI7OqMQvp qU0FX8s6DHdsPMUDkgKowql/8teFvfPCDOU5XRe/hBPWZXo0aZxJ/36TAUdjgQ/V4FUVZkgD/lK xXTQi X-Gm-Gg: ASbGncvcPf05m1cSaQaj1lxfxphNkO1380G+kTdvh+kdKA5yUpsM9TKu02tmExTalYG X82JhU2jl9ByE8iIoldQDwf9dViEhSL0D0yq5mcSM1aNXqYVLKKnB79zXmTb5R9Q93govenU0hT HBhHbdUivJKV1jGmtw51d3PZqTKm8RFdAiVInxpQueWZgHr1M5lb1pBhnjOOP0OYPBQR9ihix40 rIOqOWHddvGQMWn2DmPJrmwET9PQteEDBcAQgWt7BCo5jI09M2O2nRM+4C4phuybISlwsFQWD9z Mcv9vI12DPXQilOwernupEvgWmIRj3fZTUn9Qvf2AqJpxKlibuiESKbu/Se0Gi+DDwMuaOmjxUm /v6M= X-Google-Smtp-Source: AGHT+IEh/nGDsTe8Kpg/hNtIdCrsaGb80cDcaEPyN4DUHjNNQAsKXnhVQhR2D0gu6IJwX7LdZl5OCA== X-Received: by 2002:a05:600c:3b12:b0:442:d5dd:5b4b with SMTP id 5b1f17b1804b1-454b3126091mr36589785e9.31.1751646323321; Fri, 04 Jul 2025 09:25:23 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 022/119] target/arm: Remove CPUARMState.vfp.scratch Date: Fri, 4 Jul 2025 17:23:22 +0100 Message-ID: <20250704162501.249138-23-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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::32a; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x32a.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751647382592116600 From: Richard Henderson The last use of this field was removed in b2fc7be972b9. Reviewed-by: Alex Benn=C3=A9e Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-11-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/cpu.h | 3 --- 1 file changed, 3 deletions(-) diff --git a/target/arm/cpu.h b/target/arm/cpu.h index 03381539238..96a49072665 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -669,9 +669,6 @@ typedef struct CPUArchState { =20 uint32_t xregs[16]; =20 - /* Scratch space for aa32 neon expansion. */ - uint32_t scratch[8]; - /* There are a number of distinct float control structures. */ float_status fp_status[FPST_COUNT]; =20 --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647041; cv=none; d=zohomail.com; s=zohoarc; b=fPr/S/7/slQLqiyIA/4ydCdwGQZ3EmTujm8bymHX8DNQPc4gw6Djpexlu/ZULHBKaLg8evhoxQGv9zQrvrMKOxVUZUIs4oOrF1SDa04BiWU8kqMfXB+ydaxjKzho4qcbSvboIPn7pntmQqPjzTuL6+d2NhIbQaIInXJDFRgycqU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647041; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=rw2V7LRv7N3yBEu1EXHYSf8y/jFZBXV4IPLu7x+20gQ=; b=TDDB2jlUkIfHgSAo8xPU1N4WamgOPnzJ5pTks4yxUzMxN1paDhs+9NfppE+ZYnVnLhPQtSLUSvhF/vrB0tsZI0N7WJIpgtjx/JTz3lRn+Lb4BTptgmU7Ye4M8iGAQHDwT0uIeWfG1vi/oSARes9AWCs1YOs8T62K/fVk1t2S+8k= 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 1751647041017323.89097003001734; Fri, 4 Jul 2025 09:37:21 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjEC-0008SF-RF; Fri, 04 Jul 2025 12:25:32 -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 1uXjE8-0008Ok-4k for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:28 -0400 Received: from mail-wr1-x434.google.com ([2a00:1450:4864:20::434]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjE5-00069Q-VT for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:27 -0400 Received: by mail-wr1-x434.google.com with SMTP id ffacd0b85a97d-3a51481a598so598003f8f.3 for ; Fri, 04 Jul 2025 09:25:25 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.23 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646324; x=1752251124; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=rw2V7LRv7N3yBEu1EXHYSf8y/jFZBXV4IPLu7x+20gQ=; b=rvKj9vUr51dTW/FvE+zTOcUTnQrkwwPHMjMxmjZRVVHpiFGGCCMl6V3zziWH4YIgm7 ahZZAcD9VoN8Eh0Vl1DAK6ECvbTe3IQsjhbgjeQIwJ0wHiTDzPp49H8sEbDHSc4uzAYf pgJ3W06iWqVSoR68HKrbol4Ya6VqoBFI29mgzjIAqdCtOwCzLDiZAxzSc9rUZ8BY+Qez /qiEHePkTtnUGMmih/CF+9wHjMmE6ACuL31zJC9kQUxlHvse0oEmb/+ltP0AqG9KhwH0 J/IAv3rVRwdTferUECHM/0mCEvsxi6/pDnYiwf+22iH0eqbyANQtxfyVdcceNY2SeGkN Vs8g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646324; x=1752251124; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=rw2V7LRv7N3yBEu1EXHYSf8y/jFZBXV4IPLu7x+20gQ=; b=gEuAVVHiS2vpvbvnSA9FMx4lB8rsh4w1ZFjmJmHA1v18rANrHmPEop3/yNqJ3jsRzP jwDEXFthsLGyfPAFfMRxmwGoJmxQPu6Y90nsxqli4NjY8akYlDINQVbiO12CXvU3B0IW 8w2xyf2gGhEPeA55baC1TFYgrYfzT1CtR402Y4g+siLJ+z+yfbkoGcFlRREDOreaHjkz BhS96WBM9DhU/0+snKPN6Lxfz9CiOnhRIR3Blt0dFdmymV4Rgdqw2a3fahIwEOZ8h83S fqBcigMMAEyDeU8ioiC8KKWKriqy1rDSgHuvrzHXyzWoiLKfdpwSWef4NckErQBkwNrq P95w== X-Gm-Message-State: AOJu0YzHQ2t9LdDyXda3ny2k9cb0QCZjzNMgCOA7dB6Fi7yVHYLVE7ND bq1SVme3CH4RWt8IQxnOuddMqy+UHLOyei+VZzaoQh1zUe0VJvIbsHONPbCWEHvR3bQsToXtSyg YFaaw X-Gm-Gg: ASbGnctF6CQMUZSVeYez9sBWIb9CQTHQyrRdLWx3fXEVwZviNYJIwTQ/06cahoQce6u jEdP6NhtRA8To1BkgZobwYwaEdvQ2QWDOcW6OLntxmsdUszOsEGwbs819lOoiQGKMgKHzu8a6Da 2/TdONwIf14M0sLFFQvsXBbcCF1kYf6u9tA/nPa7HR2gV/TZfYBBYCGYJaXkcYIX8DIsxk2se71 Id68MBReL1XJkfaxq1oNe12BCNyCcJOPtNsgmX+5BR+Hfy9If63bw0xKBWzPrWJtJDLojLi5/ux IXnmeofrp+9i/ZgqF/sn2mJxVPzW8rgjtsUByW0MvZ62vaNu/vDCn363DxsTmfm+2AuI X-Google-Smtp-Source: AGHT+IEBFrDZpH5OvyUYkiTNlzjXX6xep6fJt7cpQrZdpPxSiiJF0TVROBghkKCvp2Wg9IwrsmZ49A== X-Received: by 2002:a05:6000:22c6:b0:3a5:3a3b:6a3a with SMTP id ffacd0b85a97d-3b4970432aamr2244306f8f.54.1751646324221; Fri, 04 Jul 2025 09:25:24 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 023/119] target/arm: Introduce FPST_ZA, FPST_ZA_F16 Date: Fri, 4 Jul 2025 17:23:23 +0100 Message-ID: <20250704162501.249138-24-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::434; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x434.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751647042833116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Rather than repeatedly copying FPST_FPCR to locals and setting default nan mode, create dedicated float_status. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-12-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/cpu.h | 12 +++++++++++- target/arm/cpu.c | 4 ++++ target/arm/tcg/vfp_helper.c | 12 +++++++++++- 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/target/arm/cpu.h b/target/arm/cpu.h index 96a49072665..2530aaca22c 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -207,6 +207,8 @@ typedef struct NVICState NVICState; * when FPCR.AH =3D=3D 1 (bfloat16 conversions and multiplies, * and the reciprocal and square root estimate/step insns); * for half-precision + * ZA: the "streaming sve" fp status. + * ZA_F16: likewise for half-precision. * * Half-precision operations are governed by a separate * flush-to-zero control bit in FPSCR:FZ16. We pass a separate @@ -227,6 +229,12 @@ typedef struct NVICState NVICState; * they ignore FPCR.RMode. But they don't ignore FPCR.FZ16, * which means we need an FPST_AH_F16 as well. * + * The "ZA" float_status are for Streaming SVE operations which use + * default-NaN and do not generate fp exceptions, which means that they + * do not accumulate exception bits back into FPCR. + * See e.g. FPAdd vs FPAdd_ZA pseudocode functions, and the setting + * of fpcr.DN and fpexec parameters. + * * To avoid having to transfer exception bits around, we simply * say that the FPSCR cumulative exception flags are the logical * OR of the flags in the four fp statuses. This relies on the @@ -240,10 +248,12 @@ typedef enum ARMFPStatusFlavour { FPST_A64_F16, FPST_AH, FPST_AH_F16, + FPST_ZA, + FPST_ZA_F16, FPST_STD, FPST_STD_F16, } ARMFPStatusFlavour; -#define FPST_COUNT 8 +#define FPST_COUNT 10 =20 typedef struct CPUArchState { /* Regs for current mode. */ diff --git a/target/arm/cpu.c b/target/arm/cpu.c index ebac86f70d3..7b207f2620c 100644 --- a/target/arm/cpu.c +++ b/target/arm/cpu.c @@ -554,11 +554,15 @@ static void arm_cpu_reset_hold(Object *obj, ResetType= type) set_flush_inputs_to_zero(1, &env->vfp.fp_status[FPST_STD]); set_default_nan_mode(1, &env->vfp.fp_status[FPST_STD]); set_default_nan_mode(1, &env->vfp.fp_status[FPST_STD_F16]); + set_default_nan_mode(1, &env->vfp.fp_status[FPST_ZA]); + set_default_nan_mode(1, &env->vfp.fp_status[FPST_ZA_F16]); arm_set_default_fp_behaviours(&env->vfp.fp_status[FPST_A32]); arm_set_default_fp_behaviours(&env->vfp.fp_status[FPST_A64]); + arm_set_default_fp_behaviours(&env->vfp.fp_status[FPST_ZA]); arm_set_default_fp_behaviours(&env->vfp.fp_status[FPST_STD]); arm_set_default_fp_behaviours(&env->vfp.fp_status[FPST_A32_F16]); arm_set_default_fp_behaviours(&env->vfp.fp_status[FPST_A64_F16]); + arm_set_default_fp_behaviours(&env->vfp.fp_status[FPST_ZA_F16]); arm_set_default_fp_behaviours(&env->vfp.fp_status[FPST_STD_F16]); arm_set_ah_fp_behaviours(&env->vfp.fp_status[FPST_AH]); set_flush_to_zero(1, &env->vfp.fp_status[FPST_AH]); diff --git a/target/arm/tcg/vfp_helper.c b/target/arm/tcg/vfp_helper.c index b1324c5c0a6..e156e3774ad 100644 --- a/target/arm/tcg/vfp_helper.c +++ b/target/arm/tcg/vfp_helper.c @@ -123,7 +123,7 @@ uint32_t vfp_get_fpsr_from_host(CPUARMState *env) a64_flags |=3D (get_float_exception_flags(&env->vfp.fp_status[FPST_A64= _F16]) & ~(float_flag_input_denormal_flushed | float_flag_input_denorma= l_used)); /* - * We do not merge in flags from FPST_AH or FPST_AH_F16, because + * We do not merge in flags from FPST_{AH,ZA} or FPST_{AH,ZA}_F16, bec= ause * they are used for insns that must not set the cumulative exception = bits. */ =20 @@ -196,6 +196,8 @@ void vfp_set_fpcr_to_host(CPUARMState *env, uint32_t va= l, uint32_t mask) set_float_rounding_mode(i, &env->vfp.fp_status[FPST_A64]); set_float_rounding_mode(i, &env->vfp.fp_status[FPST_A32_F16]); set_float_rounding_mode(i, &env->vfp.fp_status[FPST_A64_F16]); + set_float_rounding_mode(i, &env->vfp.fp_status[FPST_ZA]); + set_float_rounding_mode(i, &env->vfp.fp_status[FPST_ZA_F16]); } if (changed & FPCR_FZ16) { bool ftz_enabled =3D val & FPCR_FZ16; @@ -203,15 +205,18 @@ void vfp_set_fpcr_to_host(CPUARMState *env, uint32_t = val, uint32_t mask) set_flush_to_zero(ftz_enabled, &env->vfp.fp_status[FPST_A64_F16]); set_flush_to_zero(ftz_enabled, &env->vfp.fp_status[FPST_STD_F16]); set_flush_to_zero(ftz_enabled, &env->vfp.fp_status[FPST_AH_F16]); + set_flush_to_zero(ftz_enabled, &env->vfp.fp_status[FPST_ZA_F16]); set_flush_inputs_to_zero(ftz_enabled, &env->vfp.fp_status[FPST_A32= _F16]); set_flush_inputs_to_zero(ftz_enabled, &env->vfp.fp_status[FPST_A64= _F16]); set_flush_inputs_to_zero(ftz_enabled, &env->vfp.fp_status[FPST_STD= _F16]); set_flush_inputs_to_zero(ftz_enabled, &env->vfp.fp_status[FPST_AH_= F16]); + set_flush_inputs_to_zero(ftz_enabled, &env->vfp.fp_status[FPST_ZA_= F16]); } if (changed & FPCR_FZ) { bool ftz_enabled =3D val & FPCR_FZ; set_flush_to_zero(ftz_enabled, &env->vfp.fp_status[FPST_A32]); set_flush_to_zero(ftz_enabled, &env->vfp.fp_status[FPST_A64]); + set_flush_to_zero(ftz_enabled, &env->vfp.fp_status[FPST_ZA]); /* FIZ is A64 only so FZ always makes A32 code flush inputs to zer= o */ set_flush_inputs_to_zero(ftz_enabled, &env->vfp.fp_status[FPST_A32= ]); } @@ -223,6 +228,7 @@ void vfp_set_fpcr_to_host(CPUARMState *env, uint32_t va= l, uint32_t mask) bool fitz_enabled =3D (val & FPCR_FIZ) || (val & (FPCR_FZ | FPCR_AH)) =3D=3D FPCR_FZ; set_flush_inputs_to_zero(fitz_enabled, &env->vfp.fp_status[FPST_A6= 4]); + set_flush_inputs_to_zero(fitz_enabled, &env->vfp.fp_status[FPST_ZA= ]); } if (changed & FPCR_DN) { bool dnan_enabled =3D val & FPCR_DN; @@ -240,9 +246,13 @@ void vfp_set_fpcr_to_host(CPUARMState *env, uint32_t v= al, uint32_t mask) /* Change behaviours for A64 FP operations */ arm_set_ah_fp_behaviours(&env->vfp.fp_status[FPST_A64]); arm_set_ah_fp_behaviours(&env->vfp.fp_status[FPST_A64_F16]); + arm_set_ah_fp_behaviours(&env->vfp.fp_status[FPST_ZA]); + arm_set_ah_fp_behaviours(&env->vfp.fp_status[FPST_ZA_F16]); } else { arm_set_default_fp_behaviours(&env->vfp.fp_status[FPST_A64]); arm_set_default_fp_behaviours(&env->vfp.fp_status[FPST_A64_F16= ]); + arm_set_default_fp_behaviours(&env->vfp.fp_status[FPST_ZA]); + arm_set_default_fp_behaviours(&env->vfp.fp_status[FPST_ZA_F16]= ); } } /* --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647412; cv=none; d=zohomail.com; s=zohoarc; b=i/h1NvxahCOP3W9EEKMNSFYFw5PctB4D0azRQw/gzDwyD9ti3DCtxsm6YOSsLAAakKpBwUA6X5rgpAkCV8VlQeTX5cRnRvb43IK48x7b2t3Jnw7snZV6WpxKWVq2AwQ6PneCBj++GlcLGExx3+3ebHwrYAYBGapvmeXUMxavgMg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647412; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=Sej+V2Rr9AtmU3YQ9vXb4to4NlQ7GYAchQCQX2HueIA=; b=SGySqoF51WiCf/pA+5Koocbqd3Q/fgYFNO4hvbf48A5yeuKp+byehVDwdI3XgDkTwEn71bBMHGFDxdfqyLuyr7vkyp7HK4xBRgKyyUNEDKN7MYOIijGYAPg9Fdv4QbuJrLVxDNa0iYGshvEqPlYldAymXZUQRfk3tUnQ+Sk5Z78= 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 1751647412405396.6200402971217; Fri, 4 Jul 2025 09:43:32 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjEA-0008RO-WC; Fri, 04 Jul 2025 12:25:31 -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 1uXjE9-0008PV-4J for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:29 -0400 Received: from mail-wr1-x42d.google.com ([2a00:1450:4864:20::42d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjE6-00069e-Kk for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:28 -0400 Received: by mail-wr1-x42d.google.com with SMTP id ffacd0b85a97d-3a6cdc27438so930539f8f.2 for ; Fri, 04 Jul 2025 09:25:26 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.24 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646325; x=1752251125; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=Sej+V2Rr9AtmU3YQ9vXb4to4NlQ7GYAchQCQX2HueIA=; b=Vg0ucKm5+V64l4WtKvH6QTGGUoqANtG22rWiT90b+DnoLyxtgd/GU4BaxD3iRWvPs4 tFzcycOJ1Zg56X5lzB9r3z4Wc0PGohZCj09O+Fw0sp2YThSd8nj1IDLS2PPDYidu3mO7 a4D+k1/sZA/TxlEMR6ZgE4ZWtHiudDd6cugZRX9DdODFkygODZZsJBhvJ+ph/AQQJ7VL ga0HTMkpDTBZoFjh93yoK0OI8Sv1DDy/VsHdsthLl3EKzgS3RNrCBtHWgEDKxbH/zq+n NVfyIyeSBMjVgDJip+17YjUfGZADzy9ILRbuZrz5wTZebiH7lDUdYs6LpFUYqzIexTMW qEJw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646325; x=1752251125; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Sej+V2Rr9AtmU3YQ9vXb4to4NlQ7GYAchQCQX2HueIA=; b=vB9wOet4mV2OQdaOPSB+PkBVfh3J0KVNBn6u5aCpDbzVRjI/l7cQydyXDkF+bEGoJV KafXBPfpSSIPr/OihMOoTms62unU8v1myZ3MJmv7rpvf+rwDYizAFAFmcibPWvGGVzrQ gDsI0JQIKRLTK+FIuruKNLXa1P9z9N0xAVlYXa3fbRu4PmroQUvXKp7CCbowsUQtrdH4 qOQ1QF6caPazP6kPaPL47+PsdCu8LhZJFIBAUPH4yZ9WtSXY0DnmJUJCwI75pDa7Stjh mptROHYAhKUDiT+P6ESI99Mo7F72aRkHkzdGaPLlm7Pu7fYsVdoWHJbU3hCEr/ayWVXV uT3A== X-Gm-Message-State: AOJu0Yz8C3ATxA7kd5f6ke7VX8VW5v/OETd0wvLUc/mFwy8YPoejxfdv 1QxqDgrMIHFFwWhKQlxYY4gQNZ3ABw22g2QvHIkN2YhzOTRBEu03sbTpvOMU+2dAEexB19XeD2x HlJ8u X-Gm-Gg: ASbGncvKfcTdWPzhblzOW7c5c+b2TYPtds7n4LxDJX9ejgaKrjfZ2bryVPmZnoHQnP2 afvFdJBJLrEpDhlRRJt40oHIZEhg3NsWV1tb7/+pgr0uXoBPppelc+9eWvFm3pvFTsy+bDzxOk5 OXIRhunha4ISVHOZqR8KPZpCeNG6ZjOK2LVPYbqT5GhkTZc/GGcqroCwPNHkUrZ18/NEPBrz5e9 kmyV6hdcDvbtJaSoP5j2TgX36JvcFDmwYdWGzT/W6K/JS/L1r0s0rYfbEqwmat2tEhuZO00Hzy2 F8rfovWke15lbX1tkDmuS/nJPRS9GqZwq+7bwKfR3TRG9d+X+t96STZ2x9HyrWQH3Sh9 X-Google-Smtp-Source: AGHT+IGUmhW6eNTRwsbb5HsIv9LS8J62fSTewm9pdP4g8U92KOSDwbq+mrw4C6KB8jKXZNuFeuKydg== X-Received: by 2002:a05:6000:2384:b0:3a4:ee3f:e9a6 with SMTP id ffacd0b85a97d-3b49703d9acmr2327350f8f.54.1751646325173; Fri, 04 Jul 2025 09:25:25 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 024/119] target/arm: Use FPST_ZA for sme_fmopa_[hsd] Date: Fri, 4 Jul 2025 17:23:24 +0100 Message-ID: <20250704162501.249138-25-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::42d; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x42d.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751647412833116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-13-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/sme_helper.c | 37 ++++++++-------------------------- target/arm/tcg/translate-sme.c | 4 ++-- 2 files changed, 10 insertions(+), 31 deletions(-) diff --git a/target/arm/tcg/sme_helper.c b/target/arm/tcg/sme_helper.c index 8f33387e4bd..9942d717aaa 100644 --- a/target/arm/tcg/sme_helper.c +++ b/target/arm/tcg/sme_helper.c @@ -904,20 +904,11 @@ void HELPER(sme_addva_d)(void *vzda, void *vzn, void = *vpn, } =20 void HELPER(sme_fmopa_s)(void *vza, void *vzn, void *vzm, void *vpn, - void *vpm, float_status *fpst_in, uint32_t desc) + void *vpm, float_status *fpst, uint32_t desc) { intptr_t row, col, oprsz =3D simd_maxsz(desc); uint32_t neg =3D simd_data(desc) << 31; uint16_t *pn =3D vpn, *pm =3D vpm; - float_status fpst; - - /* - * Make a copy of float_status because this operation does not - * update the cumulative fp exception status. It also produces - * default nans. - */ - fpst =3D *fpst_in; - set_default_nan_mode(true, &fpst); =20 for (row =3D 0; row < oprsz; ) { uint16_t pa =3D pn[H2(row >> 4)]; @@ -932,7 +923,7 @@ void HELPER(sme_fmopa_s)(void *vza, void *vzn, void *vz= m, void *vpn, if (pb & 1) { uint32_t *a =3D vza_row + H1_4(col); uint32_t *m =3D vzm + H1_4(col); - *a =3D float32_muladd(n, *m, *a, 0, &fpst); + *a =3D float32_muladd(n, *m, *a, 0, fpst); } col +=3D 4; pb >>=3D 4; @@ -946,15 +937,12 @@ void HELPER(sme_fmopa_s)(void *vza, void *vzn, void *= vzm, void *vpn, } =20 void HELPER(sme_fmopa_d)(void *vza, void *vzn, void *vzm, void *vpn, - void *vpm, float_status *fpst_in, uint32_t desc) + void *vpm, float_status *fpst, uint32_t desc) { intptr_t row, col, oprsz =3D simd_oprsz(desc) / 8; uint64_t neg =3D (uint64_t)simd_data(desc) << 63; uint64_t *za =3D vza, *zn =3D vzn, *zm =3D vzm; uint8_t *pn =3D vpn, *pm =3D vpm; - float_status fpst =3D *fpst_in; - - set_default_nan_mode(true, &fpst); =20 for (row =3D 0; row < oprsz; ++row) { if (pn[H1(row)] & 1) { @@ -964,7 +952,7 @@ void HELPER(sme_fmopa_d)(void *vza, void *vzn, void *vz= m, void *vpn, for (col =3D 0; col < oprsz; ++col) { if (pm[H1(col)] & 1) { uint64_t *a =3D &za_row[col]; - *a =3D float64_muladd(n, zm[col], *a, 0, &fpst); + *a =3D float64_muladd(n, zm[col], *a, 0, fpst); } } } @@ -1065,19 +1053,8 @@ void HELPER(sme_fmopa_h)(void *vza, void *vzn, void = *vzm, void *vpn, intptr_t row, col, oprsz =3D simd_maxsz(desc); uint32_t neg =3D simd_data(desc) * 0x80008000u; uint16_t *pn =3D vpn, *pm =3D vpm; - float_status fpst_odd, fpst_std, fpst_f16; + float_status fpst_odd =3D env->vfp.fp_status[FPST_ZA]; =20 - /* - * Make copies of the fp status fields we use, because this operation - * does not update the cumulative fp exception status. It also - * produces default NaNs. We also need a second copy of fp_status with - * round-to-odd -- see above. - */ - fpst_f16 =3D env->vfp.fp_status[FPST_A64_F16]; - fpst_std =3D env->vfp.fp_status[FPST_A64]; - set_default_nan_mode(true, &fpst_std); - set_default_nan_mode(true, &fpst_f16); - fpst_odd =3D fpst_std; set_float_rounding_mode(float_round_to_odd, &fpst_odd); =20 for (row =3D 0; row < oprsz; ) { @@ -1097,7 +1074,9 @@ void HELPER(sme_fmopa_h)(void *vza, void *vzn, void *= vzm, void *vpn, =20 m =3D f16mop_adj_pair(m, pcol, 0); *a =3D f16_dotadd(*a, n, m, - &fpst_f16, &fpst_std, &fpst_odd); + &env->vfp.fp_status[FPST_ZA_F16], + &env->vfp.fp_status[FPST_ZA], + &fpst_odd); } col +=3D 4; pcol >>=3D 4; diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index fcbb3500161..51175c923ef 100644 --- a/target/arm/tcg/translate-sme.c +++ b/target/arm/tcg/translate-sme.c @@ -358,9 +358,9 @@ static bool do_outprod_env(DisasContext *s, arg_op *a, = MemOp esz, TRANS_FEAT(FMOPA_h, aa64_sme, do_outprod_env, a, MO_32, gen_helper_sme_fmopa_h) TRANS_FEAT(FMOPA_s, aa64_sme, do_outprod_fpst, a, - MO_32, FPST_A64, gen_helper_sme_fmopa_s) + MO_32, FPST_ZA, gen_helper_sme_fmopa_s) TRANS_FEAT(FMOPA_d, aa64_sme_f64f64, do_outprod_fpst, a, - MO_64, FPST_A64, gen_helper_sme_fmopa_d) + MO_64, FPST_ZA, gen_helper_sme_fmopa_d) =20 TRANS_FEAT(BFMOPA, aa64_sme, do_outprod_env, a, MO_32, gen_helper_sme_bfmo= pa) =20 --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646505; cv=none; d=zohomail.com; s=zohoarc; b=RxY/wMDsPvMSUAyC/0MQySYA6OkXyerrmZkXggK0nG8tfrBUUzSA1YCLVjTUAhu0opa8U0ouPBGsFQwjPVxYgRgX12cIQwqoxIIm3VrTAVECniKUZjM4GJbU0aK9xQbc3OXa6tJSudEXOyinIuwOhMeSh9Q8bwnJgs9JBZCV05E= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646505; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=gmc/qX5hnqvVyOg3tLZ5xhJ8CZIIWAPZFOvrCJ6HrLo=; b=Sw+J6I72vKZK/etdV0c3lZU8sdL2enCMGTfkFcoiscdMgaCDcqtxMDz3yImkVstuEOyVlyEVbagBIE+e7hiqoTwpUG4uYHBNCtZoA6NqhsHpdSuSBkIoIRM2Xubk8o+BHG/A22CcP19oZNvJfX/FchhOsgqIpE0Hb433iRJHIBQ= 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 1751646505879482.96610865990283; Fri, 4 Jul 2025 09:28:25 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjEB-0008Rb-4q; Fri, 04 Jul 2025 12:25:31 -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 1uXjE9-0008QE-Nz for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:29 -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 1uXjE7-0006A5-Jy for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:29 -0400 Received: by mail-wm1-x32c.google.com with SMTP id 5b1f17b1804b1-454aaade1fbso11814855e9.3 for ; Fri, 04 Jul 2025 09:25:27 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.25 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646326; x=1752251126; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=gmc/qX5hnqvVyOg3tLZ5xhJ8CZIIWAPZFOvrCJ6HrLo=; b=IOdbVNpRAa+RPK6/v50vYxztrtPdCXr6e/ShMsfewWfmU50pIiUrf6zJ5dDKOEk7Vk THL6VedXkI4wIgzxjGKtYCPcPQwXzonHmkkQ/cgTcsmt7PzJmWe5+vVUVCsfEzPxuNPN Fb8FKAqHfalfW47KNyB1bilBhrlgHTRKb7lbRlyhiaAVp1pNrzv2OqCc2c6BufcdpLTl IFJ6GdDlzjLpA2qcPNAGUN9ixNnAxsPePvFm5YxO+Z/5SKoQoi0PiL6eCwsIoT15NMyS Epb2NYalYd8AXlE7eDDZyFlJH+nPX3UX3wfnKTUuiQEErncqUb4l67u1P5K544QALSI7 X8rQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646326; x=1752251126; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=gmc/qX5hnqvVyOg3tLZ5xhJ8CZIIWAPZFOvrCJ6HrLo=; b=km+bLEXxFAwMBOwNJXSlysvqspfqdZCDYAP5j5DC/Dm2R2gvTFdGCbFpPvn3pUQhAg BdWi93nD9p2IBiPc/TQbdafv8VMhMmK0oHaui9X5FgP+E2OZpmUFJ1vwOLzZbKqtAehh ROoiSITyLksrexwUkpc/kXi/qsgUOMqDXTdS8c8Z40ZcpsURSlXqkb3Xa+o88EzqTF4Y fOHp/8TuTqka6xVATwu6URVVc8wy7SQ7g0guFsEkzvvTF3xXXNA9PlX+3ZF8lkWYUmRD 1bafNd93tBTuxFSyBnBVpyLr33B7HSbLf7x7Zn0XpcRslolgZ7phQAyxRDXgrACCvzhM cDCA== X-Gm-Message-State: AOJu0YxiTDmvY9OrW8zeCx79/b73F29k4vT1ZeLwDBLrzd0X3BwxB9RJ lBEpZsCf7Izzd0VvJnTF8eWXYpGcJmKGRyDk2/TTSoGtCeWysvtS4B4hcYbn8W4aHvXG45qZkn3 ruks+ X-Gm-Gg: ASbGncvf1UYXSPz5TMAxdZZ/cR6XRwwxsEFvke2CjPuthBmx8sh9aDGM/udhcRsHR2W J3DbuuBuS4TV9N8c0Pa8Sj0W0ZVMuNoixjC1xZzw1RjB/maciqVgjbXtuUC6kWYoyuDRmMjisDh 3IRh1ApFxR5u7mDkZlXZWubuMeZpox5WeMXw4Np3ZTUk3YkCYUWUUeqTwKAeqsuu6DDZZR3yNii qDtLzSmMm0Ik7SHeQxStn6RpTwSHT0ZllzYf9f0eS9/PUYYEr24JIpNYl/d+RJS8JC/+K7jyfGW E68HF+6bm3P7joGehHR6qSW38lOhiKT89+IjTx5jMwtz4vjJZJ356NqQ4oEnJ+nNzWZG X-Google-Smtp-Source: AGHT+IE2omN88sDEWc+RDHVMU6SCjbiSacRRMnlwBT4jUfbDRTS+rhb/uIrSTZVyAzE+YKMOdxHaJQ== X-Received: by 2002:a05:600c:3e09:b0:43d:fa59:a685 with SMTP id 5b1f17b1804b1-454b4ec8adamr23832985e9.33.1751646326057; Fri, 04 Jul 2025 09:25:26 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 025/119] target/arm: Rename zarray to za_state.za Date: Fri, 4 Jul 2025 17:23:25 +0100 Message-ID: <20250704162501.249138-26-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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=peter.maydell@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 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: 1751646508516116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson The whole ZA state will also contain ZT0. Make things easier in aarch64_set_svcr to zero both by wrapping them in a common structure. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-14-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/cpu.h | 48 +++++++++++++++++++--------------- linux-user/aarch64/signal.c | 4 +-- target/arm/cpu.c | 4 +-- target/arm/helper.c | 2 +- target/arm/machine.c | 2 +- target/arm/tcg/sme_helper.c | 6 ++--- target/arm/tcg/translate-sme.c | 4 +-- 7 files changed, 38 insertions(+), 32 deletions(-) diff --git a/target/arm/cpu.h b/target/arm/cpu.h index 2530aaca22c..7db97e80386 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -715,27 +715,33 @@ typedef struct CPUArchState { =20 uint64_t scxtnum_el[4]; =20 - /* - * SME ZA storage -- 256 x 256 byte array, with bytes in host word ord= er, - * as we do with vfp.zregs[]. This corresponds to the architectural ZA - * array, where ZA[N] is in the least-significant bytes of env->zarray= [N]. - * When SVL is less than the architectural maximum, the accessible - * storage is restricted, such that if the SVL is X bytes the guest can - * see only the bottom X elements of zarray[], and only the least - * significant X bytes of each element of the array. (In other words, - * the observable part is always square.) - * - * The ZA storage can also be considered as a set of square tiles of - * elements of different sizes. The mapping from tiles to the ZA array - * is architecturally defined, such that for tiles of elements of esz - * bytes, the Nth row (or "horizontal slice") of tile T is in - * ZA[T + N * esz]. Note that this means that each tile is not contigu= ous - * in the ZA storage, because its rows are striped through the ZA arra= y. - * - * Because this is so large, keep this toward the end of the reset are= a, - * to keep the offsets into the rest of the structure smaller. - */ - ARMVectorReg zarray[ARM_MAX_VQ * 16]; + struct { + /* + * SME ZA storage -- 256 x 256 byte array, with bytes in host + * word order, as we do with vfp.zregs[]. This corresponds to + * the architectural ZA array, where ZA[N] is in the least + * significant bytes of env->za_state.za[N]. + * + * When SVL is less than the architectural maximum, the accessible + * storage is restricted, such that if the SVL is X bytes the guest + * can see only the bottom X elements of zarray[], and only the le= ast + * significant X bytes of each element of the array. (In other wor= ds, + * the observable part is always square.) + * + * The ZA storage can also be considered as a set of square tiles = of + * elements of different sizes. The mapping from tiles to the ZA a= rray + * is architecturally defined, such that for tiles of elements of = esz + * bytes, the Nth row (or "horizontal slice") of tile T is in + * ZA[T + N * esz]. Note that this means that each tile is not + * contiguous in the ZA storage, because its rows are striped thro= ugh + * the ZA array. + * + * Because this is so large, keep this toward the end of the + * reset area, to keep the offsets into the rest of the structure + * smaller. + */ + ARMVectorReg za[ARM_MAX_VQ * 16]; + } za_state; =20 struct CPUBreakpoint *cpu_breakpoint[16]; struct CPUWatchpoint *cpu_watchpoint[16]; diff --git a/linux-user/aarch64/signal.c b/linux-user/aarch64/signal.c index bc7a13800da..d50cab78d83 100644 --- a/linux-user/aarch64/signal.c +++ b/linux-user/aarch64/signal.c @@ -248,7 +248,7 @@ static void target_setup_za_record(struct target_za_con= text *za, for (i =3D 0; i < vl; ++i) { uint64_t *z =3D (void *)za + TARGET_ZA_SIG_ZAV_OFFSET(vq, i); for (j =3D 0; j < vq * 2; ++j) { - __put_user_e(env->zarray[i].d[j], z + j, le); + __put_user_e(env->za_state.za[i].d[j], z + j, le); } } } @@ -397,7 +397,7 @@ static bool target_restore_za_record(CPUARMState *env, for (i =3D 0; i < vl; ++i) { uint64_t *z =3D (void *)za + TARGET_ZA_SIG_ZAV_OFFSET(vq, i); for (j =3D 0; j < vq * 2; ++j) { - __get_user_e(env->zarray[i].d[j], z + j, le); + __get_user_e(env->za_state.za[i].d[j], z + j, le); } } return true; diff --git a/target/arm/cpu.c b/target/arm/cpu.c index 7b207f2620c..62656277625 100644 --- a/target/arm/cpu.c +++ b/target/arm/cpu.c @@ -1335,8 +1335,8 @@ static void aarch64_cpu_dump_state(CPUState *cs, FILE= *f, int flags) qemu_fprintf(f, "ZA[%0*d]=3D", svl_lg10, i); for (j =3D zcr_len; j >=3D 0; --j) { qemu_fprintf(f, "%016" PRIx64 ":%016" PRIx64 "%c", - env->zarray[i].d[2 * j + 1], - env->zarray[i].d[2 * j], + env->za_state.za[i].d[2 * j + 1], + env->za_state.za[i].d[2 * j], j ? ':' : '\n'); } } diff --git a/target/arm/helper.c b/target/arm/helper.c index c311d2df217..3879bce8489 100644 --- a/target/arm/helper.c +++ b/target/arm/helper.c @@ -6663,7 +6663,7 @@ void aarch64_set_svcr(CPUARMState *env, uint64_t new,= uint64_t mask) * when disabled either. */ if (change & new & R_SVCR_ZA_MASK) { - memset(env->zarray, 0, sizeof(env->zarray)); + memset(&env->za_state, 0, sizeof(env->za_state)); } =20 if (tcg_enabled()) { diff --git a/target/arm/machine.c b/target/arm/machine.c index e442d485241..6e73368ef97 100644 --- a/target/arm/machine.c +++ b/target/arm/machine.c @@ -315,7 +315,7 @@ static const VMStateDescription vmstate_za =3D { .minimum_version_id =3D 1, .needed =3D za_needed, .fields =3D (const VMStateField[]) { - VMSTATE_STRUCT_ARRAY(env.zarray, ARMCPU, ARM_MAX_VQ * 16, 0, + VMSTATE_STRUCT_ARRAY(env.za_state.za, ARMCPU, ARM_MAX_VQ * 16, 0, vmstate_vreg, ARMVectorReg), VMSTATE_END_OF_LIST() } diff --git a/target/arm/tcg/sme_helper.c b/target/arm/tcg/sme_helper.c index 9942d717aaa..7b0bc1b17c0 100644 --- a/target/arm/tcg/sme_helper.c +++ b/target/arm/tcg/sme_helper.c @@ -39,12 +39,12 @@ void helper_sme_zero(CPUARMState *env, uint32_t imm, ui= nt32_t svl) uint32_t i; =20 /* - * Special case clearing the entire ZA space. + * Special case clearing the entire ZArray. * This falls into the CONSTRAINED UNPREDICTABLE zeroing of any * parts of the ZA storage outside of SVL. */ if (imm =3D=3D 0xff) { - memset(env->zarray, 0, sizeof(env->zarray)); + memset(env->za_state.za, 0, sizeof(env->za_state.za)); return; } =20 @@ -54,7 +54,7 @@ void helper_sme_zero(CPUARMState *env, uint32_t imm, uint= 32_t svl) */ for (i =3D 0; i < svl; i++) { if (imm & (1 << (i % 8))) { - memset(&env->zarray[i], 0, svl); + memset(&env->za_state.za[i], 0, svl); } } } diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index 51175c923ef..e8b35781741 100644 --- a/target/arm/tcg/translate-sme.c +++ b/target/arm/tcg/translate-sme.c @@ -92,7 +92,7 @@ static TCGv_ptr get_tile_rowcol(DisasContext *s, int esz,= int rs, offset =3D tile * sizeof(ARMVectorReg); =20 /* Include the byte offset of zarray to make this relative to env. */ - offset +=3D offsetof(CPUARMState, zarray); + offset +=3D offsetof(CPUARMState, za_state.za); tcg_gen_addi_i32(tmp, tmp, offset); =20 /* Add the byte offset to env to produce the final pointer. */ @@ -112,7 +112,7 @@ static TCGv_ptr get_tile(DisasContext *s, int esz, int = tile) TCGv_ptr addr =3D tcg_temp_new_ptr(); int offset; =20 - offset =3D tile * sizeof(ARMVectorReg) + offsetof(CPUARMState, zarray); + offset =3D tile * sizeof(ARMVectorReg) + offsetof(CPUARMState, za_stat= e.za); =20 tcg_gen_addi_ptr(addr, tcg_env, offset); return addr; --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646347; cv=none; d=zohomail.com; s=zohoarc; b=mNstdBfjFbR7aHZKtUDAnm7JYabFAhYgy6KKTzdaV38Uor/BymRJRP/EhPaQKFpw7Ukutenb2JBbH0HuX6mWqdw06DH82cC42GOiIJw7nx7hJe3kCHY4kbGAFWSfeRSQLjm2P088UfRDF4Al7iTLBydVJ3y0/gNHSijVtMjSgWE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646347; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=uBPfSzPUmkkrO04BBwpb4eXji0vKcpAvRC0TSrBdTcQ=; b=LJos5VifX5XF7GHDbh1+LoYxpTfIi1hvKX0p/J5IrBrzSpuuzDn4QkPT5b7yQKF0R8KDKpqtA+Nf2lDm7qwlLzqgcIUHtX3CL9ziIR/+mI16ujNueFHpXNlATIc8wqYd2eMQ5UydPNcRNQg6IHjNGjoWAVhp/5qMeVIwNPwTFBY= 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 1751646347432429.2710037149735; Fri, 4 Jul 2025 09:25:47 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjED-0008T3-Fy; Fri, 04 Jul 2025 12:25:33 -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 1uXjEA-0008R8-Cq for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:30 -0400 Received: from mail-wr1-x435.google.com ([2a00:1450:4864:20::435]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjE8-0006AG-Je for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:30 -0400 Received: by mail-wr1-x435.google.com with SMTP id ffacd0b85a97d-3a4fd1ba177so792737f8f.0 for ; Fri, 04 Jul 2025 09:25:28 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.26 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646327; x=1752251127; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=uBPfSzPUmkkrO04BBwpb4eXji0vKcpAvRC0TSrBdTcQ=; b=AsHMkpegPFoUWpeEGYfohPSoKWq0xQ0MbcyafFXsLUoP9SAuFOJ0V9W/GR2+b5ZVTK dNjyAusK/vZRzH9LKoHmQfijFPm11BdK6GlIuBhtqkvQJaSWgHDgfJtdT9ty32VKVQLR MXHl1DQA3aN6jNFOvTd59QeYI20lx5nnK8WeUZKK9ivRiChFKeRljdBzYSAizlJ5SkVK xRlQuhD+bxU3qUe4ahr/d4xRfPLzRXZI5oDRhC0P+0vQwQH85rf+xnu6C3nUrzjo/Hwc sjCiiDAzgwj6ZQ5GV8hDAN3kQ1tNGEznfOYNxwKltxM+8qaXWLlXqApmvVrIF8sraSP0 kEug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646327; x=1752251127; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=uBPfSzPUmkkrO04BBwpb4eXji0vKcpAvRC0TSrBdTcQ=; b=vl/PVILk6YCvrc3eW7pqgOJKUwkqPiUYVNT5pFOz7BFaGg9SQAHcvo7Hx5RYUUpAe1 5e5NXfiB9JkdM7C8Afgz6+RO31Epzo3Lae5y17lsjWFbF/bw46W/HpA+zhFpia7/0P3x 6VxDIFFyAdfZtNS5gTWs0Siq1Z132PoEK7EF2ePX3oAFE+R+9EY8a02YU96E/lhcvtZ+ PyuxLuLBQPg0CetNETibOrQACoLOBq6EENVGySBew0uzRx6G24pJx5njWDgPnS2i2wQ3 ajIagHZGl+1Ln932sFU1ngCTn1p7CuP2SUqOiZqDg79LrnwlL+8iNk7ViV5O4iNS1mxu kKjQ== X-Gm-Message-State: AOJu0Ywaj/NMvftC0xKAcHCXHR9EQSfOeT85r/Zp/0QVGTNFEQac6rku DjWhbHPNIIexEZhhB3izn7oZ89/+Ov+oXsre+z9Yw+ggxBoV9DhIWq4m9iQ7aPcU5IKb4uh0Ccq bAJMP X-Gm-Gg: ASbGncs92F/dA0DjDGw/RTkP4hxmLATIsqI7pXpkpkRN2e6hYOkB3d+P8SJslgrnWYs VibEH0nEAvrGBgKD8AhumG6SC+pxK/8tydY6VA7nY4rhnQTKIjY3HJaJgpadF57BWY8S/NgOBEq Ul/TXLFUZKnMCptE1vnyIxI5jQ9GPqgGJnwUsz5gop4w7LzQmFZHeENRmcqNdcnibpusNjhuLO7 Wd0ixal3QDFryD9oDBncZoZIEK0bl5rBspWYcOLBRucEPleRJZ6Ibk8U3XAF6ftpeoDJWXmOhQh xS4SqdMb85wcTJqiJM38FW7ZkeE+RjTGSFsGHKzsQ3DRWKpqSKz3FwIUaaTC7MA8zqNxH7WWwq+ apkw= X-Google-Smtp-Source: AGHT+IHJZlXRDN7l0q84CvNQBvnYV5LiwjZk+keWqwTpXBcfH30bFvqlnDKoMRxV3YGuNAjZJ2Tatw== X-Received: by 2002:a5d:5d10:0:b0:3a3:7117:1bba with SMTP id ffacd0b85a97d-3b495cc44b3mr3358814f8f.24.1751646327063; Fri, 04 Jul 2025 09:25:27 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 026/119] target/arm: Add isar feature tests for SME2p1, SVE2p1 Date: Fri, 4 Jul 2025 17:23:26 +0100 Message-ID: <20250704162501.249138-27-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::435; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x435.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751646348427116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-15-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/cpu-features.h | 63 +++++++++++++++++++++++++++++++++++++++ target/arm/cpu.h | 1 + 2 files changed, 64 insertions(+) diff --git a/target/arm/cpu-features.h b/target/arm/cpu-features.h index 5d8adfb73b6..5876162428a 100644 --- a/target/arm/cpu-features.h +++ b/target/arm/cpu-features.h @@ -604,6 +604,11 @@ static inline bool isar_feature_aa64_rpres(const ARMIS= ARegisters *id) return FIELD_EX64_IDREG(id, ID_AA64ISAR2, RPRES); } =20 +static inline bool isar_feature_aa64_lut(const ARMISARegisters *id) +{ + return FIELD_EX64_IDREG(id, ID_AA64ISAR2, LUT); +} + static inline bool isar_feature_aa64_fp_simd(const ARMISARegisters *id) { /* We always set the AdvSIMD and FP fields identically. */ @@ -932,6 +937,11 @@ static inline bool isar_feature_aa64_sve2(const ARMISA= Registers *id) return FIELD_EX64_IDREG(id, ID_AA64ZFR0, SVEVER) !=3D 0; } =20 +static inline bool isar_feature_aa64_sve2p1(const ARMISARegisters *id) +{ + return FIELD_EX64_IDREG(id, ID_AA64ZFR0, SVEVER) >=3D2; +} + static inline bool isar_feature_aa64_sve2_aes(const ARMISARegisters *id) { return FIELD_EX64_IDREG(id, ID_AA64ZFR0, AES) !=3D 0; @@ -977,6 +987,21 @@ static inline bool isar_feature_aa64_sve_f64mm(const A= RMISARegisters *id) return FIELD_EX64_IDREG(id, ID_AA64ZFR0, F64MM) !=3D 0; } =20 +static inline bool isar_feature_aa64_sve_b16b16(const ARMISARegisters *id) +{ + return FIELD_EX64_IDREG(id, ID_AA64ZFR0, B16B16); +} + +static inline bool isar_feature_aa64_sme_b16b16(const ARMISARegisters *id) +{ + return FIELD_EX64_IDREG(id, ID_AA64SMFR0, B16B16); +} + +static inline bool isar_feature_aa64_sme_f16f16(const ARMISARegisters *id) +{ + return FIELD_EX64_IDREG(id, ID_AA64SMFR0, F16F16); +} + static inline bool isar_feature_aa64_sme_f64f64(const ARMISARegisters *id) { return FIELD_EX64_IDREG(id, ID_AA64SMFR0, F64F64); @@ -992,6 +1017,44 @@ static inline bool isar_feature_aa64_sme_fa64(const A= RMISARegisters *id) return FIELD_EX64_IDREG(id, ID_AA64SMFR0, FA64); } =20 +static inline bool isar_feature_aa64_sme2(const ARMISARegisters *id) +{ + return FIELD_EX64_IDREG(id, ID_AA64SMFR0, SMEVER) !=3D 0; +} + +static inline bool isar_feature_aa64_sme2p1(const ARMISARegisters *id) +{ + return FIELD_EX64_IDREG(id, ID_AA64SMFR0, SMEVER) >=3D 2; +} + +/* + * Combinations of feature tests, for ease of use with TRANS_FEAT. + */ +static inline bool isar_feature_aa64_sme_or_sve2p1(const ARMISARegisters *= id) +{ + return isar_feature_aa64_sme(id) || isar_feature_aa64_sve2p1(id); +} + +static inline bool isar_feature_aa64_sme2_or_sve2p1(const ARMISARegisters = *id) +{ + return isar_feature_aa64_sme2(id) || isar_feature_aa64_sve2p1(id); +} + +static inline bool isar_feature_aa64_sme2p1_or_sve2p1(const ARMISARegister= s *id) +{ + return isar_feature_aa64_sme2p1(id) || isar_feature_aa64_sve2p1(id); +} + +static inline bool isar_feature_aa64_sme2_i16i64(const ARMISARegisters *id) +{ + return isar_feature_aa64_sme2(id) && isar_feature_aa64_sme_i16i64(id); +} + +static inline bool isar_feature_aa64_sme2_f64f64(const ARMISARegisters *id) +{ + return isar_feature_aa64_sme2(id) && isar_feature_aa64_sme_f64f64(id); +} + /* * Feature tests for "does this exist in either 32-bit or 64-bit?" */ diff --git a/target/arm/cpu.h b/target/arm/cpu.h index 7db97e80386..c6041a93578 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -2211,6 +2211,7 @@ FIELD(ID_AA64ISAR2, SYSINSTR_128, 36, 4) FIELD(ID_AA64ISAR2, PRFMSLC, 40, 4) FIELD(ID_AA64ISAR2, RPRFM, 48, 4) FIELD(ID_AA64ISAR2, CSSC, 52, 4) +FIELD(ID_AA64ISAR2, LUT, 56, 4) FIELD(ID_AA64ISAR2, ATS1A, 60, 4) =20 FIELD(ID_AA64PFR0, EL0, 0, 4) --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646374; cv=none; d=zohomail.com; s=zohoarc; b=eX4s+kEPeR0vfxSCOrNEBj7DfQC30EmBhAMwxacbKws/DVX/AK9tljJjzWlbudEu7LUeY+4wma+A+iz6VsWk796dUDPsci1WMiYqIpzwOzbVfs7aatE3BKFR2joDPcjH2Ywb/qTD/ywCnLnBvrO5D3Aj+PBTKOSGAsnHBDUHKgY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646374; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=HNTx2jUTtiz41AJHeGve8gVUecgpPInN9pSYsT5KM9g=; b=NkdqCAfxre2Nb9rwUG8l48TDnzztIcqwBcx/0TDmTne4DTIRxJZx0Kb/pG4PJZiZgG4f4lbCWU65KpT+Q//TP7YJoXkJDTcvii/co63Q1Lf9kKSnHVXl8IOSyMxVw2Uw892TDr2Xg2WmC5H44sbpU6XceUsJqX7p5Mi9xFTjdwg= 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 1751646374748970.4617010973046; Fri, 4 Jul 2025 09:26:14 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjEB-0008Rw-Sg; Fri, 04 Jul 2025 12:25:31 -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 1uXjEB-0008Rm-6y for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:31 -0400 Received: from mail-wr1-x436.google.com ([2a00:1450:4864:20::436]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjE9-0006Ah-Dl for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:30 -0400 Received: by mail-wr1-x436.google.com with SMTP id ffacd0b85a97d-3a582e09144so632941f8f.1 for ; Fri, 04 Jul 2025 09:25:29 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.27 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646328; x=1752251128; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=HNTx2jUTtiz41AJHeGve8gVUecgpPInN9pSYsT5KM9g=; b=fi3QLrK+5OzjTZeXkZJRATP4WBmmmtUqVR+pLEQ7D+Fr+DHL36BeUqa8YD6JWBqRfM Q4aQde8U8Va/C8vnGuRUfsd7RpJXsbhyNSkF/TRl7h8fw+kQ6G5hzjyYgYLPf9L1g95g x4O2Lf/GqXZPxMiXVA8Jl7tLKfyqvERBJ135WpkJM2ltiLibsZHxxKrzeEfYYtGevJdu jKvOiAne0hcXqL934ElutfaHD54LwjMpW+BSTU+AX8l1sg3L0MtMZGi4KsMx6K9+ck2d gHcq0ZBfS0qYRSc5iI4Wenod3aJQ572uZFCBba8TPOWPDAHBYjU9y2eqJzSkc4F85X9u OgLg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646328; x=1752251128; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=HNTx2jUTtiz41AJHeGve8gVUecgpPInN9pSYsT5KM9g=; b=ZIYvJj3hXANTMzw5vkn9FA4TmIyZianUpMWdXf7lx6XsX3gyHM9g2BtefW/4bZHDF9 EX4WHPMIBfmxJPVe/7aCOmo5ddHNxfdF+eTeR08I6drbNEVmPu3dsurSnO8sUNaGbcdX 42H3M9q1+qcaMwcCT7Ch5FzjmCBEH7irdDlajEoMVOZ8boHlHMzEAc+iitD/us3/OrDy AnfUTklw2ozZz4H2uE++JxKB92Mfv9gdx1Han+6duF/tmnkGUKzbRIuHBvWxwhT76oEY xnDZOWJpmFWHjBs2qiENkeq4JaIC0ImaCw8sV5JiXLYCCxSCx9r8TLXRLkyO1O3vao8W YJJA== X-Gm-Message-State: AOJu0YxHKb3Tyv3P4Df0vOKIOTWh5HwZ0k4TIijHYM0gGOE3xQCIP/za N2xL9/hM1lSaRfkUCgnmlaqQ8uYXKxs6joDBS0PGCP0X6B6y61trA1ArCkVeADInw/Mq71H14Wi f03xU X-Gm-Gg: ASbGncttrjopITgzkIX66jqJQ7chvj31jOMgLult1DzvqiST/YAfJV0yssgj4vV/tTg P7+ncbdTZDP/2q6Ikf3UGlSBPZ3OB4HjM4vn/jn2+50SY+7U8/tm78qJ2Nz5W+ZgpHjpUMHIWwD 9O1fOHHodVK/sCQ0VP4M9mwULZ2nIGMLy55t4udmJvaEKqCPXhfEYTRkcuPcDSdBxd023T4fkZO 9tvMOYKZTTpwcISjqFSbc53+QIfhKGW3EhnyrZhz0Dx3eJ1gFPFskpTOvJHtSzyRS/d1lU0I6QZ 0iG20afbJx03lsIhD0pfAakvkRwk+Rfk/QkXhE+dMD2JE+/6G1RVNq1SsBOGCLjAAHUe X-Google-Smtp-Source: AGHT+IEPnC3Y02ydmyZoj0cBvEhdKJ1TPz+UidnRra3pIrDh5tqxZD2CYEAGkoSKtLj059JHkOAIhg== X-Received: by 2002:a05:600c:4f49:b0:450:d30e:ff96 with SMTP id 5b1f17b1804b1-454b8b37c22mr12947105e9.0.1751646327896; Fri, 04 Jul 2025 09:25:27 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 027/119] target/arm: Add ZT0 Date: Fri, 4 Jul 2025 17:23:27 +0100 Message-ID: <20250704162501.249138-28-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::436; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x436.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751646376546116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson This is a 512-bit array introduced with SME2. Save it only when ZA is in use. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-16-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/cpu.h | 3 +++ target/arm/machine.c | 20 ++++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/target/arm/cpu.h b/target/arm/cpu.h index c6041a93578..cbc20434836 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -716,6 +716,9 @@ typedef struct CPUArchState { uint64_t scxtnum_el[4]; =20 struct { + /* SME2 ZT0 -- 512 bit array, with data ordered like ARMVectorReg.= */ + uint64_t zt0[512 / 64] QEMU_ALIGNED(16); + /* * SME ZA storage -- 256 x 256 byte array, with bytes in host * word order, as we do with vfp.zregs[]. This corresponds to diff --git a/target/arm/machine.c b/target/arm/machine.c index 6e73368ef97..6986915bee8 100644 --- a/target/arm/machine.c +++ b/target/arm/machine.c @@ -321,6 +321,25 @@ static const VMStateDescription vmstate_za =3D { } }; =20 +static bool zt0_needed(void *opaque) +{ + ARMCPU *cpu =3D opaque; + + return za_needed(cpu) && cpu_isar_feature(aa64_sme2, cpu); +} + +static const VMStateDescription vmstate_zt0 =3D { + .name =3D "cpu/zt0", + .version_id =3D 1, + .minimum_version_id =3D 1, + .needed =3D zt0_needed, + .fields =3D (VMStateField[]) { + VMSTATE_UINT64_ARRAY(env.za_state.zt0, ARMCPU, + ARRAY_SIZE(((CPUARMState *)0)->za_state.zt0)), + VMSTATE_END_OF_LIST() + } +}; + static bool serror_needed(void *opaque) { ARMCPU *cpu =3D opaque; @@ -1096,6 +1115,7 @@ const VMStateDescription vmstate_arm_cpu =3D { &vmstate_m_security, &vmstate_sve, &vmstate_za, + &vmstate_zt0, &vmstate_serror, &vmstate_irq_line_state, &vmstate_wfxt_timer, --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646904; cv=none; d=zohomail.com; s=zohoarc; b=HRpGbqDh92gPVTOWXD37ZG8E63+CZQHLh6DeB3KQQ2Uu299LtKUHDRoqLX7nGDbtsaPCd8OeQtkHpM7GrePDSx0B+WLD7USDzjrXF09xt5/vjIxqVFRJI//URIroaOBsyz2B/7ST8dREd1HvRmPDwW0scKS4M7bYqnfZyhVqNTI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646904; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=oKJajPVNDiBfbKBnnOuTzq+dn0t+mh0UzlVR45H+DLw=; b=eo9eRl2Z3uFXWK2UQNPLAYq4RiA9QKyVSjuReu31ek3RY7skPSkJxhTPXT4PZHS7vxk9F2dGKpo5S6TMHvSYB9EJ5bChym4hSekA78jVFkDwhhshyA0INe6B6Z/dcMGVDltTtTJNzChaB1UUfgB1Pda+Tb+fBFrZx+NmJCJZKoM= 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 1751646904620685.4290336357215; Fri, 4 Jul 2025 09:35:04 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjEE-0008UE-ME; Fri, 04 Jul 2025 12:25:34 -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 1uXjEC-0008Sq-VR for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:32 -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 1uXjEA-0006Au-Fq for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:32 -0400 Received: by mail-wm1-x333.google.com with SMTP id 5b1f17b1804b1-453398e90e9so7306895e9.1 for ; Fri, 04 Jul 2025 09:25:30 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.27 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646329; x=1752251129; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=oKJajPVNDiBfbKBnnOuTzq+dn0t+mh0UzlVR45H+DLw=; b=knqimNeG+h6yAIiapTRSSinF+TGmXw9LhGzHAAVCIK4v9on4bIqEj0ShbDfrAWKEwM R7GHvfnCAsVohdE0TNKjClHgOrm1SrtwvaGoO7iGvFYfGpbZmwHplFGnwHDFO3VsgZj5 hUitvA6nRrC1TJBxiEcu3higRQauK3bkDm+geeyN6XwI66D3LhqgKCDTPrThKERzvNO/ lzCjdCy0MEDr+aj23y1KLRfboZ9BzHuGucBkvkvDJhQz2sqCWXItB9tqDvM5SNsJ7QOi pDiLfjsYMSg/Bj7X6mbZlWVYoEJVzQG6KQQmVYqsHhAMpI8s6AnC1eSQtkQBaXB8985I 026g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646329; x=1752251129; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=oKJajPVNDiBfbKBnnOuTzq+dn0t+mh0UzlVR45H+DLw=; b=kleTGQGiPJFGZkVVnE4YLll51H8cYkXaSzppgjiBXB2mqUfk2gFc3lCX2TyLmcc2JC hnG+XQB+UC0TInHmNrh7wHsUKeurUr2INRST/G8LEKus5ajE0EYxGhvihTzIp8tcUrhM pyG5kC5gSBJYza5fsRIpJT6KW7YYxcgrLehAiqSd7YLkshSKf7jM22VMHrQYQdSSQs7S o5Kov0jrMW2aucrkTLcZxeIJLmwKo+p2ar9UKuuM//JS4XE+Gt43OPoLtcPctxEUMT9Y aBPrAHsOFlA3B1Iowl5Ww75/neH20z308vFBGdDMxvTqwkZw/zBwEdEpYN+e7srnzxD4 eesA== X-Gm-Message-State: AOJu0YyIG8f6034qH/gK921hiGEaqVfG82erd6PvLEAk5+605OzE0oXx qoAuT/FgO/rODHXODhf6Q5WruW1ug1Znr/UC5dpmN8cW/X1cz+0qeYkp57THMyrdGqQmYt6fS4i y1UH0 X-Gm-Gg: ASbGncsPMfMgMSJi3VBBIG4x8vBOi1yDdpDX+BX+AADDrxASKJN9e2223FA8GScwGCG hs9m1UkQMb8vjvmrrgX2KiTYbto0mxF4fiiZxIjksrMhHm4c88/iHlorEMODSFXBaztQTUKT6Kh HyWfCIA2Kuu9T8uyFWo+iK1TnAZN4rBawIwSmU+O6AhkYpel+A0siDRDmysZqMTfTLV/6lFA9NX m4HWUw7g+CbSIemTEP4KZdD6LfnPDkfm1e1KSOoyOcq4FE0pe8O4nQW24LHFayNdCt0lkJHWn0C Dah6kRt81SeDiSt1lWoZqPlcSpsmyAPadUTsRUvXQLw7GwJxdggS2pEsRf6pYQxixOfH X-Google-Smtp-Source: AGHT+IH9pn28oN5TDzdIacOObSEE+Q+rNEPLkXjkJUkLUJjybSElrDeASVAL4CwRugL9f/rDXpwqSA== X-Received: by 2002:a05:600c:46c8:b0:43d:563:6fef with SMTP id 5b1f17b1804b1-454b9f2f337mr917955e9.21.1751646328792; Fri, 04 Jul 2025 09:25:28 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 028/119] target/arm: Add zt0_excp_el to DisasContext Date: Fri, 4 Jul 2025 17:23:28 +0100 Message-ID: <20250704162501.249138-29-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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=peter.maydell@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 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: 1751646905279116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Pipe the value through from SMCR_ELx through hflags and into the disassembly context. Enable EZT0 in smcr_write. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-17-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/cpu.h | 2 ++ target/arm/tcg/translate.h | 1 + target/arm/cpu.c | 3 +++ target/arm/helper.c | 6 +++++- target/arm/tcg/hflags.c | 34 +++++++++++++++++++++++++++++++++- target/arm/tcg/translate-a64.c | 1 + 6 files changed, 45 insertions(+), 2 deletions(-) diff --git a/target/arm/cpu.h b/target/arm/cpu.h index cbc20434836..39a9234ff28 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -1513,6 +1513,7 @@ FIELD(SVCR, ZA, 1, 1) =20 /* Fields for SMCR_ELx. */ FIELD(SMCR, LEN, 0, 4) +FIELD(SMCR, EZT0, 30, 1) FIELD(SMCR, FA64, 31, 1) =20 /* Write a new value to v7m.exception, thus transitioning into or out @@ -3084,6 +3085,7 @@ FIELD(TBFLAG_A64, NV2_MEM_E20, 35, 1) FIELD(TBFLAG_A64, NV2_MEM_BE, 36, 1) FIELD(TBFLAG_A64, AH, 37, 1) /* FPCR.AH */ FIELD(TBFLAG_A64, NEP, 38, 1) /* FPCR.NEP */ +FIELD(TBFLAG_A64, ZT0EXC_EL, 39, 2) =20 /* * Helpers for using the above. Note that only the A64 accessors use diff --git a/target/arm/tcg/translate.h b/target/arm/tcg/translate.h index 0004a97219b..b03956a7937 100644 --- a/target/arm/tcg/translate.h +++ b/target/arm/tcg/translate.h @@ -70,6 +70,7 @@ typedef struct DisasContext { int fp_excp_el; /* FP exception EL or 0 if enabled */ int sve_excp_el; /* SVE exception EL or 0 if enabled */ int sme_excp_el; /* SME exception EL or 0 if enabled */ + int zt0_excp_el; /* ZT0 exception EL or 0 if enabled */ int vl; /* current vector length in bytes */ int svl; /* current streaming vector length in bytes */ bool vfp_enabled; /* FP enabled via FPSCR.EN */ diff --git a/target/arm/cpu.c b/target/arm/cpu.c index 62656277625..08c43f674a2 100644 --- a/target/arm/cpu.c +++ b/target/arm/cpu.c @@ -635,6 +635,9 @@ void arm_emulate_firmware_reset(CPUState *cpustate, int= target_el) env->cp15.cptr_el[3] |=3D R_CPTR_EL3_ESM_MASK; env->cp15.scr_el3 |=3D SCR_ENTP2; env->vfp.smcr_el[3] =3D 0xf; + if (cpu_isar_feature(aa64_sme2, cpu)) { + env->vfp.smcr_el[3] |=3D R_SMCR_EZT0_MASK; + } } if (cpu_isar_feature(aa64_hcx, cpu)) { env->cp15.scr_el3 |=3D SCR_HXEN; diff --git a/target/arm/helper.c b/target/arm/helper.c index 3879bce8489..b3f0d6f17a8 100644 --- a/target/arm/helper.c +++ b/target/arm/helper.c @@ -6682,10 +6682,14 @@ static void smcr_write(CPUARMState *env, const ARMC= PRegInfo *ri, { int cur_el =3D arm_current_el(env); int old_len =3D sve_vqm1_for_el(env, cur_el); + uint64_t valid_mask =3D R_SMCR_LEN_MASK | R_SMCR_FA64_MASK; int new_len; =20 QEMU_BUILD_BUG_ON(ARM_MAX_VQ > R_SMCR_LEN_MASK + 1); - value &=3D R_SMCR_LEN_MASK | R_SMCR_FA64_MASK; + if (cpu_isar_feature(aa64_sme2, env_archcpu(env))) { + valid_mask |=3D R_SMCR_EZT0_MASK; + } + value &=3D valid_mask; raw_write(env, ri, value); =20 /* diff --git a/target/arm/tcg/hflags.c b/target/arm/tcg/hflags.c index 1ccec63bbd4..59ab5263753 100644 --- a/target/arm/tcg/hflags.c +++ b/target/arm/tcg/hflags.c @@ -214,6 +214,31 @@ static CPUARMTBFlags rebuild_hflags_a32(CPUARMState *e= nv, int fp_el, return rebuild_hflags_common_32(env, fp_el, mmu_idx, flags); } =20 +/* + * Return the exception level to which exceptions should be taken for ZT0. + * C.f. the ARM pseudocode function CheckSMEZT0Enabled, after the ZA check. + */ +static int zt0_exception_el(CPUARMState *env, int el) +{ +#ifndef CONFIG_USER_ONLY + if (el <=3D 1 + && !el_is_in_host(env, el) + && !FIELD_EX64(env->vfp.smcr_el[1], SMCR, EZT0)) { + return 1; + } + if (el <=3D 2 + && arm_is_el2_enabled(env) + && !FIELD_EX64(env->vfp.smcr_el[2], SMCR, EZT0)) { + return 2; + } + if (arm_feature(env, ARM_FEATURE_EL3) + && !FIELD_EX64(env->vfp.smcr_el[3], SMCR, EZT0)) { + return 3; + } +#endif + return 0; +} + static CPUARMTBFlags rebuild_hflags_a64(CPUARMState *env, int el, int fp_e= l, ARMMMUIdx mmu_idx) { @@ -269,7 +294,14 @@ static CPUARMTBFlags rebuild_hflags_a64(CPUARMState *e= nv, int el, int fp_el, DP_TBFLAG_A64(flags, PSTATE_SM, 1); DP_TBFLAG_A64(flags, SME_TRAP_NONSTREAMING, !sme_fa64(env, el)= ); } - DP_TBFLAG_A64(flags, PSTATE_ZA, FIELD_EX64(env->svcr, SVCR, ZA)); + + if (FIELD_EX64(env->svcr, SVCR, ZA)) { + DP_TBFLAG_A64(flags, PSTATE_ZA, 1); + if (cpu_isar_feature(aa64_sme2, env_archcpu(env))) { + int zt0_el =3D zt0_exception_el(env, el); + DP_TBFLAG_A64(flags, ZT0EXC_EL, zt0_el); + } + } } =20 sctlr =3D regime_sctlr(env, stage1); diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c index b0caccca46e..ad293c08858 100644 --- a/target/arm/tcg/translate-a64.c +++ b/target/arm/tcg/translate-a64.c @@ -10139,6 +10139,7 @@ static void aarch64_tr_init_disas_context(DisasCont= extBase *dcbase, dc->trap_eret =3D EX_TBFLAG_A64(tb_flags, TRAP_ERET); dc->sve_excp_el =3D EX_TBFLAG_A64(tb_flags, SVEEXC_EL); dc->sme_excp_el =3D EX_TBFLAG_A64(tb_flags, SMEEXC_EL); + dc->zt0_excp_el =3D EX_TBFLAG_A64(tb_flags, ZT0EXC_EL); dc->vl =3D (EX_TBFLAG_A64(tb_flags, VL) + 1) * 16; dc->svl =3D (EX_TBFLAG_A64(tb_flags, SVL) + 1) * 16; dc->pauth_active =3D EX_TBFLAG_A64(tb_flags, PAUTH_ACTIVE); --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646566; cv=none; d=zohomail.com; s=zohoarc; b=R5+s9g5dbaRiDEoimGjBamuuxrDFQaHR91Zv7froC9aOWl1WTcezudZxZ37w7JRe8Lrh4o6y/mtnDtNCQJlKxQMM6bp6TIEVfn6lK+3QUYYjDFxEbreZ3lgIqVng0g0nnkYcubkEyfEVHaZ6nBGxZGqYVQ97lXAemJO2cXMVHYA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646566; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=CXGsqn2ldYgeN44ysuqaE8o/89zuJWxYO0GwSq5pdq0=; b=bGUEnCpkGkxgiO4Yy147tJN0PvqV7t4A8fhM83HiER5WcPA0jycs91T9A1gs9mzzsEL9/3NpuYobX/IN0n3RwJeZPpBe1/Fetx2wxIqPjRulgayw4+OpxSCziiTlQlguSjt0F1oahNB9Ntd4J98xZjy4NSsVDMV+C1Dd5pe1MJM= 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 1751646566114595.2404262560586; Fri, 4 Jul 2025 09:29:26 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjEG-0008UN-6y; Fri, 04 Jul 2025 12:25:36 -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 1uXjEE-0008UA-HB for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:34 -0400 Received: from mail-wr1-x432.google.com ([2a00:1450:4864:20::432]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjEC-0006BH-O0 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:34 -0400 Received: by mail-wr1-x432.google.com with SMTP id ffacd0b85a97d-3a54690d369so1116103f8f.3 for ; Fri, 04 Jul 2025 09:25:31 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.28 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646330; x=1752251130; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=CXGsqn2ldYgeN44ysuqaE8o/89zuJWxYO0GwSq5pdq0=; b=y/0qhdbyLNh4RyQ22qRFzj/7K0+E+xux5UA6lQSeiStp4EEF21wtACN3RnHOtrATFR eLtnfMoLDrZfekbA5AS6OSQ3nDKYHbr4azx1Omg/PvZOeJji2L4zqmq9N0yqSRaBLz0k 6GRX5Gy4dFn1uXKIxtiAoSk1JtbPbWnPLEeSSbHiJ4Q5YwmLD5nAa80qhjKWBKWm+ytg rchxqHeqK7Vk9a/eqvRkcnKLqTlyJS7fzW6R7R+rQi0i7k3V4jbMzFRw19B9j51L3WYo KvK5WeqgJeIGwDXeX+EHP5baqjcUu4aKxFVtkdWRABmnp4VIgwRPWlLGBzPQlpWsKNew VTNg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646330; x=1752251130; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=CXGsqn2ldYgeN44ysuqaE8o/89zuJWxYO0GwSq5pdq0=; b=IWWxAbW/DmFSImjcXLYefYZi7r+M0FlLruSBvHPZGqgOi+rb9Lzyq7Aw6uLMpEg/HT DdEojVq+rQgPKGYQpJnBqTAQ3f8W8RLNbH+Rukjt8/lBbBb3mCxkhBWs1bzxkCFl1XPg RDLcXWr/T8U6XG31JzZGBkNw4WsKGo4zPHuaFG2b/TTLSmwozdKaE59Kb2KtQ6XMueh8 ozAYJv1ghpFFbkm9H4TJMNzv+f+tufImvQkG7wfSBSz2ze1Sd42JXKehA78Mxl4isrjh U7U13FiunHBRFYzb/DyKZQYtSDUERAhOi6OdcP5MLDvKbTXURAOwwMPxAGRd+E8wfXHV oe6w== X-Gm-Message-State: AOJu0YzL9cxR3LEFC+RUChvSEJRJi6PGu8+r/8MoWZuK6irrhBkqFhsC w89MRq5xv2zx2l+4vcVxDzpuc2AOkJbD54UI3lndiWLdTP8F8g+FkO6N/hcNCLnCn9fNBi6kro+ qr1jX X-Gm-Gg: ASbGncsHEbUzTNys8FTB/Qg2h8Dq5qWDr1KwOLGGHp1/3eUikfAjRXr4NwAudWdXuCD bzTLQd74lbe9xnL1g11Oe97wz0V9MMsyOKKDZdfy8f919D6KFgcNv3fPW92x9SQsvTuKpNOwTAO ETTDIlEXKrdwoCKzIl7LrFLt5Ynvs+eNlKkjvFtr0V4aox+RWj2nhYL2rMKuDV/O6v+wsbikYy5 Dhmc2dl+uF6ZZBGfd/6+CEks/DTtPtAKIcdBWvABBpOC2mRyf4kBqZPZBlj0/xEX4KxlYF9vYgw Pq3ObG7k6YRU7qaHF8zDLMakMDIC1DgUVaac9A5MmS/6k/50iWHYAHrtZF2LH/cYT6rU X-Google-Smtp-Source: AGHT+IFhYuteHg1OpNUXl3629XiOV20PKgQrm1XPH1kJX+0v7IjT+F8ubbW7B+wRJqR7Ao2A/BWBfQ== X-Received: by 2002:a05:6000:642:b0:3b4:9721:2b31 with SMTP id ffacd0b85a97d-3b497212dd7mr2596166f8f.5.1751646329677; Fri, 04 Jul 2025 09:25:29 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 029/119] target/arm: Implement SME2 ZERO ZT0 Date: Fri, 4 Jul 2025 17:23:29 +0100 Message-ID: <20250704162501.249138-30-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::432; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x432.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751646566822116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-18-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/syndrome.h | 1 + target/arm/tcg/sme.decode | 1 + target/arm/tcg/translate-sme.c | 26 ++++++++++++++++++++++++++ 3 files changed, 28 insertions(+) diff --git a/target/arm/syndrome.h b/target/arm/syndrome.h index 3244e0740dd..c48d3b85871 100644 --- a/target/arm/syndrome.h +++ b/target/arm/syndrome.h @@ -80,6 +80,7 @@ typedef enum { SME_ET_Streaming, SME_ET_NotStreaming, SME_ET_InactiveZA, + SME_ET_InaccessibleZT0, } SMEExceptionType; =20 #define ARM_EL_EC_LENGTH 6 diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 628804e37a8..dd1f983941a 100644 --- a/target/arm/tcg/sme.decode +++ b/target/arm/tcg/sme.decode @@ -22,6 +22,7 @@ ### SME Misc =20 ZERO 11000000 00 001 00000000000 imm:8 +ZERO_zt0 11000000 01 001 00000000000 00000001 =20 ### SME Move into/from Array =20 diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index e8b35781741..246f191eca2 100644 --- a/target/arm/tcg/translate-sme.c +++ b/target/arm/tcg/translate-sme.c @@ -27,6 +27,19 @@ =20 #include "decode-sme.c.inc" =20 +static bool sme2_zt0_enabled_check(DisasContext *s) +{ + if (!sme_za_enabled_check(s)) { + return false; + } + if (s->zt0_excp_el) { + gen_exception_insn_el(s, 0, EXCP_UDEF, + syn_smetrap(SME_ET_InaccessibleZT0, false), + s->zt0_excp_el); + return false; + } + return true; +} =20 /* * Resolve tile.size[index] to a host pointer, where tile and index @@ -130,6 +143,19 @@ static bool trans_ZERO(DisasContext *s, arg_ZERO *a) return true; } =20 +static bool trans_ZERO_zt0(DisasContext *s, arg_ZERO_zt0 *a) +{ + if (!dc_isar_feature(aa64_sme2, s)) { + return false; + } + if (sme_enabled_check(s) && sme2_zt0_enabled_check(s)) { + tcg_gen_gvec_dup_imm(MO_64, offsetof(CPUARMState, za_state.zt0), + sizeof_field(CPUARMState, za_state.zt0), + sizeof_field(CPUARMState, za_state.zt0), 0); + } + return true; +} + static bool trans_MOVA(DisasContext *s, arg_MOVA *a) { static gen_helper_gvec_4 * const h_fns[5] =3D { --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646976; cv=none; d=zohomail.com; s=zohoarc; b=fQrk2Vu1CrGDzletgUQGbQNjI3jaAiKlpYe/bGtM71+Iw1QHKCeFlEvA6NUCVH8Qx0bpNqqEjjZMF2f2SpvU6IN2PaKFjkXMqE/FF/ThvVvC1vSGWeL4wybeL+twlRupL4cfDyUqJHGuGLTmfzfCAq98DZgEhddg7A7QNj0BoyI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646976; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=AX6lSFvuJZRlBDTjE81KModGHPcQQt3xlR79uNFSkaU=; b=WWlXKDA6v0PlITX8UnFwvB3zNd/NT+/nh+ZZ1rV35LGEfSJXEx/Q4pzf2Ff/p+NYL42bymi/bnq39l83T5/rowj/waAgfozamtP5eQWzDX5J2emJH4b8KeNffSx32sVv1aUjCCPKV5wsWxQYcoKtw1axr2vigpu5ocQ/CWEdYWQ= 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 1751646976193208.98010919172134; Fri, 4 Jul 2025 09:36:16 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjEJ-0000HT-9S; Fri, 04 Jul 2025 12:25:39 -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 1uXjEG-0008UO-8x for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:36 -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 1uXjEC-0006Bu-O6 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:35 -0400 Received: by mail-wr1-x42a.google.com with SMTP id ffacd0b85a97d-3a507e88b0aso848033f8f.1 for ; Fri, 04 Jul 2025 09:25:32 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.29 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646331; x=1752251131; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=AX6lSFvuJZRlBDTjE81KModGHPcQQt3xlR79uNFSkaU=; b=l2tvPJG2zz5KlKelmBbZ5pRo4ltgk1PlK7zpT/G9bFo+vCAPTyqU5rBFb0ab4tgfga E51DqqNYLeFgfy3N0DRYSkRgJy6wzKK5NO9Ugmjkg2kLvMRmxmtLld3LNpV3SUCqjpQ5 DWB97LtpZxidCOSFGfEA+2mWEHIg3Ei/qSgycJ+EdyBa1HW3WTETHGi+oaZ2uxLXdLpU +f2Q7U9G2vehwPRRD43DvjXRGxUuXWsXPsrvTHltBg2THdM3Cva5PHapXtsRngEGGm42 RroG+f/v+9ZdW8pU+Sx23CY1pFpmHEXeLSZQ7VTGORihzXTPx4f8+QkFeMT86zumsQxL JIeg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646331; x=1752251131; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=AX6lSFvuJZRlBDTjE81KModGHPcQQt3xlR79uNFSkaU=; b=WFixxjMIsk58QVvVUKhJHaT9LwHzf3CuwTmgcmpPh6lJ3PKrt/moK781zDeOkDu9Gv 9scpCSpzNftKT9ogjX1gqIxYKbBmP6YpEovHThMncq5NdznDcZlx8rypAW3Yo3n1T/qy Q9lVrVEDh+oRL2GCWNwybGV4pRck/TpIxcpK83sIvJDMaw+sLFapIw7FDQbN4KLYRFOd wqREmm6hoj/RGyURkOjay2gdxFJVSsf9rwQAcJe0i7j3xc9/ErgdVJL4qeSZsHG1mlxt RFDtC/GfQg2lgx1CJWfpamVNo8/xV5DmG9CBc7j3s1f/0o7i0AOnzPcBw6bOw7LHnpsz t38g== X-Gm-Message-State: AOJu0YwTVIkFlno+nDBnhLcPmzueoedlk7jXn7vko4urhzvSxbxu49dd s9DP79armwlejDIGfA5M308Ts56NiuDjI+pyvWq5G5TJBHMKTsrjR+3dq5u1oPNczl5KRPvt2IC x5xW+ X-Gm-Gg: ASbGncvZKGy8CqI2ez2rjhj4yjaPigY2b9i5YcfpjMAWFYy9Xh9NtzrNO1uPRsCm/db r7KEXc2NlRwSqiDDZVcNJbQ2StvsaeCxh7hJi1E9Nkjr4/15eBLNSJjEgYiY9w2FK7aCY3EtHnd ef8Pg9lrKf70K5L1kcAwFsYruZEmjYojjLxvYLlsPkJ0YgpAHSyRvBYRN04tPgaPDR/Nd2fHW0z z8JWyB/O/hqQNQf2KPagTpUg9JMTgRnGuQzgIjtsfV0FgHZq0ZnxPURkmtLn9FEFhk5qIY/GF58 OaspGrdbnGrk0c/P+Fb6Vm9AiXmt0nygpHefVv3iN9Jf1xJAZR+nYts+Rxw4ezmKOU08 X-Google-Smtp-Source: AGHT+IFxoZYnwmzxHCqdnEEMc3JVn58ooPnfbNenDPdCyapDuy5KlARW/HXWAyPY136uspN5Mc9NQw== X-Received: by 2002:a05:6000:4908:b0:3a5:2ec5:35a9 with SMTP id ffacd0b85a97d-3b4964f4e01mr2984647f8f.3.1751646330925; Fri, 04 Jul 2025 09:25:30 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 030/119] target/arm: Add alignment argument to gen_sve_{ldr, str} Date: Fri, 4 Jul 2025 17:23:30 +0100 Message-ID: <20250704162501.249138-31-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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=peter.maydell@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 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: 1751646977943116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Honor AlignmentEnforced() for LDR/STR (vector), (predicate), and (array vector). Within the expansion functions, clear @align when we're done emitting loads at the largest size. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-19-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/translate-a64.h | 6 ++-- target/arm/tcg/translate-sme.c | 5 ++-- target/arm/tcg/translate-sve.c | 50 ++++++++++++++++++++++++---------- 3 files changed, 42 insertions(+), 19 deletions(-) diff --git a/target/arm/tcg/translate-a64.h b/target/arm/tcg/translate-a64.h index b2420f59ebe..8a9f4b20539 100644 --- a/target/arm/tcg/translate-a64.h +++ b/target/arm/tcg/translate-a64.h @@ -225,7 +225,9 @@ void gen_gvec_usqadd_qc(unsigned vece, uint32_t rd_ofs, uint32_t rn_ofs, uint32_t rm_ofs, uint32_t opr_sz, uint32_t max_sz); =20 -void gen_sve_ldr(DisasContext *s, TCGv_ptr, int vofs, int len, int rn, int= imm); -void gen_sve_str(DisasContext *s, TCGv_ptr, int vofs, int len, int rn, int= imm); +void gen_sve_ldr(DisasContext *s, TCGv_ptr, int vofs, + int len, int rn, int imm, MemOp align); +void gen_sve_str(DisasContext *s, TCGv_ptr, int vofs, + int len, int rn, int imm, MemOp align); =20 #endif /* TARGET_ARM_TRANSLATE_A64_H */ diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index 246f191eca2..1dbd0199af0 100644 --- a/target/arm/tcg/translate-sme.c +++ b/target/arm/tcg/translate-sme.c @@ -269,7 +269,7 @@ static bool trans_LDST1(DisasContext *s, arg_LDST1 *a) return true; } =20 -typedef void GenLdStR(DisasContext *, TCGv_ptr, int, int, int, int); +typedef void GenLdStR(DisasContext *, TCGv_ptr, int, int, int, int, MemOp); =20 static bool do_ldst_r(DisasContext *s, arg_ldstr *a, GenLdStR *fn) { @@ -284,7 +284,8 @@ static bool do_ldst_r(DisasContext *s, arg_ldstr *a, Ge= nLdStR *fn) /* ZA[n] equates to ZA0H.B[n]. */ base =3D get_tile_rowcol(s, MO_8, a->rv, imm, false); =20 - fn(s, base, 0, svl, a->rn, imm * svl); + fn(s, base, 0, svl, a->rn, imm * svl, + s->align_mem ? MO_ALIGN_16 : MO_UNALN); return true; } =20 diff --git a/target/arm/tcg/translate-sve.c b/target/arm/tcg/translate-sve.c index 8403034a0e2..d2cd298b5b2 100644 --- a/target/arm/tcg/translate-sve.c +++ b/target/arm/tcg/translate-sve.c @@ -4160,7 +4160,7 @@ TRANS_FEAT(UCVTF_dd, aa64_sve, gen_gvec_fpst_arg_zpz, */ =20 void gen_sve_ldr(DisasContext *s, TCGv_ptr base, int vofs, - int len, int rn, int imm) + int len, int rn, int imm, MemOp align) { int len_align =3D QEMU_ALIGN_DOWN(len, 16); int len_remain =3D len % 16; @@ -4189,12 +4189,15 @@ void gen_sve_ldr(DisasContext *s, TCGv_ptr base, in= t vofs, =20 for (i =3D 0; i < len_align; i +=3D 16) { tcg_gen_qemu_ld_i128(t16, clean_addr, midx, - MO_LE | MO_128 | MO_ATOM_NONE); + MO_LE | MO_128 | MO_ATOM_NONE | align); tcg_gen_extr_i128_i64(t0, t1, t16); tcg_gen_st_i64(t0, base, vofs + i); tcg_gen_st_i64(t1, base, vofs + i + 8); tcg_gen_addi_i64(clean_addr, clean_addr, 16); } + if (len_align) { + align =3D MO_UNALN; + } } else { TCGLabel *loop =3D gen_new_label(); TCGv_ptr tp, i =3D tcg_temp_new_ptr(); @@ -4204,7 +4207,7 @@ void gen_sve_ldr(DisasContext *s, TCGv_ptr base, int = vofs, =20 t16 =3D tcg_temp_new_i128(); tcg_gen_qemu_ld_i128(t16, clean_addr, midx, - MO_LE | MO_128 | MO_ATOM_NONE); + MO_LE | MO_128 | MO_ATOM_NONE | align); tcg_gen_addi_i64(clean_addr, clean_addr, 16); =20 tp =3D tcg_temp_new_ptr(); @@ -4219,6 +4222,7 @@ void gen_sve_ldr(DisasContext *s, TCGv_ptr base, int = vofs, tcg_gen_st_i64(t1, tp, vofs + 8); =20 tcg_gen_brcondi_ptr(TCG_COND_LTU, i, len_align, loop); + align =3D MO_UNALN; } =20 /* @@ -4227,7 +4231,9 @@ void gen_sve_ldr(DisasContext *s, TCGv_ptr base, int = vofs, */ if (len_remain >=3D 8) { t0 =3D tcg_temp_new_i64(); - tcg_gen_qemu_ld_i64(t0, clean_addr, midx, MO_LEUQ | MO_ATOM_NONE); + tcg_gen_qemu_ld_i64(t0, clean_addr, midx, + MO_LEUQ | MO_ATOM_NONE | align); + align =3D MO_UNALN; tcg_gen_st_i64(t0, base, vofs + len_align); len_remain -=3D 8; len_align +=3D 8; @@ -4242,12 +4248,14 @@ void gen_sve_ldr(DisasContext *s, TCGv_ptr base, in= t vofs, case 4: case 8: tcg_gen_qemu_ld_i64(t0, clean_addr, midx, - MO_LE | ctz32(len_remain) | MO_ATOM_NONE); + MO_LE | ctz32(len_remain) + | MO_ATOM_NONE | align); break; =20 case 6: t1 =3D tcg_temp_new_i64(); - tcg_gen_qemu_ld_i64(t0, clean_addr, midx, MO_LEUL | MO_ATOM_NO= NE); + tcg_gen_qemu_ld_i64(t0, clean_addr, midx, + MO_LEUL | MO_ATOM_NONE | align); tcg_gen_addi_i64(clean_addr, clean_addr, 4); tcg_gen_qemu_ld_i64(t1, clean_addr, midx, MO_LEUW | MO_ATOM_NO= NE); tcg_gen_deposit_i64(t0, t0, t1, 32, 32); @@ -4262,7 +4270,7 @@ void gen_sve_ldr(DisasContext *s, TCGv_ptr base, int = vofs, =20 /* Similarly for stores. */ void gen_sve_str(DisasContext *s, TCGv_ptr base, int vofs, - int len, int rn, int imm) + int len, int rn, int imm, MemOp align) { int len_align =3D QEMU_ALIGN_DOWN(len, 16); int len_remain =3D len % 16; @@ -4294,9 +4302,12 @@ void gen_sve_str(DisasContext *s, TCGv_ptr base, int= vofs, tcg_gen_ld_i64(t1, base, vofs + i + 8); tcg_gen_concat_i64_i128(t16, t0, t1); tcg_gen_qemu_st_i128(t16, clean_addr, midx, - MO_LE | MO_128 | MO_ATOM_NONE); + MO_LE | MO_128 | MO_ATOM_NONE | align); tcg_gen_addi_i64(clean_addr, clean_addr, 16); } + if (len_align) { + align =3D MO_UNALN; + } } else { TCGLabel *loop =3D gen_new_label(); TCGv_ptr tp, i =3D tcg_temp_new_ptr(); @@ -4320,13 +4331,16 @@ void gen_sve_str(DisasContext *s, TCGv_ptr base, in= t vofs, tcg_gen_addi_i64(clean_addr, clean_addr, 16); =20 tcg_gen_brcondi_ptr(TCG_COND_LTU, i, len_align, loop); + align =3D MO_UNALN; } =20 /* Predicate register stores can be any multiple of 2. */ if (len_remain >=3D 8) { t0 =3D tcg_temp_new_i64(); tcg_gen_ld_i64(t0, base, vofs + len_align); - tcg_gen_qemu_st_i64(t0, clean_addr, midx, MO_LEUQ | MO_ATOM_NONE); + tcg_gen_qemu_st_i64(t0, clean_addr, midx, + MO_LEUQ | MO_ATOM_NONE | align); + align =3D MO_UNALN; len_remain -=3D 8; len_align +=3D 8; if (len_remain) { @@ -4342,11 +4356,13 @@ void gen_sve_str(DisasContext *s, TCGv_ptr base, in= t vofs, case 4: case 8: tcg_gen_qemu_st_i64(t0, clean_addr, midx, - MO_LE | ctz32(len_remain) | MO_ATOM_NONE); + MO_LE | ctz32(len_remain) + | MO_ATOM_NONE | align); break; =20 case 6: - tcg_gen_qemu_st_i64(t0, clean_addr, midx, MO_LEUL | MO_ATOM_NO= NE); + tcg_gen_qemu_st_i64(t0, clean_addr, midx, + MO_LEUL | MO_ATOM_NONE | align); tcg_gen_addi_i64(clean_addr, clean_addr, 4); tcg_gen_shri_i64(t0, t0, 32); tcg_gen_qemu_st_i64(t0, clean_addr, midx, MO_LEUW | MO_ATOM_NO= NE); @@ -4366,7 +4382,8 @@ static bool trans_LDR_zri(DisasContext *s, arg_rri *a) if (sve_access_check(s)) { int size =3D vec_full_reg_size(s); int off =3D vec_full_reg_offset(s, a->rd); - gen_sve_ldr(s, tcg_env, off, size, a->rn, a->imm * size); + gen_sve_ldr(s, tcg_env, off, size, a->rn, a->imm * size, + s->align_mem ? MO_ALIGN_16 : MO_UNALN); } return true; } @@ -4379,7 +4396,8 @@ static bool trans_LDR_pri(DisasContext *s, arg_rri *a) if (sve_access_check(s)) { int size =3D pred_full_reg_size(s); int off =3D pred_full_reg_offset(s, a->rd); - gen_sve_ldr(s, tcg_env, off, size, a->rn, a->imm * size); + gen_sve_ldr(s, tcg_env, off, size, a->rn, a->imm * size, + s->align_mem ? MO_ALIGN_2 : MO_UNALN); } return true; } @@ -4392,7 +4410,8 @@ static bool trans_STR_zri(DisasContext *s, arg_rri *a) if (sve_access_check(s)) { int size =3D vec_full_reg_size(s); int off =3D vec_full_reg_offset(s, a->rd); - gen_sve_str(s, tcg_env, off, size, a->rn, a->imm * size); + gen_sve_str(s, tcg_env, off, size, a->rn, a->imm * size, + s->align_mem ? MO_ALIGN_16 : MO_UNALN); } return true; } @@ -4405,7 +4424,8 @@ static bool trans_STR_pri(DisasContext *s, arg_rri *a) if (sve_access_check(s)) { int size =3D pred_full_reg_size(s); int off =3D pred_full_reg_offset(s, a->rd); - gen_sve_str(s, tcg_env, off, size, a->rn, a->imm * size); + gen_sve_str(s, tcg_env, off, size, a->rn, a->imm * size, + s->align_mem ? MO_ALIGN_2 : MO_UNALN); } return true; } --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647168; cv=none; d=zohomail.com; s=zohoarc; b=imM5Rn4zsRxbnSusW6Tqz5FCV+qccksR9Btz66tuKcaPtISrR6GBxSKAPgizxKmt50jotFrKGC6JCzC0NICoaOEKftvzA2SRvH7Igtpkiqhl5pdQynFNIDrsxazc0TITKGlICSJYsH5SHLugPNBiSI6310Tf8QEScDD0Qe3JEGI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647168; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=kzXSPmp4Je9MEvy89AfIdr04Lfhn9GQcJRIOry58+Ks=; b=O2rsNt0ieGjzVtlN0nuaQrObLIAEJ8mCeQF8mrr0iYEGfyAO4FqScRQMiggKqRhBZOS90IYJ3NKGkoWdYb5oPXRXV87AD8vjn1P8O/IeBmjozR1msHgNqjtNfymxnGWzr38h1Ayw4NWYP/nPu8c7feDEzA8st66yuFzgXoYXahk= 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 1751647168507757.2364401481573; Fri, 4 Jul 2025 09:39:28 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjEH-0000By-FV; Fri, 04 Jul 2025 12:25:37 -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 1uXjEG-0008UP-8s for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:36 -0400 Received: from mail-wr1-x430.google.com ([2a00:1450:4864:20::430]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjED-0006CJ-Dn for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:35 -0400 Received: by mail-wr1-x430.google.com with SMTP id ffacd0b85a97d-3a503d9ef59so767305f8f.3 for ; Fri, 04 Jul 2025 09:25:33 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.31 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646332; x=1752251132; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=kzXSPmp4Je9MEvy89AfIdr04Lfhn9GQcJRIOry58+Ks=; b=vHdPEcHxJ1JqxfYWBUgf8FxT3sLhH/mVukwOBsjIwu+o49goWAbbEtaR4fl2FpxN0g Bx525H7coONAYYQSALiQCGMhq7jt/8c/sQ366lhLlb+BMHB9i7n0CRgykDEKGqzdykm5 qIm4K2NDT9hw/Mm8vAa9XEBcsb84xx1ehVuajqb/UVlP7Bp2j61c+I1+ciI8cIGQFv09 QqOPPwebFuJJ7caf4Ue49A188hl3Js6TlI/PHYT74Fd4sad0tGxRt3rYFFPyaa4TSY9O hIHmgsN1SQAziiddIPTameT7AeNWzBxt4777lZcSGeMPleao6qoMU2T1g2akFPlDz7HL pvWQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646332; x=1752251132; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=kzXSPmp4Je9MEvy89AfIdr04Lfhn9GQcJRIOry58+Ks=; b=qHhycvGbRtL1KPPvPmRddPU2lkLgqoXFkcW6v47dh/e/3giap/DbCbpJ3A6JU5Rjnf z64CgNoE8U0zpHgMsz2vYQ9lxvM9g+9l4EV3tbsQwyf0ZTbv6eTIdyGkU4NkhAwTIVO7 YQ8zTlyhswoApdMVGN4zJ+bbxgSHUUOpJKwl7+gc8ckHBmq33zziARHPIg+dLzthvh+0 Rxkq5UpV5bF29D1Tt8VbH+bse/A7aQ9FKeUHISIGisdqfZmHlO4Qm1KkwsTXAcjiFmex ZHzj9FJZl8VbkVrw5Q3jDh+Jn+umxQxWU/Y8Fh+Bz88BGvSoLACVoD8MWDt9/eL5viDI no2w== X-Gm-Message-State: AOJu0YwO/sr3/ZoA079ZiFXBq0y2zh+2VSZ1sTGKSAvU+RQJU7FYqsWa X6vPUvYvJMP/m3XDqeDjLgdPeNKvf12a60JguD9yUibVo80mWQ472WKLYDRuUtiR13LXm9N4VXn FN+71 X-Gm-Gg: ASbGncu2fn1ROOi17KN+g0phgshzarcFo1lp7fx7fR6ZFCCYDQpit6Ch9WKbYqfjGGs 4naxApktBB6mBOGlr1cH0+fPHyx7O2p26Cdg601fbbg5JwBrTAL6kYfRdpeItYke6Qz8SE7Etum E0uqSwB+EJ5S6e+Jvvqoo9K02PL8r3KMpuebjGe2zYeLM3npbsXprxfg/+3K/il38UMuB6xPPNS TnZLKGJjTFEytLX6GSIyWsj6AShxMUF/w0HjnSEZwUsNWHdrFRMwllRTeNkyRG04UF0oRseNHDp ARCumcBWMI9K7Q0lLg/nZqw45Y/g9TklHmf+/5byf3IXwlp9ZsOGRpc3i3Hu7RtIlm40 X-Google-Smtp-Source: AGHT+IFp5KLwMTRrh+qxmX7Gy7fXqjunxY3ZDmCEmPC0t5Uyx6zcQ+FUYDInl9MK8cPWgYa0Z0AgOA== X-Received: by 2002:a05:6000:24c9:b0:3a4:e667:922e with SMTP id ffacd0b85a97d-3b49700c540mr1925605f8f.4.1751646331809; Fri, 04 Jul 2025 09:25:31 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 031/119] target/arm: Implement SME2 LDR/STR ZT0 Date: Fri, 4 Jul 2025 17:23:31 +0100 Message-ID: <20250704162501.249138-32-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::430; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x430.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751647169898116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-20-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/sme.decode | 6 ++++++ target/arm/tcg/translate-sme.c | 13 +++++++++++++ 2 files changed, 19 insertions(+) diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index dd1f983941a..cef49c3b29b 100644 --- a/target/arm/tcg/sme.decode +++ b/target/arm/tcg/sme.decode @@ -55,6 +55,12 @@ LDST1 1110000 111 st:1 rm:5 v:1 .. pg:3 rn= :5 0 za_imm:4 \ LDR 1110000 100 0 000000 .. 000 ..... 0 .... @ldstr STR 1110000 100 1 000000 .. 000 ..... 0 .... @ldstr =20 +&ldstzt0 rn +@ldstzt0 ....... ... . ...... .. ... rn:5 ..... &ldstzt0 + +LDR_zt0 1110000 100 0 111111 00 000 ..... 00000 @ldstzt0 +STR_zt0 1110000 100 1 111111 00 000 ..... 00000 @ldstzt0 + ### SME Add Vector to Array =20 &adda zad zn pm pn diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index 1dbd0199af0..9f252739926 100644 --- a/target/arm/tcg/translate-sme.c +++ b/target/arm/tcg/translate-sme.c @@ -292,6 +292,19 @@ static bool do_ldst_r(DisasContext *s, arg_ldstr *a, G= enLdStR *fn) TRANS_FEAT(LDR, aa64_sme, do_ldst_r, a, gen_sve_ldr) TRANS_FEAT(STR, aa64_sme, do_ldst_r, a, gen_sve_str) =20 +static bool do_ldst_zt0(DisasContext *s, arg_ldstzt0 *a, GenLdStR *fn) +{ + if (sme2_zt0_enabled_check(s)) { + fn(s, tcg_env, offsetof(CPUARMState, za_state.zt0), + sizeof_field(CPUARMState, za_state.zt0), a->rn, 0, + s->align_mem ? MO_ALIGN_16 : MO_UNALN); + } + return true; +} + +TRANS_FEAT(LDR_zt0, aa64_sme2, do_ldst_zt0, a, gen_sve_ldr) +TRANS_FEAT(STR_zt0, aa64_sme2, do_ldst_zt0, a, gen_sve_str) + static bool do_adda(DisasContext *s, arg_adda *a, MemOp esz, gen_helper_gvec_4 *fn) { --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647045; cv=none; d=zohomail.com; s=zohoarc; b=mAryq+wnRW7BfgGyRvJ18lGnxWIEHbO6di0HDSk3zOSH52QamF+wGul1lQCSzdwOzswfS+YeNZzbXZyi6Q7iclBm4WMraiUEm2yIl3dXa/YqOcmpEr3I1C6tR+85pNmHwRllixqnSNk6+gV1CHUEcVk8vfaRiw1Aj8WoRfTJ/RE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647045; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=uUGcmKTWMbJhfqvYvcu9u5YllHguR2fLLPA2S7EUDak=; b=CJZ0C4lziCuO3xV8f07BM/va/w93e1KrX5KcfLanzlJdWPZDYGKYPM4ReIxoImmc6oED33vrexsSTxKLZNkvug0b5ra/jipks4/3mcRfmgEwq0p8ruQ21+hO4uPpljSp48rmSxc+1zjBjVu6D8+4pHwuQB14ZEkcz74rB+4IVNw= 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 1751647045663846.6514833704608; Fri, 4 Jul 2025 09:37:25 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjEJ-0000Hs-Iu; Fri, 04 Jul 2025 12:25:39 -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 1uXjEG-0008UQ-9V for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:36 -0400 Received: from mail-wr1-x42b.google.com ([2a00:1450:4864:20::42b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjEE-0006Cf-Db for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:35 -0400 Received: by mail-wr1-x42b.google.com with SMTP id ffacd0b85a97d-3a4ef2c2ef3so919822f8f.2 for ; Fri, 04 Jul 2025 09:25:34 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.31 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646333; x=1752251133; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=uUGcmKTWMbJhfqvYvcu9u5YllHguR2fLLPA2S7EUDak=; b=ukj2ZoFxrGipRG4QmkDmwb2NBS6yZUOpd6ZjahWKqajJqbNXyVpRPh/CDFr1zEP/G+ WI0reKAtqjSbXggJSvX+WL+g3iYsLWWTIEtkdqq+CEuTZNPrZbHyvqea7a/kkd2iCf9d a2eMhlPIu7Oxg2IABggPAGGAtXqqK+UqFkLbOXSREAWHU1fczssbq3MtvprvQcXUP1kL TMFB5ugTA1uZS1ZrXK5hVDxeo6xrfrD+eQgngct29B8e5zwQIpyrKLuq/lhJjfICOhnT 1Fkl1vHbu28h+9wpZ7ZRw5okDJSNeqak2HmIfC+SWAy71n08s7BCud4Bd1Lj+1FLWOxm mEdw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646333; x=1752251133; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=uUGcmKTWMbJhfqvYvcu9u5YllHguR2fLLPA2S7EUDak=; b=Qo6zNLCmePo8DgCkYwcPYS3KpsGZ2Lx5adDvAWsPEzi0hCuotCZvIxeQfi4D6/6oGR i7n4ojQwMFP1/PwVzrNtzIRHvYn5GPP7M76xebN7gVnUtTwI023KboTsB3M4J6HXqoXy ibqGW3XuY+vxlt9kFwaqkEImvElX4LbCcHU+OoszsJV3wiV/SNpfLjXgm5p/p3WhkXHq bX3+i+2dipkEs4y0/Y7uka0mrv9oEbFYkuC4qI6RGxsTTb7rkOPfWyUOH6J5aXdwHC3C W7mtiAHHIO8vxE65d73jDcy8OfDlCgtS+0HsvD44cnjCQVpPcm/2hqPrNEmxANvlEXRf 3qpg== X-Gm-Message-State: AOJu0Yz9Qhvd6f5t9608wc3Jo5A7qlSva/PddFhHEq4CO7+YgaIyHhwA 6tWl36jyU5vqPd/wXY7jNXJE4GCbe3IDB2iLT6DQ/TYQYgKN2RWclW5NkqFFZT/ZkLIxN97fLuL b1lPF X-Gm-Gg: ASbGncvd/fxz7MOPAqZCAfjXb2/3Ukq2p7jPviK5o4kW726R5MD0XHJBk4us7t+oFWP rHZ/vK+zyN/up0UexkmADiPcixlXkViBuIxctaHT61239LJBPplUqI4jcq3dhp8tRTmTgx6RP4E 3Ngk+lRBn+DHOuHoXk4knHAlRiRyhgMHvRr6g5W1jqYVa9aFhkvTHojFjO/OiaCzJNOoeJ4fe0D nCZh27dfwVM5Gfr/MXj/2y+SeTP1YI5gplW1EoXS81KNMUG2+prS289teDS56SSFUr7Wohgl9ni AsjSHVeBTNgS6YKJgIMRTHTKzXCzVTfMCqv/XYgKFQdfV/9P7YK//QPWa20T6vL3nwwY X-Google-Smtp-Source: AGHT+IFUu0UVyjNQGgbdoXisTdCLsQIicBNaQBNI/Y66yt9NzUojZxQKVVsqrTEhqacrF3u7xu4izA== X-Received: by 2002:a05:6000:4818:b0:3a5:783f:528a with SMTP id ffacd0b85a97d-3b49703b910mr2131833f8f.59.1751646332643; Fri, 04 Jul 2025 09:25:32 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 032/119] target/arm: Implement SME2 MOVT Date: Fri, 4 Jul 2025 17:23:32 +0100 Message-ID: <20250704162501.249138-33-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::42b; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x42b.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751647046734116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-21-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/sme.decode | 5 +++++ target/arm/tcg/translate-sme.c | 13 +++++++++++++ 2 files changed, 18 insertions(+) diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index cef49c3b29b..83ca6a9104f 100644 --- a/target/arm/tcg/sme.decode +++ b/target/arm/tcg/sme.decode @@ -39,6 +39,11 @@ MOVA 11000000 esz:2 00001 0 v:1 .. pg:3 0 za_= imm:4 zr:5 \ MOVA 11000000 11 00001 1 v:1 .. pg:3 0 za_imm:4 zr:5 \ &mova to_vec=3D1 rs=3D%mova_rs esz=3D4 =20 +### SME Move into/from ZT0 + +MOVT_rzt 1100 0000 0100 1100 0 off:3 00 11111 rt:5 +MOVT_ztr 1100 0000 0100 1110 0 off:3 00 11111 rt:5 + ### SME Memory =20 &ldst esz rs pg rn rm za_imm v:bool st:bool diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index 9f252739926..797035e2892 100644 --- a/target/arm/tcg/translate-sme.c +++ b/target/arm/tcg/translate-sme.c @@ -210,6 +210,19 @@ static bool trans_MOVA(DisasContext *s, arg_MOVA *a) return true; } =20 +static bool do_movt(DisasContext *s, arg_MOVT_rzt *a, + void (*func)(TCGv_i64, TCGv_ptr, tcg_target_long)) +{ + if (sme2_zt0_enabled_check(s)) { + func(cpu_reg(s, a->rt), tcg_env, + offsetof(CPUARMState, za_state.zt0) + a->off * 8); + } + return true; +} + +TRANS_FEAT(MOVT_rzt, aa64_sme2, do_movt, a, tcg_gen_ld_i64) +TRANS_FEAT(MOVT_ztr, aa64_sme2, do_movt, a, tcg_gen_st_i64) + static bool trans_LDST1(DisasContext *s, arg_LDST1 *a) { typedef void GenLdSt1(TCGv_env, TCGv_ptr, TCGv_ptr, TCGv, TCGv_i32); --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646860; cv=none; d=zohomail.com; s=zohoarc; b=CbmQ1ZVIGkOtenmgXLyIJguR23w9IG9eEOoOdYHrAbcqWhzq2+9I7kumC33QyrWUMyH0EBG3cOhBqPiRhE0VKMU06KCUxvpGB8Gx96fjE19KzRpy6NxNA8cjy0qnKkAR00oVqtdfFi4zSQjvpvlCD41UkH5m7kwAyqVJ0ediZzE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646860; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=YmW5HZ3JS47IQPSZ9xTJI9yQuqnhVNqm2P3t1MXaM+8=; b=apoqEv2wx1nuIe3Ypm01EuGrXT3gPIZRUx6T+MUi4Aea22ivgo7XtMIjoDm22FPwouSi9jCLHcrJ8OVc266NbQ4V2ivAtBIbWciT41n/aHySvdWVoTajiZ8X2Wj94TVv0C/5clzHrMxc59gNByPYS9fxV1zTQFC5buItdbuFYZ4= 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 1751646860139115.48740306802779; Fri, 4 Jul 2025 09:34:20 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjEK-0000L7-DC; Fri, 04 Jul 2025 12:25:40 -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 1uXjEI-0000En-1O for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:38 -0400 Received: from mail-wm1-x330.google.com ([2a00:1450:4864:20::330]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjEF-0006Cw-Am for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:37 -0400 Received: by mail-wm1-x330.google.com with SMTP id 5b1f17b1804b1-450cfb79177so6457565e9.0 for ; Fri, 04 Jul 2025 09:25:34 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.32 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646333; x=1752251133; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=YmW5HZ3JS47IQPSZ9xTJI9yQuqnhVNqm2P3t1MXaM+8=; b=cGEwh1bZ1bqRfedW0lqiaplqBPc4q93F3eybJQvVws3b5Yhhn5h3TAkTUtrM+3o6ia iRzGG6lVSh+TKkpyNgQETQ40gSZWN41D96uxSKZ5voxKGeDj34iW8teR/9IChWDIloAl oeubKHlBMB1bipJQIXJdvR0PZnA49KUF1ALkBdVf/CKss1/I3iD+P5zwvJ8RwQGkk7Yx G6hnP7NqEMPoeF0vyBnzh2qKg3e93MzIxU3zSdtF6Vkf2tlVBkjLzdAxqqaBFGtMAH2Q eiiMzdI2ahN7uiNOtH7F46MvIAcGZ1DktzmkZcSpvXY1L/YHcItUpPRoDLV/f7RWBchm jKqw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646333; x=1752251133; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=YmW5HZ3JS47IQPSZ9xTJI9yQuqnhVNqm2P3t1MXaM+8=; b=LkTLpS3XZJymj0Ju/H1eXzey434roaJ0n8bUHM2BuWBx8h8ZujgKZBSVp1Pp51LLyU ixI2smean8WoxWKpdcLCY+mpuwfPNe6na85tLsDdSNNYe6h7wt5wvRZN3tOs0IlDxiii mzsThC2LmdTnQO+xxhP4jboXW5XGYqRE5OFh7KXcncB6Jm2eVHHjcY+pw5aFJxueltZO e23SkuhLONTiwoZmlkqPtwXJTkgH8Va0DMXwkMN5xpdoYl2QGQuVuTPGe9R5IJDZGmiZ AC2Ba1JoNsrpR36I6uTOpaA/y5BlDM9mi3sjAeSvzcjv8mwubTWuuIxroGd1W0y52tyT pVaA== X-Gm-Message-State: AOJu0YyYds8yhh1VymCxcroAAZ9OeQPTThu/Qd9+RaetYRwO7o0Hp9YG xwvuZFS4K1JD+wtn/QKOgvs/LjVC6pe93g8lmaU48NyOl2Ef8izkdG+pXvx5pLMC+is09iriVb7 F4qQD X-Gm-Gg: ASbGncsmIxltqOagxbGKqGdwUsjPAvat2Is0ktSdYvp4FfHZO0G9R8m3MOL3WKT7OaE R5nwHKS4kl8uw27w+rnZNILJxZLl36YbblRvT4qZOmngQE4y2vl37pb+Yzqd8o/ihFvSMuqopl/ x+aw/yK3IrMbgB+0rpoB3IIPEev5fTYUJyxrnuVCHHj7NJoJZFKEmMQPl5tnCfu2CDbL4G6IWPY 8SeU8/rEo3m3ZsLCHsBwhDx85mc4AWV4KhUQyRtjl7UNo2p6s6gl6XneZaGLgiUxhrZlyaRWBy0 AajOc7Fmo1Edv+NXFKHZ8ws4tcyoH/+75q1HlewnA7LIC0NQb0Poxruxh46bUA+DjD1s X-Google-Smtp-Source: AGHT+IF6M02ftDQHlj+gpmBzpox+xSVcYph0TJmqn4ne6RJe5l29eyhgPnbNAZEs1cWi817IL1SuPA== X-Received: by 2002:a05:600c:6295:b0:453:7713:546a with SMTP id 5b1f17b1804b1-454b76ad2eemr20174585e9.14.1751646333539; Fri, 04 Jul 2025 09:25:33 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 033/119] target/arm: Split get_tile_rowcol argument tile_index Date: Fri, 4 Jul 2025 17:23:33 +0100 Message-ID: <20250704162501.249138-34-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::330; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x330.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751646862681116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Decode tile number and index offset beforehand and separately. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-22-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/sme.decode | 46 +++++++++++++++++++++++----------- target/arm/tcg/translate-sme.c | 17 +++++-------- 2 files changed, 38 insertions(+), 25 deletions(-) diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 83ca6a9104f..efe369e079b 100644 --- a/target/arm/tcg/sme.decode +++ b/target/arm/tcg/sme.decode @@ -27,17 +27,29 @@ ZERO_zt0 11000000 01 001 00000000000 00000001 ### SME Move into/from Array =20 %mova_rs 13:2 !function=3Dplus_12 -&mova esz rs pg zr za_imm v:bool to_vec:bool +&mova esz rs pg zr za off v:bool to_vec:bool =20 -MOVA 11000000 esz:2 00000 0 v:1 .. pg:3 zr:5 0 za_imm:4 \ - &mova to_vec=3D0 rs=3D%mova_rs -MOVA 11000000 11 00000 1 v:1 .. pg:3 zr:5 0 za_imm:4 \ - &mova to_vec=3D0 rs=3D%mova_rs esz=3D4 +MOVA 11000000 00 00000 0 v:1 .. pg:3 zr:5 0 off:4 \ + &mova to_vec=3D0 rs=3D%mova_rs esz=3D0 za=3D0 +MOVA 11000000 01 00000 0 v:1 .. pg:3 zr:5 0 za:1 off:3 \ + &mova to_vec=3D0 rs=3D%mova_rs esz=3D1 +MOVA 11000000 10 00000 0 v:1 .. pg:3 zr:5 0 za:2 off:2 \ + &mova to_vec=3D0 rs=3D%mova_rs esz=3D2 +MOVA 11000000 11 00000 0 v:1 .. pg:3 zr:5 0 za:3 off:1 \ + &mova to_vec=3D0 rs=3D%mova_rs esz=3D3 +MOVA 11000000 11 00000 1 v:1 .. pg:3 zr:5 0 za:4 \ + &mova to_vec=3D0 rs=3D%mova_rs esz=3D4 off=3D0 =20 -MOVA 11000000 esz:2 00001 0 v:1 .. pg:3 0 za_imm:4 zr:5 \ - &mova to_vec=3D1 rs=3D%mova_rs -MOVA 11000000 11 00001 1 v:1 .. pg:3 0 za_imm:4 zr:5 \ - &mova to_vec=3D1 rs=3D%mova_rs esz=3D4 +MOVA 11000000 00 00001 0 v:1 .. pg:3 0 off:4 zr:5 \ + &mova to_vec=3D1 rs=3D%mova_rs esz=3D0 za=3D0 +MOVA 11000000 01 00001 0 v:1 .. pg:3 0 za:1 off:3 zr:5 \ + &mova to_vec=3D1 rs=3D%mova_rs esz=3D1 +MOVA 11000000 10 00001 0 v:1 .. pg:3 0 za:2 off:2 zr:5 \ + &mova to_vec=3D1 rs=3D%mova_rs esz=3D2 +MOVA 11000000 11 00001 0 v:1 .. pg:3 0 za:3 off:1 zr:5 \ + &mova to_vec=3D1 rs=3D%mova_rs esz=3D3 +MOVA 11000000 11 00001 1 v:1 .. pg:3 0 za:4 zr:5 \ + &mova to_vec=3D1 rs=3D%mova_rs esz=3D4 off=3D0 =20 ### SME Move into/from ZT0 =20 @@ -46,12 +58,18 @@ MOVT_ztr 1100 0000 0100 1110 0 off:3 00 11111 rt= :5 =20 ### SME Memory =20 -&ldst esz rs pg rn rm za_imm v:bool st:bool +&ldst esz rs pg rn rm za off v:bool st:bool =20 -LDST1 1110000 0 esz:2 st:1 rm:5 v:1 .. pg:3 rn:5 0 za_imm:4 \ - &ldst rs=3D%mova_rs -LDST1 1110000 111 st:1 rm:5 v:1 .. pg:3 rn:5 0 za_imm:4 \ - &ldst esz=3D4 rs=3D%mova_rs +LDST1 1110000 0 00 st:1 rm:5 v:1 .. pg:3 rn:5 0 off:4 \ + &ldst rs=3D%mova_rs esz=3D0 za=3D0 +LDST1 1110000 0 01 st:1 rm:5 v:1 .. pg:3 rn:5 0 za:1 off:3 \ + &ldst rs=3D%mova_rs esz=3D1 +LDST1 1110000 0 10 st:1 rm:5 v:1 .. pg:3 rn:5 0 za:2 off:2 \ + &ldst rs=3D%mova_rs esz=3D2 +LDST1 1110000 0 11 st:1 rm:5 v:1 .. pg:3 rn:5 0 za:3 off:1 \ + &ldst rs=3D%mova_rs esz=3D3 +LDST1 1110000 1 11 st:1 rm:5 v:1 .. pg:3 rn:5 0 za:4 \ + &ldst rs=3D%mova_rs esz=3D4 off=3D0 =20 &ldstr rv rn imm @ldstr ....... ... . ...... .. ... rn:5 . imm:4 \ diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index 797035e2892..e22ec393fd0 100644 --- a/target/arm/tcg/translate-sme.c +++ b/target/arm/tcg/translate-sme.c @@ -41,15 +41,10 @@ static bool sme2_zt0_enabled_check(DisasContext *s) return true; } =20 -/* - * Resolve tile.size[index] to a host pointer, where tile and index - * are always decoded together, dependent on the element size. - */ +/* Resolve tile.size[rs+imm] to a host pointer. */ static TCGv_ptr get_tile_rowcol(DisasContext *s, int esz, int rs, - int tile_index, bool vertical) + int tile, int imm, bool vertical) { - int tile =3D tile_index >> (4 - esz); - int index =3D esz =3D=3D MO_128 ? 0 : extract32(tile_index, 0, 4 - esz= ); int pos, len, offset; TCGv_i32 tmp; TCGv_ptr addr; @@ -57,7 +52,7 @@ static TCGv_ptr get_tile_rowcol(DisasContext *s, int esz,= int rs, /* Compute the final index, which is Rs+imm. */ tmp =3D tcg_temp_new_i32(); tcg_gen_trunc_tl_i32(tmp, cpu_reg(s, rs)); - tcg_gen_addi_i32(tmp, tmp, index); + tcg_gen_addi_i32(tmp, tmp, imm); =20 /* Prepare a power-of-two modulo via extraction of @len bits. */ len =3D ctz32(streaming_vec_reg_size(s)) - esz; @@ -185,7 +180,7 @@ static bool trans_MOVA(DisasContext *s, arg_MOVA *a) return true; } =20 - t_za =3D get_tile_rowcol(s, a->esz, a->rs, a->za_imm, a->v); + t_za =3D get_tile_rowcol(s, a->esz, a->rs, a->za, a->off, a->v); t_zr =3D vec_full_reg_ptr(s, a->zr); t_pg =3D pred_full_reg_ptr(s, a->pg); =20 @@ -264,7 +259,7 @@ static bool trans_LDST1(DisasContext *s, arg_LDST1 *a) return true; } =20 - t_za =3D get_tile_rowcol(s, a->esz, a->rs, a->za_imm, a->v); + t_za =3D get_tile_rowcol(s, a->esz, a->rs, a->za, a->off, a->v); t_pg =3D pred_full_reg_ptr(s, a->pg); addr =3D tcg_temp_new_i64(); =20 @@ -295,7 +290,7 @@ static bool do_ldst_r(DisasContext *s, arg_ldstr *a, Ge= nLdStR *fn) } =20 /* ZA[n] equates to ZA0H.B[n]. */ - base =3D get_tile_rowcol(s, MO_8, a->rv, imm, false); + base =3D get_tile_rowcol(s, MO_8, a->rv, 0, imm, false); =20 fn(s, base, 0, svl, a->rn, imm * svl, s->align_mem ? MO_ALIGN_16 : MO_UNALN); --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646596; cv=none; d=zohomail.com; s=zohoarc; b=VNG6eB5oQBEUpKbm/qVrGI0RLk+Evtq6bMyPmSRWVH3oJTmNcqmjiUwP6PseqpbWmWs2pxdF/+M2LcSPEDhCnxqVtmwlD6CROWzfV1gy5YJZbPAoMd0tDk5zjIqkcb+CCa1UNFrleFwCbbhLnM1DG3L4VJz1zl8Ee2DweuMoPYo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646596; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=11GtkA9O02fT1A8vRRc+rfMuVdq9nIRE7i1dVgDj6F8=; b=QTamTHnJO9JYsQ8RMlUDpuProVhbZ1y3/z1gf8t+OeiiR0fqPcxu8bIeD4d5APmK4Irp7Y09MbKZHD18HU+nyZRkozBF1EzQJec/1Zzr9xTf9HvtFtmZw4zj6ECfO30VU3tFi9iTwXyTIMmNHPx8mAy1NZ7mL5512P6pZwTeHIo= 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 1751646596089435.4200056247256; Fri, 4 Jul 2025 09:29:56 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjEL-0000Ls-7F; Fri, 04 Jul 2025 12:25:41 -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 1uXjEI-0000Em-14 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:38 -0400 Received: from mail-wr1-x430.google.com ([2a00:1450:4864:20::430]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjEG-0006DG-2G for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:37 -0400 Received: by mail-wr1-x430.google.com with SMTP id ffacd0b85a97d-3a54690d369so1116166f8f.3 for ; Fri, 04 Jul 2025 09:25:35 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.33 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646334; x=1752251134; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=11GtkA9O02fT1A8vRRc+rfMuVdq9nIRE7i1dVgDj6F8=; b=fbuGH0buH8qnqdErIYFbuviwRSf0fhW2OhfS6G9lGgs+uqd6Xmpmpd/mClGSJKh+Ve /rsmL/Q5lsw5nBfNQft4jXXHrUXAf2qvoIpevW3Xdahzun9GO9X/ZfMifnQb+1EPMGJ3 1TRKi8qt7To0S1r7DnLEBSyOLyD2FS9DY6OQnMcWCOoWUEvLXwRbhKcoTjOZuITKNkVz SolKwNj6ivvBtib1c6M83+pwPDlTkHT22yKTpzGNHOOICyI+FznPU25vEfKnVzoW17dq h1whCKc/cfAjMw9WX4RYQTjcJhj2HptIJVbn976rnR4eBQkhFIPmJGh4MlcGLpv9VFdU QWkw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646334; x=1752251134; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=11GtkA9O02fT1A8vRRc+rfMuVdq9nIRE7i1dVgDj6F8=; b=f5Cq2fyqJE+DuDHLmCBLnWHsILGJVtciACMYbFEECgmM51AX20rNPf0kTYy++BSM8l t91rvEWj8kp46un61/P4Lp3G/Hh1KLxm/xIDbQJdYDWoj4qha0T0xWYVGjZxPhPdnIEf +IL7DtQu/Oie7HtOomYnn5ELbT7Jidre09JkbUQ0CD6ZvuNPa88pXa8ePIAtlZEdsGtY n/HIZepoq3CG7zheItEvycB1f+2+onKglKWaj6SPsl6+LUaEo3HjLOS3lB+l71SlVvkd SAIJlQqjwkYmYuqfUc1CiDZgjAOROGVeWoPXo+oZsi+SSlAGv9L8LdAkMidJQqj5Qt/x cyIg== X-Gm-Message-State: AOJu0Yyb0KiXV8OGcJrjX8HUYMWn6Z0aOs1tIAdHSSEBi+c1F6fnKfoW n+XNfV3eFIXKOHScHS7hoXMq1J/uuYMrvMDgB80XYlpfdVWNnexL9+qOiGOXgqNFi0gsen2kjnw qKl9e X-Gm-Gg: ASbGncvJS7zC2Y9qPA+TS4P+5ee0h2T1NqGoofRFUwXf+Gec62y5ZVqbp3koSMSoLyd xn8gQEfPKroC3gusFwZeGRlhog8HiDkYi+otByF4VOXCEgY6jZSQgtWCRUMnY7uWR97qgyxKp5W 9mCs4NUXMvQZXWO0UGl6RDxinPKv8HFru4b0VGgC5DC7UzxKXKVsAj4c6b5ROeygRl7BHwG5Fhx FaufDq+8WcKnLEtYtsbDcowgLw9gO6v5qzCFMPnqt29ccslf0NlZRjVCUtmspb+374f6KoxYDpW ZRTdgxhsNaYvUD+Bg+VXWG1isFEWPZklEC/DSoavwXLwiM+q05tDwOzZ4/RK47INiMHT X-Google-Smtp-Source: AGHT+IHs7dg/JgxmGWA8qEQX2ZB+XbpNbll0/UAxkfv1h94VplI/bu7ujux1M+P/rQUQYBZKV5uH5w== X-Received: by 2002:a05:6000:3c7:b0:3a3:5f36:33ee with SMTP id ffacd0b85a97d-3b497029498mr2267445f8f.32.1751646334425; Fri, 04 Jul 2025 09:25:34 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 034/119] target/arm: Rename MOVA for translate Date: Fri, 4 Jul 2025 17:23:34 +0100 Message-ID: <20250704162501.249138-35-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::430; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x430.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751646597054116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Prepare for more kinds of MOVA from SME2 by renaming the existing SME1 MOVA to indicate tile to/from vector. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-23-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/sme.decode | 42 +++++++++++++++++----------------- target/arm/tcg/translate-sme.c | 12 +++++----- 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index efe369e079b..459b96805f9 100644 --- a/target/arm/tcg/sme.decode +++ b/target/arm/tcg/sme.decode @@ -27,29 +27,29 @@ ZERO_zt0 11000000 01 001 00000000000 00000001 ### SME Move into/from Array =20 %mova_rs 13:2 !function=3Dplus_12 -&mova esz rs pg zr za off v:bool to_vec:bool +&mova_p esz rs pg zr za off v:bool =20 -MOVA 11000000 00 00000 0 v:1 .. pg:3 zr:5 0 off:4 \ - &mova to_vec=3D0 rs=3D%mova_rs esz=3D0 za=3D0 -MOVA 11000000 01 00000 0 v:1 .. pg:3 zr:5 0 za:1 off:3 \ - &mova to_vec=3D0 rs=3D%mova_rs esz=3D1 -MOVA 11000000 10 00000 0 v:1 .. pg:3 zr:5 0 za:2 off:2 \ - &mova to_vec=3D0 rs=3D%mova_rs esz=3D2 -MOVA 11000000 11 00000 0 v:1 .. pg:3 zr:5 0 za:3 off:1 \ - &mova to_vec=3D0 rs=3D%mova_rs esz=3D3 -MOVA 11000000 11 00000 1 v:1 .. pg:3 zr:5 0 za:4 \ - &mova to_vec=3D0 rs=3D%mova_rs esz=3D4 off=3D0 +MOVA_tz 11000000 00 00000 0 v:1 .. pg:3 zr:5 0 off:4 \ + &mova_p rs=3D%mova_rs esz=3D0 za=3D0 +MOVA_tz 11000000 01 00000 0 v:1 .. pg:3 zr:5 0 za:1 off:3 \ + &mova_p rs=3D%mova_rs esz=3D1 +MOVA_tz 11000000 10 00000 0 v:1 .. pg:3 zr:5 0 za:2 off:2 \ + &mova_p rs=3D%mova_rs esz=3D2 +MOVA_tz 11000000 11 00000 0 v:1 .. pg:3 zr:5 0 za:3 off:1 \ + &mova_p rs=3D%mova_rs esz=3D3 +MOVA_tz 11000000 11 00000 1 v:1 .. pg:3 zr:5 0 za:4 \ + &mova_p rs=3D%mova_rs esz=3D4 off=3D0 =20 -MOVA 11000000 00 00001 0 v:1 .. pg:3 0 off:4 zr:5 \ - &mova to_vec=3D1 rs=3D%mova_rs esz=3D0 za=3D0 -MOVA 11000000 01 00001 0 v:1 .. pg:3 0 za:1 off:3 zr:5 \ - &mova to_vec=3D1 rs=3D%mova_rs esz=3D1 -MOVA 11000000 10 00001 0 v:1 .. pg:3 0 za:2 off:2 zr:5 \ - &mova to_vec=3D1 rs=3D%mova_rs esz=3D2 -MOVA 11000000 11 00001 0 v:1 .. pg:3 0 za:3 off:1 zr:5 \ - &mova to_vec=3D1 rs=3D%mova_rs esz=3D3 -MOVA 11000000 11 00001 1 v:1 .. pg:3 0 za:4 zr:5 \ - &mova to_vec=3D1 rs=3D%mova_rs esz=3D4 off=3D0 +MOVA_zt 11000000 00 00001 0 v:1 .. pg:3 0 off:4 zr:5 \ + &mova_p rs=3D%mova_rs esz=3D0 za=3D0 +MOVA_zt 11000000 01 00001 0 v:1 .. pg:3 0 za:1 off:3 zr:5 \ + &mova_p rs=3D%mova_rs esz=3D1 +MOVA_zt 11000000 10 00001 0 v:1 .. pg:3 0 za:2 off:2 zr:5 \ + &mova_p rs=3D%mova_rs esz=3D2 +MOVA_zt 11000000 11 00001 0 v:1 .. pg:3 0 za:3 off:1 zr:5 \ + &mova_p rs=3D%mova_rs esz=3D3 +MOVA_zt 11000000 11 00001 1 v:1 .. pg:3 0 za:4 zr:5 \ + &mova_p rs=3D%mova_rs esz=3D4 off=3D0 =20 ### SME Move into/from ZT0 =20 diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index e22ec393fd0..2c8cb24b7cd 100644 --- a/target/arm/tcg/translate-sme.c +++ b/target/arm/tcg/translate-sme.c @@ -151,7 +151,7 @@ static bool trans_ZERO_zt0(DisasContext *s, arg_ZERO_zt= 0 *a) return true; } =20 -static bool trans_MOVA(DisasContext *s, arg_MOVA *a) +static bool do_mova_tile(DisasContext *s, arg_mova_p *a, bool to_vec) { static gen_helper_gvec_4 * const h_fns[5] =3D { gen_helper_sve_sel_zpzz_b, gen_helper_sve_sel_zpzz_h, @@ -173,9 +173,6 @@ static bool trans_MOVA(DisasContext *s, arg_MOVA *a) TCGv_i32 t_desc; int svl; =20 - if (!dc_isar_feature(aa64_sme, s)) { - return false; - } if (!sme_smza_enabled_check(s)) { return true; } @@ -189,14 +186,14 @@ static bool trans_MOVA(DisasContext *s, arg_MOVA *a) =20 if (a->v) { /* Vertical slice -- use sme mova helpers. */ - if (a->to_vec) { + if (to_vec) { zc_fns[a->esz](t_zr, t_za, t_pg, t_desc); } else { cz_fns[a->esz](t_za, t_zr, t_pg, t_desc); } } else { /* Horizontal slice -- reuse sve sel helpers. */ - if (a->to_vec) { + if (to_vec) { h_fns[a->esz](t_zr, t_za, t_zr, t_pg, t_desc); } else { h_fns[a->esz](t_za, t_zr, t_za, t_pg, t_desc); @@ -205,6 +202,9 @@ static bool trans_MOVA(DisasContext *s, arg_MOVA *a) return true; } =20 +TRANS_FEAT(MOVA_tz, aa64_sme, do_mova_tile, a, false) +TRANS_FEAT(MOVA_zt, aa64_sme, do_mova_tile, a, true) + static bool do_movt(DisasContext *s, arg_MOVT_rzt *a, void (*func)(TCGv_i64, TCGv_ptr, tcg_target_long)) { --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646349; cv=none; d=zohomail.com; s=zohoarc; b=JqyGRjs4mPIR2nBs5zHCyZVl4QQfb0EBGkqldkXfCRA78iDUJlTtnXob0L0Xjxq+pFpst2dWar/2BRFNdTdfOYHTQTiw1BLUdUBa7hLUTj/e/qqK3Jw5mpeJvaR8pS7na0QH+8sJnMofXl4t5FQl18Qe++h267PWsw1m24+9WrM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646349; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=7/ljGr/lmtJGdM4g/TCIPoJ8wA9RphCsNczVJCfmoCQ=; b=OQRmFV2Ak2dimTCgTxL49ecuionkHL1NuMyTerkOxKEW1ood1LgZeDjk6KgnEblRP2329gW6+6ubcNuotR3wd0TFrWX0jF/NNpapYPsWf3VPa5ms5+ueSdGC8zBaFSnKAs3el7hoWgovwsrvu1k6y9vGus/4p2hSB/cNar9QCww= 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 1751646349800177.8887838251652; Fri, 4 Jul 2025 09:25:49 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjEL-0000Mr-Vh; Fri, 04 Jul 2025 12:25:42 -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 1uXjEJ-0000IS-Do for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:39 -0400 Received: from mail-wr1-x434.google.com ([2a00:1450:4864:20::434]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjEH-0006Di-5Y for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:39 -0400 Received: by mail-wr1-x434.google.com with SMTP id ffacd0b85a97d-3a4f379662cso967080f8f.0 for ; Fri, 04 Jul 2025 09:25:36 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.34 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646335; x=1752251135; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=7/ljGr/lmtJGdM4g/TCIPoJ8wA9RphCsNczVJCfmoCQ=; b=vbGjpw9PItaDXb8NAyWloTDP2fd63jxqpuk7Iq1BvoTMzYozGcEqC87aRIIwBlX4JZ vU9z2IuZxSKmAUdR4LSIIU+rIYubH3o0nPsra8Laa+biXJEviJOlAwJjIedqzss9+BsR yaTvmobI4z35s5e6QV1FA9vrJPTE6C+LySl8cSU9kyYshu/fDesmOMwZbrMGrR9DtecO DBjKGbPVqfe5UKeCEkmpQdztO8SH6AJBDTNayieGaE4P7U3UZDTKkJLTLH6Fw/UXo7fm V2QEGcg4Y/5gm3G9V1EH8vClkfSEGUe36kyQK1mb50LAbzq+wVedE3V3dtkdwmS+nTUJ QoRg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646335; x=1752251135; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=7/ljGr/lmtJGdM4g/TCIPoJ8wA9RphCsNczVJCfmoCQ=; b=W+N+6QG3Hj6BH86u7VnR6+bsJEmJ12GBlqOd92dfdk/DrnrZO/lGe6gLW8R78Jz2G2 Epe/1plzc3//L+pgGnWoJthrvyoMnpw+Jk0c95sbZmBgnZF0vceEjqCqtsZgrL7sDsxG pSz8JpmV44UJ5/5tRZ/Mw48Nqg0tSBhVlpe8QGYYUuv0RuiNx68+N4Ee1i2bVi6kb3Ya KYxZxZ0Pe4cxTjcU8sSYfgrmbExbw2sAUItFn/HX6msiuPHi1pLoQ1/SHSFXyLmwEvHI 8VB6MjNK8cQdjA+QvdNRrUpfNU++BdV0V/BwujVsrTixGdxVIe730GILVbAIq7Tm2JMV okWA== X-Gm-Message-State: AOJu0Ywqf+0dKey3+sPIeOtCuBKUHk8+AlZr1v56YrTZ0iprWMKTlC4d 97GdrgKTE+f61G/aNO1Mv7tqhoUavtsGFxyn1laeNC+eCVJVFm0p88EW6Ef8oU0HKL8OKXz9m+6 lOB4i X-Gm-Gg: ASbGncvcpUUAWp6XiLQtal8lSWe3Km3nNKAlTnZCn4wGrjRA/wG2a2buOrnBhTIpauK Sn4fQA7exitEpK1ZRWMQ0pWCKejNFTmNRBXS6ba0a6astDSbDZdN2VjzP1jCuqzNtpEDcDVpzXN HJON1o4U8v9XtRbUE31CQACeOryRg9Uq2m6wI51OMP8ZHJPskNZN9oO9G2CRRnW0a/xAoe9sW9/ oKc9ofv/EcGn54aAkp/a3ckeAiUafAcK0fu2W0fFbksQEVaxcqWBR8Jz2AnpOtjzozV3bq1m5CR yG3+uX1XhwZWMymkXNaEU186OCmRIIg3lEgrLsoCI+9IXPp53wGzwXEj9P6NVT7XwqEL X-Google-Smtp-Source: AGHT+IFXJpgOf92yeXfNy6srqEu+HAezhbndX0Azm5iX4dt/R1b3WKHuf7y+VU1ET0Y7eykdo756lw== X-Received: by 2002:a5d:59c4:0:b0:3a3:6595:9209 with SMTP id ffacd0b85a97d-3b4970294afmr2502235f8f.36.1751646335272; Fri, 04 Jul 2025 09:25:35 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 035/119] target/arm: Split out get_zarray Date: Fri, 4 Jul 2025 17:23:35 +0100 Message-ID: <20250704162501.249138-36-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::434; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x434.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751646350390116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Prepare for MOVA array to/from vector with multiple registers by adding a div_len parameter, herein always 1, and a vec_mod parameter, herein always 0. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-24-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/translate-sme.c | 47 +++++++++++++++++++++++----------- 1 file changed, 32 insertions(+), 15 deletions(-) diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index 2c8cb24b7cd..ea0e5a7cb5b 100644 --- a/target/arm/tcg/translate-sme.c +++ b/target/arm/tcg/translate-sme.c @@ -43,7 +43,8 @@ static bool sme2_zt0_enabled_check(DisasContext *s) =20 /* Resolve tile.size[rs+imm] to a host pointer. */ static TCGv_ptr get_tile_rowcol(DisasContext *s, int esz, int rs, - int tile, int imm, bool vertical) + int tile, int imm, int div_len, + int vec_mod, bool vertical) { int pos, len, offset; TCGv_i32 tmp; @@ -52,10 +53,23 @@ static TCGv_ptr get_tile_rowcol(DisasContext *s, int es= z, int rs, /* Compute the final index, which is Rs+imm. */ tmp =3D tcg_temp_new_i32(); tcg_gen_trunc_tl_i32(tmp, cpu_reg(s, rs)); + /* + * Round the vector index down to a multiple of vec_mod if necessary. + * We do this before adding the offset, to handle cases like + * MOVA (tile to vector, 2 registers) where we want to call this + * several times in a loop with an increasing offset. We rely on + * the instruction encodings always forcing the initial offset in + * [rs + offset] to be a multiple of vec_mod. The pseudocode usually + * does the round-down after adding the offset rather than before, + * but MOVA is an exception. + */ + if (vec_mod > 1) { + tcg_gen_andc_i32(tmp, tmp, tcg_constant_i32(vec_mod - 1)); + } tcg_gen_addi_i32(tmp, tmp, imm); =20 /* Prepare a power-of-two modulo via extraction of @len bits. */ - len =3D ctz32(streaming_vec_reg_size(s)) - esz; + len =3D ctz32(streaming_vec_reg_size(s) / div_len) - esz; =20 if (!len) { /* @@ -111,6 +125,14 @@ static TCGv_ptr get_tile_rowcol(DisasContext *s, int e= sz, int rs, return addr; } =20 +/* Resolve ZArray[rs+imm] to a host pointer. */ +static TCGv_ptr get_zarray(DisasContext *s, int rs, int imm, + int div_len, int vec_mod) +{ + /* ZA[n] equates to ZA0H.B[n]. */ + return get_tile_rowcol(s, MO_8, rs, 0, imm, div_len, vec_mod, false); +} + /* * Resolve tile.size[0] to a host pointer. * Used by e.g. outer product insns where we require the entire tile. @@ -177,7 +199,7 @@ static bool do_mova_tile(DisasContext *s, arg_mova_p *a= , bool to_vec) return true; } =20 - t_za =3D get_tile_rowcol(s, a->esz, a->rs, a->za, a->off, a->v); + t_za =3D get_tile_rowcol(s, a->esz, a->rs, a->za, a->off, 1, 0, a->v); t_zr =3D vec_full_reg_ptr(s, a->zr); t_pg =3D pred_full_reg_ptr(s, a->pg); =20 @@ -259,7 +281,7 @@ static bool trans_LDST1(DisasContext *s, arg_LDST1 *a) return true; } =20 - t_za =3D get_tile_rowcol(s, a->esz, a->rs, a->za, a->off, a->v); + t_za =3D get_tile_rowcol(s, a->esz, a->rs, a->za, a->off, 1, 0, a->v); t_pg =3D pred_full_reg_ptr(s, a->pg); addr =3D tcg_temp_new_i64(); =20 @@ -281,19 +303,14 @@ typedef void GenLdStR(DisasContext *, TCGv_ptr, int, = int, int, int, MemOp); =20 static bool do_ldst_r(DisasContext *s, arg_ldstr *a, GenLdStR *fn) { - int svl =3D streaming_vec_reg_size(s); - int imm =3D a->imm; - TCGv_ptr base; + if (sme_za_enabled_check(s)) { + int svl =3D streaming_vec_reg_size(s); + int imm =3D a->imm; + TCGv_ptr base =3D get_zarray(s, a->rv, imm, 1, 0); =20 - if (!sme_za_enabled_check(s)) { - return true; + fn(s, base, 0, svl, a->rn, imm * svl, + s->align_mem ? MO_ALIGN_16 : MO_UNALN); } - - /* ZA[n] equates to ZA0H.B[n]. */ - base =3D get_tile_rowcol(s, MO_8, a->rv, 0, imm, false); - - fn(s, base, 0, svl, a->rn, imm * svl, - s->align_mem ? MO_ALIGN_16 : MO_UNALN); return true; } =20 --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646904; cv=none; d=zohomail.com; s=zohoarc; b=hsH5Uw2yMGi8KpEa4k5pU++t1L3Rf9w4AZ/kJTlAalDOWGpCv1j1R9Y6EA/gleiLQoviJD5eY6Zn1FBgCK/CU8ycxAQWl0iToFr477aKP5HhO7BGmMWAsRLYMGVPKt/6+/q8KOJ9fuAn2rMZoI4YVg7DRDAtAjjhf41qdugkYa4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646904; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=TwjynpGV/1pTWOQilt3QgTNlLQPjzgarmUwDRRKoh/I=; b=MFhjhRRJuc4X1Jvzo5M8kijnTDYZBrMAMBeAxPZDffNDRaw7ABh2PqnbK9YvnqKjQbG4I4TlDJzlhxXQg1DepChciFWsj5cjRjzPearsYDtsIJImDjq1G9e4Rkl82M/mfjeWK9MnN85BxNeL2bGKM3R/Ac6c01Wjzxkn6iTgQeY= 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 1751646904869276.1589615796961; Fri, 4 Jul 2025 09:35:04 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjEK-0000L9-Fq; Fri, 04 Jul 2025 12:25:40 -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 1uXjEJ-0000IT-GE for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:39 -0400 Received: from mail-wr1-x433.google.com ([2a00:1450:4864:20::433]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjEH-0006E6-SK for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:39 -0400 Received: by mail-wr1-x433.google.com with SMTP id ffacd0b85a97d-3a54690d369so1116182f8f.3 for ; Fri, 04 Jul 2025 09:25:37 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.35 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646336; x=1752251136; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=TwjynpGV/1pTWOQilt3QgTNlLQPjzgarmUwDRRKoh/I=; b=beUvr+RSFwO7ofLPXyzecGTW9+w/rO6mosHCN6hXJKotUXYzvAWA3PQYPpnHQ0V+cK wBdReatGVlC5kqd7wcHckKw8UJNrQ0MYy5zNW1Uv8tn4hgQAczo9t+D8XHfkrI2m6Yfg egHNzZ6DjOXsjnVlIszqN4wJetX2pVSTXthzwP36Fj7nW7aFCh7IpPqEjF+WjE+a/DZf myRwyG/CIxPShXi4w8llIRrL1kH5eF1Aa39oo79DyCxvvF/TfRFmwNVOrI2c7YxUO/iN qM5B30MTsj/0vzpi/eLCTlZ5dvf5fnAgLJJU1byhjsQZJxkIXqi9WT9Sn+N7QrRMCI22 FBmg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646336; x=1752251136; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=TwjynpGV/1pTWOQilt3QgTNlLQPjzgarmUwDRRKoh/I=; b=hea4Mq7/RORX1FrkxG98+WwMjkewlMWfo9lHNeV4nLKoxFbW6jFkmHRU0OAHlnEFgs yOg0Ng1TeJJdc9PKbcP4eZ7rkZGcBKnwRz+o2l7r79mIpJV2zGdNQxfxI/gfTCNCJFfs 8F/vNRyVCCmvsORGJEjcorcf4xqJugOBhYtSe5rQXhGaqiPHsymrfSq+E4mO01ptrzcl AAwP1xzL4+jfP4sHXgDFRf90kMwI2/+tqj4G9L4EGX3KxoYq3A7IGUMSrayasDJqV6VP tXJVH0bR6gB4W5kDmD0J3Mtoo4js8VSsljVH/VOtApkVE159PKI2wNOR8lqqWCJbMXUi iZ/g== X-Gm-Message-State: AOJu0Ywj1P2v7QYhEbBh3/Ned+oNXJuZBDj8uqKXsM6PfQbUo01GTXKj fsL7npZy4gqRVdDCU2+KQqy3nJi1q82AACFxNNcX4r+7/HmW+stmKJYmaDlb5v5XY0XqaHrHQ/W qUcT0 X-Gm-Gg: ASbGncvoxDQeckWwKAe5tV+cfvHyVPs6nLn2Px3uW4ZrLtS+lI10iRMhVbMxQ4r/muD X/0Ib6JgUCZFm1VKpEMUaHre+Q9YKwPnN7C7lxMYKEB5pNZGUXkVjOsHkCRvIYC+NYE72LBUHtU GVd/XP7u52JPEYRhBRwd/4XdIA+IjDbh7pDEvpecgTekwXhgcR1golDNI/T14AhSsHjU4IsEjzZ Vzc+XcfJ10hNipf3Qxvd1cd5S8CAtg5wpm0T9Ttl+MAATfh03i4c9x390fG6G2ThQsbaMGxc+Dt RFwxcGv1Gk48EoK4ztDLKxAp09FNzQbT8BKekdtZ13ELIxBm086dWDabf0pZHvdtkNUF X-Google-Smtp-Source: AGHT+IGSEg9YO29PiRnAmJ1RGi/rWZIwZNdQ9lxd86TlfDC2Q6beUfnY+tTXoUlIILgjPoS3esuRxA== X-Received: by 2002:a05:6000:41fb:b0:3a4:d6ed:8e2e with SMTP id ffacd0b85a97d-3b49702e6camr2393803f8f.41.1751646336105; Fri, 04 Jul 2025 09:25:36 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 036/119] target/arm: Introduce ARMCPU.sme_max_vq Date: Fri, 4 Jul 2025 17:23:36 +0100 Message-ID: <20250704162501.249138-37-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::433; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x433.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751646906993116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-25-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/cpu.h | 1 + target/arm/cpu64.c | 1 + 2 files changed, 2 insertions(+) diff --git a/target/arm/cpu.h b/target/arm/cpu.h index 39a9234ff28..c8cf0ab417b 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -1136,6 +1136,7 @@ struct ArchCPU { =20 /* Used to set the maximum vector length the cpu will support. */ uint32_t sve_max_vq; + uint32_t sme_max_vq; =20 #ifdef CONFIG_USER_ONLY /* Used to set the default vector length at process start. */ diff --git a/target/arm/cpu64.c b/target/arm/cpu64.c index 77e7c4a6a52..bd33d6cc6ea 100644 --- a/target/arm/cpu64.c +++ b/target/arm/cpu64.c @@ -363,6 +363,7 @@ void arm_cpu_sme_finalize(ARMCPU *cpu, Error **errp) } =20 cpu->sme_vq.map =3D vq_map; + cpu->sme_max_vq =3D 32 - clz32(vq_map); } =20 static bool cpu_arm_get_sme(Object *obj, Error **errp) --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647074; cv=none; d=zohomail.com; s=zohoarc; b=Ov2mC8XR4iH27YD2SlSjxI2NSTdCsKLPyLcXng0xvl+XJlDlHU7ZTtZrY9J+lKP+1CHmZAwPMkUNvdjVVk/ECnUyoOv5ZyAr7YQg6HxToroKD276eugtAfvHvZDpPDkTRmuatlQcLNUGIR4iWSdN4dmxnGJ8tbZtfNjOKlp4w7s= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647074; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=CmZvbRAjfYsxJw4vSJC6fHJnVMyo6ne2Pmf7hBvBows=; b=aFPxN9CPK+hbDutsLGYzxqzVhm2+w1//WqoXP7avZAf7oqAlJl5l4ZuYd1Lk+1lq8pBlR7lH+K6lFVt/h6lutTRExBLnW8FqZPhEuY9emRIPcFwwbziXM0LG6UIAAUrpogaSzN7pyTUJcxjGqj3dn4Alg4njRROXWvM7ewNxLI8= 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 1751647074761334.10307994860557; Fri, 4 Jul 2025 09:37:54 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjEN-0000Qy-7V; Fri, 04 Jul 2025 12:25:43 -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 1uXjEL-0000M5-8i for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:41 -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 1uXjEI-0006EK-Mm for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:40 -0400 Received: by mail-wm1-x331.google.com with SMTP id 5b1f17b1804b1-4538bc1cffdso9178265e9.0 for ; Fri, 04 Jul 2025 09:25:38 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.36 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646337; x=1752251137; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=CmZvbRAjfYsxJw4vSJC6fHJnVMyo6ne2Pmf7hBvBows=; b=IsgKQ8ggR6LxlI6yUrO35T44epKO0+31PzudS8Q0P1am5JVYMKRkG7xKtlcx6WHRix kS2vF+wuGYaenpMOF/VDg5Bs43M56QQnE93/kvG7BiKohEXeFjk7RmAe1B0ZzWX+fw+n IHBPzUEj1EKOh85XBr2I3IbSuAktVnrdRbAEMJ2lR3yShKwiGEDpkyZ7ySVyFlsqd+PQ pBjlEuTydyTq3tuexiky61J8FS0g1md5qPRXaoolbmNeDerRoaC/WgvgXvtvEY3B+xtm XgOlYYQsT//wEAe87lcAZhoDvMNC2rjTJZlYHTJzGD5UQy3UGXS17CTjOJ9WDXJxMDOi ReNA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646337; x=1752251137; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=CmZvbRAjfYsxJw4vSJC6fHJnVMyo6ne2Pmf7hBvBows=; b=SoJNv9UEUZSlHUcgghop1fuH2WPYG3vhFOmKLf3icvS/02Qit7MhcN9bCP/4Ii0wFr RIaYGmkYckjXHppQxkiy9oN6t5JlUfw3fmxp4ot2qeUg3FrvgvJCiDDBnm9WdOEYUOXz U+FwxvOBIVQsUD0l4Fw/z2pGGxXLEp0CgfOeBneik80AVL2k1ZTt5f4eNRKaRLlEYlwH OhGRRIXEDwACtrYcyqDPb89tfvl5U2gIpkLV3hHwc9IMF6NDRylDTsjsYGNazpb6ANb5 /nPOMvSSDZ+MXH7Ehvr1oS0dq3dbbO6UbmCUUD9Cj6ZqvMGsvqpIywJ3nO01Ara/+CAK 90rw== X-Gm-Message-State: AOJu0Yxe11cJLoPXJQbZWICGNbPfXt02ieg+aV3wnd1SmxxC6tZ+L0YQ 8zZhR54mKe08WGHIZV8D6htVuUlC1baXRQF77ptG8onnpeQH8Avs6TnRkFRxhtxBdrKIpOTXt6G 0Kpz5 X-Gm-Gg: ASbGnctT6KVk8kda4G06ECQAVCVghuWu2CjLf+920b4VVC7+cRZC8ZhWmOR6SPGmWxc bI4wNI8Ouuv12jGfJpiE5GTf9jGg10KnytWPlQo5YiYY2bHwgQTybcxkLjfEGdhBO6b0xjJmQEo pNxRgYcj6L2TD817rWU5rSF7g084RRIfSwUXdGbnPxsaXdtQr9VWY97Rr6mwf5o7DbMdrSS0gMP gpiMvAaMxVVp5V8I/Z/t4/cvOynBIRmw9nLTssAjGrkPAVT07Bt0TGvp7itgKELczdlCrqP2WEU Vv2lhGUocW2YvTGCzMrMRI1RL8bM/1ffUySeIqz7BAF5ol2oz95yyZDtBrgDaKeKnpXT X-Google-Smtp-Source: AGHT+IFx9p3DzOlMTmRokbUsEENtKonLFa9GLkRP16AXa1ffsFcGhRDuV/JgeGwRl919gydvr/JbZw== X-Received: by 2002:a05:600c:83cd:b0:43d:aed:f7d0 with SMTP id 5b1f17b1804b1-454b4eb8333mr24698445e9.28.1751646337027; Fri, 04 Jul 2025 09:25:37 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 037/119] target/arm: Implement SME2 MOVA to/from tile, multiple registers Date: Fri, 4 Jul 2025 17:23:37 +0100 Message-ID: <20250704162501.249138-38-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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=peter.maydell@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 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: 1751647075000116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-26-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/helper-sme.h | 9 +++++ target/arm/tcg/translate.h | 1 + target/arm/tcg/sme.decode | 37 ++++++++++++++++++ target/arm/tcg/sme_helper.c | 64 ++++++++++++++++++++++++++++++ target/arm/tcg/translate-a64.c | 1 + target/arm/tcg/translate-sme.c | 71 ++++++++++++++++++++++++++++++++++ 6 files changed, 183 insertions(+) diff --git a/target/arm/tcg/helper-sme.h b/target/arm/tcg/helper-sme.h index 858d69188fb..8246ce774ca 100644 --- a/target/arm/tcg/helper-sme.h +++ b/target/arm/tcg/helper-sme.h @@ -33,6 +33,15 @@ DEF_HELPER_FLAGS_4(sme_mova_zc_d, TCG_CALL_NO_RWG, void,= ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_4(sme_mova_cz_q, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i3= 2) DEF_HELPER_FLAGS_4(sme_mova_zc_q, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i3= 2) =20 +DEF_HELPER_FLAGS_3(sme2_mova_cz_b, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2_mova_zc_b, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2_mova_cz_h, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2_mova_zc_h, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2_mova_cz_s, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2_mova_zc_s, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2_mova_cz_d, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2_mova_zc_d, TCG_CALL_NO_RWG, void, ptr, ptr, i32) + DEF_HELPER_FLAGS_5(sme_ld1b_h, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i3= 2) DEF_HELPER_FLAGS_5(sme_ld1b_v, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i3= 2) DEF_HELPER_FLAGS_5(sme_ld1b_h_mte, TCG_CALL_NO_WG, void, env, ptr, ptr, tl= , i32) diff --git a/target/arm/tcg/translate.h b/target/arm/tcg/translate.h index b03956a7937..7336b7db721 100644 --- a/target/arm/tcg/translate.h +++ b/target/arm/tcg/translate.h @@ -73,6 +73,7 @@ typedef struct DisasContext { int zt0_excp_el; /* ZT0 exception EL or 0 if enabled */ int vl; /* current vector length in bytes */ int svl; /* current streaming vector length in bytes */ + int max_svl; /* maximum implemented streaming vector length */ bool vfp_enabled; /* FP enabled via FPSCR.EN */ int vec_len; int vec_stride; diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 459b96805f9..5eca5f4acff 100644 --- a/target/arm/tcg/sme.decode +++ b/target/arm/tcg/sme.decode @@ -28,6 +28,7 @@ ZERO_zt0 11000000 01 001 00000000000 00000001 =20 %mova_rs 13:2 !function=3Dplus_12 &mova_p esz rs pg zr za off v:bool +&mova_t esz rs zr za off v:bool =20 MOVA_tz 11000000 00 00000 0 v:1 .. pg:3 zr:5 0 off:4 \ &mova_p rs=3D%mova_rs esz=3D0 za=3D0 @@ -51,6 +52,42 @@ MOVA_zt 11000000 11 00001 0 v:1 .. pg:3 0 za:3 o= ff:1 zr:5 \ MOVA_zt 11000000 11 00001 1 v:1 .. pg:3 0 za:4 zr:5 \ &mova_p rs=3D%mova_rs esz=3D4 off=3D0 =20 +MOVA_tz2 11000000 00 00010 0 v:1 .. 000 zr:4 0 00 off:3 \ + &mova_t rs=3D%mova_rs esz=3D0 za=3D0 +MOVA_tz2 11000000 01 00010 0 v:1 .. 000 zr:4 0 00 za:1 off:2 \ + &mova_t rs=3D%mova_rs esz=3D1 +MOVA_tz2 11000000 10 00010 0 v:1 .. 000 zr:4 0 00 za:2 off:1 \ + &mova_t rs=3D%mova_rs esz=3D2 +MOVA_tz2 11000000 11 00010 0 v:1 .. 000 zr:4 0 00 za:3 \ + &mova_t rs=3D%mova_rs esz=3D3 off=3D0 + +MOVA_zt2 11000000 00 00011 0 v:1 .. 000 00 off:3 zr:4 0 \ + &mova_t rs=3D%mova_rs esz=3D0 za=3D0 +MOVA_zt2 11000000 01 00011 0 v:1 .. 000 00 za:1 off:2 zr:4 0 \ + &mova_t rs=3D%mova_rs esz=3D1 +MOVA_zt2 11000000 10 00011 0 v:1 .. 000 00 za:2 off:1 zr:4 0 \ + &mova_t rs=3D%mova_rs esz=3D2 +MOVA_zt2 11000000 11 00011 0 v:1 .. 000 00 za:3 zr:4 0 \ + &mova_t rs=3D%mova_rs esz=3D3 off=3D0 + +MOVA_tz4 11000000 00 00010 0 v:1 .. 001 zr:3 00 000 off:2 \ + &mova_t rs=3D%mova_rs esz=3D0 za=3D0 +MOVA_tz4 11000000 01 00010 0 v:1 .. 001 zr:3 00 000 za:1 off:1 \ + &mova_t rs=3D%mova_rs esz=3D1 +MOVA_tz4 11000000 10 00010 0 v:1 .. 001 zr:3 00 000 za:2 \ + &mova_t rs=3D%mova_rs esz=3D2 off=3D0 +MOVA_tz4 11000000 11 00010 0 v:1 .. 001 zr:3 00 00 za:3 \ + &mova_t rs=3D%mova_rs esz=3D3 off=3D0 + +MOVA_zt4 11000000 00 00011 0 v:1 .. 001 000 off:2 zr:3 00 \ + &mova_t rs=3D%mova_rs esz=3D0 za=3D0 +MOVA_zt4 11000000 01 00011 0 v:1 .. 001 000 za:1 off:1 zr:3 00 \ + &mova_t rs=3D%mova_rs esz=3D1 +MOVA_zt4 11000000 10 00011 0 v:1 .. 001 000 za:2 zr:3 00 \ + &mova_t rs=3D%mova_rs esz=3D2 off=3D0 +MOVA_zt4 11000000 11 00011 0 v:1 .. 001 00 za:3 zr:3 00 \ + &mova_t rs=3D%mova_rs esz=3D3 off=3D0 + ### SME Move into/from ZT0 =20 MOVT_rzt 1100 0000 0100 1100 0 off:3 00 11111 rt:5 diff --git a/target/arm/tcg/sme_helper.c b/target/arm/tcg/sme_helper.c index 7b0bc1b17c0..baeaa3e0690 100644 --- a/target/arm/tcg/sme_helper.c +++ b/target/arm/tcg/sme_helper.c @@ -206,6 +206,50 @@ void HELPER(sme_mova_zc_q)(void *vd, void *za, void *v= g, uint32_t desc) =20 #undef DO_MOVA_Z =20 +void HELPER(sme2_mova_zc_b)(void *vdst, void *vsrc, uint32_t desc) +{ + const uint8_t *src =3D vsrc; + uint8_t *dst =3D vdst; + size_t i, n =3D simd_oprsz(desc); + + for (i =3D 0; i < n; ++i) { + dst[i] =3D src[tile_vslice_index(i)]; + } +} + +void HELPER(sme2_mova_zc_h)(void *vdst, void *vsrc, uint32_t desc) +{ + const uint16_t *src =3D vsrc; + uint16_t *dst =3D vdst; + size_t i, n =3D simd_oprsz(desc) / 2; + + for (i =3D 0; i < n; ++i) { + dst[i] =3D src[tile_vslice_index(i)]; + } +} + +void HELPER(sme2_mova_zc_s)(void *vdst, void *vsrc, uint32_t desc) +{ + const uint32_t *src =3D vsrc; + uint32_t *dst =3D vdst; + size_t i, n =3D simd_oprsz(desc) / 4; + + for (i =3D 0; i < n; ++i) { + dst[i] =3D src[tile_vslice_index(i)]; + } +} + +void HELPER(sme2_mova_zc_d)(void *vdst, void *vsrc, uint32_t desc) +{ + const uint64_t *src =3D vsrc; + uint64_t *dst =3D vdst; + size_t i, n =3D simd_oprsz(desc) / 8; + + for (i =3D 0; i < n; ++i) { + dst[i] =3D src[tile_vslice_index(i)]; + } +} + /* * Clear elements in a tile slice comprising len bytes. */ @@ -314,6 +358,26 @@ static void copy_vertical_q(void *vdst, const void *vs= rc, size_t len) } } =20 +void HELPER(sme2_mova_cz_b)(void *vdst, void *vsrc, uint32_t desc) +{ + copy_vertical_b(vdst, vsrc, simd_oprsz(desc)); +} + +void HELPER(sme2_mova_cz_h)(void *vdst, void *vsrc, uint32_t desc) +{ + copy_vertical_h(vdst, vsrc, simd_oprsz(desc)); +} + +void HELPER(sme2_mova_cz_s)(void *vdst, void *vsrc, uint32_t desc) +{ + copy_vertical_s(vdst, vsrc, simd_oprsz(desc)); +} + +void HELPER(sme2_mova_cz_d)(void *vdst, void *vsrc, uint32_t desc) +{ + copy_vertical_d(vdst, vsrc, simd_oprsz(desc)); +} + /* * Host and TLB primitives for vertical tile slice addressing. */ diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c index ad293c08858..d823036c96f 100644 --- a/target/arm/tcg/translate-a64.c +++ b/target/arm/tcg/translate-a64.c @@ -10142,6 +10142,7 @@ static void aarch64_tr_init_disas_context(DisasCont= extBase *dcbase, dc->zt0_excp_el =3D EX_TBFLAG_A64(tb_flags, ZT0EXC_EL); dc->vl =3D (EX_TBFLAG_A64(tb_flags, VL) + 1) * 16; dc->svl =3D (EX_TBFLAG_A64(tb_flags, SVL) + 1) * 16; + dc->max_svl =3D arm_cpu->sme_max_vq * 16; dc->pauth_active =3D EX_TBFLAG_A64(tb_flags, PAUTH_ACTIVE); dc->bt =3D EX_TBFLAG_A64(tb_flags, BT); dc->btype =3D EX_TBFLAG_A64(tb_flags, BTYPE); diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index ea0e5a7cb5b..7d4c7d7e855 100644 --- a/target/arm/tcg/translate-sme.c +++ b/target/arm/tcg/translate-sme.c @@ -227,6 +227,77 @@ static bool do_mova_tile(DisasContext *s, arg_mova_p *= a, bool to_vec) TRANS_FEAT(MOVA_tz, aa64_sme, do_mova_tile, a, false) TRANS_FEAT(MOVA_zt, aa64_sme, do_mova_tile, a, true) =20 +static bool do_mova_tile_n(DisasContext *s, arg_mova_t *a, int n, bool to_= vec) +{ + static gen_helper_gvec_2 * const cz_fns[] =3D { + gen_helper_sme2_mova_cz_b, gen_helper_sme2_mova_cz_h, + gen_helper_sme2_mova_cz_s, gen_helper_sme2_mova_cz_d, + }; + static gen_helper_gvec_2 * const zc_fns[] =3D { + gen_helper_sme2_mova_zc_b, gen_helper_sme2_mova_zc_h, + gen_helper_sme2_mova_zc_s, gen_helper_sme2_mova_zc_d, + }; + TCGv_ptr t_za; + int svl, bytes_per_op =3D n << a->esz; + + /* + * The MaxImplementedSVL check happens in the decode pseudocode, + * before the SM+ZA enabled check in the operation pseudocode. + * This will (currently) only fail for NREG=3D4, ESZ=3DMO_64. + */ + if (s->max_svl < bytes_per_op) { + unallocated_encoding(s); + return true; + } + + if (!sme_smza_enabled_check(s)) { + return true; + } + + svl =3D streaming_vec_reg_size(s); + + /* + * The CurrentVL check happens in the operation pseudocode, + * after the SM+ZA enabled check. + */ + if (svl < bytes_per_op) { + unallocated_encoding(s); + return true; + } + + if (a->v) { + TCGv_i32 t_desc =3D tcg_constant_i32(simd_desc(svl, svl, 0)); + + for (int i =3D 0; i < n; ++i) { + TCGv_ptr t_zr =3D vec_full_reg_ptr(s, a->zr * n + i); + t_za =3D get_tile_rowcol(s, a->esz, a->rs, a->za, + a->off * n + i, 1, n, a->v); + if (to_vec) { + zc_fns[a->esz](t_zr, t_za, t_desc); + } else { + cz_fns[a->esz](t_za, t_zr, t_desc); + } + } + } else { + for (int i =3D 0; i < n; ++i) { + int o_zr =3D vec_full_reg_offset(s, a->zr * n + i); + t_za =3D get_tile_rowcol(s, a->esz, a->rs, a->za, + a->off * n + i, 1, n, a->v); + if (to_vec) { + tcg_gen_gvec_mov_var(MO_8, tcg_env, o_zr, t_za, 0, svl, sv= l); + } else { + tcg_gen_gvec_mov_var(MO_8, t_za, 0, tcg_env, o_zr, svl, sv= l); + } + } + } + return true; +} + +TRANS_FEAT(MOVA_tz2, aa64_sme2, do_mova_tile_n, a, 2, false) +TRANS_FEAT(MOVA_tz4, aa64_sme2, do_mova_tile_n, a, 4, false) +TRANS_FEAT(MOVA_zt2, aa64_sme2, do_mova_tile_n, a, 2, true) +TRANS_FEAT(MOVA_zt4, aa64_sme2, do_mova_tile_n, a, 4, true) + static bool do_movt(DisasContext *s, arg_MOVT_rzt *a, void (*func)(TCGv_i64, TCGv_ptr, tcg_target_long)) { --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647073; cv=none; d=zohomail.com; s=zohoarc; b=h7sIWs2FVffD/FyGdc4y+Qu0wU8AaEWnQDmciWkvtHRlG5ERrT2PoLXhBsqHZocRtddrQfvMJRqTP0CxO1IBJgug8b+cTf7CPhdVD0w2aPKdNo2I6wEpeIB2EqXblErhcwtW0fGBYiLkmNeUNj3aBlreLSeNZf3fYi3B5f1RuSk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647073; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=eJFuT0WxcqICGZmitJ/XZejUQHP1th9lKbUxFGlZobg=; b=h+Hpt0d7pyOW/laLPRqA7cfd6zg51a2C/4HUhe2DdAU6XnbKCp+L6P6o3Wz9cj21Z57TRcEUe5I5M6w9rwlZtJ7YIZ/k6NSMkTLK+vlWPcJNoN1HgSFEOopsZcqYa4sJpsC+MUO8o1aLcIHNRGXO6zRzvMqGTPB4orAu+wJQ2vE= 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 1751647073408485.75133354807076; Fri, 4 Jul 2025 09:37:53 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjEM-0000N6-Ly; Fri, 04 Jul 2025 12:25:42 -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 1uXjEL-0000Lq-6F for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:41 -0400 Received: from mail-wm1-x32e.google.com ([2a00:1450:4864:20::32e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjEJ-0006Ef-Ao for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:40 -0400 Received: by mail-wm1-x32e.google.com with SMTP id 5b1f17b1804b1-451d6ade159so9789455e9.1 for ; Fri, 04 Jul 2025 09:25:38 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.37 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646338; x=1752251138; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=eJFuT0WxcqICGZmitJ/XZejUQHP1th9lKbUxFGlZobg=; b=dK4hBqICIIJ7dQjGqEIRbfjVCc80HK9NCF6UtGInnPfDsROtlO3bt5JjI5mswyJEzQ 75tm/Mg4YHLdGa0JNdKQkvbZtuVaOMGKR6aJL5O3RmzJZXjpovL4WugqooJP2igmUc2G U8P6rOb9tM5JoXBi66E4Gn+HObHvoXyVkPqj2zCyxie4elEWsMyItXT83C0D5Gba8tW4 CqOgDneSRjhQ4x1ufYuwTvKOQRNA0BUL0itqcnZcDVFPzslO1aNZpszqNjftGPqozKdZ wtlrvhZcfeXoiW1NKf7MrqO1Y45v/TNUVokAC4EsfCuN+iSkJtgQT9VMMMD4ZVVAvcUF Z+XA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646338; x=1752251138; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=eJFuT0WxcqICGZmitJ/XZejUQHP1th9lKbUxFGlZobg=; b=Ila8XgybUh0ltAipPODechl5hG4TUlxvAj87uVlTkDPEe3zekwOT52szbxVNYAUjyb mPqLbrpwaI83QzevQ4Qyl4etuEk4qkh5eJeZePYwtmoC50Kf98OifylI2MxuRx7vaDAz lStmunP/ydkqMEe9BIiQzc1BKsU59zh2zp4vRthW0Hp+DGEJdCl0CthHVM1PTxtNmRS1 WVluZ+lW1++cNw0kU17pw27JiGkW0vrg/P2JQqFNvKMYslXXCo3kmkgZpYr0W0WcueA7 26Qn+EWNAeUiHmJ4XMoGsk/QmQ30sGc2ZeKVMR2/OHl44AykxBLH01QIha/rouTFWBl5 ar8A== X-Gm-Message-State: AOJu0YyOGJfkoAopAe+1UnHsonlD4AN+8imiDbhiaoDkkoq+bPouMUug OVK+kUcLC2v5UoCv1vKveWKcfr93/JVUQAk7w6EsaHZrlPdzybbFY4Np5P18P8qaeNYV9bwt+Q4 hvs/N X-Gm-Gg: ASbGncvTKMR0vFGHVUOZ80qRq3wgKriMDeay67Laa4P3OGh05h3sKLmPkJsNOHaNCCq 9oOb2bXUDqmPbNm9OTGehaNEXSgLwN6i6lJ2YrPwz7py23rZCt/kDIOw7gjQHztPSO2OeWE1bsf rkrLL1ncWBlnOp8zpvmCPB/4gPgkvtc9AWcOPEfI2f67kj205NvpvVZ81mEliWwge3EWe+mYIyj 0VatiWzQyZcemvJXnf+M6XjuabVAelUatPjvbpWbIS7f/Ljo3sP56wBk4zlCGLqRMsrVcgydclD cexooxNKxqIjkVtO0gA1yr0s8K1YZqTX0lzNYo+YKjVXpS+EN7v+PLheKyiez3q9Ly4d X-Google-Smtp-Source: AGHT+IHE4yqnPxRMGrE4RmJ/w/uuz6mLswwr1DfpCMcAlrW1kvC1d7kFkVZX4N3TlWrjOdVb5/ppVA== X-Received: by 2002:a05:600c:3153:b0:43c:f70a:2af0 with SMTP id 5b1f17b1804b1-454b4ea5f53mr35214705e9.16.1751646337878; Fri, 04 Jul 2025 09:25:37 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 038/119] target/arm: Implement SME2 MOVA to/from array, multiple registers Date: Fri, 4 Jul 2025 17:23:38 +0100 Message-ID: <20250704162501.249138-39-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::32e; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x32e.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751647074974116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-27-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/translate.h | 5 +++++ target/arm/tcg/sme.decode | 12 ++++++++++++ target/arm/tcg/translate-sme.c | 30 ++++++++++++++++++++++++++++++ 3 files changed, 47 insertions(+) diff --git a/target/arm/tcg/translate.h b/target/arm/tcg/translate.h index 7336b7db721..a18d07540e6 100644 --- a/target/arm/tcg/translate.h +++ b/target/arm/tcg/translate.h @@ -210,6 +210,11 @@ static inline int plus_2(DisasContext *s, int x) return x + 2; } =20 +static inline int plus_8(DisasContext *s, int x) +{ + return x + 8; +} + static inline int plus_12(DisasContext *s, int x) { return x + 12; diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 5eca5f4acff..37bd0c6198d 100644 --- a/target/arm/tcg/sme.decode +++ b/target/arm/tcg/sme.decode @@ -27,6 +27,8 @@ ZERO_zt0 11000000 01 001 00000000000 00000001 ### SME Move into/from Array =20 %mova_rs 13:2 !function=3Dplus_12 +%mova_rv 13:2 !function=3Dplus_8 +&mova_a rv zr off &mova_p esz rs pg zr za off v:bool &mova_t esz rs zr za off v:bool =20 @@ -88,6 +90,16 @@ MOVA_zt4 11000000 10 00011 0 v:1 .. 001 000 za:2 = zr:3 00 \ MOVA_zt4 11000000 11 00011 0 v:1 .. 001 00 za:3 zr:3 00 \ &mova_t rs=3D%mova_rs esz=3D3 off=3D0 =20 +MOVA_az2 11000000 00 00010 00 .. 010 zr:4 000 off:3 \ + &mova_a rv=3D%mova_rv +MOVA_az4 11000000 00 00010 00 .. 011 zr:3 0000 off:3 \ + &mova_a rv=3D%mova_rv + +MOVA_za2 11000000 00 00011 00 .. 010 00 off:3 zr:4 0 \ + &mova_a rv=3D%mova_rv +MOVA_za4 11000000 00 00011 00 .. 011 00 off:3 zr:3 00 \ + &mova_a rv=3D%mova_rv + ### SME Move into/from ZT0 =20 MOVT_rzt 1100 0000 0100 1100 0 off:3 00 11111 rt:5 diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index 7d4c7d7e855..7b275dd2b84 100644 --- a/target/arm/tcg/translate-sme.c +++ b/target/arm/tcg/translate-sme.c @@ -298,6 +298,36 @@ TRANS_FEAT(MOVA_tz4, aa64_sme2, do_mova_tile_n, a, 4, = false) TRANS_FEAT(MOVA_zt2, aa64_sme2, do_mova_tile_n, a, 2, true) TRANS_FEAT(MOVA_zt4, aa64_sme2, do_mova_tile_n, a, 4, true) =20 +static bool do_mova_array_n(DisasContext *s, arg_mova_a *a, int n, bool to= _vec) +{ + TCGv_ptr t_za; + int svl; + + if (!sme_smza_enabled_check(s)) { + return true; + } + + svl =3D streaming_vec_reg_size(s); + t_za =3D get_zarray(s, a->rv, a->off, n, 0); + + for (int i =3D 0; i < n; ++i) { + int o_za =3D (svl / n * sizeof(ARMVectorReg)) * i; + int o_zr =3D vec_full_reg_offset(s, a->zr * n + i); + + if (to_vec) { + tcg_gen_gvec_mov_var(MO_8, tcg_env, o_zr, t_za, o_za, svl, svl= ); + } else { + tcg_gen_gvec_mov_var(MO_8, t_za, o_za, tcg_env, o_zr, svl, svl= ); + } + } + return true; +} + +TRANS_FEAT(MOVA_az2, aa64_sme2, do_mova_array_n, a, 2, false) +TRANS_FEAT(MOVA_az4, aa64_sme2, do_mova_array_n, a, 4, false) +TRANS_FEAT(MOVA_za2, aa64_sme2, do_mova_array_n, a, 2, true) +TRANS_FEAT(MOVA_za4, aa64_sme2, do_mova_array_n, a, 4, true) + static bool do_movt(DisasContext *s, arg_MOVT_rzt *a, void (*func)(TCGv_i64, TCGv_ptr, tcg_target_long)) { --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646448; cv=none; d=zohomail.com; s=zohoarc; b=LYYiuLVB51jtR+RYkCdccl9SLtlzuhPx1n3GdTR3PzXDuKxkL5g5Rl1A51qSJro2ExQhgH496pCDfyvIJjvEtkDFQNuyKyg2ggCyKM/aZpnytwG4Z0jI+5V4L2nYtjCRyAd/R0zqf3to4ilxjmYER9T6s6XcankDqt8xsx2tOIs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646448; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=V+hXRHTFrXwNMQu9eu6KCepG3zpKCogYu04WvFEC36I=; b=bFWMuOxRR1kcpyXRKBgG3keLhHJt2qm5M4SZC/DoYWZonri/KsYjOtmYI8ZBJT8hGAmJYv2pKcDGay4zggN5IdB6FbIs2Vder/oeiAke4aHc0jYSVkAiia+fL3iOvLWqfJ8AS4UFp2A328yp333GYiCb3jsPQPMWbrYQWLwnWPE= 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 1751646448696518.1883579953748; Fri, 4 Jul 2025 09:27:28 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjEP-0000U7-2u; Fri, 04 Jul 2025 12:25:45 -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 1uXjEL-0000Ms-VJ for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:41 -0400 Received: from mail-wm1-x32e.google.com ([2a00:1450:4864:20::32e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjEK-0006Ey-7F for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:41 -0400 Received: by mail-wm1-x32e.google.com with SMTP id 5b1f17b1804b1-453066fad06so7823675e9.2 for ; Fri, 04 Jul 2025 09:25:39 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.37 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646339; x=1752251139; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=V+hXRHTFrXwNMQu9eu6KCepG3zpKCogYu04WvFEC36I=; b=Iot5uVfaf4FT2UMPvKx1klI0pAGY5sqCezMziNS0hACth+bLtQcR5/BHuaQ2gI9a17 mkyuCkk5KFAJRbRxHGo+ODMUeccwlMBJDf9RobL0UBKkkbx8C3MheL+XRrQJ1kP0a2P3 gx76VAQBGLieRXKh6FDW7HuP2en716Fi+bGNclUjUk2cjJmoWbCq4g8k5wbF0DWbmMJx BKz15x3gunRfbh2IHxSw1FG8JzaiF0n5F5xrj5s4HzYmtKeAoB5qrr61ZfllJTceyfDy hO+6ezkTX06cS18wqsuYCLwm7P1G60hEpS1mhb7VKxRsbc4agcMCQCRhHSRZynB3ig6R ewtg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646339; x=1752251139; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=V+hXRHTFrXwNMQu9eu6KCepG3zpKCogYu04WvFEC36I=; b=CyYTIzlhwqQItZDAGnVL7T9lBlSgomwOfX9prFj95ZPmRoEVxPwwNDL5mYccTaNrBw IYJ5aGGjzLh1Qeg/G2ODpl2Ff4VmBRtvybRTyqDMf8OrG+UIQD6fP7EDg2HZkYgtcWiD hJUwibjcBX0Kj2wjUKChaasgjvZCCIq2L2HOxj7q/S90l78PPPfPO+F+neihddl1M4O/ /izgvn0uUDl1OBLOP5/qF4P0W1+GbXdi853E/XkEaXJaaWsaqS6An5RZDqj8usnB96C6 HrQcO4x6ICfkz67iLz/CYbzweLKyTnVEElij2sG/dtF7fV8r3n49sqMxv649/2k+CAkn NFLw== X-Gm-Message-State: AOJu0YwxithANv0gGQ/g9ZX+bpGeeTlapY+5hlWnpnDjsjFm+uvb5R1h HBsRZDYR83ggVR7VIR1CcT+XHSGbLXCP9iO3SWtbgdlf6fJKqA+/5FaFlxwLof4+jrHmaGEGTFA Nzeky X-Gm-Gg: ASbGncszh5uXRJ++MW+VtsMFJlO3SemCMD/qka433ISeFVbScKOdahVfX6hIMJHZ2NV 2gjI+4LROSdmRyDMUN+ayjCvgpXZOYTdmVmzib5cQExFK8tQEYxw8HHIbxkfuMMwEF4EiS2XFdE qgO4C8tQv/CQCVmNz6T2YYYLXn21rH3P3K4+2ltCvW0+FGxGDrr3iQqYU1nmpjdFq88KeQiMAZ9 z1Ss5TdJlFks60Y1aCeTR1yrQE4OYPFsEJew4EA1fEaUtgoIuu57b4W4vd8rt7KI8vf/k6xXuwS NNRA+wVh6v2RALU1XyaAGDI+ob/eJ32wRA1JpUYC1OmwA/1+br8a8dDe1DbZYFhLewjj X-Google-Smtp-Source: AGHT+IEChK82j95Xb6COKcq+aq3JDjJAsa440Hg7D+lXspzsJ9l5lHyv0S9eWDLeUXk/VY5OeoaumA== X-Received: by 2002:a05:6000:4601:b0:3a5:8a68:b82d with SMTP id ffacd0b85a97d-3b4965ff5cbmr2489786f8f.43.1751646338713; Fri, 04 Jul 2025 09:25:38 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 039/119] target/arm: Implement SME2 BMOPA Date: Fri, 4 Jul 2025 17:23:39 +0100 Message-ID: <20250704162501.249138-40-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::32e; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x32e.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751646449264116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-28-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/helper-sme.h | 3 +++ target/arm/tcg/sme.decode | 2 ++ target/arm/tcg/sme_helper.c | 34 ++++++++++++++++++++++++---------- target/arm/tcg/translate-sme.c | 2 ++ 4 files changed, 31 insertions(+), 10 deletions(-) diff --git a/target/arm/tcg/helper-sme.h b/target/arm/tcg/helper-sme.h index 8246ce774ca..17d1a7c1029 100644 --- a/target/arm/tcg/helper-sme.h +++ b/target/arm/tcg/helper-sme.h @@ -153,3 +153,6 @@ DEF_HELPER_FLAGS_6(sme_sumopa_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_6(sme_usmopa_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, ptr, i32) + +DEF_HELPER_FLAGS_6(sme2_bmopa_s, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, ptr, ptr, i32) diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 37bd0c6198d..de8d04cb878 100644 --- a/target/arm/tcg/sme.decode +++ b/target/arm/tcg/sme.decode @@ -165,3 +165,5 @@ SMOPA_d 1010000 0 11 0 ..... ... ... ..... . 0 = ... @op_64 SUMOPA_d 1010000 0 11 1 ..... ... ... ..... . 0 ... @op_64 USMOPA_d 1010000 1 11 0 ..... ... ... ..... . 0 ... @op_64 UMOPA_d 1010000 1 11 1 ..... ... ... ..... . 0 ... @op_64 + +BMOPA 1000000 0 10 0 ..... ... ... ..... . 10 .. @op_32 diff --git a/target/arm/tcg/sme_helper.c b/target/arm/tcg/sme_helper.c index baeaa3e0690..6122a5b5d9e 100644 --- a/target/arm/tcg/sme_helper.c +++ b/target/arm/tcg/sme_helper.c @@ -1297,17 +1297,31 @@ DEF_IMOP_64(umopa_d, uint16_t, uint16_t) DEF_IMOP_64(sumopa_d, int16_t, uint16_t) DEF_IMOP_64(usmopa_d, uint16_t, int16_t) =20 -#define DEF_IMOPH(NAME, S) \ - void HELPER(sme_##NAME##_##S)(void *vza, void *vzn, void *vzm, = \ +#define DEF_IMOPH(P, NAME, S) \ + void HELPER(P##_##NAME##_##S)(void *vza, void *vzn, void *vzm, = \ void *vpn, void *vpm, uint32_t desc) = \ { do_imopa_##S(vza, vzn, vzm, vpn, vpm, desc, NAME##_##S); } =20 -DEF_IMOPH(smopa, s) -DEF_IMOPH(umopa, s) -DEF_IMOPH(sumopa, s) -DEF_IMOPH(usmopa, s) +DEF_IMOPH(sme, smopa, s) +DEF_IMOPH(sme, umopa, s) +DEF_IMOPH(sme, sumopa, s) +DEF_IMOPH(sme, usmopa, s) =20 -DEF_IMOPH(smopa, d) -DEF_IMOPH(umopa, d) -DEF_IMOPH(sumopa, d) -DEF_IMOPH(usmopa, d) +DEF_IMOPH(sme, smopa, d) +DEF_IMOPH(sme, umopa, d) +DEF_IMOPH(sme, sumopa, d) +DEF_IMOPH(sme, usmopa, d) + +static uint32_t bmopa_s(uint32_t n, uint32_t m, uint32_t a, uint8_t p, boo= l neg) +{ + uint32_t sum =3D ctpop32(~(n ^ m)); + if (neg) { + sum =3D -sum; + } + if (!(p & 1)) { + sum =3D 0; + } + return a + sum; +} + +DEF_IMOPH(sme2, bmopa, s) diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index 7b275dd2b84..c2615f06aee 100644 --- a/target/arm/tcg/translate-sme.c +++ b/target/arm/tcg/translate-sme.c @@ -539,3 +539,5 @@ TRANS_FEAT(SMOPA_d, aa64_sme_i16i64, do_outprod, a, MO_= 64, gen_helper_sme_smopa_ TRANS_FEAT(UMOPA_d, aa64_sme_i16i64, do_outprod, a, MO_64, gen_helper_sme_= umopa_d) TRANS_FEAT(SUMOPA_d, aa64_sme_i16i64, do_outprod, a, MO_64, gen_helper_sme= _sumopa_d) TRANS_FEAT(USMOPA_d, aa64_sme_i16i64, do_outprod, a, MO_64, gen_helper_sme= _usmopa_d) + +TRANS_FEAT(BMOPA, aa64_sme2, do_outprod, a, MO_32, gen_helper_sme2_bmopa_s) --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647413; cv=none; d=zohomail.com; s=zohoarc; b=WqmNjQ9haAMbENTGQF5KhPl7ShDSxeJzn+sG9AsgoIcP6EDSmBa/UIZshIPaX2SlF22BIxDaigkpvuTfOJYYzayWLug9VMtdw5R7PkMQZBlWl7qx265lpOFRS2MC4KGpGx+uQ0eZB3VI4Xw9OLZ15xnXxYDM3x7+crlTch6t4LY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647413; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=fdhHmwhlsfgW93GbUQo1WTT/SpEUkG5ImXRWraW9Y58=; b=hGNRxsBvo/xNJwKtMCioV52kaoriEMUQ1MDanSB3JCTW8W9nPuXGmpAww/Vf8A/HZTRjY2wZeKUOaPllN9m32/XuhD48O1Nffin6KgomNJP5um/baljfjAhGzDSYZuMB+9YJKTt548B9JQqw0L9GK+XUQnmbVPLJ660DVc6EwlA= 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 175164741367459.590793000815324; Fri, 4 Jul 2025 09:43:33 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjEQ-0000Xi-Px; Fri, 04 Jul 2025 12:25:46 -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 1uXjEN-0000R4-6v for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:43 -0400 Received: from mail-wr1-x433.google.com ([2a00:1450:4864:20::433]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjEL-0006FS-7r for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:42 -0400 Received: by mail-wr1-x433.google.com with SMTP id ffacd0b85a97d-3a5257748e1so869159f8f.2 for ; Fri, 04 Jul 2025 09:25:40 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.38 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646340; x=1752251140; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=fdhHmwhlsfgW93GbUQo1WTT/SpEUkG5ImXRWraW9Y58=; b=Pl06ukHgzUXu2qzJHXkJCvokLEe2EiOsXDtcMJy0qFCWTEh3bVJ3bCrPHD43ZK3aXn knaVyI67euOB1+sqN5s5DchDuzqSHGQa80s5m/VvLgNIWWZt6XhOxwl7rJvYinOjH6en O3L5zeRmLQ6j9gVjdcoWX/9NYGMyz5v4MKzjUVaEaI+Sk2pVJeD5q+n8OMY9Czhaq/GV F9wKypkD178GwgzZkcz+AV8hfpclemtUsFyEe2ZRtsFVyT0F3rJ6rsboSJgDqqzC7iNs XYjWhEEdSnr0JcnadEFhpp7GLlr6/3JG02y1VeM/AILuWwoE+Xj8Hjqf98P6QciSGtqi +8sA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646340; x=1752251140; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=fdhHmwhlsfgW93GbUQo1WTT/SpEUkG5ImXRWraW9Y58=; b=Skd22ethvo9AXZVkrY5Skk7jakZVfavzJCnxzsqnS0uFpiPntqN+2e0T3wTHa9Cloe 8vplIEU8oaw2vsWDy5lqfPW8vIdW+SF3v80RflCbPsja77KXqb4xtDiQyjWj8FLyyxNm SUXwLr48bMXjDfQpta5J02THpKRfFjaLdn1hbCbFAoBM4RTvaa0TEBA5rcD7I5j2Vi+Z OoUS9eHrHFKQANWA4S0I8maICssSLRkYZ6m/hxC4Gm7hY1DQ97h/VQr7eS6VyfMITvIN Xj61F+6ayZHBkh4qDzQUzvRlix8rG6p/BEWN4/XWgDLhtrCSkFSWdG+XJq4lK9l9C7uq RleA== X-Gm-Message-State: AOJu0Yzc1L1CfvXWJEWFkau/2Pif8J20yN2IdESfKYpy+w0ZrPn1jbqm w/pE/NR0IHHXPaaVWE7iTZ/cubJNoSJ1b3XxJwSbTUhAZ4iOSjO2M7/rLOvZgWrq7FKSZlfYzmM y+Y0r X-Gm-Gg: ASbGnctqUl33n3t28t0O3YEoHG01MiNuygenw1ecP1AjRPbhz/buiioqGufSEUT3JqU DWWcf7lnI8Cn/o7DmApT11JNG1sceWe19Ju4/x1b5oCtZLKYFEy9rywdoHRUL0+Ihm8W+EEMRrY 0mlDWDPZ2JGjlcVxvIcdF3FS+JfWePBmz5QcqnViPpcEU3eUVy0bqd10fX2uUuzeXejGedeWBBh v5ZI75Tc5X6JDgpT+VAhBOCpUuZKhnKBJY/xh0YdXGXkduWtHo6c8XYr/csxnWVaGAMIzoH8dpJ 91TMQuwnzKajxIUww+PZm7BDNSYUOu4xPZOHgqhPUuBIMLfZdGUMvzADNRfguOlgb6Y7 X-Google-Smtp-Source: AGHT+IFCDVZW++JV90ixrd/d3GfugVfkFy+gsDQvWdLcvs9nSqGMriHV1pflaAEudlOwu0FdORF9EA== X-Received: by 2002:a05:6000:1a8b:b0:3a4:d994:be7d with SMTP id ffacd0b85a97d-3b49702067dmr2520087f8f.23.1751646339565; Fri, 04 Jul 2025 09:25:39 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 040/119] target/arm: Implement SME2 SMOPS, UMOPS (2-way) Date: Fri, 4 Jul 2025 17:23:40 +0100 Message-ID: <20250704162501.249138-41-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::433; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x433.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751647414847116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-29-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/helper-sme.h | 4 ++++ target/arm/tcg/sme.decode | 2 ++ target/arm/tcg/sme_helper.c | 37 +++++++++++++++++++++++++--------- target/arm/tcg/translate-sme.c | 2 ++ 4 files changed, 35 insertions(+), 10 deletions(-) diff --git a/target/arm/tcg/helper-sme.h b/target/arm/tcg/helper-sme.h index 17d1a7c1029..ecd06f2cd16 100644 --- a/target/arm/tcg/helper-sme.h +++ b/target/arm/tcg/helper-sme.h @@ -156,3 +156,7 @@ DEF_HELPER_FLAGS_6(sme_usmopa_d, TCG_CALL_NO_RWG, =20 DEF_HELPER_FLAGS_6(sme2_bmopa_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, ptr, i32) +DEF_HELPER_FLAGS_6(sme2_smopa2_s, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, ptr, ptr, i32) +DEF_HELPER_FLAGS_6(sme2_umopa2_s, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, ptr, ptr, i32) diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index de8d04cb878..36f369d02aa 100644 --- a/target/arm/tcg/sme.decode +++ b/target/arm/tcg/sme.decode @@ -167,3 +167,5 @@ USMOPA_d 1010000 1 11 0 ..... ... ... ..... . 0 = ... @op_64 UMOPA_d 1010000 1 11 1 ..... ... ... ..... . 0 ... @op_64 =20 BMOPA 1000000 0 10 0 ..... ... ... ..... . 10 .. @op_32 +SMOPA2_s 1010000 0 10 0 ..... ... ... ..... . 10 .. @op_32 +UMOPA2_s 1010000 1 10 0 ..... ... ... ..... . 10 .. @op_32 diff --git a/target/arm/tcg/sme_helper.c b/target/arm/tcg/sme_helper.c index 6122a5b5d9e..8ce50653b4d 100644 --- a/target/arm/tcg/sme_helper.c +++ b/target/arm/tcg/sme_helper.c @@ -1261,7 +1261,7 @@ static inline void do_imopa_d(uint64_t *za, uint64_t = *zn, uint64_t *zm, } } =20 -#define DEF_IMOP_32(NAME, NTYPE, MTYPE) \ +#define DEF_IMOP_8x4_32(NAME, NTYPE, MTYPE) \ static uint32_t NAME(uint32_t n, uint32_t m, uint32_t a, uint8_t p, bool n= eg) \ { = \ uint32_t sum =3D 0; = \ @@ -1274,7 +1274,7 @@ static uint32_t NAME(uint32_t n, uint32_t m, uint32_t= a, uint8_t p, bool neg) \ return neg ? a - sum : a + sum; = \ } =20 -#define DEF_IMOP_64(NAME, NTYPE, MTYPE) \ +#define DEF_IMOP_16x4_64(NAME, NTYPE, MTYPE) \ static uint64_t NAME(uint64_t n, uint64_t m, uint64_t a, uint8_t p, bool n= eg) \ { = \ uint64_t sum =3D 0; = \ @@ -1287,15 +1287,15 @@ static uint64_t NAME(uint64_t n, uint64_t m, uint64= _t a, uint8_t p, bool neg) \ return neg ? a - sum : a + sum; = \ } =20 -DEF_IMOP_32(smopa_s, int8_t, int8_t) -DEF_IMOP_32(umopa_s, uint8_t, uint8_t) -DEF_IMOP_32(sumopa_s, int8_t, uint8_t) -DEF_IMOP_32(usmopa_s, uint8_t, int8_t) +DEF_IMOP_8x4_32(smopa_s, int8_t, int8_t) +DEF_IMOP_8x4_32(umopa_s, uint8_t, uint8_t) +DEF_IMOP_8x4_32(sumopa_s, int8_t, uint8_t) +DEF_IMOP_8x4_32(usmopa_s, uint8_t, int8_t) =20 -DEF_IMOP_64(smopa_d, int16_t, int16_t) -DEF_IMOP_64(umopa_d, uint16_t, uint16_t) -DEF_IMOP_64(sumopa_d, int16_t, uint16_t) -DEF_IMOP_64(usmopa_d, uint16_t, int16_t) +DEF_IMOP_16x4_64(smopa_d, int16_t, int16_t) +DEF_IMOP_16x4_64(umopa_d, uint16_t, uint16_t) +DEF_IMOP_16x4_64(sumopa_d, int16_t, uint16_t) +DEF_IMOP_16x4_64(usmopa_d, uint16_t, int16_t) =20 #define DEF_IMOPH(P, NAME, S) \ void HELPER(P##_##NAME##_##S)(void *vza, void *vzn, void *vzm, = \ @@ -1325,3 +1325,20 @@ static uint32_t bmopa_s(uint32_t n, uint32_t m, uint= 32_t a, uint8_t p, bool neg) } =20 DEF_IMOPH(sme2, bmopa, s) + +#define DEF_IMOP_16x2_32(NAME, NTYPE, MTYPE) \ +static uint32_t NAME(uint32_t n, uint32_t m, uint32_t a, uint8_t p, bool n= eg) \ +{ = \ + uint32_t sum =3D 0; = \ + /* Apply P to N as a mask, making the inactive elements 0. */ = \ + n &=3D expand_pred_h(p); = \ + sum +=3D (NTYPE)(n >> 0) * (MTYPE)(m >> 0); = \ + sum +=3D (NTYPE)(n >> 16) * (MTYPE)(m >> 16); = \ + return neg ? a - sum : a + sum; = \ +} + +DEF_IMOP_16x2_32(smopa2_s, int16_t, int16_t) +DEF_IMOP_16x2_32(umopa2_s, uint16_t, uint16_t) + +DEF_IMOPH(sme2, smopa2, s) +DEF_IMOPH(sme2, umopa2, s) diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index c2615f06aee..0a863a50bf2 100644 --- a/target/arm/tcg/translate-sme.c +++ b/target/arm/tcg/translate-sme.c @@ -541,3 +541,5 @@ TRANS_FEAT(SUMOPA_d, aa64_sme_i16i64, do_outprod, a, MO= _64, gen_helper_sme_sumop TRANS_FEAT(USMOPA_d, aa64_sme_i16i64, do_outprod, a, MO_64, gen_helper_sme= _usmopa_d) =20 TRANS_FEAT(BMOPA, aa64_sme2, do_outprod, a, MO_32, gen_helper_sme2_bmopa_s) +TRANS_FEAT(SMOPA2_s, aa64_sme2, do_outprod, a, MO_32, gen_helper_sme2_smop= a2_s) +TRANS_FEAT(UMOPA2_s, aa64_sme2, do_outprod, a, MO_32, gen_helper_sme2_umop= a2_s) --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646447; cv=none; d=zohomail.com; s=zohoarc; b=PZzLaGQ/QMQq3Iuijp4+VDbijcj8xleXrmUGYHAoJarqY+Ev5lu5iCO21rlsCgKWfSsvYiJyKH0aqh7CcSKnujPyJC/nWXjcaYO/Z2npR/4ySOQwZ+WUBcQEqbdWZmwKpzk2ylTxZeGt4RgRN/zNXOxjcoOjniGERv9r8G6kUg0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646447; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=TeVABKU27JjQMH5BNqpGbGewIvYogQ219hdAmQQCeWo=; b=U7J76zoluPYTbzndtqKLH/ynSoHghheKH6WizoFk2cTgo0fQ7Eh3ndMrAvv0RL3fObLG6iM8380WHIf1cktIggOP7g4v5nT52vztByCWaFvpLUhTCK+VpMMusLgnk09xgc/sWj6ywGHPJZi0J6Mvkzu0uMnMWszPBRUScUItO4w= 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 1751646447517680.9608615853421; Fri, 4 Jul 2025 09:27:27 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjEU-0000g4-4t; Fri, 04 Jul 2025 12:25:50 -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 1uXjEN-0000SD-Qc for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:43 -0400 Received: from mail-wm1-x32b.google.com ([2a00:1450:4864:20::32b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjEM-0006Fm-1a for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:43 -0400 Received: by mail-wm1-x32b.google.com with SMTP id 5b1f17b1804b1-453398e90e9so7307635e9.1 for ; Fri, 04 Jul 2025 09:25:41 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.39 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646340; x=1752251140; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=TeVABKU27JjQMH5BNqpGbGewIvYogQ219hdAmQQCeWo=; b=XzaNeYiTVMqsKl2ykNsucU8hVD96SaG7X9DkV+MOkHGjfruGje0LCnZy6IY1wiV6fA ZuHBAJcy3RjfzaErL+V3tmErm2hmg57tkllL/jux7DQ4WYDv00F9j8B0BJ+z0ppBu13T TXizn1LTJDjODk8jn/wUzKuxE4sFl4uH47YXMArVezOL3yiPE8gs+K62qyfzI+l8XFDF D73ch9+ouzl3gTX1QVDYYhAKRRemiUOeHvHo0D+c8CJogoz1GkSK3jU01M5+13Fdiq7i jM2P0P8eZP534tOfColpwF4SI6uevkja/YH8FxDOCxttfCU1RglZI+2G6+dudZqeV0z2 P07A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646340; x=1752251140; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=TeVABKU27JjQMH5BNqpGbGewIvYogQ219hdAmQQCeWo=; b=XyCWF5OfZI4EpcPpQonpKZiPpFOSMf9t7l+abevU4FN6In5SSvInRChgpvOYEmcSZW c7dNafAEvl8n15gXuvR6QtxB28tLLGKqVWhN0Da5RmyrN07JCnuGMc2e/cpdl4RagB2R Tra5blYIzmzwnBB7fVgPinmNnX+1Kls0Pm2ORHlxmiQ4HFU7ImB+WZYhz+iqVMhGiAYC qXY8Iyb+f5dEWpv6lanEd+C0gWH8n9kM/c0TveSxQx2JX9J75LayZ7VBDl+ntCTdOfVe QjPlFtnNmfF77TmlgV81vIF1WCZxxm+XveGeC3/xgUvXe4S9N2vF6OxBTAUhLcRcehu3 /+WA== X-Gm-Message-State: AOJu0YyDQUO2YxadpGTjwpuP6Nsp0zDWOpd6DRuCR1v+efNqJqNxNWNQ OPHThIdELnCs1GZNccarbCK7VX3l1Q+AtpMCwSBhNutFQS+TPm1R4Lbh3AAdLE/hDjCAGq1z7dA Pw7nJ X-Gm-Gg: ASbGncvY7jfd+i0uGywqFvzmleyEjsfO32b+kDd2H+vYw0UAj27yWjJdol8qU7kSj8I eadA1qtdziEeoBovQfpz8R3f8l391lS4ZBD4iiFXYe89amcqEts1S2PU1q7d+wAYaHrs0PrxlQG qPl7Shp0hKRlO5DQtXFjBJLOTYy4bVEMslKOwCXkcW3+ZRTOnkQGHAFHk5JD+5cMAzxmqLTTKZ7 w72twmmM+WggxqBzhmxH48vuXgGs57nszec0Vow2FJZot1aWp6b7G2pDYtbvxY5q96nwH4/mDIH +4n18b3Xw+3yDn2s20fJj9KTSKUX3LcOnr6LzlSFOWbphwRxXIOf4UmPc5NmvQGBlmK8 X-Google-Smtp-Source: AGHT+IEPvhZMVgok86HdGMPH6JvqG1ufGauo1N7LE6Lv4mv9zELyfCvqjAY2G7+Fd1IERtMRz4UZlA== X-Received: by 2002:a05:600c:6819:b0:43b:ce36:7574 with SMTP id 5b1f17b1804b1-454b3116294mr30564805e9.11.1751646340471; Fri, 04 Jul 2025 09:25:40 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 041/119] target/arm: Introduce gen_gvec_sve2_sqdmulh Date: Fri, 4 Jul 2025 17:23:41 +0100 Message-ID: <20250704162501.249138-42-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::32b; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x32b.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751646449217116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson To be used by both SVE2 and SME2. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-30-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/translate-a64.h | 4 ++++ target/arm/tcg/gengvec64.c | 11 +++++++++++ target/arm/tcg/translate-sve.c | 8 +------- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/target/arm/tcg/translate-a64.h b/target/arm/tcg/translate-a64.h index 8a9f4b20539..993dde61a4d 100644 --- a/target/arm/tcg/translate-a64.h +++ b/target/arm/tcg/translate-a64.h @@ -225,6 +225,10 @@ void gen_gvec_usqadd_qc(unsigned vece, uint32_t rd_ofs, uint32_t rn_ofs, uint32_t rm_ofs, uint32_t opr_sz, uint32_t max_sz); =20 +void gen_gvec_sve2_sqdmulh(unsigned vece, uint32_t rd_ofs, + uint32_t rn_ofs, uint32_t rm_ofs, + uint32_t opr_sz, uint32_t max_sz); + void gen_sve_ldr(DisasContext *s, TCGv_ptr, int vofs, int len, int rn, int imm, MemOp align); void gen_sve_str(DisasContext *s, TCGv_ptr, int vofs, diff --git a/target/arm/tcg/gengvec64.c b/target/arm/tcg/gengvec64.c index 2617cde0a5f..2429cab1b88 100644 --- a/target/arm/tcg/gengvec64.c +++ b/target/arm/tcg/gengvec64.c @@ -369,3 +369,14 @@ void gen_gvec_usqadd_qc(unsigned vece, uint32_t rd_ofs, tcg_gen_gvec_4(rd_ofs, offsetof(CPUARMState, vfp.qc), rn_ofs, rm_ofs, opr_sz, max_sz, &ops[vece]); } + +void gen_gvec_sve2_sqdmulh(unsigned vece, uint32_t rd_ofs, + uint32_t rn_ofs, uint32_t rm_ofs, + uint32_t opr_sz, uint32_t max_sz) +{ + static gen_helper_gvec_3 * const fns[4] =3D { + gen_helper_sve2_sqdmulh_b, gen_helper_sve2_sqdmulh_h, + gen_helper_sve2_sqdmulh_s, gen_helper_sve2_sqdmulh_d, + }; + tcg_gen_gvec_3_ool(rd_ofs, rn_ofs, rm_ofs, opr_sz, max_sz, 0, fns[vece= ]); +} diff --git a/target/arm/tcg/translate-sve.c b/target/arm/tcg/translate-sve.c index d2cd298b5b2..7e304245c64 100644 --- a/target/arm/tcg/translate-sve.c +++ b/target/arm/tcg/translate-sve.c @@ -5948,6 +5948,7 @@ TRANS_FEAT(MOVPRFX_z, aa64_sve, do_movz_zpz, a->rd, a= ->rn, a->pg, a->esz, false) */ =20 TRANS_FEAT(MUL_zzz, aa64_sve2, gen_gvec_fn_arg_zzz, tcg_gen_gvec_mul, a) +TRANS_FEAT(SQDMULH_zzz, aa64_sve2, gen_gvec_fn_arg_zzz, gen_gvec_sve2_sqdm= ulh, a) =20 static gen_helper_gvec_3 * const smulh_zzz_fns[4] =3D { gen_helper_gvec_smulh_b, gen_helper_gvec_smulh_h, @@ -5966,13 +5967,6 @@ TRANS_FEAT(UMULH_zzz, aa64_sve2, gen_gvec_ool_arg_zz= z, TRANS_FEAT(PMUL_zzz, aa64_sve2, gen_gvec_ool_arg_zzz, gen_helper_gvec_pmul_b, a, 0) =20 -static gen_helper_gvec_3 * const sqdmulh_zzz_fns[4] =3D { - gen_helper_sve2_sqdmulh_b, gen_helper_sve2_sqdmulh_h, - gen_helper_sve2_sqdmulh_s, gen_helper_sve2_sqdmulh_d, -}; -TRANS_FEAT(SQDMULH_zzz, aa64_sve2, gen_gvec_ool_arg_zzz, - sqdmulh_zzz_fns[a->esz], a, 0) - static gen_helper_gvec_3 * const sqrdmulh_zzz_fns[4] =3D { gen_helper_sve2_sqrdmulh_b, gen_helper_sve2_sqrdmulh_h, gen_helper_sve2_sqrdmulh_s, gen_helper_sve2_sqrdmulh_d, --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647288; cv=none; d=zohomail.com; s=zohoarc; b=YJ0OBrApmPcV9+M8yl8BfDV7MQnq3v+xHg2kYuRNJuxls1+oxIrF1ICWTKhF23vI9GFORWjS0Lqpr2mNmLT2l4x3eOPb4NHvPMIXWrqviH46TsuXzrfap4HNtAj3P1XYxr0sxuEBwrZOvljsCk316mZICNcXj+VMElc24hs191M= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647288; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=gjovWTcfhy0vWPhJ772Zn6DHb7V0bODDWds3pB+vMdc=; b=OFB2W6bfi7cNzEYqnMmr2GSJZ8BvbbgpZTpwxtH0s7xl2NWAW5eNBh0/V2D00d7rdWIw0mXFAOkFv7fdVA24B2GGYFG6irsAlwCXUb80Kfd0htimuTSelkptLqRZfYStX9XLBQ/flD4ASZfymtx7LKdgFbNxX1748Uj5Pasjmk0= 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 1751647288519741.6112318819245; Fri, 4 Jul 2025 09:41:28 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjEX-0000iX-LC; Fri, 04 Jul 2025 12:25:53 -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 1uXjEQ-0000Xd-Da for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:46 -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 1uXjEN-0006GD-VR for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:46 -0400 Received: by mail-wm1-x331.google.com with SMTP id 5b1f17b1804b1-453066fad06so7823805e9.2 for ; Fri, 04 Jul 2025 09:25:42 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.40 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646341; x=1752251141; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=gjovWTcfhy0vWPhJ772Zn6DHb7V0bODDWds3pB+vMdc=; b=mF9GC0i4/5j269VsdiZ29WYxQuH250pRJEl2+KIObbVJOc21jPwGJEijBg3DBPmign yTQRq9eLRROtaTwWLu+cD/EdwdPrvfL7t8IR+N4J7LMHt7gXsxhTGtCf3kHN47/BjxmY btE8zUmoy1e1pm1CM+2KsriA0ROaCmXVV+zDqJ7QwI8JM4tPCz3CtA9WAOIU/a3utz/K obX/d1knWwgCllGNRcpwALmeslIi7akXuvziKLSku7eemXKPwiO2XEy2zMWQRHOjoBgO mWpAACAjY70Krf0uBRV2lrsB0IXnaMCm+4aHedA1++7W1L269Rva3uFdQrMPIdoiaWsE DW0w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646341; x=1752251141; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=gjovWTcfhy0vWPhJ772Zn6DHb7V0bODDWds3pB+vMdc=; b=AMz5mRfpvW2GoN94hj1MCvF9pu8/tMRDL18vGcuIdM1cW4Ca8d1oOglBNZ9FxhrzRi Zv/qHJGO9u/HSltqTWs9DuwRZ0+Rs0H2aiR2M+Cjj5+F6L7SiBZOXKr53tKJKxSDlqwI wriDGAlUnXUSU/j/3/vqzf/5/A3umUfFF+hmNuTl6afjtMlt6zW7ZRYf7dJbGlfIKWED jX90F79s+qHLw5CWc1J8NySnGcb2H5F54Ze8NMo0MiksoKlD5uZE2jfihm/JtsSaONPz ostk9rzMkeR+PUBtSdi0d5q0CgXy97yhphfRQ9zr5Nw9HKDmfl459oNxb9/VojR1SHb5 NmGw== X-Gm-Message-State: AOJu0YzIBcEK7Gc+2WAqBTvS2DirTYtx5sRTfRsGCN/1U2KLtI2PpYyh q2gqoLRnNCagh9L6nwMPJjIjTYPhMDGGvjm4dKEhJk0wkC+UT6x5MJNFSytgdQbuhSfbGNDQHMy VH/wf X-Gm-Gg: ASbGnctEd/St1bL+OpL2Wc1n5TCaq48Nt8wNLrcgWdJ5U3VRmNFu/zVwlxGuzSt1IUD oNacflf0qVde6fws26JMUCXVGcB3J2gdo0zZ0cuLUFMyPqeu//cRbYAh/0QApsch6It+6hxVv27 KGLUWrlrrBfE3lBOYIlbNlxj8bXTCtVHecUvE/5vpSMzEj3mi77Jaih6UJzhGwX8Q3R3O68k6a7 4Jgu8zimUf26wajI9a+ZeG3n2lu467d8k5TfuPsqYcIcyaV69gM/pwRs5Y7vCJ0HH9qB6kZXdeQ 66/oKVgEsSfv4PRpbaeq3V59D1793qdXHzxrssdGPgEmj0PxMpMsXb9bnCRmFg6cBT+vQH46tvk nzZY= X-Google-Smtp-Source: AGHT+IEAnbR+/bmgmshnNZjFZQOvsxTw63V8XHQwzR9zAih8VWD9ubL3YRZAaglM4pAKZA4KShCtBg== X-Received: by 2002:a05:600c:1c01:b0:43d:fa58:81d3 with SMTP id 5b1f17b1804b1-454b9e9cb4cmr1327395e9.32.1751646341411; Fri, 04 Jul 2025 09:25:41 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 042/119] target/arm: Implement SME2 Multiple and Single SVE Destructive Date: Fri, 4 Jul 2025 17:23:42 +0100 Message-ID: <20250704162501.249138-43-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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=peter.maydell@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 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: 1751647289327116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-31-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/helper-sme.h | 13 ++++ target/arm/tcg/helper.h | 8 ++ target/arm/tcg/vec_internal.h | 4 + target/arm/tcg/sme.decode | 40 ++++++++++ target/arm/tcg/helper-a64.c | 2 + target/arm/tcg/neon_helper.c | 30 ++++++++ target/arm/tcg/translate-sme.c | 137 +++++++++++++++++++++++++++++++++ target/arm/tcg/vec_helper.c | 7 ++ 8 files changed, 241 insertions(+) diff --git a/target/arm/tcg/helper-sme.h b/target/arm/tcg/helper-sme.h index ecd06f2cd16..cdd7058aed0 100644 --- a/target/arm/tcg/helper-sme.h +++ b/target/arm/tcg/helper-sme.h @@ -160,3 +160,16 @@ DEF_HELPER_FLAGS_6(sme2_smopa2_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_6(sme2_umopa2_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, ptr, i32) + +DEF_HELPER_FLAGS_5(gvec_fmax_b16, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, fpst, i32) +DEF_HELPER_FLAGS_5(gvec_fmin_b16, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, fpst, i32) +DEF_HELPER_FLAGS_5(gvec_ah_fmax_b16, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, fpst, i32) +DEF_HELPER_FLAGS_5(gvec_ah_fmin_b16, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, fpst, i32) +DEF_HELPER_FLAGS_5(gvec_fmaxnum_b16, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, fpst, i32) +DEF_HELPER_FLAGS_5(gvec_fminnum_b16, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, fpst, i32) diff --git a/target/arm/tcg/helper.h b/target/arm/tcg/helper.h index 80db7c2c37a..8c4705fc539 100644 --- a/target/arm/tcg/helper.h +++ b/target/arm/tcg/helper.h @@ -353,6 +353,14 @@ DEF_HELPER_FLAGS_4(gvec_urshl_h, TCG_CALL_NO_RWG, void= , ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_4(gvec_urshl_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_4(gvec_urshl_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) =20 +DEF_HELPER_FLAGS_4(sme2_srshl_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) +DEF_HELPER_FLAGS_4(sme2_srshl_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) +DEF_HELPER_FLAGS_4(sme2_srshl_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) + +DEF_HELPER_FLAGS_4(sme2_urshl_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) +DEF_HELPER_FLAGS_4(sme2_urshl_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) +DEF_HELPER_FLAGS_4(sme2_urshl_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) + DEF_HELPER_2(neon_add_u8, i32, i32, i32) DEF_HELPER_2(neon_add_u16, i32, i32, i32) DEF_HELPER_2(neon_sub_u8, i32, i32, i32) diff --git a/target/arm/tcg/vec_internal.h b/target/arm/tcg/vec_internal.h index c02f9c37f83..64a7249d017 100644 --- a/target/arm/tcg/vec_internal.h +++ b/target/arm/tcg/vec_internal.h @@ -302,4 +302,8 @@ static inline float64 float64_maybe_ah_chs(float64 a, b= ool fpcr_ah) return fpcr_ah && float64_is_any_nan(a) ? a : float64_chs(a); } =20 +/* Not actually called directly as a helper, but uses similar machinery. */ +bfloat16 helper_sme2_ah_fmax_b16(bfloat16 a, bfloat16 b, float_status *fps= t); +bfloat16 helper_sme2_ah_fmin_b16(bfloat16 a, bfloat16 b, float_status *fps= t); + #endif /* TARGET_ARM_VEC_INTERNAL_H */ diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 36f369d02aa..005f87777b8 100644 --- a/target/arm/tcg/sme.decode +++ b/target/arm/tcg/sme.decode @@ -169,3 +169,43 @@ UMOPA_d 1010000 1 11 1 ..... ... ... ..... . 0= ... @op_64 BMOPA 1000000 0 10 0 ..... ... ... ..... . 10 .. @op_32 SMOPA2_s 1010000 0 10 0 ..... ... ... ..... . 10 .. @op_32 UMOPA2_s 1010000 1 10 0 ..... ... ... ..... . 10 .. @op_32 + +### SME2 Multi-vector Multiple and Single SVE Destructive + +%zd_ax2 1:4 !function=3Dtimes_2 +%zd_ax4 2:3 !function=3Dtimes_4 + +&z2z_en zdn zm esz n +@z2z_2x1 ....... . esz:2 .. zm:4 ....0. ..... .... . \ + &z2z_en n=3D2 zdn=3D%zd_ax2 +@z2z_4x1 ....... . esz:2 .. zm:4 ....1. ..... ...0 . \ + &z2z_en n=3D4 zdn=3D%zd_ax4 + +SMAX_n1 1100000 1 .. 10 .... 1010.0 00000 .... 0 @z2z_2x1 +SMAX_n1 1100000 1 .. 10 .... 1010.0 00000 .... 0 @z2z_4x1 +UMAX_n1 1100000 1 .. 10 .... 1010.0 00000 .... 1 @z2z_2x1 +UMAX_n1 1100000 1 .. 10 .... 1010.0 00000 .... 1 @z2z_4x1 +SMIN_n1 1100000 1 .. 10 .... 1010.0 00001 .... 0 @z2z_2x1 +SMIN_n1 1100000 1 .. 10 .... 1010.0 00001 .... 0 @z2z_4x1 +UMIN_n1 1100000 1 .. 10 .... 1010.0 00001 .... 1 @z2z_2x1 +UMIN_n1 1100000 1 .. 10 .... 1010.0 00001 .... 1 @z2z_4x1 + +FMAX_n1 1100000 1 .. 10 .... 1010.0 01000 .... 0 @z2z_2x1 +FMAX_n1 1100000 1 .. 10 .... 1010.0 01000 .... 0 @z2z_4x1 +FMIN_n1 1100000 1 .. 10 .... 1010.0 01000 .... 1 @z2z_2x1 +FMIN_n1 1100000 1 .. 10 .... 1010.0 01000 .... 1 @z2z_4x1 +FMAXNM_n1 1100000 1 .. 10 .... 1010.0 01001 .... 0 @z2z_2x1 +FMAXNM_n1 1100000 1 .. 10 .... 1010.0 01001 .... 0 @z2z_4x1 +FMINNM_n1 1100000 1 .. 10 .... 1010.0 01001 .... 1 @z2z_2x1 +FMINNM_n1 1100000 1 .. 10 .... 1010.0 01001 .... 1 @z2z_4x1 + +SRSHL_n1 1100000 1 .. 10 .... 1010.0 10001 .... 0 @z2z_2x1 +SRSHL_n1 1100000 1 .. 10 .... 1010.0 10001 .... 0 @z2z_4x1 +URSHL_n1 1100000 1 .. 10 .... 1010.0 10001 .... 1 @z2z_2x1 +URSHL_n1 1100000 1 .. 10 .... 1010.0 10001 .... 1 @z2z_4x1 + +ADD_n1 1100000 1 .. 10 .... 1010.0 11000 .... 0 @z2z_2x1 +ADD_n1 1100000 1 .. 10 .... 1010.0 11000 .... 0 @z2z_4x1 + +SQDMULH_n1 1100000 1 .. 10 .... 1010.1 00000 .... 0 @z2z_2x1 +SQDMULH_n1 1100000 1 .. 10 .... 1010.1 00000 .... 0 @z2z_4x1 diff --git a/target/arm/tcg/helper-a64.c b/target/arm/tcg/helper-a64.c index 4f618ae390e..c66d521278c 100644 --- a/target/arm/tcg/helper-a64.c +++ b/target/arm/tcg/helper-a64.c @@ -402,6 +402,8 @@ AH_MINMAX_HELPER(vfp_ah_mind, float64, float64, min) AH_MINMAX_HELPER(vfp_ah_maxh, dh_ctype_f16, float16, max) AH_MINMAX_HELPER(vfp_ah_maxs, float32, float32, max) AH_MINMAX_HELPER(vfp_ah_maxd, float64, float64, max) +AH_MINMAX_HELPER(sme2_ah_fmax_b16, bfloat16, bfloat16, max) +AH_MINMAX_HELPER(sme2_ah_fmin_b16, bfloat16, bfloat16, min) =20 /* 64-bit versions of the CRC helpers. Note that although the operation * (and the prototypes of crc32c() and crc32() mean that only the bottom diff --git a/target/arm/tcg/neon_helper.c b/target/arm/tcg/neon_helper.c index 2cc8241f1e4..8d288f3a700 100644 --- a/target/arm/tcg/neon_helper.c +++ b/target/arm/tcg/neon_helper.c @@ -228,16 +228,31 @@ NEON_VOP(rshl_s16, neon_s16, 2) NEON_GVEC_VOP2(gvec_srshl_h, int16_t) #undef NEON_FN =20 +#define NEON_FN(dest, src1, src2) \ + (dest =3D do_sqrshl_bhs(src1, src2, 16, true, NULL)) +NEON_GVEC_VOP2(sme2_srshl_h, int16_t) +#undef NEON_FN + #define NEON_FN(dest, src1, src2) \ (dest =3D do_sqrshl_bhs(src1, (int8_t)src2, 32, true, NULL)) NEON_GVEC_VOP2(gvec_srshl_s, int32_t) #undef NEON_FN =20 +#define NEON_FN(dest, src1, src2) \ + (dest =3D do_sqrshl_bhs(src1, src2, 32, true, NULL)) +NEON_GVEC_VOP2(sme2_srshl_s, int32_t) +#undef NEON_FN + #define NEON_FN(dest, src1, src2) \ (dest =3D do_sqrshl_d(src1, (int8_t)src2, true, NULL)) NEON_GVEC_VOP2(gvec_srshl_d, int64_t) #undef NEON_FN =20 +#define NEON_FN(dest, src1, src2) \ + (dest =3D do_sqrshl_d(src1, src2, true, NULL)) +NEON_GVEC_VOP2(sme2_srshl_d, int64_t) +#undef NEON_FN + uint32_t HELPER(neon_rshl_s32)(uint32_t val, uint32_t shift) { return do_sqrshl_bhs(val, (int8_t)shift, 32, true, NULL); @@ -260,16 +275,31 @@ NEON_VOP(rshl_u16, neon_u16, 2) NEON_GVEC_VOP2(gvec_urshl_h, uint16_t) #undef NEON_FN =20 +#define NEON_FN(dest, src1, src2) \ + (dest =3D do_uqrshl_bhs(src1, (int16_t)src2, 16, true, NULL)) +NEON_GVEC_VOP2(sme2_urshl_h, uint16_t) +#undef NEON_FN + #define NEON_FN(dest, src1, src2) \ (dest =3D do_uqrshl_bhs(src1, (int8_t)src2, 32, true, NULL)) NEON_GVEC_VOP2(gvec_urshl_s, int32_t) #undef NEON_FN =20 +#define NEON_FN(dest, src1, src2) \ + (dest =3D do_uqrshl_bhs(src1, src2, 32, true, NULL)) +NEON_GVEC_VOP2(sme2_urshl_s, int32_t) +#undef NEON_FN + #define NEON_FN(dest, src1, src2) \ (dest =3D do_uqrshl_d(src1, (int8_t)src2, true, NULL)) NEON_GVEC_VOP2(gvec_urshl_d, int64_t) #undef NEON_FN =20 +#define NEON_FN(dest, src1, src2) \ + (dest =3D do_uqrshl_d(src1, src2, true, NULL)) +NEON_GVEC_VOP2(sme2_urshl_d, int64_t) +#undef NEON_FN + uint32_t HELPER(neon_rshl_u32)(uint32_t val, uint32_t shift) { return do_uqrshl_bhs(val, (int8_t)shift, 32, true, NULL); diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index 0a863a50bf2..954da18ff0d 100644 --- a/target/arm/tcg/translate-sme.c +++ b/target/arm/tcg/translate-sme.c @@ -543,3 +543,140 @@ TRANS_FEAT(USMOPA_d, aa64_sme_i16i64, do_outprod, a, = MO_64, gen_helper_sme_usmop TRANS_FEAT(BMOPA, aa64_sme2, do_outprod, a, MO_32, gen_helper_sme2_bmopa_s) TRANS_FEAT(SMOPA2_s, aa64_sme2, do_outprod, a, MO_32, gen_helper_sme2_smop= a2_s) TRANS_FEAT(UMOPA2_s, aa64_sme2, do_outprod, a, MO_32, gen_helper_sme2_umop= a2_s) + +static bool do_z2z_n1(DisasContext *s, arg_z2z_en *a, GVecGen3Fn *fn) +{ + int esz, dn, vsz, mofs, n; + bool overlap =3D false; + + if (!sme_sm_enabled_check(s)) { + return true; + } + + esz =3D a->esz; + n =3D a->n; + dn =3D a->zdn; + mofs =3D vec_full_reg_offset(s, a->zm); + vsz =3D streaming_vec_reg_size(s); + + for (int i =3D 0; i < n; i++) { + int dofs =3D vec_full_reg_offset(s, dn + i); + if (dofs =3D=3D mofs) { + overlap =3D true; + } else { + fn(esz, dofs, dofs, mofs, vsz, vsz); + } + } + if (overlap) { + fn(esz, mofs, mofs, mofs, vsz, vsz); + } + return true; +} + +static void gen_sme2_srshl(unsigned vece, uint32_t rd_ofs, uint32_t rn_ofs, + uint32_t rm_ofs, uint32_t opr_sz, uint32_t max_= sz) +{ + static gen_helper_gvec_3 * const fns[] =3D { + gen_helper_gvec_srshl_b, gen_helper_sme2_srshl_h, + gen_helper_sme2_srshl_s, gen_helper_sme2_srshl_d, + }; + tcg_debug_assert(vece <=3D MO_64); + tcg_gen_gvec_3_ool(rd_ofs, rn_ofs, rm_ofs, opr_sz, max_sz, 0, fns[vece= ]); +} + +static void gen_sme2_urshl(unsigned vece, uint32_t rd_ofs, uint32_t rn_ofs, + uint32_t rm_ofs, uint32_t opr_sz, uint32_t max_= sz) +{ + static gen_helper_gvec_3 * const fns[] =3D { + gen_helper_gvec_urshl_b, gen_helper_sme2_urshl_h, + gen_helper_sme2_urshl_s, gen_helper_sme2_urshl_d, + }; + tcg_debug_assert(vece <=3D MO_64); + tcg_gen_gvec_3_ool(rd_ofs, rn_ofs, rm_ofs, opr_sz, max_sz, 0, fns[vece= ]); +} + +TRANS_FEAT(ADD_n1, aa64_sme2, do_z2z_n1, a, tcg_gen_gvec_add) +TRANS_FEAT(SMAX_n1, aa64_sme2, do_z2z_n1, a, tcg_gen_gvec_smax) +TRANS_FEAT(SMIN_n1, aa64_sme2, do_z2z_n1, a, tcg_gen_gvec_smin) +TRANS_FEAT(UMAX_n1, aa64_sme2, do_z2z_n1, a, tcg_gen_gvec_umax) +TRANS_FEAT(UMIN_n1, aa64_sme2, do_z2z_n1, a, tcg_gen_gvec_umin) +TRANS_FEAT(SRSHL_n1, aa64_sme2, do_z2z_n1, a, gen_sme2_srshl) +TRANS_FEAT(URSHL_n1, aa64_sme2, do_z2z_n1, a, gen_sme2_urshl) +TRANS_FEAT(SQDMULH_n1, aa64_sme2, do_z2z_n1, a, gen_gvec_sve2_sqdmulh) + +static bool do_z2z_n1_fpst(DisasContext *s, arg_z2z_en *a, + gen_helper_gvec_3_ptr * const fns[4]) +{ + int esz =3D a->esz, n, dn, vsz, mofs; + bool overlap =3D false; + gen_helper_gvec_3_ptr *fn; + TCGv_ptr fpst; + + /* These insns use MO_8 to encode BFloat16. */ + if (esz =3D=3D MO_8 && !dc_isar_feature(aa64_sme_b16b16, s)) { + return false; + } + if (!sme_sm_enabled_check(s)) { + return true; + } + + fpst =3D fpstatus_ptr(esz =3D=3D MO_16 ? FPST_A64_F16 : FPST_A64); + fn =3D fns[esz]; + n =3D a->n; + dn =3D a->zdn; + mofs =3D vec_full_reg_offset(s, a->zm); + vsz =3D streaming_vec_reg_size(s); + + for (int i =3D 0; i < n; i++) { + int dofs =3D vec_full_reg_offset(s, dn + i); + if (dofs =3D=3D mofs) { + overlap =3D true; + } else { + tcg_gen_gvec_3_ptr(dofs, dofs, mofs, fpst, vsz, vsz, 0, fn); + } + } + if (overlap) { + tcg_gen_gvec_3_ptr(mofs, mofs, mofs, fpst, vsz, vsz, 0, fn); + } + return true; +} + +static gen_helper_gvec_3_ptr * const f_vector_fmax[2][4] =3D { + { gen_helper_gvec_fmax_b16, + gen_helper_gvec_fmax_h, + gen_helper_gvec_fmax_s, + gen_helper_gvec_fmax_d }, + { gen_helper_gvec_ah_fmax_b16, + gen_helper_gvec_ah_fmax_h, + gen_helper_gvec_ah_fmax_s, + gen_helper_gvec_ah_fmax_d }, +}; +TRANS_FEAT(FMAX_n1, aa64_sme2, do_z2z_n1_fpst, a, f_vector_fmax[s->fpcr_ah= ]) + +static gen_helper_gvec_3_ptr * const f_vector_fmin[2][4] =3D { + { gen_helper_gvec_fmin_b16, + gen_helper_gvec_fmin_h, + gen_helper_gvec_fmin_s, + gen_helper_gvec_fmin_d }, + { gen_helper_gvec_ah_fmin_b16, + gen_helper_gvec_ah_fmin_h, + gen_helper_gvec_ah_fmin_s, + gen_helper_gvec_ah_fmin_d }, +}; +TRANS_FEAT(FMIN_n1, aa64_sme2, do_z2z_n1_fpst, a, f_vector_fmin[s->fpcr_ah= ]) + +static gen_helper_gvec_3_ptr * const f_vector_fmaxnm[4] =3D { + gen_helper_gvec_fmaxnum_b16, + gen_helper_gvec_fmaxnum_h, + gen_helper_gvec_fmaxnum_s, + gen_helper_gvec_fmaxnum_d, +}; +TRANS_FEAT(FMAXNM_n1, aa64_sme2, do_z2z_n1_fpst, a, f_vector_fmaxnm) + +static gen_helper_gvec_3_ptr * const f_vector_fminnm[4] =3D { + gen_helper_gvec_fminnum_b16, + gen_helper_gvec_fminnum_h, + gen_helper_gvec_fminnum_s, + gen_helper_gvec_fminnum_d, +}; +TRANS_FEAT(FMINNM_n1, aa64_sme2, do_z2z_n1_fpst, a, f_vector_fminnm) diff --git a/target/arm/tcg/vec_helper.c b/target/arm/tcg/vec_helper.c index 3b7f3088033..8b49577e2fd 100644 --- a/target/arm/tcg/vec_helper.c +++ b/target/arm/tcg/vec_helper.c @@ -1515,6 +1515,13 @@ DO_3OP(gvec_ah_fmin_h, helper_vfp_ah_minh, float16) DO_3OP(gvec_ah_fmin_s, helper_vfp_ah_mins, float32) DO_3OP(gvec_ah_fmin_d, helper_vfp_ah_mind, float64) =20 +DO_3OP(gvec_fmax_b16, bfloat16_max, bfloat16) +DO_3OP(gvec_fmin_b16, bfloat16_min, bfloat16) +DO_3OP(gvec_fmaxnum_b16, bfloat16_maxnum, bfloat16) +DO_3OP(gvec_fminnum_b16, bfloat16_minnum, bfloat16) +DO_3OP(gvec_ah_fmax_b16, helper_sme2_ah_fmax_b16, bfloat16) +DO_3OP(gvec_ah_fmin_b16, helper_sme2_ah_fmin_b16, bfloat16) + #endif #undef DO_3OP =20 --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646400; cv=none; d=zohomail.com; s=zohoarc; b=QC5Ro77zrLp1BTq0xdqjf+lNYo7vKuNOSZFfrHbkNMgoFKnx47WgqjTS8cUYOZF2afQD5aWhWW/i7csW9i3/neR5BPNQVnVRWmo4md3XCNXQ3J364D2LFRB0Z+sXUa0qC2Cr+PG/ieak4QuW6fTbuawQ9KbMvWNeLwmO+MOrT48= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646400; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=e30X65M6p/rIEXX5wYUb7OTjH5Oe5kdo7kocx6ruKt0=; b=lEALrzTQm63GgphNDnFTHpOOwRNgBM0pBNi+Usov8Am/No9EceRAd7A043mx+qONAJVUkT8nMsBRopyTciUkQfAw85xbk6WIlbWpVSW0LyuADfqW8bCWgLvVl7iiboZuGK5lScPuqJW7B3KA/QrIALCC/H2o4fGCJQ+fml8K4gE= 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 1751646400933809.4893838996315; Fri, 4 Jul 2025 09:26:40 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjES-0000bg-IJ; Fri, 04 Jul 2025 12:25:48 -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 1uXjEP-0000Wj-Vw for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:46 -0400 Received: from mail-wr1-x431.google.com ([2a00:1450:4864:20::431]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjEN-0006GM-W6 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:45 -0400 Received: by mail-wr1-x431.google.com with SMTP id ffacd0b85a97d-3a510432236so784101f8f.0 for ; Fri, 04 Jul 2025 09:25:43 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.41 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646342; x=1752251142; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=e30X65M6p/rIEXX5wYUb7OTjH5Oe5kdo7kocx6ruKt0=; b=D0bJoQo5RSVnLVL6JXXJhUMnZgMUMYZBA8VNibREjEw5gyfmZ4Oz3KcnBpL91aJOW3 UqZOyXQzWflaqs9fTWeSnEmDdaAvGbiJfdOUjLgSKWjxBwKMsoj9CTJXr11zQJValQg2 pWqLEmuQw9/A0iMrkE2en9EGr3cf1wNVVI+pHrY0HQeiyx46kJbOxZ2+q8T7lKt470Gu rN1YaUCuf5Bhegu1+6uYBXjXSj56qk7Hn2haOsOu2eI2xMD9aGewkTWWK3WavYNr0jTi 5LIke7En0KXxmqApqb/VtsUecolfcEeMcVOEpft3LhJmO3l1u4I3PC1YlBf0t6u1Dooz jvpw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646342; x=1752251142; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=e30X65M6p/rIEXX5wYUb7OTjH5Oe5kdo7kocx6ruKt0=; b=vL2eg/ZFts4vKUtqbiMnZGUN5B3vQ0GO7zheT+hJ6h3+wZvZY4fqMQx+uhDKkYwXhr Mvj4IxYyAKRzamAvFW5sfmNnuTsGDMUM3U/zt+3NZ9LopW1U6fCKyNwwnpJkM6UmY/Hy q6Pd+DkCWHkiclsF9meRGlZZ4qTkjzPAHo4jm7Jg0gOBL7G2126t9IVVE9KN/uWuRWph XaM7VjDALyPCMo+A1OahIplm8KivQFXkXgLZ21y3MyqUvOPfKId8j2eKdgm/nHjtp0li xiBxaQwBdusZdnMb5nBzDakqC/ezYCZzV23SblJNm2RHuQCzd3I6KOkAUA6MfxYak56u myiQ== X-Gm-Message-State: AOJu0YzA8Blkl+lfYksYSn9qBnir9RfFsdW2mrbZs7UK8rlcOkckNG15 OeBagmzSs4vNtaOnK0tZm4SYAhlfV59p2NFo3aiVMfh9+yTDGZkPC5dfJgLdJ+ed/jj7QwVGJv1 UOJMk X-Gm-Gg: ASbGncskSg4jXqhLU8uMcRifMrf8d9agn/5MkQljZhhCzusOAFmIo7mLUJGikwhlQGz 5qsgS8R7gSXre3FIldWMAReRWYwHsMH/1FAXf0x5jH10agTNc1wF3G58YxJlJUce2mpPWUi9VHk 5V1T8Dca5oSk3j70lhNec9RoUm3cvFEsEn4XIz9ziC2VJL4/ZDXwWcKopsLoETTdd3qFiMPKIMo bfjXqI7F54SzcX0i7ccM6ry3gZgHMWCJt5IWwl0ooM/Uv6tlg+Ua5hTrLMDQ4gOksAFkSpaOsc0 RqnDChoZPaeh47zPyK6oxCDuSngI0VJIjlZRXP2HRqrXLygt972ik6W6QPlfnjZEMB3L X-Google-Smtp-Source: AGHT+IGSRd70sM3XgjQD1nZei+IwrbLAXGgvazH/Njl/2tCzBdeRLvcYLzv9dcD3kw8nu1QH4AWZwQ== X-Received: by 2002:a5d:5f8f:0:b0:3a4:ec32:e4f3 with SMTP id ffacd0b85a97d-3b4970131eamr2708221f8f.17.1751646342303; Fri, 04 Jul 2025 09:25:42 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 043/119] target/arm: Implement SME2 Multiple Vectors SVE Destructive Date: Fri, 4 Jul 2025 17:23:43 +0100 Message-ID: <20250704162501.249138-44-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::431; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x431.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751646402764116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-32-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/sme.decode | 36 +++++++++++++++++++ target/arm/tcg/translate-sme.c | 65 ++++++++++++++++++++++++++++++++++ 2 files changed, 101 insertions(+) diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 005f87777b8..470592f4c09 100644 --- a/target/arm/tcg/sme.decode +++ b/target/arm/tcg/sme.decode @@ -209,3 +209,39 @@ ADD_n1 1100000 1 .. 10 .... 1010.0 11000 .... = 0 @z2z_4x1 =20 SQDMULH_n1 1100000 1 .. 10 .... 1010.1 00000 .... 0 @z2z_2x1 SQDMULH_n1 1100000 1 .. 10 .... 1010.1 00000 .... 0 @z2z_4x1 + +### SME2 Multi-vector Multiple Vectors SVE Destructive + +%zm_ax2 17:4 !function=3Dtimes_2 +%zm_ax4 18:3 !function=3Dtimes_4 + +@z2z_2x2 ....... . esz:2 . ....0 ....0. ..... .... . \ + &z2z_en n=3D2 zdn=3D%zd_ax2 zm=3D%zm_ax2 +@z2z_4x4 ....... . esz:2 . ...00 ....1. ..... ...0 . \ + &z2z_en n=3D4 zdn=3D%zd_ax4 zm=3D%zm_ax4 + +SMAX_nn 1100000 1 .. 1 ..... 1011.0 00000 .... 0 @z2z_2x2 +SMAX_nn 1100000 1 .. 1 ..... 1011.0 00000 .... 0 @z2z_4x4 +UMAX_nn 1100000 1 .. 1 ..... 1011.0 00000 .... 1 @z2z_2x2 +UMAX_nn 1100000 1 .. 1 ..... 1011.0 00000 .... 1 @z2z_4x4 +SMIN_nn 1100000 1 .. 1 ..... 1011.0 00001 .... 0 @z2z_2x2 +SMIN_nn 1100000 1 .. 1 ..... 1011.0 00001 .... 0 @z2z_4x4 +UMIN_nn 1100000 1 .. 1 ..... 1011.0 00001 .... 1 @z2z_2x2 +UMIN_nn 1100000 1 .. 1 ..... 1011.0 00001 .... 1 @z2z_4x4 + +FMAX_nn 1100000 1 .. 1 ..... 1011.0 01000 .... 0 @z2z_2x2 +FMAX_nn 1100000 1 .. 1 ..... 1011.0 01000 .... 0 @z2z_4x4 +FMIN_nn 1100000 1 .. 1 ..... 1011.0 01000 .... 1 @z2z_2x2 +FMIN_nn 1100000 1 .. 1 ..... 1011.0 01000 .... 1 @z2z_4x4 +FMAXNM_nn 1100000 1 .. 1 ..... 1011.0 01001 .... 0 @z2z_2x2 +FMAXNM_nn 1100000 1 .. 1 ..... 1011.0 01001 .... 0 @z2z_4x4 +FMINNM_nn 1100000 1 .. 1 ..... 1011.0 01001 .... 1 @z2z_2x2 +FMINNM_nn 1100000 1 .. 1 ..... 1011.0 01001 .... 1 @z2z_4x4 + +SRSHL_nn 1100000 1 .. 1 ..... 1011.0 10001 .... 0 @z2z_2x2 +SRSHL_nn 1100000 1 .. 1 ..... 1011.0 10001 .... 0 @z2z_4x4 +URSHL_nn 1100000 1 .. 1 ..... 1011.0 10001 .... 1 @z2z_2x2 +URSHL_nn 1100000 1 .. 1 ..... 1011.0 10001 .... 1 @z2z_4x4 + +SQDMULH_nn 1100000 1 .. 1 ..... 1011.1 00000 .... 0 @z2z_2x2 +SQDMULH_nn 1100000 1 .. 1 ..... 1011.1 00000 .... 0 @z2z_4x4 diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index 954da18ff0d..0a6a10b63d1 100644 --- a/target/arm/tcg/translate-sme.c +++ b/target/arm/tcg/translate-sme.c @@ -604,6 +604,37 @@ TRANS_FEAT(SRSHL_n1, aa64_sme2, do_z2z_n1, a, gen_sme2= _srshl) TRANS_FEAT(URSHL_n1, aa64_sme2, do_z2z_n1, a, gen_sme2_urshl) TRANS_FEAT(SQDMULH_n1, aa64_sme2, do_z2z_n1, a, gen_gvec_sve2_sqdmulh) =20 +static bool do_z2z_nn(DisasContext *s, arg_z2z_en *a, GVecGen3Fn *fn) +{ + int esz, dn, dm, vsz, n; + + if (!sme_sm_enabled_check(s)) { + return true; + } + + esz =3D a->esz; + n =3D a->n; + dn =3D a->zdn; + dm =3D a->zm; + vsz =3D streaming_vec_reg_size(s); + + for (int i =3D 0; i < n; i++) { + int dofs =3D vec_full_reg_offset(s, dn + i); + int mofs =3D vec_full_reg_offset(s, dm + i); + + fn(esz, dofs, dofs, mofs, vsz, vsz); + } + return true; +} + +TRANS_FEAT(SMAX_nn, aa64_sme2, do_z2z_nn, a, tcg_gen_gvec_smax) +TRANS_FEAT(SMIN_nn, aa64_sme2, do_z2z_nn, a, tcg_gen_gvec_smin) +TRANS_FEAT(UMAX_nn, aa64_sme2, do_z2z_nn, a, tcg_gen_gvec_umax) +TRANS_FEAT(UMIN_nn, aa64_sme2, do_z2z_nn, a, tcg_gen_gvec_umin) +TRANS_FEAT(SRSHL_nn, aa64_sme2, do_z2z_nn, a, gen_sme2_srshl) +TRANS_FEAT(URSHL_nn, aa64_sme2, do_z2z_nn, a, gen_sme2_urshl) +TRANS_FEAT(SQDMULH_nn, aa64_sme2, do_z2z_nn, a, gen_gvec_sve2_sqdmulh) + static bool do_z2z_n1_fpst(DisasContext *s, arg_z2z_en *a, gen_helper_gvec_3_ptr * const fns[4]) { @@ -641,6 +672,36 @@ static bool do_z2z_n1_fpst(DisasContext *s, arg_z2z_en= *a, return true; } =20 +static bool do_z2z_nn_fpst(DisasContext *s, arg_z2z_en *a, + gen_helper_gvec_3_ptr * const fns[4]) +{ + int esz =3D a->esz, n, dn, dm, vsz; + gen_helper_gvec_3_ptr *fn; + TCGv_ptr fpst; + + if (esz =3D=3D MO_8 && !dc_isar_feature(aa64_sme_b16b16, s)) { + return false; + } + if (!sme_sm_enabled_check(s)) { + return true; + } + + fpst =3D fpstatus_ptr(esz =3D=3D MO_16 ? FPST_A64_F16 : FPST_A64); + fn =3D fns[esz]; + n =3D a->n; + dn =3D a->zdn; + dm =3D a->zm; + vsz =3D streaming_vec_reg_size(s); + + for (int i =3D 0; i < n; i++) { + int dofs =3D vec_full_reg_offset(s, dn + i); + int mofs =3D vec_full_reg_offset(s, dm + i); + + tcg_gen_gvec_3_ptr(dofs, dofs, mofs, fpst, vsz, vsz, 0, fn); + } + return true; +} + static gen_helper_gvec_3_ptr * const f_vector_fmax[2][4] =3D { { gen_helper_gvec_fmax_b16, gen_helper_gvec_fmax_h, @@ -652,6 +713,7 @@ static gen_helper_gvec_3_ptr * const f_vector_fmax[2][4= ] =3D { gen_helper_gvec_ah_fmax_d }, }; TRANS_FEAT(FMAX_n1, aa64_sme2, do_z2z_n1_fpst, a, f_vector_fmax[s->fpcr_ah= ]) +TRANS_FEAT(FMAX_nn, aa64_sme2, do_z2z_nn_fpst, a, f_vector_fmax[s->fpcr_ah= ]) =20 static gen_helper_gvec_3_ptr * const f_vector_fmin[2][4] =3D { { gen_helper_gvec_fmin_b16, @@ -664,6 +726,7 @@ static gen_helper_gvec_3_ptr * const f_vector_fmin[2][4= ] =3D { gen_helper_gvec_ah_fmin_d }, }; TRANS_FEAT(FMIN_n1, aa64_sme2, do_z2z_n1_fpst, a, f_vector_fmin[s->fpcr_ah= ]) +TRANS_FEAT(FMIN_nn, aa64_sme2, do_z2z_nn_fpst, a, f_vector_fmin[s->fpcr_ah= ]) =20 static gen_helper_gvec_3_ptr * const f_vector_fmaxnm[4] =3D { gen_helper_gvec_fmaxnum_b16, @@ -672,6 +735,7 @@ static gen_helper_gvec_3_ptr * const f_vector_fmaxnm[4]= =3D { gen_helper_gvec_fmaxnum_d, }; TRANS_FEAT(FMAXNM_n1, aa64_sme2, do_z2z_n1_fpst, a, f_vector_fmaxnm) +TRANS_FEAT(FMAXNM_nn, aa64_sme2, do_z2z_nn_fpst, a, f_vector_fmaxnm) =20 static gen_helper_gvec_3_ptr * const f_vector_fminnm[4] =3D { gen_helper_gvec_fminnum_b16, @@ -680,3 +744,4 @@ static gen_helper_gvec_3_ptr * const f_vector_fminnm[4]= =3D { gen_helper_gvec_fminnum_d, }; TRANS_FEAT(FMINNM_n1, aa64_sme2, do_z2z_n1_fpst, a, f_vector_fminnm) +TRANS_FEAT(FMINNM_nn, aa64_sme2, do_z2z_nn_fpst, a, f_vector_fminnm) --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646518; cv=none; d=zohomail.com; s=zohoarc; b=DilLfQu7dyDGFXsEP9mSyUechwOfDkaqcJ7w+pniDK6u6oHvGjBQuPskuw4Ght/ktRDXEHmoII6Y/fbk3mR0yrtKfmLLx/GKZf65dLJM4GHoa/TBpNnsK8V4uDq3TVAkMTuhoTJtD5/WnDU5TOm+NSQHQ5xqazsB7AVp4cafMTM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646518; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=eJvUp9STOUAnZKNra59IO+xkJWbIoLoNC6yS5tutuiA=; b=nmmdTOngeXZkSe3PJctOoGRFH2b1WU3r90gDNqZF7zfEV6njedpwDgYgDEEbWRJmVqUqrvzd7xDGP5RuLqxiPmtpNjlaYiMtQl82Q715bdr+cn0d6MGFKq6eSMcUKGJAc+EbL3179t/o0Dudlj9axYVYxSBdDI5oNPrWYLUX8dc= 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 1751646518457458.27285618010217; Fri, 4 Jul 2025 09:28:38 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjEV-0000gz-1E; Fri, 04 Jul 2025 12:25:51 -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 1uXjEQ-0000Yn-Pg for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:46 -0400 Received: from mail-wr1-x429.google.com ([2a00:1450:4864:20::429]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjEO-0006Go-Sq for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:46 -0400 Received: by mail-wr1-x429.google.com with SMTP id ffacd0b85a97d-3a4f379662cso967170f8f.0 for ; Fri, 04 Jul 2025 09:25:44 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.42 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646343; x=1752251143; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=eJvUp9STOUAnZKNra59IO+xkJWbIoLoNC6yS5tutuiA=; b=vcA8EQ/pVIAey2KGN08LvvG92ET4BoRKUECxSU0bhKWdv+GGLMOxjHQZTHFPD3SJgj cEpntE5Mv5z9D2wOo/wfQfKGKeXrSvCB5p5MQuGZVxVUm5XXxS27uvG+/N+C7683bRHa vYVXDyWbaWvgiiQBo88nLRcaTNjrmiE/hvqGHLagqUauM2oVy8O+aFwO6FYk8uF5ZbMO LT2G3KeiQNgUX+nMNFno1B6s7T3iRc7ytv4EQHSl/H3XtH6/H4mgkdpxnZiCMs8XEdn9 qJzF3mxR5ivosqifQxNMulsfnkDA7X/AE/HJAHvFcsxOYd5pexjA+TFyvv330yraubpz OlmQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646343; x=1752251143; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=eJvUp9STOUAnZKNra59IO+xkJWbIoLoNC6yS5tutuiA=; b=bH91S1o81oBIvoPDLzJkEz9n93ap7uAgPgAABpBQXRjlZRQUB9ZtGPtrD933izxMho dV2XhRLl9kJmD7v6NSJ8D4pS1v8Vq0Se0quOxd8WzB0+GTN8v3H+ZC6PoydEB4UhK6qn xealMmZouUf1q98yYFnmuxyew5bs653955koOi7xXLeELIxHPEvsYIOYIhrxlXR3G0H/ gggy+NPhp2SQGeGiEcYpOovC/WMK9qkgBZqi+wKdmrilYvYWZ6kGsKCMT5mnuhqBEPwK aTP4aMX99KmJiAsP2JctM1QV3RTjEuy2KWYDECQhbkG6kcahKCDUA2ThITlsFwzeidU1 t8Sw== X-Gm-Message-State: AOJu0YzzzIFTK3SkGepa5lG4hVJS0HqvW/tUp7AV+FS0cUcqlk3Yh93j f7C793FHefs635smvmsSgN4YLGTkZa2BrBvWWfDVl9xim2cdu6rXKFmIIux4IWdKyvYrcQDtPix 1e6qo X-Gm-Gg: ASbGnctar0bPMg4phEdfnFqG4V9Ih9qosyFY3lP78dZory4e+HcCsjpTBUYdFu1vmmp iexuM8jSbIB5uarOARlHj+H/GHht+xVqqz7pkbNVXytS6WbiqNim6rJN2xFV2mvjotuK00FovJO sVI/8Supo7vld+JSMYIFAPycHj4XHdK8bY8ykG01GZT315l+gVT8FHqpakcf+Chb5wL3+T8BH3T ioyz0q1xGkDIrJNVFH7Xgx/ifNyIs9o7+l8kiAuO/XVxxxnz/6+kAGxQ4jjDCMie0uyFn2vnXxQ ZXhnaY8OxiLhxfVQ7uW9+Ja8EeVV79jMOBBDQZ+O4QFzrjK4TO+TjcvVyEUndy/Ov2J6 X-Google-Smtp-Source: AGHT+IFYAA1FLhVWq3Qz64gRAmenh1trDJYZbOeX9u3Rz4gt03Wj1uv8RXF/+iF8dinQpm1bG5Glhw== X-Received: by 2002:a05:6000:420d:b0:3a3:7baf:f06a with SMTP id ffacd0b85a97d-3b497029578mr2369771f8f.37.1751646343363; Fri, 04 Jul 2025 09:25:43 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 044/119] target/arm: Implement SME2 ADD/SUB (array results, multiple and single vector) Date: Fri, 4 Jul 2025 17:23:44 +0100 Message-ID: <20250704162501.249138-45-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::429; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x429.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751646520245116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-33-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/translate.h | 2 ++ target/arm/tcg/sme.decode | 15 +++++++++++++++ target/arm/tcg/translate-sme.c | 30 ++++++++++++++++++++++++++++++ 3 files changed, 47 insertions(+) diff --git a/target/arm/tcg/translate.h b/target/arm/tcg/translate.h index a18d07540e6..f974996f3f8 100644 --- a/target/arm/tcg/translate.h +++ b/target/arm/tcg/translate.h @@ -643,6 +643,8 @@ typedef void GVecGen3Fn(unsigned, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t); typedef void GVecGen4Fn(unsigned, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t); +typedef void GVecGen3FnVar(unsigned, TCGv_ptr, uint32_t, TCGv_ptr, uint32_= t, + TCGv_ptr, uint32_t, uint32_t, uint32_t); =20 /* Function prototype for gen_ functions for calling Neon helpers */ typedef void NeonGenOneOpFn(TCGv_i32, TCGv_i32); diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 470592f4c09..8b81c0a0ced 100644 --- a/target/arm/tcg/sme.decode +++ b/target/arm/tcg/sme.decode @@ -245,3 +245,18 @@ URSHL_nn 1100000 1 .. 1 ..... 1011.0 10001 .... = 1 @z2z_4x4 =20 SQDMULH_nn 1100000 1 .. 1 ..... 1011.1 00000 .... 0 @z2z_2x2 SQDMULH_nn 1100000 1 .. 1 ..... 1011.1 00000 .... 0 @z2z_4x4 + +### SME2 Multi-vector Multiple and Single Array Vectors + +&azz_n n off rv zn zm +@azz_nx1_o3 ........ .... zm:4 ...... zn:5 .. off:3 &azz_n rv=3D%m= ova_rv + +ADD_azz_n1_s 11000001 0010 .... 0 .. 110 ..... 10 ... @azz_nx1_o3 n= =3D2 +ADD_azz_n1_s 11000001 0011 .... 0 .. 110 ..... 10 ... @azz_nx1_o3 n= =3D4 +ADD_azz_n1_d 11000001 0110 .... 0 .. 110 ..... 10 ... @azz_nx1_o3 n= =3D2 +ADD_azz_n1_d 11000001 0111 .... 0 .. 110 ..... 10 ... @azz_nx1_o3 n= =3D4 + +SUB_azz_n1_s 11000001 0010 .... 0 .. 110 ..... 11 ... @azz_nx1_o3 n= =3D2 +SUB_azz_n1_s 11000001 0011 .... 0 .. 110 ..... 11 ... @azz_nx1_o3 n= =3D4 +SUB_azz_n1_d 11000001 0110 .... 0 .. 110 ..... 11 ... @azz_nx1_o3 n= =3D2 +SUB_azz_n1_d 11000001 0111 .... 0 .. 110 ..... 11 ... @azz_nx1_o3 n= =3D4 diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index 0a6a10b63d1..4bb880d9ef8 100644 --- a/target/arm/tcg/translate-sme.c +++ b/target/arm/tcg/translate-sme.c @@ -745,3 +745,33 @@ static gen_helper_gvec_3_ptr * const f_vector_fminnm[4= ] =3D { }; TRANS_FEAT(FMINNM_n1, aa64_sme2, do_z2z_n1_fpst, a, f_vector_fminnm) TRANS_FEAT(FMINNM_nn, aa64_sme2, do_z2z_nn_fpst, a, f_vector_fminnm) + +/* Add/Sub vector Z[m] to each Z[n*N] with result in ZA[d*N]. */ +static bool do_azz_n1(DisasContext *s, arg_azz_n *a, int esz, + GVecGen3FnVar *fn) +{ + TCGv_ptr t_za; + int svl, n, o_zm; + + if (!sme_smza_enabled_check(s)) { + return true; + } + + n =3D a->n; + t_za =3D get_zarray(s, a->rv, a->off, n, 0); + o_zm =3D vec_full_reg_offset(s, a->zm); + svl =3D streaming_vec_reg_size(s); + + for (int i =3D 0; i < n; ++i) { + int o_za =3D (svl / n * sizeof(ARMVectorReg)) * i; + int o_zn =3D vec_full_reg_offset(s, (a->zn + i) % 32); + + fn(esz, t_za, o_za, tcg_env, o_zn, tcg_env, o_zm, svl, svl); + } + return true; +} + +TRANS_FEAT(ADD_azz_n1_s, aa64_sme2, do_azz_n1, a, MO_32, tcg_gen_gvec_add_= var) +TRANS_FEAT(SUB_azz_n1_s, aa64_sme2, do_azz_n1, a, MO_32, tcg_gen_gvec_sub_= var) +TRANS_FEAT(ADD_azz_n1_d, aa64_sme2_i16i64, do_azz_n1, a, MO_64, tcg_gen_gv= ec_add_var) +TRANS_FEAT(SUB_azz_n1_d, aa64_sme2_i16i64, do_azz_n1, a, MO_64, tcg_gen_gv= ec_sub_var) --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646501; cv=none; d=zohomail.com; s=zohoarc; b=jCY6ZXV1hJnCycLsXIhBN4gjg3ewDhyy35j957QleZrxI38GsZEoWf422a6KJX6Cr7vdhES1rCqE1qSiVWfK1IRYfX1eDS50V0PYHNTUf8NIEJoBni6tg17hOWPPnNIYG1tdaScldVEmHja2i2rWzu1FHnqaZ2Kr7PUqM5bss0M= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646501; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=Q2DJT3TgBXEzDGrgAB3daciUL8MwUdJl88P2HVC3REk=; b=c0FE5rO0VLWNvWqnHePQSpOKx8TruZQB85UuVo21Hu0Uoeu4yj3b2+ug3/gJ53pJCAqypqJS5kqznzF7x20CHia3lk0fYjOIwXJwvDwpMZoH12sm0aqBJTGYcj87aWWRxxu65GQPW0YUXa26cNsXAImT5EsNQdWeV1pExxcWic4= 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 1751646501279152.97725055780222; Fri, 4 Jul 2025 09:28:21 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjEU-0000gJ-Am; Fri, 04 Jul 2025 12:25:50 -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 1uXjER-0000a3-FD for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:47 -0400 Received: from mail-wm1-x329.google.com ([2a00:1450:4864:20::329]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjEP-0006H7-Pc for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:47 -0400 Received: by mail-wm1-x329.google.com with SMTP id 5b1f17b1804b1-451d6ade159so9790035e9.1 for ; Fri, 04 Jul 2025 09:25:45 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.43 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646344; x=1752251144; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=Q2DJT3TgBXEzDGrgAB3daciUL8MwUdJl88P2HVC3REk=; b=Rd63xoHpo5teFC4V8FK8xDkUdp95snrSfr13su6YRyHdHUXsFZIMcQ9DiMu1XTDeZd nfH8D2nCwmznQgLTlciREeGpP8jZJJndb3t70IhiijH10dMa+QlOUEVphdFN4bC1gytN rFpxgJao0yiyXVdvWyVSwVPmz0wmGUTV0lvn3jNvrOapWNtseCrpzGWYm7uHzxgqKGIg ib16+BOJrRW0CSSxaoD7OU19/CyiJr5X4MHLzqqS33VkMCD3YERBBY8xU8MKWf8mBdpr PFii1WVRO0dA90vTfiXpKVbp6yFXpTrqjtPu8XAOWCJr6K1Z8hutyk1rnGn0SqBBvtBG 8qqg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646344; x=1752251144; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Q2DJT3TgBXEzDGrgAB3daciUL8MwUdJl88P2HVC3REk=; b=wwYn03glizaoN0udE+ffTR2gKvNC4bx9sJ00hQ5GmFDh02ZE+eW40ObTZ6Z1dOj0gK aKdE+8alpcqMyDror1QXbE+85HQy8aHcrB5LpgffaSkjxJUbjyQAf7hXuKXY9j0q3qUS SDepnHiuc0jcbwqVCF2or4agumzP3PvgTcW/B3EHVgFFpra3IQjeXAQJRe53bucuhHCV nPRrUxJeDz/MlK+D0H84FUw9fUPqERf+tgbSt52tMjGEOLPqV4qgObcP/BwnSmD1vfRZ WCK9RB8H4nnF9DKK/2XivaT0gzMeUGrBfpIiDocjSa0pAloZStnehicRqP4W361qv/2E vTsQ== X-Gm-Message-State: AOJu0YyVfEVxwFMfkWlDIciX3Zyc/vJraoTzvS3/3ozmOQc4bxzYAAnp 6HgNP6ANrADcY96poRh+mcByV1FtWrIpZqRAUJcPL6G60U/oajM1o3QRe1o2PsAMg9JjqBUfjhw VB6Ml X-Gm-Gg: ASbGncvytARURriFSNpiSXt5iHjkHsm4vThAu3Dve/7g1kwN01MYrKP7kQj15X3bOPN FtJFX4W6yFkOO6vUpdxf6HakqYs/vGlNGIFbccR5tGQ2dRbtP+G3EHMchLhhqJcNC5fKaK+jq9h cMvtCgI0gVsNT8FoTY3/nJxeNt5Dg+pDwrWMHyt3YtG3EYcGEOVDDvBwgr5okiJVACT2iFBJO3K mhK+ECGD8M0TxDalAvw80/n5+tvpsPECFfipoY4TzhH6ztKh4r9Ue3h/g9yil6HeqszD0VofTLl p/N4is+RdMVZFIz4CUKTw1lw3Dzk3a9PmQ+bemZKmF0L3gtUjmXvRyRUz6uQ4ruh6+Ox X-Google-Smtp-Source: AGHT+IF6nQN7ZSNFu8TqV3E5E/4vLBrDvdLvGRXx+qHZSqLD4zuE3XSeEkgwJ6TktsRHKiFYiNwMMA== X-Received: by 2002:a5d:5f92:0:b0:3a4:d0ed:257b with SMTP id ffacd0b85a97d-3b497020597mr2267741f8f.22.1751646344279; Fri, 04 Jul 2025 09:25:44 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 045/119] target/arm: Implement SME2 ADD/SUB (array results, multiple vectors) Date: Fri, 4 Jul 2025 17:23:45 +0100 Message-ID: <20250704162501.249138-46-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::329; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x329.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751646502060116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-34-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/sme.decode | 20 ++++++++++++++++++++ target/arm/tcg/translate-sme.c | 30 ++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 8b81c0a0ced..a6dee08661e 100644 --- a/target/arm/tcg/sme.decode +++ b/target/arm/tcg/sme.decode @@ -260,3 +260,23 @@ SUB_azz_n1_s 11000001 0010 .... 0 .. 110 ..... 11 .= .. @azz_nx1_o3 n=3D2 SUB_azz_n1_s 11000001 0011 .... 0 .. 110 ..... 11 ... @azz_nx1_o3 n= =3D4 SUB_azz_n1_d 11000001 0110 .... 0 .. 110 ..... 11 ... @azz_nx1_o3 n= =3D2 SUB_azz_n1_d 11000001 0111 .... 0 .. 110 ..... 11 ... @azz_nx1_o3 n= =3D4 + +### SME2 Multi-vector Multiple Array Vectors + +%zn_ax2 6:4 !function=3Dtimes_2 +%zn_ax4 7:3 !function=3Dtimes_4 + +@azz_2x2_o3 ........ ... ..... . .. ... ..... .. off:3 \ + &azz_n n=3D2 rv=3D%mova_rv zn=3D%zn_ax2 zm=3D%zm_ax2 +@azz_4x4_o3 ........ ... ..... . .. ... ..... .. off:3 \ + &azz_n n=3D4 rv=3D%mova_rv zn=3D%zn_ax4 zm=3D%zm_ax4 + +ADD_azz_nn_s 11000001 101 ....0 0 .. 110 ....0 10 ... @azz_2x2_o3 +ADD_azz_nn_s 11000001 101 ...01 0 .. 110 ...00 10 ... @azz_4x4_o3 +ADD_azz_nn_d 11000001 111 ....0 0 .. 110 ....0 10 ... @azz_2x2_o3 +ADD_azz_nn_d 11000001 111 ...01 0 .. 110 ...00 10 ... @azz_4x4_o3 + +SUB_azz_nn_s 11000001 101 ....0 0 .. 110 ....0 11 ... @azz_2x2_o3 +SUB_azz_nn_s 11000001 101 ...01 0 .. 110 ...00 11 ... @azz_4x4_o3 +SUB_azz_nn_d 11000001 111 ....0 0 .. 110 ....0 11 ... @azz_2x2_o3 +SUB_azz_nn_d 11000001 111 ...01 0 .. 110 ...00 11 ... @azz_4x4_o3 diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index 4bb880d9ef8..aabdb966751 100644 --- a/target/arm/tcg/translate-sme.c +++ b/target/arm/tcg/translate-sme.c @@ -775,3 +775,33 @@ TRANS_FEAT(ADD_azz_n1_s, aa64_sme2, do_azz_n1, a, MO_3= 2, tcg_gen_gvec_add_var) TRANS_FEAT(SUB_azz_n1_s, aa64_sme2, do_azz_n1, a, MO_32, tcg_gen_gvec_sub_= var) TRANS_FEAT(ADD_azz_n1_d, aa64_sme2_i16i64, do_azz_n1, a, MO_64, tcg_gen_gv= ec_add_var) TRANS_FEAT(SUB_azz_n1_d, aa64_sme2_i16i64, do_azz_n1, a, MO_64, tcg_gen_gv= ec_sub_var) + +/* Add/Sub each vector Z[m*N] to each Z[n*N] with result in ZA[d*N]. */ +static bool do_azz_nn(DisasContext *s, arg_azz_n *a, int esz, + GVecGen3FnVar *fn) +{ + TCGv_ptr t_za; + int svl, n; + + if (!sme_smza_enabled_check(s)) { + return true; + } + + n =3D a->n; + t_za =3D get_zarray(s, a->rv, a->off, n, 1); + svl =3D streaming_vec_reg_size(s); + + for (int i =3D 0; i < n; ++i) { + int o_za =3D (svl / n * sizeof(ARMVectorReg)) * i; + int o_zn =3D vec_full_reg_offset(s, a->zn + i); + int o_zm =3D vec_full_reg_offset(s, a->zm + i); + + fn(esz, t_za, o_za, tcg_env, o_zn, tcg_env, o_zm, svl, svl); + } + return true; +} + +TRANS_FEAT(ADD_azz_nn_s, aa64_sme2, do_azz_nn, a, MO_32, tcg_gen_gvec_add_= var) +TRANS_FEAT(SUB_azz_nn_s, aa64_sme2, do_azz_nn, a, MO_32, tcg_gen_gvec_sub_= var) +TRANS_FEAT(ADD_azz_nn_d, aa64_sme2_i16i64, do_azz_nn, a, MO_64, tcg_gen_gv= ec_add_var) +TRANS_FEAT(SUB_azz_nn_d, aa64_sme2_i16i64, do_azz_nn, a, MO_64, tcg_gen_gv= ec_sub_var) --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646812; cv=none; d=zohomail.com; s=zohoarc; b=VVWB7tozJ/s6pg49jsrr9zhaqfEXISvMzASNW4KN6JSxsxJswT2ziGN/HRblYNcIUHSLA2TSjbLygqeGY9AzEpxfDdEe7JFMZdatbeRyAlWn6+3iiXMQSWXJNcCpumLCiXnWibO2X+gJ9HPOIEQcLWa+rp/NBVWQYf3O2vpE+KM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646812; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=OSlrzFqQKqu03zPkvyInBmMYbd2uN9rgCw0yQ9re9cM=; b=dUgqILUBAKkGXKd0X3tMms6zF5gE6lw0Qa3KE2eZXbi6W/F7ZJ4rbbGXwAaKVgrx96X7833ibdknBDguOkmleMKsaaazg7ickYEqO4tzka5/t2oJqG5oW4P5BwpaHewTkSg23nC3n5LzTAkamJDkOdyBzXXIAzg4D2WCiJp/5uw= 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 1751646812415143.18603573100688; Fri, 4 Jul 2025 09:33:32 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjEY-0000jD-Ld; Fri, 04 Jul 2025 12:25:54 -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 1uXjES-0000bh-59 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:48 -0400 Received: from mail-wr1-x430.google.com ([2a00:1450:4864:20::430]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjEQ-0006HO-Hr for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:47 -0400 Received: by mail-wr1-x430.google.com with SMTP id ffacd0b85a97d-3a582e09144so633156f8f.1 for ; Fri, 04 Jul 2025 09:25:46 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.44 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646345; x=1752251145; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=OSlrzFqQKqu03zPkvyInBmMYbd2uN9rgCw0yQ9re9cM=; b=SZYAkBO87OOc3WhLRoxq5aD2aI8UpnszINGuXGm6AhZwlqRbppTBWTmN48zQxmoQu5 dNyTavyLoD3OXA7hbSus20kWbO1s/5jZqtWAYCTytjfsvu2ZlyawcCvjkGQZz5zCjed+ 2tD9B548u9eUnmdhHELlVpKYHyaC5GyZjLUwOYi6awzWYGQlrw0gJp0WYDcNUJRtuqlm n501Afq8yS3y3A/0G1h3mrzZ/o44avi7FJA/RplhjrL4kY95Oc0e5cgxYUiKJWPI1bZY Y0ve9hgrkZ2psNUXK4qYrMd3SR5Twe8WOTLB4QxzoAGFuGoZQeDSb4r9izgMe2GIYAAK HUag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646345; x=1752251145; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=OSlrzFqQKqu03zPkvyInBmMYbd2uN9rgCw0yQ9re9cM=; b=lmtn/ghEev98KRxJE3BCwtOdn7XV0w1jkD4eRnyyXVL3EwHkWNqOwRIMfhEdsxT2t0 5yMaAZXPVOCslYQVLdOb2ZcRmulMboDmhUGw0CHZ+5+L7wGjYoG6fjWtm4LR9RC38JHH noHE6O8q9PENdzoyZ0HjcGv+4Cd3xfCik+St5EToyyOWVIBRwnXdEZvEDIuYDIAX1DfY We7ZwDfPS0W7pa++RZf2hSWgitYiLlgaANMdEqKPUchT9MLiZp6CJzZGgoYlmSeZ0j7e U7U7LrM9aCyWXa8GcJgtrh8/apPOZtEn2Le4a/fpejJRyDYG5PsN6LHssOfNQ99bdZN8 Rhkw== X-Gm-Message-State: AOJu0Yyegye8WykkXnFywpH3A9QD7zNfEd0kwWexjc5ZemZPU7pOkLbC m06zV+OUuVsuduSQ2RnywG9zRYdgXXFpLfTGu5BtGDskqhE9oeZO+LxlQ8ojAcEVNqdEtRSQdva IUOPg X-Gm-Gg: ASbGnctbrabQNdDhNFQzZyv0CL8r8tb3aYurVO40+4tNxzZCJXTwUkamtd3KlqqGSPn YxKgvdOiUAvzKcUHeKn5+697iUkRylMNpy/4UzSle+5gmrT/ck25v+gFT1khBm6Zu7Yykz6W9Cz tU4uzEGTcaiqK6B773Ee/lxlbxz1OihNNmzYY9YfteDFdGlP46RtyD7lC0R5U1YHzrTd8gI3lJf N0RkZrb8r6SZnfMaLsxZRI9iOG41cjQArbjlXGy+KrKFUrg2OCPM8bVTMjjwQDdxRZtXbvBoh2M e491YU/EaXREFR28ADXIKvM7krZcKlMJjmY2Tve98RJJAiHYJcZI7rOiuglOvurC+jNP X-Google-Smtp-Source: AGHT+IHslByqunm9gn64p2WEIYFOVEoOrpwK+vsXpJlgCVZnxMGbBHe0zL4CFVGptoxL7B31oj2Umw== X-Received: by 2002:a05:6000:382:b0:3a4:fefb:c8d3 with SMTP id ffacd0b85a97d-3b49703db12mr2410980f8f.40.1751646345127; Fri, 04 Jul 2025 09:25:45 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 046/119] target/arm: Pass ZA to helper_sve2_fmlal_zz[zx]w_s Date: Fri, 4 Jul 2025 17:23:46 +0100 Message-ID: <20250704162501.249138-47-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::430; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x430.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751646813811116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Indicate whether to use FPST_FPCR or FPST_ZA via bit 2 of simd_data(desc). For SVE, this bit remains zero. For do_FMLAL_zzzw, this requires no change. For do_FMLAL_zzxw, move the index up one bit. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-35-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/translate-sve.c | 2 +- target/arm/tcg/vec_helper.c | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/target/arm/tcg/translate-sve.c b/target/arm/tcg/translate-sve.c index 7e304245c64..b85bd885f9d 100644 --- a/target/arm/tcg/translate-sve.c +++ b/target/arm/tcg/translate-sve.c @@ -7214,7 +7214,7 @@ static bool do_FMLAL_zzxw(DisasContext *s, arg_rrxr_e= sz *a, bool sub, bool sel) { return gen_gvec_ptr_zzzz(s, gen_helper_sve2_fmlal_zzxw_s, a->rd, a->rn, a->rm, a->ra, - (a->index << 2) | (sel << 1) | sub, tcg_env); + (a->index << 3) | (sel << 1) | sub, tcg_env); } =20 TRANS_FEAT(FMLALB_zzxw, aa64_sve2, do_FMLAL_zzxw, a, false, false) diff --git a/target/arm/tcg/vec_helper.c b/target/arm/tcg/vec_helper.c index 8b49577e2fd..e8467823f21 100644 --- a/target/arm/tcg/vec_helper.c +++ b/target/arm/tcg/vec_helper.c @@ -2191,7 +2191,8 @@ void HELPER(sve2_fmlal_zzzw_s)(void *vd, void *vn, vo= id *vm, void *va, intptr_t i, oprsz =3D simd_oprsz(desc); bool is_s =3D extract32(desc, SIMD_DATA_SHIFT, 1); intptr_t sel =3D extract32(desc, SIMD_DATA_SHIFT + 1, 1) * sizeof(floa= t16); - float_status *status =3D &env->vfp.fp_status[FPST_A64]; + bool za =3D extract32(desc, SIMD_DATA_SHIFT + 2, 1); + float_status *status =3D &env->vfp.fp_status[za ? FPST_ZA : FPST_A64]; bool fz16 =3D env->vfp.fpcr & FPCR_FZ16; int negx =3D 0, negf =3D 0; =20 @@ -2274,8 +2275,9 @@ void HELPER(sve2_fmlal_zzxw_s)(void *vd, void *vn, vo= id *vm, void *va, intptr_t i, j, oprsz =3D simd_oprsz(desc); bool is_s =3D extract32(desc, SIMD_DATA_SHIFT, 1); intptr_t sel =3D extract32(desc, SIMD_DATA_SHIFT + 1, 1) * sizeof(floa= t16); - intptr_t idx =3D extract32(desc, SIMD_DATA_SHIFT + 2, 3) * sizeof(floa= t16); - float_status *status =3D &env->vfp.fp_status[FPST_A64]; + bool za =3D extract32(desc, SIMD_DATA_SHIFT + 2, 1); + intptr_t idx =3D extract32(desc, SIMD_DATA_SHIFT + 3, 3) * sizeof(floa= t16); + float_status *status =3D &env->vfp.fp_status[za ? FPST_ZA : FPST_A64]; bool fz16 =3D env->vfp.fpcr & FPCR_FZ16; int negx =3D 0, negf =3D 0; =20 --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647130; cv=none; d=zohomail.com; s=zohoarc; b=b0NE3LHUPNbL+xgPJwywkbCsjPCzt31kYj5weAbWDK6GrdHRC55hsFMtSj2BakgO73ynAhaHVGB5xEhdn+4MfPHG7guWCttJxaRnjuRJUoYkbeLImkCWrjm6yAzknpBOAN0nxc1TtNqfCOOP6d+wk8bbqc16+4OS//AmV0UkyXk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647130; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=6mjsiA7KZKDAszwy3x3Eg/bebyO79pChhA3d2B5HK0s=; b=l98vs2qkXi4y3CJJpgkrxe+C00eCphK0VISN9rG0vgJB+SNhonCSEfYz972lYt5eJijzJq+ykWqI2Z4wFsxpZrRWM4mUvAnR3Je6hkiaGoJdSAGfFzR4CZgWeOK0jG2X8JDprBpvNuacliodiKJopWfYLyKb905my2Vw0pBYGNA= 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 1751647129996314.2028241195119; Fri, 4 Jul 2025 09:38:49 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjEZ-0000jb-6W; Fri, 04 Jul 2025 12:25:57 -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 1uXjET-0000eq-Fz for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:49 -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 1uXjER-0006ID-MM for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:49 -0400 Received: by mail-wm1-x32c.google.com with SMTP id 5b1f17b1804b1-451d54214adso7690395e9.3 for ; Fri, 04 Jul 2025 09:25:47 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.45 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646346; x=1752251146; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=6mjsiA7KZKDAszwy3x3Eg/bebyO79pChhA3d2B5HK0s=; b=iq5BzxzPFOh3tP3dgGxvav2+C/aHLEXqkdrwMG3m/ogy6yxquFPORRaSzN+2YFfw7B i9DpTGw0aqf0Kxozh6wv7ajHqEuqQjI2EeB5aTDaDTS4L/WGY0jGwdRUv6TOXxXaW3jV v38mWRQa+ufGfca8s0s6yzUfeVT60mR9k6b5rQttCzOPFRYBacFPChyJMs2xxNNdXx6P oqjLRNQLifVBjsC2MZlwDBJtrqD+8o49yitDRUWL/SedcIyTMGMkDn/Z1BeTBlvZKV/6 qUVbbtNusnQAlo1lJHhINUtsCz/VwvvX11opAR375Xp/RCzPHH5DrdoxAYedLlxIK0f3 M8Gw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646346; x=1752251146; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=6mjsiA7KZKDAszwy3x3Eg/bebyO79pChhA3d2B5HK0s=; b=dii9YKCvOMNOSdAdB+nvvtYopDCUjV9tQzTS0ocwzUteBM1YuBa95yCDaDY/3nP3nB zkdQ8Y991gWDn3TgWUqQtOpeC1ygC4VMtK+ONQQhT4HECrRYEkUPICPG+DuPv/ePkNAO qqdDls8C9dmmjuEVYVF0XIhzhdFQ24eIw8jwjCWPbDBFFHxKfxi8+TaPFP/7fehoKvGT FVLPefVt4hJeBbfmcp+TWYfwGv1E6Vtzn3/ogbUwOqPIYIrKR0APcPjdP0RBfW/K3EY7 C3PTHq6NlHiZ1d1L2E8hNfi3pe4nW9Znr04zONlsPYcntA8B+wwlM0eeVffeGnd5u3JN lupg== X-Gm-Message-State: AOJu0YzDpMTNaiMrUV+IT/rdek1FcdkqUoYIQO3XwLbDFzx6F58ySt/u oCnOnVXGwqSwn0VQ5w665a9oYgx/PoNGl2NRNJ2KABb8sUkIxNrLzIy9WR+0gvAv/26fDXzu6yr 7KqvW X-Gm-Gg: ASbGncv+vO07xWHRv8PUReb11dXj6SVDy6catQciJ/sNqkRyIBsReq+KCKf6ZmX1wc9 atgWTbfGUHUFXMxmzCX/Z33mQ4sWnOYsIaZAv+a3Dp4aqVnrMR4slZYaxP0j+V5S++z/gkaSHT/ jmKQh2E0grRwWMFwqDf6nRUevqJL7KWqJYJPrbcrcOvfXq+z9CiFB1ZuG0IPm25ZrQSPQcjMXPy IxiY0VUDkTP3dk6pOBltMnOWc2mvyUUhkqc+Fcd9ut2kRWUZb9AC7lFtlS+jrawECs6VkrjFaff WMAR/SKteWTGa0PTUPS6J09MW72IIw0mODkATqwP6n4JFBIewOG8WDswhZXYi0wBfOBq X-Google-Smtp-Source: AGHT+IGxSxn6cG4YqGCJOJoZdssWsgWPJbWn31EleR8aX63N72xGxT5JGj3kNLgYFsLFISLwKhqz4A== X-Received: by 2002:a05:600c:c4a5:b0:442:d9f2:ded8 with SMTP id 5b1f17b1804b1-454b3122753mr35051825e9.15.1751646346176; Fri, 04 Jul 2025 09:25:46 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 047/119] target/arm: Add helper_gvec{_ah}_bfmlsl{_nx} Date: Fri, 4 Jul 2025 17:23:47 +0100 Message-ID: <20250704162501.249138-48-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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=peter.maydell@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 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: 1751647131618116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-36-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/helper.h | 8 +++++ target/arm/tcg/vec_helper.c | 58 ++++++++++++++++++++++++++++--------- 2 files changed, 53 insertions(+), 13 deletions(-) diff --git a/target/arm/tcg/helper.h b/target/arm/tcg/helper.h index 8c4705fc539..a05b63380cb 100644 --- a/target/arm/tcg/helper.h +++ b/target/arm/tcg/helper.h @@ -1095,8 +1095,16 @@ DEF_HELPER_FLAGS_6(gvec_bfmmla, TCG_CALL_NO_RWG, =20 DEF_HELPER_FLAGS_6(gvec_bfmlal, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, fpst, i32) +DEF_HELPER_FLAGS_6(gvec_bfmlsl, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, ptr, fpst, i32) +DEF_HELPER_FLAGS_6(gvec_ah_bfmlsl, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, ptr, fpst, i32) DEF_HELPER_FLAGS_6(gvec_bfmlal_idx, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, fpst, i32) +DEF_HELPER_FLAGS_6(gvec_bfmlsl_idx, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, ptr, fpst, i32) +DEF_HELPER_FLAGS_6(gvec_ah_bfmlsl_idx, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, ptr, fpst, i32) =20 DEF_HELPER_FLAGS_5(gvec_sclamp_b, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, i32) diff --git a/target/arm/tcg/vec_helper.c b/target/arm/tcg/vec_helper.c index e8467823f21..5dcd6f9282d 100644 --- a/target/arm/tcg/vec_helper.c +++ b/target/arm/tcg/vec_helper.c @@ -3186,44 +3186,76 @@ void HELPER(gvec_bfmmla)(void *vd, void *vn, void *= vm, void *va, clear_tail(d, opr_sz, simd_maxsz(desc)); } =20 -void HELPER(gvec_bfmlal)(void *vd, void *vn, void *vm, void *va, - float_status *stat, uint32_t desc) +static void do_bfmlal(float32 *d, bfloat16 *n, bfloat16 *m, float32 *a, + float_status *stat, uint32_t desc, int negx, int neg= f) { intptr_t i, opr_sz =3D simd_oprsz(desc); - intptr_t sel =3D simd_data(desc); - float32 *d =3D vd, *a =3D va; - bfloat16 *n =3D vn, *m =3D vm; + intptr_t sel =3D extract32(desc, SIMD_DATA_SHIFT, 1); =20 for (i =3D 0; i < opr_sz / 4; ++i) { - float32 nn =3D n[H2(i * 2 + sel)] << 16; + float32 nn =3D (negx ^ n[H2(i * 2 + sel)]) << 16; float32 mm =3D m[H2(i * 2 + sel)] << 16; - d[H4(i)] =3D float32_muladd(nn, mm, a[H4(i)], 0, stat); + d[H4(i)] =3D float32_muladd(nn, mm, a[H4(i)], negf, stat); } clear_tail(d, opr_sz, simd_maxsz(desc)); } =20 -void HELPER(gvec_bfmlal_idx)(void *vd, void *vn, void *vm, - void *va, float_status *stat, uint32_t desc) +void HELPER(gvec_bfmlal)(void *vd, void *vn, void *vm, void *va, + float_status *stat, uint32_t desc) +{ + do_bfmlal(vd, vn, vm, va, stat, desc, 0, 0); +} + +void HELPER(gvec_bfmlsl)(void *vd, void *vn, void *vm, void *va, + float_status *stat, uint32_t desc) +{ + do_bfmlal(vd, vn, vm, va, stat, desc, 0x8000, 0); +} + +void HELPER(gvec_ah_bfmlsl)(void *vd, void *vn, void *vm, void *va, + float_status *stat, uint32_t desc) +{ + do_bfmlal(vd, vn, vm, va, stat, desc, 0, float_muladd_negate_product); +} + +static void do_bfmlal_idx(float32 *d, bfloat16 *n, bfloat16 *m, float32 *a, + float_status *stat, uint32_t desc, int negx, int= negf) { intptr_t i, j, opr_sz =3D simd_oprsz(desc); intptr_t sel =3D extract32(desc, SIMD_DATA_SHIFT, 1); intptr_t index =3D extract32(desc, SIMD_DATA_SHIFT + 1, 3); intptr_t elements =3D opr_sz / 4; intptr_t eltspersegment =3D MIN(16 / 4, elements); - float32 *d =3D vd, *a =3D va; - bfloat16 *n =3D vn, *m =3D vm; =20 for (i =3D 0; i < elements; i +=3D eltspersegment) { float32 m_idx =3D m[H2(2 * i + index)] << 16; =20 for (j =3D i; j < i + eltspersegment; j++) { - float32 n_j =3D n[H2(2 * j + sel)] << 16; - d[H4(j)] =3D float32_muladd(n_j, m_idx, a[H4(j)], 0, stat); + float32 n_j =3D (negx ^ n[H2(2 * j + sel)]) << 16; + d[H4(j)] =3D float32_muladd(n_j, m_idx, a[H4(j)], negf, stat); } } clear_tail(d, opr_sz, simd_maxsz(desc)); } =20 +void HELPER(gvec_bfmlal_idx)(void *vd, void *vn, void *vm, void *va, + float_status *stat, uint32_t desc) +{ + do_bfmlal_idx(vd, vn, vm, va, stat, desc, 0, 0); +} + +void HELPER(gvec_bfmlsl_idx)(void *vd, void *vn, void *vm, void *va, + float_status *stat, uint32_t desc) +{ + do_bfmlal_idx(vd, vn, vm, va, stat, desc, 0x8000, 0); +} + +void HELPER(gvec_ah_bfmlsl_idx)(void *vd, void *vn, void *vm, void *va, + float_status *stat, uint32_t desc) +{ + do_bfmlal_idx(vd, vn, vm, va, stat, desc, 0, float_muladd_negate_produ= ct); +} + #define DO_CLAMP(NAME, TYPE) \ void HELPER(NAME)(void *d, void *n, void *m, void *a, uint32_t desc) \ { \ --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646528; cv=none; d=zohomail.com; s=zohoarc; b=nraVpQVVPvbliOlmw9yX+EfLMbzOizcr8LhzZTNSGbUgROtHgCkWAZuSXZyEe7E1yuO2jfKn8Wwj+g+Tc0YWP1Zph+lQyMG4S0uaGdyxNLzpUCTsgDNLkMZHO9NJfOIvUuB1aKKwl1n7I2cJCAstAq9dH/p4s2pbxaeaTJBOFPI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646528; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=n9q1svcXo+vo8jycYiFM+gwcMkQLCdlrs7rIkeG78yc=; b=jxULFH4uQyuaTSEvHCY+gtJJ7kBdj8wDTfbqpf/e/L2Gb54vsGOm9q3e7yuv7vVXHbgU2+yXFb8NPhv0l5QFATs2J2ZuBhbIPgZvukBkqbrg1NnBvZobGckdIKE5bhAnhbC3AoVK+bbTfIy5PosTTStw87copLOdpQVay+BVzMM= 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 1751646528125319.48006949066564; Fri, 4 Jul 2025 09:28:48 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjEe-0000wn-Q1; Fri, 04 Jul 2025 12:26:00 -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 1uXjEU-0000gy-V8 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:50 -0400 Received: from mail-wr1-x431.google.com ([2a00:1450:4864:20::431]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjES-0006If-RY for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:50 -0400 Received: by mail-wr1-x431.google.com with SMTP id ffacd0b85a97d-3a6f2c6715fso1024327f8f.1 for ; Fri, 04 Jul 2025 09:25:48 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.46 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646347; x=1752251147; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=n9q1svcXo+vo8jycYiFM+gwcMkQLCdlrs7rIkeG78yc=; b=TRC9kHVRix3t7A+QY21r2iNte+QfFYrqCOQPrBk3UuWUUHfbKJHYezXiJwAkV25SS/ Kfzd2AduwFZLSMjVvBO0TWQT8mNlJjceOAoIlW+QFuLtn70AX7oVCh9/WuETwCOFnx7R zHaVGNvmi3Ur+yX1ZDgzhhhC0qkljXGTXdWqlRCZ1FUoWl6dJkg/fqyX4yiaehZKW/9l QEYRZLZvQIq5AuTE3t+kYrsmGpbWFPM6jpghgnqthdeKtEe+Xo7of4Q7u7C252wdWyUC VrInjQQtNo9TqcdT+K10qbATRZyMcQ+CEQXwhtG3K0/omU9WmxJvavTsCDCpY9inKBjg 5IdA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646347; x=1752251147; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=n9q1svcXo+vo8jycYiFM+gwcMkQLCdlrs7rIkeG78yc=; b=cZs2wfyNnqRBsob6Uh+J6951FE8dsGAD8elxYnNYkGvys96JIIK00AfULDrVab3Dwt 1CjZpwkEHo/OctZLTCZ+ALuFiaNgj/DmVSyqEwqEtjyhs06ITXlvnfyW/nosG5PsJcaz 4ujSmRo+IqSdW9dmRErBcG+Sb68IrdJjmWxZAcpv4S43Xfo493q8bWAk5h+TcKQKfIph 1t6l+mm5pihpk1NOwhn+0tj6cc8pwc7LGf79BfeRWoucjFJslgfxE6e87QxM27itIoQE vwHE+PIliSRC7BKY9s/tt0Ec/VAEVMcHlYxCzBLQMashUVmscDBB/PNjXzPgYAEuaN6D ctig== X-Gm-Message-State: AOJu0YwoNxsZZ5m0ZCsCPd5tjq2sNU928B9e91I/7LnmwBsx8EYT66kK ptMVtX2L+Ac0enzJkMVHzfYpW7MMce1FLSK0Xp/OBMsw7BrUUTqGJ/2L/3cqn96iy0xcZi+bYsa Ly/Cq X-Gm-Gg: ASbGncs+82qLiqbLCK1uWeicNotT04yvK59JRDiZNmar+Y+hOoYLTrqDvf9jMZWnBX6 eMxvRIuotc7U0wzbpRMCD4YPyznFj6UUnAz6ulu1AVWStM822vWqqhO4c5CWULXz00/G1qF0QGL 9V8DwRUYQbSHDjxuCvmvdA2Zun2P12kQ6v4zXdi9w+yblufCnb/Jjn2LOVPHqNN15Menu81ppUe I14aYIqXEe1kFc8vCMNKKDk5sTP+IIMv5CxSC5sFdG6deX0lDcV39d1oJeJcgTpofje+zsT/0Pi bTdqMd7AuG6E1Oj/DVUzQfw0piq6Mw0ZyScDdbdLqhLdny9boGxnrl17fdcImTce7sVZ X-Google-Smtp-Source: AGHT+IGkvkSxKbKt2fAgLe6AeNZxoql3Bc6Dp7310KJq+TJH2oPo8xM+qwCsPcsUvv8JbqlAMPlbqA== X-Received: by 2002:a05:6000:310d:b0:3a1:fa6c:4735 with SMTP id ffacd0b85a97d-3b497029535mr2606043f8f.35.1751646347089; Fri, 04 Jul 2025 09:25:47 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 048/119] target/arm: Implement SME2 FMLAL, BFMLAL Date: Fri, 4 Jul 2025 17:23:48 +0100 Message-ID: <20250704162501.249138-49-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::431; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x431.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751646530479116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-37-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/sme.decode | 71 ++++++++++++++++++++++++ target/arm/tcg/translate-sme.c | 98 ++++++++++++++++++++++++++++++++++ 2 files changed, 169 insertions(+) diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index a6dee08661e..9850c19d90b 100644 --- a/target/arm/tcg/sme.decode +++ b/target/arm/tcg/sme.decode @@ -261,6 +261,30 @@ SUB_azz_n1_s 11000001 0011 .... 0 .. 110 ..... 11 .= .. @azz_nx1_o3 n=3D4 SUB_azz_n1_d 11000001 0110 .... 0 .. 110 ..... 11 ... @azz_nx1_o3 n= =3D2 SUB_azz_n1_d 11000001 0111 .... 0 .. 110 ..... 11 ... @azz_nx1_o3 n= =3D4 =20 +%off3_x2 0:3 !function=3Dtimes_2 +%off2_x2 0:2 !function=3Dtimes_2 + +@azz_nx1_o3x2 ........ ... . zm:4 . .. ... zn:5 .. ... \ + &azz_n off=3D%off3_x2 rv=3D%mova_rv +@azz_nx1_o2x2 ........ ... . zm:4 . .. ... zn:5 ... .. \ + &azz_n off=3D%off2_x2 rv=3D%mova_rv + +FMLAL_n1 11000001 001 0 .... 0 .. 011 ..... 00 ... @azz_nx1_o3x2 = n=3D1 +FMLAL_n1 11000001 001 0 .... 0 .. 010 ..... 000 .. @azz_nx1_o2x2 = n=3D2 +FMLAL_n1 11000001 001 1 .... 0 .. 010 ..... 000 .. @azz_nx1_o2x2 = n=3D4 + +FMLSL_n1 11000001 001 0 .... 0 .. 011 ..... 01 ... @azz_nx1_o3x2 = n=3D1 +FMLSL_n1 11000001 001 0 .... 0 .. 010 ..... 010 .. @azz_nx1_o2x2 = n=3D2 +FMLSL_n1 11000001 001 1 .... 0 .. 010 ..... 010 .. @azz_nx1_o2x2 = n=3D4 + +BFMLAL_n1 11000001 001 0 .... 0 .. 011 ..... 10 ... @azz_nx1_o3x2 = n=3D1 +BFMLAL_n1 11000001 001 0 .... 0 .. 010 ..... 100 .. @azz_nx1_o2x2 = n=3D2 +BFMLAL_n1 11000001 001 1 .... 0 .. 010 ..... 100 .. @azz_nx1_o2x2 = n=3D4 + +BFMLSL_n1 11000001 001 0 .... 0 .. 011 ..... 11 ... @azz_nx1_o3x2 = n=3D1 +BFMLSL_n1 11000001 001 0 .... 0 .. 010 ..... 110 .. @azz_nx1_o2x2 = n=3D2 +BFMLSL_n1 11000001 001 1 .... 0 .. 010 ..... 110 .. @azz_nx1_o2x2 = n=3D4 + ### SME2 Multi-vector Multiple Array Vectors =20 %zn_ax2 6:4 !function=3Dtimes_2 @@ -280,3 +304,50 @@ SUB_azz_nn_s 11000001 101 ....0 0 .. 110 ....0 11 .= .. @azz_2x2_o3 SUB_azz_nn_s 11000001 101 ...01 0 .. 110 ...00 11 ... @azz_4x4_o3 SUB_azz_nn_d 11000001 111 ....0 0 .. 110 ....0 11 ... @azz_2x2_o3 SUB_azz_nn_d 11000001 111 ...01 0 .. 110 ...00 11 ... @azz_4x4_o3 + +@azz_2x2_o2x2 ........ ... ..... . .. ... ..... ... .. \ + &azz_n n=3D2 rv=3D%mova_rv zn=3D%zn_ax2 zm=3D%zm_ax2 off= =3D%off2_x2 +@azz_4x4_o2x2 ........ ... ..... . .. ... ..... ... .. \ + &azz_n n=3D4 rv=3D%mova_rv zn=3D%zn_ax4 zm=3D%zm_ax4 off= =3D%off2_x2 + +FMLAL_nn 11000001 101 ....0 0 .. 010 ....0 000 .. @azz_2x2_o2x2 +FMLAL_nn 11000001 101 ...01 0 .. 010 ...00 000 .. @azz_4x4_o2x2 + +FMLSL_nn 11000001 101 ....0 0 .. 010 ....0 010 .. @azz_2x2_o2x2 +FMLSL_nn 11000001 101 ...01 0 .. 010 ...00 010 .. @azz_4x4_o2x2 + +BFMLAL_nn 11000001 101 ....0 0 .. 010 ....0 100 .. @azz_2x2_o2x2 +BFMLAL_nn 11000001 101 ...01 0 .. 010 ...00 100 .. @azz_4x4_o2x2 + +BFMLSL_nn 11000001 101 ....0 0 .. 010 ....0 110 .. @azz_2x2_o2x2 +BFMLSL_nn 11000001 101 ...01 0 .. 010 ...00 110 .. @azz_4x4_o2x2 + +### SME2 Multi-vector Indexed + +&azx_n n off rv zn zm idx + +%idx3_15_10 15:1 10:2 +%idx2_10_2 10:2 2:1 + +@azx_1x1_o3x2 ........ .... zm:4 . .. . .. zn:5 .. ... \ + &azx_n n=3D1 rv=3D%mova_rv off=3D%off3_x2 idx=3D%idx3_15_10 +@azx_2x1_o2x2 ........ .... zm:4 . .. . .. ..... .. ... \ + &azx_n n=3D2 rv=3D%mova_rv off=3D%off2_x2 zn=3D%zn_ax2 idx= =3D%idx2_10_2 +@azx_4x1_o2x2 ........ .... zm:4 . .. . .. ..... .. ... \ + &azx_n n=3D4 rv=3D%mova_rv off=3D%off2_x2 zn=3D%zn_ax4 idx= =3D%idx2_10_2 + +FMLAL_nx 11000001 1000 .... . .. 1 .. ..... 00 ... @azx_1x1_o3x2 +FMLAL_nx 11000001 1001 .... 0 .. 1 .. ....0 00 ... @azx_2x1_o2x2 +FMLAL_nx 11000001 1001 .... 1 .. 1 .. ...00 00 ... @azx_4x1_o2x2 + +FMLSL_nx 11000001 1000 .... . .. 1 .. ..... 01 ... @azx_1x1_o3x2 +FMLSL_nx 11000001 1001 .... 0 .. 1 .. ....0 01 ... @azx_2x1_o2x2 +FMLSL_nx 11000001 1001 .... 1 .. 1 .. ...00 01 ... @azx_4x1_o2x2 + +BFMLAL_nx 11000001 1000 .... . .. 1 .. ..... 10 ... @azx_1x1_o3x2 +BFMLAL_nx 11000001 1001 .... 0 .. 1 .. ....0 10 ... @azx_2x1_o2x2 +BFMLAL_nx 11000001 1001 .... 1 .. 1 .. ...00 10 ... @azx_4x1_o2x2 + +BFMLSL_nx 11000001 1000 .... . .. 1 .. ..... 11 ... @azx_1x1_o3x2 +BFMLSL_nx 11000001 1001 .... 0 .. 1 .. ....0 11 ... @azx_2x1_o2x2 +BFMLSL_nx 11000001 1001 .... 1 .. 1 .. ...00 11 ... @azx_4x1_o2x2 diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index aabdb966751..9ec02d960d5 100644 --- a/target/arm/tcg/translate-sme.c +++ b/target/arm/tcg/translate-sme.c @@ -805,3 +805,101 @@ TRANS_FEAT(ADD_azz_nn_s, aa64_sme2, do_azz_nn, a, MO_= 32, tcg_gen_gvec_add_var) TRANS_FEAT(SUB_azz_nn_s, aa64_sme2, do_azz_nn, a, MO_32, tcg_gen_gvec_sub_= var) TRANS_FEAT(ADD_azz_nn_d, aa64_sme2_i16i64, do_azz_nn, a, MO_64, tcg_gen_gv= ec_add_var) TRANS_FEAT(SUB_azz_nn_d, aa64_sme2_i16i64, do_azz_nn, a, MO_64, tcg_gen_gv= ec_sub_var) + +/* + * Expand array multi-vector single (n1), array multi-vector (nn), + * and array multi-vector indexed (nx), for floating-point accumulate. + * multi: true for nn, false for n1. + * fpst: >=3D 0 to set ptr argument for FPST_*, < 0 for ENV. + * data: stuff for simd_data, including any index. + */ +#define FPST_ENV -1 + +static bool do_azz_acc_fp(DisasContext *s, int nreg, int nsel, + int rv, int off, int zn, int zm, + int data, int shsel, bool multi, int fpst, + gen_helper_gvec_4_ptr *fn) +{ + if (sme_smza_enabled_check(s)) { + int svl =3D streaming_vec_reg_size(s); + int vstride =3D svl / nreg; + TCGv_ptr t_za =3D get_zarray(s, rv, off, nreg, nsel); + TCGv_ptr t, ptr; + + if (fpst >=3D 0) { + ptr =3D fpstatus_ptr(fpst); + } else { + ptr =3D tcg_env; + } + t =3D tcg_temp_new_ptr(); + + for (int r =3D 0; r < nreg; ++r) { + TCGv_ptr t_zn =3D vec_full_reg_ptr(s, zn); + TCGv_ptr t_zm =3D vec_full_reg_ptr(s, zm); + + for (int i =3D 0; i < nsel; ++i) { + int o_za =3D (r * vstride + i) * sizeof(ARMVectorReg); + int desc =3D simd_desc(svl, svl, data | (i << shsel)); + + tcg_gen_addi_ptr(t, t_za, o_za); + fn(t, t_zn, t_zm, t, ptr, tcg_constant_i32(desc)); + } + + /* + * For multiple-and-single vectors, Zn may wrap. + * For multiple vectors, both Zn and Zm are aligned. + */ + zn =3D (zn + 1) % 32; + zm +=3D multi; + } + } + return true; +} + +static bool do_fmlal(DisasContext *s, arg_azz_n *a, bool sub, bool multi) +{ + return do_azz_acc_fp(s, a->n, 2, a->rv, a->off, a->zn, a->zm, + (1 << 2) | sub, 1, + multi, FPST_ENV, gen_helper_sve2_fmlal_zzzw_s); +} + +TRANS_FEAT(FMLAL_n1, aa64_sme2, do_fmlal, a, false, false) +TRANS_FEAT(FMLSL_n1, aa64_sme2, do_fmlal, a, true, false) +TRANS_FEAT(FMLAL_nn, aa64_sme2, do_fmlal, a, false, true) +TRANS_FEAT(FMLSL_nn, aa64_sme2, do_fmlal, a, true, true) + +static bool do_fmlal_nx(DisasContext *s, arg_azx_n *a, bool sub) +{ + return do_azz_acc_fp(s, a->n, 2, a->rv, a->off, a->zn, a->zm, + (a->idx << 3) | (1 << 2) | sub, 1, + false, FPST_ENV, gen_helper_sve2_fmlal_zzxw_s); +} + +TRANS_FEAT(FMLAL_nx, aa64_sme2, do_fmlal_nx, a, false) +TRANS_FEAT(FMLSL_nx, aa64_sme2, do_fmlal_nx, a, true) + +static bool do_bfmlal(DisasContext *s, arg_azz_n *a, bool sub, bool multi) +{ + return do_azz_acc_fp(s, a->n, 2, a->rv, a->off, a->zn, a->zm, + 0, 0, multi, FPST_ZA, + (!sub ? gen_helper_gvec_bfmlal + : s->fpcr_ah ? gen_helper_gvec_ah_bfmlsl + : gen_helper_gvec_bfmlsl)); +} + +TRANS_FEAT(BFMLAL_n1, aa64_sme2, do_bfmlal, a, false, false) +TRANS_FEAT(BFMLSL_n1, aa64_sme2, do_bfmlal, a, true, false) +TRANS_FEAT(BFMLAL_nn, aa64_sme2, do_bfmlal, a, false, true) +TRANS_FEAT(BFMLSL_nn, aa64_sme2, do_bfmlal, a, true, true) + +static bool do_bfmlal_nx(DisasContext *s, arg_azx_n *a, bool sub) +{ + return do_azz_acc_fp(s, a->n, 2, a->rv, a->off, a->zn, a->zm, + a->idx << 1, 0, false, FPST_ZA, + !sub ? gen_helper_gvec_bfmlal_idx + : s->fpcr_ah ? gen_helper_gvec_ah_bfmlsl_idx + : gen_helper_gvec_bfmlsl_idx); +} + +TRANS_FEAT(BFMLAL_nx, aa64_sme2, do_bfmlal_nx, a, false) +TRANS_FEAT(BFMLSL_nx, aa64_sme2, do_bfmlal_nx, a, true) --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646419; cv=none; d=zohomail.com; s=zohoarc; b=a5pOn2TB05PUE71iTj1YA9FuSkKqK5YVKsVHBfX4Abeq/gkSl7Ueob+x92ZRatf2khEsxzTkRSV4e7TxG/uggpw6z9UB50yW5punfu+1bksxuben5qGtQDyQL5ioIStXhdD6gtwRf63DG3iXy8nkuga84lW37qh7zL66Syst2uE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646419; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=B9mrPBMw+JJK4Uc5nryN4Cu1/BvhOB7WDrBUB4+qxNI=; b=JZBPKfqRVkpJRz17CNBi0OebkKWVu0aicy4umOpKAl/Xbl7OSBllAy8RsdwNq9i/m6y7SWkMBPxMhUKkFdJYVwrGqZ4It5anuoqgfE/s6Eobf+dbLWrBu5sj7imZ8LfBbxKoQXSrwVBUSKJ1tD3V1W502gQmhultdqw8PY79BGM= 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 1751646419078753.629523011715; Fri, 4 Jul 2025 09:26:59 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjEe-0000oP-7r; Fri, 04 Jul 2025 12:26:00 -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 1uXjEV-0000hD-Ko for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:51 -0400 Received: from mail-wr1-x431.google.com ([2a00:1450:4864:20::431]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjET-0006J0-IC for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:51 -0400 Received: by mail-wr1-x431.google.com with SMTP id ffacd0b85a97d-3a54690d369so1116346f8f.3 for ; Fri, 04 Jul 2025 09:25:49 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.47 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646348; x=1752251148; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=B9mrPBMw+JJK4Uc5nryN4Cu1/BvhOB7WDrBUB4+qxNI=; b=yMxk7pRx8rQhCqyWwpMtzdYX29mx52knARsdUdD3JN+dxyPJIwN4QqrkCk6FL988GC FywCCOvlApX5zJQXa48FT6D0UzOaU0fIN2M7/P2rnQNAnH0sV8L9G6sKVuP/Hquxicuq wxwQ6G4hTsrk/7T7XuHmubgGuAraXXRrZaOJZ/MP6lyY+yQ/otZ9QYgexXXJvWGNCRF+ PRd3T2mP51EaGbYxtZGwIyjCUraen5ARSH+gVb5q+iC0APldLnAF4xFFy7lazwtM0OeU g95+Ogf644+rduSpoitSgn2Tl55magnG/59xnUzWdSyEdy4iXs/jdsoSGmo+9UeipJS3 i2Og== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646348; x=1752251148; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=B9mrPBMw+JJK4Uc5nryN4Cu1/BvhOB7WDrBUB4+qxNI=; b=DCSRyt5+njglUJADoTuIplRhTl5kkBBDJBnRUC/qRN9MCvJWq0wu69WZ5lDtV5Wzu9 S6PoRqwz6/a8BOGzcyYCusbLJyooIOLtloXXNLuBDSrizSmSRztstnrH1Q4f1FTlUlmd SJGjh28U+Zpn7ljuLUb19Z6p3TMv59AjNbfC4AAHjClF4G+c2Q9+ngVn3ou1YnNXNTyW 2YNzWhTF2I5f4VwNQopuooj1o1td8kOD7HVv0YU+vcF1ltneE64JoMm53yTE18UOGV8b 8+lk+qKUw6+dWDmlZzRuiCe8qW0tgI/DI1ynafYhB491d3jr9Z3asCep4BwV9SjUQ231 eOcw== X-Gm-Message-State: AOJu0YyW+OYTxaOyGEhZvnIDg7w/UtrCkOmYAkzjcekqZBO2RGQcnWgW fH9vWyh+Hov50QygfbSHEPRUyDPXQ7g+CnICuErhldL9Gc93tqxA1bcRU1fYe30qz1BQHENG0Mr N4SDB X-Gm-Gg: ASbGncstjubf4Ffj4KWJsvDBCGuT+yBqTaaYWeGXJPkBxuWaioSGLxNfFxw89IPiv0O pdHJ8tbIuC2T4fVxd5HfKYOLdxh5x7ElCPUHWGVKLAf4dn74GUbIGmKyGmxFyZ9TWycDaKHkSFE wBQC12DlE4547oKo8cwtt747wvf4K3bzH9fYtAUqhyrhr53wtoUoasbUYiHV/rQuC/Z0EZ9oMxM pWhyjaflQSyZUAK21GsTa/E7uePR0YtsygU7PYvtGkeg+gi+5nyy0XdRqNjYATx73D8jSAJJsRc jWujtuEZZWctJXW8EvZREPS0VjDbal290pOeSOepDRgfF69iYYyMwK11tkfcDinw6gLH X-Google-Smtp-Source: AGHT+IEtBKh9Ru5GzIiFbb3+cR2IRcSYYXf2jQpy9yJveqQu0J73mqAqB7aP5HFkfTgREuENnaDA6w== X-Received: by 2002:a05:6000:2dca:b0:3a4:f038:af74 with SMTP id ffacd0b85a97d-3b497036257mr2852431f8f.51.1751646347992; Fri, 04 Jul 2025 09:25:47 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 049/119] target/arm: Implement SME2 FDOT Date: Fri, 4 Jul 2025 17:23:49 +0100 Message-ID: <20250704162501.249138-50-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::431; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x431.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751646420890116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-38-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/helper-sme.h | 5 ++++ target/arm/tcg/sme.decode | 14 +++++++++++ target/arm/tcg/sve.decode | 7 ++++-- target/arm/tcg/sme_helper.c | 44 ++++++++++++++++++++++++++++++++++ target/arm/tcg/translate-sme.c | 18 ++++++++++++++ target/arm/tcg/translate-sve.c | 5 ++++ 6 files changed, 91 insertions(+), 2 deletions(-) diff --git a/target/arm/tcg/helper-sme.h b/target/arm/tcg/helper-sme.h index cdd7058aed0..ec93ff57ff3 100644 --- a/target/arm/tcg/helper-sme.h +++ b/target/arm/tcg/helper-sme.h @@ -173,3 +173,8 @@ DEF_HELPER_FLAGS_5(gvec_fmaxnum_b16, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, fpst, i32) DEF_HELPER_FLAGS_5(gvec_fminnum_b16, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, fpst, i32) + +DEF_HELPER_FLAGS_6(sme2_fdot_h, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, ptr, env, i32) +DEF_HELPER_FLAGS_6(sme2_fdot_idx_h, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, ptr, env, i32) diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 9850c19d90b..a2b93519c48 100644 --- a/target/arm/tcg/sme.decode +++ b/target/arm/tcg/sme.decode @@ -285,6 +285,9 @@ BFMLSL_n1 11000001 001 0 .... 0 .. 011 ..... 11 .= .. @azz_nx1_o3x2 n=3D1 BFMLSL_n1 11000001 001 0 .... 0 .. 010 ..... 110 .. @azz_nx1_o2x2 = n=3D2 BFMLSL_n1 11000001 001 1 .... 0 .. 010 ..... 110 .. @azz_nx1_o2x2 = n=3D4 =20 +FDOT_n1 11000001 001 0 .... 0 .. 100 ..... 00 ... @azz_nx1_o3 n= =3D2 +FDOT_n1 11000001 001 1 .... 0 .. 100 ..... 00 ... @azz_nx1_o3 n= =3D4 + ### SME2 Multi-vector Multiple Array Vectors =20 %zn_ax2 6:4 !function=3Dtimes_2 @@ -322,6 +325,9 @@ BFMLAL_nn 11000001 101 ...01 0 .. 010 ...00 100 .= . @azz_4x4_o2x2 BFMLSL_nn 11000001 101 ....0 0 .. 010 ....0 110 .. @azz_2x2_o2x2 BFMLSL_nn 11000001 101 ...01 0 .. 010 ...00 110 .. @azz_4x4_o2x2 =20 +FDOT_nn 11000001 101 ....0 0 .. 100 ....0 00 ... @azz_2x2_o3 +FDOT_nn 11000001 101 ...01 0 .. 100 ...00 00 ... @azz_4x4_o3 + ### SME2 Multi-vector Indexed =20 &azx_n n off rv zn zm idx @@ -351,3 +357,11 @@ BFMLAL_nx 11000001 1001 .... 1 .. 1 .. ...00 10 = ... @azx_4x1_o2x2 BFMLSL_nx 11000001 1000 .... . .. 1 .. ..... 11 ... @azx_1x1_o3x2 BFMLSL_nx 11000001 1001 .... 0 .. 1 .. ....0 11 ... @azx_2x1_o2x2 BFMLSL_nx 11000001 1001 .... 1 .. 1 .. ...00 11 ... @azx_4x1_o2x2 + +@azx_2x1_i2_o3 ........ .... zm:4 . .. . idx:2 .... ... off:3 \ + &azx_n n=3D2 rv=3D%mova_rv zn=3D%zn_ax2 +@azx_4x1_i2_o3 ........ .... zm:4 . .. . idx:2 .... ... off:3 \ + &azx_n n=3D2 rv=3D%mova_rv zn=3D%zn_ax4 + +FDOT_nx 11000001 0101 .... 0 .. 1 .. ....0 01 ... @azx_2x1_i2_o3 +FDOT_nx 11000001 0101 .... 1 .. 1 .. ...00 01 ... @azx_4x1_i2_o3 diff --git a/target/arm/tcg/sve.decode b/target/arm/tcg/sve.decode index 3a99eb72998..5970ed9ac49 100644 --- a/target/arm/tcg/sve.decode +++ b/target/arm/tcg/sve.decode @@ -1662,7 +1662,8 @@ FMLSLT_zzzw 01100100 10 1 ..... 10 1 00 1 ..... .= .... @rda_rn_rm_ex esz=3D2 BFMLALB_zzzw 01100100 11 1 ..... 10 0 00 0 ..... ..... @rda_rn_rm_ex e= sz=3D2 BFMLALT_zzzw 01100100 11 1 ..... 10 0 00 1 ..... ..... @rda_rn_rm_ex e= sz=3D2 =20 -### SVE2 floating-point bfloat16 dot-product +### SVE2 floating-point dot-product +FDOT_zzzz 01100100 00 1 ..... 10 0 00 0 ..... ..... @rda_rn_rm_ex e= sz=3D2 BFDOT_zzzz 01100100 01 1 ..... 10 0 00 0 ..... ..... @rda_rn_rm_ex e= sz=3D2 =20 ### SVE2 floating-point multiply-add long (indexed) @@ -1673,7 +1674,9 @@ FMLSLT_zzxw 01100100 10 1 ..... 0110.1 ..... ....= . @rrxr_3a esz=3D2 BFMLALB_zzxw 01100100 11 1 ..... 0100.0 ..... ..... @rrxr_3a esz=3D2 BFMLALT_zzxw 01100100 11 1 ..... 0100.1 ..... ..... @rrxr_3a esz=3D2 =20 -### SVE2 floating-point bfloat16 dot-product (indexed) +### SVE2 floating-point dot-product (indexed) + +FDOT_zzxz 01100100 00 1 ..... 010000 ..... ..... @rrxr_2 esz=3D2 BFDOT_zzxz 01100100 01 1 ..... 010000 ..... ..... @rrxr_2 esz=3D2 =20 ### SVE broadcast predicate element diff --git a/target/arm/tcg/sme_helper.c b/target/arm/tcg/sme_helper.c index 8ce50653b4d..60322be3d0b 100644 --- a/target/arm/tcg/sme_helper.c +++ b/target/arm/tcg/sme_helper.c @@ -1152,6 +1152,50 @@ void HELPER(sme_fmopa_h)(void *vza, void *vzn, void = *vzm, void *vpn, } } =20 +void HELPER(sme2_fdot_h)(void *vd, void *vn, void *vm, void *va, + CPUARMState *env, uint32_t desc) +{ + intptr_t i, oprsz =3D simd_maxsz(desc); + bool za =3D extract32(desc, SIMD_DATA_SHIFT, 1); + float_status *fpst_std =3D &env->vfp.fp_status[za ? FPST_ZA : FPST_A64= ]; + float_status *fpst_f16 =3D &env->vfp.fp_status[za ? FPST_ZA_F16 : FPST= _A64_F16]; + float_status fpst_odd =3D *fpst_std; + float32 *d =3D vd, *a =3D va; + uint32_t *n =3D vn, *m =3D vm; + + set_float_rounding_mode(float_round_to_odd, &fpst_odd); + + for (i =3D 0; i < oprsz / sizeof(float32); ++i) { + d[H4(i)] =3D f16_dotadd(a[H4(i)], n[H4(i)], m[H4(i)], + fpst_f16, fpst_std, &fpst_odd); + } +} + +void HELPER(sme2_fdot_idx_h)(void *vd, void *vn, void *vm, void *va, + CPUARMState *env, uint32_t desc) +{ + intptr_t i, j, oprsz =3D simd_maxsz(desc); + intptr_t elements =3D oprsz / sizeof(float32); + intptr_t eltspersegment =3D MIN(4, elements); + int idx =3D extract32(desc, SIMD_DATA_SHIFT, 2); + bool za =3D extract32(desc, SIMD_DATA_SHIFT + 2, 1); + float_status *fpst_std =3D &env->vfp.fp_status[za ? FPST_ZA : FPST_A64= ]; + float_status *fpst_f16 =3D &env->vfp.fp_status[za ? FPST_ZA_F16 : FPST= _A64_F16]; + float_status fpst_odd =3D *fpst_std; + float32 *d =3D vd, *a =3D va; + uint32_t *n =3D vn, *m =3D (uint32_t *)vm + H4(idx); + + set_float_rounding_mode(float_round_to_odd, &fpst_odd); + + for (i =3D 0; i < elements; i +=3D eltspersegment) { + uint32_t mm =3D m[i]; + for (j =3D 0; j < eltspersegment; ++j) { + d[H4(i + j)] =3D f16_dotadd(a[H4(i + j)], n[H4(i + j)], mm, + fpst_f16, fpst_std, &fpst_odd); + } + } +} + void HELPER(sme_bfmopa)(void *vza, void *vzn, void *vzm, void *vpn, void *vpm, CPUARMState *env, uint32_t d= esc) { diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index 9ec02d960d5..761584c90b1 100644 --- a/target/arm/tcg/translate-sme.c +++ b/target/arm/tcg/translate-sme.c @@ -903,3 +903,21 @@ static bool do_bfmlal_nx(DisasContext *s, arg_azx_n *a= , bool sub) =20 TRANS_FEAT(BFMLAL_nx, aa64_sme2, do_bfmlal_nx, a, false) TRANS_FEAT(BFMLSL_nx, aa64_sme2, do_bfmlal_nx, a, true) + +static bool do_fdot(DisasContext *s, arg_azz_n *a, bool multi) +{ + return do_azz_acc_fp(s, a->n, 1, a->rv, a->off, a->zn, a->zm, 1, 0, + multi, FPST_ENV, gen_helper_sme2_fdot_h); +} + +TRANS_FEAT(FDOT_n1, aa64_sme2, do_fdot, a, false) +TRANS_FEAT(FDOT_nn, aa64_sme2, do_fdot, a, true) + +static bool do_fdot_nx(DisasContext *s, arg_azx_n *a) +{ + return do_azz_acc_fp(s, a->n, 1, a->rv, a->off, a->zn, a->zm, + a->idx | (1 << 2), 0, false, FPST_ENV, + gen_helper_sme2_fdot_idx_h); +} + +TRANS_FEAT(FDOT_nx, aa64_sme2, do_fdot_nx, a) diff --git a/target/arm/tcg/translate-sve.c b/target/arm/tcg/translate-sve.c index b85bd885f9d..4acd22f55e8 100644 --- a/target/arm/tcg/translate-sve.c +++ b/target/arm/tcg/translate-sve.c @@ -7229,6 +7229,11 @@ TRANS_FEAT_NONSTREAMING(USMMLA, aa64_sve_i8mm, gen_g= vec_ool_arg_zzzz, TRANS_FEAT_NONSTREAMING(UMMLA, aa64_sve_i8mm, gen_gvec_ool_arg_zzzz, gen_helper_gvec_ummla_b, a, 0) =20 +TRANS_FEAT(FDOT_zzzz, aa64_sme2_or_sve2p1, gen_gvec_env_arg_zzzz, + gen_helper_sme2_fdot_h, a, 0) +TRANS_FEAT(FDOT_zzxz, aa64_sme2_or_sve2p1, gen_gvec_env_arg_zzxz, + gen_helper_sme2_fdot_idx_h, a) + TRANS_FEAT(BFDOT_zzzz, aa64_sve_bf16, gen_gvec_env_arg_zzzz, gen_helper_gvec_bfdot, a, 0) TRANS_FEAT(BFDOT_zzxz, aa64_sve_bf16, gen_gvec_env_arg_zzxz, --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647311; cv=none; d=zohomail.com; s=zohoarc; b=hdc+n7XCPhCDI/2jukbRnoKQ7m6qsLhVbDNq6SLRDhKYEoHVhlpGPPZWXrCBFK7vn4JagI/PtR88+rukaW/JpLWB22diOIgQzo7Z4eI7rjBm0uE7WImxszcMOJk3pxvSo0mzWPzyonvEEv1gNWQM3tUzJDlgED+Sr8Mis79PdN0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647311; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=KViCSv4uoShwRvBrHu/x5dSvyBEtPh8EP04OjHj43FU=; b=FChAnKJ4whSIY+spgE3FwXhTGTCmUG9l5GC5HYLoXlKJguCwGr16dkYYHV+my88t6WlWhuXBJF/KzULQqNC9BG2XgNAqqAs+ryxRX6IXsgF4zOBWOcHuNOPgQg/ov1n2nryLLXLcJkfyut2Ut9T6KZWfL8b2lbM8vkxHpup3IXo= 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 1751647311340364.09164509284267; Fri, 4 Jul 2025 09:41:51 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjEX-0000iL-H0; Fri, 04 Jul 2025 12:25:53 -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 1uXjEW-0000hl-6v for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:52 -0400 Received: from mail-wr1-x433.google.com ([2a00:1450:4864:20::433]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjEU-0006JM-MA for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:51 -0400 Received: by mail-wr1-x433.google.com with SMTP id ffacd0b85a97d-3a54690d369so1116360f8f.3 for ; Fri, 04 Jul 2025 09:25:49 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.48 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646349; x=1752251149; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=KViCSv4uoShwRvBrHu/x5dSvyBEtPh8EP04OjHj43FU=; b=yO41g2FaNfTPcZl5aO8O3uB7BgOa99CuDot474rf5Ij/bJ+BH3E1n3c52pxUrvQDth yNheoTwkhs5lT05MRaq4/Uv4ZjPne3kxCaoUfntqzcXLTNqdpS82xkrip6rhhIvXFLeD htNEnq8GLnkzNN2vO4+a2jxZgLojt0LG6Ev5cWyAgZhFn9tshzYTpB8Z8rCoPES1rXiX VX9hx9FkomU3WBREmYKVD//0tF9zTq+bP0mz350LnPyWFGR/ldRI2+OzGs6MHGl7CqBZ +Hx27xpBtcQjtlZ5t9aqzb36JgwXNuKpTv1/WFvNUmF/BsYmW+atCwuI1JUlpGkJ/Gc0 3ZRQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646349; x=1752251149; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=KViCSv4uoShwRvBrHu/x5dSvyBEtPh8EP04OjHj43FU=; b=GmmjGE3YaM2q1oqD117vNGOhZLR3lbeAfuzM6wIgn9qVSjMQarBQp2i7oavkrqaBZ2 +5xakienkDWz5YNnrfj/fYBy0AHjPDcqKNz6GaoNv2r2suPjUYrXlivjoLqnpGOaJcaM uqGEtqR99RbUvrdvQAhv/J1cLqDEOdN6sZvSOkaLki5jfkFlhdKwERQM1MGgCRLyo92e 0NszZEulf+LLxCjValP8xZhlmtgfAsYvmvjkH4RLBnqX45FOZnCTaP6uQHSnzz333m7E tsuRp+6+Rukdt9It9TQXp7oidZ4lwKYJ4Tw/2VnGBsqRcKSjIqGcVHRZs5XlhlTK4Ms2 Z6rQ== X-Gm-Message-State: AOJu0Yytne24i/HLOJTZJ+H64msIe8uS7JM6L88QOERzOgEPMcjpk+1s H3WhLMCh8RWf1Na3G/4+Id8fa+tvleefruWZoRBvC9/odh3T0BDbnFB+vHuDUCKbEyEjJpkT2SY Ej7PL X-Gm-Gg: ASbGnctUWo5SaUpXGcoXge+Y6UA6EkdfS6fvIQMOstga8cImjMEtT+nWbtWajfBVO7v IEdvn/NQFa6OCQCT5dA/9Thvz3+FKfIHB23RgqLjEUAZPNPTJD94ElUlZEUXamDWbQuRx5q4sEb qeTPkKaB9nJRt6EY/RQ20QHn05zCKknK6QbNfVGkrjfHR7lffvhy9zF6v4EDDtERNGP9THUg4rE Ay0CHmnqCZIBQKPdWV4AgsWZby6iZf76ry6Nkf+Uw5NvXqTWDy8f3PJx2+0R6X7aJnALYBgs2Hm dq5GpaxcTU5Uy7XRn0XIn9XzFFlcnVRPqEwi1496RtuqMOGTzH7b1iZvuE0Mv7lmHln0OyXfb/2 Lb6E= X-Google-Smtp-Source: AGHT+IECVfI/s5GsWf9VBRPFa8JzLSVFKEY2VB1Jtmjl7ZyfDH9BIumjaBRpmDMe+YoA+/loWT7ayQ== X-Received: by 2002:a05:6000:2dc1:b0:3a4:fc07:f453 with SMTP id ffacd0b85a97d-3b496fef732mr2258410f8f.8.1751646348921; Fri, 04 Jul 2025 09:25:48 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 050/119] target/arm: Implement SME2 BFDOT Date: Fri, 4 Jul 2025 17:23:50 +0100 Message-ID: <20250704162501.249138-51-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::433; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x433.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751647311773116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-39-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/sme.decode | 9 +++++++++ target/arm/tcg/translate-sme.c | 17 +++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index a2b93519c48..18e625605fb 100644 --- a/target/arm/tcg/sme.decode +++ b/target/arm/tcg/sme.decode @@ -288,6 +288,9 @@ BFMLSL_n1 11000001 001 1 .... 0 .. 010 ..... 110 = .. @azz_nx1_o2x2 n=3D4 FDOT_n1 11000001 001 0 .... 0 .. 100 ..... 00 ... @azz_nx1_o3 n= =3D2 FDOT_n1 11000001 001 1 .... 0 .. 100 ..... 00 ... @azz_nx1_o3 n= =3D4 =20 +BFDOT_n1 11000001 001 0 .... 0 .. 100 ..... 10 ... @azz_nx1_o3 n= =3D2 +BFDOT_n1 11000001 001 1 .... 0 .. 100 ..... 10 ... @azz_nx1_o3 n= =3D4 + ### SME2 Multi-vector Multiple Array Vectors =20 %zn_ax2 6:4 !function=3Dtimes_2 @@ -328,6 +331,9 @@ BFMLSL_nn 11000001 101 ...01 0 .. 010 ...00 110 .= . @azz_4x4_o2x2 FDOT_nn 11000001 101 ....0 0 .. 100 ....0 00 ... @azz_2x2_o3 FDOT_nn 11000001 101 ...01 0 .. 100 ...00 00 ... @azz_4x4_o3 =20 +BFDOT_nn 11000001 101 ....0 0 .. 100 ....0 10 ... @azz_2x2_o3 +BFDOT_nn 11000001 101 ...01 0 .. 100 ...00 10 ... @azz_4x4_o3 + ### SME2 Multi-vector Indexed =20 &azx_n n off rv zn zm idx @@ -365,3 +371,6 @@ BFMLSL_nx 11000001 1001 .... 1 .. 1 .. ...00 11 .= .. @azx_4x1_o2x2 =20 FDOT_nx 11000001 0101 .... 0 .. 1 .. ....0 01 ... @azx_2x1_i2_o3 FDOT_nx 11000001 0101 .... 1 .. 1 .. ...00 01 ... @azx_4x1_i2_o3 + +BFDOT_nx 11000001 0101 .... 0 .. 1 .. ....0 11 ... @azx_2x1_i2_o3 +BFDOT_nx 11000001 0101 .... 1 .. 1 .. ...00 11 ... @azx_4x1_i2_o3 diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index 761584c90b1..965a49465e4 100644 --- a/target/arm/tcg/translate-sme.c +++ b/target/arm/tcg/translate-sme.c @@ -921,3 +921,20 @@ static bool do_fdot_nx(DisasContext *s, arg_azx_n *a) } =20 TRANS_FEAT(FDOT_nx, aa64_sme2, do_fdot_nx, a) + +static bool do_bfdot(DisasContext *s, arg_azz_n *a, bool multi) +{ + return do_azz_acc_fp(s, a->n, 1, a->rv, a->off, a->zn, a->zm, 0, 0, + multi, FPST_ENV, gen_helper_gvec_bfdot); +} + +TRANS_FEAT(BFDOT_n1, aa64_sme2, do_bfdot, a, false) +TRANS_FEAT(BFDOT_nn, aa64_sme2, do_bfdot, a, true) + +static bool do_bfdot_nx(DisasContext *s, arg_azx_n *a) +{ + return do_azz_acc_fp(s, a->n, 1, a->rv, a->off, a->zn, a->zm, a->idx, = 0, + false, FPST_ENV, gen_helper_gvec_bfdot_idx); +} + +TRANS_FEAT(BFDOT_nx, aa64_sme2, do_bfdot_nx, a) --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647397; cv=none; d=zohomail.com; s=zohoarc; b=ElIyebXc6LaEQmyZwXfvo/8HKktuE5yxippHLGZdBRaVU8cGLmf8DXh93MNXy6L4DS/nAl/LULG3EL+LcfYjQ6yX9gzhTZOaJUrcY5+/7p1mSpRbMKscRt4T7mjpUVyUjuqS3M3ZbGP4EyGLVBNWByjHy6EEslb7v/XK5kskwrY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647397; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=JEfw+hU25YNEGVmIvwv1xtY9QXngB3p4FY9Sf3xuo6Y=; b=a3nkKxa04qJsx5qTCAE0abMoIg+Ga2dSjESwRRaaKYLP2O/YAAxV7to469I/j7ViJhgmdMwvieihNY8L9yf2bU5U7mW27WG4SAfrAmlPZlEHRvM5N+B8WGrL2qbuQI3szyXE3hfa8zdhvmYwe0djxEVKcciAbRYkJBebBgXSwt8= 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 175164739767689.50001268877713; Fri, 4 Jul 2025 09:43:17 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjEv-0001cG-E4; Fri, 04 Jul 2025 12:26:17 -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 1uXjEX-0000iG-6P for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:53 -0400 Received: from mail-wr1-x434.google.com ([2a00:1450:4864:20::434]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjEV-0006JW-BA for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:52 -0400 Received: by mail-wr1-x434.google.com with SMTP id ffacd0b85a97d-3a575a988f9so678999f8f.0 for ; Fri, 04 Jul 2025 09:25:50 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.49 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646350; x=1752251150; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=JEfw+hU25YNEGVmIvwv1xtY9QXngB3p4FY9Sf3xuo6Y=; b=jHmPAQvxCY4nkyhvzrapfz3QDMRnmRgQ4x5cosiC4sNHUT2lp7oM+TX2keT1Pu9r9v 8rf1+jFMNVJasi/HyAQF2ZNJ3grPRlWVKsfTrCev1FzBxeWAggXToC/JVna6Op4rnaLJ 9KTAuggE+IoKhBFC6QY/hvPd2My4rNHQxZCPtZxFzWlTe217KTR2FQ08srP5B2VYjKCd 7twiTgND/5/c0yVbnGQPtoI+QsE3z6hszjsWJS7l5T9tni35/ttWAV75TyeoZvB3AzVp NWqG63gt9rRbSBwOdgce5u23+L1RQ1RlzwbCMzqqHgpY8PoXxE1z2Y4VZPcBSJcy3Jj6 TF1w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646350; x=1752251150; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=JEfw+hU25YNEGVmIvwv1xtY9QXngB3p4FY9Sf3xuo6Y=; b=GI4K8NiNbINoMZaPswwVn2qPJ9lXsGUAmdz6AuYHnp6yVtZAhGIIPXXdtSc/Dl3067 lpkfTjqy5HlTe/6uEzmZ6+nA32AnfvJLXaBtsKNuNz88gRpDcfbc/fPz4ZQeS6iVbXZE nosKjgbMpH4keDUUI+sjVelQnuIXg6HxGzEVF7kGxsiHrr3DOaKp5QSQBeNJ/u9ZvEwj qTSY5aZtjJ9x+SRjO/FZlciA9V5RSFIM/9kfrLXJMqTivK0uJCectA6j5noFNBGWB/Fs 5xwpO7r+EP1Don+8LhRhIKFzes0WP0m3H3vpOiHOavP3N/m8nRefdX4MPqPzfBS1M3j2 CmaQ== X-Gm-Message-State: AOJu0YxMtHSigpQ/EYfXA0RnRMLBHG+5kuqnv0ojcFBscC48w2I6mzoM WfSfIQk7la1TuQv0yfKZweUOnUFA+wbCy6bicOYxapMVcvup30SOe6lMwXelwx+gG5DkCAqtJtO JUIgD X-Gm-Gg: ASbGncush3chFUo7iQ/sugNAYqQJah/DK2IbA2sEvJ6hxnqd8sZtj/ax80SWC1wSeHJ zrrjzTmx6fgkGlAaatCFWSoqEpw6OoDH5u8dYnmPMSGsusfDOt9SW31pzQskXlw3PZZl4Zognoo 9odCgBNYEDJvl+0tiQJCn69hn/fbjLyuY4OH95XQQY26QppgMuS2sZLztHiw7gC2RTKcGOc1qKD y/bGiNqoPURrlmGzd0rbJ1tSL5CDz5O9WWTg9SABkP4jNqrylY/8XaxWjhC3k6mLKm+XbfQbyH0 rc4QSYmGM/L58RGAC/M+cB8GSQTc2Xw8aR0KQmYV5ATa7L32RsETnVK89XnzYR2dLVkt X-Google-Smtp-Source: AGHT+IEWdJY0lkgwGoPg3oe1lP1VLeStJ0MBJJkCppg9r1ZzmBuMPM3W5lp5Xn9ji1iGmn+iN79ymQ== X-Received: by 2002:a05:6000:208a:b0:3a4:d939:62fc with SMTP id ffacd0b85a97d-3b4964c1522mr2324305f8f.22.1751646349864; Fri, 04 Jul 2025 09:25:49 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 051/119] target/arm: Implement SME2 FVDOT, BFVDOT Date: Fri, 4 Jul 2025 17:23:51 +0100 Message-ID: <20250704162501.249138-52-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::434; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x434.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751647398674116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-40-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/helper-sme.h | 2 ++ target/arm/tcg/helper.h | 2 ++ target/arm/tcg/sme.decode | 3 +++ target/arm/tcg/sme_helper.c | 30 ++++++++++++++++++++++++++ target/arm/tcg/translate-sme.c | 24 +++++++++++++++++++++ target/arm/tcg/vec_helper.c | 39 ++++++++++++++++++++++++++++++++++ 6 files changed, 100 insertions(+) diff --git a/target/arm/tcg/helper-sme.h b/target/arm/tcg/helper-sme.h index ec93ff57ff3..8f5a1b3c908 100644 --- a/target/arm/tcg/helper-sme.h +++ b/target/arm/tcg/helper-sme.h @@ -178,3 +178,5 @@ DEF_HELPER_FLAGS_6(sme2_fdot_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, env, i32) DEF_HELPER_FLAGS_6(sme2_fdot_idx_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, env, i32) +DEF_HELPER_FLAGS_6(sme2_fvdot_idx_h, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, ptr, env, i32) diff --git a/target/arm/tcg/helper.h b/target/arm/tcg/helper.h index a05b63380cb..d8d389af2b9 100644 --- a/target/arm/tcg/helper.h +++ b/target/arm/tcg/helper.h @@ -1089,6 +1089,8 @@ DEF_HELPER_FLAGS_6(gvec_bfdot, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, env, i32) DEF_HELPER_FLAGS_6(gvec_bfdot_idx, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, env, i32) +DEF_HELPER_FLAGS_6(sme2_bfvdot_idx, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, ptr, env, i32) =20 DEF_HELPER_FLAGS_6(gvec_bfmmla, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, env, i32) diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 18e625605fb..7c057bcad20 100644 --- a/target/arm/tcg/sme.decode +++ b/target/arm/tcg/sme.decode @@ -374,3 +374,6 @@ FDOT_nx 11000001 0101 .... 1 .. 1 .. ...00 01 .= .. @azx_4x1_i2_o3 =20 BFDOT_nx 11000001 0101 .... 0 .. 1 .. ....0 11 ... @azx_2x1_i2_o3 BFDOT_nx 11000001 0101 .... 1 .. 1 .. ...00 11 ... @azx_4x1_i2_o3 + +FVDOT 11000001 0101 .... 0 .. 0 .. ....0 01 ... @azx_2x1_i2_o3 +BFVDOT 11000001 0101 .... 0 .. 0 .. ....0 11 ... @azx_2x1_i2_o3 diff --git a/target/arm/tcg/sme_helper.c b/target/arm/tcg/sme_helper.c index 60322be3d0b..8b458654612 100644 --- a/target/arm/tcg/sme_helper.c +++ b/target/arm/tcg/sme_helper.c @@ -1196,6 +1196,36 @@ void HELPER(sme2_fdot_idx_h)(void *vd, void *vn, voi= d *vm, void *va, } } =20 +void HELPER(sme2_fvdot_idx_h)(void *vd, void *vn, void *vm, void *va, + CPUARMState *env, uint32_t desc) +{ + intptr_t i, j, oprsz =3D simd_maxsz(desc); + intptr_t elements =3D oprsz / sizeof(float32); + intptr_t eltspersegment =3D MIN(4, elements); + int idx =3D extract32(desc, SIMD_DATA_SHIFT, 2); + int sel =3D extract32(desc, SIMD_DATA_SHIFT + 2, 1); + float_status fpst_odd, *fpst_std, *fpst_f16; + float32 *d =3D vd, *a =3D va; + uint16_t *n0 =3D vn; + uint16_t *n1 =3D vn + sizeof(ARMVectorReg); + uint32_t *m =3D (uint32_t *)vm + H4(idx); + + fpst_std =3D &env->vfp.fp_status[FPST_ZA]; + fpst_f16 =3D &env->vfp.fp_status[FPST_ZA_F16]; + fpst_odd =3D *fpst_std; + set_float_rounding_mode(float_round_to_odd, &fpst_odd); + + for (i =3D 0; i < elements; i +=3D eltspersegment) { + uint32_t mm =3D m[i]; + for (j =3D 0; j < eltspersegment; ++j) { + uint32_t nn =3D (n0[H2(2 * (i + j) + sel)]) + | (n1[H2(2 * (i + j) + sel)] << 16); + d[i + H4(j)] =3D f16_dotadd(a[i + H4(j)], nn, mm, + fpst_f16, fpst_std, &fpst_odd); + } + } +} + void HELPER(sme_bfmopa)(void *vza, void *vzn, void *vzm, void *vpn, void *vpm, CPUARMState *env, uint32_t d= esc) { diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index 965a49465e4..410a8d037c0 100644 --- a/target/arm/tcg/translate-sme.c +++ b/target/arm/tcg/translate-sme.c @@ -938,3 +938,27 @@ static bool do_bfdot_nx(DisasContext *s, arg_azx_n *a) } =20 TRANS_FEAT(BFDOT_nx, aa64_sme2, do_bfdot_nx, a) + +static bool do_vdot(DisasContext *s, arg_azx_n *a, gen_helper_gvec_4_ptr *= fn) +{ + if (sme_smza_enabled_check(s)) { + int svl =3D streaming_vec_reg_size(s); + int vstride =3D svl / 2; + TCGv_ptr t_za =3D get_zarray(s, a->rv, a->off, 2, 1); + TCGv_ptr t_zn =3D vec_full_reg_ptr(s, a->zn); + TCGv_ptr t_zm =3D vec_full_reg_ptr(s, a->zm); + TCGv_ptr t =3D tcg_temp_new_ptr(); + + for (int i =3D 0; i < 2; ++i) { + int o_za =3D i * vstride * sizeof(ARMVectorReg); + int desc =3D simd_desc(svl, svl, a->idx | (i << 2)); + + tcg_gen_addi_ptr(t, t_za, o_za); + fn(t, t_zn, t_zm, t, tcg_env, tcg_constant_i32(desc)); + } + } + return true; +} + +TRANS_FEAT(FVDOT, aa64_sme, do_vdot, a, gen_helper_sme2_fvdot_idx_h) +TRANS_FEAT(BFVDOT, aa64_sme, do_vdot, a, gen_helper_sme2_bfvdot_idx) diff --git a/target/arm/tcg/vec_helper.c b/target/arm/tcg/vec_helper.c index 5dcd6f9282d..616f4050e47 100644 --- a/target/arm/tcg/vec_helper.c +++ b/target/arm/tcg/vec_helper.c @@ -3110,6 +3110,45 @@ void HELPER(gvec_bfdot_idx)(void *vd, void *vn, void= *vm, clear_tail(d, opr_sz, simd_maxsz(desc)); } =20 +void HELPER(sme2_bfvdot_idx)(void *vd, void *vn, void *vm, + void *va, CPUARMState *env, uint32_t desc) +{ + intptr_t i, j, opr_sz =3D simd_oprsz(desc); + intptr_t idx =3D extract32(desc, SIMD_DATA_SHIFT, 2); + intptr_t sel =3D extract32(desc, SIMD_DATA_SHIFT + 2, 1); + intptr_t elements =3D opr_sz / 4; + intptr_t eltspersegment =3D MIN(16 / 4, elements); + float32 *d =3D vd, *a =3D va; + uint16_t *n0 =3D vn; + uint16_t *n1 =3D vn + sizeof(ARMVectorReg); + uint32_t *m =3D vm; + float_status fpst, fpst_odd; + + if (is_ebf(env, &fpst, &fpst_odd)) { + for (i =3D 0; i < elements; i +=3D eltspersegment) { + uint32_t m_idx =3D m[i + H4(idx)]; + + for (j =3D 0; j < eltspersegment; j++) { + uint32_t nn =3D (n0[H2(2 * (i + j) + sel)]) + | (n1[H2(2 * (i + j) + sel)] << 16); + d[i + H4(j)] =3D bfdotadd_ebf(a[i + H4(j)], nn, m_idx, + &fpst, &fpst_odd); + } + } + } else { + for (i =3D 0; i < elements; i +=3D eltspersegment) { + uint32_t m_idx =3D m[i + H4(idx)]; + + for (j =3D 0; j < eltspersegment; j++) { + uint32_t nn =3D (n0[H2(2 * (i + j) + sel)]) + | (n1[H2(2 * (i + j) + sel)] << 16); + d[i + H4(j)] =3D bfdotadd(a[i + H4(j)], nn, m_idx, &fpst); + } + } + } + clear_tail(d, opr_sz, simd_maxsz(desc)); +} + void HELPER(gvec_bfmmla)(void *vd, void *vn, void *vm, void *va, CPUARMState *env, uint32_t desc) { --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647274; cv=none; d=zohomail.com; s=zohoarc; b=QbdzvGc80i1zzjdEHFlJZ2xn1Hs7vVSuLkLW6/s4wwmtlmUyYh7Sv1zZRIfmAaU4fqULsRWjGaxR4Q3LfN2dOos3ZvzZYRG3YAolCwzhWjMUagLNraMTsGPRm2qyfDI+WBnm4T08IVVyiRktx/Z5fctU6RzEnEC1xi7JyIw8xTI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647274; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=kGXXor5EEEpVe9xryP61c3df3Gl8oHv2WOCnLV9Hocg=; b=ap5jPsLNkDlTaf0G84L+qdVcaaZ8cW3mxH6IEcaQuhNiKn9yj6nUlAUh9csAiF0Z1e4ZVPh/09AWP+e70S384QgFYzqevJ/FiP8onBzGzMDV90JJLGoBgf7f7AiSqrp0681jz5ebFS/zIb5f/6F6LoaFNC1OdtknF8Y4ILVuIdU= 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 1751647273998765.8075050822399; Fri, 4 Jul 2025 09:41:13 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjEw-0001lk-V4; Fri, 04 Jul 2025 12:26:19 -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 1uXjEY-0000jC-Jo for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:54 -0400 Received: from mail-wr1-x42d.google.com ([2a00:1450:4864:20::42d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjEW-0006Jn-Fd for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:54 -0400 Received: by mail-wr1-x42d.google.com with SMTP id ffacd0b85a97d-3a4f379662cso967255f8f.0 for ; Fri, 04 Jul 2025 09:25:52 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.49 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646351; x=1752251151; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=kGXXor5EEEpVe9xryP61c3df3Gl8oHv2WOCnLV9Hocg=; b=goQnhL6uySuuFzMK3Ug6JTg+RUfg/y0oeYPrjkozDrmHyw/m99pipGkaVZZgAezHJT 8/QCUiXCtcgNHvToIJgwlzAl562LtGBm9bHKyAPbJ6rpoqTOEtCMpStlziBAxrCyl2rm 1fUbNrrNFRiRpe9OS//LJwqKOP2DUOpTIJDlDGLV9qGIbsbuPMwQYjyz7Kc5VqcDMEH6 CZsYBkZfV9CtifP9R6lo6olbGYtvRB3i1V4xUPTQ8lXnpQbTXxcX26vlNzkH1bTl2k3u koPvR0liUzRW2NAfMMcvmDq9DrBcU14uFRiMkkJxOvnPJLS71OjTweZJfEGvHdT2Ct54 1vLw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646351; x=1752251151; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=kGXXor5EEEpVe9xryP61c3df3Gl8oHv2WOCnLV9Hocg=; b=lNAY9M9wA7adSDh6xHScc+KaIEuMJdb3tyEkg7QHffbGlnwPqc+pBd34p+G51sdQAT ZNWg7/4ZpDpRSYS13/eSxW6AcoOwG5N11wCoF/9xnk4FbIRnxT5Fuq83S0xbfbvoa+y5 ADmZ6MR9fP0gsTW19BldFwQxLXeHNy5yFlZ60DTJS+dDMrQcbJ8eRNrfqOV8oZZGZyE6 Aeu5Lauqm1tarsTZRtWCdGR4GDHZRlmPc9QxQxlxhlsz2NmfYqVzqAM0X545jajNLrnN LJDEsiRdVFXVzNkFiq5auuPKOuv1JbyqG1DEpzfLVdI6RZEyfj3O2SQfxaUpzXTuYBmQ KX6g== X-Gm-Message-State: AOJu0YxJE17u3pwBh6+vjRS6gONOzjw8k9z0tX/mDfe22YrIHdHIty89 AjEGUqAvWsKqDJYHvOmTdSEkPVK/b+BRtDfYrq+3RDhFYzg/rxP9nwPgmKgbOQsmkJ6c7swkjgB cyW9R X-Gm-Gg: ASbGnct16DCJ05CpK74KfMECjx80dCKjIZQz2uweOnWFozW/YNOhR2PGEyuE3+USzp4 cWJu6ewqRu14aFkMP8IxLS9b5ybfsta2y5D/G5xv8gnt9pc3gulB5t06zvsftkfonzc7+G/o0bT Am7tQhesoMRtNvR42VCvWzElQ9nVkctujlHzKzff62+Fh9dz8r2t3KF03vr97bpY3oWy6taVwJD 9Bdcabtwo2wold82vMXXaGsMGqtCRtJcvBoWCKzICf6xjsZNqjk0wvt7YUK35KT/JqwCOel74AI PnWxGOSDw3569c+uTtlpp8Vh0eykA2XSPhex5Zff596bHUm/IPjiDZJYsIz+MmCd7n1V X-Google-Smtp-Source: AGHT+IEE+sgPrUQQoaUJIOr7EhPlVi2SxeqWz9Bx6i0YgG1Xsv7SLEi8Z6S/yuU0ZhD/157kSS2VCg== X-Received: by 2002:a05:6000:188b:b0:3a4:cfbf:519b with SMTP id ffacd0b85a97d-3b49702e8a3mr2712725f8f.44.1751646350879; Fri, 04 Jul 2025 09:25:50 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 052/119] target/arm: Rename helper_gvec_*dot_[bh] to *_4[bh] Date: Fri, 4 Jul 2025 17:23:52 +0100 Message-ID: <20250704162501.249138-53-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::42d; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x42d.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751647275460116601 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Emphasize that these are 4-way dot products. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-41-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/helper.h | 22 +++++++++++----------- target/arm/tcg/translate-a64.c | 14 +++++++------- target/arm/tcg/translate-neon.c | 14 +++++++------- target/arm/tcg/translate-sve.c | 18 +++++++++--------- target/arm/tcg/vec_helper.c | 22 +++++++++++----------- 5 files changed, 45 insertions(+), 45 deletions(-) diff --git a/target/arm/tcg/helper.h b/target/arm/tcg/helper.h index d8d389af2b9..a19955b872f 100644 --- a/target/arm/tcg/helper.h +++ b/target/arm/tcg/helper.h @@ -616,23 +616,23 @@ DEF_HELPER_FLAGS_5(sve2_sqrdmlah_d, TCG_CALL_NO_RWG, DEF_HELPER_FLAGS_5(sve2_sqrdmlsh_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, i32) =20 -DEF_HELPER_FLAGS_5(gvec_sdot_b, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr,= i32) -DEF_HELPER_FLAGS_5(gvec_udot_b, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr,= i32) -DEF_HELPER_FLAGS_5(gvec_sdot_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr,= i32) -DEF_HELPER_FLAGS_5(gvec_udot_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr,= i32) -DEF_HELPER_FLAGS_5(gvec_usdot_b, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr= , i32) +DEF_HELPER_FLAGS_5(gvec_sdot_4b, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr= , i32) +DEF_HELPER_FLAGS_5(gvec_udot_4b, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr= , i32) +DEF_HELPER_FLAGS_5(gvec_sdot_4h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr= , i32) +DEF_HELPER_FLAGS_5(gvec_udot_4h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr= , i32) +DEF_HELPER_FLAGS_5(gvec_usdot_4b, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, pt= r, i32) =20 -DEF_HELPER_FLAGS_5(gvec_sdot_idx_b, TCG_CALL_NO_RWG, +DEF_HELPER_FLAGS_5(gvec_sdot_idx_4b, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, i32) -DEF_HELPER_FLAGS_5(gvec_udot_idx_b, TCG_CALL_NO_RWG, +DEF_HELPER_FLAGS_5(gvec_udot_idx_4b, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, i32) -DEF_HELPER_FLAGS_5(gvec_sdot_idx_h, TCG_CALL_NO_RWG, +DEF_HELPER_FLAGS_5(gvec_sdot_idx_4h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, i32) -DEF_HELPER_FLAGS_5(gvec_udot_idx_h, TCG_CALL_NO_RWG, +DEF_HELPER_FLAGS_5(gvec_udot_idx_4h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, i32) -DEF_HELPER_FLAGS_5(gvec_sudot_idx_b, TCG_CALL_NO_RWG, +DEF_HELPER_FLAGS_5(gvec_sudot_idx_4b, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, i32) -DEF_HELPER_FLAGS_5(gvec_usdot_idx_b, TCG_CALL_NO_RWG, +DEF_HELPER_FLAGS_5(gvec_usdot_idx_4b, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, i32) =20 DEF_HELPER_FLAGS_5(gvec_fcaddh, TCG_CALL_NO_RWG, diff --git a/target/arm/tcg/translate-a64.c b/target/arm/tcg/translate-a64.c index d823036c96f..dbf47595dbe 100644 --- a/target/arm/tcg/translate-a64.c +++ b/target/arm/tcg/translate-a64.c @@ -6114,9 +6114,9 @@ static bool do_dot_vector_env(DisasContext *s, arg_qr= rr_e *a, return true; } =20 -TRANS_FEAT(SDOT_v, aa64_dp, do_dot_vector, a, gen_helper_gvec_sdot_b) -TRANS_FEAT(UDOT_v, aa64_dp, do_dot_vector, a, gen_helper_gvec_udot_b) -TRANS_FEAT(USDOT_v, aa64_i8mm, do_dot_vector, a, gen_helper_gvec_usdot_b) +TRANS_FEAT(SDOT_v, aa64_dp, do_dot_vector, a, gen_helper_gvec_sdot_4b) +TRANS_FEAT(UDOT_v, aa64_dp, do_dot_vector, a, gen_helper_gvec_udot_4b) +TRANS_FEAT(USDOT_v, aa64_i8mm, do_dot_vector, a, gen_helper_gvec_usdot_4b) TRANS_FEAT(BFDOT_v, aa64_bf16, do_dot_vector_env, a, gen_helper_gvec_bfdot) TRANS_FEAT(BFMMLA, aa64_bf16, do_dot_vector_env, a, gen_helper_gvec_bfmmla) TRANS_FEAT(SMMLA, aa64_i8mm, do_dot_vector, a, gen_helper_gvec_smmla_b) @@ -6876,12 +6876,12 @@ static bool do_dot_vector_idx_env(DisasContext *s, = arg_qrrx_e *a, return true; } =20 -TRANS_FEAT(SDOT_vi, aa64_dp, do_dot_vector_idx, a, gen_helper_gvec_sdot_id= x_b) -TRANS_FEAT(UDOT_vi, aa64_dp, do_dot_vector_idx, a, gen_helper_gvec_udot_id= x_b) +TRANS_FEAT(SDOT_vi, aa64_dp, do_dot_vector_idx, a, gen_helper_gvec_sdot_id= x_4b) +TRANS_FEAT(UDOT_vi, aa64_dp, do_dot_vector_idx, a, gen_helper_gvec_udot_id= x_4b) TRANS_FEAT(SUDOT_vi, aa64_i8mm, do_dot_vector_idx, a, - gen_helper_gvec_sudot_idx_b) + gen_helper_gvec_sudot_idx_4b) TRANS_FEAT(USDOT_vi, aa64_i8mm, do_dot_vector_idx, a, - gen_helper_gvec_usdot_idx_b) + gen_helper_gvec_usdot_idx_4b) TRANS_FEAT(BFDOT_vi, aa64_bf16, do_dot_vector_idx_env, a, gen_helper_gvec_bfdot_idx) =20 diff --git a/target/arm/tcg/translate-neon.c b/target/arm/tcg/translate-neo= n.c index c4fecb8fd6c..ea043367976 100644 --- a/target/arm/tcg/translate-neon.c +++ b/target/arm/tcg/translate-neon.c @@ -271,7 +271,7 @@ static bool trans_VSDOT(DisasContext *s, arg_VSDOT *a) return false; } return do_neon_ddda(s, a->q * 7, a->vd, a->vn, a->vm, 0, - gen_helper_gvec_sdot_b); + gen_helper_gvec_sdot_4b); } =20 static bool trans_VUDOT(DisasContext *s, arg_VUDOT *a) @@ -280,7 +280,7 @@ static bool trans_VUDOT(DisasContext *s, arg_VUDOT *a) return false; } return do_neon_ddda(s, a->q * 7, a->vd, a->vn, a->vm, 0, - gen_helper_gvec_udot_b); + gen_helper_gvec_udot_4b); } =20 static bool trans_VUSDOT(DisasContext *s, arg_VUSDOT *a) @@ -289,7 +289,7 @@ static bool trans_VUSDOT(DisasContext *s, arg_VUSDOT *a) return false; } return do_neon_ddda(s, a->q * 7, a->vd, a->vn, a->vm, 0, - gen_helper_gvec_usdot_b); + gen_helper_gvec_usdot_4b); } =20 static bool trans_VDOT_b16(DisasContext *s, arg_VDOT_b16 *a) @@ -356,7 +356,7 @@ static bool trans_VSDOT_scalar(DisasContext *s, arg_VSD= OT_scalar *a) return false; } return do_neon_ddda(s, a->q * 6, a->vd, a->vn, a->vm, a->index, - gen_helper_gvec_sdot_idx_b); + gen_helper_gvec_sdot_idx_4b); } =20 static bool trans_VUDOT_scalar(DisasContext *s, arg_VUDOT_scalar *a) @@ -365,7 +365,7 @@ static bool trans_VUDOT_scalar(DisasContext *s, arg_VUD= OT_scalar *a) return false; } return do_neon_ddda(s, a->q * 6, a->vd, a->vn, a->vm, a->index, - gen_helper_gvec_udot_idx_b); + gen_helper_gvec_udot_idx_4b); } =20 static bool trans_VUSDOT_scalar(DisasContext *s, arg_VUSDOT_scalar *a) @@ -374,7 +374,7 @@ static bool trans_VUSDOT_scalar(DisasContext *s, arg_VU= SDOT_scalar *a) return false; } return do_neon_ddda(s, a->q * 6, a->vd, a->vn, a->vm, a->index, - gen_helper_gvec_usdot_idx_b); + gen_helper_gvec_usdot_idx_4b); } =20 static bool trans_VSUDOT_scalar(DisasContext *s, arg_VSUDOT_scalar *a) @@ -383,7 +383,7 @@ static bool trans_VSUDOT_scalar(DisasContext *s, arg_VS= UDOT_scalar *a) return false; } return do_neon_ddda(s, a->q * 6, a->vd, a->vn, a->vm, a->index, - gen_helper_gvec_sudot_idx_b); + gen_helper_gvec_sudot_idx_4b); } =20 static bool trans_VDOT_b16_scal(DisasContext *s, arg_VDOT_b16_scal *a) diff --git a/target/arm/tcg/translate-sve.c b/target/arm/tcg/translate-sve.c index 4acd22f55e8..1564ee2558f 100644 --- a/target/arm/tcg/translate-sve.c +++ b/target/arm/tcg/translate-sve.c @@ -3402,8 +3402,8 @@ DO_ZZI(UMIN, umin) #undef DO_ZZI =20 static gen_helper_gvec_4 * const dot_fns[2][2] =3D { - { gen_helper_gvec_sdot_b, gen_helper_gvec_sdot_h }, - { gen_helper_gvec_udot_b, gen_helper_gvec_udot_h } + { gen_helper_gvec_sdot_4b, gen_helper_gvec_sdot_4h }, + { gen_helper_gvec_udot_4b, gen_helper_gvec_udot_4h } }; TRANS_FEAT(DOT_zzzz, aa64_sve, gen_gvec_ool_zzzz, dot_fns[a->u][a->sz], a->rd, a->rn, a->rm, a->ra, 0) @@ -3413,18 +3413,18 @@ TRANS_FEAT(DOT_zzzz, aa64_sve, gen_gvec_ool_zzzz, */ =20 TRANS_FEAT(SDOT_zzxw_s, aa64_sve, gen_gvec_ool_arg_zzxz, - gen_helper_gvec_sdot_idx_b, a) + gen_helper_gvec_sdot_idx_4b, a) TRANS_FEAT(SDOT_zzxw_d, aa64_sve, gen_gvec_ool_arg_zzxz, - gen_helper_gvec_sdot_idx_h, a) + gen_helper_gvec_sdot_idx_4h, a) TRANS_FEAT(UDOT_zzxw_s, aa64_sve, gen_gvec_ool_arg_zzxz, - gen_helper_gvec_udot_idx_b, a) + gen_helper_gvec_udot_idx_4b, a) TRANS_FEAT(UDOT_zzxw_d, aa64_sve, gen_gvec_ool_arg_zzxz, - gen_helper_gvec_udot_idx_h, a) + gen_helper_gvec_udot_idx_4h, a) =20 TRANS_FEAT(SUDOT_zzxw_s, aa64_sve_i8mm, gen_gvec_ool_arg_zzxz, - gen_helper_gvec_sudot_idx_b, a) + gen_helper_gvec_sudot_idx_4b, a) TRANS_FEAT(USDOT_zzxw_s, aa64_sve_i8mm, gen_gvec_ool_arg_zzxz, - gen_helper_gvec_usdot_idx_b, a) + gen_helper_gvec_usdot_idx_4b, a) =20 #define DO_SVE2_RRX(NAME, FUNC) \ TRANS_FEAT(NAME, aa64_sve, gen_gvec_ool_zzz, FUNC, \ @@ -7152,7 +7152,7 @@ TRANS_FEAT(SQRDCMLAH_zzzz, aa64_sve2, gen_gvec_ool_zz= zz, sqrdcmlah_fns[a->esz], a->rd, a->rn, a->rm, a->ra, a->rot) =20 TRANS_FEAT(USDOT_zzzz, aa64_sve_i8mm, gen_gvec_ool_arg_zzzz, - a->esz =3D=3D 2 ? gen_helper_gvec_usdot_b : NULL, a, 0) + a->esz =3D=3D 2 ? gen_helper_gvec_usdot_4b : NULL, a, 0) =20 TRANS_FEAT_NONSTREAMING(AESMC, aa64_sve2_aes, gen_gvec_ool_zz, gen_helper_crypto_aesmc, a->rd, a->rd, 0) diff --git a/target/arm/tcg/vec_helper.c b/target/arm/tcg/vec_helper.c index 616f4050e47..f18d1675b50 100644 --- a/target/arm/tcg/vec_helper.c +++ b/target/arm/tcg/vec_helper.c @@ -825,11 +825,11 @@ void HELPER(NAME)(void *vd, void *vn, void *vm, void = *va, uint32_t desc) \ clear_tail(d, opr_sz, simd_maxsz(desc)); \ } =20 -DO_DOT(gvec_sdot_b, int32_t, int8_t, int8_t) -DO_DOT(gvec_udot_b, uint32_t, uint8_t, uint8_t) -DO_DOT(gvec_usdot_b, uint32_t, uint8_t, int8_t) -DO_DOT(gvec_sdot_h, int64_t, int16_t, int16_t) -DO_DOT(gvec_udot_h, uint64_t, uint16_t, uint16_t) +DO_DOT(gvec_sdot_4b, int32_t, int8_t, int8_t) +DO_DOT(gvec_udot_4b, uint32_t, uint8_t, uint8_t) +DO_DOT(gvec_usdot_4b, uint32_t, uint8_t, int8_t) +DO_DOT(gvec_sdot_4h, int64_t, int16_t, int16_t) +DO_DOT(gvec_udot_4h, uint64_t, uint16_t, uint16_t) =20 #define DO_DOT_IDX(NAME, TYPED, TYPEN, TYPEM, HD) \ void HELPER(NAME)(void *vd, void *vn, void *vm, void *va, uint32_t desc) \ @@ -865,12 +865,12 @@ void HELPER(NAME)(void *vd, void *vn, void *vm, void = *va, uint32_t desc) \ clear_tail(d, opr_sz, simd_maxsz(desc)); \ } =20 -DO_DOT_IDX(gvec_sdot_idx_b, int32_t, int8_t, int8_t, H4) -DO_DOT_IDX(gvec_udot_idx_b, uint32_t, uint8_t, uint8_t, H4) -DO_DOT_IDX(gvec_sudot_idx_b, int32_t, int8_t, uint8_t, H4) -DO_DOT_IDX(gvec_usdot_idx_b, int32_t, uint8_t, int8_t, H4) -DO_DOT_IDX(gvec_sdot_idx_h, int64_t, int16_t, int16_t, H8) -DO_DOT_IDX(gvec_udot_idx_h, uint64_t, uint16_t, uint16_t, H8) +DO_DOT_IDX(gvec_sdot_idx_4b, int32_t, int8_t, int8_t, H4) +DO_DOT_IDX(gvec_udot_idx_4b, uint32_t, uint8_t, uint8_t, H4) +DO_DOT_IDX(gvec_sudot_idx_4b, int32_t, int8_t, uint8_t, H4) +DO_DOT_IDX(gvec_usdot_idx_4b, int32_t, uint8_t, int8_t, H4) +DO_DOT_IDX(gvec_sdot_idx_4h, int64_t, int16_t, int16_t, H8) +DO_DOT_IDX(gvec_udot_idx_4h, uint64_t, uint16_t, uint16_t, H8) =20 void HELPER(gvec_fcaddh)(void *vd, void *vn, void *vm, float_status *fpst, uint32_t desc) --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647017; cv=none; d=zohomail.com; s=zohoarc; b=TyXQEOuFQ7xhiaEqalMoelnppPKYshYzuODAsGhTZIJQFvfNFUTeYFVBoryB3k1X8w7XV5TcB8CjrrlZnDYSRMSD07B0D+SrOrLdbAA/+sNANyakk/ZL2IgenXuxvv83LBmOG5dWsJSMnZT2KcLlmkh4FV00GnGfAV00XtKf8WA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647017; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=eCojNuQY4P2XhaiS4C7kcU4btBv1spfK7AgG+eFyST4=; b=WcbypVMtYDwTBJLlreIta2tgDJM7lhoLoeLycKUngEAEyLQN4CYv3o5+bZcoJGg5c9a+ZisLWEhgu7hsJVPOxnvQT9Y+YKrAroMMkQYSqSNmSqkHUApov4l5l4BX2uzJ5Fy/SoGdB0z4n+z9gbqGa0G3k1GJyt/HCG0NndKEoog= 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 1751647017376810.2402374045297; Fri, 4 Jul 2025 09:36:57 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjEt-0001XD-Kd; Fri, 04 Jul 2025 12:26:15 -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 1uXjEa-0000jl-56 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:57 -0400 Received: from mail-wr1-x42c.google.com ([2a00:1450:4864:20::42c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjEX-0006KI-Oq for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:55 -0400 Received: by mail-wr1-x42c.google.com with SMTP id ffacd0b85a97d-3a528243636so651575f8f.3 for ; Fri, 04 Jul 2025 09:25:53 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.51 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646352; x=1752251152; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=eCojNuQY4P2XhaiS4C7kcU4btBv1spfK7AgG+eFyST4=; b=VfOurZWtuKDglnOLckUTYe8G05h7rrz0a9H6E94eHdANMZm9zFaPCKHTkAWHZa8oz+ PZqsJkB8BsPjhCUWzywOJ4r/1EMuY33tnrqMq4iEiBTB7pEyrr/qXYCZqm1ikR3U0IoX NGV9WMcIWF1fYppZjELxh86jFbhhjdLoIEkiUeJViJVO1pZdOkQ7b+DlcrM6Wwc5QhPC pXmNzeD3KOz2ldSpVtidmwZPwwJbr/mV/2yIyXTVoPbNq5zycXoJbFuK4rBVKCbrP07M zpnGxIjnpLYsc5ypWifVMIRcLS98WL10y6WAyduRP/IvIk7vEPk0xuMg2F0gRCTtN6j1 /WXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646352; x=1752251152; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=eCojNuQY4P2XhaiS4C7kcU4btBv1spfK7AgG+eFyST4=; b=TMKStjnS8LSZQB40VsC23lvVW1zLxbyUpjrg18RRdEVfBA9K+yhDn2RAmzWDjVnugV ndxBfTZo0JEBHw0Smz9BDSIbzSNx1xOvvYutRsoUoocM+lxcFrtjVABjEQGDoH7x3v9p KY5fIeAPeM1PFCnJJl5CM2qplU83V67ezKqH6CsxppOed0PawX33aBFCNlok/5w8axLB 9MawKWQ5pUMJp7F21zUcEORbd4okgUQjs7TiZnqIuiztMluGiTu50MaXly2hFbEemARj BTLRkdH4Mu2n1G/iySmTyZln+BMvSsmE0UUyKfcqUGcJi3ePJj10TmbbfqPxDdEqNR8J NLZA== X-Gm-Message-State: AOJu0Yxvnp3j8UpbnDSde/LzP5lndxyIlpzj9sYwVYcQmbAEypLrdfFj wdHdoHuv8aZwlV1qrd8+42WNR/i4/n+IMkDrsnCBpErC0k93oPg6KqbBWOeAU5Chw59vcayoqa+ P2tkQ X-Gm-Gg: ASbGncuo8q6OKeLlhX6KOODwF9YYHRvfaW1NgrQKhrgsUADv/HqUAzXv+5TTyAxlwia s4Y5prpAA9DfSZjLdn+360opNOmyHPk0NGWvsjJ88U+SASF5I05Bh+yLYWAUfXrHomu1kLGcq3H pXSQIVsfVzyKkVMJqgno22FaQNSlwLISuGlvu+4TglBfZ1OT/w4bG5je0Q6GKAk5mZA/KJLOrjG MFa7m8FQ6PCSjYgrnGzynURhaxrw3yni97gw9LXHj7m4P4hfydeBDmJB6wghK5QRcuuKiqOHoO4 rsh247uhctO04ZDsM2eVn4n3nmctIV+glMWdnpr/FVQGL0xPlMIZaaF+jM+fj5AUt3wB X-Google-Smtp-Source: AGHT+IHdkqBR3O8LjyFvJlls2ZQ9RXC1mnvAPM7gOQvuSunkWaw7d+226fDZKyEjjE7U6IIFvQc7PQ== X-Received: by 2002:a05:6000:24c6:b0:3a5:7904:b959 with SMTP id ffacd0b85a97d-3b4964e9007mr2481020f8f.58.1751646351799; Fri, 04 Jul 2025 09:25:51 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 053/119] target/arm: Implemement SME2 SDOT, UDOT, USDOT, SUDOT Date: Fri, 4 Jul 2025 17:23:53 +0100 Message-ID: <20250704162501.249138-54-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::42c; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x42c.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751647024400116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell Message-id: 20250704142112.1018902-42-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/helper.h | 8 ++++ target/arm/tcg/sme.decode | 63 ++++++++++++++++++++++++- target/arm/tcg/translate-sme.c | 85 ++++++++++++++++++++++++++++++++++ target/arm/tcg/vec_helper.c | 51 ++++++++++++++++++++ 4 files changed, 206 insertions(+), 1 deletion(-) diff --git a/target/arm/tcg/helper.h b/target/arm/tcg/helper.h index a19955b872f..c4a208e3ba8 100644 --- a/target/arm/tcg/helper.h +++ b/target/arm/tcg/helper.h @@ -622,6 +622,9 @@ DEF_HELPER_FLAGS_5(gvec_sdot_4h, TCG_CALL_NO_RWG, void,= ptr, ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_5(gvec_udot_4h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr= , i32) DEF_HELPER_FLAGS_5(gvec_usdot_4b, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, pt= r, i32) =20 +DEF_HELPER_FLAGS_5(gvec_sdot_2h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr= , i32) +DEF_HELPER_FLAGS_5(gvec_udot_2h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr= , i32) + DEF_HELPER_FLAGS_5(gvec_sdot_idx_4b, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_5(gvec_udot_idx_4b, TCG_CALL_NO_RWG, @@ -635,6 +638,11 @@ DEF_HELPER_FLAGS_5(gvec_sudot_idx_4b, TCG_CALL_NO_RWG, DEF_HELPER_FLAGS_5(gvec_usdot_idx_4b, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, i32) =20 +DEF_HELPER_FLAGS_5(gvec_sdot_idx_2h, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, ptr, i32) +DEF_HELPER_FLAGS_5(gvec_udot_idx_2h, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, ptr, i32) + DEF_HELPER_FLAGS_5(gvec_fcaddh, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, fpst, i32) DEF_HELPER_FLAGS_5(gvec_fcadds, TCG_CALL_NO_RWG, diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 7c057bcad20..338637decd6 100644 --- a/target/arm/tcg/sme.decode +++ b/target/arm/tcg/sme.decode @@ -291,6 +291,26 @@ FDOT_n1 11000001 001 1 .... 0 .. 100 ..... 00 = ... @azz_nx1_o3 n=3D4 BFDOT_n1 11000001 001 0 .... 0 .. 100 ..... 10 ... @azz_nx1_o3 n= =3D2 BFDOT_n1 11000001 001 1 .... 0 .. 100 ..... 10 ... @azz_nx1_o3 n= =3D4 =20 +USDOT_n1 11000001 001 0 .... 0 .. 101 ..... 01 ... @azz_nx1_o3 n= =3D2 +USDOT_n1 11000001 001 1 .... 0 .. 101 ..... 01 ... @azz_nx1_o3 n= =3D4 + +SUDOT_n1 11000001 001 0 .... 0 .. 101 ..... 11 ... @azz_nx1_o3 n= =3D2 +SUDOT_n1 11000001 001 1 .... 0 .. 101 ..... 11 ... @azz_nx1_o3 n= =3D4 + +SDOT_n1_4b 11000001 001 0 .... 0 .. 101 ..... 00 ... @azz_nx1_o3 n= =3D2 +SDOT_n1_4b 11000001 001 1 .... 0 .. 101 ..... 00 ... @azz_nx1_o3 n= =3D4 +SDOT_n1_4h 11000001 011 0 .... 0 .. 101 ..... 00 ... @azz_nx1_o3 n= =3D2 +SDOT_n1_4h 11000001 011 1 .... 0 .. 101 ..... 00 ... @azz_nx1_o3 n= =3D4 +SDOT_n1_2h 11000001 011 0 .... 0 .. 101 ..... 01 ... @azz_nx1_o3 n= =3D2 +SDOT_n1_2h 11000001 011 1 .... 0 .. 101 ..... 01 ... @azz_nx1_o3 n= =3D4 + +UDOT_n1_4b 11000001 001 0 .... 0 .. 101 ..... 10 ... @azz_nx1_o3 n= =3D2 +UDOT_n1_4b 11000001 001 1 .... 0 .. 101 ..... 10 ... @azz_nx1_o3 n= =3D4 +UDOT_n1_4h 11000001 011 0 .... 0 .. 101 ..... 10 ... @azz_nx1_o3 n= =3D2 +UDOT_n1_4h 11000001 011 1 .... 0 .. 101 ..... 10 ... @azz_nx1_o3 n= =3D4 +UDOT_n1_2h 11000001 011 0 .... 0 .. 101 ..... 11 ... @azz_nx1_o3 n= =3D2 +UDOT_n1_2h 11000001 011 1 .... 0 .. 101 ..... 11 ... @azz_nx1_o3 n= =3D4 + ### SME2 Multi-vector Multiple Array Vectors =20 %zn_ax2 6:4 !function=3Dtimes_2 @@ -334,6 +354,23 @@ FDOT_nn 11000001 101 ...01 0 .. 100 ...00 00 .= .. @azz_4x4_o3 BFDOT_nn 11000001 101 ....0 0 .. 100 ....0 10 ... @azz_2x2_o3 BFDOT_nn 11000001 101 ...01 0 .. 100 ...00 10 ... @azz_4x4_o3 =20 +USDOT_nn 11000001 101 ....0 0 .. 101 ....0 01 ... @azz_2x2_o3 +USDOT_nn 11000001 101 ...01 0 .. 101 ...00 01 ... @azz_4x4_o3 + +SDOT_nn_4b 11000001 101 ....0 0 .. 101 ....0 00 ... @azz_2x2_o3 +SDOT_nn_4b 11000001 101 ...01 0 .. 101 ...00 00 ... @azz_4x4_o3 +SDOT_nn_4h 11000001 111 ....0 0 .. 101 ....0 00 ... @azz_2x2_o3 +SDOT_nn_4h 11000001 111 ...01 0 .. 101 ...00 00 ... @azz_4x4_o3 +SDOT_nn_2h 11000001 111 ....0 0 .. 101 ....0 01 ... @azz_2x2_o3 +SDOT_nn_2h 11000001 111 ...01 0 .. 101 ...00 01 ... @azz_4x4_o3 + +UDOT_nn_4b 11000001 101 ....0 0 .. 101 ....0 10 ... @azz_2x2_o3 +UDOT_nn_4b 11000001 101 ...01 0 .. 101 ...00 10 ... @azz_4x4_o3 +UDOT_nn_4h 11000001 111 ....0 0 .. 101 ....0 10 ... @azz_2x2_o3 +UDOT_nn_4h 11000001 111 ...01 0 .. 101 ...00 10 ... @azz_4x4_o3 +UDOT_nn_2h 11000001 111 ....0 0 .. 101 ....0 11 ... @azz_2x2_o3 +UDOT_nn_2h 11000001 111 ...01 0 .. 101 ...00 11 ... @azz_4x4_o3 + ### SME2 Multi-vector Indexed =20 &azx_n n off rv zn zm idx @@ -367,7 +404,11 @@ BFMLSL_nx 11000001 1001 .... 1 .. 1 .. ...00 11 = ... @azx_4x1_o2x2 @azx_2x1_i2_o3 ........ .... zm:4 . .. . idx:2 .... ... off:3 \ &azx_n n=3D2 rv=3D%mova_rv zn=3D%zn_ax2 @azx_4x1_i2_o3 ........ .... zm:4 . .. . idx:2 .... ... off:3 \ - &azx_n n=3D2 rv=3D%mova_rv zn=3D%zn_ax4 + &azx_n n=3D4 rv=3D%mova_rv zn=3D%zn_ax4 +@azx_2x1_i1_o3 ........ .... zm:4 . .. .. idx:1 .... ... off:3 \ + &azx_n n=3D2 rv=3D%mova_rv zn=3D%zn_ax2 +@azx_4x1_i1_o3 ........ .... zm:4 . .. .. idx:1 .... ... off:3 \ + &azx_n n=3D4 rv=3D%mova_rv zn=3D%zn_ax4 =20 FDOT_nx 11000001 0101 .... 0 .. 1 .. ....0 01 ... @azx_2x1_i2_o3 FDOT_nx 11000001 0101 .... 1 .. 1 .. ...00 01 ... @azx_4x1_i2_o3 @@ -377,3 +418,23 @@ BFDOT_nx 11000001 0101 .... 1 .. 1 .. ...00 11 = ... @azx_4x1_i2_o3 =20 FVDOT 11000001 0101 .... 0 .. 0 .. ....0 01 ... @azx_2x1_i2_o3 BFVDOT 11000001 0101 .... 0 .. 0 .. ....0 11 ... @azx_2x1_i2_o3 + +SDOT_nx_2h 11000001 0101 .... 0 .. 1 .. ....0 00 ... @azx_2x1_i2_o3 +SDOT_nx_2h 11000001 0101 .... 1 .. 1 .. ...00 00 ... @azx_4x1_i2_o3 +SDOT_nx_4b 11000001 0101 .... 0 .. 1 .. ....1 00 ... @azx_2x1_i2_o3 +SDOT_nx_4b 11000001 0101 .... 1 .. 1 .. ...01 00 ... @azx_4x1_i2_o3 +SDOT_nx_4h 11000001 1101 .... 0 .. 00 . ....0 01 ... @azx_2x1_i1_o3 +SDOT_nx_4h 11000001 1101 .... 1 .. 00 . ...00 01 ... @azx_4x1_i1_o3 + +UDOT_nx_2h 11000001 0101 .... 0 .. 1 .. ....0 10 ... @azx_2x1_i2_o3 +UDOT_nx_2h 11000001 0101 .... 1 .. 1 .. ...00 10 ... @azx_4x1_i2_o3 +UDOT_nx_4b 11000001 0101 .... 0 .. 1 .. ....1 10 ... @azx_2x1_i2_o3 +UDOT_nx_4b 11000001 0101 .... 1 .. 1 .. ...01 10 ... @azx_4x1_i2_o3 +UDOT_nx_4h 11000001 1101 .... 0 .. 00 . ....0 11 ... @azx_2x1_i1_o3 +UDOT_nx_4h 11000001 1101 .... 1 .. 00 . ...00 11 ... @azx_4x1_i1_o3 + +USDOT_nx 11000001 0101 .... 0 .. 1 .. ....1 01 ... @azx_2x1_i2_o3 +USDOT_nx 11000001 0101 .... 1 .. 1 .. ...01 01 ... @azx_4x1_i2_o3 + +SUDOT_nx 11000001 0101 .... 0 .. 1 .. ....1 11 ... @azx_2x1_i2_o3 +SUDOT_nx 11000001 0101 .... 1 .. 1 .. ...01 11 ... @azx_4x1_i2_o3 diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index 410a8d037c0..341f4495e92 100644 --- a/target/arm/tcg/translate-sme.c +++ b/target/arm/tcg/translate-sme.c @@ -962,3 +962,88 @@ static bool do_vdot(DisasContext *s, arg_azx_n *a, gen= _helper_gvec_4_ptr *fn) =20 TRANS_FEAT(FVDOT, aa64_sme, do_vdot, a, gen_helper_sme2_fvdot_idx_h) TRANS_FEAT(BFVDOT, aa64_sme, do_vdot, a, gen_helper_sme2_bfvdot_idx) + +/* + * Expand array multi-vector single (n1), array multi-vector (nn), + * and array multi-vector indexed (nx), for integer accumulate. + * multi: true for nn, false for n1. + * data: stuff for simd_data, including any index. + */ +static bool do_azz_acc(DisasContext *s, int nreg, int nsel, + int rv, int off, int zn, int zm, + int data, int shsel, bool multi, + gen_helper_gvec_4 *fn) +{ + if (sme_smza_enabled_check(s)) { + int svl =3D streaming_vec_reg_size(s); + int vstride =3D svl / nreg; + TCGv_ptr t_za =3D get_zarray(s, rv, off, nreg, nsel); + TCGv_ptr t =3D tcg_temp_new_ptr(); + + for (int r =3D 0; r < nreg; ++r) { + TCGv_ptr t_zn =3D vec_full_reg_ptr(s, zn); + TCGv_ptr t_zm =3D vec_full_reg_ptr(s, zm); + + for (int i =3D 0; i < nsel; ++i) { + int o_za =3D (r * vstride + i) * sizeof(ARMVectorReg); + int desc =3D simd_desc(svl, svl, data | (i << shsel)); + + tcg_gen_addi_ptr(t, t_za, o_za); + fn(t, t_zn, t_zm, t, tcg_constant_i32(desc)); + } + + /* + * For multiple-and-single vectors, Zn may wrap. + * For multiple vectors, both Zn and Zm are aligned. + */ + zn =3D (zn + 1) % 32; + zm +=3D multi; + } + } + return true; +} + +static bool do_dot(DisasContext *s, arg_azz_n *a, bool multi, + gen_helper_gvec_4 *fn) +{ + return do_azz_acc(s, a->n, 1, a->rv, a->off, a->zn, a->zm, + 0, 0, multi, fn); +} + +static void gen_helper_gvec_sudot_4b(TCGv_ptr d, TCGv_ptr n, TCGv_ptr m, + TCGv_ptr a, TCGv_i32 desc) +{ + gen_helper_gvec_usdot_4b(d, m, n, a, desc); +} + +TRANS_FEAT(USDOT_n1, aa64_sme2, do_dot, a, false, gen_helper_gvec_usdot_4b) +TRANS_FEAT(SUDOT_n1, aa64_sme2, do_dot, a, false, gen_helper_gvec_sudot_4b) +TRANS_FEAT(SDOT_n1_2h, aa64_sme2, do_dot, a, false, gen_helper_gvec_sdot_2= h) +TRANS_FEAT(UDOT_n1_2h, aa64_sme2, do_dot, a, false, gen_helper_gvec_udot_2= h) +TRANS_FEAT(SDOT_n1_4b, aa64_sme2, do_dot, a, false, gen_helper_gvec_sdot_4= b) +TRANS_FEAT(UDOT_n1_4b, aa64_sme2, do_dot, a, false, gen_helper_gvec_udot_4= b) +TRANS_FEAT(SDOT_n1_4h, aa64_sme2_i16i64, do_dot, a, false, gen_helper_gvec= _sdot_4h) +TRANS_FEAT(UDOT_n1_4h, aa64_sme2_i16i64, do_dot, a, false, gen_helper_gvec= _udot_4h) + +TRANS_FEAT(USDOT_nn, aa64_sme2, do_dot, a, true, gen_helper_gvec_usdot_4b) +TRANS_FEAT(SDOT_nn_2h, aa64_sme2, do_dot, a, true, gen_helper_gvec_sdot_2h) +TRANS_FEAT(UDOT_nn_2h, aa64_sme2, do_dot, a, true, gen_helper_gvec_udot_2h) +TRANS_FEAT(SDOT_nn_4b, aa64_sme2, do_dot, a, true, gen_helper_gvec_sdot_4b) +TRANS_FEAT(UDOT_nn_4b, aa64_sme2, do_dot, a, true, gen_helper_gvec_udot_4b) +TRANS_FEAT(SDOT_nn_4h, aa64_sme2_i16i64, do_dot, a, true, gen_helper_gvec_= sdot_4h) +TRANS_FEAT(UDOT_nn_4h, aa64_sme2_i16i64, do_dot, a, true, gen_helper_gvec_= udot_4h) + +static bool do_dot_nx(DisasContext *s, arg_azx_n *a, gen_helper_gvec_4 *fn) +{ + return do_azz_acc(s, a->n, 1, a->rv, a->off, a->zn, a->zm, + a->idx, 0, false, fn); +} + +TRANS_FEAT(USDOT_nx, aa64_sme2, do_dot_nx, a, gen_helper_gvec_usdot_idx_4b) +TRANS_FEAT(SUDOT_nx, aa64_sme2, do_dot_nx, a, gen_helper_gvec_sudot_idx_4b) +TRANS_FEAT(SDOT_nx_2h, aa64_sme2, do_dot_nx, a, gen_helper_gvec_sdot_idx_2= h) +TRANS_FEAT(UDOT_nx_2h, aa64_sme2, do_dot_nx, a, gen_helper_gvec_udot_idx_2= h) +TRANS_FEAT(SDOT_nx_4b, aa64_sme2, do_dot_nx, a, gen_helper_gvec_sdot_idx_4= b) +TRANS_FEAT(UDOT_nx_4b, aa64_sme2, do_dot_nx, a, gen_helper_gvec_udot_idx_4= b) +TRANS_FEAT(SDOT_nx_4h, aa64_sme2_i16i64, do_dot_nx, a, gen_helper_gvec_sdo= t_idx_4h) +TRANS_FEAT(UDOT_nx_4h, aa64_sme2_i16i64, do_dot_nx, a, gen_helper_gvec_udo= t_idx_4h) diff --git a/target/arm/tcg/vec_helper.c b/target/arm/tcg/vec_helper.c index f18d1675b50..baea6d8b894 100644 --- a/target/arm/tcg/vec_helper.c +++ b/target/arm/tcg/vec_helper.c @@ -872,6 +872,57 @@ DO_DOT_IDX(gvec_usdot_idx_4b, int32_t, uint8_t, int8_t= , H4) DO_DOT_IDX(gvec_sdot_idx_4h, int64_t, int16_t, int16_t, H8) DO_DOT_IDX(gvec_udot_idx_4h, uint64_t, uint16_t, uint16_t, H8) =20 +#undef DO_DOT +#undef DO_DOT_IDX + +/* Similar for 2-way dot product */ +#define DO_DOT(NAME, TYPED, TYPEN, TYPEM) \ +void HELPER(NAME)(void *vd, void *vn, void *vm, void *va, uint32_t desc) \ +{ \ + intptr_t i, opr_sz =3D simd_oprsz(desc); = \ + TYPED *d =3D vd, *a =3D va; = \ + TYPEN *n =3D vn; = \ + TYPEM *m =3D vm; = \ + for (i =3D 0; i < opr_sz / sizeof(TYPED); ++i) { = \ + d[i] =3D (a[i] + = \ + (TYPED)n[i * 2 + 0] * m[i * 2 + 0] + \ + (TYPED)n[i * 2 + 1] * m[i * 2 + 1]); \ + } \ + clear_tail(d, opr_sz, simd_maxsz(desc)); \ +} + +#define DO_DOT_IDX(NAME, TYPED, TYPEN, TYPEM, HD) \ +void HELPER(NAME)(void *vd, void *vn, void *vm, void *va, uint32_t desc) \ +{ \ + intptr_t i =3D 0, opr_sz =3D simd_oprsz(desc); = \ + intptr_t opr_sz_n =3D opr_sz / sizeof(TYPED); = \ + intptr_t segend =3D MIN(16 / sizeof(TYPED), opr_sz_n); = \ + intptr_t index =3D simd_data(desc); = \ + TYPED *d =3D vd, *a =3D va; = \ + TYPEN *n =3D vn; = \ + TYPEM *m_indexed =3D (TYPEM *)vm + HD(index) * 2; = \ + do { \ + TYPED m0 =3D m_indexed[i * 2 + 0]; = \ + TYPED m1 =3D m_indexed[i * 2 + 1]; = \ + do { \ + d[i] =3D (a[i] + = \ + n[i * 2 + 0] * m0 + \ + n[i * 2 + 1] * m1); \ + } while (++i < segend); \ + segend =3D i + (16 / sizeof(TYPED)); = \ + } while (i < opr_sz_n); \ + clear_tail(d, opr_sz, simd_maxsz(desc)); \ +} + +DO_DOT(gvec_sdot_2h, int32_t, int16_t, int16_t) +DO_DOT(gvec_udot_2h, uint32_t, uint16_t, uint16_t) + +DO_DOT_IDX(gvec_sdot_idx_2h, int32_t, int16_t, int16_t, H4) +DO_DOT_IDX(gvec_udot_idx_2h, uint32_t, uint16_t, uint16_t, H4) + +#undef DO_DOT +#undef DO_DOT_IDX + void HELPER(gvec_fcaddh)(void *vd, void *vn, void *vm, float_status *fpst, uint32_t desc) { --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647315; cv=none; d=zohomail.com; s=zohoarc; b=eh0oA1ciciKrwoppV11QEFiLSG53Q+SOIKRxTKxLWLzbW2i24OeVkDLqYKQAr6dwhXZBoSJXp4y8HLYZIKgPc/L8hwcQVam3mJMCeQn+FfHd4NB3U+4w2CiKIFQSebswVLwJhbESNU8d4KdsSOetv25TkJ6xba150LTN1mSwxgo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647315; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=w//E3dZM/eISgvGQ8pSH7I6/nrwzye8WLd/7oG6rLcM=; b=N0JSjDp8LeZ45xV7v350j1wqZWDmYKneAbQckSDpbfkWd8WCfff9kJqRaQaNwiGuMc/eTFZ/OAuOdxnY3PrcnKQj6ieTWuLg6gJPz4CNwmBXLJL8Glea/HC3YRBbDzCnP/OHrNMQHxBJ9lc0H9OmH5xGlbiEXMrEVp8U8BI3dtA= 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 1751647315723117.98670673089919; Fri, 4 Jul 2025 09:41:55 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjEy-0001r1-47; Fri, 04 Jul 2025 12:26:20 -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 1uXjEZ-0000jj-Np for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:57 -0400 Received: from mail-wr1-x433.google.com ([2a00:1450:4864:20::433]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjEY-0006KU-3g for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:55 -0400 Received: by mail-wr1-x433.google.com with SMTP id ffacd0b85a97d-3a4ef2c2ef3so920018f8f.2 for ; Fri, 04 Jul 2025 09:25:53 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.51 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646353; x=1752251153; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=w//E3dZM/eISgvGQ8pSH7I6/nrwzye8WLd/7oG6rLcM=; b=oCUc6AMVEdhvfnfgooHCSsyfJGtiT3jVxi7Ss/xlNIZs4DhnZodw3h4zT4DYGgpSCu i93maaa2PS63IaxIdSBZYmZXvsp/B8PyDlvg+Ly1s3uBpn4JqRXfCqRiAgOWr+sSLbkB lBBxQ9UmSpUkpEEo+5/BxGdqaEHH/40b1B3RU5bCDjCHoLiGKx9rBpEduIjqQyJOLl4f 90gOB9JjTOAyC7vioJhqc49+XhR3FyHgUQdelY66rx+2qrouQ2Jv60TY/T9L9HV2JRnX BWQKsgvyF/N066+G1EdZRNyWz34OB1L6eUY66Pm0cig0WxfGOnE9m16HmmfPOqlrTKTF ZtSQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646353; x=1752251153; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=w//E3dZM/eISgvGQ8pSH7I6/nrwzye8WLd/7oG6rLcM=; b=v35ieTqNdb12eck5CNsOkUcKt/nAYZHg2PZL1s1iCGaz3ubZ2A+a9iaHywuPHe609F X5WFfTtV9M67RqAchrdZd/JzecNWiZi422QsJHo4Rr8KPkeeSVtMZUoYi+ymjjcNfJst Rj2m7+v7J/OeeibhGwOg/Kfa+RGClb+ZfFxnLveymjk7fkzFUK/o2eErzoR58MROUCv6 KcRfVbIv7naGXkM965Sc946tDk9x8SIj1NmQDrFEeVDRjRDqe3i6GYO22Jh4n9fHPf/B qec4lffDe4nGTgcb+vrldYgJOoIIPZPqqKSL76ua3ZwkmGC0n/Pcu0M/8iLjdlgytikU 9R9A== X-Gm-Message-State: AOJu0YwTXq6QAeE3T1vCI/8BAsH0yYfEPWo7PAHb7Dqh+1X01INGL9tw O5SSnxdwqSZGJj7w52WgQo/Q5sMJwHk1JdGRsw+MrRISt7LF+VGjpOhXhBi51Si2iyO30Y3XfbA opbyo X-Gm-Gg: ASbGncuyf1AI/GWZTRNU0pqVOjcxwQgtu6xboTZhUj2NfzvpU9WJ/3YLBb79QTATVsp f9mW36qbu9OMyIUaVkjo10jxtd7tpeNwkQTiBOf1HHBEb66wSVrMFBcIvv9UD2D9el/UwUWzH/4 ipfmHZyQD4pyyb5123XMNR1DbqXFWk2lRlISK/iQ34ml0vtB+e3hkcZa53xtjI/IZ9+Hr4S3glK dyj8Lm78l6Trq670X8SZnB+1SA4QJYi5svOo3xnDkxfa3yYylA2GKqaXPDD6xfjK4k1Jnbr2UCV ds5KFShOPX8fMpwBzDaAwFmqCx80pxuk+PKpcmJWD5NExInzfeGbDkyd8qKRDi8SdqUD X-Google-Smtp-Source: AGHT+IHuE1FNPhyijRG8UWJNkk/rsVxr+VXlPmVMzWw/eDcs0Y6aenioHqFYwdSu9gubfEihqVCx7w== X-Received: by 2002:a05:6000:4807:b0:3a6:ec1d:1cba with SMTP id ffacd0b85a97d-3b4970103a8mr2127408f8f.20.1751646352643; Fri, 04 Jul 2025 09:25:52 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 054/119] target/arm: Rename SVE SDOT and UDOT patterns Date: Fri, 4 Jul 2025 17:23:54 +0100 Message-ID: <20250704162501.249138-55-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::433; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x433.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751647317745116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Emphasize the 4-way nature of these dot products. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-43-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/sve.decode | 12 ++++++------ target/arm/tcg/translate-sve.c | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/target/arm/tcg/sve.decode b/target/arm/tcg/sve.decode index 5970ed9ac49..51847ea56ee 100644 --- a/target/arm/tcg/sve.decode +++ b/target/arm/tcg/sve.decode @@ -851,10 +851,10 @@ CDOT_zzzz 01000100 esz:2 0 rm:5 0001 rot:2 rn:5= rd:5 ra=3D%reg_movprfx #### SVE Multiply - Indexed =20 # SVE integer dot product (indexed) -SDOT_zzxw_s 01000100 10 1 ..... 000000 ..... ..... @rrxr_2 esz=3D2 -SDOT_zzxw_d 01000100 11 1 ..... 000000 ..... ..... @rrxr_1 esz=3D3 -UDOT_zzxw_s 01000100 10 1 ..... 000001 ..... ..... @rrxr_2 esz=3D2 -UDOT_zzxw_d 01000100 11 1 ..... 000001 ..... ..... @rrxr_1 esz=3D3 +SDOT_zzxw_4s 01000100 10 1 ..... 000000 ..... ..... @rrxr_2 esz=3D2 +SDOT_zzxw_4d 01000100 11 1 ..... 000000 ..... ..... @rrxr_1 esz=3D3 +UDOT_zzxw_4s 01000100 10 1 ..... 000001 ..... ..... @rrxr_2 esz=3D2 +UDOT_zzxw_4d 01000100 11 1 ..... 000001 ..... ..... @rrxr_1 esz=3D3 =20 # SVE2 integer multiply-add (indexed) MLA_zzxz_h 01000100 0. 1 ..... 000010 ..... ..... @rrxr_3 esz=3D1 @@ -873,8 +873,8 @@ SQRDMLSH_zzxz_s 01000100 10 1 ..... 000101 ..... ..... = @rrxr_2 esz=3D2 SQRDMLSH_zzxz_d 01000100 11 1 ..... 000101 ..... ..... @rrxr_1 esz=3D3 =20 # SVE mixed sign dot product (indexed) -USDOT_zzxw_s 01000100 10 1 ..... 000110 ..... ..... @rrxr_2 esz=3D2 -SUDOT_zzxw_s 01000100 10 1 ..... 000111 ..... ..... @rrxr_2 esz=3D2 +USDOT_zzxw_4s 01000100 10 1 ..... 000110 ..... ..... @rrxr_2 esz=3D2 +SUDOT_zzxw_4s 01000100 10 1 ..... 000111 ..... ..... @rrxr_2 esz=3D2 =20 # SVE2 saturating multiply-add (indexed) SQDMLALB_zzxw_s 01000100 10 1 ..... 0010.0 ..... ..... @rrxr_3a esz=3D2 diff --git a/target/arm/tcg/translate-sve.c b/target/arm/tcg/translate-sve.c index 1564ee2558f..56353b3bb4d 100644 --- a/target/arm/tcg/translate-sve.c +++ b/target/arm/tcg/translate-sve.c @@ -3412,18 +3412,18 @@ TRANS_FEAT(DOT_zzzz, aa64_sve, gen_gvec_ool_zzzz, * SVE Multiply - Indexed */ =20 -TRANS_FEAT(SDOT_zzxw_s, aa64_sve, gen_gvec_ool_arg_zzxz, +TRANS_FEAT(SDOT_zzxw_4s, aa64_sve, gen_gvec_ool_arg_zzxz, gen_helper_gvec_sdot_idx_4b, a) -TRANS_FEAT(SDOT_zzxw_d, aa64_sve, gen_gvec_ool_arg_zzxz, +TRANS_FEAT(SDOT_zzxw_4d, aa64_sve, gen_gvec_ool_arg_zzxz, gen_helper_gvec_sdot_idx_4h, a) -TRANS_FEAT(UDOT_zzxw_s, aa64_sve, gen_gvec_ool_arg_zzxz, +TRANS_FEAT(UDOT_zzxw_4s, aa64_sve, gen_gvec_ool_arg_zzxz, gen_helper_gvec_udot_idx_4b, a) -TRANS_FEAT(UDOT_zzxw_d, aa64_sve, gen_gvec_ool_arg_zzxz, +TRANS_FEAT(UDOT_zzxw_4d, aa64_sve, gen_gvec_ool_arg_zzxz, gen_helper_gvec_udot_idx_4h, a) =20 -TRANS_FEAT(SUDOT_zzxw_s, aa64_sve_i8mm, gen_gvec_ool_arg_zzxz, +TRANS_FEAT(SUDOT_zzxw_4s, aa64_sve_i8mm, gen_gvec_ool_arg_zzxz, gen_helper_gvec_sudot_idx_4b, a) -TRANS_FEAT(USDOT_zzxw_s, aa64_sve_i8mm, gen_gvec_ool_arg_zzxz, +TRANS_FEAT(USDOT_zzxw_4s, aa64_sve_i8mm, gen_gvec_ool_arg_zzxz, gen_helper_gvec_usdot_idx_4b, a) =20 #define DO_SVE2_RRX(NAME, FUNC) \ --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646448; cv=none; d=zohomail.com; s=zohoarc; b=LyQXDBPKHhhHgfYBkh6DLMUXzr1jvamM0I9IFHx1uuVr7dCdLJQBM5F69ZVy3V+V+tTyE+Ok7+sPlHujgLxTxftYQQ7GHzxRdSbcf+FexCXqDxDUi9c+gOk4oyr+yhQnzP5tWvP6NuTeffvhbwUhIb0rS1DRDA9rzieBaYFnFvo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646448; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=BGvcMzw2YbNb+RRs5hQKU9iqoYKiVi3qTy/vHNGYSOo=; b=GKkNL9Ojy4mDLSO8y+bQ9vnITTe0sfuFa1fA3CHPYcgXvzrv53zD6wBLtFxJ1H5nHsoW6l7MoeAM7laWoDWMrnRGAyWiu2/xHrwkFknYIQvj3id84SHn4RDIzCwXxa6sMQwkjt4ICS18BGc+nkCFBb2vo/07/IP6fq0aMywdPlE= 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 1751646448716214.3278193448789; Fri, 4 Jul 2025 09:27:28 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjEg-000134-RY; Fri, 04 Jul 2025 12:26:02 -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 1uXjEb-0000mh-6N for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:57 -0400 Received: from mail-wr1-x435.google.com ([2a00:1450:4864:20::435]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjEZ-0006Ok-Hs for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:56 -0400 Received: by mail-wr1-x435.google.com with SMTP id ffacd0b85a97d-3a525eee2e3so690668f8f.2 for ; Fri, 04 Jul 2025 09:25:55 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.52 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646354; x=1752251154; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=BGvcMzw2YbNb+RRs5hQKU9iqoYKiVi3qTy/vHNGYSOo=; b=ggDc4wjdwz7lSRXRyf6aO20DziiQgjjHpZn+MRk+YzOlAgsvwXfN83bOs2FdshdNlr upQb5SAeY+yHH3If7COaavTEntQBYw/RP6BWikP6ZtwuXyhDf0YlzBZ0XAoKoWKymy7p Y98zvDlmb7gioVZ2/dzcn3kGNHKnaFyEWIn105KzHq4ixEPrbDPPrFIeJ4vmZKtdTdAI P1+txm2Jf08R9DMGk0gVGdsMlKSofJY7k2sY5nIR9Sfm1mOR9NToecJJ+Xsw16/Evy8p Fh0M2GbcLJTI2RdOqhI1W2gmaVca24JuMio1cA8OuY9HKOchb4rqczNk+0Yzib7ujdBf EUbg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646354; x=1752251154; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=BGvcMzw2YbNb+RRs5hQKU9iqoYKiVi3qTy/vHNGYSOo=; b=SBenJaz97fae1oi4Nrl9MnV3biddwLNNlqE8Tm9tRtMY3s42Zw/FZVbrAFcDErPpGl p1zggGyz0+x4cqGV/D0iHUcBRUGfHKWRQCAIM9AXEYcHumW6iYZ3syutoH35jXPBnj/E 6L31i/qlLag5QHNJqCzamct33p7Mtr/gBfwY9AZziqLIyBftkiSDNIFPSnmFX/GxXxJ7 SmT+xnqYNSY1GvNFIZvmWDMPkZkMCBeXDQSS2zFCgyVYhFMTTbBti9iOvq4ZpcrJlObh fBEVvy+3aajBRZZeos1IX8Cq4+n6pQFy4dHkR/P56xla2eJpfVOSd13FAewrGWJpV8u0 28sQ== X-Gm-Message-State: AOJu0YyU/HKch41ifHM6EqIkmfPTNPNI7khuKix9q6AHpitBPXbFH4Xn 4FMRRSk+PKQdKENg1uERnKrFDiebYL5tUrQcKDYqoMISCVrQR/1Y35FcjbpOblE2nXlwRtK1vFJ ZBWr+ X-Gm-Gg: ASbGncucVyWZRH5PvXznjbokbbwCFFju/jbVO+fIy3bGewishJn1NN05PmO4UArt0Y0 2UrzPyRod0wtgIR7PaGd4vZSkoKARL5J9gGkB37PKy6/BScLmmgfn/BGBwcqy8+llt3cUGljBUZ 24uvaLEJScpEgrEoAPMw28/exmk6eFgX5HMS2RBsiKWgiHubLsNLnM0zmWJUZyzIPDAr0W0jmf4 Yex8L2xsVynlJkkOZr21TVbB0mdtpuhnppAOkktOR97dEW5zZ2ua3fozBp3HWnrODE+dPT6htcY 5Fie5MKPvSHrn0vbBZjtyJpt83oQSdBl3WmDYfO18+YBphgn/e0s4/tyUycNHVld1zng X-Google-Smtp-Source: AGHT+IHqo9LmruOvPVe+kg4ssB7D8ZvFpJW58+fUYzHC/BVgItOM8Iq6mqXwNdcoR/ZLuUjgAH1R5Q== X-Received: by 2002:a05:6000:2509:b0:3a4:e665:ca5 with SMTP id ffacd0b85a97d-3b4964c5f00mr2724873f8f.23.1751646354216; Fri, 04 Jul 2025 09:25:54 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 055/119] target/arm: Tighten USDOT (vectors) decode Date: Fri, 4 Jul 2025 17:23:55 +0100 Message-ID: <20250704162501.249138-56-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::435; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x435.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751646449221116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Rename to USDOT_zzzz_4s and force size=3D2 during decode. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-44-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/sve.decode | 2 +- target/arm/tcg/translate-sve.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/target/arm/tcg/sve.decode b/target/arm/tcg/sve.decode index 51847ea56ee..401c0258527 100644 --- a/target/arm/tcg/sve.decode +++ b/target/arm/tcg/sve.decode @@ -1599,7 +1599,7 @@ SQRDCMLAH_zzzz 01000100 esz:2 0 rm:5 0011 rot:2 rn:5= rd:5 ra=3D%reg_movprfx =20 ## SVE mixed sign dot product =20 -USDOT_zzzz 01000100 .. 0 ..... 011 110 ..... ..... @rda_rn_rm +USDOT_zzzz_4s 01000100 10 0 ..... 011 110 ..... ..... @rda_rn_rm_ex esz= =3D2 =20 ### SVE2 floating point matrix multiply accumulate BFMMLA 01100100 01 1 ..... 111 001 ..... ..... @rda_rn_rm_ex esz= =3D1 diff --git a/target/arm/tcg/translate-sve.c b/target/arm/tcg/translate-sve.c index 56353b3bb4d..c82a0f771db 100644 --- a/target/arm/tcg/translate-sve.c +++ b/target/arm/tcg/translate-sve.c @@ -7151,8 +7151,8 @@ static gen_helper_gvec_4 * const sqrdcmlah_fns[] =3D { TRANS_FEAT(SQRDCMLAH_zzzz, aa64_sve2, gen_gvec_ool_zzzz, sqrdcmlah_fns[a->esz], a->rd, a->rn, a->rm, a->ra, a->rot) =20 -TRANS_FEAT(USDOT_zzzz, aa64_sve_i8mm, gen_gvec_ool_arg_zzzz, - a->esz =3D=3D 2 ? gen_helper_gvec_usdot_4b : NULL, a, 0) +TRANS_FEAT(USDOT_zzzz_4s, aa64_sve_i8mm, gen_gvec_ool_arg_zzzz, + gen_helper_gvec_usdot_4b, a, 0) =20 TRANS_FEAT_NONSTREAMING(AESMC, aa64_sve2_aes, gen_gvec_ool_zz, gen_helper_crypto_aesmc, a->rd, a->rd, 0) --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646504; cv=none; d=zohomail.com; s=zohoarc; b=SZ+5utSxndqGXUzKTwhdLHuOWD3HPvgSGZGFnij1ZRUN2LS32UXm4jH6VinWWDZ64P6CEy1YcqR4pxys8I4mKQn+i2GJLSU2cQSmxe8Ds3mk2xr2dkWrcXphJVu2m2J7DSpz0RHOBk8h1XT0WTb+BSQfWAFYm+PoIkjPOhRYu2c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646504; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=fVDc3p3jv4yhzpySWv3CyUmaJfMI96VhimJBf6J5LIo=; b=Qc1xxlhKgr1INhNKWsARsCOMILiIj8mYJ+BknjXJFOZeEH5SsbJuBEBIL8eZ66z3BhaGXlZFFo+WMqs1YKC2ArP1U12HmntHtjNaZiw43gGNuvdgCfqJO8HhCQ4HlYzpBKEANtSbXArWD7Cpb0ndJ1h0jPDxOm1HJ7kmSYG3sVc= 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 1751646504944967.3326343162944; Fri, 4 Jul 2025 09:28:24 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjEh-00013h-Je; Fri, 04 Jul 2025 12:26:03 -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 1uXjEc-0000oL-Dc for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:59 -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 1uXjEa-0006Oz-Md for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:58 -0400 Received: by mail-wr1-x42a.google.com with SMTP id ffacd0b85a97d-3b45edf2303so1014987f8f.2 for ; Fri, 04 Jul 2025 09:25:56 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.54 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646355; x=1752251155; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=fVDc3p3jv4yhzpySWv3CyUmaJfMI96VhimJBf6J5LIo=; b=noW6Z7WiaEaKj2+MgnPmCxQLEfihW1OIup/SZzCjj7LqfY+r4mYVJr2qUAy7TZ1Nlb eONTU1+QfvY22+RiV/m7RQoXUvsMnMpPfTMDpVxwe51kp/Nw4bF6Hloqev3X81MYclw4 svMP8zNF1OywUc8t9o89oeG9UVh9VOVMJ2HacjTjB16bU710cVj3Vh8nVj2Ni8taSo/k vv0ytynMb8xpwe19YJrv6cdxF+e6hmflcrPYbOcjioN6Tcuuh7LKod7MwxgqvDPbf765 dXA7CMo4DxiYTIy0c6Xk1BxZg/31vm2rGRxp3eZdRnxTDnJfcbxwkjnEwhCSPpjavylm GWJA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646355; x=1752251155; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=fVDc3p3jv4yhzpySWv3CyUmaJfMI96VhimJBf6J5LIo=; b=DlzEWzoCYPYAavesd8xQlB0H6F4afHII6hT2rmmy6BeLK9Hmpp2AWkN3b9PCbtVM3Y vsP9FDwIWkzYBGkOhAODXdob8Jrp45+XT1eVg4u1WBcH3XoNBSAy1bXbuLt6YNIDS3HR ziVN8uxo2rrQKuP2ZbGN6ayJBc/D/aIdfhICkPaJQOdLAIJgW9oCQjpHEzg/o0dar86L EboPmwzMR0d0r4cOQIj+zhT2QZz1TLsmdkg84WFY2ZU5eGCpVscMdKeM83vIb3HDdzEF 2patJ3abwWmwjUIpP/+Y+6iXs54HnOJLsMJcAJDQpCFwFNlYEilWD861eMEOVKdADzMM SQ3g== X-Gm-Message-State: AOJu0Yz5MY5tU6tVcCg0XduG6FgzLcggQPqbCx89qU+O4ne5UpGXMAQl NY7ZvxmvrnpxJZjc7nOr391c60QpyebeVvcOuMuyWxclJs95bh+xsrUKGxTvxrf2XUCR46uFASb HNB8P X-Gm-Gg: ASbGnct7TNAvZOEY+33lhdoG8ouHgT6h+hG5BG27wAyVxKDt4Sw1Z+Z5FKw0Bmj0Ndi Lj055gk8wrJdrF/U37wkk8ADFFlEhAAeNkVSbj8l+rMrg+mVXPB0ROc+7k9NJZSGGpk+gU/y/zh n/cKCDTUWyI4QGXWyASw0Dm5eiWvN9pGxRxocd/o0qEoJi02jwj1Av558bgGqGclODtAZkVQYPw sF5OrDeq5kIfIzaGwF3gY94EGX7hg52I75nHhYX5XVDkCp91hyhMmx6o9a4+kEC9J0cvMq/1W3F 780jHyYu9PdhTOlzpKaqGcF9ZA8l1pVl+a3rgRABZADDq/Vh1oUrXfwgl9DVb2X55xGLY8e4Mox 66yo= X-Google-Smtp-Source: AGHT+IE8IpVZbnlgvRgxThA6PiixBaw2TvzuOG6oS2cjRg8Sj2a9W3eDUNxiI5gWim+GT63h7z/qxw== X-Received: by 2002:a05:6000:11d2:b0:3a5:39d5:d962 with SMTP id ffacd0b85a97d-3b496604c41mr2605343f8f.41.1751646355082; Fri, 04 Jul 2025 09:25:55 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 056/119] target/arm: Implement SDOT, UDOT (2-way) for SME2/SVE2p1 Date: Fri, 4 Jul 2025 17:23:56 +0100 Message-ID: <20250704162501.249138-57-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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=peter.maydell@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 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: 1751646506037116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-45-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/sve.decode | 8 +++++++- target/arm/tcg/translate-sve.c | 10 ++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/target/arm/tcg/sve.decode b/target/arm/tcg/sve.decode index 401c0258527..83c259def6e 100644 --- a/target/arm/tcg/sve.decode +++ b/target/arm/tcg/sve.decode @@ -856,6 +856,9 @@ SDOT_zzxw_4d 01000100 11 1 ..... 000000 ..... ..... = @rrxr_1 esz=3D3 UDOT_zzxw_4s 01000100 10 1 ..... 000001 ..... ..... @rrxr_2 esz=3D2 UDOT_zzxw_4d 01000100 11 1 ..... 000001 ..... ..... @rrxr_1 esz=3D3 =20 +SDOT_zzxw_2s 01000100 10 0 ..... 110010 ..... ..... @rrxr_2 esz=3D2 +UDOT_zzxw_2s 01000100 10 0 ..... 110011 ..... ..... @rrxr_2 esz=3D2 + # SVE2 integer multiply-add (indexed) MLA_zzxz_h 01000100 0. 1 ..... 000010 ..... ..... @rrxr_3 esz=3D1 MLA_zzxz_s 01000100 10 1 ..... 000010 ..... ..... @rrxr_2 esz=3D2 @@ -1597,7 +1600,10 @@ UMLSLT_zzzw 01000100 .. 0 ..... 010 111 ..... ..= ... @rda_rn_rm CMLA_zzzz 01000100 esz:2 0 rm:5 0010 rot:2 rn:5 rd:5 ra=3D%reg_movp= rfx SQRDCMLAH_zzzz 01000100 esz:2 0 rm:5 0011 rot:2 rn:5 rd:5 ra=3D%reg_movp= rfx =20 -## SVE mixed sign dot product +## SVE dot product + +SDOT_zzzz_2s 01000100 00 0 ..... 110 010 ..... ..... @rda_rn_rm_ex esz= =3D2 +UDOT_zzzz_2s 01000100 00 0 ..... 110 011 ..... ..... @rda_rn_rm_ex esz= =3D2 =20 USDOT_zzzz_4s 01000100 10 0 ..... 011 110 ..... ..... @rda_rn_rm_ex esz= =3D2 =20 diff --git a/target/arm/tcg/translate-sve.c b/target/arm/tcg/translate-sve.c index c82a0f771db..10261e25f92 100644 --- a/target/arm/tcg/translate-sve.c +++ b/target/arm/tcg/translate-sve.c @@ -3426,6 +3426,11 @@ TRANS_FEAT(SUDOT_zzxw_4s, aa64_sve_i8mm, gen_gvec_oo= l_arg_zzxz, TRANS_FEAT(USDOT_zzxw_4s, aa64_sve_i8mm, gen_gvec_ool_arg_zzxz, gen_helper_gvec_usdot_idx_4b, a) =20 +TRANS_FEAT(SDOT_zzxw_2s, aa64_sme2_or_sve2p1, gen_gvec_ool_arg_zzxz, + gen_helper_gvec_sdot_idx_2h, a) +TRANS_FEAT(UDOT_zzxw_2s, aa64_sme2_or_sve2p1, gen_gvec_ool_arg_zzxz, + gen_helper_gvec_udot_idx_2h, a) + #define DO_SVE2_RRX(NAME, FUNC) \ TRANS_FEAT(NAME, aa64_sve, gen_gvec_ool_zzz, FUNC, \ a->rd, a->rn, a->rm, a->index) @@ -7154,6 +7159,11 @@ TRANS_FEAT(SQRDCMLAH_zzzz, aa64_sve2, gen_gvec_ool_z= zzz, TRANS_FEAT(USDOT_zzzz_4s, aa64_sve_i8mm, gen_gvec_ool_arg_zzzz, gen_helper_gvec_usdot_4b, a, 0) =20 +TRANS_FEAT(SDOT_zzzz_2s, aa64_sme2_or_sve2p1, gen_gvec_ool_arg_zzzz, + gen_helper_gvec_sdot_2h, a, 0) +TRANS_FEAT(UDOT_zzzz_2s, aa64_sme2_or_sve2p1, gen_gvec_ool_arg_zzzz, + gen_helper_gvec_udot_2h, a, 0) + TRANS_FEAT_NONSTREAMING(AESMC, aa64_sve2_aes, gen_gvec_ool_zz, gen_helper_crypto_aesmc, a->rd, a->rd, 0) TRANS_FEAT_NONSTREAMING(AESIMC, aa64_sve2_aes, gen_gvec_ool_zz, --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647110; cv=none; d=zohomail.com; s=zohoarc; b=hd/uh9aYwXi80f25SKAd/dE8eYvFuu5nxVhv5eKtvNnQBZyf9ykQouB4R8QpHjsOehVgBI9q66JnWGDdLQvGQl0FQ+yRe4AKav5YtO2Bo/595M7ESX4IoMz4e6Oogm8lekfMHRqD7gAGW9Er15CKqwH+ILlqfwLW5TWQKjt4GX0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647110; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=alK3uxpB9fD9dcl1bRliEs1QlpejJNntl6nN63sqGLs=; b=U2RLVrhLZczzvjfItrGdrZBcSB/X2W7Tx9huw/U82ydEfmn9xQ2DaXYpXbscsUKwjzGfCae53uWbAAnAEsz+w4Vg6Yvy0eNcegGXG3+YVyGd1MoWDCivupF+AMsngLUy/UnTGHI1RgJZr9Fntrxpo8tNt94m4S2E/4zJDs3rxB0= 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 1751647110344774.1787529442902; Fri, 4 Jul 2025 09:38:30 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjEp-0001Qm-Oj; Fri, 04 Jul 2025 12:26:12 -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 1uXjEd-0000qA-Gq for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:59 -0400 Received: from mail-wr1-x433.google.com ([2a00:1450:4864:20::433]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjEb-0006Pd-HK for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:25:59 -0400 Received: by mail-wr1-x433.google.com with SMTP id ffacd0b85a97d-3a52874d593so927243f8f.0 for ; Fri, 04 Jul 2025 09:25:57 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.55 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646356; x=1752251156; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=alK3uxpB9fD9dcl1bRliEs1QlpejJNntl6nN63sqGLs=; b=ttj8B0A4qQkZn/KldiS0TmMFGLPLzsd/ILX1JgvA9b/OKf5dn74gBnrkOt7SO4j58G 31Ejjz0DIOMmiES89X6pWNqyjEsT7loK8IKhb6RYdOsnhT/ndAFJMZ3ENobJOSSL5Lfo JEoES9+rj5raReb70qwzGTYEBVOjHXhGnYp+FNUzu/0UxnLZdTAWol8MjrgjURAEJ3Ck MNep6okbIh1+JJQH54064te+OFSrXsE//ns9BznjxpfLZ7xVIbQoPlQwLvMnvOxWYU1J 0lWJSG+4xqbRs2tZUDptA96IfE0uYl3ODUIEpiqqVJFI1jWv/sIjB7dAXbo1+r+Ek/1L v0Fg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646356; x=1752251156; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=alK3uxpB9fD9dcl1bRliEs1QlpejJNntl6nN63sqGLs=; b=X77J677KXcHU2dHztPHkqRnwocDGpF5/SbMKfB6HXCUUwhzTucm9YpThoZrxAdyv3G 4pMI/1LpJopm3iAReITlYKgWtgc2hedGlP7GQuuoRnrfNyD8beqhDxkHCznsFOXh6bg8 4RjeM9FDt2shv+6KBhkoEadDO5tSGlt03H/d/TVPn4pKXkINLV7b4xxuTxciPSuCvWGq eMkA6XYxl+Yf1XC3FWZ/w2xEZ3o7fc89iDKH/ZOvFOfkv+RR1g5iYwVC4+acAbK/KQaW yxe9FcoK1xbOix0MvpJctHjViqwpgycM29o/rQUxpvg3NVdPSHVwzaSSborGb4AHUPvx yBKQ== X-Gm-Message-State: AOJu0Yw/NeWuurybTNWu0fpckIOnPBCyNTbLtQ1JsoTqlYbQX50+jmtk jYbfTa1BKC3IouXGBCz+5Brif/2E2x01vpmedahKtuo1NJMLbPn0Ln0mIxEPe/krJ0X77c2bMfC XDVMb X-Gm-Gg: ASbGncupS5Lm+hWu5hZcR/bUKJ2QCmEOzCedddDvwOky7/b0zPtF0UzVyqae9FfLRVL B9D0TM8B/ExcQcGLqc4ReIomNVXwAxp/c17iXfEeU8hAr8/Wb4EAxE6LAHw4ZMNyJs22Pz0c5G5 0HgI4E/C1VCibBrT9VGlYAcslZSOcoUu23Uu3CBPpVahcG2vJz+PWTxBu/XHvD2xuMqyaNqdzKV O2p6/cJpQO4Adx2qJBD8LsMLSA7vzWLRB2wBr77AkNdM3RaFF5lszXl9NkExgaFBdgtf06+ScRT LW7Xgo0+JOfLGnIzSLYx7VmCq+F0TvaFDNjRmxIvR64ruHsmbebiOJ0GwRWH4UmHD8yy X-Google-Smtp-Source: AGHT+IFv4i2Ik8lMNjZmYQr72FzULwRzHPlDbIz9oaPpSmtF0GO1SEBDxp22lqN5mKXXqt4PEOUnwQ== X-Received: by 2002:a05:6000:4207:b0:3a4:ef33:e60 with SMTP id ffacd0b85a97d-3b49661d63fmr2444101f8f.40.1751646356020; Fri, 04 Jul 2025 09:25:56 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 057/119] target/arm: Implement SME2 SVDOT, UVDOT, SUVDOT, USVDOT Date: Fri, 4 Jul 2025 17:23:57 +0100 Message-ID: <20250704162501.249138-58-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::433; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x433.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751647111415116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-46-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/helper-sme.h | 11 +++++++++ target/arm/tcg/sme.decode | 11 +++++++++ target/arm/tcg/sme_helper.c | 42 ++++++++++++++++++++++++++++++++++ target/arm/tcg/translate-sme.c | 23 +++++++++++++++++++ 4 files changed, 87 insertions(+) diff --git a/target/arm/tcg/helper-sme.h b/target/arm/tcg/helper-sme.h index 8f5a1b3c908..464877516b6 100644 --- a/target/arm/tcg/helper-sme.h +++ b/target/arm/tcg/helper-sme.h @@ -180,3 +180,14 @@ DEF_HELPER_FLAGS_6(sme2_fdot_idx_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, env, i32) DEF_HELPER_FLAGS_6(sme2_fvdot_idx_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, env, i32) + +DEF_HELPER_FLAGS_4(sme2_svdot_idx_4b, TCG_CALL_NO_RWG, void, ptr, ptr, ptr= , i32) +DEF_HELPER_FLAGS_4(sme2_uvdot_idx_4b, TCG_CALL_NO_RWG, void, ptr, ptr, ptr= , i32) +DEF_HELPER_FLAGS_4(sme2_suvdot_idx_4b, TCG_CALL_NO_RWG, void, ptr, ptr, pt= r, i32) +DEF_HELPER_FLAGS_4(sme2_usvdot_idx_4b, TCG_CALL_NO_RWG, void, ptr, ptr, pt= r, i32) + +DEF_HELPER_FLAGS_4(sme2_svdot_idx_4h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr= , i32) +DEF_HELPER_FLAGS_4(sme2_uvdot_idx_4h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr= , i32) + +DEF_HELPER_FLAGS_4(sme2_svdot_idx_2h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr= , i32) +DEF_HELPER_FLAGS_4(sme2_uvdot_idx_2h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr= , i32) diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 338637decd6..4146744a466 100644 --- a/target/arm/tcg/sme.decode +++ b/target/arm/tcg/sme.decode @@ -438,3 +438,14 @@ USDOT_nx 11000001 0101 .... 1 .. 1 .. ...01 01 = ... @azx_4x1_i2_o3 =20 SUDOT_nx 11000001 0101 .... 0 .. 1 .. ....1 11 ... @azx_2x1_i2_o3 SUDOT_nx 11000001 0101 .... 1 .. 1 .. ...01 11 ... @azx_4x1_i2_o3 + +SVDOT_nx_2h 11000001 0101 .... 0 .. 0 .. ....1 00 ... @azx_2x1_i2_o3 +SVDOT_nx_4b 11000001 0101 .... 1 .. 0 .. ...01 00 ... @azx_4x1_i2_o3 +SVDOT_nx_4h 11000001 1101 .... 1 .. 01 . ...00 01 ... @azx_4x1_i1_o3 + +UVDOT_nx_2h 11000001 0101 .... 0 .. 0 .. ....1 10 ... @azx_2x1_i2_o3 +UVDOT_nx_4b 11000001 0101 .... 1 .. 0 .. ...01 10 ... @azx_4x1_i2_o3 +UVDOT_nx_4h 11000001 1101 .... 1 .. 01 . ...00 11 ... @azx_4x1_i1_o3 + +SUVDOT_nx_4b 11000001 0101 .... 1 .. 0 .. ...01 11 ... @azx_4x1_i2_o3 +USVDOT_nx_4b 11000001 0101 .... 1 .. 0 .. ...01 01 ... @azx_4x1_i2_o3 diff --git a/target/arm/tcg/sme_helper.c b/target/arm/tcg/sme_helper.c index 8b458654612..f5242d99bed 100644 --- a/target/arm/tcg/sme_helper.c +++ b/target/arm/tcg/sme_helper.c @@ -1416,3 +1416,45 @@ DEF_IMOP_16x2_32(umopa2_s, uint16_t, uint16_t) =20 DEF_IMOPH(sme2, smopa2, s) DEF_IMOPH(sme2, umopa2, s) + +#define DO_VDOT_IDX(NAME, TYPED, TYPEN, TYPEM, HD, HN) \ +void HELPER(NAME)(void *vd, void *vn, void *vm, uint32_t desc) \ +{ \ + intptr_t svl =3D simd_oprsz(desc); = \ + intptr_t elements =3D svl / sizeof(TYPED); = \ + intptr_t eltperseg =3D 16 / sizeof(TYPED); = \ + intptr_t nreg =3D sizeof(TYPED) / sizeof(TYPEN); = \ + intptr_t vstride =3D (svl / nreg) * sizeof(ARMVectorReg); = \ + intptr_t zstride =3D sizeof(ARMVectorReg) / sizeof(TYPEN); = \ + intptr_t idx =3D extract32(desc, SIMD_DATA_SHIFT, 2); = \ + TYPEN *n =3D vn; = \ + TYPEM *m =3D vm; = \ + for (intptr_t r =3D 0; r < nreg; r++) { = \ + TYPED *d =3D vd + r * vstride; = \ + for (intptr_t seg =3D 0; seg < elements; seg +=3D eltperseg) { = \ + intptr_t s =3D seg + idx; = \ + for (intptr_t e =3D seg; e < seg + eltperseg; e++) { = \ + TYPED sum =3D d[HD(e)]; = \ + for (intptr_t i =3D 0; i < nreg; i++) { = \ + TYPED nn =3D n[i * zstride + HN(nreg * e + r)]; = \ + TYPED mm =3D m[HN(nreg * s + i)]; = \ + sum +=3D nn * mm; = \ + } \ + d[HD(e)] =3D sum; = \ + } \ + } \ + } \ +} + +DO_VDOT_IDX(sme2_svdot_idx_4b, int32_t, int8_t, int8_t, H4, H1) +DO_VDOT_IDX(sme2_uvdot_idx_4b, uint32_t, uint8_t, uint8_t, H4, H1) +DO_VDOT_IDX(sme2_suvdot_idx_4b, int32_t, int8_t, uint8_t, H4, H1) +DO_VDOT_IDX(sme2_usvdot_idx_4b, int32_t, uint8_t, int8_t, H4, H1) + +DO_VDOT_IDX(sme2_svdot_idx_4h, int64_t, int16_t, int16_t, H8, H2) +DO_VDOT_IDX(sme2_uvdot_idx_4h, uint64_t, uint16_t, uint16_t, H8, H2) + +DO_VDOT_IDX(sme2_svdot_idx_2h, int32_t, int16_t, int16_t, H4, H2) +DO_VDOT_IDX(sme2_uvdot_idx_2h, uint32_t, uint16_t, uint16_t, H4, H2) + +#undef DO_VDOT_IDX diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index 341f4495e92..b88f439ef9d 100644 --- a/target/arm/tcg/translate-sme.c +++ b/target/arm/tcg/translate-sme.c @@ -1047,3 +1047,26 @@ TRANS_FEAT(SDOT_nx_4b, aa64_sme2, do_dot_nx, a, gen_= helper_gvec_sdot_idx_4b) TRANS_FEAT(UDOT_nx_4b, aa64_sme2, do_dot_nx, a, gen_helper_gvec_udot_idx_4= b) TRANS_FEAT(SDOT_nx_4h, aa64_sme2_i16i64, do_dot_nx, a, gen_helper_gvec_sdo= t_idx_4h) TRANS_FEAT(UDOT_nx_4h, aa64_sme2_i16i64, do_dot_nx, a, gen_helper_gvec_udo= t_idx_4h) + +static bool do_vdot_nx(DisasContext *s, arg_azx_n *a, gen_helper_gvec_3 *f= n) +{ + if (sme_smza_enabled_check(s)) { + int svl =3D streaming_vec_reg_size(s); + fn(get_zarray(s, a->rv, a->off, a->n, 0), + vec_full_reg_ptr(s, a->zn), + vec_full_reg_ptr(s, a->zm), + tcg_constant_i32(simd_desc(svl, svl, a->idx))); + } + return true; +} + +TRANS_FEAT(SVDOT_nx_2h, aa64_sme2, do_vdot_nx, a, gen_helper_sme2_svdot_id= x_2h) +TRANS_FEAT(SVDOT_nx_4b, aa64_sme2, do_vdot_nx, a, gen_helper_sme2_svdot_id= x_4b) +TRANS_FEAT(SVDOT_nx_4h, aa64_sme2, do_vdot_nx, a, gen_helper_sme2_svdot_id= x_4h) + +TRANS_FEAT(UVDOT_nx_2h, aa64_sme2, do_vdot_nx, a, gen_helper_sme2_uvdot_id= x_2h) +TRANS_FEAT(UVDOT_nx_4b, aa64_sme2, do_vdot_nx, a, gen_helper_sme2_uvdot_id= x_4b) +TRANS_FEAT(UVDOT_nx_4h, aa64_sme2, do_vdot_nx, a, gen_helper_sme2_uvdot_id= x_4h) + +TRANS_FEAT(SUVDOT_nx_4b, aa64_sme2, do_vdot_nx, a, gen_helper_sme2_suvdot_= idx_4b) +TRANS_FEAT(USVDOT_nx_4b, aa64_sme2, do_vdot_nx, a, gen_helper_sme2_usvdot_= idx_4b) --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647312; cv=none; d=zohomail.com; s=zohoarc; b=ecaymiisKSXNfoVlc/7kpqceePzO4cHkGvReFf15ZmEzgpE3dF1joQafNd5e7e8IuQdG0hm7eJ+C9UZOr0sT+huXYf6B1lCtCmQa2euZDoPQQCQZGdyUDs6gppSfVRpkCyVXXa3EO7vg9yp+PTWyxvYyiAGroq57MBXCdsE+gZc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647312; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=sp9zLfK4Po00JTwCQbQiQP2F5SRX1VpL07OA/MfPQjU=; b=bS0y5WZig8+BZBjY3o2BLeBuBDx2vJMsEFo8ZDdiscVj3xKWRWdjI1Djp2939au5THmMM8SiIK3g73N7MWDVMUgKRh8kR9kyrXewTq6JUbjjuWJsIHw5U0OIM+vtTjCIbJPIfbdBLeGM3eA97Di63sEFmn+bQPkGaSx+gNAJeCQ= 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 1751647312131638.4854170415892; Fri, 4 Jul 2025 09:41:52 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjEn-0001MX-J3; Fri, 04 Jul 2025 12:26: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 1uXjEf-00010v-Ro for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:01 -0400 Received: from mail-wr1-x434.google.com ([2a00:1450:4864:20::434]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjEc-0006Py-Fw for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:01 -0400 Received: by mail-wr1-x434.google.com with SMTP id ffacd0b85a97d-3a5257748e1so869355f8f.2 for ; Fri, 04 Jul 2025 09:25:58 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.56 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646357; x=1752251157; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=sp9zLfK4Po00JTwCQbQiQP2F5SRX1VpL07OA/MfPQjU=; b=M+LNQIhDprhrbdE1z+q5swEantgC58FgyQwYAlYuDqcidwyRcAYzTCSM3MSRlOl0F9 LWlGPJOdGKIlKfg840BmE0bi27/+7ezg/0Dgf96+FKica6qIgUIOoqqO2ATxoiCoJTvM Y78FhGCIHyXYx3KrBQ+xXRG99HZFgofubeZIdI3Oe/6UJBweAXt8Tf/Y6+vSCpoJWNUX zg9wT7Qkkltlr8+queHtQLR0zH6skg8Y0gGBpImyJdJKztAs6nCVz8Y6/lXwg9VvgeqM gujNvjHRJkOEmaG5eMP1gR/3RhrZxS4MzNZxkilSdSN7SPFETfoRqlkUqcDvja101JIo iFXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646357; x=1752251157; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=sp9zLfK4Po00JTwCQbQiQP2F5SRX1VpL07OA/MfPQjU=; b=SOTCmCFerBvZc5j28yxmgxSaFKmQ/nR45eI5vESr60r58ax2uBNH9O4i3n1LSd1RFk 0w6ujLNza+UIP2CJ3mm0jeya/BqbBSqwzJyIbaUd+FLdXBMT4ay0IIU9P5QQXJW1DQN0 0+7rnLSOk4z8SXuwwAxyZQUCa/+Y20UCHfvfv0niD5QNUW+C3W/U67vnsmih6jxgNMra QFsnaRrL3IvLOghhbC+9MPSbpv2pfrlr28nwhiRH58+BD6rsmZdafsLbI7DRqah8Bmya EJ/TxGwe9iVIB3o885SBmTwk6cVdS8xi5VEqCr+c8H8lgWjUdfP3JgUadmqempEhTPAl DKSQ== X-Gm-Message-State: AOJu0YyScoYNukS5OYqdd4Pu1a1PvDU1x++Pktc2jTxwxOw1dXyaNLX5 U7Hmt1EcG5TQ/oEmUH0WFIUVuAO6LybWQanSB7ktaWvDN+ul5/V2Kboc9A8Cpq6Idl7kRvCdTf5 jWNZc X-Gm-Gg: ASbGnctGyNbUlPaPYyD/THm9bkTBpFE27Jfj+CXsqaSLy0ncnz5zvnh5Mo/AhacNrtS vCagpIKitulZAvrKTvBuT2pseMDGSj671uz0o0R7lKIQ3hrN44JtkqbWQwZEUF8OF2qSkNPWg28 3+PNavmVANfAKTPTEVvc3Zaz3ELYyrZV4ra7CYTm2z3Jk6o4dCFhWo6E0MhIdIk3dOcLQDK4YI5 3k+m3ZHyk3EAgQ5BsrstF7PgUaYDXnjSqeCzHEVfPGc1jnNrOYB1CvrhzoX1mstD1db3O4P8r9V JgyE2gqmBVyBk8MkfrKMphBONbsM8+rdLtQU7Tta7KfxIt/pUU7J4zfrVoWzeXWbkOPi X-Google-Smtp-Source: AGHT+IFyQ6nysnt8/hdP1XS0JpFvuyQUq5Yf96J/eirjhtvKLUvUV9wxR8C4s7pP2+WZ+ZWx5aCLvw== X-Received: by 2002:a5d:5d8a:0:b0:3a4:d02e:84af with SMTP id ffacd0b85a97d-3b497045fb8mr2540519f8f.58.1751646356991; Fri, 04 Jul 2025 09:25:56 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 058/119] target/arm: Implement SME2 SMLAL, SMLSL, UMLAL, UMLSL Date: Fri, 4 Jul 2025 17:23:58 +0100 Message-ID: <20250704162501.249138-59-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::434; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x434.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751647313676116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-47-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/helper-sme.h | 21 +++++ target/arm/tcg/sme.decode | 168 +++++++++++++++++++++++++++++++++ target/arm/tcg/sme_helper.c | 59 ++++++++++++ target/arm/tcg/translate-sme.c | 84 +++++++++++++++++ 4 files changed, 332 insertions(+) diff --git a/target/arm/tcg/helper-sme.h b/target/arm/tcg/helper-sme.h index 464877516b6..0bb8af194b3 100644 --- a/target/arm/tcg/helper-sme.h +++ b/target/arm/tcg/helper-sme.h @@ -191,3 +191,24 @@ DEF_HELPER_FLAGS_4(sme2_uvdot_idx_4h, TCG_CALL_NO_RWG,= void, ptr, ptr, ptr, i32) =20 DEF_HELPER_FLAGS_4(sme2_svdot_idx_2h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr= , i32) DEF_HELPER_FLAGS_4(sme2_uvdot_idx_2h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr= , i32) + +DEF_HELPER_FLAGS_5(sme2_smlall_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, pt= r, i32) +DEF_HELPER_FLAGS_5(sme2_smlall_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, pt= r, i32) +DEF_HELPER_FLAGS_5(sme2_smlsll_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, pt= r, i32) +DEF_HELPER_FLAGS_5(sme2_smlsll_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, pt= r, i32) +DEF_HELPER_FLAGS_5(sme2_umlall_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, pt= r, i32) +DEF_HELPER_FLAGS_5(sme2_umlall_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, pt= r, i32) +DEF_HELPER_FLAGS_5(sme2_umlsll_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, pt= r, i32) +DEF_HELPER_FLAGS_5(sme2_umlsll_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, pt= r, i32) +DEF_HELPER_FLAGS_5(sme2_usmlall_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, p= tr, i32) + +DEF_HELPER_FLAGS_5(sme2_smlall_idx_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr= , ptr, i32) +DEF_HELPER_FLAGS_5(sme2_smlall_idx_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr= , ptr, i32) +DEF_HELPER_FLAGS_5(sme2_smlsll_idx_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr= , ptr, i32) +DEF_HELPER_FLAGS_5(sme2_smlsll_idx_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr= , ptr, i32) +DEF_HELPER_FLAGS_5(sme2_umlall_idx_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr= , ptr, i32) +DEF_HELPER_FLAGS_5(sme2_umlall_idx_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr= , ptr, i32) +DEF_HELPER_FLAGS_5(sme2_umlsll_idx_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr= , ptr, i32) +DEF_HELPER_FLAGS_5(sme2_umlsll_idx_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr= , ptr, i32) +DEF_HELPER_FLAGS_5(sme2_usmlall_idx_s, TCG_CALL_NO_RWG, void, ptr, ptr, pt= r, ptr, i32) +DEF_HELPER_FLAGS_5(sme2_sumlall_idx_s, TCG_CALL_NO_RWG, void, ptr, ptr, pt= r, ptr, i32) diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 4146744a466..934e4a802ea 100644 --- a/target/arm/tcg/sme.decode +++ b/target/arm/tcg/sme.decode @@ -311,6 +311,65 @@ UDOT_n1_4h 11000001 011 1 .... 0 .. 101 ..... 10 = ... @azz_nx1_o3 n=3D4 UDOT_n1_2h 11000001 011 0 .... 0 .. 101 ..... 11 ... @azz_nx1_o3 n= =3D2 UDOT_n1_2h 11000001 011 1 .... 0 .. 101 ..... 11 ... @azz_nx1_o3 n= =3D4 =20 +SMLAL_n1 11000001 011 0 .... 0 .. 011 ..... 00 ... @azz_nx1_o3x2 = n=3D1 +SMLAL_n1 11000001 011 0 .... 0 .. 010 ..... 000 .. @azz_nx1_o2x2 = n=3D2 +SMLAL_n1 11000001 011 1 .... 0 .. 010 ..... 000 .. @azz_nx1_o2x2 = n=3D4 + +SMLSL_n1 11000001 011 0 .... 0 .. 011 ..... 01 ... @azz_nx1_o3x2 = n=3D1 +SMLSL_n1 11000001 011 0 .... 0 .. 010 ..... 010 .. @azz_nx1_o2x2 = n=3D2 +SMLSL_n1 11000001 011 1 .... 0 .. 010 ..... 010 .. @azz_nx1_o2x2 = n=3D4 + +UMLAL_n1 11000001 011 0 .... 0 .. 011 ..... 10 ... @azz_nx1_o3x2 = n=3D1 +UMLAL_n1 11000001 011 0 .... 0 .. 010 ..... 100 .. @azz_nx1_o2x2 = n=3D2 +UMLAL_n1 11000001 011 1 .... 0 .. 010 ..... 100 .. @azz_nx1_o2x2 = n=3D4 + +UMLSL_n1 11000001 011 0 .... 0 .. 011 ..... 11 ... @azz_nx1_o3x2 = n=3D1 +UMLSL_n1 11000001 011 0 .... 0 .. 010 ..... 110 .. @azz_nx1_o2x2 = n=3D2 +UMLSL_n1 11000001 011 1 .... 0 .. 010 ..... 110 .. @azz_nx1_o2x2 = n=3D4 + +%off2_x4 0:2 !function=3Dtimes_4 +%off1_x4 0:1 !function=3Dtimes_4 + +@azz_nx1_o2x4 ........ ... . zm:4 . .. ... zn:5 ... .. \ + &azz_n off=3D%off2_x4 rv=3D%mova_rv +@azz_nx1_o1x4 ........ ... . zm:4 . .. ... zn:5 .... . \ + &azz_n off=3D%off1_x4 rv=3D%mova_rv + +SMLALL_n1_s 11000001 001 0 .... 0 .. 001 ..... 000 .. @azz_nx1_o2x4 = n=3D1 +SMLALL_n1_d 11000001 011 0 .... 0 .. 001 ..... 000 .. @azz_nx1_o2x4 = n=3D1 +SMLALL_n1_s 11000001 001 0 .... 0 .. 000 ..... 0000 . @azz_nx1_o1x4 = n=3D2 +SMLALL_n1_d 11000001 011 0 .... 0 .. 000 ..... 0000 . @azz_nx1_o1x4 = n=3D2 +SMLALL_n1_s 11000001 001 1 .... 0 .. 000 ..... 0000 . @azz_nx1_o1x4 = n=3D4 +SMLALL_n1_d 11000001 011 1 .... 0 .. 000 ..... 0000 . @azz_nx1_o1x4 = n=3D4 + +SMLSLL_n1_s 11000001 001 0 .... 0 .. 001 ..... 010 .. @azz_nx1_o2x4 = n=3D1 +SMLSLL_n1_d 11000001 011 0 .... 0 .. 001 ..... 010 .. @azz_nx1_o2x4 = n=3D1 +SMLSLL_n1_s 11000001 001 0 .... 0 .. 000 ..... 0100 . @azz_nx1_o1x4 = n=3D2 +SMLSLL_n1_d 11000001 011 0 .... 0 .. 000 ..... 0100 . @azz_nx1_o1x4 = n=3D2 +SMLSLL_n1_s 11000001 001 1 .... 0 .. 000 ..... 0100 . @azz_nx1_o1x4 = n=3D4 +SMLSLL_n1_d 11000001 011 1 .... 0 .. 000 ..... 0100 . @azz_nx1_o1x4 = n=3D4 + +UMLALL_n1_s 11000001 001 0 .... 0 .. 001 ..... 100 .. @azz_nx1_o2x4 = n=3D1 +UMLALL_n1_d 11000001 011 0 .... 0 .. 001 ..... 100 .. @azz_nx1_o2x4 = n=3D1 +UMLALL_n1_s 11000001 001 0 .... 0 .. 000 ..... 1000 . @azz_nx1_o1x4 = n=3D2 +UMLALL_n1_d 11000001 011 0 .... 0 .. 000 ..... 1000 . @azz_nx1_o1x4 = n=3D2 +UMLALL_n1_s 11000001 001 1 .... 0 .. 000 ..... 1000 . @azz_nx1_o1x4 = n=3D4 +UMLALL_n1_d 11000001 011 1 .... 0 .. 000 ..... 1000 . @azz_nx1_o1x4 = n=3D4 + +UMLSLL_n1_s 11000001 001 0 .... 0 .. 001 ..... 110 .. @azz_nx1_o2x4 = n=3D1 +UMLSLL_n1_d 11000001 011 0 .... 0 .. 001 ..... 110 .. @azz_nx1_o2x4 = n=3D1 +UMLSLL_n1_s 11000001 001 0 .... 0 .. 000 ..... 1100 . @azz_nx1_o1x4 = n=3D2 +UMLSLL_n1_d 11000001 011 0 .... 0 .. 000 ..... 1100 . @azz_nx1_o1x4 = n=3D2 +UMLSLL_n1_s 11000001 001 1 .... 0 .. 000 ..... 1100 . @azz_nx1_o1x4 = n=3D4 +UMLSLL_n1_d 11000001 011 1 .... 0 .. 000 ..... 1100 . @azz_nx1_o1x4 = n=3D4 + +USMLALL_n1_s 11000001 001 0 .... 0 .. 001 ..... 001 .. @azz_nx1_o2x4 = n=3D1 +USMLALL_n1_s 11000001 001 0 .... 0 .. 000 ..... 0010 . @azz_nx1_o1x4 = n=3D2 +USMLALL_n1_s 11000001 001 1 .... 0 .. 000 ..... 0010 . @azz_nx1_o1x4 = n=3D4 + +SUMLALL_n1_s 11000001 001 0 .... 0 .. 000 ..... 1010 . @azz_nx1_o1x4 = n=3D2 +SUMLALL_n1_s 11000001 001 1 .... 0 .. 000 ..... 1010 . @azz_nx1_o1x4 = n=3D4 + ### SME2 Multi-vector Multiple Array Vectors =20 %zn_ax2 6:4 !function=3Dtimes_2 @@ -371,6 +430,46 @@ UDOT_nn_4h 11000001 111 ...01 0 .. 101 ...00 10 .= .. @azz_4x4_o3 UDOT_nn_2h 11000001 111 ....0 0 .. 101 ....0 11 ... @azz_2x2_o3 UDOT_nn_2h 11000001 111 ...01 0 .. 101 ...00 11 ... @azz_4x4_o3 =20 +SMLAL_nn 11000001 111 ....0 0 .. 010 ....0 000 .. @azz_2x2_o2x2 +SMLAL_nn 11000001 111 ...01 0 .. 010 ...00 000 .. @azz_4x4_o2x2 + +SMLSL_nn 11000001 111 ....0 0 .. 010 ....0 010 .. @azz_2x2_o2x2 +SMLSL_nn 11000001 111 ...01 0 .. 010 ...00 010 .. @azz_4x4_o2x2 + +UMLAL_nn 11000001 111 ....0 0 .. 010 ....0 100 .. @azz_2x2_o2x2 +UMLAL_nn 11000001 111 ...01 0 .. 010 ...00 100 .. @azz_4x4_o2x2 + +UMLSL_nn 11000001 111 ....0 0 .. 010 ....0 110 .. @azz_2x2_o2x2 +UMLSL_nn 11000001 111 ...01 0 .. 010 ...00 110 .. @azz_4x4_o2x2 + +@azz_2x2_o1x4 ........ ... ..... . .. ... ..... ... .. \ + &azz_n n=3D2 rv=3D%mova_rv zn=3D%zn_ax2 zm=3D%zm_ax2 off= =3D%off1_x4 +@azz_4x4_o1x4 ........ ... ..... . .. ... ..... ... .. \ + &azz_n n=3D4 rv=3D%mova_rv zn=3D%zn_ax4 zm=3D%zm_ax4 off= =3D%off1_x4 + +SMLALL_nn_s 11000001 101 ....0 0 .. 000 ....0 0000 . @azz_2x2_o1x4 +SMLALL_nn_d 11000001 111 ....0 0 .. 000 ....0 0000 . @azz_2x2_o1x4 +SMLALL_nn_s 11000001 101 ...01 0 .. 000 ...00 0000 . @azz_4x4_o1x4 +SMLALL_nn_d 11000001 111 ...01 0 .. 000 ...00 0000 . @azz_4x4_o1x4 + +SMLSLL_nn_s 11000001 101 ....0 0 .. 000 ....0 0100 . @azz_2x2_o1x4 +SMLSLL_nn_d 11000001 111 ....0 0 .. 000 ....0 0100 . @azz_2x2_o1x4 +SMLSLL_nn_s 11000001 101 ...01 0 .. 000 ...00 0100 . @azz_4x4_o1x4 +SMLSLL_nn_d 11000001 111 ...01 0 .. 000 ...00 0100 . @azz_4x4_o1x4 + +UMLALL_nn_s 11000001 101 ....0 0 .. 000 ....0 1000 . @azz_2x2_o1x4 +UMLALL_nn_d 11000001 111 ....0 0 .. 000 ....0 1000 . @azz_2x2_o1x4 +UMLALL_nn_s 11000001 101 ...01 0 .. 000 ...00 1000 . @azz_4x4_o1x4 +UMLALL_nn_d 11000001 111 ...01 0 .. 000 ...00 1000 . @azz_4x4_o1x4 + +UMLSLL_nn_s 11000001 101 ....0 0 .. 000 ....0 1100 . @azz_2x2_o1x4 +UMLSLL_nn_d 11000001 111 ....0 0 .. 000 ....0 1100 . @azz_2x2_o1x4 +UMLSLL_nn_s 11000001 101 ...01 0 .. 000 ...00 1100 . @azz_4x4_o1x4 +UMLSLL_nn_d 11000001 111 ...01 0 .. 000 ...00 1100 . @azz_4x4_o1x4 + +USMLALL_nn_s 11000001 101 ....0 0 .. 000 ....0 0010 . @azz_2x2_o1x4 +USMLALL_nn_s 11000001 101 ...01 0 .. 000 ...00 0010 . @azz_4x4_o1x4 + ### SME2 Multi-vector Indexed =20 &azx_n n off rv zn zm idx @@ -449,3 +548,72 @@ UVDOT_nx_4h 11000001 1101 .... 1 .. 01 . ...00 11 = ... @azx_4x1_i1_o3 =20 SUVDOT_nx_4b 11000001 0101 .... 1 .. 0 .. ...01 11 ... @azx_4x1_i2_o3 USVDOT_nx_4b 11000001 0101 .... 1 .. 0 .. ...01 01 ... @azx_4x1_i2_o3 + +SMLAL_nx 11000001 1100 .... . .. 1 .. ..... 00 ... @azx_1x1_o3x2 +SMLAL_nx 11000001 1101 .... 0 .. 1 .. ....0 00 ... @azx_2x1_o2x2 +SMLAL_nx 11000001 1101 .... 1 .. 1 .. ...00 00 ... @azx_4x1_o2x2 + +SMLSL_nx 11000001 1100 .... . .. 1 .. ..... 01 ... @azx_1x1_o3x2 +SMLSL_nx 11000001 1101 .... 0 .. 1 .. ....0 01 ... @azx_2x1_o2x2 +SMLSL_nx 11000001 1101 .... 1 .. 1 .. ...00 01 ... @azx_4x1_o2x2 + +UMLAL_nx 11000001 1100 .... . .. 1 .. ..... 10 ... @azx_1x1_o3x2 +UMLAL_nx 11000001 1101 .... 0 .. 1 .. ....0 10 ... @azx_2x1_o2x2 +UMLAL_nx 11000001 1101 .... 1 .. 1 .. ...00 10 ... @azx_4x1_o2x2 + +UMLSL_nx 11000001 1100 .... . .. 1 .. ..... 11 ... @azx_1x1_o3x2 +UMLSL_nx 11000001 1101 .... 0 .. 1 .. ....0 11 ... @azx_2x1_o2x2 +UMLSL_nx 11000001 1101 .... 1 .. 1 .. ...00 11 ... @azx_4x1_o2x2 + +%idx4_15_10 15:1 10:3 +%idx4_10_1 10:2 1:2 +%idx3_10_1 10:1 1:2 + +@azx_1x1_i4_o2 ........ .... zm:4 . .. ... zn:5 ... .. \ + &azx_n n=3D1 rv=3D%mova_rv off=3D%off2_x4 idx=3D%idx4_15_10 +@azx_1x1_i3_o2 ........ .... zm:4 . .. ... zn:5 ... .. \ + &azx_n n=3D1 rv=3D%mova_rv off=3D%off2_x4 idx=3D%idx3_15_10 +@azx_2x1_i4_o1 ........ .... zm:4 . .. ... ..... ... .. \ + &azx_n n=3D2 rv=3D%mova_rv off=3D%off1_x4 zn=3D%zn_ax2 idx= =3D%idx4_10_1 +@azx_2x1_i3_o1 ........ .... zm:4 . .. ... ..... ... .. \ + &azx_n n=3D2 rv=3D%mova_rv off=3D%off1_x4 zn=3D%zn_ax2 idx= =3D%idx3_10_1 +@azx_4x1_i4_o1 ........ .... zm:4 . .. ... ..... ... .. \ + &azx_n n=3D4 rv=3D%mova_rv off=3D%off1_x4 zn=3D%zn_ax4 idx= =3D%idx4_10_1 +@azx_4x1_i3_o1 ........ .... zm:4 . .. ... ..... ... .. \ + &azx_n n=3D4 rv=3D%mova_rv off=3D%off1_x4 zn=3D%zn_ax4 idx= =3D%idx3_10_1 + +SMLALL_nx_s 11000001 0000 .... . .. ... ..... 000 .. @azx_1x1_i4_o2 +SMLALL_nx_d 11000001 1000 .... . .. 0.. ..... 000 .. @azx_1x1_i3_o2 +SMLALL_nx_s 11000001 0001 .... 0 .. 0.. ....0 00 ... @azx_2x1_i4_o1 +SMLALL_nx_d 11000001 1001 .... 0 .. 00. ....0 00 ... @azx_2x1_i3_o1 +SMLALL_nx_s 11000001 0001 .... 1 .. 0.. ...00 00 ... @azx_4x1_i4_o1 +SMLALL_nx_d 11000001 1001 .... 1 .. 00. ...00 00 ... @azx_4x1_i3_o1 + +SMLSLL_nx_s 11000001 0000 .... . .. ... ..... 010 .. @azx_1x1_i4_o2 +SMLSLL_nx_d 11000001 1000 .... . .. 0.. ..... 010 .. @azx_1x1_i3_o2 +SMLSLL_nx_s 11000001 0001 .... 0 .. 0.. ....0 01 ... @azx_2x1_i4_o1 +SMLSLL_nx_d 11000001 1001 .... 0 .. 00. ....0 01 ... @azx_2x1_i3_o1 +SMLSLL_nx_s 11000001 0001 .... 1 .. 0.. ...00 01 ... @azx_4x1_i4_o1 +SMLSLL_nx_d 11000001 1001 .... 1 .. 00. ...00 01 ... @azx_4x1_i3_o1 + +UMLALL_nx_s 11000001 0000 .... . .. ... ..... 100 .. @azx_1x1_i4_o2 +UMLALL_nx_d 11000001 1000 .... . .. 0.. ..... 100 .. @azx_1x1_i3_o2 +UMLALL_nx_s 11000001 0001 .... 0 .. 0.. ....0 10 ... @azx_2x1_i4_o1 +UMLALL_nx_d 11000001 1001 .... 0 .. 00. ....0 10 ... @azx_2x1_i3_o1 +UMLALL_nx_s 11000001 0001 .... 1 .. 0.. ...00 10 ... @azx_4x1_i4_o1 +UMLALL_nx_d 11000001 1001 .... 1 .. 00. ...00 10 ... @azx_4x1_i3_o1 + +UMLSLL_nx_s 11000001 0000 .... . .. ... ..... 110 .. @azx_1x1_i4_o2 +UMLSLL_nx_d 11000001 1000 .... . .. 0.. ..... 110 .. @azx_1x1_i3_o2 +UMLSLL_nx_s 11000001 0001 .... 0 .. 0.. ....0 11 ... @azx_2x1_i4_o1 +UMLSLL_nx_d 11000001 1001 .... 0 .. 00. ....0 11 ... @azx_2x1_i3_o1 +UMLSLL_nx_s 11000001 0001 .... 1 .. 0.. ...00 11 ... @azx_4x1_i4_o1 +UMLSLL_nx_d 11000001 1001 .... 1 .. 00. ...00 11 ... @azx_4x1_i3_o1 + +USMLALL_nx_s 11000001 0000 .... . .. ... ..... 001 .. @azx_1x1_i4_o2 +USMLALL_nx_s 11000001 0001 .... 0 .. 0.. ....1 00 ... @azx_2x1_i4_o1 +USMLALL_nx_s 11000001 0001 .... 1 .. 0.. ...01 00 ... @azx_4x1_i4_o1 + +SUMLALL_nx_s 11000001 0000 .... . .. ... ..... 101 .. @azx_1x1_i4_o2 +SUMLALL_nx_s 11000001 0001 .... 0 .. 0.. ....1 10 ... @azx_2x1_i4_o1 +SUMLALL_nx_s 11000001 0001 .... 1 .. 0.. ...01 10 ... @azx_4x1_i4_o1 diff --git a/target/arm/tcg/sme_helper.c b/target/arm/tcg/sme_helper.c index f5242d99bed..0f79d7cb6e3 100644 --- a/target/arm/tcg/sme_helper.c +++ b/target/arm/tcg/sme_helper.c @@ -1458,3 +1458,62 @@ DO_VDOT_IDX(sme2_svdot_idx_2h, int32_t, int16_t, int= 16_t, H4, H2) DO_VDOT_IDX(sme2_uvdot_idx_2h, uint32_t, uint16_t, uint16_t, H4, H2) =20 #undef DO_VDOT_IDX + +#define DO_MLALL(NAME, TYPEW, TYPEN, TYPEM, HW, HN, OP) \ +void HELPER(NAME)(void *vd, void *vn, void *vm, void *va, uint32_t desc) \ +{ \ + intptr_t elements =3D simd_oprsz(desc) / sizeof(TYPEW); \ + intptr_t sel =3D extract32(desc, SIMD_DATA_SHIFT, 2); \ + TYPEW *d =3D vd, *a =3D va; TYPEN *n =3D vn; TYPEM *m =3D vm; \ + for (intptr_t i =3D 0; i < elements; ++i) { \ + TYPEW nn =3D n[HN(i * 4 + sel)]; \ + TYPEM mm =3D m[HN(i * 4 + sel)]; \ + d[HW(i)] =3D a[HW(i)] OP (nn * mm); \ + } \ +} + +DO_MLALL(sme2_smlall_s, int32_t, int8_t, int8_t, H4, H1, +) +DO_MLALL(sme2_smlall_d, int64_t, int16_t, int16_t, H8, H2, +) +DO_MLALL(sme2_smlsll_s, int32_t, int8_t, int8_t, H4, H1, -) +DO_MLALL(sme2_smlsll_d, int64_t, int16_t, int16_t, H8, H2, -) + +DO_MLALL(sme2_umlall_s, uint32_t, uint8_t, uint8_t, H4, H1, +) +DO_MLALL(sme2_umlall_d, uint64_t, uint16_t, uint16_t, H8, H2, +) +DO_MLALL(sme2_umlsll_s, uint32_t, uint8_t, uint8_t, H4, H1, -) +DO_MLALL(sme2_umlsll_d, uint64_t, uint16_t, uint16_t, H8, H2, -) + +DO_MLALL(sme2_usmlall_s, uint32_t, uint8_t, int8_t, H4, H1, +) + +#undef DO_MLALL + +#define DO_MLALL_IDX(NAME, TYPEW, TYPEN, TYPEM, HW, HN, OP) \ +void HELPER(NAME)(void *vd, void *vn, void *vm, void *va, uint32_t desc) \ +{ \ + intptr_t elements =3D simd_oprsz(desc) / sizeof(TYPEW); \ + intptr_t eltspersegment =3D 16 / sizeof(TYPEW); \ + intptr_t sel =3D extract32(desc, SIMD_DATA_SHIFT, 2); \ + intptr_t idx =3D extract32(desc, SIMD_DATA_SHIFT + 2, 4); \ + TYPEW *d =3D vd, *a =3D va; TYPEN *n =3D vn; TYPEM *m =3D vm; \ + for (intptr_t i =3D 0; i < elements; i +=3D eltspersegment) { \ + TYPEW mm =3D m[HN(i * 4 + idx)]; \ + for (intptr_t j =3D 0; j < eltspersegment; ++j) { \ + TYPEN nn =3D n[HN((i + j) * 4 + sel)]; \ + d[HW(i + j)] =3D a[HW(i + j)] OP (nn * mm); \ + } \ + } \ +} + +DO_MLALL_IDX(sme2_smlall_idx_s, int32_t, int8_t, int8_t, H4, H1, +) +DO_MLALL_IDX(sme2_smlall_idx_d, int64_t, int16_t, int16_t, H8, H2, +) +DO_MLALL_IDX(sme2_smlsll_idx_s, int32_t, int8_t, int8_t, H4, H1, -) +DO_MLALL_IDX(sme2_smlsll_idx_d, int64_t, int16_t, int16_t, H8, H2, -) + +DO_MLALL_IDX(sme2_umlall_idx_s, uint32_t, uint8_t, uint8_t, H4, H1, +) +DO_MLALL_IDX(sme2_umlall_idx_d, uint64_t, uint16_t, uint16_t, H8, H2, +) +DO_MLALL_IDX(sme2_umlsll_idx_s, uint32_t, uint8_t, uint8_t, H4, H1, -) +DO_MLALL_IDX(sme2_umlsll_idx_d, uint64_t, uint16_t, uint16_t, H8, H2, -) + +DO_MLALL_IDX(sme2_usmlall_idx_s, uint32_t, uint8_t, int8_t, H4, H1, +) +DO_MLALL_IDX(sme2_sumlall_idx_s, uint32_t, int8_t, uint8_t, H4, H1, +) + +#undef DO_MLALL_IDX diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index b88f439ef9d..070cebc5738 100644 --- a/target/arm/tcg/translate-sme.c +++ b/target/arm/tcg/translate-sme.c @@ -1070,3 +1070,87 @@ TRANS_FEAT(UVDOT_nx_4h, aa64_sme2, do_vdot_nx, a, ge= n_helper_sme2_uvdot_idx_4h) =20 TRANS_FEAT(SUVDOT_nx_4b, aa64_sme2, do_vdot_nx, a, gen_helper_sme2_suvdot_= idx_4b) TRANS_FEAT(USVDOT_nx_4b, aa64_sme2, do_vdot_nx, a, gen_helper_sme2_usvdot_= idx_4b) + +static bool do_smlal(DisasContext *s, arg_azz_n *a, bool multi, + gen_helper_gvec_4 *fn) +{ + return do_azz_acc(s, a->n, 2, a->rv, a->off, a->zn, a->zm, + 0, 0, multi, fn); +} + +TRANS_FEAT(SMLAL_n1, aa64_sme2, do_smlal, a, false, gen_helper_sve2_smlal_= zzzw_s) +TRANS_FEAT(SMLSL_n1, aa64_sme2, do_smlal, a, false, gen_helper_sve2_smlsl_= zzzw_s) +TRANS_FEAT(UMLAL_n1, aa64_sme2, do_smlal, a, false, gen_helper_sve2_umlal_= zzzw_s) +TRANS_FEAT(UMLSL_n1, aa64_sme2, do_smlal, a, false, gen_helper_sve2_umlsl_= zzzw_s) + +TRANS_FEAT(SMLAL_nn, aa64_sme2, do_smlal, a, true, gen_helper_sve2_smlal_z= zzw_s) +TRANS_FEAT(SMLSL_nn, aa64_sme2, do_smlal, a, true, gen_helper_sve2_smlsl_z= zzw_s) +TRANS_FEAT(UMLAL_nn, aa64_sme2, do_smlal, a, true, gen_helper_sve2_umlal_z= zzw_s) +TRANS_FEAT(UMLSL_nn, aa64_sme2, do_smlal, a, true, gen_helper_sve2_umlsl_z= zzw_s) + +static bool do_smlal_nx(DisasContext *s, arg_azx_n *a, + gen_helper_gvec_4 *fn) +{ + return do_azz_acc(s, a->n, 2, a->rv, a->off, a->zn, a->zm, + a->idx << 1, 0, false, fn); +} + +TRANS_FEAT(SMLAL_nx, aa64_sme2, do_smlal_nx, a, gen_helper_sve2_smlal_idx_= s) +TRANS_FEAT(SMLSL_nx, aa64_sme2, do_smlal_nx, a, gen_helper_sve2_smlsl_idx_= s) +TRANS_FEAT(UMLAL_nx, aa64_sme2, do_smlal_nx, a, gen_helper_sve2_umlal_idx_= s) +TRANS_FEAT(UMLSL_nx, aa64_sme2, do_smlal_nx, a, gen_helper_sve2_umlsl_idx_= s) + +static bool do_smlall(DisasContext *s, arg_azz_n *a, bool multi, + gen_helper_gvec_4 *fn) +{ + return do_azz_acc(s, a->n, 4, a->rv, a->off, a->zn, a->zm, + 0, 0, multi, fn); +} + +static void gen_helper_sme2_sumlall_s(TCGv_ptr d, TCGv_ptr n, TCGv_ptr m, + TCGv_ptr a, TCGv_i32 desc) +{ + gen_helper_sme2_usmlall_s(d, m, n, a, desc); +} + +TRANS_FEAT(SMLALL_n1_s, aa64_sme2, do_smlall, a, false, gen_helper_sme2_sm= lall_s) +TRANS_FEAT(SMLSLL_n1_s, aa64_sme2, do_smlall, a, false, gen_helper_sme2_sm= lsll_s) +TRANS_FEAT(UMLALL_n1_s, aa64_sme2, do_smlall, a, false, gen_helper_sme2_um= lall_s) +TRANS_FEAT(UMLSLL_n1_s, aa64_sme2, do_smlall, a, false, gen_helper_sme2_um= lsll_s) +TRANS_FEAT(USMLALL_n1_s, aa64_sme2, do_smlall, a, false, gen_helper_sme2_u= smlall_s) +TRANS_FEAT(SUMLALL_n1_s, aa64_sme2, do_smlall, a, false, gen_helper_sme2_s= umlall_s) + +TRANS_FEAT(SMLALL_n1_d, aa64_sme2_i16i64, do_smlall, a, false, gen_helper_= sme2_smlall_d) +TRANS_FEAT(SMLSLL_n1_d, aa64_sme2_i16i64, do_smlall, a, false, gen_helper_= sme2_smlsll_d) +TRANS_FEAT(UMLALL_n1_d, aa64_sme2_i16i64, do_smlall, a, false, gen_helper_= sme2_umlall_d) +TRANS_FEAT(UMLSLL_n1_d, aa64_sme2_i16i64, do_smlall, a, false, gen_helper_= sme2_umlsll_d) + +TRANS_FEAT(SMLALL_nn_s, aa64_sme2, do_smlall, a, true, gen_helper_sme2_sml= all_s) +TRANS_FEAT(SMLSLL_nn_s, aa64_sme2, do_smlall, a, true, gen_helper_sme2_sml= sll_s) +TRANS_FEAT(UMLALL_nn_s, aa64_sme2, do_smlall, a, true, gen_helper_sme2_uml= all_s) +TRANS_FEAT(UMLSLL_nn_s, aa64_sme2, do_smlall, a, true, gen_helper_sme2_uml= sll_s) +TRANS_FEAT(USMLALL_nn_s, aa64_sme2, do_smlall, a, true, gen_helper_sme2_us= mlall_s) + +TRANS_FEAT(SMLALL_nn_d, aa64_sme2_i16i64, do_smlall, a, true, gen_helper_s= me2_smlall_d) +TRANS_FEAT(SMLSLL_nn_d, aa64_sme2_i16i64, do_smlall, a, true, gen_helper_s= me2_smlsll_d) +TRANS_FEAT(UMLALL_nn_d, aa64_sme2_i16i64, do_smlall, a, true, gen_helper_s= me2_umlall_d) +TRANS_FEAT(UMLSLL_nn_d, aa64_sme2_i16i64, do_smlall, a, true, gen_helper_s= me2_umlsll_d) + +static bool do_smlall_nx(DisasContext *s, arg_azx_n *a, + gen_helper_gvec_4 *fn) +{ + return do_azz_acc(s, a->n, 4, a->rv, a->off, a->zn, a->zm, + a->idx << 2, 0, false, fn); +} + +TRANS_FEAT(SMLALL_nx_s, aa64_sme2, do_smlall_nx, a, gen_helper_sme2_smlall= _idx_s) +TRANS_FEAT(SMLSLL_nx_s, aa64_sme2, do_smlall_nx, a, gen_helper_sme2_smlsll= _idx_s) +TRANS_FEAT(UMLALL_nx_s, aa64_sme2, do_smlall_nx, a, gen_helper_sme2_umlall= _idx_s) +TRANS_FEAT(UMLSLL_nx_s, aa64_sme2, do_smlall_nx, a, gen_helper_sme2_umlsll= _idx_s) +TRANS_FEAT(USMLALL_nx_s, aa64_sme2, do_smlall_nx, a, gen_helper_sme2_usmla= ll_idx_s) +TRANS_FEAT(SUMLALL_nx_s, aa64_sme2, do_smlall_nx, a, gen_helper_sme2_sumla= ll_idx_s) + +TRANS_FEAT(SMLALL_nx_d, aa64_sme2_i16i64, do_smlall_nx, a, gen_helper_sme2= _smlall_idx_d) +TRANS_FEAT(SMLSLL_nx_d, aa64_sme2_i16i64, do_smlall_nx, a, gen_helper_sme2= _smlsll_idx_d) +TRANS_FEAT(UMLALL_nx_d, aa64_sme2_i16i64, do_smlall_nx, a, gen_helper_sme2= _umlall_idx_d) +TRANS_FEAT(UMLSLL_nx_d, aa64_sme2_i16i64, do_smlall_nx, a, gen_helper_sme2= _umlsll_idx_d) --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646638; cv=none; d=zohomail.com; s=zohoarc; b=hE9PGtk6GoqJkKjQCCdfHRWflTZ7YvR1zTvpP+w15O4k2egwX2ZFkQsP91kKzFKI+7kUaCMXKadMQECBMisOoQyy7YJ8MDKsdu8qxdRD4j35ruBKLzMz6cmANUrWQz6MI1omiMbwmxSwMzxVLXGZpfwkbMLVU52DmLvsus2I0iE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646638; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=Mr02KBcb0q1s0QBC40YxEnfsn/Cfw2nIIEa5P/5YfrM=; b=B9tXXwJVslHB0NYG1/13gFDNXVMcLlMIMdxWNUA9UClbHvxvxRp4b/fMkaf3IViCUOe+x3VRjSQqxHFHTMGwQdSEbPieoCIhWjt3Fh4iNRGQxDFNYL2LJoq9nNYmu+C5l8mIekhuj8SXMGXmUORM+uJoBkA7Q+PgFvkyzFzD9OU= 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 1751646638115475.53596223438615; Fri, 4 Jul 2025 09:30:38 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjEx-0001me-4a; Fri, 04 Jul 2025 12:26:19 -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 1uXjEh-00014k-N4 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:03 -0400 Received: from mail-wr1-x429.google.com ([2a00:1450:4864:20::429]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjEd-0006QH-Ox for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:02 -0400 Received: by mail-wr1-x429.google.com with SMTP id ffacd0b85a97d-3a5257748e1so869366f8f.2 for ; Fri, 04 Jul 2025 09:25:58 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.57 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646358; x=1752251158; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=Mr02KBcb0q1s0QBC40YxEnfsn/Cfw2nIIEa5P/5YfrM=; b=vTtnmAvXfCfb9qbdxmQBy0YThqN9jprh4Y9LcPEUHIGW91ceEelPReoedYzm0ZjxnR pHNb9Y5sNVazKAQ2jIGKdMHnpJRXetPmGS1ANRDsMFNykVquiuwT0/mI97Lr4m5aIGsD Nyh7Ttoe+nH4dw8lLnqpxFF03Al6nACLw+tuLo3HDvDL6ReIyJx8iI4jDcU6k2x31LKM ugK3qKzGpCe9/Xb4v8UQ1hnWErakZtGnzFKkg3juJxnXc9kxJ7Ol98yPjG0HmAKX8haq Ddm5g0tGYzn18Fr2NXSmlG9yUxCbY3WW45xYtD66CjQJR+SJEYGQMI5FzQhuyXx6AdWU /WyQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646358; x=1752251158; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Mr02KBcb0q1s0QBC40YxEnfsn/Cfw2nIIEa5P/5YfrM=; b=Z++89wUgBZOFsO6707IXWFyTeYEJAFXX97zrpGKi2M78HpuqCeG6yTrl9vLWNCFMTA P5nHrTBDhFNvM+5aaGkwAor7j64WSbsH3LOd1GWOQaXRbWPg4NuIO8PzYdxGbNIZWyKy 4fBulEaV/nhYAVqJqC9io3cxjzJLk8RU88Xs0Sl+8Vx3l4+Kv1VEdGD/Xf2Euy26IrqM 7S3tKtVPC2LO8gIe3e7Uo0QpfEChtfK5gDLkykH68r4Tq+V2BJPmbGpVHx3+MnOmwCEt Kj3GoP8+bDsfrbgSh4yrgE8MYWCABq34JduP//cJc01vw8Mg6FJUiAyS88Qgkdxut2L2 X/YA== X-Gm-Message-State: AOJu0YzNHGWtl46/9nnSqDb9HRGUUNoJTDA8k5DSgTbcOCBCgnewaAur 2S431QLX6NDwYum1tIpL9EXf19IaXCX+fRo3DUg1meSJJc/zgHwYT1DF/cBs2Xs6MhVXwn8qz0g rx3vx X-Gm-Gg: ASbGncvlNnk3n0SbG2hKBxEn3JQp0l/w2PHXVRLgHjt6YQ45VgOIC/dKKB3p98Ds3KA L7Ez4DOUnebiHLAFF8Cldk/chCdS7luHcaBKO1js9gqZUc2zN0fhP4u/e0gg+2saf8PEPlIlZsj zxFA3DlkHijh+m4E9Wv4gEgLgGcyKMAISGV5OFW0dc3iS/OxuuHeVktv14x/B0O8kXcFATN8bkO OqKT2PuvokBtAJ933PgfbouqQL+2Iz15tH0HQxeUhd+u/UYXf++1C+hgR8kaiwSet8aDH8XHp7K w6/6A+PfMErMGA8q5hN+CjuDLjTrJss/5fAvh9Nomse93XY1Sz7RHljCEHoenXmELR2w X-Google-Smtp-Source: AGHT+IFN1h/RXdA0Jh/hV1pLVHPzTmznkgzvx+yQ+GGylgd2kWPJ3MPDAEGHjOBPhdHduMd2wJcQ9Q== X-Received: by 2002:a05:6000:2910:b0:3a4:ec23:dba7 with SMTP id ffacd0b85a97d-3b497038e99mr2315760f8f.31.1751646357808; Fri, 04 Jul 2025 09:25:57 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 059/119] target/arm: Rename gvec_fml[as]_[hs] with _nf_ infix Date: Fri, 4 Jul 2025 17:23:59 +0100 Message-ID: <20250704162501.249138-60-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::429; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x429.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751646639674116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Emphasize the non-fused nature of these multiply-add. Matches other helpers such as gvec_rsqrts_nf_[hs]. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-48-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/helper.h | 8 ++++---- target/arm/tcg/translate-neon.c | 4 ++-- target/arm/tcg/vec_helper.c | 8 ++++---- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/target/arm/tcg/helper.h b/target/arm/tcg/helper.h index c4a208e3ba8..b741470b517 100644 --- a/target/arm/tcg/helper.h +++ b/target/arm/tcg/helper.h @@ -790,11 +790,11 @@ DEF_HELPER_FLAGS_5(gvec_recps_nf_s, TCG_CALL_NO_RWG, = void, ptr, ptr, ptr, fpst, DEF_HELPER_FLAGS_5(gvec_rsqrts_nf_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr,= fpst, i32) DEF_HELPER_FLAGS_5(gvec_rsqrts_nf_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr,= fpst, i32) =20 -DEF_HELPER_FLAGS_5(gvec_fmla_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, fpst= , i32) -DEF_HELPER_FLAGS_5(gvec_fmla_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, fpst= , i32) +DEF_HELPER_FLAGS_5(gvec_fmla_nf_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, f= pst, i32) +DEF_HELPER_FLAGS_5(gvec_fmla_nf_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, f= pst, i32) =20 -DEF_HELPER_FLAGS_5(gvec_fmls_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, fpst= , i32) -DEF_HELPER_FLAGS_5(gvec_fmls_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, fpst= , i32) +DEF_HELPER_FLAGS_5(gvec_fmls_nf_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, f= pst, i32) +DEF_HELPER_FLAGS_5(gvec_fmls_nf_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, f= pst, i32) =20 DEF_HELPER_FLAGS_5(gvec_vfma_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, fpst= , i32) DEF_HELPER_FLAGS_5(gvec_vfma_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, fpst= , i32) diff --git a/target/arm/tcg/translate-neon.c b/target/arm/tcg/translate-neo= n.c index ea043367976..844d2e29e4c 100644 --- a/target/arm/tcg/translate-neon.c +++ b/target/arm/tcg/translate-neon.c @@ -1010,8 +1010,8 @@ DO_3S_FP_GVEC(VACGE, gen_helper_gvec_facge_s, gen_hel= per_gvec_facge_h) DO_3S_FP_GVEC(VACGT, gen_helper_gvec_facgt_s, gen_helper_gvec_facgt_h) DO_3S_FP_GVEC(VMAX, gen_helper_gvec_fmax_s, gen_helper_gvec_fmax_h) DO_3S_FP_GVEC(VMIN, gen_helper_gvec_fmin_s, gen_helper_gvec_fmin_h) -DO_3S_FP_GVEC(VMLA, gen_helper_gvec_fmla_s, gen_helper_gvec_fmla_h) -DO_3S_FP_GVEC(VMLS, gen_helper_gvec_fmls_s, gen_helper_gvec_fmls_h) +DO_3S_FP_GVEC(VMLA, gen_helper_gvec_fmla_nf_s, gen_helper_gvec_fmla_nf_h) +DO_3S_FP_GVEC(VMLS, gen_helper_gvec_fmls_nf_s, gen_helper_gvec_fmls_nf_h) DO_3S_FP_GVEC(VFMA, gen_helper_gvec_vfma_s, gen_helper_gvec_vfma_h) DO_3S_FP_GVEC(VFMS, gen_helper_gvec_vfms_s, gen_helper_gvec_vfms_h) DO_3S_FP_GVEC(VRECPS, gen_helper_gvec_recps_nf_s, gen_helper_gvec_recps_nf= _h) diff --git a/target/arm/tcg/vec_helper.c b/target/arm/tcg/vec_helper.c index baea6d8b894..4b7de5016ee 100644 --- a/target/arm/tcg/vec_helper.c +++ b/target/arm/tcg/vec_helper.c @@ -1668,11 +1668,11 @@ void HELPER(NAME)(void *vd, void *vn, void *vm, = \ clear_tail(d, oprsz, simd_maxsz(desc)); = \ } =20 -DO_MULADD(gvec_fmla_h, float16_muladd_nf, float16) -DO_MULADD(gvec_fmla_s, float32_muladd_nf, float32) +DO_MULADD(gvec_fmla_nf_h, float16_muladd_nf, float16) +DO_MULADD(gvec_fmla_nf_s, float32_muladd_nf, float32) =20 -DO_MULADD(gvec_fmls_h, float16_mulsub_nf, float16) -DO_MULADD(gvec_fmls_s, float32_mulsub_nf, float32) +DO_MULADD(gvec_fmls_nf_h, float16_mulsub_nf, float16) +DO_MULADD(gvec_fmls_nf_s, float32_mulsub_nf, float32) =20 DO_MULADD(gvec_vfma_h, float16_muladd_f, float16) DO_MULADD(gvec_vfma_s, float32_muladd_f, float32) --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647274; cv=none; d=zohomail.com; s=zohoarc; b=ZlgFr+slDxFWAQ5HyEAjypng6y3stT4LY0y9g4025CNOeKz3GfVyHX6dmeaFfkNpQLgXlFYLqZKsKs1T/X5SHG97yMIZ/hZsRaTYT+m5uMJ+OnGqlXzNvO/763UmifHttZX6BCJLiu+2mohnidBo9wj4ex8SBgDIi/DJ5nfVdT8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647274; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=JtN1RfLtfnRsgJNTbmFjiT7GeIX2OZIYj/H6GzYnMHg=; b=dM82LANRufZZDtJBqS/lrg6EBNsD5U2c6/H+TMrHj61I7K5oHEPDGUv/B4niL02NRROuZPXKw7/fh6sNN7TObKWJooyRfjOUnVdkqoNJk3JhI54Ft7xF9sDU+wz9lcXTjc0qP6YlXuFE1GI5oaITPKAAZ45d4cZ0u5o+kRMt7NM= 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 1751647274756317.6684150544206; Fri, 4 Jul 2025 09:41:14 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjEv-0001gi-Ri; Fri, 04 Jul 2025 12:26:17 -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 1uXjEj-0001G1-Vh for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:06 -0400 Received: from mail-wm1-x32b.google.com ([2a00:1450:4864:20::32b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjEf-0006Qu-Kg for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:04 -0400 Received: by mail-wm1-x32b.google.com with SMTP id 5b1f17b1804b1-451dbe494d6so12228025e9.1 for ; Fri, 04 Jul 2025 09:26:00 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.57 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646359; x=1752251159; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=JtN1RfLtfnRsgJNTbmFjiT7GeIX2OZIYj/H6GzYnMHg=; b=o8hhXpaOv3gsGTGxiW1Vl9ldZ91PijpaXHqJ+ZVsb+stgsffnxmf086xp8Mw310sQU p2711LUc8U8r5tGpgvMlHeYOB/Q+lUQIZZF6Jatj0fYBzjiI11E05ZtdtgNEAtkhxzy9 f0HWG/XEV8xlIelSLejE0yMHRW4zo4mUDt+aW6nPS68kDVIPY8oCUnczceZeGr+xBcE4 TFcuHCwgU22E+JKfY3fpIavxTqN4xvAgEt9t/1XRPapsy6D0g2WfpYRjCa2qrcGn5+uV wnjLJgEwOAaPDFgN3WMhYMXxKDArI7Us5/xm2tVhKXxO/5TcHCrxOi3dZHHs3gFsiOG/ pVig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646359; x=1752251159; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=JtN1RfLtfnRsgJNTbmFjiT7GeIX2OZIYj/H6GzYnMHg=; b=lapxOOLMCEzBsGdz6LeVMjQJRebohPcq6FXNADBiJSIjRQ8+KErfNy+o7mptSvGGDZ NeOMJR1JlSD0T9oFFHPTQScaDxB35X8neHZGiRA6JPkJ35/YAgFGzFN4brTnlYj5U5Et X+NLsqc3hpbbMSqhR2TK90wvSPdUQ6cY6QsjOrJjvi4xwkyBgyVte4Vy4yrSTddzfndt v4DspdtPEUYlHuuP4kiBvc6I4LP+5OYnfV92jR+E0ijDIFYNraCPHtycVM4eXq412msB aTQ67QFKC3OpYNeIhBn1ksn5b+vu/qop6Q5ah8loZQvR40ZBzBBb6IKvX6puADpowpxF ZEIw== X-Gm-Message-State: AOJu0YzWIN+J4c1jPExtJTeWuARPvh6PuXhi+eCajg/JWJB04/Erdeob ZVgI81Z/BroEuYA5F0K7tcVzf74zUlYMbk+K6XXhfSuJoTTyt2Q7IV8ZpfoyJuE/OXROTuyW5MW ayseV X-Gm-Gg: ASbGnctdX0pOQ/rXGQQ7qKzr5lxlA7WmYHjiP+zZNMEyrnezl0ec+3HSBbJ05zBe3VP Yv31i0vlO6rh7q4x7Eaqsgl/H0wM3zlzRbs+sYIH5QtGpASL7ZpdjLOYyAK0aWA9AL1NCQ+N6Sr /sOQ2jHOI22DczuDLIDQRMSQGc18BnePwD8c4SFjaFoRl9K1yES1BMSrUlOZIopkAgfQ2yDzhaK Oe8PUFSMz/V8coFQvmGkjDhw52j2eyN3lO2DlFjwZAWwi88vgFRlCakD52u4iR735WRXxiC4Gn+ bjO7tJSWAV5+0HaRr2NDo/IK9CDMSE05TcpXyXIWHi96HKkUj4C37XZnXyUHsGr7Juk9tbyuiEm srEs= X-Google-Smtp-Source: AGHT+IE2JfbN6bZdRTjqoPPXiqBxvO+QSY1jZv1Jm34rUYUAdEBUG7mte2R7wUT2qRdh9HI022BTkw== X-Received: by 2002:a05:6000:470f:b0:3b2:fe46:9812 with SMTP id ffacd0b85a97d-3b497015268mr2286051f8f.19.1751646359438; Fri, 04 Jul 2025 09:25:59 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 060/119] target/arm: Implement SME2 FMLA, FMLS Date: Fri, 4 Jul 2025 17:24:00 +0100 Message-ID: <20250704162501.249138-61-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::32b; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x32b.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751647275460116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-49-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/sme.decode | 48 +++++++++++++++++ target/arm/tcg/translate-sme.c | 95 ++++++++++++++++++++++++++++++++++ 2 files changed, 143 insertions(+) diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 934e4a802ea..962ffae3d65 100644 --- a/target/arm/tcg/sme.decode +++ b/target/arm/tcg/sme.decode @@ -370,6 +370,20 @@ USMLALL_n1_s 11000001 001 1 .... 0 .. 000 ..... 001= 0 . @azz_nx1_o1x4 n=3D4 SUMLALL_n1_s 11000001 001 0 .... 0 .. 000 ..... 1010 . @azz_nx1_o1x4 = n=3D2 SUMLALL_n1_s 11000001 001 1 .... 0 .. 000 ..... 1010 . @azz_nx1_o1x4 = n=3D4 =20 +FMLA_n1_h 11000001 001 0 .... 0 .. 111 ..... 00 ... @azz_nx1_o3 n= =3D2 +FMLA_n1_s 11000001 001 0 .... 0 .. 110 ..... 00 ... @azz_nx1_o3 n= =3D2 +FMLA_n1_d 11000001 011 0 .... 0 .. 110 ..... 00 ... @azz_nx1_o3 n= =3D2 +FMLA_n1_h 11000001 001 1 .... 0 .. 111 ..... 00 ... @azz_nx1_o3 n= =3D4 +FMLA_n1_s 11000001 001 1 .... 0 .. 110 ..... 00 ... @azz_nx1_o3 n= =3D4 +FMLA_n1_d 11000001 011 1 .... 0 .. 110 ..... 00 ... @azz_nx1_o3 n= =3D4 + +FMLS_n1_h 11000001 001 0 .... 0 .. 111 ..... 01 ... @azz_nx1_o3 n= =3D2 +FMLS_n1_s 11000001 001 0 .... 0 .. 110 ..... 01 ... @azz_nx1_o3 n= =3D2 +FMLS_n1_d 11000001 011 0 .... 0 .. 110 ..... 01 ... @azz_nx1_o3 n= =3D2 +FMLS_n1_h 11000001 001 1 .... 0 .. 111 ..... 01 ... @azz_nx1_o3 n= =3D4 +FMLS_n1_s 11000001 001 1 .... 0 .. 110 ..... 01 ... @azz_nx1_o3 n= =3D4 +FMLS_n1_d 11000001 011 1 .... 0 .. 110 ..... 01 ... @azz_nx1_o3 n= =3D4 + ### SME2 Multi-vector Multiple Array Vectors =20 %zn_ax2 6:4 !function=3Dtimes_2 @@ -470,6 +484,20 @@ UMLSLL_nn_d 11000001 111 ...01 0 .. 000 ...00 1100= . @azz_4x4_o1x4 USMLALL_nn_s 11000001 101 ....0 0 .. 000 ....0 0010 . @azz_2x2_o1x4 USMLALL_nn_s 11000001 101 ...01 0 .. 000 ...00 0010 . @azz_4x4_o1x4 =20 +FMLA_nn_h 11000001 101 ....0 0 .. 100 ....0 01 ... @azz_2x2_o3 +FMLA_nn_s 11000001 101 ....0 0 .. 110 ....0 00 ... @azz_2x2_o3 +FMLA_nn_d 11000001 111 ....0 0 .. 110 ....0 00 ... @azz_2x2_o3 +FMLA_nn_h 11000001 101 ...01 0 .. 100 ...00 01 ... @azz_4x4_o3 +FMLA_nn_s 11000001 101 ...01 0 .. 110 ...00 00 ... @azz_4x4_o3 +FMLA_nn_d 11000001 111 ...01 0 .. 110 ...00 00 ... @azz_4x4_o3 + +FMLS_nn_h 11000001 101 ....0 0 .. 100 ....0 11 ... @azz_2x2_o3 +FMLS_nn_s 11000001 101 ....0 0 .. 110 ....0 01 ... @azz_2x2_o3 +FMLS_nn_d 11000001 111 ....0 0 .. 110 ....0 01 ... @azz_2x2_o3 +FMLS_nn_h 11000001 101 ...01 0 .. 100 ...00 11 ... @azz_4x4_o3 +FMLS_nn_s 11000001 101 ...01 0 .. 110 ...00 01 ... @azz_4x4_o3 +FMLS_nn_d 11000001 111 ...01 0 .. 110 ...00 01 ... @azz_4x4_o3 + ### SME2 Multi-vector Indexed =20 &azx_n n off rv zn zm idx @@ -617,3 +645,23 @@ USMLALL_nx_s 11000001 0001 .... 1 .. 0.. ...01 00 .= .. @azx_4x1_i4_o1 SUMLALL_nx_s 11000001 0000 .... . .. ... ..... 101 .. @azx_1x1_i4_o2 SUMLALL_nx_s 11000001 0001 .... 0 .. 0.. ....1 10 ... @azx_2x1_i4_o1 SUMLALL_nx_s 11000001 0001 .... 1 .. 0.. ...01 10 ... @azx_4x1_i4_o1 + +%idx3_10_3 10:2 3:1 +@azx_2x1_i3_o3 ........ .... zm:4 . .. ... ..... .. off:3 \ + &azx_n n=3D2 rv=3D%mova_rv zn=3D%zn_ax2 idx=3D%idx3_10_3 +@azx_4x1_i3_o3 ........ .... zm:4 . .. ... ..... .. off:3 \ + &azx_n n=3D4 rv=3D%mova_rv zn=3D%zn_ax4 idx=3D%idx3_10_3 + +FMLA_nx_h 11000001 0001 .... 0 .. 1.. ....0 0 .... @azx_2x1_i3_o3 +FMLA_nx_s 11000001 0101 .... 0 .. 0.. ....0 00 ... @azx_2x1_i2_o3 +FMLA_nx_d 11000001 1101 .... 0 .. 00. ....0 00 ... @azx_2x1_i1_o3 +FMLA_nx_h 11000001 0001 .... 1 .. 1.. ...00 0 .... @azx_4x1_i3_o3 +FMLA_nx_s 11000001 0101 .... 1 .. 0.. ...00 00 ... @azx_4x1_i2_o3 +FMLA_nx_d 11000001 1101 .... 1 .. 00. ...00 00 ... @azx_4x1_i1_o3 + +FMLS_nx_h 11000001 0001 .... 0 .. 1.. ....0 1 .... @azx_2x1_i3_o3 +FMLS_nx_s 11000001 0101 .... 0 .. 0.. ....0 10 ... @azx_2x1_i2_o3 +FMLS_nx_d 11000001 1101 .... 0 .. 00. ....0 10 ... @azx_2x1_i1_o3 +FMLS_nx_h 11000001 0001 .... 1 .. 1.. ...00 1 .... @azx_4x1_i3_o3 +FMLS_nx_s 11000001 0101 .... 1 .. 0.. ...00 10 ... @azx_4x1_i2_o3 +FMLS_nx_d 11000001 1101 .... 1 .. 00. ...00 10 ... @azx_4x1_i1_o3 diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index 070cebc5738..5f513696090 100644 --- a/target/arm/tcg/translate-sme.c +++ b/target/arm/tcg/translate-sme.c @@ -815,6 +815,47 @@ TRANS_FEAT(SUB_azz_nn_d, aa64_sme2_i16i64, do_azz_nn, = a, MO_64, tcg_gen_gvec_sub */ #define FPST_ENV -1 =20 +static bool do_azz_fp(DisasContext *s, int nreg, int nsel, + int rv, int off, int zn, int zm, + int data, int shsel, bool multi, int fpst, + gen_helper_gvec_3_ptr *fn) +{ + if (sme_smza_enabled_check(s)) { + int svl =3D streaming_vec_reg_size(s); + int vstride =3D svl / nreg; + TCGv_ptr t_za =3D get_zarray(s, rv, off, nreg, nsel); + TCGv_ptr t, ptr; + + if (fpst >=3D 0) { + ptr =3D fpstatus_ptr(fpst); + } else { + ptr =3D tcg_env; + } + t =3D tcg_temp_new_ptr(); + + for (int r =3D 0; r < nreg; ++r) { + TCGv_ptr t_zn =3D vec_full_reg_ptr(s, zn); + TCGv_ptr t_zm =3D vec_full_reg_ptr(s, zm); + + for (int i =3D 0; i < nsel; ++i) { + int o_za =3D (r * vstride + i) * sizeof(ARMVectorReg); + int desc =3D simd_desc(svl, svl, data | (i << shsel)); + + tcg_gen_addi_ptr(t, t_za, o_za); + fn(t, t_zn, t_zm, ptr, tcg_constant_i32(desc)); + } + + /* + * For multiple-and-single vectors, Zn may wrap. + * For multiple vectors, both Zn and Zm are aligned. + */ + zn =3D (zn + 1) % 32; + zm +=3D multi; + } + } + return true; +} + static bool do_azz_acc_fp(DisasContext *s, int nreg, int nsel, int rv, int off, int zn, int zm, int data, int shsel, bool multi, int fpst, @@ -963,6 +1004,60 @@ static bool do_vdot(DisasContext *s, arg_azx_n *a, ge= n_helper_gvec_4_ptr *fn) TRANS_FEAT(FVDOT, aa64_sme, do_vdot, a, gen_helper_sme2_fvdot_idx_h) TRANS_FEAT(BFVDOT, aa64_sme, do_vdot, a, gen_helper_sme2_bfvdot_idx) =20 +static bool do_fmla(DisasContext *s, arg_azz_n *a, bool multi, + ARMFPStatusFlavour fpst, gen_helper_gvec_3_ptr *fn) +{ + return do_azz_fp(s, a->n, 1, a->rv, a->off, a->zn, a->zm, + 0, 0, multi, fpst, fn); +} + +TRANS_FEAT(FMLA_n1_h, aa64_sme_f16f16, do_fmla, a, false, FPST_ZA_F16, + gen_helper_gvec_vfma_h) +TRANS_FEAT(FMLS_n1_h, aa64_sme_f16f16, do_fmla, a, false, FPST_ZA_F16, + s->fpcr_ah ? gen_helper_gvec_ah_vfms_h : gen_helper_gvec_vfms_h) +TRANS_FEAT(FMLA_nn_h, aa64_sme_f16f16, do_fmla, a, true, FPST_ZA_F16, + gen_helper_gvec_vfma_h) +TRANS_FEAT(FMLS_nn_h, aa64_sme_f16f16, do_fmla, a, true, FPST_ZA_F16, + s->fpcr_ah ? gen_helper_gvec_ah_vfms_h : gen_helper_gvec_vfms_h) + +TRANS_FEAT(FMLA_n1_s, aa64_sme2, do_fmla, a, false, FPST_ZA, + gen_helper_gvec_vfma_s) +TRANS_FEAT(FMLS_n1_s, aa64_sme2, do_fmla, a, false, FPST_ZA, + s->fpcr_ah ? gen_helper_gvec_ah_vfms_s : gen_helper_gvec_vfms_s) +TRANS_FEAT(FMLA_nn_s, aa64_sme2, do_fmla, a, true, FPST_ZA, + gen_helper_gvec_vfma_s) +TRANS_FEAT(FMLS_nn_s, aa64_sme2, do_fmla, a, true, FPST_ZA, + s->fpcr_ah ? gen_helper_gvec_ah_vfms_s : gen_helper_gvec_vfms_s) + +TRANS_FEAT(FMLA_n1_d, aa64_sme2_f64f64, do_fmla, a, false, FPST_ZA, + gen_helper_gvec_vfma_d) +TRANS_FEAT(FMLS_n1_d, aa64_sme2_f64f64, do_fmla, a, false, FPST_ZA, + s->fpcr_ah ? gen_helper_gvec_ah_vfms_d : gen_helper_gvec_vfms_d) +TRANS_FEAT(FMLA_nn_d, aa64_sme2_f64f64, do_fmla, a, true, FPST_ZA, + gen_helper_gvec_vfma_d) +TRANS_FEAT(FMLS_nn_d, aa64_sme2_f64f64, do_fmla, a, true, FPST_ZA, + s->fpcr_ah ? gen_helper_gvec_ah_vfms_d : gen_helper_gvec_vfms_d) + +static bool do_fmla_nx(DisasContext *s, arg_azx_n *a, + ARMFPStatusFlavour fpst, gen_helper_gvec_4_ptr *fn) +{ + return do_azz_acc_fp(s, a->n, 1, a->rv, a->off, a->zn, a->zm, + a->idx, 0, false, fpst, fn); +} + +TRANS_FEAT(FMLA_nx_h, aa64_sme_f16f16, do_fmla_nx, a, FPST_ZA_F16, + gen_helper_gvec_fmla_idx_h) +TRANS_FEAT(FMLS_nx_h, aa64_sme_f16f16, do_fmla_nx, a, FPST_ZA_F16, + s->fpcr_ah ? gen_helper_gvec_ah_fmls_idx_h : gen_helper_gvec_fm= ls_idx_h) +TRANS_FEAT(FMLA_nx_s, aa64_sme2, do_fmla_nx, a, FPST_ZA, + gen_helper_gvec_fmla_idx_s) +TRANS_FEAT(FMLS_nx_s, aa64_sme2, do_fmla_nx, a, FPST_ZA, + s->fpcr_ah ? gen_helper_gvec_ah_fmls_idx_s : gen_helper_gvec_fm= ls_idx_s) +TRANS_FEAT(FMLA_nx_d, aa64_sme2_f64f64, do_fmla_nx, a, FPST_ZA, + gen_helper_gvec_fmla_idx_d) +TRANS_FEAT(FMLS_nx_d, aa64_sme2_f64f64, do_fmla_nx, a, FPST_ZA, + s->fpcr_ah ? gen_helper_gvec_ah_fmls_idx_d : gen_helper_gvec_fm= ls_idx_d) + /* * Expand array multi-vector single (n1), array multi-vector (nn), * and array multi-vector indexed (nx), for integer accumulate. --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647461; cv=none; d=zohomail.com; s=zohoarc; b=fzHY3t3EzRU9mXxtxbfQr//O/3Ayx4RFby6UrvQ50Jj9v05jZLUaPcydyY3r74wY7xgyouMYSOttYoGOf0l+/OQ/m280szT6CyszJefo6l/47WRbHQR8LoxdwgkqALhw0qjR4fwVwr71XypCetXNXgYYZopes4eWAtK37mkmHHU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647461; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=bLNa56gFt9vvTDz7HW3N2VbUwwZsJwkhQJewOB2ctLk=; b=T2LkG1m0k/2DOXsfXEfB3FpCTXyBB2GplUhuviQbHAX+AAXi6nj/IXi+q6EalZsljccQEDtCLXAYkPi6tunCcNQLAfcfICAgqFw/quhS4zYLQpsqYtz7PrqfEDPLrRPyI/PNJFYuLRkYxtxm+nugJObffE2bpjjuL4bo08Q5tJ8= 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 1751647461744790.5379578065847; Fri, 4 Jul 2025 09:44:21 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjF2-00022O-4Z; Fri, 04 Jul 2025 12:26:24 -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 1uXjEj-0001G0-Vz for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:06 -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 1uXjEg-0006RV-72 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:05 -0400 Received: by mail-wm1-x331.google.com with SMTP id 5b1f17b1804b1-454aaade1fbso11819275e9.3 for ; Fri, 04 Jul 2025 09:26:01 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.25.59 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:25:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646360; x=1752251160; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=bLNa56gFt9vvTDz7HW3N2VbUwwZsJwkhQJewOB2ctLk=; b=oW0EuGVs2efShe6YuxhAD0x/7+7vMp3VorrNVqVwjLv6X4Sef7QhOQmUWBrBXhX2WQ c30+c8Ro7903/NuHnib9RjhLqYW3e4W3i/+F+0DUevYJAqy3AIYfrkDiRogr1LZPV2v3 qlyQFqKnYmmpFeNNqRXK/m9GeRk3/MbIF/RL+nuKojf9icvZghbiDikXC4i1Oj/TLfP3 +bWrdW5mGlCoKRNxXGGawyZWnq0/4qx3WSAs+LhgkGQ8Wi6Kl0Wv8h0yioIviOcB91Nv 0q1ZGN/KNPb5cxrhHURYOLuWD9RQuoY5z1oVFnJkR73oaUvgU1i3FY+KRtybI/+BLrPi yTnQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646360; x=1752251160; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=bLNa56gFt9vvTDz7HW3N2VbUwwZsJwkhQJewOB2ctLk=; b=R8q/DFsH9gvam69++X89fnShb3dTuzKb3KhtxjBPmBvqHoF5933DfNGcEXfpthlLoZ 5Jvr8w7rm6s6t1BpMGdsmQ8cvBzabZooTIT1td+WqoT+w5zm3DtDXu1R7m8uh+5/SMx8 Ep929iI+9xyGe250qCr5XCJOcjWDRu0lRmiEbCQkLRXCs8kPCoUCcQfsCXlRHdBfcRBI c9uzif5D6OLzCDsX3pLnFsoiVG/fBSpuMF4blTJ6g/c34xwq5N19HC/E181nzrZfHKAz Xs9IaUZQrLPmpms8nrsm7mELrLqVdaCUKGD/VvuEXqd5NzUi2br1WHxo3mU0EdIcMi0j QXhQ== X-Gm-Message-State: AOJu0YyrIUpBqPI17hFjlU4uVlMCR86HOJb9a8SuJ/VU7vsBONDiN75V F0fhlyJa/MJf1gO2bDahjzRsssym5BF92oB8bbFdveWhhVEhjQoPY9FvXxvG1c8EufxB4+agtSB VassR X-Gm-Gg: ASbGncsCcpVhBAY550cqTMJwhLYXWPKcPqRcY2k0lni/6DDIUXV5X6tGMyfg+6FL/yw Z4vmmerBy4GjEzCfpwjuq6VIcrysajf9hCs3F6kcrawuefDYqhMBQ+8ED1F+5dROk8ejUd49Czm /38FTBR7dcTyvO/uhLe0B2KBrJulWGU3PuoAqVzSVCgFo1LZtwtpiVDws45T60+/sgcHyfMX0Ux j+lFQ090zgzq/93JvzF88kqsiDUeyik/cCoqQh+KnAEzNHzh8RuQOONYk/cIERMyQVvc29QH+Md hF4voN2f3gS97yAEOW35DT3EU7NSjkXCeTrckKAmbbzh7un8iGfGAOaiLAwz9iIbwYwrAeOwdnW GQ5U= X-Google-Smtp-Source: AGHT+IGQRP9mtBKhTcJenTWxLYvj5lA62N5NN43T79QVtuzkdY5FctCm8utAU+YWdQpsXQR2XlxCCQ== X-Received: by 2002:a05:6000:2112:b0:3a4:ec23:dba5 with SMTP id ffacd0b85a97d-3b49700c571mr1885763f8f.5.1751646360477; Fri, 04 Jul 2025 09:26:00 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 061/119] target/arm: Implement SME2 BFMLA, BFMLS Date: Fri, 4 Jul 2025 17:24:01 +0100 Message-ID: <20250704162501.249138-62-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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=peter.maydell@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 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: 1751647463434116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-50-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/helper.h | 9 +++++++++ target/arm/tcg/sme.decode | 18 ++++++++++++++++++ target/arm/tcg/translate-sme.c | 14 ++++++++++++++ target/arm/tcg/vec_helper.c | 26 ++++++++++++++++++++++++++ 4 files changed, 67 insertions(+) diff --git a/target/arm/tcg/helper.h b/target/arm/tcg/helper.h index b741470b517..37dd384659c 100644 --- a/target/arm/tcg/helper.h +++ b/target/arm/tcg/helper.h @@ -799,14 +799,17 @@ DEF_HELPER_FLAGS_5(gvec_fmls_nf_s, TCG_CALL_NO_RWG, v= oid, ptr, ptr, ptr, fpst, i DEF_HELPER_FLAGS_5(gvec_vfma_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, fpst= , i32) DEF_HELPER_FLAGS_5(gvec_vfma_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, fpst= , i32) DEF_HELPER_FLAGS_5(gvec_vfma_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, fpst= , i32) +DEF_HELPER_FLAGS_5(gvec_bfmla, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, fpst,= i32) =20 DEF_HELPER_FLAGS_5(gvec_vfms_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, fpst= , i32) DEF_HELPER_FLAGS_5(gvec_vfms_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, fpst= , i32) DEF_HELPER_FLAGS_5(gvec_vfms_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, fpst= , i32) +DEF_HELPER_FLAGS_5(gvec_bfmls, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, fpst,= i32) =20 DEF_HELPER_FLAGS_5(gvec_ah_vfms_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, f= pst, i32) DEF_HELPER_FLAGS_5(gvec_ah_vfms_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, f= pst, i32) DEF_HELPER_FLAGS_5(gvec_ah_vfms_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, f= pst, i32) +DEF_HELPER_FLAGS_5(gvec_ah_bfmls, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, fp= st, i32) =20 DEF_HELPER_FLAGS_5(gvec_ftsmul_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, fpst, i32) @@ -838,6 +841,8 @@ DEF_HELPER_FLAGS_6(gvec_fmla_idx_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, fpst, i32) DEF_HELPER_FLAGS_6(gvec_fmla_idx_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, fpst, i32) +DEF_HELPER_FLAGS_6(gvec_bfmla_idx, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, ptr, fpst, i32) =20 DEF_HELPER_FLAGS_6(gvec_fmls_idx_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, fpst, i32) @@ -845,6 +850,8 @@ DEF_HELPER_FLAGS_6(gvec_fmls_idx_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, fpst, i32) DEF_HELPER_FLAGS_6(gvec_fmls_idx_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, fpst, i32) +DEF_HELPER_FLAGS_6(gvec_bfmls_idx, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, ptr, fpst, i32) =20 DEF_HELPER_FLAGS_6(gvec_ah_fmls_idx_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, fpst, i32) @@ -852,6 +859,8 @@ DEF_HELPER_FLAGS_6(gvec_ah_fmls_idx_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, fpst, i32) DEF_HELPER_FLAGS_6(gvec_ah_fmls_idx_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, fpst, i32) +DEF_HELPER_FLAGS_6(gvec_ah_bfmls_idx, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, ptr, fpst, i32) =20 DEF_HELPER_FLAGS_5(gvec_uqadd_b, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, i32) diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 962ffae3d65..b3dd3bffc38 100644 --- a/target/arm/tcg/sme.decode +++ b/target/arm/tcg/sme.decode @@ -370,16 +370,22 @@ USMLALL_n1_s 11000001 001 1 .... 0 .. 000 ..... 00= 10 . @azz_nx1_o1x4 n=3D4 SUMLALL_n1_s 11000001 001 0 .... 0 .. 000 ..... 1010 . @azz_nx1_o1x4 = n=3D2 SUMLALL_n1_s 11000001 001 1 .... 0 .. 000 ..... 1010 . @azz_nx1_o1x4 = n=3D4 =20 +BFMLA_n1 11000001 011 0 .... 0 .. 111 ..... 00 ... @azz_nx1_o3 n= =3D2 FMLA_n1_h 11000001 001 0 .... 0 .. 111 ..... 00 ... @azz_nx1_o3 n= =3D2 FMLA_n1_s 11000001 001 0 .... 0 .. 110 ..... 00 ... @azz_nx1_o3 n= =3D2 FMLA_n1_d 11000001 011 0 .... 0 .. 110 ..... 00 ... @azz_nx1_o3 n= =3D2 + +BFMLA_n1 11000001 011 1 .... 0 .. 111 ..... 00 ... @azz_nx1_o3 n= =3D4 FMLA_n1_h 11000001 001 1 .... 0 .. 111 ..... 00 ... @azz_nx1_o3 n= =3D4 FMLA_n1_s 11000001 001 1 .... 0 .. 110 ..... 00 ... @azz_nx1_o3 n= =3D4 FMLA_n1_d 11000001 011 1 .... 0 .. 110 ..... 00 ... @azz_nx1_o3 n= =3D4 =20 +BFMLS_n1 11000001 011 0 .... 0 .. 111 ..... 01 ... @azz_nx1_o3 n= =3D2 FMLS_n1_h 11000001 001 0 .... 0 .. 111 ..... 01 ... @azz_nx1_o3 n= =3D2 FMLS_n1_s 11000001 001 0 .... 0 .. 110 ..... 01 ... @azz_nx1_o3 n= =3D2 FMLS_n1_d 11000001 011 0 .... 0 .. 110 ..... 01 ... @azz_nx1_o3 n= =3D2 + +BFMLS_n1 11000001 011 1 .... 0 .. 111 ..... 01 ... @azz_nx1_o3 n= =3D4 FMLS_n1_h 11000001 001 1 .... 0 .. 111 ..... 01 ... @azz_nx1_o3 n= =3D4 FMLS_n1_s 11000001 001 1 .... 0 .. 110 ..... 01 ... @azz_nx1_o3 n= =3D4 FMLS_n1_d 11000001 011 1 .... 0 .. 110 ..... 01 ... @azz_nx1_o3 n= =3D4 @@ -484,16 +490,22 @@ UMLSLL_nn_d 11000001 111 ...01 0 .. 000 ...00 110= 0 . @azz_4x4_o1x4 USMLALL_nn_s 11000001 101 ....0 0 .. 000 ....0 0010 . @azz_2x2_o1x4 USMLALL_nn_s 11000001 101 ...01 0 .. 000 ...00 0010 . @azz_4x4_o1x4 =20 +BFMLA_nn 11000001 111 ....0 0 .. 100 ....0 01 ... @azz_2x2_o3 FMLA_nn_h 11000001 101 ....0 0 .. 100 ....0 01 ... @azz_2x2_o3 FMLA_nn_s 11000001 101 ....0 0 .. 110 ....0 00 ... @azz_2x2_o3 FMLA_nn_d 11000001 111 ....0 0 .. 110 ....0 00 ... @azz_2x2_o3 + +BFMLA_nn 11000001 111 ...01 0 .. 100 ...00 01 ... @azz_4x4_o3 FMLA_nn_h 11000001 101 ...01 0 .. 100 ...00 01 ... @azz_4x4_o3 FMLA_nn_s 11000001 101 ...01 0 .. 110 ...00 00 ... @azz_4x4_o3 FMLA_nn_d 11000001 111 ...01 0 .. 110 ...00 00 ... @azz_4x4_o3 =20 +BFMLS_nn 11000001 111 ....0 0 .. 100 ....0 11 ... @azz_2x2_o3 FMLS_nn_h 11000001 101 ....0 0 .. 100 ....0 11 ... @azz_2x2_o3 FMLS_nn_s 11000001 101 ....0 0 .. 110 ....0 01 ... @azz_2x2_o3 FMLS_nn_d 11000001 111 ....0 0 .. 110 ....0 01 ... @azz_2x2_o3 + +BFMLS_nn 11000001 111 ...01 0 .. 100 ...00 11 ... @azz_4x4_o3 FMLS_nn_h 11000001 101 ...01 0 .. 100 ...00 11 ... @azz_4x4_o3 FMLS_nn_s 11000001 101 ...01 0 .. 110 ...00 01 ... @azz_4x4_o3 FMLS_nn_d 11000001 111 ...01 0 .. 110 ...00 01 ... @azz_4x4_o3 @@ -652,16 +664,22 @@ SUMLALL_nx_s 11000001 0001 .... 1 .. 0.. ...01 10 = ... @azx_4x1_i4_o1 @azx_4x1_i3_o3 ........ .... zm:4 . .. ... ..... .. off:3 \ &azx_n n=3D4 rv=3D%mova_rv zn=3D%zn_ax4 idx=3D%idx3_10_3 =20 +BFMLA_nx 11000001 0001 .... 0 .. 1.. ....1 0 .... @azx_2x1_i3_o3 FMLA_nx_h 11000001 0001 .... 0 .. 1.. ....0 0 .... @azx_2x1_i3_o3 FMLA_nx_s 11000001 0101 .... 0 .. 0.. ....0 00 ... @azx_2x1_i2_o3 FMLA_nx_d 11000001 1101 .... 0 .. 00. ....0 00 ... @azx_2x1_i1_o3 + +BFMLA_nx 11000001 0001 .... 1 .. 1.. ...01 0 .... @azx_4x1_i3_o3 FMLA_nx_h 11000001 0001 .... 1 .. 1.. ...00 0 .... @azx_4x1_i3_o3 FMLA_nx_s 11000001 0101 .... 1 .. 0.. ...00 00 ... @azx_4x1_i2_o3 FMLA_nx_d 11000001 1101 .... 1 .. 00. ...00 00 ... @azx_4x1_i1_o3 =20 +BFMLS_nx 11000001 0001 .... 0 .. 1.. ....1 1 .... @azx_2x1_i3_o3 FMLS_nx_h 11000001 0001 .... 0 .. 1.. ....0 1 .... @azx_2x1_i3_o3 FMLS_nx_s 11000001 0101 .... 0 .. 0.. ....0 10 ... @azx_2x1_i2_o3 FMLS_nx_d 11000001 1101 .... 0 .. 00. ....0 10 ... @azx_2x1_i1_o3 + +BFMLS_nx 11000001 0001 .... 1 .. 1.. ...01 1 .... @azx_4x1_i3_o3 FMLS_nx_h 11000001 0001 .... 1 .. 1.. ...00 1 .... @azx_4x1_i3_o3 FMLS_nx_s 11000001 0101 .... 1 .. 0.. ...00 10 ... @azx_4x1_i2_o3 FMLS_nx_d 11000001 1101 .... 1 .. 00. ...00 10 ... @azx_4x1_i1_o3 diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index 5f513696090..3f9a80248ae 100644 --- a/target/arm/tcg/translate-sme.c +++ b/target/arm/tcg/translate-sme.c @@ -1038,6 +1038,15 @@ TRANS_FEAT(FMLA_nn_d, aa64_sme2_f64f64, do_fmla, a, = true, FPST_ZA, TRANS_FEAT(FMLS_nn_d, aa64_sme2_f64f64, do_fmla, a, true, FPST_ZA, s->fpcr_ah ? gen_helper_gvec_ah_vfms_d : gen_helper_gvec_vfms_d) =20 +TRANS_FEAT(BFMLA_n1, aa64_sme_b16b16, do_fmla, a, false, FPST_ZA, + gen_helper_gvec_bfmla) +TRANS_FEAT(BFMLS_n1, aa64_sme_b16b16, do_fmla, a, false, FPST_ZA, + s->fpcr_ah ? gen_helper_gvec_ah_bfmls : gen_helper_gvec_bfmls) +TRANS_FEAT(BFMLA_nn, aa64_sme_b16b16, do_fmla, a, true, FPST_ZA, + gen_helper_gvec_bfmla) +TRANS_FEAT(BFMLS_nn, aa64_sme_b16b16, do_fmla, a, true, FPST_ZA, + s->fpcr_ah ? gen_helper_gvec_ah_bfmls : gen_helper_gvec_bfmls) + static bool do_fmla_nx(DisasContext *s, arg_azx_n *a, ARMFPStatusFlavour fpst, gen_helper_gvec_4_ptr *fn) { @@ -1058,6 +1067,11 @@ TRANS_FEAT(FMLA_nx_d, aa64_sme2_f64f64, do_fmla_nx, = a, FPST_ZA, TRANS_FEAT(FMLS_nx_d, aa64_sme2_f64f64, do_fmla_nx, a, FPST_ZA, s->fpcr_ah ? gen_helper_gvec_ah_fmls_idx_d : gen_helper_gvec_fm= ls_idx_d) =20 +TRANS_FEAT(BFMLA_nx, aa64_sme_b16b16, do_fmla_nx, a, FPST_ZA, + gen_helper_gvec_bfmla_idx) +TRANS_FEAT(BFMLS_nx, aa64_sme_b16b16, do_fmla_nx, a, FPST_ZA, + s->fpcr_ah ? gen_helper_gvec_ah_bfmls_idx : gen_helper_gvec_bfm= ls_idx) + /* * Expand array multi-vector single (n1), array multi-vector (nn), * and array multi-vector indexed (nx), for integer accumulate. diff --git a/target/arm/tcg/vec_helper.c b/target/arm/tcg/vec_helper.c index 4b7de5016ee..51bfd767a39 100644 --- a/target/arm/tcg/vec_helper.c +++ b/target/arm/tcg/vec_helper.c @@ -1608,6 +1608,12 @@ static float16 float16_muladd_f(float16 dest, float1= 6 op1, float16 op2, return float16_muladd(op1, op2, dest, 0, stat); } =20 +static bfloat16 bfloat16_muladd_f(bfloat16 dest, bfloat16 op1, bfloat16 op= 2, + float_status *stat) +{ + return bfloat16_muladd(op1, op2, dest, 0, stat); +} + static float32 float32_muladd_f(float32 dest, float32 op1, float32 op2, float_status *stat) { @@ -1626,6 +1632,12 @@ static float16 float16_mulsub_f(float16 dest, float1= 6 op1, float16 op2, return float16_muladd(float16_chs(op1), op2, dest, 0, stat); } =20 +static bfloat16 bfloat16_mulsub_f(bfloat16 dest, bfloat16 op1, bfloat16 op= 2, + float_status *stat) +{ + return bfloat16_muladd(bfloat16_chs(op1), op2, dest, 0, stat); +} + static float32 float32_mulsub_f(float32 dest, float32 op1, float32 op2, float_status *stat) { @@ -1644,6 +1656,12 @@ static float16 float16_ah_mulsub_f(float16 dest, flo= at16 op1, float16 op2, return float16_muladd(op1, op2, dest, float_muladd_negate_product, sta= t); } =20 +static bfloat16 bfloat16_ah_mulsub_f(bfloat16 dest, bfloat16 op1, bfloat16= op2, + float_status *stat) +{ + return bfloat16_muladd(op1, op2, dest, float_muladd_negate_product, st= at); +} + static float32 float32_ah_mulsub_f(float32 dest, float32 op1, float32 op2, float_status *stat) { @@ -1677,14 +1695,19 @@ DO_MULADD(gvec_fmls_nf_s, float32_mulsub_nf, float3= 2) DO_MULADD(gvec_vfma_h, float16_muladd_f, float16) DO_MULADD(gvec_vfma_s, float32_muladd_f, float32) DO_MULADD(gvec_vfma_d, float64_muladd_f, float64) +DO_MULADD(gvec_bfmla, bfloat16_muladd_f, bfloat16) =20 DO_MULADD(gvec_vfms_h, float16_mulsub_f, float16) DO_MULADD(gvec_vfms_s, float32_mulsub_f, float32) DO_MULADD(gvec_vfms_d, float64_mulsub_f, float64) +DO_MULADD(gvec_bfmls, bfloat16_mulsub_f, bfloat16) =20 DO_MULADD(gvec_ah_vfms_h, float16_ah_mulsub_f, float16) DO_MULADD(gvec_ah_vfms_s, float32_ah_mulsub_f, float32) DO_MULADD(gvec_ah_vfms_d, float64_ah_mulsub_f, float64) +DO_MULADD(gvec_ah_bfmls, bfloat16_ah_mulsub_f, bfloat16) + +#undef DO_MULADD =20 /* For the indexed ops, SVE applies the index per 128-bit vector segment. * For AdvSIMD, there is of course only one such vector segment. @@ -1803,14 +1826,17 @@ void HELPER(NAME)(void *vd, void *vn, void *vm, voi= d *va, \ DO_FMLA_IDX(gvec_fmla_idx_h, float16, H2, 0, 0) DO_FMLA_IDX(gvec_fmla_idx_s, float32, H4, 0, 0) DO_FMLA_IDX(gvec_fmla_idx_d, float64, H8, 0, 0) +DO_FMLA_IDX(gvec_bfmla_idx, bfloat16, H2, 0, 0) =20 DO_FMLA_IDX(gvec_fmls_idx_h, float16, H2, INT16_MIN, 0) DO_FMLA_IDX(gvec_fmls_idx_s, float32, H4, INT32_MIN, 0) DO_FMLA_IDX(gvec_fmls_idx_d, float64, H8, INT64_MIN, 0) +DO_FMLA_IDX(gvec_bfmls_idx, bfloat16, H2, INT16_MIN, 0) =20 DO_FMLA_IDX(gvec_ah_fmls_idx_h, float16, H2, 0, float_muladd_negate_produc= t) DO_FMLA_IDX(gvec_ah_fmls_idx_s, float32, H4, 0, float_muladd_negate_produc= t) DO_FMLA_IDX(gvec_ah_fmls_idx_d, float64, H8, 0, float_muladd_negate_produc= t) +DO_FMLA_IDX(gvec_ah_bfmls_idx, bfloat16, H2, 0, float_muladd_negate_produc= t) =20 #undef DO_FMLA_IDX =20 --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647165; cv=none; d=zohomail.com; s=zohoarc; b=cg2sYVPyt9Uu+bRY86Kvc2dcR94YAolAZPp/nuzCPFD3YnGE6Xp5t6ofk8HIrXes4Io9tAsTUQQnAQjeS/oih3gYMsrcLD976GcC6bbA4hHkqgAgC92cmb7OJQ+A8fidWX1bYc1djExcsaT7CBS3CgwXkPhoNIPyprIAXEAh4uU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647165; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=4xw2VGCHkAcSZGjs/CVs/tdrdQsWjv9tAm9NnWf2XvQ=; b=lAJs5jmUr0MoQtGKbBkWCAvXSk6AWKgAX+NLKMatNLcDEu4tr+GQQQ2iiVqsaRM/m5TMCADt/uBqoNcukYBiifcPsV3FYnUUB3VcbsRtSnn5U5F561NELvD35xWe7qnhYgy0znpyRi7KA+aZNrYL4T04I6HataKveYwLQkwIqhA= 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 1751647165696714.3088282613875; Fri, 4 Jul 2025 09:39:25 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjFN-0004HB-SS; Fri, 04 Jul 2025 12:26:45 -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 1uXjEj-0001G2-Vn for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:06 -0400 Received: from mail-wr1-x42c.google.com ([2a00:1450:4864:20::42c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjEh-0006Rf-E7 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:05 -0400 Received: by mail-wr1-x42c.google.com with SMTP id ffacd0b85a97d-3a4fd1ba177so792984f8f.0 for ; Fri, 04 Jul 2025 09:26:02 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.26.00 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:26:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646361; x=1752251161; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=4xw2VGCHkAcSZGjs/CVs/tdrdQsWjv9tAm9NnWf2XvQ=; b=E0ZRE+1xNDqxIp5WNh05ZbsJtqGp/DQI4wj5ht/ATPQDwafmkM2Y5nGJZ1nb2KroU0 ZUkpeKirRhKTZXCwdp9RCEfdYZ608ABJIvqCjA34dWY9GVDQnm39xw0N539wBn7K+f54 /0dRQyM0l++s/7Y8wGlLPy8wUrVUH2Ej6mQ7v4ggJxGbk95nU1t89IvshEuRDFRG+Mdk pLMD+8egw6lcEFo6nNROdFcyLEpwvih485CKnQ/Tqceumk0Ukbp93+qLQVDTdY/hqvew dxsZHXxIxQcxnfMUECiy9CoPJo3GDLFMsZimnBDUMA98LR8B3OR/WOo8TEggexy2INhO pD9w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646361; x=1752251161; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=4xw2VGCHkAcSZGjs/CVs/tdrdQsWjv9tAm9NnWf2XvQ=; b=QkwFsdgnKKrzg6D4oLsdMv8UV54/80dPb39KdVrkSKmtE7F17Cob6mG/S0EO9+3Ham 7heT1DgUwHgEQNL78IzpH+70RkHPiu58Fz9wUJEmkTtQFDBTEq5hT1VLgi3nbcj5C1+X 6/LqIb9uTDC97bgXcfcqhxsnEmeet/hNW6m/H6DfEFsrvt1/GiJK0BVZQvv8YtCjijU4 TJt33dDFmfYgRBmicYYGEZoNmEbJ0+BYESXdsg5CZg7iRvL8KCUKS1DvkfDwbgkmd+hc 6mu1VAftYc9VAWMJ5o5tYp+BVyx4MF1c4DvF+aqlqijtwo27Ix6z7ZHNAZglG+Se9fIj MwbQ== X-Gm-Message-State: AOJu0Yyb2lgceSTJvz0YLjWrFQ45woLtrfi6nPvruoFNyha+6F7nVuEo RFgN+ToSaJL8ZZMUnq1P+NOBoVSAaRkYk4LThPZmtxsW1CFL5hNvGi2lF9QlOnF44ecd7onDE9G nWE7l X-Gm-Gg: ASbGncsEgwrwBgDruRA4I8wpnspccSToB9uAewAOgYoV9ByrqGrS/P8ecNzzX5PLo6J 3dnKdRlY89hXVTkjBLZNNs54zzgWddxx7VY3dBAznZL1RenvE5jXMISERdFBhYeE7e2WVSp/lSW KRBQP9d4FDic04GPlLtTVZkBQvgITO5CvvEYiVwmldSXwal8Y7dD71FpgVuEv+sVV1B96AADeV4 dqgjR2EAihCmlM7ZFguaGq34lJ0847v6UQbYhp2KKix6U7qVKyN4hSypBe4xxa3IcIzBP80ra/E 2qYs8LTgvQE+6fc8e7TWzvzBmv+QKNqyQYP22w6/mi/7plgWy6xJP7q9X91GAnjXkXWr0e/vP7b /xig= X-Google-Smtp-Source: AGHT+IFcrkXIRgNiIrHRDYlju1E85lFqpaWGMRa0WoBmoatgWO7WaHUCM8Uej4d+tWbi/veGNA5xpg== X-Received: by 2002:a5d:64c8:0:b0:3a4:f70d:aff0 with SMTP id ffacd0b85a97d-3b495575340mr3352294f8f.14.1751646361456; Fri, 04 Jul 2025 09:26:01 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 062/119] target/arm: Implement SME2 FADD, FSUB, BFADD, BFSUB Date: Fri, 4 Jul 2025 17:24:02 +0100 Message-ID: <20250704162501.249138-63-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::42c; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x42c.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751647167977116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-51-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/helper.h | 2 ++ target/arm/tcg/sme.decode | 25 +++++++++++++++++++ target/arm/tcg/translate-sme.c | 44 ++++++++++++++++++++++++++++++++++ target/arm/tcg/vec_helper.c | 2 ++ 4 files changed, 73 insertions(+) diff --git a/target/arm/tcg/helper.h b/target/arm/tcg/helper.h index 37dd384659c..392bf7b9b5b 100644 --- a/target/arm/tcg/helper.h +++ b/target/arm/tcg/helper.h @@ -731,10 +731,12 @@ DEF_HELPER_FLAGS_4(gvec_fclt0_d, TCG_CALL_NO_RWG, voi= d, ptr, ptr, fpst, i32) DEF_HELPER_FLAGS_5(gvec_fadd_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, fpst= , i32) DEF_HELPER_FLAGS_5(gvec_fadd_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, fpst= , i32) DEF_HELPER_FLAGS_5(gvec_fadd_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, fpst= , i32) +DEF_HELPER_FLAGS_5(gvec_bfadd, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, fpst,= i32) =20 DEF_HELPER_FLAGS_5(gvec_fsub_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, fpst= , i32) DEF_HELPER_FLAGS_5(gvec_fsub_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, fpst= , i32) DEF_HELPER_FLAGS_5(gvec_fsub_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, fpst= , i32) +DEF_HELPER_FLAGS_5(gvec_bfsub, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, fpst,= i32) =20 DEF_HELPER_FLAGS_5(gvec_fmul_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, fpst= , i32) DEF_HELPER_FLAGS_5(gvec_fmul_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, fpst= , i32) diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index b3dd3bffc38..0badc8f9fa3 100644 --- a/target/arm/tcg/sme.decode +++ b/target/arm/tcg/sme.decode @@ -510,6 +510,31 @@ FMLS_nn_h 11000001 101 ...01 0 .. 100 ...00 11 .= .. @azz_4x4_o3 FMLS_nn_s 11000001 101 ...01 0 .. 110 ...00 01 ... @azz_4x4_o3 FMLS_nn_d 11000001 111 ...01 0 .. 110 ...00 01 ... @azz_4x4_o3 =20 +&az_n n off rv zm +@az_2x2_o3 ........ ... ..... . .. ... ..... .. off:3 \ + &az_n n=3D2 rv=3D%mova_rv zm=3D%zn_ax2 +@az_4x4_o3 ........ ... ..... . .. ... ..... .. off:3 \ + &az_n n=3D4 rv=3D%mova_rv zm=3D%zn_ax4 + +FADD_nn_h 11000001 101 00100 0 .. 111 ....0 00 ... @az_2x2_o3 +FADD_nn_s 11000001 101 00000 0 .. 111 ....0 00 ... @az_2x2_o3 +FADD_nn_d 11000001 111 00000 0 .. 111 ....0 00 ... @az_2x2_o3 +FADD_nn_h 11000001 101 00101 0 .. 111 ...00 00 ... @az_4x4_o3 +FADD_nn_s 11000001 101 00001 0 .. 111 ...00 00 ... @az_4x4_o3 +FADD_nn_d 11000001 111 00001 0 .. 111 ...00 00 ... @az_4x4_o3 + +FSUB_nn_h 11000001 101 00100 0 .. 111 ....0 01 ... @az_2x2_o3 +FSUB_nn_s 11000001 101 00000 0 .. 111 ....0 01 ... @az_2x2_o3 +FSUB_nn_d 11000001 111 00000 0 .. 111 ....0 01 ... @az_2x2_o3 +FSUB_nn_h 11000001 101 00101 0 .. 111 ...00 01 ... @az_4x4_o3 +FSUB_nn_s 11000001 101 00001 0 .. 111 ...00 01 ... @az_4x4_o3 +FSUB_nn_d 11000001 111 00001 0 .. 111 ...00 01 ... @az_4x4_o3 + +BFADD_nn 11000001 111 00100 0 .. 111 ....0 00 ... @az_2x2_o3 +BFADD_nn 11000001 111 00101 0 .. 111 ...00 00 ... @az_4x4_o3 +BFSUB_nn 11000001 111 00100 0 .. 111 ....0 01 ... @az_2x2_o3 +BFSUB_nn 11000001 111 00101 0 .. 111 ...00 01 ... @az_4x4_o3 + ### SME2 Multi-vector Indexed =20 &azx_n n off rv zn zm idx diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index 3f9a80248ae..664fdd86aa5 100644 --- a/target/arm/tcg/translate-sme.c +++ b/target/arm/tcg/translate-sme.c @@ -1072,6 +1072,50 @@ TRANS_FEAT(BFMLA_nx, aa64_sme_b16b16, do_fmla_nx, a,= FPST_ZA, TRANS_FEAT(BFMLS_nx, aa64_sme_b16b16, do_fmla_nx, a, FPST_ZA, s->fpcr_ah ? gen_helper_gvec_ah_bfmls_idx : gen_helper_gvec_bfm= ls_idx) =20 +static bool do_faddsub(DisasContext *s, arg_az_n *a, ARMFPStatusFlavour fp= st, + gen_helper_gvec_3_ptr *fn) +{ + if (sme_smza_enabled_check(s)) { + int svl =3D streaming_vec_reg_size(s); + int n =3D a->n; + int zm =3D a->zm; + int vstride =3D svl / n; + TCGv_ptr t_za =3D get_zarray(s, a->rv, a->off, n, 0); + TCGv_ptr ptr =3D fpstatus_ptr(fpst); + TCGv_ptr t =3D tcg_temp_new_ptr(); + + for (int r =3D 0; r < n; ++r) { + TCGv_ptr t_zm =3D vec_full_reg_ptr(s, zm + r); + int o_za =3D r * vstride * sizeof(ARMVectorReg); + int desc =3D simd_desc(svl, svl, 0); + + tcg_gen_addi_ptr(t, t_za, o_za); + fn(t, t, t_zm, ptr, tcg_constant_i32(desc)); + } + } + return true; +} + +TRANS_FEAT(FADD_nn_h, aa64_sme_f16f16, do_faddsub, a, + FPST_ZA_F16, gen_helper_gvec_fadd_h) +TRANS_FEAT(FSUB_nn_h, aa64_sme_f16f16, do_faddsub, a, + FPST_ZA_F16, gen_helper_gvec_fsub_h) + +TRANS_FEAT(FADD_nn_s, aa64_sme2, do_faddsub, a, + FPST_ZA, gen_helper_gvec_fadd_s) +TRANS_FEAT(FSUB_nn_s, aa64_sme2, do_faddsub, a, + FPST_ZA, gen_helper_gvec_fsub_s) + +TRANS_FEAT(FADD_nn_d, aa64_sme2_f64f64, do_faddsub, a, + FPST_ZA, gen_helper_gvec_fadd_d) +TRANS_FEAT(FSUB_nn_d, aa64_sme2_f64f64, do_faddsub, a, + FPST_ZA, gen_helper_gvec_fsub_d) + +TRANS_FEAT(BFADD_nn, aa64_sme_b16b16, do_faddsub, a, + FPST_ZA, gen_helper_gvec_bfadd) +TRANS_FEAT(BFSUB_nn, aa64_sme_b16b16, do_faddsub, a, + FPST_ZA, gen_helper_gvec_bfsub) + /* * Expand array multi-vector single (n1), array multi-vector (nn), * and array multi-vector indexed (nx), for integer accumulate. diff --git a/target/arm/tcg/vec_helper.c b/target/arm/tcg/vec_helper.c index 51bfd767a39..d4ee6f4d29d 100644 --- a/target/arm/tcg/vec_helper.c +++ b/target/arm/tcg/vec_helper.c @@ -1470,10 +1470,12 @@ void HELPER(NAME)(void *vd, void *vn, void *vm, = \ DO_3OP(gvec_fadd_h, float16_add, float16) DO_3OP(gvec_fadd_s, float32_add, float32) DO_3OP(gvec_fadd_d, float64_add, float64) +DO_3OP(gvec_bfadd, bfloat16_add, bfloat16) =20 DO_3OP(gvec_fsub_h, float16_sub, float16) DO_3OP(gvec_fsub_s, float32_sub, float32) DO_3OP(gvec_fsub_d, float64_sub, float64) +DO_3OP(gvec_bfsub, bfloat16_sub, bfloat16) =20 DO_3OP(gvec_fmul_h, float16_mul, float16) DO_3OP(gvec_fmul_s, float32_mul, float32) --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647255; cv=none; d=zohomail.com; s=zohoarc; b=Drj21a3+uUUWxL8ekBAJdAqPLbeDJbhMWjLMWaodDuqBgj2JQBPAT+H0bZyScsvMV3Pc8xoZ76rYxAhkwpKiMTjstxa7l9YH9Akwq5Juh4XbOYvgyltDPemOFl7QYBmTOheNAfWaIUj+lvD8d9Rh+lPKBykzBpxnFOkD6lJHt98= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647255; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=uF28X6Q5gCFd9Ll0xLQpSOBKr1raaNTNHM4U8+GRmQI=; b=AaPKnod1qI+2qX1+rxuw8Rb3yZSXxPfk3nJR0B4N+p95WFj5+5ym8och1FP1/kU8nSwoV8SGLiWJCnHRXqrIG7oTwmHaF2s5mPOcMqUej0x5keQqVxtQoYajshmA4I8XCulhml5xol68s2MCP5y0w3ZWMQw3wZytOfsCZAxVgxA= 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 1751647255513153.31272387862532; Fri, 4 Jul 2025 09:40:55 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjFD-00031W-T4; Fri, 04 Jul 2025 12:26:35 -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 1uXjEl-0001IN-J9 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:07 -0400 Received: from mail-wm1-x332.google.com ([2a00:1450:4864:20::332]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjEj-0006Ug-H1 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:07 -0400 Received: by mail-wm1-x332.google.com with SMTP id 5b1f17b1804b1-4535fbe0299so6166105e9.3 for ; Fri, 04 Jul 2025 09:26:03 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.26.01 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:26:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646362; x=1752251162; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=uF28X6Q5gCFd9Ll0xLQpSOBKr1raaNTNHM4U8+GRmQI=; b=r0bz2AAsPDTjNjHcfDrgMuqkylPdZMsSvkPH+uyWjeo4P25ff18EJtkTqDOm+LFhpv syvFv0KAyp/gB/V01V2hQtxf8fh0cdnArrZYwlGz1FynLVvPVil7J4pLO8dqfyNNJCKU c/m2dTy0fgwJjmgwBO1G1kvsRk9GjywfdHV66vrh5x6QqiFRatXb+VFsZQSNHtWLFrHh 8ptFUCiAchE1wOruq5O/Vg2jtFxNjktSJwe3W7Et/r96Y9yycCVpUEQdLPIZgFd7MZkO g4JZHSpFQf1H9fk9lSKE7t8FfQ+QMYzvn2P0RKNzQvCwS0E6YTrrd4X+TQimK9M1zGgO Kscw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646362; x=1752251162; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=uF28X6Q5gCFd9Ll0xLQpSOBKr1raaNTNHM4U8+GRmQI=; b=RGMkvtbeVos/bzxTJd4yNAtnBUs43tITg2TurlnQm4bArycnh9HVR3Cv7UHawyDKwa O494KR3i51wrWtnU91gU3eDwVwlQoICR1WYjEnjSm1P4p902g6DIxic4ymkk+2sp9u/C UHLc94y8MIzH4kG20UYm0/4Uhr/YoS5AfDDIJu3neO76dX84IzEeDrnoyMCXqPcm2j9V yJyL98pWCwlWSWqT8jR98hd3X/Uqricnd59DBwUoucK86oj6bU/n7/7Fax8MHJ/zMVur 7Am9JaxSxO4BDrBm7snm93LhU0DVujFzIy70riNTSYQVYiLpUNkqpk4PyqQWudCjg+72 0t6A== X-Gm-Message-State: AOJu0YxGR8e7H9rIL8VlapCsAxp3RXR9Rzz2+O8xcRBXWLmT+01nf9jU SJ83A47qSHjNRKLtB3krs3GtG8bS518u6LhqJ/5l6tCNrMXAR8UnImhgjCkPA8XCntJ7ay+KV5h ORH8/ X-Gm-Gg: ASbGncuH75e2wAd9AxLWR3iJ4qcmaMhFgkBVzkD4mxoa2veQRKIwvp9/Wq7ivqxLZ6m 5whRG2ZT3TJb5mpZQlic8TK/pvB/FPbX3KYzdvPavCs5SxfQMx3IDildsMWZjyhQNt05T3P+6ij wqmieZvm+9cAjxKP5t6PUMB+g3pB9w5iP6Lg37Jvjz7hKAYAX9SuBjhAfhMIieJuSBpHIG8dkt+ 7lsKqAzak0MAWocqxkyj4IZSWujNj97tdwLg4mcA3tkQ3M1eshvTc5LuL/rx1tNUsPc+BpdQ5j6 /koOtBin8E9T3psriA+mzUXqQYnKMXjg/SnjVM6izqzdQZEEYeZ51bk+iwOpt3KjIyzQ X-Google-Smtp-Source: AGHT+IGvjFKH7ywj+i9X4uWUAck5U2sMnSEPoCuut7BHsC5cmrAUP7q3H0NXpJzHN5h4b3vRDJA1jA== X-Received: by 2002:a05:600c:19c9:b0:43c:f629:66f4 with SMTP id 5b1f17b1804b1-454b305fcb1mr37222865e9.0.1751646362446; Fri, 04 Jul 2025 09:26:02 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 063/119] target/arm: Implement SME2 ADD/SUB (array accumulator) Date: Fri, 4 Jul 2025 17:24:03 +0100 Message-ID: <20250704162501.249138-64-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::332; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x332.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751647256934116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-52-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/sme.decode | 12 ++++++++++++ target/arm/tcg/translate-sme.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 0badc8f9fa3..22e2a68b1b9 100644 --- a/target/arm/tcg/sme.decode +++ b/target/arm/tcg/sme.decode @@ -708,3 +708,15 @@ BFMLS_nx 11000001 0001 .... 1 .. 1.. ...01 1 ..= .. @azx_4x1_i3_o3 FMLS_nx_h 11000001 0001 .... 1 .. 1.. ...00 1 .... @azx_4x1_i3_o3 FMLS_nx_s 11000001 0101 .... 1 .. 0.. ...00 10 ... @azx_4x1_i2_o3 FMLS_nx_d 11000001 1101 .... 1 .. 00. ...00 10 ... @azx_4x1_i1_o3 + +### SME2 Add / Sub array accumulators + +ADD_aaz_s 11000001 101 000000 .. 111 ....0 10 ... @az_2x2_o3 +ADD_aaz_s 11000001 101 000010 .. 111 ...00 10 ... @az_4x4_o3 +ADD_aaz_d 11000001 111 000000 .. 111 ....0 10 ... @az_2x2_o3 +ADD_aaz_d 11000001 111 000010 .. 111 ...00 10 ... @az_4x4_o3 + +SUB_aaz_s 11000001 101 000000 .. 111 ....0 11 ... @az_2x2_o3 +SUB_aaz_s 11000001 101 000010 .. 111 ...00 11 ... @az_4x4_o3 +SUB_aaz_d 11000001 111 000000 .. 111 ....0 11 ... @az_2x2_o3 +SUB_aaz_d 11000001 111 000010 .. 111 ...00 11 ... @az_4x4_o3 diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index 664fdd86aa5..4c3b9aa7d6c 100644 --- a/target/arm/tcg/translate-sme.c +++ b/target/arm/tcg/translate-sme.c @@ -806,6 +806,34 @@ TRANS_FEAT(SUB_azz_nn_s, aa64_sme2, do_azz_nn, a, MO_3= 2, tcg_gen_gvec_sub_var) TRANS_FEAT(ADD_azz_nn_d, aa64_sme2_i16i64, do_azz_nn, a, MO_64, tcg_gen_gv= ec_add_var) TRANS_FEAT(SUB_azz_nn_d, aa64_sme2_i16i64, do_azz_nn, a, MO_64, tcg_gen_gv= ec_sub_var) =20 +/* Add/Sub each ZA[d*N] +=3D Z[m*N] */ +static bool do_aaz(DisasContext *s, arg_az_n *a, int esz, GVecGen3FnVar *f= n) +{ + TCGv_ptr t_za; + int svl, n; + + if (!sme_smza_enabled_check(s)) { + return true; + } + + n =3D a->n; + t_za =3D get_zarray(s, a->rv, a->off, n, 0); + svl =3D streaming_vec_reg_size(s); + + for (int i =3D 0; i < n; ++i) { + int o_za =3D (svl / n * sizeof(ARMVectorReg)) * i; + int o_zm =3D vec_full_reg_offset(s, a->zm + i); + + fn(esz, t_za, o_za, t_za, o_za, tcg_env, o_zm, svl, svl); + } + return true; +} + +TRANS_FEAT(ADD_aaz_s, aa64_sme2, do_aaz, a, MO_32, tcg_gen_gvec_add_var) +TRANS_FEAT(SUB_aaz_s, aa64_sme2, do_aaz, a, MO_32, tcg_gen_gvec_sub_var) +TRANS_FEAT(ADD_aaz_d, aa64_sme2_i16i64, do_aaz, a, MO_64, tcg_gen_gvec_add= _var) +TRANS_FEAT(SUB_aaz_d, aa64_sme2_i16i64, do_aaz, a, MO_64, tcg_gen_gvec_sub= _var) + /* * Expand array multi-vector single (n1), array multi-vector (nn), * and array multi-vector indexed (nx), for floating-point accumulate. --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646585; cv=none; d=zohomail.com; s=zohoarc; b=b2X+LrRWYLfFGJ9FM5wR09WTcyrN0wvlWaP5E5RfPVIZ3PASb/K5IsZL8zuC0ZlLBcmJaTj8uT0gVyvZV+ycE4Q1oXtt9dDFVWZWMa/V9EuDeCMpO9iGju9nwhM8A1cnxb5bf971Kb9zo9SuesQADWnxY9o2IC2v2cgRivWh6rM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646585; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=7v4jkCWkG0HPuInQfXmIRLTRgFPp1Jt2LMIyEze1ir4=; b=afR6Fu57bWpsbHM7P09BKiaBgDRe+7xYMU85fJ61FeC4T9uwO8y0iSGZ+aVQLPXaB4Y0T87tYS3sIjEtB+oMb3wGgYLNjHzL56Fqf5fG5qHILo3DDE87DZbTpBFYIF2K1up84tVjvbEu/oTuUdZ4VP9E83PIT1zs02BM70X8ag4= 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 1751646585119715.4614984571872; Fri, 4 Jul 2025 09:29:45 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjFC-0002wn-TF; Fri, 04 Jul 2025 12:26:34 -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 1uXjEl-0001IO-Mc for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:07 -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 1uXjEj-0006Uv-Kd for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:07 -0400 Received: by mail-wr1-x42a.google.com with SMTP id ffacd0b85a97d-3a6e8b1fa37so821549f8f.2 for ; Fri, 04 Jul 2025 09:26:04 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.26.02 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:26:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646363; x=1752251163; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=7v4jkCWkG0HPuInQfXmIRLTRgFPp1Jt2LMIyEze1ir4=; b=iLw+cqXA3neYCpsmzlWN4V0a7rXVuXGv2rtgbBHuxv8GeUIiS1YfPRq0WZXq/GYlhy sdphkoF+6TnD1OEo9nZopXk5FcupVRw8tizOcBkUJQvV4oL+/zOFhIezWTQiNQ2KsmPB ZluAOUYyx6nsIy8x5+01ZNcZgFr14WLXNoJD8vRYmrkmiiYJM0VKqIDDmyrgaxB/a6PV F+IzF/gAT35cAn/9MdcadY+109T5uwYoxmyzRp5iwmFCdDX3qZVO3wcHrJD+rGLaPrms wTqr9VQwia6IHjRk6F8bMusPlesqTUpTdLM6n8ifS7V+OPJ5ON5Z5b1lIsaquqYN2k4Y QmVQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646363; x=1752251163; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=7v4jkCWkG0HPuInQfXmIRLTRgFPp1Jt2LMIyEze1ir4=; b=m9GFuuaFuXegf0rL5T9JjuMlJMM8xgH+ikkmum6+1uhzwYjh/4QPfacs5IUTJoJHW+ eYHJV8k7OQV3PQMVXfUBgeTaxs/cYyXda2p7m3aNi8lohgpb1tX/4jZjm2NJ1xDMN/jl v3n7K0lvrQZRABc1ChkMr+m1dagAjoEsa2PYb7gGpp3JsNdc/sSVcOpu8wQCAsD5oT9V CiGwQ9oJANIxahsKsYKRUYqfzr0pcsXq5qt+HDniW1Gf+QiD89BWUx/3KLSQrc5JyX2l sK/MVvX600HTzYfjfm0AG4SIZM0UA8wzlVAxsBctkmF6kEubSSLWIAsEhYV8fLVBKhI5 nwmw== X-Gm-Message-State: AOJu0YzHXW4qjAi20CSZusOeI9KGrA3YRrPD42s9z4vyV3vmYeMoG4xn NeJ8kHU7QYhemG0cqShna/2fWgfkAwMAJJhlV8YFKU3DyKlMqYXoh9zSXcFAZWO2K8QDt+E9Ur/ hKE84 X-Gm-Gg: ASbGnct/IThw/+LvZH7N4htiMwwt0vX3Q1xr+ayEFK4i710K0jQb5D23xnMwd7TK6q5 5ld+Y93APVYbOTfdmVmgHTrmHGRS01lrhVqnk+9Yf7MVExFpyqkiJM56JDRnJRFeXbwtS+wdKoD qN2Bg5tgbcg6LlnJ7uO1YeK2UXyzoYqOe3dLOv7xQzXshWyXwB+Bsyqnsz0ipLvxhXVNmTQ9bbI cTQ0I9nXBXm9bb/Lpcern7zLU4QKq92yONnsgRQ7u5/zVB/OZ2eEgU1pgbfAd1hk8ySZGvdC0FQ AAWKEe1uCa0TATYR11bpq0c/lGFBukV/gB58sDJYJ495FAAbeNaclyqauq7w5fncRKRf X-Google-Smtp-Source: AGHT+IFVRDceMfL0hbmiRDWap5xvwDQ7UtOZEwbHEfub9HySC6DCQEFaBDWzDe6y4zxDeX9P6J/RTA== X-Received: by 2002:a05:6000:2308:b0:3b4:b4d:6861 with SMTP id ffacd0b85a97d-3b496607b8emr2835239f8f.27.1751646363449; Fri, 04 Jul 2025 09:26:03 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 064/119] target/arm: Implement SME2 BFCVT, BFCVTN, FCVT, FCVTN Date: Fri, 4 Jul 2025 17:24:04 +0100 Message-ID: <20250704162501.249138-65-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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=peter.maydell@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 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: 1751646586934116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-53-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/helper-sme.h | 5 +++ target/arm/tcg/vec_internal.h | 2 + target/arm/tcg/sme.decode | 12 ++++++ target/arm/tcg/sme_helper.c | 74 ++++++++++++++++++++++++++++++++++ target/arm/tcg/sve_helper.c | 2 +- target/arm/tcg/translate-sme.c | 25 ++++++++++++ 6 files changed, 119 insertions(+), 1 deletion(-) diff --git a/target/arm/tcg/helper-sme.h b/target/arm/tcg/helper-sme.h index 0bb8af194b3..97e70959e8a 100644 --- a/target/arm/tcg/helper-sme.h +++ b/target/arm/tcg/helper-sme.h @@ -212,3 +212,8 @@ DEF_HELPER_FLAGS_5(sme2_umlsll_idx_s, TCG_CALL_NO_RWG, = void, ptr, ptr, ptr, ptr, DEF_HELPER_FLAGS_5(sme2_umlsll_idx_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr= , ptr, i32) DEF_HELPER_FLAGS_5(sme2_usmlall_idx_s, TCG_CALL_NO_RWG, void, ptr, ptr, pt= r, ptr, i32) DEF_HELPER_FLAGS_5(sme2_sumlall_idx_s, TCG_CALL_NO_RWG, void, ptr, ptr, pt= r, ptr, i32) + +DEF_HELPER_FLAGS_4(sme2_bfcvt, TCG_CALL_NO_RWG, void, ptr, ptr, fpst, i32) +DEF_HELPER_FLAGS_4(sme2_bfcvtn, TCG_CALL_NO_RWG, void, ptr, ptr, fpst, i32) +DEF_HELPER_FLAGS_4(sme2_fcvt_n, TCG_CALL_NO_RWG, void, ptr, ptr, fpst, i32) +DEF_HELPER_FLAGS_4(sme2_fcvtn, TCG_CALL_NO_RWG, void, ptr, ptr, fpst, i32) diff --git a/target/arm/tcg/vec_internal.h b/target/arm/tcg/vec_internal.h index 64a7249d017..c8199a3ef8e 100644 --- a/target/arm/tcg/vec_internal.h +++ b/target/arm/tcg/vec_internal.h @@ -306,4 +306,6 @@ static inline float64 float64_maybe_ah_chs(float64 a, b= ool fpcr_ah) bfloat16 helper_sme2_ah_fmax_b16(bfloat16 a, bfloat16 b, float_status *fps= t); bfloat16 helper_sme2_ah_fmin_b16(bfloat16 a, bfloat16 b, float_status *fps= t); =20 +float16 sve_f32_to_f16(float32 f, float_status *fpst); + #endif /* TARGET_ARM_VEC_INTERNAL_H */ diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 22e2a68b1b9..831179c0eed 100644 --- a/target/arm/tcg/sme.decode +++ b/target/arm/tcg/sme.decode @@ -720,3 +720,15 @@ SUB_aaz_s 11000001 101 000000 .. 111 ....0 11 ..= . @az_2x2_o3 SUB_aaz_s 11000001 101 000010 .. 111 ...00 11 ... @az_4x4_o3 SUB_aaz_d 11000001 111 000000 .. 111 ....0 11 ... @az_2x2_o3 SUB_aaz_d 11000001 111 000010 .. 111 ...00 11 ... @az_4x4_o3 + +### SME2 Multi-vector SVE Constructive Unary + +&zz_n zd zn n +@zz_1x2 ........ ... ..... ...... ..... zd:5 \ + &zz_n n=3D1 zn=3D%zn_ax2 + +BFCVT 11000001 011 00000 111000 ....0 ..... @zz_1x2 +BFCVTN 11000001 011 00000 111000 ....1 ..... @zz_1x2 + +FCVT_n 11000001 001 00000 111000 ....0 ..... @zz_1x2 +FCVTN 11000001 001 00000 111000 ....1 ..... @zz_1x2 diff --git a/target/arm/tcg/sme_helper.c b/target/arm/tcg/sme_helper.c index 0f79d7cb6e3..d97afdb69cf 100644 --- a/target/arm/tcg/sme_helper.c +++ b/target/arm/tcg/sme_helper.c @@ -1517,3 +1517,77 @@ DO_MLALL_IDX(sme2_usmlall_idx_s, uint32_t, uint8_t, = int8_t, H4, H1, +) DO_MLALL_IDX(sme2_sumlall_idx_s, uint32_t, int8_t, uint8_t, H4, H1, +) =20 #undef DO_MLALL_IDX + +/* Convert and compress */ +void HELPER(sme2_bfcvt)(void *vd, void *vs, float_status *fpst, uint32_t d= esc) +{ + ARMVectorReg scratch; + size_t oprsz =3D simd_oprsz(desc); + size_t i, n =3D oprsz / 4; + float32 *s0 =3D vs; + float32 *s1 =3D vs + sizeof(ARMVectorReg); + bfloat16 *d =3D vd; + + if (vd =3D=3D s1) { + s1 =3D memcpy(&scratch, s1, oprsz); + } + + for (i =3D 0; i < n; ++i) { + d[H2(i)] =3D float32_to_bfloat16(s0[H4(i)], fpst); + } + for (i =3D 0; i < n; ++i) { + d[H2(i) + n] =3D float32_to_bfloat16(s1[H4(i)], fpst); + } +} + +void HELPER(sme2_fcvt_n)(void *vd, void *vs, float_status *fpst, uint32_t = desc) +{ + ARMVectorReg scratch; + size_t oprsz =3D simd_oprsz(desc); + size_t i, n =3D oprsz / 4; + float32 *s0 =3D vs; + float32 *s1 =3D vs + sizeof(ARMVectorReg); + float16 *d =3D vd; + + if (vd =3D=3D s1) { + s1 =3D memcpy(&scratch, s1, oprsz); + } + + for (i =3D 0; i < n; ++i) { + d[H2(i)] =3D sve_f32_to_f16(s0[H4(i)], fpst); + } + for (i =3D 0; i < n; ++i) { + d[H2(i) + n] =3D sve_f32_to_f16(s1[H4(i)], fpst); + } +} + +/* Convert and interleave */ +void HELPER(sme2_bfcvtn)(void *vd, void *vs, float_status *fpst, uint32_t = desc) +{ + size_t i, n =3D simd_oprsz(desc) / 4; + float32 *s0 =3D vs; + float32 *s1 =3D vs + sizeof(ARMVectorReg); + bfloat16 *d =3D vd; + + for (i =3D 0; i < n; ++i) { + bfloat16 d0 =3D float32_to_bfloat16(s0[H4(i)], fpst); + bfloat16 d1 =3D float32_to_bfloat16(s1[H4(i)], fpst); + d[H2(i * 2 + 0)] =3D d0; + d[H2(i * 2 + 1)] =3D d1; + } +} + +void HELPER(sme2_fcvtn)(void *vd, void *vs, float_status *fpst, uint32_t d= esc) +{ + size_t i, n =3D simd_oprsz(desc) / 4; + float32 *s0 =3D vs; + float32 *s1 =3D vs + sizeof(ARMVectorReg); + bfloat16 *d =3D vd; + + for (i =3D 0; i < n; ++i) { + bfloat16 d0 =3D sve_f32_to_f16(s0[H4(i)], fpst); + bfloat16 d1 =3D sve_f32_to_f16(s1[H4(i)], fpst); + d[H2(i * 2 + 0)] =3D d0; + d[H2(i * 2 + 1)] =3D d1; + } +} diff --git a/target/arm/tcg/sve_helper.c b/target/arm/tcg/sve_helper.c index a2c363a4e17..b522ddaf7cb 100644 --- a/target/arm/tcg/sve_helper.c +++ b/target/arm/tcg/sve_helper.c @@ -4576,7 +4576,7 @@ static inline float64 sve_f16_to_f64(float16 f, float= _status *fpst) return ret; } =20 -static inline float16 sve_f32_to_f16(float32 f, float_status *fpst) +float16 sve_f32_to_f16(float32 f, float_status *fpst) { bool save =3D get_flush_to_zero(fpst); float16 ret; diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index 4c3b9aa7d6c..10e5b77040e 100644 --- a/target/arm/tcg/translate-sme.c +++ b/target/arm/tcg/translate-sme.c @@ -1335,3 +1335,28 @@ TRANS_FEAT(SMLALL_nx_d, aa64_sme2_i16i64, do_smlall_= nx, a, gen_helper_sme2_smlal TRANS_FEAT(SMLSLL_nx_d, aa64_sme2_i16i64, do_smlall_nx, a, gen_helper_sme2= _smlsll_idx_d) TRANS_FEAT(UMLALL_nx_d, aa64_sme2_i16i64, do_smlall_nx, a, gen_helper_sme2= _umlall_idx_d) TRANS_FEAT(UMLSLL_nx_d, aa64_sme2_i16i64, do_smlall_nx, a, gen_helper_sme2= _umlsll_idx_d) + +static bool do_zz_fpst(DisasContext *s, arg_zz_n *a, int data, + ARMFPStatusFlavour type, gen_helper_gvec_2_ptr *fn) +{ + if (sme_sm_enabled_check(s)) { + int svl =3D streaming_vec_reg_size(s); + TCGv_ptr fpst =3D fpstatus_ptr(type); + + for (int i =3D 0, n =3D a->n; i < n; ++i) { + tcg_gen_gvec_2_ptr(vec_full_reg_offset(s, a->zd + i), + vec_full_reg_offset(s, a->zn + i), + fpst, svl, svl, data, fn); + } + } + return true; +} + +TRANS_FEAT(BFCVT, aa64_sme2, do_zz_fpst, a, 0, + FPST_A64, gen_helper_sme2_bfcvt) +TRANS_FEAT(BFCVTN, aa64_sme2, do_zz_fpst, a, 0, + FPST_A64, gen_helper_sme2_bfcvtn) +TRANS_FEAT(FCVT_n, aa64_sme2, do_zz_fpst, a, 0, + FPST_A64, gen_helper_sme2_fcvt_n) +TRANS_FEAT(FCVTN, aa64_sme2, do_zz_fpst, a, 0, + FPST_A64, gen_helper_sme2_fcvtn) --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646976; cv=none; d=zohomail.com; s=zohoarc; b=TgD0A7ckfVdx/SSKyV4R/NorkxncNVR3/ga22GH2/wdaRl+sDjsqljVvWmV+Wg3AYk1CghB3X/H5/aiU+HkYI+bX+7YswOO7tNI8GfqyAq71QFXtbOm3I9g2bHZZRGff7re0xCPs2h4hpiQmSkRbhGbF49f2Xmee/lzeIjFKH+4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646976; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=wkw6psIRHCXdgECrfk4QsKxF+wC3SOGd8/GLWs79+O8=; b=kL1cqSgM7Hk6SF0K4d0Bp40BYv7+9c4/7KbJJNwgVhC5vXHWIxzyG+lpsl1BXg7aKT3wwCgIy9WbVgatoZXtB2B4TrdsLlrwgl24osV2zQPBT1d0BAxYcNq11/EmeYoU2lcOem1OJ+grAWGB2UOgbFYCWdYgqwrvoW/7EjIiee0= 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 1751646975976524.2124662222934; Fri, 4 Jul 2025 09:36:15 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjFH-0003Ss-Qa; Fri, 04 Jul 2025 12:26:40 -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 1uXjEm-0001OB-UR for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:09 -0400 Received: from mail-wr1-x431.google.com ([2a00:1450:4864:20::431]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjEj-0006VT-UV for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:08 -0400 Received: by mail-wr1-x431.google.com with SMTP id ffacd0b85a97d-3a575a988f9so679118f8f.0 for ; Fri, 04 Jul 2025 09:26:05 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.26.03 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:26:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646364; x=1752251164; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=wkw6psIRHCXdgECrfk4QsKxF+wC3SOGd8/GLWs79+O8=; b=NQ5IqwMPDPrwtoFCnrBYlrVAkchUqc03s/FfHqRZtFp7VVHJsmGm9wzm14G5R49T4/ 2xNZwOJlY3sNvRvxq1LAEMgWcoLmZd9sYn2wT+flLNEkSQKFr8qk5JEF0nW47SvwWHhw oAYbHSKYZVwBsixDTcYUCYMAeDHYzcIA/WZovl/37tsRHbsQRxtCmkH0L3KqQp17TpLh BvMnUVawMfhdtnPZ9keuAMF2/4+VBjQy6OIG8wG63bd7e03UhLKRLjs9Ob1fZn0lJUBR qyg5QfMZO+qSZp0SHGgteQtVgP0K+Od5Acd1usF1E16Fhvy2JViMchrz/tOQfL5ezWTK wnIw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646364; x=1752251164; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=wkw6psIRHCXdgECrfk4QsKxF+wC3SOGd8/GLWs79+O8=; b=ZHpXwrjg5iz90EAExkUaztDxa4EBGq3vNasyuLnOmTAsayb8MMsBcUDQriIR4r2w4z 722M/kRuw3hEoxwvmmkZIvx4LOwenWx5rTgCXercehC72UoNq8wBn+ZN9/M45nAODteY 3Ye4vZu1qiaNyQMnIF/eEYFlEV1znPGsprESFkOE9kTO0urh6FjqBCDbpfeWmrPqH8ug mjei5np3ngiq7wj9Am6ebja8gE1Z4X0vQFR+u9WSHVlAV896V4CBGxO1fXWjvcCPLBAt qsy0vb7HgFwK3tNvG8aphJHudBs59Y3KYqoYL/NrvUX14NaWZlthJ9eBFcNQDTo9O869 zSKw== X-Gm-Message-State: AOJu0YzPmSHspoB67dwTDc3W68A1bQmXDMTUIIa1sg4PiD9cgKds8y4o 64yULQPq0WwO9mrTNmFtWAwg5VMwIQyy9HvubaR6qA0+vZmxWHCYFX9hr7DcyB1Vi995ebq1Wi9 TPpD6 X-Gm-Gg: ASbGncsqWNCwFtAQAabYacGUokkM5RcwxoRQqenRoEFNOPudFdNhfpf2I9zAlN0YKfH mHFEAQJFij5+CnKGIRdrIMberWvN3JxUTN4EOgiiRyFPBhjJrT+fpbYOkzEaqUP+QVWeOLOE2RO Ko7xz68mxzQCpodkGLCjsEz0JBbIRLf2qn99yD5h8CPmwJNb/xR5RmTKNToArQctef07Fj5cMu7 TMsDiMdyJz4y6TnxNEwbj8H7wbW/ZgeZC2bwvpyWQEQy2ZMwihsF3o43Rp0Lld9O4h++T3HN1PM kx9e+lBZVdrnXIm0/1d9xrC/9WufAc1JkQFjGR/tFd2sANayAqVR/EDtfoKX3JQz9rBB X-Google-Smtp-Source: AGHT+IFRpY/25re3K+fIqq0i8/k2o/eXea+074Y1iTbthinMGwMtFaVeiEbdjKj7sEk1drhFxNEq/A== X-Received: by 2002:a05:6000:2008:b0:3a6:d95c:5e8 with SMTP id ffacd0b85a97d-3b4964dca43mr3266627f8f.35.1751646364427; Fri, 04 Jul 2025 09:26:04 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 065/119] target/arm: Implement SME2 FCVT (widening), FCVTL Date: Fri, 4 Jul 2025 17:24:05 +0100 Message-ID: <20250704162501.249138-66-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::431; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x431.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751646977931116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-54-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/helper-sme.h | 2 ++ target/arm/tcg/vec_internal.h | 1 + target/arm/tcg/sme.decode | 5 ++++ target/arm/tcg/sme_helper.c | 45 ++++++++++++++++++++++++++++++++++ target/arm/tcg/sve_helper.c | 2 +- target/arm/tcg/translate-sme.c | 5 ++++ 6 files changed, 59 insertions(+), 1 deletion(-) diff --git a/target/arm/tcg/helper-sme.h b/target/arm/tcg/helper-sme.h index 97e70959e8a..be4621f2d9d 100644 --- a/target/arm/tcg/helper-sme.h +++ b/target/arm/tcg/helper-sme.h @@ -217,3 +217,5 @@ DEF_HELPER_FLAGS_4(sme2_bfcvt, TCG_CALL_NO_RWG, void, p= tr, ptr, fpst, i32) DEF_HELPER_FLAGS_4(sme2_bfcvtn, TCG_CALL_NO_RWG, void, ptr, ptr, fpst, i32) DEF_HELPER_FLAGS_4(sme2_fcvt_n, TCG_CALL_NO_RWG, void, ptr, ptr, fpst, i32) DEF_HELPER_FLAGS_4(sme2_fcvtn, TCG_CALL_NO_RWG, void, ptr, ptr, fpst, i32) +DEF_HELPER_FLAGS_4(sme2_fcvt_w, TCG_CALL_NO_RWG, void, ptr, ptr, fpst, i32) +DEF_HELPER_FLAGS_4(sme2_fcvtl, TCG_CALL_NO_RWG, void, ptr, ptr, fpst, i32) diff --git a/target/arm/tcg/vec_internal.h b/target/arm/tcg/vec_internal.h index c8199a3ef8e..bbf76f63b18 100644 --- a/target/arm/tcg/vec_internal.h +++ b/target/arm/tcg/vec_internal.h @@ -306,6 +306,7 @@ static inline float64 float64_maybe_ah_chs(float64 a, b= ool fpcr_ah) bfloat16 helper_sme2_ah_fmax_b16(bfloat16 a, bfloat16 b, float_status *fps= t); bfloat16 helper_sme2_ah_fmin_b16(bfloat16 a, bfloat16 b, float_status *fps= t); =20 +float32 sve_f16_to_f32(float16 f, float_status *fpst); float16 sve_f32_to_f16(float32 f, float_status *fpst); =20 #endif /* TARGET_ARM_VEC_INTERNAL_H */ diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 831179c0eed..5100ebaebad 100644 --- a/target/arm/tcg/sme.decode +++ b/target/arm/tcg/sme.decode @@ -726,9 +726,14 @@ SUB_aaz_d 11000001 111 000010 .. 111 ...00 11 ..= . @az_4x4_o3 &zz_n zd zn n @zz_1x2 ........ ... ..... ...... ..... zd:5 \ &zz_n n=3D1 zn=3D%zn_ax2 +@zz_2x1 ........ ... ..... ...... zn:5 ..... \ + &zz_n n=3D1 zd=3D%zd_ax2 =20 BFCVT 11000001 011 00000 111000 ....0 ..... @zz_1x2 BFCVTN 11000001 011 00000 111000 ....1 ..... @zz_1x2 =20 FCVT_n 11000001 001 00000 111000 ....0 ..... @zz_1x2 FCVTN 11000001 001 00000 111000 ....1 ..... @zz_1x2 + +FCVT_w 11000001 101 00000 111000 ..... ....0 @zz_2x1 +FCVTL 11000001 101 00000 111000 ..... ....1 @zz_2x1 diff --git a/target/arm/tcg/sme_helper.c b/target/arm/tcg/sme_helper.c index d97afdb69cf..c696246d15d 100644 --- a/target/arm/tcg/sme_helper.c +++ b/target/arm/tcg/sme_helper.c @@ -29,6 +29,13 @@ #include "vec_internal.h" #include "sve_ldst_internal.h" =20 + +static bool vectors_overlap(ARMVectorReg *x, unsigned nx, + ARMVectorReg *y, unsigned ny) +{ + return !(x + nx <=3D y || y + ny <=3D x); +} + void helper_set_svcr(CPUARMState *env, uint32_t val, uint32_t mask) { aarch64_set_svcr(env, val, mask); @@ -1591,3 +1598,41 @@ void HELPER(sme2_fcvtn)(void *vd, void *vs, float_st= atus *fpst, uint32_t desc) d[H2(i * 2 + 1)] =3D d1; } } + +/* Expand and convert */ +void HELPER(sme2_fcvt_w)(void *vd, void *vs, float_status *fpst, uint32_t = desc) +{ + ARMVectorReg scratch; + size_t oprsz =3D simd_oprsz(desc); + size_t i, n =3D oprsz / 4; + float16 *s =3D vs; + float32 *d0 =3D vd; + float32 *d1 =3D vd + sizeof(ARMVectorReg); + + if (vectors_overlap(vd, 1, vs, 2)) { + s =3D memcpy(&scratch, s, oprsz); + } + + for (i =3D 0; i < n; ++i) { + d0[H4(i)] =3D sve_f16_to_f32(s[H2(i)], fpst); + } + for (i =3D 0; i < n; ++i) { + d1[H4(i)] =3D sve_f16_to_f32(s[H2(n + i)], fpst); + } +} + +/* Deinterleave and convert. */ +void HELPER(sme2_fcvtl)(void *vd, void *vs, float_status *fpst, uint32_t d= esc) +{ + size_t i, n =3D simd_oprsz(desc) / 4; + float16 *s =3D vs; + float32 *d0 =3D vd; + float32 *d1 =3D vd + sizeof(ARMVectorReg); + + for (i =3D 0; i < n; ++i) { + float32 v0 =3D sve_f16_to_f32(s[H2(i * 2 + 0)], fpst); + float32 v1 =3D sve_f16_to_f32(s[H2(i * 2 + 1)], fpst); + d0[H4(i)] =3D v0; + d1[H4(i)] =3D v1; + } +} diff --git a/target/arm/tcg/sve_helper.c b/target/arm/tcg/sve_helper.c index b522ddaf7cb..4f12723afea 100644 --- a/target/arm/tcg/sve_helper.c +++ b/target/arm/tcg/sve_helper.c @@ -4554,7 +4554,7 @@ void HELPER(NAME)(void *vd, void *vn, void *vg, = \ * FZ16. When converting from fp16, this affects flushing input denormals; * when converting to fp16, this affects flushing output denormals. */ -static inline float32 sve_f16_to_f32(float16 f, float_status *fpst) +float32 sve_f16_to_f32(float16 f, float_status *fpst) { bool save =3D get_flush_inputs_to_zero(fpst); float32 ret; diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index 10e5b77040e..d6167eafe17 100644 --- a/target/arm/tcg/translate-sme.c +++ b/target/arm/tcg/translate-sme.c @@ -1360,3 +1360,8 @@ TRANS_FEAT(FCVT_n, aa64_sme2, do_zz_fpst, a, 0, FPST_A64, gen_helper_sme2_fcvt_n) TRANS_FEAT(FCVTN, aa64_sme2, do_zz_fpst, a, 0, FPST_A64, gen_helper_sme2_fcvtn) + +TRANS_FEAT(FCVT_w, aa64_sme_f16f16, do_zz_fpst, a, 0, + FPST_A64_F16, gen_helper_sme2_fcvt_w) +TRANS_FEAT(FCVTL, aa64_sme_f16f16, do_zz_fpst, a, 0, + FPST_A64_F16, gen_helper_sme2_fcvtl) --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646590; cv=none; d=zohomail.com; s=zohoarc; b=ZiGyK8kFmbLxfw0pCaL15+GPiXJ8exeVSnBkqD+znOF8MuD/x8plkps3gxQSCj1CYtRQo2vistL5nmULSxswG/BTrbRprMUz9DQaMrwMz7YIXEjHuzgnYjwbT/VuFgmBZE9DNxCO/FLNEoKi7pT6wuIDaG65ON4eCxDinS/bObI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646590; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=jOfPUoD/EdZ7exrh2TXwHv4lwM7vPam1pOKiytCEmQ0=; b=BSvFJcCOMPLzpzps2+jOjkdNj8He/C25rtmL3gwq3FiJkgi75QtFPN7BLLFFw7Q7bsVIFtiSLhh9ow8lxuaIDuHmnhcaX8YnydEN+tSTUJoYoRZVYuPwTmgFcIy8Oecv60HuJ7QU7yj0g16n2P5AxQ6RBbFrU18IW0N44ZdaNAo= 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 1751646590277470.8224241095037; Fri, 4 Jul 2025 09:29:50 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjFF-0003EW-Rx; Fri, 04 Jul 2025 12:26:38 -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 1uXjEn-0001OC-0K for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:09 -0400 Received: from mail-wr1-x42f.google.com ([2a00:1450:4864:20::42f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjEl-0006Vy-BK for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:08 -0400 Received: by mail-wr1-x42f.google.com with SMTP id ffacd0b85a97d-3a4fd1ba177so793052f8f.0 for ; Fri, 04 Jul 2025 09:26:06 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.26.04 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:26:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646365; x=1752251165; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=jOfPUoD/EdZ7exrh2TXwHv4lwM7vPam1pOKiytCEmQ0=; b=bBV1nzexd1EA4LHoJNvVE0qwcauw4sPTbaQOnJTNMoSv10QraqIpreHt+1SOgt9pHv sW1IOrVIXSPMjhKUwHEYqnnwX6b/ZaBhxevV8Xx5vV74EzR9WgNIHvG6+pi09gtDLB4S WoRfDj7Al41jtr2lMMGp19tbM15pOF3Lw/25gCEBKJtFliu+t+WE2vqkf2BQRlzDhcHb OyanulOdtBqr7voYOOZngPgLA9Ov9Q1BOE6c6JQiyqQw1jebm26WGEfjjb9I8bi1BXRb ilAVTJNTviGelBLNYacaBwE4oRJJyZkZfqiiHvIFwuIVc6yUATF8kj3m3oFES6VQHUzh xxFw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646365; x=1752251165; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=jOfPUoD/EdZ7exrh2TXwHv4lwM7vPam1pOKiytCEmQ0=; b=BvLJ+/X7Ur0yaybtGtE2WJRzla3ensK1c6LxfpwD53VsBaQUzxWO2uC0M92e6MT9rn OrJtssUBZGvifoYFrxdR0yuviwCRnUm87xYJsw5EhWM8gBKQlY5BSO13vx9I8AGzPpvL SUiPYNy32cQzIEnKPIgUBU/7jTTCBZywn8d5x+QmBQGDxar3Zoy63rrsb/5XXuF03vN0 fldrFiLhy5x4l6NectLIFvoQ8jQTEOFCPxSguMqLGAWQCMeLvlremTlqTcadFz+coBi6 chsPjapOSecBjaQ7K1eopVnbUNlXYsLdBYWHcgBUd8PhvBnrBwjpnUVy2AHf5/CnswvA NqQw== X-Gm-Message-State: AOJu0Yydu03Nt3set4PgUV/E/XbrubmpPZHRzElQvz/Oq8MUIvDzRco8 ilqjiiF546e2S4mf7/9WF68JNp5Hj5PCRfZi4cZUw2uzIuguixkyrzNCkfCD4cFaXNkRr3sOyKe FyLS+ X-Gm-Gg: ASbGncul5pgyh14vh/mPx5AEfaiMQIGMonXbyX2vDKPN2FZ+OvHe33m3cVT7d+4Gp1Z hMdd/9Www0rgBaNpwRuaqoDkXfxtbYiNawWqgsaVPqsq+hv0SxOk0nqTLpNLSvt4pxiGRby82yM nN1ldMfx25PTGbCE8eHw3TDS8dcPQgxKKLK6Ty69uLRAVIhCbwR9vtfXYdRu1tShMLMGglynIVz npOdP+RXcGNEsQIHmRBp5QKXCBhdIj6duYFajbfR62RM/jTt0IaN3GpvN6BGqwu2MngcVQ4QUrI irxydxa5/6VHaAeOulqxAO0t60dhCSmOmG4tc7IP3GRCrYPFqaZzF9ai2gNEroKNA3OX56q+zs1 bKEo= X-Google-Smtp-Source: AGHT+IFkStfrZWsKS/7Z8E1VszPld7nLztXRAamx/GszjkvC9AkU+ZZArR7c6LYX691FFf8SpS0xDA== X-Received: by 2002:a05:6000:21c3:b0:3a6:d93e:526d with SMTP id ffacd0b85a97d-3b49310cdafmr2125457f8f.10.1751646365356; Fri, 04 Jul 2025 09:26:05 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 066/119] target/arm: Implement SME2 FCVTZS, FCVTZU Date: Fri, 4 Jul 2025 17:24:06 +0100 Message-ID: <20250704162501.249138-67-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::42f; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x42f.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751646590980116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-55-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/sme.decode | 9 +++++++++ target/arm/tcg/translate-sme.c | 5 +++++ 2 files changed, 14 insertions(+) diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 5100ebaebad..79df2dcd2b0 100644 --- a/target/arm/tcg/sme.decode +++ b/target/arm/tcg/sme.decode @@ -728,6 +728,10 @@ SUB_aaz_d 11000001 111 000010 .. 111 ...00 11 ..= . @az_4x4_o3 &zz_n n=3D1 zn=3D%zn_ax2 @zz_2x1 ........ ... ..... ...... zn:5 ..... \ &zz_n n=3D1 zd=3D%zd_ax2 +@zz_2x2 ........ ... ..... ...... .... . ..... \ + &zz_n n=3D2 zd=3D%zd_ax2 zn=3D%zn_ax2 +@zz_4x4 ........ ... ..... ...... .... . ..... \ + &zz_n n=3D4 zd=3D%zd_ax4 zn=3D%zn_ax4 =20 BFCVT 11000001 011 00000 111000 ....0 ..... @zz_1x2 BFCVTN 11000001 011 00000 111000 ....1 ..... @zz_1x2 @@ -737,3 +741,8 @@ FCVTN 11000001 001 00000 111000 ....1 ..... = @zz_1x2 =20 FCVT_w 11000001 101 00000 111000 ..... ....0 @zz_2x1 FCVTL 11000001 101 00000 111000 ..... ....1 @zz_2x1 + +FCVTZS 11000001 001 00001 111000 ....0 ....0 @zz_2x2 +FCVTZS 11000001 001 10001 111000 ...00 ...00 @zz_4x4 +FCVTZU 11000001 001 00001 111000 ....1 ....0 @zz_2x2 +FCVTZU 11000001 001 10001 111000 ...01 ...00 @zz_4x4 diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index d6167eafe17..3bf2b6935f3 100644 --- a/target/arm/tcg/translate-sme.c +++ b/target/arm/tcg/translate-sme.c @@ -1365,3 +1365,8 @@ TRANS_FEAT(FCVT_w, aa64_sme_f16f16, do_zz_fpst, a, 0, FPST_A64_F16, gen_helper_sme2_fcvt_w) TRANS_FEAT(FCVTL, aa64_sme_f16f16, do_zz_fpst, a, 0, FPST_A64_F16, gen_helper_sme2_fcvtl) + +TRANS_FEAT(FCVTZS, aa64_sme2, do_zz_fpst, a, 0, + FPST_A64, gen_helper_gvec_vcvt_rz_fs) +TRANS_FEAT(FCVTZU, aa64_sme2, do_zz_fpst, a, 0, + FPST_A64, gen_helper_gvec_vcvt_rz_fu) --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646751; cv=none; d=zohomail.com; s=zohoarc; b=mxC7/BHxXA0FaFIrji9dIWy7p+jG1kDnPIoICm4HhQfHBOz19Zdu67OftMLKe7vw3UAb96Q96vVD5LDbEqEWuuX5qEPvaoxxcMPM1WCMcfWi7BPYQ99RF9y9hDmaxLXKeoKetsd+6FLkGWPUvRxaRdOyTsheFmXDs/Yc3YLERk8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646751; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=e4vy0WANG/EUmmYhw+UyOKc+Ub3sneFb8rRPaIkIhDM=; b=YZHXpO/hj4FSsUUEsMYEwaF3xFlJB134TH0O5SQb7SVTSxtVzTnZQP9qZ3GnqK3lVUKGM4udmY3jfgaxtxAxCvx3RuwHDyJ22RVCFvFjPKQ8FGGgpiy+4ipdhHm4kt+Z5XCS8mseR8D/0rNHej1j1ZBAlUK1NsUON8oh4g3xROg= 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 1751646751274316.184378931924; Fri, 4 Jul 2025 09:32:31 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjFG-0003Ir-I0; Fri, 04 Jul 2025 12:26:38 -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 1uXjEo-0001Qv-VX for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:11 -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 1uXjEm-0006WV-EQ for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:10 -0400 Received: by mail-wm1-x336.google.com with SMTP id 5b1f17b1804b1-451d6ade159so9792055e9.1 for ; Fri, 04 Jul 2025 09:26:07 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.26.05 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:26:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646366; x=1752251166; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=e4vy0WANG/EUmmYhw+UyOKc+Ub3sneFb8rRPaIkIhDM=; b=y79SvlmcM6vJ8RHHEKmDfv3TwmAihi8XWTmk9vJMq6zTJJ4h6R2X3v64QHSpT3mrME DeyZ3cuygkWYhiAKV9AJBTpP9CWvI5B8zsI1CuWbTKVupu4a/1GFfipY2w2D75rnMSVw COyV2vmcUaDFqwCgwfcLsG4x0m4Mcke2E1HfOj/cISB09xoHN8Ca9YSjXrpTVIJxP8fP dTRyDS092YKmj+UIxd4NAzoeTHi4pgKIevusKU7RG1dW+Wro+4y55SQRMhSM+R/ixw7v +roNoztXslNaB5FdWWMaVygHECnV0CbRve4yS7OcTgMebX5RjG4P+ClbVLniD/g9NQs6 /d3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646366; x=1752251166; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=e4vy0WANG/EUmmYhw+UyOKc+Ub3sneFb8rRPaIkIhDM=; b=pBfAaU2hAHO8on6CBYk2dw49ljYCFTVQ5srkmzl/hQjUTgF0TVBC/Hyczks/zwICbM +kNLoWPyeKZ6SHrAxeQCFQBc13WDPg++Wwi4rONL/zJz69DP45R+8akaDjlvHU1FUMj/ /pPe8W7ctXhRF04FUZ8B9CYY5/+f7jMuhhuSP7FI9KUOjcZIKQAXl4N43ps2cOptVwI+ pCMTLOpbYG5Cwt0YX+8B5/HUq5nulBZcZ0+D4lB5LcL9LRKSL/wCG2nA5nMULGbPXBHF WY375FJRJpDLzUSLYAD4AU6kPAUW0r03UCHxKBdS1eH87ANAHYRm913Gyk07iLiYSLy9 Jczg== X-Gm-Message-State: AOJu0YzgRinYxScdxUY1FqRFXyDRHqlK1triTnUA4v+ncx2hGV3TsdEL y8tu6xXQIzNHIvE3dx8irdG6ZPolU/gX2YliSt1psfHdgNNe1qcs9oqeNsajHZbmndE03oqGwou 6j9yi X-Gm-Gg: ASbGncuJvFc98DvpUYndDdhsoajaCvOIsXIvwoXob5VyeqhGKXLKOVG3s6jg5In52Ww OVnl4M9jyp9fscUK1sf3jwR1Ngju+iDmjDwypiABDepX5EML9Dmto4dvBnJH0T8yQd6jUDj/bmG jmChfmn2c3lOhizZR0KABvksqMG3jejo2Ttd+10IyNLw1O7e+BEhQw6/bPgmUlOhJJykelgX9Uh x/lxLyUdpGTDpjfOZIG5ue1fDWxQBpWYdnTIfFniqPtS945iB37IAvFDRvuejb/VWmEFgPYiLvu KBY3pTxprYDBX53Wx1b7nVqdCG1+CRLyZQfiFp/sH+NYnhCDXGq/oPXr9sa/Fld8aGcX X-Google-Smtp-Source: AGHT+IGU8p0GT0Nom75Akn2pGrqOj2DTFfGARAoMqGTCgA36eEXcdR+KbiFqrtdq5s5s4F5TVyOd8w== X-Received: by 2002:a05:600c:3554:b0:448:e8c0:c778 with SMTP id 5b1f17b1804b1-454b4ea5dc1mr26158555e9.22.1751646366518; Fri, 04 Jul 2025 09:26:06 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 067/119] target/arm: Implement SME2 SCVTF, UCVTF Date: Fri, 4 Jul 2025 17:24:07 +0100 Message-ID: <20250704162501.249138-68-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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=peter.maydell@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 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: 1751646753118116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-56-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/helper-sme.h | 2 ++ target/arm/tcg/sme.decode | 5 +++++ target/arm/tcg/sme_helper.c | 22 ++++++++++++++++++++++ target/arm/tcg/translate-sme.c | 5 +++++ 4 files changed, 34 insertions(+) diff --git a/target/arm/tcg/helper-sme.h b/target/arm/tcg/helper-sme.h index be4621f2d9d..6314ad7e012 100644 --- a/target/arm/tcg/helper-sme.h +++ b/target/arm/tcg/helper-sme.h @@ -219,3 +219,5 @@ DEF_HELPER_FLAGS_4(sme2_fcvt_n, TCG_CALL_NO_RWG, void, = ptr, ptr, fpst, i32) DEF_HELPER_FLAGS_4(sme2_fcvtn, TCG_CALL_NO_RWG, void, ptr, ptr, fpst, i32) DEF_HELPER_FLAGS_4(sme2_fcvt_w, TCG_CALL_NO_RWG, void, ptr, ptr, fpst, i32) DEF_HELPER_FLAGS_4(sme2_fcvtl, TCG_CALL_NO_RWG, void, ptr, ptr, fpst, i32) +DEF_HELPER_FLAGS_4(sme2_scvtf, TCG_CALL_NO_RWG, void, ptr, ptr, fpst, i32) +DEF_HELPER_FLAGS_4(sme2_ucvtf, TCG_CALL_NO_RWG, void, ptr, ptr, fpst, i32) diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 79df2dcd2b0..449d97bd28b 100644 --- a/target/arm/tcg/sme.decode +++ b/target/arm/tcg/sme.decode @@ -746,3 +746,8 @@ FCVTZS 11000001 001 00001 111000 ....0 ....0 = @zz_2x2 FCVTZS 11000001 001 10001 111000 ...00 ...00 @zz_4x4 FCVTZU 11000001 001 00001 111000 ....1 ....0 @zz_2x2 FCVTZU 11000001 001 10001 111000 ...01 ...00 @zz_4x4 + +SCVTF 11000001 001 00010 111000 ....0 ....0 @zz_2x2 +SCVTF 11000001 001 10010 111000 ...00 ...00 @zz_4x4 +UCVTF 11000001 001 00010 111000 ....1 ....0 @zz_2x2 +UCVTF 11000001 001 10010 111000 ...01 ...00 @zz_4x4 diff --git a/target/arm/tcg/sme_helper.c b/target/arm/tcg/sme_helper.c index c696246d15d..d3841400ee5 100644 --- a/target/arm/tcg/sme_helper.c +++ b/target/arm/tcg/sme_helper.c @@ -1636,3 +1636,25 @@ void HELPER(sme2_fcvtl)(void *vd, void *vs, float_st= atus *fpst, uint32_t desc) d1[H4(i)] =3D v1; } } + +void HELPER(sme2_scvtf)(void *vd, void *vs, float_status *fpst, uint32_t d= esc) +{ + size_t i, n =3D simd_oprsz(desc) / 4; + int32_t *d =3D vd; + float32 *s =3D vs; + + for (i =3D 0; i < n; ++i) { + d[i] =3D int32_to_float32(s[i], fpst); + } +} + +void HELPER(sme2_ucvtf)(void *vd, void *vs, float_status *fpst, uint32_t d= esc) +{ + size_t i, n =3D simd_oprsz(desc) / 4; + uint32_t *d =3D vd; + float32 *s =3D vs; + + for (i =3D 0; i < n; ++i) { + d[i] =3D uint32_to_float32(s[i], fpst); + } +} diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index 3bf2b6935f3..dce3b56de2f 100644 --- a/target/arm/tcg/translate-sme.c +++ b/target/arm/tcg/translate-sme.c @@ -1370,3 +1370,8 @@ TRANS_FEAT(FCVTZS, aa64_sme2, do_zz_fpst, a, 0, FPST_A64, gen_helper_gvec_vcvt_rz_fs) TRANS_FEAT(FCVTZU, aa64_sme2, do_zz_fpst, a, 0, FPST_A64, gen_helper_gvec_vcvt_rz_fu) + +TRANS_FEAT(SCVTF, aa64_sme2, do_zz_fpst, a, 0, + FPST_A64, gen_helper_sme2_scvtf) +TRANS_FEAT(UCVTF, aa64_sme2, do_zz_fpst, a, 0, + FPST_A64, gen_helper_sme2_ucvtf) --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646504; cv=none; d=zohomail.com; s=zohoarc; b=BpB4VmZRiEPxL1bYXgFCTRS98UJfasaFBgDul5uCVWskmnWOM/9IQDBqUb8qlku0Dh8N4YE2IxRh/jK3fuugQieNuolTrMVO9gCnleBUsW3D7XD9JDGRLAxujicf74ca1w17jx2bm0H4M3OsDMea+W3X8y/XfUS3ci069iu0yFw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646504; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=GLTs7NrGcuBQI/bwBvnL5DbR65mtOHfwnrEp9sy1wk4=; b=Ze6Aa5X0MImoQaQGgTMjzdnUmr4NYNLGVGGafS6pkWKN9H0IfqMmbmyH28bAR1CMoOTuSniLATtdarqJYRpzmQ2znKC/9of+hDMxVj7isOGqnK8cIQAEYehwktWOXsXt8xVNnzVzz4JO2IoaYhhpIpbV+arZbmncNm63mWP09Sc= 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 1751646504940763.3317323929763; Fri, 4 Jul 2025 09:28:24 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjF8-0002X9-3u; Fri, 04 Jul 2025 12:26:30 -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 1uXjEo-0001Qw-Ue for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:11 -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 1uXjEm-0006Wr-PD for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:10 -0400 Received: by mail-wm1-x331.google.com with SMTP id 5b1f17b1804b1-453066fad06so7825685e9.2 for ; Fri, 04 Jul 2025 09:26:08 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.26.06 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:26:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646367; x=1752251167; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=GLTs7NrGcuBQI/bwBvnL5DbR65mtOHfwnrEp9sy1wk4=; b=z6QBiw0el6rMsppLO/fgbuoKWxRMLaxtGUbYFFTdUK3gerkogdPuZrrDJglYqpl1/n Ocr8ETtikKGb0uAn50pqMXQQz7CtWVWTsBSnGTFh3eH/cFbRMBHyeUMXVzaEEp1yD+cZ GRWAvTWrVBOoUZzd1PKmAl+8I0ZUxQ2qOhYI18Wdk4vz1uiz0PWYztrUAkqn3U7LsUrK naBQCPajBiq1PqXoww4M/NQQhmE9YZXfWA9Un7oUB+oz7IOzV5ZLxgCfBwceVMMcCuQ2 p7zitQbCSnTQJL/dxnpFcy0u7oR/MphdmdG3JstUhM9yny6+PUHwqRm0EWtgKvWkDgMd Ty+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646367; x=1752251167; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=GLTs7NrGcuBQI/bwBvnL5DbR65mtOHfwnrEp9sy1wk4=; b=WBYLeGU86WT5GFCmMq5wc2Gk0UiExdIY6TxmawIYLZwZK/O61WwgbuyBtxB5LTQBIF /KNvhHTBu0wbmwOWmA29KMBZM+YUVLTu4fQkS38CC/NLLu7oarFCyPUz+2hxmrW61ajN GntEcwCZbQfletCBzc+xM0DdO93VLNqBLCgtVdTbf9ofJtPNf4DFc+nBYK6kcuFO9nQc +1e6JYq451Ca3xHRUoP1PCJ4+epNXVZE3Hl6EYC9RIyOpeGAyTPVCIxkUCcPxtcv2YnM beCrFg2JjFqwVA95fbWQGkYdy0rWLksKUvAZpXxDvMIvaom2TY0nJNQbLpyuzzF3fy81 iitw== X-Gm-Message-State: AOJu0YyHeEUI1YAWuFIyRBre5rraO2jqLvNkDWWmKqXoxPCUD4fS1jcV h39/Mnk4JgTRrbmGSj7OOqaRQHJz3I08Gh1VNtOjyOHmkr94Mf9qACGYcVFYRNtXSOyQfCJ5L9U MtT5z X-Gm-Gg: ASbGncthEM+NY8y1KMimx1arV/+lfQ3zLPVma3QFtBMeVbEzVvutvAibMNgcK8wuWvF 7nLnzuKIcYVXEP64yrO4MWy6rxA9b63WnWiqteiliuyK5kZs/Jmsukv0VfwcmaP7yED1VaFYFRX 55WZTAt4UBoist9TTZPCJHm5TbDXJXR6iEd9Fnk5XDc8RI7FnQUmlEI8uX9ovI2cXOl0exmnU53 ym/JwyIq/gUGOlM7nKkFSxYes2tp1gR5suRMNU6OFYUxLmxihIRg+KroNZi22wRpATPk1EZoSjR +LHOpbfGM/IhBpqXcRpfsjQohvMBBQ4+cM57TfzyhYWGVcn/34op7vF1bV9OwdqWpK8l X-Google-Smtp-Source: AGHT+IFdNAEHs18NEH85te2Im29CN5cEyTbMYbFw7HQpg7iP1qDl9zam7I0rxlPTt1PNtAH8v8swLw== X-Received: by 2002:a05:6000:2890:b0:3a4:cbc6:9db0 with SMTP id ffacd0b85a97d-3b4966046e2mr3240398f8f.51.1751646367331; Fri, 04 Jul 2025 09:26:07 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 068/119] target/arm: Implement SME2 FRINTN, FRINTP, FRINTM, FRINTA Date: Fri, 4 Jul 2025 17:24:08 +0100 Message-ID: <20250704162501.249138-69-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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=peter.maydell@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 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: 1751646506219116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-57-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/sme.decode | 9 +++++++++ target/arm/tcg/translate-sme.c | 9 +++++++++ 2 files changed, 18 insertions(+) diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 449d97bd28b..9cc25622d4c 100644 --- a/target/arm/tcg/sme.decode +++ b/target/arm/tcg/sme.decode @@ -751,3 +751,12 @@ SCVTF 11000001 001 00010 111000 ....0 ....0 = @zz_2x2 SCVTF 11000001 001 10010 111000 ...00 ...00 @zz_4x4 UCVTF 11000001 001 00010 111000 ....1 ....0 @zz_2x2 UCVTF 11000001 001 10010 111000 ...01 ...00 @zz_4x4 + +FRINTN 11000001 101 01000 111000 ....0 ....0 @zz_2x2 +FRINTN 11000001 101 11000 111000 ...00 ...00 @zz_4x4 +FRINTP 11000001 101 01001 111000 ....0 ....0 @zz_2x2 +FRINTP 11000001 101 11001 111000 ...00 ...00 @zz_4x4 +FRINTM 11000001 101 01010 111000 ....0 ....0 @zz_2x2 +FRINTM 11000001 101 11010 111000 ...00 ...00 @zz_4x4 +FRINTA 11000001 101 01100 111000 ....0 ....0 @zz_2x2 +FRINTA 11000001 101 11100 111000 ...00 ...00 @zz_4x4 diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index dce3b56de2f..4fbc61ae272 100644 --- a/target/arm/tcg/translate-sme.c +++ b/target/arm/tcg/translate-sme.c @@ -1375,3 +1375,12 @@ TRANS_FEAT(SCVTF, aa64_sme2, do_zz_fpst, a, 0, FPST_A64, gen_helper_sme2_scvtf) TRANS_FEAT(UCVTF, aa64_sme2, do_zz_fpst, a, 0, FPST_A64, gen_helper_sme2_ucvtf) + +TRANS_FEAT(FRINTN, aa64_sme2, do_zz_fpst, a, float_round_nearest_even, + FPST_A64, gen_helper_gvec_vrint_rm_s) +TRANS_FEAT(FRINTP, aa64_sme2, do_zz_fpst, a, float_round_up, + FPST_A64, gen_helper_gvec_vrint_rm_s) +TRANS_FEAT(FRINTM, aa64_sme2, do_zz_fpst, a, float_round_down, + FPST_A64, gen_helper_gvec_vrint_rm_s) +TRANS_FEAT(FRINTA, aa64_sme2, do_zz_fpst, a, float_round_ties_away, + FPST_A64, gen_helper_gvec_vrint_rm_s) --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647255; cv=none; d=zohomail.com; s=zohoarc; b=Dyx0nLPgoCxU+zFKVodFyiznY5nI1BoUmWGMZB8SBnHJcxO27eyXlLcMHS9aHzYBe/k8nFQPHXkkbKRj8G+0KYCaIdv3JrdVkpGPTU+O2bkDUHqNA7L3lhZ7KiDvwvu/0+Ve8LielJ5vgatgAqtUESvWK97W5oUOPwJHoNJINLI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647255; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=gBWbBw5ikLSU10dONtd+Ef3kpPK3iZWX0omb0JH+U5U=; b=JGOl5J5IeHwmdU/rjFsMIhQPW9viFQ380gzIC04LBC9aPxZvqWs5gz3us5HLIan4DPfuDI32m++gxNvUS8AYDc4yKOe7eYW2gFzt2VYb5KT3R+t0QHJbweIjGstPInkmpiq0m6FWo8rXAKofhU7NBXvmGaWExA9jGfb2vjQY+XI= 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 1751647255225823.8393251700556; Fri, 4 Jul 2025 09:40:55 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjFP-0004KQ-Ce; Fri, 04 Jul 2025 12:26:47 -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 1uXjEp-0001Rh-8r for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:11 -0400 Received: from mail-wm1-x329.google.com ([2a00:1450:4864:20::329]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjEn-0006Ym-IS for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:10 -0400 Received: by mail-wm1-x329.google.com with SMTP id 5b1f17b1804b1-453608ed113so12310875e9.0 for ; Fri, 04 Jul 2025 09:26:09 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.26.07 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:26:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646368; x=1752251168; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=gBWbBw5ikLSU10dONtd+Ef3kpPK3iZWX0omb0JH+U5U=; b=f1fWn51yVo/3Q6DdUAHtg8qL/+atNfpKkP6kgaiwzWVf4AkTOVGVp5EVolycQolEK0 Csh+EgUXCydn97za5GTEHIYclHtwtsJI4qBCMPU2y8u6AiqzMZdugBz8nSyXdboT39I2 XGK6d98L+SjT7u1Qvk4cetIjCd68Swz4VYD/hhyTmxazigFuBe3Gi56i2EsILAytd66Z H9Canvsc6NSDE6SmeSEaz87QikRH3FmWExCBznKR21MQhaPeUap+N109ij8UJQgBE0Yf fACIi830GNAwXwIyg2IT0XqxUP2oHuHoNwsmL1pSGfT2936S0RmZLXEUfD6aYGhrTkVL H2/g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646368; x=1752251168; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=gBWbBw5ikLSU10dONtd+Ef3kpPK3iZWX0omb0JH+U5U=; b=Xgh8UAZ0pbh6Jlwx+JzSb1MBEDYDbOlx/nXEhgLZPaUnyxi/pgrJ0VNE5SBHxNAKp2 Ej03musigkHSd8HVvbipALS5m1yWpvSEHgp3TVCig0+UbnGy/9ycKo+pvLQb4L4WG0my fh4oSGWzDBzxymjyCVG5ORkBRmNgOMUWCU9IvJYhSX6ipaKwtuJxZ1xWX1Luo9XgT+6w CwAzxyNFhya5EYWCe2q7w0+8Unq4KLIaULQ/Y3zliyVKQPGMCLiIjEQtPtFE6o1wsBsJ m9cCst20hQSNLbbNBFaR/nSWr2/mdtKP3P91BYRomMn2fkWuLMgId7Q6byLEImFD/Ald IqHQ== X-Gm-Message-State: AOJu0YzZkqaXv27PVS0eKqOVnk9sDZtGTMmC4I3IQs55MKDrZ/ZSHkw8 pXUO/24qvrlo8qs2a/z/0J5/KgVgeAWevRoOnVT4Xmdv+5aOXjB52lAO+ffUe1tHQCuIL2Ve0R7 TKBgS X-Gm-Gg: ASbGncsrUfCl9Xs4CqziB1ik1S+isn8e/dGwJs/llgvRX2BdVKppYLesucGUodDPwAd Sc5DtBp3CTYKiEFLB4yA7777inVetG7fCvqAp1GIn88QZ4H8+8jjnm6a2jbkKU2SuURnGDCCnPc /zjFbS4nzCJjaUdvi2Kei54ah7amQZvhtLwy+emLc27iX009Zn/iDMbqHaJ60df/5+uhyEHuQrz O1eLVHdW0857jpnICGlAanpgoZOOFDIKRZvrl5EzzfUIeq3QTJwW9uhQazPzsnocmC8rZnHuu0q iVTel9bNwiVd7EwTi35lBf2Y9nFxJbIJNbu+iXAHDAkUQM7nneNgjrDuJVO2EromQZCn X-Google-Smtp-Source: AGHT+IFj/HUcEDxb8kuBNvw1X0RwYDv4jDK6crtPOosR9p0pW0PVGPmC0j++svg0ZzMA/1Mz5TQFgg== X-Received: by 2002:a05:600c:c114:b0:453:5c30:a2c2 with SMTP id 5b1f17b1804b1-454b5312c5dmr22125895e9.8.1751646368167; Fri, 04 Jul 2025 09:26:08 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 069/119] target/arm: Introduce do_[us]sat_[bhs] macros Date: Fri, 4 Jul 2025 17:24:09 +0100 Message-ID: <20250704162501.249138-70-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::329; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x329.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751647256945116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Inputs are a wider type of indeterminate sign. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-58-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/vec_internal.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/target/arm/tcg/vec_internal.h b/target/arm/tcg/vec_internal.h index bbf76f63b18..a1c10c60a1c 100644 --- a/target/arm/tcg/vec_internal.h +++ b/target/arm/tcg/vec_internal.h @@ -223,6 +223,13 @@ int16_t do_sqrdmlah_h(int16_t, int16_t, int16_t, bool,= bool, uint32_t *); int32_t do_sqrdmlah_s(int32_t, int32_t, int32_t, bool, bool, uint32_t *); int64_t do_sqrdmlah_d(int64_t, int64_t, int64_t, bool, bool); =20 +#define do_ssat_b(val) MIN(MAX(val, INT8_MIN), INT8_MAX) +#define do_ssat_h(val) MIN(MAX(val, INT16_MIN), INT16_MAX) +#define do_ssat_s(val) MIN(MAX(val, INT32_MIN), INT32_MAX) +#define do_usat_b(val) MIN(MAX(val, 0), UINT8_MAX) +#define do_usat_h(val) MIN(MAX(val, 0), UINT16_MAX) +#define do_usat_s(val) MIN(MAX(val, 0), UINT32_MAX) + /** * bfdotadd: * @sum: addend --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647259; cv=none; d=zohomail.com; s=zohoarc; b=J7D+ePK9KSXegoSxa+AanSjBrzyV+iz5OXdmDIufZf8dBNHikYhW2m2kM1bT+EyY9SNuQzNHWZ1GzcfA0GM5iMrtj++6AZV2s7t2SM+KbxI6c+HWZcFkTvqk7vFmYTBpzTwiriVnhW6BoK3G28ALlaEKB1wGIlmOw6LuUxc2hHk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647259; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=cwvushiLVebVw534HbDroYhAk65JqrojHcIJDIqa2C8=; b=bbdx1sRbt3dlaaoKODaIzZq7JIXkPFfqKNXvJNKaxJnGOiPbeQXcIy7LFbFGIWrJiY2xsib9XNcUpAr/Iz/30F5qWK4bFvzjsG1MMo239EVPawGVErMTRN1oeZtWBoligHb2ilRYts3qAwMJvYTzzHeKQcZ5HK1dqesdgbK6/Kw= 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 1751647259617778.4461956904287; Fri, 4 Jul 2025 09:40:59 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjF0-0001yU-3l; Fri, 04 Jul 2025 12:26:23 -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 1uXjEr-0001TV-AC for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:14 -0400 Received: from mail-wr1-x432.google.com ([2a00:1450:4864:20::432]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjEp-0006br-2e for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:13 -0400 Received: by mail-wr1-x432.google.com with SMTP id ffacd0b85a97d-3a531fcaa05so735530f8f.3 for ; Fri, 04 Jul 2025 09:26:10 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.26.08 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:26:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646369; x=1752251169; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=cwvushiLVebVw534HbDroYhAk65JqrojHcIJDIqa2C8=; b=OobhmTJWdanOOc0TmFy+5sPTg0Sa+kVBF+P19fiXGPIyLI3su81yJjoFgdc3KK0RPK kMhoHGz4/+FtC9ZcRHK5VL+lIyzHJsbhX7ALRHdxUNOW0ntJHngvy2EjvL3c9Nu/+Ffx 6v17l5DLNwVPBnAl+4knY4qjUHJhCEeIsbzMpeSobffpveV5HxgkrEbDL72R5FwQA9Ez v1AlB5dKGDLniSXsPdBSjUp97vfaxxg2JjnxGDDgvktnLOYDRopRL3rG6rqolmV/aC2O uhcvz0dI/vQOd/7MSfdEZiKpGNxvddcDCD29Cwj905O9/Jkkrn1UNzUaCWar/vSlA/rE +/jA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646369; x=1752251169; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=cwvushiLVebVw534HbDroYhAk65JqrojHcIJDIqa2C8=; b=XWrAEEoNwws8QHwH3hGVg2aoauEFTkA93hUA7Q4VDZ6vmUTrc6Ya9a7/FMT1nIe0hT /YkwefDw49aqF7avMGcT3iTIRpw6YLoXK35lsqeD+5HH4303XAnxWFVm0yF1T5ir3Awp L1ivAiJs2KxoRmvFDw8FQVuz0kaduaITRf8EydWitL75dZpabZPKsV4ZpgSxqEMlpJQI yRS0/VWPjxyiKpOy87OVgH2M6BxMUmmrWnmoOlRdd0g6eotJf3ZYJeeFHo+3R/w7l64X 7b10+n6bZs5tAEHe6eB5SeEf/BR89hz4A344pdOuTaiClmb9G2NagQTqZQAU3msJiVT+ kbJQ== X-Gm-Message-State: AOJu0YwGZ3C6pOZwkTBppX/MEr0koqO9OXPITYSJShsoLMsvRns90tuP uH/BRi/Qiu5bQ6pkZHQAd/ucPTLozyJ18rZ7CB9d0VU0GjDPJEE//kH/OgYWcM8XEQsBbs4fleu peY9j X-Gm-Gg: ASbGncvbLOXD1nXpspc5VY7zh6I/c/h6O362exPhU5/G5KZIkteZX6IFhC1x/iF1wQN 7a6qu5vzxLnPYeeedqD6vZ3Bn26K9q3jllmzxMcj79XeeYeAE6crAc22+ljsf6q93hH1FOIAVzP TqyAclpnHqY5P6pLzWePSaHvXG6IaDW99XZOYrhr/MThm94tuZhJcLtdxEvgS6JCTK6/GVWeDJt RiA3Sm9fX7wSiZVEinb1eW1cuGiO4q8iZ3FwltfYu4M34ARwkUQ1kaNhyajFEonQXden34VLJGS rwZxry8h7dmoE2exkdl2Frf7JMYsmotvYwaqVG/y0urE/GtUa34CZO0baFgNokrO5rPNXeiXPXi fvM4= X-Google-Smtp-Source: AGHT+IHqb8sQgpoIav8vgQZpWuchEcejo8CTN4COqG/Q137uF9bzAHsW97PZNugxcbDUik9YKk+h6w== X-Received: by 2002:a05:6000:4026:b0:3a4:ef30:a4c8 with SMTP id ffacd0b85a97d-3b4964bb6e0mr2881120f8f.10.1751646369320; Fri, 04 Jul 2025 09:26:09 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 070/119] target/arm: Use do_[us]sat_[bhs] in sve_helper.c Date: Fri, 4 Jul 2025 17:24:10 +0100 Message-ID: <20250704162501.249138-71-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::432; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x432.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751647261017116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Replace and remove do_sat_bhs. This avoids multiple repetitions of INT*_MIN/MAX. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-59-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/sve_helper.c | 116 +++++++++++++++--------------------- 1 file changed, 48 insertions(+), 68 deletions(-) diff --git a/target/arm/tcg/sve_helper.c b/target/arm/tcg/sve_helper.c index 4f12723afea..f9052f21644 100644 --- a/target/arm/tcg/sve_helper.c +++ b/target/arm/tcg/sve_helper.c @@ -527,14 +527,9 @@ DO_ZPZZ(sve2_uhsub_zpzz_h, uint16_t, H1_2, DO_HSUB_BHS) DO_ZPZZ(sve2_uhsub_zpzz_s, uint32_t, H1_4, DO_HSUB_BHS) DO_ZPZZ_D(sve2_uhsub_zpzz_d, uint64_t, DO_HSUB_D) =20 -static inline int32_t do_sat_bhs(int64_t val, int64_t min, int64_t max) -{ - return val >=3D max ? max : val <=3D min ? min : val; -} - -#define DO_SQADD_B(n, m) do_sat_bhs((int64_t)n + m, INT8_MIN, INT8_MAX) -#define DO_SQADD_H(n, m) do_sat_bhs((int64_t)n + m, INT16_MIN, INT16_MAX) -#define DO_SQADD_S(n, m) do_sat_bhs((int64_t)n + m, INT32_MIN, INT32_MAX) +#define DO_SQADD_B(n, m) do_ssat_b((int64_t)n + m) +#define DO_SQADD_H(n, m) do_ssat_h((int64_t)n + m) +#define DO_SQADD_S(n, m) do_ssat_s((int64_t)n + m) =20 static inline int64_t do_sqadd_d(int64_t n, int64_t m) { @@ -551,9 +546,9 @@ DO_ZPZZ(sve2_sqadd_zpzz_h, int16_t, H1_2, DO_SQADD_H) DO_ZPZZ(sve2_sqadd_zpzz_s, int32_t, H1_4, DO_SQADD_S) DO_ZPZZ_D(sve2_sqadd_zpzz_d, int64_t, do_sqadd_d) =20 -#define DO_UQADD_B(n, m) do_sat_bhs((int64_t)n + m, 0, UINT8_MAX) -#define DO_UQADD_H(n, m) do_sat_bhs((int64_t)n + m, 0, UINT16_MAX) -#define DO_UQADD_S(n, m) do_sat_bhs((int64_t)n + m, 0, UINT32_MAX) +#define DO_UQADD_B(n, m) do_usat_b((int64_t)n + m) +#define DO_UQADD_H(n, m) do_usat_h((int64_t)n + m) +#define DO_UQADD_S(n, m) do_usat_s((int64_t)n + m) =20 static inline uint64_t do_uqadd_d(uint64_t n, uint64_t m) { @@ -566,9 +561,9 @@ DO_ZPZZ(sve2_uqadd_zpzz_h, uint16_t, H1_2, DO_UQADD_H) DO_ZPZZ(sve2_uqadd_zpzz_s, uint32_t, H1_4, DO_UQADD_S) DO_ZPZZ_D(sve2_uqadd_zpzz_d, uint64_t, do_uqadd_d) =20 -#define DO_SQSUB_B(n, m) do_sat_bhs((int64_t)n - m, INT8_MIN, INT8_MAX) -#define DO_SQSUB_H(n, m) do_sat_bhs((int64_t)n - m, INT16_MIN, INT16_MAX) -#define DO_SQSUB_S(n, m) do_sat_bhs((int64_t)n - m, INT32_MIN, INT32_MAX) +#define DO_SQSUB_B(n, m) do_ssat_b((int64_t)n - m) +#define DO_SQSUB_H(n, m) do_ssat_h((int64_t)n - m) +#define DO_SQSUB_S(n, m) do_ssat_s((int64_t)n - m) =20 static inline int64_t do_sqsub_d(int64_t n, int64_t m) { @@ -585,9 +580,9 @@ DO_ZPZZ(sve2_sqsub_zpzz_h, int16_t, H1_2, DO_SQSUB_H) DO_ZPZZ(sve2_sqsub_zpzz_s, int32_t, H1_4, DO_SQSUB_S) DO_ZPZZ_D(sve2_sqsub_zpzz_d, int64_t, do_sqsub_d) =20 -#define DO_UQSUB_B(n, m) do_sat_bhs((int64_t)n - m, 0, UINT8_MAX) -#define DO_UQSUB_H(n, m) do_sat_bhs((int64_t)n - m, 0, UINT16_MAX) -#define DO_UQSUB_S(n, m) do_sat_bhs((int64_t)n - m, 0, UINT32_MAX) +#define DO_UQSUB_B(n, m) do_usat_b((int64_t)n - m) +#define DO_UQSUB_H(n, m) do_usat_h((int64_t)n - m) +#define DO_UQSUB_S(n, m) do_usat_s((int64_t)n - m) =20 static inline uint64_t do_uqsub_d(uint64_t n, uint64_t m) { @@ -599,12 +594,9 @@ DO_ZPZZ(sve2_uqsub_zpzz_h, uint16_t, H1_2, DO_UQSUB_H) DO_ZPZZ(sve2_uqsub_zpzz_s, uint32_t, H1_4, DO_UQSUB_S) DO_ZPZZ_D(sve2_uqsub_zpzz_d, uint64_t, do_uqsub_d) =20 -#define DO_SUQADD_B(n, m) \ - do_sat_bhs((int64_t)(int8_t)n + m, INT8_MIN, INT8_MAX) -#define DO_SUQADD_H(n, m) \ - do_sat_bhs((int64_t)(int16_t)n + m, INT16_MIN, INT16_MAX) -#define DO_SUQADD_S(n, m) \ - do_sat_bhs((int64_t)(int32_t)n + m, INT32_MIN, INT32_MAX) +#define DO_SUQADD_B(n, m) do_ssat_b((int64_t)(int8_t)n + m) +#define DO_SUQADD_H(n, m) do_ssat_h((int64_t)(int16_t)n + m) +#define DO_SUQADD_S(n, m) do_ssat_s((int64_t)(int32_t)n + m) =20 static inline int64_t do_suqadd_d(int64_t n, uint64_t m) { @@ -634,12 +626,9 @@ DO_ZPZZ(sve2_suqadd_zpzz_h, uint16_t, H1_2, DO_SUQADD_= H) DO_ZPZZ(sve2_suqadd_zpzz_s, uint32_t, H1_4, DO_SUQADD_S) DO_ZPZZ_D(sve2_suqadd_zpzz_d, uint64_t, do_suqadd_d) =20 -#define DO_USQADD_B(n, m) \ - do_sat_bhs((int64_t)n + (int8_t)m, 0, UINT8_MAX) -#define DO_USQADD_H(n, m) \ - do_sat_bhs((int64_t)n + (int16_t)m, 0, UINT16_MAX) -#define DO_USQADD_S(n, m) \ - do_sat_bhs((int64_t)n + (int32_t)m, 0, UINT32_MAX) +#define DO_USQADD_B(n, m) do_usat_b((int64_t)n + (int8_t)m) +#define DO_USQADD_H(n, m) do_usat_h((int64_t)n + (int16_t)m) +#define DO_USQADD_S(n, m) do_usat_s((int64_t)n + (int32_t)m) =20 static inline uint64_t do_usqadd_d(uint64_t n, int64_t m) { @@ -1226,37 +1215,29 @@ void HELPER(NAME)(void *vd, void *vn, uint32_t desc= ) \ } \ } =20 -#define DO_SQXTN_H(n) do_sat_bhs(n, INT8_MIN, INT8_MAX) -#define DO_SQXTN_S(n) do_sat_bhs(n, INT16_MIN, INT16_MAX) -#define DO_SQXTN_D(n) do_sat_bhs(n, INT32_MIN, INT32_MAX) +DO_XTNB(sve2_sqxtnb_h, int16_t, do_ssat_b) +DO_XTNB(sve2_sqxtnb_s, int32_t, do_ssat_h) +DO_XTNB(sve2_sqxtnb_d, int64_t, do_ssat_s) =20 -DO_XTNB(sve2_sqxtnb_h, int16_t, DO_SQXTN_H) -DO_XTNB(sve2_sqxtnb_s, int32_t, DO_SQXTN_S) -DO_XTNB(sve2_sqxtnb_d, int64_t, DO_SQXTN_D) +DO_XTNT(sve2_sqxtnt_h, int16_t, int8_t, H1, do_ssat_b) +DO_XTNT(sve2_sqxtnt_s, int32_t, int16_t, H1_2, do_ssat_h) +DO_XTNT(sve2_sqxtnt_d, int64_t, int32_t, H1_4, do_ssat_s) =20 -DO_XTNT(sve2_sqxtnt_h, int16_t, int8_t, H1, DO_SQXTN_H) -DO_XTNT(sve2_sqxtnt_s, int32_t, int16_t, H1_2, DO_SQXTN_S) -DO_XTNT(sve2_sqxtnt_d, int64_t, int32_t, H1_4, DO_SQXTN_D) +DO_XTNB(sve2_uqxtnb_h, uint16_t, do_usat_b) +DO_XTNB(sve2_uqxtnb_s, uint32_t, do_usat_h) +DO_XTNB(sve2_uqxtnb_d, uint64_t, do_usat_s) =20 -#define DO_UQXTN_H(n) do_sat_bhs(n, 0, UINT8_MAX) -#define DO_UQXTN_S(n) do_sat_bhs(n, 0, UINT16_MAX) -#define DO_UQXTN_D(n) do_sat_bhs(n, 0, UINT32_MAX) +DO_XTNT(sve2_uqxtnt_h, uint16_t, uint8_t, H1, do_usat_b) +DO_XTNT(sve2_uqxtnt_s, uint32_t, uint16_t, H1_2, do_usat_h) +DO_XTNT(sve2_uqxtnt_d, uint64_t, uint32_t, H1_4, do_usat_s) =20 -DO_XTNB(sve2_uqxtnb_h, uint16_t, DO_UQXTN_H) -DO_XTNB(sve2_uqxtnb_s, uint32_t, DO_UQXTN_S) -DO_XTNB(sve2_uqxtnb_d, uint64_t, DO_UQXTN_D) +DO_XTNB(sve2_sqxtunb_h, int16_t, do_usat_b) +DO_XTNB(sve2_sqxtunb_s, int32_t, do_usat_h) +DO_XTNB(sve2_sqxtunb_d, int64_t, do_usat_s) =20 -DO_XTNT(sve2_uqxtnt_h, uint16_t, uint8_t, H1, DO_UQXTN_H) -DO_XTNT(sve2_uqxtnt_s, uint32_t, uint16_t, H1_2, DO_UQXTN_S) -DO_XTNT(sve2_uqxtnt_d, uint64_t, uint32_t, H1_4, DO_UQXTN_D) - -DO_XTNB(sve2_sqxtunb_h, int16_t, DO_UQXTN_H) -DO_XTNB(sve2_sqxtunb_s, int32_t, DO_UQXTN_S) -DO_XTNB(sve2_sqxtunb_d, int64_t, DO_UQXTN_D) - -DO_XTNT(sve2_sqxtunt_h, int16_t, int8_t, H1, DO_UQXTN_H) -DO_XTNT(sve2_sqxtunt_s, int32_t, int16_t, H1_2, DO_UQXTN_S) -DO_XTNT(sve2_sqxtunt_d, int64_t, int32_t, H1_4, DO_UQXTN_D) +DO_XTNT(sve2_sqxtunt_h, int16_t, int8_t, H1, do_usat_b) +DO_XTNT(sve2_sqxtunt_s, int32_t, int16_t, H1_2, do_usat_h) +DO_XTNT(sve2_sqxtunt_d, int64_t, int32_t, H1_4, do_usat_s) =20 #undef DO_XTNB #undef DO_XTNT @@ -2187,10 +2168,9 @@ DO_SHRNT(sve2_rshrnt_h, uint16_t, uint8_t, H1_2, H1,= do_urshr) DO_SHRNT(sve2_rshrnt_s, uint32_t, uint16_t, H1_4, H1_2, do_urshr) DO_SHRNT(sve2_rshrnt_d, uint64_t, uint32_t, H1_8, H1_4, do_urshr) =20 -#define DO_SQSHRUN_H(x, sh) do_sat_bhs((int64_t)(x) >> sh, 0, UINT8_MAX) -#define DO_SQSHRUN_S(x, sh) do_sat_bhs((int64_t)(x) >> sh, 0, UINT16_MAX) -#define DO_SQSHRUN_D(x, sh) \ - do_sat_bhs((int64_t)(x) >> (sh < 64 ? sh : 63), 0, UINT32_MAX) +#define DO_SQSHRUN_H(x, sh) do_usat_b((int64_t)(x) >> sh) +#define DO_SQSHRUN_S(x, sh) do_usat_h((int64_t)(x) >> sh) +#define DO_SQSHRUN_D(x, sh) do_usat_s((int64_t)(x) >> (sh < 64 ? sh : 63)) =20 DO_SHRNB(sve2_sqshrunb_h, int16_t, uint8_t, DO_SQSHRUN_H) DO_SHRNB(sve2_sqshrunb_s, int32_t, uint16_t, DO_SQSHRUN_S) @@ -2200,9 +2180,9 @@ DO_SHRNT(sve2_sqshrunt_h, int16_t, uint8_t, H1_2, H1,= DO_SQSHRUN_H) DO_SHRNT(sve2_sqshrunt_s, int32_t, uint16_t, H1_4, H1_2, DO_SQSHRUN_S) DO_SHRNT(sve2_sqshrunt_d, int64_t, uint32_t, H1_8, H1_4, DO_SQSHRUN_D) =20 -#define DO_SQRSHRUN_H(x, sh) do_sat_bhs(do_srshr(x, sh), 0, UINT8_MAX) -#define DO_SQRSHRUN_S(x, sh) do_sat_bhs(do_srshr(x, sh), 0, UINT16_MAX) -#define DO_SQRSHRUN_D(x, sh) do_sat_bhs(do_srshr(x, sh), 0, UINT32_MAX) +#define DO_SQRSHRUN_H(x, sh) do_usat_b(do_srshr(x, sh)) +#define DO_SQRSHRUN_S(x, sh) do_usat_h(do_srshr(x, sh)) +#define DO_SQRSHRUN_D(x, sh) do_usat_s(do_srshr(x, sh)) =20 DO_SHRNB(sve2_sqrshrunb_h, int16_t, uint8_t, DO_SQRSHRUN_H) DO_SHRNB(sve2_sqrshrunb_s, int32_t, uint16_t, DO_SQRSHRUN_S) @@ -2212,9 +2192,9 @@ DO_SHRNT(sve2_sqrshrunt_h, int16_t, uint8_t, H1_2, H1= , DO_SQRSHRUN_H) DO_SHRNT(sve2_sqrshrunt_s, int32_t, uint16_t, H1_4, H1_2, DO_SQRSHRUN_S) DO_SHRNT(sve2_sqrshrunt_d, int64_t, uint32_t, H1_8, H1_4, DO_SQRSHRUN_D) =20 -#define DO_SQSHRN_H(x, sh) do_sat_bhs(x >> sh, INT8_MIN, INT8_MAX) -#define DO_SQSHRN_S(x, sh) do_sat_bhs(x >> sh, INT16_MIN, INT16_MAX) -#define DO_SQSHRN_D(x, sh) do_sat_bhs(x >> sh, INT32_MIN, INT32_MAX) +#define DO_SQSHRN_H(x, sh) do_ssat_b(x >> sh) +#define DO_SQSHRN_S(x, sh) do_ssat_h(x >> sh) +#define DO_SQSHRN_D(x, sh) do_ssat_s(x >> sh) =20 DO_SHRNB(sve2_sqshrnb_h, int16_t, uint8_t, DO_SQSHRN_H) DO_SHRNB(sve2_sqshrnb_s, int32_t, uint16_t, DO_SQSHRN_S) @@ -2224,9 +2204,9 @@ DO_SHRNT(sve2_sqshrnt_h, int16_t, uint8_t, H1_2, H1, = DO_SQSHRN_H) DO_SHRNT(sve2_sqshrnt_s, int32_t, uint16_t, H1_4, H1_2, DO_SQSHRN_S) DO_SHRNT(sve2_sqshrnt_d, int64_t, uint32_t, H1_8, H1_4, DO_SQSHRN_D) =20 -#define DO_SQRSHRN_H(x, sh) do_sat_bhs(do_srshr(x, sh), INT8_MIN, INT8_MAX) -#define DO_SQRSHRN_S(x, sh) do_sat_bhs(do_srshr(x, sh), INT16_MIN, INT16_M= AX) -#define DO_SQRSHRN_D(x, sh) do_sat_bhs(do_srshr(x, sh), INT32_MIN, INT32_M= AX) +#define DO_SQRSHRN_H(x, sh) do_ssat_b(do_srshr(x, sh)) +#define DO_SQRSHRN_S(x, sh) do_ssat_h(do_srshr(x, sh)) +#define DO_SQRSHRN_D(x, sh) do_ssat_s(do_srshr(x, sh)) =20 DO_SHRNB(sve2_sqrshrnb_h, int16_t, uint8_t, DO_SQRSHRN_H) DO_SHRNB(sve2_sqrshrnb_s, int32_t, uint16_t, DO_SQRSHRN_S) --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646488; cv=none; d=zohomail.com; s=zohoarc; b=GORiVK/ZDKyTCbt2Ydyiy3HS+romnPHP3NdDEzIL2lUi81/t8R/ydqXBLg/YEEF+RiX7+i2zP1i7qMwsvI+/XlntHtLbe7p4m9zC7AvB7521h2FEyktl1R4vRvPSC23BeMVVCDhTiI/Cd2sEBbSggNpjk3orzmUvhKPkT59PzMQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646488; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=eqvd728YfKkBr7d+51LvvdyAE2rDb0O/EGOJp4tzeA4=; b=jdqTcQ1mYvs+ZRAh3tjhoUVb7UZloQH4EuRQhSJiKnyfzqZpuK86h2Dat/JcKOAsfc7S6fZbsehMWv69iJaOtA24OUJcSbqSl/UHOQBdV8oHE1al2lNLasMeENcvgxmI0lHigqPZ6rNGq9J3p/K5tAduw9w57CIG1u9UoDWpzFw= 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 1751646488620753.1085715607957; Fri, 4 Jul 2025 09:28:08 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjFB-0002qh-HY; Fri, 04 Jul 2025 12:26:33 -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 1uXjEs-0001VQ-IC for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:14 -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 1uXjEq-0006cd-8z for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:14 -0400 Received: by mail-wm1-x334.google.com with SMTP id 5b1f17b1804b1-451d6ade159so9792615e9.1 for ; Fri, 04 Jul 2025 09:26:11 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.26.09 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:26:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646371; x=1752251171; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=eqvd728YfKkBr7d+51LvvdyAE2rDb0O/EGOJp4tzeA4=; b=Aodj0EI/1JOnOE8hd6lHHq8nAbpoJoNCMfHaO2qIUdoZVzt4pTHf9QRGisIw3MVxqw YaHGZswm2SjyGSQyESqAf4sXdz/uKoqfaEjx8qfPC+HXjIasOAWL6jnsz/lnbhTisAeJ 74lIBvWP8jFw24KjfQCuKouQV6PhV6k3K5/ilrESHUoLV9t+Jp4TNpLhHyc1vEAhSUIf +roIZYw5JH4onipV3govNS4Gm8SKNy+aFDLuOUj6OeEeOCE6DsWLoLfTCexTHF/9V41c vKm6PdGqpTqePny/avwSpfewugSQc0P7cOFyYfSgXBsPM89v8MrPLCpwipetwImUTXfZ rrEg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646371; x=1752251171; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=eqvd728YfKkBr7d+51LvvdyAE2rDb0O/EGOJp4tzeA4=; b=qpE/oY6VtYBchp8x7qQIfpiCx5tWXBDTvQU4K5ZKfNgVAZj2OCkiBn4J8votspIdxK /laU6rTYVH0aip5smwXqTGxuuZJGcjDGO1CRdfcHnSiXkeAvJES85e81iEVwOdHfA2Vw sPtQhKlgVFdv8d1l+/U0u9chBmIY9EgSyiHivy9KW5Fz0jJ/Pz9bmfWR4izusJTeB2du B00c4dvq0bDXs5c5DTZkZ6Z6BaZ562WAMSSEklDaQt+4J4f4yiGj4WROPPkmsjzi7mWk KO1Sw0jsB1tsUnSDRv3dr2S0zgHR4to9+0HAd3ntzcHfqFzy9QGcKdVFFqylz0C+S00t DDeQ== X-Gm-Message-State: AOJu0YxFgFLAC0sG2LTuY4nAjyhFbjR8io6jKz5KsGYyeHFPOYppO325 AJs6pHtYzz/8kwqArVWBuyUjqQ2mdNbq2HXISoOZPwb3FJdyIuVhJ90pJspq3/kQ8adqgmQPZLh 6U1/4 X-Gm-Gg: ASbGncvVzyCyOdkP6cgWV/ZZE34Wnuh2b+Cw+LkLSoW4MPqZwuna9xcIJzXgQfOdVE7 Cu4oath667lV5gIjfOSI29w5Q6bX/nypuu2mU4wg4U0RC69X1nTqQAWYLHtmXIgRGy5fpanWLaY 8oj4tTf81f1ZnPu2FcSt7AmkrrwEHmTYIjiPQcW4sPtoPHE2QEBrwU4SP800yDuJaAEy8dwgJld OXd5CmTiFpy/maGI+SW2ZHYygl5UKBYe1wbYw6AMi4ZZqpce9+eAjchoKFypmsB0XfnEYG5racy 5Y2JdPr8l3t6QfpD4w5rhxlER5c6hFvW96nPBnXMXGEv9XPMlSDNnocGvnM0ysmJfGzK X-Google-Smtp-Source: AGHT+IEdmmT1NF07u+sImoA771a7MIsn04cbmNRFgbq6Xw4aaxUPfEZcE3+NCkE8L4Y0f1y8hasD+A== X-Received: by 2002:a05:600c:a4b:b0:43e:bdf7:7975 with SMTP id 5b1f17b1804b1-454b4ebd799mr24171515e9.32.1751646370585; Fri, 04 Jul 2025 09:26:10 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 071/119] target/arm: Implement SME2 SQCVT, UQCVT, SQCVTU Date: Fri, 4 Jul 2025 17:24:11 +0100 Message-ID: <20250704162501.249138-72-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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=peter.maydell@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 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: 1751646489912116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell Message-id: 20250704142112.1018902-60-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/helper-sme.h | 20 ++++++ target/arm/tcg/sme.decode | 22 +++++++ target/arm/tcg/sme_helper.c | 116 +++++++++++++++++++++++++++++++++ target/arm/tcg/translate-sme.c | 35 ++++++++++ 4 files changed, 193 insertions(+) diff --git a/target/arm/tcg/helper-sme.h b/target/arm/tcg/helper-sme.h index 6314ad7e012..792b9936954 100644 --- a/target/arm/tcg/helper-sme.h +++ b/target/arm/tcg/helper-sme.h @@ -221,3 +221,23 @@ DEF_HELPER_FLAGS_4(sme2_fcvt_w, TCG_CALL_NO_RWG, void,= ptr, ptr, fpst, i32) DEF_HELPER_FLAGS_4(sme2_fcvtl, TCG_CALL_NO_RWG, void, ptr, ptr, fpst, i32) DEF_HELPER_FLAGS_4(sme2_scvtf, TCG_CALL_NO_RWG, void, ptr, ptr, fpst, i32) DEF_HELPER_FLAGS_4(sme2_ucvtf, TCG_CALL_NO_RWG, void, ptr, ptr, fpst, i32) + +DEF_HELPER_FLAGS_3(sme2_sqcvt_sb, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2_uqcvt_sb, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2_sqcvtu_sb, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2_sqcvt_sh, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2_uqcvt_sh, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2_sqcvtu_sh, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2_sqcvt_dh, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2_uqcvt_dh, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2_sqcvtu_dh, TCG_CALL_NO_RWG, void, ptr, ptr, i32) + +DEF_HELPER_FLAGS_3(sme2_sqcvtn_sb, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2_uqcvtn_sb, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2_sqcvtun_sb, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2_sqcvtn_sh, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2_uqcvtn_sh, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2_sqcvtun_sh, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2_sqcvtn_dh, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2_uqcvtn_dh, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2_sqcvtun_dh, TCG_CALL_NO_RWG, void, ptr, ptr, i32) diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 9cc25622d4c..e005f6e6ed6 100644 --- a/target/arm/tcg/sme.decode +++ b/target/arm/tcg/sme.decode @@ -726,6 +726,8 @@ SUB_aaz_d 11000001 111 000010 .. 111 ...00 11 ...= @az_4x4_o3 &zz_n zd zn n @zz_1x2 ........ ... ..... ...... ..... zd:5 \ &zz_n n=3D1 zn=3D%zn_ax2 +@zz_1x4 ........ ... ..... ...... ..... zd:5 \ + &zz_n n=3D1 zn=3D%zn_ax4 @zz_2x1 ........ ... ..... ...... zn:5 ..... \ &zz_n n=3D1 zd=3D%zd_ax2 @zz_2x2 ........ ... ..... ...... .... . ..... \ @@ -760,3 +762,23 @@ FRINTM 11000001 101 01010 111000 ....0 ....0 = @zz_2x2 FRINTM 11000001 101 11010 111000 ...00 ...00 @zz_4x4 FRINTA 11000001 101 01100 111000 ....0 ....0 @zz_2x2 FRINTA 11000001 101 11100 111000 ...00 ...00 @zz_4x4 + +SQCVT_sh 11000001 001 00011 111000 ....0 ..... @zz_1x2 +UQCVT_sh 11000001 001 00011 111000 ....1 ..... @zz_1x2 +SQCVTU_sh 11000001 011 00011 111000 ....0 ..... @zz_1x2 + +SQCVT_sb 11000001 001 10011 111000 ...00 ..... @zz_1x4 +UQCVT_sb 11000001 001 10011 111000 ...01 ..... @zz_1x4 +SQCVTU_sb 11000001 011 10011 111000 ...00 ..... @zz_1x4 + +SQCVT_dh 11000001 101 10011 111000 ...00 ..... @zz_1x4 +UQCVT_dh 11000001 101 10011 111000 ...01 ..... @zz_1x4 +SQCVTU_dh 11000001 111 10011 111000 ...00 ..... @zz_1x4 + +SQCVTN_sb 11000001 001 10011 111000 ...10 ..... @zz_1x4 +UQCVTN_sb 11000001 001 10011 111000 ...11 ..... @zz_1x4 +SQCVTUN_sb 11000001 011 10011 111000 ...10 ..... @zz_1x4 + +SQCVTN_dh 11000001 101 10011 111000 ...10 ..... @zz_1x4 +UQCVTN_dh 11000001 101 10011 111000 ...11 ..... @zz_1x4 +SQCVTUN_dh 11000001 111 10011 111000 ...10 ..... @zz_1x4 diff --git a/target/arm/tcg/sme_helper.c b/target/arm/tcg/sme_helper.c index d3841400ee5..094a1e57f3e 100644 --- a/target/arm/tcg/sme_helper.c +++ b/target/arm/tcg/sme_helper.c @@ -1568,6 +1568,64 @@ void HELPER(sme2_fcvt_n)(void *vd, void *vs, float_s= tatus *fpst, uint32_t desc) } } =20 +#define SQCVT2(NAME, TW, TN, HW, HN, SAT) \ +void HELPER(NAME)(void *vd, void *vs, uint32_t desc) \ +{ \ + ARMVectorReg scratch; \ + size_t oprsz =3D simd_oprsz(desc), n =3D oprsz / sizeof(TW); \ + TW *s0 =3D vs, *s1 =3D vs + sizeof(ARMVectorReg); \ + TN *d =3D vd; \ + if (vectors_overlap(vd, 1, vs, 2)) { \ + d =3D (TN *)&scratch; \ + } \ + for (size_t i =3D 0; i < n; ++i) { \ + d[HN(i)] =3D SAT(s0[HW(i)]); \ + d[HN(i + n)] =3D SAT(s1[HW(i)]); \ + } \ + if (d !=3D vd) { \ + memcpy(vd, d, oprsz); \ + } \ +} + +SQCVT2(sme2_sqcvt_sh, int32_t, int16_t, H4, H2, do_ssat_h) +SQCVT2(sme2_uqcvt_sh, uint32_t, uint16_t, H4, H2, do_usat_h) +SQCVT2(sme2_sqcvtu_sh, int32_t, uint16_t, H4, H2, do_usat_h) + +#undef SQCVT2 + +#define SQCVT4(NAME, TW, TN, HW, HN, SAT) \ +void HELPER(NAME)(void *vd, void *vs, uint32_t desc) \ +{ \ + ARMVectorReg scratch; \ + size_t oprsz =3D simd_oprsz(desc), n =3D oprsz / sizeof(TW); \ + TW *s0 =3D vs, *s1 =3D vs + sizeof(ARMVectorReg); \ + TW *s2 =3D vs + 2 * sizeof(ARMVectorReg); \ + TW *s3 =3D vs + 3 * sizeof(ARMVectorReg); \ + TN *d =3D vd; \ + if (vectors_overlap(vd, 1, vs, 4)) { \ + d =3D (TN *)&scratch; \ + } \ + for (size_t i =3D 0; i < n; ++i) { \ + d[HN(i)] =3D SAT(s0[HW(i)]); \ + d[HN(i + n)] =3D SAT(s1[HW(i)]); \ + d[HN(i + 2 * n)] =3D SAT(s2[HW(i)]); \ + d[HN(i + 3 * n)] =3D SAT(s3[HW(i)]); \ + } \ + if (d !=3D vd) { \ + memcpy(vd, d, oprsz); \ + } \ +} + +SQCVT4(sme2_sqcvt_sb, int32_t, int8_t, H4, H2, do_ssat_b) +SQCVT4(sme2_uqcvt_sb, uint32_t, uint8_t, H4, H2, do_usat_b) +SQCVT4(sme2_sqcvtu_sb, int32_t, uint8_t, H4, H2, do_usat_b) + +SQCVT4(sme2_sqcvt_dh, int64_t, int16_t, H8, H2, do_ssat_h) +SQCVT4(sme2_uqcvt_dh, uint64_t, uint16_t, H8, H2, do_usat_h) +SQCVT4(sme2_sqcvtu_dh, int64_t, uint16_t, H8, H2, do_usat_h) + +#undef SQCVT4 + /* Convert and interleave */ void HELPER(sme2_bfcvtn)(void *vd, void *vs, float_status *fpst, uint32_t = desc) { @@ -1599,6 +1657,64 @@ void HELPER(sme2_fcvtn)(void *vd, void *vs, float_st= atus *fpst, uint32_t desc) } } =20 +#define SQCVTN2(NAME, TW, TN, HW, HN, SAT) \ +void HELPER(NAME)(void *vd, void *vs, uint32_t desc) \ +{ \ + ARMVectorReg scratch; \ + size_t oprsz =3D simd_oprsz(desc), n =3D oprsz / sizeof(TW); \ + TW *s0 =3D vs, *s1 =3D vs + sizeof(ARMVectorReg); \ + TN *d =3D vd; \ + if (vectors_overlap(vd, 1, vs, 2)) { \ + d =3D (TN *)&scratch; \ + } \ + for (size_t i =3D 0; i < n; ++i) { \ + d[HN(2 * i + 0)] =3D SAT(s0[HW(i)]); \ + d[HN(2 * i + 1)] =3D SAT(s1[HW(i)]); \ + } \ + if (d !=3D vd) { \ + memcpy(vd, d, oprsz); \ + } \ +} + +SQCVTN2(sme2_sqcvtn_sh, int32_t, int16_t, H4, H2, do_ssat_h) +SQCVTN2(sme2_uqcvtn_sh, uint32_t, uint16_t, H4, H2, do_usat_h) +SQCVTN2(sme2_sqcvtun_sh, int32_t, uint16_t, H4, H2, do_usat_h) + +#undef SQCVTN2 + +#define SQCVTN4(NAME, TW, TN, HW, HN, SAT) \ +void HELPER(NAME)(void *vd, void *vs, uint32_t desc) \ +{ \ + ARMVectorReg scratch; \ + size_t oprsz =3D simd_oprsz(desc), n =3D oprsz / sizeof(TW); \ + TW *s0 =3D vs, *s1 =3D vs + sizeof(ARMVectorReg); \ + TW *s2 =3D vs + 2 * sizeof(ARMVectorReg); \ + TW *s3 =3D vs + 3 * sizeof(ARMVectorReg); \ + TN *d =3D vd; \ + if (vectors_overlap(vd, 1, vs, 4)) { \ + d =3D (TN *)&scratch; \ + } \ + for (size_t i =3D 0; i < n; ++i) { \ + d[HN(4 * i + 0)] =3D SAT(s0[HW(i)]); \ + d[HN(4 * i + 1)] =3D SAT(s1[HW(i)]); \ + d[HN(4 * i + 2)] =3D SAT(s2[HW(i)]); \ + d[HN(4 * i + 3)] =3D SAT(s3[HW(i)]); \ + } \ + if (d !=3D vd) { \ + memcpy(vd, d, oprsz); \ + } \ +} + +SQCVTN4(sme2_sqcvtn_sb, int32_t, int8_t, H4, H1, do_ssat_b) +SQCVTN4(sme2_uqcvtn_sb, uint32_t, uint8_t, H4, H1, do_usat_b) +SQCVTN4(sme2_sqcvtun_sb, int32_t, uint8_t, H4, H1, do_usat_b) + +SQCVTN4(sme2_sqcvtn_dh, int64_t, int16_t, H8, H2, do_ssat_h) +SQCVTN4(sme2_uqcvtn_dh, uint64_t, uint16_t, H8, H2, do_usat_h) +SQCVTN4(sme2_sqcvtun_dh, int64_t, uint16_t, H8, H2, do_usat_h) + +#undef SQCVTN4 + /* Expand and convert */ void HELPER(sme2_fcvt_w)(void *vd, void *vs, float_status *fpst, uint32_t = desc) { diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index 4fbc61ae272..dd1a6668fb5 100644 --- a/target/arm/tcg/translate-sme.c +++ b/target/arm/tcg/translate-sme.c @@ -1384,3 +1384,38 @@ TRANS_FEAT(FRINTM, aa64_sme2, do_zz_fpst, a, float_r= ound_down, FPST_A64, gen_helper_gvec_vrint_rm_s) TRANS_FEAT(FRINTA, aa64_sme2, do_zz_fpst, a, float_round_ties_away, FPST_A64, gen_helper_gvec_vrint_rm_s) + +static bool do_zz(DisasContext *s, arg_zz_n *a, int data, + gen_helper_gvec_2 *fn) +{ + if (sme_sm_enabled_check(s)) { + int svl =3D streaming_vec_reg_size(s); + + for (int i =3D 0, n =3D a->n; i < n; ++i) { + tcg_gen_gvec_2_ool(vec_full_reg_offset(s, a->zd + i), + vec_full_reg_offset(s, a->zn + i), + svl, svl, data, fn); + } + } + return true; +} + +TRANS_FEAT(SQCVT_sh, aa64_sme2, do_zz, a, 0, gen_helper_sme2_sqcvt_sh) +TRANS_FEAT(UQCVT_sh, aa64_sme2, do_zz, a, 0, gen_helper_sme2_uqcvt_sh) +TRANS_FEAT(SQCVTU_sh, aa64_sme2, do_zz, a, 0, gen_helper_sme2_sqcvtu_sh) + +TRANS_FEAT(SQCVT_sb, aa64_sme2, do_zz, a, 0, gen_helper_sme2_sqcvt_sb) +TRANS_FEAT(UQCVT_sb, aa64_sme2, do_zz, a, 0, gen_helper_sme2_uqcvt_sb) +TRANS_FEAT(SQCVTU_sb, aa64_sme2, do_zz, a, 0, gen_helper_sme2_sqcvtu_sb) + +TRANS_FEAT(SQCVT_dh, aa64_sme2, do_zz, a, 0, gen_helper_sme2_sqcvt_dh) +TRANS_FEAT(UQCVT_dh, aa64_sme2, do_zz, a, 0, gen_helper_sme2_uqcvt_dh) +TRANS_FEAT(SQCVTU_dh, aa64_sme2, do_zz, a, 0, gen_helper_sme2_sqcvtu_dh) + +TRANS_FEAT(SQCVTN_sb, aa64_sme2, do_zz, a, 0, gen_helper_sme2_sqcvtn_sb) +TRANS_FEAT(UQCVTN_sb, aa64_sme2, do_zz, a, 0, gen_helper_sme2_uqcvtn_sb) +TRANS_FEAT(SQCVTUN_sb, aa64_sme2, do_zz, a, 0, gen_helper_sme2_sqcvtun_sb) + +TRANS_FEAT(SQCVTN_dh, aa64_sme2, do_zz, a, 0, gen_helper_sme2_sqcvtn_dh) +TRANS_FEAT(UQCVTN_dh, aa64_sme2, do_zz, a, 0, gen_helper_sme2_uqcvtn_dh) +TRANS_FEAT(SQCVTUN_dh, aa64_sme2, do_zz, a, 0, gen_helper_sme2_sqcvtun_dh) --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647396; cv=none; d=zohomail.com; s=zohoarc; b=W3WG6T2rq8nGAFmf8sbDzLI2KtePYoBiC6/90e58H6Aild4vobQMpZShRR5RZjiKuu+Cw0YjZ5U0xCUgGkGvHFheTvHjs+AQaVVBPNOOKY6WYlDQrmJij3nabIgbrcJ5Aupc+TTXqQVGirleoLpcXmB3UqnTrfwh1aSZ9kwzZE4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647396; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=MeBk8+23Qld/xDrPvpisbhEiplaNjhAIJT2BQMnpAac=; b=KcFH0T/wLg+nGSTru+6vlDhba6LibEJFVAEMbEWfcVM9QZIK/56LkvL/IQTYlcnLFFLSi9m3tG6MbkzSCwhkHCk9uagfoXAzgpWW6OKNbHSIRE4ShL1A3WfJyRYWDOWKOQoyMnIB5n4F8wHZU1vDMrh3tOvzC7yPWSFJOYlECas= 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 1751647396238231.93880586930675; Fri, 4 Jul 2025 09:43:16 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjFK-0003pO-Pc; Fri, 04 Jul 2025 12:26:42 -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 1uXjEs-0001Vx-ON for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:15 -0400 Received: from mail-wr1-x432.google.com ([2a00:1450:4864:20::432]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjEr-0006cm-3j for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:14 -0400 Received: by mail-wr1-x432.google.com with SMTP id ffacd0b85a97d-3a50956e5d3so813979f8f.1 for ; Fri, 04 Jul 2025 09:26:12 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.26.10 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:26:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646372; x=1752251172; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=MeBk8+23Qld/xDrPvpisbhEiplaNjhAIJT2BQMnpAac=; b=Le77Bj5c4E3yHTqjncQ/Y2CvfE0QBtQ4frY6M6CVfkeQ24N3LesBVlZOcShA1UFpxC tsraN+UKcClafFjDvBKvmDg4sXMN1uJti07I6KhymhZd0/ow37H7rw+6Tyzlg9BqCiWb F6E8l6WYLKykdwEkyXRH9ZHkssU7bwGpsUIqza/D+Xni6UiZMhz8UWR17fGLVCz4dHbF HaUf+j8xK+ja3+H311gPVzI4zp5xcCHX3kBKndgGvDIjjFzMEgpS7Zk0IfmuMTgdJA5M cjj9k9R4ZEgvO7DwCAeNy1tarp9mEZqZRP6shCqVfHeogQDwcyjX1xGoY3qMpIcjOLVW 5Jcw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646372; x=1752251172; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=MeBk8+23Qld/xDrPvpisbhEiplaNjhAIJT2BQMnpAac=; b=ryp/I5tVT8fTYZuUqcZ+WEntRH4svGe6PmGFtb5SZRNkY0r1LSWdeDbQ+dS52tbBeH Pplzq2/OsBNvPWNE6iaWvroi4ASOvjcOT+o5mTvEJdcQjQ3qVbLrh0Mc0NcbzRttDXtP EcUP2KV3ds6GJj4vT4vF0OgWQvbElA8yQ1VPuHupUI/EYfF35Jskn3WobBFIpL8EJ3WQ +rzwa+1kph7OXK73QIaLM11X69xUoLwEwCPJ18kDrj0Cgh8Iz5H5ggAWsQicbYQQFDoL hSSHUQdc+DrPGeRmCAXW+xZKbrKWYh/nDEcSxFJETRZe//eZ6O8ssTzNYFhBQpQhcH0r G/iQ== X-Gm-Message-State: AOJu0Yz9i+s/Ldsx5DoqjoSa0FsFSedr7JqGNVStAYCRrDJmCIpwx/bt e1/NAe6p8wMjiyEvKYqOStL8UzTsH41HMy7lRNLOi3sgReFiVq8SyAA1tITulTtDWO3XXjlKK+3 0grUi X-Gm-Gg: ASbGncuw/JPGj21vnhSDEoVxnlSRmJ3q0+0pXPvIBoICX5VOkOo08xNl5h0Y0mVMyMQ B0LBnIRidd6D/hEYhDd3dxFwreCpH320+4XRLVNeMTxCClS4nxrmObAs7DEAhGNCajkR8WZ73oL SqXShI/8ao4h4LaXbjIHzWtpVYYxvGf4zL3klyhbn893LcCwQg0Bp5d8YKWdR6/XHdBFUHhohkr vZDxH38vXnyl/nGj/3Zb4N0N/CXHuG2zTNMkHoE0AZdPKUGy6KdpHXwXEo8XVU8LFhffuO+wWYt NPP4UkEIWP/iHQ767HKYSamf85saCnngEVeYkOlpuId5wDa73eVBAglF0x7eqDIHtckZ X-Google-Smtp-Source: AGHT+IHtzCDirvj+9tyXsHz/XJx1RnMboVjU8oZKKTUFGtu9Y4jHQwz5n8tEyn+2ME1Pi+5mOLX+9w== X-Received: by 2002:adf:fd0f:0:b0:3a5:2fae:1348 with SMTP id ffacd0b85a97d-3b49660df31mr2640318f8f.51.1751646371700; Fri, 04 Jul 2025 09:26:11 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 072/119] target/arm: Implement SQCVTN, UQCVTN, SQCVTUN for SME2/SVE2p1 Date: Fri, 4 Jul 2025 17:24:12 +0100 Message-ID: <20250704162501.249138-73-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::432; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x432.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751647398681116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-61-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/sve.decode | 20 ++++++++++++++++---- target/arm/tcg/translate-sve.c | 7 +++++++ 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/target/arm/tcg/sve.decode b/target/arm/tcg/sve.decode index 83c259def6e..f808362f239 100644 --- a/target/arm/tcg/sve.decode +++ b/target/arm/tcg/sve.decode @@ -57,6 +57,8 @@ # as propagated via the MOVPRFX instruction. %reg_movprfx 0:5 =20 +%rn_ax2 6:4 !function=3Dtimes_2 + ########################################################################### # Named attribute sets. These are used to make nice(er) names # when creating helpers common to those for the individual @@ -102,6 +104,7 @@ # Two operand @pd_pn ........ esz:2 .. .... ....... rn:4 . rd:4 &rr_esz @rd_rn ........ esz:2 ...... ...... rn:5 rd:5 &rr_esz +@rd_rnx2 ........ ... ..... ...... ..... rd:5 &rr_esz rn= =3D%rn_ax2 =20 # Two operand with governing predicate, flags setting @pd_pg_pn_s ........ . s:1 ...... .. pg:4 . rn:4 . rd:4 &rpr_s @@ -1507,13 +1510,22 @@ UABA 01000101 .. 0 ..... 11111 1 ..... .= .... @rd_rn_rm #### SVE2 Narrowing =20 ## SVE2 saturating extract narrow - # Bits 23, 18-16 are zero, limited in the translator via esz < 3 & imm =3D= =3D 0. -SQXTNB 01000101 .. 1 ..... 010 000 ..... ..... @rd_rn_tszimm_shl + +{ + SQCVTN_sh 01000101 00 1 10001 010 000 ....0 ..... @rd_rnx2 esz=3D1 + SQXTNB 01000101 .. 1 ..... 010 000 ..... ..... @rd_rn_tszimm_shl +} SQXTNT 01000101 .. 1 ..... 010 001 ..... ..... @rd_rn_tszimm_shl -UQXTNB 01000101 .. 1 ..... 010 010 ..... ..... @rd_rn_tszimm_shl +{ + UQCVTN_sh 01000101 00 1 10001 010 010 ....0 ..... @rd_rnx2 esz=3D1 + UQXTNB 01000101 .. 1 ..... 010 010 ..... ..... @rd_rn_tszimm_shl +} UQXTNT 01000101 .. 1 ..... 010 011 ..... ..... @rd_rn_tszimm_shl -SQXTUNB 01000101 .. 1 ..... 010 100 ..... ..... @rd_rn_tszimm_shl +{ + SQCVTUN_sh 01000101 00 1 10001 010 100 ....0 ..... @rd_rnx2 esz=3D1 + SQXTUNB 01000101 .. 1 ..... 010 100 ..... ..... @rd_rn_tszimm_shl +} SQXTUNT 01000101 .. 1 ..... 010 101 ..... ..... @rd_rn_tszimm_shl =20 ## SVE2 bitwise shift right narrow diff --git a/target/arm/tcg/translate-sve.c b/target/arm/tcg/translate-sve.c index 10261e25f92..ac4dc7db461 100644 --- a/target/arm/tcg/translate-sve.c +++ b/target/arm/tcg/translate-sve.c @@ -7427,3 +7427,10 @@ static void gen_uclamp(unsigned vece, uint32_t d, ui= nt32_t n, uint32_t m, } =20 TRANS_FEAT(UCLAMP, aa64_sme, gen_gvec_fn_arg_zzzz, gen_uclamp, a) + +TRANS_FEAT(SQCVTN_sh, aa64_sme2_or_sve2p1, gen_gvec_ool_zz, + gen_helper_sme2_sqcvtn_sh, a->rd, a->rn, 0) +TRANS_FEAT(UQCVTN_sh, aa64_sme2_or_sve2p1, gen_gvec_ool_zz, + gen_helper_sme2_uqcvtn_sh, a->rd, a->rn, 0) +TRANS_FEAT(SQCVTUN_sh, aa64_sme2_or_sve2p1, gen_gvec_ool_zz, + gen_helper_sme2_sqcvtun_sh, a->rd, a->rn, 0) --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647311; cv=none; d=zohomail.com; s=zohoarc; b=DtFqtn9iV8LloPwN/QFjHUf0g/AzFu8UxoOTOYIDu3uTF2PgfhN5KpC4yVW8e3pTn38AfqzpbhsaqB0N1USi1BH/esFRinXRtsYPt1tH/AQIUN+W3YhSGKJuup76dxDcKMb5bYLn/1K01CXTyKWCDDjA7SKFVpmf0+uu8GOmN4E= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647311; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=+tXTdX5Rz3rjvuUkQEeme/gBVT2IAJDaGbk9IXJh73I=; b=Z9UBOeS92AwMkm6YKdKDosy0qoHpgU8q8W7snG4rgVCI79VVUsakeiVrmED4IX7ov3xREd8JVsVgL93HrRdlFA2Gw5aOU9+QeBaj6toxqvTv6faZgJvXAt+L8ckxf125q+ks/MbZAjfY6AWZYUqRqSgZ58IuOkUNHd+yOtvxC3M= 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 1751647311414871.5144341657469; Fri, 4 Jul 2025 09:41:51 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjF1-00020O-SC; Fri, 04 Jul 2025 12:26:23 -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 1uXjEu-0001by-HG for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:16 -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 1uXjEs-0006dA-KV for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:16 -0400 Received: by mail-wm1-x32c.google.com with SMTP id 5b1f17b1804b1-450ccda1a6eso8153825e9.2 for ; Fri, 04 Jul 2025 09:26:14 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.26.11 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:26:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646373; x=1752251173; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=+tXTdX5Rz3rjvuUkQEeme/gBVT2IAJDaGbk9IXJh73I=; b=k9wFpQQFF66GAygp2NxV7XRAYml8WT+Xr6Ba/u70yiqBxlRw+dM9aQI3QE190ywntM IWG3wh53kjn1BIEHd0j+PXVHi4CeSnGT+CtSAdDdpGAjtIvMdFQRFQfIBIgKNlkV+/T3 HXfSS0VXZ3HgShTgP1iYRy2i8Ft8524iohVMEONR4eA3fs8HmrawzbQ1t0okXLY7ijRu v0LNnATdyxLapN3ts7rIVlkb7WPNNFQfld6CPkynFCdj4X8z7u3u7V7CdakH8eAkLcb/ Yxl3DxHSFyL6tfmw1+tsPGBT3ESM77tewNoHzP5tg5m6ogZnx8MKuJGVdxw0VOxbINnS d+ZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646373; x=1752251173; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=+tXTdX5Rz3rjvuUkQEeme/gBVT2IAJDaGbk9IXJh73I=; b=NKwnW3dmA3/0jT091QurV+BG0abmQClQRfcPVinOh4HrrxMuAUh+7HToRJ4r98exo5 BwN7hInmRLHI456ftlaC41qzJkgZSvfqwqorzl3Fx+KmWWAzU7eh7rXtikA1+XRTzDYe RfRi+ct2ZloUKCyszfI8HqnxOswz+eHhAxNS5XFgTVuWCFef3hbfbyS5qoLhxKa4NUx3 M+pfSREavvmcse1cwEW+NzZMmti5bjxhkz5+mGSptAy0x/FMb043yjPSgTccuJJAXUgz LoiHYQ+jOwvgNC7cnd95Y4BIS9U8V7OgoCY581BnTSsF9ciEKyyC+tSyN8vrGfJACWqn Zq3A== X-Gm-Message-State: AOJu0Yxa7MuNEc3F9RdYrHNlxXRWswWNJiEqhw3DQvCU0dUeT1DarCSh EFfuT+vBsncidd1cm7gfYmluBNBpKxWgmZlFiGHiCa/cAd5B6ine3PQg0/k7n+8Cd0hZMPxzbOp KAdrB X-Gm-Gg: ASbGncsQhSV/NVdbkj+aQrbrrHhdLSCe4OV0sD2O8OAy+wgA6v0V5jbjlqpa+uaPLZN yEdlJJrYd2FwxMMWVxoYhvuZrmfCoY9e/5SPyKCFwJVjlHRwhLdJIP7TB9nn+ATd3IIDgFQnNPd VEuj0S0cxjx6gbwFc2ZADElPh9AKU1+X8RaaBbW3xxFgb8acWSZMjzuDUNmy/ZdazqOezFOcyKc eyaGT8fVsMgC6FpcCsfyUfA2/JI6azuQBpe8FQEcw+PWPVBRYRfwpIoN5m9x20CYtemc2wOAVwq BvAsMW5N6D87oxtu6indM10/vfMtbJ2xlujRqk6I9DzFjywpk3U9IdPZ/nP914GLrxM6 X-Google-Smtp-Source: AGHT+IG+dDh9gjsnVnwF7XwtKXr4CGpEJ56vOAUgduTJLcc582VXNkjIcgwsnFPsYMfA80UrS/usjA== X-Received: by 2002:a05:600c:a108:b0:43c:f87c:24ce with SMTP id 5b1f17b1804b1-454b3215954mr24054015e9.21.1751646373002; Fri, 04 Jul 2025 09:26:13 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 073/119] target/arm: Implement SME2 SUNPK, UUNPK Date: Fri, 4 Jul 2025 17:24:13 +0100 Message-ID: <20250704162501.249138-74-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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=peter.maydell@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 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: 1751647311672116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell Message-id: 20250704142112.1018902-62-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/helper-sme.h | 13 ++++++++++++ target/arm/tcg/sme.decode | 18 ++++++++++++++++ target/arm/tcg/sme_helper.c | 38 ++++++++++++++++++++++++++++++++++ target/arm/tcg/translate-sme.c | 16 ++++++++++++++ 4 files changed, 85 insertions(+) diff --git a/target/arm/tcg/helper-sme.h b/target/arm/tcg/helper-sme.h index 792b9936954..893b23aa3bc 100644 --- a/target/arm/tcg/helper-sme.h +++ b/target/arm/tcg/helper-sme.h @@ -241,3 +241,16 @@ DEF_HELPER_FLAGS_3(sme2_sqcvtun_sh, TCG_CALL_NO_RWG, v= oid, ptr, ptr, i32) DEF_HELPER_FLAGS_3(sme2_sqcvtn_dh, TCG_CALL_NO_RWG, void, ptr, ptr, i32) DEF_HELPER_FLAGS_3(sme2_uqcvtn_dh, TCG_CALL_NO_RWG, void, ptr, ptr, i32) DEF_HELPER_FLAGS_3(sme2_sqcvtun_dh, TCG_CALL_NO_RWG, void, ptr, ptr, i32) + +DEF_HELPER_FLAGS_3(sme2_sunpk2_bh, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2_sunpk2_hs, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2_sunpk2_sd, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2_sunpk4_bh, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2_sunpk4_hs, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2_sunpk4_sd, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2_uunpk2_bh, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2_uunpk2_hs, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2_uunpk2_sd, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2_uunpk4_bh, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2_uunpk4_hs, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2_uunpk4_sd, TCG_CALL_NO_RWG, void, ptr, ptr, i32) diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index e005f6e6ed6..38c210cd4f0 100644 --- a/target/arm/tcg/sme.decode +++ b/target/arm/tcg/sme.decode @@ -734,6 +734,8 @@ SUB_aaz_d 11000001 111 000010 .. 111 ...00 11 ...= @az_4x4_o3 &zz_n n=3D2 zd=3D%zd_ax2 zn=3D%zn_ax2 @zz_4x4 ........ ... ..... ...... .... . ..... \ &zz_n n=3D4 zd=3D%zd_ax4 zn=3D%zn_ax4 +@zz_4x2_n1 ........ ... ..... ...... .... . ..... \ + &zz_n n=3D1 zd=3D%zd_ax4 zn=3D%zn_ax2 =20 BFCVT 11000001 011 00000 111000 ....0 ..... @zz_1x2 BFCVTN 11000001 011 00000 111000 ....1 ..... @zz_1x2 @@ -782,3 +784,19 @@ SQCVTUN_sb 11000001 011 10011 111000 ...10 ..... = @zz_1x4 SQCVTN_dh 11000001 101 10011 111000 ...10 ..... @zz_1x4 UQCVTN_dh 11000001 101 10011 111000 ...11 ..... @zz_1x4 SQCVTUN_dh 11000001 111 10011 111000 ...10 ..... @zz_1x4 + +SUNPK_2bh 11000001 011 00101 111000 ..... ....0 @zz_2x1 +SUNPK_2hs 11000001 101 00101 111000 ..... ....0 @zz_2x1 +SUNPK_2sd 11000001 111 00101 111000 ..... ....0 @zz_2x1 + +UUNPK_2bh 11000001 011 00101 111000 ..... ....1 @zz_2x1 +UUNPK_2hs 11000001 101 00101 111000 ..... ....1 @zz_2x1 +UUNPK_2sd 11000001 111 00101 111000 ..... ....1 @zz_2x1 + +SUNPK_4bh 11000001 011 10101 111000 ....0 ...00 @zz_4x2_n1 +SUNPK_4hs 11000001 101 10101 111000 ....0 ...00 @zz_4x2_n1 +SUNPK_4sd 11000001 111 10101 111000 ....0 ...00 @zz_4x2_n1 + +UUNPK_4bh 11000001 011 10101 111000 ....0 ...01 @zz_4x2_n1 +UUNPK_4hs 11000001 101 10101 111000 ....0 ...01 @zz_4x2_n1 +UUNPK_4sd 11000001 111 10101 111000 ....0 ...01 @zz_4x2_n1 diff --git a/target/arm/tcg/sme_helper.c b/target/arm/tcg/sme_helper.c index 094a1e57f3e..ee4596e066e 100644 --- a/target/arm/tcg/sme_helper.c +++ b/target/arm/tcg/sme_helper.c @@ -1737,6 +1737,44 @@ void HELPER(sme2_fcvt_w)(void *vd, void *vs, float_s= tatus *fpst, uint32_t desc) } } =20 +#define UNPK(NAME, SREG, TW, TN, HW, HN) \ +void HELPER(NAME)(void *vd, void *vs, uint32_t desc) \ +{ \ + ARMVectorReg scratch[SREG]; \ + size_t oprsz =3D simd_oprsz(desc); \ + size_t n =3D oprsz / sizeof(TW); \ + if (vectors_overlap(vd, 2 * SREG, vs, SREG)) { \ + vs =3D memcpy(scratch, vs, sizeof(scratch)); \ + } \ + for (size_t r =3D 0; r < SREG; ++r) { \ + TN *s =3D vs + r * sizeof(ARMVectorReg); \ + for (size_t i =3D 0; i < 2; ++i) { \ + TW *d =3D vd + (2 * r + i) * sizeof(ARMVectorReg); \ + for (size_t e =3D 0; e < n; ++e) { \ + d[HW(e)] =3D s[HN(i * n + e)]; \ + } \ + } \ + } \ +} + +UNPK(sme2_sunpk2_bh, 1, int16_t, int8_t, H2, H1) +UNPK(sme2_sunpk2_hs, 1, int32_t, int16_t, H4, H2) +UNPK(sme2_sunpk2_sd, 1, int64_t, int32_t, H8, H4) + +UNPK(sme2_sunpk4_bh, 2, int16_t, int8_t, H2, H1) +UNPK(sme2_sunpk4_hs, 2, int32_t, int16_t, H4, H2) +UNPK(sme2_sunpk4_sd, 2, int64_t, int32_t, H8, H4) + +UNPK(sme2_uunpk2_bh, 1, uint16_t, uint8_t, H2, H1) +UNPK(sme2_uunpk2_hs, 1, uint32_t, uint16_t, H4, H2) +UNPK(sme2_uunpk2_sd, 1, uint64_t, uint32_t, H8, H4) + +UNPK(sme2_uunpk4_bh, 2, uint16_t, uint8_t, H2, H1) +UNPK(sme2_uunpk4_hs, 2, uint32_t, uint16_t, H4, H2) +UNPK(sme2_uunpk4_sd, 2, uint64_t, uint32_t, H8, H4) + +#undef UNPK + /* Deinterleave and convert. */ void HELPER(sme2_fcvtl)(void *vd, void *vs, float_status *fpst, uint32_t d= esc) { diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index dd1a6668fb5..b45e68750d9 100644 --- a/target/arm/tcg/translate-sme.c +++ b/target/arm/tcg/translate-sme.c @@ -1419,3 +1419,19 @@ TRANS_FEAT(SQCVTUN_sb, aa64_sme2, do_zz, a, 0, gen_h= elper_sme2_sqcvtun_sb) TRANS_FEAT(SQCVTN_dh, aa64_sme2, do_zz, a, 0, gen_helper_sme2_sqcvtn_dh) TRANS_FEAT(UQCVTN_dh, aa64_sme2, do_zz, a, 0, gen_helper_sme2_uqcvtn_dh) TRANS_FEAT(SQCVTUN_dh, aa64_sme2, do_zz, a, 0, gen_helper_sme2_sqcvtun_dh) + +TRANS_FEAT(SUNPK_2bh, aa64_sme2, do_zz, a, 0, gen_helper_sme2_sunpk2_bh) +TRANS_FEAT(SUNPK_2hs, aa64_sme2, do_zz, a, 0, gen_helper_sme2_sunpk2_hs) +TRANS_FEAT(SUNPK_2sd, aa64_sme2, do_zz, a, 0, gen_helper_sme2_sunpk2_sd) + +TRANS_FEAT(SUNPK_4bh, aa64_sme2, do_zz, a, 0, gen_helper_sme2_sunpk4_bh) +TRANS_FEAT(SUNPK_4hs, aa64_sme2, do_zz, a, 0, gen_helper_sme2_sunpk4_hs) +TRANS_FEAT(SUNPK_4sd, aa64_sme2, do_zz, a, 0, gen_helper_sme2_sunpk4_sd) + +TRANS_FEAT(UUNPK_2bh, aa64_sme2, do_zz, a, 0, gen_helper_sme2_uunpk2_bh) +TRANS_FEAT(UUNPK_2hs, aa64_sme2, do_zz, a, 0, gen_helper_sme2_uunpk2_hs) +TRANS_FEAT(UUNPK_2sd, aa64_sme2, do_zz, a, 0, gen_helper_sme2_uunpk2_sd) + +TRANS_FEAT(UUNPK_4bh, aa64_sme2, do_zz, a, 0, gen_helper_sme2_uunpk4_bh) +TRANS_FEAT(UUNPK_4hs, aa64_sme2, do_zz, a, 0, gen_helper_sme2_uunpk4_hs) +TRANS_FEAT(UUNPK_4sd, aa64_sme2, do_zz, a, 0, gen_helper_sme2_uunpk4_sd) --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647283; cv=none; d=zohomail.com; s=zohoarc; b=krVyn18rv4v1M/FoVhrmpSFqViJ4jSLmvlyDZTWu0DLHOGg7K6m6vAfnyI4Ef9Ufw1AK3z6pQ6QWinelt9FQCR7OU3M3kT8QJpxk4MG43raLY0cK+kBVBzsbJ7VcUo2HTwVLN9jmRrmhAkMeRtdENMx36R8VmtnwAT5jhnod1LU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647283; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=pFx3Bzsm/oquSMPjOL8P8XvZX4RqsR8Y3KjwyX8yMKs=; b=WQiJyt4/fauYlIyWXQl3iZ57PU90k9nqP55J7L+EuVYibungrB/XtUTRip6PK88TUi8x1NGX/mYN8DJJEKD250DG0PiBfWi/gYDyUkbqx1vQsiikgE/qPWZqqpydRL4dqPgY6HhQTuUl9Dp/ZD43JO3wRl3+3DoZs/aO+efMQB0= 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 1751647283347239.91438499048354; Fri, 4 Jul 2025 09:41:23 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjFA-0002kY-9t; Fri, 04 Jul 2025 12:26:32 -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 1uXjEv-0001dz-Br for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:17 -0400 Received: from mail-wr1-x433.google.com ([2a00:1450:4864:20::433]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjEt-0006fK-En for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:17 -0400 Received: by mail-wr1-x433.google.com with SMTP id ffacd0b85a97d-3a6cd1a6fecso1019437f8f.3 for ; Fri, 04 Jul 2025 09:26:15 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.26.13 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:26:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646374; x=1752251174; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=pFx3Bzsm/oquSMPjOL8P8XvZX4RqsR8Y3KjwyX8yMKs=; b=Bye71TkG+G+VIej8hPYVWZS6yYofD6OYzB7c0CR6gZqVw3PEHqA76cE2ZuFVXH9ZS2 IVszfTQ4wS6ZBKZhMAnZjEBoX8ILY8Fz6wco6JKYA+E71nDQHvDbUukrzZEUcgs6/0vF kcsJ0GUDwU50XoYol8ooqOAsqqJ+R9ri2nxsd+E++RkQU6HPovfRyWPCUEPsciQ7LfOU 010qPlfg8xc9OTV+KZ/4D9ZBd9tDygx0Ned+6IzGBFph6i6MqJNAGy/jAYCnghSlwrTt l3ZKLDU1uPqi6T7mYoTCdU2EZqmOl/b+vgbQ9G1fBJEKUqv3VtEpGLRnVwMJxMhPd8Rp UvZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646374; x=1752251174; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=pFx3Bzsm/oquSMPjOL8P8XvZX4RqsR8Y3KjwyX8yMKs=; b=poJ3wuMzpM7NzJVskV0yJXT1v24ZY0qGdrc8jAZ4MgdLApREgWL2AOSyKvFx4gIxN3 bn0VSpl+ZVIWc5kvwBI724PEtF0JTuU2jj/1UqmqK8vZRh6PtY185a4zNRI7NeqeQwHH DTcTSm5AjtrmZjk8V+IQwGhUo4HqBAhKRp0mzNjFPmZbsVVEEyEAK37+ZPmnELFpJstL 5/JLaN2J5icQFTttcfBrbHlkjepNfKjOK9aTR8AETKsDCrKDedbZvX4S3gEofJpanlRQ kM9tVaz4oRDYpTYSXh3b6TVfj9t5yUXFL+yM6RYktQQ0S1gO54pg7UFm5QowE80ZsINy Rb8A== X-Gm-Message-State: AOJu0YyQV0/biGGmKTk7YRwxUZmIN9hz+YIda9J5LRvGDs5XoINO91KH Qr66ld0FozTA92HthpnLox/QqItWaLxrvcCTk0ZRgldIGvo4TYpAX9gu75OXvao8WfR05NXsMRs pMtqv X-Gm-Gg: ASbGnctbL4py1sMiJhh2kAJzNdkR7/lFDRijjj8cme+hdrToRw6X3IqW9G0FO46eA2O UiJtlS/tnrxpMBgr9Z5dH+wmWaixZRsJ05z3220sjdtBCcym9WbuAzugMjln/tQkzcxylH/+5p2 0d6YS+OMus+/OsJZoYp/fKBv3TMRuwQL8UujSWy9EtpuTFqV5ixdwySuQ93+GpQKUEaLBrYMsCW vid72tIEt/0RPa3nDo9nAyhmgFuqxux94cY6u3wip1ZX8t8GPBYoGb04Kc7yluaMcqubz9dDOCM 5V146lW+IGvh5VFKzG/cfXu6oE37ovDUrz1C19uuLKRTV0LcfPQ98hgc467i/A0qWZnj X-Google-Smtp-Source: AGHT+IF2sW+8Pz73lDwX82vpLdp4Bvpyh1M607vc5h/4IFVstV2ZURCZIVsolCLg35hiYS2rCe0fxQ== X-Received: by 2002:a05:6000:2085:b0:3a4:ee51:8144 with SMTP id ffacd0b85a97d-3b4964f8a44mr2895715f8f.13.1751646373937; Fri, 04 Jul 2025 09:26:13 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 074/119] target/arm: Implement SME2 ZIP, UZP (four registers) Date: Fri, 4 Jul 2025 17:24:14 +0100 Message-ID: <20250704162501.249138-75-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::433; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x433.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751647285315116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-63-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/helper-sme.h | 12 ++++++ target/arm/tcg/sme.decode | 11 ++++++ target/arm/tcg/sme_helper.c | 68 ++++++++++++++++++++++++++++++++++ target/arm/tcg/translate-sme.c | 39 +++++++++++++++++++ 4 files changed, 130 insertions(+) diff --git a/target/arm/tcg/helper-sme.h b/target/arm/tcg/helper-sme.h index 893b23aa3bc..7e21f1095a2 100644 --- a/target/arm/tcg/helper-sme.h +++ b/target/arm/tcg/helper-sme.h @@ -254,3 +254,15 @@ DEF_HELPER_FLAGS_3(sme2_uunpk2_sd, TCG_CALL_NO_RWG, vo= id, ptr, ptr, i32) DEF_HELPER_FLAGS_3(sme2_uunpk4_bh, TCG_CALL_NO_RWG, void, ptr, ptr, i32) DEF_HELPER_FLAGS_3(sme2_uunpk4_hs, TCG_CALL_NO_RWG, void, ptr, ptr, i32) DEF_HELPER_FLAGS_3(sme2_uunpk4_sd, TCG_CALL_NO_RWG, void, ptr, ptr, i32) + +DEF_HELPER_FLAGS_3(sme2_zip4_b, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2_zip4_h, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2_zip4_s, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2_zip4_d, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2_zip4_q, TCG_CALL_NO_RWG, void, ptr, ptr, i32) + +DEF_HELPER_FLAGS_3(sme2_uzp4_b, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2_uzp4_h, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2_uzp4_s, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2_uzp4_d, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2_uzp4_q, TCG_CALL_NO_RWG, void, ptr, ptr, i32) diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 38c210cd4f0..81783b4705c 100644 --- a/target/arm/tcg/sme.decode +++ b/target/arm/tcg/sme.decode @@ -723,6 +723,7 @@ SUB_aaz_d 11000001 111 000010 .. 111 ...00 11 ...= @az_4x4_o3 =20 ### SME2 Multi-vector SVE Constructive Unary =20 +&zz_e zd zn esz &zz_n zd zn n @zz_1x2 ........ ... ..... ...... ..... zd:5 \ &zz_n n=3D1 zn=3D%zn_ax2 @@ -800,3 +801,13 @@ SUNPK_4sd 11000001 111 10101 111000 ....0 ...00 = @zz_4x2_n1 UUNPK_4bh 11000001 011 10101 111000 ....0 ...01 @zz_4x2_n1 UUNPK_4hs 11000001 101 10101 111000 ....0 ...01 @zz_4x2_n1 UUNPK_4sd 11000001 111 10101 111000 ....0 ...01 @zz_4x2_n1 + +ZIP_4 11000001 esz:2 1 10110 111000 ...00 ... 00 \ + &zz_e zd=3D%zd_ax4 zn=3D%zn_ax4 +ZIP_4 11000001 001 10111 111000 ...00 ... 00 \ + &zz_e esz=3D4 zd=3D%zd_ax4 zn=3D%zn_ax4 + +UZP_4 11000001 esz:2 1 10110 111000 ...00 ... 10 \ + &zz_e zd=3D%zd_ax4 zn=3D%zn_ax4 +UZP_4 11000001 001 10111 111000 ...00 ... 10 \ + &zz_e esz=3D4 zd=3D%zd_ax4 zn=3D%zn_ax4 diff --git a/target/arm/tcg/sme_helper.c b/target/arm/tcg/sme_helper.c index ee4596e066e..4a05fff5fe2 100644 --- a/target/arm/tcg/sme_helper.c +++ b/target/arm/tcg/sme_helper.c @@ -1812,3 +1812,71 @@ void HELPER(sme2_ucvtf)(void *vd, void *vs, float_st= atus *fpst, uint32_t desc) d[i] =3D uint32_to_float32(s[i], fpst); } } + +#define ZIP4(NAME, TYPE, H) \ +void HELPER(NAME)(void *vd, void *vs, uint32_t desc) \ +{ \ + ARMVectorReg scratch[4]; \ + size_t oprsz =3D simd_oprsz(desc); \ + size_t quads =3D oprsz / (sizeof(TYPE) * 4); \ + TYPE *s0, *s1, *s2, *s3; \ + if (vs =3D=3D vd) { \ + vs =3D memcpy(scratch, vs, sizeof(scratch)); \ + } \ + s0 =3D vs; \ + s1 =3D vs + sizeof(ARMVectorReg); \ + s2 =3D vs + 2 * sizeof(ARMVectorReg); \ + s3 =3D vs + 3 * sizeof(ARMVectorReg); \ + for (size_t r =3D 0; r < 4; ++r) { \ + TYPE *d =3D vd + r * sizeof(ARMVectorReg); \ + size_t base =3D r * quads; \ + for (size_t q =3D 0; q < quads; ++q) { \ + d[H(4 * q + 0)] =3D s0[base + H(q)]; \ + d[H(4 * q + 1)] =3D s1[base + H(q)]; \ + d[H(4 * q + 2)] =3D s2[base + H(q)]; \ + d[H(4 * q + 3)] =3D s3[base + H(q)]; \ + } \ + } \ +} + +ZIP4(sme2_zip4_b, uint8_t, H1) +ZIP4(sme2_zip4_h, uint16_t, H2) +ZIP4(sme2_zip4_s, uint32_t, H4) +ZIP4(sme2_zip4_d, uint64_t, ) +ZIP4(sme2_zip4_q, Int128, ) + +#undef ZIP4 + +#define UZP4(NAME, TYPE, H) \ +void HELPER(NAME)(void *vd, void *vs, uint32_t desc) \ +{ \ + ARMVectorReg scratch[4]; \ + size_t oprsz =3D simd_oprsz(desc); \ + size_t quads =3D oprsz / (sizeof(TYPE) * 4); \ + TYPE *d0, *d1, *d2, *d3; \ + if (vs =3D=3D vd) { \ + vs =3D memcpy(scratch, vs, sizeof(scratch)); \ + } \ + d0 =3D vd; \ + d1 =3D vd + sizeof(ARMVectorReg); \ + d2 =3D vd + 2 * sizeof(ARMVectorReg); \ + d3 =3D vd + 3 * sizeof(ARMVectorReg); \ + for (size_t r =3D 0; r < 4; ++r) { \ + TYPE *s =3D vs + r * sizeof(ARMVectorReg); \ + size_t base =3D r * quads; \ + for (size_t q =3D 0; q < quads; ++q) { \ + d0[base + H(q)] =3D s[H(4 * q + 0)]; \ + d1[base + H(q)] =3D s[H(4 * q + 1)]; \ + d2[base + H(q)] =3D s[H(4 * q + 2)]; \ + d3[base + H(q)] =3D s[H(4 * q + 3)]; \ + } \ + } \ +} + +UZP4(sme2_uzp4_b, uint8_t, H1) +UZP4(sme2_uzp4_h, uint16_t, H2) +UZP4(sme2_uzp4_s, uint32_t, H4) +UZP4(sme2_uzp4_d, uint64_t, ) +UZP4(sme2_uzp4_q, Int128, ) + +#undef UZP4 diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index b45e68750d9..de9545ee6d9 100644 --- a/target/arm/tcg/translate-sme.c +++ b/target/arm/tcg/translate-sme.c @@ -1435,3 +1435,42 @@ TRANS_FEAT(UUNPK_2sd, aa64_sme2, do_zz, a, 0, gen_he= lper_sme2_uunpk2_sd) TRANS_FEAT(UUNPK_4bh, aa64_sme2, do_zz, a, 0, gen_helper_sme2_uunpk4_bh) TRANS_FEAT(UUNPK_4hs, aa64_sme2, do_zz, a, 0, gen_helper_sme2_uunpk4_hs) TRANS_FEAT(UUNPK_4sd, aa64_sme2, do_zz, a, 0, gen_helper_sme2_uunpk4_sd) + +static bool do_zipuzp_4(DisasContext *s, arg_zz_e *a, + gen_helper_gvec_2 * const fn[5]) +{ + int bytes_per_op =3D 4 << a->esz; + + /* Both MO_64 and MO_128 can fail the size test. */ + if (s->max_svl < bytes_per_op) { + unallocated_encoding(s); + } else if (sme_sm_enabled_check(s)) { + int svl =3D streaming_vec_reg_size(s); + if (svl < bytes_per_op) { + unallocated_encoding(s); + } else { + tcg_gen_gvec_2_ool(vec_full_reg_offset(s, a->zd), + vec_full_reg_offset(s, a->zn), + svl, svl, 0, fn[a->esz]); + } + } + return true; +} + +static gen_helper_gvec_2 * const zip4_fns[] =3D { + gen_helper_sme2_zip4_b, + gen_helper_sme2_zip4_h, + gen_helper_sme2_zip4_s, + gen_helper_sme2_zip4_d, + gen_helper_sme2_zip4_q, +}; +TRANS_FEAT(ZIP_4, aa64_sme2, do_zipuzp_4, a, zip4_fns) + +static gen_helper_gvec_2 * const uzp4_fns[] =3D { + gen_helper_sme2_uzp4_b, + gen_helper_sme2_uzp4_h, + gen_helper_sme2_uzp4_s, + gen_helper_sme2_uzp4_d, + gen_helper_sme2_uzp4_q, +}; +TRANS_FEAT(UZP_4, aa64_sme2, do_zipuzp_4, a, uzp4_fns) --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646821; cv=none; d=zohomail.com; s=zohoarc; b=IdZs2+88tc6aEmNk6EZJRw+VpBW0+ZAsGF075kH9ebqVFlYpVEiwJoFqrfwsUoWA06IwaX4xTO0nR3XLseutogjuWKRyKbdyYCcGfE9zmhj0vaYwZYdmIKoEOJ6jMFlC6DyXLhO3Dedc65FkgOw5DhYirFYzBSU1uNpyox9vUrs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646821; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=snpF41TkMg+FAn1H/KoHXR01j1pFxBXmKwS7HVGOoYs=; b=OTFnojKD+T26oy6JUPPv1PPtEYMNXCWFbF7gLfuzQNPzaUp/hgUcnOPiEh8XQuL2BsndYJHnddJ3qjsfxWEA00E4PdDUY2Q1iVWkPo3omZb8SNu6EdCkfWg+8Vsg5RhVuIOrSiR4h0s8e/m+WhLCk7O46ztfap0Mo2R3R+yoTUQ= 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 1751646821032911.5222872768081; Fri, 4 Jul 2025 09:33:41 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjFN-0004FU-MZ; Fri, 04 Jul 2025 12:26:45 -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 1uXjEw-0001jy-5v for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:18 -0400 Received: from mail-wm1-x332.google.com ([2a00:1450:4864:20::332]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjEu-0006gf-Cq for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:17 -0400 Received: by mail-wm1-x332.google.com with SMTP id 5b1f17b1804b1-451d6ade159so9792925e9.1 for ; Fri, 04 Jul 2025 09:26:16 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.26.14 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:26:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646375; x=1752251175; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=snpF41TkMg+FAn1H/KoHXR01j1pFxBXmKwS7HVGOoYs=; b=p5rAQP1j6kDUhV4cbt4rKp/Ip0kwg3XxJxikBNlxjb/ibLZD0lWJ5625I9vpvptzyV apvsB9fgWr6PP2Sxacw8Wadu8/sEsi7RxgyAwfxO4WFflFzUrzwY13e5Ye7D+6iywUXq 8eU/YA/RswhROVo0hvuMvFuQiWnV9+WDkDYYIsf6j7PxzKl94dlzzKQDGgTdQvmA5qSo ksMofxXHkxDTACBXORkVKGvFzSOsLXzt4Gw4syw+JsMOc8n/Vr5Ic5wyM7CEgRup/nmm 4qYrpfC+kiw9Xm2mW6sUsHN+93ju2PvUpWJ6IeSSg6GBUYWL3/EBtQnYdthbyJC47g+/ k/4Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646375; x=1752251175; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=snpF41TkMg+FAn1H/KoHXR01j1pFxBXmKwS7HVGOoYs=; b=I3ITs/3LZjLQ1fFAOdPXCxhXlpQ1C+080G5mPobXH+SBsFfawd0LuPFu2ssnME/P7o t2dhw2vUGAJq/9Ub7d5X2BXK+bYiit4UPC3BLK1OlNMfgsMOgVAUfScPXLHjNNim9ioF rysRTIloow3ayo2bTP4jRWcUGOrToP5B8aN8XgJM0yVHLNkXHypu9Myfd4PY7KJK/MZS GPvjOaLLIwxVAldPVhIfiIMdVJygH9M2tBZV3/fNV1VWzgpRXg9vtmA+a1oM48Ckfd2N SixPK0U8kQyHhF6SOt4UotHxQezk6XX8zT0jlpYnKoMkaC2DYFo6fiEpSUKp0wbTgiXj iCWA== X-Gm-Message-State: AOJu0YxujuNm9znIiPJMqUNTUp5zdRv5LpBz/xwZjh8ZWC0kz1KMvBRx 8qoqNvtV6oQxZTRpybtxtnPjbsP1bYKb1u6N7PpgPWqvhruX8bck6OPRWzjBgYTeUI9+8YCdxf5 m8VJB X-Gm-Gg: ASbGncuq8zcnR6FBSrvXLlcZDiyUK8DRic1eN3C69k//HQcZirttS5CKem/P/iwuAfq mSMrraluYzT2j+YxjSRNA26OxCIgqVZCup/BKKLRSwupKx/QphchIYCs033qXqDYVXl8CfaEZmX fGi8cSKJCmn5ZTCwSy/CWns9/ej9TpNM9/BOjrEaDc24qM/mRZ2qdFyEsHtqzIE2EHFOMmA4D83 LMyL004l2UuGpiIUEG8IZLr3eSiWhLAXtLd/gCx0b9/RMiLmL4K9b76KkvnHljZVneUK8xZkoRq pcCSQZQ4PvPA+TfzZzOfmGljLfrdt6sZ7aP9eaYyz/sAWQ9RSSeujpxn9HcNlwvRiIjP X-Google-Smtp-Source: AGHT+IGIAz9P43O9C3qlYcAH8Okz3OB9qUSU2YYhJcfhTfiAC6x45mH6toF5Hyw6+Aum1eAHwlTOoQ== X-Received: by 2002:a05:600c:6092:b0:44b:1f5b:8c85 with SMTP id 5b1f17b1804b1-454b4e74877mr30114215e9.13.1751646374975; Fri, 04 Jul 2025 09:26:14 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 075/119] target/arm: Move do_urshr, do_srshr to vec_internal.h Date: Fri, 4 Jul 2025 17:24:15 +0100 Message-ID: <20250704162501.249138-76-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::332; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x332.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751646822073116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Unify two copies of these inline functions. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-64-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/vec_internal.h | 21 +++++++++++++++++++++ target/arm/tcg/mve_helper.c | 21 --------------------- target/arm/tcg/sve_helper.c | 21 --------------------- 3 files changed, 21 insertions(+), 42 deletions(-) diff --git a/target/arm/tcg/vec_internal.h b/target/arm/tcg/vec_internal.h index a1c10c60a1c..5efd257c50d 100644 --- a/target/arm/tcg/vec_internal.h +++ b/target/arm/tcg/vec_internal.h @@ -230,6 +230,27 @@ int64_t do_sqrdmlah_d(int64_t, int64_t, int64_t, bool,= bool); #define do_usat_h(val) MIN(MAX(val, 0), UINT16_MAX) #define do_usat_s(val) MIN(MAX(val, 0), UINT32_MAX) =20 +static inline uint64_t do_urshr(uint64_t x, unsigned sh) +{ + if (likely(sh < 64)) { + return (x >> sh) + ((x >> (sh - 1)) & 1); + } else if (sh =3D=3D 64) { + return x >> 63; + } else { + return 0; + } +} + +static inline int64_t do_srshr(int64_t x, unsigned sh) +{ + if (likely(sh < 64)) { + return (x >> sh) + ((x >> (sh - 1)) & 1); + } else { + /* Rounding the sign bit always produces 0. */ + return 0; + } +} + /** * bfdotadd: * @sum: addend diff --git a/target/arm/tcg/mve_helper.c b/target/arm/tcg/mve_helper.c index 42bb3b979b5..63ddcf3fecf 100644 --- a/target/arm/tcg/mve_helper.c +++ b/target/arm/tcg/mve_helper.c @@ -2204,27 +2204,6 @@ DO_VSHLL_ALL(vshllt, true) DO_VSHRN(OP##tb, true, 1, uint8_t, 2, uint16_t, FN) \ DO_VSHRN(OP##th, true, 2, uint16_t, 4, uint32_t, FN) =20 -static inline uint64_t do_urshr(uint64_t x, unsigned sh) -{ - if (likely(sh < 64)) { - return (x >> sh) + ((x >> (sh - 1)) & 1); - } else if (sh =3D=3D 64) { - return x >> 63; - } else { - return 0; - } -} - -static inline int64_t do_srshr(int64_t x, unsigned sh) -{ - if (likely(sh < 64)) { - return (x >> sh) + ((x >> (sh - 1)) & 1); - } else { - /* Rounding the sign bit always produces 0. */ - return 0; - } -} - DO_VSHRN_ALL(vshrn, DO_SHR) DO_VSHRN_ALL(vrshrn, do_urshr) =20 diff --git a/target/arm/tcg/sve_helper.c b/target/arm/tcg/sve_helper.c index f9052f21644..0e59ad22624 100644 --- a/target/arm/tcg/sve_helper.c +++ b/target/arm/tcg/sve_helper.c @@ -2050,27 +2050,6 @@ void HELPER(NAME)(void *vd, void *vn, void *vg, uint= 32_t desc) \ when N is negative, add 2**M-1. */ #define DO_ASRD(N, M) ((N + (N < 0 ? ((__typeof(N))1 << M) - 1 : 0)) >> M) =20 -static inline uint64_t do_urshr(uint64_t x, unsigned sh) -{ - if (likely(sh < 64)) { - return (x >> sh) + ((x >> (sh - 1)) & 1); - } else if (sh =3D=3D 64) { - return x >> 63; - } else { - return 0; - } -} - -static inline int64_t do_srshr(int64_t x, unsigned sh) -{ - if (likely(sh < 64)) { - return (x >> sh) + ((x >> (sh - 1)) & 1); - } else { - /* Rounding the sign bit always produces 0. */ - return 0; - } -} - DO_ZPZI(sve_asr_zpzi_b, int8_t, H1, DO_SHR) DO_ZPZI(sve_asr_zpzi_h, int16_t, H1_2, DO_SHR) DO_ZPZI(sve_asr_zpzi_s, int32_t, H1_4, DO_SHR) --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646795; cv=none; d=zohomail.com; s=zohoarc; b=lvMDjbJbNKYo4t49ixhNpC/k7YjpIKw7s1YIPZK3meyYfd4+RRJuYIuCAxJFur9sbfv2SfsThBjaKc0zrVsfpJ3aDQfVpYjm4zUPS4T0GDSxES6wTDUhV2j1y22CH2Eb/Mq7L9Df09m3bm83EezUwlqHzT0ywPy5dY0FUIKve3Y= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646795; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=8iaggyBiQQEYpRRob1rPyeF/le1RxN9aa/NPLvUojUQ=; b=dhBfpuRMUaSWDEc/0mVJDAJ4VtWsFR6htCOXtlZ26Bt7/US8254r63EaG9onN1ZOlXi4aWlhZZdTyhTUH5XPMTkbL2xMe+T/iAJiWbcFtyNWZOdgOX1gA8LFnXHX3hAl0VilWWJCJriVeVE4zq8GJgOMfPSw6XW3wwj/4j4VQB8= 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 1751646795582899.4103309879289; Fri, 4 Jul 2025 09:33:15 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjFS-0004Yx-Ep; Fri, 04 Jul 2025 12:26:50 -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 1uXjEx-0001qE-QP for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:20 -0400 Received: from mail-wm1-x330.google.com ([2a00:1450:4864:20::330]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjEv-0006jC-C4 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:19 -0400 Received: by mail-wm1-x330.google.com with SMTP id 5b1f17b1804b1-453608ed113so12311695e9.0 for ; Fri, 04 Jul 2025 09:26:16 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.26.15 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:26:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646376; x=1752251176; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=8iaggyBiQQEYpRRob1rPyeF/le1RxN9aa/NPLvUojUQ=; b=EUmGe/LsOiB6bH++m30KV7O9mXcAAYIB/ZY5I6Eg7YimP+L6j7EVXMI43bcx8L5Ib5 rGpXq5xg3gapA7Ce1bhqaaksiHxFTS0EwptASsJcPhT4dbU4K1Z+DB5WpsKa3PNiabkX iwgcQ56Qe31aXGfy8t2LEzNINn8ErH5EH09U6KgqKiePy0InIGeyE4DB6EnND831xioT 5ESefHmHhZSOR8Te0wJYTsIygVjlpRy5wzKEGlX9bmAbxBGSJ3GiF6PgC67x57rJW17S L32JErXf7syV2K5fhslnn31RcwJ7E+kzTZrpBayZvVRLBOhi/8npqKReYMuxEjxI9w9z HuEA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646376; x=1752251176; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=8iaggyBiQQEYpRRob1rPyeF/le1RxN9aa/NPLvUojUQ=; b=UgIcB3NghhVTSNgWrI0ie/tIa7XWxuwwAX/6HEWHkIsxFF40W8U5a3PN2aQiKvEo8x 9mdlXO+rx4VNVfI+ycmtOnW3T/gWxZdFnfaWx2iZ7Ekm5LIasMBvpqWQt1dB5oD2PLLk crN28JwlPXv+607lWHh/nCE2/fksb2hZLf0/cayrEQZGuM9ux3Tl1RqnAGilB8vzEw/s g/gB7CqiX6Itk//sg+hmrQ/1hedDhyMHviWgZ60sYuT48reYUtTST4eJ6h6zqjPAXIqe 71llg6RPIZZU1DXqxkhrtR49TBdaQkKQ0ZCixYIx6Uk3JHQxKwEr4b1wILE3G0wFC0L8 JVUw== X-Gm-Message-State: AOJu0YxPQXZ83rjxpmc5kdWd/PgzmKmH/v+okO+Qw7h0vRAwENgub5zx 8GBJIr+DLqAp8u7jVcLpfSlkWF7i2ZvE1GgRxiR5V5x9myI4YinY02TLnVcWzU3oOTh8B5+z/0x rYXJq X-Gm-Gg: ASbGncsd0uZ/LA39uf8AL5XaZJ42xvIhBMxIBePM1k9z1VkIQzxbdMESFR7qiTG/fro w2N+P9QItBcDa8To8MnM1rXibx+/SLjpSFb20whA3DYn+Zfyf6+hRKfbKX5KZmjVnND94QxeQRl HhzTT30ydT9fdINAV0jnj2UxoYA7QQoxU1C3rppDQepGb20v7OKNkE6HtgmSRdCnRCGjqrS9y8g NGOlETcTBkrgF3kV/5ywj/j7F9924UzL4zdPCVsF17RscF1pUpVd1n21WsImXU04nXAtmAaWNTE Dsu524iuF6VWStBXZ/a4VDwJuX06HjBmP1+It6s46waFT6aIwNXDcPfh1CPdy3nrUr+N X-Google-Smtp-Source: AGHT+IGR0/Rpk/o4q1DYX61KuSqcdev0RrpbnuN+D99CO7FUhXF8q8AB8ARb+T7/RNiyzRx2Q74tCA== X-Received: by 2002:a05:6000:4908:b0:3a5:2ec5:35a9 with SMTP id ffacd0b85a97d-3b4964f4e01mr2986457f8f.3.1751646375898; Fri, 04 Jul 2025 09:26:15 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 076/119] target/arm: Implement SME2 SQRSHR, UQRSHR, SQRSHRN Date: Fri, 4 Jul 2025 17:24:16 +0100 Message-ID: <20250704162501.249138-77-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::330; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x330.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751646797901116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell Message-id: 20250704142112.1018902-65-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/helper-sme.h | 20 ++++++ target/arm/tcg/sme.decode | 37 ++++++++++ target/arm/tcg/sme_helper.c | 120 +++++++++++++++++++++++++++++++++ target/arm/tcg/translate-sme.c | 33 +++++++++ 4 files changed, 210 insertions(+) diff --git a/target/arm/tcg/helper-sme.h b/target/arm/tcg/helper-sme.h index 7e21f1095a2..97428bcd6b8 100644 --- a/target/arm/tcg/helper-sme.h +++ b/target/arm/tcg/helper-sme.h @@ -266,3 +266,23 @@ DEF_HELPER_FLAGS_3(sme2_uzp4_h, TCG_CALL_NO_RWG, void,= ptr, ptr, i32) DEF_HELPER_FLAGS_3(sme2_uzp4_s, TCG_CALL_NO_RWG, void, ptr, ptr, i32) DEF_HELPER_FLAGS_3(sme2_uzp4_d, TCG_CALL_NO_RWG, void, ptr, ptr, i32) DEF_HELPER_FLAGS_3(sme2_uzp4_q, TCG_CALL_NO_RWG, void, ptr, ptr, i32) + +DEF_HELPER_FLAGS_3(sme2_sqrshr_sh, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2_uqrshr_sh, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2_sqrshru_sh, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2_sqrshr_sb, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2_uqrshr_sb, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2_sqrshru_sb, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2_sqrshr_dh, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2_uqrshr_dh, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2_sqrshru_dh, TCG_CALL_NO_RWG, void, ptr, ptr, i32) + +DEF_HELPER_FLAGS_3(sme2_sqrshrn_sh, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2_uqrshrn_sh, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2_sqrshrun_sh, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2_sqrshrn_sb, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2_uqrshrn_sb, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2_sqrshrun_sb, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2_sqrshrn_dh, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2_uqrshrn_dh, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2_sqrshrun_dh, TCG_CALL_NO_RWG, void, ptr, ptr, i32) diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 81783b4705c..05d513efbab 100644 --- a/target/arm/tcg/sme.decode +++ b/target/arm/tcg/sme.decode @@ -811,3 +811,40 @@ UZP_4 11000001 esz:2 1 10110 111000 ...00 ..= . 10 \ &zz_e zd=3D%zd_ax4 zn=3D%zn_ax4 UZP_4 11000001 001 10111 111000 ...00 ... 10 \ &zz_e esz=3D4 zd=3D%zd_ax4 zn=3D%zn_ax4 + +### SME2 Multi-vector SVE Constructive Binary + +&rshr zd zn shift + +%rshr_sh_shift 16:4 !function=3Drsub_16 +%rshr_sb_shift 16:5 !function=3Drsub_32 +%rshr_dh_shift 22:1 16:5 !function=3Drsub_64 + +@rshr_sh ........ .... .... ...... ..... zd:5 \ + &rshr zn=3D%zn_ax2 shift=3D%rshr_sh_shift +@rshr_sb ........ ... ..... ...... ..... zd:5 \ + &rshr zn=3D%zn_ax4 shift=3D%rshr_sb_shift +@rshr_dh ........ ... ..... ...... ..... zd:5 \ + &rshr zn=3D%zn_ax4 shift=3D%rshr_dh_shift + +SQRSHR_sh 11000001 1110 .... 110101 ....0 ..... @rshr_sh +UQRSHR_sh 11000001 1110 .... 110101 ....1 ..... @rshr_sh +SQRSHRU_sh 11000001 1111 .... 110101 ....0 ..... @rshr_sh + +SQRSHR_sb 11000001 011 ..... 110110 ...00 ..... @rshr_sb +SQRSHR_dh 11000001 1.1 ..... 110110 ...00 ..... @rshr_dh +UQRSHR_sb 11000001 011 ..... 110110 ...01 ..... @rshr_sb +UQRSHR_dh 11000001 1.1 ..... 110110 ...01 ..... @rshr_dh +SQRSHRU_sb 11000001 011 ..... 110110 ...10 ..... @rshr_sb +SQRSHRU_dh 11000001 1.1 ..... 110110 ...10 ..... @rshr_dh + +SQRSHRN_sh 01000101 1011 .... 001010 ....0 ..... @rshr_sh +UQRSHRN_sh 01000101 1011 .... 001110 ....0 ..... @rshr_sh +SQRSHRUN_sh 01000101 1011 .... 000010 ....0 ..... @rshr_sh + +SQRSHRN_sb 11000001 011 ..... 110111 ...00 ..... @rshr_sb +SQRSHRN_dh 11000001 1.1 ..... 110111 ...00 ..... @rshr_dh +UQRSHRN_sb 11000001 011 ..... 110111 ...01 ..... @rshr_sb +UQRSHRN_dh 11000001 1.1 ..... 110111 ...01 ..... @rshr_dh +SQRSHRUN_sb 11000001 011 ..... 110111 ...10 ..... @rshr_sb +SQRSHRUN_dh 11000001 1.1 ..... 110111 ...10 ..... @rshr_dh diff --git a/target/arm/tcg/sme_helper.c b/target/arm/tcg/sme_helper.c index 4a05fff5fe2..2e95fe38cdd 100644 --- a/target/arm/tcg/sme_helper.c +++ b/target/arm/tcg/sme_helper.c @@ -1626,6 +1626,66 @@ SQCVT4(sme2_sqcvtu_dh, int64_t, uint16_t, H8, H2, do= _usat_h) =20 #undef SQCVT4 =20 +#define SQRSHR2(NAME, TW, TN, HW, HN, RSHR, SAT) \ +void HELPER(NAME)(void *vd, void *vs, uint32_t desc) \ +{ \ + ARMVectorReg scratch; \ + size_t oprsz =3D simd_oprsz(desc), n =3D oprsz / sizeof(TW); \ + int shift =3D simd_data(desc); \ + TW *s0 =3D vs, *s1 =3D vs + sizeof(ARMVectorReg); \ + TN *d =3D vd; \ + if (vectors_overlap(vd, 1, vs, 2)) { \ + d =3D (TN *)&scratch; \ + } \ + for (size_t i =3D 0; i < n; ++i) { \ + d[HN(i)] =3D SAT(RSHR(s0[HW(i)], shift)); \ + d[HN(i + n)] =3D SAT(RSHR(s1[HW(i)], shift)); \ + } \ + if (d !=3D vd) { \ + memcpy(vd, d, oprsz); \ + } \ +} + +SQRSHR2(sme2_sqrshr_sh, int32_t, int16_t, H4, H2, do_srshr, do_ssat_h) +SQRSHR2(sme2_uqrshr_sh, uint32_t, uint16_t, H4, H2, do_urshr, do_usat_h) +SQRSHR2(sme2_sqrshru_sh, int32_t, uint16_t, H4, H2, do_srshr, do_usat_h) + +#undef SQRSHR2 + +#define SQRSHR4(NAME, TW, TN, HW, HN, RSHR, SAT) \ +void HELPER(NAME)(void *vd, void *vs, uint32_t desc) \ +{ \ + ARMVectorReg scratch; \ + size_t oprsz =3D simd_oprsz(desc), n =3D oprsz / sizeof(TW); \ + int shift =3D simd_data(desc); \ + TW *s0 =3D vs, *s1 =3D vs + sizeof(ARMVectorReg); \ + TW *s2 =3D vs + 2 * sizeof(ARMVectorReg); \ + TW *s3 =3D vs + 3 * sizeof(ARMVectorReg); \ + TN *d =3D vd; \ + if (vectors_overlap(vd, 1, vs, 4)) { \ + d =3D (TN *)&scratch; \ + } \ + for (size_t i =3D 0; i < n; ++i) { \ + d[HN(i)] =3D SAT(RSHR(s0[HW(i)], shift)); \ + d[HN(i + n)] =3D SAT(RSHR(s1[HW(i)], shift)); \ + d[HN(i + 2 * n)] =3D SAT(RSHR(s2[HW(i)], shift)); \ + d[HN(i + 3 * n)] =3D SAT(RSHR(s3[HW(i)], shift)); \ + } \ + if (d !=3D vd) { \ + memcpy(vd, d, oprsz); \ + } \ +} + +SQRSHR4(sme2_sqrshr_sb, int32_t, int8_t, H4, H2, do_srshr, do_ssat_b) +SQRSHR4(sme2_uqrshr_sb, uint32_t, uint8_t, H4, H2, do_urshr, do_usat_b) +SQRSHR4(sme2_sqrshru_sb, int32_t, uint8_t, H4, H2, do_srshr, do_usat_b) + +SQRSHR4(sme2_sqrshr_dh, int64_t, int16_t, H8, H2, do_srshr, do_ssat_h) +SQRSHR4(sme2_uqrshr_dh, uint64_t, uint16_t, H8, H2, do_urshr, do_usat_h) +SQRSHR4(sme2_sqrshru_dh, int64_t, uint16_t, H8, H2, do_srshr, do_usat_h) + +#undef SQRSHR4 + /* Convert and interleave */ void HELPER(sme2_bfcvtn)(void *vd, void *vs, float_status *fpst, uint32_t = desc) { @@ -1715,6 +1775,66 @@ SQCVTN4(sme2_sqcvtun_dh, int64_t, uint16_t, H8, H2, = do_usat_h) =20 #undef SQCVTN4 =20 +#define SQRSHRN2(NAME, TW, TN, HW, HN, RSHR, SAT) \ +void HELPER(NAME)(void *vd, void *vs, uint32_t desc) \ +{ \ + ARMVectorReg scratch; \ + size_t oprsz =3D simd_oprsz(desc), n =3D oprsz / sizeof(TW); \ + int shift =3D simd_data(desc); \ + TW *s0 =3D vs, *s1 =3D vs + sizeof(ARMVectorReg); \ + TN *d =3D vd; \ + if (vectors_overlap(vd, 1, vs, 2)) { \ + d =3D (TN *)&scratch; \ + } \ + for (size_t i =3D 0; i < n; ++i) { \ + d[HN(2 * i + 0)] =3D SAT(RSHR(s0[HW(i)], shift)); \ + d[HN(2 * i + 1)] =3D SAT(RSHR(s1[HW(i)], shift)); \ + } \ + if (d !=3D vd) { \ + memcpy(vd, d, oprsz); \ + } \ +} + +SQRSHRN2(sme2_sqrshrn_sh, int32_t, int16_t, H4, H2, do_srshr, do_ssat_h) +SQRSHRN2(sme2_uqrshrn_sh, uint32_t, uint16_t, H4, H2, do_urshr, do_usat_h) +SQRSHRN2(sme2_sqrshrun_sh, int32_t, uint16_t, H4, H2, do_srshr, do_usat_h) + +#undef SQRSHRN2 + +#define SQRSHRN4(NAME, TW, TN, HW, HN, RSHR, SAT) \ +void HELPER(NAME)(void *vd, void *vs, uint32_t desc) \ +{ \ + ARMVectorReg scratch; \ + size_t oprsz =3D simd_oprsz(desc), n =3D oprsz / sizeof(TW); \ + int shift =3D simd_data(desc); \ + TW *s0 =3D vs, *s1 =3D vs + sizeof(ARMVectorReg); \ + TW *s2 =3D vs + 2 * sizeof(ARMVectorReg); \ + TW *s3 =3D vs + 3 * sizeof(ARMVectorReg); \ + TN *d =3D vd; \ + if (vectors_overlap(vd, 1, vs, 4)) { \ + d =3D (TN *)&scratch; \ + } \ + for (size_t i =3D 0; i < n; ++i) { \ + d[HN(4 * i + 0)] =3D SAT(RSHR(s0[HW(i)], shift)); \ + d[HN(4 * i + 1)] =3D SAT(RSHR(s1[HW(i)], shift)); \ + d[HN(4 * i + 2)] =3D SAT(RSHR(s2[HW(i)], shift)); \ + d[HN(4 * i + 3)] =3D SAT(RSHR(s3[HW(i)], shift)); \ + } \ + if (d !=3D vd) { \ + memcpy(vd, d, oprsz); \ + } \ +} + +SQRSHRN4(sme2_sqrshrn_sb, int32_t, int8_t, H4, H1, do_srshr, do_ssat_b) +SQRSHRN4(sme2_uqrshrn_sb, uint32_t, uint8_t, H4, H1, do_urshr, do_usat_b) +SQRSHRN4(sme2_sqrshrun_sb, int32_t, uint8_t, H4, H1, do_srshr, do_usat_b) + +SQRSHRN4(sme2_sqrshrn_dh, int64_t, int16_t, H8, H2, do_srshr, do_ssat_h) +SQRSHRN4(sme2_uqrshrn_dh, uint64_t, uint16_t, H8, H2, do_urshr, do_usat_h) +SQRSHRN4(sme2_sqrshrun_dh, int64_t, uint16_t, H8, H2, do_srshr, do_usat_h) + +#undef SQRSHRN4 + /* Expand and convert */ void HELPER(sme2_fcvt_w)(void *vd, void *vs, float_status *fpst, uint32_t = desc) { diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index de9545ee6d9..d413efd20e7 100644 --- a/target/arm/tcg/translate-sme.c +++ b/target/arm/tcg/translate-sme.c @@ -1474,3 +1474,36 @@ static gen_helper_gvec_2 * const uzp4_fns[] =3D { gen_helper_sme2_uzp4_q, }; TRANS_FEAT(UZP_4, aa64_sme2, do_zipuzp_4, a, uzp4_fns) + +static bool do_zz_rshr(DisasContext *s, arg_rshr *a, gen_helper_gvec_2 *fn) +{ + if (sve_access_check(s)) { + int vl =3D vec_full_reg_size(s); + tcg_gen_gvec_2_ool(vec_full_reg_offset(s, a->zd), + vec_full_reg_offset(s, a->zn), + vl, vl, a->shift, fn); + } + return true; +} + +TRANS_FEAT(SQRSHR_sh, aa64_sme2, do_zz_rshr, a, gen_helper_sme2_sqrshr_sh) +TRANS_FEAT(UQRSHR_sh, aa64_sme2, do_zz_rshr, a, gen_helper_sme2_uqrshr_sh) +TRANS_FEAT(SQRSHRU_sh, aa64_sme2, do_zz_rshr, a, gen_helper_sme2_sqrshru_s= h) + +TRANS_FEAT(SQRSHR_sb, aa64_sme2, do_zz_rshr, a, gen_helper_sme2_sqrshr_sb) +TRANS_FEAT(SQRSHR_dh, aa64_sme2, do_zz_rshr, a, gen_helper_sme2_sqrshr_dh) +TRANS_FEAT(UQRSHR_sb, aa64_sme2, do_zz_rshr, a, gen_helper_sme2_uqrshr_sb) +TRANS_FEAT(UQRSHR_dh, aa64_sme2, do_zz_rshr, a, gen_helper_sme2_uqrshr_dh) +TRANS_FEAT(SQRSHRU_sb, aa64_sme2, do_zz_rshr, a, gen_helper_sme2_sqrshru_s= b) +TRANS_FEAT(SQRSHRU_dh, aa64_sme2, do_zz_rshr, a, gen_helper_sme2_sqrshru_d= h) + +TRANS_FEAT(SQRSHRN_sh, aa64_sme2_or_sve2p1, do_zz_rshr, a, gen_helper_sme2= _sqrshrn_sh) +TRANS_FEAT(UQRSHRN_sh, aa64_sme2_or_sve2p1, do_zz_rshr, a, gen_helper_sme2= _uqrshrn_sh) +TRANS_FEAT(SQRSHRUN_sh, aa64_sme2_or_sve2p1, do_zz_rshr, a, gen_helper_sme= 2_sqrshrun_sh) + +TRANS_FEAT(SQRSHRN_sb, aa64_sme2, do_zz_rshr, a, gen_helper_sme2_sqrshrn_s= b) +TRANS_FEAT(SQRSHRN_dh, aa64_sme2, do_zz_rshr, a, gen_helper_sme2_sqrshrn_d= h) +TRANS_FEAT(UQRSHRN_sb, aa64_sme2, do_zz_rshr, a, gen_helper_sme2_uqrshrn_s= b) +TRANS_FEAT(UQRSHRN_dh, aa64_sme2, do_zz_rshr, a, gen_helper_sme2_uqrshrn_d= h) +TRANS_FEAT(SQRSHRUN_sb, aa64_sme2, do_zz_rshr, a, gen_helper_sme2_sqrshrun= _sb) +TRANS_FEAT(SQRSHRUN_dh, aa64_sme2, do_zz_rshr, a, gen_helper_sme2_sqrshrun= _dh) --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647440; cv=none; d=zohomail.com; s=zohoarc; b=nQu90iPRwRgWOThIZVlXBy6zoy/hwBK6SLM4Z9J2g/W7ZOnSoICZXfQVWF7Vw8EWNWyL2mTI9eqMmwjVPSiFf1eLnKIRGrymgbK1UafiJbktX0d/NYM7hLcTmt8ni71frAfcoK3r7x3DwWub7d4iiwMP8BhP1JtyKaXItS4X03U= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647440; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=U4VfuSpPgh8eD33er9pcoaEe3eova8Wr5W+gc9STpFQ=; b=U9V14eabuJmyAvM0A/qn/BV7kkSv7UBTsuKo9iF7FXS/mqjiIie5f7lTK7m+RgrNn1GW5x7tWf/eDuT2363O2Yrl9AeFu9V+U+MiW9IRr8zyvKN6SmnCUQ16ob978EzWB6xSMbIzd/jAw0MXsiijuod4YTyRHCHZ44WdhoeGEZk= 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 175164744066658.522996038928454; Fri, 4 Jul 2025 09:44:00 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjFK-0003kV-BT; Fri, 04 Jul 2025 12:26:42 -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 1uXjF0-00020N-9s for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:23 -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 1uXjEw-0006oD-GO for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:20 -0400 Received: by mail-wm1-x331.google.com with SMTP id 5b1f17b1804b1-454ac069223so11372755e9.1 for ; Fri, 04 Jul 2025 09:26:18 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.26.16 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:26:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646377; x=1752251177; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=U4VfuSpPgh8eD33er9pcoaEe3eova8Wr5W+gc9STpFQ=; b=bR1TdP48IFHqXCUjKob5dm4r7uWvRALs9K4DGQVe5XtLcuaHfMZt3uMQ8qDAML1BYh 1uyDgWUQkvS7U6QFntmtdWUgx32Q/BADYdSWhr9wuUriO+oC6I5qvCPCCB9rCJC9oVA7 iVVwXGkNgQx2mQN534ebjm/rxJAkLHL9ePCpKRUpKM2I439QJdxRHYoWUfBJHvSh4Lbz p8NNaSvoz6XyprHI1nri+OPJ5AhSE/Sm0e+y4V+YywSi3D2E4EcW2We44eZ3O//muqs0 i2A9VqIHSFv6eyT+e4sxdbfjJPGyuoxQPIrwlA+l05C5LOAVTHooU3o3+POuLXa6g8Sc lrwg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646377; x=1752251177; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=U4VfuSpPgh8eD33er9pcoaEe3eova8Wr5W+gc9STpFQ=; b=pdd0PcxuzsrcczGzCOS7ei5WQ+ZhdAfJ5mW38B0YusqTdlmBWTAriT5FssYBEpOybM 2fpMDAK91axXfjMfiNee2XVLwmHHWUK1KnzzzAd/x+EobpXuon5+JT0s23AiFw4rk2OW UR9t7VNhEmxgMev+JsIejaXNyE737knzN89emOrFhtlddrw6ZOohDdGFjljIvqjBFUnd ox6VPmyjAB2fKSXHBBAshohmJ1sciik6qqr3dl1j74y3VKFcSB5Glxr41vbBRMC78112 qusmoI3YIfcfyEce+dXShT84dgyTn1LBmkrOAzfIN37dtafczdU3+bKiB+OvUZsiFtCx h1eA== X-Gm-Message-State: AOJu0YwRu9wK6KMOel3+6B74if2lX2CDe3uILWNEq0nFVDagUAyg/voV jiYzzpmC4Zejl0TSdEU3V7Vzkp3vsR+wFrzt1khinstiuU8odt4d12xadq0tqF7TKOCtIV63xzG 7D6Er X-Gm-Gg: ASbGncteVsObpq32KXgvz6cJRn5XTrIH7I8ucjwLjAWrtiZD+l9+Q5hLX9rRjX7lWDJ 2+fxiP2fmZEj6IUUatF6tKCjzchm9G5+AFbP55+rCcBarK1g8EghhYmpJ4Bz8fdfgWOa3GEcbw4 zlFrD3rmYMU4jLvWPqv10JrWFUm7p+ENzNOrL9abYV0UJ9xkRu/r7UZzWqpTrpy3ULvY/R7yiXX z4Hslb5Is+qYcxFEt1iEzxeNEImWKkzc9qxV8PGQPp1gtNvWGCh/LRhTWqoFDiqXt2Vy64cWmfz dmsi/h2XFtC5uYtO/ebRhr1LJwiSleyVVtUq0sE594cFFq80MXe3F2ZjI7Nb6X5m0r/Q X-Google-Smtp-Source: AGHT+IF4NKWJw8zYhl8FDuAsr454qC+lMjkBz3JzIbHYVwokjH2eQ97OBeru32hKzWq687vgip6bMg== X-Received: by 2002:a05:6000:64c:b0:3b4:9909:6fbd with SMTP id ffacd0b85a97d-3b499096ff9mr506351f8f.29.1751646376931; Fri, 04 Jul 2025 09:26:16 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 077/119] target/arm: Implement SME2 ZIP, UZP (two registers) Date: Fri, 4 Jul 2025 17:24:17 +0100 Message-ID: <20250704162501.249138-78-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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=peter.maydell@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 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: 1751647441155116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-66-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/helper-sme.h | 12 +++++++ target/arm/tcg/sme.decode | 12 +++++++ target/arm/tcg/sme_helper.c | 62 ++++++++++++++++++++++++++++++++++ target/arm/tcg/translate-sme.c | 40 ++++++++++++++++++++++ 4 files changed, 126 insertions(+) diff --git a/target/arm/tcg/helper-sme.h b/target/arm/tcg/helper-sme.h index 97428bcd6b8..06b95da3c38 100644 --- a/target/arm/tcg/helper-sme.h +++ b/target/arm/tcg/helper-sme.h @@ -255,6 +255,18 @@ DEF_HELPER_FLAGS_3(sme2_uunpk4_bh, TCG_CALL_NO_RWG, vo= id, ptr, ptr, i32) DEF_HELPER_FLAGS_3(sme2_uunpk4_hs, TCG_CALL_NO_RWG, void, ptr, ptr, i32) DEF_HELPER_FLAGS_3(sme2_uunpk4_sd, TCG_CALL_NO_RWG, void, ptr, ptr, i32) =20 +DEF_HELPER_FLAGS_4(sme2_zip2_b, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) +DEF_HELPER_FLAGS_4(sme2_zip2_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) +DEF_HELPER_FLAGS_4(sme2_zip2_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) +DEF_HELPER_FLAGS_4(sme2_zip2_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) +DEF_HELPER_FLAGS_4(sme2_zip2_q, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) + +DEF_HELPER_FLAGS_4(sme2_uzp2_b, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) +DEF_HELPER_FLAGS_4(sme2_uzp2_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) +DEF_HELPER_FLAGS_4(sme2_uzp2_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) +DEF_HELPER_FLAGS_4(sme2_uzp2_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) +DEF_HELPER_FLAGS_4(sme2_uzp2_q, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) + DEF_HELPER_FLAGS_3(sme2_zip4_b, TCG_CALL_NO_RWG, void, ptr, ptr, i32) DEF_HELPER_FLAGS_3(sme2_zip4_h, TCG_CALL_NO_RWG, void, ptr, ptr, i32) DEF_HELPER_FLAGS_3(sme2_zip4_s, TCG_CALL_NO_RWG, void, ptr, ptr, i32) diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 05d513efbab..c1f73d9f631 100644 --- a/target/arm/tcg/sme.decode +++ b/target/arm/tcg/sme.decode @@ -848,3 +848,15 @@ UQRSHRN_sb 11000001 011 ..... 110111 ...01 ..... = @rshr_sb UQRSHRN_dh 11000001 1.1 ..... 110111 ...01 ..... @rshr_dh SQRSHRUN_sb 11000001 011 ..... 110111 ...10 ..... @rshr_sb SQRSHRUN_dh 11000001 1.1 ..... 110111 ...10 ..... @rshr_dh + +&zzz_e zd zn zm esz + +ZIP_2 11000001 esz:2 1 zm:5 110100 zn:5 .... 0 \ + &zzz_e zd=3D%zd_ax2 +ZIP_2 11000001 00 1 zm:5 110101 zn:5 .... 0 \ + &zzz_e zd=3D%zd_ax2 esz=3D4 + +UZP_2 11000001 esz:2 1 zm:5 110100 zn:5 .... 1 \ + &zzz_e zd=3D%zd_ax2 +UZP_2 11000001 00 1 zm:5 110101 zn:5 .... 1 \ + &zzz_e zd=3D%zd_ax2 esz=3D4 diff --git a/target/arm/tcg/sme_helper.c b/target/arm/tcg/sme_helper.c index 2e95fe38cdd..cf0e655bdd8 100644 --- a/target/arm/tcg/sme_helper.c +++ b/target/arm/tcg/sme_helper.c @@ -1933,6 +1933,37 @@ void HELPER(sme2_ucvtf)(void *vd, void *vs, float_st= atus *fpst, uint32_t desc) } } =20 +#define ZIP2(NAME, TYPE, H) \ +void HELPER(NAME)(void *vd, void *vn, void *vm, uint32_t desc) \ +{ \ + ARMVectorReg scratch[2]; \ + size_t oprsz =3D simd_oprsz(desc); \ + size_t pairs =3D oprsz / (sizeof(TYPE) * 2); \ + TYPE *n =3D vn, *m =3D vm; \ + if (vectors_overlap(vd, 2, vn, 1)) { \ + n =3D memcpy(&scratch[0], vn, oprsz); \ + } \ + if (vectors_overlap(vd, 2, vm, 1)) { \ + m =3D memcpy(&scratch[1], vm, oprsz); \ + } \ + for (size_t r =3D 0; r < 2; ++r) { \ + TYPE *d =3D vd + r * sizeof(ARMVectorReg); \ + size_t base =3D r * pairs; \ + for (size_t p =3D 0; p < pairs; ++p) { \ + d[H(2 * p + 0)] =3D n[base + H(p)]; \ + d[H(2 * p + 1)] =3D m[base + H(p)]; \ + } \ + } \ +} + +ZIP2(sme2_zip2_b, uint8_t, H1) +ZIP2(sme2_zip2_h, uint16_t, H2) +ZIP2(sme2_zip2_s, uint32_t, H4) +ZIP2(sme2_zip2_d, uint64_t, ) +ZIP2(sme2_zip2_q, Int128, ) + +#undef ZIP2 + #define ZIP4(NAME, TYPE, H) \ void HELPER(NAME)(void *vd, void *vs, uint32_t desc) \ { \ @@ -1967,6 +1998,37 @@ ZIP4(sme2_zip4_q, Int128, ) =20 #undef ZIP4 =20 +#define UZP2(NAME, TYPE, H) \ +void HELPER(NAME)(void *vd, void *vn, void *vm, uint32_t desc) \ +{ \ + ARMVectorReg scratch[2]; \ + size_t oprsz =3D simd_oprsz(desc); \ + size_t pairs =3D oprsz / (sizeof(TYPE) * 2); \ + TYPE *d0 =3D vd, *d1 =3D vd + sizeof(ARMVectorReg); \ + if (vectors_overlap(vd, 2, vn, 1)) { \ + vn =3D memcpy(&scratch[0], vn, oprsz); \ + } \ + if (vectors_overlap(vd, 2, vm, 1)) { \ + vm =3D memcpy(&scratch[1], vm, oprsz); \ + } \ + for (size_t r =3D 0; r < 2; ++r) { \ + TYPE *s =3D r ? vm : vn; \ + size_t base =3D r * pairs; \ + for (size_t p =3D 0; p < pairs; ++p) { \ + d0[base + H(p)] =3D s[H(2 * p + 0)]; \ + d1[base + H(p)] =3D s[H(2 * p + 1)]; \ + } \ + } \ +} + +UZP2(sme2_uzp2_b, uint8_t, H1) +UZP2(sme2_uzp2_h, uint16_t, H2) +UZP2(sme2_uzp2_s, uint32_t, H4) +UZP2(sme2_uzp2_d, uint64_t, ) +UZP2(sme2_uzp2_q, Int128, ) + +#undef UZP2 + #define UZP4(NAME, TYPE, H) \ void HELPER(NAME)(void *vd, void *vs, uint32_t desc) \ { \ diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index d413efd20e7..d52ccf2ac55 100644 --- a/target/arm/tcg/translate-sme.c +++ b/target/arm/tcg/translate-sme.c @@ -1507,3 +1507,43 @@ TRANS_FEAT(UQRSHRN_sb, aa64_sme2, do_zz_rshr, a, gen= _helper_sme2_uqrshrn_sb) TRANS_FEAT(UQRSHRN_dh, aa64_sme2, do_zz_rshr, a, gen_helper_sme2_uqrshrn_d= h) TRANS_FEAT(SQRSHRUN_sb, aa64_sme2, do_zz_rshr, a, gen_helper_sme2_sqrshrun= _sb) TRANS_FEAT(SQRSHRUN_dh, aa64_sme2, do_zz_rshr, a, gen_helper_sme2_sqrshrun= _dh) + +static bool do_zipuzp_2(DisasContext *s, arg_zzz_e *a, + gen_helper_gvec_3 * const fn[5]) +{ + int bytes_per_op =3D 2 << a->esz; + + /* MO_128 can fail the size test. */ + if (s->max_svl < bytes_per_op) { + unallocated_encoding(s); + } else if (sme_sm_enabled_check(s)) { + int svl =3D streaming_vec_reg_size(s); + if (svl < bytes_per_op) { + unallocated_encoding(s); + } else { + tcg_gen_gvec_3_ool(vec_full_reg_offset(s, a->zd), + vec_full_reg_offset(s, a->zn), + vec_full_reg_offset(s, a->zm), + svl, svl, 0, fn[a->esz]); + } + } + return true; +} + +static gen_helper_gvec_3 * const zip2_fns[] =3D { + gen_helper_sme2_zip2_b, + gen_helper_sme2_zip2_h, + gen_helper_sme2_zip2_s, + gen_helper_sme2_zip2_d, + gen_helper_sme2_zip2_q, +}; +TRANS_FEAT(ZIP_2, aa64_sme2, do_zipuzp_2, a, zip2_fns) + +static gen_helper_gvec_3 * const uzp2_fns[] =3D { + gen_helper_sme2_uzp2_b, + gen_helper_sme2_uzp2_h, + gen_helper_sme2_uzp2_s, + gen_helper_sme2_uzp2_d, + gen_helper_sme2_uzp2_q, +}; +TRANS_FEAT(UZP_2, aa64_sme2, do_zipuzp_2, a, uzp2_fns) --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646821; cv=none; d=zohomail.com; s=zohoarc; b=l4N8fF/X5SStcXxKe/9/lcnSZQTkvu0D9ydKEKnq+k5s6keFKONnkc4p4zD002+KE6avNEvfYYX2KaQvRuLhXATYXbFv62iLxBciCOoJyu+WbXAXj7yWo4oHHBmfCEPuhvxNROepeyWPE/kC9bsjrch9uVlThWEdcFAHt4lB4Ko= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646821; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=YPrXkwC0VL9BF9YYIho8TZ/yyhMUTGAPJG9+vyynk9Y=; b=GJ52Qqh2bNtq5fOGtyJO6x3dF9LQ/bg6OaW+xIg4bfNWJ0MbPwKKHabPiFByGlcYttiOxe80s97BlVQhaROpMfiFEajTRWI157LQdkVQkZ0hprgEqpHmu7cWXK+Hrij9kI9KaTZKksdaFK9wWnF2rcRoyzvDDEjktnZ0Hk5ZDww= 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 1751646821910175.76269208393342; Fri, 4 Jul 2025 09:33:41 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjFJ-0003aM-2O; Fri, 04 Jul 2025 12:26:41 -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 1uXjF0-00020M-9C for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:23 -0400 Received: from mail-wr1-x435.google.com ([2a00:1450:4864:20::435]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjEx-0006oN-FZ for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:21 -0400 Received: by mail-wr1-x435.google.com with SMTP id ffacd0b85a97d-3a6cd1a6fecso1019502f8f.3 for ; Fri, 04 Jul 2025 09:26:18 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.26.17 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:26:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646378; x=1752251178; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=YPrXkwC0VL9BF9YYIho8TZ/yyhMUTGAPJG9+vyynk9Y=; b=Nt8Mih9Sdzb9Kvs41TOWVrPn8vbHqoVkmspymlhac3JyCrth7HAAF5oiG0vHGlll8c svy6gBRnjbWCc0PYd4QIKHNsbQnbJRX2amlHmOpQHEa2EjtpUH4XIkLL/sSJq+Dh2E0L oB22Cwn7UEGY7zoPUIXWmoCqHrfBs47ZiqWrLpXlbw7rdM44CGCPUZzGeu9QbBPg52cB DrmiHEmUlMm4QH5xmhKxM+D3lYLu3SGYZyylNg4uw9Y9o7tcsL6wSMG58tMnPFrIxKV0 MsDAM+f9Y1jRlCeVNHrJCs1zsr7yzwZHUcIVb12f6tbo00TCq5TEPfU62LbGE+sQ0CCK DxOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646378; x=1752251178; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=YPrXkwC0VL9BF9YYIho8TZ/yyhMUTGAPJG9+vyynk9Y=; b=JZ50bCcDenfMDVfOfvNDHIwipsD/fijNp+uwenCglH2/A2bG/aMZZCyGrdjrBohazz UE81DTv/CpTi2yZUruxUxm00fxE9YJ7RtCeTPSCZBXtKU6+8RmxdWSCf9v3W7gpcIfr6 xsGV74vspPe6qpJUf9IUvps3N/YP0UNV2KzpsGkhM3U6zBxY2I8cYmDAu11aiSQzpub+ OcHtKlGZcLd4O/z3h6GQPcAAXgzC9XcQuRw1JtZHTldtXN4fX4uUhBX9BoJwXs5XUaQC IFLpG01khIhT8tQnmpDxBhRhIKwKzJriOSRkzhfFpp6aT5LoO5j487RPQ/kzO+9LGpom q0Aw== X-Gm-Message-State: AOJu0YwjlWaA/nsg7izozeyvF83lIxrEb0+/Bl9AGwuOmwNkC+/Z+jVf XE+Md8SAlQR4tOO4a5MK7/9bmHGYZgi8NahR6jETEYd/VrHxq/NDic0xg30VvvBxzfEv2ks6MsK Wp7hz X-Gm-Gg: ASbGncuO8IBcrLAKQ4qf9m0xOVAqmzHy+SSbg3Qtl8l81PslcUVsC+B5UEE8a0fmbEh 5TXR6ngnh9W73bHYUft9V8d6duHdx6Jsp174uTs8YL+++DPEvODJoYYgrbNMm6hN3GuTYCFtfZa BsQpTHVJtCfGrK9Xzn8fB0WxzP9SG1IJxzTuvNa5iclvlYbcq4iPhpxra4rE0kJHLWn7YZcbQxP QNYMRPVKebRBqZLyhSmKkE4RDppHmVVQZbOt3YvBnga6v0Hz0b9mu+jWUPneIMpVWBNtK5aOVii qxA+pNBl3RhOa6S3cXuawFmx95RJYeOEWpvBNK4NHQxIdC1LJA+ZgARhGEoz5sH8zoKp X-Google-Smtp-Source: AGHT+IEyvxFza/kNsHtQ1LLlKiNWZtfr0x6JrX0qJ6776qiVet/cR5nHw0hKa9DLEpSliSIiEVbn0g== X-Received: by 2002:a5d:400e:0:b0:3a5:2599:4163 with SMTP id ffacd0b85a97d-3b496604cdcmr2563886f8f.47.1751646377934; Fri, 04 Jul 2025 09:26:17 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 078/119] target/arm: Implement SME2 FCLAMP, SCLAMP, UCLAMP Date: Fri, 4 Jul 2025 17:24:18 +0100 Message-ID: <20250704162501.249138-79-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::435; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x435.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751646823960116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-67-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/helper-sme.h | 15 +++++++ target/arm/tcg/sme.decode | 17 ++++++++ target/arm/tcg/sme_helper.c | 56 +++++++++++++++++++++++++ target/arm/tcg/translate-sme.c | 75 ++++++++++++++++++++++++++++++++++ 4 files changed, 163 insertions(+) diff --git a/target/arm/tcg/helper-sme.h b/target/arm/tcg/helper-sme.h index 06b95da3c38..78ba3d1f20b 100644 --- a/target/arm/tcg/helper-sme.h +++ b/target/arm/tcg/helper-sme.h @@ -298,3 +298,18 @@ DEF_HELPER_FLAGS_3(sme2_sqrshrun_sb, TCG_CALL_NO_RWG, = void, ptr, ptr, i32) DEF_HELPER_FLAGS_3(sme2_sqrshrn_dh, TCG_CALL_NO_RWG, void, ptr, ptr, i32) DEF_HELPER_FLAGS_3(sme2_uqrshrn_dh, TCG_CALL_NO_RWG, void, ptr, ptr, i32) DEF_HELPER_FLAGS_3(sme2_sqrshrun_dh, TCG_CALL_NO_RWG, void, ptr, ptr, i32) + +DEF_HELPER_FLAGS_4(sme2_sclamp_b, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i3= 2) +DEF_HELPER_FLAGS_4(sme2_sclamp_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i3= 2) +DEF_HELPER_FLAGS_4(sme2_sclamp_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i3= 2) +DEF_HELPER_FLAGS_4(sme2_sclamp_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i3= 2) + +DEF_HELPER_FLAGS_4(sme2_uclamp_b, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i3= 2) +DEF_HELPER_FLAGS_4(sme2_uclamp_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i3= 2) +DEF_HELPER_FLAGS_4(sme2_uclamp_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i3= 2) +DEF_HELPER_FLAGS_4(sme2_uclamp_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i3= 2) + +DEF_HELPER_FLAGS_5(sme2_fclamp_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, fp= st, i32) +DEF_HELPER_FLAGS_5(sme2_fclamp_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, fp= st, i32) +DEF_HELPER_FLAGS_5(sme2_fclamp_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, fp= st, i32) +DEF_HELPER_FLAGS_5(sme2_bfclamp, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, fps= t, i32) diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index c1f73d9f631..47adcb5a154 100644 --- a/target/arm/tcg/sme.decode +++ b/target/arm/tcg/sme.decode @@ -860,3 +860,20 @@ UZP_2 11000001 esz:2 1 zm:5 110100 zn:5 ....= 1 \ &zzz_e zd=3D%zd_ax2 UZP_2 11000001 00 1 zm:5 110101 zn:5 .... 1 \ &zzz_e zd=3D%zd_ax2 esz=3D4 + +&zzz_en zd zn zm esz n + +FCLAMP 11000001 esz:2 1 zm:5 110000 zn:5 .... 0 \ + &zzz_en zd=3D%zd_ax2 n=3D2 +FCLAMP 11000001 esz:2 1 zm:5 110010 zn:5 ...0 0 \ + &zzz_en zd=3D%zd_ax4 n=3D4 + +SCLAMP 11000001 esz:2 1 zm:5 110001 zn:5 .... 0 \ + &zzz_en zd=3D%zd_ax2 n=3D2 +SCLAMP 11000001 esz:2 1 zm:5 110011 zn:5 ...0 0 \ + &zzz_en zd=3D%zd_ax4 n=3D4 + +UCLAMP 11000001 esz:2 1 zm:5 110001 zn:5 .... 1 \ + &zzz_en zd=3D%zd_ax2 n=3D2 +UCLAMP 11000001 esz:2 1 zm:5 110011 zn:5 ...0 1 \ + &zzz_en zd=3D%zd_ax4 n=3D4 diff --git a/target/arm/tcg/sme_helper.c b/target/arm/tcg/sme_helper.c index cf0e655bdd8..8a1f9fbf3df 100644 --- a/target/arm/tcg/sme_helper.c +++ b/target/arm/tcg/sme_helper.c @@ -2062,3 +2062,59 @@ UZP4(sme2_uzp4_d, uint64_t, ) UZP4(sme2_uzp4_q, Int128, ) =20 #undef UZP4 + +#define ICLAMP(NAME, TYPE, H) \ +void HELPER(NAME)(void *vd, void *vn, void *vm, uint32_t desc) \ +{ \ + size_t stride =3D sizeof(ARMVectorReg) / sizeof(TYPE); \ + size_t elements =3D simd_oprsz(desc) / sizeof(TYPE); \ + size_t nreg =3D simd_data(desc); \ + TYPE *d =3D vd, *n =3D vn, *m =3D vm; \ + for (size_t e =3D 0; e < elements; e++) { \ + TYPE nn =3D n[H(e)], mm =3D m[H(e)]; \ + for (size_t r =3D 0; r < nreg; r++) { \ + TYPE *dd =3D &d[r * stride + H(e)]; \ + *dd =3D MIN(MAX(*dd, nn), mm); \ + } \ + } \ +} + +ICLAMP(sme2_sclamp_b, int8_t, H1) +ICLAMP(sme2_sclamp_h, int16_t, H2) +ICLAMP(sme2_sclamp_s, int32_t, H4) +ICLAMP(sme2_sclamp_d, int64_t, H8) + +ICLAMP(sme2_uclamp_b, uint8_t, H1) +ICLAMP(sme2_uclamp_h, uint16_t, H2) +ICLAMP(sme2_uclamp_s, uint32_t, H4) +ICLAMP(sme2_uclamp_d, uint64_t, H8) + +#undef ICLAMP + +/* + * Note the argument ordering to minnum and maxnum must match + * the ARM pseudocode so that NaNs are propagated properly. + */ +#define FCLAMP(NAME, TYPE, H) \ +void HELPER(NAME)(void *vd, void *vn, void *vm, \ + float_status *fpst, uint32_t desc) \ +{ \ + size_t stride =3D sizeof(ARMVectorReg) / sizeof(TYPE); \ + size_t elements =3D simd_oprsz(desc) / sizeof(TYPE); \ + size_t nreg =3D simd_data(desc); \ + TYPE *d =3D vd, *n =3D vn, *m =3D vm; \ + for (size_t e =3D 0; e < elements; e++) { \ + TYPE nn =3D n[H(e)], mm =3D m[H(e)]; \ + for (size_t r =3D 0; r < nreg; r++) { \ + TYPE *dd =3D &d[r * stride + H(e)]; \ + *dd =3D TYPE##_minnum(TYPE##_maxnum(nn, *dd, fpst), mm, fpst);= \ + } \ + } \ +} + +FCLAMP(sme2_fclamp_h, float16, H2) +FCLAMP(sme2_fclamp_s, float32, H4) +FCLAMP(sme2_fclamp_d, float64, H8) +FCLAMP(sme2_bfclamp, bfloat16, H2) + +#undef FCLAMP diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index d52ccf2ac55..99e4056316a 100644 --- a/target/arm/tcg/translate-sme.c +++ b/target/arm/tcg/translate-sme.c @@ -1547,3 +1547,78 @@ static gen_helper_gvec_3 * const uzp2_fns[] =3D { gen_helper_sme2_uzp2_q, }; TRANS_FEAT(UZP_2, aa64_sme2, do_zipuzp_2, a, uzp2_fns) + +static bool trans_FCLAMP(DisasContext *s, arg_zzz_en *a) +{ + static gen_helper_gvec_3_ptr * const fn[] =3D { + gen_helper_sme2_bfclamp, + gen_helper_sme2_fclamp_h, + gen_helper_sme2_fclamp_s, + gen_helper_sme2_fclamp_d, + }; + TCGv_ptr fpst; + int vl; + + if (!dc_isar_feature(aa64_sme2, s)) { + return false; + } + /* This insn uses MO_8 to encode BFloat16. */ + if (a->esz =3D=3D MO_8 && !dc_isar_feature(aa64_sme_b16b16, s)) { + return false; + } + if (!sme_sm_enabled_check(s)) { + return true; + } + + fpst =3D fpstatus_ptr(a->esz =3D=3D MO_16 ? FPST_A64_F16 : FPST_A64); + vl =3D vec_full_reg_size(s); + + tcg_gen_gvec_3_ptr(vec_full_reg_offset(s, a->zd), + vec_full_reg_offset(s, a->zn), + vec_full_reg_offset(s, a->zm), + fpst, vl, vl, a->n, fn[a->esz]); + return true; +} + +static bool do_clamp(DisasContext *s, arg_zzz_en *a, + gen_helper_gvec_3 * const fn[4]) +{ + int vl; + + if (!dc_isar_feature(aa64_sme2, s)) { + return false; + } + if (!sme_sm_enabled_check(s)) { + return true; + } + + /* + * Clamp is just a min+max, easily supported by most host + * vector operations -- we already have such an expansion in + * translate-sve.c for a single output. + * TODO: Add support in gvec for multiple simultaneous output, + * and/or copy to temporary upon overlap. + */ + vl =3D vec_full_reg_size(s); + tcg_gen_gvec_3_ool(vec_full_reg_offset(s, a->zd), + vec_full_reg_offset(s, a->zn), + vec_full_reg_offset(s, a->zm), + vl, vl, a->n, fn[a->esz]); + return true; +} + +static gen_helper_gvec_3 * const sclamp_fns[] =3D { + gen_helper_sme2_sclamp_b, + gen_helper_sme2_sclamp_h, + gen_helper_sme2_sclamp_s, + gen_helper_sme2_sclamp_d, +}; +TRANS(SCLAMP, do_clamp, a, sclamp_fns) + +static gen_helper_gvec_3 * const uclamp_fns[] =3D { + gen_helper_sme2_uclamp_b, + gen_helper_sme2_uclamp_h, + gen_helper_sme2_uclamp_s, + gen_helper_sme2_uclamp_d, +}; +TRANS(UCLAMP, do_clamp, a, uclamp_fns) --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646825; cv=none; d=zohomail.com; s=zohoarc; b=TiMHAAnYgCe1QJkKxXEUjG+J+gXbHCGYzlncU8F8XQ7G5THa+6lTCvLF3dDr1MTVGj/1Sal01Rq4oftzZRvqqvYfI2hE/LpAqqL0rfxMyCK6eRsEoi0baZpCvVCrLBT9Afzh3CJ9y+wm+SmWSRYopq+EfFKF6Os33wx9ey/Cv5M= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646825; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=uvLxwbCupAK+3EpFNB3NftRQL8haeiWoSId0SmdVDeU=; b=G+YOiMKobNn9tdw2GDLhkUfcqrDt8yI7nE69IV8Rp75JP37rjsteYi4Z18HXXH10o7QsUo3buPPnQBJzAA24mONm/6bddWziQV5A2WIHMbWTPPh5a/It977QkNnNXdynGMZBE8eketxZNMj3AtltaHcHXiyHPM5Mpps4Ck0G3ik= 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 1751646825694772.5820022433122; Fri, 4 Jul 2025 09:33:45 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjFG-0003J5-IX; Fri, 04 Jul 2025 12:26:38 -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 1uXjF1-00020U-DE for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:23 -0400 Received: from mail-wr1-x430.google.com ([2a00:1450:4864:20::430]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjEz-0006ot-02 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:23 -0400 Received: by mail-wr1-x430.google.com with SMTP id ffacd0b85a97d-3a4ef2c2ef3so920277f8f.2 for ; Fri, 04 Jul 2025 09:26:20 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.26.18 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:26:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646379; x=1752251179; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=uvLxwbCupAK+3EpFNB3NftRQL8haeiWoSId0SmdVDeU=; b=UcU848pnLrEE3fihTRBf9panIgCN2wZonA16LYnVO3+Bw80vL5PlUY4YkULTE0QFVd bhkI2+PE2gKVNS3P/fGHCSqPzFxD+H8Z9sqytHacZIfmyQapH3K2J5VdDkE5ZsJ1hLqN pfy2btNvfGtzHD8jXuIkcEBSQbljMXUnNFLAiZ5JH2H15NgQltXm3ntIT6vjY6a//ohh PzjauEV8iwYEmVGeYQ7wzeLjtdOlVVGsK2venLionfRXWeK5qUmSuRlp6wHSPoAiKA4o nm/EI5ImCzxodPLpDcqHxY5cvxn3lVCT/wuhq1XqjnhFKK5i1qCikbIdZK8quBlEHP4N MVLw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646379; x=1752251179; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=uvLxwbCupAK+3EpFNB3NftRQL8haeiWoSId0SmdVDeU=; b=UVfuSuDqfceKbeWVm+tCpLlJonf/QMMixnwXxECaNh0RBEr6aiSbFX9DULnuVSWhXT QGOkVqPSJWK185l2J7oL3DJYruIISAP0RzBdlXJ1BlUyH13yZSCiScXhfMStoC4Bno1h T/S4fpCSe73W9bmlc9j0dOs105tepwlVA2gDxWgS4s0o7b4+zyjQ71zL6WWlnAxxdZ7f Vor7hPpIzwlJngJ5c2W2IxMz0aANEi/zMwmJ0htD1LYTDNoaXDKoe0X6kNIXg/k0vIKP AA3K53+/RZ95LhYY01uqLvG9lJQdQHWGXaJAoIlyYW205G1Ff+RrHqJUcTt6JsQUET0s BU0Q== X-Gm-Message-State: AOJu0Ywlbte6b4hy7oS5KX9pMApZ32JV2csiGyBLQ3xX5PTyB523Bepb eVqd5nURtwt9juSs4qqYPjDGxRRrNpA39mxWzZjw5t1tqR7F4SCLUE8xMlHNiVNoeOPc5wpPLwJ J9N/P X-Gm-Gg: ASbGnct0a0WEw+KGR+BhGTH83x35nuVMfq9K9UPpk/SpnRPn34L/y+PyxXQR0olp4AR dOzWWpPSDUzm2LI0FodoDldpF7JB4FLbbnMwA6JiWRbygYRIw7nLjq2WdC5KRfoDmARIVWgP26Y Ag9fof+tw7VXgIoi11c1PylVQ9KF6LruGXgDb2FkGv3SSkgGvN5O826QIXUc+SRR+lekFypfwfj kdEDgiD8b6cu0424Ek8nfJjfdkDU2DbmvbfQctyTMqcomQeBa+11M63B7JP30MiE51l96XKodUG lCc92j6ghRplJaeIJPSeWvoIq4EkTy76xlOOOr7DewLQj3N7k1N5hTMv+B0a4eN71S8P X-Google-Smtp-Source: AGHT+IHQAqTgbwWDp8Z7XS4nqu9GKSB8hoRs9/ejATyEpimLzqrnoH3QBNUvpUpP9niBCrMu4y7WkA== X-Received: by 2002:a5d:5f87:0:b0:3a4:ebc4:45a9 with SMTP id ffacd0b85a97d-3b49700f171mr2069133f8f.19.1751646378772; Fri, 04 Jul 2025 09:26:18 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 079/119] target/arm: Enable SCLAMP, UCLAMP for SVE2p1 Date: Fri, 4 Jul 2025 17:24:19 +0100 Message-ID: <20250704162501.249138-80-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::430; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x430.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751646827957116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson These instructions are present in both SME(1) and SVE2.1 extensions. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-68-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/translate-sve.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/target/arm/tcg/translate-sve.c b/target/arm/tcg/translate-sve.c index ac4dc7db461..ff70bf27b01 100644 --- a/target/arm/tcg/translate-sve.c +++ b/target/arm/tcg/translate-sve.c @@ -7375,7 +7375,7 @@ static void gen_sclamp(unsigned vece, uint32_t d, uin= t32_t n, uint32_t m, tcg_gen_gvec_4(d, n, m, a, oprsz, maxsz, &ops[vece]); } =20 -TRANS_FEAT(SCLAMP, aa64_sme, gen_gvec_fn_arg_zzzz, gen_sclamp, a) +TRANS_FEAT(SCLAMP, aa64_sme_or_sve2p1, gen_gvec_fn_arg_zzzz, gen_sclamp, a) =20 static void gen_uclamp_i32(TCGv_i32 d, TCGv_i32 n, TCGv_i32 m, TCGv_i32 a) { @@ -7426,7 +7426,7 @@ static void gen_uclamp(unsigned vece, uint32_t d, uin= t32_t n, uint32_t m, tcg_gen_gvec_4(d, n, m, a, oprsz, maxsz, &ops[vece]); } =20 -TRANS_FEAT(UCLAMP, aa64_sme, gen_gvec_fn_arg_zzzz, gen_uclamp, a) +TRANS_FEAT(UCLAMP, aa64_sme_or_sve2p1, gen_gvec_fn_arg_zzzz, gen_uclamp, a) =20 TRANS_FEAT(SQCVTN_sh, aa64_sme2_or_sve2p1, gen_gvec_ool_zz, gen_helper_sme2_sqcvtn_sh, a->rd, a->rn, 0) --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647393; cv=none; d=zohomail.com; s=zohoarc; b=f8t04eQz/LdbT0DIWeaX3siofneA4UoK+yhyvQfcUsfylTKD70Wxrs5rioOru/ol3uy6NZi3GV0rwEuui+B6bQfNpfmttSnCw25aNHX48SSb2xwuMjT9q95mhZv0RnvKr/EW0x84O7zjmykH+ylsuE26PnghUSFhf3EYuYCi4VA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647393; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=tKJmOi8JIELs9nFIES4n77wMUkUOzcX9wYUgkpVU5JU=; b=F7oeWexGtOLO57Ma3I+MoBY1my0eTadBGVBbX60LZE6RNPwCOOx1sXN689HamwsSoPNA4fkzfQgRfawdg9AZUIBXYc1aoqEWDfdAE7NagWenIUeIImy7vNMZNQiqMXUzSRWBEY+P/ULCKeXM8+4e6BXyah2muf6tbY9YwetQ1X0= 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 1751647393431599.3987171493488; Fri, 4 Jul 2025 09:43:13 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjFX-00056Y-4b; Fri, 04 Jul 2025 12:26:55 -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 1uXjF2-0002AK-Tu for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:26 -0400 Received: from mail-wr1-x429.google.com ([2a00:1450:4864:20::429]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjF0-0006p3-1n for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:24 -0400 Received: by mail-wr1-x429.google.com with SMTP id ffacd0b85a97d-3a50fc7ac4dso508956f8f.0 for ; Fri, 04 Jul 2025 09:26:20 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.26.18 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:26:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646380; x=1752251180; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=tKJmOi8JIELs9nFIES4n77wMUkUOzcX9wYUgkpVU5JU=; b=VWnVW3YlAs1FR0lBHysmt6ooUSmon1qcc1RZSJGN6sRhSpTG6Fb/Vpmtj9qpj805HD Wpfttf2APs3gmcvnu3VjmZvOMf89Pzmh6u6Wd+jO6+aX9Ouq/pV/49voc0h5poW7XDWk d0ukle7IKK1nqv+Ul9zj/hClR+Phi2E5TBuxE50fw5/WQK1HpsClBVO8J3neGGfzIGCt yHFuWSPjt9l30JyWXdTgGWBdGbVYyiqHTgkxW3mkdwsvz4vNs0y9OFti/h2/OKwKGCb0 Lkj7GuEK1H5mVwypUVEfH6pAc6C/gftCPHjxT1Iz784U4TANLIAI9nMQCItxxnjHX+6K AHHA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646380; x=1752251180; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=tKJmOi8JIELs9nFIES4n77wMUkUOzcX9wYUgkpVU5JU=; b=Wio7W3nIKyBsbzhdJ0cmNcLKlV7SlaSWzZ8yn7HWAJHhqEIxhQF9q/3kQBKsu+YFVY RAHpjWTs7m7GfsGqMyCpAXETln85nV2oo/FMBgFPSenJHyLt+ouHZhXDzoFW96UUf4qW v7IhhOTzTdTfiiC5O3ubCiOFqVyYNCKKwdhJuhlL5imAzM12mNMLlqDj/z+DcRhosSnU PmYLauA7RGQ5c9pbJeyijVSv7bqc+mOnyFoisJDasKVZc70KxZ89TuFAa+xgVb4nsC6b 3lJRLPzk/DWRNQYVSaaRK8EfTmvFCt9UqvsfMshFRzEySwqBtmKnCrz459n6cz4yiXD1 o8qQ== X-Gm-Message-State: AOJu0YxzvDEyW8nReU9811C2utlmc/XSZNKnheIFHlnmrzkLUm0AsxlO 0GRZKcVTQBgGbn8brozogp3tLm+eYtl9bCVWL7TtqIk9l5J5wdef7vpN3UbkRQU/Tf0boWOpTDg EbFc3 X-Gm-Gg: ASbGncsFM7a0hfASJO/KxHJj5HIn2VtcxAKs3Hyb0ycoRhA8/tZobcuKEh1ppyNz4Sj CYUmRmxFzIcu2/zJMk5zgxylQAPnkuARGmlCMiYavRMOvfw6JH6hp4NJyXgLayKIoOHFPeYDeII 3Qh0MGgKAIT8FaIMjHFgR9lw1/mK6IaVafRfihblobhpQg84c5odSiIMrR6rcDeihnFJxY1jOqy aQT/Srk8PNYu5AbAtpQx3H0uQy31AECFmc1VowXn692SrUqyAAiUnNycGS1/OFMnSKwOK5IkJ4g rXH3ZCarK4NFVlth+RQyRp5X82uMbX/C401okwaP0kNGzK9/OZvUvYCxg2fq3IMgt2Q3 X-Google-Smtp-Source: AGHT+IGr818dYk9+Lt8mE8hc0jSs+bnzrTEJDa3ZyWQwaSlb48dJmHqDhjc7GvvcVVDvh5HpS4ODjQ== X-Received: by 2002:a05:6000:40cb:b0:3a4:d939:62f8 with SMTP id ffacd0b85a97d-3b4964f1ddcmr2689933f8f.32.1751646379645; Fri, 04 Jul 2025 09:26:19 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 080/119] target/arm: Implement FCLAMP for SME2, SVE2p1 Date: Fri, 4 Jul 2025 17:24:20 +0100 Message-ID: <20250704162501.249138-81-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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::429; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x429.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751647395055116600 From: Richard Henderson This is the single vector version within SVE decode space. Tested-by: Alex Benn=C3=A9e Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-69-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/sve.decode | 2 ++ target/arm/tcg/translate-sve.c | 22 ++++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/target/arm/tcg/sve.decode b/target/arm/tcg/sve.decode index f808362f239..dcfc40ef44b 100644 --- a/target/arm/tcg/sve.decode +++ b/target/arm/tcg/sve.decode @@ -1721,3 +1721,5 @@ PSEL 00100101 .1 1 000 .. 01 .... 0 .... 0= .... \ =20 SCLAMP 01000100 .. 0 ..... 110000 ..... ..... @rda_rn_rm UCLAMP 01000100 .. 0 ..... 110001 ..... ..... @rda_rn_rm + +FCLAMP 01100100 .. 1 ..... 001001 ..... ..... @rda_rn_rm diff --git a/target/arm/tcg/translate-sve.c b/target/arm/tcg/translate-sve.c index ff70bf27b01..210a029ab84 100644 --- a/target/arm/tcg/translate-sve.c +++ b/target/arm/tcg/translate-sve.c @@ -7428,6 +7428,28 @@ static void gen_uclamp(unsigned vece, uint32_t d, ui= nt32_t n, uint32_t m, =20 TRANS_FEAT(UCLAMP, aa64_sme_or_sve2p1, gen_gvec_fn_arg_zzzz, gen_uclamp, a) =20 +static bool trans_FCLAMP(DisasContext *s, arg_FCLAMP *a) +{ + static gen_helper_gvec_3_ptr * const fn[] =3D { + gen_helper_sme2_bfclamp, + gen_helper_sme2_fclamp_h, + gen_helper_sme2_fclamp_s, + gen_helper_sme2_fclamp_d, + }; + + /* This insn uses MO_8 to encode BFloat16. */ + if (a->esz =3D=3D MO_8 + ? !dc_isar_feature(aa64_sve_b16b16, s) + : !dc_isar_feature(aa64_sme2_or_sve2p1, s)) { + return false; + } + + /* So far we never optimize rda with MOVPRFX */ + assert(a->rd =3D=3D a->ra); + return gen_gvec_fpst_zzz(s, fn[a->esz], a->rd, a->rn, a->rm, 1, + a->esz =3D=3D MO_16 ? FPST_A64_F16 : FPST_A64= ); +} + TRANS_FEAT(SQCVTN_sh, aa64_sme2_or_sve2p1, gen_gvec_ool_zz, gen_helper_sme2_sqcvtn_sh, a->rd, a->rn, 0) TRANS_FEAT(UQCVTN_sh, aa64_sme2_or_sve2p1, gen_gvec_ool_zz, --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646980; cv=none; d=zohomail.com; s=zohoarc; b=LWxqqmy0ncpciledFxDajaD5ruqIb2M+3z0KGPBbzKXHxRa8pKY+HwjIihEK8AdNjSXFX7hqYjKgeAQg1B9zvVTH/wUMzOFg64si1tPklOs8D+l8q9OtPmQTvDdOBp3+3AeA+UJyeM3vsBUZzW8J0bTm9IkMNcej4S/zl6pTs+4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646980; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=FSMUiGqdOPCQ1rGDDv1oyUjISENai/5CF90hWO6aEwo=; b=Gdq0pt85CNrawNDoK05OKZ29Gz61slyBmVj0FZqoyM0nhTsc25FFxXktvD120kjOrNPSrZUGjZIhZiE3vBqUbfJbf4Ocpe/5YaAkGSIDdwse0cxg34Ld6DYGwlDO0eggO66/r5twJo9FugdSeWzTVDdQWlxKEhFvQ3SG79vvbII= 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 1751646980296349.0042801020926; Fri, 4 Jul 2025 09:36:20 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjFz-0006ax-KW; Fri, 04 Jul 2025 12:27:23 -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 1uXjF2-0002Ap-W4 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:26 -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 1uXjF0-0006pC-22 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:24 -0400 Received: by mail-wr1-x42a.google.com with SMTP id ffacd0b85a97d-3a51481a598so598394f8f.3 for ; Fri, 04 Jul 2025 09:26:21 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.26.19 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:26:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646380; x=1752251180; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=FSMUiGqdOPCQ1rGDDv1oyUjISENai/5CF90hWO6aEwo=; b=AxcD2yulv8gU+6XCcsvG1ZgK5QsiKnBtmssjxLBnm/WjKU0msAgB0pFOafNLAUBL1c c0eCYBmbXwx7Ft8HHAZLSTZTTAPepnLEyD8VzgVz8tUJSwEQhs7pN9ut9n/eythEN+Tg r8GwBvncM6AQrWGJcd9V6BBtUcdj1exBWX6rekwNErIuRD39Ce1u2C2FbuFtiis+GVK8 nBppVCPtwpK1AHBHufUrxsaAIjufwDLJBYvJEQqDmOUxPWociwyyVe4YrvFgcSSbLv90 voFjIhFQN+I4Z4NZL0oCrW+uYTnzehsVp2wIyUIuITMKxaCGleZNucO8PUA4bjrYAB2i 6tcA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646380; x=1752251180; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=FSMUiGqdOPCQ1rGDDv1oyUjISENai/5CF90hWO6aEwo=; b=CP8IaoBSBTsffh+oqowb87fGTzYJDvtNyl6o+ma1iuj6biMKs+X1EnsqwxLd+5szGM r92zt9RN7nMG4I9ZwQTmG059Bl6Eww8GRqYTYBfSsr1U1mHhAGV9B+pOTMzBGT748uip f2UhbVd+nv3fcAB7KSZrlAh34EoMJsn19zVFG+QISUFP4Z4JBOS+Z6JikR4FHTK71y5Y sHlrYAfND6x19WLSgsIFbKStPJ1yn6RklrYX0zmdGsd65j10uD3d1NysRmyiIR5RoN4s +VZiWnY7t/2wMwRoHDhemX6NAVcQ9tqEWlIOzyhyHgG12k45hSVNlUq42BlLO+OGYGGW c3Aw== X-Gm-Message-State: AOJu0Yzkdq6OWbj6VbG1cC7TTQT4HH37YiTloyTqicsRvoYklBtwx/zB gQoSBSeev5wTJptIQfKkjWbTsVpOKHwWD1epSuVyDBHR2bN159UiB+1rthWVvSAtd3I2gH1Vhax +5N9e X-Gm-Gg: ASbGncv8YIYNPJFcy5CAADpZcjkcs/BtVvpqpV+tLQRkKPpe/9hQDOJ89HxEjR+gWt2 Jgb5Iu2vu6+DK8akHwq4fuTCVdR0dGoehRg/JT/kuXdCVdslAYBbHPX3JlgvxDcEfKrgWEL4suU AlvkfXoBeWCR9EW/p+g1TU51K2yCfmVvNgY4ChQXPkLILOtOGEYndunZJouU0Vy3LO0CkBRXErX s0b3droFzv4WDwYcnkeuQQ79/zwk2r9yNoAOeO6bpmpebfUheufH+33U7VL7YlCWnoH0mckUlLO TStc2DFwBVNiyjhPES3+T6u/V5KYUZh4haHyKeSTFrNWGF+U5Ih2eyN3KMtVuzEkq/6w X-Google-Smtp-Source: AGHT+IFB+lL2OK+SY4zViA8ADR0ZnAqxKS4xQMTNdModu0F63SILAgYHbwSp8TKJ/2bDx3odiNLARw== X-Received: by 2002:a05:6000:4011:b0:3a4:c8c1:aed8 with SMTP id ffacd0b85a97d-3b49703d898mr2612961f8f.39.1751646380476; Fri, 04 Jul 2025 09:26:20 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 081/119] target/arm: Implement SME2p1 Multiple Zero Date: Fri, 4 Jul 2025 17:24:21 +0100 Message-ID: <20250704162501.249138-82-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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=peter.maydell@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 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: 1751646981987116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-70-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/sme.decode | 23 +++++++++++++++++++++++ target/arm/tcg/translate-sme.c | 20 ++++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 47adcb5a154..c4b85a36d0c 100644 --- a/target/arm/tcg/sme.decode +++ b/target/arm/tcg/sme.decode @@ -877,3 +877,26 @@ UCLAMP 11000001 esz:2 1 zm:5 110001 zn:5 ....= 1 \ &zzz_en zd=3D%zd_ax2 n=3D2 UCLAMP 11000001 esz:2 1 zm:5 110011 zn:5 ...0 1 \ &zzz_en zd=3D%zd_ax4 n=3D4 + +### SME Multiple Zero + +&zero_za rv off ngrp nvec + +ZERO_za 11000000 000011 000 .. 0000000000 off:3 \ + &zero_za ngrp=3D2 nvec=3D1 rv=3D%mova_rv +ZERO_za 11000000 000011 100 .. 0000000000 off:3 \ + &zero_za ngrp=3D4 nvec=3D1 rv=3D%mova_rv + +ZERO_za 11000000 000011 001 .. 0000000000 ... \ + &zero_za ngrp=3D1 nvec=3D2 rv=3D%mova_rv off=3D%off3_x2 +ZERO_za 11000000 000011 010 .. 0000000000 0.. \ + &zero_za ngrp=3D2 nvec=3D2 rv=3D%mova_rv off=3D%off2_x2 +ZERO_za 11000000 000011 011 .. 0000000000 0.. \ + &zero_za ngrp=3D4 nvec=3D2 rv=3D%mova_rv off=3D%off2_x2 + +ZERO_za 11000000 000011 101 .. 0000000000 0.. \ + &zero_za ngrp=3D1 nvec=3D4 rv=3D%mova_rv off=3D%off2_x4 +ZERO_za 11000000 000011 110 .. 0000000000 00. \ + &zero_za ngrp=3D2 nvec=3D4 rv=3D%mova_rv off=3D%off1_x4 +ZERO_za 11000000 000011 111 .. 0000000000 00. \ + &zero_za ngrp=3D4 nvec=3D4 rv=3D%mova_rv off=3D%off1_x4 diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index 99e4056316a..b6316ac716c 100644 --- a/target/arm/tcg/translate-sme.c +++ b/target/arm/tcg/translate-sme.c @@ -173,6 +173,26 @@ static bool trans_ZERO_zt0(DisasContext *s, arg_ZERO_z= t0 *a) return true; } =20 +static bool trans_ZERO_za(DisasContext *s, arg_ZERO_za *a) +{ + if (!dc_isar_feature(aa64_sme2p1, s)) { + return false; + } + if (sme_smza_enabled_check(s)) { + int svl =3D streaming_vec_reg_size(s); + int vstride =3D svl / a->ngrp; + TCGv_ptr t_za =3D get_zarray(s, a->rv, a->off, a->ngrp, a->nvec); + + for (int r =3D 0; r < a->ngrp; ++r) { + for (int i =3D 0; i < a->nvec; ++i) { + int o_za =3D (r * vstride + i) * sizeof(ARMVectorReg); + tcg_gen_gvec_dup_imm_var(MO_64, t_za, o_za, svl, svl, 0); + } + } + } + return true; +} + static bool do_mova_tile(DisasContext *s, arg_mova_p *a, bool to_vec) { static gen_helper_gvec_4 * const h_fns[5] =3D { --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646906; cv=none; d=zohomail.com; s=zohoarc; b=Lh9Z9o4cABauWu6dQx0skE4Sbgr3Mq7zfTgKMxgYXNRw6klvO2LTMTFQVZS1C4rg+mrExmwmHs2/eQKuPFLxhOlq4KthDKiW8feZIjIHHMQGb63bSRqKPQNcykfygghaiYq303yWNGMTZiUFFoKtxLZreRNrPgDbNxcYsQFYcOE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646906; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=B5CANpDPQWpyeOcAzPhRg6M8ZmHELAiHl2F8gI+LHZk=; b=DphNJZYef4MGSbLbUqDF9OFchrgM+jyjp3QwA5ijODhssultL5d6sRsKedQNaWBVfLz1P7NHCgpbQabsYIOKMupNCLgmecwx1Q1Leop/zdhwiyes5x2Ah/PZ7kWQyGjwtnGOEz0r57JqByqPPt4vBe3B/cp13XgGalz1ghu73Fs= 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 175164690648351.49235961092711; Fri, 4 Jul 2025 09:35:06 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjFf-0006JB-V5; Fri, 04 Jul 2025 12:27: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 1uXjF3-0002B8-2R for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:26 -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 1uXjF1-0006pL-3n for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:24 -0400 Received: by mail-wm1-x32f.google.com with SMTP id 5b1f17b1804b1-4538a2fc7ffso15602295e9.0 for ; Fri, 04 Jul 2025 09:26:22 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.26.20 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:26:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646381; x=1752251181; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=B5CANpDPQWpyeOcAzPhRg6M8ZmHELAiHl2F8gI+LHZk=; b=LQgj2my3gu84UXza3pqgryCJLPsvf/cPqDyfTDASVQvp0rHk34EwBNbDuRq0tLcJS1 uwZVuuPiC9B7dweiVElyHWPh56zsCQ7eK8Q0plBxu5elzcpSYZSDUKzKDWYAyPzheSDI 3CONpbSDX9YA+AZarWpbwGclRVRcU8pIi2M8lJBwk1AoXelCNF3dsbuSgUWOh+n8mdpf DsvLiox839LaiJLWHP71c/uosdzzagjCfZhT2THkVIhXve4Xref3HF2cMzY0L0XHEMA5 NXfRPH5KNd/4SSCDzrYgUoJzROZ5QLH/K9i7DZfbBLA6JysnDu7RvAfjJIDfFSdNCkiZ hbXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646381; x=1752251181; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=B5CANpDPQWpyeOcAzPhRg6M8ZmHELAiHl2F8gI+LHZk=; b=iIXQX/0t/qiIfJSjz222rp+hGeKP4YZ8RqMDbdbKlzU8WdU+zRJwxwvq5MBYiNuBxK j1xMzn+TqsdHLrDlyZMpUTTFVKqYmbQhlUDBqW0hdrPi0UvWoctTcVKlYY1Azt/nsyaM CAVDCzJ/qbosulPOfOstq+EnX7k3MJSg+L6wVvkOJFJp0knf42snngjMcqiJRsjlq/+W h1/MGmHbi/tmAv1jLa1L4XBqZeqWe1leeDNc8RqPcGPjGjCfaBdyP6E2z7BQHO5lJ0R8 J6g4nru/hvm4ezpeWAq8flMuq33YjqkHNIHhtghfbuyuepZra8XMZ4yXj8nex+THB1+t ok4Q== X-Gm-Message-State: AOJu0YzGdm5hzXbXWXAvBqXRVtk5hd27Pxb22Jr2pCkkdaWqjExWt5ax kDS2CWjAhUZ8t4MQHAIj1abXqcf6i3Fzdo86x+hLhnw4CQxsy1NmEFS1neFFQAWISoNugBX4p4d se+68 X-Gm-Gg: ASbGncvhIj4yDcG+YYEqtuYMm0Ef8cG0bdC2/ZXfyYsv9tmlivBkL4NC/65DQMMFUYj /wd3om+ebdLa0wVwGzVONduIHT0O20HL97o/ful/qGz51GX+zu6PDHTPF8WajQ3iCwZZ0CWpvEr 54uWP2FpTng3KfUhLYum/e039cZ9qRwcVQnroXuqEhFDMvniWWqQNrSVpnO0zsNwA7FfWWHQb3k eaMfpX5vPwc8d7mv4AOFwTQy1bJ8BBNW/fjLYUv907fNSw136MNSdPftmV0d+lf9ZPgUaYBhxXy hlJF/u+q5j8SKtmgFYa5wCSHKcXv6IcJlS2k2HH8L7pMdmL/IqszBcFeYLI/tDyagaXR X-Google-Smtp-Source: AGHT+IFODmfwX70NNIHnw3UunoToh1RubFYqPKcgPwM0cJdrseAn41wHH+CGTCPDjLhVDLe4lGCyzQ== X-Received: by 2002:a5d:5f08:0:b0:3a4:f70e:bc25 with SMTP id ffacd0b85a97d-3b495ccb8efmr3156051f8f.27.1751646381319; Fri, 04 Jul 2025 09:26:21 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 082/119] target/arm: Introduce pred_count_test Date: Fri, 4 Jul 2025 17:24:22 +0100 Message-ID: <20250704162501.249138-83-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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=peter.maydell@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 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: 1751646906933116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson For WHILE, we have the count of enabled predicates, so we don't need to search to compute the PredTest result. Reuse the logic that will shortly be required for counted predicates. Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell Message-id: 20250704142112.1018902-71-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/sve_helper.c | 81 +++++++++++++++++++++---------------- 1 file changed, 46 insertions(+), 35 deletions(-) diff --git a/target/arm/tcg/sve_helper.c b/target/arm/tcg/sve_helper.c index 0e59ad22624..5b5871ba138 100644 --- a/target/arm/tcg/sve_helper.c +++ b/target/arm/tcg/sve_helper.c @@ -4102,30 +4102,46 @@ uint64_t HELPER(sve_cntp)(void *vn, void *vg, uint3= 2_t pred_desc) return sum; } =20 +/* C.f. Arm pseudocode PredCountTest */ +static uint32_t pred_count_test(uint32_t elements, uint32_t count, bool in= vert) +{ + uint32_t flags; + + if (count =3D=3D 0) { + flags =3D 1; /* !N, Z, C */ + } else if (!invert) { + flags =3D (1u << 31) | 2; /* N, !Z */ + flags |=3D count !=3D elements; /* C */ + } else { + flags =3D 2; /* !Z, !C */ + flags |=3D (count =3D=3D elements) << 31; /* N */ + } + return flags; +} + uint32_t HELPER(sve_whilel)(void *vd, uint32_t count, uint32_t pred_desc) { intptr_t oprsz =3D FIELD_EX32(pred_desc, PREDDESC, OPRSZ); intptr_t esz =3D FIELD_EX32(pred_desc, PREDDESC, ESZ); uint64_t esz_mask =3D pred_esz_masks[esz]; ARMPredicateReg *d =3D vd; - uint32_t flags; - intptr_t i; + intptr_t i, oprbits =3D oprsz * 8; + + tcg_debug_assert(count <=3D oprbits); =20 /* Begin with a zero predicate register. */ - flags =3D do_zero(d, oprsz); - if (count =3D=3D 0) { - return flags; + do_zero(d, oprsz); + if (count) { + /* Set all of the requested bits. */ + for (i =3D 0; i < count / 64; ++i) { + d->p[i] =3D esz_mask; + } + if (count & 63) { + d->p[i] =3D MAKE_64BIT_MASK(0, count & 63) & esz_mask; + } } =20 - /* Set all of the requested bits. */ - for (i =3D 0; i < count / 64; ++i) { - d->p[i] =3D esz_mask; - } - if (count & 63) { - d->p[i] =3D MAKE_64BIT_MASK(0, count & 63) & esz_mask; - } - - return predtest_ones(d, oprsz, esz_mask); + return pred_count_test(oprbits, count, false); } =20 uint32_t HELPER(sve_whileg)(void *vd, uint32_t count, uint32_t pred_desc) @@ -4134,34 +4150,29 @@ uint32_t HELPER(sve_whileg)(void *vd, uint32_t coun= t, uint32_t pred_desc) intptr_t esz =3D FIELD_EX32(pred_desc, PREDDESC, ESZ); uint64_t esz_mask =3D pred_esz_masks[esz]; ARMPredicateReg *d =3D vd; - intptr_t i, invcount, oprbits; + intptr_t i, invcount, oprbits =3D oprsz * 8; uint64_t bits; =20 - if (count =3D=3D 0) { - return do_zero(d, oprsz); - } - - oprbits =3D oprsz * 8; tcg_debug_assert(count <=3D oprbits); =20 - bits =3D esz_mask; - if (oprbits & 63) { - bits &=3D MAKE_64BIT_MASK(0, oprbits & 63); - } - - invcount =3D oprbits - count; - for (i =3D (oprsz - 1) / 8; i > invcount / 64; --i) { - d->p[i] =3D bits; + /* Begin with a zero predicate register. */ + do_zero(d, oprsz); + if (count) { + /* Set all of the requested bits. */ bits =3D esz_mask; + if (oprbits & 63) { + bits &=3D MAKE_64BIT_MASK(0, oprbits & 63); + } + + invcount =3D oprbits - count; + for (i =3D (oprsz - 1) / 8; i > invcount / 64; --i) { + d->p[i] =3D bits; + bits =3D esz_mask; + } + d->p[i] =3D bits & MAKE_64BIT_MASK(invcount & 63, 64); } =20 - d->p[i] =3D bits & MAKE_64BIT_MASK(invcount & 63, 64); - - while (--i >=3D 0) { - d->p[i] =3D 0; - } - - return predtest_ones(d, oprsz, esz_mask); + return pred_count_test(oprbits, count, true); } =20 /* Recursive reduction on a function; --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646796; cv=none; d=zohomail.com; s=zohoarc; b=iKvaH2+B3p9tvV+yG6FfOVw0i3hzlJL0Ke2qqWyKHDAl/LAJhxao6fCTqpzehYGCCDEiDI+2v67F0pb1Dvb8A7qjRjn4Ks4ZjzNyKhaPPw6wthvAmXjI7LiOKbF99IevYQD5PzKxNIkj2VV/u9taLkOq0DXuVHaINpadMzAVAxs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646796; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=EHw/YvlXnGE5Lhnz23NcN4KbjhsX92Q6fIh7SOhpDm8=; b=GmgYEVQ1AULZzUhDg8rUr8Z+PWVFXWIcWu4jeaO5ONd/S3EVW6Evkcd2o+7BuJairxEQd7kjvPGXraZNDK31uCV57ODoX3g7SZp+Q/K/fZuBskG771TRIhx6WWFh8CGQUXqtjjX782t1OC3FafPT/1Di7+UZ0oYrnj/dzL0vyRg= 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 175164679678990.23721970228303; Fri, 4 Jul 2025 09:33:16 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjFN-0004G1-OA; Fri, 04 Jul 2025 12:26:45 -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 1uXjF3-0002CV-B9 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:26 -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 1uXjF1-0006pV-HK for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:25 -0400 Received: by mail-wm1-x334.google.com with SMTP id 5b1f17b1804b1-4535fbe0299so6167755e9.3 for ; Fri, 04 Jul 2025 09:26:23 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.26.21 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:26:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646382; x=1752251182; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=EHw/YvlXnGE5Lhnz23NcN4KbjhsX92Q6fIh7SOhpDm8=; b=jL8HZj1Zxo5XlXpFsFKynM5h4aUpwNZhZnT/+nSs4bNPNg1LJ22IfErODIqdxUYxAT nnTmJ6qcJ6raa+Eh2AuO85o+0TgQVCZL31ES2f2+Z4D8IyN9+HD61Z4k+znArKoyW7DY Ql8j/ndAMCr+GN4HbPgOl788zk5jBDltzEMuoclBUylTQkDGdlQWemjDpXYcaIhQowvV RGVie5fvEi54O+BakCbIkmP3a1vwnVhytWHIdMrqDpZSe4jk5GMojiSPwA5McuFnnjZB RntKZIUZxW9CyC8rYIox4UiSCKJJ2YOrC5jTfy3xSkB08icuY7w8BjjieB8SMvueH53h a7xw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646382; x=1752251182; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=EHw/YvlXnGE5Lhnz23NcN4KbjhsX92Q6fIh7SOhpDm8=; b=GY7s1Bq5nvIzYPOOnS8oZkm0CZ4excS/DRD9jnkvHQ3DKCoPaJ9C0Tj8FzYVtWwjpc v5JUoN7vAk6tzyvXR/3IncSdp+IFLmuaHWTjIhPjxeNBwcMvFyIOwEhQ8Cr+vYp102tv PY83ByULtLUkXVTUXNlaGg7n8pvVklNH3M0OZzj8/KmywzEyco1n7wWTBxAv2kZovd3X pS+cWcctSoo4jpVsafw0L0P7bzBlZkW4bIiH+pNPbpSH7kMNY+tZkq5rp3GBKwTxnI4n kwTrBVigro1dePrGvuANmUKEqeVi9fzVDFG7LNleJcNVo0bVf7A3WfEqwbF1mq+57kw1 +7MA== X-Gm-Message-State: AOJu0YwWdWsk8GVvG+16H9USTWs7eyCTL3dtajhVTbZu1CDL6rdXzp6V A52X3C2r0etGCUTBL5ob5MlPw/JHi0WmUOxy8OlDxoK9mvP/EZDpnVfiRksL0TzAhV2S9cllynB EYchA X-Gm-Gg: ASbGncv1Wj5eKEj7QLtQapPIJwINeOEWuu3NuGHrJdaTUBf1E1cO9KKOmFt+35ihTzj lE0B7ruNYN+9ALg4nPqzz3eW8vh37l9tBTkT9YR9lhaqf7O1NU89HFF+T2gzUeV5FWz5g5DGOSF 6FdXktYL2TsHWPMvbhO3XHHYrDPAapZlEPqM8qkQG2yp+rK0KXOF9MHw634UkJND+aksM+Gs645 msMYsOFlzmSGwkammU98k/VzUaDsss8WWfEM/+YLDaEBh78m5/z2ruAV8OBj0GLZT9uJyPJHpDL wTfpZyvFSzLjtB8bU9BrVBslLxs2RdnLgR4SbgVIh18SY4eqg8n8UlTyQIhmP52AGn7s X-Google-Smtp-Source: AGHT+IGBzSrlkXCc8T9cZeZU83p6iQNoJeq3IrARSc4Yk1GE8Kx3j2vbYG3FNDu+PLds53IeuOc47A== X-Received: by 2002:a05:6000:1a8b:b0:3b4:cb0:b6e8 with SMTP id ffacd0b85a97d-3b4964e56d5mr2742724f8f.42.1751646382154; Fri, 04 Jul 2025 09:26:22 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 083/119] target/arm: Fold predtest_ones into helper_sve_brkns Date: Fri, 4 Jul 2025 17:24:23 +0100 Message-ID: <20250704162501.249138-84-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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=peter.maydell@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 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: 1751646797605116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Merge predtest_ones into its only caller. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-72-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/sve_helper.c | 34 ++++++++++++++-------------------- 1 file changed, 14 insertions(+), 20 deletions(-) diff --git a/target/arm/tcg/sve_helper.c b/target/arm/tcg/sve_helper.c index 5b5871ba138..492e42acc84 100644 --- a/target/arm/tcg/sve_helper.c +++ b/target/arm/tcg/sve_helper.c @@ -4061,31 +4061,25 @@ void HELPER(sve_brkn)(void *vd, void *vn, void *vg,= uint32_t pred_desc) } } =20 -/* As if PredTest(Ones(PL), D, esz). */ -static uint32_t predtest_ones(ARMPredicateReg *d, intptr_t oprsz, - uint64_t esz_mask) -{ - uint32_t flags =3D PREDTEST_INIT; - intptr_t i; - - for (i =3D 0; i < oprsz / 8; i++) { - flags =3D iter_predtest_fwd(d->p[i], esz_mask, flags); - } - if (oprsz & 7) { - uint64_t mask =3D ~(-1ULL << (8 * (oprsz & 7))); - flags =3D iter_predtest_fwd(d->p[i], esz_mask & mask, flags); - } - return flags; -} - uint32_t HELPER(sve_brkns)(void *vd, void *vn, void *vg, uint32_t pred_des= c) { intptr_t oprsz =3D FIELD_EX32(pred_desc, PREDDESC, OPRSZ); if (last_active_pred(vn, vg, oprsz)) { - return predtest_ones(vd, oprsz, -1); - } else { - return do_zero(vd, oprsz); + ARMPredicateReg *d =3D vd; + uint32_t flags =3D PREDTEST_INIT; + intptr_t i; + + /* As if PredTest(Ones(PL), D, MO_8). */ + for (i =3D 0; i < oprsz / 8; i++) { + flags =3D iter_predtest_fwd(d->p[i], -1, flags); + } + if (oprsz & 7) { + uint64_t mask =3D ~(-1ULL << (8 * (oprsz & 7))); + flags =3D iter_predtest_fwd(d->p[i], mask, flags); + } + return flags; } + return do_zero(vd, oprsz); } =20 uint64_t HELPER(sve_cntp)(void *vn, void *vg, uint32_t pred_desc) --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647274; cv=none; d=zohomail.com; s=zohoarc; b=jQyPpQj/l9wZP+xfJ5SIV+YCBeGcizODxKQ2XaVRwAVyOOIHtBR44M44mNooFyih7Tb9eVKpE/M7QCtTe3uGoSIuoRjBGfgnJitynuqPoDhjsHQKbp4MPGJC2A5Py3idJ3SMY+vCilvG10Oh4VxakkRhmsS6ziyt5i5vLW1AxCQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647274; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=Qfab+mF4jX/IBKhtqhTVoSV8zixm+glo9EFYwjvuj2w=; b=Hs+/vB0d2k/+l5qh/jOPblyEbSAE4oMhbuBLyK0OS+6n5KTs3quzKxZCplSlD2noLHkvXql0HKaLwtTF03QS816i6iepXe8fImeTsX9jYKMG0Rxh9niDhcJrUgdwxHMDiq92ps2TJ4ab5MRtGbbUFgZ4ryb91fYOwLf/xKEGEqw= 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 175164727421990.83974294208701; Fri, 4 Jul 2025 09:41:14 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjFP-0004J8-8r; Fri, 04 Jul 2025 12:26:47 -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 1uXjF5-0002R6-R1 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:28 -0400 Received: from mail-wr1-x430.google.com ([2a00:1450:4864:20::430]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjF2-0006pq-TY for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:26 -0400 Received: by mail-wr1-x430.google.com with SMTP id ffacd0b85a97d-3a536ecbf6fso620914f8f.2 for ; Fri, 04 Jul 2025 09:26:24 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.26.22 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:26:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646383; x=1752251183; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=Qfab+mF4jX/IBKhtqhTVoSV8zixm+glo9EFYwjvuj2w=; b=IBwsdrgrSfP2+B1fNd99tufy7X2atLUudTxQWp508oQjw/XiaPNzjGOfFvlM7Febd9 d6L4+Ll+svOau65X3bYmg4MPTaOEE3TBB/eSgMrjhP0aG7HcvCn43PjAvCWGP/IPZ1FW bSmDjwpu3zH7//zSuAcIF1jAGQNk4Kpu/7mGlHy1zEMxC5IOdxwPzXLLtTwt/MEbY7Nr fpPHAPIzRW53kW3dY4ijLgq2xFmKaEeWmPdCszli1WntGEsmMDXknv7z4Uho9T1pMnbr j0pIJjiOlZkT7kCNWvr1ofTvlHqmycwXhD6d3Yw+vqkwx3WpW7Q+A+yCRvYeD2Ob/OBt LjfA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646383; x=1752251183; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Qfab+mF4jX/IBKhtqhTVoSV8zixm+glo9EFYwjvuj2w=; b=pV2TuEAwGK7zPZ7IpyNG8+/N70mtd3FomdXkmuZxsmdwItEiPbqBmU7rQQgOu2koiq txGd/A4JCcrDEsVfy1w+SezAlSxbO4RDB4In8N+xoCrNrxZsdDhmjBG+G5GxliamhFO3 SqM5VT3So9ckcW+v1wh4blWVbGnSO10VSI+80+L5fUAnUeym/PLBL1oq10dj3WY3x9QG io+KNYyAaQUBjD7Oy9z22mgG4lPLsJpTQJtzECAIwpQrdKNOo9udD2qjZbD542XxCEwZ ZZp05CeWGkQ/1KAGFRtAZyd81LDF96UPqQmJL7tx5VccoTin+8YQnYG8qm552j74YPJM Al5A== X-Gm-Message-State: AOJu0YxQo88VvH/LrnIpQjCtdxBNMsH4WNVdR2evTD406ZLBz5M6f5y/ uZLF2oBDFcDwLvTwKfUtGzf8ByWWHwtGO0fexCpC0XWVYkwOp6pmshhiB48dvxIyiccwr9l3U9D BTou8 X-Gm-Gg: ASbGncsaZ+PX6+R9hsYOx78iSD82X00GzSN//YlkOkEXmZSChLJHtILuugQWrYSPWDO YkR8L8ByzOkynGb5kf/FHUSzu0Yit5Ha7NzdKkt8d90993H/2I3SV6juu7l+9obYpWRTuHRvSNV uorB4/RdIZ6oTIXS++RAJN1oiRNXhKqVUeMxZgQ/ZiO/8ct2kb/ph4lEznsgqhvC96MW/8BAgtq te6NHMI8+fdVQfqBKjjF+37/nBBXM7mFRg1NDtc4d2I9+AkrCC9ulsOMMD3Kh5fPWEqoyhJdReN NpnZOALFvSNZFIxO4rlzJsEc21iHC+dHgjCPelqJ6clkOFEVnUpvVT+Lq5jBi/LdIKxX X-Google-Smtp-Source: AGHT+IGczMqg2B/QglvCqCRy/lTAi6veLU8POiE05/p+80rPdhK1cpWbdfjIJEfWv0ZcaWB4r+hZEg== X-Received: by 2002:a5d:64cd:0:b0:3a5:39bb:3d61 with SMTP id ffacd0b85a97d-3b4964f1dfcmr2814717f8f.27.1751646383364; Fri, 04 Jul 2025 09:26:23 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 084/119] target/arm: Expand do_zero inline Date: Fri, 4 Jul 2025 17:24:24 +0100 Message-ID: <20250704162501.249138-85-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::430; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x430.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751647275467116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Expand to memset plus the return value, when used. Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell Message-id: 20250704142112.1018902-73-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/sve_helper.c | 28 +++++++++++----------------- 1 file changed, 11 insertions(+), 17 deletions(-) diff --git a/target/arm/tcg/sve_helper.c b/target/arm/tcg/sve_helper.c index 492e42acc84..a62a647f3ae 100644 --- a/target/arm/tcg/sve_helper.c +++ b/target/arm/tcg/sve_helper.c @@ -3952,15 +3952,6 @@ static uint32_t compute_brks_m(uint64_t *d, uint64_t= *n, uint64_t *g, return flags; } =20 -static uint32_t do_zero(ARMPredicateReg *d, intptr_t oprsz) -{ - /* It is quicker to zero the whole predicate than loop on OPRSZ. - * The compiler should turn this into 4 64-bit integer stores. - */ - memset(d, 0, sizeof(ARMPredicateReg)); - return PREDTEST_INIT; -} - void HELPER(sve_brkpa)(void *vd, void *vn, void *vm, void *vg, uint32_t pred_desc) { @@ -3968,7 +3959,7 @@ void HELPER(sve_brkpa)(void *vd, void *vn, void *vm, = void *vg, if (last_active_pred(vn, vg, oprsz)) { compute_brk_z(vd, vm, vg, oprsz, true); } else { - do_zero(vd, oprsz); + memset(vd, 0, sizeof(ARMPredicateReg)); } } =20 @@ -3979,7 +3970,8 @@ uint32_t HELPER(sve_brkpas)(void *vd, void *vn, void = *vm, void *vg, if (last_active_pred(vn, vg, oprsz)) { return compute_brks_z(vd, vm, vg, oprsz, true); } else { - return do_zero(vd, oprsz); + memset(vd, 0, sizeof(ARMPredicateReg)); + return PREDTEST_INIT; } } =20 @@ -3990,7 +3982,7 @@ void HELPER(sve_brkpb)(void *vd, void *vn, void *vm, = void *vg, if (last_active_pred(vn, vg, oprsz)) { compute_brk_z(vd, vm, vg, oprsz, false); } else { - do_zero(vd, oprsz); + memset(vd, 0, sizeof(ARMPredicateReg)); } } =20 @@ -4001,7 +3993,8 @@ uint32_t HELPER(sve_brkpbs)(void *vd, void *vn, void = *vm, void *vg, if (last_active_pred(vn, vg, oprsz)) { return compute_brks_z(vd, vm, vg, oprsz, false); } else { - return do_zero(vd, oprsz); + memset(vd, 0, sizeof(ARMPredicateReg)); + return PREDTEST_INIT; } } =20 @@ -4057,7 +4050,7 @@ void HELPER(sve_brkn)(void *vd, void *vn, void *vg, u= int32_t pred_desc) { intptr_t oprsz =3D FIELD_EX32(pred_desc, PREDDESC, OPRSZ); if (!last_active_pred(vn, vg, oprsz)) { - do_zero(vd, oprsz); + memset(vd, 0, sizeof(ARMPredicateReg)); } } =20 @@ -4079,7 +4072,8 @@ uint32_t HELPER(sve_brkns)(void *vd, void *vn, void *= vg, uint32_t pred_desc) } return flags; } - return do_zero(vd, oprsz); + memset(vd, 0, sizeof(ARMPredicateReg)); + return PREDTEST_INIT; } =20 uint64_t HELPER(sve_cntp)(void *vn, void *vg, uint32_t pred_desc) @@ -4124,7 +4118,7 @@ uint32_t HELPER(sve_whilel)(void *vd, uint32_t count,= uint32_t pred_desc) tcg_debug_assert(count <=3D oprbits); =20 /* Begin with a zero predicate register. */ - do_zero(d, oprsz); + memset(d, 0, sizeof(*d)); if (count) { /* Set all of the requested bits. */ for (i =3D 0; i < count / 64; ++i) { @@ -4150,7 +4144,7 @@ uint32_t HELPER(sve_whileg)(void *vd, uint32_t count,= uint32_t pred_desc) tcg_debug_assert(count <=3D oprbits); =20 /* Begin with a zero predicate register. */ - do_zero(d, oprsz); + memset(d, 0, sizeof(*d)); if (count) { /* Set all of the requested bits. */ bits =3D esz_mask; --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646578; cv=none; d=zohomail.com; s=zohoarc; b=blHrqqGaKMcOn69WSDl8oBanCBuibz+l2brDS2IjaFDlqrnufUOOsXKs4i86d2DSqjrI+LdglimkWTF4CALw1cztnizO8Ve+Qx338pvjFQ/7XDmD113VFxR1ce3TLnfiaRZWROVOB8BBUPkzOom+ydE7EVkS/xbwfrIgwcRhzNA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646578; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=3rc3urNrQq7/R3y5W7MW/LeqmxHvAPVulXlUwnI9qyk=; b=Yw3XkulsBEbnqhv9FHrAUQHtsaLomgSKkfa3Onjgb4HwB9ukbJHbt/qdXFbEiPNtGSe9+wz0iE6i2+XkkU8yW87xasxCk7i8fldCYD1t6TsumATlhUis8EKJd7BBjHkD6KI+d4bLH5y2oiv1ZJHGlzwCIyEEVJZOiQwHbYTkQIo= 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 1751646578355243.2554449353196; Fri, 4 Jul 2025 09:29:38 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjG5-0006y9-0h; Fri, 04 Jul 2025 12:27:30 -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 1uXjF5-0002RH-RM for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:28 -0400 Received: from mail-wr1-x434.google.com ([2a00:1450:4864:20::434]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjF3-0006qD-Ot for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:27 -0400 Received: by mail-wr1-x434.google.com with SMTP id ffacd0b85a97d-3a6e8b1fa37so821762f8f.2 for ; Fri, 04 Jul 2025 09:26:25 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.26.23 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:26:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646384; x=1752251184; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=3rc3urNrQq7/R3y5W7MW/LeqmxHvAPVulXlUwnI9qyk=; b=vUvcv41UFRdPFwLKTF1OGlOL13KkG7iXmL3zTHtEGQ5TfloEvJUvEH7vu7tGWxR2qQ vBMjFnA1R56LVPfVrDvXKpwdcyw4MPVeIEyv5one3F6A9ahFMBKKIUsKednsC3cCFqk6 /VpSqf/ml/QOmZjWrC8ZkDTroJKv1SRTTGOaM2QyYKEOlIf0HYTBfanqj6e1uNg3D8vN ADSL08jY+8y9FKa9LW+teYygyHcJFQB/OOrFtbtxoeRp1KmIG4aQCKnggDwTJEZT5e8z t7MzAQJNn6blpMIs5Bj+G3EMhiKqGoSCcNeB5EbXOJrwkEQLnqwJRwr7bUcBRMxEN9L3 hWKw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646384; x=1752251184; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=3rc3urNrQq7/R3y5W7MW/LeqmxHvAPVulXlUwnI9qyk=; b=Tb8VKk6PoIwBu8njr5Olpj+zL6KfS0NOPmOL2aN3fqiqEiqbSjAm1S43Yh7dRK0cB+ +O+Wlu4SCUJD2gDbZICtGjEvaalnDfPqPdx6HuLAtPHJPezUpZn8pSE508mLiIPYgLxt CN9gYPksoWnLAF5vaDxjDbXQj6FXnLqgn+ApL4+2jgO3KNGS3AM3/QtOMfwAtLaH/bS/ koe+tD/FA8+v8JuQxkwoP5+8lYSsJ7vuhXEEvwJatmLhXwhCUCiEBQGuNzQ0gNZ0u5pT 3S9CB1OCEnjD/YIoRmTQgpNgzgFk5NC1lEc7DzoCD2tfLCVtxhKZa1U5qvRyHdmg5FBs P6PA== X-Gm-Message-State: AOJu0Yx2VcP3Xt9uOP3q+k3QIqNuj9aGzSARCmzBbKHK0zLgYxXF1eoJ Umo+Hk6um31GaOKD1YbMm8bXrjaonR4ZleoUFQeitce6putyCVo7fa5ejBWR8fVEc+BZkJ+Ov3v 07Ejd X-Gm-Gg: ASbGncv/09DJ8jZTrlIby7x+t81QXM5YxwDAEfF4eImZ2UBHMDcM87Cy9R0IEeGeayf tW7GX/gZ4I0R8EHkZGOYKV/sF8xIdDwMYO9roW0XDIDrVEEA94i0K5pfjwulaGoW1hw7QDQohAl fpcO2DLyRhT8a42rO9uqr68bG8MKCBuuNejgBegmsyGFVF22mczrhExGuz6vjSJpOS/S/xVf63K MfeeUDjUR9xxQO2tGISi5lm+oqqkKcCt2YPbn05BkXEeKuQfH1+GJsFimtDEGQS3cpTGViGPx6G XDtrkXg7PciA1tRQjxOWzyespCNRQnIgsBY/tF6mrXgoczl+0ZSieJPa0aR0Dqu8Oh2Q X-Google-Smtp-Source: AGHT+IGK4Isyw5yqEMpOcKz83HWj3K6yCvmj333ut80y69A26nt9eVvQXDqJwBe+HrzzIWYevUr3kg== X-Received: by 2002:a05:6000:4703:b0:3a5:2465:c0a4 with SMTP id ffacd0b85a97d-3b4964feceemr2676214f8f.20.1751646384211; Fri, 04 Jul 2025 09:26:24 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 085/119] target/arm: Split out do_whilel from helper_sve_whilel Date: Fri, 4 Jul 2025 17:24:25 +0100 Message-ID: <20250704162501.249138-86-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::434; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x434.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751646578906116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-74-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/sve_helper.c | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/target/arm/tcg/sve_helper.c b/target/arm/tcg/sve_helper.c index a62a647f3ae..741d04309c8 100644 --- a/target/arm/tcg/sve_helper.c +++ b/target/arm/tcg/sve_helper.c @@ -4107,19 +4107,14 @@ static uint32_t pred_count_test(uint32_t elements, = uint32_t count, bool invert) return flags; } =20 -uint32_t HELPER(sve_whilel)(void *vd, uint32_t count, uint32_t pred_desc) +/* D must be cleared on entry. */ +static void do_whilel(ARMPredicateReg *d, uint64_t esz_mask, + uint32_t count, uint32_t oprbits) { - intptr_t oprsz =3D FIELD_EX32(pred_desc, PREDDESC, OPRSZ); - intptr_t esz =3D FIELD_EX32(pred_desc, PREDDESC, ESZ); - uint64_t esz_mask =3D pred_esz_masks[esz]; - ARMPredicateReg *d =3D vd; - intptr_t i, oprbits =3D oprsz * 8; - tcg_debug_assert(count <=3D oprbits); - - /* Begin with a zero predicate register. */ - memset(d, 0, sizeof(*d)); if (count) { + uint32_t i; + /* Set all of the requested bits. */ for (i =3D 0; i < count / 64; ++i) { d->p[i] =3D esz_mask; @@ -4128,7 +4123,18 @@ uint32_t HELPER(sve_whilel)(void *vd, uint32_t count= , uint32_t pred_desc) d->p[i] =3D MAKE_64BIT_MASK(0, count & 63) & esz_mask; } } +} =20 +uint32_t HELPER(sve_whilel)(void *vd, uint32_t count, uint32_t pred_desc) +{ + uint32_t oprsz =3D FIELD_EX32(pred_desc, PREDDESC, OPRSZ); + uint32_t esz =3D FIELD_EX32(pred_desc, PREDDESC, ESZ); + uint32_t oprbits =3D oprsz * 8; + uint64_t esz_mask =3D pred_esz_masks[esz]; + ARMPredicateReg *d =3D vd; + + memset(d, 0, sizeof(*d)); + do_whilel(d, esz_mask, count, oprbits); return pred_count_test(oprbits, count, false); } =20 --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646905; cv=none; d=zohomail.com; s=zohoarc; b=MCdacEgn5FAZ3o2x1yyzFlNsbMh1efod9l1Cn+ViOQSFQqUxKrjKZJHnQjYkQlaaN/Gzwd/hNV7p0//x/tx0TkpR5/e+elDJ6lqs7nEv/JPScR3AtuSX38s5ScqZGjcpDgdvGhKnnM8LpFUJNNIu9Q7T3YyDCPuXwc8JNFJ49sg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646905; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=WifiZK9bF4RgBJmZsvME6bMbF5Ss9kw4tOUPKv9Vw+I=; b=Exp2UknCxE0HuAI0oC7D9b92aFrsJ/ejMK2ztOsluzlW7oTyBF/Rd8n2Pt+wnnnMV8G1fuYKGjkaceG9aDinnWXlFMiEV54QVS59hHPF+dIEuTZeYf5+fMRQdCw375RuHU0F09/AAXRcl4HN6m0edrDheUkJgRm3PMcBhQ7TIaw= 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 1751646905454607.5018810552017; Fri, 4 Jul 2025 09:35:05 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjFa-0005kZ-8w; Fri, 04 Jul 2025 12:26:58 -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 1uXjF8-0002Xa-1x for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:30 -0400 Received: from mail-wm1-x32d.google.com ([2a00:1450:4864:20::32d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjF5-0006qS-3B for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:28 -0400 Received: by mail-wm1-x32d.google.com with SMTP id 5b1f17b1804b1-454b1d0a115so3626745e9.2 for ; Fri, 04 Jul 2025 09:26:26 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.26.24 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:26:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646385; x=1752251185; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=WifiZK9bF4RgBJmZsvME6bMbF5Ss9kw4tOUPKv9Vw+I=; b=szM43zckhdq5tLNhBEPx3M7u4anHBujfK/sT0ESqz+9yAuWQfcJ9Z1rbsaMc2/Qbv5 cbixv34ad6qIieBCkryKcTDYRjSjsYI78OdvsLlDH6OlSlklQ619R51k+5G1wyyqFs3f QR1mNzsb/VFoGoR1dEX+QLofMrYcfu5suzSG59Fn5wl50m47ItFSbB0fy48ctTlmOdtq nRjG0YzPor/5YuC7bHcYJU24FtpBHjAHYQncSR8HJ6U4uugvupmmpM9SLytxm+tuDavX mPeDu+RPndUOa8fQSXNRDo+nsFyKEP3LcwzO/PNVfOyT7U0vt9QmIEq/9t3zJb39o3hi /zkg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646385; x=1752251185; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=WifiZK9bF4RgBJmZsvME6bMbF5Ss9kw4tOUPKv9Vw+I=; b=KTfFx6C3ZYKzSVQg8l71lKGSpgWPykPn0tp2Stq+ATnM5vYNn6P3985h/AifBd/QSr HyfDmzTayHh/HPiNyM6AaMoRgA3R9fk8mFJoLL9KtVNXl9A0/DWeQCD9AMlWWcloVs/U pFrzoK3Vw7lyfE/7RckILXtcRl/dnBJH6qQKsyThs0b5NaQl/Gs8iIXThLWtYKcR7PlW eYlnBk61kHYPSyRMfVb40FxwiZggqshSy/w4KICTGpohFsAo0kc+vVHFgu9aHlM/lyVc SDcSh8WQfpi7a++Yfa/tycseGncenJSJ2lBH2BNAwbOffH+BA/GY6s1rgorsL2L4L1VS HxGw== X-Gm-Message-State: AOJu0YxEiFvMBO8LTeTCe8NVRPipuyUYE+z0zA0LS52wgh4uxaJmisGc 4tLGJy6lbZyeuHtouk/kG7Ii09kEDmXZ2g9sQbOAPdAFf31bA5xftJ67RrUyXY9QREXvHhkqB9S Ns3To X-Gm-Gg: ASbGncvN9D6/j4zOobdQpxrqkDXzkhL8zcRsjabEU5cxxQ2Cx2npIZ+9lo1Nd6tWq5O pjw96GgFhnrOroZ5RaH8qjLDWuQAHQfwt07+Wgh99MU1P+3eKq4siD3lnDvYQeOtftixIo/qy1R RCOVqiKSOmGTqfyOEauuoMRk6vYp5J9HVwXH8+tBZT0cJEIIdjjLYFZd0XAtEBx2dOVszSrIcI0 Ij/y9uaDgYgafVbMLmpJ/VBHGS8HzSgl03UOBfjlJKdG0Qr3pa4C+HYqVlkX4dyUG7SnaybR8Ef qPlgfHTcUmrDKvIQ41T+/fS6CCiwbRTBzhlAZ8K8xnwZNAlggu+rXj/TdBQin6+c5xIU X-Google-Smtp-Source: AGHT+IHX1vQ9E2pJa97e6E0odGNofit7W2nl8VXKmv9sVKEVfSMy+c7B77GYLxKJeRucEqjlxabSpQ== X-Received: by 2002:a05:6000:41f8:b0:3a5:8a68:b81b with SMTP id ffacd0b85a97d-3b49703e3c0mr2452804f8f.44.1751646385097; Fri, 04 Jul 2025 09:26:25 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 086/119] target/arm: Split out do_whileg from helper_sve_whileg Date: Fri, 4 Jul 2025 17:24:26 +0100 Message-ID: <20250704162501.249138-87-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::32d; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x32d.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751646906935116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell Message-id: 20250704142112.1018902-75-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/sve_helper.c | 39 +++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/target/arm/tcg/sve_helper.c b/target/arm/tcg/sve_helper.c index 741d04309c8..5e11e86e5e0 100644 --- a/target/arm/tcg/sve_helper.c +++ b/target/arm/tcg/sve_helper.c @@ -4138,34 +4138,35 @@ uint32_t HELPER(sve_whilel)(void *vd, uint32_t coun= t, uint32_t pred_desc) return pred_count_test(oprbits, count, false); } =20 -uint32_t HELPER(sve_whileg)(void *vd, uint32_t count, uint32_t pred_desc) +/* D must be cleared on entry. */ +static void do_whileg(ARMPredicateReg *d, uint64_t esz_mask, + uint32_t count, uint32_t oprbits) { - intptr_t oprsz =3D FIELD_EX32(pred_desc, PREDDESC, OPRSZ); - intptr_t esz =3D FIELD_EX32(pred_desc, PREDDESC, ESZ); - uint64_t esz_mask =3D pred_esz_masks[esz]; - ARMPredicateReg *d =3D vd; - intptr_t i, invcount, oprbits =3D oprsz * 8; - uint64_t bits; - tcg_debug_assert(count <=3D oprbits); - - /* Begin with a zero predicate register. */ - memset(d, 0, sizeof(*d)); if (count) { - /* Set all of the requested bits. */ - bits =3D esz_mask; - if (oprbits & 63) { - bits &=3D MAKE_64BIT_MASK(0, oprbits & 63); - } + uint32_t i, invcount =3D oprbits - count; + uint64_t bits =3D esz_mask & MAKE_64BIT_MASK(invcount & 63, 64); =20 - invcount =3D oprbits - count; - for (i =3D (oprsz - 1) / 8; i > invcount / 64; --i) { + for (i =3D invcount / 64; i < oprbits / 64; ++i) { d->p[i] =3D bits; bits =3D esz_mask; } - d->p[i] =3D bits & MAKE_64BIT_MASK(invcount & 63, 64); + if (oprbits & 63) { + d->p[i] =3D bits & MAKE_64BIT_MASK(0, oprbits & 63); + } } +} =20 +uint32_t HELPER(sve_whileg)(void *vd, uint32_t count, uint32_t pred_desc) +{ + uint32_t oprsz =3D FIELD_EX32(pred_desc, PREDDESC, OPRSZ); + uint32_t esz =3D FIELD_EX32(pred_desc, PREDDESC, ESZ); + uint32_t oprbits =3D oprsz * 8; + uint64_t esz_mask =3D pred_esz_masks[esz]; + ARMPredicateReg *d =3D vd; + + memset(d, 0, sizeof(*d)); + do_whileg(d, esz_mask, count, oprbits); return pred_count_test(oprbits, count, true); } =20 --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647096; cv=none; d=zohomail.com; s=zohoarc; b=h0vSbJ84FpacluqmmA7OfZ242Bf3NohJLTtFR8glo6btmKCW+vEgsiXCvLuH7sxUEt0lU1k3+9tY0ojSYObkBNX85TixqGn09N/misHyRpqcdQ1JbbmtN1VFK6GwroTtHa6nCBYWp2Q+1CBkiV3GvpCGW5IUIL6HFI/MQfd+YqE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647096; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=jqlZAnmBIz+XGT4xT8k9tvPtNPsv+Nb4Y93x1wUOMgw=; b=jHFWq5fn0PSzlBGRjGBMOaAsUMez7f9KX1Jw9zkl9+mHgPIJQKGC1yCtVm6BmhgK1Cw8ZzV7IoWW9/FmfrjNLM6uAb3Cxc7G73Y+4P3tRDndGu4RIatNcRAOH30JlQ9QqhEgkeXZqyjQFkLxQNC5bXRiuC9qlog03+lEi4nJFnI= 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 1751647096343886.3425099263894; Fri, 4 Jul 2025 09:38:16 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjFR-0004Vw-Gh; Fri, 04 Jul 2025 12:26:49 -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 1uXjF8-0002a7-Ej for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:30 -0400 Received: from mail-wm1-x332.google.com ([2a00:1450:4864:20::332]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjF6-0006qn-Lk for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:30 -0400 Received: by mail-wm1-x332.google.com with SMTP id 5b1f17b1804b1-453066fad06so7827195e9.2 for ; Fri, 04 Jul 2025 09:26:27 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.26.25 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:26:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646386; x=1752251186; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=jqlZAnmBIz+XGT4xT8k9tvPtNPsv+Nb4Y93x1wUOMgw=; b=ENLX9GJ++w7cVDebm5LOz+anael4peV1aZdS27vbKd+tKAf2GwxkRUFTCs5eiQSLWr kz2g77jiQRZPLmCUHao6Rmnnir9BFGr+VswNzGY6CfYpzoFbGk3sSoJ3tak5HuRBY6hQ iuzVPUy8ryAFH87OcPxNviaJCZgpvuMmp6IwOkB0sc42PFNQZmhsEKHOwbW0Nru0wveW G62d1y2HLM6x3pBi/XpDYflZjFEutApyhp+Py18rLJwn8zzVruxOp1TMfymy9P3+Bwwb QZuOp3JVPFecOSrEYYvr7mORu/6cH2m3Yljy4lZX8HcA4bDfMbGsB21wER6LLLu0Hvwf rifA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646386; x=1752251186; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=jqlZAnmBIz+XGT4xT8k9tvPtNPsv+Nb4Y93x1wUOMgw=; b=Dos3cOq1MDcEw1iX6nlTBXj5fs2h5g6ikVZZ0UKrdXQdPwcqK3wSarPRBqP6b0TcW3 Og/MJwvi5/0Uprx9plabkN/iBv1jQONst5/1uuzy+qrUGQ1YJDcZ684xlYoAeEYAFCux 8544VbEL93SgAcEjl1wr02Rl1JtTmzkatVjxjBUVO1QtWD4p4m+xYFyEzDulltAIn0DK FmfvTy7QmT9wxZXrDzZ+J2F/57+axmZkoFr1Ho1kUIV+5h7VXr545o3df0puCYk1OPwv I4101IBsIuwYKyR2TEEqiAwmmOlXBZ2CaqkdTdtweZUF8PTAw5YWCwNQOExtbkRULGJh KPHg== X-Gm-Message-State: AOJu0YzvRJQRTL5P8G0ULU6EhyW2pmaqyHKEWD9FUeQa0HF7sJnO+XEx qB3Dapw9Thqp8TjU1kG88selcQNY0FHf6Ka9mHwCslbQxnpI8Pnm5y7z7lDE7Fljzjd2ApMKref 8ds37 X-Gm-Gg: ASbGncsQU5YYJ7wxA44o5nAK9Swrvf8Q+DlrHGEVEc+KgfOdbsUiTok5mlLs8DQV69s 3pFGfYLkM1yOCHIunQek/x4wxQwCNyKT0ZITdLPrmXe0QAmJF33f0tZk0rUMaJU8gnxCe8Qqrcd YVWkYoje6L+HP4tJcGqCzx1PLSJtVb7nQs4Wa6QM86tAw0LTB1gd4ZjnFdcFvNztK8DXPE0hp2L ol7Rhgwaz3bIuJAeFIMesCFuSSGjsN5C46PAVKvEG+q+UGJiWYdGR9p1QCTzE1s7wt5Md/SOAf6 M4qj2kNyuDZvLJRU6cdfKdAwEH8r1DUbFK6DBg+2p1ZO+c6Nu0IJB3BlLaXDs16xTm13 X-Google-Smtp-Source: AGHT+IE5pQzB5tTjjppJiTPYYzEsMmzgfbczxp7QH34/KxpsRmeDKWPdxlGplYvBXVqlfI/0k7yo3w== X-Received: by 2002:a05:600c:348d:b0:43c:ec4c:25b4 with SMTP id 5b1f17b1804b1-454b3094853mr36137445e9.10.1751646385979; Fri, 04 Jul 2025 09:26:25 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 087/119] target/arm: Move scale by esz into helper_sve_while* Date: Fri, 4 Jul 2025 17:24:27 +0100 Message-ID: <20250704162501.249138-88-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::332; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x332.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751647097603116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Change the API to pass element count rather than bit count. This will be helpful later for predicate as counter. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-76-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/sve_helper.c | 2 ++ target/arm/tcg/translate-sve.c | 13 +++++-------- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/target/arm/tcg/sve_helper.c b/target/arm/tcg/sve_helper.c index 5e11e86e5e0..b8f3fbb816c 100644 --- a/target/arm/tcg/sve_helper.c +++ b/target/arm/tcg/sve_helper.c @@ -4133,6 +4133,7 @@ uint32_t HELPER(sve_whilel)(void *vd, uint32_t count,= uint32_t pred_desc) uint64_t esz_mask =3D pred_esz_masks[esz]; ARMPredicateReg *d =3D vd; =20 + count <<=3D esz; memset(d, 0, sizeof(*d)); do_whilel(d, esz_mask, count, oprbits); return pred_count_test(oprbits, count, false); @@ -4165,6 +4166,7 @@ uint32_t HELPER(sve_whileg)(void *vd, uint32_t count,= uint32_t pred_desc) uint64_t esz_mask =3D pred_esz_masks[esz]; ARMPredicateReg *d =3D vd; =20 + count <<=3D esz; memset(d, 0, sizeof(*d)); do_whileg(d, esz_mask, count, oprbits); return pred_count_test(oprbits, count, true); diff --git a/target/arm/tcg/translate-sve.c b/target/arm/tcg/translate-sve.c index 210a029ab84..f74f2bb1b38 100644 --- a/target/arm/tcg/translate-sve.c +++ b/target/arm/tcg/translate-sve.c @@ -3198,9 +3198,6 @@ static bool trans_WHILE(DisasContext *s, arg_WHILE *a) t2 =3D tcg_temp_new_i32(); tcg_gen_extrl_i64_i32(t2, t0); =20 - /* Scale elements to bits. */ - tcg_gen_shli_i32(t2, t2, a->esz); - desc =3D FIELD_DP32(desc, PREDDESC, OPRSZ, vsz / 8); desc =3D FIELD_DP32(desc, PREDDESC, ESZ, a->esz); =20 @@ -3234,7 +3231,7 @@ static bool trans_WHILE_ptr(DisasContext *s, arg_WHIL= E_ptr *a) op0 =3D read_cpu_reg(s, a->rn, 1); op1 =3D read_cpu_reg(s, a->rm, 1); =20 - tmax =3D tcg_constant_i64(vsz); + tmax =3D tcg_constant_i64(vsz >> a->esz); diff =3D tcg_temp_new_i64(); =20 if (a->rw) { @@ -3244,15 +3241,15 @@ static bool trans_WHILE_ptr(DisasContext *s, arg_WH= ILE_ptr *a) tcg_gen_sub_i64(diff, op0, op1); tcg_gen_sub_i64(t1, op1, op0); tcg_gen_movcond_i64(TCG_COND_GEU, diff, op0, op1, diff, t1); - /* Round down to a multiple of ESIZE. */ - tcg_gen_andi_i64(diff, diff, -1 << a->esz); + /* Divide, rounding down, by ESIZE. */ + tcg_gen_shri_i64(diff, diff, a->esz); /* If op1 =3D=3D op0, diff =3D=3D 0, and the condition is always t= rue. */ tcg_gen_movcond_i64(TCG_COND_EQ, diff, op0, op1, tmax, diff); } else { /* WHILEWR */ tcg_gen_sub_i64(diff, op1, op0); - /* Round down to a multiple of ESIZE. */ - tcg_gen_andi_i64(diff, diff, -1 << a->esz); + /* Divide, rounding down, by ESIZE. */ + tcg_gen_shri_i64(diff, diff, a->esz); /* If op0 >=3D op1, diff <=3D 0, the condition is always true. */ tcg_gen_movcond_i64(TCG_COND_GEU, diff, op0, op1, tmax, diff); } --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647440; cv=none; d=zohomail.com; s=zohoarc; b=MfS6QJ57rRixYBaG1Qm76N4dlY1Ktm2fyqn51R6Kir4ZVfj64gWsJl3061jORPRhZbsDiMX/ELMBNyi6Jsj975m1CwNnlwLob4gqy4JbhG55Q+3x+9J3adTcDR2dLmjYQZUO7I3uHGi1WAK000LQWkvbde+upJzHNtJP2Duv62o= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647440; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=J4AjWlLcQzRJMk4zTnwVIKd1mI/AdtOF3eG8HhuX0Cc=; b=MvsztDnUmUp6Mj0JQolAiWNmBR4vBhWXqHUElSBJAx19UCwO4VYm4StpYqXO9hSo7i7acLFSrX9elJNWe1zvVkoTu2kz4cs2wQev98zYzq5UCFcLftAp1AlTUFwT4o1q01ZsMVXeJ0McPpd8MmxjNIv/bN8gDtycnuPAdEi7ai0= 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 1751647440884808.702901604208; Fri, 4 Jul 2025 09:44:00 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjFQ-0004Pm-9y; Fri, 04 Jul 2025 12:26:48 -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 1uXjF8-0002dt-Jp for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:31 -0400 Received: from mail-wm1-x32d.google.com ([2a00:1450:4864:20::32d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjF6-0006r7-L5 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:30 -0400 Received: by mail-wm1-x32d.google.com with SMTP id 5b1f17b1804b1-453647147c6so9827465e9.2 for ; Fri, 04 Jul 2025 09:26:27 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.26.26 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:26:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646387; x=1752251187; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=J4AjWlLcQzRJMk4zTnwVIKd1mI/AdtOF3eG8HhuX0Cc=; b=Ro+e38QykMzERNdY5/9EF5+MHFJn0wX1m6q8aYUVCnWvkb4qsjsn4ZVhyBV6MQV3UP ulp62I5FZpe5yZNphPgiW0qsAIsBc52d7vGk9dW9/cNXdheyy0NLgaNMZBpMHU4uPwCD OnK6CnJB+UASs7gSStL+v0Di9m7EXVGjrA+zO85tYg3O3uQkVjVm/pUle1r2r/bKsf+F rvFUso3OjA2xI0inNziJ7ztjW+bb1/f4Vz0AVFqnGTd6EYQWyZhHz14fFALrTfp6XVya jXBobxNg1Lh6iCwzXTUP2vPrWbBHm6Q+Ej+RodO0g5aJRpc4oO5gHZQb2JmwdB4uY8JW x/yA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646387; x=1752251187; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=J4AjWlLcQzRJMk4zTnwVIKd1mI/AdtOF3eG8HhuX0Cc=; b=ZLjJ9NQHnjXNYSTVWZLwponvOPrk8igOjQwH5a07pF+JUsQ0kb5JZYTjkSZfP2cbE8 Nzswt/VApCxdSWq2fx9Zh4i/fJbwj8j+hRjRCZfaf0IlLeEGfJWG79e8IbAKvXpwjydF UVsfpADlJv7rnYOpfSIF+uMIjlNCROBM7rUzOsGjgvfAzanIrn+tTBo77jiKy+bBXvuZ hr4M3TndO+wc+f695RdGT2/T5igOsEzYlfbyhId6SYyzV8g6/baq2+j9XhR20eLfnCan Mu1OjS7fgVpUihpteGVMDrUJDWpF54zWdx7hhkVbwIKPTVy5BoFcPXZmwd4hbte12LyH HuEg== X-Gm-Message-State: AOJu0Yz7AZ+y+2E0RcbXMfti1YCCv6DtPxq3F7XcvdALU2F3NaQcSZ/1 +pkbceRS6YTfrDjpNiBr442BWgPuZTGx+UGllVkCkdCrQ5enDR2KFyibY/y10bkzvcYjSIir2HB K5fN0 X-Gm-Gg: ASbGncvrKF2JTNv5YJpETziwzwts1yUiLceZgZJK59bsO7xHaa+4hHEyKS+uc7ctK8H /b4q4dhgcIkP9rORMXSEk3ysaSDLB+I8nMmAZ4/bMp/LdwhQ7lKkkW9AEqekokbSxCOQNZ28Ozg 1k8UeTa5qKg28DQynvh4e1LcCyxVwEZVIicNDgQ72gYuAASYuc700yhxlmTaD8MTvfBvftOStMn OTC34jwlGGOpE9MSfSRRPzWnJ93vxh3qJtg9WGz7pZ+81odGeKMgEuDxzuCbxBSbLEbi/dqiYNc f41AgAVi+PYckEuVwDIw5BqAMaurow5PLy+LfelJKDJXn4n6KN8wXSesBDj+u+DOWV3Q X-Google-Smtp-Source: AGHT+IFgAlYwRlN8wRoG4SQvEe+AU4Uo36serLNkhO0c6tzzoXazCutSgHt11e3RhJ2MV3+lKrs6CA== X-Received: by 2002:a5d:5f8e:0:b0:3a6:ec1b:5742 with SMTP id ffacd0b85a97d-3b4964f9403mr2847514f8f.22.1751646386829; Fri, 04 Jul 2025 09:26:26 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 088/119] target/arm: Split trans_WHILE to lt and gt Date: Fri, 4 Jul 2025 17:24:28 +0100 Message-ID: <20250704162501.249138-89-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::32d; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x32d.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751647441257116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Use TRANS_FEAT to select the correct predicate. Pass the helper and a boolean to do_WHILE. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-77-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/sve.decode | 4 +++- target/arm/tcg/translate-sve.c | 23 +++++++++-------------- 2 files changed, 12 insertions(+), 15 deletions(-) diff --git a/target/arm/tcg/sve.decode b/target/arm/tcg/sve.decode index dcfc40ef44b..c90d975ebf7 100644 --- a/target/arm/tcg/sve.decode +++ b/target/arm/tcg/sve.decode @@ -789,7 +789,9 @@ SINCDECP_z 00100101 .. 1010 d:1 u:1 10000 00 .... = ..... @incdec2_pred CTERM 00100101 1 sf:1 1 rm:5 001000 rn:5 ne:1 0000 =20 # SVE integer compare scalar count and limit -WHILE 00100101 esz:2 1 rm:5 000 sf:1 u:1 lt:1 rn:5 eq:1 rd:4 +&while esz rd rn rm sf u eq +WHILE_lt 00100101 esz:2 1 rm:5 000 sf:1 u:1 1 rn:5 eq:1 rd:4 &while +WHILE_gt 00100101 esz:2 1 rm:5 000 sf:1 u:1 0 rn:5 eq:1 rd:4 &while =20 # SVE2 pointer conflict compare WHILE_ptr 00100101 esz:2 1 rm:5 001 100 rn:5 rw:1 rd:4 diff --git a/target/arm/tcg/translate-sve.c b/target/arm/tcg/translate-sve.c index f74f2bb1b38..62d3e2efd69 100644 --- a/target/arm/tcg/translate-sve.c +++ b/target/arm/tcg/translate-sve.c @@ -3108,7 +3108,8 @@ static bool trans_CTERM(DisasContext *s, arg_CTERM *a) return true; } =20 -static bool trans_WHILE(DisasContext *s, arg_WHILE *a) +typedef void gen_while_fn(TCGv_i32, TCGv_ptr, TCGv_i32, TCGv_i32); +static bool do_WHILE(DisasContext *s, arg_while *a, bool lt, gen_while_fn = *fn) { TCGv_i64 op0, op1, t0, t1, tmax; TCGv_i32 t2; @@ -3118,14 +3119,8 @@ static bool trans_WHILE(DisasContext *s, arg_WHILE *= a) TCGCond cond; uint64_t maxval; /* Note that GE/HS has a->eq =3D=3D 0 and GT/HI has a->eq =3D=3D 1. */ - bool eq =3D a->eq =3D=3D a->lt; + bool eq =3D a->eq =3D=3D lt; =20 - /* The greater-than conditions are all SVE2. */ - if (a->lt - ? !dc_isar_feature(aa64_sve, s) - : !dc_isar_feature(aa64_sve2, s)) { - return false; - } if (!sve_access_check(s)) { return true; } @@ -3149,7 +3144,7 @@ static bool trans_WHILE(DisasContext *s, arg_WHILE *a) t0 =3D tcg_temp_new_i64(); t1 =3D tcg_temp_new_i64(); =20 - if (a->lt) { + if (lt) { tcg_gen_sub_i64(t0, op1, op0); if (a->u) { maxval =3D a->sf ? UINT64_MAX : UINT32_MAX; @@ -3204,15 +3199,15 @@ static bool trans_WHILE(DisasContext *s, arg_WHILE = *a) ptr =3D tcg_temp_new_ptr(); tcg_gen_addi_ptr(ptr, tcg_env, pred_full_reg_offset(s, a->rd)); =20 - if (a->lt) { - gen_helper_sve_whilel(t2, ptr, t2, tcg_constant_i32(desc)); - } else { - gen_helper_sve_whileg(t2, ptr, t2, tcg_constant_i32(desc)); - } + fn(t2, ptr, t2, tcg_constant_i32(desc)); + do_pred_flags(t2); return true; } =20 +TRANS_FEAT(WHILE_lt, aa64_sve, do_WHILE, a, true, gen_helper_sve_whilel) +TRANS_FEAT(WHILE_gt, aa64_sve2, do_WHILE, a, false, gen_helper_sve_whileg) + static bool trans_WHILE_ptr(DisasContext *s, arg_WHILE_ptr *a) { TCGv_i64 op0, op1, diff, t1, tmax; --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646976; cv=none; d=zohomail.com; s=zohoarc; b=W9qoVef6GOoQ76PhaWSbb2qw+uUAwLLNol5if+IGPZZ1FWw6a/89d7fzB/MyJ5C/Fzn5yy3F9d1qH5DCZJRMSxR6p6MzfI5pti/n1wwx+/3L4/djfJo5dBe+Sl71Kh0WdZNlezIVCHlrkPav+U+1JFABwZBM+u7XLee06RJ4MeE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646976; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=PcYeEZexeoPGuiuqnCkDIO//jKT7XOFYWx8s1iiYCDY=; b=BnrxNiCBRDgauqnvPVrQGCD0Nsum92RMX5kkKQnse9gnJHwDOfWeIvqJs1hxyvSC4ET4JMa7mWrHqOIf0K7cb+lgfzNIdOzi1YdWRPba6e9bZ9zugbPNB6fnEcl9yfRU7zzUjilxKHBW4YMXPFbVgN3XurWCE8m64dTIqsPEQhI= 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 1751646976570338.1059438537055; Fri, 4 Jul 2025 09:36:16 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjFI-0003aa-V4; Fri, 04 Jul 2025 12:26:41 -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 1uXjF9-0002j0-LL for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:31 -0400 Received: from mail-wr1-x42d.google.com ([2a00:1450:4864:20::42d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjF7-0006rH-5V for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:31 -0400 Received: by mail-wr1-x42d.google.com with SMTP id ffacd0b85a97d-3a50956e5d3so814095f8f.1 for ; Fri, 04 Jul 2025 09:26:28 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.26.26 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:26:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646388; x=1752251188; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=PcYeEZexeoPGuiuqnCkDIO//jKT7XOFYWx8s1iiYCDY=; b=j3YhfrbcMHTrEbxd5i1I66UUx+EEUptsxkNCCVtn2LABOaSrV/NWJm071cwYG9nBYN immuCbrX4z3t0kd9TXNKx08JBVUAV+cnBuqyBvk35k0TQkGa6beLYMbMrP30YrEEDeBL Vnhr24HRPtrAcZ1algLMnTkun4vfqQafXYf1lHZSKNotdy+hFR7Zv/WJWnDf+i/LbfO4 qFsRJMdZFnK/51wbEooN4QTiQPuX6rBfPUw3/b4Gbab6Fw9MsPFuKYuLrBDejNzX1xB0 Csgn9HyTCeiy7IxHRJWjrd0eUy2FOrmUyTUqjjFhOE54lC0aLWJLRp87GEW9J/bH0dN2 trqQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646388; x=1752251188; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=PcYeEZexeoPGuiuqnCkDIO//jKT7XOFYWx8s1iiYCDY=; b=FF8ro9WeSFO4LSkt8lHNAYZHfR6Cx9LgdaUdrdci9jvyzWkEiUlVrST3hYoRvukUDA +kxlfLnMRnlA5XCJMswfRYrMc9xhjiCJznxgcZvU7BTlBLN0CQXbDORt6E1AjzLq+7fq 27bba236PNyzdiZoduTOdsWMQkoSnI8HPbhbjUt+FZcbPZSMMsjpGUkBIIUqcwDlL/YM XDkRjwQIRl932C0oUzlkG5/B/pzVPyALzIVRjQHTD4zhmUGgwFXxSYXeQaGMSzgsUvGl FrCjSBjVqmgiYs4QnDn67CUyug+WFOYUIsCKQKYJLkK07C6BEUr4BP7hA3UHJZAiIuwi UTsA== X-Gm-Message-State: AOJu0Yz/J/GOJ7L8oS33PV6qPtcwvHs32Hk3/Q/f2wt7R+YQJ8emvV/z m9FHf8hfKySyWYxLr6fGt2sTwGle28AkWBhtf19cORM/zowaatemShDqtWXyzTTITchGTTizw+q l/kxC X-Gm-Gg: ASbGncvy+XZYdB4izbFRhBVQUM1bmMzzUXhMBkwdpDpAwsCH4nV5hMsAnJSuHrpwU3E XWSs4cW4RiG3fy1wwKTBnG+ikIvbPrX7qELt0Lva+ErvneNjwYrYvU0vZR1KTvjxYkZXnuyO3lD BgYsgoUnL19Laa2XylFD6ngryUuj6B6f+pNU04vJf6U1q/QlAP7+Jnsy/MTxfUnPhSaxDDW9qho mqMh53io9ykJ26L0L+WwD4o9ay/Qk+BKJBxTfWpnDdxo5NB33RY+W4Pn6hWSH5qYRBgiQKv+gjT JNYOclntNro/LA+z0XPEMwWKsGgsdLL23onIYs35KkeLosZmLhurlN6qLZXT6GxKYH/hqIhTHEP 3FOw= X-Google-Smtp-Source: AGHT+IESMbhQkkkHa6UAr2x2MLgyNezXui8j5IaWluMNCgD9g0lW99wlD1UM0CQX1cwvHTDQDmcVpw== X-Received: by 2002:a5d:452f:0:b0:3b3:a6b2:9cd3 with SMTP id ffacd0b85a97d-3b496604df8mr2883010f8f.48.1751646387649; Fri, 04 Jul 2025 09:26:27 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 089/119] target/arm: Enable PSEL for SVE2p1 Date: Fri, 4 Jul 2025 17:24:29 +0100 Message-ID: <20250704162501.249138-90-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::42d; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x42d.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751646977972116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-78-richard.henderson@linaro.org This instruction is present in both SME(1) and SVE2.1 extensions. Signed-off-by: Richard Henderson Signed-off-by: Peter Maydell --- target/arm/tcg/translate-sve.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/target/arm/tcg/translate-sve.c b/target/arm/tcg/translate-sve.c index 62d3e2efd69..cb60b533e9f 100644 --- a/target/arm/tcg/translate-sve.c +++ b/target/arm/tcg/translate-sve.c @@ -7273,7 +7273,7 @@ static bool trans_PSEL(DisasContext *s, arg_psel *a) TCGv_i64 tmp, didx, dbit; TCGv_ptr ptr; =20 - if (!dc_isar_feature(aa64_sme, s)) { + if (!dc_isar_feature(aa64_sme_or_sve2p1, s)) { return false; } if (!sve_access_check(s)) { --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646797; cv=none; d=zohomail.com; s=zohoarc; b=ZJ6XifIDBgle3ILDw01ecgD44SYmH0WgUgvGvgJ3pECYiDNDM1wG8ynYTUgoQf4ti+8H6lZ2iRk31g2JNTEg9vNxpcccDXg3Va+mP8KC+y/7xyYuig+Ll6kYQFpPv0cruU3+y98WsdF7T0NzH5AoxOzOlF9NXk5t2UZFxBhF9kA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646797; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=WblDLYF/Cbkd1WD9TY2HvCXMocgLzOeX/KpterAV7/I=; b=DN1JVWa0Zewq6Z+2bRbihP10AtVPLzRlf3VE8CyFVCQllOBsy22fhuuKvH8GZZgFJZIl3tvMOEYFy7TvWu7Ejm/ifyv395VfCiELO7UqRI4HSYXlScY4sTfi2h/zUDsjN7OVLNDeArray3wj7y6htfa2mgOqrTG0lKBsU2mxCM0= 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 1751646797255261.71566077616444; Fri, 4 Jul 2025 09:33:17 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjFU-0004xk-Pu; Fri, 04 Jul 2025 12:26:52 -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 1uXjFA-0002m7-0l for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:32 -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 1uXjF8-0006rW-3g for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:31 -0400 Received: by mail-wm1-x32f.google.com with SMTP id 5b1f17b1804b1-453647147c6so9827645e9.2 for ; Fri, 04 Jul 2025 09:26:29 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.26.27 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:26:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646388; x=1752251188; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=WblDLYF/Cbkd1WD9TY2HvCXMocgLzOeX/KpterAV7/I=; b=qGoL8Y+Tgh6AWq27/G8q0owrFs9hDi2nbDLaKzKOwb1iyHT0t3Q7xt3QXt3ROb9RcD 78IQv+ooCeCVv/44cBju3ZT66uo7FwsNC1xGreYbZIgL+7bCW0hrr18VfwkDvd/VSEdS pZXbO5rZIO3nK8IqgSkDQZtfKa0aYk0TiRAQni6QXsJlsfFyqbOkXkJM+djSRdpt2zdz DkPvNjdHvFGfi8Uu7FwJnRJGEc4r2cQ6GLytQvlIoVRllMEEyPMurl8HzyrWqNFav/8U kEoYiLX8ERLrZFpzdPVgnWbhl9Z4Lll0PKhglOD9P5n+eIhpT0SmP/7t2RL1B8oxiTKk CtLw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646388; x=1752251188; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=WblDLYF/Cbkd1WD9TY2HvCXMocgLzOeX/KpterAV7/I=; b=dqxEZIlYp+TZMCa+GLd41NaJ61oAFel6Oc/oCHTAiTzuY4Mx1/DtnNfmD4YufcPtUP Afd1AjsljZi1bLVOsZiy2ECUzAghlAPuU4uzxJEw7zMHz6qt8ne0HewIQ1cYNcGC72T+ iK3R4ijXgVqwlxnafSVGbpxzV1iko0UvcCoRRpSH9S8Q6R27k2ut1xJD4lruwxX4AoVs 2ry2XWpkwb6ckihAVVsRlKPlXi6SYMzhxzaUf/oZ99iUrenG/tWGR83NUfNhRgTRcs07 76snraDbC5JyNK8gbeu7dzJS72pJQIZmJNOo5A3uf5Pbt5ISL8zsCnLgNvTmz3k+IMWS Mv0A== X-Gm-Message-State: AOJu0YynqZyta/oyiHcbEmdg177JgMiNLi7nc0RsjBwn4M0Q8D+1laLS 6ZC20de/BBnPdAPzOfFbRbPYtGmZfh7XkyZ7o0ZXUjcYqJk8g+XKkg2I5sVXOz2mm2yZ4Y9ltsd 7jyLF X-Gm-Gg: ASbGncvKqXSo8WlwQ/1SAsOC/PjOujpfPfCDOZdL7Q/qQoAcKUwpfB1tEfcXPedCPsW 7xadifYHXkF2XQD21OwH+0yt/mqFp4+b3JVM5WzOwkXSCUmjm+Pe1JwwNvfAQKRWKQsyYiKiDsf Bd1qXU2MDgsnuWF2+FW/9s/JnJZpiZmrD0vu1FThqWkOqByWH11H97DhCExGnOHud5a7nMnoCYs OCmGkkcYEyaZCgbzVu0WPhN0G8nF8MBMqW1tLZpE03b2+f9afSXSMBTToQIJMijlcnOWvbLB6XF RkfkqS38vLmRsxyDzxis6QzV0oZnv5r6tMxzZ4hbYFIDjtZPbkC/z4eiGpGwX/0HgHpr X-Google-Smtp-Source: AGHT+IFHoW7/iXEQCwFQipqd4BpXeC2hBohQfmPOozDyPvJZrhuh3uLliMOPJiVLhD7EjUZ92MY/rg== X-Received: by 2002:a05:6000:4714:b0:3a5:8d0b:600c with SMTP id ffacd0b85a97d-3b4964f368bmr3225741f8f.3.1751646388497; Fri, 04 Jul 2025 09:26:28 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 090/119] target/arm: Implement SVE2p1 WHILE (predicate pair) Date: Fri, 4 Jul 2025 17:24:30 +0100 Message-ID: <20250704162501.249138-91-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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=peter.maydell@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 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: 1751646797847116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-79-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/helper-sve.h | 3 +++ target/arm/tcg/sve.decode | 8 +++++++ target/arm/tcg/sve_helper.c | 40 ++++++++++++++++++++++++++++++++++ target/arm/tcg/translate-sve.c | 14 ++++++++---- 4 files changed, 61 insertions(+), 4 deletions(-) diff --git a/target/arm/tcg/helper-sve.h b/target/arm/tcg/helper-sve.h index 0b1b5887834..eac23e75b9b 100644 --- a/target/arm/tcg/helper-sve.h +++ b/target/arm/tcg/helper-sve.h @@ -941,6 +941,9 @@ DEF_HELPER_FLAGS_3(sve_cntp, TCG_CALL_NO_RWG, i64, ptr,= ptr, i32) DEF_HELPER_FLAGS_3(sve_whilel, TCG_CALL_NO_RWG, i32, ptr, i32, i32) DEF_HELPER_FLAGS_3(sve_whileg, TCG_CALL_NO_RWG, i32, ptr, i32, i32) =20 +DEF_HELPER_FLAGS_3(sve_while2l, TCG_CALL_NO_RWG, i32, ptr, i32, i32) +DEF_HELPER_FLAGS_3(sve_while2g, TCG_CALL_NO_RWG, i32, ptr, i32, i32) + DEF_HELPER_FLAGS_4(sve_subri_b, TCG_CALL_NO_RWG, void, ptr, ptr, i64, i32) DEF_HELPER_FLAGS_4(sve_subri_h, TCG_CALL_NO_RWG, void, ptr, ptr, i64, i32) DEF_HELPER_FLAGS_4(sve_subri_s, TCG_CALL_NO_RWG, void, ptr, ptr, i64, i32) diff --git a/target/arm/tcg/sve.decode b/target/arm/tcg/sve.decode index c90d975ebf7..968b2a57e97 100644 --- a/target/arm/tcg/sve.decode +++ b/target/arm/tcg/sve.decode @@ -796,6 +796,14 @@ WHILE_gt 00100101 esz:2 1 rm:5 000 sf:1 u:1 0 r= n:5 eq:1 rd:4 &while # SVE2 pointer conflict compare WHILE_ptr 00100101 esz:2 1 rm:5 001 100 rn:5 rw:1 rd:4 =20 +# SVE2.1 predicate pair +%pd_pair 1:3 !function=3Dtimes_2 +@while_pair ........ esz:2 . rm:5 .... u:1 . rn:5 . ... eq:1 \ + &while rd=3D%pd_pair sf=3D1 + +WHILE_lt_pair 00100101 .. 1 ..... 0101 . 1 ..... 1 ... . @while_pair +WHILE_gt_pair 00100101 .. 1 ..... 0101 . 0 ..... 1 ... . @while_pair + ### SVE Integer Wide Immediate - Unpredicated Group =20 # SVE broadcast floating-point immediate (unpredicated) diff --git a/target/arm/tcg/sve_helper.c b/target/arm/tcg/sve_helper.c index b8f3fbb816c..30394f4880e 100644 --- a/target/arm/tcg/sve_helper.c +++ b/target/arm/tcg/sve_helper.c @@ -4139,6 +4139,26 @@ uint32_t HELPER(sve_whilel)(void *vd, uint32_t count= , uint32_t pred_desc) return pred_count_test(oprbits, count, false); } =20 +uint32_t HELPER(sve_while2l)(void *vd, uint32_t count, uint32_t pred_desc) +{ + uint32_t oprsz =3D FIELD_EX32(pred_desc, PREDDESC, OPRSZ); + uint32_t esz =3D FIELD_EX32(pred_desc, PREDDESC, ESZ); + uint32_t oprbits =3D oprsz * 8; + uint64_t esz_mask =3D pred_esz_masks[esz]; + ARMPredicateReg *d =3D vd; + + count <<=3D esz; + memset(d, 0, 2 * sizeof(*d)); + if (count <=3D oprbits) { + do_whilel(&d[0], esz_mask, count, oprbits); + } else { + do_whilel(&d[0], esz_mask, oprbits, oprbits); + do_whilel(&d[1], esz_mask, count - oprbits, oprbits); + } + + return pred_count_test(2 * oprbits, count, false); +} + /* D must be cleared on entry. */ static void do_whileg(ARMPredicateReg *d, uint64_t esz_mask, uint32_t count, uint32_t oprbits) @@ -4172,6 +4192,26 @@ uint32_t HELPER(sve_whileg)(void *vd, uint32_t count= , uint32_t pred_desc) return pred_count_test(oprbits, count, true); } =20 +uint32_t HELPER(sve_while2g)(void *vd, uint32_t count, uint32_t pred_desc) +{ + uint32_t oprsz =3D FIELD_EX32(pred_desc, PREDDESC, OPRSZ); + uint32_t esz =3D FIELD_EX32(pred_desc, PREDDESC, ESZ); + uint32_t oprbits =3D oprsz * 8; + uint64_t esz_mask =3D pred_esz_masks[esz]; + ARMPredicateReg *d =3D vd; + + count <<=3D esz; + memset(d, 0, 2 * sizeof(*d)); + if (count <=3D oprbits) { + do_whileg(&d[1], esz_mask, count, oprbits); + } else { + do_whilel(&d[1], esz_mask, oprbits, oprbits); + do_whileg(&d[0], esz_mask, count - oprbits, oprbits); + } + + return pred_count_test(2 * oprbits, count, true); +} + /* Recursive reduction on a function; * C.f. the ARM ARM function ReducePredicated. * diff --git a/target/arm/tcg/translate-sve.c b/target/arm/tcg/translate-sve.c index cb60b533e9f..de6ffe75114 100644 --- a/target/arm/tcg/translate-sve.c +++ b/target/arm/tcg/translate-sve.c @@ -3109,7 +3109,8 @@ static bool trans_CTERM(DisasContext *s, arg_CTERM *a) } =20 typedef void gen_while_fn(TCGv_i32, TCGv_ptr, TCGv_i32, TCGv_i32); -static bool do_WHILE(DisasContext *s, arg_while *a, bool lt, gen_while_fn = *fn) +static bool do_WHILE(DisasContext *s, arg_while *a, + bool lt, int scale, gen_while_fn *fn) { TCGv_i64 op0, op1, t0, t1, tmax; TCGv_i32 t2; @@ -3164,7 +3165,7 @@ static bool do_WHILE(DisasContext *s, arg_while *a, b= ool lt, gen_while_fn *fn) } } =20 - tmax =3D tcg_constant_i64(vsz >> a->esz); + tmax =3D tcg_constant_i64((vsz << scale) >> a->esz); if (eq) { /* Equality means one more iteration. */ tcg_gen_addi_i64(t0, t0, 1); @@ -3205,8 +3206,13 @@ static bool do_WHILE(DisasContext *s, arg_while *a, = bool lt, gen_while_fn *fn) return true; } =20 -TRANS_FEAT(WHILE_lt, aa64_sve, do_WHILE, a, true, gen_helper_sve_whilel) -TRANS_FEAT(WHILE_gt, aa64_sve2, do_WHILE, a, false, gen_helper_sve_whileg) +TRANS_FEAT(WHILE_lt, aa64_sve, do_WHILE, a, true, 0, gen_helper_sve_whilel) +TRANS_FEAT(WHILE_gt, aa64_sve2, do_WHILE, a, false, 0, gen_helper_sve_whil= eg) + +TRANS_FEAT(WHILE_lt_pair, aa64_sme2_or_sve2p1, do_WHILE, + a, true, 1, gen_helper_sve_while2l) +TRANS_FEAT(WHILE_gt_pair, aa64_sme2_or_sve2p1, do_WHILE, + a, false, 1, gen_helper_sve_while2g) =20 static bool trans_WHILE_ptr(DisasContext *s, arg_WHILE_ptr *a) { --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647408; cv=none; d=zohomail.com; s=zohoarc; b=lbUZCW+k3jisfAIcI/Co8A9qYEYdodhg/XLvmLIxF8f6HUwdN+6gzZTJQPZH0TsnU6lrqhvk0vTvJ6rjfz6jRrINiKV9F8N6scTxEUoKU2jI0QMn96GBNlCaFpp0gP4Irpul1SDX+dDaM8YKg+tq9Z/3QKejzWpQPM3LxqeiKqU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647408; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=m48sV9gW34cerkTvGT9yo8EwWXs9OIOJjkLcYx4eJTo=; b=lvWk4XBeYh3NtADQ2Dmtx1OubhIaJhfUIVfFEGbdaFJR2yJf9CNqkAcfJJGkTPsQMd0jg/uawz8JKhIjP+8jRc60P5bTMZEFX7ZrttKOGmihrljzZ0s5b9gC2yec/nTSkOyej4/Vvx9y36yx2wxBywGUIWaPDg3fe3Afl2hpsfw= 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 1751647408522216.9707619751307; Fri, 4 Jul 2025 09:43:28 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjGv-0000dv-AF; Fri, 04 Jul 2025 12:28:21 -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 1uXjFE-00034y-26 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:36 -0400 Received: from mail-wr1-x42c.google.com ([2a00:1450:4864:20::42c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjF9-0006rp-5n for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:35 -0400 Received: by mail-wr1-x42c.google.com with SMTP id ffacd0b85a97d-3a6d77b43c9so950944f8f.3 for ; Fri, 04 Jul 2025 09:26:30 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.26.28 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:26:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646390; x=1752251190; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=m48sV9gW34cerkTvGT9yo8EwWXs9OIOJjkLcYx4eJTo=; b=LXwaSge2YTTpnXYSjyarFrPa42VdaCDKZycPg9gt3D/wH4LbqxA+B6d85+sHqz3oOB 1vc5vReURsW6vcd4L4gRs+TuYpkpJ9vpIe16/hfvd1K6wqoAwzXLM1g5Y1eqAkbn7rao UrNb6F3Lcp4R7awPdylQ6J34yySM6eo1JXWw4EBOFWa51EXIOHvVNNFTj5fgXb7wXMqP 23fLzT3OetOqxx6nLe1Z9OhukxByLhxrJ/p8fQ6XNxnF3t08uKVRBYJqhDWBbYgHwhDQ B2F8QJI1XpwSIMsfX0E5zhbBpEyNvOT8vOQmFYWSCQ5VNqjvAe7w1eWCiNfZEVXcVsgz /K9Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646390; x=1752251190; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=m48sV9gW34cerkTvGT9yo8EwWXs9OIOJjkLcYx4eJTo=; b=Wj83cALZI0dt2lnMhARsV/f8EySj1RxywxrqdMaq8u0/ccWlrkH/OoymRQyqu+SthQ ET7ubbWCcJQGRx7TnRVWPMKsFLyjyB+vOmbxCutHZHAsDB9WgH4R/TG2TS5GCGBgjnpq a1Sws1yx1EFnS6+H4cqRpo5+VE3YVlrsi4FoADtkwJZFYUNeyL7ARaNmSKdYJGCgXnBj hRcFgPc7siklhYN4gIJfDOnW02S3cFlXtMeUsMj4R7ERohdIh5Jn1nMEOH1WWZUa29DF RcZEdvVpqTSpLP+cRJqYT2K+7N2cxsnODCgMo1TzxDe/4rx0sHffRbOxQsucRiZMlSfq MVGw== X-Gm-Message-State: AOJu0YwAXev2U8EWWMyoJ4k7kKZQDYn/Oa6Q0qRnoW8tEZ9kLdheiE6V z4+W13Upoo+HPKOitzHhNezm1jp+uU9cOfk5QBy8OoTY/wHwpEPSnwSFw00y8rbj1lMAWwLXi0F gG9Vd X-Gm-Gg: ASbGncs+ZOSh7cidd5lou4+jEDp/a1z3YJ3SihoKVB71yUULCUSvKHLLvcF4eACKc3m 0J7kZszKas4FyK9Lp5LstO1rezzNjixikzLqVunSQ+jG750pBWRZKF/nwjtMb2tZEOF932g0eLQ Dt/8Rxb0U9Twg2xLxZV7erqJwDfuahiv19vBrERkeGX8Eqz/z1Utf89pvtbEefhxIYv8jjzP5P0 yIfh5emiUadlMz3xDTPVnYlQgxvzsb+p8tPBtD7Ucpr4GG7z0CZbX+FkDwVIXxqmCxsLFyVVTEr ybqwd/upHaNIS7WH65ArtCa90yUYqJBB5Uoj3XQmc75v0RqjLf948FO6ghF20NrkER04 X-Google-Smtp-Source: AGHT+IHj8JJOZ2BHmJlQig0UNN8/4vb4/kogXYun+BxDEOe8/YWfh3hlLHqJ1Om+LkeApeew+9VoiQ== X-Received: by 2002:a5d:5f50:0:b0:3a4:dfa9:ce28 with SMTP id ffacd0b85a97d-3b4964f4df6mr2724316f8f.5.1751646389665; Fri, 04 Jul 2025 09:26:29 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 091/119] target/arm: Implement SVE2p1 WHILE (predicate as counter) Date: Fri, 4 Jul 2025 17:24:31 +0100 Message-ID: <20250704162501.249138-92-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::42c; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x42c.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751647411313116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-80-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/helper-sve.h | 3 ++ target/arm/tcg/sve.decode | 11 +++++++ target/arm/tcg/sve_helper.c | 53 ++++++++++++++++++++++++++++++++++ target/arm/tcg/translate-sve.c | 22 ++++++++++---- 4 files changed, 84 insertions(+), 5 deletions(-) diff --git a/target/arm/tcg/helper-sve.h b/target/arm/tcg/helper-sve.h index eac23e75b9b..74029c641bb 100644 --- a/target/arm/tcg/helper-sve.h +++ b/target/arm/tcg/helper-sve.h @@ -944,6 +944,9 @@ DEF_HELPER_FLAGS_3(sve_whileg, TCG_CALL_NO_RWG, i32, pt= r, i32, i32) DEF_HELPER_FLAGS_3(sve_while2l, TCG_CALL_NO_RWG, i32, ptr, i32, i32) DEF_HELPER_FLAGS_3(sve_while2g, TCG_CALL_NO_RWG, i32, ptr, i32, i32) =20 +DEF_HELPER_FLAGS_3(sve_whilecl, TCG_CALL_NO_RWG, i32, ptr, i32, i32) +DEF_HELPER_FLAGS_3(sve_whilecg, TCG_CALL_NO_RWG, i32, ptr, i32, i32) + DEF_HELPER_FLAGS_4(sve_subri_b, TCG_CALL_NO_RWG, void, ptr, ptr, i64, i32) DEF_HELPER_FLAGS_4(sve_subri_h, TCG_CALL_NO_RWG, void, ptr, ptr, i64, i32) DEF_HELPER_FLAGS_4(sve_subri_s, TCG_CALL_NO_RWG, void, ptr, ptr, i64, i32) diff --git a/target/arm/tcg/sve.decode b/target/arm/tcg/sve.decode index 968b2a57e97..389a72d8242 100644 --- a/target/arm/tcg/sve.decode +++ b/target/arm/tcg/sve.decode @@ -59,6 +59,8 @@ =20 %rn_ax2 6:4 !function=3Dtimes_2 =20 +%pnd 0:3 !function=3Dplus_8 + ########################################################################### # Named attribute sets. These are used to make nice(er) names # when creating helpers common to those for the individual @@ -804,6 +806,15 @@ WHILE_ptr 00100101 esz:2 1 rm:5 001 100 rn:5 rw:= 1 rd:4 WHILE_lt_pair 00100101 .. 1 ..... 0101 . 1 ..... 1 ... . @while_pair WHILE_gt_pair 00100101 .. 1 ..... 0101 . 0 ..... 1 ... . @while_pair =20 +# SVE2.1 predicate as count +@while_cnt ........ esz:2 . rm:5 .... u:1 . rn:5 . eq:1 ... \ + &while rd=3D%pnd sf=3D1 + +WHILE_lt_cnt2 00100101 .. 1 ..... 0100 . 1 ..... 1 . ... @while_cnt +WHILE_lt_cnt4 00100101 .. 1 ..... 0110 . 1 ..... 1 . ... @while_cnt +WHILE_gt_cnt2 00100101 .. 1 ..... 0100 . 0 ..... 1 . ... @while_cnt +WHILE_gt_cnt4 00100101 .. 1 ..... 0110 . 0 ..... 1 . ... @while_cnt + ### SVE Integer Wide Immediate - Unpredicated Group =20 # SVE broadcast floating-point immediate (unpredicated) diff --git a/target/arm/tcg/sve_helper.c b/target/arm/tcg/sve_helper.c index 30394f4880e..713642d4c89 100644 --- a/target/arm/tcg/sve_helper.c +++ b/target/arm/tcg/sve_helper.c @@ -4090,6 +4090,29 @@ uint64_t HELPER(sve_cntp)(void *vn, void *vg, uint32= _t pred_desc) return sum; } =20 +/* C.f. Arm pseudocode EncodePredCount */ +static uint64_t encode_pred_count(uint32_t elements, uint32_t count, + uint32_t esz, bool invert) +{ + uint32_t pred; + + if (count =3D=3D 0) { + return 0; + } + if (invert) { + count =3D elements - count; + } else if (count =3D=3D elements) { + count =3D 0; + invert =3D true; + } + + pred =3D (count << 1) | 1; + pred <<=3D esz; + pred |=3D invert << 15; + + return pred; +} + /* C.f. Arm pseudocode PredCountTest */ static uint32_t pred_count_test(uint32_t elements, uint32_t count, bool in= vert) { @@ -4159,6 +4182,21 @@ uint32_t HELPER(sve_while2l)(void *vd, uint32_t coun= t, uint32_t pred_desc) return pred_count_test(2 * oprbits, count, false); } =20 +uint32_t HELPER(sve_whilecl)(void *vd, uint32_t count, uint32_t pred_desc) +{ + uint32_t pl =3D FIELD_EX32(pred_desc, PREDDESC, OPRSZ); + uint32_t esz =3D FIELD_EX32(pred_desc, PREDDESC, ESZ); + uint32_t scale =3D FIELD_EX32(pred_desc, PREDDESC, DATA); + uint32_t vl =3D pl * 8; + uint32_t elements =3D (vl >> esz) << scale; + ARMPredicateReg *d =3D vd; + + *d =3D (ARMPredicateReg) { + .p[0] =3D encode_pred_count(elements, count, esz, false) + }; + return pred_count_test(elements, count, false); +} + /* D must be cleared on entry. */ static void do_whileg(ARMPredicateReg *d, uint64_t esz_mask, uint32_t count, uint32_t oprbits) @@ -4212,6 +4250,21 @@ uint32_t HELPER(sve_while2g)(void *vd, uint32_t coun= t, uint32_t pred_desc) return pred_count_test(2 * oprbits, count, true); } =20 +uint32_t HELPER(sve_whilecg)(void *vd, uint32_t count, uint32_t pred_desc) +{ + uint32_t pl =3D FIELD_EX32(pred_desc, PREDDESC, OPRSZ); + uint32_t esz =3D FIELD_EX32(pred_desc, PREDDESC, ESZ); + uint32_t scale =3D FIELD_EX32(pred_desc, PREDDESC, DATA); + uint32_t vl =3D pl * 8; + uint32_t elements =3D (vl >> esz) << scale; + ARMPredicateReg *d =3D vd; + + *d =3D (ARMPredicateReg) { + .p[0] =3D encode_pred_count(elements, count, esz, true) + }; + return pred_count_test(elements, count, true); +} + /* Recursive reduction on a function; * C.f. the ARM ARM function ReducePredicated. * diff --git a/target/arm/tcg/translate-sve.c b/target/arm/tcg/translate-sve.c index de6ffe75114..c93dca224ce 100644 --- a/target/arm/tcg/translate-sve.c +++ b/target/arm/tcg/translate-sve.c @@ -3110,7 +3110,7 @@ static bool trans_CTERM(DisasContext *s, arg_CTERM *a) =20 typedef void gen_while_fn(TCGv_i32, TCGv_ptr, TCGv_i32, TCGv_i32); static bool do_WHILE(DisasContext *s, arg_while *a, - bool lt, int scale, gen_while_fn *fn) + bool lt, int scale, int data, gen_while_fn *fn) { TCGv_i64 op0, op1, t0, t1, tmax; TCGv_i32 t2; @@ -3196,6 +3196,7 @@ static bool do_WHILE(DisasContext *s, arg_while *a, =20 desc =3D FIELD_DP32(desc, PREDDESC, OPRSZ, vsz / 8); desc =3D FIELD_DP32(desc, PREDDESC, ESZ, a->esz); + desc =3D FIELD_DP32(desc, PREDDESC, DATA, data); =20 ptr =3D tcg_temp_new_ptr(); tcg_gen_addi_ptr(ptr, tcg_env, pred_full_reg_offset(s, a->rd)); @@ -3206,13 +3207,24 @@ static bool do_WHILE(DisasContext *s, arg_while *a, return true; } =20 -TRANS_FEAT(WHILE_lt, aa64_sve, do_WHILE, a, true, 0, gen_helper_sve_whilel) -TRANS_FEAT(WHILE_gt, aa64_sve2, do_WHILE, a, false, 0, gen_helper_sve_whil= eg) +TRANS_FEAT(WHILE_lt, aa64_sve, do_WHILE, + a, true, 0, 0, gen_helper_sve_whilel) +TRANS_FEAT(WHILE_gt, aa64_sve2, do_WHILE, + a, false, 0, 0, gen_helper_sve_whileg) =20 TRANS_FEAT(WHILE_lt_pair, aa64_sme2_or_sve2p1, do_WHILE, - a, true, 1, gen_helper_sve_while2l) + a, true, 1, 0, gen_helper_sve_while2l) TRANS_FEAT(WHILE_gt_pair, aa64_sme2_or_sve2p1, do_WHILE, - a, false, 1, gen_helper_sve_while2g) + a, false, 1, 0, gen_helper_sve_while2g) + +TRANS_FEAT(WHILE_lt_cnt2, aa64_sme2_or_sve2p1, do_WHILE, + a, true, 1, 1, gen_helper_sve_whilecl) +TRANS_FEAT(WHILE_lt_cnt4, aa64_sme2_or_sve2p1, do_WHILE, + a, true, 2, 2, gen_helper_sve_whilecl) +TRANS_FEAT(WHILE_gt_cnt2, aa64_sme2_or_sve2p1, do_WHILE, + a, false, 1, 1, gen_helper_sve_whilecg) +TRANS_FEAT(WHILE_gt_cnt4, aa64_sme2_or_sve2p1, do_WHILE, + a, false, 2, 2, gen_helper_sve_whilecg) =20 static bool trans_WHILE_ptr(DisasContext *s, arg_WHILE_ptr *a) { --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647442; cv=none; d=zohomail.com; s=zohoarc; b=MxdkdGxOBkDdWyRGxlcjEjZkeYB1H9uAV9BMemXL+Iu59Ia7XLy+3SsIGBrbKq4bAwiRWm/i696Ir2Be+1vzGvJWdqZeQ9+9PKkBwpt8i2iX9gleHSuHYmLS8MfuQtiLWLBS9xBv2WBC5oz1sWFT8IhGnOnjCB9VFf10ckC3azw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647442; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=26HC0FsTOSIeMw5Q00NiYX9kyMHT+cuOwa9g5fC6GPw=; b=Ej6Uqv3+7lkmIOTggeaZn5mhXjBcloWcOdNhi6ec3tFPjus2XBKPgWVYZzreP4KQD8FpTZpCUCerTVUiaYltu1pC5tevLsCfS13BE13tWWraulqVdFuljDLa6fkwU7QApWMBJDWTgAkdtFJSX0dU7Av7cyOlFmM/2FG13TpSYws= 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 17516474423961018.7469970850739; Fri, 4 Jul 2025 09:44:02 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjGK-0007g9-K0; Fri, 04 Jul 2025 12:27:44 -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 1uXjFB-0002ud-VX for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:34 -0400 Received: from mail-wr1-x434.google.com ([2a00:1450:4864:20::434]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjFA-0006s4-DC for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:33 -0400 Received: by mail-wr1-x434.google.com with SMTP id ffacd0b85a97d-3a582e09144so633505f8f.1 for ; Fri, 04 Jul 2025 09:26:31 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.26.29 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:26:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646391; x=1752251191; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=26HC0FsTOSIeMw5Q00NiYX9kyMHT+cuOwa9g5fC6GPw=; b=OSz/dLrG0zXUzz3UCDFtFDqmNtCvbO4jqVRL7VA18rOkzD/PEkJgFq2uKaPGBK6xPU IQK/PH1lS82Ur9+yBE+kzjbD4/zlCDtx+MMq8vo8Cm0vUQQtUL6sLZrQ6DrpHaR5Y8P7 /r2QnMP/larbr90blhbrepQrlCvLMolZsAqltJkcu1edocfYcPvyjcyZUMVpmtvwUsy8 05IcdY7ybclQ7WyEcZYGWRwYbefF1jFQenzYxjc8/5sq0Prqf5It9IP3Iz3jPfU2kXbN FnK7p9kB9eUcf/34/3ooszO/WbvHuHZ9NDc08WoJqutc4R3uzmdFsbttEtPwYkQXyhVk Mzrg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646391; x=1752251191; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=26HC0FsTOSIeMw5Q00NiYX9kyMHT+cuOwa9g5fC6GPw=; b=abXP8jLEqA8p7RatA3MtPh/P1PC66PUUe5dRzhS381N+r9mPL5OQeDek/lIr9MoGRu Cj4mIRcCvz0kHifhPvE46PDHYh9MzXWJq5ihh9+YDqktGAuIm05WcQz3ocPH2+npFiYc Ms/t/gOadcNmwGpHXZRnJAVpn09gVz32iYwbFKoEEkMznWSWZZnO1zb7+MXo9vxrV8Cr oOowFRa4r0ABWr8cpgI/89wZXiWqFlWJlgWI6kpmrOZ5XssjSd/w6ZZG154qxopE9z6n pBULxzjVUQedzogfIktrZA1ExNDODH1Ld2KcJUAUYVUMOCAOh6LfMkNg6w5GtzijbOU+ gcRA== X-Gm-Message-State: AOJu0YzKJ1fsqc8eZggGjUznMq8GG05HjuckjsecNWsoJViAeDrLBnw7 qR2ILO9BSJSPK64RTDSxxnXaaESdo73vZ1SwnOOHgwTk04jqZN8Y2GdA7gnt7NBRv2n8o/Klo9O y8Qzy X-Gm-Gg: ASbGnctWgXysK4bq5KdJb17zmhG6p6WN6UV2YDe/tIIT9Nw29IacYj/3Uo9KWayTL43 arbJ+nqTz62Z/QWWzu1KIhTELDz4b6ms1spqzyptn3P6FdVPvX3ErAoasnXeuo1aK0pGOMRfnac x+pcourPQStNebGPPm9vV2ZfG3pUY91+c5gI1CVw7cMyuhBPjZo4yBhEDarCafxK2e2v0o7j+Oj 3lbuDiyTgUHDJgsbrAUYpcifs/b62vsVlR2ih3wpa1Ggb4+TqdwRj5FopYkl3u2tfxCi9X6/gTh Gozh/fCZE2Dva++m64a6/sn5d+VUTRy630bkq8AuBv8EdoS7kgrUu6KybU/X30g2rj9R X-Google-Smtp-Source: AGHT+IGcqaVwEOhGN6Lr7fokd27Nd+1KVYdFf2DjotCEsJ4nQqe7/kwGnGdUKQx/s0HlBYyFZgcPQA== X-Received: by 2002:a05:6000:2508:b0:3a4:febd:39f2 with SMTP id ffacd0b85a97d-3b497038e4cmr2137575f8f.37.1751646390817; Fri, 04 Jul 2025 09:26:30 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 092/119] target/arm: Implement SVE2p1 PTRUE (predicate as counter) Date: Fri, 4 Jul 2025 17:24:32 +0100 Message-ID: <20250704162501.249138-93-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::434; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x434.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751647443220116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-81-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/sve.decode | 1 + target/arm/tcg/translate-sve.c | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/target/arm/tcg/sve.decode b/target/arm/tcg/sve.decode index 389a72d8242..3517efb31b3 100644 --- a/target/arm/tcg/sve.decode +++ b/target/arm/tcg/sve.decode @@ -730,6 +730,7 @@ PTEST 00100101 01 010000 11 pg:4 0 rn:4 0 0000 =20 # SVE predicate initialize PTRUE 00100101 esz:2 01100 s:1 111000 pat:5 0 rd:4 +PTRUE_cnt 00100101 esz:2 1000000111100000010 ... rd=3D%pnd =20 # SVE initialize FFR SETFFR 00100101 0010 1100 1001 0000 0000 0000 diff --git a/target/arm/tcg/translate-sve.c b/target/arm/tcg/translate-sve.c index c93dca224ce..651b4aa3781 100644 --- a/target/arm/tcg/translate-sve.c +++ b/target/arm/tcg/translate-sve.c @@ -1679,6 +1679,22 @@ static bool do_predset(DisasContext *s, int esz, int= rd, int pat, bool setflag) =20 TRANS_FEAT(PTRUE, aa64_sve, do_predset, a->esz, a->rd, a->pat, a->s) =20 +static bool trans_PTRUE_cnt(DisasContext *s, arg_PTRUE_cnt *a) +{ + if (!dc_isar_feature(aa64_sme2_or_sve2p1, s)) { + return false; + } + if (sve_access_check(s)) { + /* Canonical TRUE is 0 count, invert bit, plus element size. */ + int val =3D (1 << 15) | (1 << a->esz); + + /* Write val to the first uint64_t; clear all of the rest. */ + tcg_gen_gvec_dup_imm(MO_64, pred_full_reg_offset(s, a->rd), + 8, size_for_gvec(pred_full_reg_size(s)), val); + } + return true; +} + /* Note pat =3D=3D 31 is #all, to set all elements. */ TRANS_FEAT_NONSTREAMING(SETFFR, aa64_sve, do_predset, 0, FFR_PRED_NUM, 31, false) --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647193; cv=none; d=zohomail.com; s=zohoarc; b=DcX53JzSomkQeQS6SIL6qnxjFZeK1sggHD14t3+MeAgLmLB5r+8OO8xflIxrggiHo6Ic2FB1gmSF61lvbclMPpL1ALZ2Xko2VsyF9BCNgPTHohAVvPt3BrfkoCHFiDDM8Ma66PJFh8tSYxmo4+ZthZmiA+RRyR//sxANPd6ouGM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647193; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=VVVUOYWFici2h8tZN2zcUXcpvjVGxn+olwomTA5DCH0=; b=ebPLm6tCqr4AFZs03E7jofcn6+KnPT+PFRyfjp3VXh2x9y/w+YDPG8qW5hXL90OcFcwKZvryt2rObffHGEntrJgo+8HzfE46LdEzt/yTRvvMCwj7pY0EedbWBeoQCfIuEB9IMBbRV+bWPJ0k2HSDASSCfk9OtNDXF1Qece/taEI= 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 1751647193411540.6684611155166; Fri, 4 Jul 2025 09:39:53 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjGP-0007uk-RW; Fri, 04 Jul 2025 12:27:49 -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 1uXjFD-00030R-4M for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:35 -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 1uXjFB-0006sM-4v for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:34 -0400 Received: by mail-wm1-x32f.google.com with SMTP id 5b1f17b1804b1-453608ed113so12313485e9.0 for ; Fri, 04 Jul 2025 09:26:32 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.26.30 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:26:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646392; x=1752251192; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=VVVUOYWFici2h8tZN2zcUXcpvjVGxn+olwomTA5DCH0=; b=iUFmSBC6ibYIEtl249EcMfvU2lJf9+GjNBkm3feT3vMEhEr08iJgUSoOu8NGbqAu1s XGcYobS6RykIZgKP2FyVSdIjmTLzVMystp3wACgKzkMEZgZtEukEu8RafYrBkh5Teg0P QqYzaBD/B3z1fYGLiBXH7MZ1xoDwkElA0DgRQ3mZko9MqsGtbzGGWHDL6rammBiQf8/b GXbsGHOrIrhrZ8AdEmf1Kui3QWm29yyky++8CrHOWTNR1w66URIlLcQGz5YArRZ1xnVI NhmoVuoDmJ/rPweZtwVBpHBTyldE+z/PJeaGPeE7bHk6IR7NPNoKNRVqkW22ZtUKUYNo wR2g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646392; x=1752251192; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=VVVUOYWFici2h8tZN2zcUXcpvjVGxn+olwomTA5DCH0=; b=B4LJU4rvlCGYPjEhf6+jCR3eYNPXJDdE3xe7EJXPnQ3kdQyCTpwfZ4BUxhyiz2KLyN 2gXHyWrGc/yNOvEGG6eUpp63AQ4NJvNtBaMOnuUaCzxi0xU37A3N85TGeG38z/wJ+Si/ myLeqGThNUyHlqv3wlr9pk37kYnymENfd3wviPoWjC/vqhJ31nsT1Td8ZrfcFbvWJ2aA Xf7iRBv2Zil4pTr+ZfTq03+YwyxI0HGxr+/Dib94c7uk8C+W3VNMsfZinH214LgqHfjV SMUfpvwW81ufhwlw++ggL9QBquMNpuZu3yvyVXRRQcMW5doa/l7G1Tk8h4AjhC3TQO3Q YgZw== X-Gm-Message-State: AOJu0Ywb2ab1nqUQ26dmMWxFrQ6Flf2nmSBdNRkubRIVPRKQMr3r0qiu hV55kRYmv03cRc9DmoMdGQVzolw+8bm5dW0cVKlmewNpu+PPWuNPwptlbp4zYi90jW8BoCZhf01 11J6w X-Gm-Gg: ASbGnctvPCeTyLdKUovfHz4zM8+VqwcAKbAg53PzTF0uf9ZtBy3qaQMEzCs1qBwiQfR d1rbUYaYLRTVrV5vXzjGsnTlYtXAAHjxNOu+YxRFuyHaDSnVz0VcbyNUNUqtIpboeycoM7m6RaO 2v+2A2yK08/SEtXmro2t4BIfinpdRCvoC4mVQvh2OLeYF+58T/Xeo6fC3VMiQIP+QCHCtp/48A/ Q4UX//JDiHpqeq94S6ByfvkfTsj3oXW3bdLNlLUMOeSJWxm12kD3FFwuSpqnD+78pyBLI/EYyh6 GyXJe1Ea/Deh6cqmnSUZ2v7UCnskQ4GAkiyLg4r5oY8MaDM5q16DhxerUPCPUxKdGK5L X-Google-Smtp-Source: AGHT+IEQ/Was444msNuBlJrrsPyG30FtYzSPLtH405XVmrW5FRebC8KA7HAY23zz180RqDWDfecbFw== X-Received: by 2002:a05:600c:468b:b0:453:6146:1182 with SMTP id 5b1f17b1804b1-454b31198e4mr27301185e9.32.1751646391752; Fri, 04 Jul 2025 09:26:31 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 093/119] target/arm: Implement {ADD, SMIN, SMAX, UMIN, UMAX}QV for SVE2p1 Date: Fri, 4 Jul 2025 17:24:33 +0100 Message-ID: <20250704162501.249138-94-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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=peter.maydell@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 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: 1751647194283116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-82-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/helper-sve.h | 25 ++++++++++++++++++ target/arm/tcg/sve.decode | 7 ++++++ target/arm/tcg/sve_helper.c | 46 ++++++++++++++++++++++++++++++++++ target/arm/tcg/translate-sve.c | 35 ++++++++++++++++++++++++++ 4 files changed, 113 insertions(+) diff --git a/target/arm/tcg/helper-sve.h b/target/arm/tcg/helper-sve.h index 74029c641bb..5f5ecc2e0de 100644 --- a/target/arm/tcg/helper-sve.h +++ b/target/arm/tcg/helper-sve.h @@ -2928,3 +2928,28 @@ DEF_HELPER_FLAGS_4(sve2_sqshlu_b, TCG_CALL_NO_RWG, v= oid, ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_4(sve2_sqshlu_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i3= 2) DEF_HELPER_FLAGS_4(sve2_sqshlu_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i3= 2) DEF_HELPER_FLAGS_4(sve2_sqshlu_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i3= 2) + +DEF_HELPER_FLAGS_4(sve2p1_addqv_b, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i= 32) +DEF_HELPER_FLAGS_4(sve2p1_addqv_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i= 32) +DEF_HELPER_FLAGS_4(sve2p1_addqv_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i= 32) +DEF_HELPER_FLAGS_4(sve2p1_addqv_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i= 32) + +DEF_HELPER_FLAGS_4(sve2p1_smaxqv_b, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, = i32) +DEF_HELPER_FLAGS_4(sve2p1_smaxqv_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, = i32) +DEF_HELPER_FLAGS_4(sve2p1_smaxqv_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, = i32) +DEF_HELPER_FLAGS_4(sve2p1_smaxqv_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, = i32) + +DEF_HELPER_FLAGS_4(sve2p1_sminqv_b, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, = i32) +DEF_HELPER_FLAGS_4(sve2p1_sminqv_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, = i32) +DEF_HELPER_FLAGS_4(sve2p1_sminqv_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, = i32) +DEF_HELPER_FLAGS_4(sve2p1_sminqv_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, = i32) + +DEF_HELPER_FLAGS_4(sve2p1_umaxqv_b, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, = i32) +DEF_HELPER_FLAGS_4(sve2p1_umaxqv_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, = i32) +DEF_HELPER_FLAGS_4(sve2p1_umaxqv_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, = i32) +DEF_HELPER_FLAGS_4(sve2p1_umaxqv_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, = i32) + +DEF_HELPER_FLAGS_4(sve2p1_uminqv_b, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, = i32) +DEF_HELPER_FLAGS_4(sve2p1_uminqv_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, = i32) +DEF_HELPER_FLAGS_4(sve2p1_uminqv_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, = i32) +DEF_HELPER_FLAGS_4(sve2p1_uminqv_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, = i32) diff --git a/target/arm/tcg/sve.decode b/target/arm/tcg/sve.decode index 3517efb31b3..a3221308ad4 100644 --- a/target/arm/tcg/sve.decode +++ b/target/arm/tcg/sve.decode @@ -340,6 +340,13 @@ UMAXV 00000100 .. 001 001 001 ... ..... ....= . @rd_pg_rn SMINV 00000100 .. 001 010 001 ... ..... ..... @rd_pg_rn UMINV 00000100 .. 001 011 001 ... ..... ..... @rd_pg_rn =20 +# SVE2.1 segment reduction +ADDQV 00000100 .. 000 101 001 ... ..... ..... @rd_pg_rn +SMAXQV 00000100 .. 001 100 001 ... ..... ..... @rd_pg_rn +SMINQV 00000100 .. 001 110 001 ... ..... ..... @rd_pg_rn +UMAXQV 00000100 .. 001 101 001 ... ..... ..... @rd_pg_rn +UMINQV 00000100 .. 001 111 001 ... ..... ..... @rd_pg_rn + ### SVE Shift by Immediate - Predicated Group =20 # SVE bitwise shift by immediate (predicated) diff --git a/target/arm/tcg/sve_helper.c b/target/arm/tcg/sve_helper.c index 713642d4c89..625734fff9a 100644 --- a/target/arm/tcg/sve_helper.c +++ b/target/arm/tcg/sve_helper.c @@ -1814,6 +1814,52 @@ DO_VPZ_D(sve_uminv_d, uint64_t, uint64_t, -1, DO_MIN) #undef DO_VPZ #undef DO_VPZ_D =20 +#define DO_VPQ(NAME, TYPE, H, INIT, OP) \ +void HELPER(NAME)(void *vd, void *vn, void *vg, uint32_t desc) \ +{ \ + TYPE tmp[16 / sizeof(TYPE)] =3D { [0 ... 16 / sizeof(TYPE) - 1] =3D IN= IT }; \ + TYPE *n =3D vn; uint16_t *g =3D vg; = \ + uintptr_t oprsz =3D simd_oprsz(desc); \ + uintptr_t nseg =3D oprsz / 16, nsegelt =3D 16 / sizeof(TYPE); = \ + for (uintptr_t s =3D 0; s < nseg; s++) { \ + uint16_t pg =3D g[H2(s)]; \ + for (uintptr_t e =3D 0; e < nsegelt; e++, pg >>=3D sizeof(TYPE)) {= \ + if (pg & 1) { \ + tmp[e] =3D OP(tmp[H(e)], n[s * nsegelt + H(e)]); \ + } \ + } \ + } \ + memcpy(vd, tmp, 16); \ + clear_tail(vd, 16, simd_maxsz(desc)); \ +} + +DO_VPQ(sve2p1_addqv_b, uint8_t, H1, 0, DO_ADD) +DO_VPQ(sve2p1_addqv_h, uint16_t, H2, 0, DO_ADD) +DO_VPQ(sve2p1_addqv_s, uint32_t, H4, 0, DO_ADD) +DO_VPQ(sve2p1_addqv_d, uint64_t, H8, 0, DO_ADD) + +DO_VPQ(sve2p1_smaxqv_b, int8_t, H1, INT8_MIN, DO_MAX) +DO_VPQ(sve2p1_smaxqv_h, int16_t, H2, INT16_MIN, DO_MAX) +DO_VPQ(sve2p1_smaxqv_s, int32_t, H4, INT32_MIN, DO_MAX) +DO_VPQ(sve2p1_smaxqv_d, int64_t, H8, INT64_MIN, DO_MAX) + +DO_VPQ(sve2p1_sminqv_b, int8_t, H1, INT8_MAX, DO_MIN) +DO_VPQ(sve2p1_sminqv_h, int16_t, H2, INT16_MAX, DO_MIN) +DO_VPQ(sve2p1_sminqv_s, int32_t, H4, INT32_MAX, DO_MIN) +DO_VPQ(sve2p1_sminqv_d, int64_t, H8, INT64_MAX, DO_MIN) + +DO_VPQ(sve2p1_umaxqv_b, uint8_t, H1, 0, DO_MAX) +DO_VPQ(sve2p1_umaxqv_h, uint16_t, H2, 0, DO_MAX) +DO_VPQ(sve2p1_umaxqv_s, uint32_t, H4, 0, DO_MAX) +DO_VPQ(sve2p1_umaxqv_d, uint64_t, H8, 0, DO_MAX) + +DO_VPQ(sve2p1_uminqv_b, uint8_t, H1, -1, DO_MIN) +DO_VPQ(sve2p1_uminqv_h, uint16_t, H2, -1, DO_MIN) +DO_VPQ(sve2p1_uminqv_s, uint32_t, H4, -1, DO_MIN) +DO_VPQ(sve2p1_uminqv_d, uint64_t, H8, -1, DO_MIN) + +#undef DO_VPQ + /* Two vector operand, one scalar operand, unpredicated. */ #define DO_ZZI(NAME, TYPE, OP) \ void HELPER(NAME)(void *vd, void *vn, uint64_t s64, uint32_t desc) \ diff --git a/target/arm/tcg/translate-sve.c b/target/arm/tcg/translate-sve.c index 651b4aa3781..2e29dff9895 100644 --- a/target/arm/tcg/translate-sve.c +++ b/target/arm/tcg/translate-sve.c @@ -828,6 +828,41 @@ TRANS_FEAT(SXTW, aa64_sve, gen_gvec_ool_arg_zpz, TRANS_FEAT(UXTW, aa64_sve, gen_gvec_ool_arg_zpz, a->esz =3D=3D 3 ? gen_helper_sve_uxtw_d : NULL, a, 0) =20 +static gen_helper_gvec_3 * const addqv_fns[4] =3D { + gen_helper_sve2p1_addqv_b, gen_helper_sve2p1_addqv_h, + gen_helper_sve2p1_addqv_s, gen_helper_sve2p1_addqv_d, +}; +TRANS_FEAT(ADDQV, aa64_sme2p1_or_sve2p1, + gen_gvec_ool_arg_zpz, addqv_fns[a->esz], a, 0) + +static gen_helper_gvec_3 * const smaxqv_fns[4] =3D { + gen_helper_sve2p1_smaxqv_b, gen_helper_sve2p1_smaxqv_h, + gen_helper_sve2p1_smaxqv_s, gen_helper_sve2p1_smaxqv_d, +}; +TRANS_FEAT(SMAXQV, aa64_sme2p1_or_sve2p1, + gen_gvec_ool_arg_zpz, smaxqv_fns[a->esz], a, 0) + +static gen_helper_gvec_3 * const sminqv_fns[4] =3D { + gen_helper_sve2p1_sminqv_b, gen_helper_sve2p1_sminqv_h, + gen_helper_sve2p1_sminqv_s, gen_helper_sve2p1_sminqv_d, +}; +TRANS_FEAT(SMINQV, aa64_sme2p1_or_sve2p1, + gen_gvec_ool_arg_zpz, sminqv_fns[a->esz], a, 0) + +static gen_helper_gvec_3 * const umaxqv_fns[4] =3D { + gen_helper_sve2p1_umaxqv_b, gen_helper_sve2p1_umaxqv_h, + gen_helper_sve2p1_umaxqv_s, gen_helper_sve2p1_umaxqv_d, +}; +TRANS_FEAT(UMAXQV, aa64_sme2p1_or_sve2p1, + gen_gvec_ool_arg_zpz, umaxqv_fns[a->esz], a, 0) + +static gen_helper_gvec_3 * const uminqv_fns[4] =3D { + gen_helper_sve2p1_uminqv_b, gen_helper_sve2p1_uminqv_h, + gen_helper_sve2p1_uminqv_s, gen_helper_sve2p1_uminqv_d, +}; +TRANS_FEAT(UMINQV, aa64_sme2p1_or_sve2p1, + gen_gvec_ool_arg_zpz, uminqv_fns[a->esz], a, 0) + /* *** SVE Integer Reduction Group */ --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646648; cv=none; d=zohomail.com; s=zohoarc; b=UMJJY5+zKe+zilbfctozMy8PeByrvtRc499IaLZl/Sof0x8+3cOsQ9+gal5LUAB7qk5IT8Jpb6/jsXSusdNmU8yLSMn7EH5nSvsb8E409HsIiIGfMbkcBsHRZzdBfPL5+b2Pcll47Fwzv2Hlr+Ig6jIJ/bNhehhBiTUuvQEldmI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646648; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=eeZvVSPwrM1m3u4R9Oc0rM/pY0R9OQhJ862Rvp43gmQ=; b=gQWQP8HIQd3Ol0vF1V/WzOpbkptL9BIOwRlqR2Yu7Kj185dQN7AFuaEABN7lFDtZ53WaOLQKsXZ40vMo0QYbhexngF1FA/IGu8w9lsMjhJBo2xXB/V44/2kA3zB43IC+fElOcXvDsl4E1NeN9ov7ErC8pX3g+OZyUw4ljp8a6mE= 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 1751646648784235.62125894954897; Fri, 4 Jul 2025 09:30:48 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjFU-0004u8-9S; Fri, 04 Jul 2025 12:26:52 -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 1uXjFE-00037d-EI for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:36 -0400 Received: from mail-wr1-x432.google.com ([2a00:1450:4864:20::432]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjFC-0006sW-6p for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:36 -0400 Received: by mail-wr1-x432.google.com with SMTP id ffacd0b85a97d-3a57c8e247cso856837f8f.1 for ; Fri, 04 Jul 2025 09:26:33 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.26.31 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:26:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646393; x=1752251193; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=eeZvVSPwrM1m3u4R9Oc0rM/pY0R9OQhJ862Rvp43gmQ=; b=DOchkQ/KB97x3XFqfbsR+agJpBFjs/ddMLgpn7Mgs4IWhqj6vYwrZoWWVlTcabOGu4 gRhAkLca5e1AC+o4xb9OM8zUI72l5mC3Pb39Q+s0+gmCqSrnm1Uoel/nv4UYiy/cFtzy bJ1rtWx/ggydKy6AmLDFzVYNXn1807UDV4jt2TJi7BNkuvtpvn+6t5jlY+IliwrlTe33 kjdNU5+pCsSRp7E41hp3R9ONpCnunUcHeIff9db6sFGUplwIr1DH9aU7VXGF73dWBGn0 54J3796J83zyKCZgzGMAF09cMVpqz9m0VPqIv79NvQtFz7UBU7DR+7jA5NzBAOr/gGLm fu0g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646393; x=1752251193; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=eeZvVSPwrM1m3u4R9Oc0rM/pY0R9OQhJ862Rvp43gmQ=; b=d5wpz351b7xIaL3otHcwElq0E94BXMonNmi1TyhuAtsKU+0oMoLa56q3uXYk6l9pA2 MFuFUdolvE28eMaStt914X55AaE7/NH/QJpuTtlbuQCh6+aoDk5ldTAI7zSXReFSPEKS V1YRw1LalY/Ab1VHdkhgUbIc1C81HeaibJE4hW7Jy/6LWkU7Pg7CFb4ucRYnNj8/zWl6 hUy7bf+eFjrediDnlMZgKyyfeIEsjiwFC1DioiaG0khD51PUsGsSOk/aUdfvAaw25vRh saUyYP5JQ1xOMY3lvcI/lZ9S6FT6F0Dt9U+aJRDpQRBsJEz6bEQwwBTUSXgg3WsLU1IQ 0CcQ== X-Gm-Message-State: AOJu0Yy0gPtB5wJjPaH3Jn5tR1+qkA6RGgjLveJXPUu9jBToUmZo3xzw aQGh3QUhKR3jMhmC7H6sA+nwISGtcngpWSvq7Pd4XANSTlmNo1c8Qa+bEy7dOph5VFiEibYYNYu ILUgE X-Gm-Gg: ASbGncte7vbbXWpBnwHCESUstXyVkcp2G4VslvgZVejuGNE3k6anhxRsNE8El7xnX/v KYQiB4FLbjgrcNMF6kU3BSHdCm8zenp9ct8Vqbg0e65L5O/AgovY8Q/Hps9ktHRKnYb5re7CFOR 8g7osMtW4lSbZ+7flcVhjBxIY8gVyaHwihyP5FlnQ398ZjoqF5/crWWnBC2pE1gtkqqmG1x8kMS dJu16Esg55tyGnSAQL1hUQr6qi3sqAUSt2/kG3Gzyfl/4AB7E14t1tTu+RaD4iHMNXFxcNNFMcy cBVqQObgmhfDt5r+QX6ZjeAqc1QM8TucyMmolbTA+Seu5MY48J6kSHtkTInvIJdBbk9P X-Google-Smtp-Source: AGHT+IHZMW/KdMaDqZIHJKx+Y9jXw34YGGSdeimgu8YwxWSptPQKDSa91JcdEsCNyMKCuyy3JS3NpA== X-Received: by 2002:a05:6000:22c6:b0:3b3:a6e1:135c with SMTP id ffacd0b85a97d-3b497038f3dmr2277114f8f.42.1751646392642; Fri, 04 Jul 2025 09:26:32 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 094/119] target/arm: Implement SVE2p1 PEXT Date: Fri, 4 Jul 2025 17:24:34 +0100 Message-ID: <20250704162501.249138-95-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::432; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x432.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751646649955116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-83-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/helper-sve.h | 2 + target/arm/tcg/vec_internal.h | 74 ++++++++++++++++++++++++++++++++++ target/arm/tcg/sve.decode | 6 +++ target/arm/tcg/sve_helper.c | 28 +++++++++++++ target/arm/tcg/translate-sve.c | 36 +++++++++++++++++ 5 files changed, 146 insertions(+) diff --git a/target/arm/tcg/helper-sve.h b/target/arm/tcg/helper-sve.h index 5f5ecc2e0de..ec82d0a4e74 100644 --- a/target/arm/tcg/helper-sve.h +++ b/target/arm/tcg/helper-sve.h @@ -2953,3 +2953,5 @@ DEF_HELPER_FLAGS_4(sve2p1_uminqv_b, TCG_CALL_NO_RWG, = void, ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_4(sve2p1_uminqv_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, = i32) DEF_HELPER_FLAGS_4(sve2p1_uminqv_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, = i32) DEF_HELPER_FLAGS_4(sve2p1_uminqv_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, = i32) + +DEF_HELPER_FLAGS_3(pext, TCG_CALL_NO_RWG, void, ptr, i32, i32) diff --git a/target/arm/tcg/vec_internal.h b/target/arm/tcg/vec_internal.h index 5efd257c50d..61c67bb35e7 100644 --- a/target/arm/tcg/vec_internal.h +++ b/target/arm/tcg/vec_internal.h @@ -337,4 +337,78 @@ bfloat16 helper_sme2_ah_fmin_b16(bfloat16 a, bfloat16 = b, float_status *fpst); float32 sve_f16_to_f32(float16 f, float_status *fpst); float16 sve_f32_to_f16(float32 f, float_status *fpst); =20 +/* + * Decode helper functions for predicate as counter. + */ + +typedef struct { + unsigned count; + unsigned lg2_stride; + bool invert; +} DecodeCounter; + +static inline DecodeCounter +decode_counter(unsigned png, unsigned vl, unsigned v_esz) +{ + DecodeCounter ret =3D { }; + + /* C.f. Arm pseudocode CounterToPredicate. */ + if (likely(png & 0xf)) { + unsigned p_esz =3D ctz32(png); + + /* + * maxbit =3D log2(pl(bits) * 4) + * =3D log2(vl(bytes) * 4) + * =3D log2(vl) + 2 + * maxbit_mask =3D ones + * =3D (1 << (maxbit + 1)) - 1 + * =3D (1 << (log2(vl) + 2 + 1)) - 1 + * =3D (1 << (log2(vl) + 3)) - 1 + * =3D (pow2ceil(vl) << 3) - 1 + */ + ret.count =3D png & (((unsigned)pow2ceil(vl) << 3) - 1); + ret.count >>=3D p_esz + 1; + + ret.invert =3D (png >> 15) & 1; + + /* + * The Arm pseudocode for CounterToPredicate expands the count to + * a set of bits, and then the operation proceeds as for the origi= nal + * interpretation of predicates as a set of bits. + * + * We can avoid the expansion by adjusting the count and supplying + * an element stride. + */ + if (unlikely(p_esz !=3D v_esz)) { + if (p_esz < v_esz) { + /* + * For predicate esz < vector esz, the expanded predicate + * will have more bits set than will be consumed. + * Adjust the count down, rounding up. + * Consider p_esz =3D MO_8, v_esz =3D MO_64, count 14: + * The expanded predicate would be + * 0011 1111 1111 1111 + * The significant bits are + * ...1 ...1 ...1 ...1 + */ + unsigned shift =3D v_esz - p_esz; + unsigned trunc =3D ret.count >> shift; + ret.count =3D trunc + (ret.count !=3D (trunc << shift)); + } else { + /* + * For predicate esz > vector esz, the expanded predicate + * will have bits set only at power-of-two multiples of + * the vector esz. Bits at other multiples will all be + * false. Adjust the count up, and supply the caller + * with a stride of elements to skip. + */ + unsigned shift =3D p_esz - v_esz; + ret.count <<=3D shift; + ret.lg2_stride =3D shift; + } + } + } + return ret; +} + #endif /* TARGET_ARM_VEC_INTERNAL_H */ diff --git a/target/arm/tcg/sve.decode b/target/arm/tcg/sve.decode index a3221308ad4..b7622577594 100644 --- a/target/arm/tcg/sve.decode +++ b/target/arm/tcg/sve.decode @@ -60,6 +60,7 @@ %rn_ax2 6:4 !function=3Dtimes_2 =20 %pnd 0:3 !function=3Dplus_8 +%pnn 5:3 !function=3Dplus_8 =20 ########################################################################### # Named attribute sets. These are used to make nice(er) names @@ -823,6 +824,11 @@ WHILE_lt_cnt4 00100101 .. 1 ..... 0110 . 1 ..... 1 .= ... @while_cnt WHILE_gt_cnt2 00100101 .. 1 ..... 0100 . 0 ..... 1 . ... @while_cnt WHILE_gt_cnt4 00100101 .. 1 ..... 0110 . 0 ..... 1 . ... @while_cnt =20 +# SVE2.1 extract mask predicate from predicate-as-counter +&pext rd rn esz imm +PEXT_1 00100101 esz:2 1 00000 0111 00 imm:2 ... 1 rd:4 &pext rn= =3D%pnn +PEXT_2 00100101 esz:2 1 00000 0111 010 imm:1 ... 1 rd:4 &pext rn= =3D%pnn + ### SVE Integer Wide Immediate - Unpredicated Group =20 # SVE broadcast floating-point immediate (unpredicated) diff --git a/target/arm/tcg/sve_helper.c b/target/arm/tcg/sve_helper.c index 625734fff9a..866f85ba306 100644 --- a/target/arm/tcg/sve_helper.c +++ b/target/arm/tcg/sve_helper.c @@ -7821,3 +7821,31 @@ DO_FCVTLT(sve2_fcvtlt_sd, uint64_t, uint32_t, H1_8, = H1_4, float32_to_float64) =20 #undef DO_FCVTLT #undef DO_FCVTNT + +void HELPER(pext)(void *vd, uint32_t png, uint32_t desc) +{ + int pl =3D FIELD_EX32(desc, PREDDESC, OPRSZ); + int vl =3D pl * 8; + unsigned v_esz =3D FIELD_EX32(desc, PREDDESC, ESZ); + int part =3D FIELD_EX32(desc, PREDDESC, DATA); + DecodeCounter p =3D decode_counter(png, vl, v_esz); + uint64_t mask =3D pred_esz_masks[v_esz + p.lg2_stride]; + ARMPredicateReg *d =3D vd; + + /* + * Convert from element count to byte count and adjust + * for the portion of the 4*VL counter to be extracted. + */ + int b_count =3D (p.count << v_esz) - vl * part; + + memset(d, 0, sizeof(*d)); + if (p.invert) { + if (b_count <=3D 0) { + do_whilel(vd, mask, vl, vl); + } else if (b_count < vl) { + do_whileg(vd, mask, vl - b_count, vl); + } + } else if (b_count > 0) { + do_whilel(vd, mask, MIN(b_count, vl), vl); + } +} diff --git a/target/arm/tcg/translate-sve.c b/target/arm/tcg/translate-sve.c index 2e29dff9895..6ad4d1e289c 100644 --- a/target/arm/tcg/translate-sve.c +++ b/target/arm/tcg/translate-sve.c @@ -3336,6 +3336,42 @@ static bool trans_WHILE_ptr(DisasContext *s, arg_WHI= LE_ptr *a) return true; } =20 +static bool do_pext(DisasContext *s, arg_pext *a, int n) +{ + TCGv_i32 t_png; + TCGv_ptr t_pd; + int pl; + + if (!sve_access_check(s)) { + return true; + } + + t_png =3D tcg_temp_new_i32(); + tcg_gen_ld16u_i32(t_png, tcg_env, + pred_full_reg_offset(s, a->rn) ^ + (HOST_BIG_ENDIAN ? 6 : 0)); + + t_pd =3D tcg_temp_new_ptr(); + pl =3D pred_full_reg_size(s); + + for (int i =3D 0; i < n; ++i) { + int rd =3D (a->rd + i) % 16; + int part =3D a->imm * n + i; + unsigned desc =3D 0; + + desc =3D FIELD_DP32(desc, PREDDESC, OPRSZ, pl); + desc =3D FIELD_DP32(desc, PREDDESC, ESZ, a->esz); + desc =3D FIELD_DP32(desc, PREDDESC, DATA, part); + + tcg_gen_addi_ptr(t_pd, tcg_env, pred_full_reg_offset(s, rd)); + gen_helper_pext(t_pd, t_png, tcg_constant_i32(desc)); + } + return true; +} + +TRANS_FEAT(PEXT_1, aa64_sme2_or_sve2p1, do_pext, a, 1) +TRANS_FEAT(PEXT_2, aa64_sme2_or_sve2p1, do_pext, a, 2) + /* *** SVE Integer Wide Immediate - Unpredicated Group */ --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647168; cv=none; d=zohomail.com; s=zohoarc; b=QZa/zVHU7KBGA7Zeos+XIrBpiVsNbUt4YbQNt7icV4oR0wVe7xS2e5fEBk9RRZVj8tfIAAUeClum/rxd101OiIsgs0yCIF/27C4Dm9yLlBs+kraX+P565UF9/bxfD19PMOaFnQJJGPUl3a3x6nTdU2Po8/HZb9yjELtCpd7Y9Ig= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647168; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=lIJhiRCR8HjwsIRcjeXNXOpA6NWPSbM7MJPUG4ggQaI=; b=GEcwxibFTNB/2y6aWUOYGPjXFxFfNEQTSyfz6cqtOBKN/B44AuNlN00EcebZYrhvmoz9WwpmiMrnrkX6K8vbsV2QZxmxH1t+2uDXWenJUPqRUB16rLM1ygc0oyZGU28Re6ySpa7CDxpRQ/K5jSD1XfEVIfq6LK6EelUS1AMWBO0= 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 1751647168456521.3925452605293; Fri, 4 Jul 2025 09:39:28 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjFY-0005S6-DR; Fri, 04 Jul 2025 12:26:56 -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 1uXjFF-0003FJ-Rm for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:37 -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 1uXjFD-0006sm-B6 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:37 -0400 Received: by mail-wm1-x333.google.com with SMTP id 5b1f17b1804b1-451d54214adso7694285e9.3 for ; Fri, 04 Jul 2025 09:26:34 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.26.32 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:26:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646394; x=1752251194; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=lIJhiRCR8HjwsIRcjeXNXOpA6NWPSbM7MJPUG4ggQaI=; b=CUxUbBKulEdKPLfEa3UadvmIGYzV5oHoNLr8t4oovOErFBJBqHUKRoYuP7whCC1Azf BLDUWvnRpVGfHfrN+jj+ErjbCp8NavMrnjH7jXOPvkuNzuTO4E2bP1IboRpqe1Py7gN7 vQRHXaTh4z2REMzJm+NQ85vOFIdNhl8kXhy8FuPPtexLrAjbnDxt95MYCfWBdR6UNW13 5RY71STMu34vIOc0nCZ09YpHFgt8MSriCe9uqHCPIWjZ8q32RizAEJe93MfaUbwHHyCO aI8Ar2OAKFL98E/YcZzPf3593ca68PNnOvEL4AMSA1G4EF5hAkeDycJJbFaZAOex7U1F F3iA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646394; x=1752251194; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=lIJhiRCR8HjwsIRcjeXNXOpA6NWPSbM7MJPUG4ggQaI=; b=v028JF0aMPJ9cWpSYWFQWrE1y7K4+G2FK6p6g4vdj2bDs+kPEoZyMW3A2MP7J9eyH+ CR/zqhzkVlslygOJQ3yuloNrB77Vxq6ahqaIeX3ZNKL+pDczc5sM2yt9JjSnBuBS9IKh l4jwgROauTFhy5Wmy30RrsdlOS7M9EOBcs1fo9H+kA1WspHmw1DPPp1vHDaeNbkeVmRZ +M/EpA/S4fMtl2H65SMYWl3Z5e1gAyfxz5QXkg6b1A7oh64Xzhs6XB8ep/qzObRJ0VQE i1aNvQJG0gWxmlrZ5hiLoqH5LzGAQXppMRMvww7aeyqfdjmaFU+uX4pONUedEZYryI0P idmQ== X-Gm-Message-State: AOJu0YzzBb8TfNTQj5845cdj9iVpP5hfb8L31Q1j0W/xpa7rKxBcuYnG ouXRTSXk4AlL3mL6rulToXwZf/HtmkWVCO7PkyEedd3Qb1M8A5KhB11cJVbMIdr4+5TyUcTMaX6 DeLjZ X-Gm-Gg: ASbGncuBqgAsdh4D1OvF0CcaWNzFkXIdpi6SQK1or2tnUiJGegVxeNW09lgqAtNfs4N R7W+tcLtlbfx86h323eMHjwd+SgunycuME+eo608k+2RF5uux46Z8ZsQq3RoqUNo1ZF6tX+2SAe Vd1oJpTHcBw9xK4gH8dwIhOb4K1T7g93Ajine3FbED/eJ6O5fP3PzQFcBeEffjtMo0c/bEVnImO AvUSMS2NelS9g5+ZfBLpBYme/5qTMIvKiik00QhB3UzUtOkuhUeLgpGSPr1/9J5RpUo1q7Tt5kH 831gDZNJO9HaBErGTj/ZSLxzuDdTC9APWSsKN9GiH7zGEmQu0dBs3c2KN465+a7pT1X8 X-Google-Smtp-Source: AGHT+IGHAwWTHRsxjhLkp30nyUnIeTGyO12y5N5KCUVQQKo3mO1jhjPZ5i8ZtRgZJgeVODz4cpZNLw== X-Received: by 2002:a05:600c:3b8e:b0:43d:fa58:700e with SMTP id 5b1f17b1804b1-454b9872ebamr4202805e9.33.1751646393553; Fri, 04 Jul 2025 09:26:33 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 095/119] target/arm: Implement SME2 SEL Date: Fri, 4 Jul 2025 17:24:35 +0100 Message-ID: <20250704162501.249138-96-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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=peter.maydell@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 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: 1751647169932116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-84-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/helper-sme.h | 5 + target/arm/tcg/sme.decode | 9 + target/arm/tcg/sme_helper.c | 317 +++++++++++++++++++++++++++++++++ target/arm/tcg/translate-sme.c | 31 ++++ 4 files changed, 362 insertions(+) diff --git a/target/arm/tcg/helper-sme.h b/target/arm/tcg/helper-sme.h index 78ba3d1f20b..467073ea258 100644 --- a/target/arm/tcg/helper-sme.h +++ b/target/arm/tcg/helper-sme.h @@ -313,3 +313,8 @@ DEF_HELPER_FLAGS_5(sme2_fclamp_h, TCG_CALL_NO_RWG, void= , ptr, ptr, ptr, fpst, i3 DEF_HELPER_FLAGS_5(sme2_fclamp_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, fp= st, i32) DEF_HELPER_FLAGS_5(sme2_fclamp_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, fp= st, i32) DEF_HELPER_FLAGS_5(sme2_bfclamp, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, fps= t, i32) + +DEF_HELPER_FLAGS_5(sme2_sel_b, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32, = i32) +DEF_HELPER_FLAGS_5(sme2_sel_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32, = i32) +DEF_HELPER_FLAGS_5(sme2_sel_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32, = i32) +DEF_HELPER_FLAGS_5(sme2_sel_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32, = i32) diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index c4b85a36d0c..0a2ceea8bee 100644 --- a/target/arm/tcg/sme.decode +++ b/target/arm/tcg/sme.decode @@ -878,6 +878,15 @@ UCLAMP 11000001 esz:2 1 zm:5 110001 zn:5 ....= 1 \ UCLAMP 11000001 esz:2 1 zm:5 110011 zn:5 ...0 1 \ &zzz_en zd=3D%zd_ax4 n=3D4 =20 +### SME2 Multi-vector SVE Select + +%sel_pg 10:3 !function=3Dplus_8 + +SEL 11000001 esz:2 1 ....0 100 ... ....0 ....0 \ + n=3D2 zd=3D%zd_ax2 zn=3D%zn_ax2 zm=3D%zm_ax2 pg=3D%sel_pg +SEL 11000001 esz:2 1 ...01 100 ... ...00 ...00 \ + n=3D4 zd=3D%zd_ax4 zn=3D%zn_ax4 zm=3D%zm_ax4 pg=3D%sel_pg + ### SME Multiple Zero =20 &zero_za rv off ngrp nvec diff --git a/target/arm/tcg/sme_helper.c b/target/arm/tcg/sme_helper.c index 8a1f9fbf3df..c1166e4ffa9 100644 --- a/target/arm/tcg/sme_helper.c +++ b/target/arm/tcg/sme_helper.c @@ -2118,3 +2118,320 @@ FCLAMP(sme2_fclamp_d, float64, H8) FCLAMP(sme2_bfclamp, bfloat16, H2) =20 #undef FCLAMP + +void HELPER(sme2_sel_b)(void *vd, void *vn, void *vm, + uint32_t png, uint32_t desc) +{ + int vl =3D simd_oprsz(desc); + int nreg =3D simd_data(desc); + int elements =3D vl / sizeof(uint8_t); + DecodeCounter p =3D decode_counter(png, vl, MO_8); + + if (p.lg2_stride =3D=3D 0) { + if (p.invert) { + for (int r =3D 0; r < nreg; r++) { + uint8_t *d =3D vd + r * sizeof(ARMVectorReg); + uint8_t *n =3D vn + r * sizeof(ARMVectorReg); + uint8_t *m =3D vm + r * sizeof(ARMVectorReg); + int split =3D p.count - r * elements; + + if (split <=3D 0) { + memcpy(d, n, vl); /* all true */ + } else if (elements <=3D split) { + memcpy(d, m, vl); /* all false */ + } else { + for (int e =3D 0; e < split; e++) { + d[H1(e)] =3D m[H1(e)]; + } + for (int e =3D split; e < elements; e++) { + d[H1(e)] =3D n[H1(e)]; + } + } + } + } else { + for (int r =3D 0; r < nreg; r++) { + uint8_t *d =3D vd + r * sizeof(ARMVectorReg); + uint8_t *n =3D vn + r * sizeof(ARMVectorReg); + uint8_t *m =3D vm + r * sizeof(ARMVectorReg); + int split =3D p.count - r * elements; + + if (split <=3D 0) { + memcpy(d, m, vl); /* all false */ + } else if (elements <=3D split) { + memcpy(d, n, vl); /* all true */ + } else { + for (int e =3D 0; e < split; e++) { + d[H1(e)] =3D n[H1(e)]; + } + for (int e =3D split; e < elements; e++) { + d[H1(e)] =3D m[H1(e)]; + } + } + } + } + } else { + int estride =3D 1 << p.lg2_stride; + if (p.invert) { + for (int r =3D 0; r < nreg; r++) { + uint8_t *d =3D vd + r * sizeof(ARMVectorReg); + uint8_t *n =3D vn + r * sizeof(ARMVectorReg); + uint8_t *m =3D vm + r * sizeof(ARMVectorReg); + int split =3D p.count - r * elements; + int e =3D 0; + + for (; e < MIN(split, elements); e++) { + d[H1(e)] =3D m[H1(e)]; + } + for (; e < elements; e +=3D estride) { + d[H1(e)] =3D n[H1(e)]; + for (int i =3D 1; i < estride; i++) { + d[H1(e + i)] =3D m[H1(e + i)]; + } + } + } + } else { + for (int r =3D 0; r < nreg; r++) { + uint8_t *d =3D vd + r * sizeof(ARMVectorReg); + uint8_t *n =3D vn + r * sizeof(ARMVectorReg); + uint8_t *m =3D vm + r * sizeof(ARMVectorReg); + int split =3D p.count - r * elements; + int e =3D 0; + + for (; e < MIN(split, elements); e +=3D estride) { + d[H1(e)] =3D n[H1(e)]; + for (int i =3D 1; i < estride; i++) { + d[H1(e + i)] =3D m[H1(e + i)]; + } + } + for (; e < elements; e++) { + d[H1(e)] =3D m[H1(e)]; + } + } + } + } +} + +void HELPER(sme2_sel_h)(void *vd, void *vn, void *vm, + uint32_t png, uint32_t desc) +{ + int vl =3D simd_oprsz(desc); + int nreg =3D simd_data(desc); + int elements =3D vl / sizeof(uint16_t); + DecodeCounter p =3D decode_counter(png, vl, MO_16); + + if (p.lg2_stride =3D=3D 0) { + if (p.invert) { + for (int r =3D 0; r < nreg; r++) { + uint16_t *d =3D vd + r * sizeof(ARMVectorReg); + uint16_t *n =3D vn + r * sizeof(ARMVectorReg); + uint16_t *m =3D vm + r * sizeof(ARMVectorReg); + int split =3D p.count - r * elements; + + if (split <=3D 0) { + memcpy(d, n, vl); /* all true */ + } else if (elements <=3D split) { + memcpy(d, m, vl); /* all false */ + } else { + for (int e =3D 0; e < split; e++) { + d[H2(e)] =3D m[H2(e)]; + } + for (int e =3D split; e < elements; e++) { + d[H2(e)] =3D n[H2(e)]; + } + } + } + } else { + for (int r =3D 0; r < nreg; r++) { + uint16_t *d =3D vd + r * sizeof(ARMVectorReg); + uint16_t *n =3D vn + r * sizeof(ARMVectorReg); + uint16_t *m =3D vm + r * sizeof(ARMVectorReg); + int split =3D p.count - r * elements; + + if (split <=3D 0) { + memcpy(d, m, vl); /* all false */ + } else if (elements <=3D split) { + memcpy(d, n, vl); /* all true */ + } else { + for (int e =3D 0; e < split; e++) { + d[H2(e)] =3D n[H2(e)]; + } + for (int e =3D split; e < elements; e++) { + d[H2(e)] =3D m[H2(e)]; + } + } + } + } + } else { + int estride =3D 1 << p.lg2_stride; + if (p.invert) { + for (int r =3D 0; r < nreg; r++) { + uint16_t *d =3D vd + r * sizeof(ARMVectorReg); + uint16_t *n =3D vn + r * sizeof(ARMVectorReg); + uint16_t *m =3D vm + r * sizeof(ARMVectorReg); + int split =3D p.count - r * elements; + int e =3D 0; + + for (; e < MIN(split, elements); e++) { + d[H2(e)] =3D m[H2(e)]; + } + for (; e < elements; e +=3D estride) { + d[H2(e)] =3D n[H2(e)]; + for (int i =3D 1; i < estride; i++) { + d[H2(e + i)] =3D m[H2(e + i)]; + } + } + } + } else { + for (int r =3D 0; r < nreg; r++) { + uint16_t *d =3D vd + r * sizeof(ARMVectorReg); + uint16_t *n =3D vn + r * sizeof(ARMVectorReg); + uint16_t *m =3D vm + r * sizeof(ARMVectorReg); + int split =3D p.count - r * elements; + int e =3D 0; + + for (; e < MIN(split, elements); e +=3D estride) { + d[H2(e)] =3D n[H2(e)]; + for (int i =3D 1; i < estride; i++) { + d[H2(e + i)] =3D m[H2(e + i)]; + } + } + for (; e < elements; e++) { + d[H2(e)] =3D m[H2(e)]; + } + } + } + } +} + +void HELPER(sme2_sel_s)(void *vd, void *vn, void *vm, + uint32_t png, uint32_t desc) +{ + int vl =3D simd_oprsz(desc); + int nreg =3D simd_data(desc); + int elements =3D vl / sizeof(uint32_t); + DecodeCounter p =3D decode_counter(png, vl, MO_32); + + if (p.lg2_stride =3D=3D 0) { + if (p.invert) { + for (int r =3D 0; r < nreg; r++) { + uint32_t *d =3D vd + r * sizeof(ARMVectorReg); + uint32_t *n =3D vn + r * sizeof(ARMVectorReg); + uint32_t *m =3D vm + r * sizeof(ARMVectorReg); + int split =3D p.count - r * elements; + + if (split <=3D 0) { + memcpy(d, n, vl); /* all true */ + } else if (elements <=3D split) { + memcpy(d, m, vl); /* all false */ + } else { + for (int e =3D 0; e < split; e++) { + d[H4(e)] =3D m[H4(e)]; + } + for (int e =3D split; e < elements; e++) { + d[H4(e)] =3D n[H4(e)]; + } + } + } + } else { + for (int r =3D 0; r < nreg; r++) { + uint32_t *d =3D vd + r * sizeof(ARMVectorReg); + uint32_t *n =3D vn + r * sizeof(ARMVectorReg); + uint32_t *m =3D vm + r * sizeof(ARMVectorReg); + int split =3D p.count - r * elements; + + if (split <=3D 0) { + memcpy(d, m, vl); /* all false */ + } else if (elements <=3D split) { + memcpy(d, n, vl); /* all true */ + } else { + for (int e =3D 0; e < split; e++) { + d[H4(e)] =3D n[H4(e)]; + } + for (int e =3D split; e < elements; e++) { + d[H4(e)] =3D m[H4(e)]; + } + } + } + } + } else { + /* p.esz must be MO_64, so stride must be 2. */ + if (p.invert) { + for (int r =3D 0; r < nreg; r++) { + uint32_t *d =3D vd + r * sizeof(ARMVectorReg); + uint32_t *n =3D vn + r * sizeof(ARMVectorReg); + uint32_t *m =3D vm + r * sizeof(ARMVectorReg); + int split =3D p.count - r * elements; + int e =3D 0; + + for (; e < MIN(split, elements); e++) { + d[H4(e)] =3D m[H4(e)]; + } + for (; e < elements; e +=3D 2) { + d[H4(e)] =3D n[H4(e)]; + d[H4(e + 1)] =3D m[H4(e + 1)]; + } + } + } else { + for (int r =3D 0; r < nreg; r++) { + uint32_t *d =3D vd + r * sizeof(ARMVectorReg); + uint32_t *n =3D vn + r * sizeof(ARMVectorReg); + uint32_t *m =3D vm + r * sizeof(ARMVectorReg); + int split =3D p.count - r * elements; + int e =3D 0; + + for (; e < MIN(split, elements); e +=3D 2) { + d[H4(e)] =3D n[H4(e)]; + d[H4(e + 1)] =3D m[H4(e + 1)]; + } + for (; e < elements; e++) { + d[H4(e)] =3D m[H4(e)]; + } + } + } + } +} + +void HELPER(sme2_sel_d)(void *vd, void *vn, void *vm, + uint32_t png, uint32_t desc) +{ + int vl =3D simd_oprsz(desc); + int nreg =3D simd_data(desc); + int elements =3D vl / sizeof(uint64_t); + DecodeCounter p =3D decode_counter(png, vl, MO_64); + + if (p.invert) { + for (int r =3D 0; r < nreg; r++) { + uint64_t *d =3D vd + r * sizeof(ARMVectorReg); + uint64_t *n =3D vn + r * sizeof(ARMVectorReg); + uint64_t *m =3D vm + r * sizeof(ARMVectorReg); + int split =3D p.count - r * elements; + + if (split <=3D 0) { + memcpy(d, n, vl); /* all true */ + } else if (elements <=3D split) { + memcpy(d, m, vl); /* all false */ + } else { + memcpy(d, m, split * sizeof(uint64_t)); + memcpy(d + split, n + split, + (elements - split) * sizeof(uint64_t)); + } + } + } else { + for (int r =3D 0; r < nreg; r++) { + uint64_t *d =3D vd + r * sizeof(ARMVectorReg); + uint64_t *n =3D vn + r * sizeof(ARMVectorReg); + uint64_t *m =3D vm + r * sizeof(ARMVectorReg); + int split =3D p.count - r * elements; + + if (split <=3D 0) { + memcpy(d, m, vl); /* all false */ + } else if (elements <=3D split) { + memcpy(d, n, vl); /* all true */ + } else { + memcpy(d, n, split * sizeof(uint64_t)); + memcpy(d + split, m + split, + (elements - split) * sizeof(uint64_t)); + } + } + } +} diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index b6316ac716c..74075971772 100644 --- a/target/arm/tcg/translate-sme.c +++ b/target/arm/tcg/translate-sme.c @@ -1642,3 +1642,34 @@ static gen_helper_gvec_3 * const uclamp_fns[] =3D { gen_helper_sme2_uclamp_d, }; TRANS(UCLAMP, do_clamp, a, uclamp_fns) + +static bool trans_SEL(DisasContext *s, arg_SEL *a) +{ + typedef void sme_sel_fn(TCGv_ptr, TCGv_ptr, TCGv_ptr, TCGv_i32, TCGv_i= 32); + static sme_sel_fn * const fns[4] =3D { + gen_helper_sme2_sel_b, gen_helper_sme2_sel_h, + gen_helper_sme2_sel_s, gen_helper_sme2_sel_d + }; + + if (!dc_isar_feature(aa64_sme2, s)) { + return false; + } + if (sme_sm_enabled_check(s)) { + int svl =3D streaming_vec_reg_size(s); + uint32_t desc =3D simd_desc(svl, svl, a->n); + TCGv_ptr t_d =3D tcg_temp_new_ptr(); + TCGv_ptr t_n =3D tcg_temp_new_ptr(); + TCGv_ptr t_m =3D tcg_temp_new_ptr(); + TCGv_i32 png =3D tcg_temp_new_i32(); + + tcg_gen_addi_ptr(t_d, tcg_env, vec_full_reg_offset(s, a->zd)); + tcg_gen_addi_ptr(t_n, tcg_env, vec_full_reg_offset(s, a->zn)); + tcg_gen_addi_ptr(t_m, tcg_env, vec_full_reg_offset(s, a->zm)); + + tcg_gen_ld16u_i32(png, tcg_env, pred_full_reg_offset(s, a->pg) + ^ (HOST_BIG_ENDIAN ? 6 : 0)); + + fns[a->esz](t_d, t_n, t_m, png, tcg_constant_i32(desc)); + } + return true; +} --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647255; cv=none; d=zohomail.com; s=zohoarc; b=LdVjVurIX7WS+usDvd1qiASRwFsAZFDFfhp5Ltnf2XIXXQlBU6NzYfN6rSECpl3iqH9F3h+hDvyyoDjdiuEZnR+GFmuE31WIkCoE1rNuKOLIcNViNy8Hd5pl7Dqa08g5O2TLtfppKL2FqnWAumbDgp25SvRihsOI8lD+dju3O6A= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647255; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=Iq44g23aFUWCk1V9aSX7ATwN3BZ7KkbwTaT+imfmP1c=; b=MNwi4Yzb+zjCAojfif1aK4vDXup2UdmH8zjGyZcnKmPKyY0yW2BSmflN5/ecxpQqvSMFBhA5lXPjSi0g2NAna6T+z7hBr+Wd6w7UZc7jZ7Bs7EQE/M4Q9NPFPZLDKOoI7/xzRlWe/WKuXzB/7sMhUUclRu8s1V50u8TChrzvkVs= 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 1751647255226977.8967736686467; Fri, 4 Jul 2025 09:40:55 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjGn-00007Y-To; Fri, 04 Jul 2025 12:28:15 -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 1uXjFF-0003Ep-NU for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:37 -0400 Received: from mail-wm1-x332.google.com ([2a00:1450:4864:20::332]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjFD-0006sv-Oa for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:37 -0400 Received: by mail-wm1-x332.google.com with SMTP id 5b1f17b1804b1-451dbe494d6so12232255e9.1 for ; Fri, 04 Jul 2025 09:26:35 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.26.33 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:26:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646394; x=1752251194; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=Iq44g23aFUWCk1V9aSX7ATwN3BZ7KkbwTaT+imfmP1c=; b=q/vbt2T7oD6CRo3nZpkDOIloHYHtmWuGZ49vcBn1V1u3brCaXhEzbjx7ciiKXzUxz1 NtNDdhCA1+Xkudv2qyjlpgXqZEuR5mUQYzyyhFmbbBKj95Bnlm/eVGsroYI3UyeSSfAv 5uGSQfIaalp/krLnM3ZqJPa1WTCN0mXg3g/bUEZczcBSnSLYfSOItiF0hV+NIo1QhQB0 YcWK52pxU3Y4fBIKgJ6y4ulYAlcJxRoFnm6/yXZpLlyD53YySbPeUVgXaovQFLWIqeyQ jAzHmTP/Q2uIgpuiCygiezL5Oug8dH2gDF+S72Agp92lhq11UawEaz5UCTcc/h8LTmM1 p1xg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646394; x=1752251194; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Iq44g23aFUWCk1V9aSX7ATwN3BZ7KkbwTaT+imfmP1c=; b=u6yWD7lEnRd/WLWCpjCUQcCAKp7zJxwG3u3Q7gLJxrPxZZg4LA/8K9YUIEA4uXWOY0 oRBzum6On/jeg97xOziVno7CB2rcISYxglFDlYTr2WC64fpLrxem/5o5MQnR+/KAMIvq 3h8s2eDoSqp+0ExgMr2CyU0DvvPOFJIlSpfTlFiCTdi42kxYVAVjOzTTCzppaE1BEsZm sDK4p078gGELIawkgbNDXw8Z8UG5MHRa17Hv868LZVZmzjjHgYP+q21Afof7G6E2+m2B 9Tk8yEwobq72Di0VuqW8IxV1ezZ0ciKvxTanYtO3DSAUOmbfeFnRqRwcnN2bDn2Gybqh M9ew== X-Gm-Message-State: AOJu0YzAzRkRR7K3ja0RrpjltTbskdO63ntWlCo3zjQgsRN9pCRdP5at s+fjZh/Zy1vuOF4jo1lwKooC5mpkk34rbj+3OqECzONG5hecvz9HU2DHkzObpdX1jeFr2e97eEL k/Y6L X-Gm-Gg: ASbGncsp9DoIFT6S75U/3PH10xu60E0kHPEjpqfrrcfN5GNaypFMQe3AeP9i2l7Mt06 gwJBbGAmCTiUaHwAr5tZ71HW2UeBx6lH8G5YFnpe3SSCHpTYKDkKurEoFgKQ3Tvttlq/HjTdkID er2Pi3KpYapwj2nEaEUgNL5OxsGi68nKdorsBz2GAcIl9DBW2oQvrCgVCQ7uK44iHnF7UYkXi0k Hx5OYxg/HQvmowbdNK9t/iQzu72reLXHOs3H5CpFZ8E8LnD7Je+QsXThxGfcvdupAkVfm2Ak2RK pexhCtw8L5kSOZ1gqIcT1VbjFsh+ojmAPC49WjPOnTCDmMda7jL3rpz7cjBMPzRAaJSB X-Google-Smtp-Source: AGHT+IExMpNrGDNdfJZ7XhjWWD8eHVFdXMDhDEN7Vh1ed46ZX+JTO6bVe6vBoEijnJj6RAPEUKhkrg== X-Received: by 2002:a05:600c:4689:b0:439:643a:c8d5 with SMTP id 5b1f17b1804b1-454b819befdmr17032405e9.0.1751646394365; Fri, 04 Jul 2025 09:26:34 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 096/119] target/arm: Implement ANDQV, ORQV, EORQV for SVE2p1 Date: Fri, 4 Jul 2025 17:24:36 +0100 Message-ID: <20250704162501.249138-97-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::332; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x332.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751647256939116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-85-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/helper-sve.h | 15 ++++++++++++ target/arm/tcg/sve.decode | 5 ++++ target/arm/tcg/sve_helper.c | 42 ++++++++++++++++++++++++++++++++++ target/arm/tcg/translate-sve.c | 3 +++ 4 files changed, 65 insertions(+) diff --git a/target/arm/tcg/helper-sve.h b/target/arm/tcg/helper-sve.h index ec82d0a4e74..9758613b2d8 100644 --- a/target/arm/tcg/helper-sve.h +++ b/target/arm/tcg/helper-sve.h @@ -2955,3 +2955,18 @@ DEF_HELPER_FLAGS_4(sve2p1_uminqv_s, TCG_CALL_NO_RWG,= void, ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_4(sve2p1_uminqv_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, = i32) =20 DEF_HELPER_FLAGS_3(pext, TCG_CALL_NO_RWG, void, ptr, i32, i32) + +DEF_HELPER_FLAGS_4(sve2p1_orqv_b, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i3= 2) +DEF_HELPER_FLAGS_4(sve2p1_orqv_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i3= 2) +DEF_HELPER_FLAGS_4(sve2p1_orqv_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i3= 2) +DEF_HELPER_FLAGS_4(sve2p1_orqv_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i3= 2) + +DEF_HELPER_FLAGS_4(sve2p1_eorqv_b, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i= 32) +DEF_HELPER_FLAGS_4(sve2p1_eorqv_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i= 32) +DEF_HELPER_FLAGS_4(sve2p1_eorqv_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i= 32) +DEF_HELPER_FLAGS_4(sve2p1_eorqv_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i= 32) + +DEF_HELPER_FLAGS_4(sve2p1_andqv_b, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i= 32) +DEF_HELPER_FLAGS_4(sve2p1_andqv_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i= 32) +DEF_HELPER_FLAGS_4(sve2p1_andqv_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i= 32) +DEF_HELPER_FLAGS_4(sve2p1_andqv_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i= 32) diff --git a/target/arm/tcg/sve.decode b/target/arm/tcg/sve.decode index b7622577594..ff740f7b40b 100644 --- a/target/arm/tcg/sve.decode +++ b/target/arm/tcg/sve.decode @@ -326,6 +326,11 @@ ORV 00000100 .. 011 000 001 ... ..... ....= . @rd_pg_rn EORV 00000100 .. 011 001 001 ... ..... ..... @rd_pg_rn ANDV 00000100 .. 011 010 001 ... ..... ..... @rd_pg_rn =20 +# SVE2.1 bitwise logical reduction (quadwords) +ORQV 00000100 .. 011 100 001 ... ..... ..... @rd_pg_rn +EORQV 00000100 .. 011 101 001 ... ..... ..... @rd_pg_rn +ANDQV 00000100 .. 011 110 001 ... ..... ..... @rd_pg_rn + # SVE constructive prefix (predicated) MOVPRFX_z 00000100 .. 010 000 001 ... ..... ..... @rd_pg_rn MOVPRFX_m 00000100 .. 010 001 001 ... ..... ..... @rd_pg_rn diff --git a/target/arm/tcg/sve_helper.c b/target/arm/tcg/sve_helper.c index 866f85ba306..f47e719fbe1 100644 --- a/target/arm/tcg/sve_helper.c +++ b/target/arm/tcg/sve_helper.c @@ -123,6 +123,11 @@ static inline uint64_t expand_pred_s(uint8_t byte) return word[byte & 0x11]; } =20 +static inline uint64_t expand_pred_d(uint8_t byte) +{ + return -(uint64_t)(byte & 1); +} + #define LOGICAL_PPPP(NAME, FUNC) \ void HELPER(NAME)(void *vd, void *vn, void *vm, void *vg, uint32_t desc) \ { \ @@ -206,6 +211,7 @@ void HELPER(NAME)(void *vd, void *vn, void *vm, void *v= g, uint32_t desc) \ #define DO_EOR(N, M) (N ^ M) #define DO_ORR(N, M) (N | M) #define DO_BIC(N, M) (N & ~M) +#define DO_ORC(N, M) (N | ~M) #define DO_ADD(N, M) (N + M) #define DO_SUB(N, M) (N - M) #define DO_MAX(N, M) ((N) >=3D (M) ? (N) : (M)) @@ -1900,10 +1906,46 @@ DO_ZZI(sve_umini_d, uint64_t, DO_MIN) =20 #undef DO_ZZI =20 +#define DO_LOGIC_QV(NAME, SUFF, INIT, VOP, POP) \ +void HELPER(NAME ## _ ## SUFF)(void *vd, void *vn, void *vg, uint32_t desc= ) \ +{ \ + unsigned seg =3D simd_oprsz(desc) / 16; \ + uint64_t r0 =3D INIT, r1 =3D INIT; = \ + for (unsigned s =3D 0; s < seg; s++) { \ + uint64_t p0 =3D expand_pred_##SUFF(*(uint8_t *)(vg + H1(s * 2))); \ + uint64_t p1 =3D expand_pred_##SUFF(*(uint8_t *)(vg + H1(s * 2 + 1)= )); \ + uint64_t v0 =3D *(uint64_t *)(vn + s * 16); \ + uint64_t v1 =3D *(uint64_t *)(vn + s * 16 + 8); \ + v0 =3D POP(v0, p0), v1 =3D POP(v1, p1); = \ + r0 =3D VOP(r0, v0), r1 =3D VOP(r1, v1); = \ + } \ + *(uint64_t *)(vd + 0) =3D r0; \ + *(uint64_t *)(vd + 8) =3D r1; \ + clear_tail(vd, 16, simd_maxsz(desc)); \ +} + +DO_LOGIC_QV(sve2p1_orqv, b, 0, DO_ORR, DO_AND) +DO_LOGIC_QV(sve2p1_orqv, h, 0, DO_ORR, DO_AND) +DO_LOGIC_QV(sve2p1_orqv, s, 0, DO_ORR, DO_AND) +DO_LOGIC_QV(sve2p1_orqv, d, 0, DO_ORR, DO_AND) + +DO_LOGIC_QV(sve2p1_eorqv, b, 0, DO_EOR, DO_AND) +DO_LOGIC_QV(sve2p1_eorqv, h, 0, DO_EOR, DO_AND) +DO_LOGIC_QV(sve2p1_eorqv, s, 0, DO_EOR, DO_AND) +DO_LOGIC_QV(sve2p1_eorqv, d, 0, DO_EOR, DO_AND) + +DO_LOGIC_QV(sve2p1_andqv, b, -1, DO_AND, DO_ORC) +DO_LOGIC_QV(sve2p1_andqv, h, -1, DO_AND, DO_ORC) +DO_LOGIC_QV(sve2p1_andqv, s, -1, DO_AND, DO_ORC) +DO_LOGIC_QV(sve2p1_andqv, d, -1, DO_AND, DO_ORC) + +#undef DO_LOGIC_QV + #undef DO_AND #undef DO_ORR #undef DO_EOR #undef DO_BIC +#undef DO_ORC #undef DO_ADD #undef DO_SUB #undef DO_MAX diff --git a/target/arm/tcg/translate-sve.c b/target/arm/tcg/translate-sve.c index 6ad4d1e289c..2114b2ecca1 100644 --- a/target/arm/tcg/translate-sve.c +++ b/target/arm/tcg/translate-sve.c @@ -778,6 +778,9 @@ DO_ZPZ(NOT_zpz, aa64_sve, sve_not_zpz) DO_ZPZ(ABS, aa64_sve, sve_abs) DO_ZPZ(NEG, aa64_sve, sve_neg) DO_ZPZ(RBIT, aa64_sve, sve_rbit) +DO_ZPZ(ORQV, aa64_sme2p1_or_sve2p1, sve2p1_orqv) +DO_ZPZ(EORQV, aa64_sme2p1_or_sve2p1, sve2p1_eorqv) +DO_ZPZ(ANDQV, aa64_sme2p1_or_sve2p1, sve2p1_andqv) =20 static gen_helper_gvec_3 * const fabs_fns[4] =3D { NULL, gen_helper_sve_fabs_h, --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647255; cv=none; d=zohomail.com; s=zohoarc; b=dQajub7Z8PYoEMlWBrPp9gqQh1CkpI13VUWDlTeRTCPt/BDbIp9z7VQIjzzVZLHiZa52yCh7H4ygutojQaUG++QeIwNgXF/LRL3OOC8ZZGKaCxwguz7Pullsm1XbSLKoAMVb6EbOGRJl8wfDZwoEk2JR61m+LD8YSWHbM3eSutg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647255; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=fFvYgl+jsQ2wlOhRulGRD2xZlEGTh9lrWYra0HOGUD4=; b=R/mQxCAi/5qCUkII6d51nnRG9gV7he2xSvsjXaV5Ab0CNaIjaW/Bg8UkzkZFrGK6U4dlX153gZCmMJNGJsljvdBD/QSeKLmCSvd6AsE5bG2wf7FMmBYTz5eiFpmY7f+StwbDvfD1OgUxkbJWFKnVsyr19aq/xLKKwdbzemU3jlw= 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 1751647255410196.42258597172963; Fri, 4 Jul 2025 09:40:55 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjH1-0001dA-9w; Fri, 04 Jul 2025 12:28:27 -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 1uXjFH-0003SJ-It for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:39 -0400 Received: from mail-wm1-x332.google.com ([2a00:1450:4864:20::332]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjFF-0006tC-3y for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:39 -0400 Received: by mail-wm1-x332.google.com with SMTP id 5b1f17b1804b1-450ce3a2dd5so9581825e9.3 for ; Fri, 04 Jul 2025 09:26:36 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.26.34 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:26:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646395; x=1752251195; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=fFvYgl+jsQ2wlOhRulGRD2xZlEGTh9lrWYra0HOGUD4=; b=yja9CU+QpEZbFc3nnkygXP2MJRB75ilbVQq8Xhx3wQ62S7tRsDlxx/Ph49e+PVtb7d QSiq33Pc97yJXZ/Fa7XnrUkKRgpaFi8oIfLxRV2gLbdSpJR3zdKRGlI0zJ1cKkgWiMRD 8c24Ia8lybyCPcEt7jl7KL1bWRn+gzVV2KNLN1aiqt3pTAQslE9Ed6gsdqTtPF9yriEm huF+hOw+igRcM0IFgt+tBh4wNboXwaA0oyyn0MvSEb721AQ/zABy1mREvSJQmywQnGmk +i0+G7R/flMCZWxHJMle+ea3GKKMiU1IjpDpHdZ0cI4shBUSugaRIOgN7rMG/0EGCt+A aBgA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646395; x=1752251195; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=fFvYgl+jsQ2wlOhRulGRD2xZlEGTh9lrWYra0HOGUD4=; b=mW+IBO6AltAPHVMfUmRadgesiXCSOtv0Xn5IHG/sedK21ksygXsT3g89pRBfhOD0oj hPDx9KOQsE4aPqp5TzFAyyZKQEC4fPm/IwE+LkA5NmLLoZndozFy5ulvFyKZdf/Mn+MF Ro6q5eNK1t8v1WUUrGNe7m5rkHmFdHu8SUCn9UEwMtkX6mTmYuAkHfa38sQg7uj3vblQ bxc7wd73tpAmc834BiAU0fjqxv4H7NU0+ap2Wp7JWwRnuTCsRM/tXKGOP8Zsd0bFmf0u AakYJnIF/Oqj0tc48ovTrIaoNmT8mIRWqQJHdHGgq7TNHSwumWD3l3xUHxsn46xKpx82 SvHg== X-Gm-Message-State: AOJu0Yy1NaC4f7hGT9Ssdok8V67JFGzFlpZCF0wJNmv9IoNJV3bwqeSB r6gmcDi7mweftHw4Uu8xrZLUoASR2x/73H75lJo3ntYd2D/s+2EXE/vN4MAyX3kGeobYfqBSlGL fWlre X-Gm-Gg: ASbGncv9HI18Lj3kRC21j/9tZ7N4uR4F2cwe8bxqcRAJZCoiNUioRm3XJgKIHk+fMTM xBsRl4XBiCjfKvsG8IGN4aUMeiBbrW2ErTW+5sgVD97NeVfSQcrNFhYwhVV8WibJ5wRX7mKPGbs eDKYqhfGjnCBh8Yj6kNh/QU/DlB6owYY3O8TTgkFjRTKpvDEB75wOf8Gle4W9og7AWGU2sfXn3I MfWK6FQEPQm9jrPLprjjR3SupchRVC2bscWPnr01QmhpNlaVACYs+lJVsHOndg3SyB9391EZ0PK bRcB9X9XTwEkwC4i3hXSIYnWNfGYq3QHLyPCjGSr68rWwxsoyPkDujg9PXwN+3mp76kJ X-Google-Smtp-Source: AGHT+IFmTfasv48CAu49Vgr7ITxdFnGKuATuphpEE7yyh7jO342FUi8u+YdouX3FBDFgyyMyBB3Bmg== X-Received: by 2002:a05:600c:4ed0:b0:453:9bf:6f7c with SMTP id 5b1f17b1804b1-454b4e76919mr32168805e9.9.1751646395257; Fri, 04 Jul 2025 09:26:35 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 097/119] target/arm: Implement FADDQV, F{MIN, MAX}{NM}QV for SVE2p1 Date: Fri, 4 Jul 2025 17:24:37 +0100 Message-ID: <20250704162501.249138-98-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::332; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x332.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751647257350116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-86-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/helper-sve.h | 49 ++++++++++++++++++++++++ target/arm/tcg/sve.decode | 8 ++++ target/arm/tcg/sve_helper.c | 70 +++++++++++++++++++++------------- target/arm/tcg/translate-sve.c | 48 +++++++++++++++++++++++ 4 files changed, 148 insertions(+), 27 deletions(-) diff --git a/target/arm/tcg/helper-sve.h b/target/arm/tcg/helper-sve.h index 9758613b2d8..906da384dc4 100644 --- a/target/arm/tcg/helper-sve.h +++ b/target/arm/tcg/helper-sve.h @@ -1077,6 +1077,55 @@ DEF_HELPER_FLAGS_4(sve_ah_fminv_s, TCG_CALL_NO_RWG, DEF_HELPER_FLAGS_4(sve_ah_fminv_d, TCG_CALL_NO_RWG, i64, ptr, ptr, fpst, i32) =20 +DEF_HELPER_FLAGS_5(sve2p1_faddqv_h, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, fpst, i32) +DEF_HELPER_FLAGS_5(sve2p1_faddqv_s, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, fpst, i32) +DEF_HELPER_FLAGS_5(sve2p1_faddqv_d, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, fpst, i32) + +DEF_HELPER_FLAGS_5(sve2p1_fmaxnmqv_h, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, fpst, i32) +DEF_HELPER_FLAGS_5(sve2p1_fmaxnmqv_s, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, fpst, i32) +DEF_HELPER_FLAGS_5(sve2p1_fmaxnmqv_d, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, fpst, i32) + +DEF_HELPER_FLAGS_5(sve2p1_fminnmqv_h, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, fpst, i32) +DEF_HELPER_FLAGS_5(sve2p1_fminnmqv_s, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, fpst, i32) +DEF_HELPER_FLAGS_5(sve2p1_fminnmqv_d, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, fpst, i32) + +DEF_HELPER_FLAGS_5(sve2p1_fmaxqv_h, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, fpst, i32) +DEF_HELPER_FLAGS_5(sve2p1_fmaxqv_s, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, fpst, i32) +DEF_HELPER_FLAGS_5(sve2p1_fmaxqv_d, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, fpst, i32) + +DEF_HELPER_FLAGS_5(sve2p1_fminqv_h, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, fpst, i32) +DEF_HELPER_FLAGS_5(sve2p1_fminqv_s, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, fpst, i32) +DEF_HELPER_FLAGS_5(sve2p1_fminqv_d, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, fpst, i32) + +DEF_HELPER_FLAGS_5(sve2p1_ah_fmaxqv_h, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, fpst, i32) +DEF_HELPER_FLAGS_5(sve2p1_ah_fmaxqv_s, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, fpst, i32) +DEF_HELPER_FLAGS_5(sve2p1_ah_fmaxqv_d, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, fpst, i32) + +DEF_HELPER_FLAGS_5(sve2p1_ah_fminqv_h, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, fpst, i32) +DEF_HELPER_FLAGS_5(sve2p1_ah_fminqv_s, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, fpst, i32) +DEF_HELPER_FLAGS_5(sve2p1_ah_fminqv_d, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, fpst, i32) + DEF_HELPER_FLAGS_5(sve_fadda_h, TCG_CALL_NO_RWG, i64, i64, ptr, ptr, fpst, i32) DEF_HELPER_FLAGS_5(sve_fadda_s, TCG_CALL_NO_RWG, diff --git a/target/arm/tcg/sve.decode b/target/arm/tcg/sve.decode index ff740f7b40b..10cac2de22f 100644 --- a/target/arm/tcg/sve.decode +++ b/target/arm/tcg/sve.decode @@ -1036,6 +1036,14 @@ FMINNMV 01100101 .. 000 101 001 ... ..... ..= ... @rd_pg_rn FMAXV 01100101 .. 000 110 001 ... ..... ..... @rd_pg_rn FMINV 01100101 .. 000 111 001 ... ..... ..... @rd_pg_rn =20 +### SVE FP recursive reduction (quadwords) + +FADDQV 01100100 .. 010 000 101 ... ..... ..... @rd_pg_rn +FMAXNMQV 01100100 .. 010 100 101 ... ..... ..... @rd_pg_rn +FMINNMQV 01100100 .. 010 101 101 ... ..... ..... @rd_pg_rn +FMAXQV 01100100 .. 010 110 101 ... ..... ..... @rd_pg_rn +FMINQV 01100100 .. 010 111 101 ... ..... ..... @rd_pg_rn + ## SVE Floating Point Unary Operations - Unpredicated Group =20 FRECPE 01100101 .. 001 110 001100 ..... ..... @rd_rn diff --git a/target/arm/tcg/sve_helper.c b/target/arm/tcg/sve_helper.c index f47e719fbe1..6512df54e60 100644 --- a/target/arm/tcg/sve_helper.c +++ b/target/arm/tcg/sve_helper.c @@ -4361,19 +4361,20 @@ uint32_t HELPER(sve_whilecg)(void *vd, uint32_t cou= nt, uint32_t pred_desc) * The recursion is bounded to depth 7 (128 fp16 elements), so there's * little to gain with a more complex non-recursive form. */ -#define DO_REDUCE(NAME, TYPE, H, FUNC, IDENT) \ -static TYPE NAME##_reduce(TYPE *data, float_status *status, uintptr_t n) \ +#define DO_REDUCE(NAME, SUF, TYPE, H, FUNC, IDENT) \ +static TYPE FUNC##_reduce(TYPE *data, float_status *status, uintptr_t n) \ { \ if (n =3D=3D 1) { \ return *data; \ } else { \ uintptr_t half =3D n / 2; \ - TYPE lo =3D NAME##_reduce(data, status, half); \ - TYPE hi =3D NAME##_reduce(data + half, status, half); \ + TYPE lo =3D FUNC##_reduce(data, status, half); \ + TYPE hi =3D FUNC##_reduce(data + half, status, half); \ return FUNC(lo, hi, status); \ } \ } \ -uint64_t HELPER(NAME)(void *vn, void *vg, float_status *s, uint32_t desc) \ +uint64_t helper_sve_##NAME##v_##SUF(void *vn, void *vg, \ + float_status *s, uint32_t desc) \ { \ uintptr_t i, oprsz =3D simd_oprsz(desc), maxsz =3D simd_data(desc); \ TYPE data[sizeof(ARMVectorReg) / sizeof(TYPE)]; \ @@ -4388,39 +4389,54 @@ uint64_t HELPER(NAME)(void *vn, void *vg, float_sta= tus *s, uint32_t desc) \ for (; i < maxsz; i +=3D sizeof(TYPE)) { \ *(TYPE *)((void *)data + i) =3D IDENT; \ } \ - return NAME##_reduce(data, s, maxsz / sizeof(TYPE)); \ + return FUNC##_reduce(data, s, maxsz / sizeof(TYPE)); \ +} \ +void helper_sve2p1_##NAME##qv_##SUF(void *vd, void *vn, void *vg, \ + float_status *status, uint32_t desc) \ +{ \ + unsigned oprsz =3D simd_oprsz(desc), segments =3D oprsz / 16; \ + for (unsigned e =3D 0; e < 16; e +=3D sizeof(TYPE)) { \ + TYPE data[ARM_MAX_VQ]; \ + for (unsigned s =3D 0; s < segments; s++) { \ + uint16_t pg =3D *(uint16_t *)(vg + H1_2(s * 2)); \ + TYPE nn =3D *(TYPE *)(vn + H(s * 16 + H(e))); \ + data[s] =3D (pg >> e) & 1 ? nn : IDENT; \ + } \ + *(TYPE *)(vd + H(e)) =3D FUNC##_reduce(data, status, segments); \ + } \ + clear_tail(vd, 16, simd_maxsz(desc)); \ } =20 -DO_REDUCE(sve_faddv_h, float16, H1_2, float16_add, float16_zero) -DO_REDUCE(sve_faddv_s, float32, H1_4, float32_add, float32_zero) -DO_REDUCE(sve_faddv_d, float64, H1_8, float64_add, float64_zero) +DO_REDUCE(fadd,h, float16, H1_2, float16_add, float16_zero) +DO_REDUCE(fadd,s, float32, H1_4, float32_add, float32_zero) +DO_REDUCE(fadd,d, float64, H1_8, float64_add, float64_zero) =20 /* Identity is floatN_default_nan, without the function call. */ -DO_REDUCE(sve_fminnmv_h, float16, H1_2, float16_minnum, 0x7E00) -DO_REDUCE(sve_fminnmv_s, float32, H1_4, float32_minnum, 0x7FC00000) -DO_REDUCE(sve_fminnmv_d, float64, H1_8, float64_minnum, 0x7FF8000000000000= ULL) +DO_REDUCE(fminnm,h, float16, H1_2, float16_minnum, 0x7E00) +DO_REDUCE(fminnm,s, float32, H1_4, float32_minnum, 0x7FC00000) +DO_REDUCE(fminnm,d, float64, H1_8, float64_minnum, 0x7FF8000000000000ULL) =20 -DO_REDUCE(sve_fmaxnmv_h, float16, H1_2, float16_maxnum, 0x7E00) -DO_REDUCE(sve_fmaxnmv_s, float32, H1_4, float32_maxnum, 0x7FC00000) -DO_REDUCE(sve_fmaxnmv_d, float64, H1_8, float64_maxnum, 0x7FF8000000000000= ULL) +DO_REDUCE(fmaxnm,h, float16, H1_2, float16_maxnum, 0x7E00) +DO_REDUCE(fmaxnm,s, float32, H1_4, float32_maxnum, 0x7FC00000) +DO_REDUCE(fmaxnm,d, float64, H1_8, float64_maxnum, 0x7FF8000000000000ULL) =20 -DO_REDUCE(sve_fminv_h, float16, H1_2, float16_min, float16_infinity) -DO_REDUCE(sve_fminv_s, float32, H1_4, float32_min, float32_infinity) -DO_REDUCE(sve_fminv_d, float64, H1_8, float64_min, float64_infinity) +DO_REDUCE(fmin,h, float16, H1_2, float16_min, float16_infinity) +DO_REDUCE(fmin,s, float32, H1_4, float32_min, float32_infinity) +DO_REDUCE(fmin,d, float64, H1_8, float64_min, float64_infinity) =20 -DO_REDUCE(sve_fmaxv_h, float16, H1_2, float16_max, float16_chs(float16_inf= inity)) -DO_REDUCE(sve_fmaxv_s, float32, H1_4, float32_max, float32_chs(float32_inf= inity)) -DO_REDUCE(sve_fmaxv_d, float64, H1_8, float64_max, float64_chs(float64_inf= inity)) +DO_REDUCE(fmax,h, float16, H1_2, float16_max, float16_chs(float16_infinity= )) +DO_REDUCE(fmax,s, float32, H1_4, float32_max, float32_chs(float32_infinity= )) +DO_REDUCE(fmax,d, float64, H1_8, float64_max, float64_chs(float64_infinity= )) =20 -DO_REDUCE(sve_ah_fminv_h, float16, H1_2, helper_vfp_ah_minh, float16_infin= ity) -DO_REDUCE(sve_ah_fminv_s, float32, H1_4, helper_vfp_ah_mins, float32_infin= ity) -DO_REDUCE(sve_ah_fminv_d, float64, H1_8, helper_vfp_ah_mind, float64_infin= ity) +DO_REDUCE(ah_fmin,h, float16, H1_2, helper_vfp_ah_minh, float16_infinity) +DO_REDUCE(ah_fmin,s, float32, H1_4, helper_vfp_ah_mins, float32_infinity) +DO_REDUCE(ah_fmin,d, float64, H1_8, helper_vfp_ah_mind, float64_infinity) =20 -DO_REDUCE(sve_ah_fmaxv_h, float16, H1_2, helper_vfp_ah_maxh, +DO_REDUCE(ah_fmax,h, float16, H1_2, helper_vfp_ah_maxh, float16_chs(float16_infinity)) -DO_REDUCE(sve_ah_fmaxv_s, float32, H1_4, helper_vfp_ah_maxs, +DO_REDUCE(ah_fmax,s, float32, H1_4, helper_vfp_ah_maxs, float32_chs(float32_infinity)) -DO_REDUCE(sve_ah_fmaxv_d, float64, H1_8, helper_vfp_ah_maxd, +DO_REDUCE(ah_fmax,d, float64, H1_8, helper_vfp_ah_maxd, float64_chs(float64_infinity)) =20 #undef DO_REDUCE diff --git a/target/arm/tcg/translate-sve.c b/target/arm/tcg/translate-sve.c index 2114b2ecca1..05c0fc948a7 100644 --- a/target/arm/tcg/translate-sve.c +++ b/target/arm/tcg/translate-sve.c @@ -3743,6 +3743,54 @@ DO_VPZ_AH(FMAXV, fmaxv) =20 #undef DO_VPZ =20 +static gen_helper_gvec_3_ptr * const faddqv_fns[4] =3D { + NULL, gen_helper_sve2p1_faddqv_h, + gen_helper_sve2p1_faddqv_s, gen_helper_sve2p1_faddqv_d, +}; +TRANS_FEAT(FADDQV, aa64_sme2p1_or_sve2p1, gen_gvec_fpst_arg_zpz, + faddqv_fns[a->esz], a, 0, + a->esz =3D=3D MO_16 ? FPST_A64_F16 : FPST_A64) + +static gen_helper_gvec_3_ptr * const fmaxnmqv_fns[4] =3D { + NULL, gen_helper_sve2p1_fmaxnmqv_h, + gen_helper_sve2p1_fmaxnmqv_s, gen_helper_sve2p1_fmaxnmqv_d, +}; +TRANS_FEAT(FMAXNMQV, aa64_sme2p1_or_sve2p1, gen_gvec_fpst_arg_zpz, + fmaxnmqv_fns[a->esz], a, 0, + a->esz =3D=3D MO_16 ? FPST_A64_F16 : FPST_A64) + +static gen_helper_gvec_3_ptr * const fminnmqv_fns[4] =3D { + NULL, gen_helper_sve2p1_fminnmqv_h, + gen_helper_sve2p1_fminnmqv_s, gen_helper_sve2p1_fminnmqv_d, +}; +TRANS_FEAT(FMINNMQV, aa64_sme2p1_or_sve2p1, gen_gvec_fpst_arg_zpz, + fminnmqv_fns[a->esz], a, 0, + a->esz =3D=3D MO_16 ? FPST_A64_F16 : FPST_A64) + +static gen_helper_gvec_3_ptr * const fmaxqv_fns[4] =3D { + NULL, gen_helper_sve2p1_fmaxqv_h, + gen_helper_sve2p1_fmaxqv_s, gen_helper_sve2p1_fmaxqv_d, +}; +static gen_helper_gvec_3_ptr * const fmaxqv_ah_fns[4] =3D { + NULL, gen_helper_sve2p1_ah_fmaxqv_h, + gen_helper_sve2p1_ah_fmaxqv_s, gen_helper_sve2p1_ah_fmaxqv_d, +}; +TRANS_FEAT(FMAXQV, aa64_sme2p1_or_sve2p1, gen_gvec_fpst_arg_zpz, + (s->fpcr_ah ? fmaxqv_fns : fmaxqv_ah_fns)[a->esz], a, 0, + a->esz =3D=3D MO_16 ? FPST_A64_F16 : FPST_A64) + +static gen_helper_gvec_3_ptr * const fminqv_fns[4] =3D { + NULL, gen_helper_sve2p1_fminqv_h, + gen_helper_sve2p1_fminqv_s, gen_helper_sve2p1_fminqv_d, +}; +static gen_helper_gvec_3_ptr * const fminqv_ah_fns[4] =3D { + NULL, gen_helper_sve2p1_ah_fminqv_h, + gen_helper_sve2p1_ah_fminqv_s, gen_helper_sve2p1_ah_fminqv_d, +}; +TRANS_FEAT(FMINQV, aa64_sme2p1_or_sve2p1, gen_gvec_fpst_arg_zpz, + (s->fpcr_ah ? fminqv_fns : fminqv_ah_fns)[a->esz], a, 0, + a->esz =3D=3D MO_16 ? FPST_A64_F16 : FPST_A64) + /* *** SVE Floating Point Unary Operations - Unpredicated Group */ --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647274; cv=none; d=zohomail.com; s=zohoarc; b=I1qg0aXADeGRzBli810L2jcePy6FQ71WC1qSMSCkYIEXHrzP8f7Iyoy/foufnR+cIdFbkiehWgzciVrOKaAfa0ncHp0Pvy1420+zxnJ1wz71tmbHDpm8hePDuQatJeqwUAsjP7vKeFS4BLj4h4dxP+Y3hULA3jYO+XwL4/mDlcc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647274; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=se2gnVwR6vM2+v9+co13XyRxuQtGJ6VFah26G5tVziA=; b=FqzeLIp24Gtpo1S5gj1Cuos8kOgScwDNRvFevSJRuZw/Vf5kMsfKYwJvugHo6ziyrnebXkzwNrgveriXsIgLHLADUZYYx0BVcSvALJLtpkUm+9p6cGB3G85owDCA9pR2HAzh6Osd1nyw48Vd1+dgM1iWkfvN5uct+AAL7ViqS0A= 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 1751647274410833.0907088439477; Fri, 4 Jul 2025 09:41:14 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjGy-00012l-1h; Fri, 04 Jul 2025 12:28:24 -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 1uXjFH-0003O7-9I for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:39 -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 1uXjFF-0006tN-Iu for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:38 -0400 Received: by mail-wm1-x334.google.com with SMTP id 5b1f17b1804b1-45363645a8eso7856305e9.1 for ; Fri, 04 Jul 2025 09:26:37 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.26.35 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:26:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646396; x=1752251196; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=se2gnVwR6vM2+v9+co13XyRxuQtGJ6VFah26G5tVziA=; b=F2QbDTpyERrx7mQIJsq3JldJmD2FD4WvlNz67Wg3qpeECJqldKCGiESk/Hp4vp9R8x ssCbhDn0l1ER+qjjQqo4i49bqVH7ANIzjWHYfcb+4lYQV/Tb9UaaPNMAjIh95AO526Oy ZhL9nxLxHCjXLQK93suaUoQyVKCLnim0aMM2I3eShDudJRmmdT2EXFgPSv4rHzA19uF0 dFFgNKuXpSPriF4YMNc7936pMN5t438X8OPMrhMlOoNvkbv/wBm5zeOGDXRKlAy8KApi L73DJN0ogQ4BTlwFfvMFo9ix7PRpf2S7Iwq/rJUHqvkgkCCEoDgu6Z81+VwEYKU3/lrQ 3z9Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646396; x=1752251196; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=se2gnVwR6vM2+v9+co13XyRxuQtGJ6VFah26G5tVziA=; b=YSVS5Cuz5lX3sh1f3Y7QkHuAyXi9E4SaopDUp/EgNeP2xMrv+bve3FdfTgfM5VyngD Bz9W37xp/uJv8sUY0vu5HccRzkgA2kszw9TiPfaxiYIQR9+Zesulncf+qmk44rabLCsG bc3vQLOhO8VNL93OEzfblYm8mjtC7O4hCd3qyWFTuGwm0AU5TaQeIN2QorROL7QFR9OZ wa1Otics65q0zLzfR6gV3QTfZwtoPicc/pGeOL8udqv1QlfcTb0H5jCqszuMDAMUH243 /fOp16hrPWPx2zihz2ds7mvFraJMR3NrRjmyD0dlUc9fwx/QrakQp6KWbvjxSeyQUMIL 3wOg== X-Gm-Message-State: AOJu0Yw4d/GCeqqr7OsBPcpmfp+EBrYp6YCUfghnXQUgsCocI84j/hLO 6M9HTemS5HgLsLA9URZmAUbrngEUr5ZTh8DtuUfYszqbwjQJxXbIFViCebmNsnEIaaLpVFxePWI Wt+e8 X-Gm-Gg: ASbGncshoJBo3JdSwUU491jawcpegZhvWXN+pxs22tfFzTfhS8VLZxrkyeAL580NpTF BtIHwyu/LnE+Qzou1agv21B6e4jg1e7somHRwCkamV0YYWPxY5Mf99m9oo9zztE/i4xcEjkaltF G8QeMN/qRcuSA2fDNhrw8MLxLMp8vFaWVXPdOpICsF0zsgWLayHim2GgEDWwfGmKSt39mCFv5Vx jcbce31V2kJhIxku8VDWleUOODVAG3peIUIrifhIO8AWc0SPcls+p3JPNSY1VrfPON+UveJjSZu 2LheDNv77mRRVlhwAtiDCIQKO1omjZ2xwKv//nfuFppG+kZGgZlRU/e29Ag26FfaZYRu X-Google-Smtp-Source: AGHT+IFqwJ9f6dgFFPJp7j+Is5q27DIbD0MWWUKybt/gl/Hj0qgud1NQAnEGfOV7wIrfEiu1w0zSPQ== X-Received: by 2002:a05:600c:8507:b0:440:6a37:be0d with SMTP id 5b1f17b1804b1-454b31240ccmr36401865e9.15.1751646396114; Fri, 04 Jul 2025 09:26:36 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 098/119] target/arm: Implement BFMLSLB{L, T} for SME2/SVE2p1 Date: Fri, 4 Jul 2025 17:24:38 +0100 Message-ID: <20250704162501.249138-99-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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=peter.maydell@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 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: 1751647275446116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-87-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/sve.decode | 6 ++++++ target/arm/tcg/translate-sve.c | 30 ++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/target/arm/tcg/sve.decode b/target/arm/tcg/sve.decode index 10cac2de22f..0df33127395 100644 --- a/target/arm/tcg/sve.decode +++ b/target/arm/tcg/sve.decode @@ -1727,18 +1727,24 @@ FMLSLT_zzzw 01100100 10 1 ..... 10 1 00 1 .....= ..... @rda_rn_rm_ex esz=3D2 =20 BFMLALB_zzzw 01100100 11 1 ..... 10 0 00 0 ..... ..... @rda_rn_rm_ex e= sz=3D2 BFMLALT_zzzw 01100100 11 1 ..... 10 0 00 1 ..... ..... @rda_rn_rm_ex e= sz=3D2 +BFMLSLB_zzzw 01100100 11 1 ..... 10 1 00 0 ..... ..... @rda_rn_rm_ex e= sz=3D2 +BFMLSLT_zzzw 01100100 11 1 ..... 10 1 00 1 ..... ..... @rda_rn_rm_ex e= sz=3D2 =20 ### SVE2 floating-point dot-product FDOT_zzzz 01100100 00 1 ..... 10 0 00 0 ..... ..... @rda_rn_rm_ex e= sz=3D2 BFDOT_zzzz 01100100 01 1 ..... 10 0 00 0 ..... ..... @rda_rn_rm_ex e= sz=3D2 =20 ### SVE2 floating-point multiply-add long (indexed) + FMLALB_zzxw 01100100 10 1 ..... 0100.0 ..... ..... @rrxr_3a esz=3D2 FMLALT_zzxw 01100100 10 1 ..... 0100.1 ..... ..... @rrxr_3a esz=3D2 FMLSLB_zzxw 01100100 10 1 ..... 0110.0 ..... ..... @rrxr_3a esz=3D2 FMLSLT_zzxw 01100100 10 1 ..... 0110.1 ..... ..... @rrxr_3a esz=3D2 + BFMLALB_zzxw 01100100 11 1 ..... 0100.0 ..... ..... @rrxr_3a esz=3D2 BFMLALT_zzxw 01100100 11 1 ..... 0100.1 ..... ..... @rrxr_3a esz=3D2 +BFMLSLB_zzxw 01100100 11 1 ..... 0110.0 ..... ..... @rrxr_3a esz=3D2 +BFMLSLT_zzxw 01100100 11 1 ..... 0110.1 ..... ..... @rrxr_3a esz=3D2 =20 ### SVE2 floating-point dot-product (indexed) =20 diff --git a/target/arm/tcg/translate-sve.c b/target/arm/tcg/translate-sve.c index 05c0fc948a7..079d3109607 100644 --- a/target/arm/tcg/translate-sve.c +++ b/target/arm/tcg/translate-sve.c @@ -7421,6 +7421,36 @@ static bool do_BFMLAL_zzxw(DisasContext *s, arg_rrxr= _esz *a, bool sel) TRANS_FEAT(BFMLALB_zzxw, aa64_sve_bf16, do_BFMLAL_zzxw, a, false) TRANS_FEAT(BFMLALT_zzxw, aa64_sve_bf16, do_BFMLAL_zzxw, a, true) =20 +static bool do_BFMLSL_zzzw(DisasContext *s, arg_rrrr_esz *a, bool sel) +{ + if (s->fpcr_ah) { + return gen_gvec_fpst_zzzz(s, gen_helper_gvec_ah_bfmlsl, + a->rd, a->rn, a->rm, a->ra, sel, FPST_AH= ); + } else { + return gen_gvec_fpst_zzzz(s, gen_helper_gvec_bfmlsl, + a->rd, a->rn, a->rm, a->ra, sel, FPST_A6= 4); + } +} + +TRANS_FEAT(BFMLSLB_zzzw, aa64_sme2_or_sve2p1, do_BFMLSL_zzzw, a, false) +TRANS_FEAT(BFMLSLT_zzzw, aa64_sme2_or_sve2p1, do_BFMLSL_zzzw, a, true) + +static bool do_BFMLSL_zzxw(DisasContext *s, arg_rrxr_esz *a, bool sel) +{ + if (s->fpcr_ah) { + return gen_gvec_fpst_zzzz(s, gen_helper_gvec_ah_bfmlsl_idx, + a->rd, a->rn, a->rm, a->ra, + (a->index << 1) | sel, FPST_AH); + } else { + return gen_gvec_fpst_zzzz(s, gen_helper_gvec_bfmlsl_idx, + a->rd, a->rn, a->rm, a->ra, + (a->index << 1) | sel, FPST_A64); + } +} + +TRANS_FEAT(BFMLSLB_zzxw, aa64_sme2_or_sve2p1, do_BFMLSL_zzxw, a, false) +TRANS_FEAT(BFMLSLT_zzxw, aa64_sme2_or_sve2p1, do_BFMLSL_zzxw, a, true) + static bool trans_PSEL(DisasContext *s, arg_psel *a) { int vl =3D vec_full_reg_size(s); --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647256; cv=none; d=zohomail.com; s=zohoarc; b=JzS97kPeBSYfmdcLft5G1LprbvZsbaS0YXphAp43rs6EmWydGyo5uMIjMbcn5wUuYGYAGo/LDDvHUDU8uP7ttG5syZCgy4R6c2hHJr+8VX7uwFdk+TFxhu5aLs39QCV+ZxaHL8kayCnRt4x3LgYm9tZKnsxcp/0k+qBtkDXoph0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647256; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=I5Fd8p39t6w2/eWYPfJ4v5WaLwqwXDCDNzF9FiGflus=; b=OIOa9RqP1kkQ++S3u4kl8TLLnhm5IfXWG2sDCg+Xz3tR3Tf/PqCIUx3OBdQvFlkkdZm5qmQW7i29ruylri3uOj78leQJ/3oxQOgZD74x9tizl0RRM8gmtlKO7ejaYE6pTIK/5bdERSccGHtAjHWSt3OAESAAKJHT4iJY7F5PWbk= 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 175164725646366.96812149079824; Fri, 4 Jul 2025 09:40:56 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjFc-0005ur-KI; Fri, 04 Jul 2025 12:27:00 -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 1uXjFI-0003Z0-Eg for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:40 -0400 Received: from mail-wm1-x330.google.com ([2a00:1450:4864:20::330]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjFG-0006tc-ER for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:40 -0400 Received: by mail-wm1-x330.google.com with SMTP id 5b1f17b1804b1-451d6ade159so9795375e9.1 for ; Fri, 04 Jul 2025 09:26:38 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.26.36 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:26:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646397; x=1752251197; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=I5Fd8p39t6w2/eWYPfJ4v5WaLwqwXDCDNzF9FiGflus=; b=gSdd7haC6aFfhmXbYDZ3hmGGJvXkkNfrZDhwGj2ZosEPmezVx5+ABt9fmfA4vTWO5B NCXPK1GV0N52XZOlxPGm3/DESAkNlyySj+gCuvQ8+P8K2OE4/tcJA6AWvyVHTqDlQHU1 YVvGLo5ikRJK2OO+QE8qff+f7u4vf7ZhTrA1o4tN02hYZCt7iZnz0RoL5WoMlWnzwGNv qGaaYhzdYIkqmAbw8Uh6JpyI+JDIyYTnY83KvE+n+AX9b3x4eMv0jq3+dHsufNiraytN xVqdpS9yGWBTG6tLGxrus/cWE/pA4hwfpr8QEw+0GmIfT0cw9xIRDwhDdJRJ5socKXRb qp1w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646397; x=1752251197; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=I5Fd8p39t6w2/eWYPfJ4v5WaLwqwXDCDNzF9FiGflus=; b=E7ezFED9VP8CPO+LoQae4pn6cqtYgx2udOS+ZCHySNgKAypIldm+u6yAdlJSDEr54K umtEymxFYt0lqp073v+AC+nL50FrGSc/L143gSjBz9TNP0w49I541azmCpByM8evRk8n WarllIcxORs9V1NjMTNTMNnfw6irNyXJCKyEOeidkWJ8o2PNV9aXIIj7Q578ogxHfwzx JsRCvo66YjpWk2yF0yoIwAoeg0kFHUZifaDkpj+kw3WxTYze2QZbJmRoZKDZcZ9yGLid MH2NkwLUu1zHw6HFAHJZenKhz3EMeHm5mgvQet/9k2x3362Dh4cYSkcmm3iHd33m/oyK KfAA== X-Gm-Message-State: AOJu0YwhzjwVoX1kGMcbiRBl/Ufy+cN5qFP5X75Az/YnNqLo1pLZ0c8S Gxdt/s31vkUX4D3dG3Gu4WBbXAceX5qaqW0UaYm9LzSpSAorBgE0TRKEU8cXIaYXQ549FejCjrU r/hY1 X-Gm-Gg: ASbGncsb7ACV2TnMms6n/GTpFyjoVTGJBi7wOftgXxQ7JNlPCSiXzI9orVIyFaF66HW Bs3W0QpmhScdYLdVxCTDmnqhZx0MbMwYobdD0C1SRfXBEIrurte7NXnEev57koB0+v+jEwUsLG7 2DCpOW+LJWPzmpx0HOm6M1St2tduyHV+6BkuV6SrY4XEBgb0q5/drB+a1UEKJE3et6Tck6r41dL IDxlrrVua3M5OoTyhAMwEtaL4+fnsULXksBiAu8EXMVqkA+QVcdH6S/Jvv3M2bH6s7nsD+Jalq2 M8Uju8oKvvzobfSfOmKaC2kRqPVgp9XII1/1ETWQzIzMQbtrnEN/cG0nwrB4ghbhyBtG X-Google-Smtp-Source: AGHT+IGDAR9tZaYymSm6BLS66lJMqxDcYBiRLxOaelzG0rUYQEzxIQ0GaqqbLH9u/ChP4YZDYg+JHQ== X-Received: by 2002:a05:600c:458a:b0:43d:160:cd97 with SMTP id 5b1f17b1804b1-454b4eb3449mr29858985e9.25.1751646396935; Fri, 04 Jul 2025 09:26:36 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 099/119] target/arm: Implement CNTP (predicate as counter) for SME2/SVE2p1 Date: Fri, 4 Jul 2025 17:24:39 +0100 Message-ID: <20250704162501.249138-100-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::330; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x330.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751647256955116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-88-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/helper-sve.h | 1 + target/arm/tcg/sve.decode | 3 ++- target/arm/tcg/sve_helper.c | 21 +++++++++++++++++++++ target/arm/tcg/translate-sve.c | 30 ++++++++++++++++++++++++++++++ 4 files changed, 54 insertions(+), 1 deletion(-) diff --git a/target/arm/tcg/helper-sve.h b/target/arm/tcg/helper-sve.h index 906da384dc4..733828a8806 100644 --- a/target/arm/tcg/helper-sve.h +++ b/target/arm/tcg/helper-sve.h @@ -937,6 +937,7 @@ DEF_HELPER_FLAGS_4(sve_brkn, TCG_CALL_NO_RWG, void, ptr= , ptr, ptr, i32) DEF_HELPER_FLAGS_4(sve_brkns, TCG_CALL_NO_RWG, i32, ptr, ptr, ptr, i32) =20 DEF_HELPER_FLAGS_3(sve_cntp, TCG_CALL_NO_RWG, i64, ptr, ptr, i32) +DEF_HELPER_FLAGS_2(sve2p1_cntp_c, TCG_CALL_NO_RWG_SE, i64, i32, i32) =20 DEF_HELPER_FLAGS_3(sve_whilel, TCG_CALL_NO_RWG, i32, ptr, i32, i32) DEF_HELPER_FLAGS_3(sve_whileg, TCG_CALL_NO_RWG, i32, ptr, i32, i32) diff --git a/target/arm/tcg/sve.decode b/target/arm/tcg/sve.decode index 0df33127395..db16849731d 100644 --- a/target/arm/tcg/sve.decode +++ b/target/arm/tcg/sve.decode @@ -784,7 +784,8 @@ BRKN 00100101 0. 01100001 .... 0 .... 0 ....= @pd_pg_pn_s ### SVE Predicate Count Group =20 # SVE predicate count -CNTP 00100101 .. 100 000 10 .... 0 .... ..... @rd_pg4_pn +CNTP 00100101 .. 100 000 10 .... 0 .... ..... @rd_pg4_pn +CNTP_c 00100101 esz:2 100 000 10 000 vl:1 1 rn:4 rd:5 =20 # SVE inc/dec register by predicate count INCDECP_r 00100101 .. 10110 d:1 10001 00 .... ..... @incdec_pred= u=3D1 diff --git a/target/arm/tcg/sve_helper.c b/target/arm/tcg/sve_helper.c index 6512df54e60..def841fd52f 100644 --- a/target/arm/tcg/sve_helper.c +++ b/target/arm/tcg/sve_helper.c @@ -4178,6 +4178,27 @@ uint64_t HELPER(sve_cntp)(void *vn, void *vg, uint32= _t pred_desc) return sum; } =20 +uint64_t HELPER(sve2p1_cntp_c)(uint32_t png, uint32_t desc) +{ + int pl =3D FIELD_EX32(desc, PREDDESC, OPRSZ); + int vl =3D pl * 8; + unsigned v_esz =3D FIELD_EX32(desc, PREDDESC, ESZ); + int lg2_width =3D FIELD_EX32(desc, PREDDESC, DATA) + 1; + DecodeCounter p =3D decode_counter(png, vl, v_esz); + unsigned maxelem =3D (vl << lg2_width) >> v_esz; + unsigned count =3D p.count; + + if (p.invert) { + if (count >=3D maxelem) { + return 0; + } + count =3D maxelem - count; + } else { + count =3D MIN(count, maxelem); + } + return count >> p.lg2_stride; +} + /* C.f. Arm pseudocode EncodePredCount */ static uint64_t encode_pred_count(uint32_t elements, uint32_t count, uint32_t esz, bool invert) diff --git a/target/arm/tcg/translate-sve.c b/target/arm/tcg/translate-sve.c index 079d3109607..53db8851bf4 100644 --- a/target/arm/tcg/translate-sve.c +++ b/target/arm/tcg/translate-sve.c @@ -3052,6 +3052,36 @@ static bool trans_CNTP(DisasContext *s, arg_CNTP *a) return true; } =20 +static bool trans_CNTP_c(DisasContext *s, arg_CNTP_c *a) +{ + TCGv_i32 t_png; + uint32_t desc =3D 0; + + if (dc_isar_feature(aa64_sve2p1, s)) { + if (!sve_access_check(s)) { + return true; + } + } else if (dc_isar_feature(aa64_sme2, s)) { + if (!sme_sm_enabled_check(s)) { + return true; + } + } else { + return false; + } + + t_png =3D tcg_temp_new_i32(); + tcg_gen_ld16u_i32(t_png, tcg_env, + pred_full_reg_offset(s, a->rn) ^ + (HOST_BIG_ENDIAN ? 6 : 0)); + + desc =3D FIELD_DP32(desc, PREDDESC, OPRSZ, pred_full_reg_size(s)); + desc =3D FIELD_DP32(desc, PREDDESC, ESZ, a->esz); + desc =3D FIELD_DP32(desc, PREDDESC, DATA, a->vl); + + gen_helper_sve2p1_cntp_c(cpu_reg(s, a->rd), t_png, tcg_constant_i32(de= sc)); + return true; +} + static bool trans_INCDECP_r(DisasContext *s, arg_incdec_pred *a) { if (!dc_isar_feature(aa64_sve, s)) { --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647256; cv=none; d=zohomail.com; s=zohoarc; b=fPdCgLOs7zszsJwsuFoFVHZyJ+XP8tT5DPFiw4TEoTtNbUxuq0A0DAEQ3yMWJ7QSywFYilkPGhP9RUzRqxnpkxiwGxGiB2smXe9Hu3LpLrbVHpXwndNT1ONTLVKBn5Ko4NuZNdtYRv+EDrp860pb3NRrjq4pSvs7DXtDeJrbq7E= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647256; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=6H0lIgV2KwWQMWWf3+9rnQQcGz27daHOjXwoYkMAXzM=; b=J9S1KyBQFksmGXlpRSvd1pZQ4J7kaYU671tvqCb51JU3nI2uyKW99jiJOjQ3nOcpgBJ/VItoMVZABaFb279x2VeOkwCq6SxywLxM9pRKxlSAOYVGku/Y1FQtOIf9GGvCjSCY5xO9KDf2JRZmxgK+rZ1qPghgsVROXKXYPGhlmXc= 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 17516472561091015.0703467730015; Fri, 4 Jul 2025 09:40:56 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjH1-0001dC-9g; Fri, 04 Jul 2025 12:28:27 -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 1uXjFJ-0003ex-5f for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:41 -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 1uXjFH-0006tt-Ba for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:40 -0400 Received: by mail-wm1-x336.google.com with SMTP id 5b1f17b1804b1-451d7b50815so8650645e9.2 for ; Fri, 04 Jul 2025 09:26:38 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.26.37 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:26:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646398; x=1752251198; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=6H0lIgV2KwWQMWWf3+9rnQQcGz27daHOjXwoYkMAXzM=; b=SwhpW686YAQji4EhBQZ9t7JS0/oqs1S0kCp664IEQTm4DDK39U9C2FuUy2+6CwJTfh F1fBC4S7dAuKfWABj70cl8+aAkrif1crtKxDBxQDlmwvCo+JyQhHrkYNFtayNX88dlQ/ o2ka+CdY6NKcu4yfpGIclSsMnoy5/K1jEF60f3zSN5GElVOi2s/auLEROP8ppg5FN+an co7PsVXGGu9FiTYfc2g4pnheAt65tm3zX12Rn0yEfVtH9fbnFekV/H6CGK7WY8lwt+WA M1MpO2GJKeyiGphxkeqm4iar9E59AZy/ehKUFBXVxLpPQSo3tEh8Unni3PzfpMCTMyME PSXQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646398; x=1752251198; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=6H0lIgV2KwWQMWWf3+9rnQQcGz27daHOjXwoYkMAXzM=; b=YoWvpEprYEEAQta7/1nAvLZcu1kGAgk5LV4b/6bHpsZt5rFxVWQ3qgTnnwc/Z9Ydpk cTP/7Y6pApiPgBxxcFN0EGZ99mOYvAEcbAkVeqPcuS+N1JFPadVCipDwu948sR9yL5MQ bTV6qEEB0AB6cs//Yb1ro73jy+inqo+aHuIujolHWwWG2I4Zr3uq6JknJPPCuA/UhPj0 XtQW8K+Tqf8ULcRMEDa7rIJ9EYoD2Lf8eXqoJaTMW4tNUyVbxjp34XtV+b6U+vmsT490 nfYiuXd+RpqaG6F1L0akqHThI6+NZhGXZAAxMmveahWX30aSpqMIRzdBGcZMNw1GjFYA HPIw== X-Gm-Message-State: AOJu0YzhYUcIqlJSEISQ9WwwiGPfr7u1Ftjgp1cS7MigalRP/P8MKfr2 JRLTj2nx34apefNEpE0K35lSL/ApUaNEtEZQbRlZEEaEMr3m2vTRtT11hRTOQT4lWS4FQiB2T9Y D7BrR X-Gm-Gg: ASbGncvNGDrAiY6vRuNc/bK+ku3eQn9yJqnFu5hGr+2S+9ubaouneTgK12ykQiiBf2E 2K68HRUtMHY770vemba2cStPvNGFNDzpJB4ci25JEKjQ3FjGDoZKE/625DG0VIgMD0vAV+C5qKB ifBFYKZnksr4qO5iDENKbnami1hfRpvNzWry9UXLnp+AQeuGvx0iOp0T3wguSP/Hm2RfSvfBXTr LT9oEjH1U1if0WTu8JCdyXfqjzsuiDE1GUHmn3xTnJa1w67/5eKuLAObioPExCD2VBH6GsSMmDm xHgre8NUI8Azn8+g1cseXzb+c2HCEAwKLpYwFSQ975S2Z9S0/H9RjwRgPHm2WrEqTeE8 X-Google-Smtp-Source: AGHT+IHMZ8c6uxHrrO16eSv0vkUf1qbBkMDyMS/HGg9/ash2rnEmaVFPO/4qaz2dwAVxm5KTt2y+sA== X-Received: by 2002:a05:600c:3e09:b0:442:f482:c42d with SMTP id 5b1f17b1804b1-454b311617amr35810985e9.9.1751646397762; Fri, 04 Jul 2025 09:26:37 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 100/119] target/arm: Implement DUPQ for SME2p1/SVE2p1 Date: Fri, 4 Jul 2025 17:24:40 +0100 Message-ID: <20250704162501.249138-101-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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=peter.maydell@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 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: 1751647256932116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-89-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/sve.decode | 6 ++++++ target/arm/tcg/translate-sve.c | 21 +++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/target/arm/tcg/sve.decode b/target/arm/tcg/sve.decode index db16849731d..2650e00f80b 100644 --- a/target/arm/tcg/sve.decode +++ b/target/arm/tcg/sve.decode @@ -577,6 +577,12 @@ DUP_s 00000101 .. 1 00000 001110 ..... .....= @rd_rn DUP_x 00000101 .. 1 ..... 001000 rn:5 rd:5 \ &rri imm=3D%imm7_22_16 =20 +# SVE Permute Vector - one source quadwords +DUPQ 00000101 001 imm:4 1 001001 rn:5 rd:5 &rri_esz e= sz=3D0 +DUPQ 00000101 001 imm:3 10 001001 rn:5 rd:5 &rri_esz e= sz=3D1 +DUPQ 00000101 001 imm:2 100 001001 rn:5 rd:5 &rri_esz e= sz=3D2 +DUPQ 00000101 001 imm:1 1000 001001 rn:5 rd:5 &rri_esz e= sz=3D3 + # SVE insert SIMD&FP scalar register INSR_f 00000101 .. 1 10100 001110 ..... ..... @rdn_rm =20 diff --git a/target/arm/tcg/translate-sve.c b/target/arm/tcg/translate-sve.c index 53db8851bf4..e33b2eb2a4e 100644 --- a/target/arm/tcg/translate-sve.c +++ b/target/arm/tcg/translate-sve.c @@ -2249,6 +2249,27 @@ static bool trans_DUP_x(DisasContext *s, arg_DUP_x *= a) return true; } =20 +static bool trans_DUPQ(DisasContext *s, arg_DUPQ *a) +{ + unsigned vl, dofs, nofs; + + if (!dc_isar_feature(aa64_sme2p1_or_sve2p1, s)) { + return false; + } + if (!sve_access_check(s)) { + return true; + } + + vl =3D vec_full_reg_size(s); + dofs =3D vec_full_reg_offset(s, a->rd); + nofs =3D vec_reg_offset(s, a->rn, a->imm, a->esz); + + for (unsigned i =3D 0; i < vl; i +=3D 16) { + tcg_gen_gvec_dup_mem(a->esz, dofs + i, nofs + i, 16, 16); + } + return true; +} + static void do_insr_i64(DisasContext *s, arg_rrr_esz *a, TCGv_i64 val) { typedef void gen_insr(TCGv_ptr, TCGv_ptr, TCGv_i64, TCGv_i32); --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647181; cv=none; d=zohomail.com; s=zohoarc; b=HDJGhBi+ZeB7w9iBy8LzP1ZfuXyoIYM3hbFHiOllgHHzUKSL9JCv8cN2Kbn/Yj/hQ/f+tiU8m6tDVFgHsjwWxjidMbGeTNXxKJvNJxEZwGy6cfpdyHl+WnKrrnufFelm2R8tG2pvDntGE8z1BL9e93lhkrcLvjpR6tJysjZ4Y0E= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647181; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=xQENxFGRfD482l6+gWAdAgnQVEFdxssNteaf2y0Yxps=; b=BN/2xSgWIZdjDhOnaGzqNzmSQtJZEJAPTf2D3IqYTZxI/kIPzFVfACQ1xBBBR+8VAB2fhLnel0q+4/Nvz1OXBwGG0TeGJmG7om6YHB3tw1b78clV4tGQED5W2djEn0UrrfwNNDQevVq/k174ha/1qKXDs0a3I4yB8alsm90RqdY= 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 175164718102538.11443319531247; Fri, 4 Jul 2025 09:39:41 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjFu-0006Sx-9t; Fri, 04 Jul 2025 12:27:20 -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 1uXjFK-0003lk-5n for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:42 -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 1uXjFI-0006u3-7n for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:41 -0400 Received: by mail-wm1-x336.google.com with SMTP id 5b1f17b1804b1-453749af004so5394595e9.1 for ; Fri, 04 Jul 2025 09:26:39 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.26.37 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:26:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646399; x=1752251199; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=xQENxFGRfD482l6+gWAdAgnQVEFdxssNteaf2y0Yxps=; b=WPMVpgBPtx/1eCBNgXslmfOQX6qFdEqQ/kOR5fL/pKUnStW+E83wpsoOLQAXnpBWsT JO8MFRWNHjA3k3uUthHjU4qX5kfYJwOcZT91D31jjU39hGCXZjZc7QdZqRH2JfmXvR/m R1g7HPgl71T5RMF4nByuUrSWhuDxHTkX2I9PDM/PcqWO1MRHeXR6Wu1E0tPZ54girWtL bTOdi5O3fAQMhN0zUOYZEi1idbQpE4HMgT3h2AkK5lEMRyFoq4EN+8/AU2YHvRGcPcoq +S6ddE9xIbvuDuqTMIvZMgFaH7uTdqsE+zp/MPFwIPiYltWNeruZhekyB+zsfmF35tpR tFyg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646399; x=1752251199; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=xQENxFGRfD482l6+gWAdAgnQVEFdxssNteaf2y0Yxps=; b=RUvEUlwRSSnR1LCDfPUaoPUTVvPtN9+qF1EQCL/rusWoSaYzXaJo9UxCjN2SIV+Nlm usGSfj8yCqMGJslsiLZFaOwVrJ+jaD0iQqN7PpEbv2VNr2vH3Rwroidr/j+ptDy5s6BA JslPyppn1lvcMMqHQYml90thZ3vlkNKACHZlVcQmjBInA56ntRfltBSlncx2FcXxz6rs NtraBzk2ErG2pM+m5715zRxOiVeakd9AibS1gSfNNxLF7qqTnzSukD9nt4f0PQU2avvS xP2M+FdoJJH3xs9lHUKOKzHKwOHiZAgNqwrA1jC/kiNWyzTvCg47LBFEpv90c8tUCB3Z ckmw== X-Gm-Message-State: AOJu0YzhKI89TGnWDZOCVGurUs3hxx3zNUCssD4P3kaGai6ptIcsokL6 GgcpXxq0LYhyZw0lFfwoFNOlhUdky/16HdIRErUhu1UDOfCb7DIIIibQZZlk6PwkQ+thKzfXwBJ iROkf X-Gm-Gg: ASbGncuX89YjB09EEOqgrv5a8jWKmAPz2xGF+eDdffW2xnK4dxJ+lhgkJahW+vrdpnI czV50o4OL3VLO3NmxmxjoaGYiRY+fuQbkqJelFyDh5gTBnxaYabjIlyZg6nk4x8PVEDwmONDx6E wE6D2eq07glGeK9h9xOLrV2eYZHaYo+mZQ+rlOAd5bTXqLeEnsiKIG8+NqhQCmMxqjQuDsiA/Ko +Sron13NGh6StiMyG1WjtKlPgPDgBlDxkP49tVLpyocWUHC/1r2J83lE9i9DckYkeuwStpoldXh ebooBPqHNToVUiMlYf6PLDE4Vzbx19f/U4MxdxPVrHpizx0vzjUFD2g3V2NJK/ix9XbA X-Google-Smtp-Source: AGHT+IGcq6KVk+DzVjXPOQsRA+qOloFBE4QH8Cm4FT+HIcdyiB7bh66UUTs2AJCijyXsrs0qs08lyA== X-Received: by 2002:a05:600c:8b52:b0:442:f98e:f37 with SMTP id 5b1f17b1804b1-454b30df071mr30341685e9.21.1751646398583; Fri, 04 Jul 2025 09:26:38 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 101/119] target/arm: Implement EXTQ for SME2p1/SVE2p1 Date: Fri, 4 Jul 2025 17:24:41 +0100 Message-ID: <20250704162501.249138-102-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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=peter.maydell@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 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: 1751647182146116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-90-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/sve.decode | 2 ++ target/arm/tcg/translate-sve.c | 49 ++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) diff --git a/target/arm/tcg/sve.decode b/target/arm/tcg/sve.decode index 2650e00f80b..af4fb966bf9 100644 --- a/target/arm/tcg/sve.decode +++ b/target/arm/tcg/sve.decode @@ -583,6 +583,8 @@ DUPQ 00000101 001 imm:3 10 001001 rn:5 rd:= 5 &rri_esz esz=3D1 DUPQ 00000101 001 imm:2 100 001001 rn:5 rd:5 &rri_esz e= sz=3D2 DUPQ 00000101 001 imm:1 1000 001001 rn:5 rd:5 &rri_esz e= sz=3D3 =20 +EXTQ 00000101 0110 imm:4 001001 rn:5 rd:5 &rri + # SVE insert SIMD&FP scalar register INSR_f 00000101 .. 1 10100 001110 ..... ..... @rdn_rm =20 diff --git a/target/arm/tcg/translate-sve.c b/target/arm/tcg/translate-sve.c index e33b2eb2a4e..a918da31fe1 100644 --- a/target/arm/tcg/translate-sve.c +++ b/target/arm/tcg/translate-sve.c @@ -2202,6 +2202,55 @@ static bool do_EXT(DisasContext *s, int rd, int rn, = int rm, int imm) TRANS_FEAT(EXT, aa64_sve, do_EXT, a->rd, a->rn, a->rm, a->imm) TRANS_FEAT(EXT_sve2, aa64_sve2, do_EXT, a->rd, a->rn, (a->rn + 1) % 32, a-= >imm) =20 +static bool trans_EXTQ(DisasContext *s, arg_EXTQ *a) +{ + unsigned vl, dofs, sofs0, sofs1, sofs2, imm; + + if (!dc_isar_feature(aa64_sme2p1_or_sve2p1, s)) { + return false; + } + if (!sve_access_check(s)) { + return true; + } + + imm =3D a->imm; + if (imm =3D=3D 0) { + /* So far we never optimize Zdn with MOVPRFX, so zd =3D zn is a no= p. */ + return true; + } + + vl =3D vec_full_reg_size(s); + dofs =3D vec_full_reg_offset(s, a->rd); + sofs2 =3D vec_full_reg_offset(s, a->rn); + + if (imm & 8) { + sofs0 =3D dofs + 8; + sofs1 =3D sofs2; + sofs2 +=3D 8; + } else { + sofs0 =3D dofs; + sofs1 =3D dofs + 8; + } + imm =3D (imm & 7) << 3; + + for (unsigned i =3D 0; i < vl; i +=3D 16) { + TCGv_i64 s0 =3D tcg_temp_new_i64(); + TCGv_i64 s1 =3D tcg_temp_new_i64(); + TCGv_i64 s2 =3D tcg_temp_new_i64(); + + tcg_gen_ld_i64(s0, tcg_env, sofs0 + i); + tcg_gen_ld_i64(s1, tcg_env, sofs1 + i); + tcg_gen_ld_i64(s2, tcg_env, sofs2 + i); + + tcg_gen_extract2_i64(s0, s0, s1, imm); + tcg_gen_extract2_i64(s1, s1, s2, imm); + + tcg_gen_st_i64(s0, tcg_env, dofs + i); + tcg_gen_st_i64(s1, tcg_env, dofs + i + 8); + } + return true; +} + /* *** SVE Permute - Unpredicated Group */ --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647255; cv=none; d=zohomail.com; s=zohoarc; b=VHTckobJYyJ8HIZdyVa4xOQHj0OHatwu4RtYRZzovWAl5EexxI536elLBErFKN0W/tgFIhbvNrBi8KGrtKn/2BjUyvpj4wFiJx5UR4kEZtA7GxjKKV92NSm3uuwt/bq7hBoWXacWAga0m6GFKE0rNr/DsifDvJS8iEYRInMIJXw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647255; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=UvKe3+Dw5YGWmoQlTXHshRFBmp9WtV0jlsVuUUDS5kM=; b=dsvN+5sG2Sytcface6GuPcgog4SyLMAhx5ogLNy0sseeyk/eo0MqZk8dXrzy+k/jzwIJicCd+8Z4kDZIw8HhBpdaTVxqCMdNd5d5vA6ECZ5taiaAxvTR4n5lW+n5AMNGi/v90bk59XGWtLFyeDTWnLh+unuu/CR4/pqwat60bm8= 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 1751647255208740.7181432131079; Fri, 4 Jul 2025 09:40:55 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjGx-0000pU-71; Fri, 04 Jul 2025 12:28:23 -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 1uXjFM-00045M-AB for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:44 -0400 Received: from mail-wr1-x431.google.com ([2a00:1450:4864:20::431]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjFJ-0006uM-4O for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:43 -0400 Received: by mail-wr1-x431.google.com with SMTP id ffacd0b85a97d-3a52874d593so927665f8f.0 for ; Fri, 04 Jul 2025 09:26:40 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.26.38 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:26:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646399; x=1752251199; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=UvKe3+Dw5YGWmoQlTXHshRFBmp9WtV0jlsVuUUDS5kM=; b=wOwJ5CdPdBIoijYZBXnKybQR4ERIUbYaPGDl+2OgSI+yyCuLLgo/3FuKDYX7pprKQj TnaypmgL0SWj9Cdk4J5A1UkiBEUR3/r3dNV0HrVscRB0Sm8TeQKaG4lVrKl1rUSY6eqX QAEmtW/sqBs0qLyZIkIxR64JlgL96Hq+m5UFaAsASNRlkkQHb9Cac/LpkSSeGV4Ejv9L uULD05wnu0JtUMME7ga7Y7G1KpwvmpMFFDmF2aKzp/qprMa0cUEJZajx5o9eXrJFl9g8 zf4AZTbXNM3/l04n3mAGFC2vFSV65d9WSFMjAYrAHUNiN4n9xsGNQNDpQrJEjB0Dnu69 p4hQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646399; x=1752251199; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=UvKe3+Dw5YGWmoQlTXHshRFBmp9WtV0jlsVuUUDS5kM=; b=EE3E3Z9h8fry3MMYAkgFyHPkxOVdbeLRW07H4BklpahTrwUIJuVW2YaeJO8/GOyXFB cl98Su6OcpdUw3/BKZ4CP1oAkM9qnIkkjcvs86Os9ZJBFThV6Pf51BZGRpOdpu2G4dW8 /h2WRPN88g4G4dePNw/RPIx54E58yGkZIGhzFBDXg80HijeyxEkbwH7JoDGMMLD1UyCD HE0mi4b7cUuVfARSVft/KKvKYzWflRAa0I5DM1G/YZmkC77cOLP2chExBlGowDN8LRdk wH3RCXo2i8V8tBlchvOg5GLghA4X5yM1Ki2amPT1AHG9a3OR1Inh4EdjacoxPKMpO/sm XI+A== X-Gm-Message-State: AOJu0Yw2puRf3S3EaF/K24J6uVgRKDC5Iq3ZIxKBz86dPMsC8Oo3JsqP HBka4bknIIH0SbzhqQKybYdK/fDnjgJ9er4Cbx7DLqNdS2o30xLOQTnk8yH10//gVQNTf0RighF TClrG X-Gm-Gg: ASbGncvXy0Ld4zxSXu0ltr3N40hsva81pJV7N2AzJlZSlFk48FLAyfsTqGjWue1b5Xh nFnqkahD+Z8eRW7W57z7WoyUVA+/2dRbsFJ9spRbW1natZtlB3MmJiw5I3OlSK3+elqB4xwS6bh FC2bkl3Gq6FrxSk69xihh2k7DO1jpaSd0BpvWRnyj6jKgaj+WqMWfvxDG/7mrBkuMCcdl0SulSk Ifn8qs7SzMDYCSS8HwRw4a2snu6UavcHBKmwUG0aBQLE4fKsLhw40AUnBK+B9Qju3iChHEmCDkH Ukhs3YC/z9CeMEFIyesRMcEvOBt5JD5aVvPpBhuH2p5EfMAs4RSeE5H8DqqOnIetsEHiqPlXh7h f+gU= X-Google-Smtp-Source: AGHT+IE7YezRxTwqjArzNKUZElxZdSEhMLOCBS/gFiQZf96KZLDSJgaknHavOrAcCIHJ10NUgT4tnQ== X-Received: by 2002:adf:9d8c:0:b0:3b3:1e2e:ee07 with SMTP id ffacd0b85a97d-3b496626856mr2381255f8f.56.1751646399443; Fri, 04 Jul 2025 09:26:39 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 102/119] target/arm: Implement PMOV for SME2p1/SVE2p1 Date: Fri, 4 Jul 2025 17:24:42 +0100 Message-ID: <20250704162501.249138-103-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::431; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x431.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751647257265116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-91-richard.henderson@linaro.org Reviewed-by: Peter Maydell Signed-off-by: Peter Maydell --- target/arm/tcg/helper-sve.h | 8 +++ target/arm/tcg/vec_internal.h | 34 ++++++++++++ target/arm/tcg/sve.decode | 17 ++++++ target/arm/tcg/sve_helper.c | 50 +++++++++++++++++ target/arm/tcg/translate-sve.c | 98 ++++++++++++++++++++++++++++++++++ 5 files changed, 207 insertions(+) diff --git a/target/arm/tcg/helper-sve.h b/target/arm/tcg/helper-sve.h index 733828a8806..04b9545c11e 100644 --- a/target/arm/tcg/helper-sve.h +++ b/target/arm/tcg/helper-sve.h @@ -3020,3 +3020,11 @@ DEF_HELPER_FLAGS_4(sve2p1_andqv_b, TCG_CALL_NO_RWG, = void, ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_4(sve2p1_andqv_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i= 32) DEF_HELPER_FLAGS_4(sve2p1_andqv_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i= 32) DEF_HELPER_FLAGS_4(sve2p1_andqv_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i= 32) + +DEF_HELPER_FLAGS_3(pmov_pv_h, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(pmov_pv_s, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(pmov_pv_d, TCG_CALL_NO_RWG, void, ptr, ptr, i32) + +DEF_HELPER_FLAGS_3(pmov_vp_h, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(pmov_vp_s, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(pmov_vp_d, TCG_CALL_NO_RWG, void, ptr, ptr, i32) diff --git a/target/arm/tcg/vec_internal.h b/target/arm/tcg/vec_internal.h index 61c67bb35e7..957bf6d9fca 100644 --- a/target/arm/tcg/vec_internal.h +++ b/target/arm/tcg/vec_internal.h @@ -411,4 +411,38 @@ decode_counter(unsigned png, unsigned vl, unsigned v_e= sz) return ret; } =20 +/* Extract @len bits from an array of uint64_t at offset @pos bits. */ +static inline uint64_t extractn(uint64_t *p, unsigned pos, unsigned len) +{ + uint64_t x; + + p +=3D pos / 64; + pos =3D pos % 64; + + x =3D p[0]; + if (pos + len > 64) { + x =3D (x >> pos) | (p[1] << (-pos & 63)); + pos =3D 0; + } + return extract64(x, pos, len); +} + +/* Deposit @len bits into an array of uint64_t at offset @pos bits. */ +static inline void depositn(uint64_t *p, unsigned pos, + unsigned len, uint64_t val) +{ + p +=3D pos / 64; + pos =3D pos % 64; + + if (pos + len <=3D 64) { + p[0] =3D deposit64(p[0], pos, len, val); + } else { + unsigned len0 =3D 64 - pos; + unsigned len1 =3D len - len0; + + p[0] =3D deposit64(p[0], pos, len0, val); + p[1] =3D deposit64(p[1], 0, len1, val >> len0); + } +} + #endif /* TARGET_ARM_VEC_INTERNAL_H */ diff --git a/target/arm/tcg/sve.decode b/target/arm/tcg/sve.decode index af4fb966bf9..3271c9cf78c 100644 --- a/target/arm/tcg/sve.decode +++ b/target/arm/tcg/sve.decode @@ -30,6 +30,7 @@ %size_23 23:2 %dtype_23_13 23:2 13:2 %index3_22_19 22:1 19:2 +%index3_22_17 22:1 17:2 %index3_19_11 19:2 11:1 %index2_20_11 20:1 11:1 =20 @@ -594,6 +595,22 @@ INSR_r 00000101 .. 1 00100 001110 ..... .....= @rdn_rm # SVE reverse vector elements REV_v 00000101 .. 1 11000 001110 ..... ..... @rd_rn =20 +# SVE move predicate to/from vector + +PMOV_pv 00000101 00 101 01 0001110 rn:5 0 rd:4 \ + &rri_esz esz=3D0 imm=3D0 +PMOV_pv 00000101 00 101 1 imm:1 0001110 rn:5 0 rd:4 &rri_esz e= sz=3D1 +PMOV_pv 00000101 01 101 imm:2 0001110 rn:5 0 rd:4 &rri_esz e= sz=3D2 +PMOV_pv 00000101 1. 101 .. 0001110 rn:5 0 rd:4 \ + &rri_esz esz=3D3 imm=3D%index3_22_17 + +PMOV_vp 00000101 00 101 01 1001110 0 rn:4 rd:5 \ + &rri_esz esz=3D0 imm=3D0 +PMOV_vp 00000101 00 101 1 imm:1 1001110 0 rn:4 rd:5 &rri_esz e= sz=3D1 +PMOV_vp 00000101 01 101 imm:2 1001110 0 rn:4 rd:5 &rri_esz e= sz=3D2 +PMOV_vp 00000101 1. 101 .. 1001110 0 rn:4 rd:5 \ + &rri_esz esz=3D3 imm=3D%index3_22_17 + # SVE vector table lookup TBL 00000101 .. 1 ..... 001100 ..... ..... @rd_rn_rm =20 diff --git a/target/arm/tcg/sve_helper.c b/target/arm/tcg/sve_helper.c index def841fd52f..a9dc3c44b22 100644 --- a/target/arm/tcg/sve_helper.c +++ b/target/arm/tcg/sve_helper.c @@ -3035,6 +3035,56 @@ void HELPER(sve_rev_d)(void *vd, void *vn, uint32_t = desc) } } =20 +/* + * TODO: This could use half_shuffle64 and similar bit tricks to + * expand blocks of bits at once. + */ +#define DO_PMOV_PV(NAME, ESIZE) \ +void HELPER(NAME)(void *vd, void *vs, uint32_t desc) \ +{ \ + unsigned vl =3D simd_oprsz(desc); \ + unsigned idx =3D simd_data(desc); \ + unsigned elements =3D vl / ESIZE; \ + ARMPredicateReg *d =3D vd; \ + ARMVectorReg *s =3D vs; \ + memset(d, 0, sizeof(*d)); \ + for (unsigned e =3D 0; e < elements; ++e) { \ + depositn(d->p, e * ESIZE, 1, extractn(s->d, elements * idx + e, 1)= ); \ + } \ +} + +DO_PMOV_PV(pmov_pv_h, 2) +DO_PMOV_PV(pmov_pv_s, 4) +DO_PMOV_PV(pmov_pv_d, 8) + +#undef DO_PMOV_PV + +/* + * TODO: This could use half_unshuffle64 and similar bit tricks to + * compress blocks of bits at once. + */ +#define DO_PMOV_VP(NAME, ESIZE) \ +void HELPER(NAME)(void *vd, void *vs, uint32_t desc) \ +{ \ + unsigned vl =3D simd_oprsz(desc); \ + unsigned idx =3D simd_data(desc); \ + unsigned elements =3D vl / ESIZE; \ + ARMVectorReg *d =3D vd; \ + ARMPredicateReg *s =3D vs; \ + if (idx =3D=3D 0) { \ + memset(d, 0, vl); \ + } \ + for (unsigned e =3D 0; e < elements; ++e) { \ + depositn(d->d, elements * idx + e, 1, extractn(s->p, e * ESIZE, 1)= ); \ + } \ +} + +DO_PMOV_VP(pmov_vp_h, 2) +DO_PMOV_VP(pmov_vp_s, 4) +DO_PMOV_VP(pmov_vp_d, 8) + +#undef DO_PMOV_VP + typedef void tb_impl_fn(void *, void *, void *, void *, uintptr_t, bool); =20 static inline void do_tbl1(void *vd, void *vn, void *vm, uint32_t desc, diff --git a/target/arm/tcg/translate-sve.c b/target/arm/tcg/translate-sve.c index a918da31fe1..01c4eaa5856 100644 --- a/target/arm/tcg/translate-sve.c +++ b/target/arm/tcg/translate-sve.c @@ -2386,6 +2386,104 @@ static gen_helper_gvec_3 * const tbx_fns[4] =3D { }; TRANS_FEAT(TBX, aa64_sve2, gen_gvec_ool_arg_zzz, tbx_fns[a->esz], a, 0) =20 +static bool trans_PMOV_pv(DisasContext *s, arg_PMOV_pv *a) +{ + static gen_helper_gvec_2 * const fns[4] =3D { + NULL, gen_helper_pmov_pv_h, + gen_helper_pmov_pv_s, gen_helper_pmov_pv_d + }; + unsigned vl, pl, vofs, pofs; + TCGv_i64 tmp; + + if (!dc_isar_feature(aa64_sme2p1_or_sve2p1, s)) { + return false; + } + if (!sve_access_check(s)) { + return true; + } + + vl =3D vec_full_reg_size(s); + if (a->esz !=3D MO_8) { + tcg_gen_gvec_2_ool(pred_full_reg_offset(s, a->rd), + vec_full_reg_offset(s, a->rn), + vl, vl, a->imm, fns[a->esz]); + return true; + } + + /* + * Copy the low PL bytes from vector Zn, zero-extending to a + * multiple of 8 bytes, so that Pd is properly cleared. + */ + + pl =3D vl / 8; + pofs =3D pred_full_reg_offset(s, a->rd); + vofs =3D vec_full_reg_offset(s, a->rn); + + QEMU_BUILD_BUG_ON(sizeof(ARMPredicateReg) !=3D 32); + for (unsigned i =3D 32; i >=3D 8; i >>=3D 1) { + if (pl & i) { + tcg_gen_gvec_mov(MO_64, pofs, vofs, i, i); + pofs +=3D i; + vofs +=3D i; + } + } + switch (pl & 7) { + case 0: + return true; + case 2: + tmp =3D tcg_temp_new_i64(); + tcg_gen_ld16u_i64(tmp, tcg_env, vofs + (HOST_BIG_ENDIAN ? 6 : 0)); + break; + case 4: + tmp =3D tcg_temp_new_i64(); + tcg_gen_ld32u_i64(tmp, tcg_env, vofs + (HOST_BIG_ENDIAN ? 4 : 0)); + break; + case 6: + tmp =3D tcg_temp_new_i64(); + tcg_gen_ld_i64(tmp, tcg_env, vofs); + tcg_gen_extract_i64(tmp, tmp, 0, 48); + break; + default: + g_assert_not_reached(); + } + tcg_gen_st_i64(tmp, tcg_env, pofs); + return true; +} + +static bool trans_PMOV_vp(DisasContext *s, arg_PMOV_pv *a) +{ + static gen_helper_gvec_2 * const fns[4] =3D { + NULL, gen_helper_pmov_vp_h, + gen_helper_pmov_vp_s, gen_helper_pmov_vp_d + }; + unsigned vl; + + if (!dc_isar_feature(aa64_sme2p1_or_sve2p1, s)) { + return false; + } + if (!sve_access_check(s)) { + return true; + } + + vl =3D vec_full_reg_size(s); + + if (a->esz =3D=3D MO_8) { + /* + * The low PL bytes are copied from Pn to Zd unchanged. + * We know that the unused portion of Pn is zero, and + * that imm =3D=3D 0, so the balance of Zd must be zeroed. + */ + tcg_gen_gvec_mov(MO_64, vec_full_reg_offset(s, a->rd), + pred_full_reg_offset(s, a->rn), + size_for_gvec(vl / 8), vl); + } else { + tcg_gen_gvec_2_ool(vec_full_reg_offset(s, a->rd), + pred_full_reg_offset(s, a->rn), + vl, vl, a->imm, fns[a->esz]); + } + return true; +} + static bool trans_UNPK(DisasContext *s, arg_UNPK *a) { static gen_helper_gvec_2 * const fns[4][2] =3D { --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646577; cv=none; d=zohomail.com; s=zohoarc; b=kSkMXU0VsxZ/KdauxHAjQRLz3yd4L2XEbW5uc8WNqpRDaup1V0lR4+tc1nTHT6TSfgK+tyhLBp15sNghlJJzvnlc2nfQDznGzAI1nYgEz6x98q8o28+pQMjyyr62bpFI/27fQwYCjq7W+Ipn+U1z4kSXhMcuHFzyoexToF+jf7I= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646577; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=FA/V/E0/PYzfQXJFZXoR8kL+LV28zQZtl3tMaeHyII8=; b=n/y1BxN2j2WVq3CuXryowiNc6Td2wYm4G4M3gG4Dz1jkuIm4zNp9OyvudnXUEvDi+RkKL3nsm6YfxXeoeZyoa683EDQKA7TOuUQgSeSM5uwxCQ7XbzO7XXt19grL889FLVbLJNru6QnOTZNnCC+vlPBQcbtVB1Nm14i1dynxvfA= 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 1751646577841820.6336737594555; Fri, 4 Jul 2025 09:29:37 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjFY-0005SM-Fk; Fri, 04 Jul 2025 12:26:56 -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 1uXjFM-00045N-BJ for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:44 -0400 Received: from mail-wm1-x329.google.com ([2a00:1450:4864:20::329]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjFJ-0006ur-Rh for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:43 -0400 Received: by mail-wm1-x329.google.com with SMTP id 5b1f17b1804b1-454aaade1fbso11823705e9.3 for ; Fri, 04 Jul 2025 09:26:41 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.26.39 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:26:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646400; x=1752251200; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=FA/V/E0/PYzfQXJFZXoR8kL+LV28zQZtl3tMaeHyII8=; b=cQRLLowP5gn430/DhcN4XqLlrUTYAzfZmaPkNR7WwhepTw1ZhaMn051F1I40ZPPJkj ANb4NKfb4UnMFrtuU0DfDfuvanr7QB9g02sQfq+xVdVKQeDGdwYaNjKqZrCqWYzrxFzc +31XHkOb/nSGJ4+9ThdMoqDePk2LUVIpeUel748lm4Dfz/6hxIew7v10AB+GNqZ46Nhg 201VBDZ1ZATytVV9jA/O0Vm5a0E19dWTmoDqdVtG2ePP95eNWJozHWKb9TPx2m7SuN5J YdELhXPoUV8cA1GJsShWLGjWg9Qh/3dhV8SvpcMCvU00k7bhrZKoS5AACbxOgypl7+0T jJbQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646400; x=1752251200; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=FA/V/E0/PYzfQXJFZXoR8kL+LV28zQZtl3tMaeHyII8=; b=sU5F2SqjfALahe4LUDEYeRaK/sWdy7+jzw2Z9Uso/qTzAH/yqo7THCq3L9gw3Xx+uv S6WBpK0uDBMlQuIaPMrDnwLYWesd5U4GCxO9gzPsKdDLcj4vSx+BuNwMU6RhGejRa6jB AnJU4iLyT2YC/7ufBu2ft5U96lX8mvV9+aml170AJ1JRu9vrgFJyAyEL/1b/dEXvBcuO NMqjVH9wyfUl6qPN6QWmtGxQN2m3WAAc9uGZUoTGYIbocwsNe9u1i8BctOKfNWQ3cJMc xbZ33smeEhqdg0C3LWLFPYLQif4Lsy73+4FADe85q+LDIHca3wW+jXJOG94qY6s2QQD7 kjXw== X-Gm-Message-State: AOJu0YwRpFm0tIGg7kENwHmMZxCEGGx/fLIHQzB6HxLPrtOX4guTv0qJ 9+G0zgq1gjV8TWI2fNvcX46i8SY7+OzKdrNTxJyRlUbEUMYRnL+i64dZXnbVDP+g11IGBVlfz4H dEcVD X-Gm-Gg: ASbGncs/dUO/xLfITRvKwRztZB+OwT8R8Qi7sy5/wIWqP3DlGI2vEEv3m4t07W0v750 80TyBJBYt8lLJ9t9t1pWJai24Thgqy+aZJMMlCwSUKjd10HlRAO0ilX/4wrU+3nf2wv2BlgDi/T GWcWCEEaN9rO/apXZAXcT7jwLeQuLHOoSl3y8PC0QG+aIdNdoUTWHjhIu9sHUE4QWzyhOdWHLTV EzaEyYDLnV7QsK5FULT5u2AgOS2xn1tCXth9hPJMQB01+dcqNRRN7AAUkYRCf+SCEjLunZTAx7S vgM6bVdz05fEDbweFsPWCOeOJnQUl7eeTJ4sEE+YiFTaQ13jY32W4AT3g8IrjkbIUKef X-Google-Smtp-Source: AGHT+IFxUOdufPYzJotn4MYRZ89WfmA7DGWP0BQFdmrqbVcRfHl+zj/I7qqVIfGvAeK4VbSG/tVH8w== X-Received: by 2002:a05:600c:1c21:b0:43c:fcbc:9680 with SMTP id 5b1f17b1804b1-454b4eb8326mr27897785e9.25.1751646400329; Fri, 04 Jul 2025 09:26:40 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 103/119] target/arm: Implement ZIPQ, UZPQ for SME2p1/SVE2p1 Date: Fri, 4 Jul 2025 17:24:43 +0100 Message-ID: <20250704162501.249138-104-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::329; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x329.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751646578792116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-92-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/helper-sve.h | 10 ++++++++++ target/arm/tcg/sve.decode | 6 ++++++ target/arm/tcg/sve_helper.c | 29 +++++++++++++++++++++++++++++ target/arm/tcg/translate-sve.c | 19 ++++++++++++++++++- 4 files changed, 63 insertions(+), 1 deletion(-) diff --git a/target/arm/tcg/helper-sve.h b/target/arm/tcg/helper-sve.h index 04b9545c11e..0f510ea6103 100644 --- a/target/arm/tcg/helper-sve.h +++ b/target/arm/tcg/helper-sve.h @@ -701,12 +701,22 @@ DEF_HELPER_FLAGS_4(sve_zip_s, TCG_CALL_NO_RWG, void, = ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_4(sve_zip_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_4(sve2_zip_q, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) =20 +DEF_HELPER_FLAGS_4(sve2p1_zipq_b, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i3= 2) +DEF_HELPER_FLAGS_4(sve2p1_zipq_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i3= 2) +DEF_HELPER_FLAGS_4(sve2p1_zipq_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i3= 2) +DEF_HELPER_FLAGS_4(sve2p1_zipq_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i3= 2) + DEF_HELPER_FLAGS_4(sve_uzp_b, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_4(sve_uzp_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_4(sve_uzp_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_4(sve_uzp_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_4(sve2_uzp_q, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) =20 +DEF_HELPER_FLAGS_4(sve2p1_uzpq_b, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i3= 2) +DEF_HELPER_FLAGS_4(sve2p1_uzpq_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i3= 2) +DEF_HELPER_FLAGS_4(sve2p1_uzpq_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i3= 2) +DEF_HELPER_FLAGS_4(sve2p1_uzpq_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i3= 2) + DEF_HELPER_FLAGS_4(sve_trn_b, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_4(sve_trn_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_4(sve_trn_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) diff --git a/target/arm/tcg/sve.decode b/target/arm/tcg/sve.decode index 3271c9cf78c..e98275eec15 100644 --- a/target/arm/tcg/sve.decode +++ b/target/arm/tcg/sve.decode @@ -657,6 +657,12 @@ UZP2_q 00000101 10 1 ..... 000 011 ..... ....= . @rd_rn_rm_e0 TRN1_q 00000101 10 1 ..... 000 110 ..... ..... @rd_rn_rm_= e0 TRN2_q 00000101 10 1 ..... 000 111 ..... ..... @rd_rn_rm_= e0 =20 +# SVE2.1 permute vector elements (quadwords) +ZIPQ1 01000100 .. 0 ..... 111 000 ..... ..... @rd_rn_rm +ZIPQ2 01000100 .. 0 ..... 111 001 ..... ..... @rd_rn_rm +UZPQ1 01000100 .. 0 ..... 111 010 ..... ..... @rd_rn_rm +UZPQ2 01000100 .. 0 ..... 111 011 ..... ..... @rd_rn_rm + ### SVE Permute - Predicated Group =20 # SVE compress active elements diff --git a/target/arm/tcg/sve_helper.c b/target/arm/tcg/sve_helper.c index a9dc3c44b22..dbbfbc12b97 100644 --- a/target/arm/tcg/sve_helper.c +++ b/target/arm/tcg/sve_helper.c @@ -3550,6 +3550,35 @@ DO_UZP(sve_uzp_s, uint32_t, H1_4) DO_UZP(sve_uzp_d, uint64_t, H1_8) DO_UZP(sve2_uzp_q, Int128, ) =20 +typedef void perseg_zzz_fn(void *vd, void *vn, void *vm, uint32_t desc); + +static void do_perseg_zzz(void *vd, void *vn, void *vm, + uint32_t desc, perseg_zzz_fn *fn) +{ + intptr_t oprsz =3D simd_oprsz(desc); + + desc =3D simd_desc(16, 16, simd_data(desc)); + for (intptr_t i =3D 0; i < oprsz; i +=3D 16) { + fn(vd + i, vn + i, vm + i, desc); + } +} + +#define DO_PERSEG_ZZZ(NAME, FUNC) \ + void HELPER(NAME)(void *vd, void *vn, void *vm, uint32_t desc) \ + { do_perseg_zzz(vd, vn, vm, desc, FUNC); } + +DO_PERSEG_ZZZ(sve2p1_uzpq_b, helper_sve_uzp_b) +DO_PERSEG_ZZZ(sve2p1_uzpq_h, helper_sve_uzp_h) +DO_PERSEG_ZZZ(sve2p1_uzpq_s, helper_sve_uzp_s) +DO_PERSEG_ZZZ(sve2p1_uzpq_d, helper_sve_uzp_d) + +DO_PERSEG_ZZZ(sve2p1_zipq_b, helper_sve_zip_b) +DO_PERSEG_ZZZ(sve2p1_zipq_h, helper_sve_zip_h) +DO_PERSEG_ZZZ(sve2p1_zipq_s, helper_sve_zip_s) +DO_PERSEG_ZZZ(sve2p1_zipq_d, helper_sve_zip_d) + +#undef DO_PERSEG_ZZZ + #define DO_TRN(NAME, TYPE, H) \ void HELPER(NAME)(void *vd, void *vn, void *vm, uint32_t desc) \ { \ diff --git a/target/arm/tcg/translate-sve.c b/target/arm/tcg/translate-sve.c index 01c4eaa5856..28cfcb9cb4c 100644 --- a/target/arm/tcg/translate-sve.c +++ b/target/arm/tcg/translate-sve.c @@ -2606,11 +2606,19 @@ TRANS_FEAT_NONSTREAMING(ZIP2_q, aa64_sve_f64mm, do_= interleave_q, gen_helper_sve2_zip_q, a, QEMU_ALIGN_DOWN(vec_full_reg_size(s), 32) / 2) =20 +static gen_helper_gvec_3 * const zipq_fns[4] =3D { + gen_helper_sve2p1_zipq_b, gen_helper_sve2p1_zipq_h, + gen_helper_sve2p1_zipq_s, gen_helper_sve2p1_zipq_d, +}; +TRANS_FEAT(ZIPQ1, aa64_sme2p1_or_sve2p1, gen_gvec_ool_arg_zzz, + zipq_fns[a->esz], a, 0) +TRANS_FEAT(ZIPQ2, aa64_sme2p1_or_sve2p1, gen_gvec_ool_arg_zzz, + zipq_fns[a->esz], a, 16 / 2) + static gen_helper_gvec_3 * const uzp_fns[4] =3D { gen_helper_sve_uzp_b, gen_helper_sve_uzp_h, gen_helper_sve_uzp_s, gen_helper_sve_uzp_d, }; - TRANS_FEAT(UZP1_z, aa64_sve, gen_gvec_ool_arg_zzz, uzp_fns[a->esz], a, 0) TRANS_FEAT(UZP2_z, aa64_sve, gen_gvec_ool_arg_zzz, @@ -2621,6 +2629,15 @@ TRANS_FEAT_NONSTREAMING(UZP1_q, aa64_sve_f64mm, do_i= nterleave_q, TRANS_FEAT_NONSTREAMING(UZP2_q, aa64_sve_f64mm, do_interleave_q, gen_helper_sve2_uzp_q, a, 16) =20 +static gen_helper_gvec_3 * const uzpq_fns[4] =3D { + gen_helper_sve2p1_uzpq_b, gen_helper_sve2p1_uzpq_h, + gen_helper_sve2p1_uzpq_s, gen_helper_sve2p1_uzpq_d, +}; +TRANS_FEAT(UZPQ1, aa64_sme2p1_or_sve2p1, gen_gvec_ool_arg_zzz, + uzpq_fns[a->esz], a, 0) +TRANS_FEAT(UZPQ2, aa64_sme2p1_or_sve2p1, gen_gvec_ool_arg_zzz, + uzpq_fns[a->esz], a, 1 << a->esz) + static gen_helper_gvec_3 * const trn_fns[4] =3D { gen_helper_sve_trn_b, gen_helper_sve_trn_h, gen_helper_sve_trn_s, gen_helper_sve_trn_d, --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647165; cv=none; d=zohomail.com; s=zohoarc; b=bzPID4H3GxFTopnSWX7TvcrS5UXduYKzLBOwfVSUFluj0VvJBueQR+ppyE3bk3VFotRqqYAAkj/albMP9oIDOslAucDobkyLLmDkhWa0caH4Q53DbZ6L3XCQUXxvRY3s+g+L+pQwGFRaun+3DQZJNzfqrP/fPGtKa8t2wi6UrxQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647165; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=QhcbhThxEkhtCB7f3egNLkEqw9xFyXJHz19uqfLo854=; b=LgE+rR83MvhH+0wAOin2zVS4NhHahjBpu5DJdDBmAEKBNdFvMqSBAJzGhsU4uTJR9eolayDQ3Gn92z+D9FnimlUpCsQoYX3XVcwujZ8UlvsXf2sIy0itoVn6Q6Gk+PS8M76u2Bc/RnsgBocIXEJnQXMQBaPFXriHXVy2nGwkm8M= 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 1751647165646984.8305014432437; Fri, 4 Jul 2025 09:39:25 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjG0-0006lO-NJ; Fri, 04 Jul 2025 12:27:24 -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 1uXjFM-00047R-Sg for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:45 -0400 Received: from mail-wr1-x42d.google.com ([2a00:1450:4864:20::42d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjFK-0006v9-Rq for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:44 -0400 Received: by mail-wr1-x42d.google.com with SMTP id ffacd0b85a97d-3a4fd1ba177so793299f8f.0 for ; Fri, 04 Jul 2025 09:26:42 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.26.40 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:26:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646401; x=1752251201; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=QhcbhThxEkhtCB7f3egNLkEqw9xFyXJHz19uqfLo854=; b=EWSjdfTceQdlm8LmFeKsogaJCZxMsKb5ocsE8cWkCZ+OVbwTDQxz8zQdJQVkA6o17B EdCaCUkgY0CTiC0KtO0GDDhKNPlsydv063vCK9BCvQzL88V6Jy3jZTK880BSsqjh1qAF Kf/9AuD0zaXgGUdQ3FYvIWciaaV2k+kvQLIt3/hitXWWq8P/On5ZnRMnQ83wCE/0bbpE ad7veHq5j/gW0A9QM4FRxZGkxdiLfG1kylNizJMLpyBfx4WTbHIBEEX6612LsoZMAkgC LLjSFq6pgpW2uNdTc29dzUTZzsesku6tGZR1OnFHUXvW9MJO4Zj83aPKPy4OS+Zrlml7 GTPg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646401; x=1752251201; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=QhcbhThxEkhtCB7f3egNLkEqw9xFyXJHz19uqfLo854=; b=au7tH1EhQmFCA97LLzzB8DZhYRiQ68ffpDkgYTEnBIdSzPrRI2WkTSoNS/P5Ui1AKz mcxSo0RPRC1qGR4LQUTZ3vosamDe+A8bFZP2abeeiIQYmaBq/4eq6UQ9Ut+Notu2W4tJ Q0l1UZvSPCIoVkXb7erMLM5nrC9aR0ppF9AoFWXsdpcgdSPPoil3QesgIvR/JngpBkkt VBOcsH0U5huZlaYMnRnvdkL0caDu6pYAFD8Bjf1IyxHirpq1Wq3fga9qmaGoZC3etJkK tpz7nI6Eda82B7z63/rZA8v1mzO9H1DEygl1SbuFLrSVzPQgE+K7PTIp+4unqurN1D1g bS+g== X-Gm-Message-State: AOJu0YzRyrgscR4JIDtubWtSaogom4BTcLkrqFjMhs4WCymArlvNeuSZ DxJi0vd4BQ/0K87sS0roN+RxViylr0Grw4RItn4lTVzv56v4C7k00N5s0DGOn8lHygEG+z2gt60 +EdB/ X-Gm-Gg: ASbGncvIlQh5QwuxS2HtVdJ93lBaYgwZ2V6B5lFYdLlQn9d64c6Qq4XTEu5OoXjVIC0 3K2ngDr4Yrz7ZSzD+5DtDsor5WcbkETKhBCDP2aod9aHvjK2LtNK9YlRC0RmdGZZHazkMfXSju0 E2e+lAMCEuVEZX2xobHHA4y4+FL4/zzU3adGHXrqG/GwbP9B/1h8tIZWRgA/r6t038N77hFdITg cnUBeWCy1rfmlJpuDSRtZ3yKh6KTVO8zk54mohBNI+VyA/1NEKSqbmbGU5r1psxgExmyzpvJ6ZO o4WYiVPau9HlSJdXOwk33fKukwKt09XLGruhmfZ436v6GjmZ2oLJ5V0C/wF7uZ1PK8ij X-Google-Smtp-Source: AGHT+IG/PIxAJJrx1H24CYmkRm8UhtyLTxXCqRryiLudcfE/Flx8xkzKowuV7ZKaa0+e3MLhFLqgVw== X-Received: by 2002:a05:6000:200c:b0:3b3:9c56:b825 with SMTP id ffacd0b85a97d-3b4955895fbmr3521586f8f.22.1751646401176; Fri, 04 Jul 2025 09:26:41 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 104/119] target/arm: Implement TBLQ, TBXQ for SME2p1/SVE2p1 Date: Fri, 4 Jul 2025 17:24:44 +0100 Message-ID: <20250704162501.249138-105-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::42d; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x42d.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751647165981116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-93-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/helper-sve.h | 10 ++++++++++ target/arm/tcg/sve.decode | 3 +++ target/arm/tcg/sve_helper.c | 10 ++++++++++ target/arm/tcg/translate-sve.c | 14 ++++++++++++++ 4 files changed, 37 insertions(+) diff --git a/target/arm/tcg/helper-sve.h b/target/arm/tcg/helper-sve.h index 0f510ea6103..5f4b4aa0364 100644 --- a/target/arm/tcg/helper-sve.h +++ b/target/arm/tcg/helper-sve.h @@ -676,11 +676,21 @@ DEF_HELPER_FLAGS_5(sve2_tbl_h, TCG_CALL_NO_RWG, void,= ptr, ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_5(sve2_tbl_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, = i32) DEF_HELPER_FLAGS_5(sve2_tbl_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, = i32) =20 +DEF_HELPER_FLAGS_4(sve2p1_tblq_b, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i3= 2) +DEF_HELPER_FLAGS_4(sve2p1_tblq_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i3= 2) +DEF_HELPER_FLAGS_4(sve2p1_tblq_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i3= 2) +DEF_HELPER_FLAGS_4(sve2p1_tblq_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i3= 2) + DEF_HELPER_FLAGS_4(sve2_tbx_b, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_4(sve2_tbx_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_4(sve2_tbx_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_4(sve2_tbx_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) =20 +DEF_HELPER_FLAGS_4(sve2p1_tbxq_b, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i3= 2) +DEF_HELPER_FLAGS_4(sve2p1_tbxq_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i3= 2) +DEF_HELPER_FLAGS_4(sve2p1_tbxq_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i3= 2) +DEF_HELPER_FLAGS_4(sve2p1_tbxq_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i3= 2) + DEF_HELPER_FLAGS_3(sve_sunpk_h, TCG_CALL_NO_RWG, void, ptr, ptr, i32) DEF_HELPER_FLAGS_3(sve_sunpk_s, TCG_CALL_NO_RWG, void, ptr, ptr, i32) DEF_HELPER_FLAGS_3(sve_sunpk_d, TCG_CALL_NO_RWG, void, ptr, ptr, i32) diff --git a/target/arm/tcg/sve.decode b/target/arm/tcg/sve.decode index e98275eec15..52a56d33413 100644 --- a/target/arm/tcg/sve.decode +++ b/target/arm/tcg/sve.decode @@ -663,6 +663,9 @@ ZIPQ2 01000100 .. 0 ..... 111 001 ..... .....= @rd_rn_rm UZPQ1 01000100 .. 0 ..... 111 010 ..... ..... @rd_rn_rm UZPQ2 01000100 .. 0 ..... 111 011 ..... ..... @rd_rn_rm =20 +TBLQ 01000100 .. 0 ..... 111 110 ..... ..... @rd_rn_rm +TBXQ 00000101 .. 1 ..... 001 101 ..... ..... @rd_rn_rm + ### SVE Permute - Predicated Group =20 # SVE compress active elements diff --git a/target/arm/tcg/sve_helper.c b/target/arm/tcg/sve_helper.c index dbbfbc12b97..42b05756a9d 100644 --- a/target/arm/tcg/sve_helper.c +++ b/target/arm/tcg/sve_helper.c @@ -3577,6 +3577,16 @@ DO_PERSEG_ZZZ(sve2p1_zipq_h, helper_sve_zip_h) DO_PERSEG_ZZZ(sve2p1_zipq_s, helper_sve_zip_s) DO_PERSEG_ZZZ(sve2p1_zipq_d, helper_sve_zip_d) =20 +DO_PERSEG_ZZZ(sve2p1_tblq_b, helper_sve_tbl_b) +DO_PERSEG_ZZZ(sve2p1_tblq_h, helper_sve_tbl_h) +DO_PERSEG_ZZZ(sve2p1_tblq_s, helper_sve_tbl_s) +DO_PERSEG_ZZZ(sve2p1_tblq_d, helper_sve_tbl_d) + +DO_PERSEG_ZZZ(sve2p1_tbxq_b, helper_sve2_tbx_b) +DO_PERSEG_ZZZ(sve2p1_tbxq_h, helper_sve2_tbx_h) +DO_PERSEG_ZZZ(sve2p1_tbxq_s, helper_sve2_tbx_s) +DO_PERSEG_ZZZ(sve2p1_tbxq_d, helper_sve2_tbx_d) + #undef DO_PERSEG_ZZZ =20 #define DO_TRN(NAME, TYPE, H) \ diff --git a/target/arm/tcg/translate-sve.c b/target/arm/tcg/translate-sve.c index 28cfcb9cb4c..02f885dd48f 100644 --- a/target/arm/tcg/translate-sve.c +++ b/target/arm/tcg/translate-sve.c @@ -2380,12 +2380,26 @@ static gen_helper_gvec_4 * const sve2_tbl_fns[4] = =3D { TRANS_FEAT(TBL_sve2, aa64_sve2, gen_gvec_ool_zzzz, sve2_tbl_fns[a->esz], a->rd, a->rn, (a->rn + 1) % 32, a->rm, 0) =20 +static gen_helper_gvec_3 * const tblq_fns[4] =3D { + gen_helper_sve2p1_tblq_b, gen_helper_sve2p1_tblq_h, + gen_helper_sve2p1_tblq_s, gen_helper_sve2p1_tblq_d +}; +TRANS_FEAT(TBLQ, aa64_sme2p1_or_sve2p1, gen_gvec_ool_arg_zzz, + tblq_fns[a->esz], a, 0) + static gen_helper_gvec_3 * const tbx_fns[4] =3D { gen_helper_sve2_tbx_b, gen_helper_sve2_tbx_h, gen_helper_sve2_tbx_s, gen_helper_sve2_tbx_d }; TRANS_FEAT(TBX, aa64_sve2, gen_gvec_ool_arg_zzz, tbx_fns[a->esz], a, 0) =20 +static gen_helper_gvec_3 * const tbxq_fns[4] =3D { + gen_helper_sve2p1_tbxq_b, gen_helper_sve2p1_tbxq_h, + gen_helper_sve2p1_tbxq_s, gen_helper_sve2p1_tbxq_d +}; +TRANS_FEAT(TBXQ, aa64_sme2p1_or_sve2p1, gen_gvec_ool_arg_zzz, + tbxq_fns[a->esz], a, 0) + static bool trans_PMOV_pv(DisasContext *s, arg_PMOV_pv *a) { static gen_helper_gvec_2 * const fns[4] =3D { --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646583; cv=none; d=zohomail.com; s=zohoarc; b=VD9bfieIHapJLfD/R7plKacSXn4rV8I0keJttRwTsvM+QqqQicij2vakSnttdo+vtodVeW+kAWO/zwFKCGXDhDyYZSftXB2vDURM9K3RoEOjZgpb7NUsrXLKBU39WillT/bUSRmzh6z45XBUVKXLY9lau4STzNRzRUKejQkVCsE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646583; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=ANyidr2JeFs1BtZwDWPn4s73pJB3PLUe3tq3LEh2Iuk=; b=OhUjBT2Mk4JMZAHcBI7ckJtAwFaIPNI6ka9ZOYVRv2dAb78mnwixW3l/wxvDXEhxvk3PLLb8hlQDDO1Ohl0F3pDtuBquG9UxRnnZbTguqxaW12zcuU0wqnYXvZNc3vxaet+sIZ/Z/SMJXvVrRtnI+g0nuOC4UVuRaX0qizJU93o= 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 175164658363864.94335906772767; Fri, 4 Jul 2025 09:29:43 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjGU-0007zi-9L; Fri, 04 Jul 2025 12:27:55 -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 1uXjFP-0004Og-Lg for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:47 -0400 Received: from mail-wm1-x32b.google.com ([2a00:1450:4864:20::32b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjFM-0006vf-20 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:47 -0400 Received: by mail-wm1-x32b.google.com with SMTP id 5b1f17b1804b1-453647147c6so9829215e9.2 for ; Fri, 04 Jul 2025 09:26:43 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.26.41 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:26:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646402; x=1752251202; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=ANyidr2JeFs1BtZwDWPn4s73pJB3PLUe3tq3LEh2Iuk=; b=nO5HkfXpaIumZXPkUnuvH0zabtW580p1gf1a3QRZv4vzBU2TODb++ZLw0/CREN9GmW 4UmXO2sUw5cN5ejP7BaQfuM9PdfiiTB/uoDSP4hpq2+LvGBp1m74E9wOpcoxvpQT6Gc+ VT0Hnjzep53DigjQrTKBtLIjow5s6OKCJWgFwJ2P5InNH8O4C2c6pkMSHgHLnh7hSEYa lyIEKTN0eJexKDcHIVov2w9Rhudayi7boCZ+6jo+wIbE+3w3ywnQjj44lHicf/m+wlQR M1l0uYkOnDkLhoZP97RJtGXy7OIl8p7ourgTpHHtG7e7if/MRA052S5I3N4jobR77JhT h9GA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646402; x=1752251202; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ANyidr2JeFs1BtZwDWPn4s73pJB3PLUe3tq3LEh2Iuk=; b=T0cOs2CLo3O41FXvL+2rh/fQwoxzNp9WjQqKbzwSJ84doWWl+GKfiuTJhKrsnXWovB IpJ63WrdhIlEsg7FeRrrLKGLpXDeY45dZSNjrFjq/X/+bmyJCXlT+/lLC5Ra2jnDffDr iNz5GZFBuUj+0KZ2uBEo1wOr+jOI5HabVuzOc824Aku0dLvOqPzUBdEeu2j9u1oWuIFg JKjg+YNZYrgIAdjEXwZl9X3+fFbKL5hb6viJochrlTe6ILP4vik69qlk1Rm+3kd3E5Yk Pd/ebMKmB7wTlJpkhPmu4k6OSesw0Xw/h/ymzF4w/PZQaMQk6nMxLBaZlmC0EvbCegci waHw== X-Gm-Message-State: AOJu0YyopnXoTgane16ETP/NVPx6U3lo2VIVQbwg1Ck1G617dWg+xYEh z1dg1Yt3OGKonBtueAYN5oDIAhAiJ1+kk58abG74+wS7GVKsFL6/YIlRrge60rD8WmfpiV1bHSV 1+Wes X-Gm-Gg: ASbGncswsTOtWT2EJ3xR+uhH3DL57cGmvMKhMXSUieWdqGQ1p2ySSLRyxPwh6ogpfzJ rCfoqB/Lw4U9vvw0cR4Y6Xl0tSBCETqNjx1g8hj2DTYiabcXfcdXaF6yNXYFHH4AylsXcBIteWi MqbJKEZR2zscPSLeLGiBibdDSV+038k+Xvl3jjlxaY5vs2YMbv/Z3yHvr6Li9sKEyVWmJzPCKUq nKrx1qbDIxIleU5nQ0TKSxMsZdS/tmGeF5jt9FeNraYRkwRREGQWr7LNbLiGkWwME9iqMthhiQw aY48by3ZZrR2ESQV4x54HOx8ZYFBQIYXA9/wNb3qUtmNNwp7lDx4vZR2bYtZU2sBtgrL X-Google-Smtp-Source: AGHT+IEkrfLW6dLwN1L7Z4PRm5moWWQYkNIrJ9JbsS8V2ixpMQLcVxdepQb/b3WfGB/yLi9ulzwcdA== X-Received: by 2002:a05:600c:a41:b0:442:f97f:8174 with SMTP id 5b1f17b1804b1-454b30df102mr41988885e9.18.1751646402212; Fri, 04 Jul 2025 09:26:42 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 105/119] target/arm: Implement SME2 counted predicate register load/store Date: Fri, 4 Jul 2025 17:24:45 +0100 Message-ID: <20250704162501.249138-106-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::32b; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x32b.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751646585268116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Implement the SVE2p1 consecutive register LD1/ST1, and the SME2 strided register LD1/ST1. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-94-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/helper-sve.h | 16 ++ target/arm/tcg/sve.decode | 50 ++++ target/arm/tcg/sve_helper.c | 493 +++++++++++++++++++++++++++++++++ target/arm/tcg/translate-sve.c | 103 +++++++ 4 files changed, 662 insertions(+) diff --git a/target/arm/tcg/helper-sve.h b/target/arm/tcg/helper-sve.h index 5f4b4aa0364..c4736d75105 100644 --- a/target/arm/tcg/helper-sve.h +++ b/target/arm/tcg/helper-sve.h @@ -3048,3 +3048,19 @@ DEF_HELPER_FLAGS_3(pmov_pv_d, TCG_CALL_NO_RWG, void,= ptr, ptr, i32) DEF_HELPER_FLAGS_3(pmov_vp_h, TCG_CALL_NO_RWG, void, ptr, ptr, i32) DEF_HELPER_FLAGS_3(pmov_vp_s, TCG_CALL_NO_RWG, void, ptr, ptr, i32) DEF_HELPER_FLAGS_3(pmov_vp_d, TCG_CALL_NO_RWG, void, ptr, ptr, i32) + +DEF_HELPER_FLAGS_5(sve2p1_ld1bb_c, TCG_CALL_NO_WG, void, env, ptr, tl, i32= , i32) +DEF_HELPER_FLAGS_5(sve2p1_ld1hh_le_c, TCG_CALL_NO_WG, void, env, ptr, tl, = i32, i32) +DEF_HELPER_FLAGS_5(sve2p1_ld1hh_be_c, TCG_CALL_NO_WG, void, env, ptr, tl, = i32, i32) +DEF_HELPER_FLAGS_5(sve2p1_ld1ss_le_c, TCG_CALL_NO_WG, void, env, ptr, tl, = i32, i32) +DEF_HELPER_FLAGS_5(sve2p1_ld1ss_be_c, TCG_CALL_NO_WG, void, env, ptr, tl, = i32, i32) +DEF_HELPER_FLAGS_5(sve2p1_ld1dd_le_c, TCG_CALL_NO_WG, void, env, ptr, tl, = i32, i32) +DEF_HELPER_FLAGS_5(sve2p1_ld1dd_be_c, TCG_CALL_NO_WG, void, env, ptr, tl, = i32, i32) + +DEF_HELPER_FLAGS_5(sve2p1_st1bb_c, TCG_CALL_NO_WG, void, env, ptr, tl, i32= , i32) +DEF_HELPER_FLAGS_5(sve2p1_st1hh_le_c, TCG_CALL_NO_WG, void, env, ptr, tl, = i32, i32) +DEF_HELPER_FLAGS_5(sve2p1_st1hh_be_c, TCG_CALL_NO_WG, void, env, ptr, tl, = i32, i32) +DEF_HELPER_FLAGS_5(sve2p1_st1ss_le_c, TCG_CALL_NO_WG, void, env, ptr, tl, = i32, i32) +DEF_HELPER_FLAGS_5(sve2p1_st1ss_be_c, TCG_CALL_NO_WG, void, env, ptr, tl, = i32, i32) +DEF_HELPER_FLAGS_5(sve2p1_st1dd_le_c, TCG_CALL_NO_WG, void, env, ptr, tl, = i32, i32) +DEF_HELPER_FLAGS_5(sve2p1_st1dd_be_c, TCG_CALL_NO_WG, void, env, ptr, tl, = i32, i32) diff --git a/target/arm/tcg/sve.decode b/target/arm/tcg/sve.decode index 52a56d33413..bf3d4f4853e 100644 --- a/target/arm/tcg/sve.decode +++ b/target/arm/tcg/sve.decode @@ -1812,3 +1812,53 @@ SCLAMP 01000100 .. 0 ..... 110000 ..... ...= .. @rda_rn_rm UCLAMP 01000100 .. 0 ..... 110001 ..... ..... @rda_rn_rm =20 FCLAMP 01100100 .. 1 ..... 001001 ..... ..... @rda_rn_rm + +### SVE2p1 multi-vec contiguous load + +&zcrr_ldst rd png rn rm esz nreg +&zcri_ldst rd png rn imm esz nreg +%png 10:3 !function=3Dplus_8 +%zd_ax2 1:4 !function=3Dtimes_2 +%zd_ax4 2:3 !function=3Dtimes_4 + +LD1_zcrr 10100000000 rm:5 0 esz:2 ... rn:5 .... - \ + &zcrr_ldst %png rd=3D%zd_ax2 nreg=3D2 +LD1_zcrr 10100000000 rm:5 1 esz:2 ... rn:5 ... 0- \ + &zcrr_ldst %png rd=3D%zd_ax4 nreg=3D4 + +ST1_zcrr 10100000001 rm:5 0 esz:2 ... rn:5 .... - \ + &zcrr_ldst %png rd=3D%zd_ax2 nreg=3D2 +ST1_zcrr 10100000001 rm:5 1 esz:2 ... rn:5 ... 0- \ + &zcrr_ldst %png rd=3D%zd_ax4 nreg=3D4 + +LD1_zcri 101000000100 imm:s4 0 esz:2 ... rn:5 .... - \ + &zcri_ldst %png rd=3D%zd_ax2 nreg=3D2 +LD1_zcri 101000000100 imm:s4 1 esz:2 ... rn:5 ... 0- \ + &zcri_ldst %png rd=3D%zd_ax4 nreg=3D4 + +ST1_zcri 101000000110 imm:s4 0 esz:2 ... rn:5 .... - \ + &zcri_ldst %png rd=3D%zd_ax2 nreg=3D2 +ST1_zcri 101000000110 imm:s4 1 esz:2 ... rn:5 ... 0- \ + &zcri_ldst %png rd=3D%zd_ax4 nreg=3D4 + +# Note: N bit and 0 bit (for nreg4) still mashed in rd. +# This is handled within gen_ldst_c(). +LD1_zcrr_stride 10100001000 rm:5 0 esz:2 ... rn:5 rd:5 \ + &zcrr_ldst %png nreg=3D2 +LD1_zcrr_stride 10100001000 rm:5 1 esz:2 ... rn:5 rd:5 \ + &zcrr_ldst %png nreg=3D4 + +ST1_zcrr_stride 10100001001 rm:5 0 esz:2 ... rn:5 rd:5 \ + &zcrr_ldst %png nreg=3D2 +ST1_zcrr_stride 10100001001 rm:5 1 esz:2 ... rn:5 rd:5 \ + &zcrr_ldst %png nreg=3D4 + +LD1_zcri_stride 101000010100 imm:s4 0 esz:2 ... rn:5 rd:5 \ + &zcri_ldst %png nreg=3D2 +LD1_zcri_stride 101000010100 imm:s4 1 esz:2 ... rn:5 rd:5 \ + &zcri_ldst %png nreg=3D4 + +ST1_zcri_stride 101000010110 imm:s4 0 esz:2 ... rn:5 rd:5 \ + &zcri_ldst %png nreg=3D2 +ST1_zcri_stride 101000010110 imm:s4 1 esz:2 ... rn:5 rd:5 \ + &zcri_ldst %png nreg=3D4 diff --git a/target/arm/tcg/sve_helper.c b/target/arm/tcg/sve_helper.c index 42b05756a9d..e6342990fa8 100644 --- a/target/arm/tcg/sve_helper.c +++ b/target/arm/tcg/sve_helper.c @@ -7586,6 +7586,499 @@ DO_ST1_ZPZ_D(dd_be, zd, MO_64) #undef DO_ST1_ZPZ_S #undef DO_ST1_ZPZ_D =20 +/* + * SVE2.1 consecutive register load/store + */ + +static unsigned sve2p1_cont_ldst_elements(SVEContLdSt *info, vaddr addr, + uint32_t png, intptr_t reg_max, + int N, int v_esz) +{ + const int esize =3D 1 << v_esz; + intptr_t reg_off_first =3D -1, reg_off_last =3D -1, reg_off_split; + DecodeCounter p =3D decode_counter(png, reg_max, v_esz); + unsigned b_count =3D p.count << v_esz; + unsigned b_stride =3D 1 << (v_esz + p.lg2_stride); + intptr_t page_split; + + /* Set all of the element indices to -1, and the TLB data to 0. */ + memset(info, -1, offsetof(SVEContLdSt, page)); + memset(info->page, 0, sizeof(info->page)); + + if (p.invert) { + if (b_count >=3D reg_max * N) { + return 0; + } + reg_off_first =3D b_count; + reg_off_last =3D reg_max * N - b_stride; + } else { + if (b_count =3D=3D 0) { + return 0; + } + reg_off_first =3D 0; + reg_off_last =3D MIN(b_count - esize, reg_max * N - b_stride); + } + + info->reg_off_first[0] =3D reg_off_first; + info->mem_off_first[0] =3D reg_off_first; + + page_split =3D -(addr | TARGET_PAGE_MASK); + if (reg_off_last + esize <=3D page_split || reg_off_first >=3D page_sp= lit) { + /* The entire operation fits within a single page. */ + info->reg_off_last[0] =3D reg_off_last; + return b_stride; + } + + info->page_split =3D page_split; + reg_off_split =3D ROUND_DOWN(page_split, esize); + + /* + * This is the last full element on the first page, but it is not + * necessarily active. If there is no full element, i.e. the first + * active element is the one that's split, this value remains -1. + * It is useful as iteration bounds. + */ + if (reg_off_split !=3D 0) { + info->reg_off_last[0] =3D ROUND_DOWN(reg_off_split - esize, b_stri= de); + } + + /* Determine if an unaligned element spans the pages. */ + if (page_split & (esize - 1)) { + /* It is helpful to know if the split element is active. */ + if ((reg_off_split & (b_stride - 1)) =3D=3D 0) { + info->reg_off_split =3D reg_off_split; + info->mem_off_split =3D reg_off_split; + } + reg_off_split +=3D esize; + } + + /* + * We do want the first active element on the second page, because + * this may affect the address reported in an exception. + */ + reg_off_split =3D ROUND_UP(reg_off_split, b_stride); + if (reg_off_split <=3D reg_off_last) { + info->reg_off_first[1] =3D reg_off_split; + info->mem_off_first[1] =3D reg_off_split; + info->reg_off_last[1] =3D reg_off_last; + } + return b_stride; +} + +static void sve2p1_cont_ldst_watchpoints(SVEContLdSt *info, CPUARMState *e= nv, + target_ulong addr, unsigned estri= de, + int esize, int wp_access, uintptr= _t ra) +{ +#ifndef CONFIG_USER_ONLY + intptr_t count_off, count_last; + int flags0 =3D info->page[0].flags; + int flags1 =3D info->page[1].flags; + + if (likely(!((flags0 | flags1) & TLB_WATCHPOINT))) { + return; + } + + /* Indicate that watchpoints are handled. */ + info->page[0].flags =3D flags0 & ~TLB_WATCHPOINT; + info->page[1].flags =3D flags1 & ~TLB_WATCHPOINT; + + if (flags0 & TLB_WATCHPOINT) { + count_off =3D info->reg_off_first[0]; + count_last =3D info->reg_off_split; + if (count_last < 0) { + count_last =3D info->reg_off_last[0]; + } + do { + cpu_check_watchpoint(env_cpu(env), addr + count_off, + esize, info->page[0].attrs, wp_access, ra= ); + count_off +=3D estride; + } while (count_off <=3D count_last); + } + + count_off =3D info->reg_off_first[1]; + if ((flags1 & TLB_WATCHPOINT) && count_off >=3D 0) { + count_last =3D info->reg_off_last[1]; + do { + cpu_check_watchpoint(env_cpu(env), addr + count_off, + esize, info->page[1].attrs, + wp_access, ra); + count_off +=3D estride; + } while (count_off <=3D count_last); + } +#endif +} + +static void sve2p1_cont_ldst_mte_check(SVEContLdSt *info, CPUARMState *env, + target_ulong addr, unsigned estride, + int esize, uint32_t mtedesc, + uintptr_t ra) +{ + intptr_t count_off, count_last; + + /* + * TODO: estride is always a small power of two, <=3D 8. + * Manipulate the stride within the loops such that + * - first iteration hits addr + off, as required, + * - second iteration hits ALIGN_UP(addr, 16), + * - other iterations advance addr by 16. + * This will minimize the probing to once per MTE granule. + */ + + /* Process the page only if MemAttr =3D=3D Tagged. */ + if (info->page[0].tagged) { + count_off =3D info->reg_off_first[0]; + count_last =3D info->reg_off_split; + if (count_last < 0) { + count_last =3D info->reg_off_last[0]; + } + + do { + mte_check(env, mtedesc, addr + count_off, ra); + count_off +=3D estride; + } while (count_off <=3D count_last); + } + + count_off =3D info->reg_off_first[1]; + if (count_off >=3D 0 && info->page[1].tagged) { + count_last =3D info->reg_off_last[1]; + do { + mte_check(env, mtedesc, addr + count_off, ra); + count_off +=3D estride; + } while (count_off <=3D count_last); + } +} + +static inline QEMU_ALWAYS_INLINE +void sve2p1_ld1_c(CPUARMState *env, ARMVectorReg *zd, const vaddr addr, + uint32_t png, uint32_t desc, + const uintptr_t ra, const MemOp esz, + sve_ldst1_host_fn *host_fn, + sve_ldst1_tlb_fn *tlb_fn) +{ + const unsigned N =3D (desc >> SIMD_DATA_SHIFT) & 1 ? 4 : 2; + const unsigned rstride =3D 1 << ((desc >> (SIMD_DATA_SHIFT + 1)) % 4); + uint32_t mtedesc =3D desc >> (SIMD_DATA_SHIFT + SVE_MTEDESC_SHIFT); + const intptr_t reg_max =3D simd_oprsz(desc); + const unsigned esize =3D 1 << esz; + intptr_t count_off, count_last; + intptr_t reg_off, reg_last, reg_n; + SVEContLdSt info; + unsigned estride, flags; + void *host; + + estride =3D sve2p1_cont_ldst_elements(&info, addr, png, reg_max, N, es= z); + if (estride =3D=3D 0) { + /* The entire predicate was false; no load occurs. */ + for (unsigned n =3D 0; n < N; n++) { + memset(zd + n * rstride, 0, reg_max); + } + return; + } + + /* Probe the page(s). Exit with exception for any invalid page. */ + sve_cont_ldst_pages(&info, FAULT_ALL, env, addr, MMU_DATA_LOAD, ra); + + /* Handle watchpoints for all active elements. */ + sve2p1_cont_ldst_watchpoints(&info, env, addr, estride, + esize, BP_MEM_READ, ra); + + /* + * Handle mte checks for all active elements. + * Since TBI must be set for MTE, !mtedesc =3D> !mte_active. + */ + if (mtedesc) { + sve2p1_cont_ldst_mte_check(&info, env, estride, addr, + esize, mtedesc, ra); + } + + flags =3D info.page[0].flags | info.page[1].flags; + if (unlikely(flags !=3D 0)) { + /* + * At least one page includes MMIO. + * Any bus operation can fail with cpu_transaction_failed, + * which for ARM will raise SyncExternal. Perform the load + * into scratch memory to preserve register state until the end. + */ + ARMVectorReg scratch[4] =3D { }; + + count_off =3D info.reg_off_first[0]; + count_last =3D info.reg_off_last[1]; + if (count_last < 0) { + count_last =3D info.reg_off_split; + if (count_last < 0) { + count_last =3D info.reg_off_last[0]; + } + } + reg_off =3D count_off % reg_max; + reg_n =3D count_off / reg_max; + + do { + reg_last =3D MIN(count_last - count_off, reg_max - esize); + do { + tlb_fn(env, &scratch[reg_n], reg_off, addr + count_off, ra= ); + reg_off +=3D estride; + count_off +=3D estride; + } while (reg_off <=3D reg_last); + reg_off =3D 0; + reg_n++; + } while (count_off <=3D count_last); + + for (unsigned n =3D 0; n < N; ++n) { + memcpy(&zd[n * rstride], &scratch[n], reg_max); + } + return; + } + + /* The entire operation is in RAM, on valid pages. */ + + for (unsigned n =3D 0; n < N; ++n) { + memset(&zd[n * rstride], 0, reg_max); + } + + count_off =3D info.reg_off_first[0]; + count_last =3D info.reg_off_last[0]; + reg_off =3D count_off % reg_max; + reg_n =3D count_off / reg_max; + host =3D info.page[0].host; + + set_helper_retaddr(ra); + + do { + reg_last =3D MIN(count_last - reg_n * reg_max, reg_max - esize); + do { + host_fn(&zd[reg_n * rstride], reg_off, host + count_off); + reg_off +=3D estride; + count_off +=3D estride; + } while (reg_off <=3D reg_last); + reg_off =3D 0; + reg_n++; + } while (count_off <=3D count_last); + + clear_helper_retaddr(); + + /* + * Use the slow path to manage the cross-page misalignment. + * But we know this is RAM and cannot trap. + */ + count_off =3D info.reg_off_split; + if (unlikely(count_off >=3D 0)) { + reg_off =3D count_off % reg_max; + reg_n =3D count_off / reg_max; + tlb_fn(env, &zd[reg_n * rstride], reg_off, addr + count_off, ra); + } + + count_off =3D info.reg_off_first[1]; + if (unlikely(count_off >=3D 0)) { + count_last =3D info.reg_off_last[1]; + reg_off =3D count_off % reg_max; + reg_n =3D count_off / reg_max; + host =3D info.page[1].host; + + set_helper_retaddr(ra); + + do { + reg_last =3D MIN(count_last - reg_n * reg_max, reg_max - esize= ); + do { + host_fn(&zd[reg_n * rstride], reg_off, host + count_off); + reg_off +=3D estride; + count_off +=3D estride; + } while (reg_off <=3D reg_last); + reg_off =3D 0; + reg_n++; + } while (count_off <=3D count_last); + + clear_helper_retaddr(); + } +} + +void HELPER(sve2p1_ld1bb_c)(CPUARMState *env, void *vd, target_ulong addr, + uint32_t png, uint32_t desc) +{ + sve2p1_ld1_c(env, vd, addr, png, desc, GETPC(), MO_8, + sve_ld1bb_host, sve_ld1bb_tlb); +} + +#define DO_LD1_2(NAME, ESZ) \ +void HELPER(sve2p1_##NAME##_le_c)(CPUARMState *env, void *vd, \ + target_ulong addr, uint32_t png, \ + uint32_t desc) \ +{ \ + sve2p1_ld1_c(env, vd, addr, png, desc, GETPC(), ESZ, \ + sve_##NAME##_le_host, sve_##NAME##_le_tlb); \ +} \ +void HELPER(sve2p1_##NAME##_be_c)(CPUARMState *env, void *vd, \ + target_ulong addr, uint32_t png, \ + uint32_t desc) \ +{ \ + sve2p1_ld1_c(env, vd, addr, png, desc, GETPC(), ESZ, \ + sve_##NAME##_be_host, sve_##NAME##_be_tlb); \ +} + +DO_LD1_2(ld1hh, MO_16) +DO_LD1_2(ld1ss, MO_32) +DO_LD1_2(ld1dd, MO_64) + +#undef DO_LD1_2 + +static inline QEMU_ALWAYS_INLINE +void sve2p1_st1_c(CPUARMState *env, ARMVectorReg *zd, const vaddr addr, + uint32_t png, uint32_t desc, + const uintptr_t ra, const int esz, + sve_ldst1_host_fn *host_fn, + sve_ldst1_tlb_fn *tlb_fn) +{ + const unsigned N =3D (desc >> SIMD_DATA_SHIFT) & 1 ? 4 : 2; + const unsigned rstride =3D 1 << ((desc >> (SIMD_DATA_SHIFT + 1)) % 4); + uint32_t mtedesc =3D desc >> (SIMD_DATA_SHIFT + SVE_MTEDESC_SHIFT); + const intptr_t reg_max =3D simd_oprsz(desc); + const unsigned esize =3D 1 << esz; + intptr_t count_off, count_last; + intptr_t reg_off, reg_last, reg_n; + SVEContLdSt info; + unsigned estride, flags; + void *host; + + estride =3D sve2p1_cont_ldst_elements(&info, addr, png, reg_max, N, es= z); + if (estride =3D=3D 0) { + /* The entire predicate was false; no store occurs. */ + return; + } + + /* Probe the page(s). Exit with exception for any invalid page. */ + sve_cont_ldst_pages(&info, FAULT_ALL, env, addr, MMU_DATA_STORE, ra); + + /* Handle watchpoints for all active elements. */ + sve2p1_cont_ldst_watchpoints(&info, env, addr, estride, + esize, BP_MEM_WRITE, ra); + + /* + * Handle mte checks for all active elements. + * Since TBI must be set for MTE, !mtedesc =3D> !mte_active. + */ + if (mtedesc) { + sve2p1_cont_ldst_mte_check(&info, env, estride, addr, + esize, mtedesc, ra); + } + + flags =3D info.page[0].flags | info.page[1].flags; + if (unlikely(flags !=3D 0)) { + /* + * At least one page includes MMIO. + * Any bus operation can fail with cpu_transaction_failed, + * which for ARM will raise SyncExternal. Perform the load + * into scratch memory to preserve register state until the end. + */ + count_off =3D info.reg_off_first[0]; + count_last =3D info.reg_off_last[1]; + if (count_last < 0) { + count_last =3D info.reg_off_split; + if (count_last < 0) { + count_last =3D info.reg_off_last[0]; + } + } + reg_off =3D count_off % reg_max; + reg_n =3D count_off / reg_max; + + do { + reg_last =3D MIN(count_last - count_off, reg_max - esize); + do { + tlb_fn(env, &zd[reg_n * rstride], reg_off, addr + count_of= f, ra); + reg_off +=3D estride; + count_off +=3D estride; + } while (reg_off <=3D reg_last); + reg_off =3D 0; + reg_n++; + } while (count_off <=3D count_last); + return; + } + + /* The entire operation is in RAM, on valid pages. */ + + count_off =3D info.reg_off_first[0]; + count_last =3D info.reg_off_last[0]; + reg_off =3D count_off % reg_max; + reg_n =3D count_off / reg_max; + host =3D info.page[0].host; + + set_helper_retaddr(ra); + + do { + reg_last =3D MIN(count_last - reg_n * reg_max, reg_max - esize); + do { + host_fn(&zd[reg_n * rstride], reg_off, host + count_off); + reg_off +=3D estride; + count_off +=3D estride; + } while (reg_off <=3D reg_last); + reg_off =3D 0; + reg_n++; + } while (count_off <=3D count_last); + + clear_helper_retaddr(); + + /* + * Use the slow path to manage the cross-page misalignment. + * But we know this is RAM and cannot trap. + */ + count_off =3D info.reg_off_split; + if (unlikely(count_off >=3D 0)) { + reg_off =3D count_off % reg_max; + reg_n =3D count_off / reg_max; + tlb_fn(env, &zd[reg_n * rstride], reg_off, addr + count_off, ra); + } + + count_off =3D info.reg_off_first[1]; + if (unlikely(count_off >=3D 0)) { + count_last =3D info.reg_off_last[1]; + reg_off =3D count_off % reg_max; + reg_n =3D count_off / reg_max; + host =3D info.page[1].host; + + set_helper_retaddr(ra); + + do { + reg_last =3D MIN(count_last - reg_n * reg_max, reg_max - esize= ); + do { + host_fn(&zd[reg_n * rstride], reg_off, host + count_off); + reg_off +=3D estride; + count_off +=3D estride; + } while (reg_off <=3D reg_last); + reg_off =3D 0; + reg_n++; + } while (count_off <=3D count_last); + + clear_helper_retaddr(); + } +} + +void HELPER(sve2p1_st1bb_c)(CPUARMState *env, void *vd, target_ulong addr, + uint32_t png, uint32_t desc) +{ + sve2p1_st1_c(env, vd, addr, png, desc, GETPC(), MO_8, + sve_st1bb_host, sve_st1bb_tlb); +} + +#define DO_ST1_2(NAME, ESZ) \ +void HELPER(sve2p1_##NAME##_le_c)(CPUARMState *env, void *vd, \ + target_ulong addr, uint32_t png, \ + uint32_t desc) \ +{ \ + sve2p1_st1_c(env, vd, addr, png, desc, GETPC(), ESZ, \ + sve_##NAME##_le_host, sve_##NAME##_le_tlb); \ +} \ +void HELPER(sve2p1_##NAME##_be_c)(CPUARMState *env, void *vd, \ + target_ulong addr, uint32_t png, \ + uint32_t desc) \ +{ \ + sve2p1_st1_c(env, vd, addr, png, desc, GETPC(), ESZ, \ + sve_##NAME##_be_host, sve_##NAME##_be_tlb); \ +} + +DO_ST1_2(st1hh, MO_16) +DO_ST1_2(st1ss, MO_32) +DO_ST1_2(st1dd, MO_64) + +#undef DO_ST1_2 + void HELPER(sve2_eor3)(void *vd, void *vn, void *vm, void *vk, uint32_t de= sc) { intptr_t i, opr_sz =3D simd_oprsz(desc) / 8; diff --git a/target/arm/tcg/translate-sve.c b/target/arm/tcg/translate-sve.c index 02f885dd48f..dfb53e4bf40 100644 --- a/target/arm/tcg/translate-sve.c +++ b/target/arm/tcg/translate-sve.c @@ -7863,3 +7863,106 @@ TRANS_FEAT(UQCVTN_sh, aa64_sme2_or_sve2p1, gen_gvec= _ool_zz, gen_helper_sme2_uqcvtn_sh, a->rd, a->rn, 0) TRANS_FEAT(SQCVTUN_sh, aa64_sme2_or_sve2p1, gen_gvec_ool_zz, gen_helper_sme2_sqcvtun_sh, a->rd, a->rn, 0) + +static bool gen_ldst_c(DisasContext *s, TCGv_i64 addr, int zd, int png, + MemOp esz, bool is_write, int n, bool strided) +{ + typedef void ldst_c_fn(TCGv_env, TCGv_ptr, TCGv_i64, + TCGv_i32, TCGv_i32); + static ldst_c_fn * const f_ldst[2][2][4] =3D { + { { gen_helper_sve2p1_ld1bb_c, + gen_helper_sve2p1_ld1hh_le_c, + gen_helper_sve2p1_ld1ss_le_c, + gen_helper_sve2p1_ld1dd_le_c, }, + { gen_helper_sve2p1_ld1bb_c, + gen_helper_sve2p1_ld1hh_be_c, + gen_helper_sve2p1_ld1ss_be_c, + gen_helper_sve2p1_ld1dd_be_c, } }, + + { { gen_helper_sve2p1_st1bb_c, + gen_helper_sve2p1_st1hh_le_c, + gen_helper_sve2p1_st1ss_le_c, + gen_helper_sve2p1_st1dd_le_c, }, + { gen_helper_sve2p1_st1bb_c, + gen_helper_sve2p1_st1hh_be_c, + gen_helper_sve2p1_st1ss_be_c, + gen_helper_sve2p1_st1dd_be_c, } } + }; + + TCGv_i32 t_png, t_desc; + TCGv_ptr t_zd; + uint32_t desc, lg2_rstride =3D 0; + bool be =3D s->be_data =3D=3D MO_BE; + + assert(n =3D=3D 2 || n =3D=3D 4); + if (strided) { + lg2_rstride =3D 3; + if (n =3D=3D 4) { + /* Validate ZD alignment. */ + if (zd & 4) { + return false; + } + lg2_rstride =3D 2; + } + /* Ignore non-temporal bit */ + zd &=3D ~8; + } + + if (strided || !dc_isar_feature(aa64_sve2p1, s) + ? !sme_sm_enabled_check(s) + : !sve_access_check(s)) { + return true; + } + + if (!s->mte_active[0]) { + addr =3D clean_data_tbi(s, addr); + } + + desc =3D n =3D=3D 2 ? 0 : 1; + desc =3D desc | (lg2_rstride << 1); + desc =3D make_svemte_desc(s, vec_full_reg_size(s), 1, esz, is_write, d= esc); + t_desc =3D tcg_constant_i32(desc); + + t_png =3D tcg_temp_new_i32(); + tcg_gen_ld16u_i32(t_png, tcg_env, + pred_full_reg_offset(s, png) ^ + (HOST_BIG_ENDIAN ? 6 : 0)); + + t_zd =3D tcg_temp_new_ptr(); + tcg_gen_addi_ptr(t_zd, tcg_env, vec_full_reg_offset(s, zd)); + + f_ldst[is_write][be][esz](tcg_env, t_zd, addr, t_png, t_desc); + return true; +} + +static bool gen_ldst_zcrr_c(DisasContext *s, arg_zcrr_ldst *a, + bool is_write, bool strided) +{ + TCGv_i64 addr =3D tcg_temp_new_i64(); + + tcg_gen_shli_i64(addr, cpu_reg(s, a->rm), a->esz); + tcg_gen_add_i64(addr, addr, cpu_reg_sp(s, a->rn)); + return gen_ldst_c(s, addr, a->rd, a->png, a->esz, is_write, + a->nreg, strided); +} + +static bool gen_ldst_zcri_c(DisasContext *s, arg_zcri_ldst *a, + bool is_write, bool strided) +{ + TCGv_i64 addr =3D tcg_temp_new_i64(); + + tcg_gen_addi_i64(addr, cpu_reg_sp(s, a->rn), + a->imm * a->nreg * vec_full_reg_size(s)); + return gen_ldst_c(s, addr, a->rd, a->png, a->esz, is_write, + a->nreg, strided); +} + +TRANS_FEAT(LD1_zcrr, aa64_sme2_or_sve2p1, gen_ldst_zcrr_c, a, false, false) +TRANS_FEAT(LD1_zcri, aa64_sme2_or_sve2p1, gen_ldst_zcri_c, a, false, false) +TRANS_FEAT(ST1_zcrr, aa64_sme2_or_sve2p1, gen_ldst_zcrr_c, a, true, false) +TRANS_FEAT(ST1_zcri, aa64_sme2_or_sve2p1, gen_ldst_zcri_c, a, true, false) + +TRANS_FEAT(LD1_zcrr_stride, aa64_sme2, gen_ldst_zcrr_c, a, false, true) +TRANS_FEAT(LD1_zcri_stride, aa64_sme2, gen_ldst_zcri_c, a, false, true) +TRANS_FEAT(ST1_zcrr_stride, aa64_sme2, gen_ldst_zcrr_c, a, true, true) +TRANS_FEAT(ST1_zcri_stride, aa64_sme2, gen_ldst_zcri_c, a, true, true) --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646567; cv=none; d=zohomail.com; s=zohoarc; b=Vky1iIX9Aq52AeQpywXAGs9483n7E5MLc3yHQfRnwD2LxoKT05MESKTgBNsRFn4V09HOGRqwgAZx47jssrMvBDkdaXd89bX6rOrMNHmRRFzZU87DENLOSrxHlWiLtgcTgEt8edw60/GQ1u5vvRSDas+1NiSPrwy+ba+9uaPuDFo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646567; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=ipzxBi/iecKjvrSJsxvJBuDTmnzcxt/BXh5rL4Zb7jI=; b=Xhpl/iWU8nXRAYJv8PMcXkBCMcDvM+15eZjavUwt2Ud6N/EK/V+KLnfkj0HPH18K5ro/GmNxpBBgrN8Pzw1IHca2sOKlrPvAOr6V0IUpn42ajXLcX4PgINAOiTnsi0JY1ftv6ZjMuXe3cgWN09HJU0Z05/ArJTUQam/4/7OVuC8= 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 1751646567695988.5756046846873; Fri, 4 Jul 2025 09:29:27 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjGI-0007bP-Jp; Fri, 04 Jul 2025 12:27:43 -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 1uXjFO-0004Ib-Hk for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:46 -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 1uXjFM-0006vq-LJ for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:46 -0400 Received: by mail-wm1-x32f.google.com with SMTP id 5b1f17b1804b1-451dbe494d6so12233335e9.1 for ; Fri, 04 Jul 2025 09:26:44 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.26.42 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:26:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646403; x=1752251203; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=ipzxBi/iecKjvrSJsxvJBuDTmnzcxt/BXh5rL4Zb7jI=; b=flNLjrLBD2kjmzSsJp7QFavmUEQOqqGMOdxMyll9V4mEWJv0DZyzIvpGbVhNo0zrfr 7fz+MTLkRg81onpP5GEgM7kKLr/UnKGyaUa0JyfsouyifuI5E+dzewIVy6eUedZneklU UQD3ollP7PeIHDtm7qethA+fqbdQF5iC5Vponf2znluk0U8GREoQhYIZBibGuvFiCPne T3iCaFab+cR15UVC+46MO/Am6d1Ig1puHmtX9/XccfXCm4LNtos6e8j+E9gzL7x+EEX2 9OXjTgy5bBgC2WF6Elzo4+lNe1D/ffpuPddIEZdXHP4/4QId+odHaFGcBt/w7h8X7myW 3jsw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646403; x=1752251203; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ipzxBi/iecKjvrSJsxvJBuDTmnzcxt/BXh5rL4Zb7jI=; b=N0w2070tr7Ew91X0S/IF0RL91ziFdJoJJKSJO///lLSNGMsevgDNYYJk/eI5Tkx7bJ DglQYuQaXdR9lwQ+BiaKb9WQBhkq/qAUHlrahKE8YjAnTpRIlN6HY575X+dt6J7LiKOx 0wl/AaV4JeSomRYQLpasBDxKcW7aXPahkhCkUz07b2AQWtxx1vZ50UghTsgwsfbSGVam +z5nWWJ3hoBH+hWeS+UfYb5+IhA+7L9qtwOfIC+QeAXNFKDRPjo0grCUPX2eeuC7zFgR SQV2GKZWomKcdhKWRcWonOApOVEUuUTR9henxyko9rPp+5QEJ3XVA8WZusCTnCFxt4j+ 2Nog== X-Gm-Message-State: AOJu0Ywbrmkb0/4GnHsvmMlKnKBKq7vRQoHR9UnYZvu2NPFy1HmZAzUV dIzaR+55tZ7OAZO0HX/9CxU/nPJ88v3U05YO+8Z1T6hzD0DV3v2RMOJOKvrqTciEIAVlOJk6sOY 7ABCb X-Gm-Gg: ASbGncvOGhHsID0uGK9py08f3RWR/ZJTFyPzbeJE7mQsdmZdMzTpoTzXbh6F4ka3Y9r fqXL+HvobHsPVx4ZCdNGHS+WLZAxPjEA7Sx1Kqa+cZJACG0U3GMrWosEnEK3dcHcrIVxRYdf8dA sQVQVuxLKZzMDKjq+xjT110ylHxKNI6vGa60BPc04LmAvunAVuAd1/hHrjv69DbVjU4JTtF7NA3 N98iNV4OAIpb12Q00vvWOyBMit7UhRr61oFqAvbldT0GKt+vAaJBfx3Fj/lkfhVLk8qMDiUHbHt FK1Cp7NTB/iYIqYMXYHPUbgrp5VkKwQfuEaHqSN8TciFyp6vMMGcloA9QYDJOaWVQLNNPwjnt0u zDYw= X-Google-Smtp-Source: AGHT+IHVasOj5vyHJlFTA0SskxzvKJ3d1q4s5qFi+MXFd9LYmxypRJWwWLNtVjfu5Hc3aFXkBX660Q== X-Received: by 2002:a05:6000:41f7:b0:3a3:652d:1640 with SMTP id ffacd0b85a97d-3b49700c684mr2539959f8f.2.1751646403071; Fri, 04 Jul 2025 09:26:43 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 106/119] target/arm: Split the ST_zpri and ST_zprr patterns Date: Fri, 4 Jul 2025 17:24:46 +0100 Message-ID: <20250704162501.249138-107-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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=peter.maydell@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 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: 1751646568771116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson The msz > esz encodings are reserved, and some of them are about to be reused. Split these patterns so that the new insns do not overlap. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-95-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/sve.decode | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/target/arm/tcg/sve.decode b/target/arm/tcg/sve.decode index bf3d4f4853e..70207718984 100644 --- a/target/arm/tcg/sve.decode +++ b/target/arm/tcg/sve.decode @@ -252,7 +252,7 @@ =20 # Stores; user must fill in ESZ, MSZ, NREG as needed. @rprr_store ....... .. .. rm:5 ... pg:3 rn:5 rd:5 &rprr_= store -@rpri_store_msz ....... msz:2 .. . imm:s4 ... pg:3 rn:5 rd:5 &rpri_= store +@rpri_store ....... .. .. . imm:s4 ... pg:3 rn:5 rd:5 &rpri_= store @rprr_store_esz_n0 ....... .. esz:2 rm:5 ... pg:3 rn:5 rd:5 \ &rprr_store nreg=3D0 @rprr_scatter_store ....... msz:2 .. rm:5 ... pg:3 rn:5 rd:5 \ @@ -1334,8 +1334,16 @@ STR_zri 1110010 11 0. ..... 010 ... ....= . ..... @rd_rn_i9 =20 # SVE contiguous store (scalar plus immediate) # ST1B, ST1H, ST1W, ST1D; require msz <=3D esz -ST_zpri 1110010 .. esz:2 0.... 111 ... ..... ..... \ - @rpri_store_msz nreg=3D0 +ST_zpri 1110010 00 esz:2 0.... 111 ... ..... ..... \ + @rpri_store msz=3D0 nreg=3D0 +ST_zpri 1110010 01 esz:2 0.... 111 ... ..... ..... \ + @rpri_store msz=3D1 nreg=3D0 +ST_zpri 1110010 10 10 0.... 111 ... ..... ..... \ + @rpri_store msz=3D2 esz=3D2 nreg=3D0 +ST_zpri 1110010 10 11 0.... 111 ... ..... ..... \ + @rpri_store msz=3D2 esz=3D3 nreg=3D0 +ST_zpri 1110010 11 11 0.... 111 ... ..... ..... \ + @rpri_store msz=3D3 esz=3D3 nreg=3D0 =20 # SVE contiguous store (scalar plus scalar) # ST1B, ST1H, ST1W, ST1D; require msz <=3D esz @@ -1344,20 +1352,22 @@ ST_zprr 1110010 00 .. ..... 010 ... ...= .. ..... \ @rprr_store_esz_n0 msz=3D0 ST_zprr 1110010 01 .. ..... 010 ... ..... ..... \ @rprr_store_esz_n0 msz=3D1 -ST_zprr 1110010 10 .. ..... 010 ... ..... ..... \ - @rprr_store_esz_n0 msz=3D2 +ST_zprr 1110010 10 10 ..... 010 ... ..... ..... \ + @rprr_store msz=3D2 esz=3D2 nreg=3D0 +ST_zprr 1110010 10 11 ..... 010 ... ..... ..... \ + @rprr_store msz=3D2 esz=3D3 nreg=3D0 ST_zprr 1110010 11 11 ..... 010 ... ..... ..... \ @rprr_store msz=3D3 esz=3D3 nreg=3D0 =20 # SVE contiguous non-temporal store (scalar plus immediate) (nreg =3D=3D = 0) # SVE store multiple structures (scalar plus immediate) (nreg !=3D 0) ST_zpri 1110010 .. nreg:2 1.... 111 ... ..... ..... \ - @rpri_store_msz esz=3D%size_23 + @rpri_store msz=3D%size_23 esz=3D%size_23 =20 # SVE contiguous non-temporal store (scalar plus scalar) (nreg =3D=3D = 0) # SVE store multiple structures (scalar plus scalar) (nreg !=3D 0) -ST_zprr 1110010 msz:2 nreg:2 ..... 011 ... ..... ..... \ - @rprr_store esz=3D%size_23 +ST_zprr 1110010 .. nreg:2 ..... 011 ... ..... ..... \ + @rprr_store msz=3D%size_23 esz=3D%size_23 =20 # SVE 32-bit scatter store (scalar plus 32-bit scaled offsets) # Require msz > 0 && msz <=3D esz. --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647168; cv=none; d=zohomail.com; s=zohoarc; b=mYbknwwYMoBhqd+xsv8PMeLZxv/RmwK2AguJ7sfyDtkB9jaBByGeC0i25U6waP34Mvwp2x7LxkdP4qfNntlx+KF3RGxX2zOZ4Xqlu7HWNqAu9JvRWlDzW8QO2LNo/UWOF39APaxTu1dRSCZ2xdYMUe1HnifPHqKNOiJaet/DaMI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647168; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=6K0F34FigkpyX4WwzbDoJLuWwa3uYnwM9W8KEMx00Wk=; b=ciZ8OvCnnf7BoKGbxNJ36arGSSk847BIJ49g22l5H5nXR44t7XIfr9ZCQOEpxJ+/jenMNHiD5kgkOAAauQ0Sxncj9bGyg2g837NWJ9jURULu2m5l9pSjQJQrjzFMIo+plERCxIza7AX9WJdZZogXyRTDX82j+kKhSCQvvQIJBrc= 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 17516471684851021.5902815372418; Fri, 4 Jul 2025 09:39:28 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjGO-0007kr-5H; Fri, 04 Jul 2025 12:27:48 -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 1uXjFQ-0004Vk-V1 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:48 -0400 Received: from mail-wr1-x42e.google.com ([2a00:1450:4864:20::42e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjFN-0006wC-W5 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:48 -0400 Received: by mail-wr1-x42e.google.com with SMTP id ffacd0b85a97d-3a4f379662cso967796f8f.0 for ; Fri, 04 Jul 2025 09:26:45 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.26.43 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:26:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646404; x=1752251204; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=6K0F34FigkpyX4WwzbDoJLuWwa3uYnwM9W8KEMx00Wk=; b=RfSAtarnOuarGW6nRY4HJI3QK9zL3ZxkabyA9NzHtCpWGm0InItmOV6kCEmN1wKHBm rarVyWSk482J8ifSGffqoKeTsoU2nt9qcvemDUbep848xxQf4Yj4FoT1icPonpspeifx Gjxzm+D/MrKBJpq8CQe06rtmXiWfJLaWAVNDcKIJO8iZ8rCnrD5ZCK9UOmuTJp7IqWu0 KKzYbv0SwVort0PHECQx6Mw5e/oa/TUGXb1owj4m2IMQDGHy/6oz8SldKgfZsDxh6+lN sqnbUKl1/eL5eZwDGrkfvPNz9HgYpNWdYmThaC0TVuRfUASbUUzQ0Crkx0ZyBRoiiZYd UHEA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646404; x=1752251204; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=6K0F34FigkpyX4WwzbDoJLuWwa3uYnwM9W8KEMx00Wk=; b=d7f9G+MEVZIQYs7NX0OSULtM7YOlA8BVp1DR3k02aLHPFMMZx7bGOb32el685A76Hs zn+UjeFRozxzLrjBVOy5eC4hEjfrYtzLXz68JYMEfQ3RzQbxvbkkMPhyC7heHlJYXEgo 7hSocJvovm+rBCqI46TjdAcPbWlUwawOm9XIxmsj3jGCFyNZCSCEGYMfKhGiFEiMn+1j o6N9LtGaP+9remkLboft7x9zJlK175VwG9ylYombs/kwKiECMjMCPdQyUXcsM7SlFntG IDlBzO2NL5jYec4EyulziHTqh4a5+gYLbztHdghGN3VN5z2C3smYzsz0MmMD2/74uE/u I4lA== X-Gm-Message-State: AOJu0YwYOJgrY3fxhJHt1PXpegV/tvCemTwOCk9BJfOqDRDBjjda4Tfl HIRrqJRVmfvosmOSzg8UGsFkdTTpdNG6yo/Dmk1/LIB5yV29pD66KqHJyYwaLFxWeoCDiFmW9PE G8UQ9 X-Gm-Gg: ASbGnctn5PUC8EAULfLHi+nALumvF8zlrLD1z0eodZRyyZZ3XPB89k65GlhZW4uYeMB /gogyMmPDfEBw+feXPEYce/2nKvG+QLasHjeNFuyrgx8bXfwq4v2W6XbavnZxiQ1l8XBzQF5GKI JloCuJ/4FhhPuaapNdXGu2pJhuQBMf8Nb0KVRWuhdhw5w578LD32j0gx9eQWif7wlPJhqzmYr9n rVcLRLE6swVb40ypN9IJRC5dJnNsIRcUNZ5tACy5wC5bA5+xJ4CpbGROqpF4u5yDgCsPQnrsWrF ltco1cl4ccvzJp1K83o4FizGvFUEWTFCpUpajIsUUR3buclFiegukt6AAnGQTKmueJym X-Google-Smtp-Source: AGHT+IE1bXdfA58D0kPDSP3LuA1+2ci3zoNH9aoP/aNS6rOfW4abdVJkMUOGsEwz2og1NXtQySNSqA== X-Received: by 2002:a05:6000:4386:b0:3a8:6262:6ef5 with SMTP id ffacd0b85a97d-3b496fef6bcmr2977691f8f.10.1751646403957; Fri, 04 Jul 2025 09:26:43 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 107/119] target/arm: Implement {LD1, ST1}{W, D} (128-bit element) for SVE2p1 Date: Fri, 4 Jul 2025 17:24:47 +0100 Message-ID: <20250704162501.249138-108-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::42e; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x42e.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751647169965116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-96-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/helper-sve.h | 22 +++++ target/arm/tcg/sve_ldst_internal.h | 26 ++++++ target/arm/tcg/sve.decode | 20 +++++ target/arm/tcg/sve_helper.c | 6 ++ target/arm/tcg/translate-sve.c | 136 +++++++++++++++++++++++------ 5 files changed, 183 insertions(+), 27 deletions(-) diff --git a/target/arm/tcg/helper-sve.h b/target/arm/tcg/helper-sve.h index c4736d75105..1999c4bb1fa 100644 --- a/target/arm/tcg/helper-sve.h +++ b/target/arm/tcg/helper-sve.h @@ -1678,9 +1678,15 @@ DEF_HELPER_FLAGS_4(sve_ld1hds_be_r, TCG_CALL_NO_WG, = void, env, ptr, tl, i32) DEF_HELPER_FLAGS_4(sve_ld1sdu_le_r, TCG_CALL_NO_WG, void, env, ptr, tl, i3= 2) DEF_HELPER_FLAGS_4(sve_ld1sds_le_r, TCG_CALL_NO_WG, void, env, ptr, tl, i3= 2) =20 +DEF_HELPER_FLAGS_4(sve_ld1squ_le_r, TCG_CALL_NO_WG, void, env, ptr, tl, i3= 2) +DEF_HELPER_FLAGS_4(sve_ld1dqu_le_r, TCG_CALL_NO_WG, void, env, ptr, tl, i3= 2) + DEF_HELPER_FLAGS_4(sve_ld1sdu_be_r, TCG_CALL_NO_WG, void, env, ptr, tl, i3= 2) DEF_HELPER_FLAGS_4(sve_ld1sds_be_r, TCG_CALL_NO_WG, void, env, ptr, tl, i3= 2) =20 +DEF_HELPER_FLAGS_4(sve_ld1squ_be_r, TCG_CALL_NO_WG, void, env, ptr, tl, i3= 2) +DEF_HELPER_FLAGS_4(sve_ld1dqu_be_r, TCG_CALL_NO_WG, void, env, ptr, tl, i3= 2) + DEF_HELPER_FLAGS_4(sve_ld1bb_r_mte, TCG_CALL_NO_WG, void, env, ptr, tl, i3= 2) DEF_HELPER_FLAGS_4(sve_ld2bb_r_mte, TCG_CALL_NO_WG, void, env, ptr, tl, i3= 2) DEF_HELPER_FLAGS_4(sve_ld3bb_r_mte, TCG_CALL_NO_WG, void, env, ptr, tl, i3= 2) @@ -1736,9 +1742,15 @@ DEF_HELPER_FLAGS_4(sve_ld1hds_be_r_mte, TCG_CALL_NO_= WG, void, env, ptr, tl, i32) DEF_HELPER_FLAGS_4(sve_ld1sdu_le_r_mte, TCG_CALL_NO_WG, void, env, ptr, tl= , i32) DEF_HELPER_FLAGS_4(sve_ld1sds_le_r_mte, TCG_CALL_NO_WG, void, env, ptr, tl= , i32) =20 +DEF_HELPER_FLAGS_4(sve_ld1squ_le_r_mte, TCG_CALL_NO_WG, void, env, ptr, tl= , i32) +DEF_HELPER_FLAGS_4(sve_ld1dqu_le_r_mte, TCG_CALL_NO_WG, void, env, ptr, tl= , i32) + DEF_HELPER_FLAGS_4(sve_ld1sdu_be_r_mte, TCG_CALL_NO_WG, void, env, ptr, tl= , i32) DEF_HELPER_FLAGS_4(sve_ld1sds_be_r_mte, TCG_CALL_NO_WG, void, env, ptr, tl= , i32) =20 +DEF_HELPER_FLAGS_4(sve_ld1squ_be_r_mte, TCG_CALL_NO_WG, void, env, ptr, tl= , i32) +DEF_HELPER_FLAGS_4(sve_ld1dqu_be_r_mte, TCG_CALL_NO_WG, void, env, ptr, tl= , i32) + DEF_HELPER_FLAGS_4(sve_ldff1bb_r, TCG_CALL_NO_WG, void, env, ptr, tl, i32) DEF_HELPER_FLAGS_4(sve_ldff1bhu_r, TCG_CALL_NO_WG, void, env, ptr, tl, i32) DEF_HELPER_FLAGS_4(sve_ldff1bsu_r, TCG_CALL_NO_WG, void, env, ptr, tl, i32) @@ -1946,6 +1958,11 @@ DEF_HELPER_FLAGS_4(sve_st1hd_be_r, TCG_CALL_NO_WG, v= oid, env, ptr, tl, i32) DEF_HELPER_FLAGS_4(sve_st1sd_le_r, TCG_CALL_NO_WG, void, env, ptr, tl, i32) DEF_HELPER_FLAGS_4(sve_st1sd_be_r, TCG_CALL_NO_WG, void, env, ptr, tl, i32) =20 +DEF_HELPER_FLAGS_4(sve_st1sq_le_r, TCG_CALL_NO_WG, void, env, ptr, tl, i32) +DEF_HELPER_FLAGS_4(sve_st1sq_be_r, TCG_CALL_NO_WG, void, env, ptr, tl, i32) +DEF_HELPER_FLAGS_4(sve_st1dq_le_r, TCG_CALL_NO_WG, void, env, ptr, tl, i32) +DEF_HELPER_FLAGS_4(sve_st1dq_be_r, TCG_CALL_NO_WG, void, env, ptr, tl, i32) + DEF_HELPER_FLAGS_4(sve_st1bb_r_mte, TCG_CALL_NO_WG, void, env, ptr, tl, i3= 2) DEF_HELPER_FLAGS_4(sve_st2bb_r_mte, TCG_CALL_NO_WG, void, env, ptr, tl, i3= 2) DEF_HELPER_FLAGS_4(sve_st3bb_r_mte, TCG_CALL_NO_WG, void, env, ptr, tl, i3= 2) @@ -1993,6 +2010,11 @@ DEF_HELPER_FLAGS_4(sve_st1hd_be_r_mte, TCG_CALL_NO_W= G, void, env, ptr, tl, i32) DEF_HELPER_FLAGS_4(sve_st1sd_le_r_mte, TCG_CALL_NO_WG, void, env, ptr, tl,= i32) DEF_HELPER_FLAGS_4(sve_st1sd_be_r_mte, TCG_CALL_NO_WG, void, env, ptr, tl,= i32) =20 +DEF_HELPER_FLAGS_4(sve_st1sq_le_r_mte, TCG_CALL_NO_WG, void, env, ptr, tl,= i32) +DEF_HELPER_FLAGS_4(sve_st1sq_be_r_mte, TCG_CALL_NO_WG, void, env, ptr, tl,= i32) +DEF_HELPER_FLAGS_4(sve_st1dq_le_r_mte, TCG_CALL_NO_WG, void, env, ptr, tl,= i32) +DEF_HELPER_FLAGS_4(sve_st1dq_be_r_mte, TCG_CALL_NO_WG, void, env, ptr, tl,= i32) + DEF_HELPER_FLAGS_6(sve_ldbsu_zsu, TCG_CALL_NO_WG, void, env, ptr, ptr, ptr, tl, i32) DEF_HELPER_FLAGS_6(sve_ldhsu_le_zsu, TCG_CALL_NO_WG, diff --git a/target/arm/tcg/sve_ldst_internal.h b/target/arm/tcg/sve_ldst_i= nternal.h index f2243daf370..e87beba4357 100644 --- a/target/arm/tcg/sve_ldst_internal.h +++ b/target/arm/tcg/sve_ldst_internal.h @@ -116,6 +116,31 @@ DO_ST_PRIM_2(sd, H1_8, uint64_t, uint32_t, stl) DO_LD_PRIM_2(dd, H1_8, uint64_t, uint64_t, ldq) DO_ST_PRIM_2(dd, H1_8, uint64_t, uint64_t, stq) =20 +#define DO_LD_PRIM_3(NAME, FUNC) \ + static inline void sve_##NAME##_host(void *vd, \ + intptr_t reg_off, void *host) \ + { sve_##FUNC##_host(vd, reg_off, host); \ + *(uint64_t *)(vd + reg_off + 8) =3D 0; } \ + static inline void sve_##NAME##_tlb(CPUARMState *env, void *vd, \ + intptr_t reg_off, target_ulong addr, uintptr_t ra) \ + { sve_##FUNC##_tlb(env, vd, reg_off, addr, ra); \ + *(uint64_t *)(vd + reg_off + 8) =3D 0; } + +DO_LD_PRIM_3(ld1squ_be, ld1sdu_be) +DO_LD_PRIM_3(ld1squ_le, ld1sdu_le) +DO_LD_PRIM_3(ld1dqu_be, ld1dd_be) +DO_LD_PRIM_3(ld1dqu_le, ld1dd_le) + +#define sve_st1sq_be_host sve_st1sd_be_host +#define sve_st1sq_le_host sve_st1sd_le_host +#define sve_st1sq_be_tlb sve_st1sd_be_tlb +#define sve_st1sq_le_tlb sve_st1sd_le_tlb + +#define sve_st1dq_be_host sve_st1dd_be_host +#define sve_st1dq_le_host sve_st1dd_le_host +#define sve_st1dq_be_tlb sve_st1dd_be_tlb +#define sve_st1dq_le_tlb sve_st1dd_le_tlb + #undef DO_LD_TLB #undef DO_ST_TLB #undef DO_LD_HOST @@ -123,6 +148,7 @@ DO_ST_PRIM_2(dd, H1_8, uint64_t, uint64_t, stq) #undef DO_ST_PRIM_1 #undef DO_LD_PRIM_2 #undef DO_ST_PRIM_2 +#undef DO_LD_PRIM_3 =20 /* * Resolve the guest virtual address to info->host and info->flags. diff --git a/target/arm/tcg/sve.decode b/target/arm/tcg/sve.decode index 70207718984..bf33bc305fc 100644 --- a/target/arm/tcg/sve.decode +++ b/target/arm/tcg/sve.decode @@ -1240,12 +1240,24 @@ LD1_zpiz 1000010 .. 01 ..... 1.. ... ..... .= .... \ =20 # SVE contiguous load (scalar plus scalar) LD_zprr 1010010 .... ..... 010 ... ..... ..... @rprr_load_dt nr= eg=3D0 +# LD1W (128-bit element) +LD_zprr 1010010 1000 rm:5 100 pg:3 rn:5 rd:5 \ + &rprr_load dtype=3D16 nreg=3D0 +# LD1D (128-bit element) +LD_zprr 1010010 1100 rm:5 100 pg:3 rn:5 rd:5 \ + &rprr_load dtype=3D17 nreg=3D0 =20 # SVE contiguous first-fault load (scalar plus scalar) LDFF1_zprr 1010010 .... ..... 011 ... ..... ..... @rprr_load_dt nr= eg=3D0 =20 # SVE contiguous load (scalar plus immediate) LD_zpri 1010010 .... 0.... 101 ... ..... ..... @rpri_load_dt nr= eg=3D0 +# LD1W (128-bit element) +LD_zpri 1010010 1000 1 imm:s4 001 pg:3 rn:5 rd:5 \ + &rpri_load dtype=3D16 nreg=3D0 +# LD1D (128-bit element) +LD_zpri 1010010 1100 1 imm:s4 001 pg:3 rn:5 rd:5 \ + &rpri_load dtype=3D17 nreg=3D0 =20 # SVE contiguous non-fault load (scalar plus immediate) LDNF1_zpri 1010010 .... 1.... 101 ... ..... ..... @rpri_load_dt nr= eg=3D0 @@ -1344,6 +1356,10 @@ ST_zpri 1110010 10 11 0.... 111 ... ....= . ..... \ @rpri_store msz=3D2 esz=3D3 nreg=3D0 ST_zpri 1110010 11 11 0.... 111 ... ..... ..... \ @rpri_store msz=3D3 esz=3D3 nreg=3D0 +ST_zpri 1110010 10 00 0.... 111 ... ..... ..... \ + @rpri_store msz=3D2 esz=3D4 nreg=3D0 +ST_zpri 1110010 11 10 0.... 111 ... ..... ..... \ + @rpri_store msz=3D3 esz=3D4 nreg=3D0 =20 # SVE contiguous store (scalar plus scalar) # ST1B, ST1H, ST1W, ST1D; require msz <=3D esz @@ -1358,6 +1374,10 @@ ST_zprr 1110010 10 11 ..... 010 ... ....= . ..... \ @rprr_store msz=3D2 esz=3D3 nreg=3D0 ST_zprr 1110010 11 11 ..... 010 ... ..... ..... \ @rprr_store msz=3D3 esz=3D3 nreg=3D0 +ST_zprr 1110010 10 00 ..... 010 ... ..... ..... \ + @rprr_store msz=3D2 esz=3D4 nreg=3D0 +ST_zprr 1110010 11 10 ..... 010 ... ..... ..... \ + @rprr_store msz=3D3 esz=3D4 nreg=3D0 =20 # SVE contiguous non-temporal store (scalar plus immediate) (nreg =3D=3D = 0) # SVE store multiple structures (scalar plus immediate) (nreg !=3D 0) diff --git a/target/arm/tcg/sve_helper.c b/target/arm/tcg/sve_helper.c index e6342990fa8..91cd5970ee7 100644 --- a/target/arm/tcg/sve_helper.c +++ b/target/arm/tcg/sve_helper.c @@ -6359,6 +6359,9 @@ DO_LD1_2(ld1sds, MO_64, MO_32) =20 DO_LD1_2(ld1dd, MO_64, MO_64) =20 +DO_LD1_2(ld1squ, MO_32, MO_128) +DO_LD1_2(ld1dqu, MO_64, MO_128) + #undef DO_LD1_1 #undef DO_LD1_2 =20 @@ -6981,6 +6984,9 @@ DO_STN_2(2, dd, MO_64, MO_64) DO_STN_2(3, dd, MO_64, MO_64) DO_STN_2(4, dd, MO_64, MO_64) =20 +DO_STN_2(1, sq, MO_128, MO_32) +DO_STN_2(1, dq, MO_128, MO_64) + #undef DO_STN_1 #undef DO_STN_2 =20 diff --git a/target/arm/tcg/translate-sve.c b/target/arm/tcg/translate-sve.c index dfb53e4bf40..8e945c5d2d5 100644 --- a/target/arm/tcg/translate-sve.c +++ b/target/arm/tcg/translate-sve.c @@ -4817,21 +4817,25 @@ static bool trans_STR_pri(DisasContext *s, arg_rri = *a) */ =20 /* The memory mode of the dtype. */ -static const MemOp dtype_mop[16] =3D { +static const MemOp dtype_mop[19] =3D { MO_UB, MO_UB, MO_UB, MO_UB, MO_SL, MO_UW, MO_UW, MO_UW, MO_SW, MO_SW, MO_UL, MO_UL, - MO_SB, MO_SB, MO_SB, MO_UQ + MO_SB, MO_SB, MO_SB, MO_UQ, + /* Artificial values used by decode */ + MO_UL, MO_UQ, MO_128, }; =20 #define dtype_msz(x) (dtype_mop[x] & MO_SIZE) =20 /* The vector element size of dtype. */ -static const uint8_t dtype_esz[16] =3D { +static const uint8_t dtype_esz[19] =3D { 0, 1, 2, 3, 3, 1, 2, 3, 3, 2, 2, 3, - 3, 2, 1, 3 + 3, 2, 1, 3, + /* Artificial values used by decode */ + 4, 4, 4, }; =20 uint32_t make_svemte_desc(DisasContext *s, unsigned vsz, uint32_t nregs, @@ -4882,7 +4886,7 @@ static void do_mem_zpa(DisasContext *s, int zt, int p= g, TCGv_i64 addr, } =20 /* Indexed by [mte][be][dtype][nreg] */ -static gen_helper_gvec_mem * const ldr_fns[2][2][16][4] =3D { +static gen_helper_gvec_mem * const ldr_fns[2][2][18][4] =3D { { /* mte inactive, little-endian */ { { gen_helper_sve_ld1bb_r, gen_helper_sve_ld2bb_r, gen_helper_sve_ld3bb_r, gen_helper_sve_ld4bb_r }, @@ -4906,7 +4910,11 @@ static gen_helper_gvec_mem * const ldr_fns[2][2][16]= [4] =3D { { gen_helper_sve_ld1bss_r, NULL, NULL, NULL }, { gen_helper_sve_ld1bhs_r, NULL, NULL, NULL }, { gen_helper_sve_ld1dd_le_r, gen_helper_sve_ld2dd_le_r, - gen_helper_sve_ld3dd_le_r, gen_helper_sve_ld4dd_le_r } }, + gen_helper_sve_ld3dd_le_r, gen_helper_sve_ld4dd_le_r }, + + { gen_helper_sve_ld1squ_le_r, NULL, NULL, NULL }, + { gen_helper_sve_ld1dqu_le_r, NULL, NULL, NULL }, + }, =20 /* mte inactive, big-endian */ { { gen_helper_sve_ld1bb_r, gen_helper_sve_ld2bb_r, @@ -4931,7 +4939,12 @@ static gen_helper_gvec_mem * const ldr_fns[2][2][16]= [4] =3D { { gen_helper_sve_ld1bss_r, NULL, NULL, NULL }, { gen_helper_sve_ld1bhs_r, NULL, NULL, NULL }, { gen_helper_sve_ld1dd_be_r, gen_helper_sve_ld2dd_be_r, - gen_helper_sve_ld3dd_be_r, gen_helper_sve_ld4dd_be_r } } }, + gen_helper_sve_ld3dd_be_r, gen_helper_sve_ld4dd_be_r }, + + { gen_helper_sve_ld1squ_be_r, NULL, NULL, NULL }, + { gen_helper_sve_ld1dqu_be_r, NULL, NULL, NULL }, + }, + }, =20 { /* mte active, little-endian */ { { gen_helper_sve_ld1bb_r_mte, @@ -4964,7 +4977,11 @@ static gen_helper_gvec_mem * const ldr_fns[2][2][16]= [4] =3D { { gen_helper_sve_ld1dd_le_r_mte, gen_helper_sve_ld2dd_le_r_mte, gen_helper_sve_ld3dd_le_r_mte, - gen_helper_sve_ld4dd_le_r_mte } }, + gen_helper_sve_ld4dd_le_r_mte }, + + { gen_helper_sve_ld1squ_le_r_mte, NULL, NULL, NULL }, + { gen_helper_sve_ld1dqu_le_r_mte, NULL, NULL, NULL }, + }, =20 /* mte active, big-endian */ { { gen_helper_sve_ld1bb_r_mte, @@ -4997,7 +5014,12 @@ static gen_helper_gvec_mem * const ldr_fns[2][2][16]= [4] =3D { { gen_helper_sve_ld1dd_be_r_mte, gen_helper_sve_ld2dd_be_r_mte, gen_helper_sve_ld3dd_be_r_mte, - gen_helper_sve_ld4dd_be_r_mte } } }, + gen_helper_sve_ld4dd_be_r_mte }, + + { gen_helper_sve_ld1squ_be_r_mte, NULL, NULL, NULL }, + { gen_helper_sve_ld1dqu_be_r_mte, NULL, NULL, NULL }, + }, + }, }; =20 static void do_ld_zpa(DisasContext *s, int zt, int pg, @@ -5016,9 +5038,22 @@ static void do_ld_zpa(DisasContext *s, int zt, int p= g, =20 static bool trans_LD_zprr(DisasContext *s, arg_rprr_load *a) { - if (a->rm =3D=3D 31 || !dc_isar_feature(aa64_sve, s)) { + if (a->rm =3D=3D 31) { return false; } + + /* dtypes 16 and 17 are artificial, representing 128-bit element */ + if (a->dtype < 16) { + if (!dc_isar_feature(aa64_sve, s)) { + return false; + } + } else { + if (!dc_isar_feature(aa64_sve2p1, s)) { + return false; + } + s->is_nonstreaming =3D true; + } + if (sve_access_check(s)) { TCGv_i64 addr =3D tcg_temp_new_i64(); tcg_gen_shli_i64(addr, cpu_reg(s, a->rm), dtype_msz(a->dtype)); @@ -5030,9 +5065,18 @@ static bool trans_LD_zprr(DisasContext *s, arg_rprr_= load *a) =20 static bool trans_LD_zpri(DisasContext *s, arg_rpri_load *a) { - if (!dc_isar_feature(aa64_sve, s)) { - return false; + /* dtypes 16 and 17 are artificial, representing 128-bit element */ + if (a->dtype < 16) { + if (!dc_isar_feature(aa64_sve, s)) { + return false; + } + } else { + if (!dc_isar_feature(aa64_sve2p1, s)) { + return false; + } + s->is_nonstreaming =3D true; } + if (sve_access_check(s)) { int vsz =3D vec_full_reg_size(s); int elements =3D vsz >> dtype_esz[a->dtype]; @@ -5479,7 +5523,7 @@ static bool trans_LD1R_zpri(DisasContext *s, arg_rpri= _load *a) static void do_st_zpa(DisasContext *s, int zt, int pg, TCGv_i64 addr, int msz, int esz, int nreg) { - static gen_helper_gvec_mem * const fn_single[2][2][4][4] =3D { + static gen_helper_gvec_mem * const fn_single[2][2][4][5] =3D { { { { gen_helper_sve_st1bb_r, gen_helper_sve_st1bh_r, gen_helper_sve_st1bs_r, @@ -5490,9 +5534,11 @@ static void do_st_zpa(DisasContext *s, int zt, int p= g, TCGv_i64 addr, gen_helper_sve_st1hd_le_r }, { NULL, NULL, gen_helper_sve_st1ss_le_r, - gen_helper_sve_st1sd_le_r }, + gen_helper_sve_st1sd_le_r, + gen_helper_sve_st1sq_le_r, }, { NULL, NULL, NULL, - gen_helper_sve_st1dd_le_r } }, + gen_helper_sve_st1dd_le_r, + gen_helper_sve_st1dq_le_r, } }, { { gen_helper_sve_st1bb_r, gen_helper_sve_st1bh_r, gen_helper_sve_st1bs_r, @@ -5503,9 +5549,11 @@ static void do_st_zpa(DisasContext *s, int zt, int p= g, TCGv_i64 addr, gen_helper_sve_st1hd_be_r }, { NULL, NULL, gen_helper_sve_st1ss_be_r, - gen_helper_sve_st1sd_be_r }, + gen_helper_sve_st1sd_be_r, + gen_helper_sve_st1sq_be_r }, { NULL, NULL, NULL, - gen_helper_sve_st1dd_be_r } } }, + gen_helper_sve_st1dd_be_r, + gen_helper_sve_st1dq_be_r } } }, =20 { { { gen_helper_sve_st1bb_r_mte, gen_helper_sve_st1bh_r_mte, @@ -5517,9 +5565,11 @@ static void do_st_zpa(DisasContext *s, int zt, int p= g, TCGv_i64 addr, gen_helper_sve_st1hd_le_r_mte }, { NULL, NULL, gen_helper_sve_st1ss_le_r_mte, - gen_helper_sve_st1sd_le_r_mte }, + gen_helper_sve_st1sd_le_r_mte, + gen_helper_sve_st1sq_le_r_mte }, { NULL, NULL, NULL, - gen_helper_sve_st1dd_le_r_mte } }, + gen_helper_sve_st1dd_le_r_mte, + gen_helper_sve_st1dq_le_r_mte } }, { { gen_helper_sve_st1bb_r_mte, gen_helper_sve_st1bh_r_mte, gen_helper_sve_st1bs_r_mte, @@ -5530,9 +5580,11 @@ static void do_st_zpa(DisasContext *s, int zt, int p= g, TCGv_i64 addr, gen_helper_sve_st1hd_be_r_mte }, { NULL, NULL, gen_helper_sve_st1ss_be_r_mte, - gen_helper_sve_st1sd_be_r_mte }, + gen_helper_sve_st1sd_be_r_mte, + gen_helper_sve_st1sq_be_r_mte }, { NULL, NULL, NULL, - gen_helper_sve_st1dd_be_r_mte } } }, + gen_helper_sve_st1dd_be_r_mte, + gen_helper_sve_st1dq_be_r_mte } } }, }; static gen_helper_gvec_mem * const fn_multiple[2][2][3][4] =3D { { { { gen_helper_sve_st2bb_r, @@ -5601,12 +5653,27 @@ static void do_st_zpa(DisasContext *s, int zt, int = pg, TCGv_i64 addr, =20 static bool trans_ST_zprr(DisasContext *s, arg_rprr_store *a) { - if (!dc_isar_feature(aa64_sve, s)) { - return false; - } if (a->rm =3D=3D 31 || a->msz > a->esz) { return false; } + switch (a->esz) { + case MO_8 ... MO_64: + if (!dc_isar_feature(aa64_sve, s)) { + return false; + } + break; + case MO_128: + assert(a->msz < a->esz); + assert(a->nreg =3D=3D 0); + if (!dc_isar_feature(aa64_sve2p1, s)) { + return false; + } + s->is_nonstreaming =3D true; + break; + default: + g_assert_not_reached(); + } + if (sve_access_check(s)) { TCGv_i64 addr =3D tcg_temp_new_i64(); tcg_gen_shli_i64(addr, cpu_reg(s, a->rm), a->msz); @@ -5618,12 +5685,27 @@ static bool trans_ST_zprr(DisasContext *s, arg_rprr= _store *a) =20 static bool trans_ST_zpri(DisasContext *s, arg_rpri_store *a) { - if (!dc_isar_feature(aa64_sve, s)) { - return false; - } if (a->msz > a->esz) { return false; } + switch (a->esz) { + case MO_8 ... MO_64: + if (!dc_isar_feature(aa64_sve, s)) { + return false; + } + break; + case MO_128: + assert(a->msz < a->esz); + assert(a->nreg =3D=3D 0); + if (!dc_isar_feature(aa64_sve2p1, s)) { + return false; + } + s->is_nonstreaming =3D true; + break; + default: + g_assert_not_reached(); + } + if (sve_access_check(s)) { int vsz =3D vec_full_reg_size(s); int elements =3D vsz >> a->esz; --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647197; cv=none; d=zohomail.com; s=zohoarc; b=Sf4atdubg7OX0Bheik9jt9W8tzGZxOHaelPivGKHohgSpj6Ukxwt6veyIOfEyEmLB2tP5c0LRzECC78BMUstLnjQSQiBBoUcp7sIU7lBwB9zsrG+hd+rd/Fd1nx2wa3w0kzt804223MRu9ApCloF30cqwYMyYHDmBnU/0YZxBX4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647197; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=q638xM7x9lLv6t8aWS5h2DnITOOQdyI00w41MrG7A2Q=; b=J30NcXgtnBrKT0LlHWiC9uYZmi6EwOxWuwce2wc977m/er1EqIZo7BDxu5vAW3JODKEUW/qHK8NDnlkrYrsekdyf9fuiD6oNt9DWypTVHqUf0NCWtPEd/oSNN54/kxQo5++/u7M362pi56yGzjfeJzR0qvvqJnS2dXFsxmC4Pbk= 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 1751647197253794.2278978647756; Fri, 4 Jul 2025 09:39:57 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjGu-0000Pv-7F; Fri, 04 Jul 2025 12:28:20 -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 1uXjFR-0004WG-6p for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:49 -0400 Received: from mail-wr1-x435.google.com ([2a00:1450:4864:20::435]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjFO-0006wO-BU for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:48 -0400 Received: by mail-wr1-x435.google.com with SMTP id ffacd0b85a97d-3a6e2d85705so481719f8f.0 for ; Fri, 04 Jul 2025 09:26:45 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.26.44 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:26:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646405; x=1752251205; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=q638xM7x9lLv6t8aWS5h2DnITOOQdyI00w41MrG7A2Q=; b=R8H/lCIm+pa4bQa9vNHgXP7OIjAVmqiBGvABfYbbKBNQHWyWbaNABFOnrCCiVk9XNd 39H/BI9ApL7TZLTvoLp3dfYC9VolpJI1H1uE5qL6ahVOGStBTorjYXEK6aKk7M5gBBA7 wtpQolO0XMBreDX0ZdqLga7q5UXK721o55oxKBF/Phm2rZY8/FtRhq+MWD1EF5spVK4C bX7xeM1hWheuKq3LnRBPgU9TfvVHMks4I02TmPH6ziNbnMzRWJm5clvu+U48fyTHz020 rZ8ZKHVKP7JU+zT0r40zDVSpSHF3VJSqn0qumy7yUe3FR9u2sjLEuijvxTymhf7bOD8O NXgw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646405; x=1752251205; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=q638xM7x9lLv6t8aWS5h2DnITOOQdyI00w41MrG7A2Q=; b=NfV/hm2gDxuh52jASL8SVY+1f4d6GpBXZNyTeJ8ZaF6UIcPZeMeOkFp0vq2O555aTy kk5ocS/q9o7zLfn3WMRKdFBFqP/jCAVYSctjZiGKeReH/D0G76FCMI676z8bqY+9Z1Q/ JhX1Aj2FLr6Aw6N3ADi/COd1FkM1GQTwfEY4ClDzo3W8dr8zIHkg3BpZ3ie6+gom616l IT+MSOAMa+karMo6COAaCRQ8eTAtnqqDWuz2E7EqM1MhnQyzhFoi7w07EMbuW1DxsP6n 9DAVEJCi3cLaiZ3pD/Nby8z861AzDYGHoTqe0qv79D/7g2G4BtayiFZH6z73IcGnSsGr JWSA== X-Gm-Message-State: AOJu0Ywad6Y7QUtgVvnnmB7baBy/hjWCYP5KYIe31RecvtY89Gpy0v83 2avxcAuxq9Q5A4hBHhwwBVauWc0q0niLsSEAuAs4bVD1/Tpdytr/P8XG5Szr6dOQfPQcwoPVJ1A XopQ0 X-Gm-Gg: ASbGncuTz/FPPSCIiH28M7/Y4/4w3/R+9oSyrUEK7ngUcW595IeRtrMEEgJajbVNqf6 mnI2szfqLyifuiYvJbkQ07/bqDRGp+1sd//28e66+/OxxX5VHGQj/FNvI63DOjYv1OGy3GGpiyz immKYHTJkQ19RJ+XT+ZQ15DoCw880gmVLyukvsF0xF1JKcR1o0o2KdWdDAqdcQUriU9EMZs6oHp VgzLZehHhUuTjGMRSN8WTlA4xaEjkJZvbPFqBTwT0zZ7EuLykGJBq5dXoXrkvzF10pDAld5HsFc xSZIWDLepWT6ouJiUn1YOzgt3+obf5pnogSZXftFgc0wrbBOfgbl2tOjeFjkRKafYElcUspWCEn T5O8= X-Google-Smtp-Source: AGHT+IEJwi+u9hIx8yNeZ6Xd+K0ln9Fyu6AigVwTFN4WjIJ+RfLmVdq6rPh+QDuw8pd3LsfcosiACw== X-Received: by 2002:a05:6000:2307:b0:3a5:26eb:b4af with SMTP id ffacd0b85a97d-3b4964f1f58mr2494339f8f.18.1751646404809; Fri, 04 Jul 2025 09:26:44 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 108/119] target/arm: Move ld1qq and st1qq primitives to sve_ldst_internal.h Date: Fri, 4 Jul 2025 17:24:48 +0100 Message-ID: <20250704162501.249138-109-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::435; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x435.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751647198335116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Move from sme_helper.c to the shared header. Add a comment noting the lack of atomicity. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-97-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/sve_ldst_internal.h | 63 ++++++++++++++++++++++++++++++ target/arm/tcg/sme_helper.c | 44 +++------------------ 2 files changed, 69 insertions(+), 38 deletions(-) diff --git a/target/arm/tcg/sve_ldst_internal.h b/target/arm/tcg/sve_ldst_i= nternal.h index e87beba4357..c67cda9d3b5 100644 --- a/target/arm/tcg/sve_ldst_internal.h +++ b/target/arm/tcg/sve_ldst_internal.h @@ -141,6 +141,69 @@ DO_LD_PRIM_3(ld1dqu_le, ld1dd_le) #define sve_st1dq_be_tlb sve_st1dd_be_tlb #define sve_st1dq_le_tlb sve_st1dd_le_tlb =20 +/* + * The ARMVectorReg elements are stored in host-endian 64-bit units. + * For 128-bit quantities, the sequence defined by the Elem[] pseudocode + * corresponds to storing the two 64-bit pieces in little-endian order. + */ +/* FIXME: Nothing in this file makes any effort at atomicity. */ + +static inline void sve_ld1qq_be_host(void *vd, intptr_t reg_off, void *hos= t) +{ + sve_ld1dd_be_host(vd, reg_off + 8, host); + sve_ld1dd_be_host(vd, reg_off, host + 8); +} + +static inline void sve_ld1qq_le_host(void *vd, intptr_t reg_off, void *hos= t) +{ + sve_ld1dd_le_host(vd, reg_off, host); + sve_ld1dd_le_host(vd, reg_off + 8, host + 8); +} + +static inline void +sve_ld1qq_be_tlb(CPUARMState *env, void *vd, intptr_t reg_off, + target_ulong addr, uintptr_t ra) +{ + sve_ld1dd_be_tlb(env, vd, reg_off + 8, addr, ra); + sve_ld1dd_be_tlb(env, vd, reg_off, addr + 8, ra); +} + +static inline void +sve_ld1qq_le_tlb(CPUARMState *env, void *vd, intptr_t reg_off, + target_ulong addr, uintptr_t ra) +{ + sve_ld1dd_le_tlb(env, vd, reg_off, addr, ra); + sve_ld1dd_le_tlb(env, vd, reg_off + 8, addr + 8, ra); +} + +static inline void sve_st1qq_be_host(void *vd, intptr_t reg_off, void *hos= t) +{ + sve_st1dd_be_host(vd, reg_off + 8, host); + sve_st1dd_be_host(vd, reg_off, host + 8); +} + +static inline void sve_st1qq_le_host(void *vd, intptr_t reg_off, void *hos= t) +{ + sve_st1dd_le_host(vd, reg_off, host); + sve_st1dd_le_host(vd, reg_off + 8, host + 8); +} + +static inline void +sve_st1qq_be_tlb(CPUARMState *env, void *vd, intptr_t reg_off, + target_ulong addr, uintptr_t ra) +{ + sve_st1dd_be_tlb(env, vd, reg_off + 8, addr, ra); + sve_st1dd_be_tlb(env, vd, reg_off, addr + 8, ra); +} + +static inline void +sve_st1qq_le_tlb(CPUARMState *env, void *vd, intptr_t reg_off, + target_ulong addr, uintptr_t ra) +{ + sve_st1dd_le_tlb(env, vd, reg_off, addr, ra); + sve_st1dd_le_tlb(env, vd, reg_off + 8, addr + 8, ra); +} + #undef DO_LD_TLB #undef DO_ST_TLB #undef DO_LD_HOST diff --git a/target/arm/tcg/sme_helper.c b/target/arm/tcg/sme_helper.c index c1166e4ffa9..df16bb2f9c4 100644 --- a/target/arm/tcg/sme_helper.c +++ b/target/arm/tcg/sme_helper.c @@ -415,54 +415,22 @@ static inline void sme_##NAME##_v_tlb(CPUARMState *en= v, void *za, \ TLB(env, useronly_clean_ptr(addr), val, ra); = \ } =20 -/* - * The ARMVectorReg elements are stored in host-endian 64-bit units. - * For 128-bit quantities, the sequence defined by the Elem[] pseudocode - * corresponds to storing the two 64-bit pieces in little-endian order. - */ -#define DO_LDQ(HNAME, VNAME, BE, HOST, TLB) = \ -static inline void HNAME##_host(void *za, intptr_t off, void *host) = \ -{ = \ - uint64_t val0 =3D HOST(host), val1 =3D HOST(host + 8); = \ - uint64_t *ptr =3D za + off; = \ - ptr[0] =3D BE ? val1 : val0, ptr[1] =3D BE ? val0 : val1; = \ -} = \ +#define DO_LDQ(HNAME, VNAME) \ static inline void VNAME##_v_host(void *za, intptr_t off, void *host) = \ { = \ HNAME##_host(za, tile_vslice_offset(off), host); = \ } = \ -static inline void HNAME##_tlb(CPUARMState *env, void *za, intptr_t off, = \ - target_ulong addr, uintptr_t ra) = \ -{ = \ - uint64_t val0 =3D TLB(env, useronly_clean_ptr(addr), ra); = \ - uint64_t val1 =3D TLB(env, useronly_clean_ptr(addr + 8), ra); = \ - uint64_t *ptr =3D za + off; = \ - ptr[0] =3D BE ? val1 : val0, ptr[1] =3D BE ? val0 : val1; = \ -} = \ static inline void VNAME##_v_tlb(CPUARMState *env, void *za, intptr_t off,= \ target_ulong addr, uintptr_t ra) = \ { = \ HNAME##_tlb(env, za, tile_vslice_offset(off), addr, ra); = \ } =20 -#define DO_STQ(HNAME, VNAME, BE, HOST, TLB) = \ -static inline void HNAME##_host(void *za, intptr_t off, void *host) = \ -{ = \ - uint64_t *ptr =3D za + off; = \ - HOST(host, ptr[BE]); = \ - HOST(host + 8, ptr[!BE]); = \ -} = \ +#define DO_STQ(HNAME, VNAME) \ static inline void VNAME##_v_host(void *za, intptr_t off, void *host) = \ { = \ HNAME##_host(za, tile_vslice_offset(off), host); = \ } = \ -static inline void HNAME##_tlb(CPUARMState *env, void *za, intptr_t off, = \ - target_ulong addr, uintptr_t ra) = \ -{ = \ - uint64_t *ptr =3D za + off; = \ - TLB(env, useronly_clean_ptr(addr), ptr[BE], ra); = \ - TLB(env, useronly_clean_ptr(addr + 8), ptr[!BE], ra); = \ -} = \ static inline void VNAME##_v_tlb(CPUARMState *env, void *za, intptr_t off,= \ target_ulong addr, uintptr_t ra) = \ { = \ @@ -477,8 +445,8 @@ DO_LD(ld1s_le, uint32_t, ldl_le_p, cpu_ldl_le_data_ra) DO_LD(ld1d_be, uint64_t, ldq_be_p, cpu_ldq_be_data_ra) DO_LD(ld1d_le, uint64_t, ldq_le_p, cpu_ldq_le_data_ra) =20 -DO_LDQ(sve_ld1qq_be, sme_ld1q_be, 1, ldq_be_p, cpu_ldq_be_data_ra) -DO_LDQ(sve_ld1qq_le, sme_ld1q_le, 0, ldq_le_p, cpu_ldq_le_data_ra) +DO_LDQ(sve_ld1qq_be, sme_ld1q_be) +DO_LDQ(sve_ld1qq_le, sme_ld1q_le) =20 DO_ST(st1b, uint8_t, stb_p, cpu_stb_data_ra) DO_ST(st1h_be, uint16_t, stw_be_p, cpu_stw_be_data_ra) @@ -488,8 +456,8 @@ DO_ST(st1s_le, uint32_t, stl_le_p, cpu_stl_le_data_ra) DO_ST(st1d_be, uint64_t, stq_be_p, cpu_stq_be_data_ra) DO_ST(st1d_le, uint64_t, stq_le_p, cpu_stq_le_data_ra) =20 -DO_STQ(sve_st1qq_be, sme_st1q_be, 1, stq_be_p, cpu_stq_be_data_ra) -DO_STQ(sve_st1qq_le, sme_st1q_le, 0, stq_le_p, cpu_stq_le_data_ra) +DO_STQ(sve_st1qq_be, sme_st1q_be) +DO_STQ(sve_st1qq_le, sme_st1q_le) =20 #undef DO_LD #undef DO_ST --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647255; cv=none; d=zohomail.com; s=zohoarc; b=cpyXvhCmT+v4VR9vTMBwvE2HuKWkSkrURT5Ap7hz5AHbKBnpHZOn+O08KViw4U8Qm4bCqQJ5rZbTPPwRznP9jfzyKFeZweMmOQ/aKkJhwl62HppUgjBvpdhX5KBvpPYlRF/9UusQX9HMrjQNGiUulnmQhcNtEFw91lKrmrUhYKY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647255; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=l7HJ4TcqL/d17fEztG42nfKw9T/BnHqVTJQcAjSOBIk=; b=mml4pZv79l7/7Kw292AyLif4MAeELHz8tvv2nYoocNYpvvxdzOL9trp3zexXv+ROaVFqhfIfTTNbnBjtDg0TcVNgr0s/0Tpd12pUWU9zEepDAyBQlD/t/iUVphvq0crI+KTQVs0L3EPja7uV28zOQu6VSiGQbSnKl9J1JDsHXyo= 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 175164725522632.01830549037652; Fri, 4 Jul 2025 09:40:55 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjGw-0000kC-F5; Fri, 04 Jul 2025 12:28:22 -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 1uXjFT-0004qF-CZ for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:51 -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 1uXjFP-0006wi-Sh for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:51 -0400 Received: by mail-wm1-x32c.google.com with SMTP id 5b1f17b1804b1-4538bc1cffdso9185305e9.0 for ; Fri, 04 Jul 2025 09:26:46 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.26.44 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:26:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646406; x=1752251206; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=l7HJ4TcqL/d17fEztG42nfKw9T/BnHqVTJQcAjSOBIk=; b=iQiAlQFyjVn35hCBLIPLJjRW5ms8ii2cv9PwRQl6VWINXwLNHv4c8AMZMMqnLL05Dq tkqQ+21uHzwI7nt1mh6Hp6OU27R7Ash/HN8MOrkOfhtKaWDG6F2fayPsQIse+KRjhnle k5vZd4AXJB0oZnhMaiAQ0L1cvIouVeea9AQJ0j5yJa9hSureZ4CE3ubkYekTs7V3duux V7n9R/FelFPl8rfzwpQb3e8Mr7TJhdQq5HH/4LL4USdXGZValVTeypzd93dBmTC0eERZ Z69KixdezxIt7vBnqsib9Bz4tlNQuFecpm3lpjkIWG7kSChT0dWZqJ4X43ByKt+xgmB/ QZ0Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646406; x=1752251206; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=l7HJ4TcqL/d17fEztG42nfKw9T/BnHqVTJQcAjSOBIk=; b=vG5aJhRFpuzm97ITRhwjJ5hQZdQBQudxk2FMN7YxWf6RALkz7IPjlk+2/dvfuUmdJb smE51FSCFsIwGgMl/d/SVYnZ2TfKTwgBEOUWnV4K4JDcKkKePEllEbs+gCISa27yNrva 9MKVh5DBHyInRZvvBS+y6D/T14axH8Eyk+pCqSXBIulMkZub22u5JOaNsdjLD/nfdtTP V8ahCmDRM13w/GhD3RBU6P8Zu0XDywed0wShvs4N0kcLLjiIT5n7EK1NX1d0QyIgmaGn C9pfQRJjUDXtScnYum6lTl/ywAavzaW4/zB7b1HGhDSFY6/Wu1bKD5eyI1+NODtQ129Z LeZg== X-Gm-Message-State: AOJu0Yw8EbF9XxqVnHNkGNRJZrhgn1rzSRt/wvjfMETNiSVoTZGI/MIh jLYnK7TB5Q4J5ruGEKC3DrDS5DElns6Gnfx+GEz3ewl5VFmWnVMUP2I88X1dfFW/QMnyvkhP966 JjnZU X-Gm-Gg: ASbGncvRyWeYwGeD7UcpBAz/9dr1KFBUZ/MMxStcygwRbCoVdQlefClzX6YYHhmso/D 48TaAkOVtF4k6qRInt6Orq4nCbJgqdsDMmiVqwh4qaferuzNzMXDrUhXRwaIz54DQUvhGJfLo/P 8LYOx/L2B0yMvfOiBi6t8LWy0eoipswnPFIx2BaI77nukPJoDHfw2VTGsGy/ZRWMuY/r1HkdKfb n6ne0OoZKApXz7JPIy4s1EgV1IY1LgKMVDKLSuzQPVS6N3jdeLy0PM/2ZWU6ynHjqR2HA7cUHOV qmL3q0CYWESs5TKBAi8+w/QMRPHeB5G6WrG7NR46fLutHO06j1w0XyQjZ6muM6PysQvVAxoEwRC XUkw= X-Google-Smtp-Source: AGHT+IGt1J+Zr1jT/7b509StQCUKpXDRSD5OTktS05espCZt/QiprAc0ddoIp///VJy+dyJrBKbz7Q== X-Received: by 2002:a05:6000:701:b0:3a4:fea6:d49f with SMTP id ffacd0b85a97d-3b49702ed92mr2346912f8f.49.1751646405764; Fri, 04 Jul 2025 09:26:45 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 109/119] target/arm: Implement {LD, ST}[234]Q for SME2p1/SVE2p1 Date: Fri, 4 Jul 2025 17:24:49 +0100 Message-ID: <20250704162501.249138-110-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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=peter.maydell@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 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: 1751647257007116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-98-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/helper-sve.h | 32 +++++++++ target/arm/tcg/sve.decode | 31 +++++++++ target/arm/tcg/sve_helper.c | 8 +++ target/arm/tcg/translate-sve.c | 116 ++++++++++++++++++++++++--------- 4 files changed, 156 insertions(+), 31 deletions(-) diff --git a/target/arm/tcg/helper-sve.h b/target/arm/tcg/helper-sve.h index 1999c4bb1fa..ade76ff664d 100644 --- a/target/arm/tcg/helper-sve.h +++ b/target/arm/tcg/helper-sve.h @@ -1658,6 +1658,14 @@ DEF_HELPER_FLAGS_4(sve_ld2dd_be_r, TCG_CALL_NO_WG, v= oid, env, ptr, tl, i32) DEF_HELPER_FLAGS_4(sve_ld3dd_be_r, TCG_CALL_NO_WG, void, env, ptr, tl, i32) DEF_HELPER_FLAGS_4(sve_ld4dd_be_r, TCG_CALL_NO_WG, void, env, ptr, tl, i32) =20 +DEF_HELPER_FLAGS_4(sve_ld2qq_le_r, TCG_CALL_NO_WG, void, env, ptr, tl, i32) +DEF_HELPER_FLAGS_4(sve_ld3qq_le_r, TCG_CALL_NO_WG, void, env, ptr, tl, i32) +DEF_HELPER_FLAGS_4(sve_ld4qq_le_r, TCG_CALL_NO_WG, void, env, ptr, tl, i32) + +DEF_HELPER_FLAGS_4(sve_ld2qq_be_r, TCG_CALL_NO_WG, void, env, ptr, tl, i32) +DEF_HELPER_FLAGS_4(sve_ld3qq_be_r, TCG_CALL_NO_WG, void, env, ptr, tl, i32) +DEF_HELPER_FLAGS_4(sve_ld4qq_be_r, TCG_CALL_NO_WG, void, env, ptr, tl, i32) + DEF_HELPER_FLAGS_4(sve_ld1bhu_r, TCG_CALL_NO_WG, void, env, ptr, tl, i32) DEF_HELPER_FLAGS_4(sve_ld1bsu_r, TCG_CALL_NO_WG, void, env, ptr, tl, i32) DEF_HELPER_FLAGS_4(sve_ld1bdu_r, TCG_CALL_NO_WG, void, env, ptr, tl, i32) @@ -1722,6 +1730,14 @@ DEF_HELPER_FLAGS_4(sve_ld2dd_be_r_mte, TCG_CALL_NO_W= G, void, env, ptr, tl, i32) DEF_HELPER_FLAGS_4(sve_ld3dd_be_r_mte, TCG_CALL_NO_WG, void, env, ptr, tl,= i32) DEF_HELPER_FLAGS_4(sve_ld4dd_be_r_mte, TCG_CALL_NO_WG, void, env, ptr, tl,= i32) =20 +DEF_HELPER_FLAGS_4(sve_ld2qq_le_r_mte, TCG_CALL_NO_WG, void, env, ptr, tl,= i32) +DEF_HELPER_FLAGS_4(sve_ld3qq_le_r_mte, TCG_CALL_NO_WG, void, env, ptr, tl,= i32) +DEF_HELPER_FLAGS_4(sve_ld4qq_le_r_mte, TCG_CALL_NO_WG, void, env, ptr, tl,= i32) + +DEF_HELPER_FLAGS_4(sve_ld2qq_be_r_mte, TCG_CALL_NO_WG, void, env, ptr, tl,= i32) +DEF_HELPER_FLAGS_4(sve_ld3qq_be_r_mte, TCG_CALL_NO_WG, void, env, ptr, tl,= i32) +DEF_HELPER_FLAGS_4(sve_ld4qq_be_r_mte, TCG_CALL_NO_WG, void, env, ptr, tl,= i32) + DEF_HELPER_FLAGS_4(sve_ld1bhu_r_mte, TCG_CALL_NO_WG, void, env, ptr, tl, i= 32) DEF_HELPER_FLAGS_4(sve_ld1bsu_r_mte, TCG_CALL_NO_WG, void, env, ptr, tl, i= 32) DEF_HELPER_FLAGS_4(sve_ld1bdu_r_mte, TCG_CALL_NO_WG, void, env, ptr, tl, i= 32) @@ -1946,6 +1962,14 @@ DEF_HELPER_FLAGS_4(sve_st2dd_be_r, TCG_CALL_NO_WG, v= oid, env, ptr, tl, i32) DEF_HELPER_FLAGS_4(sve_st3dd_be_r, TCG_CALL_NO_WG, void, env, ptr, tl, i32) DEF_HELPER_FLAGS_4(sve_st4dd_be_r, TCG_CALL_NO_WG, void, env, ptr, tl, i32) =20 +DEF_HELPER_FLAGS_4(sve_st2qq_le_r, TCG_CALL_NO_WG, void, env, ptr, tl, i32) +DEF_HELPER_FLAGS_4(sve_st3qq_le_r, TCG_CALL_NO_WG, void, env, ptr, tl, i32) +DEF_HELPER_FLAGS_4(sve_st4qq_le_r, TCG_CALL_NO_WG, void, env, ptr, tl, i32) + +DEF_HELPER_FLAGS_4(sve_st2qq_be_r, TCG_CALL_NO_WG, void, env, ptr, tl, i32) +DEF_HELPER_FLAGS_4(sve_st3qq_be_r, TCG_CALL_NO_WG, void, env, ptr, tl, i32) +DEF_HELPER_FLAGS_4(sve_st4qq_be_r, TCG_CALL_NO_WG, void, env, ptr, tl, i32) + DEF_HELPER_FLAGS_4(sve_st1bh_r, TCG_CALL_NO_WG, void, env, ptr, tl, i32) DEF_HELPER_FLAGS_4(sve_st1bs_r, TCG_CALL_NO_WG, void, env, ptr, tl, i32) DEF_HELPER_FLAGS_4(sve_st1bd_r, TCG_CALL_NO_WG, void, env, ptr, tl, i32) @@ -1998,6 +2022,14 @@ DEF_HELPER_FLAGS_4(sve_st2dd_be_r_mte, TCG_CALL_NO_W= G, void, env, ptr, tl, i32) DEF_HELPER_FLAGS_4(sve_st3dd_be_r_mte, TCG_CALL_NO_WG, void, env, ptr, tl,= i32) DEF_HELPER_FLAGS_4(sve_st4dd_be_r_mte, TCG_CALL_NO_WG, void, env, ptr, tl,= i32) =20 +DEF_HELPER_FLAGS_4(sve_st2qq_le_r_mte, TCG_CALL_NO_WG, void, env, ptr, tl,= i32) +DEF_HELPER_FLAGS_4(sve_st3qq_le_r_mte, TCG_CALL_NO_WG, void, env, ptr, tl,= i32) +DEF_HELPER_FLAGS_4(sve_st4qq_le_r_mte, TCG_CALL_NO_WG, void, env, ptr, tl,= i32) + +DEF_HELPER_FLAGS_4(sve_st2qq_be_r_mte, TCG_CALL_NO_WG, void, env, ptr, tl,= i32) +DEF_HELPER_FLAGS_4(sve_st3qq_be_r_mte, TCG_CALL_NO_WG, void, env, ptr, tl,= i32) +DEF_HELPER_FLAGS_4(sve_st4qq_be_r_mte, TCG_CALL_NO_WG, void, env, ptr, tl,= i32) + DEF_HELPER_FLAGS_4(sve_st1bh_r_mte, TCG_CALL_NO_WG, void, env, ptr, tl, i3= 2) DEF_HELPER_FLAGS_4(sve_st1bs_r_mte, TCG_CALL_NO_WG, void, env, ptr, tl, i3= 2) DEF_HELPER_FLAGS_4(sve_st1bd_r_mte, TCG_CALL_NO_WG, void, env, ptr, tl, i3= 2) diff --git a/target/arm/tcg/sve.decode b/target/arm/tcg/sve.decode index bf33bc305fc..3eda029146d 100644 --- a/target/arm/tcg/sve.decode +++ b/target/arm/tcg/sve.decode @@ -229,6 +229,9 @@ @rprr_load_dt ....... dtype:4 rm:5 ... pg:3 rn:5 rd:5 &rprr_load @rpri_load_dt ....... dtype:4 . imm:s4 ... pg:3 rn:5 rd:5 &rpri_load =20 +@rprr_load ....... .... rm:5 ... pg:3 rn:5 rd:5 &rprr_load +@rpri_load ....... .... . imm:s4 ... pg:3 rn:5 rd:5 &rpri_load + @rprr_load_msz ....... .... rm:5 ... pg:3 rn:5 rd:5 \ &rprr_load dtype=3D%msz_dtype @rpri_load_msz ....... .... . imm:s4 ... pg:3 rn:5 rd:5 \ @@ -1267,12 +1270,26 @@ LDNF1_zpri 1010010 .... 1.... 101 ... ..... ..= ... @rpri_load_dt nreg=3D0 # SVE load multiple structures (scalar plus scalar) # LD2B, LD2H, LD2W, LD2D; etc. LD_zprr 1010010 .. nreg:2 ..... 110 ... ..... ..... @rprr_load= _msz +# LD[234]Q +LD_zprr 1010010 01 01 ..... 100 ... ..... ..... \ + @rprr_load dtype=3D18 nreg=3D1 +LD_zprr 1010010 10 01 ..... 100 ... ..... ..... \ + @rprr_load dtype=3D18 nreg=3D2 +LD_zprr 1010010 11 01 ..... 100 ... ..... ..... \ + @rprr_load dtype=3D18 nreg=3D3 =20 # SVE contiguous non-temporal load (scalar plus immediate) # LDNT1B, LDNT1H, LDNT1W, LDNT1D # SVE load multiple structures (scalar plus immediate) # LD2B, LD2H, LD2W, LD2D; etc. LD_zpri 1010010 .. nreg:2 0.... 111 ... ..... ..... @rpri_load= _msz +# LD[234]Q +LD_zpri 1010010 01 001 .... 111 ... ..... ..... \ + @rpri_load dtype=3D18 nreg=3D1 +LD_zpri 1010010 10 001 .... 111 ... ..... ..... \ + @rpri_load dtype=3D18 nreg=3D2 +LD_zpri 1010010 11 001 .... 111 ... ..... ..... \ + @rpri_load dtype=3D18 nreg=3D3 =20 # SVE load and broadcast quadword (scalar plus scalar) LD1RQ_zprr 1010010 .. 00 ..... 000 ... ..... ..... \ @@ -1383,11 +1400,25 @@ ST_zprr 1110010 11 10 ..... 010 ... ...= .. ..... \ # SVE store multiple structures (scalar plus immediate) (nreg !=3D 0) ST_zpri 1110010 .. nreg:2 1.... 111 ... ..... ..... \ @rpri_store msz=3D%size_23 esz=3D%size_23 +# ST[234]Q +ST_zpri 11100100 01 00 .... 000 ... ..... ..... \ + @rpri_store msz=3D4 esz=3D4 nreg=3D1 +ST_zpri 11100100 10 00 .... 000 ... ..... ..... \ + @rpri_store msz=3D4 esz=3D4 nreg=3D2 +ST_zpri 11100100 11 00 .... 000 ... ..... ..... \ + @rpri_store msz=3D4 esz=3D4 nreg=3D3 =20 # SVE contiguous non-temporal store (scalar plus scalar) (nreg =3D=3D = 0) # SVE store multiple structures (scalar plus scalar) (nreg !=3D 0) ST_zprr 1110010 .. nreg:2 ..... 011 ... ..... ..... \ @rprr_store msz=3D%size_23 esz=3D%size_23 +# ST[234]Q +ST_zprr 11100100 01 1 ..... 000 ... ..... ..... \ + @rprr_store msz=3D4 esz=3D4 nreg=3D1 +ST_zprr 11100100 10 1 ..... 000 ... ..... ..... \ + @rprr_store msz=3D4 esz=3D4 nreg=3D2 +ST_zprr 11100100 11 1 ..... 000 ... ..... ..... \ + @rprr_store msz=3D4 esz=3D4 nreg=3D3 =20 # SVE 32-bit scatter store (scalar plus 32-bit scaled offsets) # Require msz > 0 && msz <=3D esz. diff --git a/target/arm/tcg/sve_helper.c b/target/arm/tcg/sve_helper.c index 91cd5970ee7..360114ece2c 100644 --- a/target/arm/tcg/sve_helper.c +++ b/target/arm/tcg/sve_helper.c @@ -6421,6 +6421,10 @@ DO_LDN_2(2, dd, MO_64) DO_LDN_2(3, dd, MO_64) DO_LDN_2(4, dd, MO_64) =20 +DO_LDN_2(2, qq, MO_128) +DO_LDN_2(3, qq, MO_128) +DO_LDN_2(4, qq, MO_128) + #undef DO_LDN_1 #undef DO_LDN_2 =20 @@ -6987,6 +6991,10 @@ DO_STN_2(4, dd, MO_64, MO_64) DO_STN_2(1, sq, MO_128, MO_32) DO_STN_2(1, dq, MO_128, MO_64) =20 +DO_STN_2(2, qq, MO_128, MO_128) +DO_STN_2(3, qq, MO_128, MO_128) +DO_STN_2(4, qq, MO_128, MO_128) + #undef DO_STN_1 #undef DO_STN_2 =20 diff --git a/target/arm/tcg/translate-sve.c b/target/arm/tcg/translate-sve.c index 8e945c5d2d5..7dff0285690 100644 --- a/target/arm/tcg/translate-sve.c +++ b/target/arm/tcg/translate-sve.c @@ -89,7 +89,7 @@ static inline int expand_imm_sh8u(DisasContext *s, int x) */ static inline int msz_dtype(DisasContext *s, int msz) { - static const uint8_t dtype[4] =3D { 0, 5, 10, 15 }; + static const uint8_t dtype[5] =3D { 0, 5, 10, 15, 18 }; return dtype[msz]; } =20 @@ -4886,7 +4886,7 @@ static void do_mem_zpa(DisasContext *s, int zt, int p= g, TCGv_i64 addr, } =20 /* Indexed by [mte][be][dtype][nreg] */ -static gen_helper_gvec_mem * const ldr_fns[2][2][18][4] =3D { +static gen_helper_gvec_mem * const ldr_fns[2][2][19][4] =3D { { /* mte inactive, little-endian */ { { gen_helper_sve_ld1bb_r, gen_helper_sve_ld2bb_r, gen_helper_sve_ld3bb_r, gen_helper_sve_ld4bb_r }, @@ -4914,6 +4914,8 @@ static gen_helper_gvec_mem * const ldr_fns[2][2][18][= 4] =3D { =20 { gen_helper_sve_ld1squ_le_r, NULL, NULL, NULL }, { gen_helper_sve_ld1dqu_le_r, NULL, NULL, NULL }, + { NULL, gen_helper_sve_ld2qq_le_r, + gen_helper_sve_ld3qq_le_r, gen_helper_sve_ld4qq_le_r }, }, =20 /* mte inactive, big-endian */ @@ -4943,6 +4945,8 @@ static gen_helper_gvec_mem * const ldr_fns[2][2][18][= 4] =3D { =20 { gen_helper_sve_ld1squ_be_r, NULL, NULL, NULL }, { gen_helper_sve_ld1dqu_be_r, NULL, NULL, NULL }, + { NULL, gen_helper_sve_ld2qq_be_r, + gen_helper_sve_ld3qq_be_r, gen_helper_sve_ld4qq_be_r }, }, }, =20 @@ -4981,6 +4985,10 @@ static gen_helper_gvec_mem * const ldr_fns[2][2][18]= [4] =3D { =20 { gen_helper_sve_ld1squ_le_r_mte, NULL, NULL, NULL }, { gen_helper_sve_ld1dqu_le_r_mte, NULL, NULL, NULL }, + { NULL, + gen_helper_sve_ld2qq_le_r_mte, + gen_helper_sve_ld3qq_le_r_mte, + gen_helper_sve_ld4qq_le_r_mte }, }, =20 /* mte active, big-endian */ @@ -5018,6 +5026,10 @@ static gen_helper_gvec_mem * const ldr_fns[2][2][18]= [4] =3D { =20 { gen_helper_sve_ld1squ_be_r_mte, NULL, NULL, NULL }, { gen_helper_sve_ld1dqu_be_r_mte, NULL, NULL, NULL }, + { NULL, + gen_helper_sve_ld2qq_be_r_mte, + gen_helper_sve_ld3qq_be_r_mte, + gen_helper_sve_ld4qq_be_r_mte }, }, }, }; @@ -5042,16 +5054,26 @@ static bool trans_LD_zprr(DisasContext *s, arg_rprr= _load *a) return false; } =20 - /* dtypes 16 and 17 are artificial, representing 128-bit element */ - if (a->dtype < 16) { + /* dtypes 16-18 are artificial, representing 128-bit element */ + switch (a->dtype) { + case 0 ... 15: if (!dc_isar_feature(aa64_sve, s)) { return false; } - } else { + break; + case 16: case 17: if (!dc_isar_feature(aa64_sve2p1, s)) { return false; } s->is_nonstreaming =3D true; + break; + case 18: + if (!dc_isar_feature(aa64_sme2p1_or_sve2p1, s)) { + return false; + } + break; + default: + g_assert_not_reached(); } =20 if (sve_access_check(s)) { @@ -5065,16 +5087,26 @@ static bool trans_LD_zprr(DisasContext *s, arg_rprr= _load *a) =20 static bool trans_LD_zpri(DisasContext *s, arg_rpri_load *a) { - /* dtypes 16 and 17 are artificial, representing 128-bit element */ - if (a->dtype < 16) { + /* dtypes 16-18 are artificial, representing 128-bit element */ + switch (a->dtype) { + case 0 ... 15: if (!dc_isar_feature(aa64_sve, s)) { return false; } - } else { + break; + case 16: case 17: if (!dc_isar_feature(aa64_sve2p1, s)) { return false; } s->is_nonstreaming =3D true; + break; + case 18: + if (!dc_isar_feature(aa64_sme2p1_or_sve2p1, s)) { + return false; + } + break; + default: + g_assert_not_reached(); } =20 if (sve_access_check(s)) { @@ -5586,55 +5618,67 @@ static void do_st_zpa(DisasContext *s, int zt, int = pg, TCGv_i64 addr, gen_helper_sve_st1dd_be_r_mte, gen_helper_sve_st1dq_be_r_mte } } }, }; - static gen_helper_gvec_mem * const fn_multiple[2][2][3][4] =3D { + static gen_helper_gvec_mem * const fn_multiple[2][2][3][5] =3D { { { { gen_helper_sve_st2bb_r, gen_helper_sve_st2hh_le_r, gen_helper_sve_st2ss_le_r, - gen_helper_sve_st2dd_le_r }, + gen_helper_sve_st2dd_le_r, + gen_helper_sve_st2qq_le_r }, { gen_helper_sve_st3bb_r, gen_helper_sve_st3hh_le_r, gen_helper_sve_st3ss_le_r, - gen_helper_sve_st3dd_le_r }, + gen_helper_sve_st3dd_le_r, + gen_helper_sve_st3qq_le_r }, { gen_helper_sve_st4bb_r, gen_helper_sve_st4hh_le_r, gen_helper_sve_st4ss_le_r, - gen_helper_sve_st4dd_le_r } }, + gen_helper_sve_st4dd_le_r, + gen_helper_sve_st4qq_le_r } }, { { gen_helper_sve_st2bb_r, gen_helper_sve_st2hh_be_r, gen_helper_sve_st2ss_be_r, - gen_helper_sve_st2dd_be_r }, + gen_helper_sve_st2dd_be_r, + gen_helper_sve_st2qq_be_r }, { gen_helper_sve_st3bb_r, gen_helper_sve_st3hh_be_r, gen_helper_sve_st3ss_be_r, - gen_helper_sve_st3dd_be_r }, + gen_helper_sve_st3dd_be_r, + gen_helper_sve_st3qq_be_r }, { gen_helper_sve_st4bb_r, gen_helper_sve_st4hh_be_r, gen_helper_sve_st4ss_be_r, - gen_helper_sve_st4dd_be_r } } }, + gen_helper_sve_st4dd_be_r, + gen_helper_sve_st4qq_be_r } } }, { { { gen_helper_sve_st2bb_r_mte, gen_helper_sve_st2hh_le_r_mte, gen_helper_sve_st2ss_le_r_mte, - gen_helper_sve_st2dd_le_r_mte }, + gen_helper_sve_st2dd_le_r_mte, + gen_helper_sve_st2qq_le_r_mte }, { gen_helper_sve_st3bb_r_mte, gen_helper_sve_st3hh_le_r_mte, gen_helper_sve_st3ss_le_r_mte, - gen_helper_sve_st3dd_le_r_mte }, + gen_helper_sve_st3dd_le_r_mte, + gen_helper_sve_st3qq_le_r_mte }, { gen_helper_sve_st4bb_r_mte, gen_helper_sve_st4hh_le_r_mte, gen_helper_sve_st4ss_le_r_mte, - gen_helper_sve_st4dd_le_r_mte } }, + gen_helper_sve_st4dd_le_r_mte, + gen_helper_sve_st4qq_le_r_mte } }, { { gen_helper_sve_st2bb_r_mte, gen_helper_sve_st2hh_be_r_mte, gen_helper_sve_st2ss_be_r_mte, - gen_helper_sve_st2dd_be_r_mte }, + gen_helper_sve_st2dd_be_r_mte, + gen_helper_sve_st2qq_be_r_mte }, { gen_helper_sve_st3bb_r_mte, gen_helper_sve_st3hh_be_r_mte, gen_helper_sve_st3ss_be_r_mte, - gen_helper_sve_st3dd_be_r_mte }, + gen_helper_sve_st3dd_be_r_mte, + gen_helper_sve_st3qq_be_r_mte }, { gen_helper_sve_st4bb_r_mte, gen_helper_sve_st4hh_be_r_mte, gen_helper_sve_st4ss_be_r_mte, - gen_helper_sve_st4dd_be_r_mte } } }, + gen_helper_sve_st4dd_be_r_mte, + gen_helper_sve_st4qq_be_r_mte } } }, }; gen_helper_gvec_mem *fn; int be =3D s->be_data =3D=3D MO_BE; @@ -5663,12 +5707,17 @@ static bool trans_ST_zprr(DisasContext *s, arg_rprr= _store *a) } break; case MO_128: - assert(a->msz < a->esz); - assert(a->nreg =3D=3D 0); - if (!dc_isar_feature(aa64_sve2p1, s)) { - return false; + if (a->nreg =3D=3D 0) { + assert(a->msz < a->esz); + if (!dc_isar_feature(aa64_sve2p1, s)) { + return false; + } + s->is_nonstreaming =3D true; + } else { + if (!dc_isar_feature(aa64_sme2p1_or_sve2p1, s)) { + return false; + } } - s->is_nonstreaming =3D true; break; default: g_assert_not_reached(); @@ -5695,12 +5744,17 @@ static bool trans_ST_zpri(DisasContext *s, arg_rpri= _store *a) } break; case MO_128: - assert(a->msz < a->esz); - assert(a->nreg =3D=3D 0); - if (!dc_isar_feature(aa64_sve2p1, s)) { - return false; + if (a->nreg =3D=3D 0) { + assert(a->msz < a->esz); + if (!dc_isar_feature(aa64_sve2p1, s)) { + return false; + } + s->is_nonstreaming =3D true; + } else { + if (!dc_isar_feature(aa64_sme2p1_or_sve2p1, s)) { + return false; + } } - s->is_nonstreaming =3D true; break; default: g_assert_not_reached(); --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647403; cv=none; d=zohomail.com; s=zohoarc; b=FwSkbNCut65Pkub8CB63gJXOhwh3ODApQ6UH1bWCsVhddogqtC+U5Yirz+1NnDJpMTC7rdTbr9LLzVr8f09M0GNvq/z3n8FtUZiAykJAljWg6yVIcAMS2ycqypkAkYGQ8pS65dxmBgaKWR2ARMQvgUxPXqxFmIe6aa59L4zD3HE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647403; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=oGULRAKLg+XiqlPDP7+fCzEGTdLLvfGjVV5/QGjmu+4=; b=izRBn01mhoSGjLT2GpHoM3R7tUr99byFngfrntCSgj1xGh/72QCl1b0mfvP7rGr+LMRrtZFMzRGjcj/FRfPkM/Wxw3JSdO1iIKdt8pJKt0Gpd6hQuVAwfBzp8vg+YecndVgnULw3Dgw9eivtPdoEQJ6NDYWmFVq45NmgcQ/rqSw= 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 1751647403141857.8547955458091; Fri, 4 Jul 2025 09:43:23 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjH3-0001uR-Vy; Fri, 04 Jul 2025 12:28:30 -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 1uXjFS-0004k7-Te for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:51 -0400 Received: from mail-wr1-x42f.google.com ([2a00:1450:4864:20::42f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjFQ-0006wu-J7 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:50 -0400 Received: by mail-wr1-x42f.google.com with SMTP id ffacd0b85a97d-3a588da60dfso714306f8f.1 for ; Fri, 04 Jul 2025 09:26:48 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.26.45 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:26:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646407; x=1752251207; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=oGULRAKLg+XiqlPDP7+fCzEGTdLLvfGjVV5/QGjmu+4=; b=Z7vPRoPlrWEihOpX7kDg6O9aA+/UimQ58+0yXJaH4XYrY5TVxkgg9hpY236mQ5QAJ8 W6z8D+NKo60PKDchLq8jcycCMA8hgGsuCIB4x/H5NnxFQBjRw49GVDG1MUY5EyJ2H6jg jMKmqkT1Yh9dpcT2CK7mNxgkaScfdcoSvZKDV702rx8uwGGSdo3M4s6FSrgA76RklVol 1AaTk3IJT8HzETdWW/3Z61d9qViAIeMZVpl7AS0QNSuR9RLVvLqExgZQTWqQtpjc/Zm+ xRl13tQ6de/MoWCW1adSnJqS1wdVGX0oxvptMgCtyybPYjGob5oNnky9PBGV1/V33q2f y71w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646407; x=1752251207; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=oGULRAKLg+XiqlPDP7+fCzEGTdLLvfGjVV5/QGjmu+4=; b=PPAwiSEZgiHPxul3MHyoIKM86x184Yddvgx1rdqqhHQ1aIjkTMsSNh1kq3AmEslVlx ndggeSI1HU+KST0Mkkg3ZyiXtJLW2j4sXQqdWCePKv2liofwqaWisJUVJHxXfjRrERsa zIEtDVQ2DJxvjHv1gwuIFZnYsqvmIL++6lMzw7Z49CuOomt0Wmxrd8ySGfIUB19+SRkv Ugox6rv14FAzImqLDcOYSoe0771TwNvI9kOACHVy4TfxYhKfiUu7lr28FzbinMjX2TNN NSq+WxMR7df7kXd7h15s24AIuVENVb6r5ckaSYszt+PuC9QiR3gKFcGLwOXqONxB5cSt uSOw== X-Gm-Message-State: AOJu0YxJt00kw11Dyy7PUup8yRqJPjMD+ZoGBhPaenZ1P0ZUOrXxd1IB Y2NQNzz4G4byMiHlcTtK8Y1/TMyjcU7FDtEugxKltYpyPVqF5SMRMDGS2HR1kHa0jFXRcrQX4YU odKHm X-Gm-Gg: ASbGncupQbh2kc7vj2WUmpZhVnkjvsDpeSwYmjf5ngFmm7se9t0z6Bq/hhmHgzRsOTm mz6G0L4CNDfUlCSqY+YCECBTE51mztF3p0cOdOho5MfF7zMd8i2G6u/fPLsHvontzw1gzne8YdI 2np53G3UmIRTKpau69ub8STq25ASK9OpmnCEmtXBmrQxDWBBPxkUnt7OhqZcJEqIHFcco7diW/N 2Bu0akqxi8+RYzZr9BH8mvBOAdmlXVMoMR/gorCEm4Ujn6PYgcKPhQatBUWerebDyzGwZyvfOXf 8WLqRaf0jFb0S58y2WY8klK4hame9sIAcWZa0FrZVVh56ZwyYzaeDW+O2BXpwXzT6kMo X-Google-Smtp-Source: AGHT+IG0fUn/wDHOO4/jUXjXmoaec1iRkx4o5ocTPifINAGhJu5DK3JOJitfp39At4lZ1orreyV8PQ== X-Received: by 2002:a05:6000:4719:b0:3a4:f00b:69b6 with SMTP id ffacd0b85a97d-3b4964ed694mr2666861f8f.54.1751646406656; Fri, 04 Jul 2025 09:26:46 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 110/119] target/arm: Implement LD1Q, ST1Q for SVE2p1 Date: Fri, 4 Jul 2025 17:24:50 +0100 Message-ID: <20250704162501.249138-111-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::42f; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x42f.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751647404937116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-99-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/helper-sve.h | 16 ++++++++++++++++ target/arm/tcg/sve.decode | 8 ++++++++ target/arm/tcg/sve_helper.c | 6 ++++++ target/arm/tcg/translate-sve.c | 34 ++++++++++++++++++++++++++++++++-- 4 files changed, 62 insertions(+), 2 deletions(-) diff --git a/target/arm/tcg/helper-sve.h b/target/arm/tcg/helper-sve.h index ade76ff664d..c36090d13d1 100644 --- a/target/arm/tcg/helper-sve.h +++ b/target/arm/tcg/helper-sve.h @@ -2155,6 +2155,10 @@ DEF_HELPER_FLAGS_6(sve_ldsds_le_zd, TCG_CALL_NO_WG, void, env, ptr, ptr, ptr, tl, i32) DEF_HELPER_FLAGS_6(sve_ldsds_be_zd, TCG_CALL_NO_WG, void, env, ptr, ptr, ptr, tl, i32) +DEF_HELPER_FLAGS_6(sve_ldqq_le_zd, TCG_CALL_NO_WG, + void, env, ptr, ptr, ptr, tl, i32) +DEF_HELPER_FLAGS_6(sve_ldqq_be_zd, TCG_CALL_NO_WG, + void, env, ptr, ptr, ptr, tl, i32) =20 DEF_HELPER_FLAGS_6(sve_ldbsu_zsu_mte, TCG_CALL_NO_WG, void, env, ptr, ptr, ptr, tl, i32) @@ -2264,6 +2268,10 @@ DEF_HELPER_FLAGS_6(sve_ldsds_le_zd_mte, TCG_CALL_NO_= WG, void, env, ptr, ptr, ptr, tl, i32) DEF_HELPER_FLAGS_6(sve_ldsds_be_zd_mte, TCG_CALL_NO_WG, void, env, ptr, ptr, ptr, tl, i32) +DEF_HELPER_FLAGS_6(sve_ldqq_le_zd_mte, TCG_CALL_NO_WG, + void, env, ptr, ptr, ptr, tl, i32) +DEF_HELPER_FLAGS_6(sve_ldqq_be_zd_mte, TCG_CALL_NO_WG, + void, env, ptr, ptr, ptr, tl, i32) =20 DEF_HELPER_FLAGS_6(sve_ldffbsu_zsu, TCG_CALL_NO_WG, void, env, ptr, ptr, ptr, tl, i32) @@ -2549,6 +2557,10 @@ DEF_HELPER_FLAGS_6(sve_stdd_le_zd, TCG_CALL_NO_WG, void, env, ptr, ptr, ptr, tl, i32) DEF_HELPER_FLAGS_6(sve_stdd_be_zd, TCG_CALL_NO_WG, void, env, ptr, ptr, ptr, tl, i32) +DEF_HELPER_FLAGS_6(sve_stqq_le_zd, TCG_CALL_NO_WG, + void, env, ptr, ptr, ptr, tl, i32) +DEF_HELPER_FLAGS_6(sve_stqq_be_zd, TCG_CALL_NO_WG, + void, env, ptr, ptr, ptr, tl, i32) =20 DEF_HELPER_FLAGS_6(sve_stbs_zsu_mte, TCG_CALL_NO_WG, void, env, ptr, ptr, ptr, tl, i32) @@ -2616,6 +2628,10 @@ DEF_HELPER_FLAGS_6(sve_stdd_le_zd_mte, TCG_CALL_NO_W= G, void, env, ptr, ptr, ptr, tl, i32) DEF_HELPER_FLAGS_6(sve_stdd_be_zd_mte, TCG_CALL_NO_WG, void, env, ptr, ptr, ptr, tl, i32) +DEF_HELPER_FLAGS_6(sve_stqq_le_zd_mte, TCG_CALL_NO_WG, + void, env, ptr, ptr, ptr, tl, i32) +DEF_HELPER_FLAGS_6(sve_stqq_be_zd_mte, TCG_CALL_NO_WG, + void, env, ptr, ptr, ptr, tl, i32) =20 DEF_HELPER_FLAGS_4(sve2_sqdmull_zzz_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, i32) diff --git a/target/arm/tcg/sve.decode b/target/arm/tcg/sve.decode index 3eda029146d..2efd5f57e45 100644 --- a/target/arm/tcg/sve.decode +++ b/target/arm/tcg/sve.decode @@ -1340,6 +1340,10 @@ LD1_zprz 1100010 10 1. ..... 1.. ... ..... ..= ... \ LD1_zprz 1100010 11 1. ..... 11. ... ..... ..... \ @rprr_g_load_sc esz=3D3 msz=3D3 u=3D1 =20 +# LD1Q +LD1_zprz 1100 0100 000 rm:5 101 pg:3 rn:5 rd:5 \ + &rprr_gather_load u=3D0 ff=3D0 xs=3D2 esz=3D4 msz=3D4 scal= e=3D0 + # SVE 64-bit gather load (vector plus immediate) LD1_zpiz 1100010 .. 01 ..... 1.. ... ..... ..... \ @rpri_g_load esz=3D3 @@ -1443,6 +1447,10 @@ ST1_zprz 1110010 .. 01 ..... 101 ... ..... ..= ... \ ST1_zprz 1110010 .. 00 ..... 101 ... ..... ..... \ @rprr_scatter_store xs=3D2 esz=3D3 scale=3D0 =20 +# ST1Q +ST1_zprz 1110 0100 001 rm:5 001 pg:3 rn:5 rd:5 \ + &rprr_scatter_store xs=3D2 msz=3D4 esz=3D4 scale=3D0 + # SVE 64-bit scatter store (vector plus immediate) ST1_zpiz 1110010 .. 10 ..... 101 ... ..... ..... \ @rpri_scatter_store esz=3D3 diff --git a/target/arm/tcg/sve_helper.c b/target/arm/tcg/sve_helper.c index 360114ece2c..43b872c7fd6 100644 --- a/target/arm/tcg/sve_helper.c +++ b/target/arm/tcg/sve_helper.c @@ -7211,6 +7211,9 @@ DO_LD1_ZPZ_D(dd_be, zsu, MO_64) DO_LD1_ZPZ_D(dd_be, zss, MO_64) DO_LD1_ZPZ_D(dd_be, zd, MO_64) =20 +DO_LD1_ZPZ_D(qq_le, zd, MO_128) +DO_LD1_ZPZ_D(qq_be, zd, MO_128) + #undef DO_LD1_ZPZ_S #undef DO_LD1_ZPZ_D =20 @@ -7597,6 +7600,9 @@ DO_ST1_ZPZ_D(sd_be, zd, MO_32) DO_ST1_ZPZ_D(dd_le, zd, MO_64) DO_ST1_ZPZ_D(dd_be, zd, MO_64) =20 +DO_ST1_ZPZ_D(qq_le, zd, MO_128) +DO_ST1_ZPZ_D(qq_be, zd, MO_128) + #undef DO_ST1_ZPZ_S #undef DO_ST1_ZPZ_D =20 diff --git a/target/arm/tcg/translate-sve.c b/target/arm/tcg/translate-sve.c index 7dff0285690..7b575734fde 100644 --- a/target/arm/tcg/translate-sve.c +++ b/target/arm/tcg/translate-sve.c @@ -6121,13 +6121,23 @@ gather_load_fn64[2][2][2][3][2][4] =3D { gen_helper_sve_ldffdd_be_zd_mte, } } } } }, }; =20 +static gen_helper_gvec_mem_scatter * const +gather_load_fn128[2][2] =3D { + { gen_helper_sve_ldqq_le_zd, + gen_helper_sve_ldqq_be_zd }, + { gen_helper_sve_ldqq_le_zd_mte, + gen_helper_sve_ldqq_be_zd_mte } +}; + static bool trans_LD1_zprz(DisasContext *s, arg_LD1_zprz *a) { gen_helper_gvec_mem_scatter *fn =3D NULL; bool be =3D s->be_data =3D=3D MO_BE; bool mte =3D s->mte_active[0]; =20 - if (!dc_isar_feature(aa64_sve, s)) { + if (a->esz < MO_128 + ? !dc_isar_feature(aa64_sve, s) + : !dc_isar_feature(aa64_sve2p1, s)) { return false; } s->is_nonstreaming =3D true; @@ -6142,6 +6152,12 @@ static bool trans_LD1_zprz(DisasContext *s, arg_LD1_= zprz *a) case MO_64: fn =3D gather_load_fn64[mte][be][a->ff][a->xs][a->u][a->msz]; break; + case MO_128: + assert(!a->ff && a->u && a->xs =3D=3D 2 && a->msz =3D=3D MO_128); + fn =3D gather_load_fn128[mte][be]; + break; + default: + g_assert_not_reached(); } assert(fn !=3D NULL); =20 @@ -6309,6 +6325,14 @@ static gen_helper_gvec_mem_scatter * const scatter_s= tore_fn64[2][2][3][4] =3D { gen_helper_sve_stdd_be_zd_mte, } } }, }; =20 +static gen_helper_gvec_mem_scatter * const +scatter_store_fn128[2][2] =3D { + { gen_helper_sve_stqq_le_zd, + gen_helper_sve_stqq_be_zd }, + { gen_helper_sve_stqq_le_zd_mte, + gen_helper_sve_stqq_be_zd_mte } +}; + static bool trans_ST1_zprz(DisasContext *s, arg_ST1_zprz *a) { gen_helper_gvec_mem_scatter *fn; @@ -6318,7 +6342,9 @@ static bool trans_ST1_zprz(DisasContext *s, arg_ST1_z= prz *a) if (a->esz < a->msz || (a->msz =3D=3D 0 && a->scale)) { return false; } - if (!dc_isar_feature(aa64_sve, s)) { + if (a->esz < MO_128 + ? !dc_isar_feature(aa64_sve, s) + : !dc_isar_feature(aa64_sve2p1, s)) { return false; } s->is_nonstreaming =3D true; @@ -6332,6 +6358,10 @@ static bool trans_ST1_zprz(DisasContext *s, arg_ST1_= zprz *a) case MO_64: fn =3D scatter_store_fn64[mte][be][a->xs][a->msz]; break; + case MO_128: + assert(a->xs =3D=3D 2 && a->msz =3D=3D MO_128); + fn =3D scatter_store_fn128[mte][be]; + break; default: g_assert_not_reached(); } --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647423; cv=none; d=zohomail.com; s=zohoarc; b=UBZOq/SvatUaar13kxJghUdXrIErqN4dVqmhFcIgp/jzN8bL7axsG4jDogY9hmrcJd5Oul83p7h6+wNW8smPbtZ1JzZB/bevSBFTKuemwyYO7OrebyC3xyyTkdbgelrRK4RTkmhSW+uCCfOYTyPJBXIZRA5RlkqNeiVCvDvb/54= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647423; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=fdOoCdlOlne44OqBtSkb8B1KzT+H2bYTeiNCpuOhZHw=; b=AmEpFBOyWtIlgbitKOu4SD410r+vFdGjxovnVAj5C49EhIayuYLosC72QSMhFZmnqhueEbdLZtOC01Sp1Ec2h+8aTA8OEqeMN0DHb70o6K/+qCkffiRCPcROPNm/E2Hb3bkrJyBE1b+MNso2t5oj/p6L919Fb4WHM1jI7hp/bv8= 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 1751647423738786.0100068237814; Fri, 4 Jul 2025 09:43:43 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjH3-0001ss-45; Fri, 04 Jul 2025 12:28:29 -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 1uXjFU-0004yM-MY for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:52 -0400 Received: from mail-wr1-x431.google.com ([2a00:1450:4864:20::431]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjFR-0006x9-HM for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:52 -0400 Received: by mail-wr1-x431.google.com with SMTP id ffacd0b85a97d-3a531fcaa05so735794f8f.3 for ; Fri, 04 Jul 2025 09:26:48 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.26.46 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:26:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646408; x=1752251208; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=fdOoCdlOlne44OqBtSkb8B1KzT+H2bYTeiNCpuOhZHw=; b=PlqibCFY1A2pxS4V1Z7rzGAPCPq9ZE5n9li02Prn0BmmubpruARarD8KmcpBKzhm4l DM9CR0y4nXRt/23Agb4QE1W8TBYXci1o4k7RmAZ+VFrbQ+QGclDocMA8UKqodzDFz3fX QGMImJ/pcWXDzrhYffjaMRGab+voi1aCKBdgBa0k0tNRVfxNUk5XWPvTK3OQcOv0Dp2D uLqvYw5A4EaBHNPsBdkhm3OarUy+tOEXcJWWAyeNAbZ9r3i4anu5MOxS5BjC7uVJF6Ag xU6aFIFE/YE435gcGU3pkx6RZSnA44VAENBZReJHJQCtzgNi/46hqeFIPnNYgn7W4J1k na5w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646408; x=1752251208; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=fdOoCdlOlne44OqBtSkb8B1KzT+H2bYTeiNCpuOhZHw=; b=KPwNpVtWtv3EXZjox8hdYZcjKrL/De4XAI6wR80802CWVQifdGLZh/w5c9iOPNsAqL 9/9XCr52xZL0SoNJopJAtFfDphmkIzRpw3S/V2PHNIax3xxU0YlvBeTtdOD+vjanqCFO tuUlWhNMsA21MiYkFmqPyc1PdlkQvQEsuCYU0defmFHb9VLGNDTSxYz09kVdNttcAd/6 fcTy8zzCg/QNvJMPyUjildHjYiu4dseLrO2j6d4udA//CLDylDot2H8exA3r55ToGxea 9+sc8iV+Yzq1X2WC2f365tLWPxu8jJh1GytWSltBODRgdLcY3OAt6IZ4RwtdqXnsI65o yv7g== X-Gm-Message-State: AOJu0YxtCKP1meP60jR5YUy9jyILhRt1E+nxzQgh3oTdSh5sLyInvfY9 rJknZg0XSWQJrcpLUV9RJUww24DKEbIFzD8NpSA3wqYpJPQDu4PJrIe141TfREaeQQQbru/3uHv JaJUr X-Gm-Gg: ASbGnct9fqdGnc1nKG+Ht5WAJnbwJGYHKrJOZmdk8yi9XezAbknhI2d9BywUP/FopuW EAC5Hrbl790yIEOe8BrFc4eakaT9kPq2a070Cy4SKXBjKsU3mN7nILk0FWnWr7Sh9nJWCdn+1Q0 yQJdaY8U0/UbdxAkCTlBnLAwnjME+yEpvfDJqTi3GiOGhV4kS8vWRXuV2UBerzTWh2vdV/r0yTl f2es+Hi0NtxPhdbN9j6zfZQW4wn1CiAF9dRiLUnAvbTdxlLUNmAqoUTeXFnvWmdyW9rOk1PhBwi ur2FpA0+f8/YJP3yqprcf5cFIPUSjmjNgX9Lob7H6flxeLkm3qEIDCxQJUBzItgDYodd X-Google-Smtp-Source: AGHT+IHcgn8mUcjlQMhF2pVB20h4eEORYPOfFaavxRykjdD+SE6zL1vK+vJS5+ItLgH0OhxZsbCo9Q== X-Received: by 2002:a05:6000:4a14:b0:3a4:f918:9db9 with SMTP id ffacd0b85a97d-3b4964def46mr2803733f8f.32.1751646407828; Fri, 04 Jul 2025 09:26:47 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 111/119] target/arm: Implement MOVAZ for SME2p1 Date: Fri, 4 Jul 2025 17:24:51 +0100 Message-ID: <20250704162501.249138-112-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::431; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x431.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751647424904116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-100-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/helper-sme.h | 6 ++++ target/arm/tcg/sme.decode | 36 ++++++++++++++++++++ target/arm/tcg/sme_helper.c | 60 ++++++++++++++++++++++++++++++++++ target/arm/tcg/translate-sme.c | 46 +++++++++++++++++++------- 4 files changed, 137 insertions(+), 11 deletions(-) diff --git a/target/arm/tcg/helper-sme.h b/target/arm/tcg/helper-sme.h index 467073ea258..c9961d6b7ff 100644 --- a/target/arm/tcg/helper-sme.h +++ b/target/arm/tcg/helper-sme.h @@ -42,6 +42,12 @@ DEF_HELPER_FLAGS_3(sme2_mova_zc_s, TCG_CALL_NO_RWG, void= , ptr, ptr, i32) DEF_HELPER_FLAGS_3(sme2_mova_cz_d, TCG_CALL_NO_RWG, void, ptr, ptr, i32) DEF_HELPER_FLAGS_3(sme2_mova_zc_d, TCG_CALL_NO_RWG, void, ptr, ptr, i32) =20 +DEF_HELPER_FLAGS_3(sme2p1_movaz_zc_b, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2p1_movaz_zc_h, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2p1_movaz_zc_s, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2p1_movaz_zc_d, TCG_CALL_NO_RWG, void, ptr, ptr, i32) +DEF_HELPER_FLAGS_3(sme2p1_movaz_zc_q, TCG_CALL_NO_RWG, void, ptr, ptr, i32) + DEF_HELPER_FLAGS_5(sme_ld1b_h, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i3= 2) DEF_HELPER_FLAGS_5(sme_ld1b_v, TCG_CALL_NO_WG, void, env, ptr, ptr, tl, i3= 2) DEF_HELPER_FLAGS_5(sme_ld1b_h_mte, TCG_CALL_NO_WG, void, env, ptr, ptr, tl= , i32) diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 0a2ceea8bee..f7e4143b7de 100644 --- a/target/arm/tcg/sme.decode +++ b/target/arm/tcg/sme.decode @@ -100,6 +100,42 @@ MOVA_za2 11000000 00 00011 00 .. 010 00 off:3 z= r:4 0 \ MOVA_za4 11000000 00 00011 00 .. 011 00 off:3 zr:3 00 \ &mova_a rv=3D%mova_rv =20 +### SME Move and Zero + +MOVAZ_za2 11000000 00000110 0 .. 01010 off:3 zr:4 0 \ + &mova_a rv=3D%mova_rv +MOVAZ_za4 11000000 00000110 0 .. 01110 off:3 zr:3 00 \ + &mova_a rv=3D%mova_rv + +MOVAZ_zt 11000000 00 00001 0 v:1 .. 0001 off:4 zr:5 \ + &mova_t rs=3D%mova_rs esz=3D0 za=3D0 +MOVAZ_zt 11000000 01 00001 0 v:1 .. 0001 za:1 off:3 zr:5 \ + &mova_t rs=3D%mova_rs esz=3D1 +MOVAZ_zt 11000000 10 00001 0 v:1 .. 0001 za:2 off:2 zr:5 \ + &mova_t rs=3D%mova_rs esz=3D2 +MOVAZ_zt 11000000 11 00001 0 v:1 .. 0001 za:3 off:1 zr:5 \ + &mova_t rs=3D%mova_rs esz=3D3 +MOVAZ_zt 11000000 11 00001 1 v:1 .. 0001 za:4 zr:5 \ + &mova_t rs=3D%mova_rs esz=3D4 off=3D0 + +MOVAZ_zt2 11000000 00 00011 0 v:1 .. 00010 off:3 zr:4 0 \ + &mova_t rs=3D%mova_rs esz=3D0 za=3D0 +MOVAZ_zt2 11000000 01 00011 0 v:1 .. 00010 za:1 off:2 zr:4 0 \ + &mova_t rs=3D%mova_rs esz=3D1 +MOVAZ_zt2 11000000 10 00011 0 v:1 .. 00010 za:2 off:1 zr:4 0 \ + &mova_t rs=3D%mova_rs esz=3D2 +MOVAZ_zt2 11000000 11 00011 0 v:1 .. 00010 za:3 zr:4 0 \ + &mova_t rs=3D%mova_rs esz=3D3 off=3D0 + +MOVAZ_zt4 11000000 00 00011 0 v:1 .. 001100 off:2 zr:3 00 \ + &mova_t rs=3D%mova_rs esz=3D0 za=3D0 +MOVAZ_zt4 11000000 01 00011 0 v:1 .. 001100 za:1 off:1 zr:3 00 \ + &mova_t rs=3D%mova_rs esz=3D1 +MOVAZ_zt4 11000000 10 00011 0 v:1 .. 001100 za:2 zr:3 00 \ + &mova_t rs=3D%mova_rs esz=3D2 off=3D0 +MOVAZ_zt4 11000000 11 00011 0 v:1 .. 00110 za:3 zr:3 00 \ + &mova_t rs=3D%mova_rs esz=3D3 off=3D0 + ### SME Move into/from ZT0 =20 MOVT_rzt 1100 0000 0100 1100 0 off:3 00 11111 rt:5 diff --git a/target/arm/tcg/sme_helper.c b/target/arm/tcg/sme_helper.c index df16bb2f9c4..424fc006be4 100644 --- a/target/arm/tcg/sme_helper.c +++ b/target/arm/tcg/sme_helper.c @@ -257,6 +257,66 @@ void HELPER(sme2_mova_zc_d)(void *vdst, void *vsrc, ui= nt32_t desc) } } =20 +void HELPER(sme2p1_movaz_zc_b)(void *vdst, void *vsrc, uint32_t desc) +{ + uint8_t *src =3D vsrc; + uint8_t *dst =3D vdst; + size_t i, n =3D simd_oprsz(desc); + + for (i =3D 0; i < n; ++i) { + dst[i] =3D src[tile_vslice_index(i)]; + src[tile_vslice_index(i)] =3D 0; + } +} + +void HELPER(sme2p1_movaz_zc_h)(void *vdst, void *vsrc, uint32_t desc) +{ + uint16_t *src =3D vsrc; + uint16_t *dst =3D vdst; + size_t i, n =3D simd_oprsz(desc) / 2; + + for (i =3D 0; i < n; ++i) { + dst[i] =3D src[tile_vslice_index(i)]; + src[tile_vslice_index(i)] =3D 0; + } +} + +void HELPER(sme2p1_movaz_zc_s)(void *vdst, void *vsrc, uint32_t desc) +{ + uint32_t *src =3D vsrc; + uint32_t *dst =3D vdst; + size_t i, n =3D simd_oprsz(desc) / 4; + + for (i =3D 0; i < n; ++i) { + dst[i] =3D src[tile_vslice_index(i)]; + src[tile_vslice_index(i)] =3D 0; + } +} + +void HELPER(sme2p1_movaz_zc_d)(void *vdst, void *vsrc, uint32_t desc) +{ + uint64_t *src =3D vsrc; + uint64_t *dst =3D vdst; + size_t i, n =3D simd_oprsz(desc) / 8; + + for (i =3D 0; i < n; ++i) { + dst[i] =3D src[tile_vslice_index(i)]; + src[tile_vslice_index(i)] =3D 0; + } +} + +void HELPER(sme2p1_movaz_zc_q)(void *vdst, void *vsrc, uint32_t desc) +{ + Int128 *src =3D vsrc; + Int128 *dst =3D vdst; + size_t i, n =3D simd_oprsz(desc) / 16; + + for (i =3D 0; i < n; ++i) { + dst[i] =3D src[tile_vslice_index(i)]; + memset(&src[tile_vslice_index(i)], 0, 16); + } +} + /* * Clear elements in a tile slice comprising len bytes. */ diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index 74075971772..9592f6a9960 100644 --- a/target/arm/tcg/translate-sme.c +++ b/target/arm/tcg/translate-sme.c @@ -247,7 +247,8 @@ static bool do_mova_tile(DisasContext *s, arg_mova_p *a= , bool to_vec) TRANS_FEAT(MOVA_tz, aa64_sme, do_mova_tile, a, false) TRANS_FEAT(MOVA_zt, aa64_sme, do_mova_tile, a, true) =20 -static bool do_mova_tile_n(DisasContext *s, arg_mova_t *a, int n, bool to_= vec) +static bool do_mova_tile_n(DisasContext *s, arg_mova_t *a, int n, + bool to_vec, bool zero) { static gen_helper_gvec_2 * const cz_fns[] =3D { gen_helper_sme2_mova_cz_b, gen_helper_sme2_mova_cz_h, @@ -257,6 +258,11 @@ static bool do_mova_tile_n(DisasContext *s, arg_mova_t= *a, int n, bool to_vec) gen_helper_sme2_mova_zc_b, gen_helper_sme2_mova_zc_h, gen_helper_sme2_mova_zc_s, gen_helper_sme2_mova_zc_d, }; + static gen_helper_gvec_2 * const zc_z_fns[] =3D { + gen_helper_sme2p1_movaz_zc_b, gen_helper_sme2p1_movaz_zc_h, + gen_helper_sme2p1_movaz_zc_s, gen_helper_sme2p1_movaz_zc_d, + gen_helper_sme2p1_movaz_zc_q, + }; TCGv_ptr t_za; int svl, bytes_per_op =3D n << a->esz; =20 @@ -270,6 +276,8 @@ static bool do_mova_tile_n(DisasContext *s, arg_mova_t = *a, int n, bool to_vec) return true; } =20 + assert(a->esz <=3D MO_64 + zero); + if (!sme_smza_enabled_check(s)) { return true; } @@ -292,7 +300,9 @@ static bool do_mova_tile_n(DisasContext *s, arg_mova_t = *a, int n, bool to_vec) TCGv_ptr t_zr =3D vec_full_reg_ptr(s, a->zr * n + i); t_za =3D get_tile_rowcol(s, a->esz, a->rs, a->za, a->off * n + i, 1, n, a->v); - if (to_vec) { + if (zero) { + zc_z_fns[a->esz](t_zr, t_za, t_desc); + } else if (to_vec) { zc_fns[a->esz](t_zr, t_za, t_desc); } else { cz_fns[a->esz](t_za, t_zr, t_desc); @@ -305,6 +315,9 @@ static bool do_mova_tile_n(DisasContext *s, arg_mova_t = *a, int n, bool to_vec) a->off * n + i, 1, n, a->v); if (to_vec) { tcg_gen_gvec_mov_var(MO_8, tcg_env, o_zr, t_za, 0, svl, sv= l); + if (zero) { + tcg_gen_gvec_dup_imm_var(MO_8, t_za, 0, svl, svl, 0); + } } else { tcg_gen_gvec_mov_var(MO_8, t_za, 0, tcg_env, o_zr, svl, sv= l); } @@ -313,12 +326,17 @@ static bool do_mova_tile_n(DisasContext *s, arg_mova_= t *a, int n, bool to_vec) return true; } =20 -TRANS_FEAT(MOVA_tz2, aa64_sme2, do_mova_tile_n, a, 2, false) -TRANS_FEAT(MOVA_tz4, aa64_sme2, do_mova_tile_n, a, 4, false) -TRANS_FEAT(MOVA_zt2, aa64_sme2, do_mova_tile_n, a, 2, true) -TRANS_FEAT(MOVA_zt4, aa64_sme2, do_mova_tile_n, a, 4, true) +TRANS_FEAT(MOVA_tz2, aa64_sme2, do_mova_tile_n, a, 2, false, false) +TRANS_FEAT(MOVA_tz4, aa64_sme2, do_mova_tile_n, a, 4, false, false) +TRANS_FEAT(MOVA_zt2, aa64_sme2, do_mova_tile_n, a, 2, true, false) +TRANS_FEAT(MOVA_zt4, aa64_sme2, do_mova_tile_n, a, 4, true, false) =20 -static bool do_mova_array_n(DisasContext *s, arg_mova_a *a, int n, bool to= _vec) +TRANS_FEAT(MOVAZ_zt, aa64_sme2p1, do_mova_tile_n, a, 1, true, true) +TRANS_FEAT(MOVAZ_zt2, aa64_sme2p1, do_mova_tile_n, a, 2, true, true) +TRANS_FEAT(MOVAZ_zt4, aa64_sme2p1, do_mova_tile_n, a, 4, true, true) + +static bool do_mova_array_n(DisasContext *s, arg_mova_a *a, int n, + bool to_vec, bool zero) { TCGv_ptr t_za; int svl; @@ -336,6 +354,9 @@ static bool do_mova_array_n(DisasContext *s, arg_mova_a= *a, int n, bool to_vec) =20 if (to_vec) { tcg_gen_gvec_mov_var(MO_8, tcg_env, o_zr, t_za, o_za, svl, svl= ); + if (zero) { + tcg_gen_gvec_dup_imm_var(MO_8, t_za, o_za, svl, svl, 0); + } } else { tcg_gen_gvec_mov_var(MO_8, t_za, o_za, tcg_env, o_zr, svl, svl= ); } @@ -343,10 +364,13 @@ static bool do_mova_array_n(DisasContext *s, arg_mova= _a *a, int n, bool to_vec) return true; } =20 -TRANS_FEAT(MOVA_az2, aa64_sme2, do_mova_array_n, a, 2, false) -TRANS_FEAT(MOVA_az4, aa64_sme2, do_mova_array_n, a, 4, false) -TRANS_FEAT(MOVA_za2, aa64_sme2, do_mova_array_n, a, 2, true) -TRANS_FEAT(MOVA_za4, aa64_sme2, do_mova_array_n, a, 4, true) +TRANS_FEAT(MOVA_az2, aa64_sme2, do_mova_array_n, a, 2, false, false) +TRANS_FEAT(MOVA_az4, aa64_sme2, do_mova_array_n, a, 4, false, false) +TRANS_FEAT(MOVA_za2, aa64_sme2, do_mova_array_n, a, 2, true, false) +TRANS_FEAT(MOVA_za4, aa64_sme2, do_mova_array_n, a, 4, true, false) + +TRANS_FEAT(MOVAZ_za2, aa64_sme2p1, do_mova_array_n, a, 2, true, true) +TRANS_FEAT(MOVAZ_za4, aa64_sme2p1, do_mova_array_n, a, 4, true, true) =20 static bool do_movt(DisasContext *s, arg_MOVT_rzt *a, void (*func)(TCGv_i64, TCGv_ptr, tcg_target_long)) --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647168; cv=none; d=zohomail.com; s=zohoarc; b=ONRLOcWpofVXKJyqhTZkycE0J0XU3K4OiNsYD5kBvRRAh769DNDnPwp4b56ogEXlL7CpoS2Xoh2WJYPFaFMGy51oEPP6/SYkr1aM6/FCirrOk39+NOB1hbIpP2fzPYwYpUg+Q+FGcSOWxRB3qa8DMbhfLVl+FYY9SihuLoU+ssc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647168; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=YpD4dO0hgrJNOs9zFqHItKH2CmEpgYcn2PXcXrxeRP0=; b=nC+EKkUpsNivHLHQjnuHIZicNvhIK0/8DSbe6jOmLW/VvuuywG9PQ/0A4ss8wr23/06WH6nqlHJBruQ7pahSoMHt3vQ4Y5/X5bDMCnhmyf7HiHfFKNSXs4K91UEFLfDFNCMCOEfJPIL+Ci+BRR3lMoz9VewPMp0ISfTiJMXH2+Y= 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 1751647168485220.1074637114325; Fri, 4 Jul 2025 09:39:28 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjGN-0007i5-6R; Fri, 04 Jul 2025 12:27:47 -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 1uXjFV-00055G-Fy for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:53 -0400 Received: from mail-wm1-x332.google.com ([2a00:1450:4864:20::332]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjFS-0006xY-7u for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:53 -0400 Received: by mail-wm1-x332.google.com with SMTP id 5b1f17b1804b1-451d54214adso7695805e9.3 for ; Fri, 04 Jul 2025 09:26:49 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.26.47 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:26:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646409; x=1752251209; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=YpD4dO0hgrJNOs9zFqHItKH2CmEpgYcn2PXcXrxeRP0=; b=b8G7GUnsrpClKXPoIHU869RFEiI6hVe19js1/l/rjJz5zSpt/XGdsmHxVODqeFkpqp xPR4eRb9sT9TRXzbc93oujIshdr1BrSNDroRMbPag7BCcNrhE7ayQP32lySn06Ke1WlW WcjYKPXihCKU+pQ22SnUr5ACe6iSM1ug0BvcXjldjpTMEdBDGjkfqjkn3Pkgp41Su+lU 8lWmSYCTVPMec6nI/Tk+BH8xDo0UmvV6xSpPQsoaQ7ncPxmrJpzoTzut4/1XGrvDqHNC GptCL2YDeeEmR46wpLb4wHkX5NhdCy6R7C2GBczUgFPQwMotHBzL6ioXhB6ixqodpZqi HceA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646409; x=1752251209; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=YpD4dO0hgrJNOs9zFqHItKH2CmEpgYcn2PXcXrxeRP0=; b=rKMNEOTOlKMQoIWMYM1AWhoot/UZnE9xJ/l2M1W8QvTVr9QP3+WLqF+vv11hraFC5X /ZrkivgHapMHyKQU6Kv07xzgdifundthoIImcT2zzs/itU4e1hO641HTpfoshO4QHyJk 2fQ9/gzx+2ieKDqnzlNAS57o6AfjzY/28uVp4TKUAn60M0z1JBbdEAWiugNIpFPOHW2F deVkc5ejoS9IAQAhKXd9pLA9bjwTOU1VASxHW0h6w0Tz/sAx+CHhjFLW9R8xw3Nnc7kR GZuh/m4Tmw2JndHFpMy54tsLROkXAVGVaNFQoNp443kx1nYpZ7Q5SlzsaxlGuMEwBEIp QmGA== X-Gm-Message-State: AOJu0YxacS6jdla07lIlTEZ3ua3TsnQcTRrRxesxpCx9pmhykw4TWpq7 NCasE34ZPWeonyY06rWCpvHQc2qdwNyo9JQEy8XX+3HbO/eB2R2LmyU1Vv+ZY+6dAHeCH7hL8aS d9SA1 X-Gm-Gg: ASbGncug+sas5eeK65kUvj43qTonU+0UuVVL+OocVkGrrTvvdjf6oRzlHJCLMx8WklT NORH3MvhPJZbAoFU1nVR9KRL7z6fAKjyi/nkHnApsbP47GV918HnYhh75mCjGBcU2ejJ8WrK9NB Y/tDLY2lBuw+T5wHQJBC93w5AKU242p0n9hJYHyIwrOprD4FikpUPLPXMn8jiYLJpHTlkLA1Prs cebUCDppj5rJN5vR0YQ+f1YEUf5tymOJbiPBUxVUXTdIhIBhQIAKLn1heZer6vTXtWM1kDLuIrx ppw9DjSHQSiyxONNvw4oeATp2UYHxBaMAUewwbLlRue/TCH9nZ/1Gss60BBESRSRONEb4+ZNEms I0q4= X-Google-Smtp-Source: AGHT+IE0/4VzHYY0lKz2upQOQg1WVOVGsFeVIvVMiu1hF7We+HrLbHo4CQ8FpM4llunHP13vNAaC5w== X-Received: by 2002:a05:600c:3e1a:b0:441:d4e8:76c6 with SMTP id 5b1f17b1804b1-454b3187c08mr40686785e9.30.1751646408739; Fri, 04 Jul 2025 09:26:48 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 112/119] target/arm: Implement LUTI2, LUTI4 for SME2/SME2p1 Date: Fri, 4 Jul 2025 17:24:52 +0100 Message-ID: <20250704162501.249138-113-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::332; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x332.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751647169911116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-101-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/helper.h | 24 ++++++++++ target/arm/tcg/sme.decode | 42 ++++++++++++++++ target/arm/tcg/translate-sme.c | 56 ++++++++++++++++++++++ target/arm/tcg/vec_helper.c | 88 ++++++++++++++++++++++++++++++++++ 4 files changed, 210 insertions(+) diff --git a/target/arm/tcg/helper.h b/target/arm/tcg/helper.h index 392bf7b9b5b..d9565c80697 100644 --- a/target/arm/tcg/helper.h +++ b/target/arm/tcg/helper.h @@ -1188,3 +1188,27 @@ DEF_HELPER_FLAGS_4(gvec_uminp_s, TCG_CALL_NO_RWG, vo= id, ptr, ptr, ptr, i32) =20 DEF_HELPER_FLAGS_3(gvec_urecpe_s, TCG_CALL_NO_RWG, void, ptr, ptr, i32) DEF_HELPER_FLAGS_3(gvec_ursqrte_s, TCG_CALL_NO_RWG, void, ptr, ptr, i32) + +DEF_HELPER_FLAGS_4(sme2_luti2_1b, TCG_CALL_NO_RWG, void, ptr, ptr, env, i3= 2) +DEF_HELPER_FLAGS_4(sme2_luti2_1h, TCG_CALL_NO_RWG, void, ptr, ptr, env, i3= 2) +DEF_HELPER_FLAGS_4(sme2_luti2_1s, TCG_CALL_NO_RWG, void, ptr, ptr, env, i3= 2) + +DEF_HELPER_FLAGS_4(sme2_luti2_2b, TCG_CALL_NO_RWG, void, ptr, ptr, env, i3= 2) +DEF_HELPER_FLAGS_4(sme2_luti2_2h, TCG_CALL_NO_RWG, void, ptr, ptr, env, i3= 2) +DEF_HELPER_FLAGS_4(sme2_luti2_2s, TCG_CALL_NO_RWG, void, ptr, ptr, env, i3= 2) + +DEF_HELPER_FLAGS_4(sme2_luti2_4b, TCG_CALL_NO_RWG, void, ptr, ptr, env, i3= 2) +DEF_HELPER_FLAGS_4(sme2_luti2_4h, TCG_CALL_NO_RWG, void, ptr, ptr, env, i3= 2) +DEF_HELPER_FLAGS_4(sme2_luti2_4s, TCG_CALL_NO_RWG, void, ptr, ptr, env, i3= 2) + +DEF_HELPER_FLAGS_4(sme2_luti4_1b, TCG_CALL_NO_RWG, void, ptr, ptr, env, i3= 2) +DEF_HELPER_FLAGS_4(sme2_luti4_1h, TCG_CALL_NO_RWG, void, ptr, ptr, env, i3= 2) +DEF_HELPER_FLAGS_4(sme2_luti4_1s, TCG_CALL_NO_RWG, void, ptr, ptr, env, i3= 2) + +DEF_HELPER_FLAGS_4(sme2_luti4_2b, TCG_CALL_NO_RWG, void, ptr, ptr, env, i3= 2) +DEF_HELPER_FLAGS_4(sme2_luti4_2h, TCG_CALL_NO_RWG, void, ptr, ptr, env, i3= 2) +DEF_HELPER_FLAGS_4(sme2_luti4_2s, TCG_CALL_NO_RWG, void, ptr, ptr, env, i3= 2) + +DEF_HELPER_FLAGS_4(sme2_luti4_4b, TCG_CALL_NO_RWG, void, ptr, ptr, env, i3= 2) +DEF_HELPER_FLAGS_4(sme2_luti4_4h, TCG_CALL_NO_RWG, void, ptr, ptr, env, i3= 2) +DEF_HELPER_FLAGS_4(sme2_luti4_4s, TCG_CALL_NO_RWG, void, ptr, ptr, env, i3= 2) diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index f7e4143b7de..5a5b8ff8a5a 100644 --- a/target/arm/tcg/sme.decode +++ b/target/arm/tcg/sme.decode @@ -945,3 +945,45 @@ ZERO_za 11000000 000011 110 .. 0000000000 00. = \ &zero_za ngrp=3D2 nvec=3D4 rv=3D%mova_rv off=3D%off1_x4 ZERO_za 11000000 000011 111 .. 0000000000 00. \ &zero_za ngrp=3D4 nvec=3D4 rv=3D%mova_rv off=3D%off1_x4 + +### SME Lookup Table Read + +&lut zd zn idx + +# LUTI2, consecutive +LUTI2_c_1b 1100 0000 1100 11 idx:4 00 00 zn:5 zd:5 &lut +LUTI2_c_1h 1100 0000 1100 11 idx:4 01 00 zn:5 zd:5 &lut +LUTI2_c_1s 1100 0000 1100 11 idx:4 10 00 zn:5 zd:5 &lut + +LUTI2_c_2b 1100 0000 1000 11 idx:3 1 00 00 zn:5 .... 0 &lut zd=3D= %zd_ax2 +LUTI2_c_2h 1100 0000 1000 11 idx:3 1 01 00 zn:5 .... 0 &lut zd=3D= %zd_ax2 +LUTI2_c_2s 1100 0000 1000 11 idx:3 1 10 00 zn:5 .... 0 &lut zd=3D= %zd_ax2 + +LUTI2_c_4b 1100 0000 1000 11 idx:2 10 00 00 zn:5 ... 00 &lut zd=3D= %zd_ax4 +LUTI2_c_4h 1100 0000 1000 11 idx:2 10 01 00 zn:5 ... 00 &lut zd=3D= %zd_ax4 +LUTI2_c_4s 1100 0000 1000 11 idx:2 10 10 00 zn:5 ... 00 &lut zd=3D= %zd_ax4 + +# LUTI2, strided (must check zd alignment) +LUTI2_s_2b 1100 0000 1001 11 idx:3 1 00 00 zn:5 zd:5 &lut +LUTI2_s_2h 1100 0000 1001 11 idx:3 1 01 00 zn:5 zd:5 &lut + +LUTI2_s_4b 1100 0000 1001 11 idx:2 10 00 00 zn:5 zd:5 &lut +LUTI2_s_4h 1100 0000 1001 11 idx:2 10 01 00 zn:5 zd:5 &lut + +# LUTI4, consecutive +LUTI4_c_1b 1100 0000 1100 101 idx:3 00 00 zn:5 zd:5 &lut +LUTI4_c_1h 1100 0000 1100 101 idx:3 01 00 zn:5 zd:5 &lut +LUTI4_c_1s 1100 0000 1100 101 idx:3 10 00 zn:5 zd:5 &lut + +LUTI4_c_2b 1100 0000 1000 101 idx:2 1 00 00 zn:5 .... 0 &lut zd=3D= %zd_ax2 +LUTI4_c_2h 1100 0000 1000 101 idx:2 1 01 00 zn:5 .... 0 &lut zd=3D= %zd_ax2 +LUTI4_c_2s 1100 0000 1000 101 idx:2 1 10 00 zn:5 .... 0 &lut zd=3D= %zd_ax2 + +LUTI4_c_4h 1100 0000 1000 101 idx:1 10 01 00 zn:5 ... 00 &lut zd=3D= %zd_ax4 +LUTI4_c_4s 1100 0000 1000 101 idx:1 10 10 00 zn:5 ... 00 &lut zd=3D= %zd_ax4 + +# LUTI4, strided (must check zd alignment) +LUTI4_s_2b 1100 0000 1001 101 idx:2 1 00 00 zn:5 zd:5 &lut +LUTI4_s_2h 1100 0000 1001 101 idx:2 1 01 00 zn:5 zd:5 &lut + +LUTI4_s_4h 1100 0000 1001 101 idx:1 10 01 00 zn:5 zd:5 &lut diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index 9592f6a9960..d38b8a5ca23 100644 --- a/target/arm/tcg/translate-sme.c +++ b/target/arm/tcg/translate-sme.c @@ -1697,3 +1697,59 @@ static bool trans_SEL(DisasContext *s, arg_SEL *a) } return true; } + +static bool do_lut(DisasContext *s, arg_lut *a, + gen_helper_gvec_2_ptr *fn, bool strided) +{ + if (sme_sm_enabled_check(s) && sme2_zt0_enabled_check(s)) { + int svl =3D streaming_vec_reg_size(s); + tcg_gen_gvec_2_ptr(vec_full_reg_offset(s, a->zd), + vec_full_reg_offset(s, a->zn), + tcg_env, svl, svl, strided | (a->idx << 1), fn); + } + return true; +} + +TRANS_FEAT(LUTI2_c_1b, aa64_sme2, do_lut, a, gen_helper_sme2_luti2_1b, fal= se) +TRANS_FEAT(LUTI2_c_1h, aa64_sme2, do_lut, a, gen_helper_sme2_luti2_1h, fal= se) +TRANS_FEAT(LUTI2_c_1s, aa64_sme2, do_lut, a, gen_helper_sme2_luti2_1s, fal= se) + +TRANS_FEAT(LUTI2_c_2b, aa64_sme2, do_lut, a, gen_helper_sme2_luti2_2b, fal= se) +TRANS_FEAT(LUTI2_c_2h, aa64_sme2, do_lut, a, gen_helper_sme2_luti2_2h, fal= se) +TRANS_FEAT(LUTI2_c_2s, aa64_sme2, do_lut, a, gen_helper_sme2_luti2_2s, fal= se) + +TRANS_FEAT(LUTI2_c_4b, aa64_sme2, do_lut, a, gen_helper_sme2_luti2_4b, fal= se) +TRANS_FEAT(LUTI2_c_4h, aa64_sme2, do_lut, a, gen_helper_sme2_luti2_4h, fal= se) +TRANS_FEAT(LUTI2_c_4s, aa64_sme2, do_lut, a, gen_helper_sme2_luti2_4s, fal= se) + +TRANS_FEAT(LUTI4_c_1b, aa64_sme2, do_lut, a, gen_helper_sme2_luti4_1b, fal= se) +TRANS_FEAT(LUTI4_c_1h, aa64_sme2, do_lut, a, gen_helper_sme2_luti4_1h, fal= se) +TRANS_FEAT(LUTI4_c_1s, aa64_sme2, do_lut, a, gen_helper_sme2_luti4_1s, fal= se) + +TRANS_FEAT(LUTI4_c_2b, aa64_sme2, do_lut, a, gen_helper_sme2_luti4_2b, fal= se) +TRANS_FEAT(LUTI4_c_2h, aa64_sme2, do_lut, a, gen_helper_sme2_luti4_2h, fal= se) +TRANS_FEAT(LUTI4_c_2s, aa64_sme2, do_lut, a, gen_helper_sme2_luti4_2s, fal= se) + +TRANS_FEAT(LUTI4_c_4h, aa64_sme2, do_lut, a, gen_helper_sme2_luti4_4h, fal= se) +TRANS_FEAT(LUTI4_c_4s, aa64_sme2, do_lut, a, gen_helper_sme2_luti4_4s, fal= se) + +static bool do_lut_s4(DisasContext *s, arg_lut *a, gen_helper_gvec_2_ptr *= fn) +{ + return !(a->zd & 0b01100) && do_lut(s, a, fn, true); +} + +static bool do_lut_s8(DisasContext *s, arg_lut *a, gen_helper_gvec_2_ptr *= fn) +{ + return !(a->zd & 0b01000) && do_lut(s, a, fn, true); +} + +TRANS_FEAT(LUTI2_s_2b, aa64_sme2p1, do_lut_s8, a, gen_helper_sme2_luti2_2b) +TRANS_FEAT(LUTI2_s_2h, aa64_sme2p1, do_lut_s8, a, gen_helper_sme2_luti2_2h) + +TRANS_FEAT(LUTI2_s_4b, aa64_sme2p1, do_lut_s4, a, gen_helper_sme2_luti2_4b) +TRANS_FEAT(LUTI2_s_4h, aa64_sme2p1, do_lut_s4, a, gen_helper_sme2_luti2_4h) + +TRANS_FEAT(LUTI4_s_2b, aa64_sme2p1, do_lut_s8, a, gen_helper_sme2_luti4_2b) +TRANS_FEAT(LUTI4_s_2h, aa64_sme2p1, do_lut_s8, a, gen_helper_sme2_luti4_2h) + +TRANS_FEAT(LUTI4_s_4h, aa64_sme2p1, do_lut_s4, a, gen_helper_sme2_luti4_4h) diff --git a/target/arm/tcg/vec_helper.c b/target/arm/tcg/vec_helper.c index d4ee6f4d29d..0603db09093 100644 --- a/target/arm/tcg/vec_helper.c +++ b/target/arm/tcg/vec_helper.c @@ -3443,3 +3443,91 @@ void HELPER(gvec_ursqrte_s)(void *vd, void *vn, uint= 32_t desc) } clear_tail(d, opr_sz, simd_maxsz(desc)); } + +static inline void do_lut_b(void *zd, uint64_t *indexes, uint64_t *table, + unsigned elements, unsigned segbase, + unsigned dstride, unsigned isize, + unsigned tsize, unsigned nreg) +{ + for (unsigned r =3D 0; r < nreg; ++r) { + uint8_t *dst =3D zd + dstride * r; + unsigned base =3D segbase + r * elements; + + for (unsigned e =3D 0; e < elements; ++e) { + unsigned index =3D extractn(indexes, (base + e) * isize, isize= ); + dst[H1(e)] =3D extractn(table, index * tsize, 8); + } + } +} + +static inline void do_lut_h(void *zd, uint64_t *indexes, uint64_t *table, + unsigned elements, unsigned segbase, + unsigned dstride, unsigned isize, + unsigned tsize, unsigned nreg) +{ + for (unsigned r =3D 0; r < nreg; ++r) { + uint16_t *dst =3D zd + dstride * r; + unsigned base =3D segbase + r * elements; + + for (unsigned e =3D 0; e < elements; ++e) { + unsigned index =3D extractn(indexes, (base + e) * isize, isize= ); + dst[H2(e)] =3D extractn(table, index * tsize, 16); + } + } +} + +static inline void do_lut_s(void *zd, uint64_t *indexes, uint32_t *table, + unsigned elements, unsigned segbase, + unsigned dstride, unsigned isize, + unsigned tsize, unsigned nreg) +{ + for (unsigned r =3D 0; r < nreg; ++r) { + uint32_t *dst =3D zd + dstride * r; + unsigned base =3D segbase + r * elements; + + for (unsigned e =3D 0; e < elements; ++e) { + unsigned index =3D extractn(indexes, (base + e) * isize, isize= ); + dst[H4(e)] =3D table[H4(index)]; + } + } +} + +#define DO_SME2_LUT(ISIZE, NREG, SUFF, ESIZE) \ +void helper_sme2_luti##ISIZE##_##NREG##SUFF \ + (void *zd, void *zn, CPUARMState *env, uint32_t desc) \ +{ \ + unsigned vl =3D simd_oprsz(desc); \ + unsigned strided =3D extract32(desc, SIMD_DATA_SHIFT, 1); \ + unsigned idx =3D extract32(desc, SIMD_DATA_SHIFT + 1, 4); \ + unsigned elements =3D vl / ESIZE; \ + unsigned dstride =3D (!strided ? 1 : NREG =3D=3D 4 ? 4 : 8); = \ + unsigned segments =3D (ESIZE * 8) / (ISIZE * NREG); \ + unsigned segment =3D idx & (segments - 1); \ + ARMVectorReg indexes; \ + memcpy(&indexes, zn, vl); \ + do_lut_##SUFF(zd, indexes.d, (void *)env->za_state.zt0, elements, \ + segment * NREG * elements, \ + dstride * sizeof(ARMVectorReg), ISIZE, 32, NREG); \ +} + +DO_SME2_LUT(2,1,b, 1) +DO_SME2_LUT(2,1,h, 2) +DO_SME2_LUT(2,1,s, 4) +DO_SME2_LUT(2,2,b, 1) +DO_SME2_LUT(2,2,h, 2) +DO_SME2_LUT(2,2,s, 4) +DO_SME2_LUT(2,4,b, 1) +DO_SME2_LUT(2,4,h, 2) +DO_SME2_LUT(2,4,s, 4) + +DO_SME2_LUT(4,1,b, 1) +DO_SME2_LUT(4,1,h, 2) +DO_SME2_LUT(4,1,s, 4) +DO_SME2_LUT(4,2,b, 1) +DO_SME2_LUT(4,2,h, 2) +DO_SME2_LUT(4,2,s, 4) +DO_SME2_LUT(4,4,b, 1) +DO_SME2_LUT(4,4,h, 2) +DO_SME2_LUT(4,4,s, 4) + +#undef DO_SME2_LUT --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647288; cv=none; d=zohomail.com; s=zohoarc; b=cP1bcLvsjP7e6Fnuy5jibCmfBCnHD83Rbi4ThxbdGhhvvDtbRxRWsNzovJfXoPmfuq0fAB6myl2nhgTDqbLGx5czxs8KqPE2OzfKXjaehzFNkWmGkLGyD0SO0IVodUu2ZEG8sEHmTWsgdGz3woeCeGsFyCjKcu5H/AI/VfsWtWM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647288; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=rWosasfNf2wqBh/OQOVO0cuyunlck4/a010xI3ZiaXQ=; b=TXZDETNoGql+n6XJ8VYJEG7LWT9oAPTU33UWTCl1RdPyvM5OfUcjtwN4HtLPeur/lPvKFzLakGG8q1xHjJbf62W85/VCoT2ojdLM44uYMLV6bLZ1wFZYfSxDddzrprJ8gkcVldHObFZQkvR5fL6w2Wme+Cl1j3G3H7gMAqnQbPo= 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 1751647288244336.91784516275834; Fri, 4 Jul 2025 09:41:28 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjH8-0002F6-3T; Fri, 04 Jul 2025 12:28:35 -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 1uXjFW-00055r-PS for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:54 -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 1uXjFT-0006xo-5v for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:53 -0400 Received: by mail-wm1-x333.google.com with SMTP id 5b1f17b1804b1-451dbe494d6so12234125e9.1 for ; Fri, 04 Jul 2025 09:26:50 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.26.48 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:26:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646410; x=1752251210; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=rWosasfNf2wqBh/OQOVO0cuyunlck4/a010xI3ZiaXQ=; b=UoTB9VVVXttWHDesju8YNblSBMZs6jp+oM6jqlaJkQJseHGW9UMEp5sAbMJC0rBaDY 5fgB6aX6klgJeKFHFNT6bb5IT/XOEjitKJKitPceHWSQH0yh0zN0dplFn8rApn1Vi7gz muBC7wd/xm7f5eVglOi55cTEq3q3hheXtDNKY4zFrnOcH+pX2Onz1bXl3XgNDQEihYpR LrJlDVDVgrW9AFb5Y8XZZADXa24ldDO22d1o2GXqWxYDiP8ApWZO8LUpOdAna+pgdWzJ O6YRU5xpRrE/s+QPtQU5fJ/FG9Ku5aFjwJEjzeKCWLGzigUQhy3hHC2FD7XveYpv/qRU 1hRA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646410; x=1752251210; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=rWosasfNf2wqBh/OQOVO0cuyunlck4/a010xI3ZiaXQ=; b=S3+q2cAlZcYUm0Gpf9qfU/kmcn12pr6XLvu3Zju4zvLS3HFT7oIDVVdqTLvcTnt2Yq jx6ycADNYMw/IC/xtgZekPuIgF0DQD8H7v1CWx8PGoByWsxoWpq8xFiwntQbEvZLEL4Y IkqDswNRVGfzLaEL3F8pbG2C9PkfriNqZwEG0BWdv2ab/Skx6v0K+jkxvMT+spuJxlDU MVZ/boMyQf0yqcDnPerqFqN6HSesmM0dHC3AO/3ZQM2lBq9ugXI4URZx0TdQgBimsxpD FhJDFSSA6VwwvjwPj1MaRVNvDY+aNGmJjsEoUpV2wJgDTxVWMHWMpme/GPdPNaMd6Ko5 MfYw== X-Gm-Message-State: AOJu0Ywa6luhIuro3ttBHtPIHD3Up7hM0htdo/IZ5A7ZALvgGbYwAbOT 7CNFSfu54FXJQd1fe4RWZcN3ozZExyorkAcCHcNDujGrisIIE4YbT6E29NnYMTvovzlXOaK0/39 BdHBR X-Gm-Gg: ASbGncu7HezCl5Nxpp0m5tg8kLWLuQ6428PR3yGTXL74vBiSKTZy3UYM5dA+IODh+Qa x/VptQNwEqmcTWZ4yLi4AUOjLaAUIQ6iQE4AahdX0gSLNw6j0+TQrkf/WKxb96f1j3ivd5QDg0a joAreiPdpKOkcRBavaImbESL+01P4uHlrfAJpMuTlHB57Sjjq32etzb0853EYeYAlkBWK8bBkKY vN7NCQkiYRaGQadaGW/nd01qYFG40C9curQPiWYUAlluM67bN6MQLrrYBTf0zZGcKkL2n7Pn/cj iTTQwor82AGTeCIrq2DOG7jxvIp5npcJ4VtBpHqZkP6Z6jyJr87QPJcESwpF85s25Mmk X-Google-Smtp-Source: AGHT+IEDLYx2ZIybV02huAca28UIn9mWDNWwBY178aI9ZqCCVi1V/qwmv5VTBgrs2nc8C9hofzDPSg== X-Received: by 2002:a05:600c:8b0d:b0:441:b19c:96fe with SMTP id 5b1f17b1804b1-454b4e79652mr35307555e9.10.1751646409608; Fri, 04 Jul 2025 09:26:49 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 113/119] target/arm: Rename FMOPA_h to FMOPA_w_h Date: Fri, 4 Jul 2025 17:24:53 +0100 Message-ID: <20250704162501.249138-114-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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=peter.maydell@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 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: 1751647289467116600 Content-Type: text/plain; charset="utf-8" The pattern we currently have as FMOPA_h is the "widening" insn that takes fp16 inputs and produces single-precision outputs. This is unlike FMOPA_s and FMOPA_d, which are non-widening produce outputs the same size as their inputs. SME2 introduces a non-widening fp16 FMOPA operation; rename FMOPA_h to FMOPA_w_h (for 'widening'), so we can use FMOPA_h for the non-widening version, giving it a name in line with the other non-widening ops FMOPA_s and FMOPA_d. Signed-off-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-102-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/helper-sme.h | 2 +- target/arm/tcg/sme.decode | 2 +- target/arm/tcg/sme_helper.c | 4 ++-- target/arm/tcg/translate-sme.c | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/target/arm/tcg/helper-sme.h b/target/arm/tcg/helper-sme.h index c9961d6b7ff..67d620e456c 100644 --- a/target/arm/tcg/helper-sme.h +++ b/target/arm/tcg/helper-sme.h @@ -135,7 +135,7 @@ DEF_HELPER_FLAGS_5(sme_addva_s, TCG_CALL_NO_RWG, void, = ptr, ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_5(sme_addha_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr,= i32) DEF_HELPER_FLAGS_5(sme_addva_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr,= i32) =20 -DEF_HELPER_FLAGS_7(sme_fmopa_h, TCG_CALL_NO_RWG, +DEF_HELPER_FLAGS_7(sme_fmopa_w_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, ptr, env, i32) DEF_HELPER_FLAGS_7(sme_fmopa_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, ptr, fpst, i32) diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 5a5b8ff8a5a..77744eef4fd 100644 --- a/target/arm/tcg/sme.decode +++ b/target/arm/tcg/sme.decode @@ -190,7 +190,7 @@ FMOPA_s 10000000 100 ..... ... ... ..... . 00 .= . @op_32 FMOPA_d 10000000 110 ..... ... ... ..... . 0 ... @op_64 =20 BFMOPA 10000001 100 ..... ... ... ..... . 00 .. @op_32 -FMOPA_h 10000001 101 ..... ... ... ..... . 00 .. @op_32 +FMOPA_w_h 10000001 101 ..... ... ... ..... . 00 .. @op_32 =20 SMOPA_s 1010000 0 10 0 ..... ... ... ..... . 00 .. @op_32 SUMOPA_s 1010000 0 10 1 ..... ... ... ..... . 00 .. @op_32 diff --git a/target/arm/tcg/sme_helper.c b/target/arm/tcg/sme_helper.c index 424fc006be4..1575a2f20c5 100644 --- a/target/arm/tcg/sme_helper.c +++ b/target/arm/tcg/sme_helper.c @@ -1146,8 +1146,8 @@ static float32 f16_dotadd(float32 sum, uint32_t e1, u= int32_t e2, return float32_add(sum, t32, s_std); } =20 -void HELPER(sme_fmopa_h)(void *vza, void *vzn, void *vzm, void *vpn, - void *vpm, CPUARMState *env, uint32_t desc) +void HELPER(sme_fmopa_w_h)(void *vza, void *vzn, void *vzm, void *vpn, + void *vpm, CPUARMState *env, uint32_t desc) { intptr_t row, col, oprsz =3D simd_maxsz(desc); uint32_t neg =3D simd_data(desc) * 0x80008000u; diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index d38b8a5ca23..1167aa4964c 100644 --- a/target/arm/tcg/translate-sme.c +++ b/target/arm/tcg/translate-sme.c @@ -565,8 +565,8 @@ static bool do_outprod_env(DisasContext *s, arg_op *a, = MemOp esz, return true; } =20 -TRANS_FEAT(FMOPA_h, aa64_sme, do_outprod_env, a, - MO_32, gen_helper_sme_fmopa_h) +TRANS_FEAT(FMOPA_w_h, aa64_sme, do_outprod_env, a, + MO_32, gen_helper_sme_fmopa_w_h) TRANS_FEAT(FMOPA_s, aa64_sme, do_outprod_fpst, a, MO_32, FPST_ZA, gen_helper_sme_fmopa_s) TRANS_FEAT(FMOPA_d, aa64_sme_f64f64, do_outprod_fpst, a, --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646613; cv=none; d=zohomail.com; s=zohoarc; b=UGK7DSdrSa1gtHLD838KcvAVwCM2ZvuvYFY7BTLjPbf1IocfwRTi7ri1PmU+gc4obUJYrp8Gr/FHT5EH4anSTGABRN5u97ybR86ui/Ba/PzIwenXcbqNctZJk7k7XGVxa0ZjCUTbAQ30cBsqO7wK8xz1Q7n2YrN+vJw12m2eUWU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646613; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=BLZ2yd1uGgF3NN7lDCPG1kKzvbCyV4+5e2lz9TIgE5A=; b=lQBGoZlXJWJqgS4s7nzq8l4xhBPyvdprRPXEzJ7yrX2DF9tofqGEH+vfHw5ti1QXuZHG7VlJrZdTUAV9ENqjgjgV02FnvaaGlLm5kKq1Byus2PObnMn1zRacv5O3peJVrf6Bni34u7xMQnnvnar1h9xCbNQSNnJwVRFV8JfVwfA= 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 1751646613468309.5155558697877; Fri, 4 Jul 2025 09:30:13 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjFe-0006AW-HH; Fri, 04 Jul 2025 12:27:03 -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 1uXjFW-00056T-1t for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:54 -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 1uXjFU-0006y5-0p for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:53 -0400 Received: by mail-wm1-x333.google.com with SMTP id 5b1f17b1804b1-451d54214adso7695865e9.3 for ; Fri, 04 Jul 2025 09:26:51 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.26.49 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:26:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646410; x=1752251210; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=BLZ2yd1uGgF3NN7lDCPG1kKzvbCyV4+5e2lz9TIgE5A=; b=famuMgDqV1wmjrr5UJr8JJjity+DYaAaWaDNecsypqskp3nuvHLahL9zNul8K2v7SB fi107xjTDABwbgBePgVeLXw5ff8ai3yKidwWDmaqCI+oT9BbmOjMewMeAlAEYffdPlur 9Yl9kh0e2AQJzDUuDXANc/uUA4H/Ws1QiMf8bcuef3XEQV6KY1p5Bn7JlMVg2QH5Qf8D EBHWwNKtEJ81mV4rHuzCLw3WkziT4CdXtFTf2Mq0Q9I9azNSuK8mEUf8XMAQlFAErvxG A5l//FHG7Hfs+bUr3g8PFi0fKAAN7Vk5v36jhx2tebSKcrHM+kJ3cqm9CseN3+9DikKN 7DiA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646410; x=1752251210; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=BLZ2yd1uGgF3NN7lDCPG1kKzvbCyV4+5e2lz9TIgE5A=; b=vyTE3VXtlOEZIb6sRo+9hb8nQWa4pIeUVb0dgFXG3B8LuPS1se78+DcdXNnMtgQxPl 0HN57GFINN/I17H3aM1pGWb30kgDA56vd6rYz4m2gqTLF2uYgD9EOSq2nC61/rdNHsfi rs6JK8h/C4fnl5xN83srShhFELEPIFsAMZdH8IX1e2UOp5YOcOeHel9ipKZgsciw2e+x bPZUDMynIukclNdSvFRXjDewCfpNvF8cZbLqBveuu96XqQL1yWhq9DoYPLNRggZrzBBc wq79CBSXw2OosH2t6+oWAueQLcNfRLkdxo/0irSTHZ4eVDB+z7RIuA1w0Nu2UqfUTx4v bSBg== X-Gm-Message-State: AOJu0YwsQH3I124IY5qHDUYeImmZZBR1HyekSVi+aBR/iYkClhBbgVIb DRrd7b9c9CrFA/FupffTtGn+M4mDpe2e3eAWv3JEDSOSmw/rCc9FDZWGlKpqj8rXCXAxw17eo5Y At6m3 X-Gm-Gg: ASbGncs0ZWrNO53vKE+hfMLYaTdkqaG1M3O1Wy316JIWiFbGz0CiUIZYPtjy4+sBBzG klHH4ksoCYbcd6rQKL/zaKjmAVmIoLbRb55aKCgCoGpfsg43Q8ngfBpsxSwNZmi3i+7l59O4Gwp TLYWOWIZ2XBvr9Lynymz7Fu0xxVc6wAxupLNV4rzS2wLYnJCmO7OwypHtkMBc/ulJXscFSF/Rae FnRQ3VTuwF5+jA9Dw1WWPG2DNunK/JvTCxxDT2VNd+aqB75fdcCq5SS47m4QwJXFNy39UOvO92b s2JW/C1XDL/Q2WS5icgk34lxF3E2HiCX6VPPJ3JjHUmioYgmIhBfMi45X6NOPslovARac4QOq2W QPwQ= X-Google-Smtp-Source: AGHT+IGqKcrEJFJwCYFuGGZKS8NyiFaSBrvszSkZ0x/zBQcku/Yd4frf9uf2dGu6rMJY97Aq6k5idg== X-Received: by 2002:a05:600c:4f4d:b0:442:f956:53f9 with SMTP id 5b1f17b1804b1-454b3162015mr35152845e9.18.1751646410504; Fri, 04 Jul 2025 09:26:50 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 114/119] target/arm: Rename BFMOPA to BFMOPA_w Date: Fri, 4 Jul 2025 17:24:54 +0100 Message-ID: <20250704162501.249138-115-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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=peter.maydell@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 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: 1751646615591116600 Content-Type: text/plain; charset="utf-8" Our current BFMOPA opcode pattern is the widening version of the insn. Rename it to BFMOPA_w, to make way for the non-widening version added in SME2. Signed-off-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-103-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/helper-sme.h | 2 +- target/arm/tcg/sme.decode | 2 +- target/arm/tcg/sme_helper.c | 4 ++-- target/arm/tcg/translate-sme.c | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/target/arm/tcg/helper-sme.h b/target/arm/tcg/helper-sme.h index 67d620e456c..16083660e2f 100644 --- a/target/arm/tcg/helper-sme.h +++ b/target/arm/tcg/helper-sme.h @@ -141,7 +141,7 @@ DEF_HELPER_FLAGS_7(sme_fmopa_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, ptr, fpst, i32) DEF_HELPER_FLAGS_7(sme_fmopa_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, ptr, fpst, i32) -DEF_HELPER_FLAGS_7(sme_bfmopa, TCG_CALL_NO_RWG, +DEF_HELPER_FLAGS_7(sme_bfmopa_w, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, ptr, env, i32) DEF_HELPER_FLAGS_6(sme_smopa_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, ptr, i32) diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 77744eef4fd..8ad86f707ed 100644 --- a/target/arm/tcg/sme.decode +++ b/target/arm/tcg/sme.decode @@ -189,7 +189,7 @@ ADDVA_d 11000000 11 01000 1 ... ... ..... 00 ..= . @adda_64 FMOPA_s 10000000 100 ..... ... ... ..... . 00 .. @op_32 FMOPA_d 10000000 110 ..... ... ... ..... . 0 ... @op_64 =20 -BFMOPA 10000001 100 ..... ... ... ..... . 00 .. @op_32 +BFMOPA_w 10000001 100 ..... ... ... ..... . 00 .. @op_32 FMOPA_w_h 10000001 101 ..... ... ... ..... . 00 .. @op_32 =20 SMOPA_s 1010000 0 10 0 ..... ... ... ..... . 00 .. @op_32 diff --git a/target/arm/tcg/sme_helper.c b/target/arm/tcg/sme_helper.c index 1575a2f20c5..4772c97debb 100644 --- a/target/arm/tcg/sme_helper.c +++ b/target/arm/tcg/sme_helper.c @@ -1261,8 +1261,8 @@ void HELPER(sme2_fvdot_idx_h)(void *vd, void *vn, voi= d *vm, void *va, } } =20 -void HELPER(sme_bfmopa)(void *vza, void *vzn, void *vzm, - void *vpn, void *vpm, CPUARMState *env, uint32_t d= esc) +void HELPER(sme_bfmopa_w)(void *vza, void *vzn, void *vzm, + void *vpn, void *vpm, CPUARMState *env, uint32_t= desc) { intptr_t row, col, oprsz =3D simd_maxsz(desc); uint32_t neg =3D simd_data(desc) * 0x80008000u; diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index 1167aa4964c..38d0231b0a9 100644 --- a/target/arm/tcg/translate-sme.c +++ b/target/arm/tcg/translate-sme.c @@ -572,7 +572,7 @@ TRANS_FEAT(FMOPA_s, aa64_sme, do_outprod_fpst, a, TRANS_FEAT(FMOPA_d, aa64_sme_f64f64, do_outprod_fpst, a, MO_64, FPST_ZA, gen_helper_sme_fmopa_d) =20 -TRANS_FEAT(BFMOPA, aa64_sme, do_outprod_env, a, MO_32, gen_helper_sme_bfmo= pa) +TRANS_FEAT(BFMOPA_w, aa64_sme, do_outprod_env, a, MO_32, gen_helper_sme_bf= mopa_w) =20 TRANS_FEAT(SMOPA_s, aa64_sme, do_outprod, a, MO_32, gen_helper_sme_smopa_s) TRANS_FEAT(UMOPA_s, aa64_sme, do_outprod, a, MO_32, gen_helper_sme_umopa_s) --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647255; cv=none; d=zohomail.com; s=zohoarc; b=I83QnCQTb5wnEDwybbd5hxUxbEaqgJawF7VF0X+wiuPne8uj9ONWCF1mEkGBOwMQl+YF1KghK+WRKEHYu/MeA0r4fzu+b6XwDk1MTsEO29zJmEeF/OTMvOumyb8pplHPyAiElWob8Z3ElI/K8nqH/yVBydgPZu7juN7vbeOwhwA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647255; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=sspvGbiwkvFUsLHBGvUKOtPXlep+IBFp2de53cXvK70=; b=NlBDZFwwhOTGZ9ZdUrDQPNFnW6zK1PImrDqH2MTAM9Sutd/UntMlnQLxVSmiNEHC5ZHo5/XdCgIESg3ygndkNHaZJd3DUMT+b2dAC50iMroBXFsRJzrbcTx90ne++33qgjbi7TsYba9tgpAL+qi1tOXHVKgE1VkrkmIqrfJam8A= 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 1751647255232554.4341199086788; Fri, 4 Jul 2025 09:40:55 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjGw-0000jx-6I; Fri, 04 Jul 2025 12:28:22 -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 1uXjFX-0005S5-QG for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:56 -0400 Received: from mail-wr1-x42c.google.com ([2a00:1450:4864:20::42c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjFV-0006yO-1E for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:55 -0400 Received: by mail-wr1-x42c.google.com with SMTP id ffacd0b85a97d-3a57ae5cb17so709529f8f.0 for ; Fri, 04 Jul 2025 09:26:52 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.26.50 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:26:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646411; x=1752251211; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=sspvGbiwkvFUsLHBGvUKOtPXlep+IBFp2de53cXvK70=; b=uSJTC8/ta3MnPCa7hFYaswoqXlrlCdodlxuXmHPrTp/7jyyhmHEaGaaNlbwa7KYChi KsFIQL5fgAgkprOQ8r4I/0cX6d+yUGBHNq87OAUs6je/WTCzJFWtVg2Dbk/XDcxJBDCS pekyQhoa57rRKmR5bBqAzsDFnV7DnEv3bIalP8KmGZszrSBZptiBQMQnJ0hNsRn1pm2q 1cH0YJJlTDMqVOp2w6noqtP3zgyERIrkn/AlCvafmHQq0gldPqNuRwckOcdnfFNqon2G MaMk2UkGi/BV+YhL8kbUctvVgCpAfdrSKcwnwYdsHFl5PA59IuDy8Kn68BBoGpwNIMR7 qIwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646411; x=1752251211; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=sspvGbiwkvFUsLHBGvUKOtPXlep+IBFp2de53cXvK70=; b=SijiF6tyPCFIxeoF2jC1PuPDVy5MW9hscZalo/ZtqJxex+hpQAhAmMBduL1RSG+FA9 s2DEO3HZYSD23xRpv2wSaIEUrj9EarDUs9V3RkI5416Ldzm7Av8fdYyK39TJ87ds6bq5 4C6V06TozNjrAhCGzlAu+nXsgd8hcq5LUTBozK7XZDagAMnGsTTugma7SKhpYmA2O3/C 5aD/EiXwuwQ+oE7g8n6OT0dwgt7mnaEGKg9bRo7BBRbz0JMdE8III8MZ5f46CxQI1Zx5 tMAUFO7qWpz40822G8C6Nu8wNiS3T0kS8pJQSVzqyxJim+6o/uWKAYd6DJ9gDVb3I52C jDhQ== X-Gm-Message-State: AOJu0YzPEAcEUSJfBW8w84/odESLaG2jd38igeVFVrkAw1NNhuIAICIj iD3LCGG6mRCSqnGBVBQOUk7+Lrql3NIndXaEWuZHrzeFQ6lEqKDu7GWitedTXrv7p0XYHxP84QI VGGPA X-Gm-Gg: ASbGncsDllLJENf6OaqDZ/u1CASlyhWacRFZWpGmw0X2KY59KvuL6zWaEAUNyFAvN07 Qioyah1KtpGIscKEg4kF9ps8V4BLAe/Y+EjRxn04ZtA6qibLK8j4BEt1SdT/bmgUK6PwZaIqvj7 ltGRsLYQ3wzc/ggjIHg9VT7X1A5GpDLFDut+/KwB8g4uFKUECwUtQ+mH2qUYCu2tuhnJ/pPF18l L0vYb+eroYM2gfm7U49DzY+sD5mf0LDanuN9BX1x3/MTNXlxfA4LQXCUuSRNrwRptShFCwxGlEf 48WC85oH+0fJpMMCTImuLzBaP8JVf6W540XfSKTsBbuGPbifhO0nAFYc7Q8AsFvm0hMp X-Google-Smtp-Source: AGHT+IHsHDyFP1iGXUM73Zr0CIrH7ajq7pEwEUJVfpre2QTZnn+jMfTGQ9FCKdXyXW1HSkh0lb8i4g== X-Received: by 2002:a05:6000:250d:b0:3a4:e8bc:594 with SMTP id ffacd0b85a97d-3b4964bb64emr2251565f8f.8.1751646411423; Fri, 04 Jul 2025 09:26:51 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 115/119] target/arm: Support FPCR.AH in SME FMOPS, BFMOPS Date: Fri, 4 Jul 2025 17:24:55 +0100 Message-ID: <20250704162501.249138-116-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::42c; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x42c.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751647256992116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson For non-widening, we can use float_muladd_negate_product, For widening, which uses dot-product, we need to handle the negation explicitly. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-104-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/helper-sme.h | 19 +++++ target/arm/tcg/vec_internal.h | 5 ++ target/arm/tcg/sme_helper.c | 141 +++++++++++++++++++++++++++------ target/arm/tcg/translate-sme.c | 27 ++++--- 4 files changed, 160 insertions(+), 32 deletions(-) diff --git a/target/arm/tcg/helper-sme.h b/target/arm/tcg/helper-sme.h index 16083660e2f..2b22c6aee50 100644 --- a/target/arm/tcg/helper-sme.h +++ b/target/arm/tcg/helper-sme.h @@ -143,6 +143,25 @@ DEF_HELPER_FLAGS_7(sme_fmopa_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, ptr, fpst, i32) DEF_HELPER_FLAGS_7(sme_bfmopa_w, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, ptr, env, i32) + +DEF_HELPER_FLAGS_7(sme_fmops_w_h, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, ptr, ptr, env, i32) +DEF_HELPER_FLAGS_7(sme_fmops_s, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, ptr, ptr, fpst, i32) +DEF_HELPER_FLAGS_7(sme_fmops_d, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, ptr, ptr, fpst, i32) +DEF_HELPER_FLAGS_7(sme_bfmops_w, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, ptr, ptr, env, i32) + +DEF_HELPER_FLAGS_7(sme_ah_fmops_w_h, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, ptr, ptr, env, i32) +DEF_HELPER_FLAGS_7(sme_ah_fmops_s, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, ptr, ptr, fpst, i32) +DEF_HELPER_FLAGS_7(sme_ah_fmops_d, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, ptr, ptr, fpst, i32) +DEF_HELPER_FLAGS_7(sme_ah_bfmops_w, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, ptr, ptr, env, i32) + DEF_HELPER_FLAGS_6(sme_smopa_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, ptr, i32) DEF_HELPER_FLAGS_6(sme_umopa_s, TCG_CALL_NO_RWG, diff --git a/target/arm/tcg/vec_internal.h b/target/arm/tcg/vec_internal.h index 957bf6d9fca..cf41b03dbcd 100644 --- a/target/arm/tcg/vec_internal.h +++ b/target/arm/tcg/vec_internal.h @@ -300,6 +300,11 @@ bool is_ebf(CPUARMState *env, float_status *statusp, f= loat_status *oddstatusp); /* * Negate as for FPCR.AH=3D1 -- do not negate NaNs. */ +static inline float16 bfloat16_ah_chs(float16 a) +{ + return bfloat16_is_any_nan(a) ? a : bfloat16_chs(a); +} + static inline float16 float16_ah_chs(float16 a) { return float16_is_any_nan(a) ? a : float16_chs(a); diff --git a/target/arm/tcg/sme_helper.c b/target/arm/tcg/sme_helper.c index 4772c97debb..eff0ce74808 100644 --- a/target/arm/tcg/sme_helper.c +++ b/target/arm/tcg/sme_helper.c @@ -1002,19 +1002,18 @@ void HELPER(sme_addva_d)(void *vzda, void *vzn, voi= d *vpn, } } =20 -void HELPER(sme_fmopa_s)(void *vza, void *vzn, void *vzm, void *vpn, - void *vpm, float_status *fpst, uint32_t desc) +static void do_fmopa_s(void *vza, void *vzn, void *vzm, uint16_t *pn, + uint16_t *pm, float_status *fpst, uint32_t desc, + uint32_t negx, int negf) { intptr_t row, col, oprsz =3D simd_maxsz(desc); - uint32_t neg =3D simd_data(desc) << 31; - uint16_t *pn =3D vpn, *pm =3D vpm; =20 for (row =3D 0; row < oprsz; ) { uint16_t pa =3D pn[H2(row >> 4)]; do { if (pa & 1) { void *vza_row =3D vza + tile_vslice_offset(row); - uint32_t n =3D *(uint32_t *)(vzn + H1_4(row)) ^ neg; + uint32_t n =3D *(uint32_t *)(vzn + H1_4(row)) ^ negx; =20 for (col =3D 0; col < oprsz; ) { uint16_t pb =3D pm[H2(col >> 4)]; @@ -1022,7 +1021,7 @@ void HELPER(sme_fmopa_s)(void *vza, void *vzn, void *= vzm, void *vpn, if (pb & 1) { uint32_t *a =3D vza_row + H1_4(col); uint32_t *m =3D vzm + H1_4(col); - *a =3D float32_muladd(n, *m, *a, 0, fpst); + *a =3D float32_muladd(n, *m, *a, negf, fpst); } col +=3D 4; pb >>=3D 4; @@ -1035,29 +1034,65 @@ void HELPER(sme_fmopa_s)(void *vza, void *vzn, void= *vzm, void *vpn, } } =20 -void HELPER(sme_fmopa_d)(void *vza, void *vzn, void *vzm, void *vpn, +void HELPER(sme_fmopa_s)(void *vza, void *vzn, void *vzm, void *vpn, void *vpm, float_status *fpst, uint32_t desc) +{ + do_fmopa_s(vza, vzn, vzm, vpn, vpm, fpst, desc, 0, 0); +} + +void HELPER(sme_fmops_s)(void *vza, void *vzn, void *vzm, void *vpn, + void *vpm, float_status *fpst, uint32_t desc) +{ + do_fmopa_s(vza, vzn, vzm, vpn, vpm, fpst, desc, 1u << 31, 0); +} + +void HELPER(sme_ah_fmops_s)(void *vza, void *vzn, void *vzm, void *vpn, + void *vpm, float_status *fpst, uint32_t desc) +{ + do_fmopa_s(vza, vzn, vzm, vpn, vpm, fpst, desc, 0, + float_muladd_negate_product); +} + +static void do_fmopa_d(uint64_t *za, uint64_t *zn, uint64_t *zm, uint8_t *= pn, + uint8_t *pm, float_status *fpst, uint32_t desc, + uint64_t negx, int negf) { intptr_t row, col, oprsz =3D simd_oprsz(desc) / 8; - uint64_t neg =3D (uint64_t)simd_data(desc) << 63; - uint64_t *za =3D vza, *zn =3D vzn, *zm =3D vzm; - uint8_t *pn =3D vpn, *pm =3D vpm; =20 for (row =3D 0; row < oprsz; ++row) { if (pn[H1(row)] & 1) { uint64_t *za_row =3D &za[tile_vslice_index(row)]; - uint64_t n =3D zn[row] ^ neg; + uint64_t n =3D zn[row] ^ negx; =20 for (col =3D 0; col < oprsz; ++col) { if (pm[H1(col)] & 1) { uint64_t *a =3D &za_row[col]; - *a =3D float64_muladd(n, zm[col], *a, 0, fpst); + *a =3D float64_muladd(n, zm[col], *a, negf, fpst); } } } } } =20 +void HELPER(sme_fmopa_d)(void *vza, void *vzn, void *vzm, void *vpn, + void *vpm, float_status *fpst, uint32_t desc) +{ + do_fmopa_d(vza, vzn, vzm, vpn, vpm, fpst, desc, 0, 0); +} + +void HELPER(sme_fmops_d)(void *vza, void *vzn, void *vzm, void *vpn, + void *vpm, float_status *fpst, uint32_t desc) +{ + do_fmopa_d(vza, vzn, vzm, vpn, vpm, fpst, desc, 1ull << 63, 0); +} + +void HELPER(sme_ah_fmops_d)(void *vza, void *vzn, void *vzm, void *vpn, + void *vpm, float_status *fpst, uint32_t desc) +{ + do_fmopa_d(vza, vzn, vzm, vpn, vpm, fpst, desc, 0, + float_muladd_negate_product); +} + /* * Alter PAIR as needed for controlling predicates being false, * and for NEG on an enabled row element. @@ -1078,6 +1113,20 @@ static inline uint32_t f16mop_adj_pair(uint32_t pair= , uint32_t pg, uint32_t neg) return pair; } =20 +static inline uint32_t f16mop_ah_neg_adj_pair(uint32_t pair, uint32_t pg) +{ + uint32_t l =3D pg & 1 ? float16_ah_chs(pair) : 0; + uint32_t h =3D pg & 4 ? float16_ah_chs(pair >> 16) : 0; + return l | (h << 16); +} + +static inline uint32_t bf16mop_ah_neg_adj_pair(uint32_t pair, uint32_t pg) +{ + uint32_t l =3D pg & 1 ? bfloat16_ah_chs(pair) : 0; + uint32_t h =3D pg & 4 ? bfloat16_ah_chs(pair >> 16) : 0; + return l | (h << 16); +} + static float32 f16_dotadd(float32 sum, uint32_t e1, uint32_t e2, float_status *s_f16, float_status *s_std, float_status *s_odd) @@ -1146,12 +1195,11 @@ static float32 f16_dotadd(float32 sum, uint32_t e1,= uint32_t e2, return float32_add(sum, t32, s_std); } =20 -void HELPER(sme_fmopa_w_h)(void *vza, void *vzn, void *vzm, void *vpn, - void *vpm, CPUARMState *env, uint32_t desc) +static void do_fmopa_w_h(void *vza, void *vzn, void *vzm, uint16_t *pn, + uint16_t *pm, CPUARMState *env, uint32_t desc, + uint32_t negx, bool ah_neg) { intptr_t row, col, oprsz =3D simd_maxsz(desc); - uint32_t neg =3D simd_data(desc) * 0x80008000u; - uint16_t *pn =3D vpn, *pm =3D vpm; float_status fpst_odd =3D env->vfp.fp_status[FPST_ZA]; =20 set_float_rounding_mode(float_round_to_odd, &fpst_odd); @@ -1162,7 +1210,11 @@ void HELPER(sme_fmopa_w_h)(void *vza, void *vzn, voi= d *vzm, void *vpn, void *vza_row =3D vza + tile_vslice_offset(row); uint32_t n =3D *(uint32_t *)(vzn + H1_4(row)); =20 - n =3D f16mop_adj_pair(n, prow, neg); + if (ah_neg) { + n =3D f16mop_ah_neg_adj_pair(n, prow); + } else { + n =3D f16mop_adj_pair(n, prow, negx); + } =20 for (col =3D 0; col < oprsz; ) { uint16_t pcol =3D pm[H2(col >> 4)]; @@ -1187,6 +1239,24 @@ void HELPER(sme_fmopa_w_h)(void *vza, void *vzn, voi= d *vzm, void *vpn, } } =20 +void HELPER(sme_fmopa_w_h)(void *vza, void *vzn, void *vzm, void *vpn, + void *vpm, CPUARMState *env, uint32_t desc) +{ + do_fmopa_w_h(vza, vzn, vzm, vpn, vpm, env, desc, 0, false); +} + +void HELPER(sme_fmops_w_h)(void *vza, void *vzn, void *vzm, void *vpn, + void *vpm, CPUARMState *env, uint32_t desc) +{ + do_fmopa_w_h(vza, vzn, vzm, vpn, vpm, env, desc, 0x80008000u, false); +} + +void HELPER(sme_ah_fmops_w_h)(void *vza, void *vzn, void *vzm, void *vpn, + void *vpm, CPUARMState *env, uint32_t desc) +{ + do_fmopa_w_h(vza, vzn, vzm, vpn, vpm, env, desc, 0, true); +} + void HELPER(sme2_fdot_h)(void *vd, void *vn, void *vm, void *va, CPUARMState *env, uint32_t desc) { @@ -1261,12 +1331,11 @@ void HELPER(sme2_fvdot_idx_h)(void *vd, void *vn, v= oid *vm, void *va, } } =20 -void HELPER(sme_bfmopa_w)(void *vza, void *vzn, void *vzm, - void *vpn, void *vpm, CPUARMState *env, uint32_t= desc) +static void do_bfmopa_w(void *vza, void *vzn, void *vzm, + uint16_t *pn, uint16_t *pm, CPUARMState *env, + uint32_t desc, uint32_t negx, bool ah_neg) { intptr_t row, col, oprsz =3D simd_maxsz(desc); - uint32_t neg =3D simd_data(desc) * 0x80008000u; - uint16_t *pn =3D vpn, *pm =3D vpm; float_status fpst, fpst_odd; =20 if (is_ebf(env, &fpst, &fpst_odd)) { @@ -1276,7 +1345,11 @@ void HELPER(sme_bfmopa_w)(void *vza, void *vzn, void= *vzm, void *vza_row =3D vza + tile_vslice_offset(row); uint32_t n =3D *(uint32_t *)(vzn + H1_4(row)); =20 - n =3D f16mop_adj_pair(n, prow, neg); + if (ah_neg) { + n =3D bf16mop_ah_neg_adj_pair(n, prow); + } else { + n =3D f16mop_adj_pair(n, prow, negx); + } =20 for (col =3D 0; col < oprsz; ) { uint16_t pcol =3D pm[H2(col >> 4)]; @@ -1303,7 +1376,11 @@ void HELPER(sme_bfmopa_w)(void *vza, void *vzn, void= *vzm, void *vza_row =3D vza + tile_vslice_offset(row); uint32_t n =3D *(uint32_t *)(vzn + H1_4(row)); =20 - n =3D f16mop_adj_pair(n, prow, neg); + if (ah_neg) { + n =3D bf16mop_ah_neg_adj_pair(n, prow); + } else { + n =3D f16mop_adj_pair(n, prow, negx); + } =20 for (col =3D 0; col < oprsz; ) { uint16_t pcol =3D pm[H2(col >> 4)]; @@ -1326,6 +1403,24 @@ void HELPER(sme_bfmopa_w)(void *vza, void *vzn, void= *vzm, } } =20 +void HELPER(sme_bfmopa_w)(void *vza, void *vzn, void *vzm, void *vpn, + void *vpm, CPUARMState *env, uint32_t desc) +{ + do_bfmopa_w(vza, vzn, vzm, vpn, vpm, env, desc, 0, false); +} + +void HELPER(sme_bfmops_w)(void *vza, void *vzn, void *vzm, void *vpn, + void *vpm, CPUARMState *env, uint32_t desc) +{ + do_bfmopa_w(vza, vzn, vzm, vpn, vpm, env, desc, 0x80008000u, false); +} + +void HELPER(sme_ah_bfmops_w)(void *vza, void *vzn, void *vzm, void *vpn, + void *vpm, CPUARMState *env, uint32_t desc) +{ + do_bfmopa_w(vza, vzn, vzm, vpn, vpm, env, desc, 0, true); +} + typedef uint32_t IMOPFn32(uint32_t, uint32_t, uint32_t, uint8_t, bool); static inline void do_imopa_s(uint32_t *za, uint32_t *zn, uint32_t *zm, uint8_t *pn, uint8_t *pm, diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index 38d0231b0a9..782f4080611 100644 --- a/target/arm/tcg/translate-sme.c +++ b/target/arm/tcg/translate-sme.c @@ -526,7 +526,7 @@ static bool do_outprod_fpst(DisasContext *s, arg_op *a,= MemOp esz, gen_helper_gvec_5_ptr *fn) { int svl =3D streaming_vec_reg_size(s); - uint32_t desc =3D simd_desc(svl, svl, a->sub); + uint32_t desc =3D simd_desc(svl, svl, 0); TCGv_ptr za, zn, zm, pn, pm, fpst; =20 if (!sme_smza_enabled_check(s)) { @@ -548,7 +548,7 @@ static bool do_outprod_env(DisasContext *s, arg_op *a, = MemOp esz, gen_helper_gvec_5_ptr *fn) { int svl =3D streaming_vec_reg_size(s); - uint32_t desc =3D simd_desc(svl, svl, a->sub); + uint32_t desc =3D simd_desc(svl, svl, 0); TCGv_ptr za, zn, zm, pn, pm; =20 if (!sme_smza_enabled_check(s)) { @@ -565,14 +565,23 @@ static bool do_outprod_env(DisasContext *s, arg_op *a= , MemOp esz, return true; } =20 -TRANS_FEAT(FMOPA_w_h, aa64_sme, do_outprod_env, a, - MO_32, gen_helper_sme_fmopa_w_h) -TRANS_FEAT(FMOPA_s, aa64_sme, do_outprod_fpst, a, - MO_32, FPST_ZA, gen_helper_sme_fmopa_s) -TRANS_FEAT(FMOPA_d, aa64_sme_f64f64, do_outprod_fpst, a, - MO_64, FPST_ZA, gen_helper_sme_fmopa_d) +TRANS_FEAT(FMOPA_w_h, aa64_sme, do_outprod_env, a, MO_32, + !a->sub ? gen_helper_sme_fmopa_w_h + : !s->fpcr_ah ? gen_helper_sme_fmops_w_h + : gen_helper_sme_ah_fmops_w_h) +TRANS_FEAT(FMOPA_s, aa64_sme, do_outprod_fpst, a, MO_32, FPST_ZA, + !a->sub ? gen_helper_sme_fmopa_s + : !s->fpcr_ah ? gen_helper_sme_fmops_s + : gen_helper_sme_ah_fmops_s) +TRANS_FEAT(FMOPA_d, aa64_sme_f64f64, do_outprod_fpst, a, MO_64, FPST_ZA, + !a->sub ? gen_helper_sme_fmopa_d + : !s->fpcr_ah ? gen_helper_sme_fmops_d + : gen_helper_sme_ah_fmops_d) =20 -TRANS_FEAT(BFMOPA_w, aa64_sme, do_outprod_env, a, MO_32, gen_helper_sme_bf= mopa_w) +TRANS_FEAT(BFMOPA_w, aa64_sme, do_outprod_env, a, MO_32, + !a->sub ? gen_helper_sme_bfmopa_w + : !s->fpcr_ah ? gen_helper_sme_bfmops_w + : gen_helper_sme_ah_bfmops_w) =20 TRANS_FEAT(SMOPA_s, aa64_sme, do_outprod, a, MO_32, gen_helper_sme_smopa_s) TRANS_FEAT(UMOPA_s, aa64_sme, do_outprod, a, MO_32, gen_helper_sme_umopa_s) --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646861; cv=none; d=zohomail.com; s=zohoarc; b=JJKmp8VG6VFhvDEIKeogh997NJdT7aM/vqkbRwFEAW5OaIvo6zr8RzDdlQJdhMrDEfpS6F49sT3PRFctoP6FUo1bpJ2xicia7dzJWA+M5+YWS1LziQqqEQVIrI4/c5J04t0g8+zHep39p9ahwBnV/+Emuk6UDzXWMvv8oKeQqAg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646861; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=DkTSO4+nXD9QRlGDotIAv2dmeYUwEn5geWqK1xGsZLQ=; b=egQ+CKfSbKA6eMTedAUZMGUwh0A3ddjXKxDg0YUUT+4WA4l6q6GocO5dtZ9I5jwvkQfRLWUE6AXzqLm/v6N7lFRna29CW/tFbXr+TOLG1czALkkANi7vMYVNLWzis5KDcpyP/uMCSv+/qxFcECDrl0xaSnq1VrhLynUEjyhaoRc= 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 1751646861598554.8808413105515; Fri, 4 Jul 2025 09:34:21 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjHB-0002y9-Ck; Fri, 04 Jul 2025 12:28:37 -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 1uXjFZ-0005ky-J8 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:57 -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 1uXjFW-0006yn-AV for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:57 -0400 Received: by mail-wm1-x336.google.com with SMTP id 5b1f17b1804b1-453398e90e9so7312435e9.1 for ; Fri, 04 Jul 2025 09:26:53 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.26.51 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:26:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646412; x=1752251212; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=DkTSO4+nXD9QRlGDotIAv2dmeYUwEn5geWqK1xGsZLQ=; b=WcEGePZOdxLf1KjwT+UHGOdPW2hm1ssnzhsxZgPr9uVx6k+N4K9GB2nDxeu1gp4oU2 a2yQlNqVqTIocrWq4P9TaiRO3t44zj4rmIM7vlMtzLHyk1pbOqTxwz3KL/7dtRBraMeH ESpod8MawkP2z+yUKES2DAF6AX9TJU8xvdtUaL6EjvpBCRoGJl3negRlriJw+y+kNUM8 5FTMbvfN0T7pa9QBOqj60Pgs+Z4VygzKBMZ1j84EjbX32zK/2ooi1QTa1Zi1849KOo5n 92MP1TqCuLzt1RA73VpiMjixtQtyiDqwaCGtRIKlf+tn55b68wmEMOqVlQE2GSoGsd0n zA+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646412; x=1752251212; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=DkTSO4+nXD9QRlGDotIAv2dmeYUwEn5geWqK1xGsZLQ=; b=sSxpQ/Y/o8ICQf+Mg31Bym2JHgiAHqVdBMqDnPxDPMPQ699XTVUI29AZIoNYEKBbP9 wjT4BuoW3U7RsAa8YApubiuQUUQnJIR5sCWY9DQogkzRu+DedMEt9xCAy6waShmeZR+T +Mq9zq8uibmSqsj8QmCPfvutpmMvdVEU23yWmEDZO7OSLrX9RkXinaOdZlxKAQPVucfS XV7vMHGObehBHmN9x5opEAKqnrPzq8vOGtIuZoofKwwndL/dL1YVTGKzQCYdN4OPvOue mWbOqKs2JxVQSjk+4qm9fNRvRHcziMGnQO4xCmRg2u/1ielALCpbKCOUd+7sTxxkJsqi 3EXA== X-Gm-Message-State: AOJu0YyJzWBFuVI+g6Ooi2WuTdU53e+03phYMT++wrPUSiwZ/p9frfVw Z6teGzodSMg2W7BfNAzZSyqEgqQZPOZryVFMJgDuLQZNBvbRBNtgMXhSZbPHs3yShaXy7zjwVS9 SJ7BB X-Gm-Gg: ASbGncuCfNK6gbA7nUILMNJuHTwjrFcyzwGRqUtLzRwh2MFud8vc2O6CmcPSGoFlVhn ZDC0oZ36N/pPHzo1+Wds+DfJ65PSx8uPX5riPlw3YmAIX+FXsFFFhXQYOZB4szBHAWT45+oRS74 n6HQuftp4u9OC6cI2qCoDN/Koo7Ef1F4Tf34MmhvPy8ts+nVkYh7vqRCgZYS1B2im8136WCDsoh 26q/Kxp6NRfQLM5NbLCo5y1b6FciDyaggKfgGRxZ+IU/pYNoZe4u4qu2UucKljSGEr9eyLqo6Ps kiwWT7ACG39UXGctYpbSFRBNsNhTcS/G8AhQOVf8dzvUeHl07/MP5rCcArNOTnE0CIOh0ZrmcyO R9C4= X-Google-Smtp-Source: AGHT+IG4y/+A4ynRghbfU/hh4756nsy1D2KIfsj8lKeR5TyB6k6B8NVn7DZTYBiAn9S/PLd4cowMxw== X-Received: by 2002:a05:600c:6819:b0:43b:ce36:7574 with SMTP id 5b1f17b1804b1-454b3116294mr30595725e9.11.1751646412330; Fri, 04 Jul 2025 09:26:52 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 116/119] target/arm: Implement FMOPA (non-widening) for fp16 Date: Fri, 4 Jul 2025 17:24:56 +0100 Message-ID: <20250704162501.249138-117-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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=peter.maydell@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 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: 1751646862690116600 Reviewed-by: Alex Benn=C3=A9e Signed-off-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-105-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/helper-sme.h | 6 ++++ target/arm/tcg/sme.decode | 2 ++ target/arm/tcg/sme_helper.c | 51 ++++++++++++++++++++++++++++++++++ target/arm/tcg/translate-sme.c | 4 +++ 4 files changed, 63 insertions(+) diff --git a/target/arm/tcg/helper-sme.h b/target/arm/tcg/helper-sme.h index 2b22c6aee50..fac70a82b92 100644 --- a/target/arm/tcg/helper-sme.h +++ b/target/arm/tcg/helper-sme.h @@ -137,6 +137,8 @@ DEF_HELPER_FLAGS_5(sme_addva_d, TCG_CALL_NO_RWG, void, = ptr, ptr, ptr, ptr, i32) =20 DEF_HELPER_FLAGS_7(sme_fmopa_w_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, ptr, env, i32) +DEF_HELPER_FLAGS_7(sme_fmopa_h, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, ptr, ptr, fpst, i32) DEF_HELPER_FLAGS_7(sme_fmopa_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, ptr, fpst, i32) DEF_HELPER_FLAGS_7(sme_fmopa_d, TCG_CALL_NO_RWG, @@ -146,6 +148,8 @@ DEF_HELPER_FLAGS_7(sme_bfmopa_w, TCG_CALL_NO_RWG, =20 DEF_HELPER_FLAGS_7(sme_fmops_w_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, ptr, env, i32) +DEF_HELPER_FLAGS_7(sme_fmops_h, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, ptr, ptr, fpst, i32) DEF_HELPER_FLAGS_7(sme_fmops_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, ptr, fpst, i32) DEF_HELPER_FLAGS_7(sme_fmops_d, TCG_CALL_NO_RWG, @@ -155,6 +159,8 @@ DEF_HELPER_FLAGS_7(sme_bfmops_w, TCG_CALL_NO_RWG, =20 DEF_HELPER_FLAGS_7(sme_ah_fmops_w_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, ptr, env, i32) +DEF_HELPER_FLAGS_7(sme_ah_fmops_h, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, ptr, ptr, fpst, i32) DEF_HELPER_FLAGS_7(sme_ah_fmops_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, ptr, fpst, i32) DEF_HELPER_FLAGS_7(sme_ah_fmops_d, TCG_CALL_NO_RWG, diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 8ad86f707ed..3c58fdd2a0e 100644 --- a/target/arm/tcg/sme.decode +++ b/target/arm/tcg/sme.decode @@ -183,9 +183,11 @@ ADDVA_d 11000000 11 01000 1 ... ... ..... 00 .= .. @adda_64 ### SME Outer Product =20 &op zad zn zm pm pn sub:bool +@op_16 ........ ... zm:5 pm:3 pn:3 zn:5 sub:1 ... zad:1 &op @op_32 ........ ... zm:5 pm:3 pn:3 zn:5 sub:1 .. zad:2 &op @op_64 ........ ... zm:5 pm:3 pn:3 zn:5 sub:1 . zad:3 &op =20 +FMOPA_h 10000001 100 ..... ... ... ..... . 100 . @op_16 FMOPA_s 10000000 100 ..... ... ... ..... . 00 .. @op_32 FMOPA_d 10000000 110 ..... ... ... ..... . 0 ... @op_64 =20 diff --git a/target/arm/tcg/sme_helper.c b/target/arm/tcg/sme_helper.c index eff0ce74808..d23d9f08d29 100644 --- a/target/arm/tcg/sme_helper.c +++ b/target/arm/tcg/sme_helper.c @@ -1002,6 +1002,57 @@ void HELPER(sme_addva_d)(void *vzda, void *vzn, void= *vpn, } } =20 +static void do_fmopa_h(void *vza, void *vzn, void *vzm, uint16_t *pn, + uint16_t *pm, float_status *fpst, uint32_t desc, + uint16_t negx, int negf) +{ + intptr_t row, col, oprsz =3D simd_maxsz(desc); + + for (row =3D 0; row < oprsz; ) { + uint16_t pa =3D pn[H2(row >> 4)]; + do { + if (pa & 1) { + void *vza_row =3D vza + tile_vslice_offset(row); + uint16_t n =3D *(uint32_t *)(vzn + H1_2(row)) ^ negx; + + for (col =3D 0; col < oprsz; ) { + uint16_t pb =3D pm[H2(col >> 4)]; + do { + if (pb & 1) { + uint16_t *a =3D vza_row + H1_2(col); + uint16_t *m =3D vzm + H1_2(col); + *a =3D float16_muladd(n, *m, *a, negf, fpst); + } + col +=3D 2; + pb >>=3D 2; + } while (col & 15); + } + } + row +=3D 2; + pa >>=3D 2; + } while (row & 15); + } +} + +void HELPER(sme_fmopa_h)(void *vza, void *vzn, void *vzm, void *vpn, + void *vpm, float_status *fpst, uint32_t desc) +{ + do_fmopa_h(vza, vzn, vzm, vpn, vpm, fpst, desc, 0, 0); +} + +void HELPER(sme_fmops_h)(void *vza, void *vzn, void *vzm, void *vpn, + void *vpm, float_status *fpst, uint32_t desc) +{ + do_fmopa_h(vza, vzn, vzm, vpn, vpm, fpst, desc, 1u << 15, 0); +} + +void HELPER(sme_ah_fmops_h)(void *vza, void *vzn, void *vzm, void *vpn, + void *vpm, float_status *fpst, uint32_t desc) +{ + do_fmopa_h(vza, vzn, vzm, vpn, vpm, fpst, desc, 0, + float_muladd_negate_product); +} + static void do_fmopa_s(void *vza, void *vzn, void *vzm, uint16_t *pn, uint16_t *pm, float_status *fpst, uint32_t desc, uint32_t negx, int negf) diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index 782f4080611..119a5665e67 100644 --- a/target/arm/tcg/translate-sme.c +++ b/target/arm/tcg/translate-sme.c @@ -569,6 +569,10 @@ TRANS_FEAT(FMOPA_w_h, aa64_sme, do_outprod_env, a, MO_= 32, !a->sub ? gen_helper_sme_fmopa_w_h : !s->fpcr_ah ? gen_helper_sme_fmops_w_h : gen_helper_sme_ah_fmops_w_h) +TRANS_FEAT(FMOPA_h, aa64_sme_f16f16, do_outprod_fpst, a, MO_16, FPST_ZA_F1= 6, + !a->sub ? gen_helper_sme_fmopa_h + : !s->fpcr_ah ? gen_helper_sme_fmops_h + : gen_helper_sme_ah_fmops_h) TRANS_FEAT(FMOPA_s, aa64_sme, do_outprod_fpst, a, MO_32, FPST_ZA, !a->sub ? gen_helper_sme_fmopa_s : !s->fpcr_ah ? gen_helper_sme_fmops_s --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647274; cv=none; d=zohomail.com; s=zohoarc; b=eVw1CSGW2kYE8TGHkb7mq72Aa3EHIuzTlvBr0cLZIhXs2NZD/v7eEy80fxtJVmrarfyOQTeAeegWVP58qyE3zXU8Rl7SWT6blj80EQauBCEIryDzpkM3N1niQj9dnAyfKGEV27QpxtQdAxMxbinbodOb+652yz/4503VIXWGNdo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647274; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=iXUqnSNoGZ/jACB187vp1qlCyYhfeg4tsmRJqb3n4HQ=; b=EikFosfcGbcXeTL/Kx11YlR5oDcYWLqT8bW9oVuA9y20Oh7xAlXGWOWicxacsQSvqLyOveH/RtElvduRUesFtSIIdtu7ptrb+c8uSvxEqOWfvpCV6i3kEyWs2sXlzpHij1tu+Skwz9IQGEOCihS0aLF97DKY/PpJWpV1TAAqTQw= 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 1751647274309950.0210827755744; Fri, 4 Jul 2025 09:41:14 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjGy-000135-2H; Fri, 04 Jul 2025 12:28:24 -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 1uXjFb-0005yc-Oi for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:27:00 -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 1uXjFY-0006zQ-W1 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:58 -0400 Received: by mail-wm1-x334.google.com with SMTP id 5b1f17b1804b1-4535fbe0299so6170425e9.3 for ; Fri, 04 Jul 2025 09:26:54 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.26.52 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:26:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646413; x=1752251213; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=iXUqnSNoGZ/jACB187vp1qlCyYhfeg4tsmRJqb3n4HQ=; b=b1yNKWG0qZFlfyUHyuJrCSAQrGM2XHXs8E2IF7Y934yS+zkmZn0lc3YAJj+d6JvfSJ 67jfhg4JOSY8kzI9me8QWByV0kYyzsaOCyul2iAhoG2IXUWsu2tnY/i5b/RjyNfyjgHw VOkNOqkLbP+30goNVTvN5a3aBFi9znM7iBvETlWA/i9sys1Jc4gdN2QJA4/q+w6F8NIW VMtMrxKsrvu04V0p87oFymEBmpmmcM21B1YyDcgQWXEY2F4bcNwF9SAFlcuf9Y+6Zzd0 w6iPRZbagNWl+0Fcmnv8r6lm1dC9UXl5DGkfwitv+tGDOl36c05k9oeInT+oEUhT76xZ u9PA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646413; x=1752251213; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=iXUqnSNoGZ/jACB187vp1qlCyYhfeg4tsmRJqb3n4HQ=; b=qM449Dfoo2IGfvKB97QMq/CgGS4/CAo+CDIB49qns/Lpe/NxPHnUuXXTW+XmoYEmG2 pjoD+4hpP46O46OwCuuXnsfX2CYWCgMAPZOfDcsbo3ACqSpw/Jdtmjf5nE4Ipxnfkdxx OIHaqgapSOuQMe/41aBexU6FOUWSDwZFYr4RE0FvZd/ahjdfKBdCMZrYCUVXqiWRAtzM wfp3JroKgJkgOzHt49SH5NPOiTUBR4NtbZmsSFaEuckKb5I2aFJJjehtZegp+Bjjx4nH 4x82wK7V5FyRYx/8+c2PFdxuwEtfoHgOWE9FafP+ors9KL881SMfr0hVDufOTxYdlpqJ GhpQ== X-Gm-Message-State: AOJu0Yx9rTl0Q6vjf4+mdLaiZ3aw0mWBoQEZdeO5bxWaWYkpmFtbOLd2 KFtRU+Tx/vj3kCL6TzWKr51tUDwVky5GcxwKVktSefsyHh/xZynOEXMWticHMO1ci1qoJRIUDMB D9+bb X-Gm-Gg: ASbGncuTQtt4aBAugf0pqJJM20Kq5hP2MHDlQD/xML8NIw3/QGKA1VykMD5HIsKjULT ay0jBHo5wCvueCicg/l6Ko0bwsMw+XCDaic0vIZfRgFIIeLKC/3x4ZfUdJFwAaHcS/t4uDI4Zf0 hQYyntAj1JtePKRMVet5KuvJ7BmdGZlV4sn0NySBbR4eVURzKXDt7xkcMyEGnqCQAZMqo2dMytG GOGvhN7KSYnBJ7+VYT0rbgiLndavgI0EYrPGG21fSN+pbEX74N/uXsUpnPsD86PjoN+0CnX+CwO ayzINJJtjiLEXZAXTUkSexogGTQndwObRjcj+9GXNvjUyvfcfyqDIrWLui7PPbf1ajRn X-Google-Smtp-Source: AGHT+IEXTDQ2ATsFpNb6SaO9pC0H9mDCELowHCGLeDQsvbgCauMRE63Lv2bvoGQYy362r0o+X9lwgA== X-Received: by 2002:a05:600c:1c98:b0:450:d07e:ee14 with SMTP id 5b1f17b1804b1-454b948f789mr8604645e9.17.1751646413165; Fri, 04 Jul 2025 09:26:53 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 117/119] target/arm: Implement SME2 BFMOPA (non-widening) Date: Fri, 4 Jul 2025 17:24:57 +0100 Message-ID: <20250704162501.249138-118-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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=peter.maydell@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 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: 1751647275443116600 Reviewed-by: Alex Benn=C3=A9e Signed-off-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-106-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- target/arm/tcg/helper-sme.h | 6 ++++ target/arm/tcg/sme.decode | 2 ++ target/arm/tcg/sme_helper.c | 51 ++++++++++++++++++++++++++++++++++ target/arm/tcg/translate-sme.c | 5 ++++ 4 files changed, 64 insertions(+) diff --git a/target/arm/tcg/helper-sme.h b/target/arm/tcg/helper-sme.h index fac70a82b92..1fc756bec6e 100644 --- a/target/arm/tcg/helper-sme.h +++ b/target/arm/tcg/helper-sme.h @@ -145,6 +145,8 @@ DEF_HELPER_FLAGS_7(sme_fmopa_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, ptr, fpst, i32) DEF_HELPER_FLAGS_7(sme_bfmopa_w, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, ptr, env, i32) +DEF_HELPER_FLAGS_7(sme_bfmopa, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, ptr, ptr, fpst, i32) =20 DEF_HELPER_FLAGS_7(sme_fmops_w_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, ptr, env, i32) @@ -156,6 +158,8 @@ DEF_HELPER_FLAGS_7(sme_fmops_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, ptr, fpst, i32) DEF_HELPER_FLAGS_7(sme_bfmops_w, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, ptr, env, i32) +DEF_HELPER_FLAGS_7(sme_bfmops, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, ptr, ptr, fpst, i32) =20 DEF_HELPER_FLAGS_7(sme_ah_fmops_w_h, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, ptr, env, i32) @@ -167,6 +171,8 @@ DEF_HELPER_FLAGS_7(sme_ah_fmops_d, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, ptr, fpst, i32) DEF_HELPER_FLAGS_7(sme_ah_bfmops_w, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, ptr, env, i32) +DEF_HELPER_FLAGS_7(sme_ah_bfmops, TCG_CALL_NO_RWG, + void, ptr, ptr, ptr, ptr, ptr, fpst, i32) =20 DEF_HELPER_FLAGS_6(sme_smopa_s, TCG_CALL_NO_RWG, void, ptr, ptr, ptr, ptr, ptr, i32) diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 3c58fdd2a0e..6bb9aa2a90e 100644 --- a/target/arm/tcg/sme.decode +++ b/target/arm/tcg/sme.decode @@ -191,6 +191,8 @@ FMOPA_h 10000001 100 ..... ... ... ..... . 100 = . @op_16 FMOPA_s 10000000 100 ..... ... ... ..... . 00 .. @op_32 FMOPA_d 10000000 110 ..... ... ... ..... . 0 ... @op_64 =20 +BFMOPA 10000001 101 ..... ... ... ..... . 100 . @op_16 + BFMOPA_w 10000001 100 ..... ... ... ..... . 00 .. @op_32 FMOPA_w_h 10000001 101 ..... ... ... ..... . 00 .. @op_32 =20 diff --git a/target/arm/tcg/sme_helper.c b/target/arm/tcg/sme_helper.c index d23d9f08d29..bb8ed1ed0e2 100644 --- a/target/arm/tcg/sme_helper.c +++ b/target/arm/tcg/sme_helper.c @@ -1144,6 +1144,57 @@ void HELPER(sme_ah_fmops_d)(void *vza, void *vzn, vo= id *vzm, void *vpn, float_muladd_negate_product); } =20 +static void do_bfmopa(void *vza, void *vzn, void *vzm, uint16_t *pn, + uint16_t *pm, float_status *fpst, uint32_t desc, + uint16_t negx, int negf) +{ + intptr_t row, col, oprsz =3D simd_maxsz(desc); + + for (row =3D 0; row < oprsz; ) { + uint16_t pa =3D pn[H2(row >> 4)]; + do { + if (pa & 1) { + void *vza_row =3D vza + tile_vslice_offset(row); + uint16_t n =3D *(uint32_t *)(vzn + H1_2(row)) ^ negx; + + for (col =3D 0; col < oprsz; ) { + uint16_t pb =3D pm[H2(col >> 4)]; + do { + if (pb & 1) { + uint16_t *a =3D vza_row + H1_2(col); + uint16_t *m =3D vzm + H1_2(col); + *a =3D bfloat16_muladd(n, *m, *a, negf, fpst); + } + col +=3D 2; + pb >>=3D 2; + } while (col & 15); + } + } + row +=3D 2; + pa >>=3D 2; + } while (row & 15); + } +} + +void HELPER(sme_bfmopa)(void *vza, void *vzn, void *vzm, void *vpn, + void *vpm, float_status *fpst, uint32_t desc) +{ + do_bfmopa(vza, vzn, vzm, vpn, vpm, fpst, desc, 0, 0); +} + +void HELPER(sme_bfmops)(void *vza, void *vzn, void *vzm, void *vpn, + void *vpm, float_status *fpst, uint32_t desc) +{ + do_bfmopa(vza, vzn, vzm, vpn, vpm, fpst, desc, 1u << 15, 0); +} + +void HELPER(sme_ah_bfmops)(void *vza, void *vzn, void *vzm, void *vpn, + void *vpm, float_status *fpst, uint32_t desc) +{ + do_bfmopa(vza, vzn, vzm, vpn, vpm, fpst, desc, 0, + float_muladd_negate_product); +} + /* * Alter PAIR as needed for controlling predicates being false, * and for NEG on an enabled row element. diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index 119a5665e67..65fc8bc9b2f 100644 --- a/target/arm/tcg/translate-sme.c +++ b/target/arm/tcg/translate-sme.c @@ -582,6 +582,11 @@ TRANS_FEAT(FMOPA_d, aa64_sme_f64f64, do_outprod_fpst, = a, MO_64, FPST_ZA, : !s->fpcr_ah ? gen_helper_sme_fmops_d : gen_helper_sme_ah_fmops_d) =20 +TRANS_FEAT(BFMOPA, aa64_sme_b16b16, do_outprod_fpst, a, MO_16, FPST_ZA, + !a->sub ? gen_helper_sme_bfmopa + : !s->fpcr_ah ? gen_helper_sme_bfmops + : gen_helper_sme_ah_bfmops) + TRANS_FEAT(BFMOPA_w, aa64_sme, do_outprod_env, a, MO_32, !a->sub ? gen_helper_sme_bfmopa_w : !s->fpcr_ah ? gen_helper_sme_bfmops_w --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751647315; cv=none; d=zohomail.com; s=zohoarc; b=CXi3Fsv89LxWa/sU4QfUUDg6YEdOeV7qbzyBr53wjbWCYFrFSeE8H4ClOYAzV9TTGZODq0KcpgNYoJLieIjwcIIpAtaKE23mSv/jeRkEMR0Fo5JSd6KJ1HLS2p1wDaGWDgQUy2x6JyDWTuU3VUTo6I72lPOtlIcDc1YZZa+Zrbw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751647315; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=BQPq3LL1k9Hbuv+vQcvRxaAWa2tKEi3ud/jXWeiywVU=; b=XutZMA6L7RmDC3RpA2oAut6/T0r8Lykh3/er3pWE6iKRE+lfZ3HHsl8YFvS+OvhJfYf8FDeSz+YeCwzQAFc6LOWyNO51ZlaIhwBgha7UT34LagtK33NZlzkyVKYERHX/4CuZ21VKHJgVsGan0yRXCkQE8J6+LSqUS3YjRbM5k90= 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 1751647315050626.2592553820725; Fri, 4 Jul 2025 09:41:55 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjHD-0003Hn-Hf; Fri, 04 Jul 2025 12:28:39 -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 1uXjFc-00069m-ND for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:27:00 -0400 Received: from mail-wm1-x32d.google.com ([2a00:1450:4864:20::32d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjFX-0006zZ-OD for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:27:00 -0400 Received: by mail-wm1-x32d.google.com with SMTP id 5b1f17b1804b1-4531e146a24so7213615e9.0 for ; Fri, 04 Jul 2025 09:26:55 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.26.53 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:26:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646414; x=1752251214; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=BQPq3LL1k9Hbuv+vQcvRxaAWa2tKEi3ud/jXWeiywVU=; b=m9xzDbw33ipKRNaC4YlCbDqPrvT4eEmpWzIEzdVrJXlWl2iEdf3x3mR0RESzaZRhmr s5RiC1MkC0WKg/flbj7B95AS14YrcUoRyzkO7SQVbQW1w046d7A2uNzXK64qTHZnN+2j jleyD+wh0g3zhFQV3nCa7iOkoUnkUI32UFKfSR07BFwJew06XLqITKCfq8DIXDRjlPAy XN1pQRhOwBeJC699ao5olrk9o7Ubfq1k5beVDC/gtzUrSKWZDL37ugxz9TdSRPCbWpIb Ueici9OjbSgpUvM/rnzWGHgq59O6+Pwn2FNwIsUKbTIwoVPHdrCm5IsnCJ1US1gpp82q 9VMA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646414; x=1752251214; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=BQPq3LL1k9Hbuv+vQcvRxaAWa2tKEi3ud/jXWeiywVU=; b=OCPnh/zJqqzXb8jsHlW/2ghKDK2VN5epDHGJ8HhNRRj+khRdos8Ysmg2Md9WFflSBs rtYWR9ZWvcYxPXRW1x74xG/e4fhHeLfBUQtstBT9MjvIwx11upmeS959Icu9fGHs6dJR f7uihmRLD6MvJgaGbw/d0dZiYAJ7roEr9oQ586TM1Foz/bHtO+jU8ZT+nn9l+sci+05u BIg4yU7T34vKP3w5H4KGwKqdS0NMkvYrwaaS9EsivSwBGYrP8F114N/0pTat6UkLEEhP /bb8PLMRFagUAVZLzwNlrSjNlIuaXu516Rep8/5xVVQjfWT+8gep2NLXNCrSk/W2rTC/ 9dew== X-Gm-Message-State: AOJu0Yxgn9aUYsi2ukXzIGk2KzkETSXoCL62GbZgnADjqAgoa2V5EbDh eJL7/4oWGd5oQkJ8o0uk5rAHtEg6tU/HJdihqP5EkKhLjkKhtAnacnfRZ6/oPGMhlwo9d+DYw2h UuHnu X-Gm-Gg: ASbGncuUXQe+knagleATXdcfUfQoioob1UhrxAEH00XDVB32Ydf25UDBxGT0w+bC91V mb6ofsY3KMVk4AvfOL7KEi0EWERgreK8WhOBoU8iFAJBBtTcSjDxRsfukR95EWUsx69NOlJ3AgY UiDYncKi9G3m8p2Z3mqZx5ogJ5yGP4whHBY3usNbolzrw86I/jGV3/VYDPShnR+NMWMgg8k5WlX rNv9tDjAHzSyTbTe2ThWSG1LUshbRtwNZhoPQnK3RjgvDaS8KcABzyWCh0lMljn8HdFUvwuDhSA jtk3Sfy5dq8KqtH/rVXuCJT7MHY+WvhePgW2o+NxImz3V8bJX/W/WspMDJPAcv4giIyC X-Google-Smtp-Source: AGHT+IGisCsW8pwaQABfznBOe1FEUVGmDAE/dIzlIAvOH5kxFBwtNIwry4TQYwEnwKKSawYV5UKE4Q== X-Received: by 2002:a05:600c:348d:b0:450:cabd:160 with SMTP id 5b1f17b1804b1-454b3109201mr36245885e9.3.1751646414053; Fri, 04 Jul 2025 09:26:54 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 118/119] target/arm: Enable FEAT_SME2p1 on -cpu max Date: Fri, 4 Jul 2025 17:24:58 +0100 Message-ID: <20250704162501.249138-119-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::32d; envelope-from=peter.maydell@linaro.org; helo=mail-wm1-x32d.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751647315888116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-107-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- docs/system/arm/emulation.rst | 6 ++++++ target/arm/tcg/cpu64.c | 10 ++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/docs/system/arm/emulation.rst b/docs/system/arm/emulation.rst index 78c2fd2113c..890dc6fee21 100644 --- a/docs/system/arm/emulation.rst +++ b/docs/system/arm/emulation.rst @@ -129,16 +129,22 @@ the following architecture extensions: - FEAT_SM3 (Advanced SIMD SM3 instructions) - FEAT_SM4 (Advanced SIMD SM4 instructions) - FEAT_SME (Scalable Matrix Extension) +- FEAT_SME2 (Scalable Matrix Extension version 2) +- FEAT_SME2p1 (Scalable Matrix Extension version 2.1) +- FEAT_SME_B16B16 (Non-widening BFloat16 arithmetic for SME2) - FEAT_SME_FA64 (Full A64 instruction set in Streaming SVE mode) +- FEAT_SME_F16F16 (Non-widening half-precision FP16 arithmetic for SME2) - FEAT_SME_F64F64 (Double-precision floating-point outer product instructi= ons) - FEAT_SME_I16I64 (16-bit to 64-bit integer widening outer product instruc= tions) - FEAT_SVE (Scalable Vector Extension) - FEAT_SVE_AES (Scalable Vector AES instructions) +- FEAT_SVE_B16B16 (Non-widening BFloat16 arithmetic for SVE2) - FEAT_SVE_BitPerm (Scalable Vector Bit Permutes instructions) - FEAT_SVE_PMULL128 (Scalable Vector PMULL instructions) - FEAT_SVE_SHA3 (Scalable Vector SHA3 instructions) - FEAT_SVE_SM4 (Scalable Vector SM4 instructions) - FEAT_SVE2 (Scalable Vector Extension version 2) +- FEAT_SVE2p1 (Scalable Vector Extension version 2.1) - FEAT_SPECRES (Speculation restriction instructions) - FEAT_SSBS (Speculative Store Bypass Safe) - FEAT_SSBS2 (MRS and MSR instructions for SSBS version 2) diff --git a/target/arm/tcg/cpu64.c b/target/arm/tcg/cpu64.c index 937f29e253d..d0df50a2f34 100644 --- a/target/arm/tcg/cpu64.c +++ b/target/arm/tcg/cpu64.c @@ -1201,7 +1201,7 @@ void aarch64_max_tcg_initfn(Object *obj) */ t =3D FIELD_DP64(t, ID_AA64PFR1, MTE, 3); /* FEAT_MTE3 */ t =3D FIELD_DP64(t, ID_AA64PFR1, RAS_FRAC, 0); /* FEAT_RASv1p1 + FEAT= _DoubleFault */ - t =3D FIELD_DP64(t, ID_AA64PFR1, SME, 1); /* FEAT_SME */ + t =3D FIELD_DP64(t, ID_AA64PFR1, SME, 2); /* FEAT_SME2 */ t =3D FIELD_DP64(t, ID_AA64PFR1, CSV2_FRAC, 0); /* FEAT_CSV2_3 */ t =3D FIELD_DP64(t, ID_AA64PFR1, NMI, 1); /* FEAT_NMI */ SET_IDREG(isar, ID_AA64PFR1, t); @@ -1250,10 +1250,11 @@ void aarch64_max_tcg_initfn(Object *obj) FIELD_DP64_IDREG(isar, ID_AA64MMFR3, SPEC_FPACC, 1); /* FEAT_FPACC_SPE= C */ =20 t =3D GET_IDREG(isar, ID_AA64ZFR0); - t =3D FIELD_DP64(t, ID_AA64ZFR0, SVEVER, 1); + t =3D FIELD_DP64(t, ID_AA64ZFR0, SVEVER, 2); /* FEAT_SVE2p1 */ t =3D FIELD_DP64(t, ID_AA64ZFR0, AES, 2); /* FEAT_SVE_PMULL128 */ t =3D FIELD_DP64(t, ID_AA64ZFR0, BITPERM, 1); /* FEAT_SVE_BitPerm */ t =3D FIELD_DP64(t, ID_AA64ZFR0, BFLOAT16, 2); /* FEAT_BF16, FEAT_EBF= 16 */ + t =3D FIELD_DP64(t, ID_AA64ZFR0, B16B16, 1); /* FEAT_SVE_B16B16 */ t =3D FIELD_DP64(t, ID_AA64ZFR0, SHA3, 1); /* FEAT_SVE_SHA3 */ t =3D FIELD_DP64(t, ID_AA64ZFR0, SM4, 1); /* FEAT_SVE_SM4 */ t =3D FIELD_DP64(t, ID_AA64ZFR0, I8MM, 1); /* FEAT_I8MM */ @@ -1269,11 +1270,16 @@ void aarch64_max_tcg_initfn(Object *obj) =20 t =3D GET_IDREG(isar, ID_AA64SMFR0); t =3D FIELD_DP64(t, ID_AA64SMFR0, F32F32, 1); /* FEAT_SME */ + t =3D FIELD_DP64(t, ID_AA64SMFR0, BI32I32, 1); /* FEAT_SME2 */ t =3D FIELD_DP64(t, ID_AA64SMFR0, B16F32, 1); /* FEAT_SME */ t =3D FIELD_DP64(t, ID_AA64SMFR0, F16F32, 1); /* FEAT_SME */ t =3D FIELD_DP64(t, ID_AA64SMFR0, I8I32, 0xf); /* FEAT_SME */ + t =3D FIELD_DP64(t, ID_AA64SMFR0, F16F16, 1); /* FEAT_SME_F16F16 */ + t =3D FIELD_DP64(t, ID_AA64SMFR0, B16B16, 1); /* FEAT_SME_B16B16 */ + t =3D FIELD_DP64(t, ID_AA64SMFR0, I16I32, 5); /* FEAT_SME2 */ t =3D FIELD_DP64(t, ID_AA64SMFR0, F64F64, 1); /* FEAT_SME_F64F64 */ t =3D FIELD_DP64(t, ID_AA64SMFR0, I16I64, 0xf); /* FEAT_SME_I16I64 */ + t =3D FIELD_DP64(t, ID_AA64SMFR0, SMEVER, 2); /* FEAT_SME2p1 */ t =3D FIELD_DP64(t, ID_AA64SMFR0, FA64, 1); /* FEAT_SME_FA64 */ SET_IDREG(isar, ID_AA64SMFR0, t); =20 --=20 2.43.0 From nobody Thu Dec 18 22:28:31 2025 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=1751646519; cv=none; d=zohomail.com; s=zohoarc; b=P3WBUK8RPmrD1VOfpyLBExO7sgW5EZtvOVCaUptwcNgNIWRn0g8HCNyQqYKT4gu2HbAI1HglRFtyOmxJ8uNIz5X96Xj4Xo3Vz/MKouDFmWgrx19I5aoWU5c2d/s1WLZMEfqBjcQCZVtqALdnzL1b4tQZWZFR7EcRhHvBRzrT0Sc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751646519; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=SRH0loritoMIYj/jPR+rUTfl0mRjYm32LpALRWJqQHc=; b=iU95CXUnLfHZupIlmRoZ/eWDErhNAwvn2kOYzDdL+xyRvKwMTPW0y0qTJSvjZJRrGmcpRFSkiQeZWfPswGAABi+m6rnJJ7zmUqLKsvtHW1pqFSQ2qTbaFRm61UBp1MaGANcnc65vavjlq3WtGQJ/ip1Ja/QLC0/yfkGktEAQCYk= 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 1751646519636173.05619083036072; Fri, 4 Jul 2025 09:28:39 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXjGJ-0007eE-Q6; Fri, 04 Jul 2025 12:27:43 -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 1uXjFb-0005yC-Md for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:27:00 -0400 Received: from mail-wr1-x42d.google.com ([2a00:1450:4864:20::42d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXjFZ-0006zi-Gb for qemu-devel@nongnu.org; Fri, 04 Jul 2025 12:26:58 -0400 Received: by mail-wr1-x42d.google.com with SMTP id ffacd0b85a97d-3a507e88b0aso848812f8f.1 for ; Fri, 04 Jul 2025 09:26:57 -0700 (PDT) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [2001:8b0:1d0::2]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b471b96534sm2816857f8f.48.2025.07.04.09.26.54 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 09:26:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751646415; x=1752251215; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=SRH0loritoMIYj/jPR+rUTfl0mRjYm32LpALRWJqQHc=; b=AMljl6H7UrO415TICMd06pNZ7Z0nm9HM9XldB0URrwWsxMXBeBaP0fCMTnH/pa3kG7 dIQ1pCmOCp5o3JlZCsCPJfi4f3S2/eYMteu8tjrXAuzyn2JueaB0zBAkHw4LbnsleuIc d/U4/65MzNjXrw3JZzu5csp3EaiN+ZM68J+L5eccT0kKegWie9F54tJ7TH0sFsWgSkY3 8/Oa0jHtRDK+CS845yW1UrJKBGnUwFCU4bH35Qzu8gVw1PVSZNAaUdv0A4u0knmr5e9p IZluJraACnSVjwsRPaOpL4e2K7kQ0cnC9NsL/SoNSTSw1/aLr6QjiAMZpySVM/HEIyDN s90g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751646415; x=1752251215; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=SRH0loritoMIYj/jPR+rUTfl0mRjYm32LpALRWJqQHc=; b=ToLfQDatwuSf1LtWT3SzshEMasY6QNPAYnCgJh6iitRUto9hkljPpgvYJRGzXKYopM ENnfhQrBbDsX9xLfsalAytTQmHZJdeiSaDMDcHsWW56KsQCHn1ZZn2h+0jq3GmJtmN5s rooopRb85jr0U6hTVQAZ8UIluVE26tvkVuTsip/wkuFoMOn+LRjbGVYDS8hqIATsf8ew JuPlUQ6H8i+s3O3M+yNmHejeN3woi0ld8/YW7SdQxOAjvxEUfPJec6aIZTMa0XT0AXQz ogaHA3stOHZdkozr0DrLrvIpkAok3vAPqew4eSeV+oXOVy2x5D/dh972ovGoFAu8ugpY EWLA== X-Gm-Message-State: AOJu0YwfLRDFhKBwQO442tpki3c087GV5qZIvAp++H6/LG/dc8mH+AR5 /HFdIyB7/DoQyMEAWiKJSmNN/LZJ9UUJcztY22nt/1c3ZcrUHpsd+zLsNbJ2aoRKyYQjHTi0L1D 8/6gK X-Gm-Gg: ASbGncvDIE4w9u/BBavvxYmpeDzvs/0L2/yt3uedJ8rzwrr16p5rtr9uT9A3bjqeYi6 RVEkHf50730zaZwIhSom+IxYu3/4zRVyxceB2OaGliLivwl0hHNFaGYeTfj+vJ32FJ+6IoLHwnQ kqzzYCgpJGNCE4W3H/IoSvvRLQ180s845tTDl7Ae9Njgb5MvGIxrtk/DXLjbu7Zav3eXV/TAPDK JHC467uEEFAryP0xIGZV8qKF7M91CtvF3pnDFKcUu5w/ruu4kWie+YP4h44e9humntEwOFseF7K uFMjvbBkPLA66f4cxOU7XsWnuih5v5BPXwg0fnQCRHtgd599EoH6OXdKzwRWbU/bDdY+ X-Google-Smtp-Source: AGHT+IGPOPkZKv/HdueKrLSPYRV5gKqKMTxUFMheGYKcc1zyKtX93MSBI2yXWU47k4ASF+ayJCuV/Q== X-Received: by 2002:a05:6000:4207:b0:3a4:ef33:e60 with SMTP id ffacd0b85a97d-3b49661d63fmr2446143f8f.40.1751646414947; Fri, 04 Jul 2025 09:26:54 -0700 (PDT) From: Peter Maydell To: qemu-devel@nongnu.org Subject: [PULL 119/119] linux-user/aarch64: Set hwcap bits for SME2p1/SVE2p1 Date: Fri, 4 Jul 2025 17:24:59 +0100 Message-ID: <20250704162501.249138-120-peter.maydell@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704162501.249138-1-peter.maydell@linaro.org> References: <20250704162501.249138-1-peter.maydell@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::42d; envelope-from=peter.maydell@linaro.org; helo=mail-wr1-x42d.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751646520283116600 Content-Type: text/plain; charset="utf-8" From: Richard Henderson Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson Message-id: 20250704142112.1018902-108-richard.henderson@linaro.org Signed-off-by: Peter Maydell --- linux-user/elfload.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/linux-user/elfload.c b/linux-user/elfload.c index 2add1665c75..ea214105ff8 100644 --- a/linux-user/elfload.c +++ b/linux-user/elfload.c @@ -915,6 +915,14 @@ uint64_t get_elf_hwcap2(void) GET_FEATURE_ID(aa64_sme_fa64, ARM_HWCAP2_A64_SME_FA64); GET_FEATURE_ID(aa64_hbc, ARM_HWCAP2_A64_HBC); GET_FEATURE_ID(aa64_mops, ARM_HWCAP2_A64_MOPS); + GET_FEATURE_ID(aa64_sve2p1, ARM_HWCAP2_A64_SVE2P1); + GET_FEATURE_ID(aa64_sme2, (ARM_HWCAP2_A64_SME2 | + ARM_HWCAP2_A64_SME_I16I32 | + ARM_HWCAP2_A64_SME_BI32I32)); + GET_FEATURE_ID(aa64_sme2p1, ARM_HWCAP2_A64_SME2P1); + GET_FEATURE_ID(aa64_sme_b16b16, ARM_HWCAP2_A64_SME_B16B16); + GET_FEATURE_ID(aa64_sme_f16f16, ARM_HWCAP2_A64_SME_F16F16); + GET_FEATURE_ID(aa64_sve_b16b16, ARM_HWCAP2_A64_SVE_B16B16); =20 return hwcaps; } --=20 2.43.0