From 9c656c296827172589243d588f57f9ab2745efc6 Mon Sep 17 00:00:00 2001 From: Syndamia Date: Fri, 14 Feb 2025 08:50:49 +0200 Subject: feat(assembler): Implement beq and mov instructions --- assembler/src/parser/code_gen.rs | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'assembler/src/parser/code_gen.rs') diff --git a/assembler/src/parser/code_gen.rs b/assembler/src/parser/code_gen.rs index 74a4fad..1c5b95a 100644 --- a/assembler/src/parser/code_gen.rs +++ b/assembler/src/parser/code_gen.rs @@ -5,6 +5,22 @@ impl Program { /* Intermediate code generation */ pub(crate) fn collapse_instructions(&mut self) { + // Fix instruction addresses + let mut offsets = Vec::new(); + for instr in &self.instructions { + offsets.push(instr.collapse_len() + offsets.last().unwrap_or(&0)); + } + offsets.insert(0, 0); + + for instr in &mut self.instructions { + for arg in &mut instr.args { + if let Address::Instruction(num) = arg { + *arg = Address::Instruction(offsets[*num]); + } + } + } + + // Collapse all instructions let mut collapsed = Vec::new(); for instr in &mut self.instructions { -- cgit v1.3.1-23-gd82d