summaryrefslogtreecommitdiffstats
path: root/src/basic/linux/const.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/basic/linux/const.h')
-rw-r--r--src/basic/linux/const.h17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/basic/linux/const.h b/src/basic/linux/const.h
index 1eb84b5087..2122610de7 100644
--- a/src/basic/linux/const.h
+++ b/src/basic/linux/const.h
@@ -28,6 +28,23 @@
#define _BITUL(x) (_UL(1) << (x))
#define _BITULL(x) (_ULL(1) << (x))
+#if !defined(__ASSEMBLY__)
+/*
+ * Missing __asm__ support
+ *
+ * __BIT128() would not work in the __asm__ code, as it shifts an
+ * 'unsigned __init128' data type as direct representation of
+ * 128 bit constants is not supported in the gcc compiler, as
+ * they get silently truncated.
+ *
+ * TODO: Please revisit this implementation when gcc compiler
+ * starts representing 128 bit constants directly like long
+ * and unsigned long etc. Subsequently drop the comment for
+ * GENMASK_U128() which would then start supporting __asm__ code.
+ */
+#define _BIT128(x) ((unsigned __int128)(1) << (x))
+#endif
+
#define __ALIGN_KERNEL(x, a) __ALIGN_KERNEL_MASK(x, (__typeof__(x))(a) - 1)
#define __ALIGN_KERNEL_MASK(x, mask) (((x) + (mask)) & ~(mask))