From daf42eba09ebf11813c827a4f4b93bb26a766ee3 Mon Sep 17 00:00:00 2001 From: SpookyDervish <78246495+SpookyDervish@users.noreply.github.com> Date: Sat, 6 Sep 2025 21:08:14 +1000 Subject: [PATCH] I FIXED THE STACK ISSUES LESS GOOO --- generators/x86_64.py | 7 ++++--- out | Bin 8880 -> 8880 bytes out.asm | 4 ++-- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/generators/x86_64.py b/generators/x86_64.py index a05caf5..bcd1491 100644 --- a/generators/x86_64.py +++ b/generators/x86_64.py @@ -38,7 +38,7 @@ class X86_64Generator(Generator): self.lines.append(f"movsd {conversion[reg]}, [rsp + {var_pos + offset}]\n\t") self.lines.append("add rsp, 8\n\t") - #self.stack_size -= 1 + self.stack_size += 1 elif var["type"] in [IntNode,StringNode]: if no_stack_pop: self.lines.append(f"mov {reg}, [rsp + {var_pos + offset}]\n\t") @@ -50,6 +50,7 @@ class X86_64Generator(Generator): except TypeError: # variable doesnt exist traceback(self.code, "NameError", f"\"{var_name}\" is not defined.") + print(var, self.stack_size) return var["type"] def get_var_pos(self, var_name: str): @@ -84,7 +85,7 @@ class X86_64Generator(Generator): string_len = self.add_constant(f"equ $ - {string_pointer[1:-1]}", no_string=True) self.lines.append(f"lea rax, {string_pointer}\n\t") self.push("rax") - self.lines.append(f"lea rax, {string_len[1:-1]}\n\t") + self.lines.append(f"mov rax, {string_len[1:-1]}\n\t") self.push("rax") elif type(starting_value) == str: @@ -389,7 +390,7 @@ class X86_64Generator(Generator): if isinstance(arg, VarRefNode): self.get_variable(arg.var_name, "rsi", False, 0, True) - self.get_variable(arg.var_name, "rdx", False, 8, True) + self.get_variable(arg.var_name, "rdx", False, -8, True) else: string_pointer = self.add_constant(printed_value)[1:-1] string_len = self.add_constant(f"equ $ - {string_pointer}", True)[1:-1] diff --git a/out b/out index 449ddc9a5462c6983ee25e5521466bd791b5b31e..706843bd874d290aad251cd599d4804915167343 100644 GIT binary patch delta 60 zcmdnsy1{kA3{Eo!2r%2YFoR!g2Op3Zu%jA8dUThl2zYddsBmmn61c~|`LFzBMn<#E I6BXqd0q)KazW@LL delta 62 zcmdnsy1{kA3{Fc12(a9^FoR#xqnAaM4=50@qZ&kdbeE_Icyx!TNNkoDxW~UqVFDwg K<>rZs@{9oWv=ANu diff --git a/out.asm b/out.asm index aef4134..974b90a 100644 --- a/out.asm +++ b/out.asm @@ -9,14 +9,14 @@ _start: ; InstructionNode(instruction='set', parent=RootNode(statements=[..., InstructionNode(instruction='set', parent=..., arguments=[VariablePointer, Int]), InstructionNode(instruction='stdlnout', parent=..., arguments=[VariableReference]), InstructionNode(instruction='end', parent=..., arguments=[VariableReference])]), arguments=[VariablePointer, String]) lea rax, [.LC0] push rax - lea rax, .LC1 + mov rax, .LC1 push rax ; InstructionNode(instruction='set', parent=RootNode(statements=[InstructionNode(instruction='set', parent=..., arguments=[VariablePointer, String]), ..., InstructionNode(instruction='stdlnout', parent=..., arguments=[VariableReference]), InstructionNode(instruction='end', parent=..., arguments=[VariableReference])]), arguments=[VariablePointer, Int]) mov rax, 123 push rax ; InstructionNode(instruction='stdlnout', parent=RootNode(statements=[InstructionNode(instruction='set', parent=..., arguments=[VariablePointer, String]), InstructionNode(instruction='set', parent=..., arguments=[VariablePointer, Int]), ..., InstructionNode(instruction='end', parent=..., arguments=[VariableReference])]), arguments=[VariableReference]) mov rsi, [rsp + 16] - mov rdx, [rsp + 24] + mov rdx, [rsp + 8] mov rax, 1 mov rdi, 1 syscall