我有一些SIMD代码在Altivec中并行处理32位整数值。在某些情况下,我希望将整数加载为小端,而在其他情况下则加载为大端(注意:此选择与本机CPU字节顺序无关;它基于正在运行的算法)。使用Altivec的置换操作可以很容易地完成实际的字节交换,比如documented by Apple。
我担心的是PowerPC允许大端或小端操作,所以我不知道是否需要在小端加载/存储或大端加载/存储上进行字节交换。(目前,我的代码总是针对小端,而不是大端内存操作,这在我当前使用的970上工作得很好,因为它当然是运行大端的)。
据我所知,小端模式的PPC相对较少,但它们确实存在,理想情况下,我希望我的代码在任何模式下都能正确快速地工作。
有没有一种方法可以处理AltiVec寄存器的大小字节顺序负载,而不考虑CPU的字节顺序?还有没有其他我应该知道的相关问题?维基百科( Wikipedia )有(自然地)声明:
“尽管AltiVec操作是128位的,但它们被视为64位。这允许与在AltiVec之前设计的小端主板兼容。”
这让我认为,在小端模式下,可能还有其他特定于AltiVec的污点。
发布于 2011-04-07 08:08:25
几乎所有的PowerPC代码都采用高字节顺序,所有的ARM代码都采用低字节顺序。
有一些特殊的情况下使用了字节顺序交换-显然VirtualPC依赖于小字节顺序模式,因此最初不能在G5上工作(不包括它)-但我不会担心这些。
ARM在大端模式下也有类似的问题: doubles是混合端的。通过用0x2 (用于半字访问)和0x3 (用于字节访问)对低位地址位进行XORing,从而交换32位字内的有效顺序来实现“伪字符顺序”,但是这对于64位访问是中断的。我怀疑在PowerPC上也使用了同样的技巧,除了一次做64位。
https://stackoverflow.com/questions/1639964
复制相似问题