optimize the generated code when save_reg is required (2)

In gfunc_call, regisger will be saved before gcall_or_jmp. The register
stored the function will be saved too, though in some generator the SValue
of this function will be immediately poped after gcall_or_jmp, and no need to be saved. So I modify some generator to avoid save redundant SValue before gcall_or_jmp.
mob
Pursuer 2019-01-11 01:44:23 +08:00
parent b3b685d92a
commit 3f05d88d5b
4 changed files with 3 additions and 4 deletions

View File

@ -1187,7 +1187,7 @@ again:
/* Manually free remaining registers since next parameters are loaded
* manually, without the help of gv(int). */
save_regs(nb_args);
save_regs(nb_args+1);
if(todo) {
o(0xE8BD0000|todo); /* pop {todo} */

View File

@ -948,7 +948,7 @@ ST_FUNC void gfunc_call(int nb_args)
vswap();
}
save_regs(0);
save_regs(1);
arm64_gen_bl_or_b(0);
--vtop;
if (stack)

View File

@ -475,7 +475,7 @@ ST_FUNC void gfunc_call(int nb_args)
}
vtop--;
}
save_regs(0); /* save used temporary registers */
save_regs(1); /* save used temporary registers */
func_sym = vtop->type.ref;
func_call = func_sym->f.func_call;
/* fast call case */

View File

@ -903,7 +903,6 @@ void gfunc_call(int nb_args)
vtop--;
}
save_regs(0);
/* Copy R10 and R11 into RCX and RDX, respectively */
if (nb_args > 0) {
o(0xd1894c); /* mov %r10, %rcx */