summaryrefslogtreecommitdiff
path: root/src/arch/arm/fastmodel/iris
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch/arm/fastmodel/iris')
-rw-r--r--src/arch/arm/fastmodel/iris/thread_context.cc19
-rw-r--r--src/arch/arm/fastmodel/iris/thread_context.hh17
2 files changed, 24 insertions, 12 deletions
diff --git a/src/arch/arm/fastmodel/iris/thread_context.cc b/src/arch/arm/fastmodel/iris/thread_context.cc
index b9d34e4bd..c18a5cd7d 100644
--- a/src/arch/arm/fastmodel/iris/thread_context.cc
+++ b/src/arch/arm/fastmodel/iris/thread_context.cc
@@ -520,6 +520,25 @@ ThreadContext::setIntReg(RegIndex reg_idx, RegVal val)
call().resource_write(_instId, result, intReg64Ids.at(reg_idx), val);
}
+RegVal
+ThreadContext::readCCRegFlat(RegIndex idx) const
+{
+ if (idx >= ccRegIds.size())
+ return 0;
+ iris::ResourceReadResult result;
+ call().resource_read(_instId, result, ccRegIds.at(idx));
+ return result.data.at(0);
+}
+
+void
+ThreadContext::setCCRegFlat(RegIndex idx, RegVal val)
+{
+ panic_if(idx >= ccRegIds.size(),
+ "CC reg %d is not supported by fast model.", idx);
+ iris::ResourceWriteResult result;
+ call().resource_write(_instId, result, ccRegIds.at(idx), val);
+}
+
const ArmISA::VecRegContainer &
ThreadContext::readVecReg(const RegId &reg_id) const
{
diff --git a/src/arch/arm/fastmodel/iris/thread_context.hh b/src/arch/arm/fastmodel/iris/thread_context.hh
index 77f3ec9fa..5d6827cc9 100644
--- a/src/arch/arm/fastmodel/iris/thread_context.hh
+++ b/src/arch/arm/fastmodel/iris/thread_context.hh
@@ -83,6 +83,7 @@ class ThreadContext : public ::ThreadContext
ResourceIds miscRegIds;
ResourceIds intReg32Ids;
ResourceIds intReg64Ids;
+ ResourceIds ccRegIds;
iris::ResourceId pcRscId = iris::IRIS_UINT64_MAX;
iris::ResourceId icountRscId;
@@ -386,7 +387,7 @@ class ThreadContext : public ::ThreadContext
RegVal
readCCReg(RegIndex reg_idx) const override
{
- panic("%s not implemented.", __FUNCTION__);
+ return readCCRegFlat(reg_idx);
}
void setIntReg(RegIndex reg_idx, RegVal val) override;
@@ -419,7 +420,7 @@ class ThreadContext : public ::ThreadContext
void
setCCReg(RegIndex reg_idx, RegVal val) override
{
- panic("%s not implemented.", __FUNCTION__);
+ setCCRegFlat(reg_idx, val);
}
void pcStateNoRecord(const ArmISA::PCState &val) override { pcState(val); }
@@ -547,16 +548,8 @@ class ThreadContext : public ::ThreadContext
panic("%s not implemented.", __FUNCTION__);
}
- RegVal
- readCCRegFlat(RegIndex idx) const override
- {
- panic("%s not implemented.", __FUNCTION__);
- }
- void
- setCCRegFlat(RegIndex idx, RegVal val) override
- {
- panic("%s not implemented.", __FUNCTION__);
- }
+ RegVal readCCRegFlat(RegIndex idx) const override;
+ void setCCRegFlat(RegIndex idx, RegVal val) override;
/** @} */
};