]>
Commit | Line | Data |
---|---|---|
8dd3dca3 AJ |
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]); | |
1a14026e BS |
34 | qemu_put_be32s(f, &env->nwindows); |
35 | for(i = 0; i < env->nwindows * 16; i++) | |
8dd3dca3 AJ |
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 | ||
1a14026e BS |
69 | if (version_id != 4) |
70 | return -EINVAL; | |
8dd3dca3 AJ |
71 | for(i = 0; i < 8; i++) |
72 | qemu_get_betls(f, &env->gregs[i]); | |
1a14026e BS |
73 | qemu_get_be32s(f, &env->nwindows); |
74 | for(i = 0; i < env->nwindows * 16; i++) | |
8dd3dca3 AJ |
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 |