【发布时间】:2012-06-30 20:32:27
【问题描述】:
我正在尝试使用 Neon 内在函数优化我的代码。我在 128 位数组上进行了 24 位旋转(每个 uint16_t 8 个)。
这是我的 c 代码:
uint16_t rotated[8];
uint16_t temp[8];
uint16_t j;
for(j = 0; j < 8; j++)
{
//Rotation <<< 24 over 128 bits (x << shift) | (x >> (16 - shift)
rotated[j] = ((temp[(j+1) % 8] << 8) & 0xffff) | ((temp[(j+2) % 8] >> 8) & 0x00ff);
}
我查看了关于 Neon Intrinsics 的 gcc 文档,它没有关于矢量旋转的说明。此外,我尝试使用vshlq_n_u16(temp, 8) 来执行此操作,但所有移出uint16_t 字的位都丢失了。
如何使用霓虹内在函数来实现这一点?顺便问一下,有没有更好的关于 GCC Neon Intrinsics 的文档?
【问题讨论】:
-
armcc具有__ror内在 -
如何使用带有
RORARM 指令的内联汇编? -
我更喜欢避免组装。顺便说一句,我使用的是 GCC,所以没有 armcc!
-
GCC 也支持 ARM 汇编。
标签: c rotation intrinsics neon