13.1.4 之前的 LXVD2X 是否有内置的 XL C?
Is there a XL C builtin for LXVD2X prior to 13.1.4?
我正在 C/C++ 使用内置插件。我需要 lvd2x
指令将未对齐的数据加载到 VMX 寄存器中。看起来 lvd2x
在 Power7 和 Power8 处理器上可用。
GCC 提供 vec_vsx_ld
内置来执行任务。根据IBM XL C/C++ for Linux, V13.1.5,第 4 章,版本 13.1.4 中添加的增强功能:
New built-in functions
The following GCC vector built-in functions are supported:
- vec_vsx_ld
- ...
代码受 XL C 保护,因此我不需要 GCC 的内置程序。问题是,我找不到 XL C 的内置 lvd2x
:
#if defined(__xlc__) || defined(__xlC__)
uint8x16_p8 block = vec_vsx_ld(0, t);
#else
uint64x2_p8 block = (uint64x2_p8)vec_vsx_ld(0, t);
#endif
GCC 编译场为 AIX 提供 XL C v13.1.3(5725-C72、5765-J07)。 13.1.4 之前的 LXVD2X 是否有内置的 XL C?如果有内置的,那是什么?如果没有,那么我们如何获得指令的访问权限?
(我正在尝试避免ASM和内联ASM。我对处理器的了解还不够多,无法编写它。我也有过相当不愉快的经历,我不想放大痛苦通过尝试使用 asm).
GCC 和 XL 都应该实现的可移植函数是 vec_xl。它是 PPC64-LE ABI 的一部分。
XLC 支持的较旧的函数是 vec_xld2(用于加载包含 8 字节元素的向量)和 vec_xlw4(用于加载包含 4 字节元素的向量。)
请注意,如果您需要大端矢量元素顺序,您应该使用 vec_xl_be,或者使用 -qaltivec=be 进行编译。
我正在 C/C++ 使用内置插件。我需要 lvd2x
指令将未对齐的数据加载到 VMX 寄存器中。看起来 lvd2x
在 Power7 和 Power8 处理器上可用。
GCC 提供 vec_vsx_ld
内置来执行任务。根据IBM XL C/C++ for Linux, V13.1.5,第 4 章,版本 13.1.4 中添加的增强功能:
New built-in functions
The following GCC vector built-in functions are supported:
- vec_vsx_ld
- ...
代码受 XL C 保护,因此我不需要 GCC 的内置程序。问题是,我找不到 XL C 的内置 lvd2x
:
#if defined(__xlc__) || defined(__xlC__)
uint8x16_p8 block = vec_vsx_ld(0, t);
#else
uint64x2_p8 block = (uint64x2_p8)vec_vsx_ld(0, t);
#endif
GCC 编译场为 AIX 提供 XL C v13.1.3(5725-C72、5765-J07)。 13.1.4 之前的 LXVD2X 是否有内置的 XL C?如果有内置的,那是什么?如果没有,那么我们如何获得指令的访问权限?
(我正在尝试避免ASM和内联ASM。我对处理器的了解还不够多,无法编写它。我也有过相当不愉快的经历,我不想放大痛苦通过尝试使用 asm).
GCC 和 XL 都应该实现的可移植函数是 vec_xl。它是 PPC64-LE ABI 的一部分。
XLC 支持的较旧的函数是 vec_xld2(用于加载包含 8 字节元素的向量)和 vec_xlw4(用于加载包含 4 字节元素的向量。)
请注意,如果您需要大端矢量元素顺序,您应该使用 vec_xl_be,或者使用 -qaltivec=be 进行编译。