From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by sourceware.org (Postfix) with ESMTP id 696963858C42; Mon, 11 Dec 2023 11:02:09 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 696963858C42 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=arm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 696963858C42 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=217.140.110.172 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1702292539; cv=none; b=C+nn/B6jtyBOdTk2aZM8qbkN+klpXCnKh+RPAIGHc4FnEkrxaxH/CyU8Br/iE6mykD+FlypoiWMbg49bbmeqqp3Duo+gpwZEjJxuUHs2EyKajMJdYsuX0mBoDoAGZg3SBICpuuq2+cprJrCOE7DhmIPKOO9BBFqYbJ3NHB/jYAY= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1702292539; c=relaxed/simple; bh=T48rj6rIfJyvmLvpCGm+7lZuRJI3TKezsG/U0TyY0Vc=; h=From:To:Subject:Date:Message-ID:MIME-Version; b=Q0zl9zBxfX0OXXww4w2Nja58OQOPkWpa7LKCr/3TAT2uT9kQ1iGeS620rYKSJpu3U3Ttgr9VOLxnmzSJO1ScfY5UOEjbolS79unSbzk7WFY2b+yAQUlyMY7KfXBgTQZLL4n2zTPetrJFHqcb7KRwTIQEDctmem80Zt2gkfq2O8Q= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 7BBACFEC; Mon, 11 Dec 2023 03:02:55 -0800 (PST) Received: from localhost (e121540-lin.manchester.arm.com [10.32.110.72]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 71C6D3F762; Mon, 11 Dec 2023 03:02:08 -0800 (PST) From: Richard Sandiford To: Srinivas Yadav Mail-Followup-To: Srinivas Yadav ,libstdc++@gcc.gnu.org, gcc-patches@gcc.gnu.org, richard.sandiford@arm.com Cc: libstdc++@gcc.gnu.org, gcc-patches@gcc.gnu.org Subject: Re: [PATCH] libstdc++: add ARM SVE support to std::experimental::simd References: Date: Mon, 11 Dec 2023 11:02:07 +0000 In-Reply-To: (Richard Sandiford's message of "Sun, 10 Dec 2023 13:29:45 +0000") Message-ID: User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-Spam-Status: No, score=-15.9 required=5.0 tests=BAYES_00,KAM_DMARC_NONE,KAM_DMARC_STATUS,KAM_LAZY_DOMAIN_SECURITY,SPF_HELO_NONE,SPF_NONE,TXREP,T_SCC_BODY_TEXT_LINE autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: Richard Sandiford writes: > template > struct _SveMaskWrapper > { > ... > > _GLIBCXX_SIMD_INTRINSIC constexpr value_type > operator[](size_t __i) const > { > return _BuiltinSveMaskType::__sve_mask_active_count( > _BuiltinSveVectorType::__sve_active_mask(), > svand_z(_BuiltinSveVectorType::__sve_active_mask(), > svcmpeq(_BuiltinSveVectorType::__sve_active_mask(), > _BuiltinSveMaskType::__index0123, > typename _BuiltinSveMaskType::__sve_mask_uint_type(__i)), > _M_data)); > } > > A simpler way to do this might be to use svdup_u_z (_M_data, 1, 0) > and then svorrv on the result. Sorry for the nonsense comment. I was thinking of a different operation. But GCC knows how to index a fixed-length data vector, so it might be worth using: svdup_u_z (_M_data, 1)[__i] Thanks, Richard