DE4447238A1 - Einrichung und Verfahren zum Vorhersagen von Verzweigungsinstruktionen - Google Patents

Einrichung und Verfahren zum Vorhersagen von Verzweigungsinstruktionen

Info

Publication number
DE4447238A1
DE4447238A1 DE4447238A DE4447238A DE4447238A1 DE 4447238 A1 DE4447238 A1 DE 4447238A1 DE 4447238 A DE4447238 A DE 4447238A DE 4447238 A DE4447238 A DE 4447238A DE 4447238 A1 DE4447238 A1 DE 4447238A1
Authority
DE
Germany
Prior art keywords
branch
instruction
target buffer
entry
address
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.)
Granted
Application number
DE4447238A
Other languages
English (en)
Other versions
DE4447238B4 (de
Inventor
Bradley D Hoyt
Glenn J Hinton
David B Papworth
Ashwani Kumar Gupta
Michael Alan Fetterman
Subramanian Natarajan
Sunil Shenoy
Sa Reynold V D
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.)
Intel Corp
Original Assignee
Intel Corp
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 Intel Corp filed Critical Intel Corp
Publication of DE4447238A1 publication Critical patent/DE4447238A1/de
Application granted granted Critical
Publication of DE4447238B4 publication Critical patent/DE4447238B4/de
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30054Unconditional branch instructions

Description

Die Erfindung bezieht sich auf das Gebiet der Mikropro­ zessorarchitektur. Insbesondere betrifft die Erfindung eine Verzweigungsziel-Pufferschaltung, die Verzweigungsinstruktio­ nen innerhalb eines Instruktionsstroms vorhersagt.
Früher verarbeiteten Mikroprozessoren grundsätzlich nur eine Instruktion nach der anderen. Jede Instruktion wurde mit Hilfe von vier aufeinanderfolgenden Stufen, dem Heranholen der Instruktion, der Instruktionsdekodierung, der Ausführung und dem Zurückschreiben des Ergebnisses, verarbeitet. Innerhalb eines solchen Mikroprozessors führten verschiedene spezielle Logikblöcke die jeweiligen unterschiedlichen Verarbeitungs­ stufen aus. Bevor jeder Logikblock mit seiner Operation be­ gann, wartete er, bis alle vorhergehenden Logikblöcke die Operationen abgeschlossen hatten.
Um die Effizienz zu verbessern, sahen die Mikroprozessor- Entwickler eine Überlappung der Operationen der logischen Stufen zum Heranholen, Dekodieren, Ausführen und Zurück­ schreiben vor, so daß der Mikroprozessor gleichzeitig an ver­ schiedenen Instruktionen arbeiten konnte. Im Betrieb verar­ beiten die logischen Stufen zum Heranholen, Dekodieren, Aus­ führen und Zurückschreiben gleichzeitig verschiedene Instruk­ tionen. Mit jedem Takt wird das Ergebnis jeder Verarbeitungs­ stufe zu der folgenden Verarbeitungsstufe weitergeleitet. Mi­ kroprozessoren, die die Technik des Überlappens der Heranhol-, Dekodier-, Ausführ- und Zurückschreib-Stufen verwenden, sind als "Pipeline"-Mikroprozessoren bekannt. Einige Mikro­ prozessoren teilen darüber hinaus jede Verarbeitungsstufe in Unterstufen ein, um einen zusätzlichen Leistungsgewinn zu erzielen. Solche Prozessoren werden als "deeply-pipelined" bezeichnet.
Damit ein Pipeline-Mikroprozessor effizient arbeiten kann, muß eine Instruktionsheranholeinheit am Kopf der Pipe­ line die Pipeline kontinuierlich mit einem Strom von Mikro­ prozessorinstruktionen versorgen. Bedingte Verzweigungsin­ struktionen innerhalb eines Instruktionsstroms hindern jedoch die Instruktionsheranholeinheit am Heranholen nachfolgender Instruktionen, bis die Verzweigungsbedingung vollständig ent­ schieden ist. In Pipeline-Mikroprozessoren ist die Verzwei­ gungsbedingung solange nicht vollständig entschieden, bis die Verzweigungsinstruktion eine Instruktionsausführungsstufe na­ he dem Ende der Mikroprozessor-Pipeline erreicht. Dementspre­ chend wird die Instruktionsheranholeinheit zum Stehen ge­ bracht, weil die Instruktionsheranholeinheit aufgrund der unentschiedenen Verzweigungsbedingung nicht weiß, welche In­ struktion als nächstes herangeholt werden soll.
Um dieses Problem zu mildern, verwenden viele Pipeline- Mikroprozessoren Verzweigungsvorhersagemechanismen, die die Existenz und das Ergebnis einer Verzweigungsinstruktion in­ nerhalb eines Instruktionsstroms vorhersagen. Die Instrukti­ onsheranholeinheit verwendet die Verzweigungsvorhersagen, um nachfolgende Instruktionen heranzuholen. Beispielsweise führ­ ten Yeh und Patt einen sehr genauen adaptiven Zwei-Ebenen- Verzweigungsvorhersagemechanismus ein. (Siehe Tse Yu Yeh und Yale N. Patt, Two-Level Adaptive Branch Prediction, The 24th ACM/IEEE International Symposium and Workshop on Microarchi­ tecture, November 1991, Seiten 51-61). Der Verzweigungsvor­ hersagemechanismus von Yeh & Patt macht Verzweigungsvorhersa­ gen auf der Grundlage von zwei Ebenen einer gesammelten Ver­ zweigungsgeschichte.
Wenn ein Verzweigungsvorhersagemechanismus das Ergebnis einer Verzweigungsinstruktion vorhersagt und der Mikroprozes­ sor nachfolgende Instruktionen entlang des vorhergesagten Pfades ausführt, wird dies als "spekulatives Ausführen" durch den Mikroprozessor entlang des vorhergesagten Instruktions­ pfades bezeichnet. Während des spekulativen Ausführens führt der Mikroprozessor nützliche Verarbeitungen aus, sofern die Verzweigungsinstruktion korrekt vorhergesagt wurde. Wenn je­ doch der Verzweigungsvorhersagemechanismus die Verzweigungs­ instruktion falsch vorausgesagt hat, dann führt der Mikropro­ zessor spekulativ Instruktionen entlang des falschen Pfades aus und vollbringt folglich nichts. Wenn der Mikroprozessor die falsch vorhergesagte Verzweigung gegebenenfalls erfaßt, so muß der Mikroprozessor sämtliche spekulativ ausgeführten Instruktionen löschen (flushen) und die Ausführung an der richtigen Adresse erneut starten.
Da der Mikroprozessor nichts vollbringt, wenn eine Ver­ zweigungsinstruktion falsch vorhergesagt worden ist, ist es wünschenswert, Verzweigungsinstruktionen genau vorherzusagen. Dies trifft insbesondere für deeply-pipelined-Mikroprozesso­ ren zu, bei denen eine lange Instruktionspipeline jedesmal dann gelöscht (flushed) werden muß, wenn eine falsche Ver­ zweigungsvorhersage gemacht wurde.
Es ist somit eine Aufgabe der vorliegenden Erfindung, ei­ nen Verzweigungsvorhersagemechanismus zur Verfügung zu stel­ len, der die Existenz von Verzweigungsinstruktionen innerhalb eines Instruktionsstroms genau vorhersagt.
Es ist eine weitere Aufgabe der Erfindung, das Verzwei­ gungsergebnis sämtlicher vorhergesagter Verzweigungsinstruk­ tionen innerhalb des Instruktionsstroms genau vorherzusagen.
Diese Aufgabe wird durch eine Verzweigungsziel-Puffer­ schaltung nach der Erfindung gelöst. Die erfindungsgemäße Verzweigungsziel-Pufferschaltung weist einen Verzweigungs­ ziel-Puffer-Cache-Speicher auf. Der Verzweigungsziel-Puffer- Cache-Speicher speichert Informationen über zuvor ausgeführte Verzweigungsbefehle. Die in dem Verzweigungsziel-Puffer- Cache-Speicher gespeicherten Verzweigungsinformationen werden von dem letzten Byte jeder Verzweigungsinstruktion adres­ siert. Wenn die Instruktionsheranholeinheit einen Block von Instruktionen heranholt, sendet sie den Instruktionszeiger zu der Verzweigungsziel-Pufferschaltung. Auf der Grundlage die­ ses Instruktionszeigers sieht die Verzweigungsziel-Puffer­ schaltung in dem Verzweigungsziel-Puffer-Cache-Speicher nach, ob irgendeine Instruktion in dem herangeholten Block eine Verzweigungsinstruktion ist. Wenn die Verzweigungsziel-Puf­ ferschaltung eine kommende Verzweigungsinstruktion in dem Verzweigungsziel-Puffer-Cache-Speicher findet, informiert die Verzweigungsziel-Pufferschaltung eine Instruktionsheranho­ leinheit, die für das Heranholen zukünftiger Instruktionen verantwortlich ist.
Die Erfindung gestattet die genaue Vorhersage einer Ver­ zweigungsziel-Adresse für all die vorhergesagten Verzwei­ gungsinstruktionen, die vorhergesagt genommen werden.
Im folgenden wird die Erfindung anhand von in der Zeich­ nung dargestellten Ausführungsbeispielen näher beschrieben. Die Aufgaben, Merkmale und Vorteile der Erfindung werden an­ hand der folgenden detaillierten Beschreibung und der Zeich­ nungen für den Fachmann deutlich.
In der Zeichnung zeigen:
Fig. 1 eine Blockdarstellung einer stark zeitverschach­ telten Mikroprozessor-Pipeline zur Verarbeitung von Mikroprozessor-Instruktionen;
Fig. 2 ein Blockschaltbild der verschiedenen Schaltungs­ blöcke in einem Mikroprozessor, der eine stark zeitverschachtelte Pipeline gem. Fig. 1 implemen­ tiert;
Fig. 3 eine Darstellung eines Umordnungspuffers, der die Ergebnisse der ausgeführten Mikrobefehle speichert;
Fig. 4 eine Darstellung eines Speicherabbilds, bei dem der Adreßraum in 16-Byte-Speicherblöcke unterteilt worden ist;
Fig. 5 eine Blockdarstellung, die veranschaulicht, wie die Verzweigungsziel-Pufferschaltung mit anderen logischen Schaltungen in dem in Fig. 2 dargestell­ ten Mikroprozessor zusammenwirkt;
Fig. 6 eine Darstellung, die den Inhalt des Verzweigungs­ ziel-Puffer-Cache-Speichers in der Verzweigungs­ ziel-Pufferschaltung veranschaulicht;
Fig. 7 eine Darstellung, die den Inhalt jedes Verzwei­ gungseintrags in dem Verzweigungsziel-Puffer-Cache- Speicher veranschaulicht;
Fig. 8 ein Ablaufdiagramm, das die von der Verzweigungs­ ziel-Pufferschaltung ausgeführten Schritte darlegt, wenn diese in dem Verzweigungsziel-Puffer-Cache- Speicher nachsieht, um eine Verzweigungsvorhersage auszuführen;
Fig. 9a, wie die Verzweigungsziel-Pufferschaltung Adres­ sen verwendet, wenn sie auf den Verzweigungsziel- Puffer-Cache-Speicher zugreift;
Fig. 9b einen ersten Zerhackungs(hashing)-Mechanismus, der 21-Bit-Tags zu zerhackten 9-Bit-Tags reduziert;
Fig. 9c einen zweiten Zerhackungs(hashing)-Mechanismus, der 21-Bit-Tags zu zerhackten 9-Bit-Tags reduziert;
Fig. 10a eine 4-Bit-Verzweigungsgeschichte, die eine 16- Bit-Eintragsmuster-Tabelle indiziert, wobei jeder Eintrag ein 2-Bit-Zustandswert ist;
Fig. 10b ein Zustandsdiagramm, das die Zustandsänderungen für jeden 2-Bit-Zustandswert in einer Verzweigungs­ mustertabelle veranschaulicht;
Fig. 11 eine Darstellung, die den Inhalt der Verzwei­ gungs-IP-Tabelle (BIT) in der Verzweigungsziel-Puf­ ferschaltung veranschaulicht;
Fig. 12 ein Ablaufdiagramm, das die von der Verzweigungs­ ziel-Pufferschaltung ausgeführten Schritte be­ schreibt, wenn der Verzweigungsziel-Puffer-Cache- Speicher aktualisiert wird;
Fig. 13 eine Darstellung, die veranschaulicht, wie die 3- Zyklus-Aktualisierung des Verzweigungsziel-Puffer- Cache-Speichers abgebrochen werden kann; und
Fig. 14 ein Ablaufdiagramm, das darlegt, wie die Verzwei­ gungsziel-Pufferschaltung einen der Verzweigungs­ einträge in einem Satz auswählt, wenn ein Verzwei­ gungseintrag für eine neue Verzweigungsinstruktion zugewiesen wird.
Es werden Verfahren und Einrichtungen zum Implementieren einer Verzweigungsziel-Pufferschaltung in einem Computerpro­ zessor beschrieben. In der folgenden Beschreibung werden zur Veranschaulichung spezielle Bezeichnungen verwendet, um ein besseres Verständnis der Erfindung zu erreichen. Für den Fachmann ist es jedoch klar, daß diese speziellen Details nicht erforderlich sind, um die Erfindung auszuführen. Dar­ über hinaus werden bekannte Schaltungen und Einrichtungen im Blockschaltbild gezeigt, um das Verständnis der Erfindung nicht unnötig zu erschweren.
Ein superskalarer Pipeline-Mikroprozessor
Bei einem stark zeitverschachtelten (deeply pipelined) Prozessor sind die Hauptstufen eines Pipeline-Prozessors, wie beispielsweise das Instruktionsheranholen, die Instruktions­ dekodierung und die Instruktionsausführung, in verschiedene unterschiedliche Unterstufen eingeteilt, so daß jede Verar­ beitungsstufe als Pipeline ausgeführt ist. Dies führt zu ei­ ner langen Instruktionspipeline. Fig. 1 veranschaulicht bei­ spielsweise einen Satz von Pipeline-Stufen, die einen spezi­ ellen stark zeitverschachtelten Prozessor definieren. In der Instruktionspipeline gemäß Fig. 1 ist die Instruktionsverar­ beitung in 11 Pipeline-Stufen eingeteilt.
Die ersten beiden in Fig. 1 gezeigten Pipeline-Stufen werden zum Heranholen von Instruktionen verwendet. Die Pipe­ line-Stufe 3 führt eine Instruktions-Längen-Dekodierung (ILD) aus. Die einzelnen Mikroprozessorinstruktionen werden dann an den Pipeline-Stufen 4 und 5 dekodiert. Die nächsten drei Pipeline-Stufen (Registerumbenennung (Register Rename), Ein­ planung (Scheduling) und Abfertigung (Dispatch)) bereiten die Instruktionen für die Ausführung vor. Schließlich führt der Mikroprozessor die Instruktionen an der Pipeline-Stufe 9 aus. Die letzten beiden Pipeline-Stufen bringen die ausgeführten Instruktionen zur Ruhe bzw. scheiden sie aus (retirement).
Um den Mikroprozessor effizient zu betreiben, müssen die beiden Instruktionsheranhol-Pipeline-Stufen gemäß Fig. 1 kon­ tinuierlich einen Strom von Mikroprozessor-Instruktionen her­ anholen. Jede herangeholte Instruktion wird nicht vollständig ausgeführt, bis sie die Pipeline-Stufe 9, die Ausführungsstu­ fe, erreicht. Verzweigungsinstruktionen innerhalb des In­ struktionsstromes weisen den Mikroprozessor oftmals an, die Ausführung von Instruktionen an einer nicht-folgenden Adresse zu beginnen, die Verzweigungszieladresse genannt wird. Wenn ein Pipeline-Mikroprozessor auf eine Verzweigungsinstruktion trifft, können die Instruktionsheranholstufen nicht sofort auf die Verzweigung reagieren, da die Verzweigungsinstruktion noch nicht dekodiert oder ausgeführt ist. Somit können Ver­ zweigungsinstruktionen einen stark zeitverschachtelten Mikro­ prozessor veranlassen, spekulativ entlang eines falschen Pfa­ des auszuführen, so daß der Mikroprozessor später die speku­ lativ ausgeführten Instruktionen löschen (flushen) und an der richtigen Adresse erneut starten muß.
Um solche Situationen zu vermeiden, verwenden viele Pipe­ line-Mikroprozessoren einen Verzweigungsvorhersagemechanis­ mus, der Verzweigungsinstruktionen innerhalb des Instrukti­ onsstroms vorhersagt. Darüber hinaus sagen solche Verzwei­ gungsvorhersagemechanismen das Ergebnis und die Verzweigungs­ zieladresse solcher Verzweigungsinstruktionen voraus.
Um Verzweigungsinstruktionen in einem Mikroprozessor mit einer tiefen Pipeline, wie beispielsweise die in Fig. 1 ver­ anschaulichte Pipeline, vorherzusagen, weist die Erfindung eine Verzweigungsziel-Pufferschaltung auf, die die Existenz von Verzweigungsinstruktionen innerhalb des Instruktions­ stroms vorhersagt. Die erfindungsgemäße Verzweigungsziel-Puf­ ferschaltung wird im Zusammenhang mit einem stark zeitver­ schachtelten (deeply pipelined) superskalaren Mikroprozessor beschrieben. Für den Fachmann ist es jedoch klar, daß einzel­ ne Merkmale der beschriebenen Verzweigungsziel-Pufferschal­ tung in anderen Mikroprozessoren mit unterschiedlichen Archi­ tekturen implementiert werden können.
Fig. 2 veranschaulicht im Blockschaltbild die logischen Hauptschaltungen eines stark zeitverschachtelten (deeply pi­ pelined) superskalaren Mikroprozessors, der die tiefe Pipe­ line gem. Fig. 1 implementiert. Es wird ein Überblick über den in Fig. 2 dargestellten Mikroprozessor geben, an den sich eine detaillierte Beschreibung der Verzweigungsziel-Puffer­ schaltung 40 anschließt, die die Existenz von Verzweigungsin­ struktionen innerhalb des Instruktionsstroms vorhersagt.
In dem Blockschaltbild gemäß Fig. 2 ist oben die Spei­ cher- und Bus-Logik 35 gezeigt. Die Speicher- und Bus-Logik 35 ist für das Laden von Informationen in den Mikroprozessor und die Ausgabe von Informationen aus dem Mikroprozessor ver­ antwortlich. Die Speicher-und-Bus-Logik 35 versucht zunächst üblicherweise von einem Hochgeschwindigkeits-Cache-Speicher zu laden bzw. in diesen zu speichern. Wenn der Cache-Speicher nicht verwendet werden kann (möglicherweise infolge eines Cache-"Fehlversuchs"), greift die Speicher-und-Bus-Logik 35 statt dessen auf einen Hauptspeicher über einen externen Bus zu.
Mit der Speicher-und-Bus-Logik 35 ist eine Instruktions­ heranholeinheit 30 gekoppelt. Die Instruktionsheranholeinheit 30 ist für ein kontinuierliches Heranholen neuer Mikroprozes­ sorinstruktionen (auch bekannt als Makroinstruktionen) sowie von Operanden für die Ausführung durch den Mikroprozessor verantwortlich. Die Instruktionsheranholeinheit 30 verwendet einen Instruktionszeiger (IP - Instruction pointer), um die aktuelle Heranholadresse zu halten. Die herangeholten Mikro­ prozessorinstruktionen werden in den Kopf der Instruktions­ pipeline eingegeben.
Einfache, unbedingte Verzweigungsinstruktionen innerhalb des Instruktionsstroms hindern die Instruktionsheranholein­ heit 30 am einfachen Heranholen von Instruktionen entlang ei­ nes sequentiellen Pfades. Darüber hinaus hindern bedingte Verzweigungsinstruktionen innerhalb des Instruktionsstroms die Instruktionsheranholeinheit 30 am einfachen Heranholen von Instruktionen entlang eines vorgegebenen Pfades, da die Verzweigungsbedingung entschieden werden muß, um den Heran­ holpfad zu bestimmen. Um Hilfe beim Heranholen der richtigen Instruktionen zu erhalten, konsultiert die Instruktionsheran­ holeinheit 30 eine Verzweigungsziel-Pufferschaltung 40. Die Verzweigungsziel-Pufferschaltung 40 sagt die Existenz von Verzweigungsinstruktionen innerhalb des Instruktionsstroms und das Ergebnis jeder vorhergesagten Verzweigungsinstruktion voraus. Die Verzweigungsziel-Pufferschaltung 40 leitet ihre Verzweigungsvorhersageinformationen zu der Instruktionsheran­ holeinheit 30 zurück, so daß die Instruktionsheranholeiheit 30 die richtigen Instruktionen heranholen kann.
Nachdem die Instruktionsheranholeinheit 30 eine Mikropro­ zessorinstruktion herangeholt hat, leitet sie jede Mikropro­ zessorinstruktion an einen Instruktionsdekodierer 60 weiter. Wenn die Verzweigungsziel-Pufferschaltung 40 eine Verzwei­ gungsvorhersage für eine Instruktion gemacht hat, leitet die Instruktionsheranholeinheit 30 außerdem die Verzweigungsvor­ hersage der Verzweigungsziel-Pufferschaltung über die In­ struktion weiter.
Der Instruktionsdekodierer 60 ist verantwortlich für die Bestimmung der Art der empfangenen Mikroprozessorinstruktion und für ein Untersetzen der Mikroprozessorinstruktionen in einen oder mehrere Mikrobefehle mit zugehörigen Mikrooperan­ den. Der eine oder die mehreren Mikrobefehle, die einer Mi­ kroprozessorinstruktion entsprechen, führen die Funktion der entsprechenden Mikroprozessorinstruktion aus.
Wenn der Instruktionsdekodierer 60 feststellt, daß eine empfangene Mikroprozessorinstruktion eine Verzweigungsin­ struktion ist, leitet der Instruktionsdekodierer 60 die Ver­ zweigungsinstruktion beschreibende Informationen an einen Verzweigungsadreßberechner 50 für eine spezielle Behandlung weiter. Wenn die Verzweigungsziel-Pufferschaltung 40 eine Verzweigungsvorhersage für die Verzweigungsinstruktion ge­ macht hat, überprüft der Verzweigungsadreßberechner 50 die Verzweigungsvorhersage, sofern dies möglich ist, mit Hilfe der von dem Instruktionsdekodierer 60 empfangenen Verzwei­ gungsinformationen. Wenn die Verzweigungsziel-Pufferschaltung 40 die Verzweigungsinstruktion nicht vorhergesagt hat, macht der Verzweigungsadreßberechner 50 eine Verzweigungsvorhersage für die Verzweigungsinstruktion mit Hilfe der vom Instrukti­ onsdekodierer 60 empfangenen Verzweigungsinformationen. Nach­ dem der Verzweigungsadreßberechner 50 seine Bearbeitung der Verzweigungsinstruktion beendet hat, gibt der Verzwei­ gungsadreßberechner 50 die verarbeiteten Verzweigungsinforma­ tionen an den Instruktionsdekodierer 60 zurück.
Nachdem der Instruktionsdekodierer 60 eine Mikroprozesso­ rinstruktion in einen Satz von Mikrobefehlen untersetzt hat, leitet der Instruktionsdekodierer 60 die Mikrobefehle und die zugehörigen Operanden an einen Zuweiser 70 weiter. Der Zuwei­ ser 70 weist die zur Ausführung jedes Mikrobefehls notwendi­ gen Ressourcen des Prozessors zu.
Im vorliegenden Ausführungsbeispiel ist der Mikroprozes­ sor ein superskalarer Prozessor, der die Mikrobefehle außer­ halb der ursprünglichen Programmreihenfolge ausführen kann. Jedoch müssen die ausgeführten Mikrobefehle gegebenenfalls in der ursprünglichen Programmreihenfolge zur Ruhe gebracht oder ausgeschieden (retired) werden, um das Computerprogramm rich­ tig auszuführen. Um die ursprüngliche Programmreihenfolge zu erhalten, verwendet der Mikroprozessor einen Umordnungspuffer 83, der die Mikrobefehlsergebnisdaten in der ursprünglichen Programmreihenfolge speichert.
Fig. 3 veranschaulicht den Umordnungspuffer 83. Der Umordnungspuffer 83 gemäß Fig. 3 weist einen umlaufenden Puf­ fer bzw. Ringpuffer auf, der n Einträge enthält, wobei jeder Eintrag verwendet wird, um die Ergebnisse der ausgeführten Mikrobefehle zu speichern. Da jeder Eintrag in dem Umord­ nungspuffer 83 ein Ziel zur Verfügung stellt, indem Mikrobe­ fehlsergebnisdaten physisch eingegeben werden können, wird jeder Umordnungspuffer 83 als physikalisches Ziel (pDsts - physical Destination) bezeichnet. Die physikalischen Ziele pDsts innerhalb des Umordnungspuffers 83 sind von 0 bis n-1 durchnumeriert. Wie in Fig. 3 gezeigt ist, weist jedes pDst des Umordnungspuffers 83 Felder für ein Gültig-Bit, das die Gültigkeit des Mikrobefehlsergebnisses anzeigt, ein Mikrobe­ fehlsergebnis, einen Satz von durch den Mikrobefehl beein­ flußten Flags, eine Maske für die Flags, einen die Bedeutung der Ergebnisse anzeigenden Code und für Fehlerdaten auf.
Für jeden Mikrobefehl weist der Zuweiser 70 das nächste verfügbare physikalische Ziel pDst in dem Umordnungspuffer 83 zum Speichern des Mikrobefehlsergebnisses zu. Indem die pDsts in dem Umordnungspuffer 83 in der gleichen Reihenfolge zuge­ wiesen werden, wie die Mikrobefehle empfangen werden, wird die ursprüngliche Programmreihenfolge der Mikrobefehlsergeb­ nisse aufrechterhalten.
Wenn der Zuweiser 70 ein pDst in dem Umordnungspuffer 83 für einen einer Verzweigungsinstruktion zugeordneten Verzwei­ gungsmikrobefehl zuweist, wird außerdem ein übereinstimmender Eintrag in einem Verzweigungs-IP-Tabelle 43 (BIT - Branch IP Table) genannten Puffer, der in der Verzweigungsziel-Puffer­ schaltung 40 lokalisiert ist, zugewiesen. Der Instruktionsde­ kodierer 60 leitet der Verzweigungsziel-Pufferschaltung 40 dann die Adresse der Instruktion, die unmittelbar der Ver­ zweigungsinstruktion folgt, und einen Prozessorzustandswert zu. Die Verzweigungsziel-Pufferschaltung 40 schreibt die Adresse der der Verzweigungsinstruktion unmittelbar folgenden Instruktion und den Prozessorzustandswert in die Verzwei­ gungs-IP-Tabelle (BIT) 43. Diese in der Verzweigungs-IP-Ta­ belle (BIT) 43 gespeicherten Informationen werden später ver­ wendet, nachdem die Verzweigungsausführungseinheit den Ver­ zweigungsmikrobefehl ausgeführt hat.
Der Zuweiser 70 weist darüber hinaus einen Eintrag in der Reservierungsstation 81 zu, die die Mikrobefehlsinstruktion und die Operandendaten für jeden Mikrobefehl speichert. Jeder Reservierungsstationseintrag speichert ein Gültig-Bit, das die Gültigkeit des Eintrags der Reservierungsstation 81 an­ zeigt, den Mikrobefehlsinstruktionscode, zwei Quelldatenfel­ der, zwei Gültig-Bits für die Quelldatenfelder, zwei physika­ lische Quellenfelder, die anzeigen, woher die Quelldaten kom­ men sollen, wenn die Quelldaten nicht gültig sind, und ein physikalisches Ziel des Ergebnisses des Mikrobefehls. Nachdem der Zuweiser 70 einen Reservierungsstationseintrag und ein pDst in dem Umordnungspuffer 83 zugewiesen hat, wartet jeder Mikrobefehl an dem Eintrag der Reservierungsstation 81, bis er ausgeführt wird.
Jeder Mikrobefehl in einem Eintrag der Reservierungssta­ tion 81 bleibt in dem Reservierungsstationseintrag, bis sämt­ liche zum Ausführen des Mikrobefehls erforderlichen Quellda­ ten vorhanden sind und eine Ausführungseinheit zum Ausführen des Mikrobefehls bereit ist. Wenn sämtliche zum Ausführen ei­ nes Mikrobefehls erforderlichen Quelldaten bereit sind und eine Ausführungseinheit verfügbar ist, fertigt die Reservie­ rungsstation 81 den Mikrobefehl zur Ausführungseinheit in der Ausführungsgruppe bzw. dem Ausführungscluster 90 ab. Im be­ vorzugten Ausführungsbeispiel gibt es vier Ausführungseinhei­ ten (EU1 91, EU2 92, EU3 93 und EU4 94) in der Ausführungslo­ gikschaltung 90. Nachdem eine Ausführungseinheit einen Mikro­ befehl ausgeführt hat, schreibt die Ausführungseinheit die Ergebnisdaten, die Architektur-Flags und gegebenenfalls Feh­ lerinformationen in den Umordnungspuffer 83 pDst, den der Zu­ weiser 70 für den Mikrobefehl zugewiesen hat.
In dem bevorzugten Ausführungsbeispiel wird die Ausfüh­ rungseinheit 92 als Verzweigungsausführungseinheit bezeich­ net. Die Verzweigungsausführungseinheit 92 bestimmt das Ver­ zweigungsentscheidungs-Endergebnis und die Verzweigungsziel- Endadresse für jeden Verzweigungsmikrobefehl. Die Verzwei­ gungsausführungseinheit 92 vergleicht das Verzweigungsender­ gebnis und die Zielendadresse mit dem vorhergesagten Verzwei­ gungsergebnis und der vorhergesagten Zieladresse. Wenn die Verzweigungsausführungseinheit 92 eine falsch vorhergesagte Verzweigung erfaßt, initiiert die Verzweigungsausführungsein­ heit 92 einen Satz von Aktionen, die die falsche Verzwei­ gungsvorhersage korrigieren. Somit weist die Verzweigungsaus­ führungseinheit 92 die dritte Stufe des Verzweigungsentschei­ dungsmechanismus auf.
Schließlich scheidet eine Ausscheidungsschaltung 85 (Retirement Circuit) die in den physikalischen Zielen pDst des Umordnungspuffers 83 gespeicherten Ergebnisse von jedem ausgeführten Mikrobefehl aus. Die Ausscheidungsschaltung 85 scheidet die pDst des Umordnungspuffers 83 aus, indem sie se­ quentiell die pDst des Umordnungspuffers 83 in der gleichen Reihenfolge durchgeht, in der der Zuweiser 70 die pDst zuge­ wiesen hat. Die Ausscheidungsschaltung 85 scheidet die pDst aus, indem sie die Mikrobefehlsergebnisse in eine Real-Regi­ ster-Datei 84 (RRF - Real Register File) überträgt, die den aktuellen verbindlichen Architekturzustand (current committed architectural state) speichert. Da der Zuweiser 70 die pDst des Umordnungspuffers 83 in der ursprünglichen Programmrei­ henfolge zugewiesen hat und die Ausscheidungsschaltung 85 die Mikrobefehlsergebnisse in dem pDst des Umordnungspuffers 83 in der gleichen Reihenfolge ausscheidet, wird die ursprüngli­ che Programmreihenfolge aufrechterhalten, obwohl Mikrobefehle außerhalb der ursprünglichen Programmreihenfolge ausgeführt worden sein können.
Im folgenden wird wieder auf Fig. 3 Bezug genommen. Um einen Mikrobefehl auszuscheiden, testet die Ausscheidungs­ schaltung das Gültig-Bit 201 eines pDst-Eintrags des Umord­ nungspuffers, um zu ermitteln, ob das pDst ein gültiges Er­ gebnis eines ausgeführten Mikrobefehls enthält. Wenn das Gül­ tig-Bit 201 für das pDst gesetzt ist, überprüft die Ausschei­ dungsschaltung das Fehlerfeld 206 des pDst, um nachzusehen, ob ein Fehler behandelt werden muß. Wenn der pDst-Eintrag des Umordnungspuffers ein gültiges Ergebnis eines ausgeführten Mikrobefehls enthält und kein Fehler-Problem auftritt, dann wird das ausgeführte Mikrobefehlsergebnis verbindlich in den permanenten Architekturzustand in der Real-Register-Datei (RRF) 84 übertragen.
Wenn die Ausscheidungsschaltung 85 versucht, einen Ver­ zweigungsmikrobefehl auszuscheiden, testet die Ausscheidungs­ schaltung 85 das Fehlerfeld 206 des pDst-Eintrags, um nachzu­ sehen, ob der Verzweigungsmikrobefehl falsch vorhergesagt worden war. Wenn die Ausscheidungsschaltung 85 feststellt, daß der Mikrobefehl falsch vorhergesagt wurde, löscht (flush) die Ausscheidungsschaltung 85 den Rest der Instruktionen in dem Umordnungspuffer 83, da diese Instruktionen nach einer falschen Verzweigungsvorhersage herangeholt worden sind.
Überblick über die Verzweigungsziel-Pufferschaltung
Wie in dem vorhergehenden Überblick über den Mikroprozes­ sor beschrieben wurde, ist die Instruktionsheranholeinheit 30 für das Heranholen von Instruktionen in den Mikroprozessor verantwortlich. Die Instruktionsheranholeinheit 30 des Mikro­ prozessors gemäß Fig. 2 sieht den Speicheradreßraum als eine Sammlung ausgerichteter 16-Byte-Blöcke, so daß die Instrukti­ onsheranholeinheit Instruktionen und Operanden in 16-Byte- Blöcken heranholt. Fig. 4 veranschaulicht ein Speicherabbild, wobei der Adreßraum in ausgerichtete 16-Byte-Blöcken unter­ teilt ist. Die Instruktionsheranholeinheit 30 verwendet einen Instruktionszeiger, um die aktuelle Heranholadresse zu hal­ ten. Wenn keine Verzweigungsinstruktionen innerhalb des Pro­ gramms angetroffen werden, holt die Instruktionsheranholein­ heit 30 Instruktionen und Operanden durch sequentielles Her­ anholen benachbarter 16-Byte-Blöcke heran.
Um das Vorhandensein von Verzweigungsinstruktionen inner­ halb des Instruktionsstroms vorherzusagen, verwendet der Mi­ kroprozessor gemäß Fig. 2 die Verzweigungsziel-Pufferschal­ tung 40. Die Verzweigungsziel-Pufferschaltung 40 hat einen Verzweigungsziel-Puffer-Cache-Speicher 41, der Informationen über Verzweigungsinformationen enthält, die der Mikroprozes­ sor zuvor ausgeführt hat. Die Verzweigungsziel-Pufferschal­ tung 40 verwendet die Informationen in dem Verzweigungsziel- Puffer-Cache-Speicher 41, um Verzweigungsinstruktionen zu er­ kennen und das Ergebnis der Verzweigungsinstruktion vorherzu­ sagen.
Die Verzweigungsziel-Pufferschaltung 40 hält außerdem ei­ ne Verzweigungs-IP-Tabelle (BIT) 43 aufrecht, die Informatio­ nen über Verzweigungsinstruktionen enthält, die gegenwärtig innerhalb des Mikroprozessors sind. Die Informationen in der Verzweigungs-IP-Tabelle 43 werden verwendet, um falsch vor­ hergesagte Verzweigungsinstruktionen zu korrigieren und den Verzweigungsziel-Puffer-Cache-Speicher 41 zu halten, nachdem die Verzweigungsinstruktionen ausgeführt worden sind.
Fig. 5 ist eine Blockdarstellung, die allgemein angibt, wie die Verzweigungsziel-Pufferschaltung 40 mit anderen logi­ schen Hauptschaltungen in dem Mikroprozessor gemäß Fig. 2 zu­ sammenwirkt. Die Instruktionsheranholeinheit 30 fordert In­ formationen über aufkommende Verzweigungsinstruktionen von der Verzweigungsziel-Pufferschaltung 40 an, indem sie einen Instruktionszeiger zu der Verzweigungsziel-Pufferschaltung 40 weiterleitet. Der zu der Verzweigungsziel-Pufferschaltung 40 weitergeleitete Instruktionszeiger zeigt auf die Speicher­ blöcke, die aktuell von der Instruktionsheranholeinheit 30 herangeholt werden.
Die Verzweigungsziel-Pufferschaltung 40 durchsucht den Verzweigungsziel-Puffer-Cache-Speicher 41 nach Informationen über die Verzweigungsinstruktionen in dem Speicherblock, die gegenwärtig von der Instruktionsheranholeinheit 30 herange­ holt werden. Die Verzweigungsziel-Pufferschaltung 40 macht eine Verzweigungsvorhersage für jede in dem Speicherblock an­ geordnete, gegenwärtig von der Instruktionsheranholeinheit 30 herangeholte Verzweigungsinstruktion, die in dem Verzwei­ gungsziel-Puffer-Cache-Speicher 41 gefunden wurde. Die Ver­ zweigungsziel-Pufferschaltung 40 leitet die Verzweigungsvor­ hersageinformationen zu der Instruktionsheranholeinheit 30 weiter, wodurch die Instruktionsheranholeinheit über gegen­ wärtig von ihr herangeholte Verzweigungsinstruktionen in dem Speicherblock informiert wird.
Um den Verzweigungsziel-Puffer-Cache-Speicher 41 und die Verzweigungs-IP-Tabelle 43 aufrechtzuerhalten, empfängt die Verzweigungsziel-Pufferschaltung 40 Informationen von ver­ schiedenen anderen Logikschaltungen in dem Mikroprozessor.
Wie in Fig. 5 gezeigt ist, sendet der Instruktionsdeko­ dierer 60 Verzweigungsinformationen zur Verzweigungsziel-Puf­ ferschaltung 40. Die von dem Instruktionsdekodierer 60 gesen­ deten Verzweigungsinformationen enthalten die Adresse der der Verzweigungsinstruktion unmittelbar folgenden Instruktion. Die Verzweigungsziel-Pufferschaltung 40 speichert die Adresse der der Verzweigungsinstruktion unmittelbar folgenden In­ struktion in die Verzweigungs-IP-Tabelle 43 für eine spätere Verwendung.
Der Verzweigungsadreßberechner 50 macht von der Verzwei­ gungsziel-Pufferschaltung 40 gemachte Verzweigungsvorhersagen gültig. Wenn der Verzweigungsadreßberechner 50 feststellt, daß die Verzweigungsziel-Pufferschaltung 40 eine Verzwei­ gungsvorhersage für eine nicht existente Verzweigung gemacht hat, instruiert der Verzweigungsadreßberechner 50 die Ver­ zweigungsziel-Pufferschaltung 40, einen die nicht existente Verzweigungsinstruktion enthaltenden Eintrag in dem Verzwei­ gungsziel-Puffer-Cache-Speicher 41 zurückzunehmen (deallocate).
Der Zuweiser 70 ist verantwortlich für die Zuweisung ei­ nes Eintrags des Umordnungspuffers 83 für jeden Mikrobefehl. Wenn der Zuweiser 70 einen pDst-Eintrag in dem Umordnungspuf­ fer 83 für einen Verzweigungsmikrobefehl zuweist, liefert der Zuweiser 70 die pDst-Eintragsnummer der Verzweigungsziel-Puf­ ferschaltung 40. Die Verzweigungsziel-Pufferschaltung 40 ver­ wendet die pDst-Eintragsnummer, um einen entsprechenden Ein­ trag in der Verzweigungs-IP-Tabelle 43 zuzuweisen. Der ent­ sprechende Eintrag in der Verzweigungs-IP-Tabelle 43 spei­ chert Informationen über den Verzweigungsmikrobefehl, während der Verzweigungsmikrobefehl innerhalb des Mikroprozessors ist.
Die Reservierungsstation 81 speichert Mikrobefehle, die auf eine Ausführung warten, und fertigt bereite Mikrobefehle zu den Ausführungseinheiten in dem Mikroprozessor ab. Wenn die Reservierungsstation 81 einen Verzweigungsmikrobefehl zu der Verzweigungsausführungseinheit 92 abfertigt, informiert die Reservierungsstation 81 die Verzweigungsziel-Pufferschal­ tung 40 über den pDst-Eintrag für den Verzweigungsmikrobe­ fehl. Die Verzweigungsziel-Pufferschaltung 40 antwortet, in­ dem sie den entsprechenden Eintrag für die Verzweigungsin­ struktion in der Verzweigungs-IP-Tabelle 43 ausliest. Die aus dem Eintrag in der Verzweigungs-IP-Tabelle 43 ausgelesenen Informationen werden verwendet, nachdem der Verzweigungsmi­ krobefehl ausgeführt wird.
Die Verzweigungsausführungseinheit 92 führt Verzweigungs­ mikrobefehle für den Mikroprozessor aus. Wenn die Verzwei­ gungsausführungseinheit 92 einen Verzweigungsmikrobefehl aus­ führt, liefert sie die Verzweigungsentscheidungsinformationen zu der Verzweigungsziel-Pufferschaltung 40. Die Verzweigungs­ ziel-Pufferschaltung 40 verwendet die Verzweigungsentschei­ dungsinformationen, um einen vorhandenen Eintrag in dem Ver­ zweigungsziel-Puffer-Cache-Speicher 41 zu aktualisieren oder einen neuen Eintrag in dem Verzweigungsziel-Puffer-Cache- Speicher 41 zuzuweisen.
Der Verzweigungsziel-Puffer-Cache-Speicher
Die Verzweigungsziel-Pufferschaltung 40 hält einen Ver­ zweigungsziel-Puffer-Cache-Speicher 41, um das Vorhandensein von Verzweigungsinstruktionen innerhalb eines Instruktions­ stroms und das Ergebnis jener Verzweigungsinstruktionen vor­ herzusagen. Der Verzweigungsziel-Puffer-Cache-Speicher 41 enthält Informationen über Verzweigungsinstruktionen, die der Mikroprozessor zuvor ausgeführt hat. Fig. 6 veranschaulicht die Organisation des Verzweigungsziel-Puffer-Cache-Speichers 41.
Der Verzweigungsziel-Puffer-Cache-Speicher 41 ist ein Satz-assoziativer Cache-Speicher, der Informationen über in dem Hauptspeicher angeordnete Verzweigungsinstruktionen spei­ chert. In dem bevorzugten Ausführungsbeispiel speichert der Verzweigungsziel-Puffer-Cache-Speicher 41 Informationen über Verzweigungsinstruktionen in 128 einzelnen "Sätzen" von Ver­ zweigungsinformationen. Jeder Satz von Verzweigungsinforma­ tionen in dem Verzweigungsziel-Puffer-Cache-Speicher 41 ent­ hält vier Verzweigungseinträge, wobei jeder Verzweigungsein­ trag Informationen über eine einzelne von dem Mikroprozessor zuvor ausgeführte Verzweigungsinstruktion enthält.
Jeder Satz von Verzweigungseinträgen innerhalb des Ver­ zweigungsziel-Puffer-Cache-Speichers 41 enthält außerdem eine Verzweigungsmustertabelle 421 und ein Paar von Pseudo-Am- Längsten-Unersetzt-Bits 420 (PLRR-Bits - Pseudo-Least Recent­ ly Replaced bits). Die Verzweigungsziel-Pufferschaltung 40 verwendet die Verzweigungsmustertabelle 421 zum Vorhersagen des Ergebnisses bedingter Verzweigungsinstruktionen in dem Satz von Verzweigungseinträgen. Die Verzweigungsziel-Puffer­ schaltung 40 verwendet die Pseudo-Am-Längsten-Uner­ setzt(PLRR)-Bits 420, um einen Verzweigungseintrag in dem Satz auszuwählen, wenn Informationen über eine neue Verzwei­ gung in den Satz von Verzweigungseinträgen geschrieben werden sollen.
Fig. 7 veranschaulicht die in jedem Verzweigungseintrag eines Verzweigungsziel-Puffer-Cache-Speicher- Satzes gespei­ cherten Verzweigungsinformationen. Wie in Fig. 7 veranschau­ licht ist, enthält jeder Verzweigungseintrag eine zerhackte- Tag-Adresse 401 (hashed tag address), ein Block-Offset 402, eine Verzweigungsart 403, eine wahre Verzweigungsgeschichte 404, eine spekulative Verzweigungsgeschichte 405, ein Speku­ lationsbit 406, ein Gültig-Bit 407 und eine Verzweigungszie­ ladresse 408.
Die zerhackte-Tag-Adresse 401 und das Block-Offset 402 werden verwendet, um eine Speicheradresse der dem Verzwei­ gungseintrag zugeordneten Verzweigungsinstruktion zu identi­ fizieren. Die zerhackte-Tag-Adresse 401 ist eine komprimierte 9-Bit-Repräsentation der 21 höchstwertigen Bits der Adresse der Verzweigungsinstruktion.
Der Block-Offsetwert 402 zeigt das Byte-Offset innerhalb der 16-Byte-Speicherblock-Adresse des letzten Bytes der Ver­ zweigungsinstruktion an. Verzweigungsinstruktionen werden in­ diziert durch das letzte Byte, so daß jedes Byte einer Ver­ zweigungsinstruktion, das eine Blockgrenze überquert, heran­ geholt wird, bevor eine Verzweigungsvorhersage gemacht wird. Im folgenden wird wieder auf die Speicherabbildung gemäß Fig. 4 Bezug genommen. Eine vier Byte lange Verzweigungsinstrukti­ on ist beispielsweise an der hexadezimalen Adresse 1E bis 21 dargestellt. Nachdem sie ausgeführt worden ist, wird die 4- Byte-Verzweigungsinstruktion in einem Eintrag in dem Verzwei­ gungsziel-Puffer-Cache-Speicher 41 angeordnet und ihr die he­ xadezimale Adresse 21 zugeordnet. Folglich wird das Block- Offset 402 in dem Verzweigungseintrag für die Verzweigungs­ instruktion auf 1 gesetzt.
Wenn statt dessen die Verzweigungsinstruktion von dem er­ sten Byte (hexadezimale Adresse 1E) indiziert würde, würde die Verzweigungsziel-Pufferschaltung 40 die Instruktionsher­ anholeinheit 30 anweisen, von der Verzweigungszieladresse heranzuholen, bevor sämtliche die Verzweigungsinstruktion enthaltenen Bytes herangeholt worden sind. Somit wären der Instruktionsdekodierer 60 und die Verzweigungsausführungsein­ heit 92 nicht in der Lage, die Verzweigungsinstruktion zu überprüfen, da nicht die gesamte Verzweigungsinstruktion her­ angeholt worden wäre.
Das Verzweigungstypfeld 403 in jedem Verzweigungseintrag gibt an, welche Art von Verzweigungsinstruktion der Verzwei­ gungseintrag identifiziert. Die folgende Tabelle 1 listet die verschiedenen Arten von Verzweigungsinstruktionen auf.
Verzweigungsart-Code
Verzweigungsart
00
Bedingte Verzweigung
01 Rückkehr von einer Subroutine
10 Aufruf einer Subroutine
11 Unbedingte Verzweigung
Die Verzweigungsziel-Pufferschaltung 40 verwendet das Verzweigungsart-Feld 403, wenn sie eine Verzweigungsvorhersa­ ge macht, da verschiedene Verzweigungsvorhersagemechanismen für verschiedene Arten von Verzweigungsinstruktionen verwen­ det werden. Beispielsweise sagt die Verzweigungsziel-Puffer­ schaltung 40 das Ergebnis einer bedingten Verzweigungsin­ struktion auf der Grundlage der Geschichte der Verzweigungs­ instruktion voraus, aber die Verzweigungsziel-Pufferschaltung 40 sagt eine unbedingte Verzweigungsinstruktion stets so vor­ aus, wie sie genommen wurde.
Das Feld 404 für die wahre Verzweigungsgeschichte in Fig. 7 hält die Geschichte der Vornahme oder Nicht-Vornahme der Verzweigungsinstruktion, wie sie von der Verzweigungsausfüh­ rungseinheit 92 festgestellt wurde. Das Feld 404 der wahren Verzweigungsgeschichte speichert die Verzweigungsgeschichte für die letzten vier Ausführungen der Verzweigungsinstruktion mit Hilfe von vier Bits, wobei "0" eine Nicht-Vornahme der Verzweigung und "1" eine Vornahme der Verzweigung kennzeich­ net. Die vier Bits der Vornahme/Nicht-Vornahme-Geschichte werden verwendet, um in eine Musterzustandstabelle zu in­ dexieren, wenn eine Verzweigungsvorhersage berechnet wird. Diese basiert auf dem Verzweigungsergebnis bei der Verzwei­ gungsausführung.
Das Spekulationsbit 406 und das Feld 405 der spekulativen Verzweigungsgeschichte werden verwendet, um Vorhersagen für Verzweigungsinstruktionen zu machen, ohne auf eine Ausführung der Verzweigungsinstruktionen zu warten. Das Feld 405 der spekulativen Verzweigungsgeschichte in Fig. 7 hält die "spekulative" Geschichte der Vornahme oder Nicht-Vornahme der Verzweigungsinstruktion für die letzten vier von der Verzwei­ gungsziel-Pufferschaltung 40 gemachten Vorhersagen. Das Spe­ kulationsbit 406 ist gesetzt, wenn das Feld 405 der spekula­ tiven Verzweigungsgeschichte eine gültige spekulative Ge­ schichte enthält. Die vier Bits der spekulativen Verzwei­ gungsgeschichte 405 werden verwendet, um in die Musterzu­ standstabelle zu indexieren, wenn eine Verzweigungsvorhersage berechnet wird und das Spekulationsbit 406 gesetzt ist. Für weitere Informationen über die Vorhersage von Verzweigungsin­ struktionen mit Hilfe der spekulativen Verzweigungsgeschichte wird auf die ebenfalls anhängige US-Patentanmeldung "Speculative History Mechanism in a Branch Target Buffer", U.S.S.N. 08/062,012, angemeldet am 14. Mai 1993, verwiesen.
Das Gültig-Bit 407 zeigt an, ob der Verzweigungseintrag gültige Verzweigungsinformationen enthält. Wenn die Verzwei­ gungsziel-Pufferschaltung 40 einen Verzweigungseintrag zu­ weist und füllt, setzt die Verzweigungsziel-Pufferschaltung 40 das Gültig-Bit 407 für den Eintrag, wodurch angezeigt wird, daß der Eintrag gültige Verzweigungsinformationen ent­ hält. Später, wenn der Verzweigungsadreßberechner 50 den Ver­ zweigungseintrag zurücknimmt (deallocates), wird das Gültig- Bit 407 für diesen Eintrag gelöscht.
Das Verzweigungsziel-Adreßfeld 408 gemäß Fig. 7 speichert die Verzweigungszieladresse für die Verzweigungsinstruktion mit Ausnahme der Verzweigungsinstruktionen, die Subroutinen- Rückkehrinstruktionen sind. Wenn die Verzweigungsziel-Puf­ ferschaltung 40 die dem vorgenommenen Verzweigungseintrag zugeordnete Verzweigungsinstruktion vorhersagt, kann die Adresse in dem Verzweigungsziel-Adreßfeld 408 zu der In­ struktionsheranholeinheit 30 weitergeleitet werden, um die Instruktionsheranholeinheit 30 darüber zu informieren, woher die nächsten Instruktionen geholt werden sollen. (Jedoch wird das Verzweigungsziel-Adreßfeld 408 nicht immer verwendet, um die Zieladresse vorherzusagen.) Die oberen 28 Bits des Ver­ zweigungsziel-Adreßfelds 408 wählen einen 16-Byte-Block aus, den die Instruktionsheranholeinheit 30 heranholen sollte, wenn die Verzweigung vorgenommen wird. Die untersten vier Bits des Verzweigungsziel-Adreßfelds 408 wählen das Byte in dem herangeholten Block aus, an dem der Mikroprozessor die Ausführung wieder aufnehmen soll.
Die Vorhersage von Verzweigungsinstruktionen mit Hilfe des Verzweigungsziel-Puffer-Cache-Speichers
Die Instruktionsheranholeinheit 30 fordert Informationen über aufkommende Verzweigungsinstruktionen an, indem sie ei­ nen Instruktionszeiger zu der Verzweigungsziel-Pufferschal­ tung 40 weiterleitet. Fig. 8 veranschaulicht die Schritte, die von der Verzweigungsziel-Pufferschaltung 40 ausgeführt werden, wenn sie in dem Verzweigungsziel-Puffer-Cache-Spei­ cher 41 nach aufkommenden Verzweigungsinstruktionen sucht. Am Schritt 101 empfängt die Verzweigungsziel-Pufferschaltung 40 den Instruktionszeiger von der Instruktionsheranholeinheit 30.
Am Schritt 102 liest die Verzweigungsziel-Pufferschaltung 40 mit Hilfe des Instruktionszeigers einen Satz von vier Ver­ zweigungseinträgen aus dem Verzweigungsziel-Puffer-Cache- Speicher 41 aus. Um klarzustellen, wie die Verzweigungsziel- Pufferschaltung 40 den Instruktionszeiger verwendet, veran­ schaulicht Fig. 9a die einzelnen Bits der 32-Bit-Instrukti­ onszeigeradresse, wie sie von dem Verzweigungsziel-Puffer- Cache-Speicher 41 verwendet wird, um die Adresse einer Ver­ zweigungsinstruktion zu identifizieren. Die oberen 28 Bits der Adresse identifizieren einen Speicherblock. Die vier am geringsten bewerteten Bits einer Adresse kennzeichnen eine Offset-Stelle innerhalb eines 16-Byte-Blocks. In dem Verzwei­ gungsziel-Puffer-Cache-Speicher 41 enthält jeder Eintrag ein Block-Offset 402, das das letzte Byte der zugehörigen Ver­ zweigungsinstruktion innerhalb eines 16-Byte-Blocks lokali­ siert.
Die oberen 28 Bits einer einen Speicherblock identifizie­ renden Adresse können in zwei separate Abschnitte eingeteilt werden. Die höchsten 21 Bits (Bits 11 bis 31) repräsentieren ein Tag, das jedem Verzweigungseintrag in dem Verzweigungs­ ziel-Puffer-Cache-Speicher 41 zugeordnet ist. Die verbleiben­ den 7 Bits (Bits 4 bis 10) sind die "Satz-Bits", die einen Satz von Verzweigungseinträgen innerhalb des Verzweigungs­ ziel-Puffer-Cache-Speichers 41 identifizieren.
Die Verzweigungsziel-Pufferschaltung 40 indiziert in den Verzweigungsziel-Puffer-Cache-Speicher 41 mit Hilfe der sie­ ben Satz-Bits (Bits 4 bis 10) des Instruktionszeigers, um ei­ nen Satz von Verzweigungseinträgen auszuwählen. Die Verzwei­ gungsziel-Pufferschaltung 40 liest dann den ausgewählten Satz von Verzweigungseinträgen aus.
Am Schritt 103 überprüft die Verzweigungsziel-Puffer­ schaltung 40 die vier Verzweigungseinträge innerhalb des aus­ gewählten Satzes, um festzustellen, ob irgendeiner der vier Verzweigungseinträge Informationen über eine Verzweigungsin­ struktion in dem 16-Byte-Block enthält, auf die der Instruk­ tionszeiger zeigt. Insbesondere vergleicht die Verzweigungs­ ziel-Pufferschaltung 40 eine komprimierte 9-Bit-Version der oberen 21 Bits der Instruktionszeigeradresse mit dem zerhack­ ten Tag-Feld 401 innerhalb jedes Verzweigungseintrags, um Verzweigungseinträge zu eliminieren, die nicht übereinstim­ men.
Um die zum Aufbau des Verzweigungsziel-Puffer-Cache-Spei­ chers 41 erforderliche Fläche zu reduzieren, speichert jeder Verzweigungseintrag in dem Verzweigungsziel-Puffer-Cache- Speicher 41 eine komprimierte Tag-Adresse. In dem bevorzugten Ausführungsbeispiel läuft der vollständige 21-Bit-Tag-Wert durch einen Zerhackungs(Hash)mechanismus, der das Tag auf neun Bits reduziert. Bei der Kompression der Tag-Adresse ge­ hen einige Informationen verloren und können so eine Verfäl­ schung (aliasing) bewirken. Das von dem komprimierten Tag er­ zeugte Aliasing bewirkt möglicherweise falsche Verzweigungs­ vorhersagen. Jedoch werden falsche Verzweigungsvorhersagen gegebenenfalls von dem Verzweigungadreßberechner 50 oder Ver­ zweigungsausführungseinheit 92 in dem Mikroprozessor geheilt.
Die Verzweigungsziel-Puffer-Logik 40 verwendet zwei ver­ schiedene Zerhackungsmechanismen, um die Tag-Adresse zu kom­ primieren. Beide Zerhackungsmechanismen reduzieren die voll­ ständige 21-Bit-Tag-Adresse zu einem 9-Bit-Zerhackungs-Tag.
Ein maschinenspezifisches Register (MSR) des Mikroprozessors wählt eine der beiden Arten des Zerhackungsmechanismus aus.
Fig. 9b veranschaulicht die Arbeitsweise des ersten Zer­ hackungsmechanismus. Der erste Zerhackungsmechanismus verket­ tet die zwei am höchsten bewerteten Bits (Bits 30 und 31) der vollständigen Tag-Adresse mit den sieben am geringsten bewer­ teten Bits (Bits 11 bis 17), um ein 9-Bit-Zerhackungs-Tag zu erstellen. Dieser erste Zerhackungsmechanismus arbeitet gut bei Programmen, die üblicherweise lokal springen, so daß die unteren sieben Bits hilfreich sind, die aber gelegentlich zu einer weit entfernten Betriebssystemroutine springen, so daß die zwei am höchsten bewerteten Bits nützlich sind.
Fig. 9c veranschaulicht die Arbeitsweise des zweiten Zer­ hackungsmechanismus. Der zweite Zerhackungsmechanismus ver­ kettet die zwei am höchsten bewerteten Bits (Bits 30 und 31) der vollständigen Tag-Adresse, eine 4-Bit-Exklusiv-ODER (XOR)-Kombination der nächsten 16 Bits der vollständigen Tag- Adresse (Bits 14 bis 29) und die drei am geringsten bewerte­ ten Bits (Bits 11 bis 13) der vollständigen Tag-Adresse, um ein verkürztes 9-Bit-Tag zu schaffen. Die 4-Bit-Exklusiv- ODER-Kombination wird erzeugt, indem die mittleren 16 Bits (Bits 14 bis 29) in Gruppen von vier Bits miteinander kombi­ niert werden, wie es in Fig. 9c veranschaulicht ist. Der zweite Zerhackungsmechanismusarbeit gut bei Programmen, die irgendwohin in dem Adreßraum springen, da sämtliche Tag-Bits in die Berechnung einbezogen werden. Zu beachten ist, daß die zwei am höchsten bewerteten Bits (Bits 30 und 31) bewahrt werden, um Aufrufe zu Betriebssystemroutinen zu erfassen, die weit von der aktuellen Adresse entfernt sind.
Beim Überprüfen des Verzweigungsziel-Puffer-Cache-Spei­ chers 41 läßt die Verzweigungsziel-Puffer-Logik 40 die oberen 21 Bits des aktuellen Instruktionszeigers durch den Zer­ hackungsmechanismus laufen und vergleicht den zerhackten In­ struktionszeigerwert mit den zerhackten-Tag-Feldern 401 in den vier Verzweigungseinträgen des ausgewählten Satzes. Die Verzweigungsziel-Puffer-Logik 40 scheidet jene Verzweigungs­ einträge aus, die ein nicht mit dem Wert des aktuellen zer­ hackten Instruktionszeigers übereinstimmendes zerhacktes-Tag- Feld 401 haben.
Am Schritt 104 (Fig. 8) scheidet die Verzweigungsziel- Puffer-Logik 40 die Verzweigungseinträge in dem ausgewählten Satz aus, die Verzweigungsinstruktionen identifizieren, die vor dem aktuellen Instruktionszeiger angeordnet sind. Bei­ spielsweise ist, wie es in der Speicherabbildung gemäß Fig. 4 dargestellt ist, eine vier Byte lange Verzweigungsinstruktion an den hexadezimalen Adressen 1E bis 21 angeordnet. Die Ver­ zweigungsinstruktion an den hexadezimalen Adressen 1E bis 21 wird in einen Verzweigungseintrag in dem Verzweigungsziel- Puffer-Cache-Speicher 41 angeordnet, und ihr wird die hexade­ zimale Adresse 21 zugeordnet, da dies die Adresse des letzten Bytes der Verzweigungsinstruktion ist. Somit wird das Block- Offset-Feld 402 des Verzweigungseintrags auf 1 gesetzt. Wenn der aktuelle Instruktionszeiger auf die hexadezimale Adresse 23 zeigt, so scheidet die Verzweigungsziel-Pufferlogik 40 sämtliche Verzweigungseinträge aus, die in dem Block-Offset- Feld 402 Werte kleiner als 3 haben, so daß der Verzweigungs­ eintrag für die Verzweigungsinstruktion an der hexadezimalen Adresse 21 nicht länger berücksichtigt wird.
Die verbleibenden Verzweigungseinträge beschreiben Ver­ zweigungsinstruktionen innerhalb des 16-Byte-Blocks, auf die von dem aktuellen Instruktionszeiger gezeigt wird, und die nach dem aktuellen Instruktionszeiger angeordnet sind. Am Schritt 105 (Fig. 8) ordnet die Verzweigungsziel-Puffer-Logik 40 die verbleibenden Verzweigungseinträge unter Verwendung des Block-Offset-Feldes 402 der verbleibenden Verzweigungs­ einträge. Die Verzweigungsziel-Pufferlogik 40 wählt dann die erste als "vorgenommen" gekennzeichnete Verzweigungsinstruk­ tion aus den verbleibenden geordneten Verzweigungseinträgen aus, sofern es eine "vorgenommene" Verzweigungsinstruktion gibt. Um die erste vorgenommene Verzweigungsinstruktion aus den verbleibenden geordneten Verzweigungseinträgen auszuwäh­ len, muß die Verzweigungsziel-Puffer-Logik 40 Verzweigungs­ ergebnisvorhersagen für sämtliche verbleibenden Verzwei­ gungseinträge in dem ausgewählten Satz machen.
Vorhersagen der Verzweigungsergebnisse und der Verzweigungszieladressen
Um eine Verzweigungszielvorhersage für jeden Eintrag zu machen, liest die Verzweigungsziel-Pufferschaltung 40 zu­ nächst das Verzweigungsart-Feld 403. Die Verzweigungsziel- Pufferschaltung 40 führt in Abhängigkeit der Art der vorher­ gesagten Verzweigungsinstruktion unterschiedliche Verzwei­ gungsvorhersagen aus.
Das Verzweigungsart-Feld zeigt an, ob die vorhergesagte Verzweigungsinstruktion eine bedingte, eine unbedingte, eine Subroutinen-Aufruf- oder eine Subroutinen-Rückkehr-Verzwei­ gungsinstruktion ist. Zu beachten ist, daß obwohl Subrouti­ nen-Aufruf und Subroutinen-Rückkehr-Instruktionen spezielle Arten unbedingter Verzweigungsinstruktionen sind. Diese bei­ den Instruktionen sind als verschiedene Arten markiert. Die Verzweigungsziel-Pufferschaltung 40 markiert Subroutinen- Aufruf und Subroutinen-Rückkehr-Instruktionen als verschie­ dene Arten, da die Verzweigungsziel-Pufferschaltung 40 spe­ zielle Operationen ausführt, wenn diese beiden Arten von Ver­ zweigungsinstruktionen vorhergesagt werden.
Die folgende Tabelle faßt zusammen, wie die Verzweigungs­ ziel-Pufferschaltung 40 Verzweigungsergebnisse und Zieladres­ sen für die vier Arten von in dem Verzweigungsziel-Puffer- Cache-Speicher 41 gespeicherten Verzweigungsinstruktionen vorhersagt.
Tabelle 2
Wie in Tabelle 2 ausgeführt ist, werden sämtliche Ver­ zweigungsinstruktionen mit Ausnahme der bedingten Verzwei­ gungsinstruktionen als genommen vorhergesagt. Um das Ergebnis einer bedingten Verzweigungsinstruktion vorherzusagen, ver­ wendet die Verzweigungsziel-Pufferschaltung 40 den adaptiven Zwei-Ebenen-Verzweigungsvorhersagemechanismus von Yeh & Patt. (Siehe Tse Yu Yeh und Yale N. Patt, Two-Level Adaptive Branch Prediction, The 24th ACM/IEEE International Symposium and Workshop on Microarchitecture, November 1991, Seiten 51 - 61) . Der Zwei-Ebenen-Verzweigungsvorhersagemechanismus von Yeh & Patt hält dynamisch zwei Ebenen der Verzweigungsge­ schichte aufrecht.
Die erste Ebene der in dem adaptiven Zwei-Ebenen-Verzwei­ gungsvorhersagemechanismus gehaltenen Verzweigungsgeschichte ist die vorgenommen/nicht-vorgenommen-Verzweigungsgeschichte, die in jedem Verzweigungseintrag gespeichert ist. Beispiels­ weise wird eine "nicht-vorgenommen, vorgenommen, vorgenommen, nicht-vorgenommen"-Verzweigungsgeschichte durch "0110" darge­ stellt. Bei dem bevorzugten Ausführungsbeispiel werden zwei Versionen der Verzweigungsgeschichte gespeichert: Eine wahre Verzweigungsgeschichte und eine spekulative Verzweigungsge­ schichte. Die wahre Verzweigungsgeschichte speichert die letzten vier Ergebnisse der Verzweigungsinstruktion, wie sie von der Verzweigungsausführungseinheit 92 festgestellt worden sind. Die spekulative Verzweigungsgeschichte speichert die letzten vier Ergebnisse der Verzweigungsinstruktion, wie sie von der Verzweigungsziel-Pufferschaltung 40 vorhergesagt wor­ den sind. Die spekulative Geschichte wird verwendet, um das Problem der Vorhersage von Verzweigungsinstruktionen inner­ halb kleiner (oder "enger") Schleifen zu umgehen, da die wahre Geschichte möglicherweise nicht schnell genug aktuali­ siert sein kann. Diese Beschreibung widmet sich in erster Li­ nie der wahren Verzweigungsgeschichte, jedoch können zusätz­ liche Informationen über die spekulative Verzweigungsge­ schichte in der anhängigen Patentanmeldung "Speculative Histo­ ry Mechanism in a Branch Target Buffer", U.S.S.N. 08/062,012, angemeldet am 14. Mai 1993, gefunden werden.
Die zweite Ebene der in dem adaptiven Zwei-Ebenen-Ver­ zweigungsvorhersagemechanismus gehaltenen Verzweigungsge­ schichte ist die Verzweigungsmustergeschichte. Die Verzwei­ gungsmustergeschichte zeigt das wahrscheinliche Ergebnis ei­ ner Verzweigungsinstruktion auf der Grundlage der vorangegan­ genen Verzweigungsergebnisse der Verzweigungsinstruktion mit identischer Verzweigungsgeschichte an. Die Verzweigungsmu­ stergeschichte wird als ein 2-Bit-Zustandswert für jedes mög­ liche Muster der Verzweigungsgeschichte gespeichert. Da das bevorzugte Ausführungsbeispiel 4 Bits der Verzweigungsge­ schichte speichert, gibt es 16 Zustandswerte für die 16 mög­ lichen Muster der Verzweigungsgeschichte, wie sie in Fig. 10a veranschaulicht sind. Die 2-Bit-Zustandswerte klassifizieren die Verzweigungsmuster in stark genommen, schwach genommen, schwach nicht-genommen und stark-nicht genommen, wie es in Fig. 10b veranschaulicht ist.
Die Verzweigungsmustergeschichte wird ausgehend von zuvor aufgetretenen gleichen Verzweigungsmustern erschaffen. Jedes­ mal dann, wenn eine bedingte Verzweigungsinstruktion ent­ schieden wird, wird die Verzweigungsmustertabelle mit Hilfe des Sättigungs-Auf/Nieder-Zählers von Lee & Smith aktuali­ siert, wie es durch die Zustandsübergangszeile in Fig. 10b dargestellt ist.
Es wird ein Verzweigungsvorhersagebeispiel unter Bezug­ nahme auf die Fig. 10a angegeben. 4 Bits einer Verzweigungs­ geschichte speichern ein "nicht-genommen, genommen, genommen, nicht-genommen" ("0110")-Muster für eine bedingte Verzwei­ gungsinstruktion. Das 4-Bit-Verzweigungsmuster wird verwen­ det, um in eine Verzweigungsmustertabelle zu verweisen (indizieren), die Zustandswerte der Verzweigungsmusterge­ schichte für jedes Verzweigungsmuster speichert. In Fig. 10a indiziert das Verzweigungsmuster "0110" zu einem Zustandswert "10", der den Zustand "schwach genommen" repräsentiert. Der Verzweigungsvorhersagemechanismus wird demzufolge vorhersagen, daß die Verzweigung vorgenommen werden wird. Wenn die Ver­ zweigungsinstruktion von der Verzweigungsausführungseinheit 92 entschieden worden ist, aktualisiert die Verzweigungsaus­ führungseinheit 92 sowohl die Verzweigungsgeschichte für die Verzweigung als auch den geeigneten Zustandswerteintrag in einer Verzweigungsmustertabelle.
Nachdem die Verzweigungsziel-Pufferschaltung 40 das Ver­ zweigungsergebnis für sämtliche bedingten Verzweigungsin­ struktionen in dem geordneten Satz bestimmt hat, sucht die Verzweigungsziel-Pufferschaltung 40 nach der ersten vorgenom­ menen Verzweigungsinstruktion. Wenn keine Verzweigungsin­ struktionen als vorgenommen vorhergesagt werden, dann holt die Instruktionsheraneinheit 30 den nächsten sequentiellen Speicherblock heran. Wenn jedoch in dem ausgewählten Satz ei­ ne vorgenommene Verzweigungsinstruktion ist, dann sagt die Verzweigungsziel-Pufferschaltung 40 eine Verzweigungszie­ ladresse für die erste vorgenommene Verzweigungsinstruktion vorher.
Tabelle 2 beschreibt, wie die Verzweigungsziel-Puffer­ schaltung 40 eine Verzweigungszieladresse für die jeweilige, von dem Verzweigungsart-Feld 403 angezeigte Art der Verzwei­ gungsinstruktion vorhersagt, wenn die Verzweigungsinstruktion als vorgenommen vorhergesagt wird. Wie in Tabelle 2 ausge­ führt ist, behandelt die Verzweigungsziel-Pufferschaltung 40 die unbedingten, bedingten und zur Subroutine springenden Verzweigungsinstruktionen, indem sie eine Verzweigung zu der in dem Verzweigungsziel-Adreßfeld 408 des Verzweigungsziel- Puffer-Cache-Speichereintrags zur Verfügung gestellten Adresse vorhersagt. Jedoch werden die Subroutinen-Rückkehr- Instruktionen anders behandelt.
Wenn die Verzweigungsziel-Pufferschaltung 40 eine Subrou­ tinen-Rückkehr-Instruktion vorhersagt, sagt die Verzweigungs­ ziel-Pufferschaltung 40 eine Rückkehradresse aus einem Rück­ kehr-Register oder aus einem Rückkehr-Stapel-Puffer innerhalb des Verzweigungsadreßberechners 50 vorher.
Die Verzweigungsziel-Pufferschaltung 40 leitet die vor­ hergesagte Verzweigungszieladresse zu der Instruktionsheran­ holeinheit 30 weiter. Die Instruktionsheranholeinheit 30 holt dann den nächsten Speicherblock mit Hilfe der vorhergesagten Verzweigungsadresse heran.
Die Verzweigungsinstruktionszeigertabelle
Zusätzlich zu dem Verzweigungsziel-Puffer-Cache-Speicher 41 hält die Verzweigungsziel-Pufferschaltung 40 einen weite­ ren, Verzweigungsinstruktionszeiger (IP)-Tabelle 43 genannten Cache-Speicher aufrecht. Die Verzweigungs-IP-Tabelle 43 spei­ chert Informationen über sämtliche unentschiedenen Verzwei­ gungsmikrobefehle, die gegenwärtig innerhalb des Mikroprozes­ sors sind. Nachdem ein Verzweigungsmikrobefehl ausgeführt worden ist, werden die in der Verzweigungs-IP-Tabelle 43 ge­ speicherten Informationen ausgelesen (retrieved), um den Ver­ zweigungsziel-Puffer-Cache-Speicher 41 zu aktualisieren oder den Mikroprozessor im Falle einer falschen Verzweigungsvor­ hersage erneut zu starten.
Fig. 11 veranschaulicht die Verzweigungs-IP-Tabelle 43 nach der Erfindung. Die Verzweigungs-IP-Tabelle 43 weist ei­ nen n Verzweigungseinträge (0 bis n-1) enthaltenden Puffer auf, wobei n gleich der Anzahl der Einträge in dem Umord­ nungspuffer 83 ist. Jeder Verzweigungsinformationseintrag in­ nerhalb der Verzweigungs-IP-Tabelle 43 weist ein Nächster-Li­ nearer-Instruktionszeiger(NLIP - Next Linear Intruction Po­ inter) -Adreßfeld und ein Prozessorzustandsinformationsfeld auf.
Das Nächster-Linearer-Instruktionszeiger (NLIP)-Adreßfeld speichert die Adresse der Instruktion, die der dem Verzwei­ gungsmikrobefehl zugeordneten Verzweigungsinstruktion unmit­ telbar folgt. Die Instruktionsheranholeinheit 30 verwendet die Nächster-Linearer-Instruktionszeiger (NLIP)-Adresse, wenn eine Verzweigung fälschlicherweise als vorgenommen vorherge­ sagt wurde, aber die Verzweigung nicht vorgenommen werden soll.
Die NLIP-Adresse wir außerdem verwendet, um in den Ver­ zweigungsziel-Puffer-Cache-Speicher 41 zu indizieren, wenn neue Verzweigungseinträge zugewiesen oder die Verzweigungsge­ schichten-Informationen in vorhandenen Verzweigungseinträgen aktualisiert werden sollen. Wenn ein neuer Verzweigungsein­ trag zugewiesen oder ein vorhandener Verzweigungseintrag ak­ tualisiert werden soll, wird die NLIP-Adresse um eins dekre­ mentiert, um die Adresse des letzten Bytes der Verzweigungs­ instruktion zu erzeugen. Die Adresse des letzten Bytes der Verzweigungsinstruktion wird von der Verzweigungsziel-Puffer­ schaltung 40 verwendet, um in den Verzweigungsziel-Puffer- Cache-Speicher 41 zu indizieren.
Das Prozessorzustandsinformationsfeld wird verwendet, um Zustandsinformationen zu speichern, die verfälscht werden könnten, wenn der Mikroprozessor die spekulative Ausführung nach einer Verzweigungsvorhersage beginnt. Wenn der Mikropro­ zessor aufgrund einer falschen Verzweigungsvorhersage speku­ lativ entlang des falschen Pfades ausführt, können die Zu­ standsinformationen von der Verzweigungs-IP-Tabelle 43 zu­ rückgespeichert werden, wenn die Vorhersage als falsch er­ kannt wird. Im aktuellen Ausführungsbeispiel speichert das Mikroprozessorzustandsinformationsfeld einen Stapel-Zeiger für den Rückkehr-Stapel-Puffer in dem Verzweigungsadreßbe­ rechner 50.
Wie anhand des Überblicks über den Mikroprozessor ausge­ führt worden ist, wird, wenn der Zuweiser 70 einen pDst-Ein­ trag in dem Umordnungspuffer 83 für einen Verzweigungsmikro­ befehl zuweist, ein entsprechender Eintrag in der Verzwei­ gungs-IP-Tabelle 43 zugewiesen. Der Instruktionsdekodierer 60 informiert die Verzweigungsziel-Pufferschaltung 40 über den zugewiesenen pDst-Eintrag, die Prozessorzustandsinformationen und die Nächster-Linearer-Instruktionszeiger (NLIP)-Adresse. Die Verzweigungsziel-Pufferschaltung 40 schreibt die Prozes­ sorzustandsinformationen und die Nächster-Linearer-Instrukti­ onszeiger(NLIP)-Adresse in einen entsprechenden Eintrag in der Verzweigungs-IP-Tabelle 43.
Aktualisierung des Verzweigungsziel- Puffer-Cache-Speichers
Im folgenden wird auf Fig. 2 Bezug genommen. Jeder Ver­ zweigungsmikrobefehl verbleibt in dem Eintrag der Reservie­ rungsstation 81, bis sämtliche zur Ausführung des Verzwei­ gungsmikrobefehls erforderlichen Quelldaten vorhanden sind und die Verzweigungsausführungseinheit 92 verfügbar ist. Wenn die zur Ausführung des Verzweigungsmikrobefehls erforderli­ chen Quelldaten bereit sind, sendet die Reservierungsstation 81 den Verzweigungsmikrobefehl zu der Verzweigungsausfüh­ rungseinheit 92.
Die Verzweigungsziel-Pufferschaltung 40 überwacht den Bus, der zum Senden von Mikrobefehlen von der Reservierungs­ station 81 zu der Verzweigungsausführungseinheit 92 verwendet wird. Sobald sie sieht, daß die Reservierungsstation 81 einen Verzweigungsmikrobefehl zu der Verzweigungsausführungseinheit 92 ausgibt, vermerkt die Verzweigungsziel-Pufferschaltung 40, welche pDst-Eintragsnummer in dem Umordnungspuffer 83 zum Speichern des Verzweigungsmikrobefehlsergebnisses verwendet wird. Wenn die Verzweigungsausführungseinheit 92 den Verzwei­ gungsmikrobefehl ausführt, liest die Verzweigungsziel-Puffer­ schaltung 40 einen Eintrag in der Verzweigungs-IP-Tabelle 43 aus, der die gleiche Eintragsnummer wie der pDst-Eintrag in dem Umordnungspuffer 83 hat. Auf diese Weise sind die dem ausgeführten Verzweigungsmikrobefehl zugeordneten gespeicher­ ten Verzweigungsinformationen verfügbar, wenn der Verzwei­ gungsmikrobefehl entschieden wird.
Die Verzweigungsausführungseinheit 92 führt den Verzwei­ gungsmikrobefehl aus, indem eine endgültige Verzweigungszie­ ladresse und ein endgültiges Verzweigungsergebnis (vorgenommen oder nicht-vorgenommen) bestimmt werden. Die Verzweigungsausführungseinheit 92 vergleicht das endgültige Verzweigungsergebnis der Verzweigung mit einem vorhergesagten Verzweigungsergebnis, um nachzusehen, ob die Verzweigungsvor­ hersage richtig war. Wenn die Verzweigungsvorhersage richtig war, dann setzt der Prozessor die Verarbeitung entlang des vorhergesagten Pfades fort. Wenn jedoch die Verzweigungsvor­ hersage falsch war, dann muß die Verzweigungsausführungsein­ heit 92 den vorderen Teil der Mikroprozessor-Pipeline löschen (flushing) und den Mikroprozessor an der richtigen Adresse erneut starten. Wenn die Verzweigungsinstruktion als vorge­ nommen vorhergesagt wurde, aber das endgültige Verzweigungs­ ergebnis nicht-vorgenommen ist, muß der Mikroprozessor die Ausführung an der Adresse der Instruktion erneut aufnehmen, die der Verzweigungsinstruktion unmittelbar folgt. Die Ver­ zweigungsausführungseinheit 92 behandelt diese Situation, in­ dem sie den Beginn der Mikroprozessor-Pipeline löscht und die Instruktionsheranholeinheit 30 anweist, die Ausführung an der von der Verzweigungs-IP-Tabelle 43 zur Verfügung gestellten NLIP-Adresse wieder aufzunehmen.
Nachdem die Verzweigungsausführungseinheit 92 einen Ver­ zweigungsmikrobefehl ausgeführt hat, muß die Verzweigungs­ ziel-Pufferschaltung 40 in dem Verzweigungsziel-Puffer 41 ei­ nen neuen Eintrag zuweisen oder einen vorhandenen Eintrag ak­ tualisieren. Um auf den richtigen Satz in dem Verzweigungs­ ziel-Puffer-Cache-Speicher 41 zuzugreifen, muß die Verzwei­ gungsziel-Pufferschaltung 40 die Adresse des letzten Bytes der Verzweigungsinstruktion haben. Um das letzte Byte der Verzweigungsinstruktion zu berechnen, dekrementiert die Ver­ zweigungsziel-Pufferschaltung 40 die von der Verzweigungs-IP- Tabelle 43 erhaltene Nächster-Linearer-Instruktionszei­ ger (NLIP)-Adresse.
Um Informationen für die Aktualisierung des Verzweigungs­ ziel-Puffer-Cache-Speichers 41 zur Verfügung zu stellen, überträgt die Verzweigungsausführungseinheit 92 Informationen über die entschiedene Verzweigungsinstruktion zu der Verzwei­ gungsziel-Pufferschaltung 40. Insbesondere informiert die Verzweigungsausführungseinheit 92 die Verzweigungsziel-Puf­ ferschaltung 40, welcher Art der Verzweigungsinstruktion aus­ geführt worden ist, ob die Verzweigung vorgenommen oder nicht-vorgenommen wurde und über die Verzweigungszieladresse. Die Verzweigungsziel-Pufferschaltung 40 verwendet die Infor­ mationen der entschiedenen Verzweigung, um die Verzweigungs­ ziel-Pufferschaltung 41 zu aktualisieren.
Fig. 12 veranschaulicht die Schritte, die die Verzwei­ gungsziel-Pufferschaltung 40 ausführt, wenn der Verzweigungs­ ziel-Puffer-Cache-Speicher 41 aktualisiert wird. Am Schritt 301 dekrementiert die Verzweigungsziel-Pufferschaltung 40 die aus der Verzweigungs-IP-Tabelle 43 ausgelesene Nächster-Li­ nearer-Instruktionszeiger(NLIP)-Adresse, um die Adresse des letzten Bytes der Verzweigungsinstruktion zu berechnen. Die Verzweigungsziel-Pufferschaltung 40 verwendet die Adresse des letzten Bytes der Verzweigungsinstruktion, um in den Verzwei­ gungsziel-Puffer-Cache-Speicher 41 zu indizieren.
Am Schritt 302 indiziert die Verzweigungsziel-Puffer­ schaltung 40 in den Verzweigungsziel-Puffer-Cache-Speicher 41 um nachzusehen, ob ein Verzweigungseintrag in dem Verzwei­ gungsziel-Puffer-Cache-Speicher 41 für die Verzweigungsin­ struktion bereits existiert. Insbesondere indiziert die Ver­ zweigungsziel-Pufferschaltung 40 in den Verzweigungsziel-Puf­ fer-Cache-Speicher 41 mit den Satz-Bits der berechneten Ver­ zweigungsinstruktionsadresse und sucht nach einem Verzwei­ gungseintrag mit übereinstimmendem Zerhackungs-Tag-Feld 401 und Block-Offset-Feld 402.
Wenn die Verzweigungsziel-Pufferschaltung 40 keinen Ver­ zweigungseintrag für die Verzweigungsinstruktion in dem Ver­ zweigungsziel-Puffer-Cache-Speicher 41 finden kann, dann be­ nutzt die Verzweigungsziel-Pufferschaltung 40 eine Zuwei­ sungsvorgehensweise, um zu entscheiden, ob die Verzweigungs­ instruktion zu dem Verzweigungsziel-Puffer-Cache-Speicher 41 hinzugefügt werden soll. Die Zuweisungsvorgehensweise wird an späterer Stelle dieser Beschreibung dargelegt. Wenn die Ver­ zweigungsziel-Pufferschaltung 40 im Gegensatz dazu einen Ver­ zweigungseintrag in dem Verzweigungsziel-Puffer-Cache-Spei­ cher 41 für die Verzweigungsinstruktion findet, dann fährt die Verzweigungsziel-Pufferschaltung 40 mit dem Aktualisieren des Verzweigungseintrags beginnend am Schritt 310 fort.
Aktualisierung eines existierenden Verzweigungs­ eintrags in dem Verzweigungsziel-Puffer-Cache-Speicher
Der gesamte Prozeß des Aktualisierens eines vorhandenen Verzweigungseintrags in dem Verzweigungsziel-Puffer-Cache- Speicher 41 erfordert drei Maschinenzyklen. Eine Aktualisie­ rung eines existierenden Verzweigungseintrags in dem Verzwei­ gungsziel-Puffer-Cache-Speicher kann von der Verzweigungs­ ziel-Pufferschaltung 40 abgebrochen werden, wenn festgestellt wird, daß der Verzweigungseintrag nicht aktualisiert werden soll.
Am Schritt 310 gemäß Fig. 12 vergleicht die Verzweigungs­ ziel-Pufferschaltung 40 die Verzweigungszieladresse in dem Verzweigungseintrag mit der von der Verzweigungsausführungs­ einheit 92 berechneten Verzweigungszieladresse, sofern die Verzweigung keine Subroutinen-Rückkehr-Instruktion ist. Wenn die beiden Zieladressen nicht übereinstimmen, aktualisiert die Verzweigungsausführungseinheit 92 die Verzweigungszie­ ladresse am Schritt 311.
Am Schritt 312 gemäß Fig. 12 überprüft die Verzweigungs­ ziel-Pufferschaltung 40 die von der Verzweigungsausführungs­ einheit 92 gelieferte Verzweigungsart. Wenn die Verzweigungs­ art eine unbedingte Verzweigungsinstruktion ist, dann ist die Aktualisierung des Verzweigungseintrags durch die Verzwei­ gungsziel-Pufferschaltung 40 erledigt. Wenn die Verzweigungs­ instruktion eine bedingte Verzweigungsinstruktion ist, dann fährt die Verzweigungsziel-Pufferschaltung 40 mit der Aktua­ lisierung der Verzweigungsmustertabelle und der Verzweigungs­ geschichte fort.
Am Schritt 316 aktualisiert die Verzweigungsziel-Puffer­ schaltung 40 die Verzweigungsmustertabelle für den Satz, der den Verzweigungseintrag enthält. Die Verzweigungsmusterta­ belle 421 wird aktualisiert, indem in die Verzweigungsmuster­ tabelle 421 mit der vorhandenen wahren Verzweigungsgeschichte 404 indiziert wird und der Zustandswert mit Hilfe des neue­ sten Verzweigungsergebnisses entsprechend der Zustandsüber­ gangstabelle gemäß Fig. 10b geändert wird. Die Verzweigungs­ mustertabelle 421 muß aktualisiert werden, bevor das Feld 404 der wahren Verzweigungsgeschichte aktualisiert wird, da die aktuelle Geschichte in dem Feld 404 der wahren Verzweigungs­ geschichte benötigt wird, um die Verzweigungsmustertabelle 421 zu indizieren.
Nach dem Aktualisieren der Verzweigungsmustertabelle am Schritt 316 aktualisiert die Verzweigungsziel-Pufferschaltung 40 das Feld 404 der wahren Verzweigungsgeschichte am Schritt 318. Die Verzweigungsziel-Pufferschaltung 40 aktualisiert das Feld 404 der wahren Verzweigungsgeschichte, indem das letzte Verzweigungsergebnis der bedingten Verzweigungsinstruktion, wie es von der Verzweigungsausführungseinheit 92 berechnet worden ist, in das Feld 404 der wahren Verzweigungsgeschichte eingeschoben wird. Dies vervollständigt die Aktualisierung des Verzweigungseintrags für eine bedingte Verzweigungsin­ struktion.
Die Verzweigungsziel-Pufferschaltung 40 aktualisiert je­ den Verzweigungseintrag in dem Verzweigungsziel-Puffer-Cache- Speicher 41 zwei Maschinenzyklen, nachdem die Verzweigungs­ ausführungseinheit 92 den der Verzweigungsinstruktion zuge­ ordneten Verzweigungsmikrobefehl ausgeführt hat. Da jedoch der die Verzweigungsziel-Pufferschaltung 40 enthaltende Mi­ kroprozessor Mikrobefehle außerhalb der ursprünglichen Pro­ grammreihenfolge ausführen kann, kann die Verzweigungsziel- Pufferschaltung 40 den Verzweigungsziel-Puffer-Cache-Speicher 41 außerhalb der ursprünglichen Programmreihenfolge aktuali­ sieren.
In den meisten Fällen verursacht die Aktualisierung des Verzweigungsziel-Puffer-Cache-Speichers 41 außerhalb der ur­ sprünglichen Programmreihenfolge keine Probleme. Wenn jedoch die Verzweigungsausführungseinheit 92 eine falsche Verzwei­ gungsvorhersage erkennt, während sie eine Verzweigung aus­ führt, nachdem eine spätere Verzweigung bereits ausgeführt worden ist, wäre die spätere Verzweigung mit einer ungültigen Geschichte aktualisiert worden. Um dieser Situation abzuhel­ fen, kann die Verzweigungsziel-Pufferschaltung 40 die Aktua­ lisierung eines Verzweigungseintrags abbrechen, wenn die Ver­ zweigungsziel-Pufferschaltung 40 innerhalb der nächsten zwei Zyklen erfährt, daß die Verzweigung nicht ausgeführt werden sollte. Ein Beispiel dieser Situation ist unter Bezugnahme auf Fig. 13 dargelegt.
Betrachtet werden vier Br0, Br1, Br2 und Br3 genannte Verzweigungsinstruktionen (Br = Branch), die in dieser Rei­ henfolge innerhalb eines Computerprogramms auftreten. Bei dem in Fig. 2 dargestellten Mikroprozessor können die zugehörigen Verzweigungsmikrobefehle in irgendeiner beliebigen Reihen­ folge ausgeführt werden. Bei dem Beispiel gemäß Fig. 13 wer­ den die vier Verzweigungsinstruktionen in der folgenden Rei­ henfolge ausgeführt: Br3, Br1, Br2 und schließlich Br0.
Zum Zeitpunkt x gemäß Fig. 13 entscheidet in der Pipeline die Verzweigungsausführungseinheit (JE = Jump Execution) die Verzweigungsinstruktion Br3. Zum nächsten Zeitpunkt x+1 ent­ scheidet die Verzweigungsausführungseinheit Br1, und die Ver­ zweigungsziel-Pufferschaltung 40 beginnt mit dem Aktualisie­ ren des Verzweigungseintrags für Br3. Zum Zeitpunkt x+2 ent­ scheidet die Verzweigungsausführungseinheit Br1, während zur gleichen Zeit die Verzweigungsziel-Pufferschaltung 40 die Ak­ tualisierung des Verzweigungseintrags für Br1 beginnt und die Aktualisierung des Verzweigungseintrags für Br3 fortsetzt. Zum Zeitpunkt x+3 entscheidet die Verzweigungsausführungsein­ heit Br0, während zum gleichen Zeitpunkt die Verzweigungs­ ziel-Pufferschaltung 40 mit dem Aktualisieren des Verzwei­ gungseintrags für Br2 beginnt, die Aktualisierung des Ver­ zweigungseintrags für Br1 fortsetzt und die Aktualisierung des Verzweigungseintrags für Br3 abschließt.
Wenn die Verzweigungsausführungseinheit feststellt, daß die Verzweigung Br0 falsch vorhergesagt wurde, dann hätten die nachfolgenden Verzweigungsinstruktionen nicht ausgeführt werden dürfen, da der Mikroprozessor spekulativ entlang des falschen Pfades ausgeführt hat. Noch wichtiger ist, daß die Verzweigungsgeschichten für die Verzweigungsinstruktionen Br1, Br2 und Br3 nicht hätten aktualisiert werden dürfen, da diese Verzweigungsinstruktionen nicht hätten ausgeführt wer­ den dürfen, so daß jede neue Verzweigungsgeschichte falsch wäre. Wenn die Verzweigungsausführungseinheit die falsche Vorhersage erfaßt, instruiert sie die Verzweigungsziel-Puf­ ferschaltung 40, sämtliche gerade in der Ausführung befindli­ chen Aktualisierungen abzubrechen. Somit bricht die Verzwei­ gungsziel-Pufferschaltung 40 die Aktualisierungen für die Verzweigungsinstruktionen Br1 und Br2 ab, wie es in Fig. 13 dargestellt ist. Da die Aktualisierung für Br3 bereits abge­ schlossen war, als die Fehlvorhersage erkannt wurde, kann sie nicht verhindert werden. Jedoch reicht die Fähigkeit zum Ab­ brechen der Aktualisierungen der Verzweigungseinträge während der zwei Zyklen vor Abschluß der Aktualisierung zum Behandeln der Mehrheit solcher Fälle aus.
Zuweisung von Verzweigungseinträgen in dem Verzweigungsziel-Puffer-Cache-Speicher
Wenn die Verzweigungsziel-Pufferschaltung 40 am Schritt 302 gemäß Fig. 12 keinen vorhandenen Verzweigungseintrag in dem Verzweigungsziel-Puffer-Cache-Speicher 41 für die Ver­ zweigungsinstruktion findet, muß die Verzweigungsziel-Puffer­ schaltung 40 feststellen, ob ein neuer Verzweigungseintrag in dem Verzweigungsziel-Puffer-Cache-Speicher 41 zugewiesen wer­ den soll. Um festzustellen, ob ein Verzweigungseintrag zuge­ wiesen werden soll, implementiert der Mikroprozessor eine Vorgehensweise bei der Zuweisung von Verzweigungseinträgen. Die Schritte 303 und 305 implementieren diese Vorgehensweise des Verzweigungsziel-Puffer-Cache-Speichers 41. Einfach ge­ sagt, besteht die Vorgehensweise bei der Zuweisung von Ver­ zweigungseinträgen nach der Erfindung darin, einen Verzwei­ gungseintrag für sämtliche von dem Verzweigungsadreßberechner 50 falsch vorhergesagten Verzweigungsinstruktionen und sämt­ liche Verzweigungsinstruktionen mit vorgenommener Verzweigung zuzuweisen.
Der in Fig. 2 dargestellte Verzweigungsadreßberechner 50 führt eine statische Vorhersage für nicht von der Verzwei­ gungsziel-Pufferschaltung 40 vorhergesagte Verzweigungsin­ struktionen aus. Die statische Vorhersage basiert nur auf den in der Verzweigungsinstruktion selbst kodierten Informatio­ nen, so daß der Verzweigungsadreßberechner 50 stets die glei­ che Vorhersage für eine gegebene Verzweigungsinstruktion macht. Wenn der Verzweigungsadreßberechner 50 eine Verzwei­ gungsinstruktion falsch vorhersagt, so wird folglich die gleiche falsche Vorhersage stets erneut wiederholt (bis das Verzweigungsergebnis sich ändert). Um diese Situation zu ver­ meiden, werden sämtliche von dem Verzweigungsadreßberechner 50 falsch vorhergesagten Verzweigungsinstruktionen dem Ver­ zweigungsziel-Puffer-Cache-Speicher 41 zugewiesen. Folglich testet am Schritt 303 gemäß Fig. 12 die Verzweigungsziel-Puf­ ferschaltung 40, ob die Verzweigungsinstruktion falsch vor­ hergesagt wurde. Wenn die Verzweigung falsch vorhergesagt wurde, weist die Verzweigungsziel-Pufferschaltung 40 der Ver­ zweigungsinstruktion einen Verzweigungseintrag in dem Ver­ zweigungsziel-Puffer-Cache-Speicher 41 zu.
Wenn der Verzweigungsadreßberechner 50 vorhersagt, daß eine Verzweigungsinstruktion eine Verzweigung nicht vornimmt und die Verzweigungsvorhersage korrekt ist, entsteht keine Verzögerung. Wenn andererseits der Verzweigungsadreßberechner 50 vorhersagt, daß eine Verzweigungsinstruktion eine Verzwei­ gung vornimmt, so muß der Verzweigungsadreßberechner 50 noch den Beginn der Pipeline des Mikroprozessors löschen (flushen) und die Instruktionsheranholeinheit 30 starten, damit diese von der Verzweigungszieladresse heranholt. Wenn eine Verzwei­ gungsinstruktion eine Verzweigung vornimmt, so entsteht folg­ lich eine Verzögerung von fünf Zyklen in Abhängigkeit davon, ob der Verzweigungsadreßberechner 50 das Ergebnis der Ver­ zweigungsinstruktion korrekt vorhersagt oder nicht. Um ein erneutes Auftreten dieser Situation zu vermeiden, weist die Verzweigungsziel-Pufferschaltung 40 einen Verzweigungseintrag innerhalb des Verzweigungsziel-Puffer-Cache-Speichers 41 für sämtliche die Verzweigung vornehmenden Verzweigungsinstruk­ tionen am Schritt 307 zu. Am Schritt 305 gemäß Fig. 12 testet die Verzweigungsziel-Pufferschaltung 40, ob die Verzweigungs­ instruktion die Verzweigung vornahm. Wenn die Verzweigung vorgenommen wurde, weist die Verzweigungsziel-Pufferschaltung 40 einen Verzweigungseintrag für die Verzweigungsinstruktion in dem Verzweigungsziel-Puffer-Cache-Speicher 41 zu.
Um einen Verzweigungseintrag aus dem ausgewählten Satz in dem Verzweigungsziel-Puffer-Cache-Speicher 41 auszuwählen, verwendet die Verzweigungsziel-Pufferschaltung 40 ein Paar von Pseudo-Am-Längsten-Unersetzt-Bits 420 (PLRR-Bits - Pseudo-Least Recently Replaced Bits) in dem Satz des Verzwei­ gungsziel-Puffer-Cache-Speichers 41. Die Pseudo-Am-Längsten- Unersetzt(PLRR)-Bits 420 zeigen an, welcher Verzweigungsein­ trag in dem Satz am längsten unersetzt geblieben ist. Um den Verzweigungseintrag in dem ausgewählten Satz auszuwählen, liest die Verzweigungsziel-Pufferschaltung 40 die PLRR-Bits 420 des ausgewählten Satzes und folgt dann der Vorgehensweise der Verzweigungseintragszuweisung, die in Fig. 14 dargestellt ist. Die Vorgehensweise der Verzweigungseintragszuweisung versucht, die Zerstörung vorhandener Verzweigungseinträge für Verzweigungsinstruktionen in dem aktuellen Speicherblock zu verhindern.
Am Schritt 501 setzt die Verzweigungsziel-Pufferschaltung 40 einen Zähler auf Null. Am Schritt 503 testet die Verzwei­ gungsziel-Pufferschaltung 40 den Verzweigungseintrag, um nachzusehen, ob sein Zerhackungs-Tag-Feld 401 gleich dem Zer­ hackungs-Tag der zugewiesenen Verzweigungsinstruktion ist. Wenn die zwei Zerhackungs-Tags nicht übereinstimmen, setzt die Verzweigungsziel-Pufferschaltung 40 die Verarbeitung am Schritt 505 fort, wo sie diesen Verzweigungseintrag ersetzt. Nach dem Ersetzen des Verzweigungseintrags inkrementiert die Verzweigungsziel-Pufferschaltung 40 die Pseudo-Am-Längsten- Unersetzt(PLRR)-Bits 420 am Schritt 507 und schreibt die in­ krementierten Pseudo-Am-Längsten-Unersetzt (PLRR)-Bits in den Satz zurück.
Wenn die zwei Zerhackungs-Tags übereinstimmen, fährt die Verzweigungsziel-Pufferschaltung 40 am Schritt 511 fort. Am Schritt 511 testet die Verzweigungsziel-Pufferschaltung 40 den Zähler, um nachzusehen, ob sämtliche vier Verzweigungs­ einträge getestet worden sind. Wenn sämtliche vier Verzwei­ gungseinträge getestet worden sind, dann setzt die Verzwei­ gungsziel-Pufferschaltung 40 die Verarbeitung am Schritt 505 fort. Am Schritt 505 ersetzt sie den Verzweigungseintrag, auf den durch die ursprünglich aus dem Verzweigungssatz ausgele­ senen Pseudo-Am-Längsten-Unersetzt (PLRR)-Bits 420 gezeigt wird. Es wird wieder auf Schritt 511 Bezug genommen. Wenn sämtliche vier Verzweigungseinträge noch nicht getestet wor­ den sind, setzt die Verzweigungsziel-Pufferschaltung 40 die Verarbeitung am Schritt 513 fort, wo der Zähler und die Pseudo-Am-Längsten-Unersetzt (PLRR)-Bits inkrementiert werden. Nach dem Schritt 513 kehrt die Verzweigungsziel-Pufferschal­ tung 40 zu dem Schritt 503 zurück, um den nächsten Verzwei­ gungseintrag zu testen.
Nachdem ein Verzweigungseintrag in dem Verzweigungsziel- Puffer-Cache-Speicher 41 ausgewählt worden ist, setzt die Verzweigungsziel-Pufferschaltung 40 die Verarbeitung mit dem Füllen der Datenfelder des ausgewählten Verzweigungseintrags fort.
Wenn die Verzweigungsinstruktion die Verzweigung vornahm, setzt die Verzweigungsziel-Pufferschaltung 40 das Feld 404 der wahren Verzweigungsgeschichte auf "1011". Anderenfalls, wenn die Verzweigung nicht vorgenommen wurde, setzt die Ver­ zweigungsziel-Pufferschaltung 40 die wahre Geschichte auf "0100".
Das Spekulationsbit 406 wird zurückgesetzt, was anzeigt, daß keine spekulative Geschichte für den Verzweigungseintrag mehr existiert. Das Feld 405 der spekulativen Geschichte wird während der Verzweigungseintragszuweisung nicht modifiziert, da es später gesetzt werden wird, wenn die spekulative Ge­ schichte erzeugt wird.
Das Zerhackungs-Tag-Feld 401 und das Block-Offset-Feld 402 werden mit Hilfe der Adresse gesetzt, die auf das letzte Byte der Verzweigungsinstruktion zeigt. Das Zerhackungs-Tag- Feld 401 wird gesetzt, indem die höchsten 21 Bits der auf das letzte Byte der Verzweigungsinstruktion zeigenden Adresse durch den ausgewählten Zerhackungsmechanismus laufen. Das Block-Offset-Feld 402 wird mit Hilfe der niedrigsten vier Bits der Verzweigungsadresse gesetzt.
Die Verzweigungsziel-Pufferschaltung 40 setzt das Ver­ zweigungsart-Feld 403 mit Hilfe der von der Verzweigungsaus­ führungseinheit 92 empfangenen Verzweigungsartinformationen. Die Verzweigungsziel-Pufferschaltung 40 setzt das Verzwei­ gungsziel-Adreßfeld 408 mit Hilfe der Zieladresse der Ver­ zweigungsinstruktion, wie sie von der Verzweigungsausfüh­ rungseinheit 92 berechnet wurde.
Schließlich wird das Gült 03024 00070 552 001000280000000200012000285910291300040 0002004447238 00004 02905ig-Bit 407 für den Verzweigungs­ eintrag gesetzt, um anzuzeigen, daß der Verzweigungseintrag gültige Informationen über eine Verzweigungsinformation ent­ hält. Zukünftige Auftreten der Verzweigungsinstruktion wird von der Verzweigungsziel-Pufferschaltung 40 vorhergesagt.
Zurücknehmen der Verzweigungseinträge in dem Verzwei­ gungsziel-Puffer-Cache-Speicher
Der Verzweigungsadreßberechner 50 gemäß Fig. 2 überprüft die Existenz sämtlicher von der Verzweigungsziel-Pufferschal­ tung 40 vorhergesagter Verzweigungsinstruktionen. Einträge in dem Verzweigungsziel-Puffer-Cache-Speicher 41, die nicht mehr auf gültige Verzweigungsinstruktionen zeigen, können die Ver­ zweigungsziel-Pufferschaltung 40 veranlassen, nicht existente Verzweigungsinstruktionen vorherzusagen.
Es gibt verschiedene Gründe, aus denen ein Verzweigungs­ eintrag in dem Verzweigungsziel-Puffer-Cache-Speicher 41 vielleicht nicht länger auf eine gültige Verzweigungsinstruk­ tion zeigt. Ein sich selbst modifizierender Code kann eine Verzweigungsinstruktion derart verändern, daß der Eintrag in dem Verzweigungsziel-Puffer-Cache-Speicher 41 nicht mehr richtig ist. Darüber hinaus verursacht das zerhackte Adreß- Tag-Feld 401 eine Verfremdung (aliasing), so daß mehr als ei­ ne Adresse in jedem Verzweigungseintrag abgebildet wird.
Wenn der Verzweigungsadreßberechner 50 feststellt, daß die Verzweigungsziel-Pufferschaltung 40 eine Verzweigungsvor­ hersage für eine nicht existente Verzweigungsinstruktion macht, sollte der unrichtige Verzweigungseintrag in dem Ver­ zweigungsziel-Puffer-Cache-Speicher 41 zurückgenommen (deallocated) werden. Wenn der Verzweigungsadreßberechner 50 eine Verzweigungsvorhersage für eine nicht existente Verzwei­ gungsinstruktion erfaßt, sendet er der Verzweigungsziel-Puf­ ferschaltung 40 einen Zeiger auf das erste Byte der nicht­ verzweigenden Instruktion. Um den fehlerhaften Verzweigungs­ eintrag zurückzunehmen, nimmt die Verzweigungsziel-Puffer­ schaltung 40 sämtliche Verzweigungseinträge in dem von dem weitergeleiteten Zeiger definierten Satz und dem folgenden Satz von Verzweigungseinträgen zurück. Sowohl der von dem weitergeleiteten Zeiger definierte Satz als auch der folgende Satz von Verzweigungseinträgen muß zurückgenommen werden, da die Verzweigungsinstruktionen, welche von der Adresse des letzten Bytes in den Verzweigungsziel-Puffer-Cache-Speicher 41 abgelegt wurde, in jedem von den beiden Sätzen von Ver­ zweigungseinträgen vorhanden sein kann. Um Verzweigungsein­ träge in einen Satz zurückzunehmen, setzt die Verzweigungs­ ziel-Pufferschaltung 40 sämtliche Gültig-Bits 407 der Ver­ zweigungseinträge zurück.

Claims (26)

1. Einrichtung zur Vorhersage einer Mehrzahl von Verzwei­ gungsinstruktionen innerhalb eines Stromes von Computerin­ struktionen, gekennzeichnet durch
einen Verzweigungsziel-Puffer-Cache-Speicher (41) mit ei­ ner Mehrzahl von Verzweigungseinträgen (420), die jeweils In­ formationen über eine zugehörige Verzweigungsinstruktion in­ nerhalb des Stroms von Computerinstruktionen speichern; und
eine Verzweigungsziel-Puffersschaltung (40), die einen Instruktionszeiger empfängt, mit dem Instruktionszeiger in dem Verzweigungsziel-Puffer-Cache-Speicher (41) indiziert und auf der Grundlage des Instruktionszeigers nach einer kom­ menden Verzweigungsinstruktion sucht.
2. Einrichtung nach Anspruch 1, dadurch gekennzeichnet, daß der Instruktionszeiger auf einen Speicherblock zeigt und daß die Verzweigungsziel-Pufferschaltung nach einer kommenden Verzweigungsinstruktion in demjenigen Speicherblock sucht, auf den der Instruktionszeiger zeigt.
3. Einrichtung nach Anspruch 1 oder 2, dadurch gekenn­ zeichnet, daß die Mehrzahl von Verzweigungseinträgen in einer Mehrzahl von Sätzen organisiert ist, wobei jeder Satz eine Mehrzahl von Verzweigungseinträgen aufweist.
4. Einrichtung nach einem der Ansprüche 1 bis 3, dadurch gekennzeichnet, daß der Verzweigungsziel-Puffer-Cache-Spei­ cher (41) ein Satz-assoziativer-Cache-Speicher ist.
5. Einrichtung nach Anspruch 3 oder 4, dadurch gekenn­ zeichnet, daß jeder Satz vier Satz-assoziative-Verzweigungs­ einträge aufweist.
6. Einrichtung nach einem der Ansprüche 3 bis 5, dadurch gekennzeichnet, daß jeder Satz eine Verzweigungsmustertabelle aufweist.
7. Einrichtung nach einem der Ansprüche 3 bis 6, dadurch gekennzeichnet, daß jeder Satz einen Satz von Am-Längsten-Un­ ersetzt-Bits (421) aufweist.
8. Einrichtung nach einem der Ansprüche 1 bis 7, dadurch gekennzeichnet, daß jede zugehörige Verzweigungsinstruktion in dem Verzweigungsziel-Puffer-Cache-Speicher (41) mit Hilfe einer Adresse eines letzten Bytes der zugehörigen Verzwei­ gungsinstruktion gespeichert ist.
9. Einrichtung nach einem der Ansprüche 1 bis 8, dadurch gekennzeichnet, daß jeder Verzweigungseintrag (420) in dem Verzweigungsziel-Puffer-Cache-Speicher (41) ein Tag-Feld (401), eine Verzweigungszieladresse (408) und ein Gültig-Bit (407) aufweist.
10. Einrichtung nach Anspruch 9, dadurch gekennzeichnet, daß das Tag-Feld ein komprimiertes Tag-Feld (401) aufweist, das kleiner als eine vollständige Tag-Adresse ist.
11. Einrichtung nach Anspruch 10, dadurch gekennzeichnet, daß das komprimierte Tag-Feld einen Teil der am höchsten be­ werteten Bits der vollständigen Tag-Adresse verkettet mit ei­ nem Teil der am geringsten bewerteten Bits der vollständigen Tag-Adresse aufweist.
12. Einrichtung nach Anspruch 10 oder 11, dadurch gekenn­ zeichnet, daß das komprimierte Tag-Feld einen ersten Teil der am höchsten bewerteten Bits der vollständigen Tag-Adresse, eine Exklusiv-ODER-Kombination eines zweiten Teils der Bits der vollständigen Tag-Adresse und einen dritten Teil der am geringsten bewerteten Bits der vollständigen Tag-Adresse auf­ weist.
13. Einrichtung nach einem der Ansprüche 9 bis 12, da­ durch gekennzeichnet, daß der Verzweigungseintrag (420) in dem Verzweigungsziel-Puffer-Cache-Speicher (41) ein Verzwei­ gungsart-Feld (403) aufweist.
14. Einrichtung nach einem der Ansprüche 1 bis 13, da­ durch gekennzeichnet, daß der Verzweigungseintrag (420) in dem Verzweigungsziel-Puffer-Cache-Speicher (41) ein Block- Offset-Feld (402) aufweist, das ein Offset eines letzten Bytes der zugehörigen Verzweigungsinstruktion identifiziert.
15. Einrichtung nach einem der Ansprüche 1 bis 14, da­ durch gekennzeichnet, daß der Verzweigungseintrag (420) in dem Verzweigungsziel-Puffer-Cache-Speicher (41) ein Verzwei­ gungsgeschichte-Feld (404, 405) aufweist.
16. Einrichtung nach einem der Ansprüche 1 bis 15, da­ durch gekennzeichnet, daß der Verzweigungseintrag (420) in dem Verzweigungsziel-Puffer-Cache-Speicher (41) ein Spekula­ tionsbit (406) und ein Feld einer spekulativen Verzweigungs­ geschichte (405) aufweist.
17. Verzweigungsziel-Puffer-Cache-Speicher (40) mit einer Mehrzahl von Verzweigungseinträgen (420), wobei jeder Ver­ zweigungseintrag Informationen über eine zugeordnete Ver­ zweigungsinstruktion innerhalb eines Stroms von Computerin­ struktionen speichert und wobei die Mehrzahl von Verzwei­ gungseinträgen durch eine Adresse eines letzten Bytes der zu­ geordneten Verzweigungsinstruktion adressiert werden kann.
18. Verfahren zum Aktualisieren eines Verzweigungsziel- Puffers, dadurch gekennzeichnet,
daß eine Verzweigungsinstruktion entschieden wird, um ein endgültiges Verzweigungsergebnis und eine endgültige Verzwei­ gungszieladresse der Verzweigungsinstruktion zu bestimmen;
daß ein der Verzweigungsinstruktion zugeordneter Verzwei­ gungseintrag aus einem Satz von Verzweigungseinträgen in dem Verzweigungsziel-Puffer gefunden wird;
daß eine Verzweigungszieladresse in dem der Verzweigungs­ instruktion zugeordneten Verzweigungseintrag mit Hilfe der endgültigen Verzweigungszieladresse aktualisiert wird;
daß eine dem Satz von Verzweigungseinträgen in dem Ver­ zweigungsziel-Puffer zugeordnete Verzweigungsmustertabelle aktualisiert wird, wenn die Verzweigungsinstruktion eine be­ dingte Verzweigungsinstruktion ist; und
daß eine dem Verzweigungseintrag zugeordnete Verzwei­ gungsgeschichte aktualisiert wird, wenn die Verzweigungsin­ struktion eine bedingte Verzweigungsinstruktion ist.
19. Verfahren nach Anspruch 18, dadurch gekennzeichnet, daß die Aktualisierungsschritte abgebrochen werden können.
20. Verfahren nach Anspruch 18 oder 19, dadurch gekenn­ zeichnet, daß die Aktualisierungsschritte abgebrochen werden, wenn eine frühere Verzweigungsinstruktion falsch vorhergesagt wurde.
21. Verfahren nach einem der Ansprüche 18 bis 20, dadurch gekennzeichnet, daß beim Finden eines der Verzweigungsin­ struktion zugeordneten Verzweigungseintrags in dem Verzwei­ gungsziel-Puffer mit Hilfe einer Adresse eines letzten Bytes der Verzweigungsinstruktion indiziert wird.
22. Verfahren nach Anspruch 20 oder 21, dadurch gekenn­ zeichnet, daß beim Finden eines der Verzweigungsinstruktion zugeordneten Verzweigungseintrags eine Übereinstimmung eines Teils der am höchsten bewerteten Bits von der Adresse des letzten Bytes der Verzweigungsinstruktion mit einem Tag-Feld in dem Verzweigungseintrag festgestellt wird.
23. Verfahren nach Anspruch 22, dadurch gekennzeichnet,
daß zum Feststellen der Übereinstimmung
eine zerhackte Version des Teils der am höchsten bewerte­ ten Bits von der Adresse des letzten Bytes der Verzweigungs­ instruktion erzeugt wird; und
daß die zerhackte Version mit einem zerhackten Tag-Feld in dem Verzeigungseintrag verglichen wird.
24. Verfahren zum Zuweisen in einem Verzweigungsziel-Puf­ fer, dadurch gekennzeichnet,
daß eine Verzweigungsinstruktion entschieden wird, um ein endgültiges Verzweigungsergebnis und eine endgültige Verzwei­ gungszieladresse für die Verzweigungsinstruktion zu bestim­ men;
daß festgestellt wird, ob die Verzweigungsinstruktion falsch vorhergesagt wurde; und
daß ein Verzweigungseintrag in dem Verzweigungsziel-Puf­ fer zugewiesen wird, wenn die Verzweigungsinstruktion falsch vorhergesagt wurde oder wenn als endgültiges Ergebnis der Verzweigungsinstruktion eine Vornahme der Verzweigung festge­ stellt wurde.
25. Verfahren nach Anspruch 24, dadurch gekennzeichnet, daß beim Feststellen, ob die Verzweigungsinstruktion falsch vorhergesagt wurde, das endgültige Verzweigungsergebnis und die endgültige Verzweigungszieladresse mit einem vorhergesag­ ten Verzweigungsergebnis und einer vorhergesagten Verzwei­ gungszieladresse verglichen werden.
26. Verfahren nach Anspruch 24 oder 25, dadurch gekenn­ zeichnet,
daß der Verzweigungsziel-Puffer in Sätzen von Ver­ zweigungseinträgen organisiert wird, und daß der Schritt des Zuweisens eines Verzweigungseintrags enthält,
daß ein Am-Längsten-Unersetzt-Wert aus einem einem Satz von Verzweigungseinträgen zugeordneten entsprechenden Feld ausgelesen wird;
daß ein Verzweigungseintrag ersetzt wird, auf den von dem Am-Längsten-Unersetzt-Wert gezeigt wird, sofern der Verzwei­ gungseintrag kein übereinstimmendes Tag-Feld aufweist;
daß der Am-Längsten-Unersetzt-Wert inkrementiert wird und der vorhergehende Schritt wiederholt wird, bis sämtliche Ver­ zweigungseinträge geprüft worden sind; und
daß ein Verzweigungseintrag ersetzt wird, auf den von dem Am-Längsten-Unersetzt-Wert gezeigt wird, der ursprünglich aus dem dem Satz von Verzweigungseinträgen zugeordneten entspre­ chenden Feld ausgelesen wurde.
DE4447238A 1994-01-04 1994-12-30 Schaltungsanordnung und Verfahren zum Gewinnen von Informationen zur Verzweigungsvorhersage Expired - Fee Related DE4447238B4 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US08/177,155 US5574871A (en) 1994-01-04 1994-01-04 Method and apparatus for implementing a set-associative branch target buffer
US08/177,155 1994-01-04

Publications (2)

Publication Number Publication Date
DE4447238A1 true DE4447238A1 (de) 1995-07-13
DE4447238B4 DE4447238B4 (de) 2005-08-18

Family

ID=22647420

Family Applications (1)

Application Number Title Priority Date Filing Date
DE4447238A Expired - Fee Related DE4447238B4 (de) 1994-01-04 1994-12-30 Schaltungsanordnung und Verfahren zum Gewinnen von Informationen zur Verzweigungsvorhersage

Country Status (6)

Country Link
US (4) US5574871A (de)
JP (1) JP3548255B2 (de)
DE (1) DE4447238B4 (de)
GB (1) GB2285526B (de)
HK (1) HK1012743A1 (de)
SG (1) SG50456A1 (de)

Families Citing this family (129)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1992006426A1 (en) * 1990-10-09 1992-04-16 Nexgen Microsystems Method and apparatus for parallel decoding of instructions with branch prediction look-up
US5574871A (en) * 1994-01-04 1996-11-12 Intel Corporation Method and apparatus for implementing a set-associative branch target buffer
JP3590427B2 (ja) * 1994-08-30 2004-11-17 株式会社ルネサステクノロジ 先行読出機能付命令キャッシュメモリ
US5968169A (en) * 1995-06-07 1999-10-19 Advanced Micro Devices, Inc. Superscalar microprocessor stack structure for judging validity of predicted subroutine return addresses
GB9521955D0 (en) * 1995-10-26 1996-01-03 Sgs Thomson Microelectronics Cache memory
GB9521980D0 (en) * 1995-10-26 1996-01-03 Sgs Thomson Microelectronics Branch target buffer
GB9521978D0 (en) * 1995-10-26 1996-01-03 Sgs Thomson Microelectronics Computer instruction supply
GB9521977D0 (en) * 1995-10-26 1996-01-03 Sgs Thomson Microelectronics Cache memory
US5881278A (en) * 1995-10-30 1999-03-09 Advanced Micro Devices, Inc. Return address prediction system which adjusts the contents of return stack storage to enable continued prediction after a mispredicted branch
US5864707A (en) 1995-12-11 1999-01-26 Advanced Micro Devices, Inc. Superscalar microprocessor configured to predict return addresses from a return stack storage
US5790822A (en) * 1996-03-21 1998-08-04 Intel Corporation Method and apparatus for providing a re-ordered instruction cache in a pipelined microprocessor
US5842008A (en) * 1996-06-18 1998-11-24 Intel Corporation Method and apparatus for implementing a branch target buffer cache with multiple BTB banks
US6170053B1 (en) * 1996-06-27 2001-01-02 Texas Instruments Incorporated Microprocessor with circuits, systems and methods for responding to branch instructions based on history of prediction accuracy
US5864697A (en) * 1996-06-28 1999-01-26 Texas Instruments Incorporated Microprocessor using combined actual and speculative branch history prediction
US5901307A (en) * 1996-07-22 1999-05-04 International Business Machines Corporation Processor having a selectively configurable branch prediction unit that can access a branch prediction utilizing bits derived from a plurality of sources
US5822575A (en) * 1996-09-12 1998-10-13 Advanced Micro Devices, Inc. Branch prediction storage for storing branch prediction information such that a corresponding tag may be routed with the branch instruction
US5875325A (en) * 1996-09-19 1999-02-23 International Business Machines Corporation Processor having reduced branch history table size through global branch history compression and method of branch prediction utilizing compressed global branch history
US5918044A (en) * 1996-10-31 1999-06-29 International Business Machines Corporation Apparatus and method for instruction fetching using a multi-port instruction cache directory
US5954816A (en) * 1996-11-19 1999-09-21 Advanced Micro Devices, Inc. Branch selector prediction
US5995749A (en) 1996-11-19 1999-11-30 Advanced Micro Devices, Inc. Branch prediction mechanism employing branch selectors to select a branch prediction
US5978906A (en) * 1996-11-19 1999-11-02 Advanced Micro Devices, Inc. Branch selectors associated with byte ranges within an instruction cache for rapidly identifying branch predictions
US6253316B1 (en) 1996-11-19 2001-06-26 Advanced Micro Devices, Inc. Three state branch history using one bit in a branch prediction mechanism
DE69727773T2 (de) * 1996-12-10 2004-12-30 Texas Instruments Inc., Dallas Verbesserte Verzweigungsvorhersage in einem Pipelinemikroprozessor
US6871275B1 (en) * 1996-12-12 2005-03-22 Intel Corporation Microprocessor having a branch predictor using speculative branch registers
US6088793A (en) * 1996-12-30 2000-07-11 Intel Corporation Method and apparatus for branch execution on a multiple-instruction-set-architecture microprocessor
US6108775A (en) * 1996-12-30 2000-08-22 Texas Instruments Incorporated Dynamically loadable pattern history tables in a multi-task microprocessor
TW357318B (en) * 1997-03-18 1999-05-01 Ind Tech Res Inst Branching forecast and reading device for unspecified command length extra-purity pipeline processor
JPH10333908A (ja) * 1997-05-30 1998-12-18 Mitsubishi Electric Corp 分岐予測方法
US6154833A (en) * 1997-08-11 2000-11-28 Intel Corporation System for recovering from a concurrent branch target buffer read with a write allocation by invalidating and then reinstating the instruction pointer
US6101598A (en) * 1997-11-14 2000-08-08 Cirrus Logic, Inc. Methods for debugging a multiprocessor system
US5938761A (en) * 1997-11-24 1999-08-17 Sun Microsystems Method and apparatus for branch target prediction
US5978909A (en) * 1997-11-26 1999-11-02 Intel Corporation System for speculative branch target prediction having a dynamic prediction history buffer and a static prediction history buffer
US6108774A (en) * 1997-12-19 2000-08-22 Advanced Micro Devices, Inc. Branch prediction with added selector bits to increase branch prediction capacity and flexibility with minimal added bits
US6256729B1 (en) * 1998-01-09 2001-07-03 Sun Microsystems, Inc. Method and apparatus for resolving multiple branches
US6289441B1 (en) * 1998-01-09 2001-09-11 Sun Microsystems, Inc. Method and apparatus for performing multiple branch predictions per cycle
US6151671A (en) * 1998-02-20 2000-11-21 Intel Corporation System and method of maintaining and utilizing multiple return stack buffers
US6055630A (en) * 1998-04-20 2000-04-25 Intel Corporation System and method for processing a plurality of branch instructions by a plurality of storage devices and pipeline units
US6081887A (en) * 1998-05-13 2000-06-27 Compaq Computer Corporation System for passing an index value with each prediction in forward direction to enable truth predictor to associate truth value with particular branch instruction
US6493821B1 (en) 1998-06-09 2002-12-10 Intel Corporation Recovery from writeback stage event signal or micro-branch misprediction using instruction sequence number indexed state information table
US6134654A (en) * 1998-09-16 2000-10-17 Sun Microsystems, Inc. Bi-level branch target prediction scheme with fetch address prediction
US6601161B2 (en) 1998-12-30 2003-07-29 Intel Corporation Method and system for branch target prediction using path information
US7275246B1 (en) 1999-01-28 2007-09-25 Ati International Srl Executing programs for a first computer architecture on a computer of a second architecture
US8074055B1 (en) 1999-01-28 2011-12-06 Ati Technologies Ulc Altering data storage conventions of a processor when execution flows from first architecture code to second architecture code
US8065504B2 (en) * 1999-01-28 2011-11-22 Ati International Srl Using on-chip and off-chip look-up tables indexed by instruction address to control instruction execution in a processor
US7111290B1 (en) 1999-01-28 2006-09-19 Ati International Srl Profiling program execution to identify frequently-executed portions and to assist binary translation
US7065633B1 (en) 1999-01-28 2006-06-20 Ati International Srl System for delivering exception raised in first architecture to operating system coded in second architecture in dual architecture CPU
US8127121B2 (en) 1999-01-28 2012-02-28 Ati Technologies Ulc Apparatus for executing programs for a first computer architechture on a computer of a second architechture
US6954923B1 (en) 1999-01-28 2005-10-11 Ati International Srl Recording classification of instructions executed by a computer
US7941647B2 (en) 1999-01-28 2011-05-10 Ati Technologies Ulc Computer for executing two instruction sets and adds a macroinstruction end marker for performing iterations after loop termination
US6978462B1 (en) * 1999-01-28 2005-12-20 Ati International Srl Profiling execution of a sequence of events occuring during a profiled execution interval that matches time-independent selection criteria of events to be profiled
JP3526773B2 (ja) * 1999-02-26 2004-05-17 松下電器産業株式会社 マルチプロセッサ装置およびその制御方法
US6233676B1 (en) * 1999-03-18 2001-05-15 Ip-First, L.L.C. Apparatus and method for fast forward branch
US6526503B1 (en) 1999-11-04 2003-02-25 International Business Machines Corporation Apparatus and method for accessing a memory device during speculative instruction branching
US6633974B1 (en) 1999-11-04 2003-10-14 International Business Machines Corporation Apparatus and method for controlling link stack corruption during speculative instruction branching using multiple stacks
US6502188B1 (en) 1999-11-16 2002-12-31 Advanced Micro Devices, Inc. Dynamic classification of conditional branches in global history branch prediction
US6934832B1 (en) 2000-01-18 2005-08-23 Ati International Srl Exception mechanism for a computer
US6470438B1 (en) * 2000-02-22 2002-10-22 Hewlett-Packard Company Methods and apparatus for reducing false hits in a non-tagged, n-way cache
US6918028B1 (en) * 2000-03-28 2005-07-12 Analog Devices, Inc. Pipelined processor including a loosely coupled side pipe
US7496734B1 (en) * 2000-04-28 2009-02-24 Stmicroelectronics, Inc. System and method for handling register dependency in a stack-based pipelined processor
US6910124B1 (en) 2000-05-02 2005-06-21 International Business Machines Corporation Apparatus and method for recovering a link stack from mis-speculation
JP3729064B2 (ja) * 2000-11-29 2005-12-21 日本電気株式会社 データ依存関係検出装置
US6859874B2 (en) * 2001-09-24 2005-02-22 Broadcom Corporation Method for identifying basic blocks with conditional delay slot instructions
US6785804B2 (en) * 2001-05-17 2004-08-31 Broadcom Corporation Use of tags to cancel a conditional branch delay slot instruction
US6883090B2 (en) * 2001-05-17 2005-04-19 Broadcom Corporation Method for cancelling conditional delay slot instructions
US6934796B1 (en) * 2002-02-01 2005-08-23 Netlogic Microsystems, Inc. Content addressable memory with hashing function
US6697276B1 (en) 2002-02-01 2004-02-24 Netlogic Microsystems, Inc. Content addressable memory device
US7382637B1 (en) 2002-02-01 2008-06-03 Netlogic Microsystems, Inc. Block-writable content addressable memory device
US6954849B2 (en) * 2002-02-21 2005-10-11 Intel Corporation Method and system to use and maintain a return buffer
KR100468618B1 (ko) * 2002-03-28 2005-01-31 매그나칩 반도체 유한회사 가변 길이 명령어를 갖는 수퍼스칼라 프로세서에 있어서의분기 예측 장치
US7082520B2 (en) * 2002-05-09 2006-07-25 International Business Machines Corporation Branch prediction utilizing both a branch target buffer and a multiple target table
US20030225992A1 (en) * 2002-05-29 2003-12-04 Balakrishna Venkatrao Method and system for compression of address tags in memory structures
JP3851235B2 (ja) 2002-06-28 2006-11-29 富士通株式会社 分岐予測装置および分岐予測方法
FR2849226B1 (fr) * 2002-12-20 2005-12-02 Oberthur Card Syst Sa Procede et dispositif de securisation de l'execution d'un programme informatique.
US6925928B2 (en) * 2003-09-18 2005-08-09 Anthony Fox Trash compactor for fast food restaurant waste
KR100591769B1 (ko) * 2004-07-16 2006-06-26 삼성전자주식회사 분기 예측 정보를 가지는 분기 타겟 버퍼
US7752426B2 (en) * 2004-08-30 2010-07-06 Texas Instruments Incorporated Processes, circuits, devices, and systems for branch prediction and other processor improvements
US7426631B2 (en) * 2005-02-02 2008-09-16 International Business Machines Corporation Methods and systems for storing branch information in an address table of a processor
US7437543B2 (en) * 2005-04-19 2008-10-14 International Business Machines Corporation Reducing the fetch time of target instructions of a predicted taken branch instruction
US20070061555A1 (en) * 2005-09-15 2007-03-15 St Clair Michael Call return tracking technique
WO2007099604A1 (ja) * 2006-02-28 2007-09-07 Fujitsu Limited コンピュータの分岐予測装置
JP5136405B2 (ja) * 2006-02-28 2013-02-06 富士通株式会社 演算処理装置及び演算処理装置の制御方法
US7574586B2 (en) * 2006-05-16 2009-08-11 Texas Instruments Incorporated Efficient transfer of branch information
US7827392B2 (en) * 2006-06-05 2010-11-02 Qualcomm Incorporated Sliding-window, block-based branch target address cache
US9146745B2 (en) * 2006-06-29 2015-09-29 Intel Corporation Method and apparatus for partitioned pipelined execution of multiple execution threads
US8261130B2 (en) * 2007-03-02 2012-09-04 Infineon Technologies Ag Program code trace signature
US7664941B2 (en) * 2007-06-28 2010-02-16 Faraday Technology Corp. Branch prediction methods and devices capable of predicting first taken branch instruction within plurality of fetched instructions
US8909907B2 (en) * 2008-02-12 2014-12-09 International Business Machines Corporation Reducing branch prediction latency using a branch target buffer with a most recently used column prediction
US7913068B2 (en) * 2008-02-21 2011-03-22 International Business Machines Corporation System and method for providing asynchronous dynamic millicode entry prediction
US7873818B2 (en) * 2008-02-22 2011-01-18 International Business Machines Corporation System and method for search area confined branch prediction
US8181005B2 (en) * 2008-09-05 2012-05-15 Advanced Micro Devices, Inc. Hybrid branch prediction device with sparse and dense prediction caches
US20100191943A1 (en) * 2009-01-26 2010-07-29 Agere Systems Inc. Coordination between a branch-target-buffer circuit and an instruction cache
CN101840330B (zh) * 2009-07-15 2014-02-12 威盛电子股份有限公司 一种微处理器和其信息储存方法
US8281110B2 (en) * 2009-07-15 2012-10-02 Via Technologies, Inc. Out-of-order microprocessor with separate branch information circular queue table tagged by branch instructions in reorder buffer to reduce unnecessary space in buffer
CN102117198B (zh) * 2009-12-31 2015-07-15 上海芯豪微电子有限公司 一种分支处理方法
US20140019722A1 (en) * 2011-03-31 2014-01-16 Renesas Electronics Corporation Processor and instruction processing method of processor
US8458447B2 (en) * 2011-06-17 2013-06-04 Freescale Semiconductor, Inc. Branch target buffer addressing in a data processor
US9354886B2 (en) * 2011-11-28 2016-05-31 Apple Inc. Maintaining the integrity of an execution return address stack
US9235419B2 (en) 2012-06-11 2016-01-12 International Business Machines Corporation Branch target buffer preload table
US9229723B2 (en) 2012-06-11 2016-01-05 International Business Machines Corporation Global weak pattern history table filtering
US9280351B2 (en) 2012-06-15 2016-03-08 International Business Machines Corporation Second-level branch target buffer bulk transfer filtering
US9430241B2 (en) 2012-06-15 2016-08-30 International Business Machines Corporation Semi-exclusive second-level branch target buffer
US9298465B2 (en) 2012-06-15 2016-03-29 International Business Machines Corporation Asynchronous lookahead hierarchical branch prediction
US20140025894A1 (en) * 2012-07-18 2014-01-23 Electronics And Telecommunications Research Institute Processor using branch instruction execution cache and method of operating the same
US9395984B2 (en) 2012-09-12 2016-07-19 Qualcomm Incorporated Swapping branch direction history(ies) in response to a branch prediction table swap instruction(s), and related systems and methods
US9645824B2 (en) * 2012-10-31 2017-05-09 Arm Limited Branch target address cache using hashed fetch addresses
JP6179093B2 (ja) * 2012-12-03 2017-08-16 富士通株式会社 演算処理装置、演算処理方法
US9405544B2 (en) 2013-05-14 2016-08-02 Apple Inc. Next fetch predictor return address stack
US10127044B2 (en) * 2013-10-25 2018-11-13 Advanced Micro Devices, Inc. Bandwidth increase in branch prediction unit and level 1 instruction cache
US9563430B2 (en) 2014-03-19 2017-02-07 International Business Machines Corporation Dynamic thread sharing in branch prediction structures
US9690587B2 (en) 2014-04-08 2017-06-27 International Business Machines Corporation Variable updates of branch prediction states
GB2528676B (en) * 2014-07-25 2016-10-26 Imagination Tech Ltd Conditional Branch Prediction Using A Long History
US10534611B2 (en) 2014-07-31 2020-01-14 International Business Machines Corporation Branch prediction using multi-way pattern history table (PHT) and global path vector (GPV)
US9619385B2 (en) 2015-02-25 2017-04-11 International Business Machines Corporation Single thread cache miss rate estimation
US10642615B2 (en) * 2018-04-27 2020-05-05 International Business Machines Corporation System and method for dynamic accuracy and threshold control for branch classification
GB2539037B (en) * 2015-06-05 2020-11-04 Advanced Risc Mach Ltd Apparatus having processing pipeline with first and second execution circuitry, and method
US9442726B1 (en) 2015-12-15 2016-09-13 International Business Machines Corporation Perceptron branch predictor with virtualized weights
US10908902B2 (en) 2016-05-26 2021-02-02 International Business Machines Corporation Distance based branch prediction and detection of potential call and potential return instructions
US10430195B2 (en) 2016-06-27 2019-10-01 International Business Machines Corporation Stream based branch prediction index accelerator with power prediction
US10423419B2 (en) 2016-06-27 2019-09-24 International Business Machines Corporation Stream based branch prediction index accelerator for multiple stream exits
US10592248B2 (en) * 2016-08-30 2020-03-17 Advanced Micro Devices, Inc. Branch target buffer compression
US10747539B1 (en) 2016-11-14 2020-08-18 Apple Inc. Scan-on-fill next fetch target prediction
US10394559B2 (en) 2016-12-13 2019-08-27 International Business Machines Corporation Branch predictor search qualification using stream length prediction
US10732979B2 (en) 2018-06-18 2020-08-04 Advanced Micro Devices, Inc. Selectively performing ahead branch prediction based on types of branch instructions
GB2577051B (en) * 2018-09-11 2021-03-03 Advanced Risc Mach Ltd Branch prediction using branch target buffer
GB2578573B (en) * 2018-10-30 2021-09-08 Advanced Risc Mach Ltd Technique for maintaining data values in a prediction register that are used to predict whether a branch represented by a branch instruction will be taken.
US11321095B2 (en) * 2018-12-14 2022-05-03 Apple Inc. Indirect branch predictor security protection
US20220121446A1 (en) * 2020-10-15 2022-04-21 Centaur Technology, Inc. Quick predictor override
US20230214222A1 (en) * 2021-12-30 2023-07-06 Arm Limited Methods and apparatus for storing instruction information
CN116719561B (zh) * 2023-08-09 2023-10-31 芯砺智能科技(上海)有限公司 一种条件分支指令的处理系统和方法

Family Cites Families (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0109655B1 (de) * 1982-11-17 1991-07-24 Nec Corporation Anordnung zum Vorabholen von Befehlen mit Vorhersage einer Verzweigungszieladresse
US4679141A (en) * 1985-04-29 1987-07-07 International Business Machines Corporation Pageable branch history table
US4763245A (en) * 1985-10-30 1988-08-09 International Business Machines Corporation Branch prediction mechanism in which a branch history table is updated using an operand sensitive branch table
DE3785897T2 (de) * 1986-02-28 1993-09-30 Nec Corp Steuervorrichtung zum vorabruf von befehlen.
JPS6393038A (ja) * 1986-10-07 1988-04-23 Mitsubishi Electric Corp 計算機
US4894772A (en) * 1987-07-31 1990-01-16 Prime Computer, Inc. Method and apparatus for qualifying branch cache entries
US4860197A (en) * 1987-07-31 1989-08-22 Prime Computer, Inc. Branch cache system with instruction boundary determination independent of parcel boundary
US5142634A (en) * 1989-02-03 1992-08-25 Digital Equipment Corporation Branch prediction
US5210831A (en) * 1989-10-30 1993-05-11 International Business Machines Corporation Methods and apparatus for insulating a branch prediction mechanism from data dependent branch table updates that result from variable test operand locations
US5093778A (en) * 1990-02-26 1992-03-03 Nexgen Microsystems Integrated single structure branch prediction cache
US5283873A (en) * 1990-06-29 1994-02-01 Digital Equipment Corporation Next line prediction apparatus for a pipelined computed system
US5265213A (en) * 1990-12-10 1993-11-23 Intel Corporation Pipeline system for executing predicted branch target instruction in a cycle concurrently with the execution of branch instruction
US5414822A (en) * 1991-04-05 1995-05-09 Kabushiki Kaisha Toshiba Method and apparatus for branch prediction using branch prediction table with improved branch prediction effectiveness
US5333283A (en) * 1991-10-29 1994-07-26 International Business Machines Corporation Case block table for predicting the outcome of blocks of conditional branches having a common operand
AU3776793A (en) * 1992-02-27 1993-09-13 Intel Corporation Dynamic flow instruction cache memory
US5423011A (en) * 1992-06-11 1995-06-06 International Business Machines Corporation Apparatus for initializing branch prediction information
JP2614686B2 (ja) * 1992-06-30 1997-05-28 住友軽金属工業株式会社 形状凍結性及び塗装焼付硬化性に優れた成形加工用アルミニウム合金の製造方法
US5367703A (en) * 1993-01-08 1994-11-22 International Business Machines Corporation Method and system for enhanced branch history prediction accuracy in a superscalar processor system
KR100310581B1 (ko) * 1993-05-14 2001-12-17 피터 엔. 데트킨 분기목표버퍼의추측기록메카니즘
US5577217A (en) * 1993-05-14 1996-11-19 Intel Corporation Method and apparatus for a branch target buffer with shared branch pattern tables for associated branch predictions
US5454117A (en) * 1993-08-25 1995-09-26 Nexgen, Inc. Configurable branch prediction for a processor performing speculative execution
US5604877A (en) * 1994-01-04 1997-02-18 Intel Corporation Method and apparatus for resolving return from subroutine instructions in a computer processor
US5574871A (en) * 1994-01-04 1996-11-12 Intel Corporation Method and apparatus for implementing a set-associative branch target buffer
JP3494484B2 (ja) * 1994-10-12 2004-02-09 株式会社ルネサステクノロジ 命令処理装置
JP3494736B2 (ja) * 1995-02-27 2004-02-09 株式会社ルネサステクノロジ 分岐先バッファを用いた分岐予測システム
US5764946A (en) * 1995-04-12 1998-06-09 Advanced Micro Devices Superscalar microprocessor employing a way prediction unit to predict the way of an instruction fetch address and to concurrently provide a branch prediction address corresponding to the fetch address
US5860104A (en) * 1995-08-31 1999-01-12 Advanced Micro Devices, Inc. Data cache which speculatively updates a predicted data cache storage location with store data and subsequently corrects mispredicted updates
US5842008A (en) * 1996-06-18 1998-11-24 Intel Corporation Method and apparatus for implementing a branch target buffer cache with multiple BTB banks
US5774710A (en) * 1996-09-19 1998-06-30 Advanced Micro Devices, Inc. Cache line branch prediction scheme that shares among sets of a set associative cache

Also Published As

Publication number Publication date
DE4447238B4 (de) 2005-08-18
GB9425726D0 (en) 1995-02-22
JP3548255B2 (ja) 2004-07-28
US5944817A (en) 1999-08-31
GB2285526A (en) 1995-07-12
JPH07210383A (ja) 1995-08-11
GB2285526B (en) 1998-11-18
HK1012743A1 (en) 1999-08-06
US5903751A (en) 1999-05-11
US5706492A (en) 1998-01-06
US5574871A (en) 1996-11-12
SG50456A1 (en) 1998-07-20

Similar Documents

Publication Publication Date Title
DE4447238B4 (de) Schaltungsanordnung und Verfahren zum Gewinnen von Informationen zur Verzweigungsvorhersage
DE69433339T2 (de) Lade-/Speicherfunktionseinheiten und Datencachespeicher für Mikroprozessoren
DE69932066T2 (de) Mechanismus zur "store-to-load forwarding"
DE69534148T2 (de) Rechnersystem zur Ausführung von Verzweigungsbefehlen
DE112004002848B4 (de) Mikroprozessor und Verfahren zum Verifizieren einer Speicherdatei in einem derartigen Mikroprozessor
DE19983860B4 (de) Ein Verfahren und eine Einrichtung zur verbesserten Prädikatvorhersage
DE69434728T2 (de) Synchronisationssystem und verfahren in einem datencachesystem mit aufgeteiltem pegel
DE69835100T2 (de) Prozessor konfiguriert um vorausschauende resultate von zusammengefassten übertragungs-, vergleichs- und einfachen arithmetischen befehlen zu produzieren
DE69724771T2 (de) Zentralprozessoreinheit mit x86 und dsp kern und einem dsp funktions-dekoder zum abbilden von x 86-befehlen auf dsp-befehle
DE19781850B4 (de) Mikroprozessor zum spekulativen Ausführen von Befehlen aus mehreren von einem Verzweigungsbefehl angezeigten Befehlsströmen, Verfahren und Computersystem mit Mikroprozessor
DE69636416T2 (de) Mikroprozessor ausgelegt zum erkennen eines unterprogramm-aufrufs einer dsp-routine und zum ansteuern eines dsp, diese routine auszuführen
DE69434669T2 (de) Spekulative Befehlswarteschlange für Befehle mit variabler Byteslänge
DE69233313T2 (de) Hochleistungsarchitektur für RISC-Mikroprozessor
DE69727773T2 (de) Verbesserte Verzweigungsvorhersage in einem Pipelinemikroprozessor
DE69929936T2 (de) Verfahren und Vorrichtung zum Abrufen von nicht-angrenzenden Befehlen in einem Datenverarbeitungssystem
DE69738188T2 (de) Verfahren und apparat für eine erhöhte genauigkeit bei der verzweigungsvorhersage in einem superskalaren mirkroprozessor
DE60025028T2 (de) Speicherpuffer, der daten, basierend auf index und freiwilliger weisebemusterung überträgt
DE60203612T2 (de) Datenverarbeitung mit mehrfachbefehlssätzen
DE69836902T2 (de) Auf variable instruktionen eingestellter computer
DE60005860T2 (de) Ablaufsteuerung zum ausgeben und wiederausgeben von ketten abhängiger befehle
DE69633474T2 (de) Adressierungsverfahren zur nicht-sequentiellen Ausführung von Ladebefehlen hinsichtlich Speicherungsbefehlen
DE102004013676A1 (de) Schleifenbetrieb mit null Overhead in einem Mikroprozessor mit Anweisungspuffer
DE69734403T2 (de) Verfahren im bezug auf die behandlung von konditionellen sprüngen in einer multietagen-pipeline-struktur
DE4335475A1 (de) Datenverarbeitungseinrichtung mit Cache-Speicher
DE4301417A1 (de)

Legal Events

Date Code Title Description
8110 Request for examination paragraph 44
8125 Change of the main classification

Ipc: G06F 9/38

8364 No opposition during term of opposition
R119 Application deemed withdrawn, or ip right lapsed, due to non-payment of renewal fee

Effective date: 20110701