代码之家  ›  专栏  ›  技术社区  ›  Jack Lloyd

处理Altivec负载和存储,而不考虑PPC端度?

  •  1
  • Jack Lloyd  · 技术社区  · 16 年前

    我在Altivec中有一些并行处理32位整数值的SIMD代码。在某些情况下,我希望将整数加载为little endian,在其他情况下加载为big endian(注意:此选择与本机CPU endian无关;它基于正在运行的算法)。使用Altivec的permute操作进行实际的字节交换非常容易,如下所示 documented by Apple .

    我担心的部分是PowerPC允许大的或小的endian操作,所以我不知道我是否需要在小的endian加载/存储或大的endian加载/存储上进行字节交换(目前,我的代码总是为little endian执行,从不交换big endian内存操作,这在我目前使用的970上运行良好,因为它当然运行big endian)。

    有没有一种方法可以处理AltiVec寄存器的大小端数负载,而不考虑CPU端数?还有其他与此相关的问题我应该知道吗?Wikipedia有一个(自然是未经认证的)声明:

    这让我觉得在little endian模式下,AltiVec可能还存在其他一些特别的问题。

    1 回复  |  直到 16 年前
        1
  •  2
  •   tc.    15 年前

    有一些特殊情况下使用了endian交换——显然VirtualPC依赖于little endian模式,因此最初在G5上不起作用(G5不包括它)——但我不担心这些。

    ARM在大端模式下也有类似的问题:双打是混合端模式。通过将低位地址位与0x2(用于半字访问)和0x3(用于字节访问)进行异或,以交换32位字内的有效顺序,实现“伪端性”,但这会中断64位访问。我怀疑除了一次64位外,PowerPC上也使用了相同的技巧。