root / target-sparc / machine.c @ 1a14026e
History | View | Annotate | Download (2.6 kB)
1 |
#include "hw/hw.h" |
---|---|
2 |
#include "hw/boards.h" |
3 |
|
4 |
#include "exec-all.h" |
5 |
|
6 |
void register_machines(void) |
7 |
{ |
8 |
#ifdef TARGET_SPARC64
|
9 |
qemu_register_machine(&sun4u_machine); |
10 |
#else
|
11 |
qemu_register_machine(&ss5_machine); |
12 |
qemu_register_machine(&ss10_machine); |
13 |
qemu_register_machine(&ss600mp_machine); |
14 |
qemu_register_machine(&ss20_machine); |
15 |
qemu_register_machine(&ss2_machine); |
16 |
qemu_register_machine(&voyager_machine); |
17 |
qemu_register_machine(&ss_lx_machine); |
18 |
qemu_register_machine(&ss4_machine); |
19 |
qemu_register_machine(&scls_machine); |
20 |
qemu_register_machine(&sbook_machine); |
21 |
qemu_register_machine(&ss1000_machine); |
22 |
qemu_register_machine(&ss2000_machine); |
23 |
#endif
|
24 |
} |
25 |
|
26 |
void cpu_save(QEMUFile *f, void *opaque) |
27 |
{ |
28 |
CPUState *env = opaque; |
29 |
int i;
|
30 |
uint32_t tmp; |
31 |
|
32 |
for(i = 0; i < 8; i++) |
33 |
qemu_put_betls(f, &env->gregs[i]); |
34 |
qemu_put_be32s(f, &env->nwindows); |
35 |
for(i = 0; i < env->nwindows * 16; i++) |
36 |
qemu_put_betls(f, &env->regbase[i]); |
37 |
|
38 |
/* FPU */
|
39 |
for(i = 0; i < TARGET_FPREGS; i++) { |
40 |
union {
|
41 |
float32 f; |
42 |
uint32_t i; |
43 |
} u; |
44 |
u.f = env->fpr[i]; |
45 |
qemu_put_be32(f, u.i); |
46 |
} |
47 |
|
48 |
qemu_put_betls(f, &env->pc); |
49 |
qemu_put_betls(f, &env->npc); |
50 |
qemu_put_betls(f, &env->y); |
51 |
tmp = GET_PSR(env); |
52 |
qemu_put_be32(f, tmp); |
53 |
qemu_put_betls(f, &env->fsr); |
54 |
qemu_put_betls(f, &env->tbr); |
55 |
#ifndef TARGET_SPARC64
|
56 |
qemu_put_be32s(f, &env->wim); |
57 |
/* MMU */
|
58 |
for(i = 0; i < 16; i++) |
59 |
qemu_put_be32s(f, &env->mmuregs[i]); |
60 |
#endif
|
61 |
} |
62 |
|
63 |
int cpu_load(QEMUFile *f, void *opaque, int version_id) |
64 |
{ |
65 |
CPUState *env = opaque; |
66 |
int i;
|
67 |
uint32_t tmp; |
68 |
|
69 |
if (version_id != 4) |
70 |
return -EINVAL;
|
71 |
for(i = 0; i < 8; i++) |
72 |
qemu_get_betls(f, &env->gregs[i]); |
73 |
qemu_get_be32s(f, &env->nwindows); |
74 |
for(i = 0; i < env->nwindows * 16; i++) |
75 |
qemu_get_betls(f, &env->regbase[i]); |
76 |
|
77 |
/* FPU */
|
78 |
for(i = 0; i < TARGET_FPREGS; i++) { |
79 |
union {
|
80 |
float32 f; |
81 |
uint32_t i; |
82 |
} u; |
83 |
u.i = qemu_get_be32(f); |
84 |
env->fpr[i] = u.f; |
85 |
} |
86 |
|
87 |
qemu_get_betls(f, &env->pc); |
88 |
qemu_get_betls(f, &env->npc); |
89 |
qemu_get_betls(f, &env->y); |
90 |
tmp = qemu_get_be32(f); |
91 |
env->cwp = 0; /* needed to ensure that the wrapping registers are |
92 |
correctly updated */
|
93 |
PUT_PSR(env, tmp); |
94 |
qemu_get_betls(f, &env->fsr); |
95 |
qemu_get_betls(f, &env->tbr); |
96 |
#ifndef TARGET_SPARC64
|
97 |
qemu_get_be32s(f, &env->wim); |
98 |
/* MMU */
|
99 |
for(i = 0; i < 16; i++) |
100 |
qemu_get_be32s(f, &env->mmuregs[i]); |
101 |
#endif
|
102 |
tlb_flush(env, 1);
|
103 |
return 0; |
104 |
} |
105 |
|
106 |
|