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 に関するより良いドキュメントはありますか?