From c0620c8a00f760765da802dc11e4863193e357e8 Mon Sep 17 00:00:00 2001 From: bobbl Date: Mon, 30 Nov 2009 19:33:44 +0100 Subject: [PATCH] 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. --- tccgen.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/tccgen.c b/tccgen.c index 78a5161f..38b0912a 100644 --- a/tccgen.c +++ b/tccgen.c @@ -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(); -- 2.11.4.GIT