cpu: Resolve targets of predicted 'taken' decode for O3
The target of taken conditional direct branches does not need to be resolved in IEW: the target can be computed at decode, usually using the decoded instruction word and the PC. The higher-than-necessary penalty is taken only on conditional branches that are predicted taken but miss in the BTB. Thus, this is mostly inconsequential on IPC if the BTB is big/associative enough (fewer capacity/conflict misses). Nonetheless, what gem5 simulates is not representative of how conditional branch targets can be handled. Signed-off-by: Jason Lowe-Power <jason@lowepower.com>
This commit is contained in:
parent
e5fb6752d6
commit
1664625db8
1 changed files with 5 additions and 1 deletions
|
@ -719,7 +719,11 @@ DefaultDecode<Impl>::decodeInsts(ThreadID tid)
|
|||
}
|
||||
|
||||
// Go ahead and compute any PC-relative branches.
|
||||
if (inst->isDirectCtrl() && inst->isUncondCtrl()) {
|
||||
// This includes direct unconditional control and
|
||||
// direct conditional control that is predicted taken.
|
||||
if (inst->isDirectCtrl() &&
|
||||
(inst->isUncondCtrl() || inst->readPredTaken()))
|
||||
{
|
||||
++decodeBranchResolved;
|
||||
|
||||
if (!(inst->branchTarget() == inst->readPredTarg())) {
|
||||
|
|
Loading…
Reference in a new issue