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