Have a copyRegs function defined in the ISA that copies registers from one ExecContex...
authorKevin Lim <ktlim@umich.edu>
Mon, 13 Mar 2006 22:04:24 +0000 (17:04 -0500)
committerKevin Lim <ktlim@umich.edu>
Mon, 13 Mar 2006 22:04:24 +0000 (17:04 -0500)
arch/alpha/ev5.cc:
    copyIprs now copies from a source ExecContext to a destination ExecContext.
arch/alpha/registerfile.hh:
    Have ISA specific functions to copy all architected registers from one ExecContext to another.
cpu/cpu_exec_context.cc:
    Call the ISA in order to copy any architected registers.

--HG--
extra : convert_revision : 056cc3b3a9f345535d5a57c6524b114bbd5ae3c8

arch/alpha/ev5.cc
arch/alpha/registerfile.hh
cpu/cpu_exec_context.cc

index 019e83dd43035aa0d2987f2b6483ff6545f6153e..6d45edbff55b4a2d9df48dd1c6d87259aa33029a 100644 (file)
@@ -542,10 +542,10 @@ AlphaISA::MiscRegFile::setIpr(int idx, uint64_t val, ExecContext *xc)
 }
 
 void
-AlphaISA::MiscRegFile::copyIprs(ExecContext *xc)
+AlphaISA::copyIprs(ExecContext *src, ExecContext *dest)
 {
     for (int i = IPR_Base_DepTag; i < NumInternalProcRegs; ++i) {
-        ipr[i] = xc->readMiscReg(i);
+        dest->setMiscReg(i, src->readMiscReg(i));
     }
 }
 
index c2fb56ec19d7949f004ff1bfb2c1ceb61b433ae6..6bdab78f5a34f609b362d94496cc6574b1c1f04c 100644 (file)
@@ -34,6 +34,7 @@
 #include "sim/faults.hh"
 
 class Checkpoint;
+class ExecContext;
 
 namespace AlphaISA
 {
@@ -67,8 +68,6 @@ namespace AlphaISA
         Fault setRegWithEffect(int misc_reg, const MiscReg &val,
                                ExecContext *xc);
 
-        void copyMiscRegs(ExecContext *xc);
-
 #if FULL_SYSTEM
       protected:
         typedef uint64_t InternalProcReg;
@@ -79,8 +78,6 @@ namespace AlphaISA
         InternalProcReg readIpr(int idx, Fault &fault, ExecContext *xc);
 
         Fault setIpr(int idx, InternalProcReg val, ExecContext *xc);
-
-        void copyIprs(ExecContext *xc);
 #endif
         friend class RegFile;
     };
@@ -105,6 +102,13 @@ namespace AlphaISA
         void unserialize(Checkpoint *cp, const std::string &section);
     };
 
+    void copyRegs(ExecContext *src, ExecContext *dest);
+
+    void copyMiscRegs(ExecContext *src, ExecContext *dest);
+
+#if FULL_SYSTEM
+    void copyIprs(ExecContext *src, ExecContext *dest);
+#endif
 } // namespace AlphaISA
 
 #endif
index 2ad9571ce77d01e8151cbf320518883b4e6bbc06..0a3dc56758a0036144fc2477e5b7cef067dbe01e 100644 (file)
@@ -28,6 +28,7 @@
 
 #include <string>
 
+#include "arch/isa_traits.hh"
 #include "cpu/base.hh"
 #include "cpu/cpu_exec_context.hh"
 #include "cpu/exec_context.hh"
@@ -269,23 +270,6 @@ CPUExecContext::regStats(const string &name)
 void
 CPUExecContext::copyArchRegs(ExecContext *xc)
 {
-    // First loop through the integer registers.
-    for (int i = 0; i < TheISA::NumIntRegs; ++i) {
-        setIntReg(i, xc->readIntReg(i));
-    }
-
-    // Then loop through the floating point registers.
-    for (int i = 0; i < TheISA::NumFloatRegs; ++i) {
-        setFloatRegDouble(i, xc->readFloatRegDouble(i));
-        setFloatRegInt(i, xc->readFloatRegInt(i));
-    }
-
-    // Copy misc. registers
-    regs.miscRegs.copyMiscRegs(xc);
-
-    // Lastly copy PC/NPC
-    setPC(xc->readPC());
-    setNextPC(xc->readNextPC());
-    setNextNPC(xc->readNextNPC());
+    TheISA::copyRegs(xc, proxy);
 }