Clear misc regs at startup.
authorKevin Lim <ktlim@umich.edu>
Wed, 7 Jun 2006 18:46:18 +0000 (14:46 -0400)
committerKevin Lim <ktlim@umich.edu>
Wed, 7 Jun 2006 18:46:18 +0000 (14:46 -0400)
src/arch/alpha/regfile.hh:
    Define clear functions on the individual reg files.
src/cpu/o3/regfile.hh:
    Be sure to clear the misc reg file at startup.

--HG--
extra : convert_revision : 41e640887f0cf15d778c59a4dcd544d46899b527

src/arch/alpha/regfile.hh
src/cpu/o3/regfile.hh

index ed410fddb1e2f142e3c7909d803cd8a1bf1c49bb..1025412cd35ce45599ea2e6c2d41fa2284297f45 100644 (file)
@@ -62,6 +62,8 @@ namespace AlphaISA
 
         void unserialize(Checkpoint *cp, const std::string &section);
 
+        void clear()
+        { bzero(regs, sizeof(regs)); }
     };
 
     class FloatRegFile
@@ -77,6 +79,8 @@ namespace AlphaISA
 
         void unserialize(Checkpoint *cp, const std::string &section);
 
+        void clear()
+        { bzero(d, sizeof(d)); }
     };
 
     class MiscRegFile {
@@ -102,6 +106,12 @@ namespace AlphaISA
         Fault setRegWithEffect(int misc_reg, const MiscReg &val,
                 ThreadContext *tc);
 
+        void clear()
+        {
+            fpcr = uniq = 0;
+            lock_flag = 0;
+            lock_addr = 0;
+        }
 #if FULL_SYSTEM
       protected:
         typedef uint64_t InternalProcReg;
@@ -171,9 +181,9 @@ namespace AlphaISA
 
         void clear()
         {
-            bzero(&intRegFile, sizeof(intRegFile));
-            bzero(&floatRegFile, sizeof(floatRegFile));
-            bzero(&miscRegFile, sizeof(miscRegFile));
+            intRegFile.clear();
+            floatRegFile.clear();
+            miscRegFile.clear();
         }
 
         MiscReg readMiscReg(int miscReg)
index ee95b9ab8ff6b19f18a8edd4dcd373d8c603cd3d..a142b71027801fd6779694e93d988249bd0bed49 100644 (file)
@@ -299,6 +299,10 @@ PhysRegFile<Impl>::PhysRegFile(unsigned _numPhysicalIntRegs,
     intRegFile.resize(numPhysicalIntRegs);
     floatRegFile.resize(numPhysicalFloatRegs);
 
+    for (int i = 0; i < Impl::MaxThreads; ++i) {
+        miscRegs[i].clear();
+    }
+
     //memset(intRegFile, 0, sizeof(*intRegFile));
     //memset(floatRegFile, 0, sizeof(*floatRegFile));
 }