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 | } |