From nobody Fri Sep 12 22:57:11 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=1751464949; cv=none; d=zohomail.com; s=zohoarc; b=ZTVq2ZDNg/bOEFXPutJiIuv9R7M0U/Tq9ptwJfSYjQ3LW1nokW3RpVNulWygIcrWGjX7FgV74jazA4lQEqcUeEsuP08xA5rJqAlc6ygPDd9cq5C+ZsXOaNZcu/kdKXp7277mNikdKbqWfz8p0qRNSKDWNpzO+ky0b6FHT0s4CmQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1751464949; 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=xbpKY4w+Y2nS3xulbi2ps1vjI+IV1lSD7HJlNH9G7dI=; b=VX7LKXY8DHxZI5tAPs18eo/XDnv1F07KTf5U8Szq1e2IndmD8iF7dqN4ApYBu1UcqjFrcQBsu8xhAAugI9ybPZ9suUs+98LHl6wnvaWVi8RXghy4e0P5JqN7kRAkN+H4+cfzbAVUw2wqYtzAZ26X9Ed+bE9nFaYxgtl0GOa1r+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 1751464949022672.1024700942125; Wed, 2 Jul 2025 07:02:29 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uWwps-0005ld-4Y; Wed, 02 Jul 2025 08:45: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 1uWwjb-0004QP-CL for qemu-devel@nongnu.org; Wed, 02 Jul 2025 08:38:45 -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 1uWwjR-00029L-C2 for qemu-devel@nongnu.org; Wed, 02 Jul 2025 08:38:42 -0400 Received: by mail-oo1-xc30.google.com with SMTP id 006d021491bc7-60402c94319so3919077eaf.1 for ; Wed, 02 Jul 2025 05:38:31 -0700 (PDT) Received: from stoup.. ([187.210.107.185]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-2efd4ea5d9fsm3843451fac.10.2025.07.02.05.38.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Jul 2025 05:38:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1751459910; x=1752064710; 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=xbpKY4w+Y2nS3xulbi2ps1vjI+IV1lSD7HJlNH9G7dI=; b=KG7WPiBYJRrZ1k+WCIt5ENQi4QolrULPyX0AyT39fAA1x5VpJveHauxUfw+ESFP/Fe qnGwbd3CYtx9cUefy0DOU+hNogm224VQ3qwKwenYPCbqFpo7DSrXZ/Tr66VCJVK/iFOT Hwi92PSLpUelpVGHA0AgY4GoN4NJz5k2GTCPECZY8NVvakK0UwfOr0btx2zbi0RESY9n 53qCV79lb55hVblf8p/lrcmeMgSfh8ET6ytKTZMm49JrpRgepCu8mYW/mBEpq8GRmdzw 9uoRSCu5ReP2/v2JWY+BmU+irZSfTk2X6Ra7dS5bYBWcXuXH9ldY6xNvVX9yBKoO56bX u8Ow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1751459910; x=1752064710; 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=xbpKY4w+Y2nS3xulbi2ps1vjI+IV1lSD7HJlNH9G7dI=; b=LNCIx1PdAg6bl1UOfPJd3twV4LtWwAqf+2nzSKJnpjHzVhAf+n7KFwDwfV6oOjqTDb xdwMQ9uRRqz99VziflFH22O6yJYo31qEm4yBVIAFdDStmsjiC9bHQ8Oe/dHSSAMPCS7r T+3FB947y1zOnKGolxoUyK+xYmErfWphv2Bw+FlU7OrjMk9/tRVKxuqVWikYELziSLsY IfaBprUHlUVKMJjAuhGBvJW+t74yfbXI7h8PUJqTrwA+3/guFGyPwMHZ1gm1CCAu+K8I RlTz8jXp1iPmWad+4I0Z0th/zrkj7ZVovcM8hw7lJLinwtDPMXRXwk8BqfWXSwek83lF sexw== X-Gm-Message-State: AOJu0YwHfmo4tA98uNwYt4MbOy6lcY/WqYMalsZbEYEsdlgodZ7ynnIy y/p1kk/TQYZ57grYg/s2qf8OC6ljVigOwmMiOPqxWpOVKIGzYnCRb39tPdSgC8RpsbSALpNuqBb +ANpuFSM= X-Gm-Gg: ASbGncuWoA9WQaWE9b84tM1kILFkrsFKEvJxzuC5HvUxkIo7ikRNksB9AoO/FFyuEty oN9E41y3IebZXpxOAr9/fqPUyWOmCcJil4RzwhCWaN/+WN9PCKiGYbcDgS+623x4jgAgM7PT0VQ MzfXE7XMVBNiYjmPQRndmOwBoa9aRxniTqbG/crjj4krD+i77WInB616uSx3KPtlWJrPvlokwWi CC4UAXrIh8ePlXCXMAkozkCDVRk+TMSKdHV/cxwWmY0KIbbcViPap6vsDDKmZ9ZYdKrgVMx+9hM 9+e0i+YyeGBRsiWjlcf2uV5nZolku2sSvQBfn51sPmsrAp0ahiqvKlcpJXOj/A5UI7iliA== X-Google-Smtp-Source: AGHT+IGncyXOGMnbjF/fFvgvSY8h3/cUzGnAbJrTkjFrdOoF+oZkNB3RA+xmFukRx81cPR7d0CoaYQ== X-Received: by 2002:a05:6870:d0ce:b0:2ea:1e55:a596 with SMTP id 586e51a60fabf-2f5c7b59d7fmr2207278fac.30.1751459909780; Wed, 02 Jul 2025 05:38:29 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Cc: qemu-arm@nongnu.org, peter.maydell@linaro.org Subject: [PATCH v3 60/97] target/arm: Introduce pred_count_test Date: Wed, 2 Jul 2025 06:33:33 -0600 Message-ID: <20250702123410.761208-61-richard.henderson@linaro.org> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250702123410.761208-1-richard.henderson@linaro.org> References: <20250702123410.761208-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: -16 X-Spam_score: -1.7 X-Spam_bar: - X-Spam_report: (-1.7 / 5.0 requ) BAYES_00=-1.9, DKIM_INVALID=0.1, DKIM_SIGNED=0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no 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: 1751464951912116600 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 | 47 ++++++++++++++++++++++--------------- 1 file changed, 28 insertions(+), 19 deletions(-) diff --git a/target/arm/tcg/sve_helper.c b/target/arm/tcg/sve_helper.c index 0e59ad2262..8fb9d0241d 100644 --- a/target/arm/tcg/sve_helper.c +++ b/target/arm/tcg/sve_helper.c @@ -4102,20 +4102,35 @@ 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); =20 /* Set all of the requested bits. */ for (i =3D 0; i < count / 64; ++i) { @@ -4125,7 +4140,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 +4149,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 +4168,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