CPU-Grundlagen: VLIW-Architekturen & Intels Itanium

Allgemeines Instruktionsformat

Das folgende Bild zeigt ein Beispiel für ein allgemeines Instruktionsformat: Je sieben Bits für die beiden Source-Register und das Zielregister (somit je 128 adressierbare Register), 14 Bits für den Operationscode und 6 Bits für die Bedingungen (Predicate-Flags) stehen zur Verfügung.

Die Verknüpfung mit Predicate Flags setzt die Itanium-Architektur nahezu durchgängig um. Nur sehr wenige Instruktionen sind ausschließlich unbedingt ausführbar. Der Compiler kann 64 Predicate Flags (P0 bis P63) einsetzen. Die Nummer des Flags, mit dem ein Befehl verknüpft ist, ist im Befehlsformat im 6 Bit großen Predicate-Feld angegeben. Die Verknüpfung mit P0, das fest auf "1" steht, ergibt eine unbedingte Ausführung.

Drei solcher Instruktionen fasst die Itanium-Architektur zu einem Instruktions-Bundle zusammen (Bild Teil b). Diese Gruppierung unterliegt strikten Regeln, es sind keineswegs alle Kombinationen erlaubt:

  • Die drei Instruktionen müssen voneinander unabhängig ausführbar sein, Datenabhängigkeiten dürfen nicht vorkommen.

  • Nicht jeder Instruktions-Slot innerhalb des Instruktionsbündels darf beliebig besetzt sein, derzeit sind 24 Kombinationen erlaubt. Das Template kodiert in fünf Bits (= 32 maximal mögliche Kombinationen), welche Kombination in dem aktuellen Instruktionsbündel vorliegt.

Im Assembler ist es möglich, dass der Software-Entwickler die Instruktionsbündel selbst definiert und zusammenfasst. Dies ist mit der Gefahr einer Datenabhängigkeit verbunden [17]. In diesem Fall löst der Prozessor eine Ausnahme aus, da für ihn das Programm nicht mehr korrekt ausführbar ist.