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

Reply via email to