У меня есть некоторый SIMD-код в Altivec, обрабатывающий 32-битные целочисленные значения параллельно. В некоторых случаях я хочу загрузить целые числа с прямым порядком байтов, в других случаях - с прямым порядком байтов (примечание: этот выбор не зависит от собственного порядка байтов процессора; он основан на том, какой алгоритм выполняется). Выполнить фактическую замену байтов очень просто, используя операции перестановки Altivec, как задокументировано Apple .
Что меня беспокоит, так это то, что PowerPC допускает операции с большим или меньшим порядком байтов, и поэтому я не знаю, нужно ли мне менять местами байты при младших загрузках / хранилищах или при больших байтовых загрузках / хранилищах. (В настоящее время мой код всегда делает это для байтов с прямым порядком байтов и никогда не переставляет для операций с памятью с прямым порядком байтов, что отлично работает на 970, который я сейчас использую, так как, конечно, он работает на старшем порядке).
Из того, что я могу найти, PPC в режиме с прямым порядком байтов относительно редки, но они существуют, и в идеале я хотел бы, чтобы мой код работал правильно и быстро независимо от режима.
Есть ли способ обработки больших и маленьких порядковых загрузок в регистры AltiVec независимо от порядка байтов процессора? Есть ли другие вопросы, связанные с этим, о которых я должен знать? В Википедии есть (не цитируется, естественно) утверждение:
«Операции AltiVec, несмотря на то, что они 128-разрядные, обрабатываются так, как если бы они были 64-разрядными. Это обеспечивает совместимость с материнскими платами с прямым порядком байтов, которые были разработаны до AltiVec.»
, который заставляет меня думать, что в AltiVec в режиме с прямым порядком байтов могут быть другие неприятности.