DE69129881T2 - Verzweigung in einem Pipeline-Prozessor - Google Patents
Verzweigung in einem Pipeline-ProzessorInfo
- Publication number
- DE69129881T2 DE69129881T2 DE69129881T DE69129881T DE69129881T2 DE 69129881 T2 DE69129881 T2 DE 69129881T2 DE 69129881 T DE69129881 T DE 69129881T DE 69129881 T DE69129881 T DE 69129881T DE 69129881 T2 DE69129881 T2 DE 69129881T2
- Authority
- DE
- Germany
- Prior art keywords
- instructions
- address
- jump
- instruction
- register
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Lifetime
Links
- 238000006073 displacement reaction Methods 0.000 claims description 15
- 238000000034 method Methods 0.000 claims description 13
- 230000004044 response Effects 0.000 claims 2
- 239000000872 buffer Substances 0.000 description 25
- 230000006870 function Effects 0.000 description 22
- 238000013519 translation Methods 0.000 description 15
- 230000014616 translation Effects 0.000 description 15
- 238000010586 diagram Methods 0.000 description 12
- 230000008901 benefit Effects 0.000 description 11
- 238000000605 extraction Methods 0.000 description 8
- 230000008520 organization Effects 0.000 description 7
- 230000009977 dual effect Effects 0.000 description 6
- 230000008569 process Effects 0.000 description 5
- 108091035710 E-box Proteins 0.000 description 4
- 102000018700 F-Box Proteins Human genes 0.000 description 4
- 108010066805 F-Box Proteins Proteins 0.000 description 4
- 238000006243 chemical reaction Methods 0.000 description 4
- 238000013461 design Methods 0.000 description 4
- 101001130192 Homo sapiens Lipid droplet-associated hydrolase Proteins 0.000 description 3
- 102100031360 Lipid droplet-associated hydrolase Human genes 0.000 description 3
- 230000001419 dependent effect Effects 0.000 description 3
- 238000012545 processing Methods 0.000 description 3
- 238000012360 testing method Methods 0.000 description 3
- 102100034004 Gamma-adducin Human genes 0.000 description 2
- 101000799011 Homo sapiens Gamma-adducin Proteins 0.000 description 2
- 206010000210 abortion Diseases 0.000 description 2
- 230000004888 barrier function Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 230000000295 complement effect Effects 0.000 description 2
- 238000012937 correction Methods 0.000 description 2
- 238000003780 insertion Methods 0.000 description 2
- 230000037431 insertion Effects 0.000 description 2
- 230000001343 mnemonic effect Effects 0.000 description 2
- 230000000644 propagated effect Effects 0.000 description 2
- 230000003068 static effect Effects 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- YKORUANEKZOBMT-INIZCTEOSA-N (2s)-2-[[4-[(4-oxo-1h-1,2,3-benzotriazin-6-yl)methylamino]benzoyl]amino]pentanedioic acid Chemical compound C1=CC(C(=O)N[C@@H](CCC(=O)O)C(O)=O)=CC=C1NCC1=CC=C(NN=NC2=O)C2=C1 YKORUANEKZOBMT-INIZCTEOSA-N 0.000 description 1
- 201000007224 Myeloproliferative neoplasm Diseases 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000000146 jump and return pulse sequence Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- QHLFJSMAWAWVRU-UHFFFAOYSA-N n-(5-chloro-4-methyl-1,3-thiazol-2-yl)propanamide Chemical compound CCC(=O)NC1=NC(C)=C(Cl)S1 QHLFJSMAWAWVRU-UHFFFAOYSA-N 0.000 description 1
- 238000012549 training Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30072—Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30032—Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/3016—Decoding the operand specifier, e.g. specifier format
- G06F9/30167—Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3804—Instruction prefetching for branches, e.g. hedging, branch folding
- G06F9/3806—Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
- G06F9/3846—Speculative instruction execution using static prediction, e.g. branch taken strategy
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Description
- Diese Anmeldung offenbart einen Gegenstand, der außerdem in den folgenden gleichzeitig anhängigen Anmeldungen offenbart ist, die hiermit von Digital Equipment Corporation, dem Anmelder dieser Erfindung, eingereicht und auf Digital Equipment Corporation übertragen wurden:
- US lfd.-Nr. 07/547 589, eingereicht am 29. Juni 1990, mit dem Titel: BRANCH PREDICTION IN HIGH-PERFORMANCE PROCESSOR, von Richard L. Sites und Richard T. Witek, Erfinder (die der EP-A-0 465 973 entspricht);
- US lfd.-Nr. 07/547 630, eingereicht am 29. Juni 1990, mit dem Titel: IMPROVING PERFORMANCE IN REDUCED INSTRUCTION SET PROCESSOR, von Richard L. Sites und Richard T. Witek, Erfinder (die der EP-A-0 463 976 entspricht)
- US lfd.-Nr. 07/547 629, eingereicht am 29. Juni 1990, mit dem Titel: IMPROVING BRANCH PERFORMANCE IN HIGH SPEED PROCESSOR, von Richard L. Sites und Richard T. Witek, Erfinder (die der EP-A-0 463 977 entspricht);
- US lfd.-Nr. 07/547 600, eingereicht am 29. Juni 1990, mit dem Titel: GRANULARITY HINT FOR TRANSLATION BUFFER IN HIGH PREFORMANCE PROCESSOR, von Richard L. Sites und Richard T. Witek, Erfinder (die der EP-A-0 463 978 entspricht);
- US lfd.-Nr. 07/547 618, eingereicht am 29. Juni 1990, mit dem Titel: ENSURING DATA INTEGRITY IN MULTIPLROCESSOR OR PIPELINED PROCESSOR SYSTEM, von Richard L. Sites und Richard T. Witek, Erfinder (die der EP-A-0 465 321 entspricht);
- US lfd.-Nr. 07/547 619, eingereicht am 29. Juni 1990, mit dem Titel: IN-REGISTER DATA MANIPULATION IN REDUCED INSTRUCTION SET PROCESSOR, von Richard L. Sites und Richard T. Witek, Erfinder (die der EP-A-0 465 322 entspricht);
- US lfd.-Nr. 07/547 684, eingereicht am 29. Juni 1990, mit dem Titel: IMPROVING COMPUTER PERFORMANCE BY ELIMINATING BRANCHES, von Richard L. Sites und Richard T. Witek, Erfinder (die der EP-A-0 465 328 entspricht); und
- US lfd.-Nr. 07/547 992, eingereicht am 29. Juni 1990, mit dem Titel: BYTE-COMPARE OPERATION FOR HIGH-PERFORMANCE PROCESSOR, von Richard L. Sites und Richard T. Witek, Erfinder (die der EP-A-0 465 975 entspricht).
- Diese Erfindung bezieht sich auf digitale Computer und insbesondere auf einen Hochleistungsprozessor, der einen eingeschränkten Befehlssatz ausführt.
- Herkömmliche Prozessoren mit uneingeschränktem Befehlsvorrat oder CISC-Prozessoren sind dadurch gekennzeichnet, daß ihrer Befehlssatz eine große Anzahl von Befehlen enthält, zu denen häufig Speicher-Speicher-Befehle mit komplexen Speicherzugriffsmodi gehören. Gewöhnlich haben die Befehle eine unterschiedliche Länge, wobei einfache Befehle vielleicht nur eine Länge von einem Byte haben, während die Länge bis zu Dutzenden Bytes reicht. Der VAXTM-Befehlssatz ist ein primäres Beispiel von CISC und verwendet Befehle mit Ein- bis Zweibyte-Operationscodes zuzüglich null bis sechs Operandenspezifizierern, wobei jeder Operandenspezifizierer eine Länge von einem bis zu vielen Bytes besitzt. Die Größe des Operandenspezifizie rers hängt von dem Adressierungsmodus, von der Größe der Verschiebung (Byte, Wort oder Langwort) usw. ab. Das erste Byte des Operandenspezifizierers beschreibt den Adressierungsmodus für jenen Operanden, während der Operationscode die Anzahl der Operanden definiert: einen, zwei oder drei. Da die Operandenspezifizierer, wenn der Operationscode selbst decodiert wird, noch nicht decodiert sind, ist dem Prozessor die Gesamtlänge des Befehls jedoch noch nicht bekannt. Ein anderes Merkmal von Prozessoren des VAX-Typs ist die Verwendung von Byte- oder Bytestring-Speicherverweisen zusätzlich zu Quadwort- oder Langwortverweisen, d. h., daß ein Speicherverweis einschließlich nicht ausgerichteter Byteverweise eine von einem Byte bis zu mehreren Wörtern veränderliche Länge haben kann.
- Prozessoren mit eingeschränktem Befehlsvorrat oder RISC- Prozessoren sind durch eine kleinere Anzahl von Befehlen, die einfach zu decodieren sind, und durch die Forderung, daß alle Arithmetik- und Logikoperationen als Register- Register-Operationen ausgeführt werden, gekennzeichnet. Ein anderes Merkmal besteht darin, daß keine komplexen Speicherzugriffe zugelassen sind; alle Speicherzugriffe sind Registerlade- und -speicheroperationen, wobei es eine kleine Anzahl relativ einfacher Adressierungsmodi, d. h. nur wenige Arten der Spezifizierung von Operandenadressen gibt. Die Befehle besitzen eine einzige Länge, wobei die Speicherzugriffe eine gewöhnlich ausgerichtete Standarddatenbreite haben. Im Unterschied zur Mikrocodierung entspricht die Befehlsausführung dem direkt festverdrahteten Typ. Es gibt eine feste Befehlszykluszeit, wobei die Befehle in der Weise definiert sind, daß sie einfach sind, so daß sie (im Mittel, da sich die tatsächliche Ausführung durch die Pipeline-Verarbeitung über mehrere Zyklen erstreckt) alle in einem kurzen Zyklus ausgeführt werden.
- Ein Vorteil von CISC-Prozessoren besteht beim Schreiben von Quellcode. Die Vielzahl leistungsfähiger Befehle, Speicherzugriffsmodi und Datentypen sollte dazu führen, daß für jede Codezeile mehr Arbeit verrichtet wird (tatsächlich nutzt der von den Compilern erzeugte Code dies nicht voll aus), wobei aber jeder Gewinn an Kompaktheit des Quellcodes auf Kosten von Ausführungszeit erreicht wird. Insbesondere deswegen, weil die Pipeline- Verarbeitung der Befehlsausführung erforderlich geworden ist, um die derzeit von Systemen geforderten Leistungsebenen zu erreichen, erzeugen die Daten- oder Zustandsabhängigkeiten aufeinanderfolgender Befehle und die gewaltigen Unterschiede der Speicherzugriffszeit gegenüber der Maschinenzykluszeit unangemessen hohe Blockierungen und Ausnahmen, die die Ausführung verlangsamen. Der Vorteil von RISC-Prozessoren ist die Ausführungsgeschwindigkeit des Codes, während der Nachteil darin besteht, daß durch jede Codezeile weniger geleistet wird und daß der Code zum Erreichen einer gegebenen Aufgabe wesentlich länger ist. Eine Zeile VAX-Code kann das gleiche wie viele Zeilen RISC-Code leisten.
- Wenn CPUs viel schneller als Speicher wären, wäre es vorteilhaft, pro Befehl mehr Arbeit zu verrichten, da die CPU andernfalls immer darauf warten müßte, daß der Speicher Befehle liefert - dieser Faktor führt zu komplexeren Befehlen, die kapseln, was andernfalls als Unterroutinen verwirklicht würde. Wenn die CPU- und die Speichergeschwindigkeit ausgeglichener würden, würde eher ein einfacher Zugang wie etwa jener des RISC-Konzepts möglich, vorausgesetzt, daß das Speichersystem in jedem Zyklus einen Befehl und einige Daten liefern kann. Hierarchische Speicherverfahren sowie schnellere Zugriffszyklen schaffen diese schnelleren Speichergeschwindigkeiten. Ein anderer Faktor, der die Wahl von CISC gegenüber RISC beeinflußt hat, ist die aus der VLSI-Konstruktion von CPUs resultierende Änderung der relativen Kosten von Verbindungen außerhalb des Chips gegenüber solchen auf dem Chip. Die Konstruktion von Chips anstelle von Leiterplatten ändert die Ökonomie - zunächst zahlt es sich aus, die Architektur einfach genug zu machen, daß sie sich auf einem Chip befindet, dann ist mehr Speicher auf dem Chip möglich (und erforderlich), um zu vermeiden, daß Speicherverweise von dem Chip heruntergehen. Ein weiterer Faktor in dem Vergleich besteht darin, daß das Hinzufügen komplexerer Befehle und Adressierungsmodi wie in einer CISC-Lösung Stufen des Befehlsausführungsprozesses kompliziert macht (daher verlangsamt). Die komplexe Funktion könnte bewirken, daß die Funktion schneller als eine äquivalente Folge einfacher Befehle ausgeführt wird, jedoch kann sie die Befehlszykluszeit verlängern, was eine langsamere Ausführung aller Befehle bewirkt; somit muß eine hinzugefügte Funktion die Gesamtleistung genügend erhöhen, um die Verminderung der Befehlsausführungsrate zu kompensieren.
- Unter Berücksichtigung dieser und anderer Faktoren wird angenommen, daß die Leistungsvorteile von RISC-Prozessoren gegenüber den Nachteilen überwiegen, und würde die existierende Softwarebasis keine Rolle spielen, würden die meisten neuen Prozessoren wahrscheinlich unter Verwendung von RISC-Merkmalen konstruiert. Ein Problem besteht darin, daß Unternehmen viele Jahre Arbeitserfahrung einschließlich der Ausbildung von Betreibern sowie die Kosten des Codes selbst in Anwendungsprogramme und Datenstrukturen unter Verwendung der Prozessoren vom CISC-Typ investiert haben, welche die in den vergangenen zehn oder fünfzehn Jahren am meisten verwendeten Prozessoren waren. Obgleich die letztlich zu erwartenden Leistungsvorteile wesentlich wären, mögen die Kosten und die Unterbrechung von Operationen zum Neuschreiben aller Codes und aller Datenstrukturen zur Anpassung an eine neue Prozessorarchitektur nicht gerechtfertigt sein.
- Dementsprechend besteht das Ziel darin, alle Leistungsvorteile eines Prozessors einer RISC-Prozessorarchitektur zu erreichen, aber doch ein Übersetzen der für existierende Prozessoren vom CISC-Typ zuvor erzeugten Datenstrukturen und des zuvor für diese Prozessoren erzeugten Codes zur Verwendung in einem Hochleistungsprozessor zu ermöglichen.
- In Übereinstimmung mit einer Ausführung der Erfindung wird ein Hochleistungsprozessor vom RISC-Typ geschaffen, der eine standardisierte, feste Befehlsgröße verwendet und nur eine vereinfachte Speicherzugriffs-Datenbreite unter Verwendung einfacher Adressierungsmodi zuläßt. Der Befehlssatz (für Arithmetik- und Logikoperationen unter Verwendung der ALU usw.) ist auf Register-Register-Operationen und auf Registerlade- und -speicheroperationen beschränkt, wo auf Speicher verwiesen wird; es gibt weder Speicher-Speicher-Operationen noch Register-Speicher-Operationen, in denen die ALU- oder andere Logikfunktionen ausgeführt werden. Um nicht-mikrocodierte Implementierungen zuzulassen, sind die durch Befehle ausgeführten Funktionen beschränkt, einfach zu decodieren und in einem kurzen Zyklus auszuführen. Auf dem Chip wird eine Gleitkommaverarbeitung bereitgestellt, und in einer Beispielausführung werden auf dem Chip Befehls- und Datencaches verwendet.
- Um die Verwendung zuvor hergestellter Datenstrukturen zuzulassen, sind Bytemanipulationsbefehle enthalten. Zusammen mit nicht ausgerichteten Lade- und Speicherbefehlen enthalten diese Befehle die Vorrichtung zum Extrahieren von Bytes in Registern, zum Einsetzen und zum Abdecken, so daß Byteadressen verwendet werden können, obgleich die tatsächlichen Speicheroperationen von Natur aus in Quadwörtern ausgerichtet sind.
- Die Bereitstellung von gesperrten Ladebefehlen und von bedingten Speicherbefehlen gestattet die Implementierung von Atombyte-Schreibvorgängen. Um eine Byteadresse in einen Mehrbyte-ausgerichteten Speicher (z. B. in einen Quadwort-ausgerichteten Speicher) zu schreiben, lädt die CPU ein Quadwort (oder ein Langwort) und sperrt diesen Bereich, schreibt in die Byteadresse im Register, während sie den Rest des Quadworts ungestört läßt, speichert dann das aktualisierte Quadwort in Abhängigkeit davon, ob das Quadwort seit dem gesperrten Ladevorgang durch einen anderen Prozessor geschrieben wurde, bedingt im Speicher.
- Ein anderer Bytemanipulationsbefehl in Übereinstimmung mit einem Merkmal der Erfindung ist ein Bytevergleichsbefehl. Alle Bytes eines Quadworts in einem Register werden mit entsprechenden Bytes in einem anderen Register verglichen. Das Ergebnis ist ein einzelnes Byte (ein Bit für jedes verglichene Byte) in einem dritten Register. Da diese Operation zu einem allgemeinen Register (anstatt zu einem speziellen Hardwarebereich) erfolgt, können der Reihe nach mehrere Bytevergleiche ausgeführt werden, wobei bei einer Unterbrechung oder dergleichen kein zusätzlicher Zustand in Rechnung gestellt zu werden braucht. Dieser Bytevergleich kann vorteilhaft bei einem Byte-Nullsetz-Befehl verwendet werden, in dem ausgewählte Bytes eines Quadworts null gesetzt werden, wobei die Bytes durch Bits in einem Langwortbyte eines Registers ausgewählt werden. Das heißt, das Ergebnis eines Bytevergleichs kann zum Nullsetzen von Bytes eines anderen Registers verwendet werden.
- Die Geschwindigkeit der Ausführung hängt stark von der Folge des Befehlsstroms ab; Verzweigungen unterbrechen die Folge und erzeugen Blockierungen, während der vorab gerufene Befehlsstrom gelöscht wird und eine neue Folge begonnen wird. Durch Bereitstellung eines bedingten Schiebebefehls können viele kurze Verzweigungen völlig beseitigt werden. Ein bedingter Schiebebefehl prüft ein Register und verschiebt ein zweites Register, falls die Bedingung erfüllt ist, in ein drittes; für kurze Verzweigungen kann diese Funktion eingesetzt werden und daher die Folge des Befehlsstroms erhalten.
- Falls Verzweigungen nicht vermieden werden können, kann die Leistung durch Vorhersagen des Ziels einer Verzweigung und durch vorab Rufen des neuen Befehls auf der Grundlage dieser Vorhersage beschleunigt werden. Gemäß einem Merkmal einer Ausführung wird eine Verzweigungsvorhersageregel befolgt, die erfordert, daß alle Vorwärtsverzweigungen als nicht genommen und alle Rückwärtsverzweigungen (wie es für Schleifen üblich ist) als genommen vorhergesagt werden. Um sicherzustellen, daß der wahrscheinlichste Pfad nicht vorwärts-, sondern rückwärtsgerichtet ist, wird der Code beim Kompilieren neu angeordnet, so daß der vorhergesagte Code häufiger genommen als nicht genommen und der richtige Befehl vorab gerufen wird.
- Die Geschwindigkeitsverbesserung der momentanen Erfindung besteht darin, daß sie in dem Standardgrößen-Befehl nicht verwendete Bits verwendet, um für Sprung- und Sprung-in- Unterroutine-Befehle oder dergleichen einen Hinweis der erwarteten Zieladresse zu schaffen. Daher kann das Ziel vorab gerufen und in einem Register angeordnet werden, bevor die tatsächliche Adresse berechnet wurde. Falls die Zieladresse des Hinweises, wenn der Befehl ausgeführt wird, an die berechnete Adresse angepaßt ist, ist die vorab gerufene Adresse bereits in der Pipeline und wird viel schneller ausgeführt. Der Compiler fügt den Hinweis zu dem Sprungbefehl hinzu.
- Außerdem kann der nicht verwendete Verschiebungsteil des Sprungbefehls ein Feld zum Definieren des tatsächlichen Typs des Sprungs, d. h. Sprung, Sprung-in-Unterroutine, Rückkehr-aus-Unterroutine, enthalten und daher eine vorhergesagte Zieladresse in einem Stapel anordnen, um ein vorab Rufen zu ermöglichen, bevor der Befehl ausgeführt ist, oder etwas anderes für die durch den Hinweis definierte Operation geeignetes tun. Ein Hinweis kann durch die Hardware ignoriert werden, und auch dann wird der Code noch richtig, nur langsamer ausgeführt.
- Ein Unterroutinen-Rückkehr-Adressen-Stapel zum Adressieren eines Ziels ist in dem Dokument IBM Technical Disclosure Bulletin, Bd. 24, Nr. 7A, Dezember 1981, N. Y., US, S. 3255-3258, J. Losq, < < Subroutine Return Address Stack> > offenbart. Jedoch unterliegt die offenbarte Unterroutine, wie in diesem Dokument angegeben, einer fehlerhaften Vorhersage. Um dieses Problem zu vermeiden, verwendet die Erfindung in einem Sprungbefehl bereitgestellte Informationen zum Unterscheiden zwischen Sprungtypen und zum Erhalten des vorhergesagten Ziels, wenn der Sprung zur Rückkehr bereit ist.
- Gemäß einem Merkmal einer Ausführung nutzt der Prozessor eine variable Speicherseitengröße, so daß die Einträge in einem Übersetzungspuffer zum Verwirklichen der virtuellen Adressierung optimal verwendet werden können. Um die Seitengröße für diesen Eintrag zu definieren, wird zu dem Seitentabelleneintraq ein Granularitätshinweis zum Definieren der Seitengröße für diesen Eintrag hinzugefügt. Falls eine große Anzahl aufeinanderfolgender Seiten gemeinsam die gleichen Schutz- und Zugriffsrechte nutzen, kann auf alle diese Seiten mit dem gleichen Seitentabel leneintrag verwiesen werden, wodurch die Verwendung des Übersetzungspuffers effizienter wird. Die Wahrscheinlichkeit eines Treffers in dem Übersetzungspuffer wird erhöht, so daß die Anzahl von Fehlern zum Zugreifen auf die Seitentabellen minimiert wird.
- Ein zusätzliches Merkmal ist das Hinzufügen eines Vorab- Ruf-Befehls, der dazu dient, einen Datenblock vor dessen Verwendung in einen Cache mit schnellerem Zugriff in der Speicherhierarchie zu verschieben. Dieser Vorab-Ruf- Befehl würde durch den Compiler eingesetzt, um eine Funktion auszuführen, die ähnlich der eines Vektorprozessors ist, aber keine Vektorhardware erfordert. Der Vorab- Ruf-Befehl erzeugt keine Speicherausnahmen oder Schutz- oder Zugriffsverletzungen und verlangsamt auf diese Weise nicht die Ausführung, falls das vorab Rufen mißlingt. Der Befehl ist wieder optional, und falls ihn der Prozessor nicht ausführen kann, wird problemlos der normale Code ausgeführt.
- Die neuen Merkmale, die als kennzeichnend für die Erfindung angesehen werden, sind in den beigefügten Ansprüchen dargestellt. Jedoch wird die Erfindung selbst sowie andere ihrer Merkmale und Vorteile am besten mit Bezug auf die folgende ausführliche Beschreibung spezifischer Ausführungen verständlich, wenn diese in Verbindung mit der beigefügten Zeichnung gelesen wird, in der:
- Fig. 1 ein Blockschaltplan eines Computersystem ist, das eine CPU nutzt, die Merkmale der Erfindung nutzen kann;
- Fig. 2 ein Diagramm von in dem Prozessor der Fig. 1 verwendeten Datentypen ist;
- Fig. 3 ein Blockschaltplan der Befehlseinheit oder I-Box der CPU aus Fig. 1 ist;
- Fig. 4 ein Blockschaltplan der Ganzzahl-Ausführungseinheit oder E-Box in der CPU aus Fig. 1 ist;
- Fig. 5 ein Blockschaltplan der Adressierungseinheit oder A-Box in der CPU aus Fig. 1 ist;
- Fig. 6 ein Blockschaltplan der Gleitkomma-Ausführungseinheit oder F-Box in der CPU aus Fig. 1 ist;
- Fig. 7 ein Zeitablaufplan der Pipeline-Verarbeitung in der CPU aus den Fig. 1-6 ist;
- Fig. 8 ein Diagramm des in dem Befehlssatz der CPU aus den Fig. 1-6 verwendeten Befehlsformats ist;
- Fig. 9 ein Diagramm eines Formats einer in der CPU aus den Fig. 1-6 verwendeten virtuellen Adresse ist;
- Fig. 10 ein Diagramm des Formats eines in der CPU aus den Fig. 1-6 verwendeten Seitentabelleneintrags ist; und
- Fig. 11 ein Diagramm des in der CPU aus den Fig. 1-6 verwendeten Adressierungs-Übersetzungsmechanismus ist.
- In Fig. 1 enthält ein Computersystem, das Merkmale der Erfindung gemäß einer Ausführung verwenden kann, eine CPU 10, die durch einen Systembus 11 an einen Hauptspeicher 12 angeschlossen ist, wobei über den Systembus außerdem · auf eine E/A-Einheit 13 zugegriffen wird. Das System kann zu verschiedenen Ebenen gehören, von einer eigenständigen Workstation bis zu einer mittleren Mehrprozessoreinrichtung, in welchem Fall über den Systembus 11 auf den Hauptspeicher 12 außerdem andere CPUs wie etwa eine CPU 15 zugreifen.
- Die CPU 10 ist vorzugsweise eine integrierte Einchip- Schaltungsvorrichtung, obwohl Merkmale der Erfindung in einem in Mehrchipform konstruierten Prozessor verwendet werden könnten. In einem einzelnen Chip ist eine (als die "E-Box" bezeichnete) Ganzzahl-Ausführungseinheit 16 gemeinsam mit einer (als die "F-Box" bezeichneten) Gleitkomma-Ausführungseinheit 17 enthalten. Das Holen und das Decodieren der Befehle wird in einer Befehlseinheit 18 oder "I-Box" ausgeführt, während eine Adresseneinheit oder "A-Box" 19 die Funktionen der Adressenerzeugung, der Speicherverwaltung, der Schreibpufferung und der Busschnittstelle ausführt. Der Speicher ist hierarchisch, wobei die Befehlseinheit 18 und die Adresseneinheit 19 in einer Ausführung auf dem Chip Befehls- und Datencaches enthält, während außerhalb des Chips ein größerer Cache 20 zweiter Stufe bereitgestellt wird, der durch einen Cachecontroller in der Adresseneinheit 19 gesteuert wird.
- Die CPU 10 verwendet einen Befehlssatz gemäß untenstehender Beschreibung, in dem alle Befehle eine feste Größe haben, die in diesem Fall 32 Bits oder ein Langwort beträgt. Wie in Fig. 2 gezeigt, sind die verwendeten Befehls- und Datentypen für Byte, Wort, Langwort und Quadwort. Wie hier verwendet, umfaßt ein Byte 8 Bits, ein Wort 16 Bits oder zwei Bytes, ein Langwort 32 Bits oder vier Bytes und ein Quadwort 64 Bits oder acht Bytes. Allgemein haben die Datenpfade und die Register in der CPU 10 eine Größe von 64 Bits oder von einem Quadwort, wobei der Speicher 12 und die Caches das Quadwort als die Grundübertragungseinheit verwenden. Die Leistung wird dadurch erhöht, daß nur Lade- und Speichervorgänge von Quadwörtern oder Langwörtern erlaubt sind, obgleich, um mit Datentypen kompatibel zu sein, die in der früheren Softwareentwicklung verwendet wurden, die Bytemanipulation durch bestimmte eindeutige Befehle erlaubt ist, wobei das Merkmal, daß es nur Quadwort- oder Langwort lade- und -speichervorgänge gibt, immer noch erhalten bleibt.
- In Fig. 3 ist nun die Befehlseinheit 18 oder die I-Box ausführlicher gezeigt. Die primäre Funktion der Befehlseinheit 18 besteht und Ausgeben von Befehlen an die E-Box 16, an die A-Box 19 und an die F-Box 17. Die Befehlseinheit 18 enthält einen Befehlscache 21, der vielleicht 8 KBytes Befehlsstromdaten speichert, wobei in jedem Zyklus, wo die Pipeline fortschreitet, ein Quadwort (zwei Befehle) dieser Befehlsstromdaten in ein Befehlsregister 22 geladen wird. In einer zweckmäßigen Ausführung decodiert die Befehlseinheit 18 in den Decodierern 23 und 24 zwei Befehle parallel, überprüft dann durch die Prüfschaltungsanordnung 25, daß die erforderlichen Betriebsmittel für beide Befehle verfügbar sind. Falls Betriebsmittel verfügbar sind und eine duale Ausgabe möglich ist, können durch Anlegen von Registeradressen an die Busse 26 und 27 und von Steuerbits an die Mikrosteuerbusse 28 und 29 beide Befehle an die richtigen Elemente in der CPU 10 ausgegeben werden. Falls die Betriebsmittel nur für den ersten Befehl verfügbar sind oder falls die Befehle nicht dual ausgegeben werden können, gibt die Befehlseinheit 18 nur den ersten Befehl von dem Decodierer 23 aus. Selbst, wenn die Betriebsmittel für den zweiten Befehl (vom Decodierer 24) und nicht für den ersten Befehl verfügbar sind, gibt die Befehlseinheit 18 keine Befehle außer der Reihe aus. Die Befehlseinheit 18 gibt keine Befehle aus, bis die Betriebsmittel für den ersten Befehl verfügbar werden. Falls von einem Befehlspaar nur der erste Befehl (von dem Decodierer 23) ausgegeben wird, schiebt die Befehlseinheit 18 keinen weiteren Befehl in das Befehlsregister 22, um nochmals eine duale Ausgabe zu versuchen. Duale Ausgaben werden nur bei ausgerichteten Quadwort- Paaren versucht, wie sie vom Speicher (oder vom Befehls cache 21) geholt und als ein ausgerichtetes Quadwort in das Befehlsregister 22 geladen werden.
- Die Befehlseinheit 18 enthält eine Verzweigungsvorhersageschaltung 30, die auf die Befehle in dem in das Register 22 zu ladenden Befehlsstrom antwortet. Die Vorhersageschaltung 30 wird zusammen mit einem Unterroutine- Rückkehr-Stapel 31 verwendet, um Verzweigungsadressen vorherzusagen und um zu veranlassen, daß die Adressenerzeugungs-Schaltungsanordnung 32 den Befehlsstrom, bevor er benötigt wird, vorab ruft. Wie beschrieben wird, wird der Unterroutine-Rückkehr-Stapel 31 (mit z. B. vier Einträgen) durch die Hinweisbits in dem Sprungbefehl, in dem Sprung-in-Unterroutine-Befehl und in dem Rückkehrbefehl gesteuert. Der virtuelle PC (Programmzähler) 33 ist in der Adressenerzeugungs-Schaltungsanordnung 32 enthalten, um in der gewählten Reihenfolge Adressen für die Befehlsstromdaten zu erzeugen.
- Ein Verzweigungsvorhersageverfahren ist die Verwendung des Werts des Vorzeichenbits der Verzweigungsverschiebung zum Vorhersagen bedingter Verzweigungen, so daß die Schaltung 30 auf das Vorzeichenbit der Verschiebung, die in den bei den Eingängen 35 erscheinenden Verzweigungsbefehlen erscheint, antwortet. Falls das Vorzeichenbit negativ ist, sagt sie vorher, daß die Verzweigung genommen wird, wobei die Adressierungsschaltung 32 zum Register Ra die Verschiebung hinzufügt, um die erste Adresse der neuen zu holenden Adressenfolge zu erzeugen. Falls das Vorzeichen positiv ist, sagt sie vorher, daß sie nicht genommen wird, wobei der derzeitige Befehlsstrom der Reihe nach fortgesetzt wird.
- Die Befehlseinheit 18 enthält einen voll assoziativen 8- Eintrags-Übersetzungspuffer (TB) 36, um unlängst verwendete Befehlsstrom-Adressenübersetzungen und Schutzinfor mationen für 8 KByte-Seiten in einem Cache anzuordnen. Obgleich nominell 64 Bit-Adresssen möglich sind, sind 43 Bit-Adressen derzeit in der Praxis genug. Der virtuelle 43 Bit-Programmzähler 33 wird dem Befehlsstrom TB 36 nominell in jedem Zyklus überreicht. Falls der dem virtuellen PC zugeordnete Seitentabelleneintrag (PTE) in dem Cache des TB 36 angeordnet wird, werden die Seitenrahmennummer (PFN) und die Schutzbits für die Seite, die den virtuellen PC enthält, durch die Befehlseinheit 18 zum Vervollständigen der Adressenübersetzung und der Zugriffsprüfungen verwendet. Somit wird an den Adresseneingang 37 des Befehlscaches 21 eine physikalische Adresse angelegt, oder, falls eine Cacheverfehlung vorliegt, die physikalische Adresse dieses Befehlsstroms von dem Bus 38 durch die Adresseneinheit 19 an den Cache 20 oder an den Speicher 12 angelegt. In einer zweckmäßigen Ausführung unterstützt der Befehlsstrom TB 36 irgendeine der vier wie unten definierten Granularitäts-Hinweisblockgrößen, so daß sich die Wahrscheinlichkeit eines Treffers in dem TB 36 erhöht.
- Die Ausführungseinheit oder E-Box 16 ist ausführlicher in Fig. 4 gezeigt. Die Ausführungseinheit 16 enthält den 64 Bit-Ganzzahlausführungs-Datenpfad mit einer Arithmetik- und Logikeinheit (ALU) 40, einem Trommelschieber 41 und einem Ganzzahlmultiplizierer 42. Die Ausführungseinheit 16 enthält außerdem die 32-Register/64 Bit breite Registerdatei 43 mit den Registern R0 bis R31, obgleich R31 sämtlich als Nullen festverdrahtet ist. Die Registerdatei 43 hat vier Leseports und zwei Schreibports, die die Wirkung als eine Quelle (Senke) von Operanden (Ergebnissen) sowohl für den Ganzzahlausführungs-Datenpfad als auch für die Adresseneinheit 19 ermöglichen. Wie durch die Steuerbits des decodierten Befehls auf den Bussen 28 oder 29 von der Befehlseinheit 18 spezifiziert, verbindet eine Busstruktur 44 zwei Leseports der Regi sterdatei 43 mit den gewählten Eingängen der ALU 40, mit der Schiebeeinrichtung 41 oder mit dem Multiplizierer 42, und verbindet den Ausgang der richtigen Funktion mit einem Schreibport zum Speichern des Ergebnisses. Das heißt, die Adressenfelder von dem Befehl werden durch die Busse 25 oder 27 zum Auswählen der bei der Ausführung des Befehls zu verwendenden Register angelegt, während die Steuerbits 28 oder 29 die Operation in der ALU usw. definieren und definieren, welche internen Busse der Busstruktur 44 wann zu verwenden sind usw.
- Die A-Box oder Adresseneinheit 19 ist ausführlicher in Fig. 5 gezeigt. Die A-Box 19 enthält fünf Funktionen: Die Adressenübersetzung unter Verwendung eines Übersetzungspuffers 48, einen Ladesilo 49 für ankommende Daten, einen Schreibpuffer 50 für ausgehende Schreibdaten, eine Schnittstelle 51 zu einem Datencache und die externe Schnittstelle 52 zu dem Bus 11. Der Adressenübersetzungs- Datenpfad besitzt den Verschiebungsaddierer 53, der (durch Zugreifen auf die Registerdatei 43 über den zweiten Satz Lese- und Leseports und auf den PC) die effektive Adresse erzeugt, den Daten-TB 48, der auf dem Adressenbus 54 die physikalische Adresse erzeugt, und für die Pipeline-Verarbeitung erforderliche Multiplexer und Umgehungen.
- Der voll assoziative 32-Eintrags-Datenübersetzungspuffer 48 ordnet unlängst verwendete Datenstrom-Seitentabellen- Einträge für 8 KByte-Seiten in einem Cache an. Jeder Eintrag unterstützt irgendeinen der vier Granularitäts- Hinweisblockgrößen, während ein Detektor 55 auf den Granularitätshinweis wie unten beschrieben antwortet, um die Anzahl von Bits niedriger Ordnung der von dem virtuellen Adressenbus 56 an den physikalischen Adressenbus 54 übergebenen virtuellen Adresse zu ändern.
- Für Lade- und Speicherbefehle wird die effektive virtuelle 43 Bit-Adresse über den Bus 56 an den TB 48 überreicht. Falls der E'TE der bereitgestellten virtuellen Adresse in dem Cache TB 48 angeordnet wird, werden durch die Adresseneinheit 19 die PFNs und die Schutzbits für die Seite, die die Adresse enthält, zum Vervollständigen der Adressenübersetzung und der Zugriffsüberprüfungen verwendet.
- Der Schreibpuffer 50 verfolgt zwei Ziele: (1) Das Minimieren der Anzahl der CPU-Blockierungszyklen durch Bereitstellen eines Betriebsmittels hoher (aber endlicher) Bandbreite zum Empfangen von Speicherdaten. Dies ist erforderlich, da die CPU 10 Speicherdaten mit der Spitzenrate von einem Quadwort je CPU-Zyklus erzeugen kann, die höher sein kann, als die Rate, mit der der externe Cache 20 die Daten annehmen kann; und (2) um zu versuchen, die Speicherdaten mit dem Ziel des Maximierens der Rate, mit der Daten von der CPU 10 in den externen Cache 20 geschrieben werden können, in ausgerichteten 32 Byte- Cacheblöcken zusammenzusetzen. Der Schreibpuffer 50 besitzt acht Einträge. Ein Schreibpuffereintrag ist ungültig, falls er keine zu schreibenden Daten enthält oder er ist gültig, falls er zu schreibende Daten enthält. Der Schreibpuffer 50 enthält zwei Zeiger: den Anfangsblockzeiger 57 und den Endhlockzeiger 58. Der Anfangsblockzeiger 57 zeigt auf den gültigen Schreibpuffereintrag, der die längste Zeitdauer gültig gewesen ist. Der Endblockzeiger 58 zeigt auf den gültigen Puffereintragsschlitz, der als nächster freigegeben wird. Falls der Schreibpuffer 50 vollständig voll (leer) ist, zeigt der Anfangs- und der Endblockzeiger auf den gleichen gültigen (ungültigen) Eintrag. Jedesmal, wenn dem Schreibpuffer 50 ein neuer Speicherbefehl übergeben wird, wird die durch den Befehl erzeugte physikalische Adresse mit der Adresse in jedem gültigen Schreibpuffereintrag verglichen. Falls sich die Adresse in dem gleichen ausgerichteten 32 Bit-Block wie eine Adresse in einem gültigen Schreibpuffereintrag befindet, werden die Speicherdaten mit jenem Eintrag vermischt, wobei die Langwort-Maskenbits des Eintrags aktualisiert werden. Falls in dem Schreibpuffer keine angepaßte Adresse gefunden wird, werden die Speicherdaten in den durch den Endzeiger 58 bezeichneten Eintrag geschrieben, der Eintrag wird freigegeben und der Endzeiger 58 wird auf den nächsten Eintrag inkrementiert.
- Die Adresseneinheit 19 enthält eine voll gefaltete Speicherverweis-Pipeline, die jeden Zyklus einen neuen Lade- oder Speicherbefehl annehmen kann, bis ein Füllen eines Datencaches 59 ("D-Caches") erforderlich ist. Da die Leitungen des Datencaches 59 nur bei Ladeverfehlungen zugeordnet sind, kann die Adresseneinheit 19, bis eine Ladeverfehlung auftritt, jeden Zyklus einen neuen Befehl annehmen. Wenn eine Ladeverfehlung eintritt, hält die Befehlseinheit 18 die Ausgabe aller Befehle, die den Ladeport der Registerdatei 43 verwenden (Lade-, Speicher-, Sprung-in-Unterroutine-Befehle usw.), an.
- Da das Ergebnis jedes Nachschlagens des Datencaches 59 spät in der Pipeline (wie beschrieben wird, in Phase 57) bekannt ist und Befehle im Pipeline-Zustand 53 ausgegeben werden, kann die Pipeline der Adresseneinheit 19 nach einem Ladebefehl, der den Datencache 59 verfehlt, zwei Befehle enthalten. Diese zwei Befehle werden wie folgt behandelt: Zunächst dürfen Ladevorgänge, die den Datencache 59 treffen, Treffer unter Verfehlungen, abgeschlossen werden. Zweitens werden Ladeverfehlungen in dem Silo 49 angeordnet und nachdem die erste Ladeverfehlung abgeschlossen ist, der Reihe nach wiederholt. Drittens werden Speicherbefehle zu ihrer normalen Zeit mit Bezug auf die Pipeline an den Datencache 59 übergeben. Sie werden in dem Silo angeordnet und mit Bezug auf die Ladeverluste der Reihe nach dem Schreibpuffer 50 übergeben.
- Wie ausführlicher in Fig. 6 gezeigt, kann die auf dem Chip befindliche Pipeline-Gleitkommaeinheit 17 oder F-Box sowohl DEC- als auch IEEE-Gleitkommabefehle gemäß dem zu beschreibenden Befehlssatz ausführen. Die Gleitkommaeinheit 17 enthält eine 32 Eintrags-64 Bit-Gleitkommaregisterdatei 61 und eine Gleitkomma-Arithmetik- und Logikeinheit 62. Divisionen und Multiplikationen werden in einer Multiplikations- und Divisionsschaltung 63 ausgeführt. Eine Busstruktur 64 verbindet zwei Leseports der Registerdatei 61 mit der entsprechenden Funktionsschaltung, auf die die Steuerbits des decodierten Befehls auf den Bussen 28 oder 29 von der Befehlseinheit 18 leiten. Die für eine Operation ausgewählten Register werden durch den Ausgangsbus 26 oder 27 von dem Befehlscode definiert. Mit Ausnahme der Gleitkomma-Divisionsbefehle, die nur alle zwei Zyklen angenommen werden können, kann die Gleitkommaeinheit 17 jeden Zyklus einen Befehl annehmen. Alle Gleitkommabefehle zeigen eine Latenzzeit von mehr als einem Zyklus.
- In einer Beispielausführung verfügt die CPU 10 über einen 8 KByte-Datencache 59 und über einen 8 KByte-Befehlscache 21, wobei die Größe des Caches von der verfügbaren Chipfläche abhängt. Der auf dem Chip befindliche Datencache 59 ist ein physikalischer, direkt abgebildeter Durchschreib-Lesezuordnungscache mit 32 Byte-Blöcken (1- Hexword-Blöcken). Durch Verwendung eines nicht gezeigten Korrekturbusses kann das System den Datencache 59 in Kohärenz mit dem Speicher 12 halten. Der Datencache 59 hat in der Datenanordnung 66 eine Langwortparität, wobei es für jeden Etiketteintrag in dem Etikettspeicher 67 ein Paritätsbit gibt.
- Der Befehlscache 21 kann z. B. 8 KBytes oder 16 KBytes umfassen oder kann in Abhängigkeit von der Fläche größer oder kleiner sein. Obgleich er gemäß der obigen Beschreibung eine physikalische Adressierung mit einem TB 36 verwendet, kann er auch ein virtueller Cache sein, wobei er in diesem Fall keine Vorkehrung zum Aufrechterhalten seiner Kohärenz mit dem Speicher 12 enthält. Falls der Cache 21 ein physikalisch adressierter Cache ist, enthält der Chip eine Schaltungsanordnung zum Aufrechterhalten seiner Kohärenz mit dem Speicher: (1) wenn die Einträge des Schreibpuffers SG an die Busschnittstelle 52 gesendet werden, wird die Adresse gegenüber einem Etikett des Duplikat-Befehlscaches 21 verglichen, wobei der entsprechende Block des Befehlscaches 21 bedingt korrigiert wird; (2) wird der Korrekturbus mit dem Befehlscache 21 verbunden.
- Die Hauptdatenpfade und die Register in der CPU 10 sind alle 64 Bits breit. Das heißt, jedes Ganzzahlregister 43 sowie jedes Gleitkomma-Register 61 ist ein 64 Bit-Register, wobei die ALU 40 zwei 64 Bit-Eingänge 40a und 40b und einen 64 Bit-Ausgang 40c besitzt. Die Busstruktur 44 in dem Ausführungsbus 16, die tatsächlich aus mehr als einem Bus besteht, besitzt 64 Bit breite Datenpfade zum Übertragen von Operanden zwischen den Ganzzahlregistern 43 und den Eingängen und Ausgängen der ALU 40. Die Befehlsdecodierer 23 und 24 erzeugen Registeradressenausgänge 26 und 27, die an die Adressierungsschaltungen der Ganzzahlregister 43 und/oder der Gleitkomma-Register 61 angelegt werden, um auszuwählen, welche Registeroperanden als Eingaben an die ALU 41 oder 62 verwendet werden und welches der Register 43 oder der Register 61 das Ziel für die ALU-Ausgabe (oder für die Ausgabe einer anderen Funktionseinheit) ist.
- Die duale Ausgabeentscheidung wird durch die Schaltungsanordnung 25 gemäß der folgenden Anforderung getroffen, wobei in einem Zyklus nur ein Befehl aus der ersten Spalte und ein Befehl aus der zweiten Spalte ausgegeben werden kann:
- Das heißt, daß die CPU 10 mit einem Ganzzahl-Operationsbefehl eine duale Ausgabe eines Ganzzahl-Lade- oder Speicherbefehls, aber keine Ganzzahlverzweigung mit einem Ganzzahl-Lade- oder -Speichervorgang zulassen kann.
- Natürlich überprüft die Schaltungsanordnung 25, bevor sie die Ausgabe zweier Befehle in dem gleichen Zyklus zuläßt, außerdem, ob die Betriebsmittel vorhanden sind.
- Ein wichtiges Merkmal ist die RISC-Eigenschaft der CPU 10 aus den Fig. 1-6. Anstatt Befehle unterschiedlicher Länge zuzulassen, haben die durch diese CPU 10 ausgeführten Befehle immer die gleiche Größe, in diesem Fall eine Größe von 32 Bits. Anstatt die Befehle in einer variablen Anzahl von Zyklen auszuführen, werden die Befehle (wie unten beschrieben, in der Pipeline angeordnet und unter der Annahme keiner Blockierungen) im Durchschnitt in einem Maschinenzyklus ausgeführt. Der Befehlssatz umfaßt nur Register-Register-Arithmetik- und -Logikoperationen oder Register-Speicher-Lade- und -Speicheroperationen (oder Speicher-Register-Lade- und -Speicheroperationen), wobei es keine komplexen Speicheradressierungsmodi wie etwa indirekte Speicheradressierungsmodi usw. gibt. Ein Befehl, der eine Operation in der ALU 40 ausführt, erhält seine Operanden immer von der Registerdatei 43 (oder von einem Feld des Befehls selbst) und schreibt das Ergebnis immer in die Registerdatei 43; diese Operanden werden nie aus dem Speicher erhalten, und das Ergebnis wird nie in den Speicher geschrieben. Ladevorgänge vom Speicher erfolgen immer in ein Register in den Registerdateien 43 oder 61, während Speicheroperationen in den Speicher immer aus einem Register in der Registerdatei erfolgen.
- In Fig. 7 besitzt die CPU 10 eine siebenstufige Pipeline für den Ganzzahlbetrieb und für Speicherverweisbefehle. Die Befehlseinheit 18 besitzt eine siebenstufige Pipeline, um Treffer/Verfehlungen des Befehlscaches 21 festzustellen. Fig. 7 ist ein Pipeline-Diagramm für die Pipeline der Ausführungseinheit 16, der Befehlseinheit 18 und der Adresseneinheit 19. Die Gleitkommaeinheit 17 definiert eine zu der Pipeline der Ausführungseinheit 16 parallele Pipeline, nutzt normalerweise aber mehr Stufen zur Ausführung. Die sieben Stufen werden als 50-56 bezeichnet, wobei eine Stufe in einem Maschinenzyklus (Taktzyklus) auszuführen ist. Die ersten vier Stufen 50, 51, 52 und 53 werden in der Befehlseinheit 18 ausgeführt, während die letzten drei Stufen 54, 55 und 56 in Abhängigkeit davon, ob der Befehl ein Operationsbefehl oder ein Lade- und Speiche Befehl ist, entweder in der Ausführungseinheit 16 oder in der Adresseneinheit 19 ausgeführt werden. Alle Boxen enthalten Umgehungen, die ermöglichen, die Ergebnisse eines Befehls als Operanden eines folgenden Befehle zu verwenden, ohne daß diese in die Registerdatei 43 oder 61 geschrieben werden müssen.
- Die erste Stufe 50 der Pipeline ist die Befehlshol- oder IF-Phase, während der die Befehlseinheit 18 unter Verwendung der Adresse des PC 33 als einer Basisadresse zwei neue Befehle von dem Befehlscache 21 holt. Die zweite Phase 51 ist die Austauschphase, während der die zwei geholten Befehle durch die Schaltung 25 ausgewertet werden, um zu sehen, ob sie gleichzeitig ausgegeben werden können. Die dritte Phase 52 ist die Decodierungsphase, während der die zwei Befehle in den Decodierern 23 und 24 decodiert werden, um die Steuersignale 28 und 29 und die Registeradressen 26 und 27 zu erzeugen. Die vierte Stufe 53 ist die Zugriffsphase der Registerdatei 43 für Operationsbefehle, und sie ist außerdem der Ausgabeprüfungs-Entscheidungspunkt für alle Befehle und die Befehlsausgabephase. Falls es sich um einen Operationsbefehl handelt, ist die fünfte Phase 54 Zyklus eins der Berechnung (z. B. in der ALU 40), während die Befehlseinheit 18 außerdem in dem Adressengenerator 32 den neuen PC 33 berechnet; falls es sich um einen Speicherverweisbefehl handelt, berechnet die Adresseneinheit 19 unter Verwendung des Addierers 53 die effektive Datenstromadresse. Falls es sich um einen Operationsbefehl handelt, ist die sechste Phase 55 Zyklus zwei der Berechnung (z. B. in der ALU 40), während sie für Speicherverweise die Nachschlagphase des Daten-TB 48 ist. Für Operationsbefehle mit einem Registerschreibvorgang ist die letzte Phase 56 die Schreibphase, während der z. B. der Ausgang 40c der ALU 40 über den Schreibport in die Registerdatei 43 geschrieben wird, während sie für Befehlsstrom- oder Datenstromverweise der Treffer/Verfehlungs-Entscheidungspunkt des Datencaches 59 oder des Befehlscaches 21 ist. Die Pipeline der CPU 10 unterteilt diese sieben Phasen 50-56 der Befehlsverarbeitung in vier statische und in drei dynamische Ausführungsphasen. Die vier ersten Phasen 50-53 bestehen, wie eben beschrieben, aus dem Befehlsholen, dem Austausch, dem Decodieren und der Ausgabelogik.
- Diese Phasen 50-53 sind statisch dadurch, daß Befehle, während sie auf ein Betriebsmittel warten oder aus anderen Gründen blockiert sind, in der gleichen Pipeline- Phase für mehrere Phasen gültig bleiben können. Diese Blockierungen werden auch als Pipeline-Stops bezeichnet. Ein Pipeline-Stop kann auftreten, während null Befehle ausgegeben werden oder während ein Befehl eines Paars ausgegeben und der zweite in der Ausgabestufe gehalten wird. Ein Pipeline-Stop besagt, daß ein gültiger Befehl oder gültige Befehle für die Ausgabe überreicht werden, aber nicht verarbeitet werden können.
- Beim Befriedigen aller Ausgabeanforderungen dürfen die Befehle durch die Pipeline bis zum Abschluß fortfahren. Nach der Ausgabe in 53 können die Befehle nicht in einer gegebenen Pipeline-Stufe 54-56 gehalten werden. Es ist der Ausgabestufe 53 (der Schaltungsanordnung 25) überlassen, sicherzustellen, daß alle Betriebsmittelkonflikte aufgelöst sind, bevor ein Befehl fortsetzen darf. Das einzige Mittel zum Anhalten von Befehlen nach der Ausgabestufe 53 ist eine Abbruchbedingung.
- Abbrüche können von einer Anzahl von Ursachen herrühren. Im allgemeinen können sie in zwei Klassen gruppiert werden, nämlich Ausnahmen (einschließlich Unterbrechungen) und Nicht-Ausnahmen. Der Grundunterschied zwischen den zwei Klassen besteht darin, daß Ausnahmen erfordern, daß alle Befehle, die nach dem Befehl geholt wurden, der die Abbruchbedingung hervorgerufen hat, einschließlich dual ausgegebener Befehle aus der Pipeline, gelöscht werden und daß der Befehlsholvorgang bei der umgeleiteten Adresse neu gestartet wird. Beispiele von Nicht-Ausnahme- Abbruchbedingungen sind Verzweigungs-Fehlvorhersagen, Unterroutinenabrufe und Rückkehr-Fehlvorhersagen und Verfehlungen des Befehlscaches 21. Verfehlungen des Datencaches 59 erzeugen keine Abbruchbedingungen, können aber Pipeline-Stops bewirken.
- Im Fall einer Ausnahme bricht die CPU 10 zunächst alle nach dem Ausnahmebefehl ausgegebenen Befehle ab. Infolge der Art einiger Fehlerbedingungen kann es sein, daß dies erst im Schreibzyklus stattfindet. Danach wird die Adresse des Ausnahmebefehls in einem internen Prozessorregister zwischengespeichert. Wenn die Pipeline vollständig gelöscht ist, beginnt der Prozessor bei der durch eine PALCode-Sendung gegebenen Adresse mit der Befehlsausführung. Die Pipeline ist gelöscht, wenn alle ausstehenden Schreibvorgänge sowohl in die Ganzzahl- als auch in die Gleitkomma-Registerdatei 43 und 61 abgeschlossen sind und alle ausstehenden Befehle den Punkt in der Pipeline passiert haben, so daß sichergestellt ist, daß alle Befehle ausnahmslos ohne eine Maschinenüberprüfung abgeschlossen werden.
- In Fig. 8 sind die Formate der verschiedenen Befehlstypen des durch die CPU aus den Fig. 1-7 ausgeführten Befehlssatzes gezeigt. Ein Typ ist ein Speicherbefehl 70, der in den Bits < 31 : 26> einen 6 Bit-Operationscode, in den Bits < 25 : 21> und < 20 : 16> zwei 5 Bit-Registeradressenfelder Ra und Rb und in den Bits < 15 : 0> eine vorzeichenbehaftete 16 Bit-Verschiebung enthält. Dieser Befehl wird verwendet, um zwischen den Registern 43 und dem Speicher (dem Speicher 12 oder den Caches 59 oder 20) Daten zu übertragen, um eine effektive Adresse in ein Register der Registerdatei zu laden und für Unterroutinen-Sprünge. Das Verschiebungsfeld < 15 : 0> ist ein Byteoffset; es ist vorzeichenerweitert und wird zu dem Inhalt des Registers Rb addiert, um eine virtuelle Adresse zu bilden. In Abhängigkeit von dem spezifischen Befehl wird die virtuelle Adresse als eine Speicher-Lade- und -Speicheradresse oder als ein Ergebniswert verwendet.
- Außerdem ist in Fig. 8 das Verzweigungsbefehlsformat 71 gezeigt, wobei dieses in den Bits < 31 : 26> einen 6 Bit- Operationscode, in den Bits < 25 : 21> ein 5 Bit-Adressenfeld und in den Bits < 20 : 0> eine vorzeichenbehaftete 21 Bit-Verschiebung enthält. Die Verschiebung wird als ein Langwort-Offset behandelt, was bedeutet, daß sie (zum Adressieren einer Langwortgrenze) um zwei Bits nach links verschoben, auf 64 Bit vorzeichenerweitert und zur Bildung der virtuellen Zieladresse zu dem aktualisierten Inhalt des PC 33 addiert wird (ein Überlauf wird ignoriert).
- Die Operationsbefehle 72 und 73 haben die in Fig. 8 gezeigten Formate, mit einem Format 72 für Dreiregister- Operanden, einem Format 73 für Zweiregister-Operanden und einer Literalkonstante. Das Operationsformat wird für Befehle verwendet, die Ganzzahlregister-Operationen ausführen, wobei sie in der Registerdatei 43 zwei Quelloperanden und einen Zieloperanden zulassen. Einer der Quelloperanden kann eine Literalkonstante sein. Das Bit 12 definiert, ob der Operationsbefehl für eine Zweiquellregister-Operation oder für ein Quellregister und eine Literalkonstante ist. Zusätzlich zu dem 6 Bit-Operationscode bei den Bits < 31 : 26> hat das Operationsformat bei den Bits < 11 : 5> ein 7 Bit-Funktionsfeld, um einen breiteren Wahlbereich für die Arithmetik- und Logikoperation zuzulassen. Das Quellregister Ra ist auf jeden Fall bei den Bits < 25 : 21> spezifiziert, während das Zielregister Rc bei den Bits < 4 : 0> spezifiziert ist. Falls das Bit 12 eine Null ist, ist das Quellregister Rb bei den Bits < 20 : 16> definiert, während durch die Bits < 20 : 13> des Befehls eine Null-erweiterte 8 Bit-Literalkonstante gebildet wird, wenn das Bit 12 eine Eins ist. Diese Literalkonstante wird als eine positive ganze Zahl in dem Bereich von 0 bis 255 interpretiert und auf 64 Bits Nullerweitert.
- Außerdem ist in Fig. 8 das Gleitkomma-Operationsbefehlsformat 74 gezeigt, das für Befehle verwendet wird, die Operationen aus dem Gleitkomma-Register 61 in das Gleit komma-Register 61 ausführen. Zusammen mit einem 11 Bit- Funktionsfeld bei den Bits < 15 : 5> enthalten die Gleitkomma-Operationsbefehle wie zuvor bei den Bits < 31 : 26> einen 6 Bit-Operationscode. Es gibt drei Operandenfelder Fa, Fb und Fc, deren jedes, wie durch den Befehl definiert, entweder einen Ganzzahl- oder einen Gleitkommaoperanden spezifiziert; durch Fa, Fb und Fc sind nur die Register 13 spezifiziert, wobei diese Register aber entweder Ganzzahl- oder Gleitkommawerte enthalten können. Literalkonstanten werden nicht unterstützt. Gleitkomma- Umsetzungen verwenden eine Teilmenge des Gleitkomma- Operationsformats 74 aus Fig. 8 und führen Register- Register-Wandlungsoperationen aus; der Operand Fb spezifiziert die Quelle, während der Operand Fa Reg 31 (alles Nullen) sein sollte.
- Das andere Befehlsformat 75 aus Fig. 8 ist das für die Befehle der Bibliothek der privilegierten Architektur (PAL oder PALCode), die verwendet werden, um erweiterte Prozessorfunktionen zu spezifizieren. In diesen Befehlen ist wie zuvor bei den Bits < 31 : 26> ein 6 Bit-Operationscode vorhanden, während ein 26 Bit-PALCode-Funktionsfeld < 25 : 0> den Betrieb spezifiziert. Die Quell- und Zieloperanden für PALCode-Befehle werden in festen Registern bereitgestellt, die in den einzelnen Befehlsdefinitionen spezifiziert sind.
- Das Sechsbit-Operationscodefeld < 31 : 26> in den Befehlsformaten aus Fig. 8 ermöglicht nur das Codieren von 26 oder vierundsechzig verschiedenen Befehlen. Somit wäre der Befehlssatz auf vierundsechzig beschränkt. Jedoch ermöglichen die "Funktions"-Felder in den Befehlsformaten 72, 73 und 74 Abwandlungen von Befehlen mit dem gleichen Operationscode in den Bits < 31 : 26> . Außerdem erlauben die "Hinweis"-Bits in dem Sprungbefehl, wie unten erläutert, Abweichungen wie etwa JSR, RET.
- In Fig. 9 ist das Format 76 der auf dem internen Adressenbus 56 erklärten virtuellen Adresse gezeigt. Diese Adresse hat nominell eine Breite von 64 Bits, wobei aber praktische Implementierungen in den nächsten Jahren natürlich wesentlich kleinere Adressen verwenden werden. Zum Beispiel erzeugt eine Adresse aus 43 Bits einen Adressierungsbereich von 8 Terabytes. Das Format umfaßt einen Byteoffset 77 mit einer von der verwendeten Seitengröße abhängigen Größe von z. B. 13 Bits oder 16 Bits. Falls die Seiten 8 KBytes umfassen, beträgt das Byte-pro- Seite-Feld 77 13 Bits, für 16 Kbytes-Seiten beträgt das Feld 77 14 Bits, für 32 Kbytes-Seiten beträgt es 15 Bits und für 64 Kbytes-Seiten beträgt es 16 Bits. Wie gezeigt, umfaßt das Format 76 drei durch Seg1, Seg2 und Seg 3 bezeichnete Abschnittsfelder 78, 79 und 80, die in Abhängigkeit von der Implementierung außerdem eine veränderliche Größe haben. Die Abschnitte Seg1, Seg2 und Seg3 können z. B. 10 bis 13 Bits betragen. Falls jeder Abschnitt eine Größe von 10 Bits hat, ist ein durch Seg3 definierter Abschnitt 1 K Seiten, ein Abschnitt für Seg2 ist 1 M Seiten und ein Abschnitt für Seg1 ist 1 G Seiten. Die Segmentzahlfelder Seg1, Seg2 und Seg3 haben für eine gegebene Implementierung die gleiche Größe. Die Segmentzahlfelder sind eine Funktion der Seitengröße; auf einer gegebenen Ebene sind alle Seitentabelleneinträge nicht größer als eine Seite, so daß der Seitenaustausch zum Zugreifen auf die Seitentabelle minimiert wird. Das Seitenrahmenzahlfeld (PFN-Feld) in dem PTE ist immer 32 Bits breit; somit wächst beim Anwachsen der Seitengröße auch die virtuelle und die physikalische Adressengröße.
- Die physikalischen Adressen sind höchstens 48 Bits, wobei aber ein Prozessor einen kleineren physikalischen Adressenraum verwirklichen kann, indem er eine Anzahl Bits hoher Ordnung nicht verwirklicht. Die zwei verwirklichten höchstwertigen Bits der physikalischen Adresse wählen einen Cache-Richtlinien-abhängigen oder implementierungsabhängigen Typ des Adressenraums. Verschiedene Implementierungen können diese Bits verschiedenen für das System geeigneten Verwendungen und Beschränkungen unterwerfen. Zum Beispiel kann das Bit < 29> in einer Workstation mit einem physikalischen 30 Bit-< 29 : 0> -Adressenraum zwischen Speicher und E/A wählen, während das Bit < 28> das Anordnen im Cache im E/A-Raum freigeben oder sperren kann und im Speicherraum null sein muß.
- In einem Mehrprogrammsystem können typischerweise mehrere Prozesse gleichzeitig im physikalischen Speicher 12 (oder in den Caches) liegen, so daß durch die CPU 10 ein Speicherschutz und mehrfache Adressenräume verwendet werden um sicherzustellen, daß ein Prozeß nicht entweder andere Prozesse oder das Betriebssystem stört. Um die Zuverlässigkeit der Software weiter zu erhöhen, erzeugen vier hierarchische Zugriffsmodi eine Speicherzugriffssteuerung. Von den am höchsten zu den am niedrigsten privilegierten sind dies: Kernmodus, Ausführungsmodus, Organisationsmodus und Anwendermodus. Der Schutz wird auf der Ebene einer einzelnen Seite spezifiziert, wobei für jeden der vier Zugriffsmodi eine Seite unzugänglich, nur lesbar oder lesbar und beschreibbar sein kann. Seiten, auf die zugegriffen werden kann, können auf einen Nur-Daten- Zugriff oder auf einen Nur-Befehls-Zugriff eingeschränkt werden
- In Fig. 10 ist ein Seitentabelleneintrag oder PTE 81 gezeigt, wie er in den Übersetzungspuffern 36 oder 48 oder in den in dem Speicher 12 durch das Betriebssystem aufgestellten Seitentabellen gespeichert ist. Der PTE 81 hat die Breite eines Quadworts und umfaßt eine 32 Bit- Seitenrahmenzahl oder eine PFN 82 bei den Bits < 63 : 32> sowie bestimmte Software- und Hardware-Steuerinformationen in einem Feld 83 mit den Bits < 15 : 0> , wie sie in Tabelle A zum Verwirklichen der Schutzmerkmale und dergleichen dargestellt sind.
- Ein besonderes Merkmal ist der Granularitätshinweis 84 in den zwei Bits < 6 : 5> . Um dem Übersetzungspuffer 36 oder 48 einen Hinweis zu geben, daß Blöcke von Seiten als eine größere Einzelseite behandelt werden können, können diese zwei Bits durch Software auf einen von null verschiedenen Wert gesetzt werden. Der Block ist eine ausgerichtete Gruppe von 8N Seiten, wobei N der Wert des PTE < 6 : 5> , z. B. eine Gruppe von 1, 8, 64 oder 512 Seiten ist, die bei einer virtuellen Adresse mit (Seitengröße + 3 N) Nullen niedriger Ordnung beginnt. Der Block ist eine Guppe physikalisch zusammenhängender Seiten, die sowohl virtuell als auch physikalisch ausgerichtet sind; in dem Block beschreiben die niedrigen 3N Bits der PFNs die Identitätsabbildung (d. h., sie werden durch Addieren zu dem Byte-pro-Seite-Feld als Teil der physikalischen Adresse verwendet), während die hohen (32-3N) PFN-Bits alle gleich sind. Alle PTEs in dem Block haben für die Bits < 15 : 0> die gleichen Werte, d. h. die gleichen Schutz-, Fehler-, Granularitäts- und Gültigkeitsbits aus Tab. A. Die Hardware kann diesen Hinweis verwenden, um den gesamten Block mit einem TB-Eintrag anstelle von acht, vierundsechzig oder 512 einzelnen TB-Einträgen abzubilden. Es wird angemerkt, daß für eine große Speicherstruktur wie etwa für einen Rahmenpuffer oder für einen Nicht-Seiten-Pool, der tatsächlich in zusammenhängende virtuelle Seiten mit völlig gleichen Schutz-Fehler- und Gültigkeitsbits abgebildet wird, ein Granularitätshinweis geeignet sein könnte. Ein Beispiel der Verwendung des Granularitätshinweises ist das Speichern eines Videorahmens für eine Anzeige; hier kann der Datenblock, der einen Rahmen definiert, für eine hochauflö sende Farbanzeige vierundsechzig 8-KB-Seiten einnehmen und so, um die Verwendung von vierundsechzig Seitentabelleneinträgen zum Abbilden der physikalischen Adressen für diesen Rahmen zu vermeiden, statt dessen einer verwendet werden. Im Fall eines Verweises auf den Rahmenpuffer z. B. zum Zeichnen einer vertikalen Linie auf dem Bildschirm vermeidet dies eine große Menge von PTE-Austauschen aus dem physikalischen Speicher 12 zum TB 48.
- In Fig. 11 wird die virtuelle Adresse auf dem Bus 56 verwendet, um in dem TB 48 nach einem PTE zu suchen, und wenn dieser nicht gefunden wird, wird das Seg1-Feld 78 zum Indizieren in einer erste Seitentabelle 85 verwendet, die bei einer in einem internen Register 85 gespeicherten Basisadresse gefunden wird. Der bei dem Seg1-Index in Tabelle 85 gefundene Eintrag 87 ist die Basisadresse für eine zweite Seitentabelle 88, für die zum Indizieren in einen Eintrag 89 das Seg2-Feld 79 verwendet wird. Der Eintrag 89 zeigt auf die Basisadresse einer dritten Seitentabelle 90, wobei das Seg3-Feld 80 zum Indizieren in einen PTE 91 verwendet wird, der in Kombination mit dem Byteoffset 77 von der virtuellen Adresse im Addierer 92 die physikalische Seitenrahmennummer zum Erzeugen der physikalischen Adresse auf dem Bus 54 ist. Wie oben erwähnt, kann die Größe des Byteoffsets 77 in Abhängigkeit von dem Granularitätshinweis 84 variieren.
- Unter Verwendung der Befehlsformate aus Fig. 8 führt die CPU aus Fig. 1 einen Befehlssatz aus, der neun Typen von Befehlen umfaßt. Diese umfassen (1) Ganzzahl-Lade- und -Speicherbefehle, (2) Ganzzahl-Steuerbefehle, (3) Ganzzahlarithmetik, (4) Logik- und Schiebebefehle, (5) Bytemanipulationen, (6) Gleitkommalade- und -speichervorgänge, (7) Gleitkommasteuervorgänge, (8) Gleitkomma- Arithmetik und (9) verschiedene Vorgänge.
- Die Ganzzahl-Lade- und -Speicherbefehle verwenden das Speicherformat 70 aus Fig. 8 und umfassen die folgenden Befehle:
- LDA - Lade Adresse
- LDAH - Lade Adresse hoch (verschiebe nach oben)
- LDL - Lade vorzeichenerweitertes Langwort
- LDQ - Lade Quadwort
- LDL_ L - Lade vorzeichenerweitertes Langwort gesperrt
- LDQ_ L - Lade Quadwort gesperrt
- LDQ_ U - Lade Quadwort nicht ausgerichtet
- STL - Speichere Langwort
- STQ - Speichere Quadwort
- STL_C - Speichere Langwort bedingt
- STQ_C - Speichere Quadwort bedingt STQ_U - Speichere Quadwort nicht ausgerichtet.
- Für jeden dieser Befehle wird die virtuelle Adresse durch Addieren des Registers Rb zu der vorzeichenerweiterten 16 Bit-Verschiebung (oder 65536-mal zu der vorzeichenerweiterten Verschiebung für LDAH) berechnet.
- Für die Ladebefehle LDL und LDQ wird der Quelloperand bei der berechneten Adresse vom Speicher geholt, falls es sich um ein Langwort handelt, vorzeichenerweitert, und in das Register Ra geschrieben. Falls die Daten nicht von Natur aus ausgerichte t sind, wird eine Ausrichtungsausnahme erzeugt. Für die Speicherbefehle STL und STQ wird der Inhalt des Registers Ra bei der berechneten virtuellen Adresse in den Speicher geschrieben. Die Adressen- Ladebefehle LDA und LDAH ähneln den Ladebefehlen LDL und LDQ, wobei der Betrieb aber nach dem Berechnen der Adresse angehalten wird; die berechnete virtuelle 64 Bit- Adresse wird in das Register Ra geschrieben.
- Die gesperrten Ladebefehle und die bedingten Speicherbefehle (LDL_L, LDQ_L, STL_L UND STQ_L) schaffen zusammen ein wichtiges Merkmal der hier beschriebenen Architektur. Insbesondere dient diese Befehlskombination dazu, die Datenintegrität in einem Mehrprozessorsystem oder in einem Pipeline-Prozessorsystem durch Schaffung einer Atomaktualisierung eines gemeinsam genutzten Speicherbereichs sicherzustellen. Wie in den anderen Befehlen dieses Typs wird die virtuelle Adresse durch Addieren des Inhalts des in dem Befehl spezifizierten Registers Rb zu der in dem Befehl angegebenen vorzeichenerweiterten 16 Bit-Verschiebung berechnet. Wenn ein LDL_L- oder ein LDQ_L-Befehl fehlerfrei ausgeführt wird, protokolliert die CPU 10 die physikalische Zieladresse vom Bus 54 in ein Register gesperrter physikalischer Adressen 95 aus Fig. 5 und setzt einen Sperrmerker 96. Falls der Sperrmerker 96 beim Ausführen eines bedingten Speicherbefehls noch gesetzt ist, wird das Speichern vorgenommen, d. h., der Operand wird bei der physikalischen Adresse in den Speicher geschrieben, wobei der Wert des Sperrmerkers 96 (eine Eins) in Ra zurückgegeben wird und der Sperrmerker auf null gesetzt wird; wenn der Sperrmerker andernfalls null ist, wird das Speichern in dem Speicher nicht vorgenommen, wobei der in Ra zurückgegebene Wert null ist. Falls der Sperrmerker für die CPU 10 gesetzt ist und in dem gesperrten Bereich physikalischer Adressen im Speicher 12 eine andere CPU 15 einen Speichervorgang vornimmt, wird der Sperrmerker 96 in der CPU 10 gelöscht. Zu diesem Zweck überwacht die CPU 10 alle Schreibvorgänge in den Speicher 12, wobei der Merker 96 gelöscht wird, falls die Adresse im Register 95 übereinstimmt. Der gesperrte Bereich ist der ausgerichtete Block von 2 N Bytes, der die gesperrte physikalische Adresse im Register 95 enthält; dieser Wert 2N kann in Abhängigkeit von der Konstruktion einer CPU variieren und beträgt mindestens acht Bytes (der minimale Sperrbereich ist ein ausgerichtetes Quadwort) - der Wert beträgt höchstens die Seitengröße für diese CPU (der maximale Sperrbereich ist eine physikalische Seite). Der Sperrmerker 96 einer CPU 10 wird außerdem gelöscht, wenn die CPU irgendeine Ausnahme, eine Unterbrechung oder einen Rufe-PALCode-Befehl feststellt. Falls die Verzweigung mißlingt, führt die in der CPU 10 ausgeführte Befehlsfolge
- LDQ L
- modify
- STQ L
- BEQ
- einen Atom-Lese-, -Modifikations-, -Schreibvorgang eines Datums in einem gemeinsam genutzten Speicher 12 aus; falls die Verzweigung genommen wird, hat der Speichervorgang den Bereich im Speicher 12 nicht modifiziert, wobei die Folge wiederholt werden kann, bis sie gelingt. Das heißt, die Verzweigung wird genommen, falls das Register Ra gleich null ist, was bedeutet, daß der durch den bedingten Speicherbefehl an Ra zurückgegebene Wert des Sperrmerkers null ist (der Speichervorgang nicht erfolgreich ist). In Anhang A ist diese Befehlsfolge ausführlicher gezeigt.
- Falls zwei gesperrte Ladebefehle ohne dazwischenliegenden bedingten Speicherbefehl ausgeführt werden, überschreibt der zweite in dem Sperrmerker 96 und in dem Register 95 den Zustand des ersten. Falls zwei bedingte Speicherbefehle ohne dazwischenliegenden gesperrten Ladebefehl ausgeführt werden, mißlingt der zweite Speicherbefehl immer, da der erste den Sperrmerker 96 löscht.
- Die nicht ausgerichteten Ladebefehle LDQ_U und LDL_U sind die gleichen wie ein Ladevorgang LDQ oder LDL, wobei aber die drei Bits niedriger Ordnung der virtuellen Adresse gelöscht werden (die nicht ausgerichteten Ladebefehle für Byteadressen verwendet werden), so daß ein ausgerichtetes Quadwort oder Langwort geholt wird. Außerdem wird kein Ausrichtungsfehler signalisiert, wie es für einen einfachen LDQ- oder LDL-Befehl der Fall wäre, wenn eine Byteadresse (eine nicht ausgerichtete Adresse) gesehen würde. Wie unten beschrieben wird, wird für Bytemanipulationen ein nicht ausgerichteter Ladebefehl verwendet. Der nicht ausgerichtete Speicherbefehl STQ_U ist in ähnlicher Weise einfach wie der STQ-Befehl, wobei er aber die drei Bits niedriger Ordnung der virtuellen Adresse entfernt und keinen Fehler infolge der nicht ausgerichteten Adresse signalisiert.
- Der Steuerbefehlstyp umfaßt acht bedingte Verzweigungsbefehle, einen unbedingten Verzweigungs-, einen Verzweigung-in-Unterroutine- und einen Sprung-in-Unterroutine- Befehl, die alle das Verzweigungsbefehlsformat 71 oder das Speicherbefehlsformat 70 aus Fig. 8 nutzen. Diese Steuerbefehle sind:
- Unter Verwendung des Verzweigungsbefehlsformats:
- BEQ - Verzweige, falls das Register gleich null ist
- BNE - Verzweige, falls das Register nicht gleich null ist
- BLT - Verzweige, falls das Register kleiner als null ist
- BLE - Verzweige, falls das Register kleiner als oder gleich null ist
- BGT - Verzweige, falls das Register größer als null ist
- BGE - Verzweige, falls das Register größer als oder gleich null ist
- BLBC - Verzweige, falls das Bit niedriger Ordnung des Registers gelöscht ist
- BLBS - Verzweige, falls das Bit niedriger Ordnung des Registers gesetzt ist
- BR - Unbedingte Verzweigung
- BSR - Unterroutinen-Verzweigung
- Unter Verwendung des Speicherbefehlsformats:
- JMP - Sprung
- JSR - Sprung-in-Unterroutine
- RET - Rückkehr-aus-Unterroutine
- JSR_COROUTINE - Sprung-in-Unterroutinerückkehr
- Bei den bedingten Verzweigungsbefehlen wird das Register Ra geprüft, wobei der PC mit der virtuellen Zieladresse geladen wird, falls die spezifizierte Beziehung wahr ist; andernfalls wird die Ausführung mit dem nächsten darauffolgenden Befehl fortgesetzt. Die Verschiebung für entweder bedingte oder unbedingte Verzweigungen wird als ein vorzeichenbehafteter Langwort-Offset behandelt, was bedeutet, daß sie, um die virtuelle Zieladresse zu bilden, um zwei Bits (zum Adressieren einer Langwortgrenze) nach links verschoben, auf 64 Bits vorzeichenerweitert und zu dem aktualisierten PC addiert wird. Die bedingten oder unbedingten Verzweigungsbefehle sind nur relativ zum PC, wobei die vorzeichenbehaftete 21 Bit-Verschiebung einen Vorwärts/Rückwärtsverzweigungsabstand von +/- 1 M Langwörtern ergibt.
- Für die unbedingten Verzweigungsbefehle BR oder BSR wird die Adresse des auf den BR oder auf den JMP folgenden Befehls (d. h. der aktualisierte PC) in das Register Ra geschrieben, worauf das Laden des PC mit der virtuellen Zieladresse folgt. BR und BSR führen völlig gleiche Operationen aus; sie unterscheiden sich nur in den Hinweisen an die Verzweigungsvorhersagelogik - BSR wird als ein Unterroutinenabruf vorhergesagt (verschiebt die Rückkehradresse in einen Verzweigungsvorhersage-Stapel), während BR als eine Verzweigung (ohne Verschieben) vorhergesagt wird.
- Für die Sprung- und Rückkehrbefehle wird die Adresse des diesem Befehl folgenden Befehls (der aktualisierte Programmzähler) in das Register Ra geschrieben, worauf das Laden des PC mit der virtuellen Zieladresse folgt. Der neue PC wird vom Reqister Rb geliefert, wobei die zwei Bits niedriger Ordnung von Rb ignoriert werden. Ra und Rb können das gleiche Register spezifizieren; die Zielberechnung unter Verwendung des alten Werts wird vor dem Zuweisen des neuen Werts vorgenommen.
- Alle vier Befehle JMP, JSR, RET und JSR COROUTINE führen völlig gleiche Operationen aus; sie unterscheiden sich nur in den Hinweisen an die Verzweigungsvorhersagelogik. Das (nicht für eine Verschiebung verwendete) Verschiebungsfeld des Befehls wird zum Übergeben dieser Informationen verwendet. Die vier verschiedenen "Operationscodes" setzen verschiedene Bitmuster in disp< 15 : 14> , während der Hinweisoperand disp< 13 : 0> setzt. Diese Bits sind zur folgenden Verwendung bestimmt:
- Diese Konstruktion gestattet die Spezifikation der niedrigen 16 Bits einer wahrscheinlichen Langwort-Zieladresse (genug Bits zum frühen Starten eines Zugriffs auf einen Cache nützlicher Befehle 21) und gestattet außerdem, einen Sprung von einer Rückkehr (und von den anderen weniger häufigen Operationen) zu unterscheiden. Es wird angemerkt, daß die Irrformationen gemäß dieser Tabelle nur als ein Hinweis verwendet werden können; ein richtiges Setzen dieser Bits kann die Leistung verbessern, ist für einen richtigen Betrieb aber nicht erforderlich.
- Um zu ermöglichen, daß die CPU eine hohe Leistung erreicht, werden daher explizite Hinweise auf der Grundlage eines Verzweigungsvorhersagemodells wie folgt bereitgestellt:
- (1) Für viele Implementierungen berechneter Verzweigungen (JSR, RET, JMP) ergibt sich ein wesentlicher Leistungsgewinn beim Bilden einer guten Vermutung der erwarteten Adresse des Zielbefehlscaches 21 vor dem Zugriff auf das Register Rb.
- (2) Die CPU kann so konstruiert werden, daß der erste (oder einzige) Befehlscache 21 klein, nicht größer als eine Seite (8-64 KB) ist.
- (3) Ein richtige Vorhersage der Unterroutinen-Rückkehrvorgänge ist wichtig für eine gute Leistung, so daß die CPU optional einen kleinen Stapel vorhergesagter Adressen des Unterroutinenrückkehr-Befehlscaches 21 enthalten kann.
- Zu diesem Zweck erzeugt die CPU 10 drei Arten von Verzweigungsvorhersage-Hinweisen: wahrscheinliche Zieladresse, Rückkehradressen-Stapelaktion und genommene bedingte Verzweigung.
- Für berechnete Verzweigungen (JSR/RET/JMP) werden zur Spezifizierung der niedrigen 16 Bits der wahrscheinlichsten Zieladresse ansonsten nicht genutzte Verschiebungsbits verwendet. Die auf den PC bezogene Berechnung unter Verwendung dieser Bits kann genau die in bedingten Verzweigungen verwendete auf den PC bezogene Berechnung sein. Die niedrigen 16 Bits sind ausreichend zur Spezifi zierung eines Blocks des Befehlscaches 21 in der größten möglichen Seite, und es wird daher angenommen, daß sie ausreichend für die Verzweigungsvorhersagelogik zum Starten eines Zugriffs auf den Frühbefehlscache 21 wegen des wahrscheinlichsten Ziels sind.
- Für alle Verzweigungen werden Hinweis- oder Operationscodebits verwendet, um einfache Verzweigungen, Unterroutinenabrufe, Unterroutinen-Rückkehrvorgänge und Dienstprogrammverbindungen zu unterscheiden. Diese Unterscheidungen ermöglichen, daß die Verzweigungsvorhersagelogik einen genauen Stapel vorhergesagter Rückkehradressen unterhält.
- Für bedingte Verzweigungen wird durch die Verzweigungsvorhersagelogik das Vorzeichen der Zielverschiebung als ein Genommen/Mißlungen-Hinweis verwendet. Es wird vorhergesagt, daß bedingte Vorwärtsverzweigungen (positive Verschiebung) mißlingen. Es wird vorhergesagt, daß bedingte Rückwärtsverzweigungen (negative Verschiebung) genommen werden. Bedingte Verzweigungen beeinflussen nicht den vorhergesagten Rückkehradressenstapel.
- Die Ganzzahl-Arithmetikbefehle führen Additions-, Subtraktions-, Multiplikations- und vorzeichenbehaftete und vorzeichenlose Vergleichsoperationen auf ganzen Zahlen der Register 43 aus, wobei sie das Ergebnis in einem Ganzzahlregister 43 zurückgeben. Diese Befehle nutzen irgendein (Dreiregister- oder Zweiregister- und Literalkonstanten-) Ganzzahl-Operationsformat aus Fig. 8 und umfassen die folgenden:
- ADDL - Addiere Langwort
- ADDQ - Addiere Quadwort
- CMPEQ - Vergleiche vorzeichenbehaftetes Quadwort gleich
- CMPLT - Vergleiche vorzeichenbehaftetes Quadwort kleiner als
- CMPLE - Vergleiche vorzeichenbehaftetes Quadwort kleiner als oder gleich
- CMPULT - Vergleiche vorzeichenloses Quadwort kleiner als
- CMPULE - Vergleiche vorzeichenloses Quadwort kleiner als oder gleich
- MULL - Multipliziere Langwort
- MULQ - Multipliziere Quadwort
- UMULH - Multipliziere vorzeichenloses Quadwort hoch
- SUBL - Subtrahiere Langwort
- SUBL - Subtrahiere Quadwort
- Für die ADDL-Befehle wird das Register Ra zum Register Rb oder zu einer Literalkonstanten addiert, wobei die vorzeichenerweiterte 32 Bit-Summe in das Register Rc geschrieben wird; die 32 Bits hoher Ordnung von Ra und Rb werden ignoriert. Für ADDQ-Befehle wird das Register Ra zum Register Rb oder zu einer Literalkonstanten addiert, wobei die 64 Bit-Summe in Rc geschrieben wird. Die vorzeichenlosen Vergleichsbefehle können zum Testen auf einen Übertrag verwendet werden; falls die vorzeichenlose Summe kleiner als einer der Eingaben ist, lag nach dem Addieren zweier Werte unter Verwendung von ADD ein Übertrag aus dem höchstwertigen Bit vor.
- Für die Vergleichsbefehle wird das Register Ra mit dem Register Rb oder mit einer Literalkonstanten verglichen, und falls die spezifizierte Beziehung wahr ist, wird in das Register Rc der Wert eins geschrieben; andernfalls wird in das Register Rc null geschrieben.
- Die Multiplikationsbefehle bewirken, daß das Register Ra mit dem Inhalt des Registers Rb oder mit einer Literalkonstante multipliziert und das Produkt in das Register Rc geschrieben wird. Für MULL ist das Produkt ein vorzeichenerweiterter 32 Bit-Wert, während MULQ zu einem 64 Bit-Produkt führt. Für den Befehl UMULH, multipliziere vorzeichenloses Quadwort hoch, werden das Register Ra und Rb oder eine Literalkonstante als vorzeichenlose Zahlen multipliziert, um ein 128 Bit-Ergebnis zu erzeugen; die 64 Bits hoher Ordnung werden in das Register Rc geschrieben.
- Für die Subtraktionsbefehle wird von dem Register Ra das Register Rb oder eine Literalkonstante subtrahiert und die Differenz in das Zielregister Rc geschrieben. Für SUBL ist die Differenz ein vorzeichenerweiterter 32 Bit- Wert oder für SUBQ ein 64 Bit-Wert. Die vorzeichenlosen Vergleichsbefehle können zum Testen auf ein Borgen verwendet werden; falls der vorzeichenlose Minuend (Ra) kleiner als der vorzeichenlose Subtrahend (Rb) ist, liegt ein Borgen vor.
- Die Logikbefehle haben das Operationsformat und führen Boolesche Quadwort-Operationen aus. Diese Befehle sind wie folgt:
- AND - Logisches Produkt
- BIS - Logische Summe
- XOR - Logische Differenz
- BIC - Logisches Produkt mit Komplement
- ORNOT - Logische Summe mit Komplement
- EQV - Logische Äquivalenz
- Diese Befehle führen zwischen dem Register Ra und dem Register Rb oder einer Literalkonstante die bezeichnete Boolesche Funktion aus und schreiben das Ergebnis in das Zielregister Rc. Die "NOT"-Funktion kann durch Ausführen eines ORNOT mit null (Ra = R31) ausgeführt werden.
- Die Schiebebefehle besitzen das Operationsformat und führen in der Schiebe-Einrichtung 41 logische Links- und Rechtsverschiebungen und arithmetische Rechtsverschiebungen wie folgt aus:
- SLL - Logische Linksverschiebung
- SRL - Logische Rechtsverschiebung
- SRA - Arithmetische Rechtsverschiebung
- Es gibt keinen arithmetischen Linksverschiebungsbefehl, da typischerweise dort, wo eine arithmetische Linksverschiebung verwendet würde, eine logische Verschiebung ausreicht. Zum Multiplizieren einer kleinen Zweierpotenz in Adressenberechnungen ist eine logische Linksverschiebung akzeptabel. Da die arithmetische Linksverschiebung eine Überlauf-Erfassung erfordert, ist sie komplizierter. Zum Ausführen einer arithmetischen Linksverschiebung mit Überlaufprüfung sollte eine Ganzzahlmultiplikation verwendet werden. Bitfeld-Extraktionen können mit zwei logischen Verschiebungen vorgenommen werden; eine Vorzeichenerweiterung kann mit einer logischen Linksverschiebung und einer arithmetischen Rechtsverschiebung vorgenommen werden. Für die logischen Verschiebungen wird das Register 0 bis 63 Bits um die Zahl im Register Rb oder um eine Literalkonstante Ra logisch nach links oder rechts verschoben, wobei das Ergebnis in das Register Rc geschrieben wird, wobei in die freiwerdenden Bitstellen Nullbits fortgepflanzt werden. In ähnlicher Weise wird das Register Rb für den arithmetischen Rechtsverschiebungsbefehl arithmetisch 0 bis 63 um die Zahl in dem Register Ra oder um eine Literalkonstante Ra Bits logisch nach rechts verschoben, wobei das Ergebnis in das Register Rc geschrieben wird, wobei das Vorzeichenbit (Rbv< 63> ) in die freiwerdenden Bitstellen fortgepflanzt wird.
- Ein wichtiges Merkmal, das eine verbesserte Leistung ermöglicht, ist der bedingte Ganzzahl-Schiebebefehl CMOV. Diese Befehle führen bedingte Operationen ohne eine Verzweigung aus und erhalten auf diese Weise die Be fehlsstromfolge. Diese Befehle haben das Operationsformat und umfassen
- CMOVEQ - Bedingte Verschiebung, falls das Register gleich null ist
- CMOVNE - Bedingte Verschiebung, falls das Register ungleich null ist
- CMOVLT - Bedingte Verschiebung, falls das Register kleiner als null ist
- CMOVLE - Bedingte Verschiebung, falls das Register kleiner als oder gleich null ist
- CMOVGT - Bedingte Verschiebung, falls das Register größer als null ist
- CMOVGE - Bedingte Verschiebung, falls das Register größer als oder gleich null ist
- CMOVLBC - Bedingte Verschiebung, falls das niedrige Registerbit gelöscht ist
- CMOVLBS - Bedingte Verschiebung, falls das niedrige Registerbit gesetzt ist
- Beim Ausführen dieser bedingten Schiebebefehle wird das Register Ra geprüft, und falls die spezifizierte Beziehung wahr ist, wird der Wert im Register Rb in das Register Rc geschrieben. Der Vorteil des Vorhandenseins dieser Alternative liegt in der Ausführungsgeschwindigkeit. Zum Beispiel ist ein Befehl CMOVEQ Ra, Rb, Rc genau äquivalent zu
- BNE Ra, label
- OR R31, Rb, Rc
- label...
- mit der Ausnahme, daß die CMOV-Art in vielen Implementierungen wahrscheinlich wesentlich schneller ist. Eine verzweigungslose Folge zum Finden des größeren Inhalts zweier Register, R1 - MAX(R1, R2), ist:
- CMPLT R1, R2, R3 ! R3 = 1, falls R1 < R2
- CMOVNE R3, R2, R ! Nichts tun für NOT(R1 < R2)
- ! Verschiebe R2 in R1, falls
- ! R1 < R2
- Natürlich besteht der Vorteil der Nichtverwendung von Verzweigungen darin, daß der Befehlsstrom aufeinanderfolgend geholt wird, wobei es keine Notwendigkeit zum Löschen des Befehlscaches oder der Vorab-Ruf-Schlange gibt. Eine bedingte Verschiebung ist auch schneller als ein Verzweigung, wenn die Verzweigung richtig vorhergesagt wird. Wenn die Verzweigung nicht richtig vorhergesagt wird, ist die bedingte Verschiebung viel schneller, da sie eine Verzweigungsoperation wegläßt.
- Ein anderes wichtiges Merkmal ist die Bereitstellung von Befehlen für Operationen an Byteoperanden in Registern. Diese erlauben in den Lade- und Speicherbefehlen Speicherzugriffe in voller 64 Bit-Breite, wobei aber in Kombination mit mehreren Bytemanipulationen in Registern eine breite Vielfalt: von Byteoperationen möglich sind. Der Vorteil besteht darin, daß dies die Verwendung von Code ermöglicht, der für Architekturen geschrieben ist, die Byteoperationen im Speicher zulassen, die Speicherzugriffe aber dennoch in Voll-Quadwort-ausgerichtete Grenzen zwingen. Die Bytemanipulationsbefehle haben das Operationsformat 72 oder 73 aus Fig. 8 und umfassen Bytevergleichs-, Byteextraktions-, Byteabdeck- und Byte- Nullsetz-Befehle wie folgt:
- CMPBGE - Vergleiche Byte
- EXTBL - Extrahiere Byte niedrig
- EXTWL - Extrahiere Wort niedrig
- EXTLL - Extrahiere Langwort niedrig
- EXTQL - Extrahiere Quadwort niedrig
- EXTWH - Extrahiere Wort hoch
- EXTLH - Extrahiere Langwort hoch
- EXTQH - Extrahiere Quadwort hoch
- INSBL - Setze Byte niedrig ein
- INSWL - Setze Wort niedrig ein
- INSLL - Setze Langwort niedrig ein
- INSQL - Setze Quadwort niedrig ein
- INSWH - Setze Wort hoch ein
- INSLH - Setze Langwort hoch ein
- INSQH - Setze Quadwort hoch ein
- MSKBL - Decke Byte niedrig ab
- MSKWL - Decke Wort niedrig ab
- MSKLL - Decke Langwort niedrig ab
- MSKQL - Decke Quadwort niedrig ab
- MSKWH - Decke Wort hoch ab
- MSKLH - Decke Langwort hoch ab
- MSKQH - Decke Quadwort hoch ab
- ZAP - Setze. Bytes null
- ZAPNOT - Setze Bytes nicht-null
- Der Bytevergleichsbefehl nimmt acht parallele vorzeichenlose Bytevergleiche zwischen einander entsprechenden Bytes der Register Ra und Rb (oder zwischen Ra und einer Literalkonstante) vor, speichert die acht Ergebnisse in den acht niedrigen Bits des Registers Rc; die hohen 56 Bits des Registers Rc werden null gesetzt. Bit 0 von Rc entspricht Byte 0, Bit 1 von Rc entspricht Byte 1 usw. Falls das entsprechende Byte von Ra (vorzeichenlos) größer als oder gleich Rb ist, wird in Rc ein Ergebnisbit gesetzt.
- Die Byteextraktionsbefehle verschieben das Register Ra um 0-7 Bytes (für niedrig Rechtsverschiebung, für hoch Linksverschiebung), wobei sie dann ein, zwei, vier oder acht Bytes in das Register Rc extrahieren, wobei die Anzahl der zu verschiebenden Bytes durch die Bits < 2 : 0> des Registers Rb und durch die Anzahl der zu extrahierenden Bytes in dem Funktionscode spezifiziert ist; die restlichen Bytes werden mit Nullen gefüllt. Die Byte- Hoch-Extraktionsbefehle verschieben um eine Anzahl Bytes, die acht minus des durch die Bits < 2 : 0> des Registers Rb spezifizierten Betrags ist, nach links. Wie in den Beispielen für Byteextraktionsvorgänge in dem Anhang dargestellt wird, sind diese Byteextraktionsbefehle besonders in Bytemanipulationen nützlich, wo eine Operation an einem nicht ausgerichteten Mehrbyte-Datum im Speicher vorzunehmen ist.
- Die Byteeinsetzbefehle verschieben Bytes aus dem Register Ra und setzen sie in ein Feld von Nullen ein, speichern das Ergebnis in dem Register Rc; das Register Rb, Bits < 2 : 0> , wählt den Verschiebungsbetrag von 0-7 Bytes, während der Funktionscode die Feldbreite von eins, zwei, vier oder acht Bytes wählt. Diese Byteeinsetzbefehle können ein Byte-, Wort-, Langwort- oder Quadwort-Datum erzeugen, das in dem Register oder in den Registern bei einer beliebigen Byteausrichtung angeordnet wird.
- Die Bytemaskenbefehle MSKxL und MSKxH setzen ausgewählte Bytes des Registers Ra null, speichern das Ergebnis im Register Rc; das Register Rb< 2 : 0> wählt die Anfangsstelle des Felds von null Bytes, während der Funktionscode die Maximalbreite, eines, zwei, vier oder acht Byte wählt. Die Abdeckbefehle erzeugen ein Byte-, Wort-, Langwort- oder Quadwortfeld von Nullen, das sich bei einer beliebigen Byteausrichtung über die Register erstrecken kann. Die Byte-Nullsetz-Befehle ZAP und ZAPNOT setzen ausgewählte Bytes des Registers Ra null, wobei sie das Ergebnis im Register Rc speichern; das Register Rb< 7 : 0> wählt die null zu setzenden Bytes, wobei Bit 0 von Rb Byte 0 entspricht, Bit 1 von Rb Byte 1 entspricht usw. Ein Ergebnisbyte wird auf null gesetzt, wenn das entsprechende Bit von Rb für ZAP eine Eins und für ZAPNOT eine Null ist.
- Im Anhang A sind Befehlsfolgen gegeben, um zu zeigen, wie unter Verwendung der oben dargestellten Bytebefehle Byteoperationen erreicht werden können.
- Die Gleitkommabefehle wirken auf Gleitkommaoperanden in jedem von fünf Datenformaten: (1) F_floating, was eine VAX-Operation mit einfacher Genauigkeit ist; (2) D_floating, was eine VAX-Operation mit doppelter Genauigkeit mit einem 8 Bit-Exponenten ist; (3) G_floating, was eine VAX-Operation mit doppelter Genauigkeit mit einem 11 Bit-Exponenten ist; (4) S_floating, was eine IEEE- Operation mit einfacher Genauigkeit ist; und T_floating, was eine IEEE-Operation mit doppelter Genauigkeit mit einem 11 Bit-Exponenten ist. Die einfach genauen Werte werden in die oberen 32 Bits der 64 Bit-Register 61 geladen, wobei die niedrigeren 32 Bits Nullen sind. Außerdem werden Datenwandlungsbefehle zum Wandeln von Operanden zwischen dem Gleitkomma- und dem Quadwort- Ganzzahlformat, zwischen einfach genauem und doppelt genauem Gleitkommaformat und zwischen Quadwort und Langwort-Ganzzahlen bereitgestellt. Die CPU 10 hat keinen globalen Gleitkomma-Prozessorzustand; d. h., der Maschinenzustand wird nicht zwischen Datenformaten umgeschaltet, wobei die Wahl von Datenformaten statt dessen in jedem Befehl codiert ist.
- Gleitkommazahlen werden mit drei Feldern dargestellt: Vorzeichen, Exponent und Bruch. Das Vorzeichenfeld ist ein Bit, das Exponentenfeld ist acht oder elf Bits und der Bruch ist 23, 52 oder 55 Bits. Es werden mehrere verschiedene Rundungsmodi bereitgestellt; für die VAX- Formate ist die Rundung normal (prozentual) oder gespalten, während es bei den IEEE-Formaten vier Rundungstypen, normal (prozentuales Runden auf die nächste), runden auf plus unendlich, runden auf minus unendlich und runden auf null, gibt. Es gibt sechs Ausnahmen, die durch Gleit kommabefehle erzeugt werden können, die alle durch einen arithmetischen nichtprogrammierten Ausnahme-Programmsprung signalisiert werden; diese Ausnahmen sind ungültiger Befehl, Division durch null, Überlauf, Unterlauf, ungenaues Ergebnis und Ganzzahl-Überlauf.
- Die Speicherformat-Gleitkommabefehle umfassen die folgenden:
- LDF - Lade F_floating
- LDD - Lade D_floating (Lade G_floating)
- LDS - Lade S_floating (Lade Ganzzahl-Langwort)
- LDT - Lade T_floating (Lade Ganzzahl-Quadwort)
- STF - Speichere F_floating
- STD - Speichere D_floating (Speichere G_floating)
- STS - Speichere S_floating (Speichere Ganzzahl- Langwort)
- STT - Speichere T_floating (Speichere Ganzzahl- Quadwort)
- Jeder Ladebefehl holt ein Gleitkomma-Datum des spezifizierten Typs vom Speicher, ordnet die Bytes um, so daß sie an das Gleitkomma-Registerformat für diesen Typ angepaßt sind und schreibt es in das Register Fa im Registersatz 61, wobei die virtuelle Adresse durch Addieren des Registers Fb zu der vorzeichenerweiterten 16 Bit- Verschiebung berechnet wird. Die Speicherbefehle bewirken, daß der Inhalt des Registers Fa in dem Speicherbereich bei einer durch Addieren des Registers Rb zu der vorzeichenerweiterten 16 Bit-Verschiebung berechneten virtuellen Adresse gespeichert wird, wobei die Bytes auf dem Weg hinaus umgeordnet werden, so daß sie an das Speicherformat für diesen Gleitkomma-Datentyp angepaßt sind.
- Die Gleitkomma-Verzweigungsbefehle arbeiten in der gleichen Weise wie die oben diskutierten Ganzzahl-Verzwei gungsbefehle, d. h., daß der Wert in einem Gleitkomma- Register Fa geprüft und der PC bedingt geändert wird. Diese Gleitkomma-Verzweigungsbefehle umfassen die folgenden:
- FBEQ - Gleitkommaverzweigung gleich
- FBNE - Gleitkommaverzweigung ungleich
- FBLT - Gleitkommaverzweigung kleiner als
- FBLE - Gleitkommaverzweigung kleiner als oder gleich
- FBGT - Gleitkommaverzweigung größer als
- FBGE - Gleitkommaverzweigung größer als oder gleich
- Es wird das Register Fa geprüft, wobei der PC mit der virtuellen Zieladresse geladen wird, falls die spezifizierte Beziehung wahr ist; andernfalls wird die Ausführung mit dem nächsten darauffolgenden Befehl fortgesetzt. Die Verschiebung wird als ein vorzeichenbehafteter Langwort-Offset behandelt, was bedeutet, daß sie, um die virtuelle Zieladresse zu bilden, zum Adressieren einer Langwortgrenze zwei Bits nach links verschoben, auf 64 Bits vorzeichenerweitert und zu dem aktualisierten PC addiert wird.
- Die Operationsformatbefehle für die Gleitkomma-Arithmetik umfassen Additions-, Subtraktions-, Multiplikations-, Divisions-, Vergleichs-, Absolutwert-, Kopier- und Wandlungsbefehle auf 64 Bit-Registerwerten in dem Register 61. Jeder Befehl spezifiziert die Quell- und Zielformate der Werte sowie den zu verwendenden Rundungsmodus und die zu verwendenden Nichtprogrammierten-Programmsprung-Modi. Diese Gleitkomma-Operationsbefehle sind in Tabelle B aufgelistet.
- Die bedingten Gleitkomma-Schiebebefehle entsprechen den bedingten Ganzzahl-Schiebebefehlen mit der Ausnahme, daß anstelle der Ganzzahlregister 43 die Gleitkomma-Register 61 verwendet werden. Wie bei den bedingten Ganzzahl- Sprüngen können diese Befehle zum Vermeiden von Verzweigungsbefehlen verwendet werden.
- Die CPU 10 besitzt in ihrem Befehlssatz mehrere "verschiedene" Befehle, die alle die obigen Befehlsformate nutzen, aber nicht in die bisher diskutierten Kategorien passen. Die folgenden sind die verschiedenen Befehle:
- CALL_PAL - Rufe Unterroutine der Bibliothek der privilegierten Architektur auf
- FETCH - Rufe Datenblock vorab
- FETCH_M - Rufe Datenblock vorab, Modifizieren beabsichtigt
- DRAINT - Leere Befehls-Pipeline
- MB - Speicherbarriere
- RCC - Lese Zykluszähler
- Der CALL_ PAL-Befehl unter Verwendung des Formats 75 aus Fig. 8 bewirkt einen nichtprogrammierten Programmsprung zu dem PAL-Code (Bits < 25 : 0> des Befehls). Dieser Befehl wird nicht ausgegeben, bis sichergestellt ist, daß alle früheren Befehle ausnahmslos abgeschlossen werden; falls für einen dieser früheren Befehle eine Ausnahme eintritt, zeigt der Fortsetzungs-PC in dem Ausnahme-Stapel-Rahmen auf den CALL Pal-Befehl.
- Der FETCH-Befehl ruft einen ausgerichteten 512 Byte- Block, der die durch den Inhalt von Rb gegebene virtuelle Adresse umgibt, vorab. Diese Adresse in Rb wird verwendet, um einen ausgerichteten 512 Byte-Datenblock zu bezeichnen. Die Operation besteht in dem Versuch, den gesamten 512 Byte-Datenblock oder einen Teil davon (oder einen größeren Umgebungsblock) in Vorwegnahme nachfolgender Lade- oder Speicherbefehle, die auf die Daten zugreifen, in einen Teil der Speicherhierarchie mit schnellerem Zugriff zu verschieben. Der FETCH-Befehl ist daher ein Hinweis für die CPU 10, die eine schnellere Ausführung zulassen kann. Falls die Konstruktion der besonderen CPU dieses Verfahren nicht verwirklicht, kann der Hinweis ignoriert werden. Der FETCH_M-Befehl gibt einen zusätzlichen Hinweis, daß Modifikationen (Speicherungen) einiger oder aller Daten vorweggenommen werden; in einigen Rückschreibcache-Konstruktionen gibt dies einen schnelleren Betrieb, da der Datenblock in den Cache als "im Besitz" gelesen wird, so daß dann, wenn ein Schreibvorgang in die Daten des Blocks in dem Cache ausgeführt wird, dieser keinen Fehler erzeugt, um sich bemerkbar zu machen und den Besitz zu fordern. FETCH erzeugt keine Ausnahmen; falls ein Ladevorgang (oder, im Fall von FETCH_M ein Speichervorgang) unter Verwendung der gleichen Adresse einen Fehler erzeugen würde, wird die Anforderung zum vorab Rufen ignoriert. Der FETCH-Befehl soll der Software helfen, Speicherlatenzzeiten in der Größenordnung von 100 Zyklen zu verbergen; für Speicherlatenzzeiten in der Größenordnung von 10 Zyklen spielt er wahrscheinlich keine Rolle (oder wird wahrscheinlich nicht verwirklicht), da zum Verbergen solcher kurzen Latenzzeiten eine Codeplanung verwendet werden sollte.
- Der DRAINT-Befehl blockiert die Befehlsausgabe, bis sichergestellt ist, daß alle früheren Befehle abgeschlossen sind, ohne nichtprogrammierte Programmsprünge zu erleiden. Dies ermöglicht der Software in einer Pipeline- Implementierung sicherzustellen, daß alle früheren Arithmetikbefehle vor der Ausgabe irgendeines Befehls nach dem DRAINT abgeschlossen werden, ohne irgendwelche arithmetischen nichtprogrammierten Programmsprünge zu erleiden. Zum Beispiel sollte er vor dem Ändern eines Ausnahmetreibers verwendet werden, um sicherzustellen, daß in der momentanen Ausnahmebehandlungsumgebung alle Ausnahmen an früheren Befehlen verarbeitet sind.
- Der Speicherbarrierenbefehl MB stellt sicher, daß alle zukünftigen Lade- oder Speichervorgänge nicht abgeschlossen werden, bevor alle früheren Lade- und Speichervorgänge abgeschlossen sind. In Abwesenheit eines MB-Befehls dürfen Lade- und Speicheroperationen in verschiedenen physikalischen Plätzen außer der Reihe abgeschlossen werden. Der MB-Befehl erlaubt, daß Speicherzugriffe serialisiert werden.
- Der Zykluszähler-Lesebefehl RCC bewirkt, daß das Register Ra mit dem Inhalt des CPU-Zykluszählers beschrieben wird. Die 32 Bits niedriger Ordnung des Zykluszählers sind eine vorzeichenlose ganze Zahl, die einmal pro N CPU-Zyklen inkrementiert wird, wobei N eine implementierungsspezifische ganze Zahl in dem Bereich von 1 bis 16 ist. Bei einem implementierungsspezifischen Wert wird der Zähler auf null zurückgesetzt.
- Die Felder in dem Bei.tentabelleneintrag werden wie folgt interpretiert:
- Bits Beschreibung
- < 0> Gültig (V) - Bezeichnet die Gültigkeit des PFN- Felds.
- < 1> Fehler beim Lesen (FOR) - Wenn es gesetzt ist, tritt bei einem Versuch, irgendeinen Bereich in der Seite zu lesen, ein Lese-Ausnahmefehler auf.
- < 2> Fehler beim Schreiben (FOW) - Wenn es gesetzt ist, tritt bei einem Versuch, irgendeinen Bereich in der Seite zu beschreiben, ein Schreib- Ausnahmefehler auf.
- < 3> Fehler beim Ausführen (FOE) - Wenn es gesetzt ist, tritt bei einem Versuch, einen Befehl in der Seite auszuführen, ein Ausführungs-Ausnahmefehler auf.
- < 4> Adressenraumanpassung (ASM) - Wenn es gesetzt ist, paßt dieser PTE alle Adressenraumnummern an. Für eine: gegebene VA muß ASM in allen Prozessen konsistent gesetzt sein.
- < 6 : 5> Granularitätshinweis (GH).
- < 7> Zur zukünftigen Verwendung reserviert.
- < 8> Kernlesefreigabe (KRE) - Dieses Bit gibt das Lesen vom Kernmodus frei. Wenn dieses Bit eine 0 ist und wenn während des Kernmodus ein LOAD oder ein Befehlsholvorgang versucht wird, tritt eine Zugriffsverletzung auf. Dieses Bit ist selbst dann gültig, wenn V = 0 ist.
- < 9> Ausführungslesefreigabe (ERE) - Dieses Bit gibt das Lesen vom Ausführungsmodus frei. Wenn dieses Bit eine 0 ist und wenn während des Ausführungsmodus ein LOAD oder ein Befehlsholvorgang ver sucht wird, tritt eine Zugriffsverletzung auf. Dieses Bit ist selbst dann gültig, wenn V = 0 ist.
- < 10> Organisationsiesefreigabe (SRE) - Dieses Bit gibt das Lesen vom Organisationsmodus frei. Wenn dieses Bit eine 0 ist und wenn während des Organisationsmodus ein LOAD oder ein Befehlsholvorgang versucht wird, tritt eine Zugriffsverletzung auf. Dieses Bit ist selbst dann gültig, wenn V = 0 ist.
- < 11> Anwenderlesefreigabe (URE) - Dieses Bit gibt das Lesen vom Anwendermodus frei. Wenn dieses Bit eine 0 ist und wenn während des Anwendermodus ein LOAD oder ein Befehlsholvorgang versucht wird, tritt eine Zugriffsverletzung auf. Dieses Bit ist selbst dann gültig, wenn V = 0 ist.
- < 12> Kernschreibfreigabe (KWE) - Dieses Bit gibt das Schreiben vom Kernmodus frei. Wenn dieses Bit eine 0 ist und wenn während des Kernmodus ein STORE versucht wird, tritt eine Zugriffsverletzung auf. Dieses Bit ist selbst dann gültig, wenn V = 0 ist.
- < 13> Ausführungsschreibfreigabe (EWE) - Dieses Bit gibt das Schreiben vom Ausführungsmodus frei.
- Wenn dieses Bit eine 0 ist und wenn während des Ausführungsmodus ein STORE versucht wird, tritt eine Zugriffsverletzung auf.
- < 14> Organisationsschreibfreigabe (SWE) - Dieses Bit gibt das Schreiben vom Organisationsmodus frei.
- Wenn dieses Bit eine 0 ist und wenn während des Organisationsmodus ein STORE versucht wird, tritt eine Zugriffsverletzung auf.
- < 15> Anwenderschreibfreigabe (UWE) - Dieses Bit gibt das Schreiben vom Anwendermodus frei. Wenn dieses Bit eine 0 ist und wenn während des Anwendermodus ein STORE versucht wird, tritt eine Zugriffsverletzung auf.
- < 31:16> Für Software reserviert.
- < 63:32> Seitenrahmennummer (PFN) - Das PFN-Feld zeigt immer auf eine Seitengrenze. Wenn V gesetzt ist, wird PFN zum Erhalten der physikalischen Adresse mit dem Byte in den Seitenbits der virtuellen Adresse verkettet. Wenn V gelöscht ist, kann dieses Feld durch Software verwendet werden.
- Mnemonik Bitoperation
- CPYS Kopiere Vorzeichen
- CPYSN Kopiere negiertes Vorzeichen
- CPYSE Kopiere Vorzeichen und Exponent
- CPYSEE Kopiere Vorzeichen und erweiterten Exponent
- CVTQL Wandle Quadwort in Langwort
- CVTLQ Wandle Langwort in Quadwort
- FCMOV Bedingte Gleitkommaverschiebung
- Mnemonik Arithmetikoperation
- ADDF Addiere F_floating
- ADDD Addiere D_floating
- ADDG Addiere G_floating
- ADDS Addiere S_floating
- ADDT Addiere T_floating
- CMPD Vergleiche D_floating
- CMPG Vergleiche G_floating
- CMPS Vergleiche S_floating
- CMPT Vergleiche T_floating
- CVTDQ Wandle D_floating in Quadwort
- CVTGQ Wandle G_floating in Quadwort
- CVTSQ Wandle S_floating in Quadwort
- CVTTQ Wandle T_floating in Quadwort
- CVTQD Wandle Quadwort in D_floating
- CVTQF Wandle Quadwort in F_floating
- CVTQG Wandle Quadwort in G_floating
- CVTQS Wandle Quadwort in S_floating
- CVTQT Wandle Quadwort in T_floating
- CVTFG Wandle F_floating in G_floating
- CVTDF Wandle D_floating in F_floating
- CVTGF Wandle G_floating in F_floating
- CVTST Wandle S_floating in T_floating
- CVTTS Wandle T_floating in S_floating
- DIVF Dividiere F_floating
- DIVD Dividiere D_floating
- DIVG Dividiere G_floating
- DIVS Dividiere S_floating
- DIVT Dividiere T_floating
- MULF Multipliziere F_floating
- MULD Multipliziere D_floating
- MULG Multipliz:Lere G_floating
- MULS Multipliziere S_floating
- MULT Multipliziere T_floating
- SUBF Subtrahiere F_floating
- SUBD Subtrahiere D_floating
- SUBG Subtrahiere G_floating
- SUBS Subtrahiere S_floating
- SUBT Subtrahiere T_floating
- Das Ergebnis von CMPBGE kann als eine Eingabe für ZAP und für ZAPNOT verwendet werden.
- Um einen Zeichenstring nach einem Byte von Nullen abzutasten, ist folgendes auszuführen:
- < Initialisiere R1 auf ausgerichtete QW-Adresse des Strings>
- Um zwei Zeichen auf größer/kleiner zu vergleichen, ist folgendes auszuführen:
- Zur Bereichsprüfung eines Zeichenstrings in R1 ist für '0' .. '9' folgendes auszuführen:
- Die Kommentare in den untenstehenden Beispielen nehmen an, daß (X mod 8) = 5 ist, daß der Wert des ausgerichteten Quadworts, das X enthält, CBAxxxxx ist und daß der Wert des ausgerichteten Quadworts, das X + 7 enthält, yyyHGFED ist. Die untenstehenden Beispiele sind der allgemeinste Fall; falls über den Wert oder über die beabsichtigte Ausrichtung von X mehr Informationen bekannt sind, können kürzere Folgen verwendet werden.
- Die beabsichtigte Folge für das Laden eines Quadworts von der nicht ausgerichteten Adresse X ist:
- Die beabsichtigte Folge für das Laden und Null-Erweitern eines Worts von der nicht ausgerichteten Adresse X ist:
- Die beabsichtigte Folge für das Laden und Vorzeichen-Erweitern eines Langworts von der nicht ausgerichteten Adresse X ist:
- Die beabsichtigte Folge für das Laden und Null-Erweitern eines Worts von der nicht ausgerichteten Adresse X ist:
- Die beabsichtigte Folge für das Laden und Vorzeichen-Erweitern eines Langworts von der nicht ausgerichteten Adresse X ist:
- Die beabsichtigte Folge für das Laden und Null-Erweitern eines Bytes von der Adresse X ist:
- Die beabsichtigte Folge für das Laden und Vorzeichen-Erweitern eines Bytes von der Adresse X ist:
- Optimierte Beispiele:
- Es wird angenommen, daß das Holen eines Worts von 10(R3) erforderlich ist, wobei R3 eine ausgerichtete Langwortadresse enthalten soll. Die untenstehenden optimierten Folgen nutzen den bekannten konstanten Offset und die Langwort-Ausrichtung (ein einzelnes ausgerichtetes Langwort enthält daher das ganze Wort). Falls R3 keine ausgerichtete Langwortadresse enthält, erzeugt die Folge einen Datenausrichtungsfehler.
- Die beabsichtigte Folge für das Laden und für das Null-Erweitern eines ausgerichteten Worts von 10(R3) ist:
- Die beabsichtigte Folge für das Laden und für das Vorzeichen- Erweitern eines ausgerichteten Worts von 10(R3) ist:
- Die Kommentare in den untenstehenden Beispielen nehmen an, daß (X mod 8) - 5 ist, daß der Wert des ausgerichteten Quadworts, das X enthält, CBAxxxxx ist, daß der Wert des ausgerichteten Quadworts, das X + 7 enthält, yyyHGFED ist und daß der von R5 zu speichernde Wert hgfedcba ist. Die untenstehenden Beispiele sind der allgemeinste Fall; falls über den Wert oder über die beabsichtigte Ausrichtung von X mehr Informationen bekannt sind, können kürzere Folgen verwendet werden.
- Die beabsichtigte Folge für das Speichern eines nicht ausgerichteten Quadworts R5 bei der Adresse X ist:
- Die beabsichtigte Folge für das Speichern eines nicht ausgerichteten Langworts R5 bei X ist:
- Die beabsichtigte Folge für das Speichern eines nicht ausgerichteten Worts R5 bei X ist:
- Die beabsichtigte Folge für das Speichern eines Bytes R5 bei X ist:
- Die Byteeinsetzbefehle führen die folgende Operation aus:
- Die Byteextraktionsbefehle führen die folgende Operation aus:
- Eine Atombyte-Schreiboperation wird durch die folgende Befehlsfolge bewirkt:
Claims (10)
1. Verfahren zum Betreiben eines
Pipeline-Prozessors, mit den folgenden Schritten:
Holen von Befehlen aus aufeinanderfolgenden
Adressen im Speicher und Decodieren der Befehle vor der
Ausgabe der Befehle;
Detektieren der geholten Befehle und Feststellen,
ob der Operationscode gemeinsam mit einem Indikator in
jedem der Befehle die Befehle als Sprungbefehle (JMP-
Befehle) oder als Sprung-in-Unterroutine (JSR-Befehle)
bestimmt; und wenn ja,
Extrahieren einer Adresse eines Registers (Rb)
aus den Befehlen, welches die Adresse des Ziels der
Sprungbefehle oder der Sprung-in-Unterroutine-Befehle
enthält, ferner getrennt hiervon Extrahieren eines Teils
der Adresse eines vorhergesagten Ziels aus den Befehlen,
Erzeugen einer Adresse für das vorhergesagte Ziel der
Sprungbefehle oder der Sprung-in-Unterroutine-Befehle und
vorab Holen eines Befehls aus der Adresse des
vorhergesagten Ziels statt aus den aufeinanderfolgenden Adressen,
bevor die Sprungbefehle oder die Sprung-in-Unterroutine-
Befehle ausgeführt werden.
2. Verfahren nach Anspruch 1, bei dem die Befehle
eine feste Länge besitzen und enthalten: einen
Operationscode, eine Adresse eines ersten Registers (Ra) zum
Speichern eines Programmzählers, wenn die Sprungbefehle
oder die Sprung-in-Unterroutine-Befehle ausgeführt
werden, und eine Adresse eines zweiten Registers (Rb), in
dem die Adresse des Ziels zum Laden des Programmzählers,
wenn die Sprungbefehle oder die Sprung-in-Unterroutine-
Befehle ausgeführt werden, sowie ein Verschiebungsfeld,
das zur Spezifizierung eines Teils der Adresse für das
vorhergesagte Ziel verwendet wird, gespeichert sind.
3. Verfahren nach Anspruch 2, bei dem das
Verschiebungsfeld den Indikator enthält, der die Befehle als die
Sprungbefehle (JMP-Befehle), als die
Sprung-in-Unterroutine-Befehle (ISR-Befehle), als
Rückkehr-aus-Unterroutine-Befehle (RET-Befehle) oder als
Sprung-in-Unterroutinerückkehr-Befehle (JSR CO-Befehle) bestimmt.
4. Verfahren nach Anspruch 3, mit dem Schritt des
Schiebens des Programmzählers in den Vorhersagestapel,
wenn die Sprung-in-Unterroutine-Befehle ausgeführt
werden.
5. Verfahren nach Anspruch 4, mit dem Schritt des
vorausgehenden Holens eines Befehls aus dem
Vorhersagestapel als Antwort auf die Erzeugung der Adresse für das
vorhergesagte Ziel, bevor die Rückkehr-aus-Unterroutine-
Befehle ausgeführt werden.
6. Prozessor, mit:
einer Einrichtung zum Holen von Befehlen aus
aufeinanderfolgenden Adressen im Speicher und zum
Decodieren der Befehle, bevor die Befehle ausgeführt werden;
eine Einrichtung zum Detektieren der geholten
Befehle und zum Feststellen, ob der Operationscode
gemeinsam mit einem Indikator in jedem der Befehle die
Befehle als Sprungbefehle (JMP-Befehle) oder als Sprung-
in-Unterroutine-Befehle (JSR-Befehle) bestimmt;
eine Einrichtung zum Extrahieren einer Adresse
eines Registers (Rb) aus den Befehlen, das die Adresse
des Ziels der Sprungbefehle oder der
Sprung-in-Unterroutine enthält, und ferner getrennt hiervon zum
Extrahieren eines Teils der Adresse eines vorhergesagten
Ziels aus den Befehlen und zum Erzeugen einer Adresse für
ein vorhergesagtes Ziel der Sprungbefehle oder der
Sprung-in-Unterroutine-Befehle; und
eine Einrichtung zum vorausgehenden Holen eines
Befehls aus der Adresse für das vorhergesagte Ziel statt
aus den aufeinanderfolgenden Adressen, bevor die
Sprungbefehle oder die Sprung-in-Unterroutine-Befehle
ausgeführt werden.
7. Prozessor nach Anspruch 6, bei dem die Befehle
eine feste Länge besitzen und enthalten: einen
Operationscode, eine Adresse eines ersten Registers (Ra)
zum Speichern eines Programmzählers, wenn die
Sprungbefehle oder die Sprung-in-Unterroutine-Befehle ausgeführt
werden, sowie eine Adresse eines zweiten Registers (Rb),
in dem die Adresse des Ziels zum Laden des
Programmzählers, wenn die Sprungbefehle oder die
Sprung-in-Unterroutine-Befehle ausgeführt werden, und ein
Verschiebungsfeld, das zur Spezifizierung eines Teils der Adresse für
das vorhergesagte Ziel verwendet wird, gespeichert sind.
8. Prozessor nach Anspruch 7, bei dem das
Verschiebungsfeld den Indikator enthält, der die Befehle als die
Sprungbefehle (JMP-Befehle), als die
Sprung-in-Unterroutine-Befehle (JSR-Befehle), als
Rückkehr-aus-Unterroutine-Befehle (RET-Befehle) oder als
Sprung-in-Unterroutinerückkehr-Befehle (JSR CO-Befehle) bestimmt.
9. Prozessor nach Anspruch 8, mit einer Einrichtung
zum Schieben des Procrrammzählers in den Vorhersagestapel,
wenn die Sprung-in-Unterroutine-Befehle ausgeführt
werden.
10. Prozessor nach Anspruch 9, mit einer Einrichtung
zum vorausgehenden Holen eines Befehls als Antwort auf
die Erzeugung der Adresse für das vorhergesagte Ziel von
dem Vorhersagestapel, bevor die
Rückkehr-aus-Unterroutine-Befehle ausgeführt werden.
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US54762990A | 1990-06-29 | 1990-06-29 |
Publications (2)
Publication Number | Publication Date |
---|---|
DE69129881D1 DE69129881D1 (de) | 1998-09-03 |
DE69129881T2 true DE69129881T2 (de) | 1999-04-01 |
Family
ID=24185458
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE69129881T Expired - Lifetime DE69129881T2 (de) | 1990-06-29 | 1991-06-28 | Verzweigung in einem Pipeline-Prozessor |
Country Status (7)
Country | Link |
---|---|
US (1) | US6167509A (de) |
EP (1) | EP0463977B1 (de) |
JP (1) | JP2951064B2 (de) |
KR (1) | KR100190252B1 (de) |
CA (1) | CA2045791A1 (de) |
DE (1) | DE69129881T2 (de) |
TW (1) | TW198109B (de) |
Families Citing this family (35)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5732242A (en) * | 1995-03-24 | 1998-03-24 | Silicon Graphics, Inc. | Consistently specifying way destinations through prefetching hints |
US5951678A (en) * | 1997-07-25 | 1999-09-14 | Motorola, Inc. | Method and apparatus for controlling conditional branch execution in a data processor |
US6449713B1 (en) * | 1998-11-18 | 2002-09-10 | Compaq Information Technologies Group, L.P. | Implementation of a conditional move instruction in an out-of-order processor |
US6205544B1 (en) | 1998-12-21 | 2001-03-20 | Intel Corporation | Decomposition of instructions into branch and sequential code sections |
US6308322B1 (en) * | 1999-04-06 | 2001-10-23 | Hewlett-Packard Company | Method and apparatus for reduction of indirect branch instruction overhead through use of target address hints |
US6453389B1 (en) * | 1999-06-25 | 2002-09-17 | Hewlett-Packard Company | Optimizing computer performance by using data compression principles to minimize a loss function |
US6449706B1 (en) * | 1999-12-22 | 2002-09-10 | Intel Corporation | Method and apparatus for accessing unaligned data |
JP3940539B2 (ja) * | 2000-02-03 | 2007-07-04 | 株式会社日立製作所 | 半導体集積回路 |
US6782469B1 (en) | 2000-09-29 | 2004-08-24 | Intel Corporation | Runtime critical load/data ordering |
US6760816B1 (en) * | 2000-09-29 | 2004-07-06 | Intel Corporation | Critical loads guided data prefetching |
US6662273B1 (en) | 2000-09-29 | 2003-12-09 | Intel Corporation | Least critical used replacement with critical cache |
US6785687B2 (en) * | 2001-06-04 | 2004-08-31 | Hewlett-Packard Development Company, L.P. | System for and method of efficient, expandable storage and retrieval of small datasets |
US6907511B2 (en) * | 2001-06-11 | 2005-06-14 | Fujitsu Limited | Reducing transitions on address buses using instruction-set-aware system and method |
US7051168B2 (en) * | 2001-08-28 | 2006-05-23 | International Business Machines Corporation | Method and apparatus for aligning memory write data in a microprocessor |
US7203817B2 (en) | 2001-09-24 | 2007-04-10 | Broadcom Corporation | Power consumption reduction in a pipeline by stalling instruction issue on a load miss |
WO2003029961A1 (en) * | 2001-10-02 | 2003-04-10 | Koninklijke Philips Electronics N.V. | Speculative execution for java hardware accelerator |
US7013382B1 (en) * | 2001-11-02 | 2006-03-14 | Lsi Logic Corporation | Mechanism and method for reducing pipeline stalls between nested calls and digital signal processor incorporating the same |
US7075462B2 (en) * | 2002-08-07 | 2006-07-11 | Lsi Logic Corporation | Speeding up variable length code decoding on general purpose processors |
US7017031B2 (en) * | 2002-10-10 | 2006-03-21 | International Business Machines Corporation | Method, apparatus and system for managing released promotion bits |
US6925551B2 (en) * | 2002-10-10 | 2005-08-02 | International Business Machines Corporation | Method, apparatus and system for accessing a global promotion facility through execution of a branch-type instruction |
US7483167B2 (en) * | 2003-08-27 | 2009-01-27 | Marvell International Ltd. | Image forming apparatus for identifying undesirable toner placement |
US7697169B2 (en) * | 2004-10-29 | 2010-04-13 | Marvell International Technology Ltd. | Laser print apparatus with toner explosion compensation |
US7694286B2 (en) * | 2005-02-10 | 2010-04-06 | International Business Machines Corporation | Apparatus and method for detecting base-register usage conflicts in computer code |
JP2007041837A (ja) * | 2005-08-03 | 2007-02-15 | Nec Electronics Corp | 命令プリフェッチ装置及び命令プリフェッチ方法 |
US7243210B2 (en) * | 2005-05-31 | 2007-07-10 | Atmel Corporation | Extracted-index addressing of byte-addressable memories |
KR101369441B1 (ko) * | 2005-08-23 | 2014-03-04 | 어드밴스드 마이크로 디바이시즈, 인코포레이티드 | 컴퓨터 시스템 내부의 프로액티브 동기 방법 |
CN102077195A (zh) * | 2008-05-08 | 2011-05-25 | Mips技术公司 | 具有紧凑指令集架构的微处理器 |
US20100312991A1 (en) * | 2008-05-08 | 2010-12-09 | Mips Technologies, Inc. | Microprocessor with Compact Instruction Set Architecture |
US9158701B2 (en) | 2012-07-03 | 2015-10-13 | International Business Machines Corporation | Process-specific views of large frame pages with variable granularity |
US9405534B2 (en) | 2013-01-21 | 2016-08-02 | Tom Yap | Compound complex instruction set computer (CCISC) processor architecture |
US9110657B2 (en) | 2013-01-21 | 2015-08-18 | Tom Yap | Flowchart compiler for a compound complex instruction set computer (CCISC) processor architecture |
GB2519801A (en) | 2013-10-31 | 2015-05-06 | Ibm | Computing architecture and method for processing data |
US9772824B2 (en) * | 2015-03-25 | 2017-09-26 | International Business Machines Corporation | Program structure-based blocking |
US9934041B2 (en) | 2015-07-01 | 2018-04-03 | International Business Machines Corporation | Pattern based branch prediction |
CN114035850A (zh) * | 2021-12-08 | 2022-02-11 | 苏州睿芯集成电路科技有限公司 | 一种基于risc-v的用于直接跳转的预编码设计方法及系统 |
Family Cites Families (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4777587A (en) * | 1985-08-30 | 1988-10-11 | Advanced Micro Devices, Inc. | System for processing single-cycle branch instruction in a pipeline having relative, absolute, indirect and trap addresses |
US4991080A (en) * | 1986-03-13 | 1991-02-05 | International Business Machines Corporation | Pipeline processing apparatus for executing instructions in three streams, including branch stream pre-execution processor for pre-executing conditional branch instructions |
JPH081602B2 (ja) * | 1988-02-23 | 1996-01-10 | 三菱電機株式会社 | データ処理装置 |
US5228131A (en) * | 1988-02-24 | 1993-07-13 | Mitsubishi Denki Kabushiki Kaisha | Data processor with selectively enabled and disabled branch prediction operation |
US5193205A (en) * | 1988-03-01 | 1993-03-09 | Mitsubishi Denki Kabushiki Kaisha | Pipeline processor, with return address stack storing only pre-return processed address for judging validity and correction of unprocessed address |
JPH0769814B2 (ja) * | 1988-04-07 | 1995-07-31 | 三菱電機株式会社 | パイプライン処理機構を持つデータ処理装置 |
US5136696A (en) * | 1988-06-27 | 1992-08-04 | Prime Computer, Inc. | High-performance pipelined central processor for predicting the occurrence of executing single-cycle instructions and multicycle instructions |
JPH0259822A (ja) * | 1988-08-25 | 1990-02-28 | Mitsubishi Electric Corp | 命令先取り方式 |
US5131086A (en) * | 1988-08-25 | 1992-07-14 | Edgcore Technology, Inc. | Method and system for executing pipelined three operand construct |
US5050068A (en) * | 1988-10-03 | 1991-09-17 | Duke University | Method and apparatus for using extracted program flow information to prepare for execution multiple instruction streams |
US5142634A (en) * | 1989-02-03 | 1992-08-25 | Digital Equipment Corporation | Branch prediction |
US5113515A (en) * | 1989-02-03 | 1992-05-12 | Digital Equipment Corporation | Virtual instruction cache system using length responsive decoded instruction shifting and merging with prefetch buffer outputs to fill instruction buffer |
US5136697A (en) * | 1989-06-06 | 1992-08-04 | Advanced Micro Devices, Inc. | System for reducing delay for execution subsequent to correctly predicted branch instruction using fetch information stored with each block of instructions in cache |
US5163140A (en) * | 1990-02-26 | 1992-11-10 | Nexgen Microsystems | Two-level branch prediction cache |
-
1991
- 1991-06-27 CA CA002045791A patent/CA2045791A1/en not_active Abandoned
- 1991-06-28 KR KR1019910010880A patent/KR100190252B1/ko not_active IP Right Cessation
- 1991-06-28 EP EP91401783A patent/EP0463977B1/de not_active Expired - Lifetime
- 1991-06-28 JP JP3254074A patent/JP2951064B2/ja not_active Expired - Fee Related
- 1991-06-28 DE DE69129881T patent/DE69129881T2/de not_active Expired - Lifetime
- 1991-08-22 TW TW080106670A patent/TW198109B/zh active
-
1994
- 1994-05-16 US US08/243,559 patent/US6167509A/en not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
JP2951064B2 (ja) | 1999-09-20 |
EP0463977A3 (en) | 1993-09-22 |
JPH06103067A (ja) | 1994-04-15 |
TW198109B (de) | 1993-01-11 |
KR100190252B1 (ko) | 1999-06-01 |
EP0463977A2 (de) | 1992-01-02 |
DE69129881D1 (de) | 1998-09-03 |
KR920001321A (ko) | 1992-01-30 |
CA2045791A1 (en) | 1991-12-30 |
US6167509A (en) | 2000-12-26 |
EP0463977B1 (de) | 1998-07-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE69129881T2 (de) | Verzweigung in einem Pipeline-Prozessor | |
DE69130379T2 (de) | Datenvorausladebefehl in einem Prozessor mit reduziertem Befehlssatz | |
DE69127242T2 (de) | Sicherung der Datenintegrität in einem Multipipelineprozessorsystem | |
DE69131637T2 (de) | Registerhaltige Datenbearbeitung in einem Prozessor mit reduziertem Befehlssatz | |
DE69131189T2 (de) | Bytevergleich-Operation für einen hochleistungsfähigen Prozessor | |
KR100218572B1 (ko) | 고성능 프로세서의 번역버퍼에 대해 세분성 힌트를 이용하는 프로세서 동작 방법 및 장치 | |
DE69231451T2 (de) | Rückwärts kompatible Rechnerarchitektur mit erweiterten Wortbreiten und Adressraum | |
DE69031433T2 (de) | Speicherzugriffsausnahmebehandlung bei vorausgelesenen Befehlswörtern in dem Befehlsfliessband eines Rechners mit virtuellem Speicher | |
DE69427672T2 (de) | Befehlscachespeicher für Befehle mit variabler Byteslänge | |
DE69130588T2 (de) | Cache-Speicher von partiell decodierten Befehlen und Verfahren hierfür | |
KR100230643B1 (ko) | 고성능 프로세서의 브랜치 예상 동작 방법 및 장치 | |
DE68926385T2 (de) | Methode und Hardware-Ausführung von komplexen Datentransferbefehlen | |
DE69605943T2 (de) | Anordnung und verfahren zur mikrokodemodifikation | |
DE68927783T2 (de) | Mikroprozessor mit äusserem steuerungsspeicher | |
DE112012007088B4 (de) | Vorrichtung, verfahren und system mit einem befehl zum reduzieren von elementen in einem vektorregister mit einem schrittweisem zugriffsmuster | |
US5469551A (en) | Method and apparatus for eliminating branches using conditional move instructions | |
DE69901338T2 (de) | Mikroprozessor mit mehreren registersätzen, die den gleichen logischen raum besitzen | |
DE102013206381A1 (de) | Anweisungs-optimierender Prozessor mit Verzweigungs-Zähl-Tabelle in Hardware | |
DE102014003659A1 (de) | Systeme, vorrichtungen und verfahren zum bestimmen eines folgenden niedrigstwertigen maskierungsbits eines schreibmaskenregisters | |
DE112017003338T5 (de) | System, Vorrichtung und Verfahren zum Inspizieren dauerhafter Daten in einem Speicher | |
DE69721023T2 (de) | Bearbeitung bedingter auswahl-übertragungsbefehle | |
DE68926850T2 (de) | Datenverarbeitungsanordnung | |
DE69607492T2 (de) | Rücksprungstapelspeicherstruktur und superskalenmikroprozessor mit derselben | |
DE69613586T2 (de) | Befehlsdekoder mit emulation durch indirektspezifizierer | |
DE102020132898A1 (de) | Anweisungssatzarchitekturbasierte und automatische verfolgung von ladeoperationen für opportunistische umlenkung von unzuverlässigen datenabhängigen verzweigungen |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
8364 | No opposition during term of opposition | ||
8328 | Change in the person/name/address of the agent |
Free format text: GRUENECKER, KINKELDEY, STOCKMAIR & SCHWANHAEUSSER, 80538 MUENCHEN |