+2008-02-21 H.J. Lu <hongjiu.lu@intel.com>
+
+ PR target/39256
+ * config/i386/i386.c (type_natural_mode): Remove an extra
+ space in the warning message.
+ (function_value_32): Handle 32-byte vector modes.
+ (return_in_memory_32): Likewise.
+
2009-02-21 Richard Sandiford <rdsandiford@googlemail.com>
* loop-iv.c (truncate_value): New function.
{
warnedavx = true;
warning (0, "AVX vector argument without AVX "
- " enabled changes the ABI");
+ "enabled changes the ABI");
}
return TYPE_MODE (type);
}
|| (VECTOR_MODE_P (mode) && GET_MODE_SIZE (mode) == 16))
regno = TARGET_SSE ? FIRST_SSE_REG : 0;
+ /* 32-byte vector modes in %ymm0. */
+ else if (mode == OImode
+ || (VECTOR_MODE_P (mode) && GET_MODE_SIZE (mode) == 32))
+ regno = TARGET_AVX ? FIRST_SSE_REG : 0;
+
/* Floating point return values in %st(0) (unless -mno-fp-ret-in-387). */
else if (X87_FLOAT_MODE_P (mode) && TARGET_FLOAT_RETURNS_IN_80387)
regno = FIRST_FLOAT_REG;
if (MS_AGGREGATE_RETURN && AGGREGATE_TYPE_P (type) && size <= 8)
return 0;
- if (VECTOR_MODE_P (mode) || mode == TImode)
+ if (VECTOR_MODE_P (mode) || mode == TImode || mode == OImode)
{
/* User-created vectors small enough to fit in EAX. */
if (size < 8)
/* SSE values are returned in XMM0, except when it doesn't exist. */
if (size == 16)
return (TARGET_SSE ? 0 : 1);
+
+ /* AVX values are returned in YMM0, except when it doesn't exist. */
+ if (size == 32)
+ return TARGET_AVX ? 0 : 1;
}
if (mode == XFmode)
+2008-02-21 Uros Bizjak <ubizjak@gmail.com>
+
+ PR target/39256
+ * gcc.target/i386/abi-2.c: New.
+
2009-02-21 Kaz Kojima <kkojima@gcc.gnu.org>
* gcc.c-torture/execute/pr39228.x: New.
--- /dev/null
+/* Make certain that we pass __m256i in the correct register for AVX. */
+/* { dg-do compile } */
+/* { dg-options "-O1 -mavx" } */
+
+typedef long long __m256i __attribute__ ((__vector_size__ (32)));
+__m256i foo (void) { return (__m256i){ 1, 2, 3, 4 }; }
+
+/* { dg-final { scan-assembler-times "ymm0" 1 } } */