16.06.2013 Views

2 - Amiga Magazine Online

2 - Amiga Magazine Online

2 - Amiga Magazine Online

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

controllo: salti assoluti e condizionati, TRAP e chiamate di<br />

sistema, istruzioni di ritorno dalle interruzioni. I1 BP ha sol-<br />

tanto tre registri, il primo dei quali, chiamato Condition Re-<br />

gister o più brevemente CR, mantiene i Jag di condizione<br />

relativi alle ultime operazioni effettuate.<br />

Il CR è per certi versi analogo allo SR della serie 68000, con<br />

la differenza che esso contiene soltanto flag di condizione<br />

e non quelli per l'impostazione di "modi" (questa funzione<br />

è riservata a un registro non visibile in modo utente, il Ma-<br />

chine State Register o MSR). I 32 bit del CR sono divisi in 8<br />

gruppi da 4 bit (tradizionalmente detti nibble o, secondo la<br />

terminologia PowerPC, field, identificati dalle sigle<br />

CRO ... CR7. Il primo gruppo (CRO) contiene le indicazioni di<br />

risultato negativo (LT), positivo (GT), zero (EQ) e overflow<br />

(SO) relative all'ultima operazione effettuata dal Fixed-Point<br />

Processor (ovvero, all'ultima operazione intera) nella quale<br />

lo speciale flag di "richiesta della condizione" nel codice<br />

operativo era impostato a 1 (la cosa è indicata da un "." fi-<br />

nale nel codice mnemonico dell'istnizione).<br />

Allo stesso modo, il CR1 contiene le indicazioni di eccezio-<br />

ne (m), eccezione abilitata (FEX), eccezione di operazione<br />

invalida (VX) e eccezione di overflow (OX) relative all'ulti-<br />

ma operazione floating point che richiedeva l'impostazione<br />

delle condizioni (anche in questo caso i codici mnemonici<br />

relativi terminano per "."). La possibilità di chiedere seletti-<br />

vamente l'aggiornamento o meno del CR per ogni opera-<br />

zione può semplificare la programmazione (non è più ne-<br />

cessario avere cura che nessuna istruzione modifichi il CR<br />

fra l'operazione di cui vogliamo testare il risultato e il test<br />

vero e proprio) e velocizzare l'esecuzione (il processore<br />

non deve più scrivere i codici di condizione nel registro<br />

dopo ogni istruzione, politica che introdurrebbe molte di-<br />

pendenze fra istruzioni e imporrebbe severi limiti al grado<br />

di parallelismo raggiungibile).<br />

Del tutto innovativa è la possibilità di usare uno qualunque<br />

dei nibble di CR (tipicamente, CR2-CR7) per memorizzare<br />

le condizioni risultanti da un'operazione di confronto espli-<br />

cito, sia fra operandi in virgola fissa che fra operandi in vir-<br />

gola mobile (le condizioni sono le stesse presenti in CRO,<br />

con le sigle FL, FG, FE e FU in corrispondenza delle LT,<br />

GT, EQ e SO per il confronto in virgola mobile).<br />

Agli effetti pratici, questa caratteristica rende disponibili al<br />

programmatore 6 CR distinti, tramite i quali testare i risultati<br />

intermedi di una computazione. Lo scopo di questa orga-<br />

nizzazione è evidente: con un po' di programmazione in-<br />

telligente, diventa possibile effettuare una serie di calcoli e<br />

testare i risultati soltanto alla fine, riducendo grandemente<br />

il numero dei salti all'interno di una routine che, com'è no-<br />

to, causano spesso rallentamenti e stalli della p@eline.<br />

I1 Link Register, o LR, può contenere un indirizzo a cui sal-<br />

tare (come nelle istruzioni JMP (Ax) del 68000) oppure<br />

l'indirizzo a cui tornare in seguito a un salto a subroutine.<br />

I lettori familiari con l'architettura 68000 potrebbero essere<br />

sorpresi di fronte a questo meccanismo: la maggior parte<br />

dei processori, infatti, si limita a salvare nello stack di si-<br />

stema l'indirizzo di ritorno al momento del salto, e a ripri-<br />

stinarlo dallo stack al momento del ritorno: semplice e li-<br />

neare, ma dietro questa semplicità si nascondono ben due<br />

(lenti) accessi in memoria per ogni chiamata di subroutine!<br />

I1 PPC usa una strategia diversa: al momento del salto, l'in-<br />

dirizzo di ritorno viene memorizzato in LR, e il ritorno da<br />

subroutine si trasforma in un salto al contenuto di LR. La<br />

routine chiamata può memorizzare 1'LR in uno stack, ma<br />

solo se essa ha necessità di chiamare a sua volta altre su-<br />

broutine. Nel caso di una routine "terminale", che non<br />

contiene ulteriori chiamate, i due accessi in memoria sono<br />

scomparsi! Visto che le routine terminali non effettuano<br />

accessi in memoria, e che quelle non terminali chiamano<br />

mediamente 2-3 subroutine di livello più basso, il numero<br />

di accessi in memoria si riduce tipicamente al 30-50% di<br />

quelli necessari nel caso dell'implementazione "tradiziona-<br />

le".<br />

La figura 3 mostra appunto una gerarchia di chiamate, e<br />

mette in evidenza come solo una parte minoritaria delle<br />

chiamate necessiti effettivamente del salvataggio sullo stack<br />

dell'indirizzo di ritorno: spostare questa responsabilità dal<br />

chiamante (come awiene nella famiglia 68000) al chiamato<br />

(come awiene sul PowerPC) consente di risparmiare un<br />

numero considerevole di accessi.<br />

L'ultimo registro disponibile al Branch Processor è il CTR,<br />

acronimo per Count Register. I1 suo uso primario è quello<br />

di contatore per i cicli con decremento, similmente a quan-<br />

to fatto dall'istruzione DBcc dell'assembler 68000. Inoltre,<br />

CTR può contenere un indirizzo a cui saltare, come abbia-<br />

mo già visto per I'LR. Ciò consente di ottimizzare un caso<br />

particolarmente frequente di doppio salto, quello attraverso<br />

le cosiddette routine glue che, nel caso di ArnigaOS, popo-<br />

Fig. 3 - Un esempio di diagramma<br />

delle chiamate con l'uso di LR

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!