diff options
author | Steve Reinhardt <stever@eecs.umich.edu> | 2004-02-03 07:19:05 -0800 |
---|---|---|
committer | Steve Reinhardt <stever@eecs.umich.edu> | 2004-02-03 07:19:05 -0800 |
commit | 3e5070a3f121d84846de16718575567725129db9 (patch) | |
tree | 6cc4194dcdc098f5980735ce5ce0d56991e988b5 | |
parent | 2f369ee5d59766750df7466e24a229f96d8faa09 (diff) | |
download | gem5-3e5070a3f121d84846de16718575567725129db9.tar.xz |
Fix bug: forgot branchTarget() method on indirect branches.
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
-rw-r--r-- | arch/alpha/isa_desc | 7 | ||||
-rw-r--r-- | cpu/static_inst.hh | 9 |
2 files changed, 12 insertions, 4 deletions
diff --git a/arch/alpha/isa_desc b/arch/alpha/isa_desc index 3533da09f..51bce65c2 100644 --- a/arch/alpha/isa_desc +++ b/arch/alpha/isa_desc @@ -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; diff --git a/cpu/static_inst.hh b/cpu/static_inst.hh index 644c7dfc4..f3fd6fa24 100644 --- a/cpu/static_inst.hh +++ b/cpu/static_inst.hh @@ -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) { |