DE112012003864T5 - Mehrfach adressierbare Registerdateien und dazugehörige Formatumwandlungen - Google Patents

Mehrfach adressierbare Registerdateien und dazugehörige Formatumwandlungen Download PDF

Info

Publication number
DE112012003864T5
DE112012003864T5 DE112012003864.9T DE112012003864T DE112012003864T5 DE 112012003864 T5 DE112012003864 T5 DE 112012003864T5 DE 112012003864 T DE112012003864 T DE 112012003864T DE 112012003864 T5 DE112012003864 T5 DE 112012003864T5
Authority
DE
Germany
Prior art keywords
instruction
precision
format
bits
register
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE112012003864.9T
Other languages
English (en)
Inventor
Michael Karl Gschwind
Brett Olsson
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.)
International Business Machines Corp
Original Assignee
International Business Machines 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 International Business Machines Corp filed Critical International Business Machines Corp
Publication of DE112012003864T5 publication Critical patent/DE112012003864T5/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30025Format conversion instructions, e.g. Floating-Point to Integer, decimal conversion
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30112Register structure comprising data of variable length
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30185Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode

Abstract

Eine mehrfach adressierbare Registerdatei wird von einer Vielzahl von Typen von Anweisungen adressiert, einschließlich skalaren, Vektor- und Vector-Scalar Extension-Anweisungen. Es kann ermittelt werden, dass Daten von einem Format in ein anderes Format übersetzt werden müssen. Wenn dies ermittelt wird, wird eine Umwandlungs-Maschinenanweisung ausgeführt, die ein Datum mit einfacher Präzision in einer ersten Darstellung in einem ersten Format von einem ersten Register erlangt; das Datum mit einfacher Präzision der ersten Darstellung in dem ersten Format in ein umgewandeltes Datum mit einfacher Präzision einer zweiten Darstellung in einem zweiten Format umwandelt; und das umgewandelte Datum mit einfacher Präzision in ein zweites Register stellt.

Description

  • Hintergrund
  • Ein oder mehrere Aspekte der vorliegenden Anwendung betreffen im Allgemeinen Datenverarbeitung und insbesondere mehrfach adressierbare Registerdateien und damit verbundene Verarbeitung.
  • Hochleistungsprozessoren unterstützen Multimedia-Verarbeitung unter Verwendung von Single Instruction, Multiple Data-(SIMD)Techniken, um Parallelität auf Anweisungsebene in Programmen zu nutzen. Das heißt, SIMD-Techniken werden zum gleichzeitigen Ausführen von mehr als einer Operation verwendet. Diese Prozessoren enthalten mehrere Funktionseinheiten, von denen einige auf die Ausführung von skalaren Daten ausgerichtet sind, und von denen einige für die Verarbeitung von strukturierten SIMD-Vektordaten gruppiert sind. SIMD-Datenströme werden zum Darstellen von Multimedia-Datentypen wie beispielsweise von Farbinformationen verwendet, wobei zum Beispiel das RGB-Format durch Verschlüsseln der roten, grünen und blauen Komponenten in dem strukturierten Datentyp verwendet wird, oder von Koordinateninformationen, wobei eine Position als das Quadrupel (x, y, z, w) verschlüsselt wird.
  • Prozessoren, die für ein Verarbeiten von Multimedia-Daten ausgelegt sind, wurden umgesetzt, indem eine bestehende skalare Prozessorumsetzung zum Beispiel durch Hinzufügen einer SIMD-Einheit erweitert wurde, wobei die SIMD-Einheit selbst mehrere Funktionseinheiten einschließt (d. h. Festkommaeinheiten und Gleitkommaeinheiten), die Ressourcen spiegeln, die für das Verarbeiten von skalaren Datentypen verfügbar sind und jeden Funktionseinheitentyp für die Anzahl von strukturierten Elementen nachbilden, der durch die SIMD-Architektur unterstützt werden soll.
  • Prozessoren, die eine Multimedia-Verarbeitung sowie sonstige Verarbeitung unterstützen, können Daten von verschiedenen Typen verarbeiten. Allerdings müssen Einrichtungen zum Verwalten einer derartigen Verarbeitung bereitgestellt werden.
  • Kurzdarstellung
  • Unzulänglichkeiten nach dem Stand der Technik werden beseitigt und zusätzliche Vorteile werden durch die Bereitstellung eines Computerprogrammprodukts zum Ausführen einer Maschinenanweisung bereitgestellt. Das Computerprogrammprodukt weist ein Speichermedium auf, das durch eine Verarbeitungsschaltung gelesen werden kann und Anweisungen zur Ausführung durch die Verarbeitungsschaltung zum Ausführen eines Verfahrens speichert. Das Verfahren enthält zum Beispiel ein Erlangen von einer Maschinenanweisung zur Ausführung durch einen Prozessor, wobei die Maschinenanweisung zur Computerausführung gemäß einer Computerarchitektur definiert ist, wobei die Maschinenanweisung zum Beispiel mindestens ein Operationscode-Feld enthält, das eine Umwandlungsanweisung identifiziert; mindestens ein Feld, das verwendet wird, um ein erstes Register anzugeben; und mindestens ein weiteres Feld, um ein zweites Register anzugeben; ein Ausführen der Maschinenanweisung durch den Prozessor, wobei das Ausführen zum Beispiel ein Erlangen eines binären Gleitkommadatums mit einfacher Präzision in einer ersten Darstellung in einem ersten Format von dem ersten Register enthält; ein Umwandeln des binären Gleitkommadatums mit einfacher Präzision der ersten Darstellung in dem ersten Format in ein umgewandeltes binäres Gleitkommadatum mit einfacher Präzision einer zweiten Darstellung in einem zweiten Format; und ein Einstellen des umgewandelten binären Gleitkommadatums mit einfacher Präzision in das zweite Register.
  • Verfahren und Systeme, die einen oder mehrere Aspekte der vorliegenden Erfindung betreffen, werden hierin ebenfalls beschrieben und beansprucht.
  • Ferner werden Dienste, die einen oder mehrere Aspekte der vorliegenden Erfindung betreffen, ebenfalls beschrieben und können hierin beansprucht werden.
  • Weitere Funktionen und Vorteile werden durch die Techniken von einem oder mehreren Aspekten der vorliegenden Erfindung verwirklicht. Weitere Ausführungsformen und Aspekte der Erfindung werden hierin ausführlich beschrieben und werden als Bestandteil der beanspruchten Erfindung betrachtet.
  • Kurzbeschreibung der verschiedenen Ansichten der Zeichnungen
  • Ein oder mehrere Aspekte der vorliegenden Erfindung werden besonders herausgestellt und eindeutig als Beispiele in den Ansprüchen am Ende der Spezifikation beansprucht. Die vorgenannten und andere Aufgaben, Merkmale und Vorteile von einem oder mehreren Aspekten der Erfindung werden aus der folgenden ausführlichen Beschreibung in Verbindung mit den begleitenden Zeichnungen offenkundig, wobei:
  • 1 ein Blockschaubild ist, das ein Beispiel eines Prozessors darstellt, der skalare Verarbeitungseinheiten und eine SIMD-Einheit zum Verarbeiten von strukturierten Datentypen enthält;
  • 2 ein Beispiel eines Datenverarbeitungssystems ist, in dem ein oder mehrere Aspekte von veranschaulichenden Ausführungsformen umgesetzt werden können;
  • 3A ein Beispiel für einen Prozessor ist, der so ausgelegt ist, dass er skalare und Vektor-Anweisungen unter Verwendung einer Registerdatei ausführt, die sowohl skalare als auch Vektor-Daten und Adressinformationen speichert;
  • 3B einen flexibleren Ansatz zum Auswählen von skalaren Daten für Informationen zeigt, der von einer Verzweigungseinheit und Lade-/Speichereinheit eines Prozessor verwendet werden kann;
  • 4 ein Beispiel für einen Prozessor ist, in dem eine mehrfach adressierbare Registerdatei gemäß einer veranschaulichenden Ausführungsform verwendet wird;
  • 5 ein Beispiel für eine Vector-Scalar Extension-(VSX)Registerdatei gemäß einer veranschaulichenden Ausführungsform ist;
  • 6 ein Beispiel für eine Logik darstellt, die eine allgemeine Entschlüsselungsoperation gemäß einer veranschaulichenden Ausführungsform aufgliedert;
  • 7A und 7B ein Beispiel für eine Logik bereitstellen, die eine Entschlüsselungsoperation gemäß einer veranschaulichenden Ausführungsform aufgliedern;
  • 8 ein Beispiel für eine Logik darstellt, die zum Einfügen einer Umwandlungsanweisung in einen Anweisungsstrom gemäß einer veranschaulichenden Ausführungsform verwendet wird;
  • 9 ein Beispiel für eine Logik darstellt, die zum Auswählen einer Umwandlungsanweisung verwendet wird, die gemäß einer veranschaulichenden Ausführungsform zum Umwandeln eines Vektorelements in einen skalaren Wert verwendet werden soll;
  • 10 ein Beispiel für eine Logik darstellt, die zum Auswählen einer Umwandlungsanweisung verwendet wird, die gemäß einer veranschaulichenden Ausführungsform zum Umwandeln von skalaren Daten in ein Vektorelement verwendet werden soll;
  • 11 eine Ausführungsform eines Computerprogrammprodukts darstellt, das einen oder mehrere Aspekte der vorliegenden Erfindung verkörpert.
  • Ausführliche Beschreibung
  • Gemäß einem Aspekt der vorliegenden Erfindung wird eine Verarbeitung in Verbindung mit skalaren und Vektordaten vereinfacht. In einem Aspekt wird eine Registerdatei bereitgestellt, in der jedes Register der Registerdatei skalare 64-Bit(b)-Gleitkommadaten mit einfacher Präzision oder 32-Bit-Vektordaten mit einfacher Präzision sowie weitere Datenformate enthalten kann. Ferner werden in einem Aspekt Umwandlungstechniken zum Umwandeln aus einem Gleitkommaformat mit einfacher Präzision in ein anderes Gleitkommaformat mit einfacher Präzision bereitgestellt. In einem Beispiel wird die Umwandlung unter Verwendung von Anweisungen, die in einer Architektur angeordnet sind und ohne Signalisieren einer Ausnahme ausgeführt.
  • Wie vorher oben und des Weiteren in der gemeinsam erteilten U. S.-Veröffentlichungs-Nr. 2009/0198966 A1 , Gschwind et al., mit dem Titel „Multi-Addressable Register File”, veröffentlicht am 6. August 2009, und im U. S.-Patent mit der Nr. 7 877 582 , Gschwind et al., mit dem Titel „Multi-Addressable Register File”, erteilt am 25. Januar 2011, beschrieben, die beide hierin durch Bezugnahme in ihrer Gesamtheit aufgenommen sind, wurden Prozessoren, die für ein Verarbeiten von Multimedia-Daten ausgelegt sind, umgesetzt, indem eine bestehende skalare Prozessorumsetzung zum Beispiel durch Hinzufügen einer SIMD-Einheit erweitert wurde, wobei die SIMD-Einheit selbst mehrere Funktionseinheiten einschließt (d. h. Festkommaeinheiten und Gleitkommaeinheiten), die Ressourcen spiegeln, die für das Verarbeiten von skalaren Datentypen verfügbar sind und jeden Funktionseinheitentyp für die Anzahl von strukturierten Elementen nachbilden, der durch die SIMD-Architektur unterstützt werden soll. Oft sind die einzigen Einheiten, die zwischen den skalaren und SIMD-Verarbeitungseinheiten gemeinsam verwendet werden, die Ausgabelogik, die Anweisungen entweder an die skalaren oder SIMD-Verarbeitungsblöcke ausgibt, und die Lade-/Speichereinheit (LSU), die den Zugriff auf das Speicher-Untersystem regelt. Alle anderen Einheiten, einschließlich der Registerdateien, werden üblicherweise getrennt verwaltet.
  • 1 ist ein Blockschaubild, das ein Beispiel für einen Prozessor nach dem Stand der Technik darstellt, der skalare Verarbeitungseinheiten und eine SIMD-Einheit zum Verarbeiten von strukturierten Datentypen enthält, wobei die SIMD-Einheit mehrere Verarbeitungseinheiten für jedes Element in dem strukturierten Datentyp aufweist. Im Allgemeinen ist die Verwendung von getrennten skalaren und SIMD-Prozessoren insofern leistungsschwach und teuer, als eine derartige Konfiguration eine Anzahl von redundanten Funktionseinheiten und Datenpfaden enthält. Des Weiteren führen derartige Umsetzungen zu einer unerwünschten Menge von in Anspruch genommener Leistung, denn während entweder die skalare oder die SIMD-Einheit Daten verarbeitet, läuft die andere im Allgemeinen im Leerlauf und wartet auf die nächste Anweisung, nimmt währenddessen aber Systemleistung in Anspruch.
  • Während des Betriebs des Systems von 1 werden Anweisungen durch die Anweisungsabrufeinheit 100 abgerufen und an eine Anweisungsentschlüsselungseinheit 102 weitergeleitet. Entschlüsselte Anweisungen werden an eine Ausgabe-/Verzweigungseinheit 104 übergeben, in der Verzweigungsanweisungen aufgelöst werden und weitere Anweisungen in der dazugehörigen Anweisungsausgabeeinheit (nicht gezeigt) gespeichert werden können, bis sie in einer der Funktionseinheiten des Prozessors ausgeführt werden können. Die Anweisungsausgabeeinheit kann eine Vorhersagelogik, eine Logik zum Neuanordnen von Anweisungen, Anweisungsausgabe-Pufferspeicher und andere Logik enthalten, die die Hochleistungsausgabe von Anweisungen unterstützen.
  • Anweisungen werden von der Ausgabe-/Verzweigungseinheit 104 an eine oder mehrere der Lade-/Speichereinheit 106, der Festkommaeinheit (FXU) 108, der Gleitkommaeinheit (FPU) 110 oder des SIMD-Verarbeitungsblocks 112 ausgegeben. Bevor Anweisungen von einer oder mehreren der Verarbeitungseinheiten verarbeitet werden können, sind für gewöhnlich ein oder mehrere Registerzugriffe in einer Registerdatei erforderlich, z. B. der Ganzzahlen-Registerdatei 114, der Gleitkomma-Registerdatei 116 oder der Vektor-Registerdatei 118, was ein Bestandteil der SIMD-Multimedia-Erweiterung ist, die in vielen heutigen Prozessoren zu finden ist.
  • Der SIMD-Multimedia-Verarbeitungsblock 112 enthält üblicherweise eine Vektor-Registerdatei 118 zum Speichern von strukturierten Daten (für gewöhnlich ein Vektor mit vier Elementen). Die Vektor-Registerdatei 118 kann in vier Unterregisterdateien segmentiert werden, von denen jede ein einzelnes Feld der strukturierten Daten speichert. Der SIMD-Multimedia-Verarbeitungsblock 112 kann mehrere Typen von Funktionseinheiten enthalten, wobei jeder Typ für die Anzahl von Elementen in dem strukturierten Datentyp nachgebildet wird, der durch die Multimedia-Erweiterung unterstützt wird. In 1 werden Festkommaeinheiten 119 und Gleitkommaeinheiten 120 viermal nachgebildet, um jeweils ein Strukturelement zu verarbeiten, wie in der PowerPC®VMX-Multimedia-Erweiterung zu finden.
  • Es ist ersichtlich, dass dort, wo eine skalare und SIMD-Anweisungsausführung bereitgestellt wird, üblicherweise getrennt adressierbare Registerdateien für die verschiedenen Typen von Anweisungen erforderlich sind, auf die die CPU treffen kann. Zum Beispiel, wie in 1 gezeigt, werden eine getrennte Ganzzahlen-Registerdatei 114, eine Gleitkomma-Registerdatei 116 und eine Vektor-Registerdatei 118 bereitgestellt. Das Vorliegen von auf diese Weise getrennten Registerdateien ist hinsichtlich der indirekten Kosten als auch der Inanspruchnahme von Leistung teuer. Mehrere Registerdateien zu haben bedeutet, dass beim Ausführen von Code der Code zwischen den verschiedenen Registerdateien umgeschaltet oder verschoben werden muss. Dadurch wird Code-Erzeugung teuer hinsichtlich der indirekten Kosten, die mit einem Verschieben zwischen den verschiedenen Registerdateien verbunden sind. Außerdem kann ein Compiler des Codes mehr als eine oder eine weitere Gruppe von Ressourcen erfordern, die den Registerdateien zugehörig sind, was zu Registerdatei-Fragmentierung führt. Ferner erhöhen in der Mikro-Architektur der CPU vorhandene getrennte Ressourcen die Kosten, die mit der Herstellung der CPU verbunden sind sowie die der Inanspruchnahme von Leistung, der Wärmeableitung usw. zugehörigen Kosten.
  • Die oben beschriebene Prozessor-Umsetzung ist ein Beispiel für Systeme nach dem Stand der Technik; in einigen Umsetzungen können einige Registerdateien gemeinsam genutzt werden, z. B. eine kombinierte Ganzzahlen- und Gleitkomma-Registerdatei, oder es können zusätzliche Registerdateien vorhanden sein wie beispielsweise eine Bedingungs-Registerdatei oder eine Vergleichselement-Registerdatei für Vergleichsergebnisse. In einem bestimmten Beispiel, das im U. S.-Patent mit der Nr. 6 839 828 , Gschwind et al., mit dem Titel „SIMD Datapath Coupled to Scalar/Vector/Address/Conditional Data Register File with Selective Subpath Scalar Processing Mode”, erteilt am 4. Januar 2004, beschrieben wurde, das hierin durch Bezugnahme in seiner Gesamtheit aufgenommen ist, wird eine kombinierte adressierbare Skalar-/Vektor-Registerdatei zusammen mit einem Prozessor beschrieben, der so ausgelegt ist, dass er in einer Vielzahl von Modi zum Verarbeiten von Vektor- und skalaren Anweisungen arbeitet. Eine parallele Vektoreinheit, die mit den Registerdateien verbunden ist, enthält Funktionseinheiten, die so konfigurierbar sind, dass sie in einem Vektor-Betriebsmodus und einem skalaren Betriebsmodus arbeiten. Die Vektoreinheit enthält eine Vorrichtung zum engen Verbinden der Funktionseinheiten, um eine Operation auszuführen, die von einer aktuellen Anweisung angegeben wird. Unter einem Vektor-Betriebsmodus führt die Vektoreinheit parallel eine einzelne Vektor-Operation an einer Vielzahl von Datenelementen aus. Die an der Vielzahl von Datenelementen ausgeführten Operationen werden jeweils von einer anderen Funktionseinheit der Vektoreinheit ausgeführt. Unter einem skalaren Betriebsmodus führt die Vektoreinheit eine skalare Operation an einem Datenelement aus, das von den Registerdateien in einer Funktionseinheit in der Vektoreinheit empfangen wurde.
  • Während der Mechanismus des U. S.-Patents mit der Nr. 6 839 828 die Fähigkeit bereitstellt, verschiedene Typen von Anweisungen/Daten in der Registerdatei zu speichern, legt das Patent '828 eine neue Architektur dar, um diese Fähigkeit zu erreichen. Diese neue Architektur bietet jedoch keine Mehrfach-Adressierbarkeit, d. h. verschiedene Möglichkeiten einer Adressierung von Registern in der Registerdatei auf der Grundlage des Anweisungstyps, z. B. traditioneller skalarer, traditioneller Vektor- oder ein neuer Anweisungstyp.
  • Eine oder mehrere veranschaulichende Ausführungsformen, die hierin sowie im U. S. Patent mit der Nr. 7 877 582 beschrieben werden, stellen eine mehrfach adressierbare Registerdatei bereit. Eine derartige mehrfach adressierbare Registerdatei kann in einem Prozessor eines Datenverarbeitungssystems umgesetzt werden. Ein derartiges Datenverarbeitungssystem kann einen oder mehrere Prozessoren haben, wobei jeder Prozessor oder eine Untergruppe von Prozessoren die mehrfach adressierbare Registerdatei der veranschaulichenden Ausführungsformen umsetzen kann. Die Typen von Datenverarbeitungssystemen, in denen Prozessoren eine mehrfach adressierbare Registerdatei gemäß einer oder mehreren veranschaulichenden Ausführungsformen haben, können sich beträchtlich voneinander unterscheiden, und daher kann die vorliegende Beschreibung nicht auf jede derartige mögliche Prozessorarchitektur eingehen. Zu Veranschaulichungszwecken wird jedoch 2 als ein Beispiel für einen Typ von Datenverarbeitungssystem bereitgestellt, in dem die mehrfach adressierbare Registerdatei von einer oder mehreren veranschaulichenden Ausführungsformen umgesetzt werden kann.
  • Unter folgender Bezugnahme auf 2 wird ein Blockschaubild eines beispielhaften Datenverarbeitungssystems gezeigt, in dem Aspekte von einer oder mehreren veranschaulichenden Ausführungsformen umgesetzt werden können. Das Datenverarbeitungssystem 200 ist ein Beispiel für einen Computer, in dem sich ein vom Computer verwendbarer Code oder Anweisungen befinden können, welche die Prozesse für eine oder mehrere veranschaulichende Ausführungsformen der vorliegenden Erfindung umsetzen.
  • In dem dargestellten Beispiel verwendet das Datenverarbeitungssystem 200 eine Hub-Architektur mit Northbridge und Speicher-Controller-Hub (NB/MCH) 202 und Southbridge und Eingabe/Ausgabe-(E/A)Controller-Hub (SB/ICH) 204. Die Verarbeitungseinheit 206, der Hauptspeicher 208 und der Grafikprozessor 210 sind mit dem NB/MCH 202 verbunden. Der Grafikprozessor 210 kann mit dem NB/MCH 202 über einen beschleunigten Grafikanschluss (AGP) verbunden sein.
  • In dem dargestellten Beispiel ist der lokale Netzwerk-(LAN)Adapter 212 mit dem SB/ICH 204 verbunden. Der Audio-Adapter 216, der Tastatur- und Maus-Adapter 220, der Modem 222, der Nur-Lese-Speicher (ROM) 224, das Festplattenlaufwerk (HDD) 226, das CD-ROM-Laufwerk 230, die Universal-Serial-Bus-(USB)Anschlüsse und weitere Datenübertragungsanschlüsse 232 und PCI/PCIe-Einheiten 234 sind mit dem SB/ICH 204 über den Bus 238 und den Bus 240 verbunden. Zu PCI/PCIe-Einheiten können beispielsweise Ethernet-Adapter, Add-in-Karten und PC-Karten für Notebook-Computer gehören. PCI verwendet einen Karten-Bus-Controller, PCIe hingegen nicht. Der ROM 224 kann beispielsweise ein binäres Flash-Eingabe/Ausgabe-System (BIOS) sein.
  • Das HDD 226 und das CD-ROM-Laufwerk 230 sind mit dem SB/ICH 204 über den Bus 240 verbunden. Das HDD 226 und das CD-ROM-Laufwerk 230 können zum Beispiel eine Integrated Drive Electronics-(IDE) oder Serial Advanced Technology Attachment-(SATA)Schnittstelle verwenden. Die Super I/O-(SIO)Einheit 236 kann mit dem SB/ICH 204 verbunden sein.
  • Auf der Verarbeitungseinheit 206 wird ein Betriebssystem ausgeführt. Das Betriebssystem koordiniert und stellt eine Steuerung von verschiedenen Komponenten in dem Datenverarbeitungssystem 200 in 2 bereit. Als Client kann das Betriebssystem ein im Handel erhältliches Betriebssystem wie Microsoft® Windows® XP (Microsoft und Windows sind Marken von Microsoft Corporation in den Vereinigten Staaten, anderen Ländern oder beiden) oder das Linux®-Betriebssystem sein (Linux ist eine Marke von Linus Torvalds in den Vereinigten Staaten, anderen Ländern oder beiden). Ein objektorientiertes Programmiersystem wie das Java-Programmiersystem kann zusammen mit dem Betriebssystem ausgeführt werden und stellt Aufrufe an das Betriebssystem aus JavaTM-Programmen oder Anwendungen bereit, die auf dem Datenverarbeitungssystem 200 ausgeführt werden (Java ist eine Marke von Sun Microsystems, Inc. in den Vereinigten Staaten, anderen Ländern oder beiden).
  • Als Server kann das Datenverarbeitungssystem 200 zum Beispiel ein IBM® eServerTM System p®-Computersystem sein, welches das Advanced Interactive Executive-(AIX®)Betriebssystem oder das Linux®-Betriebssystem ausführt (eServer, System p® und AIX sind Marken der International Business Machines Corporation in den Vereinigten Staaten, anderen Ländern oder beiden). Das Datenverarbeitungssystem 200 kann ein symmetrisches Multiprozessor-(SMP)System mit einer Vielzahl von Prozessoren in der Verarbeitungseinheit 206 sein wie der POWER®-Prozessor, der von International Business Machines Corporation in Armonk, New York erhältlich ist. Alternativ kann ein Einzelprozessorsystem verwendet werden.
  • Anweisungen für das Betriebssystem, das objektorientierte Programmiersystem und Anwendungen oder Programme befinden sich auf Speichereinheiten wie dem HDD 226 und können zum Ausführen durch die Verarbeitungseinheit 206 in den Hauptspeicher 208 geladen werden. Die Prozesse für eine oder mehrere veranschaulichende Ausführungsformen können durch die Verarbeitungseinheit 206 unter Verwendung von computerlesbarem Programmcode ausgeführt werden, der in sich in einem Speicher befinden kann wie beispielsweise dem Hauptspeicher 208, dem ROM 224 oder zum Beispiel in einer oder mehreren Peripherie-Einheiten 226 und 230.
  • Ein Bussystem wie beispielsweise der Bus 238 oder der Bus 240, wie in 2 gezeigt, kann sich aus einem oder mehreren Bussen zusammensetzen. Selbstverständlich kann das Bussystem unter Verwendung jedes beliebigen Typs von Datenübertragungsstruktur oder -architektur umgesetzt werden, der eine Datenübertragung zwischen verschiedenen Komponenten oder Einheiten bereitstellt, die an die Struktur oder Architektur angeschlossen sind. Eine Datenübertragungseinheit wie beispielsweise der Modem 222 oder der Netzwerk-Adapter 212 von 2 kann eine oder mehrere Einheiten enthalten, die zum Senden und Empfangen von Daten verwendet werden. Ein Speicher kann zum Beispiel der Hauptspeicher 208, der ROM 224 oder ein Zwischenspeicher sein, wie er im NB/MCH 202 in 2 zu finden ist.
  • Fachleuten wird klar sein, dass die Hardware in den 1 bis 2 je nach Umsetzung unterschiedlich sein kann. Weitere interne Hardware- oder Peripherie-Einheiten wie Flash-Speicher, gleichwertiger nicht-flüchtiger Speicher oder optische Plattenlaufwerke und dergleichen können zusätzlich zu oder anstelle der Hardware verwendet werden, die in 1 bis 2 dargestellt ist. Außerdem können die Prozesse von einer oder mehreren veranschaulichenden Ausführungsformen auf ein anderes Mehrfachprozessor-Datenverarbeitungssystem als das vorher erwähnte SMP-System angewendet werden, ohne von dem Erfindungsgedanken und dem Schutzumfang von einem oder mehreren Aspekten der vorliegenden Erfindung abzuweichen.
  • Des Weiteren kann das Datenverarbeitungssystem 200 die Form von jedem einer Anzahl von verschiedenen Datenverarbeitungssystemen annehmen, einschließlich von Client-Datenverarbeitungseinheiten, Server-Datenverarbeitungseinheiten, einem Tablet-Computer, Laptop-Computer, Telefon oder einer anderen Datenübertragungseinheit, einem Personal Digital Assistant (PDA) oder dergleichen. In einigen veranschaulichenden Beispielen kann das Datenverarbeitungssystem 200 eine tragbare Datenverarbeitungseinheit sein, die mit einem Flash-Speicher konfiguriert ist, um beispielsweise nicht-flüchtigen Speicher zum Speichern von Betriebssystemdateien und/oder vom Benutzer erzeugten Daten bereitzustellen. Im Wesentlichen kann das Datenverarbeitungssystem 200 jedes bekannte oder später entwickelte Datenverarbeitungssystem ohne Architektureinschränkung sein.
  • Wie oben erläutert, stellen eine oder mehrere veranschaulichende Ausführungsformen eine mehrfach adressierbare Registerdatei bereit. Eine oder mehrere veranschaulichende Ausführungsformen weisen gegenüber bekannten Registerdateien eine Verbesserung durch Steigern der Leistungsfähigkeit der Registerdatei auf, indem eine große Anzahl von Registern und eine Fähigkeit zum Adressieren einer ersten Untergruppe von Registern mit einer ersten Gruppe von Anweisungen, zum Adressieren einer zweiten Untergruppe von Registern mit einer zweiten Gruppe von Anweisungen und zum Adressieren der gesamten Registerdatei mit mindestens einer dritten Gruppe von Anweisungen bereitgestellt wird. Gemäß einer oder mehreren veranschaulichenden Ausführungsformen sind die ersten und zweiten Untergruppen von Registern nicht überlappend und verweisen auf unterschiedliche Registerdateibereiche wie beispielsweise „Register für Anweisungen vom Typ 1” und „Register für Anweisungen vom Typ 2”. Auf ein Register, das in der Untergruppe enthalten ist, die Anweisungen des Typs 1 entspricht, kann von Anweisungen des Typs 2 nicht zugegriffen werden und umgekehrt. In einer veranschaulichenden Ausführungsform entsprechen die Typ-1-Anweisungen FPU- oder traditionellen Gleitkomma-Anweisungen der IBM Power Architecture, die Typ-2-Anweisungen entsprechen traditionellen VMX-Anweisungen der IBM Power Architecture und die Typ-3-Anweisungen entsprechen VSX-Anweisungen der IBM Power Architecture.
  • Die Mechanismen von einer oder mehreren veranschaulichenden Ausführungsformen unterscheiden sich von bekannten, in Gruppen zusammengefassten Registerdateien, Operanden-Unterbereichen in Registerdateien, Prozessoren mit „Verschieben zwischen Registerdatei”-Anweisungen und VMX 128-Registerdateien, die eine Form von Unterbereichen mit nicht zusammenhängenden Registerkennungen verwenden. Bei Operanden-Unterbereichen gibt es üblicherweise einen Unterbereich für nur einen Operanden, d. h. einen Anweisungstyp. Es gibt keinen anderen Anweisungstyp mit einer anderen Form, der alle Register in der Registerdatei adressieren kann, und es gibt keinen anderen Bereich von Registern für einen anderen Typ von Anweisungen, d. h. es gibt keine Funktionalität für Mehrfach-Adressierbarkeit. In Gruppen zusammengefasste Registerdateien weisen eine große Registerdatei mit Unterbereichen auf, die durch verschiedene Anweisungen adressiert werden können, aber es gibt keinen Anweisungstyp, der alle Register in der Registerdatei adressieren kann. Im Gegenteil, wenn Operationen an der vollständigen Gruppe von Registern ausgeführt werden sollen, müssen Verschiebe-/Kopier-Operationen an der Registerdatei ausgeführt werden. Diese Verschiebe-/Kopier-Operationen sind für gewöhnlich langsamere Operationen, für die spezielle Planungsmechanismen erforderlich sein können.
  • Im Gegensatz dazu stellen eine oder mehrere veranschaulichende Ausführungsformen Zugriff auf die Register der mehrfach adressierbaren Registerdatei auf der Grundlage des Anweisungstyps bereits, z. B. traditionelle Gleitkomma-, traditionelle skalare, Vektor-Skalar-, verstärkte oder erweiterte Vektor-Skalar-Anweisungen usw. Statt einer Untergruppe von Registern, die einem Operandentyp zugehörig sind, stellt die mehrfach adressierbare Registerdatei von einer oder mehreren veranschaulichenden Ausführungsformen mehrere nicht zusammenhängende Untergruppen von Registern bereit. Die mehreren Untergruppen von Registern in der mehrfach adressierbaren Registerdatei, die den verschiedenen Typen von Anweisungen zugehörig sind, sind zusammenhängende Bereiche von Registern. Während Anweisungen von verschiedenen Typen auf nicht-überlappende Untergruppen von Registern in der mehrfach adressierbaren Registerdatei zugreifen können, kann außerdem bei einer oder mehreren veranschaulichenden Ausführungsformen mindestens ein Ausführungstyp auch auf alle Register in der mehrfach adressierbaren Registerdatei zugreifen.
  • In einer bestimmten Ausführungsform gemäß einem Aspekt der vorliegenden Erfindung können Anweisungen von verschiedenen Typen auf nichtüberlappende Untergruppen von Registern in der mehrfach adressierbaren Registerdatei zugreifen, und mehrere Typen von Anweisungen (z. B. skalare 64-Bit-Gleitkommaanweisungen mit einfacher Präzision und 32-Bit-Vektor-Gleitkommaanweisungen mit einfacher Präzision) können auf alle Register in der mehrfach adressierbaren Registerdatei zugreifen.
  • In einem weiteren Aspekt der vorliegenden Erfindung erweitern eine oder mehrere veranschaulichende Ausführungsformen bekannte Skalar-/Vektor-Registerdateien durch Einschließen einer Fähigkeit zum Ausführen von skalaren, Vektor- und Gleitkomma-Anweisungen unter Verwendung derselben Registerdatei, wobei der Abschnitt der Registerdatei, auf den zugegriffen werden soll, auf der Grundlage des Anweisungstyps, der ausgeführt wird, dynamisch ermittelt wird. Da eine oder mehrere veranschaulichende Ausführungsformen gegenüber bekannten Skalar-/Vektor-Registerdateien und den Prozessoren, die derartige Skalar-/Vektor-Registerdateien verwenden, eine Verbesserung aufweisen, wird ein Verständnis der grundlegenden Funktionsweise eines derartigen Prozessors und einer derartigen Skalar-/Vektor-Registerdatei vermittelt: Die folgende Beschreibung von 3A und 3B verweist auf das gemeinsam erteilte U. S.-Patent mit der Nr. 6 839 828 als ein Beispiel für eine derartige bekannte Skalar-/Vektor-Registerdatei und einen derartigen bekannten Prozessor.
  • 3A ist ein Beispiel-Schaubild eines Prozessors, der so ausgelegt ist, dass er skalare und Vektor-Anweisungen unter Verwendung einer Registerdatei, die skalare und Vektor-Daten und Adressinformationen speichert, gemäß dem U. S.-Patent mit der Nr. 6 839 828 ausführt. In dem in 3A gezeigten Prozessor wurden skalare und SIMD-Datenpfad-Verarbeitungsfunktionen mit dem SIMD-Vektor-Datenpfad kombiniert, wodurch jetzt eine skalare Verarbeitung zusammengefasst wird. Eine skalare Verarbeitung erfolgt in einer der Einheiten, die zum Verarbeiten eines Elements eines Vektordatentyps verwendet werden. Diese Dateneinheit wird als der „bevorzugte Bereich” bezeichnet und stellt Adressen für die Verzweigungseinheit und die Lade-/Speichereinheit bereit, wie im Folgenden beschrieben wird. Aus Gründen der Einfachheit enthält die Darstellung des vereinheitlichten Prozessors in 3A nur Datenflussverbindungen und keine Steuersignalverbindungen und externen Systemschnittstellen, z. B. Adressleitungen, Verbindungen mit dem Speicher usw. Die letzteren Verbindungen werden vorausgesetzt.
  • Der vereinheitlichte Prozessor von 3A enthält eine Anweisungsabrufeinheit 300, die Anweisungen und Daten aus der Speicherhierarchie (nicht gezeigt) des Systems auf der Grundlage des Werts des Programmzählers der Abrufeinheit abruft. Abgerufene Anweisungen werden durch die Anweisungsabrufeinheit 300 für die Anweisungsentschlüsselungseinheit 302 bereitgestellt, wo sie entschlüsselt und in entsprechende Steuersignale zum Steuern von nachgeschalteten Einheiten erweitert werden. Die erweiterte Anweisung wird an die Ausgabe-/Verzweigungseinheit 304 übergeben, wo sie in eine Anweisungswarteschlange gestellt wird, um auf eine Verfügbarkeit von entsprechenden Funktionseinheiten für die Verarbeitung zu warten. Für den Fall, dass die Anweisung eine Verzweigung ist, wird die Steuerung an die Anweisungsabrufeinheit 300 zurückgegeben, die die Verzweigungszielanweisung abruft, und der vorgenannte Prozess wird wiederholt.
  • Wenn im Fall einer skalaren Operation eine Funktionseinheit (d. h. eine Festkommaeinheit oder Gleitkommaeinheit) verfügbar wird, oder wenn im Fall einer Vektor-Operation mehrere Funktionseinheiten verfügbar werden, gibt die Ausgabe-/Verzweigungseinheit 304 die Anweisung an die eine oder die mehreren Funktionseinheiten aus. Bevor eine Berechnung ausgeführt werden kann, werden Quellen-Operandendaten durch Zugreifen auf eine Skalar-Vektor-Registerdatei (SVRF) 310 abgerufen. Üblicherweise werden mehrere Typen von Funktionseinheiten bereitgestellt, z. B. Festkommaeinheiten, Gleitkommaeinheiten und eine Lade-/Speicher-Einheit (LSU) 306, wobei die Letztere die durch die aktuelle Anweisung identifizierten Daten aus der Speicherhierarchie abruft und in dieser speichert. Die LSU 306 speichert das Ergebnis von Speicherzugriffen über den Bus 308 wieder auf die kombinierte SVRF 310 zurück. In dieser Ausführungsform speichert die SVRF 310 Datenleitungen, die aus vier skalaren Datenwörtern bestehen, wobei jede Leitung so partitioniert ist, dass jedes der vier Datenwörter einem anderen Funktionseinheitenpaar (oder einer anderen Funktionseinheitengruppe) 311 bis 314 zugehörig ist, wobei jedes Funktionseinheitenpaar wie gezeigt eine Festkommaeinheit und eine Gleitkommaeinheit enthält. Die Funktionseinheitenpaare stellen zusammen, worauf hierin als eine parallele Vektoreinheit verwiesen wird.
  • Die Ausgabelogik weist die SVRF 310 an, die Inhalte einer Datenleitung an die entsprechende Funktionseinheit in jeder Gruppe von Funktionseinheiten zur Verarbeitung zu übergeben. Einem Ausgabebereich kann jede Anzahl und jeder Typ von Funktionseinheiten zugehörig sein, einschließlich Festkommaeinheit, Gleitkommaeinheit, Vergleichseinheit, Logik-Operationseinheit, Verschiebeeinheit usw., doch ist er nicht darauf beschränkt. Die bestimmte Funktionseinheit in der Gruppe, die das Datenwort verwendet, hängt von der Anweisung ab, die ausgeführt werden soll, und wird durch ein Signal von der Ausgabe-/Verzweigungseinheit 304 gesteuert. Wenn daher die Anweisung erfordert, dass die Festkommaeinheiten die Daten verarbeiten, werden die Daten an die Festkommaeinheiten 319 bis 322 über die Leitungen 315 bis 318 übergeben. Wenn die Anweisungen die Gleitkommaeinheiten 327 bis 330 erforderlich machen, werden die Daten über die Leitungen 323 bis 326 übergeben. Wenn andere Funktionseinheitentypen vorhanden wären, würden die Daten auf ähnliche Weise an sie übergeben. Wenn jede angegebene Funktionseinheit ihre Operation an den Eingabedaten ausgeführt hat, gibt sie ein Ergebnis an die SVRF 310 zurück, wo es gespeichert wird, bis es von der LSU 306 angefordert oder an die Funktionseinheiten zur weiteren Bearbeitung übergeben wird.
  • Die Operationen, die durch die Funktionseinheiten ausgeführt werden sollen, und die Funktionseinheiten, die diese Operationen ausführen sollen, werden durch Steuersignale ermittelt, die von der Ausgabe-/Verzweigungseinheit 304 bereitgestellt werden. Wenn eine Operation die LSU 306 anweist, Daten aus der SVRF 310 auszulesen, werden die Daten über den Datenbus 332 übergeben. Außerdem wird die Adresse, unter der die Daten im Speicher gespeichert werden sollen, der LSU 306 über den Bus 331 übergeben. In der Ausführungsform von 3A übergibt der Bus 331 Informationen aus einem Segment (D) der SVRF 310, das dem Funktionseinheitenpaar 314 zugehörig ist (wobei dieses Paar als ein bevorzugter Bereich bezeichnet wird, wie später beschrieben). Der bevorzugte Bereich könnte jede der Funktionseinheiten sein, entweder indem sie als ein bevorzugter Bereich definiert werden, oder mittels dynamischem Ermitteln eines bevorzugten Bereichs, entweder durch Einrichten eines Steuerregisters, indem ein Bereich in dem Anweisungswort angegeben wird, oder durch Ermitteln unter Verwendung beliebiger anderer Mittel, z. B. durch die Ausgabeeinheit zum Ausgabezeitpunkt. Die Bezeichnung eines bevorzugten Bereichs gestattet ein selektives Ausschalten von Funktionseinheiten, was zu Energieeinsparungen führt.
  • Bis zu diesem Punkt gilt die beschriebene Operation des vereinheitlichten Prozessors für skalare und Vektor-Operationen. Das heißt, wenn eine auszuführende Operation eine skalare Operation ist, die somit eine Operation und Ausgabe von nur einem Funktionseinheitenpaar erfordert, können die restlichen Funktionseinheitenpaare trotzdem angewiesen werden, dieselbe Operation an Daten auszuführen, die von der Skalar-Vektor-Registerdatei an sie übergeben werden. Ein derartiger Ansatz ermöglicht eine einfache Konstruktion, da ein Anfordern, dass verschiedene Funktionseinheiten gleichzeitig verschiedene Operationen ausführen, notwendigerweise zu komplizierteren Konstruktionsüberlegungen führt. Desgleichen führt jedes Funktionseinheitenpaar für eine Vektor-Operation dieselbe Operation (oder im Wesentlichen dieselbe Operation als Teil einer eng verbundenen Operation oder einer Kombination von eng verbundenen Operationen, die von einer einzigen Anweisung angegeben werden) an eingehenden Daten aus.
  • Skalare und Vektor-Operationen unterscheiden sich durch die Art und Weise, wie zugehörige Adressinformationen gemäß der Interpretation der Operation verwendet werden. Die Interpretation der Operation kann ein direktes Ergebnis ihres Operationscodes sein, das heißt, verschiedene Operationscodes können für verschiedene Anweisungen verfügbar sein (z. B. „skalares Byte laden”, „skalares Wort laden”, „skalaren Vektor laden”), oder sie können von einem anderen Teil des Systems abhängen, z. B. Modus-Tag-Bits zum Interpretieren eines einzelnen „Lade”-Operationscodes. Selbst skalare Daten belegen einen Adressbereich von Bytes (wenn auch weniger Bytes als ein Vektor), und es bestehen auch Variationen, wie ein Laden/Speichern ausgeführt werden kann.
  • Im Gegensatz zu anderen Funktionseinheiten, die üblicherweise einem bestimmten Bereich in der SVRF 310 zugewiesen werden, arbeitet die LSU 306 auf der gesamten Datenleitung oder einer Untergruppe davon, die in der SVRF 310 enthalten ist. Die LSU 306 arbeitet entweder im Lade- oder Speicherbetriebsmodus, abhängig von der Anweisung, die durch die Ausgabe-/Verzweigungseinheit 304 ausgegeben wird. Im Lademodus empfängt die LSU 306 Adressinformationen von dem bevorzugten Bereich der SVRF 310 unter Verwendung des Busses 331 und lädt Daten aus der angegebenen Adresse. Wenn eine Anweisung zum Laden eines Vektors ausgeführt wird, lädt die Lade-Operation eine gesamte Datenleitung unter Verwendung des Busses 308 aus dem Speicher in die SVRF 310. Wenn eine skalare Lade-Operation angegeben ist, lädt die Lade-Operation mindestens die Anzahl von Bits, die der Größe des skalaren Typs entspricht (üblicherweise Byte, halbes Wort, Wort usw.). Zusätzliche Bits können gemäß Umsetzungs-Wahlmöglichkeiten geladen werden, oder ungültige Daten oder Daten, die auf einen Standardwert initialisiert werden (wie zum Beispiel „0”, jedoch nicht darauf beschränkt) können für die Bits außerhalb des Bereichs des angeforderten Datentyps bereitgestellt werden. In einer Ausführungsform enthält die Operation „Skalar laden” einen Ausrichtungsschritt, wobei ein angeforderter skalarer Wert in dem bevorzugten Bereich ausgerichtet wird, bevor er in der SVRF 310 gespeichert wird. In einer weiteren Ausführungsform wird die Ausrichtung programmatisch unter Verwendung einer Folge von einer oder mehreren Anweisungen ausgeführt.
  • Im Speicherbetriebsmodus empfängt die LSU 306 zu speichernde Daten von der SVRF 310 über den Bus 332 und Adressinformationen aus dem bevorzugten Bereich von der SVRF 310 unter Verwendung des Busses 331 und speichert Daten an der angegebenen Adresse.
  • 3B zeigt einen flexibleren Ansatz zum Auswählen von skalaren Daten für Informationen, wie er von der Verzweigungseinheit und LSU gemäß dem U. S.-Patent mit der Nr. 6 839 828 verwendet werden kann. Gemäß dieser Ausführungsform sind die verschiedenen Segmente der SVRF 310 durch einen Multiplexer 333 auswählbar, der mit einer Steuereingabe über die Leitung 334 von der Ausgabe-/Verzweigungseinheit 304 gesteuert werden kann (die üblicherweise von einem Feld in dem Anweisungswort der Anweisung kommen kann, die ausgeführt werden soll). Alternative Ausführungsformen können ein durch Software gesteuertes Register für besondere Zwecke oder einen Bootzeit-Parameter zum Bereitstellen der Steuereingabe des Multiplexers enthalten, sie sind aber nicht darauf beschränkt.
  • Die in 3B gezeigte Ausführungsform arbeitet wie folgt: Wenn ein skalarer Datenwert entweder von der Lade-/Speichereinheit zum Bereitstellen einer Speicheradresse für eine Operation oder von der Verzweigungseinheit zum Bereitstellen von z. B. einer Verzweigungszieladresse oder einer Verzweigungsbedingung angefordert wird, oder von einer Verschiebeeinheit, die anfordert, dass eine Einzelverschiebungszählung auf alle Elemente angewendet wird, oder jede andere Einheit, die einen skalaren Datenwert als ihre Eingabe anfordern kann, wird der Multiplexer 333 durch die Steuereingabe so gesteuert, dass er einen der Bereiche A, B, C oder D als die skalare Eingabe für die Operation auswählt. Somit kann gemäß dieser Ausführungsform jedes der Funktionseinheitenpaare als ein „bevorzugter Bereich” ausgewählt werden, was ein Abstimmen von Verarbeitungsoperationen, ein Verringern der Notwendigkeit von Übertragungsoperationen zwischen mehreren Bereichen und ein Erhöhen der Anzahl von Bereichen ermöglicht, in denen skalare Werte gespeichert werden können.
  • Somit beschreibt das U. S.-Patent mit der Nr. 6 839 828 zwei verschiedene Umsetzungen eines bevorzugten Bereichs für skalare Verarbeitung. Die erste ist eine fest verdrahtete Umsetzung, wobei der bevorzugte Bereich in der Konstruktionsphase ausgewählt wird, und ein variabler Ansatz, wobei der bevorzugte Bereich im Betrieb während der Ausführung ausgewählt werden kann. Wie im Patent '828 erwähnt, kann die Angabe eines bevorzugten Bereichs zum Konstruktionszeitpunkt die Umsetzung insofern vereinfachen, als die oben beschriebene Auswahl nicht bereitgestellt werden muss. Des Weiteren kann die Verwendung von identischen Funktionseinheitenpaaren leistungsstärker sein, selbst mit den geringen indirekten Kosten von unnötigen Schaltungen, die für den bevorzugten Bereich niemals eingesetzt werden.
  • Obwohl die Registerdatei-Mechanismen des U. S.-Patents mit der Nr. 6 839 828 und andere Registerdatei-Mechanismen gestatten, dass eine einzige Registerdatei sowohl für skalare als auch Vektor-Operationen verwendet wird, stellen diese Registerdatei-Mechanismen keine Mehrfach-Adressierbarkeit bereit, sondern nur die Fähigkeit, verschiedene Typen von Anweisungen/Daten in einer einzigen Registerdatei zu speichern. Eine komplexe Architektur und/oder Operationen wurden zum Bearbeiten der verschiedenen Typen von Anweisungen/Daten in der einzelnen Registerdatei bereitgestellt.
  • Im Gegensatz dazu stellen eine oder mehrere veranschaulichende Ausführungsformen eine mehrfach adressierbare Registerdatei bereit, die sowohl traditionelle Anweisungen als auch eine oder mehrere neue oder erweiterte Typen von Anweisungen gestattet, um auf die Register der mehrfach adressierbaren Registerdatei zuzugreifen. Mit den Mechanismen von einer oder mehreren veranschaulichenden Ausführungsformen kann eine einzelne Registerdatei unter Verwendung von skalaren und Single Instruction, Multiple Data-(SIMD) oder Vektor-Anweisungen adressiert werden. Das heißt, dass Untergruppen von Registern in einer mehrfach adressierbaren Registerdatei gemäß einer oder mehreren veranschaulichenden Ausführungsformen mit verschiedenen Anweisungsformen adressiert werden können, z. B. skalare Anweisungen, SIMD- oder Vektor-Anweisungen usw., während die gesamte Gruppe von Registern mit einer weiteren Form von Anweisungen adressiert werden kann, auf die hierin als Vector-Scalar Extension-(VSX)Anweisungen Bezug genommen wird. Die Typen von Operationen, d. h. die Operationengruppe, die für die gesamte Gruppe von Registern unter Verwendung der VSX-Anweisungsform ausgeführt werden kann, gleichen im Wesentlichen denjenigen der Operationengruppen der Register-Untergruppen.
  • Die mehrfach adressierbare Registerdatei von einer oder mehreren veranschaulichenden Ausführungsformen ermöglicht es traditionellen Anweisungen, auf Untergruppen von Registern in der mehrfach adressierbaren Registerdatei zuzugreifen, wogegen neue oder erweiterte Anweisungen, z. B. die VSX-Anweisungen, auf den gesamten Bereich von Registern in der mehrfach adressierbaren Registerdatei zugreifen können. Des Weiteren sind die Datenformate der traditionellen Anweisungen mit den Datenformaten der VSX-Anweisungen kompatibel. Somit können Daten, die durch traditionelle Anweisungen erzeugt werden, durch die VSX-Anweisungen verarbeitet werden und umgekehrt.
  • Zum Beispiel gestatten eine oder mehrere veranschaulichende Ausführungsformen traditionellen Gleitkommaanweisungen (skalaren Operationen) Werte zu verarbeiten, die in einer ersten Untergruppe von Registern einer Registerdatei gespeichert sind, z. B. VSX-Register 0 bis 31; traditionellen VMX-Anweisungen (Vektor-Anweisungen) eine zweite Untergruppe von Registern in der Registerdatei zu verarbeiten, z. B. VSX-Register 32 bis 63 (wobei weiterhin auf die Register 0 bis 31 in den eigentlichen Anweisungen verwiesen wird); und VSX-Anweisungen (Vektor-Skalar-Operationen) alle Register der Registerdatei zu verarbeiten, z. B. VSX-Register 0 bis 63. Eine oder mehrere der veranschaulichenden Ausführungsformen gestatten ferner, dass Anweisungen von verschiedenen Typen Daten unter Verwendung der verschiedenen Untergruppen von Registern und der Fähigkeit der VSX-Anweisungen, auf alle Register der Registerdatei zuzugreifen, gemeinsam nutzen. Zum Beispiel können Daten von VSX- und traditionellen Gleitkommaanweisungen durch Speichern von und Zugreifen auf Daten in den VSX-Registern 0 bis 31 gemeinsam genutzt werden. Desgleichen ermöglichen eine oder mehrere veranschaulichende Ausführungsformen, dass Daten von traditionellen VMX-Anweisungen und VSX-Anweisungen in den VSX-Registern 32 und 63 gemeinsam genutzt werden, während weiterhin Programme ausgeführt werden, die entweder traditionelle Gleitkomma- oder traditionelle VMX-Anweisungen oder beides ohne jede Modifizierung verwenden. Des Weiteren gestatten eine oder mehrere veranschaulichende Ausführungsformen ein Verknüpfen von Code-Modulen, die entweder traditionelle Gleitkomma- oder traditionelle VMX-Anweisungen oder beides ohne jede Modifizierung verwenden, mit Code-Modulen, die die neuen VSX-Anweisungen einsetzen sowie Daten zwischen Code-Modulen gemeinsam nutzen, die Daten mit traditionellen Anweisungen verarbeiten und denjenigen, die VSX-Anweisungen verwenden.
  • In einer bestimmten Ausführungsform enthalten die VSX-Anweisungen gemäß einem Aspekt der vorliegenden Erfindung skalare 64-Bit-Gleitkommaanweisungen mit einfacher Präzision und 32-Bit-Vektor-Gleitkommaanweisungen mit einfacher Präzision sowie möglicherweise weitere Anweisungen. Beispiele für skalare 64-Bit-Gleitkommaanweisungen mit einfacher Präzision werden in RFC02182.r6: VSX Scalar Single-Precision (VSX Skalar mit einfacher Präzision) beschrieben, das als Teil der ausführlichen Beschreibung aufgenommen ist.
  • 4 ist ein Beispiel für ein Schaubild eines Prozessors, in dem eine mehrfach adressierbare Registerdatei gemäß einer veranschaulichenden Ausführungsform verwendet wird. Wie in 4 gezeigt, gleicht der Prozessor 400 in der Konfiguration dem Prozessor in 3A mit Ausnahme der Konfiguration und Verwendung der Registerdatei 440. Die Anweisungsabrufeinheit 410, die Ausgabe-/Verzweigungseinheit 430, die Funktionseinheiten 450 bis 480 der Funktionseinheitenpaare (oder Funktionseinheitengruppen) 482 bis 488 und die Lade-/Speichereinheit 490 arbeiten alle auf eine ähnliche Weise wie oben in Bezug auf 3A beschrieben. Die. Anweisungsentschlüsselungseinheit 420 hat eine zusätzliche Logik, wie im Folgenden beschrieben, die zum Entschlüsseln von Anweisungen von drei verschiedenen Typen verwendet wird: Vektor-, skalarer und Vektor-Skalar-Anweisungstyp. In einer veranschaulichenden Ausführungsform sind diese drei verschiedenen Anweisungstypen Vector-Multimedia Extension-(VMX)Anweisungen, Gleitkomma-(FP)Anweisungen und Vector-Scalar Extension-(VSX)Anweisungen. FP-Operationen sind im Fachgebiet allgemein bekannt. VMX-Anweisungen werden im POWER 6-Prozessor verwendet, der von International Business Machines Corporation in Armonk, New York, erhältlich ist, und stellen Einzelanweisungen bereit, die mehrere Datenelemente verarbeiten. VSX-Anweisungen werden im Folgenden ausführlicher beschrieben.
  • Auf der Grundlage der entschlüsselten Anweisungen greift die Anweisung entweder auf einen Unterbereich der Registerdatei 440 oder den gesamten Registerbereich in der Registerdatei 440 zu. Wenn durch die Anweisungsentschlüsselungseinheit 420 ermittelt wurde, dass die Anweisung eine traditionelle Gleitkommaanweisung ist, wird auf einen ersten Unterbereich 442 der Registerdatei 440 zugegriffen, wobei die Daten für die entsprechenden Funktionseinheiten 450 bis 480 zur Verarbeitung bereitgestellt werden. Wenn durch die Anweisungsentschlüsselungseinheit 420 ermittelt wurde, dass die Anweisung eine traditionelle VMX-Vektor-Anweisung ist, wird auf einen zweiten Unterbereich 444 der Registerdatei 440 zugegriffen, wobei die Daten wiederum für die entsprechenden Funktionseinheiten 450 bis 480 zur Verarbeitung bereitgestellt werden. Wenn durch die Anweisungsentschlüsselungseinheit 420 ermittelt wurde, dass die Anweisung eine VSX-Anweisung ist, kann auf den gesamten Bereich 446 der Registerdatei 440 zugegriffen werden, wobei die Daten für die entsprechenden Funktionseinheiten 450 bis 480 zur Verarbeitung bereitgestellt werden. Abhängig von der bestimmten VSX-Anweisung, die ausgeführt wird, kann eine VSX-Anweisung, die auf beliebige Register 446 zugreift, entweder die gesamte Breite des Registers verwenden, um Eingabedaten zu erhalten (was einer VSX-Vektor-Anweisungen entspricht und Zugriff auf alle Register der Registerdatei 446 in jeder der Operanden-Positionen der Anweisung bereitstellt) oder auf einen Abschnitt davon (der einer VSX-Skalar-Anweisung entspricht und Zugriff auf alle Register der Registerdatei 446 in jeder der Operanden-Positionen der Anweisung bereitstellt, wobei aber nur eine darin enthaltene Untergruppe von Bits verwendet wird).
  • Der erste Unterbereich 442 weist einen ersten Bereich von Bits einer ersten Gruppe von Registern in der Registerdatei 440 auf. Der zweite Unterbereich 444 weist einen zweiten Bereich von Bits einer zweiten Gruppe von Registern in der Registerdatei auf. Der dritte Bereich 446 weist einen gesamten Bereich von Bits der gesamten Gruppe von Registern in der Registerdatei 440 auf. Auf diese Weise kann eine einzige Registerdatei 440 zum Verarbeiten von traditionellen skalaren und traditionellen Vektor-Anweisungen sowie einer kombinierten Gruppe von Vektor-Skalar-Anweisungen verwendet werden, auf die hierin als VSX-Anweisungen Bezug genommen wird.
  • VSX-Anweisungen sind Anweisungen, die auf die gesamte Gruppe von Registern einer Registerdatei 440 zugreifen können. Die VSX-Anweisungsgruppe enthält mehrere Klassen von Anweisungen, einschließlich skalare Gleitkommaanweisungen mit einfacher Präzision, die auf einen 32-Bit-Unterbereich jedes Registers in der gesamten Registerdatei 440 zugreifen; skalare Gleitkommaanweisungen mit einfacher Präzision, die auf einen 64-Bit-Unterbereich jedes Registers in der gesamten Registerdatei 440 zugreifen; skalare Gleitkommaanweisungen mit doppelter Präzision, die auf einen 64-Bit-Unterbereich jedes Registers in der gesamten Registerdatei 440 zugreifen; und Vektor-Anweisungen, die auf den gesamten Bitbereich in der gesamten Registerdatei 440 zugreifen. Die VSX-Anweisungen verwenden einen ausgewählten Registerkennungstyp, z. B. eine 6-Bit-Registerkennung im Gegensatz zu einer traditionellen 5-Bit-Kennung, die von traditionellen skalaren und traditionellen Vektor-Anweisungen verwendet wird.
  • Somit stellen eine oder mehrere veranschaulichende Ausführungsformen eine einzige Skalar-/Vektor-Architektur für eine Registerdatei bereit, die mit traditionellen Architekturen kompatibel ist, die getrennte skalare und Vektor-Registerdateien haben. Eine oder mehrere veranschaulichende Ausführungsformen gestatten ferner das gemeinsame Nutzen des Speicherplatzes des Prozessors durch traditionelle Registerdateien und erweiterte Vektor-Skalar-Registerdateien, ohne dass dies zu einem größeren Speicherchip-Bereich führt. Des Weiteren gestatten eine oder mehrere veranschaulichende Ausführungsformen eine gemeinsame Datennutzung durch traditionelle Programme und Bibliotheken unter Verwendung von traditionellen Anweisungen und Programmen und Bibliotheken (unter Verwendung von traditionellen oder neuen/erweiterten Anweisungen) sowie einen gemeinsamen Einsatz von Code, wodurch Investitionen in eine Code-Abstimmung von traditionellen Anwendungen geschützt werden und die Notwendigkeit vermieden wird, alle Anwendungen neu zu codieren, um die neuen/erweiterten Anweisungen zu verwenden, wenn gestattet wird, dass die neuen/erweiterten Anweisungen dort verwendet werden, wo sie am nutzbringendsten sind. Infolgedessen können teure indirekte Kosten, die man von bekannten Prozessorarchitekturen kennt, die getrennte Registerdateien für skalare und Vektor-Anweisungen verwenden, z. B. Single Instruction, Multiple Data-(SIMD)Anweisungen, sowie die zusätzliche Kosten im Zusammenhang mit komplexen neuen Architekturen zum Bearbeiten von skalaren und Vektor-Anweisungen durch Verwenden einer einzigen Registerdatei vermieden werden.
  • Die Registerdatei 440 setzt sich aus einer Vielzahl von Vektor-Skalar-Registern (VSRs) zusammen, wobei jedes VSR eine Vielzahl von Bits hat. Zum Beispiel kann sich die Registerdatei 440 aus 64 VSRs zusammensetzen, die von VSR[0] bis VSR[63] nummeriert sind, wobei jedes VSR 128 Bits hat, die von 0 bis 127 nummeriert sind. Zu Darstellungszwecken wird angenommen, dass VSRs durchgehend von oben nach unten in der Registerdatei 440 nummeriert sind, wobei die Bits durchgehend von links nach rechts in der Registerdatei 440 nummeriert sind. Dies wird in der im Folgenden erörterten 5 gezeigt.
  • 5 ist ein beispielhaftes Schaubild für eine Vector-Scalar Extension-(VSX)Registerdatei gemäß einer veranschaulichenden Ausführungsform. Die VSX-Registerdatei 500 von 5 kann zum Beispiel als die Registerdatei 440 verwendet werden. Wie in 5 gezeigt, enthält die VSX-Registerdatei 500 eine Vielzahl von Vektor-Skalar-Registern (VSRs) 510, die von VSR[0] bis VSR[63] nummeriert sind. Jedes der VSRs 510 hat eine vorgegebene Anzahl von Bits, die eingerichtet werden kann. In dem dargestellten Beispiel hat jedes VSR 510 128 Bits, die von 0 bis 127 nummeriert sind, um Anweisungen entsprechende Daten zu speichern, wie beispielsweise zum Übergeben von Parametern.
  • Ein erster Unterbereich von Bits 520 in einer ersten Gruppe von Registern 530 der Registerdatei 500 ist einem ersten Anweisungstyp zugehörig, wie beispielsweise einer skalaren oder Gleitkommaanweisung. Ein zweiter Unterbereich von Bits 540 in einer zweiten Gruppe von Registern 550 in der Registerdatei 500 ist einem zweiten Anweisungstyp zugehörig, wie beispielsweise einer Vektor-, SIMD- oder VMX-Anweisung. Ein dritter Bereich von Bits 560 in der gesamten Gruppe von Registern 570 der Registerdatei 500 ist einem dritten Anweisungstyp zugehörig, wie beispielsweise einer VSX-Anweisung.
  • Aus 5 lässt sich erkennen, dass sich die VSX-Registerdatei 500 von anderen Registerdateien in anderen System dadurch unterscheidet, dass sie drei verschiedenen Typen von Anweisungen gestattet, auf Register der VSX-Registerdatei 500 auf der Grundlage zugehöriger Registerbereiche und Bitbreiten in den Registern zuzugreifen. Andere Registerdateien erfordern, dass ein Zugriff auf die gesamte Registerdatei durch alle Typen von Anweisungen auf dieselbe Weise erfolgen soll, indem das Register, auf das zugegriffen werden soll, in Bezug auf die gesamte Gruppe von Registern 570 angegeben wird statt in Bezug auf eine Untergruppe von Registern, die allen Operanden eines spezifischen Anweisungstyps entspricht.
  • Wenn bei der VSX-Registerdatei 500 eine traditionelle skalare Operation darin besteht, Daten aus der VSX-Registerdatei 500 auszulesen oder in diese zu schreiben, wird in einer veranschaulichenden Ausführungsform der skalare Datenwert von der linken Seite der Registerbreite ausgelesen oder in diese geschrieben, d. h. die Bits 0 bis 63 der Register VSR[0] bis VSR[31] des beispielsweise ersten Unterbereichs 520. Gemäß den veranschaulichenden Ausführungsformen gibt es eine Reihe von Möglichkeiten, skalare Werte in die Vektor-Skalar-Register (VSRs) zu schreiben. In einer veranschaulichenden Ausführungsform können alle Bits des VSR beschrieben werden, wobei der skalare Wert in die Bits 0 bis 63 geschrieben wird, wogegen Werte, die dem Ergebnis einer Vektorberechnung entsprechen, die für die Bits ausgeführt wird, die nicht dem skalaren Datenwert in den Registern entsprechen, die durch die skalare Anweisung angegeben wurden, in die Bits 64 bis 127 geschrieben werden. Wenn zum Beispiel die Datenwerte der Register F0 und F1 addiert werden, um ein Ergebnis im Register F3 anzugeben, könnte der Wert von VSR3 in den Bits 64 bis 127 so sein, als ob eine Vektor-Operation an den Bits 64 bis 127 von VSR0 und VSR1 ausgeführt worden wäre.
  • In einer weiteren veranschaulichenden Ausführungsform kann der skalare Wert, der in die Bits 0 bis 63 geschrieben werden soll, in den Bits 64 bis 127 nachgebildet werden. Dieser Ansatz kann zum Beispiel nützlich sein, wenn ein skalarer Gleitkommawert später mit einem Vektorwert kombiniert werden soll, z. B. wenn ein Vektor mit einem skalaren Wert multipliziert wird. Normalerweise muss der skalare Wert zuerst über ein gesamtes Register nachgebildet werden, beispielsweise mit einer „Splat”-Anweisung der VMX- oder VSX-Anweisungsgruppen. Dieser Ansatz würde die Notwendigkeit überflüssig machen, eine „Splat”-Anweisung auszuführen, da der skalare Wert bereits nachgebildet ist.
  • In noch einer weiteren veranschaulichenden Ausführungsform kann der skalare Wert in die Bits 0 bis 63 des Registers geschrieben werden, während beliebige Werte, die in den Bits 64 bis 127 vorhanden waren, unverändert bleiben. Ein derartiger Ansatz kann verwendet werden, wenn eine Vektor-Operation eventuell in eine Folge von skalaren Operationen zerlegt werden muss, wobei jedes skalare Ergebnis in ein spezifisches Vektor-Element eingefügt werden könnte, wodurch letztendlich ein Vektor-Ergebnis aus den mehreren skalaren Ergebnissen erstellt wird. Dies wäre die Ausführungsform mit der niedrigsten Leistung, da nichts geschrieben wird, wenn nichts in die Register geschrieben werden muss. Dies kann jedoch zu Indeterminismus führen, da der im gesamten Register vorhandene Wert jetzt davon abhängig sein kann, welcher Wert in der Registerdatei resident war, bevor ein skalares Ergebnis geschrieben wurde. Dies ist insbesondere problematisch für Architekturen mit Registerumbenennung, wobei der im Umbenennungsregister vorhandene Wert in hohem Maße unvorhersehbar ist.
  • In einer weiteren veranschaulichenden Ausführungsform kann der skalare Wert in die Bits 0 bis 63 des Registers geschrieben werden, während die restlichen Bits 63 bis 127 mit einem Standardwert gefüllt werden können, z. B. einer Null. Ein derartiger Ansatz kann verwendet werden, wenn eine Vektor-Operation eventuell in eine Folge von skalaren Operationen zerlegt werden muss, wobei die mehreren skalaren Ergebnisse verschoben oder zusammen einer ODER-Verknüpfung unterzogen werden, um ein Vektor-Ergebnis zu bilden. Dieser Ansatz ergibt einen vorhersehbaren Wert, wodurch die Probleme vermieden werden, die entstehen, wenn nichts geschrieben wird. Diese Option stellt ferner eine geringere Belastung des Ergebnis-Busses dar als ein Nachbilden des Werts (da dieser Wert nicht für 2 Speicherorte in dem Register bereitgestellt werden muss, wodurch sich die Last verdoppelt).
  • Bei traditionellen Vektor-, SIMD- oder VMX-Anweisungen werden die Datenwerte aus dem gesamten Bereich der Bits 0 bis 127 der zweiten Gruppe von VSRs [32] bis [63] ausgelesen oder in diese geschrieben. Bei den neuen VSX-Anweisungen werden die Datenwerte aus dem gesamten Bereich der Bits 0 bis 127 der gesamten Gruppe von VSRs [0] bis [63] ausgelesen oder in diese geschrieben. Bei diesen VSX-Anweisungen werden skalare Werte in die linksseitigen Bits 0 bis 63 der Register geschrieben, wogegen Vektor-Werte über sämtliche der Bits 0 bis 127 geschrieben werden.
  • Somit sind beim Entschlüsseln von Anweisungen mit den Mechanismen von einer oder mehreren veranschaulichenden Ausführungsformen tatsächlich zwei Merkmale für die Anweisungen vorhanden, die entschlüsselt werden müssen. Das erste ist die Breite des Datenzugriffs, d. h. die Zugriffsbreitenspezifikation und das zweite ist die Registerkennung. Die Zugriffsbreitenspezifikation identifiziert, welche Bits eines Registers gelesen/geschrieben werden müssen. Die Registerkennung identifiziert, welche Untergruppe von Registern oder ob die gesamte Gruppe von Registern in der mehrfach adressierbaren Registerdatei gelesen/geschrieben werden muss. Die primäre Anforderung zum Entschlüsseln der Anweisung ist die Registerkennung, die den Mehrfach-Adressierbarkeitsaspekt des Überlagerns der traditionellen kleineren Registerdateien über die Vektor-Skalar-Registerdatei gestatten, um eine gemeinsame Speichernutzung zu gestatten.
  • Unter erneuter Bezugnahme auf 4, wie oben erläutert, wird eine Entschlüsselungslogik zu der Anweisungsentschlüsselungseinheit 420 des Prozessors 400 hinzugefügt, um die drei Typen von Anweisungen unter Verwendung der einzigen Registerdatei der veranschaulichenden Ausführungsformen zu bearbeiten. Die Entschlüsselungslogik ermittelt den Anweisungstyp und erzeugt auf der Grundlage des Anweisungstyps eine Breitenkennung zum Angeben der Bitbreite der Register in der Registerdatei 440, auf die von der Anweisung zugegriffen werden kann. Eine volle Kennung für die gesamte Registerbreite wird dann auf der Grundlage des Anweisungstyps und der Breitenkennung erzeugt, und Register in einer entsprechenden Untergruppe von Registern 442 bis 446 in der Registerdatei 440 werden dann unter Verwendung der vollen Kennung adressiert. Ergebnisse der Operation werden dann auf der Grundlage der Adressierung der Untergruppe von Registern 442 bis 446 unter Verwendung der vollen Kennung berechnet, wobei die Ergebnisse der Operation zurück in die Untergruppe von Registern 442 bis 446 in der Registerdatei 440 geschrieben werden
  • Gemäß einer veranschaulichenden Ausführungsform wird eine Umsetzung der Power-Architektur bereitgestellt (die auch unter den Namen „PowerPC®” und „Power ISATM” bekannt ist), einschließlich mindestens einer ersten Gruppe von Anweisungen der „Category: Floating-Point” (FPU oder traditionelle FPU), einer zweiten Gruppe von Anweisungen der „Category: Vector” (VMX), und einer dritten Gruppe von Anweisungen der „Category: VSX” gemäß Spezifikationen, die in den Anhängen dargelegt sind, die im U. S.-Patent mit der Nr. 7 877 582 ( U. S.-Veröffentlichungs-Nr. 2009/0198966A1 ) enthalten sind, die hiermit jeweils durch Bezugnahme in ihrer Gesamtheit aufgenommen werden; der Dokumentation, die Bestandteil dieser ausführlichen Beschreibung ist; und in den folgenden Veröffentlichungen: „Power ISATM Version 2.05” Kapitel 4, 5 und 6, International Business Machines Corporation, 23. Oktober 2007, und „Power ISATM Version 2.06 Revision B”, Kapitel 7, International Business Machines Corporation, 23. Juli 2010, die hiermit jeweils durch Bezugnahme in ihrer Gesamtheit aufgenommen werden. „Power ISATM Version 2.05”, International Business Machines Corporation, 23. Oktober 2007, und „Power ISATM Version 2.06 Revision B”, International Business Machines Corporation, 23. Juli 2010, werden hiermit jeweils durch Bezugnahme in ihrer Gesamtheit aufgenommen.
  • Ausführliche Informationen zu Gleitkomma-Prozessoreinrichtungen werden in „Power ISATM Version 2.05 – Kapitel 4 – Floating-Point Processor [Category: Floating-Point]” bereitgestellt. Ausführliche Informationen zu einer VMX-Prozessoreinrichtung werden in „Power ISATM Version 2.05 – Kapitel 6 – Vector Processor [Category: Vector]” bereitgestellt. Ausführliche Informationen zu einer VSX-Prozessoreinrichtung werden in „Power ISATM Version 2.06 Revision B – Kapitel 7 – Vector-Scalar Floating-Point Operations [Category: VSX]”, die hiermit durch Bezugnahme in ihrer Gesamtheit aufgenommen wird, bereitgestellt sowie in „RFC02182.r6: VSX Scalar Single-Precision” und „Kapitel 7: Vector-Scalar Floating Point Operations [Category: VSX”, das als Teil dieser ausführlichen Beschreibung aufgenommen wird. Gemäß einer veranschaulichenden Ausführungsform können weitere Gruppen von Anweisungen vorhanden sein, wie beispielsweise der „Category: Decimal Floating-Point”, wie ausführlich in „Power ISATM Version 2.05 – Kapitel 5 – Decimal Floating-Point [Category: Decimal Floating-Point]” beschrieben, die hiermit durch Bezugnahme in ihrer Gesamtheit aufgenommen wird.
  • Gemäß einem Aspekt der vorliegenden Erfindung beschreiben RFC02182.r6 und Kapitel 7, die hiermit aufgenommen sind, eine neue Gruppe von VSX-Anweisungen, die skalare 64-Bit-Anweisungen mit einfacher Präzision enthalten, die sich von den vorher bereitgestellten skalaren 32-Bit-Anweisungen unterscheiden. Die Bereitstellung von 64-Bit-Skalaroperationen ermöglicht ferner Kompatibilität mit traditionellen skalaren Operationen, ebenfalls mit 64 Bit.
  • 6 bis 7B sind Ablaufpläne, die Beispiel-Entschlüsselungsoperationen aufgliedern, die in der Entschlüsselungslogik der Anweisungsentschlüsselungseinheit von einer oder mehreren veranschaulichenden Ausführungsformen umgesetzt werden können. Es versteht sich, dass jeder Block in den Ablaufplan-Veranschaulichungen und Kombinationen von Blöcken in den Ablaufplan-Veranschaulichungen durch Computerprogrammanweisungen umgesetzt werden können. Diese Computerprogrammanweisungen können für einen Prozessor oder eine andere Vorrichtung, die programmierbare Daten verarbeitet, bereitgestellt werden, um eine Maschine zu erzeugen, sodass die Anweisungen, die über den Prozessor oder eine andere Vorrichtung, die programmierbare Daten verarbeitet, ausgeführt werden, Mittel zum Umsetzen der Funktionen erstellen, die in dem Block oder den Blöcken des Ablaufplans angegeben sind. Diese Computerprogrammanweisungen können auch in einem computerlesbaren Speicher oder Speichermedium gespeichert werden, das einen Prozessor oder eine andere Vorrichtung, die programmierbare Daten verarbeitet, so steuern kann, dass sie auf eine bestimmte Weise funktionieren, sodass die in dem computerlesbaren Speicher oder Speichermedium gespeicherten Anweisungen einen Fertigungsartikel erzeugen, einschließlich Anweisungsmittel, die die in dem Block oder den Blöcken des Ablaufplans angegebenen Funktionen umsetzen.
  • Dementsprechend unterstützen Blöcke der Ablaufplan-Veranschaulichungen Kombinationen von Mitteln zum Ausführen der angegebenen Funktionen, Kombinationen von Schritten zum Ausführen der angegebenen Funktionen und Programmanweisungsmittel zum Ausführen der angegebenen Funktionen. Es ist ebenfalls klar, dass jeder Block in den Ablaufplan-Veranschaulichungen und Kombinationen von Blöcken in den Ablaufplan-Veranschaulichungen durch Computersysteme für spezielle Zwecke auf der Grundlage von Hardware umgesetzt werden können, die die angegebenen Funktionen oder Schritte ausführen, oder durch Kombinationen von Hardware für spezielle Zwecke und Computeranweisungen.
  • Ferner werden die Ablaufpläne bereitgestellt, um die Operationen aufzuzeigen, die in den veranschaulichenden Ausführungsformen ausgeführt werden. Die Ablaufpläne sollen keinesfalls Einschränkungen in Bezug auf die spezifischen Operationen oder insbesondere die Reihenfolge der Operationen angeben oder implizieren. Die Operationen der Ablaufpläne können so modifiziert werden, dass sie für eine bestimmte Umsetzung passen, ohne von dem Erfindungsgedanken und Schutzumfang der vorliegenden Erfindung abzuweichen.
  • 6 ist ein Ablaufplan, der eine allgemeine Entschlüsselungsoperation gemäß einer veranschaulichenden Ausführungsform aufgliedert. Wie in 6 gezeigt, beginnt die Operation mit einem Empfangen einer von einer Anweisungsabrufeinheit abgerufenen Anweisung, SCHRITT 610. Auf der Grundlage eines Operationscodes der abgerufenen Anweisung ermittelt die Entschlüsselungslogik, ob die abgerufene Anweisung eine VSX-Anweisung ist, SCHRITT 615. Wenn der Operationscode die Anweisung als eine VSX-Anweisung (oder einen anderen ausgewählten Anweisungstyp) identifiziert, wird eine volle Registerkennung aus einem oder mehreren Feldern in der Anweisungsverschlüsselung entnommen, SCHRITT 620. Anweisungen werden durch Anweisungswörter mit mehreren Feldern angegeben. Diese Felder können zum Beispiel ein Operationscode-Feld, mehrere Registerkennungsfelder und ein zweites Operationscode-Feld enthalten. Wenn eine Anweisung vorliegt, kann der Anweisungs-Decoder ermittelt, welcher Anweisungstyp vorliegt (dies geschieht durch Analysieren des Operationscodes und des zweiten Operationscode-Felds), der üblicherweise auch angibt, welche Bits eines Registers verwendet werden sollen (z. B. der Unterbereich 520, 540, 560 soll verwendet werden). Die Registerkennungsfelder geben an, auf welche der Register 530, 550 oder 570 zugegriffen werden soll. In einer Ausführungsform kann jedes der Registerkennungsfelder eine 5-Bit-Kennung bereitstellen, d. h. eine schmale Kennung. In dem Anweisungswort können Erweiterungsfelder bereitgestellt werden, um ein zusätzliches Bit bereitzustellen, damit sich 6 Bits ergeben, um eines der 64 VSR-Register der Registerdatei anzugeben.
  • Entsprechende Register in der Registerdatei werden adressiert, d. h. ausgewählt, um ihre Datenwerte für entsprechende Berechnungs- oder Funktionseinheiten für die Verarbeitung bereitzustellen, SCHRITT 625. Das heißt, die volle Registerkennung wird für die Registerdatei bereitgestellt, sodass die Registerdatei weiß, aus welchen der Register 570 sie lesen oder in welche sie schreiben soll. Die Registerkennung ist eine „Adresse” in einem Speicher-Array, die ein Register identifiziert.
  • Die Operanden-Datenwerte werden von den Berechnungs-/Funktionseinheiten verarbeitet, SCHRITT 630, und die Ergebnisse der Verarbeitung durch die Berechnungs- oder Funktionseinheiten werden dann zurück in die entsprechenden Register in der Registerdatei geschrieben, SCHRITT 635. Das zum Zurückschreiben angegebenen Register wird wiederum durch eine Registerkennung angegeben.
  • Wenn der Operationscode der abgerufenen Anweisung angibt, dass die Anweisung keine VSX-Anweisung (oder ein anderer Anweisungstyp) ist, SCHRITT 615, wird eine schmale Registerkennung entnommen, die einen Unterbereich von Registern und möglicherweise Bits in der vollen Breite eines Registers zur Verwendung mit der Anweisung angibt, SCHRITT 640. Eine volle Registerkennung für den gesamten Bitbereich des Registers wird dann auf der Grundlage des Anweisungstyps und der schmalen Bitbereichkennung erzeugt, SCHRITT 645. Das heißt, dass ein oder mehrere Bits zu der schmalen Registerkennung hinzugefügt werden, um die volle Registerkennung zu erzeugen. Die hinzuzufügenden Bits hängen von den Unterbereichen der Registerdatei und davon ab, wie sie definiert wurden. Zum Beispiel wird für traditionelle skalare Anweisungen eine 5-Bit-Operandenkennung, d. h. eine schmale Bitbereichkennung, für jeden Operanden in der Anweisungsverschlüsselung bereitgestellt. Eine volle Registerkennung kann zum Beispiel durch Voranstellen einer 0 zum Erzeugen einer 6-Bit-Kennung erzeugt werden, wodurch in den dargestellten Beispielen Zugriff auf die VSRs 0 bis 31 gewährt wird. Für traditionelle Vektor-Anweisungen wird eine 5-Bit-Operandenkennung, d. h. eine schmale Registerkennung, für jeden Operanden in der Anweisungsverschlüsselung bereitgestellt. Eine volle Registerkennung kann zum Beispiel durch Voranstellen einer 1 zum Erzeugen einer 6-Bit-Kennung erzeugt werden, wodurch Zugriff auf die VSRs 32 bis 63 gewährt wird. Für VSX-Anweisungen wird eine 6-Bit-Operandenkennung, d. h. eine volle Bitbereichkennung, für jeden Operanden in der Anweisungsverschlüsselung bereitgestellt, und somit ist keine Modifizierung notwendig, um auf alle VSRs in der Registerdatei zuzugreifen.
  • Die schmalen und vollen Registerkennungen von einer oder mehreren der veranschaulichenden Ausführungsformen ermöglichen die „mehrfach adressierbare” Natur der Registerdatei, was sich auf die Tatsache bezieht, dass verschiedene gültige Anweisungen verschiedene Adressen enthalten, und dass die Entschlüsselung sie so anpasst, dass sie eine Adressierung der Registerdatei überlagern und gemeinsam verwenden. Somit verweist zum Beispiel eine volle Registerkennung eines VSX-Registers mit den 6 Bits 000000 auf das VSX-Register 0. Eine traditionelle Gleitkommaanweisung mit einer schmalen Registerkennung mit 5 Bits 00000 verweist auf dasselbe Register, da es die ersten 32 Register von VSR-Registern überlagert und durch Hinzufügen einer „0” zu der schmalen 5-Bit-Registerkennung erhalten wird, was in diesem spezifischen Beispiel 000000 ergibt. Andererseits verweist eine traditionelle schmale VMX-Registerkennung mit 5 Bits 00000 auf das Register 32 (das erste Register in dem VSR-Bereich 32 bis 63) und wird durch Hinzufügen einer „1” zu der 5-Bit-Kennung erhalten, was in dem spezifischen Beispiel 100000 ergibt.
  • Wenn das volle Register erhalten ist, werden Register in einer Untergruppe von Registern, die dem Anweisungstyp zugehörig sind, der durch den Operationscode identifiziert wird, auf der Grundlage der vollen Registerkennung adressiert, SCHRITT 650. Eine Bitbreite kann optional ermittelt werden auf der Grundlage des Anweisungstyps, sodass eine erste Gruppe von Bits des Registers einem Anweisungstyp zugeordnet werden, z. B. traditionellen skalaren Anweisungen, und eine weitere Gruppe von Bits des Registers einem anderen Anweisungstyp zugeordnet werden, z. B. traditionellen Vektor-Anweisungen. Diese Funktionalität wurde oben beschrieben und ist für die bestimmte Umsetzung optional. Da sie optional ist, wird sie in 6 nicht explizit gezeigt.
  • Die Operation fährt dann mit SCHRITT 630 fort, in dem Datenwerte, z. B. Operandenwerte, aus den adressierten Registern für die Berechnungs-/Funktionseinheiten zur Verarbeitung bereitgestellt werden, SCHRITT 630, und Ergebnisse werden unter Verwendung der vollen Registerkennung zurück in die Register in der Untergruppe von Registern geschrieben, SCHRITT 635. Dann ist die Operation beendet.
  • 7A und 7B stellen einen Ablaufplan dar, der ein Beispiel einer Entschlüsselungsoperation für eine Umsetzung gemäß einer veranschaulichenden Ausführungsform aufgliedert. Wie in den 7A und 7B gezeigt, beginnt die Operation wiederum mit einem Empfangen einer von einer Anweisungsabrufeinheit abgerufenen Anweisung, SCHRITT 710. Auf der Grundlage eines Operationscodes der abgerufenen Anweisung ermittelt die Entschlüsselungslogik, ob die abgerufene Anweisung eine VSX-Anweisung ist (oder ein anderer ausgewählter Anweisungstyp), ABFRAGE 715. Wenn der Operationscode die Anweisung als eine VSX-Anweisung identifiziert, wird eine breite Bitbereichkennung entnommen, SCHRITT 720. Eine breite Bitbereichkennung kann jedes der Register 570 adressieren, d. h. die volle Registerdatei wird adressiert sowie alle Bits in diesen Registern, SCHRITT 725. Das entsprechende Register kann jedes Register in der gesamten Registerdatei sein. Die Anweisung wird dann unter Verwendung der Daten aus dem Register berechnet, wobei die Berechnung auf beliebigen Eingabe- und Ausgabe-Registerpaarungen beruht, SCHRITT 730. Mit anderen Worten, die VSX-Anweisungen verarbeiten jedes der Register in der Registerdatei und sind nicht auf einen bestimmten Unterbereich von Registern beschränkt. Die Ergebnisse der Berechnung werden dann zurück in ein entsprechendes Register in der Registerdatei geschrieben, SCHRITT 735.
  • Wenn der Operationscode der Anweisung angibt, dass die Anweisung keine VSX-Anweisung ist, ABFRAGE 715, ermittelt die Entschlüsselungslogik, ob der Anweisungs-Operationscode die Anweisung als eine skalare Anweisung identifiziert, z. B. eine Gleitkommaanweisung oder dergleichen, ABFRAGE 740 (7B) Wenn der Anweisungs-Operationscode die Anweisung als eine skalare Anweisung identifiziert, wird eine schmale Bitbereichkennung entnommen, die eine Untergruppe von Registern in der Registerdatei und optional eine Untergruppe von Bits in den Registern der Untergruppe von Registern identifiziert, SCHRITT 745. Eine volle Bitbereichkennung wird auf der Grundlage des Anweisungstyps und der schmalen Bitbereichkennung erzeugt, SCHRITT 750. Aus einer Untergruppe von Registern werden Daten entnommen, z. B. aus der skalaren Untergruppe von Registern, die dem Anweisungstyp zugehörig sind, der unter Verwendung der schmalen Bitbereichkennung durch den Operationscode angegeben wurde, SCHRITT 755. Die Daten werden für die Berechnungs-/Funktionseinheiten bereitgestellt, die Ergebnisse auf der Grundlage von Eingabe- und Ausgabe-Registern berechnen, die der skalaren Untergruppe von Registern in der Registerdatei entsprechen, SCHRITT 760. Die Ergebnisse der Berechnung werden dann zurück in ein entsprechendes Register in der Untergruppe von Registern für diesen Anweisungstyp geschrieben, z. B. skalare Register-Untergruppe, SCHRITT 765.
  • Wenn der Operationscode der Anweisung angibt, dass die Anweisung keine skalare Anweisung ist, ABFRAGE 715, wird eine schmale Bitbereichkennung entnommen, die wiederum eine Untergruppe von Registern in der Registerdatei und optional eine weitere Untergruppe von Bits in diesen Registern identifiziert, SCHRITT 770. Eine volle Bitbereichkennung wird auf der Grundlage des Anweisungstyps, z. B. Vektor-, SIMD- oder VMX-Anweisung, und der schmalen Bitbereichkennung erzeugt, SCHRITT 775. Aus einer Untergruppe von Registern werden Daten entnommen, z. B. aus der Vektor-Untergruppe von Registern, die dem Anweisungstyp zugehörig sind, der unter Verwendung der vollen Bitbereichkennung durch den Operationscode angegeben wurde, SCHRITT 780. Die Daten werden für die Berechnungs-/Funktionseinheiten bereitgestellt, die Ergebnisse auf der Grundlage von Eingabe- und Ausgabe-Registern berechnen, die der Vektor-Untergruppe von Registern in der Registerdatei entsprechen, SCHRITT 785. Die Ergebnisse der Berechnung werden dann zurück in ein entsprechendes Register in der Untergruppe von Registern für diesen Anweisungstyp geschrieben, z. B. Vektor-Registeruntergruppe, SCHRITT 790. Dann ist die Operation beendet.
  • Aus der Beschreibung oben ist ersichtlich, dass eine oder mehrere veranschaulichende Ausführungsformen eine Registerdatei und Entschlüsselungsmethodik bereitstellen, die eine Vielzahl von verschiedenen Typen von Adressierungsmodi zulassen. In einem ersten Adressierungsmodus wird zum Beispiel auf der Grundlage eines ersten Anweisungstyps, z. B. VSX-Anweisungstyp, eine nicht zusammenhängende Verschlüsselung verwendet, um alle Operanden-Register aus einer vollständigen Gruppe von Registern in der Registerdatei auszuwählen. In einem zweiten Adressierungsmodus wird eine zusammenhängende Verschlüsselung verwendet, und auf der Grundlage eines zweiten Anweisungstyps, z. B. eines skalaren Anweisungstyps, wird ein erster Bereich von adressierbaren Operanden-Registern aus der vollständigen Gruppe von Registern in der Registerdatei ausgewählt. Eine Registeradresse wird für jeden der Operanden erstellt, sodass alle Operanden für die Anweisung aus dem ersten Bereich von adressierbaren Operanden-Registern erhalten werden.
  • In einem dritten Adressierungsmodus wird ebenfalls eine zusammenhängende Verschlüsselung verwendet, und auf der Grundlage eines dritten Anweisungstyps, z. B. eines Vektor-Anweisungstyps, wird ein zweiter Bereich von adressierbaren Operanden-Registern aus der vollständigen Gruppe von Registern in der Registerdatei ausgewählt. Eine Registeradresse wird für jeden der Operanden erstellt, sodass die Operanden für die Anweisung aus dem zweiten Bereich von adressierbaren Operanden-Registern erhalten werden. Dieser zweite Bereich von Operanden-Registern ist in einem Beispiel verschieden von dem ersten Bereich von Operanden-Registern, sodass ein Register in dem ersten Bereich nicht in dem zweiten Bereich von Operanden-Registern liegt.
  • Eine oder mehrere veranschaulichende Ausführungsformen weisen gegenüber bekannten Systemen und Prozessor-Registerdatei-Architekturen und Anweisungsentschüsselungsmethoden Verbesserungen auf, indem die Verwendung einer einzigen Registerdatei zum Verarbeiten von traditionellen skalaren, Vektor- und Vektor-Skalar-Anweisungen gestattet wird. Auf diese Weise können traditionelle skalare und Vektor-Anweisungen zusätzlich zu Vektor-Skalar-Anweisungen mit Datenformaten verarbeitet werden, die zwischen den verschiedenen Anweisungstypen kompatibel sind. Da des Weiteren eine einzige Registerdatei verwendet wird, werden die indirekten Kosten vermieden, die mit einem Hin- und Herschalten zwischen getrennten Registerdateien verbunden sind. Eine gemeinsame Registernutzung gemäß einer oder mehreren veranschaulichenden Ausführungsformen verkleinert den Chip-Bereich einer Registerdatei und gestattet es, eine vereinheitlichte Registerdatei zu verwenden, gleichzeitig aber den traditionellen Code beizubehalten, ohne getrennte traditionelle Registerdateien zu erstellen. Eine oder mehrere veranschaulichende Ausführungsformen gestatten eine gemeinsame Datennutzung durch traditionelle und neue/erweiterte Anweisungen, d. h. eine traditionelle Anweisung kann in eines der Register 530 oder 550 schreiben, und eine VSX-Anweisung kann Werte aus beliebigen oder allen der Register 570 kombinieren.
  • In einem weiteren Aspekt der vorliegenden Erfindung wird eine Funktion zum Übersetzen zwischen verschiedenen Darstellungen bereitgestellt. Wenn zum Beispiel eine Produzentenanweisung (producer instruction) von einem Format ist und ein Ergebnis erzeugt, das durch eine Nutzeranweisung (consumer instruction) in einem verschiedenen Format in Anspruch genommen werden soll, findet eine Umwandlung statt. In einem bestimmten Aspekt ermittelt ein Compiler, der auf einem Prozessor ausgeführt wird, die fehlende Übereinstimmung und fügt eine entsprechende Umwandlungsanweisung zwischen die Produzenten- und Nutzeranweisungen ein, wie unter Bezugnahme auf 8 beschrieben. Zum Beispiel stellt 8 eine Ausführungsform der Logik zum Ermitteln, ob die Umwandlung notwendig oder erwünscht ist, und zum Auswählen und Einfügen einer Umwandlungsanweisung dar. In einem Beispiel wird diese Logik durch den Compiler ausgeführt. In anderen Ausführungsformen können es jedoch andere Komponenten oder Entitäten des Prozessors sein oder die auf dem Prozessor ausgeführt werden.
  • Unter Bezugnahme auf 8 wird zuerst eine Abhängigkeit zwischen zwei Anweisungen unter Verwendung eines Datentyps mit mehreren Darstellungen gewählt, SCHRITT 800. Das heißt, es werden zwei Anweisungen zur Verarbeitung ausgewählt, die voneinander abhängig sind (z. B. soll eine einen Wert oder ein Ergebnis verwenden, der bzw. das von einer anderen bereitgestellt wird). Eine Entscheidung wird getroffen, ob die ausgewählten Anweisungen (z. B. die Produzenten- und Nutzeranweisungen) einer selben Darstellung entsprechen, ABFRAGE 802. Wenn beide Anweisungen dieselbe oder eine kompatible Darstellung haben, wird eine weitere Entscheidung getroffen, ob noch weitere Abhängigkeiten vorhanden sind, die zu verarbeiten sind, ABFRAGE 804. Wenn dies der Fall ist, wird die Verarbeitung mit SCHRITT 800 fortgesetzt.
  • Wenn unter erneuter Bezugnahme auf ABFRAGE 802 die Produzenten- und Nutzeranweisungen nicht derselben oder einer kompatiblen Darstellung entsprechen, wird eine Umwandlungsanweisung zwischen die zwei Anweisungen in dem Anweisungsstrom eingefügt, SCHRITT 806. Die Umwandlungsanweisung wird verwendet, um die Daten von einer der Anweisungen (z. B. der Produzentenanweisung) in ein Format umzuwandeln, das mit der anderen Anweisung kompatibel ist (z. B. der Nutzeranweisung). In einem Beispiel befinden sich die Daten, die umgewandelt werden sollen, in einem Register der mehrfach adressierbaren Registerdatei (identifiziert in der Umwandlungsanweisung), und die umgewandelten Daten werden in ein anderes Register (oder dasselbe Register) der mehrfach adressierbaren Registerdatei gestellt (ebenfalls in der Umwandlungsanweisung angegeben). Die Anweisung zum Verwenden der Daten erhält die umgewandelten Daten von diesem Register. In einem Beispiel legt der Compiler die Register, die von der Umwandlungsanweisung verwendet werden sollen, auf der Grundlage der Produzenten- und Nutzeranweisungen fest. Die Produzentenanweisung gibt das Register an, in dem sich die zu übersetzenden oder umzuwandelnden Daten befinden, und die Nutzeranweisung stellt eine Angabe des Registers bereit, das sie zum Abrufen der Daten verwenden wird. Die Verarbeitung wird mit ABFRAGE 804 fortgesetzt.
  • In einer Ausführungsform hängt die eingefügte Umwandlungsanweisung von einem oder mehreren Kriterien ab, wie im Folgenden unter Bezugnahme auf 9 und 10 ausführlicher beschrieben wird. 9 betrifft eine Umwandlung von Vektor in Skalar, und 10 betrifft eine Umwandlung von Skalar in Vektor. Eine dieser Techniken wird abhängig von dem Umwandlungstyp ausgewählt (z. B. Vektor-Skalar oder Skalar-Vektor). Diese Logik, einschließlich der Logik von 9 und 10, wird in einem Beispiel durch den Compiler ausgeführt.
  • Unter erster Bezugnahme auf 9 wird eine Entscheidung getroffen, ob die gewünschte Formatumwandlung ein Umwandeln eines Vektorelements mit einfacher Präzision in einen Skalar mit einfacher Präzision ist, ABFRAGE 900. Wenn die gewünschte Formatumwandlung eine einfache Kopie ist, bei der die Umwandlung von einem Vektorelement mit einfacher Präzision in einen Skalar mit einfacher Präzision erfolgt, wird eine Umwandlungsanweisung verwendet, auf die hierin als XSCVSPDPN Bezug genommen wird, SCHRITT 902. Diese Anweisung wandelt ein Vektorelement mit einfacher Präzision (32-Bit-Gleitkommaregisterformat) in einen Skalar mit einfacher Präzision um (64-Bit-Gleitkommaregisterformat). Diese Umwandlung wird nur als eine physische Formatänderung und nicht als eine logische Änderung betrachtet, und daher werden keine Ausnahmen erfasst oder signalisiert, und Signalisierungsnichtzahl-(SNaN)Eingaben werden als SNaNs in dem zurückgegebenen Ergebnis beibehalten. Das heißt, die Umwandlung wird für jede Entität oder Komponente außerhalb des Compilers transparent ausgeführt. Da keine Ausnahme ausgelöst (d. h. erfasst und/oder signalisiert) wird, wird die Umwandlung sozusagen von einer Ausnahme unabhängig ausgeführt (d. h. in Abwesenheit oder ohne eine Ausnahme).
  • Wenn unter erneuter Bezugnahme auf ABFRAGE 900 die gewünschte Formatumwandlung kein Umwandeln eines Vektorelements mit einfacher Präzision in ein Skalarelement mit einfacher Präzision ist, wird in dieser Ausführungsform eine andere Anweisung verwendet, auf die hierin als XSCVSPDP-Anweisung Bezug genommen wird, SCHRITT 904. Diese Anweisung wandelt ein Vektorelement mit einfacher Präzision (32-Bit-Gleitkommaregisterformat) in einen Skalar mit doppelter Präzision um (64-Bit-Gleitkommaregisterformat). Dies wird als eine wahre logische und eine physische Formatänderung betrachtet, und daher wird eine Ausnahme Invalid Operation erfasst und als eine Signalisierungs-NaN (Not-a-Number – Nichtzahl) signalisiert. SNaN-Werte werden in dem zurückgegebenen Ergebnis in QNaNs (stille NaN) umgewandelt.
  • Unter Bezugnahme auf 10 wird in einer weiteren Ausführungsform eine Entscheidung getroffen, ob die gewünschte Formatumwandlung ein Umwandeln eines skalaren Datums mit einfacher Präzision in ein Vektorelement mit einfacher Präzision ist, ABFRAGE 1000. Wenn die gewünschte Umwandlung eine einfache Kopie ist und ein Skalar mit einfacher Präzision in ein Vektorelement mit einfacher Präzision umgewandelt werden soll, wird eine weitere Entscheidung getroffen, ob ein Vektor von Kopien des Werts erstellt werden soll, ABFRAGE 1002. Wenn kein Vektor von Kopien des Werts erstellt werden soll, wird eine Anweisung verwendet, auf die hierin als XSCVDPSPN Bezug genommen wird, die einen Skalar mit einfacher Präzision (64-Bit-Gleitkommaregisterformat) in ein Vektorelement mit einfacher Präzision umwandelt (32-Bit-Gleitkommaregisterformat), SCHRITT 1004. Dies wird nur als eine physische Formatänderung und nicht als eine logische Änderung betrachtet, und daher werden keine Ausnahmen erfasst oder signalisiert, und SNaN-Werte werden als SNaNs in dem zurückgegebenen Ergebnis beibehalten. Die Umwandlung ist wiederum transparent und wird unabhängig von Ausnahmen ausgeführt. Wenn unter erneuter Bezugnahme auf die ABFRAGE 1002 jedoch ein Vektor von Kopien des Werts erstellt werden soll, ABFRAGE 1002, wird eine Anweisung verwendet, auf die hierin als XSCVSSPVSPSPLT Bezug genommen wird, SCHRITT 1006. Diese wandelt einen Skalar mit einfacher Präzision (64-Bit-Gleitkommaregisterformat) in ein Vektorelement mit einfacher Präzision um (32-Bit-Gleitkommaregisterformat) und wird auf allen vier Vektorelementen nachgebildet. Dies wird wiederum nur als eine physische Formatänderung betrachtet, es werden keine Ausnahmen erfasst oder signalisiert, und SNaN-Eingaben werden als SNaNs in dem zurückgegebenen Ergebnis beibehalten.
  • Wenn unter erneuter Bezugnahme auf ABFRAGE 1000 die gewünschte Formatumwandlung kein Umwandeln eines Skalars mit einfacher Präzision in ein Vektorelement mit einfacher Präzision ist, wird eine Anweisung verwendet, auf die hierin als XSCVDPSP Bezug genommen wird, SCHRITT 1008. Diese Anweisung wandelt einen Skalar mit doppelter Präzision (64-Bit-Gleitkommaregisterformat) in ein Vektorelement mit einfacher Präzision um (32-Bit-Gleitkommaregisterformat). In diesem Fall wird die Umwandlung als eine wahre logische und eine physische Formatänderung betrachtet, und daher wird eine Ausnahme Invalid Operation erfasst und als ein Signalisierungsnichtzahl-Operand signalisiert. SNaN-Werte werden in dem zurückgegebenen Ergebnis in QNaNs umgewandelt.
  • Oben wurde eine Reihe von Umwandlungsanweisungen beschrieben, die in einer oder mehreren Ausführungsformen verwendet werden können. Weitere Details zu diesen Anweisungen werden im Folgenden beschrieben sowie in „RFC02242.r3: BFP/VSX Miscellaneous Operations”, das als Bestandteil dieser Beschreibung aufgenommen ist.
  • Zuerst werden weitere Details in Bezug auf die XSCVSPDPN-Anweisung bereitgestellt. In einem Beispiel enthält diese Anweisung zwei Felder, die einen Operationscode identifizieren (wobei z. B. ein Feld einen primären Operationscode aufweist, der mit einem erweiterten Operationscode eines anderen Felds kombiniert (z. B. verkettet) ist), um die Anweisung zu identifizieren; ein erstes Feld (z. B. T-Feld) und ein erstes Bit (z. B. TX-Feld; verkettet), die ein erstes Register angeben; und ein zweites Feld (z. B. B-Feld) und ein zweites Bit (z. B. BX-Feld; verkettet), die ein zweites Register angeben. Beispiel-Pseudocode lautet wie folgt:
    Figure DE112012003864T5_0002
    • XT sei der Wert TX, der mit T verkettet ist.
    • XB sei der Wert BX, der mit B verkettet ist.
    • src sei der Gleitkommawert mit einfacher Präzision im Wortelement 0 von VSR[XB].
    • src wird in das Doppelwortelement 0 von VSR[XT] im Format mit doppelter Präzision gestellt. Die Verschlüsselung von SNaN-Werten wird beibehalten (d. h. sie werden nicht in eine QNaN umgewandelt).
  • Die Inhalte des Doppelwortelements 1 von VSR[XT] sind nicht definiert.
  • Geänderte Sonderregister
    • Keine
  • VSR-Datenlayout für XSCVSPDPN
    • src = VSR[XB]
    • Die Bits 0 bis 31 von 128 Bits enthalten SP.
    • tgt = VSR[XT]
    • Die Bits 0 bis 63 von 128 Bits enthalten DP.
  • Ferner werden Beispiele für Code-Snippets zum Umwandeln eines 32-Bit-Vektorelements mit einfacher Präzision in einen 64-Bit-Skalar mit einfacher Präzision im Folgenden bereitgestellt: C-Quelle
    Figure DE112012003864T5_0003
    Figure DE112012003864T5_0004
    Gleichwertiger Assembler
    Figure DE112012003864T5_0005
    Figure DE112012003864T5_0006
  • Weitere Details in Bezug auf die XSCVSPDP-Anweisung werden im Folgenden beschrieben. In einem Beispiel enthält diese Anweisung zwei Felder, die einen Operationscode identifizieren (wobei z. B. ein Feld einen primären Operationscode aufweist, der mit einem erweiterten Operationscode eines anderen Felds kombiniert (z. B. verkettet) ist), um die Anweisung zu identifizieren; ein erstes Feld und ein erstes Bit (z. B. verkettet), die ein erstes Register angeben; und ein zweites Feld und ein zweites Bit (z. B. verkettet), die ein zweites Register angeben. Beispiel-Pseudocode lautet wie folgt:
    Figure DE112012003864T5_0007
    Figure DE112012003864T5_0008
    • XT sei der Wert TX, der mit T verkettet ist.
    • XB sei der Wert BX, der mit B verkettet ist.
    • src sei der Gleitkommawert mit einfacher Präzision im Wortelement 0 von VSR[XB].
    • Wenn src eine SNaN ist, lautet das Ergebnis src, umgewandelt in eine QNaN (d. h. Bit 9 von src wird auf 1 gesetzt). VXSNAN wird auf 1 gesetzt.
    • Ansonsten ist das Ergebnis src.
  • Das Ergebnis wird in das Doppelwortelement 0 von VSR[XT] im Format mit doppelter Präzision gestellt.
  • Die Inhalte des Doppelwortelements 1 von VSR[XT] sind nicht definiert.
  • FPRF wird auf die Klasse und das Vorzeichen des Ergebnisses eingestellt. FR wird auf 0 gesetzt. FI wird auf 0 gesetzt.
  • Wenn eine Ausnahme Invalid Operation mit Trap-Aktivierung auftritt, wird VSR[XT] nicht modifiziert, FPRF wird nicht modifiziert, FR wird auf 0 gesetzt und FI wird auf 0 gesetzt.
  • Geänderte Sonderregister
    Figure DE112012003864T5_0009
  • VSR-Datenlayout für XSCVSPDP
    • src = VSR[XB]
    • Die Bits 0 bis 31 von 128 Bits enthalten SP
    • tg = VSR[XT]
    • Die Bits 0 bis 64 von 128 Bits enthalten DP
  • Weiterhin werden Details in Bezug auf die XSCVDPSPN-Anweisung im Folgenden beschrieben. In einem Beispiel enthält diese Anweisung zwei Felder, die einen Operationscode identifizieren (wobei z. B. ein Feld einen primären Operationscode aufweist, der mit einem erweiterten Operationscode eines anderen Felds kombiniert (z. B. verkettet) ist), um die Anweisung zu identifizieren; ein erstes Feld und ein erstes Bit (z. B. verkettet), die ein erstes Register angeben; und ein zweites Feld und ein zweites Bit (z. B. verkettet), die ein zweites Register angeben. Beispiel-Pseudocode lautet wie folgt:
    Figure DE112012003864T5_0010
    Figure DE112012003864T5_0011
    • XT sei der Wert TX, der mit T verkettet ist.
    • XB sei der Wert BX, der mit B verkettet ist.
    • src sei der Gleitkommawert mit einfacher Präzision im Doppelwortelement 0 von VSR[XB], dargestellt im Format mit doppelter Präzision.
    • src wird in das Wortelement 0 von VSR[XT] im Format mit einfacher Präzision gestellt. Die Verschlüsselung von SNaN-Werten wird beibehalten (d. h. sie werden nicht in eine QNaN umgewandelt).
  • Die Inhalte der Doppelwortelemente 1, 2 und 3 von VSR[XT] sind nicht definiert.
  • Geänderte Sonderregister
    • Keine
  • VSR-Datenlayout für xscvdpspn
    • src = VSR[XB]
    • Die Bits 0 bis 63 von 128 Bits enthalten SP
    • tgt = VSR[XT]
    • Die Bits 0 bis 31 von 128 Bits enthalten SP
  • Weitere Details in Bezug auf die XSCVSSPVSPSPLT-Anweisung werden im Folgenden beschrieben. In einem Beispiel enthält diese Anweisung zwei Felder, die einen Operationscode identifizieren (wobei z. B. ein Feld einen primären Operationscode aufweist, der mit einem erweiterten Operationscode eines anderen Felds kombiniert (z. B. verkettet) ist), um die Anweisung zu identifizieren; ein erstes Feld (z. B. T-Feld) und ein erstes Bit (z. B. TX-Bit; verkettet), die ein erstes Register angeben; und ein zweites Feld (z. B. B-Feld) und ein zweites Bit (z. B. BX-Bit; verkettet), die ein zweites Register angeben. Beispiel-Pseudocode lautet wie folgt:
    Figure DE112012003864T5_0012
    • XT sei der Wert TX, der mit T verkettet ist.
    • XB sei der Wert BX, der mit B verkettet ist.
    • src sei der Gleitkommawert mit einfacher Präzision im Doppelwortelement 0 von VSR[XB], dargestellt im Format mit doppelter Präzision. Die Verschlüsselung von SNaN-Werten wird beibehalten (d. h. sie werden nicht in eine QNaN umgewandelt).
    • src wird in jedes Wortelement von VSR[XT] im Format mit einfacher Präzision gestellt.
  • Geänderte Sonderregister
    • Keine
  • VSR-Datenlayout für xscvsspvspsplt
    • src = VSR[XB]
    • Die Bits 0 bis 63 von 128 Bits enthalten SP
    • tgt = VSR[XT]
    • Die Bits 0 bis 31, die Bits 32 bis 63, die Bits 64 bis 96 und die Bits 97 bis 127 von 128 Bits enthalten SP
  • Außerdem werden Beispiele für Code-Snippets zum Umwandeln eines 64-Bit-Skalars mit einfacher Präzision in ein 32-Bit-Vektorelement mit einfacher Präzision mit Nachbildung (splat) im Folgenden beschrieben: C-Quelle
    Figure DE112012003864T5_0013
    Gleichwertiger Assembler
    Figure DE112012003864T5_0014
    Figure DE112012003864T5_0015
  • Weitere Details in Bezug auf XSCVDPSP werden im Folgenden bereitgestellt. In einem Beispiel enthält diese Anweisung zwei Felder, die einen Operationscode identifizieren (wobei z. B. ein Feld einen primären Operationscode aufweist, der mit einem erweiterten Operationscode eines anderen Felds kombiniert (z. B. verkettet) ist), um die Anweisung zu identifizieren; ein erstes Feld (z. B. T-Feld) und ein erstes Bit (z. B. TX-Bit; verkettet), die ein erstes Register angeben; und ein zweites Feld (z. B. B-Feld) und ein zweites Bit (z. B. BX-Bit; verkettet), die ein zweites Register angeben. Beispiel-Pseudocode lautet wie folgt:
    Figure DE112012003864T5_0016
    Figure DE112012003864T5_0017
    • XT sei der Wert TX, der mit T verkettet ist.
    • XB sei der Wert BX, der mit B verkettet ist.
    • src sei der Gleitkommawert mit doppelter Präzision im Doppelwortelement 0 von VSR[XB].
    • Wenn src eine SNaN ist, lautet das Ergebnis src, umgewandelt in eine QNaN (d. h. Bit 12 von src wird auf 1 gesetzt). VXSNAN wird auf 1 gesetzt.
    • Ansonsten, wenn src eine QNaN, eine Unendlichkeit oder eine Null ist, ist das Ergebnis src.
    • Ansonsten ist das Ergebnis src, unter Verwendung des durch RN angegebenen Rundungsmodus auf einfache Präzision gerundet.
  • Das Ergebnis wird in das Wortelement 0 von VSR[XT] im Format mit einfacher Präzision gestellt.
  • Die Inhalte der Doppelwortelemente 1, 2 und 3 von VSR[XT] sind nicht definiert.
  • FPRF wird auf die Klasse und das Vorzeichen des Ergebnisses eingestellt. FR wird so eingerichtet, dass angegeben wird, ob das Ergebnis beim Runden erhöht worden ist. FI wird so eingerichtet, dass angegeben wird, ob das Ergebnis ungenau ist.
  • Wenn eine Ausnahme Invalid Operation mit Trap-Aktivierung auftritt, werden VSR[XT] und FPRF nicht modifiziert, und FR und FI werden auf 0 gesetzt.
  • Geänderte Sonderregister
    Figure DE112012003864T5_0018
  • VSR-Datenlayout für xscvdpsp
    • src = VSR[XB]
    • Die Bits 0 bis 63 von 128 Bits enthalten DP
    • tgt – VSR[XT ]
    • Die Bits 0 bis 31 von 128 Bits enthalten SP
  • Hierin wird ausführlich eine erweiterte VSX-Einrichtung mit Unterstützung von Anweisungen beschrieben, die skalare Zahlen mit einfacher Präzision unter Verwendung einer 64-Bit-Darstellung berechnen, und von Anweisungen, die Vektorzahlen mit einer Präzision unter Verwendung einer 32-Bit-Darstellung berechnen. Ferner wird eine Funktion zum Übersetzen von einer ersten in eine zweite Darstellung bereitgestellt. In einer ersten Ausführungsform wird eine explizite Umwandlung von 64-Bit- in 32-Bit- und 32-Bit- in 64-Bit-Operationen verwendet. In einer zweiten Ausführungsform werden Anweisungen verwendet, um ein Umwandeln zwischen Darstellungen mit einfacher Präzision vorzunehmen unter Verwendung von Umwandlungen mit doppelter Präzision/einfacher Präzision, um ein Umwandeln zwischen 32-Bit- und 64-Bit-Darstellungen von Zahlen mit einfacher Präzision vorzunehmen, wobei die 64-Bit-Darstellung einer Zahl mit einfacher Präzision eine ähnliche Form aufweist wie die Operation mit doppelter Präzision. In einer weiteren Ausführungsform stellt die Umwandlungsoperation auch eine Splat-Funktion bereit, in der ein 32-Bit-Wert mit einfacher Präzision in einer Vielzahl von Elementpositionen nachgebildet wird. In einer Ausführungsform stellt die Umwandlungsoperation auch eine Auswahlfunktion bereit, in der ein 32-Bit-Wert mit einfacher Präzision aus einer Vielzahl von Elementpositionen mithilfe eines Positionsindikators ausgewählt wird.
  • Gemäß einem oder mehreren Aspekten werden mehrere in einer Architektur angeordnete Darstellungen verwendet. Eine Funktion wird bereitgestellt, um 64-Bit-Zahlen mit einfacher Präzision in einem ersten Betriebsmodus und 32-Bit-Zahlen mit einfacher Präzision in einem zweiten Betriebsmodus aufzunehmen und zu identifizieren. Eine Funktion wird bereitgestellt, um eine erste und zweite Operation auf der Grundlage des Operationstyps zu identifizieren, der notwendig ist, um kompatibel mit der ersten und zweiten traditionellen Verschlüsselung zusammenzuwirken, die erste und zweite Verschlüsselungen darstellt. Eine Technik zum Übersetzen zwischen der ersten und zweiten Darstellung wird bereitgestellt.
  • Durch ein Umwandeln zwischen einer Darstellung und einer anderen kann die Ausführungskomplexität verringert werden, indem die Notwendigkeit entfällt, eine Prüfung von Grenzbedingungen auszuführen. Ferner werden durch ein Einfügen einer Umwandlungsanweisung zum Umwandeln einer Datendarstellung in eine andere die Anzahl der zu verschlüsselnden Anweisungen sowie die Kosten der Entschlüsselungslogik und Umsetzung verringert.
  • Gemäß einem oder mehreren Aspekten erfolgt ein Aktivieren des Mischens von 32-Bit-Darstellung mit einfacher Präzision, die zur Vektorberechnung verwendet wird, und von 64-Bit-Gleitkommadarstellung mit einfacher Präzision, die zur skalaren Berechnung verwendet wird. Neue Anweisungen für eine Formatumwandlung von einfacher Präzision in einfache Präzision werden zum Umwandeln aus einem 64-Bit-Format in ein anderes 32-Bit-Format oder umgekehrt bereitgestellt. Außerdem wird eine Umwandlungsanweisung, die eine 64-Bit-Einfachpräzision in eine 32-Bit-Einfachpräzision umwandelt, und eine Nachbildung bereitgestellt, in der derselbe Wert in dem Register viermal nachgebildet wird, was eine übliche Operation für eine Vektor-Skalar-Operation ist. Die Umwandlung wird ohne Berücksichtigung von Signalisierungsmerkmalen ausgeführt, weil eine Umwandlung dieses Typs keine Berechnungsanweisung ist.
  • Des Weiteren wird eine Compiler-Technik bereitgestellt, um die Berechnung unter Verwendung von zwei unterschiedlichen Gleitkommadarstellungen für denselben 32-Bit-Gleitkommadatentyp mit einfacher Präzision zu erleichtern. Der Compiler wird erweitert, um zu erkennen, dass verwendete Daten in der einen oder einer anderen Darstellung vorliegen können und eine Prüfung ausgeführt werden muss, um sicherzustellen, dass die verwendeten Daten das entsprechende Format haben, das durch eine Anweisung verwendet wird. Dies wird erreicht, indem jeder Anweisung ein Datentyp zugeordnet wird, und der Datentyp der Anweisung, die ein Ergebnis erzeugt, muss derselbe sein wie der Datentyp der Anweisung, die das Ergebnis verwendet. Wenn dies nicht der Fall ist, wird eine Umwandlung eingefügt. Die Formatumwandlungen werden direkt von Register zu Register ausgeführt, ohne dass eine Ausnahme gesetzt wird.
  • In einem Aspekt werden Gleitkommaregister verwendet, die zwei verschiedene Darstellungen jeder Gleitkommazahl enthalten können. Anweisungen geben an, welcher Typ von Gleitkommazahl für Operanden der Anweisung verwendet werden soll und erlangen/speichern den Operanden aus einer der ausgewählten Darstellungen, sofern vorhanden. Des Weiteren hat ein Compiler Kenntnis von den Gleitkommaregistern und fügt nach Bedarf Umwandlungsanweisungen ein, wenn das Gleitkommaregister die falsche Darstellung enthält.
  • In einem bestimmten Beispiel wird eine Anweisung bereitgestellt, die aus einem ersten in einer Architektur angeordneten Format (z. B. das SP64 breite binäre 64-Bit-Gleitkommaformat mit einfacher Präzision gemäß der Definition der POWER ISA) in einem Register einer Registerklasse (die eine mehrfach adressierbare Registerdatei sein kann) in ein zweites in einer Architektur angeordnetes Format umwandelt (z. B. das SP32 breite binäre 32-Bit-Gleitkommaformat mit einfacher Präzision gemäß der Speicherformatdefinition IEEE 754 und einer ähnlichen POWER ISA-Definition) für ein Registerdateiformat.
  • Die Umwandlung von SP64 in SP32 wird zum Beispiel verwendet, um die Verwaltung von verschiedenen internen Formaten durch den Compiler gemäß der Architekturdefinition aufzunehmen, wobei jede Zahl z. B. eine exakte Entsprechung hat (die Formatumwandlung von SP64 in SP32). Diese ist verschieden von einer Umwandlung von DP (doppelte Präzision) in SP, die eine benutzerdefinierte Operation ist.
  • Zum Beispiel muss die Umwandlung von DP in SP DP-Zahlen zu SP-Zahlen zuordnen, sogar für DP-Zahlen, die keine Darstellung in dem SP-Format haben. Sie kann dies durch ein Ausführen einer Rundung von Überschuss-Mantissenbits ausführen (gemäß einem von vielen möglichen Rundungsmodi wie beispielsweise abschneiden, auf Null runden, auf –Unendlichkeit runden, auf +Unendlichkeit runden, weg von Null runden, auf geradzahlig runden, auf ungeradzahlig runden uvm.), ein Ausführen einer Flush-Operation auf Null für kleine Zahlen, die in DP, aber nicht in SP darstellbar sind, und ein Sättigen von großen Zahlen, die in DP, aber nicht in SP darstellbar sind, auf +Unendlichkeit oder – Unendlichkeit. Im Vergleich verarbeitet die Umwandlung von SP64 in SP32 in einem Beispiel ausschließlich SP-Zahlen, sodass in mindestens einer Ausführungsform die Operation zum Umwandeln von SP64 in SP32 nicht definiert ist, wenn eine Eingabe nicht in einem darstellbaren IEEE-SP-Gleitkommabereich vorliegt. Kompatible Hardware kann gemäß einem Aspekt dieser Ausführungsform beliebig vorgehen, sie kann eine außerhalb des gültigen Bereichs (unzulässige) SP64-Biteingabe so behandeln, als wäre sie eine DP-Zahl und sie runden; sie kann einen Spezifikations-Interrupt für außerhalb des gültigen Bereichs liegende Zahlen setzen; sie kann ein Zufallsergebnis erzeugen; oder sie kann überhaupt kein Ergebnis erzeugen.
  • In einem weiteren Beispiel ist eine Umwandlung von DP in SP eine benutzerdefinierte Anweisung zur Datentypumwandlung, und gemäß der Definition dieser benutzerdefinierten Anweisung sollte eine SNaN (d. h. eine Signalisierungs-Nichtzahl, wobei NaN eine Nichtzahl-Angabe gemäß dem IEEE-Standard ist) eine Ausnahme setzen. In einer Ausführungsform kann diese benutzerdefinierte Anweisung auch so definiert sein, dass sie während einer Zahlenumwandlung Ausnahmen für arithmetische Bedingungen setzt (d. h. Unterlauf oder Überlauf). Im Vergleich ist die Umwandlung von SP64 in SP32 eine Formatumwandlung, die einer internen Operation eines Compilers entspricht, der die Hardware nutzt. In einem Beispiel entspricht jeder gültige Datenpunkt in dem SP64-Bit-Format genau einem Datenpunkt in dem SP32-Format. Wenn ein derartiger Datenpunkt als eine Eingabe bereitgestellt wird (und insbesondere SNaNs enthält), werden die Datenpunkte aus der einen Formatdarstellung der zweiten Darstellung zugeordnet, und es wird kein Interrupt gesetzt.
  • In einer Ausführungsform wird eine gültige Zahl mit einfacher Präzision direkt aus einem ersten, in einer Architektur angeordneten Registerformat in ein zweites Registerformat umgewandelt, wobei die Anweisung abgeschlossen wird und das umgewandelte Ergebnis in ein Zielregister für IEEE-Gleitkommazahl- oder Nichtzahl-Eingaben mit einfacher Präzision geschrieben wird. In einem Beispiel wird eine Signalisierungs-NaN in dem Zielregister als eine Signalisierungs-NaN beibehalten.
  • Wie einem Fachmann klar sein wird, können ein oder mehrere Aspekte der vorliegenden Erfindung als ein System, Verfahren oder Computerprogrammprodukt verkörpert werden. Dementsprechend können ein oder mehrere Aspekte der vorliegenden Erfindung in Gestalt einer vollständigen Hardware-Ausführungsform, einer vollständigen Software-Ausführungsform (einschließlich Firmware, residente Software, Mikrocode usw.) oder einer Ausführungsform vorliegen, die Software- und Hardware-Aspekte kombiniert, auf die alle hierin als „Schaltung”, „Modul” oder „System” Bezug genommen werden kann. Ferner können ein oder mehrere Aspekte der vorliegenden Erfindung die Form eines Computerprogrammprodukts annehmen, das in einem oder mehreren computerlesbaren Medien mit einem darin ausgeführten computerlesbaren Programmcode verkörpert ist.
  • Jede Kombination von einem oder mehreren computerlesbaren Medien kann verwendet werden. Das computerlesbare Medium kann ein computerlesbares Speichermedium sein. Ein computerlesbares Speichermedium kann zum Beispiel ein elektronisches, magnetisches, optisches, elektromagnetisches, Infrarot- oder Halbleitersystem, eine derartige Vorrichtung oder Einheit oder jede geeignete Kombination aus dem Vorgenannten sein, es ist aber nicht darauf beschränkt. Zu spezielleren Beispielen (eine nicht erschöpfende Liste) für das computerlesbare Speichermedium würde Folgendes zählen: eine elektrische Verbindung mit einer oder mehreren Drahtleitungen, eine tragbare Computerdiskette, eine Festplatte, ein Direktzugriffspeicher (RAM), ein Nur-Lese-Speicher (ROM), ein löschbarer programmierbarer Nur-Lese-Speicher (EPROM oder Flash-Speicher), ein Lichtwellenleiter, ein tragbarer CD-ROM, eine optische Speichereinheit, eine Magnetspeichereinheit oder jede geeignete Kombination des Vorgenannten. In dem Kontext dieses Dokuments kann ein computerlesbares Speichermedium jedes konkrete Medium sein, das ein Programm enthalten oder speichern kann, das von oder in Verbindung mit einem System, einer Vorrichtung oder einer Einheit zur Anweisungsausführung verwendet werden kann.
  • Unter folgender Bezugnahme auf 11 enthält in einem Beispiel ein Computerprogrammprodukt 1100 beispielsweise ein oder mehrere nicht-flüchtige computerlesbare Speichermedien 1102, um darauf computerlesbare Programmcodemittel oder Logik 1104 zu speichern, um einen oder mehrere Aspekte der vorliegenden Erfindung bereitzustellen und zu ermöglichen.
  • In einem computerlesbaren Medium verkörperter Programmcode kann unter Verwendung eines geeigneten Mediums übertragen werden, einschließlich drahtlos, drahtgebunden, über ein Lichtwellenleiterkabel, HF usw. oder eine geeignete Kombination des Vorgenannten, er ist aber nicht darauf beschränkt.
  • Computerprogrammcode zum Ausführen von Operationen für einen oder mehrere Aspekte der vorliegenden Erfindung kann in jeder Kombination von einer oder mehreren Programmiersprachen geschrieben werden, einschließlich einer objektorientierten Programmiersprache wie Java, Smalltalk, C++ oder dergleichen und herkömmlichen prozeduralen Programmiersprachen wie der Programmiersprache „C”, Assembler oder ähnlichen Programmiersprachen. Der Programmcode kann vollständig auf dem Computer des Benutzers, teilweise auf dem Computer des Benutzers, als eigenständiges Softwarepaket, teilweise auf dem Computer des Benutzers und teilweise auf einem entfernt angeordneten Computer oder vollständig auf dem entfernt angeordneten Computer oder Server ausgeführt werden. In dem letzteren Szenario kann der entfernt angeordnete Computer mit dem Computer des Benutzers über jeden Typ von Netzwerk verbunden sein, einschließlich ein lokales Netzwerk (LAN) oder ein Weitverkehrsnetz (WAN), oder die Verbindung kann zu einem externen Computer hergestellt werden (zum Beispiel über das Internet unter Nutzung eines Internet-Dienstanbieters).
  • Ein oder mehrere Aspekte der vorliegenden Erfindung werden hierin unter Bezugnahme auf Veranschaulichungen des Ablaufplans und/oder der Blockschaubilder von Verfahren, Vorrichtungen (Systemen) und Computerprogrammprodukten gemäß Ausführungsformen der Erfindung beschrieben. Es versteht sich, dass jeder Block in den Ablaufplan-Veranschaulichungen und/oder Blockschaubildern und Kombinationen von Blöcken in den Ablaufplan-Veranschaulichungen und/oder Blockschaubildern durch Computerprogrammanweisungen umgesetzt werden können. Diese Computerprogrammanweisungen können für einen Prozessor eines Mehrzweckcomputers, eines Spezialcomputers oder andere Vorrichtungen, die programmierbare Daten verarbeiten, bereitgestellt werden, um eine Maschine zu erzeugen, sodass die Anweisungen, die über den Prozessor des Computers oder andere Vorrichtungen, die programmierbare Daten verarbeiten, ausgeführt werden, Mittel zum Umsetzen der Funktionen/Handlungen erstellen, die in dem Ablaufplan und/oder dem Block oder den Blöcken des Blockschaubilds angegeben sind.
  • Diese Computerprogrammanweisungen können auch in einem computerlesbaren Medium gespeichert werden, das einen Computer, eine andere Vorrichtung, die programmierbare Daten verarbeitet, oder andere Einheiten so steuern kann, dass sie auf eine bestimmte Weise funktionieren, sodass die in dem computerlesbaren Medium gespeicherten Anweisungen einen Fertigungsartikel erzeugen, einschließlich Anweisungen, die die in dem Ablaufplan und/oder dem Block oder den Blöcken des Blockschaubilds angegebene Funktion/Handlung umsetzen.
  • Die Computerprogrammanweisungen können auch auf einen Computer, eine andere Vorrichtung, die programmierbare Daten verarbeitet, oder andere Einheiten geladenwerden, um die Ausführung einer Serie von Arbeitsschritten auf dem Computer, einer anderen Vorrichtung, die programmierbare Daten ausführt, oder anderen Einheiten zu veranlassen, um einen über den Computer umgesetzten Prozess zu erzeugen, sodass die Anweisungen, die auf dem Computer oder einer anderen programmierbaren Vorrichtung ausgeführt werden, Prozesse zum Umsetzen der Funktionen/Handlungen bereitstellen, die in dem Ablaufplan und/oder dem Block oder den Blöcken des Blockschaubilds angegeben sind.
  • Der Ablaufplan und die Blockschaubilder in den Figuren veranschaulichen die Architektur, die Funktionalität und den Betrieb von möglichen Umsetzungen von Systemen, Verfahren und Computerprogrammprodukten gemäß verschiedenen Ausführungsformen von einem oder mehreren Aspekten der vorliegenden Erfindung. Diesbezüglich kann jeder Block in dem Ablaufplan oder in den Blockschaubildern ein Modul, ein Segment oder einen Codeabschnitt darstellen, der eine oder mehrere ausführbare Anweisungen zum Umsetzen der angegebenen logischen Funktion(en) aufweist. Es ist ebenfalls anzumerken, dass in einigen alternativen Umsetzungen die in dem Block angegebenen Funktionen in einer anderen Reihenfolge auftreten können als in den Figuren angegeben. Zum Beispiel können zwei nacheinander gezeigte Blöcke tatsächlich im Wesentlichen parallel ausgeführt werden, oder die Blöcke können manchmal in der umgekehrten Reihenfolge ausgeführt werden, was von der beteiligten Funktionalität abhängt. Es wird ebenfalls angemerkt, dass jeder Block in den Blockschaubildern und/oder in der Ablaufplan-Veranschaulichung und Kombinationen von Blöcken in den Blockschaubildern und/oder der Ablaufplan-Veranschaulichung durch spezielle Systeme auf der Grundlage von Hardware, die die angegebenen Funktionen oder Handlungen ausführen, oder Kombinationen von spezieller Hardware und Computeranweisungen umgesetzt werden können.
  • Zusätzlich zu Vorgenanntem können ein oder mehrere Aspekte der vorliegenden Erfindung durch einen Dienstanbieter bereitgestellt, angeboten, eingesetzt, verwaltet, gewartet werden usw., der eine Verwaltung von Umgebungen von Kunden anbietet. Zum Beispiel kann der Dienstanbieter Computercode und/oder eine Computer-Infrastruktur erstellen, pflegen, unterstützen usw., die einen oder mehrere Aspekte der vorliegenden Erfindung für einen oder mehrere Kunden ausführen. Im Gegenzug kann der Dienstanbieter zum Beispiel eine Bezahlung von dem Kunden unter einem Abonnement und/oder einer Gebührenvereinbarung erhalten. Zusätzlich oder alternativ kann der Dienstanbieter eine Bezahlung aus dem Verkauf von Werbeinhalten an einen oder mehrere Fremdanbieter erhalten.
  • Unter einem Aspekt der vorliegenden Erfindung kann eine Anwendung zum Ausführen von einem oder mehreren Aspekten der vorliegenden Erfindung verwendet werden. Zum Beispiel weist die Verwendung einer Anwendung ein Bereitstellen einer Computer-Infrastruktur auf, die fähig ist, einen oder mehrere Aspekte der vorliegenden Erfindung auszuführen.
  • Als weiterer Aspekt der vorliegenden Erfindung kann eine Datenverarbeitungs-Infrastruktur verwendet werden, die ein Integrieren von computerlesbarem Code in ein Datenverarbeitungssystem aufweist, in dem der Code in Kombination mit dem Datenverarbeitungssystem fähig ist, einen oder mehrere Aspekte der vorliegenden Erfindung auszuführen.
  • Als noch weiterer Aspekt der vorliegenden Erfindung kann ein Prozess zum Integrieren von Datenverarbeitungs-Infrastruktur bereitgestellt werden, die ein Integrieren von computerlesbarem Code in ein Computersystem aufweist. Das Computersystem weist ein computerlesbares Medium auf, wobei das Computer-Medium einen oder mehrere Aspekte der vorliegenden Erfindung aufweist. Der Code in Kombination mit dem Computersystem ist fähig, einen oder mehrere Aspekte der vorliegenden Erfindung auszuführen.
  • Obwohl verschiedene Ausführungsformen oben beschrieben werden, sind dies nur Beispiele. Zum Beispiel können Datenverarbeitungsumgebungen von anderen Architekturen einen oder mehrere Aspekte der vorliegenden Erfindung verkörpern und verwenden. Ferner gelten ein oder mehrere Aspekte der vorliegenden Erfindung für jedes Format mit mehreren Darstellungen. In einem bestimmten Beispiel können ein oder mehrere Aspekte auf eine Definition einer (128-Bit-) Gleitkommaerweiterung mit Vierfach-Präzision angewendet werden, die ein 64-Bit-Format mit doppelter Präzision und ein 128-Bit-Format mit doppelter Präzision unterstützt. Ein oder mehrere Aspekte können auf ein Konsolidieren mehrerer Erweiterungen angewendet werden, die verschiedene Formatdefinitionen für einen Datentyp unterstützen. Ferner können andere Anweisungen verwendet werden, ohne von einem Erfindungsgedanken der vorliegenden Erfindung abzuweichen.
  • Ferner können weitere Typen von Datenverarbeitungsumgebungen von einem oder mehreren Aspekten der vorliegenden Erfindung profitieren. Als Beispiel kann eine Umgebung einen Emulator (z. B. Software oder andere Emulationsmechanismen) enthalten, durch den eine bestimmte Architektur (beispielsweise einschließlich Anweisungsausführung, in einer Architektur angeordnete Funktionen wie Adressübersetzung und in einer Architektur angeordnete Register) oder eine Untergruppe davon emuliert wird (z. B. auf einem nativen Computersystem mit einem Prozessor und Speicher). In einer derartigen Umgebung können eine oder mehrere Emulationsfunktionen des Emulators einen oder mehrere Aspekte der vorliegenden Erfindung emulieren, auch wenn ein Computer, der den Emulator ausführt, eine andere Architektur haben kann wie die emulierten Funktionen. Zum Beispiel wird im Emulationsmodus die spezifische emulierte Anweisung oder Operation entschlüsselt, und eine entsprechende Emulationsfunktion wird erstellt, um die einzelne Anweisung oder Operation umzusetzen.
  • In einer Emulationsumgebung enthält ein Host-Computer zum Beispiel einen Speicher zum Speichern von Anweisungen und Daten; eine Anweisungsabrufeinheit zum Abrufen von Anweisungen aus dem Speicher und zum optionalen Bereitstellen einer lokalen Pufferung für die abgerufene Anweisung; eine Anweisungsentschlüsselungseinheit zum Empfangen der abgerufenen Anweisungen und zum Ermitteln des Typs von Anweisungen, die abgerufen wurden; und eine Anweisungsausführungseinheit zum Ausführen der Anweisungen. Die Ausführung kann ein Laden von Daten aus dem Speicher in ein Register enthalten; ein Zurückspeichern der Daten aus dem Register in den Speicher; oder ein Ausführen eines arithmetischen oder logischen Operationstyps, wie durch die Entschlüsselungseinheit ermittelt. In einem Beispiel ist jede Einheit in Software umgesetzt. Zum Beispiel werden die Operationen, die durch die Einheiten ausgeführt werden als eine oder mehrere Subroutinen in der Emulator-Software umgesetzt.
  • Als weiteres Beispiel ist ein Datenverarbeitungssystem verwendbar, das zum Speichern und/oder Ausführen von Programmcode geeignet ist, das mindestens einen Prozessor enthält, der direkt oder indirekt über einen Systembus mit Speicherelementen verbunden ist. Die Speicherelemente enthalten zum Beispiel einen lokalen Speicher, der während der tatsächlichen Ausführung des Programmcodes verwendet wird, einen Massenspeicher und einen Cache-Zwischenspeicher, die eine vorübergehende Speicherung von mindestens einigem Programmcode bereitstellen, um die Anzahl zu verringern, wie oft Code während der Ausführung aus dem Massenspeicher abgerufen werden muss.
  • Eingabe-/Ausgabe- oder E/A-Einheiten (einschließlich Tastaturen, Anzeigen, Zeigeeinheiten, DASD, Band, CDs, DVDs, Thumb-Drives und andere Speichermedien usw., die jedoch nicht darauf beschränkt sind) können entweder direkt oder über zwischengeschaltete E/A-Controller mit dem System verbunden werden. Netzwerkadapter können ebenfalls mit dem System verbunden werden, um zu ermöglichen, dass das Datenverarbeitungssystem mit anderen Datenverarbeitungssystemen oder entfernt angeordneten Druckern oder Speichereinheiten über dazwischenliegende private oder öffentliche Netzwerke verbunden werden kann. Modems, Kabelmodems oder Ethernet-Karten sind nur einige der verfügbaren Typen von Netzwerkadaptern.
  • Die hierin verwendete Terminologie dient nur zum Zweck der Beschreibung von bestimmten Ausführungsformen und soll die Erfindung keinesfalls einschränken. Die hierin verwendeten Singularformen „ein”, „eine” und „der/die/das” sollen auch die Pluralformen mit einschließen, es sei denn, der Kontext gibt eindeutig anderes vor. Es versteht sich des Weiteren, dass die Begriffe „weist auf” und/oder „aufweisend” bei Verwendung in dieser Patentschrift das Vorhandensein von ausgewiesenen Merkmalen, Ganzzahlen, Schritten, Operationen, Elementen und/oder Komponenten angeben, das Vorhandensein oder die Hinzufügung von einem oder mehreren anderen Merkmalen, Ganzzahlen, Schritten, Operationen, Elementen, Komponenten und/oder Gruppen davon aber nicht ausschließen.
  • Die entsprechenden Strukturen, Materialien, Handlungen und Entsprechungen aller Mittel oder Schritt-plus-Funktion-Elemente, in den nachstehenden Ansprüchen sollen, sofern vorhanden, alle Strukturen, Materialien oder Handlungen zum Ausführen der Funktion in Kombination mit anderen beanspruchten Elementen enthalten, wie speziell beansprucht. Die Beschreibung der vorliegenden Erfindung wurde zum Zweck der Veranschaulichung und Beschreibung erstellt, sie soll aber keineswegs erschöpfend oder auf die Erfindung in der offenbarten Form eingeschränkt sein. Für Fachleute sind viele Modifizierungen und Variationen offenkundig, ohne von dem Schutzbereich und dem Erfindungsgedanken der Erfindung abzuweichen. Die Ausführungsform wurde ausgewählt und beschrieben, um die Grundgedanken der Erfindung und die praktische Anwendung am besten zu erklären und es anderen Fachleuten zu ermöglichen, die Erfindung für verschiedene Ausführungsformen mit verschiedenen Modifizierungen zu verstehen, die für die vorgesehene bestimmte Verwendung geeignet sind.
  • RFC02182.r6 – VSX Scalar Single-Precision
  • Skalare Gleitkommadaten mit doppelter Präzision werden in VSRs und Speicher im Format mit doppelter Präzision dargestellt.
  • Vektor-Gleitkommadaten mit doppelter Präzision werden in VSRs und Speicher im Format mit doppelter Präzision dargestellt.
  • Skalare Gleitkommadaten mit einfacher Präzision werden in VSRs im Format mit doppelter Präzision und im Speicher im Format mit einfacher Präzision dargestellt.
  • Vektor-Gleitkommadaten mit einfacher Präzision werden in VSRs und Speicher im Format mit einfacher Präzision dargestellt.
  • Operanden mit doppelter Präzision können als Eingabe für skalare arithmetische Operationen mit doppelter Präzision verwendet werden.
  • Operanden mit doppelter Präzision können als Eingabe für skalare arithmetische Operationen mit einfacher Präzision verwendet werden, wenn ein Erfassen von Überlauf- und Unterlaufausnahmen deaktiviert ist.
  • Operanden mit einfacher Präzision können als Eingabe für skalare arithmetische Operationen mit doppelter Präzision und einfacher Präzision verwendet werden.
  • Operanden mit doppelter Präzision können als Eingabe für arithmetische Vektor-Operationen mit doppelter Präzision verwendet werden.
  • Operanden mit einfacher Präzision können als Eingabe für arithmetische Vektor-Operationen mit einfacher Präzision verwendet werden.
  • Anweisungen werden auch für Verarbeitungen bereitgestellt, für die keine doppelte Präzision oder einfache Präzision erforderlich ist. Außerdem werden Anweisungen bereitgestellt, um auf eine Ganzzahlen-Darstellung in VSRs zuzugreifen.
  • Für skalare Daten mit einfacher Präzision wird eine Umwandlung vom Format mit einfacher Präzision in ein Format mit doppelter Präzision beim Laden aus dem Speicher in ein VSR ausgeführt, und eine Umwandlung vom Format mit doppelter Präzision in ein Format mit einfacher Präzision wird beim Speichern aus einem VSR in den Speicher ausgeführt. Durch diese Anweisungen werden keine Gleitkommaausnahmen verursacht.
  • Anweisungen werden zum Umwandeln zwischen Formaten mit einfacher Präzision und doppelter Präzision für skalare und Vektor-Daten in VSRs bereitgestellt.
  • Eine Anweisung wird bereitgestellt, um einen Operanden mit doppeltem Präzisionsformat in einem VSR explizit in einen mit einfacher Präzision umzuwandeln. Eine skalare Gleitkommazahl mit einfacher Präzision ist für sechs Anweisungstypen aktiviert.
  • 1. Load Scalar Single-Precision (Skalar mit einfacher Präzision laden)
  • Diese Anweisungsform greift im Speicher auf einen Gleitkomma-Operanden im Format mit einfacher Präzision zu, wandelt ihn in ein Format mit doppelter Präzision um und lädt ihn in einen VSR. Durch diese Anweisungen werden keine Gleitkommaausnahmen verursacht.
  • 2. Scalar Round to Single-Precision (Skalar auf einfache Präzision runden)
  • xsrsp rundet einen Operanden mit doppelter Präzision auf einfache Präzision, wobei der Exponent auf einen Bereich mit einfacher Präzision geprüft wird und alle Ausnahmen gemäß jeweiligen Aktivierungs-Bits bearbeitet werden, und stellt diesen Operanden in ein VSR im Format mit doppelter Präzision. Für Ergebnisse, die durch arithmetische Anweisungen mit einfacher Präzision, Ladevorgänge mit einfacher Präzision und andere Instanzen von xsrsp erzeugt wurden, ändert xsrsp den Wert nicht. Werte, deren Größenordnung größer als 2319 ist, wenn Overflow aktiviert ist (OE = 1), erzeugen nicht definierte Ergebnisse, da der Wert nicht in den normalisierten Bereich zurück skaliert werden kann. Werte, deren Größenordnung kleiner als 2–318 ist, wenn Underflow aktiviert ist (UE = 1), erzeugen nicht definierte Ergebnisse, da der Wert nicht in den normalisierten Bereich zurück skaliert werden kann.
  • 3. Scalar Convert Single-Precision to Double-Precision (Skalar von einfacher Präzision in doppelte Präzision umwandeln)
  • xscvspdp greift auf einen Gleitkomma-Operanden im Format mit einfacher Präzision aus dem Wortelement 0 des Quellen-VSR zu, wandelt ihn in ein Format mit doppelter Präzision um und stellt ihn in das Doppelwortelement 0 des Ziel-VSR.
  • 4. Scalar Convert Double-Precision to Single-Precision (Skalar von doppelter Präzision in einfache Präzision umwandeln)
  • xscvdpsp rundet den Gleitkommawert mit doppelter Präzision im Doppelwertelement 0 des Quellen-VSR auf einfache Präzision und stellt das Ergebnis in das Wortelement 0 des Ziel-VSR im Format mit einfacher Präzision. Diese Funktion würde verwendet, um skalare Gleitkommadaten in ein Format zu portieren, das für Vektor-Operationen mit einfacher Präzision kompatibel ist. Werte, deren Größenordnung größer als 2319 ist, wenn Overflow aktiviert ist (OE = 1), erzeugen nicht definierte Ergebnisse, da der Wert nicht in den normalisierten Bereich zurück skaliert werden kann. Werte, deren Größenordnung kleiner als 2–318 ist, wenn Underflow aktiviert ist (UE = 1), erzeugen nicht definierte Ergebnisse, da der Wert nicht in den normalisierten Bereich zurück skaliert werden kann.
  • 5. VSX Scalar Single-Precision Arithmetic (VSX Skalar mit einfacher Präzision berechnen)
  • Diese Anweisungsform nimmt Operanden aus den VSRs im Doppelformat, führt die Operation durch, als ob ein Zwischenergebnis mit infiniter Präzision und unbegrenztem Exponentenbereich erzeugt würde, und zwingt dieses Zwischenergebnis dann passend in ein Format mit einfacher Präzision. Status-Bits im FPSCR und optional in dem Bedingungsregister werden so eingerichtet, dass sie das Ergebnis mit einfacher Präzision wiedergeben. Das Ergebnis wird dann in den Ziel-VSR im Format mit doppelter Präzision gestellt. Das Ergebnis liegt in dem Bereich, der durch das einfache Format unterstützt wird.
  • Wenn ein Eingabewert nicht im Format mit einfacher Präzision dargestellt werden kann und weder OE = 1 noch UE = 1 ist, sind das in den Ziel-VSR gestellte Ergebnis und die Einstellung von Status-Bits in dem FPSCR nicht definiert.
  • Wenn der Eingabewert für xsresp oder xsrsqrtesp nicht im Format mit einfacher Präzision darstellbar ist, sind das Ergebnis, das in den Ziel-VSR gestellt wird, und die Einstellung der Status-Bits in dem FPSCR nicht definiert.
  • 6. Store VSX Scalar Single-Precision (VSX Skalar mit einfacher Präzision speichern)
  • sstxsspx wandelt einen Wert mit einfacher Präzision, der im Format mit doppelter Präzision vorliegt, in ein Format mit einfacher Präzision um und speichert diesen Operanden im Speicher. Durch stxsspx werden keine Gleitkommaausnahmen verursacht. (Von dem gespeicherten Wert wird effektiv angenommen, dass er das Ergebnis einer Anweisung eines der vorhergehenden fünf Typen ist).
  • Wenn das Ergebnis einer Anweisung Load VSX Scalar Single-Precision (lxsspx), einer Anweisung VSX Scalar Round to Single-Precision (xsrsp) oder einer Anweisung VSX Scalar Single-Precision Arithmetic[1] in einem VSR gespeichert wird, sind die niedrigstwertigen 29 Bits von FRACTION Null. Anweisungen VSX Scalar Single-Precision Arithmetic: xsaddsp, xsdivsp, xsmulsp, xsresp, xssubsp, xsmaddasp, xsmaddmsp, xsmsubasp, xsmsubmsp, xsnmaddasp, xsnmaddmsp, xsnmsubasp, xsnmsubmsp.
  • VSX Scalar Round to Single-Precision (xsrsp) wird bereitgestellt, um eine Wertumwandlung von doppelter Präzision in einfache Präzision mit entsprechender Ausnahmenprüfung und Rundung zu gestatten. xsrsp sollte verwendet werden, um Gleitkommawerte mit doppelter Präzision in Werte mit einfacher Präzision umzuwandeln, bevor sie in Speicherelementen mit einfachem Format gespeichert werden oder als Operanden für arithmetische Anweisungen mit einfacher Präzision verwendet werden. Werte, die durch Lade- und arithmetische Anweisungen mit einfacher Präzision erzeugt werden, sind bereits Werte mit einfacher Präzision und können direkt in Speicherelementen mit einfachem Format gespeichert werden oder direkt als Operanden für arithmetische Anweisungen mit einfacher Präzision verwendet werden, ohne dass dem Speichern oder der arithmetischen Anweisung ein xsrsp vorausgeht.
  • Ein Wert mit einfacher Präzision kann in skalaren arithmetischen Operationen mit doppelter Präzision verwendet werden. Mit Ausnahme von xsresp oder xsrsqrtesp kann jeder Wert mit doppelter Präzision in skalaren arithmetischen Operationen mit einfacher Präzision verwendet werden, wenn OE = 0 und UE = 0 sind. Wenn OE = 1 oder UE = 1 sind oder wenn es sich um die Anweisung xsresp oder xsrsqrtesp handelt, müssen Quellen-Operanden im Format mit einfacher Präzision dargestellt werden können.
  • Einige Umsetzungen können arithmetische Anweisungen mit einfacher Präzision schneller als arithmetische Anweisungen mit doppelter Präzision ausführen. Daher sollten Daten und Anweisungen mit einfacher Präzision verwendet werden, wenn keine Genauigkeit mit doppelter Präzision erforderlich ist.
  • Operanden mit ganzzahligem Wert
  • Anweisungen werden bereitgestellt, um Gleitkomma-Operanden auf ganzzahlige Werte im Gleitkommaformat zu runden. Um einen Austausch von Daten zwischen der Gleitkomma- und Ganzzahlen-Verarbeitung zu erleichtern, werden Anweisungen zum Umwandeln zwischen Gleitkommaformat mit doppelter und einfacher Präzision und ganzzahligem Wort- und Doppelwortformat in einem VSR bereitgestellt. Berechnungen mit Operanden mit ganzzahligem Wert können unter Verwendung von arithmetischen Anweisungen mit der erforderlichen Präzision ausgeführt werden. (Es ist möglich, dass die Ergebnisse keine ganzzahligen Werte sind.) Die drei Gruppen von Anweisungen, die speziell zum Unterstützen von Operanden mit ganzzahligen Werten bereitgestellt werden, werden im Folgenden beschrieben.
  • 1. Runden auf eine Gleitkomma-Ganzzahl
  • Die Anweisungen VSX Scalar Round to Double-Precision Integer runden einen Operanden mit doppelter Präzision auf einen ganzzahligen Wert im Format mit doppelter Präzision. Anweisungen VSX Scalar Round to Double-Precision Integer. xsrdpi, xsrdpip, xsrdpim, xsrdpiz, xsrdpic.
  • Die Anweisungen VSX Vector Round to Double-Precision Integer runden jedes Vektor-Operandenelement mit doppelter Präzision auf einen ganzzahligen Wert im Format mit doppelter Präzision. Anweisungen VSX Vector Round to Double-Precision Integer: xvrdpi, xvrdpip, xvrdpim, xvrdpiz, xvrdpic.
  • Die Anweisungen VSX Vector Round to Single-Precision Integer runden jedes Vektor-Operandenelement mit einfacher Präzision auf einen ganzzahligen Wert im Format mit einfacher Präzision. Anweisungen VSX Vector Round to Single-Precision Integer. xvrspi, xvrspip, xvrspim, xvrspiz, xvrspic.
  • Mit Ausnahme von xsrdpic, xvrdpic und xvrspic wird eine Rundung unter Verwendung des Rundungsmodus vorgenommen, der durch den Operationscode angegeben wird. Für xsrdpic, xvrdpic und xvrspic wird eine Rundung unter Verwendung des Rundungsmodus vorgenommen, der durch RN angegeben wird.
  • Die Anweisungen VSX Round to Floating-Point Integer können die Ausnahmen Invalid Operation (Ungültige Operation) (VXSNAN) verursachen. Anweisungen VSX Round to Floating-Point Integer. xsrdpi, xsrdpip, xsrdpim, xsrdpiz, xsrdpic, xvrdpi, xvrdpip, xvrdpim, xvrdpiz, xvrdpic, xvrspi, xvrspip, xvrspim, xvrspiz und xvrspic.
  • xsrdpic, xvrdpic und xvrspic können auch die Ausnahme Inexact (Ungenau) verursachen.
  • 2. Umwandeln eines Gleitkommaformats in ein ganzzahliges Format
  • Die Anweisungen VSX Scalar Double-Precision to Integer Format Conversion wandeln einen Operanden mit doppelter Präzision in ein ganzzahliges 32-Bit- oder 64-Bit-Format mit oder ohne Vorzeichen um. Anweisungen VSX Scalar Double-Precision to Integer Format Conversion: xscvdpsxds, xscvdpsxws, xscvdpuxds, xscvdpuxws.
  • Die Anweisungen VSX Vector Double-Precision to Integer Format Conversion wandeln Vektor-Operandenelemente mit doppelter Präzision in ein ganzzahliges 32-Bit- oder 64-Bit-Format mit oder ohne Vorzeichen um. Anweisungen VSX Vector Double-Precision to Integer Format Conversion: xvcvdpsxds, xvcvdpsxws, xvcvdpuxds, xvcvdpuxws.
  • Die Anweisungen VSX Vector Single-Precision to Integer Doubleword Format Conversion wandeln den Wert mit einfacher Präzision in jedem ungeradzahlig nummerierten Wortelement des Quellen-Vektor-Operanden in ein ganzzahliges 64-Bit-Format mit oder ohne Vorzeichen um. Anweisungen VSX Vector Double-Precision to Integer Format Conversion: xvcvspsxds, xvcvspuxds.
  • Die Anweisungen VSX Vector Single-Precision to Integer Word Format Conversion wandeln den Wert mit einfacher Präzision in jedem Wortelement des Quellen-Vektor-Operanden in ein ganzzahliges 32-Bit-Format mit oder ohne Vorzeichen um. Anweisungen VSX Vector Single-Precision to Integer Word Format Conversion: xvcvspsxws, xvcvspuxws.
  • Eine Rundung wird unter Verwendung des Rundungsmodus „Auf Null runden” ausgeführt. Diese Anweisungen können die Ausnahmen Invalid Operation (VXSNAN, VXCVI) und Inexact verursachen.
  • 3. Umwandeln eines ganzzahligen Formats in ein Gleitkommaformat
  • Die Anweisungen VSX Scalar Integer Doubleword to Double-Precision Format Conversion wandeln eine 64-Bit-Ganzzahl mit oder ohne Vorzeichen in einen Gleitkommawert mit doppelter Präzision um und geben das Ergebnis im Format mit doppelter Präzision zurück. Anweisungen VSX Scalar Integer Doubleword to Double-Precision Format Conversion: xscvsxddp, xscvuxddp.
  • Die Anweisungen VSX Scalar Integer Doubleword to Single-Precision Format Conversion wandeln eine 64-Bit-Ganzzahl mit oder ohne Vorzeichen in einen Gleitkommawert mit einfacher Präzision um und geben das Ergebnis im Format mit doppelter Präzision zurück. Anweisungen VSX Scalar Integer Doubleword to Single-Precision Format Conversion: xscvsxddp, xscvuxddp.
  • Die Anweisungen VSX Vector Integer Doubleword to Double-Precision Format Conversion wandeln die 64-Bit-Ganzzahl mit oder ohne Vorzeichen in jedem Doppelwortelement in dem Quellen-Vektor-Operanden in ein Gleitkommaformat mit doppelter Präzision um. Anweisungen VSX Vector Integer Doubleword to Double-Precision Format Conversion: xscvsxddp, xscvuxddp.
  • Die Anweisungen VSX Vector Integer Word to Double-Precision Format Conversion wandeln die 32-Bit-Ganzzahl mit oder ohne Vorzeichen in jedem ungeradzahligen Wortelement in dem Quellen-Vektor-Operanden in ein Gleitkommaformat mit doppelter Präzision um. Anweisungen VSX Vector Integer Word to Double-Precision Format Conversion: xscvsxwdp, xscvuxwdp.
  • Die Anweisungen VSX Vector Integer Doubleword to Single-Precision Format Conversion wandeln die 64-Bit-Ganzzahl mit oder ohne Vorzeichen in jedem Doppelwortelement in dem Quellen-Vektor-Operanden in ein Gleitkommaformat mit einfacher Präzision um. Anweisungen VSX Vector Integer Doubleword to Single-Precision Format Conversion: xscvsxdsp, xscvuxdsp.
  • Die Anweisungen VSX Vector Integer Word to Single-Precision Format Conversion wandeln die 32-Bit-Ganzzahl mit oder ohne Vorzeichen in jedem Wortelement in dem Quellen-Vektor-Operanden in ein Gleitkommaformat mit einfacher Präzision um. Anweisungen VSX Vector Integer Word to Single-Precision Format Conversion: xscvsxwsp, xscvuxwsp.
  • Eine Rundung wird unter Verwendung des in RN spezifizierten Rundungsmodus vorgenommen. Aufgrund der Einschränkungen des Quellenformats kann nur eine Inexact-Ausnahme erzeugt werden.
  • ConvertSPo4toSP(x)
  • x ist ein Gleitkommawert mit einfacher Präzision im Format mit doppelter Präzision.
  • Gibt den Wert x im Format mit einfacher Präzision zurück. x muss mit einfacher Präzision dargestellt werden können, ansonsten ist das zurückgegebene Ergebnis nicht definiert. Für x kann eine Denormalisierung erforderlich sein. Es wird keine Rundung ausgeführt. Wenn x eine SNaN ist, wird es in eine SNaN mit einfacher Präzision mit denselben Nutzdaten wie x umgewandelt.
  • Figure DE112012003864T5_0019
  • Figure DE112012003864T5_0020
  • Figure DE112012003864T5_0021
  • ConvertSPtoSP64(x)
    • x ist ein Gleitkommawert im Format mit einfacher Präzision.
  • Gibt den Wert x im Format mit doppelter Präzision zurück. Wenn x eine SNaN ist, wird es in eine SNaN mit doppelter Präzision mit denselben Nutzdaten wie x umgewandelt.
  • Figure DE112012003864T5_0022
  • Load VSX Scalar as Integer Word Algebraic Indexed XX1-form
    Figure DE112012003864T5_0023
  • In einem Beispiel enthält diese Anweisung zwei Felder, die einen Operationscode identifizieren (wobei z. B. ein Feld; Bits 0 bis 5, einen primären Operationscode aufweist, der mit einem erweiterten Operationscode eines anderen Felds, Bits 21 bis 30 kombiniert (z. B. verkettet) ist), um die Anweisung zu identifizieren; ein erstes Feld (z. B. T-Feld; Bits 6 bis 10) und ein erstes Bit (z. B. TX-Feld; Bit 31); ein zweites Feld (z. B. RA; Bits 11 bis 15); und ein drittes Feld (z. B. RB; Bits 16 bis 20).
    Figure DE112012003864T5_0024
    • XT sei der Wert TX, der mit T verkettet ist.
    • EA sei die Summe der Inhalte von GPR[RA] oder 0, wenn RA gleich 0 ist, und der Inhalte von GPR[RB].
  • Der ganzzahlige 32-Bit-Wert mit Vorzeichen in dem Wort im Speicher unter der Adresse EA wird auf ein Doppelwort vorzeichenerweitert und in das Doppelwortelement 0 von VSR[XT] gestellt.
  • Die Inhalte des Doppelwortelements 1 von VSR[XT] sind nicht definiert.
  • Wenn EA nicht an Wortgrenzen ausgerichtet ist (d. h. Bits 62:63 von EA sind nicht 0), darf statt einem Ausführen des Speicherzugriffs der Systemausrichtungsfehler-Handler aufgerufen werden.
  • Geänderte Sonderregister
    • Keine
  • VSR-Datenlayout für Ixsiwax
    • tgt = VSR[XT]
    • Die Bits 0 bis 63 von 128 Bits enthalten SD.
  • Load VSX Scalar as Integer Word and Zero Indexed XX1-form
    Figure DE112012003864T5_0025
  • In einem Beispiel enthält diese Anweisung zwei Felder, die einen Operationscode identifizieren (wobei z. B. ein Feld, Bits 0 bis 5, einen primären Operationscode aufweist, der mit einem erweiterten Operationscode eines anderen Felds, Bits 21 bis 30 kombiniert (z. B. verkettet) ist), um die Anweisung zu identifizieren; ein erstes Feld (z. B. T-Feld; Bits 6 bis 10) und ein erstes Bit (z. B. TX-Feld; Bit 31); ein zweites Feld (z. B. RA; Bits 11 bis 15); und ein drittes Feld (z. B. RB; Bits 16 bis 20).
    Figure DE112012003864T5_0026
    • XT sei der Wert TX, der mit T verkettet ist.
    • EA sei die Summe der Inhalte von GPR[RA] oder 0, wenn RA gleich 0 ist, und der Inhalte von GPR[RB].
  • Der ganzzahlige 32-Bit-Wert ohne Vorzeichen in dem Wort im Speicher unter der Adresse EA wird um Null auf ein Doppelwort erweitert und in das Doppelwortelement 0 von VSR[XT] gestellt.
  • Die Inhalte des Doppelwortelements 1 von VSR[XT] sind nicht definiert.
  • Wenn EA nicht an Wortgrenzen ausgerichtet ist (d. h. Bits 62:63 von EA sind nicht 0), darf statt einem Ausführen des Speicherzugriffs der Systemausrichtungsfehler-Handler aufgerufen werden.
  • Geänderte Sonderregister
    • Keine
  • VSR-Datenlayout für Ixsiwzx
    • stgt = VSR[XT]
    • Die Bits 0 bis 63 von 128 Bits enthalten UD.
  • Load VSX Scalar Single-Precision Indexed XX1-form
    Figure DE112012003864T5_0027
  • In einem Beispiel enthält diese Anweisung zwei Felder, die einen Operationscode identifizieren (wobei z. B. ein Feld, Bits 0 bis 5, einen primären Operationscode aufweist, der mit einem erweiterten Operationscode eines anderen Felds, Bits 21 bis 30 kombiniert (z. B. verkettet) ist), um die Anweisung zu identifizieren; ein erstes Feld (z. B. T-Feld; Bits 6 bis 10) und ein erstes Bit (z. B. TX-Feld; Bit 31); ein zweites Feld (z. B. RA; Bits 11 bis 15); und ein drittes Feld (z. B. RB; Bits 16 bis 20).
    Figure DE112012003864T5_0028
    • XT sei der Wert TX, der mit T verkettet ist.
    • EA sei die Summe der Inhalte von GPR[RA] oder 0, wenn RA gleich 0 ist, und der Inhalte von GPR[RB].
  • Der Gleitkommawert mit einfacher Präzision in dem Wort im Speicher unter der Adresse EA wird in das Doppelwortelement 0 von VSR[XT] im Format mit doppelter Präzision gestellt.
  • Die Inhalte des Doppelwortelements 1 von VSR[XT] sind nicht definiert.
  • Wenn EA nicht an Wortgrenzen ausgerichtet ist (d. h. Bits 62:63 von EA sind nicht 0), darf statt einem Ausführen des Speicherzugriffs der Systemausrichtungsfehler-Handler aufgerufen werden.
  • Geänderte Sonderregister
    • Keine
  • VSR-Datenlayout für lxsspx
    • tgt = VSR[XT]
    • Die Bits 0 bis 63 von 128 Bits enthalten DP.
  • Store VSX Scalar as Integer Word Indexed XX1-form
    Figure DE112012003864T5_0029
  • In einem Beispiel enthält diese Anweisung zwei Felder, die einen Operationscode identifizieren (wobei z. B. ein Feld, Bits 0 bis 5, einen primären Operationscode aufweist, der mit einem erweiterten Operationscode eines anderen Felds, Bits 21 bis 30 kombiniert (z. B. verkettet) ist), um die Anweisung zu identifizieren; ein erstes Feld (z. B. S-Feld; Bits 6 bis 10) und ein erstes Bit (z. B. SX-Feld; Bit 31); ein zweites Feld (z. B. RA; Bits 11 bis 15); und ein drittes Feld (z. B. RB; Bits 16 bis 20).
    Figure DE112012003864T5_0030
    • XS sei der Wert SX, der mit S verkettet ist.
    • EA sei die Summe der Inhalte von GPR[RA] oder 0, wenn RA gleich 0 ist, und der Inhalte von GPR[RB].
  • Die Inhalte von Wortelement 1 von VSR[XS] werden in das Wort im Speicher unter der Adresse EA im Format mit einfacher Präzision gestellt.
  • Wenn EA nicht an Wortgrenzen ausgerichtet ist (d. h. Bits 62:63 von EA sind nicht 0), darf statt einem Ausführen des Speicherzugriffs der Systemausrichtungsfehler-Handler aufgerufen werden.
  • Geänderte Sonderregister
    • Keine
  • VSR-Datenlayout für stxsspx
    • src = VSR[XS]
    • Die Bits 32 bis 63 von 128 Bits enthalten SW/UW.
  • Store VSX Scalar Single-Precision Indexed XX1-form
    Figure DE112012003864T5_0031
  • In einem Beispiel enthält diese Anweisung zwei Felder, die einen Operationscode identifizieren (wobei z. B. ein Feld, Bits 0 bis 5, einen primären Operationscode aufweist, der mit einem erweiterten Operationscode eines anderen Felds, Bits 21 bis 30 kombiniert (z. B. verkettet) ist), um die Anweisung zu identifizieren; ein erstes Feld (z. B. S-Feld; Bits 6 bis 10) und ein erstes Bit (z. B. SX-Feld; Bit 31); ein zweites Feld (z. B. RA; Bits 11 bis 15); und ein drittes Feld (z. B. RB; Bits 16 bis 20).
    Figure DE112012003864T5_0032
    • XS sei der Wert SX, der mit S verkettet ist.
    • EA sei die Summe der Inhalte von GPR[RA] oder 0, wenn RA gleich 0 ist, und der Inhalte von GPR[RB].
  • Der Wert mit einfacher Präzision im Gleitkommaformat mit doppelter Präzision im Doppelwortelement 0 von VSR[XT] wird in das Wort im Speicher unter der Adresse EA im Format mit einfacher Präzision gestellt.
  • Wenn EA nicht an Wortgrenzen ausgerichtet ist (d. h. Bits 62:63 von EA sind nicht 0), darf statt einem Ausführen des Speicherzugriffs der Systemausrichtungsfehler-Handler aufgerufen werden.
  • Geänderte Sonderregister
    • Keine
  • VSR-Datenlayout für stxsspx
    • src = VSR[XS]
    • Die Bits 0 bis 63 von 128 Bits enthalten DP.
  • VSX Scalar Add Single-Precision XX3-form
    Figure DE112012003864T5_0033
  • In einem Beispiel enthält diese Anweisung zwei Felder, die einen Operationscode identifizieren (wobei z. B. ein Feld, Bits 0 bis 5, einen primären Operationscode aufweist, der mit einem erweiterten Operationscode eines anderen Felds, Bits 21 bis 28 kombiniert (z. B. verkettet) ist), um die Anweisung zu identifizieren; ein erstes Feld (z. B. T-Feld; Bits 6 bis 10) und ein erstes Bit (z. B. TX-Feld; Bit 31); ein zweites Feld (z. B. A-Feld; Bits 11 bis 15) und ein zweites Bit (z. B. AX-Feld; Bit 29); und ein drittes Feld (z. B. B-Feld; Bits 16 bis 20) und ein drittes Bit (z. B. BX-Feld; Bit 30).
    Figure DE112012003864T5_0034
    Figure DE112012003864T5_0035
    • XT sei der Wert TX, der mit T verkettet ist.
    • XA sei der Wert AX, der mit A verkettet ist.
    • XB sei der Wert BX, der mit B verkettet ist.
    • src1 sei der Gleitkommawert mit doppelter Präzision im Doppelwortelement 0 von VSR[XA].
    • src2 sei der Gleitkommawert mit doppelter Präzision im Doppelwortelement 0 von VSR[XB].
    • src2 wird zu src1 addiert, wodurch eine Summe mit unbegrenztem Bereich und unbegrenzter Präzision erzeugt wird. Gleitkommaaddition beruht auf Exponentenvergleich und Addition der beiden Mantissen. Die Exponenten der zwei Operanden werden verglichen und die den kleineren Exponenten begleitende Mantisse wird nach rechts verschoben, wobei ihr Exponent für jedes verschobene Bit um Eins erhöht wird, bis die beiden Exponenten gleich sind. Die beiden Mantissen werden dann entsprechend addiert oder subtrahiert, abhängig von den Vorzeichen der Operanden, um eine Zwischensumme zu bilden. Alle 53 Bits der Mantisse sowie alle drei Schutzbits (G, R und X) fließen in die Berechnung ein.
  • Die Summe wird normalisiert. Gleitkommanormalisierung beruht auf einem Verschieben der Mantisse nach links, bis das höchstwertige Bit 1 ist, und einem Vermindern des Exponenten um die Anzahl von Bits, um die die Mantisse verschoben wurde.
  • Das Zwischenergebnis wird unter Verwendung des durch RN angegebenen Rundungsmodus auf einfache Präzision gerundet.
  • Das Ergebnis wird in das Doppelwortelement 0 von VSR[XT] im Format mit doppelter Präzision gestellt.
  • Die Inhalte des Doppelwortelements 1 von VSR[XT] sind nicht definiert.
  • FPRF wird auf die Klasse und das Vorzeichen des Ergebnisses gesetzt, das im Format mit einfacher Präzision dargestellt ist. FR wird so eingerichtet, dass angegeben wird, ob das Ergebnis beim Runden erhöht worden ist. FI wird so eingerichtet, dass angegeben wird, ob das Ergebnis ungenau ist.
  • Wenn eine Ausnahme Invalid Operation mit Trap-Aktivierung auftritt, werden VSR[XT] und FPRF nicht modifiziert, und FR und FI werden auf 0 gesetzt.
  • Geänderte Sonderregister
    Figure DE112012003864T5_0036
  • VSR-Datenlayout für xsaddsp
    • src1 = VSR[XA]
    • Die Bits 0 bis 63 von 128 Bits enthalten DP.
    • src2 = VSR[XB]
    • Die Bits 0 bis 63 von 128 Bits enthalten DP.
    • tgt = VSR[XT]
    • Die Bits 0 bis 63 von 128 Bits enthalten DP.
  • VSX Scalar Convert Signed Integer Doubleword to floating-point format and round to Single-Precision XX2-form
    Figure DE112012003864T5_0037
  • In einem Beispiel enthält diese Anweisung zwei Felder, die einen Operationscode identifizieren (wobei z. B. ein Feld, Bits 0 bis 5, einen primären Operationscode aufweist, der mit einem erweiterten Operationscode eines anderen Felds, Bits 21 bis 29 kombiniert (z. B. verkettet) ist), um die Anweisung zu identifizieren; ein erstes Feld (z. B. T-Feld; Bits 6 bis 10) und ein erstes Bit (z. B. TX-Feld; Bit 31); und ein zweites Feld (z. B. B-Feld; Bits 16 bis 20) und ein zweites Bit (z. B. BX-Feld; Bit 30).
    Figure DE112012003864T5_0038
    • XT sei der Wert TX, der mit T verkettet ist.
    • XB sei der Wert BX, der mit B verkettet ist.
    • src sei der ganzzahlige Zweierkomplementwert im Doppelwortelement 0 von VSR[XB].
    • src wird in Gleitkommaformat umgewandelt und unter Verwendung des durch RN angegebenen Rundungsmodus auf einfache Präzision gerundet.
  • Das Ergebnis wird in das Doppelwortelement 0 von VSR[XT] im Format mit doppelter Präzision gestellt.
  • Die Inhalte des Doppelwortelements 1 von VSR[XT] sind nicht definiert.
  • FPRF wird auf die Klasse und das Vorzeichen des Ergebnisses gesetzt, das im Format mit einfacher Präzision dargestellt ist. FR wird so eingerichtet, dass angegeben wird, ob das Ergebnis beim Runden erhöht worden ist. FI wird so eingerichtet, dass angegeben wird, ob das Ergebnis ungenau ist.
  • Geänderte Sonderregister
    Figure DE112012003864T5_0039
  • VSR-Datenlayout für xscvsxdsp
    • src = VSR[XB]
    • Die Bits 0 bis 63 von 128 Bits enthalten SD.
    • tgt = VSR[XT ]
    • Die Bits 0 bis 63 von 128 Bits enthalten DP.
  • VSX Scalar Convert Unsigned Integer Doubleword to floating-point format and round to Single-Precision XX2-form
    Figure DE112012003864T5_0040
  • In einem Beispiel enthält diese Anweisung zwei Felder, die einen Operationscode identifizieren (wobei z. B. ein Feld, Bits 0 bis 5, einen primären Operationscode aufweist, der mit einem erweiterten Operationscode eines anderen Felds, Bits 21 bis 29 kombiniert (z. B. verkettet) ist), um die Anweisung zu identifizieren; ein erstes Feld (z. B. T-Feld; Bits 6 bis 10) und ein erstes Bit (z. B. TX-Feld; Bit 31); und ein zweites Feld (z. B. B-Feld; Bits 16 bis 20) und ein zweites Bit (z. B. BX-Feld; Bit 30).
    Figure DE112012003864T5_0041
    • XT sei der Wert TX, der mit T verkettet ist.
    • XB sei der Wert BX, der mit B verkettet ist.
    • src sei der ganzzahlige Wert ohne Vorzeichen im Doppelwortelement 0 von VSR[XB].
    • src wird in Gleitkommaformat umgewandelt und unter Verwendung des durch RN angegebenen Rundungsmodus auf einfache Präzision gerundet.
  • Das Ergebnis wird in das Doppelwortelement 0 von VSR[XT] im Format mit doppelter Präzision gestellt.
  • Die Inhalte des Doppelwortelements 1 von VSR[XT] sind nicht definiert.
  • FPRF wird auf die Klasse und das Vorzeichen des Ergebnisses gesetzt, das im Format mit einfacher Präzision dargestellt ist. FR wird so eingerichtet, dass angegeben wird, ob das Ergebnis beim Runden erhöht worden ist. FI wird so eingerichtet, dass angegeben wird, ob das Ergebnis ungenau ist.
  • Geänderte Sonderregister
    Figure DE112012003864T5_0042
  • VSR-Datenlayout für xscvuxdsp
    • src = VSR[XB]
    • Die Bits 0 bis 63 von 128 Bits enthalten UD.
    • tgt = VSR[XT]
    • Die Bits 0 bis 63 von 128 Bits enthalten DP.
  • VSX Scalar Divide Single-Precision XX3-form
    Figure DE112012003864T5_0043
  • In einem Beispiel enthält diese Anweisung zwei Felder, die einen Operationscode identifizieren (wobei z. B. ein Feld, Bits 0 bis 5, einen primären Operationscode aufweist, der mit einem erweiterten Operationscode eines anderen Felds, Bits 21 bis 28 kombiniert (z. B. verkettet) ist), um die Anweisung zu identifizieren; ein erstes Feld (z. B. T-Feld; Bits 6 bis 10) und ein erstes Bit (z. B. TX-Feld; Bit 31); ein zweites Feld (z. B. A-Feld; Bits 11 bis 15) und ein zweites Bit (z. B. AX-Feld; Bit 29); und ein drittes Feld (z. B. B-Feld; Bits 16 bis 20) und ein drittes Bit (z. B. BX-Feld; Bit 30).
    Figure DE112012003864T5_0044
    Figure DE112012003864T5_0045
    • XT sei der Wert TX, der mit T verkettet ist.
    • XA sei der Wert AX, der mit A verkettet ist.
    • XB sei der Wert BX, der mit B verkettet ist.
    • src1 sei der Gleitkommawert mit doppelter Präzision im Doppelwortelement 0 von VSR[XA].
    • src2 sei der Gleitkommawert mit doppelter Präzision im Doppelwortelement 0 von VSR[XB].
    • src1 wird durch src2 dividiert, wodurch ein Quotient mit unbegrenztem Bereich und unbegrenzter Präzision erzeugt wird. Gleitkommadivision beruht auf Exponentensubtraktion und Division der Mantissen.
  • Der Quotient wird normalisiert. Gleitkommanormalisierung beruht auf einem Verschieben der Mantisse nach links, bis das höchstwertige Bit 1 ist, und einem Vermindern des Exponenten um die Anzahl von Bits, um die die Mantisse verschoben wurde.
  • Das Zwischenergebnis wird unter Verwendung des durch RN angegebenen Rundungsmodus auf einfache Präzision gerundet.
  • Das Ergebnis wird in das Doppelwortelement 0 von VSR[XT] im Format mit doppelter Präzision gestellt.
  • Die Inhalte des Doppelwortelements 1 von VSR[XT] sind nicht definiert.
  • FPRF wird auf die Klasse und das Vorzeichen des Ergebnisses gesetzt, das im Format mit einfacher Präzision dargestellt ist. FR wird so eingerichtet, dass angegeben wird, ob das Ergebnis beim Runden erhöht worden ist. FI wird so eingerichtet, dass angegeben wird, ob das Ergebnis ungenau ist.
  • Wenn eine Ausnahme Invalid Operation mit Trap-Aktivierung oder eine Ausnahme Zero Divide (Nullteilung) mit Trap-Aktivierung auftritt, werden VSR[XT] und FPRF nicht modifiziert, und FR und FI werden auf 0 gesetzt.
  • Geänderte Sonderregister
    Figure DE112012003864T5_0046
  • VSR-Datenlayout für xsdivsp
    • src1 = VSR[XA]
    • Die Bits 0 bis 63 von 128 Bits enthalten DP.
    • src2 = VSR[XB]
    • Die Bits 0 bis 63 von 128 Bits enthalten DP.
    • tgt = VSR[XT]
    • Die Bits 0 bis 63 von 128 Bits enthalten DP.
  • VSX Scalar Multiply-Add Single-Precision XX3-form
    Figure DE112012003864T5_0047
  • In einem Beispiel enthält diese Anweisung zwei Felder, die einen Operationscode identifizieren (wobei z. B. ein Feld, Bits 0 bis 5, einen primären Operationscode aufweist, der mit einem erweiterten Operationscode eines anderen Felds, Bits 21 bis 28 kombiniert (z. B. verkettet) ist), um die Anweisung zu identifizieren; ein erstes Feld (z. B. T-Feld; Bits 6 bis 10) und ein erstes Bit (z. B. TX-Feld; Bit 31); ein zweites Feld (z. B. A-Feld; Bits 11 bis 15) und ein zweites Bit (z. B. AX-Feld; Bit 29); und ein drittes Feld (z. B. B-Feld; Bits 16 bis 20) und ein drittes Bit (z. B. BX-Feld; Bit 30).
  • Figure DE112012003864T5_0048
  • In einem Beispiel enthält diese Anweisung zwei Felder, die einen Operationscode identifizieren (wobei z. B. ein Feld, Bits 0 bis 5, einen primären Operationscode aufweist, der mit einem erweiterten Operationscode eines anderen Felds, Bits 21 bis 28 kombiniert (z. B. verkettet) ist), um die Anweisung zu identifizieren; ein erstes Feld (z. B. T-Feld; Bits 6 bis 10) und ein erstes Bit (z. B. TX-Feld; Bit 31); ein zweites Feld (z. B. A-Feld; Bits 11 bis 15) und ein zweites Bit (z. B. AX-Feld; Bit 29); und ein drittes Feld (z. B. B-Feld; Bits 16 bis 20) und ein drittes Bit (z. B. BX-Feld; Bit 30).
    Figure DE112012003864T5_0049
    Figure DE112012003864T5_0050
    Figure DE112012003864T5_0051
    • XT sei der Wert TX, der mit T verkettet ist.
    • XA sei der Wert AX, der mit A verkettet ist.
    • XB sei der Wert BX, der mit B verkettet ist.
  • Für xsmaddasp wird wie folgt vorgegangen.
    • – src1 sei der Gleitkommawert mit doppelter Präzision im Doppelwortelement 0 von VSR[XA].
    • – src2 sei der Gleitkommawert mit doppelter Präzision im Doppelwortelement 0 von VSR[XT].
    • – src3 sei der Gleitkommawert mit doppelter Präzision im Doppelwortelement 0 von VSR[XB].
  • Für xsmaddmsp wird wie folgt vorgegangen.
    • – src1 sei der Gleitkommawert mit doppelter Präzision im Doppelwortelement 0 von VSR[XA].
    • – src2 sei der Gleitkommawert mit doppelter Präzision im Doppelwortelement 0 von VSR[XB].
    • – src3 sei der Gleitkommawert mit doppelter Präzision im Doppelwortelement 0 von VSR[XT].
    • src1 wird mit src3 multipliziert, wodurch ein Produkt mit unbegrenztem Bereich und unbegrenzter Präzision erzeugt wird. Gleitkommamultiplikation beruht auf Exponentenaddition und Multiplikation der Mantissen.
    • src2 wird zum Produkt addiert, wodurch eine Summe mit unbegrenztem Bereich und unbegrenzter Präzision erzeugt wird. Gleitkommaaddition beruht auf Exponentenvergleich und Addition der beiden Mantissen. Die Exponenten der zwei Operanden werden verglichen und die den kleineren Exponenten begleitende Mantisse wird nach rechts verschoben, wobei ihr Exponent für jedes verschobene Bit um Eins erhöht wird, bis die beiden Exponenten gleich sind. Die beiden Mantissen werden dann entsprechend addiert oder subtrahiert, abhängig von den Vorzeichen der Operanden, um eine Zwischensumme zu bilden. Alle 53 Bits der Mantisse sowie alle drei Schutzbits (G, R und X) fließen in die Berechnung ein.
  • Die Summe wird normalisiert. Gleitkommanormalisierung beruht auf einem Verschieben der Mantisse nach links, bis das höchstwertige Bit 1 ist, und einem Vermindern des Exponenten um die Anzahl von Bits, um die die Mantisse verschoben wurde.
  • Das Zwischenergebnis wird unter Verwendung des durch RN angegebenen Rundungsmodus auf einfache Präzision gerundet.
  • Das Ergebnis wird in das Doppelwortelement 0 von VSR[XT] im Format mit doppelter Präzision gestellt.
  • Die Inhalte des Doppelwortelements 1 von VSR[XT] sind nicht definiert.
  • FPRF wird auf die Klasse und das Vorzeichen des Ergebnisses gesetzt, das im Format mit einfacher Präzision dargestellt ist. FR wird so eingerichtet, dass angegeben wird, ob das Ergebnis beim Runden erhöht worden ist. FI wird so eingerichtet, dass angegeben wird, ob das Ergebnis ungenau ist.
  • Wenn eine Ausnahme Invalid Operation mit Trap-Aktivierung auftritt, werden VSR[XT] und FPRF nicht modifiziert, und FR und FI werden auf 0 gesetzt.
  • Geänderte Sonderregister
    Figure DE112012003864T5_0052
  • VSR-Datenlayout für xsmadd(a|m)sp
    • src1 = VSR[XA]
    • Die Bits 0 bis 63 von 128 Bits enthalten DP.
    • src2 = xsmaddasp ? VSR[XT] : VSR[XB]
    • Die Bits 0 bis 63 von 128 Bits enthalten DP.
    • src3 = xsmaddasp ? VSR[XB] : VSR[XT]
    • Die Bits 0 bis 63 von 128 Bits enthalten DP.
    • tgt = VSR[XT]
    • Die Bits 0 bis 63 von 128 Bits enthalten DP.
  • VSX Scalar Multiply-Subtract Single-Precision XX3-form
    Figure DE112012003864T5_0053
  • In einem Beispiel enthält diese Anweisung zwei Felder, die einen Operationscode identifizieren (wobei z. B. ein Feld, Bits 0 bis 5, einen primären Operationscode aufweist, der mit einem erweiterten Operationscode eines anderen Felds, Bits 21 bis 28 kombiniert (z. B. verkettet) ist), um die Anweisung zu identifizieren; ein erstes Feld (z. B. T-Feld; Bits 6 bis 10) und ein erstes Bit (z. B. TX-Feld; Bit 31); ein zweites Feld (z. B. A-Feld; Bits 11 bis 15) und ein zweites Bit (z. B. AX-Feld; Bit 29); und ein drittes Feld (z. B. B-Feld; Bits 16 bis 20) und ein drittes Bit (z. B. BX-Feld; Bit 30).
  • Figure DE112012003864T5_0054
  • In einem Beispiel enthält diese Anweisung zwei Felder, die einen Operationscode identifizieren (wobei z. B. ein Feld, Bits 0 bis 5, einen primären Operationscode aufweist, der mit einem erweiterten Operationscode eines anderen Felds, Bits 21 bis 28 kombiniert (z. B. verkettet) ist), um die Anweisung zu identifizieren; ein erstes Feld (z. B. T-Feld; Bits 6 bis 10) und ein erstes Bit (z. B. TX-Feld; Bit 31); ein zweites Feld (z. B. A-Feld; Bits 11 bis 15) und ein zweites Bit (z. B. AX-Feld; Bit 29); und ein drittes Feld (z. B. B-Feld; Bits 16 bis 20) und ein drittes Bit (z. B. BX-Feld; Bit 30).
    Figure DE112012003864T5_0055
    Figure DE112012003864T5_0056
    Figure DE112012003864T5_0057
    • XT sei der Wert TX, der mit T verkettet ist.
    • XA sei der Wert AX, der mit A verkettet ist.
    • XB sei der Wert BX, der mit B verkettet ist.
  • Für xsmsubasp wird wie folgt vorgegangen.
    • – src1 sei der Gleitkommawert mit doppelter Präzision im Doppelwortelement 0 von VSR[XA].
    • – src2 sei der Gleitkommawert mit doppelter Präzision im Doppelwortelement 0 von VSR[XT].
    • – src3 sei der Gleitkommawert mit doppelter Präzision im Doppelwortelement 0 von VSR[XB].
  • Für xsmsubmsp wird wie folgt vorgegangen.
    • – src1 sei der Gleitkommawert mit doppelter Präzision im Doppelwortelement 0 von VSR[XA].
    • – src2 sei der Gleitkommawert mit doppelter Präzision im Doppelwortelement 0 von VSR[XB].
    • – src3 sei der Gleitkommawert mit doppelter Präzision im Doppelwortelement 0 von VSR[XT].
    • src1 wird mit src3 multipliziert, wodurch ein Produkt mit unbegrenztem Bereich und unbegrenzter Präzision erzeugt wird. Gleitkommamultiplikation beruht auf Exponentenaddition und Multiplikation der Mantissen.
    • src2 wird negiert und zum Produkt addiert, wodurch eine Summe mit unbegrenztem Bereich und unbegrenzter Präzision erzeugt wird. Gleitkommaaddition beruht auf Exponentenvergleich und Addition der beiden Mantissen. Die Exponenten der zwei Operanden werden verglichen und die den kleineren Exponenten begleitende Mantisse wird nach rechts verschoben, wobei ihr Exponent für jedes verschobene Bit um Eins erhöht wird, bis die beiden Exponenten gleich sind. Die beiden Mantissen werden dann entsprechend addiert oder subtrahiert, abhängig von den Vorzeichen der Operanden, um eine Zwischensumme zu bilden. Alle 53 Bits der Mantisse sowie alle drei Schutzbits (G, R und X) fließen in die Berechnung ein.
  • Das Ergebnis mit unbegrenztem Bereich und unbegrenzter Präzision wird normalisiert. Gleitkommanormalisierung beruht auf einem Verschieben der Mantisse nach links, bis das höchstwertige Bit 1 ist, und einem Vermindern des Exponenten um die Anzahl von Bits, um die die Mantisse verschoben wurde.
  • Das Zwischenergebnis wird unter Verwendung des durch RN angegebenen Rundungsmodus auf einfache Präzision gerundet.
  • Das Ergebnis wird in das Doppelwortelement 0 von VSR[XT] im Format mit doppelter Präzision gestellt.
  • Die Inhalte des Doppelwortelements 1 von VSR[XT] sind nicht definiert.
  • FPRF wird auf die Klasse und das Vorzeichen des Ergebnisses gesetzt, das im Format mit einfacher Präzision dargestellt ist. FR wird so eingerichtet, dass angegeben wird, ob das Ergebnis beim Runden erhöht worden ist. FI wird so eingerichtet, dass angegeben wird, ob das Ergebnis ungenau ist.
  • Wenn eine Ausnahme Invalid Operation mit Trap-Aktivierung auftritt, werden VSR[XT] und FPRF nicht modifiziert, und FR und FI werden auf 0 gesetzt.
  • Geänderte Sonderregister
    Figure DE112012003864T5_0058
  • VSR-Datenlayout für xsmsub(a|m)sp
    • src1 = VSR[XA]
    • Die Bits 0 bis 63 von 128 Bits enthalten DP.
    • ssrc2 = xsmsubasp ? VSR[XT] : VSR[XB]
    • Die Bits 0 bis 63 von 128 Bits enthalten DP.
    • src3 = xsmsubasp ? VSR[XB] : VSR[XT]
    • Die Bits 0 bis 63 von 128 Bits enthalten DP.
    • tgt = VSR[XT]
    • Die Bits 0 bis 63 von 128 Bits enthalten DP.
  • VSX Scalar Multiply Single-Precision XX3-form
    Figure DE112012003864T5_0059
  • In einem Beispiel enthält diese Anweisung zwei Felder, die einen Operationscode identifizieren (wobei z. B. ein Feld, Bits 0 bis 5, einen primären Operationscode aufweist, der mit einem erweiterten Operationscode eines anderen Felds, Bits 21 bis 28 kombiniert (z. B. verkettet) ist), um die Anweisung zu identifizieren; ein erstes Feld (z. B. T-Feld; Bits 6 bis 10) und ein erstes Bit (z. B. TX-Feld; Bit 31); ein zweites Feld (z. B. A-Feld; Bits 11 bis 15) und ein zweites Bit (z. B. AX-Feld; Bit 29); und ein drittes Feld (z. B. B-Feld; Bits 16 bis 20) und ein drittes Bit (z. B. BX-Feld; Bit 30).
    Figure DE112012003864T5_0060
    Figure DE112012003864T5_0061
    • XT sei der Wert TX, der mit T verkettet ist.
    • XA sei der Wert AX, der mit A verkettet ist.
    • XB sei der Wert BX, der mit B verkettet ist.
    • src1 sei der Gleitkommawert mit doppelter Präzision im Doppelwortelement 0 von VSR[XA].
    • src2 sei der Gleitkommawert mit doppelter Präzision im Doppelwortelement 0 von VSR[XB].
    • src1 wird mit src2 multipliziert, wodurch ein Produkt mit unbegrenztem Bereich und unbegrenzter Präzision erzeugt wird. Gleitkommamultiplikation beruht auf Exponentenaddition und Multiplikation der Mantissen.
  • Das Produkt wird normalisiert. Gleitkommanormalisierung beruht auf einem Verschieben der Mantisse nach links, bis das höchstwertige Bit 1 ist, und einem Vermindern des Exponenten um die Anzahl von Bits, um die die Mantisse verschoben wurde.
  • Das Zwischenergebnis wird unter Verwendung des durch RN angegebenen Rundungsmodus auf einfache Präzision gerundet.
  • Das Ergebnis wird in das Doppelwortelement 0 von VSR[XT] im Format mit doppelter Präzision gestellt.
  • Die Inhalte des Doppelwortelements 1 von VSR[XT] sind nicht definiert.
  • FPRF wird auf die Klasse und das Vorzeichen des Ergebnisses gesetzt, das im Format mit einfacher Präzision dargestellt ist. FR wird so eingerichtet, dass angegeben wird, ob das Ergebnis beim Runden erhöht worden ist. FI wird so eingerichtet, dass angegeben wird, ob das Ergebnis ungenau ist.
  • Wenn eine Ausnahme Invalid Operation mit Trap-Aktivierung auftritt, werden VSR[XT] und FPRF nicht modifiziert, und FR und FI werden auf 0 gesetzt.
  • Geänderte Sonderregister
    Figure DE112012003864T5_0062
  • Figure DE112012003864T5_0063
  • VSR-Datenlayout für xsmulsp
    • src1 = VSR[XA]
    • Die Bits 0 bis 63 von 128 Bits enthalten DP.
    • src2 = VSR[XB]
    • Die Bits 0 bis 63 von 128 Bits enthalten DP.
    • tgt = VSR[XT]
    • Die Bits 0 bis 63 von 128 Bits enthalten DP.
  • VSX Scalar Negative Multiply-Add Single-Precision XX3-form
    Figure DE112012003864T5_0064
  • In einem Beispiel enthält diese Anweisung zwei Felder, die einen Operationscode identifizieren (wobei z. B. ein Feld, Bits 0 bis 5, einen primären Operationscode aufweist, der mit einem erweiterten Operationscode eines anderen Felds, Bits 21 bis 28 kombiniert (z. B. verkettet) ist), um die Anweisung zu identifizieren; ein erstes Feld (z. B. T-Feld; Bits 6 bis 10) und ein erstes Bit (z. B. TX-Feld; Bit 31); ein zweites Feld (z. B. A-Feld; Bits 11 bis 15) und ein zweites Bit (z. B. AX-Feld; Bit 29); und ein drittes Feld (z. B. B-Feld; Bits 16 bis 20) und ein drittes Bit (z. B. BX-Feld; Bit 30).
  • Figure DE112012003864T5_0065
  • In einem Beispiel enthält diese Anweisung zwei Felder, die einen Operationscode identifizieren (wobei z. B. ein Feld, Bits 0 bis 5, einen primären Operationscode aufweist, der mit einem erweiterten Operationscode eines anderen Felds, Bits 21 bis 28 kombiniert (z. B. verkettet) ist), um die Anweisung zu identifizieren; ein erstes Feld (z. B. T-Feld; Bits 6 bis 10) und ein erstes Bit (z. B. TX-Feld; Bit 31); ein zweites Feld (z. B. A-Feld; Bits 11 bis 15) und ein zweites Bit (z. B. AX-Feld; Bit 29); und ein drittes Feld (z. B. B-Feld; Bits 16 bis 20) und ein drittes Bit (z. B. BX-Feld; Bit 30).
    Figure DE112012003864T5_0066
    Figure DE112012003864T5_0067
    • XT sei der Wert TX, der mit T verkettet ist.
    • XA sei der Wert AX, der mit A verkettet ist.
    • XB sei der Wert BX, der mit B verkettet ist.
  • Für xsnmaddasp wird wie folgt vorgegangen.
    • – src1 sei der Gleitkommawert mit doppelter Präzision im Doppelwortelement 0 von VSR[XA].
    • – src2 sei der Gleitkommawert mit doppelter Präzision im Doppelwortelement 0 von VSR[XT].
    • – src3 sei der Gleitkommawert mit doppelter Präzision im Doppelwortelement 0 von VSR[XB].
  • Für xsnmaddmsp wird wie folgt vorgegangen.
    • – src1 sei der Gleitkommawert mit doppelter Präzision im Doppelwortelement 0 von VSR[XA].
    • – src2 sei der Gleitkommawert mit doppelter Präzision im Doppelwortelement 0 von VSR[XB].
    • – src3 sei der Gleitkommawert mit doppelter Präzision im Doppelwortelement 0 von VSR[XT].
    • src1 wird mit src3 multipliziert, wodurch ein Produkt mit unbegrenztem Bereich und unbegrenzter Präzision erzeugt wird. Gleitkommamultiplikation beruht auf Exponentenaddition und Multiplikation der Mantissen.
    • src2 wird zum Produkt addiert, wodurch eine Summe mit unbegrenztem Bereich und unbegrenzter Präzision erzeugt wird. Gleitkommaaddition beruht auf Exponentenvergleich und Addition der beiden Mantissen. Die Exponenten der zwei Operanden werden verglichen und die den kleineren Exponenten begleitende Mantisse wird nach rechts verschoben, wobei ihr Exponent für jedes verschobene Bit um Eins erhöht wird, bis die beiden Exponenten gleich sind. Die beiden Mantissen werden dann entsprechend addiert oder subtrahiert, abhängig von den Vorzeichen der Operanden, um eine Zwischensumme zu bilden. Alle 53 Bits der Mantisse sowie alle drei Schutzbits (G, R und X) fließen in die Berechnung ein.
  • Die Summe wird normalisiert. Gleitkommanormalisierung beruht auf einem Verschieben der Mantisse nach links, bis das höchstwertige Bit 1 ist, und einem Vermindern des Exponenten um die Anzahl von Bits, um die die Mantisse verschoben wurde.
  • Das Zwischenergebnis wird unter Verwendung des durch RN angegebenen Rundungsmodus auf einfache Präzision gerundet.
  • Das Ergebnis wird negiert und in das Doppelwortelement 0 von VSR[XT] im Format mit doppelter Präzision gestellt.
  • Die Inhalte des Doppelwortelements 1 von VSR[XT] sind nicht definiert.
  • FPRF wird auf die Klasse und das Vorzeichen des Ergebnisses gesetzt, das im Format mit einfacher Präzision dargestellt ist. FR wird so eingerichtet, dass angegeben wird, ob das Ergebnis beim Runden erhöht worden ist. FI wird so eingerichtet, dass angegeben wird, ob das Ergebnis ungenau ist.
  • Wenn eine Ausnahme Invalid Operation mit Trap-Aktivierung auftritt, werden VSR[XT] und FPRF nicht modifiziert, und FR und FI werden auf 0 gesetzt.
  • Geänderte Sonderregister
    Figure DE112012003864T5_0068
  • VSR-Datenlayout für xsnmadd(a|m)sp
    • src1 = VSR[XA]
    • Die Bits 0 bis 63 von 128 Bits enthalten DP.
    • src2 = xsnmadda(dp|sp) ? VSR[XT] : VSR[XB]
    • Die Bits 0 bis 63 von 128 Bits enthalten DP.
    • src3 = xsnmadda(dp|sp) ? VSR[XB] : VSR[XT]
    • Die Bits 0 bis 63 von 128 Bits enthalten DP.
    • tgt = VSR[XT]
    • Die Bits 0 bis 63 von 128 Bits enthalten DP.
  • VSX Scalar Negative Multiply-Subtract Single-Precision XX3-form
    Figure DE112012003864T5_0069
  • In einem Beispiel enthält diese Anweisung zwei Felder, die einen Operationscode identifizieren (wobei z. B. ein Feld, Bits 0 bis 5, einen primären Operationscode aufweist, der mit einem erweiterten Operationscode eines anderen Felds, Bits 21 bis 28 kombiniert (z. B. verkettet) ist), um die Anweisung zu identifizieren; ein erstes Feld (z. B. T-Feld; Bits 6 bis 10) und ein erstes Bit (z. B. TX-Feld; Bit 31); ein zweites Feld (z. B. A-Feld; Bits 11 bis 15) und ein zweites Bit (z. B. AX-Feld; Bit 29); und ein drittes Feld (z. B. B-Feld; Bits 16 bis 20) und ein drittes Bit (z. B. BX-Feld; Bit 30).
  • Figure DE112012003864T5_0070
  • In einem Beispiel enthält diese Anweisung zwei Felder, die einen Operationscode identifizieren (wobei z. B. ein Feld, Bits 0 bis 5, einen primären Operationscode aufweist, der mit einem erweiterten Operationscode eines anderen Felds, Bits 21 bis 28 kombiniert (z. B. verkettet) ist), um die Anweisung zu identifizieren; ein erstes Feld (z. B. T-Feld; Bits 6 bis 10) und ein erstes Bit (z. B. TX-Feld; Bit 31); ein zweites Feld (z. B. A-Feld; Bits 11 bis 15) und ein zweites Bit (z. B. AX-Feld; Bit 29); und ein drittes Feld (z. B. B-Feld; Bits 16 bis 20) und ein drittes Bit (z. B. BX-Feld; Bit 30).
    Figure DE112012003864T5_0071
    Figure DE112012003864T5_0072
    • XT sei der Wert TX, der mit T verkettet ist.
    • XA sei der Wert AX, der mit A verkettet ist.
    • XB sei der Wert BX, der mit B verkettet ist.
  • Für xsnmsubasp wird wie folgt vorgegangen.
    • – src1 sei der Gleitkommawert mit doppelter Präzision im Doppelwortelement 0 von VSR[XA].
    • – src2 sei der Gleitkommawert mit doppelter Präzision im Doppelwortelement 0 von VSR[XT].
    • – src3 sei der Gleitkommawert mit doppelter Präzision im Doppelwortelement 0 von VSR[XB].
  • Für xsnmsubmsp wird wie folgt vorgegangen.
    • – src1 sei der Gleitkommawert mit doppelter Präzision im Doppelwortelement 0 von VSR[XA].
    • – src2 sei der Gleitkommawert mit doppelter Präzision im Doppelwortelement 0 von VSR[XB].
    • – src3 sei der Gleitkommawert mit doppelter Präzision im Doppelwortelement 0 von VSR[XT].
    • src1 wird mit src3 multipliziert, wodurch ein Produkt mit unbegrenztem Bereich und unbegrenzter Präzision erzeugt wird. Gleitkommamultiplikation beruht auf Exponentenaddition und Multiplikation der Mantissen.
    • src2 wird negiert und zum Produkt addiert, wodurch eine Summe mit unbegrenztem Bereich und unbegrenzter Präzision erzeugt wird. Gleitkommaaddition beruht auf Exponentenvergleich und Addition der beiden Mantissen. Die Exponenten der zwei Operanden werden verglichen und die den kleineren Exponenten begleitende Mantisse wird nach rechts verschoben, wobei ihr Exponent für jedes verschobene Bit um Eins erhöht wird, bis die beiden Exponenten gleich sind. Die beiden Mantissen werden dann entsprechend addiert oder subtrahiert, abhängig von den Vorzeichen der Operanden, um eine Zwischensumme zu bilden. Alle 53 Bits der Mantisse sowie alle drei Schutzbits (G, R und X) fließen in die Berechnung ein.
  • Die Summe wird normalisiert. Gleitkommanormalisierung beruht auf einem Verschieben der Mantisse nach links, bis das höchstwertige Bit 1 ist, und einem Vermindern des Exponenten um die Anzahl von Bits, um die die Mantisse verschoben wurde.
  • Das Zwischenergebnis wird unter Verwendung des durch RN angegebenen Rundungsmodus auf einfache Präzision gerundet.
  • Das Ergebnis wird negiert und in das Doppelwortelement 0 von VSR[XT] im Format mit doppelter Präzision gestellt.
  • Die Inhalte des Doppelwortelements 1 von VSR[XT] sind nicht definiert.
  • FPRF wird auf die Klasse und das Vorzeichen des Ergebnisses gesetzt, das im Format mit einfacher Präzision dargestellt ist. FR wird so eingerichtet, dass angegeben wird, ob das Ergebnis beim Runden erhöht worden ist. FI wird so eingerichtet, dass angegeben wird, ob das Ergebnis ungenau ist.
  • Wenn eine Ausnahme Invalid Operation mit Trap-Aktivierung auftritt, werden VSR[XT] und FPRF nicht modifiziert, und FR und FI werden auf 0 gesetzt.
  • Geänderte Sonderregister
    Figure DE112012003864T5_0073
  • VSR-Datenlayout für xsnmsub(a|m)sp
    • src1 = VSR[XA ]
    • Die Bits 0 bis 63 von 128 Bits enthalten DP.
    • src2 = xsnmsubasp ? VSR[XT] : VSR[XB]
    • Die Bits 0 bis 63 von 128 Bits enthalten DP.
    • src3 = xsnmsubasp ? VSR[XB] : VSR[XT]
    • Die Bits 0 bis 63 von 128 Bits enthalten DP.
    • tgt = VSR[XT]
  • VSX Scalar Reciprocal Estimate Single-Precision XX2-form
    Figure DE112012003864T5_0074
  • In einem Beispiel enthält diese Anweisung zwei Felder, die einen Operationscode identifizieren (wobei z. B. ein Feld, Bits 0 bis 5, einen primären Operationscode aufweist, der mit einem erweiterten Operationscode eines anderen Felds, Bits 21 bis 29 kombiniert (z. B. verkettet) ist), um die Anweisung zu identifizieren; ein erstes Feld (z. B. T-Feld; Bits 6 bis 10) und ein erstes Bit (z. B. TX-Feld; Bit 31); und ein zweites Feld (z. B. B-Feld; Bits 16 bis 20) und ein zweites Bit (z. B. BX-Feld; Bit 30).
    Figure DE112012003864T5_0075
    Figure DE112012003864T5_0076
    • XT sei der Wert TX, der mit T verkettet ist.
    • XB sei der Wert BX, der mit B verkettet ist.
    • src sei der Gleitkommawert mit doppelter Präzision im Doppelwortelement 0 von VSR[XB].
  • Eine Gleitkommaschätzung mit doppelter Präzision des Reziprokwerts von src wird in das Doppelwortelement 0 von VSR[XT] im Format mit doppelter Präzision gestellt.
  • Sofern der Reziprokwert von src keine Null, kein Unendlich oder keine QNnaN (stille Nichtzahl) ist, weist die Schätzung einen relativen Präzisionsfehler auf, der nicht größer als ein 16284-stel des Reziprokwerts von src ist. Das heißt
    Figure DE112012003864T5_0077
  • Die Operation mit verschiedenen speziellen Werten des Operanden ist im Folgenden zusammengefasst.
    Figure DE112012003864T5_0078
    • 1. Kein Ergebnis, wenn ZE = 1
    • 2. Kein Ergebnis, wenn VE = 1
  • Die Inhalte des Doppelwortelements 1 von VSR[XT] sind nicht definiert.
  • FPRF wird auf die Klasse und das Vorzeichen des Ergebnisses gesetzt, das im Format mit einfacher Präzision dargestellt ist. FR wird auf einen nicht definierten Wert gesetzt. FI wird auf einen nicht definierten Wert gesetzt.
  • Wenn eine Ausnahme Invalid Operation mit Trap-Aktivierung oder eine Ausnahme Zero Divide mit Trap-Aktivierung auftritt, werden VSR[XT] und FPRF nicht modifiziert.
  • Die Ergebnisse der Ausführung dieser Anweisungen zwischen Umsetzungen und zwischen verschiedenen Ausführungen derselben Umsetzung dürfen verschieden ausfallen.
  • Geänderte Sonderregister
    Figure DE112012003864T5_0079
  • VSR-Datenlayout für xsresp
    • src = VSR[XB]
    • Die Bits 0 bis 63 von 128 Bits enthalten DP.
    • tgt = VSR[XT]
    • Die Bits 0 bis 63 von 128 Bits enthalten DP.
  • VSX Scalar Round to Single-Precision XX2-form
    Figure DE112012003864T5_0080
  • In einem Beispiel enthält diese Anweisung zwei Felder, die einen Operationscode identifizieren (wobei z. B. ein Feld, Bits 0 bis 5, einen primären Operationscode aufweist, der mit einem erweiterten Operationscode eines anderen Felds, Bits 21 bis 29 kombiniert (z. B. verkettet) ist), um die Anweisung zu identifizieren; ein erstes Feld (z. B. T-Feld; Bits 6 bis 10) und ein erstes Bit (z. B. TX-Feld; Bit 31); und ein zweites Feld (z. B. B-Feld; Bits 16 bis 20) und ein zweites Bit (z. B. BX-Feld; Bit 30).
    Figure DE112012003864T5_0081
    Figure DE112012003864T5_0082
    • XT sei der Wert TX, der mit T verkettet ist.
    • XB sei der Wert BX, der mit B verkettet ist.
    • src sei der Gleitkommawert mit doppelter Präzision im Doppelwortelement 0 von VSR[XB].
    • src wird auf einfache Präzision gerundet unter Verwendung des Rundungsmodus, der durch das Gleitkomma-Rundungssteuerfeld RN des FPSCR angegeben wird.
  • Das Ergebnis wird in das Doppelwortelement 0 von VSR[XT] im Format mit doppelter Präzision gestellt.
  • Die Inhalte des Doppelwortelements 1 von VSR[XT] sind nicht definiert.
  • FPRF wird auf die Klasse und das Vorzeichen des Ergebnisses gesetzt, das im Format mit einfacher Präzision dargestellt ist.
  • Wenn eine ungültige Operationsausnahme mit Trap-Aktivierung auftritt, werden VSR[XT] und FPRF nicht modifiziert.
  • Geänderte Sonderregister
    Figure DE112012003864T5_0083
  • VSR-Datenlayout für xsrsp
    • src = VSR[XB]
    • Die Bits 0 bis 63 von 128 Bits enthalten DP.
    • tgt = VSR[XT]
    • Die Bits 0 bis 63 von 128 Bits enthalten DP.
  • VSX Scalar Round to Single-Precision XX2-form
    Figure DE112012003864T5_0084
  • In einem Beispiel enthält diese Anweisung zwei Felder, die einen Operationscode identifizieren (wobei z. B. ein Feld, Bits 0 bis 5, einen primären Operationscode aufweist, der mit einem erweiterten Operationscode eines anderen Felds, Bits 21 bis 29 kombiniert (z. B. verkettet) ist), um die Anweisung zu identifizieren; ein erstes Feld (z. B. T-Feld; Bits 6 bis 10) und ein erstes Bit (z. B. TX-Feld; Bit 31); und ein zweites Feld (z. B. B-Feld; Bits 16 bis 20) und ein zweites Bit (z. B. BX-Feld; Bit 30).
    Figure DE112012003864T5_0085
    Figure DE112012003864T5_0086
    • XT sei der Wert TX, der mit T verkettet ist.
    • XB sei der Wert BX, der mit B verkettet ist.
    • src sei der Gleitkommawert mit doppelter Präzision im Doppelwortelement 0 von VSR[XB].
    • src wird auf einfache Präzision gerundet unter Verwendung des Rundungsmodus, der durch das Gleitkomma-Rundungssteuerfeld RN des FPSCR angegeben wird.
  • Das Ergebnis wird in das Doppelwortelement 0 von VSR[XT] im Format mit doppelter Präzision gestellt.
  • Die Inhalte des Doppelwortelements 1 von VSR[XT] sind nicht definiert.
  • FPRF wird auf die Klasse und das Vorzeichen des Ergebnisses gesetzt, das im Format mit einfacher Präzision dargestellt ist.
  • Wenn eine ungültige Operationsausnahme mit Trap-Aktivierung auftritt, werden VSR[XT] und FPRF nicht modifiziert.
  • Geänderte Sonderregister
    Figure DE112012003864T5_0087
  • VSR-Datenlayout für xsrsp
    • src = VSR[XB]
    • Die Bits 0 bis 63 von 128 Bits enthalten DP.
    • tgt = VSR[XT]
    • Die Bits 0 bis 63 von 128 Bits enthalten DP.
  • VSX Scalar Reciprocal Square Root Estimate Single-Precision XX2-form
    Figure DE112012003864T5_0088
  • In einem Beispiel enthält diese Anweisung zwei Felder, die einen Operationscode identifizieren (wobei z. B. ein Feld, Bits 0 bis 5, einen primären Operationscode aufweist, der mit einem erweiterten Operationscode eines anderen Felds, Bits 21 bis 29 kombiniert (z. B. verkettet) ist), um die Anweisung zu identifizieren; ein erstes Feld (z. B. T-Feld; Bits 6 bis 10) und ein erstes Bit (z. B. TX-Feld; Bit 31); und ein zweites Feld (z. B. B-Feld; Bits 16 bis 20) und ein zweites Bit (z. B. BX-Feld; Bit 30).
    Figure DE112012003864T5_0089
    Figure DE112012003864T5_0090
    Figure DE112012003864T5_0091
    • XT sei der Wert TX, der mit T verkettet ist.
    • XB sei der Wert BX, der mit B verkettet ist.
    • src sei der Gleitkommawert mit doppelter Präzision im Doppelwortelement 0 von VSR[XB].
  • Eine Gleitkommaschätzung mit einfacher Präzision der reziproken Quadratwurzel von src wird in das Doppelwortelement 0 von VSR[XT] im Format mit doppelter Präzision gestellt.
  • Sofern der Reziprokwert der Quadratwurzel von src keine Null, kein Unendlich oder keine QNaN ist, weist die Schätzung einen relativen Präzisionsfehler auf, der nicht größer als ein 16284-stel des Reziprokwert von src ist. Das heißt
    Figure DE112012003864T5_0092
  • Die Operation mit verschiedenen speziellen Werten des Operanden ist im Folgenden zusammengefasst.
  • Figure DE112012003864T5_0093
  • Figure DE112012003864T5_0094
    • 1. Kein Ergebnis, wenn VE = 1
    • 2. Kein Ergebnis, wenn ZE = 1
  • Die Inhalte des Doppelwortelements 1 von VSR[XT] sind nicht definiert.
  • FPRF wird auf die Klasse und das Vorzeichen des Ergebnisses gesetzt, das im Format mit einfacher Präzision dargestellt ist. FR wird auf einen nicht definierten Wert gesetzt. FI wird auf einen nicht definierten Wert gesetzt.
  • Wenn eine Ausnahme Invalid Operation mit Trap-Aktivierung oder eine Ausnahme Zero Divide mit Trap-Aktivierung auftritt, werden VSR[XT] und FPRF nicht modifiziert.
  • Die Ergebnisse der Ausführung dieser Anweisungen zwischen Umsetzungen und zwischen verschiedenen Ausführungen derselben Umsetzung dürfen verschieden ausfallen.
  • Geänderte Sonderregister
    Figure DE112012003864T5_0095
  • VSR-Datenlayout für xsrsqrtesp
    • src = VSR[XB]
    • Die Bits 0 bis 63 von 128 Bits enthalten DP.
    • tgt = VSR[XT]
    • Die Bits 0 bis 63 von 128 Bits enthalten DP.
  • VSX Scalar Square Root Single-Precision XX-form
    Figure DE112012003864T5_0096
  • In einem Beispiel enthält diese Anweisung zwei Felder, die einen Operationscode identifizieren (wobei z. B. ein Feld, Bits 0 bis 5, einen primären Operationscode aufweist, der mit einem erweiterten Operationscode eines anderen Felds, Bits 21 bis 29 kombiniert (z. B. verkettet) ist), um die Anweisung zu identifizieren; ein erstes Feld (z. B. T-Feld; Bits 6 bis 10) und ein erstes Bit (z. B. TX-Feld; Bit 31); und ein zweites Feld (z. B. B-Feld; Bits 16 bis 20) und ein zweites Bit (z. B. BX-Feld; Bit 30).
    Figure DE112012003864T5_0097
    Figure DE112012003864T5_0098
    • XT sei der Wert TX, der mit T verkettet ist.
    • XB sei der Wert BX, der mit B verkettet ist.
    • src sei der Gleitkommawert mit doppelter Präzision im Doppelwortelement 0 von VSR[XB].
  • Die Quadratwurzel von src mit unbegrenzter Präzision wird erzeugt.
  • Das Zwischenergebnis wird auf einfache Präzision gerundet unter Verwendung des Rundungsmodus, der durch das Gleitkomma-Rundungssteuerfeld RN des FPSCR angegeben wird.
  • Das Ergebnis wird in das Doppelwortelement 0 von VSR[XT] im Format mit doppelter Präzision gestellt.
  • Die Inhalte des Doppelwortelements 1 von VSR[XT] sind nicht definiert.
  • FPRF wird auf die Klasse und das Vorzeichen des Ergebnisses gesetzt, das im Format mit einfacher Präzision dargestellt ist. FR wird so eingerichtet, dass angegeben wird, ob das Ergebnis beim Runden erhöht worden ist. FI wird so eingerichtet, dass angegeben wird, ob das Ergebnis ungenau ist.
  • Wenn eine Ausnahme Invalid Operation mit Trap-Aktivierung auftritt, werden VSR[XT] und FPRF nicht modifiziert, und FR und FI werden auf 0 gesetzt.
  • Geänderte Sonderregister
    Figure DE112012003864T5_0099
  • VSR-Datenlayout für xssqrtsp
    • src = VSR[XB]
    • Die Bits 0 bis 63 von 128 Bits enthalten DP.
    • tgt = VSR[XT]
    • Die Bits 0 bis 63 von 128 Bits enthalten DP.
  • VSX Scalar Subtract Single-Precision XX3-form
    Figure DE112012003864T5_0100
  • In einem Beispiel enthält diese Anweisung zwei Felder, die einen Operationscode identifizieren (wobei z. B. ein Feld, Bits 0 bis 5, einen primären Operationscode aufweist, der mit einem erweiterten Operationscode eines anderen Felds, Bits 21 bis 28 kombiniert (z. B. verkettet) ist), um die Anweisung zu identifizieren; ein erstes Feld (z. B. T-Feld; Bits 6 bis 10) und ein erstes Bit (z. B. TX-Feld; Bit 31); ein zweites Feld (z. B. A-Feld; Bits 11 bis 15) und ein zweites Bit (z. B. AX-Feld; Bit 29); und ein drittes Feld (z. B. B-Feld; Bits 16 bis 20) und ein drittes Bit (z. B. BX-Feld; Bit 30).
    Figure DE112012003864T5_0101
    Figure DE112012003864T5_0102
    • XT sei der Wert TX, der mit T verkettet ist.
    • XA sei der Wert AX, der mit A verkettet ist.
    • XB sei der Wert BX, der mit B verkettet ist.
    • src1 sei der Gleitkommawert mit doppelter Präzision im Doppelwortelement 0 von VSR[XA].
    • src2 sei der Gleitkommawert mit doppelter Präzision im Doppelwortelement 0 von VSR[XB].
    • src2 wird negiert und zu src1 addiert, wodurch die Summe v mit unbegrenztem Bereich und unbegrenzter Präzision erzeugt wird. Gleitkommaaddition beruht auf Exponentenvergleich und Addition der beiden Mantissen. Die Exponenten der zwei Operanden werden verglichen und die den kleineren Exponenten begleitende Mantisse wird nach rechts verschoben, wobei ihr Exponent für jedes verschobene Bit um Eins erhöht wird, bis die beiden Exponenten gleich sind. Die beiden Mantissen werden dann entsprechend addiert oder subtrahiert, abhängig von den Vorzeichen der Operanden, um eine Zwischensumme zu bilden. Alle 53 Bits der Mantisse sowie alle drei Schutzbits (G, R und X) fließen in die Berechnung ein.
    • v wird normalisiert und auf einfache Präzision gerundet unter Verwendung des Rundungsmodus, der durch das Gleitkomma-Rundungssteuerfeld RN des FPSCR angegeben wird. Gleitkommanormalisierung beruht auf einem Verschieben der Mantisse nach links, bis das höchstwertige Bit 1 ist, und einem Vermindern des Exponenten um die Anzahl von Bits, um die die Mantisse verschoben wurde.
  • Das Ergebnis wird in das Doppelwortelement 0 von VSR[XT] gestellt.
  • Die Inhalte des Doppelwortelements 1 von VSR[XT] sind nicht definiert.
  • FPRF wird auf die Klasse und das Vorzeichen des Ergebnisses gesetzt, das im Format mit einfacher Präzision dargestellt ist. FR wird so eingerichtet, dass angegeben wird, ob das Ergebnis beim Runden erhöht worden ist. FI wird so eingerichtet, dass angegeben wird, ob das Ergebnis ungenau ist.
  • Wenn eine Ausnahme Invalid Operation mit Trap-Aktivierung auftritt, werden VSR[XT] und FPRF nicht modifiziert, und FR und FI werden auf 0 gesetzt.
  • Geänderte Sonderregister
    Figure DE112012003864T5_0103
  • VSR-Datenlayout für xssubsp
    • src1 = VSR[XA]
    • Die Bits 0 bis 63 von 128 Bits enthalten DP.
    • src2 = VSR[XB]
    • Die Bits 0 bis 63 von 128 Bits enthalten DP.
    • tgt = VSR[XT]
    • Die Bits 0 bis 63 von 128 Bits enthalten DP.
  • POWER ISA AS – Buch 1 – Kapitel 7. Vector-Scalar Floating-Point Operations [Category: VSX]
  • 7.6.2 VSX-Anweisung – Beschreibungskonventionen
  • 7.6.2.1 VSX-Anweisung – RTL-Operatoren
    • x{y}
    • Rückgabe von Bit y von x.
    • x{y:z}
    • Rückgabe von Bits y:z von x.
    • x = y
    • Der Wert von y wird in x gestellt.
    • x |= y
    • Der Wert von y wird einer ODER-Verknüpfung mit dem Wert x unterzogen und in x gestellt.
    • –x
    • Rückgabe des Einerkomplements von x.
    • |x
    • Rückgabe von 1, wenn die Inhalte von x gleich 0 sind, ansonsten Rückgabe von 0.
    • x || y
    • Rückgabe des Werts von x, verkettet mit dem Wert von y. Zum Beispiel ist 0b010 || 0b111 dasselbe wie 0b010111.
    • x ^ y
    • Rückgabe des Werts von x ausgenommen ODER-Verknüpfung mit dem Wert von y.
    • x ? y : z
    • Wenn der Wert von x wahr ist, Rückgabe des Werts von y, ansonsten Rückgabe des Werts z.
    • x + y
    • x und y sind ganzzahlige Werte.
    • Rückgabe der Summe aus x und y.
    • +tea
    • Siehe Power AS ISA.
    • x – y
    • x und y sind ganzzahlige Werte.
    • Rückgabe der Differenz von x und y.
    • x != y
    • x und y sind ganzzahlige Werte.
    • Rückgabe von 1, wenn x nicht gleich y ist, ansonsten Rückgabe von 0.
    • x <= y
    • x und y sind ganzzahlige Werte.
    • Rückgabe von 1, wenn x kleiner/gleich y ist, ansonsten Rückgabe von 0.
    • x >= y
    • x und y sind ganzzahlige Werte.
    • Rückgabe von 1, wenn x größer/gleich y ist, ansonsten Rückgabe von 0.
  • 7.6.2.2 VSX-Anweisung – RTL-Funktionsaufrufe
  • AddDP(x, y)
    • x und y sind Gleitkommawerte mit doppelter Präzision.
    • Wenn x oder y eine SNaN ist, wird vxsnan_flag auf 1 gesetzt.
    • Wenn x eine Unendlichkeit ist und y eine Unendlichkeit des entgegengesetzten Vorzeichens ist, wird vxisi_flag auf 1 gesetzt.
    • Wenn x eine QNaN ist, Rückgabe von x.
    • Ansonsten, wenn x eine SNaN ist, Rückgabe von x, dargestellt als eine QNaN.
    • Ansonsten, wenn y eine QNaN ist, Rückgabe von y.
    • Ansonsten, wenn y eine SNaN ist, Rückgabe von y, dargestellt als eine QNaN.
    • Ansonsten, wenn x und y Unendlichkeiten mit entgegengesetztem Vorzeichen sind, Rückgabe der standardmäßigen QNaN.
    • Ansonsten Rückgabe der normalisierten Summe von x und y mit unbegrenztem Bereich und unbegrenzter Präzision.
  • AddSP(x, y)
    • x und y sind Gleitkommawerte mit einfacher Präzision.
    • Wenn x oder y eine SNaN ist, wird vxsnan_flag auf 1 gesetzt.
    • Wenn x eine Unendlichkeit ist und y eine Unendlichkeit des entgegengesetzten Vorzeichens ist, wird vxisi_flag auf 1 gesetzt.
    • Wenn x eine QNaN ist, Rückgabe von x.
    • Ansonsten, wenn x eine SNaN ist, Rückgabe von x, dargestellt als eine QNaN.
    • Ansonsten, wenn y eine QNaN ist, Rückgabe von y.
    • Ansonsten, wenn y eine SNaN ist, Rückgabe von y, dargestellt als eine QNaN.
    • Ansonsten, wenn x und y Unendlichkeiten mit entgegengesetztem Vorzeichen sind, Rückgabe der standardmäßigen QNaN.
    • Ansonsten Rückgabe der normalisierten Summe von x addiert zu y mit unbegrenztem Bereich und unbegrenzter Präzision.
  • ClassDP(x, y)
    • Rückgabe einer 5-Bit-Charakterisierung der Gleitkommazahl x mit doppelter Präzision.
    • 0b10001 = Stille Nichtzahl
    • 0b01001 = –Unendlichkeit
    • 0b01000 = –Normalisierte Zahl
    • 0b11000 = –Denormalisierte Zahl
    • 0b10010 = –Null
    • 0b00010 = +Null
    • 0b10100 = +Denormalisierte Zahl
    • 0b00100 = +Normalisierte Zahl
    • 0b00101 = +Unendlichkeit
  • ClassSP(x, y)
    • Rückgabe einer 5-Bit-Charakterisierung der Gleitkommazahl x mit einfacher Präzision.
    • 0b10001 = Stille Nichtzahl
    • 0b01001 = –Unendlichkeit
    • 0b01000 = –Normalisierte Zahl
    • 0b11000 = –Denormalisierte Zahl
    • 0b10010 = –Null
    • 0b00010 = +Null
    • 0b10100 = +Denormalisierte Zahl
    • 0b00100 = +Normalisierte Zahl
    • 0b00101 = +Unendlichkeit
  • CompareEQDP(x, y)
    • x und y sind Gleitkommawerte mit doppelter Präzision.
    • Wenn x oder y eine NaN ist, Rückgabe von 0.
    • Ansonsten, wenn x gleich y ist, Rückgabe von 1.
    • Ansonsten Rückgabe von 0.
  • CompareEQSP(x, y)
    • x und y sind Gleitkommawerte mit einfacher Präzision.
    • Wenn x oder y eine NaN ist, Rückgabe von 0.
    • Ansonsten, wenn x gleich y ist, Rückgabe von 1.
    • Ansonsten Rückgabe von 0.
  • CompareGTDP(x, y)
    • x und y sind Gleitkommawerte mit doppelter Präzision.
    • Wenn x oder y eine NaN ist, Rückgabe von 0.
    • Ansonsten, wenn x größer als y ist, Rückgabe von 1. Ansonsten Rückgabe von 0.
  • CompareGTSP(x, y)
    • x und y sind Gleitkommawerte mit einfacher Präzision.
    • Wenn x oder y eine NaN ist, Rückgabe von 0.
    • Ansonsten, wenn x größer als y ist, Rückgabe von 1.
    • Ansonsten Rückgabe von 0.
  • CompareLTDP(x, y)
    • x und y sind Gleitkommawerte mit doppelter Präzision.
    • Wenn x oder y eine NaN ist, Rückgabe von 0.
    • Ansonsten, wenn x kleiner als y ist, Rückgabe von 1.
    • Ansonsten Rückgabe von 0.
  • CompareLTSP(x, y)
    • x und y sind Gleitkommawerte mit einfacher Präzision.
    • Wenn x oder y eine NaN ist, Rückgabe von 0.
    • Ansonsten, wenn x kleiner als y ist, Rückgabe von 1.
    • Ansonsten Rückgabe von 0.
  • ConvertDPtoSD(x)
    • x ist ein ganzzahliger Wert mit doppelter Präzision.
    • Wenn x eine NaN ist,
    • Rückgabe von 0x8000_0000_0000_0000, vxcvi_flag wird auf 1 gesetzt, und vxsnan_flag wird auf 1 gesetzt, wenn x eine SNaN ist.
    • Ansonsten wird wie folgt vorgegangen.
    • Wenn x größer ist als 263 – 1, Rückgabe von 0x7FFF_FFFF_FFFF_FFFF und vxcvi_flag wird auf 1 gesetzt.
    • Ansonsten, wenn x kleiner ist als –263, Rückgabe von 0x8000_0000_0000_0000 und vxcvi_flag wird auf 1 gesetzt.
    • Ansonsten Rückgabe des Werts x im 64-Bit-Ganzzahlenformat mit Vorzeichen.
  • ConvertDPtoSW(x)
    • x ist ein ganzzahliger Wert mit doppelter Präzision.
    • Wenn x eine NaN ist, Rückgabe von 0x8000_0000, vxcvi_flag wird auf 1 gesetzt, und vxsnan_flag wird auf 1 gesetzt, wenn x eine SNaN ist.
    • Ansonsten wird wie folgt vorgegangen.
    • Wenn x größer ist als 231 – 1, Rückgabe von 0x7FFF_FFFF und vxcvi_flag wird auf 1 gesetzt.
    • Ansonsten, wenn x kleiner ist als –231, Rückgabe von 0x8000_0000 und vxcvi_flag wird auf 1 gesetzt.
    • Ansonsten Rückgabe des Werts x im 32-Bit-Ganzzahlenformat mit Vorzeichen.
  • ConvertDPtoUD(x)
    • x ist ein ganzzahliger Wert mit doppelter Präzision.
    • Wenn x eine NaN ist, Rückgabe von 0x0000_0000_0000_0000, vxcvi_flag wird auf 1 gesetzt, und vxsnan_flag wird auf 1 gesetzt, wenn x eine SNaN ist.
    • Ansonsten wird wie folgt vorgegangen.
    • Wenn x größer ist als 264 – 1, Rückgabe von 0xFFFF_FFFF_FFFF_FFFF und vxcvi_flag wird auf 1 gesetzt.
    • Ansonsten, wenn x kleiner ist als 0, Rückgabe von 0x0000_0000_0000_0000 und vxcvi_flag wird auf 1 gesetzt.
    • Ansonsten Rückgabe des Werts x im 64-Bit-Ganzzahlenformat ohne Vorzeichen.
  • ConvertDPtoUW(x)
    • x ist ein ganzzahliger Wert mit doppelter Präzision.
    • Wenn x eine NaN ist, Rückgabe von 0x0000_0000, vxcvi_flag wird auf 1 gesetzt, und vxsnan_flag wird auf 1 gesetzt, wenn x eine SNaN ist.
    • Ansonsten wird wie folgt vorgegangen.
    • Wenn x größer ist als 232 – 1, Rückgabe von 0xFFFF_FFFF und vxcvi_flag wird auf 1 gesetzt.
    • Ansonsten, wenn x kleiner ist als 0, Rückgabe von 0x0000_0000 und vxcvi_flag wird auf 1 gesetzt.
    • Ansonsten Rückgabe des Werts x im 32-Bit-Ganzzahlenformat ohne Vorzeichen.
  • ConvertFPtoDP(x)
    • Rückgabe des Gleitkommawerts x im DP-Format.
  • ConvertFPtoSP(x)
    • Rückgabe des Gleitkommawerts x im Format mit einfacher Präzision.
  • ConvertSDtoFP(x)
    • x ist ein 64-Bit-Ganzzahlenwert mit Vorzeichen.
    • Rückgabe des Werts x umgewandelt in Gleitkommaformat mit unbegrenzter Mantissenpräzision.
  • ConvertSPo4toSP(x)
    • x ist ein Gleitkommawert mit einfacher Präzision im Format mit doppelter Präzision.
  • Gibt den Wert x im Format mit einfacher Präzision zurück. x muss mit einfacher Präzision dargestellt werden können, andernfalls wird das Ergebnis als nicht definiert zurückgegeben. Für x kann eine Denormalisierung erforderlich sein. Es wird keine Rundung ausgeführt. Wenn x eine SNaN ist, wird es in eine SNaN mit einfacher Präzision mit denselben Nutzdaten wie x umgewandelt.
  • Figure DE112012003864T5_0104
  • Figure DE112012003864T5_0105
  • Figure DE112012003864T5_0106
  • ConvertSPtoDP(x)
    • x ist ein Gleitkommawert mit einfacher Präzision.
    • Wenn x eine SNaN ist, wird vxsnan_flag auf 1 gesetzt.
    • Wenn x eine SNaN ist, Rückgabe von x dargestellt als QNaN im Gleitkommaformat mit doppelter Präzision.
    • Ansonsten, wenn x eine QNaN ist, Rückgabe von x im Gleitkommaformt mit doppelter Präzision.
    • Ansonsten Rückgabe des Werts x im Gleitkommaformat mit doppelter Präzision.
  • ConvertSPtoSD(x)
    • x ist ein ganzzahliger Wert mit einfacher Präzision.
    • Wenn x eine NaN ist, Rückgabe von 0x8000_0000_0000_0000, vxcvi_flag wird auf 1 gesetzt, und vxsnan_flag wird auf 1 gesetzt, wenn x eine SNaN ist.
    • Ansonsten wird wie folgt vorgegangen.
    • Wenn x größer ist als 263 – 1, Rückgabe von 0x7FFF_FFFF_FFFF_FFFF und vxcvi_flag wird auf 1 gesetzt.
    • Ansonsten, wenn x kleiner ist als –263, Rückgabe von 0x8000_0000_0000_0000 und vxcvi_flag wird auf 1 gesetzt.
    • Ansonsten Rückgabe des Werts x im 64-Bit-Ganzzahlenformat mit Vorzeichen.
  • ConvertSPtoSP64(x)
    • x ist ein Gleitkommawert im Format mit einfacher Präzision.
  • Gibt den Wert x im Format mit doppelter Präzision zurück. Wenn x eine SNaN ist, wird es in eine SNaN mit doppelter Präzision mit denselben Nutzdaten wie x umgewandelt.
  • Figure DE112012003864T5_0107
  • Figure DE112012003864T5_0108
  • ConvertSPtoSW(x)
    • x ist ein ganzzahliger Wert mit einfacher Präzision.
    • Wenn x eine NaN ist, Rückgabe von 0x8000_0000, vxcvi_flag wird auf 1 gesetzt, und vxsnan_flag wird auf 1 gesetzt, wenn x eine SNaN ist.
    • Ansonsten wird wie folgt vorgegangen.
    • Wenn x größer ist als 231 – 1, Rückgabe von 0x7FFF_FFFF und vxcvi_flag wird auf 1 gesetzt.
    • Ansonsten, wenn x kleiner ist als –231, Rückgabe von 0x8000_0000 und vxcvi_flag wird auf 1 gesetzt.
    • Ansonsten Rückgabe des Werts x im 32-Bit-Ganzzahlenformat mit Vorzeichen.
  • ConvertSPtoUD(x)
    • x ist ein ganzzahliger Wert mit einfacher Präzision.
    • Wenn x eine NaN ist, Rückgabe von 0x0000_0000_0000_0000, vxcvi_flag wird auf 1 gesetzt, und vxsnan_flag wird auf 1 gesetzt, wenn x eine SNaN ist.
    • Ansonsten wird wie folgt vorgegangen.
    • Wenn x größer ist als 264 – 1, Rückgabe von 0xFFFF_FFFF_FFFF_FFFF und vxcvi_flag wird auf 1 gesetzt.
    • Ansonsten, wenn x kleiner ist als 0, Rückgabe von 0x0000_0000_0000_0000 und vxcvi_flag wird auf 1 gesetzt.
    • Ansonsten Rückgabe des Werts x im 64-Bit-Ganzzahlenformat ohne Vorzeichen.
  • ConvertSPtoUW(x)
    • x ist ein ganzzahliger Wert mit einfacher Präzision.
    • Wenn x eine NaN ist, Rückgabe von 0x0000_0000, vxcvi_flag wird auf 1 gesetzt, und vxsnan_flag wird auf 1 gesetzt, wenn x eine SNaN ist.
    • Ansonsten wird wie folgt vorgegangen.
    • Wenn x größer ist als 232 – 1, Rückgabe von 0xFFFF_FFFF und vxcvi_flag wird auf 1 gesetzt.
    • Ansonsten, wenn x kleiner ist als 0, Rückgabe von 0x0000_0000 und vxcvi_flag wird auf 1 gesetzt.
    • Ansonsten Rückgabe des Werts x im 32-Bit-Ganzzahlenformat ohne Vorzeichen.
  • ConvertSWtoFP(x)
    • x ist ein 32-Bit-Ganzzahlenwert mit Vorzeichen.
    • Rückgabe des Werts x umgewandelt in Gleitkommaformat mit unbegrenzter Mantissenpräzision.
  • ConvertUDtoFP(x)
    • x ist ein 64-Bit-Ganzzahlenwert ohne Vorzeichen.
    • Rückgabe des Werts x umgewandelt in Gleitkommaformat mit unbegrenzter Mantissenpräzision.
  • ConvertUWtoFP(x)
    • x ist ein 32-Bit-Ganzzahlenwert ohne Vorzeichen.
    • Rückgabe des Werts x umgewandelt in Gleitkommaformat mit unbegrenzter Mantissenpräzision.
  • DivideDP(x, y)
    • x und y sind Gleitkommawerte mit doppelter Präzision.
    • Wenn x oder y eine SNaN ist, wird vxsnan_flag auf 1 gesetzt.
    • Wenn x eine Null ist und y eine Null ist, wird vxzdz_flag auf 1 gesetzt.
    • Wenn x ein finiter Nicht-Null-Wert ist und y eine Null ist, wird zx_flag auf 1 gesetzt.
    • Wenn x eine Unendlichkeit ist und y eine Unendlichkeit ist, wird vxidi_flag auf 1 gesetzt.
    • Wenn x eine QNaN ist, Rückgabe von x.
    • Ansonsten, wenn x eine SNaN ist, Rückgabe von x, dargestellt als eine QNaN.
    • Ansonsten, wenn y eine QNaN ist, Rückgabe von y.
    • Ansonsten, wenn y eine SNaN ist, Rückgabe von y, dargestellt als eine QNaN.
    • Ansonsten, wenn x eine Null ist und y eine Null ist, Rückgabe der standardmäßigen QNaN.
    • Ansonsten, wenn x ein finiter Nicht-Null-Wert ist und y eine Null mit demselben Vorzeichen wie x ist, Rückgabe von +Unendlichkeit.
    • Ansonsten, wenn x ein finiter Nicht-Null-Wert ist und y eine Null mit dem entgegengesetzten Vorzeichen von x ist, Rückgabe von –Unendlichkeit.
    • Ansonsten, wenn x eine Unendlichkeit ist und y eine Unendlichkeit ist, Rückgabe der standardmäßigen QNaN.
    • Ansonsten Rückgabe des normalisierten Quotienten von x dividiert durch y mit unbegrenztem Bereich und unbegrenzter Präzision.
  • DivideSP(x, y)
    • x und y sind Gleitkommawerte mit einfacher Präzision.
    • Wenn x oder y eine SNaN ist, wird vxsnan_flag auf 1 gesetzt.
    • Wenn x eine Null ist und y eine Null ist, wird vxzdz_flag auf 1 gesetzt.
    • Wenn x ein finiter Nicht-Null-Wert ist und y eine Null ist, wird zx_flag auf 1 gesetzt.
    • Wenn x eine Unendlichkeit ist und y eine Unendlichkeit ist, wird vxidi_flag auf 1 gesetzt.
    • Wenn x eine QNaN ist, Rückgabe von x.
    • Ansonsten, wenn x eine SNaN ist, Rückgabe von x, dargestellt als eine QNaN.
    • Ansonsten, wenn y eine QNaN ist, Rückgabe von y.
    • Ansonsten, wenn y eine SNaN ist, Rückgabe von y, dargestellt als eine QNaN.
    • Ansonsten, wenn x eine Null ist und y eine Null ist, Rückgabe der standardmäßigen QNaN.
    • Ansonsten, wenn x ein finiter Nicht-Null-Wert ist und y eine Null mit demselben Vorzeichen wie x ist, Rückgabe von +Unendlichkeit.
    • Ansonsten, wenn x ein finiter Nicht-Null-Wert ist und y eine Null mit dem entgegengesetzten Vorzeichen von x ist, Rückgabe von –Unendlichkeit.
    • Ansonsten, wenn x eine Unendlichkeit ist und y eine Unendlichkeit ist, Rückgabe der standardmäßigen QNaN.
    • Ansonsten Rückgabe des normalisierten Quotienten von x dividiert durch y mit unbegrenztem Bereich und unbegrenzter Präzision.
  • DenormDP(x)
    • x ist ein Gleitkommawert mit unbegrenztem Bereich und unbegrenzter Präzision.
    • Rückgabe des Werts x, wobei seine Mantisse um eine Anzahl von Bits nach rechts verschoben ist, die gleich der Differenz von den –1022 und dem unverzerrten Exponenten von x und seinem auf –1022 gesetzten unverzerrten Exponenten ist.
  • DenormSP(x)
    • x ist ein Gleitkommawert mit unbegrenztem Bereich und unbegrenzter Präzision.
    • Rückgabe des Werts x, wobei seine Mantisse um eine Anzahl von Bits nach rechts verschoben ist, die gleich der Differenz von den –126 und dem unverzerrten Exponenten von x und seinem auf –126 gesetzten unverzerrten Exponenten ist.
  • IsInf(x)
    • Rückgabe von 1, wenn x eine Unendlichkeit ist, ansonsten Rückgabe von 0.
  • IsNaN(x)
    • Rückgabe von 1, wenn x eine SNaN oder eine QNaN ist, ansonsten Rückgabe von 0.
  • IsNeg(x)
    • Rückgabe von 1, wenn x ein negativer Nicht-Null-Wert ist, ansonsten Rückgabe von 0.
  • IsSNaN(x)
    • Rückgabe von 1, wenn x eine SNaN ist, ansonsten Rückgabe von 0.
  • IsZero(x)
    • Rückgabe von 1, wenn x eine Null ist, ansonsten Rückgabe von 0.
  • MaximumDP(x, y)
    • x und y sind Gleitkommawerte mit doppelter Präzision.
    • Wenn x oder y eine SNaN ist, wird vxsnan_flag auf 1 gesetzt.
    • Wenn x eine QNaN ist und y keine NaN ist, Rückgabe von y.
    • Ansonsten, wenn x eine QNaN ist, Rückgabe von x.
    • Ansonsten, wenn x eine SNaN ist, Rückgabe von x, dargestellt als eine QNaN.
    • Ansonsten, wenn y eine QNaN ist, Rückgabe von x.
    • Ansonsten, wenn y eine SNaN ist, Rückgabe von y, dargestellt als eine QNaN.
    • Ansonsten Rückgabe des größeren Werts von x und y, wobei +0 größer als –0 betrachtet wird.
  • MaximumSP(x, y)
    • x und y sind Gleitkommawerte mit einfacher Präzision.
    • Wenn x oder y eine SNaN ist, wird vxsnan_flag auf 1 gesetzt.
    • Wenn x eine QNaN ist und y keine NaN ist, Rückgabe von y.
    • Ansonsten, wenn x eine QNaN ist, Rückgabe von x.
    • Ansonsten, wenn x eine SNaN ist, Rückgabe von x, dargestellt als eine QNaN.
    • Ansonsten, wenn y eine QNaN ist, Rückgabe von x.
    • Ansonsten, wenn y eine SNaN ist, Rückgabe von y, dargestellt als eine QNaN.
    • Ansonsten Rückgabe des größeren Werts von x und y, wobei +0 größer als –0 betrachtet wird.
  • MEM(x, y)
  • Inhalte einer Folge von y Byte eines Speichers. Die Folge hängt von der Endianität des Speicherzugriffs ab wie folgt.
    • – Bei Big-Endian-Speicherzugriffen beginnt die Folge mit dem Byte an Adresse x und endet mit dem Byte an Adresse x + y – 1.
    • – Bei Little-Endian-Speicherzugriffen beginnt die Folge mit dem Byte an Adresse x + y – 1 und endet mit dem Byte an Adresse x.
  • MEMtag(x, y)
    • Tag-Bit oder -Bits, die der Folge von y Byte des Speichers zugeordnet sind.
  • MinimumDP(x, y)
    • x und y sind Gleitkommawerte mit doppelter Präzision.
    • Wenn x oder y eine SNaN ist, wird vxsnan_flag auf 1 gesetzt.
    • Wenn x eine QNaN ist und y keine NaN ist, Rückgabe von y.
    • Ansonsten, wenn x eine QNaN ist, Rückgabe von x.
    • Ansonsten, wenn x eine SNaN ist, Rückgabe von x, dargestellt als eine QNaN.
    • Ansonsten, wenn y eine QNaN ist, Rückgabe von x.
    • Ansonsten, wenn y eine SNaN ist, Rückgabe von y, dargestellt als eine QNaN.
    • Ansonsten Rückgabe des kleineren Werts von x und y, wobei –0 kleiner als +0 betrachtet wird.
  • MinimumSP(x, y)
    • x und y sind Gleitkommawerte mit einfacher Präzision.
    • Wenn x oder y eine SNaN ist, wird vxsnan_flag auf 1 gesetzt.
    • Wenn x eine QNaN ist und y keine NaN ist, Rückgabe von y.
    • Ansonsten, wenn x eine QNaN ist, Rückgabe von x.
    • Ansonsten, wenn x eine SNaN ist, Rückgabe von x, dargestellt als eine QNaN.
    • Ansonsten, wenn y eine QNaN ist, Rückgabe von x.
    • Ansonsten, wenn y eine SNaN ist, Rückgabe von y, dargestellt als eine QNaN.
    • Ansonsten Rückgabe des kleineren Werts von x und y, wobei –0 kleiner als +0 betrachtet wird.
  • MultiplyAddDP(x, y, z)
    • x, y und z sind Gleitkommawerte mit doppelter Präzision.
    • Wenn x, y oder z eine SNaN ist, wird vxsnan_flag auf 1 gesetzt.
    • Wenn x eine Null ist und y eine Unendlichkeit ist oder x eine Unendlichkeit ist und y eine Null ist, wird vximz_flag auf 1 gesetzt.
    • Wenn das Produkt aus x und y eine Unendlichkeit ist und z eine Unendlichkeit des entgegengesetzten Vorzeichens ist, wird vxisi_flag auf 1 gesetzt.
    • Wenn x eine QNaN ist, Rückgabe von x.
    • Ansonsten, wenn x eine SNaN ist, Rückgabe von x, dargestellt als eine QNaN.
    • Ansonsten, wenn z eine QNaN ist, Rückgabe von z.
    • Ansonsten, wenn z eine SNaN ist, Rückgabe von z, dargestellt als eine QNaN.
    • Ansonsten, wenn y eine QNaN ist, Rückgabe von y.
    • Ansonsten, wenn y eine SNaN ist, Rückgabe von y, dargestellt als eine QNaN.
    • Ansonsten, wenn x eine Null ist und y eine Unendlichkeit ist oder x eine Unendlichkeit ist und y eine Null ist, Rückgabe der standardmäßigen QNaN.
    • Ansonsten, wenn das Produkt aus x und y eine Unendlichkeit ist und z eine Unendlichkeit des entgegengesetzten Vorzeichens ist, Rückgabe der standardmäßigen QNaN.
    • Ansonsten Rückgabe der normalisierten Summe von z und dem Produkt aus x und y mit unbegrenztem Bereich und unbegrenzter Präzision.
  • MultiplyAddSP(x, y, z)
    • x, y und z sind Gleitkommawerte mit einfacher Präzision.
    • Wenn x, y oder z eine SNaN ist, wird vxsnan_flag auf 1 gesetzt.
    • Wenn x eine Null ist und y eine Unendlichkeit ist oder x eine Unendlichkeit ist und y eine Null ist, wird vximz_flag auf 1 gesetzt.
    • Wenn das Produkt aus x und y eine Unendlichkeit ist und z eine Unendlichkeit des entgegengesetzten Vorzeichens ist, wird vxisi_flag auf 1 gesetzt.
    • Wenn x eine QNaN ist, Rückgabe von x.
    • Ansonsten, wenn x eine SNaN ist, Rückgabe von x, dargestellt als eine QNaN.
    • Ansonsten, wenn z eine QNaN ist, Rückgabe von z.
    • Ansonsten, wenn z eine SNaN ist, Rückgabe von z, dargestellt als eine QNaN.
    • Ansonsten, wenn y eine QNaN ist, Rückgabe von y.
    • Ansonsten, wenn y eine SNaN ist, Rückgabe von y, dargestellt als eine QNaN.
    • Ansonsten, wenn x eine Null ist und y eine Unendlichkeit ist oder x eine Unendlichkeit ist und y eine Null ist, Rückgabe der standardmäßigen QNaN.
    • Ansonsten, wenn das Produkt aus x und y eine Unendlichkeit ist und z eine Unendlichkeit des entgegengesetzten Vorzeichens ist, Rückgabe der standardmäßigen QNaN.
    • Ansonsten Rückgabe der normalisierten Summe von z und dem Produkt aus x und y mit unbegrenztem Bereich und unbegrenzter Präzision.
  • MultiplyDP(x, y)
    • x und y sind Gleitkommawerte mit doppelter Präzision.
    • Wenn x oder y eine SNaN ist, wird vxsnan_flag auf 1 gesetzt.
    • Wenn x eine Null ist und y eine Unendlichkeit ist oder x eine Unendlichkeit ist und y eine Null ist, wird vximz_flag auf 1 gesetzt.
    • Wenn x eine QNaN ist, Rückgabe von x.
    • Ansonsten, wenn x eine SNaN ist, Rückgabe von x, dargestellt als eine QNaN.
    • Ansonsten, wenn y eine QNaN ist, Rückgabe von y.
    • Ansonsten, wenn y eine SNaN ist, Rückgabe von y, dargestellt als eine QNaN.
    • Ansonsten, wenn x eine Null ist und y eine Unendlichkeit ist oder x eine Unendlichkeit ist und y eine Null ist, Rückgabe der standardmäßigen QNaN.
    • Ansonsten Rückgabe des normalisierten Produkts aus x und y mit unbegrenztem Bereich und unbegrenzter Präzision.
  • MultiplySP(x, y)
    • x und y sind Gleitkommawerte mit einfacher Präzision.
    • Wenn x oder y eine SNaN ist, wird vxsnan_flag auf 1 gesetzt.
    • Wenn x eine Null ist und y eine Unendlichkeit ist oder x eine Unendlichkeit ist und y eine Null ist, wird vximz_flag auf 1 gesetzt.
    • Wenn x eine QNaN ist, Rückgabe von x.
    • Ansonsten, wenn x eine SNaN ist, Rückgabe von x, dargestellt als eine QNaN.
    • Ansonsten, wenn y eine QNaN ist, Rückgabe von y.
    • Ansonsten, wenn y eine SNaN ist, Rückgabe von y, dargestellt als eine QNaN.
    • Ansonsten, wenn x eine Null ist und y eine Unendlichkeit ist oder x eine Unendlichkeit ist und y eine Null ist, Rückgabe der standardmäßigen QNaN.
    • Ansonsten Rückgabe des normalisierten Produkts aus x und y mit unbegrenztem Bereich und unbegrenzter Präzision.
  • NegateDP(x)
    • Wenn der Gleitkommawert x mit doppelter Präzision eine NaN ist, Rückgabe von x.
    • Ansonsten Rückgabe des Gleitkommawerts x mit doppelter Präzision mit ergänztem Vorzeichen-Bit.
  • NegateSP(x)
    • Wenn der Gleitkommawert x mit einfacher Präzision eine NaN ist, Rückgabe von X.
    • Ansonsten Rückgabe des Gleitkommawerts x mit einfacher Präzision mit ergänztem Vorzeichen-Bit.
  • ReciprocalEstimateDP(x)
    • x ist ein Gleitkommawert mit doppelter Präzision.
    • Wenn x eine SNaN ist, wird vxsnan_flag auf 1 gesetzt.
    • Wenn x eine Null ist, wird zx_flag auf 1 gesetzt.
    • Wenn x eine QNaN ist, Rückgabe von x.
    • Ansonsten, wenn x eine SNaN ist, Rückgabe von x, dargestellt als eine QNaN.
    • Ansonsten, wenn x eine Null ist, Rückgabe einer Unendlichkeit mit dem Vorzeichen von X.
    • Ansonsten, wenn x eine Unendlichkeit ist, Rückgabe einer Null mit dem Vorzeichen von x.
    • Ansonsten Rückgabe einer Schätzung des Reziprokwerts von x mit unbegrenztem Exponentenbereich.
  • ReciprocalEstimateSP(x)
    • x ist ein Gleitkommawert mit einfacher Präzision.
    • Wenn x eine SNaN ist, wird vxsnan_flag auf 1 gesetzt.
    • Wenn x eine Null ist, wird zx_flag auf 1 gesetzt.
    • Wenn x eine QNaN ist, Rückgabe von x.
    • Ansonsten, wenn x eine SNaN ist, Rückgabe von x, dargestellt als eine QNaN.
    • Ansonsten, wenn x eine Null ist, Rückgabe einer Unendlichkeit mit dem Vorzeichen von x.
    • Ansonsten, wenn x eine Unendlichkeit ist, Rückgabe einer Null mit dem Vorzeichen von x.
    • Ansonsten Rückgabe einer Schätzung des Reziprokwerts von x mit unbegrenztem Exponentenbereich.
  • ReciprocalSquareRootEstimateDP(x)
    • x ist ein Gleitkommawert mit doppelter Präzision.
    • Wenn x eine SNaN ist, wird vxsnan_flag auf 1 gesetzt.
    • Wenn x eine Null ist, wird zx_flag auf 1 gesetzt.
    • Wenn x eine negative Nicht-Null-Zahl ist, wird vxsqrt_flag auf 1 gesetzt.
    • Wenn x eine QNaN ist, Rückgabe von x.
    • Ansonsten, wenn x eine SNaN ist, Rückgabe von x, dargestellt als eine QNaN.
    • Ansonsten, wenn x ein negativer Nicht-Null-Wert ist, Rückgabe der standardmäßigen QNaN.
    • Ansonsten Rückgabe einer Schätzung des Reziprokwerts der Quadratwurzel von x mit unbegrenztem Exponentenbereich.
  • ReciprocalSquareRootEstimateSP(x)
    • x ist ein Gleitkommawert mit einfacher Präzision.
    • Wenn x eine SNaN ist, wird vxsnan_flag auf 1 gesetzt.
    • Wenn x eine Null ist, wird zx_flag auf 1 gesetzt.
    • Wenn x eine negative Nicht-Null-Zahl ist, wird vxsqrt_flag auf 1 gesetzt.
    • Wenn x eine QNaN ist, Rückgabe von x.
    • Ansonsten, wenn x eine SNaN ist, Rückgabe von x, dargestellt als eine QNaN.
    • Ansonsten, wenn x ein negativer Nicht-Null-Wert ist, Rückgabe der standardmäßigen QNaN.
    • Ansonsten Rückgabe einer Schätzung des Reziprokwerts der Quadratwurzel von x mit unbegrenztem Exponentenbereich.
  • reset_xflags()
    • vxsnan_flag wird auf 0 gesetzt.
    • vximz_flag wird auf 0 gesetzt.
    • vxidi_flag wird auf 0 gesetzt.
    • vxisi_flag wird auf 0 gesetzt.
    • vxzdz_flag wird auf 0 gesetzt.
    • vxsqrt_flag wird auf 0 gesetzt.
    • vxcvi_flag wird auf 0 gesetzt.
    • vxvc_flag wird auf 0 gesetzt.
    • ox_flag wird auf 0 gesetzt.
    • ux_flag wird auf 0 gesetzt.
    • xx_flag wird auf 0 gesetzt.
    • zx_flag wird auf 0 gesetzt:
  • RoundToDP(x, y)
    • x ist eine 2-Bit-Ganzzahl ohne Vorzeichen, die einen von vier Rundungsmodi angibt.
    • 0b00 Runden auf nächste gerade Zahl
    • 0b01 Runden in Richtung Null
    • 0b10 Runden in Richtung +Unendlichkeit
    • 0b10 Runden in Richtung –Unendlichkeit
    • x ist ein normalisierter Gleitkommawert mit unbegrenztem Bereich und unbegrenzter Präzision.
    • Rückgabe des Werts y gerundet auf doppelte Präzision unter Steuerung des durch x angegebenen Rundungsmodus.
  • Figure DE112012003864T5_0109
  • Figure DE112012003864T5_0110
  • Figure DE112012003864T5_0111
  • RoundToDPCeil(x)
    • x ist ein Gleitkommawert mit unbegrenztem Bereich und unbegrenzter Präzision.
    • Wenn x eine QNaN ist, Rückgabe von x.
    • Ansonsten, wenn x eine Unendlichkeit ist, Rückgabe von x.
    • Ansonsten wird wie folgt vorgegangen.
    • Rückgabe der kleinsten Gleitkommazahl mit unbegrenztem Exponentenbereich, aber Mantissenpräzision mit doppelter Präzision, deren Wert größer/gleich x ist.
    • Wenn die Größe des zurückgegebenen Werts größer als x ist, wird inc_flag auf 1 gesetzt.
    • Wenn der zurückgegebene Wert nicht gleich x ist, wird xx_flag auf 1 gesetzt.
  • RoundToDPFloor(x)
    • x ist ein Gleitkommawert mit unbegrenztem Bereich und unbegrenzter Präzision.
    • Wenn x eine QNaN ist, Rückgabe von x.
    • Ansonsten, wenn x eine Unendlichkeit ist, Rückgabe von x.
    • Ansonsten wird wie folgt vorgegangen.
    • Rückgabe der größten Gleitkommazahl mit unbegrenztem Exponentenbereich, aber Mantissenpräzision mit doppelter Präzision, deren Wert kleiner/gleich x ist.
    • Wenn die Größe des zurückgegebenen Werts größer als x ist, wird inc_flag auf 1 gesetzt.
    • Wenn der zurückgegebene Wert nicht gleich x ist, wird xx_flag auf 1 gesetzt.
  • RoundToDPIntegerCeil(x)
    • x ist ein Gleitkommawert mit doppelter Präzision.
    • Wenn x eine SNaN ist, wird vxsnan_flag auf 1 gesetzt.
    • Wenn x eine QNaN ist, Rückgabe von x.
    • Ansonsten, wenn x eine SNaN ist, Rückgabe von x, dargestellt als eine QNaN.
    • Ansonsten, wenn x eine Unendlichkeit ist, Rückgabe von x.
    • Ansonsten wird wie folgt vorgegangen.
    • Rückgabe des kleinsten ganzzahligen Gleitkommawerts mit doppelter Präzision, dessen Wert größer/gleich x ist.
    • Wenn die Größe des zurückgegebenen Werts größer als x ist, wird inc_flag auf 1 gesetzt.
    • Wenn der zurückgegebene Wert nicht gleich x ist, wird xx_flag auf 1 gesetzt.
  • RoundToDPIntegerFloor(x)
    • x ist ein Gleitkommawert mit doppelter Präzision.
    • Wenn x eine SNaN ist, wird vxsnan_flag auf 1 gesetzt.
    • Wenn x eine QNaN ist, Rückgabe von x.
    • Ansonsten, wenn x eine SNaN ist, Rückgabe von x, dargestellt als eine QNaN.
    • Ansonsten, wenn x eine Unendlichkeit ist, Rückgabe von x.
    • Ansonsten wird wie folgt vorgegangen.
    • Rückgabe des größten ganzzahligen Gleitkommawerts mit doppelter Präzision, dessen Wert kleiner/gleich x ist.
    • Wenn die Größe des zurückgegebenen Werts größer als x ist, wird inc_flag auf 1 gesetzt.
    • Wenn der zurückgegebene Wert nicht gleich x ist, wird xx_flag auf 1 gesetzt.
  • RoundToDPIntegerNearAway(x)
    • x ist ein Gleitkommawert mit doppelter Präzision.
    • Wenn x eine SNaN ist, wird vxsnan_flag auf 1 gesetzt.
    • Wenn x eine QNaN ist, Rückgabe von x.
    • Ansonsten, wenn x eine SNaN ist, Rückgabe von x, dargestellt als eine QNaN.
    • Ansonsten, wenn x eine Unendlichkeit ist, Rückgabe von x.
    • Ansonsten wird wie folgt vorgegangen.
    • Rückgabe des größten ganzzahligen Gleitkommawerts mit doppelter Präzision, dessen Wert kleiner/gleich x + 0,5 ist, wenn x > 0 ist, oder des kleinsten ganzzahligen Gleitkommawerts mit doppelter Präzision, dessen Wert größer/gleich x – 0,5 ist, wenn x < 0 ist.
    • Wenn die Größe des zurückgegebenen Werts größer als x ist, wird inc_flag auf 1 gesetzt.
    • Wenn der zurückgegebene Wert nicht gleich x ist, wird xx_flag auf 1 gesetzt.
  • RoundToDPIntegerNearEven(x)
    • x ist ein Gleitkommawert mit doppelter Präzision.
    • Wenn x eine SNaN ist, wird vxsnan_flag auf 1 gesetzt.
    • Wenn x eine QNaN ist, Rückgabe von x.
    • Ansonsten, wenn x eine SNaN ist, Rückgabe von x, dargestellt als eine QNaN.
    • Ansonsten, wenn x eine Unendlichkeit ist, Rückgabe von x.
    • Ansonsten wird wie folgt vorgegangen.
    • Rückgabe des ganzzahligen Gleitkommawerts mit doppelter Präzision, der dem Wert x am nächsten ist (im Fall einer Entscheidungssituation wird der ganzzahlige Gleitkommawert mit dem niedrigstwertigen Bit gleich 0 verwendet).
    • Wenn die Größe des zurückgegebenen Werts größer als x ist, wird inc_flag auf 1 gesetzt.
    • Wenn der zurückgegebene Wert nicht gleich x ist, wird xx_flag auf 1 gesetzt.
  • RoundToDPIntegerTrunc(x)
    • x ist ein Gleitkommawert mit doppelter Präzision.
    • Wenn x eine SNaN ist, wird vxsnan_flag auf 1 gesetzt.
    • Wenn x eine QNaN ist, Rückgabe von x.
    • Ansonsten, wenn x eine SNaN ist, Rückgabe von x, dargestellt als eine QNaN.
    • Ansonsten, wenn x eine Unendlichkeit ist, Rückgabe von x.
    • Ansonsten wird wie folgt vorgegangen.
    • Rückgabe des größten ganzzahligen Gleitkommawerts mit doppelter Präzision, dessen Wert kleiner/gleich x ist, wenn x > 0 ist, oder des kleinsten ganzzahligen Gleitkommawerts mit doppelter Präzision, dessen Wert größer/gleich x ist, wenn x < 0 ist.
    • Wenn die Größe des zurückgegebenen Werts größer als x ist, wird inc_flag auf 1 gesetzt.
    • Wenn der zurückgegebene Wert nicht gleich x ist, wird xx_flag auf 1 gesetzt.
  • RoundToDPNearEven(x)
    • x ist ein Gleitkommawert mit unbegrenztem Bereich und unbegrenzter Präzision.
    • Wenn x eine QNaN ist, Rückgabe von x.
    • Ansonsten, wenn x eine Unendlichkeit ist, Rückgabe von x.
    • Ansonsten wird wie folgt vorgegangen.
    • Rückgabe der Gleitkommazahl mit unbegrenztem Exponentenbereich, aber einer Mantissenpräzision von doppelter Präzision, die dem Wert x am nächsten ist (im Fall einer Entscheidungssituation wird die Gleitkommazahl mit unbegrenztem Exponentenbereich, aber einer Mantissenpräzision von doppelter Präzision mit dem niedrigstwertigen Bit gleich 0 verwendet).
    • Wenn die Größe des zurückgegebenen Werts größer als x ist, wird inc_flag auf 1 gesetzt.
    • Wenn der zurückgegebene Wert nicht gleich x ist, wird xx_flag auf 1 gesetzt.
  • RoundToDPTrunc(x)
    • x ist ein Gleitkommawert mit unbegrenztem Bereich und unbegrenzter Präzision.
    • Wenn x eine QNaN ist, Rückgabe von x.
    • Ansonsten, wenn x eine Unendlichkeit ist, Rückgabe von x.
    • Ansonsten wird wie folgt vorgegangen.
    • Rückgabe der größten Gleitkommazahl mit unbegrenztem Exponentenbereich, aber einer Mantissenpräzision von doppelter Präzision, die kleiner/gleich dem Wert x ist, wenn x > 0 ist, oder der kleinsten Gleitkommazahl mit unbegrenztem Exponentenbereich, aber einer Mantissenpräzision von doppelter Präzision, die größer/gleich dem Wert x ist, wenn x < 0 ist.
    • Wenn die Größe des zurückgegebenen Werts größer als x ist, wird inc_flag auf 1 gesetzt.
    • Wenn der zurückgegebene Wert nicht gleich x ist, wird xx_flag auf 1 gesetzt.
  • RoundToSP(x, y)
    • x ist eine 2-Bit-Ganzzahl ohne Vorzeichen, die einen von vier Rundungsmodi angibt.
    • 0b00 Runden auf nächste gerade Zahl
    • 0b01 Runden in Richtung Null
    • 0b10 Runden in Richtung +Unendlichkeit
    • 0b10 Runden in Richtung –Unendlichkeit
    • x ist ein normalisierter Gleitkommawert mit unbegrenztem Bereich und unbegrenzter Präzision.
    • Rückgabe des Werts y gerundet auf einfache Präzision unter Steuerung des durch x angegebenen Rundungsmodus.
  • Figure DE112012003864T5_0112
  • Figure DE112012003864T5_0113
  • Figure DE112012003864T5_0114
  • Figure DE112012003864T5_0115
  • RoundToSPCeil(x)
    • x ist ein Gleitkommawert mit unbegrenztem Bereich und unbegrenzter Präzision.
    • Wenn x eine QNaN ist, Rückgabe von x.
    • Ansonsten, wenn x eine Unendlichkeit ist, Rückgabe von x.
    • Ansonsten wird wie folgt vorgegangen.
    • Rückgabe der kleinsten Gleitkommazahl mit unbegrenztem Exponentenbereich, aber Mantissenpräzision mit einfacher Präzision, deren Wert größer/gleich x ist.
    • Wenn die Größe des zurückgegebenen Werts größer als x ist, wird inc_flag auf 1 gesetzt.
    • Wenn der zurückgegebene Wert nicht gleich x ist, wird xx_flag auf 1 gesetzt.
  • RoundToSPFloor(x)
    • x ist ein Gleitkommawert mit unbegrenztem Bereich und unbegrenzter Präzision.
    • Wenn x eine QNaN ist, Rückgabe von x.
    • Ansonsten, wenn x eine Unendlichkeit ist, Rückgabe von x.
    • Ansonsten wird wie folgt vorgegangen.
    • Rückgabe der größten Gleitkommazahl mit unbegrenztem Exponentenbereich, aber Mantissenpräzision mit einfacher Präzision, deren Wert kleiner/gleich x ist.
    • Wenn die Größe des zurückgegebenen Werts größer als x ist, wird inc_flag auf 1 gesetzt.
    • Wenn der zurückgegebene Wert nicht gleich x ist, wird xx_flag auf 1 gesetzt.
  • RoundToSPIntegerCeil(x)
    • x ist ein Gleitkommawert mit einfacher Präzision.
    • Wenn x eine SNaN ist, wird vxsnan_flag auf 1 gesetzt.
    • Wenn x eine QNaN ist, Rückgabe von x.
    • Ansonsten, wenn x eine SNaN ist, Rückgabe von x, dargestellt als eine QNaN.
    • Ansonsten, wenn x eine Unendlichkeit ist, Rückgabe von x.
    • Ansonsten wird wie folgt vorgegangen.
    • Rückgabe des kleinsten ganzzahligen Gleitkommawerts mit einfacher Präzision, dessen Wert größer/gleich x ist.
    • Wenn die Größe des zurückgegebenen Werts größer als x ist, wird inc_flag auf 1 gesetzt.
    • Wenn der zurückgegebene Wert nicht gleich x ist, wird xx_flag auf 1 gesetzt.
  • RoundToSPIntegerFloor(x)
    • x ist ein Gleitkommawert mit einfacher Präzision.
    • Wenn x eine SNaN ist, wird vxsnan_flag auf 1 gesetzt.
    • Wenn x eine QNaN ist, Rückgabe von x.
    • Ansonsten, wenn x eine SNaN ist, Rückgabe von x, dargestellt als eine QNaN.
    • Ansonsten, wenn x eine Unendlichkeit ist, Rückgabe von x.
    • Ansonsten wird wie folgt vorgegangen.
    • Rückgabe des größten ganzzahligen Gleitkommawerts mit einfacher Präzision, dessen Wert kleiner/gleich x ist.
    • Wenn die Größe des zurückgegebenen Werts größer als x ist, wird inc_flag auf 1 gesetzt.
    • Wenn der zurückgegebene Wert nicht gleich x ist, wird xx_flag auf 1 gesetzt.
  • RoundToSPIntegerNearAway(x)
    • x ist ein Gleitkommawert mit einfacher Präzision.
    • Wenn x eine SNaN ist, wird vxsnan_flag auf 1 gesetzt.
    • Wenn x eine QNaN ist, Rückgabe von x.
    • Ansonsten, wenn x eine SNaN ist, Rückgabe von x, dargestellt als eine QNaN.
    • Ansonsten, wenn x eine Unendlichkeit ist, Rückgabe von x.
    • Ansonsten wird wie folgt vorgegangen.
    • Rückgabe von x, wenn x eine Gleitkomma-Ganzzahl ist; ansonsten Rückgabe des größten ganzzahligen Gleitkommawerts mit einfacher Präzision, dessen Wert kleiner/gleich x + 0,5 ist, wenn x > 0 ist, oder des kleinsten ganzzahligen Gleitkommawerts mit einfacher Präzision, dessen Wert größer/gleich x – 0,5 ist, wenn x < 0 ist.
    • Wenn die Größe des zurückgegebenen Werts größer als x ist, wird inc_flag auf 1 gesetzt.
    • Wenn der zurückgegebene Wert nicht gleich x ist, wird xx_flag auf 1 gesetzt.
  • RoundToSPIntegerNearEven(x)
    • x ist ein Gleitkommawert mit einfacher Präzision.
    • Wenn x eine SNaN ist, wird vxsnan_flag auf 1 gesetzt.
    • Wenn x eine QNaN ist, Rückgabe von x.
    • Ansonsten, wenn x eine SNaN ist, Rückgabe von x, dargestellt als eine QNaN.
    • Ansonsten, wenn x eine Unendlichkeit ist, Rückgabe von x.
    • Ansonsten wird wie folgt vorgegangen.
    • Rückgabe von x, wenn x eine Gleitkomma-Ganzzahl ist; ansonsten Rückgabe des ganzzahligen Gleitkommawerts mit einfacher Präzision, der dem Wert x am nächsten ist (im Fall einer Entscheidungssituation wird der ganzzahlige Gleitkommawert mit einfacher Präzision mit dem niedrigstwertigen Bit gleich 0 verwendet).
    • Wenn die Größe des zurückgegebenen Werts größer als x ist, wird inc_flag auf 1 gesetzt.
    • Wenn der zurückgegebene Wert nicht gleich x ist, wird xx_flag auf 1 gesetzt.
  • RoundToSPIntegerTrunc(x)
    • x ist ein Gleitkommawert mit einfacher Präzision.
    • Wenn x eine QNaN ist, Rückgabe von x.
    • Ansonsten, wenn x eine SNaN ist, Rückgabe von x dargestellt als eine QNaN, und vxsnan_flag wird auf 1 gesetzt.
    • Ansonsten, wenn x eine Unendlichkeit ist, Rückgabe von x.
    • Ansonsten wird wie folgt vorgegangen.
    • Rückgabe des größten ganzzahligen Gleitkommawerts mit einfacher Präzision, dessen Wert kleiner/gleich x ist, wenn x > 0 ist, oder des kleinsten ganzzahligen Gleitkommawerts mit einfacher Präzision, dessen Wert größer/gleich x ist, wenn x < 0 ist.
    • Wenn die Größe des zurückgegebenen Werts größer als x ist, wird inc_flag auf 1 gesetzt.
    • Wenn der zurückgegebene Wert nicht gleich x ist, wird xx_flag auf 1 gesetzt.
  • RoundToSPNearEven(x)
    • x ist ein Gleitkommawert mit unbegrenztem Bereich und unbegrenzter Präzision.
    • Wenn x eine QNaN ist, Rückgabe von x.
    • Ansonsten, wenn x eine Unendlichkeit ist, Rückgabe von x.
    • Ansonsten wird wie folgt vorgegangen.
    • Rückgabe der Gleitkommazahl mit unbegrenztem Exponentenbereich, aber einer Mantissenpräzision von einfacher Präzision, die dem Wert x am nächsten ist (im Fall einer Entscheidungssituation wird die Gleitkommazahl mit unbegrenztem Exponentenbereich, aber einer Mantissenpräzision von einfacher Präzision mit dem niedrigstwertigen Bit gleich 0 verwendet).
    • Wenn die Größe des zurückgegebenen Werts größer als x ist, wird inc_flag auf 1 gesetzt.
    • Wenn der zurückgegebene Wert nicht gleich x ist, wird xx_flag auf 1 gesetzt.
  • RoundToSPTrunc(x)
    • x ist ein Gleitkommawert mit unbegrenztem Bereich und unbegrenzter Präzision.
    • Wenn x eine QNaN ist, Rückgabe von x.
    • Ansonsten, wenn x eine Unendlichkeit ist, Rückgabe von x.
    • Ansonsten wird wie folgt vorgegangen.
    • Rückgabe der größten Gleitkommazahl mit unbegrenztem Exponentenbereich, aber einer Mantissenpräzision von einfacher Präzision, die kleiner/gleich dem Wert x ist, wenn x > 0 ist, oder der kleinsten Gleitkommazahl mit einfacher Präzision, die größer/gleich dem Wert x ist, wenn x < 0 ist.
    • Wenn die Größe des zurückgegebenen Werts größer als x ist, wird inc_flag auf 1 gesetzt.
    • Wenn der zurückgegebene Wert nicht gleich x ist, wird xx_flag auf 1 gesetzt.
  • Scalb(x, y)
    • x ist ein Gleitkommawert mit unbegrenztem Bereich und unbegrenzter Präzision.
    • y ist eine Ganzzahl mit Vorzeichen.
    • Ergebnis des Multiplizierens des Gleitkommawerts x mit 2y.
  • SetFX(x)
    • x ist eine der Ausnahmenmarkierungen im FPSCR.
    • Wenn die Inhalte von x 0 sind, werden FX und x auf 1 gesetzt.
  • SquareRootDP(x)
    • x ist ein Gleitkommawert mit doppelter Präzision.
    • Wenn x eine SNaN ist, wird vxsnan_flag auf 1 gesetzt.
    • Wenn x ein negativer Nicht-Null-Wert ist, wird vxsqrt_flag auf 1 gesetzt.
    • Wenn x eine QNaN ist, Rückgabe von x.
    • Ansonsten, wenn x eine SNaN ist, Rückgabe von x, dargestellt als eine QNaN.
    • Ansonsten, wenn x ein negativer Nicht-Null-Wert ist, Rückgabe der standardmäßigen QNaN.
    • Ansonsten Rückgabe der normalisierten Quadratwurzel von x mit unbegrenztem Bereich und unbegrenzter Präzision.
    • SquareRootSP(x) x ist ein Gleitkommawert mit einfacher Präzision.
    • Wenn x eine SNaN ist, wird vxsnan_flag auf 1 gesetzt.
    • Wenn x ein negativer Nicht-Null-Wert ist, wird vxsqrt_flag auf 1 gesetzt.
    • Wenn x eine QNaN ist, Rückgabe von x.
    • Ansonsten, wenn x eine SNaN ist, Rückgabe von x, dargestellt als eine QNaN.
    • Ansonsten, wenn x ein negativer Nicht-Null-Wert ist, Rückgabe der standardmäßigen QNaN.
    • Ansonsten Rückgabe der normalisierten Quadratwurzel von x mit unbegrenztem Bereich und unbegrenzter Präzision.
  • VSX Vector Add Single-Precision XX3-form
    Figure DE112012003864T5_0116
  • In einem Beispiel enthält diese Anweisung zwei Felder, die einen Operationscode identifizieren (wobei z. B. ein Feld, Bits 0 bis 5, einen primären Operationscode aufweist, der mit einem erweiterten Operationscode eines anderen Felds, Bits 21 bis 28 kombiniert (z. B. verkettet) ist), um die Anweisung zu identifizieren; ein erstes Feld (z. B. T-Feld; Bits 6 bis 10) und ein erstes Bit (z. B. TX-Feld; Bit 31); ein zweites Feld (z. B. A-Feld; Bits 11 bis 15) und ein zweites Bit (z. B. AX-Feld; Bit 29); und ein drittes Feld (z. B. B-Feld; Bits 16 bis 20) und ein zweites Bit (z. B. BX-Feld; Bit 30).
    Figure DE112012003864T5_0117
    Figure DE112012003864T5_0118
    • XT sei der Wert TX, der mit T verkettet ist.
    • XA sei der Wert AX, der mit A verkettet ist.
    • XB sei der Wert BX, der mit B verkettet ist.
  • Für jedes Vektorelement i von 0 bis 3 ist wie folgt vorzugehen.
    • src1 sei der Gleitkomma-Operand mit einfacher Präzision im Wortelement i von VSR[XA].
    • src2 sei der Gleitkomma-Operand mit einfacher Präzision im Wortelement i von VSR[XB].
    • src2 wird zu src1 addiert, wodurch eine Summe mit unbegrenztem Bereich und unbegrenzter Präzision erzeugt wird. Gleitkommaaddition beruht auf Exponentenvergleich und Addition der beiden Mantissen. Die Exponenten der zwei Operanden werden verglichen und die den kleineren Exponenten begleitende Mantisse wird nach rechts verschoben, wobei ihr Exponent für jedes verschobene Bit um Eins erhöht wird, bis die beiden Exponenten gleich sind. Die beiden Mantissen werden dann entsprechend addiert oder subtrahiert, abhängig von den Vorzeichen der Operanden, um eine Zwischensumme zu bilden. Alle 53 Bits der Mantisse sowie alle drei Schutzbits (G, R und X) fließen in die Berechnung ein.
  • Die Summe wird normalisiert. Gleitkommanormalisierung beruht auf einem Verschieben der Mantisse nach links, bis das höchstwertige Bit 1 ist, und einem Vermindern des Exponenten um die Anzahl von Bits, um die die Mantisse verschoben wurde.
  • Das Zwischenergebnis wird auf einfache Präzision gerundet unter Verwendung des Rundungsmodus, der durch das Gleitkomma-Rundungssteuerfeld RN des FPSCR angegeben wird.
  • Das Ergebnis wird in das Wortelement i von VSR[XT] im Format mit einfacher Präzision gestellt.
  • Wenn eine ungültige Ausnahme mit Trap-Aktivierung in irgendeinem Element des Vektors auftritt, werden keine Ergebnisse in VSR[XT] geschrieben.
  • Geänderte Sonderregister
    Figure DE112012003864T5_0119
  • VSR-Datenlayout für xvaddsp
    • src1 = VSR[XA]
    • Die Bits 0 bis 31, die Bits 32 bis 63, die Bits 64 bis 95 und die Bits 96 bis 127 von 128 Bits enthalten SP
    • src2 = VSR[XB]
    • Die Bits 0 bis 31, die Bits 32 bis 63, die Bits 64 bis 95 und die Bits 96 bis 127 von 128 Bits enthalten SP
    • tgt = VSR[XT]
    • Die Bits 0 bis 31, die Bits 32 bis 63, die Bits 64 bis 95 und die Bits 96 bis 127 von 128 Bits enthalten SP
  • RFC02242.r3: BFP/VSX Miscellaneous Operations
  • ConvertDPtoSP(x)
    • x ist ein Gleitkommawert mit doppelter Präzision.
    • Wenn x eine SNaN ist, wird vxsnan_flag auf 1 gesetzt.
    • Wenn x eine SNaN ist, Rückgabe von x, umgewandelt in eine QNaN im Gleitkommaformat mit einfacher Präzision.
    • Ansonsten, wenn x eine QNaN, eine Unendlichkeit oder eine Null ist, Rückgabe von x im Gleitkommaformt mit einfacher Präzision.
    • Ansonsten wird x, gerundet auf einfache Präzision unter Verwendung des in RN angegebenen Rundungsmodus, im Gleitkommaformat mit einfacher Präzision zurückgegeben.
    • ox_flag wird auf 1 gesetzt, wenn die Rundung von x zu einer Ausnahme Overflow (Überlauf) geführt hat.
    • ox_flag wird auf 1 gesetzt, wenn die Rundung von x zu einer Ausnahme Underflow (Unterlauf) geführt hat.
    • xx_flag wird auf 1 gesetzt, wenn die Rundung von x zu einem ungenauen Ergebnis führt.
    • inc_flag wird auf 1 gesetzt, wenn sich die Mantisse des Ergebnisses während der Rundung erhöht hat.
  • ConvertDPtoSP_NS(x)
    • x ist ein Gleitkommawert mit einfacher Präzision, der im Format mit doppelter Präzision dargestellt wird.
    • Gibt x im Format mit einfacher Präzision zurück.
  • Figure DE112012003864T5_0120
  • Figure DE112012003864T5_0121
  • Wenn x nicht mit einfacher Präzision darstellbar ist, werden einige Exponenten- und/oder Mantissen-Bits verworfen, die wahrscheinlich unerwünschte Ergebnisse erzeugen. Die niedrigstwertigen 29 Bits der Mantisse von x werden verworfen, mehr, wenn der unverzerrte Exponent von x kleiner ist als –126 (d. h. denormal). Finite Werte von x mit einem unverzerrten Exponenten, der kleiner ist als –155, geben ein Ergebnis von Null zurück. Finite Werte von x mit einem unverzerrten Exponenten, der größer ist als +127, führen zu einem Verwerfen von Mantissenbits des Exponenten. SNaN-Eingaben ohne Mantissenbits in den oberen Bits der Mantisse geben Unendlichkeit als das Ergebnis zurück. Für keinen dieser Fälle wird ein Status gesetzt.
  • ConvertSPtoDP_NS(x)
    • x ist ein Gleitkommawert mit einfacher Präzision.
    • Gibt x im Format mit doppelter Präzision zurück.
  • Figure DE112012003864T5_0122
  • Figure DE112012003864T5_0123
  • Scalar round Double-Precision to single-precision and Convert to Single-Precision format
    Figure DE112012003864T5_0124
  • In einem Beispiel enthält diese Anweisung zwei Felder, die einen Operationscode identifizieren (wobei z. B. ein Feld, Bits 0 bis 5, einen primären Operationscode aufweist, der mit einem erweiterten Operationscode eines anderen Felds, Bits 21 bis 3029 kombiniert (z. B. verkettet) ist), um die Anweisung zu identifizieren; ein erstes Feld (z. B. ST-Feld; Bits 6 bis 10) und ein erstes Bit (z. B. SXTX-Feld; Bit 31); und ein zweites Feld (z. B. RA; Bits 11 bis 15). B-Feld; Bits 16 bis 20) und ein zweites Bit (z. B. BX-Feld; Bit 30), die ein zweites Register angeben.
    Figure DE112012003864T5_0125
    Figure DE112012003864T5_0126
    • XT sei der Wert TX, der mit T verkettet ist.
    • XB sei der Wert BX, der mit B verkettet ist.
    • src sei der Gleitkommawert mit doppelter Präzision im Doppelwortelement 0 von VSR[XB].
    • Wenn src eine SNaN ist, lautet das Ergebnis src, umgewandelt in eine QNaN (d. h. Bit 12 von src wird auf 1 gesetzt). VXSNAN wird auf 1 gesetzt.
    • Ansonsten, wenn src eine QNaN, eine Unendlichkeit oder eine Null ist, ist das Ergebnis src.
    • Ansonsten ist das Ergebnis src, unter Verwendung des durch RN angegebenen Rundungsmodus auf einfache Präzision gerundet.
  • Das Ergebnis wird in das Wortelement 0 von VSR[XT] im Format mit einfacher Präzision gestellt.
  • Die Inhalte der Doppelwortelemente 1, 2 und 3 von VSR[XT] sind nicht definiert.
  • FPRF wird auf die Klasse und das Vorzeichen des Ergebnisses eingestellt. FR wird so eingerichtet, dass angegeben wird, ob das Ergebnis beim Runden erhöht worden ist. FI wird so eingerichtet, dass angegeben wird, ob das Ergebnis ungenau ist.
  • Wenn eine Ausnahme Invalid Operation mit Trap-Aktivierung auftritt, werden VSR[XT] und FPRF nicht modifiziert, und FR und FI werden auf 0 gesetzt.
  • Geänderte Sonderregister
    Figure DE112012003864T5_0127
  • VSR-Datenlayout für xscvdpsp
    • src = VSR[XB]
    • Die Bits 0 bis 63 von 128 Bits enthalten DP
    • tgt = VSR[XT]
    • Die Bits 0 bis 31 von 128 Bits enthalten SP
  • Scalar Convert Scalar Single-Precision to Vector Single-Precision format Non-signalling
    Figure DE112012003864T5_0128
  • In einem Beispiel enthält diese Anweisung zwei Felder, die einen Operationscode identifizieren (wobei z. B. ein Feld, Bits 0 bis 5, einen primären Operationscode aufweist, der mit einem erweiterten Operationscode eines anderen Felds, Bits 21 bis 29 kombiniert (z. B. verkettet) ist), um die Anweisung zu identifizieren; ein erstes Feld (z. B. T-Feld; Bits 6 bis 10) und ein erstes Bit (z. B. TX-Feld; Bit 31); und ein zweites Feld (z. B. B-Feld; Bits 16 bis 20) und ein zweites Bit (z. B. BX-Feld; Bit 30).
    Figure DE112012003864T5_0129
    • XT sei der Wert TX, der mit T verkettet ist.
    • XB sei der Wert BX, der mit B verkettet ist.
    • src sei der Gleitkommawert mit einfacher Präzision im Doppelwortelement 0 von VSR[XB], dargestellt im Format mit doppelter Präzision.
    • src wird in das Wortelement 0 von VSR[XT] im Format mit einfacher Präzision gestellt.
  • Die Inhalte der Doppelwortelemente 1, 2 und 3 von VSR[XT] sind nicht definiert.
  • Geänderte Sonderregister
    • Keine
  • VSR-Datenlayout für xscvdpspn
    • src = VSR[XB]
    • Die Bits 0 bis 63 von 128 Bits enthalten SP
    • tgt = VSR[XT]
    • Die Bits 0 bis 31 von 128 Bits enthalten SP
    • xscvdpsp soll zum Umwandeln eines skalaren Werts mit doppelter Präzision in ein Vektorformat mit einfacher Präzision verwendet werden.
    • xscvdpspn soll zum Umwandeln eines skalaren Werts mit einfacher Präzision in ein Vektorformat mit einfacher Präzision verwendet werden.
  • Scalar Convert Single-Precision to Double-Precision format
    Figure DE112012003864T5_0130
  • In einem Beispiel enthält diese Anweisung zwei Felder, die einen Operationscode identifizieren (wobei z. B. ein Feld, Bits 0 bis 5, einen primären Operationscode aufweist, der mit einem erweiterten Operationscode eines anderen Felds, Bits 21 bis 29 kombiniert (z. B. verkettet) ist), um die Anweisung zu identifizieren; ein erstes Feld (z. B. T-Feld; Bits 6 bis 10) und ein erstes Bit (z. B. TX-Feld; Bit 31); und ein zweites Feld (z. B. B-Feld) und ein zweites Bit (z. B. BX-Feld; Bit 30).
    Figure DE112012003864T5_0131
    Figure DE112012003864T5_0132
    • XT sei der Wert TX, der mit T verkettet ist.
    • XB sei der Wert BX, der mit B verkettet ist.
    • src sei der Gleitkommawert mit einfacher Präzision im Wortelement 0 von VSR[XB].
    • Wenn src eine SNaN ist, lautet das Ergebnis src, umgewandelt in eine QNaN (d. h. Bit 9 von src wird auf 1 gesetzt). VXSNAN wird auf 1 gesetzt.
    • Ansonsten ist das Ergebnis src.
  • Das Ergebnis wird in das Doppelwortelement 0 von VSR[XT] im Format mit doppelter Präzision gestellt.
  • Die Inhalte des Doppelwortelements 1 von VSR[XT] sind nicht definiert.
  • FPRF wird auf die Klasse und das Vorzeichen des Ergebnisses eingestellt. FR wird auf 0 gesetzt. FI wird auf 0 gesetzt.
  • Wenn eine Ausnahme Invalid Operation mit Trap-Aktivierung auftritt, wird VSR[XT] nicht modifiziert, FPRF wird nicht modifiziert, FR wird auf 0 gesetzt und FI wird auf 0 gesetzt.
  • Geänderte Sonderregister
    Figure DE112012003864T5_0133
  • VSR Data Layout for xscvspdp
    • src = VSR[XB]
    • Die Bits 0 bis 31 von 128 Bits enthalten SP.
    • tgt = VSR[XT]
    • Die Bits 0 bis 63 von 128 Bits enthalten DP.
  • Scalar Convert Single-Precision to Double-Precision format Non-signalling
    Figure DE112012003864T5_0134
  • In einem Beispiel enthält diese Anweisung zwei Felder, die einen Operationscode identifizieren (wobei z. B. ein Feld, Bits 0 bis 5, einen primären Operationscode aufweist, der mit einem erweiterten Operationscode eines anderen Felds, Bits 21 bis 29 kombiniert (z. B. verkettet) ist), um die Anweisung zu identifizieren; ein erstes Feld (z. B. T-Feld; Bits 6 bis 10) und ein erstes Bit (z. B. TX-Feld; Bit 31); und ein zweites Feld (z. B. B-Feld; Bits 16 bis 20) und ein zweites Bit (z. B. BX-Feld; Bit 30).
    Figure DE112012003864T5_0135
    Figure DE112012003864T5_0136
    • XT sei der Wert TX, der mit T verkettet ist.
    • XB sei der Wert BX, der mit B verkettet ist.
    • src sei der Gleitkommawert mit einfacher Präzision im Wortelement 0 von VSR[XB].
    • src wird in das Doppelwortelement 0 von VSR[XT] im Format mit doppelter Präzision gestellt.
  • Die Inhalte des Doppelwortelements 1 von VSR[XT] sind nicht definiert.
  • Geänderte Sonderregister
    • Keine
  • VSR Data Layout for xscvspdpn
    • src = VSR[XB]
    • Die Bits 0 bis 31 von 128 Bits enthalten SP
    • tgt = VSR[XT]
    • Die Bits 0 bis 63 von 128 Bits enthalten DPxscvspdp soll zum Umwandeln eines Vektor-Gleitkommawerts mit einfacher Präzision in ein skalares Format mit doppelter Präzision verwendet werden.
    • xscvspdpn soll zum Umwandeln eines Vektor-Gleitkommawerts mit einfacher Präzision in ein skalares Format mit einfacher Präzision verwendet werden.
  • VSX Logical Equivalent
    Figure DE112012003864T5_0137
  • In einem Beispiel enthält diese Anweisung zwei Felder, die einen Operationscode identifizieren (wobei z. B. ein Feld, Bits 0 bis 5, einen primären Operationscode aufweist, der mit einem erweiterten Operationscode eines anderen Felds, Bits 21 bis 28 kombiniert (z. B. verkettet) ist), um die Anweisung zu identifizieren; ein erstes Feld (z. B. T-Feld; Bits 6 bis 10) und ein erstes Bit (z. B. TX-Feld; Bit 31); ein zweites Feld (z. B. A-Feld; Bits 11 bis 15) und ein zweites Bit (z. B. AX-Feld; Bit 29); und ein drittes Feld (z. B. B-Feld; Bits 16 bis 20) und ein drittes Bit (z. B. BX-Feld; Bit 30).
    Figure DE112012003864T5_0138
    • XT sei der Wert TX, der mit T verkettet ist.
    • XA sei der Wert AX, der mit A verkettet ist.
    • XB sei der Wert BX, der mit B verkettet ist.
  • Die Inhalte von VSR[XA] werden einer XOR-Verknüpfung mit den Inhalten von VSR[XB] unterzogen und das ergänzte Ergebnis wird in VSR[XT] gestellt.
  • Geänderte Sonderregister:
    • Keine
  • VSX Logical NAND
    Figure DE112012003864T5_0139
  • In einem Beispiel enthält diese Anweisung zwei Felder, die einen Operationscode identifizieren (wobei z. B. ein Feld, Bits 0 bis 5, einen primären Operationscode aufweist, der mit einem erweiterten Operationscode eines anderen Felds, Bits 21 bis 28 kombiniert (z. B. verkettet) ist), um die Anweisung zu identifizieren; ein erstes Feld (z. B. T-Feld; Bits 6 bis 10) und ein erstes Bit (z. B. TX-Feld; Bit 31); ein zweites Feld (z. B. A-Feld; Bits 11 bis 15) und ein zweites Bit (z. B. AX-Feld; Bit 29); und ein drittes Feld (z. B. B-Feld; Bits 16 bis 20) und ein drittes Bit (z. B. BX-Feld; Bit 30).
    Figure DE112012003864T5_0140
    • XT sei der Wert TX, der mit T verkettet ist.
    • XA sei der Wert AX, der mit A verkettet ist.
    • XB sei der Wert BX, der mit B verkettet ist.
  • Die Inhalte von VSR[XA] werden einer UND-Verknüpfung mit den Inhalten von VSR[XB] unterzogen und das ergänzte Ergebnis wird in VSR[XT] gestellt.
  • Geänderte Sonderregister:
    • Keine
  • VSX Logical OR with Complement
    Figure DE112012003864T5_0141
  • In einem Beispiel enthält diese Anweisung zwei Felder, die einen Operationscode identifizieren (wobei z. B. ein Feld, Bits 0 bis 5, einen primären Operationscode aufweist, der mit einem erweiterten Operationscode eines anderen Felds, Bits 21 bis 28 kombiniert (z. B. verkettet) ist), um die Anweisung zu identifizieren; ein erstes Feld (z. B. T-Feld; Bits 6 bis 10) und ein erstes Bit (z. B. TX-Feld; Bit 31); ein zweites Feld (z. B. A-Feld; Bits 11 bis 15) und ein zweites Bit (z. B. AX-Feld; Bit 29); und ein drittes Feld (z. B. B-Feld; Bits 16 bis 20) und ein drittes Bit (z. B. BX-Feld; Bit 30).
    Figure DE112012003864T5_0142
    • XT sei der Wert TX, der mit T verkettet ist.
    • XA sei der Wert AX, der mit A verkettet ist.
    • XB sei der Wert BX, der mit B verkettet ist.
  • Die Inhalte von VSR[XA] werden einer ODER-Verknüpfung mit dem Komplement der Inhalte von VSR[XB] unterzogen und das Ergebnis wird in VSR[XT] gestellt.
  • Geänderte Sonderregister:
    • Keine

Claims (21)

  1. Computerprogrammprodukt zum Ausführen einer Maschinenanweisung, wobei das Computerprogrammprodukt aufweist: computerlesbares Speichermedium, das von einer Verarbeitungsschaltung lesbar ist und Anweisungen zur Ausführung durch die Verarbeitungsschaltung speichert, um ein Verfahren auszuführen, das aufweist: Erlangen, durch einen Prozessor, einer Maschinenanweisung zur Ausführung, wobei die Maschinenanweisung zur Computerausführung gemäß einer Computerarchitektur definiert ist, wobei die Maschinenanweisung aufweist: mindestens ein Operationscode-Feld, das eine Umwandlungsanweisung identifiziert; mindestens ein Feld, das zum Angeben eines ersten Registers verwendet wird; und mindestens ein weiteres Feld, das zum Angeben eines zweiten Registers verwendet wird; Ausführen, durch den Prozessor, der Maschinenanweisung, wobei die Ausführung aufweist: Erlangen eines binären Gleitkommadatums mit einfacher Präzision in einer ersten Darstellung in einem ersten Format von dem ersten Register; Umwandeln des binären Gleitkommadatums mit einfacher Präzision der ersten Darstellung in dem ersten Format in ein umgewandeltes binäres Gleitkommadatum mit einfacher Genauigkeit einer zweiten Darstellung in einem zweiten Format; und ein Einstellen des umgewandelten binären Gleitkommadatums mit einfacher Genauigkeit in das zweite Register.
  2. Computerprogrammprodukt nach Anspruch 1, wobei das Verfahren des Weiteren aufweist: Ermitteln, dass das binäre Gleitkommadatum mit einfacher Genauigkeit der ersten Darstellung in dem ersten Format in ein binäres Gleitkommadatum mit einfacher Genauigkeit der zweiten Darstellung in dem zweiten Format umzuwandeln ist; und Erlangen der Umwandlungsanweisung in Reaktion auf die Ermittlung.
  3. Computerprogrammprodukt nach Anspruch 1, wobei das Ermitteln durch einen Compiler ausgeführt wird, der auf dem Prozessor oder auf einem anderen Prozessor ausgeführt wird.
  4. Computerprogrammprodukt nach Anspruch 1, wobei mindestens eines von dem ersten Register und dem zweiten Register ein Register einer mehrfach adressierbaren Registerdatei ist.
  5. Computerprogrammprodukt nach Anspruch 4, wobei die mehrfach adressierbare Registerdatei eine Mehrzahl von Registern aufweist, und wobei ein erster Unterbereich von Registern von der Mehrzahl von Registern für Daten eines Formats definiert ist, ein zweiter Unterbereich von Registern von der Mehrzahl von Registern für Daten eines anderen Formats definiert ist, und die Mehrzahl von Registern für Daten von mindestens einem weiteren Format definiert ist.
  6. Computerprogrammprodukt nach Anspruch 5, wobei jedes der Mehrzahl von Registern so definiert ist, dass es skalare 64-Bit-Gleitkommadaten mit einfacher Genauigkeit und 32-Bit-Vektorgleitkommadaten mit einfacher Genauigkeit enthält.
  7. Computerprogrammprodukt nach Anspruch 1, wobei die Maschinenanweisung zwischen eine erste Anweisung und eine zweite Anweisung eingefügt ist, wobei die zweite Anweisung eine Abhängigkeit von der ersten Anweisung aufweist, und die erste Anweisung zum Erzeugen von Daten ein anderes Format aufweist als ein Format, das von der zweiten Anweisung verwendet wird.
  8. Computerprogrammprodukt nach Anspruch 7, wobei das erste Register ein Datum der ersten Anweisung enthält, das umgewandelt werden soll.
  9. Computerprogrammprodukt nach Anspruch 1, wobei die erste Darstellung eine Vektordarstellung aufweist und das erste Format 32 Bit aufweist, und die zweite Darstellung eine skalare Darstellung aufweist und das zweite Format 64 Bit aufweist, oder die erste Darstellung eine skalare Darstellung aufweist und das erste Format 64 Bit aufweist, und die zweite Darstellung eine Vektordarstellung aufweist und das zweite Format 32 Bit aufweist.
  10. Computerprogrammprodukt nach Anspruch 1, wobei die Umwandlungsanweisung eine Nachbildungsfunktion enthält.
  11. Computerprogrammprodukt nach Anspruch 1, wobei das umgewandelte binäre Gleitkommadatum mit einfacher Genauigkeit ein Signalisieren einer Nichtzahl (NaN) aufweist, und wobei das Signalisieren der Nichtzahl in dem zweiten Register als ein Signalisieren einer Nichtzahl beibehalten wird.
  12. Computersystem zum Ausführen einer Maschinenanweisung, wobei das Computersystem aufweist: einen Speicher; und einen mit dem Speicher in Datenübertragung stehenden Prozessor, wobei das Computersystem so konfiguriert ist, dass es ein Verfahren ausführt, wobei das Verfahren aufweist: Erlangen, durch einen Prozessor, einer Maschinenanweisung zur Ausführung, wobei die Maschinenanweisung zur Computerausführung gemäß einer Computerarchitektur definiert ist, wobei die Maschinenanweisung aufweist: mindestens ein Operationscode-Feld, das eine Umwandlungsanweisung identifiziert; mindestens ein Feld, das zum Angeben eines ersten Registers verwendet wird; und mindestens ein weiteres Feld, das zum Angeben eines zweiten Registers verwendet wird; Ausführen der Maschinenanweisung durch den Prozessor, wobei die Ausführung aufweist: Erlangen eines binären Gleitkommadatums mit einfacher Genauigkeit in einer ersten Darstellung in einem ersten Format von dem ersten Register; Umwandeln des binären Gleitkommadatums mit einfacher Genauigkeit der ersten Darstellung in dem ersten Format in ein umgewandeltes binäres Gleitkommadatum mit einfacher Genauigkeit einer zweiten Darstellung in einem zweiten Format; und Einstellen des umgewandelten binären Gleitkommadatums mit einfacher Genauigkeit in das zweite Register.
  13. Computersystem nach Anspruch 12, wobei das Verfahren ferner aufweist: Ermitteln, dass das binäre Gleitkommadatum mit einfacher Genauigkeit der ersten Darstellung in dem ersten Format in ein binäres Gleitkommadatum mit einfacher Genauigkeit der zweiten Darstellung in dem zweiten Format umzuwandeln ist; und Erlangen der Umwandlungsanweisung in Reaktion auf die Ermittlung.
  14. Computersystem nach Anspruch 12, wobei mindestens eines des ersten Registers und des zweiten Registers ein Register einer mehrfach adressierbaren Registerdatei ist, und wobei die mehrfach adressierbare Registerdatei eine Mehrzahl von Registern aufweist, und wobei ein erster Unterbereich von Registern von der Mehrzahl von Registern für Daten eines Formats definiert ist, ein zweiter Unterbereich von Registern von der Mehrzahl von Registern für Daten eines anderen Formats definiert ist, und die Mehrzahl von Registern für Daten von mindestens einem weiteren Format definiert ist.
  15. Computersystem nach Anspruch 14, wobei jedes der Mehrzahl von Registern so definiert ist, dass es skalare 64-Bit-Gleitkommadaten mit einfacher Genauigkeit und 32-Bit-Vektorgleitkommadaten mit einfacher Genauigkeit enthält.
  16. Computersystem nach Anspruch 12, wobei die Maschinenanweisung zwischen eine erste Anweisung und eine zweite Anweisung eingefügt ist, wobei die zweite Anweisung eine Abhängigkeit von der ersten Anweisung aufweist, und die erste Anweisung zum Erzeugen von Daten ein anderes Format aufweist als ein Format, das von der zweiten Anweisung verwendet wird.
  17. Computersystem nach Anspruch 12, wobei die erste Darstellung eine Vektordarstellung aufweist und das erste Format 32 Bit aufweist, und die zweite Darstellung eine skalare Darstellung aufweist und das zweite Format 64 Bit aufweist, oder die erste Darstellung eine skalare Darstellung aufweist und das erste Format 64 Bit aufweist, und die zweite Darstellung eine Vektordarstellung aufweist und das zweite Format 32 Bit aufweist.
  18. Verfahren zum Ausführen einer Maschinenanweisung, wobei das Verfahren aufweist: Erlangen einer Maschinenanweisung zur Ausführung durch einen Prozessor, wobei die Maschinenanweisung zur Computerausführung gemäß einer Computerarchitektur definiert ist, wobei die Maschinenanweisung aufweist: mindestens ein Operationscode-Feld, das eine Umwandlungsanweisung identifiziert; mindestens ein Feld, das zum Angeben eines ersten Registers verwendet wird; und mindestens ein weiteres Feld, das zum Angeben eines zweiten Registers verwendet wird; Ausführen der Maschinenanweisung durch den Prozessor, wobei die Ausführung aufweist: Erlangen eines binären Gleitkommadatums mit einfacher Genauigkeit in einer ersten Darstellung in einem ersten Format von dem ersten Register; Umwandeln des binären Gleitkommadatums mit einfacher Genauigkeit der ersten Darstellung in dem ersten Format in ein umgewandeltes binäres Gleitkommadatum mit einfacher Genauigkeit einer zweiten Darstellung in einem zweiten Format; und Einstellen des umgewandelten binären Gleitkommadatums mit einfacher Genauigkeit in das zweite Register.
  19. Verfahren nach Anspruch 18, wobei mindestens eines des ersten Registers und des zweiten Registers ein Register einer mehrfach adressierbaren Registerdatei ist, und wobei die mehrfach adressierbare Registerdatei eine Mehrzahl von Registern aufweist, und wobei ein erster Unterbereich von Registern von der Mehrzahl von Registern für Daten eines Formats definiert ist, ein zweiter Unterbereich von Registern von der Mehrzahl von Registern für Daten eines anderen Formats definiert ist, und die Mehrzahl von Registern für Daten von mindestens einem weiteren Format definiert ist.
  20. Verfahren nach Anspruch 18, wobei die Maschinenanweisung zwischen eine erste Anweisung und eine zweite Anweisung eingefügt ist, wobei die zweite Anweisung eine Abhängigkeit von der ersten Anweisung aufweist, und die erste Anweisung zum Erzeugen von Daten ein anderes Format aufweist als ein Format, das von der zweiten Anweisung verwendet wird.
  21. Computerprogrammprodukt in einem Datenverarbeitungssystem zum Verarbeiten einer Anweisung, wobei das Computerprogrammprodukt aufweist: computerlesbares Speichermedium, das von einer Verarbeitungsschaltung lesbar ist und Anweisungen zur Ausführung durch die Verarbeitungsschaltung speichert, um ein Verfahren auszuführen, das aufweist: Ermitteln eines Anweisungstyps für eine empfangene Anweisung; ein Zugreifen auf eine mehrfach adressierbare Registerdatei auf der Grundlage des Anweisungstyps; und Verarbeiten der Anweisung unter Verwendung von mindestens einer Funktionseinheit des Datenverarbeitungssystems auf Grundlage von Ergebnissen des Zugreifens auf die mehrfach adressierbare Registerdatei, wobei die mehrfach adressierbare Registerdatei eine erste Untergruppe von Registern aufweist, die ersten Anweisungen eines ersten Anweisungstyps zugehörig sind, und eine zweite Untergruppe von Registern, die zweiten Anweisungen eines zweiten Anweisungstyps zugehörig sind, und wobei dritte Anweisungen eines dritten Anweisungstyps und vierte Anweisungen eines vierten Anweisungstyps auf Register in einer gesamten Gruppe von Registern der mehrfach adressierbaren Registerdatei zugreifen, die Register in der ersten Untergruppe von Registern und Register in der zweiten Untergruppe von Registern enthält, wobei der erste Anweisungstyp ein skalarer Anweisungstyp ist, der zweite Anweisungstyp ein Gleitkommaanweisungstyp ist, der dritte Anweisungstyp ein 64-Bit-Gleitkommaanweisungstyp mit einfacher Genauigkeit ist, und der vierte Anweisungstyp ein 32-Bit-Vektorgleitkommaanweisungstyp mit einfacher Genauigkeit ist.
DE112012003864.9T 2011-09-16 2012-09-05 Mehrfach adressierbare Registerdateien und dazugehörige Formatumwandlungen Pending DE112012003864T5 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/234,520 2011-09-16
US13/234,520 US9411585B2 (en) 2011-09-16 2011-09-16 Multi-addressable register files and format conversions associated therewith
PCT/IB2012/054582 WO2013038302A1 (en) 2011-09-16 2012-09-05 Multi-addressable register files and format conversions associated therewith

Publications (1)

Publication Number Publication Date
DE112012003864T5 true DE112012003864T5 (de) 2014-07-10

Family

ID=47881772

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112012003864.9T Pending DE112012003864T5 (de) 2011-09-16 2012-09-05 Mehrfach adressierbare Registerdateien und dazugehörige Formatumwandlungen

Country Status (6)

Country Link
US (2) US9411585B2 (de)
JP (1) JP5963866B2 (de)
CN (1) CN103797459B (de)
DE (1) DE112012003864T5 (de)
GB (1) GB2509037B (de)
WO (1) WO2013038302A1 (de)

Families Citing this family (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8281109B2 (en) * 2007-12-27 2012-10-02 Intel Corporation Compressed instruction format
US9298459B2 (en) 2012-07-18 2016-03-29 International Business Machines Corporation Managing register pairing
US9323529B2 (en) * 2012-07-18 2016-04-26 International Business Machines Corporation Reducing register read ports for register pairs
US9323532B2 (en) * 2012-07-18 2016-04-26 International Business Machines Corporation Predicting register pairs
US9729167B2 (en) * 2013-10-01 2017-08-08 Oracle International Corporation System and method for conversion of numeric values between different number base formats, for use with software applications
US10061581B2 (en) 2014-01-31 2018-08-28 Qualcomm Incorporated On-the-fly conversion during load/store operations in a vector processor
US9529653B2 (en) * 2014-10-09 2016-12-27 International Business Machines Corporation Processor register error correction management
US10235219B2 (en) * 2015-07-27 2019-03-19 Sony Interactive Entertainment America Llc Backward compatibility by algorithm matching, disabling features, or throttling performance
GB2553783B (en) 2016-09-13 2020-11-04 Advanced Risc Mach Ltd Vector multiply-add instruction
US10459843B2 (en) * 2016-12-30 2019-10-29 Texas Instruments Incorporated Streaming engine with separately selectable element and group duplication
US11093822B2 (en) * 2017-04-28 2021-08-17 Intel Corporation Variable precision and mix type representation of multiple layers in a network
US10282206B1 (en) * 2017-05-16 2019-05-07 Cadence Design Systems, Inc. Alias register file for supporting mixed width datapath in a configurable processor
US10338925B2 (en) 2017-05-24 2019-07-02 Microsoft Technology Licensing, Llc Tensor register files
US10372456B2 (en) 2017-05-24 2019-08-06 Microsoft Technology Licensing, Llc Tensor processor instruction set architecture
US10514913B2 (en) * 2017-06-23 2019-12-24 International Business Machines Corporation Compiler controls for program regions
US10725739B2 (en) 2017-06-23 2020-07-28 International Business Machines Corporation Compiler controls for program language constructs
CN111275197B (zh) * 2018-12-05 2023-11-10 上海寒武纪信息科技有限公司 运算方法、装置、计算机设备和存储介质
US11372643B2 (en) 2018-11-09 2022-06-28 Intel Corporation Systems and methods for performing instructions to convert to 16-bit floating-point format
CN112181494B (zh) * 2020-09-28 2022-07-19 中国人民解放军国防科技大学 一种浮点物理寄存器文件的实现方法

Family Cites Families (71)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4595911A (en) 1983-07-14 1986-06-17 Sperry Corporation Programmable data reformat system
US5341506A (en) * 1984-12-10 1994-08-23 Nec Corporation Data flow processor with a full-to-half word convertor
US4758585A (en) 1985-08-16 1988-07-19 Warner-Lambert Company Saturated cycloalkyl (B) pyrrol-1 (2H)- acetic acid amides and derivatives thereof
US4748585A (en) 1985-12-26 1988-05-31 Chiarulli Donald M Processor utilizing reconfigurable process segments to accomodate data word length
JPS62249230A (ja) 1986-04-23 1987-10-30 Pfu Ltd 演算処理装置
US5278840A (en) 1987-07-01 1994-01-11 Digital Equipment Corporation Apparatus and method for data induced condition signalling
US5063497A (en) 1987-07-01 1991-11-05 Digital Equipment Corporation Apparatus and method for recovering from missing page faults in vector data processing operations
AU7305491A (en) 1990-01-29 1991-08-21 Teraplex, Inc. Architecture for minimal instruction set computing system
EP0446721B1 (de) 1990-03-16 2000-12-20 Texas Instruments Incorporated Verteilter Verarbeitungsspeicher
JP2651267B2 (ja) * 1990-07-26 1997-09-10 富士通株式会社 演算処理装置及び演算処理方法
JP2616182B2 (ja) 1990-08-29 1997-06-04 三菱電機株式会社 データ処理装置
US5493687A (en) 1991-07-08 1996-02-20 Seiko Epson Corporation RISC microprocessor architecture implementing multiple typed register sets
US5437043A (en) 1991-11-20 1995-07-25 Hitachi, Ltd. Information processing apparatus having a register file used interchangeably both as scalar registers of register windows and as vector registers
US5278945A (en) 1992-01-10 1994-01-11 American Neuralogical, Inc. Neural processor apparatus
US5423051A (en) 1992-09-24 1995-06-06 International Business Machines Corporation Execution unit with an integrated vector operation capability
US5341320A (en) 1993-03-01 1994-08-23 Motorola, Inc. Method for rapidly processing floating-point operations which involve exceptions
US5450607A (en) 1993-05-17 1995-09-12 Mips Technologies Inc. Unified floating point and integer datapath for a RISC processor
US5669013A (en) 1993-10-05 1997-09-16 Fujitsu Limited System for transferring M elements X times and transferring N elements one time for an array that is X*M+N long responsive to vector type instructions
US5487022A (en) 1994-03-08 1996-01-23 Texas Instruments Incorporated Normalization method for floating point numbers
DE69519449T2 (de) 1994-05-05 2001-06-21 Conexant Systems Inc Raumzeigersdatenpfad
US5685009A (en) 1994-07-20 1997-11-04 Exponential Technology, Inc. Shared floating-point registers and register port-pairing in a dual-architecture CPU
US5758176A (en) 1994-09-28 1998-05-26 International Business Machines Corporation Method and system for providing a single-instruction, multiple-data execution unit for performing single-instruction, multiple-data operations within a superscalar data processing system
US5537606A (en) 1995-01-31 1996-07-16 International Business Machines Corporation Scalar pipeline replication for parallel vector element processing
US5805475A (en) 1995-02-10 1998-09-08 International Business Machines Corporation Load-store unit and method of loading and storing single-precision floating-point registers in a double-precision architecture
US5668984A (en) 1995-02-27 1997-09-16 International Business Machines Corporation Variable stage load path and method of operation
US5761103A (en) 1995-03-08 1998-06-02 Texas Instruments Incorporated Left and right justification of single precision mantissa in a double precision rounding unit
US5825678A (en) 1995-03-31 1998-10-20 International Business Machines Corporation Method and apparatus for determining floating point data class
US5822778A (en) 1995-06-07 1998-10-13 Advanced Micro Devices, Inc. Microprocessor and method of using a segment override prefix instruction field to expand the register file
US6295599B1 (en) 1995-08-16 2001-09-25 Microunity Systems Engineering System and method for providing a wide operand architecture
US5623600A (en) 1995-09-26 1997-04-22 Trend Micro, Incorporated Virus detection and removal apparatus for computer networks
US5768169A (en) 1995-10-02 1998-06-16 Intel Corporation Method and apparatus for improved processing of numeric applications in the presence of subnormal numbers in a computer system
US6792523B1 (en) 1995-12-19 2004-09-14 Intel Corporation Processor with instructions that operate on different data types stored in the same single logical register file
US5701508A (en) 1995-12-19 1997-12-23 Intel Corporation Executing different instructions that cause different data type operations to be performed on single logical register file
US6058465A (en) 1996-08-19 2000-05-02 Nguyen; Le Trong Single-instruction-multiple-data processing in a multimedia signal processor
US6195746B1 (en) 1997-01-31 2001-02-27 International Business Machines Corporation Dynamically typed register architecture
US6009511A (en) 1997-06-11 1999-12-28 Advanced Micro Devices, Inc. Apparatus and method for tagging floating point operands and results for rapid detection of special floating point numbers
DE69820067D1 (de) 1997-07-31 2004-01-08 Corning Oti Srl Akusto-optische vorrichtungen mit akustischem absorber
US5978901A (en) 1997-08-21 1999-11-02 Advanced Micro Devices, Inc. Floating point and multimedia unit with data type reclassification capability
US6131104A (en) 1998-03-27 2000-10-10 Advanced Micro Devices, Inc. Floating point addition pipeline configured to perform floating point-to-integer and integer-to-floating point conversion operations
US6178482B1 (en) 1997-11-03 2001-01-23 Brecis Communications Virtual register sets
US6237083B1 (en) 1998-02-13 2001-05-22 Advanced Micro Devices, Inc. Microprocessor including multiple register files mapped to the same logical storage and inhibiting sychronization between the register files responsive to inclusion of an instruction in an instruction sequence
US6105129A (en) 1998-02-18 2000-08-15 Advanced Micro Devices, Inc. Converting register data from a first format type to a second format type if a second type instruction consumes data produced by a first type instruction
JP3901670B2 (ja) 1998-03-11 2007-04-04 松下電器産業株式会社 データ処理装置
EP0942357A3 (de) 1998-03-11 2000-03-22 Matsushita Electric Industrial Co., Ltd. Mit einer Mehrzahl von Befehlsformaten vereinbarer Datenprozessor
US6192467B1 (en) 1998-03-31 2001-02-20 Intel Corporation Executing partial-width packed data instructions
US6185671B1 (en) 1998-03-31 2001-02-06 Intel Corporation Checking data type of operands specified by an instruction using attributes in a tagged array architecture
US6282554B1 (en) 1998-04-30 2001-08-28 Intel Corporation Method and apparatus for floating point operations and format conversion operations
US5995122A (en) 1998-04-30 1999-11-30 Intel Corporation Method and apparatus for parallel conversion of color values from a single precision floating point format to an integer format
US6263426B1 (en) * 1998-04-30 2001-07-17 Intel Corporation Conversion from packed floating point data to packed 8-bit integer data in different architectural registers
US6292815B1 (en) 1998-04-30 2001-09-18 Intel Corporation Data conversion between floating point packed format and integer scalar format
US6282634B1 (en) 1998-05-27 2001-08-28 Arm Limited Apparatus and method for processing data having a mixed vector/scalar register file
JP3123047B2 (ja) 1998-10-02 2001-01-09 日本電気株式会社 マイクロプロセッサ
US6163764A (en) * 1998-10-12 2000-12-19 Intel Corporation Emulation of an instruction set on an instruction set architecture transition
US6321327B1 (en) 1998-12-30 2001-11-20 Intel Corporation Method for setting a bit associated with each component of packed floating-pint operand that is normalized in SIMD operations
US6857061B1 (en) 2000-04-07 2005-02-15 Nintendo Co., Ltd. Method and apparatus for obtaining a scalar value directly from a vector register
US6715061B1 (en) 2000-07-12 2004-03-30 Via Technologies, Inc. Multimedia-instruction acceleration device for increasing efficiency and method for the same
JP3779540B2 (ja) 2000-11-08 2006-05-31 株式会社ルネサステクノロジ 複数レジスタ指定が可能なsimd演算方式
US6839828B2 (en) 2001-08-14 2005-01-04 International Business Machines Corporation SIMD datapath coupled to scalar/vector/address/conditional data register file with selective subpath scalar processing mode
US6934830B2 (en) 2002-09-26 2005-08-23 Sun Microsystems, Inc. Method and apparatus for reducing register file access times in pipelined processors
US7430656B2 (en) 2002-12-31 2008-09-30 Intel Corporation System and method of converting data formats and communicating between execution units
US20040158741A1 (en) 2003-02-07 2004-08-12 Peter Schneider System and method for remote virus scanning in wireless networks
GB2409063B (en) 2003-12-09 2006-07-12 Advanced Risc Mach Ltd Vector by scalar operations
US7284092B2 (en) 2004-06-24 2007-10-16 International Business Machines Corporation Digital data processing apparatus having multi-level register file
US7257695B2 (en) 2004-12-28 2007-08-14 Intel Corporation Register file regions for a processing system
US8904151B2 (en) * 2006-05-02 2014-12-02 International Business Machines Corporation Method and apparatus for the dynamic identification and merging of instructions for execution on a wide datapath
KR101386470B1 (ko) * 2007-07-16 2014-04-18 엘지전자 주식회사 세탁기
US7877582B2 (en) 2008-01-31 2011-01-25 International Business Machines Corporation Multi-addressable register file
US7849294B2 (en) * 2008-01-31 2010-12-07 International Business Machines Corporation Sharing data in internal and memory representations with dynamic data-driven conversion
US8291496B2 (en) 2008-05-12 2012-10-16 Enpulz, L.L.C. Server based malware screening
US8346828B2 (en) 2008-10-14 2013-01-01 International Business Machines Corporation System and method for storing numbers in first and second formats in a register file
US8458684B2 (en) 2009-08-19 2013-06-04 International Business Machines Corporation Insertion of operation-and-indicate instructions for optimized SIMD code

Also Published As

Publication number Publication date
JP2014533390A (ja) 2014-12-11
CN103797459A (zh) 2014-05-14
GB2509037A (en) 2014-06-18
US20130073838A1 (en) 2013-03-21
US20130103932A1 (en) 2013-04-25
US9411585B2 (en) 2016-08-09
JP5963866B2 (ja) 2016-08-03
US9395981B2 (en) 2016-07-19
WO2013038302A1 (en) 2013-03-21
GB2509037B (en) 2016-03-23
GB201406331D0 (en) 2014-05-21
CN103797459B (zh) 2016-10-05

Similar Documents

Publication Publication Date Title
DE112012003864T5 (de) Mehrfach adressierbare Registerdateien und dazugehörige Formatumwandlungen
DE112012003837T5 (de) Differenzierte Anweisungsaktivierung mit Unterfunktionsgranularität
DE102018005181B4 (de) Prozessor für einen konfigurierbaren, räumlichen beschleuniger mit leistungs-, richtigkeits- und energiereduktionsmerkmalen
US9824063B2 (en) Method, apparatus and instructions for parallel data conversions
DE69233361T2 (de) Ein-Chip-Mikrocomputer
DE102007063809B3 (de) Anweisungen und Logik zur Verarbeitung von Zeichenketten
TWI544407B (zh) 浮點定比處理器、方法、系統及指令
DE102018005169A1 (de) Prozessoren und verfahren mit konfigurierbaren netzwerkbasierten datenflussoperatorschaltungen
DE112010004887T5 (de) Verfahren und Vorrichtung zur Durchführung einer Verschiebe- und Exklusiv-ODER-Operation in einer einzelnen Instruktion
DE112007002101T5 (de) Instruktion und Logik zur Durchführung einer Skalarprodukt-Operation
DE102015007943A1 (de) Mechanismen für eine Gewichtungsverschiebung in faltenden neuronalen Netzwerken
DE19735348A1 (de) Einzelbefehl-Mehrdaten-Verarbeitung unter Verwendung von mehreren Bänken von Vektorregistern
DE112013005416T5 (de) Verfahren, Vorrichtungen, Befehle und Logik zum Bereitstellen von Vektoradressenkonflikt-Detektionsfunktionalität
DE102014004563A1 (de) Befehle und Logik zur Bereitstellung verbesserter Paging-Fähigkeiten für Secure Enclave-Seitencaches
DE112011105666T5 (de) Befehl und Logik zum Bereitstellen von Vektor-Lade-OP/Speicher-OP mit Schritt-Funktionalität
DE112014000252T5 (de) Anweisung &#34;Vector floating point test data class immediate&#34;
DE112013005466T5 (de) Anweisung &#34;Vector generate mask&#34;
DE112013005500T5 (de) Anweisung zum Drehen und Einfügen eines Vektorelements unter einer Maske
DE112012006946T5 (de) Verfahren und Vorrichtung zur Planung von Speicherinstruktionen quer über atomare Bereiche bei der binären Übersetzung
DE102018005145A1 (de) Binärmultiplizierer für Binärvektor-Faktorisierung
DE19735349B4 (de) Vektorprozessor und Verfahren zu dessen Betrieb
DE102016221968A1 (de) Integration von Vorzeichenerweiterungen für Ladevorgänge
DE102018006046A1 (de) Einrichtung und Verfahren zur Verschiebung und Extraktion von gepackten Datenelementen
DE102018132205A1 (de) Vorrichtung und verfahren zum verschieben von gepackten quadwords und zum extrahieren von gepackten wörtern

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R082 Change of representative

Representative=s name: SPIES & BEHRNDT PATENTANWAELTE PARTG MBB, DE

Representative=s name: LIFETECH IP SPIES & BEHRNDT PATENTANWAELTE PAR, DE

Representative=s name: LIFETECH IP SPIES DANNER & PARTNER PATENTANWAE, DE

Representative=s name: LIFETECH IP SPIES DANNER & PARTNER, PATENTANWA, DE

R082 Change of representative

Representative=s name: SPIES & BEHRNDT PATENTANWAELTE PARTG MBB, DE

Representative=s name: LIFETECH IP SPIES & BEHRNDT PATENTANWAELTE PAR, DE

Representative=s name: LIFETECH IP SPIES DANNER & PARTNER PATENTANWAE, DE

R082 Change of representative

Representative=s name: SPIES & BEHRNDT PATENTANWAELTE PARTG MBB, DE

Representative=s name: LIFETECH IP SPIES & BEHRNDT PATENTANWAELTE PAR, DE

R082 Change of representative

Representative=s name: SPIES & BEHRNDT PATENTANWAELTE PARTG MBB, DE

R016 Response to examination communication