Die VTRN-Instruktionen dienen dazu, Elemente zwischen zwei Vektorregistern zu vertauschen. Diese Befehle sind besonders nützlich, wenn es darum geht, die Daten innerhalb von Registern so anzuordnen, dass sie für nachfolgende Verarbeitungsschritte optimal positioniert sind, zum Beispiel in der Bild- oder Audiodatenverarbeitung.
Die VTRN-Instruktion behandelt die Daten in zwei Vektorregistern als Elemente von 2x2-Matrizen und transponiert diese Matrizen. Dies bedeutet, dass sie die Positionen der Elemente in den beiden Vektoren paarweise vertauscht. Dadurch entstehen zwei neue Vektoren, in denen die Elemente aus den ursprünglichen Vektoren neu angeordnet sind.
Es gibt drei Hauptvarianten der VTRN-Instruktion, je nach Größe der Elemente, die transponiert werden sollen:
vtrn.size vektor1, vektor2
Unabhängig von der gewählten Elementbreite bleibt das grundlegende Prinzip der Transponierung bei der VTRN-Instruktion unverändert. Es werden zwei Vektoren benötigt, die jeweils vier Elemente enthalten. Dabei wird das Element an Position 1 des ersten Vektors mit dem Element an Position 0 des zweiten Vektors vertauscht, und das Element an Position 3 des ersten Vektors wird mit dem Element an Position 2 des zweiten Vektors ausgetauscht.
Angenommen, zwei Vektorregister D0
und D1
enthalten jeweils vier 16-Bit-Elemente. Bei Verwendung des Befehls VTRN.16 D0, D1
wird Elemente von D0
mit dem entsprechenden Element von D1
vertauscht.
Vor VTRN.16 D0, D1
d0[0] | d0[1] | d0[2] | d0[3] |
---|---|---|---|
0x01 | 0x02 | 0x03 | 0x04 |
d1[0] | d1[1] | d1[2] | d1[3] |
---|---|---|---|
0x0a | 0x0b | 0x0c | 0x0d |
Nach VTRN.16 D0, D1
d0[0] | d0[1] | d0[2] | d0[3] |
---|---|---|---|
0x01 | 0x0a | 0x03 | 0x0c |
d1[0] | d1[1] | d1[2] | d1[3] |
---|---|---|---|
0x02 | 0x0b | 0x04 | 0x0d |
Um größere Matrizen, wie eine 4x4-Matrix aus 16-Bit-Elementen, zu transponieren, können mehrere VTRN-Befehle in Folge ausgeführt werden. Eine solche Transponierung lässt sich beispielsweise durch die Anwendung von drei aufeinanderfolgenden VTRN-Befehlen erreichen, wobei nacheinander verschiedene Paare von Vektoren vertauscht werden.
zurück | Hauptmenü | weiter |