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
This commit is contained in:
Danny Smith 2003-02-07 22:10:56 +00:00 committed by Danny Smith
parent b0b74f371e
commit 5e062767b9
4 changed files with 28 additions and 6 deletions

View File

@ -1,3 +1,11 @@
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>
* i386.md (movdi_rex64_1): Fix mmx<->int move opcode.

View File

@ -410,6 +410,11 @@ extern int i386_pe_dllimport_name_p PARAMS ((const char *));
#undef DEFAULT_PCC_STRUCT_RETURN
#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. */
#undef BIGGEST_ALIGNMENT
#define BIGGEST_ALIGNMENT 128

View File

@ -2608,12 +2608,18 @@ ix86_return_in_memory (type)
}
else
{
if (TYPE_MODE (type) == BLKmode
|| (VECTOR_MODE_P (TYPE_MODE (type))
&& int_size_in_bytes (type) == 8)
|| (int_size_in_bytes (type) > 12 && TYPE_MODE (type) != TImode
&& TYPE_MODE (type) != TFmode
&& !VECTOR_MODE_P (TYPE_MODE (type))))
if (TYPE_MODE (type) == BLKmode)
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) > 12
&& TYPE_MODE (type) != TImode
&& TYPE_MODE (type) != TFmode
&& !VECTOR_MODE_P (TYPE_MODE (type))))
return 1;
return 0;
}

View File

@ -1208,6 +1208,9 @@ do { \
#define 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
machine description. Also define ranges of constants.