Statistics
| Branch: | Revision:

root / tests / test-i386.c @ 4b74fe1f

History | View | Annotate | Download (8.5 kB)

1 4d1135e4 bellard
#include <stdlib.h>
2 4d1135e4 bellard
#include <stdio.h>
3 4d1135e4 bellard
#include <math.h>
4 4d1135e4 bellard
5 4d1135e4 bellard
#define xglue(x, y) x ## y
6 4d1135e4 bellard
#define glue(x, y) xglue(x, y)
7 4d1135e4 bellard
#define stringify(s)        tostring(s)
8 4d1135e4 bellard
#define tostring(s)        #s
9 4d1135e4 bellard
10 4d1135e4 bellard
#define CC_C           0x0001
11 4d1135e4 bellard
#define CC_P         0x0004
12 4d1135e4 bellard
#define CC_A        0x0010
13 4d1135e4 bellard
#define CC_Z        0x0040
14 4d1135e4 bellard
#define CC_S    0x0080
15 4d1135e4 bellard
#define CC_O    0x0800
16 4d1135e4 bellard
17 4d1135e4 bellard
#define __init_call        __attribute__ ((unused,__section__ (".initcall.init")))
18 4d1135e4 bellard
19 4d1135e4 bellard
static void *call_start __init_call = NULL;
20 4d1135e4 bellard
21 4b74fe1f bellard
#define CC_MASK (CC_C | CC_P | CC_Z | CC_S | CC_O | CC_A)
22 4b74fe1f bellard
23 4d1135e4 bellard
#define OP add
24 4d1135e4 bellard
#include "test-i386.h"
25 4d1135e4 bellard
26 4d1135e4 bellard
#define OP sub
27 4d1135e4 bellard
#include "test-i386.h"
28 4d1135e4 bellard
29 4d1135e4 bellard
#define OP xor
30 4d1135e4 bellard
#include "test-i386.h"
31 4d1135e4 bellard
32 4d1135e4 bellard
#define OP and
33 4d1135e4 bellard
#include "test-i386.h"
34 4d1135e4 bellard
35 4d1135e4 bellard
#define OP or
36 4d1135e4 bellard
#include "test-i386.h"
37 4d1135e4 bellard
38 4d1135e4 bellard
#define OP cmp
39 4d1135e4 bellard
#include "test-i386.h"
40 4d1135e4 bellard
41 4d1135e4 bellard
#define OP adc
42 4d1135e4 bellard
#define OP_CC
43 4d1135e4 bellard
#include "test-i386.h"
44 4d1135e4 bellard
45 4d1135e4 bellard
#define OP sbb
46 4d1135e4 bellard
#define OP_CC
47 4d1135e4 bellard
#include "test-i386.h"
48 4d1135e4 bellard
49 4d1135e4 bellard
#define OP inc
50 4d1135e4 bellard
#define OP_CC
51 4d1135e4 bellard
#define OP1
52 4d1135e4 bellard
#include "test-i386.h"
53 4d1135e4 bellard
54 4d1135e4 bellard
#define OP dec
55 4d1135e4 bellard
#define OP_CC
56 4d1135e4 bellard
#define OP1
57 4d1135e4 bellard
#include "test-i386.h"
58 4d1135e4 bellard
59 4d1135e4 bellard
#define OP neg
60 4d1135e4 bellard
#define OP_CC
61 4d1135e4 bellard
#define OP1
62 4d1135e4 bellard
#include "test-i386.h"
63 4d1135e4 bellard
64 4d1135e4 bellard
#define OP not
65 4d1135e4 bellard
#define OP_CC
66 4d1135e4 bellard
#define OP1
67 4d1135e4 bellard
#include "test-i386.h"
68 4d1135e4 bellard
69 4b74fe1f bellard
#undef CC_MASK
70 4b74fe1f bellard
#define CC_MASK (CC_C | CC_P | CC_Z | CC_S | CC_O)
71 4b74fe1f bellard
72 379ca80d bellard
#define OP shl
73 379ca80d bellard
#include "test-i386-shift.h"
74 379ca80d bellard
75 379ca80d bellard
#define OP shr
76 379ca80d bellard
#include "test-i386-shift.h"
77 379ca80d bellard
78 379ca80d bellard
#define OP sar
79 379ca80d bellard
#include "test-i386-shift.h"
80 379ca80d bellard
81 379ca80d bellard
#define OP rol
82 379ca80d bellard
#include "test-i386-shift.h"
83 379ca80d bellard
84 379ca80d bellard
#define OP ror
85 379ca80d bellard
#include "test-i386-shift.h"
86 379ca80d bellard
87 379ca80d bellard
#define OP rcr
88 379ca80d bellard
#define OP_CC
89 379ca80d bellard
#include "test-i386-shift.h"
90 379ca80d bellard
91 379ca80d bellard
#define OP rcl
92 379ca80d bellard
#define OP_CC
93 379ca80d bellard
#include "test-i386-shift.h"
94 379ca80d bellard
95 379ca80d bellard
96 4d1135e4 bellard
/* lea test (modrm support) */
97 4d1135e4 bellard
#define TEST_LEA(STR)\
98 4d1135e4 bellard
{\
99 4d1135e4 bellard
    asm("leal " STR ", %0"\
100 4d1135e4 bellard
        : "=r" (res)\
101 4d1135e4 bellard
        : "a" (eax), "b" (ebx), "c" (ecx), "d" (edx), "S" (esi), "D" (edi));\
102 4d1135e4 bellard
    printf("lea %s = %08x\n", STR, res);\
103 4d1135e4 bellard
}
104 4d1135e4 bellard
105 4d1135e4 bellard
#define TEST_LEA16(STR)\
106 4d1135e4 bellard
{\
107 4d1135e4 bellard
    asm(".code16 ; .byte 0x67 ; leal " STR ", %0 ; .code32"\
108 4d1135e4 bellard
        : "=wq" (res)\
109 4d1135e4 bellard
        : "a" (eax), "b" (ebx), "c" (ecx), "d" (edx), "S" (esi), "D" (edi));\
110 4d1135e4 bellard
    printf("lea %s = %08x\n", STR, res);\
111 4d1135e4 bellard
}
112 4d1135e4 bellard
113 4d1135e4 bellard
114 4d1135e4 bellard
void test_lea(void)
115 4d1135e4 bellard
{
116 4d1135e4 bellard
    int eax, ebx, ecx, edx, esi, edi, res;
117 4d1135e4 bellard
    eax = 0x0001;
118 4d1135e4 bellard
    ebx = 0x0002;
119 4d1135e4 bellard
    ecx = 0x0004;
120 4d1135e4 bellard
    edx = 0x0008;
121 4d1135e4 bellard
    esi = 0x0010;
122 4d1135e4 bellard
    edi = 0x0020;
123 4d1135e4 bellard
124 4d1135e4 bellard
    TEST_LEA("0x4000");
125 4d1135e4 bellard
126 4d1135e4 bellard
    TEST_LEA("(%%eax)");
127 4d1135e4 bellard
    TEST_LEA("(%%ebx)");
128 4d1135e4 bellard
    TEST_LEA("(%%ecx)");
129 4d1135e4 bellard
    TEST_LEA("(%%edx)");
130 4d1135e4 bellard
    TEST_LEA("(%%esi)");
131 4d1135e4 bellard
    TEST_LEA("(%%edi)");
132 4d1135e4 bellard
133 4d1135e4 bellard
    TEST_LEA("0x40(%%eax)");
134 4d1135e4 bellard
    TEST_LEA("0x40(%%ebx)");
135 4d1135e4 bellard
    TEST_LEA("0x40(%%ecx)");
136 4d1135e4 bellard
    TEST_LEA("0x40(%%edx)");
137 4d1135e4 bellard
    TEST_LEA("0x40(%%esi)");
138 4d1135e4 bellard
    TEST_LEA("0x40(%%edi)");
139 4d1135e4 bellard
140 4d1135e4 bellard
    TEST_LEA("0x4000(%%eax)");
141 4d1135e4 bellard
    TEST_LEA("0x4000(%%ebx)");
142 4d1135e4 bellard
    TEST_LEA("0x4000(%%ecx)");
143 4d1135e4 bellard
    TEST_LEA("0x4000(%%edx)");
144 4d1135e4 bellard
    TEST_LEA("0x4000(%%esi)");
145 4d1135e4 bellard
    TEST_LEA("0x4000(%%edi)");
146 4d1135e4 bellard
147 4d1135e4 bellard
    TEST_LEA("(%%eax, %%ecx)");
148 4d1135e4 bellard
    TEST_LEA("(%%ebx, %%edx)");
149 4d1135e4 bellard
    TEST_LEA("(%%ecx, %%ecx)");
150 4d1135e4 bellard
    TEST_LEA("(%%edx, %%ecx)");
151 4d1135e4 bellard
    TEST_LEA("(%%esi, %%ecx)");
152 4d1135e4 bellard
    TEST_LEA("(%%edi, %%ecx)");
153 4d1135e4 bellard
154 4d1135e4 bellard
    TEST_LEA("0x40(%%eax, %%ecx)");
155 4d1135e4 bellard
    TEST_LEA("0x4000(%%ebx, %%edx)");
156 4d1135e4 bellard
157 4d1135e4 bellard
    TEST_LEA("(%%ecx, %%ecx, 2)");
158 4d1135e4 bellard
    TEST_LEA("(%%edx, %%ecx, 4)");
159 4d1135e4 bellard
    TEST_LEA("(%%esi, %%ecx, 8)");
160 4d1135e4 bellard
161 4d1135e4 bellard
    TEST_LEA("(,%%eax, 2)");
162 4d1135e4 bellard
    TEST_LEA("(,%%ebx, 4)");
163 4d1135e4 bellard
    TEST_LEA("(,%%ecx, 8)");
164 4d1135e4 bellard
165 4d1135e4 bellard
    TEST_LEA("0x40(,%%eax, 2)");
166 4d1135e4 bellard
    TEST_LEA("0x40(,%%ebx, 4)");
167 4d1135e4 bellard
    TEST_LEA("0x40(,%%ecx, 8)");
168 4d1135e4 bellard
169 4d1135e4 bellard
170 4d1135e4 bellard
    TEST_LEA("-10(%%ecx, %%ecx, 2)");
171 4d1135e4 bellard
    TEST_LEA("-10(%%edx, %%ecx, 4)");
172 4d1135e4 bellard
    TEST_LEA("-10(%%esi, %%ecx, 8)");
173 4d1135e4 bellard
174 4d1135e4 bellard
    TEST_LEA("0x4000(%%ecx, %%ecx, 2)");
175 4d1135e4 bellard
    TEST_LEA("0x4000(%%edx, %%ecx, 4)");
176 4d1135e4 bellard
    TEST_LEA("0x4000(%%esi, %%ecx, 8)");
177 4d1135e4 bellard
178 4d1135e4 bellard
    /* limited 16 bit addressing test */
179 4d1135e4 bellard
    TEST_LEA16("0x4000");
180 4d1135e4 bellard
    TEST_LEA16("(%%bx)");
181 4d1135e4 bellard
    TEST_LEA16("(%%si)");
182 4d1135e4 bellard
    TEST_LEA16("(%%di)");
183 4d1135e4 bellard
    TEST_LEA16("0x40(%%bx)");
184 4d1135e4 bellard
    TEST_LEA16("0x40(%%si)");
185 4d1135e4 bellard
    TEST_LEA16("0x40(%%di)");
186 4d1135e4 bellard
    TEST_LEA16("0x4000(%%bx)");
187 4d1135e4 bellard
    TEST_LEA16("0x4000(%%si)");
188 4d1135e4 bellard
    TEST_LEA16("(%%bx,%%si)");
189 4d1135e4 bellard
    TEST_LEA16("(%%bx,%%di)");
190 4d1135e4 bellard
    TEST_LEA16("0x40(%%bx,%%si)");
191 4d1135e4 bellard
    TEST_LEA16("0x40(%%bx,%%di)");
192 4d1135e4 bellard
    TEST_LEA16("0x4000(%%bx,%%si)");
193 4d1135e4 bellard
    TEST_LEA16("0x4000(%%bx,%%di)");
194 4d1135e4 bellard
}
195 4d1135e4 bellard
196 4d1135e4 bellard
#define TEST_JCC(JCC, v1, v2)\
197 4d1135e4 bellard
{\
198 4d1135e4 bellard
    asm("movl $1, %0\n\t"\
199 4d1135e4 bellard
        "cmpl %2, %1\n\t"\
200 4d1135e4 bellard
        JCC " 1f\n\t"\
201 4d1135e4 bellard
        "movl $0, %0\n\t"\
202 4d1135e4 bellard
        "1:\n\t"\
203 4d1135e4 bellard
        : "=r" (res)\
204 4d1135e4 bellard
        : "r" (v1), "r" (v2));\
205 4d1135e4 bellard
    printf("%-10s %d\n", JCC, res);\
206 4d1135e4 bellard
}
207 4d1135e4 bellard
208 4d1135e4 bellard
/* various jump tests */
209 4d1135e4 bellard
void test_jcc(void)
210 4d1135e4 bellard
{
211 4d1135e4 bellard
    int res;
212 4d1135e4 bellard
213 4d1135e4 bellard
    TEST_JCC("jne", 1, 1);
214 4d1135e4 bellard
    TEST_JCC("jne", 1, 0);
215 4d1135e4 bellard
216 4d1135e4 bellard
    TEST_JCC("je", 1, 1);
217 4d1135e4 bellard
    TEST_JCC("je", 1, 0);
218 4d1135e4 bellard
219 4d1135e4 bellard
    TEST_JCC("jl", 1, 1);
220 4d1135e4 bellard
    TEST_JCC("jl", 1, 0);
221 4d1135e4 bellard
    TEST_JCC("jl", 1, -1);
222 4d1135e4 bellard
223 4d1135e4 bellard
    TEST_JCC("jle", 1, 1);
224 4d1135e4 bellard
    TEST_JCC("jle", 1, 0);
225 4d1135e4 bellard
    TEST_JCC("jle", 1, -1);
226 4d1135e4 bellard
227 4d1135e4 bellard
    TEST_JCC("jge", 1, 1);
228 4d1135e4 bellard
    TEST_JCC("jge", 1, 0);
229 4d1135e4 bellard
    TEST_JCC("jge", -1, 1);
230 4d1135e4 bellard
231 4d1135e4 bellard
    TEST_JCC("jg", 1, 1);
232 4d1135e4 bellard
    TEST_JCC("jg", 1, 0);
233 4d1135e4 bellard
    TEST_JCC("jg", 1, -1);
234 4d1135e4 bellard
235 4d1135e4 bellard
    TEST_JCC("jb", 1, 1);
236 4d1135e4 bellard
    TEST_JCC("jb", 1, 0);
237 4d1135e4 bellard
    TEST_JCC("jb", 1, -1);
238 4d1135e4 bellard
239 4d1135e4 bellard
    TEST_JCC("jbe", 1, 1);
240 4d1135e4 bellard
    TEST_JCC("jbe", 1, 0);
241 4d1135e4 bellard
    TEST_JCC("jbe", 1, -1);
242 4d1135e4 bellard
243 4d1135e4 bellard
    TEST_JCC("jae", 1, 1);
244 4d1135e4 bellard
    TEST_JCC("jae", 1, 0);
245 4d1135e4 bellard
    TEST_JCC("jae", 1, -1);
246 4d1135e4 bellard
247 4d1135e4 bellard
    TEST_JCC("ja", 1, 1);
248 4d1135e4 bellard
    TEST_JCC("ja", 1, 0);
249 4d1135e4 bellard
    TEST_JCC("ja", 1, -1);
250 4d1135e4 bellard
251 4d1135e4 bellard
252 4d1135e4 bellard
    TEST_JCC("jp", 1, 1);
253 4d1135e4 bellard
    TEST_JCC("jp", 1, 0);
254 4d1135e4 bellard
255 4d1135e4 bellard
    TEST_JCC("jnp", 1, 1);
256 4d1135e4 bellard
    TEST_JCC("jnp", 1, 0);
257 4d1135e4 bellard
258 4d1135e4 bellard
    TEST_JCC("jo", 0x7fffffff, 0);
259 4d1135e4 bellard
    TEST_JCC("jo", 0x7fffffff, -1);
260 4d1135e4 bellard
261 4d1135e4 bellard
    TEST_JCC("jno", 0x7fffffff, 0);
262 4d1135e4 bellard
    TEST_JCC("jno", 0x7fffffff, -1);
263 4d1135e4 bellard
264 4d1135e4 bellard
    TEST_JCC("js", 0, 1);
265 4d1135e4 bellard
    TEST_JCC("js", 0, -1);
266 4d1135e4 bellard
    TEST_JCC("js", 0, 0);
267 4d1135e4 bellard
268 4d1135e4 bellard
    TEST_JCC("jns", 0, 1);
269 4d1135e4 bellard
    TEST_JCC("jns", 0, -1);
270 4d1135e4 bellard
    TEST_JCC("jns", 0, 0);
271 4d1135e4 bellard
}
272 4d1135e4 bellard
273 4b74fe1f bellard
#undef CC_MASK
274 4b74fe1f bellard
#define CC_MASK (CC_O | CC_C)
275 4b74fe1f bellard
276 4b74fe1f bellard
#define OP mul
277 4b74fe1f bellard
#include "test-i386-muldiv.h"
278 4b74fe1f bellard
279 4b74fe1f bellard
#define OP imul
280 4b74fe1f bellard
#include "test-i386-muldiv.h"
281 4b74fe1f bellard
282 4b74fe1f bellard
#undef CC_MASK
283 4b74fe1f bellard
#define CC_MASK (0)
284 4b74fe1f bellard
285 4b74fe1f bellard
#define OP div
286 4b74fe1f bellard
#include "test-i386-muldiv.h"
287 4b74fe1f bellard
288 4b74fe1f bellard
#define OP idiv
289 4b74fe1f bellard
#include "test-i386-muldiv.h"
290 4b74fe1f bellard
291 4b74fe1f bellard
void test_imulw2(int op0, int op1) 
292 4b74fe1f bellard
{
293 4b74fe1f bellard
    int res, s1, s0, flags;
294 4b74fe1f bellard
    s0 = op0;
295 4b74fe1f bellard
    s1 = op1;
296 4b74fe1f bellard
    res = s0;
297 4b74fe1f bellard
    flags = 0;
298 4b74fe1f bellard
    asm ("push %4\n\t"
299 4b74fe1f bellard
         "popf\n\t"
300 4b74fe1f bellard
         "imulw %w2, %w0\n\t" 
301 4b74fe1f bellard
         "pushf\n\t"
302 4b74fe1f bellard
         "popl %1\n\t"
303 4b74fe1f bellard
         : "=q" (res), "=g" (flags)
304 4b74fe1f bellard
         : "q" (s1), "0" (res), "1" (flags));
305 4b74fe1f bellard
    printf("%-10s A=%08x B=%08x R=%08x CC=%04x\n",
306 4b74fe1f bellard
           "imulw", s0, s1, res, flags & CC_MASK);
307 4b74fe1f bellard
}
308 4b74fe1f bellard
309 4b74fe1f bellard
void test_imull2(int op0, int op1) 
310 4b74fe1f bellard
{
311 4b74fe1f bellard
    int res, s1, s0, flags;
312 4b74fe1f bellard
    s0 = op0;
313 4b74fe1f bellard
    s1 = op1;
314 4b74fe1f bellard
    res = s0;
315 4b74fe1f bellard
    flags = 0;
316 4b74fe1f bellard
    asm ("push %4\n\t"
317 4b74fe1f bellard
         "popf\n\t"
318 4b74fe1f bellard
         "imull %2, %0\n\t" 
319 4b74fe1f bellard
         "pushf\n\t"
320 4b74fe1f bellard
         "popl %1\n\t"
321 4b74fe1f bellard
         : "=q" (res), "=g" (flags)
322 4b74fe1f bellard
         : "q" (s1), "0" (res), "1" (flags));
323 4b74fe1f bellard
    printf("%-10s A=%08x B=%08x R=%08x CC=%04x\n",
324 4b74fe1f bellard
           "imull", s0, s1, res, flags & CC_MASK);
325 4b74fe1f bellard
}
326 4b74fe1f bellard
327 4b74fe1f bellard
void test_mul(void)
328 4b74fe1f bellard
{
329 4b74fe1f bellard
    test_imulb(0x1234561d, 4);
330 4b74fe1f bellard
    test_imulb(3, -4);
331 4b74fe1f bellard
    test_imulb(0x80, 0x80);
332 4b74fe1f bellard
    test_imulb(0x10, 0x10);
333 4b74fe1f bellard
334 4b74fe1f bellard
    test_imulw(0, 0x1234001d, 45);
335 4b74fe1f bellard
    test_imulw(0, 23, -45);
336 4b74fe1f bellard
    test_imulw(0, 0x8000, 0x8000);
337 4b74fe1f bellard
    test_imulw(0, 0x100, 0x100);
338 4b74fe1f bellard
339 4b74fe1f bellard
    test_imull(0, 0x1234001d, 45);
340 4b74fe1f bellard
    test_imull(0, 23, -45);
341 4b74fe1f bellard
    test_imull(0, 0x80000000, 0x80000000);
342 4b74fe1f bellard
    test_imull(0, 0x10000, 0x10000);
343 4b74fe1f bellard
344 4b74fe1f bellard
    test_mulb(0x1234561d, 4);
345 4b74fe1f bellard
    test_mulb(3, -4);
346 4b74fe1f bellard
    test_mulb(0x80, 0x80);
347 4b74fe1f bellard
    test_mulb(0x10, 0x10);
348 4b74fe1f bellard
349 4b74fe1f bellard
    test_mulw(0, 0x1234001d, 45);
350 4b74fe1f bellard
    test_mulw(0, 23, -45);
351 4b74fe1f bellard
    test_mulw(0, 0x8000, 0x8000);
352 4b74fe1f bellard
    test_mulw(0, 0x100, 0x100);
353 4b74fe1f bellard
354 4b74fe1f bellard
    test_mull(0, 0x1234001d, 45);
355 4b74fe1f bellard
    test_mull(0, 23, -45);
356 4b74fe1f bellard
    test_mull(0, 0x80000000, 0x80000000);
357 4b74fe1f bellard
    test_mull(0, 0x10000, 0x10000);
358 4b74fe1f bellard
359 4b74fe1f bellard
    test_imulw2(0x1234001d, 45);
360 4b74fe1f bellard
    test_imulw2(23, -45);
361 4b74fe1f bellard
    test_imulw2(0x8000, 0x8000);
362 4b74fe1f bellard
    test_imulw2(0x100, 0x100);
363 4b74fe1f bellard
364 4b74fe1f bellard
    test_imull2(0x1234001d, 45);
365 4b74fe1f bellard
    test_imull2(23, -45);
366 4b74fe1f bellard
    test_imull2(0x80000000, 0x80000000);
367 4b74fe1f bellard
    test_imull2(0x10000, 0x10000);
368 4b74fe1f bellard
369 4b74fe1f bellard
    test_idivb(0x12341678, 0x127e);
370 4b74fe1f bellard
    test_idivb(0x43210123, -5);
371 4b74fe1f bellard
    test_idivb(0x12340004, -1);
372 4b74fe1f bellard
373 4b74fe1f bellard
    test_idivw(0, 0x12345678, 12347);
374 4b74fe1f bellard
    test_idivw(0, -23223, -45);
375 4b74fe1f bellard
    test_idivw(0, 0x12348000, -1);
376 4b74fe1f bellard
    test_idivw(0x12343, 0x12345678, 0x81238567);
377 4b74fe1f bellard
378 4b74fe1f bellard
    test_idivl(0, 0x12345678, 12347);
379 4b74fe1f bellard
    test_idivl(0, -233223, -45);
380 4b74fe1f bellard
    test_idivl(0, 0x80000000, -1);
381 4b74fe1f bellard
    test_idivl(0x12343, 0x12345678, 0x81234567);
382 4b74fe1f bellard
383 4b74fe1f bellard
    test_divb(0x12341678, 0x127e);
384 4b74fe1f bellard
    test_divb(0x43210123, -5);
385 4b74fe1f bellard
    test_divb(0x12340004, -1);
386 4b74fe1f bellard
387 4b74fe1f bellard
    test_divw(0, 0x12345678, 12347);
388 4b74fe1f bellard
    test_divw(0, -23223, -45);
389 4b74fe1f bellard
    test_divw(0, 0x12348000, -1);
390 4b74fe1f bellard
    test_divw(0x12343, 0x12345678, 0x81238567);
391 4b74fe1f bellard
392 4b74fe1f bellard
    test_divl(0, 0x12345678, 12347);
393 4b74fe1f bellard
    test_divl(0, -233223, -45);
394 4b74fe1f bellard
    test_divl(0, 0x80000000, -1);
395 4b74fe1f bellard
    test_divl(0x12343, 0x12345678, 0x81234567);
396 4b74fe1f bellard
}
397 4b74fe1f bellard
398 4b74fe1f bellard
399 4d1135e4 bellard
static void *call_end __init_call = NULL;
400 4d1135e4 bellard
401 4d1135e4 bellard
int main(int argc, char **argv)
402 4d1135e4 bellard
{
403 4d1135e4 bellard
    void **ptr;
404 4d1135e4 bellard
    void (*func)(void);
405 4b74fe1f bellard
406 4b74fe1f bellard
    test_mul();
407 4b74fe1f bellard
#if 0
408 4d1135e4 bellard
    ptr = &call_start + 1;
409 4d1135e4 bellard
    while (*ptr != NULL) {
410 4d1135e4 bellard
        func = *ptr++;
411 4d1135e4 bellard
        func();
412 4d1135e4 bellard
    }
413 4d1135e4 bellard
    test_jcc();
414 4b74fe1f bellard
    test_lea();
415 4b74fe1f bellard
#endif
416 4d1135e4 bellard
    return 0;
417 4d1135e4 bellard
}