Mam problem z ustaleniem równoważności NEON kilku operacji Intel SSE. Wydaje się, że NEON nie jest w stanie obsłużyć całego rejestru Q naraz (typ danych o wartości 128 bitowej). Nie znalazłem nic w nagłówku arm_neon.h lub w NEON intrinsics reference.NEON kontra Intel SSE - równoważność niektórych operacji
Co chcę zrobić jest następujący:
// Intel SSE
// shift the entire 128 bit value with 2 bytes to the right; this is done
// without sign extension by shifting in zeros
__m128i val = _mm_srli_si128(vector_of_8_s16, 2);
// insert the least significant 16 bits of "some_16_bit_val"
// the whole thing in this case, into the selected 16 bit
// integer of vector "val"(the 16 bit element with index 7 in this case)
val = _mm_insert_epi16(val, some_16_bit_val, 7);
Szukałem w operacjach ruchomych świadczonych przez neon, ale nie mógł znaleźć równoważny sposób prowadzenia wyżej (nie mam dużego doświadczenia z NEON). Czy można to zrobić (myślę, że po prostu nie wiem jak)? Wszelkie wskazówki są mile widziane.
Faktycznie zaimplementowałem to już teraz. Czy mógłbyś podać przykład, aby potwierdzić moje podejście? – celavek
usunąłem moją odpowiedź na temat vtbl i vtbx. vext jest drogą do wyjścia! –
@celavek: Podałem przykład, ale sposobem na sprawdzenie swojego podejścia jest testowanie go, a nie porównywanie go z przykładem. Działa albo nie. –