DE102012216592A1 - Präfix-Computeranweisung zur Erweiterung der Anweisungsfunktionalität - Google Patents

Präfix-Computeranweisung zur Erweiterung der Anweisungsfunktionalität Download PDF

Info

Publication number
DE102012216592A1
DE102012216592A1 DE102012216592A DE102012216592A DE102012216592A1 DE 102012216592 A1 DE102012216592 A1 DE 102012216592A1 DE 102012216592 A DE102012216592 A DE 102012216592A DE 102012216592 A DE102012216592 A DE 102012216592A DE 102012216592 A1 DE102012216592 A1 DE 102012216592A1
Authority
DE
Germany
Prior art keywords
instruction
register
value
registers
executing
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.)
Ceased
Application number
DE102012216592A
Other languages
English (en)
Inventor
Michael K. Gschwind
Valentina Salapura
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.)
International Business Machines Corp
Original Assignee
International Business Machines 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 International Business Machines Corp filed Critical International Business Machines Corp
Publication of DE102012216592A1 publication Critical patent/DE102012216592A1/de
Ceased legal-status Critical Current

Links

Images

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/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30185Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/3826Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • G06F9/384Register renaming

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

Eine Präfixanweisung wird ausgeführt und leitet Operanden an eine nächste Anweisung weiter, ohne die Operanden in einer architekturdefinierten Ressource zu speichern, so dass die Ausführung der nächsten Anweisung die von der Präfixanweisung bereitgestellten Operanden verwendet, um eine Operation durchzuführen, wobei die Operanden ein Direktfeld der Präfixanweisung oder ein Zielregister der Ausführung der Präfixanweisung sein können.

Description

  • GEBIET
  • Die vorliegende Erfindung betrifft das Gebiet der Computerprozessoren und insbesondere das Optimieren von Anweisungen für die Ausführung während der Anweisungs-Decodierzeit in einem Prozessor.
  • HINTERGRUND
  • US-Patentanmeldung Nr. 2011/0087865 ”Intermediate Register Mapper”, veröffentlicht am 14.4.2011 durch Barrick et al. und durch Verweis hierin einbezogen, erläutert ”ein Verfahren, einen Prozessor und ein Computerprogramm-Produkt, welche eine temporäre Registerzuordnungsfunktion in einem Registerumbenennungs-Mechanismus verwenden. Eine Suche in den logischen Registern ermittelt, ob bei einem mit der abgefertigten Anweisung verknüpften logischen Register ein Treffer aufgetreten ist. In dieser Hinsicht durchläuft die Suche in den logischen Registern mindestens eine Registerzuordnungsfunktion aus einer Gruppe von Registerzuordnungsfunktionen, die eine Zuordnungsfunktion für architekturdefinierte Register, eine vereinheitlichte Hauptzuordnungsfunktion und eine temporäre Registerzuordnungsfunktion beinhaltet. Ein einzelner Treffer beim logischen Register wird aus der Gruppe von Registerzuordnungsfunktionen ausgewählt. Wenn eine Anweisung mit einem Zuordnungsfunktions-Eintrag in der vereinheitlichten Hauptzuordnungsfunktion beendet, aber nicht abgeschlossen ist, wird der Zuordnungsinhalt des Registerzuordnungsfunktions-Eintrags in der vereinheitlichten Hauptzuordnungsfunktion zur temporären Registerzuordnungsfunktion verschoben und wird der Eintrag der vereinheitlichten Registerzuordnungsfunktion freigegeben, was eine Anzahl von für die Wiederverwendung verfügbaren Einträgen der vereinheitlichten Hauptzuordnungsfunktion erhöht.”
  • Die am 2. April 1998 eingereichte US-Patentschrift Nr. 6 314 511 ”Mechanism for freeing registers on processors that perform dynamic out-of-order execution of instructions using renaming registers” von Levy et al., durch Verweis hierin einbezogen, erläutert das ”Freigeben von Umbenennungsregistern, die architekturdefinierten Registern zugeordnet wurden, bevor eine andere Anweisung das architekturdefinierte Register neu definierte. Umbenennungsregister werden von einem Prozessor verwendet, um Anweisungen entweder in einem Einzel- oder in einem Multithread-Prozessor, der Anweisungen ”out-of-order” (unter Missachtung der Reihenfolge) ausführt, dynamisch ”out-of-order” auszuführen. Ein Mechanismus zum Freigeben von Umbenennungsregistern wird beschrieben, der aus einem Satz von Anweisungen besteht, die von einem Compiler verwendet werden, um dem Prozessor anzuzeigen, wann er das physische (Umbenennungs-)Register, das einem bestimmten architekturdefinierten Register zugeordnet ist, freigeben kann. Durch diesen Mechanismus kann das Umbenennungsregister neu zugewiesen oder neu zugeordnet werden, um einen anderen Wert zu speichern, sobald das Umbenennungsregister nicht mehr für das Zuordnen zum architekturdefinierten Register benötigt wird. Es gibt mindestens drei Arten und Weisen, den Prozessor mit einer Anweisung, die das vom Zuordnen zu befreiende Umbenennungsregister identifiziert, zu aktivieren: (1) ein Benutzer kann die Anweisung, die sich auf ein bestimmtes Umbenennungsregister bezieht, explizit an den Prozessor bereitstellen; (2) ein Betriebssystem kann die Anweisung bereitstellen, wenn ein Thread inaktiv ist, der sich auf einen mit dem Thread verknüpften Satz von Registern bezieht; und (3) ein Compiler kann die Anweisung in die Vielzahl von an den Prozessor gerichteten Anweisungen einschließen. Es gibt mindestens fünf Ausführungsformen der an den Prozessor bereitgestellten Anweisung, um architekturdefinierten Registern zugeordnete Umbenennungsregister freizugeben: (1) Register-Bit freigeben; (2) Register freigeben; (3) Maske freigeben; (4) Opcode freigeben; und (5) Opcode/Maske freigeben. Die Anweisung ”Register-Bit freigeben” bewirkt die größte Beschleunigung für einen ”Out-of-Order”-Prozessor, und die Anweisung ”Register freigeben” bewirkt die geringste Beschleunigung.”
  • ”Power ISATM Version 2.06 Revision B”, veröffentlicht am 23. Juli 2010, von IBM® und durch Verweis hierin einbezogen, erläutert eine beispielhafte RISC-(reduced instruction set computer)Anweisungssatz-Architektur. Power ISA wird hierin verwendet, um beispielhafte Ausführungsformen darzulegen, jedoch ist die Erfindung nicht auf Power ISA oder RISC-Architekturen beschränkt. Der Fachmann wird den Nutzen von Aspekten der Erfindung in einer Vielzahl von Architekturen ohne weiteres erkennen.
  • ”z/Architecture Principles of Operation” SA22-7832-08, Neunte Ausgabe (August 2010) von IBM® und durch Verweis hierin einbezogen, erläutert eine beispielhafte CISC-(complex instruction set computer)Anweisungssatz-Architektur.
  • KURZBESCHREIBUNG
  • In einer Ausführungsform geht eine Präfixanweisung einer nächsten Anweisung voraus, wobei die Präfixanweisung einen vom Prozessor beim Ausführen der nächsten Anweisung zu verwendenden Wert bereitstellt. Der Prozessor erhält eine erste Anweisung (Präfixanweisung) und eine zweite Anweisung (nächste Anweisung) zur Ausführung, wobei die erste Anweisung der zweiten Anweisung in Programmreihenfolge vorausgeht. Der Prozessor ermittelt, dass die erste Anweisung eine Präfixanweisung ist, wobei die Präfixanweisung einen beim Ausführen der zweiten Anweisung zu verwendenden ersten Wert angibt, wobei die zweite Anweisung einen beim Ausführen der zweiten Anweisung zu verwendenden zweiten Wert angibt. Der Prozessor führt die erste Anweisung ohne Speichern des ersten Werts auf einer von der Anweisung angegebenen Position erfolgreich aus und führt die zweite Anweisung unter Verwendung des ersten Werts ohne Abrufen des ersten Werts auf einer zweiten von der Anweisung angegebenen Position erfolgreich aus.
  • In einer Ausführungsform beinhaltet das Ermitteln außerdem das Ermitteln, dass es kein eingreifendes Unterbrechungsereignis zwischen der erfolgreichen Ausführung der ersten Anweisung und der zweiten Anweisung gibt.
  • In einer Ausführungsform wird der beim Ausführen der zweiten Anweisung zu verwendende Wert als ein Ergebnisregister der ersten Anweisung identifiziert, wobei das Ergebnisregister der ersten Anweisung ein Quellenregister der zweiten Anweisung ist.
  • In einer Ausführungsform ist das Ergebnisregister ein mit einem architekturdefinierten Anweisungssatz verknüpftes architekturdefiniertes Register, das entweder aus einem Allgemeinregister oder aus einem Gleitkommaregister besteht.
  • In einer Ausführungsform wird der beim Ausführen der zweiten Anweisung zu verwendende Wert als ein Hauptspeicheroperand der ersten Anweisung identifiziert, wobei der Hauptspeicheroperand der ersten Anweisung ein Quellen-Speicheroperand der zweiten Anweisung ist.
  • In einer Ausführungsform beinhaltet der zu verwendende Wert ein Ergebnis des Ausführens der ersten Anweisung und ein Direktfeld der ersten Anweisung, wobei das erfolgreiche Ausführen außerdem das Verwenden eines verketteten Werts aus mindestens einem Teil des Direktfelds der ersten Anweisung und einem Direktfeld der zweiten Anweisung beinhaltet.
  • In einer Ausführungsform wird eine einzige interne Anweisung auf Grundlage der ersten Anweisung und der zweiten Anweisung formatiert, wobei das erfolgreiche Ausführen das Ausführen der einzigen internen Anweisung beinhaltet.
  • Ebenso werden hierin System und Computerprogramm-Produkte entsprechend den oben zusammengefassten Verfahren beschrieben und beansprucht.
  • Zusätzliche Funktionsmerkmale und Vorteile werden durch die Verfahren der vorliegenden Erfindung realisiert. Weitere Ausführungsformen und Aspekte der Erfindung sind hierin ausführlich beschrieben und werden als Bestandteil der beanspruchten Erfindung betrachtet.
  • KURZBESCHREIBUNG DER ZEICHNUNGEN
  • Der Gegenstand, welcher als die Erfindung angesehen wird, wird in den Ansprüchen am Ende der Beschreibung genau dargelegt und klar beansprucht. Die vorerwähnten und weitere Aufgaben, Merkmale und Vorteile der Erfindung sind aus der folgenden ausführlichen Beschreibung in Verbindung mit den folgenden beigefügten Zeichnungen ersichtlich:
  • 1 veranschaulicht eine beispielhafte Prozessor-Systemkonfiguration;
  • 2 veranschaulicht eine erste beispielhafte Prozessor-Pipeline;
  • 3 veranschaulicht eine zweite beispielhafte Prozessor-Pipeline;
  • 4A veranschaulicht eine beispielhafte Optimierungsanalyse-Steuerkomponentenumgebung;
  • Die 4B bis 4E veranschaulichen eine beispielhafte Optimierung;
  • 5 ist ein beispielhafter Ablaufplan, der Aspekte einer Ausführungsform der Erfindung veranschaulicht; und
  • 6 ist ein beispielhafter Ablaufplan, der Aspekte einer Ausführungsform der Erfindung veranschaulicht.
  • AUSFÜHRLICHE BESCHREIBUNG
  • Ein ”Out-of-Order”-(OoO-)Prozessor enthält üblicherweise mehrere Ausführungs-Pipelines, die in opportunistischer Weise Anweisungen in einer anderen Reihenfolge als der von der Programmsequenz (oder ”Programmreihenfolge”) angegebenen ausführen können, um durch Verringern von Datenabhängigkeiten und Maximieren der Auslastung der für verschiedene Anweisungsarten zugeordneten Ausführungs-Pipelines die mittlere Anzahl von Anweisungen pro Zyklus zu maximieren. Die Ergebnisse der Anweisungsausführung werden üblicherweise vorübergehend in den physischen Registern einer oder mehrerer Registerdateien begrenzter Tiefe untergebracht. Ein OoO-Prozessor verwendet üblicherweise Registerumbenennung, um eine unnötige Durchnummerierung von Anweisungen wegen der Wiederverwendung eines gegebenen architekturdefinierten Registers durch nachfolgende Anweisungen in der Programmreihenfolge zu vermeiden.
  • Nach US 2011/0087865 (Barrick) wird während Registerumbenennungsoperationen jedes durch eine Anweisung angesprochene architekturdefinierte (d. h. logische) Register einem eindeutigen physischen Register in einer Registerdatei zugeordnet. In aktuellen Hochleistungs-OoO-Prozessoren wird eine vereinheitlichte Hauptzuordnungsfunktion genutzt, um die physischen Register in mehreren Registerdateien zu verwalten. Neben dem Speichern der logisch-zu-physischen Registerumsetzung (d. h. in Zuordnungsfunktions-Einträgen) ist die vereinheitlichte Hauptzuordnungsfunktion auch für das Speichern von Abhängigkeitsdaten (d. h. Warteschlangen-Positionsdaten) zuständig, was für das Ordnen der Anweisungen bei Abschluss wichtig ist.
  • In einem auf vereinheitlichten Hauptzuordnungsfunktionen beruhenden Umbenennungsschema ist es erwünscht, Zuordnungsfunktions-Einträge so bald wie möglich für die Wiederverwendung durch den OoO-Prozessor freizugeben. Jedoch kann nach Stand der Technik ein Eintrag der vereinheitlichten Hauptzuordnungsfunktion nicht freigegeben werden, bis die Anweisung, die in ein durch den Zuordnungsfunktions-Eintrag zugeordnetes Register schreibt, abgeschlossen ist. Diese Einschränkung wird durchgesetzt, weil bis zum Abschluss eine Möglichkeit besteht, dass eine Anweisung, die ”beendet” ist (d. h. die bestimmte Ausführungseinheit (EU – execution unit) hat die Anweisung erfolgreich ausgeführt), noch gelöscht wird, bevor die Anweisung ”abgeschlossen” werden kann und bevor der architekturdefinierte, kohärente Zustand der Register aktualisiert wird.
  • In aktuellen Implementierungen wurde Ressourcenengpässen bei der vereinheitlichten Hauptzuordnungsfunktion gewöhnlich durch Erhöhen der Anzahl der Einträge der vereinheitlichten Hauptzuordnungsfunktion begegnet. Jedoch ist das Erhöhen der Größe der vereinheitlichten Hauptzuordnungsfunktion hinsichtlich Chipfläche, Komplexität, Energieverbrauch und Zugriffszeit mit einem Nachteil verbunden.
  • Bei Barrick wird ein Verfahren zum Verwalten eines Satzes von einem oder mehreren physischen Registern in einem Datenverarbeitungssystem bereitgestellt. Das Datenverarbeitungssystem hat einen Prozessor, der Anweisungen unter Missachtung der Reihenfolge verarbeitet, wobei die Anweisungen auf logische Register verweisen und wobei jedes der logischen Register dem Satz aus einem oder mehreren physischen Registern zugeordnet wird. In Reaktion auf die Abfertigung einer oder mehrerer der Anweisungen führt eine Registerverwaltungseinheit eine Suche in den logischen Registern durch, welche ermittelt, ob bei einem mit der abgefertigten Anweisung verknüpften logischen Register in einer oder mehreren Registerzuordnungsfunktionen ein Treffer aufgetreten ist. In dieser Hinsicht durchläuft die Suche in den logischen Registern mindestens eine Registerzuordnungsfunktion aus einer Gruppe von Registerzuordnungsfunktionen, die eine Zuordnungsfunktion für architekturdefinierte Register, eine vereinheitlichte Hauptzuordnungsfunktion und eine temporäre Registerzuordnungsfunktion beinhaltet. Die Registerverwaltungseinheit wählt einen einzelnen Treffer beim logischen Register aus der Gruppe von Registerzuordnungsfunktionen aus. Wenn eine Anweisung mit einem Zuordnungsfunktions-Eintrag in der vereinheitlichten Hauptzuordnungsfunktion beendet, aber nicht abgeschlossen ist, verschiebt die Registerverwaltungseinheit logisch-zu-physische Registerumbenennungsdaten des Eintrags der vereinheitlichten Hauptzuordnung in der vereinheitlichten Hauptzuordnungsfunktion zur temporären Registerzuordnungsfunktion und gibt die vereinheitlichte Hauptzuordnungsfunktion den Eintrag der vereinheitlichten Hauptzuordnung vor Abschluss der Anweisung frei. Die Freigabe des Eintrags der vereinheitlichten Hauptzuordnung erhöht eine Anzahl von für die Wiederverwendung verfügbaren Einträgen der vereinheitlichten Hauptzuordnung.
  • Die Figuren und insbesondere 1 zeigen ein Beispiel eines Datenverarbeitungssystems 100, welches einen OoO-Prozessor enthalten kann, der eine temporäre Registerzuordnungsfunktion wie unten anhand 2 beschrieben verwendet. Wie in 1 gezeigt, verfügt das Datenverarbeitungssystem 100 über eine Zentraleinheit (CPU) 110, welche mit Prozessor 200 in 2 implementiert sein kann. Die CPU 110 ist durch eine Verschaltung 112 mit verschiedenen weiteren Komponenten verbunden. Ein Nur-Lese-Speicher (ROM – read-only memory) 116 ist mit der Verschaltung 112 verbunden und enthält ein ”Basic Input/Output System” (BIOS), das bestimmte grundlegende Funktionen des Datenverarbeitungssystems 100 steuert. Ein Direktzugriffsspeicher (RAM – random access memory) 114, ein E/A-Adapter 118 und ein DFV-Adapter 134 sind ebenfalls mit dem Systembus 112 verbunden. Der E/A-Adapter 118 kann ein Small-Computer-System-Interface-(”SCSI”-)Adapter sein, der mit einer Speichereinheit 120 Daten austauscht. Der DFV-Adapter 134 verbindet die Verschaltung 112 mit dem Netz 140, was dem Datenverarbeitungssystem 100 ermöglicht, mit anderen solchen Systemen wie einem fernen Computer 142 Daten auszutauschen. Ein/Ausgabe-Einheiten sind außerdem über einen Benutzerschnittstellenadapter 122 und einen Bildschirmadapter 136 mit der Verschaltung 112 verbunden. Eine Tastatur 124, ein Trackball 132, eine Maus 126 und ein Lautsprecher 128 sind alle über den Benutzerschnittstellenadapter 122 mit dem Bus 112 verbunden. Ein Bildschirm 138 ist über einen Bildschirmadapter 136 mit dem Systembus 112 verbunden. Auf diese Weise empfängt das Datenverarbeitungssystem 100 Eingaben zum Beispiel über die Tastatur 124, den Trackball 132 und/oder die Maus 126 und liefert es Ausgaben zum Beispiel über das Netz 140 auf die Speichereinheit 120, den Lautsprecher 128 und/oder den Bildschirm 138. Die im Datenverarbeitungssystem 100 veranschaulichten Hardware-Elemente sollen nicht erschöpfend sein, sondern vielmehr Hauptkomponenten eines Datenverarbeitungssystems in einer einzigen Ausführungsform darstellen.
  • Der Betrieb des Datenverarbeitungssystems 100 kann durch Programmcode wie Firmware und/oder Software gesteuert werden, welcher üblicherweise zum Beispiel ein Betriebssystem wie AIX® (”AIX” ist ein Warenzeichen der IBM Corporation) und ein oder mehrere Anwendungs- oder Middleware-Programme enthält. Ein solcher Programmcode weist die unten im Zusammenhang mit 2 erörterten Anweisungen auf.
  • In 2 ist ein superskalarer Prozessor 200 dargestellt. Anweisungen werden aus einem Speicher (z. B. RAM 114 in 1) abgerufen und in eine Anweisungssequenzbildungslogik (ISL – instruction sequencing logic) 204 geladen, welche einen Level-1-Anweisungs-Cachespeicher (L1-I-Cachespeicher) 206, eine Abruf-Decodier-Einheit 208, eine Anweisungswarteschlange 210 und eine Abfertigungseinheit 212 enthält. Speziell werden die Anweisungen in einen L1-I-Cachespeicher 206 von ISL 204 geladen. Die Anweisungen werden im L1-I-Cachespeicher 206 aufbewahrt, bis sie benötigt werden, oder ersetzt, wenn sie nicht benötigt werden. Die Anweisungen werden aus dem L1-I-Cachespeicher 206 abgerufen und durch die Abruf-Decodier-Einheit 208 decodiert. Nach Decodieren einer aktuellen Anweisung wird die aktuelle Anweisung in die Anweisungswarteschlange 210 geladen. Die Abfertigungseinheit 212 fertigt Anweisungen aus der Anweisungswarteschlange 210 an eine Registerverwaltungseinheit 214 sowie eine Abschlusseinheit 240 ab. Die Abschlusseinheit 240 ist mit einer allgemeinen Ausführungseinheit 224 und der Registerverwaltungseinheit 214 verbunden und überwacht, wann eine ausgegebene Anweisung abgeschlossen ist.
  • Wenn die Abfertigungseinheit 212 eine aktuelle Anweisung abfertigt, ordnet die vereinheitlichte Hauptzuordnungsfunktion 218 der Registerverwaltungseinheit 214 einem physischen Register in den Physische-Register-Dateien 232a bis 232n, das gerade keinem logischen Register zugewiesen ist, die Nummer eines logischen Zielregisters zu. Bei dem Ziel wird davon ausgegangen, dass es zu dem bezeichneten physischen Register aus den Physische-Register-Dateien 232a bis 232n umbenannt wird. Die vereinheitlichte Hauptzuordnungsfunktion 218 entfernt das zugewiesene physische Register aus einer in der vereinheitlichten Hauptzuordnungsfunktion 218 gespeicherten Liste 219 freier physischer Register. Alle nachfolgenden Verweise auf dieses logische Zielregister werden auf dasselbe physische Register verweisen, bis die Abruf-Decodier-Einheit 208 eine weitere Anweisung decodiert, die in dasselbe logische Register schreibt. Dann benennt die vereinheitlichte Hauptzuordnungsfunktion 218 das logische Register in eine andere, aus der Frei-Liste 219 ausgewählte physische Position um und wird die Zuordnungsfunktion aktualisiert, um die neuen logisch-zu-physischen Registerzuordnungsfunktionsdaten einzugeben. Wenn die logisch-zu-physischen Registerzuordnungsfunktionsdaten nicht mehr benötigt werden, werden die physischen Register alter Zuordnungen an die Frei-Liste 219 zurückgegeben. Wenn die Liste freier physischer Register 219 nicht genug physische Register enthält, setzt die Abfertigungseinheit 212 die Anweisungsabfertigung aus, bis die benötigten physischen Register verfügbar werden.
  • Nachdem die Registerverwaltungseinheit 214 die aktuelle Anweisung zugeordnet hat, gibt eine Ausgabewarteschlange 222 die aktuelle Anweisung an eine Steuerkomponente für die allgemeine Ausführung 224 aus, welche Ausführungseinheiten (EUs – execution units) 230a bis 230n enthält. Die Ausführungseinheiten 230a bis 230n sind von verschiedenen Typen wie Gleitkomma (FP – floating-point), Festkomma (FX – fixed-point) und Laden/Speichern (LS – load/store). Die Steuerkomponente für die allgemeine Ausführung 224 tauscht über einen Daten-Cachespeicher 234 mit einem Datenspeicher (z. B. RAM 114, ROM 116 in 1) Daten aus. Außerdem kann die Ausgabewarteschlange 222 Anweisungen des Typs FP, des Typs FX sowie LS-Anweisungen enthalten. Jedoch sollte man erkennen, dass jede beliebige Anzahl und Art von Anweisungen verwendet werden kann. Während der Ausführung erhalten die Ausführungseinheiten (EUs) 230a bis 230n die Quellenoperandenwerte von physischen Positionen in den Registerdateien 232a bis 232n und speichern sie Ergebnisdaten, falls vorhanden, in den Registerdateien 232a bis 232n und/oder im Daten-Cachespeicher 234.
  • Wie weiter durch 2 veranschaulicht, enthält die Registerverwaltungseinheit 214 Folgendes: (i) einen Zuordnungsfunktions-Cluster 215, welcher eine Zuordnungsfunktion für architekturdefinierte Register 216, eine vereinheitlichte Hauptzuordnungsfunktion 218, eine temporäre Registerzuordnungsfunktion 220 und eine (ii) Ausgabewarteschlange 222 enthält. Der Zuordnungsfunktions-Cluster 215 verfolgt die den logischen Registern verschiedener Anweisungen zugewiesenen physischen Register. In einer beispielhaften Ausführungsform verfügt die Zuordnungsfunktion für architekturdefinierte Register 216 über 16 logische (d. h. nicht physisch zugeordnete) Register jedes Typs, welche den letzten gültigen (d. h. mit Prüfpunkt versehenen) Zustand der logisch-zu-physischen Registerzuordnungsfunktionsdaten speichern. Jedoch sollte man erkennen, dass verschiedene Prozessorarchitekturen mehr oder weniger logische Register haben können, wie in der beispielhaften Ausführungsform beschrieben. Die Zuordnungsfunktion für architekturdefinierte Register 216 enthält eine Zeigerliste, die ein physisches Register identifiziert, welches den mit Prüfpunkt versehenen Zustand beschreibt. Die Physische-Register-Dateien 232a bis 232n enthalten üblicherweise mehr Register als die Anzahl von Einträgen in der Zuordnungsfunktion für architekturdefinierte Register 216. Es ist zu beachten, dass die spezielle Anzahl von physischen und logischen Registern, die in einem Umbenennungszuordnungsschema verwendet werden, schwanken kann.
  • Im Gegensatz dazu ist die vereinheitlichte Hauptzuordnungsfunktion 218 üblicherweise größer (sie enthält üblicherweise bis zu 20 Einträge) als die Zuordnungsfunktion für architekturdefinierte Register 216. Die vereinheitlichte Hauptzuordnungsfunktion 218 erleichtert das Verfolgen des transienten Zustands von logisch-zu-physischen Registerzuordnungen. Der Begriff ”transient” bezieht sich auf die Tatsache, dass die vereinheitlichte Hauptzuordnungsfunktion 218 versuchsweise logisch-zu-physische Registerzuordnungsdaten verfolgt, während die Anweisungen unter Missachtung der Reihenfolge (”out-of-order”) ausgeführt werden. Zu OoO-Ausführung kommt es üblicherweise, wenn in der Pipeline ältere Anweisungen vorliegen, die länger für die Ausführung brauchen (d. h. mehr Taktzyklen benötigen) würden als neuere Anweisungen. Jedoch wenn das Ergebnis nach dem Ausführen einer OoO-Anweisung erfordern sollte, dass es aus einem bestimmten Grund (z. B. wegen einer falschen Verzweigungsvorhersage) gelöscht wird, kann der Prozessor in den durch die Zuordnungsfunktion für architekturdefinierte Register 216 bewahrten, mit Prüfpunkt versehenen Zustand zurückkehren und die Ausführung ab dem letzten gültigen Zustand wiederaufnehmen.
  • Die vereinheitlichte Hauptzuordnungsfunktion 218 nimmt die Verknüpfung zwischen den physischen Registern in den Physische-Register-Dateien 232a bis 232n und der Zuordnungsfunktion für architekturdefinierte Register 216 vor. Der qualifizierende Begriff ”vereinheitlicht” bezieht sich auf die Tatsache, dass die vereinheitlichte Hauptzuordnungsfunktion 218 die Komplexität des Erstellens einer dedizierten Zuordnungsfunktion nach Kundenwünschen für jede der Registerdateien 232 (z. B. Allgemeinregister (GPRs – general-purpose registers), Gleitkommaregister (FPRs – floating-point registers), Festkommaregister (FXPs – fixed-point registers), Ausnahmebedingungsregister (XERs – exception registers), Bedingungsregister (CRs – condition registers) usw.) erübrigt.
  • Neben dem Erstellen eines transienten logisch-zu-physischen Registerzuordnungsfunktions-Eintrags einer OoO-Anweisung verfolgt die vereinheitlichte Hauptzuordnungsfunktion 218 auch Abhängigkeitsdaten (d. h. Anweisungen, die von der Beendigung einer älteren Anweisung in der Pipeline abhängig sind), was für das Ordnen der Anweisungen wichtig ist. Herkömmlicherweise reiht sich die Anweisung in die Ausgabewarteschlange 222 ein, sobald die vereinheitlichte Hauptzuordnungsfunktion 218 in die logisch-zu-physische Registerumsetzung einer Anweisung eingetreten ist. Die Ausgabewarteschlange 222 dient als Gatekeeper, bevor die Anweisung zur Ausführung an die Ausführungseinheit 230 ausgegeben wird. Meistens kann eine Anweisung die Ausgabewarteschlange 222 nicht verlassen, wenn sie davon abhängig ist, dass eine ältere Anweisung beendet wird. Aus diesem Grund verfolgt die vereinheitlichte Hauptzuordnungsfunktion 218 Abhängigkeitsdaten durch Speichern der Ausgabewarteschlangen-Positionsdaten für jede Anweisung, die zugeordnet wird. Nachdem die Anweisung durch die Steuerkomponente für die allgemeine Ausführung 224 ausgeführt wurde, wird die Anweisung für ”beendet” erklärt und aus der Ausgabewarteschlange 222 zurückgezogen.
  • Die Registerverwaltungseinheit 214 kann in einem einzigen Zyklus mehrere Anweisungen von der Abfertigungseinheit 212 empfangen, um eine gefüllte Einzelausgabe-Pipeline aufrechtzuerhalten. Das Abfertigen von Anweisungen wird durch die Anzahl verfügbarer Einträge in der vereinheitlichten Hauptzuordnungsfunktion 218 begrenzt. In herkömmlichen Zuordnungssystemen, welchen die temporäre Registerzuordnungsfunktion 220 fehlt, gibt es, wenn die vereinheitlichte Hauptzuordnungsfunktion 218 insgesamt 20 Zuordnungsfunktions-Einträge aufweist, ein Maximum von 20 Anweisungen, die sofort in Ausführung befindlich (d. h. prüfpunktlos) sein können. Demgemäß kann die Abfertigungseinheit 212 eines herkömmlichen Zuordnungssystems denkbar mehr Anweisungen ”abfertigen” als die Anzahl, welche tatsächlich aus der vereinheitlichten Hauptzuordnungsfunktion 218 zurückgezogen werden kann. Die Ursache dieses Engpasses bei der vereinheitlichten Hauptzuordnungsfunktion 218 ist die Tatsache, dass der Zuordnungsfunktions-Eintrag einer Anweisung herkömmlicherweise nicht aus der vereinheitlichten Hauptzuordnungsfunktion 218 zurückgezogen werden konnte, bis die Anweisung ”abgeschlossen” wurde (d. h. alle älteren Anweisungen die Ausführung ”beendet” haben).
  • Gemäß einer Ausführungsform dient die temporäre Registerzuordnungsfunktion 220 als ein nicht zeitkritisches Register, für welches eine ”beendete”, aber ”nicht abgeschlossene” Anweisung vor dem letztendlichen Abschluss der Anweisung aus der vereinheitlichten Hauptzuordnungsfunktion 218 zurückgezogen (d. h. aus der vereinheitlichten Hauptzuordnungsfunktion 218 entfernt) werden könnte. Sobald die Anweisung ”abgeschlossen” wird, benachrichtigt die Abschlusseinheit 240 die temporäre Registerzuordnungsfunktion 220 über den Abschluss. Der Zuordnungsfunktions-Eintrag in der temporären Registerzuordnungsfunktion 220 kann dann den architekturdefinierten kohärenten Zustand der Zuordnungsfunktion für architekturdefinierte Register 216 durch Ersetzen des entsprechenden Eintrags, der jetzt in der Zuordnungsfunktion für architekturdefinierte Register 216 gespeichert war, aktualisieren.
  • Wenn die Abfertigungseinheit 212 eine Anweisung abfertigt, vergleicht die Registerverwaltungseinheit 214 die zu der Anweisung gehörige(n) Nummer(n) logischer Register mit den Zuordnungen in der Zuordnungsfunktion für architekturdefinierte Register 216, der vereinheitlichten Hauptzuordnungsfunktion 218 und der temporären Registerzuordnungsfunktion 220, um zu ermitteln, ob eine Übereinstimmung (gewöhnlich als ”Treffer” bezeichnet) in der Zuordnungsfunktion für architekturdefinierte Register 216, der vereinheitlichten Hauptzuordnungsfunktion 218 und/oder der temporären Registerzuordnungsfunktion 220 vorliegt. Diese Auswertung wird als eine Suche in den logischen Registern bezeichnet. Wenn die Suche gleichzeitig bei mehr als einer Registerzuordnungsfunktion (d. h. der Zuordnungsfunktion für architekturdefinierte Register 216, der vereinheitlichten Hauptzuordnungsfunktion 218 und/oder der temporären Registerzuordnungsfunktion 220) erfolgt, wird die Suche als eine parallele Suche in den logischen Registern bezeichnet.
  • Jede Anweisung, die den Wert eines bestimmten logischen Zielregisters aktualisiert, wird einem neuen physischen Register zugeordnet. Jedes Mal, wenn diese neue Ausprägung des logischen Registers von einer anderen Anweisung als eine Quelle verwendet wird, muss dasselbe physische Register verwendet werden. Da es eine Vielzahl von Ausprägungen eine logischen Registers geben kann, kann es auch eine Vielzahl von dem logischen Register entsprechenden physischen Registern geben. Die Registerverwaltungseinheit 214 führt die Tasks des (i) Analysierens, welches physische Register einem durch eine bestimmte Anweisung verwendeten logischen Register entspricht, des (ii) Ersetzens des Verweises auf das logische Register durch einen Verweis auf das entsprechende physische Register (d. h. Registerumbenennung) und des (iii) Zuordnens eines neuen physischen Registers jedes Mal, wenn eine neue Ausprägung irgendeines logischen Registers erstellt wird (d. h. Zuordnung des physischen Registers), aus.
  • Anfangs, bevor Anweisungen abgefertigt werden, empfängt die vereinheitlichte Hauptzuordnungsfunktion 218 keinen Treffer/keine Übereinstimmung, da es keine gerade in Ausführung befindlichen Anweisungen gibt. In einem solchen Fall erstellt die vereinheitlichte Hauptzuordnungsfunktion 218 einen Zuordnungseintrag. Da nachfolgende Anweisungen abgefertigt werden, wenn eine Übereinstimmung mit einem logischen Register für dieselbe Nummer eines logischen Registers sowohl in der Zuordnungsfunktion für architekturdefinierte Register 216 als auch in der vereinheitlichten Hauptzuordnungsfunktion 218 gefunden wird, erhält das Auswählen der logisch-zu-physischen Registerzuordnung der vereinheitlichten Hauptzuordnungsfunktion 218 Priorität, da die Möglichkeit besteht, dass es Anweisungen gibt, die gerade unter Missachtung der Reihenfolge ausgeführt werden (d. h., dass die Zuordnung in einem transienten Zustand ist).
  • Nachdem die vereinheitlichte Hauptzuordnungsfunktion 218 einen Treffer/eine Übereinstimmung in ihrer Zuordnungsfunktion gefunden hat, reiht sich die Anweisung in die Ausgabewarteschlange 222 ein, um auf die Ausgabe zur Ausführung durch eine der Ausführungseinheiten 230 zu warten. Nachdem die Steuerkomponente für die allgemeine Ausführung 224 die Anweisung ausgeführt und ”beendet” hat, aber bevor die Anweisung ”abgeschlossen” wird, zieht die Registerverwaltungseinheit 214 den in der vereinheitlichten Hauptzuordnungsfunktion 218 jetzt gefundenen Zuordnungseintrag aus der vereinheitlichten Hauptzuordnungsfunktion 218 zurück und verschiebt sie den Zuordnungseintrag zur temporären Registerzuordnungsfunktion 220. Daraufhin wird ein Zeitfenster in der vereinheitlichten Hauptzuordnungsfunktion 218 verfügbar gemacht, um eine anschließend abgefertigte Anweisung zuzuordnen. Im Gegensatz zur vereinheitlichten Hauptzuordnungsfunktion 218 speichert die temporäre Registerzuordnungsfunktion 220 keine Abhängigkeitsdaten. Somit hängt die Zuordnung, die zur temporären Registerzuordnungsfunktion 220 übertragen wird, nicht von den Warteschlangenpositionen der mit ihren Quellenzuordnungen verknüpften Anweisungen ab (und verfolgt sie diese nicht). Dies ist so, weil die Ausgabewarteschlange 222 die ”beendete, aber nicht abgeschlossene” Anweisung nach einer erfolgreichen Ausführung zurückzieht. Im Gegensatz dazu speichert eine vereinheitlichte Hauptzuordnungsfunktion bei herkömmlichen Umbenennungszuordnungsschemas, welchen eine temporäre Registerzuordnungsfunktion fehlt, weiter den Quellenumbenennungs-Eintrag, bis die Anweisung abgeschlossen wird. Bei der vorliegenden Ausführungsform kann die temporäre Registerzuordnungsfunktion 220 weiter weg von anderen kritischen Pfadelementen angeordnet werden, weil die Ausführung der vereinheitlichten Hauptzuordnungsfunktion 218 nicht zeitkritisch ist.
  • Sobald die vereinheitlichte Hauptzuordnungsfunktion 218 einen Zuordnungseintrag aus der vereinheitlichten Hauptzuordnungsfunktion 218 zurückzieht und zur temporären Registerzuordnungsfunktion 220 verschiebt, führt der Zuordnungsfunktions-Cluster 215 an einer anschließend abgefertigten Anweisung eine parallele Suche in den logischen Registern durch, um zu ermitteln, ob die nachfolgende Anweisung einen Treffer/eine Übereinstimmung in der Zuordnungsfunktion für architekturdefinierte Register 216, der vereinheitlichten Hauptzuordnungsfunktion 218 und/oder der temporären Registerzuordnungsfunktion 220 enthält. Wenn in mindestens zwei Zuordnungsfunktionen aus der Gruppe der Zuordnungsfunktion für architekturdefinierte Register 216, der vereinheitlichten Hauptzuordnungsfunktion 218 und der temporären Registerzuordnungsfunktion 220 ein Treffer bei/eine Übereinstimmung mit derselben Nummer eines logischen Zielregisters gefunden wird, verleiht der Multiplexer 223 in Ausgabewarteschlange 222 durch Auswählen der logisch-zu-physischen Registerzuordnung der vereinheitlichten Hauptzuordnungsfunktion 218 Priorität vor derjenigen der temporären Registerzuordnungsfunktion 220, welche wiederum Auswahlpriorität vor der Zuordnungsfunktion für architekturdefinierte Register 216 genießt.
  • Der von Barrick vorgeschlagene Mechanismus, durch welchen die Auswahlpriorität ermittelt wird, wird nachfolgend erörtert. Ein logischer Übersichts-Ablaufplan eines beispielhaften Verfahrens zur Ermittlung, welche Zuordnungsdatenwerte beim Ausführen einer Anweisung zu verwenden sind, gemäß einer Ausführungsform. In einer Ausführungsform fertigt eine Abfertigungseinheit 212 eine oder mehrere Anweisungen an eine Registerverwaltungseinheit 214 ab. In Reaktion auf die Abfertigung der Anweisung(en) ermittelt die Registerverwaltungseinheit 214 durch eine parallele Suche in den logischen Registern, ob ein ”Treffer” bei einem zu jeder abgefertigten Anweisung gehörigen logischen Register (zusätzlich zu einem ”Treffer” bei einer Zuordnungsfunktion für architekturdefinierte Register 216) aufgetreten ist. In dieser Hinsicht versteht es sich von selbst, dass vorausgesetzt wird, dass die Zuordnungsfunktion für architekturdefinierte Register 216 immer einen Treffer/eine Übereinstimmung hat, da die Zuordnungsfunktion für architekturdefinierte Register 216 den mit Prüfpunkt versehenen Zustand der logisch-zu-physischen Registerzuordnungsfunktionsdaten speichert. Wenn die Registerverwaltungseinheit 214 keine Übereinstimmung/keinen Treffer in einer vereinheitlichten Hauptzuordnungsfunktion 218 und/oder einer temporären Registerzuordnungsfunktion 220 erkennt, wählt ein Multiplexer 223 die logisch-zu-physischen Registerumbenennungsdaten aus der Zuordnungsfunktion für architekturdefinierte Register 216 aus. Wenn die Registerverwaltungseinheit 214 eine Übereinstimmung/einen Treffer in der vereinheitlichten Hauptzuordnungsfunktion 218 und/oder der temporären Registerzuordnungsfunktion 220 erkennt, ermittelt die Registerverwaltungseinheit 214 in einem Entscheidungsblock, ob sowohl in der vereinheitlichten Hauptzuordnungsfunktion 218 als auch in der temporären Registerzuordnungsfunktion 220 eine Übereinstimmung/ein Treffer auftritt. Wenn in beiden Zuordnungsfunktionen 218 und 220 ein Treffer/eine Übereinstimmung festgestellt wird, ermittelt die Registerverwaltungseinheit 214, ob der Zuordnungseintrag in der vereinheitlichten Hauptzuordnungsfunktion 218 ”jünger” als der Zuordnungseintrag in der temporären Registerzuordnungsfunktion 220 ist (d. h., ob die Erstellung des Zuordnungseintrags kürzer zurückliegt). Wenn der Eintrag in der vereinheitlichten Hauptzuordnungsfunktion 218 jünger als der Eintrag in der temporären Registerzuordnungsfunktion 220 ist, wählt der Multiplexer 223 die logisch-zu-physischen Registerumbenennungsdaten aus der vereinheitlichten Hauptzuordnungsfunktion 218 aus. Wenn der Eintrag in der vereinheitlichten Hauptzuordnungsfunktion 218 nicht jünger als der Eintrag in der temporären Registerzuordnungsfunktion 220 ist, wählt der Multiplexer 223 die logisch-zu-physischen Registerumbenennungsdaten aus der temporären Registerzuordnungsfunktion 220 aus.
  • Wenn weder in der vereinheitlichten Hauptzuordnungsfunktion 218 noch in der temporären Registerzuordnungsfunktion 220 eine Übereinstimmung/ein Treffer auftritt, wird ermittelt, ob in der vereinheitlichten Hauptzuordnungsfunktion 218 ein ausschließlicher Treffer/eine ausschließliche Übereinstimmung auftritt. Wenn ein ausschließlicher Treffer bei der vereinheitlichten Hauptzuordnungsfunktion 218 auftritt, wählt der Multiplexer 223 die logisch-zu-physischen Registerumbenennungsdaten aus der vereinheitlichten Hauptzuordnungsfunktion 218 aus. Jedoch wenn kein Treffer/keine Übereinstimmung bei der vereinheitlichten Hauptzuordnungsfunktion 218 auftritt (und somit der Treffer/die Übereinstimmung ausschließlich bei der temporären Registerzuordnungsfunktion 220 auftritt), wählt der Multiplexer 223 die logisch-zu-physischen Registerumbenennungsdaten aus der temporären Registerzuordnungsfunktion 220 (Block 320) aus. Eine Steuerkomponente für die allgemeine Ausführung 224 verwendet die Ausgabedaten der Suche in den logischen Registern zur Ausführung.
  • In einer beispielhaften Ausführungsform fertigt eine Abfertigungseinheit 212 eine oder mehrere Anweisungen an die Registerverwaltungseinheit 214 ab. Eine vereinheitlichte Hauptzuordnungsfunktion erstellt einen neuen Eintrag der logisch-zu-physischen Registerzuordnung. Eine Ausgabewarteschlange 222 bewahrt die Ausgabewarteschlangen-Positionsdaten der abgefertigten Anweisung, welche den Zuordnungseintrag verwendet, der über die Suche in den logischen Registern (in 3 beschrieben) ausgewählt wird. Eine Steuerkomponente für die allgemeine Ausführung 224 erkennt, ob eine der in Ausführung befindlichen Anweisungen beendet wurde (d. h. ob eine der Einheiten 130 die Ausführung einer Anweisung beendet hat). Wenn die ausgegebene Anweisung nicht beendet wurde, wartet das Verfahren darauf, dass eine Anweisung beendet wird. In Reaktion auf das Erkennen durch die Steuerkomponente für die allgemeine Ausführung 224, dass eine Anweisung beendet ist, verschiebt die vereinheitlichte Hauptzuordnungsfunktion 218 die logisch-zu-physischen Registerumbenennungsdaten von der vereinheitlichten Hauptzuordnungsfunktion 218 zur temporären Registerzuordnungsfunktion 220. Die vereinheitlichte Hauptzuordnungsfunktion 218 zieht den zur beendeten Anweisung gehörigen Eintrag der vereinheitlichten Hauptzuordnung zurück. Eine Abschlusseinheit 240 ermittelt, ob die beendete Anweisung abgeschlossen ist. Wenn die beendete Anweisung nicht abgeschlossen ist, wartet die Abschlusseinheit 240 weiter, bis sie erkennt, dass die allgemeine Ausführungseinheit 224 alle älteren Anweisungen beendet hat. Jedoch wenn die Abschlusseinheit 240 erkennt, dass die beendete Anweisung abgeschlossen ist, aktualisiert die temporäre Registerzuordnungsfunktion 220 den architekturdefinierten kohärenten Zustand der Zuordnungsfunktion für architekturdefinierte Register 216 und zieht die temporäre Registerzuordnungsfunktion 220 ihren Zuordnungseintrag zurück.
  • US-Patentschrift Nr. 6 189 088 ”Forwarding stored data fetched for out-of-order load/read operation to over-taken operation read-accessing same memory location” von Gschwind, erteilt am 13. Februar 2001 und durch Verweis hierin einbezogen, beschreibt einen beispielhaften ”Out-of-Order”-(OoO-)Prozessor.
  • Bei Gschwind ist 3 ein funktionales Blockschaltbild eines herkömmlichen Computer-Verarbeitungssystems (das z. B. einen superskalaren Prozessor enthält), welches dynamisches Umordnen von Speicheroperationen und hardwaregestützte Implementierungen der Kollisionsprüfungs- und Datenumgehungssequenz unterstützt. Das heißt, das System in 3 enthält die zur Unterstützung des Umordnens von Anweisungen mittels der oben aufgeführten Mechanismen erforderlichen Hardware-Ressourcen, aber es enthält nicht die zur Unterstützung der Ausführung von „Out-of-Order”-Ladeoperationen vor reihenfolgegemäßen Ladeoperationen erforderlichen Hardware-Ressourcen. Das System besteht aus: einem Speicher-Teilsystem 301; einem Daten-Cachespeicher 302; einem Anweisungs-Cachespeicher 304; und einer Prozessoreinheit 300. Die Prozessoreinheit 300 enthält: eine Anweisungswarteschlange 303; mehrere Speichereinheiten (MUs – memory units) 305 zum Durchführen von Lade- und Speicheroperationen; mehrere Funktionseinheiten (FUs – functional units) 307 zum Durchführen von Ganzzahl-, logischen und Gleitkommaoperationen; eine Verzweigungseinheit (BU – branch unit) 309; eine Registerdatei 311; eine Registerzuordnungstabelle 320; eine Warteschlange für freie Register 322; eine Abfertigungstabelle 324; eine Zurückziehungs-Warteschlange 326; und eine reihenfolgegemäße Zuordnungstabelle 328.
  • Im in 3 veranschaulichten Prozessor werden Anweisungen aus dem Anweisungs-Cachespeicher 304 (oder aus dem Speicher-Teilsystem 301, wenn die Anweisungen sich nicht im Anweisungs-Cachespeicher 304 befinden) unter der Steuerung von Verzweigungseinheit 309 abgerufen, in die Anweisungswarteschlange 303 gestellt und anschließend aus der Anweisungswarteschlange 303 abgefertigt. Die von den Anweisungen zur Angabe von Operanden verwendeten Registernamen werden entsprechend dem Inhalt der Registerzuordnungstabelle 320 umbenannt, welche die aktuelle Zuordnung von Namen architekturdefinierter Register zu physischen Registern angibt. Die von den Anweisungen zur Angabe der Ziele für die Ergebnisse verwendeten Namen der architekturdefinierten Register werden aus der Warteschlange für freie Register 322, welche die Namen von physischen Registern enthält, die der Prozessor gerade nicht verwendet, entnommenen physischen Registern zugewiesen. Die Registerzuordnungstabelle 320 wird mit den durch die Anweisungen angegebenen Zuweisungen physischer Register zu den Namen der architekturdefinierten Zielregister aktualisiert. Anweisungen mit allen ihren umbenannten Registern werden in die Abfertigungstabelle 324 gestellt. Anweisungen werden außerdem einschließlich ihrer Adressen und der Namen ihrer physischen und architekturdefinierten Register in Programmreihenfolge in die Zurückziehungs-Warteschlange 326 gestellt. Anweisungen werden aus der Abfertigungstabelle 324 abgefertigt, wenn alle durch solche Anweisungen zu verwendenden Ressourcen verfügbar sind (physische Register wurden den erwarteten Operanden zugewiesen, und Funktionseinheiten sind frei). Die von der Anweisung verwendeten Operanden werden aus der Registerdatei 311 gelesen, welche üblicherweise Allgemeinregister (GPRs), Gleitkommaregister (FPRs) und Bedingungsregister (CRs) enthält. Anweisungen werden, möglicherweise unter Missachtung der Reihenfolge, in einer entsprechenden Speichereinheit 305, Funktionseinheit 307 oder Verzweigungseinheit 309 ausgeführt. Bei Abschluss der Ausführung werden die Ergebnisse aus den Anweisungen in die Registerdatei 311 gestellt. Anweisungen in der Abfertigungstabelle 324, die darauf warten, dass die physischen Register durch die ihre Ausführung abschließenden Anweisungen gesetzt werden, werden benachrichtigt. Die Zurückziehungs-Warteschlange 326 wird über die ihre Ausführung abschließenden Anweisungen sowie darüber, ob sie irgendwelche Ausnahmebedingungen ausgelöst haben, benachrichtigt. Abgeschlossene Anweisungen werden in Programmreihenfolge (ab dem Anfang der Warteschlange) aus der Zurückziehungs-Warteschlange 326 entfernt. Zum Zeitpunkt des Zurückziehens wird, wenn keine Ausnahmebedingungen durch eine Anweisung ausgelöst wurden, die reihenfolgegemäße Zuordnungstabelle 328 aktualisiert, so dass die Namen architekturdefinierter Register auf die physischen Register in Registerdatei 311, welche die Ergebnisse aus der zurückgezogen werdenden Anweisung enthalten, verweisen; die früheren Registernamen aus der reihenfolgegemäßen Zuordnungstabelle 328 werden in die Warteschlange für freie Register 322 zurückgegeben.
  • Andererseits wird, wenn eine Anweisung eine Ausnahmebedingung ausgelöst hat, die Programmsteuerung auf die Adresse der Anweisung gesetzt, die gerade aus der Zurückziehungs-Warteschlange 326 zurückgezogen wird. Ferner wird die Zurückziehungs-Warteschlange 326 gelöscht, wodurch alle nicht zurückgezogenen Anweisungen abgebrochen werden. Ferner wird die Registerzuordnungstabelle 320 auf den Inhalt der reihenfolgegemäßen Zuordnungstabelle 328 gesetzt und wird jedes nicht in der reihenfolgegemäßen Zuordnungstabelle 328 enthaltene Register zur Warteschlange für freie Register 322 hinzugefügt.
  • Ein herkömmlicher superskalarer Prozessor, welcher das Umordnen von Ladeanweisungen bezüglich vorausgehender Ladeanweisungen unterstützt (wie in 3 gezeigt), kann um Folgendes erweitert werden:
    • 1. einen Mechanismus zum Kennzeichnen von Ladeanweisungen, welche bezüglich vorausgehender Ladeanweisungen unter Missachtung der Reihenfolge ausgegeben werden;
    • 2. einen Mechanismus zum Nummerieren von Anweisungen, wie sie abgerufen werden, und zum Feststellen, ob eine Anweisung im Anweisungsstrom früher oder später auftrat. Stattdessen kann ein alternativer Mechanismus verwendet werden, um zu ermitteln, ob eine Anweisung bezüglich einer anderen Anweisung früher oder später auftrat;
    • 3. einen Mechanismus zum Speichern von Informationen über Ladeoperationen, welche unter Missachtung der Reihenfolge ausgeführt wurden, einschließlich ihrer Adresse in der Programmreihenfolge, der Adresse ihres Zugriffs und des für die größte garantierte, das geladene Datenelement enthaltende atomare Einheit gelesenen Datenwerts;
    • 4. einen Mechanismus zum Durchführen einer Kollisionsprüfung, wenn eine Ladeanweisung bezüglich einer oder mehrerer „Out-of-Order”-Ladeanweisungen reihenfolgegemäß ausgeführt wird, und zum Durchführen von Prioritätscodierung, wenn mehrere Anweisungen mit einer Ladeoperation kollidieren;
    • 5. einen Mechanismus zum Umgehen des mit einer kollidierenden Ladeoperation verknüpften Datenelements; und
    • 6. einen Mechanismus zum Löschen des in Schritt (3) erzeugten Datensatzes an der Stelle, wo der ”Out-of-Order”-Zustand in Programmreihenfolge aus der Zurückziehungs-Warteschlange 326 in die Registerdatei 311 zurückgezogen wird.
  • Die durch Gschwind offenbarten Mechanismen werden zusammen mit den im herkömmlichen, in 3 dargestellten ”Out-of-Order”-Prozessor verfügbaren Mechanismen verwendet wie folgt. Jede Anweisung wird mit einer Anweisungsnummer nummeriert, wenn sie in die Anweisungswarteschlange 303 kommt. Eine Ladeanweisung kann früher aus Abfertigungstabelle 324 abgefertigt werden als eine vorausgehende Ladeanweisung. Eine solche Ladeanweisung wird im Folgenden als eine ”Out-of-Order”-Ladeoperation bezeichnet. In einem solchen Fall wird der der Ladeanweisung entsprechende Eintrag in der Zurückziehungs-Warteschlange 326 als ein ”Out-of-Order”-Ladevorgang gekennzeichnet.
  • Das Erkennen der Abfertigung einer ”Out-of-Order”-Ladeoperation aus einer Abfertigungstabelle 324 an eine Speichereinheit 305 zur Ausführung erfolgt vorzugsweise mit zwei Zählern, einem Zähler ”Abgerufene Ladevorgänge” und einem Zähler ”Abgefertigte Ladevorgänge”. Der Zähler ”Abgerufene Ladevorgänge” wird hochgezählt, wenn ein Ladeoperation zur Abfertigungstabelle 324 hinzugefügt wird. Der Zähler ”Abgefertigte Ladevorgänge” wird hochgezählt, wenn eine Ladeoperation zur Ausführung an eine Speichereinheit 305 gesendet wird. Der aktuelle Inhalt des Zählers ”Abgerufene Ladevorgänge” wird an eine Ladeanweisung angehängt, wenn die Ladeanweisung zur Abfertigungstabelle 324 hinzugefügt wird. Wenn die Ladeanweisung zur Ausführung aus der Abfertigungstabelle 324 an eine Speichereinheit 305 abgefertigt wird, wird die Ladeanweisung als eine ”Out-of-Order”-Ladeoperation identifiziert, falls der an die Ladeanweisung in der Abfertigungstabelle 324 angehängte Wert zu diesem Zeitpunkt vom Inhalt des Zählers ”Abgefertigte Ladevorgänge” verschieden ist. Es ist zu beachten, dass die Differenz zwischen den beiden Zählerwerten der genauen Anzahl von Ladeoperationen entspricht, je nachdem, welche Ladeanweisung unter Missachtung der Reihenfolge (”out of order”) ausgegeben wird. ”Out-of-Order”-Ladeanweisungen werden nur dann an eine Speichereinheit 305 abgefertigt, wenn in der Ladereihenfolgetabelle Platz für das Hinzufügen von Einträgen verfügbar ist.
  • Die Ladereihenfolgetabelle ist eine einzelne Tabelle, auf welche alle Speichereinheiten 305 gleichzeitig zugreifen (d. h. es wird nur eine einzige logische Kopie aufrechterhalten, obwohl mehrere physische Kopien aufrechterhalten werden können, um die Verarbeitung zu beschleunigen). Es ist zu beachten, dass bei Verwendung mehrerer physischer Kopien der logische Inhalt der mehreren Kopien für alle Speichereinheiten 305 immer denselben Zustand widerspiegeln muss.
  • Die Anweisungsnummer der in Ausführung befindlichen Anweisung und die Tatsache, ob eine Anweisung spekulativ ausgeführt wird, werden der Speichereinheit 305 für jede ausgegebene Ladeoperation mitgeteilt.
  • Eine durch einen Prozessor implementierte Anweisungssatz-Architektur (ISA) definiert üblicherweise eine feste Anzahl von architekturdefinierten Allgemeinregistern, die zugänglich sind, auf Grundlage von Registerfeldern von Anweisungen der ISA. In Prozessoren für ”Out-of-Order”-Ausführung werden Umbenennungsregister zugewiesen, um Registerergebnisse spekulativ ausgeführter Anweisungen darin unterzubringen. Der Wert des Umbenennungsregisters wird als ein Wert eines architekturdefinierten Registers übergeben, wenn die entsprechende spekulative Anweisungsausführung ”übergeben” oder ”abgeschlossen” ist. Folglich gibt es in einer Registerumbenennungs-Ausführungsform zu jedem Zeitpunkt und wie es von einem im Prozessor ausgeführt werdenden Programm wahrgenommen wird, viel mehr Umbenennungsregister als architekturdefinierte Register.
  • In einer Ausführungsform von Umbenennungsregistern werden architekturdefinierten Registern und Umbenennungsregistern separate Register zugewiesen. In einer weiteren Ausführungsform sind Umbenennungsregister und architekturdefinierte Register zusammengeführte Register. Die zusammengeführten Register enthalten eine Markierung (Tag) zum Anzeigen des Zustands des zusammengeführten Registers, wobei in einem Zustand das zusammengeführte Register ein Umbenennungsregister ist und in einem anderen Zustand das zusammengeführte Register ein architekturdefiniertes Register ist.
  • In einer Ausführungsform mit zusammengeführten Registern werden die ersten n physischen Register als Teil der Initialisierung (zum Beispiel während eines Kontextwechsels oder beim Initialisieren einer Partition) als die architekturdefinierten Register zugewiesen, wobei n die Anzahl der durch die Anweisungssatz-Architektur (ISA) vereinbarten Register ist. Diese Register werden auf den Zustand ”architekturdefiniertes Register” (AR) gesetzt; die übrigen physischen Register nehmen den Zustand ”verfügbar” an. Wenn eine ausgegebene Anweisung ein Zielregister enthält, wird ein neuer Umbenennungspuffer benötigt. Aus diesem Grund wird ein physisches Register aus dem Pool der verfügbaren Register ausgewählt und dem Zielregister zugeordnet. Demgemäß wird der ausgewählte Registerzustand auf den Zustand ”Umbenennungspuffer nicht gültig” (NV – not valid) gesetzt und wird sein Gültig-Bit zurückgesetzt. Nachdem die verknüpfte Anweisung die Ausführung beendet hat, wird das erzeugte Ergebnis in das ausgewählte Register geschrieben, wird sein Gültig-Bit gesetzt und wechselt sein Zustand zu ”Umbenennungspuffer (RB – rename buffer) gültig”. Später, wenn die verknüpfte Anweisung abgeschlossen wird, wird der zugeordnete Umbenennungspuffer zu dem architekturdefinierten Register erklärt, welches das in der gerade abgeschlossenen Anweisung angegebene Zielregister implementiert. Sein Zustand wechselt dann zum Zustand eines architekturdefinierten Registers (AR), um dies widerzuspiegeln.
  • Während Register hinsichtlich der Leistungsfähigkeit fast eine Universallösung sind, haben sie einen Nachteil. Verschiedene Teile eines Computerprogramms verwenden allesamt ihre eigenen temporären Werte und konkurrieren daher um die Verwendung der Register. Da es sehr schwierig ist, die Art und Weise des Programmablaufs während der Laufzeit richtig zu verstehen, gibt es für den Entwickler keinen einfachen Weg, im Voraus zu wissen, wie viele Register er verwenden und wie viele Register er für andere Teile des Programms beiseite lassen sollte. Im Allgemeinen werden derartige Überlegungen nicht berücksichtigt, und die Entwickler und wahrscheinlicher noch die von diesen verwendeten Compiler versuchen, alle für sie sichtbaren Register zu verwenden. Im Fall von Prozessoren mit zu Anfang sehr wenigen Registern ist dies auch die einzige vernünftige Vorgehensweise.
  • Registerfenster zielen darauf ab, dieses Problem zu lösen. Da jeder Teil eines Programms Register zum eigenen Gebrauch benötigt, werden mehrere Sätze von Registern für die verschiedenen Teile des Programms bereitgestellt. Wenn diese Register sichtbar wären, gäbe es mehr Register, um welche konkurriert würde, d. h. sie müssen unsichtbar gemacht werden.
  • Das Unsichtbarmachen der Register lässt sich effizient implementieren; die CPU erkennt die Verschiebung von einem Teil des Programms zu einem anderen während eines Prozeduraufrufs. Es wird durch eine aus einer kleinen Anzahl von Anweisungen ausgeführt (Prolog) und endet mit einer aus einem entsprechend kleinen Satz (Epilog). Beim Berkeley-Aufbau würden diese Aufrufe bei Beendigen des Aufrufs an dieser Stelle einen neuen Satz von Registern ”einlagern” oder als ”inaktiv” (oder ”wiederverwendbar”) kennzeichnen lassen.
  • Prozessoren wie PowerPC sichern den Zustand in vordefinierten und reservierten Maschinenregistern. Wenn eine Ausnahmebedingung eintritt, während der Prozessor bereits den Inhalt des aktuellen Fensters verwendet, um eine weitere Ausnahmebedingung zu verarbeiten, erzeugt der Prozessor in genau dieser Situation einen doppelten Fehler.
  • In einer beispielhaften RISC-Ausführungsform sind nur acht von insgesamt 64 Registern für die Programme sichtbar. Der vollständige Satz von Registern ist als Registerdatei und jeder einzelne Satz von acht Registern ist als Fenster bekannt. Die Datei ermöglicht, dass bis zu acht Prozeduraufrufe über eigene Registersätze verfügen. Solange das Programm nicht Ketten abruft, die länger als acht Aufrufe tief sind, muss den Registern nie gestattet werden, überzulaufen, d. h. außerhalb im Hauptspeicher oder Cachespeicher gesichert zu werden, was im Vergleich zum Registerzugriff ein langsamer Prozess ist. Für viele Programme ist eine Kette von sechs so tief, wie das Programm reicht.
  • Vergleichsweise bietet eine andere Architektur gleichzeitige Sicht in vier Sätze von jeweils acht Registern. Drei Sätze von jeweils acht Registern werden ”gefenstert”. Acht Register (i0 bis i7) bilden die Eingaberegister für die aktuelle Prozedurebene.
  • Acht Register (L0 bis L7) sind für die aktuelle Prozedurebene lokal, und acht Register (o0 bis o7) sind die Ausgaben aus der aktuellen Prozedurebene an die nächste aufgerufene Ebene. Bei Aufruf einer Prozedur verschiebt sich das Registerfenster um sechzehn Register, wodurch die alten Eingaberegister und die alten lokalen Register verborgen werden und die alten Ausgaberegister zu den neuen Eingaberegistern gemacht werden. Die gemeinsamen Register (alte Ausgaberegister und neue Eingaberegister) werden zur Parameterübergabe verwendet. Schließlich sind acht Register (g0 bis g7) für alle Prozedurebenen global sichtbar.
  • Bei einem verbesserten Aufbau können die Fenster ihre Größe verändern, was im gewöhnlichen Fall, wo weniger als acht Register für einen Aufruf benötigt werden, die Verwendung unterstützt. Außerdem werden dabei die Register in einen globalen Satz von 64 und 128 weitere für die Fenster getrennt.
  • Registerfenster stellen außerdem einen einfachen Upgrade-Pfad bereit. Da die zusätzlichen Register für die Programme unsichtbar sind, können jederzeit zusätzliche Fenster hinzugefügt werden. Zum Beispiel führt die Verwendung objektorientierter Programmierung häufig zu einer größeren Anzahl ”kleinerer” Aufrufe, welche zum Beispiel durch Vergrößern der Fenster von acht auf sechzehn untergebracht werden können. Das Endergebnis ist eine geringere Anzahl langsamer Registerfensterüberlauf- und -fülloperationen, weil die Registerfenster weniger häufig überlaufen.
  • Implementierungen von ”Out-of-Order”-Anweisungen für Anweisungssatz-Architektur-(ISA-)Prozessoren können architekturdefinierte Anweisungen direkt oder unter Verwendung von durch eine Hardware-Anweisungsdecodiereinheit aufgerufener Firmware ausführen. Jedoch ”zerschlagen” viele Prozessoren architekturdefinierte Anweisungen in an Hardware-Einheiten innerhalb des Prozessors gerichtete Mikro-Operationen. Ferner kann ein CISC-(complex instruction set computer)Architektur-Prozessor CISC-Anweisungen in RISC-(reduced instruction set computer)Architektur-Anweisungen umsetzen. Um Aspekte der Erfindung zu erläutern, werden ISA-Maschinenanweisungen beschrieben und können interne Operationen (iops) intern als die ISA-Maschinenanweisung oder als kleinere Einheiten (Mikro-ops) oder Mikrocode oder auf jede in der Fachwelt allgemein bekannte Art und Weise eingesetzt werden, wobei sie hierin nach wie vor als Maschinenanweisungen bezeichnet werden. Maschinenanweisungen einer ISA haben ein Format und eine Funktion wie durch die ISA definiert, sobald die ISA-Maschinenanweisung abgerufen und decodiert wird, kann sie in iops zur Verwendung im Prozessor umgewandelt werden.
  • Viele moderne Prozessoren verwenden eine große Anzahl von physischen Registern und einen Registerumbenennungs-Ansatz, um architekturdefinierte Register einem großen Satz von physischen Registern zuzuordnen. Viele Werte in Registern werden länger aufbewahrt als erforderlich, während Prozessoren nicht wissen, wann ein Register seinen Wert nicht mehr bewahren muss. Durch Behalten nicht benötigter Werte in der Physische-Register-Datei verringert sich die Anzahl verfügbarer Register im Pool von freien Registern, was sich negativ auf die Compiler-Leistungsfähigkeit auswirkt, und kommt es zu einer weniger aggressiven ”Out-of-Order”-Ausführung, niedrigerer Prozessorleistung, erhöhtem Strom- und Energieverbrauch und erhöhter Anfälligkeit von Transaktionen für normale Fehler wegen der längeren Ausführungszeit. Außerdem ermöglichen mehr verfügbare Register höhere Leistung für die Multithread-Ausführung und für mehrere Partitionen, wodurch eine besser Plattform für die Virtualisierung bereitgestellt wird, um Cloud-Computing-Umgebungen zu ermöglichen. Schließlich erhöht das Behalten nicht benötigter Werte die Anzahl verwundbarer Daten, die transiente Fehler erleiden können, welche entweder korrigiert werden oder eine Maschinenfehler-Anzeige auslösen müssen, um eine Anwendung, eine Partition oder ein System zu stoppen, um eine Ausbreitung fehlerhafter Daten zu vermeiden.
  • Im Fall von Multithread-Prozessoren kann ein Prozessor einen Thread abschließen, wenn etwaige persistente Daten im Hauptspeicher gespeichert wurden und wenige Register, wenn überhaupt eines, Werte enthalten können, die in der Zukunft gebraucht werden. An diesem Punkt könnten dem Thread zugewiesene architekturdefinierte Register in den Pool zurückgegeben werden, wenn der Prozessor wüsste, dass nicht mehr auf sie zugegriffen werden soll.
  • In einem Aspekt der Erfindung ist ein architekturdefiniertes Register möglicherweise ”nicht zugeordnet”, wenn angezeigt wird, dass sein Wert nicht mehr verwendet wird. So wird, wenn eine Anweisung angibt, dass ein letzter Verweis auf eine Zustandsbewahrungsposition (state holding location) aufgetreten ist oder gerade auftritt, das physische Register von der Zuordnung zum architekturdefinierten Register befreit und in den Pool von verfügbaren Registern zurückgegeben. In einer Ausführungsform werden Mechanismen verwendet, um Anweisungen abzurufen, Anweisungen unter Missachtung der Reihenfolge (”out of order”) auszugeben, einschließlich der Fähigkeit, Abhängigkeiten zwischen den Anweisungen zu erkennen, die von einer Anweisung verwendeten Register umzubenennen, die Verfügbarkeit der von einer Anweisung verwendeten Ressourcen zu erkennen und die Zuordnung eines Registers zu entfernen, das als ”Letztverwendung” gekennzeichnet wurde, und in einer seinen Inhalt nicht verfügbar machenden Ausführungsform den ”Out-of-Order”-Zustand des Prozessors zu bewahren, welcher die Auswirkungen von Anweisungen, während sie (unter Missachtung der Reihenfolge) ausgeführt werden, widerspiegelt, Anweisungen in Programmreihenfolge zurückzuziehen, gleichzeitig den reihenfolgegemäßen Zustand mit den Auswirkungen der zurückgezogen werdenden Anweisung zu aktualisieren und eine Anweisung in Programmreihenfolge zurückzuziehen, ohne den reihenfolgegemäßen Zustand zu aktualisieren (wobei die Auswirkungen der zurückgezogen werdenden Anweisung wirksam aufgehoben werden), und die reihenfolgegemäße Ausführung des Programms beginnend mit der zurückgezogen werdenden Anweisung wiederaufzunehmen (was das Aufheben aller im ”Out-of-Order”-Zustand vorliegenden Auswirkungen impliziert).
  • Heutzutage müssen Mikroprozessoren alle Werte, die so beschrieben werden, dass sie durch den Anweisungsstrom berechnet werden, berechnen und bewahren, bis dieser Wert überschrieben wird.
  • Viele moderne Prozessoren verwenden den Ansatz der Registerumbenennung, um architekturdefinierte Register einem großen Satz (Pool) von physischen Registern zuzuordnen.
  • Werden nicht benötigte Werte länger als erforderlich in Registern aufbewahrt, hat dies merkliche Beeinträchtigungen zur Folge, die zu einem Verlust an Zuverlässigkeit (RAS) und Leistung sowie zu erhöhtem Strom- und Energieverbrauch führen.
  • Computer haben üblicherweise ein Betriebssystem (OS) und ein oder mehrere auf einem oder mehreren Prozessoren laufende Anwendungsprogramme. Das OS verwaltet Ressourcen und stellt eine Anwendungsschnittstelle für Anwendungsprogramme bereit, um auf Ressourcen zuzugreifen. Das OS läuft üblicherweise mit Primärberechtigung auf den Prozessoren. Das OS gestattet Anwendungen, für Zeitspannen auf dem Prozessor zu laufen, indem es den Prozessor veranlasst, einen Kontextwechsel von für das OS bereitgestellten Ressourcen zu für das Anwendungsprogramm bereitgestellten Ressourcen vorzunehmen. An irgendeinem Punkt wird ein weiterer Kontextwechsel vom Anwendungsprogramm zum OS auftreten, zum Beispiel wegen eines Fehlers, auf den das Anwendungsprogramm oder das das OS aufrufende Anwendungsprogramm gestoßen ist.
  • Der architekturdefinierte Zustand (Kontext) eines Threads, eines Prozesses und eines Prozessors enthält durch die Architektur definierte und mit dem Thread, dem Prozess beziehungsweise dem Prozessor verknüpfte Register und Speicherwerte. Deshalb muss Software bei Kontextwechseln immer den gesamten mit dem Thread, Prozess oder Prozessor verknüpften Zustand speichern und wiederherstellen und muss Hardware teure Register unterhalten, um nicht benötigte Zustände von Ressourcen zu bewahren, die anderweitig zugeordnet werden könnten, um eine Leistungsbeschleunigung zu erreichen. Schließlich erhöht die Bewahrung nicht benötigter Zustände die Verwundbarkeit eines Systems durch Einzelereignis-Störungen (d. h. normale Fehler), wodurch die Zuverlässigkeit abnimmt, weil mehr Zustände verwundbar sind, und verändert sich die Fehlerrate proportional zur Anzahl der zustandsführenden Elemente, wobei das System bei Auftreten eines Fehlers immer davon ausgehen muss, dass es zu einer Beschädigung von Benutzerdaten gekommen ist, welche entweder kostspielige Korrektureinrichtungen erfordert oder fehlerhafte Daten anzeigt, z. B. mit einem Maschinenfehler-Stopvorgang, und die Systemverfügbarkeit beeinträchtigt.
  • Statusinformationen in einem Computersystem enthalten üblicherweise einen Programmbefehlszähler-Wert (die Speicheradresse der nächsten auszuführenden Anweisung), architekturdefinierte allgemeine Registerwerte (in einer beispielhaften Architektur 16 × 64-Bit-Register, in weiteren beispielhaften Architekturen beispielsweise 64 × 64-Bit-Register), architekturdefinierte Gleitkommaregister (in einem Beispiel beispielsweise 32 × 128-Bit-Register) und weitere für ein Programm verfügbare Register (wie beispielsweise IBM zArchitecture-Zugriffsregister). Weiterer Kontext könnte Bedingungscodes enthalten, die Informationen über ein Ergebnis einer vorher ausgeführten Anweisung angeben.
  • Wenn ein Betriebssystem in einem Prozessor aufgerufen wird, der zum Beispiel gerade eine Anwendung ausführt, wird der Kontext der Anwendung gesichert (zum Beispiel im Hauptspeicher), wobei der Programmbefehlszähler auf eine auszuführende nächste Anweisung und durch das Anwendungsprogramm bis zu diesem Punkt berechnete Registerwerte verweist, so dass, wenn die Ausführung des Anwendungsprogramms zu einem späteren Zeitpunkt wiederaufgenommen wird, der Programmbefehlszähler wiederhergestellt werden kann, damit die Ausführung der Anwendung beginnend mit der nächsten Anweisung mit den vorher berechneten Registerwerten wiederaufgenommen werden kann.
  • Nach Stand der Technik stellten Computeranweisungssatz-Architekturen (ISAs) eine feste Anzahl von Ressourcen (beispielsweise allgemeine Register) bereit und konnten Anweisungen eine der Ressourcen explizit oder implizit als eine adressierbare Entität angeben. Eine ISA, die 32 allgemeine Register vereinbart, würde die ISA ausführende Prozessoren erfordern, um stets den Kontext jedes einzelnen der 32 Register zu bewahren. In einer Ausführungsform wird nur eine Teilmenge der bezeichneten Ressource (32 Register) aktiviert, um einem Prozessor zu erlauben, die Tatsache auszunutzen, dass Kontext nur für aktivierte Ressourcen (Register) bewahrt zu werden braucht. So kann zum Beispiel, wenn eine aktivierte Ressource inaktiviert wird, der Wert der aktivierten Ressource gelöscht statt gesichert werden. Jeder Zugriff auf eine inaktivierte Ressource würde vorzugsweise einen architekturdefinierten Wert oder eine architekturdefinierte Bedingung anstelle eines zuletzt in der Ressource gespeicherten Werts liefern.
  • In einer Ausführungsform können Anweisungen eine Letztverwendung eines Registers angeben, was das Versetzen des Registers in einen inaktivierten Zustand bewirkt. In einer Ausführungsform wird ein Register in einem inaktivierten Zustand durch eine in das Register speichernde Anweisung in einen aktivierten Zustand versetzt. In einer Ausführungsform kann eine Anweisung Register angeben, die in einer weiteren Anweisung in einen inaktivierten Zustand zu versetzen sind. Zum Beispiel kann eine Präfixanweisung ein Register (oder eine Gruppe von Registern) angeben, das bzw. die in der nächsten folgenden Anweisung, einer späteren Anweisung oder sogar einer früheren Anweisung in Programmreihenfolge letztmals verwendet werden. In einer weiteren Ausführungsform kann eine Anweisung Register angeben, die in einer weiteren Anweisung in einen aktivierten Zustand zu versetzen sind. Zum Beispiel kann eine Präfixanweisung ein Register (oder eine Gruppe von Registern) angeben, das bzw. die in der nächsten folgenden Anweisung, einer späteren Anweisung oder sogar einer früheren Anweisung in Programmreihenfolge in einen aktivierten Zustand versetzt werden sollen.
  • Levy schlägt Anweisungen zur Angabe einer letzten Verwendung eines Umbenennungsregisters vor. Wie allgemein bekannt ist, ist ein Umbenennungsregister eine spekulative Form eines architekturdefinierten Registers, das vorübergehend Operanden für Anweisungen enthält, die nicht abgeschlossen sind. Levy sagt nichts darüber, wie ein Ereignis zu behandeln ist, wo eine spekulative Anweisung tatsächlich abgeschlossen wird, deren Umbenennungsregister inaktiviert und in den Pool von verfügbaren physischen Registern zurückgegeben wurde, oder wie Umbenennungsregister auf irgendeine Weise mit Kontextwechseln zu tun haben könnten. Ferner sind Umbenennungsregister keine architekturdefinierten Register, sie sind spekulative Register, die durch einen Kontextwechsel nicht gesichert oder wiederhergestellt werden. Umbenennungsregister sind für Compiler und Programme unsichtbar. Ausführungsformen befassen sich mit architekturdefinierten Ressourcen einschließlich allgemeiner Register, die für Compiler und Programmierer sichtbar sind. Ausführungsformen beinhalten, wie Kontextwechsel, Fehlererkennung und verschiedenartige Zugriffe auf von ihrer Zuordnung befreite architekturdefinierte Operanden (Register) gehandhabt werden.
  • Compilern (und Programmierern) ist klar, wann sie einen Wert nicht mehr brauchen. Es wird ein Weg bereitgestellt, einem Mikroprozessor bekannte Programmentwicklungs- und Kompilierzeit-Informationen mitzuteilen, damit der Mikroprozessor weiß, dass Werte nicht mehr benötigt werden, zum Beispiel dass zukünftige Anweisungen nicht auf einen Operandenwert in einem Register zugreifen werden, so dass das Register in einen inaktivierten Zustand versetzt werden und der Inhalt vom Prozessor gelöscht oder ignoriert werden kann. Eine solche Bedingung kann zum Beispiel vorliegen, wenn eine Anweisung ein Ergebnis und einen Bedingungscode sichert, wobei der Anweisung eine Verzweigungsanweisung zur Verzweigung auf Grundlage des Bedingungscodes folgt. Die Anweisung ist eine allgemeine Anweisung, und in anderen Verwendungen wird der gespeicherte Wert benötigt, in dieser Verwendung der allgemeinen Anweisung jedoch wird nur der Bedingungscode benötigt und greift keine zukünftige Anweisung auf das gespeicherte Ergebnis zu.
  • Eine beispielhafte Prozessor-Pipeline weist auf:
    • 1. einen Mechanismus zum Abrufen von Anweisungen;
    • 2. einen Mechanismus zum Ausgeben abgerufener Anweisungen unter Missachtung der Reihenfolge (”out of order”) einschließlich der Fähigkeit, Abhängigkeiten zwischen den Anweisungen zu erkennen, die von einer Anweisung verwendeten Register umzubenennen und die Verfügbarkeit der von einer Anweisung verwendeten Ressourcen zu erkennen;
    • 3. einen Mechanismus zum Bewahren des ”Out-of-Order”-Zustands des Prozessors, welcher die Auswirkungen von Anweisungen, während sie (unter Missachtung der Reihenfolge) ausgeführt werden, widerspiegelt;
    • 4. einen Mechanismus zum Zurückziehen von Anweisungen in Programmreihenfolge, der gleichzeitig den reihenfolgegemäßen Zustand mit den Auswirkungen der zurückgezogen werdenden Anweisung aktualisiert;
    • 5. einen Mechanismus zum Zurückziehen einer Anweisung in Programmreihenfolge, ohne den reihenfolgegemäßen Zustand zu aktualisieren (wobei die Auswirkungen der zurückgezogen werdenden Anweisung wirksam aufgehoben werden), und zum Wiederaufnehmen der reihenfolgegemäßen Ausführung des Programms beginnend mit der zurückgezogen werdenden Anweisung (was das Aufheben aller im ”Out-of-Order”-Zustand vorliegenden Auswirkungen impliziert).
  • Ein Computerprozessor kann eine Anweisungsabrufeinheit zum Erlangen von Anweisungen aus dem Hauptspeicher, eine Decodiereinheit zum Decodieren von Anweisungen, eine Ausgabewarteschlange zum Einreihen von auszuführenden Anweisungen, Ausführungseinheiten zum Ausführen der Funktion von Anweisungen und eine Abfertigungseinheit zum Abfertigen von Anweisungen an entsprechende Ausführungseinheiten vorzugsweise in einer Pipeline aufweisen. In Ausführungsformen können zum Beispiel eine Ausgabewarteschlange, eine Decodiereinheit oder eine Abfertigungseinheit allein oder in Verbindung miteinander eine Anweisung so verändern, dass sie nach einer vorherigen Anweisung nicht ausgeführt zu werden braucht.
  • In einer Ausführungsform ermittelt der Prozessor, dass es eine erste Anweisung und eine zweite Anweisung gibt, wobei die zweite Anweisung so konfiguriert ist, dass sie die Ergebnisse der Ausführung der ersten Anweisung beim Ausführen der zweiten Anweisung verwendet. Ein Test der beiden Anweisungen ermittelt, dass sie verändert werden können, um Anweisungen zu erzeugen, die effizienter ausgeführt werden können. In einem Beispiel ermöglicht die Veränderung, die beiden Anweisungen ”out of order” (unter Missachtung der Reihenfolge) auszuführen (die zweite Anweisung (die zweite in der Programmreihenfolge) hängt nicht von Ergebnissen der ersten Anweisung (der ersten in der Programmreihenfolge) ab).
  • In einer beispielhaften Ausführungsform stellt ein architekturdefinierter Anweisungssatz Direktanweisungen bereit (Direktanweisungen haben ein Direktfeld, das bisweilen als Verschiebungsfeld oder Konstantenfeld bezeichnet wird, wobei das Direktfeld einen Direktwert bereitstellt). Die Direktanweisung kann auch ein Registerfeld enthalten, wobei ein Operand ein Registerwert eines durch das Registerfeld identifizierten Registers ist oder wobei ein Operand ein Speicherwert einer durch den Registerwert bestimmten Speicherposition ist. Außerdem weist die Direktanweisung ein Opcode-Feld auf, das einen Wert enthält, der eine durchzuführende Operation bestimmt (wie zum Beispiel ADDIEREN, SUBTRAHIEREN, UND, ODER, Laden, Speichern). Die Ausführung der Direktanweisung führt die Operation unter Verwendung des Operandenwerts und des Direktwerts durch und kann das Ergebnis in einem von der Direktanweisung angegebenen Ergebnisregister (oder im Hauptspeicher) speichern.
  • In einer beispielhaften Architektur enthält der Anweisungssatz eine Direktanweisung, in welcher eine Operation nur an einem Teil des Operanden durchgeführt wird. So kann zum Beispiel ein Direktwert zu einem niedrigstwertigen Teil des Operanden addiert werden. Der Anweisungssatz kann ein 16-Bit-Direktfeld und ein 32-Bit-Register bereitstellen, wobei in diesem Fall das Laden einer Konstante in ein 32-Bit-Register zwei Direktanweisungen erfordern würde. In einer beispielhaften Sequenz von Anweisungen wird eine erste Direktanweisung verwendet, um den niedrigstwertigen Teil zu laden, und wird eine zweite Direktanweisung verwendet, um den höchstwertigen Teil zu laden. In einem anderen Anweisungssatz können Direktfelder 8 Bits und Register 32 Bits haben, wobei in diesem Fall 4 Direktanweisungen erforderlich wären, um eine Konstante in das Register zu laden. In manchen Umgebungen wird möglicherweise nur ein Teil des Operanden benötigt, wie beim Erstellen einer Tabellenadresse, wobei durch eine Anweisung in einer Sequenz von Anweisungen nur der niedrigstwertige Teil bereitgestellt wird (wobei jede Sequenz von Anweisungen durch Verwendung eines Direktwerts für einen niedrigstwertigen Teil des Registers einen Tabelleneintrag identifiziert, aber den höchstwertigen Teil, der die Tabelle lokalisiert, nicht betrifft). In diesem Fall werden zum Laden der niedrigstwertigen 16 Bits des 32-Bit-Registers nur zwei 8-Bit-Direktanweisungen benötigt.
  • In einer beispielhaften Ausführungsform sind zwei Direktanweisungen in einem Programm enthalten, wobei auf eine erste Direktanweisung in der Programmreihenfolge eine zweite Direktanweisung folgt. Jede Anweisung enthält ein 16-Bit-Direkt-(oder Verschiebungs-)Feld (disp) und ein Zielregister (RT). Die Funktion der ersten Direktanweisung besteht darin, den Wert des ersten disp-Felds in den niedrigstwertigen Teil des ersten RT zu laden. Die Funktion der zweiten Direktanweisung besteht darin, den Wert des zweiten disp-Felds in den höchstwertigen Teil des zweiten RT zu laden. Der die beiden Anweisungen ausführende Prozessor stellt fest, dass die beiden Anweisungen zum Beispiel in einer Ausgabewarteschlange des Prozessors kombiniert werden können, weil der Prozessor über die Fähigkeit verfügt, die beiden Anweisungen zu erkennen und die disp-Felder durch Verketten des ersten disp und des zweiten disp zu einem internen Datenwert zusammenzusetzen, der in die Pipeline passt, wobei die erste Anweisung gelöscht wird und eine veränderte zweite Anweisung, welche den verketteten Wert als ein disp-Feld enthält, erstellt wird. In einer Ausführungsform ist der interne Datenwert, der unterstützt wird, so schmal, dass nur ein Teil des zweiten disp-Werts kombiniert werden kann, wobei in diesem Fall der Prozessor nur das Auftreten zweiter disp-Werte erkennt, die klein genug sind. Die Direktanweisungen haben die Form:

    RT←disp

    wobei
    • erste Anweisung: RT←disp(low)
    • zweite Anweisung: RT←disp(high)
    • veränderte zweite Anweisung: RT←disp(high)//disp(low)
  • In einer weiteren Ausführungsform enthalten die erste und die zweite Anweisung außerdem ein zweites Registerfeld (RA-Feld) zum Identifizieren eines Operandenregisters (RA).

    Anweisungsform RT←RA, disp
  • Durch jede das Operandenregister RA und das disp-Feld verwendende Anweisung wird eine Funktion durchgeführt. Ein Auftreten der beiden Anweisungen wird erkannt, wobei jede Anweisung dieselbe Operation durchführt, jedoch nur an einem Teil von RA und RT. Zum Beispiel werden der RA-Wert und der disp-Wert durch eine logische UND-Anweisung UND-verknüpft:
    • erste Anweisung: r2←r3, disp(high) [disp wird mit dem hohen Teil des Werts des r3-Registers UND-Verknüpft, und das Ergebnis wird in den hohen Teil des r2-Registers gestellt]
    • zweite Anweisung: r2←r3, disp(low) [disp wird mit dem niedrigen Teil des Werts des r3-Registers UND-Verknüpft, und das Ergebnis wird in den niedrigen Teil des r2-Registers gestellt]
    • veränderte zweite Anweisung: r2←r3, disp(high)//disp(low) [disp(high) verkettet mit disp(low) wird mit dem Wert des r3-Registers UND-Verknüpft, und das Ergebnis wird in das r2-Register gestellt]
  • In einer Variante wird eine arithmetische Operation in zwei Anweisungen durchgeführt, wobei in diesem Fall die beiden Anweisungen in Programmreihenfolge ausgeführt werden müssen, da das Ergebnis der ersten Anweisung benötigt wird, um die zweite Anweisung auszuführen. In diesem Beispiel müssen ein r2- und ein r4-Ergebnis in den Registern gespeichert werden. In diesem Fall wird die zweite Anweisung verändert, um ein internes Paar von Anweisungen zu erstellen, die ”out of order” (unter Missachtung der Reihenfolge) ausgeführt werden können.
    • erste Anweisung: r2←r3, disp(high) [addiert ein 8-Bit-disp verkettet mit 8 niedrigstwertigen Nullen zum Wert des 16-Bit-r3-Registers und stellt das Ergebnis in das 16-Bit-r2-Register]
    • zweite Anweisung: r4←r2, disp(low) [addiert ein vorzeichenerweitertes 8-Bit-disp (16 Bits) zum 16-Bit-r2-Register und stellt das Ergebnis in das 16-Bit-r4-Register]
    • veränderte zweite Anweisung: r4←r3, disp(high)//disp(low) [addiert disp(high) verkettet mit disp(low) zum Wert des r3-Registers und stellt das Ergebnis in das r4-Register]
  • In einer Ausführungsform besteht eine erste Anweisungssequenz aus mindestens einer ersten Anweisung ”i0” und einer zweiten Anweisung ”i1” und einer Sequenz von mehreren internen Anweisungen (internen ops (iops)), welche Verbesserungen der Anweisungssequenz sind. Zum Beispiel könnte eine Erzeugeranweisung, auf welche eine Verbraucheranweisung in Programmreihenfolge (welche reihenfolgegemäße Ausführung erfordert) folgt, optimiert werden, um iop0 entsprechend der Erzeugeranweisung und iop1 entsprechend der Verbraucheranweisung zu erstellen, wobei iop0 und iop1 ”out of order” (unter Missachtung der Reihenfolge) ausgeführt werden können.
  • 4A zeigt eine beispielhafte Ausführungsform. Ein erster Decodierer 0 402 empfängt aus einem Anweisungs-Cachespeicher (I-Cachespeicher) 401 eine erste Anweisung 0 (I0), und ein zweiter Decodierer 1 403 empfängt eine zweite Anweisung I1. Die Decodierer 402 403 führen eine anfängliche Decodierung 405 407 durch und stellen Informationen 411 412 413 416 über die decodierte Vielzahl von Anweisungen (dargestellt durch mindestens eine Anweisung I0 und eine Anweisung I1) für eine Optimierungsanalyse-Steuerkomponente (OAE – Optimization Analysis Engine) 409 bereit. Eine Anweisungsdecodierlogik in den Decodierern 0 405 und 1 407 erzeugt außerdem eine anfängliche decodierte iop-Darstellung für die einer ersten iop (iop0) 414 und einer zweiten iop (iop1) 415 entsprechende erste beziehungsweise zweite Anweisung, wenn keine Optimierung stattfindet.
  • In einer Ausführungsform vergleicht die OAE 409 die decodierten Kenndaten der Anweisungen in beispielhaften Decodierern 0 402 und 1 403, um zu ermitteln, ob sie einer aus einer Vielzahl von zusammengesetzten Sequenzen, die Optimierungskandidaten sind, entsprechen. Gemäß einer Ausführungsform reagiert die OAE 409 außerdem auf eine Vielzahl von Steuersignalen, um das Erkennen von zusammengesetzten Sequenzen zu unterdrücken, z. B. wenn ein Konfigurationsbit gesetzt ist. Konfigurationsbits können implementierungspezifischen Registern entsprechen, um alle oder eine Teilmenge der zusammengesetzten Anweisungen zu inaktivieren, um die Decodierzeit-Anweisungsoptimierung (DTIO – decode time instruction optimization) zu inaktivieren, wenn ein Entwurfsfehler erkannt wurde, wenn festgestellt wurde, dass das Durchführen einer DTIO-Sequenz nicht mehr vorteilhaft ist, wenn ein Prozessor in den Einzelanweisungs-(Tracing-)Modus eintritt und so weiter. Die OAE 409 kann eine einzige Entität sein, wie in 4A gezeigt, oder kann repliziert, verteilt, aufgeteilt oder anderweitig in einen oder mehrere der Decodierer 0 402 und 1 403 integriert sein, und die OAE 409 kann in einem einzigen großen zusammengesetzten Decodierer kombiniert sein, z. B. einschließlich, ohne darauf beschränkt zu sein, eines die OAE 409 enthaltenden komplexen Decodierers, des Decodierers 0 402 und des Decodierers 1 403 in einer Einzelstruktur, um Logikoptimierung und Verbesserungen am Schaltungsentwurf zu erleichtern.
  • Die OAE stellt eine Information bereit, die angibt, ob eine zusammengesetzte Sequenz, welche optimiert werden kann, erkannt wurde, sowie eine Information über die Beschaffenheit der Sequenz (d. h., welche aus einer Vielzahl von Anweisungs- und spezifischen Eigenschaften der Sequenz die Decodierer-Optimierungslogik benötigt, um eine optimierte Sequenz zu erzeugen). Die OAE stellt außerdem eine Steuerungslogik für eine Auswahlfunktion bereit, um entweder eine durch die anfängliche Decodieroperation erzeugte nicht-optimierte iop oder eine einer iop in einer optimierten DTIO-Sequenz entsprechende iop, welche durch eine ”Optimierungslogik” unter Kontrolle der OAE-Steuersignale erzeugt wurde, und zusätzliche, von Decodierern, die einen Teil einer optimiert werdenden zusammengesetzten Sequenz decodiert haben, empfangene Informationen wie zum Beispiel Registerangaben, Direktfelder und Operationscodes auszuwählen.
  • Die OAE 409 kann einer Auswahllogik 419 410 Auswahlinformationen 418 zum Ermitteln, ob die jeweiligen Anweisungen I0 oder I1 iop0 414 beziehungsweise iop1 415 erzeugen sollten oder ob eine optimierte Anweisung verwendet werden sollte, bereitstellen.
  • Eine Ausführungsform eines OAE- 409 Prozesses wird im folgenden beispielhaften Pseudo-Code dargelegt:
    Figure 00380001
    Figure 00390001
  • In einer beispielhaften Ausführungsform auf Grundlage der PowerPC-Architektur sind die folgenden beiden Anweisungen Optimierungskandidaten:
    • erste Direktanweisung: ADDIS r9 = r2, high_field(disp) ...
    • zweite Direktanweisung: ADDI r3 = r9, low-field(disp)
    wobei die erste und die zweite Direktanweisung die generische Form haben:

    ADDIS (RT)←(RA) + (SIMM//0x0000}
    ADDI (RT)←(RA) + (vorzeichenerweiterter SIMM)

    wobei die erste Anweisung ein erstes Direktfeld (disp), ein erstes Registerfeld (r2) und ein erstes Ergebnisregisterfeld (r9) aufweist und die erste Anweisung so konfiguriert ist, dass sie eine Operation (ADDIS) durchführt, die einen Wert des ersten Direktfelds und den höchstwertigen Teil eines durch das erste Registerfeld identifizierten Registers verwendet, und das Ergebnis im durch das erste Ergebnisregisterfeld angegebenen ersten Ergebnisregister speichert. Die zweite Anweisung enthält ein zweites Direktfeld (disp), ein zweites Registerfeld (r9) und ein zweites Ergebnisregisterfeld (r3), und die zweite Anweisung ist so konfiguriert, dass sie eine Operation durchführt, die einen Wert des zweiten Direktfelds und den niedrigstwertigen Teil eines durch das erste Registerfeld identifizierten Registers verwendet, und das Ergebnis im durch das zweite Ergebnisregisterfeld angegebenen zweiten Ergebnisregister speichert. Zum Beispiel ist eine ADDIS-Anweisung die erste Anweisung und ist eine ADDI-Anweisung die zweite Anweisung. (Diese beiden Anweisungen werden als Beispiele zur Erläuterung von Ausführungsformen der Erfindung verwendet, aber weitere Ausführungsformen werden durch Umsetzen von Aspekten der Erfindung in die Praxis ermöglicht). Natürlich kann es in manchen Umgebungen weitere Zwischenanweisungen zwischen der ersten Direktanweisung und der zweiten Direktanweisung geben.
  • ADDIS verkettet einen 16-Bit-Direktfeldwert als höchstwertige 16 Bits mit 16 niedrigstwertigen Nullen und addiert den verketteten vorzeichenerweiterten 32-Bit-Wert arithmetisch zu einem Operanden, der sich auf einer von der Anweisung angegebenen RA-Registeradresse befindet. Das Ergebnis wird in einem von der Anweisung angegebenen RT-Ergebnisregister (r9) gespeichert. (Es ist zu beachten, dass in der PowerPC-ISA zu dem verketteten 32-Bit-Wert 32 oder 64 Nullen hinzugefügt werden, wenn das RA-Feld Register 0 angibt.)
  • ADDI verkettet einen 16-Bit-Direktfeldwert, erweitert diesen um ein Vorzeichen und addiert den vorzeichenerweiterten Wert arithmetisch zu einem Operanden, der sich auf einer von der Anweisung angegebenen RA-Registeradresse befindet. Das Ergebnis wird in einem von der Anweisung angegebenen RT-Ergebnisregister (r9) gespeichert. (Es ist zu beachten, dass in der PowerPC-ISA zu dem verketteten 32-Bit-Wert 32 oder 64 Nullen hinzugefügt werden, wenn das RA-Feld Register 0 angibt.)
  • Die ”Load Immediate”-(LI-)Anweisung (die PowerPC-li-Anweisung ist eine Form der addi-Anweisung, bei welcher A = 0) speichert einen vorzeichenerweiterten niedrigstwertigen 16-Bit-Direktwert in einem Zielregister (rD).
  • Figure 00410001
  • Figure 00420001
  • Die zweite Anweisung kann so verändert werden, dass sie das erste Direktfeld und das zweite Direktfeld enthält (durch Verketten des gesamten oder eines Teils des ersten Direktfelds mit dem zweiten Direktfeld) und das durch das r2-Feld angegebene zweite Register (anstelle des durch das r9-Feld angegebenen ersten Registers) angibt, so dass die resultierende veränderte zweite Anweisung bezüglich der Ausführung der ersten Anweisung ”out of order” (unter Missachtung der Reihenfolge) ausgeführt werden kann:
    • erste Direktanweisung: ADDIS r9 = r2, high_field(disp)
    • veränderte zweite Direktanweisung: ADI r3 = r2, high_field//low-field(disp)
  • In einer Ausführungsform, in welcher wegen Pipeline-Beschränkungen nur ein Teil der Direktfelder verkettet werden kann, ermittelt eine Auswerteschaltung, dass das erste Direktfeld eine vordefinierte Anzahl von höchstwertigen Nullen hat, und verkettet sie nur einen Teil des ersten Direktfelds mit dem zweiten Direktfeld, um die veränderte Anweisung zu bilden. Wenn die erste Anweisung weniger höchstwertige Nullen hat, wird sie ohne Veränderung reihenfolgegemäß ausgeführt. In einer alternativen Ausführungsform kann eine Auswerteschaltung erkennen, dass das erste Direktfeld eine vordefinierte Anzahl von höchstwertigen Nullen oder Einsen hat, und verkettet sie nur einen Teil des ersten Direktfelds mit dem zweiten Direktfeld, um die veränderte Anweisung zu bilden.
  • In einer weiteren beispielhaften Ausführungsform

    ADDIS r9 = r2, low_field(disp)
    ADDI r3 = r9, high-field(disp)

    weist die erste Anweisung ein erstes Direktfeld (low-field(disp)) auf und weist die zweite Anweisung ein zweites Direktfeld (high-field(disp)) auf, wobei in diesem Fall die zweite Anweisung ähnlich dem vorherigen Beispiel durch Ersetzen des zweiten Registerfelds durch das erste Registerfeld und Verketten des gesamten oder eines Teils des ersten Direktfelds (eines low-field(disp)) als eines niedrigstwertigen Werts mit dem zweiten Direktfeld (einem low-field(disp)) als einem höchstwertigen Wert verändert werden kann.
    • erste Direktanweisung: ADDIS r9 = r2, low_field(disp)
    • veränderte zweite Direktanweisung (ADDI→ADDIM): ADDIM r3 = r2, high_field(disp)//low-field(disp)
  • In einer Ausführungsform arbeiten ein Prozessor und ein Compiler zusammen, um die Funktion zu erleichtern. Die Compiler-Entwickler identifizieren Kombinationen von ersten und zweiten Direktanweisungen für kompilierte Programme, die sich für Aspekte der Erfindung eignen würden. Der Prozessor ist speziell dafür entworfen, ein Auftreten der ersten und zweiten Direktanweisungen in einem Anweisungsstrom zu erkennen und die zweiten Direktanweisungen gemäß einem vordefinierten Kriterium zu verändern. Der Compiler kompiliert Code unter Verwendung von Anweisungen, welche die veränderten zweiten Direktanweisungen entsprechend auslösen werden.
  • Im vorherigen Beispiel kann das vordefinierte Kriterium eine ADDIS-Anweisung (ADDIS-Opcode) sein, der eine ADDI-Anweisung (ADDI-Opcode) folgt, wobei das RT-(Ergebnisregister-)Feld der ADDIS-Anweisung dasselbe wie das RA-Feld der ADDD-Anweisung ist. In einer weiteren Ausführungsform könnte die Reihenfolge verallgemeinert sein, wobei das bevorzugte Kriterium eine ADDIS-Anweisung (ein ADDIS-Opcode) in Verbindung mit einer ADDI-Anweisung (einem ADDI-Opcode und einschließlich des Sonderfalls der LI-Operation von ADDI, wobei RA = 0) ist, wobei das RT-(Ergebnisregister-)Feld der ersten dasselbe wie das RA-Feld der zweiten Anweisung ist.
  • In einer Ausführungsform ist die Steuerkomponente so konfiguriert, dass sie eine Vielzahl von Mustern erkennt und Steuersignale erzeugt. Beispielhafter Pseudocode der Optimierungsanalyse-Steuerkomponente lautet wie folgt:
    Figure 00440001
    Figure 00450001
  • Die Beispielfunktion lautet wie folgt.
  • 1. IF-Klausel
    • x1 ”addis rD1, rA1, SIMM(1)”
    • x2 ”addi rD2, rA2, SIMM(2)”
  • Jedes addis (x1), auf das bestimmte zusätzliche Anweisungen folgen, die auf ein GPR (x2) zielen (wie D-Form-PowerPC-Anweisungen), wobei das Zielregister von addis dasselbe wie ein Basisadressenregister der Quelle ist (rD1 ist dasselbe Register wie rA2), das kein Speicher ist (d. h. addi-Anweisungen und Ladevorgänge, und wobei der Verschiebungswert in Decodierer 0 ein als displacement_OK ausgedrücktes Kriterium erfüllt (z. B. eine Beschränkung der Anzahl von Bits), erzeugt Steuersignale, um anzugeben, dass eine DTIO-Optimierung erkannt wurde (select_DTIO), ein vorzugsweise mit der Auswahllogik in 4A verbundenes Signal, um:
    • a) die spezifische zusammengesetzte Sequenz (DTIO_SEQ_no) anzugeben, welche dann von der Optimierungslogik verwendet wird, um veränderte Signale zu erzeugen
    • b) ein Steuersignal zu erzeugen, das angibt, ob die iop in Decodierer 0 ausgegeben oder durch eine NOP (decoder0_subsume) ersetzt werden sollte und ob Decodierer 1 die Verschiebung aus Decodierer 0 mit seiner eigenen Verschiebung kombinieren sollte. (In einer Ausführungsform überprüft die 1. Klausel, ob rD1 und rD2 dasselbe Register angeben, in welchem Fall die erste Anweisung (x1) gelöscht oder durch eine no-op ersetzt wird.
  • 2. IF-Klausel
    • x1 ”addis rD1, rA1, SIMM(1)”
    • x2 ”addi rD2, rA2, SIMM(2)”
  • Jedes addis (x1), auf das eine bestimmte zusätzliche Anweisung folgt, die auf ein GPR zielt (wie D-Form-PowerPC-Anweisungen) (x2), wobei das Zielregister von addis dasselbe wie das Basisadressenregister der Quelle ist (rD1 ist dasselbe Register wie rA2) und wobei der Verschiebungswert (SIMM(1)//0x0000) in Decodierer 0 ein als displacement_OK ausgedrücktes Kriterium erfüllt (z. B. eine Beschränkung der durch iops des Prozessors unterstützten Anzahl von Bits) Dies erzeugt Steuersignale, um:
    • a) anzugeben, dass eine DTIO-Optimierung (select_DTIO) erkannt wurde, ein vorzugsweise mit der Auswahllogik in 4A verbundenes Signal;
    • b) die spezifische zusammengesetzte Sequenz (DTIO_SEQ_no) anzugeben, welche dann von der Optimierungslogik verwendet wird, um veränderte Signale zu erzeugen
    • c) ein Steuersignal zu erzeugen, das angibt, ob die iop in Decodierer 0 ausgegeben oder durch eine NOP ersetzt werden sollte (no-ope)(decoder0_subsume) und
    • d) anzugeben, ob Decodierer 1 die Verschiebung (SIMM) aus Decodierer 0 mit seiner eigenen Verschiebung (SIMM) kombinieren sollte
  • 3. IF-Klausel
    • x1 ”addi rD1, rA1, SIMM(1)”
    • x2 ”addis rD2, rA2, SIMM(2)”
  • Jedes ”load immediate” (welches tatsächlich ein addi zu Register 0 ist), auf das ein addis folgt, wobei die Verschiebung (Direktwert (SIMM(1)//0x0000)) auf addis in Decodierer 1 das Verschiebungskriterium zum Zusammenführen von Verschiebungen erfüllt, wobei das Ziel von ”load immediate” (rD1) dasselbe Register wie das Ziel (rD2) und die Quelle (rA2) von addis ist
  • Dies erzeugt Steuersignale, um:
    • a) anzugeben, dass eine DTIO-Optimierung (select_DTIO) erkannt wurde, ein vorzugsweise mit der Auswahllogik in 4A verbundenes Signal;
    • b) die spezifische zusammengesetzte Sequenz (DTIO_SEQ_no) anzugeben, welche dann von der Optimierungslogik verwendet wird, um veränderte Signale zu erzeugen
    • c) ein Steuersignal zu erzeugen, das angibt, ob die iop in Decodierer 1 ausgegeben oder durch eine NOP ersetzt werden sollte (decoder1_subsume) und ob Decodierer 0 die Verschiebung aus Decodierer 1 mit seiner eigenen Verschiebung kombinieren sollte
  • 4. IF-Klausel:
    • x1 ”addi rD1, rA1, SIMM(1)”
    • x2 ”addis rD2, rA2, SIMM(2)”
  • Jedes ”load immediate” (x1) (welches tatsächlich ein addi zu Register 0 ist), auf das ein addis folgt, wobei die Verschiebung (Direktwert (SIMM//0x0000)) auf addis in Decodierer 1 das Verschiebungskriterium zum Zusammenführen von Verschiebungen erfüllt, wobei das Ziel von ”load immediate” NICHT dasselbe Register wie das Ziel von addis ist (rD2 ist nicht dasselbe Register wie rD1), sondern dasselbe wie die Quelle von addis ist (rD2 ist dasselbe Register wie rA2)
  • Dies erzeugt Steuersignale, um:
    • a) anzugeben, dass eine DTIO-Optimierung (select_DTIO) erkannt wurde, ein vorzugsweise mit der Auswahllogik in 4A verbundenes Signal;
    • b) die spezifische zusammengesetzte Sequenz (DTIO_SEQ_no) anzugeben, welche dann von der Optimierungslogik verwendet wird, um veränderte Signale zu erzeugen
    • c) ein Steuersignal zu erzeugen, das angibt, ob die iop in Decodierer 0 oder Decodierer 1 ausgegeben oder durch eine NOP ersetzt werden sollte (decoder0_subsume, decoder1_subsume) und
    • d) anzugeben, ob Decodierer 0 die Verschiebung aus Decodierer 1 mit seiner eigenen Verschiebung kombinieren sollte, indem er seine eigene Verschiebung der Verschiebung des Decodierers 0 voranstellt (decoder1_immed_merged0d1)
  • 5. IF-Klausel:
    • erkennt eine Kombination einer andis-(”addis rDa, rAa, SIMM(a)”) und einer andi-(”addi rDb, rAb, SIMM(b)”) Anweisung, wobei das Ziel von andis (rDa) dasselbe wie die Quelle und das Ziel von andi (rDb; rAb) ist.
  • Obwohl PowerPC-Anweisungen verwendet werden, um Ausführungsformen darzulegen, könnte die Erfindung durch andere PowerPC-Anweisungen sowie jede ISA einschließlich, ohne darauf beschränkt zu sein, zum Beispiel der IBM® z/Architecture® ISA oder der Intel® x86 ISA vorteilhaft in die Praxis umgesetzt werden.
  • Es ist zu beachten, dass in den obigen PowerPC-Beispielen eine Verkettung von zwei SIMM-Direktwerten in einer PowerPC-iop durchgeführt werden kann, wenn der niedrigstwertige SIMM positiv ist (höchstwertiges Bit = 0). Jedoch ist in dem Fall, in welchem der niedrigstwertige SIMM negativ (vorzeichenerweitert) ist, eine erfolgreiche ADDIER-Operation der Vorzeichenbits mit dem höchstwertigen Wert erforderlich. Dies kann auf jeder Stufe in der Pipeline geschehen, so lange die Pipeline versteht, dass ein niedrigstwertiges Bit des verketteten Werts als ein Vorzeichenbit, welches erfolgreich weitergegeben und zu einem höchstwertigen Teil einer Direktkonstante hinzugefügt werden muss, behandelt werden sollte. In einer Ausführungsform werden nur positive Wert optimiert. In einer weiteren Ausführungsform wird die Verkettung durchgeführt und die Pipeline darüber informiert, dass der verkettete Wert ein eingebettetes Vorzeichenbit enthält. In einer Ausführungsform wird der verkettete Wert durch die Ausführungseinheit bearbeitet, um das Vorzeichenbit erfolgreich zu handhaben. In einer Ausführungsform wird auf Grundlage des Vorzeichenbits in der Decodiereinheit eine arithmetische Operation an den höchstwertigen Bits durchgeführt, um in der optimierten iop einen korrigierten Wert zu erzeugen. In einer Ausführungsform erstellt die Decodiereinheit ein iop-Direktfeld, welches den kombinierten niedrigstwertigen Wert und höchstwertigen Wert darstellt.
  • Eine durch einen Prozessor mit Registerumbenennung implementierte Architektur kann mindestens physische Register, Zuordnungslogik (wie eine Zuordnungstabelle) zum Zuordnen architekturdefinierter Register zu physischen Registern und einen definierten Satz von architekturdefinierten Registern aufweisen. Architekturdefinierte Register werden in Entsprechung zu den physischen Registern zugewiesen, und diese Entsprechungsinformation wird in der Zuordnungslogik aufbewahrt. In Aspekten der vorliegenden Erfindung kann ein architekturdefiniertes Register zur Letztverwendung bestimmt werden, wonach das Register architekturmäßig inaktiviert wird, so dass in einem Registerumbenennungs-Prozessor, wenn ein neues physisches Register einem architekturdefinierten Register zugewiesen oder von einer solchen Zuweisung befreit wird, die Zuordnungstabelle aktualisiert wird, um widerzuspiegeln, ob das architekturdefinierte Register aktiviert oder inaktiviert ist.
  • In einer Ausführungsform verwendet ein Umbenennungsprozessor die Information für die letzte Verwendung eines Werts im architekturdefinierten Register. Nachdem ein Wert in einem Register als letztmals verwendet werdend identifiziert ist, wird das physische Register von der Zuordnung zum architekturdefinierten Register befreit und in den Pool der verfügbaren Register zurückgegeben.
  • Wenn ein Leseverweis auf ein nicht zugeordnetes architekturdefiniertes Register, d. h. ein Register, das letztmals verwendet wurde, dessen ”letzte Verwendung” angegeben wurde, erfolgt, wird in einer Ausführungsform ein Standardwert geliefert, z. B. entweder ein vordefinierter Wert (zum Beispiel auf allen Stellen 1 oder auf allen Stellen 0), ein Register, von dem bekannt ist, dass es den Standardwert enthält, oder ein Bezeichner einer decodierten Anweisung, welcher den Leseprozess der Physische-Register-Datei anweist, einen Standardwert zu erzeugen, wenn der Anzeiger vorliegt.
  • Wenn ein Schreibverweis auf ein nicht zugeordnetes Register, d. h. ein Register, dessen ”letzte Verwendung” angegeben wurde und das seine letzte Verwendung erfahren hat, erfolgt, wird in einer Ausführungsform dem architekturdefinierten Register ein neues physisches Register zugewiesen.
  • In einer Ausführungsform werden mehr Register in den Pool von freien physischen Registern zurückgegeben. Dies ist der Verfügbarkeit eines größeren Satzes von physischen Registern gleichwertig. Mehr physische Register werden in einer Frei-Liste verfügbar gemacht, was eine aggressivere ”Out-of-Order”-Ausführung erlaubt. Dies ist für eine effizientere Registerzuordnung und insbesondere in einer Multithread-Architektur vorteilhaft, wo ein Satz von architekturdefinierten Registern den physischen Registern dynamisch zugeordnet wird. Die Prozessorzuverlässigkeit wird gesteigert, während in freien (oder freigegebenen) Registern auftretende normale Fehler sich nicht auf die Richtigkeit von Berechnungen auswirken. Dem Fachmann wird einleuchten, dass, da der Wert nicht mehr benötigt wird, keine tatsächliche Gefahr eines Datenverlusts besteht.
  • In einem Beispiel werden die folgenden Anweisungen ausgeführt.
    LR R2, Rb
    AR R2, Rc
    LR R3, Ra
    ARU R3, Rc /* letzte Verwendung von Rc */
    MRU R2, Ra /* letzte Verwendung von Ra */ (Normaler Fehler Rc)
    MRU R3, Rb /* letzte Verwendung von Rb */
    AR R2, R3
    ”LR R2, Rb” lädt den Inhalt von Rb (Rb) in R2
    ”AR R2, Rc” addiert (Rc) zu (R2)
    ”LR R3, Ra” lädt (Ra) in (R3)
    ”ARU R3, Rc” addiert (Rc) zu (R3) (genauso wie ein ”AR R3 Rc”, aber zeigt dem Prozessor auch an, dass der Rc-Wert durch die Anweisung letztmals verwendet wird.
    Der Prozessor kann nach der letzten Verwendung die Bindung des architekturdefinierten Registers Rc an irgendein physisches Register entfernen.
    Jeder zukünftige Schreibvorgang in Rc wird eine Bindung des architekturdefinierten Registers Rc an ein neues physisches Register realisieren, wenn die Bindung entfernt wurde. Bis ein Schreibvorgang in das architekturdefinierte Register RC ausgeführt wird, liefert jeder Lesevorgang zum Beispiel entweder einen undefinierten Wert, einen vordefinierten Wert (auf allen Stellen 1 oder auf allen Stellen 0) oder einen programmbestimmten Wert (aus einem für ein Programm verfügbaren Register).
    ”MRU R2, Ra” multipliziert (R2) mit (Ra) (genauso wie ein ”MR R2, Ra”, aber zeigt dem Prozessor auch an, dass der Ra-Wert durch die Anweisung letztmals verwendet wird.
    ”MRU R3, Rb” multipliziert (R3) mit (Rb) (genauso wie ein ”MR R3, Rb”, aber zeigt dem Prozessor auch an, dass der Rb-Wert durch die Anweisung letztmals verwendet wird.
  • Wenn ein Register, das eine letzte Verwendung eines Registers erfahren hat (d. h. (Ra) der ”MRU R2, Ra”-Anweisung) nach der letzten Verwendung auf eine Ausnahmebedingung (wie einen durch einen Vorabruf einer nächsten Anweisung über einen falsch vorhergesagten Pfad oder durch eine Überlauf-/Neulade-Sequenz bei einem Kontextwechsel in einem Betriebssystem oder zwischen Funktionsaufrufen entdeckten normalen Fehler) stößt, kann in einer Ausführungsform der Fehler unterdrückt werden, da der Wert nicht mehr benötigt wird.
  • In einer Ausführungsform wird die Mitteilung der Letztverwendungs-Information an einen Mikroprozessor durch Maschinenanweisungen bereitgestellt. Zum Beispiel wird in einem Anweisungssatz Semantik bereitgestellt, die einem Mikroprozessor erlaubt, eine Letztverwendungs-Information effizient zu nutzen, um Betriebsaspekte des Mikroprozessors zu verbessern, um die Zuverlässigkeit oder Leistungsfähigkeit zu erhöhen oder den Stromverbrauch zu senken. BEISPIEL A: Anweisungen zum Berechnen von a*(b + c) + b*(a + c):
    LR R2, Rb
    AR R2, Rc
    LR R3, Ra
    AR R3, Rc /* Letztverwendung von Rc */
    MR R2, Ra /* Letztverwendung von Ra */
    MR R3, Rb /* Letztverwendung von Rb */
    AR R2, R3
  • In Beispiel A wird Register R2 mit dem Inhalt von Rb geladen, dann wird der Inhalt von Rc zu R2 addiert. Register (R3) wird mit (Ra) geladen, dann wird der Inhalt von Rc durch eine AR-Anweisung zu (R3) addiert. Dann wird (R2) durch eine MR-Anweisung mit (Ra) multipliziert. Dann wird (R3) durch eine MR-Anweisung mit (Rb) multipliziert. Schließlich wird (R3) zu (R2) addiert. Jede Anweisung, die eine Letztverwendung eines Registerwerts enthält, wird durch Kommentare /* Letztverwendung von Rn*/ angezeigt. BEISPIEL B
    LR R2, Rb
    AR R2, Rc
    LR R3, Ra
    AR R3, Rc /* Letztverwendung von Rc */
    MR R2, Ra /* Letztverwendung von Ra */ (Normaler Fehler Rc)
    MR R3, Rb /* Letztverwendung von Rb */
    AR R2, R3
  • In Beispiel B muss, wenn für Register Ra, Rb oder Rc fehlerhafte Daten auftreten (zum Beispiel wegen des Auftretens eines normalen Fehlers ()soff error upset)), eine Wiederherstellungsmaßnahme eingeleitet werden, was die Leistung beeinträchtigt (vermindert) und zusätzlichen Strom/zusätzliche Energie verbraucht. BEISPIEL B zeigt den Fall, in welchem Daten wegen eines mit Ra zusammenhängenden normalen Fehlers verlorengehen.
  • Wenn für Register Ra, Rb, oder Rc fehlerhafte Daten, welche nicht wiederhergestellt werden können, auftreten (z. B. im Verlauf eines Betriebssystem-Kontextwechsels), muss ein Maschinenfehler angezeigt werden und muss die Anwendung, die Partition oder sogar die gesamte Maschine den Betrieb stoppen, was einen Datenverlust und einen Maschinennutzungsausfall zur Folge hat. Der Maschinenfehler tritt auf, obwohl in diesem Beispiel der Wert in Ra, Rb, und Rc nicht mehr benötigt wird und keine tatsächliche Gefahr eines Datenverlusts besteht.
  • In einer Ausführungsform wird eine Angabe der Letztverwendung eines Registerwerts an den für Ra, Rb und Rc (/* Letztverwendung von Rn*/) angegebenen Stellen gemacht, und aus einer durch einen mit einem Registerwert bei einer nachfolgenden Verwendung, nachdem er letztmals verwendet wurde, verknüpften. Fehler verursachten Ausnahmebedingung ergeben sich keine nachteiligen Folgen. In BEISPIEL B wird Rc durch die AR-Anweisung als eine ”letzte Verwendung” verwendet, aber anschließend wird ein Fehler erkannt (während der Ausführung der ersten MR-Anweisung). Da das Rc-Register wie durch die AR-Anweisung angegeben als eine Letztverwendung verwendet wurde, kann der nachfolgende normaler Fehler (vielleicht ein Vorabruf durch eine nachfolgende Anweisung) ignoriert werden.
  • In einer Ausführungsform wird die Semantik der Anweisung verändert, um die Letztverwendung des Registers anzugeben. Zum Beispiel zeigt das ARLU-Additionsregister an, dass die zugrundeliegende Maschinenanweisung im Gegensatz zur AR-Semantik, welche keine Letztverwendung eines Registers angibt, eine Letztverwendung des Quellenoperanden (Rc) angibt.
    AR R2, Rc /* keine Letztverwendungs-Angabe*/
    ARLU R2, Rc /* Letztverwendung von Rc */
  • In einer Ausführungsform wird die ARLU-Anweisung das Register Rc inaktivieren. Im inaktivierten Zustand wird statt eines durch eine frühere Anweisung in Rc gespeicherten Inhalts ein architekturdefinierter Standardwert geliefert. Der Standardwert kann ein architekturmäßig undefinierter Wert (maschinenabhängiger Wert) sein, und ein zukünftiger Zugriff auf diese Ressource (Rc) kann einen architekturmäßig undefinierten Wert liefern.
  • In noch einer weiteren Ausführungsform kann der beim Zugriff auf das inaktivierte Register Rc gelieferte Standardwert ein architekturdefinierter Wert sein, zum Beispiel auf allen Stellen 1 oder auf allen Stellen 0 oder ein programmbestimmter Wert (das Programm schreibt in ein besonderes Register, dessen Inhalt für Standardwerte verwendet wird).
  • In einer weiteren Ausführungsform ist der Standardwert ein algorithmischer Wert wie eine Folge von Werten, die durch jeden nachfolgenden Lesevorgang geliefert werden, so dass keine zwei nachfolgenden Lesevorgänge den gleichen Standardwert liefern können. Die Folge könnte zum Beispiel ein hochgezählter Wert, ein heruntergezählter Wert oder ein anderer algorithmisch erzeugter Wert sein.
  • Dies ist besonders nützlich, um der Notwendigkeit vorzubeugen, einen Wert, der beschädigt wurde, wiederherzustellen, was alle mit einer Wiederherstellung zusammenhängenden Kosten wie die Kosten von Leistungseinbußen durch Anhalten der Ausführung und Wechseln in den Wiederherstellungsmodus oder die Kosten des mit dem Durchführen der Wiederherstellungsfunktion zusammenhängenden Strom- und Energieverbrauchs senkt.
  • BEISPIEL C:
  • Die optimierte Sequenz (wo ARLU, MRLU statt AR und MR verwendet werden, um eine letzte Verwendung anzugeben) ist nun:
    LR R2, Rb
    AR R2, Rc
    LR R3, Ra
    ARLU R3, Rc /* Letztverwendung von Rc */
    MRLU R2, Ra /* Letztverwendung von Ra */
    MRLU R3, Rb /* Letztverwendung von Rb */
    AR R2, R3
  • Bei BEISPIEL C ist weder eine Maschinenprüfung noch eine Wiederherstellung erforderlich. In einer Ausführungsform wird die Letztverwendungs-Angabe durch den Opcode geliefert. Für die AR-Anweisung wird OpCode1 verwendet, aber für die ARLU gibt OpCode2 die gleiche Funktion an wie die AR-Anweisung, gibt aber an, dass das Quellenregister (RS) ein Letztverwendungs-Register ist.
  • Figure 00550001
  • Der Opcode codiert, dass das Register Rs zu Rt addiert wird und dass das Rs-Register durch die Anweisung letztmals verwendet wird (und dann in einen inaktivierten Zustand versetzt wird).
  • Figure 00560001
  • Für die Anweisungen mit zwei oder mehr Registern muss zum Beispiel angegeben werden, welches der Register letztmals verwendet wird (LLLUB = RB, LLLUD = RD und LLLUt = Rt). In einer Ausführungsform gibt LLLUB Rt (RB, RD) eine Letztverwendung von RB an
    Figure 00560002
  • Die Freigabe des Registers RB aus dem aktivierten Zustand wird in diesem Beispiel durch den Opcode2 angegeben, indem ein neuer dedizierter Codepunkt für den Opcode ausgewählt wird; der Opcode2 codiert, dass das Register RB zu RD addiert wird, aus dieser Adresse Daten in Rt geladen werden, und dass das RB-Register durch diese Anweisung letztmals verwendet wird.
  • Figure 00560003
  • Die Freigabe nach Verwendung des Registers RD wird durch den Opcode3 angegeben, indem ein neuer dedizierter Codepunkt für den Opcode ausgewählt wird; der Opcode3 codiert, dass das Register RB zu RD addiert wird, aus dieser Adresse Daten in Rt geladen werden, und dass das RD-Register durch diese Anweisung letztmals verwendet wird.
  • Die Angabe der Letztverwendung eines Registers bei Vorliegen von mehr als einem Letztverwendungs-Register erfordert die Verwendung mehrerer Opcodes. Wenn mehrere Register letztmals verwendet werden sollen, sollte noch ein weiterer Opcode verwendet werden.
  • Dies wird deutlicher, wenn mehrere ”letztmals zu verwendende” Register vorliegen.
  • In einer Ausführungsform wird die Letztverwendung mehrerer Register durch die Verwendung von Register-Maskenbits in einem Feld der Anweisung angegeben.
  • Zum Beispiel hat eine LLU Rt (RB, RD) M, M-Anweisung ein MM-Maskenfeld
    Figure 00570001
  • Die Freigabe der durch die MM-Maske definierten Register wird im Opcode beschrieben, indem ein neuer dedizierter Codepunkt für den Opcode ausgewählt wird; der Opcode gibt eine durchzuführende Operation an, zum Beispiel dass das Register RB zu RD addiert wird und Ergebnisdaten in Rt geladen werden. Außerdem werden die Maskenbits MM verwendet, welche jeweils die zukünftige Verwendung der Register RB, RD und Rt angeben. Die MM-Bits können bitsignifikant sein, so dass sich jedes Bit auf einen entsprechenden Letztverwendungsregister-Operanden der Anweisung bezieht, oder können einen Bereich von Letztverwendungsregistern angeben. In einer Ausführungsform werden, wenn die Register RB und/oder RD letztmals verwendet werden, Maskenbits gesetzt, um anzugeben, dass diese Register in einer Ausführungsform die Letztverwendung darstellen. Die MM-Bits könnten eine Codierung sein, so dass die Codierung zum Beispiel RB als Letztverwendung (MM = 0) oder RB und RD beide als Letztverwendung (MM + 1) angibt.
  • In einer Ausführungsform wird ein Flag-Bit der Letztverwendungs-Anweisung zugewiesen, um anzuzeigen, dass das entsprechende Register letztmals verwendet wird. Zum Beispiel kann LLU Rt, (RB, RD) F, F in eine Maschinenanweisung mit dem folgenden Format codiert werden:
    Figure 00580001
  • Die durch den Opcode definierte Letztverwendung der Register RB und RD in Verbindung mit den FB-, FD-Bitzuständen (mit RB verknüpftes FB-Bit und mit RD verknüpftes FD-Bit), durch Auswählen eines neuen dedizierten Codepunkts für den Opcode für die Letztverwendungs-Anweisung; der Opcode codiert, dass das Register RB zu RD addiert wird und diese Adressendaten in Rt geladen werden. Außerdem werden die Flags FB und FD verwendet, welche jeweils die zukünftige Verwendung der Register RB und RD anzeigen; wenn die Register RB und/oder RD letztmals verwendet werden, werden beide Flags FB und FD gesetzt, um anzuzeigen, dass diese Register die letzte Verwendung darstellen.
  • PRÄFIXANWEISUNGEN:
  • RISC-Anweisungssätze bieten attraktive Eigenschaften für das Abrufen und Decodieren von Anweisungen wie Anweisungslänge mit fester Breite zur Vereinfachung der Handhabung von Ausnahmebedingungen, Anweisungs-Neustart, Anweisungsänderung während der Ausführung und Anweisungsdecodierung und -gruppierung. Anweisungssätze mit fester Breite begrenzen den Codierraum für jede Anweisung, indem sie die Größe von Verschiebungen begrenzen und das Einführen neuer Anweisungen mit dem Ziel begrenzen, bestehenden Anweisungen, denen eine solche Funktion fehlt, neue Fähigkeiten wie PC-(programmbefehlszähler-)bezogene Adressierung hinzuzufügen. Ausgereifte CISC-Architekturen weisen eine ähnliche Beschränkung auf.
  • Vorschläge wurden gemacht, um Anweisungsworte in Anweisungsgruppen zu erweitern (wie im Itanium-Anweisungssatz), RISC-Anweisungen doppelter Länge für einen Anweisungssatz mit Anweisungen einfacher Länge bereitzustellen und Anweisungsdecodierzeit-Optimierung zu nutzen, um diese Beschränkungen zu überwinden. Jede vorgeschlagene Lösung wies merkliche Nachteile auf:
    Anweisungsgruppen begrenzen die Adressierbarkeit einzelner Anweisungen, führen zu unerwünschter Code-Aufblähung und können in einem 64b-Anweisungssatz nicht atomar aktualisiert werden.
  • RISC-Anweisungen doppelter Breite können sich über Grenzen hinweg erstrecken und Anweisungsabrufe und verknüpfte Ausnahmebedingungen erschweren, führen zu Code-Aufblähung und müssen sich mit Verzweigung in der Mitte einer Anweisung abfinden (d. h. die Entdeckung von Anweisungsbegrenzungen wird problematisch). Die Anweisungsdecodierzeit-Optimierung stellt Verfahren bereit, um Anweisungspaare zu kombinieren, während sie in eine einzige interne Anweisung (iop) decodiert werden. Die Anweisungsdecodierzeit-Optimierung überwindet einige der Beschränkungen der anderen Lösungen, bietet aber nicht die Fähigkeit, PC-(programmbefehlszähler-)bezogene Adressierung einzuführen, und kann zu der Notwendigkeit führen, übermäßig umfangreiche Berechnungen durchzuführen, um einen durch Anweisungen, die sonst gänzlich durch eine verbundene interne Anweisung zusammengefasst werden könnten, berechneten architekturdefinierten Zustand zu bewahren.
  • Wir führen das Konzept der Präfixanweisungen (im Gegensatz zu Anweisungspräfixen) ein, zum Beispiel eine Präfixanweisung (addpcis+), um einen bestehenden Anweisungssatz zu erweitern, um zum Beispiel lange Verschiebungen oder PC-(programmbefehlszähler-)bezogene Anweisungen bereitzustellen, um von den Vorteilen zu profitieren, die diese Merkmale bieten. Anweisungspräfixe verändern die Funktionalität einer nachfolgenden Anweisung. Als solche müssen Anweisungspräfixe immer mit der veränderten Anweisung ausgeführt werden, wobei sie tatsächlich eine sehr lange Anweisung mit veränderlicher Breite erzeugen und die damit verknüpften Komplexitäten einschließen. Dies ist so, weil das Erlauben einer Zwischenoperation wie eines Kontextwechsels einen Verlust der Präfixfunktion zur Folge hätte, wenn die mit Präfix versehene Anweisung ausgeführt wird (außer wenn der Präfixzustand während Kontextwechseln aufbewahrt und wiederhergestellt wurde). Für eine RISC-Anweisungssatz-Architektur (ISA) kann dies unattraktiv sein, da sowohl ISA-Funktionen als auch ISA-Implementierungen optimiert wurden, um von der durch die RISC-ISAs mit fester Breite bereitgestellten Gleichmäßigkeit zu profitieren.
  • Wegen Beschränkungen hinsichtlich der verfügbaren Opcodes und der Länge der Anweisungen sind möglicherweise weder zusätzliche Opcode-Punkte noch Masken- oder Flag-Felder verfügbar. Außerdem kann das Zuordnen eines neuen Formats für jede Anweisung einschließlich der erweiterten Fähigkeiten wie einschließlich der Fähigkeit, PC-(programmbefehlszähler-)bezogene Adressierung und lange Verschiebungen zu verwenden, hinsichtlich Komplexität und Codierraum untragbar sein. In diesem Fall wird eine Präfixanweisung bereitgestellt, die, wenn sie ausgeführt wird, die Letztverwendung von Registern anderer Anweisungen steuert. So kann eine Ausführung einer Präfixanweisung bewirken, dass mindestens ein Quellenregister (z. B. das RB-Register) der nächsten folgenden Anweisung nach Ausführung inaktiviert wird. In einer Ausführungsform kann eine Ausführung einer Präfixanweisung bewirken, dass das RB der nächsten folgenden Anweisung zur Verwendung durch die Anweisung aktiviert wird.
  • Gemäß Aspekten der vorliegenden Erfindung verändert eine Präfixanweisung mindestens einen Quellenoperanden R einer nächsten folgenden Anweisung, so dass ein durch die Präfixanweisung berechneter numerischer Wert die Eingabe für den angegebenen Operanden R sein wird. (Gemäß einer beispielhaften RISC-Ausführungsform entspricht der verändert werdende Operand R einem Register einschließlich eines oder mehrerer der folgenden Register, ohne auf diese beschränkt zu sein: Ganzzahl-, Allgemein-, Bedingungs-, Vergleichselement-, Gleitkomma-, Vektor-, Multimedia-Register.) Im Gegensatz zu Anweisungspräfixen nach Stand der Technik kann eine Präfixanweisung als eine zustandsverändernde Anweisung eigenständig ausgeführt werden und entspricht ihre Semantik, wenn sie als eine Anweisung ausgeführt wird, dem Verhalten der Präfixanweisung innerhalb eines durch Präfixanweisungen definierten Bereichs, d. h. eine Präfixanweisung ist so definiert, dass sie das Eingabe-R nur der nächsten folgenden Anweisung verändert und das eigentliche R in einem undefinierten oder implementierungsabhängigen definierten Zustand belässt. Wenn die Präfixanweisung als eine Anweisung ausgeführt wird, hat ihr Verhalten (des Berechnens des Architekturwerts R) die gleiche Wirkung auf die nächste folgende Anweisung und alle nachfolgenden Anweisungen (ein Verhalten, das von einer Präfixanweisung ohne Spezifizierung belassen wird). Somit schafft eine Präfixanweisung ein breites Spektrum von Implementierungsmöglichkeiten. Gemäß einem weiteren Aspekt einer Präfixanweisung und gemäß der Definition des Belassens der architekturdefinierten Ressource (zum Beispiel des Registers Rn) mit einem undefinierten Wert nach Ausführung der nächsten folgenden Anweisung wird auch für die Ressource Rn, welche das Ergebnis der Präfixanweisung ist, angegeben, dass sie in der nächsten folgenden Anweisung letztmals verwendet wird. (Und in mindestens einer beispielhaften Ausführungsform nutzt eine Implementierung eines in seiner Mikroarchitektur Letztverwendungs-Optimierungen unterstützenden Mikroprozessors diese Letztverwendungs-Information, um durch Verwalten von Registerdateien mit mehreren Ebenen, Registerumbenennung und anderen Aspekten eines Mikroprozessors entsprechend der in der Präfixanweisung inhärenten Letztverwendungs-Angabe Leistungsfähigkeit und Zuverlässigkeit weiter zu erhöhen.)
  • Eine Präfixanweisung lässt sich mittels Anweisungsdecodierzeit-Optimierung vorteilhaft implementieren, und ohne die Notwendigkeit, einen mit einem definierten Ergebnis jenseits der veränderten Anweisung kompatiblen Wert R zu erzeugen, z. B. wenn die Präfixanweisung mit einer Anweisung kombiniert und während der Anweisungsdecodierzeit-Optimierung durch die Anweisung zusammengefasst werden kann, ist keine zusätzliche Berechnung erforderlich, um einen in R zu speichernden Wert zu erzeugen. Die Optimierungslogik kann auch Ermittlungsschritte durchführen, um unter einigen Umständen zu optimieren und unter anderen nicht. Wenn keine Optimierung erfolgt, kann eine Präfixanweisung konservativ als eine Anweisung eigenständig ausgeführt werden. Wenn eine Ausnahmebedingung während einer Präfixanweisung und der veränderten Anweisung eintritt (z. B. weil die veränderte Anweisung sich auf der nächsten Seite befindet und eine Fehlseitenunterbrechung auftritt, da die nächste Seite gerade ausgelagert wird und eingelagert werden muss), kann eine Präfixanweisung als eine Anweisung ausgeführt werden, Register R aktualisieren und die fehlerverursachende Anweisungsadresse der veränderten Anweisung angeben. Nach Einlagerung der nächsten Seite kann die Ausführung fortgesetzt werden, wobei die nächste Anweisung ohne Ansehen der Präfixanweisung, die neu gestartet werden muss, ausgeführt wird (dies bietet einen merklichen Vorteil gegenüber der Komplexität beim Handhaben von Anweisungspräfixen in CISC-Architekturen). In einem weiteren Aspekt des Anweisungs-Neustarts kann eine Implementierung es vorziehen, einige der Auswirkungen einer Präfixanweisung in einem Spezialregister (SPR – special purpose register) zu speichern und eine veränderte Anweisung neu zu starten, wobei der Zustand der Präfixanweisung während des Neustarts aus dem SPR erlangt wird, um die Präfixanweisung und deren veränderte nächste folgende Anweisung in einer einzigen Operation auszuführen. In einer weiteren Ausführungsform unterdrückt jedes zwischen einer Präfixanweisung und deren nächster folgender Anweisung stattfindende Ausnahmebedingungsereignis die nach Handhabung der Ausnahmebedingung neu zu startende Präfixanweisung. In einer weiteren Ausführungsform ist zwischen der Ausführung der Präfixanweisung und deren nächster folgender Anweisung keine Ausnahmebedingung zulässig.
  • In weiteren Aspekten von Präfixanweisungen können preiswerte, wenig komplexe Mikroprozessorimplementierungen gemäß einer RISC-ISA, die Präfixanweisungen enthalten, weiter ohne Rücksicht auf Präfixanweisungen wie eine RISC-ISA ausgeführt werden, indem sie sich entscheiden, jede Präfixanweisung als eine eigenständige Anweisung zu implementieren. In weiteren Aspekten von Präfixanweisungen kann eine Implementierung oder Architektur vorgeben, Einzelschritte und Trace-Ausnahmebedingungen zwischen einer Präfixanweisung und einer veränderten folgenden Anweisung entweder auftreten oder nicht auftreten zu lassen.
  • In einer Ausführungsform wird ein Anweisungspräfix auf eine vorbestehende Anweisung angewendet. Die Präfixoperation wird vorzugsweise durch Ausführen einer Anweisung mit einem Präfix-Opcode eingeleitet. Dem Fachmann wird einleuchten, dass alternative Arten und Weisen des Angebens von Präfixen zu einer Anweisung möglich sind und zusammen mit Aspekten des vorliegenden verwendet werden können. In einer Ausführungsform könnte die Präfixanweisung auf einer vorherigen Anweisung, einer nächsten folgenden Anweisung oder einer präfixabhängigen Anweisung im Anweisungsstrom arbeiten. Zum Beispiel kann eine Präfixanweisung verwendet werden, bevor eine nächste Anweisung die Letztverwendungs-Register der nächsten Anweisung definiert. In einer Ausführungsform könnte die Präfixanweisung der Letztverwendungs-Anweisung mit einer Anzahl von Zwischenanweisungen vorausgehen, um dem Prozessor Zeit zu geben, sich auf die Letztverwendung vorzubereiten, ohne eine Pipeline-Verzögerung zu erleiden. Eine solche Präfixanweisung könnte eine Anzahl von Zwischenanweisungen oder einen niedrigstwertigen Adressenwert der Anweisung, die zum Beispiel die Letztverwendung eines Registers enthalten wird, angeben.
  • In einer Ausführungsform wird im Gegensatz zu einer Präfixanweisung ein Anweisungspräfix verwendet. Ein Anweisungspräfix ist im Grunde eine Erweiterung einer Anweisung, so dass ein Anweisungspräfix auch als ein Anweisungssuffix implantiert werden könnte. Ein Anweisungspräfix einer Anweisung würde vorzugsweise der Anweisung, zu der es gehört, Informationen liefern, jedoch ist es auch möglich, ein Präfix zu einer Anweisung hinzuzufügen, das einer anderen Anweisung als derjenigen, zu der es gehört, Informationen liefert. So ist eine Präfixanweisung ein Präfix, das eigenständig ausgeführt wird, sein eigenes Opcode-Feld hat, wobei ein Anweisungspräfix als Teil der Anweisung, zu der es gehört, ausgeführt wird und keine unabhängig ausführbare Anweisung ist.
  • In Ausführungsformen von Präfixen, die eine letzte Verwendung eines Registers in einer nachfolgenden Anweisung angeben, gibt es zwei Optimierungs-Ausführungsformen zur Handhabung von Letztverwendungsangabe-Präfixen, die gestatten würden, das Präfix von der Anweisung, in welcher die letzte Verwendung angegeben ist, zu trennen:
    • 1 – In einer ersten Ausführungsform wird das Präfix ignoriert und kann die Anweisung ohne Präfix und ohne die nützlichen Auswirkungen auf die Registerumbenennung ausgeführt werden (in einer Architekturspezifikation, wo eine Letztverwendungs-Angabe angibt, dass ein zukünftiges Lesen eines letztmals verwendeten architekturdefinierten Registers einen undefinierten Wert liefert). Während dies in einer Hochleistungs-Ausführung möglicherweise nicht erwünscht ist, kann es in einem Modell mit niedrigerer Leistung (entweder durch Auswahl während der Entwicklung, durch Bauen eines billigeren Modells, das nicht über die Hardware verfügt, um dieses Präfix zu handhaben, oder sogar durch Marktsegmentierung und bewusstes Inaktivieren von Hardware, die vorhanden ist, um ein Modell mit niedrigerer und ein Modell mit höherer Leistung zu schaffen) oder bei einer Identifizierung von Grenzbedingungen (z. B. eine Ausnahmebedingung tritt ein oder dem Zeilenpuffer gegen die Anweisungs-Bytes aus) akzeptabel sein. Es kann einfacher sein, eine Maschine zu bauen, die unter diesen Umständen das Präfix verwirft, und wenn die ISA-Architektur vorgibt, dass Lesevorgänge bei letztmals verwendeten Registern einen undefinierten Wert liefern, liegt das Liefern dieses tatsächlichen Registerwerts sicher innerhalb der Grenzen der Implementierung.
    • 2 – In einer weiteren Ausführungsform könnte die Letztverwendungs-Angabe in einem Programmstatuswort (PSW) oder Konfigurationsregister (CR) erfasst werden und während Kontextwechseln gesichert und wiederhergestellt werden und verwendet werden, um nach einer Ausnahmebedingung oder einem Kontextwechsel neu zu starten, und das Präfix nach Rückkehr von der Ausnahmebedingung auf die anstehende Anweisung anwenden lassen, z. B. mit einer speziellen ”Rückkehr-von-Interrupt”-Anweisung.
  • In einem Beispiel geht der Letztverwendungs-Anweisung ein durch einen die Letztverwendungs-Anweisung ausführenden Prozessor beim Ermitteln, welche Register Letztverwendungs-Register sind, zu verwendender Wert im Anweisungsstrom folgendermaßen voraus:

    LLU Rt, (RB, RD), MM:

    verwendet das MM-Feld des Präfixwerts, um festzustellen, welches Register oder welche Register Letztverwendungs-Register sind. Dem Fachmann wird auch einleuchten, dass in einem gewöhnlichen Präfix weitere Felder (PF1) vorliegen können, die z. B. zusätzliche Registerkennungs-Bits oder eine auszuführende Funktion angeben. Ein nachfolgendes Beispiel einer Präfixanweisung zeigt die Präfixanweisung (PRE, MM) mit einem MM-Maskenfeld zum Angeben eines Registers (RB, RD oder Rt) in der nächsten folgenden Anweisung, das ein durch die nächste folgende Anweisung letztmals verwendetes Register sein soll:
    Figure 00650001
  • Im folgenden Beispiel hat die Präfixanweisung (PRE) ein MM-Feld wie oben gezeigt sowie ein Präfixfeld (PF1) zum Angeben einer durch die nächste Anweisung auszuführenden Funktion. Das PF1-Feld kann, über das Angeben eines oder mehrerer Letztverwendungs-Register hinaus, die Ausführung der nächsten folgenden Anweisung verändern.
  • Figure 00650002
  • Gemäß einer weiteren Ausführungsform wird eine eigene Präfixanweisung verwendet, um anzugeben, dass ein Wert in der nächsten Anweisung letztmals verwendet werden soll. ”LU, Rx” gibt an, dass das RX-Register letztmals verwendet werden soll, und kann einen Wert bereitstellen, der anstelle des RX-Registers der nächsten Anweisung verwendet werden soll. ”LU, R1, R2” gibt an, dass R1 und R2 in der nächsten Anweisung letztmals verwendet werden sollen, und kann R1- und R2-Werte für die nächste Anweisung bereitstellen. ”LU MMMMMM” kann angeben, dass eine Vielzahl von Registern letztmals verwendet werden sollen (zum Beispiel durch bitsignifikante Darstellung von Registern in der MMMMMM-Maske oder einen Bereich von Registern), und LU Rx, MMMMMM kann eine Vielzahl von letztmals zu verwendenden Registern und einen von der nächsten Anweisung zu verwendenden Rx-Wert angeben. In einer Ausführungsform stellt die Präfixanweisung ein durch die nächste Anweisung zu verwendendes Direktfeld bereit. In einer Ausführungsform stellt die Präfixanweisung den durch die nächste Anweisung anstelle eines Werts eines durch die nächste Anweisung angegebenen Registers zu verwendenden Programmbefehlszähler-(PC-)Wert für die nächste Anweisung bereit.
  • Figure 00660001
  • Dem Fachmann wird einleuchten, dass die LU-Anweisung 1 oder eine Vielzahl von Kennungen von Registern, deren letzte Verwendung stattfand, liefern kann. In einer Ausführungsform kann die LU-Anweisung einer Anweisung vorausgehen und die Informationen über die Letztverwendung von Registern für die folgende Anweisung bereitstellen (ähnlich dem vorher beschriebenen Präfixwert).
  • In einer weiteren Ausführungsform der LU-Anweisung kann die LU-Anweisung ein Feld haben, um die Letztverwendung für eine Vielzahl von Anweisungen anzugeben, beginnend entweder bei einer impliziten Registernummer oder bei einem in einem Registerfeld angegebenen Register.
  • Obwohl Beispiele für Ganzzahlregister angegeben wurden, wird dem Fachmann einleuchten, dass die hierin enthaltenen Erläuterungen auf weitere Operandenwerte wie Allgemeinregister, Gleitkommaregister, mit anderen Registern und Hauptspeicherpositionen, zum Beispiel einem mit einer durch eine Adresse in einem Register bestimmten Position verknüpften Block des Hauptspeichers, verknüpfte Zusatzregister angewendet werden können. Ein solcher Block kann zum Beispiel einer Seite (zum Beispiel 4 kByte) oder einer Cachespeicherzeile (128 Byte) oder, wenn der Operand sich über die Grenze eines Einzelblocks erstreckt, mehreren Blocks entsprechen.
  • Eine Letztverwendung eines Blocks des Hauptspeichers kann den Prozessor befähigen, den Hauptspeicher-Block präemptiv aus einem Cachespeicher zu löschen. Dies ist nützlich, da der Compiler wüsste, dass dies die Letztverwendung des Blocks ist, und die Letztverwendungs-Anweisung nutzen könnte, um dem Prozessor zu helfen, die Bereinigung des Cachespeichers zu verwalten. Der einen Block, der verändert wurde, löschende Cachespeicher verbessert die Leistung, da der Block nicht zurück in den Hauptspeicher geschrieben werden muss. Vorher musste jede Zeile in einem Cachespeicher, in die geschrieben wurde, im Hauptspeicher gesichert werden.
  • In einer beispielhaften Ausführungsform von Präfixanweisungen wird eine neue addpcis+-Anweisung für die POWER ISA bereitgestellt. Gemäß der Definition der addpcis+-Anweisung wird ein Register RT verändert, um die Summe eines verschobenen 16-Bit-Direktfelds und eines Registers darzustellen. Wenn die Registernummer 0 angegeben wird, ist der zur verschobenen Direktanweisung addierte Wert derjenige der nächsten Anweisungsadresse (oder, in einer alternativen Ausführungsform, der aktuellen Anweisungsadresse). Eine Anzahl von verbundenen Anweisungsidiomen kann erzeugt werden, was, durch Verbinden der addis+-Präfixanweisung mit einer nachfolgenden Anweisung, die Verwendung eines 32 b-Verschiebungswerts in Speicheranweisungen gestattet, die sonst nur 16 b-Verschiebungswerte unterstützen.
  • In einem Aspekt der addis+-Anweisung braucht der addis+-Ergebnis-(RT-)Wert nicht aufbewahrt zu werden, wenn eine Speicheranweisung oder ein Ladevorgang, die bzw. der sich nicht auf den RT-Wert bezieht, vorliegt.
  • In einer Ausführungsform addiert eine addpcis+-Anweisung einen Operanden aus Register 2 (r2) arithmetisch zu einem Direktfeld und stellt das Ergebnis für die nächste folgende Anweisung bereit, als ob es in einem bezeichneten Ergebnisregister (r4) gespeichert würde, verändert aber eigentlich nicht den Wert des Ergebnisregisters. Die Ausführung der nachfolgenden Anweisung (zum Beispiel lwz) verwendet anstelle des bezeichneten Quellenregisters den durch die addpcis+-Anweisung bereitgestellten Wert. Wenn es einen Zwischen-Kontextwechsel gibt, wird in einer Ausführungsform das Ergebnis der addpcis+-Anweisung im bezeichneten Register (r4) gesichert, so dass bei Rücklieferung des Kontexts die lwz-Anweisung den Registerwert abruft. In einer weiteren Ausführungsform sind zwischen einer Präfixanweisung und der nächsten folgenden Anweisung, zu der sie gehört, keine Kontextwechsel zulässig. In einer weiteren Ausführungsform wird das Ergebnis der addpcis+-Anweisung als ein ”Letztverwendungs”-Wert identifiziert, so dass die nächste folgende Anweisung die letzte Verwendung des Werts ist. Eine Letztverwendung eines Werts in einer Ausführungsform versetzt die architekturdefinierte Ressource in einen ”Ungenutzt”-Zustand, bis ein nachfolgender Vorgang wie ein Schreibvorgang die Ressource in einen ”Genutzt”-Zustand versetzt. Solange eine Ressource sich in einem ”Ungenutzt”-Zustand befindet, wird bei Lesezugriffen ein Standardwert geliefert. Der Standardwert kann, um ein paar Beispiele zu nennen, ein programmierbarer Wert, auf allen Stellen 1, auf allen Stellen 0 oder ein architekturmäßig undefinierter Wert (pseudo-zufällig) sein.
  • Also ist die folgende beispielhafte Sequenz möglich:
    • addpcis+ r4, r2, 0x1234
    • lwz r5, r4, 0x5678
    wobei die addpcis+-Anweisung das Direktfeld (0x1234) zum höchstwertigen Teil von R2 addiert und das Ergebnis in einem Pseudo-Quellenregister R4 der nächsten folgenden Anweisung (lwz) bereitstellt und die Letztverwendung von R4 angibt. Die ”lwz”-Anweisung addiert das Direktfeld (0x5678 vorzeichenerweitert) zu Pseudo-R4 und verwendet das Ergebnis als eine Adresse für einen Zugriff auf den Hauptspeicher, um einen Hauptspeicherwert zu lesen und den Wert in R5 zu laden.
  • Wenn sie durch den Prozessor optimiert werden, werden die Anweisungen addpcis+ und lwz zu einer lwz-iop (internen op) =>
    • lwz-iop r5, r2, 0x12345678
    verbunden, was möglich ist, da R4 eine letztmalige Verwendung war, so dass die optimierte Anweisung es nicht zu schreiben braucht.
  • Entsprechend wird
    • addpcis+ r4, r2, 0x1234 lfd f5, r4, 0x5678 nach Optimierung zu => lfd-iop f5, r2, 0x12345678
  • In einer weiteren Ausführungsform wird
    • addpcis+ r4, r2, 0x1234 addis r5, r4, 0x5678 nach Optimierung zu => entweder addpci-iop r5, r2, 0x12345678 oder addi-iop r5, rx, 0x12345678
  • In einer Ausführungsform wird Pseudo-Mnemotechnik eingeführt, welche Programmierern gestattet, eine Einzel-op anzugeben, wobei die temporäre architekturdefinierte Ressource überschrieben wird. Zum Beispiel ist lwz mit <r4> im Folgenden eine solche Pseudo-op, die angibt, dass R4 ein Letztverwendungs-Register ist.
    • lwz r5, r2, 0x12345678<r4>
  • Ein Assembler würde dies interpretieren und die folgenden beiden ISA-Anweisungen erstellen:
    • addpcis+ r4, r2, 0x1234 lwz r5, r4, 0x5678 welche der Prozessor optimieren würde, damit sie zur lwz-iop => lwz-iop r5, r2, 0x12345678 werden.
  • In einer weiteren Ausführungsform würde
    • lfd f5, r2, 0x12345678<r4> von einem Assembler interpretiert werden, um das ISA-Paar addpcis+ r4, r2, 0x1234 lfd f5, r4, 0x5678 zu erzeugen, welches der Prozessor optimieren würde, damit es zur lfd-iop => lfd-iop f5, r2, 0x12345678 wird.
  • In einer Ausführungsform wird, wenn ein angegebener Wert für die Quellenregister-Kennung der addpcis+-Anweisung ”0” ist, der Wert der nächsten Anweisungsadresse (NIA – next instruction address) verwendet. Dies gestattet Programmen, auf den Programmbefehlszähler (PC – program counter) zuzugreifen und eine PC-bezogene Adressierung bereitzustellen. Im folgenden Anweisungspaar zum Beispiel liefert die addpcis+-Anweisung die anstelle des r4-Registerwerts zu verwendende PC-Adresse an die lwz:
    • addpcis+ r4, 0, 0x1234 lwz r5, r4, 0x5678 welche der Prozessor zu einer lwz-iop (mit einer Assembler-Darstellung von lwz- r5, pc, 0x12345678<r4>) optimiert, damit sie zu => lwz-iop r5, pc, 0x12345678<r4> wird, wobei der Pseudo-r4-Wert in der addpcis+-Anweisung durch Addieren des PC-Werts zum Direktfeld (0x1234) berechnet wird.
  • Entsprechend wird das Anweisungspaar:
    • addpcis+ r4, 0, 0x1234 lfd f5, r4, 0x5678 optimiert, damit es zu => lfd-iop f5, pc, 0x12345678 (mit einer Assembler-Darstellung von lfd f5, pc, 0x12345678<r4>) wird.
  • Entsprechend werden
    • addpcis+ r5, 0, 0x1234 addis r5, r5, 0x5678 optimiert, damit sie zu => entweder addpci-iop r5, pc, 0x12345678 oder addi-iop r5, pc, 0x12345678 werden.
  • In einer Ausführungsform ist der Wert von RT undefiniert, wenn der Präfixanweisung nicht eine Anweisung folgt, die auf RT verweist. In einer weiteren Ausführungsform wird eine Ausnahmebedingung ”Illegale Anweisung” ausgelöst oder kann eine solche ausgelöst werden. In einer weiteren Ausführungsform wird das Ergebnis-RT auf das von der Präfixanweisung implizierte Berechnungsergebnis gesetzt.
  • In einer Software-Ausführungsform wird addpcis+ verwendet, um eine Tabelle (d. h. ein Inhaltsverzeichnis (TOC – table of contents)) auf eine PC-(programmbefehlszähler-)bezogene Weise zu adressieren und große TOC-Offsets für Ladeoperationen in Nicht-GPR-Register mit einer Einzel-iop-Sequenz in einer optimierten binären Anwendungsschnittstelle (ABI – application binary interface) mit ”data-in-TOC” bereitzustellen. In einem Aspekt einer Software-Ausführungsform zum Erzeugen von Code für Präfixanweisungen stellt die Code-Erzeugung (z. B. in einem Compiler) sicher, dass die Präfixanweisung zusammen mit der veränderten Anweisung erzeugt und der veränderten Anweisung unmittelbar vorangestellt wird. In einem weiteren Aspekt werden zusätzliche Ausrichtungsmaßnahmen durchgeführt, um die Decodierzeit-Optimierung zu erleichtern, z. B. einschließlich, ohne darauf beschränkt zu sein, des Sicherstellens, dass eine Präfixanweisung und die nächste folgende Anweisung am Anfang einer einzigen Anweisungsgruppe in eine einzige Seite, eine einzige Cachezeile, eine einzige Anweisungsgruppe oder mehrere davon fallen.
  • In einer Ausführungsform wird eine Präfixanweisung angegeben, wobei die Präfixanweisung den durch eine nächste folgende Anweisung im Anweisungsstrom als Quellenoperand verwendeten Wert einer architekturdefinierten Ressource verändert, wodurch die architekturdefinierte Ressource nach der Ausführung der nächsten folgenden Anweisung im Anweisungsstrom in einem undefinierten Zustand belassen wird.
  • In einer weiteren Ausführungsform wird eine der Präfixanweisungen addis+, pcaddis+ oder pcaddis+ angegeben,
    Figure 00720001
  • Die Summe (RA|NIA) + (SI || 0x0000) wird als Quelle für Verweise auf Register RT nur für die nächste folgende Anweisung bereitgestellt.
  • addpcis+ ist ein Anweisungspräfix und verändert die folgende Anweisung, um den für RT berechneten Wert als Eingabe zu verwenden, wenn RT angegeben wird.
  • Die Anweisung gibt an, dass RT ”ungenutzt” wird, nachdem die nächste folgende Anweisung ausgeführt ist, und sein Wert undefiniert sein wird. Wenn die Ausführung nach der addpcis+-Anweisung und vor der nächsten folgenden Anweisung unterbrochen wird, wird der Zustand auf eine Weise aktualisiert, die es gestattet, die Ausführung mit der nächsten Anweisung wiederaufzunehmen und ein korrektes Ergebnis zu erzeugen (d. h. RT wird geschrieben oder ein anderes implementierungsdefiniertes Verfahren zum Bewahren der Auswirkung des Veränderns der nächsten folgenden RT-Quellen-Anweisungen wird verwendet).
  • Veränderte Spezialregister:
  • Es ist zu beachten, dass addpcis+ den Wert der NIA, nicht den Inhalt von GPR 0 verwendet, wenn RA = 0.
  • Figure 00730001
  • Die Summe (RA|0) + (SI || 0x0000) wird als Quelle für Verweise auf Register RT nur für die nächste folgende Anweisung bereitgestellt.
  • addis+ ist ein Anweisungspräfix und verändert die folgende Anweisung, um den für RT berechneten Wert als Eingabe zu verwenden, wenn RT angegeben wird.
  • Die Anweisung gibt an, dass RT ”ungenutzt” wird, nachdem die nächste folgende Anweisung ausgeführt ist, und sein Wert undefiniert sein wird. Wenn die Ausführung nach der addis+-Anweisung und vor der nächsten folgenden Anweisung unterbrochen wird, wird der Zustand auf eine Weise aktualisiert, die es gestattet, die Ausführung mit der nächsten Anweisung wiederaufzunehmen und ein korrektes Ergebnis zu erzeugen (d. h. RT wird geschrieben oder ein anderes implementierungsdefiniertes Verfahren zum Bewahren der Auswirkung des Veränderns der nächsten folgenden RT-Quellen-Anweisungen wird verwendet).
  • Figure 00740001
  • Die Summe NIA + (SI || 0x0000) wird als Quelle für Verweise auf Register RT nur für die nächste folgende Anweisung bereitgestellt.
  • pcaddis+ ist ein Anweisungspräfix und verändert die folgende Anweisung, um den für RT berechneten Wert als Eingabe zu verwenden, wenn RT angegeben wird. Die Anweisung gibt an, dass RT ”ungenutzt” wird, nachdem die nächste folgende Anweisung ausgeführt ist, und sein Wert undefiniert sein wird.
  • Wenn die Ausführung nach der pcaddis+-Anweisung und vor der nächsten folgenden Anweisung unterbrochen wird, wird der Zustand auf eine Weise aktualisiert, die es gestattet, die Ausführung mit der nächsten Anweisung wiederaufzunehmen und ein korrektes Ergebnis zu erzeugen (d. h. RT wird geschrieben oder ein anderes implementierungsdefiniertes Verfahren zum Bewahren der Auswirkung des Veränderns der nächsten folgenden RT-Quellen-Anweisungen wird verwendet).
  • In einer Ausführungsform übermittelt eine Präfixanweisung eine Letztverwendungs-Information über ein Register in einer NSI-Anweisung.
  • 4B zeigt eine Ausführungsform eines beispielhaften Optimierers 422. Eine Präfix-(erste)Anweisung 420 und eine nächste folgende Anweisung (NSI – next sequential instruction) 421 werden als Kandidaten für die Optimierung 423 bestimmt. Die erste beispielhafte Anweisung 420 enthält einen Opcode (OP1), ein Quellenregisterfeld (RA1), ein Direktfeld (I1) und ein Ergebnis-Zielfeld (RT1). Die beispielhafte NSI-Anweisung 421 enthält einen Opcode (OP2), ein Quellenregisterfeld (RA2), ein Direktfeld (I2) und ein Ergebnis-Zielfeld (RT2). Wenn sie nicht gemäß dem Optimierungskriterium optimierbar sind, werden sie reihenfolgegemäß ausgeführt (OP1 426 und dann OP2 427). Wenn sie aber das Kriterium (einschließlich RT1 = RA2) erfüllen, wird die NSI durch den Optimierer 422 verändert, um einen verketteten Wert von I1 und I2 einzuschließen, um eine neue NSI 425 zu erzeugen, die bezüglich der ersten Anweisung 424 ”out of order” (unter Missachtung der Reihenfolge) ausgeführt werden kann, wobei die veränderte NSI vorzugsweise einen neuen effektiven Opcode (OP2x) hat.
  • 4C zeigt eine weitere Ausführungsform eines beispielhaften Optimierers 422. Eine Präfix-(erste)Anweisung 430 und eine nächste folgende Anweisung (NSI – next sequential instruction) 431 werden als Kandidaten für die Optimierung 433 ermittelt. Die erste beispielhafte Anweisung 430 enthält einen Opcode (OP1), ein Quellenregisterfeld (RA1), ein weiteres Quellenregisterfeld (RB1) und ein Ergebnis-Zielfeld (RT1). Die beispielhafte NSI-Anweisung 431 enthält einen Opcode (OP2), ein Quellenregisterfeld (RA2), ein weiteres Quellenregisterfeld (RB2) und ein Ergebnis-Zielfeld (RT2). Wenn sie nicht gemäß dem Optimierungskriterium optimierbar sind, werden sie reihenfolgegemäß ausgeführt (OP1 436 und dann OP2 437). Wenn sie aber das Kriterium (einschließlich RT1 = RA2) erfüllen, wird die NSI durch den Optimierer 422 verändert, um RB1 einzuschließen, um eine neue NSI 435 zu erzeugen, die bezüglich der ersten Anweisung 434 ”out of order” (unter Missachtung der Reihenfolge) ausgeführt werden kann, wobei die veränderte NSI vorzugsweise einen neuen effektiven Opcode (OP2x) hat.
  • 4D zeigt eine weitere Ausführungsform eines beispielhaften Optimierers 422. Eine Präfix-(erste)Anweisung 440 und eine nächste folgende Anweisung (NSI) 441 werden als Kandidaten für die Optimierung 443 ermittelt. Die erste beispielhafte Anweisung 440 enthält einen Opcode (OP1) und ein Ergebnis-Zielfeld (RT1). Die beispielhafte NSI-Anweisung 441 enthält einen Opcode (OP2), ein Quellenregisterfeld (RA2), ein Ergebnis-Zielfeld (RT2) und ein Direktfeld (I2), wobei die Ausführung der NSI 441 den Operanden in RA2 zum Direktfeld (I2) addiert, um eine effektive Adresse (EA) im Hauptspeicher zu erstellen. Ein Letztverwendungs-Anzeiger ist mit der NSI-Anweisung 441 verknüpft, der anzeigt, dass der Ergebnisregister-RT2*-Operand nicht noch einmal verwendet wird. Wenn das Paar von Anweisungen 440 441 nicht gemäß dem Optimierungskriterium optimierbar ist, wird es reihenfolgegemäß ausgeführt (OP1 446 und dann OP2 447). Wenn es 440 441 aber das Kriterium (einschließlich RT1 = RT2) erfüllt, wird die NSI 441 durch den Optimierer 422 verändert, um eine neue NSI 445 mit einem neuen Opcode (OP3) und einem Funktionsfeld (FN2) zu erzeugen, wobei das FN2-Feld das Spezialregister der ersten Anweisung 440 identifiziert, wobei die neue NSI 445 das durch das FN2-Feld identifizierte Spezialregister auf der aus RA2 und I2 berechneten EA speichert. Unabhängig davon, ob die 2 Anweisungen 440 441 optimierbar sind oder nicht, bewirkt die Ausführung der neuen NSI-Anweisung 445 oder der ursprünglichen NSI-Anweisung 447, dass am architekturdefinierten Register RT2 eine Letztverwendungs-Funktion durchgeführt wird.
  • 4E zeigt eine weitere Ausführungsform eines beispielhaften Optimierers 422. Eine Präfix-(erste)Anweisung 450 und eine nächste folgende Anweisung (NSI) 411 werden als Kandidaten für die Optimierung 453 bestimmt. Die erste beispielhafte Anweisung 450 enthält einen Opcode (OP1), zwei Quellenregisterfelder (RA1, RB1) und ein Ergebnis-Zielfeld (RT1). Die beispielhafte NSI-Anweisung 451 enthält einen Opcode (OP2), zwei Quellenregisterfelder (RA2*, RB2) und ein Ergebnis-Zielfeld (RT2), wobei die Ausführung des Paars von Anweisungen 450 451 eine Operation an 3 Operanden (RA1, RB1 und RB2) durchführt und ein Ergebnis im Ergebnisregister (RT2) speichert. Ein Letztverwendungs-Anzeiger ist mit der NSI-Anweisung 451 verknüpft, der anzeigt, dass der Quellenregister-RA2*-Operand nicht noch einmal verwendet wird. Wenn das Paar von Anweisungen 450 451 nicht gemäß dem Optimierungskriterium optimierbar ist, wird es reihenfolgegemäß ausgeführt (OP1 456 und dann OP2 457). Wenn es 440 441 aber das Kriterium (einschließlich RT1 = RA2) erfüllt, wird die NSI 451 durch den Optimierer 422 verändert, um eine neue NSI 455 mit einem neuen Opcode (OP2x) und drei Operanden (RA1, RB2 und RB1) zu erzeugen. Unabhängig davon, ob die 2 Anweisungen 450 451 optimierbar sind oder nicht, bewirkt die Ausführung der neuen NSI-Anweisung 455 oder der ursprünglichen NSI-Anweisung 457, dass am architekturdefinierten Register RA2 eine Letztverwendungs-Funktion durchgeführt wird.
  • In einer (5 entsprechenden) Ausführungsform geht eine Präfixanweisung einer nächsten Anweisung voraus, wobei die Präfixanweisung einen beim Ausführen der nächsten Anweisung vom Prozessor zu verwendenden Wert bereitstellt. Der Prozessor erhält 501 eine erste Anweisung (Präfixanweisung) und eine zweite Anweisung (nächste Anweisung) zur Ausführung, wobei die erste Anweisung der zweiten Anweisung in Programmreihenfolge vorausgeht. Der Prozessor ermittelt 502, dass die erste Anweisung eine Präfixanweisung ist, wobei die Präfixanweisung einen beim Ausführen der zweiten Anweisung zu verwendenden ersten Wert angibt, wobei die zweite Anweisung einen beim Ausführen der zweiten Anweisung zu verwendenden zweiten Wert angibt. Der Prozessor führt die erste Anweisung ohne Speichern des ersten Werts auf einer von der Anweisung angegebenen Position erfolgreich aus 503 und führt die zweite 504 Anweisung unter Verwendung des ersten Werts ohne Abrufen des ersten Werts auf einer zweiten von der Anweisung angegebenen Position erfolgreich aus.
  • In einer Ausführungsform beinhaltet das Ermitteln außerdem das Ermitteln 505, dass es kein eingreifendes Unterbrechungsereignis zwischen der erfolgreichen Ausführung der ersten Anweisung und der zweiten Anweisung gibt.
  • In einer (6 entsprechenden) Ausführungsform wird der beim Ausführen der zweiten Anweisung zu verwendende Wert als ein Ergebnisregister der ersten Anweisung identifiziert 601, wobei das Ergebnisregister der ersten Anweisung ein Quellenregister der zweiten Anweisung ist.
  • In einer Ausführungsform ist das Ergebnisregister ein mit einem architekturdefinierten Anweisungssatz verknüpftes architekturdefiniertes Register, das entweder aus einem Allgemeinregister oder aus einem Gleitkommaregister besteht.
  • In einer Ausführungsform wird der beim Ausführen der zweiten Anweisung zu verwendende Wert als ein Ergebnis-Hauptspeicheroperand der ersten Anweisung identifiziert 602, wobei der Ergebnis-Hauptspeicheroperand der ersten Anweisung ein Quellen-Speicheroperand der zweiten Anweisung ist.
  • In einer Ausführungsform beinhaltet der zu verwendende Wert 603 ein Ergebnis des Ausführens der ersten Anweisung und ein Direktfeld der ersten Anweisung, wobei das erfolgreiche Ausführen außerdem das Verwenden eines verketteten Werts aus mindestens einem Teil des Direktfelds der ersten Anweisung und einem Direktfeld der zweiten Anweisung beinhaltet.
  • In einer Ausführungsform wird eine einzige interne Anweisung auf Grundlage der ersten Anweisung und der zweiten Anweisung gebildet, wobei das erfolgreiche Ausführen das Ausführen 603 der einzigen internen Anweisung beinhaltet.
  • Vorzugsweise wird eine Angabe darüber, welche architekturdefinierten Register aktiviert oder nicht aktiviert sind, für ein unterbrochen werdendes Programm (X) in einem Sicherungsbereich gesichert und wird eine Angabe darüber, welche architekturdefinierten Register aktiviert oder nicht aktiviert sind, für ein neues Programm (Y), das während eines Kontextwechsels abgerufen wird, aus dem Sicherungsbereich erlangt, wobei der Sicherungsbereich als eine Position architekturdefinierter Register oder eine für ein Betriebssystem (OS) verfügbare Hauptspeicherposition implementiert sein kann. Die Angabe kann ein bitsignifikantes Feld sein, wo jedes Bit einem Eintrag in einem architekturdefinierten Register entspricht, oder sie kann ein Bereich sein oder sie kann die aktivierten/aktiven architekturdefinierten Register anderweitig angeben. In einer Ausführungsform ist möglicherweise nur eine durch das OS bestimmte Teilmenge aktiviert. In einer Ausführungsform hat jeder Thread eines Multithread-Prozessors seinen eigenen Satz von ”Aktiviert”-, ”Inaktiviert”-Anzeigern. In einer weiteren Ausführungsform kann der Wert aktiver Anzeiger eines aktiven Programms oder Threads durch für das aktive Programm oder den Thread verfügbare Maschinenanweisungen explizit festgelegt werden.
  • In einer Ausführungsform bewirkt ein Zugriff auf ein inaktiviertes architekturdefiniertes Register, dass eine Programm-Ausnahmebedingung angezeigt wird.
  • In einer Ausführungsform wird ein inaktiviertes architekturdefiniertes Register durch Ausführung einer registeraktivierenden Anweisung aktiviert, die nicht in das inaktivierte architekturdefinierte Register schreibt.
  • Bei einer handelsüblichen Implementierung von Funktionen und Anweisungen wie einem Betriebssystem verwenden Programmierer die Assemblersprache. Diese in einem Speichermedium 114 (auch als Hauptspeicher bekannt) gespeicherten Anweisungsformate können in einem z/Architecture IBM Server, in einem PowerPC IBM Server oder alternativ in andere Architekturen ausführenden Maschinen nativ ausgeführt werden. Sie können in den bestehenden und in zukünftigen IBM-Servern und auf anderen Maschinen von IBM (z. B. pSeries®-Servern und xSeries®-Servern) emuliert werden. Sie können in Maschinen ausgeführt werden, wo die Ausführung gewöhnlich in einem Emulationsmodus erfolgt.
  • In einer Ausführungsform werden Anweisungen und Funktionen, die für einen ersten Prozessor definiert sind, welcher für eine Anweisungssatz-Architektur (ISA) entwickelt wurde, auf einem zweiten Prozessor mit einer anderen ISA emuliert. Maschinenanweisungen einer ersten ISA beispielsweise werden in Emulationsprogrammroutinen umgesetzt, welche Maschinenanweisungen und Funktionen einer zweiten ISA verwenden. Das auf dem zweiten Prozessor laufende Emulationsprogramm führt für die erste ISA geschriebene Programme aus, indem es Maschinenanweisungen des Programms abruft, die abgerufenen Maschinenanweisungen in Maschinenanweisungen der zweiten ISA enthaltende Programmmodule umsetzt und dann die Programmmodule auf dem für die zweite ISA entworfenen zweiten Prozessor ausführt.
  • Im Emulationsmodus wird die emuliert werdende spezifische Anweisung decodiert und wird eine Subroutine erstellt, um die Einzelanweisung wie in einer C-Subroutine oder einem Treiber zu implementieren, oder wird irgendeine andere Technik zum Bereitstellen eines Treibers für die spezielle Hardware verwendet, wozu ein Fachmann nach Verstehen der Beschreibung einer Ausführungsform der Erfindung in der Lage ist.
  • Außerdem sind die verschiedenartigen oben beschriebenen Ausführungsformen lediglich Beispiele. Es kann viele Abwandlungen von diesen Ausführungsformen geben, ohne vom Geist der vorliegenden Erfindung abzuweichen. Obwohl hierin zum Beispiel eine logisch partitionierte Umgebung beschrieben sein kann, stellt dies nur ein einziges Beispiel dar. Aspekte der Erfindung sind für viele Arten von Umgebungen einschließlich weiterer Umgebungen, die eine Vielzahl von Zonen aufweisen, und nichtpartitionierter Umgebungen vorteilhaft. Ferner gibt es möglicherweise keine zentralen Prozessorkomplexe, aber trotzdem mehrere miteinander verbundene Prozessoren. Des Weiteren ist ein oder sind mehrere Aspekte der Erfindung auf Einzelprozessorumgebungen anwendbar.
  • Obwohl hierin bestimmte Umgebungen beschrieben sind, können wiederum viele Abwandlungen dieser Umgebungen implementiert werden, ohne vom Geist der vorliegenden Erfindung abzuweichen. Zum Beispiel können, wenn die Umgebung logisch partitioniert ist, mehr oder weniger logische Partitionen in der Umgebung enthalten sein. Ferner kann es mehrere miteinander verbundene zentrale Verarbeitungskomplexe geben. Dies sind lediglich einige der Abwandlungen, die machbar sind, ohne vom Geist der der vorliegenden Erfindung abzuweichen. Außerdem sind weitere Abwandlungen möglich. Zum Beispiel können in einer anderen Ausführungsform mehrere Anweisungen auf einmal ausgeführt werden, obwohl der hierin beschriebene Controller die Anweisung durchnummeriert, so dass eine einzige IDTE-Anweisung auf einmal ausgeführt wird. Ferner kann die Umgebung mehrere Controller enthalten. Überdies können mehrere Quiesce-Anforderungen (von einem oder mehreren Controllern) im System nebeneinander anhängig sein. Außerdem sind zusätzliche Abwandlungen möglich.
  • Wie hierin verwendet, beinhaltet der Begriff ”Verarbeitungseinheit” umlagerbare Entitäten wie Gäste; Prozessoren; Emulatoren; und/oder weitere ähnliche Komponenten. Überdies beinhaltet der Ausdruck ”durch eine Verarbeitungseinheit” auch ”im Namen einer Verarbeitungseinheit”. Der Begriff ”Puffer” beinhaltet einen Speicherbereich sowie verschiedene Arten von Datenstrukturen einschließlich, ohne darauf beschränkt zu sein, Arrays; und der Begriff ”Tabelle” kann andere als tabellenartige Datenstrukturen beinhalten. Ferner kann die Anweisung etwas anderes als Register enthalten, um Informationen zu bezeichnen. Überdies können eine Seite, ein Segment und/oder eine Region andere Größen als die hierin beschriebenen haben.
  • Eine oder mehrere der Fähigkeiten der vorliegenden Erfindung können in Software, Firmware, Hardware, oder irgendeiner Kombination davon implementiert sein. Ferner können eine oder mehrere der Fähigkeiten emuliert sein.
  • Ein oder mehrere Aspekte der vorliegenden Erfindung können in einem Herstellungsartikel (z. B. einem oder mehreren Computerprogramm-Produkten) enthalten sein, der zum Beispiel über durch Computer nutzbare Medien verfügt. Zu den Medien gehören zum Beispiel computerlesbare Programmcode-Mittel oder -Logik (z. B. Anweisungen, Code, Befehle usw.), um die Fähigkeiten der vorliegenden Erfindung bereitzustellen und zu unterstützen. Der Herstellungsartikel kann als ein Teil eines Computersystems enthalten sein oder separat verkauft werden. Die Medien (auch als materielles Speichermedium bekannt) können zum Beispiel auf einer Speichereinheit 120 als feste oder tragbare Medien, in Nur-Lese-Speicher (ROM – read-only memory) 116, in Direktzugriffsspeicher (RAM) 114 implementiert oder auf einem Computerchip einer CPU (110), einem E/A-Adapter 118 gespeichert sein.
  • Zusätzlich kann mindestens eine Programmspeichereinheit 120 bereitgestellt sein, die Speichermedien aufweist, welche durch eine Maschine lesbar sind, die mindestens ein Programm von durch die Maschine ausführbaren Anweisungen enthält, um die Fähigkeiten der vorliegenden Erfindung umzusetzen.
  • Die hierin dargestellten Ablaufpläne sind lediglich Beispiele. Von diesen Ablaufplänen oder den hierin beschriebenen Schritten (oder Operationen) kann es viele Abwandlungen geben, ohne vom Geist der Erfindung abzuweichen. Zum Beispiel können die Schritte in einer anderen Reihenfolge ausgeführt werden oder können Schritte hinzugefügt, gelöscht oder verändert werden. Alle diese Abwandlungen werden als ein Bestandteil der beanspruchten Erfindung angesehen.
  • Obwohl bevorzugte Ausführungsformen hierin ausführlich dargestellt und beschrieben wurden, wird es dem Fachmann einleuchten, dass verschiedene Veränderungen, Hinzufügungen, Ersetzungen und dergleichen vorgenommen werden können, ohne vom Umfang der Erfindung wie in den folgenden Ansprüchen definiert abzuweichen.
  • ZITATE ENTHALTEN IN DER BESCHREIBUNG
  • Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
  • Zitierte Patentliteratur
    • US 6314511 [0003]
    • US 2011/0087865 [0024]
    • US 6189088 [0047]

Claims (15)

  1. Computersystem zum Ausführen von Anweisungen, wobei das System aufweist: einen Prozessor, der so konfiguriert ist, dass er mit einem Hauptspeicher Daten austauscht, wobei der Prozessor eine Anweisungsabruffunktion, einen Anweisungsoptimierer und eine oder mehrere Ausführungseinheiten zum Ausführen von optimierten Anweisungen aufweist, wobei der Prozessor so konfiguriert ist, dass er ein Verfahren durchführt, das aufweist: Erlangen einer ersten Anweisung und einer zweiten Anweisung zur Ausführung, wobei die erste Anweisung der zweiten Anweisung in Programmreihenfolge vorausgeht; Ermitteln, dass die erste Anweisung eine Präfixanweisung ist, wobei die Präfixanweisung einen beim Ausführen der zweiten Anweisung zu verwendenden ersten Wert angibt, wobei die zweite Anweisung einen beim Ausführen der zweiten Anweisung zu verwendenden zweiten Wert angibt; erfolgreiches Ausführen der ersten Anweisung ohne Speichern des ersten Werts auf einer von der Anweisung angegebenen Position; und erfolgreiches Ausführen der zweiten Anweisung unter Verwendung des ersten Werts ohne Abrufen des ersten Werts auf einer zweiten von der Anweisung angegebenen Position.
  2. System nach Anspruch 1, wobei das Ermitteln außerdem das Ermitteln, dass es kein eingreifendes Unterbrechungsereignis zwischen der erfolgreichen Ausführung der ersten Anweisung und der zweiten Anweisung gibt, beinhaltet.
  3. System nach Anspruch 2, wobei der beim Ausführen der zweiten Anweisung zu verwendende erste Wert als ein Ergebnisregister der ersten Anweisung identifiziert wird, wobei das Ergebnisregister der ersten Anweisung ein Quellenregister der zweiten Anweisung ist.
  4. System nach Anspruch 3, wobei das Ergebnisregister ein mit einem architekturdefinierten Anweisungssatz verknüpftes architekturdefiniertes Register ist, das entweder aus einem Allgemeinregister oder aus einem Gleitkommaregister besteht.
  5. System nach einem der Ansprüche 2 bis 4, wobei der beim Ausführen der zweiten Anweisung zu verwendende erste Wert als ein Ergebnis-Hauptspeicheroperand der ersten Anweisung identifiziert wird, wobei der Ergebnis-Hauptspeicheroperand der ersten Anweisung ein Quellen-Speicheroperand der zweiten Anweisung ist.
  6. System nach einem der Ansprüche 1 bis 5, wobei der zu verwendende erste Wert ein Ergebnis des Ausführens der ersten Anweisung und ein Direktfeld der ersten Anweisung beinhaltet, wobei das erfolgreiche Ausführen der zweiten Anweisung außerdem das Verwenden eines verketteten Werts aus mindestens einem Teil des Direktfelds der ersten Anweisung und einem Direktfeld der zweiten Anweisung beinhaltet.
  7. System nach einem der Ansprüche 1 bis 6, wobei der Prozessor außerdem so konfiguriert ist, dass er: eine einzige interne Anweisung auf Grundlage der ersten Anweisung und der zweiten Anweisung bildet, wobei das erfolgreiche Ausführen das Ausführen der einzigen internen Anweisung beinhaltet.
  8. Computerimplementiertes Verfahren zum Ausführen von Anweisungen, wobei das Verfahren aufweist: Erlangen einer ersten Anweisung und einer zweiten Anweisung zur Ausführung, wobei die erste Anweisung der zweiten Anweisung in Programmreihenfolge vorausgeht; Ermitteln, durch einen Prozessor, dass die erste Anweisung eine Präfixanweisung ist, wobei die Präfixanweisung einen beim Ausführen der zweiten Anweisung zu verwendenden ersten Wert angibt, wobei die zweite Anweisung einen beim Ausführen der zweiten Anweisung zu verwendenden zweiten Wert angibt; erfolgreiches Ausführen der ersten Anweisung ohne Speichern des ersten Werts auf einer von der Anweisung angegebenen Position; und erfolgreiches Ausführen der zweiten Anweisung unter Verwendung des ersten Werts ohne Abrufen des ersten Werts auf einer zweiten von der Anweisung angegebenen Position.
  9. Verfahren nach Anspruch 8, wobei das Ermitteln außerdem das Ermitteln, dass es kein eingreifendes Unterbrechungsereignis zwischen der erfolgreichen Ausführung der ersten Anweisung und der zweiten Anweisung gibt, beinhaltet.
  10. Verfahren nach Anspruch 9, wobei der beim Ausführen der zweiten Anweisung zu verwendende erste Wert als ein Ergebnisregister der ersten Anweisung identifiziert wird, wobei das Ergebnisregister der ersten Anweisung ein Quellenregister der zweiten Anweisung ist.
  11. Verfahren nach Anspruch 10, wobei das Ergebnisregister ein mit einem architekturdefinierten Anweisungssatz verknüpftes architekturdefiniertes Register ist, das entweder aus einem Allgemeinregister oder aus einem Gleitkommaregister besteht.
  12. Verfahren nach einem der Ansprüche 9 bis 11, wobei der beim Ausführen der zweiten Anweisung zu verwendende erste Wert als ein Ergebnis-Hauptspeicheroperand der ersten Anweisung identifiziert wird, wobei der Ergebnis-Hauptspeicheroperand der ersten Anweisung ein Quellen-Speicheroperand der zweiten Anweisung ist.
  13. Verfahren nach einem der Ansprüche 8 bis 12, wobei der zu verwendende erste Wert ein Ergebnis des Ausführens der ersten Anweisung und ein Direktfeld der ersten Anweisung beinhaltet, wobei das erfolgreiche Ausführen der zweiten Anweisung außerdem das Verwenden eines verketteten Werts aus mindestens einem Teil des Direktfelds der ersten Anweisung und einem Direktfeld der zweiten Anweisung beinhaltet.
  14. Verfahren nach einem der Ansprüche 8 bis 13, welches außerdem aufweist: Bilden einer einzigen internen Anweisung auf Grundlage der ersten Anweisung und der zweiten Anweisung, wobei das erfolgreiche Ausführen das Ausführen der einzigen internen Anweisung beinhaltet.
  15. Computerprogramm-Produkt zum Ausführen von Anweisungen, wobei das Computerprogramm-Produkt ein durch eine Verarbeitungsschaltung lesbares materielles Speichermedium aufweist, das Anweisungen zur Ausführung durch die Verarbeitungsschaltung zur Durchführung eines Verfahrens nach einem der Ansprüche 8 bis 14 speichert.
DE102012216592A 2011-10-03 2012-09-18 Präfix-Computeranweisung zur Erweiterung der Anweisungsfunktionalität Ceased DE102012216592A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/251,426 US9329869B2 (en) 2011-10-03 2011-10-03 Prefix computer instruction for compatibily extending instruction functionality
US13/251,426 2011-10-03

Publications (1)

Publication Number Publication Date
DE102012216592A1 true DE102012216592A1 (de) 2013-04-04

Family

ID=46882031

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102012216592A Ceased DE102012216592A1 (de) 2011-10-03 2012-09-18 Präfix-Computeranweisung zur Erweiterung der Anweisungsfunktionalität

Country Status (3)

Country Link
US (2) US9329869B2 (de)
DE (1) DE102012216592A1 (de)
GB (1) GB2495363B (de)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9940242B2 (en) 2014-11-17 2018-04-10 International Business Machines Corporation Techniques for identifying instructions for decode-time instruction optimization grouping in view of cache boundaries

Families Citing this family (49)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9372695B2 (en) 2013-06-28 2016-06-21 Globalfoundries Inc. Optimization of instruction groups across group boundaries
US9348596B2 (en) 2013-06-28 2016-05-24 International Business Machines Corporation Forming instruction groups based on decode time instruction optimization
US9619230B2 (en) 2013-06-28 2017-04-11 International Business Machines Corporation Predictive fetching and decoding for selected instructions
GB2521019B (en) * 2014-05-27 2016-05-25 Imagination Tech Ltd Decoding instructions that are modified by one or more other instructions
US9600286B2 (en) * 2014-06-30 2017-03-21 International Business Machines Corporation Latent modification instruction for transactional execution
KR102270790B1 (ko) 2014-10-20 2021-06-29 삼성전자주식회사 데이터 처리 방법 및 장치
US10671393B2 (en) * 2015-04-24 2020-06-02 International Business Machines Corporation Techniques for facilitating cracking and fusion within a same instruction group
US10877759B2 (en) 2015-09-30 2020-12-29 International Business Machines Corporation Managing the capture of information in applications with prefix instructions
US9870305B2 (en) 2015-09-30 2018-01-16 International Business Machines Corporation Debugging of prefixed code
US10761852B2 (en) 2015-09-30 2020-09-01 International Business Machines Corporation Extending data range addressing
US10394568B2 (en) 2015-09-30 2019-08-27 International Business Machines Corporation Exception handling for applications with prefix instructions
GB2543304B (en) * 2015-10-14 2020-10-28 Advanced Risc Mach Ltd Move prefix instruction
US10936713B2 (en) * 2015-12-17 2021-03-02 The Charles Stark Draper Laboratory, Inc. Techniques for metadata processing
US10235176B2 (en) 2015-12-17 2019-03-19 The Charles Stark Draper Laboratory, Inc. Techniques for metadata processing
US9785800B2 (en) * 2015-12-23 2017-10-10 Intel Corporation Non-tracked control transfers within control transfer enforcement
US20170185400A1 (en) 2015-12-23 2017-06-29 Intel Corporation Mode-specific endbranch for control flow termination
US10061580B2 (en) * 2016-02-25 2018-08-28 International Business Machines Corporation Implementing a received add program counter immediate shift (ADDPCIS) instruction using a micro-coded or cracked sequence
US9977677B2 (en) * 2016-04-07 2018-05-22 International Business Machines Corporation Execution slice with supplemental instruction port for an instruction using a source operand from another instruction port
US10761849B2 (en) * 2016-09-22 2020-09-01 Intel Corporation Processors, methods, systems, and instruction conversion modules for instructions with compact instruction encodings due to use of context of a prior instruction
US10740067B2 (en) 2017-06-23 2020-08-11 International Business Machines Corporation Selective updating of floating point controls
US10481908B2 (en) 2017-06-23 2019-11-19 International Business Machines Corporation Predicted null updated
US10379851B2 (en) * 2017-06-23 2019-08-13 International Business Machines Corporation Fine-grained management of exception enablement of floating point controls
US10684852B2 (en) 2017-06-23 2020-06-16 International Business Machines Corporation Employing prefixes to control floating point operations
US10514913B2 (en) 2017-06-23 2019-12-24 International Business Machines Corporation Compiler controls for program regions
US10725739B2 (en) 2017-06-23 2020-07-28 International Business Machines Corporation Compiler controls for program language constructs
US10310814B2 (en) 2017-06-23 2019-06-04 International Business Machines Corporation Read and set floating point control register instruction
US11150908B2 (en) 2017-08-18 2021-10-19 International Business Machines Corporation Dynamic fusion of derived value creation and prediction of derived values in a subroutine branch sequence
US11150904B2 (en) 2017-08-18 2021-10-19 International Business Machines Corporation Concurrent prediction of branch addresses and update of register contents
US10884746B2 (en) 2017-08-18 2021-01-05 International Business Machines Corporation Determining and predicting affiliated registers based on dynamic runtime control flow analysis
US10884745B2 (en) 2017-08-18 2021-01-05 International Business Machines Corporation Providing a predicted target address to multiple locations based on detecting an affiliated relationship
US10719328B2 (en) 2017-08-18 2020-07-21 International Business Machines Corporation Determining and predicting derived values used in register-indirect branching
US10534609B2 (en) 2017-08-18 2020-01-14 International Business Machines Corporation Code-specific affiliated register prediction
US10908911B2 (en) 2017-08-18 2021-02-02 International Business Machines Corporation Predicting and storing a predicted target address in a plurality of selected locations
US10884747B2 (en) 2017-08-18 2021-01-05 International Business Machines Corporation Prediction of an affiliated register
US10620955B2 (en) 2017-09-19 2020-04-14 International Business Machines Corporation Predicting a table of contents pointer value responsive to branching to a subroutine
US10705973B2 (en) 2017-09-19 2020-07-07 International Business Machines Corporation Initializing a data structure for use in predicting table of contents pointer values
US10884929B2 (en) 2017-09-19 2021-01-05 International Business Machines Corporation Set table of contents (TOC) register instruction
US10896030B2 (en) 2017-09-19 2021-01-19 International Business Machines Corporation Code generation relating to providing table of contents pointer values
US10725918B2 (en) 2017-09-19 2020-07-28 International Business Machines Corporation Table of contents cache entry having a pointer for a range of addresses
US11061575B2 (en) * 2017-09-19 2021-07-13 International Business Machines Corporation Read-only table of contents register
US10713050B2 (en) 2017-09-19 2020-07-14 International Business Machines Corporation Replacing Table of Contents (TOC)-setting instructions in code with TOC predicting instructions
US20210026934A1 (en) 2018-02-02 2021-01-28 Dover Microsystems, Inc. Systems and methods for policy linking and/or loading for secure initialization
JP7039716B2 (ja) 2018-02-02 2022-03-22 ザ チャールズ スターク ドレイパー ラボラトリー, インク. ポリシ実行処理のためのシステムおよび方法
US11797398B2 (en) 2018-04-30 2023-10-24 Dover Microsystems, Inc. Systems and methods for checking safety properties
CN109101276B (zh) 2018-08-14 2020-05-05 阿里巴巴集团控股有限公司 在cpu中执行指令的方法
EP3877874A1 (de) 2018-11-06 2021-09-15 Dover Microsystems, Inc. Systeme und verfahren zum stillstand eines host-prozessors
WO2020132012A1 (en) 2018-12-18 2020-06-25 Dover Microsystems, Inc. Systems and methods for data lifecycle protection
US10956168B2 (en) 2019-03-08 2021-03-23 International Business Machines Corporation Post completion execution in an out-of-order processor design
US11188334B2 (en) * 2019-12-02 2021-11-30 Microsoft Technology Licensing, Llc Obsoleting values stored in registers in a processor based on processing obsolescent register-encoded instructions

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6189088B1 (en) 1999-02-03 2001-02-13 International Business Machines Corporation Forwarding stored dara fetched for out-of-order load/read operation to over-taken operation read-accessing same memory location
US6314511B2 (en) 1997-04-03 2001-11-06 University Of Washington Mechanism for freeing registers on processors that perform dynamic out-of-order execution of instructions using renaming registers
US20110087865A1 (en) 2009-10-13 2011-04-14 International Business Machines Corporation Intermediate Register Mapper

Family Cites Families (54)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5095526A (en) 1990-01-26 1992-03-10 Apple Computer, Inc. Microprocessor with improved interrupt response with interrupt data saving dependent upon processor status
US5303358A (en) 1990-01-26 1994-04-12 Apple Computer, Inc. Prefix instruction for modification of a subsequent instruction
US5201056A (en) * 1990-05-02 1993-04-06 Motorola, Inc. RISC microprocessor architecture with multi-bit tag extended instructions for selectively attaching tag from either instruction or input data to arithmetic operation output
US5163139A (en) 1990-08-29 1992-11-10 Hitachi America, Ltd. Instruction preprocessor for conditionally combining short memory instructions into virtual long instructions
US5539911A (en) 1991-07-08 1996-07-23 Seiko Epson Corporation High-performance, superscalar-based computer system with out-of-order instruction execution
US5590352A (en) 1994-04-26 1996-12-31 Advanced Micro Devices, Inc. Dependency checking and forwarding of variable width operands
JP3711422B2 (ja) * 1995-12-20 2005-11-02 セイコーエプソン株式会社 情報処理回路
TW334546B (en) 1996-03-18 1998-06-21 Hitachi Ltd Data processor
US5794010A (en) 1996-06-10 1998-08-11 Lsi Logic Corporation Method and apparatus for allowing execution of both compressed instructions and decompressed instructions in a microprocessor
US6094719A (en) 1997-06-25 2000-07-25 Sun Microsystems, Inc. Reducing data dependent conflicts by converting single precision instructions into microinstructions using renamed phantom registers in a processor having double precision registers
US6349383B1 (en) 1998-09-10 2002-02-19 Ip-First, L.L.C. System for combining adjacent push/pop stack program instructions into single double push/pop stack microinstuction for execution
US7117342B2 (en) 1998-12-03 2006-10-03 Sun Microsystems, Inc. Implicitly derived register specifiers in a processor
US6332215B1 (en) 1998-12-08 2001-12-18 Nazomi Communications, Inc. Java virtual machine hardware for RISC and CISC processors
TW477936B (en) * 1998-12-29 2002-03-01 Ind Tech Res Inst Instruction folding method and device used in a stack machine
US6463525B1 (en) * 1999-08-16 2002-10-08 Sun Microsystems, Inc. Merging single precision floating point operands
US6449710B1 (en) 1999-10-29 2002-09-10 Stmicroelectronics, Inc. Stitching parcels
US6393579B1 (en) 1999-12-21 2002-05-21 Intel Corporation Method and apparatus for saving power and improving performance in a collapsable pipeline using gated clocks
US6687806B1 (en) 2000-06-15 2004-02-03 Advanced Micro Devices, Inc. Apparatus and method for generating 64 bit displacement and immediate values
US6748519B1 (en) 2000-06-15 2004-06-08 International Business Machines Corporation Method and apparatus for utilizing renamed registers based upon a functional or defective operational status of the register
US6651160B1 (en) * 2000-09-01 2003-11-18 Mips Technologies, Inc. Register set extension for compressed instruction set
EP1199629A1 (de) 2000-10-17 2002-04-24 STMicroelectronics S.r.l. Prozessorarchitektur mit veränderlichen Pipelinestufen
US7228403B2 (en) 2000-12-23 2007-06-05 International Business Machines Corporation Method for handling 32 bit results for an out-of-order processor with a 64 bit architecture
US6675376B2 (en) 2000-12-29 2004-01-06 Intel Corporation System and method for fusing instructions
US7162621B2 (en) 2001-02-21 2007-01-09 Mips Technologies, Inc. Virtual instruction expansion based on template and parameter selector information specifying sign-extension or concentration
US6950926B1 (en) 2001-03-02 2005-09-27 Advanced Micro Devices, Inc. Use of a neutral instruction as a dependency indicator for a set of instructions
US20030154419A1 (en) 2002-01-10 2003-08-14 Binyu Zang Register renaming in binary translation using rollback and recovery
US6957321B2 (en) 2002-06-19 2005-10-18 Intel Corporation Instruction set extension using operand bearing NOP instructions
US7941651B1 (en) 2002-06-27 2011-05-10 Intel Corporation Method and apparatus for combining micro-operations to process immediate data
JP3856737B2 (ja) 2002-07-19 2006-12-13 株式会社ルネサステクノロジ データ処理装置
US7131017B2 (en) 2002-08-16 2006-10-31 Carnegie Mellon University Programmable pipeline fabric having mechanism to terminate signal propagation
US6934830B2 (en) 2002-09-26 2005-08-23 Sun Microsystems, Inc. Method and apparatus for reducing register file access times in pipelined processors
WO2004051450A2 (en) 2002-12-04 2004-06-17 Koninklijke Philips Electronics N.V. Software-based control of microprocessor power dissipation
US7401207B2 (en) 2003-04-25 2008-07-15 International Business Machines Corporation Apparatus and method for adjusting instruction thread priority in a multi-thread processor
US7805536B1 (en) 2003-05-23 2010-09-28 Juniper Networks, Inc. Determining forwarding plane liveness
KR100531314B1 (ko) 2004-03-16 2005-11-29 엘지전자 주식회사 영상표시장치
US20050251662A1 (en) 2004-04-22 2005-11-10 Samra Nicholas G Secondary register file mechanism for virtual multithreading
US7395419B1 (en) 2004-04-23 2008-07-01 Apple Inc. Macroscalar processor architecture
US7284092B2 (en) 2004-06-24 2007-10-16 International Business Machines Corporation Digital data processing apparatus having multi-level register file
US20060174089A1 (en) 2005-02-01 2006-08-03 International Business Machines Corporation Method and apparatus for embedding wide instruction words in a fixed-length instruction set architecture
US20060190710A1 (en) 2005-02-24 2006-08-24 Bohuslav Rychlik Suppressing update of a branch history register by loop-ending branches
US8296550B2 (en) 2005-08-29 2012-10-23 The Invention Science Fund I, Llc Hierarchical register file with operand capture ports
US7380104B2 (en) 2006-04-25 2008-05-27 International Business Machines Corporation Method and apparatus for back to back issue of dependent instructions in an out of order issue queue
JP2007304663A (ja) 2006-05-08 2007-11-22 Univ Nagoya プロセッサ及びそのデータ処理方法
US7506139B2 (en) 2006-07-12 2009-03-17 International Business Machines Corporation Method and apparatus for register renaming using multiple physical register files and avoiding associative search
US20080148022A1 (en) 2006-12-13 2008-06-19 Arm Limited Marking registers as available for register renaming
US7676653B2 (en) * 2007-05-09 2010-03-09 Xmos Limited Compact instruction set encoding
US7818542B2 (en) 2007-07-10 2010-10-19 Globalfoundries Inc. Method and apparatus for length decoding variable length instructions
US7818543B2 (en) 2007-07-10 2010-10-19 Globalfoundries Inc. Method and apparatus for length decoding and identifying boundaries of variable length instructions
US8108614B2 (en) 2007-12-31 2012-01-31 Eric Sprangle Mechanism for effectively caching streaming and non-streaming data patterns
US20100312991A1 (en) 2008-05-08 2010-12-09 Mips Technologies, Inc. Microprocessor with Compact Instruction Set Architecture
JP5357475B2 (ja) 2008-09-09 2013-12-04 ルネサスエレクトロニクス株式会社 データプロセッサ
US20100095286A1 (en) 2008-10-10 2010-04-15 Kaplan David A Register reduction and liveness analysis techniques for program code
US8266411B2 (en) 2009-02-05 2012-09-11 International Business Machines Corporation Instruction set architecture with instruction characteristic bit indicating a result is not of architectural importance
JP5471082B2 (ja) 2009-06-30 2014-04-16 富士通株式会社 演算処理装置および演算処理装置の制御方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6314511B2 (en) 1997-04-03 2001-11-06 University Of Washington Mechanism for freeing registers on processors that perform dynamic out-of-order execution of instructions using renaming registers
US6189088B1 (en) 1999-02-03 2001-02-13 International Business Machines Corporation Forwarding stored dara fetched for out-of-order load/read operation to over-taken operation read-accessing same memory location
US20110087865A1 (en) 2009-10-13 2011-04-14 International Business Machines Corporation Intermediate Register Mapper

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9940242B2 (en) 2014-11-17 2018-04-10 International Business Machines Corporation Techniques for identifying instructions for decode-time instruction optimization grouping in view of cache boundaries
US10061705B2 (en) 2014-11-17 2018-08-28 International Business Machines Corporation Identifying instructions for decode-time instruction optimization grouping in view of cache boundaries

Also Published As

Publication number Publication date
GB201213326D0 (en) 2012-09-05
GB2495363B (en) 2013-12-04
US20140095833A1 (en) 2014-04-03
GB2495363A (en) 2013-04-10
GB2495363A8 (en) 2013-04-24
US9329869B2 (en) 2016-05-03
US20130086362A1 (en) 2013-04-04
US9311093B2 (en) 2016-04-12

Similar Documents

Publication Publication Date Title
DE102012216592A1 (de) Präfix-Computeranweisung zur Erweiterung der Anweisungsfunktionalität
DE102012216571A1 (de) Nutzung einer architekturdefinierten letztverwendungs-operandenangabe in einem computersystem-operandenressourcenpool
DE102012216565A1 (de) Decodierzeit-computeranweisungsoptimierung
DE102012217970A1 (de) Computeranweisungen zum Aktivieren und Deaktivieren von Operanden
US9311084B2 (en) RDA checkpoint optimization
DE102012216567A1 (de) Verwalten eines register-cachespeichers auf grundlage eines architekturdefinierten computeranweisungssatzes
US9575754B2 (en) Zero cycle move
DE102014003399A1 (de) Systeme und Verfahren zur Implementierung transaktionalen Speichers
US20160179586A1 (en) Lightweight restricted transactional memory for speculative compiler optimization
US20130086367A1 (en) Tracking operand liveliness information in a computer system and performance function based on the liveliness information
JP6867082B2 (ja) 装置、方法、プログラム、およびコンピュータ可読記録媒体
DE102012220029A1 (de) Spekulative Ausführung und Zurücksetzen
US9354874B2 (en) Scalable decode-time instruction sequence optimization of dependent instructions
DE102014119281A1 (de) Prozessor mit virtualisierter befehlssatzstruktur &amp; verfahren
JP6687232B2 (ja) データ投機実行のためのシステム、装置および方法
US9558118B2 (en) Tracing mechanism for recording shared memory interleavings on multi-core processors
DE102014003799A1 (de) Systeme und Verfahren zur Übertragungseliminierung mit Bypass-Mehrfachinstanziierungstabelle
CN101147125A (zh) 用于直接累积未调准数据的可写入分段字的架构型寄存器
US20130159679A1 (en) Providing Hint Register Storage For A Processor
DE102018002525A1 (de) Hybridatomaritätsunterstützung für einen binärübersetzungsbasierten mikroprozessor
DE102013206381A1 (de) Anweisungs-optimierender Prozessor mit Verzweigungs-Zähl-Tabelle in Hardware
DE102013213143A1 (de) Anwendungs-spezifische Verkettungs-Platzhalter zur Anweisungs-Code-Übersetzung
KR20140113307A (ko) 벡터 레지스터 파일의 동적 재명명 기반의 레지스터 재구성
DE102016006560A1 (de) Systeme, Verfahren und Vorrichtungen zur Leistungsverbesserung von statusabhängigen Berechnungen
DE102013210160A1 (de) Erleichtern der Ausführung einer Transaktion nach wiederholten Abbrüchen der Transaktion

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R016 Response to examination communication
R016 Response to examination communication
R002 Refusal decision in examination/registration proceedings
R003 Refusal decision now final