GenASM: Use leave instead of mov and pop for returning from a function.

This commit is contained in:
2023-03-21 00:22:11 +01:00
parent 441d0122f8
commit f38bd3d69e
3 changed files with 13 additions and 2 deletions

View File

@@ -172,6 +172,10 @@ public class ASM {
mnemonics.add(new Cqto()); mnemonics.add(new Cqto());
} }
public void leave() {
mnemonics.add(new Leave());
}
public void ret() { public void ret() {
mnemonics.add(new Ret()); mnemonics.add(new Ret());
} }

View File

@@ -0,0 +1,8 @@
package de.hsrm.compiler.Klang.asm.mnemonics;
public class Leave extends NoOperandMnemonic {
@Override
public String toAsm() {
return "leave";
}
}

View File

@@ -551,8 +551,7 @@ public class GenASM implements Visitor<Void> {
@Override @Override
public Void visit(ReturnStatement e) { public Void visit(ReturnStatement e) {
e.expression.welcome(this); e.expression.welcome(this);
asm.mov("q", "%rbp", "%rsp"); asm.leave();
asm.pop("q", "%rbp");
asm.ret(); asm.ret();
return null; return null;
} }