diff options
Diffstat (limited to 'src/systemc/ext/core/sc_module.hh')
-rw-r--r-- | src/systemc/ext/core/sc_module.hh | 37 |
1 files changed, 34 insertions, 3 deletions
diff --git a/src/systemc/ext/core/sc_module.hh b/src/systemc/ext/core/sc_module.hh index fd4a802b1..746e0c71e 100644 --- a/src/systemc/ext/core/sc_module.hh +++ b/src/systemc/ext/core/sc_module.hh @@ -47,6 +47,12 @@ namespace sc_gem5 { class Module; +class Process; +struct ProcessFuncWrapper; + +Process *newMethodProcess(const char *name, ProcessFuncWrapper *func); +Process *newThreadProcess(const char *name, ProcessFuncWrapper *func); +Process *newCThreadProcess(const char *name, ProcessFuncWrapper *func); } // namespace sc_gem5 @@ -271,9 +277,34 @@ bool timed_out(); #define SC_HAS_PROCESS(name) typedef name SC_CURRENT_USER_MODULE -#define SC_METHOD(name) /* Implementation defined */ -#define SC_THREAD(name) /* Implementation defined */ -#define SC_CTHREAD(name, clk) /* Implementation defined */ +#define SC_METHOD(name) \ + { \ + ::sc_gem5::Process *p = \ + ::sc_gem5::newMethodProcess( \ + #name, new ::sc_gem5::ProcessMemberFuncWrapper< \ + SC_CURRENT_USER_MODULE>(this, \ + &SC_CURRENT_USER_MODULE::name)); \ + this->sensitive << p; \ + } +#define SC_THREAD(name) \ + { \ + ::sc_gem5::Process *p = \ + ::sc_gem5::newThreadProcess( \ + #name, new ::sc_gem5::ProcessMemberFuncWrapper< \ + SC_CURRENT_USER_MODULE>(this, \ + &SC_CURRENT_USER_MODULE::name)); \ + this->sensitive << p; \ + } +#define SC_CTHREAD(name, clk) \ + { \ + ::sc_gem5::Process *p = \ + ::sc_gem5::newCThreadProcess( \ + #name, new ::sc_gem5::ProcessMemberFuncWrapper< \ + SC_CURRENT_USER_MODULE>(this, \ + &SC_CURRENT_USER_MODULE::name)); \ + this->sensitive << p; \ + this->sensitive << clk; \ + } // Nonstandard // Documentation for this is very scarce, but it looks like it's supposed to |