|
|
@ -56,8 +56,12 @@ public class CodeGenImpl extends CodeGenBase
|
|
|
|
/** A code generator emitting instructions to BACKEND. */
|
|
|
|
/** A code generator emitting instructions to BACKEND. */
|
|
|
|
public CodeGenImpl(RiscVBackend backend)
|
|
|
|
public CodeGenImpl(RiscVBackend backend)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
super(backend);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
super(backend);
|
|
|
|
|
|
|
|
backend.defineSym("listHeaderWords", "4");
|
|
|
|
|
|
|
|
backend.defineSym("strHeaderWords", "4");
|
|
|
|
|
|
|
|
backend.defineSym("bool.True", "const_1");
|
|
|
|
|
|
|
|
backend.defineSym("bool.False", "const_0");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -76,6 +80,7 @@ public class CodeGenImpl extends CodeGenBase
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
protected void emitTopLevel(List<Stmt> statements)
|
|
|
|
protected void emitTopLevel(List<Stmt> statements)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
StmtAnalyzer stmtAnalyzer = new StmtAnalyzer(null);
|
|
|
|
StmtAnalyzer stmtAnalyzer = new StmtAnalyzer(null);
|
|
|
|
backend.emitADDI(SP, SP, -2 * backend.getWordSize(), "Saved FP and saved RA (unused at top level).");
|
|
|
|
backend.emitADDI(SP, SP, -2 * backend.getWordSize(), "Saved FP and saved RA (unused at top level).");
|
|
|
|
backend.emitSW(ZERO, SP, 0, "Top saved FP is 0.");
|
|
|
|
backend.emitSW(ZERO, SP, 0, "Top saved FP is 0.");
|
|
|
@ -848,7 +853,6 @@ public class CodeGenImpl extends CodeGenBase
|
|
|
|
* to out-of-bounds error and abort");
|
|
|
|
* to out-of-bounds error and abort");
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
protected void emitCustomCode() {
|
|
|
|
protected void emitCustomCode() {
|
|
|
|
|
|
|
|
|
|
|
|
emitStdFunc("concat");
|
|
|
|
emitStdFunc("concat");
|
|
|
|
emitStdFunc("conslist");
|
|
|
|
emitStdFunc("conslist");
|
|
|
|
emitStdFunc("strcat");
|
|
|
|
emitStdFunc("strcat");
|
|
|
|