MIPS -Architektur
Designer | MIPS -Technologien, Imaginationstechnologien |
---|---|
Bits | 64-Bit (32 → 64) |
Eingeführt | 1985 |
Ausführung | MIPS32/64 Release 6 (2014) |
Entwurf | RISC |
Typ | Register registrieren |
Codierung | Fest |
Verzweigung | Vergleichen und verzweigen Sie mit einer 1 -Befehlsverzögerung nach der Prüfung des Verzweigungszustands |
Endiangess | Bi |
Seitengröße | 4 kb |
Erweiterungen | Mdmx, MIPS-3D |
Offen | Teilweise. Das R12000 Der Prozessor ist seit mehr als 20 Jahren auf dem Markt und kann daher nicht den Patentansprüchen unterliegen. Daher sind die R12000- und älteren Prozessoren vollständig geöffnet. |
Register | |
Allgemeiner Zweck | 32 |
Schwimmender Punkt | 32 |
MIPS (Mikroprozessor ohne ineinanderliegelne Pipelined -Stadien)[1] ist eine Familie von Reduzierter Befehlssatz Computer (RISC) Anweisungsset Architekturen (IST EIN)[2]: A-1[3]: 19 Entwickelt von MIPS Computer Systems jetzt MIPS -Technologien, Sitz in den Vereinigten Staaten.
Es gibt mehrere Versionen von MIPs: einschließlich MIPS I, II, III, IV und V; sowie fünf Veröffentlichungen von MIPS32/64 (für 32- bzw. 64-Bit-Implementierungen). Die frühen MIPS-Architekturen waren 32-Bit; 64-Bit-Versionen wurden später entwickelt. Ab April 2017 ist die aktuelle Version von MIPS MIPS32/64 Release 6.[4][5] MIPS32/64 unterscheidet sich in erster Linie von MIPS I - V, indem der privilegierte Kernel -Modus -Systemsteuerungs -Coprozessor zusätzlich zur Architektur der Benutzermodus definiert wird.
Die MIPS -Architektur hat mehrere optionale Erweiterungen. MIPS-3D Welches ist ein einfacher Satz von Schwimmpunkt SIMD -Anweisungen gewidmet für gemeinsame 3D -Aufgaben,[6] Mdmx (Madmax), was eine umfangreichere Ganzzahl ist Simd Anweisungssatz mit den 64-Bit-Floating-Punkt-Registern, MIPS16E, der hinzugefügt wird Komprimierung zum Befehlsstrom Um Programme zu machen, nehmen Sie weniger Platz ein,[7] und MIPS MT, das hinzufügt Multithreading Fähigkeit.[8]
Rechnerarchitektur Kurse an Universitäten und technischen Schulen untersuchen häufig die MIPS -Architektur.[9] Die Architektur beeinflusste später RISC -Architekturen wie z. Alpha. Im März 2021 kündigte MIPS an, dass die Entwicklung der MIPS -Architektur mit dem Ende des Unternehmens zu Ende gegangen war Risc-v.[10]
Geschichte
Die erste Version der MIPS -Architektur wurde von entworfen von MIPS -Computersysteme für seine R2000 Mikroprozessor, Die erste MIPS -Implementierung. Sowohl MIPs als auch der R2000 wurden 1985 gemeinsam eingeführt. Als MIPS II eingeführt wurde, wurde MIPS wurde umbenannt Mips i Um es von der neuen Version zu unterscheiden.[3]: 32
MIPS -Computersysteme' R6000 Microprozessor (1989) war die erste MIPS II -Implementierung.[3]: 8 Der R6000 wurde für Server entwickelt und wurde hergestellt und verkauft von Bipolare integrierte Technologie, war aber ein kommerzieller Misserfolg. Mitte der neunziger Jahre haben viele neue 32-Bit-MIPS-Prozessoren für eingebettete Systeme waren MIPS II-Implementierungen, weil die Einführung der 64-Bit-MIPS III-Architektur im Jahr 1991 MIPS II als neueste 32-Bit-MIPS-Architektur bis MIPS32 1999 eingeführt wurde.[3]: 19
MIPS -Computersysteme' R4000 Microprozessor (1991) war die erste MIPS III -Implementierung. Es wurde für die Verwendung in Personal-, Workstation- und Server -Computern konzipiert. MIPS -Computersysteme förderten die MIPS -Architektur und R4000 aggressiv, wobei die Einrichtung der Erweiterte Computerumgebung (ACE) Konsortium, um es voranzutreiben Advanced RISC Computing (ARC) Standard, der MIPS als dominierende persönliche Computerplattform festlegen wollte. ARC fand wenig Erfolg in PCs, aber der R4000 (und das R4400 -Derivat) wurden in Workstation und Server -Computern, insbesondere von seinem größten Benutzer, häufig verwendet. Siliziumgrafik. Weitere Verwendungen des R4000 waren hochwertige eingebettete Systeme und Supercomputer. MIPS III wurde schließlich durch eine Reihe eingebetteter Mikroprozessoren implementiert. Quanteneffektdesign's R4600 (1993) und seine Derivate wurden häufig in High-End-Embedded-Systemen und Low-End-Workstationen und Servern eingesetzt. MIPS -Technologien ' R4200 (1994) wurde für eingebettete Systeme, Laptops und PCs konzipiert. Ein Derivat, der R4300i, hergestellt von NEC -Elektronik, wurde in der verwendet Nintendo 64 Spielkonsole. Der Nintendo 64 zusammen mit dem Playstationgehörten zu den höchsten Volumennutzern von MIPS-Architekturprozessoren Mitte der neunziger Jahre.
Die erste MIPS IV -Implementierung war die MIPS -Technologien R8000 Mikroprozessor -Chipsatz (1994). Das Design des R8000 begann bei Silicon Graphics, Inc. und wurde nur in High-End-Workstations und Servern für wissenschaftliche und technische Anwendungen verwendet, bei denen eine hohe Leistung bei großen Floating-Point-Arbeitsbelastungen wichtig war. Spätere Implementierungen waren die MIPS -Technologien R10000 (1996) und die Quanteneffektgeräte R5000 (1996) und RM7000 (1998). Der von NEC Electronics und Toshiba hergestellte und verkaufte R10000 und seine Derivate wurden von NEC, Pyramidentechnologie, Siliziumgrafiken und Tandem -Computern (unter anderem) in Workstations, Servern und Supercomputern verwendet. Die R5000 und R7000 wurden in High-End-Embedded-Systemen, PCs, Low-End-Workstations und Servern verwendet. Ein Derivat des R5000 von Toshiba, dem R5900, wurde in Sony Computer Entertainments verwendet Emotionsmotor, was seine betrieben hat Playstation 2 Spielkonsole.
Kündigte am 21. Oktober 1996 im Microprocessor Forum 1996 neben dem MIPS Digitale Medienerweiterungen (MDMX) Erweiterung, MIPS V wurde entwickelt, um die Leistung von 3D -Grafiktransformationen zu verbessern.[11] Mitte der neunziger Jahre waren eine wesentliche Verwendung von nicht eingebetteten MIPS-Mikroprozessoren Grafik-Workstationen aus Siliziumgrafiken. MIPS V wurde durch die MDMX-Erweiterung nur für Integer abgeschlossen, um ein vollständiges System zur Verbesserung der Leistung von 3D-Grafikanwendungen bereitzustellen.[12] MIPS V -Implementierungen wurden 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 gewesen sein und sollte im ersten Halbjahr 1999 eingeführt werden.[13] Die H1- und H2 -Projekte wurden später 1998 kombiniert und schließlich abgesagt. Obwohl es keine MIPS V -Implementierungen gab, basierte MIPS64 Release 1 (1999) auf MIPS V und behält alle Funktionen als optionale Coprozessor 1 (FPU) -Feature bei genannt Paired-Single.
Als MIPS-Technologien 1998 aus Siliziumgrafiken ausgedrückt wurden, fokussierte es sich auf den eingebetteten Markt. Durch MIPS V war jede aufeinanderfolgende Version ein strenger Superet der vorherigen Version, aber diese Eigenschaft war ein Problem, und die Architekturdefinition wurde geändert, um eine 32-Bit- und eine 64-Bit-Architektur zu definieren: MIPS32 und MIPS64. Beide wurden 1999 eingeführt.[14] MIPS32 basiert auf MIPS II mit einigen zusätzlichen Funktionen von MIPS III, MIPS IV und MIPS V; MIPS64 basiert auf MIPS V.[14] NEC, Toshiba und Sibyte (später erworben von Broadcom) Jeder erhielt Lizenzen für MIPS64, sobald es angekündigt wurde. Philips, LSI -Logik, Idt, Raza Microelectronics, Inc., Cavium, Loongson -Technologie und Ingenic Semiconductor habe sich seitdem ihnen angeschlossen. MIPS32/MIPS64 Release 5 wurde am 6. Dezember 2012 bekannt gegeben.[15] Release 4 wurde übersprungen, weil die Nummer vier als als wahrgenommen wird unglücklich In vielen asiatischen Kulturen.[16]
Im Dezember 2018 kündigte Wave Computing, der neue Eigentümer der MIPS-Architektur, an, dass MIPS ISA in einem Programm namens The MIPS Open Initiative Open-Souring sein würde.[17] Das Programm sollte den Zugang zu den jüngsten Versionen sowohl der 32-Bit- als auch der 64-Bit-Designs eröffnen, sodass sie ohne Lizenz- oder Lizenzgebühren verfügbar sind und den Teilnehmern den bestehenden MIPS-Patenten Lizenzen gewähren.[18][19][20]
Im März 2019 wurde eine Version der Architektur im Rahmen einer Lizenzfreiheit zur Verfügung gestellt.[21] Aber später in diesem Jahr wurde das Programm wieder geschlossen.[22]
Im März 2021 kündigte Wave Computing an, dass die Entwicklung der MIPS -Architektur eingestellt hat. Das Unternehmen hat sich der RISC-V Foundation angeschlossen und zukünftige Prozessorentwürfe werden auf der RISC-V-Architektur basieren.[10][23] Trotzdem einige Lizenznehmer wie Loongson Fahren Sie mit einer neuen Erweiterung von MIPS-kompatiblen ISAs selbst fort.[24]
Entwurf
MIPS ist eine modulare Architektur, die bis zu vier unterstützt Coprozessoren (CP0/1/2/3). In der MIPS-Terminologie ist CP0 der Systemsteuerungskoprozessor (ein wesentlicher Bestandteil des Prozessors, der in MIPS I-V implementiert ist), CP1 ist optional schwimmende Punkteinheit (FPU) und CP2/3 sind optionale implementierungsdefinierte Koprozessoren (MIPS III entfernt CP3 und verwendeten seine Opcodes für andere Zwecke wieder). Zum Beispiel in der Playstation Videospielkonsole, CP2 ist die Geometrie -Transformationsmotor (GTE), das die Verarbeitung der Geometrie in 3D -Computergrafiken beschleunigt.
Versionen
Mips i
Mips ist a Architektur laden/store (auch bekannt als a Registerarchitektur); mit Ausnahme der Anweisungen laden/speichern Wird zum Zugriff verwendet ErinnerungAlle Anweisungen arbeiten bei den Registern.
Register
MIPS Ich habe zweiunddreißig 32-Bit-Allzweckregister (GPR). Register $ 0 ist festverdrahtet zu Null und schreibt darauf verworfen. Register $ 31 ist das Linkregister. Für Ganzzahl-Multiplikation und Divisionsanweisungen, die asynchron aus anderen Anweisungen ausgehen, ein Paar 32-Bit-Register, HALLO und LO, werden bereitgestellt. Es gibt eine Reihe von Anweisungen zum Kopieren von Daten zwischen den allgemeinen Registern und den HI/LO-Registern.
Der Programmschalter hat 32 Bit. Die beiden Bit mit niedriger Ordnung enthalten immer Null, da die MIPS-I-Anweisungen 32 Bit lang sind und auf ihre natürlichen Wortgrenzen ausgerichtet sind.
Anweisungsformate
Die Anweisungen sind in drei Typen unterteilt: R (Register), I (unmittelbar) und j (Sprung). Jede Anweisung beginnt mit einem 6-Bit-Opcode. Zusätzlich zum OPCODE geben R-Typ-Anweisungen drei Register an.[25] ein Schaltbetragfeld und ein Funktionsfeld; Anweisungen vom Typ I-Typ geben zwei Register und einen sofortigen Wert von 16 Bit an. Die Anweisungen vom Typ j folgen dem Opcode mit einem 26-Bit-Sprungziel.[2]: A-174
Im Folgenden sind die drei Formate für den Kernanweisungssatz verwendet:
Typ | -31- Format (Bits) -0- | |||||
---|---|---|---|---|---|---|
R | Opcode (6) | Rs (5) | RT (5) | Rd (5) | Shamt (5) | funk (6) |
I | Opcode (6) | Rs (5) | RT (5) | Sofort (16) | ||
J | Opcode (6) | Adresse (26) |
CPU -Anweisungen
MIPS I hat Anweisungen, die 8-Bit-Bytes, 16-Bit-Halbwörter und 32-Bit-Wörter laden und speichern. Einziger Adressierungsmodus wird unterstützt: Basis + Verschiebung. Da MIPS I eine 32-Bit-Architektur ist, müssen die Mengen weniger als 32 Bits von weniger als 32 Bits angemeldet oder auf 32 Bits ausgeweitet werden. Die von "nicht signierten" Lastanweisungen ausführenden Lastanweisungen führen eine Erweiterung der Null durch; Andernfalls wird die Zeichenerweiterung durchgeführt. Laden Sie die Anweisungen aus dem Inhalt eines GPR (RS) und schreiben Sie das Ergebnis an eine andere GPR (RT). Speichern Sie Anweisungen, die die Basis aus dem Inhalt eines GPR (RS) und den Speicherdaten von einem anderen GPR (RT) beziehen. Alle Lade- und Speicheranweisungen berechnen die Speicheradresse, indem sie die Basis mit dem markanten 16-Bit-Sofort summieren. MIPS Ich benötige alle Speicherzugriffe, um an ihren natürlichen Wortgrenzen ausgerichtet zu werden, andernfalls wird eine Ausnahme signalisiert. Um effiziente, nicht ausgerichtete Speicherzugriffe zu unterstützen, gibt es Last-/Speicher -Word -Anweisungen, die von "links" oder "rechts" angezeigt werden. Alle Lastanweisungen folgen von a Lastverzögerungsschlitz. Die Anweisung im Lastverzögerungsschlitz kann die von der Lastanweisung geladenen Daten nicht verwenden. Der Lastverzögerungsschlitz kann mit einer Anweisung gefüllt werden, die nicht von der Last abhängt. Ein NOP wird ersetzt, wenn eine solche Anweisung nicht gefunden werden kann.
MIPS Ich habe Anweisungen zur Durchführung von Addition und Subtraktion. Diese Anweisungen beziehen ihre Operanden von zwei GPRs (RS und RT) und schreiben das Ergebnis an eine dritte GPR (RD). Alternativ kann Addition einen der Operanden aus einer 16-Bit-unmittelbaren (die auf 32 Bit angemeldet) beziehen. Die Anweisungen für Addition und Subtraktion haben zwei Varianten: Standardmäßig wird eine Ausnahme signalisiert, wenn das Ergebnis überläuft; Anweisungen mit dem "unsignierten" Suffix signalisieren keine Ausnahme. Die Überlaufprüfung interpretiert das Ergebnis als 32-Bit-Ganzzahl einer Komplement. MIPS Ich habe Anweisungen zum Ausführen bitweise logisch und, oder, xor und Nor. Diese Anweisungen beziehen ihre Operanden von zwei GPRs und schreiben das Ergebnis an eine dritte GPR. Die Anweisungen und, oder, und XOR können alternativ einen der Operanden aus einer 16-Bit-unmittelbaren (die auf 32 Bit null ausgeweitet) beziehen. Das Set on Beziehung Anweisungen schreiben ein oder Null in das Zielregister, wenn die angegebene Beziehung wahr oder falsch ist. Diese Anweisungen beziehen ihre Operanden von zwei GPRs oder einem GPR und einer 16-Bit-Unmittelung (die auf 32 Bit angemeldet ist) und schreiben das Ergebnis auf eine dritte GPR. Standardmäßig werden die Operanden als signierte ganze Zahlen interpretiert. Die Varianten dieser Anweisungen, die mit "nicht signiert" die Operanden als nicht signierte Ganzzahlen satt, (selbst diejenigen, die einen Operanden aus dem markantierten 16-Bit-unmittelbaren Punkt beziehen).
Die sofortige Lastkopie kopiert den 16-Bit-Sofort in die 16-Ordnung 16 Bit eines GPR. Es wird in Verbindung mit der oder sofortigen Anweisung verwendet, um einen 32-Bit-Sofort in ein Register zu laden.
MIPS Ich habe Anweisungen, um linke und rechte logische Verschiebungen und rechte arithmetische Verschiebungen durchzuführen. Der Operand wird von einem GPR (RT) erhalten und das Ergebnis an eine andere GPR (RD) geschrieben. Der Verschiebungsabstand wird entweder von einem GPR (RS) oder einer 5-Bit-Verschiebungsmenge (das "SA" -Feld) erhalten.
MIPS Ich habe Anweisungen für die unterschriebene und nicht signierte Ganzzahl -Multiplikation und -division. Diese Anweisungen beziehen ihre Operanden von zwei GPRs und schreiben ihre Ergebnisse in ein Paar 32-Bit-Register, die als Hi und LO bezeichnet werden, da sie die anderen CPU-Anweisungen getrennt von (und gleichzeitig mit) ausführen können. Zur Multiplikation werden die Hälften des 64-Bit-Produkts mit hoher und niedriger Ordnung (jeweils) in HI bzw. LO geschrieben. Für die Teilung wird der Quotient an LO und den Rest an Hi geschrieben. Um auf die Ergebnisse zuzugreifen, wird ein Paar Anweisungen (von HI von HI bewegt und von LO) bereitgestellt, um den Inhalt von HI oder LO in eine GPR zu kopieren. Diese Anweisungen sind in Verbindung gebracht: Lesungen von Hi und Lo fahren nicht an einer unvollendeten arithmetischen Anweisung vorbei, die an Hi und LO schreibt. Ein weiteres Anweisungspaar (wechseln Sie zu HI oder wechseln Sie zu LO) kopiert den Inhalt eines GPR zu Hi und LO. Diese Anweisungen werden verwendet, um HI und LO nach Ausnahmehandhabung in ihren ursprünglichen Zustand wiederherzustellen. Anweisungen, die hi oder lo lesen, müssen durch zwei Anweisungen getrennt werden, die nicht an Hi oder LO schreiben.
Alle MIPS I -Steuerungsanweisungen folgen von a Zweigverzögerungsschlitz. Sofern der Zweigverzögerungsschlitz nicht durch eine Anweisung gefüllt ist, die nützliche Arbeiten ausführt, wird ein NOP ersetzt. MIPS I Branch -Anweisungen vergleichen den Inhalt eines GPR (RS) mit Null oder einem anderen GPR (RT) als signierte ganze Zahlen und Zweig, wenn die angegebene Bedingung wahr ist. Die Steuerung wird in die Adresse übertragen, die durch Verschiebung des 16-Bit-Versatzes von zwei Bits berechnet wird, das 18-Bit-Ergebnis anmelden und das 32-Bit-Sign-Eild-Ergebnis zur Summe des Programmzählers (Anweisungsadresse) und Anweisungsadresse addiert hat und das 3-Bit-Sign-Eild-Ergebnis hinzugefügt wird (Anweisungsadresse) und Anweisungsadresse und Anweisungsadresse). 810. Sprünge haben zwei Versionen: Absolute und Register-Indirect. Absolute Sprünge ("Sprung" und "Sprung und Link") Berechnen Sie Die Adresssteuerung wird übertragen, indem das 26-Bit-Instrument von zwei Bits verlagert und das 28-Bit Anweisung im Zweigverzögerungsschlitz. Register-Indirect Jumps Transfer Control auf die Anweisung an der von einem GPR (RS) bezogenen Adresse. Die von der GPR bezogene Adresse muss wort ausgerichtet sein, sonst wird eine Ausnahme signalisiert, nachdem die Anweisung im Zweigverzögerungsschlitz ausgeführt wurde. Branch- und Jump -Anweisungen, die Link (mit Ausnahme von "Sprung- und Linkregister") die Absenderadresse in GPR 31 Speichern. Die Anweisung "Sprung und Linkregister" ermöglicht es, dass die Absenderadresse in einer beschreibbaren GPR gespeichert werden kann.
MIPS I hat zwei Anweisungen für Software, um eine Ausnahme zu signalisieren: Systemaufruf und Haltepunkt. Der Systemaufruf wird von der User Mode -Software verwendet, um Kernel -Anrufe zu tätigen. und Haltepunkt wird verwendet, um die Kontrolle über den Ausnahmebehandler des Kernels auf einen Debugger zu übertragen. Beide Anweisungen verfügen über ein 20-Bit-Codefeld, das Betriebsumgebungspezifische Informationen für den Ausnahmehandler enthalten kann.
MIPS hat 32 Floating-Punkt-Register. Zwei Register werden für doppelte Präzisionszahlen gepaart. Un nicht nummerierte Register können nicht für Arithmetik oder Verzweigung als Teil eines Doppelpräzisionsregisterpaars verwendet werden, was zu 16 nutzbaren Registern für die meisten Anweisungen führt (Bewegungen/Kopien und Lasten/Geschäfte waren nicht betroffen).
Eine einzelne Präzision wird durch das Suffix .s Suffix bezeichnet, während doppelte Präzision mit dem Suffix bezeichnet wird.
MIPS II
MIPS II hat den Lastverzögerungsfenster entfernt[3]: 41 und fügte mehrere Anweisungen hinzu. Für gemeinsame Memory-Multiprozessing die Shared Memory synchronisieren, Laden Sie verknüpftes Wort, und Speichern Sie das bedingte Wort Anweisungen wurden hinzugefügt. Eine Reihe von Trap-on-Condition-Anweisungen wurde hinzugefügt. Diese Anweisungen verursachten eine Ausnahme, wenn der bewertete Zustand wahr ist. Alle vorhandenen Zweiganweisungen wurden gegeben Zweig Versionen, die die Anweisung im Zweig -Verzögerungs -Steckplatz nur dann ausgeführt haben, wenn der Zweig genommen wird.[3]: 40 Diese Anweisungen verbessern die Leistung in bestimmten Fällen, indem nützliche Anweisungen zum Ausfüllen des Verzögerungsschlitzes ermöglicht werden.[3]: 212 Das Lade- und Speichern von Doublewort -Anweisungen für COP1–3 wurde hinzugefügt. In Übereinstimmung mit anderen Speicherzugriffsanweisungen erforderten diese Lasten und Speichern, dass das Doppelwort auf natürliche Weise ausgerichtet ist.
Der Anweisungssatz für den Coprozessor für den schwimmenden Punkt wurde auch mehrere Anweisungen hinzugefügt. Eine IEEE 754-konforme Floating-Punkt-Quadrat-Wurzelanweisung wurde hinzugefügt. Es unterstützte sowohl Einzel- als auch Doppelprezisionsoperanden. Eine Reihe von Anweisungen, bei denen die Gleitkomma-Nummern mit Einzel- und doppelten Präzision in 32-Bit-Wörter umgewandelt wurden, wurden hinzugefügt. Diese ergänzten die vorhandenen Konvertierungsanweisungen, indem der IEEE -Rundungsmodus durch die Anweisung anstelle des schwimmenden Punktsteuerungs- und Statusregisters angegeben wurde.
MIPS III
Mips III ist a rückwärtskompatibel Erweiterung von MIPS II, die Unterstützung für die Unterstützung für 64-Bit Speicheradressierung und Ganzzahloperationen. Der 64-Bit-Datentyp wird als Doppelwort bezeichnet, und MIPS III erweiterte die allgemeinen Register, HI/LO-Register und den Programm zur Unterstützung von 64 Bits, um ihn zu unterstützen. Es wurden neue Anweisungen hinzugefügt, um Doppelwörter zu laden und zu speichern, um eine Zahlzahlzusatz-, Subtraktions-, Multiplikations-, Teil- und Verschiebungsvorgänge auszuführen und das Doppelwort zwischen den GPRS- und HI/LO -Registern zu verschieben. Vorhandene Anweisungen, die ursprünglich für den Betrieb mit 32-Bit-Wörtern definiert wurden, wurden gegebenenfalls neu definiert, um die 32-Bit-Ergebnisse zu verweisen, um es zu ermöglichen, Wörter und Doppelwörter mit den meisten Anweisungen identisch zu behandeln. Unter diesen neu definierten Anweisungen war Wort laden. In MIPS III hat es Wörter auf 64 Bits ausgeweitet. Ergänzen Wort ladenEine Version, die keine Auslastung hat.
Die Unfähigkeit des R-Befehlsformats, den vollständigen Umschaltentfernungsabstand für 64-Bit-Verschiebungen anzugeben (das Feld 5-Bit-Schaltbetrag ist zu eng, um den Umschaltabstand für Doppelwörter anzugeben) erforderte MIPS III, um drei 64-Bit-Versionen jeder MIPS I-Verschiebung bereitzustellen Anweisung. Die erste Version ist eine 64-Bit-Version der ursprünglichen Umschaltanweisungen, mit der konstante Schichtabstände von 0–31 Bit angegeben werden. Die zweite Version ähnelt der ersten, fügt jedoch 32 hinzu10 Der Wert des Schaltbetrags, so dass konstante Verschiebungsabstände von 32–64 Bit angegeben werden können. Die dritte Version erhält den Verschiebungsabstand von den sechs Bits einer GPR niedriger Ordnung.
Mips III fügte a hinzu Supervisor Berechtigungsstufe zwischen dem vorhandenen Kernel- und Benutzerrechtsstufen. Diese Funktion beeinflusste nur den implementierungsdefinierten Systemsteuerungsprozessor (Coprozessor 0).
MIPS III entfernte die Unterstützung von Coprozessor 3 (CP3) und verwendete seine Opcodes für die neuen Doppelwortanweisungen. Die verbleibenden Coprozessoren erhielten Anweisungen zum Verschieben von Doppelwörtern zwischen den Koprozessorregistern und den GPRs. Die schwimmenden allgemeinen Register (FGRs) wurden auf 64 Bit erweitert und die Anweisungen nach Anweisungen zur Verwendung eines geraden Registers wurden nur entfernt. Dies ist mit früheren Versionen der Architektur unvereinbar; Ein Bit im Floating-Punkt-Steuer-/Statusregister wird verwendet, um die MIPS III-Floating-Punkt-Einheit (FPU) in einem MIPS I- und II-kompatiblen Modus zu betreiben. Die Floating-Punkt-Kontrollregister wurden nicht für die Kompatibilität erweitert. Die einzigen neuen Floating-Punkt-Anweisungen waren diejenigen, die Doppelwörter zwischen der CPU- und FPU-Konvertiten-Einzel- und Doppelprezisions-Floating-Punkt-Nummern in Doppelwort-Ganzzahlen kopieren und umgekehrt.
MIPS IV
MIPS IV ist die vierte Version der Architektur. Es ist ein Superet von MIPS III und ist mit allen vorhandenen Versionen von MIPs kompatibel. MIPS IV wurde entwickelt, um hauptsächlich die Leistung des Gleitpunkts (FP) zu verbessern. Um den Zugang zu Operanden zu verbessern, indexiert Adressierungsmodus (Base + Index, beide aus GPRs bezogen) für FP -Ladungen und -Speores wurden hinzugefügt, ebenso wie Vorab -Anweisungen zum Vorabbau von Speicher und Angabe von Cache -Hinweisen (diese unterstützten sowohl die Basis + -Offset- als auch die Basis + -Dex -Adressmodi).
MIPS IV fügte mehrere Funktionen hinzu, um die Parallelität auf Befehlsebene zu verbessern. Um den durch ein einzelnen Zustand verursachten Engpass zu lindern, wurden sieben Bedingungscode-Bits in das Floating-Point-Steuer- und -Statusregister hinzugefügt, was die Gesamtsumme auf acht erhöhte. FP -Vergleichs- und Zweiganweisungen wurden neu definiert, damit sie angeben konnten, welches Bedingungsbit geschrieben oder gelesen wurde (jeweils); und der Verzögerungsschlitz zwischen einem FP -Zweig, in dem das durch einen vorherige FP -Vergleich geschriebene Zustand abgelesen wurde, wurde entfernt. Unterstützung für Partielle Prädikation wurde in Form von Anweisungen für bedingte Bewegungen für GPRS und FPRS hinzugefügt; und eine Implementierung könnte sich zwischen präzisen oder ungenutzigen Ausnahmen für IEEE 754 -Fallen entscheiden.
MIPS IV fügte mehrere neue FP-Arithmetikanweisungen für FPNs mit Einzel- und Doppelprezisionen hinzu: Fused-Multiply Add oder Subtrahieren, gegenseitige und gegenseitige Quadratwurzeln. Die FP Fused-Multiply-Add oder Subtrahieren führen entweder ein oder zwei Runden (implementierende implementiert) aus, um die Anforderungen an die IEEE 754-Genauigkeit (jeweils) zu übertreffen oder zu erfüllen. Die FP-wechselseitigen und wechselseitigen Quadratwurzelanweisungen entsprechen den IEEE 754-Genauigkeitsanforderungen nicht und erzeugen Ergebnisse, die sich von der erforderlichen Genauigkeit durch ein oder zwei Einheiten des letzten Ortes unterscheiden (es ist die Implementierung definiert). Diese Anweisungen dienen Anwendungen, bei denen die Anweisungslatenz wichtiger ist als die Genauigkeit.
MIPS v
MIPS V fügte einen neuen Datentyp hinzu, der gepaarte Single (PS), der aus zwei Einzelprezisionen (32-Bit) -Floating-Punkt-Nummern bestand, die in den vorhandenen 64-Bit-Schwimmpunktregistern gespeichert waren. Varianten vorhandener Gleitkomma-Anweisungen für Arithmetik, Vergleich und bedingte Bewegung wurden hinzugefügt, um diesen Datentyp in Simd-Weise zu betreiben. Neue Anweisungen wurden zum Laden, Umbau und Umwandlung von PS -Daten hinzugefügt.[3]: 426–429 Es war der erste Anweisungssatz, der die Gleitkomma-SIMD mit vorhandenen Ressourcen ausnutzte.[12]
MIPS32/MIPS64
Die erste Freisetzung von MIPS32, basierend auf MIPS II, wurde bedingte Bewegungen hinzugefügt, Anweisungen vorlegenund andere Merkmale aus den Familien R4000 und R5000 von 64-Bit-Prozessoren.[14] Die erste Version von MIPS64 fügt einen MIPS32-Modus zum Ausführen von 32-Bit-Code hinzu.[14] Der Mul und Madd (multiplizieren) Anweisungen, die zuvor in einigen Implementierungen verfügbar sind, wurden zu den Spezifikationen von MIPS32 und MIPS64 hinzugefügt, wie es waren Cache -Steuerungsanweisungen.[14]
MIPS32/MIPS64 Release 6 im Jahr 2014 fügte Folgendes hinzu:[26]
- Eine neue Familie von Zweigen ohne Verzögerungsschlitz:
- bedingungslose Zweige (BC) und Ast-and-Link (BALC) mit einem 26-Bit-Versatz,
- bedingter Zweig auf Null/ungleich Null mit einem 21-Bit-Offset,
- Der vollständige Satz von signierten und nicht signierten bedingten Zweigen verglichen sich zwischen zwei Registern (z. B. BGTUC) oder einem Register gegen Null (z. B. BGTZC).
- Vollständiger Zweig-und-Link-Satz, der ein Register mit Null vergleicht (z. B. BGTZalc).
- Indexsprunganweisungen ohne Verzögerungsschlitz, die große absolute Adressen unterstützen.
- Anweisungen zum Lasten von 16-Bit-Unmittelbaren an Bit-Position 16, 32 oder 48, sodass leicht große Konstanten erzeugt werden können.
- PC-Relativlastanweisungen sowie Adressgenerierung mit großen (PC-relativen) Offsets.
- Bit-Reversal- und Byte-Ausrichtungsanweisungen (zuvor nur mit der DSP-Erweiterung verfügbar).
- Multiplizieren Sie und teilen Sie die Anweisungen neu definiert, damit sie ein einzelnes Register für ihr Ergebnis verwenden.
- Anweisungen, die Wahrheitswerte generieren, generieren jetzt alle Nullen oder alle, anstatt nur das 0-Bit zu klären/festzulegen.
- Anweisungen, die einen Wahrheitswert verwenden, interpretieren jetzt nur alle Zeros als falsch, anstatt nur den 0-Bit zu betrachten.
Selten verwendete Anweisungen entfernt:
- Einige bedingte Bewegungen
- Zweig wahrscheinlich Anweisungen (veraltet in früheren Veröffentlichungen).
- Ganzzahl Überlauf-Fangenanweisungen mit 16-Bit sofort
- Anweisungen für ganzzahlige Akkumulator (zusammen Hi/lo-Register, verschoben in die anwendungsspezifische DSP-Erweiterung)
- Nicht ausgerichtete Lastanweisungen (LWL und LWR) (die die meisten gewöhnlichen Lasten und Speicher fordern, fehlgerichteten Zugriff zu unterstützen, möglicherweise durch Fangen und mit der Hinzufügung einer neuen Anweisung (Balign))
Reorganisierte die Anweisungscodierung und befreite Platz für zukünftige Erweiterungen.
Mikromips
Die Micromips32/64 -Architekturen sind Supersets der Architekturen von MIPS32 und MIPS64 (jeweils), die die MIPS16E ASE ersetzen sollen. Ein Nachteil von MIPS16E ist, dass ein Modusschalter erforderlich ist, bevor eine der 16-Bit-Anweisungen verarbeitet werden kann. Micromips fügt Versionen der am meisten verwendeten 32-Bit-Anweisungen hinzu, die als 16-Bit-Anweisungen codiert werden. Auf diese Weise können die Programme 16- und 32-Bit-Anweisungen vermischen, ohne die Modi wechseln zu müssen. Micromips wurde neben MIPS32/64 Release 3 eingeführt, und jede anschließende Freisetzung von MIPS32/64 hat eine entsprechende Micromips32/64 -Version. Ein Prozessor kann micromips32/64 oder beide micromips32/64 und der entsprechenden MIPS32/64 -Untergruppe implementieren. Beginnend mit MIPS32/64 Release 6, Unterstützung für MIPS16E endete, und Micromips ist die einzige Form der Codekomprimierung in MIPs.
Anwendungsspezifische Erweiterungen
Die Architekturen der Basis MIPS32 und MIPS64 können mit einer Reihe optionaler architektonischer Erweiterungen ergänzt werden, die gemeinsam als als bezeichnet werden Anwendungsspezifische Erweiterungen (ASES). Diese ASS bieten Funktionen, die die Effizienz und Leistung bestimmter Workloads verbessern, wie z. digitale Signalverarbeitung.
- MIPS MCU
- Verbesserungen für Mikrocontroller -Anwendungen. Die MCU-ASE (anwendungsspezifische Erweiterung) wurde entwickelt, um die Unterstützung der Interrupt-Controller zu erweitern, die Interrupt-Latenz zu reduzieren und die E/A-Peripheriesteuerungsfunktion zu verbessern, die typischerweise bei Microcontroller-Systemkonstruktionen erforderlich sind.
- Separate Priorität und Vektorgenerierung
- Unterstützt bis zu 256 Interrupts im EIC -Modus (externer Interrupt -Controller) und acht Hardware -Interrupt -Pins
- Bietet eine 16-Bit-Vektor-Offset-Adresse
- Voraberhebung des Interrupt-Ausnahmevektors
- Automatischer Interrupt -Prolog - Fügt Hardware zum Speichern und Aktualisieren des Systemstatus vor der Routine für Interrupt
- Automatisierter Interrupt -Epilog - stellt den zuvor im Stapel gespeicherten Systemstatus für die Rückkehr aus dem Interrupt wieder her.
- Interrupt -Ketten - Unterstützt den Dienst ausstehender Interrupts, ohne die anfängliche Interruptroutine verlassen zu müssen, und speichert die zum Speichern und Wiederherstellen mehrerer aktiven Interrupts die Zyklen, die erforderlich sind
- Unterstützt die spekulative Vorbereitung der Interrupt-Vektoradresse. Reduziert die Anzahl der Interrupt -Service -Zyklen, indem Sie den Speicherzugriff mit Pipeline -Spülung und Ausnahmepriorisierung überlappen
- Enthält Atombit -Set/Clear -Anweisungen, mit denen Bits innerhalb eines E/A -Registers ermöglicht werden, die normalerweise zur Überwachung oder Steuerung der externen peripheren Funktionen verwendet werden, die ohne Unterbrechung geändert werden sollen, und sicherzustellen, dass die Aktion sicher ausgeführt wird.
- MIPS16
- MIPS16 ist eine anwendungsspezifische Erweiterung für MIPS I durch V bis V entworfen von von LSI -Logik und MIPS -TechnologienAnkündigte am 21. Oktober 1996 neben seiner ersten Implementierung, dem LSI -Logik Tinyrisc -Prozessor.[27] MIPS16 wurde anschließend von lizenziert von NEC -Elektronik, Philips Halbleiter, und Toshiba (unter anderen); und als Erweiterung der MIPS I, II, einer III -Architekturen implementiert. MIPS16 verringert die Anwendungsgröße um bis zu 40%, indem sie 16-Bit-Anweisungen anstelle von 32-Bit-Anweisungen verwenden, und verbessert auch die Leistungseffizienz, den Anweisungs-Cache-Trefferrate und ist der Leistung für seine Basisarchitektur entsprechend.[28] Es wird von Hardware- und Softwareentwicklungs -Tools von MIPS -Technologien und anderen Anbietern unterstützt. MIPS16E ist eine verbesserte Version von MIPS16, die erstmals von MIPS32 und MIPS64 Release 1. MIPS16E2 unterstützt wird, ist eine verbesserte Version von MIPS16, die von MIPS32 und MIPS64 unterstützt wird (bis zu Release 5). Freilassung 6 ersetzt es durch Micromips.
- MIPS Digitale Signalverarbeitung (DSP)
- Das DSP ASE ist eine optionale Erweiterung der MIPS32/MIPS64 Release 2 und neueren Befehlssätze, mit denen eine große Auswahl an "Medien" -Rechnungen beschleunigt werden können - insbesondere Audio und Video. Das DSP -Modul umfasst eine Reihe von Anweisungen und Status in der Integer -Pipeline und erfordert eine minimale zusätzliche Logik, die in MIPS -Prozessorkernen implementiert werden muss. Revision 2 der ASE wurde in der zweiten Halbzeit 2006 eingeführt. Diese Revision fügt dem ursprünglichen ASE zusätzliche Anweisungen hinzu, ist jedoch mit ihm hinsichtlich rückwärtskompatibel.[29] Im Gegensatz zum Großteil der MIPS -Architektur ist es eine ziemlich unregelmäßige Operation, von denen viele für eine bestimmte Relevanz für einen Schlüsselalgorithmus ausgewählt werden. Seine Hauptmerkmale (vs Original MIPS32):[30]
- Sättigung der Arithmetik (wenn eine Berechnung überläuft, liefern Sie die darstellbare Zahl, die der nicht überfüllten Antwort am nächsten liegt).
- Festpunktarithmetik an signierten 32- und 16-Bit-Festpunktfraktionen mit einem Bereich von -1 bis +1 (diese werden weit verbreitet "Q31" und "Q15").
- Die vorhandene Ganzzahl-Multiplikation und multiplizierende Anweisungen, die Ergebnisse in einen Doppelgröße (genannt "Hi/lo" und 64 Bit auf MIPS32-CPUs liefern). Der DSP ASE fügt drei weitere Akkumulatoren und einige verschiedene Aromen von Multiplikumakakkulatoren hinzu.
- Simd Anweisungen, die auf 4 x unsignierten Bytes oder 2 x 16-Bit-Werten in einem 32-Bit-Register gepackt werden (die 64-Bit-Variante des DSP ASE unterstützt auch größere Vektoren).
- SIMD-Operationen sind grundlegende Arithmetik, Verschiebungen und einige multiplizierte Typvorgänge.
- MIPS SIMD Architecture (MSA)
- Anweisungssatzerweiterungen zur Beschleunigung von Multimedia.
- 32 Vektorregister von 16 x 8-Bit, 8 x 16-Bit, 4 x 32-Bit und 2 x 64 Bit-Vektorelementen
- Effiziente vektor-parallele arithmetische Operationen an Ganzzahl-, Festpunkt- und Gleitkomma-Daten
- Operationen zu Absolutwertoperanden
- Runden- und Sättigungsoptionen verfügbar
- Voller Präzision multiplizieren und multiplizieren
- Konvertierungen zwischen Ganzzahl-, Gleitkomma- und Festpunktdaten
- Komplette Satz von Vektorebene-Vergleichs- und Zweiganweisungen ohne Bedingungsflag
- Vektor (1D) und Array (2D) Shuffle Operations
- Typed Ladung und Speichern von Anweisungen für Endian-unabhängig
- IEEE-Standard für Gleitkomma-Arithmetik 754-2008 Konform
- Element präzise schwimmende Punkt-Ausnahmesignalisierung
- Vordefinierte skalierbare Erweiterungen für Chips mit mehr Toren/Transistoren
- Beschleunigt rechenintensiv
- Softwareprogrammierbare Lösung für Anwendungen oder Funktionen für Unterhaltungselektronik oder Funktionen, die nicht von dedizierter Hardware abgedeckt sind
- Emerging Data Mining, Merkmalextraktion, Bild- und Videoverarbeitung sowie Human-Computer-Interaktionsanwendungen
- Hochleistungswissenschaftlicher Computer
- MIPS -Virtualisierung
- Hardware unterstützte die Virtualisierungstechnologie.
- MIPS Multi-Threading
- Jeder Multi-Thread-MIPS-Kern kann bis zu zwei VPEs (virtuelle Verarbeitungselemente) unterstützen, die eine einzige Pipeline sowie andere Hardware-Ressourcen teilen. Da jedoch jedes VPE eine vollständige Kopie des Prozessorstatus enthält, wie vom Softwaresystem angezeigt, erscheint jedes VPE als vollständiger eigenständiger Prozessor für einen SMP Linux -Betriebssystem. Für feinkörnige Thread-Verarbeitungsanwendungen kann jedes VPE bis zu neun TCs unterstützen, die über zwei VPEs zugewiesen werden. Die TCS teilen sich eine gemeinsame Ausführungseinheit, aber jeder verfügt über einen eigenen Programmzähler- und Kernregister -Dateien, sodass jeder einen Thread von der Software verarbeiten kann. Die MIPS -MT -Architektur ermöglicht auch die Zuweisung von Prozessorzyklen zu Fäden und setzt die relativen Thread -Prioritäten mit einer optionalen Servicequalität (Dienstleistung (Qos) Manager -Block. Dies ermöglicht zwei Priorisierungsmechanismen, die den Informationsfluss über den Bus bestimmen. Der erste Mechanismus ermöglicht es dem Benutzer, einen Thread über einen anderen zu priorisieren. Der zweite Mechanismus wird verwendet, um ein bestimmtes Verhältnis der Zyklen zu bestimmten Threads im Laufe der Zeit zuzuordnen. Die kombinierte Verwendung beider Mechanismen ermöglicht eine effektive Allokation der Bandbreite auf den Set der Fäden und eine bessere Kontrolle der Latenzen. In Echtzeitsystemen ist der Determinismus auf Systemebene sehr kritisch, und der QoS-Block erleichtert die Verbesserung der Vorhersagbarkeit eines Systems. Hardwaredesigner von fortschrittlichen Systemen können den Standard -QoS -Block ersetzen, der von MIPS Technologies bereitgestellt wird, die speziell für ihre Anwendung abgestimmt sind.
- SmartMips
- SmartMips ist eine anwendungsspezifische Erweiterung (ASE), die von entworfen wurde, Gemplus International und MIPS -Technologien zur Verbesserung der Leistung und zur Verringerung des Speicherverbrauchs für Chipkarte Software. Es wird nur von MIPS32 unterstützt, da Smartcards nicht die Funktionen von MIPS64 -Prozessoren erfordern. Nur wenige Smartcards verwenden SmartMips.
- MIPS Digitale Medienerweiterung (Mdmx)
- Multimedia -Anwendungsbeschleunigungen, die in den 1990er Jahren auf RISC- und CISC -Systemen üblich waren.
- MIPS-3D
- Zusätzliche Anweisungen zur Verbesserung der Leistung von 3D -Grafikanwendungen
Konventionen anrufen
MIPS hatte mehrere Anrufkonventionen, insbesondere auf der 32-Bit-Plattform.
Der O32 ABI ist der am häufigsten verwendete Abi aufgrund seines Status als Original System v Abi Für MIPS.[31][32] Es ist streng stackbasiert, wobei nur vier Register $ A0- $ A3 verfügbar sind, um Argumente zu verabschieden. Space on the Stack ist reserviert, falls die Callee ihre Argumente retten muss, die Register werden jedoch nicht vom Anrufer gespeichert. Der Rückgabewert wird in Register $ v0 gespeichert. Ein zweiter Rückgabewert kann in $ v1 gespeichert werden. Der ABI nahm 1990 Gestalt an und wurde zuletzt 1994 aktualisiert. Diese wahrgenommene Langsamkeit zusammen mit einem antiken schwimmenden Punktmodell mit nur 16 Registern hat die Verbreitung vieler anderer Aufrufkonventionen gefördert. Es wird nur für 32-Bit-MIPs definiert, aber GCC hat eine 64-Bit-Variation namens O64 erstellt.[33]
Für 64-Bit wird die N64 ABI By Silicon-Grafik am häufigsten verwendet. Die wichtigste Verbesserung ist, dass jetzt acht Register für die Verabschiedung von Argumenten verfügbar sind. Es erhöht auch die Anzahl der Floating-Punkt-Register auf 32. Es gibt auch eine ILP32 Version namens N32, die 32-Bit-Zeiger für kleinere Code verwendet, analog zu der x32 Abi. Beide laufen im 64-Bit-Modus der CPU.[33] Die ABIS N32 und N64 übergeben die ersten acht Argumente an eine Funktion in den Registern $ a0- $ a7; Nachfolgende Argumente werden auf den Stapel weitergegeben. Der Rückgabewert (oder ein Zeiger darauf) wird in den Registern $ v0 gespeichert. Ein zweiter Rückgabewert kann in $ v1 gespeichert werden. Sowohl im N32- als auch im N64 ABIS werden alle Register als 64-Bit-Breite angesehen.
Es wurden einige Versuche unternommen, O32 durch einen 32-Bit-ABI zu ersetzen, der N32 mehr ähnelt. Eine Konferenz von 1995 erbrachte MIPS EABI, für die die 32-Bit-Version ziemlich ähnlich war.[34] EABI inspirierte MIPS -Technologien, ein radikaleres "Nubi" -Ani vorzuschlagen und Argument -Register für den Rückgabewert wiederzuverwenden.[35] MIPS EABI wird von GCC unterstützt, aber nicht von LLVM und unterstützt Nubi auch nicht.
Für alle O32 und N32/N64 wird die Rückgabeadresse in einem $ RA -Register gespeichert. Dies wird automatisch unter Verwendung der Anweisungen JAL (Jump and Link) oder JALR (Sprung- und Linkregister) festgelegt. Der Funktionsprolog eines (nicht-solide) MIPS-Subroutine drückt die Renditeadresse (in $ ra) in den Stapel.[36][37]
Sowohl bei O32 als auch auf N32/N64 wächst der Stapel nach unten, aber der N32/N64 ABIS erfordern eine 64-Bit-Ausrichtung für alle Stapeleinträge. Der Rahmenzeiger (30 US alloca ()
.
Für N32 und N64 wird die Absenderadresse normalerweise 8 Bytes vor dem gespeichert Stapelzeiger obwohl dies optional sein kann.
Für die N32- und N64 ABIS muss eine Funktion die Register von $ S0- $ S7, den globalen Zeiger ($ GP oder $ 28), den Stapelzeiger ($ SP oder $ 29) und den Rahmenzeiger (30 US-Dollar) erhalten. Der O32 ABI ist gleich, außer dass die Aufruffunktion erforderlich ist, um das $ gp -Register anstelle der aufgerufenen Funktion zu speichern.
Für Multi-Thread-Code wird der lokale Speicherzeiger von Thread in der Regel in einem speziellen Hardwareregister $ 29 gespeichert und wird mit der Anweisung MFHW (Move From Hardware) zugegriffen. Es ist bekannt, dass mindestens ein Anbieter diese Informationen im $ K0 -Register speichert, das normalerweise für den Kernelgebrauch reserviert ist, dies ist jedoch nicht Standard.
Die Register von $ K0 und K1 (26 bis 27 US -Dollar) sind für den Kernelgebrauch reserviert und sollten nicht von Anwendungen verwendet werden, da diese Register jederzeit vom Kernel aufgrund von Interrupts, Kontextschaltern oder anderen Ereignissen geändert werden können.
Name | Nummer | Verwenden | Callee muss bewahren? |
---|---|---|---|
$ null | $ 0 | Konstante 0 | - |
$ bei | $ 1 | Assembler vorübergehend | Nein |
$ v0– $ v1 | $ 2– $ 3 | Werte für Funktionsrenditen und Expressionsbewertung | Nein |
$ a0– $ a3 | $ 4– $ 7 | Funktionsargumente | Nein |
$ t0– $ t7 | 8– $ 15 | Zeiträume | Nein |
$ S0– $ S7 | 16 bis 23 Dollar | Zeiträume gerettet | Ja |
$ t8– $ t9 | 24 bis 25 Dollar | Zeiträume | Nein |
$ k0– $ k1 | $ 26– $ 27 | Reserviert für OS -Kernel | - |
$ gp | $ 28 | Globaler Zeiger | Ja (außer Bildcode) |
$ sp | $ 29 | Stapelzeiger | Ja |
$ fp | $ 30 | Rahmenzeiger | Ja |
$ ra | $ 31 | Absender | - |
Name | Nummer | Verwenden | Callee muss bewahren? |
---|---|---|---|
$ null | $ 0 | Konstante 0 | - |
$ bei | $ 1 | Assembler vorübergehend | Nein |
$ v0– $ v1 | $ 2– $ 3 | Werte für Funktionsrenditen und Expressionsbewertung | Nein |
$ a0– $ a7 | $ 4– $ 11 | Funktionsargumente | Nein |
$ t4– $ t7 | 12 bis 15 Dollar | Zeiträume | Nein |
$ S0– $ S7 | 16 bis 23 Dollar | Zeiträume gerettet | Ja |
$ t8– $ t9 | 24 bis 25 Dollar | Zeiträume | Nein |
$ k0– $ k1 | $ 26– $ 27 | Reserviert für OS -Kernel | - |
$ gp | $ 28 | Globaler Zeiger | Ja |
$ sp | $ 29 | Stapelzeiger | Ja |
$ S8 | $ 30 | Rahmenzeiger | Ja |
$ ra | $ 31 | Absender | - |
Register, die über einen Anruf erhalten bleiben, sind Register, die (nach Übereinkommen) nicht durch einen Systemanruf oder Verfahren (Funktion) geändert werden. Zum Beispiel müssen $ S-Register durch ein Verfahren, das sie verwenden muss zu). Im Gegensatz dazu wird $ ra automatisch durch einen normalen Funktionsaufruf (solche, die JAL verwenden) geändert, und $ t-Register müssen vor einem Verfahrensanruf vom Programm gespeichert werden (falls das Programm die Werte nach dem Anruf in ihnen benötigt).
Der UserSpace-Aufrufkonvent von positionsunabhängigem Code unter Linux erfordert zusätzlich, dass, wenn eine Funktion als $ T9-Register bezeichnet wird, die Adresse dieser Funktion enthalten muss.[39] Diese Konvention stammt aus dem System gegen ABI -Ergänzung für MIPs.[40]
Verwendet
MIPS -Prozessoren werden in verwendet eingebettete Systeme wie zum Beispiel Wohngateways und Router. Ursprünglich wurde MIPS für das Allzweck-Computer ausgelegt. In den 1980er und 1990er Jahren die MIPS -Prozessoren für persönlich, Arbeitsplatz, und Server Computer wurden von vielen Unternehmen verwendet, wie z. Digital Equipment Corporation, MIPS -Computersysteme, NEC, Pyramiden -Technologie, Sicortex, Siemens Nixdorf, Siliziumgrafik, und Tandem -Computer.
Historisch, Videospielkonsolen so wie die Nintendo 64, Sony Playstation, Playstation 2, und PlayStation Portable Gebrauchte MIPS -Prozessoren. MIPS -Prozessoren waren früher auch beliebt in Supercomputer In den neunziger Jahren, aber alle dieser Systeme haben das abgesetzt Top500 aufführen. Diese Verwendungszwecke wurden zunächst durch eingebettete Anwendungen ergänzt, aber in den 1990er Jahren wurde MIPS auf dem eingebetteten Prozessormarkt zu einer großen Präsenz, und in den 2000er Jahren waren die meisten MIPS -Prozessoren für diese Anwendungen.
Mitte bis Ende der neunziger Jahre wurde geschätzt, dass jeder dritte RISC-Mikroprozessor ein MIPS-Prozessor war.[41]
In den späten 2010er Jahren wurden MIPS -Maschinen immer noch in eingebetteten Märkten verwendet, einschließlich Automobile, drahtlosen Router, LTE Modems (hauptsächlich via via " Mediatek) und Mikrocontroller (zum Beispiel die Mikrochip -Technologie Pic32m). Sie sind größtenteils aus dem persönlichen, Server und Anwendungsraum verblasst.
Simulatoren
Offene virtuelle Plattformen (OVP)[42] Beinhaltet die frei verfügbare für nichtkommerzielle Verwendung Simulator Ovpsim, eine Bibliothek von Modellen von Prozessoren, Peripheriegeräten und Plattformen sowie APIs, mit denen Benutzer ihre eigenen Modelle entwickeln können. Die Modelle in der Bibliothek sind Open Source, geschrieben in C und umfassen die MIPS 4K, 24K, 34K, 74K, 1004K, 1074K, M14K, Microaptiv, Interaptiv, Proaptiv 32-Bit-Kerne und der MIPS 64-Bit 5K-Kernebereich von MIPS 64-Bit . Diese Modelle werden von Imperas erstellt und aufrechterhalten[43] und in Zusammenarbeit mit MIPS-Technologien wurden die MIPS-verifizierten Marke getestet und zugeordnet. Zu den MIPS-basierten Plattformen basieren sowohl Bare-Metal-Umgebungen als auch Plattformen zum Booten unmodifizierter Linux-Binärbilder. Diese Plattformen-Mulatoren sind als Quelle oder Binärdateien erhältlich und sind schnell, für den nicht kommerziellen Gebrauch kostenlos und einfach zu bedienen. Ovpsim wird von Imperas entwickelt und gepflegt und ist sehr schnell (Hunderte von Millionen von Anweisungen pro Sekunde) und für die Behandlung von homogenen und heterogenen Architekturen und Systemen mit mehreren homogenen und heterogenen Systemen gebaut.
Es gibt einen frei verfügbaren MIPS32 -Simulator (frühere Versionen simuliert nur den R2000/R3000) genannt Spim Für den Einsatz in der Bildung. Edumips64[44] ist ein GPL-grafischer plattformübergreifender MIPS64-CPU-Simulator, geschrieben in Java/Swing. Es unterstützt eine breite Teilmenge des MIPS64 ISA und ermöglicht es dem Benutzer, grafisch zu sehen, was in der Pipeline passiert, wenn ein Montageprogramm von der CPU ausgeführt wird.
MARS[45] ist ein weiterer GUI-basierter MIPS-Emulator für die Verwendung in der Bildung, insbesondere für die Verwendung mit Hennessy's Computerorganisation und Design.
Webmips[46] ist ein Browser-basierter MIPS-Simulator mit visueller Darstellung eines generischen, pipelierten Prozessors. Dieser Simulator ist sehr nützlich für die Registerverfolgung während der Schritt -für -Schritt -Ausführung.
Qtmips[47][48][49] Bietet eine einfache 5-Stadien-Pipeline-Visualisierung sowie die Visualisierung von Cache-Prinzipien für grundlegende Computerarchitekturkurse. Fenster, Linux, Mac OS und Online -Version ist verfügbar.
Fortgeschrittene kostenlose Emulatoren sind von der erhältlich Gxemul (früher bekannt als das MIPS64Emul -Projekt) und Qemu Projekte. Diese emulieren die verschiedenen MIPS III- und IV -Mikroprozessoren zusätzlich zu den gesamten Computersystemen, die sie verwenden.
Kommerzielle Simulatoren sind insbesondere für die eingebettete Verwendung von MIPS -Prozessoren erhältlich, zum Beispiel Wind River Simik (MIPS 4KC und 5KC, PMC RM9000, QED RM7000, Broadcom/Netlogic EC4400, Cavium Octeon I), Imperas (alle MIPS32- und MIPS64 -Kerne), riesige Systeme (R3000, R4000) und Kuhare (The MIPS4KE, MIPS24K, MIPS25KF und MIPS34K).
Der Schöpfersimulator[50][51][52]ist tragbar und ermöglicht es dem Benutzer, verschiedene Montagesprachen verschiedener Prozessoren zu lernen (Schöpfer hat Beispiele mit einer Implementierung von MIPS32- und RISC-V-Anweisungen).
Wepsim[53][54] ist ein Browser-basierter Simulator, bei dem eine Untergruppe von MIPS-Anweisungen mikroprogrammiert ist. Dieser Simulator ist sehr nützlich, um zu erfahren, wie eine CPU funktioniert (funktioniert (Mikroprogrammierung, MIPS -Routinen, Unterbrechungen, Systemaufrufe, etc.)
Siehe auch
- DLX
- Liste der MIPS -Architekturprozessoren
- MIPS -Architekturprozessoren
- Pipeline (Computing)
- PRPL Foundation
Verweise
- ^ Patterson, David (2014). Computerorganisation und Design (PDF). Elsevier. S. 4.16–4. ISBN 978-0-12-407726-3. Archiviert (PDF) Aus dem Original am 4. September 2019. Abgerufen 28. November, 2018.
- ^ a b Price, Charles (September 1995). MIPS IV -Befehlssatz (Revision 3.2), MIPS Technologies, Inc.
- ^ a b c d e f g h Sweetman, Dominic (1999). Siehe MIPS Run. Morgan Kaufmann Publishers, Inc. ISBN 1-55860-410-3.
- ^ "MIPS32 Architektur". MIPS. Archiviert von das Original am 21. März 2020. Abgerufen 20. März, 2020.
- ^ "MIPS64 Architektur". MIPS. Archiviert vom Original am 2. Februar 2020. Abgerufen 20. März, 2020.
- ^ "MIPS-3D ASE". Imaginationstechnologien. Archiviert von das Original am 3. Januar 2014. Abgerufen 4. Januar, 2014.
- ^ "MIPS16E". MIPS. Archiviert Aus dem Original am 16. Januar 2021. Abgerufen 20. März, 2020.
- ^ "MIPS Multithreading". MIPS. Archiviert vom Original am 26. Oktober 2020. Abgerufen 20. März, 2020.
- ^ Universität von Kalifornien, Davis. "ECS 142 (Compiler) Referenzen & Tools Seite". Archiviert Aus dem Original am 21. März 2011. Abgerufen 28. Mai, 2009.
- ^ a b Turley, Jim (8. März 2021). "Wait, What? MIPS Becomes RISC-V". Elektrotechnik Journal. Archiviert vom Original am 21. März 2021. Abgerufen 28. März, 2021.
- ^ "Silicon Graphics führt die erweiterte MIPS -Architektur ein, um die interaktive digitale Revolution zu leiten.". Silicon Graphics, Inc. 21. Oktober 1996. archiviert von das Original Am 10. Juli 2012.
- ^ a b Gwennap, Linley (18. November 1996). "Digital, MIPS fügen Multimedia -Erweiterungen hinzu" (PDF). Mikroprozessorbericht. 10 (15): 24–28. Archiviert (PDF) Aus dem Original am 20. Juli 2011.
- ^ "Silicon Graphics Vorschau stellt neue Hochleistungs-MIPS-Mikroprozessor-Roadmap vor" (Pressemitteilung). 12. Mai 1997.
- ^ a b c d e "MIPS Technologies, Inc. verbessert die Architektur, um das wachsende Bedarf an IP-Wiederverwendung und Integration zu unterstützen." (Pressemitteilung). Geschäftsdraht. 3. Mai 1999. Archiviert Aus dem Original am 1. Dezember 2018. Abgerufen 11. Februar, 2016.
- ^ "Die neueste Veröffentlichung von MIPS Architecture umfasst Virtualisierung und SIMD-Schlüsselfunktionalität zum Aktivieren der nächsten Generation von MIPS-basierten Produkten" (Pressemitteilung). MIPS -Technologien. 6. Dezember 2012. archiviert von das Original am 13. Dezember 2012.
- ^ "MIPS überspringt Release 4 inmitten von Bidding War". EE mal. 10. Dezember 2012. Archiviert Aus dem Original am 17. April 2014.
- ^ "Wave Computing erweitert die KI -Leitung, indem Sie die Kante der Cloud durch den Erwerb von MIPS abzielen". 15. Juni 2018. Archiviert vom Original am 25. November 2020. Abgerufen 19. Dezember, 2018.
- ^ "Wave Computing® startet die MIPS Open Initiative, um Innovationen für die renommierte MIPS® -Architektur zu beschleunigen". 17. Dezember 2018. Archiviert Aus dem Original am 28. Juli 2021. Abgerufen 19. Dezember, 2018.
- ^ "MIPS -Prozessor ISA, um 2019 offen zu sein - Phoronix". Archiviert vom Original am 6. März 2021. Abgerufen 18. Dezember, 2018.
- ^ Yoshida, Jundo (17. Dezember 2018). "Mips geht Open Source". EE mal. Abgerufen 18. Juli, 2022.
- ^ "MIPS R6 Architecture jetzt zur offenen Verwendung verfügbar". 28. März 2019. Archiviert vom Original am 4. August 2020. Abgerufen 16. Dezember, 2019.
- ^ "Wave Computing schließt seine MIPS Open -Initiative mit sofortiger Wirkung, Null Warnung". 15. November 2019. Archiviert vom Original am 7. März 2021. Abgerufen 16. Dezember, 2019.
- ^ "Wave Computing und MIPs entstehen aus Kapitel 11 Insolvenz" (Pressemitteilung). 1. März 2021. Archiviert vom Original am 13. Mai 2021. Abgerufen 11. März, 2021.
- ^ Shilov, Anton (25. August 2021). "Loongson reißt MIPS: Verwendet alter Code für neue CPUs". Toms Hardware. Archiviert Aus dem Original am 25. Januar 2022. Abgerufen 1. Dezember, 2021.
- ^ Harris, David Money; Harris, Sarah L. (2013). "Die Architektur". Digitales Design und Computerarchitektur. Elsevier. S. 294–369. doi:10.1016/b978-0-12-394424-5.00006-9. ISBN 9780123944245.
R-Typ ist kurz für den Register-Typ. R-Typ-Anweisungen verwenden drei Register als Operanden: zwei als Quellen und eine als Ziel.
- ^ "MIPS-marktführende RISC-CPU-IP-Prozessorlösungen". imgtec.com. Archiviert von das Original am 9. März 2016. Abgerufen 11. Februar, 2016.
- ^ "Silicon Graphics führt den kompakten MIPS -RISC -Mikroprozessorcode für hohe Leistung zu niedrigen Kosten ein" (Pressemitteilung). 21. Oktober 1996.
- ^ Sweetman, Dominic (2007). Siehe MIPS Run (2. Aufl.). San Francisco, Kalifornien: Morgan Kaufmann Publishers. S. 425–427. ISBN 978-0-12-088421-6.
- ^ "Verwenden der GNU Compiler Collection (GCC): MIPS DSP-integrierte Funktionen". gcc.gnu.org. Archiviert vom Original am 20. April 2017.
- ^ "Anweisungssatz Architektur - Linuxmips". www.linux-mips.org. Archiviert von das Original am 20. April 2017.
- ^ Sweetman, Dominic (2007). Siehe MIPS Run, 2. Auflage. Morgan Kaufmann. ISBN 978-0-12088-421-6.
- ^ "MIPS32 Anweisungssatz Schnellreferenz". Archiviert (PDF) Aus dem Original am 25. Januar 2022. Abgerufen 17. August, 2020.
- ^ a b "MIPS Abi Geschichte". Archiviert von das Original am 26. August 2018.
- ^ Eric Christopher (11. Juni 2003). "MIPS EABI -Dokumentation". [email protected] (Mailingliste). Archiviert Aus dem Original am 7. Mai 2020. Abgerufen 19. Juni, 2020.
- ^ "Nubi". Archiviert von das Original am 29. Juli 2021. Abgerufen 17. August, 2020.
- ^ Karen Miller (2006). "Die MIPS registrieren Nutzungskonventionen". Archiviert Aus dem Original am 25. Oktober 2020.
- ^ Hal Perkins (2006). "MIPS Calling Convention" (PDF). Archiviert (PDF) vom Original am 30. September 2020.
- ^ MIPSPRO N32 ABI Handbuch (PDF). Siliziumgrafik. Archiviert von das Original (PDF) am 17. Dezember 2021. Abgerufen 17. August, 2020.
- ^ "PIC -Code - Linuxmips". www.linux-mips.org. Archiviert von das Original am 21. September 2018. Abgerufen 21. September, 2018.
- ^ "System V -Anwendung Binärschnittstellen MIPS RISC -Prozessor -Ergänzung, 3. Auflage" (PDF). S. 3–12. Archiviert (PDF) vom Original am 12. November 2020. Abgerufen 17. August, 2020.
- ^ Rubio, Victor P. "Eine FPGA -Implementierung eines MIPS -RISC -Prozessors für Computerarchitekturausbildung" (PDF). New Mexico State University. Archiviert (PDF) Aus dem Original am 15. April 2012. Abgerufen 22. Dezember, 2011.
- ^ "OVP: Schnelle Simulation, kostenlose Open -Source -Modelle. Virtuelle Plattformen für die Softwareentwicklung". Ovpworld.org. Archiviert Aus dem Original am 8. Juni 2012. Abgerufen 30. Mai, 2012.
- ^ "Imperas". Imperas. 3. März 2008. Archiviert Aus dem Original am 14. Juni 2012. Abgerufen 30. Mai, 2012.
- ^ "Edumips64". Edumips.org. Archiviert Aus dem Original am 7. Mai 2012. Abgerufen 30. Mai, 2012.
- ^ "Mars MIPS Simulator - Missouri State University". Kurse.Corsouristate.edu. Archiviert Aus dem Original am 2. Mai 2012. Abgerufen 30. Mai, 2012.
- ^ "Webmips - MIPS CPU Piplined Simulation online". Archiviert von das Original am 31. Dezember 2012. Abgerufen 13. Januar, 2012. (Online -Demonstration) "Archivierte Kopie". Archiviert Aus dem Original am 10. Oktober 2011. Abgerufen 13. Januar, 2012.
{{}}
: CS1 Wartung: Archiviertes Kopie als Titel (Link) (Quelle) - ^ QTMIPS - MIPS -CPU -Simulator für Bildungszwecke an GitHub
- ^ Kočí, Karel (2018). Grafischer CPU -Simulator mit Cache -Visualisierung (PDF) (MSC). Tschechische technische Universität in Prag. Archiviert (PDF) vom Original am 19. November 2020. Abgerufen 25. Januar, 2021.
- ^ Gizopoulos, Dimitris (6. Dezember 2020). "Die Grundlagen von Qtmips-V3" (PDF). Nationale und Kapodistrianische Universität von Athen. Abgerufen 25. Januar, 2021.[Dead Link]
- ^ "Schöpfer: Simulador didáctico y Genérico para la programmación en enssamblador" (in Spanisch). 23. Juli 2021. Archiviert vom Original am 29. September 2021. Abgerufen 29. September, 2021.
- ^ "Creator Web mit MIPS32 Beispiel". Archiviert vom Original am 29. September 2021.
- ^ Ersteller -Quellcode an GitHub
- ^ "Wepsim mit einem MIPS32 -Beispiel". Wepsim.
- ^ Wepsim -Quellcode an GitHub
Weitere Lektüre
- Farquhar, Erin; Philip Bunce (1994). Handbuch des MIPS -Programmierers. Morgan Kaufmann Publishers. ISBN 1-55860-297-6.
- Patterson, David a; John L. Hennessy (2004). Computerorganisation und Design: Die Hardware-/Software -Oberfläche. Morgan Kaufmann Publishers. ISBN 1-55860-604-1.
- Sweetman, Dominic (1999). Siehe MIPS Run. Morgan Kaufmann Publishers. ISBN 1-55860-410-3.
- Sweetman, Dominic (2007). Siehe MIPS Run, 2. Auflage. Morgan Kaufmann Publishers. ISBN 978-0-12-088421-6.
Externe Links
- MIPS Processors
- MIPS -Architektur -Geschichtsdiagramm Bei der Wayback -Maschine (Archiviert 2013-05-30)
- Online -MIPS -Emulator
- MIPS -Anweisungen - MIPS -Befehlssatz