1b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
2b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define FULLTXT 1
3b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define exec_op glue(exec_, OP)
5b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define exec_opl glue(glue(exec_, OP), l)
6b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define exec_opw glue(glue(exec_, OP), w)
7b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define exec_opb glue(glue(exec_, OP), b)
8b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
9b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define EXECOP2(size, res, s1, flags) \
10b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    asm ("push %4\n\t"\
11b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         "popf\n\t"\
12b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         stringify(OP) size " %" size "2, %" size "0\n\t" \
13b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         "pushf\n\t"\
14b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         "popl %1\n\t"\
15b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         : "=q" (res), "=g" (flags)\
16b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         : "q" (s1), "0" (res), "1" (flags));
17b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
18b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define EXECOP1(size, res, flags) \
19b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    asm ("push %3\n\t"\
20b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         "popf\n\t"\
21b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         stringify(OP) size " %" size "0\n\t" \
22b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         "pushf\n\t"\
23b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         "popl %1\n\t"\
24b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         : "=q" (res), "=g" (flags)\
25b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov         : "0" (res), "1" (flags));
26b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
27b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#ifdef OP1
28b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovinline void exec_opl(int s0, int s1, int iflags)
29b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
30b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    int res, flags;
31b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    res = s0;
32b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    flags = iflags;
33b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    EXECOP1("", res, flags);
34b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    if (FULLTXT)
35b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov       printf("%-6s A=%08x R=%08x CCIN=%04x CC=%04x\n",
36b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov              stringify(OP) "l", s0, res, iflags, flags & CC_MASK);
37b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    else
38b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov       printf("%08x %04x %04x\n",
39b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov               res, iflags, flags & CC_MASK);
40b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
41b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
42b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovinline void exec_opw(int s0, int s1, int iflags)
43b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
44b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    int res, flags;
45b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    res = s0;
46b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    flags = iflags;
47b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    EXECOP1("w", res, flags);
48b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    if (FULLTXT)
49b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov       printf("%-6s A=%08x R=%08x CCIN=%04x CC=%04x\n",
50b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov              stringify(OP) "w", s0, res, iflags, flags & CC_MASK);
51b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    else
52b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov       printf("%08x %04x %04x\n",
53b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov              res, iflags, flags & CC_MASK);
54b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
55b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
56b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovinline void exec_opb(int s0, int s1, int iflags)
57b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
58b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    int res, flags;
59b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    res = s0;
60b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    flags = iflags;
61b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    EXECOP1("b", res, flags);
62b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    if (FULLTXT)
63b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov       printf("%-6s A=%08x R=%08x CCIN=%04x CC=%04x\n",
64b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov              stringify(OP) "b", s0, res, iflags, flags & CC_MASK);
65b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    else
66b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov       printf("%08x %04x %04x\n",
67b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov              res, iflags, flags & CC_MASK);
68b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
69b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
70b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#else
71b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovinline void exec_opl(int s0, int s1, int iflags)
72b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
73b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    int res, flags;
74b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    res = s0;
75b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    flags = iflags;
76b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    EXECOP2("", res, s1, flags);
77b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    if (FULLTXT)
78b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov       printf("%-6s A=%08x B=%08x R=%08x CCIN=%04x CC=%04x\n",
79b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov              stringify(OP) "l", s0, s1, res, iflags, flags & CC_MASK);
80b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    else
81b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov       printf("%08x %04x %04x\n",
82b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov              res, iflags, flags & CC_MASK);
83b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
84b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
85b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovinline void exec_opw(int s0, int s1, int iflags)
86b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
87b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    int res, flags;
88b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    res = s0;
89b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    flags = iflags;
90b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    EXECOP2("w", res, s1, flags);
91b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    if (FULLTXT)
92b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov       printf("%-6s A=%08x B=%08x R=%08x CCIN=%04x CC=%04x\n",
93b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov              stringify(OP) "w", s0, s1, res, iflags, flags & CC_MASK);
94b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    else
95b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov       printf("%08x %04x %04x\n",
96b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov              res, iflags, flags & CC_MASK);
97b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
98b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
99b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovinline void exec_opb(int s0, int s1, int iflags)
100b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
101b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    int res, flags;
102b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    res = s0;
103b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    flags = iflags;
104b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    EXECOP2("b", res, s1, flags);
105b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    if (FULLTXT)
106b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov       printf("%-6s A=%08x B=%08x R=%08x CCIN=%04x CC=%04x\n",
107b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov              stringify(OP) "b", s0, s1, res, iflags, flags & CC_MASK);
108b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    else
109b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov       printf("%08x %04x %04x\n",
110b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov              res, iflags, flags & CC_MASK);
111b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
112b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif
113b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
114b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovvoid exec_op(int s0, int s1)
115b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
116b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if 1
117b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov  int o,s,z,a,c,p,flags_in;
118b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov  for (o = 0; o < 2; o++) {
119b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov  for (s = 0; s < 2; s++) {
120b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov  for (z = 0; z < 2; z++) {
121b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov  for (a = 0; a < 2; a++) {
122b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov  for (c = 0; c < 2; c++) {
123b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov  for (p = 0; p < 2; p++) {
124b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
125b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    flags_in = (o ? CC_O : 0)
126b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov             | (s ? CC_S : 0)
127b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov             | (z ? CC_Z : 0)
128b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov             | (a ? CC_A : 0)
129b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov             | (c ? CC_C : 0)
130b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov             | (p ? CC_P : 0);
131b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    exec_opl(s0, s1, flags_in);
132b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    exec_opw(s0, s1, flags_in);
133b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    exec_opb(s0, s1, flags_in);
134b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov  }}}}}}
135b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#else
136b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    exec_opl(s0, s1, 0);
137b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    exec_opw(s0, s1, 0);
138b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    exec_opb(s0, s1, 0);
139b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    exec_opl(s0, s1, CC_C);
140b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    exec_opw(s0, s1, CC_C);
141b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    exec_opb(s0, s1, CC_C);
142b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif
143b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
144b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
145b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovvoid glue(test_, OP)(void)
146b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
147b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define NVALS 57
148b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   int i, j;
149b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov   static unsigned int val[NVALS]
150b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    = { 0x00, 0x01, 0x02, 0x03,
151b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        0x3F, 0x40, 0x41,
152b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        0x7E, 0x7F, 0x80, 0x81, 0x82,
153b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        0xBF, 0xC0, 0xC1,
154b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        0xFC, 0xFD, 0xFE, 0xFF,
155b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
156b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        0xFF00, 0xFF01, 0xFF02, 0xFF03,
157b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        0xFF3F, 0xFF40, 0xFF41,
158b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        0xFF7E, 0xFF7F, 0xFF80, 0xFF81, 0xFF82,
159b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        0xFFBF, 0xFFC0, 0xFFC1,
160b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        0xFFFC, 0xFFFD, 0xFFFE, 0xFFFF,
161b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
162b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        0xFFFFFF00, 0xFFFFFF01, 0xFFFFFF02, 0xFFFFFF03,
163b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        0xFFFFFF3F, 0xFFFFFF40, 0xFFFFFF41,
164b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        0xFFFFFF7E, 0xFFFFFF7F, 0xFFFFFF80, 0xFFFFFF81, 0xFFFFFF82,
165b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        0xFFFFFFBF, 0xFFFFFFC0, 0xFFFFFFC1,
166b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        0xFFFFFFFC, 0xFFFFFFFD, 0xFFFFFFFE, 0xFFFFFFFF
167b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      };
168b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
169b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    exec_op(0x12345678, 0x812FADA);
170b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    exec_op(0x12341, 0x12341);
171b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    exec_op(0x12341, -0x12341);
172b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    exec_op(0xffffffff, 0);
173b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    exec_op(0xffffffff, -1);
174b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    exec_op(0xffffffff, 1);
175b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    exec_op(0xffffffff, 2);
176b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    exec_op(0x7fffffff, 0);
177b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    exec_op(0x7fffffff, 1);
178b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    exec_op(0x7fffffff, -1);
179b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    exec_op(0x80000000, -1);
180b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    exec_op(0x80000000, 1);
181b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    exec_op(0x80000000, -2);
182b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    exec_op(0x12347fff, 0);
183b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    exec_op(0x12347fff, 1);
184b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    exec_op(0x12347fff, -1);
185b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    exec_op(0x12348000, -1);
186b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    exec_op(0x12348000, 1);
187b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    exec_op(0x12348000, -2);
188b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    exec_op(0x12347f7f, 0);
189b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    exec_op(0x12347f7f, 1);
190b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    exec_op(0x12347f7f, -1);
191b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    exec_op(0x12348080, -1);
192b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    exec_op(0x12348080, 1);
193b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    exec_op(0x12348080, -2);
194b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
195b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if TEST_INTEGER_VERBOSE
196b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    if (1)
197b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov    for (i = 0; i < NVALS; i++)
198b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov      for (j = 0; j < NVALS; j++)
199b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	exec_op(val[i], val[j]);
200b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#endif
201b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
202b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#undef NVALS
203b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
204b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
205b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovvoid *glue(_test_, OP) __init_call = glue(test_, OP);
206b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
207b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#undef OP
208b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#undef OP_CC
209b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
210b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#undef FULLTXT
211