add empty array expr to gen_dev

This commit is contained in:
Brendan Hansknecht 2022-07-20 15:12:20 -07:00
parent 472e95f3e3
commit cfe1d3d893
No known key found for this signature in database
GPG key ID: A2E3B0B6E483038E
3 changed files with 21 additions and 0 deletions

View file

@ -1075,6 +1075,10 @@ impl<
ASM::add_reg64_reg64_imm32(&mut self.buf, dst_reg, CC::BASE_PTR_REG, offset);
}
fn create_empty_array(&mut self, sym: &Symbol) {
self.storage_manager.create_empty_array(&mut self.buf, sym);
}
fn create_struct(&mut self, sym: &Symbol, layout: &Layout<'a>, fields: &'a [Symbol]) {
self.storage_manager
.create_struct(&mut self.buf, sym, layout, fields);

View file

@ -627,6 +627,17 @@ impl<
);
}
pub fn create_empty_array(&mut self, buf: &mut Vec<'a, u8>, sym: &Symbol) {
let base_offset = self.claim_stack_area(sym, 24);
// TODO: This can be optimized. We just need to add the ability to set a stack value to zero or load an immediate to the stack.
self.with_tmp_general_reg(buf, |_storage_manager, buf, reg| {
ASM::mov_reg64_imm64(buf, reg, 0);
ASM::mov_reg64_base32(buf, reg, base_offset);
ASM::mov_reg64_base32(buf, reg, base_offset + 8);
ASM::mov_reg64_base32(buf, reg, base_offset + 16);
});
}
/// Creates a struct on the stack, moving the data in fields into the struct.
pub fn create_struct(
&mut self,