Revision 560f92cc tcg/x86_64/tcg-target.c
b/tcg/x86_64/tcg-target.c | ||
---|---|---|
450 | 450 |
TCGArg arg1, TCGArg arg2, int const_arg2, |
451 | 451 |
int label_index, int rexw) |
452 | 452 |
{ |
453 |
int c; |
|
454 | 453 |
if (const_arg2) { |
455 | 454 |
if (arg2 == 0) { |
456 |
/* use test */ |
|
457 |
switch(cond) { |
|
458 |
case TCG_COND_EQ: |
|
459 |
c = JCC_JE; |
|
460 |
break; |
|
461 |
case TCG_COND_NE: |
|
462 |
c = JCC_JNE; |
|
463 |
break; |
|
464 |
case TCG_COND_LT: |
|
465 |
c = JCC_JS; |
|
466 |
break; |
|
467 |
case TCG_COND_GE: |
|
468 |
c = JCC_JNS; |
|
469 |
break; |
|
470 |
default: |
|
471 |
goto do_cmpi; |
|
472 |
} |
|
473 | 455 |
/* test r, r */ |
474 | 456 |
tcg_out_modrm(s, 0x85 | rexw, arg1, arg1); |
475 |
tcg_out_jxx(s, c, label_index); |
|
476 | 457 |
} else { |
477 |
do_cmpi: |
|
478 | 458 |
if (rexw) |
479 | 459 |
tgen_arithi64(s, ARITH_CMP, arg1, arg2); |
480 | 460 |
else |
481 | 461 |
tgen_arithi32(s, ARITH_CMP, arg1, arg2); |
482 |
tcg_out_jxx(s, tcg_cond_to_jcc[cond], label_index); |
|
483 | 462 |
} |
484 | 463 |
} else { |
485 | 464 |
tcg_out_modrm(s, 0x01 | (ARITH_CMP << 3) | rexw, arg2, arg1); |
486 |
tcg_out_jxx(s, tcg_cond_to_jcc[cond], label_index); |
|
487 | 465 |
} |
466 |
tcg_out_jxx(s, tcg_cond_to_jcc[cond], label_index); |
|
488 | 467 |
} |
489 | 468 |
|
490 | 469 |
#if defined(CONFIG_SOFTMMU) |
Also available in: Unified diff