Brach-prediction buffer / Branch history table
Najprostszy schemat przewidywanie skoków. Buffer to kawałek pamięci przechowujący jeden bit, mówiący o tym, czy ostatnim razem doszło do skoku. Wykonanie kolejnej instrukcji odbywa się zgodnie z przewidzeniem, a jeśli jest ono błędne, nowa prognoza zostaje zapisana w bufferze.
Correlating predictors
Kiedy następny skok na pewno nie będzie wykonany w zależności od poprzedniego; np.: a==2; b==2; a!=b.
Predykatory dwupoziomowe
Przechowują informację o prawdopodobieństwie warunkowym. Nie są bezpośrednio związane z instrukcją skoku, ale na podstawie adresu instrukcji i historii wykonań. Rejestr historii składa się z 8/16 bitów informacji na temat wykonań pojedynczego lub wielu skoków. Predykatory dwupoziomowe i trójpoziomowe nazywa się korelatorami skoków.
gLocal
W schemacie gLocal adres instrukcji skoku wybiera rejestr historii związany z danym skokiem. Zawartość rejestru historii i adres skoku są argumentami funkcji mieszającej, której wartość wybiera jeden z dwu- lub czterostanowych predyktorów. Predyktor udziela odpowiedzi na pytanie o prawdopodobieństwo skoku na bazie poprzednich wykonań tego skoku.
gShare
W schemacie gShare historia wykonań wszystkich skoków przechowywane jest w jednym rejestrze. Zawartość rejestru historii i adres skoku są argumentami funkcji mieszającej, której wartość wybiera jeden z dwu- lub czterostanowych predyktorów. Predyktor udziela odpowiedzi na pytanie o prawdopodobieństwo skoku na bazie poprzednich wykonań wszystkich ostatnio wykonywanych skoków.
High-Performance Instruction Delivery
Samo przewidywanie, czy skok się wykona, czy nie, nie wystarczy – trzeba też znać adres, pod który się uda. Adres musi być znany już w fazie IF, więc zazwyczaj odczytanie predyktu zachodzi w fazie ID.
Integrated Instruction Fetch Units
Zintegrowany predyktor skoków – predyktor staje się częścią instrukcji i ciągle przewiduje skoki.
Instruction prefetch – mechanizm samodzielnie przewiduje skoki na podstawie predyktorów.
Instruction memory access and buffering – fetching multiply instructions may require accessing multiple cache lines, the unit used prefetch to try to hide the cost of crossing cache blocks. It also provides buffering, essentially acting as an on-demand unit to provide instructions to the issue stage as needed and in the quantity needed.
Dla jal - $ra używa się stosów.