Neon intrinsics kullanarak kodumu optimize etmeye çalışıyorum. 128 bitlik bir dizi üzerinde 24 bitlik bir dönüşüm var (her biri 8 uint16_t
).ARM Neon intrinsics kullanarak 128-bit rotasyon
İşte benim c kodu: Ben yaklaşık Neon Intrinsics gcc belgeleri kontrol ettim
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);
}
ve vektör rotasyonları için talimat bulunmamaktadır. Ayrıca, vshlq_n_u16(temp, 8)
kullanarak bunu yapmaya çalıştım ama uint16_t
word'ün dışına kaydırılan tüm bitler kaybolur.
Neon intrinsik kullanarak nasıl elde edilir? Bu arada GCC Neon Intrinsics hakkında daha iyi bir dokümantasyon var mı?
'armcc'' __ror' intrinsic – ouah
'ROR' ARM yönergesiyle satır içi derlemeyi kullanma hakkında ne var? – ouah
Montajdan kaçınmayı tercih ederim. Bu arada GCC kullanıyorum, bu yüzden hiç bir silah! – Kami