Skip to content

i64 Instructions

Add two i64 values.

Signature: (param i64 i64) (result i64)

Example:

(i64.add (i64.const 5000000000) (i64.const 3000000000))

Subtract two i64 values.

Signature: (param i64 i64) (result i64)

Example:

(i64.sub (i64.const 10) (i64.const 3))

Multiply two i64 values.

Signature: (param i64 i64) (result i64)

Example:

(i64.mul (i64.const 1000) (i64.const 1000))

Create a constant i64 value.

Signature: (result i64)

Example:

(i64.const 9223372036854775807) ;; Max i64
(i64.const -1)

Check if i64 value equals zero.

Signature: (param i64) (result i32)

Example:

(i64.eqz (i64.const 0)) ;; Returns 1

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

Signature: (param i64 i64) (result i64)

Example:

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

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

Signature: (param i64 i64) (result i64)

Example:

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

Signed remainder of division.

Signature: (param i64 i64) (result i64)

Example:

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

Unsigned remainder of division.

Signature: (param i64 i64) (result i64)

Example:

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

Bitwise AND of two i64 values.

Signature: (param i64 i64) (result i64)

Example:

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

Bitwise OR of two i64 values.

Signature: (param i64 i64) (result i64)

Example:

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

Bitwise XOR of two i64 values.

Signature: (param i64 i64) (result i64)

Example:

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

Shift left.

Signature: (param i64 i64) (result i64)

Example:

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

Signed shift right (arithmetic shift).

Signature: (param i64 i64) (result i64)

Example:

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

Unsigned shift right (logical shift).

Signature: (param i64 i64) (result i64)

Example:

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

Rotate left.

Signature: (param i64 i64) (result i64)

Example:

(i64.rotl (i64.const 0x123456789ABCDEF0) (i64.const 4))

Rotate right.

Signature: (param i64 i64) (result i64)

Example:

(i64.rotr (i64.const 0x123456789ABCDEF0) (i64.const 4))

Count leading zeros.

Signature: (param i64) (result i64)

Example:

(i64.clz (i64.const 0x00FF000000000000)) ;; Returns 8

Count trailing zeros.

Signature: (param i64) (result i64)

Example:

(i64.ctz (i64.const 0xFF00000000000000)) ;; Returns 56

Count number of 1 bits (population count).

Signature: (param i64) (result i64)

Example:

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

Check if two i64 values are equal.

Signature: (param i64 i64) (result i32)

Example:

(i64.eq (i64.const 5) (i64.const 5)) ;; Returns 1 (true)

Check if two i64 values are not equal.

Signature: (param i64 i64) (result i32)

Example:

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

Signed less than comparison.

Signature: (param i64 i64) (result i32)

Example:

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

Unsigned less than comparison.

Signature: (param i64 i64) (result i32)

Example:

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

Signed greater than comparison.

Signature: (param i64 i64) (result i32)

Example:

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

Unsigned greater than comparison.

Signature: (param i64 i64) (result i32)

Example:

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

Signed less than or equal comparison.

Signature: (param i64 i64) (result i32)

Example:

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

Unsigned less than or equal comparison.

Signature: (param i64 i64) (result i32)

Example:

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

Signed greater than or equal comparison.

Signature: (param i64 i64) (result i32)

Example:

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

Unsigned greater than or equal comparison.

Signature: (param i64 i64) (result i32)

Example:

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

Load i64 from memory at the given address.

Signature: (param i32) (result i64)

Example:

(i64.load (i32.const 0))
(i64.load offset=8 align=8 (i32.const 0))

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

Signature: (param i32) (result i64)

Example:

(i64.load8_s (i32.const 100))

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

Signature: (param i32) (result i64)

Example:

(i64.load8_u (i32.const 100))

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

Signature: (param i32) (result i64)

Example:

(i64.load16_s (i32.const 100))

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

Signature: (param i32) (result i64)

Example:

(i64.load16_u (i32.const 100))

Load signed 32-bit value from memory and sign-extend to i64.

Signature: (param i32) (result i64)

Example:

(i64.load32_s (i32.const 100))

Load unsigned 32-bit value from memory and zero-extend to i64.

Signature: (param i32) (result i64)

Example:

(i64.load32_u (i32.const 100))

Store i64 value to memory.

Signature: (param i32 i64)

Example:

(i64.store (i32.const 0) (i64.const 42))
(i64.store offset=8 (i32.const 0) (i64.const 100))

Store low 8 bits of i64 to memory.

Signature: (param i32 i64)

Example:

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

Store low 16 bits of i64 to memory.

Signature: (param i32 i64)

Example:

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

Store low 32 bits of i64 to memory.

Signature: (param i32 i64)

Example:

(i64.store32 (i32.const 100) (i64.const 0xFFFFFFFF))

Sign-extend i32 to i64.

Signature: (param i32) (result i64)

Example:

(i64.extend_i32_s (i32.const -1)) ;; Returns -1 (as i64)

Zero-extend i32 to i64.

Signature: (param i32) (result i64)

Example:

(i64.extend_i32_u (i32.const -1)) ;; Returns 0xFFFFFFFF

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

Signature: (param f32) (result i64)

Example:

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

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

Signature: (param f32) (result i64)

Example:

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

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

Signature: (param f64) (result i64)

Example:

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

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

Signature: (param f64) (result i64)

Example:

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

Saturating truncate f32 to signed i64 (no trap).

Signature: (param f32) (result i64)

Example:

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

Saturating truncate f32 to unsigned i64 (no trap).

Signature: (param f32) (result i64)

Example:

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

Saturating truncate f64 to signed i64 (no trap).

Signature: (param f64) (result i64)

Example:

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

Saturating truncate f64 to unsigned i64 (no trap).

Signature: (param f64) (result i64)

Example:

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

Sign-extend 8-bit value to i64.

Signature: (param i64) (result i64)

Example:

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

Sign-extend 16-bit value to i64.

Signature: (param i64) (result i64)

Example:

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

Sign-extend 32-bit value to i64.

Signature: (param i64) (result i64)

Example:

(i64.extend32_s (i64.const 0x80000000)) ;; Returns -2147483648

Reinterpret f64 bits as i64.

Signature: (param f64) (result i64)

Example:

(i64.reinterpret_f64 (f64.const 1.0)) ;; Returns 0x3FF0000000000000