|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH 1/7] xen/bitops: Cleanup ahead of rearrangements
Hi Andrew,
On 3/13/24 12:27 PM, Andrew Cooper wrote:
> diff --git a/xen/common/bitops.c b/xen/common/bitops.c
> new file mode 100644
> index 000000000000..4c07191b4030
> --- /dev/null
> +++ b/xen/common/bitops.c
> @@ -0,0 +1,41 @@
> +#include <xen/bitops.h>
> +#include <xen/bug.h>
> +#include <xen/init.h>
> +
> +/* Hide a value from the optimiser. */
> +#define HIDE(x) ({ typeof(x) _x = x; asm volatile ( "" : "+r" (_x) ); _x; })
> +
> +/*
> + * Check that fn(val) can be calcuated by the compiler, and that it gives the
> + * expected answer.
> + */
> +#define COMPILE_CHECK(fn, val, res) \
> + do { \
> + if ( fn(val) != res ) \
> + asm (".error \"Compile time check '" STR(fn(val) == res) "'
> failed\""); \
> + } while ( 0 )
> +
For improved diagnostics, I think it might make sense to explicitly
check if the expression can be evaluated at compile time and emit a
different error if not. Perhaps something like the following:
#define COMPILE_CHECK(fn, val, res) \
do { \
__typeof__(fn(val)) actual = fn(val); \
if ( !__builtin_constant_p(actual) ) \
asm (".error \"Unable to evaluate '" STR(fn(val)) "' at
compile time\"\n"); \
else if ( actual != res ) \
asm (".error \"Compile time check '" STR(fn(val) == res) "'
failed\""); \
} while ( 0 )
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |