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