20 |
*/ |
*/ |
21 |
#define DATA_BITS (1 << (3 + SHIFT)) |
#define DATA_BITS (1 << (3 + SHIFT)) |
22 |
#define SHIFT_MASK (DATA_BITS - 1) |
#define SHIFT_MASK (DATA_BITS - 1) |
23 |
#define SIGN_MASK (1 << (DATA_BITS - 1)) |
#define SIGN_MASK (((target_ulong)1) << (DATA_BITS - 1)) |
24 |
|
#if DATA_BITS <= 32 |
25 |
|
#define SHIFT1_MASK 0x1f |
26 |
|
#else |
27 |
|
#define SHIFT1_MASK 0x3f |
28 |
|
#endif |
29 |
|
|
30 |
#if DATA_BITS == 8 |
#if DATA_BITS == 8 |
31 |
#define SUFFIX b |
#define SUFFIX b |
42 |
#define DATA_TYPE uint32_t |
#define DATA_TYPE uint32_t |
43 |
#define DATA_STYPE int32_t |
#define DATA_STYPE int32_t |
44 |
#define DATA_MASK 0xffffffff |
#define DATA_MASK 0xffffffff |
45 |
|
#elif DATA_BITS == 64 |
46 |
|
#define SUFFIX q |
47 |
|
#define DATA_TYPE uint64_t |
48 |
|
#define DATA_STYPE int64_t |
49 |
|
#define DATA_MASK 0xffffffffffffffff |
50 |
#else |
#else |
51 |
#error unhandled operand size |
#error unhandled operand size |
52 |
#endif |
#endif |
56 |
static int glue(compute_all_add, SUFFIX)(void) |
static int glue(compute_all_add, SUFFIX)(void) |
57 |
{ |
{ |
58 |
int cf, pf, af, zf, sf, of; |
int cf, pf, af, zf, sf, of; |
59 |
int src1, src2; |
target_long src1, src2; |
60 |
src1 = CC_SRC; |
src1 = CC_SRC; |
61 |
src2 = CC_DST - CC_SRC; |
src2 = CC_DST - CC_SRC; |
62 |
cf = (DATA_TYPE)CC_DST < (DATA_TYPE)src1; |
cf = (DATA_TYPE)CC_DST < (DATA_TYPE)src1; |
70 |
|
|
71 |
static int glue(compute_c_add, SUFFIX)(void) |
static int glue(compute_c_add, SUFFIX)(void) |
72 |
{ |
{ |
73 |
int src1, cf; |
int cf; |
74 |
|
target_long src1; |
75 |
src1 = CC_SRC; |
src1 = CC_SRC; |
76 |
cf = (DATA_TYPE)CC_DST < (DATA_TYPE)src1; |
cf = (DATA_TYPE)CC_DST < (DATA_TYPE)src1; |
77 |
return cf; |
return cf; |
80 |
static int glue(compute_all_adc, SUFFIX)(void) |
static int glue(compute_all_adc, SUFFIX)(void) |
81 |
{ |
{ |
82 |
int cf, pf, af, zf, sf, of; |
int cf, pf, af, zf, sf, of; |
83 |
int src1, src2; |
target_long src1, src2; |
84 |
src1 = CC_SRC; |
src1 = CC_SRC; |
85 |
src2 = CC_DST - CC_SRC - 1; |
src2 = CC_DST - CC_SRC - 1; |
86 |
cf = (DATA_TYPE)CC_DST <= (DATA_TYPE)src1; |
cf = (DATA_TYPE)CC_DST <= (DATA_TYPE)src1; |
94 |
|
|
95 |
static int glue(compute_c_adc, SUFFIX)(void) |
static int glue(compute_c_adc, SUFFIX)(void) |
96 |
{ |
{ |
97 |
int src1, cf; |
int cf; |
98 |
|
target_long src1; |
99 |
src1 = CC_SRC; |
src1 = CC_SRC; |
100 |
cf = (DATA_TYPE)CC_DST <= (DATA_TYPE)src1; |
cf = (DATA_TYPE)CC_DST <= (DATA_TYPE)src1; |
101 |
return cf; |
return cf; |
104 |
static int glue(compute_all_sub, SUFFIX)(void) |
static int glue(compute_all_sub, SUFFIX)(void) |
105 |
{ |
{ |
106 |
int cf, pf, af, zf, sf, of; |
int cf, pf, af, zf, sf, of; |
107 |
int src1, src2; |
target_long src1, src2; |
108 |
src1 = CC_DST + CC_SRC; |
src1 = CC_DST + CC_SRC; |
109 |
src2 = CC_SRC; |
src2 = CC_SRC; |
110 |
cf = (DATA_TYPE)src1 < (DATA_TYPE)src2; |
cf = (DATA_TYPE)src1 < (DATA_TYPE)src2; |
118 |
|
|
119 |
static int glue(compute_c_sub, SUFFIX)(void) |
static int glue(compute_c_sub, SUFFIX)(void) |
120 |
{ |
{ |
121 |
int src1, src2, cf; |
int cf; |
122 |
|
target_long src1, src2; |
123 |
src1 = CC_DST + CC_SRC; |
src1 = CC_DST + CC_SRC; |
124 |
src2 = CC_SRC; |
src2 = CC_SRC; |
125 |
cf = (DATA_TYPE)src1 < (DATA_TYPE)src2; |
cf = (DATA_TYPE)src1 < (DATA_TYPE)src2; |
129 |
static int glue(compute_all_sbb, SUFFIX)(void) |
static int glue(compute_all_sbb, SUFFIX)(void) |
130 |
{ |
{ |
131 |
int cf, pf, af, zf, sf, of; |
int cf, pf, af, zf, sf, of; |
132 |
int src1, src2; |
target_long src1, src2; |
133 |
src1 = CC_DST + CC_SRC + 1; |
src1 = CC_DST + CC_SRC + 1; |
134 |
src2 = CC_SRC; |
src2 = CC_SRC; |
135 |
cf = (DATA_TYPE)src1 <= (DATA_TYPE)src2; |
cf = (DATA_TYPE)src1 <= (DATA_TYPE)src2; |
143 |
|
|
144 |
static int glue(compute_c_sbb, SUFFIX)(void) |
static int glue(compute_c_sbb, SUFFIX)(void) |
145 |
{ |
{ |
146 |
int src1, src2, cf; |
int cf; |
147 |
|
target_long src1, src2; |
148 |
src1 = CC_DST + CC_SRC + 1; |
src1 = CC_DST + CC_SRC + 1; |
149 |
src2 = CC_SRC; |
src2 = CC_SRC; |
150 |
cf = (DATA_TYPE)src1 <= (DATA_TYPE)src2; |
cf = (DATA_TYPE)src1 <= (DATA_TYPE)src2; |
171 |
static int glue(compute_all_inc, SUFFIX)(void) |
static int glue(compute_all_inc, SUFFIX)(void) |
172 |
{ |
{ |
173 |
int cf, pf, af, zf, sf, of; |
int cf, pf, af, zf, sf, of; |
174 |
int src1, src2; |
target_long src1, src2; |
175 |
src1 = CC_DST - 1; |
src1 = CC_DST - 1; |
176 |
src2 = 1; |
src2 = 1; |
177 |
cf = CC_SRC; |
cf = CC_SRC; |
193 |
static int glue(compute_all_dec, SUFFIX)(void) |
static int glue(compute_all_dec, SUFFIX)(void) |
194 |
{ |
{ |
195 |
int cf, pf, af, zf, sf, of; |
int cf, pf, af, zf, sf, of; |
196 |
int src1, src2; |
target_long src1, src2; |
197 |
src1 = CC_DST + 1; |
src1 = CC_DST + 1; |
198 |
src2 = 1; |
src2 = 1; |
199 |
cf = CC_SRC; |
cf = CC_SRC; |
201 |
af = (CC_DST ^ src1 ^ src2) & 0x10; |
af = (CC_DST ^ src1 ^ src2) & 0x10; |
202 |
zf = ((DATA_TYPE)CC_DST == 0) << 6; |
zf = ((DATA_TYPE)CC_DST == 0) << 6; |
203 |
sf = lshift(CC_DST, 8 - DATA_BITS) & 0x80; |
sf = lshift(CC_DST, 8 - DATA_BITS) & 0x80; |
204 |
of = ((CC_DST & DATA_MASK) == ((uint32_t)SIGN_MASK - 1)) << 11; |
of = ((CC_DST & DATA_MASK) == ((target_ulong)SIGN_MASK - 1)) << 11; |
205 |
return cf | pf | af | zf | sf | of; |
return cf | pf | af | zf | sf | of; |
206 |
} |
} |
207 |
|
|
270 |
|
|
271 |
void OPPROTO glue(op_jb_sub, SUFFIX)(void) |
void OPPROTO glue(op_jb_sub, SUFFIX)(void) |
272 |
{ |
{ |
273 |
int src1, src2; |
target_long src1, src2; |
274 |
src1 = CC_DST + CC_SRC; |
src1 = CC_DST + CC_SRC; |
275 |
src2 = CC_SRC; |
src2 = CC_SRC; |
276 |
|
|
277 |
if ((DATA_TYPE)src1 < (DATA_TYPE)src2) |
if ((DATA_TYPE)src1 < (DATA_TYPE)src2) |
278 |
JUMP_TB(glue(op_jb_sub, SUFFIX), PARAM1, 0, PARAM2); |
GOTO_LABEL_PARAM(1); |
|
else |
|
|
JUMP_TB(glue(op_jb_sub, SUFFIX), PARAM1, 1, PARAM3); |
|
279 |
FORCE_RET(); |
FORCE_RET(); |
280 |
} |
} |
281 |
|
|
282 |
void OPPROTO glue(op_jz_sub, SUFFIX)(void) |
void OPPROTO glue(op_jz_sub, SUFFIX)(void) |
283 |
{ |
{ |
284 |
if ((DATA_TYPE)CC_DST == 0) |
if ((DATA_TYPE)CC_DST == 0) |
285 |
JUMP_TB(glue(op_jz_sub, SUFFIX), PARAM1, 0, PARAM2); |
GOTO_LABEL_PARAM(1); |
286 |
else |
FORCE_RET(); |
287 |
JUMP_TB(glue(op_jz_sub, SUFFIX), PARAM1, 1, PARAM3); |
} |
288 |
|
|
289 |
|
void OPPROTO glue(op_jnz_sub, SUFFIX)(void) |
290 |
|
{ |
291 |
|
if ((DATA_TYPE)CC_DST != 0) |
292 |
|
GOTO_LABEL_PARAM(1); |
293 |
FORCE_RET(); |
FORCE_RET(); |
294 |
} |
} |
295 |
|
|
296 |
void OPPROTO glue(op_jbe_sub, SUFFIX)(void) |
void OPPROTO glue(op_jbe_sub, SUFFIX)(void) |
297 |
{ |
{ |
298 |
int src1, src2; |
target_long src1, src2; |
299 |
src1 = CC_DST + CC_SRC; |
src1 = CC_DST + CC_SRC; |
300 |
src2 = CC_SRC; |
src2 = CC_SRC; |
301 |
|
|
302 |
if ((DATA_TYPE)src1 <= (DATA_TYPE)src2) |
if ((DATA_TYPE)src1 <= (DATA_TYPE)src2) |
303 |
JUMP_TB(glue(op_jbe_sub, SUFFIX), PARAM1, 0, PARAM2); |
GOTO_LABEL_PARAM(1); |
|
else |
|
|
JUMP_TB(glue(op_jbe_sub, SUFFIX), PARAM1, 1, PARAM3); |
|
304 |
FORCE_RET(); |
FORCE_RET(); |
305 |
} |
} |
306 |
|
|
307 |
void OPPROTO glue(op_js_sub, SUFFIX)(void) |
void OPPROTO glue(op_js_sub, SUFFIX)(void) |
308 |
{ |
{ |
309 |
if (CC_DST & SIGN_MASK) |
if (CC_DST & SIGN_MASK) |
310 |
JUMP_TB(glue(op_js_sub, SUFFIX), PARAM1, 0, PARAM2); |
GOTO_LABEL_PARAM(1); |
|
else |
|
|
JUMP_TB(glue(op_js_sub, SUFFIX), PARAM1, 1, PARAM3); |
|
311 |
FORCE_RET(); |
FORCE_RET(); |
312 |
} |
} |
313 |
|
|
314 |
void OPPROTO glue(op_jl_sub, SUFFIX)(void) |
void OPPROTO glue(op_jl_sub, SUFFIX)(void) |
315 |
{ |
{ |
316 |
int src1, src2; |
target_long src1, src2; |
317 |
src1 = CC_DST + CC_SRC; |
src1 = CC_DST + CC_SRC; |
318 |
src2 = CC_SRC; |
src2 = CC_SRC; |
319 |
|
|
320 |
if ((DATA_STYPE)src1 < (DATA_STYPE)src2) |
if ((DATA_STYPE)src1 < (DATA_STYPE)src2) |
321 |
JUMP_TB(glue(op_jl_sub, SUFFIX), PARAM1, 0, PARAM2); |
GOTO_LABEL_PARAM(1); |
|
else |
|
|
JUMP_TB(glue(op_jl_sub, SUFFIX), PARAM1, 1, PARAM3); |
|
322 |
FORCE_RET(); |
FORCE_RET(); |
323 |
} |
} |
324 |
|
|
325 |
void OPPROTO glue(op_jle_sub, SUFFIX)(void) |
void OPPROTO glue(op_jle_sub, SUFFIX)(void) |
326 |
{ |
{ |
327 |
int src1, src2; |
target_long src1, src2; |
328 |
src1 = CC_DST + CC_SRC; |
src1 = CC_DST + CC_SRC; |
329 |
src2 = CC_SRC; |
src2 = CC_SRC; |
330 |
|
|
331 |
if ((DATA_STYPE)src1 <= (DATA_STYPE)src2) |
if ((DATA_STYPE)src1 <= (DATA_STYPE)src2) |
332 |
JUMP_TB(glue(op_jle_sub, SUFFIX), PARAM1, 0, PARAM2); |
GOTO_LABEL_PARAM(1); |
|
else |
|
|
JUMP_TB(glue(op_jle_sub, SUFFIX), PARAM1, 1, PARAM3); |
|
333 |
FORCE_RET(); |
FORCE_RET(); |
334 |
} |
} |
335 |
|
|
339 |
|
|
340 |
void OPPROTO glue(op_loopnz, SUFFIX)(void) |
void OPPROTO glue(op_loopnz, SUFFIX)(void) |
341 |
{ |
{ |
|
unsigned int tmp; |
|
342 |
int eflags; |
int eflags; |
343 |
eflags = cc_table[CC_OP].compute_all(); |
eflags = cc_table[CC_OP].compute_all(); |
344 |
tmp = (ECX - 1) & DATA_MASK; |
if ((DATA_TYPE)ECX != 0 && !(eflags & CC_Z)) |
345 |
ECX = (ECX & ~DATA_MASK) | tmp; |
GOTO_LABEL_PARAM(1); |
|
if (tmp != 0 && !(eflags & CC_Z)) |
|
|
EIP = PARAM1; |
|
|
else |
|
|
EIP = PARAM2; |
|
346 |
FORCE_RET(); |
FORCE_RET(); |
347 |
} |
} |
348 |
|
|
349 |
void OPPROTO glue(op_loopz, SUFFIX)(void) |
void OPPROTO glue(op_loopz, SUFFIX)(void) |
350 |
{ |
{ |
|
unsigned int tmp; |
|
351 |
int eflags; |
int eflags; |
352 |
eflags = cc_table[CC_OP].compute_all(); |
eflags = cc_table[CC_OP].compute_all(); |
353 |
tmp = (ECX - 1) & DATA_MASK; |
if ((DATA_TYPE)ECX != 0 && (eflags & CC_Z)) |
354 |
ECX = (ECX & ~DATA_MASK) | tmp; |
GOTO_LABEL_PARAM(1); |
|
if (tmp != 0 && (eflags & CC_Z)) |
|
|
EIP = PARAM1; |
|
|
else |
|
|
EIP = PARAM2; |
|
355 |
FORCE_RET(); |
FORCE_RET(); |
356 |
} |
} |
357 |
|
|
358 |
void OPPROTO glue(op_loop, SUFFIX)(void) |
void OPPROTO glue(op_jz_ecx, SUFFIX)(void) |
359 |
{ |
{ |
360 |
unsigned int tmp; |
if ((DATA_TYPE)ECX == 0) |
361 |
tmp = (ECX - 1) & DATA_MASK; |
GOTO_LABEL_PARAM(1); |
|
ECX = (ECX & ~DATA_MASK) | tmp; |
|
|
if (tmp != 0) |
|
|
EIP = PARAM1; |
|
|
else |
|
|
EIP = PARAM2; |
|
362 |
FORCE_RET(); |
FORCE_RET(); |
363 |
} |
} |
364 |
|
|
365 |
void OPPROTO glue(op_jecxz, SUFFIX)(void) |
void OPPROTO glue(op_jnz_ecx, SUFFIX)(void) |
366 |
{ |
{ |
367 |
if ((DATA_TYPE)ECX == 0) |
if ((DATA_TYPE)ECX != 0) |
368 |
EIP = PARAM1; |
GOTO_LABEL_PARAM(1); |
|
else |
|
|
EIP = PARAM2; |
|
369 |
FORCE_RET(); |
FORCE_RET(); |
370 |
} |
} |
371 |
|
|
375 |
|
|
376 |
void OPPROTO glue(op_setb_T0_sub, SUFFIX)(void) |
void OPPROTO glue(op_setb_T0_sub, SUFFIX)(void) |
377 |
{ |
{ |
378 |
int src1, src2; |
target_long src1, src2; |
379 |
src1 = CC_DST + CC_SRC; |
src1 = CC_DST + CC_SRC; |
380 |
src2 = CC_SRC; |
src2 = CC_SRC; |
381 |
|
|
389 |
|
|
390 |
void OPPROTO glue(op_setbe_T0_sub, SUFFIX)(void) |
void OPPROTO glue(op_setbe_T0_sub, SUFFIX)(void) |
391 |
{ |
{ |
392 |
int src1, src2; |
target_long src1, src2; |
393 |
src1 = CC_DST + CC_SRC; |
src1 = CC_DST + CC_SRC; |
394 |
src2 = CC_SRC; |
src2 = CC_SRC; |
395 |
|
|
403 |
|
|
404 |
void OPPROTO glue(op_setl_T0_sub, SUFFIX)(void) |
void OPPROTO glue(op_setl_T0_sub, SUFFIX)(void) |
405 |
{ |
{ |
406 |
int src1, src2; |
target_long src1, src2; |
407 |
src1 = CC_DST + CC_SRC; |
src1 = CC_DST + CC_SRC; |
408 |
src2 = CC_SRC; |
src2 = CC_SRC; |
409 |
|
|
412 |
|
|
413 |
void OPPROTO glue(op_setle_T0_sub, SUFFIX)(void) |
void OPPROTO glue(op_setle_T0_sub, SUFFIX)(void) |
414 |
{ |
{ |
415 |
int src1, src2; |
target_long src1, src2; |
416 |
src1 = CC_DST + CC_SRC; |
src1 = CC_DST + CC_SRC; |
417 |
src2 = CC_SRC; |
src2 = CC_SRC; |
418 |
|
|
424 |
void OPPROTO glue(glue(op_shl, SUFFIX), _T0_T1)(void) |
void OPPROTO glue(glue(op_shl, SUFFIX), _T0_T1)(void) |
425 |
{ |
{ |
426 |
int count; |
int count; |
427 |
count = T1 & 0x1f; |
count = T1 & SHIFT1_MASK; |
428 |
T0 = T0 << count; |
T0 = T0 << count; |
429 |
FORCE_RET(); |
FORCE_RET(); |
430 |
} |
} |
432 |
void OPPROTO glue(glue(op_shr, SUFFIX), _T0_T1)(void) |
void OPPROTO glue(glue(op_shr, SUFFIX), _T0_T1)(void) |
433 |
{ |
{ |
434 |
int count; |
int count; |
435 |
count = T1 & 0x1f; |
count = T1 & SHIFT1_MASK; |
436 |
T0 &= DATA_MASK; |
T0 &= DATA_MASK; |
437 |
T0 = T0 >> count; |
T0 = T0 >> count; |
438 |
FORCE_RET(); |
FORCE_RET(); |
440 |
|
|
441 |
void OPPROTO glue(glue(op_sar, SUFFIX), _T0_T1)(void) |
void OPPROTO glue(glue(op_sar, SUFFIX), _T0_T1)(void) |
442 |
{ |
{ |
443 |
int count, src; |
int count; |
444 |
count = T1 & 0x1f; |
target_long src; |
445 |
|
|
446 |
|
count = T1 & SHIFT1_MASK; |
447 |
src = (DATA_STYPE)T0; |
src = (DATA_STYPE)T0; |
448 |
T0 = src >> count; |
T0 = src >> count; |
449 |
FORCE_RET(); |
FORCE_RET(); |
478 |
int count; |
int count; |
479 |
count = T1 & SHIFT_MASK; |
count = T1 & SHIFT_MASK; |
480 |
T1 = T0 >> count; |
T1 = T0 >> count; |
481 |
T0 |= (1 << count); |
T0 |= (((target_long)1) << count); |
482 |
} |
} |
483 |
|
|
484 |
void OPPROTO glue(glue(op_btr, SUFFIX), _T0_T1_cc)(void) |
void OPPROTO glue(glue(op_btr, SUFFIX), _T0_T1_cc)(void) |
486 |
int count; |
int count; |
487 |
count = T1 & SHIFT_MASK; |
count = T1 & SHIFT_MASK; |
488 |
T1 = T0 >> count; |
T1 = T0 >> count; |
489 |
T0 &= ~(1 << count); |
T0 &= ~(((target_long)1) << count); |
490 |
} |
} |
491 |
|
|
492 |
void OPPROTO glue(glue(op_btc, SUFFIX), _T0_T1_cc)(void) |
void OPPROTO glue(glue(op_btc, SUFFIX), _T0_T1_cc)(void) |
494 |
int count; |
int count; |
495 |
count = T1 & SHIFT_MASK; |
count = T1 & SHIFT_MASK; |
496 |
T1 = T0 >> count; |
T1 = T0 >> count; |
497 |
T0 ^= (1 << count); |
T0 ^= (((target_long)1) << count); |
498 |
|
} |
499 |
|
|
500 |
|
void OPPROTO glue(glue(op_add_bit, SUFFIX), _A0_T1)(void) |
501 |
|
{ |
502 |
|
A0 += ((DATA_STYPE)T1 >> (3 + SHIFT)) << SHIFT; |
503 |
} |
} |
504 |
|
|
505 |
void OPPROTO glue(glue(op_bsf, SUFFIX), _T0_cc)(void) |
void OPPROTO glue(glue(op_bsf, SUFFIX), _T0_cc)(void) |
506 |
{ |
{ |
507 |
int res, count; |
int count; |
508 |
|
target_long res; |
509 |
|
|
510 |
res = T0 & DATA_MASK; |
res = T0 & DATA_MASK; |
511 |
if (res != 0) { |
if (res != 0) { |
512 |
count = 0; |
count = 0; |
524 |
|
|
525 |
void OPPROTO glue(glue(op_bsr, SUFFIX), _T0_cc)(void) |
void OPPROTO glue(glue(op_bsr, SUFFIX), _T0_cc)(void) |
526 |
{ |
{ |
527 |
int res, count; |
int count; |
528 |
|
target_long res; |
529 |
|
|
530 |
res = T0 & DATA_MASK; |
res = T0 & DATA_MASK; |
531 |
if (res != 0) { |
if (res != 0) { |
532 |
count = DATA_BITS - 1; |
count = DATA_BITS - 1; |
558 |
T0 = DF << SHIFT; |
T0 = DF << SHIFT; |
559 |
} |
} |
560 |
|
|
|
void OPPROTO glue(op_string_jz_sub, SUFFIX)(void) |
|
|
{ |
|
|
if ((DATA_TYPE)CC_DST == 0) |
|
|
JUMP_TB2(glue(op_string_jz_sub, SUFFIX), PARAM1, 3); |
|
|
FORCE_RET(); |
|
|
} |
|
|
|
|
|
void OPPROTO glue(op_string_jnz_sub, SUFFIX)(void) |
|
|
{ |
|
|
if ((DATA_TYPE)CC_DST != 0) |
|
|
JUMP_TB2(glue(op_string_jnz_sub, SUFFIX), PARAM1, 3); |
|
|
FORCE_RET(); |
|
|
} |
|
|
|
|
|
void OPPROTO glue(glue(op_string_jz_sub, SUFFIX), _im)(void) |
|
|
{ |
|
|
if ((DATA_TYPE)CC_DST == 0) { |
|
|
EIP = PARAM1; |
|
|
if (env->eflags & TF_MASK) { |
|
|
raise_exception(EXCP01_SSTP); |
|
|
} |
|
|
T0 = 0; |
|
|
EXIT_TB(); |
|
|
} |
|
|
FORCE_RET(); |
|
|
} |
|
|
|
|
|
void OPPROTO glue(glue(op_string_jnz_sub, SUFFIX), _im)(void) |
|
|
{ |
|
|
if ((DATA_TYPE)CC_DST != 0) { |
|
|
EIP = PARAM1; |
|
|
if (env->eflags & TF_MASK) { |
|
|
raise_exception(EXCP01_SSTP); |
|
|
} |
|
|
T0 = 0; |
|
|
EXIT_TB(); |
|
|
} |
|
|
FORCE_RET(); |
|
|
} |
|
|
|
|
|
#if DATA_BITS >= 16 |
|
|
void OPPROTO glue(op_jz_ecx, SUFFIX)(void) |
|
|
{ |
|
|
if ((DATA_TYPE)ECX == 0) |
|
|
JUMP_TB(glue(op_jz_ecx, SUFFIX), PARAM1, 1, PARAM2); |
|
|
FORCE_RET(); |
|
|
} |
|
|
|
|
|
void OPPROTO glue(glue(op_jz_ecx, SUFFIX), _im)(void) |
|
|
{ |
|
|
if ((DATA_TYPE)ECX == 0) { |
|
|
EIP = PARAM1; |
|
|
if (env->eflags & TF_MASK) { |
|
|
raise_exception(EXCP01_SSTP); |
|
|
} |
|
|
T0 = 0; |
|
|
EXIT_TB(); |
|
|
} |
|
|
FORCE_RET(); |
|
|
} |
|
|
#endif |
|
|
|
|
561 |
/* port I/O */ |
/* port I/O */ |
562 |
|
#if DATA_BITS <= 32 |
563 |
void OPPROTO glue(glue(op_out, SUFFIX), _T0_T1)(void) |
void OPPROTO glue(glue(op_out, SUFFIX), _T0_T1)(void) |
564 |
{ |
{ |
565 |
glue(cpu_out, SUFFIX)(env, T0, T1 & DATA_MASK); |
glue(cpu_out, SUFFIX)(env, T0, T1 & DATA_MASK); |
589 |
{ |
{ |
590 |
glue(glue(check_io, SUFFIX), _DX)(); |
glue(glue(check_io, SUFFIX), _DX)(); |
591 |
} |
} |
592 |
|
#endif |
593 |
|
|
594 |
#undef DATA_BITS |
#undef DATA_BITS |
595 |
#undef SHIFT_MASK |
#undef SHIFT_MASK |
596 |
|
#undef SHIFT1_MASK |
597 |
#undef SIGN_MASK |
#undef SIGN_MASK |
598 |
#undef DATA_TYPE |
#undef DATA_TYPE |
599 |
#undef DATA_STYPE |
#undef DATA_STYPE |