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 | }; |