mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/xiang/erofs.git
synced 2026-10-29 13:23:23 +01:00
This adds GENMASK_U128() and __GENMASK_U128() macros using __BITS_PER_U128 and __int128 data types. These macros will be used in providing support for generating 128 bit masks. The macros wouldn't work in all assembler flavors for reasons described in the comments on top of declarations. Enforce it for more by adding !__ASSEMBLY__ guard. Cc: Yury Norov <[email protected]> Cc: Rasmus Villemoes <[email protected]> Cc: Arnd Bergmann <[email protected]>> Cc: [email protected] Cc: [email protected] Reviewed-by: Arnd Bergmann <[email protected]> Signed-off-by: Anshuman Khandual <[email protected]> Signed-off-by: Yury Norov <[email protected]>
19 lines
532 B
C
19 lines
532 B
C
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
|
|
/* bits.h: Macros for dealing with bitmasks. */
|
|
|
|
#ifndef _UAPI_LINUX_BITS_H
|
|
#define _UAPI_LINUX_BITS_H
|
|
|
|
#define __GENMASK(h, l) \
|
|
(((~_UL(0)) - (_UL(1) << (l)) + 1) & \
|
|
(~_UL(0) >> (__BITS_PER_LONG - 1 - (h))))
|
|
|
|
#define __GENMASK_ULL(h, l) \
|
|
(((~_ULL(0)) - (_ULL(1) << (l)) + 1) & \
|
|
(~_ULL(0) >> (__BITS_PER_LONG_LONG - 1 - (h))))
|
|
|
|
#define __GENMASK_U128(h, l) \
|
|
((_BIT128((h)) << 1) - (_BIT128(l)))
|
|
|
|
#endif /* _UAPI_LINUX_BITS_H */
|