summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@zytor.com>2008-06-10 09:35:26 -0700
committerH. Peter Anvin <hpa@zytor.com>2008-06-10 09:35:26 -0700
commit51997d3d44a9279508b16e9f3d5e2de173ece7c2 (patch)
treedfd4e490aa051890565126e945daa4618a4464e4
parent8cc5aa78291843c10931ed3c738290df0b643279 (diff)
downloadnasm-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.h12
-rw-r--r--saa.c4
2 files changed, 14 insertions, 2 deletions
diff --git a/compiler.h b/compiler.h
index 01e1127..51f4983 100644
--- a/compiler.h
+++ b/compiler.h
@@ -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 */
diff --git a/saa.c b/saa.c
index 51123da..1704b7d 100644
--- a/saa.c
+++ b/saa.c
@@ -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 {