aboutsummaryrefslogtreecommitdiffstats
path: root/common
diff options
context:
space:
mode:
authorDavid Shah <davey1576@gmail.com>2018-07-19 11:43:10 +0200
committerDavid Shah <davey1576@gmail.com>2018-07-19 11:43:10 +0200
commitd221e90706915c8ba540805167c8e9e07d4c3d6f (patch)
tree95c4ec5e32dd79305de7b265cf33e077c8b6c5e1 /common
parentb0d9b994eb211f4c4060f6b9802ea5692512e08c (diff)
downloadnextpnr-d221e90706915c8ba540805167c8e9e07d4c3d6f.tar.gz
nextpnr-d221e90706915c8ba540805167c8e9e07d4c3d6f.tar.bz2
nextpnr-d221e90706915c8ba540805167c8e9e07d4c3d6f.zip
Reducing performance cost of asserts
Signed-off-by: David Shah <davey1576@gmail.com>
Diffstat (limited to 'common')
-rw-r--r--common/nextpnr.h18
1 files changed, 10 insertions, 8 deletions
diff --git a/common/nextpnr.h b/common/nextpnr.h
index f808faf8..7aadfae4 100644
--- a/common/nextpnr.h
+++ b/common/nextpnr.h
@@ -72,21 +72,23 @@ class assertion_failure : public std::runtime_error
int line;
};
-inline void except_assert_impl(bool expr, const char *message, const char *expr_str, const char *filename, int line)
+NPNR_NORETURN
+inline bool assert_fail_impl(const char *message, const char *expr_str, const char *filename, int line)
{
- if (!expr)
- throw assertion_failure(message, expr_str, filename, line);
+ throw assertion_failure(message, expr_str, filename, line);
}
NPNR_NORETURN
-inline void assert_false_impl(std::string message, std::string filename, int line)
+inline bool assert_fail_impl_str(std::string message, const char *expr_str, const char *filename, int line)
{
- throw assertion_failure(message, "false", filename, line);
+ throw assertion_failure(message, expr_str, filename, line);
}
-#define NPNR_ASSERT(cond) except_assert_impl((cond), #cond, #cond, __FILE__, __LINE__)
-#define NPNR_ASSERT_MSG(cond, msg) except_assert_impl((cond), msg, #cond, __FILE__, __LINE__)
-#define NPNR_ASSERT_FALSE(msg) assert_false_impl(msg, __FILE__, __LINE__)
+
+#define NPNR_ASSERT(cond) ((void)((cond) || (assert_fail_impl(#cond, #cond, __FILE__, __LINE__))))
+#define NPNR_ASSERT_MSG(cond, msg) ((void)((cond) || (assert_fail_impl(msg, #cond, __FILE__, __LINE__))))
+#define NPNR_ASSERT_FALSE(msg) (assert_fail_impl(msg, "false", __FILE__, __LINE__))
+#define NPNR_ASSERT_FALSE_STR(msg) (assert_fail_impl_str(msg, "false", __FILE__, __LINE__))
struct BaseCtx;
struct Context;