shuffle: Wasm SIMD Konvertierungsbefehl
Der shuffle SIMD Konvertierungsbefehl gibt einen neuen v128-Wert zurück, dessen Lane-Werte aus zwei Eingabe-v128-Werten ausgewählt werden, bestimmt durch die bereitgestellten Indexwerte.
Probieren Sie es aus
(module
(import "console" "log" (func $log (param i32)))
(func $main
v128.const i8x16 10 23 56 15 25 29 92 45 36 4 78 12 34 25 72 82
v128.const i8x16 0 80 5 7 3 5 9 2 4 6 1 7 0 3 5 1
i8x16.shuffle 0 17 2 3 8 9 10 11 31 30 28 27 16 17 18 19
i8x16.extract_lane_u 14
call $log ;; log the result
)
(start $main)
)
WebAssembly.instantiateStreaming(fetch("{%wasm-url%}"), { console });
Im obigen Beispiel extrahieren und protokollieren wir den Wert an der Indexposition 14 des Ausgabewertes der shuffle-Anweisung. Dieser wird 5 sein, da die Shuffle-Anweisung den Wert an der Indexposition 3 des zweiten v128-Eingabewertes (dargestellt durch den Indexwert 18) ausgewählt hat, um ihn an die Indexposition 14 des output zu setzen.
Syntax
value_type.shuffle indices
value_type-
Der Typ des Wertes, auf dem die Anweisung ausgeführt wird. Die folgenden
v128-Wertinterpretationen unterstützenshuffle:i8x16
shuffle-
Die
shuffle-Anweisung. Muss immer nach demvalue_typeund einem Punkt (.) angegeben werden. indices-
16 Ganzzahlen im Bereich
0bis31inklusive, die die Indizes der Werte darstellen, die aus den beiden Eingabewerten genommen werden sollen. Werte von0bis15repräsentieren die 16 Indizes des ersten Eingabewertes, und Werte von16bis31repräsentieren die 16 Indizes des zweiten Eingabewertes.
Typ
[input1, input2] -> [output]
Binäre Kodierung
| Anweisung | Binärformat | Beispieltext => binär |
|---|---|---|
i8x16.shuffle |
0xfd 13:u32 l:lane_idx¹⁶ |
i8x16.shuffle 0 17 2 3 8 9 10 11 31 30 28 27 16 17 18 19 => 0xfd 0x0d 0x00 0x11 0x02 0x03 0x08 0x09 0x0a 0x0b 0x1f 0x1e 0x1c 0x1b 0x10 0x11 0x12 0x13 |