Gabe Black has uploaded this change for review. ( https://gem5-review.googlesource.com/c/public/gem5/+/12259

Change subject: systemc: Make sc_process_b less hokey, and make WAIT* work.
......................................................................

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
---
M src/systemc/core/process.cc
M src/systemc/core/process.hh
M src/systemc/core/sc_process_handle.cc
M src/systemc/ext/core/sc_module.hh
M src/systemc/ext/core/sc_process_handle.hh
5 files changed, 30 insertions(+), 24 deletions(-)



diff --git a/src/systemc/core/process.cc b/src/systemc/core/process.cc
index 5d5c521..1a101f7 100644
--- a/src/systemc/core/process.cc
+++ b/src/systemc/core/process.cc
@@ -371,7 +371,7 @@
::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),
diff --git a/src/systemc/core/process.hh b/src/systemc/core/process.hh
index 01ee5a6..170246a 100644
--- a/src/systemc/core/process.hh
+++ b/src/systemc/core/process.hh
@@ -266,7 +266,7 @@
 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;
diff --git a/src/systemc/core/sc_process_handle.cc b/src/systemc/core/sc_process_handle.cc
index 256d649..8c756af 100644
--- a/src/systemc/core/sc_process_handle.cc
+++ b/src/systemc/core/sc_process_handle.cc
@@ -55,18 +55,14 @@
 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;
 }


diff --git a/src/systemc/ext/core/sc_module.hh b/src/systemc/ext/core/sc_module.hh
index 7088c4e..8de57b5 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 @@
 #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 8186903..04df472 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 @@
 {

 class sc_event;
-class sc_object;

 enum sc_curr_proc_kind
 {
@@ -114,15 +115,20 @@

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

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/12259
To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings

Gerrit-Project: public/gem5
Gerrit-Branch: master
Gerrit-Change-Id: Ic997dcf74d262774dd7b53504146e372e03af2e0
Gerrit-Change-Number: 12259
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black <[email protected]>
Gerrit-MessageType: newchange
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to