与GCC中的NEON内在函数对齐加载/存储

时间:2015-06-05 12:57:22

标签: gcc arm simd neon

如何让GCC为对齐访问生成加载/存储指令?

如果我们有类似的话:

uint8_t* p;
uint8x8x4_t r = vld4_u8(p);

如何使GCC生成一个需要32字节对齐的加载指令?

1 个答案:

答案 0 :(得分:3)

我认为你可以使用__builtin_assume_aligned(ptr,size);

e.g。

#include <arm_neon.h>

void blend4(uint8_t *src, uint8_t *dst)
{
    uint8_t *aligned_src = __builtin_assume_aligned(src, 16);
    uint8_t *aligned_dst = __builtin_assume_aligned(dst, 16);
    uint8x8x4_t temp = vld4_u8(aligned_src);
    vst4_u8(aligned_dst, temp);
}

生成:

vld4.8  {d16-d19}, [r0:128]
vst4.8  {d16-d19}, [r1:128]