From d05aa0afd8969e6c6e58f63795ffb0ffd89b5378 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Fri, 21 May 2004 00:13:04 +0000 Subject: [PATCH] re PR target/15301 ([3.3/3.4 only] gcc does not pass __m128 arguments correctly) 2004-05-20 H.J. Lu PR target/15301 * gcc.dg/compat/union-m128-1.h: New file. * gcc.dg/compat/union-m128-1_main.c: Likewise. * gcc.dg/compat/union-m128-1_x.c: Likewise. * gcc.dg/compat/union-m128-1_y.c: Likewise. From-SVN: r82077 --- gcc/testsuite/ChangeLog | 8 +++++ gcc/testsuite/gcc.dg/compat/union-m128-1.h | 17 +++++++++++ .../gcc.dg/compat/union-m128-1_main.c | 21 ++++++++++++++ gcc/testsuite/gcc.dg/compat/union-m128-1_x.c | 26 +++++++++++++++++ gcc/testsuite/gcc.dg/compat/union-m128-1_y.c | 29 +++++++++++++++++++ 5 files changed, 101 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/compat/union-m128-1.h create mode 100644 gcc/testsuite/gcc.dg/compat/union-m128-1_main.c create mode 100644 gcc/testsuite/gcc.dg/compat/union-m128-1_x.c create mode 100644 gcc/testsuite/gcc.dg/compat/union-m128-1_y.c diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f2fa8f4a0e0..99dcf889ec0 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2004-05-20 H.J. Lu + + PR target/15301 + * gcc.dg/compat/union-m128-1.h: New file. + * gcc.dg/compat/union-m128-1_main.c: Likewise. + * gcc.dg/compat/union-m128-1_x.c: Likewise. + * gcc.dg/compat/union-m128-1_y.c: Likewise. + 2004-05-20 H.J. Lu PR target/15302 diff --git a/gcc/testsuite/gcc.dg/compat/union-m128-1.h b/gcc/testsuite/gcc.dg/compat/union-m128-1.h new file mode 100644 index 00000000000..56d80cbfb91 --- /dev/null +++ b/gcc/testsuite/gcc.dg/compat/union-m128-1.h @@ -0,0 +1,17 @@ +#include + +typedef struct +{ + __m128 x; +} SS_struct_mi128; + +typedef union +{ + __m128 x; +} SS_union_mi128; + +typedef union +{ + __m128 x; + unsigned long long u[2]; +} union_mi128; diff --git a/gcc/testsuite/gcc.dg/compat/union-m128-1_main.c b/gcc/testsuite/gcc.dg/compat/union-m128-1_main.c new file mode 100644 index 00000000000..69dd34dce57 --- /dev/null +++ b/gcc/testsuite/gcc.dg/compat/union-m128-1_main.c @@ -0,0 +1,21 @@ +/* { dg-options "-O" } */ + +#ifdef __x86_64__ +/* Test function argument passing. PR target/15301. */ + +extern void union_m128_1_x (void); +extern void exit (int); + +int +main () +{ + union_m128_1_x (); + exit (0); +} +#else +int +main () +{ + return 0; +} +#endif diff --git a/gcc/testsuite/gcc.dg/compat/union-m128-1_x.c b/gcc/testsuite/gcc.dg/compat/union-m128-1_x.c new file mode 100644 index 00000000000..0a6f8860d09 --- /dev/null +++ b/gcc/testsuite/gcc.dg/compat/union-m128-1_x.c @@ -0,0 +1,26 @@ +/* { dg-options "-O" } */ + +#ifdef __x86_64__ +#include "union-m128-1.h" + +SS_union_mi128 un; +SS_struct_mi128 st; + +extern void bar (); +extern void foo (); + +void +union_m128_1_x () +{ + union_mi128 x; + + x.u [0] = 0x123456789abcedf0LL; + x.u [1] = 0xfedcba9876543210LL; + un.x = x.x; + st.x = x.x; + bar(un); + bar(st); + foo(un); + foo(st); +} +#endif diff --git a/gcc/testsuite/gcc.dg/compat/union-m128-1_y.c b/gcc/testsuite/gcc.dg/compat/union-m128-1_y.c new file mode 100644 index 00000000000..153ed7d7440 --- /dev/null +++ b/gcc/testsuite/gcc.dg/compat/union-m128-1_y.c @@ -0,0 +1,29 @@ +/* { dg-options "-O" } */ + +#ifdef __x86_64__ +#include + +#include "union-m128-1.h" + +void +bar (SS_union_mi128 un) +{ + union_mi128 x; + + x.x = un.x; + if (x.u [0] != 0x123456789abcedf0LL + || x.u [1] != 0xfedcba9876543210LL) + abort (); +} + +void +foo (SS_struct_mi128 st) +{ + union_mi128 x; + + x.x = st.x; + if (x.u [0] != 0x123456789abcedf0LL + || x.u [1] != 0xfedcba9876543210LL) + abort (); +} +#endif -- 2.30.2