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