Revision 1130328e target-i386/translate.c

b/target-i386/translate.c
4286 4286
    case 0x1b0:
4287 4287
    case 0x1b1: /* cmpxchg Ev, Gv */
4288 4288
        {
4289
            int label1;
4289
            int label1, label2;
4290 4290

  
4291 4291
            if ((b & 1) == 0)
4292 4292
                ot = OT_BYTE;
......
4309 4309
            tcg_gen_sub_tl(cpu_T3, cpu_T3, cpu_T[0]);
4310 4310
            gen_extu(ot, cpu_T3);
4311 4311
            tcg_gen_brcond_tl(TCG_COND_EQ, cpu_T3, tcg_const_tl(0), label1);
4312
            tcg_gen_mov_tl(cpu_T[1], cpu_T[0]);
4313
            gen_op_mov_reg_T0(ot, R_EAX);
4314
            gen_set_label(label1);
4315 4312
            if (mod == 3) {
4313
                label2 = gen_new_label();
4314
                gen_op_mov_reg_T0(ot, R_EAX);
4315
                tcg_gen_br(label2);
4316
                gen_set_label(label1);
4316 4317
                gen_op_mov_reg_T1(ot, rm);
4318
                gen_set_label(label2);
4317 4319
            } else {
4320
                tcg_gen_mov_tl(cpu_T[1], cpu_T[0]);
4321
                gen_op_mov_reg_T0(ot, R_EAX);
4322
                gen_set_label(label1);
4323
                /* always store */
4318 4324
                gen_op_st_T1_A0(ot + s->mem_index);
4319 4325
            }
4320 4326
            tcg_gen_mov_tl(cpu_cc_src, cpu_T[0]);

Also available in: Unified diff