Fix bug: forgot branchTarget() method on indirect branches.
authorSteve Reinhardt <stever@eecs.umich.edu>
Tue, 3 Feb 2004 15:19:05 +0000 (07:19 -0800)
committerSteve Reinhardt <stever@eecs.umich.edu>
Tue, 3 Feb 2004 15:19:05 +0000 (07:19 -0800)
arch/alpha/isa_desc:
    Add missing branchTarget() method for indirect branches.
cpu/static_inst.hh:
    Add comment clarifying when branchTarget() can be used
    on indirect branches.

--HG--
extra : convert_revision : 0dcfb36a9792a338cefceb3d1501825abace7ac5

arch/alpha/isa_desc
cpu/static_inst.hh

index 3533da09ffc64e879477ddffcaab7b23b2116b46..51bce65c22bf680005fb29f5bfd32bc425d30d14 100644 (file)
@@ -1287,6 +1287,13 @@ declare {{
        {
        }
 
+       Addr branchTarget(ExecContext *xc)
+       {
+           Addr NPC = xc->readPC() + 4;
+           uint64_t Rb = xc->readIntReg(_srcRegIdx[0]);
+           return (Rb & ~3) | (NPC & 1);
+       }
+
        std::string generateDisassembly(Addr pc, const SymbolTable *symtab)
        {
            std::stringstream ss;
index 644c7dfc4dca0a54f4ff0dd7a0ee14433f9b8fb7..f3fd6fa246330a21ab14592f1466819341ec9d33 100644 (file)
@@ -312,10 +312,11 @@ class StaticInst : public StaticInstBase
     }
 
     /**
-     * Return the target address for an indirect branch (jump).
-     * The register value is read from the supplied execution context.
-     * Invalid if not an indirect branch (i.e. isIndirectCtrl()
-     * should be true).
+     * Return the target address for an indirect branch (jump).  The
+     * register value is read from the supplied execution context, so
+     * the result is valid only if the execution context is about to
+     * execute the branch in question.  Invalid if not an indirect
+     * branch (i.e. isIndirectCtrl() should be true).
      */
     virtual Addr branchTarget(ExecContext *xc)
     {