1#include <stdarg.h>
2
3#include "compat-common.h"
4
5#ifdef SKIP_VA
6const int test_va = 0;
7#else
8const int test_va = 1;
9#endif
10
11typedef struct { char c; } Sc;
12typedef struct { short s; } Ss;
13typedef struct { int i; } Si;
14typedef struct { short s; char c; } Ssc;
15typedef struct { int i; short s; } Sis;
16typedef struct { char c; short s; int i; } Scsi;
17typedef struct { char c; int i; short s; } Scis;
18
19void initSc (Sc *p, int i) { p->c = i/16; }
20void initSs (Ss *p, int i) { p->s = i; }
21void initSi (Si *p, int i) { p->i = i; }
22void initSsc (Ssc *p, int i) { p->s = i; p->c = (i/16)+1; }
23void initSis (Sis *p, int i) { p->i = i; p->s = i+1; }
24void initScsi (Scsi *p, int i) { p->c = i/16; p->s = i+1; p->i = i+2; }
25void initScis (Scis *p, int i) { p->c = i/16; p->i = i+1; p->s = i+2; }
26
27#define T(N, TYPE)						\
28struct S##TYPE##N { TYPE i[N]; };				\
29								\
30extern struct S##TYPE##N g1s##TYPE##N, g2s##TYPE##N;		\
31extern struct S##TYPE##N g3s##TYPE##N, g4s##TYPE##N;		\
32extern struct S##TYPE##N g5s##TYPE##N, g6s##TYPE##N;		\
33extern struct S##TYPE##N g7s##TYPE##N, g8s##TYPE##N;		\
34extern struct S##TYPE##N g9s##TYPE##N, g10s##TYPE##N;		\
35extern struct S##TYPE##N g11s##TYPE##N, g12s##TYPE##N;		\
36extern struct S##TYPE##N g13s##TYPE##N, g14s##TYPE##N;		\
37extern struct S##TYPE##N g15s##TYPE##N, g16s##TYPE##N;		\
38								\
39extern void check##TYPE (TYPE x, int i);			\
40extern void							\
41check##TYPE##N (struct S##TYPE##N *p, int i);			\
42								\
43void								\
44checkg##TYPE##N (void)						\
45{								\
46  check##TYPE##N ( &g1s##TYPE##N,  1*16);			\
47  check##TYPE##N ( &g2s##TYPE##N,  2*16);			\
48  check##TYPE##N ( &g3s##TYPE##N,  3*16);			\
49  check##TYPE##N ( &g4s##TYPE##N,  4*16);			\
50  check##TYPE##N ( &g5s##TYPE##N,  5*16);			\
51  check##TYPE##N ( &g6s##TYPE##N,  6*16);			\
52  check##TYPE##N ( &g7s##TYPE##N,  7*16);			\
53  check##TYPE##N ( &g8s##TYPE##N,  8*16);			\
54  check##TYPE##N ( &g9s##TYPE##N,  9*16);			\
55  check##TYPE##N (&g10s##TYPE##N, 10*16);			\
56  check##TYPE##N (&g11s##TYPE##N, 11*16);			\
57  check##TYPE##N (&g12s##TYPE##N, 12*16);			\
58  check##TYPE##N (&g13s##TYPE##N, 13*16);			\
59  check##TYPE##N (&g14s##TYPE##N, 14*16);			\
60  check##TYPE##N (&g15s##TYPE##N, 15*16);			\
61  check##TYPE##N (&g16s##TYPE##N, 16*16);			\
62}								\
63								\
64void								\
65test##TYPE##N (struct S##TYPE##N s1, struct S##TYPE##N s2,	\
66	       struct S##TYPE##N s3, struct S##TYPE##N s4,	\
67	       struct S##TYPE##N s5, struct S##TYPE##N s6,	\
68	       struct S##TYPE##N s7, struct S##TYPE##N s8,	\
69	       struct S##TYPE##N s9, struct S##TYPE##N s10,	\
70	       struct S##TYPE##N s11, struct S##TYPE##N s12,	\
71	       struct S##TYPE##N s13, struct S##TYPE##N s14,	\
72	       struct S##TYPE##N s15, struct S##TYPE##N s16)	\
73{								\
74  check##TYPE##N (&s1, 1*16);					\
75  check##TYPE##N (&s2, 2*16);					\
76  check##TYPE##N (&s3, 3*16);					\
77  check##TYPE##N (&s4, 4*16);					\
78  check##TYPE##N (&s5, 5*16);					\
79  check##TYPE##N (&s6, 6*16);					\
80  check##TYPE##N (&s7, 7*16);					\
81  check##TYPE##N (&s8, 8*16);					\
82  check##TYPE##N (&s9, 9*16);					\
83  check##TYPE##N (&s10, 10*16);					\
84  check##TYPE##N (&s11, 11*16);					\
85  check##TYPE##N (&s12, 12*16);					\
86  check##TYPE##N (&s13, 13*16);					\
87  check##TYPE##N (&s14, 14*16);					\
88  check##TYPE##N (&s15, 15*16);					\
89  check##TYPE##N (&s16, 16*16);					\
90}								\
91								\
92void								\
93testva##TYPE##N (int n, ...)					\
94{								\
95  int i;							\
96  va_list ap;							\
97  if (test_va)							\
98    {								\
99      va_start (ap, n);						\
100      for (i = 0; i < n; i++)					\
101	{							\
102	  struct S##TYPE##N t = va_arg (ap, struct S##TYPE##N);	\
103	  check##TYPE##N (&t, (i+1)*16);			\
104	}							\
105      va_end (ap);						\
106    }								\
107}
108
109#ifndef SKIP_ZERO_ARRAY
110T(0, Scsi)
111#endif
112T(1, Scsi)
113T(2, Scsi)
114T(3, Scsi)
115T(4, Scsi)
116T(5, Scsi)
117T(6, Scsi)
118T(7, Scsi)
119T(8, Scsi)
120T(9, Scsi)
121T(10, Scsi)
122T(11, Scsi)
123T(12, Scsi)
124T(13, Scsi)
125T(14, Scsi)
126T(15, Scsi)
127#ifndef SKIP_ZERO_ARRAY
128T(0, Scis)
129#endif
130T(1, Scis)
131T(2, Scis)
132T(3, Scis)
133T(4, Scis)
134T(5, Scis)
135T(6, Scis)
136T(7, Scis)
137T(8, Scis)
138T(9, Scis)
139T(10, Scis)
140T(11, Scis)
141T(12, Scis)
142T(13, Scis)
143T(14, Scis)
144T(15, Scis)
145