-
Hintergrund der Erfindung
-
Technisches Gebiet
-
Die
Erfindung betrifft Mikroprozessoren und insbesondere Mechanismen
zum Erweitern des Registeradressenraums in einer existierenden Mikroprozessorarchitektur.
-
Stand der
Technik
-
Mikroprozessorhersteller
entwickeln stetig neue Produkte, die ×86 Befehle ausführen, um
die Kompatibilität
mit der großen
Menge an für
vorhergehende 80×86
Generationen von Software – der 8086/8,
80286, 80386 und 80486 – zu
wahren. Das Wahren der Softwarekompatibilität hat neueren Produkten zahlreiche
architektonische Kompromisse abverlangt. Um die Funktionen früherer Produkte
zu bewahren, wurde die Mikroprozessorhardware oft einfach modifiziert
oder erweitert, um die Fähigkeiten und
die Leistung zu steigern.
-
Der ×86 Befehlssatz
ist relativ komplex und durch eine Vielzahl von Befehlen variabler
Bytelänge gekennzeichnet. 1 zeigt
ein generisches Format eines ×86
Befehls 10. bei einem ×86
Befehl 10 können
mehrere optionale Präfixbytes 12 1-2 Operationscodebytes
(Opcode) in einem Opcodefeld 14 vorangehen. Ein optionales
Adressiermodusbyte (Mod R/M) 16 kann dem Opcodefeld 14 folgen.
Ein optionales Scale-Index-Byte (SIB) 18 kann auf das optionale
Mod R/M Byte 16 folgen. Ein optionales Verschiebungsfeld 20 kann
auf das optionale SIB Byte 18 folgen, und ein optionales
Direktdatenfeld 22 kann auf das optionale Verschie bungsfeld 20 folgen.
Das optionale Verschiebungsfeld 20 enthält eine bei Adressenberechnungen
verwendete Konstante und das optionale Direktdatenfeld 22 enthält eine
als Befehlsoperand verwendete Konstante.
-
Die
1–2 Opcodebytes
im Opcodefeld 14 definieren die grundlegende Operation
des ×86
Befehls 10. die grundlegende Operation umfaßt üblicherweise
wenigstens einen Operanden. Da die ×86 Architektur keine Transfers
von Speicher zu Speicher ermöglicht,
ist mindestens einer der Operanden stets ein Register (d.h. ein
Registeroperand). Die drei geringstwertigen Bits eines Opcodebytes
können
einen Registeroperanden angeben. Die kürzesten ×86 Befehle sind nur ein Byte
lang und umfassen ein einzelnes Opcodebyte. Es sei darauf hingewiesen,
daß 80286
ein Maximum für
einen ×86
Befehl von 10 Bytes vorgibt, während
80386 und 80486 ×86
Befehlslängen
von bis zu 15 Bytes zulassen.
-
Die
Operation eines ×86
Befehls kann durch Präfixbytes 12 modifiziert
werden. Ein Präfixbyte 12 kann
beispielsweise die Größe der Adresse
oder des Operanden des ×86
Befehls verändern,
das bei der Speicheradressierung verwendete Voreinstellungssegment
deaktivieren, oder einen den ×86
Befehl ausführenden
Prozessor anweisen, eine Stringoperation mehrfach zu wiederholen.
Es sei darauf hingewiesen, daß die
Größe eines
Befehlsoperanden die Anzahl er Bits im Operanden oder die "Breite" des Operanden in
Bits betrifft.
-
Das
optionale Mod R/M Byte 16 spezifiziert verwendete Register
sowie Speicheradressiermodi. 2 zeigt
die Felder des Mod R/M Byte 16. Wie in 2 dargestellt,
ist das Mod R/M Byte 16 in drei Felder unterteilt: ein
Modusfeld (MOD), ein Register/Opcodefeld (REG/OP) und ein Register/Speicherfeld
(R/M). der Inhalt des MOD Felds bestimmt, wie das R/M Feld und das
Verschiebungsfeld 20 interpretiert werden. Das REG/OP Feld
dien entweder der Spezifizierung eines Registeroperanden oder dem Halten
zusätzlicher
Opcodebits. Das R/M Feld spezifiziert entweder einen Registeroperanden
oder einen Speicheroperanden, je nach dem Inhalt des MOD Felds.
-
Das
optionale SIB Byte 18 wird nur bei der 32-Bit basisbezogenen
Adressierung unter Verwendung von Skalierungs- und Indexfaktoren
benutzt. 3 zeigt die Felder des SIB Bytes 18.
Wie in 3 dargestellt, ist das SIB Byte 18 in
drei Fel der unterteilt: ein SCALE Feld, ein INDEX Feld und ein BASIS Feld.
Das BASIS Feld gibt an, welches Register einen Basiswert für eine Adressenberechnung
enthält. Das
INDEX Feld gibt an, welches Register einen Indexwert für die Adressenberechnung
enthält,
und das SCALE Feld gibt das Quadrat an, mit dem der Indexwert multipliziert
wird, bevor er zusammen mit jeglicher Verschiebung zum Basiswert
addiert wird.
-
In
den geringstwertigen drei Bits eines Opcodebytes können Bezüge zu einem
bestimmten Register der ×86
Architektur auftreten, beispielsweise das REG/OP Feld des optionalen
Mod R/M Bytes 16, das R/M Feld des optionalen Mod R/M Bytes 16 oder die
BASIS und INDEX Felder des optionalen SIB Bytes 18. Es
sind also vier Bezüge
zu einem Register in einem ×86
Befehl möglich.
Wie zuvor beschrieben, können
die drei geringstwertigen Bits eines Opcodebytes einen Registeroperanden
angeben. Die REG/OP und R/M Felder des Mod R/M Bytes 16 können Quellen-
und Zielregister angeben. Die BASIS und INDEX Felder des SIB Bytes 18 können Register angeben,
die Basis- und Indexwerte enthalten, die bei der Operandenadressenberechnung
für Speicherzugriffe
verwendet werden. Es sei darauf hingewiesen, daß nur drei der vier Registerbezüge in einem
bestimmten ×86
Befehl auftreten können.
-
Ein
erheblicher Nachteil der ×86
Architektur ist die relativ geringe Zahl an Allzweckregistern. Die ×86 Architektur
definiert gegenwärtig
acht 32-Bit Allzweckregister: EAX, EBX, ECX, EDX, ESP, EDP, EBP,
ESI und EDI. Dagegen weisen typische RISC Prozessoren mindestens
32 Allzweckregister auf. Ein großer Registersatz ermöglicht das
Speichern von mehr Operanden in der Registerdatei mit relativ schnellem
Zugriff, anstatt in einem Speicher mit relativ langsamem Zugriff.
Moderne Compiler sind ebenfalls in der Lage, eine größere Anzahl
von Registern zu nutzen, um eine höhere Befehlsebenenparallelität für eine erhöhte superskalare
Ausführungsleistung zu
erreichen. Neben der begrenzten Zahl von ×86 Registern wird deren Verwendung
durch den Compiler oft dadurch verkompliziert, daß die meisten
spezielle implizite Verwendungen in verschiedenen Befehlen haben.
-
EP-A-0942357
offenbart einen Datenprozessor, der mit mehreren Befehlsformaten
kompatibel ist. Ein erstes Befehlsformat definiert ein Registeradressierfeld einer
vorbestimmten Größe, während ein
zweites Befehlsformat ein größeres Registeradressierfeld
definiert. Wenn ein empfangener Befehl als im ersten Befehlsformat
erkannt wird, führt
der Prozessor den Befehl unter Verwendung von Daten aus, die in
einer ersten Registerdatei gehalten sind. Wenn der Befehl als in
dem zweiten Befehlsformat vorliegend erkannt wird, führt der
Prozessor den Befehl unter Verwendung von Daten aus, die in einer zweiten
Registerdatei enthalten sind, wobei die erste Registerdatei mehr
Register enthält
als die zweite Registerdatei.
-
US-A-6014739
der Anmelderin offenbart einen Mikroprozessor mit einer Registerdatei,
die einen Standardregistersatz und einen erweiterten Registersatz
enthält.
Eine Befehlsdecoderschaltung empfängt einen Befehl, der ein Erweiterungsregisterschlüsselfeld
enthält,
das als Standardregisterfeld dient, wenn das Erweiterungsregisterschlüsselfeld einen
anderen als den Erweiterungsregisterschlüsselwert enthält.
-
US-A-5935240
offenbart einen Befehl zum Übertragen
gepackter Daten von einer erweiterten Registerdatei und entweder
einer Ganzzahlenregisterdatei oder einem Speicher. Der Befehl weist
einen Opcode auf, der die Richtung des Transfers in bezug auf die
erweiterte Registerdatei angibt.
-
Es
wird eine Zentralverarbeitungseinheit (CPU) mit einer Registerdatei
und einem mit der Registerdatei verbundenen Ausführungskern beschrieben. Die
Registerdatei weist einen Standardregistersatz und einen erweiterten
Registersatz auf. Der Standardregistersatz weist mehrere Standardregister auf
und der erweiterte Registersatz weist mehrere erweiterte Register
auf. Der Ausführungskern
holt Befehle und führt
diese aus und empfängt
ein Signal, das einen Betriebsmodus der CPU angibt. Der Ausführungskern
reagiert auf einen Befehl durch den Zugriff auf wenigstens ein erweitertes
Register, wenn das Signal angibt, daß die CPU in einem erweiterten Registermodus
arbeitet und der Befehl einen Präfixbereich
hat, der zum Zugreifen auf das wenigstens eine erweiterte Register
erforderlich ist. Es wird ferner ein Computersystem beschrieben,
welches die CPU enthält.
-
Die
Standardregister können
Allzweckregister sein, die von einer CPU Architektur in Verbindung mit
dem Befehl definiert sind. Die Standardregister können bei spielsweise
Allzweckregister sein, die von der ×86 Architektur definiert sind,
und der Befehl kann ein Befehl des ×86 Befehlssatzes sein. Die
Anzahl der Standardregister kann geringer als oder gleich der Zahl
von Allzweckregistern sein, die durch die CPU Architektur definiert
sind, und die Anzahl der erweiterten Register kann größer als
die Zahl der von der CPU Architektur definierten Allzweckregister sein.
In diesem Fall kann der Befehl ohne den Präfixbereich Registeridentifizierungsinformationen
aufweisen, die ausreichen, ein gewähltes Standardregister anzugeben.
Da jedoch die Zahl der erweiterten Register die Zahl der durch die
CPU Architektur definierten Allzweckregister übersteigt, können die
Registeridentifizierungsinformationen unzureichend sein, um ein
gewähltes
erweitertes Register zu identifizieren. Der Präfixbereich des Befehls enthält zusätzliche
Registeridentifizierungsinformationen, die zum Identifizieren eines
gewählten
erweiterten Registers erforderlich sind. Das Codieren des Befehls, einschließlich des
Präfixbereichs,
kann somit das wenigstens eine erweiterte Register identifizieren, auf
das der Ausführungskern
zugreift.
-
In
einem Ausführungsbeispiel
weist der Standardregistersatz acht 32-Bit Allzweckregister auf,
die durch die ×86
Architektur definiert sind. Die acht 32-Bit Allzweckregister können beispielsweise die
Register EAX, EBX, ECX, EDX, ESP, EDP, EBP, ESI und EDI sein. Der
erweiterte Registersatz kann die acht 32-Bit Allzweckregister des
Standardregistersatzes und acht zusätzliche 32-Bit Register aufweisen,
die nicht durch die ×86
Struktur definiert sind. Der Ausführungskern kann zum Holen und
Ausführen ×86 Befehlen
mit variabler Länge
konfiguriert sein.
-
Der
Präfixbereich
kann ein Präfixbyte
für erweiterte
Register und das Präfixbyte
kann ein Schlüsselfeld
für erweiterte
Register aufweisen. Der Inhalt des Schlüsselfelds für erweiterte Register kann
angeben, ob das Präfixbyte
für erweiterte
Register die Informationen enthält,
die zum Zugriff auf das wenigstens eine erweiterte Register erforderlich
sind. Das Präfixbyte
für das
erweiterte Register kann die Informationen, die zum Zugriff auf
das mindestens eine erweiterte Register erforderlich sind; nur enthalten,
wenn das Schlüsselfeld
für erweiterte
Register einen vorbestimmten Schlüsselwert für erweiterte Register enthält (beispielsweise
den binären
Wert "0100").
-
Die
CPU kann ein Steuerregister zum Speichern von Informationen aufweisen,
die angeben, ob der erweiterte Registermodus allgemein aktiviert
ist, sowie ein Flag-Register zum Speichern von Informationen, die
angeben, ob der erweiterte Registermodus durch einen gegenwärtigen Prozeß aktiviert
ist, und Erzeugungseinrichtungen zum Erzeugen des Signals, das den
Betriebsmodus der CPU angibt. Das Signal kann angeben, daß die CPU
im erweiterten Registermodus arbeitet, wenn der erweiterte Registermodus
allgemein und von einem aktuellen Prozeß aktiviert ist.
-
Der
Standardregistersatz kann mehrere Allzweckregister aufweisen, die
durch die CPU Architektur (beispielsweise die ×86 Architektur) definiert sind,
und die Breite der erweiterten Register des erweiterten Registersatzes
kann größer als
die Breite der Standardregister sein. Die Breite eines Registers ist
die Gesamtzahl der Bits im Register. Der Ausführungskern kann auf den Befehl
reagieren, indem er auf den gesamten Inhalt des wenigstens einen
erweiterten Registers zugreift, wenn: (i) das Signal angibt, daß die CPU
in einem erweiterten Registermodus arbeitet, (ii) der Befehl einen
Präfixbereich
aufweist, der zum Zugriff auf das wenigstens eine erweiterte Register
erforderliche Informationen enthält,
und (iii) der Präfixbereich
eine Angabe darüber
enthält,
daß auf den
gesamten Inhalt des wenigstens einen erweiterten Registers zugegriffen
werden soll. Auf diese Weise können
die Befehlsoperandengrößen selektiv
vergrößert werden,
wenn die CPU im erweiterten Registermodus arbeitet. Der Standardregistersatz
kann ein Unter-Satz
des erweiterten Registersatzes sein und die Standardregister können Bereiche
geringerer Ordnung (geringstwertig) der erweiterten Register sein.
-
Zusätzlich zu
dem zuvor beschriebenen Schlüsselfeld
des erweiterten Registers kann das Präfixbyte für erweitert Register ein Operandengrößendeaktivierungsbit
aufweisen. Der Wert des Operandengrößendeaktivierungsbits kann
angeben, ob auf den gesamten Inhalt des wenigstens einen erweiterten
Registers zugegriffen werden soll. Es sei darauf hingewiesen, daß die Größe eines
Befehlsoperanden die Anzahl der Bits im Operanden oder die "Breite" des Operanden in
Bits betrifft.
-
Kurze Beschreibung der
Zeichnungen
-
1 ist
ein generisches Format eines ×86 Befehls,
wobei der ×86
Befehl ein optionales Adressiermodusbyte (Mod R/M) und ein optionales
Scale-Index-Basis-Byte (SIB) aufweist;
-
2 zeigt
die Felder des Mod R/M Bytes des ×86 Befehls von 1;
-
3 zeigt
die Felder des SIB Bytes des ×86 Befehls
von 1;
-
4 ist
ein Diagramm eines Ausführungsbeispiels
eines Computersystems mit einer Zentralverarbeitungseinheit (CPU);
-
5 ist
ein Diagramm eines Ausführungsbeispiels
der CPUI von 4, wobei die CPU einen mit einer
Registerdatei verbundenen Ausführungskern
aufweist;
-
6 ist
ein Diagramm zur Darstellung der Übergänge zwischen einem "32-Bit Kompatibilitätsmodus" der CPU von 5 und
einem "32-Bit Registererweiterungsmodus" (REX32) der CPU;
-
7 ist
ein Diagramm exemplarischer Ausführungsbeispiele
des Ausführungskerns
und der Registerdatei von 5, wobei
der Ausführungskern eine
Decodiereinheit aufweist, die mit einer Ausführungseinheit und der Registerdatei
verbunden ist, und wobei die Registerdatei einen Standardregistersatz
und einen erweiterten Registersatz aufweist, und wobei die Decodiereinheit
einen repräsentativen Befehl
empfängt,
und wobei der Befehl einen optionalen Präfixbereich enthalten kann;
-
8 ist
ein Diagramm eines Ausführungsbeispiels
des optionalen Präfixbereichs
des Befehls von 7, wobei der Präfixbereich
ein Präfixbyte
für erweiterte
Register ist, das ein Schlüsselfeld
für erweiterte
Register, ein 64-Bit Operandengrößedeaktivierungsbit
und drei Felderweiterungsbits aufweist;
-
9 ist
ein Diagramm eines Ausführungsbeispiels
der Registerdatei von 7, wobei der Standardregistersatz
eine Untergruppe des erweiterten Registersatzes ist;
-
10 ist
ein Diagramm eines anderen Ausführungsbeispiels
der Registerdatei von 7, wobei die Registerdatei den
Standardregistersatz und den erweiterten Registersatz aufweist,
und ferner einen Standard-Multimediaerweiterungsregistersatz (MMX),
einen erweiterten MMX Registersatz, einen Standard-Streaming-Einzelbefehl-Mehrfachdaten(SIMD)-Erweiterungs-
oder SSE Registersatz, und einen erweiterten SSE Registersatz aufweist; und
-
11 ist
ein Diagramm eines Ausführungsbeispiels
der im Speicher gebildeten Datenstruktur, die zum Speichern von
Registerinhalten während
eines Kontextwechsels verwendet wird, wobei die Datenstruktur dem
Speichern des Inhalts des Standard-MMX-Registersatzes, des erweiterten
MMX Registersatzes, und des Standard-SSE-Registersatzes sowie des erweiterten
SSE Registersatzes dient, wobei ein zuvor unbenutzter Bereich der
Datenstruktur zum Speichern des Inhalts des erweiterten Registersatzes
verwendet wird.
-
Zwar
kann die Erfindung in verschiedenen Modifikationen und alternativen
Ausführungsbeispielen
ausgebildet werden, jedoch sind spezifische Ausführungsbeispiele derselben in
den Zeichnungen als Beispiele dargestellt, die im folgenden näher beschrieben
werden. Es sei jedoch darauf hingewiesen, daß die Zeichnungen und die detaillierte
Beschreibung derselben nicht der Einschränkung der Erfindung auf die
besondere offenbarte Form dienen, sondern im Gegenteil ist beabsichtigt,
sämtliche
Modifikationen, Äquivalente
und Alternativen abzudecken, die dem Geist und dem Rahmen der vorliegenden
Erfindung gemäß den beigefügten Ansprüchen entsprechen.
-
Art(en) der Ausführung der
Erfindung
-
4 ist
ein Diagramm eines Ausführungsbeispiels
eines Computersystems 30 mit einer Zentralverarbeitungseinheit
(CPU) 32, einer North-Bridge 34, einem Speicher 36,
einem Peripheriekomponentenverbindungsbus (PCI) 38, einer South
Bridge 40 und einem Industriestandardarchitekturbus (ISA) 42.
Die CPU 32 führt
in dem Speicher 36 enthaltene Befehle aus (beispielsweise ×86 Befehle).
Die North Bridge 34 bildet ein Interface zwischen der CPU 32,
dem Speicher 36 und dem PCI Bus 38. der Speicher 36 kann
beispielsweise einen Halbleiterfestwertspeicher (ROM) und/oder einen Halbleiterdirektzugriffspeicher
(RAM) umfassen. Die South Bridge 40 bildet ein Interface
zwischen dem PCI Bus 38 und dem ISA Bus 42.
-
Das
Computersystem 30 weist ferner eine erste Vorrichtung 44A,
die mit dem PCI Bus 38 verbunden ist, und eine zweite Vorrichtung 44B auf,
die mit dem ISA Bus 42 verbunden ist. Die Vorrichtung 44A kann
beispielsweise eine Eingangs/Ausgangsvorrichtung (I/O) wie ein Modem,
eine Soundkarte, ein Netzwerkadapter, etc. sein. Wie in 4 dargestellt,
kann die Vorrichtung 44A mit dem ISA Bus 42 anstelle
des PCI Bus 38 verbunden sein. Die Vorrichtung 44B kann
beispielsweise eine periphere Vorrichtung wie eine Festplatte, ein
Diskettenlaufwerk, ein Compact-Disc-Festwertspeicher(CD-ROM)-Laufwerk,
etc. sein. Wie in 4 dargestellt, kann die Vorrichtung 44B mit
dem PCI Bus 38 anstelle des ISA Bus 42 gekoppelt
sein.
-
Die
CPU 32 holt (oder überträgt) Befehle vom
Speicher 36 über
die North Bridge 34 und führt die Befehle aus. Im Speicher 36 gespeicherte
Daten können
durch die Befehle verarbeitet werden. Befehle und Daten liegen an
Adressen im Speicher 36, wobei eine Adresse ein Wert ist,
der eine Speicherstelle oder Speicherstellen im Speicher 36 identifiziert.
Die Adressen von Befehlen und Daten können von der CPU 32 vor
dem Liefern an die North Bridge 34 umgesetzt werden. In
diesem Fall kann die CPU 32 Adressenumsetzhardware umfassen
und der Speicher 36 kann Adressenumsetzungsinformationen speichern,
die von der CPU 32 zum Umsetzen virtueller Adressen in
physische Adressen verwendet werden.
-
Wie
im folgenden beschrieben, weist die CPU 32 einen internen
Cachespeicher (d.h. einen internen Cache) auf, der zum Speichern
von Befehlen und Daten ausgebildet ist, auf welche die CPU 32 zuvor
zugegriffen hat. Das Computersystem 30 kann ferner einen
externen Cache aufweisen, der zum Speichern von Befehlen und Daten
ausgebildet ist, auf welche die CPU 32 zuvor zugegriffen
hat.
-
Es
ist selbstverständlich,
daß Informationen, die
als im Speicher 36 gespeichert bezeichnet werden, im internen
Cache der CPU 32 oder einem externen Cache des Computersystems 30 gespeichert sein
können.
-
5 ist
ein Diagramm eines Ausführungsbeispiels
der CPU 32 von 4. Andere Ausführungsbeispiele
der CPU 32 sind möglich
und beabsichtigt. Bei dem Ausführungsbeispiel
von 5 weist die CPU 32 einen Befehlscache 50,
einen Ausführungskern 52,
einen Datencache 54, eine Interfaceeinheit 56,
eine Decodiersteuereinheit 58 und eine Registerdatei 60 auf.
Der Befehlscache 50 ist mit dem Ausführungskern 52, der
Decodiersteuereinheit 58 und der Interfaceeinheit 56 verbunden.
Der Ausführungskern 52 ist
mit der Decodiersteuereinheit 58, der Registerdatei 60 und
dem Datencache 54 verbunden. Der Datencache 54 ist
mit dem Ausführungskern 52,
der Decodiersteuereinheit 58 und der Interfaceeinheit 56 verbunden.
Die Interfaceeinheit 56 ist mit dem Befehlscache 50,
dem Datencache 54, der Decodiersteuereinheit 58 und
der North Bridge 34 verbunden (4).
-
Die
Decodiersteuereinheit 58 weist ein Steuerregister 62 auf.
Die Decodiersteuereinheit 58 weist ferner ein Flag-Register 64 auf,
das den Status der CPU 32 berichtet und steuert. Das Flag-Register 64 kann
ein ×86
Flag-Register sein. Moderne ×86
Prozessoren weisen ein 32-Bit erweitertes Flag- oder "EFLAGS"-Register auf. Das Flag-Register 34 ist
daher vorzugsweise das 32-Bit EFLAGS Register moderner ×86 Prozessoren.
-
Allgemein
gesagt verwendet die CPU 32 eine Prozessorarchitektur,
die mit der ×86
Architektur kompatibel ist, und weist zusätzliche architektonische Merkmale
zur Unterstützung
der 64-Bit-Verarbeitung auf. Die CPU 32 erstellt einen
Betriebsmodus in Reaktion auf Freigabeangaben, die im Steuerregister 62 und
im Flag-Register 64 gespeichert sind.
-
In
diesem Zusammenhang spezifiziert ein "Betriebsmodus" der CPU 32 Voreinstellungswerte für verschiedene
programmierbar wählbare
Prozessorattribute. Bei den beschriebenen Ausführungsbeispielen spezifiziert
der Betriebsmodus der CPU 32 eine voreingestellte Operandengröße. Es sei
darauf hingewiesen, daß die
Größe eines
Befehlsoperanden sich auf die Anzahl der Bits in dem Operanden oder
die "Breite" des Operanden in
Bits bezieht. Wie im folgenden näher
beschrieben, kann die Codierung eines Befehls die voreingestellte
Operandengröße deaktivieren.
-
Bei
dem Ausführungsbeispiel
von 5 erzeugt die Decodiersteuereinheit 58 ein
Betriebsmodussignal, das einen Betriebsmodus der CPU 32 angibt,
und liefert das Betriebsmodussignal an den Ausführungskern 52. der
Ausführungskern 52 führt Befehle
in Abhängigkeit
vom Betriebsmodussignal aus (d.h. vom Betriebsmodus der CPU 32).
Die Betriebsmodi der CPU 32 weisen einen "32-Bit Kompatibilitätsmodus" und einen "32-Bit Registererweiterungs-" oder "REX32"-Modus auf. In beiden
Modi beträgt
die voreingestellte Operandengröße 32 Bits.
IM REX32 Modus können
Befehle die voreingestellte 32-Bit Operandengröße durch eine 64-Bit Operandengröße entsprechend
den Codierungen der Befehle wie im folgenden beschrieben verändern. Wie
des weiteren im folgenden beschrieben, können Felderweiterungsbits in
Codierungen von Befehlen im REX32 Modus 74 vorgesehen sein,
um die Zahl der Register zu erhöhen,
auf die im Befehl verwiesen werden kann.
-
Der
REX32 Modus wird durch ein REX32 Bit 63 im Steuerregister 62 und
ein "RX" Bit 66 im Flag-Register 64 freigegeben.
Das REX32 Bit 63 bewirkt eine globale Freigabe des REX32
Modus. Der REX32 Modus kann beispielsweise freigegeben werden, wenn
ein logischer Wert "1" im REX32 Bit 63 gespeichert
ist, un dder REX32 Modus kann deaktiviert werden, wenn ein logischer
Wert "0" im REX32 Bit 63 gespeichert
ist. Das REX32 Bit 63 ist vorzugsweise mit einem Code mit
einem relativ hohen Zugriffs- oder Privileglevel geschrieben (beispielsweise "privilegierter Code" wie ein Betriebssystem,
ein Grund-Eingangs-/Ausgangssystem oder BIOS oder eine Supervisormodusanwendung).
-
Es
sei darauf hingewiesen, daß das
Steuerregister 62 eines der Steuerregister sein kann, die durch
den aktuellen Zustand der ×86
Architektur definiert sind, und ein Zugriff kann somit mittels bekannter
Verfahren erfolgen. Das REX32 Bit 63 kann beispielsweise
ein Bit in einem der aktuell definierten 32-Bit Steuerregister CRO-CR4
sein. Alternativ kann das Steuerregister 62 eines der modellspezifischen Register
sein, die durch den aktuellen Zustand der ×86 Architektur definiert sind,
und ein Zugriff kann somit unter Verwendung der existierenden mo dellspezifischen
Leseregister- (RDMSR) und der modellspezifischen Schreibregisterbefehle
(WRMSR) erfolgen.
-
Das
RX Bit 66 bewirkt eine prozeßspezifische Freigabe des REX32
Modus. Ein von der CPU 32 aktuell ausgeführtes Anwendungsprogramm
(d.h. ein aktueller Prozeß)
kann den REX32 Modus durch Setzen des RX Bits 66 aktivieren.
Der REX32 Modus muß durch
das REX32 Bit 63 aktiviert werden, bevor der Prozeß durch
Setzen des RX Bits 66 in den REX32 Modus übergehen
kann. Wenn der REX32 Modus durch das REX32 Bit 63 aktiviert
ist, kann der aktuelle Vorgang in den REX32 Modus eintreten, indem
er einen logischen Wert "1" im RX Bit 66 speichert.
Nur wenn das REX32 Bit 64 und das RX Bit 66 beide
gesetzt sind, erzeugt die Decodiersteuereinheit 58 das
den REX32 Modus angebende Betriebsmodussignal. Der aktuelle Vorgang
kann den REX32 Modus verlassen, indem er einen logischen Wert "0" im RX Bit 66 speichert.
-
Zwei
hier eingeführte
neue ×86
Befehle können
von Anwendungsprogrammen verwendet werden, um das RX Bit 66 in
dem Flag-Register zu setzen und zu löschen. Ein neuer "STX" Befehl speichert
einen logischen Wert "1" im REX32 Bit 63 und ein
neuer "CLX" Befehl speichert
einen logischen Wert "0" im REX32 Bit 63.
Der STX und der CLX Befehl wirken vorzugsweise unmittelbar nach
der Ausführung
des Befehls. Die Verwendung der STX und CLX Befehle bei nicht durch
das REX32 Bit 63 freigegebenem (d.h. deaktiviertem) REX32
Modus kann zu einer "nicht
definierten Opcode"-Ausnahme
führen.
-
Wie
zuvor beschrieben, definiert der Betriebsmodus eine voreingestellte
Operandengröße. Wenn
die Codierung eines bestimmten Befehls die voreingestellte Operandengröße nicht
deaktiviert, führt
der Ausführungskern 52 Operationen
mit Operanden aus, welche die voreingestellte Operandengröße haben.
Wenn andererseits die Codierung des Befehls die voreingestellte
Operandengröße deaktiviert,
führt der
Ausführungskern 52 Operationen
mit Operanden aus, welche die deaktivierende Operandengröße haben.
-
Der
Ausführungskern 52 holt
Registeroperanden aus der Registerdatei 60 und holt Speicheroperanden
aus dem Datencache 54. Wenn die Speicheroperanden im Cache
speicherbar sind und im Datencache 54 vorliegen, liefert
der Datenca che 54 die Speicheroperanden an den Ausführungskern 52. wenn
die Speicheroperanden nicht im Cache speicherbar sind und nicht
im Datencache 54 vorliegen, erhält der Datencache 54 die
Speicheroperanden vom Speicher 36 über die Interfaceeinheit 56 und die
North Bridge 34 (4) und liefert
die Speicheroperanden an den Ausführungskern 52.
-
6 ist
ein Diagramm 70 zur Darstellung der Übergänge zwischen dem 32-Bit Kompatibilitätsmodus,
der mit 72 bezeichnet ist, und dem mit 74 bezeichneten
REX32 Modus der CPU 32 von 5. Wie zuvor
beschrieben, beträgt
die voreingestellte Operandengröße sowohl
im 32-Bit Kompatibilitätsmodus 72,
als auch im REX32 Modus 74 32 Bits. Im REX32 Modus können jedoch
Befehle die voreingestellte 32-Bit Operandengröße durch eine 64-Bit Operandengröße gemäß den Codierungen
der Befehle deaktivieren. Wie im folgenden näher beschrieben, können in
den Codierungen der Befehle im REX32 Modus 74 Felderweiterungsbits
vorgesehen sein, um die Anzahl der Register zu erhöhen, auf
die in den Befehlen verwiesen wird.
-
Wie
in 6 angegeben, geht die CPU 32 in den REX32
Modus 74 über,
wenn die CPU 32 im 32-Bit Kompatibilitätsmodus 72 arbeitet,
falls das allgemeine Freigabebit REX32 63 und das prozeßspezifische
Freigabebit RX 66 beide den logischen Wert "1" aufweisen. Wie zuvor beschrieben, kann
ein privilegierter Code, beispielsweise "privilegierter Code" wie ein Betriebssystem, ein Grund-Eingangs-/Ausgangssystem oder
BIOS oder eine Supervisormodusanwendung, eine logische "1" im allgemeinen Freigabebit REX32 63 speichern.
Ein von der CPU 32 aktuell ausgeführtes Anwendungsprogramm (d.h.
ein aktueller Prozeß),
bei dem die CPU 32 im 32-Bit Kompatibilitätsmodus 72 arbeitet,
kann eine logische "1" im RX Bit 66 speichern,
um in den REX32 Modus 74 einzutreten. Die CPU 32 geht
vom REX32 Modus 74 in den 32-Bit Kompatibilitätsmodus 72 über, wenn entweder
das allgemeine Freigabebit REX32 63 oder das prozeßspezifische
Freigabebit RX 66 logisch "0" ist.
Beispielsweise kann der aktuelle Prozeß mit im REX32 Modus 74 arbeitender
CPU 32 eine logische "0" im RX Bit 66 speichern,
um den REX32 Modus 74 zu verlassen und in den 32-Bit Kompatibilitätsmodus 72 zurückzukehren.
-
Wie
wiederum aus der 5 ersichtlich, kann die CPU 32 auch
eine Speicherverwaltungseinheit mit Paging-Hardware aufweisen, um
eine Paging-Adressenumsetzung
von virtuellen Adressen in physische Adressen zu implementieren.
Eine "virtuelle
Adresse" ist eine
vor der Umsetzung durch einen Adressenumsetzungsmechanismus (beispielsweise einen
Paging-Mechanismus) in eine "physische Adresse" erzeugte Adresse,
welche die für
den Zugriff auf einen Speicher tatsächlich verwendet Adresse ist.
Die Paging-Hardware kann einen Umysetzungs-Lookaside-Puffer (TLB)
aufweisen, um Page-Umsetzungen zu speichern.
-
Der
Befehlscache 50 ist ein Hochgeschwindigkeitsspeicher zum
Speichern von Befehlen. Der Ausführungskern 52 holt
Befehle aus dem Befehlscache 50 zur Ausführung. Der
Befehlscache 50 kann jede geeignete Cacheorganisation verwenden,
einschließlich
direkt abgebildete, satz-assoziative und voll assoziative Konfigurationen.
Wenn ein angeforderter Befehl nicht im Befehlscache 50 vorliegt,
kann der Befehlscache 50 mit der Interfaceeinheit 56 kommunizieren,
um den angeforderten Befehl zu erhalten. Eine derartige Kommunikation
kann zum Füllen/Ersetzen
einer Cachetzeile im Befehlscache 50 führen. Darüber hinaus kann der Befehlscache 50 mit der
Speicherverwaltungseinheit kommunizieren, um physische Adressenumsetzungen
für virtuelle
Adressen zu erhalten, die aus den Befehlscache 50 geholt wurden.
-
Der
Ausführungskern 52 führt aus
dem Befehlscache 50 geholte Befehle aus. Der Ausführungskern 52 erhält Registeroperanden
von der Registerdatei 60 und speichert Registerergebniswerte in
der Registerdatei 60. die Größe der Operanden hängt vom
Betriebsmodus der CPU 32 ab und kann wie beschrieben durch
Befehle deaktiviert werden. Der Ausführungskern 52 erhält Speicheroperanden aus
dem Datencache 54 und liefert Speicherergebniswerte an
den Datencache 54, wie im folgenden beschrieben.
-
Der
Ausführungskern 52 kann
jeden geeigneten Aufbau haben. Beispielsweise kann der Ausführungskern 52 ein "Superpipeline"-Kern, ein superskalarer
Kern oder eine Kombination derselben sein. Der Ausführungskern 52 kann
je nach der Wahl des Designs eine Ausführen außerhalb der Reihenfolge oder
entsprechend der Reihenfolge verwenden.
-
Der
Datencache 54 ist ein Hochgeschwindigkeitsspeicher für das Speichern
von Daten. Der Datencache 54 kann jede geeignete Cacheorganisation verwenden,
einschließlich
direkt abgebildete, satz-assoziative und voll assoziative Konfigurationen.
Wenn der Wert eines Speicheroperanden nicht im Datencache 54 vorhanden
ist, kann der Datencache 54 mit der Interfaceeinheit 56 kommunizieren, um
auf den Speicheroperanden zuzugreifen. Eine derartige Kommunikation
kann zum Füllen/Ersetzen einer
Cachezeile im Datencache 54 führen. Wenn der Datencache 54 eine
Rückschreibcachevorgehensweise
verfolgt, können
ersetzte aktualisierte Cachezeilen der Interfaceeinheit 56 zum
Zurückschreiben
in den Speicher zugeführt
werden. Der Datencache 54 kann mit der Speicherverwaltungseinheit kommunizieren,
um physische Adressenumsetzungen für dem datencache 54 gelieferte
virtuelle Adressen zu erhalten.
-
Die
Interfaceeinheit 56 kommuniziert mit der North Bridge 34 (4).
In Reaktion auf Anforderungen aus dem Befehlscache 50,
erhält
die Interfaceeinheit Befehle aus dem Speicher 36 (4) über die North
Bridge 34 und liefert die Befehle an den Befehlscache 50.
die Interfaceeinheit 56 überträgt ferner Speicheroperanden
zwischen der North Bridge 34 und dem Datencache 54,
wie zuvor beschrieben.
-
7 ist
ein Diagramm exemplarischer Ausführungsbeispiele
des Ausführungskerns 52 und
der Registerdatei 60 der 5. bei dem
Ausführungsbeispiel
der 5 weist der Ausführungskern 52 eine Decodiereinheit 76 auf,
die mit einer Ausführungseinheit 78 und
der Registerdatei 60 verbunden ist. In 7 ist
die Decodiereinheit 76 als einen repräsentativen Befehl 80 empfangend
dargestellt. Der Befehl 80 ist vorzugsweise ein ×86 Befehl
und kann einen optionalen Präfixbereich 82 aufweisen.
Wie im folgenden beschrieben, enthält der Präfixbereich Informationen, die
für den
Zugriff auf das wenigstens eine erweiterte Register erforderlich
sind.
-
Die
Decodiereinheit 76 erkennt jede Registerquellenoperandenreferenz
in Befehlen und fordert die Operandenwerte aus der Registerdatei 60.
die Registerdatei 60 überträgt die angeforderten
Quellenoperandenwerte an die Ausführungseinheit 78. Gleichzeitig
(beispielsweise während
des selben Taktzyklus) kann der decodierte Befehl von der Decodiereinheit 76 zur
Ausführungseinheit 78 übertragen werden.
Auf diese Weise werden der decodierte Befehl und die Operanden üblicherweise
an die Ausführungseinheit 78 zur
gleichen Zeit (beispielsweise während
des selben Taktzyklus) übertragen.
-
Die
Ausführungseinheit 78 führt decodierte Befehle
aus, die von der Decodiereinheit 76 geliefert werden. Die
Ausführungseinheit 78 kann
auch zur Bildung von Adressen für
Speicheroperanden verwendet werden und kann die Speicheroperandenadressen
an den Datencache 54 liefern (5). Wie zuvor
beschrieben, kann der Datencache 54 für das Liefern von Speicheroperanden
an die Ausführungseinheit 78 verantwortlich
sein. Der Datencache 54 kann die Speicheroperandenadressen
an Paging-Hardware in der Speicherverwaltungseinheit liefern, um
diese von virtuellen Adressen in physische Adressen umsetzen zu
lassen. Wenn der Wert eines Speicheroperanden nicht im Datencache 54 vorhanden
ist, kann der Datencache 54 die Speicheroperandenadresse
an die Interfaceeinheit 56 übertragen, um diese über die
North Bridge 34 (4) im Speicher
(4) finden zu lassen.
-
Die
Ausführungseinheit 78 liefert
jedes Ergebnis der Befehlsausführung
entweder an die Registerdatei 60 oder an den Datencache 54 (5). Wenn
das Ergebnis ein im Register zu speichernder Wert ist, liefert die
Ausführungseinheit 78 das
Ergebnis an die Registerdatei 60. wenn das Ergebnis ein an
einer Speicherstelle zu speichernder Wert ist, liefert die Ausführungseinheit 78 das
Ergebnis und die entsprechende Adresse der Speicherstelle an den Datencache 54.
wenn der Inhalt der Speicherstelle nicht im Datencache 54 vorhanden
ist, kann der Datencache 54 das Ergebnis und die entsprechende Adresse
der Speicherstelle an die Interfaceeinheit 56 liefern.
Die Interfaceeinheit 56 kann den Wert an der entsprechenden
Speicherstelle des Speichers 36 (4) über die
North Bridge 34 (4) speichern.
-
Bei
dem Ausführungsbeispiel
nach 7 weist die Registerdatei 60 einen Standardregistersatz 84 und
einen erweiterten Registersatz 86 auf. Der Standardregistersatz 84 umfaßt die acht
32-Bit Allzweckregister EAX, EBX, ECX, EDX, ESP, EDP, EBP, ESI und
EDI, die durch die ×86
Architektur definiert sind. Der erweiterte Registersatz 86 kann
beispielsweise acht zusätzliche
oder erweiterte Regi ster aufweisen. Wie im folgenden beschrieben,
können die
erweiterten Register des erweiterten Registersatzes 86 64-Bit
Register sein.
-
Der
Befehl 80 kann ein ×86
Befehl sein, der 3 Bits an Registeroperandenidentifizierungsinformationen
aufweist, um jedes der darin bezeichneten acht ×86 Allzweckregister zu identifizieren.
Die Zahl der erweiterten Register im erweiterten Registersatz 86 übersteigt
jedoch die acht Allzweckregister, die durch die ×86 Architektur definiert sind.
Daher sind die 3 Bits an Registeroperandenidentifizierungsinformationen,
die im Befehl 80 zum Identifizieren eines gewählten der
acht ×86
Allzweckregister verwendet werden, unzureichend, um ein gewähltes der
erweiterten Register zu identifizieren. Der Präfixbereich 82 des
Befehls 80 dient somit dem Liefern zusätzlicher Registeridentifizierungsinformationen,
die zum Identifizieren eines ausgewählten erweiterten Registers erforderlich
sind. Die Codierung des Befehls 80, einschließlich des
Präfixbereichs 82,
kann somit jedes darin angegebene erweiterte Register identifizieren.
-
Wenn
die CPU 32 (5) im REX32 Modus arbeitet und
der Befehl 80 einen Registerquellenoperanden identifiziert,
jedoch keinen optionalen Präfixbereich 82 aufweist,
fordert die Decodiereinheit 76 den Inhalt eines entsprechenden
Standardregistersatzes 84 aus der Registerdatei 60.
die Ausführung des
Befehls 80 erfolgt sodann unter Verwendung des Standardregisters
des Standardregistersatzes 84 der Registerdatei 60.
Wenn andererseits die CPU 32 im REX32 Modus arbeitet und
der Befehl 80 den optionalen Präfixbereich 82 aufweist
und auf einen Registerquellenoperanden verweist, fordert die Decodiereinheit 76 den
Inhalt eines entsprechenden erweiterten Registers des erweiterten
Registersatzes 86 von der Registerdatei 60. die
Ausführung
des Befehls 80 erfolgt unter Verwendung des erweiterten
Registers des Registersatzes 86 der Registerdatei 60.
-
Die
Decodiereinheit 76 kann ein Operandengrößensignal erzeugen und an die
Ausführungseinheit 78 liefern,
das die Operandengröße des Befehls 80 angibt.
Die Decodiereinheit 76 kann das von der Decodiersteuereinheit 58 erzeugte
und den Betriebsmodus der CPU 32 angebende Betriebsmodussignal empfangen.
Wenn das Betriebsmodussignal angibt, daß die CPU 32 im REX32
Modus arbeitet, und der Befehl 80 einen Präfixbereich 82 aufweist,
kann die Decodiereinheit 76 beispielsweise das Operandengrößensignal
aktivieren, wodurch angegeben wird, daß die Operandengröße für den Befehl 80 64
Bit beträgt.
Wenn das Betriebsmodussignal angibt, daß die CPU 32 im REX32
Modus arbeitet, und der Befehl 80 keinen Präfixbereich 82 aufweist,
kann die Decodiereinheit 76 beispielsweise das Operandengrößensignal
deaktivieren, wodurch angegeben wird, daß die Operandengröße für den Befehl 80 32
Bit ist.
-
Wenn
das Operandengrößensignal
aktiviert ist, kann die Ausführungseinheit 78 Operationen
mit 64-Bit Operanden durchführen.
Die Ausführungseinheit 78 kann
64-Bit erweiterte Registeroperanden von der Registerdatei 60 empfangen
und 64-Bit erweiterte Registerergebniswerte in der Registerdatei 60 speichern.
Wenn andererseits das Operandengrößensignal deaktiviert ist,
kann die Ausführungseinheit 78 Operationen
mit 32-Bit Operanden ausführen. Die
Ausführungseinheit 74 kann
32-Bit Registeroperanden von der Registerdatei 60 empfangen
und 32-Bit Registerergebniswerte
in der Registerdatei 60 speichern.
-
Die
Ausführungseinheit 78 kann
die 32-Bit Speicheroperandenwerte, die sie von dem Datencache 54 empfangen
hat, mit vorangestellten Nullen "polstern", um 64-Bit Operanden
zu bilden. Die Ausführungseinheit 78 kann
ferner die geringerwertigen (d.h. die geringswertigen) 32 Bits der
64-Bit Speicherergebniswerte zum Speichern an den Datencache 54 liefern.
Alternativ kann die Ausführungseinheit 78 das
Operandengrößensignal
an den Datencache 54 liefern, und die Größen der
Speicheroperanden, die zwischen dem Ausführungskern 52 und
dem Datencache 54 übertragen
werden, können
von dem Operandengrößensignal
abhängen.
Wenn beispielsweise das Operandengrößensignal aktiviert ist, kann
die Ausführungseinheit 78 64-Bit
Speicheroperanden vom Datencache 54 erhalten und können 64-Bit Speicherergebniswerte
an den Datencache 54 übertragen.
Wenn andererseits das Operandengrößensignal deaktiviert ist,
kann die Ausführungseinheit 78 32-Bit
Speicheroperanden vom Datencache 54 erhalten und kann 32-Bit
Speicherergebniswerte an den Datencache 54 liefern.
-
Die
Decodiereinheit 76 kann ferner ein Ausnahmesignal in Abhängigkeit
vom Betriebsmodussignal und dem Vorhandensein oder der Abwesenheit des
Präfixbereichs 82 im
Befehl 80 erzeugen. Wenn der Befehl 80 einen Präfixbereich 82 aufweist,
und das Betriebsmodussignal angibt, daß die CPU 32 nicht
im REX32 Modus arbeitet, kann die Decodiereinheit 76 beispielsweise
das Ausnahmesignal aktivieren. Das aktivierte Ausnahmesignal kann
zu einer Ausnahme "Vorrichtung
nicht verfügbar" führen.
-
8 ist
ein Diagramm eines Ausführungsbeispiels
des optionalen Präfixbereichs 82 des
Befehls 80 von 7. Bei dem Ausführungsbeispiel
der 8 ist der Präfixbereich
ein erweitertes Registerpräfixbyte 90 mit
einem erweiterten Registerschlüsselfeld 92,
einem 64-Bit Operandengrößendeaktivierungsbit 94 und
drei Felderweiterungsbits 96, 98 und 100.
Das erweiterte Registerschlüsselfeld 92 nimmt die
Bits 4–7
des erweiterten Registerpräfixbytes 90 ein,
und ein binärer
erweiterter Registerschlüsselwert "0100" im erweiterten Registerschlüsselfeld 92,
wie in 8 dargestellt, dient der Identifizierung des erweiterten
Registerpräfixbytes 90.
die Decodiereinheit 76 erkennt das erweiterte Registerpräfixbyte 92 über den
erweiterten Registerschlüsselwert "0100" im erweiterten Registerschlüsselfeld 92.
wenn das erweiterte Registerschlüsselfeld 92 keinen
erweiterten Registerschlüsselwert "0100" aufweist, erkennt
die Decodiereinheit 76 das Präfixbyte nicht als erweitertes Registerpräfixbyte.
-
Das
64-Bit Operandengrößendeaktivierungsbit 94 weist
3 Bits des erweiterten Registerpräfixbytes 90 auf. Das
64-Bit Operandengrößendeaktivierungsbit 94 kann
beispielsweise zum Deaktivieren der voreingestellten 32-Bit Operandengröße des Befehls 80,
der das erweiterte Registerpräfixbyte 90 enthält, verwendet
werden (7), so daß auf 64-Bit Registeroperanden
in der Registerdatei 60 zugegriffen wird (7).
Die Felderweiterungsbits 96, 98 und 100 können zum
Erweitern von 3-Bit-Feldern in einem Opcode, einem Mod R/M Byte
und/oder einem SIB Byte des Befehls 80 auf 4 Bits dienen,
wodurch auf 16 Register anstatt 8 zugegriffen werden kann. Die Felderweiterungsbits 96, 98 und 100 können somit
zur Erhöhung
der Anzahl der Allzweckregister in der CPU 32 dienen (4 und 5).
-
Wenn
sich die CPU 32 im REX32 Modus befindet, der Befehl 80 das
erweitete Registerpräfixbyte aufweist,
das erweiterte Registerschlüsselfeld 92 des erweiterten
Registerpräfixbytes 90 den
erweiterten Registerschlüsselwert "0100" aufweist, und das 64-Bit
Operandengrößendeaktivierungsbit 94 des
erweiterten Registerpräfixbytes 90 logisch "0" ist, wird angenommen, daß die Registeroperandengrößen im Befehl 80 die
voreingestellten 32 Bits aufweisen, und es werden 32-Bit Registeroperanden
für den
Befehl 80 aus der Registerdatei 60 geholt. Wenn
andererseits der Wert des 64-Bit Operandengrößendeaktivierungsbit 94 logisch "1" ist, wird die voreingestellte 32-Bit
Operandengröße für den Befehl 80 deaktiviert, und
es werden 64-Bit Operanden für
den Befehl 80 aus der Registerdatei 60 geholt.
-
Die
Felderweiterungsbits 96, 98 und 100 nehmen
jeweils die Bits 2, 1 und 0 des erweiterten Registerpräfixbytes 90 ein.
Das Felderweiterungsbit 96 kann beispielsweise verwendet
werden, um das Mod R/M Byte REG Feld von drei auf vier Bytes zu
erweitern, wodurch ein erweitertes REG Feld gebildet wird. Das Felderweiterungsbit 96 kann
das höchstwertige
Bit des erweiterten REG Felds sein. Während das 3-Bit REG Feld zum
Zugreifen auf eines von 8 verschiedenen Registern in der Registerdatei 60 verwendet
wird, kann das 4-Bit erweiterte REG Feld zum Zugreifen auf eines
von 16 verschiedenen Registern innerhalb der Registerdatei 60 verwendet
werden.
-
Das
Felderweiterungsbit 98 kann beispielsweise zum Erweitern
des SIB Byte IN-DEX
Felds von drei Bits auf vier verwendet werden, wodurch ein erweitertes
IN-DEX Feld gebildet
wird. Das Felderweiterungsbit 98 kann das höchstwertige
Bit des erweiterten INDEX Felds sein. Während das 3-Bit INDEX Feld
zum Zugreifen auf eines von 8 verschiedenen Registern in der Registerdatei 60 verwendet
wird, kann das 4-Bit erweiterte INDEX Feld zum Zugreifen auf eines
von 16 verschiedenen Registern innerhalb der Registerdatei 60 verwendet
werden.
-
Das
Felderweiterungsbit 100 kann beispielsweise zum Erweitern
des Mod R/M Byte R/M Feldes, des SIB Byte BASIS Felds oder eines
Opcoderegisterreferenzfelds von drei Bits auf vier verwendet werden,
wodurch ein erweitertes Feld gebildet wird. Das Felderweiterungsbit 100 kann
das höchstwertige
Bit des erweiterten Felds sein. Während das 3-Bit Feld zum Zugreifen
auf eines von 8 verschiedenen Registern in der Registerdatei 60 verwendet
wird, kann das 4-Bit erweiterte Feld zum Zugreifen auf eines von
16 verschiedenen Registern innerhalb der Registerdatei 60 verwendet
werden.
-
9 ist
ein Diagramm eines Ausführungsbeispiels
der Registerdatei 60 der 7, wobei
der Standardregistersatz 84 eine Untergruppe des erweiterten
Register satzes 86 ist. Wie zuvor beschrieben, umfaßt der Standardregistersatz 84 die
acht 32-Bit Allzweckregister EAX, EBX, ECX, EDX, ESP, EDP, EBP,
ESI und EDI, die mit 0–7
numeriert sind. Der erweiterte Registersatz 80 weist sechzehn
64-Bit Register auf, die von 0–15
numeriert sind. Die 32-Bitregister 0–7 des Standardregistersatzes 84 bilden 32-Bit
Bereiche geringerer Ordnung (d.h. geringstwertige Bereiche) jeweiliger
64-Bit Register 0–7
des erweiterten Registersatzes 86. wie in 9 dargestellt,
ist der erweiterte Registersatz 86 dem Standardregistersatz 84 übergeordnet.
-
9 zeigt
ferner den Effekt des erweiterten Registerpräfixbytes 90 der 8 auf
Register innerhalb der Registerdatei 60. die Bits 0–2 (Felderweiterungsbits 100, 98 und 96)
des erweiterten Registerpräfixbytes 90 ermöglichen
es dem Befehl 80, die gewählten Register des erweiterten
Registersatzes 86 zu identifizieren. Wenn das Bit 3 (d.h.
das 64-Bit Operandengrößendeaktivierungsbit 94)
des erweiterten Registerpräfixbytes 90 gelöscht ist
(d.h. eine logische "0"), wird nur auf die
(geringstwertigen) 32 Bits niedrigerer Ordnung der erweiterten Register
im erweiterten Registersatz 86 zugegriffen. Wenn das Bit 3 (d.h. das
64-Bit Operandengrößendeaktivierungsbit 94) des
erweiterten Registerpräfixbytes 90 jedoch
gesetzt ist (d.h. eine logische "1"), wird auf die gesamten
64 Bits der erweiterten Register im erweiterten Registersatz 86 zugegriffen.
-
Ein
Problem kann beim Implementieren des erweiterten Registersatzes 86 der
Registerdatei 60 (7) dahingehend
auftreten, daß ein
32-Bit Betriebssystem der CPU 32 (5) höchstwahrscheinlich
die erweiterten Register nicht kennt und daher nicht versucht, die
erweiterten Register bei Kontextänderungen
zu bewahren. Die 10 und 11 dienen
im folgenden der Beschreibung eines Systems und eines Verfahrens
zum Bewahren des Inhalts der erweiterten Register des erweiterten
Registersatzes 86 bei Kontextänderungen, wenn die CPU 32 ( 5)
ein 32-Bit Betriebssystem aufweist. Es sei darauf hingewiesen, daß bei dieser
Darstellung der Standard-MMX-Registersatz 110 und der Standard-SSE-Registersatz 114 ähnlich dem
Standardregistersatz 84 erweitert sein können, wie
zuvor beschrieben (sowie auch die erweiterten Registersätze 112 und/oder 116,
falls vorhanden). Bei einer Kontextänderung bewirkt das Betriebssystem,
daß die
CPU 32 die Ausführung
der Befehle eines ersten Programms beendet und die Befehle eines
zweiten Programms auszuführen
beginnt. Das Betriebssystem spei chert den Zustand der CPU 32 während der
Kontextveränderung,
so daß die
Befehlsausführung
des ersten Programms zu späterer
Zeit neu initiiert werden kann. Das 32-Bit Betriebssystem kann jedoch
in Unkenntnis der erweiterten Register des Registersatzes 86 sein,
wie zuvor beschrieben, und versucht daher nicht, die erweiterten
Register während
der Kontextveränderung.
-
10 ist
ein Diagramm eines anderen Ausführungsbeispiels
der Registerdatei 60 der 7, wobei
die Registerdatei 60 wie beschrieben einen Standardregistersatz 84 und
einen erweiterten Registersatz 86 aufweist. Bei dem Ausführungsbeispiel von 10 weist
die Registerdatei 60 ferner einen Standardmultimediaerweiterungsregistersatz
(MMX) 110, einen erweiterten MMX Registersatz 112,
einen Standardstreamingeinzelbefehlmehrfachdaten(SIMD)-Erweiterungs- oder SSE Registersatz 114,
und einen erweiterten SSE Registersatz 116 auf.
-
Bei
einem Kontextwechsel speichert ein typisches 32-Bit Betriebssystem
Zustandsinformationen über
die CPU 32, die zum Wiederherstellen des unterbrochenen
Programms oder des Tasks erforderlich sind, in einem Taskzustandssegment
(TSS) oder im Stapel des Programms, der (explizit) im Speicher 36 gebildet
ist (4). Das TSS enthält den Inhalt der Allzweckregister
EAX, EBX, ECX, EDX, ESP, EDP, EBP, ESI und EDI vor dem Kontextwechsel
und enthält
somit den Inhalt der Standardregister des Standardregistersatzes 84.
Wie zuvor beschrieben, ist das 32-Bit Betriebssystem wahrscheinlich
in Unkenntnis der erweiterten Register des erweiterten Registersatzes 86 (und
der erweiterten Registersätze 112 und 116)
und versucht daher nicht, den Inhalt der erweiterten Register des
Registersatzes 86 während
des Kontextwechsels zu speichern.
-
Das
32-Bit Betriebssystem verwendet wahrscheinlich den verfügbaren ×86 "FXSAVE" Befehl, um beim
Kontextwechsel den Inhalt der Standard-MMX-Register des Standard-MMX-Registersatzes 110 und
der Standard-SSE-Register des Standard-SSE-Registersatzes 114 in
einer speziellen 512 Byte Datenstruktur zu speichern, die im Speicher 36 gebildet
ist. Das 32-Bit Betriebssystem verwendet wahrscheinlich den verfügbaren ×86 "FXRSTOR" Befehl, um den Inhalt
der Standard-MMX-Register des Standard-MMX-Registersatzes 110 und
der Standard-SSE-Register des Standard-SSE-Registersatzes 114 wiederherzustellen,
der in einer speziellen 512 Byte Datenstruktur unter Verwendung
des FXSAVE Be fehls gespeichert wurde. Üblicherweise können die
Befehle FXSAVE und FXRSTOR in der CPU 32 durch Microcode
implementiert sein. Bei einem Ausführungsbeispiel ist dieser Microcode
erweitert, um den Inhalt der erweiterten Registersätze 86, 112 und/oder 114 zu
speichern (und wiederherzustellen). Somit kann das 32-Bit Betriebssystem,
das die ×86
Befehle FXSAVE und FXRSTOR zum Speichern und Wiederherstellen des
Inhalts der Standard-MMX-Register des Standard-MMX-Registersatzes 110 und
der Standard-SSE-Register des Standard-SSE-Registersatzes 114 bei Kontextänderungen
ausführt,
auch das Speichern des Inhalts des erweiterten Registersatzes 86,
des erweiterten MMX-Registersatzes 112 und des erweiterten SSE-Registersatzes 116 bewirken.
-
11 ist
ein Diagramm eines Ausführungsbeispiels
einer mit 120 bezeichneten speziellen 512 Byte Datenstruktur,
die im Speicher gebildet und zum Speichern von Registerinhalten
dient (herkömmlicherweise
der Standard-MMX-Register und der Standard-SSE-Register in der ×86 Architektur).
Die Datenstruktur 120 weist einen benutzten Bereich 122 und
einen zuvor unbenutzten Bereich 124 auf. Der Standard-MMX-Registerdatenbereich 126 und
der Standard-SSE-Registerdatenbereich 130 bestehen im benutzten
Bereich 122 zum Speichern des Inhalts der Register des
Standard-MMX-Registersatzes 110 und der Register des Standard-SSE-Registersatzes 114 (10).
Wie in 11 dargestellt, kann der zuvor
unbenutzte Bereich 124 der Datenstruktur 120 zum Speichern
des Inhalts der erweiterten Registersätze 86, 112 und 116 bei
Kontextänderungen
in Speicherbereichen 134, 135 und 136 dienen.
Auf diese Weise kann das 32-Bit Betriebssystem, das die ×86 FXSAVE
und FXRSTOR Befehle zum Speichern und Widerherstellen der Inhalte
der Standard MMX und SSE Register bei Kontextwechseln ausführt, auch
den Inhalt der erweiterten Registersätze speichern und wiederherstellen.
-
Industrielle
Anwendbarkeit
-
Die
Erfindung ist generell auf integrierte Schaltungen und Energiesparmodi
in integrierten Schaltungen anwendbar.