Four execution units are available for each instruction. These consist
of:
- I-Unit, an integer execution unit
- M-Unit, a memory execution unit
- F-Unit, a floating point execution unit
- B-Unit, a branch execution unit
Additionally, instructions are categorized by type. This allows for a
mapping of the relationship between instruction types and the units they execute
on:
Instruction
Type |
Description |
Execution
Unit Type |
| A |
Integer ALU |
I-Unit or M-Unit |
| I |
Non-ALU Integer |
I-Unit |
| M |
Memory |
M-Unit |
| F |
Floating Point |
F-Unit |
| B |
Branch |
B-Unit |
| L+X |
Extended |
I-Unit |
|
Source: IA-64 Application ISA Guide 1.0 [3] |
Tuples of 41-bit instructions are packaged with a 5-bit template (see EPIC)
into a 128-bit bundle as shown below:
| 127
87 |
86
46 |
45
5 |
4
0 |
| Instruction Slot 2 |
Instruction Slot 1 |
Instruction Slot 0 |
Template |
| <== 41
==> |
<== 41
==> |
<== 41
==> |
<= 5 => |
The 5-bit template allows for the theoretical encoding of 32 cases of
parallel/serial execution on a combination of execution units, but currently
only 24 are defined. Interestingly, all bundles must be organized to execute in
parallel with the exception of I-Unit and M-Unit combinations (an I-Unit
execution followed by and I-Unit and an M-Unit, or an M-Unit followed by and
I-Unit and an M-Unit).
The following table, extracted from [3] details the possible template values:
| Template |
Slot 0 |
Slot 1 |
Slot 2 |
| 00 |
M-unit |
I-unit |
I-unit |
| 01 |
M-unit |
I-unit |
I-unit |
|
| 02 |
M-unit |
I-unit |
|
I-unit |
| 03 |
M-unit |
I-unit |
|
I-unit |
|
| 04 |
M-unit |
L-unit |
X-unit |
| 05 |
M-unit |
L-unit |
X-unit |
|
| 06 |
|
| 07 |
|
| 08 |
M-unit |
M-unit |
I-unit |
| 09 |
M-unit |
M-unit |
I-unit |
|
| 0A |
M-unit |
|
M-unit |
I-unit |
| 0B |
M-unit |
|
M-unit |
I-unit |
|
| 0C |
M-unit |
F-unit |
I-unit |
| 0D |
M-unit |
F-unit |
I-unit |
|
| 0E |
M-unit |
M-unit |
F-unit |
| 0F |
M-unit |
M-unit |
F-unit |
|
| 10 |
M-unit |
I-unit |
B-unit |
| 11 |
M-unit |
I-unit |
B-unit |
|
| 12 |
M-unit |
B-unit |
B-unit |
| 13 |
M-unit |
B-unit |
B-unit |
|
| 14 |
|
| 15 |
|
| 16 |
B-unit |
B-unit |
B-unit |
| 17 |
B-unit |
B-unit |
B-unit |
|
| 18 |
M-unit |
M-unit |
B-unit |
| 19 |
M-unit |
M-unit |
B-unit |
|
| 1A |
|
| 1B |
|
| 1C |
M-unit |
F-unit |
B-unit |
| 1D |
M-unit |
F-unit |
B-unit |
|
| 1E |
|
| 1F |
|