From ef3d38c5c9d534099aae61651da3c3aa1ad3c6ab Mon Sep 17 00:00:00 2001 From: gus knight Date: Wed, 29 Jul 2015 16:57:41 -0400 Subject: Revert "fix-mixed-struct (patch by Pip Cet)" This reverts commit 4e04f67c94c97b4f28a4d73759a0ad38fb3a10f7. Requested by grischka. --- tccgen.c | 86 ++++------------------------------------------------------------ 1 file changed, 5 insertions(+), 81 deletions(-) (limited to 'tccgen.c') diff --git a/tccgen.c b/tccgen.c index 5ed7b34..fcec8f1 100644 --- a/tccgen.c +++ b/tccgen.c @@ -525,7 +525,7 @@ ST_FUNC void vpushv(SValue *v) *vtop = *v; } -ST_FUNC void vdup(void) +static void vdup(void) { vpushv(vtop); } @@ -4200,7 +4200,6 @@ ST_FUNC void unary(void) SValue ret; Sym *sa; int nb_args, ret_nregs, ret_align, regsize, variadic; - RegArgs args; /* function call */ if ((vtop->type.t & VT_BTYPE) != VT_FUNC) { @@ -4225,10 +4224,8 @@ ST_FUNC void unary(void) /* compute first implicit argument if a structure is returned */ if ((s->type.t & VT_BTYPE) == VT_STRUCT) { variadic = (s->c == FUNC_ELLIPSIS); - gfunc_sret(&s->type, variadic, &ret.type, - &ret_align, ®size, &args); - ret_nregs = regargs_nregs(&args); - + ret_nregs = gfunc_sret(&s->type, variadic, &ret.type, + &ret_align, ®size); if (!ret_nregs) { /* get some space for the returned structure */ size = type_size(&s->type, &align); @@ -4306,10 +4303,6 @@ ST_FUNC void unary(void) /* handle packed struct return */ if (((s->type.t & VT_BTYPE) == VT_STRUCT) && ret_nregs) { int addr, offset; -#if defined(TCC_TARGET_X86_64) && !defined(TCC_TARGET_PE) - int i; -#endif - size = type_size(&s->type, &align); /* We're writing whole regs often, make sure there's enough @@ -4318,34 +4311,6 @@ ST_FUNC void unary(void) align = regsize; loc = (loc - size) & -align; addr = loc; -#if defined(TCC_TARGET_X86_64) && !defined(TCC_TARGET_PE) - for (i=0; itype, VT_LOCAL | VT_LVAL, addr); } } else { @@ -4927,11 +4891,8 @@ static void block(int *bsym, int *csym, int *case_sym, int *def_sym, if ((func_vt.t & VT_BTYPE) == VT_STRUCT) { CType type, ret_type; int ret_align, ret_nregs, regsize; - RegArgs args; - - gfunc_sret(&func_vt, func_var, &ret_type, - &ret_align, ®size, &args); - ret_nregs = regargs_nregs(&args); + ret_nregs = gfunc_sret(&func_vt, func_var, &ret_type, + &ret_align, ®size); if (0 == ret_nregs) { /* if returning structure, must copy it to implicit first pointer arg location */ @@ -4945,9 +4906,6 @@ static void block(int *bsym, int *csym, int *case_sym, int *def_sym, } else { /* returning structure packed into registers */ int r, size, addr, align; -#if defined(TCC_TARGET_X86_64) && !defined(TCC_TARGET_PE) - int i; -#endif size = type_size(&func_vt,&align); if ((vtop->r != (VT_LOCAL | VT_LVAL) || (vtop->c.i & (ret_align-1))) && (align & (ret_align-1))) { @@ -4961,39 +4919,6 @@ static void block(int *bsym, int *csym, int *case_sym, int *def_sym, vset(&ret_type, VT_LOCAL | VT_LVAL, addr); } vtop->type = ret_type; -#if defined(TCC_TARGET_X86_64) && !defined(TCC_TARGET_PE) - for (i=0; ic.i += off; - vtop->type.t = VT_LLONG; - gv(r); - vpop(); - } - for (i=0; ic.i += off; - vtop->type.t = VT_DOUBLE; - gv(r); - vpop(); - } -#else if (is_float(ret_type.t)) r = rc_fret(ret_type.t); else @@ -5010,7 +4935,6 @@ static void block(int *bsym, int *csym, int *case_sym, int *def_sym, vtop->c.i += regsize; vtop->r = VT_LOCAL | VT_LVAL; } -#endif } } else if (is_float(func_vt.t)) { gv(rc_fret(func_vt.t)); -- cgit v1.3.1