i32 Instructions
i32.add
Section titled “i32.add”Add two i32 values.
Signature: (param i32 i32) (result i32)
Example:
(i32.add (i32.const 5) (i32.const 3)) ;; Returns 8i32.sub
Section titled “i32.sub”Subtract the second i32 value from the first.
Signature: (param i32 i32) (result i32)
Example:
(i32.sub (i32.const 10) (i32.const 3)) ;; Returns 7i32.mul
Section titled “i32.mul”Multiply two i32 values.
Signature: (param i32 i32) (result i32)
Example:
(i32.mul (i32.const 4) (i32.const 5)) ;; Returns 20i32.div_s
Section titled “i32.div_s”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 -3i32.div_u
Section titled “i32.div_u”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 3i32.rem_s
Section titled “i32.rem_s”Signed remainder of division.
Signature: (param i32 i32) (result i32)
Example:
(i32.rem_s (i32.const 10) (i32.const 3)) ;; Returns 1i32.rem_u
Section titled “i32.rem_u”Unsigned remainder of division.
Signature: (param i32 i32) (result i32)
Example:
(i32.rem_u (i32.const 10) (i32.const 3)) ;; Returns 1i32.and
Section titled “i32.and”Bitwise AND of two i32 values.
Signature: (param i32 i32) (result i32)
Example:
(i32.and (i32.const 0b1100) (i32.const 0b1010)) ;; Returns 0b1000 (8)i32.or
Section titled “i32.or”Bitwise OR of two i32 values.
Signature: (param i32 i32) (result i32)
Example:
(i32.or (i32.const 0b1100) (i32.const 0b1010)) ;; Returns 0b1110 (14)i32.xor
Section titled “i32.xor”Bitwise XOR of two i32 values.
Signature: (param i32 i32) (result i32)
Example:
(i32.xor (i32.const 0b1100) (i32.const 0b1010)) ;; Returns 0b0110 (6)i32.shl
Section titled “i32.shl”Shift left.
Signature: (param i32 i32) (result i32)
Example:
(i32.shl (i32.const 5) (i32.const 2)) ;; Returns 20 (5 << 2)i32.shr_s
Section titled “i32.shr_s”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)i32.shr_u
Section titled “i32.shr_u”Unsigned shift right (logical shift).
Signature: (param i32 i32) (result i32)
Example:
(i32.shr_u (i32.const 20) (i32.const 2)) ;; Returns 5i32.rotl
Section titled “i32.rotl”Rotate left.
Signature: (param i32 i32) (result i32)
Example:
(i32.rotl (i32.const 0x12345678) (i32.const 4))i32.rotr
Section titled “i32.rotr”Rotate right.
Signature: (param i32 i32) (result i32)
Example:
(i32.rotr (i32.const 0x12345678) (i32.const 4))i32.clz
Section titled “i32.clz”Count leading zeros.
Signature: (param i32) (result i32)
Example:
(i32.clz (i32.const 0x00FF0000)) ;; Returns 8i32.ctz
Section titled “i32.ctz”Count trailing zeros.
Signature: (param i32) (result i32)
Example:
(i32.ctz (i32.const 0xFF000000)) ;; Returns 24i32.popcnt
Section titled “i32.popcnt”Count number of 1 bits (population count).
Signature: (param i32) (result i32)
Example:
(i32.popcnt (i32.const 0b1101)) ;; Returns 3i32.eq
Section titled “i32.eq”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)i32.ne
Section titled “i32.ne”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)i32.eqz
Section titled “i32.eqz”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)i32.lt_s
Section titled “i32.lt_s”Signed less than comparison.
Signature: (param i32 i32) (result i32)
Example:
(i32.lt_s (i32.const -5) (i32.const 3)) ;; Returns 1 (true)i32.lt_u
Section titled “i32.lt_u”Unsigned less than comparison.
Signature: (param i32 i32) (result i32)
Example:
(i32.lt_u (i32.const 3) (i32.const 5)) ;; Returns 1 (true)i32.gt_s
Section titled “i32.gt_s”Signed greater than comparison.
Signature: (param i32 i32) (result i32)
Example:
(i32.gt_s (i32.const 5) (i32.const 3)) ;; Returns 1 (true)i32.gt_u
Section titled “i32.gt_u”Unsigned greater than comparison.
Signature: (param i32 i32) (result i32)
Example:
(i32.gt_u (i32.const 5) (i32.const 3)) ;; Returns 1 (true)i32.le_s
Section titled “i32.le_s”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)i32.le_u
Section titled “i32.le_u”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)i32.ge_s
Section titled “i32.ge_s”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)i32.ge_u
Section titled “i32.ge_u”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)i32.const
Section titled “i32.const”Create a constant i32 value.
Signature: (result i32)
Example:
(i32.const 42)(i32.const -10)(i32.const 0xFF) ;; Hexadecimali32.load
Section titled “i32.load”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))i32.load8_s
Section titled “i32.load8_s”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 100i32.load8_u
Section titled “i32.load8_u”Load unsigned 8-bit value from memory and zero-extend to i32.
Signature: (param i32) (result i32)
Example:
(i32.load8_u (i32.const 100))i32.load16_s
Section titled “i32.load16_s”Load signed 16-bit value from memory and sign-extend to i32.
Signature: (param i32) (result i32)
Example:
(i32.load16_s (i32.const 100))i32.load16_u
Section titled “i32.load16_u”Load unsigned 16-bit value from memory and zero-extend to i32.
Signature: (param i32) (result i32)
Example:
(i32.load16_u (i32.const 100))i32.store
Section titled “i32.store”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))i32.store8
Section titled “i32.store8”Store low 8 bits of i32 to memory.
Signature: (param i32 i32)
Example:
(i32.store8 (i32.const 100) (i32.const 0xFF))i32.store16
Section titled “i32.store16”Store low 16 bits of i32 to memory.
Signature: (param i32 i32)
Example:
(i32.store16 (i32.const 100) (i32.const 0xFFFF))i32.wrap_i64
Section titled “i32.wrap_i64”Wrap i64 to i32 (keep low 32 bits).
Signature: (param i64) (result i32)
Example:
(i32.wrap_i64 (i64.const 0x123456789ABCDEF0)) ;; Returns 0x9ABCDEF0i32.trunc_f32_s
Section titled “i32.trunc_f32_s”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 -3i32.trunc_f32_u
Section titled “i32.trunc_f32_u”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 3i32.trunc_f64_s
Section titled “i32.trunc_f64_s”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 -3i32.trunc_f64_u
Section titled “i32.trunc_f64_u”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 3i32.trunc_sat_f32_s
Section titled “i32.trunc_sat_f32_s”Saturating truncate f32 to signed i32 (no trap).
Signature: (param f32) (result i32)
Example:
(i32.trunc_sat_f32_s (f32.const inf)) ;; Returns i32.maxi32.trunc_sat_f32_u
Section titled “i32.trunc_sat_f32_u”Saturating truncate f32 to unsigned i32 (no trap).
Signature: (param f32) (result i32)
Example:
(i32.trunc_sat_f32_u (f32.const -1.0)) ;; Returns 0i32.trunc_sat_f64_s
Section titled “i32.trunc_sat_f64_s”Saturating truncate f64 to signed i32 (no trap).
Signature: (param f64) (result i32)
Example:
(i32.trunc_sat_f64_s (f64.const inf)) ;; Returns i32.maxi32.trunc_sat_f64_u
Section titled “i32.trunc_sat_f64_u”Saturating truncate f64 to unsigned i32 (no trap).
Signature: (param f64) (result i32)
Example:
(i32.trunc_sat_f64_u (f64.const -1.0)) ;; Returns 0i32.extend8_s
Section titled “i32.extend8_s”Sign-extend 8-bit value to i32.
Signature: (param i32) (result i32)
Example:
(i32.extend8_s (i32.const 0x80)) ;; Returns -128i32.extend16_s
Section titled “i32.extend16_s”Sign-extend 16-bit value to i32.
Signature: (param i32) (result i32)
Example:
(i32.extend16_s (i32.const 0x8000)) ;; Returns -32768i32.reinterpret_f32
Section titled “i32.reinterpret_f32”Reinterpret f32 bits as i32.
Signature: (param f32) (result i32)
Example:
(i32.reinterpret_f32 (f32.const 1.0)) ;; Returns 0x3F800000