changeset b5d3e3d05173 in /z/repo/gem5
details: http://repo.gem5.org/gem5?cmd=changeset;node=b5d3e3d05173
description:
        inorder: use separate float-reg bits function in dyninst
        this will make sure we get the correct view of a FP register

diffstat:

 src/cpu/inorder/inorder_dyn_inst.cc  |   4 ++--
 src/cpu/inorder/inorder_dyn_inst.hh  |  10 ++++++++--
 src/cpu/inorder/resources/use_def.cc |   7 +++----
 3 files changed, 13 insertions(+), 8 deletions(-)

diffs (91 lines):

diff -r fa2370a92498 -r b5d3e3d05173 src/cpu/inorder/inorder_dyn_inst.cc
--- a/src/cpu/inorder/inorder_dyn_inst.cc       Sun Jun 19 21:43:41 2011 -0400
+++ b/src/cpu/inorder/inorder_dyn_inst.cc       Sun Jun 19 21:43:41 2011 -0400
@@ -500,8 +500,8 @@
 void
 InOrderDynInst::setFloatRegOperand(const StaticInst *si, int idx, FloatReg val)
 {
+    instResult[idx].type = Float;
     instResult[idx].res.fpVal.f = val;
-    instResult[idx].type = Float;
     instResult[idx].tick = curTick();
 
     DPRINTF(InOrderDynInst, "[tid:%i]: [sn:%i] Result Float Reg. %i "
@@ -514,7 +514,7 @@
 InOrderDynInst::setFloatRegOperandBits(const StaticInst *si, int idx,
                               FloatRegBits val)
 {
-    instResult[idx].type = Integer;
+    instResult[idx].type = FloatBits;
     instResult[idx].res.fpVal.i = val;
     instResult[idx].tick = curTick();
 
diff -r fa2370a92498 -r b5d3e3d05173 src/cpu/inorder/inorder_dyn_inst.hh
--- a/src/cpu/inorder/inorder_dyn_inst.hh       Sun Jun 19 21:43:41 2011 -0400
+++ b/src/cpu/inorder/inorder_dyn_inst.hh       Sun Jun 19 21:43:41 2011 -0400
@@ -213,6 +213,7 @@
         None,
         Integer,
         Float,
+        FloatBits,
         Double
     };
 
@@ -889,7 +890,7 @@
         return instResult[idx].type;
     }
 
-    uint64_t readIntResult(int idx)
+    IntReg readIntResult(int idx)
     {
         return instResult[idx].res.intVal;
     }
@@ -899,9 +900,14 @@
        return instResult[idx].res.fpVal.f;
     }
 
+    FloatRegBits readFloatBitsResult(int idx)
+    {
+       return instResult[idx].res.fpVal.i;
+    }
+
     Tick readResultTime(int idx) { return instResult[idx].tick; }
 
-    uint64_t* getIntResultPtr(int idx) { return &instResult[idx].res.intVal; }
+    IntReg* getIntResultPtr(int idx) { return &instResult[idx].res.intVal; }
 
     /** This is the interface that an instruction will use to write
      *  it's destination register.
diff -r fa2370a92498 -r b5d3e3d05173 src/cpu/inorder/resources/use_def.cc
--- a/src/cpu/inorder/resources/use_def.cc      Sun Jun 19 21:43:41 2011 -0400
+++ b/src/cpu/inorder/resources/use_def.cc      Sun Jun 19 21:43:41 2011 -0400
@@ -404,18 +404,18 @@
                         regDepMap[tid]->removeFront(reg_type, flat_idx, inst);
 
                         if (inst->resultType(ud_idx) == 
-                            InOrderDynInst::Integer) {
+                            InOrderDynInst::FloatBits) {
                             DPRINTF(InOrderUseDef, "[tid:%i]: [sn:%i]: Writing 
FP-Bits "
                                     "Result %08f (bits:0x%x) to register "
                                     "idx %i (%i).\n",
                                     tid, seq_num,
                                     inst->readFloatResult(ud_idx), 
-                                    inst->readIntResult(ud_idx), 
+                                    inst->readFloatBitsResult(ud_idx),
                                     reg_idx - FP_Base_DepTag, flat_idx);
 
                             // Check for FloatRegBits Here
                             cpu->setFloatRegBits(flat_idx,
-                                                 inst->readIntResult(ud_idx),
+                                                 
inst->readFloatBitsResult(ud_idx),
                                                  inst->readTid());
                         } else if (inst->resultType(ud_idx) == 
                                    InOrderDynInst::Float) {
@@ -439,7 +439,6 @@
                                     inst->readIntResult(ud_idx), 
                                     reg_idx - FP_Base_DepTag, flat_idx);
 
-                            // Check for FloatRegBits Here
                             cpu->setFloatReg(flat_idx,
                                              inst->readFloatResult(ud_idx),
                                              inst->readTid());
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to