J'ai un code SIMD dans Altivec traitant des valeurs entières de 32 bits en parallèle. Dans certains cas, je veux charger les entiers comme peu endian, dans d'autres cas comme big endian (note: ce choix est indépendant de l'endianess natif du CPU, il est basé sur quel algorithme est en cours d'exécution). Faire l'échange d'octets réel est très facile en utilisant les opérations de permutation d'Altivec, comme documented by Apple. La partie qui m'inquiète est que PowerPC permet une opération en gros ou en petit boutiste, et donc je ne sais pas si j'ai besoin d'échanger des octets sur de petites charges/magasins endianiques ou de gros stock/magasins endiens. (Actuellement, mon code le fait toujours pour le petit boutiste et ne permute jamais pour les grosses opérations de mémoire endiennes, ce qui fonctionne bien sur la 970 que j'utilise actuellement puisque, bien sûr, elle fonctionne en big-endian). D'après ce que je peux trouver, les PPC en mode little-endian sont relativement rares, mais ils existent, et idéalement, j'aimerais que mon code fonctionne correctement et rapidement quel que soit le mode.Gestion d'Altivec charge et stocke indépendamment de l'endianness PPC?
Existe-t-il un moyen de gérer les gros et les petits charges endian dans les registres AltiVec indépendamment de l'endianness du processeur? Y a-t-il d'autres problèmes liés à cela que je devrais connaître? Les opérations AltiVec, bien qu'elles soient en 128 bits, sont traitées comme si elles étaient en 64 bits, ce qui permet une compatibilité avec les cartes mères little-endian conçues avant AltiVec. "
ce qui me fait penser qu'il pourrait y avoir d'autres méchancetés spécifiques à AltiVec en mode little-endian.
Je ne suis pas familier avec AltiVec mais généralement dans le code qui doit fonctionner avec des E/S binaires, j'essaie de commencer par détecter par programme l'ordre des octets, puis de permuter si nécessaire. Très probablement pas la réponse que vous cherchiez. –
C'est à peu près le meilleur que je peux trouver, mais apparemment PPC peut réellement changer endianess à l'exécution en définissant ou effaçant un peu dans un MSR. Et faire un test endian avant chaque chargement ou magasin est si rien d'autre vraiment moche, et probablement aussi un peu lent, donc j'espère qu'il y a une meilleure méthode. –