Abstract
This paper evaluates several mechanisms for repairing the return-address
stack after branch mispredictions. The return-address stack is a small
but important structure for achieving better control-flow prediction accuracy
and therefore better performance. But wrong-path execution after mispredictions
frequently corrupts the return-address stack, making repair mechanisms
necessary. If the processor implements multipath execution--simultaneously
executing both sides of a branch--the contention among different paths
makes the problem more severe.
For conventional, single-path processors, this paper proposes saving
both the top-of-stack pointer and the top-of-stack contents for later restoration
in case of a misprediction. This simple technique achieves nearly 100%
hit rates and improves performance by up to 8.7% compared to a stack with
no repair mechanism. For multipath processors, providing each path with
its own return-address stack completely eliminates contention, improving
performance by over 25%.