1. WebAssembly
  2. Reference
  3. WebAssembly numerische Anweisungen
  4. ne

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

View in English Always switch to English

ne: Wasm-Textanweisung

Die ne-Anweisung, kurz für nicht gleich, überprüft, ob zwei Zahlen ungleich sind.

Probieren Sie es aus

(module
 (import "env" "log_bool" (func $log_bool (param i32)))
 (func $main
 ;; load `10` and `2` onto the stack
 i32.const 10
 i32.const 2
 i32.ne ;; check if `10` is not equal to `2`
 call $log_bool ;; log the result
 )
 (start $main)
)
const url = "{%wasm-url%}";
function log_bool(value) {
 console.log(Boolean(value));
 // Expected output: true
}
await WebAssembly.instantiateStreaming(fetch(url), {
 env: { log_bool },
});

Syntax

value_type.ne
value_type

Der Wertetyp, auf dem die Anweisung ausgeführt wird. Die folgenden Typen unterstützen ne:

  • i32
  • i64
  • f32
  • f64
  • v128-Interpretationen:
    • i8x16
    • i16x8
    • i32x4
    • i64x2
    • f32x4
    • f64x2
ne

Die ne-Anweisung. Muss immer nach dem value_type und einem Punkt (.) eingefügt werden.

Typ

[input1, input2] -> [output]
input1

Der erste Eingabewert.

input2

Der zweite Eingabewert.

output

Ein Wert, der anzeigt, ob die beiden Eingabewerte ungleich sind.

Für ein nicht-SIMD ne sind die Eingabewerte einfache numerische Werte wie 3 oder 3.5. Wenn die beiden Eingabewerte ungleich sind, wird 1 auf den Stapel als Ausgabe geschoben, ansonsten wird 0 auf den Stapel geschoben.

Für ein SIMD ne sind die Eingabewerte v128-Wertinterpretationen, zum Beispiel f32x4 0x9 0xa 0xb 0xc. Jede Lane der Ausgabe, die auf den Stapel geschoben wird, ist eine 1 oder 0, die anzeigt, ob die entsprechenden Lanes der beiden Eingabewerte ungleich sind.

Binäre Kodierung

Anweisung Binärformat Beispiel Text => Binär
i32.ne 0x47 i32.ne => 0x47
i64.ne 0x52 i64.ne => 0x52
f32.ne 0x5c f32.ne => 0x5c
f64.ne 0x62 f64.ne => 0x62
i8x16.ne 0xfd 36:u32 i8x16.ne => 0xfd 0x24
i16x8.ne 0xfd 46:u32 i16x8.ne => 0xfd 0x2e
i32x4.ne 0xfd 56:u32 i32x4.ne => 0xfd 0x38
i64x2.ne 0xfd 215:u32 i64x2.ne => 0xfd 0xd7 0x01
f32x4.ne 0xfd 66:u32 f32x4.ne => 0xfd 0x42
f64x2.ne 0xfd 72:u32 f64x2.ne => 0xfd 0x48

Beispiele

SIMD-Ungleichheitsprüfung

In diesem Beispiel demonstrieren wir, wie man zwei SIMD-Werte auf Ungleichheit prüft.

JavaScript

In unserem Skript greifen wir auf ein <p>-Element zu, in das wir unser Ergebnis ausgeben werden. Dann definieren wir ein Objekt für den Import in Wasm, das eine einzelne Funktion enthält, die einen Wert in das Ausgabe-<p> schreibt. Anschließend kompilieren und instanziieren wir unser Wasm-Modul mit der Methode WebAssembly.instantiateStreaming() und importieren dabei das Objekt.

<p></p>
js
const outputElem = document.querySelector("p");
const obj = {
 output(val) {
 outputElem.textContent += val;
 },
};
WebAssembly.instantiateStreaming(fetch("{%wasm-url%}"), {
 obj,
});

Wasm

In unserem Wasm-Modul importieren wir zunächst die JavaScript-Funktion output(), wobei wir sicherstellen, dass sie einen f64-Parameter hat. Wir deklarieren dann zwei SIMD-f64x2-Werte und verwenden f64x2.ne, um zu prüfen, ob sie gleich sind. Schließlich extrahieren wir den in Lane 1 des Ausgabewerts gespeicherten Wert mithilfe der extract_lane-Anweisung und geben ihn über die importierte output()-Funktion an das DOM aus.

wat
(module
 ;; Import output function
 (import "obj" "output" (func $output (param i64)))
 (func $main
 ;; load two SIMD values onto the stack
 v128.const i64x2 20 12
 v128.const i64x2 20 400000
 i64x2.ne ;; check non-equality
 i64x2.extract_lane 1 ;; Extract a value from the result
 call $output
 )
 (start $main)
)

Ergebnis

Die Ausgabe ist wie folgt:

1 wird ausgegeben, weil die Werte in Lane 1 der beiden Eingabewerte ungleich sind.

Help improve MDN

Erfahren Sie, wie Sie beitragen können Diese Seite wurde automatisch aus dem Englischen übersetzt.

AltStyle によって変換されたページ (->オリジナル) /