From: Jim Wilson Date: Thu, 6 Jun 1996 23:14:12 +0000 (-0700) Subject: (expand_value_return): Handle PARALLEL return_reg. X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e5eeae6506bed8f70e16fd7be890d13408f08f51;p=platform%2Fupstream%2Fgcc.git (expand_value_return): Handle PARALLEL return_reg. From-SVN: r12192 --- diff --git a/gcc/stmt.c b/gcc/stmt.c index d9551f6..687520e 100644 --- a/gcc/stmt.c +++ b/gcc/stmt.c @@ -2529,6 +2529,21 @@ expand_value_return (val) if (GET_CODE (return_reg) == REG && REGNO (return_reg) < FIRST_PSEUDO_REGISTER) emit_insn (gen_rtx (USE, VOIDmode, return_reg)); + /* Handle calls that return values in multiple non-contiguous locations. + The Irix 6 ABI has examples of this. */ + else if (GET_CODE (return_reg) == PARALLEL) + { + int i; + + for (i = 0; i < XVECLEN (return_reg, 0); i++) + { + rtx x = XEXP (XVECEXP (return_reg, 0, i), 0); + + if (GET_CODE (x) == REG + && REGNO (x) < FIRST_PSEUDO_REGISTER) + emit_insn (gen_rtx (USE, VOIDmode, x)); + } + } /* Does any pending block have cleanups? */