Revision 78c34e98 translate-i386.c

b/translate-i386.c
3249 3249
    case 0x90: /* nop */
3250 3250
        break;
3251 3251
    case 0xcc: /* int3 */
3252
        gen_exception(s, EXCP03_INT3, pc_start - s->cs_base);
3252
        gen_exception(s, EXCP03_INT3, s->pc - s->cs_base);
3253 3253
        break;
3254 3254
    case 0xcd: /* int N */
3255 3255
        val = ldub(s->pc++);
......
3261 3261
    case 0xce: /* into */
3262 3262
        if (s->cc_op != CC_OP_DYNAMIC)
3263 3263
            gen_op_set_cc_op(s->cc_op);
3264
        gen_op_into();
3264
        gen_op_into(s->pc - s->cs_base);
3265 3265
        break;
3266 3266
    case 0xfa: /* cli */
3267 3267
        if (!s->vm86) {
......
3343 3343
        /* XXX: if cpl == 0, then should do something else */
3344 3344
        gen_exception(s, EXCP0D_GPF, pc_start - s->cs_base);
3345 3345
        break;
3346
    case 0x102: /* lar */
3347
    case 0x103: /* lsl */
3348
        if (s->vm86)
3349
            goto illegal_op;
3350
        ot = dflag ? OT_LONG : OT_WORD;
3351
        modrm = ldub(s->pc++);
3352
        reg = (modrm >> 3) & 7;
3353
        gen_ldst_modrm(s, modrm, ot, OR_TMP0, 0);
3354
        gen_op_mov_TN_reg[ot][1][reg]();
3355
        if (s->cc_op != CC_OP_DYNAMIC)
3356
            gen_op_set_cc_op(s->cc_op);
3357
        if (b == 0x102)
3358
            gen_op_lar();
3359
        else
3360
            gen_op_lsl();
3361
        s->cc_op = CC_OP_EFLAGS;
3362
        gen_op_mov_reg_T1[ot][reg]();
3363
        break;
3346 3364
    default:
3347 3365
        goto illegal_op;
3348 3366
    }
......
3579 3597
    [INDEX_op_cmpxchgl_T0_T1_EAX_cc] = CC_OSZAPC,
3580 3598

  
3581 3599
    [INDEX_op_cmpxchg8b] = CC_Z,
3600
    [INDEX_op_lar] = CC_Z,
3601
    [INDEX_op_lsl] = CC_Z,
3582 3602
};
3583 3603

  
3584 3604
/* simpler form of an operation if no flags need to be generated */

Also available in: Unified diff