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>
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -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 *
|
||||
|
||||
Reference in New Issue
Block a user