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

View in English Always switch to English

le: Wasm numerische Anweisung

Die le-numerische Anweisung, kurz für less or equal, prüft, ob eine Gleitkommazahl kleiner oder gleich einer anderen Gleitkommazahl ist.

Ganzzahltypen haben separate "kleiner oder gleich"-Anweisungen für vorzeichenbehaftet (le_s) und vorzeichenlos (le_u).

Probieren Sie es aus

(module
  (import "env" "log_bool" (func $log_bool (param i32)))
  (func $main
    ;; load 10.5 and 3.5 onto the stack
    f32.const 10.5
    f32.const 3.5

    f32.le ;; check if 10.5 is less than or equal to 3.5
    call $log_bool ;; log the result
  )
  (start $main)
)
const url = "{%wasm-url%}";

function log_bool(value) {
  console.log(Boolean(value));
  // Expected output: false
}

await WebAssembly.instantiateStreaming(fetch(url), {
  env: { log_bool },
});

Syntax

value_type.le
value_type

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

  • f32
  • f64
  • v128 Interpretationen:
    • f32x4
    • f64x2
le

Die le-Anweisung. Muss immer nach dem value_type und einem Punkt (.) stehen.

Typ

[input1, input2] -> [output]
input1

Der erste Eingabewert.

input2

Der zweite Eingabewert.

output

Der Ausgabewert, der ein Ganzzahltyp sein wird.

Für ein nicht-SIMD le sind die Eingabewerte einfache numerische Werte wie 3.0 oder 3.5. Wenn der erste Eingabewert kleiner oder gleich dem zweiten ist, wird 1 als Ausgabe auf den Stack gelegt, andernfalls 0.

Für ein SIMD le sind die Eingabewerte v128 Wertinterpretationen, zum Beispiel f32x4 2.0 30 86.9 120. Jede Lane der Ausgabe, die auf den Stack gelegt wird, ist eine 1 oder 0, die angibt, ob die entsprechende Lane des ersten Eingabewertes kleiner oder gleich der entsprechenden Lane des zweiten Eingabewertes ist.

Binäre Codierung

Anweisung Binärformat Beispieltext => binär
f32.le 0x5f f32.le => 0x5f
f64.le 0x65 f64.le => 0x65
f32x4.le 0xfd 69:u32 f32x4.le => 0xfd 0x45
f64x2.le 0xfd 75:u32 f64x2.le => 0xfd 0x4b

Beispiele

SIMD le Beispiel

In diesem Beispiel demonstrieren wir die Nutzung von le, um zu testen, ob ein SIMD Lane-Wert kleiner oder gleich dem gleichen Lane-Wert in einem anderen SIMD-Wert ist.

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 Funktion enthält, die einen Wert in das Ausgabe-<p> schreibt. Wir kompilieren und instanziieren unser Wasm-Modul mit der Methode WebAssembly.instantiateStreaming(), wobei wir das Objekt im Prozess importieren.

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 i32-Parameter hat. Dann deklarieren wir zwei SIMD f32x4-Werte und überprüfen, ob die Lane-Werte des ersten kleiner oder gleich denen des zweiten sind, indem wir f32x4.le verwenden. Schließlich extrahieren wir den Wert, der in Lane 3 des Ausgabe-Werts gespeichert ist, mit der extract_lane-Anweisung und geben ihn an das DOM aus, indem wir die importierte Funktion output() aufrufen.

wat
(module
  ;; Import output function
  (import "obj" "output" (func $output (param i32)))

  (func $main
    ;; load two SIMD values onto the stack
    v128.const f32x4 20 12 15 102
    v128.const f32x4 20 12 15 100

    ;; check whether the first value is less than or equal to the second
    f32x4.le
    i32x4.extract_lane 3 ;; Extract a value from the result

    call $output
  )

  (start $main)
)

Ergebnis

Die Ausgabe ist wie folgt:

Das Ergebnis ist 0, weil der in Lane 3 des ersten Eingabewertes gespeicherte Wert nicht kleiner oder gleich dem in Lane 3 des zweiten Eingabewertes gespeicherten Wert ist.

Spezifikationen

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

Browser-Kompatibilität

Siehe auch