DE102010051476B4 - Addierbefehle, um drei Quelloperanden zu addieren - Google Patents

Addierbefehle, um drei Quelloperanden zu addieren Download PDF

Info

Publication number
DE102010051476B4
DE102010051476B4 DE201010051476 DE102010051476A DE102010051476B4 DE 102010051476 B4 DE102010051476 B4 DE 102010051476B4 DE 201010051476 DE201010051476 DE 201010051476 DE 102010051476 A DE102010051476 A DE 102010051476A DE 102010051476 B4 DE102010051476 B4 DE 102010051476B4
Authority
DE
Germany
Prior art keywords
flag
instruction
sum
flags
add
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.)
Expired - Fee Related
Application number
DE201010051476
Other languages
English (en)
Other versions
DE102010051476A1 (de
Inventor
Vinodh Gopal
James D. Guilford
Gilbert M. Wolrich
Wajdi K. Feghali
Erdinc Ozturk
Martin G. Dixon
Sean P. Mirkes
Bret L. Toll
Maxim Loktyukhin
Mark C. Davis
Alexandre Farcy
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 DE102010051476A1 publication Critical patent/DE102010051476A1/de
Application granted granted Critical
Publication of DE102010051476B4 publication Critical patent/DE102010051476B4/de
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

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/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/30094Condition code generation, e.g. Carry, Zero flag

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

Verfahren (100), umfassend: Empfangen (102) eines Addierbefehls, wobei der Addierbefehl einen ersten Quelloperanden, einen zweiten Quelloperanden und einen dritten Quelloperanden anzeigt; und Speichern (104) einer Summe, die unter Verwendung des ersten, zweiten und dritten Quelloperanden als ein Resultat des Addierbefehls berechnet wurde, wobei die Summe teilweise in einem Zieloperanden angezeigt durch den Addierbefehl und teilweise in einer Mehrzahl von Flags gespeichert wird, wobei teilweises Speichern (104) der Summe in der Mehrzahl von Flags das Speichern der Summe teilweise in einem Carry-Flag und teilweise in einem zweiten Flag umfasst, wobei das zweite Flag ein im Zweck neu bestimmtes architektonisches Flag umfasst, das in einer Befehlssatz-Architektur vor einer Einfügung des Addier-Befehls in die Befehlssatz-Architektur existierte, und wobei der Addier-Befehl das im Zweck neu bestimmte Architektur-Flag in einer anderen Weise verwendet als eine Mehrzahl anderer Befehle in der Befehlssatz-Architektur das im Zweck neu bestimmte Architektur-Flag verwenden.

Description

  • HINTERGRUND
  • Technisches Gebiet
  • Mehrere unterschiedliche Ausführungsformen beziehen sich auf Addierbefehle, Verfahren zur Ausführung der Anweisungen, Ausführungseinheiten, um die Anweisungen auszuführen oder Geräte, die solche Ausführungseinheiten aufnehmen. Insbesondere beziehen sich mehrere unterschiedliche Ausführungsformen auf Addierbefehle, um Dreiweg-Additionen mit Übertrag auszuführen, Verfahren, um die Anweisungen auszuführen, Ausführungseinheiten, um die Anweisungen auszuführen oder Geräte, die solche Ausführungseinheiten aufnehmen.
  • Information zum Stand der Technik
  • Addierbefehle sind im Allgemeinen in Befehlssatz-Architekturen (instruction set architectures; ISAs) enthalten. Die Addierbefehle ermöglichen Geräten, Daten zu addieren oder zu summieren.
  • Bekannte Addierbefehle umfassen den ADD-Addierbefehl, und den ADC-Addierbefehl mit Übertrag, die beide im Softwareentwicklerhandbuch Band 2A der Intel® 64- und IA-32-Architekturen beschrieben werden: Befehlssatz-Referenz, A-M, Bestellnummer: 253666-032US, September 2009, sowie in verschiedenen älteren Handbüchern.
  • Der ADD- und ADC-Befehl sind jeweils nur fähig zwei Operanden zu addieren. In bestimmten Fällen kann das Nachteile haben.
  • Aufgrund der Wichtigkeit, Daten schnell und effizient zu verarbeiten, waren neue und unterschiedliche Addierbefehle nützlich.
  • Seite 12 des Folien-Satzes von M. Shaaban: Computer Organization. EECC 550. Selected Chapter 5 „For More Practice” Exercices. 2006. URL: http://meseec.ce.rit.edu/eecc550-winter2005/550-chapter5-exercices.pdf offenbart eine Aufforderung die neue Instruktion „add3” zu dem „MIPS Multi Cycle Datapath of figure 5.28” zu ergänzen. Die Formulierung „Register $s0 gets the sum of $s1, $s2 and $s3” beschreibt, dass das Register $s0 die Summe aus $s1, $s2 und $s3 erhält.
  • Die Druckschrift von R. Subramanyan, Chapter 6: Operand Addressing and Instruction Representation. URL: http://www.eca.cs.purdue.edu/CS250/ir/lec/Chap6.pdf bildet das Skript einer Grundlagenvorlesung in der exemplarisch dokumentiert wird, welche Kompromisse der Fachmann bei der Wahl von Operanden in Kauf nehmen muss. So führen komplexe Formen von Operanden zu einer Vereinfachung der Programmierung und kleinere Befehle zu einer Beschränkung der Operanden, des Satzes der Operanden-Typen und der maximalen Größe der Operanden. Wenige Operanden ermöglichen es der Hardware schneller zu arbeiten, da ein schnelleres Abrufen der Operanden und Dekodieren ermöglicht wird.
  • Im Vorlesungsmanuskript von K. Gaj: Computer Arithmetic, Implementations in Hardware and Software (ECE 645), Lecture 6, George Mason University (USA), 2007. URL: http://teal.gmu.edu/courses/ECE645/viewgraphs_S07/lecture6_multiadd_2.pdf wird die mathematische Grundlage von ”Multioperand Addition” dargestellt. Daraus ergibt sich, dass für eine verlustfreie Addition von zwei Operanden entsprechend der Formel „# of bits of S = ... k + [log2 n]” ein zusätzliches Bit benötigt wird und für eine verlustfreie Darstellung einer Addition mit drei Operanden zwei zusätzliche Bits benötigt werden.
  • KURZE BESCHREIBUNG VON MEHREREN ANSICHTEN DER ZEICHNUNGEN
  • Am besten ist die Erfindung zu verstehen, wenn auf die folgende Beschreibung und die sie begleitenden Zeichnungen, die die Ausführungsformen der Erfindung veranschaulichen, Bezug genommen wird. In den Zeichnungen:
  • 1 ist ein Block-Flussdiagramm einer Ausführungsform eines Verfahrens zur Verarbeitung einer Ausführungsform eines Addierbefehls.
  • 2 ist ein Blockdiagramm einer beispielhaften Ausführungsform einer Befehlsverarbeitungsvorrichtung.
  • 3 ist ein Blockdiagramm, das eine Ausführungsform einer Kombination eines Registers und einer Vielzahl von Flags zeigt, die verwendet werden können, um die Summe einer Ausführungsform eines Addierbefehls zu speichern.
  • 4 zeigt verschiedene vorzeichenlose numerische Ganzzahl-Datentypen, die für verschiedene Ausführungsformen geeignet sind.
  • 5 ist ein Blockdiagramm einer Ausführungsform von einer Ausführungseinheit, die auf eine Ausführungsform eines Addierbefehls mit Flags anspricht.
  • 6 zeigt ein EFLAGS-Register, das eine beispielhafte Ausführungsform eines Flag-Registers mit einer Vielzahl von Flags repräsentiert.
  • 7 zeigt eine beispielhafte Ausführungsform eines geeigneten 32-Bit-Allzweckregistersatzes.
  • 8 zeigt eine beispielhafte Ausführungsform eines geeigneten 64-Bit-Allzweckregistersatzes.
  • 9 zeigt eine Beschreibung einer ADD3-Anweisung, die eine spezielle beispielhafte Ausführungsform eines Addierbefehls repräsentiert.
  • 10 zeigt eine Operation in Pseudocode einer ADD3-Anweisung, die eine spezielle beispielhafte Ausführungsform eines Addierbefehls repräsentiert.
  • 11 zeigt eine Beschreibung einer ADOC3 Anweisung, die eine spezielle beispielhafte Ausführungsform eines Addierbefehls mit Flags repräsentiert.
  • 12 zeigt eine Operation in Pseudocode einer ADOC3-Anweisung, die eine spezielle beispielhafte Ausführungsform eines Addierbefehls mit Flags repräsentiert.
  • 13 zeigt eine Ausführungsform von einer als vier vorzeichenlose Quadword-Ganzzahlen gespeicherten vorzeichenlosen 256-Bit-Ganzzahl, die jeweils in einem von vier entsprechenden Registern gespeichert sind.
  • 14 zeigt die Multiplikation einer vorzeichenlosen 256-Bit-Quadword-Ganzzahl mit einer vorzeichenlosen 64-Bit-Ganzzahl und die Summierung der zugehörigen partiellen Produkte mit ADD/ADC-Befehlen.
  • 15 zeigt die Multiplikation einer vorzeichenlosen 256-Bit-Quadword-Ganzzahl mit einer vorzeichenlosen 64-Bit-Ganzzahl und die Summierung der zugehörigen partiellen Produkte mit ADD3/ADOC3-Befehlen gemäß einer Ausführungsform der Erfindung.
  • 16 ist ein Blockdiagramm einer Ausführungsform eines Addierbefehls, die einen impliziten Quelloperanden aufweist, welcher derselbe wie ein impliziter Zieloperand eines ganzzahligen Multiplikationsbefehls ist.
  • 17 ist ein Blockdiagramm einer ersten beispielhaften Ausführungsform eines geeigneten Computersystems.
  • 18 ist ein Blockdiagramm einer zweiten beispielhaften Ausführungsform eines geeigneten Computersystems.
  • AUSFÜHRLICHE BESCHREIBUNG
  • In der folgenden Beschreibung werden zahlreiche spezifischen Details, wie beispielsweise Befehls-Implementierungsdetails, Datentypen, Registerarten, Registereinteilungen, Prozessorarten, Systemkonfigurationen und Ähnliches erläutert. Es ist jedoch offensichtlich, dass erfindungsgemäße Ausführungsformen auch ohne diese spezifischen Details realisierbar sind. In anderen Fällen wurden wohlbekannte Schaltungen, Strukturen und Techniken nicht im Detail gezeigt, um das Verständnis dieser Beschreibung nicht in den Hintergrund rücken zu lassen.
  • Ausführungsformen betreffen neue und nützliche Addierbefehle, die drei Operanden zusammenaddieren können. Weitere Ausführungsformen betreffen Ausführungseinheiten, um die Addierbefehle auszuführen. Noch weitere Ausführungsformen betreffen allgemeine Prozessoren, Spezialprozessoren, Controller oder andere Logikeinheiten oder Befehlsverarbeitungsvorrichtungen, die solche Ausführungseinheiten aufweisen oder fähig sind solche Befehle auszuführen. Weitere Ausführungsformen betreffen Addierbefehle gespeichert auf einer Disk, in einem Speicher oder einem anderen körperlichen maschinenlesbaren Medium.
  • 1 ist ein Block-Flussdiagramm einer Ausführungsform eines Verfahrens 100 zur Verarbeitung einer Ausführungsform eines Addierbefehls. Bei verschiedenen Ausführungsformen kann das Verfahren durch einen allgemeinen Prozessor, einen Spezialprozessor (z. B. einen Grafikprozessor oder einen Digitalsignal-Prozessor), einen Hardwarebeschleuniger (z. B. einen kryptografischen Beschleuniger), oder eine andere Art von Logikeinheit oder Befehlsverarbeitungsvorrichtung ausgeführt werden.
  • Ein Addierbefehl kann beim Prozessor oder einer anderen Befehlsverarbeitungsvorrichtung bei Block 102 empfangen werden. Der Addierbefehl kann einen ersten Quelloperanden, einen zweiten Quelloperanden und einen dritten Quelloperanden anzeigen.
  • Dann kann eine Summe des ersten, zweiten und dritten Quelloperanden als ein Resultat des Addierbefehls bei Block 104 gespeichert werden. Bei einer oder mehreren Ausführungsformen kann die Summe teilweise in einem Zieloperanden, der durch den Addierbefehl angezeigt wird, und teilweise in einer Vielzahl von Flags gespeichert werden. Bei einer oder mehreren Ausführungsformen kann die Summe, die gespeichert wird, eine Summe des ersten, zweiten und dritten Quelloperanden umfassen, die zu einer arithmetischen Kombination der Flags addiert wird.
  • 2 ist ein Blockdiagramm einer beispielhaften Ausführungsform einer Befehlsverarbeitungsvorrichtung 210. Bei einer oder mehreren Ausführungsformen kann die Befehlsverarbeitungsvorrichtung ein allgemeiner Prozessor sein. Der Prozessor kann irgendeiner von mehreren Complex Instruction Set Computing-(CISC)-Prozessoren, Reduced Instruction Set Computing-(RISC)-Prozessoren, Very Long Instruction Word-(VLIW)-Prozessoren, mehreren Hybriden davon oder eine vollständig andere Art von Prozessor sein. Bei einer oder mehreren Ausführungsformen kann der Prozessor ein Allzweckprozessor von der Art sein, die von der Intel Corporation, Santa Clara, Kalifornien, gefertigt wird, obwohl das nicht erforderlich ist. Spezifische Beispiele der bei Intel Corporation verfügbaren Allzweckprozessoren umfassen, sind aber nicht beschränkt auf, Intel® CoreTM i7 processor Extreme Edition, Intel® CoreTM i7 processor, Intel® CoreTM i5 processor, Intel® CoreTM2 Extreme processor, Intel® CoreTM2 Quad processor, Intel® CoreTM2 Duo processor, Intel® Pentium® processor, and Intel® Celeron® processor.
  • Alternativ kann die Befehlsverarbeitungsvorrichtung ein Spezialprozessor sein. Repräsentative Beispiele für geeignete Spezialprozessoren, umfassen, sind aber nicht beschränkt auf, Netzwerkprozessoren, Kommunikationsprozessoren, kryptografische Prozessoren, Grafikprozessoren, Koprozessoren, eingebettete Prozessoren und Digitalsignal-Prozessoren (DSPs), um nur einige Beispiele zu nennen. Diese Prozessoren können ebenfalls auf CISC, RISC, VLIW, Hybriden davon oder vollständig auf anderen Arten von Prozessoren beruhen.
  • Bei noch weiteren Ausführungsformen kann die Befehlsverarbeitungsvorrichtung ein Controller (z. B. ein Mikrokontroller) oder eine andere Art von logischer Schaltung sein, die Anweisungen verarbeiten kann.
  • Unter erneuter Bezugnahme auf 2 kann die Befehlsverarbeitungsvorrichtung während der Verwendung eine Ausführungsform eines Addierbefehls 212 empfangen. Beispielsweise kann der Addierbefehl von einem Speicher oder von der Software empfangen werden. Bei einer oder mehreren Ausführungsformen kann der Addierbefehl einen ersten Quelloperanden, einen zweiten Quelloperanden und einen dritten Quelloperanden anzeigen. Der Addierbefehl kann anzeigen, dass die drei Quelloperanden summiert werden sollen und die Summe in einem durch den Addierbefehl angezeigten Zieloperanden zu speichern ist. Der Addierbefehl kann implizit die Quelle und den Zieloperanden anzeigen und/oder explizit angeben. Zum Beispiel kann der Addierbefehl ein oder mehrere dedizierte technische Gebiete oder Sätze von Bits aufweisen, um explizit ein Register, Speicher oder einen anderen Speicherort anzugeben, der ein oder mehreren Operanden entspricht.
  • Der Addierbefehl kann einen Maschinenbefehl oder ein Steuersignal repräsentieren, welche durch die Befehlsverarbeitungsvorrichtung erkannt werden. Die Befehlsverarbeitungsvorrichtung kann spezifische oder bestimmte Schaltung oder andere Logik aufweisen (z. B. Software kombiniert mit Hardware und/oder Firmware), die betriebsfähig ist, eine Additionsoperation von drei Quelloperanden als Antwort auf den Addierbefehl und/oder wie durch diesen angegeben auszuführen und eine Summe im Ziel als Antwort auf oder infolge des Addierbefehls zu speichern.
  • Die gezeigte Ausführungsform der Befehlsverarbeitungsvorrichtung umfasst einen Befehlsdecoder 214. Der Decoder kann den Addierbefehl 212 empfangen und decodieren. Der Decoder kann ein oder mehrere Mikrooperationen, Mikrocode-Eintrittspunkte, Mikrobefehle, andere Anweisungen oder andere Steuersignale, die den Originaladdierbefehl widerspiegeln oder von ihm abgeleitet sind, generieren und ausgeben. Der Decoder kann unter Verwendung mehrerer unterschiedlicher Mechanismen implementiert sein. Beispiele von geeigneten Mechanismen umfassen, sind aber nicht beschränkt auf, Mikrocode Read Only Memories (ROM), Nachschlagtabellen, Hardwareimplementierungen, programmierbare Logik-Arrays (PLAs) u. ä.
  • Der Decoder ist keine erforderliche Komponente der Vorrichtung. Bei einer oder mehreren anderen Ausführungsformen kann die Vorrichtung stattdessen einen Anweisungsemulator, einen Anweisungsübersetzer, einen Anweisungsumwandler, einen Anweisungsinterpreter oder andere Anweisungsumwandlungslogik aufweisen. Mehrere unterschiedliche Arten von Anweisungsemulatoren, Anweisungsumwandlern, Anweisungsübersetzern u. ä. sind in der Technik bekannt. Die Anweisungsumwandlungslogik kann den Addierbefehl empfangen, emulieren, übersetzen, umwandeln, interpretieren oder anderweitig den Addierbefehl konvertieren und ein oder mehrere Anweisungen oder Steuersignale, die dem Originaladdierbefehl entsprechen, ausgeben. Die Anweisungsumwandlungslogik kann in Software, Hardware, Firmware oder einer Kombination davon implementiert sein. In einigen Fällen kann sich einige oder die gesamte Anweisungsumwandlungslogik außerhalb der Chiplage getrennt vom Rest der Befehlsverarbeitungsvorrichtung, wie beispielsweise in einer separaten Chiplage oder in einem Systemspeicher befinden. In einigen Fällen kann die Befehlsverarbeitungsvorrichtung sowohl den Decoder als auch die Anweisungsumwandlungslogik aufweisen.
  • Unter erneuter Bezugnahme auf 2 umfasst die Befehlsverarbeitungsvorrichtung eine Ausführungseinheit 216. Beispielsweise kann die Ausführungseinheit eine Arithmetikeinheit, ein Rechenwerk oder Ähnliches umfassen. Die Ausführungseinheit umfasst eine Additionseinheit 218, die eine Addition, wie beispielsweise eine vorzeichenbehaftete und vorzeichenlose Ganzzahladdition ausführen kann.
  • In der gezeigten Ausführungsform ist die Ausführungseinheit mit einem Ausgang des Decoders gekoppelt oder anderweitig in Kommunikation damit. Der Begriff „gekoppelt” kann bedeuten, dass zwei oder mehr Elemente in direktem elektrischem Kontakt sind oder in direkter elektrischer Verbindung stehen. Jedoch kann „gekoppelt” auch bedeuten, dass zwei oder mehr Elemente nicht in direktem Kontakt miteinander sind, trotzdem aber miteinander arbeiten oder interagieren (z. B. durch eine dazwischen befindliche Komponente). Als ein Beispiel können der Decoder und die Ausführungseinheit miteinander durch einen dazwischen befindlichen optionalen Puffer und/oder durch eine oder mehrere andere in der Technik bekannte Komponenten gekoppelt sein, die möglicherweise zwischen einen Decoder und eine Ausführungseinheit gekoppelt sind. Infolge des Decoders, der die Addierbefehle decodiert, kann die Ausführungseinheit ein oder mehrere Mikrooperationen, Mikrocode-Eintrittspunkte, Mikrobefehle, andere Anweisungen oder andere Steuersignale empfangen, welche den Addierbefehl widerspiegeln oder von ihm abgeleitet sind. Alternativ kann die Ausführungseinheit Anweisungen oder Steuersignale von der oben genannten Anweisungsumwandlungslogik empfangen und ausführen.
  • Infolge des Addierbefehls kann der Decoder oder ein anderer Teil der Vorrichtung auf die drei durch den Addierbefehl angezeigten Quelloperanden zugreifen. Die Quelloperanden können in Registern, in Speicher oder anderen Speicherorten gespeichert sein. Bei der gezeigten Ausführungsform werden ein erster Quelloperand (SRC1), ein zweiter Quelloperand (SRC2) und ein dritter Quelloperand (SRC3) zusammen in Registern eines Registersatzes 220 gespeichert, obwohl das nicht erforderlich ist.
  • Der Registersatz 220 kann zusammen mit potenziell anderen Registern (z. B. Steuerregister, Statusregister, Flagregister, usw.) Teil einer Registerdatei sein. Jedes Register kann ein Speicherort oder Gerät sein, das verwendet werden kann, um Daten zu speichern. Mehrere unterschiedliche Arten von Registern sind geeignet, solange sie wie hier beschrieben zum Speichern und Bereitstellen von Daten fähig sind. Die Register können mit einem neuen Namen versehen sein oder nicht. Beispiele von geeigneten Registern, umfassen sind aber nicht beschränkt auf dedizierte physische Register, dynamisch zugewiesene physische Register, die Registerumbenennung verwenden, Kombinationen von dedizierten und dynamisch zugewiesenen physischen Registern usw. Der Registersatz kann sich oftmals physisch auf der Chiplage mit der Ausführungseinheit befinden. Die Register können von außerhalb des Prozessors oder von einer Perspektive des Programmierers sichtbar sein. Zum Beispiel können Anweisungen Operanden, die in den Registern gespeichert sind, angeben.
  • Die Ausführungseinheit kann Schaltung oder andere Ausführungslogik (z. B. mehrere Kombinationen von Software und/oder Hardware und/oder Firmware) umfassen, die betriebsfähig ist, den Addierbefehl auszuführen (z. B. ein oder mehrere Anweisungen oder andere Steuersignale abgeleitet vom Addierbefehl). Bei einer oder mehreren Ausführungsformen kann die Ausführungseinheit infolge des Addierbefehls 212 betriebsfähig sein, einen ersten Quelloperanden (SRC1), einen zweiten Quelloperanden (SRC2) und einen dritten Quelloperanden (SRC3) anzuzeigen, um eine Summe des ersten, zweiten und dritten Quelloperanden infolge des Addierbefehls teilweise in einem Zieloperanden (DEST) angezeigt durch den Addierbefehl zu speichern. Wie gezeigt, kann der Zieloperand (DEST) ein Register sein. Alternativ kann der Zieloperand eine Stelle im Speicher oder einem anderen Speicherort sein. In der Darstellung entspricht der Zieloperand einem separaten Register von für die Quelloperanden verwendeten Register. Alternativ kann ein für einen Quelloperanden verwendetes Register ebenfalls für den Zieloperanden verwendet werden. Zum Beispiel kann der Zieloperand den Quelloperanden überschreiben.
  • Bei einer oder mehreren Ausführungsformen kann die Summe zusätzlich dazu, teilweise im Zieloperanden (DEST) gespeichert zu sein, ebenfalls teilweise in einer Vielzahl von Flags, wie beispielsweise einem ersten Flag 222 und einem zweiten Flag 224 gespeichert sein. Wie gezeigt können die Flags in einem Register 226, wie beispielsweise einem Statusregister, einem Flag-Register oder einem Bedingungscoderegister gespeichert sein, obwohl das nicht erforderlich ist.
  • Prozessoren und mehrere andere Arten von Logikeinheiten haben häufig Flags. Zum Beispiel können die Flags jeweils ein oder mehrere Bits umfassen und jedes Bit kann einen binären Wert von Eins oder Null haben. Diese unterschiedlichen Werte der Flags können zugeordnete oder vorausgesetzte Bedeutungen für den Prozessor oder eine andere Logikeinheit haben. Die Flags werden für mehrere unterschiedliche Zwecke verwendet. In einigen Fällen werden die Flags verwendet, um einen Status, Zustand, eine Bedingung oder ein Ergebnis von Operationen aufzuzeichnen.
  • Bei einer oder mehreren Ausführungsformen kann das erste Flag 222 ein Carry-Flag sein und das Carry-Flag 222 kann verwendet werden, um ein Teil der Summe zu speichern. Ein Carry-Flag ist eine bekannte Art des architektonischen Flags oder Statusflags, die gewöhnlich bei Prozessoren und anderen Logikeinheiten angetroffen werden. Das Carry-Flag kann verwendet werden, um anzuzeigen, ob es einen Überlauf bei einer arithmetischen Operation gibt oder nicht. Zum Beispiel kann das Carry-Flag ein einzelnes Bit sein, das einen ersten Wert haben kann (z. B. ein binärer Wert 1), wenn es einen Überlauf während einer vorherigen Operation gibt, wie beispielsweise ein Übertrag oder negativer Übertrag aus dem höchstwertigen Bit des Ergebnisses in einer arithmetischen Operation, oder das Carry-Flag kann andernfalls einen zweiten Wert haben (z. B. einen binären Wert 0), wenn es keinen solchen Überlauf gibt. Das Carry-Flag kann verwendet werden, um anzuzeigen, dass eine arithmetische Operation ein Ergebnis generiert hat, das in der Größenordnung größer ist, als es die Anzahl an Bits in einem gegebenen Register oder Speicherort repräsentieren kann. Das Carry-Flag kann in arithmetischen Operationen, wie beispielsweise Addition und Subtraktion verwendet werden.
  • Um weiter zu zeigen, wie ein Carry-Flag bei der Addition verwendet werden kann, betrachten wir ein Beispiel, in dem die Zahlen 255 und 255 unter Verwendung vorzeichenloser 8-Bit-Ganzzahlen zusammenaddiert werden. Der Wert von 255 plus 255 ist 510. Die Zahl 510 wird in binär als „1 1111 1110” dargestellt. Es ist jedoch zu beachten, dass „1 1111 1110” 9 Bits statt nur 8 Bits hat. Mit anderen Worten erfordert das binäre Darstellen der Zahl 510 9 Bits statt nur 8 Bits. Die acht niedrigstwertigen Bits „1111 1110” sind die Binärdarstellung für die Zahl 254. Da die Summe von 255 plus 255 einen „Übertrag” aus dem höchstwertigen achten Bit in das neunte Bit generiert, kann das Carry-Flag auf einen Wert 1 gesetzt werden. Das Setzen des Carry-Flags auf einen Wert 1 kann der Maschine anzeigen, dass das Ergebnis in einer vorzeichenlosen 8-Bit-Interpretation nicht richtig ist, und/oder es kann anzeigen, dass das korrekte Ergebnis die 9-Bit-Verknüpfung des 1-Bit-Carry-Flags mit dem 8-Bit-Ergebnis ist. Das Carry-Flag kann (z. B. als ein Übertrag in) für eine nachfolgende arithmetische Operation, wie beispielsweise Addition oder und Subtraktion verwendet werden.
  • Bei einer oder mehreren Ausführungsformen kann das erste Flag 222 das Carry-Flag sein und das zweite Flag 224 kann ein architektonisches Flag sein, das ungefähr analog zur Art verwendet werden kann, wie das Carry-Flag 222 verwendet wird. Das architektonische Flag 224 kann verwendet werden, um anzuzeigen, ob es einen Überlauf bei arithmetischen Operationen gibt oder nicht. Zum Beispiel kann das architektonische Flag 224 ein einzelnes Bit sein, das einen ersten Wert haben kann (z. B. einen binären Wert 1), wenn es einen Überlauf aus dem Carry-Flag 222 während einer vorherigen Operation gibt, oder das architektonische Flag 224 kann andernfalls einen zweiten Wert haben (z. B. ein binärer Wert 0), wenn es keinen solchen Überlauf aus dem Carry-Flag 222 gibt. Das architektonische Flag 224 kann verwendet werden, um anzuzeigen, dass eine arithmetische Operation ein Ergebnis generiert hat, das in der Größenordnung größer ist als es die Zahl von Bits in einem gegebenen Register oder Speicherort plus dem ersten Flag (z. B. das Carry-Flag) repräsentieren kann. Das erste Flag (z. B. das Carry-Flag) 222 und das zweite oder zusätzliche architektonische Flag 224 können jeweils mindestens ein Zusatzbit bereitstellen, das verwendet werden kann, um die Summe des Addierbefehls zu speichern.
  • Bei einer oder mehreren Ausführungsformen kann das zweite oder zusätzliche architektonische Flag 224 ein Überlauf-Flag sein. Ein Überlauf-Flag ist eine weitere bekannte Art des architektonischen Flags oder Statusflags, die gewöhnlich in Prozessoren und anderen Logikeinheiten angetroffen werden. Jedoch werden Überlauf-Flags nicht konventionell in der Art verwendet, wie das zweite oder zusätzliche architektonische Flag 224 wie oben beschrieben verwendet wird. Im Fall von ADD- und ADC-Anweisungen wird das Überlauf-Flag momentan definiert, um einen Überlauf für vorzeichenbehaftete ganze Zahlen zu erkennen. Jedoch wird das Überlauf-Flag nicht in Kombination mit einem anderen Flag konventionell verwendet, um den Teil einer Summe zu speichern. Außerdem wird das Überlauf-Flag in Kombination mit einem anderen Flag nicht konventionell verwendet, um vielfache Überträge bereitzustellen. Außerdem wird das Überlauf-Flag nicht konventionell als eine Erweiterung einer Breite von vorzeichenlosen Operanden verwendet.
  • Demgemäß ist die Verwendung des Überlauf-Flags, wie oben beschrieben, eine Zweckneubestimmung des Carry-Flags. Alternativ kann bei einer oder mehreren anderen Ausführungsformen ein anderes bestehendes architektonisches Flag im Zweck neu bestimmt werden. Bei einer bestehenden Architektur kann eine solche Zweckneubestimmung eines bestehenden architektonischen Flags dazu tendieren, eine geringere Veränderung für die gesamte Architektur und Dokumentation darzustellen, als wenn man ein vollständig neues oder dediziertes Flag einführt. Alternativ können bei einer oder mehreren Ausführungsformen, ein oder mehrere neue oder dedizierte Flags für das erste und/oder zweite Flag eingeführt werden, die für die hier beschriebenen Zwecke zu verwenden sind.
  • Um das Verschleiern der Beschreibung zu vermeiden, ist eine relativ einfache Befehlsverarbeitungsvorrichtung gezeigt und beschrieben worden. Es ist jedoch selbstverständlich, dass andere Ausführungsformen eine Vielzahl von Ausführungseinheiten haben können. Zum Beispiel kann die Vorrichtung vielfache unterschiedliche Arten von Ausführungseinheiten, wie beispielsweise Arithmetikeinheiten, Rechenwerke (ALUs), Ganzzahl-Einheiten usw. umfassen. Mindestens eine von diesen Einheiten kann auf eine Ausführungsform des Addierbefehls wie hier offenbart ansprechen. Noch weitere Ausführungsformen können Mehrkerne, logische Prozessoren oder Ausführungsengines aufweisen. Eine Ausführungseinheit, die betriebsfähig ist, einen Addierbefehl auszuführen, kann wie hier offenbart innerhalb in mindestens einem, mindestens zwei, den meisten oder allen Kernen, logischen Prozessoren oder Ausführungsengines enthalten sein.
  • Die Befehlsverarbeitungsvorrichtung kann ebenfalls optional ein oder mehrere andere bekannte Komponenten umfassen. Zum Beispiel können andere Ausführungsformen optional Befehlsabruflogik, Vordekodierlogik, Dispositionslogik, Neuordnungspuffer, Verzweigungsvorhersagelogik, Rückordnungslogik, Registerumbenennungslogik und Ähnliches oder eine Kombination davon umfassen. Diese Komponenten können konventionell oder mit geringen Anpassungen implementiert werden, die für fachkundige Personen aufgrund der vorliegenden Offenbarung offensichtlich wären. Eine weitere Beschreibung dieser Komponenten wird nicht benötigt, um die Ausführungsformen hierin zu verstehen, obwohl eine weitere Beschreibung, wenn gewünscht, im öffentlichen Schrifttum ohne Weiteres verfügbar ist. Es gibt buchstäblich zahlreiche unterschiedliche Kombinationen und Konfigurationen solcher in der Technik bekannten Komponenten. Der Umfang der Erfindung ist auf keine solche bekannte Kombination oder Konfiguration begrenzt. Ausführungsformen können entweder mit oder ohne solche zusätzlichen Komponenten implementiert sein.
  • 3 ist ein Blockdiagramm, das eine Ausführungsform einer Kombination eines Registers 330 und einer Vielzahl von Flags 322, 324 zeigt, die verwendet werden können, um die Summe einer Ausführungsform eines Addierbefehls zu speichern. Ein Register hat Bits [N:0]. Das Register kann verwendet werden, um ein Teil der Summe zu speichern. Einige repräsentative Bits der Summe sind im Register gespeichert gezeigt.
  • Ein erstes Flag 322 hat ein Zusatzbit [N + 1]. Ähnlich hat ein zweites Flag 324 ein Zusatzbit [N + 2]. Die zwei Bits der Flags stellen zwei Zusatzbits bereit, um einen anderen Teil der Summe zu speichern. Die zwei Bits der Flags [N + 2:N + 1] können ausgewertet oder von der Maschine als eine Verknüpfung von Bits des Registers [N:0] verstanden werden, das eine vollständige Summe bereitstellt. Das Bit [N + 2] speichert ein höchstwertiges Bit (MSB) der Summe. Das Bit [N + 1] speichert ein nächsthöchstwertiges Bit (MSB) der Summe.
  • Als ein konkretes Beispiel kann das Register Bits [31:0] haben, um einen Teil der Summe zu speichern, wobei das erste Flag 322 ein Zusatzbit [32] und das zweite Flag 324 ebenfalls ein Zusatzbit [33] aufweisen kann, die gemeinsam verwendet werden können, um einen Teil der Summe zu speichern. Als ein anderes konkretes Beispiel kann das Register Bits [63:0] haben, um einen Teil der Summe zu speichern, und die ersten und zweiten Flags können zwei Zusatzbits [65:64] haben, um einen Teil der Summe zu speichern.
  • Vorteilhafterweise können diese durch die ersten und zweiten Flags bereitgestellten Zusatzbits einer größeren Summe ermöglichen, gespeichert zu werden. Wenn man drei Zahlen addiert, kann in einigen Fällen ein Zusatzbit des Übertrags benötigt werden. Wenn man drei Quelloperanden abhängig von den Werten der Operanden addiert, können diese Zusatzbits verwendet und/oder benötigt werden, um die resultierende Summe zu speichern. Betrachten wir ein Beispiel für Operanden in 64-Bit-Registern. Da der größte vorzeichenlose Wert der 3 Register (264 – 1) sein kann, kann die resultierende Zwischensumme höchstens 3·264 sein, wenn OF:CF = 1:1. Dieser Wert ist kleiner als (266 – 1). Demgemäß sind zwei Zusatzbits, die durch Flags zusätzlich zu den durch das Register bereitgestellten 64 Bits bereitgestellt werden, ausreichend, um die höchstwertigen Bits einer Summe von irgendwelchen in drei entsprechenden 64-Bit-Registern gespeicherten drei Werten darzustellen. Der größte Wert, der durch den Addierbefehl, welcher die drei Quelloperanden summiert, generiert wird, verursacht keinen Überlauf. Ähnlich sind die zwei Zusatzbits, die durch Flags zusätzlich zu einem 32-Bit-Register bereitgestellt werden, ausreichend, um die höchstwertigen Bits einer Summe von irgendwelchen in drei entsprechenden 32-Bit-Registern gespeicherten drei Werten darzustellen.
  • Bei einer oder mehreren Ausführungsformen kann der Addierbefehl ganze Zahlen addieren. Bei einer oder mehreren Ausführungsformen können die ganzen Zahlen vorzeichenlose Ganzzahlen sein. Alternativ können bei einer oder mehreren Ausführungsformen die ganzen Zahlen vorzeichenbehaftete ganze Zahlen sein. Um bestimmte Konzepte zu zeigen, tendiert die vorliegende Offenbarung dazu, die Multiplikation von vorzeichenlosen Ganzzahlen zu betonen, obwohl der Umfang der Erfindung nicht derart begrenzt ist.
  • 4 zeigt verschiedene vorzeichenlose numerische Ganzzahl-Datentypen, die für verschiedene Ausführungsformen geeignet sind. Eine erste Art ist eine „vorzeichenlose Wort-Ganzzahl”. Die vorzeichenlose Wort-Ganzzahl hat 16 Bits. Eine zweite Art ist eine vorzeichenlose Doppelwort-Ganzzahl. Die vorzeichenlose Doppelwort-Ganzzahl hat 32 Bits. Eine dritte Art ist eine vorzeichenlose Quadword-Ganzzahl. Die vorzeichenlose Quadword-Ganzzahl hat 64 Bits. Dies sind nur einige veranschaulichenden Beispiele. Andere Größen von vorzeichenlosen Ganzzahlen, wie beispielsweise Byte oder Arten breiter als 64-Bit (z. B. 128-Bit-Arten) sind ebenfalls geeignet. Des Weiteren sind analoge Arten der vorzeichenbehafteten Ganzzahl ebenfalls geeignet.
  • Ein Addierbefehl kann gemäß einer oder mehreren Ausführungsformen ein Addierbefehl mit Flags sein, der betriebsfähig ist, eine Ausführungseinheit und/oder einen Prozessor (oder eine andere Befehlsverarbeitungsvorrichtung) zu veranlassen, eine Summe zu generieren, die teilweise basierend auf einer Vielzahl von Flags berechnet wird. Bei einer oder mehreren Ausführungsformen kann die Summe, die teilweise basierend auf der Mehrheit von Flagsberechnet wird, eine Summe von drei Quelloperanden, die zu einer arithmetischen Kombination der Mehrheit von Flags addiert sind, umfassen.
  • 5 ist ein Blockdiagramm einer Ausführungsform von einer Ausführungseinheit 516, die auf eine Ausführungsform eines Addierbefehls mit Flags 513 antwortet. Der Addierbefehl mit Flags zeigt einen ersten Quelloperanden (SRC1), einen zweiten Quelloperanden (SRC2), einen dritten Quelloperand (SRC3), ein erstes Flag (F1) als einen Quelloperanden und ein zweites Flag (F2) als einen Quelloperanden an. Die Anweisung kann die ersten und zweiten Flags als implizite oder vorausgesetzte Quelloperanden anzeigen.
  • Als Antwort auf den Addierbefehl mit Flags kann die Ausführungseinheit SRC1, SRC2, SRC3, F1 und F2 empfangen. Bei einer oder mehreren Ausführungsformen kann die Ausführungseinheit infolge des Addierbefehls mit Flags betriebsfähig sein, eine Summe von SRC1, SRC2 und SRC3 zu speichern, die teilweise basierend auf den Flags F1 und F2 in einem Zieloperanden (DEST) angezeigt durch den Addierbefehl mit Flags berechnet ist. Wie bei einer oder mehreren Ausführungsformen gezeigt, kann die Summe berechnet werden als: DEST = SRC1 + SRC2 + SCR3 + F1 + 2·F2
  • In dieser Summe repräsentiert der Ausdruck „F1 + 2·F2” eine arithmetische Kombination der Flags F1 und F2. Das zweite Flag (F2) hat einen Multiplikator von zwei.
  • 6 zeigt ein EFLAGS-Register 626, das eine beispielhafte Ausführungsform eines Flag-Registers mit einer Vielzahl von Flags repräsentiert. Das EFLAGS-Register ist ein 32-Bit-Register, das eine Gruppe von Statusflags, ein Steuerungsflag und eine Gruppe von Systemflags umfasst.
  • Die Statusflags umfassen ein Carry-Flag (CF, Bit 0), ein Paritätsflag (PF, Bit 2), ein Hilfsübertragsflag (AF, Bit 4), ein Nullflag (ZF, Bit 6), ein Vorzeichenflag (SF, Bit 7) und ein Überlauf-Flag (OF, Bit 11). Wie zuvor bei einer oder mehreren Ausführungsformen erwähnt, können das Carry-Flag (CF, Bit 0) und das Überlauf-Flag (OF, Bit 11) als die ersten und zweiten Flags 222, 224 verbunden mit den hier offenbarten Addierbefehlen verwendet werden. CF und OF werden aus diesem Grund betont, obwohl die Verwendung von diesen bestimmten Flags nicht erforderlich ist.
  • Die Systemflags umfassen ein Trap-Flag (TF, Bit 8), ein Unterbrechungsfreigabe-Flag (IF, Bit 9), ein I/O privilegierter Level (IOPL, Bits 12–13), eine verschachtelte Task (NT, Bit 14), ein Zusammenfassungsflag (RF, Bit 16), ein Virtual-8086-Modus (VM, Bit 17), eine Anordnungsprüfung (AC, Bit 18), ein virtuelles Interruptflag (VIF, Bit 19), ein virtueller Interrupt ausstehend (VIP, Bit 20) und ein ID-Flag (ID, Bit 21). Das Steuerungsflag umfasst ein Richtungsflag (DF, Bit 10). Die Bits 22–31 von EFLAGS sind reserviert.
  • Das EFLAGS-Register ist der Nachfolger eines früheren 16-Bit-FLAG-Registers. Zusätzlich wurde das EFLAGS-Register bei 64-Bit-Modus-Prozessoren durch ein RFLAGS-Register ersetzt und auf 64-Bit erweitert. Die unteren 32 Bits von RFLAGS sind dieselben wie EFLAGS.
  • Das EFLAGS-Register ist eine bestimmte beispielhafte Ausführungsform eines Registers mit geeigneten Flags, um ein oder mehrere Ausführungsformen zu implementieren, obwohl dieses bestimmte Register und diese bestimmten Flags sicherlich nicht erforderlich sind. Eine zusätzliche Beschreibung der EFLAGS/RFLAGS-Register und des Carry-Flags ist, wenn gewünscht, im Softwareentwicklerhandbuch Band 1 der Intel® 64- und IA-32-Architekturen verfügbar: Grundarchitektur, Bestellnummer: 253665-032US, September 2009.
  • Bei einer oder mehreren Ausführungsformen kann ein Addierbefehl ein oder mehrere Quelloperanden und/oder ein oder mehrere Zieloperanden in einem Allzweckregister-Satz anzeigen. Bei einer oder mehreren Ausführungsformen können diese Allzweckregister verwendet werden, um ganze Zahlen zu speichern.
  • 7 zeigt eine beispielhafte Ausführungsform eines geeigneten 32-Bit-Allzweckregistersatzes 740. Der 32-Bit-Registersatz umfasst acht 32-Bit- oder Doppelwort-Allzweckregister. Diese Register sind als EAX, EBX, ECX, EDX, ESI, EDI, EBP und ESP bezeichnet. Diese 32-Bit-Register sind ebenfalls in 16-Bit- und 8-Bit-Modi adressierbar. Die unteren 16 Bits der Register EAX, EBX, ECX, und EDX sind entsprechend als AX, BX, CX und DX bezeichnet. Beispielsweise können vorzeichenlose Wort-Ganzzahlen mit 16 Bits entsprechend in den Registern BX, CX und DX gespeichert werden. Vorzeichenlose Doppelwort-Ganzzahlen mit 32 Bits können in den Registern EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP, R8D–R15D gespeichert werden.
  • 8 zeigt eine beispielhafte Ausführungsform eines geeigneten 64-Bit-Allzweckregistersatzes 850. Der 64-Bit-Registersatz umfasst sechzehn 64-Bit- oder Quadword-Allzweckregister. Diese Register sind als RAX, RBX, RCX, RDX, RSI, RDI, RBP, RSP, R8, R9, R10, R11, R12, R13, R14 und R15 bezeichnet. Diese Register sind im 32-Bit-Modus bei 32-Bit-Operanden betriebsfähig und im 64-Bit-Modus bei 64-Bit-Operanden betriebsfähig. Die unteren 32 Bits der Register RAX, RBX, RCX, RDX, RSI, RDI, RBP und RSP entsprechen den Registern EAX, EBX, ECX, EDX, ESI, EDI, EBP und ESP. Die unteren 32 Bits der Register R8–R15 sind ebenfalls im 32-Bit-Modus adressierbar und sind als R8D–R15D bezeichnet. Beispielsweise können vorzeichenlose Quadword-Ganzzahlen mit 64 Bits in den Registern RAX, RBX, RCX, RDX, RSI, RDI, RBP, RSP oder R8–R15 gespeichert werden.
  • Diese Allzweckregister sind in mehreren x86-Architektur-Prozessoren verfügbar und geeignet, ein oder mehrere Ausführungsformen zu implementieren, obwohl diese bestimmten Register sicherlich nicht erforderlich sind. Eine zusätzliche Beschreibung der Allzweckregister ist, wenn gewünscht, im Softwareentwicklerhandbuch Band 1 der Intel® 64- und IA-32-Architekturen verfügbar: Grundarchitektur, Bestellnummer: 253665-032US, September 2009.
  • Ein Addierbefehl ist gemäß einer bestimmten beispielhaften Ausführungsform ein ADD3-Befehl zur Addition einer vorzeichenlosen Ganzzahl von drei Operanden Die ADD3-Anweisung kann standardisierten 3-Byte x86 Befehlscode aufweisen, der optional ein REX-Präfix haben kann, um mehr Register und einen breiteren Datenraum zu adressieren.
  • Der ADD3-Befehl ist ein Drei-Operanden-Befehl, wobei zwei der Operanden explizite Operanden sind und der andere Operand ein impliziter Operand ist. Der Befehlsoperand, der den ADD3-Befehl codiert, ist in Tabelle 1 gezeigt. Tabelle 1. ADD3-Operandenkodierung
    Operand1 Operand2 Operand3 Operand4
    ModRM: reg (R, W) ModRM: r/m (R) Implizierte EAX/RAX (R) n/z
  • Operand1 ist explizit angegeben und kann in den 32-Bit-Allzweckregistern (Reg) für den 32-Bit-Modus-Befehl oder in den 64-Bit-Allzweckregistern für den 64-Bit-Modus-Befehl sein. Lesen (R) und Schreiben (W) sind für Operand1 zugelassen.
  • Operand2 ist explizit angegeben und kann in den 32-Bit-Allzweckregistern (r) oder in Speicher (m) für den 32-Bit-Modus-Befehl oder in den 64-Bit-Allzweckregistern (r) oder in Speicher (m) für den 64-Bit-Modus-Befehl sein. Lesen (R) ist für Operand2 zugelassen.
  • Operand3 ist implizit als das EAX-32-Bit-Allzweckregister für den 32-Bit-Modus-Befehl oder als das RAX-64-Bit-Allzweckregister für den 64-Bit-Modus-Befehl identifiziert. Der Operand3 wird als ein implizierter oder impliziter Quelloperand verwendet. Die EAX/RAX-Register sind auch ein implizit identifizierter Zieloperand für die MULX-Anweisung, die hier an anderer Stelle beschrieben wird. Lesen (R) ist für Operand3 zugelassen. Operand4 ist für die ADD3-Anweisung nicht verfügbar.
  • 9 zeigt eine Beschreibung einer ADD3-Anweisung, die eine spezielle beispielhafte Ausführungsform eines Addierbefehls repräsentiert. Eine 16-Bit-Operand-Größe ist gegenwärtig für die ADD3-Anweisung nicht codierbar. ADD3 definiert das Carry-Flag (CF) und Überlauf-Flag (OF) anders als der ADD-Befehl im Softwareentwickler-Handbuch, Band-2A der Intel 64- und IA-32- Architekturen. CF, OF, SF, ZF und PF werden basierend auf dem Ergebnis gesetzt. Das SF-Flag wird gesetzt, wenn das höchstwertige Bit (z. B. Bit [63] im 64-Bit-Modus oder Bit [31] im 32-Bit-Modus) des Ergebnisses gesetzt wird. Das AF-Flag wird auf Null gesetzt.
  • 10 zeigt eine Operation eines ADD3-Befehls im Pseudocode, der eine bestimmte beispielhafte Ausführungsform eines Addierbefehls darstellt. SRC bezeichnet einen Quelloperanden, DEST bezeichnet einen Zieloperanden, EAX und RAX bezeichnen implizite Allzweckregister, TEMP bezeichnet ein vorübergehendes oder Zwischenergebnis, CF bezeichnet das Carry-Flag und OF bezeichnet das Überlauf-Flag.
  • Es ist zu beachten, dass Bits [33:32] im 32-Bit-Modus respektive in OF und CF und dass Bits [65:64] im 64-Bit-Modus respektive in OF und CF gespeichert werden.
  • Ein Addierbefehl mit Flags, gemäß einer anderen bestimmten beispielhaften Ausführungsform, ist ein ADOC3-Addition der vorzeichenlosen Ganzzahl von drei Operanden mit OF/CF-Flag-Befehl. Die ADOC3-Anweisung kann standardisierten 3-Byte x86 Befehlscode aufweisen, der optional ein REX-Präfix haben kann, um mehr Register und einen breiteren Datenraum zu adressieren.
  • Der ADOC3-Befehl ist ein Drei-Operanden-Befehl, wobei zwei der Operanden explizite Operanden sind und der andere Operand ein impliziter Operand ist. Der Befehlsoperand, der für den ADOC3-Befehl codiert, ist in Tabelle 2 gezeigt. Tabelle 2. ADOC3-Operandenkodierung
    Operand1 Operand2 Operand3 Operand4
    ModRM: reg (R, W) ModRM: r/m (R) Implizierte EAX/RAX (R) n/z
  • Operand1 ist explizit angegeben und kann in den 32-Bit-Allzweckregistern (Reg) für den 32-Bit-Modus-Befehl oder in den 64-Bit-Allzweckregistern für den 64-Bit-Modus-Befehl sein. Lesen (R) und Schreiben (W) sind für Operand1 zugelassen.
  • Operand2 ist explizit angegeben und kann in den 32-Bit-Allzweckregistern (r) oder in Speicher (m) für den 32-Bit-Modus-Befehl oder in den 64-Bit-Allzweckregistern (r) oder in Speicher (m) für den 64-Bit-Modus-Befehl sein. Lesen (R) ist für Operand2 zugelassen.
  • Operand3 ist implizit als das EAX-32-Bit-Allzweckregister für den 32-Bit-Modus-Befehl oder als das RAX-64-Bit-Allzweckregister für den 64-Bit-Modus-Befehl identifiziert. Der Operand3 wird als ein implizierter oder impliziter Quelloperand verwendet. Die EAX/RAX-Register sind auch ein implizit identifizierter Zieloperand für die MULX-Anweisung, die hier an anderer Stelle beschrieben wird. Lesen (R) ist für Operand3 zugelassen. Operand4 ist für den ADOC3 Befehl nicht verfügbar.
  • 11 zeigt eine Beschreibung einer ADOC3 Anweisung, die eine spezielle beispielhafte Ausführungsform eines Addierbefehls mit Flags repräsentiert. Eine 16-Bit-Operand-Größe ist gegenwärtig für den ADOC3-Befehl nicht codierbar. Die Eingabe-OF- und -CF-Werte haben keine Beschränkungen; wenn diese Flags beide 1 sind, dann sind die Ergebnisse des Befehls gut definiert, da die größten generierten Werte keine Überläufe verursachen. ADOC3 definiert das Carry-Flag (CF) und Überlauf-Flag (OF) anders als der ADD-Befehl im Softwareentwickler-Handbuch, Band-2A der Intel 64- und IA-32-Architekturen. CF, OF, SF, ZF und PF werden basierend auf dem Ergebnis gesetzt. Das SF-Flag wird gesetzt, wenn das höchstwertige Bit (z. B. Bit [63] im 64-Bit-Modus oder Bit [31] im 32-Bit-Modus) des Ergebnisses gesetzt wird. Das AF-Flag wird auf Null gesetzt.
  • 12 zeigt eine Operation in Pseudocode einer ADOC3-Anweisung, die eine spezielle beispielhafte Ausführungsform eines Addierbefehls mit Flags repräsentiert. SRC bezeichnet einen Quelloperanden, DEST bezeichnet einen Zieloperanden, EAX und RAX bezeichnen implizite Allzweckregister, TEMP bezeichnet ein vorübergehendes oder Zwischenergebnis, CF bezeichnet das Carry-Flag und OF bezeichnet das Überlauf-Flag. Es ist zu beachten, dass Bits [33:32] im 32-Bit-Modus respektive in OF und CF und dass Bits [65:64] im 64-Bit-Modus respektive in OF und CF gespeichert werden. Es ist ebenfalls zu beachten, dass die Summe auf der arithmetischen Kombination „(2·OF) + CF” beruht.
  • Alternative Ausführungsformen der ADD3- und ADOC3-Befehle sind ebenfalls beabsichtigt. Zum Beispiel können bei einer oder mehreren Ausführungsformen der ADD3- und/oder ADOC3-Befehl optional eine VEX-Codierung verwenden. Die VEX-Codierung kann den Befehlen ermöglichen, explizit drei Operanden statt nur zwei anzugeben. Zum Beispiel kann bei einer oder mehreren alternativen Ausführungsformen ADD3 in der VEX-Codierung dargestellt werden als: reg=reg+r/m+vvvv. Als ein weiteres Beispiel kann bei einer oder mehreren alternativen Ausführungsformen ADOC3 in der VEX-Codierung dargestellt werden als: reg=reg+r/m+vvvv+OC. Eine weitere Beschreibung von Befehlscodes, Codierung, REX und VEX-Präfixen ist, wenn gewünscht, im Softwareentwicklerhandbuch Band 2A der Intel® 64- und IA-32-Architekturen verfügbar: Befehlssatz-Referenz, A–M, Bestellnummer: 253666-032US, September 2009.
  • Die hier offenbarten Addierbefehle sind Allzweckbefehle und können in einer Vielzahl von unterschiedlichen Arten von Algorithmen verwendet werden. Die Addierbefehle sind nicht darauf begrenzt, in irgendwelchen bekannten Algorithmen verwendet zu werden. Eher wird erwartet, dass die Addierbefehle in einer Vielzahl von unterschiedlichen Arten von Algorithmen verwendet werden.
  • Es wird gegenwärtig angenommen, dass die hier offenbarten Addierbefehle helfen werden, die Geschwindigkeit und/oder Effizienz der Multiplikation von großen Zahlen außerordentlich zu verbessern. Die Multiplikation von großen Zahlen wird in mehreren unterschiedlichen Arten von Algorithmen verwendet. Zum Beispiel ist die große ganzzahlige Multiplikation in der modularen Potenzierung, Kryptografie, Verschlüsselung mit öffentlichem Schlüssel, Transport Layer Security (TLS), Secure Sockets Layer (SSL), Intemetprotokoll-Sicherheit (IPsec), Intemetprotokoll Version 6 (IPv6), sowie bei mehreren anderen nicht kryptografischen Algorithmen allgemein verbreitet. Hinsichtlich der Kryptografie hat es in den letzten Jahren einen bedeutenden Anstieg in der Verwendung von kryptografischen Algorithmen, zum Beispiel aufgrund von zunehmend mehr Internet- und anderen Netzwerktransaktionen, gegeben, die kryptografisch geschützt sind. Als Resultat können dedizierte kryptografische Beschleuniger, eingebettete kryptografische Prozessoren, Server, die zahlreiche Verbindungen unterstützen und Ähnliches solche kryptografischen Algorithmen sehr häufig ausführen. Daher kann die Leistung von diesen Geräten durch die Geschwindigkeit und/oder Effizienz, mit der sie imstande sind, eine große ganzzahlige Multiplikation auszuführen, wesentlich beeinträchtigt werden. Obwohl vielleicht zu einem geringeren Ausmaß führen Desktop-Computer, Laptops und andere Geräte ebenfalls große ganzzahlige Multiplikationen aus, die mit solchen kryptografischen Algorithmen verbunden sind. Hochleistungsrechner führen ebenfalls Multiplikationen mit großen Zahlen aus, die mit der Arithmetik von großen Zahlen verbunden sind. Diese und anderen Arten von elektronischen Bauelementen können ebenfalls die Multiplikation mit großen Zahlen für mehrere andere nicht kryptografische Algorithmen oder Verwendungen ausführen. Demgemäß waren neue und unterschiedliche Befehle, die helfen, die Geschwindigkeit und/oder Effizienz der Multiplikation mit großen Zahlen zu erhöhen, nützlich.
  • Bei der großen ganzzahligen Multiplikation kann mindestens eine Ganzzahl, die größer ist als eine Größe eines Registers oder eines anderen Speicherorts, der verwendet wird, um die Ganzzahl zu speichern, multipliziert werden. Zum Beispiel kann eine 512-Bit-, 256-bit- oder 128-Bit-Ganzzahl in 64-Bit-, 32-Bit- oder kleineren Registern gespeichert werden. Als Resultat könnte die 512-Bit- 256-bit- oder 128-Bit-Ganzzahl nicht in ein einzelnes 64-Bit- oder 32-Bit-Register passen. Eher können mehre unterschiedliche 64-Bit- oder 32-Bit-Teile der 512-Bit-, 256-bit- oder 128-Bit-Ganzzahl in unterschiedlichen 64-bit- oder 32-Bit-Registern oder anderen Speicherorten gespeichert werden.
  • Um diese weiter darzustellen, zeigt 13 eine Ausführungsform einer vorzeichenlosen 256-Bit-Ganzzahl gespeichert als vier vorzeichenlose Quadword-Ganzzahlen A1–A4 von denen jede in einem von vier entsprechenden Registern gespeichert ist. Insbesondere wird eine erste vorzeichenlose Quadword-Ganzzahl (A1) in einem ersten Register 1130-1 gespeichert, eine zweite vorzeichenlose Quadword-Ganzzahl (A2) wird in einem zweiten Register 1130-2 gespeichert, eine dritte vorzeichenlose Quadword-Ganzzahl (A3) wird in einem dritten Register 1130-3 gespeichert und eine vierte vorzeichenlose Quadword-Ganzzahl (A4) wird in einem vierten Register 1130-4 gespeichert. Die vier vorzeichenlosen Quadword-Ganzzahlen (A1–A4) stellen gemeinsam die vorzeichenlose 256-Bit-Ganzzahl dar. Die vorzeichenlose 256-bit-Ganzzahl, die auf solche Art und Weise gespeichert ist, kann als ein Mehrwort-Vektor von vorzeichenlosen Ganzzahlen bezeichnet werden.
  • Das Ausführen der Multiplikation an einer großen Ganzzahl, die zu groß ist, um in ein einzelnes Register zu passen, kann bestimmte Herausforderungen aufstellen. Zum Beispiel kann mehr als ein Multiplikationsbefehl verwendet werden. Jeder Multiplikationsbefehl kann verursachen, dass eine Multiplikation an nur einem Teil der großen Ganzzahl ausgeführt wird, um ein partielles Produkt zu bilden. Das partielle Produkt kann ein vollständig berechnetes Produkt von nur einem Teil von mindestens einer Zahl darstellen. Jedes dieser partiellen Produkte kann dann addiert oder anderweitig kombiniert werden, um das gesamte Produkt der ursprünglichen großen Ganzzahl zu erhalten. Das Addieren der partiellen Produkte kann die Ausbreitung der Addition mit Übertrag einschließen.
  • Ein geeigneter Multiplikationsbefehl ist MUL-vorzeichenloser Multiplikationsbefehl. Der MUL Befehl wird im Softwareentwicklerhandbuch Band 2A der Intel® 64- und IA-32-Architekturen beschrieben: Befehlssatz-Referenz, A–M, Bestellnummer: 253666-032US, September 2009, sowie in verschiedenen älteren Handbüchern. Jedoch löscht oder setzt der MUL-Befehl das Carry-Flag (CF) und Überlauf-Flag (OF) abhängig von den höherwertigen Bits des Produkts. Da der MUL-Befehl das Carry-Flag ändern kann, sollte der MUL-Befehl nicht generell innerhalb einer Serie von Addierbefehlen (z. B. ADD/ADC) platziert werden. Außerdem müssten die partiellen Produktergebnisse der MUL-Befehle generell gespeichert und die Addierbefehle (z. B. ADD/ADC) dann nachfolgend an den partiellen Produktergebnissen ausgeführt werden. Abhängig von der Anzahl an Registern, die verfügbar sind, kann das Speichern aller dieser partiellen Produktergebnisse der MUL-Befehle bevor sie addiert werden in einigen Fällen dazu tendieren, alle verfügbaren Register aufzubrauchen, was in einem Speicherfüllen/-überfüllen und/oder in Zugriffen auf den Systemspeicher resultieren kann.
  • Eine Alternative zum MUL-Befehl ist MULX-Befehl zum vorzeichenlosen Multiplizieren ohne Beeinträchtigung von Flags, offenbart in der US-Patentanmeldung Serien-Nr._________, eingereicht am _________, mit dem Titel „MULTIPLICATION INSTRUCTION FOR WHICH EXECUTION COMPLETES WITHOUT WRITING A CARRY FLAG”, welche dem Zessionar der vorliegenden Patentanmeldung zugeordnet ist. Der MULX-Befehl führt eine vorzeichenlose Multiplikation eines ersten Quelloperanden und eines zweiten Quelloperanden aus und speichert ein Ergebnis in einem Zieloperanden ohne arithmetische Flags zu lesen oder schreiben. Das befähigt möglicherweise leistungsstarkes Programmieren, wo Software Operationen des Addierens mit Übertrag und Multiplikationen verschachteln kann. Das RDX/EDX-Register wird als eine implizite Quelle verwendet. Das RAX/EDX-Register wird als ein implizites Ziel der niedrigen 64/32 Bits des Ergebnisses verwendet. Die hohen 64/32 Bits des Ergebnisses werden in einen explizit verschlüsselten Zielregister-Operanden geschrieben.
  • Ein relativ einfaches Vergleichsbeispiel der großen ganzzahligen Multiplikation ausgeführt mit den bekannten ADD/ADC-Befehlen und den speziellen ADD3/ADOC3-Ausführungsform-Befehlen, die hier offenbart werden, unterstützt dabei, die Vorteile zu demonstrieren, drei Quelloperanden mit einem Addierbefehl addieren zu können.
  • 14 zeigt die Multiplikation einer vorzeichenlosen 256-Bit-Quadword-Ganzzahl (A1–A4) mit einer vorzeichenlosen 64-Bit-Ganzzahl (B1) und die Summierung der zugehörigen partiellen Produkte mit ADD/ADC-Befehlen. Ein Beispiel einer vorzeichenlosen 256-Bit-Quadword-Ganzzahl (A1–A4) wurde gezeigt und in Verbindung mit 13 oben beschrieben. Für jede Spalte mit Ausnahme der niedrigst-/höchstwertigen gibt es einen High-Teil eines Produkts und einen Low-Teil eines nachfolgenden Produkts, die zu einer Partialsumme addiert werden sollen. Ein Nachteil bei den ADD/ADC-Befehlen ist, dass generell zwei Serien von Addierbefehlen ausgeführt werden müssen. Eine anfängliche Serie von Addierbefehlen wird von rechts nach links durch die Pfeile mit durchgezogenen Linien gezeigt und eine nachfolgende Serie von Addierbefehlen wird von rechts nach links durch die Pfeile mit gestrichelten Linien gezeigt. Wie gezeigt, werden neun Befehle verwendet. Viele der Additionen sind Additionen mit Übertrag, was zu Serialisierung führen kann und möglicherweise dazu tendiert, den Streaming-Fluss von Anwendungen zu begrenzen. Des Weiteren kann das die Menge an temporären Daten (z. B. Teilsummen), die aufrechterhalten werden, erhöhen. In einigen Situationen kann das dazu tendieren, die Anzahl an verfügbaren Registern zu überschreiten, die zu Speicherzugriffen führen.
  • Im Gegensatz dazu zeigt 15 die Multiplikation einer vorzeichenlosen 256-Bit-Quadword-Ganzzahl (A1–A4) mit einer vorzeichenlosen 64-Bit-Ganzzahl (B1) und die Summierung der verbundenen partiellen Produkte mit ADD3/ADOC3-Befehlen gemäß einer oder mehreren Ausführungsformen. Jeder von diesen Befehlen kann drei Ganzzahlen addieren und es gibt zwei Flags, die verfügbar sind, um einen Teil der Summe zu speichern. Als Resultat ist es möglich, die Additionen in einem Arbeitsgang anstatt in zwei abzuschließen. Vorteilhafterweise kann das helfen, die Serialisierung des Prozesses zu reduzieren. Des Weiteren werden nur fünf Befehle statt neun verwendet. Vorteilhafterweise kann das dabei helfen, die Anzahl von Befehlen zu reduzieren, die decodiert, gepuffert, ausgeführt, usw. werden müssen. Des Weiteren kann die Anzahl an vorübergehenden Ergebnissen, die aufrechterhalten werden müssen, reduziert werden, was helfen kann, bestimmte Zugriffe auf Speicher zu vermeiden. Jedes Produkt Ai·B1 kann durch einen MUL- oder MULX-Befehl generiert werden.
  • 16 ist ein Blockdiagramm einer Ausführungsform eines Addierbefehls. Bei dieser Ausführungsform hat der Addierbefehl einen impliziten Quelloperanden (z. B. ein Speicherort), welcher derselbe wie ein impliziter Zieloperand (z. B. ein Speicherort) eines ganzzahligen Multiplikationsbefehls ist. Beispielsweise hatten die oben beschriebenen ADD3- und ADOC3-Befehle jeweils einen impliziten Quelloperand EAX im 32-Bit-Modus und RAX im 64-Bit-Modus. Auch nach der obigen Beschreibung des MULX-Befehls, ist daran zu erinnern, dass das RAX/EDX-Register als ein implizites Ziel der niedrigen 64/32 Bits des Ergebnisses des MULX-Befehls verwendet wird. Alternativ kann ein anderes implizites Register oder ein anderer Speicherort verwendet werden.
  • Bei einigen Algorithmen kann das helfen, einen MOV-Befehl oder eine andere Datenbewegungsoperation zu vermeiden. Diese zusätzlichen MOV-Befehle tendieren dazu, die Anzahl an Befehlen zu erhöhen, die decodiert werden müssen, sowie die Anzahl von Operationen, die potenziell gepuffert und ausgeführt werden müssen. Das Eliminieren von Befehlen, wie beispielsweise Transportbefehlen, kann helfen, die Anzahl an Befehlen zu reduzieren, die decodiert/konvertiert, möglicherweise gepuffert und ausgeführt werden müssen. Zusätzlich, kann die Verminderung der Anzahl von Befehlen helfen, wenn ein decodierter Stream-Puffer (DSB) oder ähnliches verwendet werden soll, um einer Schleife von decodierten Befehlen zu ermöglichen, innerhalb des DSB zu passen, was weiter helfen kann, die Verarbeitungsgeschwindigkeit zu erhöhen, indem geschwindigkeitsbegrenzende Decodierungsoperationen vermieden werden. Vorteilhafterweise kann das helfen, die Geschwindigkeit und/oder Effizienz der großen ganzzahligen Multiplikation und bestimmten anderen Algorithmen zu erhöhen, in denen der Addierbefehl eine Addition am Produkt des Multiplikationsbefehls ausführt.
  • Andere Ausführungsformen sind nicht auf das Addieren von nur drei Quelloperanden oder das Verwenden von nur zwei Flags begrenzt. Bei einer oder mehreren alternativen Ausführungsformen können vier oder mehr Quelloperanden optional summiert und drei oder mehr Flags optional verwendet werden.
  • Eine oder mehrere Ausführungsformen umfassen einen gefertigten Artikel, der ein körperliches maschinenzugängliches und/oder maschinenlesbares Medium umfasst, das einen darauf gespeicherten Addierbefehl aufweist, der, wenn er durch eine Maschine (z. B. eine Ausführungseinheit) ausgeführt wird, bewirkt, dass eine Additionsoperation an drei Operanden und/oder Ganzzahlen ausgeführt wird. Das körperliche Medium kann ein oder mehrere feste Materialien umfassen. Das Medium kann einen Mechanismus umfassen, der zum Beispiel Information in einer Form speichert, die durch die Maschine zugänglich ist. Zum Beispiel kann das Medium optional beschreibbare Medien, wie beispielsweise eine Diskette, ein optisches Speichermedium, eine optische Disk, eine CD-ROM, eine Magnetdiskette, eine magnetooptische Disk, ein Read Only Memory (ROM), eine programmierbare ROM (PROM), eine Erasable-and-Programmable ROM (EPROM), eine Electrically-Erasable-and-Programmable ROM (EEPROM), einen Direktzugriffsspeicher (RAM), einen Static-RAM (SRAM), einen Dynamic-RAM (DRAM), einen Flash-Speicher und Kombinationen davon umfassen.
  • Geeignete Maschinen umfassen, sind aber nicht beschränkt auf, Ausführungseinheiten, Allzweckprozessoren, Spezialprozessoren (z. B. Grafikprozessoren und kryptografische Prozessoren), kryptografische Beschleuniger, Netzwerkkommunikationsprozessoren, Computersysteme, Netzwerkgeräte, Modems, Personal Digital Assistants (PDAs), Handys und eine Vielzahl von anderen elektronischen Geräten mit ein oder mehreren Ausführungseinheiten, um nur einige Beispiele zu nennen.
  • Noch weitere Ausführungsformen betreffen ein Computersystem, ein eingebettetes System oder ein anderes elektronisches Gerät mit einer Ausführungseinheit und/oder ein Verfahren wie hier offenbart ausführt.
  • 17 ist ein Blockdiagramm einer ersten beispielhaften Ausführungsform eines geeigneten Computersystems 1701.
  • Das Computersystem umfasst einen Prozessor 1700. Der Prozessor umfasst mindestens eine Ausführungseinheit 1706, die fähig ist, mindestens einen Addierbefehl 1702 auszuführen.
  • Der Prozessor ist mit einem Chipsatz 1781 über einen Bus (z. B. einen Frontside-Bus) oder eine andere Kopplungsstruktur 1780 gekoppelt. Die Kopplungsstruktur kann verwendet werden, um Datensignale zwischen dem Prozessor und den anderen Komponenten im System über den Chipsatz zu übertragen.
  • Der Chipsatz umfasst einen Systemlogikbaustein bekannt als ein Memory-Controller-Hub (MCH) 1782. Der MCH ist mit dem Frontside-Bus oder einer anderen Kopplungsstruktur 1780 gekoppelt.
  • Ein Speicher 1786 ist mit dem MCH gekoppelt. Bei verschiedenen Ausführungsformen kann der Speicher einen Direktzugriffsspeicher (RAM) umfassen. DRAM ist ein Beispiel einer Art von RAM verwendet in einigen, aber nicht allen Computersystemen. Wie gezeigt, kann der Speicher verwendet werden, um Befehle 1787, wie beispielsweise ein oder mehrere Addierbefehle und Daten 1788 zu speichern.
  • Eine Komponentenkopplungsstruktur 1785 ist auch mit dem MCH gekoppelt. Bei einer oder mehreren Ausführungsformen kann die Komponentenkopplungsstruktur ein oder mehrere Peripheral Component Interconnect Express-(PCIe)-Schnittstellen umfassen. Die Komponentenkopplungsstruktur kann anderen Komponenten ermöglichen, an den Rest des Systems durch den Chipsatz gekoppelt zu werden. Ein Beispiel solcher Komponenten ist ein Grafikchip oder eine andere Grafikbaugruppe, obwohl dies optional und nicht erforderlich ist.
  • Der Chipsatz umfasst auch einen Eingabe/Ausgabe-(I/O)-Controller-Hub (ICH) 1784. Der ICH ist mit dem MCH durch den Hub-Schnittstellenbus oder die andere Kopplungsstruktur 1783 gekoppelt. Bei einer oder mehreren Ausführungsformen können der Bus oder die andere Kopplungsstruktur 1783 eine Direct Media Interface (DMI) umfassen.
  • Ein Datenspeicher 1789 ist mit dem ICH gekoppelt. Bei verschiedenen Ausführungsformen kann der Datenspeicher ein Festplattenlaufwerk, ein Diskettenlaufwerk, ein CD-ROM-Laufwerk, ein Flash-Speicher-Gerät oder Ähnliches oder eine Kombination davon umfassen.
  • Eine zweite Komponentenkopplungsstruktur 1790 ist auch mit dem ICH gekoppelt. Bei einer oder mehreren Ausführungsformen kann die Komponentenkopplungsstruktur ein oder mehrere Peripheral Component Interconnect Express-(PCIe)-Schnittstellen umfassen. Die zweite Komponentenkopplungsstruktur kann mehreren Arten von Komponenten ermöglichen, mit dem Rest des Systems durch den Chipsatz gekoppelt zu werden.
  • Ein serieller Erweiterungsanschluss 1791 ist auch mit dem ICH gekoppelt. Bei einer oder mehreren Ausführungsformen kann der serielle Erweiterungsanschluss ein oder mehrere USB-Ports umfassen. Der serielle Erweiterungsanschluss kann mehreren anderen Arten von Eingabe-/Ausgabegeräten ermöglichen, mit dem Rest des Systems durch den Chipsatz gekoppelt zu werden.
  • Einige erläuternde Beispiele anderer Komponenten, die optional mit dem ICH gekoppelt sein können, umfassen, sind aber nicht beschränkt auf, einen Audiocontroller, einen drahtlosen Transceiver und ein Benutzereingabegerät (z. B. eine Tastatur, Maus).
  • Ein Netzwerk-Controller ist auch mit dem ICH gekoppelt. Der Netzwerk-Controller kann dem System ermöglichen, mit einem Netzwerk gekoppelt zu werden.
  • Bei einer oder mehreren Ausführungsformen kann das Computersystem eine Version des WINDOWSTM Betriebssystems, verfügbar von Microsoft Corporation aus Redmond, Washington ausführen. Alternativ können andere Betriebssysteme, wie beispielsweise UNIX, Linux oder eingebettete Systeme verwendet werden.
  • Dies ist nur ein bestimmtes Beispiel eines geeigneten Computersystems. Zum Beispiel kann in einer oder mehreren alternativen Ausführungsformen der Prozessor mehrere Kerne aufweisen. Als ein weiteres Beispiel kann in einer oder mehreren alternativen Ausführungsformen MCH 1782 physisch auf der Chiplage mit dem Prozessor 1700 integriert sein und der Prozessor kann direkt mit einem Speicher 1786 durch den integrierten MCH gekoppelt sein. Als ein weiteres Beispiel können in einer oder mehreren alternativen Ausführungsformen andere Komponenten auf der Chiplage mit dem Prozessor integriert sein, wie beispielsweise um ein System-on-Chip-(SoC)-Design bereitzustellen. Als noch ein weiteres Beispiel kann in einer oder mehreren alternativen Ausführungsformen das Computersystem mehrere Prozessoren aufweisen.
  • 18 ist ein Blockdiagramm einer zweiten beispielhaften Ausführungsform eines geeigneten Computersystems 1801. Die zweite beispielhafte Ausführungsform weist bestimmte Ähnlichkeiten mit dem ersten Beispiel-Computersystem auf, das unmittelbar darüber beschrieben ist. Zur Klarheit tendiert die Erörterung dazu, die Differenzen zu betonen, ohne alle Ähnlichkeiten zu wiederholen.
  • Ähnlich wie bei der ersten beispielhaften Ausführungsform, die oben beschrieben ist, umfasst das Computersystem einen Prozessor 1800 und einen Chipsatz 1881 mit einem I/O-Controller-Hub (ICH) 1884. Auf ähnliche Weise wie bei der ersten beispielhaften Ausführungsform umfasst das Computersystem eine erste Komponentenkopplungsstruktur 1885 gekoppelt mit dem Chipsatz, eine zweite Komponentenkopplungsstruktur 1890 gekoppelt mit dem ICH, ein serieller Erweiterungsanschluss 1891 gekoppelt mit dem ICH, ein Netzwerk-Controller 1892 gekoppelt mit dem ICH und einen Datenspeicher 1889 gekoppelt mit dem ICH.
  • Bei dieser zweiten Ausführungsform ist der Prozessor 1800 ein Mehrkernprozessor. Der Mehrkernprozessor umfasst die Prozessorkerne 1894-1 bis 1894-M, wobei M eine ganze Zahl gleich oder größer als zwei (z. B. zwei, vier, sieben oder mehr) sein kann. Jeder Kern kann mindestens eine Ausführungseinheit umfassen, die fähig ist, mindestens eine Ausführungsform eines Befehls wie hier offenbart auszuführen. Wie gezeigt umfasst der Kern-1 einen Cache 1895 (z. B. einen L1-Cache). Jeder der anderen Kerne kann auf ähnliche Weise einen dedizierten Cache umfassen. Die Prozessorkerne können auf einem einzelnen integrierten Schaltungs-(IC)-Chip implementiert sein.
  • Der Prozessor umfasst auch mindestens einen gemeinsam benutzten Cache 1896. Der Cache kann Daten speichern (z. B. Befehle), die von einer oder mehreren Komponenten des Prozessors, wie beispielsweise den Kernen verwendet werden. Zum Beispiel kann der gemeinsam benutzte Cache lokal Daten, die in einem Speicher 1886 für den schnellen Zugriff durch Komponenten des Prozessors gespeichert sind, zwischenspeichern. Bei einer oder mehreren Ausführungsformen kann der gemeinsam benutzte Cache ein oder mehrere Mid-Level-Caches, wie beispielsweise Level 2 (L2), Level 3 (L3), Level 4 (L4) oder andere Cache-Levels, ein Last Level Cache (LLC) und/oder Kombinationen davon umfassen.
  • Die Prozessorkerne und der gemeinsam benutzte Cache sind jeweils mit einem Bus oder einer anderen Kopplungsstruktur 1897 gekoppelt. Der Bus oder die andere Kopplungsstruktur kann die Kerne und den gemeinsam benutzten Cache koppeln und Kommunikation ermöglichen.
  • Der Prozessor umfasst auch einen Memory-Controller-Hub (MCH) 1882. Wie gezeigt in dieser beispielhaften Ausführungsform ist der MCH im Prozessor 1800 integriert. Zum Beispiel kann sich der MCH mit den Prozessorkernen auf der Chiplage befinden. Der Prozessor ist mit dem Speicher 1886 durch den MCH gekoppelt. Bei einer oder mehreren Ausführungsformen kann der Speicher DRAM umfassen, obwohl das nicht erforderlich ist.
  • Der Chipsatz umfasst einen I/O-Hub 1893. Der I/O-Hub ist mit dem Prozessor durch einen Bus (z. B. eine QuickPath-Kopplungsstruktur (QPI)) oder eine andere Kopplungsstruktur 1880 gekoppelt. Die erste Komponentenkopplungsstruktur 1885 ist mit dem I/O-Hub 1893 gekoppelt.
  • Dies ist nur ein bestimmtes Beispiel eines geeigneten Systems. Andere Systemdesigns und Konfigurationen, die in der Technik für Laptops, Desktops, tragbare PCs, Personal Digital Assistants, technische Arbeitsplätze, Server, Netzwerkgeräte, Netzwerkhubs, Switches, eingebettete Prozessoren, Digitalsignal-Prozessoren (DSPs), Grafikbaugruppen, Videospiel-Geräte, Set-Top-Boxen, Mikrocontroller, Handys, tragbare Mediaplayer, tragbare Geräte und mehrere andere elektronische Geräte bekannt sind, sind auch geeignet. Im Allgemeinen ist eine riesige Vielzahl von Systemen oder elektronischen Geräten generell geeignet, die einen Prozessor und/oder eine Ausführungseinheit, wie sie hier offenbart wird, aufnehmen können.
  • In der obigen Beschreibung sind zum Zweck der Erklärung zahlreiche spezifische Details erläutert, um ein gründliches Verständnis der erfindungsgemäßen Ausführungsformen zu ermöglichen. Für fachkundige Personen ist es jedoch offensichtlich, dass ein oder mehrere andere Ausführungsformen ohne einige dieser spezifischen Details realisierbar sind. Die speziellen oben beschriebenen Ausführungsformen sind nicht bereitgestellt, um die Erfindung zu begrenzen, sondern um Ausführungsformen der Erfindung zu veranschaulichen. Der Umfang der Erfindung wird nicht durch die oben aufgeführten spezifischen Beispiele eingegrenzt, sondern nur durch die nachfolgenden Ansprüche. In anderen Fällen sind bekannte Schaltungen, Strukturen, Geräte und Operationen in Blockdiagramm-Form oder ohne Einzelheiten gezeigt worden, um das Verschleiern des Verständnisses der Beschreibung zu vermeiden. Wo es als geeignet angesehen wurde, sind Bezugszeichen oder Endteile von Bezugszeichen unter den Figuren wiederholt worden, um entsprechende oder analoge Elemente anzuzeigen, die optional ähnliche Merkmale haben können.
  • Bestimmte Operationen können durch Hardware-Komponenten ausgeführt werden oder sie können in maschinenausführbaren Befehlen verkörpert sein, die verwendet werden können, um eine Schaltung oder Hardware zu bewirken (oder zumindest darin zu resultieren), die mit den Befehlen programmiert ist, welche die Operationen ausführen. Die Schaltung kann einen Allzweck- oder Spezialprozessor oder eine logische Schaltung umfassen, um nur einige Beispiele zu nennen. Optional können die Operationen auch durch eine Kombination aus Hardware und Software ausgeführt werden. Eine Ausführungseinheit und/oder ein Prozessor können spezifische oder spezielle Schaltung oder eine andere gegenüber einem Maschinenbefehl ansprechende Logik umfassen oder ein oder mehrere Steuersignale, die vom Maschinenbefehl abgeleitet sind, um einen durch einen Befehl angegebenen Ergebnis-Operanden zu speichern.
  • Jeder Verweis auf „eine Ausführungsform” oder „eine oder mehrere Ausführungsformen” in dieser Schrift bedeutet beispielsweise, dass ein bestimmtes Merkmal in der Umsetzung der Erfindung enthalten sein kann. Auf ähnliche Weise sollte es offensichtlich sein, dass in der Beschreibung verschiedene Merkmale manchmal bei einer einzelnen Ausführungsform, Figur oder Beschreibung davon zum Zweck der Vereinfachung der Offenbarung und zum Erreichen eines besseren Verständnisses verschiedener erfinderischer Aspekte in Gruppen zusammengefasst sind. Diese Methode der Offenbarung soll jedoch nicht als eine Absicht ausgelegt werden, dass die Erfindung mehr Merkmale erfordert als diejenigen, die in jedem Anspruch ausdrücklich zitiert sind. Wie es die folgenden Ansprüche widerspiegeln, kann die Erfindung vielmehr auch aus weniger als allen Merkmalen einer einzelnen offenbarten Ausführungsform bestehen.
  • Somit sind die Ansprüche, die der detaillierten Beschreibung folgen, hiermit ausdrücklich in diese detaillierte Beschreibung aufgenommen, wobei jeder Anspruch selbstständig als separate Ausführungsform dieser Erfindung steht.

Claims (24)

  1. Verfahren (100), umfassend: Empfangen (102) eines Addierbefehls, wobei der Addierbefehl einen ersten Quelloperanden, einen zweiten Quelloperanden und einen dritten Quelloperanden anzeigt; und Speichern (104) einer Summe, die unter Verwendung des ersten, zweiten und dritten Quelloperanden als ein Resultat des Addierbefehls berechnet wurde, wobei die Summe teilweise in einem Zieloperanden angezeigt durch den Addierbefehl und teilweise in einer Mehrzahl von Flags gespeichert wird, wobei teilweises Speichern (104) der Summe in der Mehrzahl von Flags das Speichern der Summe teilweise in einem Carry-Flag und teilweise in einem zweiten Flag umfasst, wobei das zweite Flag ein im Zweck neu bestimmtes architektonisches Flag umfasst, das in einer Befehlssatz-Architektur vor einer Einfügung des Addier-Befehls in die Befehlssatz-Architektur existierte, und wobei der Addier-Befehl das im Zweck neu bestimmte Architektur-Flag in einer anderen Weise verwendet als eine Mehrzahl anderer Befehle in der Befehlssatz-Architektur das im Zweck neu bestimmte Architektur-Flag verwenden.
  2. Verfahren (100) nach Anspruch 1, wobei das zweite Flag ein Überlauf-Flag umfasst.
  3. Verfahren (100) nach Anspruch 1, wobei das Speichern der Summe das Speichern einer Summe der ersten, zweiten und dritten Quelloperanden, die zu einer Kombination der Mehrzahl von Flags addiert sind, umfasst.
  4. Verfahren (100) nach Anspruch 3, wobei das Speichern (104) der Summe das Speichern der Summe des ersten, zweiten und dritten Quelloperanden umfasst, die zum Carry-Flag und zu einem Produkt, das das Doppelte des zweiten Flags ist, addiert sind.
  5. Verfahren (100) nach Anspruch 3, wobei die Kombination der Mehrzahl von Flags ein Overflow-Flag umfasst und wobei die Quelloperanden vorzeichenlose Ganzzahlen umfassen.
  6. Verfahren (100) nach Anspruch 1, wobei das Empfangen (102) das Empfangen eines Addierbefehls umfasst, der implizit einen Quelloperanden angibt, ohne diesen explizit zu bestimmen, welcher vom ersten, zweiten und dritten Quelloperanden als ein Register ausgewählt ist, das implizit als ein Zieloperand eines ganzzahligen Multiplikationsbefehls derselben Befehlssatz-Architektur angegeben ist, ohne explizit bestimmt zu sein.
  7. Verfahren (100) nach Anspruch 1, wobei der erste, zweite und dritte Quelloperand vorzeichenlose Ganzzahl-Operanden sind, die eine Größe ausgewählt aus 32 Bits und 64 Bits aufweisen.
  8. Verfahren (100) nach Anspruch 1, ausgeführt als Teil einer Multiplikation von großen Ganzzahlen, die größer sind als eine Größe von Registern, die verwendet werden, um sie zu speichern.
  9. Verfahren (100) nach Anspruch 1, wobei das Verfahren durch einen Allzweckmikroprozessor mit einer Mehrzahl von Kernen ausgeführt wird, und wobei mindestens einer der Kerne Schalttechnik aufweist, die auf den Befehl anspricht.
  10. Vorrichtung (210), umfassend: eine Ausführungseinheit (216), die infolge eines Addierbefehls (212) betriebsfähig ist, einen ersten Quelloperanden, einen zweiten Quelloperanden und einen dritten Quelloperanden anzuzeigen, um eine Summe, die unter Verwendung des ersten, zweiten und dritten Quelloperanden berechnet wurde, zu speichern, wobei die Summe teilweise in einem Zieloperanden angezeigt durch den Addierbefehl und teilweise in einer Mehrzahl von Flags (222, 224) gespeichert wird, wobei die Ausführungseinheit (216) betriebsfähig ist, die Summe teilweise in einem Carry-Flag und teilweise in einem (224) zweiten Flag zu speichern, wobei das zweite Flag ein im Zweck neu bestimmtes architektonisches Flag umfasst, das in einer Befehlssatz-Architektur vor einer Einfügung des Addier-Befehls in die Befehlssatz-Architektur existierte, und wobei der Addier-Befehl das im Zweck neu bestimmte Architektur-Flag in einer anderen Weise verwendet als eine Mehrzahl anderer Befehle in der Befehlssatz-Architektur das im Zweck neu bestimmte Architektur-Flag verwenden.
  11. Vorrichtung (210) nach Anspruch 10, wobei das zweite Flag ein Überlauf-Flag umfasst.
  12. Vorrichtung (210) nach Anspruch 10, wobei die Ausführungseinheit (216) betriebsfähig ist, eine Summe des ersten, zweiten und dritten Quelloperanden, die zu einer Kombination der Mehrzahl von Flags (222, 224) addiert sind, zu speichern.
  13. Vorrichtung (210) nach Anspruch 12, wobei die Ausführungseinheit (216) betriebsfähig ist, eine Summe des ersten, zweiten und dritten Quelloperanden zu speichern, die zum Carry-Flag (222) addiert ist und zu einem Produkt addiert ist, das das Doppelte des zweiten Flags (224) der Mehrzahl von Flags ist.
  14. Vorrichtung (210) nach Anspruch 12, wobei die Ausführungseinheit (216) betriebsfähig ist, eine Summe des ersten, zweiten und dritten Quelloperanden, die zu einer Kombination von Flags (222, 224) addiert sind, welche ein Overflow-Flag umfasst, zu speichern, und wobei der erste, zweite, dritte Quelloperand vorzeichenlose Ganzzahlen umfassen.
  15. Vorrichtung (210) nach Anspruch 10, wobei die Ausführungseinheit (216) auf einen Addierbefehl anspricht, der implizit einen Quelloperanden angibt, ohne ihn explizit zu bestimmen, der aus dem ersten, zweiten und dritten Quelloperanden als ein Register ausgewählt ist, das implizit als ein Zieloperand eines ganzzahligen Multiplikationsbefehls einer selben Befehlssatz-Architektur angegeben ist, ohne explizit bestimmt zu sein.
  16. Vorrichtung (210) nach Anspruch 10, wobei die Ausführungseinheit auf einen Addierbefehl anspricht, der die Quelloperanden angibt, die vorzeichenlose Ganzzahlen mit einer Größe ausgewählt aus 32 Bits und 64 Bits aufweisen.
  17. Vorrichtung (210) nach Anspruch 10, wobei die Ausführungseinheit innerhalb eines Kerns eines Mehrkern-Allzweckmikroprozessors enthalten ist.
  18. Vorrichtung (210) nach Anspruch 10, wobei die Ausführungseinheit innerhalb einer kryptografischen Spezial-Vorrichtung enthalten ist.
  19. Vorrichtung (210), umfassend: eine Ausführungseinheit (216), die infolge eines Addierbefehls (212) betriebsfähig ist, einen ersten Quelloperanden, einen zweiten Quelloperanden und einen dritten Quelloperanden anzuzeigen von denen jeder vorzeichenlose Ganzzahlen aufweist, um eine Summe aus dem ersten, zweiten und dritten Quelloperanden addiert zu einem ersten Flag (222) und addiert zu einem Produkt aus dem Doppelten eines zweiten Flags (224) zu speichern, wobei die Summe teilweise in einem Zieloperanden, angezeigt durch den Addierbefehl, und teilweise in dem ersten und zweiten Flag gespeichert ist, wobei das erste Flag ein Carry-Flag und das zweite Flag ein im Zweck neu bestimmtes architektonisches Flag umfassen, das in einer Befehlssatz-Architektur vor einer Einfügung des Addier-Befehls in die Befehlssatz-Architektur existierte, und wobei der Addier-Befehl das im Zweck neu bestimmte Architektur-Flag in einer anderen Weise verwendet als eine Mehrzahl anderer Befehle in der Befehlssatz-Architektur das im Zweck neu bestimmte Architektur-Flag verwenden.
  20. Vorrichtung (210) nach Anspruch 19, wobei das zweite Flag (224) ein Overflow-Flag aufweist.
  21. System, umfassend: eine Kopplungsstruktur (1780); einen Prozessor (1700) gekoppelt mit der Kopplungsstruktur, wobei der Prozessor (1700) infolge eines Addierbefehls, der einen ersten Quelloperanden, einen zweiten Quelloperanden und einen dritten Quelloperanden anzeigt, betriebsfähig ist, eine Summe, die unter Verwendung des ersten, zweiten und dritten Quelloperanden berechnet ist, zu speichern, wobei die Summe teilweise in einem Zieloperanden angezeigt durch den Addierbefehl und teilweise in einer Mehrzahl von Flags gespeichert werden soll, wobei die Summe teilweise in einem Carry-Flag und teilweise in einem (224) Overflow-Flag gespeichert werden soll, wobei das Overflow-Flag im Zweck neu bestimmt ist; und einen dynamischen Direktzugriffspeicher (DRAM) (1786), der an die Kopplungsstruktur (1780) gekoppelt ist.
  22. System nach Anspruch 21, wobei der Prozessor betriebsfähig ist, die Summe des ersten, zweiten und dritten Quelloperanden, die zu einer Kombination der Mehrzahl von Flags addiert sind, zu speichern.
  23. Artikel, der umfasst: ein körperliches maschinenlesbares Medium einschließlich fester Substanz, um einen Addierbefehl bereitzustellen, wobei der Addierbefehl einen ersten Quelloperanden, einen zweiten Quelloperanden und einen dritten Quelloperanden anzeigt und der, wenn er durch eine Maschine ausgeführt wird, die Maschine veranlasst, Operationen auszuführen, die umfassen: das Berechnen eine Summe unter Verwendung des ersten, zweiten und dritten Quelloperanden; und das Speichern der Summe teilweise in einem Zieloperanden angezeigt durch den Addierbefehl und teilweise in einer Mehrzahl von Flags, wobei die Summe teilweise in einem Carry-Flag und teilweise in einem (224) zweiten Flag gespeichert werden soll, wobei das zweite Flag ein im Zweck neu bestimmtes architektonisches Flag umfasst, das in einer Befehlssatz-Architektur vor einer Einfügung des Addier-Befehls in die Befehlssatz-Architektur existierte, und wobei der Addier-Befehl das im Zweck neu bestimmte Architektur-Flag in einer anderen Weise verwendet als eine Mehrzahl anderer Befehle in der Befehlssatz-Architektur das im Zweck neu bestimmte Architektur-Flag verwenden.
  24. Artikel nach Anspruch 23, wobei die Summe eine Summe aus dem ersten, zweiten und dritten Quelloperanden, die zu einer Kombination der Mehrzahl von Flags addiert sind, ist.
DE201010051476 2009-12-22 2010-11-15 Addierbefehle, um drei Quelloperanden zu addieren Expired - Fee Related DE102010051476B4 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US12/645,334 2009-12-22
US12/645,334 US8549264B2 (en) 2009-12-22 2009-12-22 Add instructions to add three source operands

Publications (2)

Publication Number Publication Date
DE102010051476A1 DE102010051476A1 (de) 2011-07-28
DE102010051476B4 true DE102010051476B4 (de) 2015-05-13

Family

ID=44152788

Family Applications (1)

Application Number Title Priority Date Filing Date
DE201010051476 Expired - Fee Related DE102010051476B4 (de) 2009-12-22 2010-11-15 Addierbefehle, um drei Quelloperanden zu addieren

Country Status (5)

Country Link
US (2) US8549264B2 (de)
JP (2) JP5425041B2 (de)
CN (2) CN105786446B (de)
DE (1) DE102010051476B4 (de)
TW (1) TWI544404B (de)

Families Citing this family (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9235414B2 (en) 2011-12-19 2016-01-12 Intel Corporation SIMD integer multiply-accumulate instruction for multi-precision arithmetic
WO2013095515A1 (en) 2011-12-22 2013-06-27 Intel Corporation Packed data operation mask register arithmetic combination processors, methods, systems, and instructions
US9898283B2 (en) * 2011-12-22 2018-02-20 Intel Corporation Processors, methods, systems, and instructions to generate sequences of integers in which integers in consecutive positions differ by a constant integer stride and where a smallest integer is offset from zero by an integer offset
CN107861756B (zh) * 2011-12-22 2022-04-15 英特尔公司 具有独立进位链的加法指令
WO2013095629A1 (en) 2011-12-23 2013-06-27 Intel Corporation Apparatus and method for vector instructions for large integer arithmetic
CN104126173A (zh) * 2011-12-23 2014-10-29 英特尔公司 不会引起密码应用的算术标志的三输入操作数向量add指令
CN107562444B (zh) * 2012-12-26 2020-12-18 英特尔公司 合并相邻的聚集/分散操作
US20140281418A1 (en) * 2013-03-14 2014-09-18 Shihjong J. Kuo Multiple Data Element-To-Multiple Data Element Comparison Processors, Methods, Systems, and Instructions
US9477467B2 (en) * 2013-03-30 2016-10-25 Intel Corporation Processors, methods, and systems to implement partial register accesses with masked full register accesses
WO2015089314A1 (en) 2013-12-11 2015-06-18 Mill Computing, Inc. Computer processor employing operand data with associated meta-data
US10187208B2 (en) 2013-12-28 2019-01-22 Intel Corporation RSA algorithm acceleration processors, methods, systems, and instructions
KR101893814B1 (ko) * 2014-03-26 2018-10-04 인텔 코포레이션 3 소스 피연산자 부동 소수점 가산 프로세서, 방법, 시스템, 및 명령어
US20150277904A1 (en) * 2014-03-28 2015-10-01 Roger Espasa Method and apparatus for performing a plurality of multiplication operations
US20160179530A1 (en) * 2014-12-23 2016-06-23 Elmoustapha Ould-Ahmed-Vall Instruction and logic to perform a vector saturated doubleword/quadword add
US20160188341A1 (en) * 2014-12-24 2016-06-30 Elmoustapha Ould-Ahmed-Vall Apparatus and method for fused add-add instructions
US20160188327A1 (en) * 2014-12-24 2016-06-30 Elmoustapha Ould-Ahmed-Vall Apparatus and method for fused multiply-multiply instructions
US9665936B2 (en) * 2015-09-25 2017-05-30 Siemens Healthcare Gmbh Systems and methods for see-through views of patients
US9633435B2 (en) * 2015-09-25 2017-04-25 Siemens Healthcare Gmbh Calibrating RGB-D sensors to medical image scanners
US9727353B2 (en) 2015-10-30 2017-08-08 International Business Machines Corporation Simultaneously capturing status information for multiple operating modes
CN111694541B (zh) * 2020-05-06 2023-04-21 常熟理工学院 一种用于数论变换乘法的基32运算电路
US11799083B2 (en) 2021-08-26 2023-10-24 GM Global Technology Operations LLC Lithiation additive for a positive electrode
CN117170750B (zh) * 2023-09-04 2024-04-30 上海合芯数字科技有限公司 多源操作数指令的调度方法、装置、处理器、设备及介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3541528A (en) * 1969-01-06 1970-11-17 Ibm Implicit load and store mechanism
US5880984A (en) * 1997-01-13 1999-03-09 International Business Machines Corporation Method and apparatus for performing high-precision multiply-add calculations using independent multiply and add instruments
US5889983A (en) * 1997-01-21 1999-03-30 Intel Corporation Compare and exchange operation in a processing system

Family Cites Families (38)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5187796A (en) * 1988-03-29 1993-02-16 Computer Motion, Inc. Three-dimensional vector co-processor having I, J, and K register files and I, J, and K execution units
US4901270A (en) 1988-09-23 1990-02-13 Intel Corporation Four-to-two adder cell for parallel multiplication
GB2228597A (en) * 1989-02-27 1990-08-29 Ibm Data processor with conditional instructions
JP2832899B2 (ja) * 1993-05-31 1998-12-09 松下電器産業株式会社 データ処理装置およびデータ処理方法
JP3487903B2 (ja) * 1993-11-12 2004-01-19 松下電器産業株式会社 演算装置及び演算方法
JP2931890B2 (ja) * 1995-07-12 1999-08-09 三菱電機株式会社 データ処理装置
US7085795B2 (en) 2001-10-29 2006-08-01 Intel Corporation Apparatus and method for efficient filtering and convolution of content data
US5696711A (en) 1995-12-22 1997-12-09 Intel Corporation Apparatus and method for performing variable precision floating point rounding operations
JP3790307B2 (ja) * 1996-10-16 2006-06-28 株式会社ルネサステクノロジ データプロセッサ及びデータ処理システム
US6253310B1 (en) 1998-12-31 2001-06-26 Intel Corporation Delayed deallocation of an arithmetic flags register
US6338136B1 (en) * 1999-05-18 2002-01-08 Ip-First, Llc Pairing of load-ALU-store with conditional branch
JP2001092633A (ja) * 1999-09-22 2001-04-06 Toshiba Corp 複数の結果を出力する命令を有する演算装置
US6470374B1 (en) 2000-02-21 2002-10-22 Hewlett-Packard Company Carry look-ahead for bi-endian adder
US7624138B2 (en) 2001-10-29 2009-11-24 Intel Corporation Method and apparatus for efficient integer transform
US6901504B2 (en) * 2002-01-22 2005-05-31 International Business Machines Corporation Result forwarding of either input operand to same operand input to reduce forwarding path
US7028067B2 (en) * 2002-02-20 2006-04-11 International Business Machines Corporation Generation of mask-constrained floating-point addition and subtraction test cases, and method and system therefor
US7346881B2 (en) * 2002-05-13 2008-03-18 Tensilica, Inc. Method and apparatus for adding advanced instructions in an extensible processor architecture
US7392368B2 (en) * 2002-08-09 2008-06-24 Marvell International Ltd. Cross multiply and add instruction and multiply and subtract instruction SIMD execution on real and imaginary components of a plurality of complex data elements
US7293056B2 (en) * 2002-12-18 2007-11-06 Intel Corporation Variable width, at least six-way addition/accumulation instructions
US7523152B2 (en) 2002-12-26 2009-04-21 Intel Corporation Methods for supporting extended precision integer divide macroinstructions in a processor
CN1438574A (zh) * 2003-02-21 2003-08-27 中国航天科技集团公司第九研究院七七一研究所 一种16位微处理器指令集
US7290024B2 (en) 2003-12-18 2007-10-30 Intel Corporation Methods and apparatus for performing mathematical operations using scaled integers
US20060218377A1 (en) * 2005-03-24 2006-09-28 Stexar Corporation Instruction with dual-use source providing both an operand value and a control value
US7930337B2 (en) 2006-06-27 2011-04-19 Intel Corporation Multiplying two numbers
US7738657B2 (en) 2006-08-31 2010-06-15 Intel Corporation System and method for multi-precision division
US7925011B2 (en) 2006-12-14 2011-04-12 Intel Corporation Method for simultaneous modular exponentiations
US20080148011A1 (en) 2006-12-14 2008-06-19 Intel Corporation Carry/Borrow Handling
US7961877B2 (en) 2006-12-14 2011-06-14 Intel Corporation Factoring based modular exponentiation
US7949130B2 (en) 2006-12-28 2011-05-24 Intel Corporation Architecture and instruction set for implementing advanced encryption standard (AES)
US8538012B2 (en) 2007-03-14 2013-09-17 Intel Corporation Performing AES encryption or decryption in multiple modes with a single instruction
US8538015B2 (en) 2007-03-28 2013-09-17 Intel Corporation Flexible architecture and instruction for advanced encryption standard (AES)
US8346839B2 (en) 2007-03-30 2013-01-01 Intel Corporation Efficient advanced encryption standard (AES) datapath using hybrid rijndael S-box
US8391475B2 (en) 2007-03-30 2013-03-05 Intel Corporation Method and apparatus for advanced encryption standard (AES) block cipher
US8520845B2 (en) 2007-06-08 2013-08-27 Intel Corporation Method and apparatus for expansion key generation for block ciphers
US7986779B2 (en) 2007-06-30 2011-07-26 Intel Corporation Efficient elliptic-curve cryptography based on primality of the order of the ECC-group
US8271570B2 (en) 2007-06-30 2012-09-18 Intel Corporation Unified integer/galois field (2m) multiplier architecture for elliptic-curve crytpography
US8005210B2 (en) 2007-06-30 2011-08-23 Intel Corporation Modulus scaling for elliptic-curve cryptography
CN101477456B (zh) * 2009-01-14 2011-06-08 北京大学深圳研究生院 一种自相关运算单元及处理器

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3541528A (en) * 1969-01-06 1970-11-17 Ibm Implicit load and store mechanism
US5880984A (en) * 1997-01-13 1999-03-09 International Business Machines Corporation Method and apparatus for performing high-precision multiply-add calculations using independent multiply and add instruments
US5889983A (en) * 1997-01-21 1999-03-30 Intel Corporation Compare and exchange operation in a processing system

Non-Patent Citations (7)

* Cited by examiner, † Cited by third party
Title
Gaj, K.: Computer Arithmetic, Implementations in Hardware and Software (ECE 645), Lecture 6. George Mason University (USA), 2007. URL: http://teal.gmu.edu/courses/ECE645/viewgraphs_S07/lecture6_multiadd_2.pdf [abgerufen am 21.05.2014] *
Instruction set. In: Wikipedia, the free encyclopedia. Bearbeitungsstand: 18.11.2009. URL: https://en.wikipedia.org/w/index.php?title=Instruction_set&oldid=326531778 [abgerufen am 06.08.2013] *
LEE, R. B.; FISKIRAN, A. M.: Multimedia Instructions in Microprocessors for Native Signal Processing. Book Chapter in Yu Hen Hu, ed., Programmable Digital Signal Processors: Architecture: Programming, and Applications. New York : Marcel Dekker, Inc., 2001. S. 91-145. - ISBN 0-8247-0647-1. http://palms.ee.princeton.edu/PALMSopen/Lee_Multimedia_Instructions_in_Microprocessors_for_Native_Signal_Processing.pdf [abgerufen am 06.08.2013] *
Orthogonal instruction set. In: Wikipedia, the free encyclopedia. Bearbeitungsstand: 08.12.2009. URL: https://en.wikipedia.org/w/index.php?title=Orthogonal_instruction_set&oldid=330436274 [abgerufen am 07.08.2013] *
SHAABAN, M.: Computer Organization. EECC 550. Selected Chapter 5 "For More Practice" Exercises. 2006. URL: http://meseec.ce.rit.edu/eecc550-winter2005/550-chapter5-exercises.pdf [abgerufen am 06.08.2013] *
Status register. In: Wikipedia, the free encyclopedia. Bearbeitungsstand: 30.10.2009. URL: http://en.wikipedia.org/w/index.php?title=Status_register&oldid=322966720 [abgerufen am 07.08.2013] *
SUBRAMANYAN, R.: CS250, Chapter 6: Operand Addressing And Instruction Representation. URL: http://www.eca.cs.purdue.edu/CS250/ir/lec/Chap6.pdf [abgerufen am 06.08.2013] *

Also Published As

Publication number Publication date
CN102103486B (zh) 2016-03-30
TWI544404B (zh) 2016-08-01
TW201145161A (en) 2011-12-16
JP2014038664A (ja) 2014-02-27
CN105786446A (zh) 2016-07-20
US20110153993A1 (en) 2011-06-23
US8549264B2 (en) 2013-10-01
US20130227252A1 (en) 2013-08-29
JP2011134305A (ja) 2011-07-07
JP5736028B2 (ja) 2015-06-17
JP5425041B2 (ja) 2014-02-26
CN105786446B (zh) 2018-04-13
US8738893B2 (en) 2014-05-27
CN102103486A (zh) 2011-06-22
DE102010051476A1 (de) 2011-07-28

Similar Documents

Publication Publication Date Title
DE102010051476B4 (de) Addierbefehle, um drei Quelloperanden zu addieren
DE102018005977A1 (de) Gleitkomma- zu festkomma-umwandlung
DE112013005188B4 (de) Prozessor und vefrahren zur vektorisierung von zusammengeführten, mehrfach geschachtelten schleifen
DE102019109847A1 (de) Beschleunigung der matrixmultplikation dünnbesetzter matrizen unter verwendung einer spaltenfaltung und -verdichtung
DE102010053967A1 (de) Bitbereich-Isolierbefehle, Verfahren und Vorrichtung
DE102018006757A1 (de) Festkomma-zu-gleitkomma-umwandlung
DE112017001804T5 (de) Vorrichtung und Verfahren für träge synchrone Seitentabellenaktualisierungen mit geringem Aufwand
DE102016006400A1 (de) Hardware-prozessoren und verfahren für eng-gekoppelte heterogene datenverarbeitung
DE112010002773T5 (de) Entpacken von gepackten daten auf mehreren spuren
DE102018125817A1 (de) Systeme und Verfahren zum Laden eines Kachelregisterpaars
DE102018005105A1 (de) Befehle für entfernte atomare operationen
DE112013003743T5 (de) Beschleunigte spurübergreifende Vektorreduzierungsbefehle
DE112011105121T5 (de) Systeme, Vorrichtungen und Verfahren zum Schrittmustersammeln von Datenelementen und Schrittmusterstreuen von Datenelementen
DE102015006863A1 (de) Befehle und Logik zum Unterbrechen und Wiederaufnehmen von Paging in Secure Enclaves
DE112011105666T5 (de) Befehl und Logik zum Bereitstellen von Vektor-Lade-OP/Speicher-OP mit Schritt-Funktionalität
DE112012007088B4 (de) Vorrichtung, verfahren und system mit einem befehl zum reduzieren von elementen in einem vektorregister mit einem schrittweisem zugriffsmuster
DE202016009016U1 (de) Befehle und Logik für wiederkehrende benachbarte Sammlungen
DE112012007063T5 (de) Zusammenfügen von benachbarten Sammel-/Streuoperationen
DE102014003563A1 (de) Fusionierbare befehle und logik zum versehen mit or-test- und and-test-funktionalität unter benutzen von mehrfachtestquellen
DE112011105665T5 (de) Befehl und Logik zum Liefern von Vektorladen und -speichern mit Schritt- und Maskierfunktionalität
DE102018125232A1 (de) Einrichtung und Verfahren für komplexe Multiplikation und Akkumulation
DE102010064599A1 (de) Drehbefehle, die ohne Lesen des Übertrags-Flags ausgeführt werden
DE102018125805A1 (de) Systeme, verfahren, und vorrichtungen für skalarproduktoperationen
DE102018132521A1 (de) Vorrichtung und verfahren zur verflachung und reduktion von schleifen in einer single instruction, multiple data- (simd-) pipeline
DE102015002253A1 (de) Verfahren und Vorrichtung zum Ausführen mehrerer Multiplikationsoperationen

Legal Events

Date Code Title Description
R016 Response to examination communication
R016 Response to examination communication
R018 Grant decision by examination section/examining division
R020 Patent grant now final
R119 Application deemed withdrawn, or ip right lapsed, due to non-payment of renewal fee