fix bug in casting to u128/i128

This commit is contained in:
Folkert 2024-01-27 21:58:56 +01:00
parent 2786e8ff7f
commit 2794348722
No known key found for this signature in database
GPG key ID: 1F17F6FFD112B97C
2 changed files with 19 additions and 4 deletions

View file

@ -4871,14 +4871,28 @@ impl<
// move a zero into the lower 8 bytes
ASM::mov_reg64_imm64(buf, tmp_reg, 0x0);
ASM::mov_base32_reg64(buf, base_offset, tmp_reg);
ASM::mov_base32_reg64(buf, base_offset + 8, tmp_reg);
ASM::mov_base32_reg64(buf, base_offset + 8, src_reg);
ASM::mov_base32_reg64(buf, base_offset, src_reg);
self.free_symbol(&tmp);
return;
}
(U128, I128) | (I128, U128) => {
let to_offset = self.storage_manager.claim_stack_area_layout(
self.layout_interner,
*dst,
Layout::from_int_width(target),
);
let (from_offset, size) = self.storage_manager.stack_offset_and_size(src);
self.storage_manager
.copy_to_stack_offset(buf, size, from_offset, to_offset);
return;
}
_ => {}
}

View file

@ -2297,7 +2297,7 @@ num_conversion_tests! {
to_i64_truncate_wraps, "10_000_000_000_000_000_000i128", -8446744073709551616
)
"Num.toI128", i128, (
to_i128_same_width, "15u128", 15
to_i128_same_width, "15u128", 15, ["gen-dev"]
to_i128_extend, "15i8", 15
)
"Num.toU8", u8, (
@ -2324,8 +2324,9 @@ num_conversion_tests! {
to_u64_truncate_wraps, "10_000_000_000_000_000_000_000i128", 1864712049423024128
)
"Num.toU128", u128, (
to_u128_same_width, "15i128", 15
to_u128_same_width, "15i128", 15, ["gen-dev"]
to_u128_extend, "15i8", 15
to_u128_big, "11562537357600483583u64", 11562537357600483583, ["gen-dev"]
)
"Num.toNat", usize, (
to_nat_same_width, "15i64", 15, ["gen-wasm", "gen-dev"]