diff options
author | Mrinmoy Ghosh <mrinmoy.ghosh@arm.com> | 2012-02-13 12:26:24 -0600 |
---|---|---|
committer | Mrinmoy Ghosh <mrinmoy.ghosh@arm.com> | 2012-02-13 12:26:24 -0600 |
commit | fd90c3676d94520b98a9af29af09c1f8a2858465 (patch) | |
tree | ebda3f4fbd25b9135545bf2bfee4e316873e2130 /src/cpu/o3/commit_impl.hh | |
parent | abc212461b865a47437a8dbf532b497ea4562137 (diff) | |
download | gem5-fd90c3676d94520b98a9af29af09c1f8a2858465.tar.xz |
BP: Fix several Branch Predictor issues.
1. Updates the Branch Predictor correctly to the state
just after a mispredicted branch, if a squash occurs.
2. If a BTB does not find an entry, the branch is predicted not taken.
The global history is modified to correctly reflect this prediction.
3. Local history is now updated at the fetch stage instead of
execute stage.
4. In the Update stage of the branch predictor the local predictors are
now correctly updated according to the state of local history during
fetch stage.
This patch also improves performance by as much as 17% on some benchmarks
Diffstat (limited to 'src/cpu/o3/commit_impl.hh')
-rw-r--r-- | src/cpu/o3/commit_impl.hh | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/cpu/o3/commit_impl.hh b/src/cpu/o3/commit_impl.hh index 7ca42ae5b..b4cc4b017 100644 --- a/src/cpu/o3/commit_impl.hh +++ b/src/cpu/o3/commit_impl.hh @@ -1,5 +1,5 @@ /* - * Copyright (c) 2010 ARM Limited + * Copyright (c) 2010-2011 ARM Limited * All rights reserved * * The license below extends only to copyright in the software and shall @@ -868,6 +868,11 @@ DefaultCommit<Impl>::commit() fromIEW->branchTaken[tid]; toIEW->commitInfo[tid].squashInst = rob->findInst(tid, squashed_inst); + if (toIEW->commitInfo[tid].mispredictInst) { + if (toIEW->commitInfo[tid].mispredictInst->isUncondCtrl()) { + toIEW->commitInfo[tid].branchTaken = true; + } + } toIEW->commitInfo[tid].pc = fromIEW->pc[tid]; |