Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

bitselect: Wasm SIMD bitweise Anweisung

Die bitselect SIMD bitweise Anweisung nimmt drei v128-Werte als Eingaben — zwei Eingabewerte und einen Maskenwert — und gibt einen neuen v128-Wert zurück, wobei jedes Byte mit der Formel output = (input1 AND mask) OR (input2 AND NOT mask) berechnet wird.

Probieren Sie es aus

(module
  (import "console" "log" (func $log (param i32)))
  (func $main
    v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
    v128.const i8x16 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15 15
    v128.const i8x16 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6
    v128.bitselect

    i8x16.extract_lane_u 15
    call $log ;; log the result
  )
  (start $main)
)
WebAssembly.instantiateStreaming(fetch("{%wasm-url%}"), { console });

Im obigen Beispiel haben wir alle Eingabewert-Spuren zur Vereinfachung auf denselben Wert gesetzt. Der Ablauf zur Berechnung des Ausgabewerts (9) anhand der Formel output = (input1 AND mask) OR (input2 AND NOT mask) sieht folgendermaßen aus:

  1. Die erste Eingabe ist 1, was in binärer Form 0 0 0 0 0 0 0 1 ist.

  2. Die zweite Eingabe ist 15, was in binärer Form 0 0 0 0 1 1 1 1 ist.

  3. Die Maske ist 6, was in binärer Form 0 0 0 0 0 1 1 0 ist.

  4. input1 AND mask wird wie folgt berechnet:

    input1           0 0 0 0 0 0 0 1
    mask             0 0 0 0 0 1 1 0
    input1 AND mask  0 0 0 0 0 0 0 0
    
  5. input2 AND NOT mask wird wie folgt berechnet:

    input2               0 0 0 0 1 1 1 1
    NOT mask             1 1 1 1 1 0 0 1
    input2 AND NOT mask  0 0 0 0 1 0 0 1
    
  6. Dann verwenden wir OR auf die beiden Ergebnisse aus den Schritten 4. und 5.:

    result1  0 0 0 0 0 0 0 0
    result2  0 0 0 0 1 0 0 1
    OR       0 0 0 0 1 0 0 1
    

0 0 0 0 1 0 0 1 ist das binäre Äquivalent von 9.

Syntax

v128.bitselect
v128.bitselect

Die v128.bitselect-Anweisung.

Typ

[input1, input2, mask] -> [output]
input1

Die erste Eingabe v128-Wertinterpretation.

input2

Die zweite Eingabe v128-Wertinterpretation.

mask

Die Masken v128-Wertinterpretation.

output

Die Ausgabe v128-Wertinterpretation.

Binäre Codierung

Anweisung Binärformat Beispieltext => binär
v128.bitselect 0xfd 82:u32 v128.bitselect => 0xfd 0x52

Spezifikationen

Spezifikation
WebAssembly Core Specification
# vector-instructions%E2%91%A8

Browser-Kompatibilität