This adds support for GENMASK_U128() and some corresponding tests as well. GENMASK_U128() generated 128 bit masks will be required later on the arm64 platform for enabling FEAT_SYSREG128 and FEAT_D128 features. Because GENMAKS_U128() depends on __int128 data type being supported in the compiler, its usage needs to be protected with CONFIG_ARCH_SUPPORTS_INT128. This series is being used for an work in progress on arm64 platform. https://lore.kernel.org/all/20240801054436.612024-1-anshuman.khandual@xxxxxxx/ Cc: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> Cc: Yury Norov <yury.norov@xxxxxxxxx> Cc: Rasmus Villemoes <linux@xxxxxxxxxxxxxxxxxx> Cc: Arnd Bergmann <arnd@xxxxxxxx>> Cc: linux-kernel@xxxxxxxxxxxxxxx Cc: linux-arch@xxxxxxxxxxxxxxx Changes in V4: - Folded in the below patch which guards against assembly code - Fixed __GENMASK_U128() for the corner case (128 bit left shift) - Improved genmask_u128_test() and genmask_input_check_test() https://lore.kernel.org/lkml/20240803133753.1598137-1-yury.norov@xxxxxxxxx/ Changes in V3: https://lore.kernel.org/lkml/20240801071646.682731-1-anshuman.khandual@xxxxxxx/ - Dropped unused __BITS_PER_U128 - Moved #ifdef CONFIG_ARCH_SUPPORTS_INT128 inside genmask_u128_test() - Added asm unsupported comments for GENMASK_U128() and __BIT128() - Added reviewed tag from Arnd Changes in V2: https://lore.kernel.org/all/20240725054808.286708-1-anshuman.khandual@xxxxxxx/ - Wrapped genmask_u128_test() with CONFIG_ARCH_SUPPORTS_INT128 - Defined __BITS_PER_U128 unconditionally as 128 - Defined __GENMASK_U128() via new _BIT128() - Dropped _U128() and _AC128() Changes in V1: https://lore.kernel.org/lkml/20240724103142.165693-1-anshuman.khandual@xxxxxxx/ Anshuman Khandual (2): uapi: Define GENMASK_U128 lib/test_bits.c: Add tests for GENMASK_U128() include/linux/bits.h | 15 +++++++++++++++ include/uapi/linux/bits.h | 3 +++ include/uapi/linux/const.h | 17 +++++++++++++++++ lib/test_bits.c | 34 ++++++++++++++++++++++++++++++++++ 4 files changed, 69 insertions(+) -- 2.30.2