* 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
+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.
#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
}
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;
}
#define RETURN_IN_MEMORY(TYPE) \
ix86_return_in_memory (TYPE)
+/* This is overriden by <cygwin.h>. */
+#define MS_AGGREGATE_RETURN 0
+
\f
/* Define the classes of registers for register constraints in the
machine description. Also define ranges of constants.