我使用内置函数从C / C ++开始工作。我需要lvd2x
指令将未对齐的数据加载到VMX寄存器中。在Power7和Power8处理器上可以看到lvd2x
。
GCC提供内置vec_vsx_ld
来执行任务。根据{{3}},第4章,版本13.1.4中添加的增强功能:
新的内置功能
支持以下GCC向量内置函数:
- 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来放大痛苦。
答案 0 :(得分:2)
GCC和XL应该实现的便携式功能是vec_xl。它是PPC64-LE ABI的一部分。
XLC支持的旧函数是vec_xld2(用于加载包含8字节元素的向量)和vec_xlw4(用于加载包含4字节元素的向量)。
请注意,如果您需要big-endian向量元素顺序,则应使用vec_xl_be,或使用-qaltivec = be进行编译。