From f38bd3d69ee1f57581bc319f40ac0e90daeab69a Mon Sep 17 00:00:00 2001 From: nitrix Date: Tue, 21 Mar 2023 00:22:11 +0100 Subject: [PATCH] GenASM: Use leave instead of mov and pop for returning from a function. --- src/main/java/de/hsrm/compiler/Klang/asm/ASM.java | 4 ++++ .../java/de/hsrm/compiler/Klang/asm/mnemonics/Leave.java | 8 ++++++++ src/main/java/de/hsrm/compiler/Klang/visitors/GenASM.java | 3 +-- 3 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 src/main/java/de/hsrm/compiler/Klang/asm/mnemonics/Leave.java 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; }