我試圖使用Neon intrinsics優化我的代碼。我有一個128位數組(每個uint16_t
8位)的24位旋轉。使用ARM Neon intrinsics的128位旋轉
這裏是我的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);
}
我檢查GCC的文檔有關Neon Intrinsics,它不具備矢量旋轉指令。此外,我試圖用vshlq_n_u16(temp, 8)
來做到這一點,但所有位移到uint16_t
字以外的位都丟失了。
如何使用霓虹內在函數實現這一點?順便說一下,有關於GCC Neon Intrinsics的更好的文檔?
'armcc'具有'__ror'固有的 – ouah
使用內嵌彙編與ROR ARM指令是什麼關係? – ouah
我寧願避免組裝。順便說一句,我使用GCC所以沒有armcc! – Kami