Used incSp
This commit is contained in:
@@ -536,11 +536,11 @@ public class CodeGenImpl extends CodeGenBase
|
||||
|
||||
//Store address and length of lists on stack
|
||||
backend.emitSW(Register.A0, Register.FP, -sp_off*wordSize, "Store address of first list");
|
||||
sp_off++;
|
||||
incSp(1);
|
||||
backend.emitSW(Register.T0, Register.FP, -sp_off*wordSize, "Store address of second list");
|
||||
sp_off++;
|
||||
incSp(1);
|
||||
backend.emitSW(Register.T3, Register.FP, -sp_off*wordSize, "Store length of combined list");
|
||||
sp_off++;
|
||||
incSp(1);
|
||||
|
||||
//Allocate space on heap
|
||||
backend.emitLA(Register.A0, listClass.getPrototypeLabel(), "Load empty list");
|
||||
@@ -581,7 +581,7 @@ public class CodeGenImpl extends CodeGenBase
|
||||
{
|
||||
node.right.dispatch(this);
|
||||
backend.emitSW(Register.A0, Register.FP, -sp_off*wordSize, "Push on stack slot "+sp_off);
|
||||
sp_off++;
|
||||
incSp(1);
|
||||
node.left.dispatch(this);
|
||||
sp_off--;
|
||||
backend.emitLW(Register.T0, Register.FP, -sp_off*wordSize, "Pop stack slot "+sp_off);
|
||||
@@ -656,7 +656,7 @@ public class CodeGenImpl extends CodeGenBase
|
||||
{
|
||||
node.right.dispatch(this);
|
||||
backend.emitSW(Register.A0, Register.FP, -sp_off*wordSize, "Push on stack slot "+sp_off);
|
||||
sp_off++;
|
||||
incSp(1);
|
||||
node.left.dispatch(this);
|
||||
sp_off--;
|
||||
backend.emitLW(Register.T0, Register.FP, -sp_off*wordSize, "Pop stack slot "+sp_off);
|
||||
@@ -667,7 +667,7 @@ public class CodeGenImpl extends CodeGenBase
|
||||
{
|
||||
node.right.dispatch(this);
|
||||
backend.emitSW(Register.A0, Register.FP, -sp_off*wordSize, "Push on stack slot "+sp_off);
|
||||
sp_off++;
|
||||
incSp(1);
|
||||
node.left.dispatch(this);
|
||||
sp_off--;
|
||||
backend.emitLW(Register.T0, Register.FP, -sp_off*wordSize, "Pop stack slot "+sp_off);
|
||||
@@ -679,7 +679,7 @@ public class CodeGenImpl extends CodeGenBase
|
||||
Label label = generateLocalLabel();
|
||||
node.left.dispatch(this);
|
||||
backend.emitSW(Register.A0, Register.FP, -sp_off*wordSize, "Push on stack slot "+sp_off);
|
||||
sp_off++;
|
||||
incSp(1);
|
||||
backend.emitBEQZ(Register.A0, label, "If first operand is false, don't check second");
|
||||
node.right.dispatch(this);
|
||||
sp_off--;
|
||||
@@ -692,7 +692,7 @@ public class CodeGenImpl extends CodeGenBase
|
||||
Label label = generateLocalLabel();
|
||||
node.left.dispatch(this);
|
||||
backend.emitSW(Register.A0, Register.FP, -sp_off*wordSize, "Push on stack slot "+sp_off);
|
||||
sp_off++;
|
||||
incSp(1);
|
||||
backend.emitBNEZ(Register.A0, label, "If first operand is true, don't check second");
|
||||
node.right.dispatch(this);
|
||||
sp_off--;
|
||||
@@ -714,7 +714,7 @@ public class CodeGenImpl extends CodeGenBase
|
||||
{
|
||||
node.right.dispatch(this);
|
||||
backend.emitSW(Register.A0, Register.FP, -sp_off*wordSize, "Push on stack slot "+sp_off);
|
||||
sp_off++;
|
||||
incSp(1);
|
||||
node.left.dispatch(this);
|
||||
sp_off--;
|
||||
backend.emitLW(Register.T0, Register.FP, -sp_off*wordSize, "Pop stack slot "+sp_off);
|
||||
@@ -783,7 +783,7 @@ public class CodeGenImpl extends CodeGenBase
|
||||
node.value.dispatch(this);
|
||||
backend.emitSW(Register.A0, Register.FP, -sp_off*wordSize, "Store variable "+node.var.identifier.name+" value in Stack");
|
||||
offsetMap.put(svi, sp_off);
|
||||
sp_off++;
|
||||
incSp(1);
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user