aboutsummaryrefslogtreecommitdiff
path: root/tccgen.c
diff options
context:
space:
mode:
Diffstat (limited to 'tccgen.c')
-rw-r--r--tccgen.c23
1 files changed, 14 insertions, 9 deletions
diff --git a/tccgen.c b/tccgen.c
index bb10fe6..ab00308 100644
--- a/tccgen.c
+++ b/tccgen.c
@@ -5111,16 +5111,21 @@ static void block(int *bsym, int *csym, int is_expr)
else
r = RC_IRET;
- for (;;) {
+ if (ret_nregs == 1)
gv(r);
- if (--ret_nregs == 0)
- break;
- /* We assume that when a structure is returned in multiple
- registers, their classes are consecutive values of the
- suite s(n) = 2^n */
- r <<= 1;
- vtop->c.i += regsize;
- vtop->r = VT_LOCAL | VT_LVAL;
+ else {
+ for (;;) {
+ vdup();
+ gv(r);
+ vpop();
+ if (--ret_nregs == 0)
+ break;
+ /* We assume that when a structure is returned in multiple
+ registers, their classes are consecutive values of the
+ suite s(n) = 2^n */
+ r <<= 1;
+ vtop->c.i += regsize;
+ }
}
}
} else if (is_float(func_vt.t)) {