From 04d3bf745839c919331fec906b2344a97f2ed41d Mon Sep 17 00:00:00 2001 From: Peter Harris Date: Wed, 31 Jul 2024 21:43:28 +0100 Subject: [PATCH 1/2] Use faster NEON any/all --- Source/astcenc_vecmathlib_common_4.h | 20 -------------------- Source/astcenc_vecmathlib_neon_4.h | 16 ++++++++++++++++ Source/astcenc_vecmathlib_none_4.h | 16 ++++++++++++++++ Source/astcenc_vecmathlib_sse_4.h | 16 ++++++++++++++++ 4 files changed, 48 insertions(+), 20 deletions(-) diff --git a/Source/astcenc_vecmathlib_common_4.h b/Source/astcenc_vecmathlib_common_4.h index 5e9b33d3..db4f13a6 100644 --- a/Source/astcenc_vecmathlib_common_4.h +++ b/Source/astcenc_vecmathlib_common_4.h @@ -32,26 +32,6 @@ #include -// ============================================================================ -// vmask4 operators and functions -// ============================================================================ - -/** - * @brief True if any lanes are enabled, false otherwise. - */ -ASTCENC_SIMD_INLINE bool any(vmask4 a) -{ - return mask(a) != 0; -} - -/** - * @brief True if all lanes are enabled, false otherwise. - */ -ASTCENC_SIMD_INLINE bool all(vmask4 a) -{ - return mask(a) == 0xF; -} - // ============================================================================ // vint4 operators and functions // ============================================================================ diff --git a/Source/astcenc_vecmathlib_neon_4.h b/Source/astcenc_vecmathlib_neon_4.h index b0187630..6bc22be4 100644 --- a/Source/astcenc_vecmathlib_neon_4.h +++ b/Source/astcenc_vecmathlib_neon_4.h @@ -411,6 +411,22 @@ ASTCENC_SIMD_INLINE unsigned int mask(vmask4 a) return vaddvq_u32(vshlq_u32(tmp, shift)); } +/** + * @brief True if any lanes are enabled, false otherwise. + */ +ASTCENC_SIMD_INLINE bool any(vmask4 a) +{ + return vmaxvq_u32(a.m) != 0; +} + +/** + * @brief True if all lanes are enabled, false otherwise. + */ +ASTCENC_SIMD_INLINE bool all(vmask4 a) +{ + return vminvq_u32(a.m) != 0; +} + // ============================================================================ // vint4 operators and functions // ============================================================================ diff --git a/Source/astcenc_vecmathlib_none_4.h b/Source/astcenc_vecmathlib_none_4.h index 8e2c57bc..387596d8 100644 --- a/Source/astcenc_vecmathlib_none_4.h +++ b/Source/astcenc_vecmathlib_none_4.h @@ -418,6 +418,22 @@ ASTCENC_SIMD_INLINE unsigned int mask(vmask4 a) ((a.m[3] >> 28) & 0x8); } +/** + * @brief True if any lanes are enabled, false otherwise. + */ +ASTCENC_SIMD_INLINE bool any(vmask4 a) +{ + return mask(a) != 0; +} + +/** + * @brief True if all lanes are enabled, false otherwise. + */ +ASTCENC_SIMD_INLINE bool all(vmask4 a) +{ + return mask(a) == 0xF; +} + // ============================================================================ // vint4 operators and functions // ============================================================================ diff --git a/Source/astcenc_vecmathlib_sse_4.h b/Source/astcenc_vecmathlib_sse_4.h index 163171cf..d457d79c 100644 --- a/Source/astcenc_vecmathlib_sse_4.h +++ b/Source/astcenc_vecmathlib_sse_4.h @@ -428,6 +428,22 @@ ASTCENC_SIMD_INLINE unsigned int mask(vmask4 a) return static_cast(_mm_movemask_ps(a.m)); } +/** + * @brief True if any lanes are enabled, false otherwise. + */ +ASTCENC_SIMD_INLINE bool any(vmask4 a) +{ + return mask(a) != 0; +} + +/** + * @brief True if all lanes are enabled, false otherwise. + */ +ASTCENC_SIMD_INLINE bool all(vmask4 a) +{ + return mask(a) == 0xF; +} + // ============================================================================ // vint4 operators and functions // ============================================================================ From b5a5c228526efbc581c1e919f204f7440270921e Mon Sep 17 00:00:00 2001 From: Peter Harris Date: Thu, 1 Aug 2024 07:53:17 +0100 Subject: [PATCH 2/2] Update copyright --- Source/astcenc_vecmathlib_neon_4.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/astcenc_vecmathlib_neon_4.h b/Source/astcenc_vecmathlib_neon_4.h index 6bc22be4..e6c577aa 100644 --- a/Source/astcenc_vecmathlib_neon_4.h +++ b/Source/astcenc_vecmathlib_neon_4.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: Apache-2.0 // ---------------------------------------------------------------------------- -// Copyright 2019-2023 Arm Limited +// Copyright 2019-2024 Arm Limited // // Licensed under the Apache License, Version 2.0 (the "License"); you may not // use this file except in compliance with the License. You may obtain a copy