diff -r deccdbd04319 -r 98e4c0431a9e src/arch/alpha/registers.hh --- a/src/arch/alpha/registers.hh Tue Aug 24 13:09:39 2010 -0500 +++ b/src/arch/alpha/registers.hh Tue Aug 24 13:31:56 2010 -0500 @@ -101,7 +101,8 @@ // 0..31 are the integer regs 0..31 // 32..63 are the FP regs 0..31, i.e. use (reg + FP_Base_DepTag) FP_Base_DepTag = 40, - Ctrl_Base_DepTag = 72 + Ctrl_Base_DepTag = 72, + Max_DepTag = Ctrl_Base_DepTag + NumMiscRegs + NumInternalProcRegs }; } // namespace AlphaISA diff -r deccdbd04319 -r 98e4c0431a9e src/arch/arm/registers.hh --- a/src/arch/arm/registers.hh Tue Aug 24 13:09:39 2010 -0500 +++ b/src/arch/arm/registers.hh Tue Aug 24 13:31:56 2010 -0500 @@ -1,4 +1,16 @@ /* + * Copyright (c) 2010 ARM Limited + * All rights reserved + * + * The license below extends only to copyright in the software and shall + * not be construed as granting a license to any other intellectual + * property including but not limited to intellectual property relating + * to a hardware implementation of the functionality of the software + * licensed hereunder. You may use the software subject to the license + * terms below provided that you ensure that this notice is replicated + * unmodified and in its entirety in all distributions of the software, + * modified or unmodified, in source code or in binary form. + * * Copyright (c) 2007-2008 The Florida State University * All rights reserved. * @@ -59,9 +71,9 @@ const int NumIntRegs = NUM_INTREGS; const int NumFloatRegs = NumFloatArchRegs + NumFloatSpecialRegs; - const int NumMiscRegs = NUM_MISCREGS; +const int TotalNumRegs = NumIntRegs + NumFloatRegs + NumMiscRegs; // semantically meaningful register indices const int ReturnValueReg = 0; @@ -85,6 +97,7 @@ // These help enumerate all the registers for dependence tracking. const int FP_Base_DepTag = NumIntRegs * (MODE_MAXMODE + 1); const int Ctrl_Base_DepTag = FP_Base_DepTag + NumFloatRegs; +const int Max_DepTag = Ctrl_Base_DepTag + NumMiscRegs; typedef union { IntReg intreg; diff -r deccdbd04319 -r 98e4c0431a9e src/arch/mips/registers.hh --- a/src/arch/mips/registers.hh Tue Aug 24 13:09:39 2010 -0500 +++ b/src/arch/mips/registers.hh Tue Aug 24 13:31:56 2010 -0500 @@ -283,6 +283,7 @@ const int TotalDataRegs = NumIntRegs + NumFloatRegs; const int NumMiscRegs = MISCREG_NUMREGS; +const int Max_DepTag = Ctrl_Base_DepTag + NumMiscRegs; const int TotalNumRegs = NumIntRegs + NumFloatRegs + NumMiscRegs; diff -r deccdbd04319 -r 98e4c0431a9e src/arch/power/registers.hh --- a/src/arch/power/registers.hh Tue Aug 24 13:09:39 2010 -0500 +++ b/src/arch/power/registers.hh Tue Aug 24 13:31:56 2010 -0500 @@ -82,6 +82,7 @@ // These help enumerate all the registers for dependence tracking. const int FP_Base_DepTag = NumIntRegs; const int Ctrl_Base_DepTag = FP_Base_DepTag + NumFloatRegs; +const int Max_DepTag = Ctrl_Base_DepTag + NumMiscRegs; typedef union { IntReg intreg; diff -r deccdbd04319 -r 98e4c0431a9e src/arch/sparc/registers.hh --- a/src/arch/sparc/registers.hh Tue Aug 24 13:09:39 2010 -0500 +++ b/src/arch/sparc/registers.hh Tue Aug 24 13:31:56 2010 -0500 @@ -58,7 +58,8 @@ // These enumerate all the registers for dependence tracking. enum DependenceTags { FP_Base_DepTag = 32*3+9, - Ctrl_Base_DepTag = FP_Base_DepTag + 64 + Ctrl_Base_DepTag = FP_Base_DepTag + 64, + Max_DepTag = Ctrl_Base_DepTag + NumMiscRegs }; // semantically meaningful register indices diff -r deccdbd04319 -r 98e4c0431a9e src/arch/x86/registers.hh --- a/src/arch/x86/registers.hh Tue Aug 24 13:09:39 2010 -0500 +++ b/src/arch/x86/registers.hh Tue Aug 24 13:31:56 2010 -0500 @@ -77,6 +77,7 @@ 8 + //The indices that are mapped over the fp stack 8 + Max_DepTag = Ctrl_Base_DepTag + NumMiscRegs }; // semantically meaningful register indices diff -r deccdbd04319 -r 98e4c0431a9e src/cpu/o3/rename_impl.hh --- a/src/cpu/o3/rename_impl.hh Tue Aug 24 13:09:39 2010 -0500 +++ b/src/cpu/o3/rename_impl.hh Tue Aug 24 13:31:56 2010 -0500 @@ -966,9 +966,11 @@ src_reg = src_reg - TheISA::FP_Base_DepTag; flat_src_reg = inst->tcBase()->flattenFloatIndex(src_reg); flat_src_reg += TheISA::NumIntRegs; - } else { + } else if (src_reg < TheISA::Max_DepTag) { flat_src_reg = src_reg - TheISA::FP_Base_DepTag + TheISA::NumIntRegs; DPRINTF(Rename, "Adjusting reg index from %d to %d.\n", src_reg, flat_src_reg); + } else { + panic("Reg index is out of bound: %d.", src_reg); } inst->flattenSrcReg(src_idx, flat_src_reg); @@ -1012,11 +1014,13 @@ // Integer registers are flattened. flat_dest_reg = inst->tcBase()->flattenIntIndex(dest_reg); DPRINTF(Rename, "Flattening index %d to %d.\n", (int)dest_reg, (int)flat_dest_reg); - } else { + } else if (dest_reg < TheISA::Max_DepTag) { // Floating point and Miscellaneous registers need their indexes // adjusted to account for the expanded number of flattened int regs. flat_dest_reg = dest_reg - TheISA::FP_Base_DepTag + TheISA::NumIntRegs; DPRINTF(Rename, "Adjusting reg index from %d to %d.\n", dest_reg, flat_dest_reg); + } else { + panic("Reg index is out of bound: %d.", dest_reg); } inst->flattenDestReg(dest_idx, flat_dest_reg);