Der beste Weg, um einen __m128i zu verschieben?

Ich muss eine __m128i-Variable (z. B. v) um m Bits verschieben, sodass sich die Bits durch die gesamte Variable bewegen (die resultierende Variable repräsentiert also v * 2 ^ m). Wie geht das am besten?!

Beachten Sie, dass _mm_slli_epi64 v0 und v1 separat verschiebt:

r0 := v0 << count
r1 := v1 << count

so haben die letzten Bits von v0 gefehlt, aber ich möchte diese Bits nach r1 verschieben.

Bearbeiten: Ich suche nach einem Code, der schneller ist als dieser (m <64):

r0 = v0 << m;
r1 = v0 >> (64-m);
r1 ^= v1 << m;
r2 = v1 >> (64-m);

Antworten auf die Frage(4)

Ihre Antwort auf die Frage