-
HINTERGRUND
DER ERFINDUNG Technisches Gebiet
-
Die
vorliegende Erfindung betrifft Mikroprozessorsysteme und insbesondere
die Anweisungssatzerweiterung durch Verwendung von 3-Byte-Escape-Opcodewerten
in einem Opcode-Feld.
-
Allgemeiner
Stand der Technik
-
Die
Mikroprozessortechnologie hat sich über die Jahre hinweg mit großer Geschwindigkeit
entwickelt. Fortschritt in der Computerarchitektur und der Halbleitertechnologie
haben viele Möglichkeiten
zum Entwurf neuer Prozessoren geschaffen. Es gibt in der Regel zwei
Wahlmöglichkeiten
für den
Entwurf neuer Prozessoren: (1) Definieren einer völlig neuen
Architektur und (2) Erweitern der derzeitigen Architektur, um neue
Merkmale zu ermöglichen.
Jede Wahlmöglichkeit
hat sowohl Vorteile als auch Nachteile. Wenn ein Prozessor jedoch
ein signifikantes Marktsegment erfaßt hat, bietet die Möglichkeit
(2) viele attraktive Vorteile. Der Hauptvorteil des Erweiterns der
derzeitigen Architektur ist die Kompatibilität mit derzeitigen und früheren Modellen. Zu
den Nachteilen gehören
die Probleme des Herauskommens aus den durch die früheren Entwürfe auferlegten
Beschränkungen.
-
Bei
neuen Prozessoren treten sowohl in Bezug auf Hardware als auch in
Bezug auf Software neue Merkmale auf. Ein neuer Prozessor, der auf
einem existierenden Entwurf basiert, weist in der Regel einen zusätzlichen
Satz von Anweisungen auf, der den neuen Hardwareentwurf ausnutzen
kann. Das Erweitern eines Anweisungssatzes durch Hinzufügen eines
neuen Satzes von Anweisungen ist jedoch aufgrund der Beschränkungen
bei der Codierung der Anweisungen ein großes Problem. Deshalb wird in
der Technologie ein effizientes Verfahren zum Erweitern eines Anweisungssatzes
ohne Vergrößern der
Hardwarekomplexität
benötigt.
-
KURZE BESCHREIBUNG
DER ZEICHNUNGEN
-
Die
Merkmale und Vorteile der Erfindung werden aus der folgenden ausführlichen
Beschreibung der Erfindung hervorgehen. Es zeigen:
-
1 ein Blockschaltbild mindestens
einer Ausführungsform
eines Verarbeitungssystems, das offengelegte Techniken verwenden
kann.
-
2 ein Blockschaltbild mindestens
einer Ausführungsform
eines Formats für
eine Anweisung.
-
3 ein Blockschaltbild mindestens
einer Ausführungsform
von Logik zur Decodierung einer Anweisung.
-
4 ein Diagramm mindestens
einer Ausführungsform
einer Schaltung zur Decodierung einer neuen Anweisung des Typs 1.
-
5 ein Diagramm eines Präfix-und-Escape-Detektors,
einer Decoderfreigabeschaltung und eines Opcode-Decoders gemäß mindestens
einer Ausführungsform
der Erfindung.
-
6 ein Flußdiagramm
eines Prozesses zur Durchführung
einer Anweisungsdecodierung unter Verwendung von Präfixen gemäß mindestens
einer Ausführungsform
der Erfindung.
-
7 ein Flußdiagramm
mindestens einer Ausführungsform
eines Verfahrens zum Decodieren der Länge einer Anweisung.
-
BESCHREIBUNG
DER VORLIEGENDEN ERFINDUNG
-
Es
werden Ausführungsformen
eines Verfahrens, einer Vorrichtung und eines Systems zum Erweitern eines
Anweisungssatzes unter Verwendung von Drei-Byte-Escape-Opcodes offengelegt.
Offengelegte Ausführungsformen
ermöglichen
ferner eine Erweiterung eines Anweisungssatzes, der Drei-Byte-Escape-Opcodes
verwendet, durch Verwendung eines Präfixes zum Spezifizieren einer
Anweisung, die einen Drei-Byte-Escape-Opcode enthält. Offengelegte
Verfahren verwenden einen Satz existierender Anweisungsfelder zur
Definition eines neuen Satzes von Anweisungen und liefern einen
effizienten Mechanismus zur Decodierung des neuen Anweisungssatzes.
-
Der
Ausdruck „Drei-Byte-Escape-Opcode" soll hier einen
Zwei-Byte-Wert bedeuten, der Decoderlogik angibt, daß der Opcode
für die
fragliche Anweisung drei Byte enthält: die zwei Byte des Drei-Byte-Escape-Opcodes,
plus einem anweisungsspezifischen Ein-Byte-Opcode. Bei mindestens
einer Ausführungsform
ist der Zwei-Byte-Wert in dem Drei-Byte-Escape-Opcode-Feld einer der folgenden Werte:
0x0F38, 0x0F39, 0x0F3A oder 0x0F3B.
-
In
der folgenden Beschreibung werden zur Erläuterung zahlreiche spezifische
Einzelheiten, wie zum Beispiel Prozessortypen, Anweisungsformate,
Logikgattertypen und Escape-Opcode-Werte
dargelegt, um ein umfassendes Verständnis der vorliegenden Erfindung
zu ermöglichen.
Für Fachleute
ist jedoch erkennbar, daß diese
spezifischen Einzelheiten nicht erforderlich sind, um die vorliegende
Erfindung auszuüben.
In anderen Fällen
werden wohlbekannte elektrische Strukturen und Schaltungen in Blockschaltbildform
gezeigt, um die vorliegende Erfindung nicht zu verdecken. In der
folgenden Beschreibung bedeutet die Notation 0x, daß die folgende
Zahl im hexadezimalen Format vorliegt.
-
1 zeigt mindestens eine
Ausführungsform
eines Verarbeitungssystems 100, das offengelegte Techniken
verwenden kann. Mit dem System 100 können zum Beispiel neue Anweisungen
des Typs 0 und neue Anweisungen des Typs 1 decodiert und ausgeführt werden.
Für die
Zwecke der vorliegenden Offenlegung enthält das Verarbeitungssystem
ein beliebiges System, das einen Prozessor 110 aufweist,
wie zum Beispiel einen digitalen Signalprozessor (DSP), eine Mikrosteuerung,
eine anwendungsspezifische integrierte Schaltung (ASIC) oder einen
Mikroprozessor. Der Prozessor 110 kann eine beliebige Art
von Architektur aufweisen, wie zum Beispiel Computer mit komplexem
Anweisungssatz (CISC), Computer mit verringertem Anweisungssatz
(RISC), Architekturen mit sehr langem Anweisungswort (VLIW), Mehrfachthread-
oder hybride Architekturen. Das System 100 repräsentiert
Verarbeitungssysteme, die auf Mikroprozessoren des Typs Itanium® und
Itanium® II
sowie auf Mikroprozessoren des Typs Pentium®, Pentium® Pro,
Pentium® II,
Pentium® III, Pentium® 4
basieren, die alle von der Intel Corporation erhältlich sind. Es können auch
andere Systeme (einschließlich
PCs (personal computers) mit anderen Mikroprozessoren, technische
Workstations, persönliche
digitale Assistenten und andere in der Hand gehaltene Einrichtungen,
Beistellgeräte
und dergleichen) verwendet werden. Bei einer Ausführungsform
kann eine Version des von der Microsoft Corporation erhältlichen
Betriebssystems WindowsTM ausgeführt werden,
obwohl zum Beispiel auch andere Betriebssysteme und graphische Benutzeroberflächen verwendet
werden können.
-
1 zeigt, daß der Prozessor 110 eine
Decodereinheit 116, einen Satz Register 114, mindestens eine
Ausführungseinheit 112 und
mindestens einen internen Bus 111 zum Ausführen von
Anweisungen enthält.
Natürlich
enthält
der Prozessor 110 zusätzliche
Schaltkreise, die für
das Verständnis
der Erfindung nicht notwendig sind. Die Decodereinheit 116,
die Register 114 und die Ausführungseinheit 112 sind
durch einen oder mehrere interne Busse 111 miteinander
gekoppelt. Die Decodereinheit 116 dient zum Decodieren
von durch den Prozessor 110 empfangenen Anweisungen in
Steuersignale und/oder Mikrocodeeintrittspunkte. Die Anweisungen
können
durch einen Anweisungspuffer (wie z.B. 310 in 3) an die Decodereinheit 116 ausgegeben
werden. Als Reaktion auf diese Steuersignale und/oder Mikrocodeeintrittspunkte
führt die
Ausführungseinheit 112 die
entsprechenden Operationen durch. Die Decodereinheit 116 kann
mit einer beliebigen Anzahl verschiedener Mechanismen implementiert
werden (z.B. eine Nachschlagetabelle, eine Hardwareimplementierung,
ein programmierbares logisches Array („PLA") usw.).
-
Die
Decodereinheit 116 ist mit der Fähigkeit gezeigt, Anweisungen 106 zu
decodieren, die durch einen erweiterten Anweisungssatz 118 definierten
Formaten folgen. Der Anweisungssatz 118 enthält einen
existierenden Anweisungssatz 118a und einen neuen Anweisungssatz 118b.
Der Anweisungssatz 118 enthält Anweisungen zur Durchführung von
Operationen an skalaren und gepackten Daten. Das Zahlenformat für diese Operationen
kann ein beliebiges zweckmäßiges Format
sein, wie zum Beispiel Zahlen mit einfacher Präzision, doppelter Präzision und
erweiterte Floating-Point-Zahlen, vorzeichenbehaftete und vorzeichenlose
ganze Zahlen und nichtnumerische Daten. Bei mindestens einer Ausführungsform
kann die Länge
der in dem Anweisungssatz 118 definierten Anweisungen jeweils
unterschiedlich sein.
-
Anweisungen 106,
die den durch den Anweisungssatz 118 dargelegten Formaten
folgen, können
in einem Speichersystem 102 gespeichert werden. Das Speichersystem 102 ist
als verallgemeinerte Repräsentation
von Speicher oder Speicherhierarchien gedacht und kann vielfältige Speicherformen
umfassen, wie zum Beispiel Festplatte, CD-ROM, Direktzugriffsspeicher
(RAM), dynamischer Direktzugriffsspeicher (DRAM), statischer Direktzugriffsspeicher
(SRAM), Flash-Speicher und damit zusammenhängende Schaltkreise. Das Speichersystem 102 kann
zusätzlich
zu den Anweisungen 106 Daten 104 speichern, die
durch Datensignale repräsentiert
werden, die der Prozessor 110 ausführen kann.
-
ANWEISUNGSFORMAT
-
2 ist ein Diagramm eines
Formats einer Anweisung 200 gemäß einer Ausführungsform
der Erfindung. Das Anweisungsformat 200 enthält ein Präfixfeld 210,
ein Opcode-Feld 220 und Operandenkennungsfelder (z.B. modR/M,
Skala-Index-Basis, Verschiebung, unmittelbar, usw.). Die Operandenkennungsfelder
sind optional und enthalten ein modR/M-Feld 230, ein SIB-Feld 240,
ein Verschiebungsfeld 250 und ein Unmittelbar-Feld 260.
-
Der
Inhalt des modR/M-Felds 230 gibt eine Adressierungsform
an. Das modR/M-Feld kann Register und Adressierungsarten spezifizieren.
-
Bestimmte
Codierungen von Informationen in den modR/M-Feld 230 können angeben,
daß ein
zweites Byte Adressierungsinformationen in dem SIB-Feld (Skala/Index/Basis) 240 vorliegt,
um die Adressierungsform des Anweisungscodes voll zu spezifizieren.
Zum Beispiel können
eine Basis-Plus-Index-Adressierungsform und eine Skala-Plus-Index-Adressierungsform
jeweils in dem SIB-Feld 240 Informationen enthalten, wie zum
Beispiel Skalenfaktor, Registernummer für den Index und/oder Registernummer
des Basisregisters.
-
Für Fachleute
ist erkennbar, daß das
in 2 dargelegte Format 200 beispielhaft
ist und daß andere Organisationen
von Daten in einem Anweisungscode mit offengelegten Ausführungsformen
verwendet werden können.
Zum Beispiel müssen
die Felder 210, 220, 230, 240, 250, 260 nicht
in der gezeigten Reihenfolge organisiert werden, sondern können in
andere Stellen in Bezug aufeinander umorganisiert werden und müssen nicht
fortlaufend sein. Außerdem
sollten die hier besprochenen Feldlängen nicht als Einschränkung aufgefaßt werden.
Ein Feld, das als eine bestimmte Anzahl von Byte betragend besprochen
wird, kann bei alternativen Ausführungsformen
als ein größeres oder
ein kleineres Feld implementiert werden. Außerdem kann der Ausdruck „Byte", obwohl er hier
eine Acht-Bit-Gruppierung bedeutet, in anderen Ausführungsformen
als eine Gruppierung einer beliebigen anderen Größe, zum Beispiel 4 Bit, 16
Bit und 32 Bit, implementiert werden.
-
In
der vorliegenden Bedeutung umfaßt
eine Anweisung (wie zum Beispiel eine der in 1 dargestellten Anweisungen 106)
bestimmte Werte in den Feldern des in 2 gezeigten
Anweisungsformats 200. Eine solche Anweisung wird manchmal „eine tatsächliche
Anweisung" bezeichnet.
Die Bitwerte für
eine tatsächliche Anweisung
werden hier manchmal kollektiv als ein „Anweisungscode" bezeichnet.
-
Die
akzeptablen Byte-Werte für
eine tatsächliche
Anweisung werden in dem Anweisungssatz 118 (1) spezifiziert. Akzeptable
Byte-Werte für
jedes der Felder des Anweisungsformats 200 sind die Werte, die
Decoderlogik, wie zum Beispiel der Anweisungslängendecoder 306 (3) und die Decodereinheit 116 (1) erkennen und verarbeiten,
um decodierten Anweisungscode zu erzeugen. Für jeden Anweisungscode repräsentiert
der entsprechende decodierte Anweisungscode eindeutig eine durch
die Ausführungseinheit 112 (1) als Reaktion auf den
Anweisungscode durchzuführende
Reaktion. Der decodierte Anweisungscode kann eine oder mehrere Mikrooperationen
enthalten.
-
Das
in 2 dargestellte Präfixfeld 210 kann
eine Anzahl von Präfixen
enthalten. Bei einer Ausführungsform
enthält
das Präfixfeld 210 bis
zu vier Präfixe,
wobei jedes Präfix
ein Byte beträgt.
Das Präfixfeld 210 ist
optional. Für
den hier besprochenen erweiterten neuen Anweisungssatz dient das
Präfixfeld
zum Erweitern des Drei-Byte-Escape-Opcode-Anweisungsraums.
-
Der
Inhalt des Opcode-Felds 220 spezifiziert die Operation.
Bei mindestens einer Ausführungsform weist,
wie oben erwähnt,
das Opcode-Feld für
den neuen Anweisungssatz 118b, der hier besprochen wird, eine
Länge von
drei Byte auf. Bei mindestens einer Ausführungsform kann das Opcode-Feld 220 für den erweiterten
neuen Anweisungssatz 118 somit ein, zwei oder drei Byte
Informationen enthalten. Für
bestimmte der neuen Anweisungen in dem hier besprochenen erweiterten
neuen Anweisungssatz (Anweisungen des Typs 0) wird der Drei-Byte-Escape-Opcode-Wert
in dem Zwei-Byte-Feld 118c des Opcode-Felds 220 mit
dem Inhalt eines dritten Bytes 225 des Opcode-Felds 220 kombiniert,
um eine Operation zu spezifizieren. Dieses dritte Byte 225 wird
hier als ein anweisungsspezifischer Opcode bezeichnet. Für andere
der neuen Anweisungen in dem hier besprochenen erweiterten neuen
Anweisungssatz (Anweisungen des Typs 1), wird der Drei-Byte-Escape-Opcode-Wert
in dem Zwei-Byte-Feld 118c des Opcode-Felds 220 mit
dem Inhalt des Präfix-Felds 210 und
dem Inhalt des anweisungsspezifischen Opcode-Felds 225 des
Opcode-Felds 220 kombiniert, um eine Operation zu spezifizieren.
-
Im
allgemeinen erzeugt die Kombination des Präfix-Felds 210 und
des Opcode-Felds 220 eine Anzahl verschiedener Arten von
Anweisungen. Zur Veranschaulichung zeigt 2 nur sieben Arten von Anweisungen: eine
reguläre
Ein-Byte-Anweisung 212, eine reguläre Anweisung mit Präfix als
Qualifizierer 214, eine reguläre Escape-Anweisung 216,
einen ersten erweiterten Anweisungstyp 222, einen zweiten
erweiterten Anweisungstyp 224, einen ersten neuen Anweisungstyp 226 und
einen zweiten neuen Anweisungstyp 228. Wie Fachleuten bekannt
ist, können
andere Arten von Anweisungen ähnlich
definiert werden.
-
Die
reguläre
Ein-Byte-Anweisung 212 enthält reguläre Anweisungen mit anweisungsspezifischen Ein-Byte-Opcodes
in dem Opcode-Feld 220. Die reguläre Anweisung mit Präfix als
Qualifizierer 214 enthält reguläre Anweisungen,
die das Präfix
als Qualifizierer für
den Opcode verwenden. Zum Beispiel kann eine String-Anweisung einen
REPEAT-Präfixwert
zum Wiederholen der String-Anweisung um eine in dem Zählregister
spezifizierte Anzahl von Malen oder bis eine bestimmte Bedingung
erfüllt
ist, verwenden. Der in der Anweisung 214 verwendete Präfixwert
fügt dem
Opcode-Wert, der in dem Opcode-Feld 220 folgt, keine völlig neue
Bedeutung hinzu. Statt dessen dient der Präfixwert lediglich als Qualifizierer
zum Qualifizieren des Opcodes mit zusätzlichen Bedingungen. Wie später erläutert werden
wird, ist diese Verwendung des Präfixes in der Anweisung 214 deutlich
von der in dem zweiten erweiterten Anweisungstyps 224 und
dem zweiten neuen Anweisungstyp 228 verschieden.
-
Die
reguläre
Escape-Anweisung 216 ist eine reguläre Anweisung, die einen Escape-Opcode
in einem ersten Feld 215 des Opcode-Felds 220 verwendet,
um Decoderhardware anzugeben, das ein anweisungsspezifischer Opcode
in einem zweiten Feld 217 des Opcode-Felds 220 zur
Definition der Anweisung verwendet wird. Zum Beispiel gibt bei einer
Ausführungsform
ein Floating-Point-Koprozessor-Escape-Opcode-Wert 0xD8 bis 0xDF
in dem ersten Byte 215 des Opcode-Felds 220 an,
daß der
Opcode-Wert, der in dem zweiten Byte 217 des Opcode-Felds 220 folgt,
als eine Koprozessoranweisung interpretiert und zur Ausführung an
die Koprozessorhardware gerichtet werden sollte.
-
Der
erste erweiterte Anweisungstyp 222 ist eine bestimmte Art
von Escape-Anweisung, die so definiert ist, daß sie einen vordefinierten
Escape-Opcode-Wert 0x0F in einem ersten Feld 221 des Opcode-Felds 220 enthält. Der
Escape-Opcode 0x0F gibt Decoderhardware an, das ein anweisungsspezifischer
Opcode-Wert in einem zweiten Feld 223 des Opcode-Felds 220 zur
Definition der Anweisung verwendet wird. Anweisungen des ersten
erweiterten Anweisungstyps 222 können abhängig von dem Wert des zweiten
Opcode-Bytes (und in bestimmten Fällen dem Wert von drei Bit
des modR/M-Felds 230) variierende Längen aufweisen. Zum Beispiel
können
zwei Anweisungen (Packed Shift Left Logical) des erweiterten Anweisungstyps 222 jeweils
die folgenden Anweisungsfeldwerte enthalten:
PSLLW (Schiebewert
im Register): 0F: F1: 1b"1
1xxxyyy", wobei
xxx ein erstes Register und yyy ein zweites Register definiert.
PSLLW
(Schieben unmd.-Wert): 0F:71:1b"11110xxx": unmd.-Daten (8
Bit), wobei xxx ein Register definiert.
-
In
jeder der dargelegten PSSLW-Anweisungen enthält das erste Wort des Opcode-Felds 220 den
Escape-Wert 0x0F. Die erste Anweisung ist drei Byte lang, aber die
zweite Anweisung beträgt
vier Byte, weil sie ein Byte unmittelbarer Daten enthält. Für den erweiterten
Anweisungstyp 222 verwendet folglich Decoderhardware (wie
zum Beispiel der Anweisungslängendecoder 306 in 3) den Escape-Opcode-Wert
0x0F in dem ersten Feld 221 des Opcode-Felds 220,
sowie den Wert in dem zweiten Byte 223 des Zwei-Byte-Opcode-Felds 220 und
dem Wert des modR/M-Felds 230 zur Decodierung der Länge der
Anweisung.
-
Der
erste neue Anweisungstyp 226 (der auch als „neue Anweisung
des Typs 0" bezeichnet wird)
ist ein neuer Anweisungstyp, der Teil des neuen Anweisungssatzes 118b (1) ist, der zu dem existierenden regulären Anweisungssatz 118a (1) hinzugefügt werden
soll. Das Anweisungsformat des neuen Anweisungssatzes 118b enthält ein 3-Byte-Escape-Opcode-Feld 118c und
ein anweisungsspezifisches Opcode-Feld 225. Das 3-Byte-Escape-Opcodes-Feld 118c weist
bei mindestens einer Ausführungsform
eine Länge
von zwei Byte auf. Die neue Anweisung des Typs 0 verwendet einen
von vier speziellen Escape-Opcodes, die als Drei-Byte-Escape-Opcodes
bezeichnet werden. Die Drei-Byte-Escape-Opcodes sind zwei Byte lang
und geben Decoderhardware an, daß die Anweisung ein drittes
Byte in dem Opcode-Feld 220 zur Definition der Anweisung
verwendet. Das 3-Byte-Escape-Opcode-Felds 118c kann an
einer beliebigen Stelle in dem Anweisungs-Opcode liegen und muß nicht
unbedingt das Feld höchster
Ordnung oder niedrigster Ordnung in der Anweisung sein.
-
Bei
mindestens einer Ausführungsform
werden die vier neuen Drei-Byte-Escape-Opcode-Werte als 0x0F3y definiert, wobei y
0x8, 0x9, 0xA oder 0xB ist. Für
die Anweisung 226 sollte der Wert in dem anweisungsspezifischen
Opcode-Feld 225 des Opcode-Felds 220 als eine
neue Anweisung decodiert werden.
-
BEISPIELE
FÜR ANWEISUNGSPRÄFIXE UND
ESCAPE-OPCODES
-
Sowohl
der zweite erweitern Anweisungstyp 224 als auch der zweite
neue Anweisungstyp 228 (hier manchmal als „neue Anweisung
des Typs 1" bezeichnet)
verwenden den Wert in dem Präfix-Feld 210 als
Teil des Opcode. Im Gegensatz zu der regulären Anweisung mit Präfixqualifizierer 214,
bei der das Präfix
lediglich den folgenden Opcode qualifiziert, verwenden der zweite
erweiterte Anweisungstyp 224 und die neue Anweisung des
Typs 1 228 beide das Präfix
zur Definition einer völlig
neuen Anweisung.
-
Anweisungspräfixe wurden
ursprünglich
entwickelt, um einen Satz Anweisungen zu erweitern. Zum Beispiel
wird das Repeat-Präfix
wiederholt, um eine String-Anweisung zu wiederholen. Die Repeat-Präfixcodes
lauten 0xF3 (REP, REPE) und 0xF2 (REPNE). Das an sich verwendete
Präfix
definiert keine neue Bedeutung für
den folgenden Opcode. Es definiert lediglich zusätzliche Operationsbedingungen
für den
Opcode.
-
Escape-Opcodes
liefern eine Erweiterung des Anweisungssatzes. Zum Beispiel wird
mit den Escape-Opcodes 0xD8 bis 0xDF angegeben, daß das zweite
Opcode-Byte 217 einen Wert enthält, der eine Anweisung für die Floating-Point-Einheit
definiert. Der Decoder leitet diesen Opcode zu dem Floating-Point-Decoder weiter.
-
Bei
mindestens einer Ausführungsform
des hier besprochenen erweiterten Anweisungssatzes ist der 3-Byte-Escape-Opcode
eine Zwei-Byte-Entität
mit einem Wert von 0x0F3y, wobei y 0x8, 0x9, 0xA oder 0xB ist. Das
3-Byte-Escape-Opcode-Feld 118c gibt dem Decoder an, daß der anweisungsspezifische
Opcode-Wert in dem dritten Byte 225 des Opcode-Felds 200 eine
Anweisung in dem neuen Anweisungssatz angibt.
-
Im
Gegensatz zu dem oben in Verbindung mit dem ersten erweiterten Anweisungstyp 222 besprochenen
2-Byte-Escape-Opcode-Feld, gibt der Wert in dem 3-Byte-Escape-Opcode-Feld 118c dem
Decoder das Verfahren an, das zur Bestimmung der Länge der
definierten Anweisung des Typs 0 verwendet werden soll. Das heißt, jeder
Wert für
den 3-Byte-Escape-Opcode
ist mit einem bestimmten Verfahren assoziiert, das zur Bestimmung
der Anweisungslänge
für jede
Anweisung in der dem bestimmten 3-Byte-Escape-Code entsprechenden
Map verwendet werden soll. Zum Beispiel ist der Wert 0x0F38 in dem
3-Byte-Escape-Opcode-Feld 118c einer
assoziierten Opcode-Map zugeordnet. Die Länge für jede Anweisung in der 0x0F38-Opcode-Map kann
berechnet werden, indem dasselbe Längenbestimmungsverfahren verwendet
wird, mit dem die Länge der
anderen Anweisungen in der 0x0F38-Opcode-Map bestimmt wird.
-
Ähnlich kann
die Länge
jeder Anweisung der jeweiligen mit den übrigen 3-Byte-Escape-Opcode-Werten (0x0F39,
0x0F3A, 0x0F3B) assoziierten Opcode-Maps mit derselben Längenbestimmungslogik
berechnet werden, mit der die Länge
der anderen Anweisungen in der jeweiligen Opcode-Map bestimmt wird.
-
Die
Längenbestimmungslogik,
mit der die Länge
von Anweisungen für
jede Anweisung in einer der neuen Opcode-Maps bestimmt wird, ist
insofern vereinfacht, als derselbe Satz Eingangsterme ausgewertet wird,
um die Länge
jeder Anweisung in der Opcode-Map zu bestimmen. Eine solche Längenbestimmungslogik wird
hier als Logik oder Verfahren des Typs „feste Eingabe" bezeichnet. Das
heißt,
jeder Eingangsterm, der ausgewertet wird, um die Länge einer
Anweisung in der Abbildung zu bestimmen, ist auch für die Bestimmung der
Länge jeder
anderen Anweisung in der Abbildung relevant. Der feste Satz auszuwertender
Terme kann von Opcode-Map zu Opcode-Map verschieden sein. Obwohl
der Satz auszuwertender Eingangsterme unter Opcode-Maps verschieden
sein kann, sind die zur Bestimmung der Anweisungslänge ausgewerteten
Eingangsterme über
alle Anweisungen in einer gegebenen 3-Byte-Opcode-Abbildung hinweg
dieselben.
-
Die
Kombination eines Präfix
und eines Escape-Opcodes liefert eine signifikante Vergrößerung der Opcode-Tabelle
eines Prozessors, um zusätzliche
neue Anweisungssätze
zu ermöglichen.
Diese Kombination verwendet die existierenden Präfix-Codes zur Definition eines
neuen Satzes von Anweisungen zusätzlich
zu dem durch die Escape-Opcodes erzeugten Anweisungssatz. Durch
Verwendung der existierenden Präfix-Codes
können
die Decodierungsschaltkreise für
den existierenden Anweisungssatz relativ unmodifiziert bleiben, um
die Decodierung der neuen Anweisungen 118c (1) zu unterstützen.
-
Die
anweisungsspezifischen Opcode-Werte (in dem dritten Byte 225 des
Opcode-Felds 220) eines Teils oder aller der neuen Anweisungen
können
dieselben wie die Opcodes für
existierende Anweisungen sein. Durch Verwendung derselben Opcodes
mit dem Präfix
und Escape-Opcodes zur Definition eines neuen Anweisungssatzes können die
Decodierungsschaltkreise weniger komplex sein, als wenn man einen
völlig
neuen Satz Opcodes für
den neuen Anweisungssatz hat.
-
Bei
einer Ausführungsform
dient der Präfixwert
0x66 zur Definition neuer Anweisungen. Ähnlich können andere Präfixe verwendet
werden. Außerdem
können
Präfixe
immer noch in der traditionellen Rolle des Erweiterns des Opcodes
oder des Qualifizierens des Opcodes unter bestimmten Betriebsbedingungen
verwendet werden.
-
Die
nachfolgende Tabelle 1 zeigt Beispiele für den neuen Anweisungssatz
unter Verwendung von Präfixen
und Drei-Byte-Escape-Opcodes.
-
-
-
-
-
-
In
den obigen Beispielen betreffen die Anweisungen mit den Präfixen 0x66
Anweisungen, die ein oder mehrere Register erweiteter Größe (wie
zum Beispiel Registergröße von 128
Bit) verwenden, während
die Anweisungen ohne das Präfix
0x66 Anweisungen betreffen, die ein oder mehrere Register kleinerer
Größe (wie zum
Beispiel Registergröße von 64
Bit) verwenden. Die kleineren Register werden hier als Register „regulärer Länge" bezeichnet. Fachleuten
ist bekannt, daß die
exakten Codes für
Präfixe
implementierungsabhängig
sind und daß der
oben besprochene Präfixwert
von 0x66 lediglich zur Veranschaulichung dient.
-
ANWEISUNGSDECODIERUNG
UNTER VERWENDUNG VON 3-BYTE-ESCAPE-OPCODES
-
3 ist ein Diagramm der Logik 300 zum
Decodieren von Anweisungen variabler Länge. Die Decoderlogik 300 kann
einen Anweisungslängendecoder 306,
einen Anweisungsrotator 308, einen Anweisungspuffer 310,
einen Präfix-
und Escape-Detektor 320, eine Decoderfreigabeschaltung 330 und
einen Opcode-Decoder 340 enthalten. Der Präfix- und
Escape-Detektor 320, die Decoderfreigabeschaltung 330 und
der Opcode-Decoder 340 bilden die gesamte in 1 dargestellte Decodereinheit 116 oder
einen Teil dieser. Obwohl er als eine einzige Entität dargestellt
ist, kann der Präfix-
und Escape-Code-Detektor als separate Escape-Detektor- und Präfix-Detektor-Blöcke implementiert
werden.
-
Der
Anweisungslängendecoder 306 bestimmt
die Länge
eines tatsächlichen
Anweisungscodes, der von dem externen Speicher (wie zum Beispiel
dem in 2 gezeigten Speicher 102)
abgehoben wurde. Zur Veranschaulichung wird angenommen, daß ein Anweisungscode
bis zu fünf
Byte enthält:
das erste Byte entspricht IN bis IN+7, das zweite Byte entspricht IK bis IK+7, das dritte
Byte entspricht IL bis IL+7,
das vierte Byte entspricht IM bis IM+7 und das fünfte Byte entspricht IP bis IP+7, wobei
IN bis IN+7, IK bis IK+7, IM bis IM+7, IL bis IL+7 und IP bis IP+7 die Bitpositionen
des Anweisungscodes bedeuten. In der Praxis kann eine tatsächliche
Anweisung jedoch mehr als fünf
Byte in ihrem Anweisungscode enthalten. Ähnlich kann eine tatsächliche
Anweisung weniger als 5 Byte in ihrem Anweisungscode enthalten.
Bei mindestens einer Ausführungsform
sind die 5 dargestellten Bytes des Anweisungscodes fortlaufend,
d.h. K = N + 8, L = K + 8 und L = N + 16, und M = L + 8, M = K +
16 und M = K + 24 usw. Wie oben in Verbindung mit 2 besprochen, müssen die Felder des in 2 dargestellten Formats 200 jedoch
nicht die gezeigten Positionen einnehmen. Folglich können die
beispielhaften fünf
Bytes eines Anweisungscodes, die hier besprochen werden, in einer
beliebigen Reihenfolge vorliegen und müssen nicht fortlaufend sein.
-
Für Fachleute
ist erkennbar, daß Logik
des Anweisungslängendecoders 306 in
einem System, das Anweisungen variabler Länge unterstützt, relativ komplexe Längendecodierverfahren
implementieren kann. Dies gilt insbesondere für Systeme, die verschiedene
Verfahren erfordern und verschiedene Eingangsterme auswerten, um
die Anweisungslänge
für Anweisungen
in derselben Opcode-Map zu bestimmen. Wie oben besprochen, ergeben
Ausführungsformen
der vorliegenden Erfindung eine vereinfachte Längendecodierverarbeitung durch
Gewährleistung,
daß die
Länge jeder
Anweisung in einer Opcode-Map durch eine einzige Festeingabe-Längenbestimmungslogik
bestimmt wird.
-
Der
Rotator 308 rotiert die unverarbeiteten Anweisungsbytes
dergestalt, daß das
erste zu decodierende Byte an einer Anfangsposition steht. Der Rotator 308 identifiziert
also den Anfang der zu decodierenden Anweisungsbyte. Es sollte beachtet
werden, daß,
obwohl der Rotator 308 das erste Byte einer Anweisung,
wie zum Beispiel ein Präfix-Byte
identifizieren kann, das erste Byte nicht identifiziert werden muß. Zum Beispiel identifiziert
bei mindestens einer Ausführungsform
der Rotator 308 das niedrigstwertige Byte des Opcodes und rotiert
es in die Anfangsposition der Anweisung. Bei mindestens einer weiteren
Ausführungsform
identifiziert der Rotator 308 das höchstwertige Byte des Opcodes
und rotiert es in die Anfangsposition der Anweisung.
-
Der
Anweisungspuffer 310 empfängt und speichert die Anweisungen,
die aus dem externen Speicher abgerufen wurden. Bei mindestens einer
Ausführungsform
werden die Anweisungen längendecodiert
und rotiert, bevor sie in dem Anweisungspuffer 310 empfangen
werden. Bei mindestens einer Ausführungsform wird der Anweisungspuffer 310 als
ein Anweisungs-Cache
implementiert.
-
Der
Präfix-
und Escape-Detektor 320 empfängt die Anweisungsbit IN bis IN+7, IK bis IK+7, IL bis IL+7 und detektiert
das Vorhandensein eines oder mehrerer eines Satzes vordefinierter
Präfixe
und/oder Escape-Opcodes, die als Teil des neuen Anweisungssatzes
verwendet werden. Der Wert des Präfixes kann so gewählt werden,
daß es
dasselbe wie ein für
den regulären
Anweisungssatz verwendetes Präfix
ist. Die Decoderfreigabeschaltung 330 verwendet die Ergebnisse
des Präfix-
und Escape-Detektors 320, um Freigabe- oder Auswahlsignale
für den
einzelnen Opcode-Decoder zu erzeugen. Der Opcode-Decoder 440 empfängt die
Anweisungsbit IN bis IN+7,
IK bis IK+7, IM bis IM+7, IL bis IL+7 und IP bis IP+7 und übersetzt
die einzelnen Anweisungscodes in decodierte Anweisungscodes, die
die gewünschte
Anweisung spezifizieren.
-
4 ist ein Blockschaltbild
mindestens einer Ausführungsform
einer Decoderschaltung 440 zum Decodieren einer neuen Anweisung
des Typs 0. Die Decoderschaltung 440 kann als Teil eines
Präfix-
und Escape-Detektors, wie zum Beispiel des in 3 dargestellten Präfix- und Escape-Detektors 320 implementiert werden.
Zur Veranschaulichung bei der Besprechung von 4 wird angenommen, daß der Rotator (308, 3) das erste Byte des Anweisungs-Opcodes
angezeigt hat.
-
4 zeigt, daß der Decoder 440 ein
AND-Gatter 450 enthält,
das bestimmt, ob das erste Byte der Anweisung (die Anweisungsbit
IN bis IN+7) mit
dem 2-Byte-Escape-Opcode-Wert 0x0F übereinstimmen. Das Signal ESC2
wird gesetzt, wenn die Anweisungsbit IN bis
IN+7 den 2-Byte-Escape-Opcode 0x0F repräsentieren.
-
Der
Decoder 440 enthält
außerdem
AND-Gatter 402, 404, 406, 408.
Das AND-Gatter 402 vergleicht die Anweisungsbit IK bis IK+7 mit dem
3-Byte-Escape-Opcode-Wert 0x38 und erzeugt ein Signal ES38. Das
Signal ES38 wird gesetzt, wenn die Anweisungsbit IK bis
IK+7 den 3-Byte-Escape-Opcode 0x38 repräsentieren.
-
Wenn
die Anweisungsbit IN bis IN+7 den
2-Byte-Escape-Opcode 0x0F repräsentieren
und die Anweisungsbit IK bis IK+7 den
3-Byte-Escape-Opcode 0x38 repräsentieren,
ist die Anweisung eine neue Typ-0-Anweisung 226. Wenn sowohl
ESC2 als auch ES38 gesetzt sind, wertet das AND-Gatter 403 auf
True aus, wodurch die Logik 412 freigegeben wird. Die Logik 412 wählt, um
den Wert in dem anweisungsspezifischen Opcode-Feld 225 (2) zu decodieren, die 3-Byte-Opcode-Map
für Anweisungen
mit dem 3-Byte-Escape-Codewert 0x38.
-
Das
AND-Gatter 404 vergleicht die Anweisungsbit IK bis
IK+7 mit dem 3-Byte-Escape-Opcode-Wert 0x39
und erzeugt ein Signal ES39. Das Signal ES39 wird gesetzt, wenn
die Anweisungsbit IK bis IK+7 den 3-Byte-Escape-Opcode
0x39 repräsentieren.
Wenn die Anweisungsbit IN bis IN+7 den
2-Byte-Escape-Opcode 0x0F repräsentieren
und die Anweisungsbit IK bis IK+7 den
3-Byte-Escape-Opcode 0x39 repräsentieren,
ist die Anweisung eine neue Typ-0-Anweisung 226. Wenn sowohl
ESC2 als auch ES39 gesetzt sind, wertet das AND-Gatter 405 zu
True aus, wodurch die Logik 414 freigegeben wird. Die Logik 414 wählt, um
den Wert in dem anweisungsspezifischen Opcode-Feld 225 (2) zu decodieren, die 3-Byte-Opcode-Map
für Anweisungen
mit dem 3-Byte-Escape-Opcode-Wert 0x39.
-
Das
AND-Gatter 406 vergleicht die Anweisungsbit IK bis
IK+7 mit dem 3-Byte-Escape-Opcode-Wert 0x3A
und erzeugt ein Signal ES3A. Das Signal ES3A wird gesetzt, wenn
die Anweisungsbit IK bis IK+7 den 3-Byte-Escape-Opcode
0x3A repräsentieren.
Wenn die Anweisungsbit IN bis IN+7 den
2-Byte-Escape-Opcode 0x0F repräsentieren
und die Anweisungsbit IK bis IK+7 den
3-Byte-Escape-Opcode 0x3A repräsentieren,
ist die Anweisung eine neue Typ-0-Anweisung 226. Wenn sowohl
ESC2 als auch ES3A gesetzt sind, wertet das AND-Gatter 405 zu
True aus, wodurch die Logik 416 freigegeben wird. Die Logik 416 wählt, um
den Wert in dem anweisungsspezifischen Opcode-Feld 225 (2) zu decodieren die 3-Byte-Opcode-Map für Anweisungen
mit dem 3-Byte-Escape-Opcode-Wert 0x3A.
-
Das
AND-Gatter 408 vergleicht die Anweisungsbit IK bis
IK+7 mit dem 3-Byte-Escape-Opcode-Wert 0x3B
und erzeugt ein Signal ES3B. Das Signal ES3B wird gesetzt, wenn
die Anweisungsbit IK bis IK+7 den 3-Byte-Escape-Opcode
0x3B repräsentieren.
Wenn die Anweisungsbit IN bis IN+7 den
2-Byte-Escape-Opcode 0x0F repräsentieren
und die Anweisungsbit IK bis IK+7 den
3-Byte-Escape-Opcode 0x3B repräsentieren,
ist die Anweisung eine neue Typ-0-Anweisung 226. Wenn sowohl
ESC2 als auch ES3B gesetzt sind, wertet das AND-Gatter 409 zu
True aus, wodurch die Logik 418 freigegeben wird. Die Logik 418 wählt, um
den Wert in dem anweisungsspezifischen Opcode-Feld 225 (2) zu decodieren die 3-Byte-Opcode-Map für Anweisungen
mit dem 3-Byte-Escape-Opcode-Wert 0x3B.
-
5 ist ein Diagramm weiterer
Einzelheiten eines Decoders, wie zum Beispiel des in 3 dargestellten Opcode-Decoders 340,
sowie zusätzliche
Einzelheiten des Präfix-
und Escape-Detektors 320 und
der Decoderfreigabeschaltung 330.
-
Zur
Veranschaulichung wird angenommen, daß es für einen beispielhaften Anweisungssatz
ein 0x66-Präfix
und drei Escape-Opcodes gibt: die regulären Escape-Opcodes 0xD8-0xDF
den Zwei-Byte-Escape-Opcode 0x0F und die Drei-Byte-Escape-Opcodes
0x0F38-0x0F3B.
-
Außerdem wird
zur Veranschaulichung angenommen, daß der Rotator 308 (3) das erste Byte des Anweisungscodes,
das das Präfix
sein kann, angezeigt hat. Es versteht sich jedoch, daß in der
Praxis eine Anweisung auf andere Bit rotiert werden kann, wie zum
Beispiel das niedrigstwertige Byte des Opcode, und daß die in 5 dargestellte Funktionalität entsprechend
modifiziert werden kann.
-
5 zeigt, daß neben
den in 3 angegebenen
zusätzlichen
Byte der Anweisung zu einem bestimmten einzelnen Decoder 530, 532, 534, 536, 538, 440, 542 geroutet
werden können.
Zum Beispiel zeigt 5,
daß die
Anweisungswörter
IM bis IM+7 und
IP bis IP+7 für den neuen
Anweisungstyp 1 zu dem Decoder 452 geroutet werden
können.
Bestimmte Merkmale der in 5 dargestellten
Schaltung wurden absichtlich weggelassen, um die Figur zu vereinfachen
und um eine Verdeckung von Merkmalen der gewählten Ausführungsformen zu vermeiden.
Für Fachleute
ist jedoch erkennbar, daß andere
Byte der Anweisungswörter
neben den in 5 dargestellten
zu den anderen Decodern 530, 532, 534, 536, 538, 440 geroutet
werden können.
-
Der
Präfix-
und Escape-Detektor 320 enthält 5 AND-Gatter 510, 512, 514, 516, 518 und 520.
Die AND-Gatter 510, 512 und 514 vergleichen
im allgemeinen die Anweisungsbit IN bis
IN+7 mit dem entsprechenden Präfix-Code
und Escape-Opcode.
-
Das
AND-Gatter 510 vergleicht die Anweisungsbit IN bis
IN+7 mit dem Präfix-Code 0x66 und erzeugt ein Signal
PRFX. Das Signal PRFX wird gesetzt, wenn die Anweisungsbit IN bis IN+7 das Präfix 0x66
repräsentieren.
-
Das
AND-Gatter 512 vergleicht die Anweisungsbit IN bis
IN+7 mit den Escape-Opcodes 0xD8-0xDF und erzeugt
ein Signal ESC 1. Das Signal ESC 1 wird gesetzt,
wenn die Anweisungsbit IN bis IN+7 beliebige
der Escape-Opcodes 0xD8 bis 0xDF repräsentieren.
-
Das
AND-Gatter 514 vergleicht die Anweisungsbit IN bis
IN+7 mit dem 2-Byte-Escape-Opcode 0x0F und erzeugt
ein Signal ESC2A. Das Signal ESC2A wird gesetzt, wenn die Anweisungsbit
IN bis IN+7 den
2-Byte-Escape-Opcode 0x0F repräsentieren.
Wenn die Anweisungsbit IN bis IN+7 den
2-Byte-Escape-Opcode 0x0F repräsentieren,
kann die Anweisung entweder eine erweitere Typ-0-Anweisung 222 oder
eine neue Typ-0-Anweisung 228 sein. Wie im nachfolgenden
beschrieben, wertet ein zusätzliches
AND-Gatter 518 deshalb einen dritten Satz Bit IL bis IL+7 aus, um
zu bestimmen, ob die zweite Hälfte
des Drei-Byte-Opcodes
vorhanden ist.
-
Auf
die obige Weise bestimmt der Präfix-
und Escape-Detektor 320, ob ein erster Satz Bit IN bis IN+7 eines
Anweisungs-Opcodes den Präfixwert
0x66 oder einen der Escape-Opcode-Werte enthält. Wenn der erste Satz Bit
den Präfixwert
enthält,
kann die Anweisung entweder eine erweiterte Typ-1-Anweisung 224 oder eine
neue Typ-1-Anweisung 228 sein. Also wird ein zweiter Satz
Bit IK bis IK+7 ausgewertet,
um zu bestimmen, ob er den Wert 0x0F enthält. (Wenn nicht, wird angenommen,
daß das
Präfix
nicht Teil des Opcodes einer Anweisung, sondern ein traditionelles
Präfix
ist).
-
Folglich
vergleicht das AND-Gatter 516 die Anweisungsbit IK bis IK+7 mit dem
2-Byte-Escape-Opcode 0x0F
und erzeugt ein Signal ESC2B. Das Signal ESC2B wird gesetzt, wenn
die Anweisungsbit IK bis IK+7 den 2-Byte-Escape-Opcode
0x0F repräsentieren.
-
Zusätzlich wertet
das AND-Gatter 518 die Anweisungsbit IK bis
IK+7 aus, um zu bestimmen, ob die zweite
Hälfte
eines 3-Byte-Opcodes in dem Bit vorhanden ist. Eine solche Auswertung
ist nützlich,
falls der erste Satz Bit IN bis IN+7 den Wert 0x0F enthält. Das AND-Gatter 518 vergleicht
die Anweisungsbit IK bis IK+7 mit
der zweiten Hälfte
der 3-Byte-Escape-Opcodes und erzeugt ein Signal ESC3A. Das Signal
ESC3A wird gesetzt, wenn die Anweisungsbit IK bis
IK+7 den Wert 0x38, 0x39, 0x3A oder 0x3B
enthalten.
-
Auf
die obige Weise bestimmt die Präfix-
und Escape-Detektorschaltung 320, ob ein zweiter Satz Bit IK bis IK+7 eines
Anweisungs-Opcode einen der Escape-Opcode-Werte enthält. Wenn
der zweite Satz Bit IK bis IK+7 die
zweite Hälfte
eines Drei-Byte-Opcode-Werts enthält, kann die Anweisung einen
neue Typ-0-Anweisung 226 sein. Wenn der zweite Satz Bit
IK bis IK+7 jedoch
den Wert 0x0F enthält,
kann die Anweisung entweder eine erweiterte Typ-1-Anweisung 224 oder
eine neue Typ-1-Anweisung 228 sein. Folglich wird ein dritter
Satz Bit IL bis IL+7 ausgewertet,
um zu bestimmen, ob er die zweite Hälfte eines der Drei-Byte-Escape-Opcodes enthält. Das
heißt,
der dritte Satz Bit IL bis IL+7 wird
ausgewertet, um zu bestimmen, ob er die Werte 0x38, 0x39, 0x3A oder
0x3B enthält.
-
Folglich
zeigt 5, daß das AND-Gatter 519 die
Anweisungsbit LK bis LK+7 mit
dem zweiten Byte des 3-Byte-Escape-Opcodes 0x38-0x3B vergleicht
und ein Signal ESC3B erzeugt. Das Signal ESC3B wird gesetzt, wenn
die Anweisungsbit IL bis IL+7 das
zweite Byte eines beliebigen der Drei-Byte-Escape-Opcodes 0x0F38
bis 0x0F3B repräsentieren.
-
Wie
Fachleuten bekannt ist, können
andere Logikgatter verwendet werden, um das Vergleichen oder Decodieren
der Anweisungsbit IN bis IN+7,
IK bis IK+7, IL bis IL+7 durchzuführen.
-
Die
Decoderfreigabeschaltung 330 empfängt die Signale PRFX; ESC1,
ESC2A, ESC2B, ESC3A und ESC3B, um die Freigabesignale für die einzelnen
Decoder zu erzeugen. Die Decoderfreigabeschaltung 330 enthält ein NOR-Gatter 520 und
AND-Gatter 522, 526, 527, 528 und 529.
Für Fachleute
ist erkennbar, daß alle einzelnen
Decoder oder ein Teil davon zusammen in einer einzigen Einrichtung,
wie zum Beispiel einem programmierbaren Logikarray, implementiert
werden können.
-
Das
NOR-Gatter 520 setzt das EN1-Signal, wenn PRFX, ESC1 und
ESC2A alle negiert sind. Dieser Zustand entspricht der Bedingung,
daß die
Anweisungsbit IN bis IN+7 nicht
mit einem Präfix,
einem Floating-Point-Escape-Opcode und auch nicht mit einem 2-Byte-Escape-Opcode übereinstimmen.
Deshalb entsprechen die Anweisungsbit IN bis
IN+7 einem Opcode einer regulären Ein-Byte-Anweisung.
-
Das
AND-Gatter 522 setzt das EN2-Signal, wenn das PRFX-Signal
gesetzt und das ESC2B negiert ist. Das Setzen des EN2-Signals entspricht
der Bedingung, daß die
Anweisungsbit IN bis IN+7 mit
dem Präfix-Code übereinstimmen,
aber die Anweisungsbit IK bis IK+7 nicht
mit dem 2-Byte-Escape-Opcode übereinstimmen. Deshalb
entspricht diese Bedingung einem Opcode, der das Präfix als
Qualifizierer einer regulären
Anweisung verwendet.
-
Das
ESC1-Signal wird als das EN3-Signal verwendet. Dieses Signal wird
gesetzt, wenn die Anweisungsbit IN bis IN+7 mit dem Floating-Point-Escape-Opcode übereinstimmen.
Deshalb entspricht diese Bedingung einem Floating-Point-Opcode einer
regulären
Anweisung.
-
Das
AND-Gatter 528 setzt das EN4-Signal, wenn das ESC2A-Signal
gesetzt und das ESC3B-Signal negiert
ist. Das Setzen des EN4-Signals entspricht der Bedingung, daß die Anweisungsbit
IN bis IN+7 mit
dem 2-Byte-Escape-Opcode übereinstimmen
und die Anweisungsbit IL bis IL+7 nicht
mit der zweiten Hälfte
irgendwelcher der Drei-Byte-Escape-Opcodes übereinstimmen. Deshalb entspricht
diese Bedingung einem Opcode des erweiterten Anweisungstyps 0.
-
Das
AND-Gatter 526 setzt das EN5-Signal, wenn die Signale PRFX
und ESC2B gesetzt und das Signal ESC3B nicht gesetzt ist. Dieser
Zustand entspricht der Bedingung, daß die Anweisungsbit IN bis IN+7 mit dem
Präfixcode übereinstimmen
und die Anweisungsbit IK bis IK+7 mit
dem 2-Byte-Escape-Opcode übereinstimmen,
aber die Anweisungsbit IL bis IL+7 nicht
mit der zweiten Hälfte
irgendwelcher der Drei-Byte-Escape-Opcodes übereinstimmen.
-
Deshalb
entspricht diese Bedingung einem Opcode des erweiterten Anweisungstyps
1.
-
Das
AND-Gatter 527 setzt das EN6-Signal, wenn das ESC2A-Signal
und das ESC3B-Signal beide gesetzt sind. Das Setzen des EN6-Signals
entspricht der Bedingung, daß die
Anweisungsbit IN bis IN+7 mit
dem 2-Byte-Escape-Opcode übereinstimmen
und die Anweisungsbit IL bis IL+7 mit
der zweiten Hälfte
eines der Drei-Byte-Escape-Opcodes übereinstimmen. Deshalb entspricht
diese Bedingung einem Opcode des neuen Anweisungstyps 0.
-
Das
AND-Gatter 529 setzt das EN7-Signal, wenn die Signale PRFX,
ESC2B und ESC3B gesetzt sind. Das Setzen des EN7-Signals entspricht
der Bedingung, daß die
Anweisungsbit IN bis IN+7 mit
dem Präfixcode übereinstimmen
und die Anweisungsbit IK bis IK+7 mit
dem 2-Byte-Escape-Opcode übereinstimmen
und die Anweisungsbit IL bis IL+7 mit
der zweiten Hälfe
eines der Drei-Byte-Escape-Opcodes übereinstimmen. Deshalb entspricht
diese Bedingung einem Opcode des neuen Anweisungstyps 1.
-
Der
Opcode-Decoder 340 enthält
einen regulären
Ein-Byte-Decoder 530, einen regulären Präfixdecoder 532, einen
regulären
Escape-Decoder 534, einen Decoder 536 für den erweiterten
Anweisungstyp 0, eine Decoder 538 für den erweiterten Anweisungstyp
1, einen Decoder 440 für
den neuen Anweisungstyp 0 und einen Decoder 542 für den neuen
Anweisungstyp 1. Obwohl diese Decoder 530, 532, 534, 536, 538, 440, 542 in
separaten Blöcken
gezeigt sind, kann in der Praxis die Decodierung dieser Anweisungen
kombiniert werden.
-
6 ist ein Flußdiagramm
eines Verfahrens 600 zur Durchführung der Anweisungsdecodierung
für Anweisungen
eines in einem Anweisungssatz definierten Formats, wobei der Anweisungssatz
Anweisungen enthält,
die unter Verwendung von 3-Byte-Escape-Opcodes
codiert werden. Für
Fachleute ist erkennbar, daß die
in 6 dargestellten Verarbeitungsblöcke 602–636 nicht
in der gezeigten Reihenfolge durchgeführt werden müssen. Diese
Verarbeitungsblöcke 602–636 können in
einer anderen Reihenfolge durchgeführt werden. Zum Beispiel kann
die Präfix-Gültig-Bestimmung 602 nach
den Zwei-Byte-Escape-Opcode-Bestimmungen 604, 610 durchgeführt werden.
Als Alternative können
bestimmte oder alle der in 6 dargestellten
Verarbeitungsblöcke
gleichzeitig mit der Verarbeitung anderer Blöcke durchgeführt werden.
-
6 zeigt, daß das Verfahren 600 bei
START beginnt, und die Verarbeitung schreitet zum Block 602 voran.
In Block 602 bestimmt das Verfahren 600, ob das
erste Byte, die Anweisungsbit IN bis IN+7, mit dem Präfixcode 0x66 übereinstimmen.
Wenn nicht, schreitet die Verarbeitung zum Block 604 voran.
Andernfalls schreitet die Verarbeitung zum Block 610 voran.
-
Im
Block 610 bestimmt das Verfahren 600, ob das zweite
Byte der Anweisung, die Anweisungsbit IN bis
IN+7, mit einem 2-Byte-Escape-Opcode-Wert übereinstimmen.
Bei mindestens einer Ausführungsform
beträgt
der Wert des Zwei-Byte-Escape-Opcodes 0x0F. Wenn die Escape-Opcode-Prüfung 610 „false" ergibt, schreitet
die Verarbeitung zum Block 624 voran. Im Block 624 wurde
bestimmt, daß das
erste Byte, die Anweisungsbit IN bis IN+7, mit dem Präfixcode 0x66 übereinstimmen
(siehe Block 602), und daß das zweite Byte, die Anweisungsbit
IK bis IK+7, nicht
mit dem Zwei-Byte-Escape-Opcode übereinstimmen
(siehe Block 610). Folglich wird im Block 624 das
zweite Byte der Anweisung, die Anweisungsbit IK bis
IK+7, als der Opcode einer regulären Anweisung
mit einem Präfixqualifizierer
decodiert.
-
Wenn
die Escape-Opcode-Prüfung 610 „true" ergibt, schreitet
die Verarbeitung zum Block 628 voran, um zu bestimmen,
ob die Anweisung eine neue Typ-1-Anweisung ist. Im Block 628 bestimmt
das Verfahren, ob das dritte Byte der Anweisung, die Anweisungsbit
IL bis IL+7, mit
der zweiten Hälfte
eines Drei-Byte-Escape-Opcode-Werts übereinstimmen. Bei mindestens
einer Ausführungsform
lauten die Drei-Byte-Escape-Opcode-Werte 0x0F38, 0x0F39, 0x0F3A
und 0x0F3B. Folglich wird im Block 628 bestimmt, ob das
dritte Byte der Anweisung, die Anweisungsbit IL bis
IL+7, mit den Werten 0x038, 0x039, 0x03
oder 0x03B übereinstimmen. Wenn
nicht, schreitet die Verarbeitung zum Block 632 voran.
Wenn die Drei-Byte-Escape-Opcode-Prüfung 628 jedoch true
ergibt, schreitet die Verarbeitung zum Block 634 voran.
Im Block 634 wird das vierte Byte der Anweisung, die Anweisungsbyte
IM bis IM+7, als
der Opcode einer neuen Typ-1-Anweisung decodiert. Die Verarbeitung
endet dann.
-
Im
Block 632 wird das dritte Byte der Anweisung, die Anweisungsbit
IL bis IL+7, als
der Opcode einer erweiterten Typ-1-Anweisung mit dem Wert 0x66 in
dem erste Byte der Anweisung und dem Zwei-Byte-Escape-Opcode-Wert
0x0F in dem zweiten Byte der Anweisung decodiert. Die Verarbeitung
endet dann.
-
Im
Block 604 wird die Verarbeitung fortgesetzt, wenn im Block 602 bestimmt
wurde, daß das
erste Byte der Anweisung, die Anweisungsbit IK bis
IK+7, nicht mit dem Präfixwert 0x66 übereinstimmen.
Im Block 604 wird bestimmt, ob das erste Byte der Anweisung,
die Anweisungsbit IK bis IK+7,
mit dem Zwei-Byte-Escape-Wert übereinstimmt.
Wenn nicht, schreitet die Verarbeitung zum Block 606 voran.
Wenn jedoch die Zwei-Byte-Escape-Opcode-Auswertung 604 „true" ergibt, wird die
Verarbeitung im Block 620 fortgesetzt, um zu bestimmen, ob
die Anweisung eine neue Typ-0-Anweisung ist.
-
Im
Block 620 bestimmt das Verfahren, ob das zweite Byte der
Anweisung, die Anweisungsbit IK bis IK+7, mit der zweiten Hälfte eines Drei-Byte-Escape-Opcode-Werts übereinstimmen.
Bei mindestens einer Ausführungsform
lauten die Drei-Byte-Escape-Opcode-Werte 0x0F38, 0x0F39, 0x0F3A
und 0x0F3B. Folglich wird im Block 620 bestimmt, ob das
zweite Byte der Anweisung, die Anweisungsbit IK bis
IK+7, mit den Werten 0x38, 0x39, 0x3A oder
0x3B übereinstimmt.
Wenn nicht, schreitet die Verarbeitung zum Block 622 voran.
Wenn jedoch die Drei-Byte-Escape-Opcode-Prüfung 620 true ergibt,
schreitet die Verarbeitung zum Block 630 voran. Im Block 630 wird
das dritte Byte der Anweisung, die Anweisungsbyte IL bis
IL+7, als der Opcode einer neuen Typ-0-Anweisung
decodiert. Die Verarbeitung endet dann.
-
Wenn
die Drei-Byte-Escape-Opcode-Prüfung 620 „false" ergibt, schreitet
die Verarbeitung zum Block 622 voran. Im Block 622 wird
das dritte Byte der Anweisung, Anweisungsbyte IL bis
IL+7, als der Opcode einer erweiterten Typ-0-Anweisung
mit dem Präfixwert
0x66 in dem ersten Byte und dem Zwei-Byte-Opcode-Wert 0x0F in seinem
zweiten Byte decodiert.
-
Im
Block 606 wird die Verarbeitung fortgesetzt, wenn im Block 604 bestimmt
wurde, daß das
erste Byte der Anweisung, die Anweisungsbit IK bis
IK+7 nicht mit dem Zwei-Byte-Escape-Opcode-Wert übereinstimmt.
Im Block 606 bestimmt das Verfahren 600, ob das
erste Byte mit einem weiteren Escape-Opcode übereinstimmt (z.B. dem Floating-Point-Escape-Opcodes – 0xD8 bis
0xDF). Wenn nicht, schreitet die Verarbeitung zum Block 636 voran,
um das erste Byte als eine reguläre
Ein-Byte-Anweisung zu decodieren. Die Verarbeitung endet dann.
-
Wenn
jedoch die Anderer-Escape-Code-Auswertung 606 „true" ergibt, schreitet
die Verarbeitung zum Block 626 voran, in dem das zweite
Byte als der Opcode anderer regulärer Anweisungen (z.B. Floating-Point-Anweisungen)
decodiert wird. Die Verarbeitung endet dann.
-
7 zeigt ein Verfahren 700 zur
Bestimmung der Länge
einer Anweisung, die aus dem Speicher abgerufen wurde. Bei mindestens
einer Ausführungsform
wird das Verfahren 700 durch einen Anweisungslängendecoder
(wie z.B. 306 in 3)
durchgeführt.
-
7 zeigt, daß die Verarbeitung
bei START beginnt und zum Block 702 voranschreitet. Im
Block 702 wird bestimmt, ob das aktuelle Anweisungsbyte
ein Präfixbyte
ist. Bei einem ersten Durchgang des Verfahrens 700 ist
das aktuelle Byte das erste Byte einer Anweisung. Wenn im Block 702 bestimmt
wird, daß das
aktuelle Byte einen Präfixwert
enthält,
so wie er in dem Anweisungssatz definiert wird, dann wird das Präfix im Block 712 verarbeitet
und das nächste
Byte wird zur Verarbeitung abgerufen.
-
Die
Verarbeitung kehrt dann zum Block 702 zurück, um zu
bestimmen, ob das neue aktuelle Byte, das im Block 712 abgerufen
wurde, einen Präfixwert
enthält.
Auf diese Weise ermöglicht
das Verfahren 700 das Decodieren der Länge einer Anweisung, die mehrere
Präfixbyte
enthält.
Bei mindestens einer Ausführungsform
kann, wie oben erwähnt,
eine Anweisung bis zu vier Präfixbyte
enthalten.
-
Wenn
im Block 702 bestimmt wird, daß das aktuelle Byte der Anweisung
einen Präfixwert
enthält, schreitet
die Verarbeitung zum Block 704 voran. Im Block 704 wird
bestimmt, ob das aktuelle Byte der Anweisung einen Zwei-Byte-Escape-Opcode-Wert,
wie zum Beispiel 0x0F, enthält.
Wenn nicht, schreitet die Verarbeitung zum Block 714 voran,
der nachstehend ausführlicher
besprochen wird.
-
Wenn
im Block 704 bestimmt wird, daß das aktuelle Byte der Anweisung
den Zwei-Byte-Escape-Opcode-Wert
enthält,
kann die Anweisung entweder eine neue Typ-0- oder eine neue Typ-1-Anweisung
sein. Folglich wird im Block 705 das nächste Byte der Anweisung erhalten
und im Block 706 wird bestimmt, ob das neuerhaltene Byte
einen der 3-Byte-Escape-Code-Werte
enthält.
Wenn dies der Fall ist, wurde bestimmt, daß die Anweisung eine neue Typ-0- oder Typ-1-Anweisung
ist.
-
Um
die Länge
der neuen Typ-0- oder der neuen Typ-1-Anweisung zu bestimmen, wird
der Inhalt des modR/M-Felds 230 ausgewertet. Folglich wird
im Block 707 der Inhalt des modR/M-Bytes für den aktuellen
Anweisungscode abgerufen. Im Block 708 wird bestimmt, ob
der modR/M-Wert angibt, daß ein
SIB-Wert aus dem aktuellen Anweisungscode abgerufen werden soll.
Wenn dies der Fall ist, wird der gesamte Inhalt des SIB-Felds 240 (2) oder ein Teil davon abgerufen,
und die Verarbeitung schreitet zum Block 710 voran. Wenn
nicht, schreitet die Verarbeitung zum Block 710 voran.
Insbesondere ist es aufgrund des vereinfachten Längendecodierverfahrens (siehe
Block 710), das hier offengelegt wird, nicht notwendig,
den Inhalt des anweisungsspezifischen Opcode-Felds 225 (2) auszuwerten, wenn die
Länge einer
neuen Typ-0- oder neuen Typ-1-Anweisung decodiert wird. Folglich
wird kein solches Byte abgerufen und es wird also im Block 707 „übersprungen".
-
Im
Block 710 wird die Länge
von neuen Typ-1- und neuen Typ-0-Anweisungen bestimmt, um festzustellen,
wo die Anweisung beginnt und endet. Um die Länge der Anweisung zu bestimmen,
wertet Block 710 den Inhalt von mindestens drei Byte der
Anweisung aus. Natürlich
ist für
Fachleute erkennbar, daß mehr
oder weniger Byte auswertet werden können, um die Länge von
von neuen Typ-1- und neuen Typ-0-Anweisungen verschiedenen Anweisungen
zu bestimmen.
-
Im
Block 710 wird das erste, das zweite und das vierte Anweisungsbyte
ausgewertet, um die Länge einer
neuen Typ-0-Anweisung zu bestimmen. Zusätzlich werden mindestens bestimmte
Bit eines fünften
Anweisungsbyte ausgewertet, wenn ein SIB-Wert vorhanden ist. Das
heißt,
bei einer neuen Typ-0-Anweisung wertet Block 710 den Inhalt
des Drei-Byte-Escape-Opcode-Felds 118c (2), des modR/M-Felds (230, 2) und von 3 Bit des SIB-Felds
(240, 2) aus,
wenn ein Wert für
das SIB-Feld vorhanden ist. Die Länge wird folgendermaßen bestimmt:
Wenn
((Byte1 = 0x0F) AND (Byte2 == 0x38 oder 0x39 oder 0x3A oder 0x3B)
AND (Byte4 = modR/M-Byte hat keine Verschiebung und kein SIB erforderlich))
dann Instruction_length = 4.
-
Ansonsten
wenn ((Byte1 == 0x0f) AND (Byte2 == 0x38 oder 0x39 oder 0x3A oder
0x3B) AND (Byte4 = modR/M-Byte hat Verschiebung oder SIB erforderlich))
dann Anweisungs-Länge wird
auf der Basis des Werts des modR/M-Felds (230, 2) und des Werts von 3 Bit
in dem SIB-Feld (240, 2)
berechnet.
-
Folglich
muß der
Längendecodierblock 710 für eine neue
Typ-0-Anweisung nicht das dritte Opcode-Byte auswerten, um die Länge der
Anweisung zu bestimmen. Außerdem
empfängt
für jede
Opcode-Map die entsprechende Längenbestimmungslogik
denselben Satz fester Eingaben, um die Länge jeder Anweisung in der
jeweiligen Map auszuwerten. Zum Beispiel wertet für die 0x0F38-Opcode-Map
die Längenbestimmungslogik
das modR/M-Byte im Block 708 aus. Wenn der Wert in dem
modR/M-Byte angibt, daß kein
SIB-Byte in dem aktuellen Anweisungscode vorhanden ist, dann wird
die Anweisungslänge
ohne Auswertung eines SIB-Bytes decodiert 710.
-
Wenn
dagegen ein SIB-Wert vorhanden ist, dann werden ein oder mehrere
Bit in dem SIB-Feld 240 (2) ausgewertet, um die Länge des
Anweisungscodes zu bestimmen 710. Der Wert in dem anweisungsspezifischen
Opcode-Feld 225 (2)
wird nicht ausgewertet, um die Länge
einer Anweisung in der 0x0F38-Opcode-Map zu bestimmen. Auch wird
kein Eingangsterm außer
modR/M- und SIB-Werten (falls angegeben) für irgendeine Anweisung in der
Opcode-Map ausgewertet. Folglich wird ein fester Satz Eingangsterme
ausgewertet, um die Länge
einer Anweisung in der gegebenen Opcode-Map zu bestimmen, wobei
jede Eingabe für
die Bestimmung der Länge
jeder Anweisung in der Opcode-Map relevant ist.
-
Ein
bestimmter Eingabeterm ist für
die Bestimmung der Länge
eines Anweisungscodes „relevant", wenn, wenn der
Wert eines oder mehrerer anderer Eingabeterme gegeben ist, der bestimmte
Eingabeterm zur Bestimmung der Länge
des Anweisungscodes verwendet wird. Zum Beispiel ist der SIB-Wert
für jede
Anweisung in der 0x0F38-Opcode-Map relevant, weil für jede Anweisung
in der Map der SIB-Wert ausgewertet wird, um Länge abhängig von dem Wert des modR/M
zu bestimmen. Im Gegensatz dazu ist der Wert des anweisungsspezifischen
Opcodes 225 (2)
nicht für
die Bestimmung der Länge
irgendeiner Anweisung in der 0xF38-Opcode-Map relevant, weil er
nicht ausgewertet wird, um Länge
zu bestimmen (ungeachtet des Werts der anderen Eingabeterme). Ähnlich sind
andere Eingabeterme, wie zum Beispiel der Wert der Verschiebungsfelds 250 (2) für die Bestimmung der Anweisungslänge nicht
relevant, wenn sie unter keiner Kombination von Werten der anderen
relevanten Eingabeterme zur Auswertung der Anweisungslänge verwendet
werden würden.
-
Auf
diese Weise wird die Decodierlogik für einen neuen Typ 0 relativ
simpel gehalten. Bei mindestens einer Ausführungsform werden keine zusätzlichen
Byte ausgewertet, um zu bestimmen, welche Längendecodierlogik im Vergleich
zu der Anzahl von Byte, die ausgewertet werden, um zu bestimmen,
welche Längendecodierlogik
für eine
erweiterte Typ-0-Anweisung
verwendet werden soll, für
eine neue Typ-0-Anweisung verwendet werden soll. Diese Einfachheit
wird für
alle Anweisungen in den neuen Opcode-Maps aufrechterhalten, weil
dasselbe Verfahren angewandt wird, um die Länge jeder Anweisung in einer
gegebenen Opcode-Map zu bestimmen.
-
Eine
Opcode-Map soll hier die Gruppe von Anweisungen bedeuten, die durch
eine bestimmte Kombination von Werten in den Anweisungsbyte spezifiziert
sind. Zum Beispiel werden alle Anweisungen, die durch 0F:38:1b"xxxxxxxx" und 66:0F:38:1b"xxxxxxxx" spezifiziert werden,
als Teil der Opcode-Map für
den 0F:38-3-Byte-Escape-Opcode-Wert betrachtet. Ähnlich soll die 0F:39-Opcode-Map
die Gruppe von Anweisungen bedeuten, die durch 0F:39:1b"xxxxxxxx" und 66:0F:39:1b"xxxxxxxx" spezifiziert wird;
die 0F:3A-Opcode-Map soll die Gruppe von Anweisungen bedeuten, die
durch 0F:3A:1b"xxxxxxxx" und 66:0F:3A:1b"xxxxxxxx" spezifiziert wird,
und die 0F:3B-Opcode-Map soll die Gruppe von Anweisungen bedeuten,
wie durch 0F:3B:1b"xxxxxxxx" und 66:0F:3B:1b"xxxxxxxx" spezifiziert wird,
wobei 1b"xxxxxxxx" ein definierter
Opcode für
die spezifierte Opcode-Map
ist.
-
Im
Block 710 werden das zweite, das dritte und das fünfte Anweisungsbyte
ausgewertet, um die Länge einer
neuen Typ-1-Anweisung zu bestimmen. Zusätzlich werden mindestens bestimmte
Bit eines sechsten Anweisungsbytes ausgewertet, wenn ein SIB-Wert
vorhanden ist. Ähnlich
wie bei der Verarbeitung für
neue Typ-0-Anweisungen, wertet Block 622 die zwei Byte,
die den 3-Byte-Escape-Opcode-Feldwert (118c, 1) halten, das modR/M-Feld
(230, 2) und
3 Bit des SIB-Felds (240, 2)
aus, wenn ein Wert für
das SIB-Feld vorhanden ist. Die Länge wird folgendermaßen bestimmt:
Wenn
((Byte2 == 0x0F) AND (Byte3 == 0x38 oder 0x39 oder 0x3A oder 0x3B)
AND (Byte5 = modR/M-Byte hat keine Verschiebung und kein SIB erforderlich)
dann Instruction_length = 4.
-
Ansonsten
wenn ((Byte1 == 0x0F) AND (Byte2 == 0x38 oder 0x39 oder 0x3A oder
0x3B) AND (Byte4 = modR/M-Byte hat Verschiebung oder SIB erforderlich))
dann Anweisungs-Länge wird
auf der Basis des Werts des modR/M-Felds (230, 2) und des Werts von drei
Bit in dem SIB-Feld (240, 2)
berechnet.
-
Folglich
muß der
Längendecodierblock 710 für eine neue
Typ-1-Anweisung nicht das dritte Opcode-Byte auswerten, um die Länge der
Anweisung zu bestimmen. Auf diese Weise wird Decodierlogik für eine neue
Typ-1-Anweisung relativ simpel gehalten. Bei mindestens einer Ausführungsform
werden keine zusätzlichen
Byte ausgewertet, um zu bestimmen, welche Längendecodierlogik im Vergleich
zu der Anzahl von Byte, die ausgewertet werden, um zu bestimmen,
welche Längendecodierlogik
für eine
erweiterte Typ-1-Anweisung verwendet werden soll, für eine neue
Typ-1-Anweisung verwendet werden soll.
-
Wie
bereits erwähnt,
wird die Einfachheit der Längendecodierverarbeitung 710 für neue Typ-0- und Typ-1-Anweisungen
erhalten, indem die Opcode-Maps und ihre entsprechende Längebestimmungslogik
so definiert werden, daß eine
einzige Festeingabe-Längenbestimmung
verwendet wird, um die Länge
jeder Anweisung in der jeweiligen Opcode-Map zu bestimmen. Die Länge jeder
Anweisung in einer bestimmten 3-Byte-Opcode-Map wird somit durch dasselbe
Verfahren wie bei allen anderen Anweisungen mit diesem 3-Byte-Opcode-Wert
bestimmt. Das heißt,
jeder der 3-Byte-Opcode-Werte – 0x0F38,
0x0F39, 0x0F3A, 0x0F3B – ist
mit einer Opcode-Map assoziiert, wobei die Länge dieser Anweisung der Opcode-Map
durch dasselbe Festeingabeverfahren bestimmt wird.
-
Zum
Beispiel werden bei mindestens einer Ausführungsform alle Anweisungen,
die mit dem Drei-Byte-Escape-Opcode-Wert 0x0F38 (siehe die obige
Tabelle 1) durch Auswerten derselben vier Byte der Anweisung bestimmt.
Diese vier Byte enthalten die beiden Byte, die den Drei-Byte-Escape-Opcode-Wert (0x0F38)
enthalten, das Ein-Byte-Opcode-Feld, das den Opcode-Wert hält (wie
in der obigen Tabelle 1 dargestellt) und das Ein-Byte-modR/M-Feld.
Abhängig
von dem Wert in dem modR/M-Feld können außerdem zusätzlich drei Bit des SIB-Felds ausgewertet
werden, um die Anweisungslänge
einer Anweisung in der 0x0F38-Opcode- Maps zu bestimmen. In keiner Anweisung
in der 0x0F38-Opcode-Map sind unmittelbare Daten enthalten.
-
Ähnlich werden
bei mindestens einer Ausführungsform
alle Anweisungen, die mit den Drei-Byte-Escape-Opcode-Wert 0x0F3A (siehe
die obige Tabelle 1) assoziiert sind, durch dasselbe Verfahren bestimmt.
Das Verfahren wertet die beiden Daten aus, die den Drei-Byte-Escape-Opcode-Wert (0x0F38)
enthalten, das Ein-Byte-Opcode-Feld, das den Opcode-Wert hält (wie
in der obigen Tabelle 1 dargestellt), das Ein-Byte-modR/M-Feld und
ein Ein-Byte-Feld, das unmittelbare Daten enthält. Abhängig von dem Wert in dem modR/M-Feld
können
außerdem
zusätzlich
drei Bit des SIB-Felds ausgewertet werden, um Anweisungslänge einer
Anweisung in der 0x0F38-Opcode-Map zu bestimmen.
-
7 zeigt, daß wenn im
Block 706 bestimmt wird, daß das Byte einer Anweisung,
das einem Byte folgt, das den Zwei-Byte-Escape-Opcode-Wert 0x0F
enthält,
nicht einem der Drei-Byte-Escape-Opcode-Werte enthält, schreitet
die Verarbeitung zum Block 722 voran.
-
Die
Blöcke 714, 716, 718, 719, 720 und
Blöcke 722, 724, 726, 727 und 728 führen jeweils
eine ähnliche
Verarbeitung durch. Der erstere Satz Blöcke wird durchgeführt, wenn
Block 704 bestimmt, daß die
Anweisung nicht den Zwei-Byte-Escape-Opcode-Wert 0x0F enthält. Die
Blöcke 722, 724, 726, 727 und 728 werden dagegen
durchgeführt,
wenn im Block 706 bestimmt wird, daß, obwohl das vorherige Byte
den Zwei-Byte-Escape-Opcode-Wert 0x0F enthält, das aktuelle Byte nicht
einen Drei-Byte-Escape-Opcode-Wert enthält.
-
Für jeden
Fall wird in den Blöcken 714 bzw. 722 bestimmt,
ob die aktuelle Anweisung einen modR/M-Wert enthält. Wenn dies der Fall ist,
schreitet die Verarbeitung zu den Blöcken 718 bzw. 726 voran, in
denen der modR/M-Wert erhalten wird. Wenn der modR/M-Wert angibt,
daß ein
SIB-Wert abgerufen werden soll, wird im Block 719 bzw. 727 der
SIB-Wert abgerufen. Die Länge
der Anweisung wird in den Blöcken 720 bzw. 728 bestimmt,
wobei der modR/M-Wert und gegebenenfalls ein oder mehrere Bit aus
dem SIB-Feld verwendet werden. Die Verarbeitung endet dann.
-
Wenn
die aktuelle Anweisung einen modR/M-Wert enthält, schreitet die Verarbeitung
zu den Blöcken 716 bzw. 724 voran,
in denen die Länge
der Anweisung decodiert wird, ohne einen modR/M-Wert zu berücksichtigen.
Die Verarbeitung endet dann.
-
Wie
die obige Besprechung zeigt, liefern hier beschriebene Ausführungsformen
der Vorrichtung und des Verfahrens einen effizienten Mechanismus
zum Decodieren eines neuen Anweisungssatzes unter Verwendung von
Drei-Byte-Escape-Opcodes zusammen mit einem exisitierenden Präfix-Wert.
Der neue Anweisungssatz stelle eine Vergrößerung in Bezug auf den existierenden
Anweisungssatz dar, ohne den Anweisungsdecodierer unmäßig zu verkomplizieren.
-
Die
obige Besprechung beschreibt die Definition einer Opcode-Map für einen
Prozessor mit einem Anweisungssatz variabler Länge, für den jede Anweisung in der
Opcode-Map durch Verwendung von Festeingabe-Längenbestimmungslogik längendecodiert
werden kann. Die obige Beschreibung wurde im Hinblick auf ein einziges
Verfahren zur Bestimmung der Länge
von Anweisungen in einer 3-Byte-Escape-Opcode-Map besprochen. Bei
einer alternative Ausführungsform
kann jedoch eine Ein-Byte-Escape-Opcode-Map definiert werden, so
daß eine
einzige Festeingabe-Längenbestimmungslogik
zur Decodierung der Länge
für jede
Anweisung in der Opcode-Map angewandt werden kann. Für solche
Anweisungen folgt ein anweisungsspezifischer Opcode einem Escape-Byte
mit einem bestimmten Wert, wie zum Beispiel 0xD6 oder 0xF1. Die
Länge jeder
Anweisung in einer solchen Ein-Byte-Escape-Opcode-Map kann unter
Verwendung derselben Festeingabe-Längenbestimmungslogik
decodiert werden.
-
Ähnlich kann
bei einer alternativen Ausführungsform
die gesamte 2-Byte-Escape-Opcode-Map
oder ein Teil davon auch wie hier beschrieben definiert werden.
Bei einer solchen Ausführungsform
kann dieselbe Festeingabe-Längenbestimmungslogik
zur Decodierung der Länge
jeder Anweisung in der neuen 2-Byte-Escape-Opcode-Map verwendet
werden. Zum Beispiel kann ein Block von Anweisungen innerhalb der Zwei-Byte-Escape-Opcode-Map
so definiert werden, daß eine
einzige Festeingabe-Längenbestimmungslogik zur
Bestimmung der Länge
jeder Anweisung in einer solchen Opcode-Map verwendet werden kann.
Bei mindestens einer Ausführungsform
werden die neuen Escape-Code-Maps so definiert, daß ein anweisungsspezifischer
Opcode einem Escape-Code folgt. Der Escape-Code kann zum Beispiel
beliebiger oder alles der folgenden sein: 0x0F3C bis 0x0F3Y.
-
Obwohl
konkrete Ausführungsformen
der vorliegenden Erfindung gezeigt und beschrieben wurden, ist für Fachleute
offensichtlich, daß Änderungen
und Modifikationen vorgenommen werden können, ohne von der vorliegenden
Erfindung in ihren allgemeineren Aspekten abzuweichen. Die angefügten Ansprüche sollen
in ihrem Schutzumfang alle solchen Änderungen und Modifikationen,
die in den wahren Schutzumfang der vorliegenden Erfindung fallen,
abdecken.