Löschen Sie die oberen Bytes von __m128i
Wie lösche ich die16 - i
obere Bytes von a__m128i
?
Ich habe es versucht. es funktioniert, aber ich frage mich, ob es einen besseren (kürzeren, schnelleren) Weg gibt:
int i = ... // 0 < i < 16
__m128i x = ...
__m128i mask = _mm_set_epi8(
0,
(i > 14) ? -1 : 0,
(i > 13) ? -1 : 0,
(i > 12) ? -1 : 0,
(i > 11) ? -1 : 0,
(i > 10) ? -1 : 0,
(i > 9) ? -1 : 0,
(i > 8) ? -1 : 0,
(i > 7) ? -1 : 0,
(i > 6) ? -1 : 0,
(i > 5) ? -1 : 0,
(i > 4) ? -1 : 0,
(i > 3) ? -1 : 0,
(i > 2) ? -1 : 0,
(i > 1) ? -1 : 0,
-1);
x = _mm_and_si128(x, mask);