2012-04-04 9 views
0

ist der Prototyp für die Funktion:Mit __builtin_ia32_shufps einen Vektor um 32 Bits verschieben? Diese

v4si __builtin_ia32_shufps (v4si, v4si, int) 

Auf einigen Websites, die ich gefunden hatten aber hex in der int Feld, und es sah mochte es hohe und niedrige Bits getrennt, aber was ich will, ist eine logische 32 Bitverschiebung.

X3 X2 X1 X0 shifted by 32 bits to get X2 X1 X0 0 

Ein weiteres Beispiel unter Verwendung von 2 v4si Vektoren:

X7 X6 X5 X4 | X3 X2 X1 X0, where each X is a 32 bit and what I want for a shift is the 
same a logical shift, but with each vector element. So: 
X7 X6 X5 X4 | X3 X2 X1 X0 << 2 = X5 X4 X3 X2 | X1 X0 0 0 

Ist shufps der richtige Befehl, dies zu tun?

+2

Ich denke du meinst „Bits“, nicht „Bytes“. – Mysticial

+0

Was ist 'v4sf' definiert? –

+0

Korrekt Ich meine Bits, v4sf ist ein 128-Bit-Vektor, aufgeteilt in logische 4 32-Bit-Vektoren. Ich denke * – Jim

Antwort

2

Betrachten Sie Ihr Beispiel mit zwei Vektoren Ich denke, was Sie wahrscheinlich suchen, ist _mm_alignr_epi8 (PALIGNR). Dies funktioniert für jede Verschiebung eines Paars von Vektoren durch eine beliebige Anzahl von Bytes, so dass Sie den Verschiebungsparameter mit sizeof(int), z.

v = _mm_alignr_epi8(v0, v1, 2 * sizeof(int)); 

Beachten Sie, dass dieser Befehl in SSSE3 nur verfügbar ist, und später, der so ziemlich jedes Intel CPU bedeutet seit ~ 2005

Verwandte Themen