Hlavní navigace

Mikroprocesory ARM a instrukční sada Thumb

27. 3. 2012
Doba čtení: 18 minut

Sdílet

Dnes se budeme zabývat instrukční sadou Thumb, podporovanou u moderních variant mikroprocesorů s architekturou ARM. Zavedením této instrukční sady se konstruktéři procesorů ARM snažili o spojení předností architektury RISC s větší „hustotou kódu“ dosahovanou u některých procesorů s architekturou CISC.

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

4. Bitové posuny a rotace

5. Nepodmíněné skoky

6. Podmíněné skoky

7. Podpora pro práci se zásobníkem

8. Instrukce typu Push a Pop

9. Odkazy na Internetu

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/EEP­ROM/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 0001

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í:

CS24_early

 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

  1. Introduction to ARM thumb
    http://www.ee­times.com/dis­cussion/other/4024632/­Introduction-to-ARM-thumb
  2. ARM, Thumb, and ThumbEE instruction sets
    http://www.ke­il.com/suppor­t/man/docs/ar­masm/armasm_CEG­BEIJB.htm
  3. An Introduction to ARM Assembly Language
    http://dev.em­celettronica.com/in­troduction-to-arm-assembly-language
  4. Processors – ARM
    http://www.ar­m.com/products/pro­cessors/index­.php
  5. The ARM Instruction Set
    http://simple­machines.it/doc/ar­m_inst.pdf
  6. ARM Architecture (Wikipedia)
    http://en.wiki­pedia.org/wiki/AR­M_architecture
  7. BBC BASIC
    http://www.bbcba­sic.co.uk/bbcba­sic.html
  8. BBC BASIC
    http://mdfs.net/Sof­tware/BBCBasic/
  9. BBC BASIC (Z80) for the ZX Spectrum
    http://mdfs.net/Sof­tware/BBCBasic/Spec­trum/
  10. BBC BASIC (Wikipedia CZ)
    http://en.wiki­pedia.org/wiki/BBC_BA­SIC
  11. MIPS-3D® ASE
    http://www.mip­s.com/products/ar­chitectures/mips-3d-ase/
  12. An introduction to SPARC's SIMD offerings
    http://mikebu­rrell.wordpres­s.com/2007/12­/14/an-introduction-to-sparcs-simd-offerings/
  13. MIPS64TM Architecture for Programmers Volume IV-c: The MIPS-3DTM Application-Specific Extension to the MIPS64TM
    http://www.we­blearn.hs-bremen.de/ris­se/RST/docs/MIP­S/MD00099–2B-MIPS3D64-AFP-01.11.pdf
  14. Visual Instruction Set
    http://www.eno­tes.com/topic/Vi­sual_Instructi­on_Set
  15. NEON
    http://www.ar­m.com/products/pro­cessors/techno­logies/neon.php
  16. Architecture and Implementation of the ARM Cortex-A8 Microprocessor
    http://www.design-reuse.com/arti­cles/11580/ar­chitecture-and-implementation-of-the-arm-cortex-a8-microprocessor­.html
  17. Multimedia Acceleration eXtensions (Wikipedia)
    http://en.wiki­pedia.org/wiki/Mul­timedia_Accele­ration_eXtensi­ons
  18. AltiVec (Wikipedia)
    http://en.wiki­pedia.org/wiki/Al­tiVec
  19. Visual Instruction Set (Wikipedia)
    http://en.wiki­pedia.org/wiki/Vi­sual_Instructi­on_Set
  20. MAJC (Wikipedia)
    http://en.wiki­pedia.org/wiki/MAJC
  21. MDMX (Wikipedia)
    http://en.wiki­pedia.org/wiki/MDMX
  22. MIPS Multiply Unit
    http://program­medlessons.or­g/AssemblyTuto­rial/Chapter-14/ass14_3.html
  23. Silicon Graphics Introduces Enhanced MIPS Architecture
    http://bwrc.e­ecs.berkeley.e­du/CIC/otherpr/en­hanced_mips.html
  24. MIPS-3D (Wikipedia)
    http://en.wiki­pedia.org/wiki/MIPS-3D
  25. MIPS Technologies, Inc. announces new MIPS-3D technology to provide silicon-efficient 3D graphics acceleration
    http://www.design-reuse.com/new­s/2057/mips-mips-3d-technology-silicon-efficient-3d-graphics-acceleration.html
  26. MIPS-3D Built-in Function (gcc.gnu.org)
    http://gcc.gnu­.org/onlinedoc­s/gcc/MIPS_002d3D-Built_002din-Functions.html
  27. Baha Guclu Dundar:
    Intel MMX, SSE, SSE2, SSE3/SSSE3/SSE4 Architectures
  28. SSE (Streaming SIMD Extentions)
    http://www.son­gho.ca/misc/sse/sse­.html
  29. Timothy A. Chagnon: SSE and SSE2
    http://www.cs­.drexel.edu/~tc365/mpi-wht/sse.pdf
  30. Intel corporation: Extending the Worldr's Most Popular Processor Architecture
    http://downlo­ad.intel.com/techno­logy/architec­ture/new-instructions-paper.pdf
  31. SIMD architectures:
    http://arstechni­ca.com/old/con­tent/2000/03/sim­d.ars/
  32. Intel MMXTM Technology Overview
    Intel corporation, 1996
  33. MultiMedia eXtensions
    http://softpi­xel.com/~cwrig­ht/programmin­g/simd/mmx.phpi
  34. AMD K5 („K5“ / „5k86“)
    http://www.pcgu­ide.com/ref/cpu­/fam/g5K5-c.html
  35. Sixth Generation Processors
    http://www.pcgu­ide.com/ref/cpu­/fam/g6.htm
  36. Great Microprocessors of the Past and Present
    http://www.cpushac­k.com/CPU/cpu­1.html
  37. Very long instruction word (Wikipedia)
    http://en.wiki­pedia.org/wiki/Ve­ry_long_instruc­tion_word
  38. Tour of the Black Holes of Computing!: Floating Point
    http://www.cs­.hmc.edu/~geof­f/classes/hmc­.cs105…/slides/clas­s02_floats.ppt
  39. 3Dnow! Technology Manual
    AMD Inc., 2000
  40. CPU design (Wikipedia)
    http://en.wiki­pedia.org/wiki/CPU_de­sign
  41. Control unit (Wikipedia)
    http://en.wiki­pedia.org/wiki/Con­trol_unit
  42. Cray History
    http://www.cra­y.com/About/His­tory.aspx?404;http:­//www.cray.com:80/a­bout_cray/his­tory.html
  43. Cray Historical Timeline
    http://www.cra­y.com/Assets/PDF/a­bout/CrayTime­line.pdf
  44. Computer Speed Claims 1980 to 1996
    http://homepa­ge.virgin.net/ro­y.longbottom/mip­s.htm
  45. Superpočítače Cray
    http://www.ro­ot.cz/clanky/su­perpocitace-cray/
  46. Superpočítače Cray (druhá část)
    http://www.ro­ot.cz/clanky/su­perpocitace-cray-druha-cast/
  47. Superpočítače Cray (třetí část)
    http://www.ro­ot.cz/clanky/su­perpocitace-cray-treti-cast/
  48. Superpočítače Cray (čtvrtá část)
    http://www.ro­ot.cz/clanky/su­perpocitace-cray-ctvrta-cast/
  49. Superpočítače Cray (pátá část): architektura Cray X-MP
    http://www.ro­ot.cz/clanky/su­perpocitace-cray-pata-cast-architektura-pocitace-cray-x-mp-a-jeho-pouziti-ve-filmovem-prumyslu/

Byl pro vás článek přínosný?

Autor článku

Vystudoval VUT FIT a v současné době pracuje na projektech vytvářených v jazycích Python a Go.