MIPS ( Microprocessor without Interlocked Pipelined Stages ) [ 1 ] ist eine Familie von RISC-Befehlssatzarchitekturen ( ISA ) [ 2 ] : A-1 [ 3 ] : 19, die von MIPS Computer Systems, heute MIPS Technologies , mit Sitz in den Vereinigten Staaten , entwickelt wurden .

Es existieren mehrere MIPS-Versionen, darunter MIPS I, II, III, IV und V, sowie fünf Releases von MIPS32/64 (für 32- bzw. 64-Bit-Implementierungen). Die frühen MIPS-Architekturen waren 32-Bit-Architekturen; 64-Bit-Versionen wurden später entwickelt. Die aktuelle MIPS-Version ist seit April 2017 MIPS32/64 Release 6. [ 4 ] [ 5 ] MIPS32/64 unterscheidet sich von MIPS I–V hauptsächlich durch die Definition des privilegierten System Control Coprocessors im Kernelmodus zusätzlich zur Benutzermodusarchitektur.

Die MIPS-Architektur verfügt über mehrere optionale Erweiterungen: MIPS-3D , ein einfacher Satz von Gleitkomma- SIMD-Befehlen speziell für 3D-Computergrafik ; [ 6 ] MDMX (MaDMaX), ein umfangreicherer Integer -SIMD- Befehlssatz mit 64-Bit-Gleitkommaregistern; MIPS16e, das den Befehlsstrom komprimiert , um den Speicherbedarf von Programmen zu reduzieren; [ 7 ] und MIPS MT, das Multithreading ermöglicht . [ 8 ]

In Kursen zur Rechnerarchitektur an Universitäten und Fachhochschulen wird häufig die MIPS-Architektur behandelt. [ 9 ] Diese Architektur hatte großen Einfluss auf spätere RISC-Architekturen wie Alpha . Im März 2021 gab MIPS bekannt, dass die Entwicklung der MIPS-Architektur eingestellt wurde, da das Unternehmen auf RISC-V umsteigt . [ 10 ]

Geschichte

Die erste Version der MIPS-Architektur wurde von MIPS Computer Systems für ihren Mikroprozessor R2000 , die erste MIPS-Implementierung, entwickelt. MIPS und der R2000 wurden 1985 gemeinsam vorgestellt. [ 11 ] Mit der Einführung von MIPS II wurde MIPS in MIPS I umbenannt , um es von der neuen Version zu unterscheiden. [ 3 ] : 32

Der R6000- Mikroprozessor von MIPS Computer Systems (1989) war die erste Implementierung von MIPS II. [ 3 ] : 8 Der für Server konzipierte R6000 wurde von Bipolar Integrated Technology hergestellt und vertrieben , war jedoch ein kommerzieller Misserfolg. Mitte der 1990er-Jahre basierten viele neue 32-Bit-MIPS-Prozessoren für eingebettete Systeme auf MIPS II, da die Einführung der 64-Bit-Architektur MIPS III im Jahr 1991 MIPS II bis zur Einführung von MIPS32 im Jahr 1999 zur neuesten 32-Bit-MIPS-Architektur machte. [ 3 ] : 19

Der R4000- Mikroprozessor von MIPS Computer Systems (1991) war die erste Implementierung von MIPS III. Er war für den Einsatz in PCs, Workstations und Servern konzipiert. MIPS Computer Systems bewarb die MIPS-Architektur und den R4000 mit Nachdruck und gründete das Advanced Computing Environment (ACE)-Konsortium, um den Advanced RISC Computing (ARC)-Standard voranzutreiben . Ziel war es, MIPS als dominierende PC-Plattform zu etablieren. ARC konnte sich im PC-Bereich nur wenig durchsetzen, doch der R4000 (und sein Derivat R4400) fanden breite Anwendung in Workstations und Servern, insbesondere beim größten Nutzer Silicon Graphics . Weitere Einsatzgebiete des R4000 waren High-End-Embedded-Systeme und Supercomputer. MIPS III wurde schließlich in einer Reihe von Embedded-Mikroprozessoren implementiert. Der R4600 (1993) von Quantum Effect Design und seine Derivate wurden häufig in High-End-Embedded-Systemen sowie in Low-End-Workstations und Servern eingesetzt. Der R4200 (1994) von MIPS Technologies war für Embedded-Systeme, Laptops und PCs konzipiert. Eine Weiterentwicklung, der von NEC Electronics hergestellte R4300i, wurde in der Spielkonsole Nintendo 64 verwendet . Die Nintendo 64 gehörte zusammen mit der PlayStation Mitte der 1990er-Jahre zu den Konsolen mit den meisten MIPS-Architekturprozessoren.

Die erste Implementierung von MIPS IV war der Mikroprozessor-Chipsatz R8000 von MIPS Technologies (1994). Die Entwicklung des R8000 begann bei Silicon Graphics, Inc. und er wurde ausschließlich in High-End-Workstations und Servern für wissenschaftliche und technische Anwendungen eingesetzt, bei denen hohe Leistung bei großen Gleitkomma-Workloads wichtig war. Spätere Implementierungen waren der MIPS Technologies R10000 (1996) sowie der Quantum Effect Devices R5000 (1996) und RM7000 (1998). Der von NEC Electronics und Toshiba hergestellte und vertriebene R10000 und seine Derivate wurden unter anderem von NEC, Pyramid Technology, Silicon Graphics und Tandem Computers in Workstations, Servern und Supercomputern verwendet. Der R5000 und der R7000 fanden Anwendung in High-End-Embedded-Systemen, PCs sowie Low-End-Workstations und -Servern. Eine Weiterentwicklung des R5000 von Toshiba, der R5900, wurde in der Emotion Engine von Sony Computer Entertainment verwendet, die die PlayStation 2- Spielkonsole antrieb .

MIPS V wurde am 21. Oktober 1996 auf dem Microprocessor Forum 1996 zusammen mit der MIPS Digital Media Extensions (MDMX)-Erweiterung vorgestellt und war zur Verbesserung der Leistung von 3D-Grafiktransformationen konzipiert. [ 12 ] Mitte der 1990er-Jahre wurden MIPS-Mikroprozessoren hauptsächlich in Grafik-Workstations von Silicon Graphics eingesetzt. Die MDMX-Erweiterung, die ausschließlich Ganzzahlen verarbeiten konnte, vervollständigte MIPS V und bot ein komplettes System zur Leistungssteigerung von 3D-Grafikanwendungen. [ 13 ] MIPS-V-Implementierungen wurden jedoch nie eingeführt. Am 12. Mai 1997 kündigte Silicon Graphics die Mikroprozessoren H1 („Beast“) und H2 („Capitan“) an. Ersteres sollte die erste MIPS-V-Implementierung sein und in der ersten Hälfte des Jahres 1999 eingeführt werden. [ 14 ] Die Projekte H1 und H2 wurden später zusammengeführt und schließlich 1998 eingestellt. Obwohl es keine MIPS-V-Implementierungen gab, basierte MIPS64 Release 1 (1999) auf MIPS V und behielt alle seine Funktionen als optionale Coprozessor-1-Funktion (FPU) namens Paired-Single bei.

When MIPS Technologies was spun-out of Silicon Graphics in 1998, it refocused on the embedded market. Through MIPS V, each successive version was a strict superset of the previous version, but this property was found to be a problem, and the architecture definition was changed to define a 32-bit and a 64-bit architecture: MIPS32 and MIPS64. Both were introduced in 1999.[15] MIPS32 is based on MIPS II with some additional features from MIPS III, MIPS IV, and MIPS V; MIPS64 is based on MIPS V.[15]NEC, Toshiba and SiByte (later acquired by Broadcom) each obtained licenses for MIPS64 as soon as it was announced. Philips, LSI Logic, IDT, Raza Microelectronics, Inc., Cavium, Loongson Technology and Ingenic Semiconductor have since joined them. MIPS32/MIPS64 Release 5 was announced on December 6, 2012.[16] According to the Product Marketing Director at MIPS, Release 4 was skipped because the number four is perceived as unlucky in many Asian cultures.[17]

In December 2018, Wave Computing, the new owner of the MIPS architecture, announced that MIPS ISA would be open-sourced in a program dubbed the MIPS Open initiative.[18] The program was intended to open up access to the most recent versions of both the 32-bit and 64-bit designs making them available without any licensing or royalty fees as well as granting participants licenses to existing MIPS patents.[19][20][21]

In March 2019, MIPS Revision 6 was made available under a royalty-free license,[22] but later that year the program was shut down again.[23]

In March 2021, Wave Computing announced that the development of the MIPS architecture has ceased. The company has joined the RISC-V foundation and future processor designs will be based on the RISC-V architecture.[10][24] In spite of this, some licensees such as Loongson are continuing with new extensions of MIPS-compatible ISAs on their own.[25]

In January 2024, Loongson won a case over rights to use MIPS architecture.[26]

Design

MIPS ist eine modulare Architektur, die bis zu vier Koprozessoren (COP0/1/2/3) unterstützt. In der MIPS-Terminologie ist COP0 der System Control Coprocessor (ein wesentlicher Bestandteil des Prozessors, der in MIPS I–V implementierungsabhängig ist), COP1 eine optionale Gleitkommaeinheit (FPU) und COP2 und COP3 optionale, implementierungsabhängige Koprozessoren (MIPS III entfernte COP3 und verwendete dessen Opcodes für andere Zwecke). Beispielsweise ist COP2 in der PlayStation- Videospielkonsole die Geometry Transformation Engine (GTE), die die Geometrieverarbeitung in 3D-Computergrafiken beschleunigt.

Versionen

MIPS I

MIPS ist eine Load/Store-Architektur (auch bekannt als Register-Register-Architektur ); mit Ausnahme der Load/Store-Befehle, die zum Zugriff auf den Speicher verwendet werden , arbeiten alle Befehle auf den Registern.

MIPS I verfügt über 32 32-Bit-Allzweckregister (GPR). Register $0 ist fest auf Null gesetzt, und Schreibvorgänge darauf werden verworfen. Register $31 ist das Verbindungsregister . Für die Befehle zur Multiplikation und Division von Ganzzahlen, die asynchron zu anderen Befehlen ausgeführt werden, stehen die beiden 32-Bit-Register HI und LO zur Verfügung. Es gibt einen kleinen Satz von Befehlen zum Kopieren von Daten zwischen den Allzweckregistern und den HI/LO-Registern. Der Programmzähler ist 32 Bit lang. Die beiden niederwertigen Bits enthalten immer Null, da MIPS-I-Befehle 32 Bit lang sind und an ihren natürlichen Wortgrenzen ausgerichtet werden.

Befehle werden in drei Typen unterteilt: R (Register), I (Immediate) und J (Sprung). Jeder Befehl beginnt mit einem 6-Bit-Opcode. Zusätzlich zum Opcode spezifizieren R-Befehle drei Register, [ 27 ] ein Feld für den Verschiebungswert und ein Funktionsfeld; I-Befehle spezifizieren zwei Register und einen 16-Bit-Immediate-Wert; J-Befehle folgen dem Opcode mit einem 26-Bit-Sprungziel. [ 2 ] : A-174

Folgende drei Formate werden für den Kernbefehlssatz verwendet:

Typ-31- Format (Bits) -0-
ROpcode (6)rs (5)rt (5)rd (5)shamt (5)Funktion (6)
ICHOpcode (6)rs (5)rt (5)sofort (16)
JOpcode (6)Adresse (26)

MIPS I verfügt über Befehle zum Laden und Speichern von 8-Bit-Bytes, 16-Bit-Halbwörtern und 32-Bit-Wörtern. Es wird nur ein Adressierungsmodus unterstützt: Basiswert + Verschiebung. Da MIPS I eine 32-Bit-Architektur ist, müssen Datenmengen unter 32 Bit entweder vorzeichen- oder nullerweitert werden. Ladebefehle mit dem Suffix „unsigned“ führen eine Nullerweiterung durch; andernfalls erfolgt eine Vorzeichenerweiterung. Ladebefehle lesen den Basiswert aus dem Inhalt eines GPR (rs) und schreiben das Ergebnis in einen anderen GPR (rt). Speicherbefehle lesen den Basiswert aus dem Inhalt eines GPR (rs) und die Speicherdaten aus einem anderen GPR (rt). Alle Lade- und Speicherbefehle berechnen die Speicheradresse durch Addition des Basiswerts mit dem vorzeichenerweiterten 16-Bit-Immediate. MIPS I erfordert, dass alle Speicherzugriffe an ihren natürlichen Wortgrenzen ausgerichtet sind; andernfalls wird eine Ausnahme ausgelöst. Um effiziente, nicht ausgerichtete Speicherzugriffe zu ermöglichen, gibt es Wortlade-/Speicherbefehle mit dem Suffix „left“ oder „right“. Allen Ladebefehlen folgt ein Ladeverzögerungs-Slot . Der Befehl im Ladeverzögerungs-Slot kann die vom Ladebefehl geladenen Daten nicht verwenden. Der Ladeverzögerungs-Slot kann mit einem Befehl gefüllt werden, der nicht vom Ladebefehl abhängig ist; falls kein solcher Befehl gefunden wird, wird ein NOP-Befehl ausgeführt.

MIPS I verfügt über Befehle zur Addition und Subtraktion. Diese Befehle beziehen ihre Operanden aus zwei GPRs (rs und rt) und schreiben das Ergebnis in einen dritten GPR (rd). Alternativ kann die Addition einen der Operanden aus einem 16-Bit-Immediate (das auf 32 Bit vorzeichenerweitert wird) beziehen. Die Befehle für Addition und Subtraktion existieren in zwei Varianten: Standardmäßig wird bei einem Überlauf eine Ausnahme ausgelöst; Befehle mit dem Suffix „unsigned“ lösen keine Ausnahme aus. Die Überlaufprüfung interpretiert das Ergebnis als 32-Bit-Zweierkomplement-Ganzzahl. MIPS I bietet außerdem Befehle für bitweise logische UND-, ODER-, XOR- und NOR-Verknüpfungen. Diese Befehle beziehen ihre Operanden aus zwei GPRs und schreiben das Ergebnis in einen dritten GPR. Die UND-, ODER- und XOR-Befehle können alternativ einen der Operanden aus einem 16-Bit-Immediate (das auf 32 Bit nullerweitert wird) beziehen. Die Befehle vom Typ „Set on relation “ schreiben eine Eins oder Null in das Zielregister, je nachdem, ob die angegebene Relation wahr oder falsch ist. Diese Befehle beziehen ihre Operanden aus zwei GPRs oder aus einem GPR und einem 16-Bit-Immediate (das auf 32 Bit vorzeichenerweitert wird) und schreiben das Ergebnis in ein drittes GPR. Standardmäßig werden die Operanden als vorzeichenbehaftete Ganzzahlen interpretiert. Die Varianten dieser Befehle mit dem Suffix „unsigned“ interpretieren die Operanden als vorzeichenlose Ganzzahlen (auch diejenigen, die einen Operanden aus dem vorzeichenerweiterten 16-Bit-Immediate beziehen).

Der Befehl „Load Upper Immediate“ kopiert den 16-Bit-Immediate-Wert in die höherwertigen 16 Bits eines GPR. Er wird zusammen mit dem Befehl „Or Immediate“ verwendet, um einen 32-Bit-Immediate-Wert in ein Register zu laden.

MIPS I verfügt über Befehle für logische Links- und Rechtsverschiebungen sowie arithmetische Rechtsverschiebungen. Der Operand wird aus einem GPR (rt) entnommen, das Ergebnis in einen anderen GPR (rd) geschrieben. Die Verschiebungsdistanz wird entweder aus einem GPR (rs) oder aus einem 5-Bit-Verschiebungsbetrag (dem Feld „sa“) ermittelt.

MIPS I verfügt über Befehle zur Multiplikation und Division von vorzeichenbehafteten und vorzeichenlosen Ganzzahlen. Diese Befehle lesen ihre Operanden aus zwei GPRs und schreiben ihre Ergebnisse in zwei 32-Bit-Register namens HI und LO, da sie unabhängig von (und gleichzeitig mit) den anderen CPU-Befehlen ausgeführt werden können. Bei der Multiplikation werden die höher- und niederwertigen Hälften des 64-Bit-Produkts in HI bzw. LO geschrieben. Bei der Division wird der Quotient in LO und der Rest in HI geschrieben. Um auf die Ergebnisse zuzugreifen, gibt es zwei Befehle (Move from HI und Move from LO), die den Inhalt von HI bzw. LO in ein GPR kopieren. Diese Befehle sind verriegelt: Lesezugriffe auf HI und LO werden erst nach Abschluss einer arithmetischen Operation fortgesetzt, die in HI und LO schreibt. Ein weiteres Befehlspaar (Move to HI oder Move to LO) kopiert den Inhalt eines GPR nach HI bzw. LO. Diese Befehle werden verwendet, um HI und LO nach der Ausnahmebehandlung in ihren ursprünglichen Zustand zurückzusetzen. Anweisungen, die HI oder LO enthalten, müssen durch zwei Anweisungen getrennt sein, die nicht auf HI oder LO schreiben.

Alle MIPS-I-Kontrollflussanweisungen werden von einem Verzweigungsverzögerungs-Slot gefolgt . Sofern der Verzweigungsverzögerungs-Slot nicht durch eine Anweisung belegt ist, die eine sinnvolle Arbeit verrichtet, wird ein NOP (No Ops) ausgeführt. MIPS-I-Verzweigungsanweisungen vergleichen den Inhalt eines GPR (rs) mit Null oder einem anderen GPR (rt) als vorzeichenbehaftete Ganzzahlen und verzweigen, wenn die angegebene Bedingung erfüllt ist. Die Steuerung wird an die Adresse übertragen, die berechnet wird, indem der 16-Bit-Offset um zwei Bits nach links verschoben, das 18-Bit-Ergebnis vorzeichenerweitert und das 32-Bit-Ergebnis mit Vorzeichenerweiterung zur Summe aus Programmzähler (Anweisungsadresse) und 8 × 10 addiert wird . Sprünge gibt es in zwei Varianten: absolut und registerindirekt. Absolute Sprünge („Jump“ und „Jump and Link“) berechnen die Zieladresse, indem der 26-Bit-Befehlsindex um zwei Bits nach links verschoben und das 28-Bit-Ergebnis mit den vier höchstwertigen Bits der Adresse der Anweisung im Verzweigungsverzögerungs-Slot verkettet wird. Registerindirekte Sprünge übertragen die Steuerung an die Anweisung an der Adresse, die von einem GPR (rs) stammt. Die vom GPR bezogene Adresse muss wortausgerichtet sein; andernfalls wird nach Ausführung der Anweisung im Verzweigungsverzögerungs-Slot eine Ausnahme signalisiert. Verzweigungs- und Sprunganweisungen, die ein Link-Register verwenden (mit Ausnahme von „Jump and Link Register“), speichern die Rücksprungadresse in GPR 31. Die Anweisung „Jump and Link Register“ ermöglicht das Speichern der Rücksprungadresse in einem beliebigen beschreibbaren GPR.

MIPS I bietet zwei Befehle, mit denen Software eine Ausnahme signalisieren kann: Systemaufruf und Haltepunkt. Der Systemaufruf wird von Benutzermodus-Software verwendet, um Kernel-Aufrufe durchzuführen; der Haltepunkt dient dazu, die Kontrolle über die Ausnahmebehandlung des Kernels an einen Debugger zu übergeben. Beide Befehle verfügen über ein 20-Bit-Codefeld, das betriebssystemspezifische Informationen für die Ausnahmebehandlung enthalten kann.

MIPS verfügt über 32 Gleitkommaregister. Für Gleitkommazahlen doppelter Genauigkeit sind jeweils zwei Registerpaare vorgesehen. Register mit ungeraden Nummern können nicht für arithmetische Operationen oder Verzweigungen verwendet werden, sondern nur als Teil eines Registerpaares doppelter Genauigkeit. Dadurch stehen für die meisten Befehle 16 nutzbare Register zur Verfügung (Verschiebungen/Kopien und Lade-/Speicheroperationen sind davon nicht betroffen).

Einfache Genauigkeit wird durch das Suffix .s gekennzeichnet, doppelte Genauigkeit durch das Suffix .d.

MIPS II

MIPS II entfernte den Ladeverzögerungs-Slot [ 3 ] : 41 und fügte mehrere Befehlssätze hinzu. Für Shared-Memory-Multiprocessing wurden die Befehle Synchronize Shared Memory , Load Linked Word und Store Conditional Word eingeführt. [ 28 ] Außerdem wurde ein Satz von Trap-on-Condition-Befehlen hinzugefügt. Diese Befehle lösten eine Ausnahme aus, wenn die ausgewertete Bedingung wahr war. Alle bestehenden Sprungbefehle erhielten verzweigungswahrscheinliche Versionen, die den Befehl im Sprungverzögerungs-Slot nur dann ausführten, wenn der Sprung ausgeführt wurde. [ 3 ] : 40 Diese Befehle verbessern die Leistung in bestimmten Fällen, indem sie es ermöglichen, den Sprungverzögerungs-Slot mit nützlichen Befehlen zu füllen. [ 3 ] : 212 Doppelwort-Lade- und Speicherbefehle für COP1–3 wurden hinzugefügt. Wie andere Speicherzugriffsbefehle erforderten auch diese Lade- und Speicherbefehle, dass das Doppelwort natürlich ausgerichtet war.

Der Befehlssatz des Gleitkomma-Coprozessors wurde um mehrere Befehle erweitert. So wurde ein IEEE-754-konformer Befehl zur Berechnung der Quadratwurzel in Gleitkommazahlen hinzugefügt. Dieser unterstützt sowohl einfach- als auch doppeltgenaue Operanden. Außerdem wurde ein Befehlssatz zur Konvertierung einfach- und doppeltgenauer Gleitkommazahlen in 32-Bit-Wörter ergänzt. Dieser Befehlssatz ergänzte die bestehenden Konvertierungsbefehle, indem er die Angabe des IEEE-Rundungsmodus über den Befehl selbst anstelle des Gleitkomma-Kontroll- und Statusregisters ermöglichte.

MIPS III

MIPS III ist eine abwärtskompatible Erweiterung von MIPS II, die 64-Bit -Speicheradressierung und Integer-Operationen unterstützt . Der 64-Bit-Datentyp wird als Doppelwort bezeichnet. MIPS III erweiterte die Allzweckregister, die HI/LO-Register und den Programmzähler auf 64 Bit, um diesen zu unterstützen. Neue Befehle wurden hinzugefügt, um Doppelwörter zu laden und zu speichern, Addition, Subtraktion, Multiplikation, Division und Schiebeoperationen mit Integern durchzuführen und Doppelwörter zwischen den Allzweckregistern und den HI/LO-Registern zu verschieben. Für Shared-Memory-Multiprocessing wurden die Befehle ` Load Linked Double Word` und `Store Conditional Double Word` eingeführt. [ 28 ] Bestehende Befehle, die ursprünglich für 32-Bit-Wörter definiert waren, wurden gegebenenfalls neu definiert, um die 32-Bit-Ergebnisse vorzeichenerweitert zu lassen und so die identische Behandlung von Wörtern und Doppelwörtern durch die meisten Befehle zu ermöglichen. Zu diesen neu definierten Befehlen gehörte ` Load Word` . In MIPS III erweitert dieser Befehl Wörter auf 64 Bit. Als Ergänzung zu Load Word wurde eine Version hinzugefügt, die auf Null erweitert.

Da das R-Befehlsformat die vollständige Verschiebungsdistanz für 64-Bit-Verschiebungen nicht spezifizieren konnte (sein 5-Bit-Verschiebungsbetragsfeld ist zu schmal, um die Verschiebungsdistanz für Doppelwörter festzulegen), musste MIPS III drei 64-Bit-Versionen jedes MIPS-I-Verschiebungsbefehls bereitstellen. Die erste Version ist eine 64-Bit-Version der ursprünglichen Verschiebebefehle und dient zur Angabe konstanter Verschiebungsdistanzen von 0–31 Bit. Die zweite Version ähnelt der ersten, erweitert jedoch das Verschiebungsbetragsfeld um 32 Bit , sodass konstante Verschiebungsdistanzen von 32–63 Bit angegeben werden können. Die dritte Version ermittelt die Verschiebungsdistanz aus den sechs niedrigstwertigen Bits eines GPR.

MIPS III fügte eine Supervisor- Berechtigungsebene zwischen den bestehenden Kernel- und Benutzerberechtigungsebenen hinzu. Diese Funktion betraf ausschließlich den implementierungsdefinierten Systemsteuerungsprozessor (Coprozessor 0).

MIPS III entfernte die COP3-Unterstützungsbefehle und verwendete deren Opcodes für die neuen Doppelwortbefehle. Die verbleibenden Coprozessoren erhielten Befehle zum Verschieben von Doppelwörtern zwischen Coprozessorregistern und den GPRs. Die Gleitkomma-Generalregister (FGRs) wurden auf 64 Bit erweitert, und die Vorgabe, dass Befehle nur Register mit geraden Nummern verwenden dürfen, wurde aufgehoben. Dies ist inkompatibel mit früheren Architekturversionen; ein Bit im Gleitkomma-Steuer-/Statusregister wird verwendet, um die MIPS III Gleitkommaeinheit (FPU) in einem MIPS I- und II-kompatiblen Modus zu betreiben. Die Gleitkomma-Steuerregister wurden aus Kompatibilitätsgründen nicht erweitert. Die einzigen neu hinzugefügten Gleitkommabefehle waren solche zum Kopieren von Doppelwörtern zwischen CPU und FPU sowie zum Konvertieren von einfach- und doppeltgenauen Gleitkommazahlen in Doppelwort-Ganzzahlen und umgekehrt.

MIPS IV

MIPS IV ist die vierte Version der Architektur. Sie ist eine Erweiterung von MIPS III und mit allen bestehenden MIPS-Versionen kompatibel. [ 29 ] : A-1 MIPS IV wurde hauptsächlich zur Verbesserung der Gleitkomma-Performance (FP) entwickelt. Um den Zugriff auf Operanden zu verbessern, wurde ein indizierter Adressierungsmodus (Basis + Index, beide aus GPRs) für FP-Lade- und Speicheroperationen eingeführt, ebenso wie Prefetch-Befehle zum Vorladen des Speichers und zum Festlegen von Cache-Hinweisen (diese unterstützen sowohl den Basis + Offset- als auch den Basis + Index-Adressierungsmodus).

MIPS IV führte mehrere Funktionen zur Verbesserung der Befehlsparallelität ein. Um den durch ein einzelnes Bedingungsbit verursachten Flaschenhals zu beheben, wurden dem Gleitkomma-Steuer- und Statusregister sieben Bedingungsbits hinzugefügt, sodass sich die Gesamtzahl auf acht erhöhte. Gleitkomma-Vergleichs- und Verzweigungsbefehle wurden neu definiert, sodass sie nun festlegen können, welches Bedingungsbit geschrieben bzw. gelesen wird. Die Verzögerung zwischen einer Gleitkomma-Verzweigung, die das durch einen vorherigen Gleitkomma-Vergleich beschriebene Bedingungsbit las, wurde entfernt. Die Unterstützung für partielle Prädikation wurde in Form von bedingten Verschiebebefehlen für Gleitkomma- und Gleitkomma-Statusregister hinzugefügt. Implementierungen können nun zwischen präzisen und unpräzisen Ausnahmen für IEEE-754-Traps wählen.

MIPS IV führte mehrere neue Gleitkommaarithmetikbefehle für einfach- und doppeltgenaue Gleitkommazahlen ein: kombinierte Multiplikation, Addition und Subtraktion, Kehrwert und reziproke Quadratwurzel. Die Befehle für kombinierte Multiplikation, Addition und Subtraktion führen je nach Implementierung eine oder zwei Rundungen durch, um die Genauigkeitsanforderungen von IEEE 754 zu erfüllen bzw. zu übertreffen. Die Befehle für Kehrwert und reziproke Quadratwurzel erfüllen die Genauigkeitsanforderungen von IEEE 754 nicht und liefern Ergebnisse, die um eine oder zwei Stellen von der geforderten Genauigkeit abweichen (implementierungsabhängig). Diese Befehle eignen sich für Anwendungen, bei denen die Befehlslaufzeit wichtiger ist als die Genauigkeit.

MIPS V

MIPS V führte einen neuen Datentyp ein, den Paired Single (PS), der aus zwei einfachgenauen (32-Bit) Gleitkommazahlen bestand, die in den vorhandenen 64-Bit-Gleitkommaregistern gespeichert wurden. Varianten bestehender Gleitkommabefehle für Arithmetik, Vergleiche und bedingte Verschiebungen wurden hinzugefügt, um diesen Datentyp im SIMD-Verfahren zu verarbeiten. Neue Befehle wurden zum Laden, Umordnen und Konvertieren von PS-Daten eingeführt. [ 3 ] : 426–429 Es war der erste Befehlssatz, der Gleitkomma-SIMD mit den vorhandenen Ressourcen nutzte. [ 13 ]

MIPS32/MIPS64

Die erste Version von MIPS32, basierend auf MIPS II, führte bedingte Verschiebungen, Vorabrufbefehle und weitere Funktionen der 64-Bit-Prozessorfamilien R4000 und R5000 ein. [ 15 ] Die erste Version von MIPS64 ergänzte MIPS32 um einen Modus zur Ausführung von 32-Bit-Code. [ 15 ] Die MUL- und MADD-Befehle ( Multiplikation-Addition ), die bereits in einigen Implementierungen verfügbar waren, wurden ebenso wie Cache-Control-Befehle in die Spezifikationen von MIPS32 und MIPS64 aufgenommen . [ 15 ] Für die Cache-Control wurden sowohl MUL- SYNCals auch SYNCIMADD-Befehle vorbereitet. [ 30 ] [ 31 ]

Mit MIPS32/MIPS64 Release 6 im Jahr 2014 wurde Folgendes hinzugefügt: [ 32 ]

  • eine neue Zweigfamilie ohne Verzögerungsschlitz:
    • unbedingte Verzweigungen (BC) und Verzweigungs- und Verknüpfungsverzweigungen (BALC) mit einem 26-Bit-Offset,
    • Bedingte Verzweigung bei Null/Nicht-Null mit einem 21-Bit-Offset,
    • Vollständiger Satz von vorzeichenbehafteten und vorzeichenlosen bedingten Verzweigungen, Vergleich zwischen zwei Registern (z. B. BGTUC) oder eines Registers mit Null (z. B. BGTZC).
    • vollständiger Satz von Branch-and-Link-Anweisungen, die ein Register mit Null vergleichen (z. B. BGTZALC).
  • Indexsprungbefehle ohne Verzögerungsslot, die zur Unterstützung großer absoluter Adressen ausgelegt sind.
  • Anweisungen zum Laden von 16-Bit-Immediatewerten an Bitposition 16, 32 oder 48, wodurch sich große Konstanten einfach generieren lassen.
  • PC-relative Ladebefehle sowie Adressgenerierung mit großen (PC-relativen) Offsets.
  • Bit-Umkehr- und Byte-Ausrichtungsbefehle (bisher nur mit der DSP-Erweiterung verfügbar).
  • Die Multiplikations- und Divisionsbefehle wurden so umdefiniert, dass sie ein einzelnes Register für ihr Ergebnis verwenden.
  • Die Befehle, die Wahrheitswerte erzeugen, erzeugen nun entweder nur Nullen oder nur Einsen, anstatt nur das 0-Bit zu löschen/setzen.
  • Anweisungen, die einen Wahrheitswert verwenden, interpretieren nun ausschließlich Nullen als falsch, anstatt nur das 0-Bit zu betrachten.

Selten verwendete Anweisungen wurden entfernt:

  • einige bedingte Bewegungen
  • Verzweigungsanweisungen (in früheren Versionen veraltet).
  • Anweisungen zum Abfangen von Ganzzahlüberläufen mit 16-Bit-Sofortwert
  • Befehle für Ganzzahlakkumulatoren (zusammen HI/LO-Register, verschoben in die DSP-Anwendungsspezifische Erweiterung)
  • nicht ausgerichtete Ladeanweisungen (LWL und LWR), (die voraussetzen, dass die meisten gewöhnlichen Lade- und Speicheroperationen einen nicht ausgerichteten Zugriff unterstützen, möglicherweise durch Abfangen und durch Hinzufügen einer neuen Anweisung (BALIGN))

Die Befehlskodierung wurde neu organisiert, wodurch Platz für zukünftige Erweiterungen geschaffen wurde.

microMIPS

Die microMIPS32/64-Architekturen sind Erweiterungen der MIPS32- bzw. MIPS64-Architekturen und wurden entwickelt, um die anwendungsspezifische Erweiterung (ASE) von MIPS16e zu ersetzen . Ein Nachteil von MIPS16e ist, dass vor der Verarbeitung von 16-Bit-Befehlen ein Moduswechsel erforderlich ist. microMIPS ergänzt die Architektur um Versionen der am häufigsten verwendeten 32-Bit-Befehle, die als 16-Bit-Befehle kodiert sind. Dadurch können Programme 16- und 32-Bit-Befehle mischen, ohne den Modus wechseln zu müssen. microMIPS wurde zusammen mit MIPS32/64 Release 3 eingeführt, und jede nachfolgende Version von MIPS32/64 verfügt über eine entsprechende microMIPS32/64-Version. Ein Prozessor kann microMIPS32/64 oder sowohl microMIPS32/64 als auch die entsprechende MIPS32/64-Teilmenge implementieren. Mit MIPS32/64 Release 6 wurde die Unterstützung für MIPS16e eingestellt, und microMIPS ist die einzige Form der Codekomprimierung in MIPS.

Anwendungsspezifische Erweiterungen

Die Basisarchitekturen MIPS32 und MIPS64 lassen sich durch eine Reihe optionaler Architekturerweiterungen ergänzen, die zusammenfassend als anwendungsspezifische Erweiterungen (ASEs) bezeichnet werden. Diese ASEs bieten Funktionen, die die Effizienz und Leistung bestimmter Arbeitslasten, wie beispielsweise der digitalen Signalverarbeitung , verbessern .

MIPS-Mikrocontroller

Erweiterungen für Mikrocontroller-Anwendungen. Die anwendungsspezifische Erweiterung (MCU ASE) wurde entwickelt, um die Unterstützung des Interrupt- Controllers zu erweitern, die Interrupt-Latenz zu reduzieren und die in Mikrocontroller-Systemdesigns typischerweise benötigte I/O-Peripheriesteuerungsfunktion zu verbessern.

  • Separate Prioritäts- und Vektorgenerierung
  • Unterstützt bis zu 256 Interrupts im EIC-Modus (External Interrupt Controller) und acht Hardware-Interrupt-Pins.
  • Bietet eine 16-Bit-Vektor-Offset-Adresse
  • Vorabrufen des Interrupt-Ausnahmevektors
  • Automatisierter Interrupt-Prolog – fügt Hardware hinzu, um den Systemstatus vor der Interrupt-Behandlungsroutine zu speichern und zu aktualisieren
  • Automatisierter Interrupt-Epilog – stellt den Systemzustand wieder her, der zuvor im Stack gespeichert wurde, bevor der Interrupt beendet wurde.
  • Interrupt-Verkettung – unterstützt die Bearbeitung anstehender Interrupts, ohne dass die ursprüngliche Interrupt-Routine verlassen werden muss, wodurch die zum Speichern und Wiederherstellen mehrerer aktiver Interrupts erforderlichen Zyklen eingespart werden.
  • Unterstützt das spekulative Vorabrufen der Interruptvektoradresse. Reduziert die Anzahl der Interrupt-Servicezyklen durch Überlappung von Speicherzugriffen mit Pipeline-Flushes und Ausnahmepriorisierung.
  • Beinhaltet atomare Bit-Setz-/Löschbefehle, die es ermöglichen, Bits innerhalb eines E/A-Registers, die normalerweise zur Überwachung oder Steuerung externer Peripheriefunktionen verwendet werden, ohne Unterbrechung zu ändern und so sicherzustellen, dass die Aktion sicher durchgeführt wird.

MIPS16

MIPS16 ist eine anwendungsspezifische Erweiterung für MIPS I bis V, entwickelt von LSI Logic und MIPS Technologies . Sie wurde am 21. Oktober 1996 zusammen mit ihrer ersten Implementierung, dem LSI Logic TinyRISC-Prozessor, angekündigt. [ 33 ] MIPS16 wurde anschließend unter anderem von NEC Electronics , Philips Semiconductors und Toshiba lizenziert und als Erweiterung der MIPS-I-, -II- und -III-Architekturen implementiert. Durch die Verwendung von 16-Bit- statt 32-Bit-Befehlen reduziert MIPS16 die Anwendungsgröße um bis zu 40 % und verbessert zudem die Energieeffizienz und die Cache-Trefferrate. Die Leistung entspricht der der Basisarchitektur. [ 34 ] Hardware- und Software-Entwicklungswerkzeuge werden von MIPS Technologies und anderen Anbietern bereitgestellt. MIPS16e ist eine verbesserte Version von MIPS16, die erstmals von MIPS32 und MIPS64 Release 1 unterstützt wurde. MIPS16e2 ist eine weitere verbesserte Version von MIPS16, die von MIPS32 und MIPS64 (bis einschließlich Release 5) unterstützt wird. Mit Release 6 wurde sie durch microMIPS ersetzt.

MIPS Digitale Signalverarbeitung (DSP)

Die DSP ASE ist eine optionale Erweiterung der Befehlssätze MIPS32/MIPS64 Release 2 und neueren Versionen. Sie beschleunigt eine Vielzahl von Medienberechnungen, insbesondere Audio- und Videoverarbeitung. Das DSP-Modul besteht aus einem Befehlssatz und einem Zustand in der Integer-Pipeline und benötigt nur minimale zusätzliche Logik zur Implementierung in MIPS-Prozessorkernen. Revision 2 der ASE wurde in der zweiten Jahreshälfte 2006 eingeführt. Diese Revision erweitert die ursprüngliche ASE um zusätzliche Befehle, ist aber ansonsten abwärtskompatibel. [ 35 ] Im Gegensatz zum Großteil der MIPS-Architektur handelt es sich um einen relativ unregelmäßigen Satz von Operationen, von denen viele aufgrund ihrer Relevanz für bestimmte Schlüsselalgorithmen ausgewählt wurden. Die wichtigsten Neuerungen (gegenüber dem ursprünglichen MIPS32): [ 36 ]

  • Sättigende Arithmetik (wenn eine Berechnung einen Überlauf verursacht, wird die darstellbare Zahl ausgegeben, die dem Ergebnis ohne Überlauf am nächsten liegt).
  • Festkommaarithmetik auf vorzeichenbehafteten 32-Bit- und 16-Bit-Festkommazahlen mit einem Bereich von -1 bis +1 (diese werden allgemein als „Q31“ und „Q15“ bezeichnet).
  • Die bestehenden Befehle zur Ganzzahlmultiplikation und Multiplikations-Akkumulation speichern die Ergebnisse in einem Akkumulator doppelter Größe (bei MIPS32-CPUs „hi/lo“ genannt, 64 Bit). Die DSP ASE fügt drei weitere Akkumulatoren und verschiedene Varianten der Multiplikations-Akkumulation hinzu.
  • SIMD -Befehle, die auf 4 x vorzeichenlosen Bytes oder 2 x 16-Bit-Werten arbeiten, die in ein 32-Bit-Register gepackt sind (die 64-Bit-Variante des DSP ASE unterstützt auch größere Vektoren).
  • SIMD-Operationen umfassen die grundlegende Arithmetik, Verschiebungen und einige Multiplikations-Akkumulations-Operationen.

MIPS SIMD-Architektur (MSA)

Befehlssatzerweiterungen zur Beschleunigung von Multimedia-Anwendungen.

  • Vordefinierte skalierbare Erweiterungen für Chips mit mehr Gattern/Transistoren
  • 32 Vektorregister mit 16 x 8-Bit-, 8 x 16-Bit-, 4 x 32-Bit- und 2 x 64-Bit-Vektorelementen, alle 128 Bit breit
  • Beinhaltet Operationen für:
    • Effiziente Vektorarithmetik für Ganzzahl-, Festkomma- und Gleitkommazahlen mit vollständigen Rundungs- und Sättigungsoptionen
    • Absolutwerte in Vektoren erzeugen
    • Multiplikation mit voller Genauigkeit und kombinierte Multiplikation und Addition
    • Konvertierungen zwischen Ganzzahl-, Gleitkomma- und Festkommadaten
    • Vergleich und Verzweigung auf Vektorebene ohne Bedingungsflags
    • Vektor- (1D) und Array- (2D) Mischen
    • Typisierte Lasten und Speicher für endian -unabhängigen Betrieb
  • IEEE 754-2008 -konform
  • Elementgenaue Gleitkomma-Ausnahmesignalisierung
  • Beschleunigt rechenintensive Anwendungen durch die Nutzung generischer Compilerunterstützung
  • Entwickelt als softwareprogrammierbare Lösung für Anwendungen oder Funktionen der Unterhaltungselektronik, die nicht von dedizierter Hardware abgedeckt werden.
  • Entwickelt für aufstrebende Bereiche wie Data Mining, Merkmalsextraktion , Multimediaverarbeitung, GUIs und wissenschaftliches Hochleistungsrechnen.

MIPS-Virtualisierung

Mit MIPS Revision 6 wurde die native Virtualisierung durch Hardwareunterstützung hinzugefügt.

MIPS-Multithreading

Jeder Multithread-fähige MIPS-Kern unterstützt bis zu zwei VPEs (Virtual Processing Elements), die sich eine Pipeline und weitere Hardware-Ressourcen teilen. Da jedes VPE jedoch eine vollständige Kopie des vom Softwaresystem erfassten Prozessorzustands enthält, erscheint jedes VPE einem SMP- Linux-Betriebssystem als eigenständiger Prozessor. Für Anwendungen mit feinerer Thread-Verarbeitung kann jedes VPE bis zu neun Thread-Kerne (TCs) unterstützen, die auf zwei VPEs verteilt sind. Die TCs nutzen eine gemeinsame Ausführungseinheit, verfügen aber jeweils über einen eigenen Programmzähler und eigene Kernregisterdateien, sodass jeder TC einen Thread der Software verarbeiten kann. Die MIPS-MT-Architektur ermöglicht zudem die Zuweisung von Prozessorzyklen an Threads und die Festlegung der relativen Thread-Prioritäten mithilfe eines optionalen QoS- Managers (Quality of Service ). Dies ermöglicht zwei Priorisierungsmechanismen, die den Informationsfluss über den Bus bestimmen. Der erste Mechanismus erlaubt die Priorisierung einzelner Threads. Der zweite Mechanismus weist bestimmten Threads im Zeitverlauf ein festgelegtes Verhältnis der Zyklen zu. Die kombinierte Nutzung beider Mechanismen ermöglicht eine effektive Bandbreitenzuweisung an die Threads und eine bessere Latenzkontrolle. In Echtzeitsystemen ist die Systemdeterministik von entscheidender Bedeutung, und der QoS-Block trägt zur Verbesserung der Vorhersagbarkeit eines Systems bei. Hardwareentwickler fortschrittlicher Systeme können den von MIPS Technologies bereitgestellten Standard-QoS-Block durch einen speziell auf ihre Anwendung abgestimmten Block ersetzen.

SmartMIPS

SmartMIPS ist eine anwendungsspezifische Erweiterung (ASE), die von Gemplus International und MIPS Technologies entwickelt wurde, um die Leistung von Smartcard- Software zu verbessern und den Speicherverbrauch zu reduzieren . Sie wird ausschließlich von MIPS32 unterstützt, da Smartcards die Funktionen von MIPS64-Prozessoren nicht benötigen. Nur wenige Smartcards nutzen SmartMIPS.

Multimedia-Anwendungsbeschleunigungen, die in den 1990er Jahren auf RISC- und CISC-Systemen üblich waren.

MIPS-3D

MIPS-3D ist eine Erweiterung von MIPS V, die 13 neue Befehle zur Leistungssteigerung von 3D-Grafikanwendungen hinzufügte. [ 37 ] Die Befehle verbesserten die Leistung, indem sie die Anzahl der für die Implementierung von vier gängigen 3D-Grafikoperationen benötigten Befehle reduzierten: Vertex-Transformation, Clipping , Transformation und Beleuchtung.

Für die Vertex-Transformation:

  • ADRESSE

Zum Beschneiden:

  • Taxis
  • BC1ANY2F
  • BC1ANY2T
  • BC1ANY4F
  • BC1ANY4T

Zur Perspektiventeilung und Normalisierung:

  • REZEPT1
  • RECIP2
  • RSQRT1
  • RSQRT2

Anrufungskonventionen

MIPS verfügte über mehrere Aufrufkonventionen, insbesondere auf der 32-Bit-Plattform.

Die O32-ABI ist die am häufigsten verwendete ABI, da sie die ursprüngliche System-V- ABI für MIPS war. [ 38 ] [ 39 ] Sie ist strikt stackbasiert und verwendet nur vier Register ( $a0 - $a3 ) zur Übergabe von Argumenten. Speicherplatz auf dem Stack ist reserviert, falls die aufgerufene Funktion ihre Argumente speichern muss; die Register selbst werden jedoch nicht vom Aufrufer dort abgelegt. Der Rückgabewert wird im Register $v0 gespeichert ; ein zweiter Rückgabewert kann in $v1 gespeichert werden . Die ABI entstand 1990 und wurde zuletzt 1994 aktualisiert. Diese als langsam empfundene Vorgehensweise, zusammen mit einem veralteten Gleitkomma-Modell mit nur 16 Registern, hat die Verbreitung vieler anderer Aufrufkonventionen begünstigt. Sie ist nur für 32-Bit-MIPS definiert, aber GCC hat eine 64-Bit-Variante namens O64 entwickelt. [ 40 ]

Für 64-Bit-Systeme wird am häufigsten die N64-ABI von Silicon Graphics verwendet. Die wichtigste Verbesserung besteht darin, dass nun acht Register für die Argumentübergabe zur Verfügung stehen; außerdem erhöht sich die Anzahl der Gleitkomma-Register auf 32. Es gibt auch eine ILP32- Version namens N32, die analog zur x32-ABI 32-Bit-Zeiger für kleineren Code verwendet . Beide laufen im 64-Bit-Modus der CPU. [ 40 ] Die N32- und N64-ABIs übergeben die ersten acht Argumente einer Funktion in den Registern $a0– $ a7 ; nachfolgende Argumente werden auf dem Stack übergeben. Der Rückgabewert (oder ein Zeiger darauf) wird in $v0 gespeichert ; ein zweiter Rückgabewert kann in $v1 gespeichert werden . Sowohl in der N32- als auch in der N64-ABI werden alle Register als 64 Bit breit betrachtet.

Es gab einige Versuche, O32 durch eine 32-Bit-ABI zu ersetzen, die eher N32 als O32 ähnelt. Auf einer Konferenz im Jahr 1995 wurde MIPS EABI vorgestellt, dessen 32-Bit-Version sehr ähnlich war. [ 41 ] EABI inspirierte MIPS Technologies zur Entwicklung einer radikaleren „NUBI“-ABI, die zusätzlich Argumentregister für den Rückgabewert wiederverwendet. [ 42 ] MIPS EABI wird von GCC, aber nicht von LLVM unterstützt, und LLVM unterstützt auch NUBI nicht.

Bei allen O32- und N32/N64-Architekturen wird die Rücksprungadresse in $ra ( $31 ) gespeichert. Dies geschieht automatisch mit den Befehlen JAL (Jump and Link) oder JALR (Jump and Link Register). Der Funktionsprolog einer (nicht-Blatt-)MIPS-Subroutine legt die Rücksprungadresse (in $ra ) auf den Stack. [ 43 ] [ 44 ]

Sowohl auf O32 als auch auf N32/N64 wächst der Stack nach unten, aber die N32/N64-ABIs erfordern eine 64-Bit-Ausrichtung für alle Stackeinträge. Der Frame-Pointer ( $30 ) ist optional und wird in der Praxis selten verwendet, außer wenn die Stack-Allokation in einer Funktion zur Laufzeit bestimmt wird, beispielsweise durch einen Aufruf von . alloca()

Bei N32 und N64 wird die Rücksprungadresse typischerweise 8 Bytes vor dem Stackpointer gespeichert , wobei dies optional sein kann.

Bei den N32- und N64-ABIs muss eine Funktion die Register $s0 bis $s7 , den globalen Zeiger ( $gp oder $28 ), den Stack-Zeiger ( $sp oder $29 ) und den Frame-Zeiger ( $fp oder $30 ) erhalten. Die O32-ABI verhält sich analog, mit der Ausnahme, dass die aufrufende Funktion das Register $gp sichern muss .

Bei Multithread-Code wird der Thread-lokale Speicherzeiger typischerweise im speziellen Hardware-Register $29 gespeichert und mit dem Befehl mfhw (Move from Hardware) aufgerufen. Mindestens ein Hersteller speichert diese Information im Register $k0 , das normalerweise für den Kernel reserviert ist; dies ist jedoch nicht Standard.

Die Register $k0 und $k1 ( $26 , $27 ) sind für die Verwendung durch den Kernel reserviert und sollten nicht von Anwendungen verwendet werden, da diese Register vom Kernel jederzeit aufgrund von Interrupts, Kontextwechseln oder anderen Ereignissen geändert werden können.

Registriert sich für die O32-Anrufkonvention
NameNummerVerwendenWas muss Callee bewahren?
Null0 €Konstante 0N / A
$at1 US-Dollartemporärer MonteurNEIN
$v0 – $v12 bis 3 US-DollarWerte für Funktionsrückgaben und Auswertung von AusdrückenNEIN
$a0 – $a34 bis 7 US-DollarFunktionsargumenteNEIN
$t0 – $t78 bis 15 US-DollartemporäreNEIN
0 bis 7 US-Dollar16 bis 23 US-Dollargespeicherte temporäre DateienJa
$t8 – $t924 – 25 US-DollartemporäreNEIN
$k0 – $k126 – 27 US-Dollarreserviert für den BetriebssystemkernelN / A
$gp28 $globaler ZeigerJa (außer PIC-Code)
$sp29 $StapelzeigerJa
$fp30 US-DollarRahmenzeigerJa
$ra31 US-DollarAbsenderadresseN / A
Register für N32- und N64-Anrufkonventionen [ 45 ]
NameNummerVerwendenWas muss Callee bewahren?
Null0 €Konstante 0N / A
$at1 US-Dollartemporärer MonteurNEIN
$v0 – $v12 bis 3 US-DollarWerte für Funktionsrückgaben und Auswertung von AusdrückenNEIN
$a0 – $a74 bis 11 US-DollarFunktionsargumenteNEIN
$t4 – $t712 bis 15 DollartemporäreNEIN
0 bis 7 US-Dollar16 bis 23 US-Dollargespeicherte temporäre DateienJa
$t8 – $t924 – 25 US-DollartemporäreNEIN
$k0 – $k126 – 27 US-Dollarreserviert für den BetriebssystemkernelN / A
$gp28 $globaler ZeigerJa
$sp29 $StapelzeigerJa
8 US-Dollar30 US-DollarRahmenzeigerJa
$ra31 US-DollarAbsenderadresseN / A

Register, die über einen Aufruf hinweg erhalten bleiben, sind Register, die (konventionsgemäß) durch einen System- oder Funktionsaufruf nicht verändert werden. Beispielsweise müssen $s -Register von einer Prozedur, die sie benötigt, auf dem Stack gespeichert werden, und $sp und $fp werden stets mit Konstanten inkrementiert und nach Beendigung der Prozedur (und der Verwendung des zugehörigen Speichers) wieder dekrementiert. Im Gegensatz dazu wird $ra durch jeden normalen Funktionsaufruf (mit `jal` ) automatisch geändert, und $t -Register müssen vom Programm vor jedem Prozeduraufruf gespeichert werden (falls die darin enthaltenen Werte nach dem Aufruf benötigt werden).

Die Aufrufkonvention für positionsunabhängigen Code im Benutzermodus unter Linux erfordert zusätzlich, dass beim Aufruf einer Funktion das Register $t9 die Adresse dieser Funktion enthalten muss. [ 46 ] Diese Konvention geht auf die System-V-ABI-Ergänzung für MIPS zurück. [ 47 ]

Verwendung

MIPS-Prozessoren werden in eingebetteten Systemen wie Heimnetzwerk-Gateways und Routern eingesetzt . Ursprünglich war MIPS für allgemeine Computeranwendungen konzipiert. In den 1980er- und 1990er-Jahren wurden MIPS-Prozessoren für PCs , Workstations und Server von zahlreichen Unternehmen wie Digital Equipment Corporation , MIPS Computer Systems , NEC , Pyramid Technology , SiCortex , Siemens Nixdorf , Silicon Graphics und Tandem Computers verwendet .

Historisch gesehen verwendeten Videospielkonsolen wie Nintendo 64 , Sony PlayStation , PlayStation 2 und PlayStation Portable MIPS-Prozessoren. In den 1990er-Jahren waren MIPS-Prozessoren auch in Supercomputern weit verbreitet, doch diese Systeme sind mittlerweile nicht mehr in der TOP500- Liste vertreten. Anfangs wurden diese Anwendungen durch eingebettete Systeme ergänzt, doch in den 1990er-Jahren etablierte sich MIPS als wichtiger Marktteilnehmer für eingebettete Prozessoren, und in den 2000er-Jahren wurden die meisten MIPS-Prozessoren für diese Anwendungen eingesetzt.

Mitte bis Ende der 1990er Jahre wurde geschätzt, dass jeder dritte produzierte RISC-Mikroprozessor ein MIPS-Prozessor war. [ 48 ]

Ende der 2010er-Jahre waren MIPS-Rechner in eingebetteten Systemen noch weit verbreitet, unter anderem in der Automobilindustrie, bei WLAN-Routern, LTE-Modems (hauptsächlich von MediaTek ) und Mikrocontrollern (z. B. dem Microchip Technology PIC32M ). Im Bereich der persönlichen Endgeräte, Server und Anwendungen sind sie weitgehend verschwunden.

Simulatoren

Open Virtual Platforms (OVP) [ 49 ] umfasst den für nichtkommerzielle Zwecke frei verfügbaren Simulator OVPsim , eine Bibliothek mit Prozessor-, Peripherie- und Plattformmodellen sowie APIs zur Entwicklung eigener Modelle. Die Modelle der Bibliothek sind Open Source, in C geschrieben und beinhalten die 32-Bit-Kerne MIPS 4K, 24K, 34K, 74K, 1004K, 1074K, M14K, microAptiv, interAptiv und proAptiv sowie die 64-Bit-Kerne der MIPS-5K-Reihe. Diese Modelle werden von Imperas [ 50 ] erstellt und gepflegt und in Zusammenarbeit mit MIPS Technologies getestet und mit dem MIPS-Verified-Siegel ausgezeichnet. Zu den MIPS-basierten Plattformen gehören sowohl Bare-Metal-Umgebungen als auch Plattformen zum Booten unveränderter Linux-Binärdateien. Diese Plattformen – Emulatoren – sind als Quellcode oder Binärdateien verfügbar, schnell, für nichtkommerzielle Zwecke kostenlos und benutzerfreundlich. OVPsim wird von Imperas entwickelt und gepflegt und ist sehr schnell (Hunderte von Millionen Befehlen pro Sekunde) und wurde für die Verarbeitung von homogenen und heterogenen Mehrkernarchitekturen und -systemen entwickelt.

SPIM ist ein frei verfügbarer MIPS32-Simulator für den Einsatz im Bildungsbereich. Die neueste Version heißt QtSpim und verwendet das Qt UI-Framework . [ 51 ]

EduMIPS64 ist ein unter der GPL lizenzierter, grafischer, plattformübergreifender MIPS64-CPU-Simulator, der in Java/Swing geschrieben wurde. Er entstand als Portierung von WinMIPS64, einem anderen MIPS64-Simulator, und unterstützt eine breite Teilmenge der MIPS64-ISA. Er ermöglicht dem Benutzer, grafisch zu verfolgen, was in der Pipeline passiert, wenn ein Assemblerprogramm ausgeführt wird. [ 52 ]

MARS [ 53 ] ist ein weiterer GUI-basierter MIPS-Emulator, der für den Einsatz im Bildungsbereich, insbesondere mit Hennessys „ Computer Organization and Design“ , entwickelt wurde . Er wird nicht mehr weiterentwickelt.

Saturn [ 54 ] ist eine GUI-basierte MIPS-IDE mit einem Assembler namens Titan [ 55 ] . Sie entstand als Projekt eines Studenten der Universität Toronto als Ersatz für MARS, das nicht mehr weiterentwickelt wird. [ 56 ] Saturn wird heute in Lehrveranstaltungen an der Universität Toronto eingesetzt und von Studierenden und Dozenten gepflegt.

WebMIPS [ 57 ] ist ein browserbasierter MIPS-Simulator mit visueller Darstellung eines generischen, pipelined Prozessors. Dieser Simulator ist sehr nützlich für die Registerverfolgung während der schrittweisen Ausführung.

QtMips bietet eine einfache Visualisierung einer 5-stufigen Pipeline sowie des Cache-Prinzips für Kurse zu grundlegenden Rechnerarchitekturen. [ 58 ] [ 59 ] [ 60 ] Es ist sowohl als Webanwendung als auch als herunterladbares Programm für Windows, Linux und macOS verfügbar .

Erweiterte, kostenlose Emulatoren sind von den Projekten GXemul (ehemals mips64emul) und QEMU erhältlich . Sie emulieren die verschiedenen MIPS-III- und MIPS-IV-Mikroprozessoren sowie ganze Computersysteme, die diese verwenden.

Für den Einsatz von MIPS-Prozessoren in eingebetteten Systemen sind kommerzielle Simulatoren erhältlich, beispielsweise von Wind River Simics (MIPS 4Kc und 5Kc, PMC RM9000, QED RM7000, Broadcom/Netlogic ec4400, Cavium Octeon I), Imperas (alle MIPS32- und MIPS64-Kerne), VaST Systems (R3000, R4000) und CoWare (MIPS4KE, MIPS24K, MIPS25Kf und MIPS34K).

Der CREATOR-Simulator [ 61 ] [ 62 ] [ 63 ] [ 64 ] [ 65 ] ist portabel und ermöglicht es dem Benutzer, verschiedene Assemblersprachen unterschiedlicher Prozessoren zu erlernen. Creator enthält Beispiele mit einer Implementierung von MIPS32- und RISC-V-Befehlen.

WepSIM [ 66 ] ist ein browserbasierter Simulator, in dem eine Teilmenge der MIPS-Befehle mikroprogrammiert wird. Dieser Simulator ist sehr nützlich, um zu lernen, wie eine CPU auf Mikroprogrammierebene , auf MIPS-Assemblerebene , mit Interrupts usw. funktioniert.

Siehe auch

Referenzen

  1. ^ Patterson, David (2014). Computerorganisation und -design (PDF) . Elsevier. S. 4.16–4. ISBN 978-0-12-407726-3Archiviert ( PDF) vom Original am 4. September 2019. Abgerufen am 28. November 2018 .
  2. ^ a b Price, Charles (September 1995). MIPS IV Instruction Set (Revision 3.2), MIPS Technologies, Inc.
  3. ^ a b c d e f g h Sweetman, Dominic (1999). Siehe MIPS Run . Morgan Kaufmann Publishers, Inc. ISBN 1-55860-410-3Die
  4. ^ „MIPS32-Architektur“ . MIPS . Archiviert vom Original am 21. März 2020. Abgerufen am 20. März 2020 .
  5. ^ „MIPS64-Architektur“ . MIPS . Archiviert vom Original am 2. Februar 2020. Abgerufen am 20. März 2020 .
  6. ^ „MIPS-3D ASE“ . Imagination Technologies . Archiviert vom Original am 3. Januar 2014. Abgerufen am 4. Januar 2014 .
  7. ^ „MIPS16e“ . MIPS . Archiviert vom Original am 16. Januar 2021. Abgerufen am 20. März 2020 .
  8. ^ „MIPS Multithreading“ . MIPS . Archiviert vom Original am 26. Oktober 2020. Abgerufen am 20. März 2020 .
  9. ^ University of California, Davis. „ECS 142 (Compiler) Referenzen & Tools Seite“ . Archiviert vom Original am 21. März 2011. Abgerufen am 28. Mai 2009 .
  10. ^ a b Turley, Jim (8. März 2021). „Moment mal, was? MIPS wird zu RISC-V“ . Electronic Engineering Journal . Archiviert vom Original am 21. März 2021. Abgerufen am 28. März 2021 .
  11. ^ „Der MIPS-Prozessor“ . www.d.umn.edu . Archiviert vom Original am 17. Mai 2023. Abgerufen am 17. Mai 2023 .
  12. ^ „Silicon Graphics stellt verbesserte MIPS-Architektur vor, um die interaktive digitale Revolution anzuführen“ (Pressemitteilung). Silicon Graphics, Inc., 21. Oktober 1996. Archiviert vom Original am 6. Juni 1997.
  13. ^ a b Gwennap, Linley (18. November 1996). „Digital, MIPS Add Multimedia Extensions“ (PDF) . Microprocessor Report . 10 (15): 24–28 . Archiviert (PDF) vom Original am 20. Juli 2011.
  14. ^ „Silicon Graphics stellt neue Roadmap für Hochleistungs-MIPS-Mikroprozessoren vor“ (Pressemitteilung). 12. Mai 1997.
  15. ^ a b c d e „MIPS Technologies, Inc. erweitert Architektur zur Unterstützung des wachsenden Bedarfs an IP-Wiederverwendung und -Integration“ (Pressemitteilung). Business Wire . 3. Mai 1999. Archiviert vom Original am 1. Dezember 2018. Abgerufen am 11. Februar 2016 .
  16. ^ „Neueste Version der MIPS-Architektur mit Virtualisierungs- und SIMD-Schlüsselfunktionen für die nächste Generation von MIPS-basierten Produkten“ (Pressemitteilung). MIPS Technologies . 6. Dezember 2012. Archiviert vom Original am 13. Dezember 2012.
  17. ^ „MIPS überspringt Release 4 aufgrund eines Bieterwettbewerbs“ . EE Times . 10. Dezember 2012.{{cite magazine}}CS1-Wartung: Veralteter Archivierungsdienst ( Link )
  18. ^ „Wave Computing baut KI-Vorsprung durch Übernahme von MIPS und Fokussierung auf Edge-of-Cloud-Lösungen aus“ . 15. Juni 2018. Archiviert vom Original am 25. November 2020. Abgerufen am 19. Dezember 2018 .
  19. ^ „Wave Computing® startet die MIPS Open Initiative zur Beschleunigung von Innovationen für die renommierte MIPS®-Architektur“ . WAVE Computing . 17. Dezember 2018. Archiviert vom Original am 28. Juli 2021. Abgerufen am 19. Dezember 2018 .
  20. ^ „MIPS-Prozessor-ISA wird 2019 als Open Source veröffentlicht – Phoronix“ . Archiviert vom Original am 6. März 2021. Abgerufen am 18. Dezember 2018 .
  21. ^ Yoshida, Junko (17. Dezember 2018). „MIPS Goes Open Source“ . EE Times . Archiviert vom Original am 5. Juli 2022. Abgerufen am 18. Juli 2022 .
  22. ^ „MIPS R6-Architektur jetzt zur freien Nutzung verfügbar“ . 28. März 2019. Archiviert vom Original am 4. August 2020. Abgerufen am 16. Dezember 2019 .
  23. ^ „Wave Computing beendet seine MIPS Open Initiative mit sofortiger Wirkung und ohne Vorwarnung“ . 15. November 2019. Archiviert vom Original am 7. März 2021. Abgerufen am 16. Dezember 2019 .
  24. ^ „Wave Computing und MIPS überstehen das Insolvenzverfahren nach Chapter 11“ (Pressemitteilung). 1. März 2021. Archiviert vom Original am 13. Mai 2021. Abgerufen am 11. März 2021 .
  25. ^ Shilov, Anton (25. August 2021). „Loongson greift MIPS auf: Verwendet alten Code für neue CPUs“ . Tom's Hardware . Archiviert vom Original am 25. Januar 2022. Abgerufen am 1. Dezember 2021 .
  26. ^ Connatser, Matthew (19. Januar 2024). „Chinesischer Chiphersteller Loongson gewinnt Rechtsstreit um die Rechte an der MIPS-Architektur – die neue CPU-Architektur des Unternehmens ähnelt stark der bestehenden MIPS-Architektur“ . Tom's Hardware . Archiviert vom Original am 19. Januar 2024. Abgerufen am 19. Januar 2024 .
  27. ^ Harris, David Money; Harris, Sarah L. (2013). „Architektur“. Digital Design and Computer Architecture . Elsevier. S.  294–369 . doi : 10.1016/b978-0-12-394424-5.00006-9 . ISBN 9780123944245R -Typ ist die Abkürzung für Registertyp. R-Typ-Befehle verwenden drei Register als Operanden: zwei als Quellen und eines als Ziel.
  28. ^ a b „Anwendungshinweis MIPS R4000 Synchronisationsprimitive“ (PDF) . S. 5. Archiviert (PDF) vom Original am 27. Dezember 2023. Abgerufen am 27. Dezember 2023 .
  29. ^ MIPS IV Befehlssatz (PDF) (Revision 3.2). MIPS Technologies . September 1995. Archiviert (PDF) vom Original am 27. November 2022. Abgerufen am 24. August 2022 .
  30. ^ „MIPS-Befehlssatz R5“ (PDF) . S. 59–62. Archiviert (PDF) vom Original am 15. Dezember 2023. Abgerufen am 15. Dezember 2023 .
  31. ^ „MIPS® Coherence Protocol Specification, Revision 01.01“ (PDF) . S. 26, 25, 57. Archiviert (PDF) vom Original am 4. September 2018. Abgerufen am 15. Dezember 2023 .
  32. ^ „MIPS – Marktführende RISC-CPU-IP-Prozessorlösungen“ . imgtec.com . Archiviert vom Original am 9. März 2016. Abgerufen am 11. Februar 2016 .
  33. ^ „Silicon Graphics stellt kompakten MIPS-RISC-Mikroprozessorcode für hohe Leistung zu niedrigen Kosten vor“ (Pressemitteilung). 21. Oktober 1996.
  34. ^ Sweetman, Dominic (2007). Siehe MIPS Run (2. Aufl.). San Francisco, Kalifornien: Morgan Kaufmann Publishers. S.  425–427 . ISBN 978-0-12-088421-6Die
  35. ^ „Verwendung der GNU Compiler Collection (GCC): MIPS DSP Built-in Functions“ . gcc.gnu.org . Archiviert vom Original am 20. April 2017.
  36. ^ „Befehlssatzarchitektur – LinuxMIPS“ . www.linux-mips.org . Archiviert vom Original am 20. April 2017.
  37. ^ Thekkath, Radhika et al. (1999) " Eine Architekturerweiterung für die effiziente Geometrieverarbeitung ". Hot Chips Symposium .
  38. ^ Sweetman, Dominic (2007). Siehe MIPS Run, 2. Auflage . Morgan Kaufmann. ISBN 978-0-12088-421-6Die
  39. ^ „MIPS32 Instruction Set Quick Reference“ . Archiviert (PDF) vom Original am 25. Januar 2022. Abgerufen am 17. August 2020 .
  40. ^ a b „MIPS ABI History“ . Archiviert vom Original am 26. August 2018.
  41. ^ Eric Christopher (11. Juni 2003). „mips eabi documentation“ . binutils@sources.redhat.com (Mailingliste). Archiviert vom Original am 7. Mai 2020. Abgerufen am 19. Juni 2020 .
  42. ^ „NUBI“ . Archiviert vom Original am 29. Juli 2021. Abgerufen am 17. August 2020 .
  43. ^ Karen Miller (2006). „Die MIPS-Registernutzungskonventionen“ . Archiviert vom Original am 25. Oktober 2020.
  44. ^ Hal Perkins (2006). „MIPS Calling Convention“ (PDF) . Archiviert (PDF) vom Original am 30. September 2020.
  45. ^ MIPSpro N32 ABI-Handbuch (PDF) . Silicon Graphics . Archiviert vom Original (PDF) am 17. Dezember 2021. Abgerufen am 17. August 2020 .
  46. ^ „PIC-Code – LinuxMIPS“ . www.linux-mips.org . Archiviert vom Original am 21. September 2018. Abgerufen am 21. September 2018 .
  47. ^ „System V Application Binary Interface MIPS RISC Processor Supplement, 3rd Edition“ (PDF) . S.  3–12 . Archiviert (PDF) vom Original am 12. November 2020. Abgerufen am 17. August 2020 .
  48. ^ Rubio, Victor P. „Eine FPGA-Implementierung eines MIPS-RISC-Prozessors für die Ausbildung in Rechnerarchitektur“ (PDF) . New Mexico State University . Archiviert (PDF) vom Original am 15. April 2012. Abgerufen am 22. Dezember 2011 .
  49. ^ „OVP: Schnelle Simulation, kostenlose Open-Source-Modelle. Virtuelle Plattformen für die Softwareentwicklung“ . Ovpworld.org. Archiviert vom Original am 8. Juni 2012. Abgerufen am 30. Mai 2012 .
  50. ^ „Imperas“ . Imperas. 3. März 2008. Archiviert vom Original am 14. Juni 2012. Abgerufen am 30. Mai 2012 .
  51. ^ "Spim-Simulator-Website" .
  52. ^ „EduMIPS64“ . Edumips.org. Archiviert vom Original am 7. Mai 2012. Abgerufen am 30. Mai 2012 .
  53. ^ „MARS MIPS Assembler und Laufzeitsimulator“ . Computerscience.missouristate.edu. Archiviert vom Original am 16. November 2025. Abgerufen am 16. November 2025 .
  54. ^ Whatley, Taylor (16. November 2025), 1whatleytay/saturn , GitHub , abgerufen am 16. November 2025
  55. ^ Whatley, Taylor (9. April 2025), 1whatleytay/titan , GitHub , abgerufen am 16. November 2025
  56. ^ Badr, Mario (23. März 2023). „Saturn (und Titan)“ . Mario Badrs Website . Abgerufen am 16. November 2025 .
  57. ^ „WebMIPS – MIPS CPU PIPLINED SIMULATION On Line“ . Abgerufen am 13. Januar 2012 .{{cite web}}CS1-Wartung: Veralteter Archivierungsdienst ( Link )(Online-Demonstration) „Archivierte Kopie“ . Archiviert vom Original am 10. Oktober 2011. Abgerufen am 13. Januar 2012 .{{cite web}}: CS1 Wartung: Archivierte Kopie als Titel ( Link )(Quelle)
  58. ^ QtMips – MIPS-CPU-Simulator für Bildungszwecke auf GitHub
  59. ^ Kočí, Karel (2018). Grafischer CPU-Simulator mit Cache-Visualisierung (PDF) (MSc). Tschechische Technische Universität Prag . Archiviert (PDF) vom Original am 19. November 2020. Abgerufen am 25. Januar 2021 .
  60. ^ Gizopoulos, Dimitris (6. Dezember 2020). „Die Grundlagen von QtMips-v3“ (PDF) . Nationale und Kapodistrische Universität Athen . Abgerufen am 25. Januar 2021 .
  61. ^ Camarmas-Alonso, Diego; Garcia-Carballeira, Felix; Del-Pozo-Punal, Elias; Mateos, Alejandro Calderon (29. Mai 2024). „CREATOR: Eine bildungsintegrierte Entwicklungsumgebung für die RISC-V-Programmierung“ . IEEE-Zugriff . 12 : 127702–127717 . Bibcode : 2024IEEEA..12l7702C . doi : 10.1109/ACCESS.2024.3406935 . ISSN 2169-3536 . 
  62. ^ Camarmas-Alonso, Diego; Garcia-Carballeira, Felix; Del-Pozo-Puñal, Elias; Mateos, Alejandro Calderon (23. Juli 2021). „ERSTELLER: Simulador didáctico y genérico para la programación en ensamblador“ (auf Spanisch). doi : 10.5281/zenodo.5130302 . Archiviert vom Original am 29. September 2021 . Abgerufen am 29. September 2021 .
  63. ^ Camarmas-Alonso, Diego; Garcia-Carballeira, Felix; Del-Pozo-Punal, Elias; Mateos, Alejandro Calderon (2. August 2022). Ein neuer generischer Simulator für die Lehre der Assemblerprogrammierung . 2021 XLVII Latin American Computing Conference (CLEI) (in Spanisch). S.  1–9 . doi : 10.1109/CLEI53233.2021.9640144 . ISBN 978-1-6654-9503-5S2CID 245387555. Abgerufen am  2. August 2022 .
  64. ^ „CREATOR Web mit MIPS32-Beispiel“ . Archiviert vom Original am 29. September 2021.
  65. ^ CREATOR-Quellcode auf GitHub
  66. ^ Garcia-Carballeira, Felix; Calderon-Mateos, Alejandro; Alonso-Monsalve, Saul; Prieto-Cepeda, Javier (2020). „WepSIM: Ein interaktiver Online-Lernsimulator zur Integration von Mikrodesign, Mikroprogrammierung und Assemblerprogrammierung“. IEEE Transactions on Learning Technologies . 13 (1): 211–218 . Bibcode : 2020ITLT...13..211G . doi : 10.1109/TLT.2019.2903714 . hdl : 10016/33660 .

Weiterführende Literatur