gpt4 book ai didi

c - 如何将一个小常量加载到 vector 中?

转载 作者:太空宇宙 更新时间:2023-11-04 01:20:07 25 4
gpt4 key购买 nike

请原谅我对以下问题的无知。我们支持 GCC 4.8(及更高版本)和 IBM XL C/C++ 12(及更高版本)。我们还在 AIX 和 Linux 上支持大端和小端。编译器和平台使代码相当困惑。

我们要将常量 1 加载到 VSX 寄存器中。这是我们能够制作的代码,但它似乎是错误的,因为它太复杂了。宏 XLC_VERSIONGCC_VERSIONLITTLE_ENDIAN 具有它们的习惯含义,因此省略了导致它们的其他预处理器宏。

typedef __vector unsigned char      uint8x16_p8;
typedef __vector unsigned long long uint64x2_p8;

#if defined(XLC_VERSION)
typedef uint8x16_p8 VectorType;
#elif defined(GCC_VERSION)
typedef uint64x2_p8 VectorType;
#endif

#if defined(LITTLE_ENDIAN)
const VectorType one = {1};
#else
const VectorType one = (VectorType)((uint64x2_p8){0,1});
#endif

不明显的是,XL C/C++ 支持所有数据排列并具有丰富的 API 集。 IBM 编译器使用起来轻而易举(当它不会产生难以理解的警告和错误时)。

回到 4.8 的 GCC 仅支持 64x2 排列,并且它只有 API 的一个子集。例如,GCC 缺少用于 8x16 排列的 IBM API,并且 GCC 没有 vec_reve(这将使字节序反转变得容易)。

我真正想做的是像这样让它在任何地方都“正常工作”,但编译失败:

VectorType one = 1;

有没有更简单的方法可以将一个小常量加载到 vector 寄存器中?

最佳答案

你的例子

VectorType one = 1;

正在尝试将标量分配给 vector 。尝试改用 vector 。对于 16 个字符的 vector ,这将是:

vector char one = {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};

gcc-4.8 似乎可以编译这个;我手边没有 LE 4.8,但至少适用于大端:

   0:   10 41 03 0c     vspltisb v2,1

使用 gcc-5 的 LE 也能正常工作。

   0:   0c 03 41 10     vspltisb v2,1

关于c - 如何将一个小常量加载到 vector 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46185876/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com