vector-defs.h: New file.

* gcc.dg/compat/vector-defs.h: New file.
	* gcc.dg/compat/vector-setup.h: New file.
	* gcc.dg/compat/vector-check.h: New file.
	* gcc.dg/compat/vector-1_main.c: New file.
	* gcc.dg/compat/vector-1_x.c: New file.
	* gcc.dg/compat/vector-1_y.c: New file.
	* gcc.dg/compat/vector-2_main.c: New file.
	* gcc.dg/compat/vector-2_x.c: New file.
	* gcc.dg/compat/vector-2_y.c: New file.

From-SVN: r68902
This commit is contained in:
Janis Johnson 2003-07-03 20:37:42 +00:00 committed by Janis Johnson
parent 0964c98c4c
commit 7516d73631
10 changed files with 255 additions and 0 deletions

View File

@ -1,5 +1,15 @@
2003-07-03 Janis Johnson <janis187@us.ibm.com>
* gcc.dg/compat/vector-defs.h: New file.
* gcc.dg/compat/vector-setup.h: New file.
* gcc.dg/compat/vector-check.h: New file.
* gcc.dg/compat/vector-1_main.c: New file.
* gcc.dg/compat/vector-1_x.c: New file.
* gcc.dg/compat/vector-1_y.c: New file.
* gcc.dg/compat/vector-2_main.c: New file.
* gcc.dg/compat/vector-2_x.c: New file.
* gcc.dg/compat/vector-2_y.c: New file.
* gcc.dg/compat/fnptr-by-value-1_main.c: New file.
* gcc.dg/compat/fnptr-by-value-1_x.c: New file.
* gcc.dg/compat/fnptr-by-value-1_y.c: New file.

View File

@ -0,0 +1,14 @@
/* Test compatibility of vector types: layout between separately-compiled
modules, parameter passing, and function return. This test uses
vectors of integer values. */
extern void vector_1_x (void);
extern void exit (int);
int fails;
int
main ()
{
vector_1_x ();
exit (0);
}

View File

@ -0,0 +1,34 @@
#include "compat-common.h"
#include "vector-defs.h"
#include "vector-setup.h"
SETUP (8, qi);
SETUP (16, qi);
SETUP (2, hi);
SETUP (4, hi);
SETUP (8, hi);
SETUP (2, si);
SETUP (4, si);
SETUP (1, di);
SETUP (2, di);
void
vector_1_x (void)
{
DEBUG_INIT
CHECK (8, qi);
CHECK (16, qi);
CHECK (2, hi);
CHECK (4, hi);
CHECK (8, hi);
CHECK (2, si);
CHECK (4, si);
CHECK (1, di);
CHECK (2, di);
DEBUG_FINI
if (fails != 0)
abort ();
}

View File

@ -0,0 +1,13 @@
#include "compat-common.h"
#include "vector-defs.h"
#include "vector-check.h"
TEST (8, qi, 101)
TEST (16, qi, 101)
TEST (2, hi, 201)
TEST (4, hi, 202)
TEST (8, hi, 203)
TEST (2, si, 301)
TEST (4, si, 302)
TEST (1, di, 401)
TEST (2, di, 402)

View File

@ -0,0 +1,14 @@
/* Test compatibility of vector types: layout between separately-compiled
modules, parameter passing, and function return. This test uses
vectors of floating points values. */
extern void vector_2_x (void);
extern void exit (int);
int fails;
int
main ()
{
vector_2_x ();
exit (0);
}

View File

@ -0,0 +1,24 @@
#include "compat-common.h"
#include "vector-defs.h"
#include "vector-setup.h"
SETUP (2, sf);
SETUP (4, sf);
SETUP (16, sf);
SETUP (2, df);
void
vector_2_x (void)
{
DEBUG_INIT
CHECK (2, sf);
CHECK (4, sf);
CHECK (16, sf);
CHECK (2, df);
DEBUG_FINI
if (fails != 0)
abort ();
}

View File

@ -0,0 +1,8 @@
#include "compat-common.h"
#include "vector-defs.h"
#include "vector-check.h"
TEST (2, sf, 301.0)
TEST (4, sf, 302.0)
TEST (16, sf, 304.0)
TEST (2, df, 402.0)

View File

@ -0,0 +1,64 @@
#define TEST(NUM,TMODE,VAL) \
extern v##NUM##TMODE g_v##NUM##TMODE; \
extern int g_##TMODE; \
\
extern void pass_v##NUM##TMODE (v##NUM##TMODE); \
extern v##NUM##TMODE return_v##NUM##TMODE (void); \
\
void \
checkp_##NUM##TMODE (TMODE *p) \
{ \
int i; \
for (i = 0; i < NUM; i++) \
{ \
if (p[i] != g_##TMODE + i) \
DEBUG_CHECK; \
} \
} \
\
void \
checkg_##NUM##TMODE (void) \
{ \
u##NUM##TMODE u; \
TMODE *p = u.a; \
\
u.v = g_v##NUM##TMODE; \
checkp_##NUM##TMODE (p); \
} \
\
void \
init_##NUM##TMODE (void) \
{ \
int i; \
u##NUM##TMODE u; \
g_##TMODE = VAL; \
for (i = 0; i < NUM; i++) \
u.a[i] = VAL + i; \
g_v##NUM##TMODE = u.v; \
} \
\
void \
test_v##NUM##TMODE (void) \
{ \
v##NUM##TMODE v; \
u##NUM##TMODE u; \
TMODE *p = u.a; \
\
DEBUG_FPUTS ("v" #NUM #TMODE); \
DEBUG_NL; \
DEBUG_FPUTS (" global variable:"); \
init_##NUM##TMODE (); \
checkg_##NUM##TMODE (); \
DEBUG_NL; \
DEBUG_FPUTS (" pass global variable:"); \
pass_v##NUM##TMODE (g_v##NUM##TMODE); \
DEBUG_NL; \
DEBUG_FPUTS (" pass local variable:"); \
v = g_v##NUM##TMODE; \
pass_v##NUM##TMODE (v); \
DEBUG_NL; \
DEBUG_FPUTS (" function return:"); \
u.v = return_v##NUM##TMODE (); \
checkp_##NUM##TMODE (p); \
DEBUG_NL; \
}

View File

@ -0,0 +1,46 @@
/* This includes all of the vector modes that are recognized by
c_common_type_for_mode, grouped by base mode. */
typedef int __attribute__((mode(QI))) qi;
typedef int __attribute__((mode(V8QI))) v8qi;
typedef int __attribute__((mode(V16QI))) v16qi;
typedef union U8QI { v8qi v; qi a[8]; } u8qi;
typedef union U16QI { v16qi v; qi a[16]; } u16qi;
typedef int __attribute__((mode(HI))) hi;
typedef int __attribute__((mode(V2HI))) v2hi;
typedef int __attribute__((mode(V4HI))) v4hi;
typedef int __attribute__((mode(V8HI))) v8hi;
typedef union U2HI { v2hi v; hi a[2]; } u2hi;
typedef union U4HI { v4hi v; hi a[4]; } u4hi;
typedef union U8HI { v8hi v; hi a[8]; } u8hi;
typedef int __attribute__((mode(SI))) si;
typedef int __attribute__((mode(V2SI))) v2si;
typedef int __attribute__((mode(V4SI))) v4si;
typedef union U2SI { v2si v; si a[2]; } u2si;
typedef union U4SI { v4si v; si a[4]; } u4si;
typedef int __attribute__((mode(DI))) di;
typedef int __attribute__((mode(V1DI))) v1di;
typedef int __attribute__((mode(V2DI))) v2di;
typedef union U1DI { v1di v; di a[1]; } u1di;
typedef union U2DI { v2di v; di a[2]; } u2di;
typedef float __attribute__((mode(SF))) sf;
typedef float __attribute__((mode(V2SF))) v2sf;
typedef float __attribute__((mode(V4SF))) v4sf;
typedef float __attribute__((mode(V16SF))) v16sf;
typedef union U2SF { v2sf v; sf a[2]; } u2sf;
typedef union U4SF { v4sf v; sf a[4]; } u4sf;
typedef union U16SF { v16sf v; sf a[16]; } u16sf;
typedef float __attribute__((mode(DF))) df;
typedef float __attribute__((mode(V2DF))) v2df;
typedef union U2DF { v2df v; df a[2]; } u2df;

View File

@ -0,0 +1,28 @@
#define SETUP(NUM,TMODE) \
v##NUM##TMODE g_v##NUM##TMODE; \
TMODE g_##TMODE; \
\
extern void test_v##NUM##TMODE (void); \
extern void checkp_##NUM##TMODE (TMODE *); \
\
void \
pass_v##NUM##TMODE (v##NUM##TMODE v) \
{ \
u##NUM##TMODE u; \
int j; \
TMODE a[NUM]; \
\
u.v = v; \
for (j = 0; j < NUM; j++) \
a[j] = u.a[j]; \
checkp_##NUM##TMODE (a); \
} \
\
v##NUM##TMODE \
return_v##NUM##TMODE (void) \
{ \
return g_v##NUM##TMODE; \
}
#define CHECK(NUM,TMODE) \
test_v##NUM##TMODE()