Commit 5e062767 by Danny Smith Committed by Danny Smith

i386.h (MS_AGGREGATE_RETURN): New define.

	* config/i386/i386.h (MS_AGGREGATE_RETURN): New define.
	* config/i386/cygwin.h (MS_AGGREGATE_RETURN): Override default
	definition.
	* config/i386/i386.h (ix86_return_in_memory): Return aggregate
	types of up to 8 bytes via registers if MS_AGGREGATE_RETURN.

From-SVN: r62547
parent b0b74f37
2003-03-07 Danny Smith <dannysmith@users.sourceforge.net>
* config/i386/i386.h (MS_AGGREGATE_RETURN): New define.
* config/i386/cygwin.h (MS_AGGREGATE_RETURN): Override default
definition.
* config/i386/i386.h (ix86_return_in_memory): Return aggregate
types of up to 8 bytes via registers if MS_AGGREGATE_RETURN.
Fri Feb 7 22:22:40 CET 2003 Jan Hubicka <jh@suse.cz> Fri Feb 7 22:22:40 CET 2003 Jan Hubicka <jh@suse.cz>
* i386.md (movdi_rex64_1): Fix mmx<->int move opcode. * i386.md (movdi_rex64_1): Fix mmx<->int move opcode.
......
...@@ -410,6 +410,11 @@ extern int i386_pe_dllimport_name_p PARAMS ((const char *)); ...@@ -410,6 +410,11 @@ extern int i386_pe_dllimport_name_p PARAMS ((const char *));
#undef DEFAULT_PCC_STRUCT_RETURN #undef DEFAULT_PCC_STRUCT_RETURN
#define DEFAULT_PCC_STRUCT_RETURN 0 #define DEFAULT_PCC_STRUCT_RETURN 0
/* MSVC returns aggregate types of up to 8 bytes via registers.
See i386.c:ix86_return_in_memory. */
#undef MS_AGGREGATE_RETURN
#define MS_AGGREGATE_RETURN 1
/* No data type wants to be aligned rounder than this. */ /* No data type wants to be aligned rounder than this. */
#undef BIGGEST_ALIGNMENT #undef BIGGEST_ALIGNMENT
#define BIGGEST_ALIGNMENT 128 #define BIGGEST_ALIGNMENT 128
......
...@@ -2608,10 +2608,16 @@ ix86_return_in_memory (type) ...@@ -2608,10 +2608,16 @@ ix86_return_in_memory (type)
} }
else else
{ {
if (TYPE_MODE (type) == BLKmode if (TYPE_MODE (type) == BLKmode)
|| (VECTOR_MODE_P (TYPE_MODE (type)) return 1;
else if (MS_AGGREGATE_RETURN
&& AGGREGATE_TYPE_P (type)
&& int_size_in_bytes(type) <= 8)
return 0;
else if ((VECTOR_MODE_P (TYPE_MODE (type))
&& int_size_in_bytes (type) == 8) && int_size_in_bytes (type) == 8)
|| (int_size_in_bytes (type) > 12 && TYPE_MODE (type) != TImode || (int_size_in_bytes (type) > 12
&& TYPE_MODE (type) != TImode
&& TYPE_MODE (type) != TFmode && TYPE_MODE (type) != TFmode
&& !VECTOR_MODE_P (TYPE_MODE (type)))) && !VECTOR_MODE_P (TYPE_MODE (type))))
return 1; return 1;
......
...@@ -1208,6 +1208,9 @@ do { \ ...@@ -1208,6 +1208,9 @@ do { \
#define RETURN_IN_MEMORY(TYPE) \ #define RETURN_IN_MEMORY(TYPE) \
ix86_return_in_memory (TYPE) ix86_return_in_memory (TYPE)
/* This is overriden by <cygwin.h>. */
#define MS_AGGREGATE_RETURN 0
/* Define the classes of registers for register constraints in the /* Define the classes of registers for register constraints in the
machine description. Also define ranges of constants. machine description. Also define ranges of constants.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment