Information Technology Reference
In-Depth Information
Sprungoperation im Trace-Buffer codiert werden kann (d), während letzteres erfor-
dert, dass zunächst eine stop-Operation benutzt wird, die sich nur verzögert durch
eine unbedingte Sprungoperation ersetzen lässt. Dies ist selbstverständlich nur mög-
lich, wenn die Laufzeitumgebung die Adresse des realen Befehls, in dem die stop-
Operation codiert ist kennt, was zunächst bedeutet, dass der zuletzt bearbeitete
Trace-Buffer-Eintrag umständlich durchsucht werden muss. Der zeitaufwendige
Schritt ist jedoch vermeidbar, wenn die benötigte Befehlsadresse als Seiteneffekt der
stop-Operation, z.B. in einem Spezialregister des realen Prozessors, gesichert wird.
Allerdings muss der reale Prozessor hierzu über eine entsprechende Funktionalität
verfügen.
Trace-Cache
Trace-Buffer
e
V1:
... beq
V2;;
L1
bhi
[r3+8];;
a
f
... bhi
V3;;
... beq
V1;;
r3
... stop
...;
L3
c
V2:
... stop
A1;;
V3:
... stop
L3;;
d
bra
V4;;
g
b
V4:
...
Laufzeitumgebung
Bild 4.11. Binden von Trace-Buffer-Einträgen. Statt die einzelnen Einträge jeweils aus der Lauf-
zeitumgebung heraus aufzurufen, werden direkte oder indirekte Sprünge darin codiert
Indirektes Binden
Das nachträgliche Ersetzen einer stop-Operation durch eine unbedingte Sprungope-
ration hat den Nachteil, dass einfache Optimierungen ohne zusätzliche, normaler-
weise zeitaufwendige Aktionen nicht durchführbar sind. So lässt sich z.B. die her-
vorgehoben gesetzte bedingte Sprungoperation bhi und die stop-Operation zwar
prinzipiell zusammenfassen (sofern keine weiteren Operationen zwischen diesen
codiert sind), da die hierbei benötigte Befehlsadresse des bedingten Sprungbefehls
bhi der Laufzeitumgebung ohne eine explizite Suche nicht bekannt ist, verzichtet
man i.Allg. jedoch darauf.
Als Alternative lässt sich die Optimierung aber bereits mit der Binärübersetzung
durchführen, wenn nämlich die realen Befehlsfolgen indirekt aneinander gebunden
werden. Angenommen, das reale Arbeitsregister r3 in Bild 4.11 enthält die Adresse
des für die Zieladressumsetzung erforderlichen Trace-Cache-Eintrags, dann wird
wegen des im grau unterlegten Feld eingetragenen Zeigers g zunächst die Laufzeit-
umgebung gestartet 1 . Kommt es zu einem späteren Zeitpunkt zu einer Binärüberset-
zung des separierten Programmpfads, muss nur noch der mit g durch den mit c mar-
kierten Zeiger ersetzt werden, um bei erneuter Ausführung des bedingten indirekten
1.
Der in der indirekten Sprungadresse verwendete Offset 8 ist erforderlich, weil der Zeiger r3 auf
den Trace-Cache-Eintrag insgesamt und nicht auf das dritte Element dieses Eintrags verweist.
Search WWH ::




Custom Search