mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-30 15:21:12 +00:00
Fix loading of 128-bit numbers
This commit is contained in:
parent
bceebc4f8f
commit
bd2813f36c
1 changed files with 17 additions and 11 deletions
|
@ -247,22 +247,28 @@ impl<'a> Storage<'a> {
|
||||||
} => {
|
} => {
|
||||||
let (local_id, offset) = location.local_and_offset(self.stack_frame_pointer);
|
let (local_id, offset) = location.local_and_offset(self.stack_frame_pointer);
|
||||||
|
|
||||||
// Load the address of the value
|
let get_addr = |cb: &mut CodeBuilder| {
|
||||||
code_builder.get_local(local_id);
|
cb.get_local(local_id);
|
||||||
if offset != 0 {
|
if offset != 0 {
|
||||||
code_builder.i32_const(offset as i32);
|
cb.i32_const(offset as i32);
|
||||||
code_builder.i32_add();
|
cb.i32_add();
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
if format != StackMemoryFormat::Aggregate {
|
if format == StackMemoryFormat::Aggregate {
|
||||||
|
get_addr(code_builder);
|
||||||
|
code_builder.set_top_symbol(sym);
|
||||||
|
} else {
|
||||||
// It's one of the 128-bit numbers, all of which we load as two i64's
|
// It's one of the 128-bit numbers, all of which we load as two i64's
|
||||||
// Mark the same Symbol twice in the VM value stack! Shouldn't matter except debug.
|
// (Mark the same Symbol twice. Shouldn't matter except for debugging.)
|
||||||
|
get_addr(code_builder);
|
||||||
code_builder.i64_load(Align::Bytes8, offset);
|
code_builder.i64_load(Align::Bytes8, offset);
|
||||||
code_builder.set_top_symbol(sym);
|
code_builder.set_top_symbol(sym);
|
||||||
code_builder.i64_load(Align::Bytes8, offset + 8);
|
|
||||||
}
|
|
||||||
|
|
||||||
code_builder.set_top_symbol(sym);
|
get_addr(code_builder);
|
||||||
|
code_builder.i64_load(Align::Bytes8, offset + 8);
|
||||||
|
code_builder.set_top_symbol(sym);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue