mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
common: Move a few more standalone macros from xen/lib.h to xen/macros.h
Move a few more macros which have no dependencies on other headers from xen/lib.h to xen/macros.h. Notably, this includes BUILD_BUG_ON* and ARRAY_SIZE. Signed-off-by: Shawn Anastasio <sanastasio@raptorengineering.com> Reviewed-by: Jan Beulich <jbeulich@suse.com>
This commit is contained in:
1 parent
f0437c378e
commit
0c683baa67
2 files changed
+34
-28
No files matched your search
@@ -21,24 +21,6 @@
|
||||
unlikely(ret_warn_on_); \
|
||||
})
|
||||
|
||||
/* All clang versions supported by Xen have _Static_assert. */
|
||||
#if defined(__clang__) || \
|
||||
(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6))
|
||||
/* Force a compilation error if condition is true */
|
||||
#define BUILD_BUG_ON(cond) ({ _Static_assert(!(cond), "!(" #cond ")"); })
|
||||
|
||||
/* Force a compilation error if condition is true, but also produce a
|
||||
result (of value 0 and type size_t), so the expression can be used
|
||||
e.g. in a structure initializer (or where-ever else comma expressions
|
||||
aren't permitted). */
|
||||
#define BUILD_BUG_ON_ZERO(cond) \
|
||||
(sizeof(struct { char c; _Static_assert(!(cond), "!(" #cond ")"); }) & 0)
|
||||
#else
|
||||
#define BUILD_BUG_ON_ZERO(cond) \
|
||||
(sizeof(struct { unsigned u : !(cond); }) & 0)
|
||||
#define BUILD_BUG_ON(cond) ((void)BUILD_BUG_ON_ZERO(cond))
|
||||
#endif
|
||||
|
||||
#ifndef NDEBUG
|
||||
#define ASSERT(p) \
|
||||
do { if ( unlikely(!(p)) ) assert_failed(#p); } while (0)
|
||||
@@ -48,16 +30,6 @@
|
||||
#define ASSERT_UNREACHABLE() do { } while (0)
|
||||
#endif
|
||||
|
||||
#define ABS(_x) ({ \
|
||||
typeof(_x) __x = (_x); \
|
||||
(__x < 0) ? -__x : __x; \
|
||||
})
|
||||
|
||||
#define SWAP(_a, _b) \
|
||||
do { typeof(_a) _t = (_a); (_a) = (_b); (_b) = _t; } while ( 0 )
|
||||
|
||||
#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]) + __must_be_array(x))
|
||||
|
||||
#define __ACCESS_ONCE(x) ({ \
|
||||
(void)(typeof(x))0; /* Scalar typecheck. */ \
|
||||
(volatile typeof(x) *)&(x); })
|
||||
|
||||
@@ -22,6 +22,40 @@
|
||||
#define __STR(...) #__VA_ARGS__
|
||||
#define STR(...) __STR(__VA_ARGS__)
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
/* All clang versions supported by Xen have _Static_assert. */
|
||||
#if defined(__clang__) || \
|
||||
(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6))
|
||||
/* Force a compilation error if condition is true */
|
||||
#define BUILD_BUG_ON(cond) ({ _Static_assert(!(cond), "!(" #cond ")"); })
|
||||
|
||||
/*
|
||||
* Force a compilation error if condition is true, but also produce a
|
||||
* result (of value 0 and type size_t), so the expression can be used
|
||||
* e.g. in a structure initializer (or where-ever else comma expressions
|
||||
* aren't permitted).
|
||||
*/
|
||||
#define BUILD_BUG_ON_ZERO(cond) \
|
||||
(sizeof(struct { char c; _Static_assert(!(cond), "!(" #cond ")"); }) & 0)
|
||||
#else
|
||||
#define BUILD_BUG_ON_ZERO(cond) \
|
||||
(sizeof(struct { unsigned u : !(cond); }) & 0)
|
||||
#define BUILD_BUG_ON(cond) ((void)BUILD_BUG_ON_ZERO(cond))
|
||||
#endif
|
||||
|
||||
#define ABS(x) ({ \
|
||||
typeof(x) x_ = (x); \
|
||||
(x_ < 0) ? -x_ : x_; \
|
||||
})
|
||||
|
||||
#define SWAP(a, b) \
|
||||
do { typeof(a) t_ = (a); (a) = (b); (b) = t_; } while ( 0 )
|
||||
|
||||
#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]) + __must_be_array(x))
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
|
||||
#endif /* __MACROS_H__ */
|
||||
|
||||
/*
|
||||
|
||||