Fixed IndexExpr
This commit is contained in:
@@ -547,8 +547,12 @@ public class CodeGenImpl extends CodeGenBase
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
backend.emitSW(reg, Register.FP, -sp_off*wordSize, "Store value to b stored");
|
||||||
|
incSp(1);
|
||||||
Register ret = target.dispatch(this);
|
Register ret = target.dispatch(this);
|
||||||
backend.emitSW(T1, ret, 0, "Set list element");
|
sp_off--;
|
||||||
|
backend.emitLW(reg, Register.FP, -sp_off*wordSize, "Load value to b stored");
|
||||||
|
backend.emitSW(reg, ret, 0, "Set list element");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//}
|
//}
|
||||||
@@ -1139,8 +1143,9 @@ public class CodeGenImpl extends CodeGenBase
|
|||||||
backend.emitADDI(index, index, 4, "Compute list element offset in words");
|
backend.emitADDI(index, index, 4, "Compute list element offset in words");
|
||||||
backend.emitLI(temp, wordSize, "Word size in bytes");
|
backend.emitLI(temp, wordSize, "Word size in bytes");
|
||||||
backend.emitMUL(index, index, temp, "Compute list element offset in bytes");
|
backend.emitMUL(index, index, temp, "Compute list element offset in bytes");
|
||||||
backend.emitADD(index, vacantReg, index, "Pointer to list element");
|
backend.emitADD(vacantReg, vacantReg, index, "Pointer to list element");
|
||||||
backend.emitLW(Register.A0, index, 0, "Set list element");
|
backend.emitMV(temp,vacantReg,"Copy Result");
|
||||||
|
backend.emitLW(A0, vacantReg, 0, "Load list element");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -1165,10 +1170,11 @@ public class CodeGenImpl extends CodeGenBase
|
|||||||
backend.emitLI(T1, 1, "str size");
|
backend.emitLI(T1, 1, "str size");
|
||||||
backend.emitSW(T1, vacantReg, 3*wordSize, "len");
|
backend.emitSW(T1, vacantReg, 3*wordSize, "len");
|
||||||
backend.emitSW(T0, vacantReg, 4*wordSize, "ch");
|
backend.emitSW(T0, vacantReg, 4*wordSize, "ch");
|
||||||
|
backend.emitMV(temp,vacantReg,"Copy Result");
|
||||||
}
|
}
|
||||||
freeRegister(tmpHandle);
|
freeRegister(tmpHandle);
|
||||||
-- sp_off;
|
-- sp_off;
|
||||||
return vacantReg;
|
return temp;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Register analyze(MemberExpr node)
|
public Register analyze(MemberExpr node)
|
||||||
|
|||||||
Reference in New Issue
Block a user