* arm.c (arm_return_in_memory): Add handling for vector return types.
authorJosh Conner <jconner@apple.com>
Fri, 13 May 2005 16:44:16 +0000 (16:44 +0000)
committerJulian Brown <jules@gcc.gnu.org>
Fri, 13 May 2005 16:44:16 +0000 (16:44 +0000)
From-SVN: r99666

gcc/ChangeLog
gcc/config/arm/arm.c

index 6082e7462e10b40683573ec4dfa9b3e8cdb9604b..a6034e2a8e597302daaa97378e3513fc42e86642 100644 (file)
@@ -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
index c1d1fa8e8973e9a52c7765e8b0e23e6be5275313..4129a99651f2fe0ee5ed310d1675c3bb0ba57913 100644 (file)
@@ -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