Revision 728d803b target-i386/translate.c
b/target-i386/translate.c | ||
---|---|---|
2310 | 2310 |
int l1, l2, cc_op; |
2311 | 2311 |
|
2312 | 2312 |
cc_op = s->cc_op; |
2313 |
if (s->cc_op != CC_OP_DYNAMIC) { |
|
2314 |
gen_op_set_cc_op(s->cc_op); |
|
2315 |
s->cc_op = CC_OP_DYNAMIC; |
|
2316 |
} |
|
2313 |
gen_update_cc_op(s); |
|
2317 | 2314 |
if (s->jmp_opt) { |
2318 | 2315 |
l1 = gen_new_label(); |
2319 | 2316 |
gen_jcc1(s, cc_op, b, l1); |
... | ... | |
2724 | 2721 |
static void gen_jmp_tb(DisasContext *s, target_ulong eip, int tb_num) |
2725 | 2722 |
{ |
2726 | 2723 |
if (s->jmp_opt) { |
2727 |
if (s->cc_op != CC_OP_DYNAMIC) { |
|
2728 |
gen_op_set_cc_op(s->cc_op); |
|
2729 |
s->cc_op = CC_OP_DYNAMIC; |
|
2730 |
} |
|
2724 |
gen_update_cc_op(s); |
|
2731 | 2725 |
gen_goto_tb(s, tb_num, eip); |
2732 | 2726 |
s->is_jmp = DISAS_TB_JUMP; |
2733 | 2727 |
} else { |
... | ... | |
6901 | 6895 |
if (!s->pe) { |
6902 | 6896 |
gen_exception(s, EXCP0D_GPF, pc_start - s->cs_base); |
6903 | 6897 |
} else { |
6904 |
if (s->cc_op != CC_OP_DYNAMIC) { |
|
6905 |
gen_op_set_cc_op(s->cc_op); |
|
6906 |
s->cc_op = CC_OP_DYNAMIC; |
|
6907 |
} |
|
6898 |
gen_update_cc_op(s); |
|
6908 | 6899 |
gen_jmp_im(pc_start - s->cs_base); |
6909 | 6900 |
gen_helper_sysenter(); |
6910 | 6901 |
gen_eob(s); |
... | ... | |
6917 | 6908 |
if (!s->pe) { |
6918 | 6909 |
gen_exception(s, EXCP0D_GPF, pc_start - s->cs_base); |
6919 | 6910 |
} else { |
6920 |
if (s->cc_op != CC_OP_DYNAMIC) { |
|
6921 |
gen_op_set_cc_op(s->cc_op); |
|
6922 |
s->cc_op = CC_OP_DYNAMIC; |
|
6923 |
} |
|
6911 |
gen_update_cc_op(s); |
|
6924 | 6912 |
gen_jmp_im(pc_start - s->cs_base); |
6925 | 6913 |
gen_helper_sysexit(tcg_const_i32(dflag)); |
6926 | 6914 |
gen_eob(s); |
... | ... | |
6929 | 6917 |
#ifdef TARGET_X86_64 |
6930 | 6918 |
case 0x105: /* syscall */ |
6931 | 6919 |
/* XXX: is it usable in real mode ? */ |
6932 |
if (s->cc_op != CC_OP_DYNAMIC) { |
|
6933 |
gen_op_set_cc_op(s->cc_op); |
|
6934 |
s->cc_op = CC_OP_DYNAMIC; |
|
6935 |
} |
|
6920 |
gen_update_cc_op(s); |
|
6936 | 6921 |
gen_jmp_im(pc_start - s->cs_base); |
6937 | 6922 |
gen_helper_syscall(tcg_const_i32(s->pc - pc_start)); |
6938 | 6923 |
gen_eob(s); |
... | ... | |
6941 | 6926 |
if (!s->pe) { |
6942 | 6927 |
gen_exception(s, EXCP0D_GPF, pc_start - s->cs_base); |
6943 | 6928 |
} else { |
6944 |
if (s->cc_op != CC_OP_DYNAMIC) { |
|
6945 |
gen_op_set_cc_op(s->cc_op); |
|
6946 |
s->cc_op = CC_OP_DYNAMIC; |
|
6947 |
} |
|
6929 |
gen_update_cc_op(s); |
|
6948 | 6930 |
gen_jmp_im(pc_start - s->cs_base); |
6949 | 6931 |
gen_helper_sysret(tcg_const_i32(s->dflag)); |
6950 | 6932 |
/* condition codes are modified only in long mode */ |
... | ... | |
7085 | 7067 |
if (!(s->cpuid_ext_features & CPUID_EXT_MONITOR) || |
7086 | 7068 |
s->cpl != 0) |
7087 | 7069 |
goto illegal_op; |
7088 |
if (s->cc_op != CC_OP_DYNAMIC) { |
|
7089 |
gen_op_set_cc_op(s->cc_op); |
|
7090 |
s->cc_op = CC_OP_DYNAMIC; |
|
7091 |
} |
|
7070 |
gen_update_cc_op(s); |
|
7092 | 7071 |
gen_jmp_im(pc_start - s->cs_base); |
7093 | 7072 |
gen_helper_mwait(tcg_const_i32(s->pc - pc_start)); |
7094 | 7073 |
gen_eob(s); |
... | ... | |
7613 | 7592 |
gen_svm_check_intercept(s, pc_start, SVM_EXIT_RSM); |
7614 | 7593 |
if (!(s->flags & HF_SMM_MASK)) |
7615 | 7594 |
goto illegal_op; |
7616 |
if (s->cc_op != CC_OP_DYNAMIC) { |
|
7617 |
gen_op_set_cc_op(s->cc_op); |
|
7618 |
s->cc_op = CC_OP_DYNAMIC; |
|
7619 |
} |
|
7595 |
gen_update_cc_op(s); |
|
7620 | 7596 |
gen_jmp_im(s->pc - s->cs_base); |
7621 | 7597 |
gen_helper_rsm(); |
7622 | 7598 |
gen_eob(s); |
Also available in: Unified diff