add_sat_s: Wasm SIMD arithmetic instruction

The add_sat_s SIMD arithmetic instruction performs a saturating addition of two signed v128 value interpretations — clamping the output to the range allowed by the value type. Each lane of the output value is the result of adding the corresponding lanes of the input value.

Try it

(module
  (import "console" "log" (func $log (param i32)))
  (func $main
    v128.const i16x8 4 6 16 8 23 65 82 9
    v128.const i16x8 0 25 2 30 2 34 45 80

    i16x8.add_sat_s
    i16x8.extract_lane_s 7
    call $log ;; log the result
  )
  (start $main)
)
WebAssembly.instantiateStreaming(fetch("{%wasm-url%}"), { console });

Saturation means that the output values are clamped to the upper and lower values allowed by the value interpretation instead of wrapping. Allowed output values are:

  • i8x16.add_sat_s: −128 to 127 (the full range of a signed 8-bit integer)
  • i16x8.add_sat_s: −32,768 to 32,767 (the full range of a signed 16-bit integer)

Syntax

value_type.add_sat_s
value_type

The type of value the instruction is being run on. The following types support add_sat_s:

  • i8x16
  • i16x8
add_sat_s

The add_sat_s instruction. Must always be included after the value_type and a period (.).

Type

[input1, input2] -> [output]
input1

The first input value.

input2

The second input value.

output

The output value.

Binary encoding

Instruction Binary format Example text => binary
i8x16.add_sat_s 0xfd 111:u32 i8x16.add_sat_s => 0xfd 0x6f
i16x8.add_sat_s 0xfd 143:u32 i16x8.add_sat_s => 0xfd 0x8f 0x01

Specifications

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

Browser compatibility

See also