|
|
@ -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)
|
|
|
|