sub128: Wasm numeric instruction

The sub128 numeric instruction subtracts one 128-bit integer — represented by two 64-bit integers — from another to produce a 128-bit result represented by two 64-bit integers.

Try it

(module
  (import "console" "log" (func $log (param i64)))
  (func $main

    i64.const 123456789012345
    i64.const 123456789070
    i64.const 98765432101
    i64.const 9876543210123
    i64.sub128
    call $log ;; log high 64 bits
    call $log ;; log low 64 bits
  )
  (start $main)
)
const url = "{%wasm-url%}";
await WebAssembly.instantiateStreaming(fetch(url), { console });

WAT syntax

i64.sub128
i64.sub128

The i64.sub128 instruction.

Immediates

None.

Operand stack

[low_left_input:i64 high_left_input:i64 low_right_input:i64 high_right_input:i64] -> [low_output:i64 high_output:i64]
low_left_input

An i64 representing the low 64 bits of the left-hand-side 128-bit integer.

high_left_input

An i64 representing the high 64 bits of the left-hand-side 128-bit integer.

low_right_input

An i64 representing the low 64 bits of the right-hand-side 128-bit integer.

high_right_input

An i64 representing the high 64 bits of the right-hand-side 128-bit integer.

low_output

An i64 representing the low 64 bits of the result.

high_output

An i64 representing the high 64 bits of the result.

Binary encoding

Instruction Binary format Example text => binary
i64.sub128 0xfc 20:u32 i64.sub128 => 0xfc 0x14

Description

The sub128 instruction subtracts one 128-bit integer — represented by two i64 values — from another to produce a 128-bit result represented by two i64 values. Such operations are termed wide arithmetic, which is useful in any situation where larger-than-64-bit numbers are being used in source languages with Wasm as a compile target, for example cryptographic algorithms.

More importantly, it also allows engines to generate more efficient machine code for these operations than is possible with i64 arithmetic operations.

Specifications

This feature does not appear to be defined in any specification.

Browser compatibility

See also