Стопочный буфер предсказания адреса возврата против сохраненного в стеке адреса возврата?
Читал «Микроархитектуру процессоров Intel, AMD и VIA» Агнера Фога, а на странице 34 он описывает «предсказание обратного адреса»:
http://www.agner.org/optimize/microarchitecture.pdf
3.15 Возврат (все процессоры, кроме P1)
Лучший метод используется для возврата. Буфер Last-In-First-Out, называемый буфером стека возврата, запоминает адрес возврата каждый раз, когда выполняется инструкция вызова, и использует его для прогнозирования, куда пойдет соответствующий возврат. Этот механизм обеспечивает правильное предсказание инструкций возврата при вызове одной и той же подпрограммы из нескольких разных мест.
Мне немного непонятно, зачем это нужно, учитывая, что адреса возврата все равно хранятся в стеке?
Итак, какова цель хранения адресов возврата в стеке, если есть и этот метод? Используется ли сохраненное в стеке значение, только если этот метод прогнозирования не работает?