diff options
author | Korey Sewell <ksewell@umich.edu> | 2011-06-19 21:43:38 -0400 |
---|---|---|
committer | Korey Sewell <ksewell@umich.edu> | 2011-06-19 21:43:38 -0400 |
commit | 4d4c7d79d0847a004b4fed4dcfd8fd98fd164163 (patch) | |
tree | 56d872e7d255e12f07267e567fe72a15959115ee /src/cpu/inorder/reg_dep_map.cc | |
parent | db8b1e4b78b7f51b673f80d4f2a1e5f5c86d4446 (diff) | |
download | gem5-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.cc | 11 |
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 |