diff options
author | H. Peter Anvin <hpa@zytor.com> | 2008-06-10 09:35:26 -0700 |
---|---|---|
committer | H. Peter Anvin <hpa@zytor.com> | 2008-06-10 09:35:26 -0700 |
commit | 51997d3d44a9279508b16e9f3d5e2de173ece7c2 (patch) | |
tree | dfd4e490aa051890565126e945daa4618a4464e4 | |
parent | 8cc5aa78291843c10931ed3c738290df0b643279 (diff) | |
download | nasm-51997d3d44a9279508b16e9f3d5e2de173ece7c2.tar.gz nasm-51997d3d44a9279508b16e9f3d5e2de173ece7c2.tar.bz2 nasm-51997d3d44a9279508b16e9f3d5e2de173ece7c2.zip |
Introduce likely/unlikely macros, use them in saa.c
Introduce the likely() and unlikely() macros, as used in Linux.
They are compiler-dependent hints that a particular boolean expression
is likely to be true or false, respectively.
Currently only implemented for gcc.
-rw-r--r-- | compiler.h | 12 | ||||
-rw-r--r-- | saa.c | 4 |
2 files changed, 14 insertions, 2 deletions
@@ -110,4 +110,16 @@ char *strsep(char **, const char *); # define X86_MEMORY 0 #endif +/* + * Hints to the compiler that a particular branch of code is more or + * less likely to be taken. + */ +#if defined(__GNUC__) && __GNUC__ >= 3 +# define likely(x) __builtin_expect(!!(x), 1) +# define unlikely(x) __builtin_expect(!!(x), 0) +#else +# define likely(x) (!!(x)) +# define unlikely(x) (!!(x)) +#endif + #endif /* NASM_COMPILER_H */ @@ -211,7 +211,7 @@ void saa_fread(struct SAA *s, size_t posn, void *data, size_t len) return; } - if (s->blk_len == SAA_BLKLEN) { + if (likely(s->blk_len == SAA_BLKLEN)) { ix = posn >> SAA_BLKSHIFT; s->rpos = posn & (SAA_BLKLEN-1); } else { @@ -235,7 +235,7 @@ void saa_fwrite(struct SAA *s, size_t posn, const void *data, size_t len) return; } - if (s->blk_len == SAA_BLKLEN) { + if (likely(s->blk_len == SAA_BLKLEN)) { ix = posn >> SAA_BLKSHIFT; s->wpos = posn & (SAA_BLKLEN-1); } else { |