Revision 09d85fb8

b/target-i386/op_helper.c
4350 4350
    CPU86_LDouble tmp;
4351 4351
    target_ulong addr;
4352 4352

  
4353
    /* The operand must be 16 byte aligned */
4354
    if (ptr & 0xf) {
4355
        raise_exception(EXCP0D_GPF);
4356
    }
4357

  
4353 4358
    fpus = (env->fpus & ~0x3800) | (env->fpstt & 0x7) << 11;
4354 4359
    fptag = 0;
4355 4360
    for(i = 0; i < 8; i++) {
......
4406 4411
    CPU86_LDouble tmp;
4407 4412
    target_ulong addr;
4408 4413

  
4414
    /* The operand must be 16 byte aligned */
4415
    if (ptr & 0xf) {
4416
        raise_exception(EXCP0D_GPF);
4417
    }
4418

  
4409 4419
    env->fpuc = lduw(ptr);
4410 4420
    fpus = lduw(ptr + 2);
4411 4421
    fptag = lduw(ptr + 4);
b/target-i386/translate.c
7502 7502
        switch(op) {
7503 7503
        case 0: /* fxsave */
7504 7504
            if (mod == 3 || !(s->cpuid_features & CPUID_FXSR) ||
7505
                (s->flags & HF_EM_MASK))
7505
                (s->prefix & PREFIX_LOCK))
7506 7506
                goto illegal_op;
7507
            if (s->flags & HF_TS_MASK) {
7507
            if ((s->flags & HF_EM_MASK) || (s->flags & HF_TS_MASK)) {
7508 7508
                gen_exception(s, EXCP07_PREX, pc_start - s->cs_base);
7509 7509
                break;
7510 7510
            }
......
7516 7516
            break;
7517 7517
        case 1: /* fxrstor */
7518 7518
            if (mod == 3 || !(s->cpuid_features & CPUID_FXSR) ||
7519
                (s->flags & HF_EM_MASK))
7519
                (s->prefix & PREFIX_LOCK))
7520 7520
                goto illegal_op;
7521
            if (s->flags & HF_TS_MASK) {
7521
            if ((s->flags & HF_EM_MASK) || (s->flags & HF_TS_MASK)) {
7522 7522
                gen_exception(s, EXCP07_PREX, pc_start - s->cs_base);
7523 7523
                break;
7524 7524
            }

Also available in: Unified diff