OSDN Git Service

* arm.c (arm_return_in_memory): Add handling for vector return types.
authorjules <jules@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 13 May 2005 16:44:16 +0000 (16:44 +0000)
committerjules <jules@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 13 May 2005 16:44:16 +0000 (16:44 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@99666 138bc75d-0d04-0410-961f-82ee72b054a4

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

index 6082e74..a6034e2 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 c1d1fa8..4129a99 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