aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosh Conner <jconner@apple.com>2005-05-13 16:44:16 +0000
committerJulian Brown <jules@gcc.gnu.org>2005-05-13 16:44:16 +0000
commit30e5a198438e9b3e70aa7f668e9bf747424098b3 (patch)
tree7e29f138afb8ae4155fea42601321126337f049f
parentee218a9203fc45ceb3d738a3459fb80517e0f90f (diff)
downloadgcc-30e5a198438e9b3e70aa7f668e9bf747424098b3.zip
gcc-30e5a198438e9b3e70aa7f668e9bf747424098b3.tar.gz
gcc-30e5a198438e9b3e70aa7f668e9bf747424098b3.tar.bz2
* arm.c (arm_return_in_memory): Add handling for vector return types.
From-SVN: r99666
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/config/arm/arm.c6
2 files changed, 10 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 6082e74..a6034e2 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,7 @@
+2005-05-13 Josh Conner <jconner@apple.com>
+
+ * arm.c (arm_return_in_memory): Add handling for vector return types.
+
2005-05-13 David Ung <davidu@mips.com>
* config/mips/mips.h (processor_type): Add new PROCESSOR_4KP
diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
index c1d1fa8..4129a99 100644
--- a/gcc/config/arm/arm.c
+++ b/gcc/config/arm/arm.c
@@ -2467,6 +2467,7 @@ arm_return_in_memory (tree type)
HOST_WIDE_INT size;
if (!AGGREGATE_TYPE_P (type) &&
+ (TREE_CODE (type) != VECTOR_TYPE) &&
!(TARGET_AAPCS_BASED && TREE_CODE (type) == COMPLEX_TYPE))
/* All simple types are returned in registers.
For AAPCS, complex types are treated the same as aggregates. */
@@ -2481,6 +2482,11 @@ arm_return_in_memory (tree type)
return (size < 0 || size > UNITS_PER_WORD);
}
+ /* To maximize backwards compatibility with previous versions of gcc,
+ return vectors up to 4 words in registers. */
+ if (TREE_CODE (type) == VECTOR_TYPE)
+ return (size < 0 || size > (4 * UNITS_PER_WORD));
+
/* For the arm-wince targets we choose to be compatible with Microsoft's
ARM and Thumb compilers, which always return aggregates in memory. */
#ifndef ARM_WINCE