NEON矢量数据类型的混叠

Aliasing of NEON vector data types

本文关键字:数据类型 NEON      更新时间:2023-10-16

NEON是否支持矢量数据类型与其标量组件的混叠?

。英特尔(SSE)

typedef long long __m128i __attribute__ ((__vector_size__ (16), __may_alias__));

以上将允许我做:

__m128i* somePtr;
somePtr++;//advance to the next block

与Intel的混叠将允许我的指针前进到我想要处理的下一个块无需管理额外的计数和索引

__m128i上的__may_alias__属性应该被视为一种解决方法,即使Intel 完全搞混了一些SEE加载/存储特性的签名,也可以编写严格别名正确的代码。(8字节加载_mm_loadl_epi64(const __m128i*)是最搞笑的例子,但还有其他例子)。ARM获得了正确的内在特性,因此不需要__may_alias__

只使用指向元素类型的指针,并使用显式的加载和存储。根据我的经验,这样可以生成更好的代码,并且可能也更易于移植。(ARM C语言规范甚至允许指向NEON类型的指针吗?

NEON intrinsic实现不支持向量数据类型与其标量组件的混叠。

当你指定-mfpu_neon时,GCC支持一堆内部函数。我猜你们会感兴趣的是int32x4_t。关于所有可用类型的更多信息可以在ARM网站上找到。