// Locked read/write flags are can't be detected by the ISA parser
const int MaxMiscDestRegs = AlphaISAInst::MaxMiscDestRegs + 1;
-// dummy typedef since we don't have CC regs
-typedef uint8_t CCReg;
-
// Not applicable to Alpha
using VecElem = ::DummyVecElem;
using VecReg = ::DummyVecReg;
constexpr size_t VecPredRegSizeBits = ::DummyVecPredRegSizeBits;
constexpr bool VecPredRegHasPackedRepr = ::DummyVecPredRegHasPackedRepr;
-// condition code register; must be at least 32 bits for FpCondCodes
-typedef uint64_t CCReg;
-
// Constants Related to the number of registers
const int NumIntArchRegs = NUM_ARCH_INTREGS;
// The number of single precision floating point registers
const int TotalNumRegs = NumIntRegs + NumFloatRegs + NumMiscRegs;
-// dummy typedef since we don't have CC regs
-typedef uint8_t CCReg;
-
// Not applicable to MIPS
using VecElem = ::DummyVecElem;
using VecReg = ::DummyVecReg;
namespace NullISA {
-typedef uint8_t CCReg;
const RegIndex ZeroReg = 0;
// Not applicable to null
// be detected by it. Manually add it here.
const int MaxMiscDestRegs = PowerISAInst::MaxMiscDestRegs + 1;
-// dummy typedef since we don't have CC regs
-typedef uint8_t CCReg;
-
// Not applicable to Power
using VecElem = ::DummyVecElem;
using VecReg = ::DummyVecReg;
using RiscvISAInst::MaxInstDestRegs;
const int MaxMiscDestRegs = 1;
-typedef uint8_t CCReg; // Not applicable to Riscv
-
// Not applicable to RISC-V
using VecElem = ::DummyVecElem;
using VecReg = ::DummyVecReg;
using SparcISAInst::MaxInstDestRegs;
using SparcISAInst::MaxMiscDestRegs;
-// dummy typedef since we don't have CC regs
-typedef uint8_t CCReg;
-
// Not applicable to SPARC
using VecElem = ::DummyVecElem;
using VecReg = ::DummyVecReg;
// value
const int SyscallPseudoReturnReg = INTREG_RDX;
-typedef uint64_t CCReg;
-
// Not applicable to x86
using VecElem = ::DummyVecElem;
using VecReg = ::DummyVecReg;
}
/** Records a CC register being set to a value. */
- void setCCRegOperand(const StaticInst *si, int idx, CCReg val)
+ void setCCRegOperand(const StaticInst *si, int idx, RegVal val)
{
setScalarResult(val);
}
return thread->getWritableVecPredReg(reg);
}
- CCReg
+ RegVal
readCCRegOperand(const StaticInst *si, int idx) override
{
const RegId& reg = si->srcRegIdx(idx);
}
void
- setCCRegOperand(const StaticInst *si, int idx, CCReg val) override
+ setCCRegOperand(const StaticInst *si, int idx, RegVal val) override
{
const RegId& reg = si->destRegIdx(idx);
assert(reg.isCCReg());
VecPredRegContainer& getWritableVecPredReg(const RegId& reg) override
{ return actualTC->getWritableVecPredReg(reg); }
- CCReg readCCReg(int reg_idx)
+ RegVal readCCReg(int reg_idx)
{ return actualTC->readCCReg(reg_idx); }
void
}
void
- setCCReg(int reg_idx, CCReg val)
+ setCCReg(int reg_idx, RegVal val)
{
actualTC->setCCReg(reg_idx, val);
checkerTC->setCCReg(reg_idx, val);
void setVecPredRegFlat(int idx, const VecPredRegContainer& val) override
{ actualTC->setVecPredRegFlat(idx, val); }
- CCReg readCCRegFlat(int idx)
+ RegVal readCCRegFlat(int idx)
{ return actualTC->readCCRegFlat(idx); }
- void setCCRegFlat(int idx, CCReg val)
+ void setCCRegFlat(int idx, RegVal val)
{ actualTC->setCCRegFlat(idx, val); }
};
public:
typedef TheISA::PCState PCState;
- typedef TheISA::CCReg CCReg;
using VecRegContainer = TheISA::VecRegContainer;
using VecElem = TheISA::VecElem;
using VecPredRegContainer = TheISA::VecPredRegContainer;
* @{
* @name Condition Code Registers
*/
- virtual CCReg readCCRegOperand(const StaticInst *si, int idx) = 0;
- virtual void setCCRegOperand(const StaticInst *si, int idx, CCReg val) = 0;
+ virtual RegVal readCCRegOperand(const StaticInst *si, int idx) = 0;
+ virtual void setCCRegOperand(
+ const StaticInst *si, int idx, RegVal val) = 0;
/** @} */
/**
thread.getDTBPtr()->demapPage(vaddr, asn);
}
- TheISA::CCReg
+ RegVal
readCCRegOperand(const StaticInst *si, int idx) override
{
const RegId& reg = si->srcRegIdx(idx);
}
void
- setCCRegOperand(const StaticInst *si, int idx, TheISA::CCReg val) override
+ setCCRegOperand(const StaticInst *si, int idx, RegVal val) override
{
const RegId& reg = si->destRegIdx(idx);
assert(reg.isCCReg());
}
template <class Impl>
-CCReg
+RegVal
FullO3CPU<Impl>::readCCReg(PhysRegIdPtr phys_reg)
{
ccRegfileReads++;
template <class Impl>
void
-FullO3CPU<Impl>::setCCReg(PhysRegIdPtr phys_reg, CCReg val)
+FullO3CPU<Impl>::setCCReg(PhysRegIdPtr phys_reg, RegVal val)
{
ccRegfileWrites++;
regFile.setCCReg(phys_reg, val);
}
template <class Impl>
-CCReg
+RegVal
FullO3CPU<Impl>::readArchCCReg(int reg_idx, ThreadID tid)
{
ccRegfileReads++;
template <class Impl>
void
-FullO3CPU<Impl>::setArchCCReg(int reg_idx, CCReg val, ThreadID tid)
+FullO3CPU<Impl>::setArchCCReg(int reg_idx, RegVal val, ThreadID tid)
{
ccRegfileWrites++;
PhysRegIdPtr phys_reg = commitRenameMap[tid].lookup(
VecPredRegContainer& getWritableVecPredReg(PhysRegIdPtr reg_idx);
- TheISA::CCReg readCCReg(PhysRegIdPtr phys_reg);
+ RegVal readCCReg(PhysRegIdPtr phys_reg);
void setIntReg(PhysRegIdPtr phys_reg, RegVal val);
void setVecPredReg(PhysRegIdPtr reg_idx, const VecPredRegContainer& val);
- void setCCReg(PhysRegIdPtr phys_reg, TheISA::CCReg val);
+ void setCCReg(PhysRegIdPtr phys_reg, RegVal val);
RegVal readArchIntReg(int reg_idx, ThreadID tid);
VecPredRegContainer& getWritableArchVecPredReg(int reg_idx, ThreadID tid);
- TheISA::CCReg readArchCCReg(int reg_idx, ThreadID tid);
+ RegVal readArchCCReg(int reg_idx, ThreadID tid);
/** Architectural register accessors. Looks up in the commit
* rename table to obtain the true physical index of the
void setArchVecElem(const RegIndex& reg_idx, const ElemIndex& ldx,
const VecElem& val, ThreadID tid);
- void setArchCCReg(int reg_idx, TheISA::CCReg val, ThreadID tid);
+ void setArchCCReg(int reg_idx, RegVal val, ThreadID tid);
/** Sets the commit PC state of a specific thread. */
void pcState(const TheISA::PCState &newPCState, ThreadID tid);
/** Binary machine instruction type. */
typedef TheISA::MachInst MachInst;
/** Register types. */
- typedef TheISA::CCReg CCReg;
using VecRegContainer = TheISA::VecRegContainer;
using VecElem = TheISA::VecElem;
static constexpr auto NumVecElemPerVecReg = TheISA::NumVecElemPerVecReg;
return this->cpu->getWritableVecPredReg(this->_destRegIdx[idx]);
}
- CCReg readCCRegOperand(const StaticInst *si, int idx)
+ RegVal
+ readCCRegOperand(const StaticInst *si, int idx)
{
return this->cpu->readCCReg(this->_srcRegIdx[idx]);
}
BaseDynInst<Impl>::setVecPredRegOperand(si, idx, val);
}
- void setCCRegOperand(const StaticInst *si, int idx, CCReg val)
+ void setCCRegOperand(const StaticInst *si, int idx, RegVal val)
{
this->cpu->setCCReg(this->_destRegIdx[idx], val);
BaseDynInst<Impl>::setCCRegOperand(si, idx, val);
{
private:
- typedef TheISA::CCReg CCReg;
using VecElem = TheISA::VecElem;
using VecRegContainer = TheISA::VecRegContainer;
using PhysIds = std::vector<PhysRegId>;
std::vector<PhysRegId> vecPredRegIds;
/** Condition-code register file. */
- std::vector<CCReg> ccRegFile;
+ std::vector<RegVal> ccRegFile;
std::vector<PhysRegId> ccRegIds;
/** Misc Reg Ids */
}
/** Reads a condition-code register. */
- CCReg
+ RegVal
readCCReg(PhysRegIdPtr phys_reg)
{
assert(phys_reg->isCCPhysReg());
/** Sets a condition-code register to the given value. */
void
- setCCReg(PhysRegIdPtr phys_reg, CCReg val)
+ setCCReg(PhysRegIdPtr phys_reg, RegVal val)
{
assert(phys_reg->isCCPhysReg());
return getWritableVecPredRegFlat(flattenRegId(id).index());
}
- virtual CCReg readCCReg(int reg_idx) {
+ virtual RegVal
+ readCCReg(int reg_idx)
+ {
return readCCRegFlat(flattenRegId(RegId(CCRegClass,
reg_idx)).index());
}
}
virtual void
- setCCReg(int reg_idx, CCReg val)
+ setCCReg(int reg_idx, RegVal val)
{
setCCRegFlat(flattenRegId(RegId(CCRegClass, reg_idx)).index(), val);
}
virtual void setVecPredRegFlat(int idx,
const VecPredRegContainer& val) override;
- virtual CCReg readCCRegFlat(int idx);
- virtual void setCCRegFlat(int idx, CCReg val);
+ virtual RegVal readCCRegFlat(int idx);
+ virtual void setCCRegFlat(int idx, RegVal val);
};
#endif
}
template <class Impl>
-TheISA::CCReg
+RegVal
O3ThreadContext<Impl>::readCCRegFlat(int reg_idx)
{
return cpu->readArchCCReg(reg_idx, thread->threadId());
template <class Impl>
void
-O3ThreadContext<Impl>::setCCRegFlat(int reg_idx, TheISA::CCReg val)
+O3ThreadContext<Impl>::setCCRegFlat(int reg_idx, RegVal val)
{
cpu->setArchCCReg(reg_idx, val, thread->threadId());
class SimpleExecContext : public ExecContext {
protected:
- typedef TheISA::CCReg CCReg;
using VecRegContainer = TheISA::VecRegContainer;
using VecElem = TheISA::VecElem;
thread->setVecPredReg(reg, val);
}
- CCReg
+ RegVal
readCCRegOperand(const StaticInst *si, int idx) override
{
numCCRegReads++;
}
void
- setCCRegOperand(const StaticInst *si, int idx, CCReg val) override
+ setCCRegOperand(const StaticInst *si, int idx, RegVal val) override
{
numCCRegWrites++;
const RegId& reg = si->destRegIdx(idx);
{
protected:
typedef TheISA::MachInst MachInst;
- typedef TheISA::CCReg CCReg;
using VecRegContainer = TheISA::VecRegContainer;
using VecElem = TheISA::VecElem;
using VecPredRegContainer = TheISA::VecPredRegContainer;
VecRegContainer vecRegs[TheISA::NumVecRegs];
VecPredRegContainer vecPredRegs[TheISA::NumVecPredRegs];
#ifdef ISA_HAS_CC_REGS
- TheISA::CCReg ccRegs[TheISA::NumCCRegs];
+ RegVal ccRegs[TheISA::NumCCRegs];
#endif
TheISA::ISA *const isa; // one "instance" of the current ISA.
return regVal;
}
- CCReg readCCReg(int reg_idx)
+ RegVal
+ readCCReg(int reg_idx)
{
#ifdef ISA_HAS_CC_REGS
int flatIndex = isa->flattenCCIndex(reg_idx);
}
void
- setCCReg(int reg_idx, CCReg val)
+ setCCReg(int reg_idx, RegVal val)
{
#ifdef ISA_HAS_CC_REGS
int flatIndex = isa->flattenCCIndex(reg_idx);
}
#ifdef ISA_HAS_CC_REGS
- CCReg readCCRegFlat(int idx) { return ccRegs[idx]; }
- void setCCRegFlat(int idx, CCReg val) { ccRegs[idx] = val; }
+ RegVal readCCRegFlat(int idx) { return ccRegs[idx]; }
+ void setCCRegFlat(int idx, RegVal val) { ccRegs[idx] = val; }
#else
- CCReg readCCRegFlat(int idx)
+ RegVal readCCRegFlat(int idx)
{ panic("readCCRegFlat w/no CC regs!\n"); }
- void setCCRegFlat(int idx, CCReg val)
+ void setCCRegFlat(int idx, RegVal val)
{ panic("setCCRegFlat w/no CC regs!\n"); }
#endif
};
// loop through the Condition Code registers.
for (int i = 0; i < TheISA::NumCCRegs; ++i) {
- TheISA::CCReg t1 = one->readCCReg(i);
- TheISA::CCReg t2 = two->readCCReg(i);
+ RegVal t1 = one->readCCReg(i);
+ RegVal t2 = two->readCCReg(i);
if (t1 != t2)
panic("CC reg idx %d doesn't match, one: %#x, two: %#x",
i, t1, t2);
SERIALIZE_ARRAY(intRegs, NumIntRegs);
#ifdef ISA_HAS_CC_REGS
- CCReg ccRegs[NumCCRegs];
+ RegVal ccRegs[NumCCRegs];
for (int i = 0; i < NumCCRegs; ++i)
ccRegs[i] = tc.readCCRegFlat(i);
SERIALIZE_ARRAY(ccRegs, NumCCRegs);
tc.setIntRegFlat(i, intRegs[i]);
#ifdef ISA_HAS_CC_REGS
- CCReg ccRegs[NumCCRegs];
+ RegVal ccRegs[NumCCRegs];
UNSERIALIZE_ARRAY(ccRegs, NumCCRegs);
for (int i = 0; i < NumCCRegs; ++i)
tc.setCCRegFlat(i, ccRegs[i]);
{
protected:
typedef TheISA::MachInst MachInst;
- typedef TheISA::CCReg CCReg;
using VecRegContainer = TheISA::VecRegContainer;
using VecElem = TheISA::VecElem;
using VecPredRegContainer = TheISA::VecPredRegContainer;
const = 0;
virtual VecPredRegContainer& getWritableVecPredReg(const RegId& reg) = 0;
- virtual CCReg readCCReg(int reg_idx) = 0;
+ virtual RegVal readCCReg(int reg_idx) = 0;
virtual void setIntReg(int reg_idx, RegVal val) = 0;
virtual void setVecPredReg(const RegId& reg,
const VecPredRegContainer& val) = 0;
- virtual void setCCReg(int reg_idx, CCReg val) = 0;
+ virtual void setCCReg(int reg_idx, RegVal val) = 0;
virtual TheISA::PCState pcState() = 0;
virtual void setVecPredRegFlat(int idx,
const VecPredRegContainer& val) = 0;
- virtual CCReg readCCRegFlat(int idx) = 0;
- virtual void setCCRegFlat(int idx, CCReg val) = 0;
+ virtual RegVal readCCRegFlat(int idx) = 0;
+ virtual void setCCRegFlat(int idx, RegVal val) = 0;
/** @} */
};
VecPredRegContainer& getWritableVecPredReg(const RegId& reg)
{ return actualTC->getWritableVecPredReg(reg); }
- CCReg readCCReg(int reg_idx)
+ RegVal readCCReg(int reg_idx)
{ return actualTC->readCCReg(reg_idx); }
void setIntReg(int reg_idx, RegVal val)
void setVecElem(const RegId& reg, const VecElem& val)
{ actualTC->setVecElem(reg, val); }
- void setCCReg(int reg_idx, CCReg val)
+ void setCCReg(int reg_idx, RegVal val)
{ actualTC->setCCReg(reg_idx, val); }
TheISA::PCState pcState() { return actualTC->pcState(); }
void setVecPredRegFlat(int idx, const VecPredRegContainer& val)
{ actualTC->setVecPredRegFlat(idx, val); }
- CCReg readCCRegFlat(int idx)
+ RegVal readCCRegFlat(int idx)
{ return actualTC->readCCRegFlat(idx); }
- void setCCRegFlat(int idx, CCReg val)
+ void setCCRegFlat(int idx, RegVal val)
{ actualTC->setCCRegFlat(idx, val); }
};