diff options
Diffstat (limited to 'src/cpu/inorder/inorder_dyn_inst.cc')
-rw-r--r-- | src/cpu/inorder/inorder_dyn_inst.cc | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/cpu/inorder/inorder_dyn_inst.cc b/src/cpu/inorder/inorder_dyn_inst.cc index 1bbd4f639..d8bfbacc7 100644 --- a/src/cpu/inorder/inorder_dyn_inst.cc +++ b/src/cpu/inorder/inorder_dyn_inst.cc @@ -316,6 +316,28 @@ InOrderDynInst::syscall(int64_t callnum) #endif void +InOrderDynInst::setSquashInfo(unsigned stage_num) +{ + squashingStage = stage_num; + bdelaySeqNum = seqNum; + +#if ISA_HAS_DELAY_SLOT + if (isControl()) { + TheISA::PCState nextPC = pc; + TheISA::advancePC(nextPC, staticInst); + + // Check to see if we should squash after the + // branch or after a branch delay slot. + if (pc.nextInstAddr() == pc.instAddr() + sizeof(MachInst)) + bdelaySeqNum = seqNum + 1; + else + bdelaySeqNum = seqNum; + + } +#endif +} + +void InOrderDynInst::releaseReq(ResourceRequest* req) { std::list<ResourceRequest*>::iterator list_it = reqList.begin(); |