From 47b2aa634627a93b125af1f07c6e5c249360b0d1 Mon Sep 17 00:00:00 2001
From: Gabe Black <gblack@eecs.umich.edu>
Date: Fri, 26 Jan 2007 16:38:29 -0500
Subject: Fixed the number of integer registers. There are MaxGL+1 sets of
 globals, not just MaxGL.

--HG--
extra : convert_revision : 6fd090f112611db1e72a1f129dff03687d52930a
---
 src/arch/sparc/intregfile.hh |  2 +-
 src/arch/sparc/regfile.cc    | 10 ++++++----
 2 files changed, 7 insertions(+), 5 deletions(-)

(limited to 'src')

diff --git a/src/arch/sparc/intregfile.hh b/src/arch/sparc/intregfile.hh
index 716d45a65..665c7aa31 100644
--- a/src/arch/sparc/intregfile.hh
+++ b/src/arch/sparc/intregfile.hh
@@ -48,7 +48,7 @@ namespace SparcISA
     std::string getIntRegName(RegIndex);
 
     const int NumIntArchRegs = 32;
-    const int NumIntRegs = MaxGL * 8 + NWindows * 16 + NumMicroIntRegs;
+    const int NumIntRegs = (MaxGL + 1) * 8 + NWindows * 16 + NumMicroIntRegs;
 
     class IntRegFile
     {
diff --git a/src/arch/sparc/regfile.cc b/src/arch/sparc/regfile.cc
index 4be411d17..d39892e73 100644
--- a/src/arch/sparc/regfile.cc
+++ b/src/arch/sparc/regfile.cc
@@ -157,6 +157,8 @@ int SparcISA::flattenIntIndex(ThreadContext * tc, int reg)
     int cwp = tc->readMiscReg(MISCREG_CWP);
     //DPRINTF(Sparc, "Global Level = %d, Current Window Pointer = %d\n", gl, cwp);
     int newReg;
+    //The total number of global registers
+    int numGlobals = (MaxGL + 1) * 8;
     if(reg < 8)
     {
         //Global register
@@ -167,14 +169,14 @@ int SparcISA::flattenIntIndex(ThreadContext * tc, int reg)
     {
         //Regular windowed register
         //Put it in the window pointed to by cwp
-        newReg = MaxGL * 8 +
+        newReg = numGlobals +
             ((reg - 8 - cwp * 16 + NWindows * 16) % (NWindows * 16));
     }
     else if(reg < NumIntArchRegs + NumMicroIntRegs)
     {
         //Microcode register
         //Displace from the end of the regular registers
-        newReg = reg - NumIntArchRegs + MaxGL * 8 + NWindows * 16;
+        newReg = reg - NumIntArchRegs + numGlobals + NWindows * 16;
     }
     else if(reg < 2 * NumIntArchRegs + NumMicroIntRegs)
     {
@@ -189,7 +191,7 @@ int SparcISA::flattenIntIndex(ThreadContext * tc, int reg)
         {
             //Windowed register from the previous window
             //Put it in the window before the one pointed to by cwp
-            newReg = MaxGL * 8 +
+            newReg = numGlobals +
                 ((reg - 8 - (cwp - 1) * 16 + NWindows * 16) % (NWindows * 16));
         }
     }
@@ -206,7 +208,7 @@ int SparcISA::flattenIntIndex(ThreadContext * tc, int reg)
         {
             //Windowed register from the next window
             //Put it in the window after the one pointed to by cwp
-            newReg = MaxGL * 8 +
+            newReg = numGlobals +
                 ((reg - 8 - (cwp + 1) * 16 + NWindows * 16) % (NWindows * 16));
         }
     }
-- 
cgit v1.2.3