DE112012003864T5 - Mehrfach adressierbare Registerdateien und dazugehörige Formatumwandlungen - Google Patents
Mehrfach adressierbare Registerdateien und dazugehörige Formatumwandlungen Download PDFInfo
- 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
Links
- 238000006243 chemical reaction Methods 0.000 title claims abstract description 79
- 238000007667 floating Methods 0.000 claims description 120
- 238000000034 method Methods 0.000 claims description 87
- 238000012545 processing Methods 0.000 claims description 84
- 238000004590 computer program Methods 0.000 claims description 30
- 230000006870 function Effects 0.000 claims description 30
- 230000011664 signaling Effects 0.000 claims description 13
- 238000004891 communication Methods 0.000 claims description 2
- 230000004044 response Effects 0.000 claims 2
- 101100534231 Xenopus laevis src-b gene Proteins 0.000 description 52
- 230000008569 process Effects 0.000 description 28
- 230000004913 activation Effects 0.000 description 22
- 238000004364 calculation method Methods 0.000 description 16
- 238000010586 diagram Methods 0.000 description 15
- 241001136792 Alle Species 0.000 description 14
- 230000009466 transformation Effects 0.000 description 10
- 238000013459 approach Methods 0.000 description 9
- 230000003247 decreasing effect Effects 0.000 description 9
- 230000007246 mechanism Effects 0.000 description 9
- 238000010606 normalization Methods 0.000 description 9
- 230000008859 change Effects 0.000 description 8
- 102100022907 Acrosin-binding protein Human genes 0.000 description 7
- 101000756551 Homo sapiens Acrosin-binding protein Proteins 0.000 description 7
- 230000000717 retained effect Effects 0.000 description 6
- 230000004048 modification Effects 0.000 description 5
- 238000012986 modification Methods 0.000 description 5
- 230000008901 benefit Effects 0.000 description 4
- 230000009471 action Effects 0.000 description 3
- 230000000295 complement effect Effects 0.000 description 3
- 238000013461 design Methods 0.000 description 3
- 238000004519 manufacturing process Methods 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 238000012546 transfer Methods 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 2
- 230000003139 buffering effect Effects 0.000 description 2
- 238000012512 characterization method Methods 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 239000000463 material Substances 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 230000002829 reductive effect Effects 0.000 description 2
- 238000013519 translation Methods 0.000 description 2
- 101100428768 Arabidopsis thaliana VSR1 gene Proteins 0.000 description 1
- 101100428771 Arabidopsis thaliana VSR3 gene Proteins 0.000 description 1
- 101001094044 Mus musculus Solute carrier family 26 member 6 Proteins 0.000 description 1
- 241001122767 Theaceae Species 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 238000013467 fragmentation Methods 0.000 description 1
- 238000006062 fragmentation reaction Methods 0.000 description 1
- 230000017525 heat dissipation Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 230000003278 mimic effect Effects 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 230000003362 replicative effect Effects 0.000 description 1
- 230000002441 reversible effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 210000003813 thumb Anatomy 0.000 description 1
- 238000000844 transformation Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30025—Format conversion instructions, e.g. Floating-Point to Integer, decimal conversion
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
- G06F9/30014—Arithmetic instructions with variable precision
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30105—Register structure
- G06F9/30112—Register structure comprising data of variable length
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/3016—Decoding the operand specifier, e.g. specifier format
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30181—Instruction operation extension or modification
- G06F9/30185—Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode
Abstract
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 und7B 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 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 Anweisungsabrufeinheit100 abgerufen und an eine Anweisungsentschlüsselungseinheit102 weitergeleitet. Entschlüsselte Anweisungen werden an eine Ausgabe-/Verzweigungseinheit104 ü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-/Speichereinheit106 , der Festkommaeinheit (FXU)108 , der Gleitkommaeinheit (FPU)110 oder des SIMD-Verarbeitungsblocks112 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-Registerdatei114 , der Gleitkomma-Registerdatei116 oder der Vektor-Registerdatei118 , 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-Registerdatei118 zum Speichern von strukturierten Daten (für gewöhnlich ein Vektor mit vier Elementen). Die Vektor-Registerdatei118 kann in vier Unterregisterdateien segmentiert werden, von denen jede ein einzelnes Feld der strukturierten Daten speichert. Der SIMD-Multimedia-Verarbeitungsblock112 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. In1 werden Festkommaeinheiten119 und Gleitkommaeinheiten120 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-Registerdatei114 , eine Gleitkomma-Registerdatei116 und eine Vektor-Registerdatei118 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 jedoch2 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 Datenverarbeitungssystem200 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 Verarbeitungseinheit206 , der Hauptspeicher208 und der Grafikprozessor210 sind mit dem NB/MCH202 verbunden. Der Grafikprozessor210 kann mit dem NB/MCH202 über einen beschleunigten Grafikanschluss (AGP) verbunden sein. - In dem dargestellten Beispiel ist der lokale Netzwerk-(LAN)Adapter
212 mit dem SB/ICH204 verbunden. Der Audio-Adapter216 , der Tastatur- und Maus-Adapter220 , der Modem222 , der Nur-Lese-Speicher (ROM)224 , das Festplattenlaufwerk (HDD)226 , das CD-ROM-Laufwerk230 , die Universal-Serial-Bus-(USB)Anschlüsse und weitere Datenübertragungsanschlüsse232 und PCI/PCIe-Einheiten234 sind mit dem SB/ICH204 über den Bus238 und den Bus240 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 ROM224 kann beispielsweise ein binäres Flash-Eingabe/Ausgabe-System (BIOS) sein. - Das HDD
226 und das CD-ROM-Laufwerk230 sind mit dem SB/ICH204 über den Bus240 verbunden. Das HDD226 und das CD-ROM-Laufwerk230 können zum Beispiel eine Integrated Drive Electronics-(IDE) oder Serial Advanced Technology Attachment-(SATA)Schnittstelle verwenden. Die Super I/O-(SIO)Einheit236 kann mit dem SB/ICH204 verbunden sein. - Auf der Verarbeitungseinheit
206 wird ein Betriebssystem ausgeführt. Das Betriebssystem koordiniert und stellt eine Steuerung von verschiedenen Komponenten in dem Datenverarbeitungssystem200 in2 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 Datenverarbeitungssystem200 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 Datenverarbeitungssystem200 kann ein symmetrisches Multiprozessor-(SMP)System mit einer Vielzahl von Prozessoren in der Verarbeitungseinheit206 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 Verarbeitungseinheit206 in den Hauptspeicher208 geladen werden. Die Prozesse für eine oder mehrere veranschaulichende Ausführungsformen können durch die Verarbeitungseinheit206 unter Verwendung von computerlesbarem Programmcode ausgeführt werden, der in sich in einem Speicher befinden kann wie beispielsweise dem Hauptspeicher208 , dem ROM224 oder zum Beispiel in einer oder mehreren Peripherie-Einheiten226 und230 . - Ein Bussystem wie beispielsweise der Bus
238 oder der Bus240 , wie in2 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 Modem222 oder der Netzwerk-Adapter212 von2 kann eine oder mehrere Einheiten enthalten, die zum Senden und Empfangen von Daten verwendet werden. Ein Speicher kann zum Beispiel der Hauptspeicher208 , der ROM224 oder ein Zwischenspeicher sein, wie er im NB/MCH202 in2 zu finden ist. - Fachleuten wird klar sein, dass die Hardware in den
1 bis2 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 in1 bis2 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 Datenverarbeitungssystem200 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 Datenverarbeitungssystem200 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 und3B verweist auf das gemeinsam erteilteU. 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äß demU. S.-Patent mit der Nr. 6 839 828 ausführt. In dem in3A 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 in3A 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 Anweisungsabrufeinheit300 , 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 Anweisungsabrufeinheit300 für die Anweisungsentschlüsselungseinheit302 bereitgestellt, wo sie entschlüsselt und in entsprechende Steuersignale zum Steuern von nachgeschalteten Einheiten erweitert werden. Die erweiterte Anweisung wird an die Ausgabe-/Verzweigungseinheit304 ü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 Anweisungsabrufeinheit300 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 LSU306 speichert das Ergebnis von Speicherzugriffen über den Bus308 wieder auf die kombinierte SVRF310 zurück. In dieser Ausführungsform speichert die SVRF310 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 bis314 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-/Verzweigungseinheit304 gesteuert. Wenn daher die Anweisung erfordert, dass die Festkommaeinheiten die Daten verarbeiten, werden die Daten an die Festkommaeinheiten319 bis322 über die Leitungen315 bis318 übergeben. Wenn die Anweisungen die Gleitkommaeinheiten327 bis330 erforderlich machen, werden die Daten über die Leitungen323 bis326 ü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 SVRF310 zurück, wo es gespeichert wird, bis es von der LSU306 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 LSU306 anweist, Daten aus der SVRF310 auszulesen, werden die Daten über den Datenbus332 übergeben. Außerdem wird die Adresse, unter der die Daten im Speicher gespeichert werden sollen, der LSU306 über den Bus331 übergeben. In der Ausführungsform von3A übergibt der Bus331 Informationen aus einem Segment (D) der SVRF310 , das dem Funktionseinheitenpaar314 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 LSU306 auf der gesamten Datenleitung oder einer Untergruppe davon, die in der SVRF310 enthalten ist. Die LSU306 arbeitet entweder im Lade- oder Speicherbetriebsmodus, abhängig von der Anweisung, die durch die Ausgabe-/Verzweigungseinheit304 ausgegeben wird. Im Lademodus empfängt die LSU306 Adressinformationen von dem bevorzugten Bereich der SVRF310 unter Verwendung des Busses331 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 Busses308 aus dem Speicher in die SVRF310 . 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 SVRF310 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 SVRF310 über den Bus332 und Adressinformationen aus dem bevorzugten Bereich von der SVRF310 unter Verwendung des Busses331 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äß demU. S.-Patent mit der Nr. 6 839 828 verwendet werden kann. Gemäß dieser Ausführungsform sind die verschiedenen Segmente der SVRF310 durch einen Multiplexer333 auswählbar, der mit einer Steuereingabe über die Leitung334 von der Ausgabe-/Verzweigungseinheit304 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 Multiplexer333 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 in4 gezeigt, gleicht der Prozessor400 in der Konfiguration dem Prozessor in3A mit Ausnahme der Konfiguration und Verwendung der Registerdatei440 . Die Anweisungsabrufeinheit410 , die Ausgabe-/Verzweigungseinheit430 , die Funktionseinheiten450 bis480 der Funktionseinheitenpaare (oder Funktionseinheitengruppen)482 bis488 und die Lade-/Speichereinheit490 arbeiten alle auf eine ähnliche Weise wie oben in Bezug auf3A beschrieben. Die. Anweisungsentschlüsselungseinheit420 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 Registerdatei440 zu. Wenn durch die Anweisungsentschlüsselungseinheit420 ermittelt wurde, dass die Anweisung eine traditionelle Gleitkommaanweisung ist, wird auf einen ersten Unterbereich442 der Registerdatei440 zugegriffen, wobei die Daten für die entsprechenden Funktionseinheiten450 bis480 zur Verarbeitung bereitgestellt werden. Wenn durch die Anweisungsentschlüsselungseinheit420 ermittelt wurde, dass die Anweisung eine traditionelle VMX-Vektor-Anweisung ist, wird auf einen zweiten Unterbereich444 der Registerdatei440 zugegriffen, wobei die Daten wiederum für die entsprechenden Funktionseinheiten450 bis480 zur Verarbeitung bereitgestellt werden. Wenn durch die Anweisungsentschlüsselungseinheit420 ermittelt wurde, dass die Anweisung eine VSX-Anweisung ist, kann auf den gesamten Bereich446 der Registerdatei440 zugegriffen werden, wobei die Daten für die entsprechenden Funktionseinheiten450 bis480 zur Verarbeitung bereitgestellt werden. Abhängig von der bestimmten VSX-Anweisung, die ausgeführt wird, kann eine VSX-Anweisung, die auf beliebige Register446 zugreift, entweder die gesamte Breite des Registers verwenden, um Eingabedaten zu erhalten (was einer VSX-Vektor-Anweisungen entspricht und Zugriff auf alle Register der Registerdatei446 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 Registerdatei446 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 Registerdatei440 auf. Der zweite Unterbereich444 weist einen zweiten Bereich von Bits einer zweiten Gruppe von Registern in der Registerdatei auf. Der dritte Bereich446 weist einen gesamten Bereich von Bits der gesamten Gruppe von Registern in der Registerdatei440 auf. Auf diese Weise kann eine einzige Registerdatei440 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 Registerdatei440 zugreifen; skalare Gleitkommaanweisungen mit einfacher Präzision, die auf einen 64-Bit-Unterbereich jedes Registers in der gesamten Registerdatei440 zugreifen; skalare Gleitkommaanweisungen mit doppelter Präzision, die auf einen 64-Bit-Unterbereich jedes Registers in der gesamten Registerdatei440 zugreifen; und Vektor-Anweisungen, die auf den gesamten Bitbereich in der gesamten Registerdatei440 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 Registerdatei440 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 Registerdatei440 nummeriert sind, wobei die Bits durchgehend von links nach rechts in der Registerdatei440 nummeriert sind. Dies wird in der im Folgenden erörterten5 gezeigt. -
5 ist ein beispielhaftes Schaubild für eine Vector-Scalar Extension-(VSX)Registerdatei gemäß einer veranschaulichenden Ausführungsform. Die VSX-Registerdatei500 von5 kann zum Beispiel als die Registerdatei440 verwendet werden. Wie in5 gezeigt, enthält die VSX-Registerdatei500 eine Vielzahl von Vektor-Skalar-Registern (VSRs)510 , die von VSR[0] bis VSR[63] nummeriert sind. Jedes der VSRs510 hat eine vorgegebene Anzahl von Bits, die eingerichtet werden kann. In dem dargestellten Beispiel hat jedes VSR510 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 Registern530 der Registerdatei500 ist einem ersten Anweisungstyp zugehörig, wie beispielsweise einer skalaren oder Gleitkommaanweisung. Ein zweiter Unterbereich von Bits540 in einer zweiten Gruppe von Registern550 in der Registerdatei500 ist einem zweiten Anweisungstyp zugehörig, wie beispielsweise einer Vektor-, SIMD- oder VMX-Anweisung. Ein dritter Bereich von Bits560 in der gesamten Gruppe von Registern570 der Registerdatei500 ist einem dritten Anweisungstyp zugehörig, wie beispielsweise einer VSX-Anweisung. - Aus
5 lässt sich erkennen, dass sich die VSX-Registerdatei500 von anderen Registerdateien in anderen System dadurch unterscheidet, dass sie drei verschiedenen Typen von Anweisungen gestattet, auf Register der VSX-Registerdatei500 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 Registern570 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-Registerdatei500 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 Unterbereichs520 . 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üsselungseinheit420 des Prozessors400 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 Registerdatei440 , 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 Registern442 bis446 in der Registerdatei440 werden dann unter Verwendung der vollen Kennung adressiert. Ergebnisse der Operation werden dann auf der Grundlage der Adressierung der Untergruppe von Registern442 bis446 unter Verwendung der vollen Kennung berechnet, wobei die Ergebnisse der Operation zurück in die Untergruppe von Registern442 bis446 in der Registerdatei440 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 - 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 bis7B 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 in6 gezeigt, beginnt die Operation mit einem Empfangen einer von einer Anweisungsabrufeinheit abgerufenen Anweisung, SCHRITT610 . Auf der Grundlage eines Operationscodes der abgerufenen Anweisung ermittelt die Entschlüsselungslogik, ob die abgerufene Anweisung eine VSX-Anweisung ist, SCHRITT615 . 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, SCHRITT620 . 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 Unterbereich520 ,540 ,560 soll verwendet werden). Die Registerkennungsfelder geben an, auf welche der Register530 ,550 oder570 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 Register570 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, SCHRITT635 . 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, SCHRITT640 . Eine volle Registerkennung für den gesamten Bitbereich des Registers wird dann auf der Grundlage des Anweisungstyps und der schmalen Bitbereichkennung erzeugt, SCHRITT645 . 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 in6 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, SCHRITT630 , und Ergebnisse werden unter Verwendung der vollen Registerkennung zurück in die Register in der Untergruppe von Registern geschrieben, SCHRITT635 . Dann ist die Operation beendet. -
7A und7B stellen einen Ablaufplan dar, der ein Beispiel einer Entschlüsselungsoperation für eine Umsetzung gemäß einer veranschaulichenden Ausführungsform aufgliedert. Wie in den7A und7B gezeigt, beginnt die Operation wiederum mit einem Empfangen einer von einer Anweisungsabrufeinheit abgerufenen Anweisung, SCHRITT710 . 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), ABFRAGE715 . Wenn der Operationscode die Anweisung als eine VSX-Anweisung identifiziert, wird eine breite Bitbereichkennung entnommen, SCHRITT720 . Eine breite Bitbereichkennung kann jedes der Register570 adressieren, d. h. die volle Registerdatei wird adressiert sowie alle Bits in diesen Registern, SCHRITT725 . 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, SCHRITT730 . 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, SCHRITT735 . - 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, ABFRAGE740 (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, SCHRITT745 . Eine volle Bitbereichkennung wird auf der Grundlage des Anweisungstyps und der schmalen Bitbereichkennung erzeugt, SCHRITT750 . 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, SCHRITT755 . 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, SCHRITT760 . 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, SCHRITT765 . - 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, SCHRITT770 . Eine volle Bitbereichkennung wird auf der Grundlage des Anweisungstyps, z. B. Vektor-, SIMD- oder VMX-Anweisung, und der schmalen Bitbereichkennung erzeugt, SCHRITT775 . 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, SCHRITT780 . 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, SCHRITT785 . 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, SCHRITT790 . 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 oder550 schreiben, und eine VSX-Anweisung kann Werte aus beliebigen oder allen der Register570 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 stellt8 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, SCHRITT800 . 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, ABFRAGE802 . 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, ABFRAGE804 . Wenn dies der Fall ist, wird die Verarbeitung mit SCHRITT800 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, SCHRITT806 . 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 ABFRAGE804 fortgesetzt. - In einer Ausführungsform hängt die eingefügte Umwandlungsanweisung von einem oder mehreren Kriterien ab, wie im Folgenden unter Bezugnahme auf
9 und10 ausführlicher beschrieben wird.9 betrifft eine Umwandlung von Vektor in Skalar, und10 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 von9 und10 , 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, ABFRAGE900 . 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, SCHRITT902 . 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, SCHRITT904 . 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, ABFRAGE1000 . 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, ABFRAGE1002 . 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), SCHRITT1004 . 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 ABFRAGE1002 jedoch ein Vektor von Kopien des Werts erstellt werden soll, ABFRAGE1002 , wird eine Anweisung verwendet, auf die hierin als XSCVSSPVSPSPLT Bezug genommen wird, SCHRITT1006 . 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, SCHRITT1008 . 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:
- 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.
-
- 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:
- 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.
- 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:
- 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:
- 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
-
- 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:
- 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.
- 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 Computerprogrammprodukt1100 beispielsweise ein oder mehrere nicht-flüchtige computerlesbare Speichermedien1102 , um darauf computerlesbare Programmcodemittel oder Logik1104 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.
- 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.
- 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).
- 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.
- 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).
- 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.
- 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).
- 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.
- 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).
- 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.
- 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).
- 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.
- 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).
- 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.
- 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.
- 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).
- 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.
- 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.
- 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).
- 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.
- 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.
- 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).
- 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.
- 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.
- 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).
- 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).
- 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.
- 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.
- 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).
- 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).
- 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.
- 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.
- 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).
- 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.
- 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.
- 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).
- 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).
- 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.
- 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.
- 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).
- 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).
- 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.
- 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] - 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).
- 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.
-
-
- 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.
- 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.
- 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).
- 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.
- 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.
- 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).
- 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.
- 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.
- 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).
- 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.
-
- Die Operation mit verschiedenen speziellen Werten des Operanden ist im Folgenden zusammengefasst.
-
- 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.
- 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.
- 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).
- 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.
- 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.
- 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).
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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).
- 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.
- 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.
- 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.
- 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.
- 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.
- 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
- 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).
- 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.
- 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).
- 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.
- 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.
- 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). - 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.
- 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).
- 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
- 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).
- 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
- 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).
- 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)
- 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.
- 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.
- 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.
- Computerprogrammprodukt nach Anspruch 1, wobei mindestens eines von dem ersten Register und dem zweiten Register ein Register einer mehrfach adressierbaren Registerdatei ist.
- 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.
- 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.
- 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.
- Computerprogrammprodukt nach Anspruch 7, wobei das erste Register ein Datum der ersten Anweisung enthält, das umgewandelt werden soll.
- 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.
- Computerprogrammprodukt nach Anspruch 1, wobei die Umwandlungsanweisung eine Nachbildungsfunktion enthält.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
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)
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)
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 |
-
2011
- 2011-09-16 US US13/234,520 patent/US9411585B2/en not_active Expired - Fee Related
-
2012
- 2012-09-05 JP JP2014530347A patent/JP5963866B2/ja not_active Expired - Fee Related
- 2012-09-05 WO PCT/IB2012/054582 patent/WO2013038302A1/en active Application Filing
- 2012-09-05 GB GB1406331.7A patent/GB2509037B/en active Active
- 2012-09-05 DE DE112012003864.9T patent/DE112012003864T5/de active Pending
- 2012-09-05 CN CN201280045033.7A patent/CN103797459B/zh active Active
- 2012-12-17 US US13/716,998 patent/US9395981B2/en active Active
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 "Vector floating point test data class immediate" | |
DE112013005466T5 (de) | Anweisung "Vector generate mask" | |
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 |