aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJim Wilson <wilson@gcc.gnu.org>1996-11-08 17:37:54 -0800
committerJim Wilson <wilson@gcc.gnu.org>1996-11-08 17:37:54 -0800
commitecec444145eaee489427a9efa5eaee7909e46333 (patch)
treece4fb418239f59dc821fbf2c01fb9317331defac /gcc
parenta082c85a4365cc2a9b73ecc6547075d3c352d46c (diff)
downloadgcc-ecec444145eaee489427a9efa5eaee7909e46333.zip
gcc-ecec444145eaee489427a9efa5eaee7909e46333.tar.gz
gcc-ecec444145eaee489427a9efa5eaee7909e46333.tar.bz2
(expand_function_end): Handle BLKmode structures returned
in registers. From-SVN: r13117
Diffstat (limited to 'gcc')
-rw-r--r--gcc/function.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/gcc/function.c b/gcc/function.c
index 827f14b..6fa9811 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -5549,6 +5549,11 @@ expand_function_end (filename, line, end_bindings)
current_function_decl);
#endif
REG_FUNCTION_VALUE_P (real_decl_result) = 1;
+ /* If this is a BLKmode structure being returned in registers, then use
+ the mode computed in expand_return. */
+ if (GET_MODE (real_decl_result) == BLKmode)
+ PUT_MODE (real_decl_result,
+ GET_MODE (DECL_RTL (DECL_RESULT (current_function_decl))));
emit_move_insn (real_decl_result,
DECL_RTL (DECL_RESULT (current_function_decl)));
emit_insn (gen_rtx (USE, VOIDmode, real_decl_result));