DE102004030034A1 - Anweisungssatzerweiterung mit einem 3-Byte-Escape-Opcode - Google Patents

Anweisungssatzerweiterung mit einem 3-Byte-Escape-Opcode Download PDF

Info

Publication number
DE102004030034A1
DE102004030034A1 DE102004030034A DE102004030034A DE102004030034A1 DE 102004030034 A1 DE102004030034 A1 DE 102004030034A1 DE 102004030034 A DE102004030034 A DE 102004030034A DE 102004030034 A DE102004030034 A DE 102004030034A DE 102004030034 A1 DE102004030034 A1 DE 102004030034A1
Authority
DE
Germany
Prior art keywords
instruction
escape
field
opcode
code
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Withdrawn
Application number
DE102004030034A
Other languages
English (en)
Inventor
James Shingle Springs Coke
Peter Folsom Ruscito
Masood Orangevale Tahir
David Folsom Jackson
Ves Folsom Naydenov
Dion Hillsboro Rodgers
Bret Hillsboro Toll
Frank Hillsboro Binns
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of DE102004030034A1 publication Critical patent/DE102004030034A1/de
Withdrawn legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/30149Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30025Format conversion instructions, e.g. Floating-Point to Integer, decimal conversion
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30185Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode

Abstract

Es werden ein Verfahren, eine Vorrichtung und ein System zur Decodierung einer Anweisung in einem Anweisungssatz variabler Länge offengelegt. Die Anweisung ist eine von einem Satz neuer Arten von Anweisungen, der einen neuen Escape-Code-Wert verwendet, dessen Länge zwei Byte beträgt, um anzuzeigen, daß ein drittes Opcode-Byte den anweisungsspezifischen Opcode für eine neue Anweisung enthält. Die neuen Anweisungen sind so definiert, daß die Länge jeder Anweisung in der Opcode-Map für einen der neuen Escape-Opcode-Werte durch Verwendung desselben Satzes von Eingaben bestimmt werden kann, wobei jede der Eingaben für die Bestimmung der Menge jeder Anweisung in der neuen Opcode-Map relevant ist. Bei mindestens einer Ausführungsform wird die Länge einer der neuen Anweisungen bestimmt, ohne den anweisungsspezifischen Opcode auszuwerten.

Description

  • 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.
  • Figure 00100001
  • Figure 00110001
  • Figure 00120001
  • Figure 00130001
  • Figure 00140001
  • 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.

Claims (83)

  1. Verfahren mit den folgenden Schritten: Bestimmen, ob ein Anweisungscode eines Anweisungssatzes variabler Länge einen Escape-Opcode-Wert enthält; wenn der Anweisungcode den Escape-Opcode-Wert enthält, Bestimmen der Länge des Anweisungscodes, ausschließlich des Auswertens eines anweisungsspezifischen Opcode-Werts in dem Anweisungscode.
  2. Verfahren nach Anspruch 1, weiterhin mit dem folgenden Schritt: Ausführen einer Operation als Reaktion auf einen Wert in dem anweisungsspezifischen Opcode-Felds.
  3. Verfahren nach Anspruch 1, weiterhin mit den folgenden Schritten: Bestimmen, ob der Anweisungscode einen Präfixcode enthält; und wenn (der Anweisungscode den Präfixcode enthält und der Anweisungscode den Escape-Opcode enthält) Erzeugen, als Reaktion auf den Anweisungscode, eines ersten decodierten Anweisungscodes.
  4. Verfahren nach Anspruch 3, weiterhin mit dem folgenden Schritt: wenn (der Anweisungscode nicht den Präfixcode enthält und der Anweisungscode den Escape-Opcode enthält), Erzeugen, als Reaktion auf den Anweisungscode, eines zweiten decodierten Anweisungscodes.
  5. Verfahren nach Anspruch 3, wobei der Präfixcode 0x66 ist.
  6. Verfahren nach Anspruch 1, wobei der Escape-Opcode einer von mehreren Escape-Opcode-Werten, die für einen Anweisungssatz definierten, ist.
  7. Verfahren nach Anspruch 6, wobei die mehreren Escape-Opcode-Werte 0x0F38, 0x0F39, 0x0F3A and 0x0FB umfassen.
  8. Verfahren nach Anspruch 3, wobei der erste decodierte Anweisungscode mindestens ein Register erweiterter Länge angibt.
  9. Verfahren nach Anspruch 4, wobei der zweite decodierte Anweisungscode mindestens ein Register regulärer Länge angibt.
  10. Vorrichtung, umfassend: einen Escape-Detektor zur Bestimmung, ob ein Anweisungscode einen Escape-Opcode-Wert enthält; und einen Anweisungslängendecoder zur Bestimmung der Länge des Anweisungscodes; wobei, wenn der Anweisungscode den Escape-Opcode-Wert enthält, der Anweisungslängendecoder der Bestimmung der Länge des Anweisungscodes, ausschließlich des Auswertens des anweisungsspezifischen Opcodes, dient.
  11. Vorrichtung nach Anspruch 10, die weiterhin folgendes umfaßt: einen Opcode-Decoder, um als Reaktion auf den Inhalt des anwendungsspezifischen Opcode-Felds ein Steuersignal zu erzeugen, das eine Anweisung repräsentiert.
  12. Vorrichtung nach Anspruch 10, die weiterhin folgendes umfaßt: einen Präfix-Detektor zur Bestimmung, ob der Anweisungscode einen Präfixcode enthält.
  13. Vorrichtung nach Anspruch 12, die weiterhin folgendes umfaßt: einen Opcode-Decoder zum Erzeugen eines ersten decodierten Anweisungscodes als Reaktion auf den Inhalt des anweisungsspezifischen Opcode-Felds, wenn (der Anweisungscode den Präfixcode enthält und der Anweisungscode den Escape-Opcode enthält).
  14. Vorrichtung nach Anspruch 13, wobei: der Opcode-Decoder weiterhin einen zweiten decodierten Anweisungscode als Reaktion auf den Inhalt des anweisungsspezifischen Opcode-Felds übersetzt, wenn (der Anweisungscode den Präfixcode nicht enthält und der Anweisungscode den Escape-Opcode enthält).
  15. Vorrichtung nach Anspruch 12, wobei der Präfixcode 0x66 ist.
  16. Vorrichtung nach Anspruch 10, wobei der Escape-Opcode einer von mehreren für einen Anweisungssatz Escape-Opcode-Werten ist.
  17. Vorrichtung nach Anspruch 16, wobei die mehreren Escape-Opcode-Werte 0x0F38, 0x0F39, 0x0F3A und 0x0F3B umfassen.
  18. Vorrichtung nach Anspruch 13, wobei der erste decodierte Anweisungscode mindestens ein Register erweiterter Länge angibt.
  19. Vorrichtung nach Anspruch 14, wobei der zweite decodierte Anweisungscode mindestens ein Register regulärer Länge angibt.
  20. System, umfassend: einen Speicher zum Speichern eines Anweisungscodes mit einem anweisungsspezifischen Opcode und einem Escape-Code, wobei der Escape-Code einen mit einem zweiten Byte-Wert zusammenhängenden ersten Byte-Wert enthält, wobei der anweisungsspezifische Opcode in Bezug auf den Escape-Opcode zusammenhängend ist; Abruflogik zum Abrufen des Anweisungscodes aus dem Speicher; und eine Decodiereinheit zum Erzeugen eines oder mehrerer Steuersignale als Reaktion auf den abgerufenen Anweisungscode.
  21. System nach Anspruch 20, wobei die Decodereinheit weiterhin Längenbestimmungslogik zum Empfangen eines festen Satzes von Eingaben enthält; wobei jede Eingabe in den festen Satz von Eingaben für die Bestimmung der Länge jedes der mehreren Anweisungscodes relevant ist; wobei jeder der mehreren Anweisungscodes den Escape-Code-Wert enthält.
  22. System nach Anspruch 20, weiterhin umfassend: einen Escape-Detektor zur Bestimmung, ob der Escape-Code einer von mehreren vorbestimmten Escape-Code-Werten ist.
  23. System nach Anspruch 22, wobei die mehreren vorbestimmten Escape-Code-Werte 0x0F38, 0x0F39, 0x0F3A und 0x0F3B umfassen.
  24. System nach Anspruch 20, weiterhin umfassend: einen Präfix-Detektor zur Bestimmung, ob der erste Anweisungscode einen Präfixwert enthält.
  25. System nach Anspruch 21, wobei der erste Satz von Eingaben den Inhalt eines modR/M-Felds enthält.
  26. System nach Anspruch 21, wobei der feste Satz von Eingaben mindestens einen Teil des Inhalts eines SIB-Felds enthält.
  27. System nach Anspruch 20, wobei die Decodereinheit weiterhin einen Längendecoder umfaßt, um die Länge der Anweisung auf der Basis einer Teilmenge des Anweisungscodes zu bestimmen, wobei die Teilmenge den anweisungsspezifischen Opcode ausschließt.
  28. System nach Anspruch 27, wobei die Teilmenge die ersten und zweiten Byte-Werte des Escape-Codes und einen Adressierungsformwert enthält.
  29. System nach Anspruch 28, wobei die Teilmenge weiterhin einen Teil des Inhalts eines optionalen Basisfelds enthält.
  30. System nach Anspruch 20, wobei die Decodereinheit weiterhin einen Opcode-Decoder umfaßt, um als Reaktion auf den anweisungsspezifischen Opcode das eine oder die mehreren Steuersignale zu erzeugen, wobei der Inhalt des anweisungsspezifischen Opcodes eine Operation spezifiziert.
  31. System nach Anspruch 20, weiterhin umfassend: Ausführungslogik zur Durchführung einer Operation als Reaktion auf die Steuersignale.
  32. System nach Anspruch 20, wobei der Anweisungscode weiterhin einen Präfixwert enthält.
  33. Verfahren mit den folgenden Schritten: Abrufen eines Anweisungscodes eines Anweisungsformats variabler Länge aus den Speicher, wobei das Anweisungsformat ein Escape-Feld mit mehreren Byte-Elementen, darunter ein erstes Byte-Element und ein zweites Byte-Element, enthält, wobei das Anweisungsformat weiterhin ein Adressierungsformfeld und ein anweisungsspezifisches Opcode-Feld zwischen dem Escape-Feld und dem Adressierungsformfeld enthält; und Einleiten einer Operation als Reaktion auf einen Wert in dem anweisungsspezifischen Opcode.
  34. Verfahren nach Anspruch 33, wobei das Einleiten einer Operation weiterhin das Erzeugen eines Steuersignals auf der mindestens teilweisen Basis des Werts des anweisungsspezifischen Opcodes umfaßt.
  35. Verfahren nach Anspruch 33, wobei das Einleiten einer Operation weiterhin das Einleiten einer Operation an gepackten Daten umfaßt.
  36. Verfahren nach Anspruch 33, wobei weiterhin: das Bestimmen der Länge des Anweisungscodes weiterhin umfaßt, die Längenbestimmung völlig auf den Inhalt des Escape-Felds, des Adressierungformfelds und eines Präfixfeldes in dem Anweisungscode zu basieren.
  37. Verfahren nach Anspruch 33, weithin mit dem folgenden Schritt: Bestimmen der Länge des Anweisungcodes, wobei die Längenbestimmung völlig auf den Inhalt des Escape-Felds und des Adressierungsformfelds basiert.
  38. Verfahren nach Anspruch 33, weiterhin mit dem folgenden Schritt: Bestimmen der Länge des Anweisungscodes, wobei die Längenbestimmung völlig auf den Inhalt des Escape-Felds, des Adressierungsformfelds und eines Teils des Inhalts des optionalen Basisfelds basiert; wobei das Anweisungsformat weiterhin das optionale Basisfeld enthält.
  39. Vorrichtung, umfassend: Einen Decoder zum Erzeugen eines Steuersignals als Reaktion auf einen Anweisungscode eines Anweisungsformats variabler Länge, wobei der Anweisungscode ein Escape-Feld mit mehreren Byte-Elementen, darunter mindestens ein erstes und ein zweites Byte-Element; ein Adressierungsformfeld und ein anweisungsspezifisches Opcode-Feld zwischen dem Escape-Feld und dem Adressierungsmodusfeld umfaßt; und eine Ausführungseinheit zur Durchführung einer Operation als Reaktion auf das Steuersignal.
  40. Vorrichtung nach Anspruch 39, wobei der Inhalt des Escape-Felds eine Begrenzung bezüglich der Länge des Anweisungscodes angibt.
  41. Vorrichtung nach Anspruch 39, wobei die Ausführungseinheit für ein shuffle-gepackter Byte ausgelegt ist, wenn der Inhalt des Escape-Felds der hexadezimale Wert „0F38" ist; und der Inhalt des anweisungsspezifischen Opcode-Felds der hexadezimale Wert „00" ist.
  42. Vorrichtung nach Anspruch 39, wobei die Ausführungseinheit eine Addition horizontal gepackter Wort-Längen-Zahlen reagierend durchführen soll, wenn der Inhalt des Escape-Felds der hexadezimale Wert „0F38" ist; und der Inhalt des anweisungsspezifischen Opcode-Felds der hexadezimale Wert „01" ist.
  43. Vorrichtung nach Anspruch 39, wobei die Ausführungseinheit eine Addition horizontal gepackter Doppelwort-Längen-Zahlen durchführen soll, wenn der Inhalt des Escape-Felds der hexadezimale Wert „0F38" ist; und der Inhalt des anweisungsspezifischen Opcode-Felds der hexadezimale Wert „02" ist.
  44. Vorrichtung nach Anspruch 39, wobei die Ausführungseinheit eine Addition horizontal gepackter Zahlen mit Sättigung durchführen soll, wenn der Inhalt des Escape-Felds der hexadezimale Wert „0F38" ist; und der Inhalt des anweisungsspezifischen Opcode-Felds der hexadezimale Wert „03" ist.
  45. Vorrichtung nach Anspruch 39, wobei die Ausführungseinheit ferner ein Multiplizieren und Addieren gepackter vorzeichenbehafteter und vorzeichenloser Zahlen vornehmen soll, wenn der Inhalt des Escape-Felds der hexadezimale Wert „0F38" ist; und der Inhalt des anweisungsspezifischen Opcode-Felds der hexadezimale Wert „04" ist.
  46. Vorrichtung nach Anspruch 39, wobei die Ausführungseinheit eine Subtraktion horizontal gepackter vorzeichenbehafteter Wörter durchführen soll, wenn der Inhalt des Escape-Felds der hexadezimale Wert „0F38" ist; und der Inhalt des anweisungsspezifischen Opcode-Felds der hexadezimale Wert „05" ist.
  47. Vorrichtung nach Anspruch 39, wobei die Ausführungseinheit eine Subtraktion horizontal gepackter vorzeichenbehafteter Doppelwörter vornehmen soll, wenn der Inhalt des Escape-Felds der hexadezimale Wert „0F38" ist; und der Inhalt des anweisungsspezifischen Opcode-Felds der hexadezimale Wert „06" ist.
  48. Vorrichtung nach Anspruch 39, wobei die Ausführungseinheit eine Subtraktion horizontal gepackter vorzeichenbehafteter Wörter durchführen soll, wenn der Inhalt des Escape-Felds der hexadezimale Wert „0F38" ist; und der Inhalt des anweisungsspezifischen Opcode-Felds der hexadezimale Wert „07" ist.
  49. Vorrichtung nach Anspruch 39, wobei die Ausführungseinheit das Vorzeichen gepackter vorzeichenbehafteter Byte bestimmen soll, wenn der Inhalt des Escape-Felds der hexadezimale Wert „0F38" ist; und der Inhalt des anweisungsspezifischen Opcode-Felds der hexadezimale Wert „08" ist.
  50. Vorrichtung nach Anspruch 39, wobei die Ausführungseinheit das Vorzeichen gepackter vorzeichenbehafteter Wörter bestimmen soll, wenn der Inhalt des Escape-Felds der hexadezimale Wert „0F38" ist; und der Inhalt des anweisungsspezifischen Opcode-Felds der hexadezimale Wert „09" ist.
  51. Vorrichtung nach Anspruch 39, wobei die Ausführungseinheit das Vorzeichen gepackter vorzeichenbehafteter Doppelwörter bestimmen soll, wenn der Inhalt des Escape-Felds der hexadezimale Wert „0F38" ist; und der Inhalt des anweisungsspezifischen Opcode-Felds der hexadezimale Wert „0A" ist.
  52. Vorrichtung nach Anspruch 39, wobei die Ausführungseinheit ein gepacktes Multiplizier-High mit Rundung und Skalierung durchführen soll, wenn der Inhalt des Escape-Felds der hexadezimale Wert „0F38" ist; und der Inhalt des anweisungsspezifischen Opcode-Felds der hexadezimale Wert „0B" ist.
  53. Vorrichtung aus Anspruch 39, wobei die Ausführungseinheit den Absolutwert für einen gepackten Byte-Operanden bestimmen soll, wenn der Inhalt des Escape-Felds der hexadezimale Wert „0F38" ist; und der Inhalt des anweisungsspezifischen Opcode-Felds der hexadezimale Wert „1 C" ist.
  54. Vorrichtung nach Anspruch 39, wobei die Ausführungseinheit den Absolutwert für einen gepackten Wortoperanden bestimmen soll, wenn der Inhalt des Escape-Felds der hexadezimale Wert „0F38" ist; und der Inhalt des anweisungsspezifischen Opcode-Felds der hexadezimale Wert „1D" ist.
  55. Vorrichtung nach Anspruch 39, wobei die Ausführungseinheit den Absolutwert für einen gepackten Doppelwort-Operanden bestimmen soll, wenn der Inhalt des Escape-Felds der hexadezimale Wert „0F38" ist; und der Inhalt des anweisungsspezifischen Opcode-Felds der hexadezimale Wert „1E" ist.
  56. Vorrichtung nach Anspruch 39, wobei die Ausführungseinheit einen gepackten Operanden nach rechts schieben und zusammenführen soll, wenn der Inhalt des Escape-Felds der hexadezimale Wert „0F3A" ist; und der Inhalt des anweisungsspezifischen Opcode-Felds der hexadezimale Wert „0F" ist.
  57. Maschinenzugängliches Medium, das einen Prozessorentwurf speichert, wobei der Prozessor folgendes umfaßt: Abruflogik zum Abrufen eines Anweisungscodes eines Anweisungssatzes variabler Länge, wobei der Anweisungscode einen Mehr-Byte-Excape-Code-Wert neben einem anweisungsspezifischen Opcode-Wert enthält; und eine Decodiereinheit zum Erzeugen eines oder mehrerer Steuersignale als Reaktion auf den abgerufenen Anweisungscode.
  58. Maschinenzugängliches Medium nach Anspruch 57, wobei der Prozessor weiterhin folgendes umfaßt: einen Längendecoder zur Bestimmung der Länge des Anweisungscodes vollständig auf der Basis einer Auswertung einer Teilmenge der Bit in dem Anweisungscode, wobei die Teilmenge von Bit den anweisungsspezifischen Opcode-Wert ausschließt.
  59. Maschinenzugängliches Medium nach Anspruch 57, wobei der Prozessor weiterhin folgendes umfaßt: Ausführungslogik zur Durchführung einer Operation als Reaktion auf die Steuersignale.
  60. Maschinenzugängliches Medium nach Anspruch 59, wobei die Ausführungslogik weiterhin die Operation an gepackten Daten durchführen soll
  61. Maschinenzugängliches Medium nach Anspruch 57, wobei die Decodiereinheit weiterhin ein erstes Steuersignal erzeugen soll, wenn ein Präfixfeld des Anweisungscodes einen vorbestimmten Wert hält.
  62. Maschinenzugängliches Medium nach Anspruch 61, wobei der vorbestimmte Wert 0x66 ist.
  63. Maschinenzugängliches Medium nach Anspruch 61, wobei die Decodiereinheit weiterhin ein zweites Steuersignal erzeugen soll, wenn das Präfixfeld nicht den vorbestimmten Wert hält.
  64. Vorrichtung, umfassend: ein Mittel zum Abrufen eines Anweisungscodes eines Anweisungsformats variabler Länge aus dem Speicher, wobei das Anweisungsformat ein Escape-Feld mit mehreren Byte-Elementen, darunter ein erstes Byte-Element und ein zweites Byte-Element, enthält, wobei das Anweisungsformat weiterhin ein Adressierungsformfeld und ein anweisungsspezifisches Opcode-Feld zwischen dem Escape-Feld und dem Adressierungsformfeld enthält; und ein Mittel zum Einleiten einer Operation als Reaktion auf einen Wert in dem anweisungsspezifischen Opcode.
  65. Vorrichtung nach Anspruch 64, wobei das Mittel zum Einleiten einer Operation weiterhin ein Mittel zum Erzeugen eines Steuersignals auf dem mindestens teilweisen Basis des Werts des anweisungsspezifischen Opcodes umfaßt.
  66. Vorrichtung nach Anspruch 64, wobei das Mittel zum Einleiten einer Operation weiterhin ein Mittel zum Einleiten einer Operation an gepackten Daten umfaßt.
  67. Vorrichtung nach Anspruch 64, wobei das Mittel zum Einleiten einer Operation weiterhin ein Mittel zum Einleiten einer Additionsoperation an gepackten Daten umfaßt.
  68. Vorrichtung nach Anspruch 64, wobei das Mittel zum Einleiten einer Operation weiterhin ein Mittel zum Einleiten einer Subtraktionsoperation an gepackten Daten umfaßt.
  69. Vorrichtung nach Anspruch 64, wobei das Mittel zum Einleiten einer Operation weiterhin ein Mittel zum Einleiten einer Shuffle-Operation an gepackten Daten umfaßt.
  70. Vorrichtung nach Anspruch 64, wobei das Mittel zum Einleiten einer Operation weiterhin ein Mittel zum Einleiten einer Multiplizieroperation an gepackten Daten umfaßt.
  71. Vorrichtung nach Anspruch 64, wobei das Mittel zum Einleiten einer Operation weiterhin ein Mittel zum Einleiten einer Schiebeoperation an gepackten Daten umfaßt.
  72. Vorrichtung nach Anspruch 64, wobei das Mittel zum Einleiten einer Operation weiterhin ein Mittel zum Einleiten einer Absolutwertoperation an gepackten Daten umfaßt.
  73. Vorrichtung nach Anspruch 64, wobei das Mittel zum Einleiten einer Operation weiterhin ein Mittel zum Einleiten einer Vorzeichenbestimmungsoperation an gepackten Daten umfaßt.
  74. Vorrichtung nach Anspruch 64, wobei ein Mittel zur Bestimmung der Länge des Anweisungscodes, wobei die Längenbestimmung völlig auf den Inhalt des Escape-Felds, des Adressierungsformfelds und eines optionalen Präfixfelds basiert; wobei der Anweisungscode weiterhin wahlweise das Präfixfeld enthält.
  75. Vorrichtung nach Anspruch 64, weiterhin umfaßend: ein Mittel zur Bestimmung der Länge des Anweisungscodes, wobei die Längenbestimmung völlig auf den Inhalt des Escape-Felds, des Adressierungsformfelds basiert;
  76. Vorrichtung nach Anspruch 64, weiterhin umfaßend: ein Mittel zur Bestimmung der Länge des Anweisungscodes, wobei die Längenbestimmung völlig auf den Inhalt des Escape-Felds, des Adressierungsformfelds und eines Teils des Inhalts des optionalen Basisfelds basiert; wobei der Anweisungscode weiterhin wahlweise das Basisfeld enthält.
  77. Verfahren mit den folgenden Schritten: Erzeugen eines Anweisungscodes, um einen Escape-Code-Wert und einen anweisungsspezifischen Opcode-Wert aufzunehmen; wobei der Escape-Code-Wert mindestens zwei Byte lang ist und eine erweiterte Opcode-Map identifiziert; wobei der Anweisungscode eine durch eine Ausführungseinheit als Reaktion auf den Anweisungscode durchzuführende Operation repräsentiert.
  78. Verfahren nach Anspruch 77, wobei das Erzeugen eines Anweisungscodes weiterhin das Erzeugen eines Anweisungscodes, der weiterhin einen Präfixwert enthält, umfaßt.
  79. Verfahren nach Anspruch 78, wobei der Anweisungscode eine zweite Operation repräsentiert.
  80. Verfahren nach Anspruch 77, wobei das Erzeugen eines Anweisungscodes bei einem Anweisungssatz variabler Länge weiterhin das Auswählen des Escape-Code-Werts aus einem vordefinierten Satz von Escape-Code-Werten umfaßt.
  81. Verfahren nach Anspruch 80, wobei der vordefinierte Satz von Escape-Code-Werten 0x0F38, 0x0F39, 0x0F3A und 0x0F3B umfaßt.
  82. Verfahren nach Anspruch 80, wobei jeder der vordefinierten Escape-Code-Werte einen spezifischen Satz von Anweisungen angibt.
  83. Verfahren nach Anspruch 78, wobei der Präfixwert 0x66 ist.
DE102004030034A 2003-06-30 2004-06-22 Anweisungssatzerweiterung mit einem 3-Byte-Escape-Opcode Withdrawn DE102004030034A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/611,164 US7917734B2 (en) 2003-06-30 2003-06-30 Determining length of instruction with multiple byte escape code based on information from other than opcode byte
US10/611164 2003-06-30

Publications (1)

Publication Number Publication Date
DE102004030034A1 true DE102004030034A1 (de) 2005-01-27

Family

ID=33541260

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102004030034A Withdrawn DE102004030034A1 (de) 2003-06-30 2004-06-22 Anweisungssatzerweiterung mit einem 3-Byte-Escape-Opcode

Country Status (8)

Country Link
US (5) US7917734B2 (de)
JP (1) JP3898712B2 (de)
KR (1) KR100578439B1 (de)
CN (2) CN1940859B (de)
DE (1) DE102004030034A1 (de)
NL (1) NL1026490C2 (de)
RU (1) RU2288502C2 (de)
TW (1) TWI326841B (de)

Families Citing this family (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7181596B2 (en) * 2002-02-12 2007-02-20 Ip-First, Llc Apparatus and method for extending a microprocessor instruction set
US7529912B2 (en) * 2002-02-12 2009-05-05 Via Technologies, Inc. Apparatus and method for instruction-level specification of floating point format
US7328328B2 (en) 2002-02-19 2008-02-05 Ip-First, Llc Non-temporal memory reference control mechanism
US7546446B2 (en) * 2002-03-08 2009-06-09 Ip-First, Llc Selective interrupt suppression
US7302551B2 (en) * 2002-04-02 2007-11-27 Ip-First, Llc Suppression of store checking
US7917734B2 (en) 2003-06-30 2011-03-29 Intel Corporation Determining length of instruction with multiple byte escape code based on information from other than opcode byte
EP1622009A1 (de) * 2004-07-27 2006-02-01 Texas Instruments Incorporated JSM-Architektur und Systeme
US7836278B2 (en) * 2007-07-25 2010-11-16 Advanced Micro Devices, Inc. Three operand instruction extension for X86 architecture
US8281109B2 (en) * 2007-12-27 2012-10-02 Intel Corporation Compressed instruction format
WO2010112970A1 (en) 2009-03-31 2010-10-07 Freescale Semiconductor, Inc. Data processing with variable operand size
CN101650645B (zh) * 2009-09-04 2013-01-09 浙江大学 一种协处理器指令集的扩展方法
JP5496602B2 (ja) * 2009-10-30 2014-05-21 ルネサスエレクトロニクス株式会社 データプロセッサ
US9710277B2 (en) * 2010-09-24 2017-07-18 Intel Corporation Processor power management based on class and content of instructions
US20120079249A1 (en) * 2010-09-28 2012-03-29 Wei-Han Lien Training Decode Unit for Previously-Detected Instruction Type
US8843731B2 (en) * 2010-12-30 2014-09-23 Micron Technology, Inc. Memory device using extended interface commands
CN112463219A (zh) 2011-04-01 2021-03-09 英特尔公司 向量友好指令格式及其执行
US10223112B2 (en) 2011-12-22 2019-03-05 Intel Corporation Processors, methods, systems, and instructions to generate sequences of integers in which integers in consecutive positions differ by a constant integer stride and where a smallest integer is offset from zero by an integer offset
CN104011646B (zh) * 2011-12-22 2018-03-27 英特尔公司 用于产生按照数值顺序的连续整数的序列的处理器、方法、系统和指令
WO2013095564A1 (en) 2011-12-22 2013-06-27 Intel Corporation Processors, methods, systems, and instructions to generate sequences of integers in numerical order that differ by a constant stride
US10157061B2 (en) 2011-12-22 2018-12-18 Intel Corporation Instructions for storing in general purpose registers one of two scalar constants based on the contents of vector write masks
US9436474B2 (en) * 2012-07-27 2016-09-06 Microsoft Technology Licensing, Llc Lock free streaming of executable code data
US9471308B2 (en) 2013-01-23 2016-10-18 International Business Machines Corporation Vector floating point test data class immediate instruction
US9513906B2 (en) 2013-01-23 2016-12-06 International Business Machines Corporation Vector checksum instruction
US9804840B2 (en) 2013-01-23 2017-10-31 International Business Machines Corporation Vector Galois Field Multiply Sum and Accumulate instruction
US9785441B2 (en) 2014-05-29 2017-10-10 Mill Computing, Inc. Computer processor employing instructions with elided nop operations
US9959119B2 (en) 2014-05-29 2018-05-01 Mill Computing, Inc. Computer processor employing double-ended instruction decoding
US9582413B2 (en) 2014-12-04 2017-02-28 International Business Machines Corporation Alignment based block concurrency for accessing memory
CN104615443B (zh) * 2015-02-27 2018-04-24 珠海市杰理科技股份有限公司 单片机指令扩展方法与系统
JP2019095952A (ja) 2017-11-21 2019-06-20 ソニーセミコンダクタソリューションズ株式会社 プロセッサ、情報処理装置および処理方法
KR102600283B1 (ko) * 2017-12-05 2023-11-08 삼성전자주식회사 전자 장치 및 이를 이용한 명령어 처리 방법

Family Cites Families (48)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3657705A (en) 1969-11-12 1972-04-18 Honeywell Inc Instruction translation control with extended address prefix decoding
US4200927A (en) 1978-01-03 1980-04-29 International Business Machines Corporation Multi-instruction stream branch processing mechanism
US4591972A (en) 1982-11-15 1986-05-27 Data General Corp. Data processing system with unique microcode control
US4873629A (en) 1984-06-20 1989-10-10 Convex Computer Corporation Instruction processing unit for computer
JPH0353325A (ja) 1989-07-21 1991-03-07 Nec Corp 情報処理装置
CA2038264C (en) 1990-06-26 1995-06-27 Richard James Eickemeyer In-memory preprocessor for a scalable compound instruction set machine processor
GB2263986B (en) 1992-02-06 1996-03-13 Intel Corp Rotators in machine instruction length calculation
JP3547740B2 (ja) * 1992-03-25 2004-07-28 ザイログ,インコーポレイテッド 命令高速解読パイプラインプロセッサ
US5438668A (en) 1992-03-31 1995-08-01 Seiko Epson Corporation System and method for extraction, alignment and decoding of CISC instructions into a nano-instruction bucket for execution by a RISC computer
US5353420A (en) 1992-08-10 1994-10-04 Intel Corporation Method and apparatus for decoding conditional jump instructions in a single clock in a computer processor
US5859994A (en) 1992-08-10 1999-01-12 Intel Corporation Apparatus and method for modifying instruction length decoding in a computer processor
JP3053325B2 (ja) 1993-12-20 2000-06-19 株式会社日立製作所 腐食電位のシミュレーション方法および原子炉プラントの運転監視装置
US5537629A (en) 1994-03-01 1996-07-16 Intel Corporation Decoder for single cycle decoding of single prefixes in variable length instructions
SG47981A1 (en) 1994-03-01 1998-04-17 Intel Corp Pipeline process of instructions in a computer system
US5586277A (en) 1994-03-01 1996-12-17 Intel Corporation Method for parallel steering of fixed length fields containing a variable length instruction from an instruction buffer to parallel decoders
US5630083A (en) 1994-03-01 1997-05-13 Intel Corporation Decoder for decoding multiple instructions in parallel
US5600806A (en) 1994-03-01 1997-02-04 Intel Corporation Method and apparatus for aligning an instruction boundary in variable length macroinstructions with an instruction buffer
US5572206A (en) 1994-07-06 1996-11-05 Microsoft Corporation Data compression method and system
US5758116A (en) 1994-09-30 1998-05-26 Intel Corporation Instruction length decoder for generating output length indicia to identity boundaries between variable length instructions
CN1187255A (zh) * 1995-06-07 1998-07-08 高级微型器件公司 使用指令字段规定扩展功能的微处理器
US5694589A (en) 1995-06-13 1997-12-02 Intel Corporation Instruction breakpoint detection apparatus for use in an out-of-order microprocessor
US5768553A (en) 1995-10-30 1998-06-16 Advanced Micro Devices, Inc. Microprocessor using an instruction field to define DSP instructions
US5809272A (en) * 1995-11-29 1998-09-15 Exponential Technology Inc. Early instruction-length pre-decode of variable-length instructions in a superscalar processor
AU1406997A (en) 1995-12-15 1997-07-14 Intel Corporation Instruction encoding techniques for microcontroller architecture
US5778246A (en) 1995-12-27 1998-07-07 Intel Corporation Method and apparatus for efficient propagation of attribute bits in an instruction decode pipeline
US5740392A (en) * 1995-12-27 1998-04-14 Intel Corporation Method and apparatus for fast decoding of 00H and OFH mapped instructions
US5822559A (en) 1996-01-02 1998-10-13 Advanced Micro Devices, Inc. Apparatus and method for aligning variable byte-length instructions to a plurality of issue positions
US5845099A (en) 1996-06-28 1998-12-01 Intel Corporation Length detecting unit for parallel processing of variable sequential instructions
JPH1091430A (ja) 1996-09-13 1998-04-10 Matsushita Electric Ind Co Ltd 命令解読装置
US5845102A (en) 1997-03-03 1998-12-01 Advanced Micro Devices, Inc. Determining microcode entry points and prefix bytes using a parallel logic technique
US6032250A (en) 1997-12-05 2000-02-29 Intel Corporation Method and apparatus for identifying instruction boundaries
US5941982A (en) 1997-12-23 1999-08-24 Intel Corporation Efficient self-timed marking of lengthy variable length instructions
US5931944A (en) 1997-12-23 1999-08-03 Intel Corporation Branch instruction handling in a self-timed marking system
US5978899A (en) 1997-12-23 1999-11-02 Intel Corporation Apparatus and method for parallel processing and self-timed serial marking of variable length instructions
US5948096A (en) * 1997-12-23 1999-09-07 Intel Corporation Apparatus and method for self-timed marking of variable length instructions having length-affecting prefix bytes
US6014735A (en) * 1998-03-31 2000-01-11 Intel Corporation Instruction set extension using prefixes
US6301650B1 (en) 1998-10-29 2001-10-09 Pacific Design, Inc. Control unit and data processing system
US6260134B1 (en) * 1998-11-02 2001-07-10 Advanced Micro Devices, Inc. Fixed shift amount variable length instruction stream pre-decoding for start byte determination based on prefix indicating length vector presuming potential start byte
US7213129B1 (en) 1999-08-30 2007-05-01 Intel Corporation Method and system for a two stage pipelined instruction decode and alignment using previous instruction length
US6684322B1 (en) * 1999-08-30 2004-01-27 Intel Corporation Method and system for instruction length decode
US7376814B1 (en) * 1999-09-07 2008-05-20 Nxp B.V. Method for forming variable length instructions in a processing system
US6496923B1 (en) 1999-12-17 2002-12-17 Intel Corporation Length decode to detect one-byte prefixes and branch
US7082516B1 (en) * 2000-09-28 2006-07-25 Intel Corporation Aligning instructions using a variable width alignment engine having an intelligent buffer refill mechanism
JP3760093B2 (ja) 2000-11-29 2006-03-29 株式会社ルネサステクノロジ マイクロコンピュータ
US7181596B2 (en) * 2002-02-12 2007-02-20 Ip-First, Llc Apparatus and method for extending a microprocessor instruction set
US7305542B2 (en) 2002-06-25 2007-12-04 Intel Corporation Instruction length decoder
JP2004038521A (ja) 2002-07-03 2004-02-05 Renesas Technology Corp マイクロコンピュータ
US7917734B2 (en) 2003-06-30 2011-03-29 Intel Corporation Determining length of instruction with multiple byte escape code based on information from other than opcode byte

Also Published As

Publication number Publication date
NL1026490A1 (nl) 2005-01-03
KR100578439B1 (ko) 2006-05-11
US20080148019A1 (en) 2008-06-19
CN1624653A (zh) 2005-06-08
US20120173852A1 (en) 2012-07-05
US7966476B2 (en) 2011-06-21
US20130219152A1 (en) 2013-08-22
CN1940859B (zh) 2010-05-12
JP2005025741A (ja) 2005-01-27
TW200513971A (en) 2005-04-16
US20110173418A1 (en) 2011-07-14
US8793470B2 (en) 2014-07-29
RU2288502C2 (ru) 2006-11-27
TWI326841B (en) 2010-07-01
US8402252B2 (en) 2013-03-19
US7917734B2 (en) 2011-03-29
CN1940859A (zh) 2007-04-04
US8161269B2 (en) 2012-04-17
CN100449479C (zh) 2009-01-07
RU2004119906A (ru) 2006-01-10
NL1026490C2 (nl) 2007-10-16
JP3898712B2 (ja) 2007-03-28
KR20050002666A (ko) 2005-01-10
US20040268090A1 (en) 2004-12-30

Similar Documents

Publication Publication Date Title
DE102004030034A1 (de) Anweisungssatzerweiterung mit einem 3-Byte-Escape-Opcode
DE69925410T2 (de) Erweiterung des Befehlssatzes unter Verwendung von Präfixcode
DE112004001648T5 (de) Verfahren, Vorrichtung und Befehle für parallele Datenumwandlung
DE19914617C2 (de) Prozessor und Verfahren zum Ausführen von Befehlen an gepackten Daten
DE112013005188B4 (de) Prozessor und vefrahren zur vektorisierung von zusammengeführten, mehrfach geschachtelten schleifen
DE102007045187A1 (de) Verfahren und Vorrichtung zum Ausführen einer logischen Vergleichsoperation
DE112011105122T5 (de) Systeme, Vorrichtungen und Verfahren zum Vermischen zweier Quelloperanden in einem einzigen Ziel unter Verwendung einer Schreibmaske
DE112013005343T5 (de) Befehle für Codierungsalgorithemen mit gleitendem Fenster
DE102014003790A1 (de) Parallelvorrichtung für hochkomprimierte Hochgeschwindigkeits-LZ77-Tokenisierung und Huffman-Codierung für Deflate-Komprimierung
DE3606869A1 (de) Vorrichtung zur datenkompression
DE19920214A1 (de) Verfahren und Einrichtung zum Konvertieren einer Zahl zwischen einem Gleitkommaformat und einem Ganzzahlformat
DE112016004359T5 (de) Systeme, Verfahren und Vorrichtungen für eine Dekompression unter Verwendung von Hardware und Software
DE2421130C2 (de)
DE112017000983T5 (de) System und Verfahren zum Ausführen eines Befehls zum Permutieren einer Maske
DE19934515A1 (de) Verfahren und Einrichtung zum Durchführen von Cache-Segment-Flush- und Cache-Segment-Invalidier-Operationen
DE60302809T2 (de) Vorrichtung und Verfahren zur selektiven Steuerung der Speicherattribute
DE102012217315A1 (de) Verwenden von nativen Routinen an Stelle von emulierten Routinen in einer emulierten Anwendung
DE112017005823T5 (de) Codieren von symbolen variabler länge zum ermöglichen eines parallelen decodierens
DE102020134280A1 (de) Vorrichtung und verfahren zur effizienten gleitkomma-komprimierung
DE2426874A1 (de) Verfahren und schaltungsanordnung zur bestimmung der adressenart eines befehls
EP1347599B1 (de) Verfahren und Protokolltester zum Dekodieren gemäss einer Protokollbeschreibung kodierter Daten
DE69824032T2 (de) Computer-prozessor und verfahren zum kontinuierlichen schreiben und lesen von daten
DE10303053B4 (de) Prozessorarchitektur mit einem Array von Pipelines und einer Registerdatei zum Vermeiden von Datenrisiken und Verfahren zur Datenweiterleitung in einer derartigen Prozessorarchitektur
DE60014438T2 (de) Anrufgatterexpansion für 64 bit adressierung
DE112017003338T5 (de) System, Vorrichtung und Verfahren zum Inspizieren dauerhafter Daten in einem Speicher

Legal Events

Date Code Title Description
OP8 Request for examination as to paragraph 44 patent law
R011 All appeals rejected, refused or otherwise settled
R119 Application deemed withdrawn, or ip right lapsed, due to non-payment of renewal fee

Effective date: 20140101

R130 Divisional application to

Ref document number: 102004064281

Country of ref document: DE

Effective date: 20131025

R003 Refusal decision now final

Effective date: 20131028