summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Bertalan <dani@danielbertalan.dev>2021-06-29 15:46:50 +0200
committerAli Mohammad Pur <Ali.mpfard@gmail.com>2021-06-29 22:57:52 +0430
commit9b1157924b78ab2d4c4817a42591085e5de9afc8 (patch)
tree2335d977c36115c17cec09254a14c61c64c584ba
parent23d66fe719298b438a699e79fde71fbc254f9f39 (diff)
downloadserenity-9b1157924b78ab2d4c4817a42591085e5de9afc8.zip
Kernel: Add `[[unlikely]]` attribute to VERIFY
This optimization has already been done in LibC's `assert.h`, which Userland `VERIFY()` calls resolve to. We now use it in the kernel, but with the nicer C++ *unlikely* attribute instead of `__builtin_expect`. This tells the compiler to arrange the generated machine code so that the error-free branches execute faster (e.g. fewer jumps, better cache locality).
-rw-r--r--Kernel/Assertions.h7
1 files changed, 6 insertions, 1 deletions
diff --git a/Kernel/Assertions.h b/Kernel/Assertions.h
index 932e497301..436f13a989 100644
--- a/Kernel/Assertions.h
+++ b/Kernel/Assertions.h
@@ -10,7 +10,12 @@
#define __STRINGIFY(x) __STRINGIFY_HELPER(x)
[[noreturn]] void __assertion_failed(const char* msg, const char* file, unsigned line, const char* func);
-#define VERIFY(expr) (static_cast<bool>(expr) ? void(0) : __assertion_failed(#expr, __FILE__, __LINE__, __PRETTY_FUNCTION__))
+#define VERIFY(expr) \
+ do { \
+ if (!static_cast<bool>(expr)) [[unlikely]] \
+ __assertion_failed(#expr, __FILE__, __LINE__, __PRETTY_FUNCTION__); \
+ } while (0)
+
#define VERIFY_NOT_REACHED() VERIFY(false)
extern "C" {