diff options
Diffstat (limited to 'gcc/config/mips/mips.h')
-rw-r--r-- | gcc/config/mips/mips.h | 13 |
1 files changed, 4 insertions, 9 deletions
diff --git a/gcc/config/mips/mips.h b/gcc/config/mips/mips.h index edf5583..27a4a03 100644 --- a/gcc/config/mips/mips.h +++ b/gcc/config/mips/mips.h @@ -2372,18 +2372,13 @@ typedef struct mips_args { (mips_abi == ABI_EABI && (NAMED) \ && FUNCTION_ARG_PASS_BY_REFERENCE (CUM, MODE, TYPE, NAMED)) -/* Modified version of the macro in expr.h. */ +/* Modified version of the macro in expr.h. Only return true if + the type has a variable size or if the front end requires it + to be passed by reference. */ #define MUST_PASS_IN_STACK(MODE,TYPE) \ ((TYPE) != 0 \ && (TREE_CODE (TYPE_SIZE (TYPE)) != INTEGER_CST \ - || TREE_ADDRESSABLE (TYPE) \ - || ((MODE) == BLKmode \ - && mips_abi != ABI_32 && mips_abi != ABI_O64 \ - && ! ((TYPE) != 0 && TREE_CODE (TYPE_SIZE (TYPE)) == INTEGER_CST \ - && 0 == (int_size_in_bytes (TYPE) \ - % (PARM_BOUNDARY / BITS_PER_UNIT))) \ - && (FUNCTION_ARG_PADDING (MODE, TYPE) \ - == (BYTES_BIG_ENDIAN ? upward : downward))))) + || TREE_ADDRESSABLE (TYPE))) /* True if using EABI and varargs can be passed in floating-point registers. Under these conditions, we need a more complex form |