2015-12-08 6 views
-1

J'ai deux registres __m128i, appelons-les srcA et srcB. A partir de ce que je veux obtenir un registre de __m128i, disons dst, qui contient les mots suivants (pseudo-code en supposant srcA, srcB et dst sont des pointeurs de mots):Intel Intrinsics: combiner tous les autres mots à partir de 2 registres

dst[0] = srcA[0]; 
dst[1] = srcA[1]; 
dst[2] = srcA[2]; 
dst[3] = srcA[3]; 
dst[4] = srcB[0]; 
dst[5] = srcB[1]; 
dst[6] = srcB[2]; 
dst[7] = srcB[3]; 

Comment puis-je accomplir cette tâche sortie en utilisant intrinsics?

+0

Donc, c'est ce que vous voulez obtenir. Bien. Quelle est la question? Aussi: '__m128i' est un mot-clé Microsoft C, mais il n'y a pas de balise' C' sur la question. Il existe cependant une balise 'assembly' sur la question. Alors, cherchez-vous une solution en C, ou une solution impliquant l'assemblage avec XMM [0-7]? –

+0

Edité la question ... Je suis à la recherche d'une solution en utilisant l'assemblage. – Warpin

+0

Votre question mentionne toujours "intrinsics" et "__m128i" qui sont des concepts C/C++, pas un assemblage. Aussi, vous devriez mentionner quelle architecture Intel. On suppose que vous voulez dire x86, mais le compilateur Itanium (IA-64) d'Intel supporte aussi les intrinsèques basées sur __m128. –

Répondre

1

Vous avez également oublié de mentionner le niveau SSE que vous ciblez. En tant que tel, je vais utiliser le plus pratique, SSE4.1 :)

dst = _mm_blend_epi16(srcA, _mm_slli_si128 (srcB, 8), 0xf0);