diff options
Diffstat (limited to 'src/util.h')
-rw-r--r-- | src/util.h | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/src/util.h b/src/util.h new file mode 100644 index 0000000..569054b --- /dev/null +++ b/src/util.h @@ -0,0 +1,31 @@ +#ifndef IMB3_UTIL_H +#define IMB3_UTIL_H + +#include <stdbool.h> +#include <stdnoreturn.h> + +static inline bool likely(bool cond) { return __builtin_expect(cond, true); } +static inline bool unlikely(bool cond) { return __builtin_expect(cond, false); } + +#ifndef NDEBUG +noreturn void assume__failed(const char *file, int line, const char *expr); +#endif // NDEBUG + +static inline void assume__impl(bool cond, const char *file, int line, + const char *expr) { +#ifndef NDEBUG + if (unlikely(!cond)) + assume__failed(file, line, expr); +#endif // NDEBUG + if (unlikely(!cond)) + __builtin_unreachable(); +} + +#define assume(COND) assume__impl(COND, __FILE__, __LINE__, #COND) + +__attribute__((format(printf, 3, 4))) noreturn void +todo__impl(const char *file, int line, const char *fmt, ...); + +#define todo(...) todo__impl(__FILE__, __LINE__, __VA_ARGS__) + +#endif // IMB3_UTIL_H |