avoid needless register save when storing structures

When storing structs with a memcpy call in vstore(),
so far a needless entry remaining on the vstack
sometimes resulted in an useless store generated by
save_regs() in gfunc_call() for the memcpy routine.
This commit is contained in:
bobbl 2009-11-30 19:33:44 +01:00 committed by grischka
parent b573072300
commit c0620c8a00

View File

@ -2019,6 +2019,12 @@ void vstore(void)
if (!nocode_wanted) {
size = type_size(&vtop->type, &align);
/* destination */
vswap();
vtop->type.t = VT_PTR;
gaddrof();
/* address of memcpy() */
#ifdef TCC_ARM_EABI
if(!(align & 7))
vpush_global_sym(&func_old_type, TOK_memcpy8);
@ -2028,10 +2034,7 @@ void vstore(void)
#endif
vpush_global_sym(&func_old_type, TOK_memcpy);
/* destination */
vpushv(vtop - 2);
vtop->type.t = VT_PTR;
gaddrof();
vswap();
/* source */
vpushv(vtop - 2);
vtop->type.t = VT_PTR;
@ -2039,9 +2042,6 @@ void vstore(void)
/* type size */
vpushi(size);
gfunc_call(3);
vswap();
vpop();
} else {
vswap();
vpop();