summaryrefslogtreecommitdiff
path: root/src/systemc/core/event.cc
diff options
context:
space:
mode:
authorGabe Black <gabeblack@google.com>2018-09-14 20:19:53 -0700
committerGabe Black <gabeblack@google.com>2018-10-09 21:50:23 +0000
commitf8126c66ce65a2770ce7c524d7eb0becfbb11d4b (patch)
tree5694e12131c3cd6423f7a370acc8e3e24c5d2173 /src/systemc/core/event.cc
parentd737358ac643ff5bdc3984138cc3ae08c7b57ff7 (diff)
downloadgem5-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.cc37
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