summaryrefslogtreecommitdiff
path: root/src/cpu/o3
diff options
context:
space:
mode:
authorGabe Black <gblack@eecs.umich.edu>2010-10-04 11:58:06 -0700
committerGabe Black <gblack@eecs.umich.edu>2010-10-04 11:58:06 -0700
commitd4492190e6bbf709724af28d262b0a681c975ec0 (patch)
treec4054f74080fd09f440ee3b58b7c43860e2dfab2 /src/cpu/o3
parent538acf2082df45da7fcb297e3805eeacdc9cd293 (diff)
downloadgem5-d4492190e6bbf709724af28d262b0a681c975ec0.tar.xz
Alpha: Fix Alpha NumMiscArchRegs constant.
Also add asserts in O3's Scoreboard class to catch bad indexes.
Diffstat (limited to 'src/cpu/o3')
-rw-r--r--src/cpu/o3/scoreboard.cc8
-rw-r--r--src/cpu/o3/scoreboard.hh15
2 files changed, 22 insertions, 1 deletions
diff --git a/src/cpu/o3/scoreboard.cc b/src/cpu/o3/scoreboard.cc
index ae1e13717..7fb47f3c7 100644
--- a/src/cpu/o3/scoreboard.cc
+++ b/src/cpu/o3/scoreboard.cc
@@ -51,22 +51,25 @@ Scoreboard::Scoreboard(unsigned activeThreads,
numPhysicalRegs = numPhysicalIntRegs + numPhysicalFloatRegs;
//Resize scoreboard appropriately
- regScoreBoard.resize(numPhysicalRegs + (numMiscRegs * activeThreads));
+ resize(numPhysicalRegs + (numMiscRegs * activeThreads));
//Initialize values
for (int i=0; i < numLogicalIntRegs * activeThreads; i++) {
+ assert(indexInBounds(i));
regScoreBoard[i] = 1;
}
for (int i= numPhysicalIntRegs;
i < numPhysicalIntRegs + (numLogicalFloatRegs * activeThreads);
i++) {
+ assert(indexInBounds(i));
regScoreBoard[i] = 1;
}
for (int i = numPhysicalRegs;
i < numPhysicalRegs + (numMiscRegs * activeThreads);
i++) {
+ assert(indexInBounds(i));
regScoreBoard[i] = 1;
}
}
@@ -93,6 +96,7 @@ Scoreboard::getReg(PhysRegIndex phys_reg)
}
#endif
+ assert(indexInBounds(phys_reg));
return regScoreBoard[phys_reg];
}
@@ -101,6 +105,7 @@ Scoreboard::setReg(PhysRegIndex phys_reg)
{
DPRINTF(Scoreboard, "Setting reg %i as ready\n", phys_reg);
+ assert(indexInBounds(phys_reg));
regScoreBoard[phys_reg] = 1;
}
@@ -120,5 +125,6 @@ Scoreboard::unsetReg(PhysRegIndex ready_reg)
}
#endif
+ assert(indexInBounds(ready_reg));
regScoreBoard[ready_reg] = 0;
}
diff --git a/src/cpu/o3/scoreboard.hh b/src/cpu/o3/scoreboard.hh
index eefff1d8b..b1c2bd026 100644
--- a/src/cpu/o3/scoreboard.hh
+++ b/src/cpu/o3/scoreboard.hh
@@ -111,6 +111,21 @@ class Scoreboard
/** The logical index of the zero register. */
int zeroRegIdx;
+
+ int currentSize;
+
+ void
+ resize(int newSize)
+ {
+ currentSize = newSize;
+ regScoreBoard.resize(newSize);
+ }
+
+ bool
+ indexInBounds(int idx)
+ {
+ return idx < currentSize;
+ }
};
#endif