Revision c4c38c8c

b/target-i386/machine.c
31 31
    vmstate_load_state(f, &vmstate_segment, dt, vmstate_segment.version_id);
32 32
}
33 33

  
34
void cpu_save(QEMUFile *f, void *opaque)
34
static void cpu_pre_save(void *opaque)
35 35
{
36 36
    CPUState *env = opaque;
37 37
    int i, bit;
38 38

  
39 39
    cpu_synchronize_state(env);
40 40

  
41
    for(i = 0; i < CPU_NB_REGS; i++)
42
        qemu_put_betls(f, &env->regs[i]);
43
    qemu_put_betls(f, &env->eip);
44
    qemu_put_betls(f, &env->eflags);
45
    qemu_put_be32s(f, &env->hflags);
46

  
47 41
    /* FPU */
48 42
    env->fpus_vmstate = (env->fpus & ~0x3800) | (env->fpstt & 0x7) << 11;
49 43
    env->fptag_vmstate = 0;
......
51 45
        env->fptag_vmstate |= ((!env->fptags[i]) << i);
52 46
    }
53 47

  
54
    qemu_put_be16s(f, &env->fpuc);
55
    qemu_put_be16s(f, &env->fpus_vmstate);
56
    qemu_put_be16s(f, &env->fptag_vmstate);
57

  
58 48
#ifdef USE_X86LDOUBLE
59 49
    env->fpregs_format_vmstate = 0;
60 50
#else
61 51
    env->fpregs_format_vmstate = 1;
62 52
#endif
53

  
54
    /* There can only be one pending IRQ set in the bitmap at a time, so try
55
       to find it and save its number instead (-1 for none). */
56
    env->pending_irq_vmstate = -1;
57
    for (i = 0; i < ARRAY_SIZE(env->interrupt_bitmap); i++) {
58
        if (env->interrupt_bitmap[i]) {
59
            bit = ctz64(env->interrupt_bitmap[i]);
60
            env->pending_irq_vmstate = i * 64 + bit;
61
            break;
62
        }
63
    }
64
}
65

  
66
void cpu_save(QEMUFile *f, void *opaque)
67
{
68
    CPUState *env = opaque;
69
    int i;
70

  
71
    cpu_pre_save(opaque);
72

  
73
    for(i = 0; i < CPU_NB_REGS; i++)
74
        qemu_put_betls(f, &env->regs[i]);
75
    qemu_put_betls(f, &env->eip);
76
    qemu_put_betls(f, &env->eflags);
77
    qemu_put_be32s(f, &env->hflags);
78

  
79
    /* FPU */
80
    qemu_put_be16s(f, &env->fpuc);
81
    qemu_put_be16s(f, &env->fpus_vmstate);
82
    qemu_put_be16s(f, &env->fptag_vmstate);
83

  
63 84
    qemu_put_be16s(f, &env->fpregs_format_vmstate);
64 85

  
65 86
    for(i = 0; i < 8; i++) {
......
146 167

  
147 168
    /* KVM-related states */
148 169

  
149
    /* There can only be one pending IRQ set in the bitmap at a time, so try
150
       to find it and save its number instead (-1 for none). */
151
    env->pending_irq_vmstate = -1;
152
    for (i = 0; i < ARRAY_SIZE(env->interrupt_bitmap); i++) {
153
        if (env->interrupt_bitmap[i]) {
154
            bit = ctz64(env->interrupt_bitmap[i]);
155
            env->pending_irq_vmstate = i * 64 + bit;
156
            break;
157
        }
158
    }
159 170
    qemu_put_sbe32s(f, &env->pending_irq_vmstate);
160 171
    qemu_put_be32s(f, &env->mp_state);
161 172
    qemu_put_be64s(f, &env->tsc);

Also available in: Unified diff