diff options
author | Josh Conner <jconner@apple.com> | 2005-05-13 16:44:16 +0000 |
---|---|---|
committer | Julian Brown <jules@gcc.gnu.org> | 2005-05-13 16:44:16 +0000 |
commit | 30e5a198438e9b3e70aa7f668e9bf747424098b3 (patch) | |
tree | 7e29f138afb8ae4155fea42601321126337f049f /gcc/config | |
parent | ee218a9203fc45ceb3d738a3459fb80517e0f90f (diff) | |
download | gcc-30e5a198438e9b3e70aa7f668e9bf747424098b3.tar.gz |
* arm.c (arm_return_in_memory): Add handling for vector return types.
From-SVN: r99666
Diffstat (limited to 'gcc/config')
-rw-r--r-- | gcc/config/arm/arm.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index c1d1fa8e897..4129a99651f 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 |