diff options
author | Gabe Black <gabeblack@google.com> | 2018-09-14 20:19:53 -0700 |
---|---|---|
committer | Gabe Black <gabeblack@google.com> | 2018-10-09 21:50:23 +0000 |
commit | f8126c66ce65a2770ce7c524d7eb0becfbb11d4b (patch) | |
tree | 5694e12131c3cd6423f7a370acc8e3e24c5d2173 /src/systemc/core/event.cc | |
parent | d737358ac643ff5bdc3984138cc3ae08c7b57ff7 (diff) | |
download | gem5-f8126c66ce65a2770ce7c524d7eb0becfbb11d4b.tar.xz |
systemc: Differentiate between notifying methods and threads.
The Accellera implementation notifies all types of method
sensitivities first, and then notifies all the ones for threads.
Change-Id: I5eda75958675ba518f008852148030e032f70d83
Reviewed-on: https://gem5-review.googlesource.com/c/12807
Reviewed-by: Gabe Black <gabeblack@google.com>
Maintainer: Gabe Black <gabeblack@google.com>
Diffstat (limited to 'src/systemc/core/event.cc')
-rw-r--r-- | src/systemc/core/event.cc | 37 |
1 files changed, 25 insertions, 12 deletions
diff --git a/src/systemc/core/event.cc b/src/systemc/core/event.cc index 0daca12e1..e7132e083 100644 --- a/src/systemc/core/event.cc +++ b/src/systemc/core/event.cc @@ -134,6 +134,27 @@ Event::getParentObject() const } void +Event::notify(StaticSensitivities &senses) +{ + for (auto s: senses) + s->notify(this); +} + +void +Event::notify(DynamicSensitivities &senses) +{ + int size = senses.size(); + int pos = 0; + while (pos < size) { + if (senses[pos]->notify(this)) + senses[pos] = senses[--size]; + else + pos++; + } + senses.resize(size); +} + +void Event::notify() { if (scheduler.inUpdate()) { @@ -145,18 +166,10 @@ Event::notify() if (delayedNotify.scheduled()) scheduler.deschedule(&delayedNotify); - for (auto s: staticSensitivities) - s->notify(this); - DynamicSensitivities &ds = dynamicSensitivities; - int size = ds.size(); - int pos = 0; - while (pos < size) { - if (ds[pos]->notify(this)) - ds[pos] = ds[--size]; - else - pos++; - } - ds.resize(size); + notify(staticSenseMethod); + notify(dynamicSenseMethod); + notify(staticSenseThread); + notify(dynamicSenseThread); } void |