2017-09-02 13 views
1

J'essaie de porter un code ARM NEON à AltiVec. Notre code NEON a deux LOAD, un ROT, un XOR et un STORE, donc cela semble être un simple cas de test. Selon la documentation vec_rl d'IBM:Est-il possible de faire tourner une valeur de 128 bits dans Altivec?

Chaque élément du résultat est obtenu en faisant tourner l'élément correspondant d'une gauche du nombre de bits spécifié par l'élément correspondant de b.

Les documents vont à dire vector unsigned int est le plus grand type de données à moins -qarch=power8, auquel cas vector unsigned long long applique.

Je souhaite effectuer une rotation de 128 bits et non une rotation de 32 bits ou de 64 bits d'éléments individuels. Les positions des bits sont 19, 31, 67, 97 et 109. Elles ne sont pas alignées sur les octets. (Les constantes proviennent du ARIA block cipher).

Les 4x32 et 2x64 sont-ils les plus grands agencements de données AltiVec? Est-il possible de faire tourner une valeur de 128 bits dans Altivec?

Si la rotation par tassement est la seule opération disponible, alors est-ce une bonne pratique de faire le bit twiddling en C ou en AltiVec?

Répondre

1

Vous pouvez faire une rotation par un multiple de 8 bits en utilisant vsld (vec_sld), puis à gérer toute rotation restante de < 8 bits, vous aurez probablement besoin d'utiliser vsl + vsr + vsel (vec_sll + vec_srl + vec_sel) .

+0

Merci Paul. Je n'arrive pas à trouver des informations sur 'vec_sll' et' vec_srl'. Ils ne sont pas documentés dans les [fonctions intégrées Vector] d'IBM (https://www.ibm.com/support/knowledgecenter/en/SSGH2K_13.1.2/com.ibm.xlc131.aix.doc/compiler_ref/vec_intrin_cpp.html). . Seriez-vous capable de partager plus d'informations? – jww

+0

Sur un appareil mobile tout à l'heure, mais Google "AltiVec PIM" et vous devriez voir un PDF dans les premiers hits qui documente tous les intrinsèques etc. Le manuel d'accompagnement est "AltimV PEM" qui documente les instructions réelles. –

+0

Note: votre question est étiquetée 'PowerPC' - travaillez-vous avec PowerPC/AltiiVec ou IBM POWER/VMX (similaire mais différent). –