www.eprace.edu.pl » ia64 » Mechanizmy zastosowane w architekturze IA-64 » Rejestry

Rejestry

Architektura IA-64 jest tak pomyślana aby większość zasobów procesora udostępniać bezpośrednio oprogramowaniu. Nie jest inaczej z rejestrami. Ilość rejestrów jest jedną z kluczowych cech IA-64 która odróżnia tą architekturę od procesorów IA-32, a także od procesorów RISCowych. Co prawda nowe procesory RISCowe mają już dużą fizyczną liczbę rejestrów, ale i tak liczba rejestrów pomyślana dla IA-64 jest dużo większa. Istnieje wiele zalet dużej liczby rejestrów, główną zaletą jest to iż nie trzeba się często odwoływać do pamięci operacyjnej. Kompilator ma dostęp do całego zestawu rejestrów, co umożliwia mu śmielszą optymalizację kodu. Przykładem może być technika „wyrolowywania” pętli. W porównaniu z IA-32 duży zestaw rejestrów zmiennoprzecinkowych powiada dodatkową zaletę, a mianowicie eliminuje niepożądany mechanizm stosu zmiennoprzecinkowego. W programach dla x86 większość operacji zmiennoprzecinkowych mogło operować jedynie na szczycie ośmioelementowego stosu, co zmuszało na częste używanie bezcelowego w IA-64 instrukcji fxch (exchange witch top of stack) czyli wymiany szczytu stosu rejestrów. Już procesory które mają tylko 32 rejestry zmiennoprzecinkowe nie doznają tej niedogodności, a pierwsza implementacja IA-64 ma nieć tych rejestrów aż 128. Wadami wielkiej liczby rejestrów są: zajmowanie fizycznie dużej ilości miejsca w procesorze, ale nie wydaje się to znaczącą wadą, gdyż pierwsza implementacja IA-64 będzie wykonana w technologii 18 mikronów. Główną wadą takiej ilości jest zwiększenie długości każdej instrukcji związanej z adresacją rejestrów.

Przegląd rejestrów dostępnych w architekturze IA-64:

Rejestry Ogólnego Przeznaczenia GR

(General Purpose Registers) Są to 64-bitowe rejestry które mogą być wykorzystywane do przechowywania wszystkiego rodzaju danych. Są one jednak zwykle używane przy obliczeniach stałoprzecinkowych, oraz multimedialnych. Rejestry te są podzielone na dwie części statyczną oraz stosową. Część statyczna zajmuje jedną czwartą całego zestawu jest dostępna bezpośrednio przez oprogramowanie. Część stosowa zajmująca pozostałą pulę to rejestry rotujące są one dostępne poprzez tzw. rejestry RRB (Rotating Register Base, zwane także Register Rename Base) które wskazują od którego numeru rejestry stosowe są wolne i można z nich korzystać. Pierwszy rejestr ogólnego przeznaczenia jest rejestrem specjalnym i jest tylko do odczytu, ma on zawsze wartość 0. Próba zapisu danych do rejestru zerowego powoduje wygenerowanie błędu.

Rejestry NaT

(Not a Thing registers) Są to 1-bitowe rejestry z których każdy jest dodatkiem do odpowiedniego rejestru ogólnego przeznaczenia. Jeden bit zawarty w tych rejestrach ma za zadanie informować czy dane zawarte w rejestrach ogólnego przeznaczenia są poprawne. Wykonywanie spekulatywnych operacji przez procesor IA-64 daje możliwość nietrafnego załadowania rejestru. Bity NaT informują właśnie o poprawności danych związanym z tym mechanizmem.

Rejestry Zmiennoprzecinkowe FP

(Floating point registers) Są to 82-bitowe zmiennoprzecinkowe rejestry które są używane przy obliczeniach zmiennoprzecinkowych. Rejestry te są podzielone na dwie części. Pierwsza część zajmująca jedną czwartą zestawu nazwana jest częścią statyczną Rejestry od 8 do 31 są używane w trybie IA-32 jako rejestry zmiennoprzecinkowe, oraz multimedialne znane z procesorów IA-32. Reszta rejestrów nazwana jest częścią rotująca. Część to jest dynamicznie przydzielana oprogramowaniu aby przyspieszyć wykonywanie pętli. Pierwsze dwa rejestry są tylko do odczytu i mają wartość +0.0 oraz +1.0. Jeśli któryś z tych rejestrów jest używany jako rejestr docelowy jakiejś operacji to generowany jest błąd. Rejestry te nie są wyposażone w dodatkowe bity typu NaT, jest jednak możliwość sygnalizowania niepoprawności danych związanych z mechanizmem spekulatywnego dostępu do danych. Specjalna wartość NaTVal (Not a Thing Value) jest wpisywana do odpowiedniego rejestru gdy dane nie zostały trafnie przewidziane do załadowania.

Format rejestru FP:

81 80 64 63 0
znak wykładnik część znacząca
1 17 64
    pole znaczące – (significand) w polu tym znajdują się cyfry znaczące liczby. Bit 63 jest
    częścią całkowitą liczby, natomiast pozostałe bity są częścią ułamkowa.
    wykładnik – (exponent) w tym przechowywany jest wykładnik liczby. Jeśli wszystkie
    bity wynoszą 1 to stan taki interpretowany jest jako nieskończoność. Jeśli wszystkie bity wynoszą 0, oraz wszystkie bity pola znaczącego są równe zero, oznacza to iż liczba wynosi 0. Natomiast w przypadku jeśli wszystkie bity tego pola wynoszą 0 natomiast pole znaczące nie wynosi zero to stan taki interpretuje tak że liczba jest typu IEEE double-extended real (pseudo)denormal
    znak – (sign) pole to określa czy liczba jest dodatnia (bit wynosi 0) czy ujemna (bit
    wynosi 1)

Wartość zawarta w tym rejestrze można wyrazić:

(-1)(znak) · 2(wykładnik - 65535) · (część_znacząca[63].część_znacząca[62:0])

(-1)(znak) · 2(- 16382) · (część_znacząca[63].część_znacząca[62:0])

Rejestry Aplikacyjne AR

(Application Registers) są rejestry różnego przeznaczenia, włączając w to rejestry specjalnego przeznaczenia, rejestry kontrolne, oraz rejestry, które zostały dodane do architektury IA-64 dla zachowania zgodności z architekturą IA-32. Rejestry aplikacyjne mogą być adresowane tylko przez jednostkę zarządzającą pamięcią (M-unit) albo przez stałoprzecinkową jednostkę arytmetyczno-logiczną (ALU).

Tabela przedstawiająca listę wszystkich rejestrów aplikacyjnych:

Numer rejestru Nazwa Opis typ jednostki wykorzystującej rejestr
AR 0-7 KR 0-7 Rejestry jądra M
AR 8-15   Zarezerwowane M
AR 16 RSC Rejestr konfiguracji stosu rejestrów M
AR 17 BSP Wskaźnik powrotu M
AR 18 BSPSTORE Wskaźnik powrotu dla pamięci M
AR 19 RNAT Rejestr kolekcji rejestrów NaT M
AR 20   Zarezerwowane M
AR 21 FCR Rejestr kontroli zmiennoprzecinkowej M
AR 22-23   Zarezerwowane M
AR 24 EFLAG Rejestr flag aplikacji M
AR 25 CSD Rejestr segmentowy programu M
AR 26 SSD Rejestr segmentowy stosu M
AR 27 CFLG Rejestr flag kontrolnych M
AR 28 FSR Rejestr statusu zmiennoprzecinkowego M
AR 29 FIR Rejestr instrukcji zmiennoprzecinkowych M
AR 30 FDR Rejestr danych zmiennoprzecinkowych M
AR 31   Zarezerwowane M
AR 32 CCV Rejestr porównania oraz wymiany M
AR 33-35   Zarezerwowane M
AR 36 UNAT Rejestr kolekcji użytkownika rejestrów NaT M
AR 37-39   Zarezerwowane M
AR 40 FPSR Rejestr statusu operacji zmiennoprzecinkowych M
AR 41-43   Zarezerwowane M
AR 44 ITC Licznik przedziałów czasowych M
AR 45-47   Zarezerwowane M
AR 48-63   Ignorowane M lub I
AR 64 PFS Poprzedni stan funkcji I
AR 65 LC Licznik pętli I
AR 66 EC Licznik instrukcji końcowych I
AR 67-111   Zarezerwowane I
AR 112-127   Ignorowane M lub I

Rejestry jądra (KR 0-7 – AR 0-7)

(Kernel Registers) Osiem dostępnych dla użytkownika rejestrów. Są to rejestry 64 bitowe. Ich zadaniem jest przekazywanie informacji z systemu operacyjnego do aplikacji. Rejestry te mogą być czytane przez wszystkie poziomy uprzywilejowania, ale zapisywane mogą być jedynie przez najbardziej uprzywilejowany poziom. Rejestry KR 0, KR 1, oraz KR 2 są także używane do trzymania dodatkowych informacji przeznaczonych dla zestawu instrukcji IA-32. Dzieje się to wtedy kiedy aktywnym jest zestaw instrukcji IA-32.

Rejestr konfiguracji stosu rejestrów (RSC – AR 16)

(Register Stack Configuration Register) Jest to 64-bitowy rejestr używany do kontroli operacji na stosie rejestrów wykonywanych przez RSE (Register Stack Engine) architektury IA-64.

format rejestru RSC:

63 30 29 16 15 5 4 3 2 1 0
rv loadrs rv be pl mode
34 14 11 1 2 2
    mode – (tryb) pole to kontroluje w jaki sposób RSE zapisuje oraz odczytuje ramki
    na/ze stosu gdy pole to jest ustawione w postaci

00 RSE pracuje leniwie (emforced lazy)

10 oznacza tryb intensywnego odczytu (load intensive)

01 oznacza tryb intensywnego odczytu (stroe intensive)

11 oznacza tryb szybki (eager)

    pl – (privilege level) pole to określa w jakim poziomie uprzywilejowanie ma pracować
    RSE
    be – (big endian) pole to kontroluje sposób zapisu oraz odczytu danych przez RSE.
    Jeśli bit ten jest ustawiony w pozycji 1 to znaczy że dostęp odbywa się według kolejności big-endian, natomiast jeśli w pozycji 0 to znaczy, że według kolejności little-endian
    loadrs – pole to jest używane przez instrukcję loadrs do synchronizacji RSE
    rv – (reserved) pole zarezerwowane

Wskaźnik powrotu (BSP – AR 17)

(Backing Store Pointer) Jest to 61 bitowy rejestr. Rejestr jest tylko do odczytu, przechowuje on adres miejsca w pamięci w którym jest zapisane miejsce rejestru GR 32 z aktualnej ramki stosu. Co prawda rejestr ten zajmuje całe 64 bity, ale 3 bity są ignorowane.

Format rejestru BSP

63 3 2 0
pointer ig
61 3

Wskaźnik powrotu dla pamięci (BSPSTORE – AR 18)

(Backing Store Pointer for Memoru Strores) Jest to 61 bitowy rejestr. W rejestrze tym przechowywane są informacje o miejscu pamięci w którym RSE zapisze następną ramkę stosu.

Format rejestru BSPSTORE

63 3 2 0
pointer ig
61 3

Rejestr kolekcji rejestrów NaT (RNAT – AR 19)

(RSE NaT Collection Register). Jest to 64 bitowy rejestr który jest używany przez RSE do tymczasowego przechowywania wartości rejestrów NaT. Dane są do tego rejestru zapisywane

kiedy RSE zapisuje następną ramkę stosu. Bit 63 zawsze przy czytaniu zwraca zero i ignorowane są wszystkie próby zapisu do niego.

Format rejestru RNAT

63 62 0
ig RSE NaT Collection
1 63

REJESTRY IA-32 (AR 21-30)

Rejestry IA-32 zostały dodane w celu zapewnienia kompatybilności z architekturą IA-32. Jest to zestaw rejestrów w których znajdują się rejestry znane z procesorów serii x86.

Rejestr FCR (AR 21) – w rejestrze tym znajdują się znane z IA-32 rejestry FCW, oraz MXCSR.

Rejestr EFLAG (AR 24) – rejestr ten odpowiada rejestrowi o takiej samej nazwie w IA-32

Rejestr CSD (AR 25) – rejestr ten odpowiada rejestrowi o takiej samej nazwie w IA-32 mimo iż istnieje lekka modyfikacja formatu

Rejestr SSD (AR 26) – rejestr ten odpowiada rejestrowi o takiej samej nazwie w IA-32 mimo iż istnieje lekka modyfikacja formatu

Rejestr CFLG (AR 27) – w rejestrze tym znajdują się rejestry CR0/CR4 znane z IA-32.

Rejestr FSR (AR 28) – w rejestrze tym znajdują się rejestry FSW, FTW, MXCSR znane z IA-32.

Rejestr FIR (AR 29) w rejestrze tym znajdują się rejestry FOP, FIP, FCS znane z IA-32.

Rejestr FDR (AR 30) w rejestrze tym znajdują się rejestry FEA, FDS znane z IA-32.

Rejestr porównania oraz wymiany(CCV – AR 32)

(Compare and Exchange Value Register) Jest to 64-bitowy rejestr który zawiera dane używane przez instrukcję cmpxchg.

Rejestr kolekcji użytkownika rejestrów NaT (UNAT – AR 36)

(User Nat Collection Register) Jest to 64-bitowy rejestr który jest używany do tymczasowego przechowywania wartości rejestrów NaT. Dane do tego rejestry są zapisywane kiedy zostają wykonane instrukcje ld8.fill oraz ld8.spill

Rejestr statusu operacji zmiennoprzecinkowych (FPSR – AR 40)

(Floating-point Status Register). Jest to 64-bitowy rejestr w którym przechowywane są informacje o operacjach zmiennoprzecinkowych. Za pomocą tego rejestru można dynamicznie kontrolować te operacje. Rejestr ten jest podzielony na 5 pól, jednym jest pole które opisuje sposób obsługi błędów, oraz 4 zestawy informacji statusowych (1 główny zestaw oraz 3 alternatywne).

Format rejestru FPSR:

63 58 57 45 44 32 31 19 18 6 5 0
rv sf3 sf2 sf1 sf0 traps
6 13 13 13 13 6
    traps – (zapadki) bity w tym polu sygnalizują odpowiadające tym bitom błędy będą
    generowane
    sf0 – (status field 0) główne pole statusu
    sf1 – (status field 1) alternatywne pole statusu nr 1
    sf2 – (status field 2) alternatywne pole statusu nr 2
    sf3 – (status field 3) alternatywne pole statusu nr 3
    rv – (reserved ) pole zarezerwowane

Format pola traps:

5 4 3 2 1 0
id ud od zd dd vd
1 1 1 1 1 1
    vd – bit w stanie wysokim blokuje wystąpienie błędu IEEE – Invalid Operation
    dd – bit w stanie wysokim blokuje wystąpienie błędu – Denormal/Unnormal Operand
    zd – bit w stanie wysokim blokuje wystąpienie błędu IEEE – Zero Divide
    od – bit w stanie wysokim blokuje wystąpienie błędu IEEE – Overflow
    ud – bit w stanie wysokim blokuje wystąpienie błędu IEEE – Underflow
    id – bit w stanie wysokim blokuje wystąpienie błędu IEEE – Inexact

Każda instrukcja arytmetyczna wykonująca operacje zmiennoprzecinkowe ma specyfikator pola statusu. Specyfikator ten określa które z 4 pól statusu będzie używane do kontroli nad daną instrukcją.

Format pola statusu:

12 11 10 9 8 7 6 5 4 3 2 1 0
i u o z d v td rc pc wre ftz
1 1 1 1 1 1 1 2 2 1 1
    ftz – (Flush-To-Zero) tryb czyszczenia do zera
    wre – (Widest Range Exponent) wielkość wykładnika
    pc – (Precision Control) kontrola precyzji
    rc – (Rounding Control) kontrola zaokrąglania 00
    td – (Traps disabled) tryb w którym zapadki (traps) są zablokowane, nie dotyczy
    głównego pola statusu.
    v – (invalid operation) bity te sygnalizują pojawienie się błędu który jest włączony w polu traps
    d – (Denornal/unnormal)
    z – (Zero divide)
    o – (Overflow)
    u – (Underflow)
    i – (Inexact)

Licznik przedziałów czasowych (ITC – AR 44)

(Interval Time Counter) Jest to 64 bitowy rejestr w którym liczone są kolejne takty zegara. Aplikacje mogą bezpośrednio odczytywać ten licznik i w ten sposób dokonywać obliczeń wykorzystujących pomiar czasu, lub mierzących jakieś osiągi. System może zabronić dostępu do tego rejestru dla nieuprzywilejowanych aplikacji. Kiedy dostęp jest zabroniony, odczyt tego rejestru (z poziomów nieuprzywilejowanych) powoduje błąd. Dane do tego rejestru mogą być zapisywane jedynie przez najbardziej uprzywilejowany poziom. Rejestr ten jest równoważny rejestrowi TSC (Time Stamp Counter) znanego z IA-32 i może być odczytywany za pomocą instrukcji rdtsc (read time stamp counter). System może zabronić dostępu także w przypadku korzystania z trybu IA-32. W tym przypadku kiedy następuje wykonanie instrukcji rdstc (z poziomów nieuprzywilejowanych) powoduje błąd.

Poprzedni stan funkcji (PFS – AR 64)

(Previous Function State) Rejestr ten zawiera wiele pól, które określają poprzedni stan układu rejestrów. Wartości do tych pól są kopiowane automatycznie przy wywołaniu z odpowiednich rejestrów, dla przyspieszenia wywoływań procedur.

Kiedy instrukcja br.call jest wykonana pola są inicjowane nowymi wartościami, a poprzednia wartości PFS są tracone. Kiedy wywoływana jest instrukcja br.ret odpowiednie pola są z powrotem kopiowane do odpowiednich rejestrów.

Format rejestru PFS

63 62 61 58 57 52 51 38 37 0
ppl rv pec rv pfm
2 4 6 14 38
    pfm – (Previous Frame Marker) jest to odpowiednik Oznaczenia Aktualnej Ramki
    Stosu (CFM). Pole to tak jak rejestr CFM jest dodatkowo podzielone na pola:

RRB.PR, RRB.FR, RRB.GR, SOR, SOL, SOF

    pec – (Previous Epilog Count) jest to odpowiednik rejestru EC, (nie biorąc pod uwagę
    części ignorowanej tego rejestru)
    ppl – (Previous Privilege Level) jest to odpowiednik pola pl w rejestrze konfiguracji
    stosu rejestrów (RSC). Operacja przywracania wartości z tego pola do oryginalnego miejsca może spowodować zmianę aktualnego poziomu uprzywilejowania
    rv – (Reserved) pola zarezerwowane

Licznik pętli (LC – AR 65)

(Loop Count) Jest to rejestr 64-bitowy. Rejestr ten wykorzystuje się do zliczania przebiegów pętli. Wartość zawarta w tym rejestrze jest zmniejszana o 1 przy każdym skoku wykonywanym w pętli w której jest określona ilość przebiegów.

Licznik instrukcji końcowych (EC – AR 66)

(Epilog Count) Jest to rejestr którego 6 bitów jest używane do zliczania ostatnia część (epilog) pętli. Epilog jest to ostatnia część pętli w której potok instrukcji nie jest już pełny, lecz powoli opróżnia się (ostatnia instrukcja pętli została już załadowana). Rejestr ten jest wykorzystywany w mechanizmie „wyrolowywania” pętli

Format rejestru EC

63 6 5 0
ig epilog count
58 6

Rejestry Predykatów PR

(predicate registers) są to 1 bitowe rejestry które kontrolują warunkowe wykonywanie instrukcji oraz skoków. Są one używane do przechowywania rezultatów porównań. Rejestry predykatów są podzielona na dwie części. Pierwsza jest nazwana statyczną i zajmuje jedną czwartą całej liczby. Pozostała część rejestrów nazwana jest częścią rotującą. Rejestry te są dynamicznie przydzielane oprogramowaniu, podczas wykonania pętli. Pierwszy rejestr jest tylko do odczytu i ma zawsze wartość prawda. Kiedy ten rejestr jest używany jako cel zapisu jakiegoś wyniku, to wynik ten jest tracony.

Rejestry Skoków BR

(Branch registers) są to 64-bitowe rejestry które są używane do specyfikowania docelowego adresu skoku. Umożliwiają sprawniejsze działanie jednostki przewidywania skoków, oraz wykonywania skoków.

Wskaźnik Instrukcji IP

(Instruction pointer) Jest to rejestr 64 bitowy. W rejestrze tym przechowywany jest adres paczki instrukcji w której znajduje się aktualnie wykonywania instrukcja IA-64. Rejestr IP może być odczytywany bezpośrednio, jednakże nie może być bezpośrednio zapisywany. Rejest ten jest inkrementowany, kiedy paczka zostanie wykonana. Rejestr jest inicjowany nową wartością, w przypadku wykonania skoku.

Oznaczenie Aktualnej Ramki Stosu CFM

(Current Frame Marker) Jest to zespół podrejestrów o łącznej długości 38 bitów. Każda ramka rejestrów jest powiązana ze rejestrem oznaczenia ramki. W tym rejestrze przechowywane są dane na temat aktualnego stanu ramki stosu. Rejestr ten nie może być bezpośrednio odczytywany, ani nie można do niego bezpośrednio nic zapisać, z poziomu aplikacji.

Rejestr ten podzielony jest na podrejestry, które zawierają informacje na temat długości niektórych elementów ramki stosu, oraz trzy rejestry zmiany RRB (Rotating Register Base), które są używane przy rotowaniu rejestrów.

Format rejestru CFM:

37 32 31 25 24 18 17 14 13 7 6 0
RRB.PR RRB.FR RRB.GR SOR SOL SOF
6 7 7 4 7 7
    RRB.PR (Rotate Register Base for Predicate Registers) – podstawa rotujących
    rejestrów predykatowych (6 bitów)
    RRB.FR (Rotate Register Base for Floating-point Registers) – podstawa rotujących
    rejestrów zmiennoprzecinkowych (7 bitów)
    RRB.GR (Rotate Register Base fof General Registers) – podstawa rotujących rejestrów
    ogólnego przeznaczenia (7 bitów)
    SOR (Size Of Rotating portion of stack frame) – długość rotującej części ramki stosu
    dodatkowo można obliczyć ilość rotujących rejestrów który wynosi 8*SOR (4 bity)
    SOL (Size Of Locals portion of stack frame) – długość lokalnej części ramki stosu
    (7 bitów)
    SOF (Size Of stack Frame) – całkowita długość ramki stosu (7 bitów)

Przy wywołaniu rejestr CFM jest kopiowany do pola PFM (Previous Frame Marker) w rejestrze PFS (Previous Function State). Nowe wartości zapisywane do rejestru CFM tworzą nową ramkę stosu. Wszystkie pola RRB są inicjowane wartością 0.

Rejestry PMD

(Performance Monitor Data) Jest to zestaw 64 bitowych rejestrów zawierających dane na temat osiągów komputera. Rejestry te mogą być edytowane tylko przez uprzywilejowane programy, które mają dostęp do niskich poziomów uprzywilejowania. Wartości rejestrów PMD mogą być bezpośrednio odczytywane bez pomocy aplikacji. System operacyjny jest upoważniony do strzeżenia skonfigurowanych przez użytkownika rejestrów. Jeśli rejestry te czytamy z poziomów które nie są wystarczająco uprzywilejowane to rejestry te zwracają zero. Rejestry te są używane do lepszej informacji o osiągach procesora, działają zarówno dla zestawu instrukcji IA-64 jak i IA-32.

Rejestry PMD są podzielone na dwie części. Pierwsza część to tzw. rejestry (PMC) w których znajdują się informacje używane do konfiguracji. Reszta to właściwe rejestry PMD. Znajdują się w nich jedynie dane dotyczące osiągów.

Rejestr Maski Użytkownika UM

(User Mask) Jest 6 bitów flag które informują o aktualnych ustawieniach procesora. Maska użytkownika jest częścią rejestru stanu procesora (PSR). Są one dostępne przez aplikacje napisane dla IA-64.

Format rejestru Maski Użytkownika:

5 4 3 2 1 0
mfh mfl ac up be rv
1 1 1 1 1 1
    rv – (reserved) pole zarezerwowane
    be – (big endian enable) pole to kontroluje sposób zapisu oraz odczytu z/do pamięci.
    Jeśli bit jest ustawiony w pozycji 1 znaczy to ze dostęp do pamięci jest według metody big-endian, natomiast jeśli bit jest ustawiony w pozycji 0 oznacza to dostęp do pamięci według metody little-endian.

Bit ten jest ignorowany jeśli procesor pracuje w trybie IA-32. W tym trybie dostęp do pamięci jest zawsze ustawiony jako little-endian

    up – (user performance monitor enable) pole to kontroluje dostęp do rejestrów PMD
    dla użytkownika. Jeśli bit jest ustawiony w pozycji 1 znaczy to, że rejestry PMD są aktywne, natomiast jeśli bit ma wartość 0 znaczy to, że rejestry PMD są zablokowane
    ac – (alignment check) pole to kontroluje kiedy będzie generowany błąd ustawienia
    danych w pamięci. Wartość 1 tego bitu powoduje generowanie błędu przy każdym nieustawionym dostępie do pamięci, natomiast ustawienie tego bitu w pozycji 0 powoduje, że nieustawiony dostęp do pamięci może powodować błąd, ale nie musi.
    mfl – (Mark Floating-point Lower) Ten bit sygnalizuje dostęp do statycznej części
    rejestrów zmiennoprzecinkowych. Bit ten jest ustawiany w pozycji wysokiej wtedy gdy jakakolwiek instrukcja która używała statycznej części rejestrów zmiennoprzecinkowych zakończyła swoje działanie. Bit ten nie jest nigdy automatycznie zerowany, aby sprawdzić następne odwołanie do statycznej części rejestrów zmiennoprzecinkowych należy wcześniej wpisać do tej części maski użytkownika zero.
    mfh – (Mark Floating-point Higher) Ten bit sygnalizuje dostęp do rotującej części
    rejestrów zmiennoprzecinkowych. Bit ten jest ustawiany w pozycji wysokiej wtedy gdy jakakolwiek instrukcja która używała rotującej części rejestrów zmiennoprzecinkowych zakończyła swoje działanie. Bit ten nie jest nigdy automatycznie zerowany, aby sprawdzić następne odwołanie do rotującej części rejestrów zmiennoprzecinkowych należy wcześniej wpisać do tej części maski użytkownika zero.

Rejestry Identyfikacji Procesora CPUID

(Procesor Identification) Są to rejestry które identyfikują konkretny egzemplarz procesora, każdy rejestr ma po 64 bity. Rejestry te są podzielone na dwie grupy. Pierwsza grupa nazwana stała (fixed region) która zajmuje rejestry od 0 do 4, oraz grupa zwana zmienna (variable region) czyli rejestry od 5 w górę. Zapis do rejestrów identyfikacji procesora jest niemożliwy ponieważ nie ma instrukcji które by umożliwiały taką operację.

Informacja o producencie procesora jest umieszczona w pierwszym oraz drugim rejestrze CPUID. W rejestrze tym wyspecyfikowana jest nazwa producenta zapisana w formacie ASCII. Sumarycznie długość napisu nie może przekraczać 16 bajtów, gdyż każdy rejestr ma długość 64 bitów, co w sumie daje wartość 16 bajtów na nazwę producenta. Bity które są po ostatnim znaku aż do końca drugiego rejestru wynoszą zero.

Numer seryjny procesora jest umieszczony w rejestrze o numerze 2. Jeżeli konkretny model procesora posiada numer seryjny to rejestr ten zwraca 64 bitowy numer seryjny, w przeciwnym wypadku rejestr ten jest zablokowany i odwołanie do niego zwraca zero.

Jeżeli numer seryjny istnieje to jest powiązany z 32-bitową informacją o wersji procesora, która jest zawarta w rejestrze o numerze 3.

format rejestru CPUID.[3]

63 40 39 32 31 24 23 16 15 8 7 0
rv archerev family model revision number
24 8 8 8 8 8
    number – numer ostatniego zaimplementowanych w danym procesorze rejestru
    CPUID, wartość ta jest o jeden mniejsza niż wynosi liczba wszystkich rejestrów CPUID
    revision – numer poprawki procesora, liczba ta mówi nam do jakiego wydania należy
    dany procesor
    model – numer ten reprezentuje model procesora, jest to numer unikalny wśród
    procesorów danej rodziny
    family – numer rodziny procesorów, jest to unikalny numer i nie może się powtarzać
    archrev – (architecture revision) jest to numer który mówi nam ile było zmian
    architektury do czasu wyprodukowania danego procesora
    rv – (reserved) pole zarezerwowane

Kombinacja 64 bitowego numeru seryjnego wraz z 32 bitową informacją o wersji jest wartością unikalną i nie może się powtarzać wśród procesorów IA-64.

W rejestrze CPUID o numerze 4 mają znajdować się informacje o cechach procesora wykonanego w architekturze IA-64. Jest to zestaw flag które pokazują czy dana cecha jest zaimplementowana w konkretnym procesorze. Kiedy bit wynosi 1 znaczy to, że procesor obsługuje daną czynność, w przeciwnym przypadku wartość wynosi zero. Rejestr ten nie zawiera cech zestawu instrukcji IA-32.

Na dzień dzisiejszy istnieje specyfikacja jedynie jednego bitu z tego rejestru. Bit ten znajduje się w polu o numerze 0 i informuje czy procesor obsługuje instrukcję brl (Long BRanch) czyli tak zwanego długiego skoku.



komentarze

Copyright © 2008-2010 EPrace oraz autorzy prac.