Każda instrukcja jak to zostało zauważone przy okazji omawiania paczkowania instrukcji ma długość 41 bitów. Istnieją jednakże tak zwane instrukcje rozszerzone (extended) które zajmują 82 bity czyli dwa miejsca w paczce instrukcji. Instrukcje w IA-64 są podzielone na 6 kategorii. Każda instrukcja może być wykonana przez jeden lub więcej typów jednostek wykonawczych.
Tabela przedstawiająca powiązania pomiędzy typem instrukcji a jednostką wykonawczą, do która wykonuje daną instrukcję.
Typ instrukcji | Opis | Typ jednostki wykonawczej |
A | stałoprzecinkowa arytmetyczno-logiczna | stałoprzecinkowa lub zarządzająca pamięcią |
I | stałoprzecinkowa, nie arytmetyczno-logiczna | stałoprzecinkowa |
M | operująca na pamięci | zarządzająca pamięcią |
F | zmiennoprzecinkowa | zmiennoprzecinkowa |
B | skok | zarządzająca skokami |
L+X | rozszerzona | stałoprzecinkowa |
Ogólnie format instrukcji kodowany za pomocą 41 bitów można przedstawić za pomocą następującego schematu:
0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
opcode | misc | pole3 | pole2 | pole1 | qp |
0-5 | qp – (qualifying predicate register source) - pole zawierające adres odpowiedniego | |
rejestru predykatów | ||
6-12 | pole1 – pole które jest w większości typów instrukcji wykorzystywane do | |
przechowywania adresu źródłowego lub docelowego odpowiedniego rejestru (ogólnego przeznaczenia lub zmiennoprzecinkowego). Inaczej jest w przypadku instrukcji skoków, pole to jest wtedy dodatkowo podzielone. Pierwsze 3 bity zajmuje zakodowany typ skoku, lub adres źródłowy albo docelowy rejestru skoków, następne 3 bity są ignorowane, a ostatni bit pola zawiera kod operacji wcześniejszego pobierania. Jeszcze inaczej interpretuje się to pole w przypadku instrukcji porównania. Wtedy pierwsze 6 bitów to adres docelowego rejestru skoków, a ostatni bit kod komplementarnej relacji porównania | ||
13-19 | pole2 – pole to jest przez większą część instrukcji używane do przechowywania | |
adresu źródłowego lub docelowego odpowiedniego rejestru (ogólnego przeznaczenia lub zmiennoprzecinkowego). W przypadku instrukcji alokacji w polu tym zapisana jest wielkość ramki. W tym polu mogą się także znajdować w zależności od instrukcji takie informacje jak: pozycja bitu testowego, lub bitu uzyskanego, przewidziana najbliższa maska | ||
20-26 | pole3 – pole to jest przez większą część instrukcji używane do przechowywania | |
adresu źródłowego lub docelowego odpowiedniego rejestru (ogólnego przeznaczenia, zmiennoprzecinkowego lub aplikacyjnego). Instrukcje multimedialne wykorzystują to pole do zakodowanie stanu licznika przesunięć. Może być to pole także wykorzystane do zapisania najbliższej przewidzianej maski, pozycji bitu testowego | ||
27-36 | misc – pole różnego przeznaczenia, w tym polu mogą znajdować się najróżniejsze | |
informacje. Przykładem może być: rozszerzenie pola opcode, różne flagi wykorzystywane przez instrukcje, licznik przesunięć, podpowiedzi przy instrukcjach skoku, itp. | ||
37-40 | opcode – (major opcode) główny kod instrukcji, opisany niżej dokładniej |
Każde 4 ostatnie bity (37:40) w instrukcji to tak zwany główny kod instrukcji (major opcode).
główny kod instrukcji | typ instrukcji | |||||
I/A | M/A | F | B | L+X | ||
0 00 | Misc | mem mgnt | FP misc | Misc/indi branch | misc | |
1 01 | mem mgnt | FP misc | indirect call | |||
2 02 | Nop | |||||
3 03 | ||||||
4 04 | Deposit | Int Ld +Reg/getf | FP Compare | IP-rel branch | ||
5 05 | Shift/Test bit | Int Ld/St + Imm | FP Class | IP-relative call | ||
6 06 | FP Ld/St+Reg/setf | movl | ||||
7 07 | MM Mpy/Shift | FP Ld.St+lmm | ||||
8 08 | ALU/MM ALU | ALU/MM ALU | fma | |||
9 09 | Add Imm | Add Imm | fma | |||
10 0A | fms | |||||
11 0B | fms | |||||
12 0C | Compare | Compare | fnma | |||
13 0D | Compare | Compare | fnma | |||
14 0E | Compare | Compare | fselect/xma | |||
15 0F |
Nieużywane pola głównego kodu (czyli puste miejsca w tabeli) można interpretować na trzy sposoby:
instrukcja jest interpretowana jako NOP | ||
zarezerwowana wartość pola, wystąpienie takiej wartości powoduje | ||
generowanie błędu | ||
generowanie błędu, jeśli rejestr predykatowy specyfikowany przez pole qp | ||
instrukcji (bity 0:5) ma wartość 1, lub interpretowanie instrukcji jako NOP w przeciwnym wypadku |
Copyright © 2008-2010 EPrace oraz autorzy prac.