summaryrefslogtreecommitdiffstats
path: root/sys/sys/bitset.h
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2017-06-07 11:30:28 +0000
committerkib <kib@FreeBSD.org>2017-06-07 11:30:28 +0000
commit45743686ba89fc6bef116847a7603c5c8a331825 (patch)
treee37842ac6d0d4fb225d020c0889aa551fa4127dc /sys/sys/bitset.h
parent5e738e821a7fa6aacacb7025c58ba730119d70a6 (diff)
downloadFreeBSD-src-45743686ba89fc6bef116847a7603c5c8a331825.zip
FreeBSD-src-45743686ba89fc6bef116847a7603c5c8a331825.tar.gz
MFC r318781:
Add BIT_OR2(), BIT_AND2(), BIT_NAND2(), BIT_XOR() and BIT_XOR2(). Approved by: re (marius)
Diffstat (limited to 'sys/sys/bitset.h')
-rw-r--r--sys/sys/bitset.h30
1 files changed, 30 insertions, 0 deletions
diff --git a/sys/sys/bitset.h b/sys/sys/bitset.h
index 723c39b..8bc9e3d 100644
--- a/sys/sys/bitset.h
+++ b/sys/sys/bitset.h
@@ -122,18 +122,48 @@
(d)->__bits[__i] |= (s)->__bits[__i]; \
} while (0)
+#define BIT_OR2(_s, d, s1, s2) do { \
+ __size_t __i; \
+ for (__i = 0; __i < __bitset_words((_s)); __i++) \
+ (d)->__bits[__i] = (s1)->__bits[__i] | (s2)->__bits[__i];\
+} while (0)
+
#define BIT_AND(_s, d, s) do { \
__size_t __i; \
for (__i = 0; __i < __bitset_words((_s)); __i++) \
(d)->__bits[__i] &= (s)->__bits[__i]; \
} while (0)
+#define BIT_AND2(_s, d, s1, s2) do { \
+ __size_t __i; \
+ for (__i = 0; __i < __bitset_words((_s)); __i++) \
+ (d)->__bits[__i] = (s1)->__bits[__i] & (s2)->__bits[__i];\
+} while (0)
+
#define BIT_NAND(_s, d, s) do { \
__size_t __i; \
for (__i = 0; __i < __bitset_words((_s)); __i++) \
(d)->__bits[__i] &= ~(s)->__bits[__i]; \
} while (0)
+#define BIT_NAND2(_s, d, s1, s2) do { \
+ __size_t __i; \
+ for (__i = 0; __i < __bitset_words((_s)); __i++) \
+ (d)->__bits[__i] = (s1)->__bits[__i] & ~(s2)->__bits[__i];\
+} while (0)
+
+#define BIT_XOR(_s, d, s) do { \
+ __size_t __i; \
+ for (__i = 0; __i < __bitset_words((_s)); __i++) \
+ (d)->__bits[__i] ^= (s)->__bits[__i]; \
+} while (0)
+
+#define BIT_XOR2(_s, d, s1, s2) do { \
+ __size_t __i; \
+ for (__i = 0; __i < __bitset_words((_s)); __i++) \
+ (d)->__bits[__i] = (s1)->__bits[__i] ^ (s2)->__bits[__i];\
+} while (0)
+
#define BIT_CLR_ATOMIC(_s, n, p) \
atomic_clear_long(&(p)->__bits[__bitset_word(_s, n)], \
__bitset_mask((_s), n))
OpenPOWER on IntegriCloud