From nobody Sat Nov 15 16:44:10 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=1750550442; cv=none; d=zohomail.com; s=zohoarc; b=ZRb5JmITnoeand+5J89gskpbywsHyVXRat7lmOq/BXYcuLOLyGrHYsXmijm/Ts8kAmbXIbWfzZXzKvYHK23jwjfqFid5q/VSHfVKVtvKe+qMbYyfHSo62/CksOS2wHmQfnZZ3PmBLtsapM0q7cRV3flNUR5ZZg5GUjPeIWWDPWw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1750550442; h=Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To:Cc; bh=PUsGQeaVWdzEfLA4ZPf0L7EaF69nxGnusl9ChC//h68=; b=mrn+FBE7VoPvS3RpHApkjd+SFUG/XQu1DyekA2nVeOr99Gzx4Xcm54o3gDCpcC02w5cWq2cCX1qWtXLNU0NxH+fQgnAa/UZupu85OviUoHqkwgPU3U0eP9Ps6ctFL9tpwPEiguaFjmYY2VyX0udKjoThXbRG061sKolLtJsBfD0= 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 1750550442067968.4911053450504; Sat, 21 Jun 2025 17:00:42 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uT830-0004WM-VZ; Sat, 21 Jun 2025 19:54: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 1uT82U-0002Sq-R0 for qemu-devel@nongnu.org; Sat, 21 Jun 2025 19:54:26 -0400 Received: from mail-pf1-x436.google.com ([2607:f8b0:4864:20::436]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1uT82T-0005C2-0q for qemu-devel@nongnu.org; Sat, 21 Jun 2025 19:54:26 -0400 Received: by mail-pf1-x436.google.com with SMTP id d2e1a72fcca58-7399a2dc13fso3410424b3a.2 for ; Sat, 21 Jun 2025 16:54:24 -0700 (PDT) Received: from stoup.. (174-21-67-243.tukw.qwest.net. [174.21.67.243]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7490a46b590sm4970051b3a.27.2025.06.21.16.54.23 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 21 Jun 2025 16:54:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1750550064; x=1751154864; darn=nongnu.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=PUsGQeaVWdzEfLA4ZPf0L7EaF69nxGnusl9ChC//h68=; b=S9CcQRArHthPSzuw45vKnARCXq1XDF0IWrK20PtT6NCsCPGPo519WW8TJmbO31xfq8 8PW9sfQfsYszn8oOKnabbQObl6rFDNjBfAAsMQChWQUqkwJmvTtZH52UzhQAlAx156kx Z/1jKQpk5aWtnP0dCac/0ERwY6uj/dVG9IiUDuRX+ovl7++dGKihDZrwIn77lPZP0K3v +eobSDcva4/xSFkWLBOoWzS89sza4mQmprCt0PwPXERmlvrngHSHcB8eXBgURvDi56B4 ttXZi6/u96i+r7XA7p4fGFdoUoa4ZOhGV8JzjYAF85SVnS7avNZdmouSZYV6dihstzPB k5zw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750550064; x=1751154864; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=PUsGQeaVWdzEfLA4ZPf0L7EaF69nxGnusl9ChC//h68=; b=pso4nuOTtOGVX7XKgUQ+PfTWut9LyclN5Yz+ruo7L+XioEcdNHNy3fRqXroA/u3rM8 F4q3YLg6iWyEcWjoZ0A0P/qFsG6wXTew++ZwHyJpt0q3VDulPIfoMEJRx2SdbYdV90kv oEAwfCmvBSMGxXqihqaF30v381wy1htEgZTZs0ZaMFI4SpbWwWsFSynJPxQ0kxKYwNFo ErGYrRv9SS5Ntgx4Z4AOkDH1azJ0fR6SYab04TOoc/NAf5K1hFob973ek7FvxmNnMtBB 3j/PWIWLsPwfVWEpPRbhaLPqcmriX8iFN/FE7HQS1PEYvwfzPGy3T8TAAit902fx6xTA H2EQ== X-Gm-Message-State: AOJu0Yz5FhFi5igH0eKRL8AQ4LxuIZXxMQ0kpixVzhI3n8mpqzAh5rGv HukbdyeAq+E6EbQTTVI8WmtNCfFSkjbkD+bJJGqFhRoy+M+uL4emZSLyR/7aQk67y6p/J4TyAVn 6z0hpm+0= X-Gm-Gg: ASbGnctYziK79aRlki9dncZGGTb9S7wv9cKE6oSkBK3xfHTH2nPmVDSKujGjCwEbsvR ujBXEycyMR1ZLvtpisTdH53MKDTyTrsd+wmqDTCfDgEm7vuVGLR9dsWwsUrrBqgT7sXkWBpWi4J UIpHJTeGytabp8H/EWhLRgPVR+pGV3uZOcwV/N1yVPjzjlF38Swm4hQ/O2ZsmZ52maF4pFIjWxg YQa9AQFGg91HgVJsKj32C2JaWfYOh9EYdosveNFu5ZsMNw61o84gqxsdiavKU3vi1NNoYwW5L2I Zhgk8ezEdE2J8aV3R3JT2LuOhJGUDNsrMZsDVn/eWh5tAq2w8GSP/4fTZNZPRcL6RMra+kfwS4i 3I5JGFTWgL8mg4zifgdrj X-Google-Smtp-Source: AGHT+IHLhU+rmoZu2xe6Vc2GxktmzTzA1YPANbQKcbsaiIbH/GHlmlyinqRj3ERrWjU1OuJ2YnYPyg== X-Received: by 2002:a05:6a00:2e95:b0:746:3200:620 with SMTP id d2e1a72fcca58-7490d6a9d84mr10732227b3a.9.1750550063658; Sat, 21 Jun 2025 16:54:23 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 070/101] target/arm: Introduce pred_count_test Date: Sat, 21 Jun 2025 16:50:06 -0700 Message-ID: <20250621235037.74091-71-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250621235037.74091-1-richard.henderson@linaro.org> References: <20250621235037.74091-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::436; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x436.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @linaro.org) X-ZM-MESSAGEID: 1750550444302116600 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 --- target/arm/tcg/sve_helper.c | 62 +++++++++++++++++++++++++------------ 1 file changed, 43 insertions(+), 19 deletions(-) diff --git a/target/arm/tcg/sve_helper.c b/target/arm/tcg/sve_helper.c index e78d807ce1..df2cbf9b6e 100644 --- a/target/arm/tcg/sve_helper.c +++ b/target/arm/tcg/sve_helper.c @@ -4102,20 +4102,50 @@ 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) { + /* + * N =3D 0 !(first active) + * Z =3D 1 (none active) + * C =3D 1 !(not last active) + */ + flags =3D 1; + } else if (!invert) { + /* + * N =3D 1 (first active) + * Z =3D 0 !(none active) + * C =3D ? (not last active) + */ + flags =3D (1u << 31) | 2; /* N, Z */ + flags |=3D count =3D=3D elements; /* C */ + } else { + /* + * N =3D ? (first active) + * Z =3D 0 !(none active) + * C =3D 0 !(not last active) + */ + 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); =20 /* Set all of the requested bits. */ for (i =3D 0; i < count / 64; ++i) { @@ -4125,7 +4155,7 @@ 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 - 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,16 +4164,15 @@ 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 + /* Begin with a zero predicate register. */ + do_zero(d, oprsz); + + /* Set all of the requested bits. */ bits =3D esz_mask; if (oprbits & 63) { bits &=3D MAKE_64BIT_MASK(0, oprbits & 63); @@ -4154,14 +4183,9 @@ uint32_t HELPER(sve_whileg)(void *vd, uint32_t count= , uint32_t pred_desc) d->p[i] =3D bits; bits =3D esz_mask; } - d->p[i] =3D bits & MAKE_64BIT_MASK(invcount & 63, 64); =20 - 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