From nobody Sat Dec 13 22:57:49 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=1751639044; cv=none; d=zohomail.com; s=zohoarc; b=RZMdyVeovGlXE64cfDg4OGp9Y635EXANNesb1gecMBTNkaTCB2R0iU6pRlZWc+KdkoTFkoZ6qZ76o1MDuQfWaA7bZ/K/d9kqJoQUlkmrXQWcc9w6un6NngzPfaJSy/KVHsjjV02M3Wv5ZpIyiOtj7YnoV8TNVvR6IOFlpKwo09Y= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751639044; h=Content-Transfer-Encoding:Cc:Cc: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; bh=EJkg5Eikh8pDdMpxJ6bol3squO0VoPxIikfVrqRqSHM=; b=fMIN8DoYcUx3NE80D3IFH2oGIkda0UMEUWpD7Xl1QCPKcW7k/fCdDFv8pC54CxBtac75DeFW6QkvYb3rWerc7usrTH/y1/b87WQrq/M+VQBOox6dZKawZXCWLj8uDY/bFrCS2tNJ25KWFAHV4spfd77KRSCJdkTOa5D2MUnUO9c= 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 1751639044603915.2505881869134; Fri, 4 Jul 2025 07:24:04 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhIX-0005Xk-Br; Fri, 04 Jul 2025 10:21: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 1uXhHy-0004g9-Mu for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:18 -0400 Received: from mail-oa1-x31.google.com ([2001:4860:4864:20::31]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhHw-00057S-Mb for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:18 -0400 Received: by mail-oa1-x31.google.com with SMTP id 586e51a60fabf-2ea08399ec8so907715fac.1 for ; Fri, 04 Jul 2025 07:21:16 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff0471esm528016fac.3.2025.07.04.07.21.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:21:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751638875; x=1752243675; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=EJkg5Eikh8pDdMpxJ6bol3squO0VoPxIikfVrqRqSHM=; b=Jq9iyNWOxkqTKZnnaZYl2lhQOE5VfbW61M0eKBbHJMI6CV4tFHWli4Bfk0RYPn47Dq RPzqkddXdBnkCw8VIbVLK1ZF7d2XjjMt9a9T9fQ/dduQgAX3hGGNb2C1wGX6PhZPYZGx yN7DELoruHfYwCb1qYCKUEiFck3R8GZJkQGAi6Nb+/fbkBJ0NSUIieJipybSyjNWK/xU ixsEckEheEDZJznxSqr1HvoZN7jeJYHCkYv7jcOpibUsDZpnx9Z76XxzovaeNHn31hQw Jk+gKxoIeOmgc/wbduSelQ0ISGkCx2+nwDFqsr90k5sI33uhW3Hb3BW6hNMaMInipH7k ZB7Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751638875; x=1752243675; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=EJkg5Eikh8pDdMpxJ6bol3squO0VoPxIikfVrqRqSHM=; b=TFjWjIhnINFIzu+MmKggiTKIhVz/cP7niX6/sww4Qy0nF9JKj6PddBn/T0d2xCpQq/ drUw/pjEqMkfH79kvcP9W5V2fGwcXS62+5Uh04cWjgiF5RGCXcjfYO+Agl6ZgGudta6n TL1mGzY9o9Pr1ZTFH8D1GU/Foqfi0CcIcKsTt1stF7uZMNzz9HQxwBcBpo74SC++NJjV Crz4icpOJC/eSAyVeJDpkLP0MfJUIpodxtbleHQI/gbr10tu4f0Qhjl9ZK1EP5anTJ59 p6EZ48+Rd0gPgdwj8+UyTofe6m+GljeIcS8gIjneIUzCYX94oC7d9rxexre5Wkok76dy +hSw== X-Gm-Message-State: AOJu0Yxo8QblUvd3KVSIeGIo92H+VSePOg5xjhuPhePH5O9QI+H4LdtK ykHd3CWi8Z7mgDnPgF0ZlETjyiq4BKNUlQaETNhUljN82aFDlBKrvqKAPciOAYglGID1uUy3w9r D3cpZl+M= X-Gm-Gg: ASbGncuMeyxZWDWIN8wyN9/h+MVHNxWu0idGSOdki2MfIHjvq/vV+7wZpQKmZieivUF ZQeIQ7kimkJtZFpf7GFn9f9NeX3Eva/MvOzJ1bDEWWkAAZA9EUA6pXV3oBRx/aaJChRGb3YSTNy NGxSo2xDnKotJwlkfl0MOumrWRkI8fYK/gfHR3d4UTU31sAW4LWdpxVn3aYwMklz+/xJpP5j94d oRnB08OTPYTF4sxFQX5Fh//NCDa3LoqIL+prcdY1Z+B/nakB6TSbp6eUOgmlrKRh+mVJydecu1x /SoQ6KEH/p69eBi0QHAD+2KxcBXFjUbhsVMoe2r0vrxRdSrP8I7tIdgv3P/w2n9nbyFnw7XLXpq hKVGGD+tuA5E65DxeF3bChhf+Qnl6BoTd8waW4kv9mU11fmX7 X-Google-Smtp-Source: AGHT+IHJLt4uR2pg4sint1PgJP492LgUJ1EL+gRJ62gqRQMARnytUNP2gpvSqFbpOkk39O0vmKhtYA== X-Received: by 2002:a05:6870:3c07:b0:2c8:5831:8d4 with SMTP id 586e51a60fabf-2f796e1b536mr1609909fac.39.1751638875231; Fri, 04 Jul 2025 07:21:15 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org, qemu-stable@nongnu.org Subject: [PATCH v4 001/108] target/arm: Fix SME vs AdvSIMD exception priority Date: Fri, 4 Jul 2025 08:19:24 -0600 Message-ID: <20250704142112.1018902-2-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::31; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x31.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: 1751639046441116600 Content-Type: text/plain; charset="utf-8" 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 --- 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 815225b130..5c44a5dece 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 Sat Dec 13 22:57:49 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=1751639044; cv=none; d=zohomail.com; s=zohoarc; b=aWotcMwdRJ+DDOou8AtQPpCwvqC22H/Svxr5yHe+8ZKXknmFaRG0fvcxcCISQLShxFY1CXXp1mcb5/Lrg9J0/AVGdRYWXj+fQjwEDziiRScYQO4Q7saoXDWTJKCgimXGahsqaa9j0g99MpXUafFI1ISyMdJlWKQTEU3u2t8uElY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751639044; h=Content-Transfer-Encoding:Cc:Cc: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; bh=uH1n1AAhtH6sgiTrUxsUntCDDF+ojb2NWa6yE2aObVo=; b=jhcdteGKEO+/AFhjG2/DDe6h6O+UUqnJ1vmDB/+A/mxTrI5gpVkM5iMMnKGrjlEEak1DCUjYeVJvSyfS0cpSteF/TLJ4zJ2a4WLPvUU/IhW8uhSu192Ib7dI2KWOo2rIoRAKSj1pqNUcGJJBCkLDMvn85hWqoblOFsC3mq9ORQE= 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 1751639044873289.9134616974212; Fri, 4 Jul 2025 07:24:04 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhIe-0006KD-Sc; Fri, 04 Jul 2025 10:22:01 -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 1uXhI0-0004lG-DF for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:20 -0400 Received: from mail-oa1-x31.google.com ([2001:4860:4864:20::31]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhHy-0005E4-89 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:20 -0400 Received: by mail-oa1-x31.google.com with SMTP id 586e51a60fabf-2f766a60df9so453742fac.0 for ; Fri, 04 Jul 2025 07:21:17 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff0471esm528016fac.3.2025.07.04.07.21.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:21:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751638876; x=1752243676; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=uH1n1AAhtH6sgiTrUxsUntCDDF+ojb2NWa6yE2aObVo=; b=HYmBLvUQdwZiUqS9/rpH8/zYJNiDXV0X7VO31VycZZGhCJo6/gdKw2briqvmNRkDX/ QPIBmSZWX7dmiFxW2/AUKxof57dLoUI99uH+Vqnn67qGa5MPNcKm/kzzvWur9aKB9zT8 YQyb/cpeX/IoWWYL6/n/xOlYtZnIBo8JxuLA41Teq4c1jQCLzksdV8nRNMA6+J8+1AKO sqh4HI+t8kX+Mq1oXq8LWvlJUzyEQSh80te78upSd3/piGtkwFlRnaSF2JOIzBtlCJib mulseBCz/a+1tmIwMOziG2j2GhkJ58z4MMPBTAGtvVbaCyQUvwMQ+vNuI60P7rx5TQMd 9gHw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751638876; x=1752243676; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=uH1n1AAhtH6sgiTrUxsUntCDDF+ojb2NWa6yE2aObVo=; b=MBJA22EduyV0qmt35//EvZOgWChvO2iMW2So3qMh91u7G9aYqTzzgUPgNLSmxg1cDY Ra/EYInS0ZO7FPDupTLNVNm6ZhLMAfh1m0KOT6NzIxeLtR9/N76iGqynyugp0DxxJOeK gFX4gmEp9B7LdOx2FW3lOi+oITbeKLAJpMEpa3Gno+sylmtAkZ50BeGRzVFNHE16Oeou ZJVqfSkPQAsQhtLnho7EltrUNBwgHscpGqxFlkAGC+opkA9p6TlvFE1XqTlcGBnsVX8A anPwkAiXyR3Iv36l5HLMvI+bluP+7TGfypeiScacghOyZNCI6ymVbBP/H/QJvseoRWsp YQMg== X-Gm-Message-State: AOJu0YxhxZy02EzOU+/2KG3YtDzyN90Y1GwgH4FD+JtOqRRZiuRf7nWl WDbX8SaBvyBQcoGmmGdY4yJhsz5PDfYwXvHzAQEKzg90Z7MxZS7/grPIBczMC2iYhKt8u1+MKhG 7wFyRnJ0= X-Gm-Gg: ASbGncs3mY/hIJbF+v0ofN/Strf+c/PfXZlg3zMkHnk+EOUstZ3Q0KObOwwTN3zkKau xXodFPGT7Cs9iIVlv+lK3YUUv8gaB9ZLRlsfYeBmq8Moz+Z5EiWlxpdsuovkwbCm3ZizF0Om05Y +Mz//Pyzrk38997KCKbH1Af8H2z22le2EaS2GIlW5GOjEmncCDZ7pI6AVPoVwWK9rgBqVDkSzl9 /+N4MgVDYTSAj9ZCQNU119Jge9fhlv7B5xseJQTeize3pCWYFlc84uMGw67OMfrVwTenKgL97aw vdDqPZOhanacyR50ZhDUuf8FoHsmuCyHOgMyZdhfh1oRqgBYLvskjqJXHZ9jtuFg2yYUBSkBg5D LaKx9+wwqFsQBDHReUu4A9++Sc+uN8MQ6kDJ4Ui8cKayqDcpc X-Google-Smtp-Source: AGHT+IF73aTuzKW0uf4pPep6c5O1ATbMU5eLylPbM3FoTlzcHPd06oN4kGjT08FgY371RYSXf75L4A== X-Received: by 2002:a05:6870:e394:b0:2cc:3603:f05f with SMTP id 586e51a60fabf-2f796e07cacmr1772449fac.35.1751638876543; Fri, 04 Jul 2025 07:21:16 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org, qemu-stable@nongnu.org Subject: [PATCH v4 002/108] target/arm: Fix sve_access_check for SME Date: Fri, 4 Jul 2025 08:19:25 -0600 Message-ID: <20250704142112.1018902-3-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::31; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x31.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751639046491116600 Content-Type: text/plain; charset="utf-8" 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 --- 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 5c44a5dece..b0caccca46 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 Sat Dec 13 22:57:49 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=1751639070; cv=none; d=zohomail.com; s=zohoarc; b=KGQ3gnm8Xt/E8JFb19osG1MC3Ups5UA48EFIHiFDJG1O4X2Iab2txr/021umyK1wPWHmPYoEYpY8cZiwn7eSwZN6LHjzl0BrLb8f+xFFhAvJSwfUkRRp/Gdfer6T2OrrnPC54zsEKy6NyJitaeMHkvGQ9G5oit4k2xJ2nZp9Ics= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751639070; h=Content-Transfer-Encoding:Cc:Cc: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; bh=NnYIgTjrefVXMIwRpQeonLtnboMU7zvlsKEAzjPk3zQ=; b=ilroCdOAf32BHzXb1DaayFMgDnuecL9CwOd/RM5WcUDGdNjB3hUC/2B7Qf9Rs9pkxmO+I8EVSwefAZO3RVKfVEzHkg/X0pAX6jaExeCj2c+MbEkmWQJbh9/yrfQWr6cCXZaMticjznsAPY/gL7TOFbpTUQ//Do2Qnry/gZV1pW0= 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 1751639070268870.3993540340001; Fri, 4 Jul 2025 07:24:30 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhId-00065h-Br; Fri, 04 Jul 2025 10:22: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 1uXhI1-0004mu-7v for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:22 -0400 Received: from mail-oa1-x32.google.com ([2001:4860:4864:20::32]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhHy-0005Fp-VS for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:20 -0400 Received: by mail-oa1-x32.google.com with SMTP id 586e51a60fabf-2cc89c59cc0so1315367fac.0 for ; Fri, 04 Jul 2025 07:21:18 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff0471esm528016fac.3.2025.07.04.07.21.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:21:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751638878; x=1752243678; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=NnYIgTjrefVXMIwRpQeonLtnboMU7zvlsKEAzjPk3zQ=; b=XUPdBFsIZgcI1RQ0v4Pvquhrc+FDhTHrTE8SHMGwMidO7EZjcthjz6+6Dev2zOP4+/ ZgP6nVLqq371IurKzZ+ANt+WG8mi1UmCKsDJypbAkVcYfIeG3ecAXidVVAJkyQUO9wES 7P/GQMTQnmCVGq/LP7x0P6heiSM7f0wZM0e01ENbOy86OzFod3kR4zGgT/C9DJ3PkbWt 72NQOCBIT0ldn+m611DDSEQSv1as+PuVxbzic+blVv/Sj9Wb8EoChNGkC8RbyDLtozrg 8hk9FzHdsSXNL7/Ps21XcDhTR0t7lkdxV4B+jKADws9X+Vq+4qyx50i8Nh2YpP1PlRiG 8vNQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751638878; x=1752243678; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=NnYIgTjrefVXMIwRpQeonLtnboMU7zvlsKEAzjPk3zQ=; b=s1VQSytdZDrfOK8kXkQ32cusevKWamSWtbsxAeaPZEy91aVIOIn/Ece+t98hdneWcs 2e0kvgA4klIrTcNVVN57AZmng/UsWq2hCSjn2uNe69mBK1hQwBYXu70I8L1UR4ANqxAS xAiYe5/hMvpSnk+smXQa5ZzXjKGEBkRvuE3pPy4QtrAhKVx7nB4Me/w+REyZ4SL1HNwE a2myDLt0WeK07Xp0TWmrcZWkIDFwIHhDXGTzE3d7msxL119zS5CItznlnSr7YJGK7FbE MaLRgv0fWtaoOTXinlO5NWqEFEYtcAjNfdO5lxU5QQxYAaODurO27fHQYB8xX17ZJyFi oEJA== X-Gm-Message-State: AOJu0YyrXBErIj9JSAmyIHx4B2huHHiiMGzMzw/w0cQRDZuDGw+c/41O MLbtDx7qR7eqC6UJoCLRiKK47QWN3lw2Yp9kiOaHKxgGvOAEmh1+hrfFBLRxtt16t0srj7mCAfa FMqYvI14= X-Gm-Gg: ASbGnctDqae1vJeSRg0qVL/ihIb/0G4gYCpMm17tIbd7m0JCG5/FDI5k6PCgw2gvKZ5 G3U9gzoCy/oFp2wQNSPoRzU5m8KLnkTMOrzr7SvG/mDUgDDu6KjZ7MXhk2GtMBwxO/nXAum0Zbl ETepxFWOhmc0sRDaQQ6CK6/uGJz4DYLVNPdZWBrKsIaXcYbaYTbmsPPHIHMVqfW1Q8oozHHUPTr cJ4KML2zEjL22L6WhKLqzMjYd/uAkWAUCM2MA8vyy0DLl9p9L3zI5R8GXPAW5cCffts/3nRbbyp dNvZ1zxyGAgQmMhoWPPCt5bR6IipvdPYhRhlrjyHn/YXoRQtRYGl12eD6CD1YekyXf2iopeHxjW kW7uFXS+1fBLwyEuojhM5eox7xyFkEm7H9qDWHjwYbrfGX5Kd X-Google-Smtp-Source: AGHT+IECMTo9kT0/+J+3spD012F8Uh1nRALyK20xNw/wxu1LHn0o9eurWMQITqJCgDTkqEAbVAbKXg== X-Received: by 2002:a05:6871:e706:b0:2e8:755d:b4e9 with SMTP id 586e51a60fabf-2f791d772e1mr2080947fac.1.1751638877650; Fri, 04 Jul 2025 07:21:17 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org, qemu-stable@nongnu.org Subject: [PATCH v4 003/108] target/arm: Fix 128-bit element ZIP, UZP, TRN Date: Fri, 4 Jul 2025 08:19:26 -0600 Message-ID: <20250704142112.1018902-4-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::32; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x32.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: 1751639070615116600 Content-Type: text/plain; charset="utf-8" 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 --- 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 f3cf028cb9..588a5b006b 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 Sat Dec 13 22:57:49 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=1751640776; cv=none; d=zohomail.com; s=zohoarc; b=Fs7/4TS5KxXhLAtI8ZVpqvm2LNSj5qctLMorXrw7AEIgMBAqOxblakia/8/5uDRkxANaMVVDu2i4FwkvIyEd2/1Jfr7sDAfOjmnWytxsJyYbALFdUmEKC9qPlAKiSxGQmmd2MayDwsH05YkZNofbKKgSbgct3N0n9ZR6KWV6fbE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751640776; h=Content-Transfer-Encoding:Cc:Cc: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; bh=xhDz0SUl+MnN71lAnlARYts8N3jBwawNRBYzEstPr2g=; b=WSF9vAxqM71/CF7pE1FZ50UxyLVWkTDzoIBQjrnbPeFyxcWeC3h4wWE6cmCj55z1JiVs2X1Vn1dpo9YVq3poPkMajzfJriaKvt2wrP1UHnY9nGeC1zj83jaOIPV7qNmot/EJnL2CPlgBMZLcLoVuqmDnzFjuXy5+p5ss8/1Q3T8= 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 1751640776144424.8709531188118; Fri, 4 Jul 2025 07:52:56 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhJ0-0006yA-Q0; Fri, 04 Jul 2025 10:22: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 1uXhI2-0004nD-2N for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:24 -0400 Received: from mail-oa1-x33.google.com ([2001:4860:4864:20::33]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhI0-0005Gv-5O for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:21 -0400 Received: by mail-oa1-x33.google.com with SMTP id 586e51a60fabf-2cc89c59cc0so1315376fac.0 for ; Fri, 04 Jul 2025 07:21:19 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff0471esm528016fac.3.2025.07.04.07.21.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:21:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751638878; x=1752243678; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=xhDz0SUl+MnN71lAnlARYts8N3jBwawNRBYzEstPr2g=; b=DPKconh6sNJ85xBvt0PpJ9d4SVgKtAtT8WLR28+5O3SBx5V/xYTbU9+u4Bzr3v5kXB Liu5EIZrbfvTDFnEO2bpQZgtoKgN5wnhtvieY3SxfEWQ1+KeQQDCLDCc/0237ZeuzrXE yv262H0mwe8KpDH0XNc3CXYinKK5KpXO4fpqUwX4zvHWPr4/4QR6T6fym5YMvl3yB/Wl FDjrenK4AoE7ReeuHNwFlmlEyqtdcziFTEFbF1+PL9MWE1+VI/U6L2p+9OdbIXGC38N/ w5pw7Nm24EmItykaPu46hmRfJAx15EstDgcUFrseCm8cbp7SM16mlPLMYH6GGt6aUtbx IDQA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751638878; x=1752243678; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=xhDz0SUl+MnN71lAnlARYts8N3jBwawNRBYzEstPr2g=; b=OSbcWH1K07BEv7al/IChC7Qun18HoEcRYrrckAoobwZmslhZheQYrjLRbkphUFGQBs j+phVuxSW7z/4oc/5/d6iAKePVxo74KS7up7Dug292G/RoJFJ9W6IYkTJ2Q0NoDtf73n PNYdYipMGXIcTAOre2wiEI1PADdsviYsrYSvvUIc1I4JJ1WuAs4QWVcjYdOh3Y80ru5L QFJPN1WtHqNtQrIj4VvJfz0TyDp7nfTQfl8OvSj+4sl9aQIwQh+/XSBYot0Tw/JKAaNb MKXCEra86LKhGWgkLJeCcegL44INsfqrRTCjmNcHdpMsS4q4iU9bHQCGNdXIk41paReP Xu0w== X-Gm-Message-State: AOJu0Yz8SuzxwcsQbesjeFemAbwpC/bzEu6l8JsbxTWLGAeOJlisPBA8 zZ2WExIrGlMPiO7F6CDeG+zPy1ZYKAUvM9bEuUncDT0MvY+Nll4EC4QtUBeJ4ud1pExv050cZ8f D+8QgMgQ= X-Gm-Gg: ASbGncvEUbnDio9Lgbot/6MnFeEmw2Q2n2ecD57BpEE2TGUZTk/XwPSFXwGz7cjiMDk yIslqp78u8h/yAZtThGHRwRB4eWSNKFTw/KrYeVVZSS5chDuEyuJ0CQ3bHSF1Fr+6dMmL8biOqo NGBFuYNFRTfYqiOHbC8iOmQ+V45Ge0s5QoEC/vPsxI5D4zPOJTLYFffItGx0RFBPVmbSad3kwNG YJmXd4TzRjVR/LRVaPsn+nDkskRSGbRR/OXCrI+4zzl5Wk3cQyT9cfIlIKeNPr6OLulkLUqdwMS bKzn2BWL+sXAazIhX+FXm+QKt1pDJS36L2CbVGJrtJ8JxsJ854Y2ih29NbEuZvdfmMSwDM/h9zJ WEQzdyj5udrO3Ap/GX+PyIPHeP8dEi7Hk32+lztjTvxOT8B1P X-Google-Smtp-Source: AGHT+IGg671jIraVDxAvE2MRcLuxypunc+1JUICJHL2cEyTctaVeRyT6YmJi22h2djXCYeHKSQroNg== X-Received: by 2002:a05:6871:798a:b0:2ea:1e58:7a69 with SMTP id 586e51a60fabf-2f792038bcfmr2441413fac.15.1751638878466; Fri, 04 Jul 2025 07:21:18 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 004/108] target/arm: Replace @rda_rn_rm_e0 in sve.decode Date: Fri, 4 Jul 2025 08:19:27 -0600 Message-ID: <20250704142112.1018902-5-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::33; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x33.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: 1751640778627116600 Content-Type: text/plain; charset="utf-8" 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 --- 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 04b6fcc0cf..3a99eb7299 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 Sat Dec 13 22:57:49 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=1751639044; cv=none; d=zohomail.com; s=zohoarc; b=BgbGm2WkAORUdq+ZPNYI6zOG372/AOUCBxtLU/hqmBMVZtnEldJRo/npcfosPYDOYAxzVbbXGYtWDolrDdCOUIB9bDlG0ONg2FsAUrD7M42idDgiBO7Y4b2u8fZ2oWfkKY9YRqaB1V7bmzhTxK61jeC+MskHnEgMfld2tgGhnAU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751639044; h=Content-Transfer-Encoding:Cc:Cc: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; bh=mmz/p7GaB8icfuoUSX82GiopD2WLwMfn+lK0i48knrc=; b=Wv00bdEHwJnNNGSSF3j0k5X/oqPWhAFvmdrxY9wP91bc0vdYz3z19Pr8kQnqIfGet06WNUiBJH406qKBu0cM4g0rCR1K7DOIWzY4Vun9z50C630pEaNBrfv1OyhtYBvJnR9qLacPOfcxsJR2h8VefqILhcu2uFcLbLoL3K+M7Oc= 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 1751639044686365.11676195750965; Fri, 4 Jul 2025 07:24:04 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhIt-0006uy-Ih; Fri, 04 Jul 2025 10:22: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 1uXhI3-0004nM-0s for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:24 -0400 Received: from mail-oa1-x2f.google.com ([2001:4860:4864:20::2f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhI1-0005If-9t for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:22 -0400 Received: by mail-oa1-x2f.google.com with SMTP id 586e51a60fabf-2c6ed7efb1dso925819fac.2 for ; Fri, 04 Jul 2025 07:21:20 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff0471esm528016fac.3.2025.07.04.07.21.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:21:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751638880; x=1752243680; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=mmz/p7GaB8icfuoUSX82GiopD2WLwMfn+lK0i48knrc=; b=hOKuzM4pkzE14IWLgNLRgjMZJbvoW7iqOudf2nzxm9DMWeEhQql27wJAmrSDa3o5db CrrwqI9PQ7ukWWK7bNsOeA7uIJIMAjRHm9jOnyRxvEg0594mEH/aLFbkOil7pUSpJ3wl nFduKGg7Zc+5DW36eSPQ7ueRZY3mJm1JDrfnACj2g2foRb7KLfrEHKD5ErhR96jUgc7K jvI23T+477+7ryR3xX8Bf3kGkL34uVC4V8MW7+4Rt/LUm/Wof+k7YCfwsZUG9vSd3KnE JnXanQ+SZ51emAdLXcRg36s/geEqV345tEpwiEtMzgs+x9gGWBVNkOwQQ38zGHcJlRMJ wPNA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751638880; x=1752243680; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=mmz/p7GaB8icfuoUSX82GiopD2WLwMfn+lK0i48knrc=; b=sKqT6cmLjl0RvZ9xRVS1oU9+HpMxnzvHe63mS2e57jgzur/5uxWSS4XODO3NNkSJPO 1vZhe99D9RYmBsDTwAXBUXJnBKtpqqjO0gXlMSfyDcyD3v2S2MvJJ5RNShzRmgjSfKQR +ZCwmwz0jcsrkfLfGnedlqHgpDFydMRTjQVfvSt+k6dlILNtSV1AkF3rjIVlGsdx15PW TSAFn1ylaHBI/NRN1vU8L7wBmEb23Bqcovd8D3LXwEhrh1KmRX4fmTpk24WmKZ59cC46 b9Zj6C9qBy2JTt3u3boXehxV5lmEWRd2/YS3tFNNqwEuEBbZ9hF0CcvxhTjgXqKGL7Ur ptjA== X-Gm-Message-State: AOJu0YzrDYA7uxZa1EIfCJTYvkr9VO9wRKt3B2L/vtJGqJ7cE2OXF8ao Tkcd9CiFcc/3d6a7/32rItX5Q0pqapadnkJZY0ODpQxRYe2Tk/s5WtzN17AYjUHZk/dcGMVv2X5 F7Sz2pk4= X-Gm-Gg: ASbGncss+ayOqoeCf4S//YSSmPY9TVfMqROpzve0Qw0f4JaXQCWEtt74nRWdDmL41eZ iPIBFsYncHHMocKnL3IRhoULPvS4kITpuj6sAoK2QCR4/YGfLZD7xaeOB8D1kGI6bqHNF9ltDJM SNI/jzmxMfjZxiXuAw/QhkLeo0rto0mNcFVL0ZMOeJYMuaRCSBi8mczHAOyIkZ/OBcE2nu38Dvo sNBMhytNzSpbXJm9rk5n+fGl9/KpNAqdQ2Gf/VykArCi9G7sd+AnY/DM21SbvVLeo3GlFbz3DUJ 9OqdaP051sw0b8EpWgjlbc7qKllmaNQLkizLznugM0Jz5ohH92vf7ij+x+HeFzXABM+VAlmH1pE sVOTORV66QiXtS5RjB7qGApTc2mLSUFAGr1DwBlMTwUC1Vefc X-Google-Smtp-Source: AGHT+IHgwTE1QrfgGOgCG5B8PO+nKbWz1RHH6IUM/bQ3ob8xAyS1F8IBz4vrHqcQks51SYTcME6rRA== X-Received: by 2002:a05:6871:2313:b0:29e:5dfd:1e17 with SMTP id 586e51a60fabf-2f796da2715mr1696687fac.23.1751638879865; Fri, 04 Jul 2025 07:21:19 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 005/108] target/arm: Fix FMMLA (64-bit element) for 128-bit VL Date: Fri, 4 Jul 2025 08:19:28 -0600 Message-ID: <20250704142112.1018902-6-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::2f; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x2f.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751639046414116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- 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 588a5b006b..a0de5b488d 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 Sat Dec 13 22:57:49 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=1751639066; cv=none; d=zohomail.com; s=zohoarc; b=I3MpFDkZCArslox+qUi1oVlOmnRrztLFYxUt+/NIkdpWKHFsmuON2G0Dk+7V2R+SXtO5GhE4odNgaZIxyugGP2jf4cjL84wF35/M4R7k6JFeVJJyrM0/MjZFXZXAlWzPmLiap1e1CdvCt54wzA8Zezzs0jRvZNZxwU/i8El15Vc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751639066; h=Content-Transfer-Encoding:Cc:Cc: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; bh=SujQ6LdtijDSv29ZxZzc+699lWE9s+/bKoHsoQqj4yY=; b=cpnugxq9cMJRX4NbUhepOF7t+TAEOCxshMX/M/D4zP2T61M+1K1PyuJvyYpI2fBdBr26sTUWx4jx1nlaskZFlHxL++BGPRqSp4fCHFF6Uk3nYPsnxM09mqCFApwzaR0APlZhbnaN/VOMWAE4eeQDwOyVYn7nniD+agUMa3p93x4= 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 1751639066475767.8105089192857; Fri, 4 Jul 2025 07:24:26 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhIg-0006Su-Kf; Fri, 04 Jul 2025 10:22: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 1uXhI8-0004yN-AN for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:28 -0400 Received: from mail-oa1-x2e.google.com ([2001:4860:4864:20::2e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhI2-0005Mj-UJ for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:28 -0400 Received: by mail-oa1-x2e.google.com with SMTP id 586e51a60fabf-2ea58f008e9so1149842fac.0 for ; Fri, 04 Jul 2025 07:21:22 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff0471esm528016fac.3.2025.07.04.07.21.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:21:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751638882; x=1752243682; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=SujQ6LdtijDSv29ZxZzc+699lWE9s+/bKoHsoQqj4yY=; b=TzfqLhaA4GgK8dSDMg1dCX1jR9ma35Ryg0GCpmpYV/RkIdsYj4UJB0ej1B8htaiyYc U/Ym1AhEgv1+8yj8Sarg79LpmDgycYYr1qe6Va/FwcJtyNjSDcZDrj/4Tz2ss9TEHbHW 2LWApReH3Ofy6bUiRcvthHS0nn0dFJ3jv9LpitCp7v93s/0+zrhrocfBDqPLVG+hdFtL jPxaJWTFj7aSJ/h2OPkUO+hkr8XriTv3xk7ubci+ZvqJCUbJs+c0ScTFMPaTdKU/tA/B iiBCiTdBvPAia3iF2HXlCO2qyLC6Tl7bFeLJnpezcr/SX7D/lTDmGWS6XbSRyb/xQJcg Qs8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751638882; x=1752243682; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=SujQ6LdtijDSv29ZxZzc+699lWE9s+/bKoHsoQqj4yY=; b=NvmxEY7+OKYfOdEsUOkpLaKI2qZl6lYeT8g3FYigiUIRjT8p8MFEHI5j5gnSqRCW4y PClOxlD30NmmYvuOnVh24DgqO+y4TsJhx0t0wCCrzqhHfzSgN0VA1hrQ6LytkR/xfCxd +WrYR6UG66ZZmEKtBgKAWVm2Ns0m5eczbZd+XKqISidGHUn6j70rABvBaIdw+pZ4DNcw oYAPUNlTReBx2Q/w35s8VM8hgnIk0SHMmEKzRP/BsthdcaBKot5IeIcXAZIwo2exyE0B TZTDsjXQ2mRDKVCgDVglv7SDXNl9AGuSsAygyAQ7pnuCBIUPTCAEbdpYfHGza7zWKe3F +D1Q== X-Gm-Message-State: AOJu0Yww7htyE2iT8gz5fLgVQuC0CNyZ95A8rqSoTgfG4yLnAsemMvIx o4RCr9662PhFyA7YeLWT0F0vE7hYtSG+hRuQHlDZs05MJHB4twIfh7r8m23QXtrkC0RNNdmT3Sv vzcsU8FE= X-Gm-Gg: ASbGnctwNkU9EP3hvo/Y3UMgoIYAPR8hlNFSCDgTYgYo/0osS6+5bczT2tFAO8fnhuz /Uvm7uodROvGrZAMUKcqDwwkJSnlp+JRmB/IazQSE8GYLV7wps/f0mxnGPjHkIQ40Rd5MbrLdGE cVho3K/gXl9TRxL5AyTGQzPj8K+/WTdOxY0AS1H08dRNVDImmwm5G4aptYd4/nzhjeuHtclUcIo JOd8RlhTvZ+Nn7G+YLttl/H+IjkSdlNrtAkOpPhvXLHr3jSfUePt9kbdy8Rlr/JwlYlzBWyC2h8 o0yz5+3vF5vkC73KnC8lMVVCLP2nmGRN810qDvK6MvX9AWbsAtHtVKHZrpR4JffCptf7CZ4H8SN zZf9Kgmj3fXWK9lcQ+EfntODtr/dvgTPnPCTHfvrG7ON9nRgN X-Google-Smtp-Source: AGHT+IGQaK8REYNViSqnvHti/D/YZkMZFAl7gl383z8/op8p34TaypQLVhr4snoy5SaQnSnDdocYjg== X-Received: by 2002:a05:6870:c086:b0:29e:2594:81e with SMTP id 586e51a60fabf-2f796a75f48mr1758726fac.13.1751638881021; Fri, 04 Jul 2025 07:21:21 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 006/108] target/arm: Disable FEAT_F64MM if maximum SVE vector size too small Date: Fri, 4 Jul 2025 08:19:29 -0600 Message-ID: <20250704142112.1018902-7-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::2e; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x2e.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751639068846116600 Content-Type: text/plain; charset="utf-8" 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 --- target/arm/cpu64.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/target/arm/cpu64.c b/target/arm/cpu64.c index 1f3406708b..77e7c4a6a5 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 Sat Dec 13 22:57:49 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=1751639041; cv=none; d=zohomail.com; s=zohoarc; b=DW1qOkMWJLYSpYVjQfm5ADnV1CYG9tzgWj4q008tD+00DaJPg40DLDFRMv3wrTpGfoZewqDg4CwnJZZnjc0MMExfsgD7ffTF/Fcq/OEZDueg4SGr77H3iuE+sOKdl7GTF1outZaxV0bJkhevW2yYitcgMo+NQ2BO+Nmov2FJhME= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751639041; h=Content-Transfer-Encoding:Cc:Cc: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; bh=Lx97SAEIj0LDjsKZhXBcjsfLl0dzyMaFjd8rhTBp/F0=; b=lBs10jIFA296xf7chX06XqDBUpuP9rU26q68q0rFr+ZJygJ/2DbmUETn6Bru0kbF56oIjaM4WFhNqb9dPVZzdJ8/wkEA8VEmpDXypU0gNVqZsjw+WAycsrySFOrsufKzqA1FRPj5sa7nPYqULY1a3Axzl85L+ahqTWJPC8dqJ4I= 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 175163904097165.09782023099376; Fri, 4 Jul 2025 07:24:00 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhIr-0006t8-Td; Fri, 04 Jul 2025 10:22: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 1uXhI6-0004rC-4F for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:27 -0400 Received: from mail-oa1-x2b.google.com ([2001:4860:4864:20::2b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhI4-0005O4-1r for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:25 -0400 Received: by mail-oa1-x2b.google.com with SMTP id 586e51a60fabf-2efc0ed41efso403625fac.1 for ; Fri, 04 Jul 2025 07:21:23 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff0471esm528016fac.3.2025.07.04.07.21.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:21:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751638883; x=1752243683; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Lx97SAEIj0LDjsKZhXBcjsfLl0dzyMaFjd8rhTBp/F0=; b=kIVftFVBbXin13GdWsgxGe2ctjmeUr7GFwf2MZkhEhRLKKfNCzZlLJR4bShlgwvk+C 9IRFXe61rCbtBeXF3wyBrPZXDEx08msyRErdAt9WPMp7Udk6/gj3yeMfXwpH29KVQiPF o1mDLDkxEPRVQmAZJOgN+YWlxH9rUKdbOalQrJfJSYA9Ul22fcU0xyxE86DAH0C7hoI2 B8vdms+V0AHsNs/WUJd33qLpYjACeH7QJZGNNn7lTX+dUv2594CMhGxVR2EKBBQTU9Kb pw5Xx6ga5xKpQmzmTnbbDG9LX6BmghN9wAyXiJaoT+iYGJvVi1nsjhIke7N6hqTNjw/t 65VA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751638883; x=1752243683; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Lx97SAEIj0LDjsKZhXBcjsfLl0dzyMaFjd8rhTBp/F0=; b=T4vR+umFzGb8u8gPkBPORdW0ex46inP/ejxA7BfzByBd7i6XQUHvaZcKq7QQ/EPrF8 0ocOw+6QuoZrumO8VYoNrbaO+gAC+q4BZLiavywpiujMRSGuajgZQjJHXplmCwnRsSL5 nzVJs3NrGCpwEwOSzpG8brZDB9ahGK0fsJSk6VEXD9WsJSQcp/unJiQBv6uOwfBrPz0v qRE65UwWil2HZysq6EZbIQHO2vtHrLBy2vL9XOG0u+3ZwW/pIxz123zTjb06NwH090+H E2bN+SovyVO36VBUgq/AH6FW/sgF/MgbaNZxcHdMkeBk4KVu/fIJpiIuhbtpLi68aB/U U0rg== X-Gm-Message-State: AOJu0YwWN4ZP4cCcyeVMCBp5a6bVa2Y2FbYSs8KaU8BG8JFpRTVda/TA p86mYIbjiOEeV4u2cg8V5ImRZk69VYZq7+O0uUpZNDiIZRlkC90I3njhcJ8MPxhemAtWHn3F1cr RJ5+QGyQ= X-Gm-Gg: ASbGncuAaQ1hr8AL3mVsmeHpzCgm3R/9zWXP1ISuLoa6VZYeXaZbAwh+sU/F8m6bb6L n5aG8AS12KDNqN9yvoelsta1AB3fj9NLgVSxKEiYOrHIEv7qci+cp6OmV0WRDMilwNXLmNLq56P qz8NJ+alp/YVrJBeyVQX7gSz0D83lNBtqMofr2Otd67+LmlQRzJsr3ePX/Kr6i95qhBRyjUmWCG qRbKZKlTVB2k29sp7z1/uCxXt/sqos6Y6StaTpzCIOSOVdjAKR0Lmaw5xCy8UETG4fu4G+5lvLn yDho5HkETjYdTC+0gYyBrzL4xbXbC87zU71wcE/bDpggoRGlQL0TSqoDtmDX2O/tooTHX3RXJdZ PDfX1dGLo/NzLTMYQbFDc8/EjMMG+DfIi83vz3lBxdAnnnntiZYSGAIbRjv8= X-Google-Smtp-Source: AGHT+IGpzm501h5G2J6DnF5qsiB0hwrQ6xRFhdJfgHXvWUzBcq4T180G2h+QGsDyt0e5yXTcupcVtQ== X-Received: by 2002:a05:6870:c14e:b0:2d5:b2ae:2ebd with SMTP id 586e51a60fabf-2f796cd72fcmr1738180fac.34.1751638882899; Fri, 04 Jul 2025 07:21:22 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org, qemu-stable@nongnu.org Subject: [PATCH v4 007/108] target/arm: Fix PSEL size operands to tcg_gen_gvec_ands Date: Fri, 4 Jul 2025 08:19:30 -0600 Message-ID: <20250704142112.1018902-8-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::2b; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x2b.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: 1751639042651116600 Content-Type: text/plain; charset="utf-8" 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 --- 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 a0de5b488d..8403034a0e 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 Sat Dec 13 22:57:49 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=1751639570; cv=none; d=zohomail.com; s=zohoarc; b=kUk90bjY0cZhFc7Z2J3nsuasefNmVFgfZnBM7dV+7I0r/nyomnOnPHfsL875BQ1PPy/6veXV6ykg2V/+e52sk48KtIAS4efH8f4Eae/9/CBkE4LBPiQ719ZOzNFJwPGJEuOh9QsCVwsb3NsNWPe7ZqceO1sK71ii7tH+i8t8dHE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751639570; h=Content-Transfer-Encoding:Cc:Cc: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; bh=RfwmDf3/yL1RuRZgQLbRD4ioWrvuc1PHMAmmtaTrtA8=; b=TEJ6MUGNlKK14bTojWf40sMgESccts8P4Pa5KppojGQctru8G79pJXAVJoRs7aZA03UxmIS6fIvvG1wgXxSKLbELSRUEZDJZ3a/WCskpT/JwunyldloTNhhDZhbDqAzeNhUzAHm6iiG4Mdaw8fXDG63PYXXcqTyPW2u/cGo/YvE= 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 1751639570947757.2896485546873; Fri, 4 Jul 2025 07:32:50 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhMY-00057H-2Z; Fri, 04 Jul 2025 10: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 1uXhI8-0004zD-Qs for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:31 -0400 Received: from mail-oa1-x35.google.com ([2001:4860:4864:20::35]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhI5-0005Oq-5j for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:28 -0400 Received: by mail-oa1-x35.google.com with SMTP id 586e51a60fabf-2f75f1c7206so363548fac.0 for ; Fri, 04 Jul 2025 07:21:24 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff0471esm528016fac.3.2025.07.04.07.21.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:21:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751638884; x=1752243684; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=RfwmDf3/yL1RuRZgQLbRD4ioWrvuc1PHMAmmtaTrtA8=; b=fgfE3BC7qkG3PEH5pGXO6BoEj7VAQZtiwtw8QUySekQ4yJ4JyyAEzzZitaa8BRxNY9 AMmmTx4g6g92ccsbN7vlwGr2+D6/6A3tY9K/nJLDSMc7vZQSmbOzpdHHO/SGVGFRq83n S2p6KhLCsjJIT7z70Hxo/6rV62aPqIIIVaU8y0P8s/VSR2Fz1969QYSDwhlKXYZ0/AQQ MSFdrUJUeUIZ9EbsatAmm8EE5oEicVUpIw7AQCZF+TgLS81P2o2xaO8tgjvxvqTb8Ae/ anFmvaN0+9tqYSGl8KCU3KCiE/oO43ZeBQYlyHgwoUnB0qBCXTA3U0yz27whMfryqgKu 85Aw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751638884; x=1752243684; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=RfwmDf3/yL1RuRZgQLbRD4ioWrvuc1PHMAmmtaTrtA8=; b=S1ZvxRmHzUdBaVbzJzW2vZ+b/F4jujuGlCyc/rbGTPR2PD4sTIUTFBGVTEYyVtTDpT Zj3S9bKEsXDkNsAnqwzOk3tG/eIrpEGf4uA3CvbWB4CW+GMsvGJENHtPD4xPF/u/dse6 DmRJWPEjrm8+9qglF+r+vpcZHmkOhLC3yTfpCkaBjwJUBWgPOOV/Xg6u//LTcI4M7wH2 QDPyefNwtEivEDTZSVROOFHp9MuJdUxfECKZEJGBp/JEwcdaRzYPdZFnMEoXh81YPHzV lAC2YTzJq/VubiwAWN+AbuYREfX8xXIGCoZzoefxi/5axTkI6iCuwjm9qaRnxC12MvVd Clyw== X-Gm-Message-State: AOJu0Ywq4HocoayURbXZHXroeravRD/eF+Ds0wr1RDPyDus4f+uJoruF KbtrDwuxDS/SeTH4wiRlkTHJZQfwzBtg/0kwy7Ft+c8lQge230LLEpNIyZ77HfDqEK1qX/xpxHR YQActqDA= X-Gm-Gg: ASbGncuGxhRKryjtP+44TpiJ/z++UeO0k/Xwu6tuobHlmBPwfEiPB9eEd1Bjfa2aQfO 6bIPj3/w2esstz6YewSXsdf0TDmsuQHdfLZwu2jXMwbLi6s0UsDfaHX5FABtuEXZLET2kk+vY4T c1Wfg8tFtrqhcmnWnC8i89DsjlmmOBXCMus8JiXNVlfKv98bUzF1lak5iJD/YyjP1/EoE5O6ykT IeHca8RLuhVJXojr7Isp01kjxiQJgskBdQgQWP1fAunWrdBIOJnZxxkJK9bbr4paP3RkL4y3nBE T2hDZVUe8v1VW+ny8uRJbwlVIOGt1d/8ZCmucw6X9paBGNKaOMvZLRLdJ6/SS3xJB4B5Gr22KtM ZtVOTrx1PljkKEXJrKnp3tyIGoz/ncD7pnzJcfBgjlklu2kqV X-Google-Smtp-Source: AGHT+IF2EiS2Vxv5WDDApOVLg5Ch3vC2oNqi97o+T5VRfHtUPFLHuiU+rdYsg4iBfQZTk2U43VCpsw== X-Received: by 2002:a05:6870:a351:b0:2d9:45b7:8ffc with SMTP id 586e51a60fabf-2f796a7b418mr1595963fac.3.1751638883993; Fri, 04 Jul 2025 07:21:23 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org, qemu-stable@nongnu.org Subject: [PATCH v4 008/108] target/arm: Fix f16_dotadd vs nan selection Date: Fri, 4 Jul 2025 08:19:31 -0600 Message-ID: <20250704142112.1018902-9-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::35; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x35.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751639573270116600 Content-Type: text/plain; charset="utf-8" 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 --- 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 de0c6e54d4..8f33387e4b 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 Sat Dec 13 22:57:49 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=1751640495; cv=none; d=zohomail.com; s=zohoarc; b=QjDLjIWFp+BfS+0dLUb9YBcMYrnsvUlMbN3f0tihIodAGEHql5rVgI/4B5ihsiHjffViCI9qawS3yfzUsUQBr0N/wVnMaBKaprchvVVV54WmVq7xKZXC7HFRWvbnUhVBDnECIoQd2wRqgp/nfXRaa1q5y0qmixsUGdDUB2/3AeU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751640495; h=Content-Transfer-Encoding:Cc:Cc: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; bh=1CvnYhdClMbhruEBotoxV/Si4Ta54uQOuX2WFi9R0V0=; b=Ubk0Mqu/UfVf43SOhcgFZbK9Rk7jf5qdMBZzipfTV7u9vDkLtAjk5iBvyJ7bJ/dsNqZnddYbXit7jFeaGpHseFQrYQ3Cx2rjrC90NpXivnSGgftRJ7TEYVdK91e8YPv3EfhBCtLb0k+MXJkEZQOudmPPxYMJfTI3GOOGKxT2a6w= 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 1751640495929546.4240187653959; Fri, 4 Jul 2025 07:48:15 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhKk-0000dk-Jk; Fri, 04 Jul 2025 10:24: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 1uXhIA-000502-98 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:32 -0400 Received: from mail-oa1-x2f.google.com ([2001:4860:4864:20::2f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhI7-0005Q4-IV for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:29 -0400 Received: by mail-oa1-x2f.google.com with SMTP id 586e51a60fabf-2efc0ed41efso403637fac.1 for ; Fri, 04 Jul 2025 07:21:26 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff0471esm528016fac.3.2025.07.04.07.21.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:21:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751638885; x=1752243685; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=1CvnYhdClMbhruEBotoxV/Si4Ta54uQOuX2WFi9R0V0=; b=UX6PdGV/ZFIMkpM1pUk5Y0BJaIH+zz4o311IvRfnJkjhjdeqiQSOibwenV0csP+LZu uL9jcIQHRSf3N1LSO7MDkTr1hcf+f//1gukPD7Ejyd2LSraQTI2w1jwdVXVCFbEVtrFL yVmq6vRPuW3c+vEhoSXeexxSk6xal916N2x7K5kJv9X1KvqNa652CiFldnBo+9zcCRHY qTPcUe/mYgJ9uokyG8g/eMtCh/beUdu+fsq3qoEQADIJW0fYDV618GgE09kZ00X649M1 UZrdfsafO7Szrogf9Q3Fht25FjnU/wXz8AXzVvsUTK4YxuaXEj8dXQ5rm7J5OR8SCHe5 eGFQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751638885; x=1752243685; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=1CvnYhdClMbhruEBotoxV/Si4Ta54uQOuX2WFi9R0V0=; b=oAgVRPPnPR7LZxJL/VK+Rei+LDqrjeFID3f7NlbX50vpkFrV76N8d2kNojcS/yKqu/ spdKxGUmIew0otacSBDtIR2ZqBqfKfmSaJraj09S1ztHFbXYfIYEp6os3SNYURIVwmRR 1Bq6/rKYb7uNGQSqTgcWoqVWJTWJ3A1UDnMEm/rQ7GHJJ+NB/2qJrSeHWSICUs42eJJy xYo4NvOp3J45rrHFEKN24d15h00ZqdIizpU0aGNNSHJCAV0Sl9nTq6aVEjFjGm3MV0pH OblkFBfsFsaULPLhlteOIxyCohtrPw5wSO8KXrDJW7QYrq2okeNszZ9tmOj34nddHsxG T+XQ== X-Gm-Message-State: AOJu0YwNsfjACzFv+lsGBNknA4tC40PtWNdF5PnDeJ41ieovz+rRBNF9 BPtvOQBeGYLORXbpDmSqKDwzNLJgV1weyCIhbB//MKhvv1f1KXvKblsJI6fiqtB7/bKeAiIHVkm JtNh+78Y= X-Gm-Gg: ASbGncvt5EjALNNPf0yqxhAaAf8Hl7Vl/qf4EZqbQBANJ8XN4DZKADH8l+WtlDuya0q PNl4BwnWZh1g4kuAyofBaxW1wgCI2KOH2CFSPATTlC66Liq5zsBFHhpJ/ALiWDluiN3cHQ7CY64 ZwO26bPVRQMVn85AlS9vC1n9VGM0+0RxRWR/TmV4LLYXFtVly56C8hJ22Oc+MD9qbvhE4vEYTey Jx1buCsdRWD1p0vsB+59W9OfEmy0Ref16UJAt0/aQQaNG7dTTJPCNOJZcQcWfIYN6GxfHPPhnrr bQA0UUCUyMSl4K6fk7bKe3ByPasCCvk1vlWIuFIwQewSFf8X4IyjsyiWHGo2WkEPi3DOMPT0kKJ WZfHWCc5pSEXo5Ac+MMa0q2olguwUnBin5dZpavrZVC3DtVlY X-Google-Smtp-Source: AGHT+IH1NfTc1UxZ6awm2+MboMpIQKkdBqVgfpBqh/UfWsawdLoz7Kh1EtAURJedl0ZkybZAvCEuiw== X-Received: by 2002:a05:6870:ebcd:b0:2c7:6150:fff7 with SMTP id 586e51a60fabf-2f796ce49bcmr1769357fac.35.1751638885391; Fri, 04 Jul 2025 07:21:25 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org, qemu-stable@nongnu.org Subject: [PATCH v4 009/108] target/arm: Fix bfdotadd_ebf vs nan selection Date: Fri, 4 Jul 2025 08:19:32 -0600 Message-ID: <20250704142112.1018902-10-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::2f; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x2f.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751640499260116600 Content-Type: text/plain; charset="utf-8" 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 --- 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 986eaf8ffa..3b7f308803 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 Sat Dec 13 22:57:49 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=1751640594; cv=none; d=zohomail.com; s=zohoarc; b=E0mYKOu2SzwZaYyMYItvFQ1GnvvFt8m8o3cRDinzK8Ra69W9THTcXr/dXC6DGw9z3yCNqjmgETUNlmrZbgN0lmcKEHWd1JjynNma/JGSJDun05fwP9Jt6qu7Vs0S5clTff6RizjZjcz8PFmVpXqec1dJD+CmBWsSIZAj3eSTGnE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751640594; h=Content-Type:Content-Transfer-Encoding:Cc:Cc: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; bh=zli7CnBxcZoWcfFlVjjdFH46Lnu/RU9mJkmtTaLHjlQ=; b=dv1vc+i+zdVKUB8RVIUrSnC3I/IsSbs2lf/Jxq3h+i6X17xZknlmJ7u3iyryswb3Z76lo3f1yn5OnhC8eY/Ow87rlhjmhReWlljptvBSCK49942Hf84E9xs624/dwS/ogMsp+MyYrtrRo/nnyVWMDAMHT/yK1jyiTJwZ7SAwZXo= 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 1751640594379372.9055984464969; Fri, 4 Jul 2025 07:49:54 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhKV-0008EC-Lu; Fri, 04 Jul 2025 10:23: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 1uXhIA-000503-D9 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:32 -0400 Received: from mail-oa1-x2f.google.com ([2001:4860:4864:20::2f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhI7-0005Qk-Ib for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:30 -0400 Received: by mail-oa1-x2f.google.com with SMTP id 586e51a60fabf-2f77591f208so515719fac.0 for ; Fri, 04 Jul 2025 07:21:27 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff0471esm528016fac.3.2025.07.04.07.21.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:21:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751638886; x=1752243686; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=zli7CnBxcZoWcfFlVjjdFH46Lnu/RU9mJkmtTaLHjlQ=; b=rwe5smuho1ybzkHBJBiZzDjCm3Xr9PJocSCrqiXQaOox75fi2rb9Sqr3sdTT1Mi/+R XwuPetp7Hhl8HoNDvb3AQzHpM5iMyumWJBjnUgwkNfVogMIAxSFeZiO8LAhBZeyutW1M hsVFWk3U8rCRsp3o0L10MQ+OPCGC21SAfirEXGJDwzX6yTjwhcpc2ZpAK4a0MYqL0+Av KY8IYnNuQ8oCKtD9G6NzR3MsmtPElnJ+hhrBrkllbAf2rvfIw4E1vHxqsSkovyI65v0K 6/vZ9XuUbgCHfhhJ3TXntv7KU2yMnjy4lFpJNP+dmdIQCm2HZVD3Vwdya/1ing7LZq+M 9ISg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751638886; x=1752243686; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=zli7CnBxcZoWcfFlVjjdFH46Lnu/RU9mJkmtTaLHjlQ=; b=cAekeXgapr32HPU8P+2BZ1y7N3+bTv2b5Jj6Sv6dH9x7CamUcdsab/eH2xsgUOLfLY 4C3ZxrE2UZCHYFcsglvgdkHhEXZWmj2yXMqBTerb2PekoZHCacEpHSiMwjWsc0wspVx7 NnnyMIf4xxPdd9xhjLz592bLyTymVJfPVqlfeyteMAjOSff7hN7yNbQQ6WMkaaH2cSUE Sa2lOkDfixgl9MJ4Gg2VixZmtaoy0Av8kT4g1k40qIuqu91FjD5ct101RhSG+cGMC7V/ 3VgFwudszF6f86G6biFCP5wrL/leLlA6NoKnCR8EuCi1XTPLoPopcu6lDw3OwZDbq6VA woZA== X-Gm-Message-State: AOJu0YyqzBDZPDrL3IQ2LMRt8IlrndOpKAejsJm++v1316mu0laP5zD6 QV6vl2ad+AuuyI8E5U69gd8D0VhYrq2r/BgCSYakl5aYExaeS1P5ikxOtlyAxWugJJAYJ1goai2 ljmdCtXo= X-Gm-Gg: ASbGncsJXKJtxShoS2L2em4foIfOsf+E/9MWH+ljEKawIK22CONqkJkNXSoRAcVZ1rd jNyFPQbrMViJb/6cuGmsPu0aaCFEQLjZO0mYCmJbB9jFmxVL98KFPEWBpzAKWGFvk56q9Hw+RkN g84TNnYHlH2gj8Sxu4VrDkgAY9b3d3eJB/0UD7rf9gTEsxKV8O1NP15yeWt4wms+BQyIHH//oXS YT7cB1CrhlwUfPvpt7WvG2wQ+eqcvzc+OjGl8mRhpg6MYPdbZzc3SnyZ+QJOrTlJpkE8FCNKDQV kptbMCVDOIDxCznMlMFBu5vnFjtiKVB+BU0f5fMuq7vdkMdFhW2/W7C0trh9CCR/DSZUTgfcqNt pEhj9QCZ4b+cuH2c01aZ0nD9f2qhpfu99JopW9DZSZxByM2ev X-Google-Smtp-Source: AGHT+IHYjHRamIYHXSMNeTIZ1EdnaL9nhwbnOLmAbma5vi0NPG8ytkaYFy9039nT6nQJpjfkwQdunQ== X-Received: by 2002:a05:6870:e243:b0:2d4:e101:13f1 with SMTP id 586e51a60fabf-2f791fb366fmr2213415fac.13.1751638886254; Fri, 04 Jul 2025 07:21:26 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org, =?UTF-8?q?Alex=20Benn=C3=A9e?= Subject: [PATCH v4 010/108] target/arm: Remove CPUARMState.vfp.scratch Date: Fri, 4 Jul 2025 08:19:33 -0600 Message-ID: <20250704142112.1018902-11-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@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=2001:4860:4864:20::2f; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x2f.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751640596361116600 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 --- target/arm/cpu.h | 3 --- 1 file changed, 3 deletions(-) diff --git a/target/arm/cpu.h b/target/arm/cpu.h index 0338153923..96a4907266 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 Sat Dec 13 22:57:49 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=1751640677; cv=none; d=zohomail.com; s=zohoarc; b=jObl6VWKo6YGzBO/UrAQZZKCDgMRzZHC1FIzzWsSMHRnj32EloP6tkHRm1dmqmKILSvxiJm9mk4hj8riYSVxXAU6gz1BmS53Jku5A1XYh3olcyDhZKTYb0YFzbo4Sq0rFpSXcqeroTeq7ctyEgJc1Ic4iNPCtsUxjSJtQAcbRP8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751640677; h=Content-Transfer-Encoding:Cc:Cc: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; bh=/yxK4ycoVNRw596WwqFvL3H0CMyEDhZFsU88OCfnpOI=; b=m4EWGEwyl6ICPBKeX5lj+g0XPz4XXhyf8pFxVOjcJBo84KP1/5waRuYRXary0o+KBJ2geKG8pJuPJ+by5vzuhtIjdPKGQtxJq9hYLro571IeMp5LFMRrCxtIJV4co1129SlBrbwJOcWLmg0uqVVcqlYFYDtR5XoAhBxSQBn9Ih8= 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 1751640677862272.4016907005034; Fri, 4 Jul 2025 07:51:17 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhL0-0001Q0-MG; Fri, 04 Jul 2025 10:24: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 1uXhIB-00050u-IW for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:34 -0400 Received: from mail-oa1-x34.google.com ([2001:4860:4864:20::34]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhI8-0005VL-LC for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:31 -0400 Received: by mail-oa1-x34.google.com with SMTP id 586e51a60fabf-2da3c572a0bso856067fac.3 for ; Fri, 04 Jul 2025 07:21:28 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff0471esm528016fac.3.2025.07.04.07.21.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:21:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751638887; x=1752243687; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=/yxK4ycoVNRw596WwqFvL3H0CMyEDhZFsU88OCfnpOI=; b=tA5tcOKo9K0J3rPuuFfMphKNQQP1mmZKx7bV+D3pB2OTD+3Z6gv2J/mP7UNy7kOxDs 4/AovTDkeD79pM9kq+j1FZoJTs0ktSCe1CMN6Wfw6JbPwTTCfEHBKX6cnqpXgUqYq6OM Or2YKkQhwfSR6T8JNQ5VVAqIRQmf0R/AvVmrdD4Ui5k9UUP2hj25ZgabbiE4QcXYl0VV itarpuU6oajZp4S58e3IoEzV/v75R2tHX28IR7z0aD5D9whCd7n2gN3sO1K8mVIs/dNK GLGYuF0nvwDtTUe7Nx8GU8Lx1hGuFDs+3Qr/BUsJ0BqmP+DHGw0Ai9yF3x+iBH1mGbuv QKOg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751638887; x=1752243687; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=/yxK4ycoVNRw596WwqFvL3H0CMyEDhZFsU88OCfnpOI=; b=TnMBI3MOjmzMOCPt0v9KAdjS3GiLgoGM4wFkMU5HiJL09FQwkmf1Qo5QOqPvq4irGp PysgvGe6jv6O7U4DgoqgybxNbddxZFb0QODEwkt6OvV6ppPHbto5CqNNBa6kGNEp4RCm sMTPstPxK60CjlYiz594RpRP8oFTp/G1BAf4irq6ztRp7/4QObPqOzXNDWRGloqM5gsG aXkCzn8wlCkS3TFKU+2IV6dT8/4NbFlF+RZu4bNKmNL/7ZmSjTl+9n5JyWNlLYFghg1M g/D5HV/ZKlOmKJMMWMd+6dLckPBjlwaJQ+HlAArhI+hjm7EAkFMC0UteKhSi+zq8A8hv MoAg== X-Gm-Message-State: AOJu0YxeUKCfOHVK/ctY9mQh8rqOllOp4J9bKgXxJmlceqbnOLYVaJ1t Nt2wFuZ63EFAa4NSuUxrvRp4RZLbian5it8S1D4xp/OLdWM1RV7adgZ6idM1JlthynwPxgf62L+ Q7Zbdu8I= X-Gm-Gg: ASbGncuOyHp93aVLZbxkz9nt8ltxgZk6LNV4fqR36+KiZMwJfke11lxnXthYiq8PaNd bZ6TUMOOa/69hxqZvhrvo+8+ZlEM8nob455EZegvSaFOI5EvtPHfNgPwfiStl//9b8Us/WIXG9I OU+/eNvBrBP/O6LytoiWvkz5eDE8KX/mDWUrmX1z8t1cgxI7Luwb6muGS//cp3guIAhe1TNUiYW 1ODa6AIACfe4+1DuKwDJZfOMk881NTN4BldQb49kS0bZcmIm4EPwsQEwm0J/Y+OW1LDOxaWK1f7 zcS+v6UbuM3WEcwDBZuLqsiio5VlxNLIx8EMH3AKHUMN9ADr9bdsUrCOCaJCdD8NJX/TyY+MfPf TiAbwXE4mcySV1Fs4W0oWLpLWXdh8VK7JFVfS0KBoXdaO4gkP X-Google-Smtp-Source: AGHT+IEmRCTiwOFW/kGqe4lYhLdRnfDVrEL2oZtajURqn2LDdkMZJBZ28xTr5yZxLzkaMldGlV+bfQ== X-Received: by 2002:a05:6870:8588:b0:29e:24c7:2861 with SMTP id 586e51a60fabf-2f796a19e1dmr1863391fac.13.1751638887284; Fri, 04 Jul 2025 07:21:27 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 011/108] target/arm: Introduce FPST_ZA, FPST_ZA_F16 Date: Fri, 4 Jul 2025 08:19:34 -0600 Message-ID: <20250704142112.1018902-12-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::34; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x34.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751640679433116600 Content-Type: text/plain; charset="utf-8" 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 --- 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 96a4907266..2530aaca22 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 ebac86f70d..7b207f2620 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 b1324c5c0a..e156e3774a 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 Sat Dec 13 22:57:49 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=1751640003; cv=none; d=zohomail.com; s=zohoarc; b=ass0RmOkG/efr4SUpLb7iAmJmQ5MqnzjPo9RFTAk3IljsomoATpiycSXOCgIKYYHBCHosYQlTcVl8VzaRbPCKXtfcCh6fZuhIilc8DronajIoW5+Ne9MGmses/++3vT0/z669FY4jlqAhW+NjsWOpMhpZ+fvwd/vTDEJWohdGIQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751640003; h=Content-Transfer-Encoding:Cc:Cc: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; bh=qv/VxcFKc2nhD2P/0kekyRsDOu03G4xgMX0HwOwNFDA=; b=HrpK810b0lhZejXI8AEXtRJgw0J2fpNoR2r3MIy0KyGIL0Rd6AleKRZTPMfMiMPbsDzoRqXiIgqzpbxkEKlfzNQShHKip79BxWkxhUWZVuWvFznIlZJWct07i0M1SV0W0I5MQv0m54atUH21xgjm5OaB822T16XYhnFTUnSxTy4= 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 1751640003654753.7448897321916; Fri, 4 Jul 2025 07:40:03 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhJX-0007f9-Qp; Fri, 04 Jul 2025 10:22: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 1uXhIB-00050j-DI for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:34 -0400 Received: from mail-oa1-x29.google.com ([2001:4860:4864:20::29]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhI9-0005Z3-Jl for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:31 -0400 Received: by mail-oa1-x29.google.com with SMTP id 586e51a60fabf-2eb6c422828so1283974fac.1 for ; Fri, 04 Jul 2025 07:21:29 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff0471esm528016fac.3.2025.07.04.07.21.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:21:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751638888; x=1752243688; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=qv/VxcFKc2nhD2P/0kekyRsDOu03G4xgMX0HwOwNFDA=; b=Y8kf/cx9AECCptZv1qOuJ8ZtRJ8mQkwlKiNj0mVv7nPrDhlzTHbaOHigbCpCIl1csr sQzaKsJbXRdL1gBJZswP4MsQshUoZxAvJz+FYT/qjwZjlfTxamrxcjvsPBwY5UDpe2a4 FIi/tSrspozWh28jf1l3er14juyohG0XoD8y2mJJ2d23s+ESN+Euo8hbz7W17ObPfU2y qnl2of2xBxdy/ZIze3IzdkTnsP85gWa5f7eqZdqPPA/Msx/Qi6Z26wRCtSSHYtkjASpO NR/AX3cvr+Qw5zZon05rNKh3OmeYxMIk5Sdiwx5mzMMwsm4wbb60MjHKQuOf8jLCRn21 1QGQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751638888; x=1752243688; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=qv/VxcFKc2nhD2P/0kekyRsDOu03G4xgMX0HwOwNFDA=; b=ver5xgeIJVg4MCJFBwO0vvUvXsqJ1FdC4HFcVM5/cyWOpcRRmCE0KFfBhHplZ/iEk5 DaQUxHpZFACni5y0E+m6fGVPquE7LB6v861beZujptPFUHObl81wYfNCXG94Z/kAbrEW 5rfWDtls7deXAH7YoDPQcO9kbO70jq6yDSZoLrzv8JVlYadak3hLWDUQGDbEqD85R39/ xeSl8CIpgCZ5xkyr1pppGtaROKbbrcmT4IOxR771qJt4ebCiXMxGbs50il0q8ZRx/fMg ryZOrW2oLyqnLGO/S/ZlI8cOcy9p0U55EKIaDZ/yOo5/UI331K2sY8Vk8Dix5grB2BtP coAg== X-Gm-Message-State: AOJu0YwoA41/lYW9yGCiiieliwjyy1HJeqGtGNW4VgqzyMBDamNdeaGj 3fK38qqKPwFc4IcnQSdKioG9ZrJsatQ25ixJhyplvdbcx2wFFwuWzGAR/OIcbqbpwSOPE2fO/Ga ajXVnjWc= X-Gm-Gg: ASbGncutzrIYZaaFN3yvup8IYKC6aGAZ+BT2H0KPzqllntrFZbf3l2VQ8WrPnUjKs6C FkKEo6yh8LHAS27D3yB5rCdIUGPLLpyRO0trHxFyeI/uqRn/YnMEWg3vabQe9Ap/g3n+libp1/G Youfe+DWC1AvkDeBgQVku2IZCRx2wdptLg6IpSMl+xpwEtl77UoJcJx16ZLkaS3bRCxdXaFPrYb 1wb4xu0/n9toApNt5AAJt4bL0VXDs14FQpT4450wjBEXqOnPb/87jNL7yYD2Bp32X0opIbB+7LZ J158AHTRV3mUxoz0EB/m/vzunQwV2jEOSjvamg7Lfe0qaien1oxy35EXRrnj4msc/cdEXeDeeQ5 tr+ewzXNiU+KqQhSo5me6UkC4+yYse8ZSGGZkuepJD+37FjJcBHrG1YAjpd8= X-Google-Smtp-Source: AGHT+IHGh9TQrhXvFiKKwpdqdRwtCHOGcCsh6+6C4Tm+Dr/Wd9rOrtBVFtEsWOxfWC3rBarTm4lEcQ== X-Received: by 2002:a05:6870:d1d2:b0:2c1:2262:7941 with SMTP id 586e51a60fabf-2f79203ecb9mr2099504fac.16.1751638888361; Fri, 04 Jul 2025 07:21:28 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 012/108] target/arm: Use FPST_ZA for sme_fmopa_[hsd] Date: Fri, 4 Jul 2025 08:19:35 -0600 Message-ID: <20250704142112.1018902-13-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::29; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x29.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: 1751640006827116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- 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 8f33387e4b..9942d717aa 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 fcbb350016..51175c923e 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 Sat Dec 13 22:57:49 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=1751640800; cv=none; d=zohomail.com; s=zohoarc; b=TgeaIBZS6q1K/FEWi9Tp5M8/XGu6o1iXV4DR8/DwuhbGl1InyDrkSSJ7Z61WgstcCDT7KLZy82VnVIM+8pf2txH6KzmohRW12iCcSyKWlmlnRDyMWz2RwUtqJ6zz4+dNiM0fP2+XYvDi5XIXQBj05rT6iYcnOLzVOH5ER/KR6d0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751640800; h=Content-Transfer-Encoding:Cc:Cc: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; bh=ptP8uenLAkSHPDYCtgTrB8bgYvjR4QRgpRat8308Fdc=; b=XRhMfiM9qSWfoxd+R/f6u5qzqKqyWu537N7qKVtRupCal6KKwJz8IakVv1ulXohwsoSVzJNXbjtcP5NosyolIABhZFx4RpE0dHLe1CLGQvwrNJj3QMVzKJLpE8RgUSEtIHGtmBVTmciet5h8Ab76Aj7+kMBoUKXDeRHIWRrjPPc= 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 17516408001091023.8030728363278; Fri, 4 Jul 2025 07:53:20 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhKW-0008G8-9M; Fri, 04 Jul 2025 10:23: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 1uXhIC-00051k-O5 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:36 -0400 Received: from mail-oa1-x32.google.com ([2001:4860:4864:20::32]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhIA-0005ba-Nj for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:32 -0400 Received: by mail-oa1-x32.google.com with SMTP id 586e51a60fabf-2ef461b9daeso865592fac.2 for ; Fri, 04 Jul 2025 07:21:30 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff0471esm528016fac.3.2025.07.04.07.21.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:21:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751638889; x=1752243689; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ptP8uenLAkSHPDYCtgTrB8bgYvjR4QRgpRat8308Fdc=; b=an24kuDSIMyYJxTyl9M4Dk24Oh+5EgIvcWHxmbGFmTCL11C2ihFQP2Z4dkxAqBgs76 6BJyfi8sZnOPHpLswdBOlGdyPMHwAlZ0NSFDobdvAWXc3OAHalK5GskD/+oL6ys5xD3I W8mq93UzcI4GxcRs6WvnaLQodeamnTA7g9PgEuiozpbEzXUMnySIsBQZvVSxJ6qP566N ePjNEY7HY/fs1zXWis7zjD3X82aJrQrgvgMH240LgnHaa11RSZFwKeMrrCSELFyq0wE5 zJUugq//QKQoK7k2IfnKshcoS9rlMFyS8UQP3leIcIYpIZK40gYKn8acqLTtRxd6D27C auUQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751638889; x=1752243689; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ptP8uenLAkSHPDYCtgTrB8bgYvjR4QRgpRat8308Fdc=; b=UlKYUDBxMUipOfFKg+D4W6PR/0DW0i6fUoFgLfQCxeSrKL/vsVGGFK5/VBLOc1mz46 CyqWHBN1j3ZNKDCIU5SraD3O/mNWi0W82hNdBs/KVU02XYLTbfi3sOxzX+Cf/Flcdh7a iAKJ3lVII+SyoO+1cmGibYybgyQaOM4r+2+koeKAtczfx8axPQCQckHv+5KZ5OJ53yM1 iHYOAZscNYRo3zoQT/vv+LavSXnc16KBviSzQnmU5oYT/fCLofoUNcZ8PEyYPHANts/Y gCQAx65EWA3wVErhr1TlbK8RpKfQHsUTq06LBEy/QMUBN1TPI61ypWeX+ZjtJ8Oq3zMQ JLfQ== X-Gm-Message-State: AOJu0YxOb+z5d8RE7JJtG2CUCEc0w+VZyVUEqiP4MM35l41l9f+/Tx2/ N7+T+g1mg9GMyjVrZz3nc858bPxOfDFpniFWR1FYrezxnu4HeaquEopwIVOabzw0j+fwsNeuij+ B0NEWGAk= X-Gm-Gg: ASbGncsenRoRFPW/Fqu1/LxdzR+wvVPwn5kNov2WMRkTYKtyvER6i7uvWZQ6hZOsKUh ITLV7gkkgwsmehLNp6oIzWauAtu8d96smHwjfGrsmQFXwjJ3W411ot356CeF3MsdYu+aLStmuub XA9o4O2DbI6RXn1P4bcViQwQTLNYJOFM1rs+D3fVMBnx8nj7poR7CeGkTyMIs86EEAB1OsK0EBZ HGJvswmK8wU8MSLR+ItMhkIjBJisxyQM7gamlfnlsGQnmXmpJ22yDuLpKdbQFbF4YC6422cXlfr 2DU7jM8pxBGPz0SN0LB4WMzY1uE7kbZdgpRGVBDAiFPMia/86ZCjZGDMWqPyaYBW6e4aElrK7zu hkR1TthYD1hFxP/fx8+PR028sLaxcsaP64CazVC4SOkiuj2ga X-Google-Smtp-Source: AGHT+IF4vXr61T81CSpAnC8x7j7tq/7rKgn5Pmqk7pWPY6GLmTPHXMIv3xrWsm9Hs97Rx8/LoFPAOQ== X-Received: by 2002:a05:6871:5b18:b0:2f7:93bf:4eaa with SMTP id 586e51a60fabf-2f796bac1bdmr1620103fac.11.1751638889465; Fri, 04 Jul 2025 07:21:29 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 013/108] target/arm: Rename zarray to za_state.za Date: Fri, 4 Jul 2025 08:19:36 -0600 Message-ID: <20250704142112.1018902-14-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::32; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x32.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: 1751640801117116600 Content-Type: text/plain; charset="utf-8" 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 --- 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 2530aaca22..7db97e8038 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 bc7a13800d..d50cab78d8 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 7b207f2620..6265627762 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 c311d2df21..3879bce848 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 e442d48524..6e73368ef9 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 9942d717aa..7b0bc1b17c 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 51175c923e..e8b3578174 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 Sat Dec 13 22:57:49 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=1751639196; cv=none; d=zohomail.com; s=zohoarc; b=USCLSihomJBYL7W4wCDMYjY7LPb7nsLZR4x+5QTQ5o0DZ686RBT+xVEdsJsOKrISITgY/tNnIvNqtM7B28iNRAJ3tV6UldGpI+T/n7VZUENHS9AExkO2UZLNOeBaVIt7kTsuIezjoe2ivypNE1CCLMZg1pBNGXoABYEE6gru3Ns= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751639196; h=Content-Transfer-Encoding:Cc:Cc: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; bh=MESEd0mA1nIIoktuVnBsPsHvzltJ4JN+uRnJz4lGeYA=; b=Oczk/kbCgoMFxHXYXzz1VeCJsTe72A9QuvX3zD19I/h1p6Dy3e8JH/r9ig/Sb/JvLkntgsQ00IaBwe40ke8DWsLIFqq6VhkUoK4lqXYDhHBSuiWIZ8lygMmH1ATyAL6NmbkDFP4x4BddTSprHvmvayYuwX5gvxW4ogb+/K+qZJQ= 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 1751639196276172.137264854656; Fri, 4 Jul 2025 07:26:36 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhKZ-0000IR-Jr; Fri, 04 Jul 2025 10:23:59 -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 1uXhID-00053n-Cq for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:36 -0400 Received: from mail-oa1-x2b.google.com ([2001:4860:4864:20::2b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhIB-0005cP-KU for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:33 -0400 Received: by mail-oa1-x2b.google.com with SMTP id 586e51a60fabf-2e9071e3706so775983fac.0 for ; Fri, 04 Jul 2025 07:21:31 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff0471esm528016fac.3.2025.07.04.07.21.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:21:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751638890; x=1752243690; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=MESEd0mA1nIIoktuVnBsPsHvzltJ4JN+uRnJz4lGeYA=; b=u6l1jDgEJr+umjKiWJlYj2NkpOdLoP3Mjm+yJy/7Z+LaO3Y83+K6uMDh07qMhpv3kF SzAyVqADxAgx/ta37/HhJRYXUHHh5USWkrp6WxGPtAeqLYU3doMka+/fsphGYvBe6Ohb hMComGFMAfbOtaM6nWgPmH06NOzGxCOex+dxsprmqAvVnfiQoaq3wfxqxawVPvDYw5oa 7HTe3nn7S+dnZo7xNkT4ogbGsZyAeJsyo11h9dDYs6tJ2jpsMCgsgD/bV7L5m2iXI9Ez aw3FIuCQ1qVS9UKm7D09YAanPGXen1ShDpvsUGJ34dq+ayQ6ZMvw/icjADpIcGqRAj6m qipg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751638890; x=1752243690; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=MESEd0mA1nIIoktuVnBsPsHvzltJ4JN+uRnJz4lGeYA=; b=aPcNrwpRR9TUc9WnZVbXrdimTqIeW+y2g9+l2Zu91TIrZfRokpsuPbbLn4xfIuFfHe 98fJsJnoRAv+MlNp4lWxxcECkBk7dpKNPsKAyWTCyog0CdUD/9w1jS9oDwop0E9mAU1v j5A00blwbjr7B9oR+wmdRm8W2fArK50i4qW8GcRk2MXlNU8ixxWqp1nkp4S8j2j8v5Tt SbXp+KXB5ESoCBZ3K4vUxYSjef2r1YqiQz+5a31O0Q9wCJBndaM65H3QEQZM+0dxbsyA h8CUNBzlZtSVXOLCBVG+PdjE26ZWJV+VyyDAcC/qGRyhDjTnGTCnNiFsi6P6w48wON0P B/SA== X-Gm-Message-State: AOJu0YwgItVeLdKALJywd1NvD2whL1AoM+ygYxWAsHvNgw2TNzGhI6iy qsPBLuM25adf0T5yBP74LlAcF3Clc2ravE9BVoNt3fy3mL8LrW0jESI3ULm/scIv2IWLrbkbtdi Z5qmp9Pw= X-Gm-Gg: ASbGnctLpb75kUt9+ZtFr96tFaC4GYcLBHR6qVDVqtY/zENOUTRTbDOo9eGEqfn5bS2 HzIQsyBS40biGc9aJ6GaDtU42rTrptO9ymFfXHQSH6LKw8k/5qUPwSqpk7kc5ejIPFiYOw2u8Jr 9n0A6I34PZHLcH6kvhoQljCnokA/hbT5afkETKlJxMxANXLOQzEn7rca5mXOLKA/s8brWgKwixc r6G3c88mMOLWMqj6+DxIeqGMkx1e033DLjMhRfmeUPBDgJimcXBWxyUXGvT8IVTLb6ODUGdy4t/ aU55AR+2E7Yw2sYLA2OIR5bjhC83dal0DddPz2FGeb7NJbpXVNVQXYhYsmr9s/IegXmKgJLv4HL 47FJRNyW3mF5To5jJw70G1SqYE/pFGGDTVUGd9AAOs3cW2xR6/HNSYKSLYkQ= X-Google-Smtp-Source: AGHT+IEs8F8Cw2QSEbFO9xtIfXdRyHcRL+0oiF5LD6GAUq/YuuDxOoIQB0yTh/47iLTlJHmTWLxpDg== X-Received: by 2002:a05:6870:b614:b0:2b8:e4b9:47a3 with SMTP id 586e51a60fabf-2f796caade4mr1568371fac.22.1751638890419; Fri, 04 Jul 2025 07:21:30 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 014/108] target/arm: Add isar feature tests for SME2p1, SVE2p1 Date: Fri, 4 Jul 2025 08:19:37 -0600 Message-ID: <20250704142112.1018902-15-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::2b; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x2b.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751639198581116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- 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 5d8adfb73b..5876162428 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 7db97e8038..c6041a9357 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 Sat Dec 13 22:57:49 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=1751639134; cv=none; d=zohomail.com; s=zohoarc; b=JVH9mfIKWbk0EOeGcVjv8u0aFQTivyxDi0bOTqAGIaAqBPf21FlQgzfgvCsKJernfvFPGpVio48Nh3GNQO/W/Z/nczhjKql7bJXF8k4J5+whgLkJSIeMyhHKoiVwSLCI7bUuFlr1vd4oORUAy6vteDSf7QfTxY3lxJwmRi+Znuw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751639134; h=Content-Transfer-Encoding:Cc:Cc: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; bh=J0c51w8AYDL/49JMSyoGkHo6/JBfxrEamVE7ZAljwTg=; b=kJcx1po3LIjAnbQhPcFFzj3gOFxlBx4sWwn7Osirg0dI9oghSqEyfSzOmiB/YHVi/zvEynXl2qJ2/6llOv2iQjxyElrBoFKYcwq11iUk8RgxZ0v70+mRtvAt4jH1p5R7/me+LIyjyqLDvilFAgu8vGnfQRjq8tZgYZGqsz0Atls= 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 1751639134607298.2978873560903; Fri, 4 Jul 2025 07:25:34 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhLS-0003Ov-Hs; Fri, 04 Jul 2025 10:24: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 1uXhIG-00056d-BH for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:39 -0400 Received: from mail-oa1-x2e.google.com ([2001:4860:4864:20::2e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhIC-0005fj-Mc for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:34 -0400 Received: by mail-oa1-x2e.google.com with SMTP id 586e51a60fabf-2efdd5c22dfso744686fac.3 for ; Fri, 04 Jul 2025 07:21:32 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff0471esm528016fac.3.2025.07.04.07.21.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:21:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751638891; x=1752243691; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=J0c51w8AYDL/49JMSyoGkHo6/JBfxrEamVE7ZAljwTg=; b=fW7uRizWLaDJlnTNXz04RxOj39Divnr4cL35vHjustIaEiXmKY24mPK/iPGfT3Uqcy WWbYQ2Hgsjwbhm/KUIPJDlq9SmAP0M8d73g//2y/DMY8vq9HSYOyq53tAnwZo7Z+m62z a4afp5jZelR8MtAV93+KwnW+RFFyxvjhW1w6r0KGMT0k+QKVx6rzeNO5rEbqCPODSlaF D5Ft8BLRq+/yrA1dR7nR+SxooJfI+fiWd9xl11Xtyj1ijCiilF8XDmyCOT5LZUn6sOkk LUh3Sk5Cyvg7pvuO5qzEsN61RC0nH0RMrIjnk8G0lHjQAWY8kAH2Io2jDU5gl0F70MX3 clZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751638891; x=1752243691; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=J0c51w8AYDL/49JMSyoGkHo6/JBfxrEamVE7ZAljwTg=; b=tJG6LxydEyiuBMWSISQ4iWf+yucbRV8SsvNJNsECYF6B4TEMeklTA5iOPXV2Wmiwy6 W7FdEgbegELKmS+2vVEvFFsmkpNuBlDR9NkSutFeKW2K46ML8H//N2elx0ybPfajATNA ADXAICTpuCBcutk1Rv7xM4RZIFBllYz8czmy1qpUJCIDdgV9FuoHfOgrYNpcuDqpRBvg LEokXVX1wvJSHk3emlIcipN66VOt39C0xY4VgdjXqlfFvJd2cL7sU0S3Ec8NoPMU4ou3 k9I8PoJXWH8Qj2FU87tVkZN7LtyAiEBN7bYi2NDjec6nr5d9s/1EEpVJfxn8wRwGvIs7 lfOA== X-Gm-Message-State: AOJu0YwU82p0VB62/QIYTAb0/Oc5Wr7rPuzx1wAHqK2gDkTZADLRe/Wu Tyq9/rZQv9xXctzuXXafosNU5pm4HSJpWyRoG21C0BUAup6pYBRi+BnfCvbXjlTEK2r1rY0XM6P MGJA4nJg= X-Gm-Gg: ASbGncszuCMJCerVcMgouJkrIaj2Kwe54D+H28M+wR9HwCgG4rCYx/pOAIGu4BKu2FW vjAYf0F2LDgwZqJHuci5o4pmFmHfO20IQ0v5KTGF/i45edc14nIm5+5wYKat5nX7QB5SFanthzd vAU19neeBUYbL0A9Fu5+6bitUKFW/LSBsePVun594FbiUrWpzGZS1yy6kW4zuUvmJmRmxkvszqz dsfW1k8BdleQN7Vr1FxOnCKeV9SxA2GrbCVyTlbcH1bC1X1+TfL9OwOQbPxLNKOS5QO78qA0Q1u qF2Gd9cOveHwi2uVjpKQ/cc4VG0lPrL8eAZb+/60ZSkwD5E1GTA1lFyAyBqYfgN5QeIfkn8M2Zr 6VTe+akjdIJKRjbMIJPqQ9J8nIrPBFAtyeFSEdUB+rnW8JE9k X-Google-Smtp-Source: AGHT+IEoN8nvP7Q8uZI/Y+augkC21gEoiSX56lbXoApTmbbJ/2JtUmmpcWJbXKyIpD+pbTsWZrY6ZA== X-Received: by 2002:a05:6871:e026:b0:296:a67c:d239 with SMTP id 586e51a60fabf-2f796c0a276mr1688684fac.12.1751638891473; Fri, 04 Jul 2025 07:21:31 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 015/108] target/arm: Add ZT0 Date: Fri, 4 Jul 2025 08:19:38 -0600 Message-ID: <20250704142112.1018902-16-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::2e; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x2e.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751639135510116600 Content-Type: text/plain; charset="utf-8" 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 --- 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 c6041a9357..cbc2043483 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 6e73368ef9..6986915bee 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 Sat Dec 13 22:57:49 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=1751639130; cv=none; d=zohomail.com; s=zohoarc; b=L23lum1AVwAL7Kqb2JJ9GWJKeBEuJaHFfOhyaXFUubsz3jdK8KoLwBjB0HsL82LYcwHFVt1mgJ0OfaSDhuK5Fo+tvGaPr9Ojr/xhesvnMmOXV5Dfc/SnRxgZTkkc/MwCq8mH15NwErzeEtaiFFeW0RAMufWUdFbePRRkPuUrJl8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751639130; h=Content-Transfer-Encoding:Cc:Cc: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; bh=dTGa4kMhNDj9wa1wac77ORndiv7EhCr8PS2fgvtfjbU=; b=cKq6A8B3ao+NhrAYEGxbsvqZdaMDeYWZjaz+kseT4dojeVr4vauGm9iNGn2qmsj7+gvZbhxV5wwEGySz49pSapBR0mTdSni06kD026xh8A6EL8VbDYUKPzMf07MJuYpMK6W5zMmbthHg5ceOR/5kRZsg3wlWrFIzmZrfwON47DU= 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 1751639129872654.179021810849; Fri, 4 Jul 2025 07:25:29 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhKl-0000nT-Bx; Fri, 04 Jul 2025 10:24: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 1uXhIG-00056j-D4 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:40 -0400 Received: from mail-oa1-x36.google.com ([2001:4860:4864:20::36]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhID-0005gd-TY for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:35 -0400 Received: by mail-oa1-x36.google.com with SMTP id 586e51a60fabf-2ea34731c5dso859227fac.0 for ; Fri, 04 Jul 2025 07:21:33 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff0471esm528016fac.3.2025.07.04.07.21.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:21:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751638892; x=1752243692; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=dTGa4kMhNDj9wa1wac77ORndiv7EhCr8PS2fgvtfjbU=; b=GZ2AM7Pi4yGWdye+JKA3fGB7b86UqMigLlYIdr8j4UM09DXw6Y15D7qyDwU2CDFLfH dNLYX0pRO5WTjwSXR82Jx9rW+VqfwHMIlce9TE1pMKV5uWqL0pqwKjExlR3D5aXsPO+D H1NvwMX8frtp1azlwXqBS/YGvYfF/0UC1KEkoNcM+s1XyDn4QI7MLvnZAvZ9ID/G/BUw DCvYvOBWmPkWU9NjnsWQcrMmdzT9idn+FsrJX5yMhbaRqcAZD8+UjYw3rJo5rfHrRW8m 74Md5Fazv62hitISYlOvngeMPYWO7MLdW0ABiw4hGDvddbvZKIDcyak46EM8q+Ygm+Jq yhCw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751638892; x=1752243692; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=dTGa4kMhNDj9wa1wac77ORndiv7EhCr8PS2fgvtfjbU=; b=DhC7rxa25YtDtDLl5EAHp/WoRLGN+y5/fVpJ3XuDMM9w7IGvlry7jFo/9cc7JrErN/ WhkhijkFB2TDqi9iGBUw/MF3U/bB96lCexutO2VPmRRl0cn1KiIpqQsR597VT3AvFIda /FTfYv27bSPTwblNVYazK3j4NrBUZHTY+u0nXX/dJ//6T2Rh8P0KVZykb8ADhYMDEcbQ yKQHx30s99YofQxpPnZTUzwf9XLlQ4gwCHD999Pu31oFTlvFqLB4NPbwYsf13W8YHqhs MWttYpwTR2imoWQ/d+LkUZXQxkVf7UPoQbtCo/kgLpTe/5ngJFSst5rxBTkA7jkLO9Y8 t0JA== X-Gm-Message-State: AOJu0Yz0RXRBp2IphvnqXpf9zVbqjZSYQQqF+v1tBmnHmoMSaT2MS8i9 +7/ruI0w+ds1bUJlfAfjf0oyaD7Zmyf2OoXIpix5D77qm7PhtMfmM3pKBYU9p0rP8mbtb2TINL0 8omUo7jQ= X-Gm-Gg: ASbGncvNXUX9WJhfwh9TT4WmXD/wL+MnRaLXURGiYnQHwUTcpxAkwR17+Wi9jwHo11s o61VQneSPhj5t+NHyIu0OEHZZrSamblkTny46tyZV3wLtSjo34QYMItwQYzIJamqPif9IFsmowg InaLFN1qguOxCtAdaLwwKJD5k5kDHdueze80sJfgZlBGpIpP59iRIt+B89hCOCIL78EBjKevIta PCtT6kHdOM+LvKRDif/zwW6/y2hiCMKGci2rF3+xqpszFe6Y1Eq4dLZ6S6y9+LzC9okCMxgAD/h fz8VzkWRN1F1dcTW/p7YfdF+qehrSbTPg98mod2dgjODlEP3n3QQjxSX8/yrwJnTbyfI01PDiJ7 6XUJXAR6MfMV5tlkgRONKHNVOsR532DKYsgvyyL/6swVJR7AC X-Google-Smtp-Source: AGHT+IEhDfWOscyz0ed/xxzhZQpPNiLmdNPKN3CO+Z0b5I2MaEdRh0RA3I8AalyAqCT+flmcvMtH4A== X-Received: by 2002:a05:6870:4211:b0:2eb:b4f8:fe7f with SMTP id 586e51a60fabf-2f791d4c954mr2288251fac.11.1751638892522; Fri, 04 Jul 2025 07:21:32 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 016/108] target/arm: Add zt0_excp_el to DisasContext Date: Fri, 4 Jul 2025 08:19:39 -0600 Message-ID: <20250704142112.1018902-17-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::36; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x36.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: 1751639131754116600 Content-Type: text/plain; charset="utf-8" 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 --- 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 cbc2043483..39a9234ff2 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 0004a97219..b03956a793 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 6265627762..08c43f674a 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 3879bce848..b3f0d6f17a 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 1ccec63bbd..59ab526375 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 b0caccca46..ad293c0885 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 Sat Dec 13 22:57:49 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=1751639285; cv=none; d=zohomail.com; s=zohoarc; b=muROzDd99OPwyedpvEhR5neNrQjAaL32LNLC+N49DL51AEWZuuzCecX152r2t4ym5MWLtkwESxx+wwGH+VNS/JSGTwAWOeInCeFJ7G5XiTfIU1goOUH6aKOcL4Ji7YlEt7fsm9tjBZheJAONwbUOjY02l4DuUTbebu9nSShGO70= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751639285; h=Content-Transfer-Encoding:Cc:Cc: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; bh=+5o41MPLL6siTUnGgQzMRLhBRZ8WRwHHp5dQcfQlvV4=; b=AgdddySAyzUOVN0FaEIyKzDPD5hUMRzUtaQCFPC0xl5HfhbDVakSMWYyWbwJFTRb03Z5OJ7fYAq5mO0HOitgD2M1M2TCsmzuWLLoZrsmwN1IMTzdw6BjKYjmjNkdmeG3bKWtXXolxLCun4JsCop/lR+tVkSIN6zx8yYpIZA46Ok= 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 1751639285886114.19849073492423; Fri, 4 Jul 2025 07:28:05 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhLc-0003YM-4t; Fri, 04 Jul 2025 10:25: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 1uXhIJ-0005G7-Dw for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:43 -0400 Received: from mail-oa1-x31.google.com ([2001:4860:4864:20::31]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhIG-0005hU-3j for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:37 -0400 Received: by mail-oa1-x31.google.com with SMTP id 586e51a60fabf-2ef8df09ce9so650191fac.1 for ; Fri, 04 Jul 2025 07:21:34 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff0471esm528016fac.3.2025.07.04.07.21.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:21:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751638893; x=1752243693; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=+5o41MPLL6siTUnGgQzMRLhBRZ8WRwHHp5dQcfQlvV4=; b=s6XUyBs2B7WJuiMhew3/1377AYD0le9WDaDvRtFfpPjzN4d52xbxSdXEKhGY445/kb y2O1pHK8qhfIWONiQlbC8dczJCZuS73Y7gO3JlP8I4/90rVErZbmw8gn2hg6Z31W5oCe GkbbXJn/FZulV22x6PLbWMUSILH+RgNB2RBpRv+dBrF1j5KN0sR/j90To968PAVJiUz0 jv3xIVO260BMWyYr2stA3Arr3x5lzpkEXknhzFvwWOmDHl34fx8QSORFznpFPfUjYd4j J6V4G/oz4f5MiAgujCbWiZt/GlB+MACPG1kL1N69u52vcQNEY4keEbBCTYfZloJO6ey0 QImg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751638893; x=1752243693; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=+5o41MPLL6siTUnGgQzMRLhBRZ8WRwHHp5dQcfQlvV4=; b=Apkui7krSfCikpfNgv8WfkD67NVNdxCviHqpMo4gVnja0o7ZAIXNQKHIXxO4h8lNId 0bvh0e+PulKwr1/5EZZrnFongTLows0QLrQ2miAucDFVxI3XTW4BJSYqBQ0udkkV/J+n MW4F5NXS//Z8Xp2zAx4IYqxvwlPNAC1sBFE6Fd6wwSMF8EJl/psrUbbt+OLx+9JiNgib 7/GXT2pgpkt7Oku6hQgZpRqLzAIpD8UuK/XU0Gji4bfOJmyDbyPALEFpotRiCL34Vo0K eANbWlJaHTxCFoOIoUiEs96MpWt8g8XoLrC3r6TPbxhfw41y3pyOfZOM/AccAEsFpOq1 PJBQ== X-Gm-Message-State: AOJu0YyKob6n6eZFMsMFroTCa+mSxwB1LjLfDoRP2bEmhB181CiIQ+te 2SJi4tkiMYis88mlIXeql512NsaXo9oQIDag6u8FsHTx2l/DwfsUXuY09G6BkAniuw5Opl9e+kG Y37QMkZc= X-Gm-Gg: ASbGncuyA9rvpxt/3qb6WHXcqoFuAaDlBKi7twXN6HVCrtXzbtqmonVfrxmuPUdxmgV hqNh/aMst/lAKmnNBaHlfLpjK0Wxt+kgdWhJZhgSpR8tZCsgjwcGP++qow7wevzMbbkQmyz+f1G dz487Dn9XSmiujIxU1VcNV6wVHAKSwXMv1Wm7ZfPo3rX+fIv54ZQL4lOjg09GwUgE6Ws7TO1y/t XydHdwW8w6ikdooDNY7P4WVY73MosYXx7+DnvrsKAPxWaz810LS+UdFcZK5UAxYvNAfffpXpNM+ LQ/K2x8ZIc6xgYBVV8nZG62egM3duDt7lhh8Qcqph+UGpTSXeG34DyFJfPg8QZCehUKHwJyOlfC ND7AhnKYa1qqkl1ikT2/ptR66EuJEHp1KS+b4mhWhwS3Ves+vK+ACCD5a1eA= X-Google-Smtp-Source: AGHT+IGZWW4Lpo0gpAvB8NIOGD+rwwWmOjq06xCm4l4/OgvAB/9FfIE8WBvg9rigoGUTaIP0FNKx8g== X-Received: by 2002:a05:6870:220c:b0:2d4:ce45:6990 with SMTP id 586e51a60fabf-2f7969bc3f9mr1720258fac.7.1751638893263; Fri, 04 Jul 2025 07:21:33 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 017/108] target/arm: Implement SME2 ZERO ZT0 Date: Fri, 4 Jul 2025 08:19:40 -0600 Message-ID: <20250704142112.1018902-18-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::31; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x31.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: 1751639287525116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/syndrome.h | 1 + target/arm/tcg/translate-sme.c | 26 ++++++++++++++++++++++++++ target/arm/tcg/sme.decode | 1 + 3 files changed, 28 insertions(+) diff --git a/target/arm/syndrome.h b/target/arm/syndrome.h index 3244e0740d..c48d3b8587 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/translate-sme.c b/target/arm/tcg/translate-sme.c index e8b3578174..246f191eca 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 { diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 628804e37a..dd1f983941 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1751639131157176.58634530954316; Fri, 4 Jul 2025 07:25:31 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhKx-00015j-5k; Fri, 04 Jul 2025 10:24: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 1uXhIJ-0005G6-DN for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:43 -0400 Received: from mail-oa1-x33.google.com ([2001:4860:4864:20::33]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhIG-0005iG-4i for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:38 -0400 Received: by mail-oa1-x33.google.com with SMTP id 586e51a60fabf-2efc0ed41efso403708fac.1 for ; Fri, 04 Jul 2025 07:21:35 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff0471esm528016fac.3.2025.07.04.07.21.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:21:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751638894; x=1752243694; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=0C56pC53rSBiH1gXw8XOmTDoJ0Tu3GpRT/rtSHM5KQI=; b=j2qDHgHIqX9qRoMRLoduWM9EoIuTMuySk+OrBIqC+1QtkB1iaKP7L/DgL8xgynadAf WYdkoBF2lQjdMvT1LjurWN7NrZz/uH5X+pSeVgTBg/0q7JTq+r+SLO4i03IykQp9zWJS 4UzkIV8minP730+NSoPS9u5qoGqdHPyZHGOqi+FL11KAXaHO+VguRpedmNFWlyt1t06N CysiC86OSzJw+sOxo8Pt4wWYyzAySXgWyp5qxiaDsfq2UEoB1LipeWnm9aqLO9WhS5f1 J8XbO414RAcUmCbpWvpHkU7qOLaBbhSSt7y2ecSSF8AFDVz/Ueeca42KjNlgAuzzmMsA ieaQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751638894; x=1752243694; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=0C56pC53rSBiH1gXw8XOmTDoJ0Tu3GpRT/rtSHM5KQI=; b=p3jyKlPnlcKINVhEdlpF2KRydJ8J8ZxmHi16ot+auhbXebvKZFJNOZxcWU4fKF0eHy 8XWnm+mD0179h2OBYdx6lNwTCCTJ70UHYlRvR5sjdglb1tVF4UcW41On+unIaQIqKDHm CNIDQ7GC+pIjAS6KXJyBaCxgz7BJntAeyoo/PcsKWVY91yU0oTilFisNLnwLgb39J8vN 7vFwmk1+NJ1i/XGVALOFLMTBbQ4JY6s9REOpkNpIHhw0yKVYUvEALgXSs0Z+blKe3knx eVr+RB2/M23LvuKWfQ5lmZEVIXWc2Itq3GgFpQ1hxiQ/UxuRtxbpyvzMyBb4n1gLnHcE ilKw== X-Gm-Message-State: AOJu0YzQ6Bjq4SvvNpymQKbhe6RMNVw90YYEnoLlEclv0VSuwNCysRiZ hUig+i6n8rxtJxHy/S46RRoLfnauYVurwVEOpoOvi6rLmVSZ/tWf0CHd1QiLpLmOIpEv0wrOzi1 iKeDYLO4= X-Gm-Gg: ASbGnctYhx2Zx7OKpcorbgeDTQXKzqLmCjXqOk+PQ8dp+Se/qPaiP3Otw8bHoT6kjw3 1tEHeu8+jyicoNDylJwMjaLtzUBnAqtrgiixkySOHPCv4eg5eIHz8EQghNIKt4U2wVbJxju7zdP NCwXy5uk3Sa3WgsFkAvZt6ZZNxto1W+FkX3QrYqSCAFgsJ8IyMcSLSwIiBiqFeffbmFJUox+Jkz 6NJN89hnzPBanxZZTpDBEL/ZKgh/iOvC5BEvX4IwzqugMJnDW80+iQdUidm/wOJc/g8h8hZfm4B 8zaYGgAMC/TUIYY0PvMUfpVFdBcV3gj+GDjTU3rfS6jspEj30/lVik5IPGEi8XxMJJDgd0/PpxO 3fMy8zkwI/9mHds7fBv86qgyCef5Nlry1r57BBYJASuEsnkYn86ReAivjbhQ= X-Google-Smtp-Source: AGHT+IFvcAH1ZtDoeiZpdQe7ntcTZWl0wftoBJ4jdiJbgiXORm7aNJtCWuqhD8DnpiT8qLBxrL3vYg== X-Received: by 2002:a05:6870:391e:b0:2ef:de7e:544d with SMTP id 586e51a60fabf-2f796c848f8mr1783872fac.27.1751638894363; Fri, 04 Jul 2025 07:21:34 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 018/108] target/arm: Add alignment argument to gen_sve_{ldr, str} Date: Fri, 4 Jul 2025 08:19:41 -0600 Message-ID: <20250704142112.1018902-19-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::33; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x33.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: fail (Header signature does not verify) X-ZM-MESSAGEID: 1751639131527116600 Content-Type: text/plain; charset="utf-8" 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 --- 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 b2420f59eb..8a9f4b2053 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 246f191eca..1dbd0199af 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 8403034a0e..d2cd298b5b 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 Sat Dec 13 22:57:49 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=1751639121; cv=none; d=zohomail.com; s=zohoarc; b=UPI7iAwSwQy27h7Wkg/1vSlCOHauaIN7HC+hxZfucWq2OEYfhPvYyQUV0iKDfM8yniy6qW375Bl137oKAMqa2TIboJfqTF4dIFH9Qw2uypCLuq0VDisifpBrpeQt7BEKruiAjvT+FjInxMDDgNZZWRGtjkuFv8DRyYURBhrGg2A= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751639121; h=Content-Transfer-Encoding:Cc:Cc: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; bh=4U0q/GIZDIM1qKxpzjtQMthSMqQD0Hh4uuMO2n3mIoY=; b=eDZwuDpVAE0jpC2wWtbnBkA2KSsLHms92pnJxuSsrKqFszeR+xoX4kD3qbvXxQ3Z+topt3NFQ1uvmIwmuDWg/AiYrk9YHramfOp0tXuvNoFxZpclJibLpjmyWnlphixg9zfj3r0fLlOo2cy7TNFwJ5cBxei0LAsbrj2RLpHVyDg= 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 17516391215481.587715886166734; Fri, 4 Jul 2025 07:25:21 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhL1-0001ZB-TD; Fri, 04 Jul 2025 10:24: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 1uXhIJ-0005GC-Ka for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:43 -0400 Received: from mail-ot1-x32a.google.com ([2607:f8b0: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 1uXhIG-0005jk-N2 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:39 -0400 Received: by mail-ot1-x32a.google.com with SMTP id 46e09a7af769-72c47631b4cso861046a34.1 for ; Fri, 04 Jul 2025 07:21:36 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff0471esm528016fac.3.2025.07.04.07.21.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:21:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751638895; x=1752243695; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=4U0q/GIZDIM1qKxpzjtQMthSMqQD0Hh4uuMO2n3mIoY=; b=MOsYypxEKWa4zycFxgDk5eKj9Cxtj0NwUXInlPbgwNIrS3em0K1Y69g1oIHP81/YcO MEnwOXlauFjwHE7on55blOlitSm590Cexa3AmCZk9ejtg6Jhu5/M6eHazkNKf/dSYruA rFNpalAD0RfHUG6S2UZYqkfwN+tIDj0P2moVFK0QRVIdDeFw6B6IXawmsVJwv5jEz3JC EVjawrqK1VvEJwze9zDIBY0r8FdgqsUSKCJs0GNSMGCvMeGH687iKPDfXBaQzZ3fBiq8 d6pvcpZhzgqVhZdn/qXhV9RnBCpGlIjLtYe8bjbdjmmjNRjeeeDk0oinV9y9uWJzmTZu YzXw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751638895; x=1752243695; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=4U0q/GIZDIM1qKxpzjtQMthSMqQD0Hh4uuMO2n3mIoY=; b=og64b9gPdUcfuDlncY+WuwtUw7Ydez2qs9I5rJYEb92EbU+xturqaCZxdc1V6jTUam Re39QdYy71R3m7OLOOd4pdkQv3l5pnywlGuYsiFxVbmhTNj+HrMCOpRoIFy8BzmW8kqv Nj7zzOxXpkqfnkDMSIZT91MReONdCqhnF7zthY0H7T2DVsXjy3m5+jNnjHpUYbGk5t+f VTJRYi2NIQo2X8LdPdI8GoUH9Mf2xntMolnOMi4snUWbTknDlF2ghfozfE0rkJ8r1PtV 1h+yKlRat5jiDPdSEa6yzYPecqEMPxdRGAafBxBFUyyrg+GAEEvpUqEypJYNnXqhz5hY PdQA== X-Gm-Message-State: AOJu0YxYujHx/ZXwOJERo+E5LjtPl4KscxcV60YnpiuNotAkAIa2UJzM zcc8nyhMU6QGhUyqKyfdJF4YAbruWcEkktlbYyMd/sQhJZZ0sqSSnHVhBUGuuxqnQh4iLZcZhsc 4SHX/cEM= X-Gm-Gg: ASbGncvSo3V5/nfyyLr8EoqsQmPZpqELmcOFH/Gvw/freQ3cv/AX27+AwZ029ewXHbW +GVIVXXKeCzuH3j9bRupLXP3alDDGvdi+aNFei4jKW9PNvxZqlFcsXSLBjKXUtXSQAqS9MA6I8Y vq+A9I3g2gDWr/FoD7PtA1aUE/Triz3gP1Xw5D7joEqU156t7D0ZAgbgWk5euIjVXyvxk4nNHkN LIjEiEKshNyLzseH0PosALbkKXC3SYghZofE8JEadnaZ7oss7ERK5wG+5Btj1Cmq2rTLg1FjLXz wZd+8/Nt67UeU88u9f5Ml7njk+9/di9v/Eb8Z7dlh5dbCLsarttvCb8+r2oNEdK0p4qyJqkRV4L /Vy+jt/6tZy2MbBS0qkoAdcj+IGcMtoTX5dMdVaIzZylrKFZQ X-Google-Smtp-Source: AGHT+IEHBjF+Zmv1s12wxT5/RvpvraO4SmZz7yUL1wj9a0ZsrLMe1CAGp1vFgK02/xL0HGsoVHQRbA== X-Received: by 2002:a05:6830:4188:b0:739:fae0:73c6 with SMTP id 46e09a7af769-73ca6797bbfmr1550975a34.25.1751638895443; Fri, 04 Jul 2025 07:21:35 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 019/108] target/arm: Implement SME2 LDR/STR ZT0 Date: Fri, 4 Jul 2025 08:19:42 -0600 Message-ID: <20250704142112.1018902-20-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::32a; envelope-from=richard.henderson@linaro.org; helo=mail-ot1-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=unavailable 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: 1751639123448116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/translate-sme.c | 13 +++++++++++++ target/arm/tcg/sme.decode | 6 ++++++ 2 files changed, 19 insertions(+) diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index 1dbd0199af..9f25273992 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) { diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index dd1f983941..cef49c3b29 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751639657; cv=none; d=zohomail.com; s=zohoarc; b=ABpQIkC/WlCefbvpzOPENSx0C8p3LIICA+DPsJBQRrautXpn1nYs3oQNqDqCTKvh5ImujDXRrOSI80bTpowqETl+7MLK0HtRjsgEzJVEKh8Cf1yeT8Sdlu5WYkZjVUB1NN1aDDKnnUkRlT7lFN7hZFvs3P2kUOG4oQK/MTWnGS4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751639657; h=Content-Transfer-Encoding:Cc:Cc: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; bh=GH6Ad5BaJtxdBkiinUY7/X5vKVIV/ggzsySF13b5Img=; b=JF/iROmJl4i3L0Xs08FRWhpWz8SAeU3L4t39DmevaYgyx2b+d9muICsKEr43/0zTGqP4HCfOCeFc2GHo/QXDX/eKWM86ENE2rhi6wlFKAVxQ7gev4Aj8i1/QaGMhcbTKRsEpRLe4W87D3x7gaoPGFeCohI64ecInMmogj6IzhUM= 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 1751639657511875.8634550313825; Fri, 4 Jul 2025 07:34:17 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhKy-00018S-Hw; Fri, 04 Jul 2025 10:24: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 1uXhIK-0005GH-04 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:43 -0400 Received: from mail-ot1-x32d.google.com ([2607:f8b0: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 1uXhIH-0005kZ-Gx for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:39 -0400 Received: by mail-ot1-x32d.google.com with SMTP id 46e09a7af769-735b9d558f9so292399a34.2 for ; Fri, 04 Jul 2025 07:21:37 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff0471esm528016fac.3.2025.07.04.07.21.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:21:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751638896; x=1752243696; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=GH6Ad5BaJtxdBkiinUY7/X5vKVIV/ggzsySF13b5Img=; b=UzQHZiyHkxy4OhCPIdANQp4KSck4L3HWNMrE22kSyxhqPhsb65usz6yl35qy77Ivjn 6AeVp/KpmHXnOLwR8ZfR7fuwbxH9JKM2AlBENUZnFqbSfjYCh/mj7iDiKs0WqfL2AXTL 6l4NTXx7wRc1QH86mepDEqQQOd2CDBS8Nwr+FQ+VzC0pgq8f/wp+5wnDINpsu7ZE21x5 fmIywxDG+y5scrhM1GL/By5dSrKQya/gkF6rd9PXxa608e+1Kk264Mr8qn4N0FqixqgS 6MkbmQWg7JzvFP9K4hFx2NsXZqW8xdAdLTex/9GHmxBde205bvkE9V9ReAWn/XzkVo3L DjSQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751638896; x=1752243696; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=GH6Ad5BaJtxdBkiinUY7/X5vKVIV/ggzsySF13b5Img=; b=iUY7txMgaCAl4es7hws/h/GvWoeFq7NuiZjyBR8E8YEIEpINr7L/sSC53pRU0fAdZk QebiSiVfcB9D+ayYCfRBsoYS3rEZXSnvkW+l3OdiLXh7ygLwC3QdoTGJhfIYUL1/NaCK nbAqbcUgd1DzRvpDTB9bDlxAuuexLUcC4Uh256TeFxGEB3y724ECLHMy9aHAzZXAUUTN 03VaZXNKykPWBVFwnF0P1pvS4OoahQUk5oKae0t6mgPP+gz/cpjcEkVmQSMm6Tv/rZ2K TM05KUtZLI+DycL/Fziqr6Q1wqRlQNc4tavPDxZVWN2wwonmpdHL5Z8tZWHoyu9UzWhm oJHg== X-Gm-Message-State: AOJu0Ywdyy8LdsjRrtMcKspe/IWz5WiDdrmbB+WaV0CvZU8c5IhO/rUv 6a6b5amN630QLVaTVRcQE421KXQsgoyCj1u+/zg67Ri+ZbwQCJuS+4jBO7s4tItNa/vCeQJtayR vJfBOk4g= X-Gm-Gg: ASbGncsokUviUYcsuHEx9zBr2KL7noKkB382wjjXnPEdEkBZ9HqH5g6ICLMHFEWpepv xxQfEKICfcVorDA91p+fqb5LSdYJbJifk+xT3pmcurtGzesCF/+ZafbalnIA/IJVz+ij278l98s 7odBViTi7uEHyYWps2YfZK7yht6nZC43x1cM60yJmk64K6XmE0l4htdaOneS/s1sBysANQKJ69D 6xvTM86sGGtfvO7H3Hb3c1qr8Y8UTn0h7I3Xx0UdxwQDyqgFwoaUbzvMukL2qsAH14qSTAfZrRG 5R2eczmUCTbip5Dc1Wu6QxSSC3p/g7Mfw0blzFwP8KyOHuhYipELaFVDyN83fMwUt54CyNmDi/A r6m/ysXXjo2Jr6YG2GKq/GtLnik2FtUuAZ6kjzfA69tiV7Ouz X-Google-Smtp-Source: AGHT+IGDyLglTYGBNlQUtAuzAlW9rCAqvEhCHp/z7yardxzYqEuMWcZ8JkU2QqXpBCpynsTQZrkFKQ== X-Received: by 2002:a05:6830:2c05:b0:731:cac7:364e with SMTP id 46e09a7af769-73ca49fe83dmr1546684a34.22.1751638896224; Fri, 04 Jul 2025 07:21:36 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 020/108] target/arm: Implement SME2 MOVT Date: Fri, 4 Jul 2025 08:19:43 -0600 Message-ID: <20250704142112.1018902-21-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::32d; envelope-from=richard.henderson@linaro.org; helo=mail-ot1-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: 1751639660507116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/translate-sme.c | 13 +++++++++++++ target/arm/tcg/sme.decode | 5 +++++ 2 files changed, 18 insertions(+) diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index 9f25273992..797035e289 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); diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index cef49c3b29..83ca6a9104 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751639196; cv=none; d=zohomail.com; s=zohoarc; b=XetEwwqIO1s2fNXMwqQX2T5rhe7cXzbYhVKKFe4kFnShloKlfk4LaxZQxVXRoPwLQzy/txY0hgkB96VE7GSa+/Zs1QK/ro+IPwp7GByCdF3zoh9eI7JybcmO4Z5nuFxOPCluilTTeEAWysgHl7c49nZYwE38S6gfj4ksSuTTl5M= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751639196; h=Content-Transfer-Encoding:Cc:Cc: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; bh=BGYgwCm9XTJh3Jv7tUzNjmQDxtUUB3eW8c2+NqQ6fB4=; b=X2+S/2Df8Dl1JoAmuJ1rV6/Sr8xrud8U9GeNQZt10nAzd8Fzhas/cgeyHD8LIcvzHYb3NzRq5jkYNG/6xeC/HSn8NQgLS7HsH1AeYGJsTZcC31z6hildpmMqukXNA8SyQXv1A8tG1ELvlHy0Dtu7Usb88x3SSI4jc8Y1QYC63wE= 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 1751639196340467.6147292268695; Fri, 4 Jul 2025 07:26:36 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhLq-0003qZ-A2; Fri, 04 Jul 2025 10: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 1uXhIL-0005Hf-4V for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:43 -0400 Received: from mail-oo1-xc2b.google.com ([2607:f8b0:4864:20::c2b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhIJ-0005qK-1M for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:40 -0400 Received: by mail-oo1-xc2b.google.com with SMTP id 006d021491bc7-60d666804ebso1198981eaf.1 for ; Fri, 04 Jul 2025 07:21:38 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff0471esm528016fac.3.2025.07.04.07.21.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:21:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751638897; x=1752243697; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=BGYgwCm9XTJh3Jv7tUzNjmQDxtUUB3eW8c2+NqQ6fB4=; b=C4shi1ACYr3AZDxvxj1gB7KJuxxB055i98/W/47IhEtP9yCv4qgyDr88m7zqUBWrhY dFHBlykGderhVVzzYsd2CsT4owv7fXYYsxDBOgrQjsF6TY1UolAQCZBJT1qYVCSoHMMa B6mDMp4kqnZhLrKdC7y5kFWz3elKBxhwM95IIcMthiCQDiticJXs3gMV1uHlTWG3rym7 bL4nfSbzjQYTscQW2hQYfB/b43zTxhdS7ZTQ/thtYFPgL6yHWWDqjW5FM+s+YHURzZLB X+h8bnrWOZEmKXFSTmeKdRccDp/hCoUgopdSAMsYmepWUCXjHS/aVNehHcd9h+KXfl/J 5ZrA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751638897; x=1752243697; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=BGYgwCm9XTJh3Jv7tUzNjmQDxtUUB3eW8c2+NqQ6fB4=; b=MAUp06piY1OCSEDm0scBmvzcajIWhMRuaMo1CsvKpt7Q+kCSJ+TOPVn/UvIqCbxu5Y PMMtwCh9dMpWrxeLRR/0gMQiwkxe2Ki/4KWLgLuENKALfkjP9C4a67sVihRr4rfjFnkO e3x/VAhj6IRAgxt2NNjFGFaTv4E1MNilOIIcMAQzw5vQ445i3JPBBg9IBfIl0jLvJkX5 wva1ftKLVyw59V0jjtjSTM0gtdRzrXe/pH5N6/bZuTo1wwjsoZtWEfXQECP6yT0GIUJK /+0PJdTbhev0+tAwDbweLc4R1o1sD3Z8akeo05pbdG2q6Lqed7+fXasuYnJtSsgTBUUd QVlA== X-Gm-Message-State: AOJu0YzVDZvuiD20+WSDgAcx/7diSSaqGNOfIVtQZ4TQsQrttGn85QgW sISo4ltiskgQAG2/7adyAK8aG9F7aoL6Fy0u2+f/V1Kdb7HCwnV69gEwmcoCseCRKR7BLZOxsZS 1+J520Yc= X-Gm-Gg: ASbGncsqMScSksYL0nuNrJvLrxsoqIQXbXvJ4NphJj7Y+CsEJ4BguAIzDkHQo54gxbN W4hV2FYeNMEUmd9/2/J5Zd2i5g99ITB+DQjx9Jpz5CViuk/JRHwnZtQPKFHSJ/oQTvkicNsvspH 1vP9Qlt34KML/LnoLh9mP+gfHfwsri6MNwvLiWQMCzbEbSeilKkLHITL4DfingwrCQrma+hthVR gH9Rb1UnvNtaeKifwr1NIwpDZDIy1f42dju84OXhGkOZMuKloOJPsC5X062YWZlXUSxWdJxrCl3 o15BtEuktKnBA6GvQVAwAUcFJwIQL/h5sKYGsQRLggMuTdvFdBhJ4FyvKKO4fZ/Jo0MshfOnxpx Ov4YL5PTouWtoRJYqVSvAfTqRuru7BDaPjYDnOcHeBTood2nuVarnkzQDYcQ= X-Google-Smtp-Source: AGHT+IFSHi0RvfK3+yVRW1UTA4Vowz2RMZLpC4PI7MFtKTY9ju5ZXR4nUXKxojKoPxrBybSHes9YBg== X-Received: by 2002:a05:6870:2103:b0:2eb:a2ec:dc02 with SMTP id 586e51a60fabf-2f7903f154emr2599345fac.11.1751638897229; Fri, 04 Jul 2025 07:21:37 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 021/108] target/arm: Split get_tile_rowcol argument tile_index Date: Fri, 4 Jul 2025 08:19:44 -0600 Message-ID: <20250704142112.1018902-22-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::c2b; envelope-from=richard.henderson@linaro.org; helo=mail-oo1-xc2b.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751639198612116600 Content-Type: text/plain; charset="utf-8" Decode tile number and index offset beforehand and separately. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/translate-sme.c | 17 +++++-------- target/arm/tcg/sme.decode | 46 +++++++++++++++++++++++----------- 2 files changed, 38 insertions(+), 25 deletions(-) diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index 797035e289..e22ec393fd 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); diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 83ca6a9104..efe369e079 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 \ --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751640827; cv=none; d=zohomail.com; s=zohoarc; b=Iw9uSM2KePIqNWJiTRNbPM8kvxYoR+evgCsqUBUwkCdNY6WjPwcqMHQgTz0kblbB3teP4C+vrlGn1iS0ywQaFBgoXeJ7ch2nYJRvoRY8hkiv4CX/0eSZKa/JStbFUhvdZpb88uTX1u1/Ggn5TZMuHkeADOf+R/TRenR9OHvBOnk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751640827; h=Content-Transfer-Encoding:Cc:Cc: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; bh=vNZtaHI5O3n0iljnyaa7aMe3WPZsbbr5by4hbzbNhjg=; b=ISrHjmU47khGw7iuqjlCX/2iF8AKTZnxk+CaqeE89ePebZ3fXfRAvHclK80BcAtxpb6guXdJQddfwRYBEY57FU962VDjjyVQNfdMOt7rhmanDdeb4VjWl5fCZSk/jSWhtygeBlUptBQa7Te1vHPIcQVN3tefwdIt2/W6KlUvcSU= 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 1751640827432184.0443417874833; Fri, 4 Jul 2025 07:53:47 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhL7-00029m-Bk; Fri, 04 Jul 2025 10:24: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 1uXhIM-0005JC-K8 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:43 -0400 Received: from mail-oa1-x29.google.com ([2001:4860:4864:20::29]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhIK-0005w2-Nv for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:42 -0400 Received: by mail-oa1-x29.google.com with SMTP id 586e51a60fabf-2eb6c422828so1284064fac.1 for ; Fri, 04 Jul 2025 07:21:39 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff0471esm528016fac.3.2025.07.04.07.21.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:21:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751638898; x=1752243698; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=vNZtaHI5O3n0iljnyaa7aMe3WPZsbbr5by4hbzbNhjg=; b=HebmlD3DvB+PxKtezevm47UMMlrVzYsCHM8IiyqOQKYwWBwFcxXLS6USWgnshhiQwQ qP/RJlmRjD7eqF+UufmVc/JuzKeESe7d69047dGrETWDevVBzW4sL7qK0K4vf+Jb6zP8 8od8jRo9xC4uCkURQ4YOVxkioXWqYdowpYLfFeAMWkflV8s05FkIZNGe7ZX4rTfbmG3F R27p3GdCBKas6+TOQoJX3BHfxo+ZK3Nqt6S2G0LwgOh3thD401m0aQj4swd8mxPQ4d7r FyCYJ4Lb5MyojFKbsMASvjlAw6V8dW1s/rf2uXkdjVyS6iJZTZaw6FOipg4owZz4LWDu bOog== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751638898; x=1752243698; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=vNZtaHI5O3n0iljnyaa7aMe3WPZsbbr5by4hbzbNhjg=; b=V1qxnTnB/ixo0Z+fVrT1QJAASk/PXG1ax6AkB7H07+7q+f6N58F5UEnAjF4Qr1MzJ5 ArFc8BIuxmQB2YwcjIK2AmYMHwT/Aof+ZG+ykGMjtlw1uT5IY8KQszlONZ4mqthp8b52 AG0vX3hEJxsVoUoAwDEswA+qzS95EdZgf0aAIrq8o26qp3cd53K4682u+s1IjmLoFRvD 7fVNK+r+t8n5PG+ihqaYYB7I/mOCXIRnv6sdwZARaNAoHhrJ7WewWFoyiQl/tR0wfQ27 5GOJoD9W+QadfjCnoGHk9W8oemjDG6pJ3QgbqDmi6Ot4rqTIDsMGCbDh/XLX0qdnmDth 4/IA== X-Gm-Message-State: AOJu0Yxtkib+9fy/cQ7/zXAuK6MuZTE4VuS1rUc3R7seci04z/+4YKwL /KfjomDoUiBBU6phzavYczzuNcYjsmTnLluwgCw359lgqHWXNYvCJsBrJ6QTjFy3/2xy1vNdpXU BBXW2sXg= X-Gm-Gg: ASbGncsxiYSBxJXxoHKP1TQKGPxN3Ug6j41kzsPBvI99RkoX4719ftyyDDjsYwLFvYD drWIgNt9s3qLMbRRhSA6qn9ipIgM9F4ttSMhKPxm547N5pAboABWuapieUgHke6K2qs8/XaB3Oz T2UZtKP4J+tf8eMzzu7LG9HaktVS8S3Vh9BnSroszxE6zkZbL0OLm/NufkzvZ35ZrFZZXiVHMR4 QLPpzhUiy+y8+9rJV05LMkKynjMMv56U0yepMgXEaJFIxIArJZyPBm473p/8LKSMYAlkS1h1xQM 22wL1Dc4BjfGqV+77kREs8LM1+HffipW5WVAgS5jikwq1JqNANxJ+DHiCmUqpMOReDJRDx8uwL1 4w4ZOjKXy3BvbxXEyfeQ6IhBqkb8Ht4Zg669EFBIahz7iBOkEDw8mwCGwv4A= X-Google-Smtp-Source: AGHT+IGSPBGEjjQOexAr4bMXfSiBmvdwmL8clH+5CGkTkENBzy02upJqnEUqo0FN7kJfAc3fZiDU9A== X-Received: by 2002:a05:6870:8885:b0:2b8:608d:5dd1 with SMTP id 586e51a60fabf-2f7904b4ac5mr2889471fac.18.1751638898422; Fri, 04 Jul 2025 07:21:38 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 022/108] target/arm: Rename MOVA for translate Date: Fri, 4 Jul 2025 08:19:45 -0600 Message-ID: <20250704142112.1018902-23-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::29; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x29.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751640829171116600 Content-Type: text/plain; charset="utf-8" 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 --- target/arm/tcg/translate-sme.c | 12 +++++----- target/arm/tcg/sme.decode | 42 +++++++++++++++++----------------- 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index e22ec393fd..2c8cb24b7c 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)) { diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index efe369e079..459b96805f 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751639195; cv=none; d=zohomail.com; s=zohoarc; b=VQ3XOsm8iYBkLarES0IjqNpjEM8DsuzMxhPOtMFJFA0NkSuk830y2vEuYPwNvT5Cemr3+lj7onwWZyWtDkVb+/Z1zGVh/rPY3HQwJkPGwpAyzh4BENg9/XMInWsv0i17N5lli+1VlIegEOTZtP1mT8xFkAXBqRB2rF03HToj8OY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751639195; h=Content-Transfer-Encoding:Cc:Cc: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; bh=4AUY72MQ1kLespnWy6+gTZuXwFdz1x/T5obJXeRu/P0=; b=UNBIz5JZTkiuVVa4zaElcqdva5xM5eBQ7qL9hAvRp3KDXPLeuyUFiFk+ksFHkSm5TU7RMTVV9nlpFcVOcsCC9UVxPDqWErCb26EKDDpTVWEu6gycWNndaN1BsCP1eab7IjavKflm0UPT55ehsnEihyKk78CVbXBnf237xN0qln0= 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 1751639195354702.9104418860754; Fri, 4 Jul 2025 07:26:35 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhLC-0002QS-1X; Fri, 04 Jul 2025 10:24: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 1uXhIM-0005J8-71 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:43 -0400 Received: from mail-oa1-x29.google.com ([2001:4860:4864:20::29]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhIK-0005xC-Ed for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:41 -0400 Received: by mail-oa1-x29.google.com with SMTP id 586e51a60fabf-2ea08399ec8so907967fac.1 for ; Fri, 04 Jul 2025 07:21:40 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff0471esm528016fac.3.2025.07.04.07.21.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:21:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751638899; x=1752243699; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=4AUY72MQ1kLespnWy6+gTZuXwFdz1x/T5obJXeRu/P0=; b=Lhmau6QGqcdoH9DWRx60TUgZ/cT9KESWrseqQxFmgO3RudgKR4WYQ59G8ZbwDXV0KE XaQ5EmY0RuyYSGYPpkbj4Xz/PJxszTWYpwLooW+CxxIrZO8ZrPRRd+mmFHCpP+LzpVBt fQkwZpBTI8E3jTODtx5ankFzbeomTO0d93voRAurviq/q8CaBf1MEGSbkCugzRzH1XLG ycoiRGSeEbeo9/1OUTyW78RtLNCFC6x7b74cYc+TC7vBRkjEZs0OKvy0veOsZgSM5It7 Dzxv4Xzk5QYmD6H+MFimfFiLcsRTMGoi4KZ7L/s3xypHM5QHXL+NY9oK7ZEIgY30rYMc 635A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751638899; x=1752243699; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=4AUY72MQ1kLespnWy6+gTZuXwFdz1x/T5obJXeRu/P0=; b=xIep8koO64aTLkae+UCl+HzJIYTl8SdDSVFR9Y2v3AtDa/q+XYBrYb16tQA6DVvZfR RWfFHqTI00RTtbvy3IfEDzWF+2kBfphT+PABHg5tzbGCWe2r+6MXQITAMiHXF3X03A+2 QvHvSxqOFiMQQYTcxhyFv2YKdGeu3co2LD8RkGHTUKMEZ3yol1GoFD3KOQBSnmo2AiZD tNov5XF0fQfZpCguc5GmGKe0Zx+lqc7nh204vD+6fQn47mBENjDoZXzEVD06KzyIXzVg SwkMN6uRriy9/VFCKaiPbrIQDe/18O8JSNEYxuwis7uPY5cQsHDxCbwj3iKIY5ZATcWc qyKQ== X-Gm-Message-State: AOJu0Ywv9EHwOJ1NYWMQi5gyvuSD7JE7RGz+gAaTd5XsDDTQAr5iRziv BiK0SPRhMF8N1MBK7HEwkRRPeDVRZ8CAq/CcdmxnrHdWlY/PawZpBze93mlXH4xs8lhPys50tXU 7CUvDtBk= X-Gm-Gg: ASbGncvsTA9Nm3fvOTLaX585gzyWtZltU2ALr0bqPPnq9IrOBLW0qWQ9NtZpa9Ua5aW cXp3GXhE+mxCTrUAVjmA4C+XBVj74+KFSLZCGcOd4z70McSt6MYeuSclPI55wr4ENX4ZbvHq2xN +xmgmDSbySPzXzNdQIxFGKEyZgwpyLMUClAzv18QYCPtK2L6fxPsP2NAE59PAbGHp9O7q85KKu1 r1jMI26MfuFDwYwNMxInsgHM0RlHLd0SMky9laOXJM5EmZf9AtVCTiEx53UMLk9fx2/kZ95yxh+ cZHHywoTVbEr0Yp60Q35U9VlU5TOyHvyNb1GKjb3MP/P2iVeiYtghC8H9EAp+0u+a1d1OAes54q coy8DI1R8PdFQvQBScLXt7fI191VZHYbeMW1lqYN+BD+u6Vn+ X-Google-Smtp-Source: AGHT+IEMW1yxSJIgNtuQlZDM5FugioD2nIaKinYyThH7g2uEiSMLpm/Tjy6Zm+BENNfVsTX4mgfjRw== X-Received: by 2002:a05:6870:f21e:b0:2d5:1d1:8613 with SMTP id 586e51a60fabf-2f796d5eaabmr1679955fac.23.1751638899199; Fri, 04 Jul 2025 07:21:39 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 023/108] target/arm: Split out get_zarray Date: Fri, 4 Jul 2025 08:19:46 -0600 Message-ID: <20250704142112.1018902-24-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::29; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x29.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: 1751639196363116600 Content-Type: text/plain; charset="utf-8" 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 --- 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 2c8cb24b7c..ea0e5a7cb5 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 Sat Dec 13 22:57:49 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=1751639570; cv=none; d=zohomail.com; s=zohoarc; b=QjSh1Cgim1jWi8jowoBn49HPyr5SxBESAt37pIuG643m8iO7YMhSXZPMZR04CIbV8s2MX/T2O6yOV+BNP5jp4ULuVSmJi8u9xelcqXA/qW4sLpfVwGCmFxJuZ3KZ7w9VX4A/03UEphVngT2UreeeDtZWb+azg0a5trZ/KNvo38Y= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751639570; h=Content-Transfer-Encoding:Cc:Cc: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; bh=rqIaBK24/nk8jMN0M07Cgetn4Lo2/0ptp5VJcxzRmEg=; b=E0a/vBDpMuRZfDgbZjallaCLvz4bP1zplhXgiNi88nMkKt25CN4znj1AEMKiaovPium0FF03ed6k6KNC7+1XD24cRdGCS1DAw9fkuQy6tB7F8FP65hXe48aHcCY+lYWP72v83A4M4xj72mmhMcOgoIxQuy1mCCYYco2wR+gWGro= 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 1751639569454198.92515056597313; Fri, 4 Jul 2025 07:32:49 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhLx-0003z2-UO; Fri, 04 Jul 2025 10: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 1uXhIN-0005JR-Fh for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:43 -0400 Received: from mail-oa1-x36.google.com ([2001:4860:4864:20::36]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhIL-0005xt-5Z for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:43 -0400 Received: by mail-oa1-x36.google.com with SMTP id 586e51a60fabf-2ef461b9daeso865728fac.2 for ; Fri, 04 Jul 2025 07:21:40 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff0471esm528016fac.3.2025.07.04.07.21.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:21:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751638900; x=1752243700; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=rqIaBK24/nk8jMN0M07Cgetn4Lo2/0ptp5VJcxzRmEg=; b=Z1bK5mgeuc5qmQWtDACZPyqzxlLzDVmooPaFqRstNz1EQQiPMm1hRc3gXW1WrqQrd4 dKyEd/Bu3Dr23SnxcmPImNUTPG9Xpjfq5/VnhXck4VZv3Sv0+E3czIyoJMi/XtehlWyD ja3pEwTR//xISZ5iQOQn6nor5xzxjH9konOHNbIvZ8JEYE28m5O63kTcldrIJHMIb6CT uibNM679cLNP4eg8CZJugHWNa+py0fTK/lyvXuNJyx3ym0nGY88APn8VDjaiHyEeC9Ft BPR2ecE8sLDXWL4SgCal4gppcLrUK0QnbClKXZ0itT3xd5LBgSB4y9GKyAasjuR9qQvZ cr4A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751638900; x=1752243700; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=rqIaBK24/nk8jMN0M07Cgetn4Lo2/0ptp5VJcxzRmEg=; b=NmDph+Li+BSy9Zy/xNH5HFoy2MWkM/n7J1vWeK5schjKaiKrFOLaPpE9BjzBwsGWo2 Za2QE8oeEgyp1NjDAMzEbpiDoxtO0vYHTPKLfj1vLjF2K6szhrSp6OQukz2ft7cGLHGf 3aq6MIqqvm7qvQLFohgSZJU5QuQpMyRB8jS8fGUc8D2IYx7Eefeo1DJMJdw044vUDMJm 8oalJtNe7ShiSurWiKBoI2H6RQvbz0G3xswji9nssJ12tPtpBqBFk9z4SxnDoM5+ujsC F9Cv/sg9jfgsdL2G8U/0vtJREjLgsWCeE+fCVq20wnJxomDh/rCwJDM7qmMyo+sLUZgO U5Rg== X-Gm-Message-State: AOJu0Yyg1mkvp42z82/zcwCqBUBRdmQEJ6jDUlakSiQMwPJRXwpbNMxH 24f4+fMBnR+Uf/x9KKeSWBUMULjPEEx5VmFijixUAy+TN9HEtrtvhvwKPW5pmNsHw3i2pbc7PBM g952Ul5o= X-Gm-Gg: ASbGnctumzk/PNvY5dUDs7JQ+gPafgb77hNBfjqLonVVZzMj2aIlO8ZJAIuhuOOQVBf xF742QQSnCow1dq4J5m3Ue0jLtSGmMzvGCy1vveJ4p6vevB/eYKt916Mc2DLFUMXcWG1q6EddME Bn7Y0iGQRT54En+Q0MfjfKuuqNIiIdddPtQGs8U9SAtJKVbPxeDOH7Vde3UEMatEpNCWaDujwNA D+CkdcQ6sXhVvRFHnkGCDK3KNakRJkhY79MgNlrJH4VzxvGa0O17k3LK/LoxXC8QvLIQhnCi4XI JX8K6LJ5gREauMeTyZoy8nDl+SzeOEyfsOEm7qhZ2lAvhqPg3kxVtgX4/YTIjICng/16rfCx9Vz xw2w0C4NR/hKpRBUqgDrbjjk8mkoePDATRkvlmqGsqJPNqPul X-Google-Smtp-Source: AGHT+IFOhUXStVuBZrwPFmDLMOF6bETY/w9L8mWLFARvttAShCBDRnZdKq7S0zHY+DlBY3WKaPUd3Q== X-Received: by 2002:a05:6870:c154:b0:2bc:6675:2043 with SMTP id 586e51a60fabf-2f796ba7168mr1806318fac.14.1751638899933; Fri, 04 Jul 2025 07:21:39 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 024/108] target/arm: Introduce ARMCPU.sme_max_vq Date: Fri, 4 Jul 2025 08:19:47 -0600 Message-ID: <20250704142112.1018902-25-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::36; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x36.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751639571273116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- 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 39a9234ff2..c8cf0ab417 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 77e7c4a6a5..bd33d6cc6e 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 Sat Dec 13 22:57:49 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=1751639655; cv=none; d=zohomail.com; s=zohoarc; b=eyUnxZIHFkZjGtABJeo4d2XWkmOJ+Py7Er1WPmbIPxz3fThLtY4RVvv46K65f9iZysvnxR9s1eqm8XnBX7/lDqXJC4MeyrFrWeTIMLs+PWiIYpOBomm4E4aO75E2ggvpVukm/huUnM+UcuXUs76jIxTUoZiWLEGf8ryE/TH23Lw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751639655; h=Content-Transfer-Encoding:Cc:Cc: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; bh=hc0eTMVQkVvabzZCGUHLKHl153QrvGjj9gP2KnNeHXI=; b=KZRU84Q5X1wMnMCmY/avdTp7dtWsT9TbieNEy9iIOJpcszjrKdfZ1MTXChs1cCmpTRiaj4iw4aN3vWleZl7NoGFx9DWE/1HHkLJuH7AGOjTlq53qRfJI4XGqkjFyXtn079VERyXG1URluiSCga7YGTPGIQvxSn4eM4y0dzvHOl0= 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 1751639654976206.45755153046082; Fri, 4 Jul 2025 07:34:14 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhLA-0002Mj-1s; Fri, 04 Jul 2025 10:24: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 1uXhIO-0005MH-MG for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:47 -0400 Received: from mail-oa1-x2d.google.com ([2001:4860:4864:20::2d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhIM-0005zA-I9 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:44 -0400 Received: by mail-oa1-x2d.google.com with SMTP id 586e51a60fabf-2e999729ccbso667960fac.2 for ; Fri, 04 Jul 2025 07:21:42 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff0471esm528016fac.3.2025.07.04.07.21.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:21:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751638901; x=1752243701; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=hc0eTMVQkVvabzZCGUHLKHl153QrvGjj9gP2KnNeHXI=; b=qclYZMEloyUJAuMNmdfImb6efTEmChOo8BA8neUn5qrzTDnTgzVCeNJC5gCybD9bSs 7cv6QKnGXN8/XdGfnSF1VcLRPAM1ic6vcm2BJx82fXTXpLKWnaoZ4osvecrrWFvmWKbm Qz7blCmezg3KXHY81Yhv4D9WmgQR0wfaQtz5JQ+8JGlEZdznIOq/CDuBDdMhPiJLdbnt vuoKzxy5gQ4csBv/SGkiTx5cvQ1ZSP9CKtXx1whAIy6UQRPVX6OHSksC8vortH2oEpjP b0Lrz3gQ76xR8QoggSddsBUK7oM/9OVNEl8BDTkXbFbpOkRLNVxtMQc8CduyuNYE97Gt H9yg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751638901; x=1752243701; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=hc0eTMVQkVvabzZCGUHLKHl153QrvGjj9gP2KnNeHXI=; b=OSyWctpv80BMnHds/pRtpeyVSHaTnXPq7RIh4e8iniigknVqVt3Bt2PjPRxHnkRjF5 FjE59RASSd4D76Zvn+gDMSud6V8ejSkGu04pxYZY6TbtWKSthftIL+QCGcGeC4gqYe+L T9LiGwyLfAXypkCK4SLcMptT6Xo+YwVQo0FVmcHjNtKvuz7nCiU9uDTPIIU9nrzr40at YFH76KjZGBiK9sg5s/OPLpjIFOdDJVqiiAXmK8pu8UATtEE/TmDBkk63tzUslkZNvLqF 7C9MV+WaA0Ps5zOaDed1f1fjAwmr1JT9mDDHoVHezgInopl/osnGT0zNnhqBmPDuS6gn 9/GA== X-Gm-Message-State: AOJu0YzhVxjCS3k/hHIjFWu1mdJW70ZGwwEVu4j+4JjRSy8n3EUFNb5u mzxE8yZpbSUbomibeLeKDwRA1ZqjjTHOyPR98uWT59/1hXJRHDDegbgVS2Ssuk15jw/47ZTul3z 6OhBk764= X-Gm-Gg: ASbGncttS1/OgZvknRqjqL7Kc5SSdLh97nCqQUoD3x3org0vZJsKczfdEcZjv+pnI3r hpIjLglLxnbiDBhvf7EKP2bjDiHYtnA2+Ikadkqkgjgk88IeyXJFwepXDrf+mRIvsBO6t2bD+KE 8CRsQVFqC6yXi/Vaa0eITpfwBLX241qY8JKj6vcfnlRu5RrlnEVP08qOl5nXbeJcITGLQkkBeX4 vHxymRSaRU5MghBzSAPUP0OW95F7cv+T5kK9GWuPn+8lKqIsBIrN2+7eY5J1piPI8B2xsPIeQSv 8f13mpaKrlpxnVsBSVK71uts1Jd74ehjX5GxTo5diHxt1/ggY1nCtgtMm/nPh6csMnjITPq3jT5 6aNhO0eXzPUAabhANjnhJQzzqHzIwlCl1SlrxZ6r/+zydWrST X-Google-Smtp-Source: AGHT+IEmLlXzWMPfMDzlFsyXnUhOEKH5ry0yQcyPCqyQQ74SCXQdMaYO2bSqNcECSAQynxOw9X+Lcw== X-Received: by 2002:a05:6870:14ce:b0:2b8:78c0:2592 with SMTP id 586e51a60fabf-2f791e8de71mr2231004fac.23.1751638901148; Fri, 04 Jul 2025 07:21:41 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 025/108] target/arm: Implement SME2 MOVA to/from tile, multiple registers Date: Fri, 4 Jul 2025 08:19:48 -0600 Message-ID: <20250704142112.1018902-26-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::2d; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x2d.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751639656195116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/helper-sme.h | 9 +++++ target/arm/tcg/translate.h | 1 + target/arm/tcg/sme_helper.c | 64 ++++++++++++++++++++++++++++++ target/arm/tcg/translate-a64.c | 1 + target/arm/tcg/translate-sme.c | 71 ++++++++++++++++++++++++++++++++++ target/arm/tcg/sme.decode | 37 ++++++++++++++++++ 6 files changed, 183 insertions(+) diff --git a/target/arm/tcg/helper-sme.h b/target/arm/tcg/helper-sme.h index 858d69188f..8246ce774c 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 b03956a793..7336b7db72 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_helper.c b/target/arm/tcg/sme_helper.c index 7b0bc1b17c..baeaa3e069 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 ad293c0885..d823036c96 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 ea0e5a7cb5..7d4c7d7e85 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)) { diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 459b96805f..5eca5f4acf 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751639337; cv=none; d=zohomail.com; s=zohoarc; b=N2ExM2exQPJd7Y9pPD6F8ClKqRO6YhLT8bCaRH0FaqF1ft2qWy09JsurNgQKleQjfIElPrEiXsqgxT5873ko/m48Ksl/mXdxtP1tLKSLyqRhJ7Ss/mKshK599aoMvqJ0tOzJh9IGs7bVRPoEd+alfURVP1rqRs6VoQgc/PTyCJk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751639337; h=Content-Transfer-Encoding:Cc:Cc: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; bh=QZHxsghFcUANhQ9FBp2KHEXBbIHriLYmgetebn62l7Q=; b=cDYrWlBj33mwE1eUR2SBKytEKt3OIe0iVl2vHCkDmtO13QPEYc3RHpQQU6JXaPPHOIsXEIlYklyG557QIWVkr+96LjwG2N8hgGWS/HtQRXUigJsMcPYONezISKVsGONfdZo/t9X/TnW5bcdMtQ83YVyP4W9Vjj4eC3r111c3k4g= 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 1751639337813574.9233027803907; Fri, 4 Jul 2025 07: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 1uXhMv-0005f4-EO; Fri, 04 Jul 2025 10:26: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 1uXhIO-0005MR-Uk for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:47 -0400 Received: from mail-oa1-x31.google.com ([2001:4860:4864:20::31]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhIN-0005zk-5F for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:44 -0400 Received: by mail-oa1-x31.google.com with SMTP id 586e51a60fabf-2e999729ccbso667970fac.2 for ; Fri, 04 Jul 2025 07:21:42 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff0471esm528016fac.3.2025.07.04.07.21.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:21:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751638902; x=1752243702; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=QZHxsghFcUANhQ9FBp2KHEXBbIHriLYmgetebn62l7Q=; b=AU5Muo+cllVXb82wznK7Eh5JTlDNlTmbLyZfG20giz/yx0OE/yBYdeGqaPkgVGNZrH FtIKufpEu6y633bi4h6D0/pstDxJubMGRV5/h/VvUW1ayB2iNstaIogqOkUjxKCy3ENu Qi7CMnZ4MX/Nlo49k9miWJMX1lriifW6EWOabjnWzlnD/dHSqYlDYvoLjKe5PjI7fE4a /rZairNp+n+gzhYjcHBOGKLaKitAyMQWXiNjugLYmHf6/JnV1V/WuuJBASYseMM3iNq7 F3pnbrsisuR5EyspV75I7MQLqyC5XL0ZmQD4tZv9zv2C8F4fcBlyXSZkkA4SziLQlkRw wYbA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751638902; x=1752243702; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=QZHxsghFcUANhQ9FBp2KHEXBbIHriLYmgetebn62l7Q=; b=f7A7PUMpMYG0j/m0T7Y3pN2tbZ+3MItHoNEHFdxFI/GslFq8SdvPCVkcOKIwQ3PYL4 MbOoXDJuMk1njRubObqZGDtc79/TIghd2lXqMfjDDpAVwYCziJmuq9CUnKsCYGJgXttN qHpjwgp+V6bS1Rr7wo9CvpVIL1xGJylrbbtveyqXcF4Q0gGey+6pnMED3e6lpOAkR1JE tBEinqWD+jZfcF65CevngUuXNFFxXQ/piXZIvLQ0391qQI974hxCTqG3Lh2AiI60JE4G 3RZvk9+oAFlDo46rNgPUbeRjAuGRbIEf4KPm1kUOO4fus7XrveYrDY4XjZQP+nWSwFsE psVA== X-Gm-Message-State: AOJu0YyOMiLiRFtPbTp/aJ853Ulo/U/AGaVM03bGN2Pwiycuw+K/ibRG HYaMdkAcRXTG45+/Jty1zzhHkxLi8DXQtHEPOxahGGA7jZUcTSLHKc3r6ZHnLwvBbKtdJFXZapZ YR/LuPts= X-Gm-Gg: ASbGnctUnjomFC3pcCEBDZ/EknYDReMMA43r8jacd2aTXbVH8/nBlkSxeYO8k6aSIHb NnW5n29I34WZTzuWggPU/314aiLlWmvhdlC00ji3YD+mVy+RTjoOjlKXPAp0jJm7YiAV8RjmC5D I9Tkiq10j1uQeBfkjhth8r8S6Wbh2ZhV+IMB/XlzxTyYry0y53zRasEPUgbJ2rfnpj4aXJABj7c Yp1YJUdurBAaSEp9dBo8fdJ9kNSOd9sipOFaM/ewkbk+oT9ulExL5aFj59UOyLl8MmfI5jSAh/Q Ysc732ohy2nqjvg7JTYf79sYgnOPoqMgIGOIHpld245GxMqKqJ+HhQBRDS3AMLyKjaqWmWgK7Ri Cof3TUBIKFpvrxBEpXc0VBcg7aivlxfuEuQlCgObXGAdEZ9QE X-Google-Smtp-Source: AGHT+IFKU6NlBqBGk9xMCOwyxMHlO2qRgs0nRHmEuwfi+CUOYaM8sD4R/fw6Ryt6X2qBBqouej9TnQ== X-Received: by 2002:a05:6871:8308:b0:2c2:5f8c:4630 with SMTP id 586e51a60fabf-2f7919c7ba5mr2222541fac.0.1751638901935; Fri, 04 Jul 2025 07:21:41 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 026/108] target/arm: Implement SME2 MOVA to/from array, multiple registers Date: Fri, 4 Jul 2025 08:19:49 -0600 Message-ID: <20250704142112.1018902-27-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::31; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x31.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: 1751639339958116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/translate.h | 5 +++++ target/arm/tcg/translate-sme.c | 30 ++++++++++++++++++++++++++++++ target/arm/tcg/sme.decode | 12 ++++++++++++ 3 files changed, 47 insertions(+) diff --git a/target/arm/tcg/translate.h b/target/arm/tcg/translate.h index 7336b7db72..a18d07540e 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/translate-sme.c b/target/arm/tcg/translate-sme.c index 7d4c7d7e85..7b275dd2b8 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)) { diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 5eca5f4acf..37bd0c6198 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751640677; cv=none; d=zohomail.com; s=zohoarc; b=mQq8UBvNZn/ISrcvAv4s4WAsUkK9jSfRn3o++JT61gnjWwKRpZ2D1/Q6GGPO1YRqTmSQWEoiAXyHsZ5hWXfE7+ENAN6mmeHzYHcnJEUVcO4iwm4hQhGXRh4cyqQlqc0dzfE5yLmx35YjrpqPFz7yRdIxiG0906h+E0erFfZtQ+o= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751640677; h=Content-Transfer-Encoding:Cc:Cc: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; bh=veT9cRM8uVQ4CyOBVMkGv45SOq4u7Wg0GMO4n1xsuYc=; b=eAoSfISkQ/n0P2xmFMA+86GWvKIzi+INsartVjJ90PQadIuCvuHZL8x0Mzo3JH4PQQMuakmJbLNj4uLGQsrO9hwm5zVsQXpHVG/TjVG+rj15QU3CauK1ylh90hhC3YM985HiLcMK3jCds5gEw6U/XLjvGc8O8Av7dTMfkM9pAOU= 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 175164067748521.096978799040357; Fri, 4 Jul 2025 07:51:17 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhMV-0004yY-45; Fri, 04 Jul 2025 10:25:59 -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 1uXhIQ-0005NF-8z for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:47 -0400 Received: from mail-oa1-x2e.google.com ([2001:4860:4864:20::2e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhIO-00060e-Lf for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:45 -0400 Received: by mail-oa1-x2e.google.com with SMTP id 586e51a60fabf-2ea08399ec8so907999fac.1 for ; Fri, 04 Jul 2025 07:21:44 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff0471esm528016fac.3.2025.07.04.07.21.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:21:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751638903; x=1752243703; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=veT9cRM8uVQ4CyOBVMkGv45SOq4u7Wg0GMO4n1xsuYc=; b=rqLCLQaSWfRdHP/4qgCODNfkutWwUdUppEzOKv3eKqCxqQZydyIze9szcM3MC8RDR+ 78UMs7DqoKGJuxPP3KKQhXNvsd+AqxGyKuwpsa4c91obcsWwQ5tcD7UgUFfoM1lklR1E 8+/OgomRAqkZayzSLUjcED3AhAlMGnPx0w0ZChPwGNyCHKOTeyQtk3ByO1oU6S+ABcrc qzLGU80W6eHNAmnrsJmZu+Kbl4s0kJcOPtDUttly4kllzZ+L87FcU2KghtgHXwQNgy3E JNYtyhl6II/JH8wkJe98+UIRgT0YldBS1C0ce9yWHpKGf3YfPaRugcImAkowbOh93Nu7 aZfA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751638903; x=1752243703; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=veT9cRM8uVQ4CyOBVMkGv45SOq4u7Wg0GMO4n1xsuYc=; b=qyjrwMbv8HjbMMOVOv1WMNnjyy5vm6h8S9W4Us9GpFSJegdx2hE1WAlnA/QsxHKvnI gSFxGkr62JVhvBHHZcgCXkt5oQKlUOm7vdb763h8wngWF3uY32Bi3OG0RmS2GDh47PQ9 DwUjVdsPyQ3mxQObY8Fn+IwlX78c3KDwPtLh2fz19JjcjnuWfAF2WKx75ePEC1+h+6hA 3pZUvwql9p9laeGw5/u/WIblanvkkVVhQAPcEIEEsOykQb+tmIAiYbdcmiSXfJSi6Wx3 EOKX0Ey232T8hj044hzVegUi+tCk3CmKPCTZgPOOMKdme8imXyrioojMHxtrMaQ6cWYi vVrg== X-Gm-Message-State: AOJu0Yyi0J2MTnevOXt7tbi1vJMowb/Fl8E9gtJyUujc2EoDaAN6H8Au R84CzGx079B0sSsZ/SuTHbIFdxnRCDK2sbbnbldf8BEVgqO3kYFfJLMet5553EGRYNntO+QoSJt LXsryf6Y= X-Gm-Gg: ASbGncv85+Ma7AkuWC0+HAiWfIUyRUdNNAwr1ZhOLW6kZUQbgKlw/1WnMJnAj5zSNNO jBn0ie8FQnCvhZvrNpTw6w4FJcx18hpEMmJAxDCbJ9+kAL1GDp7vV3op+SFeqxerkaqbEISqk01 APUY2MfaxGOMWF1PYxm5ffGD96DbcjjSP6qEUPYQadWOPmcDYcK17g+qmCTQBBfNxfGcQjdnYfo g18bvLcNI+cBR1SNh7n4UbVph7WYsIo56PvnKhcaA9cRBERWgI+2WguMGUv7Y41anPHWHUaY8MY 7oU2Mo+S48osi2D+2JyneWIYONQ6QdlXr8dCNZ25xL0XeTN0Pz1/Ax8t0Qt754zDxgPQat7PYtt azQzuyaG8ljhgrJX6EX+SKfFYDvN+s34j6Y3weLP+ixZu5g65 X-Google-Smtp-Source: AGHT+IGPupSFzUiYRiHKxe4TbmvZIu1ZQcJkHVMehlkocSxuPRjGhl2NLJFDwobWUkATJz5DY80sCg== X-Received: by 2002:a05:6870:e394:b0:2cc:3603:f05f with SMTP id 586e51a60fabf-2f796e07cacmr1773852fac.35.1751638903056; Fri, 04 Jul 2025 07:21:43 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 027/108] target/arm: Implement SME2 BMOPA Date: Fri, 4 Jul 2025 08:19:50 -0600 Message-ID: <20250704142112.1018902-28-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::2e; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x2e.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751640679422116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/helper-sme.h | 3 +++ target/arm/tcg/sme_helper.c | 34 ++++++++++++++++++++++++---------- target/arm/tcg/translate-sme.c | 2 ++ target/arm/tcg/sme.decode | 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 8246ce774c..17d1a7c102 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_helper.c b/target/arm/tcg/sme_helper.c index baeaa3e069..6122a5b5d9 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 7b275dd2b8..c2615f06ae 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) diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 37bd0c6198..de8d04cb87 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751639940; cv=none; d=zohomail.com; s=zohoarc; b=XX2d5ikyvK9DSKnOjFbQ854k35bidzFdtqHaovfulgF7zYOJtM7rnq6NJXmm/ihMyf9djkBXrXzZNtWoIvVLSgK/RV4A4AlRAlnagZwAx0wLO+3B+WoR4AIKbPcCT7y1Sl/Hc6BpuLHHHEvMKq6hwSUbJ/8Rnfgat54wqg7V/mc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751639940; h=Content-Transfer-Encoding:Cc:Cc: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; bh=QH0REyU8cDnWZTUTJJuh2X01ovEw+r0Jjx8GCuZi1sE=; b=oDohnAaFYcbI9oVczFkkQ1vzcSkfjU3r9qnxQ7b3fkw1W4WIrJBTv5idHgBJOr6OKW119V3TFfHLrtAmiL3fkgR3hr92EfpRDlYsmjhPFK+3l44GYirfuKOLzXu5zOtnzZEKM+VopKv33HbK24g7JZHe3zTZntCwmTFb0zQWwhI= 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 1751639940550891.1504545808978; Fri, 4 Jul 2025 07:39:00 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhMx-0005xu-CF; Fri, 04 Jul 2025 10:26: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 1uXhIQ-0005Na-UF for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:47 -0400 Received: from mail-oa1-x30.google.com ([2001:4860:4864:20::30]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhIP-00062M-4P for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:46 -0400 Received: by mail-oa1-x30.google.com with SMTP id 586e51a60fabf-2efdd5c22dfso744813fac.3 for ; Fri, 04 Jul 2025 07:21:44 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff0471esm528016fac.3.2025.07.04.07.21.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:21:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751638904; x=1752243704; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=QH0REyU8cDnWZTUTJJuh2X01ovEw+r0Jjx8GCuZi1sE=; b=YaUTG9Ie9EVqaM2xcIA2WFBK2vjBA7B2rny+8vATUyjBTbaEvjpDQqn+jqqyYyuRRq U2ANWgidyuyTs8H3X1YAtImHshZGPHbD9K3B23nG/vCs1ruPjxGA8h+AKg4u/ySRNrqt M2P0E12PZjPKTHsg2OB/1FBbqDsOK+RB4CxnFHz33Vwtl2uqSCH8aWCbRlnP3HqcC2oE NemA1DRqsPWCeHriHRfbnbfenXVOLO+gLqYO6m5RVBop38F1q+gunl9ei/evcuUFOcyI BdCs0eNgDAcRvzdEQfPlrYtDpncf4V22cQcgiJoHlG0zBpR5Xm6S1RxnEbNVpcpW+t9s HUVQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751638904; x=1752243704; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=QH0REyU8cDnWZTUTJJuh2X01ovEw+r0Jjx8GCuZi1sE=; b=rG4yqx73nsGgsRVksajCfmC3AIkqC49paSbk8wOHLWbgUgLT7vaxuOFf2dtf94dUvq fhWOJm24rru6Zwb6owQgeSwYP+L4XWW2XXAjSbtYi+pPclbk8xTtqwiODz7mPNRn0kIp u2SlyP4oMA29ah02HQRlwrslGO7oVBSk8P2v6SqCU6nZbsycecwWWnwikhE377MJ+w1c /ZCKDlzfuvAYvpXJ3ert0z6dFk4Eujn4Xs2/cRoUbPgzyzRY4Dmylq7sTgQcJwM5vYi8 MXSFZjZGFMDZdvtu+siEcw4P/CZlPlTZ+dRnvvk66prW9Diirapskmkbc1YdrH5XRUDS fXVw== X-Gm-Message-State: AOJu0YycHLD5+HwTnkX49VxQfNyd9FvDOEi50rILWVdf1VbbHduRUWsM bsLEa4fChidKiHyVwxd2RFbFkICO/ASZv1MuszFZKEEpKf0F2f5BSdEvQMvilkOFE+6Gpy9PFbf kymOkOcc= X-Gm-Gg: ASbGncvLqWJ5pfmGgHPqHjHdtfI5WG3mW4fMzX/G4Urzn6Sxt2RculFTS+uIOrZvUDo IuNx+C7Y42TAZJjlWpqiLhtCUUv26r++mmy97VFhs8t3GloRtqm57R01jPZ+n53gxLe+uvdY9uh 85NoiJEEk+YIQhz0wheRgEyjHrRnZ4Z57afTtxoX5yHYK1Fj6ZM2nxOc1IW18ZsznnOKiocWWyS ndFrXUJr/+YdyIhx+EN3yhh8WFn0JD5j8FEBCAkek3skTXKq2EHDQptz9Pm6RjHQoBhYkVv6398 Ozx3qwg+XHwo1wPe0e8WNHDqp9cB/bSY/6kCZOvFGe4MnmkVgZrPCa5elcwkvQYjh2a9+NVuBb1 KL1C9wVQVbfdUER89Jat50AOkh3eK7CJoPYNR2LbcFAyXJ8NIutlTmUXh8PI= X-Google-Smtp-Source: AGHT+IG5cWIG03HEZuFQdt3sFJrMGG5st10cFxCeEVA0HTSzLEg8WRx+fx+ngbdX8cHqsXxX/s6Qqw== X-Received: by 2002:a05:6870:3047:b0:2f3:e087:678d with SMTP id 586e51a60fabf-2f796c0a2a5mr1500852fac.11.1751638903838; Fri, 04 Jul 2025 07:21:43 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 028/108] target/arm: Implement SME2 SMOPS, UMOPS (2-way) Date: Fri, 4 Jul 2025 08:19:51 -0600 Message-ID: <20250704142112.1018902-29-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::30; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x30.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: 1751639941873116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/helper-sme.h | 4 ++++ target/arm/tcg/sme_helper.c | 37 +++++++++++++++++++++++++--------- target/arm/tcg/translate-sme.c | 2 ++ target/arm/tcg/sme.decode | 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 17d1a7c102..ecd06f2cd1 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_helper.c b/target/arm/tcg/sme_helper.c index 6122a5b5d9..8ce50653b4 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 c2615f06ae..0a863a50bf 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) diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index de8d04cb87..36f369d02a 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751640910; cv=none; d=zohomail.com; s=zohoarc; b=kA9f4N9v6B5+CY31Qerp4+5VKUPpc26NkBXyM3xUtb9abOytOrPYBq944OQvZOPOgXX+J89XhxuPRAINVxK7pQR/gCYmw8E0NIN30j/MXdjs+NpucVuBJF1a8KlEihLFpVNUPc20v3RMgs55wmYGNJGLBtcHNzE/z+IjJoiYhQU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751640910; h=Content-Transfer-Encoding:Cc:Cc: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; bh=LMdweUCeXr0ws90t7Pfr3ZnPLeSvedfSjs9EhIvlp+U=; b=K6DlJAU6+ltCMH/4ynYyb+divaGHQVXKndj3iQ0izXvOaqzDfe2mBI9O/pf1DW2Rk7tBVtYfLoXNee7iR4n0rsCeYZ9aSehfqrjcwiWUwaq9iH1siVRM6ShCv9y3J5xOqnufbgzmOgef4E3wSIxK/KuDPNOXu8ms1SnzGY65pn4= 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 1751640910485593.4919237996243; Fri, 4 Jul 2025 07:55:10 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhL7-0002By-QY; Fri, 04 Jul 2025 10:24: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 1uXhIR-0005Ni-Gw for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:49 -0400 Received: from mail-oa1-x29.google.com ([2001:4860:4864:20::29]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhIP-00064n-Qa for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:47 -0400 Received: by mail-oa1-x29.google.com with SMTP id 586e51a60fabf-2ef891cd058so853280fac.1 for ; Fri, 04 Jul 2025 07:21:45 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff0471esm528016fac.3.2025.07.04.07.21.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:21:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751638905; x=1752243705; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=LMdweUCeXr0ws90t7Pfr3ZnPLeSvedfSjs9EhIvlp+U=; b=Zbj04D9jXpN0WQk/OUr8G1nC6actZ2wzaVw2Ls26iPwn5FnFEb3lNYz8VOVRkNbJ98 Y/SxRDsO2u7lsi2omPei0ZxAfOrNLEAK+mvGoeeVdCcAyTAwB/PStyu+a4/Ic3eStU62 OliLZih+P8cujHeSWsamLUMK47RnN/e9YWnOvuEdqIC32jVW+M5sbE95m81BvGHjftmG I8GtODwBXxEn3SGicYSan3xGp1vSZ0xwBJQ77UG/44K71OUY7YI/S8l5PTD5WgHTSaQK iFpCfHGoctfUtrKSPbCJRR4AiXCI7+uK/grjqut5C+jFYK0jiBiJ59+Od/zaYPsbdmQh lkdA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751638905; x=1752243705; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=LMdweUCeXr0ws90t7Pfr3ZnPLeSvedfSjs9EhIvlp+U=; b=RWnFYWQG7jCCal+n6XaIo6Rj0WcNRJ50ar7eM6G1ZFzD4homdudJthMVG8nbw+iWcC amVJlpjQCuJ9f9EWWhvo8DSOEuqH8wth63xtzIdMJd+OJS2EF4M78vt4wSI/yM1CKQkz Exidm7DbDb8nUorFWmqLHkqArzkyMJotogDjCYIEGUdzowo86SnI3OusRyFIYaVgHnUj jrYK9ZQyGMPbgmafPiXptUY7r5bi0stDy49gTsDWpEI2DbHEWP3YCv32OIPRT6g/+E1R +TgsEME83zfDCUk3hUPw5TchgfKNDhyYWztuVQDYJP2Bzo5KEcOKeHNfOzw/Ei0k+1jy 8pvw== X-Gm-Message-State: AOJu0Yy9HfylhSfmoz6G1tadQA6BbTb9fsRaxHfBiQiCAEg9gt5k1Va8 TFai9XEOilbmUxdfwnWFUFx8wVW+OJSpCdKtusSG7QQ6nAZq41PiCDOYTOWZsPOmCIwBQrasjSA CsutCQWs= X-Gm-Gg: ASbGncvtoDfBncu7cxIB3AUUEFkXw0cl8krYZFkGelqRi5ZbOVX9FbWUSCNlLP3quSC hFXWYh638tDVg2PR9J2zWkUbuHKXUkKRKaTu7fhimEGX4Sl/stKYDlg40w6TmyltZWHp+SEh6dH I4wBuMms+2Itw7DquRaNQgoyt6hST1Xe58wlNh5pl59Qw/4J+g5Ax0wqAH50am3XZyXaFK4N7XX fe8ElJHF9Rv53v2JXb51IJEoz0/MZBVP/43DOiJh4wfMF3A/qXVQQLvKZX1BrHe5Ddh/176YI1j GyNcIWeOaFk0zKbTw0xKB4XOpqY2L0a09bikukaGMsq1AcHBiKHShxVFDEmzOnFGHqa2AfCDrA9 I7Ir0onC58+PevoEuERmHEqkoNCn9KiK0L5gkI56P1UUEOPCr X-Google-Smtp-Source: AGHT+IE0lu6vFD2ajOMSh136r0dJeSbFhdYUChrcNZLm2xpS5cMQSWm1GmlfALxyJYmk10F8bMqUmw== X-Received: by 2002:a05:6870:d907:b0:2e9:93c6:6e4a with SMTP id 586e51a60fabf-2f796d8020fmr1716287fac.38.1751638904659; Fri, 04 Jul 2025 07:21:44 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 029/108] target/arm: Introduce gen_gvec_sve2_sqdmulh Date: Fri, 4 Jul 2025 08:19:52 -0600 Message-ID: <20250704142112.1018902-30-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::29; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x29.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: 1751640912134116600 Content-Type: text/plain; charset="utf-8" To be used by both SVE2 and SME2. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- 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 8a9f4b2053..993dde61a4 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 2617cde0a5..2429cab1b8 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 d2cd298b5b..7e304245c6 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 Sat Dec 13 22:57:49 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=1751640770; cv=none; d=zohomail.com; s=zohoarc; b=cLo17NIr33S+5JzXK4lPn56bc+slmeQEetXw7MjORfMzOtha7vyfZzc2XwQvmkC7/WRMZmOWdecSv20xHF6OnRAJgZ8rlZYXc5pm100AgRfZKEHreTyHzCa5zPGdgildudiXc4+f26noZ9Ap3d733Md7ueH66IiVfba6QaarEeg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751640770; h=Content-Transfer-Encoding:Cc:Cc: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; bh=Vv9/FbVQ9OQ1MNhfBoLQppE1DlJI90EkZXM61FqgCVU=; b=Gqvect9YKN/vcw5Nsv0UFTSj34FlWVRuwz2iR6enhSKlJdsxV2HXgDiYYKMwH7pCy+1d7hCcAfp7lHEmdPyDUUWXomDS1wzbSn0vOuuY3rku321CKeP9Y/dE7Q7TlNnjnLo2M/ZQSxJN7F86fKkR8JWJWSWVhCzDuWLaO4i+n3w= 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 1751640770986338.89621846761133; Fri, 4 Jul 2025 07:52:50 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhN0-0006LK-25; Fri, 04 Jul 2025 10: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 1uXhIT-0005Py-Ka for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:51 -0400 Received: from mail-oa1-x31.google.com ([2001:4860:4864:20::31]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhIQ-00066H-SB for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:49 -0400 Received: by mail-oa1-x31.google.com with SMTP id 586e51a60fabf-2f766a60df9so453890fac.0 for ; Fri, 04 Jul 2025 07:21:46 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff0471esm528016fac.3.2025.07.04.07.21.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:21:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751638906; x=1752243706; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Vv9/FbVQ9OQ1MNhfBoLQppE1DlJI90EkZXM61FqgCVU=; b=SaOCQwnos3naFN8NxhxOFTK3isj8lZKgF+Jc/618O39Hp7E1AXhOC97gqrwlYm6AY3 9JQDfBfQbjINH97HSUWfhwc2C958WBwl4BcUNpln8jmqASvz8/JrRemrMvIrxfYU18Ks ZBKQBI6Y1ASQo6ZVXqaLqgmuMjIEqD9Z1y52nbPrl+W8xRJs0xLzHPhxZaiEe3YmKUq5 nmOKipSWvCCDiKJsHC8ZJr7pZbqvUppdn3NbK1GP3RrQYtbP4Y3cTdz85RsdKo7VgExG KtqFiBXuD2Ck6hm50hOo9GqHzBdD27JoT9Mg4AZeiGwy+uYpKZwlkcGgLY+CvrNvM0JZ l9Ww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751638906; x=1752243706; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Vv9/FbVQ9OQ1MNhfBoLQppE1DlJI90EkZXM61FqgCVU=; b=UDhw+5DmgIh/xB3jtqVa3U4E1ekckbgPLblf0APt7WF1Cx0JX9AW+NyRg51wuX2epU j+qdRlfCdE1jraVO5bBSoH3Fqi3ibDjUQVF5Hbpb+NuMDjwf6qclvSMxaI6D0pehIGBB 7MurOsVW/XFf+akmZu4zW+8WhJqew6B48TZZibcz3QZ5ybRI6/Zpb0MnZFI8gaauArx/ Z3yAgPDxR2/w46+KSZ2TPPltrr0ni8pzJ0P9hG7DL3TJnFIJ/H89dohALJM9fec4BIet J1/NIz+dx7y7nZ4xQwGEShgdOKxspurZOeqbJmMMDtPYsEMQQs5K8oTpBu5/Y/SvVzhY l5ZQ== X-Gm-Message-State: AOJu0YzcjaeGWA1pSe/SihmP2iWp1fOSkNzR/MEh1u2fFsPgU+eHJx7B hy9cZ0i6TfwKBUtgHLOZ5B8kR0iU/qDktcMHAszM8FEJ5h4G8hBXVaddVFzHjpGZ7wj+kMR7JeI tKBjGTek= X-Gm-Gg: ASbGncta0qqlNDbp+SQf9gkAKRSXKZ5j5ZhAAP+x5xIDX2wNfrbB4FlgaRmU84Xb5Hm pLUgE4tKEQe7wnZb4MhYd8/ZeMq231xt5yq0XbxJoo/+aIG8M2/thgCwDAxDqUO/odyTNkona2Y ACZRrhAAuzR3g0UARP+Jx/EeyBqwg0zwkD+Lo2JfYgvNmkRZSMByH8xMSSpFBKI99L41pwlXVWz RONUvWrwmY2vAOiNdEnXkC8PzvU6Mn6dRaGMpLuI87Z2Rr12ndibpYE4tH3ET2etlAvfoUa2fBp MdgqAHhImg8ol5LZXR9PFVUn7p3BT/GBY/q+pIMuHasbmdjL6Pq8sJJ5Leb9ZGcyH5UOtLkCQo1 VGAaKCu0T0o1fNdiKtvfO/MAgIRYncoGM48hRe0dPlHUb47OA X-Google-Smtp-Source: AGHT+IEm1ruv8TDw1IXwvAKZqr1Ve/Z61Q51STx/8lKe04KqZ079XKmi4lNXFfJXQErg17kf5Z4+ug== X-Received: by 2002:a05:6871:3392:b0:2a3:832e:5492 with SMTP id 586e51a60fabf-2f796d5d132mr1726176fac.25.1751638905516; Fri, 04 Jul 2025 07:21:45 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 030/108] target/arm: Implement SME2 Multiple and Single SVE Destructive Date: Fri, 4 Jul 2025 08:19:53 -0600 Message-ID: <20250704142112.1018902-31-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::31; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x31.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: 1751640773205116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/helper-sme.h | 13 ++++ target/arm/tcg/helper.h | 8 ++ target/arm/tcg/vec_internal.h | 4 + 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 ++ target/arm/tcg/sme.decode | 40 ++++++++++ 8 files changed, 241 insertions(+) diff --git a/target/arm/tcg/helper-sme.h b/target/arm/tcg/helper-sme.h index ecd06f2cd1..cdd7058aed 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 80db7c2c37..8c4705fc53 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 c02f9c37f8..64a7249d01 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/helper-a64.c b/target/arm/tcg/helper-a64.c index 4f618ae390..c66d521278 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 2cc8241f1e..8d288f3a70 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 0a863a50bf..954da18ff0 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 3b7f308803..8b49577e2f 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 diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 36f369d02a..005f87777b 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751639350; cv=none; d=zohomail.com; s=zohoarc; b=bbKySWvWsPA/AxKnEjr4AD6i0VcTsNOZ+OktRw1uy2Ev+K/IVIFwV05xkqvxPKDTA7wTaLP8MdkvkGG679OteB37gw5xNZX9XhLlasSsvh7X20B73Zx1FbcFODBz1gcmA+Ot+aE2yE5iPE1XP88l9G8XnhNIOr7tMjcbXNCcfNs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751639350; h=Content-Transfer-Encoding:Cc:Cc: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; bh=MRxfJ1u+s+aVTjZ7uskUJBG4OLnsoZb3/qDCUdd3CFw=; b=DETT3HLRUEL5qH6BZXMs07hd+5ngQqJFmzVu+OBcf8Gv6y8KO/Ys/PeWaQDTAtboapt2D96kHTUT0nvlf4rnEvkuclfjxUUK4rxkJWSIttuATj/Po5cAjCn9T6G467ituUx383i7klvPNfqj3j86ahu8gOHZgiGU7Lldcajmu54= 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 1751639350369707.2697633332282; Fri, 4 Jul 2025 07: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 1uXhLY-0003Qq-HF; Fri, 04 Jul 2025 10:25: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 1uXhIT-0005Q0-O7 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:51 -0400 Received: from mail-oa1-x34.google.com ([2001:4860:4864:20::34]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhIR-00067C-S6 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:49 -0400 Received: by mail-oa1-x34.google.com with SMTP id 586e51a60fabf-2ea58f008e9so1150164fac.0 for ; Fri, 04 Jul 2025 07:21:47 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff0471esm528016fac.3.2025.07.04.07.21.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:21:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751638906; x=1752243706; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=MRxfJ1u+s+aVTjZ7uskUJBG4OLnsoZb3/qDCUdd3CFw=; b=b0wbtZd03toccHrcv/+7r0XFjkBBEr37JafrP4TazDqf2+QvaNNrgrdoko/Aa7JMpm qp4/t83quZ+nZHsd5qm1xo6OkKcWJ6EghSv4aCsYPixUslWn+Z6Fwlb/+muWAVKzOjeU NW5pWuuhheC15Z8PUTxbSP1Df/WMMHIoepBJfrEYyfamB3XV1AN37hAKoyfWzgFZvHMs d+AUUbXH25X1DNmmyEVCpS3++oA4+KPH6u8UjdMuJJnSoFc2QPeAcQPebgcLq1pIikKO O/s36J3OC/UiY5lY4itb8WcNqNtQMFpTGGSJvfN8xKNNzeloKR0Q9RDfXC3KRFJ4lUqy SSuw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751638906; x=1752243706; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=MRxfJ1u+s+aVTjZ7uskUJBG4OLnsoZb3/qDCUdd3CFw=; b=NLPIfFjPTDPTxOhrJ6AVxTUWfdVFw6KXwvsMsE/OrI/CHEANFHvltSJeN3/gWBViup lEW9WVvg04BUSwQrMttTDFVn6k29F5sh9g4wpQPTsml7z71cRLyfQGxriWQ22YoYzWUu yU+zkrEgBqMW3hGN7HAdOoyX6/Lf8q5QMknDv5eHvtlKgh3xldUBoI/lghXKGaZGL1HC JRMPznSbu1z1ZOW+4VdlwjlYLSDZOsphGRxTKq1v8pDFQPC9xRAnK0gg7krrmF5au/16 erj4Fgv2Z8jbfmWwX3K6iJQFRjXIS240tty2VaKCuAZ6Cftl7XT9541tdghiyI3NQRV6 3l3A== X-Gm-Message-State: AOJu0YwfN10QBspjdNzQMCUgUSZbFkXPfHzr2nyhzfF91RLRL6//XWWU IknKRXZUVipNrdaZDT1bqw3Tbdid6XkjeseHU4kCbwfjf48hIRJFqWIOITyaTtD7dsvaGdRcX6G 0ma+5q0k= X-Gm-Gg: ASbGncs2bZVqwg3H9KX/ZxfkMouNKMJdupntvdKg4fLhsQVQhrOUQZo1rn0CGScPVM7 FNf3/yKylwK/rUI2cHcNRiQYuwgEZHIaE4gKYvkHj5tW960payL4wLJOlwzTUQV7/w+FzOVZOsK Ci2ZVRLjJ3mud3nNPmyknL+TpWTW9bY56ap0MhW8ztm+/mbs1qptG0tiDNDfVJwxXHEemxNRmjt BOR3mJEujF/1iH/4nHUX9+Q6kpwFwkDNvuVEB5KcB7Fi7cAJnP8JyajFanEFlGQz7jJDfuHeaKJ A2yCKoIQg1/f2w+xPFmmqsLHqlqwnn7lmGNwDKfccgmS0jmt4dV8wcMqmCa6U96bdxNPGzheKeb YOrLMYq27UY1Lpi70NdwaV/XlHIgtikBzQIsg1O6afPJBToCn X-Google-Smtp-Source: AGHT+IHEuH3oVfsdoVYppSvo4WgXEP1kE4vmiaef+8hDGngF0eimq4npMPkPkH6zq6a44L8D8YZtLg== X-Received: by 2002:a05:6870:85cd:b0:2ea:7101:7dc1 with SMTP id 586e51a60fabf-2f796d387ddmr1703502fac.33.1751638906557; Fri, 04 Jul 2025 07:21:46 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 031/108] target/arm: Implement SME2 Multiple Vectors SVE Destructive Date: Fri, 4 Jul 2025 08:19:54 -0600 Message-ID: <20250704142112.1018902-32-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::34; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x34.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751639352274116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/translate-sme.c | 65 ++++++++++++++++++++++++++++++++++ target/arm/tcg/sme.decode | 36 +++++++++++++++++++ 2 files changed, 101 insertions(+) diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index 954da18ff0..0a6a10b63d 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) diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 005f87777b..470592f4c0 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751639235; cv=none; d=zohomail.com; s=zohoarc; b=m54wkBv3+skmdzNEb5DyEfvz/5w/de7x2++k+N9gOhoM1Poq7McrIOEyv43IyLCiVCMpLx50S5lzzPs7/tLNrpAFhQsdTDzmgiiLiH0ZaczB/vgQ743zvv6tDflkJrbB3Y0NM609lIH3VzLi6zRKF6H6PQUlhtzl4uGj+o0TW3k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751639235; h=Content-Transfer-Encoding:Cc:Cc: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; bh=hgAkAg7YJqGfUg4WhfoOWkT+HZptAFeo1x8ZSeNdF3g=; b=ee0T9Qd8CpR6toMqAzjlopAm7QUHP317mIkPY8vWwF2EFZGFVorsLsL2jbNLgZZHpSUQmHogRWg7ABD3dubsgfqE4PDPXRdBgNWkWRAVnH7WZ7Pwao4SaIhpGsuWQfjZxeAW+DBOho/5MLJPXzQRlQceWcbIoL3Rn19Zxtib2dU= 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 1751639235182964.1993107348592; Fri, 4 Jul 2025 07:27:15 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhLE-0002dh-Sx; Fri, 04 Jul 2025 10:24: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 1uXhIU-0005RX-Kg for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:51 -0400 Received: from mail-oa1-x29.google.com ([2001:4860:4864:20::29]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhIS-00067o-RM for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:50 -0400 Received: by mail-oa1-x29.google.com with SMTP id 586e51a60fabf-2ea58f008e9so1150180fac.0 for ; Fri, 04 Jul 2025 07:21:48 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff0471esm528016fac.3.2025.07.04.07.21.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:21:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751638907; x=1752243707; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=hgAkAg7YJqGfUg4WhfoOWkT+HZptAFeo1x8ZSeNdF3g=; b=uhk+5QQ6H/vh6VjONSgQRcdVuM3mtU2NDpH0SG+C9AcMMqXRg6mb5+lgJWD4CaFxRS HSJwOVqfDPjO3kqiCDwd+qL8f98NQySuypzkqEuSnD+VFThnhkPD7Nxm9UxZPS+ke6FA ZXHK46Xwy4uOZ/dm+2/qCexm9CTjbvurTfx5YHJzWwBWhmOsiDTl/3KpOyA/7yYo0U7q 2x52LcfElg6PxGb2jNuqRvi0Ggy3menmKnYijRv18FwbDk8xPcADsJlvicRa5Wc/xbyw nD8VtD7tekCVFuoKjk/vEU0BWMgxXTnpPx/FOC/pVZhn1qAVXfm0claUgSLa/JtULRm+ DSbw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751638907; x=1752243707; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=hgAkAg7YJqGfUg4WhfoOWkT+HZptAFeo1x8ZSeNdF3g=; b=tAi4zr7x1LZR54muDkchwsqypiwzr2EiZObj/u0gh6Y32XzxYOLq5oaWId7NXGwdQV pDmltDv90WypesveYasYOfvzMrPPdftRt9mwWEUn/IXhrHZ8HhBaUxySXh0Y1FvTs0RK dpmM1pHbPW1qFaCO1Ll7kJ4ciHdjhuukbPKOGaBSi8qeeRw3krqSZKVTMR9NN5IEcjja zkPT/QxnQA9ypm/yVVOspOwEE4vMOPkEJeb0iqyqec3PINAw3jFgD0mzU/+WOUb+qIvQ DIO0a0r3g7aZrbJK1320y1+2Vja1IkxXuzq81hNrJ1GYtanTUG3k7x3f6MaVUpmBqrmY iIBA== X-Gm-Message-State: AOJu0YzmEwTT3B2QE3TTJL6FrHwpDQO8lNyen0+fTPT234LCp2P4Yr0Q 5+AqwvOF9zhvBdazcliiMaCMXh4aTdXSHMboz+fz+4dUyJ+su5I2WrkOG0bW8kjjSJ8L5ypVjey cklMWoHo= X-Gm-Gg: ASbGncuTzanQaW0EFuOBkUsJsvRo6kyRIODcHePwIQhlFQ3ovesb7SnRzc3kz7yFl+0 g5Noi1dIw1ynO7MUyhgSISZex/NBT+uZiQesFZwC7a6dsOodnynBcj01+xIJ5OF+AMHT60VKpvh dgXsrhqNtsZGLD8HsRCOyFfotgZ1NFGWS9JZanfAOQXlfQQzfSD3NSbfruI66fjK+B7ByZ7kSXh I8JBElyg9uY9rEicbrXPdOYdvPw5S65jL+mX+S3n7R0XXs/dJvg7fix9UoB/5PNZDdOaJ83ChOy HFyuH0nUs68FOlV0R63chzwZI6uA8NYz7bc1hBMRv5WR3a6pIYocTy5ZYlV4xd0TPrHgZt8MJn3 BJ1t1hSv254vZRR8mBvRTNIyR6fY70Bq4TTSSIILxB99BD7PpJuOZGJIKoxY= X-Google-Smtp-Source: AGHT+IEnpBHqTYyJuu93rNXGlEcxyZoP6waxK2X1oKwyz2Bpoc1rdQVozo9V/ay/aSF1iArkfxk+pg== X-Received: by 2002:a05:6871:7823:b0:2f3:e087:6b08 with SMTP id 586e51a60fabf-2f796c685bdmr1760676fac.24.1751638907369; Fri, 04 Jul 2025 07:21:47 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 032/108] target/arm: Implement SME2 ADD/SUB (array results, multiple and single vector) Date: Fri, 4 Jul 2025 08:19:55 -0600 Message-ID: <20250704142112.1018902-33-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::29; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x29.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: 1751639236877116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/translate.h | 2 ++ target/arm/tcg/translate-sme.c | 30 ++++++++++++++++++++++++++++++ target/arm/tcg/sme.decode | 15 +++++++++++++++ 3 files changed, 47 insertions(+) diff --git a/target/arm/tcg/translate.h b/target/arm/tcg/translate.h index a18d07540e..f974996f3f 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/translate-sme.c b/target/arm/tcg/translate-sme.c index 0a6a10b63d..4bb880d9ef 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) diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 470592f4c0..8b81c0a0ce 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751639131; cv=none; d=zohomail.com; s=zohoarc; b=JwTuVueeuBnpp7DyfNs3qy5bnEY5pQUqMtDbPt2r4/WkqUWlZCczYn0ny9bUttAz/90NVBsUu7Ds/kUNdv9ip8DaYO134/j4xPtacigR/KDrQTWpPZKVJi8axYU0T0iZlSPVcYnFm59oeEtTr+dLnRuJDR5jkK19klssGEom6tc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751639131; h=Content-Transfer-Encoding:Cc:Cc: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; bh=AQf/TObpoRHlubh31JKaROZXrhMyeMqBNp1Pj+KLbEk=; b=ObsmlnrCqaJAfrorbfcU4ldsSF1jrar5TWai0YnvTE6kNpJMS8BVotY+i3MG8Nlnl+94GPflVsn7b64nBo3fH1aZcJizl5RxxeXSR7ky4cWfP1VL/IXf8xVpIgtXAVvJvrA/YHTBX1qcKIVFMYzk452TW89ZFjirqVIA5AoInyo= 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 1751639131643951.6014563481443; Fri, 4 Jul 2025 07:25:31 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhLE-0002aN-Js; Fri, 04 Jul 2025 10:24: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 1uXhIW-0005Vp-2I for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:52 -0400 Received: from mail-oa1-x29.google.com ([2001:4860:4864:20::29]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhIT-00068V-Qp for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:51 -0400 Received: by mail-oa1-x29.google.com with SMTP id 586e51a60fabf-2eacb421554so352550fac.1 for ; Fri, 04 Jul 2025 07:21:49 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff0471esm528016fac.3.2025.07.04.07.21.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:21:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751638908; x=1752243708; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=AQf/TObpoRHlubh31JKaROZXrhMyeMqBNp1Pj+KLbEk=; b=q0fvqTfAW03hxiFdt+xg/jpWZH4UTMi4mWSSEpAIPmyR5Cdq+oGuzQ1IZeodRkj1DW WG4iL5scMOGnpzNMxg2RL/jeIlQXrV7Qf4SIPZpcsJfCMztrkKdC6Gk5MQBGhBddxivW /IcQzdZvNQ87Fnom/a2xBE0gX00Q+0Eu+kaB9xxPSHA8WZoEb7/PA0uTOl4RaLe/pvMv WUn1LttssPJKeUYOETGv9C1ifWakoEJcQRfhku+Wbye8ob0hGU4D9Lh/tACWuXDYuYQ3 6ybHGQkpRTFLQc/6s37+00y3AybJSER4WNY+fTn7uG17Z6d2gIaPkl8hYFhL4JaMdX1n edSA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751638908; x=1752243708; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=AQf/TObpoRHlubh31JKaROZXrhMyeMqBNp1Pj+KLbEk=; b=wmDyEJTsf9DDBzhh1Jgr9xaGpv2PBa5VL/EcA/PTCbr5kmjk/gcW9LCmJI7NWX1y0p JnJnYrRzRF9UbM8mQ71WnBwH37UwHs9t88nbwto5Vx8ZB9r74DE/fkNkJfS/n1Yl0w70 K3tH44DOrVCzVZ/j+mb88qXieMmfHPZnKG3/d0IlS7ZtN07yvy9E+G/QYVdkfzFeS2bJ jJ83tNw0W+5Q1NI0BW5N2mZ7OQoO2uQa02NO4HdL+9H5GhxKsmCWh8LCirrvS3I9ETgK a3RnTETXAa7jBHSpYm8hn3joCC7oXN9aTk41oyzz2p1oe4YBMgAbdhylANxZUAoc359E ryOw== X-Gm-Message-State: AOJu0Yxo8gZrT/4TfofAa15Qtmh6qb++U4DayuEdQhrV3Ojml5VHcgXM KNTmPmQu2gNYkLSn0BeeFTkDCfQimRvQx6wiHPgShM7O5ywEFKqdNEskTvhxRQyf0sp1TK6dN8/ 2chGq54Y= X-Gm-Gg: ASbGncuHJ4XuUWooVpjdObyHYKQBmBCjJ5zsCx17DiM9xK63SI1WEqWMpCBu6PZpSTQ 8D5VdT+Z7hWCd9AYulyXS2t4nXGVSELUTLNI8Q21wFxUtkt+y7enaKkwJv0sKvu2pqFjqcipDuS AYUOx1Yiej+j/WPlOLlVwtjrzm6GOk57y13QFbethe29hhVRlzWg0/LLeBznDdiGNPI4re7bajG Bsx55d+YB1uSxK8Iu+6LkbccbaC0glDayoRZskGNko08ZptBMojzh49rwjiAvjOvqHN9XPRvKk2 /ymOwOB6se7OZdZgeQ4xMfFtdav4jxyihb2B7/l4lhziC6pbMeKjLKEzthCNwzcwIG0roVfbhzm 9pqFyeOQSDpeAKMbg198/uizRMNeSJ9+OfpTRrkzGm87KiUuq X-Google-Smtp-Source: AGHT+IHyESVmGj7O0Oq7Qt/mEVraOuO7zGJwCjrPX8wvdDpgLHuCV/9jT88AIbbw+yqgRCfg2chjNw== X-Received: by 2002:a05:6871:8790:b0:2d5:230f:b34d with SMTP id 586e51a60fabf-2f791d8dedamr2380889fac.1.1751638908410; Fri, 04 Jul 2025 07:21:48 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 033/108] target/arm: Implement SME2 ADD/SUB (array results, multiple vectors) Date: Fri, 4 Jul 2025 08:19:56 -0600 Message-ID: <20250704142112.1018902-34-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::29; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x29.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751639133542116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/translate-sme.c | 30 ++++++++++++++++++++++++++++++ target/arm/tcg/sme.decode | 20 ++++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index 4bb880d9ef..aabdb96675 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) diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 8b81c0a0ce..a6dee08661 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751640892; cv=none; d=zohomail.com; s=zohoarc; b=mFW4P8sW1PbQH88PMQGn0CqE1/vzypS+g3BF2UDpBS/RFeZ/ShCH+jrt0RR6Tj+dy9XRgy4hQ+aV6CGh2y5hvn8OId9LXTZZ1Gw/ktWUc9onUSWnndTyF2mQxP9AApKXYyrfqf37er2SejGo3j5fr4+M4wC8vxSDqrM2ldNLn7I= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751640892; h=Content-Transfer-Encoding:Cc:Cc: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; bh=N99/thIYmrVhphn4jsghLGsBrndERIdHe0ir0x8GWEE=; b=KvlVpfph4c4o3dUZXQXAT2QhBg5oVKtHNRaCn9Aoazu9pba+K3R6LPEpA0UEKfKtmPunJty78LmfWKsXYr4JaICgAJWiZ5lyRZKKSTGOy9SkUhqmwAaoM/AHy8XMj4IXdylqKoFGyYMYVHdN9hWlZCohcpnUoYev43bag/Gt0Jg= 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 1751640892112810.2402136572496; Fri, 4 Jul 2025 07:54:52 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhMW-00055J-LP; Fri, 04 Jul 2025 10: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 1uXhIW-0005Vq-8H for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:52 -0400 Received: from mail-oa1-x31.google.com ([2001:4860:4864:20::31]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhIU-00069C-8z for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:51 -0400 Received: by mail-oa1-x31.google.com with SMTP id 586e51a60fabf-2eaf96c7579so794853fac.3 for ; Fri, 04 Jul 2025 07:21:49 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff0471esm528016fac.3.2025.07.04.07.21.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:21:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751638909; x=1752243709; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=N99/thIYmrVhphn4jsghLGsBrndERIdHe0ir0x8GWEE=; b=KYPdP7Gd+T7jWW+nuDah7b4liP7rfW/Tgf/26K76duGE4NPuUd8U+oFxfrMQUn7q6w vJB1Yb2xPD5oZWCKRT80T1U3sMy3f+7B4sGHdwFOxwUh0amEjBS9aPeRYxQiAFNWtCj0 S7VHc3hAfy4xOaSwdH1twa7TuGauBaWEsFrnNyeezAP6uYuYcjzXuX/1isbcmxJW4WuX cH4ajJ8OQHQ9gyFAubWv8hkMwUkwnsTlePMRqCgF8kpQEn8FBFnA0ckAzXL9hrwhKv0e Z8cD8+waMgcPIvAMRqkxG0VTxVT9p6y45JBoj8cZ0JFNRrclwKXpF/1+6zo7/Br9BCgi OgfA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751638909; x=1752243709; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=N99/thIYmrVhphn4jsghLGsBrndERIdHe0ir0x8GWEE=; b=IyLZFChWejhpecJrA/aflKrNXiCb+FcunmIe2PFrktTX/dQeq+T802WHBzF1VLwKL1 07yKvDTCYsFKJT5UbnvR7B6IIHXsyd6Gi/ZxbrykuL95fADMTIWQVUyRQfWJVbCNm5DK WnYGE39rthPMZMrr2Sn++gZRvekbp/LFHe63ziNW4cOf53qEut+5UC5CqKeE8p+derLT y5ESe3IeglA5EZTB0U+wIfidicugFPf8Fr2YpimWAfuEAlTVGGDx5hj7kRosjcJV1Vz4 +wrPmkCDP0tgXiRMKYYb9sKOWYdQoC2WCQy6fAm3xs2rlP/ORsC5Qq42Z38HESSfxVk0 vRZA== X-Gm-Message-State: AOJu0YwZpdTG2zVMj/8Q1LYW0WuOTj4xrqvgzQ7gljePW2UPC0x4jmnj ARKNEirivekyUqE9oRqfK7M3sxsXvyKtEebIMG420H0eXzxVj/OGpS0Agkv/LewfxsWTnaegLjL HmTy9gjE= X-Gm-Gg: ASbGnctSCej0SfcG7rpYnfVH78ra8/f0i9agttRQCglkYAJJpKjH78JGOgbgQCQXuj3 MHNMo5XwQwPFqQmLeDZmXmfZ4IVmY5WucELwX0R9IVAPDUZ3lbnVovr+noSjrJVA6tJZA5LteVE GP06FZRaFocAbmyBuQdtSCAKKeOH/xNDsSCnyfL7e2ag2jHWZ/ga/eo37SDALBmLj2K91nY8Fha ROWqIRPcs5DYamNzQKM7gJ7CFVulgqRtfrLyTdOcHsS75Qmqau5xumd2ClRSxdDI5fJFsY7t1ww 441zNLeZOdzpae40fILBd4mEZ7cK/Q/Aq9Mc82zqegFVJDR3BJgc9QIOXumhPIuEHuaZpF0VtSF VhMQWWCIDPSRu/7yxRtJM7WBPj7YKYs+H15Ux5wY8kSd5N5Cl X-Google-Smtp-Source: AGHT+IECRBt11eYsF+Iig8KsLvyzlMJf0c8h2uvR9dWkR18NiciS9vhmAZvrjQM2fQysBvWJojDt+Q== X-Received: by 2002:a05:6870:5588:b0:2b8:e6f2:ba7e with SMTP id 586e51a60fabf-2f796aaea72mr1847358fac.12.1751638909157; Fri, 04 Jul 2025 07:21:49 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 034/108] target/arm: Pass ZA to helper_sve2_fmlal_zz[zx]w_s Date: Fri, 4 Jul 2025 08:19:57 -0600 Message-ID: <20250704142112.1018902-35-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::31; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x31.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: 1751640894001116600 Content-Type: text/plain; charset="utf-8" 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 --- 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 7e304245c6..b85bd885f9 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 8b49577e2f..e8467823f2 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 Sat Dec 13 22:57:49 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=1751639335; cv=none; d=zohomail.com; s=zohoarc; b=iNZsBlAaGeWRn1ACyANAfGnvAejOBLdYJWWtN3Dz7VTifdZ0mbwpQtKWa2OpYbG5WgoLg/I7+kzg7BshgaaXSJBPlqawq2ZPZ8dj4sjdMypIL8peTvHaEKLqVPQCs1u4yYLzzgXNuWDGUij8bY3wJoNkBvsUp763Ow3jLtAh+Xw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751639335; h=Content-Transfer-Encoding:Cc:Cc: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; bh=vRLXMT2SgHddXL2FtxT5fbwaMhj+IOtlZidR4XsmCHs=; b=W+U0HzX/jPMdhyloj8VmqaGpZlayJH4nt6YBPDN/BmqcE3EHWyumNsimydZiJwes2wh6W7PS432TcqMHhty/OMNK0YMKfmZLT+sYTPQn6pkOQPRW0sCr77e+npW/LOfyL+3M0ZFUT1qwUe25tl4hdwA8n+iOFYV5RAn+WuhTAOo= 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 1751639335324543.3096710609318; Fri, 4 Jul 2025 07:28:55 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhMr-0005Q0-Fs; Fri, 04 Jul 2025 10:26: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 1uXhIX-0005gO-F9 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:53 -0400 Received: from mail-oa1-x2d.google.com ([2001:4860:4864:20::2d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhIV-0006A5-9K for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:53 -0400 Received: by mail-oa1-x2d.google.com with SMTP id 586e51a60fabf-2f78ef10832so691166fac.3 for ; Fri, 04 Jul 2025 07:21:50 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff0471esm528016fac.3.2025.07.04.07.21.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:21:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751638910; x=1752243710; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=vRLXMT2SgHddXL2FtxT5fbwaMhj+IOtlZidR4XsmCHs=; b=g+8bsaz5MPe9Vwikt6FU7eQDhjCK5Lo9Memit85CgENlOfmUWYIvhNHxKjIUZ09VOE EL9mZCc5tM2+Drl4URlEcAfbOVmEGtW1QAbThhIwSOAcA54u6MtVNM/VfehYJ3mPiOBt CrVCc+9WQMpDwp7osK605+3Ilz12p6ryg5AInrCcPx+vpZdjQihmlcCjos/kJqe7kK/a m0nFTzJU+bRuCoO3maM1Q6tHDfUtOp7bTZbMNxT0GwdNtnGf6i+595gg8n/5PwdW++Mz 6XgqQ4Jcnfu5z2cfFgO5fJZHgq3jR8oMm7aN1to8fraFvpe/8YOmLczuzMcdhAj1D/Df fadg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751638910; x=1752243710; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=vRLXMT2SgHddXL2FtxT5fbwaMhj+IOtlZidR4XsmCHs=; b=Whx9ATIuGmpc+MMaG+YACwBUYk2JO8bV+y2kAhW7pmboHiLWmp9R4UzLSfFgCmu+8k TcoQTe5o1znl7icoVaZOnyiuJS/RwSpPsg7em3WWwBlALphvezzDSL6wZKXE3HdOMtMW 9N89qxpWyvRis40nDwO9Sb3ELjJyuvkAksB0L8gK6AvfelilRfDCHbi/QgZaFc6W90W7 OWkDp9o56gRLk2pe/8UYwikrJBLOggYYtwJ/ygJ5Wh3IsmJ3GCkDw+uox/SQSK6twLR2 qtAQyW8AN7MVP0kCW6TWEBe3QkfWD5L57pmcdsSumw42vbBI9ps7EgSdyCkN5VIRiBc/ BDEA== X-Gm-Message-State: AOJu0YxafjFn+rFqK/DxE1vnYnMOILhUvHtXsXmTTvU4accMxTlm87li /FB86nzmbDz8ODb0OkWWyaYRELW3w8j+N1ain6PUV4e9J5s3g5g349Lmr65TTjthnYRbWcaWX9U /bgog2as= X-Gm-Gg: ASbGncuUPZl338ly904uVESwMbCE3m5+4wC6sEEj69LLXc07iuyKrsEf2AtTpJ2iLkc tvuHjHLu4loHBRTRE0PuiqAnbw/SMSawH846KSQkkHUwSbK/7oIs4dTw231Uu/50T29ki/xc4G4 jD3JF4Wq9sSDzeE61U3EyVK5mOAgwl1lvSXZEB46NPcbPML+/n0rHupuLEFQ1Rc1b5yxBWWe87I yn9IHs89htuGP3LOfGm8VerwMp68zrpm2+pZUPrmw+n9NXILLG/PblXyACI4t+Qx0OwCVTBaFIB a2cUrzeK5aHcx16qJO610RSbYMHCmTe1OKlc10k1AntuOZcn9pv99HkX6BhZP0vwVR/1bNf+6uF KvAQrUcswjLr8Kcgspz3ymFgLeGCzr8Uw+iG2KdRcsQdWI3zn X-Google-Smtp-Source: AGHT+IEuoY8kgt1SENyVf6DfexHMLLE7l7YpGOE8tZ4rHh9aaZA5W43at/wAKoIz0QVtXmeSfJilNQ== X-Received: by 2002:a05:6870:6126:b0:29d:c85f:bc8c with SMTP id 586e51a60fabf-2f796e07bd4mr1738162fac.36.1751638910101; Fri, 04 Jul 2025 07:21:50 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 035/108] target/arm: Add helper_gvec{_ah}_bfmlsl{_nx} Date: Fri, 4 Jul 2025 08:19:58 -0600 Message-ID: <20250704142112.1018902-36-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::2d; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x2d.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: 1751639337936116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- 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 8c4705fc53..a05b63380c 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 e8467823f2..5dcd6f9282 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 Sat Dec 13 22:57:49 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=1751641078; cv=none; d=zohomail.com; s=zohoarc; b=HsTbJg5RWxdjxQQFNRSgZLCd2PvDZE1eJKZRlhLvam8+7YyyJlR63oO9P34OdQwUzYWIHUVZlbVswIeC30pSRc2nJMpPHNQq8KbMRE/QNafxgum9vLanvZbam1LS9DcWEyPUtnd/IDnFDJjxOnTqztB3k8zPRfEU/lGc2Tj6vHk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751641078; h=Content-Transfer-Encoding:Cc:Cc: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; bh=9JmrM0K8ZLfI+GER2A7TZLp0p7wKAFK1cAuaQ0BJ0Lc=; b=Ska6BAmXGVtT/e8/yoAJqm861JFEpQTCtmD0aJmM6arSpZXaeB8Kc4BVV4NRVTcnlOoeoxH1Zu+1AvnK0X4v9ydG2xU5RTSvZBFLr3zDINzQrZd4wVOI+LTXUfxu+Tf0mhtYp2YDIS7bFe/N02ZbH9CL2BctqKS7rb0bqbvczuQ= 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 17516410782842.5345108440537842; Fri, 4 Jul 2025 07:57:58 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhMz-0006IC-P3; Fri, 04 Jul 2025 10:26: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 1uXhIZ-0005v6-4i for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:55 -0400 Received: from mail-oa1-x32.google.com ([2001:4860:4864:20::32]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhIW-0006Aw-Mf for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:54 -0400 Received: by mail-oa1-x32.google.com with SMTP id 586e51a60fabf-2ef461b9daeso865863fac.2 for ; Fri, 04 Jul 2025 07:21:52 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff0471esm528016fac.3.2025.07.04.07.21.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:21:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751638911; x=1752243711; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=9JmrM0K8ZLfI+GER2A7TZLp0p7wKAFK1cAuaQ0BJ0Lc=; b=BkwsERth012mH3wkDTS9zlsV8jqORu4Z+kwnTA/+qV7MH/pjn0E5+2bb5hoqQZVMcd 28lpXw/vTpLJMnU4CpVJW+PE95umzvaEUu1SC8HcwQb9tDvS7b4KUcTk7wCzQoEpBuCE G2axE2SRv1v6ZtRhED4FsGwjQpNKrNws2krt5GaoPLAXLssu4kWbN5QBl6xQD7Z2Kapm v9NtkoQiDwUNe+FsvPxuaNafXlKrpVEioIDjDWvM92NY2rlL+OdXrlMQAcg+bQMKdViS ApwwmjAuXm0sZrChhrywL4y+sJAdKpR5cxyqwtvyLFzUDyV+ghKLb74IZ1jt+V3oXyuc AZ+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751638911; x=1752243711; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=9JmrM0K8ZLfI+GER2A7TZLp0p7wKAFK1cAuaQ0BJ0Lc=; b=LHwoyi1Pmf3eaAR7fFU/eRkvS2O/sl/pCIyTLBoc+7ZwVx+V+mI72+3XkyiRnNfmx1 M07DWh6HTbaruvLoLp+580GjU/vaRl7uf8syC0z+XWZU1cQNjIgmjkyMVDsHNDrj1d0Y EiC9/gXz/n4q3D18ATOhpmRMgHERHh1kMD7ccqMoXIFLHsS0qiL6wpV9qRhb5Awes51o rpJ8gVeWCzmgz16eNx5MJLtQ6IbP6VunnEmehXTYmJg8CYpSiNb6QcjWKNFXEVswV8Nc k3DYtVi4610OWASU6bVvpIzxbuls1NZavATw+mioC0GsDktJGi0/NAK7NzahZPDj6hmA OXgA== X-Gm-Message-State: AOJu0YzzTxNN+C97HRQaCL/P9fX3830hM0BmBof2Ly2I7JbTPLkQBvWM dPWPPf7j+u1dO0boTd8UBm56l+ArJ4f0ibHdt1kCd/cesrCvf1Lsb9Yly8BOMYZH4VZSNn4yXL1 1bykhCCk= X-Gm-Gg: ASbGncuMMeGFyQtBOyyag/yI0aYubj4L9ZGc5N6RarwXzyExbWhb8oartDmqUn3cHQp SXtgzpAe4Gig/zegrokgdzNhGcambb4soDRCE9RNETKojIofJdnR2SI7R1bsIVimHC1A8Suny/f SroFHl8HPNwRMHExoD7lpNLyWLTzDyCWXVoMGWEcrvarQOIC5Clvr8j6LTECIPm+hVLjkejZ1L5 S+ABIIu83uwuQiERH/jSm73PuIlNuNUa48FpA1p0vbDXfAwaIjhE97i7NgmkxaqKay58oQhWTUx i/vMCplN/+zvTfjpRE7W/NR0p4G112OKe3nUpRAr9v+Ti6PkAC6Q99MOzRwxyXaQJa9uZJMuSLz MjGqEbyxOTFqZUlNxP83Usuj4QvFfDrUQmtlTrNqtEgswv3P0 X-Google-Smtp-Source: AGHT+IFstzqDn4QWUSOdI2FFNKhZ6HJk5zxd//C2TViXYvsqZfZJ9VLkXLfhQrdTtzOLPbDYmjg52g== X-Received: by 2002:a05:6870:aa8d:b0:2b7:f8d9:d5f7 with SMTP id 586e51a60fabf-2f796d5efecmr1641977fac.19.1751638911237; Fri, 04 Jul 2025 07:21:51 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 036/108] target/arm: Implement SME2 FMLAL, BFMLAL Date: Fri, 4 Jul 2025 08:19:59 -0600 Message-ID: <20250704142112.1018902-37-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::32; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x32.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: 1751641081300116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/translate-sme.c | 98 ++++++++++++++++++++++++++++++++++ target/arm/tcg/sme.decode | 71 ++++++++++++++++++++++++ 2 files changed, 169 insertions(+) diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index aabdb96675..9ec02d960d 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) diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index a6dee08661..9850c19d90 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751640057; cv=none; d=zohomail.com; s=zohoarc; b=Y+Ryy9PA2w9ZJKe6kQAllwQ6HDcTB2ajWLAUtiKbOjmON055p+3LSv4NydTdVJCT09Sm415V3GxHo/Eq1Bz/Lxh7NBwfg/V5RrHOeCdiVHS0RL5fOD/xORTChqSUrcOdP09IegEdRUXass/0aKHfqFUPS55GmoForo2nO122vh0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751640057; h=Content-Transfer-Encoding:Cc:Cc: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; bh=+o9WtWIZF7CJjfjA2GAPrFXLh1beSrq23YpovmlbJIg=; b=j1L2Q0wpMXU+eXPDGekfiJqji2aLDGB8RbjMB0LbM2s21H0WYZhi0WTOKBsUY2yER7DTe+EDZZzdqyFP8wgjM9M/QDUyoHqaQZ7CCeNRpknyfi9LYVQQqkxUHTRLKrvnp6t9id5oHEOwTGbXCyW/kMiGzn4oMnG1UGhsT/bLzqw= 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 175164005741517.400303573743145; Fri, 4 Jul 2025 07:40:57 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhNg-0007hl-0X; Fri, 04 Jul 2025 10:27: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 1uXhIa-00060O-9P for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:56 -0400 Received: from mail-oa1-x2b.google.com ([2001:4860:4864:20::2b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhIX-0006Be-Kz for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:56 -0400 Received: by mail-oa1-x2b.google.com with SMTP id 586e51a60fabf-2cc89c59cc0so1315553fac.0 for ; Fri, 04 Jul 2025 07:21:53 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff0471esm528016fac.3.2025.07.04.07.21.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:21:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751638912; x=1752243712; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=+o9WtWIZF7CJjfjA2GAPrFXLh1beSrq23YpovmlbJIg=; b=a5/TsSFPlAxA8hXszobUQ4Zu9yh6nugjk6e8L5T3glkZ5dmQ8e20rMETp72JwxSvLy gR+RovQzGAQ0uboM04FmSeB7EGU6X59HfAol9mcyPeUJfdMWRJQ6PXusLsTiowNsSnR7 GNH3uMTdO1328/XZxWRQOLUA4O5CSFIWz0ieRhh1bL8Yuj8bSZoOHk/u+svYEIxAPSZC sC53BGPLGUALbUiaOGd0J46ZIFdk0hcwJV5ovENEyyBgF4NzFfWvsbOIfta3MBNDEKmL ocG/0VdmkMTADaFXi1r26iamKZmg1G04wl65LJj/O0tFM+yfS1Q7FENZ7jRn6C+9gu5l RymQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751638912; x=1752243712; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=+o9WtWIZF7CJjfjA2GAPrFXLh1beSrq23YpovmlbJIg=; b=aY/+DV7daJclA3+6j72UtYgSVnCsmDY/2jZ6CH7u55+CTGrhbOmjjaWBtzJIp33LPw 5LDVbUj+HFrTX7jJ1TfDIJ7JpCM6qYOJGKrDlphrdabozmIPv5QUqzYY7UU6F5yi/Kis WEjaciE3jwLZ9NH60kX4dC/ELPk6CjgbvT4fyjG6uxLlYevu51VWQCotddxxqJ9QeaiD 2ygIDFii+axs3uFk9bCDvQw7Z3XWrT941is1FNQpughSDqBJH5m+aOhHNSlhIzq+2n6L nWTJ87AjMhiceJYSx/dI+dOjG9lwVtiD7PobYbC1NjMKWeCfE6izNNvsQqtO+1JKHOxv NQOg== X-Gm-Message-State: AOJu0YzMMnMGwaHZxjlE4GFGEoxlaEb8Nm35kJHlQkowaILLukWqbd+g qGWNrlQjEg+1E2CFNQZpRQSGWNo6ATavliolytecqJ3kI+Bx3RSIqGj7Jmxlvx7aebyoXW72peL y3wJac2Y= X-Gm-Gg: ASbGncuVE1ubLoUFW26zD4eGGOKQOrhKEV4rFvIXunmHVPHyFza+RL32UgiJ4JrGEWQ ojqHtjZik5ZMg5MI3U4ihrUSZ1UNoYHQELsqnTpefHJ5YWEq6+NN3IPWqBuTHk+Zv1MckDgUp6/ SQu9nKM5QPHEOZ/8jnCfK5Ex1u9bhijVF3PdfmbfOUrE9FABVt8Ah68kwiPxYG9Qh5iBwYiDvsY mO7+o+BSQDgTTXEoWLeaOQSAPev9nkZH2ABXus1rMaNKJg38AWagcc0pAm0Kiz3MyzmXlAyqHq4 +P4hnC0PNLNr1eeEgu7ylvCxPH9oKvpj/9ox11si/H3gGoKQUhNyph8TZTFz8mnlvx9vDL+7mGl hdLIIqxOYWRC3X1sq2B9GHOZyNRtpL6WB64ji1zNwMEPHfDFU X-Google-Smtp-Source: AGHT+IGi7L9UEX4O+oeQtJBgXBWvhWVNuVV0OlQK7LiCuPfYQpdp8XwRSP2CMobC3fO5ye5tmttW/Q== X-Received: by 2002:a05:6870:b1ca:b0:2f7:64f7:8d40 with SMTP id 586e51a60fabf-2f791f2ba2dmr2453482fac.9.1751638912105; Fri, 04 Jul 2025 07:21:52 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 037/108] target/arm: Implement SME2 FDOT Date: Fri, 4 Jul 2025 08:20:00 -0600 Message-ID: <20250704142112.1018902-38-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::2b; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x2b.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: 1751640059046116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/helper-sme.h | 5 ++++ target/arm/tcg/sme_helper.c | 44 ++++++++++++++++++++++++++++++++++ target/arm/tcg/translate-sme.c | 18 ++++++++++++++ target/arm/tcg/translate-sve.c | 5 ++++ target/arm/tcg/sme.decode | 14 +++++++++++ target/arm/tcg/sve.decode | 7 ++++-- 6 files changed, 91 insertions(+), 2 deletions(-) diff --git a/target/arm/tcg/helper-sme.h b/target/arm/tcg/helper-sme.h index cdd7058aed..ec93ff57ff 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_helper.c b/target/arm/tcg/sme_helper.c index 8ce50653b4..60322be3d0 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 9ec02d960d..761584c90b 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 b85bd885f9..4acd22f55e 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, diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 9850c19d90..a2b93519c4 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 3a99eb7299..5970ed9ac4 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751639299; cv=none; d=zohomail.com; s=zohoarc; b=ljwaKQvlsLLtkGsFPF6ZF9kS8cy52z1xeEP/tUqOcpFiU8wTd2QQ4wX7tW5y8zk5M/UXwULhidfxoXszFxNyjBH8G092Coia/zHE4HMKe1kYul9SGX/AO00lGhpPkQee6pOns2bLoj4ysbwQ+uqM9O4oDHtM36uLXdtmHJ4nnBU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751639299; h=Content-Transfer-Encoding:Cc:Cc: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; bh=WjUNsC/tPxG2dLETLc6CC9CFxkrBSGpmnmuEo26OYIY=; b=JQA40VgQfBnap5uYEVVjB7OQREjSOHRe8PUSU9DVi/VxHiToCyBAM0rCuEzRj+0dstAuHeHIkkXtE6ajmKsGvQLUJJTG2fctubP6JiOHu1MwuPCuOZyly0he+lkfqxUB0YHY7Gm6lkrRK9LapDPfjnEB/aQF42Px7397BOnuaPw= 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 175163929902296.64135288438013; Fri, 4 Jul 2025 07:28:19 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhN9-000790-Vz; Fri, 04 Jul 2025 10: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 1uXhIa-000642-U6 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:56 -0400 Received: from mail-oa1-x2a.google.com ([2001:4860:4864:20::2a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhIZ-0006CU-5m for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:56 -0400 Received: by mail-oa1-x2a.google.com with SMTP id 586e51a60fabf-2da3c572a0bso856331fac.3 for ; Fri, 04 Jul 2025 07:21:54 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff0471esm528016fac.3.2025.07.04.07.21.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:21:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751638914; x=1752243714; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=WjUNsC/tPxG2dLETLc6CC9CFxkrBSGpmnmuEo26OYIY=; b=q1ZtL359je06Sw7GsPFHFNcJ7D5frtsfShP+A/qg3/CnTjhbsGdivRuKAaNd8yM0qR 5dFc9sM/nbJUYnMhNIEYl8G5rXto6eSbRhsaVIF0qswgTp3VqPOq1Ga7AfW5E/c0xbu7 PfR61dvdWKrUQQGTqkXDApexybK44YZGCvQU0XKzN2kTd4LRvNGjViCae+/uAPddKhWX mHgCPGH8JF80JpTJPce4CCewt6Cik3vFZ1QJnLRxjgavI1VnkLqFdR1hsyEsimrGehWq o1QSP9X10HKIc+hn2/UthyQRYL9LtWBBn15xiXhOoo3DUJDM96QrBJ7RW0Q8JRPofgH7 zoCg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751638914; x=1752243714; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=WjUNsC/tPxG2dLETLc6CC9CFxkrBSGpmnmuEo26OYIY=; b=mxLklFU9k5ukFFazbHM1rhC+kHz8VLZ4bUTs4Fd9DJjfwFJ5cNBV6RMJvNf8sUCgjJ baFuKxjwmg1guSeV+pgSdJrBtzDZ81iyKkJ4bv8VHVbED5CNxAVMNKBUMzbfEj2qW7Xi GQ+MTkiSi2Der39K9/X8QPGbVvXj252d7f9J6BKR3Ntg3/XafI7QNuoXWoX5NyaH9rKY x8ksHBYWI5kSTiuLsibadeI0Lo5VNezMcAtDmyS0wdI/3XmuckhYRQOYB7NRapYXxrR4 Ks6amsWZIwAmyyGGsn3a8J6yVQjd51AuIdorXmyMGdIP/ziLcV1rtVT4afWSK69M7kkq 7Rag== X-Gm-Message-State: AOJu0Yx1gedA8INsY/SHcebFgLW1LVuXdSM4CyztngWgg3asghsiWLBY gpWYEircQL4f2ab13/KMOwnLnGVdsMpcdg++BZ+vtB3nh+U3vvCvAYBa5Uq8jW7J3YUS6qxE/rs dovRiNSQ= X-Gm-Gg: ASbGnctsGezL5FqEJyNwwVvpLlAd5UfZPE03QxwAY9ueVcI40zSCViU4xhsN6gq0sYk NPLxdf9G+iBEAsoInDbZOuvFmLZNMaXjbIZo28Aq3k5cWOBUFCi40/5cWZIVYIJ8yKyqtiohjjc f6854ioBBzL3/LGVdemuCPrYZxEfokQLILfpX7DE7eznBMcG4svZgHRv+kwfE8wdeX758e72y2V M3XoAO0vGY5OPHZYQ7jcWGjdgvtjWCOPqNTKy/LWzXsgH4X5aaBtgVu+SiTBxYeA7F4262HxHZP wcN0LY6Scs1ytguz5Kn+qx6FcgIrJy+J3csicPLRWPJEVfeDZPtYvmhpwrdR/AQkm3G0cKZuNT6 zFVCMJEULBqvtNWiqNTDyJ40PsaxttDFMx+boUFpZ6I4L8oHj X-Google-Smtp-Source: AGHT+IFCDVO5NxKLg259/Yv9AzY9bTZpAmyfOg5nFNDPvKluQko6xxRQqJCz/V0YdGQVZNA9OTRJbw== X-Received: by 2002:a05:6871:7c03:b0:2f7:5945:2d2b with SMTP id 586e51a60fabf-2f796d04f4dmr1646472fac.34.1751638913595; Fri, 04 Jul 2025 07:21:53 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 038/108] target/arm: Implement SME2 BFDOT Date: Fri, 4 Jul 2025 08:20:01 -0600 Message-ID: <20250704142112.1018902-39-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::2a; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x2a.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: 1751639299526116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/translate-sme.c | 17 +++++++++++++++++ target/arm/tcg/sme.decode | 9 +++++++++ 2 files changed, 26 insertions(+) diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index 761584c90b..965a49465e 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) diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index a2b93519c4..18e625605f 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751639613; cv=none; d=zohomail.com; s=zohoarc; b=n4YOqgk+Tq/6rVy7t3SSzVBbSJuo5YN9CNFvADcPR7G+aHaShtN7TXd47Vwvthf4Eoeb/vJCpa1GugbsCoIkg9Q7wWeQ+ly5ycPj5sU/xkhahGNlx0tf3lHHAyL923y/zU4JiqtnjfMlz70VhmoepHNF/GezCcMn4666yTJ2nes= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751639613; h=Content-Transfer-Encoding:Cc:Cc: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; bh=DoZQEHUiuPqxJOVR0eH/FrbbJ9IkIyue0ROJ8VBIYCo=; b=oICtrTNKGNE7nN6br4a76xFBZoXrNz8YqwsK2yFrggO+qQ/wjOpJn9WagEtyxSc9W5h/hoybfXeRH6M2lpPvI5NejIBdaLn3HfLQFxp+UzJ+k+kz5LIdOjZfo1gZvIYI9s/Ag5QhRTIZj/1caKyRUVmPtX3LLF0kCz69DpJw9gU= 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 1751639613444204.70781729638065; Fri, 4 Jul 2025 07:33:33 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhLx-0003z4-U9; Fri, 04 Jul 2025 10: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 1uXhIc-00067A-6m for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:59 -0400 Received: from mail-oa1-x34.google.com ([2001:4860:4864:20::34]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhIa-0006Di-63 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:21:57 -0400 Received: by mail-oa1-x34.google.com with SMTP id 586e51a60fabf-2c6ed7efb1dso926173fac.2 for ; Fri, 04 Jul 2025 07:21:55 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff0471esm528016fac.3.2025.07.04.07.21.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:21:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751638915; x=1752243715; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=DoZQEHUiuPqxJOVR0eH/FrbbJ9IkIyue0ROJ8VBIYCo=; b=kYXOmJmnqKLspB81plGyEiQ0M2gN8O+tgayTft8Uv+gTYvGrVVoI0TSfRv9DkzbHTw V3B3vvSr4+uM2LmtxWadbDudDEjFuz0qpRaEqV3EWaaXa5hPgTICwnQJr/497DSTYkXm PeCPa7vVZ2ILQe55PqGkMIc7aeiIztBLhByJaDOaCvR6VxeYtXSbWdwmfUgycifmRlrI X0cxojHPtL1pgcNPzg1+E9cKgToXXffbm7b/ktEixcOn5xhHLM1Q9scO6Z5C8K4dCi2o YCByvmEVXWW+W+XN3J69/SJgTaz62Xv/6oM23iLJYpEBLilmUC1Lb1Rio1Z41AWVpYO/ iQzQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751638915; x=1752243715; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=DoZQEHUiuPqxJOVR0eH/FrbbJ9IkIyue0ROJ8VBIYCo=; b=pR17WzcpxUVjxTzY4SbX8aB7HdPDytPwH56vvml/ZAvZXCxld7KehRHFtCnRFnNMuJ ZekiNKn4bDXWgcHapxB/VAsVb5up7RqY7N/jbGvIbBzwijPLt/aIzWNewBrk48fU0gyT 1TbHFYrnBKOVHVOOxzir2J5JglJWK2ChKwF58+0DCLZ81lcioj7CO7Zno2mIezs1PTnY eYMPykwjAGQrUsbKXtpx3aReVbJFXbGlFhHN1wajmik8ERTfZw31NoY4/84naQ1iUO7V g96B0PxEYb4DWj+6wtLneyjln65T1ozW0DBzUZ3Vxl1lYe28tNsgUYEZ/B//65lYUDx3 tOBA== X-Gm-Message-State: AOJu0YynPdFYQGDpSpIC4ElrqSX4aQ6eT24A+nkbkEeG/oVrjNkSFMU1 kJRP+nFiYAoDPOpMleZszS08CYyZ1N0rNskThdhO4U0wKel6zCWzCLWx6D+7K5K8cthWYWyUWDx yWgQe+eQ= X-Gm-Gg: ASbGncueY5980Y0LoGZXkc1RgMVSA2PFImhaTMPQBbfn4pvULrhvOY16Du95JYTgZuY faImcXaGB+c4JOe7bBoPF2PyaMUIu9mvWC+sgjmJEi2Q4OiVlb4PG5cDzgJJQiqPDnr/abqY8EP MAWIChNqP7hoK9c8fHJ6IwD7y1OCuZBAVsioB9vJAhEIGj4mqBJca6SPJ/vsM+RxOJbO0azQZCc MNyu8d967xB4J8np+OjjlNjKY3RqQbHpYngYhqKfZGayIT2EEVVZcR6bzDAT6cnI9y0cT7Wtrhk cCt2LgnB7/3EIBJI1nyn25P8b2iInocEqWsu8NF8wjTvYuolh6bNReuapW+5wKagi1Uq2sahUGn D2+YK1y0KnWR1yUDbCxvd9csa3BGYGPQg1KlNtyNUsIRT4qAz X-Google-Smtp-Source: AGHT+IHcb60VIGxLre4Ol1i+LCmzUxRu/3rTccQolq0XemRBj5Z+BJ8TyBFSwf+nzduop0gpMWokrA== X-Received: by 2002:a05:6871:741f:b0:2e4:4617:f6e1 with SMTP id 586e51a60fabf-2f796b79ab4mr1898775fac.2.1751638914768; Fri, 04 Jul 2025 07:21:54 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 039/108] target/arm: Implement SME2 FVDOT, BFVDOT Date: Fri, 4 Jul 2025 08:20:02 -0600 Message-ID: <20250704142112.1018902-40-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::34; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x34.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: 1751639615610116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/helper-sme.h | 2 ++ target/arm/tcg/helper.h | 2 ++ target/arm/tcg/sme_helper.c | 30 ++++++++++++++++++++++++++ target/arm/tcg/translate-sme.c | 24 +++++++++++++++++++++ target/arm/tcg/vec_helper.c | 39 ++++++++++++++++++++++++++++++++++ target/arm/tcg/sme.decode | 3 +++ 6 files changed, 100 insertions(+) diff --git a/target/arm/tcg/helper-sme.h b/target/arm/tcg/helper-sme.h index ec93ff57ff..8f5a1b3c90 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 a05b63380c..d8d389af2b 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_helper.c b/target/arm/tcg/sme_helper.c index 60322be3d0..8b45865461 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 965a49465e..410a8d037c 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 5dcd6f9282..616f4050e4 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) { diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 18e625605f..7c057bcad2 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751640144; cv=none; d=zohomail.com; s=zohoarc; b=jMUM9jd6ssyB9AGiB2tNGnn/zh+5L69FBPEU9s0W7FOa4l3UoyBRfCyXHR4lBK41zcHuGZCtjCgfiVZdWm9hnX/kX741mnMby9HI3p6PzBS2yCZ/cp6ZnU/8qql8sHyq4ucpwosjTKBat4GtEY37E7On2w/d6BeBj0llV6tEflU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751640144; h=Content-Transfer-Encoding:Cc:Cc: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; bh=SL9oVXjt3dYrDelPVkHVVYLtmY0t9vX7UgCxdol7LyE=; b=HYzU7rKoGSszjW6UWDoVPy6fITkz0VERBBjF0Pz057LyL5KrrYDQQCq0RPmMK+F7m3gqvgSU8dLSK65pkC9Cr15NErZRJxrv1or3g4osYsMd8MjQYsFhAZPUyrFoEZod501m0atofVeWywqmToldK6bc8v6qdICd0Cs/l45jY6Y= 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 1751640143997582.3396269083362; Fri, 4 Jul 2025 07:42:23 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhOU-0001TP-VA; Fri, 04 Jul 2025 10:28: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 1uXhLZ-0003U7-GM for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:01 -0400 Received: from mail-oo1-xc2a.google.com ([2607:f8b0:4864:20::c2a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhLW-0007aq-A9 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:01 -0400 Received: by mail-oo1-xc2a.google.com with SMTP id 006d021491bc7-61208b86d75so566773eaf.2 for ; Fri, 04 Jul 2025 07:24:57 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 006d021491bc7-6138e5ac5eesm310233eaf.29.2025.07.04.07.24.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:24:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639097; x=1752243897; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=SL9oVXjt3dYrDelPVkHVVYLtmY0t9vX7UgCxdol7LyE=; b=yupwp0f2HVMq6xflLtiatx85oVoGaP4Mja1GuGSKeMHymV1yOkNe9XX8axrKW9vYyT vukkH74TaHTpHr+HOfu/LR50ZVlTt4b1IuyVV4S2mmGmbszO02hXavNLxp+Y1PjncGf6 tB8HrQIM6Mo5VEkjb6H9YT/rQAnpjJFEqgRfADrXM7yPYatA6eGMZo7pA2MJHN8POa58 lOLD2U3twFn69LYtARCh+THTnAMz4qLbfqI+envNZNzS6ZluicblZ3qVsFXFU2BSFO8h I1GgYL0NJxIuhYQU9TNkakJ7/AZq7MR2UR8kWk/6vU0XwWNQ0A3eaNNkiLR47lMPDaBb rzyQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639097; x=1752243897; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=SL9oVXjt3dYrDelPVkHVVYLtmY0t9vX7UgCxdol7LyE=; b=TC+mIJJNPbjRn0NZmGqqRnJh2DfUSog1UbNUCQn0l6kOSbyLKHwbTIWIeoPTrWkvVi RO5z5XdXlPLf22LyzNv9DF5V6/IK4zXMLG8hzEy6+BkMdDJf4osQLVLFdkhBZmWxZtHP A8tRmTDD6mmx9OICg4UDP5G3K2gGA6BkDKFDCZhV6mMYLlWMm7dHD9XqXxeAIvWTBqzv EoTIv+rqNYXAvpleTO7I5j9kaa6nB3z7vLWTlM/9fYmhxBiz2qQI6E2o48cdb95kvcNC /8rz/0H6ZLH4iIWb8UltxiB673rrtVN+EwkmUxbaXP7O9vzsEHey43+9FyH6vn0mxv13 ZlLQ== X-Gm-Message-State: AOJu0YxDfrQRAaTBr72naGpxnHMwG8cw6KBBB2AhZ+XxDDp7cDVxL7jc wELAOh55mSwysXzsa3Hr2AIhYBENyEH980yu6IfiWHDVCa4nnAZqTnKrMC67v9aH3dx1rufaiEd WRLLOW34= X-Gm-Gg: ASbGncsIyPSE4A9mzePlUgKnSpGzMt1fOgRGDjB9Ckr07eN+erqYPVSZDXezUNXDTLM ivE4BSoKp2kevMCKzilZO3A24XRh6JC3t7nrn92fCghzrzkINAQuRu3q/1YshXs++SZK10C/UkG k6Jx0kqEHxm4XR3p9GjYlS1VRi6D6zgi1kV4Q8Lbetxx9WmI5PuGsmmmoJEkDNGesQA9G4XJ8L2 S82aETQAiav7o/+UcLbIYiKD9HpadG3HqLSMSejJUQOaiETvhJESX465p0OStOxp5NJxUasq/4T UdvMWpBJ1UGXZc7OfjOYj+4z6oKut5IgYKAqbcIsiGA0kt3OQsQFwlUGoijag6dldtk1OtTSx7Z PlVP4PCH4wqhkRhezzFInCtCMuVoPtlqH8/TGowreZ9Fcql1i X-Google-Smtp-Source: AGHT+IGyXfu5BStf5rIRj5wqsAV7RYTkRcYVolRgOJVlAYLCTFOWNc/tSmcJzAZELHvmsEJZ7bJckA== X-Received: by 2002:a05:6820:2d03:b0:611:db44:6589 with SMTP id 006d021491bc7-61392b6f7d9mr1783222eaf.3.1751639096920; Fri, 04 Jul 2025 07:24:56 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 040/108] target/arm: Rename helper_gvec_*dot_[bh] to *_4[bh] Date: Fri, 4 Jul 2025 08:20:03 -0600 Message-ID: <20250704142112.1018902-41-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::c2a; envelope-from=richard.henderson@linaro.org; helo=mail-oo1-xc2a.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: 1751640146261116600 Content-Type: text/plain; charset="utf-8" Emphasize that these are 4-way dot products. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- 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 d8d389af2b..a19955b872 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 d823036c96..dbf47595db 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 c4fecb8fd6..ea04336797 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 4acd22f55e..1564ee2558 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 616f4050e4..f18d1675b5 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 Sat Dec 13 22:57:49 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=1751639924; cv=none; d=zohomail.com; s=zohoarc; b=FvTVciId8+5IPr8JK5fJMifUpdvHvaKZg9nCXWmIisdRXlV+MUGZdH814igVdIRJEhMwwIUmz1wZJNLEq0afWLYJeCYdqnjT+JZg2P3bDGk+GSDzzi2TxtdRyW45TGHFK4UFHrvfEuP1nB0iMgQ7HeF70ay2khGlu8bWyy3OtgI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751639924; h=Content-Transfer-Encoding:Cc:Cc: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; bh=IQhJ1gIJFra9DD3N/uhfijNYQXKFa3R/yXaOcwjQenE=; b=Kee1E34I2fbACLkfClTYIWjpWmLS4AxksI3V5dDPUyYAPibCwBPNQYlX0hnOlvDoXSISrYnhuCwBdcUcO21fhitTvcIzT1T/YyliBBJFdDZ9fuIhYrGVo4Ge1mmoWCZZefcA7lpLz0KuBDgAjNSn9IXkfJE80AWBvN6MN4/lB9E= 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 1751639924231715.8551280586395; Fri, 4 Jul 2025 07:38:44 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhOA-0000lK-RU; Fri, 04 Jul 2025 10: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 1uXhLc-0003ZZ-3h for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:04 -0400 Received: from mail-oo1-xc2f.google.com ([2607:f8b0:4864:20::c2f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhLX-0007bU-D4 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:03 -0400 Received: by mail-oo1-xc2f.google.com with SMTP id 006d021491bc7-60efc773b5fso662792eaf.3 for ; Fri, 04 Jul 2025 07:24:59 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 006d021491bc7-6138e5ac5eesm310233eaf.29.2025.07.04.07.24.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:24:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639098; x=1752243898; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=IQhJ1gIJFra9DD3N/uhfijNYQXKFa3R/yXaOcwjQenE=; b=P+gfnaUfgfDhHPd2Aij/uhGhtnPuXtsYx3MrzWxxe4jzNB6ve8GWtj6F35A0GCecwh hlyxZ8VN6H+uAhO4K2NEOMH4wyKLBJRKXHKBy5ro2SS3RY4xdHk45L28/9Rg3Qws78X5 IeBXpWPu5Yv9I/oT7mug5l6lAb+ifow+RFu22J6ZB1cTE+p3bDuuCd/UZ88d3bNycKGR mBCJX474h9zfdve+cOEgyqqAYcQ0+uhPZwj5HGFwFuvwXmpYp8DmL0X1UuHJh/MVAUF/ qdSPwxnGryF2Xo9iDkTO/hczDDTjbd4OQv628QGFvmUghtgvUvcmuOYNidi7LV2fG37e htnA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639098; x=1752243898; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=IQhJ1gIJFra9DD3N/uhfijNYQXKFa3R/yXaOcwjQenE=; b=EC03hpyUxWX+TeZ7WU7qjn68S649G8CtLtRO6czFtGpWymRK8bIz9RTpjbfGOjitCG +GBHHGqmKiPHbzE13qSwf7nddXRqT2ytx7qjfAqhHepkb2NChtaXeUmth+BpOpeCYQ4M oFqiUMBKWw3PnSAHqbFxvgmj8Lh5ampnaJqjgbrP8YHKis+pa9XtHb8z8MkL3yY2oHI9 JpneUuW/BFcejN4Uwzra1p/sDJpfLg14LZB4d/dH7yZXiY58G1jI2qIf8MdpnwIvc/lR AQxJP8mYQFe5goVQcLQZpDQiCcQgHHJUsyeLREMTuzTZhnbIodvg2DsUdGLo7H86RMlO dotw== X-Gm-Message-State: AOJu0Yw+IQl23yxsOU14ZkPwlrf+aLkDzSpx4tALBpTwqVYT2WgE8icM GA9VVU5n1UnKhpaV+UftgAvAoegQM6YciU3WrDXdDb0b1Tml1gFWfvniken6Ug/pulnkYy8UNMS TvTpH+BY= X-Gm-Gg: ASbGncstxLQruJWE/I4fiomkxfcmE8b4GcY69cTBysfpAUfBhYO1ChD+j5ENb6ZJ9tP 08JQ6xoqHF8l7jGXsEcyihlR8QpbeMTEXnTkzbE/eazcKp65tAMn2o5Tx+O3i4U/ouueHBaQq7M Aywwor4Zj4MT0yiXFITGIJWSh+J6RJpcPrDBPVKFrklshRANbS4IkNWB46oWseIAf7anBeqxTSh rtP7FNTXPd0udjUDVN+c4BDeEhDhHWF2351FtHGRM/Kokcm4zqChp7aFgsYXfGWuSi64Gdl0hNZ BWfVWoAGiV4wnvZp8/v6GM+fYOFixmF0XOFRLvqdS3IcTJ3PrLYH9Z5fIJqJAbpP4d6N/r+wrcc K01mIoC3QWNWMTLnaMNpDgt5zUzSd5D9F8r615dfNgmxa6BQ5 X-Google-Smtp-Source: AGHT+IHsRca9g7Zh7S/PDgnaFGKXdQI6mpxjZt+V7qERiDCDLMB4+0P0A7EUPP1M8u9XFGRVtYwCTg== X-Received: by 2002:a05:6808:d4b:b0:40c:f644:8abc with SMTP id 5614622812f47-40d04a1001emr2368370b6e.13.1751639097789; Fri, 04 Jul 2025 07:24:57 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 041/108] target/arm: Implemement SME2 SDOT, UDOT, USDOT, SUDOT Date: Fri, 4 Jul 2025 08:20:04 -0600 Message-ID: <20250704142112.1018902-42-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::c2f; envelope-from=richard.henderson@linaro.org; helo=mail-oo1-xc2f.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751639925508116600 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell --- target/arm/tcg/helper.h | 8 ++++ target/arm/tcg/translate-sme.c | 85 ++++++++++++++++++++++++++++++++++ target/arm/tcg/vec_helper.c | 51 ++++++++++++++++++++ target/arm/tcg/sme.decode | 63 ++++++++++++++++++++++++- 4 files changed, 206 insertions(+), 1 deletion(-) diff --git a/target/arm/tcg/helper.h b/target/arm/tcg/helper.h index a19955b872..c4a208e3ba 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/translate-sme.c b/target/arm/tcg/translate-sme.c index 410a8d037c..341f4495e9 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 f18d1675b5..baea6d8b89 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) { diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 7c057bcad2..338637decd 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751639345; cv=none; d=zohomail.com; s=zohoarc; b=gN+fKZE3NddNyeGhe06jgASeCGyLZKOfevL2Dedjon1u4Yf23tt/XPGKmAySXb9wBrOdoURI01S39IARjsWNSv8vHwEaYAVe89O5gRR2VuJqzbfKvTLHr0rtk7lV76ZGsb2l3XHUwhE/e0Z8NxkZXGNsuuJaCYyhu8I2vVELUOo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751639345; h=Content-Transfer-Encoding:Cc:Cc: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; bh=EW2bJzirUC9Q++64fS4FwLYtCnIkFQU62Sb4cmXxlXU=; b=karMicx2u8cf1eN+FDJYhQfed0JOcQRZ8dvPpPf0Nz9sF7rsszLhwQzbOLBd4OTXtKNq87iBAxMGskEEW0uZwDaYADyad5/JFlVmYDiL5BS1SeypQzXxWWKeuufYbtf53BSHu+tthVbERpmsUiQSVTgwNCfhR83GIuhUDbELF9w= 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 1751639345835469.2822989793865; Fri, 4 Jul 2025 07:29:05 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhO5-00008c-Jj; Fri, 04 Jul 2025 10:27: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 1uXhLb-0003YE-7X for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:03 -0400 Received: from mail-oo1-xc2b.google.com ([2607:f8b0:4864:20::c2b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhLY-0007cG-Lg for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:02 -0400 Received: by mail-oo1-xc2b.google.com with SMTP id 006d021491bc7-611a7c617a7so288427eaf.1 for ; Fri, 04 Jul 2025 07:25:00 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 006d021491bc7-6138e5ac5eesm310233eaf.29.2025.07.04.07.24.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:24:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639099; x=1752243899; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=EW2bJzirUC9Q++64fS4FwLYtCnIkFQU62Sb4cmXxlXU=; b=TPcvVGfF2+gOZp9Tcqchr0RdUAhIsP5CffRQvXqFMCXOnDj3zktwTHLG3hF9mWd661 2tDE7B6TMvAIC5eQ1Ng3wGG5T/2wny5o4478A14p/iRJD/hOaM+mWYviT+cMjY8udspl JjjhEOzY3QIAFWN4e74SZ+x6aOiz6+wf6Ro1e9sFP2T7DpijUc/0PSkh7J5RaTdXkyWL ZRp5XR/QCk6NSlrbHu/l3rbHI59qHFz3kKcIRyyMCGf7v42fpzFzbKFGRzwd/sKT36zw 3mByltIUnHUS5jwuXnN+eMVcMWXgbNK46sC+i+gyvE0H5ChBU4Lq9cgf+gvBSMWqKSMl t9dQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639099; x=1752243899; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=EW2bJzirUC9Q++64fS4FwLYtCnIkFQU62Sb4cmXxlXU=; b=sVLybxyd1rzU+hmnNHQGadCDVJW21qV+G63bw4rsDykCgPG8SQMvz4XSA/Pj4ixfJ4 6utkFyuCJ3FvZtaW0FOd3YgoZdktXMK9xs2EDyNSvBE8oubKTjgTjv8jBxyJVIPfKG46 IxFPwch6nAWpPpjrFNM5JrFh/0D0sQ02ASMrL88h+eRbs3MockLS5YM3MKEd5gCd6/EM vfcQbs1PiQ42LDlzDM7XMI4osswuPfqPGFXGeOZ9Ct7lQBcoJWGRP10/Yn6rQO8rJ/d/ lSf3KjxQqaxBSMt1X6feU6Q7Isxu0PfUIAHLXesA0LZVlXwhC7XmU+UxZs+YTOGorY2p mbwg== X-Gm-Message-State: AOJu0YwrNThcAeoYxdcedmOqJRY+8mrCZyg4kCVrciZsXbU4qWc/FXW/ K92js1imeP06WGhqD96vLP2ZDq1wR030ZlFaFO9JmkSJ4ObGZBfyraPHAMRYBS/ojNQFCB2BoRc MOKi9fRY= X-Gm-Gg: ASbGncsZbibyxuQwpvTSRLTIIBfAztZ5ZRyQbW9rNLjbkYG9g6RljPR/xv3dH5I6eMY +/jQLx5BUy1ptdFn6DRa8oQlLy8dkDOJxOYMQfbn/KcvM+cfPR/pZKe4rklCuEu5zEyJtr9Web0 mVziMT8o/8puDwy7bqv4NS555htRL24B+6BL15ZbLtCJZJRrpG4pklBI6M19WyIdcS2b8bb4psP zWFlmlITAWmnK/PdItr7Ui6LloFLs+MGw99/hQq1qyh2iLigv/kOvQPy71FP8kJNs4wpwvEMcDZ HyJ6tG+i2KE88/m/q85CyXmzrccJotd55nyoIEQYN68ZgX9Pvc3H1AGScL1x3F/q1aOSi/ToP3M xHHRIqqztV3jrTQ7Zpoj73XUf6lSYEJw/xFeOz0xXHMM0VxeMv3O9MEiP62E= X-Google-Smtp-Source: AGHT+IHjFKSqVNtD9yogSNlSZ2MRXYGt4Y0yPpa3kykOxBrD2UbbJ5gFoPXMFSY7BSlpg/OProaZwA== X-Received: by 2002:a05:6820:174b:b0:613:7eb8:a4a6 with SMTP id 006d021491bc7-6138fd5e525mr2320024eaf.2.1751639099221; Fri, 04 Jul 2025 07:24:59 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 042/108] target/arm: Rename SVE SDOT and UDOT patterns Date: Fri, 4 Jul 2025 08:20:05 -0600 Message-ID: <20250704142112.1018902-43-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::c2b; envelope-from=richard.henderson@linaro.org; helo=mail-oo1-xc2b.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: 1751639350197116600 Content-Type: text/plain; charset="utf-8" Emphasize the 4-way nature of these dot products. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/translate-sve.c | 12 ++++++------ target/arm/tcg/sve.decode | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/target/arm/tcg/translate-sve.c b/target/arm/tcg/translate-sve.c index 1564ee2558..56353b3bb4 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) \ diff --git a/target/arm/tcg/sve.decode b/target/arm/tcg/sve.decode index 5970ed9ac4..51847ea56e 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751639836; cv=none; d=zohomail.com; s=zohoarc; b=euMB3Oe9qGK7gYWO7tUbsUKVE4/rkperc32VJUtqWc3zn04IVj+4ejiz1GTo033chVHd3W3I5euESNbDPTjBLpad5iZe3PK7CtWrk+D0WIiqR67pBnKUtNr3WNaHWHxi0sms64qfAoFCL7RzIQwzGV/n22ABdnq/CwDTsPhiGYU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751639836; h=Content-Transfer-Encoding:Cc:Cc: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; bh=1S/ZQDP5c+NZHEEUkGxsFokHGbVaRKZEhtxQ6fYJ0KA=; b=AkAXPDRiQqDHUHuBt+nHtCz4YWWnS5HS94YSLdPVY23NA5BY8OgMzA+slLxFTPtC/j7VfItHn/TWxS9baVpljAnCq29g/G/K/wE+/z5XC04QaU9SNzZqN3ae74bB42JpzxMZ0wQgprYQC+VkM0r9ACiJDBGe5fddHkkf8QCSYN0= 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 1751639836722671.7614984063531; Fri, 4 Jul 2025 07:37:16 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhOT-0001Q2-GI; Fri, 04 Jul 2025 10:28:01 -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 1uXhLd-0003fO-Mw for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:06 -0400 Received: from mail-oo1-xc2b.google.com ([2607:f8b0:4864:20::c2b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhLZ-0007d2-V5 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:05 -0400 Received: by mail-oo1-xc2b.google.com with SMTP id 006d021491bc7-610d86b3da9so260768eaf.0 for ; Fri, 04 Jul 2025 07:25:01 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 006d021491bc7-6138e5ac5eesm310233eaf.29.2025.07.04.07.24.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:24:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639100; x=1752243900; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=1S/ZQDP5c+NZHEEUkGxsFokHGbVaRKZEhtxQ6fYJ0KA=; b=AiR0jwSBXUe2s4r3HOLYoL1aJb2VqCvvDMAQxLrfHcZ1q8HQSy0QQ/XVf2G/3eKUTw 6AA+O110lf6BSlPyX4Qv4k6sKPBic6ZcxgSy6eiR6dYPt+3UTH/kJ1Y2Ir0wcmBFsWoM tk3yNAb7Ll7tC0vHbMQol97EYLqKbJZph5nX6cO03n2Ex51jq8aYxHRWRqiG7fNgVkfr gzJfKs5c0JDhGyK3zZgDEQlzcUkuDYlXM8/qk6SSvzZxZWwli4+59jTiWxOaPfC98yx7 VSOHvpB8FvZs7Q09W8OPG+j+GkV8TMUHo3WmCOL/92CGlT+VWaV5/jognfEMOgJ7yjoO +AEg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639100; x=1752243900; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=1S/ZQDP5c+NZHEEUkGxsFokHGbVaRKZEhtxQ6fYJ0KA=; b=KrTU0PDamurI/pwcr1WNE4tUBt4iL8bmX2YPPW4C1psJkcaMeZyIMexGe5O8GJJOeI VXZxYtZVbamGzxiZPPWbB/mOLBPmI5OCeeKByMObHMxVvU12lzIqRTjw7Ld1pqCha1PK ESnopsT2UGOpTZ9Ek7l43U4mCP6cT1J+zbXJSLPxZ7FIPB7Di6mmSgkZN3t5q4auXOFE hT+QtR1sXqvKW2lVrsVJulL+3l7t0bj05qpwZBPMbJtvLuJ1KNQN3ODhosTGwGbPKVn6 PqYiF8A0BUPK+LWZAGoUksW9TFPB5AmXm5z36VgYVxFUp5Vhk2cUn364xFjvdYeyLK3E kvFQ== X-Gm-Message-State: AOJu0YyIew0PJlvVLYnsDHKvuhX8dqGmyeC9y2dLIzq0GJGexk/yVuvN dxjzJhhzRvk3beq4aoiZMbTHFYSQPGZ1MQFfcgfw+zyIikvI0FkAQhZQSlbVI1uX46BX2u3XXBL c1qi4ras= X-Gm-Gg: ASbGnctmbLfGyaIyc3EsjR//pFedNRgcBMmtA/xrabahzkcAOp0TdwQ12AiNn0TxlO9 oSqjYA5HXeacX/yEbYMkZEFbazevzUdsZcFNo86dKas+xwcidP66Xop4lBLDus/GsKuSUWZW6o0 q0qS/lLa5UT7CvQB1TQ6Do+Rd+pnwhCP/+GxqFszjVHDbqFUtkltOFmkd++c3ysqzN/r1yh1Pqo RbKRjMHbse7CnUhFGa9kqYyyY7O+6TnPwI0KpwXSFLr+bx/Rye77TccF79dABlZkpcK95Ii6oQ8 kdOJFlDG10bN8XibpLxXDCW6FL4iep5BsZVxBmpwhUf74knNuUms51FXGfLvGtqHXKtjAEVrHM2 QXlxod+IKU9rLw3coqqVXQevD1fO6PXoBq7rdLzpcLPrgaGUB X-Google-Smtp-Source: AGHT+IENJbKkzKEqPlA2I4O5yp47X09bUOYitsgmACZRGrRzvjyHWLuBxkGFPbJlztMcmcMw9y4SRg== X-Received: by 2002:a05:6820:6acf:b0:605:f34d:7e00 with SMTP id 006d021491bc7-613901117a3mr1982032eaf.7.1751639100312; Fri, 04 Jul 2025 07:25:00 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 043/108] target/arm: Tighten USDOT (vectors) decode Date: Fri, 4 Jul 2025 08:20:06 -0600 Message-ID: <20250704142112.1018902-44-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::c2b; envelope-from=richard.henderson@linaro.org; helo=mail-oo1-xc2b.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751639838288116600 Content-Type: text/plain; charset="utf-8" Rename to USDOT_zzzz_4s and force size=3D2 during decode. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/translate-sve.c | 4 ++-- target/arm/tcg/sve.decode | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/target/arm/tcg/translate-sve.c b/target/arm/tcg/translate-sve.c index 56353b3bb4..c82a0f771d 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) diff --git a/target/arm/tcg/sve.decode b/target/arm/tcg/sve.decode index 51847ea56e..401c025852 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751639543; cv=none; d=zohomail.com; s=zohoarc; b=njlPavkxpJCfcrth6YC3vpIKm8LOfoY0X5a1CzWCA+snJA7dA+6sWeCSz77X3DO48NF7Ol2qRgdHBrTZqj+DXTh+wnN1n3KUR45Ft+2pw23Zmx7IwrPn6scj1uybz8zFu4Fipj+XW2ypShIP0Ogc6PgZ1HaKFbOEq7wrZCmLLyc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751639543; h=Content-Transfer-Encoding:Cc:Cc: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; bh=evIEKVuk/ILgHNEpYwuB+i/P5ybvHcDbwAQ21gq1RzI=; b=Xk0FAw+45LHICVAxTYRXtoFMCV5dvcFFBtotWYt8X2KQAWHIYOYi3G9sFg39ODEoX5nqzJGiidO34WMM9Z2Fj8JomDwOWng1BXNEzxbkVhQl+H9mlYC3veI535ye9uVAq5vGItm/fl0xGfuTlkdgakaFVROV5R1Um4hZ450DpNg= 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 1751639543742905.7850569559457; Fri, 4 Jul 2025 07:32:23 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhNf-0007eT-7A; Fri, 04 Jul 2025 10:27:11 -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 1uXhLe-0003jC-QM for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:07 -0400 Received: from mail-oo1-xc2f.google.com ([2607:f8b0:4864:20::c2f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhLa-0007e0-SK for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:06 -0400 Received: by mail-oo1-xc2f.google.com with SMTP id 006d021491bc7-6118c1775dbso307492eaf.1 for ; Fri, 04 Jul 2025 07:25:02 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 006d021491bc7-6138e5ac5eesm310233eaf.29.2025.07.04.07.25.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:25:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639101; x=1752243901; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=evIEKVuk/ILgHNEpYwuB+i/P5ybvHcDbwAQ21gq1RzI=; b=uik+tFqHnKwemPl+iC4k40fgSlECXsGPr0AuLdkmKc6A2fLWAZRHU2D2tIJXraFS/E 6pJFAQa36gYB8HcnpqxvBqi42mBBI5km+nta6/j++Y3KXF1u3gfKulII0d1JuyzBNdZf GhjSl66Og2B6GZCCYgn6a2wRW2vNCGFEXA9vpOK/xbrw/CSwG6et8+l6uJ2iao2ikjlu y8kg0lVg2lAK2TvbiiWpCnnzysCk/Iq1RLkOvhPAyq7e/6nvGF8mVSmil00qED4bdpcQ AJt7cVM43rACvRs4RFksM3D0kKRFLYGw5MOkpfde4Jown8Xi7C7o30mJG8jGoNTEnQu2 32jA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639101; x=1752243901; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=evIEKVuk/ILgHNEpYwuB+i/P5ybvHcDbwAQ21gq1RzI=; b=g3531lTnKWUkAXDUneVEDYUYRtN+iOPlClvPsd61K67DL7siUkwUeR69ZrMV5zkKy/ ZokhAQXLgi0zLvbS/nVU/I5BTgkwOSQsJyH3UxM+qRFhExFnNuisCpdt6fgDEOwsNowq e32LsMMgne34Gw+CCaBPcJYrYxQuxzvXOeFtBbENLdecV+JFI65Ykro6zg0AYFfgWZTD 4LNtZnz2f8jRuLwEEAG7e+lt+CnqO8eckzmrtRY6iJgeWMSF/VMrWwX9JXrETlump7c4 1gSZMYwtIWLvKJoUKPrhpjx8pnD57gT8oV5OEQzU2lEr1Qu9KxJOBeXXIkztWxmNpiOT q8HQ== X-Gm-Message-State: AOJu0Yztcq/BzVJ2hw86EU4lcD6LhrO1J0ycpRqEe7UJoUHaugGwpSkW Gt0XwDnuPDADy7j9/lr0Hb1EUgiCQJURJQsZHdbjio8t/NtUzyqeXrUT1nDg8kdHUqpvO7Ql6zb pyyly9pA= X-Gm-Gg: ASbGncvQmddlnxBWM0o2XxSNKjRvcxcCGXrcAZCzLiY3HiLVj9FEGFtd9MqOcSX19Sn QqGhIGFC3vmdalGm7eX89zIXs9zN2w3L1tUWFu9y6ohE7R8AHAKdpo5UNDmoVTtz/Hg+ZZeEeJ+ wFXc3VQtMQ60LKp3oRSoB2FqSesy4eQi0/2LGePs8aHl50tqCfH5VkFNwLi+vG8WDUn+JVV32vy FCfLBwT5+xXRlwSAzg79dINeUzu49XqG4OF/sCUilWUpPQFFst3AQTOcQyUYb1+6N/KFDG1BuBJ RtkUY/5B6IpALwHTiUxNSzBbl1WjxOmbAFUwnZXGWMqhTDj6DFWIMW1KGY2N3BRGSWbPyVOd583 gUznxgri08HxMICUZcshwwVPQdzvhlgrf9oqG3oVDBtuTi4s/x7nIS4DW+lg= X-Google-Smtp-Source: AGHT+IE1b/BDR9aou4q77wJH9vTRt7iMwd4rQPP7My98TVt6JLosHCiq9rcq9S08CD9f8e6olVPy3w== X-Received: by 2002:a05:6820:1796:b0:611:ae2b:4d33 with SMTP id 006d021491bc7-613900ecb32mr1923206eaf.6.1751639101543; Fri, 04 Jul 2025 07:25:01 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 044/108] target/arm: Implement SDOT, UDOT (2-way) for SME2/SVE2p1 Date: Fri, 4 Jul 2025 08:20:07 -0600 Message-ID: <20250704142112.1018902-45-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::c2f; envelope-from=richard.henderson@linaro.org; helo=mail-oo1-xc2f.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751639544777116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/translate-sve.c | 10 ++++++++++ target/arm/tcg/sve.decode | 8 +++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/target/arm/tcg/translate-sve.c b/target/arm/tcg/translate-sve.c index c82a0f771d..10261e25f9 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, diff --git a/target/arm/tcg/sve.decode b/target/arm/tcg/sve.decode index 401c025852..83c259def6 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751640252; cv=none; d=zohomail.com; s=zohoarc; b=japHQPC3alY4Y7qMssFy6OvEN6igAJdnrwLfAoCk0GH9E9yRC3u2iTkP5LOgUxXf/0FOFEOM2OCauYrdwjNjlRysHU3X6oLGYXnLC7eeDMf4/uNLn6qrrX3cFBPcjHHOXBiV0c+ElpgEpM5vynQgJtlTnR3U+Pl/425WHGP/81w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751640252; h=Content-Transfer-Encoding:Cc:Cc: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; bh=NgZFObJDubZE1j7sV9iROMi6HrLs2MxVlYNMSaM5isU=; b=crwi+C0hnC9glxQl83dRBfAi94EGocjqgjbPout25JnTg/N2hOfL3Ak54a5Wl7DGv64/OTeUcqMC1ZNtAYzpt00WUenpD/I3QTSOf0NJLnHT37EP2+6VZMo/g1EfWhcCyjZOYkfEMuMxl1zxfgl4xa5heyQnAbIOpQw/ykje8SE= 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 1751640252157486.56139341110486; Fri, 4 Jul 2025 07:44:12 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhOW-0001bM-I6; Fri, 04 Jul 2025 10:28: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 1uXhLf-0003pR-Pt for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:08 -0400 Received: from mail-oo1-xc35.google.com ([2607:f8b0:4864:20::c35]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhLc-0007el-66 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:07 -0400 Received: by mail-oo1-xc35.google.com with SMTP id 006d021491bc7-60bd30dd387so544817eaf.3 for ; Fri, 04 Jul 2025 07:25:03 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 006d021491bc7-6138e5ac5eesm310233eaf.29.2025.07.04.07.25.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:25:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639102; x=1752243902; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=NgZFObJDubZE1j7sV9iROMi6HrLs2MxVlYNMSaM5isU=; b=ohvWpfloYJtXRSvspO9WJFLJjZGM9BXVRB80iwf679SHtnYgkG7JLlUVh18JXLp8DO H/dwIcXXreilQnCmgCSXzhMgze/ObDvrcv5cTdWm5dDfi5xf4Pd2b1BSQNGzz2ChTxw8 U039Hdd0wUaP84t7mY4+WJg483A+W6RtLHe9vELap1QrGBnmR8wGZeN8oDUmzE1NLriJ rk3F5ceDzVIe+9OktTvLvWv3MCAWkbu2SOyW6PaQr4sNLEkma+58xJ6pMyIu9OMnVZB6 Xafv+7ZGxHJfcgWs+t68JUQq9MdhLvGQQvTJGS36TZx2Ij02txc8a9HmFA7CNmkajNGd if0A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639102; x=1752243902; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=NgZFObJDubZE1j7sV9iROMi6HrLs2MxVlYNMSaM5isU=; b=wMN7PapVHoQH62yKoJkg/Ee/XfTVgS67fHqxHZTHqUD3OvdCJw1GPzut/mp/dGg3vp 7KtO9qk+UTH4nl+q8wIalGfONUgAcoMJWRbjtacOAqKvaooL7xK98cCugwd/a7lUnjrK oac+Bg5YrCCtmrbD2Cg4o+wAKIoyWD4lRxwJdxhOoI6cuIH+BaSh1lTV+dClleSEWpKw S81QXNxk9yrdOxW6HZxo7n65C00fdZtv0sfVS9A/+VCQBi3UBdDRRvI3BJsC8gWx+D6c Q91v7yhsG2uyqyZOIPw3ykuLMO8CbTwVsO9Wkkc0nOY6MHpKicsb4k1wxVch1m7iZSfD 9nHA== X-Gm-Message-State: AOJu0YxbqfxQK3jLEUeeDYPXp+roA+rhxOKcvCUyShCAhZ+mn8YyVY6k GcC8VBymQMSdqlFbzsabU0jnuIwi+dzakXhj8LMk6FPVl7kXmNoRnbmouD1fiTiTgMMSpgdBtxa ngjuepOo= X-Gm-Gg: ASbGncsnWLogvk3x9gMgX7pA9vIRZXhTRDABCK5Dtkl61tMgErukqWyW3OfW3w1C/GY JjFmUum+DHS9YqGHwcSKa2PzvrUG2Oa5R28DscqexGePorK0hGwDIzNIlI3Wpikulf3K32dl9bn ZZuWazhT3DiZovYEBgF5zZN7BqHDXYwaK7IMBpF0N9DhYK9sbQqE910HuzDDlUU685heSCzeFln P68AbErl2OzDxAmo0jPtgi7y/wRL8roBifq1NcfNQwTGYodTYfFli/TbLTre9Mb/7SA4UD9WTqi IajFovh38VklGiSR8xzgye1uEkAaV8KAFoueJTXo1rfL4pWVzvyMbYnzTNCiAgVjIbsCjCEl0d5 DDkElgOqzIPzu1WWAtsIZ3+cAwmfYZHLW38DopqALg3xFS7hm X-Google-Smtp-Source: AGHT+IE2de980Git2wBIp9YtUYHWvbV8CCmd8rO+tXlvv8Q3GgssRd0pffKtGID3owgRqYfWHGyhnA== X-Received: by 2002:a05:6820:188a:b0:611:a921:bfef with SMTP id 006d021491bc7-6138fdea0f0mr2094778eaf.8.1751639102538; Fri, 04 Jul 2025 07:25:02 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 045/108] target/arm: Implement SME2 SVDOT, UVDOT, SUVDOT, USVDOT Date: Fri, 4 Jul 2025 08:20:08 -0600 Message-ID: <20250704142112.1018902-46-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::c35; envelope-from=richard.henderson@linaro.org; helo=mail-oo1-xc35.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751640253528116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/helper-sme.h | 11 +++++++++ target/arm/tcg/sme_helper.c | 42 ++++++++++++++++++++++++++++++++++ target/arm/tcg/translate-sme.c | 23 +++++++++++++++++++ target/arm/tcg/sme.decode | 11 +++++++++ 4 files changed, 87 insertions(+) diff --git a/target/arm/tcg/helper-sme.h b/target/arm/tcg/helper-sme.h index 8f5a1b3c90..464877516b 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_helper.c b/target/arm/tcg/sme_helper.c index 8b45865461..f5242d99be 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 341f4495e9..b88f439ef9 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) diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 338637decd..4146744a46 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751639662; cv=none; d=zohomail.com; s=zohoarc; b=mKaSCIvalh9zscr6LDVizG90K2q/sB/wc0kOGyo7y3JfTdzR+arPUrtPo9ia/HxlCtsA/fD1DMTQltZAuxGzVcy09jr1deNWY7ipgABz/2nW9LFqu+TDajxyp7Vc7zgbLYAW/D4z2WyXfulRffalgmALkSt40W0tp1lJaPKWsmc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751639662; h=Content-Transfer-Encoding:Cc:Cc: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; bh=zMxY46eLD5tmBiyf1fu7tjnZhQ3r+4pzWs8nwYSqHnY=; b=jUO4ftjmu7oRb7Fr935kehiLx+38mrEWpbmU8Qx/owH7rholeTnptVgV7bnmxfSU2FXzI35ow+ry/Zn+3xdRrB1Lonq/zAgdaf/wRQ/SQzdRiNJtQrayBUrKuXRV9orGASRxbTViR+9qnoVa/UfYUZL1fPF+8Osb9DWX5ZSm3SA= 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 1751639662260888.1596402495993; Fri, 4 Jul 2025 07:34:22 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhOc-0001nP-0H; Fri, 04 Jul 2025 10:28: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 1uXhLh-0003w5-RC for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:18 -0400 Received: from mail-oo1-xc31.google.com ([2607:f8b0:4864:20::c31]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhLd-0007nJ-S8 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:09 -0400 Received: by mail-oo1-xc31.google.com with SMTP id 006d021491bc7-611e20dd2ffso304400eaf.2 for ; Fri, 04 Jul 2025 07:25:05 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 006d021491bc7-6138e5ac5eesm310233eaf.29.2025.07.04.07.25.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:25:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639104; x=1752243904; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=zMxY46eLD5tmBiyf1fu7tjnZhQ3r+4pzWs8nwYSqHnY=; b=AT6BSuiuRR3kJWZFiqWXtgnVeNP6rMCrlnbosAdEw1qxgu56aVauiOj8BphX8p/cvV 3Gvw23YV3cbKmP8CcK1xQ7E8ZSvYjrr0DgJjWgDe0vvs2ZLlRUvFuX8lMpqPz4dlzdp+ SncQDgAciTUeWAQIEWfng/q1XooaAf9hiE1EXQ3vzyrSWiNzOFv+te6CYDMQb2bPd8SA jmSSRLtKtLcCCGnX9+B/1apSJdjC/do2fkACJLoEouKUOXjH9phfEmAJJMu+lm7Ty/ve JcDS0kahOW+PrMebpvDofUrlYMN4NFSdLcTeG7cfrd7VBY/3a14F1/NyGedyzDJWJM1O uSZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639104; x=1752243904; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=zMxY46eLD5tmBiyf1fu7tjnZhQ3r+4pzWs8nwYSqHnY=; b=pCkiVeNBXUxG1XYeZuUlqTcKUeriyseVnz7sdZQDmcU9rfOtaoZJvYhqmFw8SA/iA7 9oZulrJQTqMxt0La5RbtKBhJ8toAhuE+K2igEMKz6F0i6fXawsRAaFpHwMtUd7hW5ONy a/8oJkR3kyoCAw2dXFCUaCjuPXumC7HEmqRVUL7nE+yndZqb06q9Q/5m0p6dqa3I0S31 YTLkKHvhqK+WFBYXiNjkgp2kiFOpdlanBuukZLQeMQtYwxVJuzE/jN3mELq4DmzD32zr j4nHmuQP1DdV4KjFFdKDmkgSPj1jBdKaSg3CegQlTJWkk47sKfaovtWrDay1mbxXANed +z4A== X-Gm-Message-State: AOJu0YzqkL3ukmWh3Bsqr9jtl/fVJs9HHFxJrURSQzxmfebRlt3823hC 9hPYP4HWhPHjo+rTXqnEUQcoXI4qoJJ2FYyTBl7eZRs0hoqGQwaTALBeoqDe8JnCiSq07hAEKe1 U1N+0WzY= X-Gm-Gg: ASbGncuezhKIPB6CClCWbvVL4Myv0D0+R1AiCqfxTiBUxur1kRQhrn91KgQpHElupIc OG0+J0/8vd/4Wp9vOFVjvk74K1+R6YmxJJnIXo9pRd2lUMiwZTd6vLtAIDPHiAJT7qSrBHNZ1ks UaGYZF+KcCQ4ElfWYdHKlixJU0HaQAiJqzexx8hr7LGdUxU+mBLuYZLr5QC4blb8vK8++bhnhwl EsqzNj9ydGJXf+5QLzWpwgbHEh6DA9ykzKev5aOgup0r6PLkvy4EmF3FB2DExovxNUJNdW2CDbQ jWHU87vk0JnjIohVqUYRh/tOxZT5DAjvTMopxBz7uf7jJoPpI22C+kJGsi3Ya8iIwQWsUEpNign XfPlZdaMnhjGugwfl1NYhF4uQlXibzcfiYkRrsNmeJfolVtQF X-Google-Smtp-Source: AGHT+IHOtSNFnvuvWY9vDoese+12w0lrcM/uCX7hbHDxmbrRF66Nq+2XryvpzQGYjVc/dQes5IewKg== X-Received: by 2002:a05:6820:174b:b0:613:7eb8:a4a6 with SMTP id 006d021491bc7-6138fd5e525mr2320133eaf.2.1751639103718; Fri, 04 Jul 2025 07:25:03 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 046/108] target/arm: Implement SME2 SMLAL, SMLSL, UMLAL, UMLSL Date: Fri, 4 Jul 2025 08:20:09 -0600 Message-ID: <20250704142112.1018902-47-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::c31; envelope-from=richard.henderson@linaro.org; helo=mail-oo1-xc31.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751639664315116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/helper-sme.h | 21 +++++ target/arm/tcg/sme_helper.c | 59 ++++++++++++ target/arm/tcg/translate-sme.c | 84 +++++++++++++++++ target/arm/tcg/sme.decode | 168 +++++++++++++++++++++++++++++++++ 4 files changed, 332 insertions(+) diff --git a/target/arm/tcg/helper-sme.h b/target/arm/tcg/helper-sme.h index 464877516b..0bb8af194b 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_helper.c b/target/arm/tcg/sme_helper.c index f5242d99be..0f79d7cb6e 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 b88f439ef9..070cebc573 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) diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 4146744a46..934e4a802e 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751639411; cv=none; d=zohomail.com; s=zohoarc; b=mbIInBzrNTZzhdys3DEK//jFWuTJRU/qIZbkd1rEsD5N4jwQGdGl/A+n3MG2mf7VyhuF9aMsurVJAVOQE63zvSqiv6C+nMjObgUXB4l9+I4uQhuaELf1FvfR9M3nBaqdzsfQ4WLNnxalA3+7MMJNWPRVJLg66pNG/eLks9DQF8k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751639411; h=Content-Transfer-Encoding:Cc:Cc: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; bh=82A064SU2LUhD8rTioctnax35EtJD6goQBRa7TkwAiM=; b=bKeUxCnebu9FO0b3ahcno6zPVBOqYx7ZOhoZ0XTUgrk1OsNtAKFExURIMLcWEV8H9YD/E1TaI8bohfhDetGtdIyK5Ar3BwKYG4BuJORlCZ0ar1zpgR4BmtQs4D+yDNHni7UKo+12FBh+f49oV976xGYPFU8G2gWbhcUp+LkLJPM= 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 1751639410940440.3309160790677; Fri, 4 Jul 2025 07:30:10 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhPY-0002tt-Q6; Fri, 04 Jul 2025 10:29:11 -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 1uXhLh-0003w3-FL for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:18 -0400 Received: from mail-ot1-x336.google.com ([2607:f8b0: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 1uXhLe-0007ra-Lq for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:09 -0400 Received: by mail-ot1-x336.google.com with SMTP id 46e09a7af769-73adf1a0c48so633166a34.2 for ; Fri, 04 Jul 2025 07:25:06 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 006d021491bc7-6138e5ac5eesm310233eaf.29.2025.07.04.07.25.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:25:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639105; x=1752243905; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=82A064SU2LUhD8rTioctnax35EtJD6goQBRa7TkwAiM=; b=D4RxNFYK25IFSfqAfGURr59D7SoO6kiKMB6Cq3mGPwBqmiScVSDaWR5cm45UEMnPo9 3BTLPVnaVYJMenMmSUT+mDycaSQ436OnpXervXsAjDFnp18PYHu2OC6h5znI/Ioi4Djh kqnLSVeuXNjb8v2pQdgi+/J6fwgNE8Tl+FLeotEfBi1N+aNfvnH8wJcOrImc3yZY+CRU +nG3hFC7MM2d5kPBar/EtbN0FwqyXSQN0jRw5Q169S8p6o7pXydmrexIBi+A+P0bqs5Q 9zF3s+yfQcfFBnL59WsdZ+dgfibDdo09tQ+rBERDYlqtezHVJ6pFeshjQh7p7VC+GdXK /tHg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639105; x=1752243905; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=82A064SU2LUhD8rTioctnax35EtJD6goQBRa7TkwAiM=; b=QvS1d1RozyQP+L8iy+Oh9eDzeurO+MuZoDD4J1Gfviujb0bsB8jL04T+14CjprnK4M 8a/d/qXOD0QdOuXl85AI0RE0K/JI5FoCXOM+TvmmxSoamcyaOzXU6Rw6IxKPTvKNUqfT I0Jq72hA9TWA6JjBW4Go7UvxbmknIrMNhnVndF8Iu5XVY6vkDKggqUxnqMpgHql2bsRE jzgEYTIMlI10/c28Hi/DW6wi66oHyXOHMESUO3v4Sv221AoNRGnSobIxYm/QycSjNef6 v5/nK9KhgmzxS+eRQXHFblzl9J36qYKsomolYn+yGvb1yWQGb4KEeKj/qaUbifkkEdp4 ljew== X-Gm-Message-State: AOJu0Yxida2uMI8pnWFEs+dgVKTjbyK8IPHgvBbkUs1sFhy8WQvWSiXX Q+drpfd5qe/0Jft0Dm0xZXcQBMqGZX/EfAtKEMYyLOMlutrzkWVp8b8UBvZpj6zmmZtq01oHd2k oeWAkvT0= X-Gm-Gg: ASbGncuTw09CqWWEShZT8K24xrBWjHjOPMDbDFqO8BkwGmuK7pO74gHjo/oS2W+zsWV OtEyQy7i3HRT9U8fuRZ+Bh66nKlumFR/OMHo4PIXP1pL2irjwXyTi1xcfdE5n8dnL9I05zhdBJN IIn8HUeb2qSj7Sm/HxIg0vAzZSC9TQ7U+Pg+Bj/tQVZKpFsUsUvMDNjwMeHEVQn+tX7+SGMSJC7 3Nlawt41JRq4s9bpEp/mW5U0S5TzHgDb8zf4xUMFSVdYaI5S+GCg6C34Y3YdJvSPo0f4cV/9pr7 nDvy28SYxp5unTWqj0GqlTTKWgl7qBFympZq46XHTqpTpEgKgibVgQ2cc04esn9C8LH0G9VSeKz VYhNGrSGHArNjLOa3SEHoIENkHOabfCSCAviYPv3FsdpkSzEe X-Google-Smtp-Source: AGHT+IHn7u5NiynNRHi7mbOeCdz4ajJZk51j5SJXLlTHjEMamc+a/EWL9E0Ux2ATNjY1QUkJ/SFoAw== X-Received: by 2002:a05:6830:6110:b0:73a:8ac5:a6d9 with SMTP id 46e09a7af769-73cad676353mr920125a34.11.1751639105158; Fri, 04 Jul 2025 07:25:05 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 047/108] target/arm: Rename gvec_fml[as]_[hs] with _nf_ infix Date: Fri, 4 Jul 2025 08:20:10 -0600 Message-ID: <20250704142112.1018902-48-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::336; envelope-from=richard.henderson@linaro.org; helo=mail-ot1-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: 1751639413081116600 Content-Type: text/plain; charset="utf-8" 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 --- 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 c4a208e3ba..b741470b51 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 ea04336797..844d2e29e4 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 baea6d8b89..4b7de5016e 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 Sat Dec 13 22:57:49 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=1751639605; cv=none; d=zohomail.com; s=zohoarc; b=mpDW+ES951NsJdQ4CIqvtWSYYEBesvINSioTSiFb4T7uTslUr1tFRPDKGE/qspNxCV2oqzWwPVJIi2NZc0zfx87oxgHQz/lBlOvTvOZ4pdOYGNiUnUo3r4gMCsBn7h+vyjZneQrM8iqSfEy68RteOyBnhq9xYJ6qG82s0mLOBDU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751639605; h=Content-Transfer-Encoding:Cc:Cc: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; bh=fkbu8KF+kbmRdV2jieqYyf0LR9DpiLj+x0wQORT8WFc=; b=ZRGZTWeG97PJMBF5fMbhhsx8qQIm5osYz9jsgmqXaqSDONiuEZUzORzped/ph68R8Ip5kU2FUFfoay6Zhyv0bmBJNZlmwNoBc+kzOAH0lOkybMFxIBFmJdS3WSuDemljQTbpzLDutNy715r0RJeZx1clzkG7qY/tVT/M5/DKthk= 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 175163960565153.100161368215254; Fri, 4 Jul 2025 07:33:25 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhOf-0001vK-Cz; Fri, 04 Jul 2025 10:28: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 1uXhLj-0003wO-T2 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:18 -0400 Received: from mail-ot1-x336.google.com ([2607:f8b0: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 1uXhLg-0007sL-Al for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:10 -0400 Received: by mail-ot1-x336.google.com with SMTP id 46e09a7af769-7387f21daadso1252148a34.0 for ; Fri, 04 Jul 2025 07:25:07 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 006d021491bc7-6138e5ac5eesm310233eaf.29.2025.07.04.07.25.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:25:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639106; x=1752243906; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=fkbu8KF+kbmRdV2jieqYyf0LR9DpiLj+x0wQORT8WFc=; b=xH0o1oVA9Sh5Ghn9tu94bOv6KPkMCNn/Md1G6GNI0J57vT3s5o5n8fDpW5qOqsm/q9 HIYaJxtZ9YLA63WcwW4oIiMcxH2fYqmLdYKTSgn4H/E0CH5FBXhX1XnSCKiC761M1Qvm bj7vDPCALscivZx24gPtPuuW4mwimSsiZikloeXHuwbj6lGiCOWgI8f3F+G1vfZdflwx AWnz3Jnh/5kN2eG47FN/maHmMtlYH3cEQlZl56fJn0aDWgWd5dDkGeXfj7h2n5ohvV/Y 3Egni9ETsFXPxueH9WcVBlovP6qedmHxOGKPHlLC/N/khCK7ED4GKbitUgXL5YYki1Lt gh3A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639106; x=1752243906; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=fkbu8KF+kbmRdV2jieqYyf0LR9DpiLj+x0wQORT8WFc=; b=WLRq+9N+uEOYfxfk8HTiFfpN8yXMXAvcD5CjL9BDeejm6VqZigsudhZ8xG9RRxLHy/ 2S4ja+48ebPykA0eGsIpzd5LFXNh2fiewe2Xrk28p3sdA/QKJ5GQFcttwHIheQ8Msuxr Wy/H/35DXHdhQvnAsIlFFyCrogaKNFhiXDtmEM1ntQ47ofQj+yQaJmfLwmG3xwxYLBSB 1ZNeS+kwWyKylcCGTeDVhpwwNhbvxmLKML4Cfxzi1HIkpHEYvkD0y8oSnW1R/wiNMYH7 a9DvoPNIrYhlp4RP+XKzGAnNAlDfXDw2zTPEk9WUKV42wn34BEgBodu/iVb3b2F3OTRH FlcA== X-Gm-Message-State: AOJu0YxEgWaPVY6L+jS5iDQ2fRz/jZTH0s5e8RWTeLm0+Dtt7aYrpbyW 1aIOHS85TlHLAC9Pm9p4oWSPTh+6p3Fop+rpxfBZ7iJrlwgCJ/tqj4KR6cAwyV76pnpNAhkCsXj D5WjLRi4= X-Gm-Gg: ASbGncvDdGAAcAZ5QE5vrypYQhxm8Ql179fnffUQA/oNi4wfEiTo8fVRNj/3i+Ea5sZ imuN+BEkQpRwGFuqqSroZXvwSmvVSesMb0E1RR9ezVv6Ibk8b/htPZpm7KU27fgwEPS35v6VKAt 7DlEpGCZ9IxmrWMpzEYVlKmX4i2zkxF6ll2E8hAysvyU3j+hX7/dZnteGx03feRvZnL8RJ0GRan oOS9x+wBSg19cc+JR5iBLSHHeiEZLrFMJGlEh6NxIOOWHk7sjG4pbQg80MRt/5IKUwdj9bCI/+u 1YiqN0GZKEbBfnTkecxKHf2i1I8g9HWcr9MUu07JH1uhkw9EZd4MLML7A3bGtkxM8H1obXCeF1v cS/hpQKSx4IcSuANPvcdmpu/HJm0e6RGi+TrwWnhSVaSm6te8 X-Google-Smtp-Source: AGHT+IEmrv1d8KCXazxrxVKtZK9F0/oNvMixLRCx4KRQ+6opD3StCaIQJ090niNgZ3Myib2EeImxrg== X-Received: by 2002:a05:6830:34a1:b0:735:a98d:a4c9 with SMTP id 46e09a7af769-73ca04e87ccmr2812518a34.7.1751639105978; Fri, 04 Jul 2025 07:25:05 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 048/108] target/arm: Implement SME2 FMLA, FMLS Date: Fri, 4 Jul 2025 08:20:11 -0600 Message-ID: <20250704142112.1018902-49-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::336; envelope-from=richard.henderson@linaro.org; helo=mail-ot1-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: 1751639607632116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/translate-sme.c | 95 ++++++++++++++++++++++++++++++++++ target/arm/tcg/sme.decode | 48 +++++++++++++++++ 2 files changed, 143 insertions(+) diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index 070cebc573..5f51369609 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. diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 934e4a802e..962ffae3d6 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751641133; cv=none; d=zohomail.com; s=zohoarc; b=hENLHIqZ2hoH7orHtHfXVKvnxgJnQomRfcQC8OiJu0gh7M6qCDq2BDW8Qt7ElcgY9tl9ksain+BpPnaz9r+RxQq8Qyiu02sqMYbsbhhpGgaXnnRB2VuBd7v+5L1GCcEBz1XbCyuRj0N0NtVfghRbPzMfs2XMbZ7DeCT6/xzNMdg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751641133; h=Content-Transfer-Encoding:Cc:Cc: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; bh=Gi6h0jJCLM5pMa8O5xWfVi3XLDkwV2ixos8pzzU5jpA=; b=aKy2JtkeqsnYFmXqZF0o9zV2htRX3ES8nx4DN33Qr1nowMpxgZCG3OdtyrBxafOlKLFnJdnVfgXTQhH6L4Apg9ZN0Om7tGBzf762DFRM4IpwPZtN6cOkkYGww4YRKy80Ca96rMrWKv/UKe8TJ2ohAuEfJoYDSFim+2Hxp44nyfs= 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 1751641133039415.0440272764805; Fri, 4 Jul 2025 07:58:53 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhOz-00029G-Q4; Fri, 04 Jul 2025 10:28: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 1uXhLj-0003wS-VA for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:18 -0400 Received: from mail-oa1-x34.google.com ([2001:4860:4864:20::34]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhLg-0007tP-V6 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:11 -0400 Received: by mail-oa1-x34.google.com with SMTP id 586e51a60fabf-2ea34731c5dso862102fac.0 for ; Fri, 04 Jul 2025 07:25:08 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 006d021491bc7-6138e5ac5eesm310233eaf.29.2025.07.04.07.25.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:25:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639107; x=1752243907; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Gi6h0jJCLM5pMa8O5xWfVi3XLDkwV2ixos8pzzU5jpA=; b=PLsqyt7IA/Da8uyKP60K3RvxE1Ezi3VtsG3HaRqA4YWeuSMfF3Us6Q7pyr2W1xd7U2 8hRuWKXDK/bGxRV/3uw3M63dNEwxWWzR43hFYWuEHNMfRQar8cMXY0MFv5KwhUO2wPtC Ant3/fKUjf1Lk1mDqDQt2D3sT7bEv71LDW3o02jxTsqKVXd4BPy2w4il0CaZqPtiYdrD nHRnFmZ6xQbx164ACFuKUkIksqtDuewpuk2+jrYdn9loGI2Z7D2IGyHEOcUBBF1A6YOP 5XlzI5k13d0+bnNXQT1RTImGVcGdBU1kIRMPjT2wTcLwyNVEw9zeA2DUQaiWQ8YKdycH 1Z7g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639107; x=1752243907; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Gi6h0jJCLM5pMa8O5xWfVi3XLDkwV2ixos8pzzU5jpA=; b=eYiRnaa7vUlA6ypGWECS0Wo+pKPa7WwBIBB8dlUj3G7TgBrE1yZqDfcaEOD8jN+s13 YZLO8Z5yZ8mGUcWoabqH+79xYa7QSmNuP425SXMLDs8C6dRkgWyChjGTkjUS5iO7cYyx GmUR6NRIQ4C19H6plvEZGAd68S7pt93S+RmjDJvyWzfPWSAtQZvkKBuJSRFj2+xcKWwM ZTcpogRbWN1x55rFkYn+pz3dmPchwGcLiTWg4mksMV1u0GZd21vT0xlZETE4sw/rycpK InGlFUsOKmMQxNK0xetH8Q0bMjPZvFbElWy5CkX2dcDy8P5Km5Bg6cLIxB1iipQS6I1l tGMg== X-Gm-Message-State: AOJu0Yz1iorvrI9aoXum99wgq31KrBhpkZwjkdWl6GbDCCD5wWB5NAXZ k9SivYt9o/VGTLPXLGMDY8P29SoCB6LhBxwvpp+UnDEnoOBYDf1yTRjXYPu8Q8JYDpZITQCJctZ 84gx7XII= X-Gm-Gg: ASbGncugf0dXj+X5eEH2a0eWGT+e9l68M3s/MWpIG1sUj397kWht0vYqtpVjaYfWhx2 Td0TniDSm6NYs7/5KIqb0qqh2F8d4J8QyTNRX3npZHiBpDUxvgIHVVcUn+OZqAO3ZPkxEJnFapl aeRFNqAi70KlHwNWQlM8tdzyXFVNzvBHbhSA+3ivOwwrWeUhEfeAEdNlv2X5Qa6akQk3/XRWDr4 9yj8xzsvyFtARGbDc6TIaFiN/muJGDL7hfa5R7dvsLL4ZhkVPfL89BrkJo6colb2BN/cpvbZAPf iY2K2Xi6dxqqpWauUzfH1+yHnH9U9kO49jexlNP5HbuWlW2bVkflVZzDKiDd3LuW/3d4GfzudBb xw3wZkIEYSxTBRBf7Fv7afI3rAhm2pV99NZv7jfuZXcyNQ2TG X-Google-Smtp-Source: AGHT+IHdQlZoknD3vMnFyZ+56cWRVEqAU09q/6uMb4ndnL3Yu/alkq/YbHj8sCBEVhbcjXrN6Inytw== X-Received: by 2002:a05:6870:2046:b0:2e8:ec55:aafc with SMTP id 586e51a60fabf-2f79205e860mr2242129fac.37.1751639107412; Fri, 04 Jul 2025 07:25:07 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 049/108] target/arm: Implement SME2 BFMLA, BFMLS Date: Fri, 4 Jul 2025 08:20:12 -0600 Message-ID: <20250704142112.1018902-50-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::34; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x34.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751641134785116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/helper.h | 9 +++++++++ target/arm/tcg/translate-sme.c | 14 ++++++++++++++ target/arm/tcg/vec_helper.c | 26 ++++++++++++++++++++++++++ target/arm/tcg/sme.decode | 18 ++++++++++++++++++ 4 files changed, 67 insertions(+) diff --git a/target/arm/tcg/helper.h b/target/arm/tcg/helper.h index b741470b51..37dd384659 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/translate-sme.c b/target/arm/tcg/translate-sme.c index 5f51369609..3f9a80248a 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 4b7de5016e..51bfd767a3 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 diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 962ffae3d6..b3dd3bffc3 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751640680; cv=none; d=zohomail.com; s=zohoarc; b=EOAjqSKV6Il8dq2CjQXmXHPv/Qv+9rpBTEAp3dm0YxDJVVal3HB6FbtmOKTUCG9y0FmMDQ1JEBX6VCXxx+tXYzhPX1nDc8B9J07Nu9QRvEOTTlS9zAZnHeopquizAQAUidFPY8uu11NFCIsb8HJuRj+w0uHY0ZkZrGsyKMFXSZQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751640680; h=Content-Transfer-Encoding:Cc:Cc: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; bh=ZfH+TBNr4UGCBawjnJleJmZyYrHxkG1+R38RVn3NA/g=; b=WJh1j1qZEh//OamJUSh15Mjrl256DdlaCZFxgVNrpozAP2XFtbXojrjxFBPvctK881H2TEfGLlimIBBS/bOBdtvdPhRhnm0YsTTrMPI4cRiJRHf4vWv2TN8inZ5bFERBimonladlq2hiyEQ3OHvQ0QkAR0Hp45ln0YDO2hNUah0= 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 175164068053467.19808608989456; Fri, 4 Jul 2025 07:51:20 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhP0-0002Bd-FB; Fri, 04 Jul 2025 10:28: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 1uXhLo-0003xl-7f for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:19 -0400 Received: from mail-ot1-x32b.google.com ([2607:f8b0: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 1uXhLj-0007uB-I1 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:15 -0400 Received: by mail-ot1-x32b.google.com with SMTP id 46e09a7af769-73b0ea4e138so827680a34.3 for ; Fri, 04 Jul 2025 07:25:09 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 006d021491bc7-6138e5ac5eesm310233eaf.29.2025.07.04.07.25.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:25:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639108; x=1752243908; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ZfH+TBNr4UGCBawjnJleJmZyYrHxkG1+R38RVn3NA/g=; b=fSswHqjYvpljtFScCID9TfEhfG1fLeQGFulHYwlReVbYT0qsYdoCspkgJncCOatqrE fXl7vB6WsHU6ml+tyV3g+HtvpmsIt5JbWjz7to8p/uf9UHX3osrUUVBY9O2YUFym25cK c6j392MI7Q/opkSwmrsgP9yMYXpMtUt1yf5rMUgwu+CnPcM1DGghZ6Ptvp5wEDk6Iz4v QTYYFfOGels6lFr9S8nuA03Wh2etafo4OIcu6J1USaC6c4KvBQKWqK33b5DKYl6Nx2hW 82pp//OgeJswhsL8nMbY8CJFDWYrhoKqxRBVjuB4OmWR2KE5G23AGuK57K2JUtIIAus7 zWvQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639108; x=1752243908; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ZfH+TBNr4UGCBawjnJleJmZyYrHxkG1+R38RVn3NA/g=; b=OghSzYhy3HbiWIR3UK4JmaGFkPhjNIrBOgVTkK9l4rKhXz8wGCw8OGQ8OfkQKVw/eZ MUXfdkzgs51EOeEzr4/J60WTWTBzGqIe1Z0CnYaju510jET74JGzKoUSK5NWDwf2QCtK kQx1WyLIJGsLWEAc7mT1GWgwemebSNgE36wOTn5uplL/E2gwCrpys2hX7nkMh8JfDOWF wIf7dQH95pi4Bg4XdI6yUgK8ZZ1PuBA+j6oUG7uO3RZzFbbFrXVrPpq/w2VJ75PyvD+l I+HznZ7lzeuzulKCVdy2DYmE2L0lNiGyCwj+X+fwC/JstWVnEbpN2AZUVaxYFoE7TJyf eWIA== X-Gm-Message-State: AOJu0YyXc6b8j4EGWPmi8VPbRofJ/cZH9ZF3sYnSQof20jOqb1qIFF0C c/ArpQ39PptiJtfaUqzDP3NxLWbX9yboAE3ofCp81VCDqmCWXTsfDb0EuqgOwGmrWOxSHL1U87f XZltKIpc= X-Gm-Gg: ASbGncu0vWgL61I4JlN8Nq6oddOziLZRxfj8jMgyTIwJ8ZU2Yw3evMKqIn6k8RsNgIu MmwdPOIYty2xTPsNMyD93vRJOmx3vSIY7HjUKKTGXJMOXIoFQPoZ7BFFhLhcmdeeWWB0CKlUWPb /lIrvBu8MfFi86k/e9N7JYiYKJ4rt2Eu5tBKpq+80XLeZvHe/b+DF15Ahj0xOrRjKZ/FypuzHO5 GpCbaYaVegrMeLry15uev/SEisxVAPpyWui8yTt98/gI3F9CAwuFXIw8S9hyfS8yqtI2+TVk014 PO/Q7HbDtf+JO8A1zvrllGOwZ4B1jNq3wkrr0Ky2gAX3u5l+eMn5f3JoYzY+QT1CoIopgaxfjks e1ms14bzcfdICN90RRQ4IJj4A3RzabuszJAQkJ1+XgpXoR5Fj X-Google-Smtp-Source: AGHT+IG4XszohT5asPTVy7IJx1j57vvpKvCFGf3WGTqe6b69ujRCoPgZt0v6NHB97/C/acJSbvu2hw== X-Received: by 2002:a05:6830:498f:b0:72b:a465:d955 with SMTP id 46e09a7af769-73ca661fa7bmr1529963a34.12.1751639108457; Fri, 04 Jul 2025 07:25:08 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 050/108] target/arm: Implement SME2 FADD, FSUB, BFADD, BFSUB Date: Fri, 4 Jul 2025 08:20:13 -0600 Message-ID: <20250704142112.1018902-51-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::32b; envelope-from=richard.henderson@linaro.org; helo=mail-ot1-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: 1751640681727116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/helper.h | 2 ++ target/arm/tcg/translate-sme.c | 44 ++++++++++++++++++++++++++++++++++ target/arm/tcg/vec_helper.c | 2 ++ target/arm/tcg/sme.decode | 25 +++++++++++++++++++ 4 files changed, 73 insertions(+) diff --git a/target/arm/tcg/helper.h b/target/arm/tcg/helper.h index 37dd384659..392bf7b9b5 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/translate-sme.c b/target/arm/tcg/translate-sme.c index 3f9a80248a..664fdd86aa 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 51bfd767a3..d4ee6f4d29 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) diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index b3dd3bffc3..0badc8f9fa 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751640323; cv=none; d=zohomail.com; s=zohoarc; b=TCAzTYwU6NLKOdDyrtwobHp98WWelWu/my6RoYQlp0QDaUWHS1NFL0/cKsjMahhcO9p0PbywCizrXnHs805PS9yVUAWrjbr5d9WesKtkgzVrjaaqwSDh6fS/oPAyS9eNeIOsX5S62L82t0MmB0xmhfZw87EgQvz0dmUzhd0q3ak= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751640323; h=Content-Transfer-Encoding:Cc:Cc: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; bh=/wIP0g8QImX1YU2+8fuv8jxqBGCPi7uC7BhVnJEvQgc=; b=hZoeDJF8OvS+51Kc6fXPBaUWQx5TAx/snBGNVmzcKdChFhFNcK4Q20IUdqJ5tHnpjSgUY7knkjt0VULUCFj/A/qozqlhjujFjqX5a1UKol1ApYxcsx1fSf7M8drT4/Lawr23ILrTQFYCIacrUVyOs8n2E6gMEKGsAARoovz7QEc= 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 1751640323108892.1435774185601; Fri, 4 Jul 2025 07:45:23 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhQ3-0003z3-Su; Fri, 04 Jul 2025 10:29: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 1uXhLo-0003xj-7S for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:19 -0400 Received: from mail-ot1-x330.google.com ([2607:f8b0: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 1uXhLj-0007ug-Kr for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:15 -0400 Received: by mail-ot1-x330.google.com with SMTP id 46e09a7af769-73a9c5ccfcdso586501a34.0 for ; Fri, 04 Jul 2025 07:25:10 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 006d021491bc7-6138e5ac5eesm310233eaf.29.2025.07.04.07.25.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:25:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639110; x=1752243910; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=/wIP0g8QImX1YU2+8fuv8jxqBGCPi7uC7BhVnJEvQgc=; b=zn1mM8CUMRRnSxSfkCMhizQwsPIX493v3Ke5Te7nfnFV7Tu2FqMoVz6K7Tdcq6MfJ2 eaydvVACUx5IuTEFZ2YupEvrSiER4h6v2zYu77sb8HcxPEIMVwuDziTeG8GWxeV3Q/QK I5uCZ3LJz1qEm645nnc20iomOAM2QF/Uin6lseRYTyax+J9rtzy2/Ws/0nFeX/EdbPAW mRPLMWgA7lSEcUjF062M5bOf5JAZeuNpmC4hu3X+tOnQu2Wod82WJhl388zVKhn3n4Lk kDCLB8EO7mT3FqdtAexs/E2FSK3gJV/iDYDdi9uCSQiyGS96ZHw+UAYP1sx0CLZB7K58 14KQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639110; x=1752243910; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=/wIP0g8QImX1YU2+8fuv8jxqBGCPi7uC7BhVnJEvQgc=; b=Uq8ZVHs2mp3cbVjjjz8LUAlBkc0lubs1V1BOO9Q/iRg+dRQtuM5WedLyQ5Se/GgdHZ qACWdV1k8N95H7APtV2h+Ph/kSElkc0lx4tdkYketHf+DlpLnY9qnZJhc4WewxD9pqyx YD2lWGdHDGkRGvCAiv2GjwVuM4trXtX+l96vBv4dc60ov71rp3yiXssrmXaY63U4ccpY rvVfsbSxahm3bZvcg2v46wzP3MAIgera2VyMnmHy3P1BBpHM5Je/fu9s74wD+P9GnD/p KL6mnYudx/LJPxYSqYu9o/5uwEEtULE0xb0G4iNWbGgXVvmpymPt8Kji2vp6YcjBD7Wf PbVg== X-Gm-Message-State: AOJu0YxRJ5BIPwNmQNr8atG613JNvY5gzDpB5fZJruLemTujbC/40NmE lfMpAKq+wY1IE4BB2ys3NirD0TZqkTy89CmFHMGRhUYMHe6y/jPbfGojqr8fdLbmqClGqyTuMB8 hekda0jA= X-Gm-Gg: ASbGncvgfjKiQ/vZNZUnGpmDE3hItgz6oP00cKHLcxBEyU5F+jYmgctEi9JaDKeFkh4 L97OfGdzhVlSSOpx0G0jmsdYy+BDrOzzKphFky9hS1ODVMKJdwIVmHxYsczSf1vHGLycJlEix+t RhjdJWkpTI4wdBT1kOyfEpeDf7Zp/qq4AdWZEMaSyQQT+ZB2fVGo1oy8hhSdLZOe6vFF41MAHrC Rw/lcU7vc5ftMhuXwGnMmACnYMKXKmjcdQ1c/4kQlgn1dOz9XQcYI37tbWWLghZV/nm/rG8XNOg ALUUW9uRmrJHJfGHNXfieHbELAaHNR1+wwM9ruLuHfhPD6zFCCFDI298PzLtM+TDD7NrG+NhA8p A5t2xxUOd4+nD0WIZgU0cIiQAaOjDS0v2WnMehCLtP9AJrAED X-Google-Smtp-Source: AGHT+IGSCqIOeGOQsZBvotIOZqx5Btl1GaP18z7Efaa5CuHu8d8fZvEtQWPxlbQCTkCiJPpzI2b4Ew== X-Received: by 2002:a05:6830:3494:b0:72b:b8b9:9cc1 with SMTP id 46e09a7af769-73ca119d9b3mr2393673a34.5.1751639109829; Fri, 04 Jul 2025 07:25:09 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 051/108] target/arm: Implement SME2 ADD/SUB (array accumulator) Date: Fri, 4 Jul 2025 08:20:14 -0600 Message-ID: <20250704142112.1018902-52-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::330; envelope-from=richard.henderson@linaro.org; helo=mail-ot1-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=unavailable 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: 1751640324367116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/translate-sme.c | 28 ++++++++++++++++++++++++++++ target/arm/tcg/sme.decode | 12 ++++++++++++ 2 files changed, 40 insertions(+) diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index 664fdd86aa..4c3b9aa7d6 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. diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 0badc8f9fa..22e2a68b1b 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751639960; cv=none; d=zohomail.com; s=zohoarc; b=BcHXilG+Pd/vU610eY3m7Mn5PvxbSDkWnSQBZStWp4NTV+RY+lNy0ag/8oYFQ2fi7/dIOQYKd/MQBLrRjjl3IRGLsg+cK7ksKvINSqE6VjhmXleShYy2yweMgKiGi1aj2FQWihC5GCBvpc6C3OD1YkDSIfdg3TYCLblhTzrOb0I= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751639960; h=Content-Transfer-Encoding:Cc:Cc: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; bh=8hSOGYHkyTGXb7wdJW4EBWpdtdktuWmf9LfwyRfk+00=; b=BB1tthPxbxbLgeGsP8htjekQq0jmjXcy9drB98PxTavC4CXEdELv0BDsu0/2TDF1ABF2IowAsmCCvT5Q6LHhB8RbYHuMHM/TIlZOSM4YQZf7QHLtKgyibWKfDnx9dTTDzuUWSDGC6pIBE4kNWLUYtVutq3Cif2hGwBrq+drwPP0= 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 1751639960552332.9876683436361; Fri, 4 Jul 2025 07:39:20 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhOg-0001yJ-Va; Fri, 04 Jul 2025 10: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 1uXhLo-0003xn-9d for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:19 -0400 Received: from mail-oo1-xc33.google.com ([2607:f8b0:4864:20::c33]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhLk-0007vA-4z for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:15 -0400 Received: by mail-oo1-xc33.google.com with SMTP id 006d021491bc7-6119cd1a154so511394eaf.0 for ; Fri, 04 Jul 2025 07:25:11 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 006d021491bc7-6138e5ac5eesm310233eaf.29.2025.07.04.07.25.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:25:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639111; x=1752243911; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=8hSOGYHkyTGXb7wdJW4EBWpdtdktuWmf9LfwyRfk+00=; b=YZEJbLJmFDHuoqIU5NawpZ3mwD7seEHcHpBJe4xDPwHk57FOf93VJ/NhLJogPZvHC9 Z83U1bPstnq/axnoZnUnlDlisPuaWNi/w1OqZSCoA8F6h/nX6fSBfVSVF+WqMjfmbnaG xp81LsB+KAawR5K9EcgTII2IZo3dkfncQdszakrQ0no2vgNhayBsrEBcE696WaYZdq9n zefRoYAcCEFEH1M7mLwwnPD2GwE+K1kbg9u2mLjECyXqu2B5xs61nWOEyjBtpNWxuZVs /rxVCne5w0EWH2SgaX5Zlw1KOPxS3bkzyMBesca9hFBZ76x1mNAqSa+oZMeZxaNH6HPe eMAQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639111; x=1752243911; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=8hSOGYHkyTGXb7wdJW4EBWpdtdktuWmf9LfwyRfk+00=; b=oYrGpjj5YCjtVG5075x5Q2IJKxRTex1sHeVhCszsfdphdWZvtJ7NciG4ihMO6qdF/0 2txca5S5vTd6dFgSK3oIAW5UbpfwMSCrjvl23dLNC65Zy/hkrEQh1OymEvZ8MyYOcCxx H6EVCXJpFWqC5mJ4Zvcuxr21i1KVI00qbW7YR2Mbjzf44oRxyAxcCJpWlqI3/I4iJDWR gVc0Gfvqe7Y+HBa9oDEtIUGuZr0wXAbQAPkB/GnOK4orcS3jYBXgM1ouuA9KLZG4C6+g Pq6D7yoMGhLAAq8dkbfImqx2W8njJ8v3XlFBXoiY99hZGtCZvSmVrVpnJUse7xkWeopc +8wQ== X-Gm-Message-State: AOJu0Yy1ifzOec7fJHejU/UTJKj9QmK8/XWSVqA9JBsP5cCdn0xQJnjv 6d/TJVmM1yUPOLmfBslfz2KCz+Mz7L6FfVWzf+H/ueelhze2Vv5gsrEWN5fG4A6Sof50WFD+bud ZfwlYXXY= X-Gm-Gg: ASbGncuM23bgcVghZ374tkg7JeqFdZ23k3ahnQ86cToItrodKUUZG1MM68tvUhkBweT O81PeXGwaRjWn/+Oue3y0ZMH4628GoiAbAX0qG5BHjLdwZ5x/2ycLGShQSxh39XLEJ8sbvZNdzM kgEJ5lpYxhlbHanHzUP9r6EsfZ+qYTqBzHf5GFt5kZ0J/P+n9yO4VXNXn6hkBEv1OEZT8HUbSPQ SXsfvdmAZPX+gj4ZjXEJobXUTlU4w5ZncC4WqTcj2/QclYyuCgBLhkXUiEKuTpnYnCsiL2ccZ3h q41yhEqNMEtPvEo2fsq1J8KjBlxa634GyaBDz1j4rXFH+PlgJA4LmuGCBrV+Cz8AGhsmkJIyuJB HceWSJodQ8waaVxGNv15S1KMkIqcV8wqHJJG+TsOwPs6flRUY X-Google-Smtp-Source: AGHT+IGpEFHeANq4RLYgCJ4NiPnCw6BKJ41IWbmxlLUb4BZd0rBXn8QRwrXu8YIViqDWtrfnNyfPyg== X-Received: by 2002:a05:6820:2687:b0:611:e31c:5d23 with SMTP id 006d021491bc7-61392b6ebf0mr1556804eaf.4.1751639110656; Fri, 04 Jul 2025 07:25:10 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 052/108] target/arm: Implement SME2 BFCVT, BFCVTN, FCVT, FCVTN Date: Fri, 4 Jul 2025 08:20:15 -0600 Message-ID: <20250704142112.1018902-53-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::c33; envelope-from=richard.henderson@linaro.org; helo=mail-oo1-xc33.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: 1751639961859116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/helper-sme.h | 5 +++ target/arm/tcg/vec_internal.h | 2 + target/arm/tcg/sme_helper.c | 74 ++++++++++++++++++++++++++++++++++ target/arm/tcg/sve_helper.c | 2 +- target/arm/tcg/translate-sme.c | 25 ++++++++++++ target/arm/tcg/sme.decode | 12 ++++++ 6 files changed, 119 insertions(+), 1 deletion(-) diff --git a/target/arm/tcg/helper-sme.h b/target/arm/tcg/helper-sme.h index 0bb8af194b..97e70959e8 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 64a7249d01..c8199a3ef8 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_helper.c b/target/arm/tcg/sme_helper.c index 0f79d7cb6e..d97afdb69c 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 a2c363a4e1..b522ddaf7c 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 4c3b9aa7d6..10e5b77040 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) diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 22e2a68b1b..831179c0ee 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751640747; cv=none; d=zohomail.com; s=zohoarc; b=NDMg2DyIoEoUV2FyBivuDGFR7wz8lJNI8Ce1SV8t4wrOvLDWhJXKKKOLHcEhETzEGhG5y+7SRbQU89/a5AJQ1A0/jkN/DggxX4OpM6QYhL0nokzWFVK3wRdX9+qfetd6Mb8komZtZfFI2qZIjEm0RKEwPXzZtRWYTNjrCRhH6VM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751640747; h=Content-Transfer-Encoding:Cc:Cc: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; bh=FEPGNQQvQr3Cijwb3PZO1i8kaDuvxvDoph9ofBlPEBQ=; b=I2rBbCaHpgCQ+Qqey6aNJvygFUxtoAdROfrJEuZ761DJwu1XzFfopProxANp5uJGx5DBfuDM83Dm2Dgqcj7mO1Lz3DBqIQtR4HJaHxY+nNG2vROngdEGyx7GfUr9Dp3pNPwCTue4RjssidYlwcmECIHQFxF+cGtq8EMTUqt5B2U= 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 1751640746825311.57051320200003; Fri, 4 Jul 2025 07:52:26 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhR7-0005qO-R5; Fri, 04 Jul 2025 10:30: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 1uXhLu-00047J-SG for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:27 -0400 Received: from mail-oo1-xc33.google.com ([2607:f8b0:4864:20::c33]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhLo-0007w2-6v for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:20 -0400 Received: by mail-oo1-xc33.google.com with SMTP id 006d021491bc7-6119b103132so678366eaf.1 for ; Fri, 04 Jul 2025 07:25:12 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 006d021491bc7-6138e5ac5eesm310233eaf.29.2025.07.04.07.25.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:25:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639112; x=1752243912; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=FEPGNQQvQr3Cijwb3PZO1i8kaDuvxvDoph9ofBlPEBQ=; b=nP7ucBlwrfjifp1Y08U5WLFITh5/ViY3vUExFaWg0JiEdbzMxUH31Ap7I+0YiDa2qx DXJLUfoJiNYXpbwzRpRMQmUEcVSbEngbTfvylERTsrQi7xRS+mYsVfb9LMzmclw/3cLb Grjb1kzH06JHjaNV5YUwvVPEz1hRo9yowghWvvXwQhxSugA7OBQSttWhmhMaW8XImTCl hLW1xEcq8llXNJx46OpG5VewZGoXkInleH8BUGBpeU9Iy47IRpjf2+OlEvCCh99QLG7U EzCyQKBuuev8DywSiljHmf6lhmcOTD1oUP/KpwEkKokIMSVHfknzjKc8U6vMUQ5Z8Jmu Qw5w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639112; x=1752243912; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=FEPGNQQvQr3Cijwb3PZO1i8kaDuvxvDoph9ofBlPEBQ=; b=UQvK2P4BZFPzJ3HIn7sbmHHw5GD17263jeLY6NoAZsfbgxyxONngaGjZHWQcfuUZxO iqL49Rx4tILxmszsfVZvrHGFsMrWr9gx4WCSzEwmFo/qLr0VcArjWIiu7k9OrtU5nsEJ rMyegsbGteES8Tlz3ZJFkcT7piLX70/F2AiGGIcbfaq2euiZFSl2Flj5mXa9O7T3WS3F 6fca7cU6/74URPiSZR2J8Ahsns0189Bx8b+qmiHGb0PWip/bGT0y+X+MtD+ZQh+ohOoT JvDtB9uiQO6IPBCGRsWMUN/3344usctnYvyivn1bZpZpHNVkPVvbYZzFnat9kRUuG2oV V6ag== X-Gm-Message-State: AOJu0YzpBhrOBqePTvId7GCOnCNX/x5JjYB9O9Y5SYkT19+rH5QyOz6c d06/vNbDtW+2uoNaoKerfr+J+GVF432N48HK1gny6hOT6Yf+IQMkZnoUNxUTjGFisFs8q4MvrdJ hWRg+t/E= X-Gm-Gg: ASbGnctPUkI1OMwrIVL9CWtVM4qfeZA1ALp9kGuHXUMsbdoeBWhMU/Mo/OFooA3FrvG 6rXUzgBGymU3znrx36bS+V9t+aNDcjqsBvYveQgZV0OTRG8zYj45EjcCujkFJPoFzOcTDY8vYdz KS3MrZIrQ2C+4nYMn/QWfNUFjSL070L/rMhjHy6suqKrUNO3Y+KWwobst7u1xu85rkIP0vas+1W A5hftZALDxsBn/4Mdj3Hi6DS0vhXNLcrk+nkPUlgoLW4BKxfd3CaB/W3kQKtAWGi1IguqtqAgzd ZTr2OyLv1HdxcujmARMvJiV40l3/7vnpUq4FAWz99u3Lx8e2jODQUhHDF+/jYgf/L8tjVS25FGN o2LEStoQhZwBAVfamsgO8mmyI8R6Xww6bbXkfGJSZ1vlxsfc4 X-Google-Smtp-Source: AGHT+IF4ix8qlJuCq2JwXPW7WCjeHqXkT6ut0VKzowLjJ4AWhy12NrJa+4gqHne6hp28F/E6KSVuJQ== X-Received: by 2002:a05:6820:1693:b0:611:5a9e:51c4 with SMTP id 006d021491bc7-6138ecb5b6cmr2400789eaf.4.1751639111758; Fri, 04 Jul 2025 07:25:11 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 053/108] target/arm: Implement SME2 FCVT (widening), FCVTL Date: Fri, 4 Jul 2025 08:20:16 -0600 Message-ID: <20250704142112.1018902-54-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::c33; envelope-from=richard.henderson@linaro.org; helo=mail-oo1-xc33.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751640748262116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/helper-sme.h | 2 ++ target/arm/tcg/vec_internal.h | 1 + target/arm/tcg/sme_helper.c | 45 ++++++++++++++++++++++++++++++++++ target/arm/tcg/sve_helper.c | 2 +- target/arm/tcg/translate-sme.c | 5 ++++ target/arm/tcg/sme.decode | 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 97e70959e8..be4621f2d9 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 c8199a3ef8..bbf76f63b1 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_helper.c b/target/arm/tcg/sme_helper.c index d97afdb69c..c696246d15 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 b522ddaf7c..4f12723afe 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 10e5b77040..d6167eafe1 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) diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 831179c0ee..5100ebaeba 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751640606; cv=none; d=zohomail.com; s=zohoarc; b=SVd4UpgEEsDhIGMR87TzV6xwD/A/1+H/Xozl2sWvbmpov7bHEWI0/NsLjblFE6wOBl88DYxNEz+11kbBIBRa0gLo7d/YRV8hjfsuQxww/vvYnaSfY/5sDfXl/6vKoiTioJ1BF8oaAmWzOPxkY2KttJxXTX39TZUBm8EdkoO6K7U= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751640606; h=Content-Transfer-Encoding:Cc:Cc: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; bh=NlTOBE4Jn2fkd9net09wcfWNBe1xruDmY2EOcz8YZIc=; b=hCPlesojRb1HIOdofnpBnZW84b1zLpMslcKwwSshuWj11zxTFW6C4XzwN6MRdasw76YYflVqgdV3Iqs7ZsaAna363g9pXpVCD0KQrJ6WgOHfjlpPuw34W0uL+p6gbZuyikXu05qjy7BTAClALOIWoJYsciWuLuEGk6Mni7g/KN0= 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 1751640606869389.9363098593004; Fri, 4 Jul 2025 07:50:06 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhQJ-00048d-60; Fri, 04 Jul 2025 10:29: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 1uXhLu-00046b-KH for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:27 -0400 Received: from mail-oo1-xc29.google.com ([2607:f8b0:4864:20::c29]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhLo-0007wY-85 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:20 -0400 Received: by mail-oo1-xc29.google.com with SMTP id 006d021491bc7-60bd30dd387so544883eaf.3 for ; Fri, 04 Jul 2025 07:25:13 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 006d021491bc7-6138e5ac5eesm310233eaf.29.2025.07.04.07.25.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:25:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639112; x=1752243912; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=NlTOBE4Jn2fkd9net09wcfWNBe1xruDmY2EOcz8YZIc=; b=hxI7lAi0QAJRML5nQfJ21KiHb54pbfqkxdPFyhc/P/8K8cbuwqmP1gpdPAFch7E6Tb ftYwLBxQnwN0nWlfKieq06qRHkC463dJzb2twig6b4d9vO4D5eC8w+O6wy7P5tyLSf3f YpZvphJuOs/N6ZC1NyRfpj4AeOb3W6/HhLdEt3SRXR/MFIRIFjk4djM4FOgP5rmeuyuS jMmYsn0b3erSH+I3/ao+4j92nta/KHm1HfzvpAFYR4qqAismAO4yrDauJ6bKZg2aRSrF RUZj/0L14aHF40RiOzdWTWJo82w3tjDJvZLE7Q911eSTmCk+eeDNcRHLlrwSHGxfPMRT T5Pg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639112; x=1752243912; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=NlTOBE4Jn2fkd9net09wcfWNBe1xruDmY2EOcz8YZIc=; b=vpeikXSRhGFXw8/iABnjk9jcUMjAoJP1lgRNI3yZXgGyv/101Xpjqyb2DegyDTy/N7 xQoPYxQIhWCXtEmyvIQlENNQD75/6DMCx4e0lymmIv3fblZk2vvROgu4vTRaVOv5KGbU 6QUuk56hKHEOr6/IqDQ1rbSYVnuPBwiJ05zAzxpsIsXsupGZNJlgKxajgXQ0bKIKLbR6 YgIL0w8kPYW4K4NQuvlNVR5tUbxq+UZM6+i0tygMKNEhQSjR9H6/Rz0O7h9xc9z8wbvw rdEIR105ydzKPVCsBKnidNk3/f2SLsHKAPXyfVVg3xfr3SBHqkDg33ao1N01ZqUZbgVh 03aA== X-Gm-Message-State: AOJu0YzI43kdUc8VNrUg4Vei3lGxLfi3YcnzikUgay9mRdiAWmJ+EQlp bmho/yjQiFu5ToRwpjXTlMSDd5G3jDeMC+bkO/d1K+SoOomza2fBDzSa5ZKvbUsP87nLh5HXe+z Z22SnTCI= X-Gm-Gg: ASbGncuc0fte5QSy4GraGcclkMD3BFEA5UoWXG2QWzr+2YDFoQCmdfJjvS75wG2eug4 tR8UV/IAfUo2YTKZtpgZsbB4b0aS0o95Cwlr9SBdwKboHXvA5rD1F9ADE7ETEr//B1+L8HshuwU e7rpdaCOoeYhyuIHkkkMrHgFe5CGRMGtYwKNhPXQv1hEQ2vDztyeP3dsCQ4BfQueGJ2h4oh0iqw x/j+tWr1EzmybbMsS9cJpRWEEZLarLSPXE905E06JpTLfOi3OMo2HVRikgNzD6RMlAV8jrTfZjv BJPsFuKDyIXoIr3Go0nDA9u1u05DiYxnGswElZPAWXmxrZ0NcY/vIJWkB5m400/GDu4lfTXWLUM NH5I4mLZLpsu42c2c0RtMiZiwTtXmRBnMjAJBJEj/4tCSZRWG X-Google-Smtp-Source: AGHT+IG5Klib1K5yEgWNleUK/rYnABe6JW19q3lqBilYNWqKZhDhfnehGQfEPrB/viKXzng1v9fVVA== X-Received: by 2002:a05:6820:818f:b0:611:bdaa:5b01 with SMTP id 006d021491bc7-6138fdb94c0mr2128064eaf.6.1751639112542; Fri, 04 Jul 2025 07:25:12 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 054/108] target/arm: Implement SME2 FCVTZS, FCVTZU Date: Fri, 4 Jul 2025 08:20:17 -0600 Message-ID: <20250704142112.1018902-55-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::c29; envelope-from=richard.henderson@linaro.org; helo=mail-oo1-xc29.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751640608596116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/translate-sme.c | 5 +++++ target/arm/tcg/sme.decode | 9 +++++++++ 2 files changed, 14 insertions(+) diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index d6167eafe1..3bf2b6935f 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) diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 5100ebaeba..79df2dcd2b 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751641136; cv=none; d=zohomail.com; s=zohoarc; b=SwB6leJlgyfdQz7efxJ2ZDS2r8OIghmtCgP4lV6LKyOeHh6zB9qKw+Kq+gQf4EmcdyG81DiyDj4cERm9hlzyQkxIXVVnwCEBq7kKv76YEaJXV5wiR6qIg/ns2EUsxO26qqFOOf4ANTiYngJdXP79Qy5QCXTSxxBlj5Edfvzm1mo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751641136; h=Content-Transfer-Encoding:Cc:Cc: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; bh=61hUKPP4NzlChuyDFmm/IMVLnPZIGc8U0gNoQgzlADg=; b=f5fh7EeJ3IKWPBAThK+sk8lMGjqzl6Gi1MPQuVyXjh1dOyMzH2skbDj4YtqGGndO2TsfLwDbqmTnqvnvvhDs5iQcOisMTAOWSVA8m00hhcoxqlYW/9/IyKUei3OorAF0b9Oy96cvYCCi437vkEvhGzjGUm3k6j95jJJFZiT0ZfY= 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 1751641136539847.4808101278625; Fri, 4 Jul 2025 07:58:56 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhPt-0003oi-NB; Fri, 04 Jul 2025 10:29: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 1uXhLu-00046X-IW for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:27 -0400 Received: from mail-oo1-xc2e.google.com ([2607:f8b0:4864:20::c2e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhLn-0007xk-WF for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:20 -0400 Received: by mail-oo1-xc2e.google.com with SMTP id 006d021491bc7-6116d9bb6ecso676353eaf.3 for ; Fri, 04 Jul 2025 07:25:14 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 006d021491bc7-6138e5ac5eesm310233eaf.29.2025.07.04.07.25.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:25:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639114; x=1752243914; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=61hUKPP4NzlChuyDFmm/IMVLnPZIGc8U0gNoQgzlADg=; b=YDkPtjI1Qo9twiZFFyVnuuawQUwA0ncqd5q7cghQMU6XvFksBriHHz+BMiDWGdFD+z +BFhSlTBpsvcZtt3ma4NDDooUTgSnW9wNOpSmjULXmcskayOlu+MiubyCNyYCcAd7iXd zmukG443XvApbN+ifWXvYT2CXrIVwiOeoDXcihBJ0DGbJsrqD79eVCGS6P13FBnwYM4t qX0EThneZ00N1zrQLt8nHv4FZLjv7aTej0tbufqpGjpRQTUJEIgsqDm8pD6/5D7UW33o rI9kthq1qxpo++tB3JoHFwcEuYVSgXWMAgoYoYYIQwgp3BRubt7/pVc2xO/Vf/nI2Omt Oz1Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639114; x=1752243914; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=61hUKPP4NzlChuyDFmm/IMVLnPZIGc8U0gNoQgzlADg=; b=waZCTLLdE71h+yfmhoRHQC0tu9WMg1WnzUWa9ce6j1LpmKIX+bn21vuQqqwcSjnSlQ Vo28Nu+jjTOT7LB4EceKprWdrrYmscWwTpl+k5X65nmAVjX5WweY8EMbwpm5fmTwSlKf jV4E2ArmfHqNWhGx4OuhtlNMwZWNF3MbbxzlbnnGPc0p9OD9Mja+zK/x2CyGwgsxbSZP pH4qwe5n2QkemlOwujTV4vD+hN0VprjU/3n1WHr6+hOZTfvViqnYAq7k8TOTdJzwKhMn 1fV/TZlIbi27VBDDCcaJLzHPpi9Wwvh5E59oduat46GEU3KFLQCtryO7fsKs8Q4sc7Ps xDhg== X-Gm-Message-State: AOJu0Yz7nJe1dJmd2Om4ZO733FR0ZbBIAGJsZKimmRwEKPbnDNFMezhj U7egRlIndjHab9rzfYRS//dNcWuLw010hRHQZVQ+xt+t2mhEm/kAcm1g6sb85b7c0kTkhEBZYTg uvpSHm9M= X-Gm-Gg: ASbGnctwm2JCcrZxIxhAMeclUbmDVjApkRc71/c/ENmGN01H6M5+mwJpnOuVDR0j7zx OsLJmd0E4TkydFnT1Y2Q3DtgTKVfURCZdyK7evNidDdhvf7FOF2y0fvICX9M+mDX24M+tkf+OCq n4RQJY6/8UGtTA/pSqMfRlEFXq3lXpf/0ypSzIVz75zyzPffAarEED/XTI3Xa1hXx+f3Ltz/oxE v+qF9i0kK2NdLhMa3s4I7Zk7jE8uzr6V1tInpbuwm4LLOGEvwqF3iqDEVUNRxLdZJGdNl+h0wsM bpZQAejWVvPlAhpvDrxS+VryFZqKUyyjM/4Qxe9g+gLTpnUZLlaHq17geqnwaWw/dOfuFXtzObh faMYElFwZTjP1V1VY6R7dpnWQU2Bk5bgaYem+LCpYjFw8JOt9 X-Google-Smtp-Source: AGHT+IHHQ6Cdv++M4l+PRCGbRZoQEGYB5lx2t0bKDCpP3JF4u4aJJNW1Savx5tYqng8mI0GN21qZiw== X-Received: by 2002:a05:6871:8302:b0:2c2:3e24:9b54 with SMTP id 586e51a60fabf-2f796a5834cmr1688497fac.11.1751639113962; Fri, 04 Jul 2025 07:25:13 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 055/108] target/arm: Implement SME2 SCVTF, UCVTF Date: Fri, 4 Jul 2025 08:20:18 -0600 Message-ID: <20250704142112.1018902-56-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::c2e; envelope-from=richard.henderson@linaro.org; helo=mail-oo1-xc2e.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: 1751641138713116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/helper-sme.h | 2 ++ target/arm/tcg/sme_helper.c | 22 ++++++++++++++++++++++ target/arm/tcg/translate-sme.c | 5 +++++ target/arm/tcg/sme.decode | 5 +++++ 4 files changed, 34 insertions(+) diff --git a/target/arm/tcg/helper-sme.h b/target/arm/tcg/helper-sme.h index be4621f2d9..6314ad7e01 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_helper.c b/target/arm/tcg/sme_helper.c index c696246d15..d3841400ee 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 3bf2b6935f..dce3b56de2 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) diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 79df2dcd2b..449d97bd28 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751639605; cv=none; d=zohomail.com; s=zohoarc; b=WUvcqmwJ4PolIhjeFdV+ueK6X/91Ox9asLf0INlrKomGFUFQ5pb61JImLXmWnF9Hyux2Hd4UYNsYqdgGQw68C/RBsoMoqGuQ0uirsLmLEVYVlVsWSiaFVcq/hJTVvqcR0koyrhQ/5YM9iszUB9nIUwjQsYTSboc73Tz1Lz7dqVM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751639605; h=Content-Transfer-Encoding:Cc:Cc: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; bh=RMD+SlJ5VLnhq7YaYAJ7GNtxYCcTlcYxvxtAyCRLgqI=; b=O2RV/hr0oCePSCTbwJgxiL7XYjWMXlnYc/btY48pAK6mQhZCTyhW0B5HE/NGy99yIM8pjki1PRKwOatjd7MUDFYdSdiiOHtCThgg6fkbMEex7JZofVe4r94TAJqvfIlEZ/mEA1qRFOFUDo4JpHl71YwUff5311Mwe3W2CvJ2G64= 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 1751639605157437.2355365150985; Fri, 4 Jul 2025 07:33:25 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhR5-0005YN-6e; Fri, 04 Jul 2025 10:30: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 1uXhLu-00047L-Vc for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:27 -0400 Received: from mail-oo1-xc29.google.com ([2607:f8b0:4864:20::c29]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhLp-0007yg-FX for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:21 -0400 Received: by mail-oo1-xc29.google.com with SMTP id 006d021491bc7-6113e68da82so515932eaf.1 for ; Fri, 04 Jul 2025 07:25:17 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 006d021491bc7-6138e5ac5eesm310233eaf.29.2025.07.04.07.25.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:25:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639115; x=1752243915; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=RMD+SlJ5VLnhq7YaYAJ7GNtxYCcTlcYxvxtAyCRLgqI=; b=w6qNUa4eSFR8tivRRqtZHWh6q+jC0EQQ534B4s5m5E5kgRZWQQXhTgH4JINW2VbsOz egChBJdwQGMB2aQBkxbdk7S7abDpOHjOAMSqOvTYoyHHhaUSyiyagOzIohfn9iMswYfm k/Rhw4ZULMZUsDiuAF5Js0mFv16O3YWVDiH95Ykt1p1nLihgoPVAbwcgcwpXabcJJbHq 6GRAIBEzdn3K7eFAdFQ31jn0tJqfyyMpdCWW6zY6yvfOCyRllrqPXR6Br5XsZHRYZ27H xYvl9mwfNTDK1lEHlomkut1dE8cNrpvQjvXUKPhq6VdTWr1SA2TcyNci9sxPSYtY3AZj pKTA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639115; x=1752243915; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=RMD+SlJ5VLnhq7YaYAJ7GNtxYCcTlcYxvxtAyCRLgqI=; b=L3F/a4uKCWPTyNpBnMaxfBBpt8KFo/TnM5Tm3npGizw/Pq+FVxlf+qQPNYkbuWSm6n z2YSevpduICkSMTXj2jHcQW0jlvTZqjOzEsGNd2+4RrVd/sj8JV+6wCbGPfJp7H9eW3c w5hqaKsq4KzPclkDGLjH1rDVaKfZ5g9Aq67e01uc7MNpCbwA1JlI9wIvDbss0GswxMdW JLUeVrxYgGZUljayoYBhgE2udptiWABfP7zEVUOzzixXuWoPOz9CNa82Kez791Z/6FLL T+PYdzTyUyNIVxulwq2Fk6FgB9NapBBnQu+7rgWzniOO7xksx0Po0wF+t4DnyppW9wdu cN+g== X-Gm-Message-State: AOJu0YzQiE2IW1eHuYyMxzJA+IXDQ0ggPAjcU0wZtCGp1Kzc8ayJ0g1I 8yGj991jy6yTfd8OS2qcvjoPUcijPdHnPFid9rNhTJxnGw+XPe1zWNhP3oRHufs+2NvcUMBldnB g9mkcw/o= X-Gm-Gg: ASbGncs/2m7hq23DB0DT/e+lUxslcGD9qHC0KaViEpFIS9ssIYb9JiQRCk+XjWVsBKp 5Q89uQ63zKDj1/arSI+2iygQvra/M5SL/LoiMppsQrvI7H2Pi5HHaYmmbMvBiJbSuiblQhjomlH QBnVt4DrTydKv3GbyLRJMuTDO1CqF2p1h0J8coMFVWG8xYalj0CbvpA9rHWQfbC/0P5IhmxzJyb 63BG0UsNubFegaYm4GtIncEl/Tn9eIG44CmzqSdRbB9aUslHdCKBN9S9fTiWCNmyBXzJVyy6D/5 kXgGlhk9zBed4cpmXgt2jWaimp2+Tqx7VRQijEGyi0FmHrfzM88RYwgfgLsZ/goHzEdlZR7jZEO BvHbdanxiFEaBZMLMsECWyETzXyZPXUXiRcmK5bpNs9YVxc/d X-Google-Smtp-Source: AGHT+IFcEIMNZxb1tPArympAO3Z5+cDKGtBQuKomvcAjSYIrsiwkmzDj1pDOXzBQyR0BHUHQuWm2sQ== X-Received: by 2002:a05:6820:2018:b0:611:7385:77a0 with SMTP id 006d021491bc7-6139005ec2fmr1830608eaf.4.1751639115283; Fri, 04 Jul 2025 07:25:15 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 056/108] target/arm: Implement SME2 FRINTN, FRINTP, FRINTM, FRINTA Date: Fri, 4 Jul 2025 08:20:19 -0600 Message-ID: <20250704142112.1018902-57-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::c29; envelope-from=richard.henderson@linaro.org; helo=mail-oo1-xc29.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: 1751639605537116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/translate-sme.c | 9 +++++++++ target/arm/tcg/sme.decode | 9 +++++++++ 2 files changed, 18 insertions(+) diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index dce3b56de2..4fbc61ae27 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) diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 449d97bd28..9cc25622d4 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751640680; cv=none; d=zohomail.com; s=zohoarc; b=LGM0CNdzLR7O6xWmJP73/I1vc+r4Ux078U4WbxKVUcGNqcCQ8IxKwo+cX9SNiRm50IccrF++B9/DF5vRRCZTqiquMoeQ3FgnBoM05RITyhpu14ShkFm3CJDZ+YHHPsic+jUu0ws8Z0D4nw5/491AZqrbIhCNrL71o8lxF6odlrs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751640680; h=Content-Transfer-Encoding:Cc:Cc: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; bh=EPqD2WiuW/V5KwVpgPbT8/RYmpheRb4cRCRm2q9oZgY=; b=Q799waiiQi7mNaGRPFj/Yd/8fK/yjZtQ7UcjMnKSmTIX/cJo38MhwpyFtb4t8+DaMSO5BBXHEIcCtVJxzsnwznjW7lwtifj61rA61CvAmxdVSALHcQdeXTZTaDaKaF0IAeinEmMuZJlfBsueuV3MgU/AfLW2mVrmfNkFGQHr+8o= 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 1751640680656506.68706727513734; Fri, 4 Jul 2025 07:51:20 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhOJ-0000v1-NV; Fri, 04 Jul 2025 10:27: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 1uXhLu-00047N-VD for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:27 -0400 Received: from mail-ot1-x329.google.com ([2607:f8b0: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 1uXhLp-0007zL-BY for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:21 -0400 Received: by mail-ot1-x329.google.com with SMTP id 46e09a7af769-73adf1a0c48so633255a34.2 for ; Fri, 04 Jul 2025 07:25:16 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 006d021491bc7-6138e5ac5eesm310233eaf.29.2025.07.04.07.25.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:25:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639116; x=1752243916; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=EPqD2WiuW/V5KwVpgPbT8/RYmpheRb4cRCRm2q9oZgY=; b=U0Jfm6fHXOqrmOwr1xzlhDe0kZm1+8roOngtNaw+f5bm+YmDKkuVx6i8WndnMrVd/R +4hEN2D3jsWA4gD+mrDHhEyF6qWcvIOnPhMt2aQp5+45hvCqXFP8uD+VdlkjJFzZAm9X R+L0DPL+vOCN6AtLM1kAK/bHYhjprByeRn1LgJ+tvgXznLAOnCVh+FuuzBLOEot6HX8k d1XqNWTjzR/PPkW21U/Wcuxm+LFS9JuBFUolmE2GtJUTgZi+6QIsoWJGq0dLCXy3qG/k y6TVzzqu5zX6PjrsZyDIyEdUJmAcLQS1U/hGhIj2FNzUl2U10YXgbRTj2Ud5POcrCand BzPg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639116; x=1752243916; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=EPqD2WiuW/V5KwVpgPbT8/RYmpheRb4cRCRm2q9oZgY=; b=fFNN5HdllQzJwrunx0xWjJyolxVVnFPgPrwb6NfYgQji0jgGgZfK71A+t4dk5Cpkhd +/dj33iaBlVwtipuipYyl2LOuUX4tUskKxm9QkryG/DeCyfx3yH1SJ7JgAhoz15L93UR fHzhcp4/+lcsocNONc8nEbywarZktFccbzX1+70P6rMPatEIxs9N1qY783ad0PCVYJVl bIx5McqAuOl2wdFOnAlOHdmUHgWwk0+DwVUHSV19lctQHZk8fVT85pPEUXnVHsMci9Qv /gnWKENzl0XwtukIKqGqXgzalG0rfdGXRKbkQBVy/Sd9od4L6UWZelq1d3MSHF87VfWf jvQg== X-Gm-Message-State: AOJu0YxNLKzPoJ6mH9o9mog+KJJIUejPx8Cbouhe7JqpxV9GBMPbU5lc tBnxWIkAU4E5xm5pluPUcVww7SZQ5Lb2tvsWiz/M2MIyuncO280W+Trys5xn3ZhAEymBa5B4Ofx lAOGYC/c= X-Gm-Gg: ASbGncudGNd3a65G4AhT2L+0x1pvSPJZRPkBlGfPb1BpZpY0bhVdtX0TuNFI1lXbLUr IBST5jmE6setJIx4txeGYKaqv/mLoJGmH0qqm9A82irAUUc94qhikFSb5AEgjUcADpzQHUFNAke NhYwX/tKZ6sUhiJb8rUEB++9qMneCsHhsj15vjh+ZoYysl4zXdyyAy8HZhsgY52ZYKl8WZgGmQF OjJbsdIWIgsxOH+e7hO3dg5/yNufnFPa+jezzyJaatOskyoJVL/2uB8bcAgLEx1utKRt1l+zemJ k/RcdRD+yQsyTKQfoHj9ufGns0zAyFDITLbzRwqXYdOiAAmfxdtB7uTvGw51PYfZDxv95FqUj+e TcC/55MMghpObBNTydBCAViT+yXxG/ztQ6uYmCfpBfuRAST6c X-Google-Smtp-Source: AGHT+IGtw0H22Mn4k3L8E7vdgGk4Lf4uZv3kBFruNzpLgZgBHF3TUMwyzLoW8ijGKlMkyVO9yh5xug== X-Received: by 2002:a05:6830:7101:b0:73a:9d3d:7bea with SMTP id 46e09a7af769-73ca677b66cmr1470667a34.24.1751639115997; Fri, 04 Jul 2025 07:25:15 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 057/108] target/arm: Introduce do_[us]sat_[bhs] macros Date: Fri, 4 Jul 2025 08:20:20 -0600 Message-ID: <20250704142112.1018902-58-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::329; envelope-from=richard.henderson@linaro.org; helo=mail-ot1-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: 1751640681710116600 Content-Type: text/plain; charset="utf-8" Inputs are a wider type of indeterminate sign. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- 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 bbf76f63b1..a1c10c60a1 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 Sat Dec 13 22:57:49 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=1751640003; cv=none; d=zohomail.com; s=zohoarc; b=RtxFE2mYuFM8agcp7k9GZMw3f2Xeh/dTCemI6c6IMUzRtHvqYkmu61XZsLRaKyUE1HyV6e6MYbomsGHCQrD60LuYhBccQL1eBBr/S6oulTTsREEJdo6W1xksw28thq0lwSnXhlZkZheVTydrHz2IHbIZ5TI9cX6ag/8jGMueG/g= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751640003; h=Content-Transfer-Encoding:Cc:Cc: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; bh=VyLvmUAwER2EHlgaJJwCQjTaDhs3vwDL2SICpR1u2ig=; b=MU6nBaM27zMPiAkDHvTJd52qtILxt+kST8m7pVJTlDzJpFrwxyQTRI/VVxOq9Fb26Y+jXvOvETQBSE6aQU8lIIodeIKQVLLpphwA0pLTlQKwRe0jokwQjKpBPe8/8WS/vyEQ1ZR8MhNhYT7i0hBFHPywUVA/q+ZYRBI7W45gLsI= 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 1751640002987356.0279378860897; Fri, 4 Jul 2025 07:40:02 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhQQ-0004LJ-Ci; Fri, 04 Jul 2025 10:30:05 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uXhLx-0004A3-0E for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:28 -0400 Received: from mail-oo1-xc2f.google.com ([2607:f8b0:4864:20::c2f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhLq-000807-Hs for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:23 -0400 Received: by mail-oo1-xc2f.google.com with SMTP id 006d021491bc7-61208b86da2so283808eaf.2 for ; Fri, 04 Jul 2025 07:25:17 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 006d021491bc7-6138e5ac5eesm310233eaf.29.2025.07.04.07.25.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:25:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639117; x=1752243917; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=VyLvmUAwER2EHlgaJJwCQjTaDhs3vwDL2SICpR1u2ig=; b=gmfp+URaKFgg0mtnp5ugCZWnPjYM1uAXwSQVNkjiRx1s+j67VNR0klurm7OvSzRy7u j/dPj0UAhfgYrBpxQiZFWnXpMrDCLKv9uiAGRDoeJTgybDtDLRJ66Visdr/ZmJeD7ajY DmFK8Mq0DE+QWS/P4CwruwqYIHfVwtz6lCVHPOTyjhaHO1riy1suirTA9ToLPTzXAjAB AERgluNp48Cu/N+A/nh30gTz6xpSBq6YMR61+NIo6fKMEZ72RWfp15OqzTwHoeVTKDyP vBQO10WC++eHNnyyRxvDKLfkBIYZ19d7KKu2q93Px0FEF2uZ7ALfB6IKRoPMSzLzwxob EnQw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639117; x=1752243917; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=VyLvmUAwER2EHlgaJJwCQjTaDhs3vwDL2SICpR1u2ig=; b=n0mTggr5O60GpaoSA30cCVfSU1T2sOil8cXZYkWmJbRkGIThp0nZdtMhn5i9YkicgZ /gtBIbyaRqMCStdNjkHKuhGmD7UFygL3XgU6BidxBgv7lZFtGb6KyPfgYEI8XOIbluaY lXv+/hyCnPOw9hRJzU7Gyr54xfp9von7kD0F2SsJXJDUuQ8mO/O96DgtfApejdy8zmN0 AoppA2+ngYtT97VuvRXpLF3bUc35Kixnk92MciA4dZ7c+YmXdbYijkWW5hJJ4mbXsvAb 31r92iVRSZbQJ+b9k8ojSqrIxsDbw2sxCLZ4r7G63zbiF2Qc8lmYSu3nyMYWAfpqicl8 47yw== X-Gm-Message-State: AOJu0YzfsMCR/+2MIMHzziLt+XgAvrn3IBHc6dOw8PpMNi5Tj5n4q4T8 49V2HjI7RHRod0kPoejKoF7omB6SN+g0d1+Y76uxCmELK/zh5YaX64cEsnT4/xdrCgKe8fBJsNQ rVRjnC7Q= X-Gm-Gg: ASbGncsa+l8YkxwJ7ruG0v/isgUTNuK8oze0vPYoJbISpdmRuKvFwQ7YQCq/1HQZWx0 pwd805HIsLWYrOkY/cqcSyX2FMlgNEBgHH1d2GX1QBHol1uZDk9zzFj8B/jDa6z54v5ceh1wpwO 8D0S+M7AcrBqqY3OmxMu5pUIi8Kfg2jzhjRbCYOcOWI7+3J/wcusSMAVMQbgoGFkzLeFfS3Bdjy Ueau1V+jlkdoh4sfseMK/BFmJg3G+kzAV8D0ECHLRuwi+2/2Lw8oR/UEFK5rNl/tPmEapx3dPeM x1WtiznD4bHOiIxm8j5+4ZWec3P2ePTFbuguHBvZgD6fH1IuadGPs+Wf5Jd421i/20YvPfaEv5o w9mlOxsKkUgcXLz/57DfyMvgFMFby+UQLumSF5Jp4wW6izQCu X-Google-Smtp-Source: AGHT+IGUE2FgdRI5nnrEV9HyCDdg9bLjKaVbiTRVLXDDUtRr8qzFIcsLXck3j/Xw+a4f6Mrwy6D58w== X-Received: by 2002:a05:6820:2901:b0:610:fc12:cbb4 with SMTP id 006d021491bc7-6138ffbca71mr1811340eaf.1.1751639116858; Fri, 04 Jul 2025 07:25:16 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 058/108] target/arm: Use do_[us]sat_[bhs] in sve_helper.c Date: Fri, 4 Jul 2025 08:20:21 -0600 Message-ID: <20250704142112.1018902-59-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::c2f; envelope-from=richard.henderson@linaro.org; helo=mail-oo1-xc2f.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: 1751640004563116600 Content-Type: text/plain; charset="utf-8" Replace and remove do_sat_bhs. This avoids multiple repetitions of INT*_MIN/MAX. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- 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 4f12723afe..f9052f2164 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 Sat Dec 13 22:57:49 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=1751640019; cv=none; d=zohomail.com; s=zohoarc; b=MJHCRsHA5LPnoWKEKyQ2y/S2ZNOCSdcM6sIp8dmRrkj00zoBVtS321RR9ImaBHOPyYOPnzbzISHvsAm7fP/8UE8RlUyUD+b4qLI9V0DCj8yNGYITEZgIdIeCuT0tlcQ7YeRI8ecx3mRrsEqMPQQIMEW/LPG9u+x5mW1EV2pTKe8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751640019; h=Content-Transfer-Encoding:Cc:Cc: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; bh=k1G33WVqioRsrQWCp2/+ORoUwGCcrV2VANzEPAOaFnQ=; b=M189rx0Lp3THI9hqNGxQiW1NAr6/F6avXv0zCSgLETRYIF6ybFq0B4IGsublJuJSQ81ndrYWkozxo0zj5c4xXenCwMNv/X7kE4k3UrCsBFeHS6AuANKRbAknGEnmq2pDf4SPPKrgmbrfzPL7fR+gydeR98DIuPgCyGDmtTuGyJI= 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 1751640019885947.520136774698; Fri, 4 Jul 2025 07:40:19 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhR2-00052f-Cb; Fri, 04 Jul 2025 10:30: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 1uXhM0-0004KX-9V for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:32 -0400 Received: from mail-oo1-xc33.google.com ([2607:f8b0:4864:20::c33]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhLr-00080X-Rn for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:27 -0400 Received: by mail-oo1-xc33.google.com with SMTP id 006d021491bc7-6119b103132so678424eaf.1 for ; Fri, 04 Jul 2025 07:25:18 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 006d021491bc7-6138e5ac5eesm310233eaf.29.2025.07.04.07.25.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:25:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639118; x=1752243918; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=k1G33WVqioRsrQWCp2/+ORoUwGCcrV2VANzEPAOaFnQ=; b=orn8rg40PojtyDSbHduKZlcZF4z2nidZ/n2h0N7wGnohpqcm11uURc3m290RQG9aMQ Z07k4LFND3wkXbPRfJQjH/lYPk/rGn3dgtmnBV8Izbzn0Tef6MnZoCzvLoFlJHHoyxZU /gzc8wsnpR6/FLybtWV20q1UuL/L/F1MDEz/uuW1OG/uCQW3qJmBHiLdBPiMFLI6Ii1X HHC95gA7nw1aik2v2GAv1v3jarpquM6hTgXiK7s/s2jl+QtmJJE+ydTtxanb1H4J3lzO i2kzuCkDORklsUtY8es0LCTkdya5g1nbR1gms+ZBMz+g8Tfw/yIAX7nBTyltBGaF/xsK /uPA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639118; x=1752243918; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=k1G33WVqioRsrQWCp2/+ORoUwGCcrV2VANzEPAOaFnQ=; b=e5Lmux9CGGwJCroMjKOCG8Tp/s8aUO5xOd8+sdPE8Gk86yZNXnhIijTHEAlmJNveW9 5LvFtIAV66vt+joVaj0BZ8cvMpmrsjRrKk9VBlIiU68doB8i7AWH+n3Dzuvc8Bf2nvht qOI7R33m5IWbmnaFQoHNiBRZSXHTX1Ki4Lz4iFSdxz/9pFC58IfozjosPcYgBf0ttOEm mrnIOdI31A78LCPj3Gvj7D6HbYL+YksU5wi/EMVXQPF1jp0qMI43RdS2Tq/KK66HYUNx FvvD2iBLf1/d4Oh1uL0xTrXIdX/5g6Pf3ThMDCblAs4z3QpTRBZUTTwo3cjHxqI4RKDN 5+2w== X-Gm-Message-State: AOJu0Yz1yHXhNI1KQsf2kdPeOw8oZyTh9H12FoclLZzIpf8egwm45JPg JFbTQVItLLtqlMkJsjoQCNzqJFjvQV89za4qo4iVemvNcrXbvLWYJzbYJ+LMuLLmrqJeooAOxJe gR5FE/JA= X-Gm-Gg: ASbGnct2CRSuqa0L0xJhbBLWMK0kaEc0GvKtEl/yxTCZb3JWEb0FWeFR81w0m1V3idE a+jztWq7dnIXH1DwBRxiu2iV0o1Cqqd/z+qwOvOAmdwUkAJ0ecyyeziyv89emlElj834OFz6LRw LYUejtyqAVYvElM2kiwoiP1KRNY6RigmtMn/32ycnKT32HKaSVJI54ByTquyxJ3guPVOiQov/fD /3r2YpTh3jACjOTxOrNIbr0Mvgx3kFtuRdxrkogwRuQXG9AmH+u23bokfAKgl4OfiC9Tw8Cjo8D i98pJf16d9OIHi8lFE5b3lWXFIfp7nkyAwcyHa8mJumAwBboAZrwbskPFob14rME5dm31bPpk9K 4pf/p1uoeZarszcQ+B+1igQEQ98YreImc5tBWSuuOVI7E/p6D X-Google-Smtp-Source: AGHT+IF+wJ8d64IfdXn6miLUioHw+VVryS6GN9I1sU28HDaI8ZaWElyHnsgaG+Kk34ehL6D2FdRDYA== X-Received: by 2002:a05:6820:310b:b0:611:adce:2cb4 with SMTP id 006d021491bc7-6138fa1f981mr2087521eaf.3.1751639117891; Fri, 04 Jul 2025 07:25:17 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 059/108] target/arm: Implement SME2 SQCVT, UQCVT, SQCVTU Date: Fri, 4 Jul 2025 08:20:22 -0600 Message-ID: <20250704142112.1018902-60-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::c33; envelope-from=richard.henderson@linaro.org; helo=mail-oo1-xc33.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: 1751640020797116600 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell --- target/arm/tcg/helper-sme.h | 20 ++++++ target/arm/tcg/sme_helper.c | 116 +++++++++++++++++++++++++++++++++ target/arm/tcg/translate-sme.c | 35 ++++++++++ target/arm/tcg/sme.decode | 22 +++++++ 4 files changed, 193 insertions(+) diff --git a/target/arm/tcg/helper-sme.h b/target/arm/tcg/helper-sme.h index 6314ad7e01..792b993695 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_helper.c b/target/arm/tcg/sme_helper.c index d3841400ee..094a1e57f3 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 4fbc61ae27..dd1a6668fb 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) diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 9cc25622d4..e005f6e6ed 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751640329; cv=none; d=zohomail.com; s=zohoarc; b=iaDw6HfnHL6XXN6kw8ZHx/zs3jvi+MPuvhCSlw3JX4CdTZoibLTvcKhQL3HxLqaTGnMU/hkSGtNScqQfWQM1n/NoEUTU63Q5Edo3eff0tp8zGrRYRAlnjQXFGdOqduur1B6VUA5iRalLs6nvBDKg8x8Vmj8vzmW7qu7rQhGLCRo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751640329; h=Content-Transfer-Encoding:Cc:Cc: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; bh=dsYysXcZkima1baFMVzzoBbLhp7LXwciifgJtCyU2bM=; b=O5ZOyY6Vy7GDb7vAedG2SPnvS8JfRpUnHlOlNEZRrozhqlx/wJQOQLaYO1lNngZOwSDdOS7ptKu5BQNEfT3vZIu5GlJeD55DCFfd5e06a2wRh4bDhFkX43Sl6ElFG8SOZKeTD2gz8Hsy9Mxy3zHsKZbbjEkKhsm4Q3KzTPOqOsI= 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 1751640329625194.3558423368106; Fri, 4 Jul 2025 07:45:29 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhRD-0006WJ-Dg; Fri, 04 Jul 2025 10:30: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 1uXhLz-0004D6-PQ for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:31 -0400 Received: from mail-ot1-x329.google.com ([2607:f8b0: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 1uXhLt-000813-Gd for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:25 -0400 Received: by mail-ot1-x329.google.com with SMTP id 46e09a7af769-73ac40e810eso292191a34.1 for ; Fri, 04 Jul 2025 07:25:20 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 006d021491bc7-6138e5ac5eesm310233eaf.29.2025.07.04.07.25.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:25:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639119; x=1752243919; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=dsYysXcZkima1baFMVzzoBbLhp7LXwciifgJtCyU2bM=; b=NnCcRML0OUrZ/4NC7ken683dwwknMB8LdTDD6jl5/FUwMa+ep16ZzjGIgzX2wasm/v wYcgzb75n/Q0LsTI6TljVzy0Cf8GrFie55tykzo6rb8/SSQuYAypzip1ZYbzFlRHPqQd CtXmGTmdmcFv5XvoIw7KUdc/xpuzU5kB37YMVJqzZEW9RUxF3pVagTqUxlTknKJEh/PK t6ANMqrJiLHHxvyYXhOdORrNLGwxzNq1jiRpbTEcdCFd/KDpfcERXjaCLVluUypttDlN a+A2LmjYZN7ZPKS01GkPqT79MmN60NxYd9Y4NObsj4vRPUMWyK0I6R8Ag/n+W4uY6T2O TqVg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639119; x=1752243919; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=dsYysXcZkima1baFMVzzoBbLhp7LXwciifgJtCyU2bM=; b=HIs5qhElLPbXPOsQgSXRUZ37Tu9noVQi/yrjOYI3RY2aikoMAKeq5VTeQrXuHT5lNg AZLO6zO6Y66GuTfSt4k0j+ud2+TtYB4Bc38BbcFcneIWop0fbIXvQW8QAzCe+FvlXiIV NMrb7Y9yQgkrnHqcRrPXpNlawapLWGrg4Qo7jcWC9am/9OlWkj/NU9Kv4NYs2k7DvKca QOetZLj3rPcmXxL0nIa9i+LpPJUxHMDH9ijww7LxSACbAQBfrtpu2H2Gr6wpP6BS/heH uXLOMolQlM60v2DlNlG8/d3TuP2jYv6EAr11ByVys930sx1OE3ojjsTMBS3fgeE+QlAR 0zig== X-Gm-Message-State: AOJu0YzRl4Af8SKPgkV0xEO0AtGc6tsTMHOx0pmhEQQpwrvTGph2nvNu ahU5d6dLdsU1dLiTwdL4K8Lr6YWEsu9IyILea56rX1jodPhoZzB2ubU8OZ/ivqfXTiPRthOoZto Gc3F/JCs= X-Gm-Gg: ASbGncvCnWj6e0zeREoHNsubbPv2EpI3SdkrNcrhU4tfEtxCe8YZO8QtOODB9dWCfJ7 LFyKD4yYgkx9Sfb2l6u0krE6RsojwWrJcurxZad0zmFmnkIT0I801rfRGagI4jAdxbIzPD76CmC W5XwxGRVfd7j8had8sleQdbOylYtnaSaeh25chanqvB4JYwrh46Io65NX/XRuKfG4CRh7OnxLSe Po9KiR9bYBiZVg28sw+ozZyyKU49TGy8O+mr+KWnlaVuNsmbUfxUNVI911b3qxS1KYaOkbKTjjS ivaMmWIsIipL+OSmDfF/ec168BNAnr3yg1NNZF4M/0GzovVMkTyCijn0Rzu3dDjyNFkH+6aeTWB MMikWk+q2SFxRhZ1baenYztv41DN0Z11vFEW6/VkUHetTGkTX/qZQ5lC/Aqg= X-Google-Smtp-Source: AGHT+IGLMzxa9gVTE9ERu0S/tPUUGSzPTgOY+hJVFIaWVJpS8oZM4gNWmXV0ywpqgGQUycVanpeLHA== X-Received: by 2002:a05:6830:71a1:b0:727:36a0:a2ae with SMTP id 46e09a7af769-73ca49ec32bmr1209047a34.14.1751639119127; Fri, 04 Jul 2025 07:25:19 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 060/108] target/arm: Implement SQCVTN, UQCVTN, SQCVTUN for SME2/SVE2p1 Date: Fri, 4 Jul 2025 08:20:23 -0600 Message-ID: <20250704142112.1018902-61-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::329; envelope-from=richard.henderson@linaro.org; helo=mail-ot1-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: 1751640330657116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/translate-sve.c | 7 +++++++ target/arm/tcg/sve.decode | 20 ++++++++++++++++---- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/target/arm/tcg/translate-sve.c b/target/arm/tcg/translate-sve.c index 10261e25f9..ac4dc7db46 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) diff --git a/target/arm/tcg/sve.decode b/target/arm/tcg/sve.decode index 83c259def6..f808362f23 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751640911; cv=none; d=zohomail.com; s=zohoarc; b=XXLw83pbQTFD4E9OB7VCXFtFau5LsX5cRu7uk9ve3T9HNPtt2P9tIPaPAX78aaFJWIbm43ldUfE/VzPOTPq/C0S74/VWdxBeC4MCmJ0ON2teEWViJk1xKiFLxn1TqpGZvYuyrlihbfzK1coTTN/YOi9k/ZEcysODMcHUAlcINBE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751640911; h=Content-Transfer-Encoding:Cc:Cc: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; bh=tf60mUQtgR/yZMmICL9C93f1NUzvXbd+D0K+j9YzN7Y=; b=dubhnSqCvKSHwhx/+i4wyXpdKljJNYYC/TE2Eh5/2ZGRVZ3A08RZs3SBfwPwdjwaec1edffaXJ4gyJxEriDqO6yEhwfXa+ES7dscXjhtoNnQUeAApA3analVa1UZOiwo97AQfESi4ssQCSwcRg8suZYDctBjcAcrkgMkMS0HELI= 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 1751640911794838.8033076727427; Fri, 4 Jul 2025 07:55:11 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhR7-0005pz-Pi; Fri, 04 Jul 2025 10:30: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 1uXhM0-0004Mf-SP for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:32 -0400 Received: from mail-oo1-xc29.google.com ([2607:f8b0:4864:20::c29]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhLu-00081g-9Q for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:28 -0400 Received: by mail-oo1-xc29.google.com with SMTP id 006d021491bc7-60f0a92391bso558927eaf.0 for ; Fri, 04 Jul 2025 07:25:20 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 006d021491bc7-6138e5ac5eesm310233eaf.29.2025.07.04.07.25.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:25:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639120; x=1752243920; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=tf60mUQtgR/yZMmICL9C93f1NUzvXbd+D0K+j9YzN7Y=; b=FQDd99NnLkjam5+8HKs211vB45ieYJHWGkHWhis9we8alZYFPb4J7izWCuZVQHFvTz IcE1F7sICaEOyp6aKLqo6F8+3Z4xheY3/1MVniqiaekhcwleK/k5OCtNZtSoaHA+Vjnr Sq4+VixwZ3DoMq1QxY/YMSxE57VnOFCpa6T/3Afy5ICJTadBYSrBLef6W2donCdOjaJd b6/+NWsog3mfUIFW1vpHlqXY98wn9te8kR3mVGDi4pGD5Y22cxdFnpdn+fc5bC0lfhxc XeFyURr/u1dF2FFjU5DAL113A86oKMdv6S1VILSGW+3zoILjnzHmbo3+Zdcpl1B6oky1 YJCg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639120; x=1752243920; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=tf60mUQtgR/yZMmICL9C93f1NUzvXbd+D0K+j9YzN7Y=; b=go6q3a650Ofh54cdFwAC7eaTQOBCyLrc0q/oieUOElTAk2Zi4adtB/X4bxGXbNr7+l W9iSxN1kJM2vfk1/Qz/PnoZuuwx6/hzNHY+dvBJLnxJDbsyTouoosRLJVO2dLt1oEqC8 mfEuDT2hNcmvKERLmCSXjU+1EpTdbCOgiTocHCJ1eyIehD3sfg4kfru6ewOidJmIDBxi N/+M44i+dwB4tXfTQRpcI6bB7uq8ZwS9XWad//6Ne/vRurLtUjHN1Gd4ieHdP3iLBZB1 XujS7DQCgXo4Oo9kfAoX0G1/b4YofDjmnfVTzvIDw2EyRkKzO7UKi8O34pvgfb60LOgA dJ2A== X-Gm-Message-State: AOJu0Yyor/iyFKfQi0AtuBVqVMmKR0VQ1eq6ucF4z3XnnwqSwlEXv+h0 CPCjvQBqhQT6jIZ2f77hdyquLTU+DcEwkiLM884LhW7hUhM6ryhjPzMkg0N9SCGJv0xUXThTRU1 InX8kct0= X-Gm-Gg: ASbGncv7XD+bLNcS2+OEohPt5BSvu7ReTtej9HkdaXDvrX+c5KS+lLq/zJJ8URypd1f ZtIvPdOYTOpruz9TCS734rJG7E42P0R1Km+GDZsHBDZ7M0FGIFEoemWaSPARo8VVjU2ezVAyZvF QTgDSfzeYoVJYaa5588SwXxJnboyGPNU1qqlwPfayximct/1hkdtWrQoPVd7zXt+BKe4wcMe/C6 shXOrKSdxGUuT/ehDt/KbR0Xocfmhl8qQRKPi9U6ta6PHvkNorUl0l/Oz5w5OAQ54Q7eJisnEjp VdBnLspPJZJgGZHqK51tD/yuF9bhU+Xr262sQwz9+H3kWGxPQOlUAO4vA9Oqs0SdTZXAF1Qu+tc udlBJ2RtPKhpyVoSScLDTuci+cAwPkhsnkI5birQQ2TW9Mp23 X-Google-Smtp-Source: AGHT+IGVhKNE2nUcnWlop+1e+jW8vwhxSX/wFu88PLyuI/LjDbaVSfm1iuOVHHCwfiwAMjD0wiHGzw== X-Received: by 2002:a05:6820:188a:b0:611:a921:bfef with SMTP id 006d021491bc7-6138fdea0f0mr2095483eaf.8.1751639119909; Fri, 04 Jul 2025 07:25:19 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 061/108] target/arm: Implement SME2 SUNPK, UUNPK Date: Fri, 4 Jul 2025 08:20:24 -0600 Message-ID: <20250704142112.1018902-62-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::c29; envelope-from=richard.henderson@linaro.org; helo=mail-oo1-xc29.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751640912162116600 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell --- target/arm/tcg/helper-sme.h | 13 ++++++++++++ target/arm/tcg/sme_helper.c | 38 ++++++++++++++++++++++++++++++++++ target/arm/tcg/translate-sme.c | 16 ++++++++++++++ target/arm/tcg/sme.decode | 18 ++++++++++++++++ 4 files changed, 85 insertions(+) diff --git a/target/arm/tcg/helper-sme.h b/target/arm/tcg/helper-sme.h index 792b993695..893b23aa3b 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_helper.c b/target/arm/tcg/sme_helper.c index 094a1e57f3..ee4596e066 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 dd1a6668fb..b45e68750d 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) diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index e005f6e6ed..38c210cd4f 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751640737; cv=none; d=zohomail.com; s=zohoarc; b=Zd97x/22JpbN7VcTbusBtYqi9dUjst3r0ZtHDahLrxkQicPo917zr0UAopxb20Y1rvItD3hwbYxBVzApHFKGMBdAI2/ICLICk5kaUdKLrPY+xr1bc1wranLs6NEQXXazEeBjbct287Co6G1bc47zv49dinHsKdIePaM7zzhOcQE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751640737; h=Content-Transfer-Encoding:Cc:Cc: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; bh=N7XOMMIFTSKQBGT6FbweY3+4jI14Ld7/hjKCxCVbLuQ=; b=VgBwF5ZJGrIiufn+1ToHQbsa+FkZBGXInNVclwAUQSnDBjhh/ho9/hERWVuKadc+GWGIfwF0dV7kJJ/gKMIc3M09f78FGpwptC7GFr3hKpmpxvKzh+1PrXlTQAbWUhc9gK6IFM4hwrgGhed+odXiarnhrdOJQ4K8lDyqKbejby4= 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 1751640737096209.59282307529497; Fri, 4 Jul 2025 07:52:17 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhRX-0006rz-WD; Fri, 04 Jul 2025 10:31: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 1uXhM0-0004Mg-TE for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:32 -0400 Received: from mail-ot1-x32d.google.com ([2607:f8b0: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 1uXhLu-000827-Aa for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:28 -0400 Received: by mail-ot1-x32d.google.com with SMTP id 46e09a7af769-73a44512c8aso341107a34.0 for ; Fri, 04 Jul 2025 07:25:21 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 006d021491bc7-6138e5ac5eesm310233eaf.29.2025.07.04.07.25.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:25:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639121; x=1752243921; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=N7XOMMIFTSKQBGT6FbweY3+4jI14Ld7/hjKCxCVbLuQ=; b=ep53hufMun/kH/IlXixNfsSUTfp2vRoPdAntH9L5T+lSfGIUv1SXfPzW+6hJM3USyB ySzsVPnGXDPdfBnXEgz752JJEU+/tvFiK54m62a6XsL3/4boeL698OlIfwgRDWjMJYzz 6YBqpJ3zSiFNxrCLmRbrT7bnuSwS6WG6lIkCFBOcc0nmj7MnXSBmkio5bJbFDpFvsKqM w7wEtdyfapBy1xaqLsAcM6XQ32xpnbikgTNo2S28iamSQ+bwhkRmLSDpKeDA7A7fWWK0 kKKxTXOWNnRfiuGHfI0AXBNpbdZHa+dvo0LDYJjAMIS8SFlucpkqpvREOrsWXd/I3qJw kWCA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639121; x=1752243921; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=N7XOMMIFTSKQBGT6FbweY3+4jI14Ld7/hjKCxCVbLuQ=; b=xPPHDbNZu7/FAdfS8U/ytiXRRU/4MpVr/oZt988XEsnAoFS27ix9vSeQCdN60g5h6w 91PSKRMDEMoSYZ6anH0/poh7MEYwJnJVd8wgmvSuZteskmf+KbWAArDQaG7FtmF2/V2g Zpo2O2j6YU6WHBzCXuTsajH89dKu+NqlmkLqVKmbZ++z8JgfuR85VLIIhboiEUov7Y7p 7jM6HsbmJYnnsZNwdSiONIoLs75K/VHgarZun37TkyrFsJ/SpyNWmJCkhwnfSJxI9dwh F6gLyRgAiTmy3VRrbSpIamA8ZknHsinMU7HvdrEubupFf4ZIBC7z4w5djpR7yA/PF1E+ Ttyg== X-Gm-Message-State: AOJu0YwNGKPbwGPmJh54g7jWMdYahn2wBhsD6RrYReGCqpZ7kIxHHyDf UHNOEko95pAyyGa2BtntHbjpkmtYqQnn6TgNxLkZAmPIU2O3LIO/80Cq820lMWNymur1SG7PD0r wIb2XJkM= X-Gm-Gg: ASbGncu4nmpx+uJApS78EiO8+ISnQ6F9XHf1R9XH2y5G/5jiTp2uLQ43AAIU7LZ8AjE JXM9hzTZ8BefdAGHbLdNKtw1HzWY6zJ38ByLYz2ilIfHMWNxQWORWgeK/yi3N308pURpI+dJtUQ SXP78YFci+uYfVZEybOlX69QtEpueyAXZ0rE8CrSVovhfcr3FN0GRlu3j9f3pZNiak0MRUdqNYX nHrAV5Vah/Kl4LrW/2s4IuEKgks8LE56+KK779kjpouJlUOYLKWdZE9oIf+KhjfP3ZR0CAEwBPK SQs/XHux7gKsmKkXMPm8UMSkA//mJHI1wQSdHt9EazHvrGQD99XtubN7YYYfm66N8zRjs9JXRnC dy3GS2h/ub5q1C7R664GRsiN/PIDmBuTOftQf2w+ehcyF0AGNco85tPUF/t4= X-Google-Smtp-Source: AGHT+IELCeY8hxKWUV2rT7NKOJkAHaG1zUmi5s8PhdJ03FkHU9FDRA0hbMNxJRtgQugal2DNECahjg== X-Received: by 2002:a05:6830:4889:b0:73a:96e5:19cd with SMTP id 46e09a7af769-73ca48d5d17mr1677357a34.10.1751639120683; Fri, 04 Jul 2025 07:25:20 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 062/108] target/arm: Implement SME2 ZIP, UZP (four registers) Date: Fri, 4 Jul 2025 08:20:25 -0600 Message-ID: <20250704142112.1018902-63-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::32d; envelope-from=richard.henderson@linaro.org; helo=mail-ot1-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: 1751640738200116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/helper-sme.h | 12 ++++++ target/arm/tcg/sme_helper.c | 68 ++++++++++++++++++++++++++++++++++ target/arm/tcg/translate-sme.c | 39 +++++++++++++++++++ target/arm/tcg/sme.decode | 11 ++++++ 4 files changed, 130 insertions(+) diff --git a/target/arm/tcg/helper-sme.h b/target/arm/tcg/helper-sme.h index 893b23aa3b..7e21f1095a 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_helper.c b/target/arm/tcg/sme_helper.c index ee4596e066..4a05fff5fe 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 b45e68750d..de9545ee6d 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) diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 38c210cd4f..81783b4705 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751641015; cv=none; d=zohomail.com; s=zohoarc; b=PDba0HMLiuWVO9NF4Dw/KgrmX2RF5HSVVF5O/mgBnjm6NsJxakbtrSAqN01+/wehbb+H59+PGlCpApPsE0SHVt6QG6m5I/xkx56lIkeNTj0hJCHl2LFna2HyRN+VIfpp0odOyfioHqb/+iRCrvMOv1iDkE17VX4NTFtt6/6EckM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751641015; h=Content-Transfer-Encoding:Cc:Cc: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; bh=e72HPrwLrbdL1jX39eQb8H3bN7lS2PKV0Eo2nzZUj34=; b=iQ0U+jzMFZ8W1TtV5IE1TB33WFvAmRj1FRq9yhVhBd9wLTDKeoSZx5ANntiX5RKNTzMvBM2BQVMbltrwR2ySp06Zxq0kbAogCnVNV1lE4utTNfOavH1MRpxvgdNgFbuGOMw5fwPLnhseJ1o45g/80c1PjH5I07zZLVJxAwMOQ5Q= 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 1751641015220395.56326172007016; Fri, 4 Jul 2025 07:56:55 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhOa-0001lE-F0; Fri, 04 Jul 2025 10:28:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uXhM1-0004Oh-LK for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:32 -0400 Received: from mail-oo1-xc36.google.com ([2607:f8b0:4864:20::c36]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhLv-00082z-84 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:29 -0400 Received: by mail-oo1-xc36.google.com with SMTP id 006d021491bc7-61208b86da2so283837eaf.2 for ; Fri, 04 Jul 2025 07:25:22 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 006d021491bc7-6138e5ac5eesm310233eaf.29.2025.07.04.07.25.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:25:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639122; x=1752243922; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=e72HPrwLrbdL1jX39eQb8H3bN7lS2PKV0Eo2nzZUj34=; b=CnRhtyfUKAYMCFJnHcvwatmRobwlUO9nJrk53Ez213vK32NbDW8S7ZjZXfCUkTlvmZ n4EfWTD5TOhypx8tJA6jJNPoOpEN47h21FRxSzNWmFiD61RceEydec20fcLWCE1vFzUV DRUg29CrfoxXbwfn/6Z0A8MYGQvgHM7u7zghUYrAXGLkePh3Fr4NK3lS/UmwRsYVAQW1 ZdurxAnSz0LM4TQDUjjbkONtugS8H64nK0LgRxa4cLCHc1j1Y2tEA+uY1otVWwo2w42N 8UpGXnPcIZDEbg4e9TdmdR/qgw/WbI82MNdZ7Czt/hV7K0wE37aLNCRCYoSoWfD9g8dR J6ew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639122; x=1752243922; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=e72HPrwLrbdL1jX39eQb8H3bN7lS2PKV0Eo2nzZUj34=; b=cP9NnST29HW2uI7k1iyC1staArInlLDEnmeN9QnxEUr5PyyezfKqZZYNnzXhMXW8EK kfjTFN2fiuDv4/Ss2YJLSFz190zqRZg+F4962RCK7NUhmLiRUYLdvs32zbJDhf1+90zb EqBaNJaBvJxkq4QBV5ZHLEp6nCr0maNDTL8r/WTKiz3uONWi5K/uT+CDsWbEYCqkPtJC XIzRdX5rSanCJhDkxAyvsxQHDvJmDPcJsYjLC/N8NybzHYDhbpCNjIIHGnDY2zQrVvCR 15gHCw72PzdOZ+IBoJlNt6sLAmWCmbiaxdrum85Lk3qRW8Xf4WlmO+kNuKrL6ggg4XLQ fsrw== X-Gm-Message-State: AOJu0YwJxi03ESZqsL/Lcs3FDxBmxWSIeCYWAuqoF0/97YK1CJf0FiyH T5J1asBDVfekeDJ7zg/6AVY8gRDX2s/wPKb68hO/2enDEYrSdyvPbcEnvVQIrxUqgEshgJlgV4J x9zL4cr4= X-Gm-Gg: ASbGncsWbKXGGpa8sRfj1h0SBOciTmwwrE3Y+Sx0k4IJTKU9uhAFD1y0q9Bu1o3NIDi XJnw6thp/PIcTJhSVf2GJOdcoFtLl2Bjb3DqOl8aJqbr/Ruc5MV6+1PIR/filoxG1BUEy6umwEn LJUIGvGR2NbqRTTpPkceACERACHXG1J7nVCEYisjjMVITsrItClXK2Y3Kdwf6U71D7wxZQ7s5VC DhhTGmSbIp+b+EFJe4FMBx7boSA6lRt+7po3HFddRr2KVkS2Cz6l1NLc17NcreuHph/CQasVQr9 m9sFYSQ7W9r2r6tzJwooh/pWm66xvJMCYqstO7kEStQHJbQoC8mwHTDj7ygsW9xKqAjBcTKWNsT X2Y80Ux8UyeCxOjJo9+LY1x9YWWdioaMZqerijqj4vwGie94j X-Google-Smtp-Source: AGHT+IEtjVH5p8R/Wv/5Z0KTrbNLK0WHaEfh4Eeq8fVU9b3F/mXY3Z8IIIA+s30Ugf+6VCzzWhG+7Q== X-Received: by 2002:a4a:ee0a:0:b0:613:87ee:10e with SMTP id 006d021491bc7-613900eb5dcmr1926617eaf.5.1751639121898; Fri, 04 Jul 2025 07:25:21 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 063/108] target/arm: Move do_urshr, do_srshr to vec_internal.h Date: Fri, 4 Jul 2025 08:20:26 -0600 Message-ID: <20250704142112.1018902-64-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::c36; envelope-from=richard.henderson@linaro.org; helo=mail-oo1-xc36.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: 1751641017386116600 Content-Type: text/plain; charset="utf-8" Unify two copies of these inline functions. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- 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 a1c10c60a1..5efd257c50 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 506d1c3475..b9b2faa3a7 100644 --- a/target/arm/tcg/mve_helper.c +++ b/target/arm/tcg/mve_helper.c @@ -2164,27 +2164,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 f9052f2164..0e59ad2262 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 Sat Dec 13 22:57:49 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=1751639655; cv=none; d=zohomail.com; s=zohoarc; b=Vahh4q9xoD0dsWRkVP/if4COqWI9gEZ5erNui6eLfgNq5btfoH2LpatMNmFeG4G80++jWrjcZmWVohUs/1dSXT4Ht3oKFY2HwsG2rVWFiuEvhbtDFXQLGWvap2tBYMBNVxrMw07fswD/Q2+rBNvc7wxMYkRjfRw9xmsq60Zrd8w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751639655; h=Content-Transfer-Encoding:Cc:Cc: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; bh=6RTJlXSkm58QyVl/No40Lx2q3ZM+zE/NwDCsvlQQw4g=; b=lrb6NjBF79AEkn+SM97kbIfkAmMojGs5jyg9h5a8DQMxirFrX8tRaeQLNrzejjQbeoqfZc/XoAYqMr8q1OnXuqjqgfGhhMwk5cQXfXcxuMi/H0TmG1WTXz8NwM+mLTF8u5mZMO6LkUWI9YonEXf2EHHgEUoMbvq5fy4gr/RzcEc= 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 1751639655655956.7363728768211; Fri, 4 Jul 2025 07:34:15 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhSf-00086u-1r; Fri, 04 Jul 2025 10:32: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 1uXhM3-0004UM-AQ for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:33 -0400 Received: from mail-oo1-xc2a.google.com ([2607:f8b0:4864:20::c2a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhLw-00084D-NF for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:30 -0400 Received: by mail-oo1-xc2a.google.com with SMTP id 006d021491bc7-61208b86da2so283843eaf.2 for ; Fri, 04 Jul 2025 07:25:24 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 006d021491bc7-6138e5ac5eesm310233eaf.29.2025.07.04.07.25.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:25:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639123; x=1752243923; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=6RTJlXSkm58QyVl/No40Lx2q3ZM+zE/NwDCsvlQQw4g=; b=t3T7Bq0SutGCCqGEQM2+uab0+P0MGwN3QFofpI5vD+z1PUYvHBshC2csi8l8YFxaDZ 7I4Co55Kf/1dcGVzKy/bjX+wfEoyvLozz6X8xcal2S+vLHNMWw2pyiq/YZWZXmuRaovQ ZqQ1Db57MHsGWbmEoitUPmaBTIhvJDxHLfYcgX7FOxaQcEfNK7tqyvUCaBiSNEMGicaJ Dy4CG3U6YcjjaRLy7wSVIrWalkkzZfbvCixKqaCn3PAuQDVoI4555lrdntLy+9rKb9tm ACnHcFlOi/H8Uca5QJyJv1rV1BMTt0us2O0w+3H0NRvafL781FDRcVPvLH2kqryXLK+W kWfw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639123; x=1752243923; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=6RTJlXSkm58QyVl/No40Lx2q3ZM+zE/NwDCsvlQQw4g=; b=SUk7wJ7YRe9IKSVpFnxTNLSymq9aJC6/Y3nGyAPZxrrhfh579//9B55TAQ226zV3nr XhsA+3qcOTbwSIoNkN8CrFFSBlXaCqVhWxeq4cJT1ea9ovEBtzsvhprdxrHNK8IL7o0N vS7ekgAAOBpk/d1BYi1SgFIPosA3NUnApqnWm7V5WX4Sl0am8aDpyXIhm2xaG3Nskxw+ 5c0/NP3Jx4c6gPFyAwYGlJQGuSl8B5w9f5+PKP44DSWuZazxJvmWfoOAISU+kpBpHDHI doVQzYuHT48C3fwF0wtRduddKCnldtgpa5AAG2fQ+vgNDiTZQdrjlWGqE2MHDMM32ctB 8VIg== X-Gm-Message-State: AOJu0Yy60WOBdJG87vbPImwWJoJ35VLZPX8RU9N3/AhDiJNywu9dMdIp Z/JymukXrU46EeAxSLXm2lSm8kIxb5VPn1K/Wz9mRPgMBDbaLe967zzamV4ASpibi4KhMBMeKQL 784BfCGk= X-Gm-Gg: ASbGncuXV8vI/64x+LH4tapfCgt2x4wEr9rmRLliPAnrrmep7DoM/W8JRhzCee4isGo H5rxHxoxxWCUfIVw42mikj8DEHLJZneWJ/D7fkW0Nd/IUFvrMMn1tIVzb9h9thY8jHhpzgOs5CG Jbuc3OIgyD2p947uQvR/nw1w8c6WMCmgqUmScSfTGD6lXJ1icsuabO19IwosTwpY7hxAg4vN49e z7jtA1zUJMf1bPA/2iNGA5CQzhGRqSVeZugFDhvDx7WBEBmCpJssBlf1XzcKLeEGfBLJFBOuVCY 0/R8jHsFNvZ02nXcwISdp9cDK2QdN9r4+nPvW23aca+0uUVIUxIDMC4Wx1F4RRTQuEtdpnpR1sW zAJlk8r/GpQTiNzTD6B0C1gIY44sL2EvFb/7WdStimDAPKrLJ X-Google-Smtp-Source: AGHT+IEgo1MeGfi6oDql7ihEfz0UEaDFFjDqSth/9IHBTT1oXkWv7OjH/FHVqaCRj5H6FBNECCIgcQ== X-Received: by 2002:a05:6820:1796:b0:611:ae2b:4d33 with SMTP id 006d021491bc7-613900ecb32mr1924112eaf.6.1751639122700; Fri, 04 Jul 2025 07:25:22 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 064/108] target/arm: Implement SME2 SQRSHR, UQRSHR, SQRSHRN Date: Fri, 4 Jul 2025 08:20:27 -0600 Message-ID: <20250704142112.1018902-65-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::c2a; envelope-from=richard.henderson@linaro.org; helo=mail-oo1-xc2a.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751639656198116600 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell --- target/arm/tcg/helper-sme.h | 20 ++++++ target/arm/tcg/sme_helper.c | 120 +++++++++++++++++++++++++++++++++ target/arm/tcg/translate-sme.c | 33 +++++++++ target/arm/tcg/sme.decode | 37 ++++++++++ 4 files changed, 210 insertions(+) diff --git a/target/arm/tcg/helper-sme.h b/target/arm/tcg/helper-sme.h index 7e21f1095a..97428bcd6b 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_helper.c b/target/arm/tcg/sme_helper.c index 4a05fff5fe..2e95fe38cd 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 de9545ee6d..d413efd20e 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) diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 81783b4705..05d513efba 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751640102; cv=none; d=zohomail.com; s=zohoarc; b=MvYwf3truenIRb0mlzRs08RBrUX7D7yQ0VRnC2qbWaWUTFGVJoAhN0sT/V6EzZM1G0TGnYGqs2hU5hNYKKCG5hrNGXve7rONBjbtg5XjgnvkTB1E/bYGqAUHX4+z/t5uXjhznJ80FndFRUpklKbp13i5RMYme4+vKAknGqLa45w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751640102; h=Content-Transfer-Encoding:Cc:Cc: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; bh=XGPz8c4Quh73bz1xi4TXiyf83H6O8RYqsWdecbapKxU=; b=QZvAyjXY40uOK8SJGJLZNW/dKlZeTPbzneUcfanhopvgr7ILo3ZpYHBzLQEBCu9S9r2iW9XdsCmbj/9zN6ByXjP3/SmMt1UmpgMFJqsISohJCmJxWthjysDNrKsDjfRXOXtC+D6vXTP3SpzIrdX8M9+ZHGJFdy+C+cf6YjbWYwA= 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 1751640102356998.8559885757685; Fri, 4 Jul 2025 07:41:42 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhOU-0001Rs-1C; Fri, 04 Jul 2025 10:28: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 1uXhM3-0004UZ-Li for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:33 -0400 Received: from mail-ot1-x333.google.com ([2607:f8b0: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 1uXhLx-00084g-0e for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:31 -0400 Received: by mail-ot1-x333.google.com with SMTP id 46e09a7af769-73ac5680bb0so276357a34.3 for ; Fri, 04 Jul 2025 07:25:24 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 006d021491bc7-6138e5ac5eesm310233eaf.29.2025.07.04.07.25.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:25:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639123; x=1752243923; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=XGPz8c4Quh73bz1xi4TXiyf83H6O8RYqsWdecbapKxU=; b=KZkDa3sd3klfKR9HEj2LCGDA7saLndVBWzY9Wp7xhmNPESKEbj1QSsFMNpILL1LyAn +iy4fZ0jVM8U7F+itz7B6gOdDGZ0/5f/mtrkJUn8g7kZYKZWS1J8kFW2vzcVfcdYOc4i 9LHY/2gMOmasiSMIKS0mxFx0wZlpzeMBZDPS8iUwj4DyOfosbjo45HWJDP7mAnVm7rmZ mfZ/IS7MaFcdOVqysRS+CMUmnYYgzrD9IcPxQhqq/lzO8CC7AqH2K+h2n6fZpUzFVKNd PLVHzT0UDCaTqI4mhpOKTxz6v8rKxWupInVBJt/ANHUW33OBV0H572Bulr0NZlzkqG41 6SFg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639123; x=1752243923; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=XGPz8c4Quh73bz1xi4TXiyf83H6O8RYqsWdecbapKxU=; b=CKyQFMtF2r1DuRdLU0w8KBNSgSs15tpiD8oeeBskFAYc90LKH1kOXMbxlO7qu5phSP IN4urrbnkCrh6DHQJBx48LBZtHVAxl30uhH+3OsHxL2e9AXNg5csmW0SzKQ+gZJ9zYHT z+r2MfVC19gvGUV+4baqncM6enf8tC8MN78SoWS3tXI5D1s6s0Lm3JNLEPolcY7PiHqc d2feFFUCI7GZb974sRmfkM/mjKZU7jzNg7DXr0DaInrEAjrNMI7GIaNhoX28hj5g8q5t bkntW4UlNFI8V85uy1XJ/yvtAJSm5FrKrhIBoNQd+fxMjAiZ80kRMJh8YqobWAAVvwrx NmoQ== X-Gm-Message-State: AOJu0YyXvjBHOpCStVajxJoBxRcvcA2KfQdPD47iax/oB/33AaYUAgQm 6huc8BGDx87ei1ACqXSxXxiNAYcAfywvMrcua4w4pALoaAjJr8oTNGfayq1SmT9ldtLJno5LkV3 IDHXqFZw= X-Gm-Gg: ASbGncutS4O0+TYu9BweyH7rnlkx0XFWSx1ude4TPWlMYnJDwCwpDzM8wtVceVxBrRK hld8dIv+zRlOd30wjAlG0UWXy0d978ejRHUnF7WkAd9TMNO47FDPQ5ik3iTNVokseiGTdFCZt93 5VYrSaZX2S1gckJGZ+aw+rCr/LPAZY6mZgbw8vPtSGkBpjXOSjIpU8s0552uvi/C4c6/Gl8M+fm bo9/iA1M0BeGxgz/ZknxoRnxSXTJnBq/cVYNAu5gF3ofARKtFt9zvNIZMTTFHPqR/ZzvPNAWP19 7PEgIySf8mNE+/n01+hYcrRSWDBI+yj5XzCpY03ItKXTXhNEou/UjsJoJluAbqfW4nEqkEDZbE2 i026sxLWJqAtPnW5p1+ZmJ94FiNRTgOLNPjrpICHJ86qJbz/u X-Google-Smtp-Source: AGHT+IEICFcKQYBvVozmDUsGszCPwLOeKyGFTuxjArUmJahbCcFtsWC+e6bB9q/lmdb2ttYQx/sNyw== X-Received: by 2002:a05:6808:23cb:b0:40b:441e:3603 with SMTP id 5614622812f47-40d04aed0cfmr1778657b6e.14.1751639123534; Fri, 04 Jul 2025 07:25:23 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 065/108] target/arm: Implement SME2 ZIP, UZP (two registers) Date: Fri, 4 Jul 2025 08:20:28 -0600 Message-ID: <20250704142112.1018902-66-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::333; envelope-from=richard.henderson@linaro.org; helo=mail-ot1-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=unavailable 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: 1751640103607116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/helper-sme.h | 12 +++++++ target/arm/tcg/sme_helper.c | 62 ++++++++++++++++++++++++++++++++++ target/arm/tcg/translate-sme.c | 40 ++++++++++++++++++++++ target/arm/tcg/sme.decode | 12 +++++++ 4 files changed, 126 insertions(+) diff --git a/target/arm/tcg/helper-sme.h b/target/arm/tcg/helper-sme.h index 97428bcd6b..06b95da3c3 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_helper.c b/target/arm/tcg/sme_helper.c index 2e95fe38cd..cf0e655bdd 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 d413efd20e..d52ccf2ac5 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) diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 05d513efba..c1f73d9f63 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751640121; cv=none; d=zohomail.com; s=zohoarc; b=UVY71f2HyabYn5U+PVr1uB3FiWu9Tt3bAHUDNWEPFWqwmLE1eooDFqmeIVdNjigWXbsGRIBMnaquoVD4n3kLBksG9O5DqiRMi1c5LkxSDKFm1DpRH+dMgI9y6MXC2eFGpqpR/k2YgSObuKMHmtlR/WEVtQMrTW0XUdVLaomaZms= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751640121; h=Content-Transfer-Encoding:Cc:Cc: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; bh=YsCup+gJOZBgnqsU6/l1yujbu9XY09yoYQpIK5Jy3OY=; b=DYcy7vHfGfe+9Pp+R1kqf7ymPKq5ezjX2VR0x+cA7Dp/86oqPlZK3BvW3GTjBtVsotaP02uKYwnFkQQK1TyJh/dU1rgT4mCjBbzkg4DAHodhBJRXJp1aTq0Z9xPRDXMeJwGD+ouaU1L+ruuLY8/ooL03yU1ZxUY/prMLf1bDtFo= 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 1751640121093961.7558683842167; Fri, 4 Jul 2025 07:42:01 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhRC-00062u-LQ; Fri, 04 Jul 2025 10:30: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 1uXhM4-0004VJ-PQ for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:34 -0400 Received: from mail-oo1-xc2c.google.com ([2607:f8b0:4864:20::c2c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhLz-00085H-CO for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:32 -0400 Received: by mail-oo1-xc2c.google.com with SMTP id 006d021491bc7-60bd30dd387so544955eaf.3 for ; Fri, 04 Jul 2025 07:25:25 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 006d021491bc7-6138e5ac5eesm310233eaf.29.2025.07.04.07.25.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:25:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639124; x=1752243924; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=YsCup+gJOZBgnqsU6/l1yujbu9XY09yoYQpIK5Jy3OY=; b=f3zzvXMc/vNmrUcVTJ9ccD2I6shxrEkAynztvCPm2rN1+108hynApNbpCkxFj6oCen 3qK6YkAfqQkTLHePyxC5lJOsLcpfuulKEPc+kYg7oMxPoP4oETRQSdghRIOvltpHEMOG K7QVxDwDiv5tw/70qY+/qc2s7zTpTqLhRuH/vouDENkGqgoc7gQ66j8U9gQ723GBIL2/ UKStu6CqTrX6KZGRiX3WlE1VXQi+wnzHslJm0JNZm9JJdnjlgTVOAvteXs04WGnYlJzC P5u7SoaxuXNdTvE0lzOPiAsdblp0EXS13F2hofAnKgoWW4yYZAMjGNJHeOiUAsVQbDFb vwlQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639124; x=1752243924; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=YsCup+gJOZBgnqsU6/l1yujbu9XY09yoYQpIK5Jy3OY=; b=RhcozH9NKGDRJCSNu3ELYEUKGJ3NNcZidhOROkdFp6qhKgeG9Fai58aL0vQBlWnrIK E2zaVsa96NAf+r3m9eOkm9/f7HeCSyjtXyL2nfqheuaYMjUtUCIW8EZQaT1JrhaAmPF0 lIY2vIATFx5AXX5NdHR8XP6O7xqpdR5qE4wCLAlK5onybMVG5zaJYMxIrDjLWgi2FkI9 B6EfiOQo8+k8kx15STzoVkKqhejYBtMRCHWqNhhzi3/GAvAvMpglNA142XY998xjD/zx bL+AyZfPPCodCQNZl5A2wXaC9Q7MWAfCiY0WspV7ozRVzRL61QWppW1hOvDEd1+SCN5G jy4Q== X-Gm-Message-State: AOJu0Yz+Ooozet/qXon4GPpJFcnodycVmCfkKsjYknxNksbvlrLGvLbP C4BkcEV943+NJyEWhPRjlH0ycqbsh/zq2QcxuAbEgL1CXmyTe4zfj0uL/+oHTyAQebDPa3iL2G9 PlPpDaAo= X-Gm-Gg: ASbGnct76O1rdeUPyly4kWjZPUdFuanOkBQMA6gwkyU+RxSLCY1DFqCKKZLu8c9ZtWk dxFSzBipB+z2+NGoklOCmzxDgPOKgt2/osx9cmmqdzW2qNxlxUJ+NAnAH1iNPN8tKka6HYfxBLJ Wk+wn3hqMr2iDFyeS44FrHoLl+LwDidJIYDSqyoC9rywtjkS6Cz9Uz63UhoeTG3TPRK8lB7cD0r /zv8VRJX0u+HiCVJJdv2AignJPC1I4G6+zumeu3Bsh9uCiqPnO38RGqEed5tadjN0YQMt3u1wmi HgI16RAah1l8HUVQXGelPMz5Amf7Z67Co02YMUwSOOFj6bFuQ57xUP4TF+IS0zUtx12CxeTFpBV 4ZEyydUdxXPabuF0QLa0IrlT1QaXfBRrYN7reV7j8kAXE0hjn X-Google-Smtp-Source: AGHT+IH6B77nrQxWj8cnGybkz92pJ7wjnYcIRVyzf17wJjUXqn7+RDmJxjklM9EASMtqwAZm94RQKQ== X-Received: by 2002:a05:6820:2108:b0:611:f241:b8f5 with SMTP id 006d021491bc7-6138fd8960fmr1969094eaf.5.1751639124321; Fri, 04 Jul 2025 07:25:24 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 066/108] target/arm: Implement SME2 FCLAMP, SCLAMP, UCLAMP Date: Fri, 4 Jul 2025 08:20:29 -0600 Message-ID: <20250704142112.1018902-67-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::c2c; envelope-from=richard.henderson@linaro.org; helo=mail-oo1-xc2c.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: 1751640121815116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/helper-sme.h | 15 +++++++ target/arm/tcg/sme_helper.c | 56 +++++++++++++++++++++++++ target/arm/tcg/translate-sme.c | 75 ++++++++++++++++++++++++++++++++++ target/arm/tcg/sme.decode | 17 ++++++++ 4 files changed, 163 insertions(+) diff --git a/target/arm/tcg/helper-sme.h b/target/arm/tcg/helper-sme.h index 06b95da3c3..78ba3d1f20 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_helper.c b/target/arm/tcg/sme_helper.c index cf0e655bdd..8a1f9fbf3d 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 d52ccf2ac5..99e4056316 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) diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index c1f73d9f63..47adcb5a15 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751640320; cv=none; d=zohomail.com; s=zohoarc; b=bBkCfcNM61zwxIVSGvNPvoj0vYb5KmbFgArIE/w2qlCG8vMJnXEjymj1xlZQXBXhCLFsrnV1gnC41j0SSYNtjg82sVOPhxq7lJGOT1PgVf9LtE+08BLzX9rTmzSx0JI7RA3FXbOUdmwwUlnBTSoR7WvrVhktSUxYgUFTBi4bvcM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751640320; h=Content-Transfer-Encoding:Cc:Cc: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; bh=VmkPVB1raZaAazvEIlQJhAAcR4Wu9MbnTOBPTi5jEm8=; b=a6ranFjUeBD2txJP2LDMjB6rh13RlBvKgyVrtPcI6mIn+pYcfRe80Pec8f73BX+TocOEAMit5Tf9f5WuRR5LiUjVWd2I2Z1NpuHkRLoLlXyfPyEQvVzqDManHrcfrK8I4WYGiK1x9zsz/AU4pR4DSbA5HLBI10YygsQtHs6auFk= 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 175164032083673.34432888639219; Fri, 4 Jul 2025 07:45:20 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhOg-0001vk-1e; Fri, 04 Jul 2025 10:28: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 1uXhM4-0004VK-Tj for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:34 -0400 Received: from mail-oo1-xc2c.google.com ([2607:f8b0:4864:20::c2c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhLz-000862-CZ for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:32 -0400 Received: by mail-oo1-xc2c.google.com with SMTP id 006d021491bc7-61390809a36so178744eaf.1 for ; Fri, 04 Jul 2025 07:25:26 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 006d021491bc7-6138e5ac5eesm310233eaf.29.2025.07.04.07.25.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:25:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639126; x=1752243926; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=VmkPVB1raZaAazvEIlQJhAAcR4Wu9MbnTOBPTi5jEm8=; b=GXLKokaKt6X6kIIk4xuws5zZ954ZCmVseYXcsjCoNp1+f7Gsm5/aGCoXM4YUr3Ywtg 3fTmDRAyRiVKAIKLsfnfsBjA/fAzKtkUHl5DMkmhhfRv+LkP+XO16frB7mjTD6fwxS5t 090KQb30PbUrep/30K6UGJUnw7yijuNIMvlls2ICIuAw8YZN1WToRV5GDi3NJZC+PQAW ByqCdAUTxxO6Z6V6NCBvHy2baFCBbwYU+7DM26iF1wknkAs2IUNkSmlv+ydqcB1TD+s5 IuYBBydRgNoKOgNL6RqC23OsAEMSKZPM9pnCrN1kOFu6+5TBthNgHDPwzLfnMC4Yxotf swEg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639126; x=1752243926; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=VmkPVB1raZaAazvEIlQJhAAcR4Wu9MbnTOBPTi5jEm8=; b=kFOYrQYIiH6mEDoSMgeHOqmnF9ob8atK8rRGC1WpXRCf8CWqyxLSXUCfI80yOjn8P4 TNR4XcTQbj/+vNAU63okgxyZZ40aV9eZ6VF/PGAd0dejZNi3RE/dE5RFVlHsYowZhx6D ZztGFahIM9JF1DDUWyv+QBs5RlfObwNm3v6esE4ZENEupXOCyx9vBzj80arCFOIdDw3X bVkEAG8bAv29OWnuDi2u92UrxXLtY8aFZ0zkudh2LfDTkHwGJUwA1a3NJ2hfZGFsa4T4 sLKYWvsLmv72PjF3eis//gZKHsO894RSKe2+/hiTfsyNDr0AK+jqqTvfPf/sDqCHTLuw KtWw== X-Gm-Message-State: AOJu0YxRS1GRBpk1bfIOye1kFK7WncJNKz6AqwXLhc8VrdtimDdsr680 OxqI1DRmW3BhULAdb/CKTtE8t+z2n3Ex3rQtIcp7Nrd/SJF/OBbhBmxAxsr7Ya5Cu6yhS461WFK jerqQNTY= X-Gm-Gg: ASbGncs2pZodZ4zrqR0qNlQ3oK+fKP/bXrzieCJaMsfFNDXf2hScLmM31mY5ZWw3dZc hjzdSNn6bQjGBqhghF29f8oKIgNW0XZfVjOVyjq3lMrG8dkSti8/TGWMAWIWNIk0h1ObSBB/JZv Tkd0a7ElaDiRgkBZBpz2EVjVU2QjCP3D/ht3cEt/fib2CEQCeVbCP/oVe9NSpxJ0YQolhKNIewC wGcPvQaYQfOr2Q4SnPH7Dron2EMMwIcrquaaIrY45WScP8TKR9eeOdSmxzmceOtAbcDQxQ5MWq6 YgY5QB+UNrTQlH9Ujf141UQcqX1brwuY0mExaCCgqS8FpLIfndFW4BqZ5KpG5WlLEq2o5xBPEy9 VBSfLXI0nm9MYf0xGd/gzjSRqf2JPe+n4oud2xghnl4BIYo/j X-Google-Smtp-Source: AGHT+IH8ZqXub0qchl7IkW9DZ0ZOWQsZX99q329JsjXQcZUYz2E6Njm1hD6kuU/Lr9u83ywNDwm4Ew== X-Received: by 2002:a05:6820:f0c:b0:60d:63fe:2472 with SMTP id 006d021491bc7-6138ff9d991mr2057287eaf.1.1751639125449; Fri, 04 Jul 2025 07:25:25 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 067/108] target/arm: Enable SCLAMP, UCLAMP for SVE2p1 Date: Fri, 4 Jul 2025 08:20:30 -0600 Message-ID: <20250704142112.1018902-68-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::c2c; envelope-from=richard.henderson@linaro.org; helo=mail-oo1-xc2c.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751640322358116600 Content-Type: text/plain; charset="utf-8" These instructions are present in both SME(1) and SVE2.1 extensions. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- 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 ac4dc7db46..ff70bf27b0 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 Sat Dec 13 22:57:49 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=1751640844; cv=none; d=zohomail.com; s=zohoarc; b=Yp6e2oileWptKGFcxKK4cA7+3r1+hZkeLhAFi33pUm8xGnfcVLh0G472k5caOJtZUIHFf0zfq3CzPZrWqCJHuKcpcpeXppPcXukn/PrDaJOrapnbSH9QpjGW1sqy0OTenuUcziJnTRf041ZzILpWcZJy1qtSDTuqSPXvEfgzhUk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751640844; h=Content-Type:Content-Transfer-Encoding:Cc:Cc: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; bh=94yRyXv/a+r27FH2Y4vjXt8+mpChSefv37z2JQXcfow=; b=eTj75TcpsuV44JzhkVffvxe76gbRkwBasGo598UpVepi7NsKGXhJ5QAqiZbHU1P7DLbox8fvn4N+ZAnp7yVsB03happq8Oj1DO22HE4kNkCFIq1+JTOH9cxhF+OjQJ8g0XYHYpYov4BMp6Mq6iSEtKqWTgCfOy/lXbaVROAcRp0= 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 1751640844642771.5978543614666; Fri, 4 Jul 2025 07:54:04 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhP3-0002HZ-Cv; Fri, 04 Jul 2025 10: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 1uXhM6-0004Yl-Ux for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:37 -0400 Received: from mail-ot1-x331.google.com ([2607:f8b0: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 1uXhLz-00086H-Ta for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:33 -0400 Received: by mail-ot1-x331.google.com with SMTP id 46e09a7af769-72c47631b4cso863654a34.1 for ; Fri, 04 Jul 2025 07:25:27 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 006d021491bc7-6138e5ac5eesm310233eaf.29.2025.07.04.07.25.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:25:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639126; x=1752243926; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=94yRyXv/a+r27FH2Y4vjXt8+mpChSefv37z2JQXcfow=; b=M28/845E4wBW6Ck+Oz6WeAtrj/gZsJv9oqWxrDdLJE+p7vUfBnxa9BaRC74t9yi3l8 zZxNvmmQPRZ5KKqtAzWO4aOzS/oTQU4jlxwmSlUP9bBjsQ6lZ2VjZdfHa/zBaWjv87hP xqEHgAggS3Sb0SN5N6EF8Z2NPCdLZG35oY8C3rLc6MUYDsqosdHmgqCds2g+L+WY+Aie l28+hI+SdqF5+5u//vTchLmE9vMvYbXc8hF5a3lC7TrNVlrzGc7Biv1x+8tKWw4ld/8u yu7knF2kprq2vXTtwSFROtoIjQkbsWQd+fzoJhaIMogdKuhMuUd03kgI9wusjU8S9qSC sdFQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639126; x=1752243926; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=94yRyXv/a+r27FH2Y4vjXt8+mpChSefv37z2JQXcfow=; b=UQJth4UhqGpaqYNb1oI64i3mt++YcJCGdQO9fze2xonu69A5oyhRIZh15WPHWFL3tF SE/H8FhACTGHShOs4w5glc9NYsIIRCi2vt3QGZJp/H0Wsr9FA2LDL6h+lQzyAj8KMtp0 d3dJTMFSH5hjUtBH/hSGDscwWxalCsL87+J8A1GVwCEhbMIpWRG6Fp3Hlb5jJJo6ZEeo ES9p+qNGoluQIhu/GxZdZ1w02C7gfYzIZhbOUq4kSZHP+P+WVeujKAI4fkvubiG/y0E5 bTLKWI0Pu6SRgeQegUq5JlWskVu9d9kOqfkl9uVTYiXitz41yAdFYXjJ7xirhW0GkA91 R1zg== X-Gm-Message-State: AOJu0YyLANPMuEy8l6RO0t8ialfOvivX2gdesV7simVTbTLWARnF2V7q eCm9xpNNO0Gh1VBC796MgpKCHdEGG8aMmLAdVkDn1WDed4NEqSYMlg5uLUn1yOP1nyS1iBaAtp2 3Aj3JNNE= X-Gm-Gg: ASbGncvfXxOmSHDr+m8xZuf1LJZrglZ5cGgYLd36xQ0ntcYSo0P1m9VrIrfs9XBcTDP PSIJKmfNRsxk9oGK5HNfeKP1qUqHQhGzgJq1+ExmDRsiKPnXnj501lPdg1YZs9LFaF9FcLCnwbT 6AFtHwYXAFm48Z5Zm1YCEu3XwdD04xkp/d1vQWE01s/JTn+NcFylrzVNCzkMpMlND42C2xH/DOV FSHyqX7xyzwqU+kDzUKbhgOQBXHN3kjk3XnvNswtgdIISJNJo4dOoOFD2s0Rk6uHkM8lSrOtfdM RJeNw6H3SJNzvnbCymwfCDl5D6uODJ5ye0Arc7Y4UNudVOc0zQoO5e9ReSXdudDYfECEoS5SLnU K48fba9UJu5Z8A194Qmd3jWR9uc4XIyB9vJ6+FHvqx0L9rVbJ X-Google-Smtp-Source: AGHT+IEfox0T3kKhZ1LD3ZXgcQR+pSgdZ7UmHnn8OSv1rzVSpM2MXbawUrrDdCgQaSZUCbkJmt/Hww== X-Received: by 2002:a05:6830:914:b0:739:fe86:9dfc with SMTP id 46e09a7af769-73ca676d742mr1517409a34.23.1751639126421; Fri, 04 Jul 2025 07:25:26 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org, =?UTF-8?q?Alex=20Benn=C3=A9e?= Subject: [PATCH v4 068/108] target/arm: Implement FCLAMP for SME2, SVE2p1 Date: Fri, 4 Jul 2025 08:20:31 -0600 Message-ID: <20250704142112.1018902-69-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@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=2607:f8b0:4864:20::331; envelope-from=richard.henderson@linaro.org; helo=mail-ot1-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=unavailable 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: 1751640845372116600 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 --- target/arm/tcg/translate-sve.c | 22 ++++++++++++++++++++++ target/arm/tcg/sve.decode | 2 ++ 2 files changed, 24 insertions(+) diff --git a/target/arm/tcg/translate-sve.c b/target/arm/tcg/translate-sve.c index ff70bf27b0..210a029ab8 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, diff --git a/target/arm/tcg/sve.decode b/target/arm/tcg/sve.decode index f808362f23..dcfc40ef44 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751641117; cv=none; d=zohomail.com; s=zohoarc; b=ah1Vv7Cj2xr3kKjf4ICP6iBSbHfpu69i/cT1Rs7lxzdtH/xlqTOb6cWcxDrFr8UGCz3nO1CyjD5Qk1PDxo0/w14lBAEkZOi/BJfYATUw7ggVEtN7SKIPt7gBhOv8JskkepVrKVnrX7t6P1zgrOCYg3JYUqSeQ/a3lyIBR4C4SaU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751641117; h=Content-Transfer-Encoding:Cc:Cc: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; bh=kJFR1eJ+WUdy2Lk3rwd5+Ns6EIeEnwPE0V3+mnbvDGg=; b=gfUUP7Zujyvt17X6H2O7RVMdivQ5PzgYZ709ZqU6xq5stt9eUDbfDsLuNQz9t3zgOfp2C7l1YWivaqOU+LsqUCehDGCRCncG8rrFnv9AF9GANqnuPQqg1zTLj2/mK/APy5ORltgrRlgVEGbaR9lOS0oVaomwt7oQrdRC7baLJ/c= 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 1751641117293440.71890364210014; Fri, 4 Jul 2025 07:58:37 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhOz-00029E-Qn; Fri, 04 Jul 2025 10:28: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 1uXhM6-0004Yk-Td for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:37 -0400 Received: from mail-oo1-xc2b.google.com ([2607:f8b0:4864:20::c2b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhM0-000874-MG for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:33 -0400 Received: by mail-oo1-xc2b.google.com with SMTP id 006d021491bc7-6118c1775dbso307613eaf.1 for ; Fri, 04 Jul 2025 07:25:28 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 006d021491bc7-6138e5ac5eesm310233eaf.29.2025.07.04.07.25.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:25:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639127; x=1752243927; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=kJFR1eJ+WUdy2Lk3rwd5+Ns6EIeEnwPE0V3+mnbvDGg=; b=qpJUKgnr/yXLLnx/DCOYprKGZ0nBJFdyPFt4ZuBmUr6qiScXRQTjBQ+WOeB39C/uiI xvOdodV5LHlKAg6OD3eXPklLk8pSPNubOOrKD/+2rcCzE/NN4o8Bj8c5k70qa2WQN1DE vrZ9k+HClhZUVxhoc1wdAbO7aX+0RvuF5appVj65EpLez7g5CVnKYEM/ZCImb5iO/o4s SdczXmVXtfH+s9MhpFQF8+wa1EkLsTRuNpGubjABpdojJgcM+B+XriRiShW7iZrKzT1K ORbk8bZiNYKwkj9Xe5s1aY0q4BjwnW5PnstwBhkw++jBUlfye0ZGxf3WmhZ4x8ATkA/j 4w8A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639127; x=1752243927; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=kJFR1eJ+WUdy2Lk3rwd5+Ns6EIeEnwPE0V3+mnbvDGg=; b=gOVQxzU+KiIHpC/2NM33H9gNDPROigVM8oc0LqrtDysZ6SpKoDbmpO/nG/vNhwNcHB JmX5/aESkz1CqAyewnpcBswUbg6nW2HCEBHPOk9ivyNeGSe1l5s1kto4aJ5tSE554ow2 ppsLAWa0DPwX6L0b8HoCFgSPG+zj0g2BhaCVszn3qvWvIY1v70g2TgSEuCE0FOrZhDki kdR0l69elXw5opL/kk8Kogb9s27jfQLdLtow3gX+wQ8S4w0oodSuxD9GHQGEwmrVJbh7 wQumGAoAqKGjBMW5t/qlfGTAvK79rznMBRpZBATPJlKfuzbjmuNsgsBzQYaW1Ut1wLfH +iUA== X-Gm-Message-State: AOJu0YzeP9A8tjaiyUX9TEGtFi2GxLBAKbX3ZCKIN4Ige8xOwwyGgrx5 s50J/m2tW2IE4tV1nLqkOLTCLKk9szBZqDOM8jKpOYplZclvJV97+ZbUJSP/D5LVLqyhi2tXzcX s5bteLT8= X-Gm-Gg: ASbGncvqEdvZ+JAFJ5nLugV6wwm7ssyFt8d7+9E2jjNhT5fpZjdAaP5koxqzuOLeH99 tW1d3VnDn7etKMt/BWZX9cgttEfZJc6fuF7VO5/YSVRjFUh7yzuURWLnmP93oTS/t7TW/PAksNv mv21EI/dgGCgcSMueT50irApVHD3POejfCTQ00WvzApHanACqEpuw6VrIOu4rb0s747oPDKInG0 4D2ZwSYkHiKdeTtkGYIEOpafhkJRhBgLvwTFMesdg60NkVBRuyjh+OD/2YFy+Reg6lzyVA3QTxm tGs+V3p2X6TKFaAEpH88tnkzFdiAOIAm4q5gNj2Am90JHV3GJFJ/YKi32wAg6XApu7+5HjznuEk 8xuRr+BdF0OWazjexKh2qKT1d6qrPnD0mOOBDSkZ71y+lXfgX X-Google-Smtp-Source: AGHT+IGBgIdFbO+iwZ7ceBIF7i3IIbzB+yQG5+fgr3kWXanmvu4xyx45iXJo3OJRTupd1qaqxdP2/Q== X-Received: by 2002:a05:6808:159e:b0:401:e848:18b4 with SMTP id 5614622812f47-40d04aba9d3mr2184558b6e.8.1751639127275; Fri, 04 Jul 2025 07:25:27 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 069/108] target/arm: Implement SME2p1 Multiple Zero Date: Fri, 4 Jul 2025 08:20:32 -0600 Message-ID: <20250704142112.1018902-70-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::c2b; envelope-from=richard.henderson@linaro.org; helo=mail-oo1-xc2b.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: 1751641118398116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/translate-sme.c | 20 ++++++++++++++++++++ target/arm/tcg/sme.decode | 23 +++++++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/target/arm/tcg/translate-sme.c b/target/arm/tcg/translate-sme.c index 99e4056316..b6316ac716 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 { diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 47adcb5a15..c4b85a36d0 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751640775; cv=none; d=zohomail.com; s=zohoarc; b=PTaqV/W5weXLC08KXuRAKSt7Ldys5sN2fFjaEPY4qqINK+803pdBgQYOJsumgVL/p61nPziAZH2hOFTf8SAtnXP+wwgObaAuhKnpsWk94w/IYWa3Y4zyG0ZSvNmUnLNYyzUrPHfb5gM3cOpYJy9i1wy8VHWeNiBD//J8+Zr5OPc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751640775; h=Content-Transfer-Encoding:Cc:Cc: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; bh=6bLvhBwNEmDsnka8cIDU5PrrUCOcipDYGvxoPFyUBc4=; b=AKHYU8XcWk1kiv8uaS8NDQijK5Q01hLLRRUSWXyd0UfmjSdpQFAQm/2OKz2ANqr9FXvv5dK3CTC8a3HRz+vsetsohbE7rYODWckcq2uj0Avsb+IjChHTwE+ZQS1CLjdMzX+j+lmYNAZHcsS43N3KC3tJ8NorcV0NpN73zkTrXJ8= 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 1751640775036712.4443376386537; Fri, 4 Jul 2025 07:52:55 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhSy-0008QT-Mr; Fri, 04 Jul 2025 10:32: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 1uXhM6-0004Yj-Ra for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:37 -0400 Received: from mail-oo1-xc2b.google.com ([2607:f8b0:4864:20::c2b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhM1-00087Y-Fz for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:34 -0400 Received: by mail-oo1-xc2b.google.com with SMTP id 006d021491bc7-610db3f3f90so562050eaf.2 for ; Fri, 04 Jul 2025 07:25:28 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 006d021491bc7-6138e5ac5eesm310233eaf.29.2025.07.04.07.25.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:25:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639128; x=1752243928; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=6bLvhBwNEmDsnka8cIDU5PrrUCOcipDYGvxoPFyUBc4=; b=vDc2C2rMeVVG6QK5W4T8/NKnhMOFn4Rxl/rDsV7vwinOqSRNCtdIBg48OUymM2T0Ky A+ywlxURYwXoOGQfIa+4ZDaB83meW2LcCK46flRRqfdOtuz7jQwnkfSfs1Ot4YjFclxQ pscbBnPbX6Gfm+9mQ0GUfflvGTagiRca5LAD8w/fKTSW6IP2Xy8BRmm/NxcnH0Izt+gn TNFtvZwi+i6wA4U8QWTKf0h6PjctriI2rLvKD2tzrbAlJpF135fhlHhnFxQiyBVqMX/1 9E1tRMdpem4+6sX60pnqcmTk3Jl+nia9ajFS2bX13rRQhFpnoyb8q+bAuZ6pRpYKye6a FpZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639128; x=1752243928; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=6bLvhBwNEmDsnka8cIDU5PrrUCOcipDYGvxoPFyUBc4=; b=uHStTqMXy8hAwRYAX3CarAPT+kGyQE9YiZPZpzRdYAg5t/oAjvBsfvQ9EeVt7ckP44 vLuYahnVQ+zKKXI8cmP1O0+plm7UbaSNCC2j2hTWEfzE0qpavn6xd4/6/5i2Ai8hBgnx Go8Q797qT8QPOI3eVB9yj1XLjJbchnC7rgdYzWCM7nIGAJaMJx81a/KcWnkusIWqoBPi jgqQmpeR2GqOxTH/m3KJkDQGE9RhS8nieeUxkUhsAqwoXnIRlCHo6TUjUoYCUSmO4Mpd wBh23Lk3ypCZo2df/iSe6MIq0tKWtx8Ik+195t6sLxAdPapIM+gI2lBbiizYfbVofaKL gPnA== X-Gm-Message-State: AOJu0YxlkXKvLLM3vrcjgRd7WQ3TYhAmuoPnCdLqw/GkDshB+uzxtyjU AZoNXyZrfQirWl1MXAf1KIMyZbPMd9Giy8kAZjmj6t/Vxt8h6cj+e9fOuFDaZWgv2d43+OwKZn7 Rgz0BpgI= X-Gm-Gg: ASbGncvMshTC6K8xvbB+X7/YNqFf5xEF9szDB9eyQQC6rhoUXGciFZTAiVtnGHnmr1s kM54h0JaP8w2mvABpTgSB/s/3sLda6rAg7xS+3OLfZlJuVS9y/e8jZRZVqqDE6BOmZQ9FqopC0E CZdDlufSFHZLCyjpB4/Oc7ZlHs3/odu/80U64NY9ZmQlLCv8DftfkC3qdxB6TUqOn+tkdwqf/Sd Q/Xhz/RwGPGiwT59NC+Aki33ZQRXkBAKjibQ4ldo3vdQbbr+3yd0sog1K0yvN1BplkYtI7cqMza ERyAGxKvN2l4wypJsuSdDvBXtZYbKOtRhnTkW+orTeebq08ouyqRhBOqEUSKrW8w2gxrPNUKqAS cGvsKdLl2yLHPnf/Z687+U9eJXdytbXRS1JMrMfSE/bYiSsj213t8JpHZWU8= X-Google-Smtp-Source: AGHT+IGuWC8AJ64+53z/i471epF/TRbJNVGXF5+VCY0rjdAFaSs0xAzUz7B2aUIrt0JSGtwLbe5dLQ== X-Received: by 2002:a05:6820:1e88:b0:613:8456:51ac with SMTP id 006d021491bc7-6138fe859cemr1633774eaf.0.1751639128110; Fri, 04 Jul 2025 07:25:28 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 070/108] target/arm: Introduce pred_count_test Date: Fri, 4 Jul 2025 08:20:33 -0600 Message-ID: <20250704142112.1018902-71-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::c2b; envelope-from=richard.henderson@linaro.org; helo=mail-oo1-xc2b.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: 1751640776763116600 Content-Type: text/plain; charset="utf-8" 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 --- 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 0e59ad2262..5b5871ba13 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 Sat Dec 13 22:57:49 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=1751639616; cv=none; d=zohomail.com; s=zohoarc; b=BdTXnOovtZj2E1sBHMNVeLzHxftgisG1hzIbZMB3NBAV+g7wD4AesaOifVwDXN75InCXjwYV2rP/LH7hs8R5bnc0IVxT0lpH119eTGJB88KhjLtZ9UdY2YX5vlYGIsd+ibQgtBs+u0jZv5Wz06Bgdw2PLPpp6/HuOhYmUFbBDQU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751639616; h=Content-Transfer-Encoding:Cc:Cc: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; bh=wpo5YL86phg7e3gQ3lunP/NsQqxYcAUD6doV1Hx7zww=; b=I1CGluO/ahmZki4Qwd8JPT2M+9ZheOYrh2WZuPzplR0UTnMKmsxCcOwqo1g+FuZpGT16Kw2RvlDJcyLSgDcKfJXVCfpwTefAq/lYnRp77dP7QxiVr9oXQy62NwH0TYXUh7VHUNKZzXrS5n28IA2k0h9JL/fXCqQyAWeMNMqFgmE= 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 1751639616585272.63934872562584; Fri, 4 Jul 2025 07:33:36 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhT2-0000YW-Pd; Fri, 04 Jul 2025 10:32: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 1uXhM7-0004ev-Uf for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:41 -0400 Received: from mail-oi1-x236.google.com ([2607:f8b0:4864:20::236]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhM2-00088g-LW for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:35 -0400 Received: by mail-oi1-x236.google.com with SMTP id 5614622812f47-40ba3d91c35so736677b6e.3 for ; Fri, 04 Jul 2025 07:25:30 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 006d021491bc7-6138e5ac5eesm310233eaf.29.2025.07.04.07.25.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:25:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639129; x=1752243929; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=wpo5YL86phg7e3gQ3lunP/NsQqxYcAUD6doV1Hx7zww=; b=Q4VoHLXcb9iKleJQQGr0lUmNLuVkg7uDEi6ynoyRR3FdoPfJdJVR0/2Vq36t49ZaLL 3yWeqthdnBQ6vIs7IzKNrwLYDlsNEWUFCIXuz1gARsJ2KLryrGsyMiJO4RXwtoD6Rzes wV6FJSjJJvyBEzCXZTNwYMGU5mtTEXbphxkbcuH9wU39xyqWPxonOBiQ4pcjALKlrNYA mylgoijQzi7CwyvfohChXrS94j2lkMjWfiBXkCvWK2NzFmssNdMdBTKcZyOwpjgRZvEl bZVCQmH4NrDQq5xjBAfdKJOJM6bNdFr+o4JVIvBCTYvCRNAJ+rhHwOypU32zSD59BlyN UpQw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639129; x=1752243929; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=wpo5YL86phg7e3gQ3lunP/NsQqxYcAUD6doV1Hx7zww=; b=mVpSqhYsrz2cBssH7SPENFqmvNVIc8vcvVOzVWjYO0f63r1Mui6SXw+BzvEWHIlkRW nZE83ppZqEmVKqksk2vUC1kx+PHxucS+YuHS5F6eI+LIaLT679ChDFPBA4S6JUqVV75k SXjM1pTqMWV6UT2U7PpmKmDSGR4a7+2GquwaTQNeLsCSPHNUKg5mAmTjtoLIg26Tiwoq 6XHKYsPQBbcYOREkjRKjLdfe5Ux6nmq22v2DNDPM2u8cKAdT6qSdCiaV2Cs3s7keS5yE 96P8keVypqCZL/GLX2hpamoUhVFXGs+TvFHf5cQ17obGP5uB1DrBlrLfrzi12nE8+01p YD1A== X-Gm-Message-State: AOJu0YymyDi+jzIUFK/cUX22mEvBcXkpMvwxhnSkeF2wiYbOUVmJED6A lixUHu5H74tJtlvW6hqwC2FkWUxFupbBjLLUiJmNRFkplM3KtCRzWMpb/lHAZvC/tSuit/KLE8Z 0ec7wz1Q= X-Gm-Gg: ASbGnctSnszxwvmPmjW35NtpkNHZ2PDiTyCtxM2wKkX0Vft1iAvV3H/jFua4JRf8uYa DYti0WJPzZ418Vum6m5/b8By75huWOzkU33+nZzZYKMeZUIROb+q68I8MnGw1w5FDfgqerXmGWc SoJmGATao0HrL+quG0dw2lXL2dnGevE6HVFk60YG5pSwXLVBFLFb6XTU9LIRH7gFX+75aqvqjlQ VffwCL8o0i3pp2s7x0DshKbXAqelpaHiEiVsFZQ05IVQVEYLc85LytiiMRx7AAMvbABS1COtGhj +hGaEjWhXOkqBNpLEHf2a6LXpMR23gWOkWLWf849bXNprda1KodcE8adPwQs42/OdZxLfH4aH3u M6TxqXOEpmKTK23STeBxgNeCDAMjnbhHEpkUIasGs/IM28oTu9P2Rt9z2vIw= X-Google-Smtp-Source: AGHT+IEi3n5LPTz6mYFsuRDWdmWrgvZdAllAbpwOw8EtstWIhsx/xgYyz2/8Ut+nj5KlfthHPw5Jlw== X-Received: by 2002:a05:6808:211f:b0:40c:5b58:c9f9 with SMTP id 5614622812f47-40d073ccd23mr1493081b6e.22.1751639129235; Fri, 04 Jul 2025 07:25:29 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 071/108] target/arm: Fold predtest_ones into helper_sve_brkns Date: Fri, 4 Jul 2025 08:20:34 -0600 Message-ID: <20250704142112.1018902-72-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::236; envelope-from=richard.henderson@linaro.org; helo=mail-oi1-x236.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751639617641116600 Content-Type: text/plain; charset="utf-8" Merge predtest_ones into its only caller. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- 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 5b5871ba13..492e42acc8 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 Sat Dec 13 22:57:49 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=1751639643; cv=none; d=zohomail.com; s=zohoarc; b=exryhEZRguE1+YF/ol9DMoV0tXdBz3BBpXytKcCH7E42Wq6lx1LPX0TzS6bjZ3XOxSL0xGsXOCl1Evsl9NclTUo5KHoTbLcAm2ghGpomwR0NsfAtPK8Y0ALGBFmXMVzQP686ELg4xieALS6kHZSLCf6mMgQkaTYHFm25OHfxjXc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751639643; h=Content-Transfer-Encoding:Cc:Cc: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; bh=/H2t34ohcFGW/1kwGrNHnmjU3igen0lRkevftL37hWY=; b=KcR9BesyDwKARYDXKvbQLoClsqJnoPEMPEPklhjolYsqB6Rp28Od6BpkWvEL07st3YZ4LUsRJY0dM2msxfXlVcpYfR0SXVgR74ymC4XQXfQUZ5CIfHDB8q/fNLniAEaPGRjfVpjfCuYBlQMl/7S9UG9TsxJNZigbQvUdByhO9qw= 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 1751639643358274.3632698235833; Fri, 4 Jul 2025 07:34:03 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhRT-0006lm-TV; Fri, 04 Jul 2025 10:31:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uXhM9-0004jp-JN for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:41 -0400 Received: from mail-oo1-xc30.google.com ([2607:f8b0:4864:20::c30]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhM3-00089S-Tr for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:36 -0400 Received: by mail-oo1-xc30.google.com with SMTP id 006d021491bc7-610d86b3da9so260860eaf.0 for ; Fri, 04 Jul 2025 07:25:31 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 006d021491bc7-6138e5ac5eesm310233eaf.29.2025.07.04.07.25.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:25:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639130; x=1752243930; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=/H2t34ohcFGW/1kwGrNHnmjU3igen0lRkevftL37hWY=; b=irOo/OS35S8wEnwo+dcMKEHnZVUNuLZrECG4y++cNGBbKX0HO8kZFS3vmf3F0MIKhe /rFaD3oW6B1DQCH1WFAFORUrefxl6uDhV2+AUJ1cKTKfXR3xFEkA+jOJL0uIeKPpyNLl +PCnJDKz4VVZ117GD3XZNSb6yoiBCCLDzNQaXmT9rADPcjbx0Q3gWlC8e/xgzNnO4E/F N0VAFh+cWW4CwKHVtWz2RjtgyMYARV9T9FNA8C/sbWu6UXakriEp+YYkFUbsMoSH9mAt +EDuIP9PbKH5R16z4xV8Qni0vZt0f2kQtpnMShaIP/hWt4XK8QDLEHpJHvFhALaZJVHC dHOQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639130; x=1752243930; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=/H2t34ohcFGW/1kwGrNHnmjU3igen0lRkevftL37hWY=; b=ndjTXc4/H+k9jEC3pA7wKSv/IFsbz8PQjdPDgCMPyJCvanIHXPDNh5X0MU6EAZgQkU ofCjEJbXhXdzx2kfAvumYI6vhgmP5ls852cTx+sn4Im4a2GzXxVZ5T3CX6+HUV+Ki8sF rtnhoZ8ow+sjqOh2TVoh+dbm/raBGcuyt9eMWETwjAi4mHpngHSoYd9/LVR7+yjMtFN1 H/32KtYnQB4baEd+QsgMDC8GgF96gW0p94a+GBMcfXIMNdrZ9FZ+Lk0lbU50M2qeoDkH gch2zfPZwO55hv4fAv4dT5BZ0Fiwg1cVh731XmSsyQuQN8TGKGnvdN/snzKthK53B785 +RjQ== X-Gm-Message-State: AOJu0YzRbgNDHbl16ZsIg8Hdrdy69Z/v7U/bH2i907fpRgdYvTpWVM2I 6ACUHnnCtzQ/J3oKKTspkedfrZVKk8SpuS0+RHmV/yqB8rLOBXEJrGrmGwzoY8xHMjD5cUUCgEM YfyP/VhY= X-Gm-Gg: ASbGncspavaVEvAYZvMu6CvVLeeWdlvpotvWVK8Mdx/SKgnLidoB9QICQSGmZfgadVS 7+kkT5SJ8sBYP7Ck8Md2hSr9B2fiz3RW6Oy1rNqJRx0DJQ/zskRKrn2nnP1WEHXW+94LK8IHCTY 60g5CRWCQOmvlwl1i25dhpPFWFhG32fq5ousaoohZYNtOoH/3glmfWxaM5OPxF6BuKT0XlgSdhi HxqsjIrx43kMBNKCHvcftBkaB4+NRFzuY3evTecRpn7TohvRTaxDSkCmGFUCj9UNTwqboNuvQAw t+pVIG+Uvmw5rvZaH1jNKaZPj9aDTUSsrCFPVa+yErZi21hOpSRosvbsF2IuDg00qbnIVV3IVzQ 3U0oV3ijxfqWzB3qmPY1NwkWkePQNyJ1XoCDSRWsjB37nCvXDvO4eDYfOrSE= X-Google-Smtp-Source: AGHT+IEPb0l3DoHIRB8uVGLjMHDqjE5z1nJQkJcLAtF0z+I1YFTtqoW6raKkcntkFxIaQlO7JN76kA== X-Received: by 2002:a4a:ee98:0:b0:611:cab3:5822 with SMTP id 006d021491bc7-6138ffbca7cmr2137580eaf.2.1751639130128; Fri, 04 Jul 2025 07:25:30 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 072/108] target/arm: Expand do_zero inline Date: Fri, 4 Jul 2025 08:20:35 -0600 Message-ID: <20250704142112.1018902-73-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::c30; envelope-from=richard.henderson@linaro.org; helo=mail-oo1-xc30.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751639643859116600 Content-Type: text/plain; charset="utf-8" Expand to memset plus the return value, when used. Signed-off-by: Richard Henderson Reviewed-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 492e42acc8..a62a647f3a 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 Sat Dec 13 22:57:49 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=1751641028; cv=none; d=zohomail.com; s=zohoarc; b=A5h/OL5XIllcYUgPNZOXeqo4wHVG7d2uYrbxTphsqXTAqz0phKKcO15f+59ESRsv9JSxZ2t++JlPv1kDujVHm1C0Oj8ynMHa+utLyut/s4bw8zJ7cPNXDjtoXPpD2m6hE9EXfXSfJYFoT18ppqpLLMDmOTm3/P/fJf9KAHoyddg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751641028; h=Content-Transfer-Encoding:Cc:Cc: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; bh=KLxGKgXk0i72IBBIKzoJmYKjoJRmgOO7veT/d3JwQic=; b=BEJ/N2MaO46QPbdAyHdGWrTCCgAgYTzR0zUZrhL3kTiWpa4uQD/Hh7x2c5hQkXdnktDIL6NnE1mXNL6YeuwK2ueJdFsjRg08lANnY3b1hxacCjb/uJ95xKN2vSdkGxb9y2519jAOsdlwXXzIwoIibnwHDGjrgj+YdI1rC+UM/Eo= 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 1751641028844507.27188045427897; Fri, 4 Jul 2025 07:57:08 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhUB-0002qF-HW; Fri, 04 Jul 2025 10:33: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 1uXhMD-0004pS-F0 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:47 -0400 Received: from mail-oo1-xc30.google.com ([2607:f8b0:4864:20::c30]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhM4-0008AJ-Ev for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:40 -0400 Received: by mail-oo1-xc30.google.com with SMTP id 006d021491bc7-610d87553b6so521572eaf.2 for ; Fri, 04 Jul 2025 07:25:31 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 006d021491bc7-6138e5ac5eesm310233eaf.29.2025.07.04.07.25.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:25:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639131; x=1752243931; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=KLxGKgXk0i72IBBIKzoJmYKjoJRmgOO7veT/d3JwQic=; b=ZsskRs2JeeCoTws/9vtWOyB3Q4ROGPXE2rBodtR1UrN9mD733DrI3X/53soPyW54uL 3TTSfgKBIlLTKEGxZWsVvYLyrJOm5QhrdVg9nOaLOdkA1JmJKslbUeeMGPV2q4gPaN87 Pfw8YG9ifab1a1mbve7wYOs/nHF4KUZckyTQ1khVNBJARqvvzV7wrGepfBkcL/cyoNRY DxNNy6e/oFpj58V1YFH+sCDC2A2LTjQZxLUD44U5DBUSyrw2NAG1RmOzukUcfbnvqXkH 1jmnRMAcHi7rBTMd0IwadLNHfV7CznxFSNdLf3TKaiNTkN0GmVznhdKqO/fFoLk9IHct Bm4Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639131; x=1752243931; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=KLxGKgXk0i72IBBIKzoJmYKjoJRmgOO7veT/d3JwQic=; b=wEVlDmG1c6CX4gDNnaYABjbne6QjPKXfn8W9R4zFxu9VqmJ8YD9s0uZkEg+nCsah/F JqaYCkVSXFWKJQOCPzBtpMEqK3axm5WeS0uODMIP2Gx0dn7Xpyx8X3W551P4LL31Xmlo rG5DKSafnTBvrcoV/dW/wI/wZKAQIW4jNjl71EpB8a/L4vgdmyAJlfKCOKMH2gxhjOpx B2jHeXym/70j84mbip6+IcU/+JdEeof4s5BSkWUz+C9sqd4KEoZVFyXJnk1qthB8KcHL LvcQLBchGBMA07keItILE/l7Nz0wbv2uOP8kLZWFzpykFY6KhzGzrNc2Q0KBZcj8xG7J zekQ== X-Gm-Message-State: AOJu0YyOwtciKSsnE0OksfxXPCqLQ8H69s1ejDlQYKOBf0w6Sd777IqV UECT1a82PY8bLfqYj8FFXmIxpFmRE2ooa20OAceVQGxUNRC6QLZih69oNOCIQase2mrjbE+aJ8a CPpoWSL8= X-Gm-Gg: ASbGncsqV0rqo6LYs2sH3wr9fU2IFuC2fL5Hryyh/wIsv27046qWKtEBC93pCBDXB7m pO4TkjQZsjqN4qg8UT6GLOlRIACPVl6Ss61IhPwFsEFq1Xeu6e977qF4Urq8OVuxTg+Sja7hiN5 afK032e8k0WGZjxnRxIWj5LeoWq6Q2+s+cTbAxtAHfKV76tiX3wGYPNA4SjFyuqqiaEbok2i5eG BHa/k6ar86eiercn9dXmjw9lZT3z+mqZIer/vs1nNK+/OfcDbJ0FywwFK4FgcA7J7o0bP368Nf7 je+g4cH5ssmxlnim/7viBTrdkDSmitujDmuMzhP0tYuNiriDg6Mh0nQBhGs0vx3Kx3TBWrXoV57 ToHRMje8qyVAUW1BObxBHUhncE+TFoSQyCn4FilxQyHHKG2z6 X-Google-Smtp-Source: AGHT+IFWLiMqb36n7W69C9mVSUC3BMx487QaF9Z94zhZQnHJU0FnhDclxWxuTA6QSf2BGmrkh9OZXA== X-Received: by 2002:a05:6808:2124:b0:401:e67c:b3be with SMTP id 5614622812f47-40d04a2815fmr1945797b6e.4.1751639131031; Fri, 04 Jul 2025 07:25:31 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 073/108] target/arm: Split out do_whilel from helper_sve_whilel Date: Fri, 4 Jul 2025 08:20:36 -0600 Message-ID: <20250704142112.1018902-74-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::c30; envelope-from=richard.henderson@linaro.org; helo=mail-oo1-xc30.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: 1751641029530116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- 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 a62a647f3a..741d04309c 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 Sat Dec 13 22:57:49 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=1751640521; cv=none; d=zohomail.com; s=zohoarc; b=IYYoWjmTvwUxuN5tU9XMUulit5Rv1LtPMNTsKC8UVfvBkSu1CZkQmDtCrIPxa2peQ1ZCdwv7wcDLrBCLOhTSeXoQXzl2j8rd5k07n3OZlG5+mbHt9jgA/rMl1KeFOSa9oQBc+y3/q1GTU1nX8hvKrRUIx15kfsrBRzAWV46fnSk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751640521; h=Content-Transfer-Encoding:Cc:Cc: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; bh=BEQcB1/UqEbBB8OYjKzTOMJUu4ZO4MlGo9qVante+Ao=; b=TTV/uhanpVaLJ4v3qt9IMg4yRDOjAsIYyVyN55YxcoWBycIge9myIYpXt/NgbbLEgah5wR6SLUd5BE7JGkrBX5OFulimaI4ssqaX00DKADo5q3CJZ9g8EnVwFZ/RnJhq2M29NEqEeTJFzHFDLyhPmxOhxv4kkm3uIC/EJ68dlxo= 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 1751640521386346.012555149244; Fri, 4 Jul 2025 07:48:41 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhTZ-00019c-32; Fri, 04 Jul 2025 10:33: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 1uXhM9-0004k4-Tf for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:41 -0400 Received: from mail-ot1-x32c.google.com ([2607:f8b0: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 1uXhM5-0008Ax-C5 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:37 -0400 Received: by mail-ot1-x32c.google.com with SMTP id 46e09a7af769-735a8be4ea9so242228a34.0 for ; Fri, 04 Jul 2025 07:25:32 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 006d021491bc7-6138e5ac5eesm310233eaf.29.2025.07.04.07.25.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:25:31 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639132; x=1752243932; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=BEQcB1/UqEbBB8OYjKzTOMJUu4ZO4MlGo9qVante+Ao=; b=q5c5kDqs7FP2TkfuRA7Or/rYB4UM49aheV2n55sUuw9FpMeTB7E7kxHqJjLgTOL+cY IxC1cVQ/WmKE7FXywUwRYOKfKuplW1EORanzZXbHeLLIjPNCv5LRpuTeOf7P7JX+ojTV RI5mO8IOoxKsLhJhbraxujRclng2K3nUFLCOJozKHoUvgjlaNlNVEIB0ZF3NPuy1vJfC sI7+IH0r++hdQpsW7F9yTVKvDVW5qGxyS7VPXgY1VjeD3P7ha9b4XlLCnLUKmipOLB0t IEBv/xZpebtMVBodHKZXsJNP7wpugDTp0uNlYq1UxK1P2SWymcnIny6RbrOMPxzHNG/J ZNvQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639132; x=1752243932; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=BEQcB1/UqEbBB8OYjKzTOMJUu4ZO4MlGo9qVante+Ao=; b=AVpuBL09N6NtcqezMf5Q9yIgq7gZdY1Wmw0zovfulZ/hIgh+r9QVMEu97DdRGJQdht keXgiLG+oVhjU06/SuKrWBlc3G58kBxobc+6aHOLjeTkxeBce6iZ+jSjmAFBYkmXCykn 0XrHFB4FiBLEMtwimkVYttaxNlAagkDP/BaC9RtDQrzAkeeG+8JFq4wW7C1zNSY38Acf tmGCTJ0N0v+Bj0OrSJ4JMxqrFKZ5YqEoDCAgHgWEWnETv2F7T1DyM493LV1xSpf21FJo 9df0mASzRKnRmwHOho43TL384r74xxyJMehQD2OlHoZXyCjbSXLVm+aVAjE1TAlXy+mT mEiw== X-Gm-Message-State: AOJu0YzLfeUUxyAH8I0DgXNqpC8pfU8caSS5+14YOZZElXm1i8QHYuDb CVfLHenz/T8BwulFwteP6GHAHZ+hOqqaNiZEd/rxbXxysBWq2fisdH1m1gfxzYU+DfN/o0/k2kb 51GDibC4= X-Gm-Gg: ASbGnctanfUyScItBtH3jhnt7Fwb2+8lBHpj2tq1j2AEX4kpTDOPIWDrNRfIiT8mG3Q rFqhpAdksGk464tOf/3FbzKcL5EPKYE07cUT6UmLXx/Po4ZLqLY27MWMcUCYRCQk9/0NvbsCfH0 OZWLwupDBPXkESt8on5dFrPuH4uB9aY6IjLPBh7vws1d1j27R9zhLI0Yp8zP2lmGtHKOLRCYcnT yUqF9LXA2lJ8m+Ka7D3M/SPykvFL0f2EtjHbXcFePkWtXV0QJMYGtf6F6dHlNWrOuHNST8phlQk nRqJrwxOmo1t3AFcZEjnT42k4a4Crvi2N1ZqJZ/TPeVYokW6g+C8Za9JsBWmT8fiaiWJITRjdkz hVmIcObTYcEhT/rnjdTzPfyVcRKJVqkM5YpfErjjGWUMzdIew X-Google-Smtp-Source: AGHT+IEQFeyvEF0LGOOD1QdtPhdFsvaO/T1sqTybhYh2WMgI9NQfx7d2/jFMDNJ9d2dYG14bPeQ90w== X-Received: by 2002:a05:6808:3090:b0:408:fbb6:f4cb with SMTP id 5614622812f47-40d04198e5bmr1962397b6e.6.1751639131908; Fri, 04 Jul 2025 07:25:31 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 074/108] target/arm: Split out do_whileg from helper_sve_whileg Date: Fri, 4 Jul 2025 08:20:37 -0600 Message-ID: <20250704142112.1018902-75-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::32c; envelope-from=richard.henderson@linaro.org; helo=mail-ot1-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=unavailable 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: 1751640523493116600 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson Reviewed-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 741d04309c..5e11e86e5e 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 Sat Dec 13 22:57:49 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=1751640606; cv=none; d=zohomail.com; s=zohoarc; b=YQ61hfpnyo0Z7ph45LcKHfcm2AJNtUmSh7lPetbn4DruOzjT+h1OrnDo/P7wIyqHTnx/CVBVPM6AUf3W53U9Ogf8Y2QssFgqvxGmp+d8WqgUTi00pIhwUkzjgH4j31Z9SMQTOfoalC2wrl3mds6OIWnt+yLFMlvIhDLrmxfyshs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751640606; h=Content-Transfer-Encoding:Cc:Cc: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; bh=uvmVGiggaJVnD3biVZOgKJf/5fGxdVKjkB2gcwvGJfg=; b=le0weDCG60zJmcWAyLRxIb/WdLoIh0MfHC6GVqGJvh+HvOTHzv/VSW/O3iuGVBB25juacR23RDs0TPxdMeJ4N4d4CNrOndOnxVziCGUok1BSahI5lGzE2B+yrD6TG3CeK81ZZRGB2WXAMnT+3xUfEzyp3fmjWi3ta8OqOW98+FE= 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 1751640606403278.29160939230394; Fri, 4 Jul 2025 07:50:06 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhS0-00073X-KS; Fri, 04 Jul 2025 10:31: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 1uXhMA-0004kK-Uf for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:45 -0400 Received: from mail-oa1-x2b.google.com ([2001:4860:4864:20::2b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhM6-0008Bm-II for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:37 -0400 Received: by mail-oa1-x2b.google.com with SMTP id 586e51a60fabf-2ea080f900cso303443fac.2 for ; Fri, 04 Jul 2025 07:25:33 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 006d021491bc7-6138e5ac5eesm310233eaf.29.2025.07.04.07.25.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:25:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639133; x=1752243933; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=uvmVGiggaJVnD3biVZOgKJf/5fGxdVKjkB2gcwvGJfg=; b=WVwyLve0llLgLZOICYT1tUrZDl0meSxR4w+XdcesBqDxEpOUcJ5XpcWVSYIgs3BKYn 54FLnBvNgUKWQD5uAEwvqXN5OZWNLgo9gM8VZslPnJFDIpc/21Dd6bUGIsBTsjOTS5ho n/ycnUMgUR2GLXMFnaBIVJ+0wkpQSKerkUoJHjImG4X0e9Q7QvV2sT8ZrlNlRl9xTgdA 114PT6QeaU3zkwJqgTbLSMpGLfjn/AL+EmCV8Ly9jdDysciDEhBn3M9fCuBIZHPMs6m5 kzGxeFro0GeKuGYT4Hw4ERjQ8JCn85Y6wmREJ7XrXZTzpHszWajkTuYGkEbalOp4qfqv fSyw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639133; x=1752243933; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=uvmVGiggaJVnD3biVZOgKJf/5fGxdVKjkB2gcwvGJfg=; b=KJG3g1Dugkc651IiRFed//BXv/Sfd+pA6Oj0C3PPruLUV7P0CI7vDIwEQfTDzzRNMQ Ai11Z3wEIMH1XMufwKOcjOcXovt/uvX0P2N7sSB9E2CtjOZQeSIfMrP//8zI2YP3oPGJ soKdpg8yklbyMUPIEOXHwq4V78JN+FSfxQrviZx5YsDtOSXXZ+IT6/z0Asw0ETFNqwVW mctX7fTNIVBGJPbXouZdeSAAC7pBpI2B4p1d2wVfTQuWkdlxaL1//Fk9feAVHuScBgPZ UonBqxsHvRMDtCr4uuY6I8WIwAoEAo89saX7ki8xhUG0e/BVVF1xBPk9Dezh/teMDDlE xoiQ== X-Gm-Message-State: AOJu0YxKfhNeMI2Uj5z6YNwZYhIa4moG9g19JbMWnm8qr3wHuHMVj54R dAaaSfg9G3bw6NRHYwAGhrXt1qHgIMDm5rxYeKopyNAmp2T5FcphNSOSMeOu9B5LDgCqUDVk3+w PgqEXkSc= X-Gm-Gg: ASbGncuA78eY0/EtlUbYYIC1nivAkZWxHzNdefQetFMNjQ7QZu7q5wE9t8oaux0X5fo RCL+D+RY8TnkM+WVoPi0TPm3KW8RkV+W49ZTke7FlLgK/Ijiijrz7HZoDws4001eB+UWTy0nOjW oGfFjd98LCjaCaXDMR5RefovSNBr7sO3T4Rvse4gTZTkuwDItxa+K2fSJ549VntMFjq57icNkHa Avu61fAAIGuxSpo+y1T1boAOXn7lyzt7z7arTxb8JBxlb7GvJdbbsXGUEnt+MGN+HH859jPA8lS o+5LPLr8jjIkTY7x2z9fSzFLvON1Bi0qeDxr6FmK2NnruL010AjncwuAVjIsQ9WD7tP13oSwzg0 mnbR0VLmQ0Lmrg+G73qbfnn2vaQqYs1nnVWcQJFYFMVEgLRChD2ujmxKgMlQ= X-Google-Smtp-Source: AGHT+IHziEzKqF8l8Xn6X9yuF2pNtBUw/zYC0hPxtSMyeoLZ59jkB0izpUWzug8JVjX4da/ja5Cjag== X-Received: by 2002:a05:6870:eca2:b0:2c2:5c26:2d8e with SMTP id 586e51a60fabf-2f791e49cc4mr2343740fac.16.1751639132705; Fri, 04 Jul 2025 07:25:32 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 075/108] target/arm: Move scale by esz into helper_sve_while* Date: Fri, 4 Jul 2025 08:20:38 -0600 Message-ID: <20250704142112.1018902-76-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::2b; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x2b.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: 1751640608664116600 Content-Type: text/plain; charset="utf-8" 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 --- 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 5e11e86e5e..b8f3fbb816 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 210a029ab8..f74f2bb1b3 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 Sat Dec 13 22:57:49 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=1751640912; cv=none; d=zohomail.com; s=zohoarc; b=jhiQjQopknkq0AFPo7ZywdmmUCPrxBnKeC0x/ThKfTfA2810dLp+UQt63AhD7tyGTB5bcTFIAkop6mUeNyDAEUWYHBV4ZsEsEOcAZVvtEtZMuKyYebJZ+P+QNfDrhpE5qFWrY7q9MKT68Wh2KDHaqp0hKKTQ5FkH5T1UssEkqkc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751640912; h=Content-Transfer-Encoding:Cc:Cc: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; bh=7M+33dd7YK/uBSmGNZCHalStsXI4uV+LuCtvO5Pet7E=; b=mI7gr0ch99S+ETVKZUQbuWVgxHM4cWjaZOJ3eqLK6hvUzBHN333J20lZpBIpLOxK+WsVSa7eBgRATPBrEy9ZOKFKXheQNwyEGCYqGPIwEd9znONXBYfUIu/plnGC8NKevY6oVEtcBfUOgAblMWkb26J9m7HR1E80QvkEtx7g9yM= 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 1751640912598555.892574981591; Fri, 4 Jul 2025 07:55:12 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhWE-0006c5-0g; Fri, 04 Jul 2025 10:36: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 1uXhMB-0004kh-G6 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:45 -0400 Received: from mail-oo1-xc33.google.com ([2607:f8b0:4864:20::c33]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhM6-0008CG-V6 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:39 -0400 Received: by mail-oo1-xc33.google.com with SMTP id 006d021491bc7-6138aedd718so618965eaf.0 for ; Fri, 04 Jul 2025 07:25:34 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 006d021491bc7-6138e5ac5eesm310233eaf.29.2025.07.04.07.25.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:25:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639133; x=1752243933; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=7M+33dd7YK/uBSmGNZCHalStsXI4uV+LuCtvO5Pet7E=; b=DRLddnaXf6O6pGQzYnx44GuO24vTu/HEopdw4VoHpvSWNhbOsKyT5VlWn4JvqQkSuG IECKROxasdSQG0uCKYR5mGeK2QRmpv47t343yleSkYFyfbGPTLl0GGwog3fJZKM+09jX 6jx7oq2Zd+He07zHq8/+8QQVwRObFJJ65Dr1h/uzYqwvidk5/v2q2nGXBHe/ZyiiLb1O EsM1g1nbBprP3Uc+FKV2KoKcopoirmNdNAlRmELP8VxZ/VUey7VPwKElbUfQtyF4AGQJ D0EsO2oD3l72DNnblsnsnUqWEgvGbspmasUjhUvZ9R1C05DE+T4Lz5DI2UH5SoiFtDRF gI2A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639133; x=1752243933; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=7M+33dd7YK/uBSmGNZCHalStsXI4uV+LuCtvO5Pet7E=; b=enTZjAGtDKmSaypx+475OwRtDO4RhGNbLBe0swI9jaL6Ir0WUGV5mbkGpeqdKG2+5P beqSBYBqUpRDzBn7G+bTbtcHfkWiMfCqtMQ/hMNDXbz/9/osiE1xSu7bFIl7x78CuStu otjzu0EmoaGctxNuTk/DKwVMzKy1ljSA+Hy4/Lx4MFpJtOxg3mAKPrWG13cvVoqMd6bh C1V5Q/QlQ9j7T7ZOuAWoN2vxcjDj0NGW7qxYTIuXgrsE8mgr5MEbbRXqIacuxxnAZcDo UJuASvbdD96gBXDNO8W9NWP1RDLFdKH3bzFpPiY6DZ1sdjHwKOrpgGuVIAayTXLJTqDR TlfQ== X-Gm-Message-State: AOJu0Yw3gGAHP7FEJIznx85zbL9ucRdUCPpRpr9YpgQcCkuXQRbXnKjD mqrzWnC9tdrHO8fIe2z4tynAHb/nfQqhc2uV6f4yPx2wFEZP5MpDq1Yh04LaCtbYVjIZ5aOr7A5 UV3D5haA= X-Gm-Gg: ASbGncu0B2Xj9kbDufkZnoLbcBMYqa1wP0DE+pQl4y4NM8Vni6qo1QmgoGCXZaBCezf Js7Ba0RGf8UG8e3OudlBI0k1aSsYo+j2qKa+zaOdcTgbQ5mgxy9fR2RxVJGe6wXpcT4s58dmoZr 0/82GYd7a3VDIxqgBEAJowFKdzcoBfLw37DjzwjginyIvf4hlWtgBlLH9JhxhQftDOnE9Aanfv6 sL3eC0vZ+0mSrulHjO3zVcYzLlKT5xwx4JmkNR0kdiicILpNGZh0FheMNA1niNaLxV12BWoXaDa dibe8MIzIVXe1wlt3Q1naI4A7XKrokzp9iV2Ycmn7ZQW/7bqXK33kmYUW/uqs//tm8KHKpduGkx fouOnWbRfzz3NwGQQAOTLp1lk0HfN+amOOI0uJHpy1KbwidSm X-Google-Smtp-Source: AGHT+IGD6/BHqUwgmWL/ACbDchIYaMvz7/tPrSg3hlgX60DStktE+4C9s3SHs8/DYNXdL+BHlOhQRA== X-Received: by 2002:a05:6820:4105:b0:611:758f:1fa4 with SMTP id 006d021491bc7-6138e86217amr2380048eaf.0.1751639133498; Fri, 04 Jul 2025 07:25:33 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 076/108] target/arm: Split trans_WHILE to lt and gt Date: Fri, 4 Jul 2025 08:20:39 -0600 Message-ID: <20250704142112.1018902-77-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::c33; envelope-from=richard.henderson@linaro.org; helo=mail-oo1-xc33.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751640914303116600 Content-Type: text/plain; charset="utf-8" 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 --- target/arm/tcg/translate-sve.c | 23 +++++++++-------------- target/arm/tcg/sve.decode | 4 +++- 2 files changed, 12 insertions(+), 15 deletions(-) diff --git a/target/arm/tcg/translate-sve.c b/target/arm/tcg/translate-sve.c index f74f2bb1b3..62d3e2efd6 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; diff --git a/target/arm/tcg/sve.decode b/target/arm/tcg/sve.decode index dcfc40ef44..c90d975ebf 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751641047; cv=none; d=zohomail.com; s=zohoarc; b=DkrQQPirXtHkJttZloMGjabxvcXsPfwOEXk55nmbAccoDl08HQpn8D1j08/NyWeKIX5l8varCbeki11HdcPtvIj45BbL7MGdDwP6u2Q+GR3czsRv/7CssuWeEBxTnjL5hHarIlwDJDfwsUtjX4uiLQpHMC3CGp+nEUYAN0plVzw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751641047; h=Content-Transfer-Encoding:Cc:Cc: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; bh=sorSqm7J6SLZ7V/7UMO5+5Rzi28tdsa7Du0nld/DrRI=; b=gfyzbhBLtIfbB5IjgXgsSxkyu5asGS1dPN+r9vUNoG25bE+Q9fbK5OLnofYJjTkYz966fBWMJmg7MDx6vjmT8+Wkzh1JwE0WR5ovfdtrVopfUdiz2ZjPsRGq9gTUAcUTqvIOEnLdlhHZORe5ix/6GOAgng/1W2++Yk7yf8NvYHU= 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 1751641047282882.4923475692785; Fri, 4 Jul 2025 07:57:27 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhTn-00022V-Pp; Fri, 04 Jul 2025 10:33: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 1uXhMC-0004om-4T for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:45 -0400 Received: from mail-oo1-xc33.google.com ([2607:f8b0:4864:20::c33]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhM8-0008D2-04 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:39 -0400 Received: by mail-oo1-xc33.google.com with SMTP id 006d021491bc7-610db3f3f90so562092eaf.2 for ; Fri, 04 Jul 2025 07:25:35 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 006d021491bc7-6138e5ac5eesm310233eaf.29.2025.07.04.07.25.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:25:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639134; x=1752243934; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=sorSqm7J6SLZ7V/7UMO5+5Rzi28tdsa7Du0nld/DrRI=; b=KN3aJTl4s0nZSXjMcuRVgEI2gG6nW6NGgDMEHcf/zLz65J0GiETA6KBZG8EBulE00g aIjGdCbPH58Y2mK8euEDZqwzx7citwF7ejAXyBTaSzyYmlOsIQWXT5jmUcnSl1oN4vjn 8NPJFsNsiVPU1zaySl6aLxCZ1HkAEithheA1L72AxGYKT07Twy7tgDdE65vJKEbvKWM2 0eWxVc6CJmLHeMr2BH2yk78D4Zo766sR3ZWj2itHnqH+lBZvGRWNotYSHP31I2mLuaeD WQIhT20agkHuiT3ySxiRZ+jpJ00DnGtung+Lo7VuOVEvcYHeMPpuAbPZ3mwCCSpoNSKZ GZig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639134; x=1752243934; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=sorSqm7J6SLZ7V/7UMO5+5Rzi28tdsa7Du0nld/DrRI=; b=CtFNqwhWEvkSRhkOgpIxOoC3srZR9oQfcH+AbMiWfDVHqL74hcJ44bppaQKWIR4QWE sKZ6cHs/El4yUUFY3sNlrs/havUKvVvIIsDpmRWaViPCzZdaG5iJQdgFa/efZ1iSpexM mJzHeBIpLVEGKU5lsfWmg9g0V/fpFDFz4DfMMQwbuEuDugX+RifqXRrC2UK7lkXM2YMj F5IdDfBOB4br2Z4kV1ydr50CGNqTOGdgPCPCJnFXxarXYcAa4tqbQqy7Gsxc02kBFCLm T6RvUzjzDwKnyj9qHQUvNZhK0fkwA45Gyywmz2cNJtRyfw1XF516LN1VG5zcL1Zw5rfy G7tg== X-Gm-Message-State: AOJu0YySML80UTav9LHQ+iUZhjoK7Ps9c1YHi4OmHI8p2qGwnSOt42gw gsYvgDyj+mN6Aw+38L2RNflWQsOG62SXULE1YQxzCkC9Q0ISGVaJbkpINtt4R4nHMZhpdlr5+5m FK67YSr4= X-Gm-Gg: ASbGncvI+5qZ370n/5AMiLBX9g+15GS/nSMVLmyRj8A7S5Pjg9lgIz0d9bBMMpXHoKW b0hrVqsCc8XC39CaB0SwdkX25rCVIE+jQ8a0X0VHYgWWlcD9PpBn5DtAKG60RmXDuVgVyiJo788 qj8ifZ7DjKnpjTfUDzC1XF/hjriteEcyL03hKg4rFo3TG00s/4oSCYHbfS9+xAmE4OuOpWk7hn+ 7Sjvd0fdTVlYZpCpaJ3toOFB/0Wi+hj0KZhe/wrqpBlHv++MphDXSCkW3aPCNnW9xU7mLI3H/oO +41rgzOsKYbrHLjs8FPY10w+zqvj/mSLCw9P+U89xqyLtCWxNAXMzpbgzvAq6gJK+L6VcLV4+Bg RwVnqa3Ygrr2wwFZlaugXIJkw5dLPKgPVD5+fWWy3m2R9AcXU X-Google-Smtp-Source: AGHT+IFmyVqZVips0Frizfy9RziUG+Oalr5MK1MZeLYTM0wRR8N3Lg9bh60efQrof/ti/gKVcq9IdA== X-Received: by 2002:a05:6820:907:b0:611:ffa0:3863 with SMTP id 006d021491bc7-61390056a60mr2126308eaf.3.1751639134363; Fri, 04 Jul 2025 07:25:34 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 077/108] target/arm: Enable PSEL for SVE2p1 Date: Fri, 4 Jul 2025 08:20:40 -0600 Message-ID: <20250704142112.1018902-78-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::c33; envelope-from=richard.henderson@linaro.org; helo=mail-oo1-xc33.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: 1751641052051116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell This instruction is present in both SME(1) and SVE2.1 extensions. Signed-off-by: Richard Henderson --- 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 62d3e2efd6..cb60b533e9 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 Sat Dec 13 22:57:49 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=1751640556; cv=none; d=zohomail.com; s=zohoarc; b=HNpLxZ7c/bNFk78X9oP8kdJOxzdIzLshlCNoV8oEpydHigcwmIVPNx2jN5MUb3/psojCLiuUZE+yGD4+N76FlTNXHEBQafYLZ9M/t00NYlqz3qVpJ3m9rblqUAE4Y3I8RwUecJLbx5V3ayEOyPkgoPhsbCsDsvOZT0nWIbfP+jg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751640556; h=Content-Transfer-Encoding:Cc:Cc: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; bh=CY8GPK9LjD5vvFu1A4yXRIWcAh0FAk2ttUM/giYYY2o=; b=f1dv275RsexeG8+SvpgcrYumwVhOQHqBs11AqVsSWvn1t8XYDNcb2jUU9uK5AwhEdf3fx8T6Q2qEGHkSzbA1KsywG7/iv4wPHO0C6JKJbT5GEccpI4RCU5kGGEWerGiudss9tabMuzfhBfoT8OYDfRtbKp8sbPufQGGboq2eh40= 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 1751640556383352.2914765165026; Fri, 4 Jul 2025 07:49:16 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhU0-0002b0-Sl; Fri, 04 Jul 2025 10:33: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 1uXhMD-0004pU-NF for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:46 -0400 Received: from mail-oo1-xc33.google.com ([2607:f8b0:4864:20::c33]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhM9-0008E1-CK for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:41 -0400 Received: by mail-oo1-xc33.google.com with SMTP id 006d021491bc7-6114114daddso500762eaf.2 for ; Fri, 04 Jul 2025 07:25:36 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 006d021491bc7-6138e5ac5eesm310233eaf.29.2025.07.04.07.25.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:25:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639135; x=1752243935; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=CY8GPK9LjD5vvFu1A4yXRIWcAh0FAk2ttUM/giYYY2o=; b=b2fr6xug8Yd8HH0LGuwEfGrc4BJsGrQvs9FcHyv2PPMJbR2/4a80civbXD7scPm4SW /+hVZX9mc6UC4OPAajRFFG7BjzUbs5cHYRCE/S793T/8FuCHvVPPHomnmk5pfv0pn+9X ReL17/wW9FQhbGRx092S0JpOKtWyNdyA3LyRXK9xM94LKp7j0uH1UdN2KeT+AfDQXn3G P+Wf2vGCekoMZrHc/0z5q43ckh/7OKprGyBZuwesef4fvB9VH43bZN/NiFWxaMW8vVys /M7QWCmhCFUH4PrnWClxAiyrrNDcP8VmGHP1hO76vCheXzhum31If+knfXIgSgivhx1h E8VQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639135; x=1752243935; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=CY8GPK9LjD5vvFu1A4yXRIWcAh0FAk2ttUM/giYYY2o=; b=BQk6sT0Y7rsN2t58ByBrMsF3XbvEd2ZoizmrFdWMi/88Xq4jMW+d8S8f1hz38kXKdN 6xZQ3ivinGuQDko+b+dv+U1X88N61Mg7HClkWzvz8E2IViLXMUtcAodC+tD+S5UCtYum NYdRY8oxdojTNBaejN6zM5ezeICFsoHAkZ5Jp+hUTpz5Hmrt2OeAfsrjWaZTeBOXo9Zv afpHP0TR112vqEomEJAWMYBV6egiZWK6vJXJ2KNgvRdGP5iyuBcckiXckmz5/lYJPqvu PtorrHWuKwaLGtN2Z2ngSYfLTzfTtYQx8nhYbd0lmCZMjZ7vqXIbKjErKyvYOhQF16/a ytzg== X-Gm-Message-State: AOJu0YwAf4ZfrEAQe8An/IwuXQ8QU10VFLT7koh8fJugWF/JKp4Hy3J8 zMkE8RRUaDn8NzAt6/RR+GPoYL4shG+rdE5fhz2GxdQb15K98w440HVfFmgNx6DXTE00yNMgCQC CkgJl5L4= X-Gm-Gg: ASbGncuFcwskF7f5v3CmMe/0tGVnlD0cM2bdAZX/zCKfqhhIXY2NUMB35quz64yrU/c 24rpBpD0mVLfoR5fniH8kSi8HFPaEK7ZCMg+CwLrh2SS9VSr3Mj45vR+Q5I1XozzJj68X8FiLWx Yixs9ktPTjQTTHcv62TgLus2M560Kje1h7uQHbgJZLTjHY8bc7Fs5jFOgMRAPMr17EZiG5aFaOt Uw99sUcTFrzdUbRaX8XWgDkuU0xbOQi0+kF6AJ4o2zG6Bio1H64C3cc5nlNWjEcmJFfIC7FuT0K 7OpFB1VycuN7fqbQPOSU+S6dZoc3VkU3UPfK9Pxz7RRtccZTX9T4D9iohzJIDKeNo6OsK0eFd/c Bjmu/3DSf8qfixzKKsrfV7O1C0RYbl9SNphxl9muDaDnIfarTm7zK80VbgyM= X-Google-Smtp-Source: AGHT+IGJzOhDMr0P378vuCGmuxu4MVYz/oA/QT8Lv4kI1cc00b/uGQOcUAhyA7rAd/eO213HmC3/0Q== X-Received: by 2002:a05:6820:1e82:b0:611:befc:38e5 with SMTP id 006d021491bc7-6138fd6a38cmr2315074eaf.4.1751639135429; Fri, 04 Jul 2025 07:25:35 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 078/108] target/arm: Implement SVE2p1 WHILE (predicate pair) Date: Fri, 4 Jul 2025 08:20:41 -0600 Message-ID: <20250704142112.1018902-79-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::c33; envelope-from=richard.henderson@linaro.org; helo=mail-oo1-xc33.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751640558081116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/helper-sve.h | 3 +++ target/arm/tcg/sve_helper.c | 40 ++++++++++++++++++++++++++++++++++ target/arm/tcg/translate-sve.c | 14 ++++++++---- target/arm/tcg/sve.decode | 8 +++++++ 4 files changed, 61 insertions(+), 4 deletions(-) diff --git a/target/arm/tcg/helper-sve.h b/target/arm/tcg/helper-sve.h index 0b1b588783..eac23e75b9 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_helper.c b/target/arm/tcg/sve_helper.c index b8f3fbb816..30394f4880 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 cb60b533e9..de6ffe7511 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) { diff --git a/target/arm/tcg/sve.decode b/target/arm/tcg/sve.decode index c90d975ebf..968b2a57e9 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) --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751639962; cv=none; d=zohomail.com; s=zohoarc; b=epudjox9saeqo0p6GZvZ0COGcYP4jqNFwVhoHbsZLzGaOqv+sS7ffhQokc/buklvJPVgYY9C0+TeRNVuZbjt2qR4MDBfv24t6cYX8ZmRX90IoUoe6fr53vYjzPd0XsMV9EWekj0rmS6UyU8WJ2B5GuWLPhzUdjYgqHlqus77CrA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751639962; h=Content-Transfer-Encoding:Cc:Cc: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; bh=KEEu9uAFVYBdsgUoug4RC8XfISDvGXxH1AhvjO6N2iQ=; b=FsR9FfXXAUmIwPHQdbl4o1elF2QXgzZVZC8RmfooaRQVsuqi0+gO55VsHR6i8ZSZs4v2feoqhu2kG2SHGFz0oTn7QbJUL2muWI7fQ7004kMh4EXEfBPufSM/ptb2XjTCGPG/NJvud15IciS27ZZGWZ24jeyXdVuEixnaP+5ec3c= 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 175163996224293.79606131189564; Fri, 4 Jul 2025 07:39:22 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhT4-0000nn-Dp; Fri, 04 Jul 2025 10:32: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 1uXhMF-0004pj-B1 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:47 -0400 Received: from mail-ot1-x334.google.com ([2607:f8b0: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 1uXhMA-0008EG-LE for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:25:43 -0400 Received: by mail-ot1-x334.google.com with SMTP id 46e09a7af769-72c09f8369cso380270a34.3 for ; Fri, 04 Jul 2025 07:25:37 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 006d021491bc7-6138e5ac5eesm310233eaf.29.2025.07.04.07.25.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:25:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639136; x=1752243936; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=KEEu9uAFVYBdsgUoug4RC8XfISDvGXxH1AhvjO6N2iQ=; b=TcDn21v9hOR91EfTUx5SR5z1seuudEnuAXSvKpvycNqppp0E9dYSsDlv92N6OZ6+Cw TB+9akZMKmTucfKXmxLbujQwYOzAr5yx24hxjnpAQW/QwkBZ1dJxYJFoboSkeP2UrnFG jmCfz/6jB+CC9XwSOT6mHZGf9fJ9ySUI7SHfqgfCjb1/QeKdtc/EU2IlYsZzfUK1wm2N EMB97/PTT7GvtxRKzKjtXE8EVhZFbvI2O6DJPU4eMXVGSVk3hG4vngZYVA02HlVBJg9I MKSa5XlCjunZY456j2WXTAiuRmlgheWONSQ+APyiWWyMV3DyjWV7wenrcgy3XLJJ/64c 1DiQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639136; x=1752243936; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=KEEu9uAFVYBdsgUoug4RC8XfISDvGXxH1AhvjO6N2iQ=; b=H8UNfjWra7ezzXhVZ3yLoeaNVn8Omp/Hm+wWGWi3rYpVrEcljQlKxV1WYl9EG1ci7e U2u+QdPAWbpklYeu3GTpaZFZSZcCB5UMc7MDA9CbzPS+YYBNFxRVV4tf5DhRSTyiebCK HUw3E1tpXGSzw0sEV9U/4kzS33ewKuD9eLIB0s6GklELx8PhqQk1/vcyj8XfVfbSBXeO AzcqgQOG0WqiHuQIriQQ+2r9k+ZU4/SDJPboyq7KL7IKbv0umKPJFqk4m1t7VjLapVZq xKESbu1qj+dyT1DiWkVnxfgXPLRnx8OaXqoTzUqxviXOHNOPQjOwxoSfLtw02XmzPwAH mTlw== X-Gm-Message-State: AOJu0YzQjhJ4CiNRVNNMNqVWIde/6bW7lv234L4RZhlV1tLykRYBg0ng O8ndOOuTZSgVEz1StRw2pQz7eHqpP5EwKoUZB2fnD51QtddXhyfFPrVTpduTjmc3Mk4guIVzXf4 6kDfSmNY= X-Gm-Gg: ASbGncudpMlvu7O87y+YGHuVNJ1KpSRGgsU1lJKPqUTHDb44I2T35ZwWTUxLdKIeGCT Hx77Aezz+/APKhgkE55YZAzaXSoRCKaq/3TzF//WAC/LqciYnCfuYgCQnL/6v5LipsbxGdICWdc jG6gsqCSJw2nrr24btxLIEYkVE7kw2qxFoOW2SuxwCoT8mgc8+HqXs6jl9EyFFfN2sdo88xA9ur UOvU+53sch1wDZbNbWAxGazCbZtwBXKTQqqHa3VsDHxdtXTh/E8BbadaEvLI7Vi3HoIDvIQGUZW ALf7G1dett9vU1zDguAQhWae+BfQATfaUVORJot0uffh/ktwe4Ohi2Y0qukTLEE3a902H+Eb3G+ UWVrVptnSr+VPtZ70biE3hG8tBxH2n0nar/IJ43aj/FT0i09I6ZPfEfF4hLE= X-Google-Smtp-Source: AGHT+IG+ItawP1c1bJEvGUSZFNLoGTiow0wr9WEqIIEls9p5wczfk5t0gTLlPQlh/jtPi1Dc5Xq5wg== X-Received: by 2002:a05:6830:7190:b0:73a:6904:1b46 with SMTP id 46e09a7af769-73ca48c9cb6mr1822689a34.8.1751639136186; Fri, 04 Jul 2025 07:25:36 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 079/108] target/arm: Implement SVE2p1 WHILE (predicate as counter) Date: Fri, 4 Jul 2025 08:20:42 -0600 Message-ID: <20250704142112.1018902-80-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::334; envelope-from=richard.henderson@linaro.org; helo=mail-ot1-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=unavailable 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: 1751639963902116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/helper-sve.h | 3 ++ target/arm/tcg/sve_helper.c | 53 ++++++++++++++++++++++++++++++++++ target/arm/tcg/translate-sve.c | 22 ++++++++++---- target/arm/tcg/sve.decode | 11 +++++++ 4 files changed, 84 insertions(+), 5 deletions(-) diff --git a/target/arm/tcg/helper-sve.h b/target/arm/tcg/helper-sve.h index eac23e75b9..74029c641b 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_helper.c b/target/arm/tcg/sve_helper.c index 30394f4880..713642d4c8 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 de6ffe7511..c93dca224c 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) { diff --git a/target/arm/tcg/sve.decode b/target/arm/tcg/sve.decode index 968b2a57e9..389a72d824 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) --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751640677; cv=none; d=zohomail.com; s=zohoarc; b=B00XGkrxIyGQKnWOk7L9mk2MDRjqoPkg9uOBtje2ByX8Fs0JFUDCAQ49EqnNcFTUs6VaUF9tPF/BDVQpKazXlcT3D1X/or3rPtCPKT9uWpqVDPI4txVr1Utd7F/Eq+LU3dZzB6hsCTn5/L9WPajOQSfudMGDvBs/jZYBfuGjsv8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751640677; h=Content-Transfer-Encoding:Cc:Cc: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; bh=mE+L0a4Yv78oWbvNtAlRfemO9fxwjgUBwoQXmXgyee0=; b=XoanJGoeMW1VJKNwt/XvUX3AtHMqSYVocpeqwZk0TFIAS1rbjnO2jkX5sA3ijtNh4GDipVXpp9UrD4poaRSakXhWq1fEa9ZIph3TfytiUZelxeiqbLPUlno8VynZVFeCNE1BO5RH2qyH5qnb79O79dmy92ib7TdCWeccEDuSBPU= 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 1751640677666532.7139827713213; Fri, 4 Jul 2025 07:51:17 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhTj-0001oB-J3; Fri, 04 Jul 2025 10:33: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 1uXhP8-0002O2-71 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:28:44 -0400 Received: from mail-oa1-x2c.google.com ([2001:4860:4864:20::2c]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhP5-0001Jc-Sc for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:28:41 -0400 Received: by mail-oa1-x2c.google.com with SMTP id 586e51a60fabf-2ea34731c5dso864243fac.0 for ; Fri, 04 Jul 2025 07:28:39 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff55633sm531448fac.20.2025.07.04.07.28.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:28:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639318; x=1752244118; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=mE+L0a4Yv78oWbvNtAlRfemO9fxwjgUBwoQXmXgyee0=; b=Rio9bp1Jdd5OE3gIF4RwlMyd29XkIYF8aBl7MN3KE3fMUf+QtR7sJZqGzmvgAfMfvs O3hsWzs9h8SHoWpP41xpDNRr4rs7YmilH1MtOo+LJ6l6m9H9xjLee8u0vO/gQi3P/fDE SoauYTPswF+QTwl3JhQI+Sr4c08kYqCOkO4+h8BM7PPAqdR05IspoKR+vC1pW3quxd2F xAMoMTEZ/3Io+F2KvG6AwOsgyTaEcqaJmwsAHMpyNT9p125N5J6ucbZesXWH+d/2Y8HU QzIPYvl5GFRCz4Kc8EfWyaJlbHPQ6PZsHSspN8jDwwmm210Hl9XzP74iH7tLssav2utm 57yA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639318; x=1752244118; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=mE+L0a4Yv78oWbvNtAlRfemO9fxwjgUBwoQXmXgyee0=; b=s/5hdMzUPrf3YIU4gfu3uzXmfdHS+7XzUO4r9oZMsMEcM67pCMlgj6gXjAYQnxydRq dtEeeNNbRf2/8KNg00VBd88oYm9rI3mcVwn9Ns/RajJpzDdO4qQRZLok+ydpbp89NJ7+ 1JKFc/6tY47Bpc5SnBkPsPpkPfyLHabf1Y/YNhrVCunbn3jaOlAd2yM3yFntAJckK83D rCQDzLdjllfAV4BZW5S8vX6I7jhitRY55pt18lemqDMLOrSJQY2SCL9hGALz6DLbLMQl 0xnQupWyL7vWnhSwcbApswOHyxVVlTFULjHZBSQpNvNPgBgSxrGx9XXaA/9h6K4c5I++ eGnA== X-Gm-Message-State: AOJu0YwHde1lNcPEgkL4n6ykS2ua5d8A0rT4jOkrzSCVbiHyDpoz7b1h yKJigxOveK//UwA9ZL9JR+DXiq7sF4Y4G6tl2+R3nc7X27SbcwbIOu+QSZ94Q+4zlz8+tlqgH4l OIv1gi1U= X-Gm-Gg: ASbGncuw7gigl/mifLMp5c0YM3bVbbx2Pm8zGAfUcuMYX12HQcWB17t3xR1I5BZ4rWE fVeArkdY1sMu7t1lvhBw28o3teQQua2yUvil51lGfQFGq+BIEWTDlC5r+QKzMPdzTxsQ7V7U2ar xiub5VbmIAc0prKyeO6HrxvOfLBAKYZeKzysSFXXiumr/eXW+R+mIRcxLoFdUQhXNbvymoRtRfS 8vylfsrHk0cds5QmDgj1t3mAssWnl8B+77dWw7vjDRf1we/yoZOshXA92IuAWZITwxxrLZsvxDL wcqDX5hG74cEMQ8O7YLFhLaKJKsWtdKaFCmLwzakAaINuTIBG18LvMhsb6UkVt0tp07IYb1G9kz /FltLNNkQmgKTQa0ISkuWtRNqPaua3WLSyx9SsLo2a3nGqUFp X-Google-Smtp-Source: AGHT+IFKuLE3sJdiOEqZtPhJKeuA/kD73zzPZkg2943XOxbjYQ8dGX1toEnd9/4frRLHReyBzQQH7w== X-Received: by 2002:a05:6870:ac0d:b0:2d8:957a:5163 with SMTP id 586e51a60fabf-2f791d4ecedmr2340480fac.10.1751639318497; Fri, 04 Jul 2025 07:28:38 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 080/108] target/arm: Implement SVE2p1 PTRUE (predicate as counter) Date: Fri, 4 Jul 2025 08:20:43 -0600 Message-ID: <20250704142112.1018902-81-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::2c; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x2c.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: 1751640679490116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/translate-sve.c | 16 ++++++++++++++++ target/arm/tcg/sve.decode | 1 + 2 files changed, 17 insertions(+) diff --git a/target/arm/tcg/translate-sve.c b/target/arm/tcg/translate-sve.c index c93dca224c..651b4aa378 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) diff --git a/target/arm/tcg/sve.decode b/target/arm/tcg/sve.decode index 389a72d824..3517efb31b 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1751639797962191.50062630769094; Fri, 4 Jul 2025 07:36:37 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhTo-0002D6-P5; Fri, 04 Jul 2025 10:33: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 1uXhPC-0002VQ-Th for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:28:52 -0400 Received: from mail-oa1-x29.google.com ([2001:4860:4864:20::29]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhP7-0001KL-Su for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:28:44 -0400 Received: by mail-oa1-x29.google.com with SMTP id 586e51a60fabf-2eb5cbe41e1so851409fac.0 for ; Fri, 04 Jul 2025 07:28:40 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff55633sm531448fac.20.2025.07.04.07.28.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:28:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639320; x=1752244120; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=LD9najaMFjOAkiy2y4i6SBLnurGGQSXD1R6zyckM/+g=; b=oAWpVrq+JphQA9SvN0Lc1XZyGnc5GPJg8WtKD3CykXNmcAeK5eumVbx9td2OkuHfOH 3PUhqwQhaEArjWmGbhGRXvgcZPwOefLId4It5hVrAgrpoVpbkv2B9FM3sj3PsPk2feCd tgA+vc3eV8bPh4UKqufxR2NljSRYhfbDbJzfmo/a4MKunc2isCVr0i7ac4ZfMU5+BmxO SwEMJsDk8KdwlP22DMudMfi0wdjNwVnGItCH40W7zDyCkonsGSloFzpQ/hrVvDPlI+f9 19uIBB6suE17rPcwLdQuY8rTi3zse3C4RgwRNAV2jtybOBZ/87tB8uwo6AeSngeO/YNY SSJg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639320; x=1752244120; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=LD9najaMFjOAkiy2y4i6SBLnurGGQSXD1R6zyckM/+g=; b=qtqn0CZtshP5Pz6GclgiC7cDum3A7tm5GRusXhwjOut3mqtAy9N8hDwJYwZPeoR3hG 5Y9/ON4mAZwMM9QBeeOcr/0YmdHXVu8TyLw36y05vSBrIB/datp0XjQZqpvWcKGPgemU SgNiXRdtuNJmWatJI0Ajjt/HndLURf9YlDU+sOc0v6sQRJreFT+HqPMdMyEwoCBscGu2 h7xvh0kAePiE1OzmpDcu1O5wlbkpFirMxH12EJ2OiQaEcS6YoLr51BrVEsS5+7CytZfd PtIN1QKF4QrBiQn7z2MSPz+2kJkDvC9G50xToPXFbl9IoCVPPwlFd2Xiz1DbZmk4dciu 155w== X-Gm-Message-State: AOJu0Ywwzj26rK18O6pSwD9WUb0polByLFWd4aQGXSlmx4XY8IDABcHV p2sot9sB+R8Rp4RtCwASKaSpczGUJNpfD23FMZxKnLdX0a1Un9TSUY8K6ioIdbeMGybGWNW80yq 6wqonyNA= X-Gm-Gg: ASbGncvZ88eX1URaIH3mvj1bDZdEzKFdfsQXiDl/Sncvz3d5dkBwVBDbb02Wv1/wIQg 2AlVI7j03Qk91g6lisNAaPlWmlPdIpLWDq6P7IyEsA3+tSVPfShe5r0QIytNWu47+S4k6jGyyNd T08IigMFanxdsC6bKe3U/gQr4uRTcgu2kE+qy8NrRnKM3KVU4rrBqBIBnwdt2Buzp1K1TThIekB BgaJtudP8x5/2DKUNUOl1c32xg3PNfLzrbNUGujSAPDpWqQZUWMrraFCHmpSRFcybgOXmpu7pjj DYZth0mGCs29l+NrjD5oAESiz94d2dCJD0ZK7m3wJooZVDo49cTZbwdZ5/5y2HwwvO4PfD7rtQZ Y5yGMAXpHtaYyKSNGbhHSWOi6eLlfgGbrfRinSzNFEunwOiLJ X-Google-Smtp-Source: AGHT+IFpxTFNUynWaJPqOoQih/4cluXLlIe4y4FBu54u+gfj5p7xSR3RPC5h+3BHfmJAJ481gEclYA== X-Received: by 2002:a05:6870:3927:b0:2cb:c780:ac52 with SMTP id 586e51a60fabf-2f796c3af77mr1675843fac.23.1751639319628; Fri, 04 Jul 2025 07:28:39 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 081/108] target/arm: Implement {ADD, SMIN, SMAX, UMIN, UMAX}QV for SVE2p1 Date: Fri, 4 Jul 2025 08:20:44 -0600 Message-ID: <20250704142112.1018902-82-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::29; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x29.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: fail (Header signature does not verify) X-ZM-MESSAGEID: 1751639799988116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/helper-sve.h | 25 ++++++++++++++++++ target/arm/tcg/sve_helper.c | 46 ++++++++++++++++++++++++++++++++++ target/arm/tcg/translate-sve.c | 35 ++++++++++++++++++++++++++ target/arm/tcg/sve.decode | 7 ++++++ 4 files changed, 113 insertions(+) diff --git a/target/arm/tcg/helper-sve.h b/target/arm/tcg/helper-sve.h index 74029c641b..5f5ecc2e0d 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_helper.c b/target/arm/tcg/sve_helper.c index 713642d4c8..625734fff9 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 651b4aa378..2e29dff989 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 */ diff --git a/target/arm/tcg/sve.decode b/target/arm/tcg/sve.decode index 3517efb31b..a3221308ad 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) --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751641130; cv=none; d=zohomail.com; s=zohoarc; b=dFAmB30oelseC4NkVryGNkqZg3jDQbz8bty6dE6zy3u3zucL4lG0deoRn7mmv+h25rTQv9QeCbIo3MvCwB3BkR7FXv247HrOafKbtcsF75kkTX1z2nVu10rxNTVEbilq81qN66wfdtiKYgSHQFgmBlS6hUkUUTA4OTqkUPASjLA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751641130; h=Content-Transfer-Encoding:Cc:Cc: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; bh=M/Z0QaESMiLPWMfgiOfCP9B9XT7+eJ9Wb4Gfz/S2ISE=; b=HoI9J9HR8iM6vDnz0Hs/qx9GODNoH9U8U/Zd/+mQytUtwMzXh+nY/kqF80TpsnKTxqp/9w4JXzx6JzjeO3PE1Y8RFM+2dd2bIKa3ryYYu2KQHMr6yVwUobIJbu7Pb53geD0/tUbNRF2fd0+keFBjDjOrL/HH3rjoIoXOK6dhgIU= 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 1751641130597924.8688091051777; Fri, 4 Jul 2025 07:58:50 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhXt-00009N-8n; Fri, 04 Jul 2025 10:37: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 1uXhPD-0002VS-0C for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:28:52 -0400 Received: from mail-oa1-x36.google.com ([2001:4860:4864:20::36]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhP9-0001Kz-6p for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:28:46 -0400 Received: by mail-oa1-x36.google.com with SMTP id 586e51a60fabf-2efbbf5a754so772419fac.0 for ; Fri, 04 Jul 2025 07:28:41 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff55633sm531448fac.20.2025.07.04.07.28.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:28:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639321; x=1752244121; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=M/Z0QaESMiLPWMfgiOfCP9B9XT7+eJ9Wb4Gfz/S2ISE=; b=xU3wVrd4OAZXNnAHwxgiHN3vdiC4ilJpNzmT3Q8So+aJ5GyZsRtSX2N8O73dFycbKS cPsUhfu8NtCmwGFzh0AogftmI78yj7ej4b5EWHMf0vPJR37Ki779GjCvVNF+13qiChmE k6jOY2Ja303R+OndjEdPpZ7to/cuTbQZYPQn7nVqVInRo7j8cQExdn4xIwZnjw1vWk6k XPF9Ak6BPPdm26EA/C0vGAUZBdTW34j92mTGzVsQJHgnKZ39nMOTCmxRlgGQghy8bWNE FCwXQFiVfPQnKLBUdLA7y8ivUSob6oN3tGQcYsqmTO87F063L0g2HwH0aWer9DkhOF1/ MJtw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639321; x=1752244121; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=M/Z0QaESMiLPWMfgiOfCP9B9XT7+eJ9Wb4Gfz/S2ISE=; b=cCvbvdf995UnDQ7/qx8sNk+EFklI5luiF5cOPO/XdGag2xqUTgA7F9HNdNGkPoCeDq m4kmvzEXy4Z+h3Cq4bzDhzStzMavID3vLYaP2XavG++08qQJ5CWoWJBGd1/snLFThicE 1oi1GJkY/uiuxOtfo1dZtX8CgvXcWqGXcqmdNvl6p9cIzCxSlpG/3yPGJI2ojHMmdSCy lNQgiMdQ3OuRambs8UsfLnc+ip8p3doTPvOH87zSWXD/jJd7L0KrxOVgbB34RKsncZo8 okv7bzVzM5c26C1hDN5yQb6NpDQwJvV21RU81jOoshQnpWOtGPlzWjGh5+sLUN2EpwIa PG1w== X-Gm-Message-State: AOJu0YwG3VaJuHH0yt9zq2moxyaC2fyNj2pJjh6YC7dJyYHLBjcfbJK/ csB+AaMloL45Q+XfwLjzEfTGeY/WnzwiBLV5Hz+f0f24WS/7pLXqa3/e2yAYoPSVETY5Ky5PsoH MuaDnpbI= X-Gm-Gg: ASbGncvUNgnCV8XVtNWzrhaDPPwDBA56QBkYAMMJy7vVliDTqZVrfsCgK66lGAYI2lq YXAvO39ASr0857C/ZzEgrp0H3oU4xiiOEk5O6r9k05CEZXKYoZtX1/Q0FNaGgd9g0D8+OcbFLNI ahyAb9e2GP3c3+ihuyrz3DKDsgUC66HUu96ahTB6CkZN8+5DbhopqEkT7npJSHxJC3pA3P3JzNl rFQeGlTyn1+mJEfYc9kZvgN+9XW6qXDTVDftr21ke+huWfptldUqOomv6lsttNhFxPPUCNJLkD3 pzWTzzJOU5jmtfTbbW2uyfHSdZ8rzDlT0FNXXcQZcbBvUHt/6YQgkirRu3Lfk88aWuIfLK/zSge f1402ASudyk+aaJ3fE35a16hbTPxoNtZXIT2VVq5ovm0+npx0p9NgEJ6R9pM= X-Google-Smtp-Source: AGHT+IFfIxWK6uAIMTJAfi0nrBiMcHOejTpyGRFmxqlmLs3DOuxDmUs0wPQ+IYpYC0UgrWEk6T6b+Q== X-Received: by 2002:a05:6871:e589:b0:2ef:98fc:6f59 with SMTP id 586e51a60fabf-2f796e50a48mr1933660fac.35.1751639320829; Fri, 04 Jul 2025 07:28:40 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 082/108] target/arm: Implement SVE2p1 PEXT Date: Fri, 4 Jul 2025 08:20:45 -0600 Message-ID: <20250704142112.1018902-83-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::36; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x36.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: 1751641133336116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/helper-sve.h | 2 + target/arm/tcg/vec_internal.h | 74 ++++++++++++++++++++++++++++++++++ target/arm/tcg/sve_helper.c | 28 +++++++++++++ target/arm/tcg/translate-sve.c | 36 +++++++++++++++++ target/arm/tcg/sve.decode | 6 +++ 5 files changed, 146 insertions(+) diff --git a/target/arm/tcg/helper-sve.h b/target/arm/tcg/helper-sve.h index 5f5ecc2e0d..ec82d0a4e7 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 5efd257c50..61c67bb35e 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_helper.c b/target/arm/tcg/sve_helper.c index 625734fff9..866f85ba30 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 2e29dff989..6ad4d1e289 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 */ diff --git a/target/arm/tcg/sve.decode b/target/arm/tcg/sve.decode index a3221308ad..b762257759 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) --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751641012; cv=none; d=zohomail.com; s=zohoarc; b=lM8XWt4Ghe1sLlgFyeQSxXExaaLoV62b5PQWDXdWund3ywDUKOxMusavioCimRZf40yr0fP0QWm+30jnnS7K18wHj2//WqBKLlfmSnayc0Xk/h04pIl9jKj+GVBCzFnPQgodFSq9e0xwRfrkoIGTLTmZctmDzhzJYdiuXUz28vg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751641012; h=Content-Transfer-Encoding:Cc:Cc: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; bh=29K9yY7dE+axUAoDft5EA1rREE381pcsMtG+hnxeQIA=; b=TCJpCwMWrLTWCcs0zQZmqdZabjj1txQrxakZUW2nZYUH5KkS6kdsb2mvZNPegbrc8sakvtkJvcKPILA1kzmN//cvYS7UjlP1AZvc5DBfM64hr/FLDUYKlX/KOr65+oXve+8QG/tp7m2jk9wQDXwxddjKthBVi/jw1rxxxuFsdpI= 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 1751641011975169.62094703290302; Fri, 4 Jul 2025 07:56:51 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhWS-0007Ez-Me; Fri, 04 Jul 2025 10:36: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 1uXhPD-0002Vz-Lq for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:28:52 -0400 Received: from mail-oa1-x32.google.com ([2001:4860:4864:20::32]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhP9-0001Lh-6q for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:28:47 -0400 Received: by mail-oa1-x32.google.com with SMTP id 586e51a60fabf-2ef891cd058so857847fac.1 for ; Fri, 04 Jul 2025 07:28:42 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff55633sm531448fac.20.2025.07.04.07.28.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:28:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639322; x=1752244122; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=29K9yY7dE+axUAoDft5EA1rREE381pcsMtG+hnxeQIA=; b=ke0Xg4Cp1bRGfDElZz3UwVbmSlAXzl3lAtHgry9byob9+R3JLSfgFbJ3GIEkkK9b1U iJ7lS3NsccPuQwIqCADNs4oJCuKhxxInR9HeU6cSjB5U0t91SpaPwSWdsARBM+w3Gf96 olR44XSlkbaFyfuwK3gEQDVXv8lLxjr+sZZMJyzCIc7WTM7s/ZVgvp16S+dbvwiIEdaB Vc12oJOMIxw8Y2HGzQqUMTJYLMKxXIIOYuwHTpvhZ+lO6G3f/MHUQHsgvq1wQnbdsgr5 hfclfRVznaNnp45eCukcx6flvMHbcqkph24qFN0Wsjl935OeJkXuu0q+vk3DDMX7cH2e LyXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639322; x=1752244122; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=29K9yY7dE+axUAoDft5EA1rREE381pcsMtG+hnxeQIA=; b=JtFIAd2CdNgvAKieabkCdKWOJ1f2XdQs+gRSuy2Z6QKT4uvZuhSkwaFneSoFSThOFi Tp6sVEOioLfangt5JYVTEQHfdyhK7OSNrHUuWwKdtOnkKM9IJxGzGZUEBRanp7SCSo63 cPfHUFBIt221JwZPELg/KkAIZ2yvGWbYQmAVQmQYMDeH9t+RrkORNUuZ1dmAuGgG0eoK 5A57LhJDaL6sDJBeiDD49ob5MJYJ5YDtD3pOS7jtuSD4k0ip95Z5/UsRWw6ZcFRCF1VX 9KYiX5pbzy2myRUSDL1eInvYB1xmUdpZ+EOQHVtNqzy7+znVv0X/p9tVmxH1bK6eEiyI J/kw== X-Gm-Message-State: AOJu0YxMxRVKK/QBFo7BdPn+yZlxJUVTfo/O8h+/dE+/wMUWYCw7NfiR WjlHUERmzOOqSekUyReJ1NBrAImvxltGhWOZU59eaZmsB7/FpJ/3vnfCRHNhNaEe2eNZwqXXNRI LeHMPphk= X-Gm-Gg: ASbGncsoFlzbPQLsWg2pdQJozVOLfufLNm08D5skoy11ydmMaxXqCZ95zpCBoLN65Tj npYopCLOnjRwrmUU1rQU225zRglGMeNNJ4xD4S4MNsl5dfIokNBLtzYMdDb2WKj4BA2w8PWyntV fOHR+Sn7JPwmjVHyeX2tvtOrQh/QPTbZRrEr0L+OKdUcj4ONboEKsdLPJXDNCKqmDNe0bV3MIOo zE2VAfvAhq5lbJgS7u+8Z7tG/IYJcbHi9cX4n/v+pvUDvbiz+CoCNdnT+SK3zMB6eFyvX6fEdoV sLJvkRMnFPOJsncbUWs2Xmv1Tn3NVd+SGbLAPeUKtcZMuwZpHJcZdCkaGYzRtfC/jAUP0si3u+P nhnKkLvf9dVGgFXR0luhpmSKOHeJqER4BjWaVOBcfuE2NHU0tBSXvIckLl9M= X-Google-Smtp-Source: AGHT+IGQjKnnXX8zZZqAm9+/5GrrVe/j/B5oHJA/GRDGXYUd9C994MwzXoULGwmScQ0up+A8vUiQnA== X-Received: by 2002:a05:6871:547:b0:2bc:7d6f:fa85 with SMTP id 586e51a60fabf-2f796b2ed9dmr1688806fac.16.1751639321744; Fri, 04 Jul 2025 07:28:41 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 083/108] target/arm: Implement SME2 SEL Date: Fri, 4 Jul 2025 08:20:46 -0600 Message-ID: <20250704142112.1018902-84-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::32; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x32.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751641013281116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/helper-sme.h | 5 + target/arm/tcg/sme_helper.c | 317 +++++++++++++++++++++++++++++++++ target/arm/tcg/translate-sme.c | 31 ++++ target/arm/tcg/sme.decode | 9 + 4 files changed, 362 insertions(+) diff --git a/target/arm/tcg/helper-sme.h b/target/arm/tcg/helper-sme.h index 78ba3d1f20..467073ea25 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_helper.c b/target/arm/tcg/sme_helper.c index 8a1f9fbf3d..c1166e4ffa 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 b6316ac716..7407597177 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; +} diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index c4b85a36d0..0a2ceea8be 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751640338; cv=none; d=zohomail.com; s=zohoarc; b=QFQb2e6vxolm359ll7HK/e7l/a8lNQZJrxkyVmlMY6X9Zm5RSw5qwri2mWZatgzgV2+e+Fhs33VISg/F5k80qM8HU+Uuthy3tx7b6X74Ksfc3zT3GSdEO2+zdVwJhGyoqDjLFKTGpT9t49rAbrGx94bC3A/91U9hXo5hOKgwHCQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751640338; h=Content-Transfer-Encoding:Cc:Cc: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; bh=uNmrtiDmh6GGDdp2GUTxQDgux/FBqGqQX9fXY1bHkWI=; b=L9EjlOrO5RjekIvazdiNq4PHep64gdXlfDwPZnF3TC/e99nM9Z0Ier3vcpuDf71rGN4TynX/my8PQxh2ExYqFgZIBpqDwu3SIlWoZctgBXdwvs3ZukBNytYxlrlSWsKHi0fBrd9R5b22VeRclGvLa4cRQ4kD6eo9B2IblE3R6Ps= 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 1751640338590704.3537796631485; Fri, 4 Jul 2025 07:45:38 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhWr-0008J0-9B; Fri, 04 Jul 2025 10:36: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 1uXhPE-0002W2-KJ for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:28:52 -0400 Received: from mail-oa1-x31.google.com ([2001:4860:4864:20::31]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhPA-0001ML-7h for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:28:48 -0400 Received: by mail-oa1-x31.google.com with SMTP id 586e51a60fabf-2eacb421554so354029fac.1 for ; Fri, 04 Jul 2025 07:28:43 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff55633sm531448fac.20.2025.07.04.07.28.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:28:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639323; x=1752244123; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=uNmrtiDmh6GGDdp2GUTxQDgux/FBqGqQX9fXY1bHkWI=; b=P2UrMOTM/TwumVqL4EddThz6LNMGPrqtsC6RMpZuDbQzhWtQ6eCxuu1xMRiuXDaIuQ Q6ujK2poszLiFlr28ZSDJUqkJaQCKCdFWrA8TWrFbSb8gFyO+TqFCYDXgQm4TqOks1cf VeWi/qNqnqMKgjZpuaRCZMr0Musb+elMsKIRBnyKVo9GPUSKzW9zDhZu0ttBL032+HCP YzpdLMP3/EA4lqki76eBd9S76ZCQkI+zoTeSB5+dJZHxZJzLI5ZFY8BZZuqKbq9oXwYp 41MTuc5k4KSlHsUPjU/iWD/T/8qn14iAMgr4oNZ4jmr3jDK3+nQ3qdD5qg4+6vA/uIxj F0Jw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639323; x=1752244123; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=uNmrtiDmh6GGDdp2GUTxQDgux/FBqGqQX9fXY1bHkWI=; b=FPgPMFkAcEGtl0/OUbBiPyWLXgssSKIgtLe+IMnU0z9siIsVow6WqRDqYmQANCAEwx ZgJmARR2fQ+Jrt53bOtpHnTiILbp/540L9MmdYLDWHzLlBnmMnai1cDBuGrBD5F2SVzP UQFg0lEQR1T8tuxgs1HFMMFWNuztH9Gjywh+RASVVUb67Mqt47WrciUQnZh3OYSN8VAY P55sav/vy9W/9e1sQLp7VYAikYdNuVwifWuuoriDbPsBndaWjtLl6r6AeYlLxBwZzxKd cGZGqVlUQD13gzJ6AD617Ev6R032QriD9XwGhHd2C3Vh9esfdF30tcq95eoJt12OF08Y 4tNg== X-Gm-Message-State: AOJu0YwE9K34jMiWvCA1gtNNWEEli6/hRuFshcvxlj585atVMdI5JgX/ bL+xUCYsBWmN5Ah0rye+C7HS8ZnhGSykNPV8Kme1moL2s82yCWual5Qo2o8qSjbEDLwY2KYjYI7 2Glpph04= X-Gm-Gg: ASbGncuN7KXazuM9n0BhCoLfiRDEMJEzz0gXA/yhXIu8qOrN4a/O/+Y2q3/sRv/hy23 XaBveqPfE0t5wA38xhEVxetX9ra/Ubvxd/O6ifGNFsiMs2GuataBrwhxpy8Q1Wy4d8Nb5ZQQ+v7 Tk3JV2fs+3MKQvNqeA3PoJvzg3HGrNBd1BulWgs51aAyO3JXGLB81yOkVsgI1aVlWmcAmfPCcKV J1iZ5eIa2055VRNtMgo1fhk8kPmWEcYJTrHIWbh/rUV9OHfwsHgxWBHJokPtC1Acmvb7QaMqXf/ 5O7o3RGB9TJZfn3mNoOweetNzEVBvgA6/EOXo5/wu5/qEui80Sy/D7PmCcaWYGeHpncUeJwqFjf 3EXGYdVEXgHux2zReEK/gny0zr4YyA9trBzcHQUjqw96EABMA X-Google-Smtp-Source: AGHT+IHXCUUSvanesAK6gz1CPcnFEta/WdkGl9YHW5qHU4aZIlqikbvBvtMbOnluw9tH74WX30pOaA== X-Received: by 2002:a05:6870:8289:b0:2d6:245:a9b3 with SMTP id 586e51a60fabf-2f791d8d489mr2681596fac.6.1751639322768; Fri, 04 Jul 2025 07:28:42 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 084/108] target/arm: Implement ANDQV, ORQV, EORQV for SVE2p1 Date: Fri, 4 Jul 2025 08:20:47 -0600 Message-ID: <20250704142112.1018902-85-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::31; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x31.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: 1751640340670116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/helper-sve.h | 15 ++++++++++++ target/arm/tcg/sve_helper.c | 42 ++++++++++++++++++++++++++++++++++ target/arm/tcg/translate-sve.c | 3 +++ target/arm/tcg/sve.decode | 5 ++++ 4 files changed, 65 insertions(+) diff --git a/target/arm/tcg/helper-sve.h b/target/arm/tcg/helper-sve.h index ec82d0a4e7..9758613b2d 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_helper.c b/target/arm/tcg/sve_helper.c index 866f85ba30..f47e719fbe 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 6ad4d1e289..2114b2ecca 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, diff --git a/target/arm/tcg/sve.decode b/target/arm/tcg/sve.decode index b762257759..ff740f7b40 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1751640891263551.5155124879936; Fri, 4 Jul 2025 07:54:51 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhWk-00086N-Qr; Fri, 04 Jul 2025 10:36: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 1uXhPE-0002W4-Q6 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:28:52 -0400 Received: from mail-oa1-x2b.google.com ([2001:4860:4864:20::2b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhPC-0001OX-EL for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:28:48 -0400 Received: by mail-oa1-x2b.google.com with SMTP id 586e51a60fabf-2f75f1c7206so365358fac.0 for ; Fri, 04 Jul 2025 07:28:45 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff55633sm531448fac.20.2025.07.04.07.28.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:28:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639324; x=1752244124; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=TLwhOZ7GimxFfUs0k+KKvvoGB8pRA1gs/A/RB7/ShdI=; b=T5gCEKXYvRqUvH9gypYgTTnk8a4I9h7/mwsiZdBppZBRSW4txSJhDTkw3rlFiTImsI 3eojSHrXyRSngqH0udUCqUJLbEpTVCkU2txu7a5NJV7Ne6v2J0dDsmOxTv/BuMlhoukQ 76hX9X6TKPNq9hUXDlghjuz0MAWKGVdSgxKRlNPZr0LOBuuspdgXLyKGbxmcLeRiivw4 1CxcBkCzmvsG0dEqTyEOVvDagPK5ManzOX4GriZHgxePRSESnVq0bKHCnw89QjFQhja9 XLW1KAH9HvUd921yB2oJHcX0hge8ip3K3GgF2P7GD7XUsPmO5K70FTnm51C9ht1ExPuv K/Zw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639324; x=1752244124; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=TLwhOZ7GimxFfUs0k+KKvvoGB8pRA1gs/A/RB7/ShdI=; b=ZwVVBCM7m9+VuDh4t4qddiFAmr4Pj6yOBTIk5inSQezeuw4m5/rtZ1PLxAE9cmgqR5 zd/I5Y4AMlh/LBGjzHsQ27LTeLylMw1cd1WEFwpEvsOHxC+K9bbWg08YrdrT3mSCGge+ WelvH1LqhjkzOklXXlVb235vyQPKEs7A9soB7QRIpH3INaWU+0AR1/jdCfQU4gmca5hy NQgEuTz2scd0zEoo7JEv6j8p1ST0F4ZSQ8CNkb0WV2o0IIQqtHBpk1t1VHaDHQfUN1uv 1kCBrQksnlGXhbN6QdVZBJYmbBFUUQPdzOUNF/dqRZ7zB7xY3dje6qTTK1QjbtZaE88Y L/pA== X-Gm-Message-State: AOJu0YxhHwC1atvZyoZUnMLFdw/5i/m/zVwTzAxNa6scWp4DHVO4H3Ao cZUkegejXscDOOWZQxd1WpnjhSyOdYDBX5JXlPuW89Noq0Or3rug2yGIWg1y5rP6X/OqdKePfGh 38LerMwo= X-Gm-Gg: ASbGncuqqEjWmRK1pyl01AYVW6LRdB8/4cVQKNyoWOqjmFrG3XuoRPYGW36twaGvD2M MY3fVoY49PFy0kTvAmRXWgDr20jVrdbtTIEhrprUZgCPVV4SW5704MqhH2EG5tJE7SayLC7mCu4 3iNhjHku4YTKCmZzZJeTIhvtTgmJeP9E6edQUSas9F864i4U6+GVtydu1aAOim6M6ZvSOcoyq8D NW4HIId6W1UrLi0XtjtwkN3uW7Dd2r4hItPWmp6lFlmUrmES/8JG0iI+3nxl48a9WKw1VzZB5ct DtFK866WgcbDQLJrvMh7g2nIcky2w6L39MbAS9rzkEf/ve2tZb/uS4NPn6rkihzd6a55UJ5UUfN 0UZHOSuBb4CA7CN+vtsUvPn3o6auPB5e/+vXTjAM1e/xCqMU91MPSevAwTso= X-Google-Smtp-Source: AGHT+IG4NZ7t641YEeBxwgOqfGibau63802wNBXQm0M7uzy4fxT2IoSY+ozYzfyB4iczGoimNu6PFw== X-Received: by 2002:a05:6870:8dc8:b0:2e8:ff0e:17d3 with SMTP id 586e51a60fabf-2f796d34599mr1654807fac.21.1751639324206; Fri, 04 Jul 2025 07:28:44 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 085/108] target/arm: Implement FADDQV, F{MIN, MAX}{NM}QV for SVE2p1 Date: Fri, 4 Jul 2025 08:20:48 -0600 Message-ID: <20250704142112.1018902-86-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::2b; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x2b.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: fail (Header signature does not verify) X-ZM-MESSAGEID: 1751640891954116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/helper-sve.h | 49 ++++++++++++++++++++++++ target/arm/tcg/sve_helper.c | 70 +++++++++++++++++++++------------- target/arm/tcg/translate-sve.c | 48 +++++++++++++++++++++++ target/arm/tcg/sve.decode | 8 ++++ 4 files changed, 148 insertions(+), 27 deletions(-) diff --git a/target/arm/tcg/helper-sve.h b/target/arm/tcg/helper-sve.h index 9758613b2d..906da384dc 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_helper.c b/target/arm/tcg/sve_helper.c index f47e719fbe..6512df54e6 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 2114b2ecca..05c0fc948a 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 */ diff --git a/target/arm/tcg/sve.decode b/target/arm/tcg/sve.decode index ff740f7b40..10cac2de22 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1751640066512229.7157036190083; Fri, 4 Jul 2025 07:41:06 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhYo-0002De-Cu; Fri, 04 Jul 2025 10:38: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 1uXhPG-0002WD-3p for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:28:52 -0400 Received: from mail-oa1-x31.google.com ([2001:4860:4864:20::31]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhPD-0001RP-Hw for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:28:49 -0400 Received: by mail-oa1-x31.google.com with SMTP id 586e51a60fabf-2efdd5c22dfso748963fac.3 for ; Fri, 04 Jul 2025 07:28:46 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff55633sm531448fac.20.2025.07.04.07.28.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:28:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639325; x=1752244125; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=XxuhX7jAE01wypOCiSa4edSMsIBxfbscXCFO5YQqXuQ=; b=dCd9yaEljcC4kA5vrbABv86ELmBZkQiE2E7rGc2CIraIy80aOJPVO/QIaKMbzdKN7y 5gd9DzmnbPPbhWYY1UWCqJs0OM9LkAIbkq+rnDLBNU0Dv4b3k4oJ/Vm9q0CToQ9xsOcX FgshwUuBYhK7QNcvu8OilnQlzXK8jnSIZF+7Z4DkbdhsdSXZBan5IDu56BriX2aAF0Km 4IgwiqLfM996+yu61vvcg+6d4rGaT2S3+gpSn0GfQdMTjtxxMbTV67qfr9igjD84070o ImD6qHPBVOXVzCUZmDHoePt3wevhMA1kj2pc4pPpWas5AR1NaMXmncDgt96oZw7aC8do 8F5Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639325; x=1752244125; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=XxuhX7jAE01wypOCiSa4edSMsIBxfbscXCFO5YQqXuQ=; b=s/3UgLGe7nZJxVqoId+/6oAlmaC0caSfriiJY5heSYKxbDe5GPxUteGZNhEyFJ0qbh KMuBjnSZ9yzOsToNuogJ15slhmoWOTCpGdoS5bSQeafJ7+w3aWxj6rSv9aUrHWtMtNwm c9cMD0Pzo/n0zZLKmM3UTNtr+rq3ILxR/8V0ptUVe3vDwe3ZXpjrX28jE4aj+60dw9Wx 0w2debQvCejycOqMiwjWkKD4NSBILvqfVqsXXzTGm/fQlhy/vxLZ/mCe6Q9j0XzJE6hr 3KPryZzZor8kNU5xXV4m6Yuo5KgYe7yQ6cLvOqOMhl7Rkr/UazzYES8DDf/RmfIDZAp7 j0Xw== X-Gm-Message-State: AOJu0Yy+zP9aCq1+NhTvrIp8Vdm8w7XYoAskNVqJ2aVWqRGnkBFQ2cnd UnEEYY1jzbUyL/CvuH7mMMcKcS5YzNzXAd0LScWUzVFTJlwG9Kvzbc9QOsss76MkCVdI7TKlMUr rvw5mEQA= X-Gm-Gg: ASbGncsRqqfu+lVvYHI012EZ6y7poQggBhL0NuKeWc+wpJd+7vOsODPJHmEquCVz+qe fFBjLkNI6a1ADZDwgyEekfgI/Y5EzN2lP2I3QLySI8BF6Jah5pnnjNS8Fn49xMRFI2+2XDJfoBG ZRx9Nf25tLNWUJDLBwuKl2dwjMp0kvvIcdsnZ1gYZPzQaalrH1qUSuE1g0DUcqD5seEWWE9jgpv 5KfYLXyQPYWBuqTVBVynTRWvAWI3xFngKQ1bJe2+lhXDFnTOWjy+NStXH5DQSV2AyW8eY890uzc /OPUdZ4hwXnBseug0nhmAff/mipHcVY2aLW8F2nc7xORN8VCPKWQKiVesa8/MV25eLmEzGiRQLd sV1QKFOo4i16v28MDIqE8ePHs0jkXJJeyIr3BHSFBA2Ow97DK X-Google-Smtp-Source: AGHT+IHoo4bLpHQrvEJOfvWAVSHKpqYJ27zhJU7DMwp/hsnOEqkcISUGCUN2C+vWk3hLStmlGZRl6w== X-Received: by 2002:a05:6870:d207:b0:2d4:ef88:97af with SMTP id 586e51a60fabf-2f796b86111mr1649502fac.3.1751639325343; Fri, 04 Jul 2025 07:28:45 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 086/108] target/arm: Implement BFMLSLB{L, T} for SME2/SVE2p1 Date: Fri, 4 Jul 2025 08:20:49 -0600 Message-ID: <20250704142112.1018902-87-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::31; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x31.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: fail (Header signature does not verify) X-ZM-MESSAGEID: 1751640067131116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/translate-sve.c | 30 ++++++++++++++++++++++++++++++ target/arm/tcg/sve.decode | 6 ++++++ 2 files changed, 36 insertions(+) diff --git a/target/arm/tcg/translate-sve.c b/target/arm/tcg/translate-sve.c index 05c0fc948a..079d310960 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); diff --git a/target/arm/tcg/sve.decode b/target/arm/tcg/sve.decode index 10cac2de22..0df3312739 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751640891; cv=none; d=zohomail.com; s=zohoarc; b=alBGG3diDLaLY1owQ0QxrO5ASeO+FuULWM78nv9Ya2yA6FDMSttUnzZTvzEcYxB7z4ikNO7kacR6U/1TSkHqVgZgv29faiVfwzMPEB26VP+0iWl6TnFQgaCdFRP60dZG5PbzebS5rYK+65KWs7ICmJBb21KfC41DtFSj9oH4aYk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751640891; h=Content-Transfer-Encoding:Cc:Cc: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; bh=AxAxIZ6VFbRMgHTAjv0FjgNRbnxh2+Wy+VDRxyj4mIo=; b=GBIbJoPMKsi+Kn+VBfO+5xKN5u2Gbu3qkb4bRz4FYgGj/YVxbw8v7VLrh/CLnOyQaObfIRXEw/dThsvTYCc5aXQc11zMh9gm4ZEvR7gj94gPC34YTsjRdO6LpH8Mf+SXfDcYWM2hYcoYS0gdx9Vi8VJoinD1miTi5UZcX/Tt7hQ= 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 1751640891482517.0514311855854; Fri, 4 Jul 2025 07:54:51 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhUE-0002zt-By; Fri, 04 Jul 2025 10:33:59 -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 1uXhPG-0002WC-3T for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:28:52 -0400 Received: from mail-oa1-x35.google.com ([2001:4860:4864:20::35]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhPE-0001Sc-8r for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:28:49 -0400 Received: by mail-oa1-x35.google.com with SMTP id 586e51a60fabf-2edec6c5511so332932fac.2 for ; Fri, 04 Jul 2025 07:28:47 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff55633sm531448fac.20.2025.07.04.07.28.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:28:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639326; x=1752244126; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=AxAxIZ6VFbRMgHTAjv0FjgNRbnxh2+Wy+VDRxyj4mIo=; b=mQidaMWvw2HT0j05e7FES9Y+lshRgPTRVofTEQzFgMTmTzm16IB3H4FYnP4NDNHyM3 EXcDGL10hkCTM7oso98YG+OqMuM+FTqv6PD0GwwiUMoC+kPp1kLXW3N7LwDGWHnPuTo/ kelv5YlSLEhcfbFHH0mxBtGGzZd4anMnJRI2D3lnbpZwNmFWrkfdpybKaIxiJcjZl7ID 0WnQOav5jJOLetw9P9iE2O6hcIztyqi5aXsWbuC17QuH7rqbe4XrTvJxN63ZmICg1kQo 9/Z1c3xr6K6lls66JklCtCmdJzToKVzY57fcjgFj898qTcS2/ow7k+xSn77CtP8m6OKr vjig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639326; x=1752244126; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=AxAxIZ6VFbRMgHTAjv0FjgNRbnxh2+Wy+VDRxyj4mIo=; b=Ftnq4MSHbsvcgzIrU9e8zyHt6ea6Ubtjz5ZJh8+R6SpAf4raIcE6Gm9+NuGzlQHk8a MP2Z+Iq+2BhIDV1Iw6rRd5OhN5+tUq87sQ9SaUbUPrOlfcnLUd7YSfU6RjN1gYBpeWUV HI1Muaa9tWjdPgD/r79XrG9ZxvqSF6NClW+kWQ4MAHdJveCWLNG3HaOEOsW2GQ250BUP XM7iu12JNQswMiuCgPT14QXPwqcKZIitlzKGIwI+hIRd2+AiL9nOwQekJrToPU8C/tzb n7b5KQrw4AEic71PswVD/bULoDv1ECUK5HbXO0E3Yd5yuGs+ZmtW35f6ULu9chV0OXnu FLbw== X-Gm-Message-State: AOJu0Yxmfx7mnMekasq8LIVhKsIi9H5C8G/q8y/s6F+qqUqQWwndwHlm au703WwLQSNGqAwt69RI1sziWun9P3XWHDAOuo8Pb/B0r3CszzQW+vef0+RM7mAB5arGkc6qWJy yIokPzWU= X-Gm-Gg: ASbGncv/HhNEue6y3OEph66fhYNd123jDjEE3o4BiomAww/Kqm5rUYOgmZumK3+kz7T 86Odq+qJPhh0y6uVr6/0brABg7yDDziQaQ+7tS7oSFPEuYKEW957MupICJiNY2kbZEhQ6hwVUwn HvkeCTnNqNWu6KWZEo9SogYLRvLMf0H7gUmf1gTLPIFhmFh2hui8aknohMMV7vuVZix0hq4rYAd w6leA31xqRnfZe8rvJS9mq3vDSraRtB9+9ocn/XO0yjnLNhP8r8fNe2Z1qOvMqxdJN+XR55V/xU QCWY0nexQB5k20nfMDFGCvN/oZNqUlTgH3u4NrwDKI2HA8ymhR8lO/elkBqkpRV6V8SuaWRSVSa 4oDB7MochqeMKARXTavx29vTxHjCdwNFVgh54kzrHdI87V9eA X-Google-Smtp-Source: AGHT+IHYETCRhj3IAtPiSCFg93VqcCWphcNCwkL8dzYC7W/Hk3u1bldxpkJJLC/XB428sCLLNOXUrw== X-Received: by 2002:a05:6871:69c4:b0:2d6:af0:8d8e with SMTP id 586e51a60fabf-2f79696b293mr1780664fac.2.1751639326490; Fri, 04 Jul 2025 07:28:46 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 087/108] target/arm: Implement CNTP (predicate as counter) for SME2/SVE2p1 Date: Fri, 4 Jul 2025 08:20:50 -0600 Message-ID: <20250704142112.1018902-88-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::35; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x35.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: 1751640892086116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/helper-sve.h | 1 + target/arm/tcg/sve_helper.c | 21 +++++++++++++++++++++ target/arm/tcg/translate-sve.c | 30 ++++++++++++++++++++++++++++++ target/arm/tcg/sve.decode | 3 ++- 4 files changed, 54 insertions(+), 1 deletion(-) diff --git a/target/arm/tcg/helper-sve.h b/target/arm/tcg/helper-sve.h index 906da384dc..733828a880 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_helper.c b/target/arm/tcg/sve_helper.c index 6512df54e6..def841fd52 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 079d310960..53db8851bf 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)) { diff --git a/target/arm/tcg/sve.decode b/target/arm/tcg/sve.decode index 0df3312739..db16849731 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751640095; cv=none; d=zohomail.com; s=zohoarc; b=ALVkkK5DERENnNXRe8V5l8KP3LOSqS2LncvXK+KhN7vVCedYafMm9riyKlvwWWfJKmXkMggymOlXPYedNq9eCOI6xA0uziMk4ALsncbuFoNIFbXn+/xrhN1Jz9JWlo3/OM87HG0p0epD1M2/2O+ZQpmCZkDE6M09eBEWvHVCyBY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751640095; h=Content-Transfer-Encoding:Cc:Cc: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; bh=mGt/IeQV1JU7unVXQVuY1VSCRAS3B0ec4CICad5URTc=; b=h1d9kbATcfLNYtcd9Z6pzTUM5a+Mjrdt2LjC0ESbSmNRFYoxa9DE9rDYbxSLLdKSNJw63syrbLRP+OjwXpUnPXuBAWSLfmjXeZOlYdvlfQE9HBIaUu78uEST/7VX2+Rbn5nnro5lSBUKiPeOiGGNpx2XG67nIqVA19xRE4PPuXw= 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 1751640095585691.8233225840569; Fri, 4 Jul 2025 07:41:35 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhZ0-0002du-B3; Fri, 04 Jul 2025 10:38: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 1uXhPH-0002Wc-CR for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:28:52 -0400 Received: from mail-oa1-x2d.google.com ([2001:4860:4864:20::2d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhPF-0001TK-Kv for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:28:51 -0400 Received: by mail-oa1-x2d.google.com with SMTP id 586e51a60fabf-2f75f1c7206so365367fac.0 for ; Fri, 04 Jul 2025 07:28:48 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff55633sm531448fac.20.2025.07.04.07.28.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:28:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639327; x=1752244127; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=mGt/IeQV1JU7unVXQVuY1VSCRAS3B0ec4CICad5URTc=; b=Ysfq78Nz6En0BU7ONnXKlqrz/E0QwkIKnkBqVHo02U+mxsEuBexfEDA+TLaZ3mJ4X6 rJdCSthHAXTN+D+Y8OGgoAQnZTg314Sp6Y8EnOlPO+JNqAktEnsNmKDLuhHMejnpl0B6 FqJsh8hkG5zG2NO1BElyQQRDUlwfZvdNI8sPo350nvzS/EA7PMS4t3ig88R/gbmk9KUS 24HVv3qejDL4x9cXlKbIxCtC3LWli1O/6LwyfNy1llba3oM55UrtKvnWnVLdxh9rjFnf 3A8+4/TtUYokQecI5wnbQcTDydq+bcLBzC0p9tTggst6YrK8j+y85HbL9EyQRIUNGbYQ wV7g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639327; x=1752244127; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=mGt/IeQV1JU7unVXQVuY1VSCRAS3B0ec4CICad5URTc=; b=mmK+skqjAinskx5zCtuPVIk6n0PlaTLj548/8+Pl57AX4sju7LRgZt0ohidLpxxGpW HEN3WJDUZQUXQMnrLV9B8GyUu0rQUV8ERpytkgcIE++fbC9pBXJPyrflC/9gscn9kw35 dg6drJzZvdc1pp/AouBkfshFOItFBabzVawoxVy+uZRdpLJCt9pZzPQjUh3621mJb4G0 wR6gqw4PSUrn+4InMyMoE2oM2hLaZVxL/XaefHMX1iVBr5IfLQRlrUwOkZ4vINT7TMje Bkt1bJ5w6AAHt9ObwU+tNgZqeHbTNuOwFu8y1SSeHnva24NJhLk3AvJManfHNXyJeWce 6XBA== X-Gm-Message-State: AOJu0Yx3I0uBCoNbTGndYEqXQWbv4TglSsSRj0/lpfoWjqoT0fqoGBKr TKFKKtsgd76P8uwAIaP+SwUkT2tNJJJPcSMN7wmv7SeIT26MfxzUNyh6ZsM9IWK1QjHmiF1VWrS wGMq60XY= X-Gm-Gg: ASbGncsJ9AvXheu++5f83sfSThVPTounlDes+hhLtSUAeHMFdmYsJkaQK4iI4nGawaS Fz6+1dgTxiU1V1jYHSPSxCkSIaYfxdtMGXjps6V9PAQ01xNLxIA59A6vgP/dz1TCi8WgRI7M+wB 1oTozDCP+3MepwDAyrC3dtpGXgIjUTcWM0v36qaEDVseOTuw52+V2eYkRVhep3WhpTYubHxfkQv O8AZynHCJ2Nak75St6e8ESTdhdztoxd7TqbwA8fANlGSBRYfzZeiunu0CLTuV3EByu/aC9+sY8M ziStsYTL8R7X7jWT4d89yPxQVDmstjQXiSxRlK6U1XLPLUUWAXd9xTOXVOg6QEH0ow0Q0Bt/Jed i7h41+eAt/0rOLnXedLNJJgD8ov7/d7WY7baQRxqGfZNWGxX9 X-Google-Smtp-Source: AGHT+IH2Q2i9I0ZeJR8nmV1RDBKyMOckIh1mS792m7Ip1YiCqOOZs0aTSZUtBdJRsqQlmzuXNyy40Q== X-Received: by 2002:a05:6870:1692:b0:2d6:72a4:adfa with SMTP id 586e51a60fabf-2f796d8ff5emr1647342fac.30.1751639327251; Fri, 04 Jul 2025 07:28:47 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 088/108] target/arm: Implement DUPQ for SME2p1/SVE2p1 Date: Fri, 4 Jul 2025 08:20:51 -0600 Message-ID: <20250704142112.1018902-89-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::2d; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x2d.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: 1751640097525116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/translate-sve.c | 21 +++++++++++++++++++++ target/arm/tcg/sve.decode | 6 ++++++ 2 files changed, 27 insertions(+) diff --git a/target/arm/tcg/translate-sve.c b/target/arm/tcg/translate-sve.c index 53db8851bf..e33b2eb2a4 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); diff --git a/target/arm/tcg/sve.decode b/target/arm/tcg/sve.decode index db16849731..2650e00f80 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751639958; cv=none; d=zohomail.com; s=zohoarc; b=Ru5O7fSOP442GDJSDUXJA5XrWBdXSYbZtKbXm9MhR47hydMBpeAZim6Nrfs4Q/3dPCKqBmEgJivxhcec7rbfBPf9/8BsHR/UyxPlnDj0QuunFCHcbpl8XUkb0RVs3axWHjebp3Jmx2J4RhjSL9ALPQ/tkmrsQxHUsZS4LTRXYOM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751639958; h=Content-Transfer-Encoding:Cc:Cc: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; bh=+O7jmLrwj7uYx9707P2+AK6L9PFAUcM9kTC7/PievL8=; b=RqvKr3l7wpXIli7LbV8N2yKs1ZZumADFIQVrsLCJlyO2KGh7eP3PL8RjbDtEwZr4syPGtc2iG5yMKTKOrMP/x2h6FyPkX2vlP+e263M3YyZndppRBYrY/SXz4UYpKQPdxSMbfBIJObBUlldLQJs5qy5M4DOe0NKOGvPdItfJYAI= 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 1751639958836434.83205466821096; Fri, 4 Jul 2025 07:39:18 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhUG-00031A-NM; Fri, 04 Jul 2025 10:34:01 -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 1uXhPH-0002Wf-D1 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:28:52 -0400 Received: from mail-oa1-x31.google.com ([2001:4860:4864:20::31]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhPF-0001Tt-LM for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:28:51 -0400 Received: by mail-oa1-x31.google.com with SMTP id 586e51a60fabf-2eaf96c7579so798555fac.3 for ; Fri, 04 Jul 2025 07:28:48 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff55633sm531448fac.20.2025.07.04.07.28.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:28:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639328; x=1752244128; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=+O7jmLrwj7uYx9707P2+AK6L9PFAUcM9kTC7/PievL8=; b=ecRas4AXToF2trg6iHA3OKedkKhUr2aQqt2MgebjTltM0mIIjDeQ478e/aXwpL4Jti 6MCMoNozg9llNkIAPVeP5vhtTNW6+FQw3bzc1eQ84VEL7fSHWQX2YYptWxc39TqXu5KV 4J558eSXKzes2jQKQMXSqQVUX9eg/ATOIzZwh9aYNhQYAYmiPRrzK4GExj0kA2N0g2Jg P1e8gPnWuqHRe94pGoEMayu1mEeTvL9ZRHFYV1XaA+DFTA5Css65sZRdIUdWlVoT4gsS hJu1PzDj2NpEVtCpni9chd+0OqcTmsEOTps7Lod6ImI1EaYZIECvWiKVmdM/3WbapuVJ Qfew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639328; x=1752244128; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=+O7jmLrwj7uYx9707P2+AK6L9PFAUcM9kTC7/PievL8=; b=v8XoYwpwMS8SxGLbSuKXyIaqV13cd/0jt/p3AyBeeuV6c9MWMX8+eRFrKtcwc5fS38 e9Fs7MIgNh3kGMQywqJysBb26PRDS5RL3G2zHfBjtFtqXoNolpNq8tBF0L9013BhNuvs vJNOoNHUDA0DHOFce7Lc1U67t9Ps4ifm00HOZIcD7NnC71S679g/deLVEpImHqDbrSvj IhV7QIvOOoPH4TG2JLzBkyvmDiKoC2quKtW+ccBrSybIpnzJ/Uoz+SKwWlx5sVeT/UX0 AwmV0nsdeFAaqareUj+WdBeCdW9HhRfPNX7bjgZoy5licFAtH7hwgPOBe0gOMB4v3AbT wu4Q== X-Gm-Message-State: AOJu0Yyz2RFeo36fotDdT5txvwKCV/m0+5vzC0lkC60v8yRMaTPlLL+J 0/EDvwZOxj7ht+UQ5tDkHSRqFsgBOX7FH7im8WpO5tEttW9gBJGb1YG1N/qNA598zWlWKZT1YZs PFm9d5W0= X-Gm-Gg: ASbGncuf9C1zyzmTqTgmVCIFWn69Vo2Hqhjw8pz1IsFXpXzJb8c/wsghxAx4qd3lcAt df6giHd2JCvCcQdQS1pRSVHSxp17q7aWO/+lpgHNTBhDvWNC1tMVyaKL0LwvH1Hk+PfhR6ZHytv 6Nak3aAvJ+RWN7atn/oJt3bTur480aI1UGccyzUNRnxI55d9OBi2MMXeJuQvlJQpi7kxvQhqSaw DIlq3mTofNKl2FmSItL/6GWFxcBy77GBlZnDuzenmAC6aYH100C8RyJFoJSDeuYQ3PTLTK8o4G1 wPVn+wLgiursdjSOSO0IMN7WVsz9SOGB1BzUclaJTYu0coDOTV8gLyZiokfjLkBfugTC1anugsT dGU1CADF/DmTMPpD1jCnADOhQxRkoVhg/KqLabfDublMz74IW X-Google-Smtp-Source: AGHT+IHCpyaMlJvjghflFTZakZQcFiCqJUv+AKBpnulB8coo09dMZMWFPtqgeuPbRGsH/9OmSfE8QQ== X-Received: by 2002:a05:6870:e80b:b0:2cf:bc73:7bbb with SMTP id 586e51a60fabf-2f796cd0dd0mr1763771fac.25.1751639327945; Fri, 04 Jul 2025 07:28:47 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 089/108] target/arm: Implement EXTQ for SME2p1/SVE2p1 Date: Fri, 4 Jul 2025 08:20:52 -0600 Message-ID: <20250704142112.1018902-90-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::31; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x31.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: 1751639959802116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/translate-sve.c | 49 ++++++++++++++++++++++++++++++++++ target/arm/tcg/sve.decode | 2 ++ 2 files changed, 51 insertions(+) diff --git a/target/arm/tcg/translate-sve.c b/target/arm/tcg/translate-sve.c index e33b2eb2a4..a918da31fe 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 */ diff --git a/target/arm/tcg/sve.decode b/target/arm/tcg/sve.decode index 2650e00f80..af4fb966bf 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751640159; cv=none; d=zohomail.com; s=zohoarc; b=U6BRAMvLhVRk8kN7tvR6oW+2KZdhySrDr61dBotLqOS4ThJLOXphmBAaHa45RVHExaFf96fKta20YtuOvdIX244h5hMJ/NpBm3Qg0WmGaDDckzWW38ar7CEes2kzrHSgkT58J7oL/9ufChoW2l0VSq8SOyh+U1/WJxZ+AROZDDA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751640159; h=Content-Transfer-Encoding:Cc:Cc: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; bh=GhncQ8PgMWVSdnpTDImGfIqrCJDDTsezGTJZF5sS3cw=; b=AvdjKC1FVC7zeIKKTrvhJP2c775slXC87xGb9ccZEFDM6/rHJXURogb8D33GGLOGNUmTa2RKuQNZxdY8xYkdam4J9flRO/GaOBtrD8hyVN5DEZiXclGEsin4F8AYNpxBXRu9PnY1ZpVJaL8+j0RNi8+oi2ry6VNmmHH1hoV2//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 1751640159225366.2054146163076; Fri, 4 Jul 2025 07:42:39 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhUU-00048x-5p; Fri, 04 Jul 2025 10:34: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 1uXhPJ-0002Yw-3y for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:28:55 -0400 Received: from mail-oa1-x2f.google.com ([2001:4860:4864:20::2f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhPG-0001Vf-0B for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:28:52 -0400 Received: by mail-oa1-x2f.google.com with SMTP id 586e51a60fabf-2f3dab2a2a9so901254fac.2 for ; Fri, 04 Jul 2025 07:28:49 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff55633sm531448fac.20.2025.07.04.07.28.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:28:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639329; x=1752244129; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=GhncQ8PgMWVSdnpTDImGfIqrCJDDTsezGTJZF5sS3cw=; b=Qn8/eL0gPnBOPntSDHdourGjv+dzmRx25/dkaeBXHZdmp3ZswxYfE9sKn6Fs1KYKQt S2AyZsxDxBP3Ft7x7eZM2Mnnjc/QrCR/tegBxu3ZQ7TkWbQOBo1a5FvYdx25w7ydFOdW RFNn+xyPwtKIKsEyQg6ozCXZ8t5qTG2Z5K/Kfj412s3FjVB0nzhH3Tn5iH69F19c1u9+ qVS45z1RHtU3UB350cRSzt4mg922dtgN/eNsXBUcAasTozJFRjfFzMSzgvW4K8OLm70z TBaNJrDVYBKZSjqGpDjgFLK605eAxk9F+8t1QmQytCaLkJBHl4c/zVr2m/wuQc6RhlIb WO+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639329; x=1752244129; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=GhncQ8PgMWVSdnpTDImGfIqrCJDDTsezGTJZF5sS3cw=; b=hg7zl5wFDXQw48UwpgPWlKhaegvqD0Td/h/WnjQiu/cgIN6R73AlbFnXA7eMBjIXxl 4hignrO0rQ9xMKMyc5n33mHmfj5nQC+zqmc+CvMf0902xB11mTFRTl4zm/6YrGY5Fsvf kaXFXfS+Bab0GC73Skztf1Og/wKusmlReAhL764LqajlMRw7lwClLXkTL4/xGdZFUOp9 zati1nsmEj1CRzegtgXQeDQm41cgRpHNpr1uGjhIutlLeY5Y1nyHArj/6fKmp/49TZK/ z/ggBvazRAaSHN/NSE3RIKl8KfgzJqn8aZAYEE+DbF0BuEjI5Z4yzgwEPejynk/teKox LtFw== X-Gm-Message-State: AOJu0YyePD9lB+aLlDqIF+7QIBPG36Ff8mOmDR/6Q1/IoVOBvoD3BDgF oXYT8aWIpogUhswg3rkFE1/UMSqz/WDhA4NOKNSowd1CU5GrFI2idUWus0gwuzukZHoYTbWgsQL q/RzP6bc= X-Gm-Gg: ASbGncuR/sEWJ1zfyVECAKjNlGHgudKw2QonLhuh/JK4TWpZe9SqmtjBXIMnkx3rfM/ gKyC4b21i+rmsV0aJ3Am8Dk6IJW+Y6MnsFott7YEgYXXQyi2eu48aS2VduSklUUOarW8ABbLcEd JlRkr445jaNIm/N1QBV02zxxBAfUpT+jxSrTRJNeN3cQWDjO4hKtieOaZ69KhcaTnMII2KsHppu xFH1Ccdt9oyYoHt0P9CSD5TupChAw3piNcD3g3FzOdG/hXiT70I9lXIEIEIwH/ySWt6NOV2P3iW 821EMvEzPdTBPX60OBnvOoGRE7ElJSvwIZnhCp7p9sh8SgemAeQox+zDlCWPdXLONz3wAUsMHGs dljS+2a0B+W7qllnS5aqLuwNJ1u9L6h1bVIvw7gnZqZn+vhz3 X-Google-Smtp-Source: AGHT+IEe1REoTQfMU3yTvKkFgCwIjuMZLd6nPXC0UR9DAwHQiYtClgtdzi7baoK6WRyMi1A8jXismA== X-Received: by 2002:a05:6870:aa05:b0:29e:559b:d694 with SMTP id 586e51a60fabf-2f796ccbfc7mr1928386fac.32.1751639328740; Fri, 04 Jul 2025 07:28:48 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 090/108] target/arm: Implement PMOV for SME2p1/SVE2p1 Date: Fri, 4 Jul 2025 08:20:53 -0600 Message-ID: <20250704142112.1018902-91-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::2f; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x2f.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: 1751640160505116600 Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson Reviewed-by: Peter Maydell --- target/arm/tcg/helper-sve.h | 8 +++ target/arm/tcg/vec_internal.h | 34 ++++++++++++ target/arm/tcg/sve_helper.c | 50 +++++++++++++++++ target/arm/tcg/translate-sve.c | 98 ++++++++++++++++++++++++++++++++++ target/arm/tcg/sve.decode | 17 ++++++ 5 files changed, 207 insertions(+) diff --git a/target/arm/tcg/helper-sve.h b/target/arm/tcg/helper-sve.h index 733828a880..04b9545c11 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 61c67bb35e..957bf6d9fc 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_helper.c b/target/arm/tcg/sve_helper.c index def841fd52..a9dc3c44b2 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 a918da31fe..01c4eaa585 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 { diff --git a/target/arm/tcg/sve.decode b/target/arm/tcg/sve.decode index af4fb966bf..3271c9cf78 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751640250; cv=none; d=zohomail.com; s=zohoarc; b=CAyggPZHl+EnbIvJGgTEo6Cpu/u5+tFqx70GgjS693y2CPHjQ2jTm3zTgPjr0UrD+pvl8jmkcIBP5eF1doDO4+uG+6q+SlRC+BxeLsoicyWE7KahCsekjfirVF5yvA9PrZICepMqGgLr0ulzL/93NXQb+4D0sAK7Rxb3siIgpU0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751640250; h=Content-Transfer-Encoding:Cc:Cc: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; bh=7CuGJQsP3KAFwwlG5UMmN6IEmCLus5slAxw2lKnap7o=; b=dNHrQOWK5iEGnSiCMI/Whk/VmU0QRRiITSl7sDGof0/+Ch73iINVYzl3yG5aVXepueVWqRZZhIMiXYTAMir2jXR3qZhmOMymH/5AqRAHaSWpaWbIpHftrkClm4otH3Nfu8LceBxyp+0bIe13JGT3BrU6iD8TBNFUabkxXF0A7Xg= 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 1751640250954327.1172329211381; Fri, 4 Jul 2025 07:44:10 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhZI-0003mX-5l; Fri, 04 Jul 2025 10:39: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 1uXhPO-0002qj-09 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:29:02 -0400 Received: from mail-oa1-x29.google.com ([2001:4860:4864:20::29]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhPH-0001ZB-41 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:28:57 -0400 Received: by mail-oa1-x29.google.com with SMTP id 586e51a60fabf-2edec6c5511so332943fac.2 for ; Fri, 04 Jul 2025 07:28:50 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff55633sm531448fac.20.2025.07.04.07.28.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:28:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639330; x=1752244130; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=7CuGJQsP3KAFwwlG5UMmN6IEmCLus5slAxw2lKnap7o=; b=U/OcQAiBLr0RDRgp2EHrvKDCwqGwiLF/QSmSBroW90KvefBhYZZh9hq/hm4AJcShSo TK9JndZVcPBnNfBWYiN/sYr3h+fYb2HT5T0URfZeGCluIXH7LJAQjrxAK2oMyRnZCHGp FgoMSO8vmpXvt6NYh4vtYz9sl276lKuO7uNH3mi/78OJIDNmfrZdu9/b3liAlq6ZWG5+ 5t33kCgdVuddvh8cj/6925fk9dc/QSwQB3io8QYSwWkR+3qxsqVra8FsY5iJkHJVP9NQ EvIKfOnaP4IknxTEfheQd5fWI3C8pEREmzHp2mYSzpfh/0DXeRr2AZmu1Dw152cBwQqt xjYw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639330; x=1752244130; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=7CuGJQsP3KAFwwlG5UMmN6IEmCLus5slAxw2lKnap7o=; b=VH1J4jfG5T2PgCRbSuyjf7L+USckT3AXDM7C9pyUTFoynJh21SUn+PRgJNolHA9sax ikP67MtWrDml2x7Pev+xQKpUfdp8Lv396aaD2Ws+DkwzLeofY8fJICqc/3k7b2o6rCOB qw67yk4/h0jsMIGGH5p1kjcb0U3A+Jmsyi1CX+4Dq7yX5Sg3ywiHsj79rmDSv+SiNNal raHauPaKBnYvQmvf562rKsP2RsXiwe4upa1fbZ7YovWm8TF3SQVbCiCrvbQrL7alWDBF ouVHHBYWfUQynGfaN5UYs9JfT+r36y546nPSUCKr5mq1Xp88XCdRvAW2XcBrHRZpc9Sp pHyw== X-Gm-Message-State: AOJu0YxYnVzRVKiuI2JG52FV95aYoD5TI3X4OWLrwRrrBdV5F1rkxudj shsME7UBrBzlINCDpLVqU4ffhCQO+r6O89fV59+8KyPqK/j1pGLqzSTJqt64/G5MHrml+2bjHHc D1Jo9J7k= X-Gm-Gg: ASbGnctlQfnwBBVtilBx71EXRfNmjSo6WpGYVixreMQbhSKzbTZn1vag4IOeIR96Uv9 kcoTIIg/FDIseoVI8VmPXKnMNa/0ntykdBqdvQj5ryDwN7c0M1K97C+C7xG/sLEeDC49a/gzqOU bCJCr8wDFVxTn9wBCmACyZ127rI5IKXOE/+assYt6mtmcdJ0fpKhW06svfMnoGhV2ASu0Mh7O6/ klxZsZ+hYKEqU6gP8YkGJtAfzIULwRQS30mqSDq4rkXc+FGlbi3FED3UVBMn2YTijAG1PtoDDVd uuFqkMNA5GJD39sYo/4kGlXZ7QpiFrcfBwWqBXx1+ZHIiwFwPQ+Uk9lxy+PBib+EVuUCw0Y8d/a ku+vRnzF+OwmimAmhi5QiDlWAA2P+j1N24j0cMymHRN15XIIh X-Google-Smtp-Source: AGHT+IHFYz4QZxL+tWYXxMvV2L9BZaRZrjo7FvWEjt53EpwdE4VV6u9+0eXqrw4oyKCKAai3atQqsQ== X-Received: by 2002:a05:6870:288a:b0:2d4:d07c:7cc5 with SMTP id 586e51a60fabf-2f796a0304bmr1547429fac.12.1751639329797; Fri, 04 Jul 2025 07:28:49 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 091/108] target/arm: Implement ZIPQ, UZPQ for SME2p1/SVE2p1 Date: Fri, 4 Jul 2025 08:20:54 -0600 Message-ID: <20250704142112.1018902-92-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::29; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x29.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751640251415116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/helper-sve.h | 10 ++++++++++ target/arm/tcg/sve_helper.c | 29 +++++++++++++++++++++++++++++ target/arm/tcg/translate-sve.c | 19 ++++++++++++++++++- target/arm/tcg/sve.decode | 6 ++++++ 4 files changed, 63 insertions(+), 1 deletion(-) diff --git a/target/arm/tcg/helper-sve.h b/target/arm/tcg/helper-sve.h index 04b9545c11..0f510ea610 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_helper.c b/target/arm/tcg/sve_helper.c index a9dc3c44b2..dbbfbc12b9 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 01c4eaa585..28cfcb9cb4 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, diff --git a/target/arm/tcg/sve.decode b/target/arm/tcg/sve.decode index 3271c9cf78..e98275eec1 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751639733; cv=none; d=zohomail.com; s=zohoarc; b=RnoBCP2Yv02aUAoocKiN/4OBZS3boTVGJOwTMV1gQY498fyJquLMgk0j3FBek9hqAu5Tuj6cR9w5WoCYb6O5E33PtCdoQioiM2gaSzF/WnGabZSBQuiPmr0oTF0ivvbN1otinTIDTYkZ1qYbjPPEYiptbhLifkN/ghOm1oSKXJs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751639733; h=Content-Transfer-Encoding:Cc:Cc: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; bh=YWyPqMqMItiN1bYNx29FmyoNvhqQhz2XxM1Ps77ao94=; b=Um6hBWLtqHLl1Z1/hZPgjQZVCjEiAeJwRm+Tdxg5OlTTTGWIl7IlBKWISLvvEg1NvNHsmnvXJK20eJDhGTmwVgswYfmXHRFehr2bK3neXEPsIbNOhOyFszKkT2ouGNQOWPiWYMU9eJvSyhpZAJvEEDPjVwi6NzcCt+4szK1F4os= 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 1751639733110106.75122264575248; Fri, 4 Jul 2025 07:35:33 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhUR-0003po-Rd; Fri, 04 Jul 2025 10:34:11 -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 1uXhPK-0002dh-N9 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:28:55 -0400 Received: from mail-oa1-x30.google.com ([2001:4860:4864:20::30]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhPI-0001Zr-11 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:28:54 -0400 Received: by mail-oa1-x30.google.com with SMTP id 586e51a60fabf-2ea6dd628a7so806008fac.1 for ; Fri, 04 Jul 2025 07:28:51 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff55633sm531448fac.20.2025.07.04.07.28.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:28:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639331; x=1752244131; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=YWyPqMqMItiN1bYNx29FmyoNvhqQhz2XxM1Ps77ao94=; b=d7kbg8LogEuKlL8KBuJWYxKBB8JGEDwTZ/vK0TRyLLlC3er++VNGmquunDhwxtkOPu MO7VUaCTvBwvC4X/n8KnD4nrgA+7Oy0hbDand2TTLx2uXrLnXNbKFrT8i+vLYhrjcH6l W9XDouj6fq9UUHNOs1olCASfx8PEozD7WWf2qevCvM+da4EYE1Jhim9xEMoSIBUDiQ4H PLtc+dtIJBxhUotOyFkeKJrDjbZ/cSPaxb4IcNePk4ApDNZa3rSFIpG9d/qyGvHCxg2j r89b4aXs9EFpWzHrvMYSoaHkOV3wpWZY3Eer09sjUQC5EiW6nYCGcmnrTK4iFvOvvwY1 wF6w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639331; x=1752244131; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=YWyPqMqMItiN1bYNx29FmyoNvhqQhz2XxM1Ps77ao94=; b=J3khJYemhMJlvaA029i/WX/zT1uuzFOGa8UPGMY7x8XJwUcFCXOG61S20BOAV6xlhb xohdbKrQNM8NWM26PVFZN5LIi3cZ8ldIqChYChwb3MM6CUKqe81VE4haKuSDDpczXRCm hdkwnYxhTx0tYWGi0sUHvqxYl2QsoTZuNt7ISl/zR4NhSsseoPMl02xXpYCSghQXxj/2 yopzE9dQP+X3J0azLSVLB31bDmxLLjoyo+F/IFBYKGu57Q5DxfZCTdWM8cpMWe6HlWG/ k9ipToOrx+yqp1aULQDyEBLAQZzbNbm1yx3PgqAkILz/mC9SUMkjdwIJKzHqN1PIWv0g TzQA== X-Gm-Message-State: AOJu0YzHJtdZB1NHJZnLtT8SUm73u2YsaSBPG28xBxmzcwzYvG4vN9eK AWZUsCVb6FRQTUErglWh/QhoXQ93U+f9JUwQTyIrW4EhM3laHaGOIw639wCm8+fkapqcWEMGhXt onCdt0hc= X-Gm-Gg: ASbGncsdGVUJOKeEWv30e8aX2CulBR97caCzGbXhy79IbhDH3DPfMXvE5AA+l3WlsV3 Ic/3yePX92HwDWMXUtuHjtXBagK6CTBV+Is4ufBGrvts9uhJduoVhmTpKKYHRXlN6aG9L2UPJ4X SXmH48/W+HdcxziSwbUNBdoePKvrIeeOmpr1MMUCrbGeJ66zeEWhH5tbTdCUxS3wX976wjKFYTJ tzWDDLsUkxokbh13pQ05wVoFV/KKPC1eHy40nMB4wAdwM9tvrsmB+6vgQq3bihU5NUyx7KoWEQr OzL8fh+8tvimmk0lrvrJORPQuWGO+Y1RL9kvREMFYEgKr+vVt6W/QgAHHSrdIrgjP6isoCIosmR FNEHOTSYuG/o8Coi1IBNLBKiTXxTie4xNASCSTlLmODWt5OtR X-Google-Smtp-Source: AGHT+IG7nhkb2KsbNJ9klHAKAJs1EFEsqXFcAKsIn1Ke00RrQnzQ3txHjihe79jxDD2W3Xlhah48IQ== X-Received: by 2002:a05:6870:829e:b0:2e4:68ee:4f21 with SMTP id 586e51a60fabf-2f796c34cdbmr1852542fac.20.1751639330668; Fri, 04 Jul 2025 07:28:50 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 092/108] target/arm: Implement TBLQ, TBXQ for SME2p1/SVE2p1 Date: Fri, 4 Jul 2025 08:20:55 -0600 Message-ID: <20250704142112.1018902-93-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::30; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x30.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751639735229116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/helper-sve.h | 10 ++++++++++ target/arm/tcg/sve_helper.c | 10 ++++++++++ target/arm/tcg/translate-sve.c | 14 ++++++++++++++ target/arm/tcg/sve.decode | 3 +++ 4 files changed, 37 insertions(+) diff --git a/target/arm/tcg/helper-sve.h b/target/arm/tcg/helper-sve.h index 0f510ea610..5f4b4aa036 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_helper.c b/target/arm/tcg/sve_helper.c index dbbfbc12b9..42b05756a9 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 28cfcb9cb4..02f885dd48 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 { diff --git a/target/arm/tcg/sve.decode b/target/arm/tcg/sve.decode index e98275eec1..52a56d3341 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751640607; cv=none; d=zohomail.com; s=zohoarc; b=XkxFY/gWq92n8VLF4mOYh6RKLkooZQwX/8yxJhTScMM0usYSctC14o6whtAq50cwWDRrak+GuQy9/VPTFnKx5U4Hk0ZS+AWws/qKGG0w7Ynf66A8n8Yy5ibmGsRL259XqY4YfzgwWVgvP2ZAFoA0mfdhGc3qMrI7a0vF8bLtFiY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751640607; h=Content-Transfer-Encoding:Cc:Cc: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; bh=og0z3O2MJT0QCwzRYtxsXjZzBvNbK6+O59Vlkv9/sNA=; b=c0Wm8jdekP9AP7kP9hS8gPpw7eAXirSr7lrpDh5hsqnFql5QC7+Rp+2cg3WbCShofelK5EgAe4le4+oIOxO133ximHk8/52RwqWyfWT4eeYHlSNt6WnTfvFQxVpt+yJynJcxSP+F6SZrAEGRnETFpdCpk/+sYgfkrzG8eIzGg1s= 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 1751640607714161.03111328913542; Fri, 4 Jul 2025 07:50:07 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhUX-0004We-Bj; Fri, 04 Jul 2025 10:34: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 1uXhPM-0002kn-Kk for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:29:02 -0400 Received: from mail-oa1-x29.google.com ([2001:4860:4864:20::29]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhPJ-0001bF-25 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:28:56 -0400 Received: by mail-oa1-x29.google.com with SMTP id 586e51a60fabf-2eb6c422828so1287397fac.1 for ; Fri, 04 Jul 2025 07:28:52 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff55633sm531448fac.20.2025.07.04.07.28.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:28:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639332; x=1752244132; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=og0z3O2MJT0QCwzRYtxsXjZzBvNbK6+O59Vlkv9/sNA=; b=B5uIsCCn9hWIRiwze9TN3NKNFXJRytSf+ytvFnVFN6PlLQAi47s7bxUOYEI3WtX4WM RC3Qf+n2uqs12ZHpFcPD1GBRVhmtRA2160xNq5vCSOovywezeKKswx0zqnOCLAgqsXJ7 9bB7vv53blVrvHuKwAH5mJVV1L/KrkJqjNjRNEb5jGm4Lk0kT6hGB1v/V89T9mbBe6pO 1zklytFHVaKfXdzU3Bf1z+3QttLrYtB31Zn2HN4iGJjgvu1nj1D9ssrYp8fvLYWHl4sM 8vors1edqNV4ewgHrbQUfErZffC2piXiwa7F/QyXzK0fQ5Q1K1NR+nI0r9a5QQ8D3Mrp XL5Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639332; x=1752244132; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=og0z3O2MJT0QCwzRYtxsXjZzBvNbK6+O59Vlkv9/sNA=; b=v7btj+ThEXp29CXaPxumtSUIRSEsQLlApkUIuctviooVr7wi3Fyfzzu6tXremAh3tJ 1e90aQFfcjSp2PDpvtBLhcTyHRp6eoleNcFBPSOQ+7IdGgRD8PcksHlzELDFlT2/63pG tu67wUgaqXHX4qFNyuMCpZ0wND9DBRJ5t6ntbU1nfKO/1anx4G37hAeFBmHTHCZnEFhK jU+RiSjn0+OUfwvYBtXtV1vdx/5A1QU3JvqaYwuPNuJC/PTa+l2MXzAWzepFG+L77wQk wG6U9YqENue6DGuiEVGz5r5c0VqQwcVsXNj34hqbsAaRT+f5utL/dfLKXK+10c5Rqa4p zPrA== X-Gm-Message-State: AOJu0YyZ7X2XY8oFXPTjayg68JwJ8vAnG34PCGRc4IizvZPhZYztU+fx RxZNzC85agtOoFBjUhorsljjU12VbUkQ9Ft81mjrfxQLhqkxM1q5nRbwm7U4HwXNZ1XOPR8t0VC mi859PcU= X-Gm-Gg: ASbGnctC0Bwo+OZDN9IIw3svMh7kwvS/rmgOPSCX/IFvUJq0h/fVPCpi24fOZTOKc+K JFtarJaoNYap2KEGBQZJquXtOaqJ2w5Ae4QOM7C0QG2wmXlX2QS2ZAxI7U1CA/3QEN4bOvX+89e Ut6dwtgpeWtlv9blQ1elCfwkvx8mQ7R7z3PFhDw9PL85SYy/4gcESRkIe+KbK54/cru7jPTEJt7 6LmQTdkFBw0RnQC/NBpvdE51gAEo4Le/1+3AToFRiixA/Ghb0K3XtFu7FkH0gwZHC9dzKOYb3ia iqxwhXTqZlVeAHUt/rxsoe15FzyLpuGol24XGF0W6RL72PeE3YwpnTN1ZQuU9DtQVhlrDbvIlrc 7CFiHzgdWw3RBTGl67rnW3eKLxIMjKmQcVxAxY+wayg9CZCiv X-Google-Smtp-Source: AGHT+IEISd7p5+pDIB9TYfaP6swFpVEtHQsqfTBeWYx7y+R8faMccIbJDv2nUa8JXd2PAjgK5J92rg== X-Received: by 2002:a05:6870:3906:b0:2da:87a2:f223 with SMTP id 586e51a60fabf-2f791f2bc81mr2469391fac.11.1751639331612; Fri, 04 Jul 2025 07:28:51 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 093/108] target/arm: Implement SME2 counted predicate register load/store Date: Fri, 4 Jul 2025 08:20:56 -0600 Message-ID: <20250704142112.1018902-94-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::29; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x29.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: 1751640608928116600 Content-Type: text/plain; charset="utf-8" Implement the SVE2p1 consecutive register LD1/ST1, and the SME2 strided register LD1/ST1. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/helper-sve.h | 16 ++ target/arm/tcg/sve_helper.c | 493 +++++++++++++++++++++++++++++++++ target/arm/tcg/translate-sve.c | 103 +++++++ target/arm/tcg/sve.decode | 50 ++++ 4 files changed, 662 insertions(+) diff --git a/target/arm/tcg/helper-sve.h b/target/arm/tcg/helper-sve.h index 5f4b4aa036..c4736d7510 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_helper.c b/target/arm/tcg/sve_helper.c index 42b05756a9..e6342990fa 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 02f885dd48..dfb53e4bf4 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) diff --git a/target/arm/tcg/sve.decode b/target/arm/tcg/sve.decode index 52a56d3341..bf3d4f4853 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751640919; cv=none; d=zohomail.com; s=zohoarc; b=TwpHntDVLzRrl15i8nCwhBWJUE8W46zYOK4BE4oVUFquvfbGw6wuRzXidwS1g2F6Bt49e/xkzwkq6jCSOVfoPp5hKRGxKt8bFfcpBSrysO4OcdNaxtzQAx7nM5u36qLtfjfp5+khzLNlWnfDTdBoXkr9ocQhMbMuEMsS00ztDgw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751640919; h=Content-Transfer-Encoding:Cc:Cc: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; bh=4S5DImbXjjY+eFLsTDqYqykqt+YEQuqnqHK47/Xsuvg=; b=ecxpLoLbRp8GiBKnZmuS63UhJ8FpcYU2oCAbGq9DaaGsImEd7LClU26QyI58kwzHfwgh8miGe5ITEalyesuEtl7O9aaBgO8/My+5QX71cftXK2jvSDnw1pgUP1SJbxGi1a9XsdGuMKK0gR0sRMOKjtqlUhVVYHyXxEgXarsNGRc= 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 1751640919816604.1246319891155; Fri, 4 Jul 2025 07:55:19 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhZE-0003em-KE; Fri, 04 Jul 2025 10:39:08 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uXhPN-0002oO-AF for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:29:02 -0400 Received: from mail-oa1-x2b.google.com ([2001:4860:4864:20::2b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhPK-0001br-8y for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:28:56 -0400 Received: by mail-oa1-x2b.google.com with SMTP id 586e51a60fabf-2edec6c5511so332951fac.2 for ; Fri, 04 Jul 2025 07:28:53 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff55633sm531448fac.20.2025.07.04.07.28.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:28:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639333; x=1752244133; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=4S5DImbXjjY+eFLsTDqYqykqt+YEQuqnqHK47/Xsuvg=; b=SoNQ71BslvopJNP6wpLo4aRpK+kVPxv1p7u0uX06msz7zNz0C2ipBhITp/2X0fXaCx Z5M0wqZyUzS8KoMX53vgNYf1Dipf5ovwG5IvYeU3KkiyOyCSqjcvIo9ln28uvo9S6MWg qfD6+XWdCoUeX1uMJz/dzaiYOA5hkEzjuOf1MIw/M0P/XIyba75neThrRohRPpuatMgU umM7MIjBXjLIuG5Ofp7+z/il5lwSNl40JaGbqxqeRlrwJcwOH/32OXnOdNcRRFrr0zwy pX2E/3bjs+xwqtf1f4e7OeDJtoZEs18m0gmGDAb39NaCfQn4DQixzfR7+JADsrLsi7bU k1dg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639333; x=1752244133; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=4S5DImbXjjY+eFLsTDqYqykqt+YEQuqnqHK47/Xsuvg=; b=K7vY0XYwAj7JJYxMsFMBdCfS9KPnijU2Af1EqbGmQ97iUsSpDLwqMX+IWTV3XFbkzg VDBeDyuLybpQiLQGffpomCoR4E1Zw461J6mtZVpE/orkRDZ+WTMglRpuz9Gl/PqmYlql zLL6zwIrJr873xAZcZkHHC9JNxZxhza7kmgiw7SsSh36t2a0jDBfKg2LiCcACM4De2pX Ral3LGlZwVYQYnhY4R3Hx6wvnBqvW3myB9HrVknJmgZx084+H7RSq0RPcA/jDmGdVsnc nMV0xzg++WTrsFMBi5zpvGNnG2n3LMAtATpBgs4SqiXF6v0ajaXcUksMQHSNg3LfmaaS ZMGg== X-Gm-Message-State: AOJu0YwSCVWMPKHfnH21ZNvjBx8+pH72SF2oAtQDS/iQeo1e909WGEIi giIH1leAG4q/zagbmwn9JM0Qiu2r1gjYGL0H0c230+0emOnC1/2ERCdOj9uj2MQYKI2BPwnLHQl 9lUATS/E= X-Gm-Gg: ASbGncsZmWi9rIw7zHAeSdUoiZbb1tPTO+yXoOsS5V/QeONoc1ia+Rcimmhx76nPhcL A7f1o9xiVexZhD4ZhpBncK5iBLGihxOuwQBxNmiAyHW2yAmqxXE6a9yfYESQd3V1adfRSoNmEAF ZMlDIl6MTD8RsgnmZBroJteNmk4Jb84lzAVv6v5GyEaztgRcdT9qMHG9IpHZ/7wKckifsQafvyc W5RDNc91kQlteLC+qrY63eHenWPV3CUkqmN23ye1O5xY6F+xQSaWqBP5hrQtTaC4YAKtH1OMONS ORFRK2BPP/g0UleaahJEzbOiD6xIdmKw+2GNdqp4hCFMYFyp5zF83t41SqndpB/VXnOF5uls9Sv Vu1nuRbBPSZiF/Q0mY1bbuWh676/dlurd7Ld4Z6B8kK5Pzanx X-Google-Smtp-Source: AGHT+IF7znS/79boWlSSG2fV/KDTrZn6U745N63XCz9qtO9xpg4fyywWik8li9Ba7MopFkX/VrvDyA== X-Received: by 2002:a05:6870:2150:b0:2ef:e34c:e4bc with SMTP id 586e51a60fabf-2f796c1e893mr1680097fac.25.1751639332594; Fri, 04 Jul 2025 07:28:52 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 094/108] target/arm: Split the ST_zpri and ST_zprr patterns Date: Fri, 4 Jul 2025 08:20:57 -0600 Message-ID: <20250704142112.1018902-95-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::2b; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x2b.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751640920224116600 Content-Type: text/plain; charset="utf-8" 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 --- 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 bf3d4f4853..7020771898 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 Sat Dec 13 22:57:49 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 175164102197235.27486402227373; Fri, 4 Jul 2025 07:57:01 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhZV-00051f-7P; Fri, 04 Jul 2025 10:39: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 1uXhPP-0002va-CC for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:29:03 -0400 Received: from mail-oa1-x2f.google.com ([2001:4860:4864:20::2f]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhPK-0001cj-VB for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:28:59 -0400 Received: by mail-oa1-x2f.google.com with SMTP id 586e51a60fabf-2f78ef10832so695251fac.3 for ; Fri, 04 Jul 2025 07:28:54 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff55633sm531448fac.20.2025.07.04.07.28.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:28:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639334; x=1752244134; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=pQSVMtuGR9d/CnVXuMPrHT78MEH24iCHSmP8n067QA0=; b=v1vax+HQR8B+k63R481ysK7hzf7WRyCTdD5xLjo5668n9hJVAFyZz3/8SIW5hdjnKJ HcpJb3BWk1yz92BqTD991oYATIYWQqJ370Smt49aKVPV/cruLER1OuUPg5h1TDhJyN1/ yRsVx0w5+vWgIKhLVtEuDUSdq8jfb6GxLqIejS6RVtWDiczvDJel9VZD2VhulQ0c9dwa EBDURhrtcGE8617i6gmqOMnxXrXb+fji+hquKnG6Dzx74DXjIKvIzmk+R0H1FdCF9ay0 NN0FYrE7fjAzy2IyH05t7n2k43oUZXceNsqp6Oo5vTnEFjwhBO/cHw9CYGakOSG9tvkH kYRg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639334; x=1752244134; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=pQSVMtuGR9d/CnVXuMPrHT78MEH24iCHSmP8n067QA0=; b=Ec0IWj9Hg9cORZac0UL4XvVGvIxkNgJ98WYxcGyOBVkw4Nb52QwRqTZnJ2txN6/bar bBiE6zIYghsroxYQrOzAxjEnHPzk6u32hBsxwnGCu1DpLJoLxofTBkXtVv1m4JC4YMu6 F4obN03+lN61NFLIyJJb0W8iKg0NApNDC0GOWb9y5KatNmAOiRMQPaeBKHhA2Em/+utX c547P1F1iMDBpD1dr5xo+y23Qjvfwvs+rVup0sTfoKcdZKc9BTFLAZ7QI23H0jL4RpVT fI6TXP2ZBfI/9lbMdsgw1Rhu0CB/tO69BNKskcE4T+7v9Q5OzKbSDHeV69Zux3Bl94MS eWug== X-Gm-Message-State: AOJu0YyL3Yf0y+m0zfRjoFIViZw8lH/KIM8bMV01wJ8/5FlkcwkHQAqS v6Zx77LgQIRpv6Z8inQMY/hMovCLlfUAN2L5k/39MUC+mjTabdoNBOIaBL0uxfjdy/Nuq/zdwB2 2oTMosRs= X-Gm-Gg: ASbGnctlSWw6wYz3JIJa81T5m5Gz+p54rymp01n/xydkxr6RektFOZve6a6ieVzriaA e6vXq1/pLVkFX6wlA4eBWH7pp7P2BnZZG94mFnxleOAIz0fT3Fx+mJ8FGHpnVNnqB49CM6LjFtP goccglJZUf/hc0Zdp7QyxMZ7IiKP6WHpsnSFDbm9dwB7s+9FQRNjSeoEph7MkJFp36PoFeumyh3 w8GGbNeRJg1Xlk8lgIWW9EhiWmgCZbR7R6AWcTbLzzbvAvHHqj3QnhT+IyUbP1CEG0qHKnoczau HtCmSnHAghNehV4XXR35D/V7yJl8q1/giwnRJbtN/5gy6//Ai8r6KL9Pu47V5cKGtIUOR2tw5qj SJCDSYPdjVupUqoJHRiaGehB8Civ+6/LrdLbdjoYMdFT47+ac X-Google-Smtp-Source: AGHT+IFcsUG3IqLwernvtJ7jV5mQCfjyvEAJaGoPA4wVojOKALiVLmaYzFXkr2J3OzXZpzv/8o6x3g== X-Received: by 2002:a05:6871:3392:b0:2a3:832e:5492 with SMTP id 586e51a60fabf-2f796d5d132mr1744895fac.25.1751639333461; Fri, 04 Jul 2025 07:28:53 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 095/108] target/arm: Implement {LD1, ST1}{W, D} (128-bit element) for SVE2p1 Date: Fri, 4 Jul 2025 08:20:58 -0600 Message-ID: <20250704142112.1018902-96-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::2f; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x2f.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: fail (Header signature does not verify) X-ZM-MESSAGEID: 1751641023375116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/helper-sve.h | 22 +++++ target/arm/tcg/sve_ldst_internal.h | 26 ++++++ target/arm/tcg/sve_helper.c | 6 ++ target/arm/tcg/translate-sve.c | 136 +++++++++++++++++++++++------ target/arm/tcg/sve.decode | 20 +++++ 5 files changed, 183 insertions(+), 27 deletions(-) diff --git a/target/arm/tcg/helper-sve.h b/target/arm/tcg/helper-sve.h index c4736d7510..1999c4bb1f 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 f2243daf37..e87beba435 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_helper.c b/target/arm/tcg/sve_helper.c index e6342990fa..91cd5970ee 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 dfb53e4bf4..8e945c5d2d 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; diff --git a/target/arm/tcg/sve.decode b/target/arm/tcg/sve.decode index 7020771898..bf33bc305f 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) --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751640891; cv=none; d=zohomail.com; s=zohoarc; b=UFzrOCih1RIK2x6qFifyA9XUI4P0sPAqZyF2hBESjEZ5hHGW+sqGgaUQauzl665u5cR6w/NFSo5Gxgr706b3BaIJURccHAjEZNCBMnyh1LE/Gc9/RIW1bJ9szurC4ci/orgx+o4ZZ8LS2aTb7/9NBlcEPdsHqnmrhhviEQzPiJY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751640891; h=Content-Transfer-Encoding:Cc:Cc: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; bh=/y6ae8MFtHgdri3B/hfnDJLsIID9R8RxmBlWT9Y9/4M=; b=MlbVmgO2I2xh1W08IEUhQhFQmewKayOIV0rMHurHHL3AMgufjXVmhh9GHpzev+TCflMvSBchZfbhdWz1rmIjTGeA907WzYsbzEO9R4qWvvBzjuZUtWaqumUn+wiO17hB/djA7fGyZ7Ka9vK+oemIUIx1NCvAu1F5lwIkjDNq+Ek= 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 1751640891755101.2214846257325; Fri, 4 Jul 2025 07:54:51 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhZP-0004Lo-3X; Fri, 04 Jul 2025 10:39: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 1uXhPQ-00030W-6j for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:29:03 -0400 Received: from mail-oa1-x2e.google.com ([2001:4860:4864:20::2e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhPM-0001gn-An for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:28:59 -0400 Received: by mail-oa1-x2e.google.com with SMTP id 586e51a60fabf-2eb5cbe41e1so851520fac.0 for ; Fri, 04 Jul 2025 07:28:55 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff55633sm531448fac.20.2025.07.04.07.28.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:28:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639335; x=1752244135; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=/y6ae8MFtHgdri3B/hfnDJLsIID9R8RxmBlWT9Y9/4M=; b=xEJZEzQ+2ractfUc8ROuAGifbDV7hDlHIF57lACNxDpOUVxSKkp9qKKwJBQkRlgbNL enefb9WquFXVhAM8uE7cM601okabF0Wj3Bp/bmmZViIvohkE6/JpmPpz6wlwMuR90Gt2 5zcmiu+9Ym8KRdc9yk5SiZIdPXhzuQa1tjtdR5iTuUkLGoKfMob5Ib8sCDAIzx+xgAnH RIfWK+vcbRLrhl9PGWGagIfp0q1BFtgjkptzRM34CaMPFr+Z0i6G6WZ7MyY5EnvD/Ijl MYZJOx0d9mv6Y4FL0p2vizaToei16xrComXw5wRU4W6X/kx12nWqnbkM8Q/RFfoB3Fhs rh3A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639335; x=1752244135; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=/y6ae8MFtHgdri3B/hfnDJLsIID9R8RxmBlWT9Y9/4M=; b=aYvycXTMwKRfYG35YX4yRkuWCG7tDLxLoBjOsIMdaZVmh+hU3r/4LkGLuz2s/hJibM Ljyh2LCVq6dcFFi2YltQeMiWmPOfipXl8vdN72VXTXt0y8bVspvgxZoBmcbkJbfv8GPq CVeaYb0FJl+LHhaMk/leTmm+7TGxLgcbK7OZ5OOwRsK4ztpTmmY/mdcmEZv+VbNcIZ+q 4Y7Udw7du5cWb5NVeVa5SeU/hY+9By2wRB5zdaF8uxdH6QP1326sepUaODpm8pEMYud6 asEBT3nW0aVO3SBINLebKMjc96iYMvVjqbvOTqv3mmtDynrBtZy8lz1uWy0PyXN/YzOG oAyg== X-Gm-Message-State: AOJu0YxOaanju7nAyeUwLmWvMVmi5zyMTkqP+wVDLlxf4CXqG6M1NDoB Ql6GCVAcFtdf+TUebegh0RIiDUZoUQstrxtdKnm/uGUzLsQY1prZ+7Z9gidlsupuL8WcUpsX3dx wHYnfT2A= X-Gm-Gg: ASbGncvl4Bc8eVmguQvkr9oJjAInG/hbuJRRSejAD2HgwvtxpVSopgsEipwdxpCLC5Q CdaGXkfzDr23GSpD+9y3uWifzKrR8aSuZGdAAt2RYwoXwoJm3J7OlSMsOQ2UqpJdLIJZ3J/21bn 7PyexPTRmE/2nPwHNGvCM6tSBfASsL3vNQGrjXR7rtzyfPyyfv6ZuaSVqzPwLlahqQpuBDO7oCB oel7hQSHd7hRKbiQnzFvwtGigFss6aBN4WBudlQQ6BAyK4UOXIaFkk3v4Vvl/Hp7SbIk+6QNn9T 11nOR3ggtvkJ5MmRdXd1CpGlmJ3T7HExsNJ9Wy6FWmgcyfJvqyxT6o5sOfjlXgLGcqTNt6y+Q2T fErVE+ZrTxT/Zo9mCPofJ/pwxsHkVa7+xPgcaniV0JOUscwdJ X-Google-Smtp-Source: AGHT+IHgnqO+DkDMrMm+Rn7hUSH6P72TTWpBMEjvQy3i+NOoSdDhhDfGHpRrBDolrVyY3I1fzPAXlQ== X-Received: by 2002:a05:6870:79e:b0:28c:8476:dd76 with SMTP id 586e51a60fabf-2f796cae8d2mr2117805fac.29.1751639334864; Fri, 04 Jul 2025 07:28:54 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 096/108] target/arm: Move ld1qq and st1qq primitives to sve_ldst_internal.h Date: Fri, 4 Jul 2025 08:20:59 -0600 Message-ID: <20250704142112.1018902-97-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::2e; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x2e.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751640893920116600 Content-Type: text/plain; charset="utf-8" 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 --- 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 e87beba435..c67cda9d3b 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 c1166e4ffa..df16bb2f9c 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 Sat Dec 13 22:57:49 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1751640056632116.66331174062236; Fri, 4 Jul 2025 07: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 1uXhUV-0004Jm-1F; Fri, 04 Jul 2025 10:34: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 1uXhPR-0003CV-Cw for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:29:03 -0400 Received: from mail-oa1-x30.google.com ([2001:4860:4864:20::30]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhPN-0001hW-7Y for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:29:01 -0400 Received: by mail-oa1-x30.google.com with SMTP id 586e51a60fabf-2e9071e3706so780135fac.0 for ; Fri, 04 Jul 2025 07:28:56 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff55633sm531448fac.20.2025.07.04.07.28.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:28:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639336; x=1752244136; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=j5T+1eHIOj1e/WXmzoGFs0diz0NvQu4FPqr7ThUYeoc=; b=m2kSyiC6baoE8YIniNObHwdYorMZNu1o8o7CuqCpovjD7nvfyKyuJo+0OmcYGrqMrh q7xoOn3aBOCOl8C7zyhP3srgsHROOyJA5wGpAlmHN1YyFZSAsBnhAfkp11h/HSNWWuM4 zaVcHwTA/33XvAIJIVeNfuv8DcrIfYgF7w0hz6m7LL44fQzQzXGgVzxhe/WPuTez97bk W2DR438zZ2bEVNx6OXXk7aHsPHr7W/hSyVQwQnWECUxuzCzO7T4zGoV75ri9kFVS1N9h 7FMzMy2lm3TzUQgjRLwjbDvd5wKIfNzuZQ75FUSyNVjexRQBdaKvfWy+7YyEKLAe1O4H o7Xw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639336; x=1752244136; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=j5T+1eHIOj1e/WXmzoGFs0diz0NvQu4FPqr7ThUYeoc=; b=n6WlKjyzDf2510a3/r5M7hy1gmSXYd7YVqb2APUOto0qKiSjjz5T7PDIx/igvbU5Sh W4HzK3YLr1+1xqI+1QvMr8xG6byfxfA2Ew5OVW7/p0b61cnJYCwbwuOOcRu7oat22/Hp J2DbRN0Bf7rVH+wzofsmePYTz4G5AT6jIhHRfoX4D2QFHsxRTq9iEaMSnefptlqFieTy E4JAYxe3BIml11usPCvSXDpW1YYEcI9TEo1AV3Mgkz6snOo0wnbWYeU59liDWyHwlWmT Wp8JV1zWQRH1Y9Dn+ga9fSAgvgzk91lk07i4dKOCdk+0XLhPI67VnmApyyK/WLoMai2g AqyQ== X-Gm-Message-State: AOJu0YyPu5oEwjNqMcHV71GU9Jpjl4rLN1lWoEq9ChsSZDALnQgJX9D8 FVBj3DsBpvPUPpGNsZCV9zQUPiL5xoXwV2ab8awv7vxGAf9vbxX8AcLCGceiK8dKABOwYSD4zTe obcqeNOc= X-Gm-Gg: ASbGncsS5TpdBCzupJUY3eJsVFlbadfzvbUQpP6WOKhDe7Ytxecqpe04pe7yxh9SOoL 86hneu0gveJPC9bLurbiIU1s9YRucUamddmt4MYJa7rswq+kGveNwGvnA46rCtwz3Qp3yUMfuof 2kdTQf+kWW9HZ2w2PMRfcqZA5CjVuCj7DBfIbsuDQetsrY8SA6PA+t8k8VbaRvNMJoaZdFT2mIH jhg4yhW0t01Ind2zqBsh3xArRLlZumAgLFwpCgSuJt12K/+OZsuW0BH6U+MmwELMv975155Qbdc UJdTIcNoHxekeVTnkye0gW2COn517a4B9rViVjXO/aNgT9w27dXMd5A3GtM1wS5A6cefrno5jmd qjmPY1ekivPdOwXI8TXch24Qnj5Li/fLojU7Bagi2rKObG+oI X-Google-Smtp-Source: AGHT+IG585ekIsNAqk6zRB+WWAv+Db4z3C8ExP/tTcqLr3V0QMeQa678yfGAxA9vsj91nMpdcgan2A== X-Received: by 2002:a05:6870:891e:b0:2bc:7811:5bb8 with SMTP id 586e51a60fabf-2f796caabfamr1731863fac.18.1751639335760; Fri, 04 Jul 2025 07:28:55 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 097/108] target/arm: Implement {LD, ST}[234]Q for SME2p1/SVE2p1 Date: Fri, 4 Jul 2025 08:21:00 -0600 Message-ID: <20250704142112.1018902-98-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::30; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x30.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: fail (Header signature does not verify) X-ZM-MESSAGEID: 1751640057084116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/helper-sve.h | 32 +++++++++ target/arm/tcg/sve_helper.c | 8 +++ target/arm/tcg/translate-sve.c | 116 ++++++++++++++++++++++++--------- target/arm/tcg/sve.decode | 31 +++++++++ 4 files changed, 156 insertions(+), 31 deletions(-) diff --git a/target/arm/tcg/helper-sve.h b/target/arm/tcg/helper-sve.h index 1999c4bb1f..ade76ff664 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_helper.c b/target/arm/tcg/sve_helper.c index 91cd5970ee..360114ece2 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 8e945c5d2d..7dff028569 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(); diff --git a/target/arm/tcg/sve.decode b/target/arm/tcg/sve.decode index bf33bc305f..3eda029146 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. --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751640941; cv=none; d=zohomail.com; s=zohoarc; b=ZFmGHgar7CNlUKqF+vckbYv00gguLx78CkvaajW3ZFU8y/IZos0yCUAcRKBqcOmx/SwFAyL7vHkL4M6gq5ayj9joi5bCLLN6ntFWuENtMTiwZOmH+o6E2ZaDIQXyLW7hkE1HZvq3rdkSUfGW3lt9B1nDqWzBdiJHigw1HvMv1HE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751640941; h=Content-Transfer-Encoding:Cc:Cc: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; bh=ZrgLV1hJCWlcAk9bGFt6SGzMPkONZbBNBWA6ashyxVU=; b=IonwfRSyqf/IFKDcLdmDa2VBsIgl+sFAW57mMTctjz/Fw0teipdvjFnQNr38feAXngzR7AesmedLTIaFnLF3nkz9ek+GibllbBTuqij6jAAgOAXh67qptkUQbR7JWVaT2U7ipd5wErQB9y3CkWYK77vDfbDRN1prdUzxrbaTbI4= 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 1751640941264635.7328459122482; Fri, 4 Jul 2025 07:55:41 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhUw-0005MP-Ur; Fri, 04 Jul 2025 10:34: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 1uXhPR-0003C1-5X for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:29:03 -0400 Received: from mail-oa1-x32.google.com ([2001:4860:4864:20::32]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhPO-0001il-Bm for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:29:00 -0400 Received: by mail-oa1-x32.google.com with SMTP id 586e51a60fabf-2efbbf5a754so772553fac.0 for ; Fri, 04 Jul 2025 07:28:57 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff55633sm531448fac.20.2025.07.04.07.28.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:28:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639337; x=1752244137; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ZrgLV1hJCWlcAk9bGFt6SGzMPkONZbBNBWA6ashyxVU=; b=K9aCUUmgqKywVT0rmlq32NS3IZx+IG3WatXrX/yXssKwZxbSF6H+o1/xyy4NgoYVyK xqHXUq/4WkK9x/rttKs+FAd8s/VGfBzD7YbD4I7wuKw2ZWirKcT222SaJ4odNOXVv21G Mtm+XWHswJVET9od50uFpetMHWKJSgjFSXhR/MpYRYzAqT4RXpibDYIslvD9xLAc90bQ d76nm2k629sD7/1RRlcaioQZU5+MpRP6IyUn4PQlqvxVBL8RGOGgUJPUeMB+YfZFzcus 96ctB4W0W7bfdL5gkCjDGUKQe/+VORDANXepgsHjCKNzKb+chwVpEYUrfys9xAHbhWhk 9tRg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639337; x=1752244137; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ZrgLV1hJCWlcAk9bGFt6SGzMPkONZbBNBWA6ashyxVU=; b=O9xSlyZ841SUuch5qyZfNUYM6YfNAbm+wZ1EpRjUl6Fgji2mr4TPoYCwUYRHfL/xX1 6B0lbCaZe6s2lDtxtMM8cBt+yv605bJkP2E4iib4AWtps44Hq2dHyDCFH6QCtOU7JT8e SbxZ1ZQGu6yxkMhIwzRppE4b2LcL8Lzr3TM4cmJb1TwcTN1R6Y1Lh5/gpvrhb3Za9mzc GE5QDoe2Cj6ElGS4gCNs24hYwUtuDS61azQOd3O9h+ydK14ZCdJXzYlqVgHW5G7cuQYG 9R0GxYMa4JsVMPfdy3wcxl3S4CQxqmdSLFNTFuEoMSstOb7+XOFxnmtuBKSnCd1ot1tc Hviw== X-Gm-Message-State: AOJu0YyDvicn4hOk10Gpy52dtTlo6Xc1xt4jbz+LRfHTGNH0WO6roOge /Rm3ueoW5RLzhho+BosSUkD/ZbE2vOzbJxs5G3eH/txWZISjf01C25jymiDnKeYwes6U8LelPLZ 4ipjSl2E= X-Gm-Gg: ASbGncvQYnCa7jmJwjxETL56uhUbZJMra0rgpOh/9ykX5Y5lLWsp/vSrRIcLSx9ysSy 9y2Nt11a13LyOIS3L/6iOni40GgPUGw7ias0DLfs02bs0iPn9G1X8P6W3zAxrWfITAYPRmyJefa 2ZLg0852p+RHdtwct8P3fdBMYxblLJaeFgGX49E4zFx+YMREJKeXAWF+fl0r89pM+laoA39JIHc 03bc9bCHmqicuEhO36ZIjrAWuX+JP/7b0SfOHpxY5KRs7Sk5UCfGVScrPs/pLePxGnmPW2FePqY f9ZWhJDMqKlZt0lCtRHjDB86Tp5PzSQxp57ZQA9r3qVTaVUnzG7vV1jvUYw4pf/m5oLo/Ef7Wu4 ydZ3yeQOMrWlmcqnCA0NJAGSxaDGwEPHRmGfI9grARHEJyzaD X-Google-Smtp-Source: AGHT+IH9nyr7d1rFG6jpiswUv6rTW/xxd0ON0Emo0qpjvMCdyf8fKxozetv4fnaXYbVAnbXG0vm9iw== X-Received: by 2002:a05:6870:e99c:b0:2cc:37d4:82b2 with SMTP id 586e51a60fabf-2f796c0a593mr1780634fac.14.1751639336999; Fri, 04 Jul 2025 07:28:56 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 098/108] target/arm: Implement LD1Q, ST1Q for SVE2p1 Date: Fri, 4 Jul 2025 08:21:01 -0600 Message-ID: <20250704142112.1018902-99-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::32; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x32.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751640942414116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/helper-sve.h | 16 ++++++++++++++++ target/arm/tcg/sve_helper.c | 6 ++++++ target/arm/tcg/translate-sve.c | 34 ++++++++++++++++++++++++++++++++-- target/arm/tcg/sve.decode | 8 ++++++++ 4 files changed, 62 insertions(+), 2 deletions(-) diff --git a/target/arm/tcg/helper-sve.h b/target/arm/tcg/helper-sve.h index ade76ff664..c36090d13d 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_helper.c b/target/arm/tcg/sve_helper.c index 360114ece2..43b872c7fd 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 7dff028569..7b575734fd 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(); } diff --git a/target/arm/tcg/sve.decode b/target/arm/tcg/sve.decode index 3eda029146..2efd5f57e4 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751640610; cv=none; d=zohomail.com; s=zohoarc; b=HZwKwuBqy6HFCQmmOQZ//XwN9sILSOS/8PJHDSLNk6WlSv4HwNc1xMb8EQ6QGMpQtH6gGNAl8e+5kCRqOFDDNvQaEuEPFOV+hI9YsTxPibV2nGt+WFjfi8ofIdx+GFfRR0buhev+Id3hIDuLS21mpml2zrCQXaP6YGsc5QCLyPg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751640610; h=Content-Transfer-Encoding:Cc:Cc: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; bh=27KFz/QbnRCUP0rL1Ovg7EoKPMOkldxvhT6tE1pySAw=; b=k0NHtb8/HAignoqGzydmGuYj5YsUopJ29PqyDVUnZESezvtyE6RTb8TwgmetYcXSCTpDlg6yMXoTJl3xokaf0ez0Hel+HvBRNH4DYrPXj/3ExuN5FV0vpR/IOOroxIkiW/F/tIyFH3BjiMiGBzSluzgxAfBseAT0VKnNDlNxMs8= 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 1751640610291861.9340532839881; Fri, 4 Jul 2025 07:50:10 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhV3-0005YY-Dv; Fri, 04 Jul 2025 10:34: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 1uXhPU-0003P5-Sg for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:29:08 -0400 Received: from mail-oa1-x2d.google.com ([2001:4860:4864:20::2d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhPP-0001nB-VE for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:29:02 -0400 Received: by mail-oa1-x2d.google.com with SMTP id 586e51a60fabf-2e95ab2704fso963824fac.3 for ; Fri, 04 Jul 2025 07:28:58 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff55633sm531448fac.20.2025.07.04.07.28.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:28:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639338; x=1752244138; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=27KFz/QbnRCUP0rL1Ovg7EoKPMOkldxvhT6tE1pySAw=; b=TfuR1W7bmf8Mkakp1R57tmep4vYgxYGmyZyd4nEDIbCo+ZULkYOIeEWBAdnywYykVH /asuF3Ec5dOVgu2PQHIDLNKb+9ObZ0Iwvc4buR3hyrAoyzRBxybOdhfxglLnwUa2XAn+ +FF7j8hYouWUWZJGs9XpwMwn3LWLQ6vyZQzOUk/0CrOBV9fzImlsSGU1xmCSrdRT9Y/6 nLg7tHOz/h60pO8xElkKEC3cAzgWg0kos4Bjj8WLOXhyumfRnIlLQpj50njISuaRA/3X WzLCYfoYGHdsf88J+vToJtUh+GnhneE9vYvNR/zAgc5hppFLGRY7M1flnIZYAnZDdXCG UqlA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639338; x=1752244138; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=27KFz/QbnRCUP0rL1Ovg7EoKPMOkldxvhT6tE1pySAw=; b=oiYy8c32GybOReYJdNPMJI9KUmM0DHi/IWuxohKWrMhWS9yToSVDm28275VALfO8BE Z2vohMzmOa9M3Qpe9Imi4WkzWO9NaTZq8Q0owz/4Nqxts78IE2OQK/xHY0NyKvvs/73V p/e2nQnNZ+Hl2wPxNpvJNinazwcj8K6aEbHlXsMPq5LHZ3RQOU5ovQC5lsXGfUIAcuph nfdUidXLeh4/5ugMCkIq0DO89MqGYZdWRwzaTt+2CdoyvjuN10UWMlz8tK8wbYAEWWw9 VilIUY+oZ+xefz7MrGwnLbSpP58N8T3PT9WtWWsDWFsoGECLkJ2W8YydReHdXdL0Wlp9 71tA== X-Gm-Message-State: AOJu0YxhJvp/HRf9zcMiFpj5l7vqIuWwgxEYjAVD6qvR4Ts8FWgMIAHW 3J6FhIBD7Jw56aa6tQ1/rnM3AKu3DoKvrusa14LegUyOD8x8t2f+j+LkkN3C0ROchTqTmpBGbrO T3f/t/0c= X-Gm-Gg: ASbGncuVvhyi4SfRZytNrI6kJamkAWrqy6qxCsHlpDIG4YDErhKCIkc80KhdXpsVDpG FZf8kitda7JWpf2vmNQdgt/PlBmEhlNXyBYSKbsOqiZJHEBtn3Qjs10gfWy393eDHEqPMjTxPOQ aXsvbUP+CrqlnWYPl9IX8OU0vAigiBTrfCtSQuv3R4/zDB/fQJ3ppSwKmq+SZUVrgSrEkjjZWLV E7CDYORB0ukl5ncNY+gIe6s6Dg0HGGcmI5RMkQ6fmZ1yfLYUR1pPrmewfXzqUeQ0h0LEIL4AaBZ 14RV6sKhxzl0Hp1NjMeb4IuZTdL+rrXWs98vgiT7UPHyG76+n/9o/6jNaOLUrZyR+nxHwZwlVc3 fjFEz7GjdUytw9FSnaTjQFmS58y/5s3aXBjrXauECL0nNhamp X-Google-Smtp-Source: AGHT+IHgq884POa5h1e0ohxU7+TPql4P8NTdtorK0BNgb+1Zr9/lq151t/g8KmEAzVeD2sDCkf3REQ== X-Received: by 2002:a05:6871:5825:b0:296:b568:7901 with SMTP id 586e51a60fabf-2f791da46camr2303707fac.16.1751639338069; Fri, 04 Jul 2025 07:28:58 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 099/108] target/arm: Implement MOVAZ for SME2p1 Date: Fri, 4 Jul 2025 08:21:02 -0600 Message-ID: <20250704142112.1018902-100-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::2d; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x2d.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751640610541116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/helper-sme.h | 6 ++++ target/arm/tcg/sme_helper.c | 60 ++++++++++++++++++++++++++++++++++ target/arm/tcg/translate-sme.c | 46 +++++++++++++++++++------- target/arm/tcg/sme.decode | 36 ++++++++++++++++++++ 4 files changed, 137 insertions(+), 11 deletions(-) diff --git a/target/arm/tcg/helper-sme.h b/target/arm/tcg/helper-sme.h index 467073ea25..c9961d6b7f 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_helper.c b/target/arm/tcg/sme_helper.c index df16bb2f9c..424fc006be 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 7407597177..9592f6a996 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)) diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 0a2ceea8be..f7e4143b7d 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751640786; cv=none; d=zohomail.com; s=zohoarc; b=NbYikdAWhfqC/KC1T0Y259r3FFJQwXM0LUdRG9oYe5Kkb9R8xW/a3zr0ENuJK11FGJ0vcZSRX8Qhan0o6RQYb0qwOOP3lEwxM12l27oMuvX30hsYwbRO70Yz/tKTda7hyiX4/L4Q6kr2JEquDmvOLkeAlT5DM1nxhx+vV4yr7OY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751640786; h=Content-Transfer-Encoding:Cc:Cc: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; bh=31ee4gbuG+xTnvzONPAYhTdNeczCnwl4Vw3AePUR+UU=; b=fnRQH4v0+xSrXxK2FV37EeJ+CsArrPNYgd66TPMHOL6s3eyek0N9TEChsvX5tDIrQu51+4D4z0h99o0sINMSH40iF3TKy/NPt2uIuXVHa7/KciLYWe5d7RVgWREgmW8y7+XhvFzWHl8pWGChNrFt5Gf8xVTY8eZA8ysL52XAJhM= 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 1751640786468842.8396094487738; Fri, 4 Jul 2025 07:53:06 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhVW-0005r0-4t; Fri, 04 Jul 2025 10:35: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 1uXhPU-0003Ox-Rd for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:29:08 -0400 Received: from mail-oa1-x2d.google.com ([2001:4860:4864:20::2d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhPQ-0001oC-Se for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:29:02 -0400 Received: by mail-oa1-x2d.google.com with SMTP id 586e51a60fabf-2eff5d1c7efso818231fac.2 for ; Fri, 04 Jul 2025 07:29:00 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff55633sm531448fac.20.2025.07.04.07.28.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:28:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639339; x=1752244139; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=31ee4gbuG+xTnvzONPAYhTdNeczCnwl4Vw3AePUR+UU=; b=FEckNf9FAf+GRN1M9yKwpwMvtEpgZx3qrABEcNALRpupI3CEJOGxr/eXnko18XaFK2 Gm0+xeiirpmcuo0F97lWXdUneLIlsxpJ2ml6zPMqavXo2fgUjomeQo/VliTy3dyq7ZVa pKi3Qvaa+LQJmWMwaIth2WJDVnyEhYgt+4kwId8yUdsWNk5/L/sI3jop0DajVDmYVjrq EDonF2r9LSeKmNyYOVucPAzXmfQ3YU7hFKyecKknMap54vo5eaF3LZvEGUrD39N5wKeR BsfSzeCfluSLYSB4hWMVYpj89e3PfNUxQeO4AImQNwP6roAhirFxRx/nMKZINCnqB+wx lWsw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639339; x=1752244139; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=31ee4gbuG+xTnvzONPAYhTdNeczCnwl4Vw3AePUR+UU=; b=gbhmVXWGwBSXgtik3rFQ/3O2QEIEa/THUVqF1jkFNkO0f8TJa3fZptNEgjSnIuX4UL f5GzeKYDhG7pb/I9Ywv++mux9dEtEbk30y+kMl9jRJ1DymfY258bjpogqSWjIUOnFwS9 JBbHXMU4E1C7FZXp34jY+OPBJ/tph+yOjJisz5m4HeTYS4bHIkAMeDyvBCUfgN4G544R r15qsDlAaMWrvYEV6lhi/5YRC8TikaYZliFyEUZRdAKn2nzoyu5FcMj7rpIAMN0gAGpo cYhE7YobCFR5Mm2mdm+FdvcpAwINh1GMnFUDB3ySd5YxWENaMuUZVgIzlhoFH0DHT/T4 h25Q== X-Gm-Message-State: AOJu0Yy4dCt9s1S7g8Apb2LpJNnvuVTyUbmeqXagPlmzDSb1ZZO5smyY TiOTAcSw8fCm/rDf1KFgBUem657A2VZ6astP8ujQauIL9YLaqBYBUmjXKPDsNX4axrh9jpiAYG+ zW7ludbQ= X-Gm-Gg: ASbGnctZ5wFHOwavmWaKRaJphU01CelY1rI3K4bq/DC2OcLqKKESh2p5MbRFoJiuU7i DBh8ObSWhCvbwo4oJ/c9d1CKX31nWhXEjQeC2meBHhYzbmEy9Lbx+RplnD7EOVYqB6ZIHw9ryMA DDaZkN9BV2SbWGvOlXMowTCXcjZMN2I4EB6L9YwAigsRKqvya56OYXu8KhfoHXNI8ObCu/soKLY 4xmzwXhUDnoHCmcqsxSPpiWWC5LOqfgvtH3pW+UEb/fbcUgaS5VsEmROmROicfRgftvlNMBH/F/ TfP0R3zu5rizCKBCg5fdipk0SqiQT4WFg2koRSJLu5rdZ8aCYJhWyDNMxZmwwqv45V7ETeaCD1S b5nRRv/BA9Wqqfg6lnDSR/2a6GGcGPnhMuqLfauf7bEgDHVzUPe/jfk7lneo= X-Google-Smtp-Source: AGHT+IHAE8aaiYZO+ocae4GufCCQ6VOO6mCzh2OZKy0b8XlHOIsf76iV7ig2rZDnluyaUqGN/723aQ== X-Received: by 2002:a05:6870:224c:b0:2d5:2955:aa58 with SMTP id 586e51a60fabf-2f79651b55emr1603817fac.0.1751639339467; Fri, 04 Jul 2025 07:28:59 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 100/108] target/arm: Implement LUTI2, LUTI4 for SME2/SME2p1 Date: Fri, 4 Jul 2025 08:21:03 -0600 Message-ID: <20250704142112.1018902-101-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::2d; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x2d.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: 1751640788656116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/helper.h | 24 ++++++++++ target/arm/tcg/translate-sme.c | 56 ++++++++++++++++++++++ target/arm/tcg/vec_helper.c | 88 ++++++++++++++++++++++++++++++++++ target/arm/tcg/sme.decode | 42 ++++++++++++++++ 4 files changed, 210 insertions(+) diff --git a/target/arm/tcg/helper.h b/target/arm/tcg/helper.h index 392bf7b9b5..d9565c8069 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/translate-sme.c b/target/arm/tcg/translate-sme.c index 9592f6a996..d38b8a5ca2 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 d4ee6f4d29..0603db0909 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 diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index f7e4143b7d..5a5b8ff8a5 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751640368; cv=none; d=zohomail.com; s=zohoarc; b=Bj6ONC+1O0VHkpb1upHwfZwltnXRcgqdCwdoOpqmfTGcScB/eYIgZ56evh2gNV6qFj1zH7pS+Jy6KntXQQzgvzHJlq0mZT8xQOtr0sgAovJzZLapKmCkDEZQk1ZwAXSx9FpCcCwfEW8pNn4Q795VHBsUzbA5OCSca8H4eKYxQYw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751640368; h=Content-Transfer-Encoding:Cc:Cc: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; bh=uyEWmMp7L+dAr0fEadjY9idDVfgXR6Setv1KsNsB/Sc=; b=X8g73G1O8MQxRfnfH7Term2RSqOAIKxZlkW4q9ZycDVtTuYi1djPLSYXjlfLh6VfB/TLlDql/6TTMoedsUjUxCPcGNe9Wbn+MjMJwB0UmBLGNrGE3PXq/LSSX5WKZnELpk+ne6pUlUD5C36Bz/OuCkK/Tmn9Dy1iVX7Nkkj1vlw= 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 1751640368345394.15263442657294; Fri, 4 Jul 2025 07:46:08 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhZY-0005O3-Hm; Fri, 04 Jul 2025 10:39: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 1uXhPU-0003P3-Sb for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:29:08 -0400 Received: from mail-ot1-x336.google.com ([2607:f8b0: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 1uXhPR-0001p6-GL for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:29:03 -0400 Received: by mail-ot1-x336.google.com with SMTP id 46e09a7af769-73a44512c8aso341602a34.0 for ; Fri, 04 Jul 2025 07:29:01 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff55633sm531448fac.20.2025.07.04.07.28.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:28:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639340; x=1752244140; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=uyEWmMp7L+dAr0fEadjY9idDVfgXR6Setv1KsNsB/Sc=; b=ItYMyCzXYPXHKawzNwWs8pftGWaAAhaVFWm3tLtRoUP5fLUZjIXSOj/HTXaELdDUHq RB7EpX8DOq5ppy5ERvS0hJBX++YGDGy9KfmTWdgy+Yn2m958g49Ab4GYPnsWbPOY/11A igyMODBRrTszHFJ+kke/DtGq6FeERGvZU3nqUC/w3cWqFCPjASpj4dddtHzd54ueaxrU Ipshfy4Qlji6rpphKueSPsBmc0ga1lJkHlW2cTLrDVY6YI2Knhr67OIOvwrDiKBRfZN5 73KfOBGyPWAY5vkz5Y5H56V1I2mpxg8b9pbgnqsMS4IMPB+R0zDI0IzITH6v8pTXOeGb gXTA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639340; x=1752244140; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=uyEWmMp7L+dAr0fEadjY9idDVfgXR6Setv1KsNsB/Sc=; b=AKmyCnARPBkC15Y6u5QBT2qHusu5cy8/ZWWvZ9EhNGH3XnaxQZQ9wXt+4PCRIGIIM9 iuwunYtRVrKhr6ZOk+Imm5CCs3EfrnIq6QDbLDkbTmcK0szbo9NmYHSHLGuCxGlSlLbo txT41HqkOThqBJWy4tUkPKTqT39hbWQARz+ddJS6+B1Mf3OZe2rbd3eCZKEGX/C7zo2L UBS9WUzVOF6RELehj0Ww6hcoFN+iPxb2zREIGJUbjicPp8cL0fp/gCSrj7+tsXdi77Sj wl/j7oGHTHtny2R8705TmGa/x83+wtFoRaQJXq9+OcT5v3x7lIqfDeP1GM+nfOpny/9H STsw== X-Gm-Message-State: AOJu0Yxm2VEm0KrW1QEWow9eL01VaUSwrA/TeBZuy+gd2Hoa+6VWGjUl +eJjZ5TVtHbhksOICrXGv2YWM7ZB1SCA7L/cMnWQp24+53OBqK/epity2EG5C3fP9ovk89qHpH9 +kYPW+RQ= X-Gm-Gg: ASbGnctWluZTFkFFZsVRN7ut8RJBe1nAwIC4+8PlKzXHAIrwO42nZmvv2VUepcH9ASx 6tRRczoGLpnYulHv768whA83v6jA/VaNlgxwYHl+2RigQ551zPf6nhUVTSs+lTvlpdp11LF79jN jhG8KFvLixJ/yKW7a9sJ6OihQOVRf4kZ5TIimrO0k4igtcUx5pMc1S1xSlpNUJv4JDxL8x1sp4Z 13MIsL76dSTrtdf//EPa8Eeum8iupFgYSXFO6bwPHbrItT2ebU83gvXgelQqeVM33J7UzTVTH7j D4+ftoznpCz5+dN1ocwJFUs9f/kL6d98ppWCAp/a3wHYPoUEUo6Oo64BjNqGCbbn02qqJZhAx1n Myc5pBElWwJyjWG8sFuLfzI1UfNLtmGHAZJImCeb0lE7r1+eSV76zlE5kHpc= X-Google-Smtp-Source: AGHT+IFsvRnvR9vO5mb2y5jgGgCAmH4HKU79xRxfgHV0DNM06UUVvJg1KcMaoHdz/pZasVdj3LzrKQ== X-Received: by 2002:a05:6830:8008:b0:735:22:7cad with SMTP id 46e09a7af769-73ca48e9df4mr1323294a34.11.1751639340271; Fri, 04 Jul 2025 07:29:00 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 101/108] target/arm: Rename FMOPA_h to FMOPA_w_h Date: Fri, 4 Jul 2025 08:21:04 -0600 Message-ID: <20250704142112.1018902-102-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::336; envelope-from=richard.henderson@linaro.org; helo=mail-ot1-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: 1751640369156116600 Content-Type: text/plain; charset="utf-8" From: Peter Maydell 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 --- target/arm/tcg/helper-sme.h | 2 +- target/arm/tcg/sme_helper.c | 4 ++-- target/arm/tcg/translate-sme.c | 4 ++-- target/arm/tcg/sme.decode | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/target/arm/tcg/helper-sme.h b/target/arm/tcg/helper-sme.h index c9961d6b7f..67d620e456 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_helper.c b/target/arm/tcg/sme_helper.c index 424fc006be..1575a2f20c 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 d38b8a5ca2..1167aa4964 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, diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 5a5b8ff8a5..77744eef4f 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751640775; cv=none; d=zohomail.com; s=zohoarc; b=YlFVeyLOfK56yqbhYFPD7znZhkyd47FJxaSIWomI9tEYwvbTdpxoya1IsgvNEvzSGRWDZtSLsoYg85vpJZk8gd9fbbAPQf5Bh49ZrABe1PFGqVREk4ThnM95/EinhU6ruGpAXcqM29r66eCg38+yVJIAs3TvM2pzfZphYS638OI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751640775; h=Content-Transfer-Encoding:Cc:Cc: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; bh=YKpZ3Wi3kiPeGsW/028ukyK/ultYPAj8ufnMNu1KCsg=; b=nbviD7rE/oMGKLzMFZwnNY/ejbgPbt/WzzEu6FJqwIlB4zYepihwgFCC2D5YP/s8/CIuPf/2+l/di41DJNtVlgSA2HvMU+NVFhMoR/ID3PwLlyVE8H+B/TXDjAq4IwyOVWDnL9MYAA4YGvaLPw/VgO96vIWH0mpK+FXZTRhtjlg= 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 1751640775757498.5524758482394; Fri, 4 Jul 2025 07:52:55 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhUm-0005Dq-AG; Fri, 04 Jul 2025 10:34: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 1uXhPb-0003ZF-62 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:29:13 -0400 Received: from mail-oa1-x2d.google.com ([2001:4860:4864:20::2d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhPU-0001t9-Ik for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:29:10 -0400 Received: by mail-oa1-x2d.google.com with SMTP id 586e51a60fabf-2ea58f008e9so1155713fac.0 for ; Fri, 04 Jul 2025 07:29:02 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff55633sm531448fac.20.2025.07.04.07.29.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:29:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639341; x=1752244141; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=YKpZ3Wi3kiPeGsW/028ukyK/ultYPAj8ufnMNu1KCsg=; b=rLDPJN8638ML7h49SuHnKQXQmIvAM3QZ8iV8eaQ4SD4uNFKv8Ci1UR7oMLFjCDafBl qt5WHa4kmOv7mFtTpx40iyzA1tDQQANc7rXdKGvRgrnLU4xgaOQozv1AOxx6znXk6ZQ7 WgfxBLODytuAIszHkTPX8gyz4ullu96Jl43vju1veAlqzPep4B+NZjl9IQvdHPMG1Xnz GiHOqKgyHbz1OpGbpcncjWM5gmRpwoF2WKThkePBIwYsLl+zw0HSQ5X2AzFUetlMuE1P FhcsPfsLQ2glVulLn8c0EcNpoKs5gGBNgehChQm2oMgDZoY9dO8MHoRuxR6bMUuVtuva LpYg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639341; x=1752244141; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=YKpZ3Wi3kiPeGsW/028ukyK/ultYPAj8ufnMNu1KCsg=; b=JNLQXY50WG2Qne8OLUgbLG24bMqJx8qKgvHVhCcCcK4gPDFnE2KzxV2PGCbcnoDwns L0tuHe4VmWkslEZeZNYWCmDJ0S3IaFIXX7Nx41XsBFxbJKHTEgaqHwuqY02VMbfB2luC lXKOv7xIsNEAoNBzdrSF5WxwfK5Qkynph2uT14508a6r84le/595jkOROvtJ0FvIKLha x0pfFrL0C+C6DNzUBJiVtCbJuhGkqZrgceDdgaKdQ1MFyAwOjlaiEr3tn5NwcRNwK5p8 kBQ7Rsd4b1mmCMx7RLY7zo+aF3C6qXPuvL9L0b1X21CiZkdnzxlf67wU25bev9OmGxpX LIAA== X-Gm-Message-State: AOJu0YyIaRk8TIfEzcqlwbh2tbW0x+wp3GTy6Ty0qTO02f+myj0Fm4UP pQsaOCyxRXqVdMxysCVslAEGDe8tebrl1nDtBoqGlCb5BXvtrm/XGgGiUx1x9cawNKiMi5k4zXq PLa52Nz8= X-Gm-Gg: ASbGncvspRueMb+2Ji5RveiF3R/c8e3wm7hUF0cbpNxiKLlb4QQ9H2QoF2b1PGm7r8q HJVCvIEALfxBCinSJL83zxR2ZTBz6BtGNiIRFce/0qUVRfaQHi+/NIcm/xfJOu6P+MpWOciz95e XXBKdWMK/c1eO2zqnmIVgDXzJUlxi7cGd4esqIywoA62kmoxlZgJk5GESY7g/cH19BcDWPf+sFY sCUeqbLGmEYbfGJQbcrJvzHF0v/It+dxIrxrn+RldqdBn6vM3BfLWAi2Vix15f2iDKZdimQ7UOv DINQI9eOUGyIokTIHSDk0XZqyrt4LibRL9gFV1GYcBjXZ1atwm5D83vNT+AF34yRS8zJIBJjrms SKPHS/t/Ii1Z6henNXWQT+r+Hf9CmfPm2bsEPdVHJ5CmwgQBv X-Google-Smtp-Source: AGHT+IHs6XWo2s1JJTPH0ZN/wB4BUXucmp+pTTe6pt1/w/Rf2gmDSCuMNh39nCKXPeGK9MH65EGD9w== X-Received: by 2002:a05:6871:14b:b0:2e9:93c6:6e34 with SMTP id 586e51a60fabf-2f796d38232mr1699267fac.34.1751639341430; Fri, 04 Jul 2025 07:29:01 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 102/108] target/arm: Rename BFMOPA to BFMOPA_w Date: Fri, 4 Jul 2025 08:21:05 -0600 Message-ID: <20250704142112.1018902-103-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::2d; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x2d.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: 1751640776753116600 Content-Type: text/plain; charset="utf-8" From: Peter Maydell 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 --- target/arm/tcg/helper-sme.h | 2 +- target/arm/tcg/sme_helper.c | 4 ++-- target/arm/tcg/translate-sme.c | 2 +- target/arm/tcg/sme.decode | 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 67d620e456..16083660e2 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_helper.c b/target/arm/tcg/sme_helper.c index 1575a2f20c..4772c97deb 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 1167aa4964..38d0231b0a 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) diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 77744eef4f..8ad86f707e 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751640607; cv=none; d=zohomail.com; s=zohoarc; b=W7AoO2o4jVQpheE6FpYWhWa1/zxWABMBnfcNLLkqFIPjxkMU0QZ5WodKt2YuA3gmF8MxUhdsf6URwFrYbjnvRxJJ1djLADwvU+g5pNodLcBgmGXVzSXX+aCn30EhirdHkRY7SP5Y5E6FZsAX35a63QRbWa94c749HrYDQhmxzzU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751640607; h=Content-Transfer-Encoding:Cc:Cc: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; bh=gcJidUgVCed/js/3FKBfJ91rH6i0WIv0/y/g9dQIpSE=; b=AJiAWUK3flBJ9bj2uSlyXGkEwELyWDGmbBFi1qPX70xiKzb/E8qHUeXBgPLF8byOmTnXxpjGUaXB9gSDKlrKu6Dt3EnoXw7tm0mNjlQdYEwr8G05ZfS2bMT7E6zfpeNJ+KaGzNt/T5nqFcjNc9rf9WbWrWBsH+KN4pUnKmaCbYk= 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 1751640607744780.8522682908753; Fri, 4 Jul 2025 07:50:07 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhUy-0005P6-79; Fri, 04 Jul 2025 10:34: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 1uXhPc-0003aA-9S for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:29:13 -0400 Received: from mail-oa1-x2d.google.com ([2001:4860:4864:20::2d]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhPU-0001uZ-Ik for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:29:11 -0400 Received: by mail-oa1-x2d.google.com with SMTP id 586e51a60fabf-2edec6c5511so332968fac.2 for ; Fri, 04 Jul 2025 07:29:03 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff55633sm531448fac.20.2025.07.04.07.29.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:29:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639343; x=1752244143; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=gcJidUgVCed/js/3FKBfJ91rH6i0WIv0/y/g9dQIpSE=; b=qafGXlLCu1HXljZFYcFJdopvGVxLhr5SOAaM2MaYocMR7beSTm6oKqhgH7N+Piaew4 Al+jYIDC5Huwcue7/53iUyd9xq807r0iapxMRk562y6/dNUBu4F+tUYi3A/zbbzlLfxO jR+rsacw//tO89s8QTGVMW9HWQuOhL48Vv43f47jhL2VfX3vzzfjjdLO8QM19TzPU2PQ 3fccTfoH18uSnEkguB7ojSwo1wQtjHnV8KzWrHm+vXlkr0WPa6yrUXr+WOcE0lP/rvL0 Xu0yPu581k41qCKP3nGHppTcmhJdGbrv8+z8YJuaVH0egBh7i0oes0nxrmHpmAQYypkv Ykew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639343; x=1752244143; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=gcJidUgVCed/js/3FKBfJ91rH6i0WIv0/y/g9dQIpSE=; b=HmVPOsmWi2mQNFMyo9GymTN/nKnk3k0X5zy0zf5hbcvEWAkM+Wb2K7q+kriFbSS8wU g7OuimWz5cyTSdUqMiWS7/U2cHSiALZEVWIbeM89kIBpu8XISC4ls+9iEVvYoY5lpi2J WW+tTF3Emzy6/MGSXN+3+P8Mjtv0Hh0vjLG8CQVNzmU9MHYAV87uyE4YQZX7OZzE10IM csGsh6Jm+dRCH7ebSY9qhneiO7Wgz0migs/zV3iSxEgsfs7gaCvHoF1C1EjVDipm8x2b iUCrr0AUEOZ+IjCSginpjuinrzkw2PHNYtiQydIosgcRmKVUhnXDlpRSEsawFs24QBTb zxiA== X-Gm-Message-State: AOJu0YxjIbHG39suGqk2i+FmILE+Ff5iugfisItLFzhcTdByzbNRcZFu NygTg3sGWsVnRwwF53IxN8/FCfGGEazooVUzuESYbs6Sn0h3Zap81967vnb8eIvbqpFvXpfxAH1 32rhW8Wc= X-Gm-Gg: ASbGncu65PkgrinDpPWGmv0OWHMK3g1etE+8zIAkJ7J6E3tx89ePQ9Iuf0XZJwyhOMd EUWevcMUx7dl9jEGpGB2VZuFYxHOvF2Q9CcknUD/Y1DBFFikH3+WtIl4CWDJfJePCE4jGUXo3Ij +I0SWq2A5cuaqqTe2sXq4Sm92zXoLd018U8lv5t+Kx+PClQIAPMkmi7JeHbDwW+ZaNcdc/LSSSu mkvSCJtAWX/h6NDwEXv4KhPG0DzR3pDCgytW78+O9lSOEuLPaU412NwYx6lrJE+BBTBrm5F6aIt 7SvFxd1fPoHI1DKZs5nuR6Vdz/mW/ahc3eeeRL8UnEqaea78oHMTh/pTk37mfGORTgN2iecH/Aq +jV6EW2b5/DFYCY2GPBbIn2SBNChbRjpHdAIzqcQ5VPsCflMioSMnCq7G6Kw= X-Google-Smtp-Source: AGHT+IGEgcfdyC2QbjrHo4GUvdVdAAB4ZlXcRnI4i+s66I2so0sJ0eYktIQR/Asquqld/CWMrtafww== X-Received: by 2002:a05:6870:3106:b0:29e:5de2:cffb with SMTP id 586e51a60fabf-2f796a8c5f3mr1693658fac.17.1751639342827; Fri, 04 Jul 2025 07:29:02 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 103/108] target/arm: Support FPCR.AH in SME FMOPS, BFMOPS Date: Fri, 4 Jul 2025 08:21:06 -0600 Message-ID: <20250704142112.1018902-104-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::2d; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x2d.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: 1751640608620116600 Content-Type: text/plain; charset="utf-8" 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 --- 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 16083660e2..2b22c6aee5 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 957bf6d9fc..cf41b03dbc 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 4772c97deb..eff0ce7480 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 38d0231b0a..782f408061 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 Sat Dec 13 22:57:49 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=1751640494; cv=none; d=zohomail.com; s=zohoarc; b=hej6vsuwoThYDPMAcboPuCB+mIWLNbOUleexmFV6EJ/7SWyDE/L1Ue9DXWi3OhNiIJ56xYX5dnEoP0lZY13GccTiDf5QWPkUHb/IMDjkAwD8bbYIRM0N4lhslszFqX9iMnOWzKK2zGafdWmji5+J8ZUefdN1mZ+Kez2GBtiDsYI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751640494; h=Content-Type:Content-Transfer-Encoding:Cc:Cc: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; bh=KeNVKwtvSWzfTAd3k1fcKH4xf4XoDEBrDb3NZwoYAzA=; b=Bilx9t46qCqhaymrXm5Mfzq476FQqlOgEkFSldpKxhCyWBLadnn8WPornCwctena5+y9JEO/gfJp/f4njbNgC29V8oALyvzpYSDTiHm5yGU+ABpppZDY9AOuPEljHd+o7X5L3Sa5Is3tHUmHBasR75FsaZB5K9w8EiCTYJGxqvs= 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 1751640491940567.2481841522267; Fri, 4 Jul 2025 07:48:11 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhWY-0007JH-2h; Fri, 04 Jul 2025 10:36: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 1uXhPd-0003ao-AC for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:29:14 -0400 Received: from mail-oa1-x2a.google.com ([2001:4860:4864:20::2a]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhPY-0001wk-PK for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:29:12 -0400 Received: by mail-oa1-x2a.google.com with SMTP id 586e51a60fabf-2ef8dfb3742so211519fac.3 for ; Fri, 04 Jul 2025 07:29:05 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff55633sm531448fac.20.2025.07.04.07.29.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:29:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639344; x=1752244144; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=KeNVKwtvSWzfTAd3k1fcKH4xf4XoDEBrDb3NZwoYAzA=; b=PGpVAOYoqUiM3x5uc2SYkrzfl1GY8Y0gEJVylh9QobPZzqQdHCF3N4cYnTUKPuwYwH 57pP6gJ2EH0JT+eyYnaf8eoIP+bzopTqM/k5VbDnJ55C5KQ0uQcZTqPOemovThJmr974 Jhfsf/u2QdRgEZDQt4XX5JLjci25SMLqQgPf5W1mxCPpgJ2t33oXarOPl5tuLl6StfmX 9/LEkbaKGXuYBzcJT3mY9dwb2+p2qfXX+o8ZcyUDFVZ6qR1vG5BEpIWqmtchM4CKJOB2 pHq/qG6V6xgqhTXKWBhVEOv6ndrB6t93ZxTfb3cw1+2w/zixZyU2onN/cFXMciLxLWsE /RhA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639344; x=1752244144; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=KeNVKwtvSWzfTAd3k1fcKH4xf4XoDEBrDb3NZwoYAzA=; b=kB2xAVEimgzf4KI+bUiN6NYo4y/41cCqL4GMwCBIyt7EulyHV8Zaa5oybRn3j4G00g 4x3ffKmLjOlPkokGnqV8KOMpmQPIQo5WSdtTlfVEOS6bprlloA7nreMcraBb7iVWjKSE MIKq/XhXABofq1DxfXKuMVg/n9/JhJ8Ryg5gEOXuGUu1fpq+hFCooEl3Q+LZ7p+N8eXA r97i6N6YVtq4FKvFlR60dz1jHch3HFSwiNkDy798tdVlhUXyFNYiRhbK43omsuD8Uak0 l6Zzcof9ad9b1m3ftFBXYQnEH21IZpnJnWP3E/A5FcraPF4Fuk8azp/hYQGM0fB6Gxwe bBYQ== X-Gm-Message-State: AOJu0Yz7gGuwLsJPgyAxTXTwvXT2tkOLZsz/CBejmP0AZdBTQmF2LXAu mQ3M3inBYXqesdCaUCDIiR1F6SLKMZHLS/pcgg7vrm89OdhsC+Q3SXC+T6XD1Vydu4DYFBcHV0E czPJkM4o= X-Gm-Gg: ASbGncsH6wBaa4SSCEPGQZkJc7HV/Ny8z5uT6g5SehJnEPUKywpR+75jXoo70PB4FoG BDXOiLT+NlZsVOBVtrXKrTmb6qhmrc5WXJxbTkgsYINFV3hw/WTBUiA1+WXfQO0yq6QRvzFkOlC BEbILj5MuJpio4Pq8NIrtOR5hb93D9L6LCXSDQ1vpzIGeC1wHVwnPKebEfNI9Nji7VpZADwlzZ/ E5hIqq5QNwsbpb7geMDLeTeoJv4s4NYV9mjkS8ipHpcv8ct+pwKlZrOL5fd9ccNDKzI7uA9nV10 eyM9btVu5VOPgQggI1Yfvs3T5ZxBCz+mfOr8RZpNT/2AqkEwfvooZLedocSNwJePuIpsdKiSufu xm3kpLV+kgO1v+k6RSsi83SErvJAubmFjgyyo8yRoAYbPWS4C X-Google-Smtp-Source: AGHT+IEx6Ze62pDKfPs7wG4Dytn88pewLs7GfpWSvSLL6gQ7c5zPCFQPNjiHyX1nKV+kVkAHIpdeYw== X-Received: by 2002:a05:6870:1484:b0:2d6:2a40:fbe7 with SMTP id 586e51a60fabf-2f796a56f59mr1899344fac.6.1751639343963; Fri, 04 Jul 2025 07:29:03 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org, =?UTF-8?q?Alex=20Benn=C3=A9e?= Subject: [PATCH v4 104/108] target/arm: Implement FMOPA (non-widening) for fp16 Date: Fri, 4 Jul 2025 08:21:07 -0600 Message-ID: <20250704142112.1018902-105-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@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=2001:4860:4864:20::2a; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x2a.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751640499138116600 From: Peter Maydell Reviewed-by: Alex Benn=C3=A9e Signed-off-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/helper-sme.h | 6 ++++ target/arm/tcg/sme_helper.c | 51 ++++++++++++++++++++++++++++++++++ target/arm/tcg/translate-sme.c | 4 +++ target/arm/tcg/sme.decode | 2 ++ 4 files changed, 63 insertions(+) diff --git a/target/arm/tcg/helper-sme.h b/target/arm/tcg/helper-sme.h index 2b22c6aee5..fac70a82b9 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_helper.c b/target/arm/tcg/sme_helper.c index eff0ce7480..d23d9f08d2 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 782f408061..119a5665e6 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 diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 8ad86f707e..3c58fdd2a0 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751640890; cv=none; d=zohomail.com; s=zohoarc; b=m1KZ6/8jhS7oHNRtkFdCmK48TScSz7J1w1KI9z8pz6o5P2Z1bgu1oHmLhGjG4nr53BgmGf61Od1+42u3B1Uq4sccb0PV6aNgM3/K5yCmm+VMgZoBnd0dkPXhaE4bwYo91f6Jy7wbH7qhOw3vFnK5fnffGK3gRrLCbYlZvI9bezg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751640890; h=Content-Type:Content-Transfer-Encoding:Cc:Cc: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; bh=BaetWJ15cQFkPEfdWC9a2/JW2VrVNcRjZFn2m3OFvj0=; b=guiPsvkFS2m8sAnFIYIYpo4K92V7S79J4dMvISgfSbwrEc/pP0aereUzILyGZDjfs6LkSqJEALogs7WS9bucXX/+o0k/fVCEEAE24pOfk4OiALfnEMDwgHBwSVTd5N01V9IDOPLzxwK+66CJLQkvP4Rsk/2y1vHkSqvxmbW1Bc0= 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 1751640890392136.41862269416617; Fri, 4 Jul 2025 07:54:50 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhaA-00066z-9N; Fri, 04 Jul 2025 10:40:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uXhPd-0003bT-Lf for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:29:14 -0400 Received: from mail-oa1-x2e.google.com ([2001:4860:4864:20::2e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhPY-00020j-QM for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:29:13 -0400 Received: by mail-oa1-x2e.google.com with SMTP id 586e51a60fabf-2edec6c5511so332974fac.2 for ; Fri, 04 Jul 2025 07:29:06 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff55633sm531448fac.20.2025.07.04.07.29.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:29:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639345; x=1752244145; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=BaetWJ15cQFkPEfdWC9a2/JW2VrVNcRjZFn2m3OFvj0=; b=F/G6SL/Vmdca6TIx1iahwF6uBq+1rqg5M1x/COUmDKO9Tb9Ngl5bO8ekNo7aQaPPsM arAgtVBNZdngHr+l1SgscRDF/7UroQ0KLjY6eXB4IjdhnBfOqB3CIFHlxubPK4NaFLJK saRHTO+BWc07+DoToRkAYQZYQEbseExOClZ3SRfU6/V8brZu0eJQ3gpYJewpu97oURfJ kXO81z8nZca5ydRxARtAJoQCBDnbuvtEjhfAyfNMh0PZm22LJJ1Ta3OpV4cjas/1lYnU CztM/yp8LWH0HfKBjIVQMjgCgPBOZmVKBR0XXD0V085oY1qQdFUXhS/DkWtWIt1utEwr yewQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639345; x=1752244145; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=BaetWJ15cQFkPEfdWC9a2/JW2VrVNcRjZFn2m3OFvj0=; b=tcGgUTx55bhR+XcxiwsWAH/Q2qI3QRmfWZQ7LkcGUtYwLU9G692EZwq2njKZsnxTtA 6yVjqFJMmGYvVdYYbe6Uv9LIth5M1cKeWK5ZdqSM5qRsWlafCUJ0e5xs3Kfu8SSbtLmS C9UkPT9nE4EMtoiBrW+BqIR00EO5QzB9UaCfMrrnt9nfyVptCG3kqNwoI6AsHjl0bzkr iL4mRf2kMBtgsiOWQVHXp0GjCNmlVlWDVI0pCMeHUPZ4nz4DRBw5vAmoEPlHaxtnQ21n xPYjtDI2dxfUL27L6nPpQF0zwczJRpH5sDkYuJnXZz+6JJpZNUIobgt56Vncq2PP9oIV Atcg== X-Gm-Message-State: AOJu0Yw0/oHwcZ2KfeTkyOEvwSnedesENQG01ojbWn+H9VnkeFlILalw wG8QTstyVp5yL8qsOUgyJE944QNOGSSM66jWyoGSu55NeuMurhie1Xh+b5z+hliZMlPSuIy1ZF0 ll4PVp+g= X-Gm-Gg: ASbGnctL4RRCL7MIUW0BF8uqlrS1aqekYxPu7h2+LQbKufAW9hCMyPjhFIbEF+J9FAk miCNmzNgGWvXHyZIqbBfpnn15GqVMR8Y2g95ATyox6bBDTjw2/4YzLX6p34v/B4E3+Y7pjGTKER ihSVjU2R72KYf5fyYi9OHTmYUWyeBTE0POH0O6eJZHZBDGWP/3CFIb5BKo6AnYb1+Iu8qofQfbH 70wcaMQaGDQSlhsf4W5i7BYzVdkEWHdDNzPo59nXOGFLgKBwyPYDgB8avmGfIWOXts+wBRgvJZ+ rXbJEfHuOWAZJ2pjjEg21C1J09nAioQpfp9KQrTPvgsjg8pwgTHQGRaaxhRqOMfBAjj1QAEB74b KfrXYsartgtwKQQm5QthraNEZlPpvmlZqmBKI+df5FZ1Bn6OJBPsKeZCUJ4E= X-Google-Smtp-Source: AGHT+IGMbTk9W4e8KVhe79U4OAAQza0G/YxGPNomyCJMoJuLfAvYlNv7HNrF0PGX3UkXG/5BaV9UYQ== X-Received: by 2002:a05:6870:4686:b0:2c2:4d76:f1ad with SMTP id 586e51a60fabf-2f796a09a7amr1635362fac.16.1751639345416; Fri, 04 Jul 2025 07:29:05 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org, =?UTF-8?q?Alex=20Benn=C3=A9e?= Subject: [PATCH v4 105/108] target/arm: Implement SME2 BFMOPA (non-widening) Date: Fri, 4 Jul 2025 08:21:08 -0600 Message-ID: <20250704142112.1018902-106-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@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=2001:4860:4864:20::2e; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x2e.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: 1751640891949116600 From: Peter Maydell Reviewed-by: Alex Benn=C3=A9e Signed-off-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/helper-sme.h | 6 ++++ target/arm/tcg/sme_helper.c | 51 ++++++++++++++++++++++++++++++++++ target/arm/tcg/translate-sme.c | 5 ++++ target/arm/tcg/sme.decode | 2 ++ 4 files changed, 64 insertions(+) diff --git a/target/arm/tcg/helper-sme.h b/target/arm/tcg/helper-sme.h index fac70a82b9..1fc756bec6 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_helper.c b/target/arm/tcg/sme_helper.c index d23d9f08d2..bb8ed1ed0e 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 119a5665e6..65fc8bc9b2 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 diff --git a/target/arm/tcg/sme.decode b/target/arm/tcg/sme.decode index 3c58fdd2a0..6bb9aa2a90 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 --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751640521; cv=none; d=zohomail.com; s=zohoarc; b=juHMDVq8+T9xY4l6sIlrgk3b8EIj/uAjglJAZxQ3htvTy5g77ObIkwEuYogR8BHgH4zaB7ZcmTgfBBmTC30/ernK38+XonDzAgt6LzcJ1jDXnD1U/+lA+3zgcgU6ihZzP+QMh2GV+tjfAejp2guS/xphTq8cBNm2d3NNywCFSpU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751640521; h=Content-Transfer-Encoding:Cc:Cc: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; bh=TuRlMWp4S2tbggCNreOTfPefIPHrwsyeWu0fbRw453U=; b=S8bDwiZWUU87vjuihm3JsWWy3WBnl8jwmvkQ1zvyT8w0/Dj+ocjkeVgBb2khwa0HjcO9ndT0C8LmdhH+YrU/DBU1UHafhYJf13Om8fz7DN6pFkD5nzP6w8jYF2ap8X8FCW3wD06Qw0rttDR26mLCfWbNeMcaUbkGj/yPiPPKxuE= 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 1751640521615240.9211193095399; Fri, 4 Jul 2025 07:48:41 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhWm-0008Au-Sx; Fri, 04 Jul 2025 10:36: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 1uXhPd-0003av-Aq for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:29:14 -0400 Received: from mail-oa1-x2b.google.com ([2001:4860:4864:20::2b]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhPY-00024S-Q8 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:29:13 -0400 Received: by mail-oa1-x2b.google.com with SMTP id 586e51a60fabf-2ea58f008e9so1155794fac.0 for ; Fri, 04 Jul 2025 07:29:07 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff55633sm531448fac.20.2025.07.04.07.29.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:29:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639347; x=1752244147; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=TuRlMWp4S2tbggCNreOTfPefIPHrwsyeWu0fbRw453U=; b=ZuVrL5al/aauGArSTUyV/O6L7zy9NjHHG13+A3Se+axYfK5kJdnUbtGjX0+M8tjw1L rYWa+m5lgdEKiDwXz4Jbv6g/9CjexzwOLPmkPJiU+TB8Rp/NAgQ9zNLfVQY0vT9YS35U EJ/vb7twqkzhxNd+F/bmot1jxfqfOlOTI/t4d6uwgGdKePR7J6T3d8AGNA55FEFbX1Ts 1wUEmQXdgmcEb6lgYsBxRn/4nY5s51sGi+NE87KkoJbEWk71/fwFgb9jyVjN+5JxY6Dm gFPCackCCTT/gUygB13mMpqD6e+luSug5JjXmrk/Ud8EXd1upGsltv0E19++StLXO5x9 y/LQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639347; x=1752244147; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=TuRlMWp4S2tbggCNreOTfPefIPHrwsyeWu0fbRw453U=; b=vx4yQQiVfLTkG7FgGKWpk6okdptCHBYCGB6Si0D+Np7amgQzEML63FdyMuwaniu3N/ fDEH/QqdR6EgADktQNUewE+iUIvRqjnOUJlZDmW8+ISDY8tnztiHPE4K7dsBlcYawaba n/tF9wQZ9Ug7rN7p5ErYObNaYytnSlLZyTiKboT2hCF2DJZaUig7msMjXEF+CLZ4AO2W PQ0RD7QyOktbmnJkdd8mvLPwTR1Ecfk8MjC6CSK92a7WoNXGcBodjh5yXdERA8C2ZoR+ EfKBrR7eJpbf3rciMwiCJijNbTPsAozZQrAl2JSo5EsxXwDlkZYyt2JabvF7OrPciF1i MSMw== X-Gm-Message-State: AOJu0YyEYm4TCcwYegAzWoSRE6AlAUo4fYHOw6stZBhsaHRF6Fqldman mMM+eK7byIPUJRH5Q1TfkFeNCNihOjUNc9cFJE1+4VuwfQ84jKM4ZbJyPOiF4PXUnih0n57rv/s 94cCjCDM= X-Gm-Gg: ASbGnct6c9vMBs/XBRLI5Aqukhxs618HpB+Vy61Zj7sa9F40gIiLqhfqZcO0IsoBawR QViyOefmGMUqNgTIE6WP4v4Qs3yqE85tFxveybktc7+SdhDVGBOo6PficltCdSNkcJnqOg40bLg YSgg3v8yoBWqC2jK8ze7tRuuIB3i26aqUpAw2NkizgCFXUheLYKOcOcaMkm+9Wnv9DiV7+yoN4B bzxIYHAoD8uPvL9PJSsGb8pVafeF59vQTLRdUsW8W1FZrH9t4hBdimbe+g5gYK52Qi4s8dbLMpU y0V2Pk9EAMzABwvcojoxQSsfm9t8X+nvaXkgwm2VqFMHch2CkEXdzHvrcO6lLniq35QSBhp1CYe dS6u8mpDtYu0Mjf6vxPP9njh9FkIRZoN6J/fSkc4Aa7FpvLHM X-Google-Smtp-Source: AGHT+IHg1vB5BJkTuQw543dt4PK9JYlj/K+XRuFLOhOW0izujdlGU86HpTgu4XVO6J7tfj39yK5ipA== X-Received: by 2002:a05:6870:a982:b0:2e9:e2e6:4a20 with SMTP id 586e51a60fabf-2f796adb07amr1682936fac.16.1751639346824; Fri, 04 Jul 2025 07:29:06 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 106/108] target/arm: Enable FEAT_SME2p1 on -cpu max Date: Fri, 4 Jul 2025 08:21:09 -0600 Message-ID: <20250704142112.1018902-107-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::2b; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x2b.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.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: 1751640523682116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/tcg/cpu64.c | 10 ++++++++-- docs/system/arm/emulation.rst | 6 ++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/target/arm/tcg/cpu64.c b/target/arm/tcg/cpu64.c index 937f29e253..d0df50a2f3 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 diff --git a/docs/system/arm/emulation.rst b/docs/system/arm/emulation.rst index 78c2fd2113..890dc6fee2 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) --=20 2.43.0 From nobody Sat Dec 13 22:57:49 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=1751640082; cv=none; d=zohomail.com; s=zohoarc; b=JOiZ+uY0DUBpm6PGWIRyDxmN2RI3jT2y4je1v6ntMO2gmXSQk06txKYNZ+zb/JdJ01beC+FPCxifaaWXZgYeiSO9K5EiMryc3t1TrYKAxRD20Bpy5g0ccK67QzwDcWnxQUNUXgzqQ+XtYCk0MLd0h6+LPPOcHXDCmqoYkgma79k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751640082; h=Content-Transfer-Encoding:Cc:Cc: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; bh=hwo8yflGFxZLtr4Vksv45YT861XKQ5Dw7SfYxI0Ogtg=; b=Sg0jOL64WWiOnHZEOYm7P0etEknp9QvwHU02wC1eJtHl6fZOHdTyzqcZFEfjQC9ZUkaAvvC7jktV97VVpXqSvO9oK+hvocEMwk7KvXhRLcIHP1QftQG6Lvc90O2FtfbLQxEts8AGvjt8tw9IBDUis3V39+DWj5HNQUatRTEjFkQ= 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 1751640082319779.9268530806481; Fri, 4 Jul 2025 07:41:22 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhWL-0006yW-1C; Fri, 04 Jul 2025 10:36: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 1uXhPe-0003cW-KN for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:29:15 -0400 Received: from mail-ot1-x32d.google.com ([2607:f8b0: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 1uXhPZ-00025A-4E for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:29:14 -0400 Received: by mail-ot1-x32d.google.com with SMTP id 46e09a7af769-72c16e658f4so659942a34.1 for ; Fri, 04 Jul 2025 07:29:08 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff55633sm531448fac.20.2025.07.04.07.29.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:29:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639348; x=1752244148; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=hwo8yflGFxZLtr4Vksv45YT861XKQ5Dw7SfYxI0Ogtg=; b=bkZxZrrFBJrpeaD6FfxUJayrbrWf+WbIapH1dY+wQBxYrpro81Nae3So3HNAhEXBlf zNyVXnNl6tMQdQpCYaZLh1L9HJGsID3PQKWx29u57D6XV9KkglVTL0t5I26tpaV4XE6C NXDbXOev8YNJ5/O6mezPkfq11gVD8ix73yF6QMmh1eTqIAVeog75fGUn+ErNWVDowkoe hdc3MH9qXMTg0CQXTVWihcZWfhXJWS7zhX3fnkGe6qUGGu07sRCk4Sv0aUJ2gZKIDpdq 9DGfUVlJUl9gbWJLZWByUKx4b0zfCZE7bLoEYlumgu5VlW8VcMvuSdPCjMSRLla5LHoc NGqg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639348; x=1752244148; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=hwo8yflGFxZLtr4Vksv45YT861XKQ5Dw7SfYxI0Ogtg=; b=dI8XYlk+ko0w7PQJKwf42lpd5nCqyPRzMyIwCSXKsuZA0j9v3Mnmebr/KfmaDYpB1M MawEaqnkCNRToC0BaOGzABLUe/aVXxCiI/i/MUVGMCYdOukZa6Ru5Nj5dlX7ezgqO8fN vQnKH0zUPHX5VNiNSpRMc693OZSozn5cVpKtnyuXkZLrpvO/Z5UYHCUqmQ5IXii7dDOi 1wt4Rkz0YrpbtChTuVlLESOOB2PG1GU4o/eni2J86ANUp4b8u/t2ORFtJIvN5mW8W46c jsw2+ckAZ9+66Kb2dR/9rmCcToreno9hKM3h8KP/pgEacRmzmk0SJn/9nUZO6WCmpcCH Iuig== X-Gm-Message-State: AOJu0Yw/v0DWUV/J5uaTaZev+FWnDgE0oObdMnWlrIwHoYoJRVcCZPvr TuWOKrPKf6d3Cn+4SsURcNVp7rkg+u6AsFfLBbGumkcDEif61Fa2+5r5S+pXyyQ1inKIlBVV8wI sTn/TTSk= X-Gm-Gg: ASbGncvsniL/OSw0X6EF7K3uaCcoOzwd6d+mi5Oa9Yuw003WCX/3fB/wvFfAVR0aQVo QHR1Jh6LO8kqXUaPUXuZVKQ9glU59aGQJ8oTJA7gjcIpjv1V4LBdk/bv6r++tu3owc4d1VpmDyX BxubH79Mf4mlEGGvGnNjqVGiiYwsjyaf+dEXFa8rQYrCdqCn7MYwEGS2BjMSs3PCJiwQEO1hjw2 S0Nj/xi+dZ+nyZV7uimX0IrhjFZZVR0s5yfRPVmwaq8ujMB20QO128BBvcDwjoL/aoohr9Qm1VE 3058aSSirlwEP+4DbdkYQ7pS4Og/rds4t3OZJWboCENf87+zzUrgx/zfBO19SLTuuLVYL9wJDGp V8AL/5cd7Tb8QTTBUrFmTCdkF9H9cUjXXTsth+rxJG8IrvJy1 X-Google-Smtp-Source: AGHT+IGCHjXSvwEJazV+53P+yW0CLBYj499ypU87jA5IiFtIgDQsIo7MwoisEGvkif8mevWCZWfUuA== X-Received: by 2002:a05:6830:730f:b0:73b:32bb:7a06 with SMTP id 46e09a7af769-73ca66d76e4mr1748532a34.20.1751639347624; Fri, 04 Jul 2025 07:29:07 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 107/108] linux-user/aarch64: Set hwcap bits for SME2p1/SVE2p1 Date: Fri, 4 Jul 2025 08:21:10 -0600 Message-ID: <20250704142112.1018902-108-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::32d; envelope-from=richard.henderson@linaro.org; helo=mail-ot1-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=unavailable 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: 1751640083304116600 Content-Type: text/plain; charset="utf-8" Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- linux-user/elfload.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/linux-user/elfload.c b/linux-user/elfload.c index 2add1665c7..ea214105ff 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 From nobody Sat Dec 13 22:57:49 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=1751640065; cv=none; d=zohomail.com; s=zohoarc; b=OOzDar7IdGgR6tXdh/4AZuooK72S1VN4bJKC4LIsviUvnIXPu8AkIzMLpL59c1NAQITsAR9XsJQl83O5yM+P06zljjuI10jX45mSDnwxt/PHltuQtZlD0lxU7wLlbxrLaHqgya9+o2YqiF6p26P2U512lSbDXKqrDie3fV9xjGk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751640065; h=Content-Transfer-Encoding:Cc:Cc: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; bh=7/B4lDUEqafN5g8eYZX+ybcJ0Y62/HOxTSdDxW3/oSE=; b=Tp0apxqmOYKj2LkRN6evxYxmpfLb35VJ0S2oCyoUM5vQGpRKYYII0hEokxBwiNG3X6OMdWAbFcIQsjoHv8ZJj8CW9UMKPt9Iyo5W+PxrMX5fq0ULkBYgniqIHcroyq9TLyzSnVHYNrxJeSJFR8QUv/zc9iIXNOwyPZHhgx/bH/g= 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 1751640065736281.8197187547223; Fri, 4 Jul 2025 07:41:05 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uXhY9-0001I0-Fd; Fri, 04 Jul 2025 10:38: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 1uXhPg-0003ko-Va for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:29:21 -0400 Received: from mail-oa1-x30.google.com ([2001:4860:4864:20::30]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uXhPa-000269-V7 for qemu-devel@nongnu.org; Fri, 04 Jul 2025 10:29:16 -0400 Received: by mail-oa1-x30.google.com with SMTP id 586e51a60fabf-2ea35edc691so368626fac.2 for ; Fri, 04 Jul 2025 07:29:09 -0700 (PDT) Received: from localhost.localdomain (fixed-187-189-51-143.totalplay.net. [187.189.51.143]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2f78ff55633sm531448fac.20.2025.07.04.07.29.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 04 Jul 2025 07:29:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751639349; x=1752244149; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=7/B4lDUEqafN5g8eYZX+ybcJ0Y62/HOxTSdDxW3/oSE=; b=rVgjSpND1sNMQ1ZA+btdNe7Piq70LkZR6tzbAtUtOF369FY97ls5Xw50Rt5qoVRaDm jvfJcoXWLL+Fk9a94Y+hlSiH7zXf/JAKGGHz1NlxaY1oj6TLUEBm+2dsiEEOh1F4An+e /xb97Ou76VR2l6Vz+qMz4Og7XtXvVLEJFMDBofDXzLFIKjpvq6N7WtB27N93iwA/V1sP K2FfoJi4LIwff/vOYNaerO2ynoFLLHPKElK9VKc3OFsWssvgeViiHalx2thzf7xlcR7Z TbMtuF7+seqOT50lHTIYXk1Lddcb0cY64Y7Oyex413mja9pha2w5LidHAEsB1MgHyq3h 54AA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751639349; x=1752244149; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=7/B4lDUEqafN5g8eYZX+ybcJ0Y62/HOxTSdDxW3/oSE=; b=lQEjy0gVRrF+UlCXD+GiLwEukaFZ5VMAID3shQ6GUceq3+zL4GP2ztxqgTjhw3w5cr FBQ9Gp+f3sW3CjetNonZ9uMKM/21b5dqtCTQpbRsOWp3KvEgYM3G0bFBkhQk6ISY9l/M 3kj/6BPJRFLrs5QVpG5e4SnOrnIaks2eL+siHohJ0A3JPLXthpTiDQsStx7J7Dxl9MWT S9r7u+1zS0YI4lCfDBNRYjusNdNCmHc00tLwAqreMgcOGYUKAItVO5HmcAdMcs5fpKgN DTx8143lJ5rDb7Rxcnnxctk3zBhza7wtGV7+UjRN4vfuJy/rXMvwPQXmUDleDhmmI0Hg 3KlA== X-Gm-Message-State: AOJu0YzddbuOlczxFZow7InKLgwFe8a9ck3dqp/nEoG/4HlAuM+jV9K2 9Z0Dwlmt19Y5nfWdFE12GZx86VcvzY/SNZCucooA6jcSCy1yvzSfJ/6hXLxf2MDrokhrjmVpWON k3Bu1ocI= X-Gm-Gg: ASbGnctQZ31879F1bUco9c76JpWqobg5qBv10tuvrVbN+SRPpkHE200sp0QuY1i/rNJ EL/I+aveqG8gSLUtJkaQCX0rgB3FZd38FcMT9Ote9MUZAwMEiItmvw/pyiIyR0AIO7RKJmNZ6xl 440cUXXbrj6Yi8YmgUITpVkKazw2JjdG95+jFbDybRfQEZuw1zGJg0AjbXU1CxG3570l+25u9MV uoy3HM+XJWqET7l2FwnCpK9JM5CPwGgP/n8+zTrIMYpIVhlI8tVMWULlK/9vJNkEl/luxiUkdW2 ZlVg/MDvu8Iy5P+GiMZmRhnWwLzez//IZCo9zL3Inl2gJ7dJQSCyNR7B4jWRupUXi5KIDHflEmG YE2ThvaQgEAWL+2iTPGbbB4z7oL+Kd7fkBVcs8Ui9LQ/dpb5muDlzO41nSFM= X-Google-Smtp-Source: AGHT+IGpivhomdLRnRbZkBuxyTLM18vQS9bG2aal1wICvshAUbnZYtRjsE3Vs8mGcUEtsrYUMt6OFg== X-Received: by 2002:a05:6870:bac9:b0:2c1:650b:fc86 with SMTP id 586e51a60fabf-2f796a56ea8mr1618317fac.1.1751639348765; Fri, 04 Jul 2025 07:29:08 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v4 108/108] tests/tcg/aarch64: Add sme2-matmul test case Date: Fri, 4 Jul 2025 08:21:11 -0600 Message-ID: <20250704142112.1018902-109-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250704142112.1018902-1-richard.henderson@linaro.org> References: <20250704142112.1018902-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:4860:4864:20::30; envelope-from=richard.henderson@linaro.org; helo=mail-oa1-x30.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: 1751640067443116600 Content-Type: text/plain; charset="utf-8" Extract from https://learn.arm.com/learning-paths/cross-platform/multiplying-matrices-= with-sme2/ Merge into two files and drop the EL3 setup code for FVP. Signed-off-by: Richard Henderson --- tests/tcg/aarch64/sme2-matmul-0.c | 236 ++++++++++++++++++++++ tests/tcg/aarch64/Makefile.target | 11 +- tests/tcg/aarch64/sme2-matmul-1.S | 321 ++++++++++++++++++++++++++++++ 3 files changed, 567 insertions(+), 1 deletion(-) create mode 100644 tests/tcg/aarch64/sme2-matmul-0.c create mode 100644 tests/tcg/aarch64/sme2-matmul-1.S diff --git a/tests/tcg/aarch64/sme2-matmul-0.c b/tests/tcg/aarch64/sme2-mat= mul-0.c new file mode 100644 index 0000000000..35737c5694 --- /dev/null +++ b/tests/tcg/aarch64/sme2-matmul-0.c @@ -0,0 +1,236 @@ +/* + * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its affiliate= s + * SPDX-License-Identifier: BSD-3-Clause-Clear + * + * Copied from + * https://learn.arm.com/learning-paths/cross-platform/multiplying-matrice= s-with-sme2/ + * + * and modified for testing with qemu-aarch64. + */ + +#include +#include +#include +#include +#include +#include + +#define DEBUG 0 + +/* + * Vanilla matrix multiplication using the by-the-book definition. + */ + +void preprocess_l(uint64_t nbr, uint64_t nbc, uint64_t SVL, + const float *restrict a, float *restrict a_mod) +{ + // For all tiles of SVL x SVL data + for (uint64_t By =3D 0; By < nbr; By +=3D SVL) { + for (uint64_t Bx =3D 0; Bx < nbc; Bx +=3D SVL) { + // For this tile + const uint64_t dest =3D By * nbc + Bx * SVL; + for (uint64_t j =3D 0; j < SVL; j++) { + for (uint64_t i =3D 0; i < SVL && (Bx + i) < nbc; i++) { + if (By + j < nbr) { + a_mod[dest + i * SVL + j] =3D a[(By + j) * nbc + B= x + i]; + } else { + // These elements are outside of matrix a, so zero= them. + a_mod[dest + i * SVL + j] =3D 0.0; + } + } + } + } + } +} + +void matmul(uint64_t M, uint64_t K, uint64_t N, + const float *restrict matLeft, const float *restrict matRight, + float *restrict matResult) +{ + for (uint64_t m =3D 0; m < M; m++) { + for (uint64_t n =3D 0; n < N; n++) { + float acc =3D 0.0; + + for (uint64_t k =3D 0; k < K; k++) { + acc +=3D matLeft[m * K + k] * matRight[k * N + n]; + } + + matResult[m * N + n] =3D acc; + } + } +} + +/* + * SME2 Matrix multiplication handwritten in assembly code. This is split = in 2 + * functions that have to be invoked one after the other, with a top level + * binding. + */ + +/* Matrix preprocessing, in assembly. */ +void preprocess_l_asm(uint64_t M, uint64_t K, const float *restrict a, + float *restrict a_mod); + +/* Matrix multiplication (with the *transposed* RHS), in assembly. */ +void matmul_asm_impl(uint64_t M, uint64_t K, uint64_t N, + const float *restrict matLeft_mod, + const float *restrict matRight, float *restrict matRe= sult); + +/* The top level matrix multiplication. */ +void matmul_asm(uint64_t M, uint64_t K, uint64_t N, + const float *restrict matLeft, const float *restrict matRi= ght, + float *restrict matLeft_mod, float *restrict matResult) +{ + __asm volatile("" : : : + "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", + "v8", "v9", "v10", "v11", "v12", "v13", "v14", "v15", + "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", + "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31"); + + preprocess_l_asm(M, K, matLeft, matLeft_mod); + matmul_asm_impl(M, K, N, matLeft_mod, matRight, matResult); + + __asm volatile("" : : : + "v0", "v1", "v2", "v3", "v4", "v5", "v6", "v7", + "v8", "v9", "v10", "v11", "v12", "v13", "v14", "v15", + "v16", "v17", "v18", "v19", "v20", "v21", "v22", "v23", + "v24", "v25", "v26", "v27", "v28", "v29", "v30", "v31"); +} + + +// Initialize an array of float. +enum InitKind { RANDOM_INIT, LINEAR_INIT, DEAD_INIT }; +void initialize_matrix(float *mat, size_t num_elements, enum InitKind kind) +{ + for (size_t i =3D 0; i < num_elements; i++) + switch (kind) { + case RANDOM_INIT: + mat[i] =3D (((float)(rand() % 10000) / 100.0f) - 30.0); + break; + case LINEAR_INIT: + mat[i] =3D i+1; + break; + case DEAD_INIT: + mat[i] =3D nan(""); + break; + } +} + +/* Pretty print a matrix. */ +void print_matrix(size_t nbr, size_t nbc, const float *mat, const char *na= me) +{ + printf("%s(%lu,%lu) =3D [", name, nbr, nbc); + for (size_t y =3D 0; y < nbr; y++) { + printf("\n "); + for (size_t x =3D 0; x < nbc; x++) + printf("%9.2f, ", mat[y * nbc + x]); + } + printf("\n];\n"); +} + +/* Compare 2 matrices for equality. */ +unsigned compare_matrices(size_t nbr, size_t nbc, const float *reference, + const float *result, const char *str) +{ + unsigned error =3D 0; + + for (size_t y =3D 0; y < nbr; y++) { + for (size_t x =3D 0; x < nbc; x++) { + if (fabsf(reference[y * nbc + x] - result[y * nbc + x]) > + fabsf(0.0002f * reference[y * nbc + x])) { + error =3D 1; + if (DEBUG) { + printf("%lu (%lu,%lu): %f <> %f\n", y * nbc + x, x, y, + reference[y * nbc + x], result[y * nbc + x]); + } + } + } + } + if (DEBUG) { + if (error) { + print_matrix(nbr, nbc, reference, "reference"); + print_matrix(nbr, nbc, result, "result"); + } + printf("%s: %s !\n", str, error ? "FAILED" : "PASS"); + } + + return error; +} + +uint64_t ool_svcntsw(void); + +/* + * Assumptions: + * nbr in matLeft (M): any + * nbc in matLeft, nbr in matRight (K): any K > 2 + * nbc in matRight (N): any + */ + +int main(int argc, char **argv) +{ + /* Size parameters */ + uint64_t M, N, K; + if (argc >=3D 4) { + M =3D strtoul(argv[1], NULL, 0); + K =3D strtoul(argv[2], NULL, 0); + N =3D strtoul(argv[3], NULL, 0); + } else { + /* Default: 125x35x70 */ + M =3D 125; + K =3D 35; + N =3D 70; + } + + if (DEBUG) { + printf("\nSME2 Matrix Multiply fp32 *asm* example " + "with args %lu %lu %lu\n", M, K, N); + } + + const uint64_t SVL =3D ool_svcntsw(); + + /* Calculate M of transformed matLeft. */ + const uint64_t M_mod =3D SVL * (M / SVL + (M % SVL !=3D 0 ? 1 : 0)); + + float *matRight =3D (float *)malloc(K * N * sizeof(float)); + + float *matLeft =3D (float *)malloc(M * K * sizeof(float)); + float *matLeft_mod =3D (float *)malloc(M_mod * K * sizeof(float)); + float *matLeft_mod_ref =3D (float *)malloc(M_mod * K * sizeof(float)); + + float *matResult =3D (float *)malloc(M * N * sizeof(float)); + float *matResult_ref =3D (float *)malloc(M * N * sizeof(float)); + + // initialize_matrix(matLeft, M * K, RANDOM_INIT); + // initialize_matrix(matRight, K * N, RANDOM_INIT); + initialize_matrix(matLeft, M * K, LINEAR_INIT); + initialize_matrix(matRight, K * N, LINEAR_INIT); + initialize_matrix(matLeft_mod, M_mod * K, DEAD_INIT); + initialize_matrix(matResult, M * N, DEAD_INIT); + + if (DEBUG) { + print_matrix(M, K, matLeft, "matLeft"); + print_matrix(K, N, matRight, "matRight"); + } + + matmul_asm(M, K, N, matLeft, matRight, matLeft_mod, matResult); + + /* Compute the reference values with the vanilla implementations. */ + matmul(M, K, N, matLeft, matRight, matResult_ref); + preprocess_l(M, K, SVL, matLeft, matLeft_mod_ref); + + unsigned error =3D compare_matrices(K, M_mod, matLeft_mod_ref, matLeft= _mod, + "Matrix preprocessing"); + if (!error) + error =3D compare_matrices(M, N, matResult_ref, matResult, + "Matrix multiplication"); + + free(matRight); + + free(matLeft); + free(matLeft_mod); + free(matLeft_mod_ref); + + free(matResult); + free(matResult_ref); + + return error ? EXIT_FAILURE : EXIT_SUCCESS; +} diff --git a/tests/tcg/aarch64/Makefile.target b/tests/tcg/aarch64/Makefile= .target index 16ddcf4f88..641c00cf02 100644 --- a/tests/tcg/aarch64/Makefile.target +++ b/tests/tcg/aarch64/Makefile.target @@ -28,7 +28,8 @@ config-cc.mak: Makefile $(call cc-option,-march=3Darmv8.5-a, CROSS_CC_HAS_ARMV8_= 5); \ $(call cc-option,-mbranch-protection=3Dstandard, CROSS_CC_HAS_ARMV8_= BTI); \ $(call cc-option,-march=3Darmv8.5-a+memtag, CROSS_CC_HAS_ARMV8_= MTE); \ - $(call cc-option,-Wa$(COMMA)-march=3Darmv9-a+sme $$fnia, CROSS_AS_HAS= _ARMV9_SME)) 3> config-cc.mak + $(call cc-option,-Wa$(COMMA)-march=3Darmv9-a+sme $$fnia, CROSS_AS_HAS= _ARMV9_SME); \ + $(call cc-option,-Wa$(COMMA)-march=3Darmv9-a+sme2 $$fnia, CROSS_AS_HA= S_ARMV9_SME2)) 3> config-cc.mak -include config-cc.mak =20 ifneq ($(CROSS_CC_HAS_ARMV8_2),) @@ -75,6 +76,14 @@ AARCH64_TESTS +=3D $(SME_TESTS) $(SME_TESTS): CFLAGS +=3D $(CROSS_AS_HAS_ARMV9_SME) endif =20 +# SME2 Tests +ifneq ($(CROSS_AS_HAS_ARMV9_SME2),) +sme2-matmul: CFLAGS +=3D $(CROSS_AS_HAS_ARMV9_SME2) +sme2-matmul: sme2-matmul-0.c sme2-matmul-1.S + $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $^ -o $@ $(LDFLAGS) +AARCH64_TESTS +=3D sme2-matmul +endif + # System Registers Tests AARCH64_TESTS +=3D sysregs =20 diff --git a/tests/tcg/aarch64/sme2-matmul-1.S b/tests/tcg/aarch64/sme2-mat= mul-1.S new file mode 100644 index 0000000000..5562e24c62 --- /dev/null +++ b/tests/tcg/aarch64/sme2-matmul-1.S @@ -0,0 +1,321 @@ +/* + * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its affiliate= s + * SPDX-License-Identifier: BSD-3-Clause-Clear + * + * Copied from + * https://learn.arm.com/learning-paths/cross-platform/multiplying-matrice= s-with-sme2/ + * + * and modified for testing with qemu-aarch64. + */ + + .text + .cfi_sections .debug_frame // put stack frame info into .debug_frame = instead of .eh_frame + + .global ool_svcntsw + .type ool_svcntsw, "function" + .cfi_startproc +ool_svcntsw: + rdsvl x0, #1 + lsr x0, x0, #1 + ret + .cfi_endproc + .size ool_svcntsw, .-ool_svcntsw + + .global preprocess_l_asm + .type preprocess_l_asm, "function" + .cfi_startproc + +preprocess_l_asm: + // preprocess_l_asm(uint64_t nbr, uint64_t nbc, const float * restrict= a, float * a_mod); + // x0 : nbr + // x1 : nbc + // x2 : &a + // x3 : &a_mod + // x4 : SVLs (=3Dcntw) + // x5 : Exit condition for inner loop + // x6 : a_ptr + // x7 : Outer loop counter + // x8 : a_base + // x9 : a_mod store base address + // x10: 32b Tile0 store end pointer + // x11: SVLs*nbc + // x12: Load/Store loop counter + // x13: 32b Tile1 store end pointer + // x14: 2*nbc + // x15: 3*nbc + // x16: 32b tile size + +// Assumptions: +// nbr in matLeft (M): any +// nbc in matLeft, nbr in matRight (K): any K > 2 +// nbc in matRight (N): any +// +// Left matrix re-arrangement: +// Block of SVLs rows is transposed and contiguously stored. +// Then the same transformation is applied to remaining blocks of SVLs row= s. +// The last block of rows is zero-padded to SVLs rows, if applicable. + + smstart + +// constants + cntw x4 // SVLs + mul x11, x4, x1 // SVLs*nbc + lsl x14, x1, #1 // 2*nbc + add x15, x14, x1 // 3*nbc + + mul x16, x4, x4 // SVLs*SVLs + + mov x7, #0 + whilelt p0.s, x7, x0 // Tile predicate (M dimension) + +.Loop_outer: + mov x8, x2 // a load base address + mov x9, x3 // a_mod store base address + add x5, x2, x1, lsl #2 // Exit condition for inner loop + + add x10, x9 , x11, lsl #2 // 32b Tile0 store predicate condition + sub x13, x10, x16, lsl #2 // 32b Tile1 store predicate condition + whilelt pn8.b, x8, x5, vlx2 // Tile predicate-as-counter (K dimens= ion) + +.Loop_inner: + mov x6, x8 // a_ptr + + mov w12, #0 // Load_loop counter + +.Load_loop: + psel pn10, pn8, p0.s[w12, 0] + psel pn11, pn8, p0.s[w12, 1] + psel pn12, pn8, p0.s[w12, 2] + psel pn13, pn8, p0.s[w12, 3] + ld1w {z20.s, z28.s}, pn10/z, [x6] // Load 2 row vect= ors from a_ptr + ld1w {z21.s, z29.s}, pn11/z, [x6, x1, lsl #2] // Load " " " = from a_ptr + nbc + ld1w {z22.s, z30.s}, pn12/z, [x6, x14, lsl #2] // Load " " " = from a_ptr + nbc*2 + ld1w {z23.s, z31.s}, pn13/z, [x6, x15, lsl #2] // Load " " " = from a_ptr + nbc*3 + mova za0h.s[w12, 0:3], {z20.s-z23.s} + mova za1h.s[w12, 0:3], {z28.s-z31.s} + + add x6, x6, x1, lsl #4 // a_ptr+=3D4*nbc FP32 elms [Bytes] + add w12, w12, #4 // increment counter + cmp w12, w4 + b.mi .Load_loop + + mov w12, #0 // Store_loop counter + +.Store_loop: + whilelt pn10.b, x9, x10, vlx4 + whilelt pn11.b, x9, x13, vlx4 + mova {z0.s-z3.s}, za0v.s[w12, 0:3] + mova {z4.s-z7.s}, za1v.s[w12, 0:3] + st1w {z0.s-z3.s}, pn10, [x9] // Store 4 col vectors t= o a_mod + st1w {z4.s-z7.s}, pn11, [x9, x16, lsl #2] // Store 4 col vectors t= o a_mod + SVLs*SVLs + addvl x9, x9, #4 // a_mod +=3D 4*SVLb [Bytes] + add w12, w12, #4 // increment counter + cmp w12, w4 + b.mi .Store_loop + + add x9, x9, x16, lsl #2 + addvl x8, x8, #2 // a_base +=3D 2*SVLb [Bytes] + whilelt pn8.b, x8, x5, vlx2 + b.first .Loop_inner + + add x3, x3, x11, lsl #2 // &a_mod +=3D SVLs*nbc FP32 elms [Byt= es] + add x2, x2, x11, lsl #2 // &a +=3D SVLs*nbc FP32 elms [Bytes] + incw x7 + + whilelt p0.s, x7, x0 + b.first .Loop_outer + + smstop + + ret + .cfi_endproc + .size preprocess_l_asm, .-preprocess_l_asm + + .global matmul_asm_impl + .type matmul_asm_impl, "function" + .cfi_startproc + +matmul_asm_impl: + // matmul_asm_impl(M, K, N, matLeft, matRight, matResult_opt); + // x0 : M + // x1 : K, lda + // x2 : N, ldc, ldb + // x3 : &matLeft + // x4 : &matRight + // x5 : &matResult_opt + // x6 : SVLs-2 + // x7 : a_ptr pointer + // x8 : a_ptr end address + // x9 : c_base pointer + // x10: c_ptr0 pointer + // x11: Exit condition for N loop + // x12: M loop counter + // x13: Store loop counter + // x14: Predicate select index + // x15: Exit condition for K loop + // x16: b_base pointer + // x17: b_ptr pointer + // x18: (SVLs+1)*ldc + // x19: ldb + SVLs + // x20: SVLs*lda + SVLs + // x21: c_ptr1 pointer + // x22: SVLs*lda + // x23: SVLs*ldc + +// Assumptions: +// nbr in matLeft (M): any +// nbc in matLeft, nbr in matRight (K): any K > 2 +// nbc in matRight (N): any +// +// Left matrix is pre-arranged. +// +// 32-bit accumulator mapping with 2x2 tiles processing + + stp x19, x20, [sp, #-48]! + stp x21, x22, [sp, #16] + stp x23, x24, [sp, #32] + + smstart + +// constants + cntw x6 // SVLs + mul x22, x6, x1 // SVLs*lda + mul x23, x6, x2 // SVLs*ldc + add x18, x23, x2 // SVLs*ldc + ldc + add x11, x4, x2, lsl #2 // Exit condition for N loop + mov x12, #0 + cntb x6 // SVLb + mov x14, #0 + ptrue pn10.b // Predicate as counter for SME2 VLx2 = (a_ptr loads) + whilelt pn8.s, x12, x0, vlx2 // tiles predicate (M dimension) + sub w6, w6, #8 // SVLb-8 + +.Loop_M: + // Extracting tile 0/1 and tile 2/3 predicates (M dimension) from vlx2= predicate. + pext { p2.s, p3.s }, pn8[0] + mov x16, x4 // b_base + mov x9, x5 // c_base + + whilelt pn9.b, x16, x11, vlx2 // tiles predicate (N dimension) + +.Loop_N: + mov x7, x3 // a_ptr =3D a_base + mov x17, x16 // b_ptr =3D b_base + mov x10, x9 // c_ptr0 =3D c_base + + // Extracting tile 0/2 and tile 1/3 predicates (N dimension) from vlx2= predicate. + pext { p0.b, p1.b }, pn9[0] + + add x8, x3, x22, lsl #2 // a_base + SVLs*lda FP32 elms [Bytes] + addvl x15, x8, #-1 // Exit condition for K loop + ld1w {z1.s}, p2/z, [x7] // Load 1st vector from a_ptr + + zero {za} + ld1w {z2.s-z3.s}, pn9/z, [x17] // Load 2 vectors from b_ptr + + fmopa za0.s, p2/m, p0/m, z1.s, z2.s // ZA0 +=3D 1st a_ptr ve= ctor OP 1st b_ptr vector + ld1w {z5.s}, p3/z, [x7, x22, lsl #2] // Load 2nd vector from = a_ptr + addvl x7, x7, #1 // a_ptr +=3D SVLb [Byte= s] + +.Loop_K: + fmopa za2.s, p3/m, p0/m, z5.s, z2.s // ZA2 +=3D 2nd a_p= tr vector OP 1st b_ptr vector + + fmopa za1.s, p2/m, p1/m, z1.s, z3.s // ZA1 +=3D 1st a_p= tr vector OP 2nd b_ptr vector + ld1w {z0.s-z1.s}, pn10/z, [x7] // Load next 2 vect= ors from a_ptr + + fmopa za3.s, p3/m, p1/m, z5.s, z3.s // ZA3 +=3D 2nd a_p= tr vector OP 2nd b_ptr vector + ld1w {z6.s-z7.s}, pn9/z, [x17, x2, lsl #2] // Load next 2 vect= ors from b_ptr + + fmopa za0.s, p2/m, p0/m, z0.s, z6.s // ZA0 +=3D 1st a_p= tr vector OP 1st b_ptr vector + psel pn11, pn10, p3.s[w14, 0] // Select predicate= -as-counter + ld1w {z4.s-z5.s}, pn11/z, [x7, x22, lsl #2] // Load next 2 vect= ors from a_ptr + + fmopa za2.s, p3/m, p0/m, z4.s, z6.s // ZA2 +=3D 2nd a_p= tr vector OP 1st b_ptr vector + add x17, x17, x2, lsl #3 // b_ptr +=3D 2*ldb= FP32 elms [Bytes] + + fmopa za1.s, p2/m, p1/m, z0.s, z7.s // ZA1 +=3D 1st a_p= tr vector OP 2nd b_ptr vector + + fmopa za3.s, p3/m, p1/m, z4.s, z7.s // ZA3 +=3D 2nd a_p= tr vector OP 2nd b_ptr vector + ld1w {z2.s-z3.s}, pn9/z, [x17] // Load next 2 vect= ors from b_ptr + + fmopa za0.s, p2/m, p0/m, z1.s, z2.s // ZA0 +=3D 1st a_p= tr vector OP 1st b_ptr vector + addvl x7, x7, #2 // a_ptr +=3D 2*SVL= b [Bytes] + + cmp x7, x15 + b.mi .Loop_K + + fmopa za2.s, p3/m, p0/m, z5.s, z2.s // ZA2 +=3D 2nd a_p= tr vector OP 1st b_ptr vector + + fmopa za1.s, p2/m, p1/m, z1.s, z3.s // ZA1 +=3D 1st a_p= tr vector OP 2nd b_ptr vector + + fmopa za3.s, p3/m, p1/m, z5.s, z3.s // ZA3 +=3D 2nd a_p= tr vector OP 2nd b_ptr vector + add x17, x17, x2, lsl #2 // b_ptr +=3D 2*ldb= FP32 elms [Bytes] + + cmp x7, x8 + b.pl .Ktail_end + +.Ktail_start: + ld1w {z1.s}, p2/z, [x7] + ld1w {z2.s-z3.s}, pn9/z, [x17] + + fmopa za0.s, p2/m, p0/m, z1.s, z2.s + ld1w {z5.s}, p3/z, [x7, x22, lsl #2] + + fmopa za2.s, p3/m, p0/m, z5.s, z2.s + + fmopa za1.s, p2/m, p1/m, z1.s, z3.s + + fmopa za3.s, p3/m, p1/m, z5.s, z3.s + +.Ktail_end: + mov w13, #0 + psel pn11, pn9, p2.b[w13, 0] + psel pn12, pn9, p3.b[w13, 0] + // Move from ZA tiles to vectors: z0 =3D za0h[1], z1 =3D za1h[1], z2 = =3D za2h[1], z3 =3D za3h[1] + mova { z0.b-z3.b }, za0h.b[w13, 0:3] + st1w { z0.s-z1.s }, pn11, [x10] // Store to c_ptr0 + st1w { z2.s-z3.s }, pn12, [x10, x23, lsl #2] // Store to c_ptr0= + SVLs*ldc +.Loop_store_ZA: + psel pn11, pn9, p2.b[w13, 4] + psel pn12, pn9, p3.b[w13, 4] + mova { z0.b-z3.b }, za0h.b[w13, 4:7] + st1w { z0.s-z1.s }, pn11, [x10, x2, lsl #2] // Store to c_ptr= 0 + ldc + st1w { z2.s-z3.s }, pn12, [x10, x18, lsl #2] // Store to c_ptr= 0 + (SVLs+1)*ldc + + add x10, x10, x2, lsl #3 // c_ptr0 +=3D 2*ldc FP32 elms [Bytes] + add w13, w13, #8 + + psel pn11, pn9, p2.b[w13, 0] + psel pn12, pn9, p3.b[w13, 0] + mova { z0.b-z3.b }, za0h.b[w13, 0:3] + st1w { z0.s-z1.s }, pn11, [x10] // Store to c_ptr0 + st1w { z2.s-z3.s }, pn12, [x10, x23, lsl #2] // Store to c_ptr0= + SVLs*ldc + cmp w13, w6 + b.mi .Loop_store_ZA + + psel pn11, pn9, p2.b[w13, 4] + psel pn12, pn9, p3.b[w13, 4] + mova { z0.b-z3.b }, za0h.b[w13, 4:7] + st1w { z0.s-z1.s }, pn11, [x10, x2, lsl #2] // Store to c_ptr= 0 + ldc + st1w { z2.s-z3.s }, pn12, [x10, x18, lsl #2] // Store to c_ptr= 0 + (SVLs+1)*ldc + + addvl x9, x9, #2 + addvl x16, x16, #2 // b_base +=3D 2*SVLb [Bytes] + whilelt pn9.b, x16, x11, vlx2 // tile predicate (N dimension) + b.first .Loop_N + + add x3, x3, x22, lsl #3 // a_base +=3D 2*SVLs*lda FP32 elms [B= ytes] + add x5, x5, x23, lsl #3 // c_base +=3D 2*SVLs*ldc FP32 elms [B= ytes] + incw x12, all, mul #2 // M loop counter +=3D 2* SVLs + whilelt pn8.s, x12, x0, vlx2 // tiles predicate (M dimension) + b.first .Loop_M + + smstop + + ldp x23, x24, [sp, #32] + ldp x21, x22, [sp, #16] + ldp x19, x20, [sp], #48 + + ret + .cfi_endproc + .size matmul_asm_impl, .-matmul_asm_impl --=20 2.43.0