2009-03-02 13 views
3

Speziell für SPARC Assembly, wie unterscheiden sich annullierte Zweige von regulären Zweigen?Wie unterscheidet sich eine annullierte Verzweigung von einer regulären Verzweigung?

Ich dachte immer, dass Annullierung von Verzweigungsanweisungen erforderlich ist, wenn ich den NOP-Verzögerungsschlitz für Verzweigungsbefehle füllen muss. Allerdings glaube ich nicht, dass ich in diesem Teil richtig bin, weil Sie den NOP füllen können, ohne den Zweig zu annullieren.

Antwort

6

Der annullierte Verzweigungsbefehl bewirkt, dass der Befehl im Verzögerungsschlitz - der Befehl nach der Verzweigung - ignoriert wird, wenn die Verzweigung nicht ausgeführt wird.

Warum sollte das wichtig sein? Weil normalerweise der Befehl nach der Verzweigung ausgeführt wird, selbst wenn die Verzweigung genommen wird. Dies liegt daran, dass zwei Programmzähler vorhanden sind, PC und NPC. PC, der anzeigt, dass der Befehl ausgeführt wird, wird zu NPC aktualisiert, was PC + 4 ist, zur selben Zeit, zu der der NPC auf das Ziel des Verzweigungsbefehls aktualisiert wird. Wegen des Timings dieser Ereignisse muss der nächste Befehl geladen werden. Anstatt diesen Zyklus einfach wegzuwerfen, ist es profitabler, diesen Zyklus zu nutzen, wenn wir können. Wir würden dann diese Anweisung nur Teil der Schleife machen.

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

Wenn wir nicht den Befehls-Slot nach der Verzweigung verwenden können, dann halten wir eine nop dort, und nichts tun an diesem Zyklus.

Warum also dann unterschiedliche Anweisungen mit annullierten und nicht annullierten Verzweigungsoptionen? Um uns die Wahl zu geben, was beim Verlassen der Schleife passiert. Wenn wir den Delay-Slot Teil der Schleifenaktivität gemacht haben, möchten wir vielleicht nicht, dass dieser Op beim Verlassen der Schleife ausgeführt wird. Daher würden wir ", a" am Ende der Verzweigungsinstruktion hinzufügen.

This page has some nice examples.

2

Nach dem SPARC Architecture Manual (v9):

3.2.3 Steuertransfer

[...]

Der größte Teil der Steuertransferbefehle verzögert werden; das heißt, der Befehl, der unmittelbar auf einen Steuertransferbefehl in logischer Reihenfolge folgt, wird ausgelöst, bevor die Steuerübertragung an die Zieladresse abgeschlossen ist.

[...]

Die Anweisung nach einem verzögerten Steuerung-Übertragungsbefehl einen Verzögerungsbefehl bezeichnet. Ein Bit in einer verzögerten Steuerübertragungsanweisung (das Annullierbit) kann dazu führen, dass die Verzögerungsinstruktion annulliert wird (dh ist wirkungslos), wenn die Verzweigung nicht ausgeführt wird.

6.3.4 Zugsteuerung Transferieren (CTIs)

[...]

Programmierung Hinweis: Die Annullierungs Bit erhöht die Wahrscheinlichkeit, dass ein Compiler eine nützliche Anweisung finden können füllen Sie den Delay-Slot nach einer -Verzweigung, wodurch die Anzahl der von einem -Programm ausgeführten Anweisungen reduziert wird.Zum Beispiel kann das Annullierungsbit verwendet werden, um eine Anweisung aus einer Schleife zu bewegen, um den Verzögerungsschlitz der Verzweigung zu füllen, die die Schleife schließt. Ebenso kann das Annull-Bit verwendet werden, um einen Befehl entweder vom "else" - oder "then" -Verzweig eines "ifthen-else" -Programmblocks zum Verzögerungsschlitz des Zweiges zu bewegen, der zwischen ihnen auswählt. Da ein vollständiger Satz von Bedingungen bereitgestellt wird, kann ein Compiler den Code anordnen (möglicherweise die Richtung der Bedingung umkehrend), so dass eine Anweisung von entweder dem Zweig "else" oder dem Zweig "then" zu verschoben werden kann Verzögerungsschlitz.

Der folgende Code zeigt zwei Zweige, in der ersten die Verzögerungsanweisung wird immer ausgeführt, in der zweiten die Verzögerungsanweisung annulliert wird, wenn die Verzweigung nicht genommen wird:

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 
Verwandte Themen