};
}
-fn mangle(input: &str) -> String {
- input
- .replace("<", "_LT_")
- .replace(">", "_GT_")
- .replace("-", "___")
-}
-
impl<'a> CodeGen<'a> {
pub fn new(ir_mod: &'a IRObject, data_stack_size: usize) -> Self {
Self {
self.push_from("t0");
self.push_from("t1");
} else {
- let mangled = mangle(name);
- self.label(format!(".globl {}", mangled));
- self.label(format!("{}:", mangled));
+ self.label(format!(".globl {}", name));
+ self.label(format!("{}:", name));
}
self.line("addi sp, sp, -16 # allocate 16 bytes on stack"); // allocate 16 bytes on stack
self.line("sd ra, 8(sp) # store return address on stack"); // store return address on stack
}
IR::Call(name) => {
- let mangled = mangle(name);
- self.label(format!("# call {}", mangled));
- self.line(format!("call {}", mangled));
+ self.label(format!("# call {}", name));
+ self.line(format!("call {}", name));
}
IR::WordPointer(name) => {
- let mangled = mangle(name);
- self.label(format!("# '{} (word pointer)", mangled));
- self.line(format!("la t0, {}", mangled));
+ self.label(format!("# '{} (word pointer)", name));
+ self.line(format!("la t0, {}", name));
self.push_from("t0");
}
IR::CallPtr => {