Blame SOURCES/0151-macros-expand-BIT-macros-add-MASK-macros-add-_SAFE-m.patch

fffaa6
From 3f3dd44f1964c54b55e8c84343579bd7c1924df5 Mon Sep 17 00:00:00 2001
fffaa6
From: Eugene Syromyatnikov <evgsyr@gmail.com>
fffaa6
Date: Wed, 18 Aug 2021 21:49:12 +0200
fffaa6
Subject: [PATCH 148/150] macros: expand BIT macros, add MASK macros; add
fffaa6
 *_SAFE macros
fffaa6
fffaa6
These macros might make reading a code that often converts between powers
fffaa6
of 2 and values/masks a bit easier;  moreover, the *_SAFE versions should
fffaa6
help in cases where the shift values are expected to be equal to the type
fffaa6
bit width (which lead to UB otherwise).
fffaa6
fffaa6
Switching from BIT to BIT32 should also clarify bitness, which may be somewhat
fffaa6
murky at times (cf. printxval, printflags, and printxvals).
fffaa6
fffaa6
* src/macros.h [!BIT] (BIT): Rename to...
fffaa6
[!BIT32] (BIT32): ...this.
fffaa6
[!BIT64] (BIT64): New macro.
fffaa6
[!MASK32] (MASK32): Likewise.
fffaa6
[!MASK64] (MASK64): Likewise.
fffaa6
(BIT32_SAFE, BIT64_SAFE, MASK32_SAFE, MASK64_SAFE): New macros.
fffaa6
(FLAG): Use BIT32.
fffaa6
---
fffaa6
 src/macros.h | 30 +++++++++++++++++++++++++++---
fffaa6
 1 file changed, 27 insertions(+), 3 deletions(-)
fffaa6
fffaa6
diff --git a/src/macros.h b/src/macros.h
fffaa6
index 467f5d0..2d7a83d 100644
fffaa6
--- a/src/macros.h
fffaa6
+++ b/src/macros.h
fffaa6
@@ -78,10 +78,34 @@ is_filled(const char *ptr, char fill, size_t size)
fffaa6
 # define IS_ARRAY_ZERO(arr_)	\
fffaa6
 	is_filled((const char *) (arr_), 0, sizeof(arr_) + MUST_BE_ARRAY(arr_))
fffaa6
 
fffaa6
-# ifndef BIT
fffaa6
-#  define BIT(x_) (1U << (x_))
fffaa6
+# ifndef BIT32
fffaa6
+#  define BIT32(x_) (1U << (x_))
fffaa6
 # endif
fffaa6
 
fffaa6
-# define FLAG(name_) name_ = BIT(name_##_BIT)
fffaa6
+# ifndef BIT64
fffaa6
+#  define BIT64(x_) (1ULL << (x_))
fffaa6
+# endif
fffaa6
+
fffaa6
+# ifndef MASK32
fffaa6
+#  define MASK32(x_) (BIT32(x_) - 1U)
fffaa6
+# endif
fffaa6
+
fffaa6
+# ifndef MASK64
fffaa6
+#  define MASK64(x_) (BIT64(x_) - 1ULL)
fffaa6
+# endif
fffaa6
+
fffaa6
+/*
fffaa6
+ * "Safe" versions that avoid UB for values that are >= type bit size
fffaa6
+ * (the usually expected behaviour of the bit shift in that case is zero,
fffaa6
+ * but at least powerpc is notorious for returning the input value when shift
fffaa6
+ * by 64 bits is performed).
fffaa6
+ */
fffaa6
+
fffaa6
+# define BIT32_SAFE(x_) ((x_) < 32 ? BIT32(x_) : 0)
fffaa6
+# define BIT64_SAFE(x_) ((x_) < 64 ? BIT64(x_) : 0)
fffaa6
+# define MASK32_SAFE(x_) (BIT32_SAFE(x_) - 1U)
fffaa6
+# define MASK64_SAFE(x_) (BIT64_SAFE(x_) - 1ULL)
fffaa6
+
fffaa6
+# define FLAG(name_) name_ = BIT32(name_##_BIT)
fffaa6
 
fffaa6
 #endif /* !STRACE_MACROS_H */
fffaa6
-- 
fffaa6
2.1.4
fffaa6