2017-09-02 3 views
1

Ich versuche, einige ARM NEON-Code zu AltiVec portieren. Unser NEON-Code hat zwei LOADs, einen ROT, einen XOR und einen STORE, so dass es wie ein einfacher Testfall aussieht. Nach vec_rl Dokumentation des IBM:Kann man in Altivec einen 128-Bit-Wert drehen?

Jedes Element des Ergebnisses wird durch Drehen des entsprechenden Elements eines mit dem entsprechenden Element von b angegeben durch die Anzahl der Bits nach links erhalten.

Die Dokumente gehen auf die größten Datentypen zu sagen, es sei denn, vector unsigned int-qarch=power8 ist, wobei in diesem Fall vector unsigned long long gilt.

Ich möchte eine 128-Bit-Drehung und keine 32-Bit- oder 64-Bit-Drehung einzelner Elemente ausführen. Die Bitpositionen sind 19, 31, 67, 97 und 109. Sie sind nicht Byte-ausgerichtet. (Die Konstanten ergeben sich aus der ARIA block cipher).

Sind 4x32 und 2x64 die größten AltiVec Datenanordnungen? Ist es möglich, in Altivec einen 128-Bit-Wert zu rotieren?

Wenn das gepackte Rotieren die einzige verfügbare Operation ist, ist es dann eine gute Übung, das Bit Twiddling in C oder in AltiVec zu machen?

Antwort

1

Sie können um ein Vielfaches von 8 Bits ein Drehen tun mit vsld (vec_sld), dann alle verbleibenden Dreh < 8 Bits zu handhaben Sie wahrscheinlich vsl + vsr + vsel (vec_sll + vec_srl + vec_sel) verwenden, müssen .

+0

Danke Paul. Ich habe Probleme, Informationen zu 'vec_sll' und' vec_srl' zu finden. Sie sind nicht in den [Vector Built-in-Funktionen] von IBM dokumentiert (https://www.ibm.com/support/knowledgecenter/de/SSGH2K_13.1.2/com.ibm.xlc131.aix.doc/compiler_ref/vec_intrin_cpp.html) . Würden Sie mehr Informationen teilen können? – jww

+0

Auf einem mobilen Gerät gerade, aber Google "AltiVec PIM" und Sie sollten eine PDF in den ersten paar Treffern sehen, die alle intrinsics etc. dokumentiert. Das Begleitbuch ist "AltiVec PEM", das die tatsächlichen Anweisungen dokumentiert. –

+0

Hinweis: Ihre Frage ist 'PowerPC' markiert - arbeiten Sie eigentlich mit PowerPC/AltiVec oder ist es IBM POWER/VMX (ähnlich aber anders)? –