我在 Altivec 中有一些 SIMD 代码并行处理 32 位整数值。在某些情况下,我想将整数加载为小端,在其他情况下加载为大端(注意:此选择与本机 CPU 字节序无关;它基于正在运行的算法)。正如Apple所记录的,使用 Altivec 的置换操作非常容易进行实际的字节交换。
我担心的部分是PowerPC允许大端或小端操作,所以我不知道我是否需要在小端加载/存储或大端加载/存储上进行字节交换。(目前我的代码总是为小端执行它,并且从不交换大端内存操作,这在我目前使用的 970 上运行良好,因为它当然运行的是大端)。
据我所知,小端模式下的 PPC 相对较少,但它们确实存在,理想情况下,我希望无论模式如何,我的代码都能正确快速地工作。
有没有一种方法可以处理对 AltiVec 寄存器的大小字节序负载,而不管 CPU 字节序如何?还有其他与此相关的问题我应该知道吗?维基百科有(未引用,自然)声明:
“AltiVec 操作,尽管是 128 位,但被视为 64 位。这允许与在 AltiVec 之前设计的小端主板兼容。”
这让我觉得在 little-endian 模式下可能还有其他特定于 AltiVec 的讨厌。