From f78d0e41b0b4932b1242e4e06272b474cb169b1c Mon Sep 17 00:00:00 2001 From: SpookyDervish <78246495+SpookyDervish@users.noreply.github.com> Date: Mon, 8 Sep 2025 07:49:33 +1000 Subject: [PATCH] doing some set up for when i implement a peephole optimizer --- generators/generator.py | 2 +- generators/x86_64.py | 5 ++++- optimizer.py | 11 +++++++++++ optimizers/x86_64.py | 11 +++++++++++ out | Bin 4736 -> 4736 bytes out.asm | 12 ++++++------ test.o | 33 --------------------------------- test2.grnd | 10 +++++----- 8 files changed, 38 insertions(+), 46 deletions(-) create mode 100644 optimizer.py create mode 100644 optimizers/x86_64.py delete mode 100644 test.o diff --git a/generators/generator.py b/generators/generator.py index f9526ba..e42d218 100644 --- a/generators/generator.py +++ b/generators/generator.py @@ -45,4 +45,4 @@ class Generator: def write(self): with open(self.output_path + ".asm", "w") as f: - f.writelines(self.lines) \ No newline at end of file + f.write(self.lines) \ No newline at end of file diff --git a/generators/x86_64.py b/generators/x86_64.py index b7c3f2d..e6d11e4 100644 --- a/generators/x86_64.py +++ b/generators/x86_64.py @@ -1,6 +1,7 @@ from generators.generator import Generator from ground_ast import * from error import traceback +from optimizers.x86_64 import X86_64Optimizer class X86_64Generator(Generator): def __init__(self, ast, code, output_path): @@ -426,4 +427,6 @@ class X86_64Generator(Generator): f.write(f"dq {float(value)}") f.write("\n") f.write("section .text\n") - f.writelines(self.lines) \ No newline at end of file + + optimizer = X86_64Optimizer(self.lines) + f.write(optimizer.peephole()) \ No newline at end of file diff --git a/optimizer.py b/optimizer.py new file mode 100644 index 0000000..e334197 --- /dev/null +++ b/optimizer.py @@ -0,0 +1,11 @@ +class Optimizer: + def __init__(self, lines: list[str]): + self.lines = lines + self.final_str = "" + + # sliding window pos + self.pos = 0 + + + def peephole(self): + pass \ No newline at end of file diff --git a/optimizers/x86_64.py b/optimizers/x86_64.py new file mode 100644 index 0000000..b421723 --- /dev/null +++ b/optimizers/x86_64.py @@ -0,0 +1,11 @@ +from optimizer import Optimizer + +class X86_64Optimizer(Optimizer): + def peephole(self): + lines = [] + + for line in self.lines: + lines.append(line) + + self.final_str = ''.join(lines) + return self.final_str \ No newline at end of file diff --git a/out b/out index 0ed152cfa8a69488ef11147f2e5bc16ef5e95667..07f4e0fc66689b5f62c3df2dc9a5798c31c4df2a 100644 GIT binary patch delta 103 zcmZorZBU&sgVTip0$esOOy#%R0pbLBbi1f delta 104 zcmZorZBU&sgVU7(0$evPOy#%FV%)(90-sBm~N-tg#jQQ_FZ@bD`uM8xt2|I`B> x{M!zAbh4;)v#7KlC_TT!2CSh*g@d1U;zsGo2?7d?9Ge>j