Obsah
1. Mikroprocesory ARM a instrukční sada Thumb
2. Instrukce určené pro provádění ALU operací
3. ALU operace používající tříbitovou a osmibitovou konstantu
7. Podpora pro práci se zásobníkem
1. Mikroprocesory ARM a instrukční sada Thumb
V předchozí části seriálu o architekturách počítačů jsme si popsali většinu instrukcí používaných u mikroprocesorů s architekturou ARM ve chvíli, kdy tyto procesory pracují v takzvaném „režimu ARM“. Připomeňme si, že se jedná o původní režim těchto procesorů, při němž se ideálně v každém taktu načte jedno instrukční slovo o šířce 32 bitů (výjimku tvoří především skoky a taktéž reakce na přerušení). Díky takto širokému instrukčnímu slovu bylo možné instrukční sadu navrhnout tak, aby se v každé instrukci nacházely čtyři podmínkové bity, aby byly aritmetické a logické instrukce tříadresové (tj. obsahovaly adresy dvou zdrojových registrů a registru cílového) a taktéž to, aby se kromě kódu vlastní operace mohl v instrukcích uvést i počet bitů, o něž se má hodnota druhého operandu posunout či zrotovat v barrel shifteru. Tato instrukční sada vycházela z dobových požadavků a zkušeností, kdy se po několika nevydařených projektech se složitými procesory s architekturou CISC konstruktéři obrátili opačným směrem a začali se zabírat procesory s architekturou, pro niž se později vžil název RISC.
Ovšem mikroprocesory ARM, které byly původně navrženy pro využití v osobních počítačích, se postupně začaly používat i v jiných oblastech, především ve vestavěných (embedded) systémech, kde vládnou poněkud jiné požadavky. Ve vestavěných systémech je totiž kromě nízké spotřeby, popř. rychlé reakce na přerušení, kladen i velký důraz na to, aby binární obrazy programů byly co nejmenší, protože programy jsou ukládány do pamětí ROM/EPROM/EEPROM/Flash s relativně vysokou cenou za jeden bit a nikoli na vysokokapacitních paměťových médiích (pevné disky) tak, jak je tomu na osobních počítačích. Navíc došlo k postupné změně i v oblasti osobních počítačů – rychlosti procesorů rostly větším tempem, než rychlost pamětí DRAM – což s sebou přinášelo nutnost použití drahých vyrovnávacích pamětí založených na technologii SRAM. V jeden okamžik se dokonce zdálo, že tento vývoj bude znamenat konec procesorů typu RISC, které jsou mj. typické i tím, že používají instrukční sady s instrukcemi pevné šířky (asi nejblíže se klasické architektuře RISC v současnosti blíží mikroprocesory MIPS, kterými jsme se již v tomto seriálu zabývali).
Odpovědí společnosti ARM na obě nové skutečnosti – požadavek na menší velikost binárních obrazů programů a zvyšující se rozdíl v rychlosti CPU a DRAM – bylo zavedení nové alternativní instrukční sady nazvané Thumb, v níž mají všechny instrukce šířku jen šestnáct bitů, což znamená, že v paměti určité kapacity lze uložit přibližně dvakrát tolik instrukcí Thumb, něž původních RISCových instrukcí (slovo „přibližně“ je zde použito především z toho důvodu, že se v kódu vyskytují i 32bitové konstanty, nezávisle na použité instrukční sadě). Ovšem menší šířka instrukcí znamenala i určitá omezení. Zcela zmizely podmínkové kódy, které zůstaly zachovány jen u instrukce podmíněného skoku. Také se možnost použití barrel shifteru omezila jen na určitou skupinu instrukcí. Ovšem asi největší změnou bylo to, že se sada pracovních registrů R0-R15 rozdělila na spodní polovinu R0-R7 (Lo registers) a horní polovinu R8-R15 (Hi registers), přičemž většina instrukcí dokáže pracovat pouze s prvními osmi registry, zatímco některé registry z horní skupiny mají speciální význam (čítač instrukcí, ukazatel na vrchol zásobníku atd.).
2. Instrukce určené pro provádění ALU operací
Výše zmíněné rozdělení pracovních registrů na dvě poloviny o různých významech je patrné i na těch instrukcích, pomocí nichž se realizují aritmetické a logické operace. Šestnáctibitové instrukční slovo je u těchto instrukcí rozděleno na čtyři části: šestibitový prefix mající binární hodnotu 010000, čtyřbitový kód aritmetické či logické operace, tříbitový index druhého zdrojového registru Rs a taktéž tříbitový index prvního zdrojového registru Rd, který je současně i registrem cílovým, tj. registrem, do nějž se uloží výsledek operace (výjimku tvoří instrukce komparace a testu, u nichž se výsledek porovnání nikam neukládá). Zde je ostatně patrné i další omezení instrukční sady Thumb, kdy do úzkého instrukčního slova není možné vložit indexy tří registrů, ale pouze registrů dvou, což potenciálně zvyšuje četnost přesunů dat mezi registry a navíc se i snižuje účinnost některých optimalizačních technik prováděných buď přímo programátory v assembleru nebo překladači:
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 0 | 1 | 0 | 0 | 0 | 0 | operace | Rs | Rd | +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
Podporováno je celkem šestnáct aritmetických a logických operací (+ operací bitového posunu a rotace) určených bity 6 až 9 instrukčního slova. Tyto operace jsou vypsány v tabulce pod tímto odstavcem. Ve třetím sloupci tabulky je pro ilustraci uvedena ekvivalentní instrukce dostupná v režimu ARM):
Kód | Operace | Ekvivalent ARM | Význam |
---|---|---|---|
0000 | AND Rd, Rs | ANDS Rd, Rd, Rs | Rd:= Rd AND Rs |
0001 | EOR Rd, Rs | EORS Rd, Rd, Rs | Rd:= Rd EOR Rs (EOR=XOR) |
0010 | LSL Rd, Rs | MOVS Rd, Rd, LSL Rs | Rd := Rd << Rs (bitový posun) |
0011 | LSR Rd, Rs | MOVS Rd, Rd, LSR Rs | Rd := Rd >> Rs (bitový posun) |
0100 | ASR Rd, Rs | MOVS Rd, Rd, ASR Rs | Rd := Rd ASR Rs (aritmetický posun) |
0101 | ADC Rd, Rs | ADCS Rd, Rd, Rs | Rd := Rd + Rs + C-bit |
0110 | SBC Rd, Rs | SBCS Rd, Rd, Rs | Rd := Rd – Rs – NOT C-bit |
0111 | ROR Rd, Rs | MOVS Rd, Rd, ROR Rs | Rd := Rd ROR Rs (rotace) |
1000 | TST Rd, Rs | TST Rd, Rs | Nastavení příznaků podle operace Rd AND Rs |
1001 | NEG Rd, Rs | RSBS Rd, Rs, #0 | Rd = -Rs |
1010 | CMP Rd, Rs | CMP Rd, Rs | Nastavení příznaků podle operace Rd – Rs |
1011 | CMN Rd, Rs | CMN Rd, Rs | Nastavení příznaků podle operace Rd + Rs |
1100 | ORR Rd, Rs | ORRS Rd, Rd, Rs | Rd := Rd OR Rs |
1101 | MUL Rd, Rs | MULS Rd, Rs, Rd | Rd := Rs * Rd |
1110 | BIC Rd, Rs | BICS Rd, Rd, Rs | Rd := Rd AND NOT Rs |
1111 | MVN Rd, Rs | MVNS Rd, Rs | Rd := NOT Rs |
3. ALU operace používající tříbitovou a osmibitovou konstantu
Instrukční sada Thumb poskytuje pro vybrané operace i instrukce, v nichž se vyskytuje konstanta, popř. v nichž je možné použít tříadresový kód. Tyto instrukce mohou být reprezentovány operačními slovy tří formátů. První formát vypadá následovně:
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 0 | 0 | 0 | 1 | 1 | 0 | op| Rn | Rs | Rd | +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
Jak je z výše uvedeného formátu instrukčního slova patrné, je v něm pro uložení kódu operace ponechán pouze jeden bit, ovšem slovo navíc obsahuje indexy tří pracovních registrů: dvou registrů zdrojových a jednoho registru cílového. Pomocí již zmíněného jednoho bitu je rozhodnuto, která aritmetická operace se má provést:
Kód | Operace | Význam |
---|---|---|
0 | ADD Rd, Rs, Rn | Rd:= Rs + Rn |
1 | SUB Rd, Rs, Rn | Rd:= Rs – Rn |
Druhý formát používá instrukční slovo rozdělené prakticky stejným způsobem, až na ten rozdíl, že se namísto indexu registru Rn ve slově vyskytuje tříbitová konstanta vystupující v roli druhého operandu:
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 0 | 0 | 0 | 1 | 1 | 1 | op| const. | Rs | Rd | +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
Význam bitu číslo 9 je následující:
Kód | Operace | Význam |
---|---|---|
0 | ADD Rd, Rs, #const | Rd:= Rs + const |
1 | SUB Rd, Rs, #const | Rd:= Rs – const |
V případě, že je nutné v instrukci použít větší konstantu, lze využít následující instrukční formát, v němž je obsažen index pouze jednoho pracovního registru, ovšem současně se v instrukčním slovu nachází i osmibitová konstanta:
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 0 | 0 | 1 |operace| Rd | osmibitová konstanta | +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
Tímto instrukčním slovem mohou být reprezentovány čtyři operace:
Kód | Operace | Význam |
---|---|---|
00 | MOV Rd, #const | Rd:= const |
01 | CMP Rd, #const | Nastavení příznaků podle Rd – const |
10 | ADD Rd, #const | Rd:= Rd + const |
11 | SUB Rd, #const | Rd:= Rd – const |
Zajímavé je, že v překvapivě velkém počtu případů je použití „pouze“ osmibitových konstant dostatečné. Ostatně se stačí podívat na reálné programy, v nichž se hojně vyskytují počítané programové smyčky, v nichž se hodnota počitadla zvyšuje o jedničku, v jiných částech programu se pracuje s osmibitovými znaky, osmibitovými barvovými složkami RGB atd.
4. Bitové posuny a rotace
Již ve druhé kapitole se v tabulce se šestnácti aritmetickými a logickými operacemi vyskytovalo několik operací určených pro provádění bitových posunů a rotací. Ve skutečnosti však instrukční sada Thumb obsahuje pro bitové posuny a rotace ještě několik dalších instrukcí, v jejichž instrukčním slovu se mj. nachází i pětibitová konstanta udávající počet bitů, o něž se má hodnota zdrojového registru posunout. Formát instrukčního slova je v tomto případě následující:
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 0 | 0 | 0 |operace| offset | Rs | Rd | +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
Kód operace je zapsán ve dvojici bitů s indexy 11 a 12, takže by se mohlo zdát, že je možné rozlišit až čtyři operace. Ve skutečnosti je však možné použít pouze bitové kombinace 00, 01
a 10, protože zbývající bitová kombinace 11 je již obsazena instrukčním slovem popsaným ve třetí kapitole:15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 0 | 0 | 0 | 1 | 1 | 0 | op| Rn | Rs | Rd | +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
V následující tabulce jsou všechny tři podporované operace bitového posunu a rotace s využitím konstanty vypsány:
Kód | Operace | Ekvivalent ARM | Význam |
---|---|---|---|
00 | LSL Rd, Rs, #offset | MOVS Rd, Rs, LSL #offset | Rd := Rs << #offset |
01 | LSR Rd, Rs, #offset | MOVS Rd, Rs, LSR #offset | Rd := Rs >> #offset |
10 | ASR Rd, Rs, #offset | MOVS Rd, Rs, ASR #offset | Rd := Rs ASR #offset (aritmetický posun) |
5. Nepodmíněné skoky
V této kapitole si popíšeme formát instrukcí nepodmíněných skoků. Základní instrukcí skoku je instrukce B (branch), která má ve svém instrukčním slovu vyhrazeno celých jedenáct bitů pro uložení offsetu skoku. Jedná se tedy o relativní skok, který je obecnější než skok absolutní (ovšem záleží i na dalších vlastnostech procesoru a jeho MMU). Jedenáctibitová konstanta uložená v instrukci skoku je nejprve posunuta o jeden bit doleva, protože všechny instrukce Thumb musí být v operační paměti zarovnány na dva bajty. Posléze se vypočtená dvanáctibitová hodnota připočte k obsahu registru PC, který je ovšem v době výpočtu adresy již zvýšen o hodnotu 4 (v případě režimu ARM byl posun roven osmi, zde pouze čtyřem, protože instrukce mají poloviční šířku):
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 | 1 | 1 | 0 | 0 | jedenáctibitová konstanta | +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
Implementačně zajímavější je formát instrukce BL neboli branch and link. Již z předchozích částí tohoto seriálu víme, že tato instrukce provádí nepodmíněný skok, ovšem současně ukládá návratovou adresu do registru nazvaného LR (link register):
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 | 1 | 1 | 1 | H | jedenáctibitová konstanta | +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
Zajímavost této instrukce spočívá v tom, že obsah jedenáctibitové konstanty uložené v instrukčním slovu je možné zpracovat rozdílným způsobem. Pokud je bit H s indexem 11 nastaven na nulu, je konstanta posunuta o dvanáct bitů doleva a následně je přičtena k obsahu registru PC. Výsledek této operace je uložen do registru LR, skok se ovšem prozatím neprovede. Po této instrukci následuje instrukce se stejným formátem, ovšem s bitem H nastaveným na jedničku. V tomto případě se jedenáctibitová konstanta posune doleva o jeden bit a výsledek této operace je přičten k obsahu registru LR (nastaveného předchozí operací). Výsledkem je, že registr LR nyní obsahuje 23bitovou adresu, na níž je následně proveden skok (přesun do PC), s tím, že do LR je současně uložena i návratová adresa:
LR := PC + (Offset1 << 12) PCtemp = PC PC := LR + (Offset2 < 1) LR := PCtemp + 2
6. Podmíněné skoky
Samozřejmě nesmíme zapomenout ani na instrukce podmíněného skoku. Formát instrukčního slova podmíněných skoků se liší od formátu uvedeného v předchozí kapitole, a to především z toho důvodu, že do instrukčního slova je nutné přidat i kód podmínky, který je čtyřbitový. Z tohoto důvodu je offset uložený přímo v instrukčním slovu pouze osmibitový. Vzhledem k tomu, že instrukce jsou v paměti zarovnány na sudé adresy, je osmibitový offset přečtený z instrukčního slova nejprve posunut o jeden bit doleva, což v praxi znamená možnost skoku v rozmezí –256 až 254 (s tím, že se při skoku již registr PC stačil zvýšit o hodnotu 4), což zhruba znamená, že se může provést podmíněný skok o ±120 instrukcí. V praxi se ukazuje, že pro velké množství konstrukcí typu if-then-else, popř. pro počítané smyčky for i pro nepočítané smyčky (while, do-while) je tento rozsah dostačující. Pokud by bylo nutné provést podmíněný skok na větší vzdálenost, musí se využít techniky známé i z jiných typů procesorů: provede se krátký skok s opačnou podmínkou o jednu instrukci (tedy podmíněný přeskok/vynechání instrukce – skip), přičemž tato instrukce je ve skutečnosti „dlouhým“ nepodmíněným skokem.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 | 1 | 0 | 1 | podmínka | osmibitová konstanta | +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
Pomocí bitů 8 až 11 je v instrukčním slovu zakódována podmínka, při jejímž splnění se skok provede:
Kód | Operace | Význam | Předchozí operace porovnání |
---|---|---|---|
0000 | BEQ label | skok v případě, že Z==1 (rovno) | signed i unsigned |
0001 | BNE label | skok v případě, že Z==0 (nerovno) | signed i unsigned |
0010 | BCS label | skok v případě, že C==1 (větší nebo rovno) | unsigned |
0011 | BCC label | skok v případě, že C==0 (menší než) | unsigned |
0100 | BMI label | skok v případě, že N==1 (záporný výsledek) | signed |
0101 | BPL label | skok v případě, že N==0 (kladný nebo nulový výsledek) | signed |
0110 | BVS label | skok v případě, že V==1 (přetečení) | signed |
0111 | BVC label | skok v případě, že V==0 (nedošlo k přetečení) | signed |
1000 | BHI label | skok v případě, že C==1 & Z==0 (vetší než) | unsigned |
1001 | BLS label | skok v případě, že C==0 | Z==1 (menší nebo rovno) | unsigned |
1010 | BGE label | skok v případě, že N==V (větší nebo rovno) | signed |
1011 | BLT label | skok v případě, že N!=V (menší než) | signed |
1100 | BGT label | skok v případě, že Z==0 & N==V (větší než) | signed |
1101 | BLE label | skok v případě, že Z==1 N!=V (menší nebo rovno) | signed |
Zajisté nebude velkým překvapením fakt, že výše uvedené kódy operací podmíněných skoků jsou shodné s podmínkovými kódy používanými v režimu ARM. Bližší informace o těchto kódech lze nalézt v předposlední části tohoto seriálu.
7. Podpora pro práci se zásobníkem
V instrukční sadě Thumb se nachází i několik typů instrukcí určených pro práci s hodnotami uloženými na zásobníku. Jako ukazatel na vrchol zásobníku se přitom využívá registru R13, který se neformálně ve stejném významu používá i v režimu ARM (zde však jde pouze o konvenci, nikoli o použití vynucené instrukční sadou). Prvním typem instrukcí pro práci se zásobníkem jsou instrukce umožňující přímo zvýšit či snížit obsah SP/R13 o zadanou konstantu (která je však nejprve posunuta o jeden bit doleva):
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | S | konstanta | +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
Bit S s indexem 7 určuje prováděnou operaci:
Kód | Operace | Význam |
---|---|---|
0 | ADD SP, #const | SP := SP + #const |
1 | ADD SP, #-const | SP := SP – #const |
8. Instrukce typu Push a Pop
Druhým typem instrukcí určených pro práci se zásobníkem jsou instrukce typu push a pop, které mohou v případě instrukční sady Thumb pracovat nikoli pouze s jediným registrem, ale s libovolnou kombinací všech osmi nižších pracovních registrů R0-R7 (čehož lze mnohdy využít pro efektivní volání subrutin atd.). Formát instrukcí push a pop je následující:
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+ | 1 | 0 | 1 | 1 | L | 1 | 0 | R | seznam registrů | +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
Jak je z výše uvedeného formátu instrukcí push a pop patrné, obsahuje instrukční slovo několik konstantních bitů, dále pak bit L s indexem 11, bit R s indexem osm a konečně bitové pole reprezentované bity s indexy 0 až 7. V tomto bitovém poli je určeno, kterých pracovních registrů se bude operace push či pop týkat. Lze zapsat libovolnou kombinaci a samozřejmě není nutné, aby operace push a pop probíhaly nad stejnými registry (je to podobné, jako u instrukcí LDM a STM používaných v režimu ARM). Význam bitu L spočívá v tom, že se pomocí něho rozlišuje, která operace se provede:
Bit L | Operace |
---|---|
0 | PUSH registry |
1 | POP registry |
Zbývá nám popsat význam bitu R. Ten vlastně rozšiřuje bitové pole o registr LR (link register) resp. PC (program counter). Pokud je tento bit nastaven, týká se vybraná operace jak pracovních registrů (zapsaných v bitovém poli), tak i registru LR v případě operace PUSH, popř. registru PC v případě operace POP. Význam je zřejmý – tímto způsobem lze relativně snadno implementovat inicializaci subrutiny (s uložením návratové hodnoty na zásobník) i návrat ze subrutiny:
Bit L | Bit R | Operace |
---|---|---|
0 | 0 | PUSH registry |
1 | 0 | POP registry |
0 | 1 | PUSH LR, PUSH registry |
1 | 1 | POP registry, POP PC (tj. skok) |
9. Odkazy na Internetu
- Introduction to ARM thumb
http://www.eetimes.com/discussion/other/4024632/Introduction-to-ARM-thumb - ARM, Thumb, and ThumbEE instruction sets
http://www.keil.com/support/man/docs/armasm/armasm_CEGBEIJB.htm - An Introduction to ARM Assembly Language
http://dev.emcelettronica.com/introduction-to-arm-assembly-language - Processors – ARM
http://www.arm.com/products/processors/index.php - The ARM Instruction Set
http://simplemachines.it/doc/arm_inst.pdf - ARM Architecture (Wikipedia)
http://en.wikipedia.org/wiki/ARM_architecture - BBC BASIC
http://www.bbcbasic.co.uk/bbcbasic.html - BBC BASIC
http://mdfs.net/Software/BBCBasic/ - BBC BASIC (Z80) for the ZX Spectrum
http://mdfs.net/Software/BBCBasic/Spectrum/ - BBC BASIC (Wikipedia CZ)
http://en.wikipedia.org/wiki/BBC_BASIC - MIPS-3D® ASE
http://www.mips.com/products/architectures/mips-3d-ase/ - An introduction to SPARC's SIMD offerings
http://mikeburrell.wordpress.com/2007/12/14/an-introduction-to-sparcs-simd-offerings/ - MIPS64TM Architecture for Programmers Volume IV-c: The MIPS-3DTM Application-Specific Extension to the MIPS64TM
http://www.weblearn.hs-bremen.de/risse/RST/docs/MIPS/MD00099–2B-MIPS3D64-AFP-01.11.pdf - Visual Instruction Set
http://www.enotes.com/topic/Visual_Instruction_Set - NEON
http://www.arm.com/products/processors/technologies/neon.php - Architecture and Implementation of the ARM Cortex-A8 Microprocessor
http://www.design-reuse.com/articles/11580/architecture-and-implementation-of-the-arm-cortex-a8-microprocessor.html - Multimedia Acceleration eXtensions (Wikipedia)
http://en.wikipedia.org/wiki/Multimedia_Acceleration_eXtensions - AltiVec (Wikipedia)
http://en.wikipedia.org/wiki/AltiVec - Visual Instruction Set (Wikipedia)
http://en.wikipedia.org/wiki/Visual_Instruction_Set - MAJC (Wikipedia)
http://en.wikipedia.org/wiki/MAJC - MDMX (Wikipedia)
http://en.wikipedia.org/wiki/MDMX - MIPS Multiply Unit
http://programmedlessons.org/AssemblyTutorial/Chapter-14/ass14_3.html - Silicon Graphics Introduces Enhanced MIPS Architecture
http://bwrc.eecs.berkeley.edu/CIC/otherpr/enhanced_mips.html - MIPS-3D (Wikipedia)
http://en.wikipedia.org/wiki/MIPS-3D - MIPS Technologies, Inc. announces new MIPS-3D technology to provide silicon-efficient 3D graphics acceleration
http://www.design-reuse.com/news/2057/mips-mips-3d-technology-silicon-efficient-3d-graphics-acceleration.html - MIPS-3D Built-in Function (gcc.gnu.org)
http://gcc.gnu.org/onlinedocs/gcc/MIPS_002d3D-Built_002din-Functions.html - Baha Guclu Dundar:
Intel MMX, SSE, SSE2, SSE3/SSSE3/SSE4 Architectures - SSE (Streaming SIMD Extentions)
http://www.songho.ca/misc/sse/sse.html - Timothy A. Chagnon: SSE and SSE2
http://www.cs.drexel.edu/~tc365/mpi-wht/sse.pdf - Intel corporation: Extending the Worldr's Most Popular Processor Architecture
http://download.intel.com/technology/architecture/new-instructions-paper.pdf - SIMD architectures:
http://arstechnica.com/old/content/2000/03/simd.ars/ - Intel MMXTM Technology Overview
Intel corporation, 1996 - MultiMedia eXtensions
http://softpixel.com/~cwright/programming/simd/mmx.phpi - AMD K5 („K5“ / „5k86“)
http://www.pcguide.com/ref/cpu/fam/g5K5-c.html - Sixth Generation Processors
http://www.pcguide.com/ref/cpu/fam/g6.htm - Great Microprocessors of the Past and Present
http://www.cpushack.com/CPU/cpu1.html - Very long instruction word (Wikipedia)
http://en.wikipedia.org/wiki/Very_long_instruction_word - Tour of the Black Holes of Computing!: Floating Point
http://www.cs.hmc.edu/~geoff/classes/hmc.cs105…/slides/class02_floats.ppt - 3Dnow! Technology Manual
AMD Inc., 2000 - CPU design (Wikipedia)
http://en.wikipedia.org/wiki/CPU_design - Control unit (Wikipedia)
http://en.wikipedia.org/wiki/Control_unit - Cray History
http://www.cray.com/About/History.aspx?404;http://www.cray.com:80/about_cray/history.html - Cray Historical Timeline
http://www.cray.com/Assets/PDF/about/CrayTimeline.pdf - Computer Speed Claims 1980 to 1996
http://homepage.virgin.net/roy.longbottom/mips.htm - Superpočítače Cray
http://www.root.cz/clanky/superpocitace-cray/ - Superpočítače Cray (druhá část)
http://www.root.cz/clanky/superpocitace-cray-druha-cast/ - Superpočítače Cray (třetí část)
http://www.root.cz/clanky/superpocitace-cray-treti-cast/ - Superpočítače Cray (čtvrtá část)
http://www.root.cz/clanky/superpocitace-cray-ctvrta-cast/ - Superpočítače Cray (pátá část): architektura Cray X-MP
http://www.root.cz/clanky/superpocitace-cray-pata-cast-architektura-pocitace-cray-x-mp-a-jeho-pouziti-ve-filmovem-prumyslu/