Tôi đang cố gắng tối ưu hóa mã của mình bằng cách sử dụng nội tại Neon. Tôi có vòng xoay 24 bit trên mảng 128 bit (8 mỗi uint16_t
).Xoay 128 bit bằng cách sử dụng ARM Neon nội tại
Đây là mã c của tôi:
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);
}
Tôi đã kiểm tra các tài liệu gcc về Neon Intrinsics và nó không có hướng dẫn cho phép quay vectơ. Hơn nữa, tôi đã cố gắng để làm điều này bằng cách sử dụng vshlq_n_u16(temp, 8)
nhưng tất cả các bit chuyển bên ngoài một từ uint16_t
bị mất.
Làm thế nào để đạt được điều này bằng cách sử dụng neon nội tại? Bằng cách này là có một tài liệu tốt hơn về GCC Neon Intrinsics?
'armcc' có' __ror' nội tại – ouah
Điều gì về việc sử dụng lắp ráp nội tuyến bằng lệnh 'ROR' ARM? – ouah
Tôi muốn tránh lắp ráp. Bằng cách này tôi đang sử dụng GCC vì vậy không có armcc! – Kami