diff --git a/src/main/java/de/hsrm/compiler/Klang/asm/ASM.java b/src/main/java/de/hsrm/compiler/Klang/asm/ASM.java index c0d6909..d741be7 100644 --- a/src/main/java/de/hsrm/compiler/Klang/asm/ASM.java +++ b/src/main/java/de/hsrm/compiler/Klang/asm/ASM.java @@ -172,6 +172,10 @@ public class ASM { mnemonics.add(new Cqto()); } + public void leave() { + mnemonics.add(new Leave()); + } + public void ret() { mnemonics.add(new Ret()); } diff --git a/src/main/java/de/hsrm/compiler/Klang/asm/mnemonics/Leave.java b/src/main/java/de/hsrm/compiler/Klang/asm/mnemonics/Leave.java new file mode 100644 index 0000000..282ff74 --- /dev/null +++ b/src/main/java/de/hsrm/compiler/Klang/asm/mnemonics/Leave.java @@ -0,0 +1,8 @@ +package de.hsrm.compiler.Klang.asm.mnemonics; + +public class Leave extends NoOperandMnemonic { + @Override + public String toAsm() { + return "leave"; + } +} 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 5bc32f2..df059c4 100644 --- a/src/main/java/de/hsrm/compiler/Klang/visitors/GenASM.java +++ b/src/main/java/de/hsrm/compiler/Klang/visitors/GenASM.java @@ -551,8 +551,7 @@ public class GenASM implements Visitor { @Override public Void visit(ReturnStatement e) { e.expression.welcome(this); - asm.mov("q", "%rbp", "%rsp"); - asm.pop("q", "%rbp"); + asm.leave(); asm.ret(); return null; }