DE69433621T2 - Geraet zur verarbeitung von befehlen in einem rechnersystem - Google Patents

Geraet zur verarbeitung von befehlen in einem rechnersystem Download PDF

Info

Publication number
DE69433621T2
DE69433621T2 DE69433621T DE69433621T DE69433621T2 DE 69433621 T2 DE69433621 T2 DE 69433621T2 DE 69433621 T DE69433621 T DE 69433621T DE 69433621 T DE69433621 T DE 69433621T DE 69433621 T2 DE69433621 T2 DE 69433621T2
Authority
DE
Germany
Prior art keywords
instruction
instructions
queue
circuit
output
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
Application number
DE69433621T
Other languages
English (en)
Other versions
DE69433621D1 (de
Inventor
S. Chandra JOSHI
Paul Rodman
Yan-Tek Peter HSU
R. Monica NOFAL
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Toshiba Corp
MIPS Tech LLC
Original Assignee
Toshiba Corp
MIPS Technologies Inc
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Toshiba Corp, MIPS Technologies Inc filed Critical Toshiba Corp
Application granted granted Critical
Publication of DE69433621D1 publication Critical patent/DE69433621D1/de
Publication of DE69433621T2 publication Critical patent/DE69433621T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3814Implementation provisions of instruction buffers, e.g. prefetch buffer; banks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3844Speculative instruction execution using dynamic branch prediction, e.g. using branch history tables

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)
  • Memory System Of A Hierarchy Structure (AREA)

Description

  • TECHNISCHES GEBIET
  • Diese Erfindung betrifft Computersysteme und insbesondere eine Einrichtung zum Verarbeiten von Anweisungen in einem Computersystem.
  • TECHNOLOGISCHER HINTERGRUND
  • In einem typischen Computersystem werden Anweisungen von einem Anweisungsspeicher geholt, in einem Puffer gespeichert und dann zur Ausführung durch eine oder mehrere zentrale Verarbeitungseinheiten (CPU) ausgegeben. 10A bis 10C zeigen ein konventionelles System, wobei bis zu vier Anweisungen gleichzeitig ausgeführt werden können. Angenommen, die Anweisungen sind alphabethisch in einer Programmfolge aufgelistet. Wie in 10A gezeigt enthält ein Anweisungspuffer 10 eine Vielzahl von Zeilen 14A–C von Anweisungen, wobei jede Zeile vier Anweisungen enthält. Die im Puffer 10 gespeicherten Anweisungen werden in ein Ausgaberegister 18 geladen, das vier Register 22A–D umfasst, bevor sie zur Ausführung ausgegeben werden. Wenn vier Anweisungen gleichzeitig von dem Ausgaberegister 18 ausgegeben werden, dann können vier neue Anweisungen von dem Puffer 10 in das Ausgaberegister 18 geladen werden und der Prozess wird fortgesetzt. Jedoch können manchmal keine vier Anweisungen gleichzeitig ausgegeben werden, aufgrund von Ressourcen-Konkurrenz oder anderen Schwierigkeiten. 10B zeigt die Situation, in welcher nur zwei Anweisungen (A, B) gleichzeitig ausgegeben werden können. In bekannten Rechensystemen muss das System warten, bis das Ausgaberegister 18 vollständig leer ist, bevor irgendwelche ferneren Anweisungen von dem Puffer 10 in das Ausgaberegister 18 übermittelt werden können, um Einschränkungen von Code-Ausrichtung und die Art der Anweisungen, die jederzeit geladen werden können, unterzubringen. Folglich können im vorliegenden Beispiel höchstens zwei Anweisungen (C, D) während des nächsten Zyklus (10C) ausgegeben werden und dann kann das Ausgaberegister 18 neu geladen werden (mit Anweisungen E, F, G und H). Die Einschränkung bezüglich des Ladens neuer Anweisungen in das Ausgaberegister 18 kann die Systembandbreite signifikant verschlechtern, insbesondere wenn einige der neuen Anweisungen (z. B. E und F) gleichzeitig ausgegeben worden sein könnten, wie die in dem Ausgaberegister verbleibenden Anweisungen (C, D), wenn sie unmittelbar geladen worden wären, nachdem der vorangegangene Satz von Anweisungen (A, B) ausgegeben wurde.
  • Eine andere Einschränkung bekannter Rechensysteme kann in der Weise der Behandlung von Abzweigungsanweisungen gefunden werden, wo die Verarbeitung bei einer von der Anweisung, die sequenziell der Abzweigungsanweisung in dem Anweisungsspeicher folgt, abweichenden Anweisung fortgesetzt wird. Im typischen Fall werden Anweisungen sequenziell unter Verwendung einer mehrstufigen Pipeline (Reihenanordnung) geholt und ausgeführt. Demnach folgt gewöhnlich einer Abzweigungsanweisung in der Pipeline eine Anweisung, die ihr sequenziell im Anweisungsspeicher folgt. Wenn die Abzweigungsbedingung aufgelöst ist, üblicherweise zu irgendeinem späteren Zeitpunkt in der Gesamt-Pipeline, muss das Ausführen der Anweisung angehalten werden, die Anweisung, welche der Abzweigungsanweisung folgt, muss aus der Pipeline geräumt werden und die korrekte Anweisung muss von dem Anweisungsspeicher geholt werden und verarbeitet vom Beginn der Pipeline an. Demnach wird eine Menge Zeit verschwendet von der Zeit, zu der die Abzweigungsbedingung aufgelöst ist bis die geeignete Anweisung ausgeführt wird.
  • Es ist ein Ziel der vorliegenden Erfindung, eine Einrichtung zum Verarbeiten von Anweisungen in einem Rechensystem bereitzustellen, wobei vier Anweisungen immer verfügbar sind zur Ausgabe unabhängig davon, wie viele Anweisungen zuvor ausgegeben worden sind und unbeachtlich der Code-Ausrichtung oder des Anweisungstyps.
  • OFFENBARUNG DER ERFINDUNG
  • Gemäß einem Aspekt der vorliegenden Erfindung wird eine Einrichtung zum Verarbeiten einer Anweisung in einem Rechnersystem bereitgestellt, umfassend: erste und zweite Anweisungsspeicherschaltungen, wobei jede Anweisungsspeicherschaltung N Anweisungen zur parallelen Ausgabe speichert; eine an die erste Anweisungsspeicherschaltung gekoppelte Anweisungsausgabeschaltung zum Ausgeben von L in der Anweisungsspeicherschaltung gespeicherten Anweisungen, wobei L kleiner oder gleich N ist; und eine an die Anweisungsausgabeschaltung und die ersten und zweiten Anweisungsspeicherschaltungen gekoppelte Anweisungsladeschaltung zum Laden von L Anweisungen von der zweiten Anweisungsspeicherschaltung in die erste Anweisungsspeicherschaltung, nachdem die L Anweisungen von der ersten Anweisungsspeicherschaltung ausgegeben worden sind und bevor fernere Anweisungen von der ersten Anweisungsspeicherschaltung ausgegeben werden; wobei die Anweisungsladeschaltung die L Anweisungen von der zweiten Anweisungsspeicherschaltung in die Positionen lädt, die zuvor von L Anweisungen belegt waren, welche von der ersten Anweisungsspeicherschaltung ausgegeben worden sind.
  • Gemäß einem anderen Aspekt der vorliegenden Erfindung wird eine Einrichtung zum Verarbeiten von Anweisungen in einem Rechnersystem bereitgestellt, umfassend eine Anweisungsspeicherschaltung zum Speichern von N Anweisungen zur parallelen Ausgabe; eine an die Anweisungsspeicherschaltung gekoppelte Anweisungsausgabeschaltung zum Ausgeben von L in der Anweisungsspeicherschaltung gespeicherten Anweisungen, wobei L kleiner oder gleich N ist; eine Anweisungswarteschlange zum Speichern von M Zeilen von N Anweisungen aus einem Anweisungsspeicher; und eine an die Anweisungsspeicherschaltung und die Anweisungswarteschlange gekoppelte Anweisungsladeschaltung zum Laden von L Anweisungen von der Anweisungswarteschlange in die Anweisungsspeicherschaltung, nachdem die L Anweisungen von der Anweisungsspeicherschaltung ausgegeben worden sind und bevor fernere Anweisungen von der Anweisungsspeicherschaltung ausgegeben werden; wobei die Anweisungsladeschaltung die L Anweisungen von der Anweisungswarteschlange in die Positionen lädt, die zuvor von den L Anweisungen belegt waren, welche von der Anweisungsspeicherschaltung ausgegeben worden sind.
  • Die Anweisungsausgabeschaltung kann einen Ausgabezeiger (Pointer) umfassen zum Speichern eines Wertes, der indikativ ist bezüglich eines Ortes einer nächsten in der Anweisungsspeicherschaltung auszugebenden Anweisung. Der Ausgabezeiger kann einen Modulo-N-Zähler umfassen.
  • Die Anweisungswarteschlange kann einen Warteschlangenzeiger (Pointer) umfassen zum Speichern eines Wertes, der indikativ ist bezüglich eines Ortes einer von der Warteschlange in die Anweisungsspeichereinheit zu ladenden nächsten Anweisung. Die Anweisungswarteschlange kann ferner einen an den Warteschlangenzeiger gekoppelten Multiplexer umfassen zum Auswählen von N Anweisungen aus der Warteschlange und Ausgeben der N ausgewählten Anweisungen zu der Anweisungsspeicherschaltung. Der Multiplexer kann die N nächsten aufeinanderfolgenden Anweisungen von dem Warteschlangenzeigerwert auswählen.
  • Die Einrichtung kann eine Warteschlangenladeschaltung umfassen zum simultanen Laden von N Anweisungen von dem Anweisungsspeicher in die Anweisungswarteschlange. Auch kann die Einrichtung einen Taktgeber (Clock) umfassen zum Bereitstellen periodischer Taktimpulse; und die Warteschlangenladeschaltung kann auf jeden Taktimpuls hin simultan N Anweisungen von dem Anweisungsspeicher in eine leere Zeile in der Anweisungswarteschlange laden.
  • Die Warteschlangenladeschaltung kann eine Ladenverhinderungsschaltung umfassen zum Verhindern des Ladens von Anweisungen von dem Anweisungsspeicher in die Anweisungswarteschlange, wenn es keine leere Zeile in der Warteschlange gibt.
  • Die Anweisungswarteschlange kann einen Eingabekommunikationspfad einschließen und ferner eine Warteschlangenumgehungsschaltung umfassen, die an den Eingabekommunikationspfad gekoppelt ist und an die Anweisungsspeicherschaltung zum direkten Kommunizieren von Anweisungen von dem Eingabekommunikationspfad zur Anweisungsspeicherschaltung.
  • In Übereinstimmung mit der vorliegenden Erfindung werden immer vier Anweisungen zur Ausgabe verfügbar gehalten, unabhängig davon, wie viele Anweisungen zuvor ausgegeben worden sind und unbeachtlich der Code-Ausrichtung oder des Anweisungstyps.
  • KURZBESCHREIBUNG DER ZEICHNUNGEN
  • Es zeigt:
  • 1 ein Blockdiagramm des Holens und Ausgebens von einer Anweisung in einer speziellen Ausgestaltung eines Rechnersystems gemäß der vorliegenden Erfindung;
  • 2 ein Blockdiagramm einer speziellen Ausgestaltungsform einer Einrichtung gemäß der vorliegende Erfindung zum Holen und Ausgeben von Anweisungen;
  • 3 ein Blockdiagramm des Betriebs des Anweisungswarteschlangenbilders der 3;
  • 4 ein Blockdiagramm einer alternativen Ausführungsform einer Einrichtung gemäß der vorliegenden Erfindung zum Holen und Ausgeben von Anweisungen;
  • 5 ein Blockdiagramm einer Einrichtung zum Vorhersagen von Abzweigungen;
  • 6 ein Blockdiagramm eines Eintrags in das in 5 gezeigte Abzweigungs-Chaches; und
  • 7 ein Blockdiagramm des Hol-Schrittes bzw. Fetch-Schrittes (F) einer Anweisungs-Pipeline;
  • 8 ein Blockdiagramm des Decodier-Schrittes (D) und Adressgenerier-Schrittes (A) der Anweisungs-Pipeline;
  • 9 ein Blockdiagramm der Ausführungs-(E) und Zurückschreibe-Stufen (W) der Pipeline, und
  • 10 Blockdiagramme des Anweisungsholens und Ausgebens in einem bekannten Rechnersystem.
  • BESTE ART ZUR AUSFÜHRUNG DER ERFINDUNG
  • 1AD sind Blockdiagramme zum Zeigen von Anweisungsholen und Ausgeben in einer speziellen Ausgestaltungsform eines Rechnersystems gemäß der vorliegenden Erfindung. Wie in dem in 10AD gezeigten Beispiel sei angenommen, dass zwei Anweisungen (A, B) anfangs ausgegeben werden. Jedoch abweichend von dem Beispiel in den 10A-D werden die beiden ausgegebenen Anweisungen (A, B) unmittelbar ersetzt durch die nächsten beiden sequenziellen Anweisungen (E, F), wie in 1B gezeigt. Demnach sind vier Anweisungen zur Ausgabe im nächsten Taktzyklus verfügbar. Ein Zeiger 26 wird verwendet, um nachzuverfolgen, welche Anweisung den zuvor ausgegebenen Anweisungen in der Programmabfolge folgt. Wenn drei Anweisungen im nächsten Taktzyklus ausgegeben werden, wie in 1C gezeigt, dann kann die durch den Zeiger 26 angezeigte Anweisung gemeinsam mit den beiden sequenziell folgenden Anweisungen durch Zulassen der geeigneten Register 22A, 22C und 22D freigegeben werden. Unmittelbar danach wird das Ausgaberegister 18 mit den nächsten drei Anweisungen in der Programmfolge von dem Anweisungspuffer 10 geladen.
  • An diesem Punkt sollte bemerkt werden, dass zwei Zeilen in dem Anweisungspuffer gegebenenfalls die in das Ausgaberegister 18 geladenen Anweisungen zuführen müssen. Beispielsweise führt die Zeile 14C Anweisungen (G, H) zu und die Zeile 14B führt eine Anweisung (I) zu dem Ausgaberegister 18 in 1C zu. Vier Anweisungen pro Zeile annehmend, kann die Zeile, die die nächste sequenzielle Programmanweisung, die in das Ausgaberegister 18 zu laden ist, enthält mit dem Begriff "Leading-Quad" (führender Vierer) bezeichnet werden und irgendeine nächste fernere Zeile, die simultan Anweisungen zu dem Ausgaberegister 18 zuführt, um die Auffülloperation abzuschließen, kann bezeichnet werden mit "Trailing-Quad" (nachfolgender bzw. hinterer Vierer). Wenn der führende Vierer durch die Auffülloperation geleert wird, dann kann der Inhalt des Puffers weitergeführt werden um eine Zeile, wie in 1D gezeigt. In 1D werden zwei weitere Anweisungen (F, G) ausgegeben und zwei Anweisungen (J,K) werden an deren Stelle geladen.
  • 2 ist ein Blockdiagramm einer speziellen Ausgestaltungsform einer Einrichtung 30 zum Holen und Ausgeben von Anweisungen gemäß der vorliegenden Erfindung. Die Einrichtung 30 schließt ein Anweisungs-Cache 34 ein, welches eine Vielzahl von Zeilen von Anweisungen speichert, die adressiert werden können durch einen Adresswert, der auf einem Kommunikationspfad 38 empfangen wird. In dieser Ausgestaltungsform speichert jede Zeile vier 32-Bit-Anweisungen und kommuniziert alle Anweisungen in einer Zeile zu einer Vordecodierschaltung 42 über einen Kommunikationspfad 46. Die Vordecodierschaltung decodiert die vier Anweisungen partiell und kommuniziert die vier partiell decodierten Anweisungen zu einem Anweisungswarteschlangenbilder 50 über einen Kommunikationspfad 54 und zu Ausgabemultiplexern 58A–D über einen Warteschlangenumgehungspfad 62.
  • Der Anweisungswarteschlangenbilder 50 schließt vier Warteschlangenabschnitte 66A–D ein, einen für jede Anweisung in jeder Zeile. Alle vier Warteschlangenabschnitte haben denselben Aufbau, so dass nur die Details des Warteschlangenabschnittes 66A beschrieben werden. Der Warteschlangenabschnitt 66A schließt eine Vielzahl, z. B. sechs seriell verbundene Anweisungspuffer IBUFO-IBUF5 ein. Jeder Anweisungspuffer ist an einen Multiplexer 68 durch einen entsprechenden Multiplexereingangspfad 70A–F gekoppelt. Der Multiplexer 68 wählt eine der Anweisungen aus den Anweisungspuffern IBUFO-IBUF5 ansprechend auf über eine Leitung 72A empfangene Signale und kommuniziert die ausgewählte Anweisung zu einem Ausgabemultiplexer 58A über einen Kommunikationspfad 74A. Die momentane Anweisung in dem Register 22A wird auch zu dem Eingang des Ausgabemultiplexers 58A über einen Rückführungskommunikationspfad 76D kommuniziert. Der Ausgabemultiplexer 58A wählt demnach aus der Ausgabe des Multiplexers 68, dem Warteschlangenumgehungspfad 62 oder dem Rückmeldungskommunikationspf ad 76A ansprechend auf über eine QOMXSEL-Leitung 80A empfangene Signale aus zum Kommunizieren einer Anweisung zu dem Register 22A über einen Kommunikationspfad 82A. Das Register 22A lädt dann den empfangenen wert ansprechend auf an das Register angelegte Taktsignale aus (getaktete Register werden durch das winklige Symbol auf der linken Seite jedes Registers gekennzeichnet), und gibt dann die Anweisung, wenn möglich, aus.
  • Warteschlangenabschnitte 66B–D wählen auch Anweisungen innerhalb eines ihrer seriell verbundenen Pufferabschnitte als Reaktion auf Signale aus, die über Leitungen 72B–D jeweils empfangen worden sind und kommunizieren die ausgewählten Anweisungen zu Ausgabemultiplexern 58B–D über jeweilige Kommunikationspfade 74B–D. Ausgabemultiplexer 58B–D kommunizieren Anweisungen, die von über QIMXSEL-Q3MXSEL-Leitungn empfangene Signale ausgewählt worden sind an ihre jeweiligen Register 22B–D über Kommunikationspfade 82B–D.
  • Eine Einrichtung 30 wählt in folgender Weise aus, welche Anweisungen dem Ausgaberegister 18 zu präsentieren sind. Das erste Mal, wenn eine Zeile von Anweisungen von dem Anweisungs-Cache 34 geholt worden ist, ist der Anweisungswarteschlangenbilder 50 leer und Multiplexer 58A–D wählen die Anweisungen aus dem Warteschlangenumgehungspfad 62 aus. Anweisungen werden dann ausgegeben und eine neue Zeile von Anweisungen werden von dem Anweisungs-Cache 34 gelesen.
  • Im Allgemeinen wird eine neue Zeile von Anweisungen von dem Anweisungs-Cache 34 mit jedem Taktzyklus gelesen. Wenn vier Anweisungen mit jedem Taktzyklus ausgegeben würden, würde das Ausgaberegister jedes Mal von dem Warteschlangenumgehungspfad 62 geladen werden. Jedoch werden zu jedem Taktzyklus jedes Mal zwischen null und vier Anweisungen ausgegeben. Wenn demnach nicht alle Anweisungen ausgegeben werden, werden dann nur gewisse der Register 22A–D von dem Warteschlangenumgehungspfad 62 geladen entsprechend der Anzahl von ausgegebenen Anweisungen. Die zuvor gelesene Anweisungszeile wird dann in jedem Warteschlangenabschnitt 66A–D in IBUFO geladen und die neue Zeile von Anweisungen wird von dem Anweisungs-Cache 34 gelesen. Daraufhin werden Anweisungen von IBUFO von dem Warteschlangenumgehungspfad 62 in den geeigneten Warteschlangenabschnitt 66A–D geladen. Wenn beispielsweise zwei Anweisungen in einem ersten Zyklus ausgegeben werden, dann werden Register 22A–B von dem Warteschlangenumgehungspfad 62 geladen, Register 22C–D werden mit denselben Anweisungen über die Kommunikationspfade 76C–D neu geladen und die zuvor gelesene Zeile von Anweisungen wird in IBUFO in Warteschlangenabschnitten 66A–D geladen und eine neue Anweisungszeile wird von dem Anweisungs-Cache 34 gelesen. Wenn nur eine Anweisung während des nächsten Taktzyklus ausgegeben wird, dann wird das Register 22C von IBUFO in dem Warteschlangenabschnitt 66C geladen, die Register 22A, 22B und 22D werden mit derselben Anweisung über die Kommunikationspfade 76A, 76C und 76D neu geladen und die Anweisungszeile, die im IBUFO gespeichert ist, in jedem Warteschlangenabschnitt 66A–D wird weitergeführt zu IBUF1 in jedem Warteschlangenabschnitt, die zuvor gelesene Anweisungszeile wird in IBUFO Warteschlangenabschnitten 66A–D geladen und eine neue Zeile wird von dem Anweisungs-Cache 34 gelesen. Die Anweisungszeilen werden innerhalb der Warteschlangenabschnitte 66A–D fortgeführt bis der Puffer voll ist. Zu diesem Zeitpunkt blockiert die Einrichtung ein ferneres Laden von Anweisungszeilen in die Warteschlange. Diese Betriebsart ermöglicht es, dass die Anweisungsvoreinholoperation entkoppelt ist von der Ausgabeoperation.
  • Ein RDPTR-Register 86 speichert einen Wert I-STATE[4:0] zum Steuern des Betriebs des Anweisungswarteschlangenbilders 50. STATE[4:2] wird verwendet zum Bestimmen, welcher Puffer IBUFO-IBUF5 in dem jeweiligen Warteschlangenabschnitt 66A–D die nächste Anweisung zu Registern 22A–D zur Verfügung stellt und STATE[1:0] arbeitet als Zeiger 26 in 1AC (ein Modulo-4-Zähler) zum Angeben, welche Anweisung als nächstes auszugeben ist. Ein F-INST-Register 90 speichert einen INST-CONSUME-Wert, der angibt, wie viele Anweisungen im jeweiligen Zyklus verbraucht werden (d.h. die Summe von Warteschlangenbilderregistertaktfreigaben oder die Gesamtzahl von von dem Ausgaberegister 18 ausgegebenen Anweisungen, egal ob gültig oder nicht). Der INST-CONSUME-Wert (Anweisungsverbrauchswert) wird in Verbindung mit 8 diskutiert. Der INST-CONSUME-Wert wird zu STATE[4:0] durch einen Addierer 92 hinzugefügt, um auf die nächste auszugebende Anweisung zu zeigen. STATE[4:2] wird jedes Mal inkrementiert, wenn die momentane Anweisungszeile, die zum Laden des Ausgaberegisters 18 verwendet wird, fortgeführt wird in der Warteschlange. Der Aktualisierungswert von STATE[4:0] wird zurückgeladen in das RDPTR-Register 86 und zu einer Warteschlangenbilder-Multiplex-Auswahlschaltung 98 über Kommunikationspfade 99A und 99B kommuniziert. Wenn STATE[4:2]="101" (=5) gilt, ist der Anweisungspuffer voll und die Einrichtung blockiert ein ferneres Laden von Anweisungszeilen in die Warteschlange.
  • Die Warteschlangen-Multiplex-Auswahlschaltung 98 präsentiert die nächsten vier sequenziellen Anweisungen (in Programmreihenfolge) zum Ausgaberegister 18 in Übereinstimmung mit den Werten von STATE[4:2] und STATE[1:0]. 3 und Tabelle 1 zeigen, welcher Puffer in welchem Warteschlangenabschnitt 66A–D die nächste Anweisung zu seinem entsprechenden Register 22A–D im Ausgaberegister 18 zuführt für die unterschiedlichen Werte von STATE[1:0].
  • TABELLE 1
    Figure 00110001
  • Wenn demnach STATE[4:2]=2 gilt und STATE[4:2]=3, dann werden den Registern 22C und 22D die letzten beiden Anweisungen in dem führenden Vierer (Vierergruppe IBUF3) und den Registern 22A und 22B werden die ersten beiden Anweisungen in dem hinteren Vierer (IBUF2) präsentiert.
  • Die beschriebene Einrichtung zum Holen und Ausgeben von Anweisungen kann in vielen Umgebungen mit oder ohne Modifikation verwendet werden. Beispielsweise angenommen, ganzzahlige, Speicher- und Fließkommaanweisungen sind in einem Anweisungs-Cache 34 gespeichert und sie können gemischt werden innerhalb einer Anweisungszeile. Wenn es ein Problem gibt mit Ressourcenwettbewerb und Datenabhängigkeiten mit einer Anweisung oder einem Anweisungstyp (z. B. Fließkommaanweisungen), dann können jene Anweisungen in eine andere Warteschlange ausgegeben werden, in welcher sie warten können auf das Klären der Ressourcenwettbewerbssituation bzw. der Datenabhängigkeiten, ohne die Ausgabe der anderen Anweisungen aufzuhalten.
  • 4 ist ein Blockdiagramm einer alternativen Ausgestaltungsform einer Einrichtung 104 gemäß der vorliegenden Erfindung zum Holen und Ausgeben von Gleitkommaanweisungen, die zuvor von einem Ausgaberegister 18 in 4 ausgegeben worden sein können. Beim Betrachten wird ersichtlich, dass die Einrichtung 104 weitgehend ähnlich der Einrichtung 30 in 2 arbeitet, mit der Ausnahme, dass die Einrichtung 104 auch im Bezug auf das Speichern von Daten gemeinsam mit den Anweisungen bereitsteht zum Behandeln von ganzzahligen Speicheroperationsdaten oder Gleitkommaregisterdaten, die von dem ganzzahligen Register zu laden sind.
  • Die zuvor beschriebene Einrichtung erleichtert auch die Verarbeitung von Anweisungen in einem Rechnersystem, wobei Abzweigungen zur Zeit des Anweisungsholens vorhergesagt sind und wobei die vorhergesagte Zielanweisung unmittelbar geholt wird derart, dass die Zielanweisung unmittelbar nachdem die Abzweigungsanweisung ausgeführt worden ist, zur Ausführung verfügbar ist. 5 ist ein Blockdiagramm einer Einrichtung 110 zum Vorhersagen von Abzweigungen. Ein Abzweigungsvorhersage-Cache 114 wird verwendet zum Vorhersagen des Ergebnisses von in einem Anweisungs-Cache 34 gespeichert Abzweigungsanweisungen. Beispielsweise kann der Anweisungs-Cache 34 ein 16kB-direktabgebildeter fache sein, welcher vier Anweisungen pro Zyklus ausgibt, wie oben erwähnt. In dieser Einrichtung ist auch ein Abzweigungsvorhersage-Cache 114 direkt abgebildet und kann 1k-Einträge enthalten (einen Eintrag pro vier Anweisungen im Anweisungs-Cache 34). Auf den Anweisungs-Cache 34 und im Abzweigungs-Cache 114 wird parallel in der Hol-Stufe der Pipeline durch den Kommunikationspfad 38 zugegriffen, welcher einen Indexwert (Adresswert) von einem Zähler 116 empfängt. Selbstverständlich könnten der Anweisungs-Cache 34 und der Abzweigungsvorhersage-Cache 114 auf Wunsch mit unterschiedlichen Adressen bezugrifft werden.
  • 6 zeigt einen Beispielseintrag 120 von dem Abzweigungsvorhersage-Cache 114 und ein Beispiel der Abzweigungsvorhersage. Ein Eintrag 120 schließt ein Gültig-Feld 124 (Valid) zum Vorhersagen ein, ob die Abzweigung genommen wird (0=nicht vorhergesagt; 1=vorhergesagt), ein Indexfeld 128, welches der Anweisungs-Cache-Index der Abzweigungszielanweisung ist, ein Quellefeld (SRC) 132, welches die Position der letzten innerhalb der die Abzweigungsanweisung enthaltenden Zeile auszuführende Anweisung enthält, und ein Zielfeld (DST) 134, welches die Position der Abzweigungszielanweisung innerhalb der von dem Cache-Index geholten Zeile anzeigt.
  • In dieser Einrichtung umfasst jede Abzweigungsanweisung tatsächlich zwei Anweisungen. Die erste Anweisung, die als Anfangsabzweigungsanweisung bezeichnet wird, berechnet das Abzweigungsziel und die Abzweigungsbedingung. Die zweite Anweisung, die als Verzögerungsanweisung bezeichnet wird, folgt unmittelbar der Anfangsabzweigungsanweisung und wird verwendet zum tatsächlichen Ändern des Programmablaufs zu der Abzweigungszielanweisung. Folglich zeigt das Quellenfeld 132 üblicherweise die Position der Verzögerungsanweisung innerhalb der Anweisungszeile an, wie in 6 gezeigt.
  • Der Adresswert im Zähler 116 wird zu einer Inkrementierschaltung 138 kommuniziert, welche den Zählwert um vier inkrementiert (da es vier Anweisungen pro Zeile gibt) und den inkrementierten Wert zu einem Multiplexer 142 durch einen Kommunikationspfad 144 kommuniziert. Zusätzlich wird der Wert. in dem Indexfeld 128 des Abzweigungs-Cache-Eintrags zu dem Multiplexer 142 über einen Kommunikationspfad 148 kommuniziert. Der Wert in dem Gültig-Feld 124 kann verwendet werden zum Steuern der Operation des Multiplexers 142. Wenn demnach die Abzweigung vorhergesagt wird (V=1), wird dann der Anweisungs-Cache 34 adressiert werden mit dem Wert von dem Indexfeld 128 im nächsten Zyklus. Wenn die Abzweigung nicht vorhergesagt wird (V=0), dann wird der Anweisungs-Cache 134 mit der nächsten sequenziellen Zeile der Anweisungen adressiert werden, wie von der Inkrementierschaltung 138 bestimmt.
  • Der Wert im Quellenfeld 132 wird zu einer Gültig-Maske 18 durch eine ODER-Schaltung 150 kommuniziert. Wenn die Abzweigung vorhergesagt wird, macht die Gültig-Maske 148 alle Anweisungen in der momentanen Zeile, welche nach der Verzögerungsanweisung, die der Abzweigung zugeordnet ist, auftreten, ungültig, da sie nicht ausgeführt werden würden, wenn die Abzweigung genommen würde. Beispielsweise, wenn die Verzögerungsanweisung die dritte Anweisung in der Zeile ist, wie in 6 gezeigt, dann wird die vierte Anweisung ungültig gemacht. Während des nächsten Taktzyklus wird die Zeile (einschließlich irgendwelcher ungültig gemachter Anweisungen) zu dem Anweisungswarteschlangenbilder 50 kommuniziert und dem Warteschlangenumgehungspfad 62 (2); der Wert des Zielfeldes wird in ein Register 152 geladen, der Wert des Zählers 116 wird mit dem Wert von dem Indexfeld 128 geladen und der Anweisungs-Cache 34 wird adressiert zum Holen der Zeile, die die vorhergesagte Abzweigungszielanweisung enthält. Das Zielfeld im Register 152 wird dann zu einer Gültig-Maske 148 durch eine ODER-Schaltung 150 kommuniziert, um die Anweisungen ungültig zu machen, die auftreten, bevor die vor der Abzweigungszielanweisung in der Zeile auftreten. Wenn beispielsweise die Abzweigungszielanweisung die zweite Anweisung in der Zeile ist, dann macht die Gültig-Maske 148 die erste Anweisung in der Zeile ungültig. Die Zeile wird dann zu dem Anweisungswarteschlangenbilder 50 und dem Warteschlangenumgehungspfad 62 kommuniziert.
  • In dieser Einrichtung werden alle Abzweigungsvorhersage-Cache-Einträge mit einem Gültig-Wert von Null initialisiert (Abzweigung nicht vorhergesagt). Wenn das Programm zum ersten Mal ausgeführt wird, wird das Ergebnis jeder Abzweigungsanweisung verwendet zum Aktualisieren des Abzweigungsvorhersage-Cache-Eintrags (wenn erforderlich) durch Einstellen des Gültig-Bits auf Eins und durch Einfügen des geeigneten Index-, Quellen- und Zielwertes. Abzweigungsvorhersage kann demnach daraufhin auftreten. Wenn eine entsprechend zuvor genommene Abzweigung nicht zu einem späteren Zeitpunkt genommen wird, oder wenn eine zuvor nicht genommene Abzweigung zu einem späteren Zeitpunkt genommen wird, dann wird der Abzweigungs-Cache-Eintrag aktualisiert (und die korrekte Anweisung geholt) (wie unten diskutiert).
  • Zusätzlich pausiert (hält) das Ausgaberegister 18 die Superskalar-Anweisungen, welche nach der Verzögerungsanweisung einer vorhergesagten Abzweigung im Dispatch-Register 18 auftreten zum Vermeiden des Vermischens von Zielanweisungen mit einer momentanen Abzweigungsanweisung. Zudem pausiert (hält) das Ausgaberegister die Superskalar-Anweisungen an der zweiten Abzweigung, wenn zwei Abzweigungen in dem Ausgaberegister 18 gespeichert sind, so dass nur eine Abzweigung gleichzeitig auszuführen ermöglicht wird.
  • 79 sind Blockdiagramme von Abschnitten einer Anweisungs-Pipeline, die zeigt, wie Abzweigungsvorhersage arbeitet. Womöglich sind Bezugszeichen beibehalten worden von vorangegangenen Figuren. Ein Anweisungs-Cache 34 kann einen Anweisungsspeicher umfassen und einen Etiketten- bzw. Tag-Speicher, wie im Stand der Technik wohlbekannt ist. Der Anweisungsspeicherabschnitt kann die Anweisungszeilen enthalten und der Etikettenspeicher kann die virtuellen Adress-Tags (und Steuerinformation) enthalten, die jeder Zeile im Anweisungsspeicher zugeordnet sind. Für die vorliegende Diskussion ist nur der Tag-Speicherabschnitt 34A des Anweisungs-Cache 34 dargestellt. Der Tag-Speicher 34A schließt ein anwendungsspezifisches Indikationsfeld (asid[7:0]) ein, den Anweisungs-Cache-Tag bzw. das Anweisungs-Cache-Etikett (tag[33:0], die 34 Bits höherer Ordnung der zugeordneten virtuellen Adresse), ein Gültigkeits-Bit (V) und ein Regionsfeld (r[1:0]) zum Anzeigen des Adressraums der Anweisung.
  • 7 zeigt die Hol-Stufe (F) der Anweisungs-Pipeline. Zähler 116A und 116B sind die primären Hol-Stufenprogrammzähler, die den Tag-Speicher 34A und den Abzweigungs-Cache 114 adressieren. Der Wert im Zähler 116A (fpc[13:4]), welcher eine Zeile im Tag-Speicher 34A indiziert, wird zu dem Tag-Speicher 34A und zu der Inkrementierschaltung 138 über einen Kommunikationspfad 38A kommuniziert. Die Inkrementierschaltung 138 fügt eine Eins zu dem Zählwert und kommuniziert den inkrementierten Wert zu dem Multiplexer 142A und dem Multiplexer 142B über den Kommunikationspfad 144. Die Multiplexer 142A und 142B empfangen auch das Indexfeld von dem Abzweigungs-Cache 114 über den Kommunikationspfad 148 und eine Korrekturadresse (unten beschrieben) über einen Kommunikationspfad 160. Der Wert auf dem Kommunikationspfad 160 (pc jam-bus[13:2]} wird verwendet zum Korrigieren von Abzweigungsfehlvorhersage, Cache-Verlusten, etc. Der Multiplexer 142B empfängt auch eine Abzweigungs-Cache-Schreibadresse (bcwadr[13:4]) zum Aktualisieren des Abzweigungs-Cache. Die zum Aktualisieren des Abzweigungsvorhersage-Cache 114 verwendeten Daten (bc wdata[14:0]) werden zu einem Register 164 über einen Kommunikationspfad 168 kommuniziert. Multiplexer 142A und 142B wählen die geeignete Adresse aus und kommunizieren sie jeweils zu Zählern 116A und 116B.
  • Ein Register 172 speichert ein Parallellade-Bit (f pld), das anzeigt, ob Zähler 116A–B mit dem inkrementierten Wert von der Inkrementierschaltung 138 geladen worden sind, oder ob Zähler 116A-B von entweder dem Kommunikationspfad 148 oder dem Kommunikationspfad 160 geladen worden sind, und ein Register 176 speichert einen Wert (fpc [3:2]) entsprechend dem Zielfeld eines Abzweigungsvorhersage-Cache-Eintrags (Bits (4:3) der bc-Daten (14:3) auf dem Kommunikationspfad 148). Die Werte in Registern 116A, 172 und 176 werden kombiniert mit der Ausgabe des Tag-Speichers 34A und in einem Warteschlangenregister TBUF0 gespeichert, welches eines von sechs Registern (TBUF0-TBUF5) ist, die verwendet werden zum Speichern von Tag-Daten, um den sechs Anweisungspuffern IBUF0-IBUF5 in dem Anweisungswarteschlangenbilder 50 zu entsprechen. Jedes Register TBUF0-TBUF5 ist mit Multiplexern 180 und 184 gekoppelt, welche die Register auswählen, die jeweils dem führenden Vierer und dem hinteren Vierer im Anweisungswarteschlangenbilder 50 entsprechen. Die Tag-Speicherinformation des führenden Vierers wird zu der nächsten Stufe in der Pipeline über einen Kommunikationspfad 188 kommuniziert und die Tag-Speicherinformation des hinteren Vierers wird zu der nächsten Stufe in der Pipeline über einen Kommunikationspfad 190 kommuniziert.
  • 8 zeigt die Decodier-Stufen bzw. D-Stufen und die Adressgenerier-Stufen bzw. A-Stufen der Anweisungs-Pipeline. In der D-Stufe werden Bits [56:2] der Information des führenden Vierers von dem Tag-Speicher 34A in einem DLTAG-Register 200 gespeichert und Information des hinteren Vierers von dem Tag-Speicher 34A wird in einem DTTAG-Register 204 gespeichert. Das Bestimmungsortfeld des Abzweigungsvorhersage-Cache-Eintrags (fpc[3:2]), das, falls vorhanden, der Information des führenden Vierers zugeordnet ist, wird zu einem Multiplexer 208 kommuniziert. Der andere Eingang zum Multiplexer 208 ist gekoppelt mit einem Ausgangskommunikationspfad 210 eines Addierers 214, der den Zeigerwert der Position der nächsten sequenziellen Anweisung enthält, die während des normalen sequenziellen Ausführens auszugeben ist. Der Multiplexer 208 wählt entweder den Bestimmungsortwert oder den nächsten sequenziellen Anweisungswert aus und kommuniziert den ausgewählten Wert zu dem Ausgangskommunikationspfad 216 des DLTAG-Registers 200. Der Kommunikationspfad 216 ist an einen Eingang eines Multiplexers 218 gekoppelt.
  • Die Tag-Speicherinformation des hinteren Vierers, die in dem DTTAG-Register 204 gespeichert ist, wird zu dem Multiplexer 218 und zu einer Vergleichsschaltung 220 über einen Kommunikationspfad 224 kommuniziert. Der Multiplexer 218 wählt die Tag-Information entsprechend der ersten als nächstes auszuführenden Anweisung aus und gibt die ausgewählte Information an einen Kommunikationspfad 226 zu einem ATAG-Register in einer A-Stufe (Adressgenerierstufe) der Pipeline aus. Der Ausgaberegisterzeigerwert wird zu dem Addierer 214 über einen Kommunikationspfad 228 kommuniziert, die Tag-Speicherinformation wird über einen Kommunikationspfad 230 zu einer Vergleichsschaltung 220 kommuniziert, und der Anweisungs-Cache-Index wird zu einer Vergleichsschaltung 234 kommuniziert.
  • Die Vergleichsschaltung 220 vergleicht das Tag des führenden Vierers mit dem Tag des hinteren Vierers. Wenn es keine Übereinstimmung gibt, kommen die Anweisungen des führenden Vierers und die Anweisungen des hinteren Vierers aus einem unterschiedlichen Zusammenhang, so dass sie nicht gleichzeitig ausgegeben werden sollten. Ein Signal wird bereitgestellt auf einem Kommunikationspfad 238, um die Superskalar-Anweisungen pausieren zu lassen, wenn dies auftritt.
  • Eine Vergleichsschaltung 234 vergleicht den Anweisungs-Cache-Index mit dem Hexadezimalwert "FFF", um zu bestimmen, ob das Ende des Anweisungs-Cache adressiert worden ist. Ist dies der Fall, dann ist es wünschenswert, die Superskalar-Anweisungen am Ende der Cache-Zeile pausieren zu lassen, und ein Signal wird zu diesem Zweck auf einem Kommunikationspfad 224 bereitgestellt.
  • Ein Addierer 214 empfängt einen Wert, der die Summe gültiger Anweisungen angibt, die über einen Kommunikationspfad 250 ausgegeben worden sind, und dieser Wert wird verwendet zum Inkrementieren des momentanen Ausgaberegisterzeigerwertes, um den aktualisierten Ausgaberegisterzeigerwert auf einem Kommunikationspfad 214 zu produzieren.
  • Während der D-Stufe bzw. Decodier-Stufe, wird das Register 90 (siehe auch 2) mit dem Wert geladen, der die Anzahl von verbrauchten Anweisungen (sowohl gültige, als auch ungültige Anweisungen) anzeigt, und dieser Wert wird verwendet zum Steuern des Betriebs des Anweisungswarteschlangenbilders 50, wie in Verbindung mit 2 diskutiert.
  • Während der A-Stufe bzw. Adressgenerier-Stufe wird die tatsächliche Abzweigungsadresse generiert. Da jede Abzweigungsanweisung eine Anfangsabzweigungsanweisung umfasst, gefolgt von einer Verzögerungsanweisung, und da die tatsächliche Abzweigung ausgeführt wird nach der Verzögerungsanweisung, muss die Abzweigungszieladresse in Bezug auf die Verzögerungsanweisung berechnet werden. Entsprechend wird, wenn die Tag-Information, die der die Abzweigungsanweisung enthaltenden Zeile entspricht, in dem ATAG-Register-224 gespeichert wird, ein die relative Position der Verzögerungsanweisung angebender Wert innerhalb der Zeile ausgewählt durch einen Multiplexer 250 und über einen Kommunikationspfad 258 in einem RELDLY-Register 254 gespeichert. Der relative Verzögerungswert wird zu einem Abzweigungszieladdierer 260 über einen Kommunikationspfad 264 kommuniziert. Der Abzweigungszieladdierer empfängt auch den ATAG-Registerwert (welcher die Adresse der ersten Anweisung in der Zeile ist) (224) über einen Kommunikationspfad 268, und einen Versatzwert von einem AOFFSET-Register 272 über einen Kommunikationspfad 276. Das AOFFSET-Register 272 empfängt den 26-Bit-Versatzwerts von der Abzweigungsanweisung über einen Kommunikationspfad 280 und unterzieht Bits [17:2] des Versatzwert einer Vorzeichenerweiterungsfunktion in einer Vorzeichenerweiterungsschaltung 284 (wenn erforderlich) vor dem Weiterleiten des Versatzwertes zu einem Abzweigungszieladdierer 260. Das AOFFSET-Register 272 kommuniziert auch den 26-Bit-Versatzwert zu einem Multiplexer 288, welcher auch Bits [27:2] der Abzweigungszieladresse, die von einem Abzweigungszieladdierer 260 berechnet worden sind, über einen Kommunikationspfad 292 empfängt. Der Multiplexer 288 ermöglicht demnach das Ersetzen von Bits [27:2] der berechneten Abzweigungszieladresse durch den in dem AOFFSET-Register 272 gespeicherten Versatzwert.
  • Die Ausgangsgröße des Abzweigungszieladdierers 260 wird zu einem Eingang eines Multiplexers 288 kommuniziert. Der andere Eingang zum Multiplexer 288 ist eine Abzweigungszieladresse von einer JUMP-Anweisung oder JUMP-REGISTER-Anweisung, die über einen Kommunikationspfad 296, der an eine Universalregisterdatei gekoppelt ist, empfangen wird. Demnach wird die ausgewählte Abzweigungszieladresse von dem Abzweigungszieladdierer 260 ausgegeben (möglicherweise modifiziert durch den Multiplexer 288), solange nicht die Abzweigung durch eine JUMP- oder JUMP-REGISTER-Anweisung verursacht worden ist, in welchem Fall die durch das geeignete Register spezifizierte Adresse bevorzugt werden wird.
  • Der Grund für den spezifischen Aufbau der Abzweigungszieladressberechnungsschaltung erwächst aus der Art, in der die Abzweigungszieladressen aus den unterschiedlichen Arten von Abzweigungsanweisungen berechnet werden, nämlich einer regulären Abzweigung, JUMP und JUMP-REGISTER. Für eine reguläre Abzweigungsanweisung werden der relative Verzögerungsregisterwert, der ATAG-Registerwert, und der Versatzwert zusammenaddiert zum Bilden der Abzweigungszieladresse; für eine JUMP-Anweisung werden die ATAG- und REL DLY-Registerwerte addiert und der Versatzwert wird mit der Summe verknüpft; und für eine JUMP-REGISTER- Anweisung wird der Registerwert von dem Kommunikationspfad 296 verwendet für die Abzweigungszieladresse.
  • Die Werte von dem ATAG-Register 227 und dem REL DLY-Register 254 werden auch zu einem Rücksprungadressenaddierer 300 kommuniziert. Der Rücksprungadressenaddierer 300 wird verwendet zum Berechnen der Rücksprungadresse, wenn eine Abzweigung zu dem Ausführen einer Subroutine führt. Nachdem die Subroutine beendet worden ist, ist es wünschenswert, unmittelbar zu der Anweisung zurückzukehren, die der Anweisung folgt, welche jene aufgerufen hatte. Demnach addiert der Rücksprungadressenaddierer 300 +1 zu der Addition des Tag, Index und der relativen Verzögerung, um die Adresse der Anweisung zu produzieren, die dem Verzögerungsschlitz der Abzweigungsanweisung folgt, welche die Subroutine aufgerufen hat. Die Rücksprungadresse wird auf einem Kommunikationspfad 304 ausgegeben.
  • 9 zeigt die Ausführungsstufen bzw. E-Stufen und die Zurückschreibestufen bzw. W-Stufen der Pipeline. Die Inhalte des ATAG-Registers 227 werden zu einem ETAG-Register 318 über einen Kommunikationspfad 308 kommuniziert und zu einer Vergleichsschaltung 341 über einen Kommunikationspfad 309, die Inhalte des RELDLY-Registers 254 werden zu einem E_REL_DLY-Register 322 über einen Kommunikationspfad 312 kommuniziert, die berechnete Rücksprungadresse von dem Rücksprungadressenaddierer 300 wird über ein Verbindungswertregister (LNVAL)-Register 326 über den Kommunikationspfad 304 kommuniziert und die ausgewählte Abzweigungszieladresse von dem Multiplexer 289 wird zu einem BR_TARG-Register 330 über einen Kommunikationspfad 314 kommuniziert. Ein EPC-Register 334 speichert die Real-Adresse der Anweisung, das Programm wird überlagert, um in einer E-Stufe ausgeführt zu werden, und ein ASID-Register speichert das programmgesteuerte ASID der Anweisung, das gemeinsam mit einem Kohärenzwert (c[2:0]) auszuführen ist, welcher üblicherweise anzeigt, ob die durch die Anweisung verwendeten Daten cache-fähig sind oder nicht.
  • Das ASID und das in dem ETAG-Register 318 gespeicherte Tag (entsprechend der geholten Anweisung), werden verglichen mit ASID und Tag von dem ASID-Register 338 und dem EPC-Register 334 (entsprechend der Anweisung, die tatsächlich auszuführen angenommen wird (durch eine Vergleichsschaltung 339 zum Bestimmen, ob die tatsächliche Anweisung, die auszuführen erwartet wird (wo das Programm sein sollte) tatsächlich die von dem Anweisungs-Cache geholte Anweisung ist. Wenn die Werte nicht übereinstimmen, wird ein Cache-Verlustsignal bereitgestellt auf einen Kommunikationspfad 340.
  • In dieser Zeit entspricht der Wert in dem ATAG-Register 227 der Teile, die die vorhergesagte Abzweigungszielanweisung enthält, wohingegen der Wert im BR_TARG-Register 330 der tatsächlichen Abzweigungszieladresse entspricht. Demnach werden der Index und das Bestimmungsortfeld (vorhergesagte Abzweigungszieladresse), die von dem ATAG-Register 227 über den Kommunikationspfad 309 empfangen worden sind, verglichen mit der von dem BT_TARG-Register 330 über einen Kommunikationspfad 343 empfangenen berechneten Abzweigungszieladresse durch eine Vergleichsschaltung 341 zum Bestimmen, ob die tatsächliche Abzweigungszielanweisung, die auszuführen erwartet wird, der von dem Anweisungs-Cache geholten Vorhersageabzweigungszielanweisung entspricht. Wenn die Werte nicht übereinstimmen, wird ein Abzweigungs-Cache-Verlust-Signal (Abzweigungsfehlvorhersage) auf einem Kommunikationspfad 345 bereitgestellt.
  • Der Wert im EPC-Register 334 wird zu einem WPC-Register 354 in der Zurückschreibe-Stufe der Pipeline kommuniziert und zu einem Eingang eines Multiplexers 362 über einen Kommunikationspfad 358. Der andere Eingang zu dem Multiplexer 362 empfängt den Wert im WPC-Register 354 (der Ursprungswert des EPC-Registers 334 verzögert um einen Zyklus) über einen Kommunikationspfad 366. Der Multiplexer 350 wählt einen dieser Werte aus und kommuniziert den ausgewählten Wert zu einem Eingang eines EPC-Addierers 350. Der EPC-Addierer 350 ist zuständig für das Aktualisieren des wertes von dem EPC-Register 334 während des Normalbetriebs. Der Wert des EPC-Registers 334 wird gewöhnlich ausgewählt während des Normalbetriebs und der Wert des WPC-Registers 354 wird ausgewählt zum Ausführen der Verarbeitung.
  • Der andere Eingang zum EPC-Addierer 350 ist mit einem Multiplexer 366 gekoppelt. Eine Eingangsgröße des Multiplexers 366 ist die Zahl der gültigen Anweisungen, die von dem Ausgaberegister 18 ausgegeben worden sind und die andere Eingangsgröße ist ein Ausnahmeeinstellwert 369 (–1 bis +3). während des Normalbetriebs wird der Wert vom EPC-Register 334 um die Zahl gültiger, vom Ausgaberegister 18 ausgegebener, Anweisungen inkrementiert, so dass der Wert im EPC-Register 334 auf die nächste auszuführende Anweisung zeigt. wenn eine Ausnahme auftritt (Falle, Anweisungs-Cache-Verlust etc.), wird der Ausnahmeeinstellwert hinzugefügt zu dem Wert im WPC-Register 354, um die Anweisung anzuzeigen, die die Ausnahme verursacht hat. Der Wert –1 wird verwendet, wenn die Ausnahme durch eine Verzögerungsanweisung verursacht worden ist da es in diesem Fall wünschenswert ist, auf die Abzweigungsanweisung unmittelbar davor zu zeigen. Der Wert, der anzeigt, welche Anweisung die Ausnahme verursacht hat, wird in einem EPC_COP-Register 370 gespeichert, welches neu geladen wird mit ihrem voreingestellten Wert bis ein anderer Ausnahmefall auftritt über den Multiplexer 374. Ein TRAP_BASE-Register 376 speichert eine Adresse, zu der das Programm gehen sollte, wenn eine Ausnahme auftritt und kommuniziert den Wert zu einem Multiplexer 377. Die andere Eingangsgröße des Multiplexers 377 ist ein Rückstellvektorwert. Einer dieser Werte wird ausgewählt und an einen Kommunikationspfad 379 ausgegeben.
  • Ein Multiplexer 380 empfängt den Wert von dem EPC_COP-Register 370 über einen Kommunikationspfad 384, wenn er von einer Ausnahme zurückkehrt, eine Vektoradresse vom Kommunikationspfad 379 auf eine Ausnahmebedingung, die berechnete Abzweigungszieladresse über einen Kommunikationspfad 388 zum Abzweigen, den EPC-Wert von dem Kommunikationspfad 358 zum Halten des EPC-Wertes während ein Anweisungs-Cache verloren gegangen ist oder fehlerhaft war und den Aktualisierungswert EPC über den Kommunikationspfad 396. Der ausgewählte Wert wird auf einem Kommunikationspfad 430 (PC JAM BUS [47:0]) ausgegeben, von welchen Bits [13:2] die Korrekturwerte sind, die der in 7 gezeigten F-Stufenschaltung zugeführt werden zum korrekten Indizieren vom Anweisungs-Cache, Tag-Speicher 34A und Abzweigungsvorhersage-Cache 114.
  • Während des normalen Betriebs wird der aktualisierte EPC-Wert ausgewählt durch den Multiplexer 380 und in das EPC-Register 334 geladen. Wenn ein Abzweigungs-Cache-Ausfall auftritt, wählt der Multiplexer 380 die berechnete Abzweigungszieladresse und kommuniziert die neue Abzweigungszieladresse zum Abzweigungs-Cache 114 über den Kommunikationspfad 160 (7). Die Schreibadresse, die verwendet wird zum Aktualisieren des Abzweigungsvorhersage-Caches 114, wird berechnet durch einen Abzweigungs-Cache-Adressaddierer 400, welcher den Wert im EPC-Register 334 zu dem Wert in E_REL_DLY-Register 322 hinzuaddiert und die Schreibadresse auf einem Kommunikationspfad 404 produziert. Es sollte bemerkt werden, dass der Wert der Bits [3:2] auf dem Kommunikationspfad 404 der Position der Verzögerungsanweisung entspricht und kann als Quellenfeld in dem Abzweigungsvorhersage-Cache-Eintrag verwendet werden. Die verbleibenden Schreibdaten auf dem Kommunikationspfad 168 umfassen Bits [13:2] der berechneten Abzweigungszieladresse, welche der aktualisierte Index ist, und der Bestimmungsortfeldeinträge.
  • GEWERBLICHE ANWENDBARKEIT
  • Während das Obige eine Beschreibung einer bevorzugten Ausführungsform der vorliegenden Erfindung ist, können verschiedenartige Modifikationen verwendet werden, um noch innerhalb des Schutzbereichs der vorliegenden Erfindung zu liegen. Folglich wird der Schutzbereich der vorliegenden Erfindung von den beiliegenden Patentansprüchen bestimmt.
  • In Übereinstimmung mit der vorliegenden Erfindung werden vier Anweisungen immer zur Ausgabe verfügbar gehalten, unabhängig davon, wie viele Anweisungen zuvor ausgegeben worden sind und unbeachtlich der Codeausrichtung oder des Anweisungstyps, und demnach kann eine Anweisungsausgabeoperation glatt ausgeführt werden, so dass die Verarbeitungsgeschwindigkeit verbessert wird.

Claims (11)

  1. Einrichtung zum Verarbeiten einer Anweisung in einem Rechnersystem, umfassend: erste und zweite Anweisungsspeicherschaltungen, wobei jede Anweisungsspeicherschaltung N Anweisungen zur parallelen Ausgabe speichert; eine an die erste Anweisungsspeicherschaltung gekoppelte Anweisungsausgabeschaltung zum Ausgeben von L in der Anweisungsspeicherschaltung gespeicherten Anweisungen, wobei L kleiner oder gleich N ist; und eine an die Anweisungsausgabeschaltung und die ersten und zweiten Anweisungsspeicherschaltungen gekoppelte Anweisungsladeschaltung zum Laden von L Anweisungen von der zweiten Anweisungsspeicherschaltung in die erste Anweisungsspeicherschaltung, nachdem die L Anweisungen von der ersten Anweisungsspeicherschaltung ausgegeben worden sind und bevor fernere Anweisungen von der ersten Anweisungsspeicherschaltung ausgegeben werden; wobei die Anweisungsladeschaltung die L Anweisungen von der zweiten Anweisungsspeicherschaltung in die Positionen lädt, die zuvor von L Anweisungen belegt waren, welche von der ersten Anweisungsspeicherschaltung ausgegeben worden sind.
  2. Einrichtung zum Verarbeiten von Anweisungen in einem Rechnersystem, umfassend: eine Anweisungsspeicherschaltung zum Speichern von N Anweisungen zur parallelen Ausgabe; eine an die Anweisungsspeicherschaltung gekoppelte Anweisungsausgabeschaltung zum Ausgeben von L in der Anweisungsspeicherschaltung gespeicherten Anweisungen, wobei L kleiner oder gleich N ist; eine Anweisungswarteschlange zum Speichern von M Zeilen von N Anweisungen aus einem Anweisungsspeicher; und eine an die Anweisungsspeicherschaltung und die Anweisungswarteschlange gekoppelte Anweisungsladeschaltung zum Laden von L Anweisungen von der Anweisungswarteschlange in die Anweisungsspeicherschaltung, nachdem die L Anweisungen von der Anweisungsspeicherschaltung ausgegeben worden sind und bevor fernere Anweisungen von der Anweisungsspeicherschaltung ausgegeben werden; wobei die Anweisungsladeschaltung die L Anweisungen von der Anweisungswarteschlange in die Positionen lädt, die zuvor von den L Anweisungen belegt waren, welche von der Anweisungsspeicherschaltung ausgegeben worden sind.
  3. Einrichtung nach Anspruch 2, wobei die Anweisungsausgabeschaltung einen Ausgabezeiger umfasst zum Speichern eines Wertes, der Indikativ ist bezüglich eines Ortes einer nächsten in der Anweisungsspeicherschaltung auszugebenden Anweisung.
  4. Einrichtung nach Anspruch 3, wobei der Ausgabezeiger einen Modulo-N-Zähler umfasst.
  5. Einrichtung nach Anspruch 4, wobei die Warteschlange einen Warteschlangenzeiger umfasst zum Speichern eines Wertes, der indikativ ist bezüglich eines Ortes einer von der Warteschlange in die Anweisungsspeichereinheit zu ladenden nächsten Anweisung.
  6. Einrichtung nach Anspruch 5, wobei die Anweisungswarteschlange ferner einen an den Warteschlangenzeiger gekoppelten Multiplexer umfasst zum Auswählen von N Anweisungen aus der Warteschlange und Ausgeben der N ausgewählten Anweisungen zu der Anweisungsspeicherschaltung.
  7. Einrichtung nach Anspruch 6, wobei der Multiplexer die N nächsten aufeinanderfolgenden Anweisungen von dem Warteschlangenzeigerwert auswählt.
  8. Einrichtung nach Anspruch 7, außerdem eine Warteschlangenladeschaltung umfassend zum simultanen Laden von N Anweisungen von dem Anweisungsspeicher in die Anweisungswarteschlange.
  9. Einrichtung nach Anspruch 8, ferner umfassend: einen Taktgeber zum Bereitstellen periodischer Taktimpulse; und wobei die Warteschlangenladeschaltung auf jeden Taktimpuls hin simultan N Anweisungen von dem Anweisungsspeicher in eine leere Zeile in der Anweisungswarteschlange lädt.
  10. Einrichtung nach Anspruch 8, wobei die Warteschlangenladeschaltung eine Ladenverhinderungsschaltung umfasst zum Verhindern des Ladens von Anweisungen von dem Anweisungsspeicher in die Anweisungswarteschlange, wenn es keine leere Zeile in der Warteschlange gibt.
  11. Einrichtung nach Anspruch 2, wobei die Anweisungswarteschlange einen Eingabekommunikationspfad einschließt und ferner eine Warteschlangenumgehungsschaltung umfassend, die an den Eingabekommunikationspfad gekoppelt ist und an die Anweisungsspeicherschaltung zum direkten Kommunizieren von Anweisungen von dem Eingabekommunikationspfad zur Anweisungsspeicherschaltung.
DE69433621T 1993-12-15 1994-12-15 Geraet zur verarbeitung von befehlen in einem rechnersystem Expired - Lifetime DE69433621T2 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US168744 1993-12-15
US08/168,744 US5604909A (en) 1993-12-15 1993-12-15 Apparatus for processing instructions in a computing system
PCT/JP1994/002112 WO1995016954A1 (fr) 1993-12-15 1994-12-15 Circuit de traitement d'instructions dans un systeme informatique

Publications (2)

Publication Number Publication Date
DE69433621D1 DE69433621D1 (de) 2005-01-27
DE69433621T2 true DE69433621T2 (de) 2005-05-12

Family

ID=22612755

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69433621T Expired - Lifetime DE69433621T2 (de) 1993-12-15 1994-12-15 Geraet zur verarbeitung von befehlen in einem rechnersystem

Country Status (8)

Country Link
US (4) US5604909A (de)
EP (2) EP1320031A3 (de)
JP (1) JP2815237B2 (de)
KR (1) KR100212204B1 (de)
CN (2) CN1267819C (de)
DE (1) DE69433621T2 (de)
HK (1) HK1013153A1 (de)
WO (1) WO1995016954A1 (de)

Families Citing this family (76)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5734874A (en) * 1994-04-29 1998-03-31 Sun Microsystems, Inc. Central processing unit with integrated graphics functions
US5778250A (en) * 1994-05-23 1998-07-07 Cirrus Logic, Inc. Method and apparatus for dynamically adjusting the number of stages of a multiple stage pipeline
WO1996012229A1 (en) 1994-10-14 1996-04-25 Silicon Graphics, Inc. Indexing and multiplexing of interleaved cache memory arrays
WO1996012231A1 (en) 1994-10-14 1996-04-25 Silicon Graphics, Inc. A translation buffer for detecting and preventing conflicting virtual addresses from being stored therein
US5991869A (en) * 1995-04-12 1999-11-23 Advanced Micro Devices, Inc. Superscalar microprocessor including a high speed instruction alignment unit
GB9521955D0 (en) * 1995-10-26 1996-01-03 Sgs Thomson Microelectronics Cache memory
GB9521977D0 (en) * 1995-10-26 1996-01-03 Sgs Thomson Microelectronics Cache memory
GB9521980D0 (en) * 1995-10-26 1996-01-03 Sgs Thomson Microelectronics Branch target buffer
US6216213B1 (en) * 1996-06-07 2001-04-10 Motorola, Inc. Method and apparatus for compression, decompression, and execution of program code
WO1998002798A1 (en) * 1996-07-16 1998-01-22 Advanced Micro Devices, Inc. A superscalar microprocesser including a high speed instruction alignment unit
DE19630861A1 (de) * 1996-07-31 1998-02-05 Philips Patentverwaltung Datenverarbeitungseinrichtung mit einem Mikroprozessor und einer zusätzlichen Recheneinheit
US5859992A (en) * 1997-03-12 1999-01-12 Advanced Micro Devices, Inc. Instruction alignment using a dispatch list and a latch list
US6157999A (en) * 1997-06-03 2000-12-05 Motorola Inc. Data processing system having a synchronizing link stack and method thereof
US5935238A (en) * 1997-06-19 1999-08-10 Sun Microsystems, Inc. Selection from multiple fetch addresses generated concurrently including predicted and actual target by control-flow instructions in current and previous instruction bundles
US5964869A (en) * 1997-06-19 1999-10-12 Sun Microsystems, Inc. Instruction fetch mechanism with simultaneous prediction of control-flow instructions
US6157988A (en) * 1997-08-01 2000-12-05 Micron Technology, Inc. Method and apparatus for high performance branching in pipelined microsystems
US6185676B1 (en) * 1997-09-30 2001-02-06 Intel Corporation Method and apparatus for performing early branch prediction in a microprocessor
US6243805B1 (en) * 1998-08-11 2001-06-05 Advanced Micro Devices, Inc. Programming paradigm and microprocessor architecture for exact branch targeting
US6289442B1 (en) * 1998-10-05 2001-09-11 Advanced Micro Devices, Inc. Circuit and method for tagging and invalidating speculatively executed instructions
US6442674B1 (en) * 1998-12-30 2002-08-27 Intel Corporation Method and system for bypassing a fill buffer located along a first instruction path
US6957327B1 (en) * 1998-12-31 2005-10-18 Stmicroelectronics, Inc. Block-based branch target buffer
US6185672B1 (en) * 1999-02-19 2001-02-06 Advanced Micro Devices, Inc. Method and apparatus for instruction queue compression
EP1050810A1 (de) * 1999-05-03 2000-11-08 STMicroelectronics SA Rechnersystem mit mehreren funktionellen Einheiten
US6647490B2 (en) 1999-10-14 2003-11-11 Advanced Micro Devices, Inc. Training line predictor for branch targets
US6546478B1 (en) 1999-10-14 2003-04-08 Advanced Micro Devices, Inc. Line predictor entry with location pointers and control information for corresponding instructions in a cache line
US6636959B1 (en) 1999-10-14 2003-10-21 Advanced Micro Devices, Inc. Predictor miss decoder updating line predictor storing instruction fetch address and alignment information upon instruction decode termination condition
EP1224539A1 (de) * 1999-10-14 2002-07-24 Advanced Micro Devices, Inc. Vorrichtung und verfahren zum zwischenspeichern von ausrichtungsinformation
US6591361B1 (en) 1999-12-28 2003-07-08 International Business Machines Corporation Method and apparatus for converting data into different ordinal types
US7149883B1 (en) * 2000-03-30 2006-12-12 Intel Corporation Method and apparatus selectively to advance a write pointer for a queue based on the indicated validity or invalidity of an instruction stored within the queue
US6859862B1 (en) 2000-04-07 2005-02-22 Nintendo Co., Ltd. Method and apparatus for software management of on-chip cache
US6857061B1 (en) * 2000-04-07 2005-02-15 Nintendo Co., Ltd. Method and apparatus for obtaining a scalar value directly from a vector register
US6701424B1 (en) * 2000-04-07 2004-03-02 Nintendo Co., Ltd. Method and apparatus for efficient loading and storing of vectors
US6484228B2 (en) 2000-04-19 2002-11-19 Motorola, Inc. Method and apparatus for data compression and decompression for a data processor system
DE10043003A1 (de) * 2000-09-01 2002-03-14 Infineon Technologies Ag Programmgesteuerte Einheit
US7139898B1 (en) * 2000-11-03 2006-11-21 Mips Technologies, Inc. Fetch and dispatch disassociation apparatus for multistreaming processors
US7035998B1 (en) 2000-11-03 2006-04-25 Mips Technologies, Inc. Clustering stream and/or instruction queues for multi-streaming processors
JP2002318687A (ja) * 2001-04-18 2002-10-31 Fujitsu Ltd 情報処理装置及び計算機システム
JP3851235B2 (ja) * 2002-06-28 2006-11-29 富士通株式会社 分岐予測装置および分岐予測方法
US7131017B2 (en) * 2002-08-16 2006-10-31 Carnegie Mellon University Programmable pipeline fabric having mechanism to terminate signal propagation
US6836833B1 (en) * 2002-10-22 2004-12-28 Mips Technologies, Inc. Apparatus and method for discovering a scratch pad memory configuration
US7539879B2 (en) * 2002-12-04 2009-05-26 Nxp B.V. Register file gating to reduce microprocessor power dissipation
US20040111594A1 (en) * 2002-12-05 2004-06-10 International Business Machines Corporation Multithreading recycle and dispatch mechanism
JP3855270B2 (ja) * 2003-05-29 2006-12-06 ソニー株式会社 アンテナ実装方法
US7281120B2 (en) * 2004-03-26 2007-10-09 International Business Machines Corporation Apparatus and method for decreasing the latency between an instruction cache and a pipeline processor
US7363468B2 (en) * 2004-11-18 2008-04-22 International Business Machines Corporation Load address dependency mechanism system and method in a high frequency, low power processor system
US7426631B2 (en) * 2005-02-02 2008-09-16 International Business Machines Corporation Methods and systems for storing branch information in an address table of a processor
DE102005009083B4 (de) * 2005-02-28 2007-05-10 Infineon Technologies Ag Multithread-Prozessor mit einer Synchronisationseinheit und Verfahren zum Betreiben eines solchen
US20060229638A1 (en) * 2005-03-29 2006-10-12 Abrams Robert M Articulating retrieval device
US7461237B2 (en) * 2005-04-20 2008-12-02 Sun Microsystems, Inc. Method and apparatus for suppressing duplicative prefetches for branch target cache lines
US7350056B2 (en) * 2005-09-27 2008-03-25 International Business Machines Corporation Method and apparatus for issuing instructions from an issue queue in an information handling system
US20070198812A1 (en) * 2005-09-27 2007-08-23 Ibm Corporation Method and apparatus for issuing instructions from an issue queue including a main issue queue array and an auxiliary issue queue array in an information handling system
US7711934B2 (en) * 2005-10-31 2010-05-04 Mips Technologies, Inc. Processor core and method for managing branch misprediction in an out-of-order processor pipeline
US7734901B2 (en) * 2005-10-31 2010-06-08 Mips Technologies, Inc. Processor core and method for managing program counter redirection in an out-of-order processor pipeline
US20070204139A1 (en) 2006-02-28 2007-08-30 Mips Technologies, Inc. Compact linked-list-based multi-threaded instruction graduation buffer
US7721071B2 (en) * 2006-02-28 2010-05-18 Mips Technologies, Inc. System and method for propagating operand availability prediction bits with instructions through a pipeline in an out-of-order processor
US20080016326A1 (en) 2006-07-14 2008-01-17 Mips Technologies, Inc. Latest producer tracking in an out-of-order processor, and applications thereof
US7370178B1 (en) * 2006-07-14 2008-05-06 Mips Technologies, Inc. Method for latest producer tracking in an out-of-order processor, and applications thereof
US7657708B2 (en) * 2006-08-18 2010-02-02 Mips Technologies, Inc. Methods for reducing data cache access power in a processor using way selection bits
US7650465B2 (en) 2006-08-18 2010-01-19 Mips Technologies, Inc. Micro tag array having way selection bits for reducing data cache access power
US7647475B2 (en) * 2006-09-06 2010-01-12 Mips Technologies, Inc. System for synchronizing an in-order co-processor with an out-of-order processor using a co-processor interface store data queue
US8032734B2 (en) * 2006-09-06 2011-10-04 Mips Technologies, Inc. Coprocessor load data queue for interfacing an out-of-order execution unit with an in-order coprocessor
US20080082793A1 (en) * 2006-09-29 2008-04-03 Mips Technologies, Inc. Detection and prevention of write-after-write hazards, and applications thereof
US8078846B2 (en) 2006-09-29 2011-12-13 Mips Technologies, Inc. Conditional move instruction formed into one decoded instruction to be graduated and another decoded instruction to be invalidated
US7594079B2 (en) 2006-09-29 2009-09-22 Mips Technologies, Inc. Data cache virtual hint way prediction, and applications thereof
US9946547B2 (en) * 2006-09-29 2018-04-17 Arm Finance Overseas Limited Load/store unit for a processor, and applications thereof
US7711935B2 (en) 2007-04-30 2010-05-04 Netlogic Microsystems, Inc. Universal branch identifier for invalidation of speculative instructions
US8127115B2 (en) * 2009-04-03 2012-02-28 International Business Machines Corporation Group formation with multiple taken branches per group
US9354887B2 (en) * 2010-06-28 2016-05-31 International Business Machines Corporation Instruction buffer bypass of target instruction in response to partial flush
US9645866B2 (en) * 2010-09-20 2017-05-09 Qualcomm Incorporated Inter-processor communication techniques in a multiple-processor computing platform
US9280398B2 (en) 2012-01-31 2016-03-08 International Business Machines Corporation Major branch instructions
US9229722B2 (en) 2012-01-31 2016-01-05 International Business Machines Corporation Major branch instructions with transactional memory
US9304932B2 (en) 2012-12-20 2016-04-05 Qualcomm Incorporated Instruction cache having a multi-bit way prediction mask
WO2015061648A1 (en) * 2013-10-25 2015-04-30 Advanced Micro Devices, Inc. Bandwidth increase in branch prediction unit and level 1 instruction cache
US10216520B2 (en) * 2014-10-06 2019-02-26 Via Technologies, Inc. Compressing instruction queue for a microprocessor
JP7004905B2 (ja) * 2018-03-26 2022-01-21 富士通株式会社 演算処理装置及び演算処理装置の制御方法
CN109101276B (zh) 2018-08-14 2020-05-05 阿里巴巴集团控股有限公司 在cpu中执行指令的方法

Family Cites Families (39)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS50152629A (de) * 1974-05-27 1975-12-08
JPS5729153A (en) * 1980-07-29 1982-02-17 Fujitsu Ltd Control system for instruction processing order
JPS57152046A (en) * 1981-03-13 1982-09-20 Mitsubishi Electric Corp Instruction buffer controlling method
JPS58149548A (ja) * 1982-03-02 1983-09-05 Hitachi Ltd メモリ制御方式
EP0109655B1 (de) * 1982-11-17 1991-07-24 Nec Corporation Anordnung zum Vorabholen von Befehlen mit Vorhersage einer Verzweigungszieladresse
JPS5991549A (ja) * 1982-11-17 1984-05-26 Nec Corp 命令バツフアへの命令語格納方式
DE3305693A1 (de) * 1983-02-18 1984-08-30 Nixdorf Computer Ag Schaltungsanordnung zur zwischenspeicherung von befehlsworten
US4635194A (en) * 1983-05-02 1987-01-06 International Business Machines Corporation Instruction buffer bypass apparatus
AU553416B2 (en) * 1984-02-24 1986-07-17 Fujitsu Limited Pipeline processing
US4682284A (en) * 1984-12-06 1987-07-21 American Telephone & Telegraph Co., At&T Bell Lab. Queue administration method and apparatus
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
IL81762A0 (en) * 1986-04-11 1987-10-20 Symbolics Inc Instruction prefetch unit
EP0312764A3 (de) * 1987-10-19 1991-04-10 International Business Machines Corporation Datenprozessor mit mehrfachen Ausführungseinheiten zur parallelen Ausführung von mehreren Befehlsklassen
US5247628A (en) * 1987-11-30 1993-09-21 International Business Machines Corporation Parallel processor instruction dispatch apparatus with interrupt handler
JPH0769821B2 (ja) * 1988-03-04 1995-07-31 日本電気株式会社 情報処理装置におけるバイパスライン制御方式
JP2810068B2 (ja) * 1988-11-11 1998-10-15 株式会社日立製作所 プロセッサシステム、コンピュータシステム及び命令処理方法
JPH0778735B2 (ja) * 1988-12-05 1995-08-23 松下電器産業株式会社 キャッシュ装置と命令読出し装置
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
EP0394624B1 (de) * 1989-04-24 1997-06-18 International Business Machines Corporation Mehrfachsequenzprozessorsystem
CA2016068C (en) * 1989-05-24 2000-04-04 Robert W. Horst Multiple instruction issue computer architecture
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
JPH03139726A (ja) * 1989-10-26 1991-06-13 Hitachi Ltd 命令読出し制御方式
US5121502A (en) * 1989-12-20 1992-06-09 Hewlett-Packard Company System for selectively communicating instructions from memory locations simultaneously or from the same memory locations sequentially to plurality of processing
DE69030648T2 (de) * 1990-01-02 1997-11-13 Motorola Inc Verfahren zum sequentiellen Vorabruf von 1-Wort-, 2-Wort oder 3-Wort-Befehlen
US5185868A (en) * 1990-01-16 1993-02-09 Advanced Micro Devices, Inc. Apparatus having hierarchically arranged decoders concurrently decoding instructions and shifting instructions not ready for execution to vacant decoders higher in the hierarchy
US5283873A (en) * 1990-06-29 1994-02-01 Digital Equipment Corporation Next line prediction apparatus for a pipelined computed system
EP0477598A2 (de) * 1990-09-26 1992-04-01 Siemens Aktiengesellschaft Befehlswerk für einen n Prozessorelemente aufweisenden Prozessor
US5299321A (en) * 1990-12-18 1994-03-29 Oki Electric Industry Co., Ltd. Parallel processing device to operate with parallel execute instructions
JP2877531B2 (ja) * 1991-02-04 1999-03-31 株式会社東芝 並列演算処理装置
JPH04275628A (ja) * 1991-03-01 1992-10-01 Mitsubishi Electric Corp 演算処理装置
US5414822A (en) * 1991-04-05 1995-05-09 Kabushiki Kaisha Toshiba Method and apparatus for branch prediction using branch prediction table with improved branch prediction effectiveness
JP2642529B2 (ja) * 1991-04-30 1997-08-20 株式会社東芝 並列プロセッサーの命令分配処理装置
JPH052484A (ja) * 1991-06-24 1993-01-08 Mitsubishi Electric Corp スーパースカラプロセツサ
US5367703A (en) * 1993-01-08 1994-11-22 International Business Machines Corporation Method and system for enhanced branch history prediction accuracy in a superscalar processor system
CA2107046A1 (en) * 1993-01-08 1994-07-09 James Allan Kahle Method and system for increased instruction dispatch efficiency in superscalar processor system
JP2744882B2 (ja) * 1993-01-15 1998-04-28 インターナショナル・ビジネス・マシーンズ・コーポレイション キューにより命令の実行を制御する装置及び方法
US5680564A (en) * 1995-05-26 1997-10-21 National Semiconductor Corporation Pipelined processor with two tier prefetch buffer structure and method with bypass
US5835746A (en) * 1997-04-21 1998-11-10 Motorola, Inc. Method and apparatus for fetching and issuing dual-word or multiple instructions in a data processing system
US6065110A (en) * 1998-02-09 2000-05-16 International Business Machines Corporation Method and apparatus for loading an instruction buffer of a processor capable of out-of-order instruction issue

Also Published As

Publication number Publication date
EP0690373A1 (de) 1996-01-03
US20030033505A1 (en) 2003-02-13
US6691221B2 (en) 2004-02-10
KR100212204B1 (ko) 1999-08-02
CN1104680C (zh) 2003-04-02
US5604909A (en) 1997-02-18
CN1117765A (zh) 1996-02-28
CN1267819C (zh) 2006-08-02
KR960701400A (ko) 1996-02-24
EP0690373A4 (de) 1997-05-14
JP2815237B2 (ja) 1998-10-27
WO1995016954A1 (fr) 1995-06-22
CN1492319A (zh) 2004-04-28
EP0690373B1 (de) 2004-03-17
EP1320031A3 (de) 2008-12-17
HK1013153A1 (en) 1999-08-13
EP1320031A2 (de) 2003-06-18
US5954815A (en) 1999-09-21
DE69433621D1 (de) 2005-01-27
US6247124B1 (en) 2001-06-12

Similar Documents

Publication Publication Date Title
DE69433621T2 (de) Geraet zur verarbeitung von befehlen in einem rechnersystem
DE2855106C2 (de) Einrichtung zur Durchführung von bedingten Verzweigungen
DE69932066T2 (de) Mechanismus zur "store-to-load forwarding"
DE69534113T2 (de) Kompression der Befehlswörter eines Rechners
DE69635881T2 (de) VLIW-Befehlsprozessor mit variabler Wortlänge
DE69738188T2 (de) Verfahren und apparat für eine erhöhte genauigkeit bei der verzweigungsvorhersage in einem superskalaren mirkroprozessor
DE69534148T2 (de) Rechnersystem zur Ausführung von Verzweigungsbefehlen
DE69133302T2 (de) Registerabbildung in einem einzigen Taktzyklus
DE10084556B4 (de) Optimierte Ausführung von statisch sehr wahrscheinlich vorhergesagten Verzweigungsbefehlen
DE69835100T2 (de) Prozessor konfiguriert um vorausschauende resultate von zusammengefassten übertragungs-, vergleichs- und einfachen arithmetischen befehlen zu produzieren
DE102004013676B4 (de) Schaltung in einem Prozessor zur Steuerung einer iterativen Ausführung einer Gruppe von Programmanweisungen
DE19855806A1 (de) Vorrichtung und Verfahren zum Durchführen von Unterprogrammaufruf- und Rücksprungoperationen
DE4206062C2 (de) Pipelineverarbeitung von Instruktionen
DE60009151T2 (de) Vorhersage von datenbeförderung von speicher- zum ladebefehl mit untrainierung
DE69725278T2 (de) Programmierbares system und verfahren zum vorhersagen von verzweigungen für computersysteme
DE4335475A1 (de) Datenverarbeitungseinrichtung mit Cache-Speicher
DE4211245B4 (de) Prozessorsystem in Parallelverarbeitungsbauart und Verfahren zu dessen Steuerung
DE69908175T2 (de) Verbesserte befehlsdekodierung durch paralleldekodierungsalgorithmus
DE4345028A1 (de) Vorrichtung zur Reduzierung von Verzögerungen aufgrund von Verzweigungen
EP0325677B1 (de) Schaltungsanordnung und Steuerverfahren eines Befehlspufferspeichers in einer Datenverarbeitungsanlage
DE4134392C2 (de) Verfahren und Vorrichtung zum Ungültigmachen von Befehlen in Geräten mit Parallelverarbeitung
DE69626263T2 (de) System zur Zuteilung mehrerer Befehle ohne Verzweigungsunterbrechung in einem Pipelineprozessor
DE102019208566A1 (de) Verwalten von Lade- und Speicherinstruktionen für eine Speicherbarrieren- Handhabung
DE1499224C3 (de) Datenverarbeitungsanlage mit Kellerspeichereinrichtungen
DE10303053A1 (de) Registerumbenennung zum Reduzieren einer Umgehung und Erhöhen einer scheinbaren physischen Registergröße

Legal Events

Date Code Title Description
8364 No opposition during term of opposition