Question

Pour SPARC Assembly en particulier, en quoi les branches annulées sont-elles différentes des branches classiques?

J'ai toujours pensé que l'annulation d'instructions de branche était nécessaire lorsque je devais remplir le créneau de délai nop pour les instructions de branche. Cependant, je ne pense pas avoir raison sur cette partie-là, car vous pouvez remplir les fonctions sans annuler la branche.

Était-ce utile?

La solution

L’instruction de branche annulée a pour effet d’ignorer l’instruction située dans le créneau de délai - l’instruction après la branche - si la branche n’est pas prise.

Pourquoi cela serait-il important? Parce que normalement, l'instruction après que la branche est exécutée, même si la branche est prise. C'est parce qu'il y a deux compteurs de programme, PC et NPC. PC, qui indique que l'instruction en cours d'exécution, est mise à jour vers NPC, qui est PC + 4, en même temps que NPC est mis à jour sur la cible de l'instruction de branche. Donc, à cause du moment choisi pour ces événements, l'instruction suivante doit être chargée. Plutôt que d'éliminer ce cycle, il est plus rentable d'utiliser ce cycle si nous le pouvons. Nous ferions alors simplement que cette instruction fasse partie de la boucle.

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

Si nous ne pouvons pas utiliser l'emplacement d'instructions après la branche, nous collons un nop et nous ne faisons rien pendant ce cycle.

Alors pourquoi avoir différentes instructions avec des options de branche annulées et non annulées? Pour nous donner le choix de ce qui se passe à la sortie de la boucle. Si nous avons intégré le créneau temporel à l’activité de la boucle, nous ne voudrons peut-être pas que cet op soit exécuté à sa sortie de la boucle. Par conséquent, nous ajoutons " un " à la fin de l'instruction de branche.

Cette page contient quelques exemples intéressants.

Autres conseils

Selon le Manuel d'architecture SPARC (v9) :

  

3.2.3 Transfert de contrôle

     

[...]

     

La plupart des instructions de contrôle-transfert sont retardées; c’est-à-dire que l’instruction qui suit immédiatement un   une instruction de contrôle-transfert en séquence logique est envoyée avant   le transfert de contrôle vers l'adresse cible est terminé.

     

[...]

     

L'instruction suivant une instruction de contrôle-transfert retardée est appelée   une instruction de délai . Un bit dans une instruction de contrôle-transfert retardée   (le bit d’annulation) peut entraîner l’annulation de l’instruction de retard   n’a aucun effet) si la branche n’est pas prise.

     

6.3.4 Instructions de contrôle-transfert (CTI)

     

[...]

     

Note de programmation : le bit d’annulation augmente la probabilité qu’un   Le compilateur peut trouver une instruction utile pour remplir la fente de délai après une   branche, réduisant ainsi le nombre d'instructions exécutées par un   programme. Par exemple, le bit d’annulation peut être utilisé pour déplacer une instruction   de l'intérieur d'une boucle pour remplir la fente de retard de la branche qui ferme   la boucle. De même, le bit d’annulation peut être utilisé pour déplacer une instruction   de la branche "else" ou "then" d'un programme "ifthen- else"   bloquer au créneau de retard de la branche qui sélectionne entre eux. Puisque   un ensemble complet de conditions est fourni, un compilateur peut arranger le code   (inversant éventuellement le sens de la condition) de sorte qu'une instruction   de la branche "else" ou de la branche "then" peuvent être déplacés vers la   intervalle de délai.

Le code suivant montre deux branches, dans la première l'instruction de retard est toujours exécutée, dans la seconde l'instruction de retard est annulée si la branche n'est pas prise:

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top