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