bitmask: Wasm SIMD bitwise Befehl
Der bitmask SIMD bitwise Befehl untersucht das höchstwertige Bit (MSB) jeder Spur einer v128 Wertinterpretation. Dies ist das Vorzeichenbit, wenn die Spur als signiert betrachtet wird. Der Ausgabe-Wert des Befehls entspricht all diesen Bits, die in einem einzigen i32 gesammelt werden, wobei das MSB der Spur 0 im Bit 0 des Ergebnisses, das MSB der Spur 1 im Bit 1 des Ergebnisses usw. enthalten ist.
Hinweis:
Für i8x16.bitmask bedeutet ein MSB von 1, dass der Spurwert größer oder gleich 128 ist (negativ, wenn signiert), während ein MSB von 0 bedeutet, dass der Wert kleiner als 128 ist. Für breitbandigere Spurtypen ist die Schwelle entsprechend höher: 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 Spur 12 des i8x16 Wertes einen Wert von größer oder gleich 128 (genauer gesagt 240), daher ist ihr MSB 1. Alle anderen Bytes haben das MSB auf 0 gesetzt.
Das 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 dezimalen Äquivalent des obigen binären Musters entspricht.
Syntax
value_type.bitmask
value_type-
Der Typ des Wertes, auf den der Befehl ausgeführt wird. Die folgenden Typen unterstützen
bitmask:i8x16i16x8i32x4i64x2
bitmask-
Der
bitmaskBefehl. Muss immer nach demvalue_typeund einem Punkt (.) angegeben werden.
Typ
[input] -> [output]
Binärcode
| Befehl | 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 |