Hlavní navigace

Mikrořadičová jádra TriCore: dokončení popisu instrukční sady

Pavel Tišnovský

Popis mikrořadičových jader TriCore, v nichž se kombinují možnosti mikrořadičů, digitálních signálových procesorů a RISCových procesorů, dnes dokončíme. Zabývat se budeme především zajímavými vlastnostmi instrukční sady těchto čipů.

Obsah

1. Mikrořadičová jádra TriCore: dokončení popisu instrukční sady

2. Seznam všech instrukcí jader TriCore (bez FPU)

3. Základní aritmetické instrukce

4. Logické instrukce

5. Aritmetické a logické posuny

6. Instrukce typu Load & Store

7. Nepodmíněné skoky

8. Podmíněné skoky

9. Skoky do podprogramů a návraty z podprogramů

10. Instrukce pro programové smyčky

11. Instrukce s podmínkou

12. Instrukce pro práci s bitovými poli

13. Instrukce booleovského procesoru

14. Tříadresové instrukce booleovského procesoru

15. Uložení a obnovení kontextu

16. Odkazy na Internetu

1. Mikrořadičová jádra TriCore: dokončení popisu instrukční sady

V dnešním článku dokončíme popis instrukční sady jader TriCore. Připomeňme si z předchozí části, že instrukce zpracovávané jádry TriCore jsou sice v některých ohledech odvozeny od klasických RISCových instrukčních sad, ovšem kvůli zařazení DSP operací, dále popsaných šestnáctibitových instrukcí atd. je ve skutečnosti instrukční sada poměrně komplikovaná (navíc jsou některé instrukce složitější, ty se však neprovádí v hlavním CPU). Všechny instrukce můžeme rozdělit do několika kategorií popř. podkategorií:

  1. Aritmetické instrukce
    • Celočíselné
    • DSP (popsané minule)
    • SIMD (popsané minule)
    • Adresová aritmetika
  2. Logické instrukce
  3. Bitové posuny
  4. Manipulace s jednotlivými bity
  5. Přenosy dat
  6. Porovnání hodnot či adres
  7. Skoky
  8. Podmnožina šestnáctibitových instrukcí (popsané minule)
  9. Systémové instrukce (začátek rutiny pro obsluhu přerušení, debug režim …)

2. Seznam všech instrukcí jader TriCore (bez FPU)

V tabulce zobrazené pod tímto odstavcem jsou vypsány všechny základní instrukce jader TriCore. I když je počet instrukcí poměrně vysoký, stále se jedná o procesorové jádro s RISCovou architekturou, protože ty nejsložitější instrukce (uložení kontextu, násobení, programové smyčky apod.) jsou prováděny v paralelně k tomu vytvořených modulech a nikoli přímo v hlavním CPU:

Instrukce Význam mnemotechnické zkratky
ABS Absolute value
ABSDIF Absolute value of difference
ABSDIFS Absolute value of difference with saturation
ABSS Absolute value with saturation
ADD Add
ADDC Add carry
ADDI Add immediate
ADDIH Add immediate high word
ADDS Add with saturation
ADDSC Add scaled address
ADDX Add and generate carry
AND Logical AND
AND.comp Compare, AND and accumulate
AND.logic Bit and logical accumulate
ANDN Logical AND Not
BISR Begin ISR
BMERGE Merges even/odd
BSPLIT Split in even/odd
CACHEA.I Cache Address Invalidate
CACHEA.W Cache Address Writeback
CACHEA.WI Cache Address Writeback and Invalidate
CADD Conditional ADD
CADDN Conditional ADD Not
CALL Call
CALLA Call absolute
CALLI Call indirect
CLO Count leading ones
CLS Count leading signs
CLZ Count leading zeros
CMOV Conditional move
CMOVN Conditional move Not
CSUB Conditional subtract
CSUBN Conditional subtract Not
DEBUG Debug
DEXTR Double extract
DISABLE Disable interrupt
DSYNC Synchronize data
DVADJ Divide adjust
DVINIT Divide initialization word
DVSTEP Divide step
ENABLE Enable interrupt
EQ Equal
EQANY Multiple compare
EQZ Equal zero address
EXTR Extract bit field
GE Greater than or equal
IMASK Insert mask
INS Insert bit
INSERT Insert
INSN Insert bit Not
ISYNC Synchronize instructions
IXMAX Finds maximum value in signed array
IXMAX.U Finds maximum value in unsigned array
IXMIN Finds minimum value in signed array
IXMIN.U Finds minimum value in unsigned array
J Jump unconditional
JA Jump unconditional absolute
JEQ Jump if equal
JGE Jump if greater than or equal
JGEZ Jump if greater than or equal to zero
JGTZ Jump if greater than zero
JI Jump indirect
JL Jump and link
JLA Jump and link absolute
JLEZ Jump if less than or equal to zero
JLI Jump and link immediate
JLT Jump if less than
JLTZ Jump if less than zero
JNE Jump if not equal
JNED Jump if not equal and decrement
JNEI Jump if not equal and increment
JNZ Jump if not equal to zero
JZ Jump if zero
LD Load
LDLCX Load lower context
LDMDST Load modify store
LDUCX Load upper context
LEA Load Effective address
LOOP Loop
LOOPU Loop unconditional
LT Less than
MADD(S) Multiply-Add (S = with Saturation)
MADDM(S).H Packed Multiply-Add Q Format – Multiprecision
MADDR(S).H Packed Multiply-Add Q Format w/ Rounding
MADDR(S).Q Multiply-Add Q Format with Rounding
MADDSU(S).H Packed Multiply-Add/Sub Q Format
MADDSUM(S).H Packed Multiply-Add/Sub Q Format – Multiprecision
MADDSUR(S).H Packed Multiply-Add/Sub Q Format w/ Rounding
MAX Maximum value
MFCR Move from Core Register
MIN Minimum value
MOV Move
MOVH(.A) Move halfword to address
MSUB(S) Multiply-Subtract (S = with Saturation)
MSUBAD(S).H Packed Multiply-Sub/Add Q Format
MSUBADM(S).H Packed Multiply-Sub/Add Q Format – Multiprecision
MSUBADR(S).H Packed Multiply-Sub/Add Q Format w/ Rounding
MSUBM(S).H Packed Multiply-Subtract Q Format – Multiprecision
MSUBR(S).H Packed Multiply-Subtract Q Format w/ Rounding
MSUBR(S).Q Multiply-Subtract Q Format w/ Rounding
MTCR Move to Core Register
MUL(S) Multiply (S = with Saturation)
MUL(S).U Multiply Unsigned (S = with Saturation)
MUL.H Packed Multiply Q Format
MUL.Q Multiply Q Format
MULM.H Packed Multiply Q Format – Multiprecision
MULR.H Packed Multiply Q Format with Rounding
MULR.Q Multiply Q Format with Rounding
NAND Logical NAND
NE Not equal
NEZ.A Not equal zero address
NOP No operation
NOR Logical NOR
NOT Bitwise complement
OR Logical OR
OR.comp Compare, OR and accumulate
OR.logic Bit OR logical accumulate
ORN Logical OR Not
PACK Translates in floating-point format
PARITY Computes parity
RET Return from call
RFE Return from Exception
RSLCX Restore lower context
RSTV Reset overflow flags
RSUB Reverse subtract
RSUBS Reverse subtract with saturation
SAT Saturate result
SEL Select
SELN Select Not
SH Shift
SH.comp Compare accumulate and shift
SH.logic Bit shift logical accumulate
SHA Arithmetic shift
SHAS Arithmetic shift with saturation
ST Store
STLCX Store lower context
STUCX Store upper context
SUB Subtract
SUBC Subtract with carry
SUBS Subtract signed with saturation
SUBX Subtract extended
SVLCX Save lower context
SWAP Swap
SYSCALL System call
TLBDEMAP Uninstall a mapping in the MMU
TLBFLUSH Flush mappings from MMU
TLBMAP Install a mapping in the MMU
TLBPROBE.A Probe the MMU for a virtual address
TRAPSV Trap on sticky overflow
TRAPV Trap on overflow
UNPACK Translates from floating-point format
XNOR Logical exclusive NOR
XOR Logical exclusive OR
XOR.comp Compare, XOR and accumulate

3. Základní aritmetické instrukce

Některé základní aritmetické instrukce jsme si již popsali minule, takže si nyní pouze uvedeme jejich souhrn. Povšimněte si, že jsou podporovány jak instrukce s přetečením výsledků (to odpovídá zvykům z jiných architektur), tak i se saturací, což je výhodnější ve chvíli, kdy se zpracovávají různé signály. Programátor si taktéž může zvolit, jestli se má použít carry bit uložený v registru PSW či nikoli. Ve spodní části tabulky můžeme vidět instrukce sloužící pro výpočet absolutní hodnoty, výběr maxima či minima ze dvou operandů a taktéž instrukci pro převod 32bitové hodnoty na hodnotu šestnáctibitovou či osmibitovou se saturací (zachová se znaménko, horních 16 či 24 bitů se vynuluje atd.):

Instrukce Stručný popis
ADD součet (bez saturace, s přetečením)
ADDC součet + přičtení bitu carry z PSW
ADDX součet s přetečením, nastavuje se carry bit v PSW
ADDS součet se saturací (signed)
ADDS.U součet se saturací (unsigned)
ADDI součet s konstantou (16 bitů rozšířených na 32 bitů)
ADDIH součet s konstantou (16 bitů posunutých doleva)
   
SUB rozdíl (bez saturace, s podtečením)
SUBC rozdíl + použití bitu carry z PSW
SUBS rozdíl se saturací
SUBX rozdíl, nastavení carry bitu v PSW
RSUB jako SUB, ale s otočením operandů
RSUBS jako SUBS, ale s otočením operandů
   
ABS výpočet absolutní hodnoty operandu
MIN výpočet minima
MAX výpočet maxima
   
SAT saturace při převodu 32bit → 16bit nebo 8bit

4. Logické instrukce

U většiny běžných mikroprocesorů najdeme poměrně omezenou skupinu logických operací, typicky čtveřici NOT, AND, OR a XOR. U jader TriCore je tomu poněkud jinak, protože zde je sada logických instrukcí rozšířena o instrukce s negací vypočteného výsledku (NAND, NOR, XNOR) a taktéž o instrukce, u nichž je nejdříve negován jeden vstupní operand (ANDN a ORN, tato varianta je u XOR zbytečná):

Instrukce Stručný popis
NOT negace bit po bitu
   
AND logická operace AND (logický součin)
OR logická operace OR (logický součet)
XOR logická operace XOR (logická nonekvivalence)
   
NAND logická operace NAND (negace AND)
NOR logická operace NOR (negace OR)
XNOR logická operace exclusive NOR (negace XOR)
   
ANDN logická operace AND (logický součin) s jedním operandem negovaným
ORN logická operace OR (logický součet) s jedním operandem negovaným

Poznámka: první instrukce implementuje logický unární operátor s jedním vstupním operandem, další instrukce jsou binární, tj. se dvěma vstupními operandy a jedním operandem výstupním.

5. Aritmetické a logické posuny

Skupina základních instrukcí pro posuny je poměrně malá, protože obsahuje jen tři instrukce. Jádra TriCore nemusí rozlišovat speciální instrukce pro posun doleva a doprava, protože samotný posun je představován číslem se znaménkem. Ovšem, na rozdíl od mnoha jiných platforem, je k dispozici posun doleva se saturací výsledku, tj. bez přetečení:

Instrukce Stručný popis
SH logický posun doprava či doleva
SHA aritmetický posun doprava či doleva
SHAS dtto, ale při posunu doleva se navíc výsledek saturuje (nepřeteče)

Poznámka: aritmetický posun doleva je shodný s logickým posunem.

6. Instrukce typu Load & Store

Instrukce typu Load & Store existují v několika variantách podle toho, zda se přenáší operandy o velikosti bajtu, 16bitového slova či 32bitového slova a taktéž podle způsobu uložení – adresový či datový registr. Všechny možnosti jsou vypsány v následující tabulce:

Instrukce Stručný popis
LD.W načtení hodnoty z paměti do 32bitového datového registru
LD.A načtení hodnoty z paměti do 32bitového adresového registru
   
LD.B načtení bajtu do pracovního registru se znaménkovým rozšířením
LD.BU načtení bajtu do pracovního registru, horních 24 bitů se vynuluje
LD.H načtení 16bitového slova do pracovního registru se znaménkovým rozšířením
LD.HU načtení 16bitového slova do pracovního registru, horní polovina se vynuluje
LD.Q načtení 16bitového slova do horní poloviny pracovního registru, spodní polovina se vynuluje
LD.D načtení 64bitové hodnoty z paměti do dvou 32bitových datových registrů
LD.DA načtení 64bitové hodnoty z paměti do dvou 32bitových adresových registrů
   
ST.W uložení datového registru do paměti
ST.A uložení adresového registru do paměti
   
ST.B uložení spodních osmi bitů registru do paměti
ST.H uložení spodních 16 bitů registru do paměti
ST.Q uložení horních 16 bitů registru do paměti
ST.D uložení registrového páru (datové registry)
ST.DA uložení registrového páru (adresové registry)

7. Nepodmíněné skoky

Nepodmíněné skoky existují ve čtyřech variantách. Základní instrukce nazvaná jednoduše J (jump) obsahuje buď 24bitový či pouze osmibitový offset, který je po vynásobení dvěma (instrukce totiž vždy leží na sudých adresách) přičten k aktuální hodnotě registru PC (programový čítač, program counter). Varianta instrukce J s osmibitovým offsetem má šířku jen 16bitů (obdoba „Thumb“ u procesorů ARM). Instrukce JI (jump indirect) skočí na adresu uloženou ve vybraném adresním registru (nejnižší bit je ignorován, protože musí být nulový) a konečně instrukce JA (jump absolute) použije absolutní 24bitovou adresu, kterou vynásobí dvěma a navíc horní čtyři bity posune na indexy 31..28 (za nimi je sedm nulových bitů, což poněkud omezuje cíl skoku):

Instrukce Stručný popis
J relativní skok, offset je 24bitový (vynásobený dvěma)
J varianta předchozí instrukce, offset je osmibitový (vynásobený dvěma)
JI skok na adresu uloženou ve vybraném adresovém registru
JA absolutní skok, adresa je 24bitová

8. Podmíněné skoky

Instrukce podmíněných skoků jsou rozděleny do několika skupin. V první skupině jsou skoky, v nichž se porovnává obsah operandu s osmibitovou konstantou, která je znaménkově či beznaménkově rozšířena na 32bitové číslo. Relativní adresa skoku má šířku 15 bitů:

Instrukce Stručný popis
JEQ skok při rovnosti
JNE skok při nerovnosti
JLT skok za podmínky <
JLT.U skok za podmínky < (unsigned)
JGE skok za podmínky ≥
JGE.U skok za podmínky ≥ (unsigned)

Další instrukce jsou šestnáctibitové (tj. obdoba Thumb instrukcí u ARMu). Tyto instrukce pracují s implicitním datovým registrem D15 (viz předchozí část seriálu), který je buď porovnáván s nulou nebo se čtyřbitovou konstantou znaménkově rozšířenou na 32 bitů. U prvních dvou instrukcí je relativní adresa osmibitová, u dalších instrukcí jen čtyřbitová, protože další čtyři bity jsou použity pro již zmíněnou konstantu:

Instrukce Stručný popis
JZ skok když D15==0
JNZ skok když D15≠0
JEQ skok když D15=konstanta
JNE skok když D15≠konstanta

Třetí skupina podmíněných skoků je taktéž zakódována do šestnácti bitů. Může se zde použít libovolný pracovní registr, ovšem relativní adresa skoku je jen čtyřbitová (ze stejného důvodu, jaký byl naznačen v předchozím odstavci):

Instrukce Stručný popis
JZ skok když Dx==0
JNZ skok když Dx≠0
JLTZ skok když Dx<0
JLEZ skok když Dx≤0
JGTZ skok když Dx>0
JGEZ skok když Dx≥0

Poslední skupina podmíněných skoků pracuje s adresovými registry – vybraný registr je buď porovnán s konstantou nebo s nulou:

Instrukce Stručný popis
JEQ.A skok když Ax==konstanta
JNE.A skok když Ax≠konstanta
JZ.A skok když Ax==0
JNZ.A skok když Ax≠0

9. Skoky do podprogramů a návraty z podprogramů

Pro volání podprogramů se používá hned několik typů instrukcí. V první řadě se jedná o instrukce typu JL (jump and link), které odpovídají klasickým nepodmíněným skokům, ovšem navíc se návratová adresa ukládá do link registru A11. Dále zde nalezneme instrukce CALL, které navíc uloží celý „horní kontext“ (upper context) do oblasti paměti nazvané CSA (Context Save Area). Opakem je instrukce RET, která obnoví „horní kontext“ a nahradí PC za hodnotu uloženou v registru A11:

Instrukce Stručný popis
JL obdoba instrukce J, ovšem návratová adresa se uloží do registru A11 (RA)
JLA obdoba instrukce JA, ovšem návratová adresa se uloží do registru A11 (RA)
JLI obdoba instrukce JI, ovšem návratová adresa se uloží do registru A11 (RA)
   
CALL jako JL, ovšem navíc uloží „horní kontext“ do CSA
CALLA jako JLA, ovšem navíc uloží „horní kontext“ do CSA
CALLI jako JLI, ovšem navíc uloží „horní kontext“ do CSA
   
RET návrat z podprogramu, obnoví horní kontext z CSA

Poznámka: do „horního kontextu“ patří pracovní registry D8D15 i adresové registry A10A15.

10. Instrukce pro programové smyčky

Pro efektivní implementaci programových smyček existují čtyři instrukce. První dvě instrukce odpovídají podmíněnému skoku JNE, ovšem testovaný registr se nezávisle na splnění či nesplnění podmínky zvýší či sníží o jedničku, což umožňuje implementaci klasických počítaných programových smyček. Další instrukce LOOP je velmi užitečná, protože je prováděna ve vlastní jednotce nezávisle na ALU a proto každá další iterace probíhá v nulovém počtu cyklů (z pohledu programátora). Tato instrukce jako počitadlo používá adresový registr, což je výhodné při implementaci různých filtrů, které stejně musí operandy načítat a ukládat do polí. Poslední instrukce LOOPU provádí nepodmíněný skok, ovšem opět ve specializované jednotce (za „nula“ cyklů). Tato instrukce ukončuje smyčku typu while:

Instrukce Stručný popis
JNEI odpovídá instrukci JNE, ovšem první registr je zvýšen o jedničku (nezávisle na splnění či nesplnění podmínky)
JNED odpovídá instrukci JNE, ovšem první registr je snížen o jedničku (nezávisle na splnění či nesplnění podmínky)
LOOP hardwarově optimalizovaná počítaná programová smyčka
LOOPU hardwarově optimalizovaný skok na zadanou adresu

Následující příklad ukazuje implementaci počítané programové smyčky, v níž se ve funkci počitadla používá registr D10. Smyčka proběhne s hodnotou počitadla 1 až 100 (to proto, že se hodnota počitadla zvýší PO vyhodnocení podmínky skoku):

        lea d10, 1
loopA:  ...
        ...
        ...
        jnei d10, 100, loopA

Následuje příklad smyčky, která po první iteraci nebude v praxi vyžadovat žádné další strojové cykly, neboť vyhodnocení konce smyčky bude provedeno paralelně s jejím tělem. Počitadlo je umístěno v adresovém registru A10:

        mova a10, 99
loopB:  ...
        ...
        ...
        loop a10, loopB

11. Instrukce s podmínkou

Již minule jsme se zmínili o instrukcích nazvaných SEL a SELN pro podmíněný výběr výsledku, ovšem v instrukční sadě jader TriCore nalezneme i další instrukce, v nichž se provádí rozhodování na základě nějaké podmínky. Kromě podmíněných skoků se jedná o instrukce, které testují nulovost či nenulovost jednoho z pracovních registrů a na tomto základě potom provedou nějakou operaci. Instrukce CMOV a CMOVN provede MOV (přenos dat) pokud je testovaný registr nulový či naopak nenulový. Další čtyři instrukce jsou složitější, protože mají čtyři operandy – testovaný registr, dva registry zdrojové a registr cílový. Podívejme se na tabulku:

Instrukce Stručný popis
CMOV pokud je první operand nenulový, přenes zdrojový registr do registru cílového
CMOVN pokud je první operand nulový, přenes zdrojový registr do registru cílového
CADD pokud je první operand nenulový, vypočti součet, jinak do cílového registru ulož první zdrojový registr
CADDN pokud je první operand nulový, vypočti součet, jinak do cílového registru ulož první zdrojový registr
CSUB pokud je první operand nenulový, vypočti rozdíl, jinak do cílového registru ulož první zdrojový registr
CSUBN pokud je první operand nulový, vypočti rozdíl, jinak do cílového registru ulož první zdrojový registr

Poznámka: instrukce CMOV a CMOVN implementují „polovinu funkcionality“ instrukcí SEL a SELN.

12. Instrukce pro práci s bitovými poli

Dosti neobvyklé jsou instrukce určené pro práci s bitovými poli. Tyto instrukce obsahují zdrojový operand, kterým je 32bitový registr a taktéž dvojici hodnot pos a width. Tato dvojice určuje bitové pole (bity pos+width až pos) ze zdrojového registru, které se přenesou do registru cílového do jeho spodní části. Přitom může či nemusí dojít ke znaménkovému rozšíření. Poslední instrukce je zvláštní tím, že zdrojem není jeden 32bitový registr, ale 64bitový registrový pár:

Instrukce Stručný popis
EXTR ze zdrojového registru přečte bity n až m
EXTR.U dtto, ale neprovádí se znaménkové rozšíření
DEXTR jako EXTR, je zdrojem jsou dva registry tvořící 64bitové pole

13. Instrukce booleovského procesoru

Logické instrukce popsané ve čtvrté kapitole existují i v „bitové“ variantě počítající s vybranými bity vstupních operandů. U každého vstupního operandu (registru) lze zvolit odlišný index bitu vstupujícího do operace, tedy například D10.31 a D9.0. Výsledek se vždy ukládá do nejnižšího bitu výstupního registru, zbylých 31 bitů je vynulováno:

Instrukce Stručný popis
AND.T logická operace AND (logický součin)
OR.T logická operace OR (logický součet)
XOR.T logická operace XOR (logická nonekvivalence)
   
NAND.T logická operace NAND (negace AND)
NOR.T logická operace NOR (negace OR)
XNOR.T logická operace exclusive NOR (negace XOR)
   
ANDN.T logická operace AND (logický součin) s jedním operandem negovaným
ORN.T logická operace OR (logický součet) s jedním operandem negovaným

14. Tříadresové instrukce booleovského procesoru

V instrukční sadě jader TriCore najdeme i booleovské instrukce se třemi vstupními registry (jeden z těchto registrů je současně i cílovým registrem). Tyto instrukce provádí dvojici logických operací, přičemž první operace je provedena naprosto stejným způsobem, jaký byl popsán v předchozí kapitole, tj. vybrané bity ze vstupních registrů tvoří vstupní operandy. Ovšem druhá část je odlišná, neboť se mezivýsledek z této operace neuloží přímo do nejnižšího bitu výstupního registru, ale naopak se provede druhá operace (jen AND či OR) mezi nejnižším bitem výstupního registru a mezivýsledkem:

Instrukce Stručný popis
AND.AND.T odpovídá instrukci AND.T, ovšem posléze se provede AND mezivýsledku a nejnižšího bitu cílového registru
AND.ANDN.T odpovídá instrukci ANDN.T, ovšem posléze se provede AND mezivýsledku a nejnižšího bitu cílového registru
AND.NOR.T odpovídá instrukci NOR.T, ovšem posléze se provede AND mezivýsledku a nejnižšího bitu cílového registru
AND.OR.T odpovídá instrukci OR.T, ovšem posléze se provede AND mezivýsledku a nejnižšího bitu cílového registru
OR.AND.T odpovídá instrukci AND.T, ovšem posléze se provede OR mezivýsledku a nejnižšího bitu cílového registru
OR.ANDN.T odpovídá instrukci ANDN.T, ovšem posléze se provede OR mezivýsledku a nejnižšího bitu cílového registru
OR.NOR.T odpovídá instrukci NOR.T, ovšem posléze se provede OR mezivýsledku a nejnižšího bitu cílového registru
OR.OR.T odpovídá instrukci OR.T, ovšem posléze se provede OR mezivýsledku a nejnižšího bitu cílového registru

15. Uložení a obnovení kontextu

Poslední instrukce, o nichž se dnes zmíníme, slouží pro uložení a obnovení kontextu, tj. vybrané skupiny registrů. Kontext se ukládá do k tomu určené oblasti operační paměti CSA (první dvě instrukce) nebo od určené adresy. Do „horního kontextu“ patří pracovní registry D8D15 i adresové registry A10A15, do „kontextu spodního“ pak pracovní registry D0D7 a adresové registry A2A7:

Instrukce Stručný popis
SVLCX uložení spodního kontextu do CSA
RSLCX obnovení spodního kontextu z CSA
STLCX uložení spodního kontextu
STUCX uložení horního kontextu
LDLCX načtení spodního kontextu
LDUCX načtení horního kontextu

16. Odkazy na Internetu

  1. Q (number format)
    https://en.wikipedia.org/wi­ki/Q_%28number_format%29
  2. TriCore Architecture & Core
    http://www.infineon.com/cms/en/pro­duct/microcontroller/32-bit-tricore-tm-microcontroller/tricore-tm-architecture-and-core/channel.html?channel=ff80808112ab681d0112­ab6b73d40837
  3. TriCoreTM V1.6 Instruction Set: 32-bit Unified Processor Core
    http://www.infineon.com/dgdl/tc_v131_in­structionset_v138.pdf?file­Id=db3a304412b407950112b409b6dd0352
  4. TriCore v2.2 C Compiler, Assembler, Linker Reference Manual
    http://tasking.com/suppor­t/tricore/tc_reference_gu­ide_v2.2.pdf
  5. Infineon TriCore (Wikipedia)
    https://en.wikipedia.org/wi­ki/Infineon_TriCore
  6. C166®S V2 Architecture & Core
    http://www.infineon.com/cms/en/pro­duct/microcontroller/16-bit-c166-microcontroller/c166-s-v2-architecture-and-core/channel.html?channel=db3a304312bef5660112­c3011c7d01ae
  7. Memory segmentation
    https://en.wikipedia.org/wi­ki/Memory_segmentation
  8. Bus mastering
    https://en.wikipedia.org/wi­ki/Bus_mastering
  9. ST10 16-bit MCUs
    http://www.st.com/en/micro­controllers/st10–16-bit-mcus.html?querycriteria=pro­ductId=LN1111
  10. XC800 family
    https://en.wikipedia.org/wi­ki/XC800_family
  11. C166 (stránky společnosti Infineon)
    https://www.infineon.com/cms/en/pro­duct/microcontroller/16-bit-c166-microcontroller/channel.html?chan­nel=ff80808112ab681d0112ab6b2e­af0759#ispnTab3
  12. C166 Family
    https://en.wikipedia.org/wi­ki/C166_family
  13. Permanent Magnet Synchronous Motor
    https://en.wikipedia.org/wi­ki/Synchronous_motor#Perma­nent_magnet_motors
  14. Implementing field oriented control of a brushless DC motor
    http://www.eetimes.com/do­cument.asp?doc_id=1279321
  15. Vector control (motor)
    https://en.wikipedia.org/wi­ki/Vector_control_(motor)
  16. Motorola DSP56k
    https://www.rockbox.org/wi­ki/MotorolaDSP56k
  17. Motorola 56000 (Wikipedia)
    http://en.wikipedia.org/wi­ki/Motorola_56000
  18. Using the Motorola DSP56002EVM for Amateur Radio DSP Projects
    http://www.johanforrer.net/EV­M/article.html
  19. The Atari Falcon030 „Personal Integrated Media System“
    http://www.atarimuseum.com/com­puters/16bits/falcon030.html
  20. Turtle Beach Corporation (stránky společnosti)
    http://www.turtlebeach.com/
  21. Turtle Beach Corporation (Wikipedia)
    https://en.wikipedia.org/wi­ki/Turtle_Beach_Corporati­on
  22. Atari Falcon 030 DSP 3D engine test
    http://www.digiti.info/vi­deo/WHQwMjNRaExfLWs=/atari_fal­con030_dsp_3d_engine_test
  23. Atari Falcon030 (německy)
    http://www.maedicke.de/ata­ri/hardware/falcon.htm
  24. Old-computers.com: Atari Falcon030
    http://www.old-computers.com/museum/compu­ter.asp?c=125&st=1
  25. Atari Falcon030 (Wikipedia)
    http://en.wikipedia.org/wi­ki/Atari_Falcon
  26. Past and current projects (including Falcon stuff)
    http://os.inf.tu-dresden.de/~nf2/projects/projects.html
  27. Atari Falcon 030: The Case For The Defence
    http://www.soundonsound.com/sos/1994_ar­ticles/sep94/atarifalcon.html
  28. DaVinci processor family
    http://www.ti.com/general/doc­s/datasheetdiagram.tsp?ge­nericPartNumber=TMS320DM365&di­agramId=64193
  29. Texas Instruments DaVinci
    https://en.wikipedia.org/wi­ki/Texas_Instruments_DaVin­ci
  30. TMS320DM6446 (DaVinci)
    http://www.ti.com/product/tms320dm6446
  31. Digital Media Video Processors (TI)
    http://www.ti.com/lsds/ti/pro­cessors/dsp/media_processor­s/davinci/products.page#
  32. TI Wiki
    http://processors.wiki.ti­.com/index.php/Main_Page
  33. C5000 ultra-low-power DSP
    http://www.ti.com/lsds/ti/pro­cessors/dsp/c5000_dsp/over­view.page
  34. OMAP (Wikipedia)
    https://en.wikipedia.org/wiki/OMAP
  35. OMAP – TI Wiki
    http://processors.wiki.ti­.com/index.php/OMAP
  36. Why OMAP can't compete in smartphones
    http://www.eetimes.com/au­thor.asp?section_id=40&doc_id=1286602
  37. Applications Processors – The Heart of the Smartphone
    http://www.engineering.com/E­lectronicsDesign/Electronic­sDesignArticles/ArticleID/5791/Ap­plications-Processors-The-Heart-of-the-Smartphone.aspx
  38. TI cuts 1,700 jobs in OMAP shift
    http://www.eetimes.com/do­cument.asp?doc_id=1262782
  39. VLIW: Very Long Instruction Word: Texas Instruments TMS320C6×
    http://www.ecs.umass.edu/e­ce/koren/architecture/VLIW/2/ti1­.html
  40. An Introduction To Very-Long Instruction Word (VLIW) Computer Architecture
    Philips Semiconductors
  41. VLIW Architectures for DSP: A Two-Part Lecture (PDF, slajdy)
    http://www.bdti.com/MyBDTI/pub­s/vliw_icspat99.pdf
  42. Very long instruction word (Wikipedia)
    https://en.wikipedia.org/wi­ki/Very_long_instruction_word
  43. A VLIW Approach to Architecture, Compilers and Tools
    http://www.vliw.org/book/
  44. VEX Toolchain (VEX = VLIW Example)
    http://www.hpl.hp.com/downloads/vex/
  45. Elbrus (computer)
    https://en.wikipedia.org/wi­ki/Elbrus_%28computer%29
  46. Super Harvard Architecture Single-Chip Computer
    https://en.wikipedia.org/wi­ki/Super_Harvard_Architec­ture_Single-Chip_Computer
  47. Digital Signal Processors (stránky TI)
    http://www.ti.com/lsds/ti/pro­cessors/dsp/overview.page
  48. C674× Low Power DSP (stránky TI)
    http://www.ti.com/lsds/ti/pro­cessors/dsp/c6000_dsp/c674×/o­verview.page
  49. TMS320C30 (stránky TI)
    http://www.ti.com/product/tms320c30
  50. TMS320C6722B
    http://www.ti.com/product/tms320c6722b/des­cription
  51. Introduction to DSP
    http://www.ti.com/lit/wp/spry281/spry­281.pdf
  52. The Evolution of TMS (Family of DSPs)
    http://www.slideshare.net/mo­to_modx/theevo1
  53. Datasheet k TMS32010
    http://www.datasheetarchi­ve.com/dlmain/49326c32a52050140ab­ffe6f0ac4894aa09889/M/TMS32010
  54. 1979: Single Chip Digital Signal Processor Introduced
    http://www.computerhistory­.org/siliconengine/single-chip-digital-signal-processor-introduced/
  55. The TMS32010. The DSP chip that changed the destiny of a semiconductor giant
    http://www.tihaa.org/histo­rian/TMS32010–12.pdf
  56. Texas Instruments TMS320 (Wikipedia)
    https://en.wikipedia.org/wi­ki/Texas_Instruments_TMS320
  57. Great Microprocessors of the Past and Present: Part IX: Signetics 8×300, Early cambrian DSP ancestor (1978):
    http://www.cpushack.com/CPU/cpu2­.html#Sec2Part9
  58. Great Microprocessors of the Past and Present (V 13.4.0)
    http://jbayko.sasktelwebsi­te.net/cpu.html
  59. Introduction to DSP – DSP processors:
    http://www.bores.com/courses/in­tro/chips/index.htm
  60. The Scientist and Engineer's Guide to Digital Signal Processing:
    http://www.dspguide.com/
  61. Digital signal processor (Wikipedia EN)
    http://en.wikipedia.org/wi­ki/Digital_signal_processor
  62. Digitální signálový procesor (Wikipedia CZ)
    http://cs.wikipedia.org/wi­ki/Digitální_signálový_pro­cesor
  63. Digital Signal Processing FAQs
    http://dspguru.com/dsp/faqs
  64. Reprezentace numerických hodnot ve formátech FX a FP
    http://www.root.cz/clanky/fixed-point-arithmetic/
  65. IEEE 754 a její příbuzenstvo: FP formáty
    http://www.root.cz/clanky/norma-ieee-754-a-pribuzni-formaty-plovouci-radove-tecky/
  66. Čtyři základní způsoby uložení čísel pomocí FX formátů
    http://www.root.cz/clanky/binarni-reprezentace-numerickych-hodnot-v-fx-formatu/
  67. Základní aritmetické operace prováděné v FX formátu
    http://www.root.cz/clanky/zakladni-aritmeticke-operace-provadene-ve-formatu-fx/
  68. Aritmetické operace s hodnotami uloženými ve formátu FP
    http://www.root.cz/clanky/aritmeticke-operace-s-hodnotami-ve-formatu-plovouci-radove-carky/
  69. FIR Filter FAQ
    http://dspguru.com/dsp/faqs/fir
  70. Finite impulse response (Wikipedia)
    http://en.wikipedia.org/wi­ki/Finite_impulse_response
  71. DSPRelated
    http://www.dsprelated.com/
  72. Addressing mode (Wikipedia)
    https://en.wikipedia.org/wi­ki/Addressing_mode
  73. Orthogonal instruction set
    https://en.wikipedia.org/wi­ki/Orthogonal_instruction_set
  74. TI 16-bit and 32-bit microcontrollers
    http://www.ti.com/lsds/ti/mi­crocontrollers16-bit32-bit/overview.page
  75. TMS 32010 Assembly Language Programmer's Guide (kniha na Amazonu)
    https://www.amazon.com/32010-Assembly-Language-Programmers-Guide/dp/0904047423
  76. COSC2425: PC Architecture and Machine Language, PC Assembly Language
    http://www.austincc.edu/rblac­k/courses/COSC2425/index.html
Našli jste v článku chybu?
22. 3. 2017 20:15
Jose (neregistrovaný)

Pokud se sjížděla smyčka opakovaně tak se něco předpočívalo a druhej a další průchod byl o dost rychlejší.

21. 3. 2017 19:58

Přesně tak, bude tam pár výjimek typu krátká smyčka (instrukce nezaplní všechny řezy pipeline) atd. Bude tam nějaké omezení na vnořené smyčky, ale to asi v praxi často nenastane, jestli vůbec někdy (vnořená smyčka sama o sobě problém není, pokud použije jiný adresní registr).