diff options
Diffstat (limited to 'gcc-4.4.3/gcc/testsuite/gcc.target/x86_64')
8 files changed, 190 insertions, 0 deletions
diff --git a/gcc-4.4.3/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-2a.c b/gcc-4.4.3/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-2a.c new file mode 100644 index 000000000..048da6e56 --- /dev/null +++ b/gcc-4.4.3/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-2a.c @@ -0,0 +1,27 @@ +/* Test for cross x86_64<->w64 abi standard calls. */ +/* { dg-do run { target i?86-*-linux* x86_64-*-linux* } } */ +/* { dg-options "-O2 -mabi=ms -std=gnu99 -ffast-math -fno-builtin" } */ +/* { dg-additional-sources "func-2b.c" } */ + +extern void __attribute__ ((sysv_abi)) abort (void); +long double func_cross (long double, double, float, long, int, char); + +long double __attribute__ ((sysv_abi)) +func_native (long double a, double b, float c, long d, int e, char f) +{ + long double ret; + ret = a + (long double) b + (long double) c; + ret *= (long double) (d + (long) e); + if (f>0) + ret += func_native (a,b,c,d,e,-f); + return ret; +} + +int __attribute__ ((sysv_abi)) +main () +{ + if (func_cross (1.0,2.0,3.0,1,2,3) + != func_native (1.0,2.0,3.0,1,2,3)) + abort (); + return 0; +} diff --git a/gcc-4.4.3/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-2b.c b/gcc-4.4.3/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-2b.c new file mode 100644 index 000000000..fe85dd186 --- /dev/null +++ b/gcc-4.4.3/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-2b.c @@ -0,0 +1,13 @@ +/* Test for cross x86_64<->w64 abi standard calls. */ +/* { dg-options "-mabi=ms -std=gnu99 -ffast-math -fno-builtin" } */ + +long double func_cross (long double a, double b, float c, long d, int e, + char f) +{ + long double ret; + ret = a + (long double) b + (long double) c; + ret *= (long double) (d + (long) e); + if (f>0) + ret += func_cross (a,b,c,d,e,-f); + return ret; +} diff --git a/gcc-4.4.3/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect-2a.c b/gcc-4.4.3/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect-2a.c new file mode 100644 index 000000000..730b8db9c --- /dev/null +++ b/gcc-4.4.3/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect-2a.c @@ -0,0 +1,17 @@ +/* Test for cross x86_64<->w64 abi standard calls via variable. */ +/* { dg-do run { target i?86-*-linux* x86_64-*-linux* } } */ +/* { dg-options "-O2 -mabi=ms -std=gnu99 -ffast-math -fno-builtin" } */ +/* { dg-additional-sources "func-indirect-2b.c" } */ + +extern void __attribute__ ((sysv_abi)) abort (void); +typedef int (*func)(void *, char *, char *, short, long long); +extern func get_callback (void); + +int __attribute__ ((sysv_abi)) +main () +{ + func callme = get_callback (); + if (callme (0, 0, 0, 0x1234, 0x1234567890abcdefLL)) + abort (); + return 0; +} diff --git a/gcc-4.4.3/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect-2b.c b/gcc-4.4.3/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect-2b.c new file mode 100644 index 000000000..1a9fccd97 --- /dev/null +++ b/gcc-4.4.3/gcc/testsuite/gcc.target/x86_64/abi/callabi/func-indirect-2b.c @@ -0,0 +1,24 @@ +/* Test for cross x86_64<->w64 abi standard calls via variable. */ +/* { dg-options "-O2 -mabi=ms -std=gnu99 -ffast-math -fno-builtin" } */ + +typedef int (*func)(void *, char *, char *, short, long long); + +static int +callback (void *ptr, char *string1, char *string2, short number, + long long rand) +{ + if (ptr != 0 + || string1 != 0 + || string2 != 0 + || number != 0x1234 + || rand != 0x1234567890abcdefLL) + return 1; + else + return 0; +} + +func +get_callback (void) +{ + return callback; +} diff --git a/gcc-4.4.3/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-4a.c b/gcc-4.4.3/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-4a.c new file mode 100644 index 000000000..a44470431 --- /dev/null +++ b/gcc-4.4.3/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-4a.c @@ -0,0 +1,24 @@ +/* Test for cross x86_64<->w64 abi va_list calls. */ +/* { dg-do run { target i?86-*-linux* x86_64-*-linux* } } */ +/* { dg-options "-O2 -mabi=ms -std=gnu99 -fno-builtin" } */ +/* { dg-additional-sources "vaarg-4b.c" } */ + +extern __SIZE_TYPE__ __attribute__ ((sysv_abi)) strlen (const char *); +extern int __attribute__ ((sysv_abi)) sprintf (char *,const char *, ...); +extern void __attribute__ ((sysv_abi)) abort (void); + +extern void do_cpy (char *, ...); + +int __attribute__ ((sysv_abi)) +main () +{ + char s[256]; + + do_cpy (s, "1","2","3","4", "5", "6", "7", ""); + + if (s[0] != '1' || s[1] !='2' || s[2] != '3' || s[3] != '4' + || s[4] != '5' || s[5] != '6' || s[6] != '7' || s[7] != 0) + abort (); + + return 0; +} diff --git a/gcc-4.4.3/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-4b.c b/gcc-4.4.3/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-4b.c new file mode 100644 index 000000000..f33906bd2 --- /dev/null +++ b/gcc-4.4.3/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-4b.c @@ -0,0 +1,31 @@ +/* Test for cross x86_64<->w64 abi va_list calls. */ +/* { dg-options "-O2 -mabi=ms -std=gnu99 -fno-builtin" } */ + +#include <stdarg.h> + +extern __SIZE_TYPE__ __attribute__ ((sysv_abi)) strlen (const char *); +extern int __attribute__ ((sysv_abi)) sprintf (char *, const char *, ...); + +static void +vdo_cpy (char *s, va_list argp) +{ + __SIZE_TYPE__ len; + char *r = s; + char *e; + *r = 0; + for (;;) { + e = va_arg (argp, char *); + if (*e == 0) break; + sprintf (r,"%s", e); + r += strlen (r); + } +} + +void +do_cpy (char *s, ...) +{ + va_list argp; + va_start (argp, s); + vdo_cpy (s, argp); + va_end (argp); +} diff --git a/gcc-4.4.3/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-5a.c b/gcc-4.4.3/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-5a.c new file mode 100644 index 000000000..e9912957e --- /dev/null +++ b/gcc-4.4.3/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-5a.c @@ -0,0 +1,17 @@ +/* Test for cross x86_64<->w64 abi va_list calls. */ +/* { dg-do run { target i?86-*-linux* x86_64-*-linux* } } */ +/* { dg-options "-O2 -mabi=ms -std=gnu99 -fno-builtin" } */ +/* { dg-additional-sources "vaarg-5b.c" } */ + +extern void __attribute__ ((sysv_abi)) abort (void); +extern int fct2 (int, ...); + +#define SZ_ARGS 1ll,2ll,3ll,4ll,5ll,6ll,7ll,0ll + +int __attribute__ ((sysv_abi)) +main() +{ + if (fct2 (-1, SZ_ARGS) != 0) + abort (); + return 0; +} diff --git a/gcc-4.4.3/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-5b.c b/gcc-4.4.3/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-5b.c new file mode 100644 index 000000000..e5dd4727b --- /dev/null +++ b/gcc-4.4.3/gcc/testsuite/gcc.target/x86_64/abi/callabi/vaarg-5b.c @@ -0,0 +1,37 @@ +/* Test for cross x86_64<->w64 abi va_list calls. */ +/* { dg-options "-O2 -mabi=ms -std=gnu99 -fno-builtin" } */ + +#include <stdarg.h> + +#define SZ_ARGS 1ll,2ll,3ll,4ll,5ll,6ll,7ll,0ll + +static int __attribute__ ((sysv_abi)) +fct1 (va_list argp, ...) +{ + long long p1,p2; + int ret = 1; + __builtin_sysv_va_list argp_2; + + __builtin_sysv_va_start (argp_2, argp); + do { + p1 = va_arg (argp_2, long long); + p2 = va_arg (argp, long long); + if (p1 != p2) + ret = 0; + } while (ret && p1 != 0); + __builtin_sysv_va_end (argp_2); + + return ret; +} + +int +fct2 (int dummy, ...) +{ + va_list argp; + int ret = dummy; + + va_start (argp, dummy); + ret += fct1 (argp, SZ_ARGS); + va_end (argp); + return ret; +} |