0xA: rdpgpr({{
if(Config_AR >= 1)
{ // Rev 2 of the architecture
- Rd = xc->tcBase()->readIntReg(RT + NumIntRegs * SRSCtl_PSS);
+ panic("Shadow Sets Not Fully Implemented.\n");
+ //Rd = xc->tcBase()->readIntReg(RT + NumIntRegs * SRSCtl_PSS);
}
else
{
0xE: wrpgpr({{
if(Config_AR >= 1)
{ // Rev 2 of the architecture
- xc->tcBase()->setIntReg(RD + NumIntRegs * SRSCtl_PSS,Rt);
+ panic("Shadow Sets Not Fully Implemented.\n");
+ //xc->tcBase()->setIntReg(RD + NumIntRegs * SRSCtl_PSS,Rt);
// warn("Writing %d to %d, PSS: %d, SRS: %x\n",Rt,RD + NumIntRegs * SRSCtl_PSS, SRSCtl_PSS,SRSCtl);
}
else
const int NumIntRegs = NumIntArchRegs*NumShadowRegSets + NumIntSpecialRegs; //HI & LO Regs
const int NumFloatRegs = NumFloatArchRegs + NumFloatSpecialRegs;//
+ const int TotalArchRegs = NumIntArchRegs * NumShadowRegSets;
+
// Static instruction parameters
const int MaxInstSrcRegs = 10;
const int MaxInstDestRegs = 8;
currShadowSet=0;
}
+int
+IntRegFile::readShadowSet()
+{
+ return currShadowSet;
+}
+
void
IntRegFile::setShadowSet(int css)
{
IntReg
IntRegFile::readReg(int intReg)
{
- if (intReg < NumIntRegs) {
+ if (intReg < NumIntArchRegs) {
// Regular GPR Read
DPRINTF(MipsPRA, "Reading Reg: %d, CurrShadowSet: %d\n", intReg,
- currShadowSet);
+ currShadowSet);
- if (intReg >= NumIntArchRegs * NumShadowRegSets) {
- return regs[intReg + NumIntRegs * currShadowSet];
- } else {
- int index = intReg + NumIntArchRegs * currShadowSet;
- index = index % NumIntArchRegs;
- return regs[index];
- }
+ return regs[intReg + NumIntArchRegs * currShadowSet];
} else {
- // Read from shadow GPR .. probably called by RDPGPR
- return regs[intReg];
+ unsigned special_reg_num = intReg - NumIntArchRegs;
+
+ // Read A Special Reg
+ return regs[TotalArchRegs + special_reg_num];
}
}
IntRegFile::setReg(int intReg, const IntReg &val)
{
if (intReg != ZeroReg) {
- if (intReg < NumIntRegs) {
- if (intReg >= NumIntArchRegs * NumShadowRegSets)
- regs[intReg] = val;
- else
- regs[intReg + NumIntRegs * currShadowSet] = val;
+ if (intReg < NumIntArchRegs) {
+ regs[intReg + NumIntArchRegs * currShadowSet] = val;
} else {
- regs[intReg] = val;
+ unsigned special_reg_num = intReg - NumIntArchRegs;
+
+ regs[TotalArchRegs + special_reg_num] = val;
}
}
}
enum MiscIntRegNums {
- LO = NumIntArchRegs*NumShadowRegSets,
+ LO = NumIntArchRegs,
HI,
DSPACX0,
DSPLo1,
int currShadowSet;
public:
void clear();
+ int readShadowSet();
void setShadowSet(int css);
IntReg readReg(int intReg);
Fault setReg(int intReg, const IntReg &val);