This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [patch] PR target/21128
On Apr 22, 2005, at 4:58 AM, Paul Brook wrote:
On Friday 22 April 2005 02:37, Josh Conner wrote:
On Apr 21, 2005, at 5:37 PM, Paul Brook wrote:
else
return in memory
You are changing the ABI for vector types under the APCS. Given we
already do
complex types "wrong" it may be desirable to preserve this behaviour
for
vectors < 4 words.
Makes sense. Did you mean <= 4 words, by any chance?
Yes, I did.
Paul
Whoops - I forgot to include an updated ChangeLog entry last time...
Thanks -
Josh
~~~~
2005-04-20 Josh Conner <jconner@apple.com>
PR target/21128
* arm.c (arm_return_in_memory): Add handling for vector
return types.
Index: arm.c
===================================================================
RCS file: /cvsroot/gcc/gcc/gcc/config/arm/arm.c,v
retrieving revision 1.444
diff -c -3 -p -r1.444 arm.c
*** arm.c 19 Apr 2005 22:12:59 -0000 1.444
--- arm.c 23 Apr 2005 00:54:37 -0000
*************** arm_return_in_memory (tree type)
*** 2338,2343 ****
--- 2338,2344 ----
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.
*/
*************** arm_return_in_memory (tree type)
*** 2352,2357 ****
--- 2353,2363 ----
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