shuffle: Wasm SIMD-Konvertierungsanweisung
Die shuffle SIMD-Konvertierungsanweisung gibt einen neuen v128-Wert zurück, dessen Lanes aus zwei Eingabe-v128-Werten ausgewählt werden, die durch gegebene Indexwerte bestimmt werden.
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 shuffle-Anweisungsausgabewerts. Dies wird 5 sein, da die shuffle-Anweisung den Wert an Indexposition 3 des zweiten v128-Eingabewertes (dargestellt durch den Indexwert 18) ausgewählt hat, um ihn an Indexposition 14 des output zu setzen.
Syntax
value_type.shuffle indices
value_type-
Der Typ des Werts, 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 (.) eingefügt werden. indices-
16 ganze Zahlen im Bereich von
0bis31inklusive, die die Indizes der Werte darstellen, die von den beiden Eingabewerten genommen werden sollen. Werte von0bis15repräsentieren die 16 Indizes des ersten Eingabewerts, und Werte von16bis31repräsentieren die 16 Indizes des zweiten Eingabewerts.
Typ
[input1, input2] -> [output]
Binäre Kodierung
| Anweisung | Binäres Format | Beispieltext => binär |
|---|---|---|
i8x16.shuffle |
0xfd 13:u32 l:laneidx¹⁶ |
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 |