223a224,229
> /** Predicted next NPC. */
> Addr predNPC;
>
> /** If this is a branch that was predicted taken */
> bool predTaken;
>
338a345
> * @param pred_NPC The predicted next NPC.
342c349,350
< BaseDynInst(TheISA::ExtMachInst inst, Addr PC, Addr pred_PC,
---
> BaseDynInst(TheISA::ExtMachInst inst, Addr PC,
> Addr pred_PC, Addr pred_NPC,
388c396,400
< void setPredTarg(Addr predicted_PC) { predPC = predicted_PC; }
---
> void setPredTarg(Addr predicted_PC, Addr predicted_NPC)
> {
> predPC = predicted_PC;
> predNPC = predicted_NPC;
> }
390,391c402,403
< /** Returns the predicted target of the branch. */
< Addr readPredTarg() { return predPC; }
---
> /** Returns the predicted PC immediately after the branch. */
> Addr readPredPC() { return predPC; }
392a405,407
> /** Returns the predicted PC two instructions after the branch */
> Addr readPredNPC() { return predNPC; }
>
394,399c409,412
< bool predTaken()
< #if ISA_HAS_DELAY_SLOT
< { return predPC != (nextPC + sizeof(TheISA::MachInst)); }
< #else
< { return predPC != (PC + sizeof(TheISA::MachInst)); }
< #endif
---
> bool readPredTaken()
> {
> return predTaken;
> }
400a414,418
> void setPredTaken(bool predicted_taken)
> {
> predTaken = predicted_taken;
> }
>
403,407c421,424
< #if ISA_HAS_DELAY_SLOT
< { return predPC != nextNPC; }
< #else
< { return predPC != nextPC; }
< #endif
---
> {
> return predPC != nextPC || predNPC != nextNPC;
> }
>