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