-
Die
vorliegende Erfindung betrifft ein Computersystem zum bedingten
Durchführen
einer in einem Computerbefehl definierten Operation, eine Ausführungseinheit
zur Verwendung in dem Computersystem und ein Verfahren zum Ausführen von
Befehlen.
-
Computersysteme
sind bekannt, bei denen die Ausführung
eines Befehls auf einem im Befehl identifizierten oder adressierten
Wert basiert. Bei diesen Computersystemen wird jedoch die im Befehl
definierte Operation entweder durchgeführt oder nicht durchgeführt.
-
Es
sind auch Computersysteme bekannt, die nach sogenannten gepackten
Operanden handeln. Das heißt,
jeder Operand umfasst eine Vielzahl gepackter Objekte, die in jeweiligen
Wegen des Operanden gehalten werden. Der Packungsgrad kann variieren,
und bei 64 Bit-Operanden
ist Bereitstellung von Byte-Packung (acht Objekte pro 64-Bit-Operand),
Halbwortpackung (vier Objekte pro 64-Bit-Operand) und Wortpackung (zwei
Objekte pro 64 Bit-Operand) bekannt. Wenn bei bestehenden Computersystemen
solche gepackte Operanden definierende Befehle prädiziert
sind, veranlasst die Prädikation,
dass die Operation entweder bei allen Operanden oder überhaupt
nicht durchgeführt
wird.
-
Ein
Aufsatz von LEE R B: "SUBWORD
PARALLELISM WITH MAX-2" IEEE
MICRO, US, IEEE INC. NEW YORK. Bd. 16, Nr. 4, 1. August 1996 (01.08.1996),
SS. 51–59,
XP000596513 ISSN: 0272–1732,
offenbart bedingte Ausführung
mittels Sättigungsarithmetik.
Sättigungsarithmetik
handhabt effizient die bei paralleler Subwort-Arithmetik auftretenden mehrfachen Überläufe. Vorzeichenbehaftete
bzw. vorzeichenlose Sättigung
sind bedingte Operationen, die auf der Basis eines Vergleichs entsprechender
Subwörter
in Registern ein Subwort als das Ergebnis auswählen.
-
Die
vorliegende Erfindung versucht, eine verbesserte Vorrichtung und
ein verbessertes Verfahren zum bedingten Durchführen von Operationen bereitzustellen.
-
Gemäß einem
Aspekt der vorliegenden Erfindung wird eine Ausführungseinheit zur Verwendung
in einem Computersystem zum bedingten Durchführen einer in einem Computerbefehl
definierten Operation bereitgestellt, wobei die Ausführungseinheit
Folgendes beinhaltet: einen ersten und zweiten Eingangsspeicher zum
Halten von jeweils einem ersten und zweiten Operanden, auf denen
eine in dem Befehl definierte Operation durchgeführt werden soll, wobei jeder
Speicher eine Vielzahl von Wegen, von denen jeder ein Objekt hält, definiert;
eine Vielzahl von Operatoren, die jeweils mit den Wegen in Verbindung
stehen, um eine in dem Befehl spezifizierte Operation auf Objekten
in entsprechenden Wegen des ersten und zweiten Quelloperanden durchzuführen; einen
Zielpuffer zum Halten der Ergebnisse der Operation auf eine Weg-um-Weg-Basis;
und Auswahlmittel, um für
jeden Weg in Abhängigkeit
von gespeicherten Bedingungswerten festzustellen, ob die Operation
auf Objekten in jenem Weg ausgeführt
werden soll oder nicht.
-
Die
Erfindung stellt auch ein Computersystem bereit, das eine solche
Ausführungseinheit
aufweist.
-
Das
Computersystem kann ein Bedingungscoderegister zum Halten der Bedingungswerte
in der Form eines Satzes von Bedingungscodes beinhalten. Jeder Bedingungscode
ist vorzugsweise ein Mehrbit-Bedingungscode.
-
Das
Computersystem kann auch ein Testregister zum Halten eines Testcodes
umfassen, wobei das Testregister durch den Befehl adressiert wird.
In diesem Fall kann der Testcode mit ausgewählten Bedingungscodes des Satzes
verglichen werden.
-
Die
Ausführungseinheit
kann einen Bedingungscodegenerator zum Generieren des Satzes von
Bedingungscodes, die auf eine Ausführung eines Befehls reagieren,
beinhalten. Bei der beschriebenen Ausführungsform entspricht die Zahl
der Bedingungscodes im Satz der Höchstzahl von Wegen in dem ersten
und zweiten Quelloperanden. Wenn Operanden in einem geringeren Grad
gepackt sind, werden Bedingungscodewerte für jeden Weg des gepackten Operanden
bewertet, und diese Werte werden dann verwendet, um zwei oder mehr
Bedingungscodes zu setzen, so dass jeder einzelne Bedingungscode
im Satz ungeachtet des Packungsgrads des Quelloperanden generiert
wird. Bei einer anderen Ausführungsform
werden Bedingungscodes auch für
gepackte Objekte mit weniger als der maximalen Packungsdichte nur
für jeden
Weg generiert.
-
Ein
anderer Aspekt der Erfindung stellt ein Verfahren zum Ausführen von
Befehlen auf Operanden, die eine Vielzahl gepackter Objekte enthalten,
bereit, wobei das Verfahren Folgendes beinhaltet: Zugreifen auf mindestens
einen Quelloperanden, der eine Vielzahl gepackter Objekte in jeweiligen
Wegen enthält;
Zugreifen auf gespeicherte Bedingungswerte, um für jeden Weg festzustellen,
ob eine in dem Befehl definierte Operation auf jenem Weg des Operanden
implementiert werden soll oder nicht; und Durchführen der Operation und Aktualisieren
eines Zieloperanden lediglich in den Wegen, für die der gespeicherte Bedingungswert
anzeigt, dass die Operation implementiert werden sollte.
-
Für ein besseres
Verständnis
der vorliegenden Erfindung, und um zu zeigen, wie dieselbe verwirklicht werden
kann, wird nunmehr beispielhaft auf die beiliegenden Zeichnungen
verwiesen; es zeigen:
-
1 ein schematisches Blockdiagramm
zur Veranschaulichung eines Prozessors;
-
2 ein Diagramm zur Veranschaulichung
der Codierung zweier "gepackter" Befehle;
-
3 eine Veranschaulichung
mehrerer unterschiedlicher 32-Bit-Befehlsformate;
-
4 eine Veranschaulichung
des Inhalts eines Textregisters;
-
5 eine Veranschaulichung
des Inhalts eines Bedingungscoderegisters;
-
6 ein Diagramm zur Veranschaulichung
des Setzens von Bedingungscodes; und
-
7 ein Diagramm zur Veranschaulichung
der Verwendung von Bedingungscodes.
-
Das
hierin beschriebene Computersystem ist in 1 in einer schematischen Darstellung
des Systems schematisch veranschaulicht. In 1 bezeichnet das Bezugszeichen 2 einen
Programmspeicher, der Programme in Form einer Vielzahl von Befehlen
hält. Der
Programmspeicher 2 ist mit einem Befehlscache (Befehlspufferspeicher) 3 verbunden,
der mit der Befehlshol-/decodierschaltung 4 verbunden ist.
Die Hol-/Decodierschaltung gibt Adressen an den Programmspeicher
aus und erhält
bei jeder Holoperation einen 64-Bit-Befehl vom Programmspeicher 2 (oder
Cache 3). Jeder 64-Bit-Befehl kann zwei Operationen oder
eine einzige Operation definieren. Die Decodiereinheit 4 bewertet
den Operationscode (Opcode) und überträgt die entsprechenden
Steuersignale entlang X- und Y-Kanälen 5x , 5y . Jeder Kanal umfasst eine SIMD-Ausführungseinheit 8x , 8y ,
die drei Datenverarbeitungseinheiten, MAC, INT und FPU, und eine
Lade-/Speichereinheit, LSU 6, enthält. Jede Datenverarbeitungseinheit
MAC, INT und FPU und die Lade/Speichereinheiten LSU arbeiten nach einem
SIMD- (Ein-Befehl-mehrere-Daten-) Prinzip gemäß dem im SIMD-Weg ausgedrückten Befehl
gemäß dem folgenden
Protokoll, das den Packungsgrad von Objekten für Verarbeitungsoperationen
für gepackte
Daten definiert:
- (B) – 8-Bit-Objekte (b0 ...
b7)
- (H) – 16-Bit-Objekte
(h0 ... h3)
- (W) – 32-Bit-Objekte
(w0 ... w1)
- (L) – 64-Bit-Objekte
(I)
- (S) – 32-Bit-Gleitpunkt
- (D) – 64-Bit-Gleitpunkt
-
Wenn
der Befehl eine Datenverarbeitungsoperation definiert, wird sie
für jeden
Kanal 5x , 5y ,
an die entsprechende Datenverarbeitungseinheit MAC, INT oder FPU
geliefert, und wenn er eine Lade-/Speicher-Operation definiert,
wird sie an die Lade-/Speichereinheit LSU geliefert. Datenwerte
werden in die und aus den MAC-Datenverarbeitungseinheiten geladen,
in eine und aus einer gemeinsamen Registerdatei 10, die
sechzehn 64-Bit-Sonderzweckregister entlang Registerzugriffspfaden 12x , 12y ,
enthält.
Datenwerte werden in die und aus den INT- und FPU-Datenverarbeitungseinheiten
und den Lade-/Speichereinheiten LSU geladen, in eine und aus einer
zweiten Registerdatei 11, die vierundsechzig 64-Bit-Mehrzweckregister
enthält.
Für diese Zugriffe
werden Registerpfade 14x 14y , bereitgestellt. Der den gegenwärtigen Befehl
anzeigende Programmzähler
PC kann über
eines der Mehrzweckregister (das PC-Register) gelesen werden. Ein
anderes Mehrzweckregister bildet ein Steuer- und Statusregister.
Die Mehrzweckregister beinhalten auch ein Bedingungscoderegister
(CCreg) und ein Testregister (TSTreg), die im Folgenden detaillierter
besprochen werden.
-
Jeder
Registerzugriffspfad 12, 14 trägt drei Adressen von der Zugriffseinheit,
zwei Quelladressen SRC1, SRC2 und eine Zieladresse DST. Im Falle
von Datenverarbeitungsoperationen definieren die Quelladressen SRC1,
SRC2 Register in den Registerdateien 10, 11, die
Quelloperanden für
die Verarbeitung durch die Datenverarbeitungseinheit enthalten.
Die Zieladresse DST identifiziert ein Zielregister, in das ein Datenverarbeitungsergebnis
gegeben wird. Die Operanden und Ergebnisse werden zwischen der Registerdatei 10 oder 11 und
der jeweiligen Datenverarbeitungseinheit über die Zugriffspfade 12, 14 befördert. Im
Fall von Lade-/Speicheroperationen erlauben die Befehlsformate das
Formulieren von Speicherzugriffsadressen Ax,
Ay aus in den Registern gehaltenen Datenwerten,
wie in unserer gleichzeitig anhängigen
Anmeldung Nr. (PWF Ref: 92472)-beschrieben, wie später beschrieben.
Die Lade-/Speichereinheiten greifen über einen Dual-Port-Datencache
(Datenpufferspeicher mit getrennten Ein-Ausgängen) DCACHE 15 auf
einen gemeinsamen Adressraum in Form eines Datenspeichers 16 zu.
Zu diesem Zweck hat jede Lade-/Speichereinheit einen 64-Bit-Datenbus
Dx, Dy und einen 64-Bit-Adressbus
Ax, Ay.
-
Die
Architektur unterstützt
zwei Typen von Befehlen, sogenannte "lange Befehle" und "Duale-Operation-Befehle". Jeder 64-Bit umfassende
Duale-Operation-Befehl definiert zwei 31-Bit-Operationen auf die
in 2 veranschaulichten
Weise. Das heißt,
dass jede 64-Bit-Sequenz
zwei 32-Bit-Befehlsabschnitte mit den Bezeichnungen INST1 und INST2
enthält.
Jeder Befehl enthält
auch einen bezeichneten Satz von Identifikationsbits, die den Typ
jeder Operation identifizieren. In 2 gibt
es zwei solcher Bits an den Binarstellen 31 und 68,
die in 2 mit ID1 und
ID2 bezeichnet sind. Bei dieser Ausführungsform sind die Operationen
in Datenverarbeitungstypen (DP-Typen) oder Lade-/Speichertypen (LD/ST-Typen)
eingeteilt. Die zulässigen
Kombinationen sind zwei Datenverarbeitungsoperationen (ID1, ID2,
beide auf "0" gesetzt"), zwei Lade-/Speicheroperationen
(ID1, ID2, beide auf "1" gesetzt) oder eine
Datenverarbeitungs- und eine Lade-/Speicheroperation (ID1 = 0, ID2
= 1).
-
3 veranschaulicht mehrere
Grundformate der 32-Bit-Datenverarbeitungsabschnitte von Duale-Operation-Befehlen.
Jede 32-Bit-Operation erfordert zur Ausführung die Ressourcen von einer
Lade-/Speichereinheit oder von einer oder mehreren SIMD-Datenverarbeitungseinheiten
(MAC, INT; FPU). Folglich können
normalerweise zwei 32-Bit-Operationen
gleichzeitig ausgeführt
werden, jeweils eine in jedem der X- und Y-Kanäle. Im Folgenden sind die X-
und Y-Kanäle
manchmal als rechte und linke Seite des Prozessors bezeichnet.
-
Format
(1) definiert Register-Register-Operationen. Format (2) definiert
registerunmittelbare Operationen. Format (3) definiert eine Speicherzugriffsoperation.
Speicherzugriffsoperationen werden hierin nicht weiter besprochen,
aber es wird erwähnt,
dass sie zum Laden von Daten aus dem Speicher in die Registerdateien und
zum Bereitstellen von Speicheroperationen für das Umgekehrte verwendet
werden.
-
Die
Datenverarbeitungsbefehlsformate haben die folgenden Felder gemeinsam.
Es gibt drei Identifizierungsbits, M (Bit 31) und G (Bits 29 und
30), die das Wesen der Datenverarbeitungsoperation kennzeichnen.
Ein Operationscodefeld (Bits 22 bis 28), das das Wesen der auszuführenden
Operation definiert, ein Bedingungseinstellfeld S (Bit 21), ein
Testregisterfeld (Bits 18 bis 20) und Felder, die zwei Quellregister
Src1, Src2 und ein Zielregister Dst definieren. Natürlich enthält Format
(2) kein ein zweites Quellregister definierendes Feld, sondern es
hält stattdessen
einen unmittelbaren Wert. Wie oben erwähnt, können die Register in den Registerdateien 10, 11 mehrere
gepackte Objekte enthalten, und in diesem Fall wird die im Operationscode des
Befehls definierte Operation normalerweise auf jedem "Weg" des Operanden ausgeführt, der
auf jedem Paar entsprechender gepackter Objekte in jeweiligen Quellregistern
Src1, Src2 oder Quellregister und unmittelbarem Wert ist, je nachdem.
-
Wie
oben erwähnt,
enthalten die Mehrzweckregister 11 CC-Register und Testregister.
Das Testregister hält
eine Vielzahl von Testbytes, wobei jedes Testbyte ein Format wie
in 4 hat und das niedrigstwertige
Bit auf null gesetzt ist. Jedes dieser Bytes wird als ein Treg-Byte [1 ... 7] bezeichnet.
Die Treg-Bytes sind programmierbar und werden vor der Befehlsausführung auf
die erforderlichen Werte gesetzt. Das Testregister wird verwendet, um
bedingte Ausführung
von Befehlen zu ermöglichen.
Jedes Befehlsformat enthält
ein 3-Bit-Feld TST,
das die Spezifizierung eines Treg-Bytes [1 bis 7] ermöglicht.
Wird im Befehl kein Treg-Byte spezifiziert, wird das TST-Feld im
Operationscode auf 0 gesetzt, und der Befehl wird bedingungslos
ausgeführt.
Ein spezifiziertes Byte kann mit einem ADL-Befehl des Formats (2)
modifiziert werden, der einen im unmittelbaren Feld spezifizierten
Bytewert zu einem spezifizierten SIMD-Weg, der im TST-Feld (Treg-Byte
[1 ... 7]) definiert ist, hinzufügt.
-
Das
8-Bit-Feld jedes Treg ist wie in 4 gezeigt.
-
Das
Bedingungsfeld (Bits 0 bis 3) gilt für alle prädizierten Befehle. Es hält einen
4-Bit-Testcode,
um das Testen von Bedingungen zu ermöglichen. Wie später detaillierter
besprochen, gilt die Bedingung bei Befehlen auf gepackten Objekten
für alle
Wege auf einer Pro-Weg-Basis.
-
Die
vier Bedingungskennzeichen sind:
- – N (Negativ-Kennzeichen – Bit 3)
- – Z
(Null-Kennzeichen – Bit
2)
- – C
(Übertragskennzeichen – Bit 1)
- – V
(Überlaufkennzeichen – Bit 0)
-
Diese
vier Bits rufen 16 Testbedingungen hervor (siehe Tabelle 1).
-
-
-
Das
CC-Selektorfeld (Bits 4 bis 6) gilt nur für Befehle auf nichtgepackten
Objekten. Das CC-Selektorfeld bezeichnet den Bedingungscode (in
dem später
besprochenen CC-Register), das mit dem Code im Treg-Byte zu vergleichen
ist.
-
Bei
der beschriebenen Ausführungsform
gilt das Seitenfeld (S-Bit 7, X = 0, Y = 1) nur für Nicht-SIMD-64-Bit-Befehle.
Bei 32-Bit-Operationen wird die Seite gemäß dem Kanal bestimmt, in dem
der Befehl ausgeführt
wird, ungeachtet dessen, auf was das Seitenfeld gesetzt ist. Bei
Nicht-SIMD-64-Bit-Befehlen bezeichnet das Seitenfeld entweder linke
oder rechte (X oder Y) Bedingungscodes im CC-Register.
-
Das
Bedingungscoderegister ist 64 Bits lang, und die Bitfelder sind
in 5 definiert. Jeder
Bedingungscode ist vier Bits lang (ein Nibble).
-
Jedes
CC{X, Y}{0 .. 7}-Nibble hat die Vier Bedingungskennzeichen (NZCV)
in dieser Reihenfolge. Die Bedingungscodes können auf Pro-Weg-Basis gesetzt
und verwendet werden.
-
SIMD-Byte-(B)-Operationen
aktualisieren 8 Bedingungscodes, wobei X oder Y von der Seite der
Maschine abhängen.
CC{X,
Y}0 ... CC{X, Y}7
-
SIMD-Halbwort-(H)-Operationen
aktualisieren folgendermaßen
vier Paare Bedingungscode (wieder von den Seiten der Maschine abhängig). Das
heißt,
zwei Bedingungscodes werden bei jeder Operation mit dem selben Wert
aktualisiert.
CCX0
= CCX1 | CCY0
= CCY1 |
CCX2
= CCS3 | CCY2
= CCY3 |
CCX4
= CCX5 | CCY4
= CCY5 |
CCX6
= CCX7 | CCT6
= CCY7 |
-
SIMD-Wort-(W)-Operationen
aktualisieren folgendermaßen
zwei Vierer Bedingungscode (von der Seite der Maschine abhängig). Das
heißt,
vier Bedingungskennzeichen werden bei jeder Operation auf denselben Wert
aktualisiert.
CCX0
= CCX1 = CCX2 = CCX3 | CCY0
= CCY1 = CCY2 = CCY3 |
CCX4
= CCX5 = CCX6 = CCX7 | CCY4
= CCY5 = CCY6 = CCY7 |
-
SIMD-Langwort-(L)-Operationen
aktualisieren folgendermaßen
alle acht Bedingungscodes (von der Seite der Maschine abhängig).
CCX0
= CCX1 = CCX2 = CCX3 = CCX4=CCX5=CCX6=CCX7
CCY0
= CCY1 = CCY2 = CCY3=CCY4=CCY5=CCY6=CCY7
-
Nunmehr
wird die Verwendung des Testregisters und des Bedingungscoderegisters
unter Bezugnahme auf die folgenden Beispiele beschrieben. Es ist
klar, dass das Folgende nur Beispiele sind, die zur Veranschaulichung
der Arbeitsprinzipien verwendet werden.
-
Es
sei die arithmetische Operation ADD betrachtet. Dieser Befehl kann
in einem Register-zu-Register-Format
unter Verwendung von Format (1) in 3 oder
in einem Register-zu-unmittelbar-Format
unter Verwendung von Format (2) von 3 implementiert
werden. Im Folgenden wird nur das Register-zu-Register-Format detailliert
beschrieben, um die Prinzipien der Verwendung der Testregister und
des Bedingungscoderegisters zu veranschaulichen.
-
Der
Befehl ADD hat folgende Semantik:
ADD{B|H|W|L}{S}{Treg,}Dest,
Src1, Src2.
-
Wie
aus Format (1) in 3 ersichtlich
ist, definiert dieser Befehl daher zwei Quellregister in den Feldern
SRC1 und SRC2, wobei jedes Quellregister Operanden für die Additionsoperation
enthält.
Lautet der Befehl ADDL, sind die Register nicht gepackt, sondern
jedes enthält
ein 64-Bit-Objekt. Für
die Befehle ADDB, ADDH und ADDW enthält jedes Quellregister mehrere
gepackte Objekte gemäß dem früher festgelegten
Packungsgrad. Im folgenden Beispiel wird angenommen, dass jedes
Quellregister acht gepackte Objekte b0 ... b7 hält. Im DST-Feld des Befehls
ist ein Zielregister DST zum Halten des Ergebnisses der Additionsoperation definiert.
Im Zielregister werden acht gepackte Objekte generiert. Vorläufig sei
angenommen, dass eine einzige 32-Bit-Operation von einem Kanal (X
oder Y) des Prozessors ausgeführt
wird.
-
6 veranschaulicht ein Diagramm
von einer der Funktionseinheiten, die zur Ausführung des ADD-Befehls in der
Lage ist. Ein erster und zweiter 64-Bit-Puffer 40, 42 sind
zum Halten eines ersten und zweiten Quelloperanden bereitgestellt.
Im veranschaulichten Beispiel enthalten die Quelloperanden in jedem
Fall acht gepackte Objekte b0 bis b7. Eine Additionsschaltung 44 weist
acht Operatoren, in diesem Fall Additionsschaltungen, auf, von denen
jede so verbunden ist, dass sie jeweils zwei gepackte Objekte von
dem selben Weg b0 ... b7 des
Eingangspuffers 40, 42 erhält. Nur die Verbindungen der
ersten und letzten Objekte sind gezeigt. Ähnliche Verbindungen gelten
für jede
der anderen Additionsschaltungen. Ein Ausgangspuffer 46 hält das Ergebnis,
das gleichfalls in der Form acht gepackter Objekte zum Laden in
das im Befehl spezifizierte Zielregister ist. Ein Bedingungscodegenerator 48 untersucht
auch die Ergebnisse jeder Addition und generiert Bedingungscodes,
die im Bedingungscoderegister CCreg zu halten sind, für die Seite
der Maschine, auf der der Befehl ausgeführt wird. Der Bedingungsgenerator 48 generiert
immer acht Bedingungscodes für
jede Seite der Maschine, ungeachtet des Packungsgrads der Quelloperanden,
wie im Folgenden vollständiger
beschrieben wird.
-
Das
Befehlsformat (1) enthält
ein S-Kennzeichen (Bit 21). Wird dieses Kennzeichen gesetzt, werden die
Bedingungscodes für
die Seite der Maschine, in der der Befehl ausgeführt wird, gesetzt. In diesem
Beispiel sei angenommen, dass der Befehl auf der X-Seite der Maschine
ausgeführt
wird. Der Bedingungscodegenerator 48 generiert Bedingungscodes
CCX0 bis CCX7 durch Berücksichtigen
der Ergebnisse der Additionsoperationen, die an jedem gepackten
Objekt im Quellregister ausgeführt
wurden, und Bestimmen der Werte von N, Z, C und V, die die jeden
Bedingungscode definierenden Bits sind, anhand dieser Operationen.
Im Beispiel von 6 kann
für jede
Bedingungscodestelle CCX0 ... CCX7 im Bedingungscoderegister ein
anderer Bedingungscode generiert werden. Bedingungscodes werden
wie folgt gesetzt. Das N- Kennzeichen
des Bedingungscodes wird gesetzt, wenn das Ergebnis nagativ ist,
d. h. das höchste
Bit wird gesetzt (Ereignis für
vorzeichenlose Eingänge).
Das Z-Kennzeichen wird gesetzt, wenn das Ergebnis null ist. Das
C-Kennzeichen wird gesetzt, wenn die Operation einen Ausgangsübertrag
generierte. Das V-Kennzeichen wird gesetzt, wenn die Operation vor
dem Umrechen oder Sättigen
ihren Bereich überlaufen
ließ.
-
Wenn
das S-Kennzeichen im Befehl nicht gesetzt wird, wird das Bedingungsregister
nicht aktualisiert.
-
Für die obige
Erklärung
wurde angenommen, dass die Additionsoperation ausgeführt wurde.
Es ist möglich,
den ADD-Befehl selbst von Bedingungscodes zu prädizieren, die durch einen früheren Befehl
oder eine frühere
Befehlsfolge gesetzt wurden. Zu diesem Zweck enthält das Befehlsformat
ein Testregisterfeld TST (Bits 18 bis 20). Diese drei Bits ermöglichen
es, eines der Testregisterbytes Treg (1 .. 7) zu adressieren. Wird ein
Testregisterbyte im TST-Feld des Befehls spezifiziert, wird jeder
Bedingungscode auf der Seite der Maschine, auf der der Befehl ausgeführt wird,
mit dem im adressierten Treg-Byte spezifizierten Bedingungscode
verglichen. Wird das TST-Feld auf null gesetzt, so dass kein Treg-Byte
spezifiziert wird, wird der Befehl immer ausgeführt.
-
Nach
dem Vergleichen des im adressierten Treg-Bytes spezifizierten Testcodes
mit jedem der Bedingungscodes CCX0 ... CCX7 (angenommen, die Operation
wird auf der X-Seite der Maschine ausgeführt), wird die spezifizierte
Operation auf den SIMD-Wegen ausgeführt, bei denen es eine Übereinstimmung
gibt, und sie wird nicht auf den SIMD-Wegen ausgeführt, bei
denen es keine Übereinstimmung
gibt. Ein Beispiel ist in 7 veranschaulicht.
Angenommen, dass die in 6 veranschaulichte
und oben beschriebene Operation ausgeführt worden ist, und dass Bedingungscodes
CCX0 bis CCX7 in Abhängigkeit
von den Ergebnissen der arithmetischen Operation in jedem der SIMD-Wege
b0 ... b7 gesetzt
wurden, wie oben beschrieben. Für
dieses Beispiel wird angenommen, dass die Bedingungscodes wie folgt
lauten: b0 0010, b1 0101,
b2 0011, b3 0010,
b4 0010 b5 0100.
Dies ist im Bedingungscoderegister in 7 veranschaulicht.
Ebenfalls angenommen, dass das adressierte Testregisterbyte im TST-Feld
des Befehls den Bedingungscode 0011 hält. Dieser kennzeichnet die Bedingung "Übertrag setzen C". SIMD-Wege b0, b2, b3,
b4 erfüllen
diese Bedingung. Angenommen, dass die darauffolgende auszuführende Operation
auch ein ADD-Befehl ist, der auf dem bytegepackten Inhalt zweier Quellregister
SRC1, SRC2 wirkt, wobei die Ergebnisse in ein Zielregister DST zu
laden sind. Weil ein Testregisterbyte spezifiziert worden ist, ist
die Additionsoperation nur auf den SIMD-Wegen betroffen, bei denen
der für
jenen Weg (CCX0 ... CCX7) gesetzte Bedingungscode die durch den
im adressierten Treg-Byte gesetzten Testcode definierte Bedingung
erfüllt.
Dies wird durch einen Bedingungscodeprüfer 50 bestimmt. Der
Ausgang des Bedingungscodeprüfers 50 steuert
einen Satz von Schaltern 52, einen für jeden SIMD WEG b0 ...
b7. Diese Schalter steuern, ob die Ergebnisse
der in dem Befehl angeführten
Additionsoperation die Werte in dem entsprechenden Weg im Zielregister
DST aktualisieren oder nicht. Dies ist in 7 grafisch dargestellt, wobei ein Kreuz
veranschaulicht, dass das Ergebnis der Additionsoperation nicht
in das Zielregister geladen wird, und ein durchgehender Pfeil veranschaulicht,
dass es heineingeladen wird. Dies ist im Zielregister gekennzeichnet durch
DST, das ein ursprüngliches
Byte im Zielregister kennzeichnet (das vor der Ausführung des
Befehls steht), und RES, das ein Ergebnisbyte kennzeichnet, das
nach der Ausführung
des Befehls ein Ergebnis der arithmetischen Operation auf jenem
Weg ist.
-
Wenn
wie oben erwähnt,
soll ein Befehl auf weniger dicht gepackten Objekten ausgeführt werden,
z. B. H oder W, werden weiterhin acht Bedingungscodes Paar- oder viererweise
gesetzt, wie oben erwähnt.
Es sei z. B. angenommen, dass eine Operation auf halbwortgepackten
Objekten h0 ... h3 ausgeführt wird.
Der Bedingungsgenerator 48 bestimmt Bedingungscodewerte
durch Setzen der Kennzeichen N, C, Z und V für jeden SIMD-Weg wie vorher.
Somit werden vier Bedingungscodewerte generiert. Diese werden zum
Setzen von acht Bedingungscodes im Bedingungscoderegister als Bedingungscodepaare
verwendet, wie oben erwähnt.
Sobald die Bedingungscodes im Bedingungscoderegister gesetzt sind,
können
sie in nachfolgenden Befehlen verwendet werden, die auf einen beliebigen
Packungsgrad wirken. Bei halbwortgepackten Objekten wird der erste
Bedingungscode CCX0 und jeder alternierende Bedingungscode danach
mit dem Testcode im adressierten Treg-Byte verglichen, um zu bestimmen
ob der Befehl auf jenem SIMD-Weg ausgeführt wird oder nicht. Bei wortgepackten
Objekten wird der erste Bedingungscode und der vierte Bedingungscode
mit dem Testcode im adressierten Treg-Byte verglichen, um zu bestimmen
ob die Operation auf jenem SIMD-Weg ausgeführt werden soll.
-
Bei
Langwortoperationen wird der erste Bedingungscode CCX0 ausgewertet.
Wie oben beschrieben, werden alle Bedingungscodes für eine Seite
der Maschine den gleichen Wertsatz haben.
-
Bei
Nicht-SIMD-Befehlen, d. h. Befehlen, bei denen die Operanden nicht
gepackt sind, können
die Bedingungscodes immer noch verwendet werden, um zu bestimmen,
ob der Befehl ausgeführt
wird oder nicht. In diesem Fall identifiziert das TST-Feld des Befehls
wieder ein Treg-Byte. Der Bedingungsselektor im Treg-Byte identifiziert
einen Bedingungscode, der auf der rechten oder linken Seite sein
kann. Das Seitenbit S kennzeichnet, welche Seite der Maschine (X
oder Y). Das heißt,
ein beliebiger Bedingungscode von sechzehn Bedingungscodes CCX0
... CCX7, CCY0 ... CCY7 kann durch den Bedingungsselektor identifiziert
werden. Dann wird der in den Bedingungsbits 0 bis 3 des Treg-Bytes
gehaltene Code mit dem gewählten
Bedingungscode verglichen, um zu bestimmen, ob der Befehl ausgeführt wird
oder nicht. Ist die Testbedingung erfüllt, wird der Befehl ausgeführt. Andernfalls
wird der Befehl nicht ausgeführt.
-
Aufgrund
der obigen Beschreibung ist klar, dass der Prozessor zwar eine rechte
und linke Seite (X- und Y-Kanal) hat, aber von beiden Seiten auf
das Bedingungscoderegister zugegriffen werden kann. Bei 32-Bit-Operationen
erfolgt das Setzen von Bedingungscodes und Zugreifen auf sie gemäß der Seite
des Prozessors, die die 32-Bit-Operation
tatsächlich
ausführt.
Daher aktualisieren im X-Kanal 5X ausgeführte 32-Bit-Operationen die Bedingungscodes
für den
X-Kanal CCX0 ... CCX7, und sie werden nur auf den X-Kanal-Codes
CCX0 ... CCY7 bedingt ausgeführt.
Entsprechendes gilt für
im Y-Kanal 5Y ausgeführte 32-Bit-Operationen.
64-Bit-Operationen haben jedoch eine größere Flexibilität. 64-Bit-Befehle
beinhalten auch ein TST-Feld zum Zugreifen auf ein Treg-Byte auf
eine ähnliche
Weise wie bei den oben besprochenen 32-Bit-Operationen. In diesem
Fall bestimmt das Seitenfeld S in dem Treg-Byte, auf das der Zugriff
erfolgt, welche Bedingungscodes (X oder Y) verwendet werden. Das
heißt,
das Seitenfeld S bestimmt, welche Bedingungscodes gemäß eines
gerade ausgeführten
64-Bit-Befehls gesetzt werden, und auch durch welche Bedingungscodes
(X oder Y) das Wirken des 64-Bit-Befehls prädiziert ist. Daher erhöht dies
wesentlich die bei der Ausführung
von 64-Bit-Befehlen verfügbaren
Optionen.
-
Es
versteht sich, dass mehrere Variationen der oben beschriebenen Ausführungsform
möglich
sind. Das Seitenbit S im Treg-Byte kann z. B. immer zum Bezeichnen
des erforderlichen Satzes von Bedingungscodes (X oder Y) verwendet
werden, statt nur in Nicht-SIMD-64-Bit-Befehlen,
wie oben erwähnt.
Ferner besteht kein Bedarf an einem bestimmten Bedingungssetzungskennzeichen
S im Befehl – ob
Bedingungscodes zu setzen sind oder nicht kann im Operationscode
definiert werden, oder die Befehlssemantik kann so ausgelegt werden,
dass Bedingungscodes immer gesetzt werden.
-
Wie
aus 7 ersichtlich, ist
es möglich,
bedingte Weg-um-Weg-Ausführung
auf mehrfache Weise zu implementieren. Eine andere Alternative zu
der beschriebenen bestünde
darin, die Operation nur dann auszuführen (und die jeweiligen Operatoren
einzuschalten), wenn die Testbedingung für jenen Weg erfüllt ist.