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:
Gabe Black
2018-08-22 22:45:29 -07:00
parent 92d1d2c873
commit dd8b71b413
5 changed files with 30 additions and 24 deletions

View File

@@ -371,7 +371,7 @@ Process::lastReport(::sc_core::sc_report *report)
::sc_core::sc_report *Process::lastReport() const { return _lastReport.get(); }
Process::Process(const char *name, ProcessFuncWrapper *func, bool _dynamic) :
::sc_core::sc_object(name), excWrapper(nullptr), func(func),
::sc_core::sc_process_b(name), excWrapper(nullptr), func(func),
_needsStart(true), _dynamic(_dynamic), _isUnwinding(false),
_terminated(false), _suspended(false), _disabled(false),
_syncReset(false), refCount(0), stackSize(::Fiber::DefaultStackSize),

View File

@@ -266,7 +266,7 @@ class PendingSensitivityFinder : public PendingSensitivity
typedef std::vector<PendingSensitivity *> PendingSensitivities;
class Process : public ::sc_core::sc_object, public ListNode
class Process : public ::sc_core::sc_process_b, public ListNode
{
public:
virtual ::sc_core::sc_curr_proc_kind procKind() const = 0;

View File

@@ -55,18 +55,14 @@ sc_unwind_exception::sc_unwind_exception(const sc_unwind_exception &e) :
sc_unwind_exception::~sc_unwind_exception() throw() {}
const char *
sc_process_b::name()
void
sc_set_location(const char *file, int lineno)
{
warn("%s not implemented.\n", __PRETTY_FUNCTION__);
return "";
}
const char *
sc_process_b::kind()
{
warn("%s not implemented.\n", __PRETTY_FUNCTION__);
return "";
sc_process_b *current = ::sc_gem5::scheduler.current();
if (!current)
return;
current->file = file;
current->lineno = lineno;
}

View File

@@ -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

View File

@@ -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 *