From b49511ae4843fc7af3b28d7dfdb18d4e474b81d3 Mon Sep 17 00:00:00 2001 From: Korey Sewell Date: Sat, 10 Apr 2010 23:31:36 -0400 Subject: inorder: timing for inst forwarding when insts execute, they mark the time they finish to be used for subsequent isnts they may need forwarding of data. However, the regdepmap was using the wrong value to index into the destination operands of the instruction to be forwarded. Thus, in some cases, we are checking to see if the 3rd destination register for an instruction is executed at a certain time, when there is only 1 dest. register valid. Thus, we get a bad, uninitialized time value that will stall forwarding causing performance loss but still the correct execution. --- src/cpu/inorder/resources/use_def.cc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'src/cpu/inorder/resources') diff --git a/src/cpu/inorder/resources/use_def.cc b/src/cpu/inorder/resources/use_def.cc index 5fd6a4724..cf3883e47 100644 --- a/src/cpu/inorder/resources/use_def.cc +++ b/src/cpu/inorder/resources/use_def.cc @@ -196,8 +196,7 @@ UseDefUnit::execute(int slot_idx) } else { // Look for forwarding opportunities - DynInstPtr forward_inst = regDepMap[tid]->canForward(reg_idx, - ud_idx, + DynInstPtr forward_inst = regDepMap[tid]->canForward(reg_idx, inst); if (forward_inst) { -- cgit v1.2.3