feat(backend): Add var align
This commit is contained in:
@@ -10,6 +10,7 @@ pub struct Generator {
|
|||||||
register_allocator: RegisterAllocator,
|
register_allocator: RegisterAllocator,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const DEFAULT_VAR_ALIGN: usize = 4;
|
||||||
impl Generator {
|
impl Generator {
|
||||||
pub fn new() -> Self {
|
pub fn new() -> Self {
|
||||||
Self {
|
Self {
|
||||||
@@ -32,10 +33,10 @@ impl Generator {
|
|||||||
let mut text = String::new();
|
let mut text = String::new();
|
||||||
text.push_str(".arch armv7ve\n.arm\n.fpu vfpv4\n");
|
text.push_str(".arch armv7ve\n.arm\n.fpu vfpv4\n");
|
||||||
for var in &self.var_uninited {
|
for var in &self.var_uninited {
|
||||||
text.push_str(&format!(".comm {}, {}\n", var.name, var.size));
|
text.push_str(&format!(".comm {}, {}, {}\n", var.name, var.size, var.align));
|
||||||
}
|
}
|
||||||
for var in &self.var_inited {
|
for var in &self.var_inited {
|
||||||
text.push_str(&format!(".data\n.align 4\n.global {}\n.type {}, @object\n:{}\n", var.name, var.name, var.name));
|
text.push_str(&format!(".data\n.align {}\n.global {}\n.type {}, @object\n:{}\n", var.align, var.name, var.name, var.name));
|
||||||
text.push_str(&format!(".word 0\n"));
|
text.push_str(&format!(".word 0\n"));
|
||||||
}
|
}
|
||||||
text.push_str(".text\n");
|
text.push_str(".text\n");
|
||||||
@@ -50,6 +51,7 @@ impl Generator {
|
|||||||
self.var_uninited.push(ARMAsmVar {
|
self.var_uninited.push(ARMAsmVar {
|
||||||
name: format!("global_var_{}", var.index),
|
name: format!("global_var_{}", var.index),
|
||||||
size: var.data_type.size_in_bytes(),
|
size: var.data_type.size_in_bytes(),
|
||||||
|
align: DEFAULT_VAR_ALIGN,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
pub struct ARMAsmVar {
|
pub struct ARMAsmVar {
|
||||||
pub name: String,
|
pub name: String,
|
||||||
pub size: usize,
|
pub size: usize,
|
||||||
|
pub align: usize,
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user