event.cc (12988:df70e73818e4) event.cc (13063:c9905ead0041)
1/*
2 * Copyright 2018 Google, Inc.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are
6 * met: redistributions of source code must retain the above copyright
7 * notice, this list of conditions and the following disclaimer;
8 * redistributions in binary form must reproduce the above copyright

--- 30 unchanged lines hidden (view full) ---

39#include "systemc/core/scheduler.hh"
40
41namespace sc_gem5
42{
43
44Event::Event(sc_core::sc_event *_sc_event) : Event(_sc_event, "") {}
45
46Event::Event(sc_core::sc_event *_sc_event, const char *_basename) :
1/*
2 * Copyright 2018 Google, Inc.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are
6 * met: redistributions of source code must retain the above copyright
7 * notice, this list of conditions and the following disclaimer;
8 * redistributions in binary form must reproduce the above copyright

--- 30 unchanged lines hidden (view full) ---

39#include "systemc/core/scheduler.hh"
40
41namespace sc_gem5
42{
43
44Event::Event(sc_core::sc_event *_sc_event) : Event(_sc_event, "") {}
45
46Event::Event(sc_core::sc_event *_sc_event, const char *_basename) :
47 _sc_event(_sc_event), _basename(_basename), delayedNotifyEvent(this)
47 _sc_event(_sc_event), _basename(_basename),
48 delayedNotify([this]() { this->notify(); })
48{
49 Module *p = currentModule();
50
51 if (p)
52 parent = p->obj()->sc_obj();
53 else if (scheduler.current())
54 parent = scheduler.current();
55 else

--- 29 unchanged lines hidden (view full) ---

85 std::swap(*it, topLevelEvents.back());
86 topLevelEvents.pop_back();
87 }
88
89 EventsIt it = findEvent(_name);
90 std::swap(*it, allEvents.back());
91 allEvents.pop_back();
92
49{
50 Module *p = currentModule();
51
52 if (p)
53 parent = p->obj()->sc_obj();
54 else if (scheduler.current())
55 parent = scheduler.current();
56 else

--- 29 unchanged lines hidden (view full) ---

86 std::swap(*it, topLevelEvents.back());
87 topLevelEvents.pop_back();
88 }
89
90 EventsIt it = findEvent(_name);
91 std::swap(*it, allEvents.back());
92 allEvents.pop_back();
93
93 if (delayedNotifyEvent.scheduled())
94 scheduler.deschedule(&delayedNotifyEvent);
94 if (delayedNotify.scheduled())
95 scheduler.deschedule(&delayedNotify);
95}
96
97const std::string &
98Event::name() const
99{
100 return _name;
101}
102

--- 19 unchanged lines hidden (view full) ---

122Event::notify()
123{
124 auto local_sensitivities = sensitivities;
125 for (auto s: local_sensitivities)
126 s->notify(this);
127}
128
129void
96}
97
98const std::string &
99Event::name() const
100{
101 return _name;
102}
103

--- 19 unchanged lines hidden (view full) ---

123Event::notify()
124{
125 auto local_sensitivities = sensitivities;
126 for (auto s: local_sensitivities)
127 s->notify(this);
128}
129
130void
130Event::delayedNotify()
131{
132 scheduler.eventHappened();
133 notify();
134}
135
136void
137Event::notify(const sc_core::sc_time &t)
138{
131Event::notify(const sc_core::sc_time &t)
132{
139 //XXX We're assuming the systemc time resolution is in ps.
140 Tick new_tick = t.value() * SimClock::Int::ps + scheduler.getCurTick();
141 if (delayedNotifyEvent.scheduled()) {
142 Tick old_tick = delayedNotifyEvent.when();
143
144 if (new_tick >= old_tick)
133 if (delayedNotify.scheduled()) {
134 if (scheduler.delayed(t) >= delayedNotify.when())
145 return;
146
135 return;
136
147 scheduler.deschedule(&delayedNotifyEvent);
137 scheduler.deschedule(&delayedNotify);
148 }
138 }
149
150 scheduler.schedule(&delayedNotifyEvent, new_tick);
139 scheduler.schedule(&delayedNotify, t);
151}
152
153void
154Event::cancel()
155{
140}
141
142void
143Event::cancel()
144{
156 if (delayedNotifyEvent.scheduled())
157 scheduler.deschedule(&delayedNotifyEvent);
145 if (delayedNotify.scheduled())
146 scheduler.deschedule(&delayedNotify);
158}
159
160bool
161Event::triggered() const
162{
163 return false;
164}
165

--- 15 unchanged lines hidden ---
147}
148
149bool
150Event::triggered() const
151{
152 return false;
153}
154

--- 15 unchanged lines hidden ---