OSDN Git Service
(root)
/
pf3gnuchains
/
gcc-fork.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
* arm.c (arm_return_in_memory): Add handling for vector return types.
[pf3gnuchains/gcc-fork.git]
/
gcc
/
config
/
arm
/
arm.c
diff --git
a/gcc/config/arm/arm.c
b/gcc/config/arm/arm.c
index
c1d1fa8
..
4129a99
100644
(file)
--- 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) &&
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. */
!(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);
}
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
/* 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