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