Domanda

In particolare per l'Assemblea SPARC, in che modo le filiali annullate sono diverse dalle filiali regolari?

Ho sempre pensato che fosse necessario annullare le istruzioni di diramazione quando ho bisogno di riempire lo slot di ritardo nop per le istruzioni di diramazione. Tuttavia, non credo di essere corretto in questa parte, perché puoi riempire il no senza annullare il ramo.

È stato utile?

Soluzione

L'istruzione di ramo annullata fa sì che l'istruzione nello slot di ritardo - l'istruzione dopo il ramo - venga ignorata se il ramo non viene preso.

Perché questo sarebbe importante? Perché normalmente, l'istruzione dopo il ramo viene eseguita, anche se il ramo viene preso. Questo perché ci sono due contatori di programmi, PC e NPC. PC, che indica l'istruzione in esecuzione, viene aggiornato a NPC, ovvero PC + 4, contemporaneamente a NPC in fase di aggiornamento sulla destinazione dell'istruzione di diramazione. Quindi, a causa della tempistica di questi eventi, è necessario caricare le istruzioni successive. Piuttosto che buttare via quel ciclo, è più redditizio usare quel ciclo se possiamo. Vorremmo quindi rendere quell'istruzione parte del ciclo.

loop:   someOp                
        someOtherOp
        branch      loop      ;
        delayslotOp           ; will actually be executed, before someOp, after branch

Se non riusciamo a usare lo slot di istruzioni dopo il ramo, allora inseriamo un nop e non facciamo nulla su quel ciclo.

Quindi perché allora avere istruzioni diverse con opzioni di filiale annullate e non annullate? Per darci la scelta di cosa succede all'uscita dal loop. Se abbiamo reso lo slot di ritardo parte dell'attività del loop, potremmo non volere che l'operazione venga eseguita all'uscita dal loop. Pertanto, aggiungeremmo ", un " fino alla fine dell'istruzione di diramazione.

Questa pagina contiene alcuni esempi interessanti.

Altri suggerimenti

Secondo il SPARC Architecture Manual (v9) :

  

3.2.3 Controllo trasferimento

     

[...]

     

La maggior parte delle istruzioni di trasferimento di controllo sono ritardate; cioè, l'istruzione immediatamente successiva a   le istruzioni di controllo-trasferimento in sequenza logica vengono inviate prima   il trasferimento del controllo all'indirizzo di destinazione è completato.

     

[...]

     

Viene richiamata l'istruzione che segue un'istruzione di controllo-trasferimento ritardata   una istruzioni di ritardo . Un po 'in un'istruzione di trasferimento di controllo ritardata   (il bit di annullamento) può causare l'annullamento dell'istruzione di ritardo (quella   è, per non avere alcun effetto) se il ramo non viene preso.

     

6.3.4 Istruzioni di trasferimento di controllo (CTI)

     

[...]

     

Nota sulla programmazione : il bit di annullamento aumenta la probabilità che a   il compilatore può trovare un'istruzione utile per riempire lo slot di ritardo dopo a   ramo, riducendo così il numero di istruzioni eseguite da a   programma. Ad esempio, il bit di annullamento può essere utilizzato per spostare un'istruzione   dall'interno di un loop per riempire lo slot di ritardo del ramo che si chiude   il cappio. Allo stesso modo, il bit di annullamento può essere utilizzato per spostare un'istruzione   da & # 8220; else & # 8221; o & # 8220; quindi & # 8221; ramo di un & # 8220; ifthen- else & # 8221; programma   bloccare allo slot di ritardo del ramo che seleziona tra di loro. Da   viene fornito un set completo di condizioni, un compilatore può organizzare il codice   (possibilmente invertendo il senso della condizione) in modo che un'istruzione   da & # 8220; else & # 8221; filiale o & # 8220; quindi & # 8221; il ramo può essere spostato in   slot di ritardo.

Il codice seguente mostra due rami, nel primo viene sempre eseguita l'istruzione di ritardo, nel secondo l'istruzione di ritardo viene annullata se il ramo non viene preso:

cmp   %i3, %i0
ble   %icc, -0x5c
ld    [%l0 - 0x4], %i5  ; executed whether the branch is taken or not

...

cmp   %l1, 0x80
bl,a  %icc, +0x40
ld    [%fp + 0x7c7], %g2    ; annulled if the branch is not taken, executed otherwise
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top