Hardware Reference
In-Depth Information
die Bedingung
xy
erfullt ist“ Ziel der Bedingten Befehle ist stets, bedingte
Sprunge zu vermeiden.
MMIX
bietet die Bedingten Befehle Conditional Set
CSxx
und Zero or Set
ZSxx
,wobei
xx
fur eine der von den bedingten Sprungen her bekannten Be-
dingungen steht. Der Befehl
CSxx $X,$Y,$Z
setzt
$X
zu
$Z
, falls
$Y
die an-
gegebene Bedingung erfullt. Ansonsten lasst er
$X
unverandert. Der Befehl
ZSxx $X,$Y,$Z
setzt demgegenuber das Register
$X
andernfalls zu null. In
vielen Fallen lassen sich dadurch Verzweigungen vermeiden. Wir betrachten
beispielsweise folgendes Struktogramm:
i==0
Ja
Nein
m j
m k
Das e
zienteste
MMIX
-Programm dazu lautet:
SET m,j
CSNZ m,i,k
In diesem Zweizeiler wird
m
mit dem Wert von
j
vorbelegt, so als wurde
der linke Zweig ausgefuhrt. Nur, falls diese Belegung falsch ist, wird
m
mit
k
uberschrieben. Es ist hier also keine bedingte Verzweigung erforderlich.
Ohne Unterbrechung des Programmflusses laufen immer zwei Befehle durch
die Pipeline. Einer davon wird unnotigerweise ausgefuhrt, aber das lasst sich
nicht vermeiden.
Das IA-64-Programmiermodell kennt 64 Ein-Bit-Register
p0
...
p63
,dieso
genannten
Predication Register
. Alle Vergleichsbefehle schreiben das Ergebnis
des Vergleichs in eines dieser Register. Die Ausfuhrung jedes Befehls kann von
jedem Predication Register abhangig gemacht werden. Beispiel:
cmp.eq p6,p0=r33,r32
(p6) add r34,r35
Hier vergleicht der erste Befehl die Register
r32
und
r33
miteinander. Das
Ergebnis des Vergleichs wird in Predication Register
p6
abgelegt und das
Komplement in
p0
4
. Die folgende Addition wird nur ausgefuhrt, wenn
p6
den Wert eins enthalt.
Wir werden in Abschnitt 3.2.3 sehen, wie bedingte Sprungbefehle die Be-
fehlsausfuhrung beschleunigen konnen. Optimierende Compiler verwenden
Bedingte Befehle, wo immer moglich.
4
Das Predication Register
p0
ist immer null und kann nicht uberschrieben wer-
den. Es mussen bei dem Vergleichsbefehl aber zwei Register fur den Wert und sein
Komplement angegeben werden.