Register indices have offsets added to them when they're stored so
that float, int and misc regs can all exist in the same numbering
scheme. When you use those to read or write their value, you have to
subtract that offset back out. Also, the value of the register in the
rename stage doesn't necessarily mean anything. The instruction that
would fill it might not have run yet.
Gabe
Quoting Edward Kim <[email protected]>:
In case of cpu->readIntReg(renamed_reg), the following error messages are
displayed and abnormally stopped.
m5.opt: build/ALPHA_SE/cpu/o3/regfile.hh:90: uint64_t
PhysRegFile<Impl>::readIntReg(PhysRegIndex) [with Impl = O3CPUImpl]:
Assertion `reg_idx < numPhysicalIntRegs' failed.
Program aborted at cycle 1393000
Aborted
In case of cpu->readIntReg(src_idx), I see incorrect value like
0x2f2f2f2f2f2f2f2f. The value is never changed regardless of execution of
different instructions.
Ed
On Thu, Sep 15, 2011 at 2:58 PM, Ali Saidi <[email protected]> wrote:
Something like cpu->readIntReg(renamed_reg);
Ali
On Thu, 15 Sep 2011 14:44:59 -0400, Edward Kim <[email protected]>
wrote:
Hi
I want to look into the register value when register is ready in rename
stage.
What can I do for it?
Specifically, I want to check the register value at line number 1022 in
file src/cpu/o3/rename_impl.hh.
Thanks,
Ed
file src/cpu/o3/rename_impl.hh
973 template
974 inline void
975 DefaultRename::renameSrcRegs(DynInstPtr &inst, ThreadID tid)
976 {
977 assert(renameMap[tid] != 0);
978
979 unsigned num_src_regs = inst->numSrcRegs();
980
981 // Get the architectual register numbers from the source and
982 // destination operands, and redirect them to the right
register.
983 // Will need to mark dependencies though.
984 for (int src_idx = 0; src_idx < num_src_regs; src_idx++) {
985 RegIndex src_reg = inst->srcRegIdx(src_idx);
.......
.......
1006 inst->flattenSrcReg(src_idx, flat_src_reg);
1007
1008 // Look up the source registers to get the phys. register
they've
1009 // been renamed to, and set the sources to those registers.
1010 PhysRegIndex renamed_reg =
renameMap[tid]->lookup(flat_src_reg);
1011
1012 DPRINTF(Rename, "[tid:%u]: Looking up arch reg %i, got "
1013 "physical reg %i.\n", tid, (int)flat_src_reg,
1014 (int)renamed_reg);
1015
1016 inst->renameSrcReg(src_idx, renamed_reg);
1017
1018 // See if the register is ready or not.
1019 if (scoreboard->getReg(renamed_reg) == true) {
1020 DPRINTF(Rename, "[tid:%u]: Register %d is ready.\n",
1021 tid, renamed_reg);
1022 /* ================== looking into the register value here
================= */
1023 inst->markSrcRegReady(src_idx);
1024 } else {
1025 DPRINTF(Rename, "[tid:%u]: Register %d is not
ready.\n",
1026 tid, renamed_reg);
1027 }
_______________________________________________
gem5-users mailing list
[email protected]
http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users
_______________________________________________
gem5-users mailing list
[email protected]
http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users