Übersetzen von SSE nach Neon: Packen und anschließendes Extrahieren des 32-Bit-Ergebnisses

Ich muss die folgenden Anweisungen von SSE nach Neon übersetzen

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

Wo

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

Also im Grunde muss ich 4., 8., 12. und 16. Byte aus dem Register nehmen und es in ein @ setzuint32_t. Sieht aus wie eine Packanweisung (in SSE erinnere ich mich offenbar, dass ich shuffle verwendet habe, weil dadurch eine Anweisung im Vergleich zum Packen gespart wird.dieses Beispiel zeigt die Verwendung von Verpackungsanweisungen.

Wie wird diese Operation in Neon übersetzt?
Sollte ich Packanweisungen verwenden?
Wie extrahiere ich dann 32bit? (Gibt es etwas äquivalent zu_mm_cvtsi128_si32?)

Bearbeiten
Beginnen mit,vgetq_lane_u32 sollte erlauben, @ zu ersetz_mm_cvtsi128_si32 (aber ich muss mein uint8x16_t in uint32x4_t umwandeln)

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

oder direkt die Fahrspur speichernvst1q_lane_u32

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

Antworten auf die Frage(4)

Ihre Antwort auf die Frage