systemc: Ignore immediate self notifications.
Change-Id: If5140bd86159e9257eb9e6ccb8301dd6349dacff Reviewed-on: https://gem5-review.googlesource.com/c/13310 Reviewed-by: Gabe Black <gabeblack@google.com> Maintainer: Gabe Black <gabeblack@google.com>
This commit is contained in:
@@ -55,14 +55,31 @@ Sensitivity::satisfy()
|
||||
}
|
||||
|
||||
bool
|
||||
Sensitivity::notify(Event *e)
|
||||
Sensitivity::notifyWork(Event *e)
|
||||
{
|
||||
if (process->disabled())
|
||||
return false;
|
||||
satisfy();
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
Sensitivity::notify(Event *e)
|
||||
{
|
||||
if (scheduler.current() == process) {
|
||||
static bool warned = false;
|
||||
if (!warned) {
|
||||
SC_REPORT_WARNING("(W536) immediate self-notification ignored "
|
||||
"as of IEEE 1666-2011", process->name());
|
||||
warned = true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
if (process->disabled())
|
||||
return false;
|
||||
|
||||
return notifyWork(e);
|
||||
}
|
||||
|
||||
bool
|
||||
Sensitivity::ofMethod()
|
||||
{
|
||||
@@ -203,11 +220,8 @@ DynamicSensitivityEventOrList::DynamicSensitivityEventOrList(
|
||||
{}
|
||||
|
||||
bool
|
||||
DynamicSensitivityEventOrList::notify(Event *e)
|
||||
DynamicSensitivityEventOrList::notifyWork(Event *e)
|
||||
{
|
||||
if (process->disabled())
|
||||
return false;
|
||||
|
||||
events.erase(e->sc_event());
|
||||
|
||||
// All the other events need this deleted from their lists since this
|
||||
@@ -225,11 +239,8 @@ DynamicSensitivityEventAndList::DynamicSensitivityEventAndList(
|
||||
{}
|
||||
|
||||
bool
|
||||
DynamicSensitivityEventAndList::notify(Event *e)
|
||||
DynamicSensitivityEventAndList::notifyWork(Event *e)
|
||||
{
|
||||
if (process->disabled())
|
||||
return false;
|
||||
|
||||
events.erase(e->sc_event());
|
||||
|
||||
// This sensitivity is satisfied if all events have triggered.
|
||||
|
||||
@@ -76,7 +76,8 @@ class Sensitivity
|
||||
virtual void clear() = 0;
|
||||
|
||||
void satisfy();
|
||||
virtual bool notify(Event *e);
|
||||
virtual bool notifyWork(Event *e);
|
||||
bool notify(Event *e);
|
||||
|
||||
enum Category
|
||||
{
|
||||
@@ -276,7 +277,7 @@ class DynamicSensitivityEventOrList :
|
||||
DynamicSensitivityEventOrList(
|
||||
Process *p, const sc_core::sc_event_or_list *eol);
|
||||
|
||||
bool notify(Event *e) override;
|
||||
bool notifyWork(Event *e) override;
|
||||
};
|
||||
|
||||
//XXX This sensitivity can't be reused. To reset it, it has to be deleted and
|
||||
@@ -292,7 +293,7 @@ class DynamicSensitivityEventAndList :
|
||||
DynamicSensitivityEventAndList(
|
||||
Process *p, const sc_core::sc_event_and_list *eal);
|
||||
|
||||
bool notify(Event *e) override;
|
||||
bool notifyWork(Event *e) override;
|
||||
};
|
||||
|
||||
} // namespace sc_gem5
|
||||
|
||||
Reference in New Issue
Block a user