Added error_assert() macro and used branch hinting
authorDavide Libenzi <dlibenzi@google.com>
Mon, 30 Nov 2015 04:04:17 +0000 (20:04 -0800)
committerBarret Rhoden <brho@cs.berkeley.edu>
Wed, 16 Dec 2015 21:27:06 +0000 (16:27 -0500)
Added error_assert() macro and used branch hinting. The error assert
macro issues and error() in case of failed assertion, instead of a panic().

Signed-off-by: Davide Libenzi <dlibenzi@google.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/include/assert.h

index 644cc2d..2b64c36 100644 (file)
@@ -2,6 +2,8 @@
 
 #pragma once
 
+#include <compiler.h>
+
 void ( _warn)(const char *, int, const char *, ...);
 void ( _panic)(const char *, int, const char *, ...)
        __attribute__((noreturn));
@@ -14,7 +16,10 @@ void ( _panic)(const char *, int, const char *, ...)
 #define exhausted(...) _panic(__FILE__, __LINE__, __VA_ARGS__)
 
 #define assert(x)              \
-       do { if (!(x)) panic("assertion failed: %s", #x); } while (0)
+       do { if (unlikely(!(x))) panic("assertion failed: %s", #x); } while (0)
+
+#define error_assert(e, x) \
+       do { if (unlikely(!(x))) error(e, "Assertion failed: " #x); } while (0)
 
 // static_assert(x) will generate a compile-time error if 'x' is false.
 #define static_assert(x)       switch (x) case 0: case (x):