Обрабатывать и загружать Altivec независимо от порядка байтов PPC? - PullRequest
1 голос
/ 28 октября 2009

У меня есть некоторый SIMD-код в Altivec, обрабатывающий 32-битные целочисленные значения параллельно. В некоторых случаях я хочу загрузить целые числа с прямым порядком байтов, в других случаях - с прямым порядком байтов (примечание: этот выбор не зависит от собственного порядка байтов процессора; он основан на том, какой алгоритм выполняется). Выполнить фактическую замену байтов очень просто, используя операции перестановки Altivec, как задокументировано Apple .

Что меня беспокоит, так это то, что PowerPC допускает операции с большим или меньшим порядком байтов, и поэтому я не знаю, нужно ли мне менять местами байты при младших загрузках / хранилищах или при больших байтовых загрузках / хранилищах. (В настоящее время мой код всегда делает это для байтов с прямым порядком байтов и никогда не переставляет для операций с памятью с прямым порядком байтов, что отлично работает на 970, который я сейчас использую, так как, конечно, он работает на старшем порядке).

Из того, что я могу найти, PPC в режиме с прямым порядком байтов относительно редки, но они существуют, и в идеале я хотел бы, чтобы мой код работал правильно и быстро независимо от режима.

Есть ли способ обработки больших и маленьких порядковых загрузок в регистры AltiVec независимо от порядка байтов процессора? Есть ли другие вопросы, связанные с этим, о которых я должен знать? В Википедии есть (не цитируется, естественно) утверждение:

«Операции AltiVec, несмотря на то, что они 128-разрядные, обрабатываются так, как если бы они были 64-разрядными. Это обеспечивает совместимость с материнскими платами с прямым порядком байтов, которые были разработаны до AltiVec.»

, который заставляет меня думать, что в AltiVec в режиме с прямым порядком байтов могут быть другие неприятности.

1 Ответ

2 голосов
/ 07 апреля 2011

Практически весь код PowerPC будет иметь порядок с прямым порядком байтов, а весь код ARM - с прямым порядком байтов.

Есть несколько специализированных случаев, когда используется обратный порядок чередования & mdash; очевидно, VirtualPC полагался на режим с прямым порядком байтов и поэтому изначально не работал на G5 (который не включает его) & mdash; но я бы не стал беспокоиться об этом.

ARM имеет аналогичную проблему в режиме с прямым порядком байтов: двойные числа имеют смешанный порядок. «Псевдо-порядковый номер» достигается за счет XOR битов адреса младшего разряда с 0x2 (для доступа к полуслову) и 0x3 (для доступа к байту), так что эффективный порядок в 32-битном слове меняется местами, но это прерывается для 64- битовый доступ. Я подозреваю, что тот же самый трюк используется в PowerPC, за исключением того, что выполняется 64 бита за раз.

...