1 /* { dg-require-effective-target vect_float } */
2 /* { dg-additional-options "-fdump-rtl-combine-details" } */
6 extern void abort (void);
8 #define NOINLINE __attribute__((noinline))
10 typedef float float32x4_t
__attribute__ ((__vector_size__ (16)));
11 typedef float float32x2_t
__attribute__ ((__vector_size__ (8)));
14 foo32x4_be (float32x4_t x
)
20 foo32x4_le (float32x4_t x
)
32 foo32x2_be (float32x2_t x
)
35 /* ix86 passes float32x2 vector arguments in mmx registers. We need to
36 emit emms to empty MMS state and reenable x87 stack before float value
37 can be loaded to and passed in x87 floating-point return register. */
38 __builtin_ia32_emms ();
44 foo32x2_le (float32x2_t x
)
47 __builtin_ia32_emms ();
55 float32x4_t a
= { 0.0f
, 1.0f
, 2.0f
, 3.0f
};
56 float32x2_t b
= { 0.0f
, 1.0f
};
58 if (foo32x2_be (b
) != 1.0f
)
61 if (foo32x2_le (b
) != 0.0f
)
64 if (foo32x4_be (a
) != 3.0f
)
67 if (foo32x4_le (a
) != 0.0f
)
80 /* { dg-final { scan-rtl-dump "deleting noop move" "combine" { target aarch64*-*-* } } } */