From: hjl Date: Fri, 21 May 2004 00:13:04 +0000 (+0000) Subject: 2004-05-20 H.J. Lu X-Git-Url: http://git.sourceforge.jp/view?p=pf3gnuchains%2Fgcc-fork.git;a=commitdiff_plain;h=b7c23be8e2ff1b3507343ec8082840980e0fe318;hp=6b3d994d3569532df169555666985b6defe4a118 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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@82077 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f2fa8f4a0e0..99dcf889ec0 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,13 @@ 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 * gcc.dg/compat/struct-complex-1.h: New file. * gcc.dg/compat/struct-complex-1_main.c: Likewise. 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