systemc: Mostly implememt sc_simcontext.

Since we don't track the current process using the sc_curr_proc_handle
structure, we keep one around just to return from the appropriate
accessor, and set its values when it's requested. If the object is
kept around, those values won't change to track changing processes.

From what I see, none of the tests rely on the value tracking the
process beyond the callsight.

Change-Id: I1ad3b7a7b15aa0bc4d218f986ffbe7c51501b296
Reviewed-on: https://gem5-review.googlesource.com/c/12611
Reviewed-by: Gabe Black <gabeblack@google.com>
Maintainer: Gabe Black <gabeblack@google.com>
This commit is contained in:
Gabe Black
2018-09-07 18:54:49 -07:00
parent a4b82a8611
commit 110907bae1

View File

@@ -28,50 +28,60 @@
*/
#include "base/logging.hh"
#include "systemc/core/object.hh"
#include "systemc/core/scheduler.hh"
#include "systemc/ext/core/sc_main.hh"
#include "systemc/ext/core/sc_simcontext.hh"
namespace sc_core
{
sc_dt::uint64
sc_simcontext::delta_count() const
namespace
{
warn("%s not implemented.\n", __PRETTY_FUNCTION__);
return 0;
}
void
sc_simcontext::reset()
{
warn("%s not implemented.\n", __PRETTY_FUNCTION__);
}
size_t objIndex = 0;
sc_simcontext currContext;
sc_curr_proc_info currProcInfo;
} // anonymous namespace
sc_dt::uint64 sc_simcontext::delta_count() const { return sc_delta_count(); }
void sc_simcontext::reset() { objIndex = 0; }
sc_curr_proc_handle
sc_simcontext::get_curr_proc_info()
{
warn("%s not implemented.\n", __PRETTY_FUNCTION__);
return nullptr;
::sc_gem5::Process *p = ::sc_gem5::scheduler.current();
currProcInfo.process_handle = p;
currProcInfo.kind = p ? p->procKind() : SC_NO_PROC_;
return &currProcInfo;
}
sc_object *
sc_simcontext::first_object()
{
warn("%s not implemented.\n", __PRETTY_FUNCTION__);
return nullptr;
objIndex = 0;
if (!::sc_gem5::allObjects.empty())
return ::sc_gem5::allObjects[0];
else
return nullptr;
}
sc_object *
sc_simcontext::next_object()
{
warn("%s not implemented.\n", __PRETTY_FUNCTION__);
return nullptr;
objIndex++;
if (::sc_gem5::allObjects.size() > objIndex)
return ::sc_gem5::allObjects[objIndex];
else
return nullptr;
}
sc_simcontext *
sc_get_curr_simcontext()
{
warn("%s not implemented.\n", __PRETTY_FUNCTION__);
return nullptr;
return &currContext;
}
} // namespace sc_core