0
0
mirror of https://github.com/netwide-assembler/nasm.git synced 2025-09-22 10:43:39 -04:00

Introduce cold function attribute

Attribute to deemphasize certain code paths.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
This commit is contained in:
H. Peter Anvin
2018-02-22 14:52:50 -08:00
parent 6feef84f25
commit 6686fc627e
5 changed files with 25 additions and 8 deletions

View File

@@ -285,6 +285,22 @@ size_t strnlen(const char *s, size_t maxlen);
# define no_return void
#endif
/*
* How to tell the compiler that a function is unlikely to be executed.
* This differs from unlikely() in that it is applied to a function call,
* not a boolean condition.
*/
#ifndef HAVE_FUNC_ATTRIBUTE_COLD
# define unlikely_func __attribute__((cold))
#else
# define unlikely_func
#endif
/*
* A fatal function is both unlikely and no_return
*/
#define fatal_func no_return unlikely_func
/*
* How to tell the compiler that a function takes a printf-like string
*/

View File

@@ -44,9 +44,9 @@
* An error reporting function should look like this.
*/
void printf_func(2, 3) nasm_error(int severity, const char *fmt, ...);
no_return printf_func(2, 3) nasm_fatal(int flags, const char *fmt, ...);
no_return printf_func(2, 3) nasm_panic(int flags, const char *fmt, ...);
no_return nasm_panic_from_macro(const char *file, int line);
fatal_func printf_func(2, 3) nasm_fatal(int flags, const char *fmt, ...);
fatal_func printf_func(2, 3) nasm_panic(int flags, const char *fmt, ...);
fatal_func nasm_panic_from_macro(const char *file, int line);
#define panic() nasm_panic_from_macro(__FILE__, __LINE__);
typedef void (*vefunc) (int severity, const char *fmt, va_list ap);

View File

@@ -111,7 +111,7 @@ void nasm_write(const void *, size_t, FILE *);
/*
* NASM assert failure
*/
no_return nasm_assert_failed(const char *, int, const char *);
fatal_func nasm_assert_failed(const char *, int, const char *);
#define nasm_assert(x) \
do { \
if (unlikely(!(x))) \