diff options
Diffstat (limited to 'gcc/config/i386/i386.c')
-rw-r--r-- | gcc/config/i386/i386.c | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 7d254fe..0cb337f 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -4902,7 +4902,7 @@ return_in_memory_ms_64 (const_tree type, enum machine_mode mode) } int -ix86_return_in_memory (const_tree type) +ix86_return_in_memory (const_tree type, const_tree fntype ATTRIBUTE_UNUSED) { const enum machine_mode mode = type_natural_mode (type); @@ -4920,7 +4920,7 @@ ix86_return_in_memory (const_tree type) are returned in memory, rather than in MMX registers. */ int -ix86_sol10_return_in_memory (const_tree type) +ix86_sol10_return_in_memory (const_tree type, const_tree fntype ATTRIBUTE_UNUSED) { int size; enum machine_mode mode = type_natural_mode (type); @@ -4951,6 +4951,20 @@ ix86_sol10_return_in_memory (const_tree type) return size > 12; } +int +ix86_i386elf_return_in_memory (const_tree type, const_tree fntype ATTRIBUTE_UNUSED) +{ + return (TYPE_MODE (type) == BLKmode + || (VECTOR_MODE_P (TYPE_MODE (type)) && int_size_in_bytes (type) == 8)); +} + +int +ix86_i386interix_return_in_memory (const_tree type, const_tree fntype ATTRIBUTE_UNUSED) +{ + return (TYPE_MODE (type) == BLKmode + || (AGGREGATE_TYPE_P (type) && int_size_in_bytes(type) > 8 )); +} + /* When returning SSE vector types, we have a choice of either (1) being abi incompatible with a -march switch, or (2) generating an error. @@ -4959,7 +4973,7 @@ ix86_sol10_return_in_memory (const_tree type) Choose the STRUCT_VALUE_RTX hook because that's (at present) only called in response to actually generating a caller or callee that - uses such a type. As opposed to RETURN_IN_MEMORY, which is called + uses such a type. As opposed to TARGET_RETURN_IN_MEMORY, which is called via aggregate_value_p for general type probing from tree-ssa. */ static rtx |