Generator wstępnego pobierania

Generator wstępnego pobierania (prefetcher) generuje żądania pobrania pary kolejnych instrukcji i przesłania ich do aktywnych buforów. W przypadku wystąpienia skoku lub rozgałęzienia generator wymusza przełączenie buforów i pobranie kolejnej pary instrukcji do buforów, które uprzednio były nieaktywne. Jeśli adres rozkazu nie jest adresem najmniej znaczącego bajtu, to generator wymusza jednoczesne pobranie 16 bajtów z dwóch kolejnych linii pamięci podręcznej. Wynika to z konieczności pobrania pełnego kodu przynajmniej jednego rozkazu (1-15B), który może nie mieścić się w całości w jednej linii. Dekoder rozkazów każdego z dwóch potoków U i V zawiera blok wstępnego dekodowania D1 oraz blok obliczania adresu operandu D2. Każda para buforów wstępnego pobierania jest połączona jednocześnie z wstępnymi dekoderami obu potoków. Użycie pary buforów umożliwia jednoczesne dekodowanie dwóch instrukcji, każdej w jednym potoku. Wynikiem wstępnego dekodowania jest stwierdzenie czy instrukcje mogą być wykonywane współbieżnie w obu potokach (U i V). W procesorze Pentium współbieżnie mogą być wykonywane tylko niektóre instrukcje nazywane przez Intela instrukcjami prostymi pod warunkiem że nie występują pomiędzy nimi zależności funkcjonalne. Każdy blok obliczania adresu operandu D2 jest skojarzony z szybkim układem generatora adresu. Sterowanie (pamięć mikrokodu) zawiera układ szeregowania operacji i pamięć ROM mikrokodów. Układ steruje potokami stałoprzecinkowymi, zmiennoprzecinkowym, obsługą wyjątków, pułapek i przerwań. Podwojona stałoprzecinkowa jednostka arytmetyczno-logiczna ALU pracuje jednak z pojedynczym plikiem rejestrowym. Układ stronicowania jest załączany ustawieniem bitu PG w rejestrze CR0 i zawiera osobne bufory dla każdej pamięci podręcznej. Każdy bufor antycypacji translacji umożliwia jednoczesną obsługę dwóch adresów liniowych czyli jednoczesną translację adresu strony dla obu potoków. Układ umożliwia obsługę stron o rozmiarze 4kB (12 bitowy adres na stronie, dwupoziomowa translacja adresu strony) lub 4MB (22 bitowy adres na stronie, 10 bitowy adres strony, translacja adresu jednopoziomowa). Jednostka zmiennoprzecinkowa ma 3 osobne bloki: dodawania, mnożenia i dzielenia, co pozwala przyspieszyć wykonanie złożonych instrukcji zmiennoprzecinkowych