diff options
author | Gabe Black <gabeblack@google.com> | 2018-08-22 22:45:29 -0700 |
---|---|---|
committer | Gabe Black <gabeblack@google.com> | 2018-09-26 00:00:11 +0000 |
commit | dd8b71b413fb511477358b65c7668e6e2574257e (patch) | |
tree | ec6cdbe1568686acd47700dfba63f87a248e3b5c /src/systemc/ext | |
parent | 92d1d2c87366c8e9246ad150ff7a71513da4d773 (diff) | |
download | gem5-dd8b71b413fb511477358b65c7668e6e2574257e.tar.xz |
systemc: Make sc_process_b less hokey, and make WAIT* work.
This change puts sc_process_b into the inheritance hierarchy for the
Process types. It also adds the nonstandard sc_set_location function
and calls it from the nonstandard WAIT* macros.
Change-Id: Ic997dcf74d262774dd7b53504146e372e03af2e0
Reviewed-on: https://gem5-review.googlesource.com/12259
Reviewed-by: Gabe Black <gabeblack@google.com>
Maintainer: Gabe Black <gabeblack@google.com>
Diffstat (limited to 'src/systemc/ext')
-rw-r--r-- | src/systemc/ext/core/sc_module.hh | 18 | ||||
-rw-r--r-- | src/systemc/ext/core/sc_process_handle.hh | 14 |
2 files changed, 21 insertions, 11 deletions
diff --git a/src/systemc/ext/core/sc_module.hh b/src/systemc/ext/core/sc_module.hh index 7088c4e60..8de57b575 100644 --- a/src/systemc/ext/core/sc_module.hh +++ b/src/systemc/ext/core/sc_module.hh @@ -33,6 +33,7 @@ #include <vector> #include "sc_object.hh" +#include "sc_process_handle.hh" #include "sc_sensitive.hh" #include "sc_time.hh" @@ -337,17 +338,20 @@ sc_module *sc_module_sc_new(sc_module *); #define SC_NEW(x) ::sc_core::sc_module_sc_new(new x); // Nonstandard -// In the Accellera implementation, this macro calls sc_set_location to record -// the current file and line, calls wait, and then calls it again to clear the -// file and line. We'll ignore the sc_set_location calls for now. -#define SC_WAIT() ::sc_core::wait(); +#define SC_WAIT() \ + ::sc_core::sc_set_location(__FILE__, __LINE__); \ + ::sc_core::wait(); \ + ::sc_core::sc_set_location(NULL, 0) // Nonstandard -// Same as above, but passes through an argument. -#define SC_WAITN(n) ::sc_core::wait(n); +#define SC_WAITN(n) \ + ::sc_core::sc_set_location(__FILE__, __LINE__); \ + ::sc_core::wait(n); \ + ::sc_core::sc_set_location(NULL, 0) // Nonstandard -#define SC_WAIT_UNTIL(expr) do { SC_WAIT(); } while (!(expr)) +#define SC_WAIT_UNTIL(expr) \ + do { SC_WAIT(); } while (!(expr)) } // namespace sc_core diff --git a/src/systemc/ext/core/sc_process_handle.hh b/src/systemc/ext/core/sc_process_handle.hh index 818690318..04df4728f 100644 --- a/src/systemc/ext/core/sc_process_handle.hh +++ b/src/systemc/ext/core/sc_process_handle.hh @@ -33,6 +33,8 @@ #include <exception> #include <vector> +#include "systemc/ext/core/sc_object.hh" + namespace sc_gem5 { @@ -78,7 +80,6 @@ namespace sc_core { class sc_event; -class sc_object; enum sc_curr_proc_kind { @@ -114,15 +115,20 @@ class sc_unwind_exception : public std::exception // Deprecated // An incomplete version of sc_process_b to satisfy the tests. -class sc_process_b +class sc_process_b : public sc_object { public: + sc_process_b(const char *name) : sc_object(name), file(nullptr), lineno(0) + {} + sc_process_b() : sc_object(), file(nullptr), lineno(0) {} + const char *file; int lineno; - const char *name(); - const char *kind(); }; +// Nonstandard +void sc_set_location(const char *file, int lineno); + // Deprecated sc_process_b *sc_get_curr_process_handle(); static inline sc_process_b * |