说明从SSE转换到ARM Neon

时间:2013-07-23 13:58:58

标签: arm sse neon intrinsics

我正在尝试将一段代码从SSE转换为ARM Neon进行优化。对于代码的大部分SSE指令,我发现了一些明显相当于Neon的指令。我对这些问题有些疑惑:

result1_shifted = _mm_srli_si128 (result1, 1);

result=_mm_packus_epi16 (res1,res2);

_mm_storeu_si128 (p_dest, result);

你能帮我吗?

1 个答案:

答案 0 :(得分:2)

我同意这些评论,回到“C”(或任何真正的)参考设计可能是一个好主意,也许从头开始。特别是你会发现NEON在某些情况下可能有一些更优化的做事方式。但如果你发现你需要做几乎相同的事情,这里有一些提示:

_mm_srli_si128 (result1, 1);尝试VEXT.S8 Qdst,Qsrc,Qsrc2,#1,其中src2已被清除为0.

_mm_packus_epi16 (res1,res2);尝试VQMOVN.S16 Ddst,Qsrc。寻找替代品时的关键词是“狭隘”。你正在缩小范围。 “Q”是NEON的饱和度命名法。您可能遇到问题,因为您签署的是unsigned,我不确定NEON是否支持,但您的用例可能没问题,但这就是为什么参考和测试很好!

_mm_storeu_si128 (__m128i *p, __m128i a);显然有VSTM,这里有很多选项。您可能希望详细了解这一点。