summaryrefslogtreecommitdiff
path: root/src/cpu/inorder/reg_dep_map.cc
diff options
context:
space:
mode:
authorKorey Sewell <ksewell@umich.edu>2011-06-19 21:43:38 -0400
committerKorey Sewell <ksewell@umich.edu>2011-06-19 21:43:38 -0400
commit4d4c7d79d0847a004b4fed4dcfd8fd98fd164163 (patch)
tree56d872e7d255e12f07267e567fe72a15959115ee /src/cpu/inorder/reg_dep_map.cc
parentdb8b1e4b78b7f51b673f80d4f2a1e5f5c86d4446 (diff)
downloadgem5-4d4c7d79d0847a004b4fed4dcfd8fd98fd164163.tar.xz
inorder: redefine DynInst FP result type
Sharing the FP value w/the integer values was giving inconsistent results esp. when their is a 32-bit integer register matched w/a 64-bit float value
Diffstat (limited to 'src/cpu/inorder/reg_dep_map.cc')
-rw-r--r--src/cpu/inorder/reg_dep_map.cc11
1 files changed, 7 insertions, 4 deletions
diff --git a/src/cpu/inorder/reg_dep_map.cc b/src/cpu/inorder/reg_dep_map.cc
index 2cb6b7adb..2f8a2924c 100644
--- a/src/cpu/inorder/reg_dep_map.cc
+++ b/src/cpu/inorder/reg_dep_map.cc
@@ -104,7 +104,7 @@ RegDepMap::insert(DynInstPtr inst)
inst->flattenDestReg(i, flat_idx);
- if (flat_idx == TheISA::ZeroReg) {
+ if (flat_idx == TheISA::ZeroReg && reg_type == InOrderCPU::IntType) {
DPRINTF(RegDepMap, "[sn:%i]: Ignoring Insert-Dependency tracking for "
"ISA-ZeroReg (Int. Reg %i).\n", inst->seqNum,
flat_idx);
@@ -143,15 +143,18 @@ RegDepMap::remove(DynInstPtr inst)
for (int i = 0; i < dest_regs; i++) {
RegIndex flat_idx = inst->flattenedDestRegIdx(i);
+ InOrderCPU::RegType reg_type = cpu->getRegType(inst->destRegIdx(i));
- if (flat_idx == TheISA::ZeroReg) {
+ // Merge Dyn Inst & CPU Result Types
+ if (flat_idx == TheISA::ZeroReg &&
+ reg_type == InOrderCPU::IntType) {
DPRINTF(RegDepMap, "[sn:%i]: Ignoring Remove-Dependency tracking for "
"ISA-ZeroReg (Int. Reg %i).\n", inst->seqNum,
flat_idx);
continue;
}
- InOrderCPU::RegType reg_type = cpu->getRegType(inst->destRegIdx(i));
+
remove(reg_type, flat_idx, inst);
}
}
@@ -174,7 +177,7 @@ RegDepMap::remove(uint8_t reg_type, RegIndex idx, DynInstPtr inst)
}
list_it++;
}
- panic("[sn:%i] Did not find entry for %i ", inst->seqNum, idx);
+ panic("[sn:%i] Did not find entry for %i, type:%i\n", inst->seqNum, idx, reg_type);
}
void