diff --git a/src/backend/codegen.cpp b/src/backend/codegen.cpp index 3fd20a1..c2acc8a 100644 --- a/src/backend/codegen.cpp +++ b/src/backend/codegen.cpp @@ -166,9 +166,16 @@ namespace backend } } if (haveCall) + { + code += space + "sub\tsp, fp, #4" + endl; code += space + "pop\t{fp,lr}" + endl; + } + else + { + code += space + "add\tsp, fp, #0" + endl; code += space + "pop\t{fp}" + endl; + } code += space + "bx\tlr" + endl; return code; } @@ -345,6 +352,15 @@ namespace backend /** *code in here */ + auto retval = retInst->getReturnValue(); + if (isa(retval)) + { + code += space + "mov\tr0, " + to_string(dynamic_cast(retval)->getInt()) + endl; + } + else + { + code += space + "mov\tr0, r" + retval->getName() + endl; + } return code; } string CodeGen::uncondBrInst_gen(UncondBrInst *ubInst) @@ -446,7 +462,7 @@ namespace backend case Instruction::kReturn: { ReturnInst *retInst = dynamic_cast(instr); - code += M_emitComment("return inst"); + // code += M_emitComment("return inst"); code += returnInst_gen(retInst); return code; break;