DE102018005170A1 - Anweisungen für vektoroperationen mit konstanten werten - Google Patents

Anweisungen für vektoroperationen mit konstanten werten Download PDF

Info

Publication number
DE102018005170A1
DE102018005170A1 DE102018005170.7A DE102018005170A DE102018005170A1 DE 102018005170 A1 DE102018005170 A1 DE 102018005170A1 DE 102018005170 A DE102018005170 A DE 102018005170A DE 102018005170 A1 DE102018005170 A1 DE 102018005170A1
Authority
DE
Germany
Prior art keywords
register
instruction
vector
destination
immediate
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.)
Pending
Application number
DE102018005170.7A
Other languages
English (en)
Inventor
Gadi Haber
Robert Valentine
Ayal Zaks
Jesus Corbal San Adrian
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 DE102018005170A1 publication Critical patent/DE102018005170A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • G06F9/30167Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/57Arithmetic logic units [ALU], i.e. arrangements or devices for performing two or more of the operations covered by groups G06F7/483 – G06F7/556 or for performing logical 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/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30018Bit or string 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/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/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
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • 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/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • 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/3001Arithmetic 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/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/345Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
    • G06F9/3455Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results using stride

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Computational Mathematics (AREA)
  • Computing Systems (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Complex Calculations (AREA)
  • Advance Control (AREA)

Abstract

Offenbarte Ausführungsformen betreffen Anweisungen für Vektoroperationen mit unmittelbaren Werten. In einem Beispiel enthält ein System einen Speicher und einen Prozessor, der Abrufschaltungen zum Abrufen der Anweisung aus einem Codespeicher enthält, die Anweisung enthaltend einen Operationscode, eine Bestimmungskennung zum Spezifizieren eines Bestimmungsvektorregisters, eine erste Unmittelbare und eine Schreibmaskenkennung zum Spezifizieren eines Schreibmaskenregisters, das Schreibmaskenregister enthaltend mindestens ein Bit korrespondierend mit jedem Bestimmungsvektorregisterelement, das mindestens eine Bit zum Spezifizieren, ob das Bestimmungsvektorregisterelement maskiert oder nicht maskiert ist, Decodierungsschaltungen zum Decodieren der abgerufenen Anweisung und Ausführungsschaltungen zum Ausführen der decodierten Anweisung, zum Verwenden des Schreibmaskenregisters zum Bestimmen nicht maskierter Elemente des Bestimmungsvektorregisters und, wenn der Operationscode spezifiziert, rundzusenden, Rundsenden der ersten Unmittelbaren an ein oder mehrere nicht maskierte Vektorelemente des Bestimmungsvektorregisters.

Description

  • GEBIET DER ERFINDUNG
  • Das Gebiet der Erfindung betrifft allgemein die Architektur von Computerprozessoren und insbesondere Anweisungen für Vektoroperationen mit konstanten Werten.
  • HINTERGRUND
  • Für Anwendungen, die Vektoroperationen für Berechnungen zur Laufzeit verwenden, muss der Compiler- oder Assembly-Programmierer versuchen, die erforderlichen Vektorregister für die Vektoroperationen in einer Schleife zuzuteilen. Wenn nicht allen Vektoroperationen Register zugeteilt werden, kann dies in Überlaufen von Vektorregistern resultieren, wodurch eine Minderung der Leistung und ein ineffizienter Stromverbrauch bewirkt werden.
  • In grafischen Anwendungen ist zum Beispiel eine Translationstransformation die Verlagerung eines Grafikobjekts zu einem neuen Ort durch Addieren eines konstanten Werts zu jedem Koordinatenpunkt. Je mehr Grafikobjekte in einem Bild existieren, desto mehr Vektorregister werden verwendet, sie zu verlagern. Und wenn verschiedene Grafikobjekte um verschiedene Beträge zu verschieben sind, werden desto mehr Register zum Speichern der verschiedenen Konstanten verwendet.
  • Figurenliste
  • Die vorliegende Erfindung wird anhand von Beispielen und nicht durch Einschränkungen in den Figuren der beigefügten Zeichnungen veranschaulicht, in denen gleiche Bezugszeichen ähnliche Elemente angeben und in denen:
    • 1 ein Blockdiagramm zeigt, das Verarbeitungskomponenten zum Ausführen von Anweisungen für Vektoroperationen mit konstanten Werten darstellt, gemäß einigen Ausführungsformen;
    • 2 ein Ablaufdiagramm eines Prozesses zeigt, der durch einen Prozessor auszuführen ist, um eine Anweisung für eine Vektoroperation mit konstanten Werten auszuführen, gemäß einigen Ausführungsformen;
    • 3 ein Blockdiagramm zeigt, das ein Format für Anweisungen für Vektoroperationen mit konstanten Werten darstellt, gemäß einigen Ausführungsformen;
    • 4A eine Ausführung einer Anweisung zum Rundsenden einer Unmittelbaren zeigt;
    • 4B eine Ausführung einer Anweisung zum Rundsenden einer Unmittelbaren zeigt;
    • 4C eine Ausführung einer Anweisung zum Rundsenden einer Unmittelbaren mit einem Schritt zeigt;
    • 4D eine Ausführung einer Anweisung zum Rundsenden einer Unmittelbaren mit einem Schritt zeigt;
    • 4E eine Ausführung einer Anweisung zum Rundsenden einer Unmittelbaren mit einem Schritt zeigt;
    • 4F eine Ausführung einer Anweisung zum Rundsenden einer Unmittelbaren an ein Maskenregister zeigt;
    • 4G eine Ausführung einer Anweisung zum Setzen eines Bestimmungsmaskenregisters auf ein Ergebnis einer Operation an einer Unmittelbaren zeigt;
    • 4H eine Ausführung einer Anweisung zum Rundsenden eines Ergebnisses einer Operation an einer Unmittelbaren zeigt;
    • 5 eine beispielhafte Ausführung einer Anweisung, die einen unmittelbaren Operanden aufweist, zeigt;
    • 6 eine Ausführungsform von Hardware zum Verarbeiten einer Anweisung, die einen unmittelbaren Operanden aufweist, zeigt;
    • 7 eine Ausführungsform eines Verfahrens zeigt, durchgeführt von einem Prozessor zum Verarbeiten einer Anweisung, die einen unmittelbaren Operanden aufweist;
    • 8 eine beispielhafte Ausführung einer Anweisung, die einen unmittelbaren Operanden aufweist, zeigt;
    • 9 eine Ausführungsform von Hardware zum Verarbeiten einer Anweisung, die einen unmittelbaren Operanden aufweist, zeigt;
    • 10 eine Ausführungsform eines Verfahrens zeigt, durchgeführt von einem Prozessor zum Verarbeiten einer Anweisung, die einen unmittelbaren Operanden aufweist;
    • 11 eine beispielhafte Ausführung einer Anweisung, die einen unmittelbaren Operanden aufweist, zeigt;
    • 12 eine Ausführungsform von Hardware zum Verarbeiten einer Anweisung, die einen unmittelbaren Operanden aufweist, zeigt;
    • 13 eine Ausführungsform eines Verfahrens zeigt, durchgeführt von einem Prozessor zum Verarbeiten einer Anweisung, die einen unmittelbaren Operanden aufweist;
    • 14 eine beispielhafte Ausführung einer Anweisung, die einen unmittelbaren Operanden aufweist, zeigt;
    • 15 eine Ausführungsform von Hardware zum Verarbeiten einer Anweisung, die einen unmittelbaren Operanden aufweist, zeigt;
    • 16 eine Ausführungsform eines Verfahrens zeigt, durchgeführt von einem Prozessor zum Verarbeiten einer Anweisung, die einen unmittelbaren Operanden aufweist;
    • 17 eine beispielhafte Ausführung einer Anweisung, die einen unmittelbaren Operanden aufweist, zeigt;
    • 18 eine Ausführungsform von Hardware zum Verarbeiten einer Anweisung, die einen unmittelbaren Operanden aufweist, zeigt;
    • 19 eine Ausführungsform eines Verfahrens zeigt, durchgeführt von einem Prozessor zum Verarbeiten einer Anweisung, die einen unmittelbaren Operanden aufweist;
    • 20 eine beispielhafte Ausführung einer Anweisung, die einen unmittelbaren Operanden aufweist, zeigt;
    • 21 eine Ausführungsform von Hardware zum Verarbeiten einer Anweisung, die einen unmittelbaren Operanden aufweist, zeigt;
    • 22 eine Ausführungsform eines Verfahrens zeigt, durchgeführt von einem Prozessor zum Verarbeiten einer Anweisung, die einen unmittelbaren Operanden aufweist;
    • 23 eine beispielhafte Ausführung einer Anweisung, die einen unmittelbaren Operanden aufweist, zeigt;
    • 24 eine Ausführungsform von Hardware zum Verarbeiten einer Anweisung, die einen unmittelbaren Operanden aufweist, zeigt;
    • 25 eine Ausführungsform eines Verfahrens zeigt, durchgeführt von einem Prozessor zum Verarbeiten einer Anweisung, die einen unmittelbaren Operanden aufweist;
    • 26 eine beispielhafte Ausführung einer Anweisung, die einen unmittelbaren Operanden aufweist, zeigt;
    • 27 eine Ausführungsform von Hardware zum Verarbeiten einer Anweisung, die einen unmittelbaren Operanden aufweist, zeigt;
    • 28 eine Ausführungsform eines Verfahrens zeigt, durchgeführt von einem Prozessor zum Verarbeiten einer Anweisung, die einen unmittelbaren Operanden aufweist;
    • die 29A-29C Blockdiagramme zeigen, die ein exemplarisches vektorfreundliches Anweisungsformat und Anweisungsvorlagen davon darstellen, gemäß Ausführungsformen der Erfindung;
    • 29A ein Blockdiagramm zeigt, das ein exemplarisches vektorfreundliches Anweisungsformat und Anweisungsvorlagen der Klasse A davon darstellt, gemäß Ausführungsformen der Erfindung;
    • 29B ein Blockdiagramm zeigt, das das exemplarische vektorfreundliche Anweisungsformat und Anweisungsvorlagen der Klasse B davon darstellt, gemäß Ausführungsformen der Erfindung;
    • 29C ein Blockdiagramm zeigt, das das exemplarische vektorfreundliche Anweisungsformat und Anweisungsvorlagen der Klasse B davon darstellt, gemäß Ausführungsformen der Erfindung;
    • 30 ein Blockdiagramm einer Registerarchitektur gemäß einer Ausführungsform der Erfindung zeigt;
    • 31A ein Blockdiagramm zeigt, das sowohl eine beispielhafte In-Reihenfolge-Pipeline als auch eine beispielhafte Register-Umbenennung, Außer-der-Reihenfolge-Ausgabe/Ausführung-Pipeline gemäß Ausführungsformen der Erfindung darstellt;
    • 31B ein Blockdiagramm zeigt, das sowohl eine beispielhafte Ausführungsform eines In-Reihenfolge-Architekturkerns als auch einen beispielhafte Register-Umbenennung, Außer-der-Reihenfolge-Ausgabe/Ausführung-Architekturkern, der in einen Prozessor gemäß Ausführungsformen der Erfindung aufzunehmen ist, darstellt;
    • die 32A-B ein Blockdiagramm einer spezifischeren beispielhaften In-Reihenfolge-Kernarchitektur zeigen, wobei der Kern einer von mehreren Logikblöcken (einschließlich anderer Kerne des gleichen Typs und/oder verschiedener Typen) in einem Chip sein würde;
    • 32A ein Blockdiagramm eines einzelnen Prozessorkerns zusammen mit seiner Verbindung mit dem Auf-Plättchen-Verschaltungsnetzwerk und mit seinem lokalen Teilsatz des Level-2- bzw. L2-Caches gemäß Ausführungsformen der Erfindung zeigt;
    • 32B eine erweiterte Ansicht eines Teils des Prozessorkerns in 32A gemäß Ausführungsformen der Erfindung zeigt;
    • 33 ein Blockdiagramm des Prozessors zeigt, der mehr als einen Kern aufweisen kann, eine integrierte Speichersteuerung aufweisen kann und integrierte Grafik aufweisen kann, gemäß Ausführungsformen der Erfindung;
    • 34 ein Blockdiagramm eines Systems gemäß einer Ausführungsform der vorliegenden Erfindung zeigt;
    • 35 ein Blockdiagramm eines ersten spezifischeren beispielhaften Systems gemäß einer Ausführungsform der vorliegenden Erfindung zeigt;
    • 36 ein Blockdiagramm eines zweiten spezifischeren beispielhaften Systems gemäß einer Ausführungsform der vorliegenden Erfindung zeigt;
    • 37 ein Blockdiagramm eines Systems auf einem Chip (SoC) gemäß einer Ausführungsform der vorliegenden Erfindung zeigt; und
    • 38 ein Blockdiagramm zeigt, das die Verwendung eines Software-Anweisungsumsetzers zum Umsetzen binärer Anweisungen in einem Ursprungsanweisungssatz in binäre Anweisungen in einem Bestimmungsanweisungssatz gemäß Ausführungsformen der Erfindung gegenüberstellt.
  • AUSFÜHRLICHE BESCHREIBUNG
  • In der nachstehenden Beschreibung werden zahlreiche spezifische Einzelheiten angeführt. Es versteht sich jedoch, dass Ausführungsformen der Erfindung ohne diese spezifischen Einzelheiten praktiziert werden können. In anderen Fällen wurden gut bekannte Schaltungen, Strukturen und Techniken nicht im Detail dargestellt, um das Verständnis dieser Beschreibung nicht zu behindern.
  • Verweise in der Patentschrift auf „eine Ausführungsform“, „eine beispielhafte Ausführungsform“ usw. geben an, dass die beschriebene Ausführungsform ein bestimmtes Merkmal, eine bestimmte Struktur oder ein bestimmtes Charakteristikum enthalten kann, aber jede Ausführungsform nicht notwendigerweise das bestimmte Merkmal, die bestimmte Struktur oder das bestimmte Charakteristikum enthalten muss. Überdies verweisen derartige Formulierungen nicht notwendigerweise auf dieselbe Ausführungsform. Ferner wird davon ausgegangen, wenn ein bestimmtes Merkmal, eine bestimmte Struktur oder ein bestimmtes Charakteristikum in Verbindung mit einer Ausführungsform beschrieben wird, es innerhalb der Kenntnisse eines Fachmanns im Fachgebiet liegt, ein derartiges Merkmal, eine derartige Struktur oder ein derartiges Charakteristikum mit anderen Ausführungsform in Verbindung zu setzen, unabhängig davon, ob dies explizit beschrieben wird.
  • Zum Reduzieren des Drucks auf Vektorregister ist es möglich, den Anweisungssatz der Architektur-Hardware zu erweitern, wie durch hierin diskutierte Ausführungsformen bewerkstelligt, um Vektoroperationen mit unmittelbaren (konstanten) Werten zu ermöglichen.
  • Zum Beispiel besteht in vielen Video- und Bildverarbeitungsalgorithmen für verbesserte Leistung ein Erfordernis, dass die Architektur Anweisungen unterstützt, die an dem gesamten Vektor mit dem gleichen Wert operieren.
  • Zum Beispiel erfordert Weitergehen von Bildpunkten (Y-Koordinate) an die nächste Reihe, 1 zu dem Vektorregister, das die Y-Koordinate der gegenwärtigen Reihe enthält, zu addieren.
  • Als ein weiteres Beispiel erfordert Weitergehen an die nächsten 8 Bildpunkte in der Reihe, 8 zu dem Vektorregister, das die gegenwärtigen X-Koordinaten enthält, zu addieren.
  • Als ein weiteres Beispiel erfordern einige Ansätze in anderen Anweisungssatzarchitekturen (ISAs) zusätzliche Register, die konstanten Werte zu halten und/oder sie direkt aus dem Speicher zu lesen, was in umständlichem Code resultiert, der außerdem Register verbraucht.
  • Hierin offenbarte Ausführungsformen stellen wirksame Weisen zum (Re-)Konstruieren (Wiederherstellen) von konstanten Vektoren bereit, wodurch derartige Register für andere Verwendungen an anderer Stelle (z. B. in einer heißen Schleife, die, wie hierin verwendet, sich auf eine häufig ausgeführte Schleife bezieht) freigestellt werden.
  • Gegenwärtig können konstante Werte in Vektoren aus dem Speicher zugewiesen/besetzt werden, wahlweise durch Verwendung zum Beispiel einer Anweisung VBROADCAST, die jedes nicht maskierte Element eines Vektorregisters mit einem an einem Speicherplatz gespeicherten konstanten Wert besetzt. Dies ist nützlich für einfache, repetitive Fälle wie {m32, m32, ..., m32} oder ansonsten durch Überlaufen in den (Konstanten-)Speicher (Überlaufen kommt vor, wenn ein Registerzuteiler über keine Register mehr verfügt und daher Werte durch Speichern und Abrufen aus dem Speicher „überlaufen“ lassen muss). In einigen Ausführungsformen ist eine Anweisung VBROADCAST eine Anweisung, die verwendet wird, Fließkommadaten zu einem Vektorort rundzusenden.
  • Hierin offenbarte Ausführungsformen modifizieren eine Prozessoranweisungssatzarchitektur, um die Fähigkeiten einer Anweisung VBROADCAST zu erweitern. Die Verwendung von Ausführungsformen hierin hat den Vorteil, zu gestatten, dass ein unmittelbarer Wert in der Anweisung verwendet werden kann, anstatt zu erfordern, dass der Wert in einem Register gespeichert wird.
  • Offenbarte Ausführungsform von Vektoroperationen gestatten mehr Ursprünge als eine gegenwärtige Anweisung VBROADCAST.
  • Offenbarte Ausführungsformen von Vektoroperationen gestatten außerdem unmittelbare (konstante) Operanden.
  • Offenbarte Ausführungsformen von Vektoroperationen können ferner nicht repetitive, häufig vorkommende Vektorkonstanten handhaben, die konstante Werte (Unmittelbare) einbeziehen.
  • Offenbarte Ausführungsformen erweitern die Möglichkeiten zum Setzen jedes Bereichs oder Elements eines aus mehreren Elementen bestehenden Bestimmungsregisters in mindestens zwei Richtungen:
    • • Mehr Ursprünge, aus denen rundgesendet werden kann: Unmittelbare, beliebige Vektorelemente; und
    • • Handhaben nicht repetitiver, häufig vorkommender Vektorkonstanten, die konstante Werte (Unmittelbare) einbeziehen.
  • In einigen Ausführungsformen gestatten erweiterte Versionen von „VBROADCAST“ und anderer Anweisungen mehrere Ursprünge, mehrere Bestimmungen und Unmittelbare.
  • 1 zeigt ein Blockdiagramm, das Verarbeitungskomponenten zum Ausführen von Anweisungen für Vektoroperationen mit konstanten Werten (Unmittelbare) gemäß einigen Ausführungsformen darstellt. Wie dargestellt, enthält das Berechnungssystem 100 einen Codespeicher 102, eine Abrufschaltung 104, eine Decodierungsschaltung 106, eine Ausführungsschaltung 108, Register 110, einen Speicher 112 und eine Ablage- oder Übergabeschaltung 114. Im Betrieb wird eine Anweisung durch die Abrufschaltung 104 aus dem Codespeicher 102 abgerufen, der ohne Einschränkung einen Cache-Speicher, einen Auf-Chip-Speicher, einen Speicher auf demselben Plättchen wie der Prozessor, ein Anweisungsregister, ein allgemeines Register oder einen Systemspeicher enthalten kann. In einer Ausführungsform hat die Anweisung ein Format ähnlich dem von 3 und der 29A-29C. Nach dem Abrufen der Anweisung aus dem Codespeicher 102 decodiert die Decodierungsschaltung 106 die abgerufene Anweisung, was enthält, die verschiedenen Felder der Anweisung zu zergliedern. Nach dem Decodieren der abgerufenen Anweisung führt die Ausführungsschaltung 108 die decodierte Anweisung aus. Verschiedene beispielhafte Ausführungsformen der Ausführung unter Verwendung der Ausführungsschaltung 108 werden unter Bezugnahme auf die 4A-4H veranschaulicht und beschrieben. Beim Ausführen der Anweisung kann die Ausführungsschaltung 108 Daten aus den Registern 110 und dem Speicher 112 lesen und dorthin schreiben. Die Register 110 können ohne Einschränkung ein Datenregister, ein Anweisungsregister, ein Vektorregister, ein Maskenregister, ein allgemeines Register, einen Auf-Chip-Speicher, einen Speicher auf demselben Plättchen wie der Prozessor oder einen Speicher in demselben Baustein wie der Prozessor enthalten. Der Speicher 112 kann ohne Einschränkung einen Auf-Chip-Speicher, einen Speicher auf demselben Plättchen wie der Prozessor, einen Speicher in demselben Baustein wie der Prozessor, einen Cache-Speicher oder einen Systemspeicher enthalten. Nachdem die Ausführungsschaltung die Anweisung ausführt, kann die Ablage- oder Übergabeschaltung 114 die Anweisung ablegen, wobei gewährleistet wird, dass Ausführungsergebnisse in ihre Bestimmungen geschrieben werden oder geschrieben wurden und Betriebsmittel für spätere Verwendung freigegeben oder freigestellt werden.
  • 2 zeigt ein Verfahren, dass durch einen Prozessor durchzuführen ist, um eine Anweisung für eine Operation mit konstanten Werten (Unmittelbare) auszuführen. Nach dem Starten des Prozesses ruft eine Abrufschaltung 202 die Anweisung aus einem Codespeicher ab, wobei die Anweisung einen Operationscode, eine Bestimmungskennung zum Spezifizieren eines Bestimmungsvektorregisters, eine erste Unmittelbare, eine zweite Unmittelbare und eine Schreibmaskenkennung zum Spezifizieren eines Schreibmaskenregisters enthält, wobei das Schreibmaskenregister mindestens ein Bit korrespondierend mit jedem Element des Bestimmungsvektorregisters umfasst, wobei das mindestens eine Bit spezifiziert, ob das Element maskiert oder nicht maskiert ist. Das Bestimmungsvektorregister wird manchmal als ein gepacktes Bestimmungsregister bezeichnet.
  • Bei 204 wird die abgerufene Anweisung durch die Decodierungsschaltung decodiert.
  • Bei 206 verwendet die Ausführungsschaltung die erste Unmittelbare zum Setzen eines Datenwerts.
  • Bei 208 verwendet die Ausführungsschaltung die zweite Unmittelbare zum Setzen eines Schritt-Werts.
  • Bei 210 verwendet die Ausführungsschaltung das Schreibmaskenregister zum Identifizieren nicht maskierter Elemente des Bestimmungsvektorregisters.
  • Bei 212 bestimmt die Ausführungsschaltung, ob der Operationscode einen Schritt spezifiziert. Wenn nicht, endet der Prozess. Aber wenn doch, speichert die Ausführungsschaltung bei 214 den Datenwert in einem ersten nicht maskierten Bestimmungsvektorregisterelement und erzeugt, für jedes nachfolgende nicht maskierte Bestimmungsvektorregisterelement, einen Schritt-durchgeführt-Wert durch Addieren des Schritt-Werts zu einem unmittelbar vorhergehenden nicht maskierten Bestimmungsvektorregister und speichert den Schritt-durchgeführt-Wert in dem nicht maskierten Bestimmungsvektorregisterelement. In einigen Ausführungsformen nullt die Ausführungsschaltung maskierte Elemente des Bestimmungsvektorregisters. In einigen Ausführungsformen behalten maskierte Elemente des Bestimmungsvektorregisters ihre vorherigen Werte bei. Dann endet der Prozess.
  • 3 zeigt ein Blockdiagramm, das ein Format für Anweisungen für eine Operation mit konstanten Werten (Unmittelbare) darstellt, gemäß einigen Ausführungsformen. Wie dargestellt, enthält die Anweisung 300 einen Operationscode 302, eine Bestimmungskennung 304, eine Unmittelbare 306, eine wahlweise Ursprungskennung 308 (wahlweise Anweisungsfelder werden in Feldern mit gestrichelten Umrissen dargestellt), eine wahlweise zweite Unmittelbare 310, eine wahlweise Elementgrößenkennung 312 und eine wahlweise Schreibmaske 314.
  • Der Operationscode 302 in einigen Ausführungsformen ist VBROADCAST*. Wie dargestellt, enthält der Operationscode 302 ein Sternchen („*“), das wahlweise Suffixe oder Präfixe repräsentiert, die dem Operationscode hinzugefügt werden können, um Operationen der Anweisung zu steuern. In einigen Ausführungsformen ist der Operationscode 302 eine arithmetische Operation wie ADD, SUB, DIV, MUL, MOD usw., wobei in diesem Fall das Sternchen durch ein entsprechendes Suffix ersetzt werden würde. In einigen Ausführungsformen enthält der Operationscode 302 zum Beispiel ein Steuersuffix „IM“ oder „STR“, um zu spezifizieren, ob ein unmittelbarer Operand an jeden Bereich fester Größe des Bestimmungsregisters rundzusenden ist (wie nachstehend in 4A) oder ob ein Schritt-Wert zu aufeinanderfolgenden Bereichen fester Größe des Bestimmungsregisters zu addieren ist (wie nachstehend in den 4C, 4D und 4E). Einige Beispiele verschiedener Operationscodes werden nachstehend unter Bezugnahme auf die 4A-4H diskutiert und veranschaulicht.
  • Einige Beispiele von vektorfreundlichen Anweisungsformaten werden nachstehend unter Bezugnahme auf die 29A-29C beschrieben. Wenn die 3 mit den 29A-29C verglichen wird, wird in einigen Ausführungsformen der Operationscode 302 auf das Basisoperationsfeld 542 abgebildet (5), während die Bestimmungskennung 304, die Unmittelbare 306 und die wahlweise Ursprungskennung 308 auf das Registerindexfeld 2944 abgebildet wird (29A-29C), das nachstehend als ausreichend Bits, N, zum Identifizieren von drei Ursprüngen und einem Bestimmungsregister enthaltend beschrieben wird. Unter fortgesetzter Bezugnahme auf die 29A-29C werden in einigen Ausführungsformen die wahlweise zweite Unmittelbare 310, die wahlweise Elementgrößenkennung 312 und die wahlweise Schreibmaske 314 auf das Unmittelbarenfeld 2972, das Datenelementbreitenfeld 2964 bzw. das Schreibmaskenfeld 2970 abgebildet.
  • Die Bestimmungskennung 304 spezifiziert in einigen Ausführungsformen ein Vektorregister wie eines der in einer Registerdatei eines Prozessors bereitstellten Vektorregister. In einigen Ausführungsformen spezifiziert die Bestimmungskennung 304 ein Maskenregister wie eines der in einer Registerdatei eines Prozessors bereitgestellten Maskenregister. Eine beispielhafte Prozessorregisterdatei wird nachstehend unter Bezugnahme auf 30 beschrieben und dargestellt.
  • Die wahlweise Ursprungskennung 308 spezifiziert in einigen Ausführungsformen ein Ursprungsvektorregister wie die in einer Registerdatei eines Prozessors enthaltenen Vektorregister (siehe zum Beispiel die Darstellungen und die Diskussion der Ausführungsformen von 4C nachstehend). In einigen Ausführungsformen identifiziert die wahlweise Ursprungskennung 308 ein in der Registerdatei des Prozessors enthaltenes Allzweckregister, wie zum Beispiel unter Bezugnahme auf die Ausführungsform von 4C nachstehend dargestellt und diskutiert. 30 und die zugehörige Beschreibung weiter unten beschreiben eine Ausführungsform einer Registerdatei eines Prozessors. In einigen Ausführungsformen definiert die wahlweise Ursprungskennung 308 einen Speicherort.
  • Die wahlweise zweite Unmittelbare 310 ist in einigen Ausführungsformen von Vektoroperationen mit unmittelbaren Werten enthalten, zum Beispiel wie unter Bezugnahme auf die Ausführungsformen von 4D und 4E nachstehend dargestellt und diskutiert.
  • Die wahlweise Elementgrößenkennung 312 ist in einigen Ausführungsformen in dem Operationscode enthalten, wie als ein Präfix oder Suffix, „B“, „W“, „D“ und „Q“ korrespondierend mit einer Größe - 1 Byte, 2 Bytes, 4 Bytes bzw. 8 Bytes - jedes Bestimmungsvektorelements. In einigen Ausführungsformen ist die wahlweise Elementgrößenkennung 312 in dem Operationscode enthalten, wie als ein Präfix oder Suffix, „H“, „S“, „D“, „Q“ und „E“, korrespondierend mit Genauigkeitsniveaus - halbe Genauigkeit (2 Bytes), einfache Genauigkeit (4 Bytes), doppelte Genauigkeit (8 Bytes) bzw. vierfache Genauigkeit (16 Bytes) - des Bestimmungsvektorelements. In anderen Ausführungsformen ist die wahlweise Elementgrößenkennung 312 ein Parameter oder Operand der Anweisung und spezifiziert die Größe und/oder das Genauigkeitsniveau der Bestimmungsvektorelemente.
  • In einigen Ausführungsformen ist die wahlweise Schreibmaske 314 ein Mehrbitoperand, wobei jedes Bit steuert, ob ein korrespondierendes Element des Bestimmungsvektors maskiert wird. In einigen Ausführungsformen identifiziert die wahlweise Schreibmaske 314 ein Schreibmaskenregister in der Registerdatei des Prozessors. Wenn in einigen Ausführungsformen ein Element des Bestimmungsvektors maskiert wird, behält es den Wert bei, den es vor der Ausführung der Anweisung hatte, während in anderen Ausführungsformen, wenn ein Element des Bestimmungsvektors maskiert wird, es auf null gesetzt wird, wenn die Anweisung ausgeführt wird. In einigen Ausführungsformen wird durch ein maskiertes Elementsteuerfeld, das in die Anweisung für eine Vektoroperation mit einer Unmittelbaren aufzunehmen ist, spezifiziert, ob der Wert des Elements des Bestimmungsvektors seinen Wert beibehält oder genullt wird. Wenn ein Element des Bestimmungsvektors nicht maskiert wird, wird es auf den Wert gesetzt, der aus der Ausführung der Anweisung resultiert.
  • In einigen Ausführungsformen wird das Verhalten der wahlweisen Schreibmaske 314 durch die Verwendung einer besonderen Wahl des Operationscodes 302 oder durch ein Suffix oder Präfix des Operationscodes 302 spezifiziert. Zum Beispiel könnte ein Suffix oder Präfix „SZ“ dem Operationscode hinzugefügt werden, um anzugeben, dass maskierte Vektorelemente „auf Null zu setzen“ (Set to Zero) sind. Oder ein Präfix oder Suffix „ODD“ könnte dem Operationscode hinzugefügt werden, um anzugeben, dass ungeradzahlige Elemente des Bestimmungsvektors zu demaskieren sind.
  • Die 4A-4H veranschaulichen verschiedene Ausführungsformen zum Ausführen von Anweisungen für Vektoroperationen mit konstanten Werten.
  • 4A zeigt eine Ausführung einer Anweisung zum Rundsenden einer Unmittelbaren. Die Anweisung enthält einen Operationscode (z. B. pneumonisch „VBROADCASTIMM*“), eine Bestimmungskennung (zmm/ymm/xmm) zum Spezifizieren eines gepackten Bestimmungsregisters und eine Unmittelbare. Die Ausführung dieser Anweisung sendet die Unmittelbare (imm) rund zu sämtlichen der Vektorelemente (gepackte Daten) des gepackten Bestimmungsregisters (zmm/ymm/xmm). Das Beispiel weist das Register zmm2 als die Bestimmung und 0xF als die Unmittelbare auf. 0xF wird an jedes Element von zmm2 rundgesendet.
  • Der Operationscode pneumonisch VBROADCASTIMM* enthält ein Sternchen „*“, das angibt, dass verschiedene Steuerelemente hinzugefügt werden können, um die Operation der Anweisung zu steuern. Zum Beispiel könnte das Sternchen hier durch ein oder mehrere Suffixe wie „B“ oder „W“ oder „D“ oder „Q“ ersetzt werden, um die Größe der Vektorelemente von zmm2 als ein Byte, Wort, Doppelwort oder Vierfachwort zu spezifizieren.
  • Die Elemente des Bestimmungsvektors vor der Ausführung 402 werden als „x“ dargestellt, wodurch angegeben wird, dass der Wert gleichgültig ist. Sie sind bei der Diskussion der Operation dieser Anweisung nicht relevant. Die Unmittelbare 404 wird als einen Wert von 0xF aufweisend dargestellt. Als Reaktion auf eine decodierte Anweisung 401 zum Rundsenden einer Unmittelbaren verwendet die Ausführungsschaltung 406 die Rundsendeschaltung 407 zum Rundsenden der Unmittelbaren 404 an jedes Element des Bestimmungsvektorregisters. In dieser Darstellung wird das Bestimmungsvektorregister nach der Ausführung als 408 dargestellt. In einigen Ausführungsformen ist die Rundsendeschaltung 407 ein Querbalken.
  • 4B zeigt eine Ausführung einer Anweisung zum Rundsenden einer Unmittelbaren. Die Anweisung 411 enthält einen Operationscode (z. B. pneumonisch „VBROADCASTVREG*“), ein Bestimmungsvektorregister (SIMD, gepackte Daten) (zmm2/ymm2/xmm2) und eine Unmittelbare (imm1). Die Ausführung dieser Anweisung verwendet die Unmittelbare (imm1) zum Auswählen eines Elements des Ursprungsvektorregisters (zmm2/ymm2/xmm2) und sendet den ausgewählten Wert rund an sämtliche der Vektorelemente (gepackte Daten) des Bestimmungsregisters (zmm1/ymm1/xmm1).
  • Der Operationscode pneumonisch VBROADCASTVREG* enthält ein Sternchen „*“, das angibt, dass verschiedene Steuerelemente hinzugefügt werden können, um die Operation der Anweisung zu steuern. Zum Beispiel könnte das Sternchen hier durch ein oder mehrere Suffixe wie „B“ oder „W“ oder „D“ oder „Q“ ersetzt werden, um die Größe der Vektorelemente von zmm2 als ein Byte, Wort, Doppelwort oder Vierfachwort zu spezifizieren.
  • Die Elemente des Bestimmungsvektors vor der Ausführung 412 werden als „x“ dargestellt, wodurch angegeben wird, dass der Wert gleichgültig ist. Sie sind bei der Diskussion der Operation dieser Anweisung nicht relevant.
  • Das Beispiel zeigt das Register ymm1 als die Bestimmung, imm1 414 als einen Wert von 2 aufweisend und das Ursprungsregister xmm2 als einen Wert von 3 in seinem dritten Element aufweisend. Als Reaktion auf eine decodierte Anweisung 411 zum Rundsenden einer Unmittelbaren verwendet die Ausführungsschaltung 416 die Unmittelbare 414 zum Steuern des Multiplexers 415, ein drittes Element des Ursprungsregisters xmm2 413 (xmm2[2]) auszuwählen, und verwendet die Rundsendeschaltung 417 zum Rundsenden des ausgewählten Werts an jedes Element des Bestimmungsvektorregisters ymm1 418. In einigen Ausführungsformen ist die Rundsendeschaltung 417 ein Querbalken.
  • 4C zeigt eine Ausführung einer Anweisung zum Rundsenden einer Unmittelbaren mit einem Schritt. Die Anweisung enthält einen Operationscode (z. B. pneumonisch „VBROADCASTSTRIMM*“), ein Bestimmungsvektorregister (SIMD, gepackte Daten) (zmm1/ymm1/xmm1), ein Ursprungsallzweckregister (m/reg) und eine Unmittelbare imm1. Die Ausführung dieser Anweisung setzt ein erstes Element des Bestimmungsvektorregisters (zmm1/ymm1/xmm1) auf den Wert des Ursprungsallzweckregisters (m/reg 423) und verwendet Addierer 427A-427G zum Addieren eines durch die Unmittelbare imm1 424 spezifizierten Schritt-Werts zu anschließenden Elementen des Bestimmungsvektorregisters 428.
  • Der Operationscode pneumonisch VBROADCASTSTRIMM* enthält ein Sternchen „*“, das angibt, dass verschiedene Steuerelemente hinzugefügt werden können, um die Operation der Anweisung zu steuern. Zum Beispiel könnte das Sternchen hier durch ein oder mehrere Suffixe wie „B“ oder „W“ oder „D“ oder „Q“ ersetzt werden, um die Größe der Vektorelemente von zmm2 als ein Byte, Wort, Doppelwort oder Vierfachwort zu spezifizieren.
  • Die Elemente des Bestimmungsvektorregisters ymm1 vor der Ausführung 422 werden als „x“ dargestellt, wodurch angegeben wird, dass der Wert gleichgültig ist. Sie sind bei der Diskussion der Operation dieser Anweisung nicht relevant. Das Beispiel hat das Register ymm1 422 als die Bestimmung, verwendet ein erstes Element des Bestimmungsvektors, dargestellt nach der Ausführung als ymm1 428, auf 0x333, der in dem Allzweckregister m/reg gespeicherte Wert, und addiert nacheinander einen Schritt-Wert von 2, wie durch imm1 spezifiziert, zu jedem der nachfolgenden Element von ymm1 428. Als Reaktion auf eine decodierte Anweisung 421 zum Rundsenden einer Unmittelbaren mit einem Schritt setzt die Ausführungsschaltung 426 ein erstes Element des Bestimmungsvektorregisters ymm1 428 auf den in dem Allzweckregister 423 gespeicherten Wert, der 333 ist, und verwendet die Addierer 427A-427G, nacheinander einen in imm1 424 gespeicherten Wert, der 2 ist, zu jedem des zweiten und der nachfolgenden Elemente zu addieren.
  • Wie dargestellt, ist ymm1 428 gemäß der Little-Endian-Anordnung geordnet, bei der das niederwertigste Element an der rechten Seite dargestellt wird. In einigen Ausführungsformen ist ymm1 428 gemäß der Big-Endian-Anordnung geordnet.
  • 4D zeigt eine Ausführung einer Anweisung zum Rundsenden einer Unmittelbaren mit einem Schritt. Die Anweisung enthält einen Operationscode (z. B. pneumonisch „VBROADCASTSTRVREG*“), ein Bestimmungsvektorregister (SIMD, gepackte Daten) (zmm1/ymm1/xmm1), ein Ursprungsvektorregister (SIMD, gepackte Daten) (zmm2/ymm2/xmm2), eine erste Unmittelbare (imm1) und eine zweite Unmittelbare (imm2). Die Ausführung dieser Anweisung verwendet die erste Unmittelbare imm1 zum Auswählen eines Elements des Ursprungsvektorregisters (SIMD, gepackte Daten) (zmm2/ymm2/xmm2), setzt ein erstes Datenelement des Bestimmungsvektorregisters (SIMD, gepackte Daten) (zmm1/ymm1/xmm1) auf den Wert des ausgewählten Elements und addiert nacheinander einen durch die zweite Unmittelbare spezifizierten Schritt-Wert zu dem zweiten und den nachfolgenden Elementen des Bestimmungsvektorregisters (zmm1/ymm1/xmm1).
  • Der Operationscode pneumonisch VBROADCASTSTRVREG* enthält ein Sternchen „*“, das angibt, dass verschiedene Steuerelemente hinzugefügt werden können, um die Operation der Anweisung zu steuern. Zum Beispiel könnte das Sternchen hier durch ein oder mehrere Suffixe wie „B“ oder „W“ oder „D“ oder „Q“ ersetzt werden, um die Größe der Vektorelemente von zmm2 als ein Byte, Wort, Doppelwort oder Vierfachwort zu spezifizieren.
  • Das Beispiel weist das Register ymm1 als die Bestimmung, imm1 434 als die erste Unmittelbare, den Ursprungsvektor xmm2 433 und die zweiten Unmittelbare imm2 435 auf. Die Elemente von ymm1 vor der Ausführung 432 und sämtliche außer Element [1] von xmm2 433 werden als „x“ dargestellt, wodurch angegeben wird, dass der Wert gleichgültig ist Sie sind bei der Diskussion der Operation dieser Anweisung nicht relevant. Als Reaktion auf eine decodierte Anweisung 431 zum Rundsenden einer Unmittelbaren mit einem Schritt verwendet die Ausführungsschaltung 437 den Multiplexer 436, gesteuert durch imm1 434, mit einem Wert von 1, zum Auswählen des ersten (Index=1) Elements des Ursprungsvektorregisters xmm2 433, mit einem Wert von 33, und setzt ein erstes Element des Bestimmungsvektorregisters ymm1 439 auf das ausgewählte Element. Die Ausführungsschaltung 437 verwendet ferner die Addierer 438A-438G zum aufeinanderfolgenden Addieren eines Schritt-Werts von „2“, spezifiziert durch imm2 435, zu dem zweiten und den nachfolgenden Elementen von ymm1 439.
  • 4E zeigt eine Ausführung einer Anweisung zum Rundsenden einer Unmittelbaren mit einem Schritt. Die Anweisung 441 enthält einen Operationscode (z. B. pneumonisch „VBROADCASTSTRIMMMSKED*“), ein Bestimmungsvektorregister (SIMD, gepackte Daten) (zmm1/ymm1/xmm1), eine Schreibmaske (k1), ein maskiertes Elementsteuerfeld (z), eine erste Unmittelbare (imm1) und eine zweite Unmittelbare (imm2). Die Ausführung dieser Anweisung verwendet die erste Unmittelbare (imm1) zum Setzen eines ersten nicht maskierten Elements des Bestimmungsvektorregister (zmm1/ymm1/xmm1) und addiert aufeinanderfolgend einen durch die zweite Unmittelbare imm2 spezifizierten Schritt-Wert zu dem zweiten und nachfolgenden nicht maskierten Elementen des Bestimmungsvektorregisters (zmm1/ymm1/xmm1). In einer Ausführungsform bewirkt das maskierte Elementsteuerfeld z, wenn es gleich null ist, die Ausführung dieser Anweisung, um maskierte Bestimmungsvektorelemente zu nullen, und wenn es gleich 1 ist, bewirkt es die Ausführung dieser Anweisung, um zu gestatten, dass maskierte Bestimmungsvektorelemente ihre vorherigen Werte beibehalten.
  • Der Operationscode pneumonisch VBROADCASTSTRIMMMSKED* enthält ein Sternchen „*“, das angibt, dass verschiedene Steuerelemente hinzugefügt werden können, um die Operation der Anweisung zu steuern. Zum Beispiel könnte das Sternchen hier durch ein oder mehrere Suffixe wie „B“ oder „W“ oder „D“ oder „Q“ ersetzt werden, um die Größe der Vektorelemente von ymm1 als ein Byte, Wort, Doppelwort oder Vierfachwort zu spezifizieren.
  • Das Beispiel weist ymm1 als die Bestimmung auf, wobei Elemente von ymm1 vor der Ausführung 442 als „x“ dargestellt werden, wodurch angegeben wird, dass der Wert gleichgültig ist. Sie sind bei der Diskussion der Operation dieser Anweisung nicht relevant. Als Reaktion auf eine decodierte Anweisung 441 zum Rundsenden einer Unmittelbaren mit einem Schritt verwendet die Ausführungsschaltung 446 die Rundsendeschaltung 448 unter der Schreibmaske k1 445 zum Setzen eines ersten nicht maskierten Elements von ymm1 499 auf 55, spezifiziert durch imm1 443, und verwendet die Addierer 447A bis 447D zum aufeinanderfolgenden Addieren eines Schritt-Werts von 3, spezifiziert durch imm2 444, zu dem zweiten und nachfolgenden nicht maskierten Elementen von ymm1 449. In einigen Ausführungsformen ist die Rundsendeschaltung 448 ein Querbalken. Das Beispiel weist das maskierte Elementsteuerfeld z 450 gleich null auf, wodurch bewirkt wird, dass die Ausführungsschaltung maskierte Elemente von ymm1 449 nullt.
  • 4F zeigt eine Ausführung einer Anweisung zum Rundsenden einer Unmittelbaren an eine Schreibmaske. Die Anweisung 451 enthält einen Operationscode (z. B. pneumonisch „KBROADCASTIMM2MSK*“), eine Bestimmungsschreibmaske k1, eine Schreibmaske k2 und eine Unmittelbare (imm1). Die Ausführung dieser Anweisung partitioniert die Schreibmaske k1 logisch in logische Bereiche gleicher Größe, die die gleiche Größe wie imm1 aufweisen, verwendet die Schreibmaske k2 zum Identifizieren nicht maskierter Bereiche der Bestimmungsschreibmaske k1 und sendet imm1 rund an die nicht maskierten logischen Bereiche.
  • Der Operationscode pneumonisch KBROADCASTIMM2MSK* enthält ein Sternchen „*“, das angibt, dass verschiedene Steuerelemente hinzugefügt werden können, um die Operation der Anweisung zu steuern. Zum Beispiel könnte das Sternchen hier durch ein oder mehrere Suffixe wie „B“ oder „W“ oder „D“ oder „Q“ ersetzt werden, um die Anzahl von zu schreibenden niederwertigsten Bits der Bestimmungsschreibmaske k1 zu spezifizieren, wobei die Größe ein Byte, Wort, Doppelwort oder Vierfachwort ist.
  • Das Beispiel weist die Schreibmaske k1 als die Bestimmung auf, wobei Elemente der Schreibmaske k1 vor der Ausführung 452 als „x“ dargestellt werden, wodurch angegeben wird, dass der Wert gleichgültig ist. Sie sind bei der Diskussion der Operation dieser Anweisung nicht relevant. Als Reaktion auf eine decodierte Anweisung 451 zum Rundsenden einer Unmittelbaren an eine Schreibmaske partitioniert die Ausführungsschaltung 455 die Bestimmungsschreibmaske k1 logisch in logische Bereiche gleicher Größe, die die gleiche Größe wie imm1 454 von 8 Bit aufweisen, und verwendet die Schreibmaske k2 453 und den Multiplexer 456 zum Auswählen eines Werts, der in jedes der Elemente von k1 458 zu schreiben ist. Wenn sie maskiert sind (z. B. wenn k2[i] gleich 0 ist), wird der alte Wert eines korrespondierenden Elements von k1 ausgewählt, und wenn sie nicht maskiert sind (z. B. wenn k2[i] gleich 1 ist), wird die Unmittelbare imm1 454 ausgewählt und in den korrespondierenden logischen Bereich von k1 geschrieben; wie dargestellt wird imm1 454 in den ersten, sechsten, siebten und achten logischen Bereich von k1 geschrieben. Es ist zu beachten, dass die Schreibmaske k2 wahlweise ist, und wenn keine Schreibmaske k2 bereitgestellt wird, wird jeder logische Bereich von k1 auf die Unmittelbare gesetzt.
  • Einige Beispiele von vektorfreundlichen Anweisungsformaten werden unter Bezugnahme auf die 29A-29C beschrieben. Beim Vergleichen von 4F mit den 29A-29C wird in einigen Ausführungsformen der Operationscode KBROADCASTIMM2MSK* auf das Basisoperationsfeld 2942 (29B) abgebildet. In einigen Ausführungsformen werden die Bestimmungsschreibmaskenkennung k1, die Ursprungsschreibmaskenkennung k2 und die Unmittelbare imm1 auf das Registerindexfeld 2944 (29A) abgebildet, das nachstehend als ausreichend Bits N zum Identifizieren von drei Ursprungs- und einem Bestimmungsregister enthaltend beschrieben wird.
  • 4G zeigt eine Ausführung einer Anweisung zum Setzen eines Bestimmungsmaskenregisters zum Schreiben eines Ergebnisses einer Operation an einer Unmittelbaren. Die Anweisung 461 enthält einen Operationscode (z. B. pneumonisch „KXORKREGIMM*“), ein Bestimmungsschreibmaskenregister (k1), ein Ursprungsschreibmaskenregister (k2) und eine Unmittelbare (imm1). Die Ausführung dieser Anweisung führt eine Operation unter Verwendung der Unmittelbaren imm1 und des Ursprungsmaskenregisters k2 durch und schreibt das Ergebnis in das Bestimmungsmaskenregister k1.
  • Der Operationscode pneumonisch KXORKREGIMM* enthält ein Sternchen „*“, das angibt, dass verschiedene Steuerelemente hinzugefügt werden können, um die Operation der Anweisung zu steuern. Zum Beispiel könnte das Sternchen hier durch ein oder mehrere Suffixe wie „B“ oder „W“ oder „D“ oder „Q“ ersetzt werden, um die Anzahl von zu schreibenden niederwertigsten Bits des Bestimmungsmaskenregisters k1 zu spezifizieren, wobei die Größe ein Byte, Wort, Doppelwort oder Vierfachwort ist.
  • Das Beispiel zeigt die Schreibmaske k1 als die Bestimmung, wobei Elemente der Schreibmaske k1 vor der Ausführung 462 als „x“ dargestellt werden, wodurch angegeben wird, dass der Wert gleichgültig ist. Sie sind bei der Diskussion der Operation dieser Anweisung nicht relevant. Als Reaktion auf eine decodierte Anweisung 461 zum Setzen einer Schreibmaske auf Ergebnisse einer Operation verwendet die Ausführungsschaltung ein XOR-Gatter 466 zum Durchführen eines bitweisen XOR der Ursprungsschreibmaske k2 463, die einen Wert von 0x00 aufweist, und der Unmittelbaren imm1 464 von 8 Bit, die einen anfänglichen Wert von 0x035 aufweist, und schreibt das Ergebnis, 0x35, in das Bestimmungsschreibmaskenregister k1 468.
  • Die Ausführungsform von 4G veranschaulicht Vorteile der Ausführungsform: Verwenden eines Registerdateiorts zum Speichern einer Unmittelbaren, während vermieden wird, Allzweckregister und Vektorregister der Registerdatei zu verwenden. In einigen Ausführungsformen wird die Unmittelbare imm1, wie in k1 468 gespeichert, direkt durch Ausführungshardware verwendet. In anderen Ausführungsformen wird eine Anweisung, zum Beispiel KMOV, verwendet, den Inhalt von k1 zu einem Allzweckregister 469 zur Verwendung bei der Ausführung zu verlagern.
  • 4H zeigt eine Ausführung einer Anweisung zum Rundsenden eines Ergebnisses einer Operation an einer Unmittelbaren. Die Anweisung 470 enthält einen Operationscode (z. B. pneumonisch „VPADD3OPR*“), ein Bestimmungsvektorregister (SIMD, gepackte Daten) (zmm1/ymm1/xmm1), eine Schreibmaske (k1), ein maskiertes Elementsteuerfeld (z), ein Ursprungsvektorregister (SIMD, gepackte Daten) (zmm2/ymm2/xmm2) und eine Unmittelbare (imm1). Die Ausführung dieser Anweisung verwendet die Schreibmaske k1 zum Identifizieren nicht maskierter Elemente des Bestimmungsvektorregisters (zmm1/ymm1/xmm1), erzeugt eine Summe jedes Elements des Bestimmungsvektorregisters (SIMD, gepackte Daten) (zmm1/ymm1/xmm1) plus dem korrespondierenden Element des Ursprungsvektorregisters (zmm2/ymm2/xmm2) plus der Unmittelbaren imm1, um die Summe an jedes nicht maskierte Elemente des Bestimmungsvektorregisters (zmm1/ymm1/xmm1) rundzusenden.
  • Der Operationscode pneumonisch VPADD3OPR* enthält ein Sternchen „*“, das angibt, dass verschiedene Steuerelemente hinzugefügt werden können, um die Operation der Anweisung zu steuern. Zum Beispiel könnte das Sternchen hier durch ein oder mehrere Suffixe wie „B“ oder „W“ oder „D“ oder „Q“ ersetzt werden, um die Größe der Vektorelemente von zmm2 als ein Byte, Wort, Doppelwort oder Vierfachwort zu spezifizieren.
  • Das Beispiel zeigt xmm1 471, von dem jedes Element einen anfänglichen Wert von 0x33 aufweist, als die Bestimmung, xmm2 472, von dem jedes Element einen Wert von 0x22 aufweist, als den Ursprung, die Unmittelbare imm1 mit einem Wert von 0x11 und die Schreibmaske k1 mit einem Wert von 0x55. Als Reaktion auf eine decodierte Anweisung zum Rundsenden eines Ergebnisses einer Operation an einer Unmittelbaren (VPADD3OPR*) erzeugt die Ausführungsschaltung 476 eine Summe von xmm1[i] plus xmm2[i] plus der Unmittelbaren für jedes Element von xmm1 und verwendet den Multiplexer 477, gesteuert durch die Schreibmaske k1, zum Rundsenden der Summe an nicht maskierte Elemente des Bestimmungsvektors xmm1. Das maskierte Elementsteuerfeld z 474 steuert, wie maskierte Elemente des Bestimmungsvektors zu behandeln sind. Das maskierte Elementsteuerfeld z weist einen Wert von null auf, der spezifiziert, dass maskierte Elemente des Bestimmungsvektorregisters xmm 478 zu nullen sind. In einigen Ausführungsformen, wenn z = 1 ist, behalten maskierte Elemente des Bestimmungsvektorregisters ihre vorherigen Werte bei.
  • ANWEISUNG VBROADCASTIMM
  • Beispielhafte Ausführung
  • Hierin werden Ausführungsformen einer Anweisung VBROADCASTIMM zum Verbessern eines Computers selbst angeführt. Insbesondere bewirkt die Ausführung der Anweisung VBROADCASTIMM Rundsenden einer Unmittelbaren an sämtliche der Elemente eines gepackten Bestimmungsregisters.
  • 5 zeigt eine beispielhafte Ausführung einer Anweisung VBROADCASTIMM. Das Format der Anweisung VBROADCASTIMM 500, 502 enthält Felder für einen Operationscode 504 (z. B. pneumonisch „VBROADCASTIMM“), eine Bestimmungskennung 506 zum Spezifizieren des gepackten Bestimmungsregisters 506 und eine Unmittelbare (imml 508).
  • Als Reaktion auf eine Anweisung mit einem Operationscode 504 gleich VBROADCASTIMM verwendet die Ausführungsschaltung 510 die Rundsendeschaltung 512 zum Rundsenden von imm1 508 an sämtliche der Vektorelemente (gepackte Daten) des gepackten Bestimmungsregisters 514. Das Beispiel weist 0xF als imm1 508 auf. 0xF wird an sämtliche der Vektorelemente (gepackte Daten) des gepackten Bestimmungsregisters 514 rundgesendet.
  • Beispielhafte Hardware zum Ausführen der Anweisung VBROADCASTIMM
  • 6 zeigt eine Ausführungsform von Hardware zum Verarbeiten einer Anweisung wie eine Anweisung VBROADCASTIMM. Wie dargestellt, speichert der Speicher 604 eine Anweisung VBROADCASTIMM 601, die auszuführen ist.
  • Die Anweisung wird von der Decodierungsschaltung 605 empfangen. Zum Beispiel empfängt die Decodierungsschaltung 605 die Anweisung von der Abruflogik/-schaltung. Die Anweisung 601 enthält Felder für einen Operationscode (z. B. pneumonisch „VBROADCASTIMM“), eine Bestimmungskennung zum Spezifizieren eines gepackten Bestimmungsregisters und eine Unmittelbare. Ausführlichere Ausführungsformen mindestens eines Anweisungsformats werden nachstehend ausführlicher veranschaulicht. Die Decodierungsschaltung 605 decodiert die Anweisung in eine oder mehrere Operationen. In einigen Ausführungsformen enthält dieses Decodieren Erzeugen einer Vielzahl von Mikrooperationen, die durch die Ausführungsschaltung (wie die Ausführungsschaltung 609 oder 510) durchzuführen sind. Die Decodierungsschaltung 605 decodiert außerdem Anweisungspräfixe (falls verwendet).
  • In einigen Ausführungsformen stellen Registerumbenennung, Registerzuteilung und/oder eine Terminierungsschaltung 607 Funktionalität für eines oder mehrere von Folgendem bereit: 1) Umbenennen logischer Operandenwerte in physikalische Operandenwerte (z. B. eine Registeraliastabelle in einigen Ausführungsformen), 2) Zuteilen von Statusbits und -flags zu der decodierten Anweisung und 3) Terminieren der decodierten Anweisung für Ausführung in der Ausführungsschaltung aus einem Anweisungsvorrat (z. B. unter Verwendung einer Reservierungsstation in einigen Ausführungsformen).
  • Die Register (Registerdatei) und/oder der Speicher 608 speichern Daten als Operanden der Anweisung, an der durch die Ausführungsschaltung Operationen durchzuführen sind. Beispielhafte Typen von Registern enthalten gepackte Datenregister, Allzweckregister und Fließkommaregister.
  • Die Ausführungsschaltung 609 führt die decodierte Anweisung VBROADCASTIMM aus. Eine Ausführungsform der Ausführungsschaltung 510 wurde in 5 dargestellt. Die Rückschreib-(Ablage-)schaltung 611 übergibt das Ergebnis der Ausführung der decodierten Anweisung VBROADCASTIMM.
  • Beispielhafte Formate der Anweisung VBROADCASTIMM
  • In einigen Ausführungsformen übergibt die Ablage-/Rückschreibschaltung das Bestimmungsregister architektonisch in das Register oder den Speicher und legt die Anweisung ab.
  • Eine Ausführungsform eines Formats für eine Anweisung VBROADCASTIMM ist OPCODE DSTREG, IMM1. In einigen Ausführungsformen ist VBROADCASTIMM {B/W/D/Q} die Operationscode-Mnemonik der Anweisung. DSTREG ist ein Feld für den Operanden des gepackten Bestimmungsregisters. IMM1 ist ein Feld für eine Unmittelbare, die an das gepackte Bestimmungsregister rundzusenden ist.
  • In einigen Ausführungsformen ist das Feld OPCODE ein vollständiges Operationscodefeld (wie 2974) oder ein eigentliches Operationscodefeld (wie 2930), ist das Feld DSTREG ein Reg-Feld (wie 2944) und ist das Feld IMM1 ein IMM8-Feld (wie 2972).
  • In einigen Ausführungsformen enthält die Anweisung VBROADCASTIMM ein Feld für einen Schreibmaskenregisteroperanden (k) (z. B. VBROADCASTIMM{k} DSTREG, SRC1, SRC2). Eine Schreibmaske wird verwendet, um Operationen und Aktualisieren von Ergebnissen bedingt pro Element zu steuern. In Abhängigkeit von der Implementierung verwendet die Schreibmaske Misch- oder Nullungsmaskierung. Mit einem Prädikatoperanden (writemask, Schreibmaske oder k-Register) codierte Anweisungen verwenden diesen Operanden, um Berechnungsoperationen und Aktualisieren von Ergebnissen zum Bestimmungsoperanden bedingt pro Element zu steuern. Der Prädikatoperand ist als das Opmask-(Schreibmasken-)Register bekannt. In einigen Ausführungsformen ist die Opmask ein Satz von architektonischen Registern der Größe von 64 Bit. Es ist zu beachten, dass aus diesem Satz von architektonischen Registern nur k1 bis k7 als Prädikatoperand adressiert werden können. k0 kann als ein regulärer Ursprung oder eine Bestimmung verwendet werden, kann aber nicht als Prädikatoperand codiert werden. Außerdem ist zu beachten, dass ein Prädikatoperand verwendet werden kann, Speicherfehlerunterdrückung für einige Anweisungen mit einem Speicheroperanden (Ursprung oder Bestimmung) zu ermöglichen. Als ein Prädikatoperand enthalten die Opmask-Register ein Bit zum Lenken der Operation/Aktualisierung zu jedem Datenelement eines Vektorregisters. Im Allgemeinen können Opmask-Register Anweisungen mit folgenden Elementgrößen unterstützen: Fließkomma einfacher Genauigkeit (float32), ganzzahliges Doppelwort (int32), Fließkomma doppelter Genauigkeit (float64), ganzzahliges Vierfachwort (int64). Die Länge eines Opmask-Registers, MAX_KL, ist ausreichend zum Handhaben von bis zu 64 Elementen mit einem Bit pro Element, d. h. 64 Bits. Für eine gegebene Vektorlänge greift jede Anweisung nur auf die Anzahl von niederwertigsten Maskierungsbits zu, die basierend auf seinem Datentyp benötigt werden.
  • Ein Opmask-Register beeinflusst eine Anweisung mit einer Granularität pro Element. Demgemäß werden jede numerische oder nicht numerische Operation jedes Datenelements sowie Aktualisierungen pro Element von unmittelbaren Ergebnissen des Bestimmungsoperanden an dem korrespondierenden Bit des Opmask-Registers mit Prädikaten versehen. In den meisten Ausführungsformen entspricht eine Opmask, die als ein Prädikatoperand dient, den folgenden Eigenschaften: 1) die Operation der Anweisung wird nicht für ein Element durchgeführt, wenn das korrespondierende Opmask-Bit nicht gesetzt ist (dies impliziert, dass keine Ausnahme oder Verletzung durch eine Operation an einem abgedeckten Element verursacht werden kann und infolgedessen kein Ausnahmeflag als ein Ergebnis einer abgedeckten Operation aktualisiert wird); 2) ein Bestimmungselement wird nicht mit dem Ergebnis der Operation aktualisiert, wenn das korrespondierende Schreibmaskenbit nicht gesetzt ist; stattdessen muss der Wert des Bestimmungselements beibehalten (Mischmaskierung) oder herausgenullt werden (Nullungsmaskierung); und 3) für einige Anweisungen mit einem Speicheroperanden werden Speicherfehler für Elemente mit einem Maskenbit von 0 unterdrückt. Es ist zu beachten, dass dieses Merkmal ein vielseitiges Konstrukt zum Implementieren von Steuerflussvorhersagen bereitstellt, da die wirksame Maske ein Mischverhalten für Vektorregisterbestimmungen bereitstellt. Als eine Alternative kann die Maskierung zum Nullen anstelle von Mischen verwendet werden, so dass die abgedeckten Elemente mit 0 aktualisiert werden, anstatt den alten Wert beizubehalten. Das Nullungsverhalten wird bereitgestellt, um die implizite Abhängigkeit von dem alten Wert zu beseitigen, wenn sie nicht benötigt wird.
  • In Ausführungsformen enthalten Codierungen der Anweisung einen Speicheradressierungsoperanden eines Skalenindexbasis- bzw. SIB-Typs, der mehrere indexierte Bestimmungsorte im Speicher indirekt identifiziert. In einer Ausführungsform kann ein Speicheroperand des SIB-Typs eine Codierung enthalten, die ein Basisadressregister identifiziert. Der Inhalt des Basisadressregisters kann eine Basisadresse im Speicher repräsentieren, von dem die Adressen der besonderen Bestimmungsorte im Speicher berechnet werden. Zum Beispiel kann die Basisadresse die Adresse des ersten Orts in einem Block möglicher Bestimmungsorte für eine erweiterte Vektoranweisung sein. In einer Ausführungsform kann ein Speicheroperand des SIB-Typs eine Codierung enthalten, die ein Indexregister identifiziert. Jedes Element des Indexregisters kann einen Index oder Versatzwert spezifizieren, der verwendbar ist, von der Basisadresse eine Adresse eines jeweiligen Bestimmungsorts in einem Block möglicher Bestimmungsorte zu berechnen. In einer Ausführungsform kann ein Speicheroperand des SIB-Typs eine Codierung enthalten, die einen Skalierungsfaktor spezifiziert, der auf jeden Indexwert beim Berechnen einer jeweiligen Bestimmungsadresse anzuwenden ist. Wenn zum Beispiel ein Skalierungsfaktor von vier in dem Speicheroperanden des SIB-Typs codiert ist, kann jeder von einem Element des Indexregisters erhaltene Indexwert mit vier multipliziert und dann zu der Basisadresse addiert werden, um eine Bestimmungsadresse zu berechnen.
  • In einer Ausführungsform kann ein Speicheroperand des SIB-Typs der Form vm32{x, y, z} eine Vektoranordnung von Speicheroperanden identifizieren, spezifiziert unter Verwendung von Speicheradressierung des SIB-Typs. In diesem Beispiel wird die Anordnung von Speicheradressen unter Verwendung eines gemeinsamen Basisregisters, eines konstanten Skalierungsfaktors und eines Vektorindexregisters, das einzelne Elemente enthält, von denen jedes ein Indexwert von 32 Bit ist, spezifiziert. Das Vektorindexregister kann ein Register von 128 Bit (z. B. XMM) (vm32x), ein Register von 256 Bit (z. B. YMM) (vm32y) oder ein Register von 512 Bit (z. B. ZMM) (vm32z) sein. In einer anderen Ausführungsform kann ein Speicheroperand des SIB-Typs der Form vm64{x, y, z} eine Vektoranordnung von Speicheroperanden identifizieren, spezifiziert unter Verwendung von Speicheradressierung des SIB-Typs. In diesem Beispiel wird die Anordnung von Speicheradressen unter Verwendung eines gemeinsamen Basisregisters, eines konstanten Skalierungsfaktors und eines Vektorindexregisters, das einzelne Elemente enthält, von denen jedes ein Indexwert von 64 Bit ist, spezifiziert. Das Vektorindexregister kann ein Register von 128 Bit (z. B. XMM) (vm64x), ein Register von 256 Bit (z. B. YMM) (vm64y) oder ein Register von 512 Bit (z. B. ZMM) (vm64z) sein.
  • Beispielhaftes Verfahren zur Ausführung der Anweisung VBROADCASTIMM
  • 7 zeigt eine Ausführungsform eines Verfahrens, das von einem Prozessor durchgeführt wird, um eine Anweisung VBROADCASTIMM zu verarbeiten. Zum Beispiel führen die Prozessorkomponenten von 6, eine Pipeline, wie nachstehend ausgeführt, usw. dieses Verfahren durch.
  • Bei 701 wird eine Anweisung abgerufen. Zum Beispiel wird eine Anweisung VBROADCASTIMM abgerufen. Die Anweisung VBROADCASTIMM enthält Felder für einen Operationscode, eine Unmittelbare und einen Bestimmungsoperanden. In einigen Ausführungsformen enthält die Anweisung ferner ein Feld für eine Schreibmaske. In einigen Ausführungsformen wird die Anweisung aus einem Anweisungscache abgerufen. Der Bestimmungsoperand spezifiziert ein gepacktes Datenvektorregister. Der Operationscode der Anweisung VBROADCASTIMM gibt an, dass eine Unmittelbare (IMM) rundgesendet (BROADCAST) wird.
  • Die abgerufene Anweisung wird bei 703 decodiert. Zum Beispiel wird die abgerufene Anweisung VBROADCASTIMM durch eine Decodierungsschaltung wie die hierin angeführte decodiert.
  • Bei 705 wird die decodierte Anweisung terminiert (nach Erfordernis).
  • Bei 707 wird die terminierte Anweisung durch eine Ausführungsschaltung (Hardware) wie die Ausführungsschaltung 510 ausgeführt. Für die Anweisung VBROADCASTIMM wird die Ausführung bewirken, dass die Ausführungsschaltung 510 eine Rundsendeschaltung (wie 512) zum Rundsenden von imm1 (wie 508) an sämtliche der Vektorelemente (gepackte Daten) des gepackten Bestimmungsregisters 514 verwendet.
  • In einigen Ausführungsformen wird die Anweisung bei 709 übergeben oder abgelegt.
  • ANWEISUNG VBROADCASTVREG
  • Beispielhafte Ausführung
  • Hierin werden Ausführungsformen einer Anweisung VBROADCASTVREG zum Verbessern eines Computers selbst angeführt. Insbesondere bewirkt die Ausführung der Anweisung VBROADCASTVREG das Auswählen einer in einem gepackten Ursprungsregister gespeicherten Unmittelbaren und das Rundsenden des ausgewählten Elements an sämtliche der Elemente eines gepackten Bestimmungsregisters.
  • 8 zeigt eine beispielhafte Ausführung einer Anweisung VBROADCASTVREG. Das Format der Anweisung VBROADCASTVREG 800, 802 enthält Felder für einen Operationscode 804 (z. B. pneumonisch „VBROADCASTVREG“), eine Bestimmungskennung 806 zum Spezifizieren eines gepackten Bestimmungsregisters 806, ein Ursprungsvektorregister (SIMD, gepackte Daten) 808 und eine Unmittelbare (imm1 810).
  • Als Reaktion auf eine Anweisung mit einem Operationscode 804 gleich VBROADCASTVREG verwendet die Ausführungsschaltung 814 den Multiplexer 816, gesteuert durch imm1 810, zum Auswählen eines Elements des gepackten Datenregisters 812 und verwendet die Rundsendeschaltung 818 zum Rundsenden des ausgewählten Elements an sämtliche der Vektorelemente (gepackte Daten) des gepackten Bestimmungsregisters 820. Das Beispiel weist 2 als imm1 810 und 0x0F als das dritte Element des gepackten Ursprungs 812 auf, 0x0F wird aus dem Ursprungsregister mit gepackten Daten ausgewählt und an sämtliche der Vektorelemente (gepackte Daten) des gepackten Bestimmungsregisters 820 rundgesendet.
  • Einige Vektorelemente von 8 werden als „x“ dargestellt, wodurch angegeben wird, dass der Wert gleichgültig ist. Sie sind bei der Diskussion der Operation dieser Anweisung nicht relevant.
  • Beispielhafte Hardware zum Ausführen der Anweisung VBROADCASTVREG
  • 9 zeigt eine Ausführungsform von Hardware zum Verarbeiten einer Anweisung wie eine arithmetische Wiederholungsanweisung. Wie dargestellt, speichert der Speicher 903 eine Anweisung VBROADCASTVREG 901, die auszuführen ist.
  • Die Anweisung wird von der Decodierungsschaltung 905 empfangen. Zum Beispiel empfängt die Decodierungsschaltung 905 die Anweisung von der Abruflogik/-schaltung. Die Decodierungsschaltung 905 decodiert die Anweisung in eine oder mehrere Operationen. In einigen Ausführungsformen enthält dieses Decodieren Erzeugen einer Vielzahl von Mikrooperationen, die durch die Ausführungsschaltung (wie die Ausführungsschaltung 909 oder 814) durchzuführen sind. Die Decodierungsschaltung 905 decodiert außerdem Anweisungspräfixe (falls verwendet).
  • In einigen Ausführungsformen stellen Registerumbenennung, Registerzuteilung und/oder eine Terminierungsschaltung 907 Funktionalität für eines oder mehrere von Folgendem bereit: 1) Umbenennen logischer Operandenwerte in physikalische Operandenwerte (z. B. eine Registeraliastabelle in einigen Ausführungsformen), 2) Zuteilen von Statusbits und -flags zu der decodierten Anweisung und 3) Terminierung der decodierten Anweisung für Ausführung in der Ausführungsschaltung aus einem Anweisungsvorrat (z. B. unter Verwendung einer Reservierungsstation in einigen Ausführungsformen).
  • Die Register (Registerdatei) und/oder der Speicher 908 speichern Daten als Operanden der Anweisung, an der durch die Ausführungsschaltung Operationen durchzuführen sind. Beispielhafte Typen von Registern enthalten gepackte Datenregister, Allzweckregister und Fließkommaregister.
  • Die Ausführungsschaltung 909 führt die decodierte Anweisung VBROADCASTVREG aus. Eine Ausführungsform der Ausführungsschaltung 814 wurde in 8 dargestellt. Die Rückschreib-(Ablage-)schaltung 911 übergibt das Ergebnis der Ausführung der decodierten Anweisung VBROADCASTVREG.
  • Beispielhafte Formate der Anweisung VBROADCASTVREG
  • In einigen Ausführungsformen übergibt die Ablage-/Rückschreibschaltung das Bestimmungsregister architektonisch in das Register oder den Speicher und legt die Anweisung ab.
  • Eine Ausführungsform eines Formats für eine Anweisung VBROADCASTVREG ist OPCODE DSTREG, DSRCREG, IMM1. In einigen Ausführungsformen ist VBROADCASTVREG {B/W/D/Q} die Operationscode-Mnemonik der Anweisung. SRCREG ist ein Feld zum Identifizieren des gepackten Ursprungsregisteroperanden. DSTREG ist ein Feld zum Identifizieren des gepackten Bestimmungsregisteroperanden. IMM1 ist ein Feld für eine Unmittelbare, die zu verwenden ist, ein Element des Ursprungsvektorregisters auszuwählen.
  • In einigen Ausführungsformen ist das Feld OPCODE ein vollständiges Operationscodefeld (wie 2974) oder ein eigentliches Operationscodefeld (wie 2930), ist das Feld SRCREG ein Reg-Feld (wie 2944), ist das Feld DSTREG ein R/M-Feld (wie 2946) und ist das Feld IMM1 ein IMM8-Feld (wie 2972 in 29A).
  • In einigen Ausführungsformen enthält die Anweisung VBROADCASTVREG ein Feld für einen Schreibmaskenregisteroperanden (k) (z. B. VBROADCASTVREG{k} DSTREG, SRC1, SRC2). Eine Schreibmaske wird verwendet, um Operationen und Aktualisieren von Ergebnissen bedingt pro Element zu steuern. In Abhängigkeit von der Implementierung verwendet die Schreibmaske Misch- oder Nullungsmaskierung. Mit einem Prädikatoperanden (writemask, Schreibmaske oder k-Register) codierte Anweisungen verwenden diesen Operanden, um Berechnungsoperationen und Aktualisieren von Ergebnissen zum Bestimmungsoperanden bedingt pro Element zu steuern. Der Prädikatoperand ist als das Opmask-(Schreibmasken-)Register bekannt. In einigen Ausführungsformen ist die Opmask ein Satz von architektonischen Registern der Größe von 64 Bit. Es ist zu beachten, dass aus diesem Satz von architektonischen Registern nur k1 bis k7 als Prädikatoperand adressiert werden können. k0 kann als ein regulärer Ursprung oder eine Bestimmung verwendet werden, kann aber nicht als Prädikatoperand codiert werden. Außerdem ist zu beachten, dass ein Prädikatoperand verwendet werden kann, Speicherfehlerunterdrückung für einige Anweisungen mit einem Speicheroperanden (Ursprung oder Bestimmung) zu ermöglichen. Als ein Prädikatoperand enthalten die Opmask-Register ein Bit zum Lenken der Operation/Aktualisierung zu jedem Datenelement eines Vektorregisters. Im Allgemeinen können Opmask-Register Anweisungen mit folgenden Elementgrößen unterstützen: Fließkomma einfacher Genauigkeit (float32), ganzzahliges Doppelwort (int32), Fließkomma doppelter Genauigkeit (float64), ganzzahliges Vierfachwort (int64). Die Länge eines Opmask-Registers, MAX_KL, ist ausreichend zum Handhaben von bis zu 64 Elementen mit einem Bit pro Element, d. h. 64 Bits. Für eine gegebene Vektorlänge greift jede Anweisung nur auf die Anzahl von niederwertigsten Maskierungsbits zu, die basierend auf seinem Datentyp benötigt werden.
  • Ein Opmask-Register beeinflusst eine Anweisung mit einer Granularität pro Element. Demgemäß werden jede numerische oder nicht numerische Operation jedes Datenelements sowie Aktualisierungen pro Element von unmittelbaren Ergebnissen des Bestimmungsoperanden an dem korrespondierenden Bit des Opmask-Registers mit Prädikaten versehen. In den meisten Ausführungsformen entspricht eine Opmask, die als ein Prädikatoperand dient, den folgenden Eigenschaften: 1) die Operation der Anweisung wird nicht für ein Element durchgeführt, wenn das korrespondierende Opmask-Bit nicht gesetzt ist (dies impliziert, dass keine Ausnahme oder Verletzung durch eine Operation an einem abgedeckten Element verursacht werden kann und infolgedessen kein Ausnahmeflag als ein Ergebnis einer abgedeckten Operation aktualisiert wird); 2) ein Bestimmungselement wird nicht mit dem Ergebnis der Operation aktualisiert, wenn das korrespondierende Schreibmaskenbit nicht gesetzt ist; stattdessen muss der Wert des Bestimmungselements beibehalten (Mischmaskierung) oder herausgenullt werden (Nullungsmaskierung); und 3) für einige Anweisungen mit einem Speicheroperanden werden Speicherfehler für Elemente mit einem Maskenbit von 0 unterdrückt. Es ist zu beachten, dass dieses Merkmal ein vielseitiges Konstrukt zum Implementieren von Steuerflussvorhersagen bereitstellt, da die wirksame Maske ein Mischverhalten für Vektorregisterbestimmungen bereitstellt. Als eine Alternative kann die Maskierung zum Nullen anstelle von Mischen verwendet werden, so dass die abgedeckten Elemente mit 0 aktualisiert werden, anstatt den alten Wert beizubehalten. Das Nullungsverhalten wird bereitgestellt, um die implizite Abhängigkeit von dem alten Wert zu beseitigen, wenn sie nicht benötigt wird.
  • In Ausführungsformen enthalten Codierungen der Anweisung einen Speicheradressierungsoperanden eines Skalenindexbasis- bzw. SIB-Typs, der mehrere indexierte Bestimmungsorte im Speicher indirekt identifiziert. In einer Ausführungsform kann ein Speicheroperand des SIB-Typs eine Codierung enthalten, die ein Basisadressregister identifiziert. Der Inhalt des Basisadressregisters kann eine Basisadresse im Speicher repräsentieren, von dem die Adressen der besonderen Bestimmungsorte im Speicher berechnet werden. Zum Beispiel kann die Basisadresse die Adresse des ersten Orts in einem Block möglicher Bestimmungsorte für eine erweiterte Vektoranweisung sein. In einer Ausführungsform kann ein Speicheroperand des SIB-Typs eine Codierung enthalten, die ein Indexregister identifiziert. Jedes Element des Indexregisters kann einen Index oder Versatzwert spezifizieren, der verwendbar ist, von der Basisadresse eine Adresse eines jeweiligen Bestimmungsorts in einem Block möglicher Bestimmungsorte zu berechnen. In einer Ausführungsform kann ein Speicheroperand des SIB-Typs eine Codierung enthalten, die einen Skalierungsfaktor spezifiziert, der auf jeden Indexwert beim Berechnen einer jeweiligen Bestimmungsadresse anzuwenden ist. Wenn zum Beispiel ein Skalierungsfaktor von vier in dem Speicheroperanden des SIB-Typs codiert ist, kann jeder von einem Element des Indexregisters erhaltene Indexwert mit vier multipliziert und dann zu der Basisadresse addiert werden, um eine Bestimmungsadresse zu berechnen.
  • In einer Ausführungsform kann ein Speicheroperand des SIB-Typs der Form vm32{x, y, z} eine Vektoranordnung von Speicheroperanden identifizieren, spezifiziert unter Verwendung von Speicheradressierung des SIB-Typs. In diesem Beispiel wird die Anordnung von Speicheradressen unter Verwendung eines gemeinsamen Basisregisters, eines konstanten Skalierungsfaktors und eines Vektorindexregisters, das einzelne Elemente enthält, von denen jedes ein Indexwert von 32 Bit ist, spezifiziert. Das Vektorindexregister kann ein Register von 128 Bit (z. B. XMM) (vm32x), ein Register von 256 Bit (z. B. YMM) (vm32y) oder ein Register von 512 Bit (z. B. ZMM) (vm32z) sein. In einer anderen Ausführungsform kann ein Speicheroperand des SIB-Typs der Form vm64{x, y, z} eine Vektoranordnung von Speicheroperanden identifizieren, spezifiziert unter Verwendung von Speicheradressierung des SIB-Typs. In diesem Beispiel wird die Anordnung von Speicheradressen unter Verwendung eines gemeinsamen Basisregisters, eines konstanten Skalierungsfaktors und eines Vektorindexregisters, das einzelne Elemente enthält, von denen jedes ein Indexwert von 64 Bit ist, spezifiziert. Das Vektorindexregister kann ein Register von 128 Bit (z. B. XMM) (vm64x), ein Register von 256 Bit (z. B. YMM) (vm64y) oder ein Register von 512 Bit (z. B. ZMM) (vm64z) sein.
  • Beispielhaftes Verfahren zur Ausführung der Anweisung VBROADCASTVREG
  • 10 zeigt eine Ausführungsform eines Verfahrens, das von einem Prozessor durchgeführt wird, um eine Anweisung VBROADCASTVREG zu verarbeiten. Zum Beispiel führen die Prozessorkomponenten von 9, eine Pipeline, wie nachstehend ausgeführt, usw. dieses Verfahren durch.
  • Bei 1001 wird eine Anweisung abgerufen. Zum Beispiel wird eine Anweisung VBROADCASTVREG abgerufen. Die Anweisung VBROADCASTVREG enthält Felder für einen Operationscode, einen Bestimmungsoperanden, einen Ursprungsoperanden und eine Unmittelbare. In einigen Ausführungsformen enthält die Anweisung ferner ein Feld für eine Schreibmaske. In einigen Ausführungsformen wird die Anweisung aus einem Anweisungscache abgerufen. Der Bestimmungsoperand spezifiziert ein gepacktes Datenvektorregister. Der Operationscode der Anweisung VBROADCASTVREG gibt einen Vektor an. Das Registerelement (REG) wird rundgesendet (BROADCAST).
  • Die abgerufene Anweisung wird bei 1003 decodiert. Zum Beispiel wird die abgerufene Anweisung VBROADCASTVREG durch eine Decodierungsschaltung wie die hierin angeführte decodiert.
  • Bei 1005 wird die decodierte Anweisung terminiert (nach Erfordernis).
  • Bei 1007 wird die terminierte Anweisung durch eine Ausführungsschaltung (Hardware) wie 810 ausgeführt. Für die Anweisung VBROADCASTVREG wird die Ausführung bewirken, dass die Ausführungsschaltung (wie 814) einen Multiplexer (wie 816), gesteuert durch imm1 (wie imm1 810), zum Auswählen eines Elements des gepackten Ursprungsregisters (wie 812) verwendet, die eine Rundsendeschaltung (wie 818) zum Rundsenden des ausgewählten Elements an sämtliche der Vektorelemente (gepackte Daten) des gepackten Bestimmungsregisters (wie 820) verwendet.
  • In einigen Ausführungsformen wird die Anweisung bei 1009 übergeben oder abgelegt.
  • ANWEISUNG VBROADCASTSTRIMM
  • Beispielhafte Ausführung
  • Hierin werden Ausführungsformen einer Anweisung VBROADCASTSTRIMM zum Verbessern eines Computers selbst angeführt. Insbesondere setzt die Ausführung der Anweisung VBROADCASTSTRIMM ein erstes Element eines gepackten Bestimmungsregisters auf einen in einem Register gespeicherten Wert und addiert einen durch eine Unmittelbare spezifizierten Schritt-Wert zu dem zweiten und den nachfolgenden Elementen des gepackten Bestimmungsvektors.
  • 11 zeigt eine beispielhafte Ausführung einer Anweisung VBROADCASTSTRIMM Das Format der Anweisung VBROADCASTSTRIMM 1102 enthält Felder für einen Operationscode 1104 (z. B. pneumonisch „VBROADCASTSTRIMM“), eine Bestimmungskennung 1106 zum Spezifizieren des gepackten Bestimmungsregisters, eine Ursprungsregisterkennung 1108 und eine Unmittelbare (imml 1110).
  • Als Reaktion auf eine Anweisung mit einem Operationscode 1104 gleich VBROADCASTSTRIMM verwendet die Ausführungsschaltung 1114 den Inhalt des Ursprungsregisters 1112, identifiziert durch die Ursprungsregisterkennung 1108, als erste Daten 1116 zum Schreiben in das erste Element 1118 eines Vektors und verwendet die Unmittelbare (imm1) 1110 als einen Schritt 1120, der nacheinander zu dem zweiten und den nachfolgenden Elementen des Vektors addiert wird. Das Beispiel weist 0x33 gespeichert im Ursprungsregister 1112 auf und die Ausführungsschaltung 1114 schreibt 0x33 als erste Daten 1116 in das erste Element 1118 des Vektors. Die Ausführungsschaltung 1114 addiert ferner nacheinander den Schritt 1120 von 2, spezifiziert durch imm1 1110, zu dem zweiten und den nachfolgenden Elementen des Vektors. Die Ausführungsschaltung 1114 verwendet ferner die Rundsendeschaltung 1122 zum Rundsenden von Ergebnissen der Operation an das gepackte Bestimmungsregister 1124.
  • Beispielhafte Hardware zum Ausführen der Anweisung VBROADCASTSTRIMM
  • 12 zeigt eine Ausführungsform von Hardware zum Verarbeiten einer Anweisung wie eine arithmetische Wiederholungsanweisung. Wie dargestellt, speichert der Speicher 1203 eine Anweisung VBROADCASTSTRIMM 1201, die auszuführen ist.
  • Die Anweisung wird von der Decodierungsschaltung 1205 empfangen. Zum Beispiel empfängt die Decodierungsschaltung 1205 die Anweisung von der Abruflogik/-schaltung. Wie vorstehend beschrieben, enthält die Anweisung Felder für einen Operationscode (z. B. pneumonisch „VBROADCASTSTRIMM“), eine Bestimmungskennung zum Spezifizieren eines gepackten Bestimmungsregisters, einen Ursprungsoperanden zum Spezifizieren eines Ursprungsregisters und eine Unmittelbare. In einigen Ausführungsformen sind der Ursprung/die Ursprünge und die Bestimmung Register und in anderen Ausführungsform ein oder mehrere Speicherorte. Ausführlichere Ausführungsformen mindestens eines Anweisungsformats werden nachstehend ausführlicher veranschaulicht. Die Decodierungsschaltung 1205 decodiert die Anweisung in eine oder mehrere Operationen. In einigen Ausführungsformen enthält dieses Decodieren Erzeugen einer Vielzahl von Mikrooperationen, die durch die Ausführungsschaltung (wie die Ausführungsschaltung 1209) durchzuführen sind. Die Decodierungsschaltung 1205 decodiert außerdem Anweisungspräfixe (falls verwendet).
  • In einigen Ausführungsformen stellen Registerumbenennung, Registerzuteilung und/oder eine Terminierungsschaltung 1207 Funktionalität für eines oder mehrere von Folgendem bereit: 1) Umbenennen logischer Operandenwerte in physikalische Operandenwerte (z. B. eine Registeraliastabelle in einigen Ausführungsformen), 2) Zuteilen von Statusbits und -flags zu der decodierten Anweisung und 3) Terminierung der decodierten Anweisung für Ausführung in der Ausführungsschaltung aus einem Anweisungsvorrat (z. B. unter Verwendung einer Reservierungsstation in einigen Ausführungsformen).
  • Die Register (Registerdatei) und/oder der Speicher 1208 speichern Daten als Operanden der Anweisung, an der durch die Ausführungsschaltung Operationen durchzuführen sind. Beispielhafte Typen von Registern enthalten gepackte Datenregister, Allzweckregister und Fließkommaregister.
  • Die Ausführungsschaltung 1209 führt die decodierte Anweisung VBROADCASTSTRIMM aus. Eine Ausführungsform der Ausführungsschaltung 1114, die ähnlich 1209 ist, wurde in 11 dargestellt. Die Rückschreib-(Ablage-)schaltung 1211 übergibt das Ergebnis der Ausführung der decodierten Anweisung VBROADCASTSTRIMM.
  • Beispielhafte Formate der Anweisung VBROADCASTSTRIMM
  • In einigen Ausführungsformen übergibt die Ablage-/Rückschreibschaltung das Bestimmungsregister architektonisch in das Register oder den Speicher und legt die Anweisung ab.
  • Eine Ausführungsform eines Formats für eine Anweisung VBROADCASTSTRIMM ist OPCODE DSTREG, SRCREG, IMM1. In einigen Ausführungsformen ist VBROADCASTSTRIMM {B/W/D/Q} die Operationscode-Mnemonik der Anweisung. SRCREG ist ein Feld zum Identifizieren des Ursprungsregisters. In einigen Ausführungsformen ist das Ursprungsregister ein Allzweckregister. In einigen Ausführungsformen ist das Ursprungsregister ein Element eines gepackten Datenvektorregisters. DSTREG ist ein Feld zum Identifizieren des gepackten Bestimmungsregisteroperanden. IMM1 ist ein Feld für eine Unmittelbare, die als ein Schritt-Wert zu verwenden ist.
  • In einigen Ausführungsformen ist das Feld OPCODE ein vollständiges Operationscodefeld (wie 2974) oder ein eigentliches Operationscodefeld (wie 2930), ist das Feld SRCREG ein Reg-Feld (wie 2944), ist das Feld DSTREG ein R/M-Feld (wie 2946) und ist das Feld IMM1 ein IMM8-Feld (wie 2972 in 29A).
  • In einigen Ausführungsformen enthält die Anweisung VBROADCASTSTRIMM ein Feld für einen Schreibmaskenregister-Operanden (k) (z. B. VBROADCASTSTRIMM{k} DSTREG, SRC1, SRC2). Eine Schreibmaske wird verwendet, um Operationen und Aktualisieren von Ergebnissen bedingt pro Element zu steuern. In Abhängigkeit von der Implementierung verwendet die Schreibmaske Misch- oder Nullungsmaskierung. Mit einem Prädikatoperanden (writemask, Schreibmaske oder k-Register) codierte Anweisungen verwenden diesen Operanden, um Berechnungsoperationen und Aktualisieren von Ergebnissen zum Bestimmungsoperanden bedingt pro Element zu steuern. Der Prädikatoperand ist als das Opmask-(Schreibmasken-)Register bekannt. In einigen Ausführungsformen ist die Opmask ein Satz von architektonischen Registern der Größe von 64 Bit. Es ist zu beachten, dass aus diesem Satz von architektonischen Registern nur k1 bis k7 als Prädikatoperand adressiert werden können. k0 kann als ein regulärer Ursprung oder eine Bestimmung verwendet werden, kann aber nicht als Prädikatoperand codiert werden. Außerdem ist zu beachten, dass ein Prädikatoperand verwendet werden kann, Speicherfehlerunterdrückung für einige Anweisungen mit einem Speicheroperanden (Ursprung oder Bestimmung) zu ermöglichen. Als ein Prädikatoperand enthalten die Opmask-Register ein Bit zum Lenken der Operation/Aktualisierung zu jedem Datenelement eines Vektorregisters. Im Allgemeinen können Opmask-Register Anweisungen mit folgenden Elementgrößen unterstützen: Fließkomma einfacher Genauigkeit (float32), ganzzahliges Doppelwort (int32), Fließkomma doppelter Genauigkeit (float64), ganzzahliges Vierfachwort (int64). Die Länge eines Opmask-Registers, MAX_KL, ist ausreichend zum Handhaben von bis zu 64 Elementen mit einem Bit pro Element, d. h. 64 Bits. Für eine gegebene Vektorlänge greift jede Anweisung nur auf die Anzahl von niederwertigsten Maskierungsbits zu, die basierend auf seinem Datentyp benötigt werden.
  • Ein Opmask-Register beeinflusst eine Anweisung mit einer Granularität pro Element. Demgemäß werden jede numerische oder nicht numerische Operation jedes Datenelements sowie Aktualisierungen pro Element von unmittelbaren Ergebnissen des Bestimmungsoperanden an dem korrespondierenden Bit des Opmask-Registers mit Prädikaten versehen. In den meisten Ausführungsformen entspricht eine Opmask, die als ein Prädikatoperand dient, den folgenden Eigenschaften: 1) die Operation der Anweisung wird nicht für ein Element durchgeführt, wenn das korrespondierende Opmask-Bit nicht gesetzt ist (dies impliziert, dass keine Ausnahme oder Verletzung durch eine Operation an einem abgedeckten Element verursacht werden kann und infolgedessen kein Ausnahmeflag als ein Ergebnis einer abgedeckten Operation aktualisiert wird); 2) ein Bestimmungselement wird nicht mit dem Ergebnis der Operation aktualisiert, wenn das korrespondierende Schreibmaskenbit nicht gesetzt ist; stattdessen muss der Wert des Bestimmungselements beibehalten (Mischmaskierung) oder herausgenullt werden (Nullungsmaskierung); und 3) für einige Anweisungen mit einem Speicheroperanden werden Speicherfehler für Elemente mit einem Maskenbit von 0 unterdrückt. Es ist zu beachten, dass dieses Merkmal ein vielseitiges Konstrukt zum Implementieren von Steuerflussvorhersagen bereitstellt, da die wirksame Maske ein Mischverhalten für Vektorregisterbestimmungen bereitstellt. Als eine Alternative kann die Maskierung zum Nullen anstelle von Mischen verwendet werden, so dass die abgedeckten Elemente mit 0 aktualisiert werden, anstatt den alten Wert beizubehalten. Das Nullungsverhalten wird bereitgestellt, um die implizite Abhängigkeit von dem alten Wert zu beseitigen, wenn sie nicht benötigt wird.
  • In Ausführungsformen enthalten Codierungen der Anweisung einen Speicheradressierungsoperanden eines Skalenindexbasis- bzw. SIB-Typs, der mehrere indexierte Bestimmungsorte im Speicher indirekt identifiziert. In einer Ausführungsform kann ein Speicheroperand des SIB-Typs eine Codierung enthalten, die ein Basisadressregister identifiziert. Der Inhalt des Basisadressregisters kann eine Basisadresse im Speicher repräsentieren, von dem die Adressen der besonderen Bestimmungsorte im Speicher berechnet werden. Zum Beispiel kann die Basisadresse die Adresse des ersten Orts in einem Block möglicher Bestimmungsorte für eine erweiterte Vektoranweisung sein. In einer Ausführungsform kann ein Speicheroperand des SIB-Typs eine Codierung enthalten, die ein Indexregister identifiziert. Jedes Element des Indexregisters kann einen Index oder Versatzwert spezifizieren, der verwendbar ist, von der Basisadresse eine Adresse eines jeweiligen Bestimmungsorts in einem Block möglicher Bestimmungsorte zu berechnen. In einer Ausführungsform kann ein Speicheroperand des SIB-Typs eine Codierung enthalten, die einen Skalierungsfaktor spezifiziert, der auf jeden Indexwert beim Berechnen einer jeweiligen Bestimmungsadresse anzuwenden ist. Wenn zum Beispiel ein Skalierungsfaktor von vier in dem Speicheroperanden des SIB-Typs codiert ist, kann jeder von einem Element des Indexregisters erhaltene Indexwert mit vier multipliziert und dann zu der Basisadresse addiert werden, um eine Bestimmungsadresse zu berechnen.
  • In einer Ausführungsform kann ein Speicheroperand des SIB-Typs der Form vm32{x, y, z} eine Vektoranordnung von Speicheroperanden identifizieren, spezifiziert unter Verwendung von Speicheradressierung des SIB-Typs. In diesem Beispiel wird die Anordnung von Speicheradressen unter Verwendung eines gemeinsamen Basisregisters, eines konstanten Skalierungsfaktors und eines Vektorindexregisters, das einzelne Elemente enthält, von denen jedes ein Indexwert von 32 Bit ist, spezifiziert. Das Vektorindexregister kann ein Register von 128 Bit (z. B. XMM) (vm32x), ein Register von 256 Bit (z. B. YMM) (vm32y) oder ein Register von 512 Bit (z. B. ZMM) (vm32z) sein. In einer anderen Ausführungsform kann ein Speicheroperand des SIB-Typs der Form vm64{x, y, z} eine Vektoranordnung von Speicheroperanden identifizieren, spezifiziert unter Verwendung von Speicheradressierung des SIB-Typs. In diesem Beispiel wird die Anordnung von Speicheradressen unter Verwendung eines gemeinsamen Basisregisters, eines konstanten Skalierungsfaktors und eines Vektorindexregisters, das einzelne Elemente enthält, von denen jedes ein Indexwert von 64 Bit ist, spezifiziert. Das Vektorindexregister kann ein Register von 128 Bit (z. B. XMM) (vm64x), ein Register von 256 Bit (z. B. YMM) (vm64y) oder ein Register von 512 Bit (z. B. ZMM) (vm64z) sein.
  • Beispielhaftes Verfahren zur Ausführung der Anweisung VBROADCASTSTRIMM
  • 13 zeigt eine Ausführungsform eines Verfahrens, das von einem Prozessor durchgeführt wird, um eine Anweisung VBROADCASTSTRIMM zu verarbeiten. Zum Beispiel führen die Prozessorkomponenten von 12, eine Pipeline, wie nachstehend ausgeführt, usw. dieses Verfahren durch.
  • Bei 1301 wird eine Anweisung abgerufen. Zum Beispiel wird eine Anweisung VBROADCASTSTRIMM abgerufen. Die Anweisung VBROADCASTSTRIMM enthält Felder für einen Operationscode, einen Bestimmungsoperanden, einen Ursprungsoperanden und eine Unmittelbare. In einigen Ausführungsformen enthält die Anweisung ferner ein Feld für eine Schreibmaske. In einigen Ausführungsformen wird die Anweisung aus einem Anweisungscache abgerufen. Der Bestimmungsoperand spezifiziert ein gepacktes Datenvektorregister. Der Operationscode der Anweisung VBROADCASTSTRIMM gibt eine schrittbehaftete Rundsendung an ein Vektorregister unter Verwendung einer Unmittelbaren als den Schrittwert an.
  • Die abgerufene Anweisung wird bei 1303 decodiert. Zum Beispiel wird die abgerufene Anweisung VBROADCASTSTRIMM durch eine Decodierungsschaltung wie die hierin angeführte decodiert.
  • Bei 1305 wird die decodierte Anweisung terminiert (nach Erfordernis).
  • Bei 1307 wird die terminierte Anweisung durch eine Ausführungsschaltung (Hardware) wie 1114 ausgeführt. Für die Anweisung VBROADCASTSTRIMM wird die Ausführung bewirken, dass eine Ausführungsschaltung (wie 1114) den Inhalt des Ursprungsregisters 1112 als erste Daten 1116, geschrieben in das erste Element 1118 eines Vektors, verwendet und die Unmittelbare (imml 1110) als einen Schritt 1120, der nacheinander zu dem zweiten und den nachfolgenden Elementen des Vektors addiert wird, verwendet.
  • In einigen Ausführungsformen wird die Anweisung bei 1309 übergeben oder abgelegt.
  • ANWEISUNG VBROADCASTSTRVREG
  • Beispielhafte Ausführung
  • Hierin werden Ausführungsformen einer Anweisung VBROADCASTSTRVREG zum Verbessern eines Computers selbst ausführlich dargestellt. Insbesondere bewirkt die Ausführung der Anweisung VBROADCASTSTRVREG, dass die Ausführungsschaltung als Reaktion auf den Empfang der Anweisung die erste Unmittelbare zum Auswählen eines Elements eines gepackten Ursprungsregisters verwendet, ein erstes Element eines gepackten Bestimmungsregisters auf den ausgewählten Wert setzt und nacheinander einen durch eine zweite Unmittelbare spezifizierten Schritt-Wert zu dem zweiten und den nachfolgenden Elementen des gepackten Bestimmungsregisters addiert.
  • 14 zeigt eine beispielhafte Ausführung einer Anweisung VBROADCASTSTRVREG. Das Format der Anweisung VBROADCASTSTRVREG 1402 enthält Felder für einen Operationscode 1404 (z. B. pneumonisch „VBROADCASTSTRVREG“), eine Bestimmungskennung 1406 zum Spezifizieren eines gepackten Bestimmungsregisters 1424, eine Ursprungskennung 1408 zum Spezifizieren eines gepackten Ursprungsregisters 1414, eine erste Unmittelbare (imml 1410) und eine zweite Unmittelbare (imm2 1412).
  • Als Reaktion auf eine Anweisung mit einem Operationscode 1404 gleich VBROADCASTSTRVREG verwendet die Ausführungsschaltung 1416 imm1 1410 zum Steuern eines Multiplexers 1418 zum Auswählen eines Elements aus dem gepackten Ursprungsregister 1414. Die Ausführungsschaltung 1416 setzt das erste Element des Vektors auf den in dem ausgewählten Element gespeicherten Wert. Die Ausführungsschaltung 1416 addiert ferner nacheinander einen Schritt 1420 von 2, spezifiziert durch imm1 1412, zu dem zweiten und den nachfolgenden Elementen des Vektors. Die Ausführungsschaltung 1416 verwendet ferner die Rundsendeschaltung 1422 zum Rundsenden von Ergebnissen der Operation an das gepackte Bestimmungsregister 1424.
  • Einige Vektorelemente von 14 werden als „x“ dargestellt, wodurch angegeben wird, dass der Wert gleichgültig ist. Sie sind bei der Diskussion der Operation dieser Anweisung nicht relevant.
  • Beispielhafte Hardware zum Ausführen der Anweisung VBROADCASTSTRVREG
  • 15 zeigt eine Ausführungsform von Hardware zum Verarbeiten einer Anweisung wie eine arithmetische Wiederholungsanweisung. Wie dargestellt, speichert der Speicher 1503 eine Anweisung VBROADCASTSTRVREG 1501, die auszuführen ist.
  • Die Anweisung wird von der Decodierungsschaltung 1505 empfangen. Zum Beispiel empfängt die Decodierungsschaltung 1505 die Anweisung von der Abruflogik/-schaltung. Die Anweisung 1501 enthält Felder für einen Operationscode (z. B. pneumonisch „VBROADCASTSTRVREG“), eine Bestimmungskennung 1106 zum Spezifizieren eines gepackten Bestimmungsregisters und eine Unmittelbare. Ausführlichere Ausführungsformen mindestens eines Anweisungsformats werden nachstehend ausführlicher veranschaulicht. Die Decodierungsschaltung 1505 decodiert die Anweisung in eine oder mehrere Operationen. In einigen Ausführungsformen enthält dieses Decodieren Erzeugen einer Vielzahl von Mikrooperationen, die durch die Ausführungsschaltung (wie die Ausführungsschaltung 1416 oder die Ausführungsschaltung 1509) durchzuführen sind. Die Decodierungsschaltung 1505 decodiert außerdem Anweisungspräfixe (falls verwendet).
  • In einigen Ausführungsformen stellen Registerumbenennung, Registerzuteilung und/oder eine Terminierungsschaltung 1507 Funktionalität für eines oder mehrere von Folgendem bereit: 1) Umbenennen logischer Operandenwerte in physikalische Operandenwerte (z. B. eine Registeraliastabelle in einigen Ausführungsformen), 2) Zuteilen von Statusbits und -flags zu der decodierten Anweisung und 3) Terminierung der decodierten Anweisung für Ausführung in der Ausführungsschaltung aus einem Anweisungsvorrat (z. B. unter Verwendung einer Reservierungsstation in einigen Ausführungsformen).
  • Die Register (Registerdatei) und/oder der Speicher 1508 speichern Daten als Operanden der Anweisung, an der durch die Ausführungsschaltung Operationen durchzuführen sind. Beispielhafte Typen von Registern enthalten gepackte Datenregister, Allzweckregister und Fließkommaregister.
  • Die Ausführungsschaltung 1509 führt die decodierte Anweisung VBROADCASTSTRVREG aus. Die Ausführungsschaltung 1416, die in einigen Ausführungsformen ähnlich der Ausführungsschaltung 1509 ist, wurde in 14 dargestellt. Die Rückschreib-(Ablage-)schaltung 1511 übergibt das Ergebnis der Ausführung der decodierten Anweisung VBROADCASTSTRVREG.
  • Beispielhafte Formate der Anweisung VBROADCASTSTRVREG
  • In einigen Ausführungsformen übergibt die Ablage-/Rückschreibschaltung das Bestimmungsregister architektonisch in das Register oder den Speicher und legt die Anweisung ab.
  • Eine Ausführungsform eines Formats für eine Anweisung VBROADCASTSTRVREG ist OPCODE DSTREG, SRCREG, IMM1, IMM2. In einigen Ausführungsformen ist VBROADCASTSTRVREG {B/W/D/Q} die Operationscode-Mnemonik der Anweisung. SRCREG ist ein Feld zum Identifizieren des Ursprungsregisters. In einigen Ausführungsformen ist das Ursprungsregister ein Allzweckregister. In einigen Ausführungsformen ist das Ursprungsregister ein Element eines gepackten Datenvektorregisters. DSTREG ist ein Feld zum Identifizieren des gepackten Bestimmungsregisteroperanden. IMM1 ist ein Feld für eine Unmittelbare, die zu verwenden ist, ein Datenelement aus einer Vielzahl von Elementen des gepackten Ursprungsregisters 1414 auszuwählen.
  • In einigen Ausführungsformen ist das Feld OPCODE ein vollständiges Operationscodefeld (wie 2974) oder ein eigentliches Operationscodefeld (wie 2930), ist das Feld SRCREG ein Reg-Feld (wie 2944), ist das Feld DSTREG ein R/M-Feld (wie 2946) und ist das Feld IMM1 ein IMM8-Feld (wie 2972 in 29A).
  • In einigen Ausführungsformen enthält die Anweisung VBROADCASTSTRVREG ein Feld für einen Schreibmaskenregisteroperanden (k) (z. B. VBROADCASTSTRVREG{k} DSTREG, SRC1, SRC2). Eine Schreibmaske wird verwendet, um Operationen und Aktualisieren von Ergebnissen bedingt pro Element zu steuern. In Abhängigkeit von der Implementierung verwendet die Schreibmaske Misch- oder Nullungsmaskierung. Mit einem Prädikatoperanden (writemask, Schreibmaske oder k-Register) codierte Anweisungen verwenden diesen Operanden, um Berechnungsoperationen und Aktualisieren von Ergebnissen zum Bestimmungsoperanden bedingt pro Element zu steuern. Der Prädikatoperand ist als das Opmask-(Schreibmasken-)Register bekannt. In einigen Ausführungsformen ist die Opmask ein Satz von architektonischen Registern der Größe von 64 Bit. Es ist zu beachten, dass aus diesem Satz von architektonischen Registern nur k1 bis k7 als Prädikatoperand adressiert werden können. k0 kann als ein regulärer Ursprung oder eine Bestimmung verwendet werden, kann aber nicht als Prädikatoperand codiert werden. Außerdem ist zu beachten, dass ein Prädikatoperand verwendet werden kann, Speicherfehlerunterdrückung für einige Anweisungen mit einem Speicheroperanden (Ursprung oder Bestimmung) zu ermöglichen. Als ein Prädikatoperand enthalten die Opmask-Register ein Bit zum Lenken der Operation/Aktualisierung zu jedem Datenelement eines Vektorregisters. Im Allgemeinen können Opmask-Register Anweisungen mit folgenden Elementgrößen unterstützen: Fließkomma einfacher Genauigkeit (float32), ganzzahliges Doppelwort (int32), Fließkomma doppelter Genauigkeit (float64), ganzzahliges Vierfachwort (int64). Die Länge eines Opmask-Registers, MAX_KL, ist ausreichend zum Handhaben von bis zu 64 Elementen mit einem Bit pro Element, d. h. 64 Bits. Für eine gegebene Vektorlänge greift jede Anweisung nur auf die Anzahl von niederwertigsten Maskierungsbits zu, die basierend auf seinem Datentyp benötigt werden.
  • Ein Opmask-Register beeinflusst eine Anweisung mit einer Granularität pro Element. Demgemäß werden jede numerische oder nicht numerische Operation jedes Datenelements sowie Aktualisierungen pro Element von unmittelbaren Ergebnissen des Bestimmungsoperanden an dem korrespondierenden Bit des Opmask-Registers mit Prädikaten versehen. In den meisten Ausführungsformen entspricht eine Opmask, die als ein Prädikatoperand dient, den folgenden Eigenschaften: 1) die Operation der Anweisung wird nicht für ein Element durchgeführt, wenn das korrespondierende Opmask-Bit nicht gesetzt ist (dies impliziert, dass keine Ausnahme oder Verletzung durch eine Operation an einem abgedeckten Element verursacht werden kann und infolgedessen kein Ausnahmeflag als ein Ergebnis einer abgedeckten Operation aktualisiert wird); 2) ein Bestimmungselement wird nicht mit dem Ergebnis der Operation aktualisiert, wenn das korrespondierende Schreibmaskenbit nicht gesetzt ist; stattdessen muss der Wert des Bestimmungselements beibehalten (Mischmaskierung) oder herausgenullt werden (Nullungsmaskierung); 3) für einige Anweisungen mit einem Speicheroperanden werden Speicherfehler für Elemente mit einem Maskenbit von 0 unterdrückt. Es ist zu beachten, dass dieses Merkmal ein vielseitiges Konstrukt zum Implementieren von Steuerflussvorhersagen bereitstellt, da die wirksame Maske ein Mischverhalten für Vektorregisterbestimmungen bereitstellt. Als eine Alternative kann die Maskierung zum Nullen anstelle von Mischen verwendet werden, so dass die abgedeckten Elemente mit 0 aktualisiert werden, anstatt den alten Wert beizubehalten. Das Nullungsverhalten wird bereitgestellt, um die implizite Abhängigkeit von dem alten Wert zu beseitigen, wenn sie nicht benötigt wird.
  • In Ausführungsformen enthalten Codierungen der Anweisung einen Speicheradressierungsoperanden eines Skalenindexbasis- bzw. SIB-Typs, der mehrere indexierte Bestimmungsorte im Speicher indirekt identifiziert. In einer Ausführungsform kann ein Speicheroperand des SIB-Typs eine Codierung enthalten, die ein Basisadressregister identifiziert. Der Inhalt des Basisadressregisters kann eine Basisadresse im Speicher repräsentieren, von dem die Adressen der besonderen Bestimmungsorte im Speicher berechnet werden. Zum Beispiel kann die Basisadresse die Adresse des ersten Orts in einem Block möglicher Bestimmungsorte für eine erweiterte Vektoranweisung sein. In einer Ausführungsform kann ein Speicheroperand des SIB-Typs eine Codierung enthalten, die ein Indexregister identifiziert. Jedes Element des Indexregisters kann einen Index oder Versatzwert spezifizieren, der verwendbar ist, von der Basisadresse eine Adresse eines jeweiligen Bestimmungsorts in einem Block möglicher Bestimmungsorte zu berechnen. In einer Ausführungsform kann ein Speicheroperand des SIB-Typs eine Codierung enthalten, die einen Skalierungsfaktor spezifiziert, der auf jeden Indexwert beim Berechnen einer jeweiligen Bestimmungsadresse anzuwenden ist. Wenn zum Beispiel ein Skalierungsfaktor von vier in dem Speicheroperanden des SIB-Typs codiert ist, kann jeder von einem Element des Indexregisters erhaltene Indexwert mit vier multipliziert und dann zu der Basisadresse addiert werden, um eine Bestimmungsadresse zu berechnen.
  • In einer Ausführungsform kann ein Speicheroperand des SIB-Typs der Form vm32{x, y, z} eine Vektoranordnung von Speicheroperanden identifizieren, spezifiziert unter Verwendung von Speicheradressierung des SIB-Typs. In diesem Beispiel wird die Anordnung von Speicheradressen unter Verwendung eines gemeinsamen Basisregisters, eines konstanten Skalierungsfaktors und eines Vektorindexregisters, das einzelne Elemente enthält, von denen jedes ein Indexwert von 32 Bit ist, spezifiziert. Das Vektorindexregister kann ein Register von 128 Bit (z. B. XMM) (vm32x), ein Register von 256 Bit (z. B. YMM) (vm32y) oder ein Register von 512 Bit (z. B. ZMM) (vm32z) sein. In einer anderen Ausführungsform kann ein Speicheroperand des SIB-Typs der Form vm64{x, y, z} eine Vektoranordnung von Speicheroperanden identifizieren, spezifiziert unter Verwendung von Speicheradressierung des SIB-Typs. In diesem Beispiel wird die Anordnung von Speicheradressen unter Verwendung eines gemeinsamen Basisregisters, eines konstanten Skalierungsfaktors und eines Vektorindexregisters, das einzelne Elemente enthält, von denen jedes ein Indexwert von 64 Bit ist, spezifiziert. Das Vektorindexregister kann ein Register von 128 Bit (z. B. XMM) (vm64x), ein Register von 256 Bit (z. B. YMM) (vm64y) oder ein Register von 512 Bit (z. B. ZMM) (vm64z) sein.
  • Beispielhaftes Verfahren zur Ausführung der Anweisung VBROADCASTSTRVREG
  • 16 zeigt eine Ausführungsform eines Verfahrens, das von einem Prozessor durchgeführt wird, um eine Anweisung VBROADCASTSTRVREG zu verarbeiten. Zum Beispiel führen die Prozessorkomponenten von 15, eine Pipeline, wie nachstehend ausgeführt, usw. dieses Verfahren durch.
  • Bei 1601 wird eine Anweisung abgerufen. Zum Beispiel wird eine Anweisung VBROADCASTSTRVREG abgerufen. Die Anweisung VBROADCASTSTRVREG enthält Felder für einen Operationscode, einen Bestimmungsoperanden, einen Ursprungsoperanden, eine Unmittelbare und eine zweite Unmittelbare. In einigen Ausführungsformen enthält die Anweisung ferner ein Feld für eine Schreibmaske. In einigen Ausführungsformen wird die Anweisung aus einem Anweisungscache abgerufen. Der Bestimmungsoperand spezifiziert ein gepacktes Datenvektorregister. Der Operationscode der Anweisung VBROADCASTSTRVREG gibt eine schrittbehaftete Rundsendung an ein Vektorregister unter Verwendung einer Unmittelbaren als den Schrittwert an.
  • Die abgerufene Anweisung wird bei 1603 decodiert. Zum Beispiel wird die abgerufene Anweisung VBROADCASTSTRVREG durch eine Decodierungsschaltung wie die hierin angeführte decodiert.
  • Bei 1605 wird die decodierte Anweisung terminiert (nach Erfordernis).
  • Bei 1607 wird die terminierte Anweisung durch die Ausführungsschaltung (Hardware) wie die Ausführungsschaltung 1416 ausgeführt. Für die Anweisung VBROADCASTSTRVREG bewirkt die Ausführung, dass eine Ausführungsschaltung den Inhalt des gepackten Ursprungsregisters (wie 1414) als erste Daten, geschrieben in das erste Element eines Vektors, verwendet und die zweite Unmittelbare (imm2) als einen Schritt 1420, der nacheinander zu dem zweiten und den nachfolgenden Elementen des Vektors addiert wird, verwendet.
  • In einigen Ausführungsformen wird die Anweisung bei 1609 übergeben oder abgelegt.
  • ANWEISUNG VBROADCASTSTRIMMMSKED
  • Beispielhafte Ausführung
  • Hierin werden Ausführungsformen einer Anweisung VBROADCASTSTRIMMMSKED zum Verbessern eines Computers selbst ausführlich dargestellt. Insbesondere bewirkt die Ausführung der Anweisung VBROADCASTSTRIMMMSKED, dass die Ausführungsschaltung eine erste Unmittelbare zum Setzen eines ersten nicht maskierten Elements eines gepackten Bestimmungsregisters verwendet und nacheinander einen durch eine zweite Unmittelbare spezifizierten Schritt-Wert zu dem zweiten und den nachfolgenden Elementen des gepackten Bestimmungsregisters addiert.
  • 17 zeigt eine beispielhafte Ausführung einer Anweisung VBROADCASTSTRIMMMSKED. Die Anweisung VBROADCASTSTRIMMMSKED enthält Felder einschließlich von OPCODE {k1} {Z}, DST, IMM1 und IMM2. K1 ist eine Schreibmaske zum Spezifizieren, ob Elemente des gepackten Bestimmungsregisters maskiert sind oder nicht maskiert sind. Das maskierte Elementsteuerfeld z spezifiziert, ob maskierte Datenelemente zu nullen sind oder ob ihnen gestattet wird, ihre vorherigen Werte beizubehalten. In einigen Ausführungsformen ist VBROADCASTSTRIMMMSKED {B/W/D/Q} die Operationscode-Mnemonik der Anweisung, in der DST ein Feld zum Identifizieren des gepackten Bestimmungsregisteroperation ist, k1 das maskierte Register k1 1720 identifiziert. Die Anweisung enthält ferner das maskierte Elementsteuerfeld z 1710, eine erste Unmittelbare (imm1) 1712 und eine zweite Unmittelbare (imm2) 1714. IMM1 ist ein Feld, das als ein erstes nicht maskiertes Datenelement eines unmittelbaren Vektors verwendet wird. IMM2 ist ein Feld für eine Unmittelbare, die verwendet wird, einen Schritt-Wert zu definieren, der nacheinander zu dem zweiten und den nachfolgenden Elementen des Zwischenvektors zu addieren ist.
  • Als Reaktion auf eine Anweisung mit einem Operationscode 1704 gleich VBROADCASTSTRIMMMSKED verwendet die Ausführungsschaltung 1716 die Schreibmaskenkennung k1 1708 zum Identifizieren des Maskenregisters k1 1720, verwendet das Maskenregister k1 1720 zum Identifizieren der nicht maskierten Elemente des gepackten Bestimmungsregisters 1726 und der nicht maskierten Elemente des Zwischenvektors, gebildet durch die Ausführungsschaltung 1716, verwendet das maskierte Elementsteuerfeld z 1710 zum Setzen des z-Registers 1722, setzt das erste nicht maskierte Element 1718 des Zwischenvektors auf den Wert von imm1 1712 und addiert nacheinander den Wert von imm2 1714 zu dem zweiten und den nachfolgenden nicht maskierten Datenelementen des Zwischenvektors. Die Ausführungsschaltung 1716 verwendet die Rundsendeschaltung 1724 zum Schreiben des Zwischenvektors in das gepackte Bestimmungsregister 1726.
  • Das Beispiel weist 33 als imm1 1712 auf, das in das erste nicht maskierte Element 1718 des Zwischenvektors geschrieben wird. Die Ausführungsschaltung 1715 addiert ferner nacheinander den Schritt-Wert 2, spezifiziert durch IMM2 1714, zu dem zweiten und den nachfolgenden Elementen. Die Ausführungsschaltung 1716 verwendet ferner die Rundsendeschaltung 1724 zum Rundsenden des Zwischenvektors an das gepackte Bestimmungsregister 1726.
  • Beispielhafte Hardware zum Ausführen der Anweisung VBROADCASTSTRIMMMSKED
  • 18 zeigt eine Ausführungsform von Hardware zum Verarbeiten einer Anweisung wie eine arithmetische Wiederholungsanweisung. Wie dargestellt, speichert der Speicher 1803 eine Anweisung VBROADCASTSTRIMMMSKED 1801, die auszuführen ist.
  • Die Anweisung wird von der Decodierungsschaltung 1805 empfangen. Zum Beispiel empfängt die Decodierungsschaltung 1805 die Anweisung von der Abruflogik/-schaltung. Die Anweisung 1801 enthält Felder für einen Operationscode (z. B. pneumonisch „VBROADCASTSTRIMMMSKED“), eine Bestimmungskennung 1106 zum Spezifizieren eines gepackten Bestimmungsregisters, eine Schreibmaske, ein maskiertes Elementsteuerfeld, eine erste Unmittelbare und eine zweite Unmittelbare. In einigen Ausführungsformen sind der Ursprung/die Ursprünge und die Bestimmung Register und in anderen Ausführungsform ein oder mehrere Speicherorte. Ausführlichere Ausführungsformen mindestens eines Anweisungsformats werden nachstehend ausführlicher veranschaulicht. Die Decodierungsschaltung 1805 decodiert die Anweisung in eine oder mehrere Operationen. In einigen Ausführungsformen enthält dieses Decodieren Erzeugen einer Vielzahl von Mikrooperationen, die durch die Ausführungsschaltung (wie die Ausführungsschaltung 1809 oder 1716) durchzuführen sind. Die Decodierungsschaltung 1805 decodiert außerdem Anweisungspräfixe (falls verwendet).
  • In einigen Ausführungsformen stellen Registerumbenennung, Registerzuteilung und/oder eine Terminierungsschaltung 1807 Funktionalität für eines oder mehrere von Folgendem bereit: 1) Umbenennen logischer Operandenwerte in physikalische Operandenwerte (z. B. eine Registeraliastabelle in einigen Ausführungsformen), 2) Zuteilen von Statusbits und -flags zu der decodierten Anweisung und 3) Terminierung der decodierten Anweisung für Ausführung in der Ausführungsschaltung aus einem Anweisungsvorrat (z. B. unter Verwendung einer Reservierungsstation in einigen Ausführungsformen).
  • Die Register (Registerdatei) und/oder der Speicher 1808 speichern Daten als Operanden der Anweisung, an der durch die Ausführungsschaltung Operationen durchzuführen sind. Beispielhafte Typen von Registern enthalten gepackte Datenregister, Allzweckregister und Fließkommaregister.
  • Die Ausführungsschaltung 1809 führt die decodierte Anweisung VBROADCASTSTRIMMMSKED aus. Die Ausführungsschaltung 1716 wurde in 17 dargestellt. Die Ausführung der decodierten Anweisung VBROADCASTSTRIMMMSKED verwendet die erste Unmittelbare (imm1) zum Setzen eines ersten nicht maskierten Elements des gepackten Bestimmungsvektorregister und addiert aufeinanderfolgend einen durch die zweite Unmittelbare imm2 spezifizierten Schritt-Wert zu dem zweiten und nachfolgenden nicht maskierten Elementen des gepackten Bestimmungsvektorregisters. In einer Ausführungsform bewirkt das maskierte Elementsteuerfeld z, wenn es, wie hier, gleich null ist, die Ausführung dieser Anweisung, um maskierte Bestimmungsvektorelemente zu nullen, und wenn es gleich 1 ist, bewirkt es die Ausführung dieser Anweisung, um zu gestatten, dass maskierte Bestimmungsvektorelemente ihre vorherigen Werte beibehalten. Die Rückschreib-(Ablage-)schaltung 1811 übergibt das Ergebnis der Ausführung der decodierten Anweisung VBROADCASTSTRIMMMSKED.
  • Beispielhafte Formate der Anweisung VBROADCASTSTRIMMMSKED
  • In einigen Ausführungsformen übergibt die Ablage-/Rückschreibschaltung das Bestimmungsregister architektonisch in das Register oder den Speicher und legt die Anweisung ab.
  • Eine Ausführungsform eines Formats für eine Anweisung VBROADCASTSTRIMMMSKED ist OPCODE {k1} {Z}, DST, IMM1, IMM2. K1 ist eine Schreibmaske zum Spezifizieren, ob Elemente des gepackten Bestimmungsregisters maskiert sind oder nicht maskiert sind. Das maskierte Elementsteuerfeld z spezifiziert, ob maskierte Datenelemente zu nullen sind oder ob ihnen gestattet wird, ihre vorherigen Werte beizubehalten. In einigen Ausführungsformen ist VBROADCASTSTRIMMMSKED {B/W/D/Q} die Operationscode-Mnemonik der Anweisung, in der DST ein Feld zum Identifizieren des Bestimmungsschreibmaskenregisteroperanden ist, k1 eine Schreibmaskenkennung k1 1708 ist. Die Anweisung enthält ferner das maskierte Elementsteuerfeld z 1710, eine erste Unmittelbare (imm1) 1712 und eine zweite Unmittelbare (imm2) 1714. IMM1 ist ein Feld, das als ein erstes nicht maskiertes Element 1718 eines unmittelbaren Vektors verwendet wird. IMM2 ist ein Feld für eine Unmittelbare, die verwendet wird, einen Schritt-Wert zu definieren, wobei der Wert hier 2 ist, der nacheinander zu dem zweiten und den nachfolgenden Elementen des Zwischenvektors zu addieren ist. Die Ausführungsschaltung 1716 verwendet in einigen Ausführungsformen die Rundsendeschaltung 1724 zum Rundsenden des Zwischenvektors an das gepackte Bestimmungsregister 1726.
  • In einigen Ausführungsformen ist das Feld OPCODE ein vollständiges Operationscodefeld (wie 2974) oder ein eigentliches Operationscodefeld (wie 2930), ist das Feld DSTREG ein R/M-Feld (wie 2946), ist das Feld IMM1 ein IMM8-Feld (wie 2972 in 29A) und ist das Feld IMM2 ein vvvv-Feld (wie 2929 in 29A).
  • In einigen Ausführungsformen enthält die Anweisung ein Feld VBROADCASTSTRIMMMSKED für einen Schreibmaskenregister-Operanden (k) (z. B. VBROADCASTSTRIMMMSKED{k} DSTREG, SRC1, SRC2). Eine Schreibmaske wird verwendet, um Operationen und Aktualisieren von Ergebnissen bedingt pro Element zu steuern. In Abhängigkeit von der Implementierung verwendet die Schreibmaske Misch- oder Nullungsmaskierung. Mit einem Prädikatoperanden (writemask, Schreibmaske oder k-Register) codierte Anweisungen verwenden diesen Operanden, um Berechnungsoperationen und Aktualisieren von Ergebnissen zum Bestimmungsoperanden bedingt pro Element zu steuern. Der Prädikatoperand ist als das Opmask-(Schreibmasken-)Register bekannt. In einigen Ausführungsformen ist die Opmask ein Satz von architektonischen Registern der Größe von 64 Bit. Es ist zu beachten, dass aus diesem Satz von architektonischen Registern nur k1 bis k7 als Prädikatoperand adressiert werden können. k0 kann als ein regulärer Ursprung oder eine Bestimmung verwendet werden, kann aber nicht als Prädikatoperand codiert werden. Außerdem ist zu beachten, dass ein Prädikatoperand verwendet werden kann, Speicherfehlerunterdrückung für einige Anweisungen mit einem Speicheroperanden (Ursprung oder Bestimmung) zu ermöglichen. Als ein Prädikatoperand enthalten die Opmask-Register ein Bit zum Lenken der Operation/Aktualisierung zu jedem Datenelement eines Vektorregisters. Im Allgemeinen können Opmask-Register Anweisungen mit folgenden Elementgrößen unterstützen: Fließkomma einfacher Genauigkeit (float32), ganzzahliges Doppelwort (int32), Fließkomma doppelter Genauigkeit (float64), ganzzahliges Vierfachwort (int64). Die Länge eines Opmask-Registers, MAX_KL, ist ausreichend zum Handhaben von bis zu 64 Elementen mit einem Bit pro Element, d. h. 64 Bits. Für eine gegebene Vektorlänge greift jede Anweisung nur auf die Anzahl von niederwertigsten Maskierungsbits zu, die basierend auf seinem Datentyp benötigt werden.
  • Ein Opmask-Register beeinflusst eine Anweisung mit einer Granularität pro Element. Demgemäß werden jede numerische oder nicht numerische Operation jedes Datenelements sowie Aktualisierungen pro Element von unmittelbaren Ergebnissen des Bestimmungsoperanden an dem korrespondierenden Bit des Opmask-Registers mit Prädikaten versehen. In den meisten Ausführungsformen entspricht eine Opmask, die als ein Prädikatoperand dient, den folgenden Eigenschaften: 1) die Operation der Anweisung wird nicht für ein Element durchgeführt, wenn das korrespondierende Opmask-Bit nicht gesetzt ist (dies impliziert, dass keine Ausnahme oder Verletzung durch eine Operation an einem abgedeckten Element verursacht werden kann und infolgedessen kein Ausnahmeflag als ein Ergebnis einer abgedeckten Operation aktualisiert wird); 2) ein Bestimmungselement wird nicht mit dem Ergebnis der Operation aktualisiert, wenn das korrespondierende Schreibmaskenbit nicht gesetzt ist; stattdessen muss der Wert des Bestimmungselements beibehalten (Mischmaskierung) oder herausgenullt werden (Nullungsmaskierung); und 3) für einige Anweisungen mit einem Speicheroperanden werden Speicherfehler für Elemente mit einem Maskenbit von 0 unterdrückt. Es ist zu beachten, dass dieses Merkmal ein vielseitiges Konstrukt zum Implementieren von Steuerflussvorhersagen bereitstellt, da die wirksame Maske ein Mischverhalten für Vektorregisterbestimmungen bereitstellt. Als eine Alternative kann die Maskierung zum Nullen anstelle von Mischen verwendet werden, so dass die abgedeckten Elemente mit 0 aktualisiert werden, anstatt den alten Wert beizubehalten. Das Nullungsverhalten wird bereitgestellt, um die implizite Abhängigkeit von dem alten Wert zu beseitigen, wenn sie nicht benötigt wird.
  • In Ausführungsformen enthalten Codierungen der Anweisung einen Speicheradressierungsoperanden eines Skalenindexbasis- bzw. SIB-Typs, der mehrere indexierte Bestimmungsorte im Speicher indirekt identifiziert. In einer Ausführungsform kann ein Speicheroperand des SIB-Typs eine Codierung enthalten, die ein Basisadressregister identifiziert. Der Inhalt des Basisadressregisters kann eine Basisadresse im Speicher repräsentieren, von dem die Adressen der besonderen Bestimmungsorte im Speicher berechnet werden. Zum Beispiel kann die Basisadresse die Adresse des ersten Orts in einem Block möglicher Bestimmungsorte für eine erweiterte Vektoranweisung sein. In einer Ausführungsform kann ein Speicheroperand des SIB-Typs eine Codierung enthalten, die ein Indexregister identifiziert. Jedes Element des Indexregisters kann einen Index oder Versatzwert spezifizieren, der verwendbar ist, von der Basisadresse eine Adresse eines jeweiligen Bestimmungsorts in einem Block möglicher Bestimmungsorte zu berechnen. In einer Ausführungsform kann ein Speicheroperand des SIB-Typs eine Codierung enthalten, die einen Skalierungsfaktor spezifiziert, der auf jeden Indexwert beim Berechnen einer jeweiligen Bestimmungsadresse anzuwenden ist. Wenn zum Beispiel ein Skalierungsfaktor von vier in dem Speicheroperanden des SIB-Typs codiert ist, kann jeder von einem Element des Indexregisters erhaltene Indexwert mit vier multipliziert und dann zu der Basisadresse addiert werden, um eine Bestimmungsadresse zu berechnen.
  • In einer Ausführungsform kann ein Speicheroperand des SIB-Typs der Form vm32{x, y, z} eine Vektoranordnung von Speicheroperanden identifizieren, spezifiziert unter Verwendung von Speicheradressierung des SIB-Typs. In diesem Beispiel wird die Anordnung von Speicheradressen unter Verwendung eines gemeinsamen Basisregisters, eines konstanten Skalierungsfaktors und eines Vektorindexregisters, das einzelne Elemente enthält, von denen jedes ein Indexwert von 32 Bit ist, spezifiziert. Das Vektorindexregister kann ein Register von 128 Bit (z. B. XMM) (vm32x), ein Register von 256 Bit (z. B. YMM) (vm32y) oder ein Register von 512 Bit (z. B. ZMM) (vm32z) sein. In einer anderen Ausführungsform kann ein Speicheroperand des SIB-Typs der Form vm64{x, y, z} eine Vektoranordnung von Speicheroperanden identifizieren, spezifiziert unter Verwendung von Speicheradressierung des SIB-Typs. In diesem Beispiel wird die Anordnung von Speicheradressen unter Verwendung eines gemeinsamen Basisregisters, eines konstanten Skalierungsfaktors und eines Vektorindexregisters, das einzelne Elemente enthält, von denen jedes ein Indexwert von 64 Bit ist, spezifiziert. Das Vektorindexregister kann ein Register von 128 Bit (z. B. XMM) (vm64x), ein Register von 256 Bit (z. B. YMM) (vm64y) oder ein Register von 512 Bit (z. B. ZMM) (vm64z) sein.
  • Beispielhaftes Verfahren zur Ausführung der Anweisung VBROADCASTSTRIMMMSKED
  • 19 zeigt eine Ausführungsform eines Verfahrens, das von einem Prozessor durchgeführt wird, um eine Anweisung VBROADCASTSTRIMMMSKED zu verarbeiten. Zum Beispiel führen die Prozessorkomponenten von 18, eine Pipeline, wie nachstehend ausgeführt, usw. dieses Verfahren durch.
  • Bei 1901 wird eine Anweisung abgerufen. Zum Beispiel wird eine Anweisung VBROADCASTSTRIMMMSKED abgerufen. Die Anweisung VBROADCASTSTRIMMMSKED enthält Felder für einen Operationscode, ein Feld DST zum Identifizieren eines gepackten Bestimmungsregisteroperanden, einen Ursprungsschreibmaskenoperanden zum Identifizieren nicht maskierter Elemente des gepackten Bestimmungsregisters, ein maskiertes Elementsteuerfeld zum Spezifizieren, ob maskierte Elemente zu nullen sind oder ob ihnen gestattet wird, ihre vorherigen Werte beizubehalten, eine erste Unmittelbare und eine zweite Unmittelbare. In einigen Ausführungsformen wird die Anweisung aus einem Anweisungscache abgerufen. Der Bestimmungsoperand spezifiziert ein gepacktes Datenvektorregister. Der Operationscode der Anweisung VBROADCASTSTRIMMMSKED gibt an, dass ein Vektorregisterelement unter einer Schreibmaske unter Verwendung einer Unmittelbaren als einen Schritt-Wert rundgesendet (BROADCAST) wird.
  • In einigen Ausführungsformen wird die Anweisung aus einem Anweisungscache abgerufen.
  • Die abgerufene Anweisung wird bei 1903 decodiert. Zum Beispiel wird die abgerufene Anweisung VBROADCASTSTRIMMMSKED durch eine Decodierungsschaltung wie die hierin angeführte decodiert.
  • Bei 1905 wird die terminierte Anweisung terminiert (nach Erfordernis).
  • Bei 1907 wird die decodierte Anweisung durch eine Ausführungsschaltung (Hardware) wie 1716 ausgeführt. Für die Anweisung VBROADCASTSTRIMMMSKED verwendet die Ausführung die Schreibmaskenkennung k1 1708 zum Identifizieren des Maskenregisters k1 1720, verwendet das Maskenregister k1 1720 zum Identifizieren nicht maskierter Elemente des gepackten Bestimmungsregisters 1726 und nicht maskierter Elemente eines unmittelbaren Vektors, gebildet durch die Ausführungsschaltung 1716. Die Ausführungsschaltung 1716 setzt das erste nicht maskierte Element 1718 des unmittelbaren Vektors auf den Wert von imml 1712 und addiert nacheinander den Wert von imm2 1712, der zwei ist, als einen Schritt-Wert zu dem zweiten und den nachfolgenden Datenelementen des unmittelbaren Vektors. Die Ausführungsschaltung 1716 verwendet die Rundsendeschaltung 1724 zum Schreiben des Zwischenvektors in das gepackte Bestimmungsregister 1726.
  • In einigen Ausführungsformen wird die Anweisung bei 1909 übergeben oder abgelegt.
  • ANWEISUNG KBROADCASTIMM2MSK
  • Beispielhafte Ausführung
  • Hierin werden Ausführungsformen einer Anweisung KBROADCASTIMM2MSK zum Verbessern eines Computers selbst angeführt. Insbesondere bewirkt die Ausführung der Anweisung KBROADCASTIMM2MSK, dass die Ausführungsschaltung ein Bestimmungsmaskenregister in Bereiche gleicher Größe, die die gleiche Größe wie eine Unmittelbare aufweisen, logisch partitioniert, ein Schreibmaskenregister zum Identifizieren nicht maskierter logischer Bereiche des Bestimmungsschreibmaskenregisters verwendet und die Unmittelbare an die nicht maskierten logischen Bereiche rundsendet.
  • 20 zeigt eine beispielhafte Ausführung einer Anweisung KBROADCASTIMM2MSK. Das Format der Anweisung KBROADCASTIMM2MSK 2002 enthält Felder für einen Operationscode 2004 (z. B. pneumonisch „KBROADCASTIMM2MSK“), ein Bestimmungsschreibmaskenregister (k1) 2006, ein Ursprungsschreibmaskenregister (k2) 2010 und eine Unmittelbare (imml 2008).
  • Als Reaktion auf eine Anweisung mit dem Operationscode 2004 gleich KBROADCASTIMM2MSK partitioniert die Ausführungsschaltung 2016 logisch das Bestimmungsmaskenregister (k1) in Bereiche gleicher Größe, die die gleiche Größe wie die Unmittelbare aufweisen, verwendet das Schreibmaskenregister (k2) zum Identifizieren nicht maskierter logischer Bereiche des Bestimmungsschreibmaskenregisters (k1), wobei das Ursprungsschreibmaskenregister verwendet wird, den Multiplexer 2018 zu steuern, zwischen der Unmittelbaren (für nicht maskierte Elemente) und dem vorherigen Wert (für maskierte Elemente) auszuwählen. Die Ausführungsschaltung 2016 führt ferner den Ausgang des Multiplexers 2018 der Rundsendeschaltung 2020 zu, die wiederum in das Bestimmungsmaskenregister k1 schreibt.
  • Einige Vektorelemente von 20 werden als „x“ dargestellt, wodurch angegeben wird, dass der Wert gleichgültig ist. Sie sind bei der Diskussion der Operation dieser Anweisung nicht relevant.
  • Beispielhafte Hardware zum Ausführen der Anweisung KBROADCASTIMM2MSK
  • 21 zeigt eine Ausführungsform von Hardware zum Verarbeiten einer Anweisung wie eine arithmetische Wiederholungsanweisung. Wie dargestellt, speichert der Speicher 2103 eine Anweisung KBROADCASTIMM2MSK 2101, die auszuführen ist.
  • Die Anweisung wird von der Decodierungsschaltung 2105 empfangen. Zum Beispiel empfängt die Decodierungsschaltung 2105 die Anweisung von der Abruflogik/-schaltung. Die Anweisung 2101 enthält Felder für einen Operationscode (z. B. pneumonisch „KBROADCASTIMM2MSK“), eine Bestimmungskennung 1106 zum Spezifizieren eines gepackten Bestimmungsregisters und eine Unmittelbare. In einigen Ausführungsformen sind der Ursprung/die Ursprünge und die Bestimmung Register und in anderen Ausführungsform ein oder mehrere Speicherorte. Ausführlichere Ausführungsformen mindestens eines Anweisungsformats werden nachstehend ausführlicher veranschaulicht. Die Decodierungsschaltung 2105 decodiert die Anweisung in eine oder mehrere Operationen. In einigen Ausführungsformen enthält dieses Decodieren Erzeugen einer Vielzahl von Mikrooperationen, die durch die Ausführungsschaltung (wie die Ausführungsschaltung 2109 oder 2016) durchzuführen sind. Die Decodierungsschaltung 2105 decodiert außerdem Anweisungspräfixe (falls verwendet).
  • In einigen Ausführungsformen stellen Registerumbenennung, Registerzuteilung und/oder eine Terminierungsschaltung 2107 Funktionalität für eines oder mehrere von Folgendem bereit: 1) Umbenennen logischer Operandenwerte in physikalische Operandenwerte (z. B. eine Registeraliastabelle in einigen Ausführungsformen), 2) Zuteilen von Statusbits und -flags zu der decodierten Anweisung und 3) Terminierung der decodierten Anweisung für Ausführung in der Ausführungsschaltung aus einem Anweisungsvorrat (z. B. unter Verwendung einer Reservierungsstation in einigen Ausführungsformen).
  • Die Register (Registerdatei) und/oder der Speicher 2108 speichern Daten als Operanden der Anweisung, an der durch die Ausführungsschaltung Operationen durchzuführen sind. Beispielhafte Typen von Registern enthalten gepackte Datenregister, Allzweckregister und Fließkommaregister.
  • Die Ausführungsschaltung 2109 führt die decodierte Anweisung KBROADCASTIMM2MSK aus. Eine Ausführungsform der Ausführungsschaltung 2016, die ähnlich der Ausführungsschaltung 2109 ist, wurde in 20 dargestellt. Die Rückschreib-(Ablage-)schaltung 2111 übergibt das Ergebnis der Ausführung der decodierten Anweisung KBROADCASTIMM2MSK.
  • Beispielhafte Formate der Anweisung KBROADCASTIMM2MSK
  • In einigen Ausführungsformen übergibt die Ablage-/Rückschreibschaltung das Bestimmungsregister architektonisch in das Register oder den Speicher und legt die Anweisung ab.
  • Eine Ausführungsform eines Formats für eine Anweisung KBROADCASTIMM2MSK ist OPCODE DSTMASKREG, SRCMASKREG, IMM1. In einigen Ausführungsformen ist KBROADCASTIMM2MSK {B/W/D/Q} die Operationscode-Mnemonik der Anweisung, wobei der Größenparameter {B/W/D/Q} die Größe der Unmittelbaren spezifiziert. SRCREG ist ein Feld zum Identifizieren einer Schreibmaske (wie k2), um auszuwählen, welches der Unmittelbaren und des vorherigen Werts an das Bestimmungsmaskenregister 2022 rundzusenden ist.
  • In einigen Ausführungsformen ist das Feld OPCODE ein vollständiges Operationscodefeld (wie 2974) oder ein eigentliches Operationscodefeld (wie 2930), ist das Feld SRCREG ein Reg-Feld (wie 2944), ist das Feld DSTREG ein R/M-Feld (wie 2946) und ist das Feld IMM1 ein IMM8-Feld (wie 2972 in 29A).
  • In einigen Ausführungsformen enthält die Anweisung KBROADCASTIMM2MSK ein Feld für einen Schreibmaskenregisteroperanden (k) (z. B. KBROADCASTIMM2MSK{k} DSTREG, SRC1, SRC2). Eine Schreibmaske wird verwendet, um Operationen und Aktualisieren von Ergebnissen bedingt pro Element zu steuern. In Abhängigkeit von der Implementierung verwendet die Schreibmaske Misch- oder Nullungsmaskierung. Mit einem Prädikatoperanden (writemask, Schreibmaske oder k-Register) codierte Anweisungen verwenden diesen Operanden, um Berechnungsoperationen und Aktualisieren von Ergebnissen zum Bestimmungsoperanden bedingt pro Element zu steuern. Der Prädikatoperand ist als das Opmask-(Schreibmasken-)Register bekannt. In einigen Ausführungsformen ist die Opmask ein Satz von architektonischen Registern der Größe von 64 Bit. Es ist zu beachten, dass aus diesem Satz von architektonischen Registern nur k1 bis k7 als Prädikatoperand adressiert werden können. k0 kann als ein regulärer Ursprung oder eine Bestimmung verwendet werden, kann aber nicht als Prädikatoperand codiert werden. Außerdem ist zu beachten, dass ein Prädikatoperand verwendet werden kann, Speicherfehlerunterdrückung für einige Anweisungen mit einem Speicheroperanden (Ursprung oder Bestimmung) zu ermöglichen. Als ein Prädikatoperand enthalten die Opmask-Register ein Bit zum Lenken der Operation/Aktualisierung zu jedem Datenelement eines Vektorregisters. Im Allgemeinen können Opmask-Register Anweisungen mit folgenden Elementgrößen unterstützen: Fließkomma einfacher Genauigkeit (float32), ganzzahliges Doppelwort (int32), Fließkomma doppelter Genauigkeit (float64), ganzzahliges Vierfachwort (int64). Die Länge eines Opmask-Registers, MAX_KL, ist ausreichend zum Handhaben von bis zu 64 Elementen mit einem Bit pro Element, d. h. 64 Bits. Für eine gegebene Vektorlänge greift jede Anweisung nur auf die Anzahl von niederwertigsten Maskierungsbits zu, die basierend auf seinem Datentyp benötigt werden.
  • Ein Opmask-Register beeinflusst eine Anweisung mit einer Granularität pro Element. Demgemäß werden jede numerische oder nicht numerische Operation jedes Datenelements sowie Aktualisierungen pro Element von unmittelbaren Ergebnissen des Bestimmungsoperanden an dem korrespondierenden Bit des Opmask-Registers mit Prädikaten versehen. In den meisten Ausführungsformen entspricht eine Opmask, die als ein Prädikatoperand dient, den folgenden Eigenschaften: 1) die Operation der Anweisung wird nicht für ein Element durchgeführt, wenn das korrespondierende Opmask-Bit nicht gesetzt ist (dies impliziert, dass keine Ausnahme oder Verletzung durch eine Operation an einem abgedeckten Element verursacht werden kann und infolgedessen kein Ausnahmeflag als ein Ergebnis einer abgedeckten Operation aktualisiert wird); 2) ein Bestimmungselement wird nicht mit dem Ergebnis der Operation aktualisiert, wenn das korrespondierende Schreibmaskenbit nicht gesetzt ist; stattdessen muss der Wert des Bestimmungselements beibehalten (Mischmaskierung) oder herausgenullt werden (Nullungsmaskierung); und 3) für einige Anweisungen mit einem Speicheroperanden werden Speicherfehler für Elemente mit einem Maskenbit von 0 unterdrückt. Es ist zu beachten, dass dieses Merkmal ein vielseitiges Konstrukt zum Implementieren von Steuerflussvorhersagen bereitstellt, da die wirksame Maske ein Mischverhalten für Vektorregisterbestimmungen bereitstellt. Als eine Alternative kann die Maskierung zum Nullen anstelle von Mischen verwendet werden, so dass die abgedeckten Elemente mit 0 aktualisiert werden, anstatt den alten Wert beizubehalten. Das Nullungsverhalten wird bereitgestellt, um die implizite Abhängigkeit von dem alten Wert zu beseitigen, wenn sie nicht benötigt wird.
  • In Ausführungsformen enthalten Codierungen der Anweisung einen Speicheradressierungsoperanden eines Skalenindexbasis- bzw. SIB-Typs, der mehrere indexierte Bestimmungsorte im Speicher indirekt identifiziert. In einer Ausführungsform kann ein Speicheroperand des SIB-Typs eine Codierung enthalten, die ein Basisadressregister identifiziert. Der Inhalt des Basisadressregisters kann eine Basisadresse im Speicher repräsentieren, von dem die Adressen der besonderen Bestimmungsorte im Speicher berechnet werden. Zum Beispiel kann die Basisadresse die Adresse des ersten Orts in einem Block möglicher Bestimmungsorte für eine erweiterte Vektoranweisung sein. In einer Ausführungsform kann ein Speicheroperand des SIB-Typs eine Codierung enthalten, die ein Indexregister identifiziert. Jedes Element des Indexregisters kann einen Index oder Versatzwert spezifizieren, der verwendbar ist, von der Basisadresse eine Adresse eines jeweiligen Bestimmungsorts in einem Block möglicher Bestimmungsorte zu berechnen. In einer Ausführungsform kann ein Speicheroperand des SIB-Typs eine Codierung enthalten, die einen Skalierungsfaktor spezifiziert, der auf jeden Indexwert beim Berechnen einer jeweiligen Bestimmungsadresse anzuwenden ist. Wenn zum Beispiel ein Skalierungsfaktor von vier in dem Speicheroperanden des SIB-Typs codiert ist, kann jeder von einem Element des Indexregisters erhaltene Indexwert mit vier multipliziert und dann zu der Basisadresse addiert werden, um eine Bestimmungsadresse zu berechnen.
  • In einer Ausführungsform kann ein Speicheroperand des SIB-Typs der Form vm32{x, y, z} eine Vektoranordnung von Speicheroperanden identifizieren, spezifiziert unter Verwendung von Speicheradressierung des SIB-Typs. In diesem Beispiel wird die Anordnung von Speicheradressen unter Verwendung eines gemeinsamen Basisregisters, eines konstanten Skalierungsfaktors und eines Vektorindexregisters, das einzelne Elemente enthält, von denen jedes ein Indexwert von 32 Bit ist, spezifiziert. Das Vektorindexregister kann ein Register von 128 Bit (z. B. XMM) (vm32x), ein Register von 256 Bit (z. B. YMM) (vm32y) oder ein Register von 512 Bit (z. B. ZMM) (vm32z) sein. In einer anderen Ausführungsform kann ein Speicheroperand des SIB-Typs der Form vm64{x, y, z} eine Vektoranordnung von Speicheroperanden identifizieren, spezifiziert unter Verwendung von Speicheradressierung des SIB-Typs. In diesem Beispiel wird die Anordnung von Speicheradressen unter Verwendung eines gemeinsamen Basisregisters, eines konstanten Skalierungsfaktors und eines Vektorindexregisters, das einzelne Elemente enthält, von denen jedes ein Indexwert von 64 Bit ist, spezifiziert. Das Vektorindexregister kann ein Register von 128 Bit (z. B. XMM) (vm64x), ein Register von 256 Bit (z. B. YMM) (vm64y) oder ein Register von 512 Bit (z. B. ZMM) (vm64z) sein.
  • Beispielhaftes Verfahren zum Ausführen der Anweisung KBROADCASTIMM2MSK
  • 22 zeigt eine Ausführungsform eines durch einen Prozessor durchgeführten Verfahrens zum Verarbeiten einer Anweisung KBROADCASTIMM2MSK. Zum Beispiel führen die Prozessorkomponenten von 21, eine Pipeline, wie nachstehend ausgeführt, usw. dieses Verfahren durch.
  • Bei 2201 wird eine Anweisung abgerufen. Zum Beispiel wird eine Anweisung KBROADCASTIMM2MSK abgerufen. Die Anweisung KBROADCASTIMM2MSK enthält Felder für einen Operationscode, einen Bestimmungsschreibmaskenoperanden, einen Ursprungsoperanden und eine Unmittelbare. In einigen Ausführungsformen enthält die Anweisung ferner ein Feld für eine Schreibmaske. In einigen Ausführungsformen wird die Anweisung aus einem Anweisungscache abgerufen. Der Bestimmungsoperand spezifiziert ein Schreibmaskenregister. Der Operationscode der Anweisung KBROADCASTIMM2MSK gibt an, dass eine Unmittelbare an ein Maskenregister rundgesendet wird.
  • Die abgerufene Anweisung wird bei 2203 decodiert. Zum Beispiel wird die abgerufene Anweisung KBROADCASTIMM2MSK durch eine Decodierungsschaltung wie die hierin angeführte decodiert.
  • Bei 2205 wird die decodierte Anweisung terminiert (nach Erfordernis).
  • Bei 2207 wird die terminierte Anweisung durch eine Ausführungsschaltung (Hardware) wie 2016 ausgeführt. Für die Anweisung KBROADCASTIMM2MSK bewirkt die Ausführung, dass die Ausführungsschaltung (wie 2016) das Schreibmaskenregister k1 in logische Bereiche gleicher Größe, die die gleiche Größe wie imml aufweisen, logisch partitioniert, das Schreibmaskenregister k2 zum Identifizieren nicht maskierter Bereiche des Bestimmungsschreibmaskenregisters k1 verwendet und imml an die nicht maskierten Bereiche rundsendet.
  • In einigen Ausführungsformen wird die Anweisung bei 2209 übergeben oder abgelegt.
  • ANWEISUNG KXORKREGIMM
  • Beispielhafte Ausführung
  • Hierin werden Ausführungsformen einer Anweisung KXORKREGIMM zum Verbessern eines Computers selbst angeführt. Insbesondere ergibt die Ausführung der Anweisung KXORKREGIMM einen Vorteil, zu gestatten, dass ein unmittelbarer Wert in einer Anweisung verwendet wird, anstatt zu erfordern, dass der Wert in einem Register gespeichert wird.
  • 23 zeigt eine beispielhafte Ausführung einer Anweisung KXORKREGIMM. Das Format der Anweisung KXORKREGIMM 2302 enthält Felder für einen Operationscode 2304 (z. B. pneumonisch „KXORKREGIMM“), ein Bestimmungsschreibmaskenregister (k1 2306), ein Ursprungsschreibmaskenregister (k2) 2308, ein zweites Ursprungsschreibmaskenregister (k3) 2310, ein maskiertes Elementsteuerfeld (z 2312) und eine Unmittelbare (imml 2314).
  • Als Reaktion auf eine Anweisung mit dem Operationscode 2304 gleich KXORKREGIMM partitioniert die Ausführungsschaltung 2318 das Bestimmungsschreibmaskenregister(k1 2328) logisch in Bereiche gleicher Größer, die die gleiche Größe wie die Unmittelbare (imm1 2314) aufweisen, verwendet das Ursprungsschreibmaskenregister (k2) zum Identifizieren nicht maskierter logischer Bereiche des Bestimmungsschreibmaskenregisters (k1 2328), führt ein bitweises XOR an dem Ursprungsschreibmaskenregister k3 2326 und der Unmittelbaren (imml 2314) unter Verwendung des XOR-Gatters 2320 durch. Die Ausführungsschaltung 2318 führt ferner den Ausgang des XOR-Gatters 2320 der Rundsendeschaltung 2322 zu, die wiederum das XOR-Ergebnis an die nicht maskierten logischen Bereiche des Bestimmungsschreibmaskenregisters k1 rundsendet. Für maskierte logische Bereiche nullt die Ausführungsschaltung 2318 die logischen Bereiche in dem Bestimmungsschreibmaskenregister 2328, wenn das maskierte Elementsteuerfeld angibt, dass maskierte Elemente genullt werden sollten.
  • Beispielhafte Hardware zum Ausführen der Anweisung KXORKREGIMM
  • 24 zeigt eine Ausführungsform von Hardware zum Verarbeiten einer Anweisung wie eine arithmetische Wiederholungsanweisung. Wie dargestellt, speichert der Speicher 2403 eine Anweisung KXORKREGIMM 2401, die auszuführen ist.
  • Die Anweisung wird von der Decodierungsschaltung 2405 empfangen. Zum Beispiel empfängt die Decodierungsschaltung 2405 die Anweisung von der Abruflogik/-schaltung. Die Anweisung 2401 enthält Felder für einen Operationscode (z. B. pneumonisch „KXORKREGIMM“), eine Bestimmungskennung 1106 zum Spezifizieren eines gepackten Bestimmungsregisters und eine Unmittelbare. In einigen Ausführungsformen sind der Ursprung/die Ursprünge und die Bestimmung Register und in anderen Ausführungsform ein oder mehrere Speicherorte. Ausführlichere Ausführungsformen mindestens eines Anweisungsformats werden nachstehend ausführlicher veranschaulicht. Die Decodierungsschaltung 2405 decodiert die Anweisung in eine oder mehrere Operationen. In einigen Ausführungsformen enthält dieses Decodieren Erzeugen einer Vielzahl von Mikrooperationen, die durch die Ausführungsschaltung (wie die Ausführungsschaltung 2409 oder 2318) durchzuführen sind. Die Decodierungsschaltung 2405 decodiert außerdem Anweisungspräfixe (falls verwendet).
  • In einigen Ausführungsformen stellen Registerumbenennung, Registerzuteilung und/oder eine Terminierungsschaltung 2407 Funktionalität für eines oder mehrere von Folgendem bereit: 1) Umbenennen logischer Operandenwerte in physikalische Operandenwerte (z. B. eine Registeraliastabelle in einigen Ausführungsformen), 2) Zuteilen von Statusbits und -flags zu der decodierten Anweisung und 3) Terminierung der decodierten Anweisung für Ausführung in der Ausführungsschaltung aus einem Anweisungsvorrat (z. B. unter Verwendung einer Reservierungsstation in einigen Ausführungsformen).
  • Die Register (Registerdatei) und/oder der Speicher 2408 speichern Daten als Operanden der Anweisung, an der durch die Ausführungsschaltung Operationen durchzuführen sind. Beispielhafte Typen von Registern enthalten gepackte Datenregister, Allzweckregister und Fließkommaregister.
  • Die Ausführungsschaltung 2409 führt die decodierte Anweisung KXORKREGIMM aus. Die Ausführungsschaltung 2318 wurde in 23 dargestellt. Die Ausführung der decodierten Anweisung KXORKREGIMM partitioniert das Bestimmungsschreibmaskenregisters logisch in Bereiche gleiche Größe, die die gleiche Größe wie die Unmittelbare 2314 aufweisen, und verwendet das Ursprungsschreibmaskenregister k2 2308, 2326 zum Identifizieren von Bereichen, die nicht maskiert sind. Die Ausführung führt weiter ein bitweises XOR des unmittelbaren zweiten Ursprungsschreibmaskenregisters k3 2310 durch. Die Ausführung leitet ferner Ergebnisse des XOR-Gatters 2320 an die Rundsendeschaltung 2322k weiter, die wiederum die Ergebnisse in nicht maskierte Bereiche des Bestimmungsregister k3 schreibt. Die Rückschreib-(Ablage-)schaltung 2411 übergibt das Ergebnis der Ausführung der decodierten Anweisung KXORKREGIMM.
  • Beispielhafte Formate der Anweisung KXORKREGIMM
  • In einigen Ausführungsformen übergibt die Ablage-/Rückschreibschaltung das Bestimmungsregister architektonisch in das Register oder den Speicher und legt die Anweisung ab.
  • Eine Ausführungsform eines Formats für eine Anweisung KXORKREGIMM 2302 (23) ist OPCODE (wie Operationscode 2304), DSTMASKREG (wie k1 2306), WRITEMASK (wie k2 2308), ein maskiertes Elementsteuerfeld (wie Z-CTRL 2310), SRCMASKREG (wie k3 2312) und IMM1 (wie IMM1 2314). In einigen Ausführungsformen ist KXORKREGIMM {B/W/D/Q} die Operationscode-Mnemonik der Anweisung, wobei der Größenparameter {B/W/D/Q} die Größe der Unmittelbaren spezifiziert. K2 2308 identifiziert ein Schreibmaskenregister (wie das Maskenregister k2 2326) zum Auswählen, welches der Unmittelbaren und des vorherigen Werts an das Bestimmungsschreibmaskenregister 2328 rundzusenden ist.
  • In einigen Ausführungsformen ist das Feld OPCODE ein vollständiges Operationscodefeld (wie 2974) oder ein eigentliches Operationscodefeld (wie 2930), ist das Feld SRCMASKREG ein Reg-Feld (wie 2944), ist das Feld DSTMASKREG ein R/M-Feld (wie 2946) und ist das Feld IMM1 ein IMM8-Feld (wie 2972 in 29A).
  • In einigen Ausführungsformen enthält die Anweisung KXORKREGIMM ein Feld für einen Schreibmaskenregisteroperanden (k) (z. B. KXORKREGIMM{k} DSTREG, SRC1, SRC2). Eine Schreibmaske wird verwendet, um Operationen und Aktualisieren von Ergebnissen bedingt pro Element zu steuern. In Abhängigkeit von der Implementierung verwendet die Schreibmaske Misch- oder Nullungsmaskierung. Mit einem Prädikatoperanden (writemask, Schreibmaske oder k-Register) codierte Anweisungen verwenden diesen Operanden, um Berechnungsoperationen und Aktualisieren von Ergebnissen zum Bestimmungsoperanden bedingt pro Element zu steuern. Der Prädikatoperand ist als das Opmask-(Schreibmasken-)Register bekannt. In einigen Ausführungsformen ist die Opmask ein Satz von architektonischen Registern der Größe von 64 Bit. Es ist zu beachten, dass aus diesem Satz von architektonischen Registern nur k1 bis k7 als Prädikatoperand adressiert werden können. k0 kann als ein regulärer Ursprung oder eine Bestimmung verwendet werden, kann aber nicht als Prädikatoperand codiert werden. Außerdem ist zu beachten, dass ein Prädikatoperand verwendet werden kann, Speicherfehlerunterdrückung für einige Anweisungen mit einem Speicheroperanden (Ursprung oder Bestimmung) zu ermöglichen. Als ein Prädikatoperand enthalten die Opmask-Register ein Bit zum Lenken der Operation/Aktualisierung zu jedem Datenelement eines Vektorregisters. Im Allgemeinen können Opmask-Register Anweisungen mit folgenden Elementgrößen unterstützen: Fließkomma einfacher Genauigkeit (float32), ganzzahliges Doppelwort (int32), Fließkomma doppelter Genauigkeit (float64), ganzzahliges Vierfachwort (int64). Die Länge eines Opmask-Registers, MAX_KL, ist ausreichend zum Handhaben von bis zu 64 Elementen mit einem Bit pro Element, d. h. 64 Bits. Für eine gegebene Vektorlänge greift jede Anweisung nur auf die Anzahl von niederwertigsten Maskierungsbits zu, die basierend auf seinem Datentyp benötigt werden.
  • Ein Opmask-Register beeinflusst eine Anweisung mit einer Granularität pro Element. Demgemäß werden jede numerische oder nicht numerische Operation jedes Datenelements sowie Aktualisierungen pro Element von unmittelbaren Ergebnissen des Bestimmungsoperanden an dem korrespondierenden Bit des Opmask-Registers mit Prädikaten versehen. In den meisten Ausführungsformen entspricht eine Opmask, die als ein Prädikatoperand dient, den folgenden Eigenschaften: 1) die Operation der Anweisung wird nicht für ein Element durchgeführt, wenn das korrespondierende Opmask-Bit nicht gesetzt ist (dies impliziert, dass keine Ausnahme oder Verletzung durch eine Operation an einem abgedeckten Element verursacht werden kann und infolgedessen kein Ausnahmeflag als ein Ergebnis einer abgedeckten Operation aktualisiert wird); 2) ein Bestimmungselement wird nicht mit dem Ergebnis der Operation aktualisiert, wenn das korrespondierende Schreibmaskenbit nicht gesetzt ist; stattdessen muss der Wert des Bestimmungselements beibehalten (Mischmaskierung) oder herausgenullt werden (Nullungsmaskierung); und 3) für einige Anweisungen mit einem Speicheroperanden werden Speicherfehler für Elemente mit einem Maskenbit von 0 unterdrückt. Es ist zu beachten, dass dieses Merkmal ein vielseitiges Konstrukt zum Implementieren von Steuerflussvorhersagen bereitstellt, da die wirksame Maske ein Mischverhalten für Vektorregisterbestimmungen bereitstellt. Als eine Alternative kann die Maskierung zum Nullen anstelle von Mischen verwendet werden, so dass die abgedeckten Elemente mit 0 aktualisiert werden, anstatt den alten Wert beizubehalten. Das Nullungsverhalten wird bereitgestellt, um die implizite Abhängigkeit von dem alten Wert zu beseitigen, wenn sie nicht benötigt wird.
  • In Ausführungsformen enthalten Codierungen der Anweisung einen Speicheradressierungsoperanden eines Skalenindexbasis- bzw. SIB-Typs, der mehrere indexierte Bestimmungsorte im Speicher indirekt identifiziert. In einer Ausführungsform kann ein Speicheroperand des SIB-Typs eine Codierung enthalten, die ein Basisadressregister identifiziert. Der Inhalt des Basisadressregisters kann eine Basisadresse im Speicher repräsentieren, von dem die Adressen der besonderen Bestimmungsorte im Speicher berechnet werden. Zum Beispiel kann die Basisadresse die Adresse des ersten Orts in einem Block möglicher Bestimmungsorte für eine erweiterte Vektoranweisung sein. In einer Ausführungsform kann ein Speicheroperand des SIB-Typs eine Codierung enthalten, die ein Indexregister identifiziert. Jedes Element des Indexregisters kann einen Index oder Versatzwert spezifizieren, der verwendbar ist, von der Basisadresse eine Adresse eines jeweiligen Bestimmungsorts in einem Block möglicher Bestimmungsorte zu berechnen. In einer Ausführungsform kann ein Speicheroperand des SIB-Typs eine Codierung enthalten, die einen Skalierungsfaktor spezifiziert, der auf jeden Indexwert beim Berechnen einer jeweiligen Bestimmungsadresse anzuwenden ist. Wenn zum Beispiel ein Skalierungsfaktor von vier in dem Speicheroperanden des SIB-Typs codiert ist, kann jeder von einem Element des Indexregisters erhaltene Indexwert mit vier multipliziert und dann zu der Basisadresse addiert werden, um eine Bestimmungsadresse zu berechnen.
  • In einer Ausführungsform kann ein Speicheroperand des SIB-Typs der Form vm32{x, y, z} eine Vektoranordnung von Speicheroperanden identifizieren, spezifiziert unter Verwendung von Speicheradressierung des SIB-Typs. In diesem Beispiel wird die Anordnung von Speicheradressen unter Verwendung eines gemeinsamen Basisregisters, eines konstanten Skalierungsfaktors und eines Vektorindexregisters, das einzelne Elemente enthält, von denen jedes ein Indexwert von 32 Bit ist, spezifiziert. Das Vektorindexregister kann ein Register von 128 Bit (z. B. XMM) (vm32x), ein Register von 256 Bit (z. B. YMM) (vm32y) oder ein Register von 512 Bit (z. B. ZMM) (vm32z) sein. In einer anderen Ausführungsform kann ein Speicheroperand des SIB-Typs der Form vm64{x, y, z} eine Vektoranordnung von Speicheroperanden identifizieren, spezifiziert unter Verwendung von Speicheradressierung des SIB-Typs. In diesem Beispiel wird die Anordnung von Speicheradressen unter Verwendung eines gemeinsamen Basisregisters, eines konstanten Skalierungsfaktors und eines Vektorindexregisters, das einzelne Elemente enthält, von denen jedes ein Indexwert von 64 Bit ist, spezifiziert. Das Vektorindexregister kann ein Register von 128 Bit (z. B. XMM) (vm64x), ein Register von 256 Bit (z. B. YMM) (vm64y) oder ein Register von 512 Bit (z. B. ZMM) (vm64z) sein.
  • Beispielhaftes Verfahren zur Ausführung der Anweisung KXORKREGIMM
  • 25 zeigt eine Ausführungsform eines Verfahrens, das von einem Prozessor durchgeführt wird, um eine Anweisung KXORKREGIMM zu verarbeiten. Zum Beispiel führen die Prozessorkomponenten von 24, eine Pipeline, wie nachstehend ausgeführt, usw. dieses Verfahren durch.
  • Bei 2501 wird eine Anweisung abgerufen. Zum Beispiel wird eine Anweisung KXORKREGIMM abgerufen. Die Anweisung KXORKREGIMM enthält Felder für einen Operationscode, einen Bestimmungsoperanden, eine Schreibmaskenkennung, ein maskiertes Elementsteuerfeld, einen Ursprungsoperanden und eine Unmittelbare. In einigen Ausführungsformen wird die Anweisung aus einem Anweisungscache abgerufen. Der Bestimmungsoperand spezifiziert ein Schreibmaskenregister. Der Operationscode der Anweisung KXORKREGIMM gibt ein Ergebnis einer XOR-Oeration an, die die Unmittelbare (imm1 2314) involviert, und das Ursprungsmaskenregister (Register k3 2326) wird unter Verwendung der Rundsendeschaltung 2322 an ein Schreibmaskenregister (k1 2328) rundgesendet.
  • Wie dargestellt, verwendet die Rundsendeschaltung 2322 das Schreibmaskenregister (k2 2326) und das maskierte Elementsteuerfeld (Z-CTRL 2324) zum Rundsenden des Ergebnisses der XOR-Operation an jedes der nicht maskierten Elemente von k1 2328 und nullt die maskierten Elemente von k1 2328.
  • Die abgerufene Anweisung wird bei 2503 decodiert. Zum Beispiel wird die abgerufene Anweisung KXORKREGIMM durch eine Decodierungsschaltung wie die hierin angeführte decodiert.
  • Bei 2505 wird die decodierte Anweisung terminiert (nach Erfordernis).
  • Bei 2507 wird die decodierte Anweisung durch eine Ausführungsschaltung (Hardware) wie 2318 ausgeführt. Für die Anweisung KXORKREGIMM wird die Ausführung bewirken, dass eine Ausführungsschaltung (wie 2318) eine XOR-Operation (zum Beispiel unter Verwendung des XOR-Gatters 2320) der Unmittelbaren (wie imml 2314) und eines Ursprungsmaskenregisters (wie das Maskenregister k3 2326) durchführt, und verwendet die Rundsendeschaltung (wie das Maskenregister k2 2326) und ein maskiertes Elementsteuerfeld (wie Z-CTRL 2324) zum Rundsenden eines Ergebnisses der XOR-Operation an nicht maskierte Elemente des Bestimmungsschreibmaskenregisters (wie k1 2328) und nullt maskierte Elemente des Bestimmungsregisters.
  • In einigen Ausführungsformen wird die Anweisung bei 2509 übergeben oder abgelegt.
  • ANWEISUNG VPADD3OPR
  • Beispielhafte Ausführung
  • Hierin werden Ausführungsformen einer Anweisung VPADD3OPR zum Verbessern eines Computers selbst angeführt. Insbesondere ergibt die Ausführung der Anweisung VPADD3OPR einen Vorteil, zu gestatten, dass ein unmittelbarer Wert in einer Anweisung, die drei Operanden involviert, verwendet wird, anstatt mehrere Anweisungen zu erfordern, um dasselbe Ergebnis zu erreichen.
  • 26 zeigt eine beispielhafte Ausführung einer Anweisung VPADD3OPR. Das Format der Anweisung VPADD3OPR 2602 enthält Felder für einen Operationscode 2604 (z. B. pneumonisch „VPADD3OPR“), eine gepackte Ursprungs-/Bestimmungskennung (dst/src1 2612 vor der Ausführung, dst/src1 2622 nach der Ausführung) (verwendet als sowohl ein Ursprung als auch als ein Bestimmungsoperand für die Operation) zum Spezifizieren eines gepackten dst-Registers 2622 zum Speichern eines Ergebnisses der Operation und zum Spezifizieren eines gepackten dst/src1-Registers, eine zweite gepackte Ursprungskennung (src2 2608) zum Spezifizieren des gepackten src2-Registers 2614 und eine Unmittelbare (imm1 2610).
  • Als Reaktion auf eine Anweisung mit dem Operationscode 2604 gleich VPADD3OPR verwendet die Ausführungsschaltung 2616 den Addierer 2618 zum Addieren des gepackten dst/src1 2612 plus das gepackte scr2 2614 plus die Unmittelbare imml 2610 und gibt die resultierende Summe an die Rundsendeschaltung 2620 weiter, die die Summe an das gepackte dst-Register 2622 rundsendet. In einer Ausführungsform umfasst der Addierer 2618 eine Vielzahl von Addierern, um alle Bestimmungsvektorelemente parallel zu addieren.
  • Beispielhafte Hardware zum Ausführen der Anweisung VPADD3OPR
  • 27 zeigt eine Ausführungsform von Hardware zum Verarbeiten einer Anweisung wie eine arithmetische Wiederholungsanweisung. Wie dargestellt, speichert der Speicher 2703 eine Anweisung VPADD3OPR 2701, die auszuführen ist.
  • Die Anweisung wird von der Decodierungsschaltung 2705 empfangen. Zum Beispiel empfängt die Decodierungsschaltung 2705 die Anweisung von der Abruflogik/-schaltung. Die Anweisung 2701 enthält Felder für einen Operationscode (z. B. pneumonisch „VPADD3OPR“), eine Bestimmungskennung 1106 zum Spezifizieren eines gepackten Bestimmungsregisters und eine Unmittelbare. In einigen Ausführungsformen sind der Ursprung/die Ursprünge und die Bestimmung Register und in anderen Ausführungsform ein oder mehrere Speicherorte. Ausführlichere Ausführungsformen mindestens eines Anweisungsformats werden nachstehend ausführlicher veranschaulicht. Die Decodierungsschaltung 2705 decodiert die Anweisung in eine oder mehrere Operationen. In einigen Ausführungsformen enthält dieses Decodieren Erzeugen einer Vielzahl von Mikrooperationen, die durch die Ausführungsschaltung (wie die Ausführungsschaltung 2709 oder 2616) durchzuführen sind. Die Decodierungsschaltung 2705 decodiert außerdem Anweisungspräfixe (falls verwendet).
  • In einigen Ausführungsformen stellen Registerumbenennung, Registerzuteilung und/oder eine Terminierungsschaltung 2707 Funktionalität für eines oder mehrere von Folgendem bereit: 1) Umbenennen logischer Operandenwerte in physikalische Operandenwerte (z. B. eine Registeraliastabelle in einigen Ausführungsformen), 2) Zuteilen von Statusbits und -flags zu der decodierten Anweisung und 3) Terminierung der decodierten Anweisung für Ausführung in der Ausführungsschaltung aus einem Anweisungsvorrat (z. B. unter Verwendung einer Reservierungsstation in einigen Ausführungsformen).
  • Die Register (Registerdatei) und/oder der Speicher 2708 speichern Daten als Operanden der Anweisung, an der durch die Ausführungsschaltung Operationen durchzuführen sind. Beispielhafte Typen von Registern enthalten gepackte Datenregister, Allzweckregister und Fließkommaregister.
  • Die Ausführungsschaltung 2709 führt die decodierte Anweisung VPADD3OPR aus. Die Ausführungsschaltung 2616 wurde in 26 dargestellt. Die Rückschreib-(Ablage-)schaltung 2711 übergibt das Ergebnis der Ausführung der decodierten Anweisung VPADD3OPR.
  • Beispielhafte Formate der Anweisung VPADD3OPR
  • In einigen Ausführungsformen übergibt die Ablage-/Rückschreibschaltung das Bestimmungsregister architektonisch in das Register oder den Speicher und legt die Anweisung ab.
  • Eine Ausführungsform eines Formats für eine Anweisung VPADD3OPR 2602 ( 26) ist OPCODE (wie 2604), die Kennung DST.SRC1 (wie dst/src1 2606), eine zweite Ursprungskennung SRC2 2608 und eine Unmittelbare (wie IMM1 2614). In einigen Ausführungsformen ist VPADD3OPR {B/W/D/Q} die Operationscode-Mnemonik der Anweisung, wobei der Größenparameter {B/W/D/Q} die Größe der Unmittelbaren spezifiziert.
  • In einigen Ausführungsformen ist das Feld OPCODE ein vollständiges Operationscodefeld (wie 2974) oder ein eigentliches Operationscodefeld (wie 2930), ist das Feld DST/SRC1 ein Reg-Feld (wie 2944), ist das Feld SRC2 ein R/M-Feld (wie 2946) und ist das Feld IMM1 ein IMM8-Feld (wie 2972 in 29A).
  • In einigen Ausführungsformen enthält die Anweisung VPADD3OPR ein Feld für einen Schreibmaskenregister-Operanden (k) (z. B. VPADD3OPR{k} DST/SRC1, SRC2, IMM1). Eine Schreibmaske wird verwendet, um Operationen und Aktualisieren von Ergebnissen bedingt pro Element zu steuern. In Abhängigkeit von der Implementierung verwendet die Schreibmaske Misch- oder Nullungsmaskierung. Mit einem Prädikatoperanden (writemask, Schreibmaske oder k-Register) codierte Anweisungen verwenden diesen Operanden, um Berechnungsoperationen und Aktualisieren von Ergebnissen zum Bestimmungsoperanden bedingt pro Element zu steuern. Der Prädikatoperand ist als das Opmask-(Schreibmasken-)Register bekannt. In einigen Ausführungsformen ist die Opmask ein Satz von architektonischen Registern der Größe von 64 Bit. Es ist zu beachten, dass aus diesem Satz von architektonischen Registern nur k1 bis k7 als Prädikatoperand adressiert werden können. k0 kann als ein regulärer Ursprung oder eine Bestimmung verwendet werden, kann aber nicht als Prädikatoperand codiert werden. Außerdem ist zu beachten, dass ein Prädikatoperand verwendet werden kann, Speicherfehlerunterdrückung für einige Anweisungen mit einem Speicheroperanden (Ursprung oder Bestimmung) zu ermöglichen. Als ein Prädikatoperand enthalten die Opmask-Register ein Bit zum Lenken der Operation/Aktualisierung zu jedem Datenelement eines Vektorregisters. Im Allgemeinen können Opmask-Register Anweisungen mit folgenden Elementgrößen unterstützen: Fließkomma einfacher Genauigkeit (float32), ganzzahliges Doppelwort (int32), Fließkomma doppelter Genauigkeit (float64), ganzzahliges Vierfachwort (int64). Die Länge eines Opmask-Registers, MAX_KL, ist ausreichend zum Handhaben von bis zu 64 Elementen mit einem Bit pro Element, d. h. 64 Bits. Für eine gegebene Vektorlänge greift jede Anweisung nur auf die Anzahl von niederwertigsten Maskierungsbits zu, die basierend auf seinem Datentyp benötigt werden.
  • Ein Opmask-Register beeinflusst eine Anweisung mit einer Granularität pro Element. Demgemäß werden jede numerische oder nicht numerische Operation jedes Datenelements sowie Aktualisierungen pro Element von unmittelbaren Ergebnissen des Bestimmungsoperanden an dem korrespondierenden Bit des Opmask-Registers mit Prädikaten versehen. In den meisten Ausführungsformen entspricht eine Opmask, die als ein Prädikatoperand dient, den folgenden Eigenschaften: 1) die Operation der Anweisung wird für ein Element nicht durchgeführt, wenn das korrespondierende Opmask-Bit nicht gesetzt ist (dies impliziert, dass keine Ausnahme oder Verletzung durch eine Operation an einem abgedeckten Element verursacht werden kann und infolgedessen kein Ausnahmeflag als ein Ergebnis einer abgedeckten Operation aktualisiert wird); 2) ein Bestimmungselement wird nicht mit dem Ergebnis der Operation aktualisiert, wenn das korrespondierende Schreibmaskenbit nicht gesetzt ist. Stattdessen muss der Wert des Bestimmungselements beibehalten (Mischmaskierung) oder herausgenullt (Nullungsmaskierung) werden; und 3) für einige Anweisungen mit einem Speicheroperanden werden Speicherfehler für Elemente mit einem Maskenbit von 0 unterdrückt. Es ist zu beachten, dass dieses Merkmal ein vielseitiges Konstrukt zum Implementieren von Steuerflussvorhersagen bereitstellt, da die wirksame Maske ein Mischverhalten für Vektorregisterbestimmungen bereitstellt. Als eine Alternative kann die Maskierung zum Nullen anstelle von Mischen verwendet werden, so dass die abgedeckten Elemente mit 0 aktualisiert werden, anstatt den alten Wert beizubehalten. Das Nullungsverhalten wird bereitgestellt, um die implizite Abhängigkeit von dem alten Wert zu beseitigen, wenn sie nicht benötigt wird.
  • In Ausführungsformen enthalten Codierungen der Anweisung einen Speicheradressierungsoperanden eines Skalenindexbasis- bzw. SIB-Typs, der mehrere indexierte Bestimmungsorte im Speicher indirekt identifiziert. In einer Ausführungsform kann ein Speicheroperand des SIB-Typs eine Codierung enthalten, die ein Basisadressregister identifiziert. Der Inhalt des Basisadressregisters kann eine Basisadresse im Speicher repräsentieren, von dem die Adressen der besonderen Bestimmungsorte im Speicher berechnet werden. Zum Beispiel kann die Basisadresse die Adresse des ersten Orts in einem Block möglicher Bestimmungsorte für eine erweiterte Vektoranweisung sein. In einer Ausführungsform kann ein Speicheroperand des SIB-Typs eine Codierung enthalten, die ein Indexregister identifiziert. Jedes Element des Indexregisters kann einen Index oder Versatzwert spezifizieren, der verwendbar ist, von der Basisadresse eine Adresse eines jeweiligen Bestimmungsorts in einem Block möglicher Bestimmungsorte zu berechnen. In einer Ausführungsform kann ein Speicheroperand des SIB-Typs eine Codierung enthalten, die einen Skalierungsfaktor spezifiziert, der auf jeden Indexwert beim Berechnen einer jeweiligen Bestimmungsadresse anzuwenden ist. Wenn zum Beispiel ein Skalierungsfaktor von vier in dem Speicheroperanden des SIB-Typs codiert ist, kann jeder von einem Element des Indexregisters erhaltene Indexwert mit vier multipliziert und dann zu der Basisadresse addiert werden, um eine Bestimmungsadresse zu berechnen.
  • In einer Ausführungsform kann ein Speicheroperand des SIB-Typs der Form vm32{x, y, z} eine Vektoranordnung von Speicheroperanden identifizieren, spezifiziert unter Verwendung von Speicheradressierung des SIB-Typs. In diesem Beispiel wird die Anordnung von Speicheradressen unter Verwendung eines gemeinsamen Basisregisters, eines konstanten Skalierungsfaktors und eines Vektorindexregisters, das einzelne Elemente enthält, von denen jedes ein Indexwert von 32 Bit ist, spezifiziert. Das Vektorindexregister kann ein Register von 128 Bit (z. B. XMM) (vm32x), ein Register von 256 Bit (z. B. YMM) (vm32y) oder ein Register von 512 Bit (z. B. ZMM) (vm32z) sein. In einer anderen Ausführungsform kann ein Speicheroperand des SIB-Typs der Form vm64{x, y, z} eine Vektoranordnung von Speicheroperanden identifizieren, spezifiziert unter Verwendung von Speicheradressierung des SIB-Typs. In diesem Beispiel wird die Anordnung von Speicheradressen unter Verwendung eines gemeinsamen Basisregisters, eines konstanten Skalierungsfaktors und eines Vektorindexregisters, das einzelne Elemente enthält, von denen jedes ein Indexwert von 64 Bit ist, spezifiziert. Das Vektorindexregister kann ein Register von 128 Bit (z. B. XMM) (vm64x), ein Register von 256 Bit (z. B. YMM) (vm64y) oder ein Register von 512 Bit (z. B. ZMM) (vm64z) sein.
  • Beispielhaftes Verfahren zur Ausführung der Anweisung VPADD3OPR
  • 28 zeigt eine Ausführungsform eines Verfahrens, das von einem Prozessor durchgeführt wird, um eine Anweisung VPADD3OPR zu verarbeiten. Zum Beispiel führen die Prozessorkomponenten von 27, eine Pipeline, wie nachstehend ausgeführt, usw. dieses Verfahren durch.
  • Bei 2801 wird eine Anweisung abgerufen. Zum Beispiel wird eine Anweisung VPADD3OPR abgerufen. Die Anweisung VPADD3OPR enthält Felder für einen Operationscode, einen ersten Ursprungs-/Bestimmungsoperanden (das gepackte Datenregister, das den ersten Ursprung speichert, wird auch zum Speichern eines Ergebnisses der Operation verwendet), einen zweiten Ursprungsoperanden und eine Unmittelbare. In einigen Ausführungsformen wird die Anweisung aus einem Anweisungscache abgerufen. Der Ursprungs-/Bestimmungsoperand spezifiziert ein gepacktes Datenvektorregister, das hierin manchmal als ein gepacktes Bestimmungsregister bezeichnet wird. Der Operationscode der Anweisung VPADD3OPR gibt eine Operation ADD mit drei Summanden an: einen ersten Ursprung, einen zweiten Ursprung und eine Unmittelbare. In einer Ausführungsform ist die Operation ADD insofern destruktiv, als die resultierende Summe in das erste Ursprungsregister geschrieben wird, wodurch der vorherige Inhalt des Ursprungsregisters zerstört wird. Rundsendeschaltung.
  • Die abgerufene Anweisung wird bei 2803 decodiert. Zum Beispiel wird die abgerufene Anweisung VPADD3OPR durch eine Decodierungsschaltung wie die hierin angeführte decodiert.
  • Bei 2805 wird die decodierte Anweisung terminiert (nach Erfordernis).
  • Bei 2807 wird die terminierte Anweisung durch eine Ausführungsschaltung (Hardware) wie 2616 ausgeführt. Für die Anweisung VPADD3OPR wird die Ausführung bewirken, dass eine Ausführungsschaltung (wie 2616) eine Operation ADD (zum Beispiel unter Verwendung des ADDIERERS 2618) der Unmittelbaren (wie imm1 2610), eines ersten gepackten Ursprungs (wie das gepackte dst/src 2612) und eines zweiten gepackten Ursprungsregisters (wie das gepackte src2 2614) durchführt. Die resultierende Summe wird zur Rundsendeschaltung 2620 geleitet, die das Ergebnis an das gepackte Bestimmungsregister 2622, das in einigen Ausführungsformen dasselbe gepackte Bestimmungsregister ist, das von dem gepackten dst/src1 2612 verwendet wird, rundsendet.
  • In einigen Ausführungsformen wird die Anweisung bei 2809 übergeben oder abgelegt.
  • Anweisungssätze
  • Ein Anweisungssatz enthält ein oder mehrere Anweisungsformate. Ein gegebenes Anweisungsformat definiert verschiedene Felder (Anzahl von Bits, Anordnung von Bits), um unter anderem die durchzuführende Operation (Operationscode) und den oder die Operanden, an dem/denen die Operation durchzuführen ist, zu spezifizieren. Einige Anweisungsformate werden ferner durch die Definition von Anweisungsvorlagen (oder Unterformaten) untergliedert. Zum Beispiel können die Anweisungsvorlagen eines gegebenen Anweisungsformats definiert werden, um verschiedene Teilsätze der Felder des Anweisungsformats aufzuweisen (die enthaltenen Felder sind typischerweise in derselben Reihenfolge, aber mindestens einige können verschiedene Bitpositionen aufweisen, weil weniger Felder enthalten sind), und/oder definiert zu werden, so dass ein gegebenes Feld unterschiedlich interpretiert wird. Demgemäß wird jede Anweisung einer ISA unter Verwendung eines gegebenen Anweisungsformats (und, falls definiert, in einer gegebenen einen der Anweisungsvorlagen dieses Anweisungsformats) ausgedrückt und enthält Felder zum Spezifizieren der Operation und der Operanden. Zum Beispiel weist eine beispielhafte Anweisung ADD einen spezifischen Operationscode und ein Anweisungsformat auf, das ein Operationscodefeld zum Spezifizieren dieses Operationscodes und Operandenfelder zum Auswählen von Operanden (Ursprung1/Bestimmung und Ursprung2) enthält; und ein Vorkommen dieser Anweisung ADD in einem Strom von Anweisungen wird spezifische Inhalten in den Operandenfeldern aufweisen, die spezifische Operanden auswählen.
  • Beispielhafte Anweisungsformate
  • Ausführungsformen der hierin beschriebenen Anweisung(en) können in verschiedenen Formaten verkörpert werden. Zusätzlich werden beispielhafte Systeme, Architekturen und Pipelines nachstehend angeführt. Ausführungsformen der Anweisung(en) können in derartigen Systemen, Architekturen und Pipelines ausgeführt werden, sind aber nicht auf die angeführten beschränkt.
  • VEX-Anweisungsformat
  • VEX-Codierung gestattet, dass Anweisungen mehr als zwei Operanden aufweisen, und gestattet, das SIMD-Vektorregister länger als 298 Bits sind. Die Verwendung eines VEX-Präfixes stellt eine Syntax mit drei Operanden (oder mehr) bereit. Zum Beispiel führten vorherige Anweisungen mit zwei Operanden Operationen wie A = A + B durch, die einen Ursprungsoperanden überschreiben. Die Verwendung eines VEX-Präfixes ermöglicht es, dass Operanden nichtdestruktive Operationen wie A = B + C durchführen.
  • 29A zeigt ein beispielhaftes Anweisungsformat AVX, enthaltend ein VEX-Präfix 2902, ein eigentliches Operationscodefeld 2930, ein Mod-R/M-Byte 2940, ein SIB-Byte 2950, ein Verschiebungsfeld 2962 und IMM8 2972. 29B zeigt, welche Felder aus 29A ein vollständiges Operationscodefeld 2974 und ein Basisoperationsfeld 2942 bilden. 29C zeigt, welche Felder aus 29A ein Registerindexfeld 2944 bilden.
  • Das VEX-Präfix (Bytes 0-2) 2902 ist in einer Drei-Byte-Form codiert. Das erste Byte ist das Formatfeld 2940 (VEX-Byte 0, Bits [7:0]), das einen expliziten C4-Bytewert enthält (der eindeutige Wert, der zum Unterscheiden des C4-Anweisungsformats verwendet wird). Das zweite und dritte Byte (VEX-Bytes 1-2) enthalten eine Anzahl von Bitfeldern, die spezifische Fähigkeiten bereitstellen. Spezifisch besteht das Feld REX 2905 (VEX-Byte 1, Bits [7-5]) aus einem Bitfeld VEX.R (VEX-Byte 1, Bit [7] - R), Bitfeld VEX.X (VEX-Byte 1, Bit [6] -X) und Bitfeld VEX.B (VEX-Byte 1, Bit [5] - B). Andere Felder der Anweisungen codieren die unteren drei Bits der Registerindices, wie es im Fachgebiet bekannt ist (rrr, xxx und bbb), so dass Rrrr, Xxxx und Bbbb durch Addieren von VEX.R, VEX.X und VEX.B gebildet werden können. Das Operationscode-Abbildungsfeld 2932 (VEX-Byte 1, Bits [4:0] - mmmmm) enthält Inhalt zum Codieren eines implizierten führenden Operationscodebytes. Das Feld W 2964 (VEX-Byte 2, Bit [7] - W) - wird durch die Schreibweise VEX.W repräsentiert und stellt verschiedene Funktionen in Abhängigkeit von der Anweisung bereit. Die Rolle von VEX.vvvv 2920 (VEX-Byte 2, Bits [6:3]-vvvv) kann Folgendes enthalten: 1) VEX.vvvv codiert den ersten Ursprungsregisteroperanden, spezifiziert in invertierter Form (Komplement von 1) und ist für Anweisungen mit 2 oder mehr Ursprungsoperanden gültig; 2) VEX.vvvv codiert den Bestimmungsregisteroperanden, spezifiziert in 1-Komplementform für bestimmte Vektorverschiebungen ; oder 3) VEX.vvvv codiert keine Operanden, das Feld ist reserviert und sollte 1111b enthalten. Wenn das Größenfeld VEX.L 2968 (VEX-Byte 2, Bit [2]-L) = 0 ist, gibt es einen Vektor von 298 Bit an; wenn VEX.L = 1 ist, gibt es einen Vektor von 256 Bit an. Das Präfixcodierungsfeld 2925 (VEX-Byte 2, Bits [1:0]-pp) stellt zusätzliche Bits für das Basisoperationsfeld bereit.
  • Das eigentliche Operationscodefeld 2930 (Byte 3) ist auch als das Operationscodebyte bekannt. Ein Teil des Operationscodes wird in diesem Feld spezifiziert.
  • Das Feld MOD R/M 2940 (Byte 4) enthält das Feld MOD 2942 (Bits [7-6]), das Feld Reg 2944 (Bits [5-3]) und das Feld R/M 2946 (Bits [2-0]). Die Rolle des Felds Reg 2944 kann Folgendes enthalten: Codieren entweder des Bestimmungsregisteroperanden oder eines Ursprungsregisteroperanden (das rrr von Rrrr) oder Verwendung als eine Operationscodeerweiterung und keine Verwendung zum Codieren eines Anweisungsoperanden. Die Rolle des Felds R/M 2946 kann Folgendes enthalten: Codieren der Anweisungsoperanden, der auf eine Speicheradresse verweist, oder Codieren entweder des Bestimmungsregisteroperanden oder eines Ursprungsregisteroperanden.
  • Scale, Index, Base (SIB) - Der Inhalt des Felds Scale 2950 (Byte 5) enthält SS2952 (Bits [7-6]), das für Speicheradressenerzeugung verwendet wird. Auf die Inhalte von SIB.xxx 2954 (Bits [5-3]) und SIB.bbb 2956 (Bits [2-0]) wurde vorstehend unter Bezugnahme auf die Registerindices Xxxx und Bbbb Bezug genommen.
  • Das Verschiebungsfeld 2962 und das Unmittelbarenfeld (IMM8) 2972 enthalten Daten.
  • Beispielhaft Registerarchitektur
  • 30 zeigt ein Blockdiagramm einer Registerarchitektur 3000 gemäß einer Ausführungsform der Erfindung. In der dargestellten Ausführungsform sind 32 Vektorregister 3010 vorhanden, die 512 Bits breit sind; diese Register werden als zmm0 bis zmm31 bezeichnet. Die 256 niederwertigen Bits der unteren 33 zmm-Register sind den Registern ymm0-15 überlagert. Die 128 niederwertigen Bits der unteren 33 zmm-Register (die 128 niederwertigen Bits der ymm-Register) sind den Registern xmm0-15 überlagert.
  • Allzweckregister 3025 - In der dargestellten Ausführungsform sind sechzehn Allzweckregister von 64 Bits vorhanden, die zusammen mit den bestehenden x86-Adressierungsmodi zum Adressieren von Speicheroperanden verwendet werden. Diese Register werden mit den Bezeichnungen RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP und R8 bis R32 bezeichnet.
  • Die Skalarfließkommastapelregisterdatei (Stapel x87) 3045, auf die die MMXgepackte ganzzahlige Flachregisterdatei 3050 rückgefaltet wird - in der dargestellten Ausführungsform ist der Stapel x87 ein Stapel von acht Elementen, der verwendet wird, skalare Fließkommaoperationen an Fließkommadaten von 32/64/80 Bits unter Verwendung der x87-Anweisungssatzerweiterung durchzuführen; während die MMX-Register verwendet werden, Operationen an gepackte ganzzahlige Daten von 64 Bits durchzuführen sowie Operanden für einige Operationen, die zwischen den MMX- und XMM-Registern durchgeführt werden, zu halten.
  • Alternative Ausführungsformen der Erfindung können breitere oder schmalere Register verwenden. Außerdem können alternative Ausführungsform der Erfindung mehr, weniger oder andere Registerdateien und Register verwenden.
  • Beispielhafte Kernarchitekturen, Prozessoren und Computerarchitekturen
  • Prozessorkerne können auf verschiedene Weise, für verschiedene Zwecke und in verschiedenen Prozessoren implementiert werden. Zum Beispiel können Implementierungen derartiger Kerne enthalten: 1) einen Allzweck-In-Reihenfolge-Kern, der für Allzweck-Berechnungen vorgesehen ist; 2) einen Hochleistungs-Allzweck-Außer-der-Reihenfolge-Kern, der für Allzweck-Berechnungen vorgesehen ist; 3) einen Spezialkern, der hauptsächlich für grafische und/oder wissenschaftliche (Durchsatz-)Berechnungen vorgesehen ist. Implementierungen verschiedener Prozessoren können enthalten: 1) eine CPU, enthaltend einen oder mehrere Allzweck-In-Reihenfolge-Kerne, vorgesehen für Allzweck-Berechnungen, und/oder einen oder mehrere Allzweck-Außer-der-Reihenfolge-Kerne, vorgesehen für Allzweck-Berechnungen; und 2) einen Coprozessor, enthaltend einen oder mehrere Spezialkerne, vorgesehen hauptsächlich für grafische und/oder wissenschaftliche (Durchsatz-)Berechnungen. Solche verschiedenen Prozessoren führen zu verschiedenen Computersystemarchitekturen, die enthalten können: 1) den Coprozessor auf einem von der CPU verschiedenen Chip; 2) den Coprozessor auf einem separaten Plättchen in dem gleichen Baustein wie eine CPU; 3) den Coprozessor auf demselben Plättchen wie eine CPU (wobei in diesem Fall ein derartiger Coprozessor manchmal als Speziallogik wie integrierte grafische und/oder wissenschaftliche (Durchsatz-)Logik oder als Spezialkerne bezeichnet wird); und 4) ein System auf einem Chip, das die beschriebene CPU auf demselben Plättchen enthalten kann (manchmal als der oder die Anwendungskerne oder Anwendungsprozessoren bezeichnet), den oben beschriebene Coprozessor und zusätzliche Funktionalität. Anschließend werden beispielhafte Kernarchitekturen beschrieben, gefolgt von Beschreibungen beispielhafter Prozessoren und Computerarchitekturen. Hierin werden Schaltungen (Einheiten) angeführt, die beispielhafte Kerne, Prozessoren usw. umfassen.
  • Beispielhafte Kernarchitekturen
  • Blockdiagramm eines In-Reihenfolge- und Außer-der-Reihenfolge-Kerns
  • 31A zeigt ein Blockdiagramm, das sowohl eine beispielhafte In-Reihenfolge-Pipeline als auch eine beispielhafte Register-Umbenennung, Außer-der-Reihefolge-Ausgabe/Ausführung-Pipeline gemäß Ausführungsformen der Erfindung darstellt. 31B zeigt ein Blockdiagramm, das sowohl eine beispielhafte Ausführungsform eines In-Reihenfolge-Architekturkerns als auch einen beispielhaften Register-Umbenennung, Außer-der-Reihenfolge-Ausgabe/Ausführung-Architekturkern, der in einen Prozessor gemäß Ausführungsformen der Erfindung aufzunehmen ist, darstellt. Die Felder mit durchgezogenen Linien in den Figuren 31AB stellen die In-Reihenfolge-Pipeline und den In-Reihenfolge-Kern dar, während die wahlweise Hinzufügung der Felder mit gestrichelten Linien die Register-Umbenennung, Außer-der-Reihenfolge-Ausgabe/Ausführung-Pipeline und -Kern darstellen. Da der In-Reihenfolge-Aspekt ein Teilsatz des Außer-der-Reihenfolge-Aspekts ist, wird der Außer-der-Reihenfolge-Aspekt beschrieben.
  • In 31A enthält eine Prozessor-Pipeline 3100 eine Abrufstufe 3102, eine Längendecodierungsstufe 3104, eine Decodierungsstufe 3106, eine Zuteilungsstufe 3108, eine Umbenennungsstufe 3110, eine Terminierungsstufe (auch bekannt als Abfertigung oder Ausgabe) 3112, eine Register-Lese-/Speicher-Lesestufe 3114, eine Ausführungsstufe 3116, eine Rückschreib-/Speicher-Schreibstufe 3118, eine Ausnahmehandhabungsstufe 3122 und eine Übergabestufe 3124.
  • 31B zeigt den Prozessorkern 3190, der eine Vorstufeneinheit 3130 enthält, gekoppelt an eine Ausführungs-Engine-Einheit 3150, und beide sind an eine Speichereinheit 3170 gekoppelt. Der Kern 3190 kann ein Reduced-Instruction-Set-Computing- bzw. RISC-Kern, ein Complex-Instruction-Set-Computing- bzw. CISC-Kern, ein Very-Long-Instruction-Word- bzw. VLIW-Kern oder ein Hybrid- oder alternativer Kerntyp sein. Als noch eine anderen Option kann der Kern 3190 ein Spezialkern sein, wie zum Beispiel ein Netzwerk- oder Kommunikationskern, eine Kompressions-Engine, ein Coprozessor-Kern, ein General-Purpose-Computing-Graphics-Processing-Unit- bzw. GPGPU-Kern, ein Grafikkern oder dergleichen.
  • Die Vorstufeneinheit 3130 enthält eine Verzweigungs-Vorhersageeinheit 3132, gekoppelt an eine Anweisungscacheeinheit 3134, die an einen Anweisungsübersetzung-Lookaside-Puffer (TLB) 3136 gekoppelt ist, der an eine Anweisungsabrufeinheit 3138 gekoppelt ist, die an eine Decodierungseinheit 3140 gekoppelt ist. Die Decodierungseinheit 3140 (oder der Decoder) kann Anweisungen decodieren und eine oder mehrere Mikro-Operationen, Mikro-Codeeintrittspunkte, Mikro-Anweisungen oder Anweisungen oder andere Steuersignale als einen Ausgang erzeugen, die aus den ursprünglichen Anweisungen decodiert werden oder diese in anderer Weise reflektieren oder davon abgeleitet werden. Die Decodierungseinheit 3140 kann unter Verwendung vielfältiger unterschiedlicher Mechanismen implementiert werden. Beispiele geeigneter Mechanismen enthalten, sind aber nicht darauf beschränkt, Nachschlagetabellen, Hardware-Implementierungen, programmierbare Logikanordnungen (PLA), Mikrocode-Nur-Lese-Speicher (ROM) usw. In einer Ausführungsform enthält der Kern 3190 einen Mikrocode-ROM oder ein anderes Medium, das Mikrocode für bestimmte Makro-Anweisungen speichert (z. B. in der Decodierungseinheit 3140 oder anderenfalls innerhalb der Vorstufeneinheit 3130). Die Decodierungseinheit 3140 ist an eine Umbenennungs-/Zuteilungseinheit 3152 in der Ausführungs-Engine-Einheit 3150 gekoppelt.
  • Die Ausführungs-Engine-Einheit 3150 enthält die Umbenennungs-/Zuteilungseinheit 3152, gekoppelt an eine Ablageeinheit 3154, und einen Satz von einem oder mehreren Terminierungseinheiten 3156. Die Terminierungseinheit(en) 3156 repräsentiert eine beliebige Anzahl verschiedener Terminierer einschließlich von Reservierungsstationen, Zentralanweisungsfenstern usw. Die Terminierungseinheit(en) 3156 ist an die Physikalische-Registerdatei(en)-Einheit(en) 3158 gekoppelt. Jede der Physikalische-Registerdatei(en)-Einheiten 3158 repräsentiert eine oder mehrere physikalische Registerdateien, von denen verschiedene eine oder mehrere verschiedene Datentypen speichern, wie skalar ganzzahlig, skalar Fließkomma, gepackt ganzzahlig, gepackt Fließkomma, Vektor ganzzahlig, Vektor Fließkomma, Status (z. B. ein Anweisungszeiger, der die Adresse der nächsten auszuführenden Anweisung ist) usw. In einer Ausführungsform umfasst die Physikalische-Registerdatei(en)-Einheit 3158 eine Vektorregister-Einheit, ein Schreibmaskenregister-Einheit und eine Skalarregister-Einheit. Diese Registereinheiten können Architektur-Vektorregister, Vektormaskenregister und Allzweckregister bereitstellen. Die Physikalische-Registerdatei(en)-Einheit(en) 3158 wird von der Ablageeinheit 3154 überlappt, um verschiedene Weisen zu veranschaulichen, in denen Register-Umbenennung und Außer-der-Reihenfolge-Ausführung implementiert werden können (z. B. unter Verwendung eines Umordnungszwischenspeichers und einer Ablageregisterdatei(en); unter Verwendung einer Zukunftsdatei(en), eines Historiezwischenspeichers und einer Ablageregisterdatei(en); unter Verwendung einer Registerabbildung und einer Zusammenstellung von Registern usw.). Die Ablageeinheit 3154 und die Physikalische-Registerdatei-Einheit(en)-Einheit(en) 3158 sind an die Ausführungscluster 3160 gekoppelt. Der Ausführungscluster 3160 enthält einen Satz einer oder mehrerer Ausführungseinheiten 3162 und einen Satz einer oder mehrerer Speicherzugriffseinheiten 3164. Die Ausführungseinheiten 3162 können verschiedene Operationen (z. B. Verschiebungen, Addition, Subtraktion, Multiplikation) und an verschiedenen Datentypen (z. B. Skalar-Fließkomma, gepackt ganzzahlig, gepackt Fließkomma, Vektor ganzzahlig, Vektor-Fließkomma) durchführen. Während einige Ausführungsformen eine Anzahl von Ausführungseinheiten enthalten können, die für spezifische Funktionen oder Sätze von Funktionen vorgesehen sind, können andere Ausführungsformen nur eine Ausführungseinheit oder mehrere Ausführungseinheiten, die alle sämtliche Funktionen durchführen, enthalten. Die Terminierungseinheit(en) 3156, Physikalische-Registerdatei(en)-Einheit(en) 3158 und Ausführungscluster 3160 werden als möglicherweise mehrfach vorhanden dargestellt, weil bestimmte Ausführungsformen separate Pipelines für bestimmte Typen von Daten/Operationen erzeugen (z. B. eine Skalar-Ganzzahlig-Pipeline, eine Skalar-Fließkomma-/Gepackt-Ganzzahlig-/Gepackt-Fließkomma-/Vektor-Ganzzahlig-/Vektor-Fließkomma-Pipeline und/oder eine Speicherzugriff-Pipeline, die jeweils über eine eigene Terminierungseinheit, eine eigene Physikalische-Registerdatei(en)-Einheit und/oder einen eigenen Ausführungscluster verfügen - und im Fall einer separaten Speicherzugriff-Pipeline sind bestimmte Ausführungsformen implementiert, in denen nur der Ausführungscluster dieser Pipeline über Speicherzugriffseinheit(en) 3164 verfügt). Es versteht sich außerdem, dass, wenn separate Pipelines verwendet werden, einer oder mehrere dieser Pipelines Außer-der-Reihenfolge-Ausgabe/Ausführung und der Rest in Reihenfolge sein können.
  • Der Satz von Speicherzugriffseinheiten 3164 ist an die Speichereinheit 3170 gekoppelt, die eine Daten-TLB-Einheit 3172 enthält, gekoppelt an eine Datencacheeinheit 3174, gekoppelt an eine Level-2- bzw. L2-Cache-Einheit 3176. In einer beispielhaften Ausführungsform können die Speicherzugriffseinheiten 3164 eine Ladeeinheit, eine Adressenspeichereinheit und eine Datenspeichereinheit enthalten, die jeweils an die Daten-TLB-Einheit 3172 in der Speichereinheit 3170 gekoppelt sind. Die Anweisungscacheeinheit 3134 ist ferner an eine Level-2- bzw. L2-Cache-Einheit 3176 in der Speichereinheit 3170 gekoppelt. Die L2-Cache-Einheit 3176 ist an einen oder mehrere andere Cache-Level und schließlich an einen Hauptspeicher gekoppelt.
  • Als Beispiel kann die beispielhafte Register-Umbenennung, Außer-der-Reihenfolge-Ausgabe/Ausführungskern-Architektur die Pipeline 3100 wie folgt implementieren: 1) die Anweisungserfassung 3138 führt die Erfassungs- und Längendekodierungsstufen 3102 und 3104 durch; 2) die Decodierungseinheit 3140 führt die Decodierungsstufe 3106 durch; 3) die Umbenennungs-/Zuteilungseinheit 3152 führt die Zuteilungsstufe 3108 und Umbenennungsstufe 3110 durch; 4) die Terminierungseinheit(en) 3156 führt die Terminierungsstufe 3112 durch; 5) die Physikalische-Registerdatei(en)-Einheit(en) 3158 und die Speichereinheit 3170 führen die Register-Lese-/Speicher-Lese-Stufe 3114 durch; der Ausführungscluster 3160 führt die Ausführungsstufe 3116 durch; 6) die Speichereinheit 3170 und die Physikalische-Registerdatei(en)-Einheit(en) 3158 führen die Rückschreib-/Speicherschreibstufe 3118 durch; 7) verschiedene Einheiten können an der Ausnahmehandhabungsstufe 3122 beteiligt sein; und 8) die Ablageeinheit 3154 und die Physikalische-Registerdatei(en)-Einheit(en) 3158 führen die Übergabestufe 3124 durch.
  • Der Kern 3190 kann einen oder mehrere Anweisungssätze (z. B. den Anweisungssatz x86 (mit einigen Erweiterungen, die bei neueren Versionen hinzugefügt wurden); den Anweisungssatz MIPS von MIPS Technologies aus Sunnyvale, CA; den Anweisungssatz ARM (mit wahlweise zusätzlichen Erweiterungen wie NEON) von ARM Holdings aus Sunnyvale, CA) einschließlich der hierin beschrieben Anweisung(en) unterstützen. In einer Ausführungsform enthält der Kern 3190 Logik zum Unterstützen einer Erweiterung eines Anweisungssatzes für gepackte Daten (z. B. AVX1, AVX2), wodurch gestattet wird, dass die von vielen Multimedia-Anwendungen verwendeten Operationen unter Verwendung gepackter Daten durchgeführt werden.
  • Es versteht sich, dass der Kern Multithreading (Ausführung von zwei oder mehr parallelen Sätzen von Operationen oder Threads) unterstützen kann und dies in einer Vielfalt von Weisen durchführen kann, einschließlich von Zeitscheiben-Multithreading, gleichzeitigem Multithreading (wobei ein einzelner physikalischer Kern einen logischen Kern für jeden der Threads, die der physikalische Kern gleichzeitig als Multithreading ausführt, bereitstellt) oder einer Kombination davon (z. B. Zeitscheiben-Erfassung und -Decodierung und gleichzeitiges Multithreading danach, wie bei der Hyperthreading-Technologie von Intel®).
  • Während Register-Umbenennung im Kontext von Außer-der-Reihenfolge-Ausführung beschrieben wird, versteht es sich, dass Register-Umbenennung in einer In-Reihenfolge-Architektur verwendet werden kann. Während die veranschaulichte Ausführungsform des Prozessors außerdem separate Anweisungs- und Datencacheeinheiten 3134/3174 und eine gemeinsam genutzte L2-Cache-Einheit 3176 enthält, können alternative Ausführungsformen einen einzelnen internen Cache für sowohl Anweisungen als auch Daten, wie zum Beispiel ein interner Level-1- bzw. L1-Cache, oder mehrere Level interner Caches aufweisen. In einigen Ausführungsformen kann das System eine Kombination eines internen Caches und eines externen Caches, der dem Kern und/oder dem Prozessor extern ist, enthalten. Alternativ kann der gesamte Cache dem Kern und/oder dem Prozessor extern sein.
  • Spezifische beispielhafte In-Reihenfolge-Architektur
  • Die 32A-B stellen ein Blockdiagramm einer spezifischeren beispielhaften In-Reihenfolge-Kernarchitektur dar, wobei der Kern einer von mehreren Logikblöcken (einschließlich anderer Kerne des gleichen Typs und/oder anderer Typen) in einem Chip sein würde. Die Logikblöcke kommunizieren durch ein Verschaltungsnetzwerk hoher Bandbreite (z. B. ein Ringnetzwerk) mit einiger Festfunktionslogik, Speicher-I/O-Schnittstellen und anderer erforderlicher I/O-Logik in Abhängigkeit von der Anwendung.
  • 32A zeigt ein Blockdiagramm eines einzelnen Prozessorkerns zusammen mit seiner Verbindung mit dem Ringnetzwerk 3202 (z. B. auf einem Auf-Plättchen-Verschaltungsnetzwerk) und mit seinem lokalen Teilsatz des Level-2- bzw. L2-Caches 3204 gemäß Ausführungsformen der Erfindung. In einer Ausführungsform unterstützt ein Anweisungsdecodierer 3200 den Anweisungssatz x86 mit einer Erweiterung eines Anweisungssatzes für gepackte Daten. Ein L1-Cache 3206 gestattet Zugriffe niedriger Latenz auf den Cachespeicher in die Skalar- und Vektoreinheiten. Während in einer Ausführungsform (zur Vereinfachung der Konstruktion) eine Skalareinheit 3208 und eine Vektoreinheit 3210 separate Registersätze (Skalarregister 3212 bzw. Vektorregister 3214) verwenden und zwischen ihnen übertragene Daten in den Speicher geschrieben und dann aus einem Level-1- bzw. L1-Cache 3206 zurückgelesen werden, können alternative Ausführungsformen der Erfindung einen verschiedenen Ansatz verwenden (z. B. einen einzelnen Registersatz verwenden oder einen Kommunikationsweg aufnehmen, der es gestattet, dass Daten zwischen den beiden Registerdateien übertragen werden, ohne geschrieben und zurückgelesen zu werden).
  • Der lokale Teilsatz des L2-Caches 3204 ist ein Teil eines globalen L2-Caches, der in separate lokale Teilsätze unterteilt ist, einen pro Prozessorkern. Jeder Prozessorkern verfügt über einen direkten Zugangsweg zu seinem eigenen lokalen Teilsatz des L2-Caches 3204. Von einem Prozessorkern gelesene Daten werden in seinem L2-Cache-Teilsatz 3204 gespeichert und können schnell abgerufen werden, parallel mit anderen Prozessorkernen, die auf ihre eigenen lokalen L2-Cache-Teilsätze zugreifen. Von einem Prozessorkern geschriebene Daten werden in seinem eigenen L2-Cache-Teilsatz 3204 gespeichert und werden erforderlichenfalls aus anderen Teilsätzen entleert. Das Ringnetzwerk 3202 gewährleistet Kohärenz für gemeinsam genutzte Daten. Das Ringnetzwerk 3202 ist bidirektional, um Agenten wie Prozessorkernen, L2-Caches und anderen Logikblöcken zu gestatten, miteinander innerhalb des Chips zu kommunizieren. Jeder Ringdatenweg ist in einigen Ausführungsformen pro Richtung 1024 Bit breit.
  • 32B zeigt eine erweiterte Ansicht eines Teils des Prozessorkerns in 32A gemäß einer Ausführungsform der Erfindung. 32B enthält einen L1-Datencache-Teil 3206A des L1-Caches 3204 sowie weitere Details hinsichtlich der Vektoreinheit 3210 und der Vektorregister 3214. Insbesondere ist die Vektoreinheit 3210 ein 33-breite Vektorverarbeitungseinheit (VPU) (siehe die 16-breite ALU 3228), die eines oder mehrere von Ganzzahlen-, Fließ-Anweisungen einfacher Genauigkeit und Fließ-Anweisungen doppelter Genauigkeit ausführt. Die VPU unterstützt Swizzling der Registereingänge mit der Swizzle-Einheit 3220, numerische Umwandlung mit den Numerikumwandlungseinheiten 3222A-B und Replikation mit der Replikationseinheit 3224 am Speichereingang.
  • Prozessor mit integrierter Speichersteuerung und Grafik
  • 33 zeigt ein Blockdiagramm des Prozessors 3300, der gemäß Ausführungsformen der Erfindung mehr als einen Kern aufweisen kann, eine integrierte Speichersteuerung aufweisen kann und integrierte Grafik aufweisen kann. Die Felder aus durchgezogenen Linien in 33 kennzeichnen einen Prozessor 3300 mit einem einzelnen Kern 3302A, einen Systemagenten 3310, einen Satz von einer oder mehreren Bussteuerungseinheiten 3316, während die wahlweise Hinzufügung der Felder aus gestrichelten Linien einen alternativen Prozessor 3300 mit mehreren Kernen 3302A-N, einem Satz von einer oder mehreren integrierten Speichersteuerungseinheiten 3331 in der Systemagenteneinheit 3310 und Speziallogik 3308 darstellen.
  • Demgemäß können verschiedene Implementierungen des Prozessors 3300 enthalten: 1) eine CPU, in der die Speziallogik 3308 integrierte Grafik und/oder wissenschaftliche (Durchsatz-)Logik ist (die einen oder mehrere Kerne enthalten kann) und die Kerne 3302A-N ein oder mehrere Allzweck-Kerne sind (z. B. Allzweck-In-Reihenfolge-Kerne, Allzweck-Außer-der-Reihenfolge-Kerne, eine Kombination der beiden); 2) einen Coprozessor, in dem die Kerne 3302A-N eine große Anzahl von Spezialkernen sind, hauptsächlich vorgesehen für Grafik und/oder Wissenschaft (Durchsatz); und 3) ein Coprozessor, in dem die Kerne 3302AN eine große Anzahl von Allzweck-In-Reihenfolge-Kernen sind. Demgemäß kann der Prozessor 3300 ein Allzweck-Prozessor, ein Coprozessor oder Spezial-Prozessor wie zum Beispiel ein Netzwerk- oder Kommunikationsprozessor, eine Kompressions-Engine, ein Grafikprozessor, eine GPGPU (Allzweck-Grafikverarbeitungseinheit), ein Coprozessor mit hochintegriertem Kern (MIC) (30 oder mehr Kerne enthaltend) mit hohem Durchsatz, ein eingebetteter Prozessor oder dergleichen sein. Der Prozessor kann in einem oder mehreren Chips implementiert sein. Der Prozessor 3300 kann ein Teil von und/oder auf einem oder mehreren Substraten implementiert sein, unter Verwendung einer Anzahl von Prozesstechnologien wie zum Beispiel BiCMOS, CMOS oder NMOS.
  • Die Speicherhierarchie enthält einen oder mehrere Cache-Levels innerhalb der Kerne 3304A-N, einen Satz einer oder mehrerer gemeinsam genutzter Cacheeinheiten 3306 und externen Speicher (nicht dargestellt), gekoppelt an den Satz von integrierten Speichersteuerungseinheiten 3331. Der Satz gemeinsam genutzter Cacheeinheiten 3306 kann einen oder mehrere Caches mittlerer Levels wie Level 2 (L2), Level 3 (L3), Level 4 (L4) oder andere Cache-Levels, einen Cache des letzten Levels (LLC) und/oder Kombinationen davon enthalten. Innerhalb einer Ausführungsform verschaltet eine ringbasierte Verschaltungseinheit 3312 die integrierte Grafiklogik 3308, den Satz gemeinsam genutzter Cacheeinheiten 3306 und die Systemagenteneinheit 3310/integrierten Speichersteuerungseinheit(en) 3331, wobei alternative Ausführungsformen eine beliebige Anzahl gut bekannter Techniken zur Verschaltung derartiger Einheiten verwenden können. In einer Ausführungsform wird Kohärenz zwischen einer oder mehreren Cacheeinheiten 3306 und den Kernen 3302-A-N aufrechterhalten.
  • In einigen Ausführungsformen sind einer oder mehrere der Kerne 3302A-N multithreadingfähig. Der Systemagent 3310 enthält diejenigen Komponenten, die die Kerne 3302A-N koordinieren und betreiben. Die Systemagenteneinheit 3310 kann zum Beispiel eine Leistungssteuerungseinheit (PCU) und eine Anzeigeeinheit enthalten. Die PCU kann Logik oder Komponenten sein oder diese enthalten, die zum Regulieren des Leistungszustands der Kerne 3302A-N und der integrierten Grafiklogik 3308 benötigt werden. Die Anzeigeeinheit dient zum Ansteuern einer oder mehrerer extern angeschlossener Anzeigen.
  • Die Kerne 3302A-N können hinsichtlich von Architektur-Anweisungssatz homogen oder heterogen sein; das heißt, dass zwei oder mehr der Kerne 3302A-N zur Ausführung des gleichen Anweisungssatzes imstande sein können, während andere imstande sein können, nur einen Teilsatz dieses Anweisungssatzes oder einen verschiedenen Anweisungssatz auszuführen.
  • Beispielhafte Computer-Architekturen
  • Die 34-37 zeigen Blockdiagramme beispielhafter Computer-Architekturen. Andere Systemkonstruktionen und -konfigurationen, die im Fachgebiet für Laptops, Desktops, Handheld-PCs, persönliche digitale Assistenten, technische Arbeitsstationen, Server, Netzwerkvorrichtungen, Netzwerkverteiler, Weichen, eingebettete Prozessoren, Digitalsignalprozessoren (DSPs), Grafikvorrichtungen, Videospiel-Vorrichtungen, Settop-Boxen, Mikrosteuerungen, Zelltelefone, tragbare Medienspieler, Handheld-Vorrichtungen und verschiedene andere elektronische Vorrichtungen bekannt sind, sind ebenfalls geeignet. Im Allgemeinen ist eine große Vielfalt von Systemen oder elektronischen Vorrichtungen, die imstande sind, einen Prozessor und/oder andere Ausführungslogik zu inkorporieren, wie hierin offenbart, allgemein geeignet.
  • Jetzt Bezug nehmend auf 34, wird ein Blockdiagramm eines Systems 3400 gemäß einer Ausführungsform der vorliegenden Erfindung dargestellt. Das System 3400 kann einen oder mehrere Prozessoren 3410, 3415 enthalten, die an einen Steuerungsverteiler 3420 gekoppelt sind. In einer Ausführungsform enthält der Steuerungsverteiler 3420 einen Grafikspeicher-Steuerungsverteiler (GMCH) 3490 und einen Eingang/Ausgang-Verteiler (IOH) 3450 (die sich auf separaten Chips befinden können); wobei der GMCH 3490 Speicher- und Grafiksteuerungen enthält, an die ein Speicher 3440 und ein Coprozessor 3445 gekoppelt sind; wobei der IOH 3450 Eingang/Ausgang- bzw. I/O-Vorrichtungen 3460 an den GMCH 3490 koppelt. Alternativ sind einer oder beide der Speicher- und Grafiksteuerung im Prozessor integriert (wie hierin beschrieben), sind der Speicher 3440 und der Coprozessor 3445 direkt an den Prozessor 3410 gekoppelt und befindet sich der Steuerungsverteiler 3420 in einem einzelnen Chip mit dem IOH 3450.
  • Das wahlweise Wesen zusätzlicher Prozessoren 3415 ist in 34 durch unterbrochene Linien gekennzeichnet. Jeder Prozessor 3410, 3415 kann einen oder mehrere der hierin beschriebenen Verarbeitungskerne enthalten und kann eine gewisse Version des Prozessors 3300 sein.
  • Der Speicher 3440 kann zum Beispiel ein dynamischer Direktzugriffsspeicher (DRAM), ein Phasenwechselspeicher (PCM) oder eine Kombination der beiden sein. In mindestens einer Ausführungsform kommuniziert der Steuerungsverteiler 3437 mit dem oder den Prozessoren 3410, 3415 über einen Mehrpunktverbindungsbus wie ein Frontside-Bus (FSB), eine Punkt-zu-Punkt-Schnittstelle oder eine ähnliche Verbindung 3495.
  • In einer Ausführungsform ist der Coprozessor 3445 ein Spezialprozessor wie zum Beispiel ein MIC-Prozessor mit hohem Durchsatz, ein Netzwerk- oder Kommunikationsprozessor, eine Kompressions-Engine, ein Grafikprozessor, ein GPGPU, ein eingebetteter Prozessor oder dergleichen. In einer Ausführungsform kann der Steuerungsverteiler 3420 einen integrierten Grafikbeschleuniger enthalten.
  • Zwischen den physikalischen Betriebsmitteln 3410, 34155 kann hinsichtlich des Spektrums von Vorteilspunkten einschließlich von Architektur-, Mikroarchitektur-, Wärme-, Leistungsaufnahme-Charakteristika und dergleichen eine Vielfalt von Unterschieden bestehen.
  • In einer Ausführungsform führt der Prozessor 3410 Anweisungen aus, die Datenverarbeitungsoperationen eines allgemeinen Typs steuern. In den Anweisungen können Coprozessoranweisungen eingebettet sein. Der Prozessor 3410 erkennt, dass diese Coprozessoranweisungen einem Typ entsprechen, der durch den angefügten Coprozessor 3445 ausgeführt werden sollte. Dementsprechend gibt der Prozessor 3410 diese Coprozessoranweisungen (oder Steuerungssignale, die Coprozessoranweisungen repräsentieren) in einem Coprozessorbus oder einer anderen Verschaltung an den Coprozessor 3445 aus. Der oder die Coprozessoren 3445 nehmen die empfangenen Coprozessoranweisungen an und führen sie aus.
  • Jetzt Bezug nehmend auf 35, wird ein Blockdiagramm eines ersten spezifischeren beispielhaften Systems 3500 gemäß einer Ausführungsform der vorliegenden Erfindung dargestellt. Wie in 35 gezeigt, ist ein Mehrprozessor-System 3500 ein Punkt-zu-Punkt-Verschaltungssystem und enthält einen ersten Prozessor 3570 und einen zweiten Prozessor 3580, gekoppelt über eine Punkt-zu-Punkt-Verschaltung 3550. Jeder der Prozessoren 3570 und 3580 kann eine gewisse Version des Prozessors 3300 sein. In einer Ausführungsform der Erfindung sind die Prozessoren 3570 und 3580 jeweils die Prozessoren 3410 und 3432, während der Coprozessor 3538 der Coprozessor 3445 ist. In einer anderen Ausführungsform sind die Prozessoren 3570 und 3580 jeweils der Prozessor 3410 und der Coprozessor 3445.
  • Die Prozessoren 3570 und 3580 sind als die integrierten Speichersteuerungs- bzw. IMC-Einheiten 3572 bzw. 3582 enthaltend dargestellt. Der Prozessor 3570 enthält außerdem als Teil seiner Bussteuerungseinheiten Punkt-zu-Punkt- bzw. P-P-Schnittstellen 3576 und 3578; entsprechend enthält der zweite Prozessor 3580 die P-P-Schnittstellen 3586 und 3588. Die Prozessoren 3570, 3580 können über eine Punkt-zu-Punkt- bzw. P-P-Schnittstelle 3550 unter Verwendung der P-P-Schnittstellenschaltungen 3578, 3588 Informationen austauschen. Wie in 35 dargestellt, koppeln die IMCs 3572 und 3582 die Prozessoren an jeweilige Speicher, nämlich einen Speicher 3532 und einen Speicher 3534, die Teile des Hauptspeichers sein können, lokal an die jeweiligen Prozessoren angefügt.
  • Die Prozessoren 3570, 3580 können mit einem Chipsatz 3590 über individuelle P-P-Schnittstellen 3552, 3554 unter Verwendung der Punkt-zu-Punkt-Schnittstellenschaltungen 3576, 3594, 3586, 3598 Informationen austauschen. Der Chipsatz 3590 kann mit dem Coprozessor 3538 über eine Hochleistungsschnittstelle 3592 wahlweise Informationen austauschen. In einer Ausführungsform ist der Coprozessor 3538 ein Spezialprozessor wie zum Beispiel ein MIC-Prozessor mit hohem Durchsatz, ein Netzwerk- oder Kommunikationsprozessor, eine Kompressions-Engine, ein Grafikprozessor, ein GPGPU, ein eingebetteter Prozessor oder dergleichen.
  • Ein gemeinsam genutzter Cache (nicht dargestellt) kann in einem der Prozessoren oder außerhalb beider Prozessoren, aber mit den Prozessoren über eine P-P-Verschaltung verbunden, enthalten sein, so dass die lokalen Cache-Informationen eines der oder beider Prozessoren in dem gemeinsam genutzten Cache gespeichert werden können, wenn ein Prozessor in einen Niedrigleistungsmodus versetzt wird.
  • Der Chipsatz 3590 kann über eine Schnittstelle 3596 an einen ersten Bus 3516 gekoppelt sein. In einer Ausführungsform kann der erste Bus 3516 ein Peripheral-Component-Interconnect- bzw. PCI-Bus oder ein Bus wie ein PCI-Express-Bus oder ein anderer I/O-Verschaltungsbus sein, obwohl der Rahmen der vorliegenden Erfindung nicht dahingehend eingeschränkt ist.
  • Wie in 35 dargestellt, können verschiedene I/O-Vorrichtungen 3514 zusammen mit einer Busbrücke 3518, die den ersten Bus 3516 an einen zweiten Bus 3520 koppelt, an den ersten Bus 3516 gekoppelt sein. In einer Ausführungsform sind ein oder mehrere zusätzliche Prozessoren 3515 wie Coprozessoren, MIC-Prozessoren mit hohem Durchsatz, GPGPUs, Beschleuniger (wie z. B. Grafikbeschleuniger oder Digitalsignalverarbeitungs- bzw. DSP-Einheiten), feldprogrammierbare Gatteranordnungen oder beliebige andere Prozessoren an den ersten Bus 3533 gekoppelt. In einer Ausführungsform kann der zweite Bus 3520 ein Low-Pin-Count- bzw. LPC-Bus sein. Verschiedene Vorrichtungen können in einer Ausführungsform an einen zweiten Bus 3520 gekoppelt sein, einschließlich zum Beispiel einer Tastatur und/oder Maus 3522, Kommunikationsvorrichtungen 3527 und einer Speichereinheit 3528 wie ein Plattenlaufwerk oder eine andere Massenspeichervorrichtung, die Anweisungen/Code und Daten 3530 enthalten kann. Ferner kann ein Audio-I/O 3524 an den zweiten Bus 3516 gekoppelt sein. Es ist zu beachten, dass andere Architekturen möglich sind. Zum Beispiel kann ein System anstelle der Punkt-zu-Punkt-Architektur von 35 einen Mehrpunktverbindungsbus oder eine andere derartige Architektur implementieren.
  • Jetzt Bezug nehmend auf 36, wird ein Blockdiagramm eines zweiten spezifischeren beispielhaften Systems 3600 gemäß einer Ausführungsform der vorliegenden Erfindung dargestellt. Gleiche Elemente in den 35 und 36 tragen gleiche Bezugszeichen, und bestimmte Aspekte von 35 wurden aus 36 ausgelassen, um zu vermeiden, andere Aspekte von 36 zu verdecken.
  • 36 stellt dar, dass die Prozessoren 3570, 3580 Steuerlogik („CL“) 3672 bzw. 3682 für den integrierten Speicher und I/O enthalten können. Folglich enthält die CL 3672, 3682 Steuerungseinheiten für den integrierten Speicher und I/O-Steuerlogik. 36 stellt dar, dass nicht nur die Speicher 3532, 3534 an die CL 3572, 3582 gekoppelt sind, sondern dass auch die I/O-Vorrichtungen 3614 ebenfalls an die Speicherlogik 3572, 3582 gekoppelt sind. Bisherige I/O-Vorrichtungen 3615 sind an den Chipsatz 3590 gekoppelt.
  • Jetzt Bezug nehmend auf 37, wird ein Blockdiagramm eines SoC 3700 gemäß einer Ausführungsform der vorliegenden Erfindung dargestellt. Ähnliche Elemente in 33 tragen gleiche Bezugszeichen. Außerdem sind Felder mit gestrichelten Linien wahlweise Merkmale an fortgeschrittenen SoCs. In 37 ist eine Verschaltungseinheit(en) 3702 gekoppelt an: einen Anwendungsprozessor 3710, der einen Satz von einem oder mehreren Kernen 372A-N, Cache-Einheit(en) 3304A-N und eine gemeinsam genutzte Cache-Einheit(en) 3306 enthält; eine Systemagenteneinheit 3310; eine Bussteuerungseinheit(en) 3316; eine integrierte Speichersteuerungseinheit(en) 3314; einen Satz von einem oder mehreren Coprozessoren 3720, der integrierte Grafiklogik, einen Bildprozessor, einen Audioprozessor und einen Videoprozessor enthalten kann; eine statische Direktzugriffsspeicher- bzw. SRAM-Einheit 3730; eine Speicherdirektzugriffs- bzw. DMA-Einheit 3732; und eine Anzeigeeinheit 3740 zum Koppeln an eine oder mehrere externe Anzeigen. In einer Ausführungsform enthalten der oder die Coprozessoren 3720 einen Spezialprozessor wie zum Beispiel einen Netzwerk- oder Kommunikationsprozessor, eine Kompressions-Engine, einen GPGPU, einen MIC-Prozessor mit hohem Durchsatz, einen eingebetteten Prozessor oder dergleichen.
  • Ausführungsformen der hierin offenbarten Mechanismen können in Hardware, Software, Firmware oder einer Kombination derartiger Implementierungsansätze implementiert werden. Ausführungsformen der Erfindung können als Computerprogramme oder Programmcode zur Ausführung auf programmierbaren Systemen implementiert werden, umfassend mindestens einen Prozessor, ein Speichersystem (einschließlich von flüchtigem und nichtflüchtigem Speicher und/oder Speicherelementen), mindestens eine Eingabevorrichtung und mindestens eine Ausgabevorrichtung.
  • Programmcode wie der in 35 dargestellte Code 3530 kann angewandt werden, Anweisungen einzugeben, um die hierin beschriebenen Funktionen durchzuführen und Ausgabe-Informationen zu erzeugen. Die Ausgabe-Informationen können auf eine oder mehrere Ausgabevorrichtungen in einer bekannten Weise angewandt werden. Für die Zwecke dieser Anmeldung enthält ein Verarbeitungssystem ein beliebiges System, das einen Prozessor wie zum Beispiel einen Digitalsignalprozessor (DSP), eine Mikrosteuerung, eine anwendungsspezifische integrierte Schaltung (ASIC) oder einen Mikroprozessor aufweist.
  • Der Programmcode kann in einer höheren verfahrensorientierten oder objektorientierten Programmiersprache für Kommunikation mit einem Verarbeitungssystem implementiert werden. Der Programmcode kann auch in Assembly oder Maschinensprache implementiert werden, wenn gewünscht. In der Tat sind die hier beschriebenen Mechanismen im Umfang nicht auf eine bestimmte Programmiersprache beschränkt. In jedem Fall kann die Sprache eine kompilierte oder interpretierte Sprache sein.
  • Ein oder mehrere Aspekte mindestens einer Ausführungsform können durch jeweilige Anweisungen implementiert werden, gespeichert auf einem maschinenlesbaren Medium, die verschiedene Logik innerhalb des Prozessors repräsentieren, die, wenn sie von einer Maschine gelesen werden, bewirken, dass die Maschine Logik zum Durchführen der hierin beschriebenen Techniken erzeugt. Derartige Repräsentationen, bekannt als „IP-Kerne“, können auf einem materiellen, maschinenlesbaren Medium gespeichert und verschiedenen Kunden oder Fertigungseinrichtungen geliefert werden, um in die Fertigungsmaschinen geladen zu werden, die die Logik oder den Prozessor tatsächlich herstellen.
  • Derartige maschinenlesbare Speichermedien können, ohne Einschränkung, nicht vergängliche materielle Anordnungen von Artikeln enthalten, die von einer Maschine oder Vorrichtung hergestellt oder gebildet werden, einschließlich von Speichermedien wie Festplatten, beliebige andere Typen von Platten einschließlich von Disketten, optischen Platten, Nur-Lese-Kompaktplatten-Speicher (CD-ROMs), beschreibbare Kompaktplatten (CD-RWs) und magneto-optische Platten, Halbleitervorrichtungen wie Nur-Lese-Speicher (ROMs), Direktzugriffsspeicher (RAMs) wie dynamische Direktzugriffsspeicher (DRAMs), statische Direktzugriffsspeicher (SRAMs), löschbare programmierbare Nur-Lese-Speicher (EPROMs), Flash-Speicher, elektrisch löschbare programmierbare Nur-Lese-Speicher (EEPROMs), Phasenwechsel-Speicher (PCM), magnetische oder optische Karten oder ein beliebiger anderer Medientyp, der zum Speichern elektronischer Anweisungen geeignet ist.
  • Dementsprechend enthalten Ausführungsformen der Erfindung außerdem nicht vergängliche materielle maschinenlesbare Medien, die Anweisungen enthalten oder Konstruktionsdaten enthalten, wie Hardware Description Language (HDL), die hierin definierte Strukturen, Schaltungen, Geräte, Prozessoren und/oder Systemmerkmale definiert. Derartige Ausführungsformen können auch als Programmprodukte bezeichnet werden.
  • Emulation (einschließlich binärer Übersetzung, Code-Morphing usw.)
  • In einigen Fällen kann ein Anweisungsumwandler verwendet werden, eine Anweisung aus einem Ursprungsanweisungssatz in einen Bestimmungsanweisungssatz umzuwandeln. Zum Beispiel kann der Anweisungswandler eine Anweisung in eine oder mehrere andere Anweisungen, die von dem Kern zu verarbeiten sind, übersetzen (z. B. unter Verwendung statischer binärer Übersetzung, dynamischer binärer Übersetzung einschließlich dynamischer Kompilierung), morphen, emulieren oder in anderer Weise umwandeln. Der Anweisungswandler kann in Software, Hardware, Firmware oder einer Kombination davon implementiert werden. Der Anweisungswandler kann im Prozessor, außerhalb des Prozessors oder teilweise im und teilweise außerhalb des Prozessors sein.
  • 38 zeigt ein Blockdiagramm, das die Verwendung eines Software-Anweisungsumsetzers zum Umsetzen binärer Anweisungen in einem Ursprungsanweisungssatz binärer Anweisungen in Bestimmungsanweisungen in einem Bestimmungsanweisungssatz gemäß Ausführungsformen der Erfindung gegenüberstellt. In der veranschaulichten Ausführungsform ist der Anweisungswandler ein Software-Anweisungswandler, obwohl der Anweisungswandler alternativ in Software, Firmware, Hardware oder verschiedenen Kombinationen davon implementiert werden kann. 38 zeigt ein Programm in einer höheren Sprache 3802, das unter Verwendung eines ersten Compilers 3804 kompiliert werden kann, um einen ersten Binärcode (z. B. x86) 3806 zu erzeugen, der von einem Prozessor mit mindestens einem ersten Anweisungssatzkern 3816 nativ ausgeführt werden kann. In einigen Ausführungsformen repräsentiert der Prozessor mit mindestens einem ersten Anweisungssatzkern 3816 einen beliebigen Prozessor, der im Wesentlichen die gleichen Funktionen wie ein Intel-Prozessor mit mindestens einem x86-Anweisungssatzkern durch kompatibles Ausführen oder Verarbeiten in anderer Weise (1) eines wesentlichen Teils des Anweisungssatzes des Intel-x86-Anweisungssatzkerns oder (2) von Objektcode-Versionen von Anwendungen oder anderer Software, die zur Ausführung auf einem Intel-Prozessor mit mindestens einem x86-Anweisungssatzkern vorgesehen ist, ausführen kann, um im Wesentlichen die gleichen Ergebnisse wie ein Intel-Prozessor mit mindestens einem x86-Anweisungssatzkern zu erzielen. Der erste Compiler 3804 repräsentiert einen Compiler, der betriebsfähig ist, Binärcode des ersten Anweisungssatzes 3806 (z. B. Objektcode) zu erzeugen, der, mit oder ohne zusätzliche Verknüpfungsverarbeitung, auf dem Prozessor mit mindestens einem ersten Anweisungssatzkern 3816 ausgeführt werden kann. Gleichermaßen zeigt 38, dass das Programm in der höheren Sprache 3802 unter Verwendung eines Compilers 3808 eines alternativen Anweisungssatzes kompiliert werden kann, um Binärcode 3810 des alternativen Anweisungssatzes zu erzeugen, der von einem Prozessor ohne mindestens einen ersten Anweisungssatzkern 3814 (z. B. ein Prozessor mit Kernen, die den Anweisungssatz MIP von MIPS Technologies aus Sunnyvale, CA, ausführen und/oder die den Anweisungssatz ARM von ARM Holdings aus Sunnyvale, CA, ausführen) nativ ausgeführt werden kann. Der Anweisungswandler 3812 dient zum Umwandeln des ersten Binärcodes 3806 in Code, der von dem Prozessor ohne einen ersten Anweisungssatzkern 3814 nativ ausgeführt werden kann. Es ist wahrscheinlich, dass der umgewandelte Code nicht der gleiche wie der Binärcode 3810 des alternativen Anweisungssatzes sein wird, da es schwierig ist, einen Anweisungswandler herzustellen, der dazu imstande ist; der umgewandelte Code wird jedoch die allgemeine Operation durchführen und wird aus Anweisungen aus dem alternativen Anweisungssatz bestehen. Demgemäß repräsentiert der Anweisungswandler 3812 Software, Firmware, Hardware oder eine Kombination davon, die durch Emulation, Simulation oder einen beliebigen anderen Prozess einem Prozessor oder einer anderen elektronischen Vorrichtung, der/die nicht über einen ersten Anweisungssatzprozessor oder -kern verfügt, gestattet, den ersten Binärcode 3806 auszuführen.
  • Weitere Beispiele
  • Beispiel 1 stellt ein Verfahren zum Ausführen einer Vektoranweisung bereit, das Verfahren enthaltend: Abrufen, durch Abrufschaltungen, der Vektoranweisung aus einem Codespeicher, die Vektoranweisung enthaltend einen Operationscode, eine Bestimmungskennung zum Spezifizieren eines gepackten Bestimmungsregisters, eine erste Unmittelbare und eine zweite Unmittelbare, Decodieren, durch Decodierungsschaltungen, der abgerufenen Vektoranweisung und Ausführen, durch Ausführungsschaltungen, der decodierten Vektoranweisung, zum: wenn der Operationscode spezifiziert, rundzusenden, Rundsenden der ersten Unmittelbaren an jedes Vektorelement des gepackten Bestimmungsregisters, und wenn der Operationscode spezifiziert, einen Schritt durchzuführen, Speichern der ersten Unmittelbaren in ein erstes Vektorelement des gepackten Bestimmungsregisters und aufeinanderfolgend, für jedes nachfolgende Vektorelement in dem gepackten Bestimmungsregister, Erzeugen und Speichern eines Werts eines unmittelbar vorhergehenden Vektorelements plus der zweiten Unmittelbaren.
  • Beispiel 2 enthält die Substanz des beispielhaften Verfahrens von Beispiel 1, wobei, wenn der Operationscode spezifiziert, einen Schritt durchzuführen, Werte aufeinanderfolgender Vektorelemente, in die durch die Ausführungsschaltungen geschrieben wurde, sich um den Wert der zweiten Unmittelbaren unterscheiden.
  • Beispiel 3 enthält die Substanz des beispielhaften Verfahrens von Beispiel 2, wobei die Vektoranweisung ferner eine Schreibmaskenkennung zum Auswählen eines Vektorschreibmaskenregisters enthält, enthaltend eine Vielzahl von Ein-Bit-Vektorschreibmaskenelementen, die jeweils steuern, ob ein Ausführungsergebnis in ein korrespondierendes Vektorelement in dem gepackten Bestimmungsregister geschrieben wird, das korrespondierende Vektorelement zum Einnehmen einer gleichen relativen Position in dem gepackten Bestimmungsregister wie eine durch das Vektorschreibmaskenelement in dem Schreibmaskenregister eingenommene relative Position, wobei Ergebnisse der Ausführung nur in nicht maskierte Vektorelemente des gepackten Bestimmungsregisters geschrieben werden.
  • Beispiel 4 enthält die Substanz des beispielhaften Verfahrens von Beispiel 3, wobei das Ausführen der Vektoranweisung ferner enthält, maskierte Vektorelemente des gepackten Bestimmungsregisters zu nullen.
  • Beispiel 5 enthält die Substanz des beispielhaften Verfahrens von Beispiel 3, wobei das Ausführen der Vektoranweisung ferner enthält, keine neuen Werte in maskierte Vektorelemente des gepackten Bestimmungsregisters zu schreiben.
  • Beispiel 6 enthält die Substanz des beispielhaften Verfahrens von Beispiel 3, wobei die Vektoranweisung ferner ein maskiertes Elementsteuerfeld enthält, um zu spezifizieren, ob maskierte Vektorelemente des gepackten Bestimmungsregisters ihren Wert beizubehalten haben oder zu nullen sind.
  • Beispiel 7 enthält die Substanz des beispielhaften Verfahrens von Beispiel 6, wobei das maskierte Elementsteuerfeld aus dem Operationscode abzuleiten ist.
  • Beispiel 8 enthält die Substanz des beispielhaften Verfahrens eines der Beispiele 1-7, wobei die Vektoranweisung ferner eine Elementgrößenkennung zum Spezifizieren einer Größe der Vektorelemente des gepackten Bestimmungsregisters enthält.
  • Beispiel 9 enthält die Substanz des beispielhaften Verfahrens von Beispiel 8, wobei die Elementgrößenkennung in dem Operationscode enthalten ist.
  • Beispiel 10 enthält die Substanz des beispielhaften Verfahrens von Beispiel 9, wobei das gepackte Bestimmungsregister eines eines 128-Bit-Vektorregisters, eines 256-Bit-Vektorregisters und eines 512-Bit-Vektorregisters enthält, wobei das gepackte Bestimmungsregister eine Vielzahl von Vektorelementen fester Größe enthält.
  • Beispiel 11 stellt einen Prozessor zum Ausführen einer Vektoranweisung bereit, der Prozessor enthaltend: Abrufschaltungen zum Abrufen der Vektoranweisung aus einem Codespeicher, die Vektoranweisung enthaltend einen Operationscode, eine Bestimmungskennung zum Spezifizieren eines gepackten Bestimmungsregisters, eine erste Unmittelbare und eine zweite Unmittelbare, Decodierungsschaltungen zum Decodieren der abgerufenen Vektoranweisung und Ausführungsschaltungen zum Ausführen der decodierten Vektoranweisung, zum: wenn der Operationscode spezifiziert, rundzusenden, Rundsenden der ersten Unmittelbaren an jedes Vektorelement des gepackten Bestimmungsregisters, und wenn der Operationscode spezifiziert, einen Schritt durchzuführen, Speichern der ersten Unmittelbaren in ein erstes Vektorelement des gepackten Bestimmungsregisters und aufeinanderfolgend, für jedes nachfolgende Vektorelement in dem gepackten Bestimmungsregister, Erzeugen und Speichern eines Werts eines unmittelbar vorhergehenden Vektorelements plus der zweiten Unmittelbaren.
  • Beispiel 12 enthält die Substanz des beispielhaften Prozessors von Beispiel 11, wobei, wenn der Operationscode spezifiziert, einen Schritt durchzuführen, Werte aufeinanderfolgender Vektorelemente, in die durch die Ausführungsschaltungen in das gepackte Bestimmungsregister geschrieben wurde, sich um den Wert der zweiten Unmittelbaren unterscheiden sollen.
  • Beispiel 13 enthält die Substanz des beispielhaften Prozessors von Beispiel 12, wobei die Vektoranweisung ferner eine Schreibmaskenkennung zum Auswählen eines Vektorschreibmaskenregisters enthält, enthaltend eine Vielzahl von Ein-Bit-Vektorschreibmaskenelementen, die jeweils steuern, ob ein Ausführungsergebnis in ein korrespondierendes Vektorelement in dem gepackten Bestimmungsregister geschrieben wird, das korrespondierende Vektorelement zum Einnehmen einer gleichen relativen Position in dem gepackten Bestimmungsregister wie eine durch das Vektorschreibmaskenelement in dem Schreibmaskenregister eingenommene relative Position, wobei Ergebnisse der Ausführung nur in nicht maskierte Vektorelemente des gepackten Bestimmungsregisters geschrieben werden.
  • Beispiel 14 enthält die Substanz des beispielhaften Prozessors von Beispiel 13, wobei das Ausführen der Vektoranweisung ferner enthält, maskierte Vektorelemente des gepackten Bestimmungsregisters zu nullen.
  • Beispiel 15 enthält die Substanz des beispielhaften Prozessors von Beispiel 13, wobei das Ausführen der Vektoranweisung ferner enthält, keine neuen Werte in maskierte Vektorelemente des gepackten Bestimmungsregisters zu schreiben.
  • Beispiel 16 enthält die Substanz des beispielhaften Prozessors von Beispiel 13, wobei die Vektoranweisung ferner ein maskiertes Elementsteuerfeld enthält, um zu spezifizieren, ob maskierte Vektorelemente des gepackten Bestimmungsregisters ihren Wert beizubehalten haben oder zu nullen sind.
  • Beispiel 17 enthält die Substanz des beispielhaften Prozessors von Beispiel 16, wobei das maskierte Elementsteuerfeld aus dem Operationscode abzuleiten ist.
  • Beispiel 18 enthält die Substanz des beispielhaften Prozessors eines der Beispiele 11-17, wobei die Vektoranweisung ferner eine Elementgrößenkennung zum Spezifizieren einer Größe der Vektorelemente des gepackten Bestimmungsregisters enthält.
  • Beispiel 19 enthält die Substanz des beispielhaften Prozessors von Beispiel 18, wobei die Elementgrößenkennung eines eines Präfixes und eines Suffixes des Operationscodes ist.
  • Beispiel 20 enthält die Substanz des beispielhaften Prozessors von Beispiel 11, wobei das gepackte Bestimmungsregister eines eines 128-Bit-Vektorregisters, eines 256-Bit-Vektorregisters und eines 512-Bit-Vektorregisters enthält, wobei das gepackte Bestimmungsregister eine Vielzahl von Vektorelementen fester Größe enthält.
  • Beispiel 21 stellt ein System zum Ausführen einer Vektoranweisung bereit, das System enthaltend: einen Speicher und einen Prozessor, enthaltend: Abrufschaltungen zum Abrufen der Vektoranweisung aus einem Codespeicher, die Vektoranweisung enthaltend einen Operationscode, eine Bestimmungskennung zum Spezifizieren eines gepackten Bestimmungsregisters, eine erste Unmittelbare und eine zweite Unmittelbare, Decodierungsschaltungen zum Decodieren der abgerufenen Vektoranweisung und Ausführungsschaltungen zum Ausführen der decodierten Vektoranweisung, zum: wenn der Operationscode spezifiziert, rundzusenden, Rundsenden der ersten Unmittelbaren an jedes Vektorelement des gepackten Bestimmungsregisters, und wenn der Operationscode spezifiziert, einen Schritt durchzuführen, Speichern der ersten Unmittelbaren in ein erstes Vektorelement des gepackten Bestimmungsregisters und aufeinanderfolgend, für jedes nachfolgende Vektorelement in dem gepackten Bestimmungsregister, Erzeugen und Speichern eines Werts eines unmittelbar vorhergehenden Vektorelements plus der zweiten Unmittelbaren.
  • Beispiel 22 enthält die Substanz des beispielhaften Systems von Beispiel 21, wobei, wenn der Operationscode spezifiziert, einen Schritt durchzuführen, nach dem Ausführen, Werte aufeinanderfolgender Vektorelemente, in die durch die Ausführungsschaltungen geschrieben wurde, sich um den Wert der zweiten Unmittelbaren unterscheiden.
  • Beispiel 23 enthält die Substanz des beispielhaften Systems von Beispiel 22, wobei die Vektoranweisung ferner eine Schreibmaskenkennung zum Auswählen eines Vektorschreibmaskenregisters enthält, enthaltend eine Vielzahl von Ein-Bit-Vektorschreibmaskenelementen, die jeweils steuern, ob ein Ausführungsergebnis in ein korrespondierendes Vektorelement in dem gepackten Bestimmungsregister geschrieben wird, das korrespondierende Vektorelement zum Einnehmen einer gleichen relativen Position in dem gepackten Bestimmungsregister wie eine durch das Vektorschreibmaskenelement in dem Schreibmaskenregister eingenommene relative Position, wobei Ergebnisse der Ausführung nur in nicht maskierte Vektorelemente des gepackten Bestimmungsregisters geschrieben werden.
  • Beispiel 24 enthält die Substanz des beispielhaften Systems von Beispiel 23, wobei das Ausführen der Vektoranweisung ferner enthält, maskierte Vektorelemente des gepackten Bestimmungsregisters zu nullen.
  • Beispiel 25 enthält die Substanz des beispielhaften Systems von Beispiel 23, wobei das Ausführen der Vektoranweisung ferner enthält, keine neuen Werte in maskierte Vektorelemente des gepackten Bestimmungsregisters zu schreiben.
  • Beispiel 26 enthält die Substanz des beispielhaften Systems von Beispiel 23, wobei die Vektoranweisung ferner ein maskiertes Elementsteuerfeld enthält, um zu spezifizieren, ob maskierte Vektorelemente des gepackten Bestimmungsregisters ihren Wert beizubehalten haben oder zu nullen sind.
  • Beispiel 27 enthält die Substanz des beispielhaften Systems von Beispiel 26, wobei das maskierte Elementsteuerfeld aus dem Operationscode abzuleiten ist.
  • Beispiel 28 enthält die Substanz des beispielhaften Systems eines der Beispiele 21-27, wobei die Vektoranweisung ferner eine Elementgrößenkennung zum Spezifizieren einer Größe der Vektorelemente des gepackten Bestimmungsregisters enthält.
  • Beispiel 29 enthält die Substanz des beispielhaften Systems von Beispiel 28, wobei die Elementgrößenkennung eines eines Präfixes und eines Suffixes des Operationscodes ist.
  • Beispiel 30 enthält die Substanz des beispielhaften Systems von Beispiel 21, wobei das gepackte Bestimmungsregister eines eines 128-Bit-Vektorregisters, eines 256-Bit-Vektorregisters und eines 512-Bit-Vektorregisters enthält, wobei das gepackte Bestimmungsregister eine Vielzahl von Vektorelementen fester Größe enthält.
  • Beispiel 31 stellt ein Verfahren zum Ausführen einer Vektoranweisung bereit, das Verfahren enthaltend: Abrufen, durch Abrufschaltungen, der Vektoranweisung aus einem Codespeicher, die Vektoranweisung enthaltend einen Operationscode, eine Bestimmungskennung zum Spezifizieren eines gepackten Bestimmungsregisters, eine Schreibmaskenkennung zum Spezifizieren eines Schreibmaskenregisters und erste und zweite Unmittelbare, Decodieren, durch Decodierungsschaltungen, der abgerufenen Vektoranweisung und Ausführen, durch Ausführungsschaltungen, der decodierten Vektoranweisung, zum: Verwenden der ersten Unmittelbaren zum Ableiten eines Datenwerts, Verwenden der zweiten Unmittelbaren zum Ableiten eines Schritt-Werts, Verwenden des Schreibmaskenregisters zum Identifizieren nicht maskierter gepackter Bestimmungsregisterelemente, wenn der Operationscode spezifiziert, rundzusenden, Rundsenden des Datenwerts an jedes nicht maskierte gepackte Bestimmungsregisterelement, und wenn der Operationscode spezifiziert, einen Schritt durchzuführen, Speichern des Datenwerts in einem ersten nicht maskierten gepackten Bestimmungsregisterelement und nacheinander für jedes nachfolgende nicht maskierte gepackte Bestimmungsregisterelement Erzeugen und Speichern eines Werts eines unmittelbar vorhergehenden nicht maskierten gepackten Bestimmungsregisterelements plus dem Schritt-Wert.
  • Beispiel 32 enthält die Substanz des beispielhaften Verfahrens von Beispiel 31, wobei die Vektoranweisung ferner eine Ursprungskennung zum Spezifizieren eines Ursprungsvektorregisters enthält und wobei Ableiten des Rundsendedatenwerts eines von Verwenden der ersten Unmittelbaren als den Rundsendedatenwert und Verwenden der ersten Unmittelbaren zum Auswählen eines Vektorelements in dem Ursprungsvektorregister und Verwenden des ausgewählten Ursprungsvektorregisterelements als den Rundsendedatenwert enthält.
  • Beispiel 33 enthält die Substanz des beispielhaften Verfahrens von Beispiel 31, wobei die Vektoranweisung ferner eine Ursprungskennung zum Spezifizieren eines Ursprungsvektorregisters enthält und wobei Ableiten des Schritt-Datenwerts eines von Verwenden der zweiten Unmittelbaren als den Schritt-Datenwert und Verwenden der zweiten Unmittelbaren zum Auswählen eines Vektorelements in dem Ursprungsvektorregister und Verwenden des ausgewählten Ursprungsvektorregisterelements als den Schritt-Datenwert enthält.
  • Beispiel 34 enthält die Substanz des beispielhaften Verfahrens von Beispiel 31, wobei das Schreibmaskenregister eine Vielzahl von Ein-Bit-Vektorschreibmaskenelementen enthält, die jeweils steuern, ob ein Ausführungsergebnis in ein korrespondierendes Vektorelement in dem gepackten Bestimmungsregister geschrieben wird, das korrespondierende Vektorelement zum Einnehmen einer gleichen relativen Position in dem gepackten Bestimmungsregister wie eine durch das Vektorschreibmaskenelement in dem Schreibmaskenregister eingenommene relative Position, wobei Ergebnisse der Ausführung nur in nicht maskierte Vektorelemente des gepackten Bestimmungsregisters geschrieben werden.
  • Beispiel 35 enthält die Substanz des beispielhaften Verfahrens von Beispiel 34, wobei das Ausführen der Vektoranweisung ferner enthält, maskierte Vektorelemente des gepackten Bestimmungsregisters zu nullen.
  • Beispiel 36 enthält die Substanz des beispielhaften Verfahrens von Beispiel 34, wobei das Ausführen der Vektoranweisung ferner enthält, keine neuen Werte in maskierte Vektorelemente des gepackten Bestimmungsregisters zu schreiben.
  • Beispiel 37 enthält die Substanz des beispielhaften Verfahrens von Beispiel 33, wobei die Vektoranweisung ferner ein maskiertes Elementsteuerfeld enthält, um zu spezifizieren, ob maskierte Vektorelemente des gepackten Bestimmungsregisters ihren Wert beizubehalten haben oder zu nullen sind.
  • Beispiel 38 enthält die Substanz des beispielhaften Verfahrens von Beispiel 37, wobei das maskierte Elementsteuerfeld aus dem Operationscode abzuleiten ist.
  • Beispiel 39 enthält die Substanz des beispielhaften Verfahrens von Beispiel 38, wobei das maskierte Elementsteuerfeld eines eines Suffixes und eines Präfixes des Operationscodes ist.
  • Beispiel 40 enthält die Substanz des beispielhaften Verfahrens eines der Beispiele 31-39, wobei die Vektoranweisung ferner eine Elementgrößenkennung zum Spezifizieren einer Größe der Vektorelemente des gepackten Bestimmungsregisters enthält.
  • Beispiel 41 stellt einen Prozessor zum Ausführen einer Vektoranweisung bereit, der Prozessor enthaltend: Abrufschaltungen zum Abrufen der Vektoranweisung aus einem Codespeicher, die Vektoranweisung enthaltend einen Operationscode, eine Bestimmungskennung zum Spezifizieren eines gepackten Bestimmungsregisters, eine Schreibmaskenkennung zum Spezifizieren eines Schreibmaskenregisters und erste und zweite Unmittelbare, Decodierungsschaltungen zum Decodieren der abgerufenen Vektoranweisung und Ausführungsschaltungen zum Ausführen der decodierten Vektoranweisung, zum: Verwenden der ersten Unmittelbaren zum Ableiten eines Datenwerts, Verwenden der zweiten Unmittelbaren zum Ableiten eines Schritt-Werts und Verwenden des Schreibmaskenregisters zum Identifizieren nicht maskierter Bestimmungsvektorregister.
  • Beispiel 42 enthält die Substanz des beispielhaften Prozessors von Beispiel 41, wobei die Vektoranweisung ferner eine Ursprungskennung zum Spezifizieren eines Ursprungsvektorregisters enthält und wobei Ableiten des Rundsendedatenwerts eines von Verwenden der ersten Unmittelbaren als den Rundsendedatenwert und Verwenden der ersten Unmittelbaren zum Auswählen eines Vektorelements in dem Ursprungsvektorregister und Verwenden des ausgewählten Ursprungsvektorregisterelements als den Rundsendedatenwert enthält.
  • Beispiel 43 enthält die Substanz des beispielhaften Prozessors von Beispiel 41, wobei die Vektoranweisung ferner eine Ursprungskennung zum Spezifizieren eines Ursprungsvektorregisters enthält und wobei Ableiten des Schritt-Datenwerts eines von Verwenden der zweiten Unmittelbaren als den Schritt-Datenwert und Verwenden der zweiten Unmittelbaren zum Auswählen eines Vektorelements in dem Ursprungsvektorregister und Verwenden des ausgewählten Ursprungsvektorregisterelements als den Schritt-Datenwert enthält.
  • Beispiel 44 enthält die Substanz des beispielhaften Prozessors von Beispiel 41, wobei das Schreibmaskenregister eine Vielzahl von Ein-Bit-Vektorschreibmaskenelementen enthält, die jeweils steuern, ob ein Ausführungsergebnis in ein korrespondierendes Vektorelement in dem Bestimmungsvektorregister geschrieben wird, das korrespondierende Vektorelement zum Einnehmen einer gleichen relativen Position in dem Bestimmungsvektorregister wie eine durch das Vektorschreibmaskenelement in dem Schreibmaskenregister eingenommene relative Position, wobei Ergebnisse der Ausführung nur in nicht maskierte Vektorelemente des Bestimmungsvektorregisters zu schreiben sind.
  • Beispiel 45 enthält die Substanz des beispielhaften Prozessors von Beispiel 44, wobei das Ausführen der Vektoranweisung ferner enthält, maskierte Vektorelemente des Bestimmungsvektorregisters zu nullen.
  • Beispiel 46 enthält die Substanz des beispielhaften Prozessors von Beispiel 44, wobei das Ausführen der Vektoranweisung ferner enthält, keine neuen Werte in maskierte Vektorelemente des Bestimmungsvektorregisters zu schreiben.
  • Beispiel 47 enthält die Substanz des beispielhaften Prozessors von Beispiel 43, wobei die Vektoranweisung ferner ein maskiertes Elementsteuerfeld enthält, um zu spezifizieren, ob maskierte Vektorelemente des Bestimmungsvektorregisters ihren Wert beizubehalten haben oder zu nullen sind.
  • Beispiel 48 enthält die Substanz des beispielhaften Prozessors von Beispiel 47, wobei das maskierte Elementsteuerfeld aus dem Operationscode abzuleiten ist.
  • Beispiel 49 enthält die Substanz des beispielhaften Prozessors von Beispiel 48, wobei das maskierte Elementsteuerfeld eines eines Präfixes und eines Suffixes des Operationscodes ist.
  • Beispiel 50 enthält die Substanz des beispielhaften Prozessors eines der Beispiele 41-49, wobei die Vektoranweisung ferner eine Elementgrößenkennung zum Spezifizieren einer Größe der Vektorelemente des Bestimmungsvektorregisters enthält.
  • Beispiel 51 stellt ein System zum Ausführen einer Vektoranweisung bereit, das System enthaltend: einen Speicher und einen Prozessor, enthaltend: Abrufschaltungen zum Abrufen der Vektoranweisung aus einem Codespeicher, die Vektoranweisung enthaltend einen Operationscode, eine Bestimmungskennung zum Spezifizieren eines Bestimmungsvektorregisters, eine Schreibmaskenkennung zum Spezifizieren eines Schreibmaskenregisters und erste und zweite Unmittelbare, Decodierungsschaltungen zum Decodieren der abgerufenen Vektoranweisung und Ausführungsschaltungen zum Ausführen der decodierten Vektoranweisung, zum: Verwenden der ersten Unmittelbaren zum Ableiten eines Rundsendedatenwerts, Verwenden der zweiten Unmittelbaren zum Ableiten eines Schritt-Werts, Verwenden des Schreibmaskenregisters zum Identifizieren nicht maskierter Bestimmungsvektorregisterelemente, wenn der Operationscode spezifiziert, rundzusenden, Rundsenden des Rundsendedatenwerts an jedes nicht maskierte Bestimmungsvektorregisterelement, und wenn der Operationscode spezifiziert, einen Schritt durchzuführen, Speichern des Rundsendedatenwerts in einem ersten nicht maskierten Bestimmungsvektorregisterelement und nacheinander für jedes nachfolgende nicht maskierte Bestimmungsvektorregisterelement Erzeugen und Speichern eines Werts eines unmittelbar vorhergehenden nicht maskierten Bestimmungsvektorregisterelements plus dem Schritt-Wert.
  • Beispiel 52 enthält die Substanz des beispielhaften Systems von Beispiel 51, wobei die Vektoranweisung ferner eine Ursprungskennung zum Spezifizieren eines Ursprungsvektorregisters enthält und wobei Ableiten des Rundsendedatenwerts eines von Verwenden der ersten Unmittelbaren als den Rundsendedatenwert und Verwenden der ersten Unmittelbaren zum Auswählen eines Vektorelements in dem Ursprungsvektorregister und Verwenden des ausgewählten Ursprungsvektorregisterelements als den Rundsendedatenwert enthält.
  • Beispiel 53 enthält die Substanz des beispielhaften Systems von Beispiel 51, wobei die Vektoranweisung ferner eine Ursprungskennung zum Spezifizieren eines Ursprungsvektorregisters enthält und wobei Ableiten des Schritt-Datenwerts eines von Verwenden der zweiten Unmittelbaren als den Schritt-Datenwert und Verwenden der zweiten Unmittelbaren zum Auswählen eines Vektorelements in dem Ursprungsvektorregister und Verwenden des ausgewählten Ursprungsvektorregisterelements als den Schritt-Datenwert enthält.
  • Beispiel 54 enthält die Substanz des beispielhaften Systems von Beispiel 51, wobei das Schreibmaskenregister eine Vielzahl von Ein-Bit-Vektorschreibmaskenelementen enthält, die jeweils steuern, ob ein Ausführungsergebnis in ein korrespondierendes Vektorelement in dem Bestimmungsvektorregister geschrieben wird, das korrespondierende Vektorelement zum Einnehmen einer gleichen relativen Position in dem Bestimmungsvektorregister wie eine durch das Vektorschreibmaskenelement in dem Schreibmaskenregister eingenommene relative Position, wobei Ergebnisse der Ausführung nur in nicht maskierte Vektorelemente des Bestimmungsvektorregisters zu schreiben sind.
  • Beispiel 55 enthält die Substanz des beispielhaften Systems von Beispiel 54, wobei das Ausführen der Vektoranweisung ferner enthält, maskierte Vektorelemente des Bestimmungsvektorregisters zu nullen.
  • Beispiel 56 enthält die Substanz des beispielhaften Systems von Beispiel 54, wobei das Ausführen der Vektoranweisung ferner enthält, keine neuen Werte in maskierte Vektorelemente des Bestimmungsvektorregisters zu schreiben.
  • Beispiel 57 enthält die Substanz des beispielhaften Systems von Beispiel 53, wobei die Vektoranweisung ferner ein maskiertes Elementsteuerfeld enthält, um zu spezifizieren, ob maskierte Vektorelemente des Bestimmungsvektorregisters ihren Wert beizubehalten haben oder zu nullen sind.
  • Beispiel 58 enthält die Substanz des beispielhaften Systems von Beispiel 57, wobei das maskierte Elementsteuerfeld aus dem Operationscode abzuleiten ist.
  • Beispiel 59 enthält die Substanz des beispielhaften Systems von Beispiel 58, wobei das maskierte Elementsteuerfeld eines eines Präfixes und eines Suffixes des Operationscodes ist.
  • Beispiel 60 enthält die Substanz des beispielhaften Systems eines der Beispiele 51-59, wobei die Vektoranweisung ferner eine Elementgrößenkennung zum Spezifizieren einer Größe der Vektorelemente des Bestimmungsvektorregisters enthält.
  • Beispiel 61 stellt einen Prozessor zum Ausführen einer Vektoranweisung bereit, der Prozessor enthaltend: Abrufschaltungen zum Abrufen der Vektoranweisung aus einem Codespeicher, die Vektoranweisung enthaltend einen Operationscode, eine Ursprungskennung zum Spezifizieren eines Ursprungsschreibmaskenregisters, eine Bestimmungskennung zum Spezifizieren eines Bestimmungsschreibmaskenregisters, eine Schreibmaskenkennung zum Spezifizieren eines Schreibmaskenregisters, eine Elementgrößenkennung zum Spezifizieren einer Bestimmungsvektorelementgröße und eine Unmittelbare, Decodierungsschaltungen zum Decodieren der abgerufenen Vektoranweisung und Ausführungsschaltungen zum Ausführen der decodierten Vektoranweisung, zum: Verwenden der Elementgrößenkennung zum Identifizieren eines oder mehrerer gleicher Bereiche des Bestimmungsschreibmaskenregisters, Durchführen einer Operation an dem Ursprungsschreibmaskenregister und der Unmittelbaren zum Erzeugen eines Ergebnisses, Verwenden des Schreibmaskenregisters zum Bestimmen, welcher der gleichen Bereiche nicht maskiert ist, und Schreiben des Ergebnisses in jeden der nicht maskierten gleichen Bereiche.
  • Beispiel 62 enthält die Substanz des beispielhaften Prozessors von Beispiel 61, wobei die Ursprungskennung und die Bestimmungskennung ein gleiches Schreibmaskenregister identifizieren.
  • Beispiel 63 enthält die Substanz des beispielhaften Prozessors eines der Beispiele 61 und 62, wobei die Vektoranweisung ferner eine zweite Ursprungskennung zum Spezifizieren eines zweiten Ursprungsschreibmaskenregisters enthält und wobei die Ausführungsschaltungen zum Durchführen einer Operation an dem Ursprungsschreibmaskenregister, dem zweiten Ursprungsschreibmaskengenerator und der Unmittelbaren dienen, um das Ergebnis zu erzeugen.
  • Beispiel 64 enthält die Substanz des beispielhaften Prozessors von Beispiel 61, wobei das Schreibmaskenregister eine Vielzahl von Ein-Bit-Vektorschreibmaskenelementen enthält, die jeweils steuern, ob ein Ausführungsergebnis in einen korrespondierenden einen des einen oder der mehreren in dem Bestimmungsschreibmaskenregister identifizierten Bereiche geschrieben wird, wobei jedes der Vielzahl von Ein-Bit-Vektorschreibmaskenelemente eine gleiche relative Position in dem Schreibmaskenregister wie eine durch den einen Bereich in dem Bestimmungsvektorregister eingenommene relative Position einzunehmen hat.
  • Beispiel 65 enthält die Substanz des beispielhaften Prozessors von Beispiel 64, wobei das Ausführen der Vektoranweisung ferner enthält, maskierte Vektorelemente des Bestimmungsschreibmaskenregisters zu nullen.
  • Beispiel 66 enthält die Substanz des beispielhaften Prozessors von Beispiel 64, wobei das Ausführen der Vektoranweisung ferner enthält, keine neuen Werte in maskierte Vektorelemente des Bestimmungsschreibmaskenregisters zu schreiben.
  • Beispiel 67 enthält die Substanz des beispielhaften Prozessors von Beispiel 64, wobei die Vektoranweisung ferner ein maskiertes Elementsteuerfeld enthält, um zu spezifizieren, ob maskierte Vektorelemente des Bestimmungsvektorregisters ihren Wert beizubehalten haben oder zu nullen sind.
  • Beispiel 68 enthält die Substanz des beispielhaften Prozessors von Beispiel 61, wobei die Elementgrößenkennung in dem Operationscode enthalten ist.
  • Beispiel 69 enthält die Substanz des beispielhaften Prozessors von Beispiel 61, wobei die Operation, die das Ursprungsschreibmaskenregister und die Unmittelbare verwendet, ein Ergebnis zu erzeugen, eine bitweise binäre Operation ist, die eines von AND, OR, XOR, Linksverschiebung und Rechtsverschiebung ist.
  • Beispiel 70 enthält die Substanz des beispielhaften Prozessors eines der Beispiele 61, 62 und 64-69, wobei die Vektoranweisung ferner eine zweite Bestimmungskennung zum Spezifizieren eines Allzweckregisters enthält und wobei die Ausführungsschaltungen ferner zum Kopieren des Ergebnisses aus einem der nicht maskierten gleichen Bereiche des Bestimmungsschreibmaskenregisters in das Allzweckregister dienen.
  • Beispiel 71 stellt ein Verfahren zum Ausführen einer Vektoranweisung bereit, das Verfahren enthaltend: Abrufen, durch Abrufschaltungen, der Vektoranweisung aus einem Codespeicher, die Vektoranweisung enthaltend einen Operationscode, eine Ursprungskennung zum Spezifizieren eines Ursprungsschreibmaskenregisters, eine Bestimmungskennung zum Spezifizieren eines Bestimmungsschreibmaskenregisters, eine Schreibmaskenkennung zum Spezifizieren eines Schreibmaskenregisters, eine Elementgrößenkennung zum Spezifizieren einer Bestimmungsvektorelementgröße und eine Unmittelbare, Decodieren, durch Decodierungsschaltungen, der abgerufenen Vektoranweisung und Ausführen, durch Ausführungsschaltungen, der decodierten Vektoranweisung, zum: Verwenden der Elementgrößenkennung zum Identifizieren eines oder mehrerer gleicher Bereiche des Bestimmungsschreibmaskenregisters, Durchführen einer Operation an dem Ursprungsschreibmaskenregister und der Unmittelbaren zum Erzeugen eines Ergebnisses, Verwenden des Schreibmaskenregisters zum Bestimmen, welcher der gleichen Bereiche nicht maskiert ist, und Schreiben des Ergebnisses in jeden der nicht maskierten gleichen Bereiche.
  • Beispiel 72 enthält die Substanz des beispielhaften Verfahrens von Beispiel 71, wobei die Ursprungskennung und die Bestimmungskennung ein gleiches Schreibmaskenregister identifizieren.
  • Beispiel 73 enthält die Substanz des beispielhaften Verfahrens eines der Beispiele 71 und 72, wobei die Vektoranweisung ferner eine zweite Ursprungskennung zum Spezifizieren eines zweiten Ursprungsschreibmaskenregisters enthält und wobei die Ausführungsschaltungen zum Durchführen einer Operation an dem Ursprungsschreibmaskenregister, dem zweiten Ursprungsschreibmaskengenerator und der Unmittelbaren dienen, um das Ergebnis zu erzeugen.
  • Beispiel 74 enthält die Substanz des beispielhaften Verfahrens von Beispiel 71, wobei das Schreibmaskenregister eine Vielzahl von Ein-Bit-Vektorschreibmaskenelementen enthält, die jeweils steuern, ob ein Ausführungsergebnis in einen korrespondierenden einen des einen oder der mehreren in dem Bestimmungsschreibmaskenregister identifizierten Bereiche geschrieben wird, wobei jedes der Vielzahl von Ein-Bit-Vektorschreibmaskenelemente eine gleiche relative Position in dem Schreibmaskenregister wie eine durch den einen Bereich in dem Bestimmungsvektorregister eingenommene relative Position einzunehmen hat.
  • Beispiel 75 enthält die Substanz des beispielhaften Verfahrens von Beispiel 74, wobei das Ausführen der Vektoranweisung ferner enthält, maskierte Vektorelemente des Bestimmungsschreibmaskenregisters zu nullen.
  • Beispiel 76 enthält die Substanz des beispielhaften Verfahrens von Beispiel 74, wobei das Ausführen der Vektoranweisung ferner enthält, keine neuen Werte in maskierte Vektorelemente des Bestimmungsschreibmaskenregisters zu schreiben.
  • Beispiel 77 enthält die Substanz des beispielhaften Verfahrens von Beispiel 74, wobei die Vektoranweisung ferner ein maskiertes Elementsteuerfeld enthält, um zu spezifizieren, ob maskierte Vektorelemente des Bestimmungsvektorregisters ihren Wert beizubehalten haben oder zu nullen sind.
  • Beispiel 78 enthält die Substanz des beispielhaften Verfahrens von Beispiel 71, wobei die Elementgrößenkennung in dem Operationscode enthalten ist.
  • Beispiel 79 enthält die Substanz des beispielhaften Verfahrens von Beispiel 71, wobei die Operation, die das Ursprungsschreibmaskenregister und die Unmittelbare verwendet, ein Ergebnis zu erzeugen, eine bitweise binäre Operation ist, die eines von AND, OR, XOR, Linksverschiebung und Rechtsverschiebung ist.
  • Beispiel 80 enthält die Substanz des beispielhaften Verfahrens eines der Beispiele 71, 72 und 74-79, wobei die Vektoranweisung ferner eine zweite Bestimmungskennung zum Spezifizieren eines Allzweckregisters enthält und wobei die Ausführungsschaltungen ferner zum Kopieren des Ergebnisses aus einem der nicht maskierten gleichen Bereiche des Bestimmungsschreibmaskenregisters in das Allzweckregister dienen.
  • Beispiel 81 stellt ein System zum Ausführen einer Vektoranweisung bereit, das System enthaltend: einen Speicher und einen Prozessor, enthaltend: Abrufschaltungen zum Abrufen der Vektoranweisung aus einem Codespeicher, die Vektoranweisung enthaltend einen Operationscode, eine Ursprungskennung zum Spezifizieren eines Ursprungsschreibmaskenregisters, eine Bestimmungskennung zum Spezifizieren eines Bestimmungsschreibmaskenregisters, eine Schreibmaskenkennung zum Spezifizieren eines Schreibmaskenregisters, eine Elementgrößenkennung zum Spezifizieren einer Bestimmungsvektorelementgröße und eine Unmittelbare, und Decodierungsschaltungen zum Decodieren der abgerufenen Vektoranweisung und Ausführungsschaltungen zum Ausführen der decodierten Vektoranweisung, zum: Verwenden der Elementgrößenkennung zum Identifizieren eines oder mehrerer gleicher Bereiche des Bestimmungsschreibmaskenregisters, Durchführen einer Operation an dem Ursprungsschreibmaskenregister und der Unmittelbaren zum Erzeugen eines Ergebnisses, Verwenden des Schreibmaskenregisters zum Bestimmen, welcher der gleichen Bereiche nicht maskiert ist, und Schreiben des Ergebnisses in jeden der nicht maskierten gleichen Bereiche.
  • Beispiel 82 enthält die Substanz des beispielhaften Systems von Beispiel 81, wobei die Ursprungskennung und die Bestimmungskennung ein gleiches Schreibmaskenregister identifizieren.
  • Beispiel 83 enthält die Substanz des beispielhaften Systems eines der Beispiele 81 und 82, wobei die Vektoranweisung ferner eine zweite Ursprungskennung zum Spezifizieren eines zweiten Ursprungsschreibmaskenregisters enthält und wobei die Ausführungsschaltungen zum Durchführen einer Operation an dem Ursprungsschreibmaskenregister, dem zweiten Ursprungsschreibmaskengenerator und der Unmittelbaren dazu dienen, das Ergebnis zu erzeugen.
  • Beispiel 84 enthält die Substanz des beispielhaften Systems von Beispiel 81, wobei das Schreibmaskenregister eine Vielzahl von Ein-Bit-Vektorschreibmaskenelementen enthält, die jeweils steuern, ob ein Ausführungsergebnis in einen korrespondierenden einen des einen oder der mehreren in dem Bestimmungsschreibmaskenregister identifizierten Bereiche geschrieben wird, wobei jedes der Vielzahl von Ein-Bit-Vektorschreibmaskenelemente eine gleiche relative Position in dem Schreibmaskenregister wie eine durch den einen Bereich in dem Bestimmungsvektorregister eingenommene relative Position einzunehmen hat.
  • Beispiel 85 enthält die Substanz des beispielhaften Systems von Beispiel 84, wobei das Ausführen der Vektoranweisung ferner enthält, maskierte Vektorelemente des Bestimmungsschreibmaskenregisters zu nullen.
  • Beispiel 86 enthält die Substanz des beispielhaften Systems von Beispiel 84, wobei das Ausführen der Vektoranweisung ferner enthält, keine neuen Werte in maskierte Vektorelemente des Bestimmungsschreibmaskenregisters zu schreiben.
  • Beispiel 87 enthält die Substanz des beispielhaften Systems von Beispiel 84, wobei die Vektoranweisung ferner ein maskiertes Elementsteuerfeld enthält, um zu spezifizieren, ob maskierte Vektorelemente des Bestimmungsvektorregisters ihren Wert beizubehalten haben oder zu nullen sind.
  • Beispiel 88 enthält die Substanz des beispielhaften Systems von Beispiel 81, wobei die Elementgrößenkennung in dem Operationscode enthalten ist.
  • Beispiel 89 enthält die Substanz des beispielhaften Systems von Beispiel 81, wobei die Operation, die das Ursprungsschreibmaskenregister und die Unmittelbare verwendet, ein Ergebnis zu erzeugen, eine bitweise binäre Operation ist, die eines von AND, OR, XOR, Linksverschiebung und Rechtsverschiebung ist.
  • Beispiel 90 enthält die Substanz des beispielhaften Systems von Beispiel 81, wobei die Vektoranweisung ferner eine zweite Bestimmungskennung zum Spezifizieren eines Allzweckregisters enthält und wobei die Ausführungsschaltungen ferner zum Kopieren des Ergebnisses aus einem der nicht maskierten gleichen Bereiche des Bestimmungsschreibmaskenregisters in das Allzweckregister dienen.
  • Beispiel 91 stellt einen Prozessor zum Ausführen einer Vektoranweisung bereit, der Prozessor enthaltend: eine Abrufschaltung zum Abrufen der Vektoranweisung aus einem Codespeicher, die Vektoranweisung enthaltend einen Operationscode, eine Bestimmungskennung und eine Unmittelbare, eine Decodierungsschaltung zum Decodieren der abgerufenen Vektoranweisung und eine Ausführungsschaltung zum Ausführen der decodierten Vektoranweisung, wobei die Ausführungsschaltungen als Reaktion auf die decodierte Vektoranweisung zum Erzeugen eines Ergebnisses dienen, das in jedes Element eines durch die Bestimmungskennung spezifizierten gespeicherten Bestimmungsvektors zu schreiben ist, wobei das Ergebnis auf der Unmittelbaren basiert.
  • Beispiel 92 enthält die Substanz des beispielhaften Prozessors von Beispiel 91, wobei der gespeicherte Bestimmungsvektor ein Bestimmungsvektorregister enthält, wobei die Vektoranweisung ferner eine Ursprungskennung zum Identifizieren eines Ursprungsvektorregisters enthält und wobei die Ausführungsschaltung als Reaktion auf die decodierte Vektoranweisung die Unmittelbare verwendet, ein Element des Ursprungsvektorregisters auszuwählen und das ausgewählte Element an eine Vielzahl von Elementen des Bestimmungsvektorregisters rundzusenden.
  • Beispiel 93 enthält die Substanz des beispielhaften Prozessors von Beispiel 91, wobei der gespeicherte Bestimmungsvektor ein Bestimmungsvektorregister enthält und wobei die Ausführungsschaltung als Reaktion auf die decodierte Vektoranweisung die Unmittelbare an jedes Vektorelement des Bestimmungsvektorregisters rundsendet.
  • Beispiel 94 enthält die Substanz des beispielhaften Prozessors von Beispiel 91, wobei der gespeicherte Bestimmungsvektor ein Bestimmungsvektorregister enthält, wobei die Vektoranweisung ferner eine Ursprungskennung zum Identifizieren eines Ursprungsregisters enthält, wobei die Unmittelbare einen Schritt-Wert repräsentiert und wobei die Ausführungsschaltung als Reaktion auf die decodierte Vektoranweisung ein erstes Element des Bestimmungsvektorregisters auf einen in dem Ursprungsregister gespeicherten Wert setzt, und zum Setzen jedes nachfolgenden Elements des Bestimmungsvektorregisters auf einen Wert eines unmittelbar vorhergehenden Elements des Bestimmungsvektorregisters plus dem Schritt-Wert.
  • Beispiel 95 enthält die Substanz des beispielhaften Prozessors von Beispiel 91, wobei der gespeicherte Bestimmungsvektor ein Bestimmungsvektorregister enthält, wobei die Vektoranweisung ferner eine zweite Unmittelbare und eine Ursprungskennung zum Identifizieren eines Ursprungsvektorregisters enthält, wobei die zweite Unmittelbare einen Schritt-Wert repräsentiert und wobei die Ausführungsschaltung als Reaktion auf die decodierte Vektoranweisung die Unmittelbare verwendet, ein Element des Ursprungsvektorregisters auszuwählen, ein erstes Element des Bestimmungsvektorregisters auf einen in dem ausgewählten Ursprungsvektorregisterelement gespeicherten Wert zu setzen und jedes nachfolgende Element des Bestimmungsvektorregisters auf einen Wert eines unmittelbar vorhergehenden Elements des Bestimmungsvektorregisters plus dem Schritt-Wert zu setzen.
  • Beispiel 96 enthält die Substanz des beispielhaften Prozessors von Beispiel 91, wobei der gespeicherte Bestimmungsvektor ein Bestimmungsvektorregister enthält, wobei die Vektoranweisung ferner eine zweite Unmittelbare enthält, wobei die zweite Unmittelbare einen Schritt-Wert repräsentiert und wobei die Ausführungsschaltung als Reaktion auf die decodierte Vektoranweisung ein erstes Element des Bestimmungsvektorregisters auf einen Wert der Unmittelbaren setzt, und zum Setzen jedes nachfolgenden Elements des Bestimmungsvektorregisters auf einen Wert eines unmittelbar vorhergehenden Elements des Bestimmungsvektorregisters plus dem Schritt-Wert.
  • Beispiel 97 enthält die Substanz des beispielhaften Prozessors von Beispiel 91, wobei der gespeicherte Bestimmungsvektor ein Bestimmungsvektorregister enthält, wobei die Vektoranweisung ferner eine erste Ursprungskennung zum Identifizieren eines ersten Ursprungsvektorregisters und eine zweite Ursprungskennung zum Identifizieren eines zweiten Ursprungsvektorregisters enthält und wobei die Ausführungsschaltung als Reaktion auf die decodierte Vektoranweisung jedes Element des Bestimmungsvektorregisters auf einen Wert eines korrespondierenden Elements des ersten Ursprungsvektorregisters plus einem Wert eines korrespondierenden Elements des zweiten Ursprungsvektorregisters plus der Unmittelbaren setzt.
  • Beispiel 98 enthält die Substanz des beispielhaften Prozessors von Beispiel 91, wobei der gespeicherte Bestimmungsvektor ein Bestimmungsvektorregister enthält, wobei die Vektoranweisung ferner eine Schreibmaskenkennung zum Identifizieren eines Schreibmaskenregisters enthält, wobei die Unmittelbare eine kurze Unmittelbare ist und wobei die Ausführungsschaltung als Reaktion auf die decodierte Vektoranweisung das Schreibmaskenregister verwendet, jedes nicht maskierte Element des Bestimmungsvektorregisters auf die Unmittelbare zu setzen.
  • Beispiel 99 enthält die Substanz des beispielhaften Prozessors von Beispiel 92, wobei die Vektoranweisung ferner eine Größenkennung zum Spezifizieren einer Elementgröße jedes Elements des Bestimmungsvektorregisters enthält und wobei die Ausführungsschaltung als Reaktion auf die decodierte Vektoranweisung die Elementgrößenkennung verwendet, zu bestimmen, wie viele Elemente des Bestimmungsvektorregisters zu setzen sind.
  • Beispiel 100 enthält die Substanz des beispielhaften Prozessors von Beispiel 91, wobei der gespeicherte Bestimmungsvektor ein Bestimmungsmaskenregister enthält, wobei die Vektoranweisung ferner eine Schreibmaskenkennung zum Spezifizieren eines Schreibmaskenregisters enthält und wobei die Ausführungsschaltung als Reaktion auf die decodierte Vektoranweisung das Schreibmaskenregister verwendet, nicht maskierte Elemente des Bestimmungsmaskenregisters auf eins zu setzen und maskierte Elemente des Bestimmungsmaskenregisters auf null zu setzen, ohne die Unmittelbare zu verwenden.
  • Beispiel 101 stellt ein nichtflüchtiges computerlesbares Medium bereit, das Anweisungen enthält, die, wenn sie durch einen Prozessor ausgeführt werden, bewirken, dass der Prozessor als Reaktion auf die Vektoranweisung Folgendes durchführt: Abrufen, durch Abrufschaltungen, einer Vektoranweisung aus einem Codespeicher, die Vektoranweisung enthaltend einen Operationscode, eine Bestimmungskennung und eine Unmittelbare, Decodieren, durch Decodierungsschaltungen, der abgerufenen Vektoranweisung und Ausführen, durch Ausführungsschaltungen, der decodierten Vektoranweisung, wobei die Ausführungsschaltungen als Reaktion auf die decodierte Vektoranweisung zum Erzeugen eines Ergebnisses dienen, das in jedes Element eines durch die Bestimmungskennung spezifizierten gespeicherten Bestimmungsvektors zu schreiben ist, wobei das Ergebnis auf der Unmittelbaren basiert.
  • Beispiel 102 enthält die Substanz des beispielhaften nichtflüchtigen computerlesbaren Mediums von Beispiel 101, wobei der gespeicherte Bestimmungsvektor ein Bestimmungsvektorregister enthält, wobei die Vektoranweisung ferner eine Ursprungskennung zum Identifizieren eines Ursprungsvektorregisters enthält und wobei das Ausführen, durch die Ausführungsschaltungen, als Reaktion auf die decodierte Vektoranweisung enthält, die Unmittelbare zu verwenden, ein Element des Ursprungsvektorregisters auszuwählen und das ausgewählte Element an eine Vielzahl von Elementen des Bestimmungsvektorregisters rundzusenden.
  • Beispiel 103 enthält die Substanz des beispielhaften nichtflüchtigen computerlesbaren Mediums von Beispiel 101, wobei der gespeicherte Bestimmungsvektor ein Bestimmungsvektorregister enthält und wobei das Ausführen, durch die Ausführungsschaltungen, als Reaktion auf die decodierte Vektoranweisung enthält, die Unmittelbare an jedes Vektorelement des Bestimmungsvektorregisters rundzusenden.
  • Beispiel 104 enthält die Substanz des beispielhaften nichtflüchtigen computerlesbaren Mediums von Beispiel 101, wobei der gespeicherte Bestimmungsvektor ein Bestimmungsvektorregister enthält, wobei die Vektoranweisung ferner eine Ursprungskennung zum Identifizieren eines Ursprungsregisters enthält, wobei die Unmittelbare einen Schritt-Wert repräsentiert und wobei das Ausführen, durch die Ausführungsschaltung, als Reaktion auf die decodierte Vektoranweisung enthält, ein erstes Element des Bestimmungsvektorregisters auf einen in dem Ursprungsregister gespeicherten Wert zu setzen und jedes nachfolgende Element des Bestimmungsvektorregisters auf einen Wert eines unmittelbar vorhergehenden Elements des Bestimmungsvektorregisters plus dem Schritt-Wert zu setzen.
  • Beispiel 105 enthält die Substanz des beispielhaften nichtflüchtigen computerlesbaren Mediums von Beispiel 101, wobei der gespeicherte Bestimmungsvektor ein Bestimmungsvektorregister enthält, wobei die Vektoranweisung ferner eine zweite Unmittelbare und eine Ursprungskennung zum Identifizieren eines Ursprungsvektorregisters enthält, wobei die zweite Unmittelbare einen Schritt-Wert repräsentiert und wobei das Ausführen, durch die Ausführungsschaltung, als Reaktion auf die decodierte Vektoranweisung enthält, die Unmittelbare zu verwenden, ein Element des Ursprungsvektorregisters auszuwählen, ein erstes Element des Bestimmungsvektorregisters auf einen Wert des ausgewählten Ursprungsvektorregisterelements zu setzen und jedes nachfolgende Element des Bestimmungsvektorregisters auf einen Wert eines unmittelbar vorhergehenden Elements des Bestimmungsvektorregisters plus dem Schritt-Wert zu setzen.
  • Beispiel 106 stellt ein Gerät zum Ausführen einer Vektoranweisung bereit, das Gerät enthaltend: Mittel zum Abrufen der Vektoranweisung aus einem Codespeicher, die Vektoranweisung enthaltend einen Operationscode, eine Bestimmungskennung und eine Unmittelbare, Mittel zum Decodieren der abgerufenen Vektoranweisung und Mittel zum Ausführen der decodierten Vektoranweisung, wobei das Mittel zum Ausführen als Reaktion auf die decodierte Vektoranweisung zum Erzeugen eines Ergebnisses dient, das in jedes Element eines durch die Bestimmungskennung spezifizierten gespeicherten Bestimmungsvektors zu schreiben ist, wobei das Ergebnis auf der Unmittelbaren basiert.
  • Beispiel 107 enthält die Substanz des beispielhaften Geräts von Beispiel 106, wobei der gespeicherte Bestimmungsvektor ein Bestimmungsvektorregister enthält, wobei die Vektoranweisung ferner eine Ursprungskennung zum Identifizieren eines Ursprungsvektorregisters enthält und wobei das Ausführen, durch das Mittel zum Ausführen, als Reaktion auf die decodierte Vektoranweisung enthält, die Unmittelbare zu verwenden, ein Element des Ursprungsvektorregisters auszuwählen und das ausgewählte Element an eine Vielzahl von Elementen des Bestimmungsvektorregisters rundzusenden.
  • Beispiel 108 enthält die Substanz des beispielhaften Geräts von Beispiel 106, wobei der gespeicherte Bestimmungsvektor ein Bestimmungsvektorregister enthält und wobei das Ausführen, durch das Mittel zum Ausführen, als Reaktion auf die decodierte Vektoranweisung enthält, die Unmittelbare an jedes Vektorelement des Bestimmungsvektorregisters rundzusenden.
  • Beispiel 109 enthält die Substanz des beispielhaften Geräts von Beispiel 106, wobei der gespeicherte Bestimmungsvektor ein Bestimmungsvektorregister enthält, wobei die Vektoranweisung ferner eine Ursprungskennung zum Identifizieren eines Ursprungsregisters enthält, wobei die Unmittelbare einen Schritt-Wert repräsentiert und wobei das Ausführen, durch das Mittel zum Ausführen, als Reaktion auf die decodierte Vektoranweisung enthält, ein erstes Element des Bestimmungsvektorregisters auf einen in dem Ursprungsregister gespeicherten Wert zu setzen und jedes nachfolgende Element des Bestimmungsvektorregisters auf einen Wert eines unmittelbar vorhergehenden Elements des Bestimmungsvektorregisters plus dem Schritt-Wert zu setzen.
  • Beispiel 110 enthält die Substanz des beispielhaften Geräts von Beispiel 106, wobei die Vektoranweisung ferner eine zweite Unmittelbare und eine Ursprungskennung zum Identifizieren eines Ursprungsvektorregisters enthält, wobei der gespeicherte Bestimmungsvektor ein Bestimmungsvektorregister enthält, wobei die zweite Unmittelbare einen Schritt-Wert repräsentiert und wobei das Ausführen, durch das Mittel zum Ausführen, als Reaktion auf die decodierte Vektoranweisung enthält, die Unmittelbare zu verwenden, ein Element des Ursprungsvektorregisters auszuwählen, ein erstes Element des Bestimmungsvektorregisters auf einen Wert des ausgewählten Ursprungsvektorregisterelements zu setzen und jedes nachfolgende Element des Bestimmungsvektorregisters auf einen Wert eines unmittelbar vorhergehenden Elements des Bestimmungsvektorregisters plus dem Schritt-Wert zu setzen.
  • Beispiel 111 stellt ein System zum Ausführen einer Vektoranweisung bereit, das System enthaltend: einen Speicher und einen Prozessor, enthaltend: eine Abrufschaltung zum Abrufen der Vektoranweisung aus einem Codespeicher, die Vektoranweisung enthaltend einen Operationscode, eine Bestimmungskennung und eine Unmittelbare, eine Decodierungsschaltung zum Decodieren der abgerufenen Vektoranweisung und eine Ausführungsschaltung zum Ausführen der decodierten Vektoranweisung, wobei die Ausführungsschaltung als Reaktion auf die decodierte Vektoranweisung zum Erzeugen eines Ergebnisses dient, das in jedes Element eines durch die Bestimmungskennung spezifizierten gespeicherten Bestimmungsvektors zu schreiben ist, wobei das Ergebnis auf der Unmittelbaren basiert.
  • Beispiel 112 enthält die Substanz des beispielhaften Systems von Beispiel 111, wobei der gespeicherte Bestimmungsvektor ein Bestimmungsvektorregister enthält, wobei die Vektoranweisung ferner eine Ursprungskennung zum Identifizieren eines Ursprungsvektorregisters enthält und wobei die Ausführungsschaltung als Reaktion auf die decodierte Vektoranweisung die Unmittelbare verwendet, ein Element des Ursprungsvektorregisters auszuwählen und das ausgewählte Element an eine Vielzahl von Elementen des Bestimmungsvektorregisters rundzusenden.
  • Beispiel 113 enthält die Substanz des beispielhaften Systems von Beispiel 111, wobei die Vektoranweisung ferner eine Ursprungskennung zum Identifizieren eines Ursprungsregisters enthält, wobei die Unmittelbare einen Schritt-Wert repräsentiert und wobei die Ausführungsschaltung als Reaktion auf die decodierte Vektoranweisung ein erstes Element des Bestimmungsvektorregisters auf einen in dem Ursprungsregister gespeicherten Wert setzt, und zum Setzen jedes nachfolgenden Elements des Bestimmungsvektorregisters auf einen Wert eines unmittelbar vorhergehenden Elements des Bestimmungsvektorregisters plus dem Schritt-Wert.
  • Beispiel 114 enthält die Substanz des beispielhaften Systems von Beispiel 111, wobei die Vektoranweisung ferner eine zweite Unmittelbare und eine Ursprungskennung zum Identifizieren eines Ursprungsvektorregisters enthält, wobei die zweite Unmittelbare einen Schritt-Wert repräsentiert und wobei die Ausführungsschaltung als Reaktion auf die decodierte Vektoranweisung die Unmittelbare verwendet, ein Element des Ursprungsvektorregisters auszuwählen, ein erstes Element des Bestimmungsvektorregisters auf einen in dem ausgewählten Ursprungsvektorregisterelement gespeicherten Wert zu setzen und jedes nachfolgende Element des Bestimmungsvektorregisters auf einen Wert eines unmittelbar vorhergehenden Elements des Bestimmungsvektorregisters plus dem Schritt-Wert zu setzen.
  • Beispiel 115 enthält die Substanz des beispielhaften Systems von Beispiel 111, wobei die Vektoranweisung ferner eine zweite Unmittelbare enthält, wobei die zweite Unmittelbare einen Schritt-Wert repräsentiert und wobei die Ausführungsschaltung als Reaktion auf die decodierte Vektoranweisung ein erstes Element des Bestimmungsvektorregisters auf einen Wert der Unmittelbaren setzt, und zum Setzen jedes nachfolgenden Elements des Bestimmungsvektorregisters auf einen Wert eines unmittelbar vorhergehenden Elements des Bestimmungsvektorregisters plus dem Schritt-Wert.
  • Beispiel 116 enthält die Substanz des beispielhaften Systems von Beispiel 111, wobei die Vektoranweisung ferner eine erste Ursprungskennung zum Identifizieren eines ersten Ursprungsvektorregisters und eine zweite Ursprungskennung zum Identifizieren eines zweiten Ursprungsvektorregisters enthält und wobei die Ausführungsschaltung als Reaktion auf die decodierte Vektoranweisung jedes Element des Bestimmungsvektorregisters auf einen Wert eines korrespondierenden Elements des ersten Ursprungsvektorregisters plus einem Wert eines korrespondierenden Elements des zweiten Ursprungsvektorregisters plus der Unmittelbaren setzt.
  • Beispiel 117 enthält die Substanz des beispielhaften Systems von Beispiel 111, wobei der gespeicherte Bestimmungsvektor ein Bestimmungsvektorregister enthält, wobei die Vektoranweisung ferner eine Schreibmaskenkennung zum Identifizieren eines Schreibmaskenregisters enthält, wobei die Unmittelbare eine kurze Unmittelbare ist und wobei die Ausführungsschaltung als Reaktion auf die decodierte Vektoranweisung das Schreibmaskenregister verwendet, jedes nicht maskierte Element des Bestimmungsvektorregisters auf die Unmittelbare zu setzen.
  • Beispiel 118 enthält die Substanz des beispielhaften Systems von Beispiel 112, wobei die Vektoranweisung ferner eine Elementgrößenkennung enthält und wobei die Ausführungsschaltung als Reaktion auf die decodierte Vektoranweisung ferner die Elementgrößenkennung zu verwenden hat, zu bestimmen, wie viele Elemente des Bestimmungsvektorregisters zu setzen sind.
  • Beispiel 119 enthält die Substanz des beispielhaften Systems von Beispiel 111, wobei der gespeicherte Bestimmungsvektor ein Bestimmungsmaskenregister enthält, wobei die Vektoranweisung ferner eine Schreibmaskenkennung zum Spezifizieren eines Schreibmaskenregisters enthält und wobei die Ausführungsschaltung als Reaktion auf die decodierte Vektoranweisung das Schreibmaskenregister verwendet, nur nicht maskierte Elemente des Bestimmungsmaskenregisters auf eins zu setzen, ohne die Unmittelbare zu verwenden.
  • Beispiel 120 enthält die Substanz des beispielhaften Systems von Beispiel 119, wobei das Ausführen, durch die Ausführungsschaltungen, als Reaktion auf die decodierte Vektoranweisung ferner enthält, maskierte Elemente des Bestimmungsmaskenregisters auf null zu setzen.
  • Beispiel 121 stellt ein nichtflüchtiges maschinenlesbares Medium bereit, das Anweisungen enthält, die, wenn sie durch einen Prozessor ausgeführt werden, bewirken, dass der Prozessor Folgendes durchführt: Abrufen, durch Abrufschaltungen, einer Vektoranweisung aus einem Codespeicher, die Vektoranweisung enthaltend einen Operationscode, eine Bestimmungskennung zum Spezifizieren eines Bestimmungsvektorregisters, eine Schreibmaskenkennung zum Spezifizieren eines Schreibmaskenregisters und erste und zweite Unmittelbare, Decodieren, durch Decodierungsschaltungen, der abgerufenen Vektoranweisung und Ausführen, durch Ausführungsschaltungen, der decodierten Vektoranweisung, zum: Verwenden der ersten Unmittelbaren zum Ableiten eines Datenwerts, Verwenden der zweiten Unmittelbaren zum Ableiten eines Schritt-Werts, Verwenden des Schreibmaskenregisters zum Identifizieren nicht maskierter Bestimmungsvektorregisterelemente, wenn der Operationscode spezifiziert, rundzusenden, Rundsenden des Datenwerts an jedes nicht maskierte Bestimmungsvektorregisterelement, und wenn der Operationscode spezifiziert, einen Schritt durchzuführen, Speichern des Datenwerts in einem ersten nicht maskierten Bestimmungsvektorregisterelement und nacheinander für jedes nachfolgende nicht maskierte Bestimmungsvektorregisterelement Erzeugen und Speichern eines Werts eines unmittelbar vorhergehenden nicht maskierten Bestimmungsvektorregisterelements plus dem Schritt-Wert.
  • Beispiel 122 enthält die Substanz des beispielhaften nichtflüchtigen maschinenlesbaren Mediums von Beispiel 121, wobei die Vektoranweisung ferner eine Ursprungskennung zum Spezifizieren eines Ursprungsvektorregisters enthält und wobei Ableiten des Rundsendedatenwerts eines von Verwenden der ersten Unmittelbaren als den Rundsendedatenwert und Verwenden der ersten Unmittelbaren zum Auswählen eines Vektorelements in dem Ursprungsvektorregister und Verwenden des ausgewählten Ursprungsvektorregisterelements als den Rundsendedatenwert enthält.
  • Beispiel 123 enthält die Substanz des beispielhaften nichtflüchtigen maschinenlesbaren Mediums von Beispiel 121, wobei die Vektoranweisung ferner eine Ursprungskennung zum Spezifizieren eines Ursprungsvektorregisters enthält und wobei Ableiten des Schritt-Datenwerts eines von Verwenden der zweiten Unmittelbaren als den Schritt-Datenwert und Verwenden der zweiten Unmittelbaren zum Auswählen eines Vektorelements in dem Ursprungsvektorregister und Verwenden des ausgewählten Ursprungsvektorregisterelements als den Schritt-Datenwert enthält.
  • Beispiel 124 enthält die Substanz des beispielhaften nichtflüchtigen maschinenlesbaren Mediums von Beispiel 121, wobei das Schreibmaskenregister eine Vielzahl von Ein-Bit-Vektorschreibmaskenelementen enthält, die jeweils steuern, ob ein Ausführungsergebnis in ein korrespondierendes Vektorelement in dem Bestimmungsvektorregister geschrieben wird, das korrespondierende Vektorelement zum Einnehmen einer gleichen relativen Position in dem Bestimmungsvektorregister wie eine durch das Vektorschreibmaskenelement in dem Schreibmaskenregister eingenommene relative Position, wobei Ergebnisse der Ausführung nur in nicht maskierte Vektorelemente des Bestimmungsvektorregisters zu schreiben sind.
  • Beispiel 125 enthält die Substanz des beispielhaften nichtflüchtigen maschinenlesbaren Mediums von Beispiel 124, wobei das Ausführen der Vektoranweisung ferner enthält, maskierte Vektorelemente des Bestimmungsvektorregisters zu nullen.
  • Beispiel 126 enthält die Substanz des beispielhaften nichtflüchtigen maschinenlesbaren Mediums von Beispiel 124, wobei das Ausführen der Vektoranweisung ferner enthält, keine neuen Werte in maskierte Vektorelemente des Bestimmungsvektorregisters zu schreiben.
  • Beispiel 127 enthält die Substanz des beispielhaften nichtflüchtigen maschinenlesbaren Mediums von Beispiel 123, wobei die Vektoranweisung ferner ein maskiertes Elementsteuerfeld enthält, um zu spezifizieren, ob maskierte Vektorelemente des Bestimmungsvektorregisters ihren Wert beizubehalten haben oder zu nullen sind.
  • Beispiel 128 enthält die Substanz des beispielhaften nichtflüchtigen maschinenlesbaren Mediums von Beispiel 127, wobei das maskierte Elementsteuerfeld aus dem Operationscode abzuleiten ist.
  • Beispiel 129 enthält die Substanz des beispielhaften nichtflüchtigen maschinenlesbaren Mediums von Beispiel 127, wobei das maskierte Elementsteuerfeld eines eines Präfixes und eines Suffixes des Operationscodes ist.
  • Beispiel 130 enthält die Substanz des beispielhaften nichtflüchtigen maschinenlesbaren Mediums eines der Beispiele 121-129, wobei die Vektoranweisung ferner eine Elementgrößenkennung zum Spezifizieren einer Größe der Vektorelemente des Bestimmungsvektorregisters enthält.
  • Beispiel 131 stellt einen Prozessor zum Ausführen einer Vektoranweisung bereit, der Prozessor enthaltend: Mittel zum Abrufen der Vektoranweisung aus einem Codespeicher, die Vektoranweisung enthaltend einen Operationscode, eine Bestimmungskennung zum Spezifizieren eines Bestimmungsvektorregisters, eine Schreibmaskenkennung zum Spezifizieren eines Schreibmaskenregisters und erste und zweite Unmittelbare, Mittel zum Decodieren der abgerufenen Vektoranweisung und Mittel zum Ausführen der decodierten Vektoranweisung, zum: Verwenden der ersten Unmittelbaren zum Ableiten eines Datenwerts, Verwenden der zweiten Unmittelbaren zum Ableiten eines Schritt-Werts, Verwenden des Schreibmaskenregisters zum Identifizieren nicht maskierter Bestimmungsvektorregisterelemente, wenn der Operationscode spezifiziert, rundzusenden, Rundsenden des Datenwerts an jedes nicht maskierte Bestimmungsvektorregisterelement, und wenn der Operationscode spezifiziert, einen Schritt durchzuführen, Speichern des Datenwerts in einem ersten nicht maskierten Bestimmungsvektorregisterelement und nacheinander für jedes nachfolgende nicht maskierte Bestimmungsvektorregisterelement Erzeugen und Speichern eines Werts eines unmittelbar vorhergehenden nicht maskierten Bestimmungsvektorregisterelements plus dem Schritt-Wert.
  • Beispiel 132 enthält die Substanz des beispielhaften Prozessors von Beispiel 131, wobei die Vektoranweisung ferner eine Ursprungskennung zum Spezifizieren eines Ursprungsvektorregisters enthält und wobei Ableiten des Rundsendedatenwerts eines von Verwenden der ersten Unmittelbaren als den Rundsendedatenwert und Verwenden der ersten Unmittelbaren zum Auswählen eines Vektorelements in dem Ursprungsvektorregister und Verwenden des ausgewählten Ursprungsvektorregisterelements als den Rundsendedatenwert enthält.
  • Beispiel 133 enthält die Substanz des beispielhaften Prozessors von Beispiel 131, wobei die Vektoranweisung ferner eine Ursprungskennung zum Spezifizieren eines Ursprungsvektorregisters enthält und wobei Ableiten des Schritt-Datenwerts eines von Verwenden der zweiten Unmittelbaren als den Schritt-Datenwert und Verwenden der zweiten Unmittelbaren zum Auswählen eines Vektorelements in dem Ursprungsvektorregister und Verwenden des ausgewählten Ursprungsvektorregisterelements als den Schritt-Datenwert enthält.
  • Beispiel 134 enthält die Substanz des beispielhaften Prozessors von Beispiel 131, wobei das Schreibmaskenregister eine Vielzahl von Ein-Bit-Vektorschreibmaskenelementen enthält, die jeweils steuern, ob ein Ausführungsergebnis in ein korrespondierendes Vektorelement in dem Bestimmungsvektorregister geschrieben wird, das korrespondierende Vektorelement zum Einnehmen einer gleichen relativen Position in dem Bestimmungsvektorregister wie eine durch das Vektorschreibmaskenelement in dem Schreibmaskenregister eingenommene relative Position, wobei Ergebnisse der Ausführung nur in nicht maskierte Vektorelemente des Bestimmungsvektorregisters zu schreiben sind.
  • Beispiel 135 enthält die Substanz des beispielhaften Prozessors von Beispiel 134, wobei das Ausführen der Vektoranweisung ferner enthält, maskierte Vektorelemente des Bestimmungsvektorregisters zu nullen.
  • Beispiel 136 enthält die Substanz des beispielhaften Prozessors von Beispiel 134, wobei das Ausführen der Vektoranweisung ferner enthält, keine neuen Werte in maskierte Vektorelemente des Bestimmungsvektorregisters zu schreiben.
  • Beispiel 137 enthält die Substanz des beispielhaften Prozessors von Beispiel 133, wobei die Vektoranweisung ferner ein maskiertes Elementsteuerfeld enthält, um zu spezifizieren, ob maskierte Vektorelemente des Bestimmungsvektorregisters ihren Wert beizubehalten haben oder zu nullen sind.
  • Beispiel 138 enthält die Substanz des beispielhaften Prozessors von Beispiel 137, wobei das maskierte Elementsteuerfeld aus dem Operationscode abzuleiten ist.
  • Beispiel 139 enthält die Substanz des beispielhaften Prozessors von Beispiel 137, wobei das maskierte Elementsteuerfeld ein Suffix oder ein Präfix des Operationscodes ist.
  • Beispiel 140 enthält die Substanz des beispielhaften Prozessors eines der Beispiele 131-139, wobei die Vektoranweisung ferner eine Elementgrößenkennung zum Spezifizieren einer Größe der Vektorelemente des Bestimmungsvektorregisters enthält.

Claims (26)

  1. Beansprucht wird:
  2. System zum Ausführen einer Anweisung, das System umfassend: einen Speicher; und einen Prozessor, umfassend: Abrufschaltungen zum Abrufen der Anweisung aus einem Codespeicher, die Anweisung umfassend einen Operationscode, eine Bestimmungskennung zum Spezifizieren eines Bestimmungsvektorregisters, eine erste Unmittelbare und eine Schreibmaskenkennung zum Spezifizieren eines Schreibmaskenregisters, das Schreibmaskenregister umfassend mindestens ein Bit korrespondierend mit jedem Bestimmungsvektorregisterelement, das mindestens eine Bit zum Spezifizieren, ob das Bestimmungsvektorregisterelement maskiert oder nicht maskiert ist; Decodierungsschaltungen zum Decodieren der abgerufenen Anweisung; und Ausführungsschaltungen zum Ausführen der decodierten Anweisung zum Verwenden des Schreibmaskenregisters zum Bestimmen nicht maskierter Elemente des Bestimmungsvektorregisters und, wenn der Operationscode spezifiziert, rundzusenden, Rundsenden der ersten Unmittelbaren an ein oder mehrere nicht maskierte Vektorelemente des Bestimmungsvektorregisters.
  3. System nach Anspruch 1, wobei die Ausführungsschaltungen ferner dazu dienen, maskierte Vektorelemente des Bestimmungsvektorregisters zu nullen.
  4. System nach Anspruch 1, wobei die Ausführungsschaltungen ferner dazu dienen, zu gestatten, dass maskierte Vektorelemente ihre vorherigen Werte beibehalten.
  5. System nach einem der Ansprüche 1-3, wobei die Anweisung ferner ein Steuerfeld für maskierte Elemente umfasst, zum Spezifizieren, ob maskierte Vektorelemente des Bestimmungsvektorregisters ihren Wert beibehalten sollen sind oder zu nullen sind, und wobei die Ausführungsschaltungen ferner dazu dienen, das Steuerfeld für maskierte Elemente für jedes maskierte Element des Bestimmungsvektorregisters zu verwenden, um zu bestimmen, ob das maskierte Element zu nullen ist oder zu gestatten ist, dass das maskierte Element seinen Wert beibehält.
  6. System nach Anspruch 4, wobei das Steuerfeld für maskierte Elemente von dem Operationscode abgeleitet wird.
  7. System nach einem der Ansprüche 1-3, wobei der Operationscode ferner eine Elementgrößenkennung umfasst, um eine Elementgröße der Bestimmungsvektorregisterelemente zu spezifizieren, wobei die Elementgrößenkennung eines eines Präfixes und eines Suffixes des Operationscodes ist.
  8. System nach Anspruch 6, wobei die Elementgröße eines von einem Byte, zwei Bytes, vier Bytes und acht Bytes ist.
  9. Verfahren zum Ausführen einer Anweisung, das Verfahren umfassend: Abrufen, durch Abrufschaltungen, der Anweisung aus einem Codespeicher, die Anweisung umfassend einen Operationscode, eine Bestimmungskennung zum Spezifizieren eines Bestimmungsvektorregisters, eine erste Unmittelbare und eine zweite Unmittelbare und eine Schreibmaskenkennung zum Spezifizieren eines Schreibmaskenregisters, das Schreibmaskenregister umfassend mindestens ein Bit korrespondierend mit jedem Bestimmungsvektorregisterelement, das mindestens eine Bit zum Spezifizieren, ob das Bestimmungsvektorregisterelement maskiert oder nicht maskiert ist; Decodieren, durch Decodierungsschaltungen, der abgerufenen Anweisung; und Ausführen, durch Ausführungsschaltungen, der decodierten Anweisung zum: Verwenden der ersten Unmittelbaren zum Ableiten eines Datenwerts; Verwenden der zweiten Unmittelbaren zum Ableiten eines Schritt-Werts; Verwenden des Schreibmaskenregisters zum Identifizieren nicht maskierter Bestimmungsvektorregisterelemente; und wenn der Operationscode spezifiziert, einen Schritt durchzuführen, Speichern des Datenwerts in einem ersten nicht maskierten Bestimmungsvektorregisterelement und, für jedes nachfolgende nicht maskierte Bestimmungsvektorregisterelement, Erzeugen eines Schritt-durchgeführt-Werts durch Addieren des Schritt-Werts zu einem unmittelbar vorhergehenden nicht maskierten Bestimmungsvektorregister und Speichern des Schritt-durchgeführt-Werts in dem nicht maskierten Bestimmungsvektorregisterelement.
  10. Verfahren nach Anspruch 8, wobei die Anweisung ferner eine Ursprungskennung zum Spezifizieren eines Ursprungsvektorregisters umfasst und wobei Ableiten des Datenwerts eines von Verwenden der ersten Unmittelbaren als den Datenwert und Verwenden der ersten Unmittelbaren zum Auswählen eines Elements in dem Ursprungsvektorregister umfasst.
  11. Verfahren nach Anspruch 8, wobei die Anweisung ferner eine Ursprungskennung zum Spezifizieren eines Ursprungsvektorregisters umfasst und wobei Ableiten des Schritt-Werts eines von Verwenden der zweiten Unmittelbaren als den Schritt-Wert und Verwenden der zweiten Unmittelbaren zum Auswählen eines Elements in dem Ursprungsvektorregister zum Verwenden als den Schritt-Wert umfasst.
  12. Verfahren nach einem der Ansprüche 8-10, wobei das Ausführen der Anweisung ferner umfasst, nach Speichern des Schritt-durchgeführt-Werts in jedem nachfolgenden nicht maskierten Bestimmungsvektorregisterelement, maskierte Vektorelemente des Bestimmungsvektorregisters zu nullen.
  13. Verfahren nach einem der Ansprüche 8-10, wobei das Ausführen der Anweisung ferner umfasst, nach Speichern des Schritt-durchgeführt-Werts in jedem nachfolgenden nicht maskierten Bestimmungsvektorregisterelement, zu gestatten, dass maskierte Vektorelemente des Bestimmungsvektorregisters ihre Werte beibehalten.
  14. Verfahren nach einem der Ansprüche 8-10, wobei die Anweisung ferner ein Steuerfeld für maskierte Elemente umfasst, zum Spezifizieren, ob maskierte Vektorelemente des Bestimmungsvektorregisters ihren Wert beibehalten oder genullt werden.
  15. Prozessor zum Ausführen einer Anweisung, der Prozessor umfassend: Mittel zum Abrufen der Anweisung aus einem Codespeicher, die Anweisung umfassend einen Operationscode, eine Bestimmungskennung zum Spezifizieren eines Bestimmungsvektorregisters, eine erste Unmittelbare und eine zweite Unmittelbare und eine Schreibmaskenkennung zum Spezifizieren eines Schreibmaskenregisters, das Schreibmaskenregister umfassend mindestens ein Bit korrespondierend mit jedem Bestimmungsvektorregisterelement, das mindestens eine Bit zum Spezifizieren, ob das Bestimmungsvektorregisterelement maskiert oder nicht maskiert ist; Mittel zum Decodieren der abgerufenen Anweisung; und Mittel zum Ausführen der decodierten Anweisung zum: Verwenden der ersten Unmittelbaren zum Ableiten eines Datenwerts; Verwenden der zweiten Unmittelbaren zum Ableiten eines Schritt-Werts; Verwenden des Schreibmaskenregisters zum Identifizieren nicht maskierter Bestimmungsvektorregisterelemente; und wenn der Operationscode spezifiziert, einen Schritt durchzuführen, Speichern des Datenwerts in einem ersten nicht maskierten Bestimmungsvektorregisterelement und, für jedes nachfolgende nicht maskierte Bestimmungsvektorregisterelement, Erzeugen eines Schritt-durchgeführt-Werts durch Addieren des Schritt-Werts zu einem unmittelbar vorhergehenden nicht maskierten Bestimmungsvektorregister und Speichern des Schritt-durchgeführt-Werts in dem nicht maskierten Bestimmungsvektorregisterelement.
  16. Prozessor nach Anspruch 14, wobei die Anweisung ferner eine Ursprungskennung zum Spezifizieren eines Ursprungsvektorregisters umfasst und wobei das Mittel zum Ausführen den Datenwert durch eines von Verwenden der ersten Unmittelbaren als den Datenwert und Verwenden der ersten Unmittelbaren zum Auswählen eines Elements in dem Ursprungsvektorregister ableitet.
  17. Prozessor nach Anspruch 14, wobei die Anweisung ferner eine Ursprungskennung zum Spezifizieren eines Ursprungsvektorregisters umfasst und wobei das Mittel zum Ausführen den Schritt-Wert durch eines von Verwenden der zweiten Unmittelbaren als den Schritt-Wert und Verwenden der zweiten Unmittelbaren zum Auswählen eines Elements in dem Ursprungsvektorregister zum Verwenden als den Schritt-Wert ableitet.
  18. Prozessor nach einem der Ansprüche 14-16, wobei das Mittel zum Ausführen, nach Speichern von Daten in jedem nachfolgenden nicht maskierten Bestimmungsvektorregisterelement, ferner maskierte Vektorelemente des Bestimmungsvektorregisters nullt.
  19. Prozessor nach einem der Ansprüche 14-16, wobei das Mittel zum Ausführen, nach Speichern von Daten in jedem nachfolgenden nicht maskierten Bestimmungsvektorregisterelement, ferner gestattet, dass maskierte Vektorelemente des Bestimmungsvektorregisters ihre vorhergehenden Werte beibehalten.
  20. Prozessor nach einem der Ansprüche 14-16, wobei die Anweisung ferner ein Steuerfeld für maskierte Elemente umfasst, zum Spezifizieren, ob maskierte Vektorelemente des Bestimmungsvektorregisters ihren Wert beibehalten oder genullt werden, und wobei das Mittel zum Ausführen ferner entweder maskierte Elemente des Bestimmungsvektorregisters nullt oder gestattet, dass maskierte Elemente des Bestimmungsvektorregisters ihre vorhergehenden Werte beibehalten, basierend auf dem Steuerfeld für maskierte Elemente.
  21. Prozessor nach einem der Ansprüche 14-16, wobei die Anweisung ferner eine Ursprungskennung zum Spezifizieren eines Ursprungsvektorregisters umfasst und wobei das Mittel zum Ausführen dazu dient, den Datenwert durch Addieren der ersten Unmittelbaren zu einem Element des Ursprungsvektorregisters, identifiziert durch die zweite Unmittelbare, abzuleiten.
  22. Nichtflüchtiges maschinenlesbares Medium, das Anweisungen enthält, die, wenn sie durch einen Prozessor ausgeführt werden, bewirken, dass der Prozessor: durch Abrufschaltungen eine Anweisung aus einem Codespeicher abruft, die Anweisung umfassend einen Operationscode, eine Bestimmungskennung zum Spezifizieren eines Bestimmungsvektorregisters, eine erste Unmittelbare und eine zweite Unmittelbare und eine Schreibmaskenkennung zum Spezifizieren eines Schreibmaskenregisters, das Schreibmaskenregister umfassend mindestens ein Bit korrespondierend mit jedem Bestimmungsvektorregisterelement, das mindestens eine Bit zum Spezifizieren, ob das Bestimmungsvektorregisterelement maskiert oder nicht maskiert ist; durch Decodierungsschaltungen die abgerufene Anweisung decodiert; und durch Ausführungsschaltungen die decodierte Anweisung ausführt zum: Verwenden der ersten Unmittelbaren zum Ableiten eines Datenwerts; Verwenden der zweiten Unmittelbaren zum Ableiten eines Schritt-Werts; Verwenden des Schreibmaskenregisters zum Identifizieren nicht maskierter Bestimmungsvektorregisterelemente; und wenn der Operationscode spezifiziert, einen Schritt durchzuführen, Speichern des Datenwerts in einem ersten nicht maskierten Bestimmungsvektorregisterelement und, für jedes nachfolgende nicht maskierte Bestimmungsvektorregisterelement, Erzeugen eines Schritt-durchgeführt-Werts durch Addieren des Schritt-Werts zu einem unmittelbar vorhergehenden nicht maskierten Bestimmungsvektorregister und Speichern des Schritt-durchgeführt-Werts in dem nicht maskierten Bestimmungsvektorregisterelement.
  23. Nichtflüchtiges maschinenlesbares Medium nach Anspruch 21, wobei die Anweisung ferner eine Ursprungskennung zum Spezifizieren eines Ursprungsvektorregisters umfasst und wobei Ableiten des Datenwerts eines von Verwenden der ersten Unmittelbaren als den Datenwert und Verwenden der ersten Unmittelbaren zum Auswählen eines Elements in dem Ursprungsvektorregister umfasst.
  24. Nichtflüchtiges maschinenlesbares Medium nach Anspruch 21, wobei die Anweisung ferner eine Ursprungskennung zum Spezifizieren eines Ursprungsvektorregisters umfasst und wobei Ableiten des Schritt-Werts eines von Verwenden der zweiten Unmittelbaren als den Schritt-Wert und Verwenden der zweiten Unmittelbaren zum Auswählen eines Elements in dem Ursprungsvektorregister zum Verwenden als den Schritt-Wert umfasst.
  25. Nichtflüchtiges maschinenlesbares Medium nach einem der Ansprüche 21-23, wobei das Ausführen der Anweisung ferner umfasst, nach Speichern des Schritt-durchgeführt-Werts in jedem nachfolgenden nicht maskierten Bestimmungsvektorregisterelement, maskierte Vektorelemente des Bestimmungsvektorregisters zu nullen.
  26. Nichtflüchtiges maschinenlesbares Medium nach einem der Ansprüche 21-23, wobei das Ausführen der Anweisung ferner umfasst, nach Speichern des Schritt-durchgeführt-Werts in jedem nachfolgenden nicht maskierten Bestimmungsvektorregisterelement, zu gestatten, dass maskierte Vektorelemente des Bestimmungsvektorregisters ihre Werte beibehalten.
DE102018005170.7A 2017-06-29 2018-06-29 Anweisungen für vektoroperationen mit konstanten werten Pending DE102018005170A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/638,074 2017-06-29
US15/638,074 US11579881B2 (en) 2017-06-29 2017-06-29 Instructions for vector operations with constant values

Publications (1)

Publication Number Publication Date
DE102018005170A1 true DE102018005170A1 (de) 2019-01-03

Family

ID=64661748

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102018005170.7A Pending DE102018005170A1 (de) 2017-06-29 2018-06-29 Anweisungen für vektoroperationen mit konstanten werten

Country Status (3)

Country Link
US (1) US11579881B2 (de)
CN (1) CN109213472A (de)
DE (1) DE102018005170A1 (de)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP3336691B1 (de) 2016-12-13 2022-04-06 ARM Limited Replikatelementanweisung
EP3336692B1 (de) * 2016-12-13 2020-04-29 Arm Ltd Replikatpartitionsanweisung
US11789734B2 (en) * 2018-08-30 2023-10-17 Advanced Micro Devices, Inc. Padded vectorization with compile time known masks
US11650817B2 (en) * 2018-09-18 2023-05-16 Optimum Semiconductor Technologies Inc. System and method to implement masked vector instructions
WO2020181002A1 (en) * 2019-03-05 2020-09-10 Cryptography Research, Inc. Side-channel-attack-resistant memory access on embedded central processing units
US11620132B2 (en) * 2019-05-08 2023-04-04 International Business Machines Corporation Reusing an operand received from a first-in-first-out (FIFO) buffer according to an operand specifier value specified in a predefined field of an instruction
US20220197653A1 (en) * 2020-12-22 2022-06-23 Intel Corporation Processors, methods, systems, and instructions to select and store data elements from strided data element positions in a first dimension from three source two-dimensional arrays in a result two-dimensional array

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20070150697A1 (en) * 2005-05-10 2007-06-28 Telairity Semiconductor, Inc. Vector processor with multi-pipe vector block matching
US9600281B2 (en) * 2010-07-12 2017-03-21 International Business Machines Corporation Matrix multiplication operations using pair-wise load and splat operations
CN108519921B (zh) * 2011-12-23 2022-07-12 英特尔公司 用于从通用寄存器向向量寄存器进行广播的装置和方法
US9378017B2 (en) * 2012-12-29 2016-06-28 Intel Corporation Apparatus and method of efficient vector roll operation
US9424039B2 (en) * 2014-07-09 2016-08-23 Intel Corporation Instruction for implementing vector loops of iterations having an iteration dependent condition
US11544214B2 (en) * 2015-02-02 2023-01-03 Optimum Semiconductor Technologies, Inc. Monolithic vector processor configured to operate on variable length vectors using a vector length register

Also Published As

Publication number Publication date
US11579881B2 (en) 2023-02-14
US20190004801A1 (en) 2019-01-03
CN109213472A (zh) 2019-01-15

Similar Documents

Publication Publication Date Title
DE102015007571B4 (de) Keine-lokalität-hinweis-vektor-speicherzugriff-prozessoren, -verfahren, -systeme und -befehle
DE102018006757A1 (de) Festkomma-zu-gleitkomma-umwandlung
DE112013005188B4 (de) Prozessor und vefrahren zur vektorisierung von zusammengeführten, mehrfach geschachtelten schleifen
DE102018005105A1 (de) Befehle für entfernte atomare operationen
DE102018005170A1 (de) Anweisungen für vektoroperationen mit konstanten werten
DE102014003661A1 (de) Prozessoren, Verfahren, Systeme und Befehle zur Konsolidierung unmaskierter Elemente von Operationsmasken
DE102013021221A1 (de) Befehle und Logik zur Vektorisierung von bedingten Schleifen
DE102014004564A1 (de) Prozessoren, verfahren und systeme zum implementieren von teilregisterzugriffen mit maskierten gesamtregisterzugriffen
DE112014006508T5 (de) Prozessoren, Verfahren, Systeme und Anweisungen für Fliesskommaaddition mit drei Quellenoperanden
DE112012007088B4 (de) Vorrichtung, verfahren und system mit einem befehl zum reduzieren von elementen in einem vektorregister mit einem schrittweisem zugriffsmuster
DE102014003706A1 (de) BEREICHSBEGRENZTE VEKTORSPEICHERZUGRIFFSINSTRUKTIONEN, PROZESSOREN, VERFAHREN und SYSTEME
DE102018124945A1 (de) Einrichtung und verfahren für komplexe multiplikation
DE102018129341A1 (de) Verfahren und Einrichtung für Mehrfachlade- und Mehrfachspeicher-Vektorbefehle
DE102018006008A1 (de) Vorrichtung und Verfahren zur Multiplikation einer komplexen Zahl mit der konjugierten
DE102014003644A1 (de) Prozessoren, Verfahren, Systeme und Befehle zum Mehrfachdatenelement-mit-Mehrfach-Datenelement-Vergleich
DE112016004351T5 (de) Prozessoren, Verfahren, System und Befehle zum Datenelement-Vergleich
DE102018125805A1 (de) Systeme, verfahren, und vorrichtungen für skalarproduktoperationen
DE112016004348T5 (de) Streuen-durch-indizes-zu-register- und datenelementumordnungsprozessoren, -verfahren, -systeme und -befehle
DE102018128939A1 (de) Vorrichtung und Verfahren zur Vektormultiplikation vorzeichenbehafteter Wörter, Rundung und Sättigung
DE112017000983T5 (de) System und Verfahren zum Ausführen eines Befehls zum Permutieren einer Maske
DE102018132200A1 (de) Vorrichtung und verfahren zum verarbeiten von fraktionalen umkehroperationen
DE102018129263A1 (de) Vorrichtung und verfahren zum multiplizieren, summieren und akkumulieren von sätzen von gepackten bytes
DE102018129298A1 (de) Vorrichtung und Verfahren zum Vektormultiplizieren und Akkumulieren von vorzeichenbehafteten Doppelwörtern
DE112017003347T5 (de) Systeme, Vorrichtungen und Verfahren für Strided-Ladevorgänge
DE102018131842A1 (de) Einrichtung und Verfahren zum Vektormultiplizieren und Akkumulieren von gepackten Wörtern

Legal Events

Date Code Title Description
R012 Request for examination validly filed