我正在尝试使用 Neon 内在函数优化我的代码。我在 128 位数组(每个 8 位)上进行 24 位旋转uint16_t
。
这是我的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 是否有更好的文档?