我是从C/C++使用内置的。我需要lvd2x指令将未对齐的数据加载到VMX寄存器中。看起来lvd2x可以在Power7和Power8处理器上使用。
GCC为执行这项任务提供了内置的vec_vsx_ld。根据IBM /C++ for Linux,V13.1.5,第4章,13.1.4版本中添加的增强:
新内置函数 支持以下GCC向量内建函数:
代码是为XL而设的,所以我不需要GCC的内置。问题是,我找不到XL内置的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);
#endifGCC编译场为AIX提供了XLCv13.1.3 (5725-C72,5765-J07)。在13.1.4之前是否有LXVD2X的XL内置组件?如果是内置的,那是什么?如果没有,那么我们如何才能访问指令?
(我正在努力避免ASM和内联ASM。我对处理器的了解还不足以写它。我也有过一次相当不愉快的经历,我不想通过使用asm来放大痛苦)。
发布于 2017-09-08 16:43:56
GCC和XL都应该实现的可移植功能是vec_xl。是PPC64 64-LE ABI的一部分。
XLC支持的旧函数是xld2 (用于加载包含8字节元素的向量)和vec_xlw4 (用于加载包含4字节元素的向量)。
请注意,如果需要大端向量元素顺序,则应该使用vec_xl_be,或者使用-qaltivec=be进行编译。
https://stackoverflow.com/questions/46108098
复制相似问题