Statistics
| Branch: | Revision:

root / target-alpha / machine.c @ a8aec295

History | View | Annotate | Download (2.7 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 fe31e737 Andreas Färber
static VMStateField vmstate_env_fields[] = {
24 4d5712f1 Andreas Färber
    VMSTATE_UINTTL_ARRAY(ir, CPUAlphaState, 31),
25 4d5712f1 Andreas Färber
    VMSTATE_UINTTL_ARRAY(fir, CPUAlphaState, 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 4d5712f1 Andreas Färber
    VMSTATE_UINTTL(pc, CPUAlphaState),
41 4d5712f1 Andreas Färber
    VMSTATE_UINTTL(unique, CPUAlphaState),
42 4d5712f1 Andreas Färber
    VMSTATE_UINTTL(lock_addr, CPUAlphaState),
43 4d5712f1 Andreas Färber
    VMSTATE_UINTTL(lock_value, CPUAlphaState),
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 4d5712f1 Andreas Färber
    VMSTATE_UINT8(ps, CPUAlphaState),
48 4d5712f1 Andreas Färber
    VMSTATE_UINT8(intr_flag, CPUAlphaState),
49 4d5712f1 Andreas Färber
    VMSTATE_UINT8(pal_mode, CPUAlphaState),
50 4d5712f1 Andreas Färber
    VMSTATE_UINT8(fen, CPUAlphaState),
51 26b46094 Richard Henderson
52 4d5712f1 Andreas Färber
    VMSTATE_UINT32(pcc_ofs, CPUAlphaState),
53 b758aca1 Richard Henderson
54 4d5712f1 Andreas Färber
    VMSTATE_UINTTL(trap_arg0, CPUAlphaState),
55 4d5712f1 Andreas Färber
    VMSTATE_UINTTL(trap_arg1, CPUAlphaState),
56 4d5712f1 Andreas Färber
    VMSTATE_UINTTL(trap_arg2, CPUAlphaState),
57 b758aca1 Richard Henderson
58 4d5712f1 Andreas Färber
    VMSTATE_UINTTL(exc_addr, CPUAlphaState),
59 4d5712f1 Andreas Färber
    VMSTATE_UINTTL(palbr, CPUAlphaState),
60 4d5712f1 Andreas Färber
    VMSTATE_UINTTL(ptbr, CPUAlphaState),
61 4d5712f1 Andreas Färber
    VMSTATE_UINTTL(vptptr, CPUAlphaState),
62 4d5712f1 Andreas Färber
    VMSTATE_UINTTL(sysval, CPUAlphaState),
63 4d5712f1 Andreas Färber
    VMSTATE_UINTTL(usp, CPUAlphaState),
64 26b46094 Richard Henderson
65 4d5712f1 Andreas Färber
    VMSTATE_UINTTL_ARRAY(shadow, CPUAlphaState, 8),
66 4d5712f1 Andreas Färber
    VMSTATE_UINTTL_ARRAY(scratch, CPUAlphaState, 24),
67 26b46094 Richard Henderson
68 b758aca1 Richard Henderson
    VMSTATE_END_OF_LIST()
69 b758aca1 Richard Henderson
};
70 b758aca1 Richard Henderson
71 fe31e737 Andreas Färber
static const VMStateDescription vmstate_env = {
72 fe31e737 Andreas Färber
    .name = "env",
73 b758aca1 Richard Henderson
    .version_id = 1,
74 b758aca1 Richard Henderson
    .minimum_version_id = 1,
75 b758aca1 Richard Henderson
    .minimum_version_id_old = 1,
76 fe31e737 Andreas Färber
    .fields = vmstate_env_fields,
77 b758aca1 Richard Henderson
};
78 b758aca1 Richard Henderson
79 fe31e737 Andreas Färber
static VMStateField vmstate_cpu_fields[] = {
80 fe31e737 Andreas Färber
    VMSTATE_CPU(),
81 fe31e737 Andreas Färber
    VMSTATE_STRUCT(env, AlphaCPU, 1, vmstate_env, CPUAlphaState),
82 fe31e737 Andreas Färber
    VMSTATE_END_OF_LIST()
83 fe31e737 Andreas Färber
};
84 b758aca1 Richard Henderson
85 fe31e737 Andreas Färber
const VMStateDescription vmstate_alpha_cpu = {
86 fe31e737 Andreas Färber
    .name = "cpu",
87 fe31e737 Andreas Färber
    .version_id = 1,
88 fe31e737 Andreas Färber
    .minimum_version_id = 1,
89 fe31e737 Andreas Färber
    .minimum_version_id_old = 1,
90 fe31e737 Andreas Färber
    .fields = vmstate_cpu_fields,
91 fe31e737 Andreas Färber
};