Fixes to get MIPS_SE to compile.
[gem5.git] / src / cpu / o3 / thread_context_impl.hh
index 8d623f5b8fb2335d4876b2cefe8f9f8fea55e1a5..af98fa1f570382eff7cdf8642679b6167db9bea4 100755 (executable)
@@ -29,6 +29,7 @@
  *          Korey Sewell
  */
 
+#include "arch/regfile.hh"
 #include "cpu/o3/thread_context.hh"
 #include "cpu/quiesce_event.hh"
 
@@ -41,12 +42,9 @@ O3ThreadContext<Impl>::getVirtPort(ThreadContext *src_tc)
         return thread->getVirtPort();
 
     VirtualPort *vp;
-    Port *mem_port;
 
     vp = new VirtualPort("tc-vport", src_tc);
-    mem_port = cpu->system->physmem->getPort("functional");
-    mem_port->setPeer(vp);
-    vp->setPeer(mem_port);
+    thread->connectToMemFunc(vp);
     return vp;
 }
 
@@ -104,8 +102,10 @@ template <class Impl>
 void
 O3ThreadContext<Impl>::delVirtPort(VirtualPort *vp)
 {
-    delete vp->getPeer();
-    delete vp;
+    if (vp != thread->getVirtPort()) {
+        delete vp->getPeer();
+        delete vp;
+    }
 }
 #endif
 
@@ -306,6 +306,7 @@ template <class Impl>
 uint64_t
 O3ThreadContext<Impl>::readIntReg(int reg_idx)
 {
+    reg_idx = TheISA::flattenIntIndex(this, reg_idx);
     return cpu->readArchIntReg(reg_idx, thread->readTid());
 }
 
@@ -350,6 +351,7 @@ template <class Impl>
 void
 O3ThreadContext<Impl>::setIntReg(int reg_idx, uint64_t val)
 {
+    reg_idx = TheISA::flattenIntIndex(this, reg_idx);
     cpu->setArchIntReg(reg_idx, val, thread->readTid());
 
     // Squash if we're not already in a state update mode.