В Справочном руководстве по оптимизации Intel блок прогнозирования ветвлений содержит буфер стеков возврата для точного прогнозирования ret
инструкций (раздел 2.2.2.1).Модуль очереди и декодирования команд также отслеживает изменения в указателе стека для улучшения ширины полосы декодирования (раздел 2.2.2.5).
Более подробно, в разделе 3.4.1.4 описаны некоторые «правила», в основном предназначенные для разработчиков компиляторов,чтобы извлечь выгоду из встраивания, вызовов и возвратов - наиболее уместным является, вероятно, то, что вызов ближнего / дальнего расстояния должен сочетаться с возвратом ближнего / дальнего, что означает, что не рекомендуется помещать адрес возврата в стек и переходить к вызываемому абоненту.Кроме того, рекомендуется, чтобы глубина вызовов не превышала 16 вложенных вызовов (размер RSB).
Если эти правила соблюдаются, вы можете эффективно рассматривать их как косвенные ветви во время выбора ветви (раздел 3.4.1.6)со всем, что подразумевает.Скорее всего, вы никогда не встретите остановку на ret
, за исключением патологических случаев или самоизменяющегося кода.