3

NEON 是否支持矢量数据类型及其标量分量的别名?

例如(英特尔 SSE)

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

以上将允许我这样做:

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

别名 la Intel 它将允许将我的指针前进到我想要处理的下一个块,而无需管理额外的计数和索引。

4

3 回答 3

2

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

只需使用指向元素类型的指针,并使用显式加载和存储。根据我的经验,这会导致生成更好的代码,并且可能也更便携。(ARM C 语言规范甚至允许指向 NEON 类型的指针吗?如果他们没有,我不会感到惊讶)。

于 2012-08-31T11:21:18.953 回答
1

NEON 内在函数实现不支持向量数据类型及其标量组件的别名。

于 2012-03-05T13:31:26.337 回答
0

当您指定 -mfpu_neon 时,GCC 支持一堆内在函数。我猜你会感兴趣的其中一个是 int32x4_t。有关所有可用类型的更多信息,请访问ARM 站点

于 2011-08-26T13:20:40.647 回答