Skip to content

i32 Instructions

Add two i32 values.

Signature: (param i32 i32) (result i32)

Example:

(i32.add (i32.const 5) (i32.const 3)) ;; Returns 8

Subtract the second i32 value from the first.

Signature: (param i32 i32) (result i32)

Example:

(i32.sub (i32.const 10) (i32.const 3)) ;; Returns 7

Multiply two i32 values.

Signature: (param i32 i32) (result i32)

Example:

(i32.mul (i32.const 4) (i32.const 5)) ;; Returns 20

Signed division of two i32 values. Traps if divisor is zero.

Signature: (param i32 i32) (result i32)

Example:

(i32.div_s (i32.const -10) (i32.const 3)) ;; Returns -3

Unsigned division of two i32 values. Traps if divisor is zero.

Signature: (param i32 i32) (result i32)

Example:

(i32.div_u (i32.const 10) (i32.const 3)) ;; Returns 3

Signed remainder of division.

Signature: (param i32 i32) (result i32)

Example:

(i32.rem_s (i32.const 10) (i32.const 3)) ;; Returns 1

Unsigned remainder of division.

Signature: (param i32 i32) (result i32)

Example:

(i32.rem_u (i32.const 10) (i32.const 3)) ;; Returns 1

Bitwise AND of two i32 values.

Signature: (param i32 i32) (result i32)

Example:

(i32.and (i32.const 0b1100) (i32.const 0b1010)) ;; Returns 0b1000 (8)

Bitwise OR of two i32 values.

Signature: (param i32 i32) (result i32)

Example:

(i32.or (i32.const 0b1100) (i32.const 0b1010)) ;; Returns 0b1110 (14)

Bitwise XOR of two i32 values.

Signature: (param i32 i32) (result i32)

Example:

(i32.xor (i32.const 0b1100) (i32.const 0b1010)) ;; Returns 0b0110 (6)

Shift left.

Signature: (param i32 i32) (result i32)

Example:

(i32.shl (i32.const 5) (i32.const 2)) ;; Returns 20 (5 << 2)

Signed shift right (arithmetic shift).

Signature: (param i32 i32) (result i32)

Example:

(i32.shr_s (i32.const -8) (i32.const 2)) ;; Returns -2 (preserves sign)

Unsigned shift right (logical shift).

Signature: (param i32 i32) (result i32)

Example:

(i32.shr_u (i32.const 20) (i32.const 2)) ;; Returns 5

Rotate left.

Signature: (param i32 i32) (result i32)

Example:

(i32.rotl (i32.const 0x12345678) (i32.const 4))

Rotate right.

Signature: (param i32 i32) (result i32)

Example:

(i32.rotr (i32.const 0x12345678) (i32.const 4))

Count leading zeros.

Signature: (param i32) (result i32)

Example:

(i32.clz (i32.const 0x00FF0000)) ;; Returns 8

Count trailing zeros.

Signature: (param i32) (result i32)

Example:

(i32.ctz (i32.const 0xFF000000)) ;; Returns 24

Count number of 1 bits (population count).

Signature: (param i32) (result i32)

Example:

(i32.popcnt (i32.const 0b1101)) ;; Returns 3

Check if two i32 values are equal.

Signature: (param i32 i32) (result i32)

Example:

(i32.eq (i32.const 5) (i32.const 5)) ;; Returns 1 (true)
(i32.eq (i32.const 5) (i32.const 3)) ;; Returns 0 (false)

Check if two i32 values are not equal.

Signature: (param i32 i32) (result i32)

Example:

(i32.ne (i32.const 5) (i32.const 3)) ;; Returns 1 (true)

Check if i32 value equals zero.

Signature: (param i32) (result i32)

Example:

(i32.eqz (i32.const 0)) ;; Returns 1 (true)
(i32.eqz (i32.const 5)) ;; Returns 0 (false)

Signed less than comparison.

Signature: (param i32 i32) (result i32)

Example:

(i32.lt_s (i32.const -5) (i32.const 3)) ;; Returns 1 (true)

Unsigned less than comparison.

Signature: (param i32 i32) (result i32)

Example:

(i32.lt_u (i32.const 3) (i32.const 5)) ;; Returns 1 (true)

Signed greater than comparison.

Signature: (param i32 i32) (result i32)

Example:

(i32.gt_s (i32.const 5) (i32.const 3)) ;; Returns 1 (true)

Unsigned greater than comparison.

Signature: (param i32 i32) (result i32)

Example:

(i32.gt_u (i32.const 5) (i32.const 3)) ;; Returns 1 (true)

Signed less than or equal comparison.

Signature: (param i32 i32) (result i32)

Example:

(i32.le_s (i32.const 5) (i32.const 5)) ;; Returns 1 (true)

Unsigned less than or equal comparison.

Signature: (param i32 i32) (result i32)

Example:

(i32.le_u (i32.const 5) (i32.const 5)) ;; Returns 1 (true)

Signed greater than or equal comparison.

Signature: (param i32 i32) (result i32)

Example:

(i32.ge_s (i32.const 5) (i32.const 5)) ;; Returns 1 (true)

Unsigned greater than or equal comparison.

Signature: (param i32 i32) (result i32)

Example:

(i32.ge_u (i32.const 5) (i32.const 3)) ;; Returns 1 (true)

Create a constant i32 value.

Signature: (result i32)

Example:

(i32.const 42)
(i32.const -10)
(i32.const 0xFF) ;; Hexadecimal

Load i32 from memory at the given address.

Signature: (param i32) (result i32)

Example:

;; Load from memory at offset 0
(i32.load (i32.const 0))
;; Load with alignment hint
(i32.load offset=4 align=4 (i32.const 0))

Load signed 8-bit value from memory and sign-extend to i32.

Signature: (param i32) (result i32)

Example:

(i32.load8_s (i32.const 100)) ;; Load byte at address 100

Load unsigned 8-bit value from memory and zero-extend to i32.

Signature: (param i32) (result i32)

Example:

(i32.load8_u (i32.const 100))

Load signed 16-bit value from memory and sign-extend to i32.

Signature: (param i32) (result i32)

Example:

(i32.load16_s (i32.const 100))

Load unsigned 16-bit value from memory and zero-extend to i32.

Signature: (param i32) (result i32)

Example:

(i32.load16_u (i32.const 100))

Store i32 value to memory.

Signature: (param i32 i32)

Example:

;; Store 42 at memory address 0
(i32.store (i32.const 0) (i32.const 42))
;; Store with offset
(i32.store offset=8 (i32.const 0) (i32.const 100))

Store low 8 bits of i32 to memory.

Signature: (param i32 i32)

Example:

(i32.store8 (i32.const 100) (i32.const 0xFF))

Store low 16 bits of i32 to memory.

Signature: (param i32 i32)

Example:

(i32.store16 (i32.const 100) (i32.const 0xFFFF))

Wrap i64 to i32 (keep low 32 bits).

Signature: (param i64) (result i32)

Example:

(i32.wrap_i64 (i64.const 0x123456789ABCDEF0)) ;; Returns 0x9ABCDEF0

Truncate f32 to signed i32. Traps on overflow or NaN.

Signature: (param f32) (result i32)

Example:

(i32.trunc_f32_s (f32.const -3.7)) ;; Returns -3

Truncate f32 to unsigned i32. Traps on overflow or NaN.

Signature: (param f32) (result i32)

Example:

(i32.trunc_f32_u (f32.const 3.7)) ;; Returns 3

Truncate f64 to signed i32. Traps on overflow or NaN.

Signature: (param f64) (result i32)

Example:

(i32.trunc_f64_s (f64.const -3.7)) ;; Returns -3

Truncate f64 to unsigned i32. Traps on overflow or NaN.

Signature: (param f64) (result i32)

Example:

(i32.trunc_f64_u (f64.const 3.7)) ;; Returns 3

Saturating truncate f32 to signed i32 (no trap).

Signature: (param f32) (result i32)

Example:

(i32.trunc_sat_f32_s (f32.const inf)) ;; Returns i32.max

Saturating truncate f32 to unsigned i32 (no trap).

Signature: (param f32) (result i32)

Example:

(i32.trunc_sat_f32_u (f32.const -1.0)) ;; Returns 0

Saturating truncate f64 to signed i32 (no trap).

Signature: (param f64) (result i32)

Example:

(i32.trunc_sat_f64_s (f64.const inf)) ;; Returns i32.max

Saturating truncate f64 to unsigned i32 (no trap).

Signature: (param f64) (result i32)

Example:

(i32.trunc_sat_f64_u (f64.const -1.0)) ;; Returns 0

Sign-extend 8-bit value to i32.

Signature: (param i32) (result i32)

Example:

(i32.extend8_s (i32.const 0x80)) ;; Returns -128

Sign-extend 16-bit value to i32.

Signature: (param i32) (result i32)

Example:

(i32.extend16_s (i32.const 0x8000)) ;; Returns -32768

Reinterpret f32 bits as i32.

Signature: (param f32) (result i32)

Example:

(i32.reinterpret_f32 (f32.const 1.0)) ;; Returns 0x3F800000