X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/mLib/blobdiff_plain/b1a20beee623c83315c3ce21abc7bcce103c6efb..08bb7015a9e28c5c9d38fe05a6f6644bc21fa527:/utils/macros.h diff --git a/utils/macros.h b/utils/macros.h index bc83629..2ca5a06 100644 --- a/utils/macros.h +++ b/utils/macros.h @@ -61,16 +61,18 @@ #define MLIB__STR(x) #x #define STR(x) MLIB__STR(x) -/* --- @GLUE@ --- * +/* --- @GLUE@, @GLUE3@ --- * * * Arguments: @x, y@ = two sequences of tokens + * @z@ = a third sequence of tokens * * Returns: A single token formed by gluing together the macro-expansions - * of @x@ and @y@. + * of @x@ and @y@, and @z@ for @GLUE3@. */ #define MLIB__GLUE(x, y) x##y #define GLUE(x, y) MLIB__GLUE(x, y) +#define GLUE3(x, y, z) GLUE(x, MLIB__GLUE(y, z)) /* --- @STATIC_ASSERT@ --- * * @@ -144,6 +146,15 @@ #define UNQUALIFY(type, p) \ CONVERT_CAREFULLY(type *, const volatile type *, p) +/* --- @EMPTY@ --- * + * + * Arguments: --- + * + * Returns: The empty token sequence. + */ + +#define EMPTY + /* --- @COMMA@ --- * * * Arguments: --- @@ -252,10 +263,10 @@ # define LAUNDER(x) \ ({ __typeof__(x) _y; __asm__("" : "=g"(_y) : "0"(x)); _y; }) # define ADMIRE(x) \ - ({ __asm__("" : : "g"(x)); }) + ({ __asm__("" :: "g"(x)); }) # define ADMIRE_BUF(p, sz) \ - ({ __asm__("" : : "g"(p), "g"(sz)); }) -# define RELAX do __asm__ __volatile__("" ::: "memory"); while (0) + ({ __asm__("" :: "m"(*(unsigned char *)p), "g"(sz) : "memory"); }) +# define RELAX do __asm__(""); while (0) #endif #if CLANG_VERSION_P(3, 3)