diff options
author | danglin <danglin@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-11-27 02:29:12 +0000 |
---|---|---|
committer | danglin <danglin@138bc75d-0d04-0410-961f-82ee72b054a4> | 2002-11-27 02:29:12 +0000 |
commit | b566e2e54ddf323a6f4ddcaa88d389e42e456ab6 (patch) | |
tree | fc534194a61afad57285d25be308fb71db734c93 /gcc/expr.h | |
parent | a9df464b2734d75ea7f1f5491fbed8f5eb3fac4e (diff) | |
download | gcc-b566e2e54ddf323a6f4ddcaa88d389e42e456ab6.tar.gz |
* expr.c (gen_group_rtx, emit_group_move): New functions.
* expr.h (gen_group_rtx, emit_group_move): Prototype.
* function.c (expand_function_start): Use gen_group_rtx to create a
PARALLEL rtx to hold the return value when the real return rtx is a
PARALLEL.
(expand_function_end): Use emit_group_move to move the return value
from a PARALLEL to the real return registers.
* rtl.h (REG_FUNCTION_VALUE_P): Allow function values to be returned
in PARALLELs.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@59554 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/expr.h')
-rw-r--r-- | gcc/expr.h | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/gcc/expr.h b/gcc/expr.h index e8b2c176064..6e8d19e994b 100644 --- a/gcc/expr.h +++ b/gcc/expr.h @@ -412,10 +412,17 @@ extern void move_block_to_reg PARAMS ((int, rtx, int, enum machine_mode)); The number of registers to be filled is NREGS. */ extern void move_block_from_reg PARAMS ((int, rtx, int, int)); +/* Generate a non-consecutive group of registers represented by a PARALLEL. */ +extern rtx gen_group_rtx PARAMS ((rtx)); + /* Load a BLKmode value into non-consecutive registers represented by a PARALLEL. */ extern void emit_group_load PARAMS ((rtx, rtx, int)); +/* Move a non-consecutive group of registers represented by a PARALLEL into + a non-consecutive group of registers represented by a PARALLEL. */ +extern void emit_group_move PARAMS ((rtx, rtx)); + /* Store a BLKmode value from non-consecutive registers represented by a PARALLEL. */ extern void emit_group_store PARAMS ((rtx, rtx, int)); |