- // restore regs
- for (i = pp->argc - 1; i >= 0; i--) {
- if (pp->arg[i].reg != NULL && is_x86_reg_saved(pp->arg[i].reg))
- fprintf(f, "\tpopl %%%s\n", pp->arg[i].reg);
+ // update the retreg regs
+ if (pp->has_retreg) {
+ for (i = 0; i < pp->argc; i++) {
+ if (pp->arg[i].type.is_retreg) {
+ fprintf(f, "\tmovl %d(%%esp), %%ecx\n"
+ "\tmovl %%%s, (%%ecx)\n",
+ (i + sarg_ofs) * 4, pp->arg[i].reg);
+ }
+ }