OSDN Git Service

2004-05-20 H.J. Lu <hongjiu.lu@intel.com>
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.dg / compat / vector-check.h
1 #define TEST(NUM,TMODE,VAL)                             \
2 extern v##NUM##TMODE g_v##NUM##TMODE;                   \
3 extern TMODE g_##TMODE;                                 \
4                                                         \
5 extern void pass_v##NUM##TMODE (v##NUM##TMODE);         \
6 extern v##NUM##TMODE return_v##NUM##TMODE (void);       \
7                                                         \
8 void                                                    \
9 checkp_##NUM##TMODE (TMODE *p)                          \
10 {                                                       \
11   int i;                                                \
12   for (i = 0; i < NUM; i++)                             \
13     {                                                   \
14       if (p[i] != g_##TMODE + i)                        \
15         DEBUG_CHECK;                                    \
16     }                                                   \
17 }                                                       \
18                                                         \
19 void                                                    \
20 checkg_##NUM##TMODE (void)                              \
21 {                                                       \
22   u##NUM##TMODE u;                                      \
23   TMODE *p = u.a;                                       \
24                                                         \
25   u.v = g_v##NUM##TMODE;                                \
26   checkp_##NUM##TMODE (p);                              \
27 }                                                       \
28                                                         \
29 void                                                    \
30 init_##NUM##TMODE (void)                                \
31 {                                                       \
32   int i;                                                \
33   u##NUM##TMODE u;                                      \
34   g_##TMODE = VAL;                                      \
35   for (i = 0; i < NUM; i++)                             \
36     u.a[i] = VAL + i;                                   \
37   g_v##NUM##TMODE = u.v;                                \
38 }                                                       \
39                                                         \
40 void                                                    \
41 test_v##NUM##TMODE (void)                               \
42 {                                                       \
43   v##NUM##TMODE v;                                      \
44   u##NUM##TMODE u;                                      \
45   TMODE *p = u.a;                                       \
46                                                         \
47   DEBUG_FPUTS ("v" #NUM #TMODE);                        \
48   DEBUG_NL;                                             \
49   DEBUG_FPUTS ("  global variable:");                   \
50   init_##NUM##TMODE ();                                 \
51   checkg_##NUM##TMODE ();                               \
52   DEBUG_NL;                                             \
53   DEBUG_FPUTS ("  pass global variable:");              \
54   pass_v##NUM##TMODE (g_v##NUM##TMODE);                 \
55   DEBUG_NL;                                             \
56   DEBUG_FPUTS ("  pass local variable:");               \
57   v = g_v##NUM##TMODE;                                  \
58   pass_v##NUM##TMODE (v);                               \
59   DEBUG_NL;                                             \
60   DEBUG_FPUTS ("  function return:");                   \
61   u.v = return_v##NUM##TMODE ();                        \
62   checkp_##NUM##TMODE (p);                              \
63   DEBUG_NL;                                             \
64 }