diff -r 9b3cfab6f42e src/arch/mips/isa/decoder.isa
--- a/src/arch/mips/isa/decoder.isa	Sun Sep 28 14:16:26 2008 -0700
+++ b/src/arch/mips/isa/decoder.isa	Fri Oct 03 00:10:33 2008 -0400
@@ -603,7 +603,8 @@ decode OPCODE_HI default Unknown::unknow
                     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
                         {
@@ -613,7 +614,8 @@ decode OPCODE_HI default Unknown::unknow
                     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
diff -r 9b3cfab6f42e src/arch/mips/isa_traits.hh
--- a/src/arch/mips/isa_traits.hh	Sun Sep 28 14:16:26 2008 -0700
+++ b/src/arch/mips/isa_traits.hh	Fri Oct 03 00:10:33 2008 -0400
@@ -181,6 +181,8 @@ namespace MipsISA
     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;
diff -r 9b3cfab6f42e src/arch/mips/regfile/int_regfile.cc
--- a/src/arch/mips/regfile/int_regfile.cc	Sun Sep 28 14:16:26 2008 -0700
+++ b/src/arch/mips/regfile/int_regfile.cc	Fri Oct 03 00:10:33 2008 -0400
@@ -44,6 +44,12 @@ IntRegFile::clear()
     currShadowSet=0;
 }
 
+int 
+IntRegFile::readShadowSet()
+{
+  return currShadowSet;
+}
+
 void
 IntRegFile::setShadowSet(int css)
 {
@@ -54,21 +60,17 @@ IntReg
 IntReg
 IntRegFile::readReg(int intReg)
 {
-    if (intReg < NumIntRegs) {
-        // Regular GPR Read
-        DPRINTF(MipsPRA, "Reading Reg: %d, CurrShadowSet: %d\n", intReg,
-                currShadowSet);
+    if (intReg < NumIntArchRegs) {
+      // Regular GPR Read
+      DPRINTF(MipsPRA, "Reading Reg: %d, CurrShadowSet: %d\n", intReg,
+	      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];
     }
 }
 
@@ -76,13 +78,12 @@ IntRegFile::setReg(int intReg, const Int
 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;
         }
     }
 
diff -r 9b3cfab6f42e src/arch/mips/regfile/int_regfile.hh
--- a/src/arch/mips/regfile/int_regfile.hh	Sun Sep 28 14:16:26 2008 -0700
+++ b/src/arch/mips/regfile/int_regfile.hh	Fri Oct 03 00:10:33 2008 -0400
@@ -48,7 +48,7 @@ namespace MipsISA
     }
 
     enum MiscIntRegNums {
-       LO = NumIntArchRegs*NumShadowRegSets,
+       LO = NumIntArchRegs,
        HI,
        DSPACX0,
        DSPLo1,
@@ -72,6 +72,7 @@ namespace MipsISA
         int currShadowSet;
       public:
         void clear();
+        int readShadowSet();
         void setShadowSet(int css);
         IntReg readReg(int intReg);
         Fault setReg(int intReg, const IntReg &val);
diff -r 9b3cfab6f42e src/arch/mips/regfile/misc_regfile.cc
--- a/src/arch/mips/regfile/misc_regfile.cc	Sun Sep 28 14:16:26 2008 -0700
+++ b/src/arch/mips/regfile/misc_regfile.cc	Fri Oct 03 00:10:33 2008 -0400
@@ -40,7 +40,7 @@
 #include "cpu/base.hh"
 #include "cpu/exetrace.hh"
 
-#include "params/DerivO3CPU.hh"
+//#include "params/DerivO3CPU.hh"
 
 using namespace std;
 
