From d96b083c414b236d922366a80df9389291a59feb Mon Sep 17 00:00:00 2001 From: nitrix Date: Mon, 9 Mar 2020 15:57:37 +0100 Subject: [PATCH] add metadata to class fields during visit of function definition nodes --- src/main/java/de/hsrm/compiler/Klang/visitors/GenASM.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/de/hsrm/compiler/Klang/visitors/GenASM.java b/src/main/java/de/hsrm/compiler/Klang/visitors/GenASM.java index 1bc49dc..32b25c5 100644 --- a/src/main/java/de/hsrm/compiler/Klang/visitors/GenASM.java +++ b/src/main/java/de/hsrm/compiler/Klang/visitors/GenASM.java @@ -113,6 +113,8 @@ public class GenASM implements Visitor { String[] registers = { "%rdi", "%rsi", "%rdx", "%rcx", "%r8", "%r9" }; String[] floatRegisters = { "%xmm0", "%xmm1", "%xmm2", "%xmm3", "%xmm4", "%xmm5", "%xmm6", "%xmm7" }; private int lCount = 0; // Invariante: lCount ist benutzt + private int currentFunctionStartLabel = 0; + private Parameter[] currentFunctionParams; private void intToFloat(String src, String dst) { this.ex.write(" cvtsi2sd " + src + ", " + dst + "\n"); @@ -606,11 +608,15 @@ public class GenASM implements Visitor { @Override public Void visit(FunctionDefinition e) { + int lblStart = ++lCount; + this.currentFunctionStartLabel = lblStart; + this.currentFunctionParams = e.parameters; this.ex.write(".globl " + e.name + "\n"); this.ex.write(".type " + e.name + ", @function\n"); this.ex.write(e.name + ":\n"); this.ex.write(" pushq %rbp\n"); this.ex.write(" movq %rsp, %rbp\n"); + this.ex.write(".L" + lblStart + ":\n"); // hole die anzahl der lokalen variablen this.vars = new TreeSet();