在13.1.4之前是否为LXVD2X内置XL C?

时间:2017-09-08 03:17:42

标签: c built-in xlc altivec

我使用内置函数从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来放大痛苦。

1 个答案:

答案 0 :(得分:2)

GCC和XL应该实现的便携式功能是vec_xl。它是PPC64-LE ABI的一部分。

XLC支持的旧函数是vec_xld2(用于加载包含8字节元素的向量)和vec_xlw4(用于加载包含4字节元素的向量)。

请注意,如果您需要big-endian向量元素顺序,则应使用vec_xl_be,或使用-qaltivec = be进行编译。