[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 |