diff --git a/lib.c b/lib.c index 7bb0a144f368e590d852a5c855315a891f4cffc9..5b605f33aeb2d8f37664d50559c673119b798f3f 100644 --- a/lib.c +++ b/lib.c @@ -845,20 +845,22 @@ void print_read(struct symtable * t,struct code * c, FILE* fout,int i) #ifdef LIBDEBUG fprintf(fout,"%s# float read section\n",tabulation); #endif + // System call read float fprintf(fout,"%sli $v0, 6\n",tabulation); fprintf(fout,"%ssyscall\n",tabulation); - fprintf(fout,"%ssw $v0, %s\n",tabulation,c->quads[i].sym1->u.name); - fprintf(fout,"%saddi $t0, $v0, 4\n",tabulation); - fprintf(fout,"%sla $t1, %s\n",tabulation,c->quads[i].sym1->u.name); - fprintf(fout,"%slwc1 $f0, 0($t1)\n",tabulation); + // Assign given value to float variable + fprintf(fout,"%slw $t2, %s\n",tabulation,c->quads[i].sym1->u.name); + fprintf(fout,"%saddi $t0, $t2, 0\n",tabulation); fprintf(fout,"%sswc1 $f0, ($t0)\n",tabulation); #ifdef LIBDEBUG fprintf(fout,"%s# end of float read section\n",tabulation); #endif break; case NAME_LOC: + // System call read int fprintf(fout,"%sli $v0, 5\n",tabulation); fprintf(fout,"%ssyscall\n",tabulation); + // Assign given value to int variable fprintf(fout,"%ssw $v0, %s\n",tabulation,c->quads[i].sym1->u.name); break; default: