From 9b1157924b78ab2d4c4817a42591085e5de9afc8 Mon Sep 17 00:00:00 2001 From: Daniel Bertalan Date: Tue, 29 Jun 2021 15:46:50 +0200 Subject: [PATCH] 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). --- Kernel/Assertions.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) 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(expr) ? void(0) : __assertion_failed(#expr, __FILE__, __LINE__, __PRETTY_FUNCTION__)) +#define VERIFY(expr) \ + do { \ + if (!static_cast(expr)) [[unlikely]] \ + __assertion_failed(#expr, __FILE__, __LINE__, __PRETTY_FUNCTION__); \ + } while (0) + #define VERIFY_NOT_REACHED() VERIFY(false) extern "C" {