bitmask: Wasm SIMD Bitweisen-Anweisung
Die bitmask SIMD Bitweisen-Anweisung betrachtet das höchstwertige Bit (MSB) jeder Lane einer Interpretation des v128 Wertes. Dies ist das Vorzeichenbit, wenn die Lane als vorzeichenbehaftet betrachtet wird. Der Ausgabewert der Anweisung entspricht all diesen Bits, die in einem einzelnen i32 gesammelt wurden, wobei das höchstwertige Bit von Lane 0 im Bit 0 des Ergebnisses, das höchstwertige Bit von Lane 1 im Bit 1 usw. ist.
Hinweis:
Für i8x16.bitmask bedeutet ein höchstwertiges Bit von 1, dass der Lane-Wert größer oder gleich 128 ist (negativ, wenn vorzeichenbehaftet), während ein höchstwertiges Bit von 0 bedeutet, dass der Wert kleiner als 128 ist. Für breitere Lane-Typen ist der Schwellenwert entsprechend größer: 32768 für i16x8, 2147483648 für i32x4.
Probieren Sie es aus
(module
(import "console" "log" (func $log (param i32)))
(func $main
v128.const i8x16 10 23 45 6 90 1 12 120 0 78 89 13 240 51 62 0
i8x16.bitmask
call $log ;; log the result
)
(start $main)
)
WebAssembly.instantiateStreaming(fetch("{%wasm-url%}"), { console });
Im obigen Beispiel hat nur die Lane 12 des i8x16 Wertes einen Wert von größer oder gleich 128 (240, um genau zu sein), daher ist ihr höchstwertiges Bit 1. Alle anderen Bytes haben das höchstwertige Bit auf 0 gesetzt.
Der Ausgabe-i32 ist daher gleich:
0000 0001 0000 0000 0000
(nur Bit 12 ist auf 1 gesetzt).
Der Ausgabe-Wert des Beispiels ist 4096, was dem Dezimalwert des obigen Binärmusters entspricht.
Syntax
value_type.bitmask
value_type-
Der Typ des Wertes, auf dem die Anweisung ausgeführt wird. Die folgenden Typen unterstützen
bitmask:i8x16i16x8i32x4i64x2
bitmask-
Die
bitmask-Anweisung. Muss immer nach demvalue_typeund einem Punkt (.) eingefügt werden.
Typ
[input] -> [output]
Binärcodierung
| Anweisung | Binärformat | Beispieltext => binär |
|---|---|---|
i8x16.bitmask |
0xfd 100:u32 |
i8x16.bitmask => 0xfd 0x64 |
i16x8.bitmask |
0xfd 132:u32 |
i16x8.bitmask => 0xfd 0x84 0x01 |
i32x4.bitmask |
0xfd 164:u32 |
i32x4.bitmask => 0xfd 0xa4 0x01 |
i64x2.bitmask |
0xfd 196:u32 |
i64x2.bitmask => 0xfd 0xc4 0x01 |
Spezifikationen
| Spezifikation |
|---|
| WebAssembly Core Specification> # vector-instructions%E2%91%A8> |