DE69904479T2 - Registerumbenennung wobei übertragungsinstruktionen mittels umbenennungsschildernzeichen realisiert werden - Google Patents

Registerumbenennung wobei übertragungsinstruktionen mittels umbenennungsschildernzeichen realisiert werden

Info

Publication number
DE69904479T2
DE69904479T2 DE69904479T DE69904479T DE69904479T2 DE 69904479 T2 DE69904479 T2 DE 69904479T2 DE 69904479 T DE69904479 T DE 69904479T DE 69904479 T DE69904479 T DE 69904479T DE 69904479 T2 DE69904479 T2 DE 69904479T2
Authority
DE
Germany
Prior art keywords
register
rename
instruction
unit
structured
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
DE69904479T
Other languages
English (en)
Other versions
DE69904479D1 (de
Inventor
B Witt
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.)
Advanced Micro Devices Inc
Original Assignee
Advanced Micro Devices 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 Advanced Micro Devices Inc filed Critical Advanced Micro Devices Inc
Publication of DE69904479D1 publication Critical patent/DE69904479D1/de
Application granted granted Critical
Publication of DE69904479T2 publication Critical patent/DE69904479T2/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
    • 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
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30054Unconditional branch instructions
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30069Instruction skipping instructions, e.g. SKIP
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/30149Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
    • G06F9/30152Determining start or end of instruction; determining instruction length
    • 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/30181Instruction operation extension or modification
    • 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
    • G06F9/323Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for indirect branch instructions
    • 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
    • G06F9/324Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address using program counter relative addressing
    • 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/3816Instruction alignment, e.g. cache line crossing
    • 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/3818Decoding for concurrent execution
    • G06F9/382Pipelined decoding, e.g. using predecoding
    • 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/3824Operand accessing
    • G06F9/383Operand 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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • G06F9/384Register renaming

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)

Description

    HINTERGRUND DER ERFINDUNG 1. Gebiet der Erfindung
  • Die vorliegende Erfindung betrifft das Gebiet der Prozessoren und insbesondere Registerumbenennungsmechanismen in Prozessoren.
  • 2. Beschreibung der verwandten Technik
  • Bei superskalaren Prozessoren ist man bestrebt, eine hohe Leistung durch Entsenden und Ausführen mehrerer Befehle pro Taktzyklus und durch Durchführen von Operationen in der kürzestmöglichen Taktzykluszeit im Einklang mit der Konfiguration zu erreichen. In dem Umfang, in dem ein gegebener Prozessor beim Entsenden und/oder Ausführen mehrerer Befehle pro Taktzyklus erfolgreich ist, ist eine hohe Leistung realisierbar.
  • Ein bei Prozessoren häufig angewandtes Verfahren zum Erhöhen der Anzahl von Befehlen, die gleichzeitig ausgeführt werden können, ist die spekulative Ausführung (z. B. relativ zu der von dem Programm angegebenen Ausführungs-Reihenfolge ungeregeltes Ausführen von Befehlen oder Ausführen eines Befehls im Anschluss an vorhergesagte Verzweigungen). Häufig sind Befehle, die unmittelbar auf einen speziellen Befehl folgen, von diesem speziellen Befehl abhängig (d. h. das Ergebnis des speziellen Befehls wird von den unmittelbar nachfolgenden Befehlen verwendet). Somit sind die unmittelbar nachfolgenden Befehle möglicherweise nicht gleichzeitig mit dem speziellen Befehl ausführbar. Befehle, die in der Programm-Reihenfolge weiter von dem speziellen Befehl entfernt sind, sind jedoch möglicherweise nicht von dem speziellen Befehl abhängig und können daher gleichzeitig mit dem speziellen Befehl ausgeführt werden. Ferner kann eine spekulative Ausführung eines Befehls im Anschluss an falsch vorhergesagte Verzweigungen die Anzahl von Befehlen erhöhen, die gleichzeitig ausgeführt werden, wenn die Verzweigung korrekt vorhergesagt wird.
  • Eine ungeregelte Ausführung führt zu einer anderen Art der Abhängigkeit, die häufig als "Anti-Abhängigkeit" bezeichnet wird. Generell treten Anti-Abhängigkeiten auf, wenn ein Befehl im Anschluss an einen speziellen Befehl ein Register aktualisiert, auf das der spezielle Befehl entweder zugreift (ausliest) oder das der spezielle Befehl aktualisiert (schreibt). Der spezielle Befehl muss aus dem Register auslesen oder in das Register einschreiben, bevor der nachfolgende spezielle Befehl zur korrekten Durchführung des Programms in das Register einschreibt. Generell kann ein Befehl einen oder mehrere Quellenoperanden aufweisen (die von den Befehlen zu verarbeitende Eingabewerte sind), die in einem Speicher oder in Registern gespeichert werden können. Ein Befehl kann ferner einen oder mehrere Zielorte aufweisen (die Speicherstellen zum Speichern von Ergebnissen der Befehlsausführung sind), die ebenfalls im Speicher oder in Registern gespeichert werden können.
  • Ein Verfahren zum Eliminieren von Anti-Abhängigkeiten zwischen Quellen- und Zielregistern von Befehlen und somit zum Ermöglichen einer größeren ungeregelten Ausführung ist die Registerumbenennung. Bei der Registerumbenennung wird ein Pool von Umbenennungsregistern von dem Prozessor implementiert. Die Anzahl von Umbenennungsregistern in dem Pool ist größer als die der Register, die von der von dem Prozessor verwendeten Befehlssatzarchitektur definiert sind ("strukturierte Register"). Das Zielregister für einen speziellen Befehl (d. h. das mit dem Ausführungsergebnis des Befehls geschriebene strukturierte Register) wird durch Zuordnen eines der Umbenennungsregister zu dem strukturierten Register "umbenannt". Der Wert des strukturierten Registers vor der Ausführung des speziellen Befehls bleibt in dem zuvor dem strukturierten Register zugeordneten Register gespeichert.
  • Wenn ein vorangegangener Befehl das strukturierte Register liest, wird das zuvor zugeordnete Umbenennungsregister gelesen. Wenn ein vorangegangener Befehl in das strukturierte Register schreibt, wird in das zuvor zugeordnete Umbenennungsregister geschrieben. Entsprechend können die Umbenennungsregister in einer beliebigen Reihenfolge aktualisiert werden.
  • Die Registerumbenennung kann auch eine spekulative Aktualisierung von Registern aufgrund der Befehlsausführung im Anschluss an einen vorhergesagten Verzweigungsbefehl ermöglichen. Vorangegangene Umbenennungen können beibehalten werden, bis der Verzweigungsbefehl aufgelöst ist. Wenn der Verzweigungsbefehl falsch vorhergesagt wird, können die vorangegangenen Umbenennungen verwendet werden, um den Zustand des Prozessors so wiederherzustellen, wie er zum Zeitpunkt des falsch vorhergesagten Verzweigungsbefehls gewesen ist.
  • Obwohl die Registerumbenennung zum Eliminieren von Anti-Abhängigkeiten sinnvoll ist, können echte Abhängigkeiten (bei denen ein nachfolgender Befehl das Ergebnis eines speziellen Befehls verwendet) nicht durch Registerumbenennung eliminiert werden. Wenn ein spezielles strukturiertes Register in einer Codesequenz wiederholt als Zielregister und nachfolgend als Quellenregister verwendet wird, bietet die Registerumbenennung keine große Hilfe bei der Ermöglichung der gleichzeitigen Ausführung von Befehlen. Die x86-Befehlssatzarchitektur (auch als IA-32 oder APX bezeichnet) bildet z. B. ein Stapelzeigerregister (ESP), das häufig sowohl als Quelle als auch als Zielort für eine Vielzahl von Befehlen verwendet wird. Das Stapelzeigerregister bildet den oberen Teil eines in einem Hauptspeicher aufrechterhaltenen Stapelregisters, in dem zahlreiche von den Befehlen betriebene Operanden gespeichert sind. Aufgrund der relativ kleinen Anzahl von Registern in der x86-Befehlssatzarchitektur erfolgen Bezugnahmen auf das Stapelregister und Manipulationen des Stapelregisters typischerweise recht häufig. Entsprechend ist das Stapelzeigerregister häufig sowohl ein Quellenregister als auch ein Zielregister für Befehle.
  • Ferner ist ein zweites strukturiertes Register in dem x86-Befehlssatz das Basiszeiger- (EBP-) Register. Das Basiszeigerregister wird häufig zum Definieren eines Speicherplatzes in dem Stapelregister verwendet, der die Basisadresse für eine Vielzahl von von einer speziellen Programmroutine verwendeten Operanden ist. Mit anderen Worten: die von der Routine verwendeten Operanden werden an Speicherplätzen zwischen dem von dem Basiszeiger identifizierten Speicherplatz und den von dem Stapelzeiger identifizierten Speicherplätzen gespeichert. Entsprechend erfolgen Übertragungen zwischen Basiszeiger- und Stapelzeigerregistern häufig in einem Programm (z. B. am Eingang und Ausgang einer Vielzahl von Subroutinen innerhalb des Programms).
  • Es wird daher ein effektiveres Verfahren zum Erhöhen der Anzahl von gleichzeitigen Ausführungen in superskalaren Prozessoren, bei denen eine Registerumbenennung angewandt wird, gewünscht.
  • Vor dem Überblick über die vorliegende Erfindung werden zwei Dokumente zum Stand der Technik aufgeführt.
  • In EP-A-0 518 469 ist ein System beschrieben, bei dem Übertragungsbefehle durch Verändern der Registerabbildung in einer Speichertabelle, die eine Zuordnung zwischen realen und logischen Registern durchführt, ohne tatsächliche Datenübertragung zwischen den Registern ausgeführt werden. Die Datenverarbeitungseinrichtung weist reale Register und Vorrichtungen zum veränderlichen Zuordnen von realen Registern zu logischen Registern auf. Eine weitere Tabelle ist zum Speichern einer Abbildung der Zuordnung zwischen realen Registern und Speicheradressen vorgesehen. Befehle werden hinsichtlich ihrer Registerbenutzung und Abhängigkeiten analysiert, und Befehle mit Übertragungen von einem Register zu einem anderen werden durch Verändern der Zuordnung zwischen den realen Registern und den logischen Registern ausgeführt: im Falle einer ÜBERTRAGUNG wird das Zielregister auf dem gleichen realen Register abgebildet wie der Quellenregisterbezeichner.
  • In EP-A 0 851 343 ist ein Prozessor für Gleitkommabefehle mit einer Stapelregisterdatei und einer Referenztabelle zum Abbilden virtueller Register auf reale Register beschrieben, und es wird ein Gleitkomma-Austauschbefehl zum Austauschen der Inhalte zweier Gleitkommaregister vorgeschlagen. Das System weist eine Decodiereinheit zum Empfangen der Befehle von der Befehlseinheit auf. Die Decodiereinheit decodiert den Befehl und bestimmt einen Befehlstyp einschließlich eines Austauschs. Dieser Befehl wird durch Verändern der Zuordnung zwischen logischen und realen Registern und nicht durch Übertragen der Registerinhalte durchgeführt. Eine Logikeinheit ist mit der Referenztabelle und der Decodiereinheit gekoppelt. Die Logikeinheit aktualisiert die Referenztabelle für jeden von der Decodiereinheit kommenden Austauschbefehl. Die realen Register behalten den gleichen Inhalt für jeden Austauschbefehl bei. Ein Stapelzeiger zeigt auf eines der virtuellen Register als oberen Teil der realen Stapelregister. Eine Referenztabelle bildet die virtuellen Register auf die realen Register ab. Eine Steuereinheit empfängt die Tabelle von der Logikeinheit und aktualisiert die Referenztabelle mittels der aktualisierten Tabelle.
  • ZUSAMMENFASSENDER ÜBERBLICK ÜBER DIE ERFINDUNG
  • Gemäß einem ersten Aspekt der vorliegenden Erfindung ist eine Vorrichtung zum Durchführen einer Registerumbenennung nach Anspruch 1 vorgesehen. Diese Vorrichtung weist auf:
  • eine Lookahead-Einheit zum Abtasten von Befehlen vor einer Zuordnung der Registerumbenennungen zu den Befehlen zum Detektieren eines Übertragungsbefehls mit einem ersten strukturierten Register als Quellenregister und einem zweiten strukturierten Register als Zielregister, wobei ein strukturiertes Register von einer Befehlssatzarchitektur definiert ist; und
  • eine mit der Lookahead-Einheit gekoppelte Umbenennungskennzeichnungseinheit, die zum Speichern mehrerer Umbenennungskennzeichen, einschließlich eines dem ersten strukturierten Register entsprechenden ersten Umbenennungskennzeichens und eines dem zweiten strukturierten Register entsprechenden zweiten Umbenennungskennzeichens vorgesehen ist, wobei das erste Umbenennungskennzeichen ein dem ersten strukturierten Register zugeordnetes erstes Umbenennungsregister identifiziert und das zweite Umbenennungskennzeichen ein dem zweiten strukturierten Register zugeordnetes Umbenennungsregister identifiziert, wobei Umbenennungsregister von der Vorrichtung implementiert sind;
  • wobei die Lookahead-Einheit zum Benachrichtigen der Umbenennungskennzeichnungseinheit bei Detektierung der Übertragung vorgesehen ist und wobei die Umbenennungskennzeichnungseinheit zum Zuordnen des ersten Umbenennungsregisters zu dem zweiten strukturierten Register in Reaktion auf das Benachrichtigungssignal vorgesehen ist und wobei die Umbenennungskennzeichnungseinheit ferner zum Zuordnen eines dritten Umbenennungsregisters in Reaktion auf den Übertragungsbefehl vorgesehen ist, wobei ein drittes Umbenennungskennzeichen das dritte Umbenennungsregister identifiziert und wobei das dritte Umbenennungsregister bei Ausführung des Übertragungsbefehls von dem Übertragungsbefehl als Zielregister verwendet wird.
  • Somit kann generell gesagt werden, dass die oben beschriebenen Probleme zum großen Teil mit der erfindungsgemäßen Vorrichtung zu Beschleunigen der Übertragungsoperationen gelöst werden. Die Vorrichtung weist eine Lookahead-Einheit auf, die Übertragungsbefehle vor der Ausführung der Übertragungsbefehle delektiert (z. B. bei Auswahl der Übertragungsoperationen für Entsendungen innerhalb eines Prozessors). Bei Detektierung eines Übertragungsbefehls informiert die Lookahead-Einheit eine Registerumbenennungseinheit, die das dem Quellenregister zugeordnete Umbenennungsregister dem Zielregister neu zuordnet. Die Neuzuordnung kann eine Neuzuordnung des Umbenennungskennzeichens, das das dem Quellenregister zugeordnete Um benennungsregister identifiziert, zu dem Zielregister umfassen. Wenn das Zielregister ein häufig als Quellenregister für nachfolgende Befehle verwendetes Register ist und das Quellen-Umbenennungsregister bei Detektierung der Übertragung bereits aktualisiert ist, kann die Anzahl der gleichzeitigen Ausführungen durch Neuzuordnen des Quellenregister-Umbenennungsregisters zu dem Zielregister erhöht werden. Nach der Neuzuordnung weist das häufig verwendete Register einen gültigen Wert auf, wenn das Quellen-Umbenennungsregister vor der Neuzuordnung gültig war. Entsprechend kann der Wert von dem häufig verwendeten Register schneller nachfolgenden abhängigen Befehlen zugeführt werden (d. h. vor der Ausführung der Übertragungsoperation). Die Leistung eines Prozessors, der die Vorrichtung benutzt, kann aufgrund der größeren Anzahl von gleichzeitigen Ausführungen, die mit der Erfindung erreicht werden kann, erhöht werden.
  • Bei einer speziellen Ausführungsform ist die Lookahead-Einheit bestrebt, Übertragungen von einem Basiszeigerregister zu einem Stapelzeigerregister (und umgekehrt) zu beschleunigen. Das Stapelzeigerregister kann häufig als Quellenoperand (z. B. Adressenoperand) verwendet werden, da zahlreiche Befehle Operanden im oberen Teil des Stapelspeichers verarbeiten können. Ferner kann das Basiszeigerregister häufig innerhalb einer Codesequenz konstant gehalten und als Quelle für Adressen innerhalb des Stapelspeichers verwendet werden. Daher kann das dem Basiszeigerregister zugeordnete Umbenennungsregister häufig bei Detektierung einer Übertragung von dem Basiszeiger zu dem Stapelzeiger gültig sein. Ein Lookahead-Wert für das Stapelzeigerregister kann daher vor der Ausführung des Befehls zur Übertragung von dem Basiszeiger zu dem Stapelzeiger durch Neuzuordnung des Basiszeiger- Umbenennungsregisters zu dem Stapelzeiger erzeugt werden.
  • Ferner kann es sich bei zahlreichen anderen Manipulationen des Stapelzeigerregisters, die keine Übertragungen sind, um feste Inkrementierungen oder Dekrementierungen des in dem Stapelzeigerregister gespeicherten Wertes handeln. Daher werden bei einer Ausführungsform einer Lookahead-Einheit Lookahead-Werte für das Stapelzeigerregister durch Aufrechterhalten kumulativer Effekte der Inkrementierungen und Dekrementierungen zuvor entsandter Befehle erzeugt. Die kumulativen Effekte der Inkrementierungen und Dekrementierungen vor einem speziellen Befehl können einem zuvor erzeugten Wert des Stapelzeigerregisters hinzugefügt werden, um einen Lookahead- Wert für diesen speziellen Wert zu erzeugen. Bei einer solchen Ausführungsform kann bei dem Neuzuordnen des Umbenennungsregisters, wie oben beschrieben, daher schnell ein gültiger Wert für das Stapelzeigerregister erreicht werden und somit die Erzeugung von Lookahead-Stapelzeigerwerten für Befehle im Anschluss an den Übertragungsbefehl vor dem Ausführen des Übertragungsbefehls erfolgen.
  • Zusätzlich zu dem Zuordnen des Quellenregister-Umbenennungsregisters zu dem Zielregister bei Detektierung einer Übertragung wird bei einer Ausführungsform der Registerumbenennungseinheit das für den Übertragungsbefehl ausgewählte Zielumbenennungsregister dem Quellenregister für den Übertragungsbefehl zugeordnet (d. h. die Umbenennungskennzeichen für die Quelle und das Ziel werden "ausgetauscht"). Bei Ausführung des Übertragungsbefehls wird das Quellenumbenennungsregister mit dem in dem zuvor diesem Quellenregister zugeordneten Umbenennungsregister gespeicherten Wert aktualisiert. Entsprechend wird das Quellenregister auf den vor dem Übertragungsbefehl darin gespeicherten Wert zurückgesetzt und empfangen nachfolgende von dem Quellenregister abhängige Befehle (falls vorhanden) diesen Wert.
  • Gemäß einem zweiten Aspekt der vorliegenden Erfindung wird ein Verfahren zum Durchführen der Registerumbenennung nach Anspruch 7 bereitgestellt.
  • Das Verfahren umfasst folgende Schritte:
  • Zuordnen eines ersten Umbenennungsregisters zu einem ersten strukturierten Register in Reaktion auf das Entsenden eines ersten Befehls mit einem ersten strukturierten Register als Zielregister, wobei ein strukturiertes Register von einer Befehlssatzarchitektur definiert ist und Umbenennungsregister von einem das Verfahren durchführenden Prozessor implementiert werden;
  • Zuordnen eines zweiten Umbenennungsregisters zu einem zweiten strukturierten Register in Reaktion auf das Entsenden eines zweiten Befehls mit einem zweiten strukturierten Register als Zielregister;
  • Delektierten eines Übertragungsbefehls zum Übertragen eines Wertes von dem ersten strukturierten Register zu dem zweiten strukturierten Register;
  • Zuordnen des ersten Umbenennungsregisters zu dem zweiten strukturierten Register in Reaktion auf die Detektierung; und
  • Zuordnen eines dritten Umbenennungsregisters als Zielregister eines Übertragungsbefehls in Reaktion auf die Detektierung, wobei das dritte Umbenennungsregister bei der Ausführung des Übertragungsbefehls von dem Übertragungsbefehl als Zielregister verwendet wird.
  • FIGURENKURZBESCHREIBUNG
  • Weitere Aufgaben und Vorteile der Erfindung werden anhand der nachfolgenden detaillierten Beschreibung mit Bezug auf die beiliegenden Zeichnungen besser verständlich. Es zeigen:
  • Fig. 1 ein Blockschaltbild einer Ausführungsform eines Prozessors;
  • Fig. 2 ein Blockschaltbild einer Ausführungsform einer in Fig. 1 gezeigten Abruf-/Abtasteinheit;
  • Fig. 3 ein Blockschaltbild einer Ausführungsform einer in Fig. 2 gezeigten Umbenennungs-/Planungseinheit;
  • Fig. 4 ein Blockschaltbild einer Ausführungsform einer in Fig. 3 gezeigten ESP-Lookahead-Einheit;
  • Fig. 5 ein Ablaufdiagramm der Operation einer Ausführungsform einer in Fig. 4 gezeigten Spaltungs- und Übertragungsdetektiereinheit;
  • Fig. 6 eine Zustandsmaschine, die bei einer Ausführungsform der in Fig. 4 gezeigten Spaltungs- und Übertragungsdetektiereinheit verwendet werden kann;
  • Fig. 7 ein erstes Beispiel für den Austausch von Umbenennungskennzeichen;
  • Fig. 8 ein zweites Beispiel für den Austausch von Umbenennungskennzeichen;
  • Fig. 9 ein Blockschaltbild einer Ausführungsform einer in Fig. 1 gezeigten Befehlsschlange; und
  • Fig. 10 ein Blockschaltbild einer Ausführungsform eines Computersystems mit dem in Fig. 1 gezeigten Prozessor.
  • DETAILLIERTE BESCHREIBUNG DER ERFINDUNG
  • Fig. 1 zeigt ein Blockschaltbild einer Ausführungsform eines superskalaren Prozessors 10. Weitere Ausführungsformen sind möglich und werden in Betracht gezogen. Bei der in Fig. 1 gezeigten Ausführungsform weist der Prozessor 10 eine Vorcodiereinheit 12, einen L1 I-Cachespeicher 14, einen L0 I- Cachespeicher 16, eine Abruf-/Abtasteinheit 18, eine Befehlsschlange 20, eine Ausrichteinheit 22, eine Umbenennungs-/Planungseinheit 24, eine erste Umbenennungsregisterdatei 30A, eine zweite Umbenennungsregisterdatei 30B, mehrere Funktionseinheiten 32A, 32B, 32C, 32D, 32E und 32F, mehrere Adressenerzeugungseinheiten 34A, 34B, 34C und 34D, eine Lade-/Speichereinheit 36, einen L1 D-Cachespeicher 38 und eine externe Interface-Einheit 42 auf. Elemente, die hier durch ein spezielles Bezugszeichen gefolgt von unterschiedlichen Buchstaben bezeichnet sind, werden kollektiv allein durch das Bezugszeichen bezeichnet. Die Funktionseinheiten 32A-32F werden z. B. kollektiv als Funktionseinheiten 32 bezeichnet.
  • Bei der in Fig. 1 gezeigten Ausführungsform ist die externe Interface-Einheit 42 mit der Vorcodiereinheit 12, der Lade-/Speichereinheit 36, einem L2-Interface 4 und einem Bus-Interface 46 gekoppelt. Die Vorcodiereinheit 12 ist ferner mit dem L1 I-Cachespeicher 14 gekoppelt. Der L1 I-Cachespeicher 14 ist mit dem L0 I-Cachespeicher 16 und der Abruf-/Abtasteinheit 18 gekoppelt. Die Abruf-/Abtasteinheit 18 ist ferner mit dem L0 I-Cachespeicher 16 und der Befehlsschlange 20 gekoppelt. Die Befehlsschlange 20 ist mit der Ausrichteinheit 22 gekoppelt, welche ferner mit der Umbenennungs-/Planungseinheit 24 gekoppelt ist. Die Umbenennungs-/Planungseinheit 24 ist ferner mit der ersten Umbenennungsregisterdatei 30A, der zweiten Umbenennungsregisterdatei 30B und der Lade-/Speichereinheit 36 gekoppelt. Die Lade-/Speichereinheit 36 ist mit dem L1 D-Cachespeicher 38 gekoppelt. Die erste Umbenennungsregisterdatei 30A ist mit den Funktionseinheiten 32A-32C und den Adressenerzeugungseinheiten 34A-34B sowie dem L1 D-Cachespeicher 38 gekoppelt. Ähnlich ist die zweite Umbenennungsregisterdatei 30B mit den Funktionseinheiten 32D-32F und den Adressenerzeugungseinheiten 34C-34D sowie dem L1 D-Cachespeicher 38 gekoppelt.
  • Generell ist der Prozessor 10 bestrebt, Lookahead-Werte für das Stapelzeigerregister zum Eliminieren von aus dem Stapelzeigerregister resultierenden Abhängigkeiten zu erzeugen. Viele Befehle inkrementieren oder dekrementieren das Stapelzeigerregister um einen festen Wert oder um einen in dem Befehl enthaltenen Wert (z. B. ein Direktfeld). Der Prozessor 10 berechnet die kumulativen Effekte dieser Manipulationen vor einem speziellen Befehl, um einen Lookahead-Wert für das Stapelzeigerregister zu berechnen, der diesem speziellen Befehl entspricht. Vorteilhafterweise können Befehle, die nur bezüglich des Wertes des Stapelzeigers von anderen Befehlen abhängig sind, parallel ausgeführt werden. Bestimmte Aktualisierungen des Stapelzeigerregisters sind für den Prozessor 10 möglicherweise nicht erkennbar. Bei Detektierung einer solchen Aktualisierung kann der Prozessor 10 nachfolgende Befehle blockieren, bis die nicht erkennbare Aktualisierung abgeschlossen ist. Danach kann die Erzeugung des Lookahead-Wertes fortgesetzt werden.
  • Eine Art der Aktualisierung des Stapelzeigerregisters, bei der es sich nicht um eine Inkrementierung oder Dekrementierung des Registers handelt und die häufig in zahlreichen Codesequenzen vorkommt, ist der Befehl zum Übertragen des Basiszeigers zu dem Stapelzeiger (und umgekehrt). Generell ist das Übertragen ein Kopieren eines Wertes von einem Quellenspeicherplatz zu einem Zielspeicherplatz. Nach dem Kopieren wird der ursprünglich in dem Quellenspeicherplatz gespeicherte Wert sowohl in dem Quellenspeicherplatz als auch in dem Zielspeicherplatz gespeichert. Der Prozessor 10 ist derart konfiguriert, dass er die Durchführung der vorgenannten Übertragung beschleunigt, um die Zeit vor der Fortsetzung der Erzeugung des Lookahead-Wertes für das Stapelzeigerregister zu verkürzen.
  • Insbesondere veranlasst der Prozessor 10 seinen Registerumbenennungsmechanismus, die Umbenennungskennzeichen für die Basiszeiger- und Stapelzeigerregister auszutauschen (nach der Zuordnung eines Umbenennungsregisters zu dem Zielort des Übertragungsbefehls), wenn eine Übertragung von dem Basiszeigerregister zu dem Stapelzeigerregister detektiert wird. Wenn das Umbenennungsregister, das dem Basiszeigerregister (vor dem Übertragungsbefehl) entspricht, gültig ist (d. h. der Befehl, dem das Umbenennungsregister als Zielregister zugeordnet war, ausgeführt ist), kann der nach der Übertragung aktualisierte Wert des Stapelzeigerregisters aus dem Umbenennungsregister ausgelesen werden und die Erzeugung des Lookahead-Wertes für das Stapelzeigerregister vor der Ausführung des Übertragungsbefehls fortgesetzt werden. Da das Basiszeigerregister häufig konstant gehalten und als Basis für die Erzeugung von Stapelspeicheradressen vor der Übertragung benutzt wird, kann der Wert in dem Umbenennungsregister häufig gültig sein. Vorteilhafterweise kann die Durchführung durch Beschleunigung des Übertragungsbefehls und der im Anschluss an den Übertragungsbefehl erfolgenden, stapelzeigerabhängigen Befehle verbessert werden.
  • Es sei darauf hingewiesen, dass der Übertragungsbefehl immer noch in dem Prozessor 10 ausgeführt wird. Das dem Zielort des Übertragungsbefehls zugeordnete Umbenennungsregister ist jedoch dem Quellenregister des Originalbefehls zugewiesen (da die Kennzeichen ausgetauscht worden sind). Generell wird der Übertragungsbefehl durch Lesen des Quellenumbenennungsregisters (das dem strukturierten Zielregister des Originalbefehls nach dem Austausch zugewiesen ist) und Aktualisieren des Zielumbenennungsregisters (das dem strukturierten Quellenregister des Originalbefehls nach dem Austausch zugewiesen ist) abgeschlossen. Nach der Ausführung des Übertragungsbefehls wird in beiden Umbenennungsregistern der gleiche Wert gespeichert. Es sei ferner darauf hingewiesen, dass ein Beschleunigen des Übertragungsbefehls in der hier beschriebenen Weise selbst bei Ausführungsformen des Prozessors 10 vorteilhaft sein kann, bei denen keine Erzeugung eines Lookahead-Wertes erfolgt. Da der Basiszeiger häufig bereits gültig ist, können nach der Übertragung erfolgende Befehle früher eingeplant werden (aufgrund des Kennzeichenaustausches, durch den angezeigt wird, dass das Stapelzeigerregister vor der Ausführung der Übertragung gültig ist). Es sei ferner darauf hingewiesen, dass hier der Einfachheit halber der Ausdruck "Austauschen" der Umbenennungskennzeichen benutzt wird. Generell kann der Registerumbenennungsmechanismus eine Beschleunigung des Übertragungsbefehls durch Neuzuordnung des Quellenumbenennungsregisters zu dem Zielumbenennungsregister bewirken. Bei der vorliegenden Ausführungsform wird das dem Zielort des Übertragungsbefehls zugeordnete Umbenennungsregister dem Quellenregister zugeordnet (d. h. die Kennzeichen sind ausgetauscht), um ein Aktualisieren des Quellenregisters durchzuführen. Bei anderen Ausführungsformen kann eine Aktualisierung des Quellenregisters auf andere Weise erfolgen (d. h. die gleiche Umbenennung kann nach der Übertragung den Quellen- und Zielregistern zugeordnet werden).
  • Die Vorcodiereinheit 12 empfängt von der externen Interface-Einheit 42 abgerufene Befehlsbytes und codiert die Befehlsbytes vor deren Speicherung in dem L1 I-Cachespeicher 14 vor. Von der Vorcodiereinheit 12 erzeugte Vorcodierinformationen werden ebenfalls in dem L1 I-Cachespeicher 14 gespeichert. Generell werden Vorcodierinformationen zur Unterstützung bei der Identifizierung von Befehlsmerkmalen erzeugt, die beim Abrufen und Ausgeben von Befehlen nützlich sein können, deren schnelle Erzeugung während der Abruf- und Ausgabeoperation jedoch schwierig ist. Der Ausdruck "vorcodieren", wie hier verwendet, bezieht sich auf das Decodieren von Befehlen zum Erzeugen von Vorcodierinformationen, die später zusammen mit den decodierten Befehlsbytes in einem Befehls-Cachespeicher (d. h. L1 I-Cachespeicher 14 und/oder L0 I-Cachespeicher 16) gespeichert werden.
  • Bei einer Ausführungsform verwendet der Prozessor 10 zwei Bits der Vordecodierinformationen pro Befehlsbyte. Eines der Bits, das als "Startbit" bezeichnet wird, zeigt an, ob das Befehlsbyte das Anfangsbyte eines Befehls ist. Wenn eine Gruppe von Befehlsbytes abgerufen wird, identifiziert der entsprechende Satz von Startbits die Grenzen zwischen Befehlen innerhalb der Gruppe von Befehlsbytes. Entsprechend können mehrere Befehle durch Abtasten der entsprechenden Startbits gleichzeitig aus der Gruppe von Befehlsbytes ausgewählt werden. Es werden zwar die Startbits zum Lokalisieren von Befehlsgrenzen durch Identifizieren des Anfangsbytes jedes Befehls verwendet, alternativ können jedoch auch die Endbits zum Lokalisieren von Befehlsgrenzen durch Identifizieren des letzten Bits jedes Befehls verwendet werden.
  • Das bei dieser Ausführungsform verwendete zweite Vorcodierbit, das als "Steuertransfer"-Bit bezeichnet wird, identifiziert, welche Befehle Verzweigungsbefehle sind. Das Steuertransferbit, das dem Anfangsbyte eines Befehls entspricht, zeigt an, ob der Befehl ein Verzweigungsbefehl ist oder nicht. Das Steuertransferbit, das nachfolgenden Bytes des Befehls entspricht, ist ein Ignorieren-Bit, mit Ausnahme relativer Verzweigungsbefehle mit einem kleinen Verschiebungsfeld. Bei einer besonderen Ausführungsform ist das kleine Verschiebungsfeld ein 8-Bit-Feld. Generell bezieht sich "kleines Verschiebungsfeld" auf ein Verschiebungsfeld, das weniger Bits aufweist als eine von Verzweigungsbefehlen erzeugte Targetadresse. Bei relativen Verzweigungsbefehlen mit kleinen Verschiebungsfeldern wird das dem Verschiebungsbyte entsprechende Steuertransferbit wie nachstehend beschrieben verwendet.
  • Zusätzlich zu dem Erzeugen von Vorcodierinformationen, die den Befehlsbytes entsprechen, ist die Vordecodiereinheit 12 bei der vorliegenden Ausführungsform zum Neucodieren des Verschiebungsfelds relativer Verzweigungsbefehle zwecks tatsächlichen Speicherns der Targetadresse vorgesehen. Mit anderen Worten: die Vorcodiereinheit 12 fügt die Verschiebung des relativen Verzweigungsbefehls der Adresse hinzu, die dem relativen Verzweigungsbefehl entspricht, der von dem von dem Prozessor 10 verwendeten Befehlssatz definiert wird. Die daraus resultierende Targetadresse wird als Ersatz für die Verschiebung in das Verschiebungsfeld codiert, und das aktualisierte Verschiebungsfeld wird anstelle des Original-Verschiebungsfelds in dem L1 I-Cachespeicher 14 gespeichert. Die Erzeugung der Targetadresse wird durch Vorberechnen relativer Targetadressen vereinfacht, und somit kann der Verzweigungsvorhersagemechanismus effizienter arbeiten.
  • Bei einer Ausführungsform des Prozessors 10, der den x86-Befehlssatz verwendet, ist eine Vorcodiereinheit 12 zum Neucodieren von Achtbit- und 32- Bit-Verschiebungsfeldern vorgesehen. Die 32-Bit-Verschiebungsfelder können die gesamte Targetadresse speichern. Andererseits wird das Achtbit-Verschiebungsfeld codiert. Insbesondere werden das Achtbit-Verschiebungsfeld und das entsprechende Steuertransfervorcodierbit in einen Cachespeicher-Zeilenoffsetteil und einen Relativ-Cachespeicher-Zeilenteil aufgeteilt. Der Cachespeicher-Zeilenoffsetteil ist der Cachespeicher-Zeilenoffsetteil der Targetadresse. Der Relativ-Cachespeicher-Zeilenteil definiert die Cachespeicherzeile, die von der Targetadresse identifiziert wird (die "Target-Cachespeicherzeile"), hinsichtlich einer Anzahl von Cachespeicherzeilen über oder unter der Cachespeicherzeile, in der der relative Verzweigungsbefehl gespeichert ist. Eine erste Cachespeicherzeile befindet sich über einer zweiten Cachespeicherzeile, wenn jedes Byte in der ersten Cachespeicherzeile an einer Adresse gespeichert ist, die numerisch größer ist als die Adressen, an denen die Bytes in der zweiten Cachespeicherzeile gespeichert sind. Im Gegensatz dazu befindet sich eine erste Cachespeicherzeile unter der zweiten Cachespeicherzeile, wenn jedes Byte in der ersten Cachespeicherzeile an einer Adresse gespeichert ist, die numerisch kleiner ist als die Adressen, an denen die Bytes in einer zweiten Cachespeicherzeile gespeichert sind. Eine vorzeichenbehaftete Achtbit-Verschiebung spezifiziert eine Adresse, die +/- 128 Bytes einer Adresse ausmacht, welche dem Verzweigungsbefehl entspricht. Entsprechend ist die Anzahl von oberen und unteren Cachespeicherzeilen, die von einem relativen Verzweigungsbefehl mit einer Achtbit-Verschiebung erreicht werden kann, begrenzt. Der Relativ-Cachespeicher-Zeilenteil codiert diesen begrenzten Satz von oberen und unteren Cachespeicherzeilen.
  • Die nachstehenden Tabellen 1 und 2 zeigen für eine Ausführungsform des Prozessors 10 eine beispielhafte Codierung der Vorcodierinformationen, die einem Byte entsprechen. Tabelle 1 Codierung von Vorcodierinformationen Tabelle 2 Targetadressencodierung
  • Anmerkung: Verbleibende Verschiebungsbytebits bilden den Offset in der Target-Cachespeicherzeile. Das Steuertransferbit repräsentiert effektiv eine Richtung und das höchstwertige Bit des Verschiebungsbytes repräsentiert die Anzahl von Cachespeicherzeilen.
  • Die Vorcodiereinheit 12 transportiert die empfangenen Befehlsbytes und entsprechenden Vorcodierinformationen zwecks Speicherung zu dem L1 I-Cachespeicher 14. Der L1 I-Cachespeicher 14 ist ein Hochgeschwindigkeits-Cachespeicher zum Speichern von Befehlsbytes und Vorcodierinformationen. Der L1 I-Cachespeicher 14 kann eine beliebige geeignete Konfiguration aufweisen, einschließlich Direktabbildungs- und Satzassoziativ-Konfigurationen. Bei einer besonderen Ausführungsform ist der L1 I-Cachespeicher 14 ein 128 KB-Zweiwege-Satzassoziativ-Cachespeicher mit 64 Byte-Cachespeicherzeilen. Der L1 I-Cachespeicher 14 weist einen Zusatzspeicher für die Vorcodierinformationen auf, die den darin gespeicherten Befehlsbytes entsprechen. Der Zusatzspeicher ist ähnlich organisiert wie der Befehlsbytespeicher. Wie hier verwendet, bezieht sich der Ausdruck "Cachespeicherzeile" auf die Einheit der Zuordnung von Speicherplatz in einem speziellen Cachespeicher. Generell werden die Bytes in einer Cachespeicherzeile von dem Cachespeicher als Einheit verarbeitet (d. h. zugewiesen und freigegeben).
  • Bei einer Ausführungsform wird der L1 I-Cachespeicher 14 linear adressiert und real gekennzeichnet. Ein Cachespeicher wird linear adressiert, wenn mindestens eines der zum Indizieren des Cachespeichers verwendeten Adressenbits ein lineares Adressenbit ist, das nachfolgend in ein reales Adressenbit umgewandelt wird. Die Kennzeichen eines linear adressierten/real gekennzeichneten Cachespeichers umfassen jedes umgewandelte Bit zusätzlich zu den nicht zum Indizieren verwendeten Bits. Wie von der x86-Architektur spezifiziert, werden Befehle zum Erzeugen logischer Adressen gebildet, die von einem Segment-Umwandlungsmechanismus in eine lineare Adresse und ferner von einem Seitenumwandlungsmechanismus in eine reale Adresse umgewandelt werden. Es wird mehr und mehr gängige Praxis, einen Flat-Adressiermodus anzuwenden, bei dem die logische Adresse und die entsprechende lineare Adresse gleich sind. Der Prozessor 10 kann derart konfiguriert sein, dass er den Flat-Adressiermodus annimmt. Entsprechend sind von den Ausführungsbefehlen erzeugte Abrufadressen, Targetadressen etc. lineare Adressen. Zum Feststellen, ob ein Treffer in dem L1 I-Cachespeicher 14 detektiert worden ist, wird die von der Abruf-/Abtasteinheit 18 dem L1 I-Cachespeicher 14 übergebene lineare Adresse mittels eines Umwandlungs-Lookaside-Puffers (TLB) in eine entsprechende reale Adresse umgewandelt, die mit den realen Kennzeichen von den indizierten Cachespeicherzeilen verglichen wird, um einen Treffer/Nichttreffer festzustellen. Wenn kein Flat-Adressiermodus angewandt wird, kann der Prozessor 10 immer noch den Code ausführen, es können jedoch zusätzliche Taktzyklen zum Erzeugen linearer Adressen aus logischen Adressen verwendet werden.
  • Der L0 I-Cachespeicher 16 ist ebenfalls ein Hochgeschwindigkeits-Cachespeicher zum Speichern von Befehlsbytes. Da der L1 I-Cachespeicher 14 groß ist, kann die Zeit für den Zugriff auf den L1 I-Cachespeicher 14 lang sein. Bei einer besonderen Ausführungsform benutzt der L1 I-Cachespeicher 14 eine zweitaktzyklische Zugriffszeit. Um einen eintaktigen Abrufzyklus zu ermöglichen, wird der L0 I-Cachespeicher 16 verwendet. Der L0 I-Cachespeicher 16 ist vergleichsweise kleiner als der L1 I-Cachespeicher 14 und kann somit eine kürzere Zugriffszeit bieten. Bei einer besonderen Ausführungsform ist der L0 I-Cachespeicher 16 ein 512-Byte-Vollassoziativ-Cachespeicher. Ähnlich wie der L1 I-Cachespeicher 14 ist der L0 I-Cachespeicher 14 zum Speichern von Cachespeicherzeilen aus Befehlsbytes und entsprechenden Vorcodierinformationen vorgesehen (z. B. 512 Bytes speichern acht 64-Byte-Cachespeicherzeilen, und entsprechende Vorcodierdaten werden im Zusatzspeicher gespeichert). Bei einer Ausführungsform kann der L0 I-Cachespeicher 16 linear adressiert und linear gekennzeichnet werden.
  • Die Abruf-/Abtasteinheit 18 ist zum Erzeugen von Abrufadressen für den L0 I- Cachespeicher 16 und Vorabrufen von Adressen für den L1 I-Cachespeicher 14 vorgesehen. Aus dem L0 I-Cachespeicher 16 abgerufene Befehle werden von der Abruf-/Abtasteinheit 18 abgetastet, um Befehle für das Entsenden zu detektieren und Verzweigungsbefehle zu lokalisieren und Verzweigungsvorhersagen entsprechend den lokalisierten Verzweigungsbefehlen zu treffen. Befehlsabtastinformationen und entsprechende Befehlsbytes werden von der Abruf-/Abtasteinheit 18 in der Befehlsschlange 20 gespeichert. Ferner werden die identifizierten Verzweigungsbefehle und Verzweigungsvorhersagen zum Erzeugen nachfolgender Abrufadressen für den L0 I-Cachespeicher 16 verwendet.
  • Die Abruf-/Abtasteinheit 18 verwendet einen Vorabrufalgorithmus für das Bestreben zum Vorabrufen von Cachespeicherzeilen aus dem L1 I-Cachespeicher 14 in den L0 I-Cachespeicher 16, bevor die vorabgerufenen Cachespeicherzeilen von der Abruf-/Abtasteinheit 18 zum Entsenden in den Prozessor 10 abgerufen werden. Es kann ein beliebiger geeigneter Algorithmus angewandt werden. Bei einer Ausführungsform ist die Abruf-/Abtasteinheit 18 zum Vorabrufen der nächsten Cachespeicherzeile, die einer aus dem L0 I- Cachespeicher 16 abgerufenen Cachespeicherzeile folgt, während eines spe ziellen Taktzyklus vorgesehen, es sei denn (i) es wird eine Verzweigungsfehlinterpretation signalisiert; (ii) es wird ein L0 I-Cachespeicher-Nichttreffer detektiert; (iii) es wird eine Targetadresse erzeugt, bei der ein Nichttreffer des L0 I-Cachespeichers angenommen wird. Bei einer besonderen Ausführungsform wird angenommen, dass relative Verzweigungsbefehle, die 32-Bit-Verschiebungen anwenden, und Verzweigungsbefehle, die die Erzeugung indirekter Targetadressen anwenden, den L0 I-Cachespeicher 16 nicht treffen. Im Falle (i) führt die Abruf-/Abtasteinheit 18 einen Vorabruf der auf die korrigierte Abrufadresse folgenden Cachespeicherzeile durch. In den Fällen (ii) und (iii) führt die Abruf-/Abtasteinheit 18 einen Vorabruf der entsprechenden Nichttreffer- oder Targetadresse durch.
  • Die Abruf-/Abtasteinheit 18 verwendet einen aggressiven Verzweigungsvorhersagemechanismus bei der Bestrebung, größere Befehls-"Abfolgen" während eines Taktzyklus abzurufen. Wie hier verwendet, bezieht sich der Ausdruck Befehls-"Abfolge" auf einen Satz von einem oder mehreren Befehlen, deren Ausführung in einer innerhalb des Satzes spezifizierten Sequenz vorhergesagt wird. Die Abruf-/Abtasteinheit 18 kann z. B. Abfolgen von 24 Befehlsbytes aus dem L0 I-Cachespeicher 16 abrufen. Jede Abfolge ist in mehrere Abschnitte unterteilt, die die Abruf-/Abtasteinheit 18 parallel abtastet, um Verzweigungsbefehle zu identifizieren und Befehlsabtastinformationen für die Befehlsschlange 20 zu erzeugen. Bei einer Ausführungsform ist die Abruf-/Abtasteinheit 18 bestrebt, bis zu zwei Verzweigungsbefehle pro Taktzyklus vorherzusagen, um große Befehlsabfolgen zu realisieren.
  • Die Befehlsschlange 20 ist zum Speichern von von der Abruf-/Abtasteinheit 18 zur nachfolgenden Entsendung bereitgestellten Befehlsbytes vorgesehen. Die Befehlsschlange 20 kann als FIFO-Puffer arbeiten. Bei einer Ausführungsform ist die Befehlsschlange 20 zum Speichern mehrere Einträge vorgesehen, wobei jeder Eintrag umfasst: eine Befehlsabfolge, Abtastdaten, die bis zu fünf Befehle innerhalb eines Abschnitts der Abfolge identifizieren, und Adressen, die jedem Abschnitt der Abfolge entsprechen. Ferner kann die Befehlsschlange 20 zum Auswählen von bis zu sechs Befehlen innerhalb von bis zu vier aufeinanderfolgenden Abfolgeabschnitten zur Übergabe an die Ausrichteinheit 22 vorgesehen sein. Die Befehlsschlange 20 kann z. B. 2-3 Einträge verwenden. Weitere Details bezüglich einer Ausführungsform der Befehlsschlange 20 sind nachstehend genauer erläutert.
  • Die Ausrichteinheit 22 ist zum Leiten von von der Befehlsschlange 20 identifizierten Befehlen zu einem Satz von Ausgabepositionen innerhalb der Umbenennungs-/Planungseinheit 24 vorgesehen. Mit anderen Worten: die Ausrichteinheit 22 wählt die Bytes aus, die jeden Befehl von den von der Befehlsschlange 20 bereitgestellten Abfolgeabschnitten bilden, die auf die von der Befehlsschlange 20 bereitgestellten Abtastinformationen ansprechen. Die Befehle werden in Programmreihenfolge zu den Ausgabepositionen geliefert (d. h. der Befehl, der der erste in der Programmreihenfolge ist, wird zu der ersten Ausgabeposition geliefert, der zweite Befehl in der Programmreihenfolge wird zu der zweiten Ausgabeposition geliefert, etc.).
  • Die Umbenennungs-/Planungseinheit 24 erzeugt eine Registerumbenennungs- und Befehlsplanungsfunktion. Insbesondere erzeugt die Umbenennungs-/Planungseinheit 24 aktuelle Umbenennungskennzeichen für die Quellenregister jedes Befehls und ordnet die Umbenennungskennzeichen den Zielregistern jedes Befehls zu. Die Umbenennungskennzeichen identifizieren die Umbenennungsregister innerhalb der Umbenennungsregisterdateien 30A-30B.
  • Ferner kann die Umbenennungs-/Planungseinheit 24 bestrebt sein, Lookahead-Werte für bestimmte Befehlstypen zu erzeugen. Die Erzeugung von Lookahead-Werten kann bei Ausführungsformen, bei denen der x86-Befehlssatz verwendet wird, besonders vorteilhaft sein. Aufgrund der Art des x86-Befehlssatzes sind viele der Befehle in einer typischen Codesequenz Versionen einfacher Übertragungen. Ein Grund für dieses Merkmal liegt darin, dass x86- Befehle zwei Operanden aufweisen, die beide Quellenoperanden sind und von denen einer ein Zieloperand ist. Daher wird einer der Quellenoperanden jedes Befehls mit einem Ausführungsergebnis überschrieben. Ferner spezifiziert der x86-Befehlssatz sehr wenige Register zum Speichern von Registeroperanden. Entsprechend sind viele Befehle Übertragungen von Operanden zu und von einem in einem Speicher aufrechterhaltenen Stapelspeicher. Ferner handelt es sich bei vielen Befehlsabhängigkeiten um Abhängigkeiten von ESP-/EBP-Registern, und viele Aktualisierungen dieser Register sind Inkrementierungen und Dekrementierungen zuvor gespeicherter Werte. Zum Beschleunigen der Ausführung dieser Befehle erzeugt die Umbenennungs-/Planungseinheit 24 Lookahead-Kopien des ESP-Registers für jeden während eines Taktzyklus decodierten Befehl.
  • Die Befehle und zugeordneten Umbenennungen werden in einer Planungseinrichtung in der Umbenennungs-/Planungseinheit 24 gespeichert. Wenn die Quellenoperanden für die Befehle verfügbar werden (d. h. in die Umbenennungsregisterdateien 30A-30B geschrieben sind), werden die Befehle für die Ausführung durch eine spezielle Funktionseinheit 32A-32F eingeplant.
  • Die Umbenennungsregisterdateien 30A-30B empfangen bei Einplanung von Befehlen zur Ausführung diese Befehle von der Umbenennungs-/Planungseinheit 24. Die Umbenennungsregisterdateien 30A-30B lesen die Umbenennungsregister entsprechend den Quellenumbenennungskennzeichen jedes Befehls und liefern die Quellenwerte an die Funktionseinheiten 32A-32F oder die Adressenerzeugungseinheiten 34A-34D, die für die Ausführung jedes Befehls ausgewählt sind. Die Umbenennungsregisterdateien 30A-30B empfangen die Ausführungsergebnisse von jeder Funktionseinheit (und laden Speicheroperationsergebnisse von dem D-Cachespeicher 38) zusammen mit dem dem Zielort zugeordneten Umbenennungskennzeichen. Die Umbenennungsregisterdateien 30A-30B speichern die Ausführungsergebnisse in den identifizierten Umbenennungsregistern. Die Umbenennungsregisterdateien 30A-30B weisen mehrere Umbenennungsregister auf. Jede Umbenennungsregisterdatei 30A- 30B kann z. B. 100-200 Umbenennungsregister aufweisen.
  • Die Umbenennungsregisterdateien 30A-30B werden als Spiegelbilder aufrechterhalten. Es werden die Umbenennungsregisterdateien 30A-30B anstelle einer einzelnen Umbenennungsregisterdatei zum Reduzieren der Anzahl von in jeder Registerdatei ausgebildeten Leseports bereitgestellt. Die Anzahl von Schreibports kann gleich bleiben (da die Ergebnisse von einer Registerdatei zur anderen weitergeleitet werden). Die Reduzierung der Leseports kann jedoch zu einer wesentlichen Einsparung bei der Implementierung führen (z. B. ist die Anzahl von Leseports häufig ungefähr doppelt so groß wie Anzahl von Schreibports). Entsprechend liefert die Umbenennungsregisterdatei 30A Operanden an die Funktionseinheiten 32A-32C und die Adressenerzeugungseinheiten 34A-34B und empfängt Ergebnisse von den Funktionseinheiten 32A- 32C und dem D-Cachespeicher 38. Ähnlich liefert die Umbenennungsregisterdatei 30B Operanden an die Funktionseinheiten 32D-32F und die Adressenerzeugungseinheiten 34C-34D und empfängt Ergebnisse von den Funktionseinheiten 32D-32F und dem D-Cachespeicher 38. Die an die Umbenennungsregisterdatei 30A gelieferten Ergebnisse werden an die Umbenennungsregisterdatei 30B weitergeleitet, und die an die Umbenennungsregisterdatei 30B gelieferten Ergebnisse werden an die Umbenennungsregisterdatei 30A weitergeleitet. Bei einer Ausführungsform erfolgt die Weiterleitung der Ergebnisse an die entgegengesetzte Umbenennungsregisterdatei mit einer Verzögerung von einem Taktzyklus.
  • Bei Ausführungsformen des Prozessors 10, bei denen der x86-Befehlssatz verwendet wird, kann ein Befehl implizite Speicheroperationen für die Adressenerzeugungseinheit 34 und die Lade-/Speichereinheit 36 sowie explizite funktionelle Operationen für die Funktionseinheiten 32 enthalten. Befehle ohne Speicheroperanden enthalten keine Speicheroperationen und werden von den Funktionseinheiten 32 verarbeitet. Befehle mit einem Quellenspeicheroperanden und einem Registerzieloperanden enthalten eine implizite Speicheroperation, die von den Adressenerzeugungseinheiten 34 und der Lade-/Speichereinheit 36 verarbeitet wird, und eine explizite Funktionsoperation, die von den Funktionseinheiten 32 verarbeitete wird. Befehle mit einem Speicherquel len-/-zieloperanden enthalten implizite Lade- und Speicher-Speicheroperationen, die von den Adressenerzeugungseinheiten 34 und der Lade-/Speichereinheit 36 verarbeitet werden, und eine explizite Funktionsoperation, die von den Funktionseinheiten 32 verarbeitet wird. Schließlich werden Befehle ohne explizite Funktionsoperation von der Lade-/Speichereinheit 36 verarbeitet. Jede Speicheroperation führt dazu, dass eine Adressenerzeugung von den Adressenerzeugungseinheiten 34 verarbeitet wird. Speicheroperationen und Befehle (d. h. Funktionsoperationen) können hier separat aufgeführt werden, können jedoch auch von einem einzelnen Befehl stammen.
  • Die Adressenerzeugungseinheiten 34 sind zur Durchführung von Adressenerzeugungsoperationen vorgesehen und erzeugen somit Adressen für Speicheroperationen. Die erzeugten Adressen werden an den L1 D-Cachespeicher 38 und zu der Lade-/Speichereinheit 36 geleitet. Bei einer Ausführungsform werden die Adressenerzeugungseinheiten 34A und 34C für Lade-Speicheroperationen und die Adressenerzeugungseinheiten 34B und 34D für Speicher- Speicheroperationen verwendet. Die Funktionseinheiten 32A und 32D sind ganzzahlige Funktionseinheiten zum Durchführen ganzzahliger arithmetischer/logischer Operationen und zum Ausführen von Verzweigungsbefehlen. Die Funktionseinheiten 32B und 32E sind Multimedia-Ausführungseinheiten zum Ausführen von Multimediabefehlen, und die Funktionseinheiten 32C und 32F sind Gleitkomma-Einheiten zum Ausführen von Gleitkomma-Befehlen, Bei der dargestellten Ausführungsform ist jede Funktionseinheit 32 zum Ausführen von bis zu zwei Befehlen des geeigneten Typs pro Taktzyklus vorgesehen. Es können bestimmte Einschränkungen gelten (z. B. nur eine ganzzahlige Multiplikation pro Taktzyklus, eine Gleitkomma-Transzendenz, etc.).
  • Die Lade-/Speichereinheit 36 ist zum Anschließen an den L1 D-Cachespeicher 38 zwecks Ausführung des Datenspeicherteils der Lade-Speicheroperationen und zwecks Durchführung der Lade-/Speicher-Abhängigkeitsprüfung vorgesehen. Eine Speicheroperation ist ein Transfer von Daten zwischen dem Prozessor 10 und einem externen Speicher, Die Speicheroperation kann ein explizi ter Befehl oder ein impliziter Teil eines Befehls sein, der ebenfalls von den Funktionseinheiten 32 auszuführende Operationen enthält. Lade-Speicheroperationen spezifizieren einen Transfer von Daten von dem externen Speicher zu dem Prozessor 10, und Speicher-Speicheroperationen spezifizieren einen Transfer von dem Prozessor 10 zu dem externen Speicher. Wenn ein Treffer für eine Speicheroperation innerhalb des L1 D-Cachespeichers 38 detektiert wird, ist die Speicheroperation ohne Zugriff auf den externen Speicher abgeschlossen.
  • Der L1 D-Cachespeicher 38 ist ein Hochgeschwindigkeits-Cachespeicher zum Speichern von Daten. Es kann eine beliebige geeignete Konfiguration für den L1 D-Cachespeicher 38 verwendet werden, einschließlich Satzassoziativ- und Direktabbildungs-Konfigurationen. Bei einer besonderen Ausführungsform ist der L1 D-Cachespeicher 38 ein 128 KB-Zweiwege-Satzassoziativ-Cachespeicher mit 64 Bytezeilen. Der L1 D-Cachespeicher 38 kann z. B. in Form von 32 Cachespeicher-Bänken pro Weg organisiert sein. Ferner kann der L1 D- Cachespeicher 38 ein linear adressierter/real gekennzeichneter Cachespeicher sein, der ähnlich wie der L1 I-Cachespeicher 14 einen TLB verwendet.
  • Die externe Interface-Einheit 42 ist für den Transfer von Cachespeicherzeilen mit Befehlsbytes und Datenbytes in Reaktion auf Cachespeicher-Nichttreffer in den Prozessor 10 vorgesehen. Befehls-Cachespeicherzeilen werden zu der Vordecodiereinheit 12 geleitet, und Daten-Cachespeicherzeilen werden zu dem L1 D-Cachespeicher 38 geleitet. Ferner ist die externe Interface-Einheit 42 für den Transfer von aus dem L1 D-Cachespeicher 38 gelöschten Cachespeicherzeilen zu dem Speicher vorgesehen, wenn die gelöschten Cachespeicherzeilen auf den Prozessor 10 modifiziert worden sind. Gemäß Fig. 1 ist die externe Interface-Einheit 42 zum Anschließen über das Interface 44 an einen externen L1-Cachespeicher sowie zum Anschließen über das Bus-Interface 46 an ein Computersystem vorgesehen. Bei einer Ausführungsform weist die Bus-Interface-Einheit 46 ein EV/6-Bus-Interface auf.
  • Fig. 2 zeigt ein Blockschaltbild einer Ausführungsform der Abruf-/Abtasteinheit 18. Weitere Ausführungsformen sind möglich und werden in Betracht gezogen. Gemäß Fig. 2 weist eine Abruf-/Abtasteinheit 18 auf: eine Vorabruf- Steuereinheit 50, mehrere "Wähle nächste"-Blöcke 52A-52C, einen Befehlsauswahl-Multiplexer (Mux) 54, einen Befehlsabtaster 56, einen Verzweigungsabtaster 58, eine Verzweigungsentwicklungstabelle 60, einen Verzweigungsauswahl-Mux 62, einen Rückkehrstapelspeicher 64, einen Cachespeicher 66 für indirekte Adressen und eine Vorwärts-Kollabiereinheit 68. Die Vorabruf- Steuereinheit 50 ist mit dem L1 I-Cachespeicher 14, dem L0 I-Cachespeicher 16, dem Cachespeicher 66 für indirekte Adressen, dem Rückkehrstapelspeicher 64, der Verzweigungsentwicklungstabelle 60, dem Verzweigungsabtaster 58 und dem Befehlsauswahl-Mux 54 gekoppelt. Der "Wähle nächste"-Block 52A ist mit dem L1 I-Cachespeicher 14 gekoppelt, während die "Wähle nächste"-Blöcke 52B-52C mit dem L0 I-Cachespeicher 16 gekoppelt sind. Jeder "Wähle nächste"-Block ist mit dem Befehlsauswahl-Mux 54 gekoppelt, welcher ferner mit dem Verzweigungsabtaster 58 und dem Befehlsabtaster 56 gekoppelt ist. Der Befehlsabtaster 56 ist mit der Befehlsschlange 20 gekoppelt. Der Verzweigungsabtaster 58 ist mit der Verzweigungsentwicklungstabelle 60, dem Rückkehrstapelspeicher 64 und dem Verzweigungsauswahl-Mux 62 gekoppelt. Der Verzweigungsauswahl-Mux 62 ist mit dem Cachespeicher 66 für indirekte Adressen gekoppelt. Die Verzweigungsentwicklungstabelle 60 und der Verzweigungsabtaster 58 sind mit der Vorwärts-Kollabiereinheit 68 gekoppelt, welche mit der Befehlsschlange 20 gekoppelt ist.
  • Die Vorabruf-Steuereinheit 50 empfängt Verzweigungsvorhersageinformationen (einschließlich Targetadressen und erfasst/nicht erfasst-Vorhersagen) von dem Verzweigungsabtaster 58, der Verzweigungsentwicklungstabelle 60, dem Rückkehrstapelspeicher 64 und dem Cachespeicher 66 für indirekte Adressen. In Reaktion auf die Verzweigungsvorhersageinformationen erzeugt die Vorabruf-Steuereinheit 50 Abrufadressen für den L0 I-Cachespeicher 16 und eine Vorabrufadresse für den L1 I-Cachespeicher 14. Bei einer Ausführungsform erzeugt die Vorabruf-Steuereinheit 50 zwei Abrufadressen für den L0 I-Cache speicher 16. Die erste Abrufadresse wird als die Targetadresse ausgewählt, die dem ersten von dem Verzweigungsabtaster 58 (falls vorhanden) identifizierten Verzweigungsbefehl entspricht. Die zweite Abrufadresse ist die der in dem vorangegangenen Zyklus ausgewählten Abrufadresse folgende Adresse (d. h. die Abrufadresse, die der von dem Befehlsauswahl-Mux 54 ausgewählten Abfolge entspricht).
  • Der L0 I-Cachespeicher 14 liefert die Cachespeicherzeilen (und Vorcodierinformationen), die den beiden Abrufadressen entsprechen, sowie die Cachespeicherzeilen (und Vorcodierinformationen), die jeder dieser Cachespeicherzeilen folgen, an die "Wähle nächste"-Blöcke 52B-52C. Insbesondere empfängt der "Wähle nächste"-Block 52B die nachfolgende Cachespeicherzeile, die der nachfolgenden Adresse und der nächsten inkrementalen Cachespeicherzeile nach der nachfolgenden Cachespeicherzeile entspricht. Der "Wähle nächste"-Block 52C empfängt die Target-Cachespeicherzeile, die der Targetadresse entspricht, sowie die Cachespeicherzeile, die der Target-Cachespeicherzeile folgt. Ferner empfangen die "Wähle nächste"-Blöcke 52B-52C den Offsetteil der entsprechenden Abrufadresse. Die "Wähle nächste"-Blöcke 52B-52C wählen jeweils eine Abfolge von Befehlsbytes (und entsprechende Vorcodierinformationen) aus den empfangenen Cachespeicherzeilen aus, und zwar beginnend mit dem Abfolgeabschnitt, der den Offsetteil der entsprechenden Abrufadresse enthält. Da der Offsetteil jeder Abrufadresse an einer beliebigen Stelle in der Cachespeicherzeile beginnen kann, kann die ausgewählte Abfolge Teile der abgerufenen Cachespeicherzeile und der der abgerufenen Cachespeicherzeile folgenden Cachespeicherzeile enthalten. Somit werden sowohl die abgerufene Cachespeicherzeile und die darauffolgende Cachespeicherzeile von den "Wähle nächste"-Blöcken 52B-52C empfangen.
  • Ähnlich empfängt der "Wähle nächste"-Block eine vorabgerufene Cachespeicherzeile (und entsprechende Vorcodierinformationen) von dem L1 I-Cachespeicher 14 und wählt daraus eine Befehlsabfolge aus. Da eine Cachespeicherzeile aus dem L1 I-Cachespeicher 14 vorabgerufen wird, kann die daraus ausgewählte Abfolge weniger als eine vollständige Abfolge enthalten, wenn sich der Offsetteil der Vorabrufadresse nahe dem Ende der Cachespeicherzeile befindet. Es sei darauf hingewiesen, dass die Abruf-Cachespeicherzeilen aus dem L0 I-Cachespeicher 16 in dem gleichen Taktzyklus bereitgestellt werden können, in dem die entsprechenden Adressen von der Vorabruf-Steuereinheit 50 erzeugt werden, die Vorabruf-Cachespeicherzeile kann jedoch um einen Taktzyklus verzögert sein, da der L1 I-Cachespeicher 14 größer ist und eine längere Zugriffszeit benötigt. Zusätzlich zu dem Bereitstellen der vorabgerufenen Cachespeicherzeile zum Auswählen des nächsten Blocks 52A, liefert der L1 I-Cachespeicher 14 die vorabgerufene Cachespeicherzeile an den L0 I- Cachespeicher 16. Wenn die vorabgerufene Cachespeichezeile bereits in dem L0 I-Cachespeicher 16 gespeichert ist, kann der L0 I-Cachespeicher 16 die vorabgerufene Cachespeicherzeile löschen. Wenn jedoch die vorabgerufene Cachespeicherzeile noch nicht in dem L0 I-Cachespeicher 16 gespeichert ist, wird die vorabgerufene Cachespeicherzeile in dem L0 I-Cachespeicher 16 gespeichert. Auf diese Weise werden Cachespeicherzeilen, auf die derzeit zugegriffen werden kann, zwecks schnellen Zugriffs in den L0 I-Cachespeicher 16 geliefert. Es sei darauf hingewiesen, dass bei einer besonderen Ausführungsform der L0 I-Cachespeicher 16 als Vollassoziativ-Cachespeicher organisiert ist. Falls gewünscht, können andere Organisationen verwendet werden (z. B. Direktabbildung, Satzassoziativ-Konfiguration etc.).
  • Die Vorabruf-Steuereinheit 50 wählt die von einem der "Wähle nächste"- Blöcke 52 in Reaktion auf Verzweigungsvorhersageinformationen bereitgestellte Befehlsabfolge durch Steuern des Befehlsauswahl-Mux 54 aus. Wie nachstehend genauer erläutert, empfängt die Vorabruf-Steuereinheit 50 in einer frühen Phase des Taktzyklus Targetadressen von dem Verzweigungsabtaster 58, dem Rückkehrstapelspeicher 64 und dem Cachespeicher 66 für indirekte Adressen sowie mindestens einen Teil des Opcode-Bytes des ersten von dem Verzweigungsabtaster 58 identifizierten Verzweigungsbefehls. Die Vorabruf-Steuereinheit 50 decodiert den Teil des Opcode-Bytes zum Auswählen der Targetadresse, die aus dem L0 I-Cachespeicher 16 abgerufen werden soll, aus den verschiedenen Targetadressenquellen und liefert die ausgewählte Targetadresse an den L0 I-Cachespeicher 16. Parallel dazu wird die der in dem vorangegangenen Taktzyklus ausgewählten Abrufadresse (entweder die Targetadresse oder die nachfolgende Adresse aus dem vorangegangenen Taktzyklus, je nach Verzweigungsvorhersage aus dem vorangegangenen Taktzyklus) folgende Adresse berechnet und an den L0 I-Cachespeicher 16 geliefert. Verzweigungsvorhersageinformationen (d. h. erfasste oder nicht erfasste) werden von der Verzweigungsentwicklungstabelle 60 in einer späten Phase des Taktzyklus bereitgestellt. Wenn der Verzweigungsbefehl, der der aus dem L0 I-Cachespeicher 16 abgerufenen Targetadresse entspricht, als erfasst vorausgesagt wird, wählt die Vorabruf-Steuereinheit 50 die von dem "Wähle nächste"-Block 52C bereitgestellte Befehlsabfolge aus. Wenn andererseits der Verzweigungsbefehl als nicht erfasst vorausgesagt wird, wird die von dem "Wähle nächste"-Block 52B ausgewählte Befehlsabfolge ausgewählt. Die von den "Wähle nächste"-Block 52A bereitgestellt Befehlsabfolge wird ausgewählt, wenn eine vorausgesagte Abrufadresse den L0 I-Cachespeicher 16 in einem vorangegangenen Taktzyklus nicht getroffen hat und aus dem L1 I- Cachespeicher 14 abgerufen worden ist. Ferner wird die Befehlsabfolge aus dem L1 I-Cachespeicher 14 ausgewählt, wenn die Befehlsabfolge in Reaktion auf einen Verzweigungsbefehl mit einer 32-Bit-Verschiebung oder die Erzeugung einer indirekten Adresse oder einen Nichttreffer des L0 I-Cachespeichers vorabgerufen worden ist.
  • Die ausgewählte Befehlsabfolge wird an den Befehlsabtaster 56 und den Verzweigungsabtaster 58 geliefert. Der Befehlsabtaster 56 tastet die der ausgewählten Befehlsabfolge entsprechenden Vordecodierinformationen ab, um Befehle innerhalb der Befehlsabfolge zu identifizieren. Insbesondere bei einer Ausführungsform tastet der Befehlsabtaster 56 die jedem Abfolgeabschnitt entsprechenden Startbits parallel ab und identifiziert bis zu fünf Befehle innerhalb jedes Abfolgeabschnitts. Es werden Zeiger, die auf die identifizierten Befehle (Offsets innerhalb des Abfolgeabschnitts) weisen, erzeugt. Die Zeiger, Befehlsbytes und Adressen (einer/eine pro Abfolgeabschnitt) werden von dem Befehlsabtaster 56 zu der Befehlsschlange 20 transportiert. Wenn ein spezieller Abfolgeabschnitt mehr als fünf Befehle enthält, werden die Informationen, die den dem speziellen Abfolgeabschnitt entsprechenden Abfolgeabschnitten entsprechen, invalidiert und werden der spezielle Abfolgeabschnitt und die nachfolgenden Abfolgeabschnitte während des nächsten Taktzyklus erneut abgetastet.
  • Bei Ausführungsformen, bei denen ein Mikrocode zur Anwendung kommt, werden Mikrocodebefehle beim Decodieren der Befehle identifiziert (z. B. durch das Fehlen eines direkt decodierten Befehls in einer Ausgabeposition, an die ein Befehl ausgegeben worden ist).
  • Der Verzweigungsabtaster 58 tastet die Befehlabfolge parallel zu dem Befehlsabtaster 56 ab. Der Verzweigungsabtaster 58 tastet die Startbits ab und steuert die Transferbits der Befehlsabfolge, um die ersten beiden Verzweigungsbefehle innerhalb der Befehlsabfolge zu identifizieren. Wie oben beschrieben, wird ein Verzweigungsbefehl von dem Steuertransferbit identifiziert, das dem Startbyte eines gesetzten Befehls (wie von dem Startbit identifiziert) entspricht. Bei Lokalisierung der ersten beiden Verzweigungsbefehle nimmt der Verzweigungsabtaster 58 an, dass die Befehle relative Verzweigungsbefehle sind und wählt die entsprechenden codierten Targetadressen aus den dem Startbyte des Verzweigungsbefehls folgenden Befehlsbytes aus. Bei Ausführungsformen, bei denen der x86-Befehlssatz verwendet wird, wird eine neun-Bit-Targetadresse (das Verschiebungsbyte sowie das entsprechende Steuertransferbit) und ferner eine 32-Bit-Targetadresse ausgewählt. Ferner wird mindestens ein Teil des von den Start- und Steuertransferbits identifizierten Opcode-Bytes ausgewählt. Die Targetadressen und die Opcode-Bytes werden zur Verwendung beim Auswählen einer Targetadresse zum Abrufen aus dem L0 I-Cachespeicher 16 zu der Vorabruf-Steuereinheit 50 geleitet. Die Abrufadressen jedes Verzweigungsbefehls (ermittelt aus der Abrufadresse des Abfolgeabschnitts, einschließlich jedes Verzweigungsbefehls und der Position des Verzweigungsbefehls innerhalb des Abschnitts) werden zum Auswählen einer erfasst/nicht erfasst-Vorhersage, die jedem Verzweigungsbefehl entspricht, zu der Verzweigungsentwicklungstabelle 60 geleitet. Ferner werden die Abrufadressen, die jedem Verzweigungsbefehl entsprechen, zu dem Verzweigungsauswahl-Mux 62 und weiter zu dem Cachespeicher 66 für indirekte Adressen geleitet. Die Targetadresse jedes Verzweigungsbefehls wird zu der Vorwärts-Kollabiereinheit 68 geleitet. Bei einer Ausführungsform ist der Verzweigungsabtaster 58 zum parallelen Abtasten jedes Abfolgeabschnitts für die ersten beiden Verzweigungsbefehle und zum nachfolgenden Zusammenfassen der Abtastergebnisse zum Auswählen der ersten beiden Verzweigungsbefehle innerhalb der Abfolge vorgesehen.
  • Der Verzweigungsabtaster 58 kann ferner bestimmen, ob ein Subroutinen- Aufrufbefehl während eines Taktzyklus abgetastet wird. Der Verzweigungsabtaster 58 kann die Abrufadresse des dem detektierten Subroutine-Aufrufbefehl folgenden Befehls an den Rückkehrstapelspeicher 64 zur Speicherung in dem Rückkehrstapelspeicher 64 leiten.
  • Bei einer Ausführungsform wird, wenn eine Abfolge mehr als zwei Verzweigungsbefehle enthält, die Abfolge während eines nachfolgenden Taktzyklus erneut abgetastet, um den nachfolgenden Verzweigungsbefehl zu identifizieren.
  • Die Abrufadressen der identifizierten Verzweigungsbefehle werden zu der Verzweigungsentwicklungstabelle 60 geliefert, um eine erfasst/nicht erfasst-Vorhersage für jeden Befehl zu ermitteln. Die Verzweigungsentwicklungstabelle 60 enthält mehrere Einrichtungen für erfasst/nicht erfasst-Vorhersagen, die dem zuvor detektierten Verhalten der Verzweigungsbefehle entsprechen. Eine der Vorhersageeinrichtungen wird durch Aufrechterhalten einer Entwicklung der jüngsten Vorhersagen und exklusives ODERieren dieser jüngsten Vorhersagen mit einem Teil der Abrufadressen, die den Verzweigungsbefehlen entsprechen, ausgewählt. Die älteste Vorhersage wird mit dem höchstwertigen Bit innerhalb des Teils der Abrufadresse exklusiv ODERiert und so weiter, bis die jüngste Vorhersage mit dem niederwertigsten Bit innerhalb des Teils der Abrufadresse exklusiv ODERiert wird. Da zwei Vorhersageeinrichtungen pro Taktzyklus ausgewählt werden, hängt die Vorhersageeinrichtung, die dem zweiten Verzweigungsbefehl entspricht, von der Vorhersage des ersten Verzweigungsbefehls ab (zum exklusiven ODERieren mit dem niederwertigsten Bit der entsprechenden Abrufadresse). Die Verzweigungsentwicklungstabelle 60 stellt die zweite Vorhersageeinrichtung durch Auswählen beider Vorhersageeinrichtungen, die möglicherweise gewählt werden (d. h. diejenige Vorhersageeinrichtung, die gewählt werden würde, wenn der erste Verzweigungsbefehl als nicht erfasst vorhergesagt wird, und diejenige Vorhersageeinrichtung, die gewählt werden würde, wenn der erste Verzweigungsbefehl als erfasst vorhergesagt wird), und nachfolgendes Auswählen einer der beiden Vorhersageeinrichtungen anhand der ausgewählten tatsächlichen Vorhersage für den ersten Verzweigungsbefehl bereit.
  • Die Verzweigungsentwicklungstabelle 60 empfängt Informationen über die Ausführung von Verzweigungsinformationen von den Funktionseinheiten 32A-32D. Die Entwicklung der jüngsten Vorhersagen, die dem ausgeführten Verzweigungsbefehl entsprechen, sowie die Abrufadresse des ausgeführten Verzweigungsbefehls werden zum Auswählen einer Vorhersageeinrichtung zu Aktualisierungszwecken sowie des erfasst/nicht erfasst-Ergebnisses des ausgeführten Verzweigungsbefehls bereitgestellt. Die Verzweigungsentwicklungstabelle 60 wählt die entsprechende Vorhersageeinrichtung und aktualisiert die Vorhersageeinrichtung anhand des erfasst/nicht erfasst-Ergebnisses. Bei einer Ausführungsform speichert die Verzweigungsentwicklungstabelle einen Zwei- Moden-Zähler. Der Zwei-Moden-Zähler ist ein Sättigungszähler, der sich bei einem Mindest- und einem Höchstwert sättigt (d. h. durch nachfolgende Dekrementierungen des Mindestwertes und Inkrementierungen des Höchstwertes werden keine Veränderungen in dem Zähler bewirkt). Jedes Mal, wenn ein Verzweigungsbefehl erfasst wird, wird der entsprechende Zähler inkrementiert, und jedes Mal, wenn ein Verzweigungsbefehl nicht erfasst wird, wird der entsprechende Zähler dekrementiert. Das höchstwertige Bit des Zählers zeigt die erfasst/nicht erfasst-Vorhersage an (z. B. erfasst, wenn gesetzt, und nicht erfasst, wenn frei). Bei einer Ausführungsform speichert die Verzweigungsentwicklungstabelle 60 64 K-Vorhersageeinrichtungen und hält eine Entwicklung der 16 jüngsten Vorhersagen aufrecht. Bei jedem Taktzyklus werden die während des Taktzyklus ausgewählten Vorhersagen in die Entwicklung hineingeschoben und die ältesten Vorhersagen aus der Entwicklung herausgeschoben.
  • Der Rückkehrstapelspeicher 64 ist zum Speichern der Rückkehradressen vorgesehen, die delektierten Subroutine-Aufrufbefehlen entsprechen. Der Rückkehrstapelspeicher 64 empfängt die Abrufadresse eines Subroutine-Aufrufbefehls von dem Verzweigungsabtaster 58. Die Adresse des dem Aufrufbefehl (aus der von dem Rückkehrstapelspeicher 64 erzeugten Abrufadresse berechnet) folgenden Bytes wird oben auf den Rückkehrstapelspeicher 64 platziert. Der Rückkehrstapelspeicher 64 liefert die oben auf dem Rückkehrstapelspeicher gespeicherte Adresse an die Vorabruf-Steuereinheit 50 zum Auswählen dieser Adresse als Targetadresse, wenn ein Rückkehrbefehl von dem Verzweigungsabtaster 58 und der Vorabruf-Steuereinheit 50 detektiert wird. Auf diese Weise empfängt jeder Rückkehrbefehl als Targetadresse diejenige Adresse, die dem jüngsten detektierten Aufrufbefehl entspricht. Generell handelt es sich in dem x86-Befehlssatz bei einem Aufrufbefehl um einen Steuertransferbefehl, die spezifiziert, dass die dem Aufrufbefehl folgende Adresse auf den von der x86-Architektur ausgebildeten Stapelspeicher platziert wird. Ein Rückkehrbefehl ist ein Befehl, der die Targetadresse von dem oberen Teil des Stapelspeichers auswählt. Generell werden Aufruf- und Rückkehrbefehle zum Eintreten in bzw. Verlassen von Subroutinen innerhalb einer Codesequenz verwendet. Durch Platzieren von Adressen, die Aufrufbefehlen entsprechen, in den Rückkehrstapelspeicher 64 und Verwenden der Adressen, die sich oben in dem Rückkehrstapelspeicher 64 befinden, als Targetadressen von Rückkehrbefehlen kann die Targetadresse des Rückkehrbefehls korrekt vorhergesagt werden. Bei einer Ausführungsform kann der Rückkehrstapelspeicher 64 16 Einträge aufweisen.
  • Der Cachespeicher 66 für indirekte Adressen speichert Targetadressen, die vorangegangenen Ausführungen von indirekten Verzweigungsbefehlen entsprechen. Die Abrufadresse, die einem indirekten Verzweigungsbefehl entspricht, und die Targetadresse, die der Ausführung des indirekten Verzweigungsbefehls entspricht, werden von den Funktionseinheiten 32A-32D zu dem Cachespeicher 66 für indirekte Adressen geliefert. Der Cachespeicher 66 für indirekte Adressen speichert die von den entsprechenden Abrufadressen indizierten Targetadressen. Der Cachespeicher 66 für indirekte Adressen empfängt die von dem Verzweigungsauswahl-Mux 62 ausgewählte Abrufadresse (in Reaktion auf das Delektieren eines indirekten Verzweigungsbefehls) und liefert, wenn die Abrufadresse ein Treffer in dem Cachespeicher 66 für indirekte Adressen ist, die entsprechende Targetadresse an die Vorabruf-Steuereinheit 50. Bei einer Ausführungsform kann der Cachespeicher 66 für indirekte Adressen 32 Einträge aufweisen. Bei einer besonderen Ausführungsform wird, wenn die Abrufadresse ein Treffer in dem Cachespeicher 66 für indirekte Adressen ist, keine Targetadresse von dem Cachespeicher 66 für indirekte Adressen bereitgestellt. Alternativ kann eine der in dem Cachespeicher 66 für indirekte Adressen gespeicherten Targetadressen als "erratene" Targetadresse ausgewählt werden, falls dies gewünscht ist.
  • Bei einer Ausführungsform wählt die Vorabruf-Steuereinheit 50 die Targetadresse zum Abrufen aus dem L0 I-Cachespeicher 16 aus folgendem aus: (i) der ersten codierten Targetadresse, die dem ersten von dem Verzweigungsabtaster 58 identifizierten Verzweigungsbefehl entspricht; (ii) der von dem Rückkehrstapelspeicher 64 erzeugten Rückkehrstapelspeicheradresse; und (iii) einer nachfolgenden Adresse. Die Vorabruf-Steuereinheit 50 wählt die erste codierte Targetadresse aus, wenn eine Decodierung des dem ersten Befehl entsprechenden Opcodes anzeigt, dass der Befehl ein relativer Verzweigungsbefehl sein kann. Wenn die Decodierung anzeigt, dass der Befehl ein Rückkehrbefehl sein kann, wird die Rückkehrstapelspeicheradresse ausgewählt. Andernfalls wird die nachfolgende Adresse ausgewählt. Indirekte Tar getadressen und relative 32-Bit-Targetadressen werden aus dem L1 I-Cachespeicher 14 vorabgerufen. Da diese Arten von Targetadressen häufig verwendet werden, wenn die Targetadresse nicht nahe dem Verzweigungsbefehl in dem Speicher liegt, ist es weniger wahrscheinlich, dass diese Art von Targetadressen den L0 I-Cachespeicher 16 treffen. Ferner kann bei einer Ausführungsform, wenn der zweite Verzweigungsbefehl als erfasst vorhergesagt ist und der erste Verzweigungsbefehl als nicht erfasst vorhergesagt ist oder der erste Verzweigungsbefehl eine Vorwärts-Verzweigung ist, die den zweiten Verzweigungsbefehl in der Befehlsabfolge nicht eliminiert, die zweite Adresse, die der zweiten Verzweigungsvorhersage entspricht, während des nachfolgenden Taktzyklus als Targetabrufadresse verwendet werden.
  • Es sei darauf hingewiesen, dass, wenn eine codierte Targetadresse ausgewählt wird, die tatsächliche Targetadresse an den L0 I-Cachespeicher 16 übergeben werden kann. Die Vorabruf-Steuereinheit 50 kann zum Vorberechnen jeder möglichen oberen/unteren Targetadresse und zum Auswählen der korrekten Adresse anhand der codierten Targetadresse vorgesehen sein. Alternativ kann die Vorabruf-Steuereinheit 50 registrieren, an welchen Speicherplätzen in dem L0 I-Cachespeicher die oberen und unteren Cachespeicherzeilen gespeichert werden, und die Speicherplätze direkt ohne Kennzeichenvergleich auswählen.
  • Die Vorwärts-Kollabiereinheit 68 empfängt die Targetadressen und Positionen innerhalb der Befehlsabfolge jedes ausgewählten Verzweigungsbefehls sowie die erfasst/nicht erfasst-Vorhersagen. Die Vorwärts-Kollabiereinheit 68 ermittelt anhand der empfangenen Vorhersagen, welche Befehle innerhalb der Abfolge aufgehoben werden sollen. Wenn der erste Verzweigungsbefehl als erfasst vorhergesagt worden ist und rückwärts gerichtet ist (d. h. die Verschiebung negativ ist), werden sämtliche dem ersten Verzweigungsbefehl folgende Befehle aufgehoben. Wenn der erste Verzweigungsbefehl als erfasst vorhergesagt ist und vorwärts gerichtet ist, die Verschiebung jedoch klein ist (z. B. innerhalb der Befehlsabfolge), werden die Befehle, die zwischen dem ersten Verzweigungsbefehl und der Targetadresse liegen, aufgehoben. Der zweite Verzweigungsbefehl wird ähnlich behandelt, wenn er sich gemäß der Vorhersage des ersten Verzweigungsbefehls immer noch innerhalb der Abfolge befindet. Aufhebungsanzeigen für die Befehle innerhalb der Abfolge werden in der Befehlsschlange 20 gesetzt.
  • Die Vorabruf-Steuereinheit 50 kann ferner zum Auswählen einer Cachespeicherzeile in dem L0 I-Cachespeicher 16 vorgesehen sein, die durch eine Cachespeicherzeile aus dem L1 I-Cachespeicher 14 ersetzt werden soll. Bei einer Ausführungsform kann die Vorabruf-Steuereinheit 50 einen ältesten (LRU) Ersatz-Algorithmus anwenden.
  • Fig. 3 zeigt ein Blockschaltbild einer Ausführungsform der Umbenennungs-/Planungseinheit 24. Andere Ausführungsformen sind möglich und werden in Betracht gezogen. Bei der in Fig. 3 gezeigten Ausführungsform weist die Umbenennungs-/Planungseinheit 50 auf: einen FP-Stapelspeicher für die Absolut- Konvertiereinheit 70, eine FP-Abbildungseinrichtung 72, eine ESP-Lookahead- Einheit 74, eine Umbenennungskennzeichnungseinheit 76 für künftige Dateien, eine strukturelle Umbenennungskennzeichnungseinheit 78, Lookahead- Addiereinrichtungen 80, eine Planungseinrichtung 82, eine Ergebnisschlange 84, eine Planungseinrichtungs-Steuereinheit 86, eine erste Aufnahmekernspeichereinheit 88 und eine zweite Aufnahmekernspeichereinheit 90. Der FP- Stapelspeicher für die Absolut-Konvertiereinheit 70 und die ESP-Lookahead- Einheit 74 sind mit der Ausrichteinheit 22 gekoppelt. Der FP-Stapelspeicher für die Absolut-Konvertiereinheit 70 ist mit der FP-Abbildungseinrichtung 72 und einem Multiplexer 92 gekoppelt, welcher ferner mit der Ausrichteinheit 22 und der Umbenennungskennzeichnungseinheit 76 für künftige Dateien gekoppelt ist. Die ESP-Lookahead-Einheit 74 ist mit den Lookahead-Addiereinrichtungen 80 gekoppelt, die ferner zum Empfangen einer kumulativen ESP-Aktualisierung vorgesehen und mit der Planungseinrichtung 82 gekoppelt ist. Die Lookahead-Addiereinrichtungen 80 und die Umbenennungskennzeichnungseinheit 76 für künftige Dateien sind mit der Planungseinrichtung 82 gekoppelt.
  • Die Umbenennungskennzeichnungseinheit 76 für künftige Dateien ist ferner mit der Planungseinrichtungs-Steuereinheit 86 und der strukturellen Umbenennungskennzeichnungseinheit 78 gekoppelt. Die strukturelle Umbenennungskennzeichnungseinheit 78 ist mit der Ergebnisschlange 84 gekoppelt, die ferner mit der Planungseinrichtungs-Steuereinheit 86 gekoppelt ist. Die ersten und zweiten Aufnahmekernspeichereinheiten 88 und 90 sind mit der Planungseinrichtung 82 und den ersten und zweiten Umbenennungsregisterdateien 30A bzw. 30B gekoppelt. Es sei darauf hingewiesen, dass eine oder mehrere (nicht gezeigte) Decodiereinheiten parallel mit dem FP-Stapelspeicher für die Absolut-Konvertiereinheit 70 und der ESP-Lookahead-Einheit 74 oder vor oder hinter diesen Einheiten in Reihe geschaltet sein können, um Befehlsdecodieroperationen auszuführen.
  • Wie oben beschrieben, richtet die Ausrichteinheit 22 Befehle auf einen Satz von Ausgabepositionen innerhalb der Umbenennungs-/Planungseinheit 24 aus. Die Ausgabepositionen werden innerhalb der Planungseinrichtung 82 und der Ergebnisschlange 84 aufrechterhalten. Vor dem Speichern der Befehle in der Planungseinrichtung 82 und der Ergebnisschlange 84 werden die Befehle an den FP-Stapelspeicher für die Absolut-Konvertiereinheit 80 und die ESP- Lookahead-Einheit 74 übergeben.
  • Der FP-Stapelspeicher für die Absolut-Konvertiereinheit 70 ist für Ausführungsformen des Prozessors 10 vorgesehen, bei denen die Gleitkommaregister als Stapelspeicher behandelt werden (z. B. bei der x86-Gleitkommaarchitektur). Eines der Gleitkommaregister wird von einem oberen Teil eines Stapelzeigers in dem Gleitkommastatusregister als oberer Teil des Stapelspeichers identifiziert, und die anderen Gleitkommaregister befinden sich entsprechend ihrer relativen Distanz von dem von dem oberen Teil des Stapelspeichers identifizierten Register an bestimmten Positionen innerhalb des Stapelspeichers. Einige Gleitkommabefehle, die zusätzlich zu dem oder anstelle des Spezifizierens einer Operation bei einem oder mehreren Einträgen in den Stapelspeicher vorgesehen sind, können das Eingeben eines Wertes in den oder das Abrufen eines Wertes aus dem Stapelspeicher spezifizieren. Der FP-Stapelspeicher für die Absolut-Konvertiereinheit 70 konvertiert die in den Gleitkommabefehlen enthaltenen, zu dem Stapelspeicher relativen Registerspezifizierer in absolute Registerspezifizierer (d. h. Registernummern, die eine Gleitkommaregisterdatei adressieren). Der FP-Stapelspeicher für die Absolut-Konvertiereinheit 70 hält einen spekulativen oberen Teil des Stapelzeigers, der zuvor entsandten Gleitkommabefehlen entspricht, aufrecht, um die Konvertierung durchzuführen. Ferner ermittelt der FP-Stapelspeicher für die Absolut- Konvertiereinheit 70 den Effekt jedes Gleitkommabefehls auf den oberen Teil des Stapelzeigers, um die Registerspezifizierer für den nächsten Gleitkommabefehl zu konvertieren.
  • Die x86-Gleitkommaarchitektur spezifiziert ferner einen Austauschbefehl, mit dem die in zwei Registern vorhandenen Werte ausgetauscht werden. Der FP- Stapelspeicher für die Absolut-Konvertiereinheit 70 kann den Austauschbefehl (und die nachfolgenden Befehle) beschleunigen, und zwar durch Austauschen der absoluten Registerspezifizierer, die den beiden Befehlen entsprechen, anstelle des tatsächlichen Austauschs der in den Registern befindlichen Werte. Die FP-Abbildungseinrichtung 72 ist für diesen Zweck vorgesehen. Die FP-Abbildungseinrichtung 72 registriert anfangs die absoluten Registernummern in der Reihenfolge von Null bis N-1 (z. B. 0 bis 7 bei der x86-Architektur). Wenn Austauschbefehle ausgeführt werden, werden die von den Befehlen beeinflussten absoluten Registerspezifizierer innerhalb der FP-Abbildungseinrichtung 72 ausgetauscht. Die absolute Registernummer für einen bestimmten Gleitkommabefehl kann durch Lesen eines Eintrags in die Gleitkomma-Abbildungseinrichtung 72, der von dem aktuellen spekulativen oberen Teil des Stapelzeigers ausgewählt worden ist, und der Position des spezifizierten Registers in dem Stapelspeicher ermittelt werden (z. B. der absolute Registerspezifizierer bei Nichtvorhandensein von Austauschbefehlen).
  • Das Ausgangssignal des FP-Stapelspeichers für die Absolut-Konvertiereinheit 70 wird zu einem Eingang des Multiplexers (Mux) 92 geliefert. Die Original- Registerspezifizierer werden zu dem anderen Eingang des Multiplexers 92 geliefert. Bei jedem Befehl wählt der FP-Stapelspeicher für die Absolut-Konvertiereinheit 70 entweder sein Ausgangssignal oder den Originalbefehl, je nachdem, ob dieser Befehl ein Gleitkommabefehl ist oder nicht. Es sei darauf hingewiesen, dass, da die Austauschbefehle die Reihenfolge der absoluten Registernummern verändern können, die Registernummern (die absolut sind) von Multimediabefehlen auch bei Ausführungsformen mit der x86-Mikroprozessorarchitektur von dem FP-Stapelspeicher für die Absolut-Konvertiereinheit 70 konvertiert werden. Es sei ferner darauf hingewiesen, dass die Opcode- und andere Befehlsinformationen (z. B. Direktfelder und Verschiebungsfelder) unverändert den Mux 92 und die Umbenennungskennzeichnungseinheit 76 für künftige Dateien durchlaufen, um in der Planungseinrichtung 82 gespeichert zu werden.
  • Die ESP-Lookahead-Einheit 74 wird in Kombination mit den Lookahead-Addiereinrichtungen 80 zum Erzeugen spekulativer Werte für das ESP-Register für jeden Befehl verwendet, der den ESP als Quellenoperanden hat (bei Ausführungsformen des Prozessors 10 mit der x86-Architektur). Da die x86-Architektur relativ wenige Register spezifiziert, von denen viele keine Universalregister sind, verarbeiten viele x86-Befehle Stapelspeicheroperanden. Die Stapelspeicheroperanden können mittels des ESP-Registers als Adressenoperand lokalisiert werden. Ferner können viele Befehle das ESP-Register modifizieren (z. B. Eingeben und Abrufen von Werten). Das Eingeben und Abrufen von Werten führt zu einer Inkrementierung oder Dekrementierung des ESP- Registers. Entsprechend können viele Modifikationen des ESP-Registers frühzeitig erzeugt werden, und zwar als konstanter Wert, der dem ESP-Register hinzuaddiert oder von diesem subtrahiert wird.
  • Die ESP-Lookahead-Einheit 74 tastet die in dem Satz von Ausgabepositionen bereitstellenden Befehle ab, um die Konstanten zu erzeugen, die dem vor der Ausführung des ersten Befehls innerhalb des Satzes von Ausgabepositionen in der ESP-Lookahead-Einheit 74 bestehenden Wert hinzuaddiert werden. Diese Konstanten können dem spekulativen Lookahead-Wert des ESP-Registers (entsprechend den zuvor von dem Prozessor 10 entsandten Befehlen) hinzuaddiert werden, um den ESP-Wert für jeden Befehl zu erzeugen. Mit anderen Worten: die für die erste Ausgabeposition (in der Programmreihenfolge) erzeugte Konstante enthält die Effekte des Befehls in der ersten Ausgabeposition (wenn der Befehl den ESP vor dessen Verwendung als Adressenoperand, z. B. eine Eingabe, modifiziert). Die für die zweite Ausgabeposition erzeugte Konstante enthält die Effekte des Befehls in der ersten Ausgabeposition und die Effekte des Befehl in der zweiten Ausgabeposition (wenn der Befehl den ESP vor dessen Verwendung als Adressenoperand, z. B. eine Eingabe, modifiziert). Generell enthält die für die Ausgabeposition N erzeugte Konstante die auf den ESP wirkenden Effekte der Befehle von der ersten Ausgabeposition bis zur Ausgabeposition N-1 und die Effekte des Befehls in der Ausgabeposition N (wenn der Befehl den ESP vor dessen Verwendung als Adressenoperand, z. B. eine Eingabe, modifiziert).
  • Die von der ESP-Lookahead-Einheit 72 erzeugten Konstanten werden zu den Lookahead-Addiereinrichtungen 80 geliefert. Die Lookahead-Addiereinrichtungen 80 halten einen kumulativen EPS-Aktualisierungswert aufrecht, der die kumulative spekulative Aktualisierung des ESP-Registers gemäß den Befehlen, die seit der letzten unbestimmbaren Aktualisierung spekulativ entsandt worden sind, anzeigt. Die Lookahead-Addiereinrichtungen 80 addieren die von der ESP-Lookahead-Einheit 76 kommenden Konstanten zu dem kumulativen ESP- Wert hinzu, der von den Lookahead-Addiereinrichtungen 80 aufrechterhalten wird, um Lookahead-ESP-Werte für jeden Befehl zu erzeugen. Bestimmte Aktualisierungen des ESP sind möglicherweise nicht von der ESP-Lookahead- Einheit 74 bestimmbar (z. B. Übertragungen von einem anderen Register in den ESP, Addieren eines registrierten Werts zu dem ESP etc.). Wenn die ESP- Lookahead-Einheit 74 eine solche unbestimmbare Aktualisierung delektiert, kann die ESP-Lookahead-Einheit 74 die Befehle blockieren, die den die unbestimmbare Aktualisierung durchführenden Befehlen folgen, bis dieser Befehl ausgeführt wird. Die Aktualisierung kann von den ESP-Addiereinrichtungen 80 empfangen werden, um eine nachfolgende Erzeugung spekulativer Lookahead-ESP-Werte zu ermöglichen. Bei einer Ausführungsform können die Aktualisierungen des ESP der folgenden x86-Befehle von der ESP-Lookahead- Einheit 74 ermittelt werden: CALL; RET 0,N; PUSH; POP; ADD ESP, IMM; ENTER 0,N; LEAVE 0,N; MOV EBP,ESP; und MOV ESP,EBP.
  • Die von dem Mux 92 ausgewählten Registerspezifizierer werden zu Umbenennungszwecken zu der Umbenennungskennzeichnungseinheit 76 für künftige Dateien geleitet. Die Umbenennungskennzeichnungseinheit 76 für künftige Dateien liefert das aktuelle Umbenennungskennzeichen zu jedem Quellenregister und ordnet ein neues Umbenennungsregister aus einer Liste freier Umbenennungsregister jedem Zielregister zu. Die Umbenennungskennzeichnungseinheit 76 für künftige Dateien löst ferner die Abhängigkeiten zwischen gleichzeitig entsandten Befehlen auf. Schließlich aktualisiert die Umbenennungskennzeichnungseinheit 76 für künftige Dateien ihre künftige Datei der Umbenennungskennzeichen, um die neu zugeordneten Umbenennungsregister zu repräsentieren.
  • Die Befehle, einschließlich der Umbenennungsregisterkennzeichen und Lookahead-ESP-Werte von den Lookahead-Addiereinrichtungen 80, werden zu Speicherzwecken zu der Planungseinrichtung 82 geliefert. Bei einer Ausführungsform ist die Planungseinrichtung 82 "zeilenorientiert", wobei eine Speicherzeile, die Befehle und dazugehörige Informationen von jeder Ausgabeposition speichern kann, zugeordnet wird, selbst wenn die Befehle nicht jede Ausgabeposition ausfüllen. Ferner wird die Speicherung in der Ergebnisschlange 84 zum Speichern der Zielregisterumbenennungskennzeichen zugeordnet.
  • Wenn die Befehle in der Planungseinrichtung 82 gespeichert sind, warten die Befehle auf die Gültigkeit ihrer Quellenoperanden, und zu diesem Zeitpunkt können die Befehle zu Ausführungszwecken ausgewählt ("eingeplant") werden. Die Umbenennungskennzeichnungseinheit 76 für künftige Dateien hält eine Gültigkeitsanzeige für jedes Umbenennungsregister aufrecht, das ein aktuelles Umbenennungsregister ist (d. h. ein aktuell einem speziellen strukturierten Register zugeordnetes Register), so dass Befehle, die bereits gültige Quellenoperanden aufweisen, die Gültigkeit dieser Quellenoperanden bei Speicherung in die Planungseinrichtung 82 anzeigen. Umbenennungsregister, die ungültig sind, zeigen an, dass der Quellenoperand noch nicht gültig ist (d. h. noch nicht in Reaktion auf die Ausführung des Befehls, der das Umbenennungsregister aktualisiert, aktualisiert worden ist) und daher der Befehl noch nicht eingeplant werden kann.
  • Die ersten und zweiten Aufnahmekernspeichereinheiten 88 und 90 prüfen die Befehle innerhalb der Planungseinrichtung 82, die eingeplant werden können, und planen Befehle für die entsprechenden ersten bzw. zweiten Kernspeicher ein. Der erste Kernspeicher weist die Funktionseinheiten und die mit der Umbenennungsregisterdatei 30A verbundenen Adressenerzeugungseinheiten auf, und ähnlich weist der zweite Kernspeicher die Funktionseinheiten und die mit der Umbenennungsregisterdatei 30B verbundenen Adressenerzeugungseinheiten auf. Die von den ersten und zweiten Aufnahmekernspeichereinheiten 88 und 90 ausgewählten Befehle werden zu den Umbenennungsregisterdateien 30A und 30B zum Lesen der Operanden und ferner zu der Planungseinrichtungs-Steuereinheit 86 geliefert.
  • Die Planungseinrichtungs-Steuereinheit 86 registriert das Zielumbenennungsregister für jeden eingeplanten Befehl und bestimmt, wann das Umbenennungsregister gültig ist. Wenn bestimmt wird, dass das Umbenennungsregister gültig ist, wird das Umbenennungskennzeichen, das dem Umbenennungsregister entspricht, an die Planungseinrichtung übertragen. Jedes Quellenregisterumbenennungskennzeichen, das mit dem übertragenen Kennzeichen übereinstimmt, wird als gültig gekennzeichnet. Bei Ganzzahlen-, Gleitkomma- und Multimedia-Funktionseinheiten gemäß der vorliegenden Ausführungsform ist die Anzahl von Taktzyklen bis zur Gültigkeit des Umbenennungsregisters eine von dem Befehlstyp und dem Befehl bestimmte Konstante (z. B. können Multiplikationen mehr Taktzyklen aufweisen als Additionen etc.). Speicheroperationen werden, da sie Cachespeicher-Nichttreffer und somit variable Verzögerungen gegenüber der Planung der Umbenennungsgültigkeit enthalten können, der Planungseinrichtungs-Steuereinheit 86 von dem Daten-Cachespeicher 38 als gültig oder nicht gültig angezeigt. Die Planungseinrichtungs- Steuereinheit 86 kann die Gültigkeit von Umbenennungskennzeichen, die Speicheroperationen entsprechen, zurückhalten, bis eine Gültig-Anzeige durch den Daten-Cachespeicher 38 erfolgt.
  • Die Planungseinrichtungs-Steuereinheit 86 überträgt ferner die validierten Registerumbenennungskennzeichen an die Umbenennungskennzeichnungseinheit 76 für künftige Dateien (so dass die Umbenennungskennzeichnungseinheit 76 für künftige Dateien die Umbenennungskennzeichen als gültig anzeigen kann, wenn diese noch die aktuellen Registerumbenennungen in der künftigen Datei sind) und an die Ergebnisschlange 84 (so dass die Ergebnisschlange 84 anzeigen kann, dass der entsprechende Befehl erfolgreich ausgeführt worden ist).
  • Die Ergebnisschlange 84 ist zum Verarbeiten einer falschen Verzweigungsvorhersage und anderer Ausnahmesituationen und zum Zurückziehen von Befehlen in der korrekten Reihenfolge vorgesehen. Ein Befehl wird dadurch zurückgezogen, dass die Umbenennungskennzeichen, die die Umbenennungsregister identifizieren, welche dem Zielort des Befehls zugeordnet sind, in der strukturellen Umbenennungskennzeichnungseinheit 78 gespeichert werden. Die Ergebnisschlange 84 kann das dem Zielregister des Befehls zugeordnete Umbenennungskennzeichen sowie die Nummer des strukturierten Zielregisters speichern. Auf diese Weise kann das Umbenennungskennzeichen dem entsprechenden strukturierten Register in der strukturierten Umbenennungskennzeichnungseinheit 78 zugeordnet werden. Das vorhergehende Umbenennungskennzeichen, das diesem strukturierten Register entspricht, kann dann zu der freien Liste zurückgesandt werden. Ferner empfängt die Ergebnisschlange 84 Fehlvorhersage-Umleitungs-/Ausnahmeinformationen von den Funktionseinheiten, und zwar zum Bestimmen, bei welchen Befehlen eine Ausnahmesituation aufgetreten ist. Beim Zurückziehen eines Befehls, der falsch vorhergesagt worden ist, tritt eine andere Art von Ausnahmesituation auf und signalisiert die Ergebnisschlange 84 der strukturellen Umbenennungskennzeichnungseinheit 84, dass sie ihren Inhalt in die Umbenennungskennzeichnungseinheit 76 für künftige Dateien kopieren soll. Die künftige Datei für Umbenennungskennzeichen kann dadurch aus der Ausnahmesituation zurückgewonnen werden. Es sei darauf hingewiesen, dass, wenn Befehle aus dem korrigierten Pfad abgerufen werden und vor der Wiederherstellung der Umbenennungen der künftigen Dateien als strukturelle Umbenennungen in der Umbenennungskennzeichnungseinheit 76 für künftige Dateien ankommen, die Befehle blockiert werden können, bis die Ausnahmesituation für einen Befehl und vorhergehende Befehle aufgehoben ist und die künftigen Dateikennzeichen zurückgewonnen sind. Es sei ferner darauf hingewiesen, dass bei Zurückziehen eines Übertragungsbefehls, für den die Kennzeichen ausgetauscht worden sind, die strukturierten Kennzeichen der beiden Register für den Übertragungsbefehl ebenfalls ausgetauscht werden können.
  • Bei einer Ausführungsform kann die Zuordnung einer Befehlszeile zu der Planungseinrichtung 82 bei erfolgreicher Einplanung sämtlicher Befehle in der Zeile oder Invalidierung der Zeile aufgrund einer falschen Vorhersage oder einer Ausnahmesituation aufgehoben werden. Die Zuordnung der Befehlszeile zu der Ergebnisschlange 84 kann bei einer Entscheidung für ein Zurückziehen oder bei Invalidierung aufgrund von falscher Vorhersage oder einer Ausnahmesituation aufgehoben werden.
  • Es sei darauf hingewiesen, dass verschiedene Speichervorrichtungen in Fig. 2 und 3 gezeigt sind (z. B. Vorrichtungen 79A, 79B und ähnliche Vorrichtungen in Fig. 2 und Vorrichtungen 79C, 79D und ähnliche Vorrichtungen in Fig. 3). Die Speichervorrichtungen repräsentieren Latch-Vorrichtungen, Register, Flipflops und ähnliches, die in separaten Pipeline-Stufen verwendet werden können. Die in Fig. 2 und 3 gezeigten speziellen Pipeline-Stufen sind jedoch nur eine Ausführungsform geeigneter Pipeline-Stufen für eine Ausführungsform des Prozessors 10. Bei anderen Ausführungsformen können andere Pipeline- Stufen verwendet werden.
  • Fig. 4 zeigt ein Blockschaltbild einer Ausführungsform der ESP-Lookahead-Einheit 74. Andere Ausführungsformen sind möglich und werden in Betracht gezogen. Bei der in Fig. 4 gezeigten Ausführungsform weist die ESP-Lookahead- Einheit 74 mehrere Konstantenerzeugungseinrichtungen 100A-100F und eine Spaltungs- und Übertragungsdetektiereinheit 102 auf. Die Konstantenerzeugungseinrichtungen 100 sind zum Empfangen von Befehlen von der Ausrichteinheit 22 vorgesehen und liefern Konstanten an die Lookahead-Addiereinrichtungen 80. Die Spaltungs- und Übertragungsdetektiereinheit 102 ist ebenfalls zum Empfangen von Befehlen von der Ausrichteinheit 22 vorgesehen. Die Spaltungs- und Übertragungsdetektiereinheit 102 liefert aufgespaltene Steuerinformationen über einen Spaltungs-Steuerbus 104 sowie ein Austauschkennzeichnungssignal über eine Austauschkennzeichnungsleitung 106. Ferner ist die Spaltungs- und Übertragungsdetektiereinheit 102 zum Empfangen eines ESP-Wartesignals auf einer im Wartezustand befindlichen ESP-Leitung 108 vorgesehen.
  • Die Spaltungs- und Übertragungsdetektiereinheit 102 tastet die von der Ausrichteinheit 22 erzeugten Befehle ab und ist zum Detektieren von Übertragungsbefehlen vom Basiszeigerregister zum Stapelzeigerregister (und umgekehrt) vorgesehen. Bei Detektierung eines solchen Befehls drückt die Spaltungs- und Übertragungsdetektiereinheit 102 das Austauschkennzeichnungssignal auf der Austauschkennzeichnungsleitung 106 der Umbenennungskennzeichnungseinheit 76 für künftige Dateien auf. Die Umbenennungskennzeichnungseinheit 76 für künftige Dateien ist zum Austauschen der Stapelzeiger- und Basiszeigerkennzeichen im Anschluss an die Verarbeitung der Zuordnung der Umbenennungsregister für die Befehle durch die ESP-Lookahead-Einheit 74 vorgesehen. Die Spaltungs- und Übertragungsdetektiereinheit 102 ermittelt aus dem Zustand der im Wartezustand befindlichen ESP-Leitung nach dem Austausch der Kennzeichen, ob der neue Wert des Stapelzeigerregisters in den Umbenennungsregisterdateien 30 gültig ist oder nicht. Wenn der Stapelzeiger immer noch im Wartezustand ist (d. h. nicht gültig ist), blockiert die Spaltungs- und Übertragungsdetektiereinheit 102 die nachfolgende Befehlsentsendung, bis das Stapelzeigerregister gültig wird. Wenn das Stapelzeigerregister gültig wird, können die Lookahead-Addiereinrichtungen 80 den neuen Wert des Stapelzeigerregisters zur Verwendung mit von den Konstantenerzeugungseinrichtungen 100 erzeugten Konstanten lesen.
  • Bei der vorliegenden Ausführungsform ist die Spaltungs- und Übertragungsdetektiereinheit 102 ferner zum Detektieren von Aktualisierungen an dem Stapelzeigerregister vorgesehen, die nicht von den Konstantenerzeugungseinrichtungen 100 bestimmbar sind. Bei einer besonderen oben genannten Ausführungsform sind Aktualisierungen an dem Stapelzeigerregister gemäß den folgenden Befehlen bestimmbar: CALL; RET 0,N; PUSH; POP; ADD ESP, IMM; ENTER 0,N; LEAVE 0,N; MOV EBP,ESP; und MOV ESP,EBP. Weitere Aktualisierungen des Stapelzeigerregisters werden von der Spaltungs- und Übertragungsdetektiereinheit 102 delektiert. Bei Detektierung einer solchen unbestimmbaren Aktualisierung spaltet die Spaltungs- und Übertragungsdetektiereinheit 102 den Befehlssatz von der Ausrichteinheit 22 (die "Zeile") bei der unbestimmbaren Aktualisierung auf. Befehle, die vor dem Befehl mit der unbestimmbaren Aktualisierung auftreten und letzteren umfassen, werden zu den Lookahead-Addiereinrichtungen 80 und der Umbenennungskennzeichnungseinheit 76 für künftige Dateien entsandt, während die übrigen Befehle blockiert werden, bis die unbestimmbare Aktualisierung abgeschlossen ist. Wenn eine Zeile aufgespalten wird, informiert die Spaltungs- und Übertragungsdetektiereinheit 102 die Ausrichteinheit 22, die Planungseinrichtung 82 und die Umbenennungskennzeichnungseinheit 76 für künftige Dateien über den Spaltungs-Steuerbus 104. Der Befehl, mit dem die Spaltung erzeugt wird, wird zusammen mit einem aktivierten Steuersignal erzeugt, das anzeigt, dass die Spaltung erfolgt.
  • Die Spaltungs- und Übertragungsdetektiereinheit 102 kann die Zeile auch am auf den Stapelzeigerbefehl weisenden Übertragungs-Basiszeiger aufspalten. Obwohl die Befehle durch Austausch der Kennzeichen in der künftigen Kennzeichnungsdatei beschleunigt werden, ist der von den Lookahead-Addiereinrichtungen 80 aufrechterhaltene aktuelle Lookahead-Wert bei Entsendung des auf den Stapelzeigerbefehl weisenden Übertragungs-Basiszeigers ungültig. Entsprechend wird die Zeile aufgespalten und werden die nachfolgenden Befehle blockiert, bis das neue Stapelzeigerumbenennungsregister gültig wird. Das neue Stapelzeigerumbenennungsregister kann bereits gültig sein, und in diesem Fall erfolgt keine Blockierung und wird der neue Wert gelesen, oder es erfolgt eine Blockierung, bis der Wert gültig wird und gelesen werden kann.
  • Es sei darauf hingewiesen, dass bei der vorliegenden Ausführungsform Übertragungen von dem Stapelzeigerregister zu dem Basiszeigerregister detektiert und durch Austauschen von Kennzeichen verarbeitet werden können. Da jedoch das Stapelzeigerregister nicht tatsächlich von dem Befehl modifiziert wird, wird der Stapelzeiger-Lookahead-Wert nicht ungültig. Entsprechend wird die Zeile in diesem Fall möglicherweise nicht aufgespalten. Der Einfachheit halber kann bei einer Ausführungsform in dem Fall, in dem eine Übertragung von dem Basiszeiger zu dem Stapelzeiger innerhalb derselben Zeile erfolgt, die Zeile jedoch an der Übertragung vom Stapelzeiger zum Basiszeiger aufgespalten werden.
  • Jede Konstantenerzeugungseinrichtung 100A-100F entspricht einer der Ausgabepositionen, in die Befehle von der Ausrichteinheit 22 ausgerichtet werden, und erzeugt eine Konstante, die die kumulativen Aktualisierungen des ESP derjenigen Befehle mit der Zeile anzeigt, die vor dieser Ausgabeposition liegen und diese Ausgabeposition einschließen. Entsprechend tastet die Konstantenerzeugungseinrichtung 100A (die die Konstante für die Ausgabeposition 0 erzeugt) den Befehl innerhalb der Ausgabeposition 0 ab. Die Konstantenerzeugungseinrichtung 100B tastet die Befehle innerhalb der Ausgabepositionen 0 und 1 ab etc. Die Konstantenerzeugungseinrichtung 100F erzeugt zwei Konstanten. Die erste Konstante entspricht dem Befehl innerhalb der Ausgabeposition 5, während die zweite Konstante die kumulative Aktualisierung des Befehlssatzes anzeigt. Die von der Konstantenerzeugungseinrichtung 100F erzeugten ersten und zweiten Konstanten können dann voneinander abweichen, wenn der Befehl innerhalb der Ausgabeposition 5 den Wert des ESP als Quelle benutzt und dann den Wert inkrementiert oder dekrementiert, um diesen in dem ESP-Register als Ziel (z. B. POP) zu speichern. Alternativ kann die kumulative Konstante separat erzeugt werden (z. B. von der Spaltungs- und Übertragungsdetektiereinheit 102).
  • Fig. 5 zeigt ein Ablaufdiagramm der Operation einer Ausführungsform der Spaltungs- und Übertragungsdetektiereinheit 102 beim Abtasten eines von der Ausrichteinheit 22 erzeugten Befehlssatzes. Andere Ausführungsformen sind möglich und werden in Betracht gezogen. Obwohl die in Fig. 5 gezeigten Schritte aus Gründen des besseren Verständnisses in serieller Reihenfolge gezeigt sind, können die Schritte in einer beliebigen geeigneten Reihenfolge durchgeführt werden. Ferner können die Schritte in einer Vielzahl von parallelen Moden in einer kombinatorischen Logik in der Spaltungs- und Übertragungsdetektiereinheit 102 durchgeführt werden.
  • Wenn die Spaltungs- und Übertragungsdetektiereinheit 102 eine Übertragung von dem Stapelzeiger zu dem Basiszeiger (Entscheidungsblock 110) detektiert, signalisiert die Spaltungs- und Übertragungsdetektiereinheit 102 der Umbenennungskennzeichnungseinheit 76 für künftige Dateien, dass diese die Basiszeiger- und Stapelzeigerkennzeichen austauschen soll (Schritt 112). Ferner spaltet die Spaltungs- und Übertragungsdetektiereinheit 102 die Zeile an dem Übertragungsbefehl und ist die Verarbeitung der Zeile für den aktuellen Taktzyklus abgeschlossen. Auf die Spaltung folgende Befehle werden von der Ausrichteinheit 22 in einem nachfolgenden Taktzyklus erneut erzeugt.
  • Wenn die Spaltungs- und Übertragungsdetektiereinheit 102 eine Übertragung von dem Basiszeiger zu dem Stapelzeiger delektiert (Entscheidungsblock 114), signalisiert die Spaltungs- und Übertragungsdetektiereinheit 102 auf ähnlich Weise der Umbenennungskennzeichnungseinheit 76 für künftige Dateien, dass diese die Basiszeiger- und Stapelzeigerkennzeichen austauschen soll (Schritt 116). Ferner spaltet die Spaltungs- und Übertragungsdetektiereinheit 102 die Zeile an dem Übertragungsbefehl auf und ist die Verarbeitung der Zeile für den aktuellen Taktzyklus abgeschlossen. Auf die Spaltung folgende Befehle können von der Ausrichteinheit 22 in einem nachfolgenden Taktzyklus erzeugt werden. Ferner prüft die Spaltungs- und Übertragungsdetektiereinheit 102 das ESP-Wartesignal von der Umbenennungskennzeichnungseinheit 76 für künftige Dateien nach dem Austausch der Kennzeichen (bei einer besonderen Ausführungsform z. B. in dem nachfolgenden Taktzyklus). Wenn das Stapelzeigerkennzeichen ansteht (Entscheidungsblock 118), blockiert die Spaltungs- und Übertragungsdetektiereinheit 102 nachfolgende Befehle, bis das Stapelzeigerumbenennungsregister (d. h. das frühere Basiszeigerumbenennungsregister) gültig ist (Schritt 120). Danach kann der neue Wert des Stapelzeigerregisters aus den Umbenennungsregisterdateien 30 ausgelesen werden (Schritt 122). Schritt 122 ist aus Gründen der Klarheit in dem Ablaufdiagramm aufgeführt, obwohl bei der vorliegenden Ausführungsform der Schritt 122 von den Lookahead-Addiereinrichtungen 80 durchgeführt werden kann.
  • Die Spaltungs- und Übertragungsdetektiereinheit 102 kann ferner einen abweichenden Zustand einer aufgespaltenen Zeile detektieren (Entscheidungsblock 124). Es können z. B. andere unbestimmbare Aktualisierungen des ESP detektiert werden. Ferner können andere Beschränkungen der Befehle, die gleichzeitig entsandt werden können, auf diese Weise detektiert werden. Solche Beschränkungen können wünschenswert sein, wenn die Hardware in dem Prozessor 10 durch Anwendung dieser Beschränkungen vereinfacht werden kann. Bei Detektierung eines abweichenden Zustands der aufgespaltenen Zeile spaltet die Spaltungs- und Übertragungsdetektiereinheit 102 die Zeile an dem identifizierten Befehl auf und ist die Verarbeitung der Zeile abgeschlossen (Schritt 126).
  • Andererseits geht, wenn keine der oben genannten Zustände delektiert werden, die Zeile zur nächsten Pipeline-Stufe weiter und wartet die Spaltungs- und Übertragungsdetektiereinheit 102 auf die nächste Zeile von der Ausrichteinheit 22.
  • Fig. 6 zeigt eine typische Zustandsmaschine, die bei einer Ausführungsform der Spaltungs- und Übertragungsdetektiereinheit 102 verwendet werden kann. Andere Ausführungsformen sind möglich und werden in Betracht gezogen. Bei anderen Ausführungsformen können z. B. andere oder gar keine Zustandsmaschinen verwendet werden, je nachdem, in welcher Pipeline oder in welchem Prozessor sie eingesetzt werden. Eine Ausführungsform, die in Fig. 6 gezeigt ist, weist einen Normalzustand 150 und einen Prüfzustand 152 auf.
  • Vor dem Delektieren der Zustände der aufgespaltenen Zeile ist die Spaltungs- und Übertragungsdetektiereinheit 102 im Normalzustand 150. Im Normalzustand 150 führt die Spaltungs- und Übertragungsdetektiereinheit 102 die Schritte 110, 112, 114, 116, 124 und 126 aus. Wenn keine Übertragung vom Basiszeiger zum Stapelzeiger detektiert wird, verbleibt die Spaltungs- und Übertragungsdetektiereinheit 102 im Zustand 150 (Kreis 154). Wenn andererseits eine Übertragung von dem Basiszeiger zu dem Stapelzeiger detektiert wird, geht die Spaltungs- und Übertragungsdetektiereinheit 102 in den Zustand 152 (Bogen 156) über. Ferner werden die Stapelzeiger- und Basiszeigerumbenennungskennzeichen ausgetauscht.
  • Im Prüfzustand 152 führt die Spaltungs- und Übertragungsdetektiereinheit 102 die Schritte 118 und 120 durch (nach Erhalt einer entsprechenden Antwort von Schritt 118). Wenn das Stapelzeigerregister nach dem Austausch der Kennzeichen im Wartezustand ist, verbleibt die Spaltungs- und Übertragungsdetektiereinheit 102 im Zustand 152 (Kreis 160). Ferner werden nachfolgende Befehle blockiert. Wenn das Stapelzeigerregister gültig ist, geht die Spal tungs- und Übertragungsdetektiereinheit 102 in den Normalzustand 150 über (Bogen 158).
  • Fig. 7 zeigt ein Beispiel für die von der Umbenennungskennzeichnungseinheit 76 für künftige Dateien aufrechterhaltenen Umbenennungskennzeichen und den Austausch der Umbenennungskennzeichen bei Detektierung eines Übertragungsbefehls. Ein Anfangszustand der Umbenennungskennzeichen, die dem Stapelzeigerregister (Bezugszeichen 130), das das Umbenennungsregister 22 anzeigt, und dem Basiszeigerregister (Bezugszeichen 132), das das Umbenennungsregister 28 anzeigt, entsprechen, ist dargestellt. Eine Übertragung von dem Basiszeiger- zu dem Stapelzeigerbefehl wird dann detektiert (Bezugszeichen 134), und das dem Zielregister des Befehls zugeordnete Umbenennungsregister ist das Umbenennungsregister 5.
  • Nach dem Entsenden des Übertragungsbefehls zeigt das Umbenennungskennzeichen, das dem Stapelzeiger (Bezugszeichen 136) entspricht, das Umbenennungsregister 28 an (d. h. das früher dem Basiszeigerregister zugeordnete Umbenennungsregister). Ferner zeigt das Umbenennungskennzeichen, das dem Basiszeiger nach dem Entsenden des Übertragungsbefehls (Bezugszeichen 138) entspricht, das Umbenennungsregister 5 an.
  • Das in Fig. 7 gezeigte Beispiel zeigt ferner einen der Vorteile des hier beschriebenen Verfahrens zum Austausch von Kennzeichen zwecks Beschleunigens der Erzeugung von Lookahead-Stapelzeigerwerten. Das Umbenennungsregister 5 ist im Wartezustand (und verbleibt in diesem bis zur Ausführung des Übertragungsbefehls), das Umbenennungsregister 28 ist jedoch gültig. Entsprechend kann der Lookahead-Wert, der dem Stapelzeigerregister entspricht, durch Lesen des Umbenennungsregisters 28 innerhalb der Umbenennungsregisterdateien 30 schnell zurückgewonnen werden.
  • Gemäß Fig. 7 wird der Übertragungsbefehl in Reaktion auf den MOV ESP,EBP- Befehl zu der Planungseinrichtung transportiert. Der Befehl lautet MOV 5,28 (d. h. Übertragung des Werts in dem Umbenennungsregister 28 in das Umbenennungsregister 5). Entsprechend wird bei Ausführung des Übertragungsbefehls das dem Basiszeigerregister zugeordnete Umbenennungsregister aktualisiert und die Warte-Anzeige zurückgesetzt.
  • Fig. 8 zeigt ein weiteres Beispiel für in der Umbenennungskennzeichnungseinheit 76 für künftige Datei aufrechterhaltene Umbenennungskennzeichen und den Austausch der Umbenennungskennzeichen bei Detektierung eines Übertragungsbefehls. Ein Anfangszustand der Umbenennungskennzeichen, die dem Stapelzeigerregister (Bezugszeichen 130), das das Umbenennungsregister 22 anzeigt, und dem Basiszeigerregister (Bezugszeichen 132), das das Umbenennungsregister 28 anzeigt, entsprechen, ist dargestellt. Eine Übertragung von dem Basiszeiger- zu dem Stapelzeigerbefehl wird dann detektiert (Bezugszeichen 140), und das dem Zielregister des Befehls zugeordnete Umbenennungsregister ist das Umbenennungsregister 5.
  • Nach dem Entsenden des Übertragungsbefehls zeigt das Umbenennungskennzeichen, das dem Basiszeiger (Bezugszeichen 144) entspricht, das Umbenennungsregister 22 an (d. h. das früher dem Stapelzeigerregister zugeordnete Umbenennungsregister). Ferner zeigt das Umbenennungskennzeichen, das dem Stapelzeiger nach dem Entsenden des Übertragungsbefehls (Bezugszeichen 142) entspricht, das Umbenennungsregister 5 an.
  • Obwohl das in Fig. 8 gezeigte Beispiel anzeigt, dass das Stapelzeigerregister jetzt im Wartezustand ist, sei darauf hingewiesen, dass die Lookahead-Kopie des Stapelzeigerregisters gültig bleibt. Entsprechend können die Befehlsentsendungs- und Lookahead-Kopien des Stapelzeigerregisters weiter erzeugt werden. Mit anderen Worten: die Spaltungs- und Übertragungsdetektiereinheit 102 kann das ESP-Wartesignal bei Durchführung eines Austauschs der Kennzeichen für eine Übertragung vom Stapelzeiger- zum Basiszeigerbefehl ignorieren.
  • Gemäß Fig. 8 wird der Übertragungsbefehl in Reaktion auf den MOV EBP,ESP- Befehl zu der Planungseinrichtung transportiert. Der Befehl lautet MOV 5,22 (d. h. Übertragung des Werts in dem Umbenennungsregister 22 in das Umbenennungsregister 5). Entsprechend wird bei Ausführung des Übertragungsbefehls das dem Stapelzeigerregister zugeordnete Umbenennungsregister aktualisiert und die Warte-Anzeige zurückgesetzt.
  • Es sei darauf hingewiesen, dass die in Fig. 7 und 8 gezeigten Beispiele zwar ein Umbenennungskennzeichen für das Basiszeigerregister und das Stapelzeigerregister zeigen, es jedoch möglich ist, bei Ausführungsformen, bei denen Teile des Registers aktualisiert werden können, während andere Teile konstant bleiben (z. B. ESP und SP oder EBP und BP bei der x86-Mikroprozessorarchitektur), mehrere Kennzeichen für jedes Register zu verwenden.
  • Fig. 9 zeigt ein Blockschaltbild einer typischen Ausführungsform der Befehlsschlange 20. Andere Ausführungsformen sind möglich und werden in Betracht gezogen. Bei der in Fig. 9 gezeigten Ausführungsform weist die Befehlsschlange 20 Abfolgespeicher 300A-300B, Abtastdatenspeicher 302A-302B und Adressenspeicher 304A-304B auf. Ferner weist die Befehlsschlange 20 einen Mux 306 und eine Steuereinheit 308 auf. Eine Befehlsabfolge wird von der Abruf-/Abtasteinheit 18 über einen Abfolgebus 310 zu der Befehlsschlange 20 geliefert; entsprechende Abtastdaten werden auf einem Abtastdatenbus 312 geliefert; und entsprechende Adressen (eine pro Abfolgeabschnitt) werden auf einem Abfolgeadressenbus 314 geliefert. Die Befehlsschlange 20 liefert einen Satz ausgewählter Befehlsbytes auf einem Befehlsbytebus 316, auf Befehle weisende Zeiger innerhalb der Befehlsbytes auf einem Befehlszeigerbus 318 und Adressen für die Abfolgeabschnitte mit dem Satz ausgewählter Befehlsbytes auf einem Adressenbus 320 an die Ausrichteinheit 22. Der Abfolgebus 310 ist mit den Abfolgespeichern 300A-300B gekoppelt, während der Abtastdatenbus 312 mit den Abtastdatenspeichern 302A-302B und die Adressenspeicher 304A-304B mit dem Abfolgeadressenbus 314 gekoppelt sind. Die Speicher 300A-300B, 302A-302B und 304A-304B sind mit dem Mux 306 ge koppelt, der ferner mit den Bussen 316-320 gekoppelt ist. Die Steuereinheit 308 ist mit dem Mux 306 und den Abtastdatenspeichern 302A-302B gekoppelt.
  • Die Abruf-/Abtasteinheit 18 und insbesondere der Befehlsabtaster 56 gemäß der in Fig. 2 gezeigten Ausführungsform liefern eine Befehlsabfolge und dazugehörige Informationen über die Busse 310-314 an die Befehlsschlange 20. Die Steuereinheit 308 ordnet einen der Abfolgespeicher 300A-300B für die Befehlsbytes mit der Befehlsabfolge und einen entsprechenden Abtastdatenspeicher 302A-302B und Adressenspeicher 304A-304B für die dazugehörigen Informationen zu. Die Abtastdaten enthalten Befehlszeiger, die identifizieren: (i) das Startbyte und Endbyte als Offsets in einem Abfolgeabschnitt; sowie (ii) den Abfolgeabschnitt, in dem sich der Befehl befindet. Bei einer besonderen Ausführungsform können bis zu fünf Befehle in einem 8-Byte Abfolgeabschnitt identifiziert werden, und es gibt bis zu drei Abfolgeabschnitte in einer Abfolge für insgesamt bis zu 15 Befehlszeiger, die in einem Abtastdatenspeicher 302 gespeichert sind. Ferner speichern die Adressenspeicher 304 eine jedem Abfolgeabschnitt entsprechende Adresse.
  • Die Steuereinheit 308 prüft die Befehlszeiger in den Abtastdatenspeichern 302A-302B zum Identifizieren von Befehlen in einem Satz aneinandergrenzender Abfolgeabschnitte zwecks Entsendung an die Ausrichteinheit 22. Bei einer besonderen Ausführungsform werden bis zu sechs Befehle in bis zu vier aneinandergrenzenden Abfolgeabschnitten identifiziert. Die Abfolgeabschnitte können in einem der Abfolgespeicher 300A oder 300B gespeichert werden, oder einige der Abfolgeabschnitte können aus einem der Abfolgespeicher 300A-300B ausgewählt werden, und die anderen Abfolgeabschnitte können aus dem anderen der Abfolgespeicher 300A-300B ausgewählt werden. Ein erster Abfolgeabschnitt grenzt an einen zweiten Abfolgeabschnitt an, wenn der erste Abfolgeabschnitt in der spekulativen Programmreihenfolge dem zweiten Abfolgeabschnitt folgt. Es sei darauf hingewiesen, dass der Mux 306, obwohl er in Fig. 13 der Einfachheit halber als Einzel-Mux gezeigt ist, als be liebiger geeigneter Satz von parallel oder in Kaskade geschalteten Multiplexern implementiert sein kann.
  • Die Steuereinheit 308 liefert einen Satz von Auswahlsignalen an den Mux 306 zum Auswählen des Satzes von Abfolgeabschnitten mit den ausgewählten Befehlen sowie den Befehlszeiger, die den ausgewählten Befehlen entsprechen. Ferner wird die Adresse für jeden ausgewählten Abfolgeabschnitt ausgewählt. Die Abfolgeabschnitte werden auf dem Befehlsbytebus 316 geliefert, während die entsprechenden Befehlszeiger und Adressen auf dem Befehlszeigerbus 318 bzw. dem Adressenbus 320 geliefert werden.
  • Fig. 10 zeigt ein Blockschaltbild einer Ausführungsform eines Computersystems 200 mit dem Prozessor 10, der über eine Busverbindung 202 mit einer Vielzahl von Systemkomponenten gekoppelt ist. Andere Ausführungsformen sind möglich und werden in Betracht gezogen. Bei dem dargestellten System ist ein Hauptspeicher 204 über einen Speicherbus 206 mit der Busverbindung 202 gekoppelt und eine Grafiksteuereinrichtung 208 über einen AGP-Bus 210 mit der Busverbindung 202 gekoppelt. Schließlich sind mehrere PCI-Vorrichtungen 212A-212B über einen PCI-Bus 214 mit der Busverbindung 202 gekoppelt. Eine sekundäre Busverbindung 216 kann ferner zum Aufnehmen eines elektrischen Interface mit einer oder mehreren EISA- oder ISA-Vorrichtungen 218 über einen EISA-/ISA-BUS 220 vorgesehen sein. Der Prozessor 10 ist über ein Bus-Interface 46 mit der Busverbindung 202 gekoppelt.
  • Die Busverbindung 202 bildet ein Interface zwischen dem Prozessor 10/ dem Hauptspeicher 204, der Grafiksteuereinrichtung 208 und mit dem PCI-Bus 214 verbundenen Vorrichtungen. Wenn eine Operation von einer der mit der Busverbindung 202 verbundenen Vorrichtungen empfangen wird, identifiziert die Busverbindung 202 das Target der Operation (z. B. eine spezielle Vorrichtung oder dass im Falle des PCI-Busses 214 das Target der PCI-Bus 214 ist). Die Busverbindung 202 leitet die Operation zu der Target-Vorrichtung. Die Busverbindung 202 übersetzt generell die Operation aus dem von der Quellenvor richtung oder dem Quellenbus verwendeten Protokoll in das von der Targetvorrichtung oder dem Targetbus verwendete Protokoll.
  • Zusätzlich zu dem Bilden eines Interface mit einem ISA-/EISA-BUS für den PCI-Bus 214 kann ferner die sekundäre Busverbindung 216 eine zusätzliche Funktionalität bieten, falls dies gewünscht ist. Bei einer Ausführungsform weist die sekundäre Busverbindung 216 z. B. einen (nicht gezeigten) Master- PCI-Arbiter zum Arbitrieren der Vorherrschaft über den PCI-Bus 214 auf. Eine (nicht gezeigte) Eingangs-/Ausgangssteuereinrichtung, die entweder außerhalb der sekundären Busverbindung 216 vorgesehen oder in diese integriert ist, kann ebenfalls in dem Computersystem enthalten sein, um die Operation einer Tastatur und einer Maus 222 und verschiedener serieller und paralleler Ports zu unterstützen, falls dies gewünscht ist. Eine (nicht gezeigte) externe Cachespeichereinheit kann bei weiteren Ausführungsformen ferner mit dem Bus-Interface 46 zwischen dem Prozessor 10 und der Busverbindung 202 gekoppelt sein. Alternativ kann der externe Cachespeicher mit der Busverbindung 202 gekoppelt sein und kann die Cachespeichersteuerlogik für den externen Cachespeicher in die Busverbindung 202 integriert sein.
  • Der Hauptspeicher 204 ist ein Speicher, in dem Anwendungsprogramme gespeichert sind und aus dem heraus der Prozessor 10 primär arbeitet. Ein geeigneter Hauptspeicher 204 weist einen DRAM (dynamischer RAM-Speicher) und vorzugsweise mehrere SDRAM-Bänke (synchroner DRAM) auf.
  • Die PCI-Vorrichtungen 212A-212B sind Beispiele für zahlreiche Peripherievorrichtungen, wie z. B. Netz-Interface-Karten, Videobeschleuniger, Audiokarten, Festplatten- oder Diskettenlaufwerke oder Laufwerksteuereinrichtungen, SCSI (Kleincomputersystem-Interface), Adapter und Telefonkarten. Ähnlich ist die ISA-Vorrichtung 218 ein Beispiel für verschiedene Typen von Peripherievorrichtungen, wie z. B. ein Modem, eine Soundkarte und eine Vielzahl von Datenerfassungskarten, wie z. B. GPIB oder Feldbus-Interface-Karten.
  • Die Grafiksteuereinrichtung 208 ist zum Steuern der Wiedergabe von Text und Bildern auf einer Anzeigeeinrichtung 226 vorgesehen. Die Grafiksteuereinrichtung 208 kann einen typischen Grafikbeschleuniger aufweisen, der auf dem Gebiet generell zur Wiedergabe dreidimensionaler Datenstrukturen bekannt ist, die effektiv in den Hauptspeicher hinein und aus diesen heraus geschoben werden können. Die Grafiksteuereinrichtung 208 kann daher dahingehend eine Mastereinrichtung des AGP-Busses 210 sein, dass sie Zugriff auf ein Target-Interface in der Busverbindung 202 anfordern und erhalten kann, um somit Zugriff auf den Hauptspeicher 204 zu erlangen. Ein zweckbestimmter Grafikbus nimmt schnell aus dem Hauptspeicher 204 zurückgewonnene Daten auf. Bei bestimmten Operationen kann die Grafiksteuereinrichtung 208 ferner zum Erzeugen von PCI-Protokoll-Transaktionen auf dem AGP-Bus 210 vorgesehen sein. Das AGP-Interface der Busverbindung 202 kann somit eine Funktion zum Unterstützen von sowohl AGP-Protokoll-Transaktionen als auch PCI- Protokoll-Target- und Initiator-Transaktionen aufweisen. Die Anzeigeeinrichtung 226 ist eine elektronische Anzeige, auf der ein Bild oder ein Text präsentiert werden kann. Eine geeignete Anzeigeeinrichtung 226 weist eine Kathodenstrahlröhre ("CRT"), eine Flüssigkristallanzeigeeinrichtung ("LCD") etc. auf.
  • Es sei darauf hingewiesen, dass die AGP-, PCI- und ISA- oder EISA-Busse in der vorstehenden Beschreibung zwar als Beispiele aufgeführt sind, es jedoch möglich ist, diese durch beliebige Busarchitekturen zu ersetzen, falls dies gewünscht ist. Es sei ferner darauf hingewiesen, dass das Computersystem 200 ein Multiprozessor-Computersystem mit zusätzlichen Prozessoren (z. B. Prozessor 10a, der als wahlweise vorgesehene Komponente des Computersystems 200 gezeigt ist) sein kann. Der Prozessor 10a kann ähnlich ausgeführt sein wie der Prozessor 10. Insbesondere kann der Prozessor 10a eine identische Kopie des Prozessors 10 sein. Der Prozessor 10a kann das Bus-Interface 46 gemeinsam mit dem Prozessor 10 nutzen (wie in Fig. 9 gezeigt) oder kann über einen unabhängigen Bus mit der Busverbindung 202 verbunden sein.
  • Es sei darauf hingewiesen, dass in Teilen der vorstehenden Beschreibung zwar die Stapelzeigerregister als ESP-Register bezeichnet sind und die Basiszeigerregister als EBP-Register bezeichnet sind, wie in der x86-Befehlssatzarchitektur definiert, die vorliegende Erfindung jedoch nicht auf diese Architektur beschränkt ist. Obwohl andere Architekturen z. B. möglicherweise kein explizites Stapelzeiger- und/oder Basiszeigerregister aufweisen, kann die Software derart konfiguriert sein, dass sie ein spezielles Universalregister als Stapelzeigerregister benutzt. Ähnlich kann ein weiteres Universalregister von der Sortware als Basiszeigerregister benutzt werden. Mit Ausführungsformen eines Prozessors, bei dem andere Befehlssatzarchitekturen und eine andere als die oben beschriebe konfigurierte Software zum Einsatz kommen, können Vorteile gemäß der vorliegenden Erfindung erreicht werden. Ferner detektiert die vorliegende Erfindung zwar Übertragungen zwischen den Stapelzeiger- und Basiszeigerregistern zur Durchführung eines Austauschs von Umbenennungskennzeichen, in verschiedenen in Betracht gezogenen Ausführungsformen können jedoch Übertragungen zwischen zwei beliebigen Registern detektiert werden, und es kann in Reaktion darauf ein Austausch von Umbenennungskennzeichen durchgeführt werden.
  • In der vorstehenden Offenbarung ist ein Prozessor beschrieben, der Übertragungsbefehle durch Austausch der Umbenennungskennzeichen, die den Quellen- und Zielregistern in einer Umbenennungskennzeichnungs-Steuereinheit entsprechen, beschleunigt. In Fällen, in denen der Zielort einer Übertragung eine Quelle für nachfolgende Befehle ist, können die nachfolgenden Befehle beschleunigt werden. Die Leistung des Prozessors kann dadurch erhöht werden. Bei einer besonderen Ausführungsform werden Übertragungen von dem Basiszeigerregister zu dem Stapelzeigerregister (und umgekehrt) beschleunigt. Der Prozessor ist bestrebt, Lookahead-Werte für den Stapelzeiger zu erzeugen, und eine Beschleunigung der Übertragung zu dem Stapelzeiger kann bei der schnelleren Erzeugung der Lookahead-Werte hilfreich sein.

Claims (10)

1. Vorrichtung zum Durchführen einer Registerumbenennung, mit:
einer Lookahead-Einheit (74) zum Abtasten von Befehlen vor einer Zuordnung der Registerumbenennungen zu den Befehlen zum Detektieren eines Übertragungsbefehls mit einem ersten strukturierten Register als Quellenregister und einem zweiten strukturierten Register als Zielregister, wobei ein strukturiertes Register von einer Befehlssatzarchitektur definiert ist; und
einer mit der Lookahead-Einheit (74) gekoppelten Umbenennungskennzeichnungseinheit (76), die zum Speichern mehrerer Umbenennungskennzeichen, einschließlich eines dem ersten strukturierten Register entsprechenden ersten Umbenennungskennzeichens und eines dem zweiten strukturierten Register entsprechenden zweiten Umbenennungskennzeichens vorgesehen ist, wobei das erste Umbenennungskennzeichen ein dem ersten strukturierten Register zugeordnetes erstes Umbenennungsregister identifiziert und das zweite Umbenennungskennzeichen ein dem zweiten strukturierten Register zugeordnetes Umbenennungsregister identifiziert, wobei Umbenennungsregister von der Vorrichtung implementiert sind;
wobei die Lookahead-Einheit (74) zum Benachrichtigen der Umbenennungskennzeichnungseinheit (76) bei Detektierung der Übertragung vorgesehen ist und wobei die Umbenennungskennzeichnungseinheit (76) zum Zuordnen des ersten Umbenennungsregisters zu dem zweiten strukturierten Register in Reaktion auf das Benachrichtigungssignal vorgesehen ist und wobei die Umbenennungskennzeichnungseinheit (76) ferner zum Zuordnen eines dritten Umbenennungsregisters in Reaktion auf den Übertragungsbefehl vorgesehen ist, wobei ein drittes Umbenennungskennzeichen das dritte Umbenennungsregister identifiziert und wobei das dritte Umbenennungsregister bei Ausführung des Übertragungsbefehls von dem Übertragungsbefehl als Zielregister verwendet wird.
2. Vorrichtung nach Anspruch 1, bei der die Umbenennungskennzeichnungseinheit (76) ferner zum Zuordnen des dritten Umbenennungsregisters zu dem ersten strukturierten Register vorgesehen ist.
3. Vorrichtung nach Anspruch 2, bei der die Umbenennungskennzeichnungseinheit (76) zum Zuordnen des ersten Umbenennungsregisters zu dem zweiten strukturierten Register und des dritten Umbenennungsregisters zu dem ersten strukturierten Register im Anschluss an das Abbilden von Operanden für den Übertragungsbefehl vorgesehen ist, wobei der Übertragungsbefehl das erste Umbenennungskennzeichen als Quellenoperandenbezeichner und das dritte Umbenennungskennzeichen als Zielbezeichner empfängt.
4. Vorrichtung nach Anspruch 1, ferner mit einer Umbenennungsregisterdatei (30A, 30B) mit dem ersten Umbenennungsregister, dem zweiten Umbenennungsregister und dem dritten Umbenennungsregister.
5. Vorrichtung nach Anspruch 4, bei der die Lookahead-Einheit (74) zum Blockieren von Befehlen im Anschluss an den Übertragungsbefehl vorgesehen ist, wenn ein Wert innerhalb des ersten Umbenennungsregisters ansteht, wobei die Vorrichtung ferner einen Lookahead-Speicher entsprechend dem zweiten strukturierten Register aufweist und die Vorrichtung zum Aktualisieren des Lookahead-Speichers mit einem Wert aus dem ersten Umbenennungsregister vorgesehen ist, wenn das erste Umbenennungsregister gültig ist.
6. Vorrichtung nach Anspruch 5, die zum Verwenden des Wertes zum Erzeugen von Lookahead-Werten für die Befehle im Anschluss an den Übertragungsbefehl vorgesehen ist.
7. Verfahren zum Durchführen einer Registerumbenennung mit folgenden Schritten:
Zuordnen eines ersten Umbenennungsregisters zu einem ersten strukturierten Register in Reaktion auf das Entsenden eines ersten Befehls mit einem ersten strukturierten Register als Zielregister, wobei ein strukturiertes Register von einer Befehlssatzarchitektur definiert ist und Umbenennungsregister von einem das Verfahren durchführenden Prozessor implementiert werden;
Zuordnen eines zweiten Umbenennungsregisters zu einem zweiten strukturierten Register in Reaktion auf das Entsenden eines zweiten Befehls mit einem zweiten strukturierten Register als Zielregister;
Detektierten eines Übertragungsbefehls zum Übertragen eines Wertes von dem ersten strukturierten Register zu dem zweiten strukturierten Register;
Zuordnen des ersten Umbenennungsregisters zu dem zweiten strukturierten Register in Reaktion auf die Detektierung; und
Zuordnen eines dritten Umbenennungsregisters als Zielregister eines Übertragungsbefehls in Reaktion auf die Detektierung, wobei das dritte Umbenennungsregister bei der Ausführung des Übertragungsbefehls von dem Übertragungsbefehl als Zielregister verwendet wird.
8. Verfahren nach Anspruch 7, ferner mit dem Schritt des Zuordnens des dritten Umbenennungsregisters zu dem ersten strukturierten Register in Reaktion auf die Detektierung.
9. Verfahren nach Anspruch 8, ferner mit folgenden Schritten:
Einplanen des Übertragungsbefehls zur Ausführung;
Auslesen des ersten Umbenennungsregisters in Reaktion auf das Einplanen; und
Ausführen des Übertragungsbefehls und Aktualisieren des dritten Umbenennungsregisters in Reaktion auf die Ausführung.
10. Verfahren nach Anspruch 7, ferner mit folgenden Schritten:
Auslesen des ersten Umbenennungsregisters zum Erzeugen eines Wertes entsprechend dem zweiten strukturierten Register in Reaktion auf das Zuordnen des ersten Umbenennungsregisters zu dem zweiten strukturierten Register; und
Blockieren von Befehlen im Anschluss an den Übertragungsbefehl, wenn das erste Umbenennungsregister nicht in Reaktion auf das Ausführen des ersten Befehls aktualisiert worden ist.
DE69904479T 1998-07-14 1999-01-18 Registerumbenennung wobei übertragungsinstruktionen mittels umbenennungsschildernzeichen realisiert werden Expired - Lifetime DE69904479T2 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/115,115 US6094716A (en) 1998-07-14 1998-07-14 Register renaming in which moves are accomplished by swapping rename tags
PCT/US1999/001047 WO2000004444A1 (en) 1998-07-14 1999-01-18 Register renaming in which moves are accomplished by swapping rename tags

Publications (2)

Publication Number Publication Date
DE69904479D1 DE69904479D1 (de) 2003-01-23
DE69904479T2 true DE69904479T2 (de) 2003-10-30

Family

ID=22359381

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69904479T Expired - Lifetime DE69904479T2 (de) 1998-07-14 1999-01-18 Registerumbenennung wobei übertragungsinstruktionen mittels umbenennungsschildernzeichen realisiert werden

Country Status (6)

Country Link
US (2) US6094716A (de)
EP (1) EP1095330B1 (de)
JP (1) JP3977015B2 (de)
KR (1) KR100586058B1 (de)
DE (1) DE69904479T2 (de)
WO (1) WO2000004444A1 (de)

Families Citing this family (65)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH1091443A (ja) * 1996-05-22 1998-04-10 Seiko Epson Corp 情報処理回路、マイクロコンピュータ及び電子機器
US6094716A (en) 1998-07-14 2000-07-25 Advanced Micro Devices, Inc. Register renaming in which moves are accomplished by swapping rename tags
US6240503B1 (en) 1998-11-12 2001-05-29 Advanced Micro Devices, Inc. Cumulative lookahead to eliminate chained dependencies
US6314471B1 (en) * 1998-11-13 2001-11-06 Cray Inc. Techniques for an interrupt free operating system
US6952827B1 (en) * 1998-11-13 2005-10-04 Cray Inc. User program and operating system interface in a multithreaded environment
US6862635B1 (en) * 1998-11-13 2005-03-01 Cray Inc. Synchronization techniques in a multithreaded environment
US6353829B1 (en) 1998-12-23 2002-03-05 Cray Inc. Method and system for memory allocation in a multiprocessing environment
US6415433B1 (en) 1998-12-23 2002-07-02 Cray Inc. Method and system for identifying locations to move portions of the computer program
US6665688B1 (en) 1998-12-23 2003-12-16 Cray Inc. Method and system for automatically regenerating data on-demand
US6230313B1 (en) * 1998-12-23 2001-05-08 Cray Inc. Parallelism performance analysis based on execution trace information
US6430676B1 (en) * 1998-12-23 2002-08-06 Cray Inc. Method and system for calculating instruction lookahead
US6321379B1 (en) 1998-12-23 2001-11-20 Cray Inc. Method and system for target register allocation
US6594754B1 (en) * 1999-07-07 2003-07-15 Intel Corporation Mapping destination logical register to physical register storing immediate or renamed source register of move instruction and using mapping counters
US6625723B1 (en) * 1999-07-07 2003-09-23 Intel Corporation Unified renaming scheme for load and store instructions
US6505293B1 (en) 1999-07-07 2003-01-07 Intel Corporation Register renaming to optimize identical register values
WO2001061477A1 (en) * 2000-02-14 2001-08-23 Chicory Systems, Inc. Predecoding instructions to determine stack change information
WO2001061474A1 (en) * 2000-02-14 2001-08-23 Chicory Systems, Inc. Delayed update of a stack pointer and program counter
US6560671B1 (en) * 2000-09-11 2003-05-06 Intel Corporation Method and apparatus for accelerating exchange or swap instructions using a register alias table (RAT) and content addressable memory (CAM) with logical register numbers as input addresses
JP3817436B2 (ja) * 2000-09-28 2006-09-06 株式会社東芝 プロセッサおよびリネーミング装置
US6549442B1 (en) 2002-07-25 2003-04-15 Neomagic Corp. Hardware-assisted fast bank-swap in a content-addressable-memory (CAM) processor
US20040103269A1 (en) * 2002-11-27 2004-05-27 Intel Corporation Processor context register mapping
US7290121B2 (en) * 2003-06-12 2007-10-30 Advanced Micro Devices, Inc. Method and data processor with reduced stalling due to operand dependencies
US7043626B1 (en) 2003-10-01 2006-05-09 Advanced Micro Devices, Inc. Retaining flag value associated with dead result data in freed rename physical register with an indicator to select set-aside register instead for renaming
US8250348B2 (en) * 2005-05-19 2012-08-21 International Business Machines Corporation Methods and apparatus for dynamically switching processor mode
US20060265555A1 (en) * 2005-05-19 2006-11-23 International Business Machines Corporation Methods and apparatus for sharing processor resources
US7454599B2 (en) * 2005-09-19 2008-11-18 Via Technologies, Inc. Selecting multiple threads for substantially concurrent processing
WO2007051347A1 (en) * 2005-10-31 2007-05-10 Intel Corporation System and method for managing a register-based stack of operand tags
US20070130448A1 (en) * 2005-12-01 2007-06-07 Intel Corporation Stack tracker
US20070192573A1 (en) * 2006-02-16 2007-08-16 Guillermo Savransky Device, system and method of handling FXCH instructions
US7506139B2 (en) * 2006-07-12 2009-03-17 International Business Machines Corporation Method and apparatus for register renaming using multiple physical register files and avoiding associative search
US7478228B2 (en) * 2006-08-31 2009-01-13 Qualcomm Incorporated Apparatus for generating return address predictions for implicit and explicit subroutine calls
US7603527B2 (en) * 2006-09-29 2009-10-13 Intel Corporation Resolving false dependencies of speculative load instructions
US8341383B2 (en) 2007-11-02 2012-12-25 Qualcomm Incorporated Method and a system for accelerating procedure return sequences
US8914617B2 (en) * 2009-12-26 2014-12-16 Intel Corporation Tracking mechanism coupled to retirement in reorder buffer for indicating sharing logical registers of physical register in record indexed by logical register
US20120191954A1 (en) * 2011-01-20 2012-07-26 Advanced Micro Devices, Inc. Processor having increased performance and energy saving via instruction pre-completion
US20120191956A1 (en) * 2011-01-26 2012-07-26 Advanced Micro Devices, Inc. Processor having increased performance and energy saving via operand remapping
US8661230B2 (en) * 2011-04-15 2014-02-25 International Business Machines Corporation Allocation of counters from a pool of counters to track mappings of logical registers to physical registers for mapper based instruction executions
US9454371B2 (en) 2011-12-30 2016-09-27 Intel Corporation Micro-architecture for eliminating MOV operations
WO2013101323A1 (en) * 2011-12-30 2013-07-04 Intel Corporation Micro-architecture for eliminating mov operations
US9575754B2 (en) 2012-04-16 2017-02-21 Apple Inc. Zero cycle move
US9430243B2 (en) * 2012-04-30 2016-08-30 Apple Inc. Optimizing register initialization operations
US9996348B2 (en) 2012-06-14 2018-06-12 Apple Inc. Zero cycle load
US9535744B2 (en) * 2013-06-29 2017-01-03 Intel Corporation Method and apparatus for continued retirement during commit of a speculative region of code
US9367317B2 (en) * 2013-07-03 2016-06-14 Intel Corporation Loop streaming detector for standard and complex instruction types
US9747104B2 (en) 2014-05-12 2017-08-29 Qualcomm Incorporated Utilizing pipeline registers as intermediate storage
US9588769B2 (en) 2014-05-27 2017-03-07 Via Alliance Semiconductor Co., Ltd. Processor that leapfrogs MOV instructions
US11281481B2 (en) 2014-07-25 2022-03-22 Intel Corporation Using a plurality of conversion tables to implement an instruction set agnostic runtime architecture
US10353680B2 (en) * 2014-07-25 2019-07-16 Intel Corporation System converter that implements a run ahead run time guest instruction conversion/decoding process and a prefetching process where guest code is pre-fetched from the target of guest branches in an instruction sequence
US11068271B2 (en) 2014-07-28 2021-07-20 Apple Inc. Zero cycle move using free list counts
US9430244B1 (en) * 2015-10-28 2016-08-30 Centipede Semi Ltd. Run-time code parallelization using out-of-order renaming with pre-allocation of physical registers
US9858075B2 (en) 2015-12-06 2018-01-02 Centipede Semi Ltd. Run-time code parallelization with independent speculative committing of instructions per segment
CN106406814B (zh) * 2016-09-30 2019-06-14 上海兆芯集成电路有限公司 处理器和将架构指令转译成微指令的方法
US10133620B2 (en) 2017-01-10 2018-11-20 Intel Corporation Detecting errors in register renaming by comparing value representing complete error free set of identifiers and value representing identifiers in register rename unit
US10346171B2 (en) * 2017-01-10 2019-07-09 Intel Corporation End-to end transmission of redundant bits for physical storage location identifiers between first and second register rename storage structures
US20180203703A1 (en) * 2017-01-13 2018-07-19 Optimum Semiconductor Technologies, Inc. Implementation of register renaming, call-return prediction and prefetch
US20180203694A1 (en) * 2017-01-16 2018-07-19 Intel Corporation Execution Unit with Selective Instruction Pipeline Bypass
JP7043985B2 (ja) 2018-06-13 2022-03-30 富士通株式会社 演算処理装置および演算処理装置の制御方法
US11175915B2 (en) * 2018-10-10 2021-11-16 Micron Technology, Inc. Vector registers implemented in memory
US10949205B2 (en) 2018-12-20 2021-03-16 International Business Machines Corporation Implementation of execution compression of instructions in slice target register file mapper
US11200062B2 (en) 2019-08-26 2021-12-14 Apple Inc. History file for previous register mapping storage and last reference indication
US10896041B1 (en) 2019-09-25 2021-01-19 Microsoft Technology Licensing, Llc Enabling early execution of move-immediate instructions having variable immediate value sizes in processor-based devices
US11416254B2 (en) 2019-12-05 2022-08-16 Apple Inc. Zero cycle load bypass in a decode group
FR3118234B1 (fr) * 2020-12-18 2024-01-19 St Microelectronics Alps Sas Procédé de détection d’ingénierie inversée sur une unité de traitement utilisant un pointeur d’instruction et circuit intégré correspondant
US11907723B2 (en) * 2022-03-21 2024-02-20 Arm Limited Operation elimination
US12099847B2 (en) * 2023-01-26 2024-09-24 Arm Limited Technique for improving efficiency of data processing operations in an apparatus that employs register renaming

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5233696A (en) * 1989-08-28 1993-08-03 Nec Corporation Microprocessor having precoder unit and main decoder unit operating in pipeline processing manner
FR2670925B1 (fr) 1990-12-20 1995-01-27 Bull Sa Architecture informatique distribuee utilisant un reseau local de type csma/cd.
GB9112754D0 (en) * 1991-06-13 1991-07-31 Int Computers Ltd Data processing apparatus
US5345569A (en) * 1991-09-20 1994-09-06 Advanced Micro Devices, Inc. Apparatus and method for resolving dependencies among a plurality of instructions within a storage device
US5694564A (en) * 1993-01-04 1997-12-02 Motorola, Inc. Data processing system a method for performing register renaming having back-up capability
US5499352A (en) * 1993-09-30 1996-03-12 Intel Corporation Floating point register alias table FXCH and retirement floating point register array
US5548776A (en) * 1993-09-30 1996-08-20 Intel Corporation N-wide bypass for data dependencies within register alias table
US5574935A (en) * 1993-12-29 1996-11-12 Intel Corporation Superscalar processor with a multi-port reorder buffer
US6047369A (en) * 1994-02-28 2000-04-04 Intel Corporation Flag renaming and flag masks within register alias table
US5623628A (en) * 1994-03-02 1997-04-22 Intel Corporation Computer system and method for maintaining memory consistency in a pipelined, non-blocking caching bus request queue
US5632023A (en) * 1994-06-01 1997-05-20 Advanced Micro Devices, Inc. Superscalar microprocessor including flag operand renaming and forwarding apparatus
US5696955A (en) * 1994-06-01 1997-12-09 Advanced Micro Devices, Inc. Floating point stack and exchange instruction
DE69506623T2 (de) * 1994-06-03 1999-07-22 Motorola, Inc., Schaumburg, Ill. Datenprozessor mit einer Ausführungseinheit zur Durchführung von Ladebefehlen und Verfahren zu seinem Betrieb
US5768610A (en) * 1995-06-07 1998-06-16 Advanced Micro Devices, Inc. Lookahead register value generator and a superscalar microprocessor employing same
US5771366A (en) * 1995-06-09 1998-06-23 International Business Machines Corporation Method and system for interchanging operands during complex instruction execution in a data processing system
US5892936A (en) * 1995-10-30 1999-04-06 Advanced Micro Devices, Inc. Speculative register file for storing speculative register states and removing dependencies between instructions utilizing the register
US5933618A (en) * 1995-10-30 1999-08-03 Advanced Micro Devices, Inc. Speculative register storage for storing speculative results corresponding to register updated by a plurality of concurrently recorded instruction
EP0851343B1 (de) * 1996-12-31 2005-08-31 Metaflow Technologies, Inc. System zur Ausführung von Gleitkommaoperationen
US5854912A (en) * 1997-06-12 1998-12-29 Advanced Micro Devices, Inc. Flexible resource access in a microprocessor
US6061786A (en) 1998-04-23 2000-05-09 Advanced Micro Devices, Inc. Processor configured to select a next fetch address by partially decoding a byte of a control transfer instruction
US6094716A (en) 1998-07-14 2000-07-25 Advanced Micro Devices, Inc. Register renaming in which moves are accomplished by swapping rename tags

Also Published As

Publication number Publication date
KR20010053522A (ko) 2001-06-25
US6256721B1 (en) 2001-07-03
EP1095330B1 (de) 2002-12-11
DE69904479D1 (de) 2003-01-23
EP1095330A1 (de) 2001-05-02
KR100586058B1 (ko) 2006-06-07
US6094716A (en) 2000-07-25
JP3977015B2 (ja) 2007-09-19
WO2000004444A1 (en) 2000-01-27
JP2002520729A (ja) 2002-07-09

Similar Documents

Publication Publication Date Title
DE69904479T2 (de) Registerumbenennung wobei übertragungsinstruktionen mittels umbenennungsschildernzeichen realisiert werden
DE69901910T2 (de) Verfahren und gerät zur rechnung von indirekten verzweigungszieladressen
DE69835100T2 (de) Prozessor konfiguriert um vorausschauende resultate von zusammengefassten übertragungs-, vergleichs- und einfachen arithmetischen befehlen zu produzieren
DE69504135T2 (de) Einrichtung zur Aktualisierung von Programmzählern
DE60009151T2 (de) Vorhersage von datenbeförderung von speicher- zum ladebefehl mit untrainierung
DE69506623T2 (de) Datenprozessor mit einer Ausführungseinheit zur Durchführung von Ladebefehlen und Verfahren zu seinem Betrieb
DE69932066T2 (de) Mechanismus zur "store-to-load forwarding"
DE60102017T2 (de) Räumungsfilter für adressenübersetzungspuffer
DE68928812T2 (de) Vorrichtung zur Auflösung von einer variablen Anzahl von möglichen Speicherzugriffskonflikten in einem Pipeline-Rechnersystem und Verfahren dazu
DE69802209T2 (de) An bytebereiche innerhalb eines befehlscaches gebundene verzweigungsselektoren zur schnellen identifizierung von verzweigungsprädiktoren
DE69508303T2 (de) Superskalarmikroprozessor mit einer Vorrichtung zur Namenänderung und Beförderung einer Operandenflagge und Verfahren zur Bearbeitung von RISC-ähnliche Funktionen in diesem Superskalarmikroprozessor
DE112004002848B4 (de) Mikroprozessor und Verfahren zum Verifizieren einer Speicherdatei in einem derartigen Mikroprozessor
DE69908175T2 (de) Verbesserte befehlsdekodierung durch paralleldekodierungsalgorithmus
DE69904189T2 (de) Konfigurierter prozessor zur abbildung von logischen registernummern auf physikalische registernummern unter verwendung von virtuellen registernummern
DE69031433T2 (de) Speicherzugriffsausnahmebehandlung bei vorausgelesenen Befehlswörtern in dem Befehlsfliessband eines Rechners mit virtuellem Speicher
DE69631778T2 (de) Flexible implementierung eines systemverwaltungsmodus in einem prozessor
DE60205363T2 (de) Mikroprozessor mit einem performance-drosselmechanismus für das energiemanagement
DE69308548T2 (de) Vorrichtung und verfahren zum befehlsabschluss in einem superskalaren prozessor.
DE69127242T2 (de) Sicherung der Datenintegrität in einem Multipipelineprozessorsystem
DE69131637T2 (de) Registerhaltige Datenbearbeitung in einem Prozessor mit reduziertem Befehlssatz
DE69518362T2 (de) Wiedersynchronisierung eines Superskalarprozessors
DE68928677T2 (de) Verfahren und digitaler Computer zur Vorverarbeitung mehrerer Befehle
DE69031991T2 (de) Verfahren und Gerät zur Beschleunigung von Verzweigungsbefehlen
DE69033331T2 (de) Sprungvorhersage
DE69605943T2 (de) Anordnung und verfahren zur mikrokodemodifikation

Legal Events

Date Code Title Description
8364 No opposition during term of opposition