From 772b0697d5011e2f5f31bdd90a8086bd41028d55 Mon Sep 17 00:00:00 2001 From: Recolic Keghart <root@recolic.net> Date: Thu, 25 Apr 2019 19:30:19 -0700 Subject: [PATCH] PUSH instruction problem fixed: now push satisfies x86 spec --- src/main/java/chocopy/pa3/CodeGenImpl.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/chocopy/pa3/CodeGenImpl.java b/src/main/java/chocopy/pa3/CodeGenImpl.java index f3888a8..30bf30d 100644 --- a/src/main/java/chocopy/pa3/CodeGenImpl.java +++ b/src/main/java/chocopy/pa3/CodeGenImpl.java @@ -39,13 +39,13 @@ public class CodeGenImpl extends CodeGenBase { } } public void emitPush(RiscVBackend.Register reg, String comment) { - backend.emitSW(reg, SP, 0, comment); backend.emitADDI(SP, SP, -1 * backend.getWordSize(), comment); + backend.emitSW(reg, SP, 0, comment); } public void emitPop(RiscVBackend.Register reg, String comment) { - backend.emitADDI(SP, SP, backend.getWordSize(), comment); if(reg != null) backend.emitLW(reg, SP, 0, comment); + backend.emitADDI(SP, SP, backend.getWordSize(), comment); } public void emitCall(Label calledLabel, String comment) { // Arguments should be already pushed to stack. @@ -56,7 +56,7 @@ public class CodeGenImpl extends CodeGenBase { // jal will set RA register properly. // FIXME: Testing fucking silly $print - backend.emitADDI(SP, SP, 3 * backend.getWordSize(), "FUCKING SILLY BUILTIN CODE"); + backend.emitADDI(SP, SP, 2 * backend.getWordSize(), "FUCKING SILLY BUILTIN CODE"); backend.emitJAL(calledLabel, "Call it!"); backend.emitADDI(SP, FP, -2 * backend.getWordSize(), "Revert all local variables on this dying frame."); @@ -79,7 +79,7 @@ public class CodeGenImpl extends CodeGenBase { emitPush(tmpReg, null); backend.emitLI(tmpReg, 1, "OBJECT HEAD - TYPE = INT"); emitPush(tmpReg, null); - backend.emitADDI(tmpReg, SP, backend.getWordSize(), "Return INT address."); + backend.emitMV(tmpReg, SP, "Return INT address."); } public void emitPushBoolVal(RiscVBackend.Register tmpReg, Boolean val, String comment) { emitNoop(comment); @@ -91,7 +91,7 @@ public class CodeGenImpl extends CodeGenBase { emitPush(tmpReg, null); backend.emitLI(tmpReg, 2, "OBJECT HEAD - TYPE = BOOL"); emitPush(tmpReg, null); - backend.emitADDI(tmpReg, SP, backend.getWordSize(), "Return BOOL address."); + backend.emitMV(tmpReg, SP, "Return BOOL address."); } public void emitPushStrVal(RiscVBackend.Register tmpReg, String val, String comment) { emitNoop(comment); @@ -121,7 +121,7 @@ public class CodeGenImpl extends CodeGenBase { emitPush(tmpReg, null); backend.emitLI(tmpReg, 3, "OBJECT HEAD - TYPE = STR"); emitPush(tmpReg, null); - backend.emitADDI(tmpReg, SP, backend.getWordSize(), "Return STR OBJ address."); + backend.emitMV(tmpReg, SP, "Return STR OBJ address."); } } -- GitLab