diff options
author | Clifford Wolf <clifford@clifford.at> | 2014-07-24 03:48:38 +0200 |
---|---|---|
committer | Clifford Wolf <clifford@clifford.at> | 2014-07-24 03:48:38 +0200 |
commit | 6b1018314c130ffa12df2e8c73f1c0cd5853b6f7 (patch) | |
tree | 73621bf960d0e90beb7b1804fbb39cd0ddaa5d4b /kernel/log.h | |
parent | b31762d158f4c9fb406cd787361254330f4ec03e (diff) | |
download | yosys-6b1018314c130ffa12df2e8c73f1c0cd5853b6f7.tar.gz yosys-6b1018314c130ffa12df2e8c73f1c0cd5853b6f7.tar.bz2 yosys-6b1018314c130ffa12df2e8c73f1c0cd5853b6f7.zip |
Added cover() API
Diffstat (limited to 'kernel/log.h')
-rw-r--r-- | kernel/log.h | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/kernel/log.h b/kernel/log.h index 00265dbe0..517808061 100644 --- a/kernel/log.h +++ b/kernel/log.h @@ -63,6 +63,39 @@ void log_cell(RTLIL::Cell *cell, std::string indent = ""); #define log_assert(_assert_expr_) do { if (_assert_expr_) break; log_error("Assert `%s' failed in %s:%d.\n", #_assert_expr_, __FILE__, __LINE__); } while (0) #define log_ping() log("-- %s:%d %s --\n", __FILE__, __LINE__, __PRETTY_FUNCTION__) +#ifndef NDEBUG +# define cover(_id) do { \ + static CoverAgent _cover_agent(__FILE__, __LINE__, __FUNCTION__, _id); \ + _cover_agent.ticks++; \ + } while (0) +#else +# define cover(_id) do { } while (0) +#endif + +struct CoverAgent +{ + static struct CoverAgent *first_cover_agent; + struct CoverAgent *next_cover_agent; + + const char *file; + int line; + const char *func; + const char *id; + int ticks; + + CoverAgent(const char *file, int line, const char *func, const char *id) : + file(file), line(line), func(func), id(id), ticks(0) + { + next_cover_agent = first_cover_agent; + first_cover_agent = this; + }; +}; + + +// ------------------------------------------------------------ +// everything below this line are utilities for troubleshooting +// ------------------------------------------------------------ + // simple timer for performance measurements // toggle the '#if 1' to get a baseline for the perormance penalty added by the measurement struct PerformanceTimer |