arch,cpu: Turn (read|set)*Reg into inline helpers.
Eliminate readFloatRegFlat and setFloatRegFlat for the Fast Model ThreadContext since ARM doesn't use those register types, and those methods are no longer required by the ThreadContext interface. Change-Id: Ic149c64e2fbf1d313066fefe480c435eef6d66e5 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/49113 Maintainer: Gabe Black <gabe.black@gmail.com> Reviewed-by: Giacomo Travaglini <giacomo.travaglini@arm.com> Maintainer: Giacomo Travaglini <giacomo.travaglini@arm.com> Tested-by: kokoro <noreply+kokoro@google.com>
This commit is contained in:
@@ -200,36 +200,91 @@ class ThreadContext : public PCEventScope
|
||||
virtual void setReg(const RegId ®, RegVal val);
|
||||
virtual void setReg(const RegId ®, const void *val);
|
||||
|
||||
virtual RegVal readIntReg(RegIndex reg_idx) const = 0;
|
||||
RegVal
|
||||
readIntReg(RegIndex reg_idx) const
|
||||
{
|
||||
return getReg(RegId(IntRegClass, reg_idx));
|
||||
}
|
||||
|
||||
virtual RegVal readFloatReg(RegIndex reg_idx) const = 0;
|
||||
RegVal
|
||||
readFloatReg(RegIndex reg_idx) const
|
||||
{
|
||||
return getReg(RegId(FloatRegClass, reg_idx));
|
||||
}
|
||||
|
||||
virtual const TheISA::VecRegContainer&
|
||||
readVecReg(const RegId& reg) const = 0;
|
||||
virtual TheISA::VecRegContainer& getWritableVecReg(const RegId& reg) = 0;
|
||||
TheISA::VecRegContainer
|
||||
readVecReg(const RegId ®) const
|
||||
{
|
||||
TheISA::VecRegContainer val;
|
||||
getReg(reg, &val);
|
||||
return val;
|
||||
}
|
||||
TheISA::VecRegContainer&
|
||||
getWritableVecReg(const RegId& reg)
|
||||
{
|
||||
return *(TheISA::VecRegContainer *)getWritableReg(reg);
|
||||
}
|
||||
|
||||
virtual RegVal readVecElem(const RegId& reg) const = 0;
|
||||
RegVal
|
||||
readVecElem(const RegId& reg) const
|
||||
{
|
||||
return getReg(reg);
|
||||
}
|
||||
|
||||
virtual const TheISA::VecPredRegContainer& readVecPredReg(
|
||||
const RegId& reg) const = 0;
|
||||
virtual TheISA::VecPredRegContainer& getWritableVecPredReg(
|
||||
const RegId& reg) = 0;
|
||||
TheISA::VecPredRegContainer
|
||||
readVecPredReg(const RegId ®) const
|
||||
{
|
||||
TheISA::VecPredRegContainer val;
|
||||
getReg(reg, &val);
|
||||
return val;
|
||||
}
|
||||
TheISA::VecPredRegContainer&
|
||||
getWritableVecPredReg(const RegId& reg)
|
||||
{
|
||||
return *(TheISA::VecPredRegContainer *)getWritableReg(reg);
|
||||
}
|
||||
|
||||
virtual RegVal readCCReg(RegIndex reg_idx) const = 0;
|
||||
RegVal
|
||||
readCCReg(RegIndex reg_idx) const
|
||||
{
|
||||
return getReg(RegId(CCRegClass, reg_idx));
|
||||
}
|
||||
|
||||
virtual void setIntReg(RegIndex reg_idx, RegVal val) = 0;
|
||||
void
|
||||
setIntReg(RegIndex reg_idx, RegVal val)
|
||||
{
|
||||
setReg(RegId(IntRegClass, reg_idx), val);
|
||||
}
|
||||
|
||||
virtual void setFloatReg(RegIndex reg_idx, RegVal val) = 0;
|
||||
void
|
||||
setFloatReg(RegIndex reg_idx, RegVal val)
|
||||
{
|
||||
setReg(RegId(FloatRegClass, reg_idx), val);
|
||||
}
|
||||
|
||||
virtual void setVecReg(const RegId& reg,
|
||||
const TheISA::VecRegContainer& val) = 0;
|
||||
void
|
||||
setVecReg(const RegId& reg, const TheISA::VecRegContainer &val)
|
||||
{
|
||||
setReg(reg, &val);
|
||||
}
|
||||
|
||||
virtual void setVecElem(const RegId& reg, RegVal val) = 0;
|
||||
void
|
||||
setVecElem(const RegId& reg, RegVal val)
|
||||
{
|
||||
setReg(reg, val);
|
||||
}
|
||||
|
||||
virtual void setVecPredReg(const RegId& reg,
|
||||
const TheISA::VecPredRegContainer& val) = 0;
|
||||
void
|
||||
setVecPredReg(const RegId ®, const TheISA::VecPredRegContainer &val)
|
||||
{
|
||||
setReg(reg, &val);
|
||||
}
|
||||
|
||||
virtual void setCCReg(RegIndex reg_idx, RegVal val) = 0;
|
||||
void
|
||||
setCCReg(RegIndex reg_idx, RegVal val)
|
||||
{
|
||||
setReg(RegId(CCRegClass, reg_idx), val);
|
||||
}
|
||||
|
||||
virtual const PCStateBase &pcState() const = 0;
|
||||
|
||||
@@ -286,30 +341,87 @@ class ThreadContext : public PCEventScope
|
||||
virtual void setRegFlat(const RegId ®, RegVal val);
|
||||
virtual void setRegFlat(const RegId ®, const void *val);
|
||||
|
||||
virtual RegVal readIntRegFlat(RegIndex idx) const = 0;
|
||||
virtual void setIntRegFlat(RegIndex idx, RegVal val) = 0;
|
||||
RegVal
|
||||
readIntRegFlat(RegIndex idx) const
|
||||
{
|
||||
return getRegFlat(RegId(IntRegClass, idx));
|
||||
}
|
||||
void
|
||||
setIntRegFlat(RegIndex idx, RegVal val)
|
||||
{
|
||||
setRegFlat(RegId(IntRegClass, idx), val);
|
||||
}
|
||||
|
||||
virtual RegVal readFloatRegFlat(RegIndex idx) const = 0;
|
||||
virtual void setFloatRegFlat(RegIndex idx, RegVal val) = 0;
|
||||
RegVal
|
||||
readFloatRegFlat(RegIndex idx) const
|
||||
{
|
||||
return getRegFlat(RegId(FloatRegClass, idx));
|
||||
}
|
||||
void
|
||||
setFloatRegFlat(RegIndex idx, RegVal val)
|
||||
{
|
||||
setRegFlat(RegId(FloatRegClass, idx), val);
|
||||
}
|
||||
|
||||
virtual const TheISA::VecRegContainer&
|
||||
readVecRegFlat(RegIndex idx) const = 0;
|
||||
virtual TheISA::VecRegContainer& getWritableVecRegFlat(RegIndex idx) = 0;
|
||||
virtual void setVecRegFlat(RegIndex idx,
|
||||
const TheISA::VecRegContainer& val) = 0;
|
||||
TheISA::VecRegContainer
|
||||
readVecRegFlat(RegIndex idx) const
|
||||
{
|
||||
TheISA::VecRegContainer val;
|
||||
getRegFlat(RegId(VecRegClass, idx), &val);
|
||||
return val;
|
||||
}
|
||||
TheISA::VecRegContainer&
|
||||
getWritableVecRegFlat(RegIndex idx)
|
||||
{
|
||||
return *(TheISA::VecRegContainer *)
|
||||
getWritableRegFlat(RegId(VecRegClass, idx));
|
||||
}
|
||||
void
|
||||
setVecRegFlat(RegIndex idx, const TheISA::VecRegContainer& val)
|
||||
{
|
||||
setRegFlat(RegId(VecRegClass, idx), &val);
|
||||
}
|
||||
|
||||
virtual RegVal readVecElemFlat(RegIndex idx) const = 0;
|
||||
virtual void setVecElemFlat(RegIndex idx, RegVal val) = 0;
|
||||
RegVal
|
||||
readVecElemFlat(RegIndex idx) const
|
||||
{
|
||||
return getRegFlat(RegId(VecElemClass, idx));
|
||||
}
|
||||
void
|
||||
setVecElemFlat(RegIndex idx, RegVal val)
|
||||
{
|
||||
setRegFlat(RegId(VecElemClass, idx), val);
|
||||
}
|
||||
|
||||
virtual const TheISA::VecPredRegContainer &
|
||||
readVecPredRegFlat(RegIndex idx) const = 0;
|
||||
virtual TheISA::VecPredRegContainer& getWritableVecPredRegFlat(
|
||||
RegIndex idx) = 0;
|
||||
virtual void setVecPredRegFlat(RegIndex idx,
|
||||
const TheISA::VecPredRegContainer& val) = 0;
|
||||
TheISA::VecPredRegContainer
|
||||
readVecPredRegFlat(RegIndex idx) const
|
||||
{
|
||||
TheISA::VecPredRegContainer val;
|
||||
getRegFlat(RegId(VecPredRegClass, idx), &val);
|
||||
return val;
|
||||
}
|
||||
TheISA::VecPredRegContainer&
|
||||
getWritableVecPredRegFlat(RegIndex idx)
|
||||
{
|
||||
return *(TheISA::VecPredRegContainer *)getWritableRegFlat(
|
||||
RegId(VecPredRegClass, idx));
|
||||
}
|
||||
void
|
||||
setVecPredRegFlat(RegIndex idx, const TheISA::VecPredRegContainer& val)
|
||||
{
|
||||
setRegFlat(RegId(VecPredRegClass, idx), &val);
|
||||
}
|
||||
|
||||
virtual RegVal readCCRegFlat(RegIndex idx) const = 0;
|
||||
virtual void setCCRegFlat(RegIndex idx, RegVal val) = 0;
|
||||
RegVal
|
||||
readCCRegFlat(RegIndex idx) const
|
||||
{
|
||||
return getRegFlat(RegId(CCRegClass, idx));
|
||||
}
|
||||
void
|
||||
setCCRegFlat(RegIndex idx, RegVal val)
|
||||
{
|
||||
setRegFlat(RegId(CCRegClass, idx), val);
|
||||
}
|
||||
/** @} */
|
||||
|
||||
// hardware transactional memory
|
||||
|
||||
Reference in New Issue
Block a user