2017-09-08 13 views
0

Je travaille en C/C++ en utilisant des built-ins. J'ai besoin de l'instruction lvd2x pour charger des données non alignées dans un registre VMX. Il semble que lvd2x est disponible sur les processeurs Power7 et Power8. GCC fournit le vec_vsx_ld intégré pour effectuer la tâche. Selon IBM XL C/C++ for Linux, V13.1.5, chapitre 4, Améliorations ajouté dans la version 13.1.4:Y at-il un XL C intégré pour LXVD2X avant 13.1.4?

nouvelles fonctions intégrées

Voici vecteur GCC intégré des fonctions sont prises en charge:

  • vec_vsx_ld
  • ...

Le code est gardé pour XL C, donc je n'ai pas besoin des built-ins de GCC. Le problème est, je ne trouve pas intégré dans XL C pour lvd2x:

#if defined(__xlc__) || defined(__xlC__) 
    uint8x16_p8 block = vec_vsx_ld(0, t); 
#else 
    uint64x2_p8 block = (uint64x2_p8)vec_vsx_ld(0, t); 
#endif 

Le CCG compilez ferme fournit AIX avec XL C v13.1.3 (5725-C72, 5765-J07). Y at-il un XL C intégré pour LXVD2X avant 13.1.4? S'il y a un intégré, alors qu'est-ce que c'est? Si non, alors comment avons-nous accès à l'instruction?

(J'essaie d'éviter ASM et ASM inline Je ne connais pas assez le processeur pour l'écrire J'ai aussi eu une expérience assez désagréable, et je ne veux pas amplifier la douleur par essayant d'utiliser asm).

+0

Q: Comment accéder à l'instruction (en utilisant GCC)? R: L'assemblage en ligne est un choix évident;) Pourquoi ne pas au moins * ESSAYER * ça? PS: Votre architecture est Power PC, correct? – paulsm4

+0

@ paulsm4 - GCC va bien. J'en ai besoin pour le compilateur XL C d'IBM. – jww

Répondre

2

La fonction portable qui devrait être implémentée par GCC et XL est vec_xl. Cela fait partie du PPC64-LE ABI.

Les anciennes fonctions que XLC prises en charge sont vec_xld2 (pour le chargement d'un vecteur contenant des éléments de 8 octets) et vec_xlw4 (pour le chargement d'un vecteur contenant des éléments de 4 octets.)

Notez que si vous avez besoin vecteur big-endian l'ordre des éléments, vous devez utiliser vec_xl_be, ou compiler avec -qaltivec = be.

+0

Merci beaucoup. 'vec_xl' et' vec_xl_be' devraient être la dernière chose dont j'ai besoin. Nous y sommes presque... – jww