Information Technology Reference
In-Depth Information
dass sie unter Berücksichtigung der Abhängigkeiten möglichst früh zur Ausführung
gelangen. So wird die virtuelle Subtraktion aus Zeile 2 in Bild 4.9 der Nemesis-
Befehlsfolge z.B. in Zeile 1 des Trace-Buffer-Eintrags codiert. Da die virtuelle
Addition in Zeile 3 das Ergebnis der vorangehenden Subtraktion in r1 verknüpft, ist
es nicht möglich, Subtraktion und Addition parallel auszuführen, weshalb letztere
im zweiten VLIW-Befehl eingetragen werden muss.
Der nachfolgende, virtuelle and-Befehl in Zeile 4 des separierten virtuellen Pro-
grammpfads weist keine echten Datenabhängigkeiten zur virtuellen Subtraktion
bzw. Addition auf und lässt sich somit parallel zur realen Subtraktion bereits in Zeile
1 des Trace-Buffer-Eintrags codieren. Dabei käme es aufgrund der Antiabhängigkeit
über r7 jedoch, falls das Ergebnis in r7 eingetragen würde, zu einem Fehler, weil der
alter Registerinhalt von der im zweiten realen VLIW-Befehl auszuführenden Addi-
tion noch benötigt wird. Aus diesem Grund verwendet man für das Ergebnis der rea-
len and-Operation in Zeile 1 des Trace-Buffer-Eintrags das sog. Schattenregister r7'.
Der Sprungbefehl in Zeile 5 der virtuellen Befehlsfolge wertet den Inhalt des Bedin-
gungsregisters cr0 aus, das mit dem virtuellen and-Befehl unmittelbar zuvor beein-
flusst wurde. Da der separierte Programmpfad an dieser Stelle verzweigt und Neme-
sis X verzweigende Sprungoperationen langsamer als nicht verzweigende Sprungo-
perationen verarbeitet, wird im Trace-Buffer-Eintrag die entsprechende Sprungbe-
dingung negiert codiert (ein unbedingter virtueller Sprungbefehl würde auf diese
Weise entfernt werden können). Das Verzweigen der realen VLIW-Befehlsfolge zur
Sprungmarke V2 ist dabei gleichbedeutend mit dem Verlassen des in der virtuellen
Nemesis-Befehlsfolge grau unterlegten Bereichs, wobei die Interpretation mit dem
virtuellen orn-Befehl in Zeile 6 neu zu starten ist. Regulär müssten sich hierbei
natürlich die bis zu diesem Zeitpunkt erzeugten Ergebnisse in den Registern r0 bis
r15 befinden, was jedoch nicht der Fall ist, da die im ersten VLIW-Befehl des Trace-
Buffer-Eintrags ausgeführte reale and-Operation ihr Ergebnis in Register r7' ablegt.
Deshalb wird nach dem Sprung zur Sprungmarke V2 mit der set-Operation r7'
zunächst nach r7 transferiert (wegen der noch zu beschreibenden selektiven Operati-
onsauswahl geschieht dies allerdings nur, wenn dem Schattenregister zuvor ein
Ergebnis zugewiesen wurde). Da möglicherweise mehrere Registerinhalte umge-
speichert werden müssen, enthält die set-Operation eine Bitmaske, in der alle zu
kopierenden Register durch ein gesetztes Bit gekennzeichnet sind (inklusive der
Bedingungsregister cr0 bis cr3). Parallel zur set-Operation wird in Zeile 7 des
Trace-Buffers noch die Operation stop ausgeführt und dadurch der in der Laufzeit-
umgebung eingebettete Interpreter mit der als Argument codierten Adresse reakti-
viert. Es sei angemerkt, dass sich die benötigte Wirkung statt durch eine speziali-
sierte Operation auch auf eine andere, im nächsten Abschnitt noch genauer erläu-
terte Art und Weise erzielen lässt.
Alle weiteren, entlang des separierten Programmpfads noch folgenden virtuellen
Befehle weisen eine Kontrollflussabhängigkeit zum virtuellen Sprungbefehl in Zeile
5 auf. Falls also eine reale Operation im Trace-Buffer-Eintrag vor die Sprungopera-
tion in Zeile 2 verschoben werden soll, ist dessen Ergebnis in ein Schattenregister zu
schreiben. Dies geschieht z.B. mit dem virtuellen xor-Befehl in Zeile 7 der Nemesis-
Search WWH ::




Custom Search