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