From eb8cceacc4ce6dbf89c9df63feb4e78fd4fe7fd7 Mon Sep 17 00:00:00 2001 From: Laborratte5 Date: Mon, 12 May 2025 17:39:03 +0200 Subject: [PATCH] Implement code generation for int constatns and returns --- .../backend/x86asm/X86CodeGenerator.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/main/java/edu/kit/kastel/vads/compiler/backend/x86asm/X86CodeGenerator.java b/src/main/java/edu/kit/kastel/vads/compiler/backend/x86asm/X86CodeGenerator.java index dab2b05..337ab6c 100644 --- a/src/main/java/edu/kit/kastel/vads/compiler/backend/x86asm/X86CodeGenerator.java +++ b/src/main/java/edu/kit/kastel/vads/compiler/backend/x86asm/X86CodeGenerator.java @@ -11,8 +11,10 @@ import edu.kit.kastel.vads.compiler.backend.regalloc.Register; import edu.kit.kastel.vads.compiler.backend.regalloc.RegisterAllocator; import edu.kit.kastel.vads.compiler.ir.IrGraph; import edu.kit.kastel.vads.compiler.ir.node.Block; +import edu.kit.kastel.vads.compiler.ir.node.ConstIntNode; import edu.kit.kastel.vads.compiler.ir.node.Node; import edu.kit.kastel.vads.compiler.ir.node.ProjNode; +import edu.kit.kastel.vads.compiler.ir.node.ReturnNode; import edu.kit.kastel.vads.compiler.ir.node.StartNode; @@ -59,6 +61,8 @@ public class X86CodeGenerator implements CodeGenerator { // TODO: implement code generation switch (node) { + case ConstIntNode c -> constIntNode(builder, registers, c); + case ReturnNode r -> returnNode(builder, registers, r); case Block _, ProjNode _, StartNode _ -> { // do nothing, skip line break return; @@ -66,6 +70,20 @@ public class X86CodeGenerator implements CodeGenerator { default -> throw new UnsupportedOperationException("Codegeneration for '" + node.toString() + "' is not implemented."); } + builder.append("\n"); + } + + private static void returnNode(StringBuilder builder, Map registers, ReturnNode r) { + builder.repeat(" ", 2) + .append("ret"); + } + + private static void constIntNode(StringBuilder builder, Map registers, ConstIntNode c) { + builder.repeat(" ", 2) + .append("mov $") + .append(c.value()) + .append(",") + .append(registers.get(c)); } }