**MIPS (inglise keeles *Microprocessor without Interlocked Pipelined Stages*)** on RISC tüüpi käsustikuga mikroprotsessorite sari, mis loodi 1985. aastal Ameerika Ühendriikide firma MIPS Technologies poolt.

MIPSi erinevad versioonid graafiliselt selgitatunaMIPSi versioonide perekond
MIPSi esimesed versioonid MIPS I ja MIPS II olid vaid 32-bitise arhitektuuriga. Neile järgnevatel protsessorite versioonidel MIPS III, MIPS IV ja MIPS V oli ka 64-bitine arhitektuur. Seejärel lasti välja viis versiooni (vastavalt 1985, 2002, 2010, 2013 ja 2014) MIPS32 ja MIPS64, mis olid vastavalt 32- ja 64-bitised protsessorid. Alates kolmandast MIPS32 ja MIPS64 väljalaskest lisandusid ka microMIPS32/64 protsessorid. MIPSi 32- ja 64-bitised arhitektuurid on omavahel ühilduvad.

Algselt olid MIPSi tooted suunatud rohkem tööstuse ja serverite poole. 2010ndatel aga toodeti MIPS-arhitektuuri manussüsteemidele.

MIPS-arhitektuuri tootmine lõpetati 2021. aastal peale Wave Computing (mille tütarfirma oli MIPS Technologies) pankrotti minekut.

Versioonid
----------

### MIPS I

MIPS I kasutati esimest korda MIPSi R2000 ja R3000 protsessoritel. MIPS I algne nimetus oli MIPS, kuid see nimetati ümber peale MIPS II välja laskmist.

MIPS I oli kolmkümmend kaks 32-bitist üldkasutuses olevat registrit ($f0 - $f31), millest aritmeetilisteks arvutusteks sai kasutada vaid paarisarvulisi registreid. Ülejäänud registrid olid 64-bitiste arvude madalama järjekorra bittide hoiustamiseks. Nullregister on konstantse väärtusega, millesse kirjutamine on keelatud. 31. registrit kasutatakse programmi tagasipöördumisaadressi (inglise keeles *return address*) hoiustamiseks.

### MIPS II

MIPS II arhitektuur avaldati R6000 protsessoril. Arhitektuurile lisati aatomiline uuendus (protsess, kus kas kõik operatsioonid toimuvad või mitte ükski operatsioon ei toimu) ning võimekus ühilduda 64-bitise kaasprotsessoriga.

### MIPS III

MIPS III oli esimene MIPSi arhitektuur, mille käsustik oli 64-bitine. Arhitektuur suutis ühilduda ka varasemate (MIPS I ja MIPS II) 32-bitiste versioonidega. Arhitektuur lisandus esimest korda R4000 protsessoril. Protsessoritele lisati võimekus sisse lugeda *unsigned* tüüpi sõnu. Arhitektuuriga lisandusid 64-bitised täisarvud ning eraldi 64-bitised aritmeetika ja nihutamise juhendid.

### MIPS IV

MIPS IV lisas võimaluse matemaatika kaasprotsessorile (inglise keeles *Floating-point Unit* ehk FPU) juhiseid register + register meetodil saata. Samuti sai MIPS IV käsustik uued piirangud sisse lugemise ning salvestamise instruktsioonidele. Käsu baasregister peab olema vaikimisi seadistatud, samamoodi nagu ka käsk ise (eelnev piirang eemaldati MIPS32 arhitektuuris, jäeti vaid reegel, et efektiivaadress peab olema vaikimisi seadistatud). Varasemastes MIPSi versioonides pidi lisama kaks käsku, et eraldada MFLO (inglise keeles *move from low*) või MFHI (inglise keeles *move from high*) käske sellele järgnevast korrutamis- või jagamistehtest. Eelnev eemaldati MIPS IV käsustikust. MIPS IV kasutati R5000 ja R10000 protsessorites.

### MIPS V

Viienda MIPSi versiooniga lisandus uus andmetüüp *Paired Single*. See koosneb kahest 32-bitisest ujukomaarvust, mis asuvad 64-bitisest ujukoma arvu registris. Tänu sellele laienes korduvate ujukomaarvude arvutuste ribalaius.

### MIPS32 ja MIPS64

Esimene MIPS32 versioon sisaldas kõike MIPS I ja MIPS II käsustikust. Sellele lisati ka elemente 64-bitistest R4000 ja R5000 protsessoritest. MIPS64 esimene versioon sisaldas elemente MIPS III, MIPS IV ja MIPS V käsustikust. Lisaks on sellel olemas MIPS32 režiim, millega saab jooksutada 32-bitist käsustikku. Nii MIPS32 kui ka MIPS64le lisati standardiseeritud signaalprotsessori (lühend DSP, inglise keeles *digital signal processor*) korrutamise (lühend MUL) ja korrutamise ja liitmise (lühend MADD) juhised.

MIPS32 ja MIPS64 kuuendas ja viimases väljalaskes eemaldati täielikult *Branch Likely* käsustiku juhendid. Lisaks liigutati täisarvude akumulaatori juhised ja HI/LO registrid baasväljalaskest DSP moodulile. Bittide ümberpööramise ja baitide joondused instruktsioonid aga liigutati vastupidiselt baasväljalaskesse.

### MicroMIPS

MicroMIPS on 32-bitise arhitektuuriga ning omab 16-bitist käsustikku. Seadet kasutatakse erinevatel mikrokontrollitel ning järgnevatel MIPSi protsessorite tuumades: M14K, microAptiv ja Warrior M51xx and M62xx. MIPSi kolmandal väljalaskel (avaldatud 2010. aastal) lisati microMIPS nii 31- kui ja 64-bitisele arhitektuurile (eesmärgiga asendada eelnevalt eksisteerinud MIPS16e ASE). Igal järgneval MIPS32 ja MIPS64 arhitektuuri väljalaskel oli olemas vastav microMIPSi versioon, millel on täpselt samad funktsioonid, mis on olemas vastavalt MIPS32 või MIPS 64 versioonidel. Kuigi microMIPS ei toeta arhitektuur *Branch Likely* käsustikku on olemas võrdväärsed operatsioonid. Kuuendas MIPS-arhitektuuri väljalaskes eemaldati MIPS16e täielikult, ning microMIPSist sai ainus väiksema koodisuuruse implementeerija.

MIPS32 ja MIPS64 lisad
----------------------

Koos MIPS32 ja MIPS64 avalikustati ka mitmeid laiendusi, mida kutsuti ASEdeks, inglise keeles *Application Specific Extensions*.

### MIPS MCU

MIPS MCU moodul on loodi MIPS32 ja microMIPS käsustikuga koos töötamiseks. Selle eesmärk on laiendada katkestuste kontrollerite tuge, vähendada katkestuste latentsust ning täiustada mikrokontrollerite I/O (sisend-väljund, inglise keeles *Input/Output*) perifeerseid kontrollfunktsioone. MCU avaldati koos MIP32 M14K perekonna protsessoritega ning seda kasutatakse lisaks veel microAptiv, M51xx ja M62xx tuumade perekondades.

MCU katkestuste iseärasused on järgmised:

* tähtsamate katkestuste täitmine ja vektorite loomine on eraldatud operatsioonid;
* pakub 16-bitist vektori nihkeaadressi;
* toetab kuni 256 katkestust välise katkestuskontrolleri (EIC, inglise keeles *External Interrupt Controller*) režiimis;
* 8 riistvaralist katkestus*pin*'i.

MCU I/O perifeeriakontrolli lisati aatomilise biti *set/clear* instruktsioonid, mille abil sai I/O registris asuvaid bitte ilma katkestuseta ning turvaliselt muuta.

MCU I/O perifeeriakontrollil on järgnevad iseärasused:

* automatiseeritud katkestuste proloog, mis lisab riistvara, millega saab süsteemistaatust enne katkesust salvestada ning uuenda;
* automatiseeritud katkestuste epiloog, mis taastab katkestuse lõppedes eelneva süsteemi oleku, mis oli salvestatud pinusse;
* ahelkatkestused, mis vähendab katkestuste ootele panemisele abil tsüklite arvu, mille vältel salvestatakse ja taastatakse mitmeid aktiivseid katkestusi.

### MIPS16e

MIPS16e moodul on laiendus MIPS32 ja MIPS 64 arhitektuuridele. Võrreldes 32-bitise tarkvaraga, on MIPS16e'ga võimalik programmi jooksutamiseks kasutada samal võimsusel 40% võrra vähem mälu. Lisaks parandab MIPS16e käskude vahemälu *hit rate*'i. MIPS16e toetab 8-, 16-, 32- ja 64-bitiseid andmetüüpe (viimast vaid siis, kui MIPS16e on kasutuses MIPS64ga). Sellel on kaheksa üldotstarbelist registrit ja mitmeid kindla otstarbega registreid. MIPS16e2 on MIPS16e uuendatud versioon, mis lisas parandas koodi kompaktsust ning üleüldist jõudlust. Kuuendas MIPSi väljalaskes eemaldati MIPS16e arhitektuurist, ning microMIPSist sai ainus väiksema koodisuuruse implementeerija.

### MIPS DPS

MIPS DPS on MIPSi moodul, mis on loodud MIPS32/64 ja microMIPS32/64le. See anti välja MIPS32/64 viiendas väljalaskes. MIPS DSP ülesandeks digitaalse signaalitöötluse ja muude multimeediaoperatsioonide jõudluse parandamiseks.

### MIPS SIMD

MIPS SIMD (inglise keeles *Single Instruction Multiple Data*) arhitektuur ehk MSA anti välja koos MIPS32 ja MIPS64 viienda väljalaskega. Selle eesmärgiks on kiirendada näiteks andmekaevandust, pildi- ja videotöötlust ning arvuti ja inimese vahelist suhtlust.

Sellel on rohkem kui 150 uut käsku, mis töötavad 32 vektorregistril järgnevate andmetüüpidega:

* 8-, 16-, 32- ja 64-bitised täisarvud;
* 16- ja 32-bitised püsikomaarvud;
* 32- ja 64-bitised ujukomaarvud.

MIPS32 ja MIPS64 viiendas väljalaskes asendas MSA moodul täielikult MDMX mooduli ja DSP 64-bitise mooduli.

### MIPS Virtualization

MIPS Virtualization loodi selleks, et parandada MIPSi toodete privaatsust ning turvalisust virtuaalmasinate abil. Seda saab kasutada nii MIPS32, MIPS64, microMIPS32 kui ka microMIPS64l. Moodul lisati arhitektuurile MIPS32 ja MIPS64 viiendas väljalaskes. Virtualiseerimiseks kasutatakse programmi Virtual Machine Monitor, mis on ühtlasi ka hüperviisor.

### MIPS Multi-threading

MIPS Multi-threading moodul toetab MIPS32, MIPS64, microMIPS32 ja microMIPS64. Nii MIPS32l baseeruv interAptiv protsessor kui ka MIPS64 baseeruv I6500 protsessor toetavad virtuaalset töötlemiselemendi (VPE, inglise keeles *virtual processing element*) ja virtuaalse protsessori (VP, inglise keeles *virtual processor*) tasemel *multithreading*'ut. Eelneval juhul paistab operatsioonisüsteemile iga VPE/VP lõim eraldi tuumana. Kuna igas VPEs on täielik koopia arvuti protsessori staatusest, siis Linuxi operatsioonisüsteem näeb iga VPEd eraldi protsessorina. InterAptivi protsessorite perekond toetab kuni kahte VPEd protsessori tuuma kohta. I6400 ja I6500 protsessori perekonnad lubavad kuni nelja virtuaalprotsessorit protsessori tuuma kohta.

Viited
------

1. ↑  "What is MIPS?". *www.computerhope.com* (inglise). 16. oktoober 2019. Vaadatud 25. aprillil 2023.
2. 1 2 3 4 5 6 7 8 9 10  "MIPS® Architecture For Programmers Volume I-A: Introduction to the MIPS64® Architecture" (PDF). *MIPS* (inglise). 20. august 2014. Lk-d 21, 23–28. Vaadatud 26. aprillil 2023.
3. ↑  Turley, Jim (8. märts 2021). "Wait, What? MIPS Becomes RISC-V". *EEJournal* (inglise). Vaadatud 25. aprillil 2023.
4. ↑  Sweetman, Dominic (1999). *See MIPS Run* (inglise). Morgan Kaufmann. Lk 32. ISBN 978-1-55860-410-0.
5. ↑  Sweetman, lk 431.
6. 1 2 3 4  "MIPS® Architecture For Programmers Volume I-A: Introduction to the MIPS32® Architecture" (PDF). *MIPS* (inglise). 20. august 2014. Lk-d 12, 21, 24, 26–27, 88. Vaadatud 25. aprillil 2023.
7. ↑  Sweetman, lk 239.
8. ↑  Sweetman, lk 19.
9. 1 2 3  Price, Charles (september 1995). "MIPS IV Instruction Set" (PDF). *cs.cmu.edu* (inglise). Vaadatud 28. aprillil 2023.
10. ↑  Sweetman, lk 30.
11. ↑  Sweetman, lk 30.
12. ↑  Sweetman, lk 428.
13. ↑  "MIPS Technologies, Inc. Enhances Architecture to Support Growing Need for IP Re-Use and Integration". *The Free Library* (inglise). 3. mai 1999. Originaali arhiivikoopia seisuga 1. detsember 2018. Vaadatud 27. aprillil 2023.
14. ↑  "microMIPS Architecture". *MIPS* (inglise). Vaadatud 26. aprillil 2023.
15. 1 2 3 4  "MIPS MCU". *MIPS* (inglise). Vaadatud 29. aprillil 2023.
16. ↑  "MIPS16e". *MIPS* (inglise). Vaadatud 30. aprillil 2023.
17. ↑  "MIPS32® Architecture for Programmers Volume IV-a: The MIPS16e™ Application-Specific Extension to the MIPS32® Architecture" (PDF). *MIPS* (inglise). 16. juuli 2013. Lk 33. Vaadatud 30. aprillil 2023.
18. ↑  "MIPS32® Architecture for Programmers: MIPS16e2 Application-Specific Extension Technical Reference Manual" (PDF). *MIPS* (inglise). 26. aprill 2016. Lk 5. Vaadatud 30. aprillil 2023.
19. ↑  "MIPS DSP". *MIPS* (inglise). Vaadatud 30. aprillil 2023.
20. ↑  "MIPS DSP Built-in Functions". *gcc.gnu.org* (inglise). Vaadatud 30. aprillil 2023.
21. 1 2  "MIPS® Architecture for Programmers Volume IV-j: The MIPS64® SIMD Architecture Module" (PDF). *MIPS* (inglise). 3. veebruar 2016. Lk 34. Vaadatud 30. aprillil 2023.
22. ↑  "MIPS Virtualization". *MIPS* (inglise). Vaadatud 30. aprillil 2023.
23. ↑  "MIPS64® Architecture for Programmers Volume IV-i: Virtualization Module of the MIPS64® Architecture" (PDF). *MIPS* (inglise). 10. detsember 2013. Lk 19. Vaadatud 30. aprillil 2023.
24. ↑  "MIPS Multi-Threading". *MIPS* (inglise). Vaadatud 30. aprillil 2023.