DE602004011889T2 - Anordnung und Verfahren zur Durchführung einer frühen Korrektur von falschen Vorhersagen beim bedingten Verzweigungsbefehl - Google Patents

Anordnung und Verfahren zur Durchführung einer frühen Korrektur von falschen Vorhersagen beim bedingten Verzweigungsbefehl Download PDF

Info

Publication number
DE602004011889T2
DE602004011889T2 DE602004011889T DE602004011889T DE602004011889T2 DE 602004011889 T2 DE602004011889 T2 DE 602004011889T2 DE 602004011889 T DE602004011889 T DE 602004011889T DE 602004011889 T DE602004011889 T DE 602004011889T DE 602004011889 T2 DE602004011889 T2 DE 602004011889T2
Authority
DE
Germany
Prior art keywords
early
branch
status flags
instruction
command
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.)
Active
Application number
DE602004011889T
Other languages
English (en)
Other versions
DE602004011889D1 (de
Inventor
Gerard M. Austin Col
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.)
Via Technologies Inc
Original Assignee
Via Technologies Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Via Technologies Inc filed Critical Via Technologies Inc
Publication of DE602004011889D1 publication Critical patent/DE602004011889D1/de
Application granted granted Critical
Publication of DE602004011889T2 publication Critical patent/DE602004011889T2/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30094Condition code generation, e.g. Carry, Zero flag
    • 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/30058Conditional 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/38Concurrent instruction execution, e.g. pipeline, 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/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • G06F9/3848Speculative instruction execution using hybrid branch prediction, e.g. selection between prediction techniques
    • 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, look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling

Description

  • PRIORITÄTSINFORMATION
  • Dieses Patent nimmt die Priorität in Anspruch, die auf der US-Anmeldung, Eingangsnummer 10/771,682, eingereicht am 4. Feb. 2004, beruht.
  • GEBIET DER ERFINDUNG
  • Die Erfindung betrifft im Allgemeinen das Gebiet von Pipeline-Mikroprozessoren und insbesondere die frühzeitige Befehlsausführung in derartigen Mikroprozessoren.
  • HINTERGRUND DER ERFINDUNG
  • Moderne Mikroprozessoren sind Pipeline-Mikroprozessoren. D. h., sie bearbeiten mehrere Befehle gleichzeitig in unterschiedlichen Blöcken bzw. Pipelinestufen des Mikroprozessors. Hennessy und Patterson definieren das Pipelineverfahren als "eine Implementierungstechnik, bei der sich mehrere Befehle während der Ausführung überlappen". Siehe hierzu Computer Architecture: A Quantitative Approach, 2nd edition, von John L. Hennessy und David A. Patterson, Morgan Kaufmann Publishers, San Francisco, CA, 1996. Sie liefern weiterhin die folgende ausgezeichnete Erläuterung des Pipelineverfahrens:
    Eine Pipeline ist wie ein Fließband. In einem Automobil-Fließband gibt es viele Schritte, von denen jeder einen Teil zum Zusammenbau des Autos beiträgt. Jeder Schritt arbeitet parallel zu den anderen Schritten, jedoch an einem unterschiedlichen Fahrzeug. In einer Computerpipeline vervollständigt jeder Schritt in der Pipeline einen Teil eines Befehls. Wie am Fließband vervollständigen unterschiedliche Schritte unterschiedliche Teile der verschiedenen Befehle parallel. Jeder dieser Schritte heißt Pipestufe oder Pipesegment. Die Stufen sind hintereinander verbunden, so dass sie eine "Rohrleitung" bilden. Die Befehle treten an einem Ende ein, schreiten durch die Stufen fort und treten am anderen Ende so aus, wie dies auch Automobile auf einem Fließband tun.
  • Synchrone Mikroprozessoren arbeiten in Taktzyklen. Normalerweise geht ein Befehl in jedem Taktzyklus von einer Stufe der Mikroprozessor-Pipeline auf eine andere Stufe über. Bleiben an einem Automobil-Fließband die Arbeiter in einer Stufe des Bands ohne Beschäftigung, weil sie kein Auto vorfinden, an dem Arbeiten zu verrichten sind, so wird die Produktion bzw. die Leistung des Bands geringer. Ist eine Mikroprozessorstufe während eines Taktzyklus untätig, da sie keinen Befehl hat, der auszuführen ist – diese Situation bezeichnet man üblicherweise als Pipeline-Blase – so nimmt die Prozessorleistung ab.
  • Eine mögliche Ursache für Pipelineblasen sind Verzweigungsbefehle. Tritt ein Verzweigungsbefehl auf, so muss der Prozessor die Zieladresse des Verzweigungsbefehls feststellen und damit beginnen, Befehle an der Zieladresse zu holen und nicht an der nächstfolgenden Adresse nach dem Verzweigungsbefehl. Ist zudem der Verzweigungsbefehl ein bedingter Verzweigungsbefehl (d. h., dass eine Verzweigung abhängig davon genommen wird, ob eine besondere Bedingung vorliegt oder nicht), so muss der Prozessor entscheiden, ob der Verzweigungsbefehl ausgeführt wird und zusätzlich die Verzweigungsadresse ermitteln. Da die Pipelinestufe, die die Zieladresse und/oder das Verzweigungsergebnis definitiv bestimmt (d. h., ob der Verzweigung gefolgt wird oder nicht), normalerweise in der Pipeline ein gutes Stück hinter der Stufe liegt, die die Befehle holt, können Blasen erzeugt werden.
  • Um dieses Problem anzugreifen enthalten moderne Mikroprozessoren in der Regel Verzweigungsvorhersage-Mechanismen, die die Zieladresse und das Verzweigungsergebnis weit oben in der Pipeline vorhersagen. Die Entwickler von Mikroprozessoren streben fortgesetzt danach, Verzweigungsvorhersager mit höherer Vorhersagegenauigkeit zu entwerfen. Die Verzweigungsvorhersager sagen jedoch die Ergebnisse von Verzweigungsbefehlen mit einer nicht trivialen Häufigkeit falsch voraus. Wie oben bereits erwähnt müssen die Fehlvorhersagen in einer nachfolgenden Pipelinestufe unter der Verzweigungsvorhersagestufe erkannt und korrigiert werden. Die mit der Fehlvorhersage verbundenen Nachteile hängen von der Anzahl der Pipelinestufen zwischen dem Verzweigungsvorhersager und der Korrekturstufe für die Verzweigungsfehlvorhersage ab. Man benötigt daher eine Vorrichtung und ein Verfahren zum Korrigieren von Fehlvorhersagen bei bedingten Verzweigungsbefehlen weiter oben in der Pipeline.
  • Zudem legen bedingte Verzweigungsbefehle eine Verzweigungsbedingung fest, die, wenn sie erfüllt wird, den Mikroprozessor anweist, zur Verzweigungszieladresse zu verzweigen. Andernfalls fährt der Mikroprozessor damit fort, den nächsten nachfolgenden Befehl zu holen. Der Mikroprozessor enthält Statusflags, die den Status des Mikroprozessors speichern. Die Statusflags werden geprüft, um festzustellen, ob die vom bedingten Verzweigungsbefehl festgelegte Bedingung erfüllt ist. Um letztlich festzustellen, ob ein bedingter Verzweigungsbefehl falsch vorhergesagt wurde, muss der Mikroprozessor den allerneuesten Status der Statusflags untersuchen. Derzeit werden die Statusflags jedoch erst sehr spät in der Pipeline untersucht, um festzustellen, ob die Verzweigungsbedingung erfüllt ist und ob die Verzweigungsvorhersage unzutreffend war. Man benötigt daher eine Einrichtung und ein Verfahren, mit denen die Statusflags weiter oben in der Pipeline erzeugt werden.
  • Schließlich wird der Status von Statusflags in der Regel von den Ergebnissen von Befehlen beeinflusst, die dem bedingten Verzweigungsbefehl vorausgehen. Die Bedingung kann beispielsweise darin bestehen, ob das Carry-Flag, das eines der Statusflags ist, gesetzt ist. Der Status des Carry-Flags kann beispielsweise durch das Ergebnis des allerletzten Addierbefehls bestimmt werden. Die Ergebnisse von Befehlen, die die Statusflags beeinflussen, werden jedoch derzeit in Ausführungseinheiten erzeugt, die sich in unteren Pipelinestufen des Mikroprozessors befinden. Man benötigt daher eine Einrichtung und ein Verfahren, mit denen die Befehlsergebnisse weiter oben in der Pipeline erzeugt werden.
  • In einer Veröffentlichung von Farcy et al. ("Dataflow analysis of branch mispredictions and its application to early resolution of branch outcomes", PROCEEDINGS OF THE ANNUAL ACM/IEEP INTERNATIONAL SYMPOSIUM ON MICROARCHITECTURE, LOS ALMITOS, CA: IEEE COMP. SOC., US, 20. November 1998, Seiten 59–68) ist ein Verfahren zum Verringern der Auswirkungen von Verzweigungs-Fehlvorhersagen auf die Prozessorleistung offenbart, wobei die Verzögerung bei der Bewertung der Bedingungen verringert wird. Dies wird durch die Vorwegnahme des Verzweigungsergebnisses erzielt.
  • In US-6,079,014 ist ein Prozessor offenbart, der eine eingangsseitige Schaltung aufweist, die eine Reihe von Befehlen abhängig von einer Programmfolge holt, die von mindestens einem Verzweigungsbefehl bestimmt wird, eine Registerumbenennungsschaltung, die einem jeden Befehl Ausführungsressourcen zuweist, und eine Ausführungsschaltung, die jeden Befehl im Befehlsstrom ausführt. Die Ausführungsschaltung veranlasst die eingangsseitige Schaltung, die Befehlsfolge erneut zu holen, falls eine Verzweigungs-Fehlvorhersage erkannt wird.
  • Zusammenfassung
  • Gemäß einem Aspekt stellt die Erfindung eine Vorrichtung und ein Verfahren bereit, die einen bedingten Verzweigungsbefehl in einem Pipeline-Mikroprozessor früh korrigieren. Ein Verzweigungsvorhersager sagt das Ergebnis des bedingten Verzweigungsbefehls früh in der Pipeline vorher, und der Mikroprozessor verzweigt abhängig von der Vorhersage entweder zur vorhergesagten Verzweigungs-Zieladresse oder holt den nächsten nachfolgenden Befehl. Die Vorhersage wird zusammen mit dem Verzweigungsbefehl durch die Pipeline geführt. Die Vorrichtung umfasst eine Früh-Verzweigungs-Korrekturlogik, die sich in einer Pipelinestufe über einer Stufe befindet, in der die Spät-Verzweigungs-Korrekturlogik sitzt. Erreicht der Verzweigungsbefehl die Früh-Verzweigungs-Korrekturlogik, so untersucht die Früh-Verzweigungs-Korrekturlogik den Bedingungscode, der durch den Verzweigungsbefehl festgelegt wird, und stellt fest, ob die festgelegte Bedingung in den Früh-Statusflags erfüllt ist, um zu ermitteln, ob die Vorhersage unzutreffend ist. Die Früh-Statusflags werden abhängig von Befehlen erzeugt, die dem Verzweigungsbefehl vorhergehen. Die Früh-Statusflags werden von einer Erzeugungslogik für Früh-Flags erzeugt, die weiter oben in der Pipeline liegen als Ausführungseinheiten, die die Architektur-Statusflags des Mikroprozessors erzeugen. Die Früh-Statusflags können gültig sein oder nicht. Sind die Früh-Statusflags gültig und zeigen sie eine Fehlvorhersage an, so korrigiert die Früh-Verzweigungs-Korrekturlogik die Fehlvorhersage. Wurde der Vorhersage gefolgt und zeigen die Früh-Statusflags an, dass die Bedingung nicht erfüllt war, so korrigiert die Früh-Verzweigungs-Korrekturlogik die Fehlvorhersage durch das Leeren der Pipeline und das Verzweigen des Mikroprozessors zu dem nächstfolgenden Befehl nach dem bedingten Verzweigungsbefehl. Wurde der Vorhersage nicht gefolgt und zeigen die Früh-Statusflags an, dass die Bedingung erfüllt war, so korrigiert die Früh-Verzweigungs-Korrekturlogik die Fehlvorhersage durch das Leeren der Pipeline und das Verzweigen des Mikroprozessors zu der Verzweigungs-Zieladresse.
  • In einer Ausführungsform werden die Früh-Statusflags abhängig von den Frühergebnissen von Statusflag-Veränderungsbefehlen erzeugt, die dem bedingten Verzweigungsbefehl vorausgehen. Die Frühergebnisse können gültig sein oder nicht. Ist das Ergebnis eines Statusflag-Veränderungsbefehls ungültig, so werden die Früh-Statusflags für ungültig erklärt. Die Früh-Statusflags werden wieder gültig gemacht, indem die Architektur-Statusflags auf die Früh-Statusflags kopiert werden, nachdem alle Statusflag-Veränderungsbefehle – wenn vorhanden – in den Pipelinestufen unter der Früh-Verzwei gungs-Korrekturlogikstufe die Architektur-Statusflags aktualisiert haben. Dieses Ereignis tritt beispielsweise dann ein, wenn die Pipeline geleert wird, etwa während der Korrektur einer Verzweigungs-Fehlvorhersage.
  • In einer weiteren Ausführungsform wird eine Angabe darüber, ob die Früh-Verzweigungs-Korrekturlogik die Fehlvorhersage korrigiert hat, durch die Pipeline zur Spät-Verzweigungs-Korrekturlogik geführt. Erreicht der bedingte Verzweigungsbefehl nachfolgend die Spät-Verzweigungs-Korrekturlogik, und zeigen die Architektur-Statusflags eine Fehlvorhersage an und hat die Früh-Verzweigungs-Korrekturlogik die Fehlvorhersage nicht korrigiert, so korrigiert die Spät-Verzweigungs-Korrekturlogik die Fehlvorhersage.
  • In einer weiteren Ausführungsform werden die Frühergebnisse der Befehle vor dem bedingten Verzweigungsbefehl von der Früh-Ausführungslogik erzeugt. Die Früh-Ausführungslogik befindet sich in einer Pipelinestufe über der Stufe, in der die Ausführungseinheiten sitzen, die die endgültigen Befehlsergebnisse erzeugen. Die Früh-Ausführungslogik ist so aufgebaut, dass sie eine Untermenge der Befehle des Mikroprozessor-Befehlsatzes ausführt. Im Einzelnen ist die Früh-Ausführungslogik in einer Adressstufe der Pipeline enthalten und umfasst einen Adressgenerator, der so ergänzt ist, dass er häufig ausgeführte Befehle abarbeitet, die rasch bearbeitet werden können. In einer Ausführungsform enthält die Früh-Ausführungslogik eine Logik zum Ausführen allgemeiner Befehle, schneller arithmetischer Operationen, logischer Operationen und Verschiebeoperationen. Sind die Frühergebnisse, die die Früh-Ausführungslogik erzeugt, Ergebnisse eines vorhergehenden Befehls, für den die Früh-Ausführungslogik nicht konfiguriert ist, um ein gültiges Ergebnis zu erzeugen, so sind die Frühergebnisse ungültig. Ist der Befehl ein Befehl, der Statusflags verändert, so werden die Früh-Statusflags für ungültig erklärt.
  • In einer anderen Ausführungsform werden die Frühergebnisse in einer Früh-Registerdatei gespeichert, deren Register der Architektur-Registerdatei des Mikroprozessors entsprechen, und zwar zusammen mit Gültigkeitsanzeigen für jedes Register in der Früh-Registerdatei. Die Früh-Registerdatei liefert Frühergebnisse als Operanden an den Früh-Ausführungslogik/Adressgenerator, damit sie beim Erzeugen der Früh-Resultate verwendet werden. Liefert die Früh-Registerdatei einen ungültigen Eingabeoperanden für die Früh-Ausführungslogik, so wird das erzeugte Frühergebnis für ungültig erklärt. Ist der Befehl ein Befehl, der Statusflags verändert, so werden die Früh-Statusflags für ungültig erklärt.
  • KURZE BESCHREIBUNG DER ZEICHNUNGEN
  • Es zeigt:
  • 1 ein Blockdiagramm eines Pipeline-Mikroprozessors der Erfindung;
  • 2 ein Blockdiagramm, das ausführlich die R-Stufe, die A-Stufe und die J- Stufe des Mikroprozessors der Erfindung in 1 erläutert;
  • 3 ein Blockdiagramm der Architektur-Registerdatei, der Früh-Registerdatei, des Architektur-EFLAGS-Registers und des Früh-EFLAGS-Registers in 1 und 2 ge mäß der Erfindung;
  • 4 ein Flussdiagramm, das die Arbeitsweise der Vorrichtung in 2 zum Erzeugen von Frühergebnissen und Früh-EFLAGS gemäß der Erfindung erläutert;
  • 5 ein Flussdiagramm, das die Arbeitsweise der Vorrichtung in 2 zum Wiederherstellen und für gültig Erklären des Früh-EFLAGS-Registers gemäß der Erfin dung erläutert;
  • 6 ein Flussdiagramm, das die Arbeitsweise des Mikroprozessors beim Aus führen früher Verzweigungskorrekturen gemäß der Erfindung erläutert; und
  • 7 ein Flussdiagramm, das die Arbeitsweise des Mikroprozessors beim Aus führen später Verzweigungskorrekturen gemäß der Erfindung erläutert.
  • AUSFÜHRLICHE BESCHREIBUNG
  • Anhand von 1 wird nun ein Blockdiagramm eines Pipeline-Mikroprozessors 100 der Erfindung dargestellt. Der Mikroprozessor 100 enthält eine Anzahl Stufen in seiner Pipeline. In 1 sind zwölf Pipelinestufen dargestellt.
  • Der Mikroprozessor 100 enthält eine I-Stufe 102 (Befehlsholstufe), die Befehle holt. Die I-Stufe 102 enthält einen Befehlscache, in dem Programmbefehle zwischengespeichert werden. Die I-Stufe 102 holt Programmbefehle aus dem Befehlscache oder aus einem Systemspeicher, der mit dem Mikroprozessor 100 verbunden ist. Die I-Stufe 102 holt Befehle an einer Speicheradresse, die in einem Befehlszeigerregister gespeichert ist. Im Normalfall wird der Befehlszeiger beim Holen von Befehlen erhöht, so dass Befehle nacheinander geholt werden. Der Befehlszeigerwert kann jedoch auf eine nicht nachfolgende Speicheradresse geändert werden, wenn ein Verzweigungsbefehl vorliegt, damit der Mikroprozessor 100 zu einer Verzweigungs-Zieladresse verzweigt. Die I-Stufe 102 enthält einen Verzweigungsvorhersager 132. Der Verzweigungsvorhersager 132 sagt vorher, ob ein Verzweigungsbefehl in dem geholten Befehlsstrom enthalten ist, ob dem Verzweigungsbefehl gefolgt wird oder nicht, und die Verzweigungs-Zieladresse des Verzweigungsbefehls, falls diesem gefolgt wird. Der Verzweigungsvorhersager 132 sagt also vorher, ob der Verzweigungsbefehl, wenn er schließlich später in der Pipeline 100 aufgearbeitet wird, den Mikroprozessor 100 anweist, zu einer Verzweigungs-Zieladresse zu verzweigen, die der Verzweigungsbefehl festlegt (wenn ihm gefolgt wird), oder ob er den Mikroprozessor 100 anweist, den nächstfolgenden Befehl zu holen und auszuführen, der hinter dem Verzweigungsbefehl kommt (wenn diesem nicht gefolgt wird). Die I-Stufe 102 empfängt erste und zweite Steuereingaben 154 und 156, die im Weiteren ausführlicher beschrieben werden. Diese weisen die I-Stufe 102 an, eine Vorhersage eines Verzweigungsbefehls zu korrigieren, die der Verzweigungsvorhersager 132 getätigt hat. In einer Ausführungsform umfasst der Verzweigungsvorhersager 132 einen Verzweigungsziel-Adresscache (BTAC), der die Adressen der vorher ausgeführten Verzweigungsbefehle und ihre aufgelösten Verzweigungs-Zieladresse zwischenspeichert. Zusätzlich speichert der BTAC Vorhersageinformation, die für die Vorhersage verwendet wird, ob dem Verzweigungsbefehl gefolgt wird oder nicht, und zwar abhängig von der Vorgeschichte des Verzweigungsbefehls. Andere Ausführungsformen enthalten dynamische Tabellen bezüglich der Verzweigungsvorgeschichte, statische Verzweigungsvorhersager und hybride statisch-dynamische Verzweigungsvorhersager, die im Gebiet der Verzweigungsvorhersage bekannt sind. In einer Ausführungsform umfasst die I-Stufe 102 vier Pipelinestufen.
  • Der Mikroprozessor 100 enthält auch eine F-Stufe 104 (Befehlsformatstufe), die mit der I-Stufe 102 verbunden ist. In einer Ausführungsform enthält der Befehlssatz des Mikroprozessors 100 Befehle mit unterschiedlicher Länge, beispielsweise beim Befehlssatz der x86-Architektur, und nicht nur Befehle mit fester Länge. Die F-Stufe 104 enthält einen Befehlsformatierer, der einen Strom von Befehlsbytes unterteilt und den Strom in einzelne Befehle zerlegt. Insbesondere erkennt der Befehlsformatierer die Länge und den Anfangsort eines jeden Befehls innerhalb des Befehlsbytestroms. In einer Ausführungsform enthält die F-Stufe 104 eine Befehlswarteschlange, die formatierte Befehle speichert.
  • Der Mikroprozessor 100 enthält auch eine X-Stufe 106 (Übersetzungsstufe), die mit der F-Stufe 104 verbunden ist. In einer Ausführungsform enthält der Mikroprozessor 100 einen RISC-Kern (RISC = Reduced Instruction Set Computer, Computer mit verringertem Befehlsvorrat). Der RISC-Kern führt einen eigentlichen Befehlssatz aus. Die eigentlichen Befehle, die auch Mikrobefehle heißen, sind Befehle, die relativ unkompliziert sind und wirksamer ausgeführt werden als die Programmbefehle, die die I-Stufe 102 holt. Diese Befehle werden als Makrobefehle bezeichnet. Beispielsweise enthält der Befehlssatz der x86-Architektur Makrobefehle oder Computerbefehle mit komplexem Befehlssatz (CISC, CISC = Complex Instruction Set Computer instructions). Die X-Stufe 106 enthält einen Befehlsübersetzer, der Makrobefehle in Mikrobefehle übersetzt. Der Befehlsübersetzer holt formatierte Makrobefehle aus der Makrobefehlsschlange der F-Stufe 104 und übersetzt jeden Makrobefehl in einen oder mehrere Mikrobefehle, die an die restlichen Stufen der Pipeline 100 geliefert werden, die generell und gemeinsam als Ausführungsstufen der Pipeline 100 bezeichnet werden. In einer Ausführungsform enthält die X-Stufe 106 eine Mikrobefehls-Warteschlange, in der übersetzte Mikrobefehle abgelegt werden. In einer Ausführungsform umfasst die X-Stufe 106 zwei Pipelinestufen.
  • Der Mikroprozessor 100 enthält auch eine R-Stufe 108 (Registerstufe), die mit der X-Stufe 106 verbunden ist, und eine A-Stufe 112 (Adresserzeugungsstufe), die mit der R-Stufe 108 verbunden ist. Die R-Stufe 108 enthält eine Architektur-Registerdatei 134 (ARF) und eine Früh-Registerdatei 136 (ERF). Die Architektur-Registerdatei 134 enthält Register, die den Programmen sichtbar sind, die auf dem Mikroprozessor 100 laufen. Im Einzelnen kann ein Programmbefehl ein Register in der Architektur-Registerdatei 134 als Quelloperand festlegen, von dem eine Eingabe für den Befehl zu empfangen ist, die zum Erzeugen eines Ergebnisses verarbeitet wird. In ähnlicher Weise kann der Programmbefehl ein Register in der Architektur-Registerdatei 134 als Zieloperand festlegen, in den das Ergebnis des Befehls zu schreiben ist. Der Befehl kann die Register explizit oder implizit festlegen. In einer Ausführungsform enthält die Architektur-Registerdatei 134 die Register EAX, EBX, ECX, EDX, EBP, ESI, EDI und ESP der Registerdatei der x86-Architektur, siehe 3. Die Früh-Registerdatei 136 enthält Register, die jedem Register in der Architektur-Registerdatei 134 zugeordnet sind, siehe 3.
  • Die in den Registern der Architektur-Registerdatei 134 gespeicherten Werte geben den für den Benutzer sichtbaren Status des Mikroprozessors 100 wieder. Die in den Registern der Früh-Registerdatei 136 gespeicherten Werte können einen spekulativen Status des Mikroprozessors 100 wiedergeben. Erzeugt eine Stufe des Mikroprozessors 100 ein Befehlsergebnis, und legt der Befehl ein Register in der Architektur-Registerdatei 134 als Ergebnisziel fest, so darf das Ergebnis so lange nicht in die Architektur-Registerdatei 134 geschrieben werden, bis der Befehl nicht mehr spekulativ ist, d. h., bis der Befehl garantiert abgeschlossen oder zurückgezogen wird. Im Weiteren wird genauer beschrieben, dass im Gegensatz dazu ein Befehlsergebnis in die Früh-Registerdatei 136 geschrieben werden kann, bevor der Befehl garantiert abgeschlossen wird. Insbesondere kann ein Befehlsergebnis, das vom Früh-Ausführungslogik/Adressgenerator 138 (der in der A-Stufe 112 enthalten ist und weiter unten ausführlich beschrieben wird) erzeugt wird, in die Früh-Registerdatei 136 geschrieben werden, bevor garantiert ist, dass der Befehl abgeschlossen wird. Ein Befehl wird garantiert abgeschlossen, falls der Mikroprozessor 100 feststellt, dass der Befehl selbst und keine Befehle vor diesem Befehl noch in der Lage sind, einen Abbruch zu erzeugen, und dass alle Verzweigungsbefehle vor diesem Befehl endgültig aufgelöst sind, d. h., falls der Mikroprozessor 100 letztendlich feststellt, dass jedem Verzweigungsbefehl vor diesem Befehl entweder korrekt gefolgt wird oder nicht gefolgt wird, und dass die Verzweigungs-Zieladresse eines jeden verfolgten Verzweigungsbefehls korrekt ist. Zusätzlich werden die Werte in der Architektur-Registerdatei 134 stets als gültig garantiert, wogegen die Werte in der Früh-Registerdatei 136 zusätzlich dazu, dass sie spekulativ sind, gültig oder ungültig sein können. Dies wird im Weiteren genauer erläutert. Folgerichtig enthält jedes Register in der Früh-Registerdatei 136 auch ein zugehöriges Gültigkeitsbit 218, siehe 3, das anzeigt, ob der im zugehörigen Register gespeicherte Wert gültig ist. Die Früh-Registerdatei 136 wird beim Zurücksetzen des Mikroprozessors 100 mit den gleichen Werten initialisiert, mit denen die Architektur-Registerdatei 134 initialisiert wird.
  • Die R-Stufe 108 der Pipeline des Mikroprozessors 100 enthält auch das Architektur-EFLAGS-Register 162. Die A-Stufe 112 enthält ein Früh-EFLAGS-Register 142. Das Architektur-EFLAGS-Register 162 und das Früh-EFLAGS-Register 142 speichern Statusflags, die Attribute der Ergebnisse von Befehlen anzeigen, beispielsweise ob das Ergebnis null ist, einen Übertrag erzeugt hat oder negativ ist. In einer Ausführungsform umfasst jedes Statusflag ein einziges Bit. In einer Ausführungsform umfasst das Architektur-EFLAGS-Register 162 ein x86-Architektur-EFLAGS-Register, das die folgenden Statusflags enthält: Überlaufflag (OF), Vorzeichenflag (SF), Nullflag (ZF), Paritätsflag (PF) und Übertragsflag (CF), siehe 3. Der Mikroprozessor 100 enthält in seinem Befehlssatz bedingte Befehle, die Bedingungscodes spezifizieren. Ein Bedingungscode legt einen Zustand eines oder mehrerer Statusflags fest. Ist der aktuelle Status der Statusflags gleich dem im Bedingungscode festgelegten Status, so ist die Bedingung erfüllt, und der Mikroprozessor 100 führt eine Operation aus, die der bedingte Befehl festlegt. Andernfalls wird die spezifizierte Operation nicht ausgeführt. Ein Beispiel für einen bedingten Befehl ist ein bedingter Verzweigungsbefehl, der in der x86-Architektur ein Sprungbefehl ist, der bei erfüllter Bedingung ausgeführt wird (Jcc), und der einen Bedingungscode und einen Versatz festlegt, der zum Berechnen einer Verzweigungs-Zieladresse verwendet wird. Ein besonderes Beispiel für einen Jcc ist ein JNZ-Befehl (JNZ = Jump if Not Zero). Der JNZ-Befehl legt einen Bedingungscode "nicht null" fest. Ist das Nullflag (ZF) gelöscht (d. h. ist die Bedingung "nicht null" wahr), so verzweigt der Mikroprozessor 100 zur Verzweigungs-Zieladresse, die der Verzweigungsbefehl festlegt (d. h. dem bedingten Verzweigungsbefehl wird gefolgt). Ist jedoch das Nullflag gesetzt, (d. h. ist die Bedingung "nicht null" falsch), so holt der Mikroprozessor 100 den nächstfolgenden Befehl nach dem bedingten Verzweigungsbefehl (d. h. dem bedingten Verzweigungsbefehl wird nicht gefolgt). Weitere Beispiele für bedingte x86-Befehle sind die Befehle SETcc, LOOPcc und CMOVcc.
  • Das Architektur-EFLAGS-Register 162 enthält Statusflags, die für Programme sichtbar sind, die auf dem Mikroprozessor 100 laufen. Insbesondere kann ein bedingter Programmbefehl einen Bedingungscode abhängig von den Statusflags im Architektur-EFLAGS-Register 162 festlegen. Die Früh-EFLAGS-Register 142 enthalten Statusflags, die jedem Statusflag im Architektur-EFLAGS-Register 162 zugeordnet sind, siehe 3. Ähnlich wie beim Zusammenhang zwischen der Architektur-Registerdatei 134 und der Früh-Registerdatei 136 spiegeln die im Architektur-EFLAGS-Register 162 gespeicherten Werte den für den Benutzer sichtbaren Status des Mikroprozessors 100. Dagegen können die im Früh-EFLAGS-Register 142 gespeicherten Werte einen spekulativen Status des Mikroprozessors 100 wiedergeben. Führt eine Stufe des Mikroprozessors 100 einen Befehl aus, der ein oder mehrere Statusflags verändert, so werden die Statusflags in dem Architektur-EFLAGS-Register 162 so lange nicht aktualisiert, bis der Befehl nicht mehr spekulativ ist. Im Gegensatz dazu können, siehe die ausführliche Beschreibung unten, die Statusflags im Früh-EFLAGS-Register 142 aktualisiert werden, bevor garantiert ist, dass der Befehl abgeschlossen wird. Im Einzelnen kann der Mikroprozessor 100 ein Statusflag im Früh-EFLAGS-Register 142 abhängig von einem Befehl aktualisieren, den der Früh-Ausführungslogik/Adressgenerator 138 ausführt, der auch als Früh-Ausführungseinheit 138 bezeichnet wird, bevor garantiert ist, dass der Befehl abgeschlossen wird. Zusätzlich ist stets garantiert, dass die Werte im Architektur-EFLAGS-Register 162 immer gültig sind, wogegen die Werte im EFLAGS-Register 142 gültig oder ungültig sein können. Dies wird im Folgenden ausführlicher erläutert. Folglich enthält das EFLAGS-Register 142 auch ein Gültigkeitsbit 246, siehe 3, das anzeigt, ob die im EFLAGS-Register 142 gespeicherten Werte gültig sind. Beim Zurücksetzen des Mikroprozessors 100 wird das EFLAGS-Register 142 mit den gleichen Werten initialisiert, mit denen auch das Architektur-EFLAGS-Register 162 initialisiert wird. Die Ausführungsform in 3 zeigt ein einziges Gültigkeitsbit 246 für das EFLAGS-Register 142. Es wird jedoch eine andere Ausführungsform in Betracht gezogen, in der ein Gültigkeitsbit für jedes Statusflag im Früh-EFLAGS-Register 142 gehalten wird.
  • Der Früh-Ausführungslogik/Adressgenerator 138 in der A-Stufe 112 erzeugt ein Frühergebnis und eine Gültigkeitsanzeige, die über einen Frühergebnisbus 152 an die R-Stufe 108 zurückgeliefert werden. Dies wird im Weiteren ausführlicher erklärt. Der Früh-Ausführungslogik/Adressgenerator 138 nimmt auch effektive Adressberechnungen vor und erzeugt damit Speicheradressen für Speicherzugriffe abhängig von Eingabeoperanden, beispielsweise Operanden, die die Architektur-Registerdatei 134 und die Früh-Registerdatei 136 liefern und/oder einen konstanten Operanden, den der Befehl liefert, beispielsweise eine Verschiebung oder einen Versatz. Die Speicheradressen können von dem Befehl explizit festgelegt werden. Die Speicheradressen können von dem Befehl auch implizit festgelegt werden, beispielsweise als eine Adresse eines Orts in einem Stapelspeicher abhängig von einem implizit festgelegten Stapelzeigerregister (z. B. ESP) oder Blockzeigerregister (z. B. EBP), beispielsweise bei einem Push- oder Popbefehl.
  • Der Mikroprozessor 100 enthält auch eine J-Stufe 114, die mit der A-Stufe 112 verbunden ist. Die J-Stufe 114 enthält eine Früh-Verzweigungs-Korrekturlogik 144. Die Früh-Verzweigungs-Korrekturlogik 144 korrigiert gezielt Verzweigungsvorhersagen anhand der Werte des Früh-EFLAGS-Registers 142 über das Steuersignal 154. Dies wird weiter unten genauer beschrieben.
  • Der Mikroprozessor 100 enthält auch eine D-Stufe 116, die mit der J-Stufe 114 verbunden ist, eine G-Stufe 118, die mit der D-Stufe 116 verbunden ist, und eine H-Stufe 122, die mit der G-Stufe 118 verbunden ist. Die D-Stufe 116, die G-Stufe 118 und die H-Stufe 122 enthalten einen Datencache, in dem Daten aus dem Systemspeicher zwischengelagert werden. In einer Ausführungsform ist der Datencache ein Pipeline-Cache, der drei Pipelinestufen umfasst und eine Zugriffszeit von drei Taktzyklen erfordert. Auf den Datencache wird mit Hilfe von Speicheradressen zugegriffen, die der Früh-Ausführungslogik/Adressgenerator 138 erzeugt. Befehle, die Ladevorgänge von Daten aus dem Speicher ausführen, erfolgen in der D-Stufe 116, der G-Stufe 118 und der H-Stufe 122.
  • Der Mikroprozessor 100 enthält auch eine E-Stufe 124 (Ausführungsstufe), die mit der H-Stufe 122 verbunden ist. Die E-Stufe 124 enthält Ausführungseinheiten 146, die Befehlsoperationen ausführen. Die Ausführungseinheiten 146 können Schaltkreise wie Addierer, Subtrahierer, Multiplizierer, Dividierer, Schieber, Dreher, Logik zum Aus führen von booleschen Operationen, Logik zum Ausführen von transzendenten und logarithmischen Funktionen usw. enthalten, die endgültige Ergebnisse der Befehle erzeugen. In einer Ausführungsform enthalten die Ausführungseinheiten 146 eine Ganzzahleinheit, eine Fließkommaeinheit, eine MMX-Einheit und eine SSE-Einheit. Die Befehlsergebnisse, die die Ausführungseinheiten 146 erzeugen, sind stets korrekte Befehlsergebnisse. Die Ausführungseinheiten 146 erhalten Eingabe- bzw. Quelloperanden, die immer gültig sind. Zu den Quellen der in die Ausführungseinheiten 146 eingegebenen Operanden gehören die Architektur-Registerdatei 134, das Architektur-EFLAGS-Register 162, Operanden aus dem Datencache, augenblickliche oder konstante Operanden, die explizit in Befehlen festgelegt werden, und Operanden, die von anderen Pipelinestufen weitergereicht werden. Die Ausführungseinheiten 146 empfangen insbesondere keine spekulativen Eingabeoperanden aus der Früh-Registerdatei 136 oder dem Früh-EFLAGS-Register 142.
  • Der Mikroprozessor 100 enthält eine S-Stufe 126 (Speicherstufe), die mit der E-Stufe 124 verbunden ist. Die S-Stufe 126 nimmt Speicheroperationen zum Ablegen von Daten vor, beispielsweise Befehlsergebnisse, die von den Ausführungseinheiten 146 erzeugt werden, und zwar im Datencache und/oder Systemspeicher. Zusätzlich enthält die S-Stufe 126 eine Spät-Verzweigungs-Korrekturlogik 148, die Verzweigungsvorhersagen anhand der Werte des Architektur-EFLAGS-Registers 162 über das Steuersignal 156 korrigiert. Dies wird im Folgenden genauer erläutert.
  • Der Mikroprozessor 100 enthält auch eine W-Stufe 128 (Ergebnis-Zurückschreibstufe), die mit der S-Stufe 126 verbunden ist. Die W-Stufe 128 aktualisiert den Architekturstatus des Mikroprozessors 100 durch das Zurückschreiben von Befehlsergebnissen in die Architektur-Registerdatei 134 und das Architektur-EFLAGS-Register 162 über einen Ergebnisbus 158.
  • In einer Ausführungsform umfasst der Mikroprozessor 100 einen Einzelbefehlsausgabe- oder Skalar- oder Einzelausführungs-Mikroprozessor. D. h., in jedem Taktzyklus des Mikroprozessors 100 wird höchstens ein Befehl von den Befehlsausgabe- oder Befehlserzeugungsstufen (I-Stufe 102 bis X-Stufe 106) an die Befehlsausführungsstufen (R-Stufe 108 bis W-Stufe 128) ausgegeben. Im Gegensatz dazu geben superskalare Mikroprozessoren je Taktzyklus zwei oder mehr Befehle zur Verarbeitung aus. Die hier beschriebene Vorrichtung und das beschriebene Verfahren sind jedoch nicht auf skalare Mikroprozessoren eingeschränkt, sofern dies nicht so angegeben wird. In einer Ausfüh rungsform umfasst der Mikroprozessor 100 einen Mikroprozessor, der der Reihe nach ausgibt. D. h., Befehle werden zur Ausführung in der Reihenfolge ausgegeben, in der sie im Programm festgelegt sind. Dagegen besitzen einige Mikroprozessoren die Fähigkeit, Befehle außerhalb der Reihenfolge auszugeben.
  • 2 zeigt ein Blockdiagramm, das die R-Stufe 108, die A-Stufe 112 und die J-Stufe 114 des Mikroprozessors 100 der Erfindung in 1 in Einzelheiten darstellt. Die R-Stufe 108 enthält die Architektur-Registerdatei 134, die Früh-Registerdatei 136 und das Architektur-EFLAGS-Register 162 aus 1. Das Architektur-EFLAGS-Register 162 wird von der W-Stufe 128 über den Ergebnisbus 158 aktualisiert. Die R-Stufe 108 empfängt einen Befehl 206 von der X-Stufe 106. Der Befehl 206 kann decodierte Information über den Befehl zusätzlich zu den Befehlsbytes selbst enthalten. Der Befehl legt den Typ des Befehls fest, beispielsweise Addition, Verzweigung usw. Der Befehl kann auch einen Bedingungscode festlegen. Der Befehl kann auch einen Zieloperandenort über eine Marke festlegen. Im Einzelnen kann die Zieloperandenmarke eines der Register in der Architektur-Registerdatei 134 das Ziel des Ergebnisses des Befehls 206 festlegen. Die Architektur-Registerdatei 134 empfängt über den Ergebnisbus 158 in 1 Befehlsergebnisse von der W-Stufe 128. In die Architektur-Registerdatei 134 wird über den Ergebnisbus 158 eine Zieloperandenmarke 278 geliefert, damit gewählt wird, welches der Register mit den Befehlsergebnissen aus dem Ergebnisbus 158 aktualisiert wird. Die Früh-Registerdatei 136 empfängt über den Frühergebnisbus 152 in 1 ein Frühergebnis 242 von der A-Stufe 112. Der Befehl 206 enthält eine Zieloperandenmarke 216, die als Auswahleingabe für die Früh-Registerdatei 136 dient und auswählt, welches der Register mit dem Frühergebnis 242 aktualisiert wird. Die an die Früh-Registerdatei 136 gelieferte Zieloperandenmarke 216 kommt aus einem Pipelineregister 232, das den Befehl 206 durch die Stufen zur A-Stufe 112 führt.
  • Der Befehl kann auch einen oder mehrere Quelloperanden über ein Quelloperanden-Markensignal 214 festlegen. In einer Ausführungsform kann der Befehl 206 bis zu drei Quelloperanden bestimmen. Der Befehl 206 legt über das Quelloperanden-Markensignal 214 Registerquelloperanden fest. Die Quelloperanden-Marken 214 werden als Auswahleingabe an die Architektur-Registerdatei 134 und die Früh-Registerdatei 136 geliefert und wählen aus, welche der Register – wenn überhaupt – als Quelloperanden an den Befehl 206 geliefert werden. Der Befehl kann auch unmittelbare oder konstante Operanden (beispielsweise Verschiebung oder Versatz) 222 festlegen.
  • Die R-Stufe 108 enthält auch Gültigkeitsbits 218 für jedes Register der Früh-Registerdatei 136, die auch in 3 zu sehen sind. Die Gültigkeitsbits 218 der Früh-Registerdatei erhalten über den Frühergebnisbus 152 eine Frühergebnis-Gültigkeitsanzeige 244 von der A-Stufe 112. Die Frühergebnis-Gültigkeitsanzeige 244 wird zum Aktualisieren des Gültigkeitsbits 218 verwendet, das dem Register der Früh-Registerdatei 136 zugeordnet ist, das die Zieloperandenmarke 216 wählt.
  • Die R-Stufe 108 enthält auch einen Multiplexer 226, der Quelloperanden für den Befehl 206 wählt, der in die R-Stufe 108 eintritt. Der Multiplexer 226 empfängt Quelloperandeneingaben aus der Architektur-Registerdatei 134 und der Früh-Registerdatei 136. In einer Ausführungsform umfasst die Architektur-Registerdatei 134 drei Leseports, von denen zwei Ausgänge als Eingänge für den Multiplexer 226 dienen und bis zu zwei Quelloperanden je Taktzyklus liefern. In einer Ausführungsform umfasst die Früh-Registerdatei 136 zwei Leseports, deren Ausgänge als Eingänge für den Multiplexer 226 dienen und bis zu zwei Quelloperanden je Taktzyklus liefern. Der Multiplexer 226 empfängt auch einen unmittelbaren/konstanten Operanden 222, der in dem Befehl 206 enthalten sein kann. Der Multiplexer 226 empfängt auch das Frühergebnis 242 aus der A-Stufe 112.
  • Zusätzlich empfängt der Multiplexer 226 eine Gültigkeitsbit-Eingabe, die jedem eingegebenen Operanden zugeordnet ist. Die aus der Früh-Registerdatei 136 empfangenen Gültigkeitsbits, die den Operanden zugeordnet sind, stammen von den Gültigkeitsbits 218 der Früh-Registerdatei. Das Gültigkeitsbit, das dem Frühergebnisoperanden 242 zugeordnet ist, der von der A-Stufe 112 empfangen wird, ist die Frühergebnis-Gültigkeitsanzeige 244. Die Gültigkeitsbits für die Operanden, die die Architektur-Registerdatei 134 und der unmittelbare/konstante Operand 222 liefern, sind stets wahr, d. h., die Operanden der Architektur-Registerdatei 134 und der unmittelbare/konstante Operand 222 sind immer gültig. Die Quelloperanden und die zugeordneten Gültigkeitsbits, die der Multiplexer 226 wählt, werden an ein Quelloperanden-Pipelineregister 238 und ein Gültigkeitsbits-Pipelineregister 236 geliefert, das sie für die A-Stufe 112 bereithält. In einer Ausführungsform ist das Quelloperandenregister 238 dafür ausgelegt, bis zu drei Quelloperanden zu speichern. Das Gültigkeitsbitsregister 236 ist dafür ausgelegt, bis zu drei zugehörige Gültigkeitsbits zu speichern.
  • In einer Ausführungsform enthält der Mikroprozessor 100 auch Weitergabebusse (nicht dargestellt), die Ergebnisse weiterreichen, die die Ausführungseinheiten 146 er zeugt haben, und zwar als Operandenlieferung von der E-Stufe 124 und der S-Stufe 126 an die R-Stufe 108. Die Weitergabebusse dienen als Eingänge für die Multiplexer 226. Legt der Befehl der R-Stufe 108 einen Quelloperanden fest, dessen Marke nicht mit einer Zielmarke in einer der Stufen A 112 bis H 122 übereinstimmt, jedoch mit einer Zielmarke in einer der Stufen E 124 oder S 126 übereinstimmt, so steuert die Früh-Flagerzeugungs/Steuerlogik 212 den Multiplexer 226 so, dass er den Weitergabebus wählt, der das neueste Ergebnis als Operand liefert. Wird ein Operand auf den Weitergabebussen geliefert, so ist er stets gültig.
  • Der Mikroprozessor 100 enthält auch eine Früh-Flagerzeugungs/Steuerlogik 212. Die Früh-Flagerzeugungs/Steuerlogik 212 empfängt als Eingaben die Architektur-EFLAGS 162. Die Früh-Flagerzeugungs/Steuerlogik 212 empfängt als Eingabe auch den Befehl 206 in der R-Stufe 108 und in der A-Stufe 112. Die Früh-Flagerzeugungs/Steuerlogik 212 empfängt als Eingabe auch die Ausgabe des Multiplexers 226, d. h. die Quelloperanden der R-Stufe 108 und die zugehörigen Gültigkeitsbits. Die Früh-Flagerzeugungs/Steuerlogik 212 empfängt als Eingabe auch die Ausgaben der Pipelineregister 232, 236 und 238, d. h. den Befehl der A-Stufe 112, seine Quelloperanden und zugehörigen Gültigkeitsbits. Die Früh-Flagerzeugungs/Steuerlogik 212 empfängt als Eingabe auch das Frühergebnis 242. Die Früh-Flagerzeugungs/Steuerlogik 212 empfängt als Eingabe auch ein Flagveränderungsbefehl-vorhanden-Signal 202 von jeder der Pipelinestufen unter der A-Stufe 112. Ein Wahr-Wert auf einem Flagveränderungsbefehl-vorhanden-Signal 202 zeigt an, dass die entsprechende Stufe einen Befehl hat, der das Architektur-EFLAGS-Register 162 verändert, und dass das Architektur-EFLAGS-Register 162 von dem Befehl noch nicht aktualisiert worden ist. Die Flagveränderungsbefehl-vorhanden-Signale 202 werden dazu verwendet, festzustellen, wann das Früh-EFLAGS-Register 142 wiederhergestellt und für gültig erklärt werden kann. Dies wird im Weiteren anhand von 5 erklärt. Die Früh-Flagerzeugungs/Steuerlogik 212 empfängt als Eingabe auch ein verzweigungskorrigiertes Spätsignal 268. Ein Wahr-Wert auf dem verzweigungskorrigierten Spätsignal 268 zeigt an, dass die Spät-Verzweigungs-Korrekturlogik 148 in 1 eine Verzweigungs-Fehlvorhersage korrigiert hat. Dies impliziert, dass die Pipeline 100 geleert wurde. Das verzweigungskorrigierte Spätsignal 268 wird auch dazu verwendet, festzustellen, wann das Früh-EFLAGS-Register 142 wiederhergestellt und für gültig erklärt werden kann. Dies wird im Weiteren anhand von 5 erklärt. Die Früh-Flagerzeugungs/Steuerlogik 212 empfängt als Eingabe auch Zielmarken 204 der Befehle, die in jeder der Pipelinestufen unter der A-Stufe 112 vorhanden sind. Die Zielmarken 204 werden dazu verwendet, festzustellen, ob ein von einem Befehl 206 in der R-Stufe 108 spezifizierter Quelloperand aus der Architektur-Registerdatei 134 oder der Früh-Registerdatei 136 geliefert werden soll, oder ob das Frühergebnis 242 der A-Stufe 112 geliefert werden soll. Dies wird weiter unten anhand von 4 beschrieben. In einer Ausführungsform kann der Befehl 206 einen Speicherquelloperanden bestimmen, d. h. einen Operanden, dessen Ort durch eine Speicheradresse festgelegt ist. In der Regel ist der Speicheroperand im Speichersystem vorhanden oder im Datencache. In einer Ausführungsform kann der Speicheroperand auch in einer unteren Stufe der Pipeline des Mikroprozessors 100 vorhanden sein. Dies kann für Daten der Fall sein, die der Gegenstand eines vorhergehenden Speicherbefehls sind, der eine Zielspeicheradresse hat, die mit der Speicheroperandenadresse des Befehls der R-Stufe 108 übereinstimmt. Obwohl dies nicht dargestellt ist, empfängt der Multiplexer 226 auch Speicheroperanden als Eingaben. Die Früh-Flagerzeugungs/Steuerlogik 212 empfängt als Eingabe ein Speicheroperanden-vorhanden-Signal 266, das angibt, ob vom Befehl spezifizierte Speicherquelloperanden vorhanden sind und an den Multiplexer 226 geliefert werden können. Das Speicheroperanden-vorhanden-Signal 266 dient dazu, festzustellen, ob es nötig ist, den Befehl 206 der R-Stufe 108 abzubrechen, und ob das Frühergebnis 242 gültig ist. Dies wird im Folgenden anhand von 4 erklärt.
  • Die Früh-Flagerzeugungs/Steuerlogik 212 erzeugt abhängig von ihren Eingangssignalen verschiedene Steuersignale. Die Früh-Flagerzeugungs/Steuerlogik 212 erzeugt ein Wählersteuersignal 282, das den Multiplexer 226 so steuert, dass er die geeigneten Quelloperanden für den Befehl 206 wählt. Die Früh-Flagerzeugungs/Steuerlogik 212 erzeugt auch das Frühergebnis-Gültigkeitssignal 244. Die Früh-Flagerzeugungs/Steuerlogik 212 erzeugt auch einen Wert der Früh-EFLAGS 262, der im Früh-EFLAGS-Register 142 gespeichert wird, und ein Steuersignal 264 zum Aktualisieren des Werts im Früh-EFLAGS-gültig-Register 246. Der Wert im Früh-EFLAGS-gültig-Register wird beim Zurücksetzen des Mikroprozessors auf einen Gültig-Wert initialisiert. Das Früh-EFLAGS-Register 142 und das Gültig-Register 246 arbeiten als Pipelineregister, die die Früh-EFLAGS und das Gültigkeitsbit an die J-Stufe 114 liefern. Die Früh-Flagerzeugungs/Steuerlogik 212 erzeugt auch ein Abbruchsignal 228, das für das Anhalten der R-Stufe 108 an die Pipelineregister 232, 234, 236 und 238 geliefert wird. In einer Ausführungsform umfassen die Pipelineregister 232, 234, 236 und 238 gemultiplexte Register, die dafür ausgelegt sind, ihren momentanen Status zu halten, wenn das Abbruchsignal 228 wahr ist, und zwar bis zum nächsten Taktzyklus. Die Wirkungsweise des Abbruchsignals 228 wird weiter unten mit Hilfe von 4 beschrieben.
  • Die A-Stufe 112 enthält einen Früh-Ausführungslogik/Adressgenerator 138, der die Quelloperanden vom Quelloperandenregister 238 empfängt und das Frühergebnis 242 abhängig von den Quelloperanden 238 erzeugt. Der Früh-Ausführungslogik/Adressgenerator 138 enthält eine Arithmetik-Logik 272, eine boolsche Logik 274 und eine Schiebelogik 276. Der Früh-Ausführungslogik/Adressgenerator 138 ist dafür ausgelegt, effektive Adressen für Speicheroperationen zu erzeugen. Der Früh-Ausführungslogik/Adressgenerator 138 ist auch dafür ausgelegt, eine Untermenge der Operationen auszuführen, die die Befehle des Befehlssatzes des Mikroprozessors 100 benötigen. Daher ist der Früh-Ausführungslogik/Adressgenerator 138 dafür ausgelegt, eine Untermenge der Operationen auszuführen, die die Ausführungseinheiten 146 in 1 ausführen können. Der Früh-Ausführungslogik/Adressgenerator 138 ist dafür ausgelegt, die Untermenge der Operationen auszuführen, die die am häufigsten ausgeführten Operationen sind. Vorteilhafterweise fallen in einer Ausführungsform die am häufigsten ausgeführten Operationen mit den Operationen zusammen, die sich am schnellsten ausführen lassen (d. h., sie erfordern einen relativ kurzen Zeitraum für die Ausführung, so dass sie in einem Taktzyklus ausgeführt werden können), und sie erfordern einen relativ geringen Hardwareumfang, insbesondere über die Hardware hinaus, die bereits zum Erzeugen von Speicheradressen erforderlich ist. In einer Ausführungsform ist die Arithmetik-Logik 272 dafür ausgelegt, zu addieren, subtrahieren, inkrementieren und dekrementieren. Die Arithmetik-Logik 272 ist jedoch beispielsweise nicht dafür konfiguriert, eine Addition mit Übertrag oder eine Subtraktion mit Borgübertrag auszuführen. In einer Ausführungsform ist die boolsche Logik 274 so konfiguriert, dass sie boolsche UND-, ODER-, EXKLUSIV-ODER- und NICHT-ODER-Verknüpfungen ausführt sowie Verschiebungen mit Vorzeichenerweiterung (move with sign extend) und Verschiebungen mit Nullerweiterung (move with zero extend). Die boolsche Logik 274 ist jedoch beispielsweise nicht dafür konfiguriert, einen Byte-Swap vorzunehmen. In einer Ausführungsform ist die Schiebelogik 276 so konfiguriert, dass sie Linksschieben und Rechtsschieben ausführt. Die Schiebelogik 276 ist jedoch beispielsweise nicht dafür konfiguriert, Rotationsvorgänge oder Rotationsvorgänge mit Übertrag vorzunehmen. Obwohl besondere Ausführungsformen beschrieben werden, in denen der Früh-Ausführungslogik/Adressgenerator 138 bestimmte Untermengen an Operationen ausführt, ist die Erfindung nicht auf besondere Ausführungsformen eingeschränkt. Fachleute auf dem Gebiet des Mikroprozessorentwurfs können leicht erkennen, dass man den Früh-Ausführungslogik/Adressgenerator 138 so konfigurieren kann, dass er eine bestimmte Untermenge an Operationen ausführt, die vom besonderen Befehlssatz des Mikroprozessors 100 abhängen und von Leistungszielen und den Wünschen bezüglich des Flächenbedarfs der Schaltung. Das vom Früh-Ausführungslogik/Adressgenerator 138 erzeugte Frühergebnis 242 wird an ein Frühergebnis-Pipelineregister 254 geliefert, damit es gespeichert und nachfolgend an die J-Stufe 114 übergeben wird.
  • Die J-Stufe 114 enthält die Früh-Verzweigungs-Korrekturlogik 144 aus 1. Die Früh-Verzweigungs-Korrekturlogik 144 empfängt die Ausgabe des Früh-EFLAGS-Registers 142, des Früh-EFLAGS-Gültigkeitsregisters 246 und des Frühergebnisregisters 254. Die Früh-Verzweigungs-Korrekturlogik 144 empfängt auch den Befehl in der J-Stufe 114 aus einem Pipelineregister 248, das zum Führen des Befehls 206 vom Pipelineregister 232 durch die Pipeline verwendet wird. Der Mikroprozessor 100 enthält auch ein Vorhergesagte-Verzweigung-genommen-Signal 208, das von der I-Stufe 102, der F-Stufe 104 und der X-Stufe 106 durch das Pipelineregister 234 in die R-Stufe 108 und das Pipelineregister 252 in die A-Stufe 112 geführt und an die Früh-Verzweigungs-Korrekturlogik 144 übergeben wird. Ein Wahr-Wert auf dem Vorhergesagte-Verzweigung-genommen-Signal 208 gibt an, dass der Befehl in der zugehörigen Stufe ein Verzweigungsbefehl ist, von dem der Verzweigungsvorhersager 132 in 1 vorhergesagt hat, dass die Verzweigung genommen wird. D. h., dass der Mikroprozessor 100 bereits abhängig von der Vorhersage des Verzweigungsvorhersagers 132 verzweigt hat.
  • Abhängig von seinen Eingangssignalen erzeugt die Früh-Verzweigungs-Korrekturlogik 144 das Verzweigungssteuersignal 154, das der I-Stufe 102 in 1 geliefert wird. Das Verzweigungssteuersignal 154 enthält ein Verzweigung-früh-korrigiert-Signal 258, das an die Spät-Verzweigungs-Korrekturlogik 148 in 1 übergeben wird. Das Verzweigung-früh-korrigiert-Signal 258 ist wahr, falls die Früh-Verzweigungs-Korrekturlogik 144 eine Verzweigungsvorhersage korrigiert. Dies wird im weiteren Text anhand von 6 beschrieben. Die Arbeitsweise der Früh-Verzweigungs-Korrekturlogik 144 wird im Folgenden anhand von 6 in Einzelheiten beschrieben.
  • 4 zeigt ein Flussdiagramm, das die Arbeitsweise der Vorrichtung in 2 erläutert, die gemäß der Erfindung Frühergebnisse und Früh-EFLAGS erzeugt. Das Flussdiagramm in 4 erstreckt sich über zwei Druckseiten, die mit 4A und 4B bezeichnet sind. Der Ablauf beginnt im Block 402.
  • Im Block 402 erreicht ein Befehl 206, der einen Quelloperanden festlegt, die R-Stufe 108 aus der Architektur-Registerdatei 134. Der Befehl spezifiziert einen oder mehrere Quellregisteroperanden über das Quelloperanden-Markensignal 214. Der Ablauf geht zum Entscheidungsblock 404.
  • Im Entscheidungsblock 404 untersucht die Früh-Flagerzeugungs/Steuerlogik 212 den Befehlstyp und stellt fest, ob es sich um eine Befehlsart handelt, die in der A-Stufe 112 ausgeführt werden muss. In einer Ausführungsform muss der Befehl in der A-Stufe 112 ausgeführt werden, falls der Befehl das Erzeugen einer Speicheradresse erfordert, die an den Datencache in der D-Stufe 116 angelegt werden muss. Muss der Befehl in der A-Stufe 112 ausgeführt werden, so geht der Ablauf auf den Entscheidungsblock 406 über. Andernfalls geht der Ablauf zum Entscheidungsblock 412.
  • Im Entscheidungsblock 406 stellt die Früh-Flagerzeugungs/Steuerlogik 212 fest, ob alle von dem Befehl festgelegten Quelloperanden vorhanden und gültig sind. Spezifiziert der Befehl einen Speicheroperanden, so untersucht die Früh-Flagerzeugungs/Steuerlogik 212 das Speicheroperanden-vorhanden-Signal 266, um herauszufinden, ob der angegebene Speicheroperand vorhanden und gültig ist. Spezifiziert der Befehl einen unmittelbaren Operanden, so ist der unmittelbare Operand stets vorhanden und gültig. Spezifiziert der Befehl einen Registeroperanden, so vergleicht die Früh-Flagerzeugungs/Steuerlogik 212 die Zielmarken 204 aus den unteren Pipelinestufen mit der Quelloperandenmarke 214, um zu ermitteln, ob ein älterer Befehl in der Pipeline 100 ein Ergebnis erzeugt hat, das für das Register der Architektur-Registerdatei 134 bestimmt ist, das die Quelloperandenmarke 214 angibt. Trifft dies zu, so ist das Ergebnis in der Früh-Registerdatei 136 vorhanden. In diesem Fall untersucht die Früh-Flagerzeugungs/Steuerlogik 212 das Gültigkeitsbit 218 für den festgelegten Operanden, um festzustellen, ob der Operand gültig ist. Hat kein älterer Befehl in der Pipeline 100 ein Ergebnis erzeugt, das für das Register der Architektur-Registerdatei 134 bestimmt ist, das die Quelloperandenmarke 214 angibt, so ist der Operand vorhanden und gültig, weil er von der Architektur-Registerdatei 134 zugeführt wird. Sind alle von dem Befehl spezifizierten Operanden vorhanden und gültig, so geht der Ablauf auf den Entscheidungsblock 412 über. Andernfalls geht der Ablauf auf den Block 408 über.
  • Im Block 408 erzeugt die Früh-Flagerzeugungs/Steuerlogik 212 einen Wahr-Wert auf dem Abbruchsignal 228, damit der Befehl in der R-Stufe 108, der darauf wartet, dass der Quelloperand entweder aus dem Speicher ankommt oder in die Architektur-Registerdatei 134 zurückgeschrieben wird oder über die Weiterleitungsbusse verfügbar wird, während des aktuellen Taktzyklus abgebrochen wird. Der Ablauf geht vom Block 408 zurück zum Entscheidungsblock 406.
  • Im Entscheidungsblock 412 vergleicht die Früh-Flagerzeugungs/Steuerlogik 212 die Zielmarken 204 aus den unteren Pipelinestufen mit der Quelloperandenmarke 214, um zu ermitteln, ob ein älterer Befehl in der Pipeline 100 ein Ergebnis erzeugt hat, das für das Register der Architektur-Registerdatei 134 bestimmt ist, das die Quelloperandenmarke 214 angibt. Trifft dies zu, so ist das Ergebnis in der Früh-Registerdatei 136 vorhanden; das Ergebnis kann jedoch gültig oder ungültig sein. Hat kein älterer Befehl in der Pipeline 100 ein Ergebnis erzeugt, das für das Register der Architektur-Registerdatei 134 bestimmt ist, das die Quelloperandenmarke 214 angibt, so geht der Ablauf zum Block 416. Andernfalls geht der Ablauf zum Block 414.
  • Im Block 414 erzeugt die Früh-Flagerzeugungs/Steuerlogik 212 einen Wert auf dem Steuersignal 282, der den Multiplexer 226 veranlasst, den Registerquelloperanden zu wählen, den die Quelloperandenmarke 214 festlegt, die von der Früh-Registerdatei 136 geliefert wird. Wird das Frühergebnis 242 in der A-Stufe 112 während des gleichen Taktzyklus erzeugt, in der der Befehl die R-Stufe 108 erreicht und den Quelloperanden anfordert, so wählt der Multiplexer 226 das eingegebene Frühergebnis 242, um den Quelloperanden an den Befehl zu liefern. Der Multiplexer 226 kann mehrere Registeroperanden aus der Früh-Registerdatei 136 für einen Befehl wählen, der mehrere Registeroperanden festlegt. Der Ablauf geht zum Block 418.
  • Im Block 416 erzeugt die Früh-Flagerzeugungs/Steuerlogik 212 einen Wert auf dem Steuersignal 282, das den Multiplexer 226 veranlasst, den Registerquelloperanden zu wählen, den die Quelloperandenmarke 214 festlegt, die von der Architektur-Registerdatei 134 geliefert wird. Zusätzlich steuert die Früh-Flagerzeugungs/Steuerlogik 212 den Multiplexer 226 so, dass er – falls vorhanden – Nicht-Register-Operanden wählt, die der Befehl festlegt, beispielsweise einen unmittelbaren/konstanten Operanden 222 oder gültige weitergereichte Operanden. Der Ablauf geht zum Block 418.
  • Im Block 418 geht der Befehl in die A-Stufe 112 weiter, in der der Früh-Ausführungslogik/Adressgenerator 138 das Frühergebnis 242 aus den vom Multiplexer 226 gewählten Operanden erzeugt. Im Einzelnen erzeugt die passende Logik, d. h., die Arithmetik-Logik 272 oder die boolsche Logik 274 oder die Schiebelogik 276, das Frühergebnis 242 abhängig von der Art des Befehls. Der Ablauf geht zum Entscheidungsblock 422.
  • Im Entscheidungsblock 422 untersucht die Früh-Flagerzeugungs/Steuerlogik 212 die Zieloperandenmarke des Befehls, um festzustellen, ob das Frühergebnis 242 für ein Register in der Architektur-Registerdatei 134 bestimmt ist. Trifft dies zu, so geht der Ablauf zum Entscheidungsblock 424. Andernfalls geht der Ablauf zum Entscheidungsblock 434.
  • Im Entscheidungsblock 424 untersucht die Früh-Flagerzeugungs/Steuerlogik 212 den Befehlstyp, um festzustellen, ob es sich um eine Befehlsart handelt, die von dem Früh-Ausführungslogik/Adressgenerator 138 ausführbar ist. D. h., die Früh-Flagerzeugungs/Steuerlogik 212 stellt fest, ob sich der Befehl innerhalb der Untermenge von Befehlen befindet, für die der Früh-Ausführungslogik/Adressgenerator 138 konfiguriert ist, um ein korrektes Frühergebnis zu erzeugen, wobei unterstellt wird, dass die Quelloperanden gültig sind. Trifft dies zu, so geht der Ablauf zum Entscheidungsblock 428. Andernfalls geht der Ablauf zum Block 426.
  • Im Block 426 erzeugt die Früh-Flagerzeugungs/Steuerlogik 212 einen Falsch-Wert auf dem Frühergebnis-Gültigkeitssignal 244 und aktualisiert das Gültigkeitsbit 218 gemäß dem Register der Früh-Registerdatei 136, das die Zieloperandenmarke 216 festlegt, mit dem Falsch-Wert, da der Früh-Ausführungslogik/Adressgenerator 138 nicht dafür konfiguriert war, ein gültiges Frühergebnis 242 für diesen Befehlstyp zu erzeugen. Nun geht der Ablauf zum Entscheidungsblock 434.
  • Da im Entscheidungsblock 428 der Früh-Ausführungslogik/Adressgenerator 138 dafür konfiguriert war, ein gültiges Frühergebnis 242 zu erzeugen, stellt die Früh-Flagerzeugungs/Steuerlogik 212 fest, ob alle zum Erzeugen des Frühergebnisses 242 verwendeten Operanden gültig waren. Es sei angemerkt, dass, falls die Früh-Flagerzeugungs/Steuerlogik 212 im Entscheidungsblock 404 feststellt, dass der Befehl in der A-Stufe 112 nicht ausgeführt werden darf, der Befehl in der R-Stufe 108 nicht abgebrochen wird, da ein Operand fehlt. D. h., dass auch für einen ungültigen Registeroperanden aus der Früh-Registerdatei 136 der Befehl in der R-Stufe 108 nicht abgebrochen wird. Ist noch kein Speicheroperand aus dem Speicher geladen, so wird in ähnlicher Weise der Befehl in der R-Stufe 108 nicht abgebrochen. Ist der Früh-Ausführungslogik/Adressgenerator 138 nicht dafür konfiguriert, eine gültige Frühanforderung für diesen Befehlstyp zu erzeugen, so wird in ähnlicher Weise der Befehl in der R-Stufe 108 nicht abgebrochen. Statt dessen wird das Frühergebnis 242 im Block 426 als ungültig gekennzeichnet, und das korrekte Ergebnis wird später von den Ausführungseinheiten 146 der E-Stufe 124 berechnet. Im Gegensatz dazu werden Befehle, die in der A-Stufe 112 ausgeführt wer den müssen, beispielsweise ein Befehl, der eine Adresse berechnet, die dem Zugriff auf den Datencache in der D-Stufe 116 dient, in der R-Stufe 108 abgebrochen, falls die Operanden noch nicht verfügbar sind und/oder nicht gültig sind. Sind alle zum Erzeugen des Frühergebnisses 242 verwendeten Operanden gültig, geht der Ablauf zum Block 432. Andernfalls geht der Ablauf zum Block 426.
  • Im Block 432 erzeugt die Früh-Flagerzeugungs/Steuerlogik 212 einen Wahr-Wert auf dem Frühergebnis-Gültigkeitssignal 244, und sie aktualisiert das Gültigkeitsbit 218, das zum Register der Früh-Registerdatei 136 gehört, das von der Zieloperandenmarke 216 spezifiziert wird, mit dem Wahr-Wert, da im Block 418 ein gültiges Frühergebnis 242 erzeugt wurde. Zusätzlich wird das Register der Früh-Registerdatei 136, das von der Zieloperandenmarke 216 spezifiziert wird, mit dem Frühergebnis 242 aktualisiert. Der Ablauf geht zum Entscheidungsblock 434.
  • Im Entscheidungsblock 434 untersucht die Früh-Flagerzeugungs/Steuerlogik 212 den Befehl, um festzustellen, ob es sich um eine Befehlsart handelt, die das Architektur-EFLAGS-Register 162 modifiziert. In einer Ausführungsform werden Anweisungen, die die EFLAGS verändern, gemäß dem x86-Architekturbefehlssatz angegeben. Verändert der Befehl EFLAGS, so geht der Ablauf zum Block 436. Andernfalls endet der Ablauf.
  • Im Block 436 erzeugt die Früh-Flagerzeugungs/Steuerlogik 212 den Früh-EFLAGS-Wert 262 abhängig vom Frühergebnis 242, das der Früh-Ausführungslogik/Adressgenerator 138 erzeugt hat, und abhängig vom Befehl 206, und sie aktualisiert das Früh-EFLAGS-Register 142 mit dem Früh-EFLAGS-Wert 262. In einer Ausführungsform erzeugt die Früh-Flagerzeugungs/Steuerlogik 212 einen Wahr-Wert für das Überlaufflag (OF), falls die Zweierkomplementarithmetik für vorzeichenbehaftete Ganzzahlen, die der Früh-Ausführungslogik/Adressgenerator 138 ausführt, um das Frühergebnis 242 zu erzeugen, eine Überlaufbedingung verursacht (d. h., das Frühergebnis 242 ist zu groß oder zu klein, um in den Zieloperanden zu passen). Andernfalls erzeugt sie einen Falsch-Wert. Die Früh-Flagerzeugungs/Steuerlogik 212 setzt das Vorzeichenflag (SF) auf den Wert des höchstwertigen Bits des Frühergebnisses 242. Die Früh-Flagerzeugungs/Steuerlogik 212 erzeugt einen Wahr-Wert für das Nullflag (ZF), falls das Frühergebnis 242 null ist; andernfalls erzeugt sie einen Falsch-Wert. Die Früh-Flagerzeugungs/Steuerlogik 212 erzeugt einen Wahr-Wert für das Paritätsflag (PF), falls das geringstwertige Byte des Frühergebnisses 242 eine gerade Anzahl von 1-Bits enthält; andernfalls erzeugt sie einen Falsch-Wert. Die Früh-Flagerzeugungs/Steuerlogik 212 er zeugt einen Wahr-Wert für das Übertragsflag (CF), falls die Arithmetik für vorzeichenlose Ganzzahlen, die der Früh-Ausführungslogik/Adressgenerator 138 ausführt, um das Frühergebnis 242 zu erzeugen, eine Überlaufbedingung verursacht (d. h., die arithmetische Operation erzeugte einen Übertrag oder ein Ausborgen des höchstwertigen Bits des Frühergebnisses 242). Andernfalls erzeugt sie einen Falsch-Wert. In einer Ausführungsform aktualisiert die Früh-Flagerzeugungs/Steuerlogik 212 nur die besonderen Statusflags, die von dem Frühergebnis 242 beeinflusst werden, und sie erzeugt keinen vollständigen Satz von Statusflags zum Schreiben in das Früh-EFLAGS-Register 142. In beiden Ausführungsformen akkumuliert die Früh-Flagerzeugungs/Steuerlogik 212 die Statusflags vorhergehender Befehle, bis sie vom Architektur-EFLAGS-Register 162 kopiert werden. Dies wird im Weiteren anhand von 5 erklärt. Der Ablauf geht zum Entscheidungsblock 438.
  • Im Entscheidungsblock 438 stellt die Früh-Flagerzeugungs/Steuerlogik 212 fest, ob die Veränderung der EFLAGS vom Ergebnis des Befehls abhängt. Beispielsweise verändern in einer Ausführungsform gewisse Befehle die EFLAGS direkt, etwa die Befehle der x86-Architektur STC (set carry), CLC (clear carry) oder CMC (complement carry). Die Veränderung hängt nicht vom Befehlsergebnis ab, da es kein anderes Befehlsergebnis gibt als die Modifizierung des Statusflags. Hängt das Modifizieren der EFLAGS vom Ergebnis des Befehls ab, so geht der Ablauf zum Entscheidungsblock 442. Andernfalls endet der Ablauf.
  • Im Entscheidungsblock 442 untersucht die Früh-Flagerzeugungs/Steuerlogik 212 die Frühergebnis-Gültigkeitsanzeige 244, um festzustellen, ob das Frühergebnis 242 gültig ist. Trifft dies zu, so endet der Ablauf. Andernfalls geht der Ablauf zum Block 444.
  • Im Block 444 erzeugt die Früh-Flagerzeugungs/Steuerlogik 212 einen Wert auf dem Steuersignal 264 zum Aktualisieren des Werts im Früh-EFLAGS-gültig-Register 246, der anzeigt, dass die im Früh-EFLAGS-Register 142 gespeicherten Statusflags ungültig sind. Man beachte, dass die Blöcke 434 bis 444 so wirken, dass sie die Ungültigkeit des Früh-EFLAGS-Registers 142 beibehalten, wenn es einmal für ungültig erklärt wurde, bis das Früh-EFLAGS-Register 142 wieder für gültig erklärt wird, siehe die folgende Beschreibung anhand von 5. Da Befehle, die die EFLAGS direkt verändern, relativ selten auftreten, werden in einer Ausführungsform zum Vereinfachen der Früh-Flagerzeugungs/Steuerlogik 212 die Früh-EFLAGS 142 für ungültig erklärt, wenn ein Be fehl auftritt, der ein Statusflag direkt aktualisiert. Der Ablauf endet im Block 444.
  • 5 zeigt ein Flussdiagramm, das die Arbeitsweise der Vorrichtung in 2 beim Wiederherstellen und gültig Erklären des Früh-EFLAGS-Registers 142 gemäß der Erfindung darstellt. 5 enthält zwei getrennte Flussdiagramme. Jedes Flussdiagramm beschreibt das Wiederherstellen und gültig Erklären des Früh-EFLAGS-Registers 142 abhängig von einem unterschiedlichen Ereignis, das das Wiederherstellen und gültig Erklären auslöst. Für das erste Ereignis beginnt der Ablauf im Block 502.
  • Im Block 502 erreicht ein Verzweigungsbefehl die S-Stufe 126. Muss der Verzweigungsbefehl korrigiert werden, d. h., hat der Verzweigungsvorhersager 132 den Verzweigungsbefehl falsch vorhergesagt, und zwar entweder durch eine Fehlvorhersage darüber, ob der Verzweigung gefolgt wird, oder eine Fehlvorhersage der Verzweigungs-Zieladresse, so leert die Spät-Verzweigungs-Korrekturlogik 148 die Pipeline 100 im Zuge des Vorgangs, der die Fehlvorhersage korrigiert. Dies wird unten anhand von 7 erläutert. Das Leeren der Pipeline 100 impliziert, dass keine Befehle, die das Architektur-EFLAGS-Register verändern, in den Pipelinestufen unter der R-Stufe 108 vorhanden sind. Anders formuliert haben jegliche Befehle in der Pipeline, die das Architektur-EFLAGS-Register 162 modifizieren, das Architektur-EFLAGS-Register 162 bereits aktualisiert, oder sie wurden entfernt. Daher enthält das Architektur-EFLAGS-Register 162 den alleraktuellsten Status. Es sei darauf hingewiesen, dass der korrigierte Verzweigungsbefehl entweder ein bedingter oder ein unbedingter Verzweigungsbefehl sein kann. Zudem kann das Früh-EFLAGS-Register 142 abhängig von anderen Ereignissen wiederhergestellt werden, die bewirken, dass die Pipeline geleert wird, oder Ereignisse, die keine Korrektur von Verzweigungsbefehlen sind, beispielsweise Abbrüche. Der Ablauf geht zum Entscheidungsblock 504.
  • Im Entscheidungsblock 504 untersucht die Früh-Flagerzeugungs/Steuerlogik 212 das verzweigungskorrigierte Spätsignal 268, um festzustellen, ob der Verzweigungsbefehl der S-Stufe 126 von der Spät-Verzweigungs-Korrekturlogik 148 korrigiert wurde. Dies impliziert, dass die Pipeline 100 geleert wurde, um die Fehlvorhersage zu korrigieren. Trifft dies zu, so geht der Ablauf zum Block 506. Andernfalls endet der Ablauf.
  • Im Block 506 kopiert die Früh-Flagerzeugungs/Steuerlogik 212 den Wert des Architektur-EFLAGS-Registers 162 über das Signal 262 in das Früh-EFLAGS-Register 142 und markiert das Früh-EFLAGS-Register 142 über das Signal 264 als gültig, wo durch die Früh-EFLAGS 142 wieder in einen gültigen Zustand versetzt werden. Der Ablauf endet im Block 506.
  • Für das zweite in 5 beschriebene Ereignis beginnt der Ablauf im Block 512.
  • Im Block 512 untersucht die Früh-Flagerzeugungs/Steuerlogik 212 das Flagveränderungsbefehl-vorhanden-Signal 202, um festzustellen, ob alle Befehle, die Architektur-EFLAGS-Register verändern und unter der A-Stufe 112 – wenn überhaupt – vorhanden sind, das Architektur-EFLAGS-Register 162 aktualisiert haben. Trifft dies zu, so geht der Ablauf zum Block 514. Andernfalls endet der Ablauf.
  • Im Block 514 kopiert die Früh-Flagerzeugungs/Steuerlogik 212 den Wert des Architektur-EFLAGS-Registers 162 über das Signal 262 in das Früh-EFLAGS-Register 142 und markiert das Früh-EFLAGS-Register 142 über das Signal 264 als gültig, wodurch die Früh-EFLAGS 142 wieder in einen gültigen Zustand versetzt werden. Der Ablauf endet im Block 514.
  • Man beachte, dass das Leeren der Pipeline 100 durch eine Verzweigungskorrektur in der S-Stufe 126, die im Block 504 festgestellt wird, ein Ereignis ist, das die Bedingung erzeugt, für die im Block 512 eine Entscheidung erfolgt.
  • 6 zeigt ein Flussdiagramm, das die Arbeitsweise des Mikroprozessors 100 erläutert, wenn dieser gemäß der Erfindung eine frühe Verzweigungskorrektur vornimmt. Der Ablauf beginnt im Block 602.
  • Im Block 602 erreicht ein bedingter Verzweigungsbefehl die J-Stufe 114. Der Ablauf geht zum Entscheidungsblock 604 über.
  • Im Entscheidungsblock 604 untersucht die Früh-Verzweigungs-Korrekturlogik 144 die Ausgabe des Früh-EFLAGS-gültig-Registers 246, um festzustellen, ob das Früh-EFLAGS-Register 142 gültig ist. Trifft dies zu, so geht der Ablauf zum Block 606. Andernfalls endet der Ablauf. Ist das Früh-EFLAGS-Register 142 ungültig, so führt die Vorrichtung keine frühe Korrektur bedingter Verzweigungen aus.
  • Im Block 606 untersucht die Früh-Verzweigungs-Korrekturlogik 144 die Inhalte des Früh-EFLAGS-Registers 142, um festzustellen, ob die durch den Bedingungscode im bedingten Verzweigungsbefehl festgelegte Bedingung erfüllt ist. Der Ablauf geht zum Entscheidungsblock 608.
  • Im Entscheidungsblock 608 prüft die Früh-Verzweigungs-Korrekturlogik 144, ob es erforderlich ist, die Vorhersage des bedingten Verzweigungsbefehls abhängig vom Block 606 zu korrigieren. Der bedingte Verzweigungsbefehl muss korrigiert werden, falls die Bedingung im Früh-EFLAGS-Register 142 erfüllt ist, so dass der bedingte Verzweigungsbefehl hätte verfolgt werden müssen, der Verzweigungsvorhersager 132 jedoch vorhergesagt hat, dass der Verzweigung nicht gefolgt wird (angezeigt durch einen Falsch-Wert der Version des Vorhergesagte-Verzweigung-genommen-Signals 208, das durch die Pipeline in die J-Stufe 114 geführt wird), d. h., den Mikroprozessor 100 veranlasst hat, den nächstfolgenden Befehl zu holen. Im Gegensatz dazu muss der bedingte Verzweigungsbefehl korrigiert werden, falls die Bedingung im gültigen Früh-EFLAGS-Register 142 nicht erfüllt ist, so dass der bedingte Verzweigungsbefehl nicht hätte verfolgt werden sollen, der Verzweigungsvorhersager 132 jedoch vorhergesagt hat, dass der Verzweigung gefolgt wird (angezeigt durch einen Wahr-Wert der Version des Vorhergesagte-Verzweigung-genommen-Signals 208, das durch die Pipeline in die J-Stufe 114 geführt wird), d. h., den Mikroprozessor 100 veranlasst hat, zur vorhergesagten Verzweigungs-Zieladresse zu verzweigen. Muss die Vorhersage des bedingten Verzweigungsbefehls korrigiert werden, so geht der Ablauf zum Entscheidungsblock 612. Andernfalls endet der Ablauf.
  • Im Entscheidungsblock 612 ist bereits festgestellt worden, dass der bedingte Verzweigungsbefehl korrigiert werden muss. Die Früh-Verzweigungs-Korrekturlogik 144 untersucht die in der Pipeline zur J-Stufe 114 weitergeleitete Version des Vorhergesagte-Verzweigung-genommen-Signals 208, um festzustellen, ob der bedingte Verzweigungsbefehl als zu nehmen vorhergesagt wurde. Trifft dies zu, so geht der Ablauf zum Block 616. Andernfalls geht der Ablauf zum Block 614.
  • Im Block 614 weist die Früh-Verzweigungs-Korrekturlogik 144 die I-Stufe 102 über das Signal 154 an, die Pipeline 100 über der J-Stufe 114 zu leeren und den Mikroprozessor 100 zur Verzweigungs-Zieladresse des bedingten Verzweigungsbefehls zu verzweigen. In einer Ausführungsform wird die Verzweigungs-Zieladresse des bedingten Verzweigungsbefehls vom Früh-Ausführungslogik/Adressgenerator 138 in der A-Stufe 112 erzeugt. Zusätzlich erzeugt die Früh-Verzweigungs-Korrekturlogik 144 einen Wahr-Wert auf dem Verzweigung-früh-korrigiert-Signal 258, das durch die Pipeline zur Spät- Verzweigungs-Korrekturlogik 148 geführt wird. Deren Gebrauch wird anhand von 7 beschrieben. Der Ablauf endet im Block 614.
  • Im Block 616 weist die Früh-Verzweigungs-Korrekturlogik 144 die I-Stufe 102 über das Signal 154 an, die Pipeline 100 über der J-Stufe 114 zu leeren und den Mikroprozessor 100 zum nächstfolgenden Befehl nach dem bedingten Verzweigungsbefehl zu verzweigen. Zusätzlich erzeugt die Früh-Verzweigungs-Korrekturlogik 144 einen Wahr-Wert auf dem Verzweigung-früh-korrigiert-Signal 258, das durch die Pipeline zur Spät-Verzweigungs-Korrekturlogik 148 geführt wird. Deren Gebrauch wird anhand von 7 beschrieben. Der Ablauf endet im Block 616.
  • 7 zeigt ein Flussdiagramm der Arbeitsweise des Mikroprozessors 100 beim Ausführen einer Spät-Verzweigungskorrektur gemäß der Erfindung. Der Ablauf beginnt im Block 702.
  • Im Block 702 erreicht ein bedingter Verzweigungsbefehl die S-Stufe 126. Der Ablauf geht zum Block 704.
  • Im Block 704 untersucht die Spät-Verzweigungs-Korrekturlogik 148 die Inhalte des Architektur-EFLAGS-Registers 162, um festzustellen, ob die im Bedingungscode des bedingten Verzweigungsbefehls spezifizierte Bedingung erfüllt ist. Der Ablauf geht zum Entscheidungsblock 706.
  • Im Entscheidungsblock 706 stellt die Spät-Verzweigungs-Korrekturlogik 148 fest, ob es erforderlich ist, die Vorhersage des bedingten Verzweigungsbefehls aufgrund des Blocks 704 zu korrigieren. Der bedingte Verzweigungsbefehl muss korrigiert werden, falls die Bedingung im Architektur-EFLAGS-Register 162 erfüllt ist, so dass der bedingte Verzweigungsbefehl hätte genommen werden müssen, der Verzweigungsvorhersagen 132 jedoch vorhergesagt hat, dass der Verzweigung nicht gefolgt wird (angezeigt durch einen Falsch-Wert der Version des durch die Pipeline zur S-Stufe 126 geführten Vorhergesagte-Verzweigung-genommen-Signals 208), d. h., den Mikroprozessor 100 veranlasst hat, den nächstfolgenden Befehl zu holen. Im Gegensatz dazu muss der bedingte Verzweigungsbefehl korrigiert werden, falls die Bedingung im Architektur-EFLAGS-Register 162 nicht erfüllt ist, so dass der bedingte Verzweigungsbefehl nicht hätte verfolgt werden sollen, der Verzweigungsvorhersagen 132 jedoch vorhergesagt hat, dass der Verzweigung gefolgt wird (angezeigt durch einen Wahr-Wert der Version des Vorher gesagte-Verzweigung-genommen-Signals 208, das durch die Pipeline in die S-Stufe 126 geführt wird), d. h., den Mikroprozessor 100 veranlasst hat, zur vorhergesagten Verzweigungs-Zieladresse zu verzweigen. Muss die Vorhersage des bedingten Verzweigungsbefehls korrigiert werden, so geht der Ablauf zum Entscheidungsblock 708. Andernfalls endet der Ablauf.
  • Im Entscheidungsblock 708 untersucht die Spät-Verzweigungs-Korrekturlogik 148 das Verzweigung-früh-korrigiert-Signal 258, um festzustellen, ob die Fehlvorhersage des bedingten Verzweigungsbefehls bereits von der Früh-Verzweigungs-Korrekturlogik 144 korrigiert worden ist. Trifft dies zu, so endet der Ablauf. Andernfalls geht der Ablauf zum Entscheidungsblock 712.
  • Im Entscheidungsblock 712 untersucht die Spät-Verzweigungs-Korrekturlogik 148, nachdem sie festgestellt hat, dass der bedingte Verzweigungsbefehl korrigiert werden muss, die durch die Pipeline in die S-Stufe 126 geführte Version des Vorhergesagte-Verzweigung-genommen-Signals 208, um festzustellen, ob der bedingte Verzweigungsbefehl als zu nehmen vorhergesagt wurde. Trifft dies zu, so geht der Ablauf zum Block 716. Andernfalls geht der Ablauf zum Block 714.
  • Im Block 714 weist die Spät-Verzweigungs-Korrekturlogik 148 die I-Stufe 102 über das Signal 154 an, die Pipeline 100 über der S-Stufe 126 zu leeren und den Mikroprozessor 100 zur Verzweigungs-Zieladresse des bedingten Verzweigungsbefehls zu verzweigen. Der Ablauf endet im Block 714.
  • Im Block 716 weist die Spät-Verzweigungs-Korrekturlogik 148 die I-Stufe 102 über das Signal 154 an, die Pipeline 100 über der S-Stufe 126 zu leeren und den Mikroprozessor 100 zum nächstfolgenden Befehl nach dem bedingten Verzweigungsbefehl zu verzweigen. Der Ablauf endet im Block 716.
  • Der obigen Beschreibung kann man entnehmen, dass der vorgestellte Mikroprozessor 100 in der Lage ist, ein Ergebnis eines vorhergehenden Befehls als Registeroperand an einen nachfolgenden Adresserzeugungs- oder Nicht-Adresserzeugungs-Befehl zu liefern, und zwar zahlreiche Taktzyklen früher als ein Mikroprozessor, der nicht die Vorteile des Früh-Ausführungslogik/Adressgenerators 138 und der Früh-Registerdatei 136 aufweist. Dadurch verringert sich die Anzahl der auftretenden Pipelineblasen. Weniger Pipelineblasen senken die mittlere Taktanzahl pro Befehl, die eine Hauptkomponente der Mikroprozessorleistungsfähigkeit darstellt. Zudem kann man die Frühergebnisse dazu verwenden, Statusflags früher zu aktualisieren als dies bisher möglich war. Dadurch wird das Ausführen von bedingten Befehlen möglicherweise früher machbar als dies bisher zu erreichen war. Ferner ist der beschriebene Mikroprozessor 100 in der Lage, einen unkorrekt vorhergesagten bedingten Verzweigungsbefehl zahlreiche Taktzyklen früher zu korrigieren als ein Mikroprozessor, der den Vorzug der Früh-Verzweigungs-Korrekturlogik 144 nicht aufweist. Schließlich veranlasst die Nachfrage nach höheren Mikroprozessor-Taktfrequenzen die Entwickler von Mikroprozessoren, die Anzahl der Pipelinestufen zu erhöhen. Mit immer mehr Pipelinestufen kann die Anzahl der auftretenden Pipelineblasen wachsen, die auf Befehlsergebnisse und/oder Statusflagaktualisierungen warten. In vergleichbarer Weise kann die Verzögerung bei der Korrektur falsch vorhergesagter Verzweigungsbefehle ebenfalls zunehmen, wenn die Anzahl der Pipelinestufen wächst. Diese Tatsachen bekräftigen die Vorteile des oben beschriebenen Mikroprozessors und der dargestellten Vorrichtungen und Verfahren.
  • Obwohl die Erfindung und ihre Aufgaben, Merkmale und Vorteile ausführlich beschrieben sind, schließt die Erfindung weitere Ausführungsformen ein. Obwohl beispielsweise eine Mikroprozessorausführungsform beschrieben ist, die im Wesentlichen mit der x86-Architektur übereinstimmt, sind die beschriebenen Vorrichtungen und Verfahren nicht auf die x86-Architektur eingeschränkt, und man kann sie in verschiedenen Mikroprozessorarchitekturen verwenden. Obgleich eine Ausführungsform dargestellt ist, in der ein bedingter Verzweigungsbefehl früh korrigiert wird, können zusätzlich Vorteile der frühen Statusflagerzeugung dazu verwendet werden, andere Befehle frühzeitig auszuführen, beispielsweise den x86-Befehl LOOPcc, wobei diesem Fall die gleichen Vorzüge innewohnen wie dem Fall des Jcc-Befehls. Es können auch die x86-Befehle SETcc und CMOVcc frühzeitig ausgeführt werden, so dass ihre Ergebnisse für nachfolgende abhängige Anweisungen verfügbar sein können. Über die Verwendung der Frühergebnisse zum Erzeugen von frühen Statusflagwerten hinaus können die Frühergebnisse weiterhin auch dazu verwendet werden, frühe Verzweigungskorrekturen von indirekten Verzweigungsbefehlen vorzunehmen, die gemeinhin als "Sprung-über-Register-Befehle" bezeichnet werden und die Verzweigungs-Zieladresse als Quellregister-Operandenwert angeben.
  • Zusätzlich zu Implementierungen der Erfindung mit Hilfe von Hardware kann man die Erfindung in computerlesbarem Code ausführen (z. B. computerlesbarem Programmcode, Daten usw.), der in einem computernutzbaren (z. B. lesbaren) Medium un tergebracht ist. Der Computercode bewirkt die Ermöglichung oder Herstellung der Funktionen der hier offenbarten Erfindung oder beides. Man kann dies beispielsweise durch den Gebrauch von allgemeinen Programmiersprachen (z. B. C, C++, JAVA usw.) erreichen, durch GDSII-Datenbanken, durch Hardware-Beschreibungssprachen (HDL), zu denen Verilog HDL, VHDL, Alters HDL (Alters Hardware Description Language) und weitere gehören, oder durch andere Programmier- und Schaltungserfassungswerkzeuge (d. h. für Schaltpläne), die verfügbar sind. Man kann den Computercode in jedem bekannten computerverwendbaren (z. B. lesbaren) Medium unterbringen, etwa Halbleiterspeicher, magnetische Disks, optische Disks (z. B. CD-ROM, DVD-ROM usw.), und in einem Computerdatensignal, das in einem computernutzbaren (z. B. lesbaren) Übertragungsmedium (z. B. Trägerwellen oder irgendein anderes Medium einschließlich digitaler, optischer oder analoger Medien) ausgeführt ist. Damit kann der Computercode über Kommunikationsnetze übertragen werden, zu denen Internets und Intranets gehören. Natürlich kann die Erfindung als Computercode ausgeführt werden (z. B. als Teil eines IP-Kerns (IP = Intellectual Property, geistiges Eigentum), etwa eines Mikroprozessorkerns, oder als Entwurf auf Systemebene, beispielsweise als System an Chip (SOC)) und als Teil der Herstellung integrierter Schaltungen in Hardware transformiert werden. Die Erfindung kann auch als Kombination von Hardware und Computercode ausgeführt werden.
  • Schließlich sollten Fachleute zur Kenntnis nehmen, dass sie die offenbarte Konzeption und die besonderen Ausführungsformen leicht als Grundlage für den Entwurf oder für das Modifizieren anderer Strukturen verwenden können und damit die gleichen Zwecke der Erfindung erfüllen, ohne den Bereich der Erfindung zu verlassen, der durch die beigefügten Ansprüche bestimmt ist.

Claims (11)

  1. Vorrichtung zum Korrigieren einer Vorhersage eines Verzweigungsbefehls in einem Pipeline-Mikroprozessor (100), wobei die Vorhersage vorhersagt, ob eine durch den Verzweigungsbefehl festgelegte Verzweigungsbedingung von den in der Architektur enthaltenen Statusflags des Mikroprozessors erfüllt wird, und die Vorrichtung gekennzeichnet ist durch: frühe Statusflags, die den in der Architektur enthaltenen Statusflags zugeordnet sind und einen neueren Status speichern, wobei die frühen Statusflags eine Gültigkeitsanzeige aufweisen, und die Gültigkeitsanzeige nur dann wahr ist, wenn die frühen Statusflags einen nicht vorhergesagten korrekten neueren Status speichern als die in der Architektur enthaltenen Statusflags; und eine frühe Verzweigungs-Korrekturlogik (144), die schließlich die Vorhersage des Verzweigungsbefehls korrigiert, falls die Gültigkeitsanzeige angibt, dass die frühen Statusflags gültig sind und falls die frühen Statusflags anzeigen, dass die Vorhersage nicht korrekt ist.
  2. Vorrichtung nach Anspruch 1, zudem umfassend: eine späte Verzweigungs-Korrekturlogik (148), die mit der frühen Verzweigungs-Korrekturlogik (144) verbunden ist und die die Vorhersage des Verzweigungsbefehls korrigiert, falls die in der Architektur enthaltenen Statusflags anzeigen, dass die Vorhersage unzutreffend ist und falls die frühe Verzweigungs-Korrekturlogik (144) die fehlerhafte Vorhersage nicht korrigiert hat.
  3. Vorrichtung nach Anspruch 2, zudem umfassend: eine Ausführungseinheit (146), die mit der späten Verzweigungs-Korrekturlogik (148) verbunden ist und Werte erzeugt, die in den in der Architektur enthaltenen Statusflags gespeichert werden.
  4. Vorrichtung nach Anspruch 1, zudem umfassend: eine Logik (212), die mit den frühen Statusflags verbunden ist und die frühen Statusflags ungültig macht, falls ein frühes Ergebnis eines Befehls, der dem Verzweigungsbefehl vorausgeht und der eine Veränderung der Statusflags festlegt, ungültig ist.
  5. Vorrichtung nach Anspruch 4, wobei das frühe Ergebnis des Befehls, der dem Verzweigungsbefehl vorausgeht, ungültig ist, falls das frühe Ergebnis abhängig von einem oder mehreren ungültigen Quelloperanden erzeugt wird.
  6. Vorrichtung nach Anspruch 4, zudem umfassend: eine frühe Ausführungslogik (138), die mit der Logik (212) verknüpft ist und das frühe Ergebnis abhängig von dem Befehl erzeugt, der dem Verzweigungsbefehl vorausgeht.
  7. Vorrichtung nach Anspruch 1, zudem umfassend: ein erstes Speicherelement (142), das mit der frühen Verzweigungs-Korrekturlogik (144) verbunden ist und die frühen Statusflags speichert; und ein zweites Speicherelement (246), das mit dem ersten Speicherelement verbunden ist und die Gültigkeitsanzeige speichert.
  8. Verfahren zum Korrigieren der Vorhersage eines bedingten Verzweigungsbefehls an einer frühen Stelle in einer Mikroprozessor-Pipeline, gekennzeichnet durch: das Feststellen, ob die frühen Statusflags gültig sind, wobei die frühen Statusflags nur dann gültig sind, wenn die frühen Statusflags einen nicht vorhergesagten korrekten neueren Status speichern als die in der Architektur enthaltenen Statusflags des Mikroprozessors; das Feststellen, ob die Vorhersage unzutreffend ist, und zwar abhängig davon, ob die frühen Statusflags eine Verzweigungsbedingung erfüllen, die von dem bedingten Verzweigungsbefehl festgelegt wird; und schließlich das Korrigieren der Vorhersage des bedingten Verzweigungsbefehls falls die frühen Statusflags gültig sind und die Vorhersage unzutreffend ist, und zwar abhängig davon, ob die frühen Statusflags eine Verzweigungsbedingung erfüllen, die der bedingte Verzweigungsbefehl festlegt.
  9. Verfahren nach Anspruch 8, zudem umfassend: das Erzeugen der frühen Statusflags vor dem Feststellen, ob die frühen Statusflags gültig sind.
  10. Verfahren nach Anspruch 9, wobei das Erzeugen der frühen Statusflags umfasst: das Erzeugen der frühen Statusflags als Antwort auf das Erzeugen eines frühen Ergebnisses eines Befehls, der dem bedingten Verzweigungsbefehl vorausgeht.
  11. Verfahren nach Anspruch 10, wobei das Erzeugen des frühen Ergebnisses umfasst: das Erzeugen des frühen Ergebnisses in einer Adresserzeugungsstufe des Mikroprozessors.
DE602004011889T 2004-02-04 2004-09-14 Anordnung und Verfahren zur Durchführung einer frühen Korrektur von falschen Vorhersagen beim bedingten Verzweigungsbefehl Active DE602004011889T2 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US771682 2004-02-04
US10/771,682 US7107438B2 (en) 2003-02-04 2004-02-04 Pipelined microprocessor, apparatus, and method for performing early correction of conditional branch instruction mispredictions

Publications (2)

Publication Number Publication Date
DE602004011889D1 DE602004011889D1 (de) 2008-04-03
DE602004011889T2 true DE602004011889T2 (de) 2009-02-26

Family

ID=34679365

Family Applications (1)

Application Number Title Priority Date Filing Date
DE602004011889T Active DE602004011889T2 (de) 2004-02-04 2004-09-14 Anordnung und Verfahren zur Durchführung einer frühen Korrektur von falschen Vorhersagen beim bedingten Verzweigungsbefehl

Country Status (5)

Country Link
US (1) US7107438B2 (de)
EP (1) EP1562107B1 (de)
CN (1) CN100377078C (de)
DE (1) DE602004011889T2 (de)
TW (1) TWI288351B (de)

Families Citing this family (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7617387B2 (en) * 2006-09-27 2009-11-10 Qualcomm Incorporated Methods and system for resolving simultaneous predicted branch instructions
US7984279B2 (en) * 2006-11-03 2011-07-19 Qualcomm Incorporated System and method for using a working global history register
US20080222392A1 (en) * 2007-03-09 2008-09-11 On Demand Microelectronics Method and arrangements for pipeline processing of instructions
US7711935B2 (en) * 2007-04-30 2010-05-04 Netlogic Microsystems, Inc. Universal branch identifier for invalidation of speculative instructions
US7802078B2 (en) * 2008-09-09 2010-09-21 Via Technologies, Inc. REP MOVE string instruction execution by selecting loop microinstruction sequence or unrolled sequence based on flag state indicative of low count repeat
US8635437B2 (en) * 2009-02-12 2014-01-21 Via Technologies, Inc. Pipelined microprocessor with fast conditional branch instructions based on static exception state
US8521996B2 (en) * 2009-02-12 2013-08-27 Via Technologies, Inc. Pipelined microprocessor with fast non-selective correct conditional branch instruction resolution
US9128701B2 (en) * 2011-04-07 2015-09-08 Via Technologies, Inc. Generating constant for microinstructions from modified immediate field during instruction translation
EP2508979B1 (de) * 2011-04-07 2018-10-10 VIA Technologies, Inc. Effiziente konditionale arithmetik- und logikeinheit- (alu) -anweisung in leseanschlussbegrenztem registerdatei-mikroprozessor
US20160170770A1 (en) * 2014-12-12 2016-06-16 Qualcomm Incorporated Providing early instruction execution in an out-of-order (ooo) processor, and related apparatuses, methods, and computer-readable media
US10782979B2 (en) 2017-04-18 2020-09-22 International Business Machines Corporation Restoring saved architected registers and suppressing verification of registers to be restored
US10545766B2 (en) 2017-04-18 2020-01-28 International Business Machines Corporation Register restoration using transactional memory register snapshots
US10963261B2 (en) 2017-04-18 2021-03-30 International Business Machines Corporation Sharing snapshots across save requests
US10572265B2 (en) 2017-04-18 2020-02-25 International Business Machines Corporation Selecting register restoration or register reloading
US10740108B2 (en) 2017-04-18 2020-08-11 International Business Machines Corporation Management of store queue based on restoration operation
US10838733B2 (en) 2017-04-18 2020-11-17 International Business Machines Corporation Register context restoration based on rename register recovery
US11010192B2 (en) 2017-04-18 2021-05-18 International Business Machines Corporation Register restoration using recovery buffers
GB2592661B (en) 2020-03-05 2022-05-11 Advanced Risc Mach Ltd An apparatus and method for performing branch prediction
TWI785880B (zh) * 2021-07-06 2022-12-01 阿比特電子科技股份有限公司 錯誤偵測校正方法及其電路
CN117008977B (zh) * 2023-08-08 2024-03-19 上海合芯数字科技有限公司 一种可变执行周期的指令执行方法、系统和计算机设备

Family Cites Families (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
AU553416B2 (en) 1984-02-24 1986-07-17 Fujitsu Limited Pipeline processing
JP2667849B2 (ja) 1988-01-06 1997-10-27 株式会社日立製作所 情報処理装置
US5093777A (en) 1989-06-12 1992-03-03 Bull Hn Information Systems Inc. Method and apparatus for predicting address of a subsequent cache request upon analyzing address patterns stored in separate miss stack
US5487153A (en) 1991-08-30 1996-01-23 Adaptive Solutions, Inc. Neural network sequencer and interface apparatus
US5442767A (en) 1992-10-23 1995-08-15 International Business Machines Corporation Address prediction to avoid address generation interlocks in computer systems
US5493669A (en) * 1993-03-03 1996-02-20 Motorola, Inc. Data processor for simultaneously searching two fields of the rename buffer having first and second most recently allogated bits
US6079014A (en) 1993-12-02 2000-06-20 Intel Corporation Processor that redirects an instruction fetch pipeline immediately upon detection of a mispredicted branch while committing prior instructions to an architectural state
US6021471A (en) 1994-11-15 2000-02-01 Advanced Micro Devices, Inc. Multiple level cache control system with address and data pipelines
CN1306394C (zh) * 1994-12-02 2007-03-21 现代电子美国公司 有限游程转移预测的方法
US5701426A (en) 1995-03-31 1997-12-23 Bull Information Systems Inc. Data processing system and method using cache miss address prediction and forced LRU status in a cache memory to improve cache hit ratio
US5606682A (en) 1995-04-07 1997-02-25 Motorola Inc. Data processor with branch target address cache and subroutine return address cache and method of operation
US5768610A (en) 1995-06-07 1998-06-16 Advanced Micro Devices, Inc. Lookahead register value generator and a superscalar microprocessor employing same
US5812813A (en) 1996-07-29 1998-09-22 Integrated Device Technology, Inc. Apparatus and method for of register changes during execution of a micro instruction tracking sequence
US5867724A (en) 1997-05-30 1999-02-02 National Semiconductor Corporation Integrated routing and shifting circuit and method of operation
US6085292A (en) 1997-06-05 2000-07-04 Digital Equipment Corporation Apparatus and method for providing non-blocking pipelined cache
US6085305A (en) 1997-06-25 2000-07-04 Sun Microsystems, Inc. Apparatus for precise architectural update in an out-of-order processor
US6112293A (en) 1997-11-17 2000-08-29 Advanced Micro Devices, Inc. Processor configured to generate lookahead results from operand collapse unit and for inhibiting receipt/execution of the first instruction based on the lookahead result
US6209076B1 (en) 1997-11-18 2001-03-27 Intrinsity, Inc. Method and apparatus for two-stage address generation
US6065103A (en) 1997-12-16 2000-05-16 Advanced Micro Devices, Inc. Speculative store buffer
US6148391A (en) 1998-03-26 2000-11-14 Sun Microsystems, Inc. System for simultaneously accessing one or more stack elements by multiple functional units using real stack addresses
JP3499135B2 (ja) 1998-06-29 2004-02-23 富士通株式会社 情報処理装置
US6367004B1 (en) * 1998-12-31 2002-04-02 Intel Corporation Method and apparatus for predicting a predicate based on historical information and the least significant bits of operands to be compared
US6343359B1 (en) 1999-05-18 2002-01-29 Ip-First, L.L.C. Result forwarding cache
US6393555B1 (en) 1999-08-05 2002-05-21 Advanced Micro Devices, Inc. Rapid execution of FCMOV following FCOMI by storing comparison result in temporary register in floating point unit
US6412043B1 (en) 1999-10-01 2002-06-25 Hitachi, Ltd. Microprocessor having improved memory management unit and cache memory
GB2363480B (en) * 2000-06-13 2002-05-08 Siroyan Ltd Predicated execution of instructions in processors
US7165169B2 (en) * 2001-05-04 2007-01-16 Ip-First, Llc Speculative branch target address cache with selective override by secondary predictor based on branch instruction type

Also Published As

Publication number Publication date
EP1562107B1 (de) 2008-02-20
EP1562107A1 (de) 2005-08-10
US20040158697A1 (en) 2004-08-12
US7107438B2 (en) 2006-09-12
CN1658154A (zh) 2005-08-24
TW200527288A (en) 2005-08-16
TWI288351B (en) 2007-10-11
CN100377078C (zh) 2008-03-26
DE602004011889D1 (de) 2008-04-03

Similar Documents

Publication Publication Date Title
DE602004011889T2 (de) Anordnung und Verfahren zur Durchführung einer frühen Korrektur von falschen Vorhersagen beim bedingten Verzweigungsbefehl
DE602004008711T2 (de) Anordnung, Verfahren und Rechnerdatensignal zur selektiven Annullierung der Vorhersage eines Rücksprungstapelspeichers als Antwort auf die Erkennung einer nicht-standard Rücksprungsbefehlsreihe
DE19983860B4 (de) Ein Verfahren und eine Einrichtung zur verbesserten Prädikatvorhersage
DE60009151T2 (de) Vorhersage von datenbeförderung von speicher- zum ladebefehl mit untrainierung
DE69835100T2 (de) Prozessor konfiguriert um vorausschauende resultate von zusammengefassten übertragungs-, vergleichs- und einfachen arithmetischen befehlen zu produzieren
DE69727773T2 (de) Verbesserte Verzweigungsvorhersage in einem Pipelinemikroprozessor
DE69233493T2 (de) RISC-Prozessor mit erweiterbarer Architektur
DE69932066T2 (de) Mechanismus zur "store-to-load forwarding"
DE69233313T2 (de) Hochleistungsarchitektur für RISC-Mikroprozessor
DE69133302T2 (de) Registerabbildung in einem einzigen Taktzyklus
DE69929936T2 (de) Verfahren und Vorrichtung zum Abrufen von nicht-angrenzenden Befehlen in einem Datenverarbeitungssystem
DE69737423T2 (de) Verfahren und gerät zum replizieren von datenspeicherung in einem fortgeschrittenen mikroprozessor
DE112005003098B4 (de) Verfahren und Vorrichtung zum Zugreifen auf einen physikalischen Speicher von einer CPU oder einem Prozessorelement mit hoher Leistung
DE69633474T2 (de) Adressierungsverfahren zur nicht-sequentiellen Ausführung von Ladebefehlen hinsichtlich Speicherungsbefehlen
DE69629383T2 (de) Superskalarer mikroprozessor mit risc86 befehlssatz
DE69908175T2 (de) Verbesserte befehlsdekodierung durch paralleldekodierungsalgorithmus
DE112004002848B4 (de) Mikroprozessor und Verfahren zum Verifizieren einer Speicherdatei in einem derartigen Mikroprozessor
DE69434669T2 (de) Spekulative Befehlswarteschlange für Befehle mit variabler Byteslänge
DE69629495T2 (de) Vereinheitlichter multifunktions-operationsverteiler für die ungeordnete befehlsexekution in einem superskalaren prozessor
DE112011101364B4 (de) Fehlerbehebung in Multithread-Code
DE112010004322T5 (de) Vorhersagen und Vermeiden von Operand-Speichervorgang-Vergleich-Gefahren in Mikroprozessoren mit abweichender Reihenfolge
DE60005860T2 (de) Ablaufsteuerung zum ausgeben und wiederausgeben von ketten abhängiger befehle
DE112004002267T5 (de) Ruhezustandsmechansimus für virtuelles Multithreading
DE4301417A1 (de)
DE112005002173T5 (de) Prozessor mit Abhängigkeitsmechanismus, um vorherzusagen, ob ein Ladevorgang von einem älteren Schreibvorgang abhängig ist

Legal Events

Date Code Title Description
8364 No opposition during term of opposition