diff options
author | Jake Freeland <jfree@FreeBSD.org> | 2024-04-28 00:20:34 +0000 |
---|---|---|
committer | Jake Freeland <jfree@FreeBSD.org> | 2024-04-28 00:20:34 +0000 |
commit | cd4bd9750c1b194ba22fbbc333d6166556a26577 (patch) | |
tree | 26d52c9fd612215d8d220f16ec71721db1282e90 /sys | |
parent | 03a39a17089adc1d0e28076670e664dcdebccf73 (diff) | |
download | src-cd4bd9750c1b194ba22fbbc333d6166556a26577.tar.gz src-cd4bd9750c1b194ba22fbbc333d6166556a26577.zip |
bitset: Add ORNOT macros
Macros to ANDNOT a bitset currently exist, but there are no ORNOT
equivalents. Introduce ORNOT macros for bitset(9), cpuset(9), and
domainset(9).
Approved by: markj (mentor)
Reviewed by: markj
MFC after: 1 week
Sponsored by: NIKSUN, Inc.
Differential Revision: https://reviews.freebsd.org/D44976
Diffstat (limited to 'sys')
-rw-r--r-- | sys/sys/bitset.h | 14 | ||||
-rw-r--r-- | sys/sys/cpuset.h | 1 | ||||
-rw-r--r-- | sys/sys/domainset.h | 1 |
3 files changed, 16 insertions, 0 deletions
diff --git a/sys/sys/bitset.h b/sys/sys/bitset.h index 5ff2bb76a4ab..4afac9b172e8 100644 --- a/sys/sys/bitset.h +++ b/sys/sys/bitset.h @@ -135,6 +135,18 @@ (d)->__bits[__i] = (s1)->__bits[__i] | (s2)->__bits[__i];\ } while (0) +#define __BIT_ORNOT(_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_ORNOT2(_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++) \ @@ -330,6 +342,8 @@ #define BIT_ISSET(_s, n, p) __BIT_ISSET(_s, n, p) #define BIT_OR(_s, d, s) __BIT_OR(_s, d, s) #define BIT_OR2(_s, d, s1, s2) __BIT_OR2(_s, d, s1, s2) +#define BIT_ORNOT(_s, d, s) __BIT_ORNOT(_s, d, s) +#define BIT_ORNOT2(_s, d, s1, s2) __BIT_ORNOT2(_s, d, s1, s2) #define BIT_OR_ATOMIC(_s, d, s) __BIT_OR_ATOMIC(_s, d, s) #define BIT_OVERLAP(_s, p, c) __BIT_OVERLAP(_s, p, c) #define BIT_SET(_s, n, p) __BIT_SET(_s, n, p) diff --git a/sys/sys/cpuset.h b/sys/sys/cpuset.h index 219e190f0b37..b036b45da283 100644 --- a/sys/sys/cpuset.h +++ b/sys/sys/cpuset.h @@ -56,6 +56,7 @@ #define CPU_OVERLAP(p, c) __BIT_OVERLAP(CPU_SETSIZE, p, c) #define CPU_CMP(p, c) __BIT_CMP(CPU_SETSIZE, p, c) #define CPU_OR(d, s1, s2) __BIT_OR2(CPU_SETSIZE, d, s1, s2) +#define CPU_ORNOT(d, s1, s2) __BIT_ORNOT2(CPU_SETSIZE, d, s1, s2) #define CPU_AND(d, s1, s2) __BIT_AND2(CPU_SETSIZE, d, s1, s2) #define CPU_ANDNOT(d, s1, s2) __BIT_ANDNOT2(CPU_SETSIZE, d, s1, s2) #define CPU_XOR(d, s1, s2) __BIT_XOR2(CPU_SETSIZE, d, s1, s2) diff --git a/sys/sys/domainset.h b/sys/sys/domainset.h index 42891263b81b..f98b175e9bc8 100644 --- a/sys/sys/domainset.h +++ b/sys/sys/domainset.h @@ -54,6 +54,7 @@ #define DOMAINSET_OVERLAP(p, c) __BIT_OVERLAP(DOMAINSET_SETSIZE, p, c) #define DOMAINSET_CMP(p, c) __BIT_CMP(DOMAINSET_SETSIZE, p, c) #define DOMAINSET_OR(d, s) __BIT_OR(DOMAINSET_SETSIZE, d, s) +#define DOMAINSET_ORNOT(d, s) __BIT_ORNOT(DOMAINSET_SETSIZE, d, s) #define DOMAINSET_AND(d, s) __BIT_AND(DOMAINSET_SETSIZE, d, s) #define DOMAINSET_ANDNOT(d, s) __BIT_ANDNOT(DOMAINSET_SETSIZE, d, s) #define DOMAINSET_CLR_ATOMIC(n, p) __BIT_CLR_ATOMIC(DOMAINSET_SETSIZE, n, p) |