root / target-alpha / machine.c @ b5f1aa64
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 | } |