mirror of
https://github.com/roc-lang/roc.git
synced 2025-08-04 04:08:19 +00:00
support 128-bit literals
This commit is contained in:
parent
9cb2c993f1
commit
f1fa014524
3 changed files with 37 additions and 17 deletions
|
@ -2147,6 +2147,26 @@ impl<
|
|||
let val = *x;
|
||||
ASM::mov_reg64_imm64(&mut self.buf, reg, i128::from_ne_bytes(val) as i64);
|
||||
}
|
||||
(Literal::Int(x), Layout::Builtin(Builtin::Int(IntWidth::I128 | IntWidth::U128))) => {
|
||||
self.storage_manager.with_tmp_general_reg(
|
||||
&mut self.buf,
|
||||
|storage_manager, buf, reg| {
|
||||
let base_offset = storage_manager.claim_stack_area(sym, 16);
|
||||
let bytes = *x;
|
||||
|
||||
let mut num_bytes = [0; 8];
|
||||
num_bytes.copy_from_slice(&bytes[..8]);
|
||||
let num = i64::from_ne_bytes(num_bytes);
|
||||
ASM::mov_reg64_imm64(buf, reg, num);
|
||||
ASM::mov_base32_reg64(buf, base_offset, reg);
|
||||
|
||||
num_bytes.copy_from_slice(&bytes[8..16]);
|
||||
let num = i64::from_ne_bytes(num_bytes);
|
||||
ASM::mov_reg64_imm64(buf, reg, num);
|
||||
ASM::mov_base32_reg64(buf, base_offset + 8, reg);
|
||||
},
|
||||
);
|
||||
}
|
||||
(Literal::Byte(x), Layout::Builtin(Builtin::Int(IntWidth::U8 | IntWidth::I8))) => {
|
||||
let reg = self.storage_manager.claim_general_reg(&mut self.buf, sym);
|
||||
let val = *x;
|
||||
|
|
|
@ -753,7 +753,7 @@ impl<
|
|||
debug_assert_eq!(from_offset % 8, 0);
|
||||
debug_assert_eq!(size % 8, 0);
|
||||
debug_assert_eq!(size, layout_interner.stack_size(*layout));
|
||||
self.copy_symbol_to_stack_offset_help(buf, size, from_offset, to_offset)
|
||||
self.copy_to_stack_offset(buf, size, from_offset, to_offset)
|
||||
}
|
||||
IntWidth::I64 | IntWidth::U64 => {
|
||||
debug_assert_eq!(to_offset % 8, 0);
|
||||
|
@ -795,7 +795,7 @@ impl<
|
|||
debug_assert_eq!(from_offset % 8, 0);
|
||||
debug_assert_eq!(size % 8, 0);
|
||||
debug_assert_eq!(size, layout_interner.stack_size(*layout));
|
||||
self.copy_symbol_to_stack_offset_help(buf, size, from_offset, to_offset)
|
||||
self.copy_to_stack_offset(buf, size, from_offset, to_offset)
|
||||
}
|
||||
},
|
||||
Layout::Boxed(_) => {
|
||||
|
@ -824,13 +824,13 @@ impl<
|
|||
debug_assert_eq!(from_offset % 8, 0);
|
||||
debug_assert_eq!(size % 8, 0);
|
||||
debug_assert_eq!(size, layout_interner.stack_size(*layout));
|
||||
self.copy_symbol_to_stack_offset_help(buf, size, from_offset, to_offset)
|
||||
self.copy_to_stack_offset(buf, size, from_offset, to_offset)
|
||||
}
|
||||
x => todo!("copying data to the stack with layout, {:?}", x),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn copy_symbol_to_stack_offset_help(
|
||||
pub fn copy_to_stack_offset(
|
||||
&mut self,
|
||||
buf: &mut Vec<'a, u8>,
|
||||
size: u32,
|
||||
|
|
|
@ -19,11 +19,11 @@ fn nat_alias() {
|
|||
assert_evals_to!(
|
||||
indoc!(
|
||||
r#"
|
||||
i : Num.Nat
|
||||
i = 1
|
||||
i : Num.Nat
|
||||
i = 1
|
||||
|
||||
i
|
||||
"#
|
||||
i
|
||||
"#
|
||||
),
|
||||
1,
|
||||
usize
|
||||
|
@ -31,16 +31,16 @@ fn nat_alias() {
|
|||
}
|
||||
|
||||
#[test]
|
||||
#[cfg(any(feature = "gen-llvm", feature = "gen-wasm"))]
|
||||
#[cfg(any(feature = "gen-llvm", feature = "gen-wasm", feature = "gen-dev"))]
|
||||
fn i128_signed_int_alias() {
|
||||
assert_evals_to!(
|
||||
indoc!(
|
||||
r#"
|
||||
i : I128
|
||||
i = 128
|
||||
i : I128
|
||||
i = 128
|
||||
|
||||
i
|
||||
"#
|
||||
i
|
||||
"#
|
||||
),
|
||||
128,
|
||||
i128
|
||||
|
@ -71,11 +71,11 @@ fn i32_signed_int_alias() {
|
|||
assert_evals_to!(
|
||||
indoc!(
|
||||
r#"
|
||||
i : I32
|
||||
i = 32
|
||||
i : I32
|
||||
i = 32
|
||||
|
||||
i
|
||||
"#
|
||||
i
|
||||
"#
|
||||
),
|
||||
32,
|
||||
i32
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue