walt
walt copied to clipboard
Unsigned integers
Feature Request
Overview
Walt currently supports only signed integers and signed operations. Since WebAssembly also supports unsigned operations, it would be really neat to also have unsigned types u32
and u64
. These operations should be used:
-
i32.div_u
andi64.div_u
(x / y
) -
i32.rem_u
andi64.rem_u
(x % y
) -
i32.shr_u
andi64.shr_u
(x >> y
) -
i32.lt_u
andi64.lt_u
(x < y
) -
i32.le_u
andi64.le_u
(x <= y
) -
i32.gt_u
andi64.gt_u
(x > y
) -
i32.ge_u
andi64.ge_u
(x >= y
) -
i64.load32_u
(const x: u32 = 10; const y: u64 = x;
) -
i32.trunc_u/f32
(const x: f32 = 10; const y: u32 = x;
) -
i32.trunc_u/f64
(const x: f64 = 10; const y: u32 = x;
) -
i64.extend_u/i32
(const x: u32 = 10; const y: u64 = x;
) -
i64.trunc_u/f32
(const x: f32 = 10; const y: u64 = x;
) -
i64.trunc_u/f64
(const x: f64 = 10; const y: u64 = x;
) -
f32.convert_u/i32
(const x: u32 = 10; const y: f32 = x;
) -
f32.convert_u/i64
(const x: u64 = 10; const y: f32 = x;
) -
f64.convert_u/i32
(const x: u32 = 10; const y: f64 = x;
) -
f64.convert_u/i64
(const x: u64 = 10; const y: f64 = x;
)
Example
const x: u32 = 42;
const y: u32 = 0xffffffff;
const z: i32 = x < y; // should be 1
Hey, thanks for the suggestion! I can see this being useful for sure. This will add an edge case of signed < unsigned
comparisons but without the types, we would have to expose the opcodes above directly.
Will implement this, in some near future.
Well, I think in the case of signed < unsigned
both operands should be treated as unsigned integers (with some additional option to manually cast an unsigned integer to a signed one). But it would be nice to also have all opcodes accessible in some form.