cpu: Add HTM ExecContext API
* initiateHtmCmd(Request::Flags flags) * getHtmTransactionUid() * newHtmTransactionUid() * inHtmTransactionalState() * getHtmTransactionalDepth() JIRA: https://gem5.atlassian.net/browse/GEM5-587 Change-Id: I438832a3c47fff1d12d0123425985cfa2150ab40 Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/30323 Tested-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
committed by
Giacomo Travaglini
parent
7fe03c6833
commit
4a78604c99
@@ -300,6 +300,8 @@ class BaseDynInst : public ExecContext, public RefCounted
|
||||
Fault initiateMemRead(Addr addr, unsigned size, Request::Flags flags,
|
||||
const std::vector<bool>& byte_enable = std::vector<bool>());
|
||||
|
||||
Fault initiateHtmCmd(Request::Flags flags) override;
|
||||
|
||||
Fault writeMem(uint8_t *data, unsigned size, Addr addr,
|
||||
Request::Flags flags, uint64_t *res,
|
||||
const std::vector<bool>& byte_enable = std::vector<bool>());
|
||||
@@ -539,6 +541,30 @@ class BaseDynInst : public ExecContext, public RefCounted
|
||||
bool isFirstMicroop() const { return staticInst->isFirstMicroop(); }
|
||||
bool isMicroBranch() const { return staticInst->isMicroBranch(); }
|
||||
|
||||
uint64_t getHtmTransactionUid() const override
|
||||
{
|
||||
panic("Not yet implemented\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint64_t newHtmTransactionUid() const override
|
||||
{
|
||||
panic("Not yet implemented\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool inHtmTransactionalState() const override
|
||||
{
|
||||
panic("Not yet implemented\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
uint64_t getHtmTransactionalDepth() const override
|
||||
{
|
||||
panic("Not yet implemented\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
/** Temporarily sets this instruction as a serialize before instruction. */
|
||||
void setSerializeBefore() { status.set(SerializeBefore); }
|
||||
|
||||
@@ -962,6 +988,14 @@ BaseDynInst<Impl>::initiateMemRead(Addr addr, unsigned size,
|
||||
byte_enable);
|
||||
}
|
||||
|
||||
template<class Impl>
|
||||
Fault
|
||||
BaseDynInst<Impl>::initiateHtmCmd(Request::Flags flags)
|
||||
{
|
||||
panic("Not yet implemented\n");
|
||||
return NoFault;
|
||||
}
|
||||
|
||||
template<class Impl>
|
||||
Fault
|
||||
BaseDynInst<Impl>::writeMem(uint8_t *data, unsigned size, Addr addr,
|
||||
|
||||
@@ -434,6 +434,41 @@ class CheckerCPU : public BaseCPU, public ExecContext
|
||||
thread->setMemAccPredicate(val);
|
||||
}
|
||||
|
||||
uint64_t
|
||||
getHtmTransactionUid() const override
|
||||
{
|
||||
panic("not yet supported!");
|
||||
return 0;
|
||||
};
|
||||
|
||||
uint64_t
|
||||
newHtmTransactionUid() const override
|
||||
{
|
||||
panic("not yet supported!");
|
||||
return 0;
|
||||
};
|
||||
|
||||
Fault
|
||||
initiateHtmCmd(Request::Flags flags) override
|
||||
{
|
||||
panic("not yet supported!");
|
||||
return NoFault;
|
||||
}
|
||||
|
||||
bool
|
||||
inHtmTransactionalState() const override
|
||||
{
|
||||
panic("not yet supported!");
|
||||
return false;
|
||||
}
|
||||
|
||||
uint64_t
|
||||
getHtmTransactionalDepth() const override
|
||||
{
|
||||
panic("not yet supported!");
|
||||
return 0;
|
||||
}
|
||||
|
||||
TheISA::PCState pcState() const override { return thread->pcState(); }
|
||||
void
|
||||
pcState(const TheISA::PCState &val) override
|
||||
|
||||
@@ -252,6 +252,11 @@ class ExecContext {
|
||||
panic("ExecContext::initiateMemRead() should be overridden\n");
|
||||
}
|
||||
|
||||
/**
|
||||
* Initiate an HTM command,
|
||||
* e.g. tell Ruby we're starting/stopping a transaction
|
||||
*/
|
||||
virtual Fault initiateHtmCmd(Request::Flags flags) = 0;
|
||||
/**
|
||||
* For atomic-mode contexts, perform an atomic memory write operation.
|
||||
* For timing-mode contexts, initiate a timing memory write operation.
|
||||
@@ -320,6 +325,12 @@ class ExecContext {
|
||||
virtual bool readMemAccPredicate() const = 0;
|
||||
virtual void setMemAccPredicate(bool val) = 0;
|
||||
|
||||
// hardware transactional memory
|
||||
virtual uint64_t newHtmTransactionUid() const = 0;
|
||||
virtual uint64_t getHtmTransactionUid() const = 0;
|
||||
virtual bool inHtmTransactionalState() const = 0;
|
||||
virtual uint64_t getHtmTransactionalDepth() const = 0;
|
||||
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
|
||||
@@ -113,6 +113,13 @@ class ExecContext : public ::ExecContext
|
||||
size, addr, flags, nullptr, nullptr, byte_enable);
|
||||
}
|
||||
|
||||
Fault
|
||||
initiateHtmCmd(Request::Flags flags) override
|
||||
{
|
||||
panic("ExecContext::initiateHtmCmd() not implemented on MinorCPU\n");
|
||||
return NoFault;
|
||||
}
|
||||
|
||||
Fault
|
||||
writeMem(uint8_t *data, unsigned int size, Addr addr,
|
||||
Request::Flags flags, uint64_t *res,
|
||||
@@ -333,6 +340,39 @@ class ExecContext : public ::ExecContext
|
||||
thread.setMemAccPredicate(val);
|
||||
}
|
||||
|
||||
// hardware transactional memory
|
||||
uint64_t
|
||||
getHtmTransactionUid() const override
|
||||
{
|
||||
panic("ExecContext::getHtmTransactionUid() not"
|
||||
"implemented on MinorCPU\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint64_t
|
||||
newHtmTransactionUid() const override
|
||||
{
|
||||
panic("ExecContext::newHtmTransactionUid() not"
|
||||
"implemented on MinorCPU\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool
|
||||
inHtmTransactionalState() const override
|
||||
{
|
||||
// ExecContext::inHtmTransactionalState() not
|
||||
// implemented on MinorCPU
|
||||
return false;
|
||||
}
|
||||
|
||||
uint64_t
|
||||
getHtmTransactionalDepth() const override
|
||||
{
|
||||
panic("ExecContext::getHtmTransactionalDepth() not"
|
||||
"implemented on MinorCPU\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
TheISA::PCState
|
||||
pcState() const override
|
||||
{
|
||||
|
||||
@@ -473,6 +473,12 @@ class SimpleExecContext : public ExecContext {
|
||||
return cpu->initiateMemAMO(addr, size, flags, std::move(amo_op));
|
||||
}
|
||||
|
||||
Fault initiateHtmCmd(Request::Flags flags) override
|
||||
{
|
||||
panic("Not yet supported\n");
|
||||
return NoFault;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the number of consecutive store conditional failures.
|
||||
*/
|
||||
@@ -527,6 +533,34 @@ class SimpleExecContext : public ExecContext {
|
||||
thread->setMemAccPredicate(val);
|
||||
}
|
||||
|
||||
uint64_t
|
||||
getHtmTransactionUid() const override
|
||||
{
|
||||
panic("Not yet supported\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint64_t
|
||||
newHtmTransactionUid() const override
|
||||
{
|
||||
panic("Not yet supported\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool
|
||||
inHtmTransactionalState() const override
|
||||
{
|
||||
panic("Not yet supported\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
uint64_t
|
||||
getHtmTransactionalDepth() const override
|
||||
{
|
||||
panic("Not yet supported\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Invalidate a page in the DTLB <i>and</i> ITLB.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user