Перевод SSE в Neon: как упаковать и извлечь 32-битный результат

Я должен перевести следующие инструкции из SSE в Neon

 uint32_t a = _mm_cvtsi128_si32(_mm_shuffle_epi8(a,SHUFFLE_MASK) );

Куда:

static const __m128i SHUFFLE_MASK = _mm_setr_epi8(3,  7,  11, 15, -1, -1, -1, -1,
                                                  -1, -1, -1, -1, -1, -1, -1, -1);

В общем, я должен взять 4-й, 8-й, 12-й и 16-й байты из регистра и поместить их вuint32_t, Похоже на инструкцию по упаковке (в SSE я помню, что использовал shuffle, потому что она сохраняет одну инструкцию по сравнению с упаковкой,этот пример показывает использование инструкции по упаковке).

Как эта операция переводится в Neon?
Должен ли я использовать инструкции по упаковке?
Как мне извлечь 32 бита? (Есть ли что-нибудь эквивалентное_mm_cvtsi128_si32?)

Редактировать:
Начать с,vgetq_lane_u32 должно позволить заменить_mm_cvtsi128_si32 (но мне придется привести свой uint8x16_t к uint32x4_t)

uint32_t  vgetq_lane_u32(uint32x4_t vec, __constrange(0,3) int lane);

или напрямую хранить переулокvst1q_lane_u32

void  vst1q_lane_u32(__transfersize(1) uint32_t * ptr, uint32x4_t val, __constrange(0,3) int lane); // VST1.32 {d0[0]}, [r0]

Ответы на вопрос(2)

Ваш ответ на вопрос