Statistics
| Branch: | Revision:

root / target-alpha / machine.c @ b758aca1

History | View | Annotate | Download (2.1 kB)

1 b758aca1 Richard Henderson
#include "hw/hw.h"
2 b758aca1 Richard Henderson
#include "hw/boards.h"
3 b758aca1 Richard Henderson
4 b758aca1 Richard Henderson
static int get_fpcr(QEMUFile *f, void *opaque, size_t size)
5 b758aca1 Richard Henderson
{
6 b758aca1 Richard Henderson
    CPUAlphaState *env = opaque;
7 b758aca1 Richard Henderson
    cpu_alpha_store_fpcr(env, qemu_get_be64(f));
8 b758aca1 Richard Henderson
    return 0;
9 b758aca1 Richard Henderson
}
10 b758aca1 Richard Henderson
11 b758aca1 Richard Henderson
static void put_fpcr(QEMUFile *f, void *opaque, size_t size)
12 b758aca1 Richard Henderson
{
13 b758aca1 Richard Henderson
    CPUAlphaState *env = opaque;
14 b758aca1 Richard Henderson
    qemu_put_be64(f, cpu_alpha_load_fpcr(env));
15 b758aca1 Richard Henderson
}
16 b758aca1 Richard Henderson
17 b758aca1 Richard Henderson
static const VMStateInfo vmstate_fpcr = {
18 b758aca1 Richard Henderson
    .name = "fpcr",
19 b758aca1 Richard Henderson
    .get = get_fpcr,
20 b758aca1 Richard Henderson
    .put = put_fpcr,
21 b758aca1 Richard Henderson
};
22 b758aca1 Richard Henderson
23 b758aca1 Richard Henderson
static VMStateField vmstate_cpu_fields[] = {
24 b758aca1 Richard Henderson
    VMSTATE_UINTTL_ARRAY(ir, CPUState, 31),
25 b758aca1 Richard Henderson
    VMSTATE_UINTTL_ARRAY(fir, CPUState, 31),
26 b758aca1 Richard Henderson
    /* Save the architecture value of the fpcr, not the internally
27 b758aca1 Richard Henderson
       expanded version.  Since this architecture value does not
28 b758aca1 Richard Henderson
       exist in memory to be stored, this requires a but of hoop
29 b758aca1 Richard Henderson
       jumping.  We want OFFSET=0 so that we effectively pass ENV
30 b758aca1 Richard Henderson
       to the helper functions, and we need to fill in the name by
31 b758aca1 Richard Henderson
       hand since there's no field of that name.  */
32 b758aca1 Richard Henderson
    {
33 b758aca1 Richard Henderson
        .name = "fpcr",
34 b758aca1 Richard Henderson
        .version_id = 0,
35 b758aca1 Richard Henderson
        .size = sizeof(uint64_t),
36 b758aca1 Richard Henderson
        .info = &vmstate_fpcr,
37 b758aca1 Richard Henderson
        .flags = VMS_SINGLE,
38 b758aca1 Richard Henderson
        .offset = 0
39 b758aca1 Richard Henderson
    },
40 b758aca1 Richard Henderson
    VMSTATE_UINTTL(pc, CPUState),
41 b758aca1 Richard Henderson
    VMSTATE_UINTTL(unique, CPUState),
42 b758aca1 Richard Henderson
    VMSTATE_UINTTL(lock_addr, CPUState),
43 b758aca1 Richard Henderson
    VMSTATE_UINTTL(lock_value, CPUState),
44 b758aca1 Richard Henderson
    /* Note that lock_st_addr is not saved; it is a temporary
45 b758aca1 Richard Henderson
       used during the execution of the st[lq]_c insns.  */
46 b758aca1 Richard Henderson
47 b758aca1 Richard Henderson
    VMSTATE_UINT8(ps, CPUState),
48 b758aca1 Richard Henderson
    VMSTATE_UINT8(intr_flag, CPUState),
49 b758aca1 Richard Henderson
    VMSTATE_UINT8(pal_mode, CPUState),
50 b758aca1 Richard Henderson
51 b758aca1 Richard Henderson
    VMSTATE_UINTTL(trap_arg0, CPUState),
52 b758aca1 Richard Henderson
    VMSTATE_UINTTL(trap_arg1, CPUState),
53 b758aca1 Richard Henderson
    VMSTATE_UINTTL(trap_arg2, CPUState),
54 b758aca1 Richard Henderson
55 b758aca1 Richard Henderson
    VMSTATE_END_OF_LIST()
56 b758aca1 Richard Henderson
};
57 b758aca1 Richard Henderson
58 b758aca1 Richard Henderson
static const VMStateDescription vmstate_cpu = {
59 b758aca1 Richard Henderson
    .name = "cpu",
60 b758aca1 Richard Henderson
    .version_id = 1,
61 b758aca1 Richard Henderson
    .minimum_version_id = 1,
62 b758aca1 Richard Henderson
    .minimum_version_id_old = 1,
63 b758aca1 Richard Henderson
    .fields = vmstate_cpu_fields,
64 b758aca1 Richard Henderson
};
65 b758aca1 Richard Henderson
66 b758aca1 Richard Henderson
void cpu_save(QEMUFile *f, void *opaque)
67 b758aca1 Richard Henderson
{
68 b758aca1 Richard Henderson
    vmstate_save_state(f, &vmstate_cpu, opaque);
69 b758aca1 Richard Henderson
}
70 b758aca1 Richard Henderson
71 b758aca1 Richard Henderson
int cpu_load(QEMUFile *f, void *opaque, int version_id)
72 b758aca1 Richard Henderson
{
73 b758aca1 Richard Henderson
    return vmstate_load_state(f, &vmstate_cpu, opaque, version_id);
74 b758aca1 Richard Henderson
}