2016-05-07 14 views

Antwort

3

Sie verwenden immer noch _MM_SHUFFLE() für Shuffles, die den Steuereingang als 8bit sofort nehmen. z.B. _mm256_shuffle_epi32 (vpshufd) mischt das gleiche auf beiden Spuren.

_MM_SHUFFLE(dd,cc,bb,aa) packt nur die niedrigen 2 Bits von jedem arg in 0bddccbbaa.

Sie können _MM_SHUFFLE(1,1,1,1) (Broadcast-Element 1) als 0b01010101, d. H. 0x55 schreiben.

Sie können C++ 14 Trennzeichen (oder was auch immer sie genannt werden) verwenden, um es als 0b01'01'01'01 für bessere menschliche Lesbarkeit zu schreiben, insb. in Fällen, in denen jedes Element anders ist.

+0

Ich denke, base-4 ist in diesem Fall besser als binär. Zwei base-4 Ziffern sind eine Base-16 (hex) Ziffer. Wenn Sie zum Beispiel 3,1,1,1 shuffle, wäre das 3 * 4 + 1, 1 * 4 + 2 = 0xda. Auf der anderen Seite ist _MM_SHUFFLE grundsätzlich base-4 und besser lesbar. –

+0

@Zboson: Können Sie Base-4 in C verwenden? Ich benutze _MM_SHUFFLE in C, aber '0baabbccdd' in asm. Ich denke, in einer '.S'-Datei, die gcc vor der Assemblierung durch CPP läuft, könnten Sie die Makrodefinition für _MM_SHUFFLE kopieren. –

+0

Nein, ich mache es in meinem Kopf und schreibe den Hexwert aus oder schreibe einen Kommentar. Aber '_MM_SHUFFLE' ist im Grunde ein Basis-4-Makro. –