From: Paul Koning Date: Mon, 1 Nov 2010 18:08:15 +0000 (-0400) Subject: pdp11.c (pdp11_return_in_memory): Return vector and complex modes in memory. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=c6d3802a2ff97169d47cb701745a7871c758bad4;p=gcc.git pdp11.c (pdp11_return_in_memory): Return vector and complex modes in memory. * config/pdp11/pdp11.c (pdp11_return_in_memory): Return vector and complex modes in memory. From-SVN: r166137 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5017eb3f300..c267b92630c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2010-11-01 Paul Koning + + * config/pdp11/pdp11.c (pdp11_return_in_memory): Return vector and + complex modes in memory. + 2010-11-01 Nathan Froyd * tree.c (build_vector_from_val): Use useless_type_conversion_p. diff --git a/gcc/config/pdp11/pdp11.c b/gcc/config/pdp11/pdp11.c index 946d7ed973b..5b5ebebe0e5 100644 --- a/gcc/config/pdp11/pdp11.c +++ b/gcc/config/pdp11/pdp11.c @@ -1816,14 +1816,12 @@ output_addr_const_pdp11 (FILE *file, rtx x) static bool pdp11_return_in_memory (const_tree type, const_tree fntype ATTRIBUTE_UNUSED) { - /* Should probably return DImode and DFmode in memory, lest - we fill up all regs! - - have to, else we crash - exception: maybe return result in - ac0 if DFmode and FPU present - compatibility problem with - libraries for non-floating point.... */ + /* Integers 32 bits and under, and scalar floats (if FPU), are returned + in registers. The rest go into memory. */ return (TYPE_MODE (type) == DImode - || (FLOAT_MODE_P (TYPE_MODE (type)) && ! TARGET_AC0)); + || (FLOAT_MODE_P (TYPE_MODE (type)) && ! TARGET_AC0) + || TREE_CODE (type) == VECTOR_TYPE + || COMPLEX_MODE_P (TYPE_MODE (type))); } /* Worker function for TARGET_FUNCTION_VALUE.