Statistics
| Branch: | Revision:

root / target-sparc / machine.c @ c7ba218d

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
    qemu_register_machine(&sun4v_machine);
11
#else
12
    qemu_register_machine(&ss5_machine);
13
    qemu_register_machine(&ss10_machine);
14
    qemu_register_machine(&ss600mp_machine);
15
    qemu_register_machine(&ss20_machine);
16
    qemu_register_machine(&ss2_machine);
17
    qemu_register_machine(&voyager_machine);
18
    qemu_register_machine(&ss_lx_machine);
19
    qemu_register_machine(&ss4_machine);
20
    qemu_register_machine(&scls_machine);
21
    qemu_register_machine(&sbook_machine);
22
    qemu_register_machine(&ss1000_machine);
23
    qemu_register_machine(&ss2000_machine);
24
#endif
25
}
26

    
27
void cpu_save(QEMUFile *f, void *opaque)
28
{
29
    CPUState *env = opaque;
30
    int i;
31
    uint32_t tmp;
32

    
33
    for(i = 0; i < 8; i++)
34
        qemu_put_betls(f, &env->gregs[i]);
35
    qemu_put_be32s(f, &env->nwindows);
36
    for(i = 0; i < env->nwindows * 16; i++)
37
        qemu_put_betls(f, &env->regbase[i]);
38

    
39
    /* FPU */
40
    for(i = 0; i < TARGET_FPREGS; i++) {
41
        union {
42
            float32 f;
43
            uint32_t i;
44
        } u;
45
        u.f = env->fpr[i];
46
        qemu_put_be32(f, u.i);
47
    }
48

    
49
    qemu_put_betls(f, &env->pc);
50
    qemu_put_betls(f, &env->npc);
51
    qemu_put_betls(f, &env->y);
52
    tmp = GET_PSR(env);
53
    qemu_put_be32(f, tmp);
54
    qemu_put_betls(f, &env->fsr);
55
    qemu_put_betls(f, &env->tbr);
56
#ifndef TARGET_SPARC64
57
    qemu_put_be32s(f, &env->wim);
58
    /* MMU */
59
    for(i = 0; i < 16; i++)
60
        qemu_put_be32s(f, &env->mmuregs[i]);
61
#endif
62
}
63

    
64
int cpu_load(QEMUFile *f, void *opaque, int version_id)
65
{
66
    CPUState *env = opaque;
67
    int i;
68
    uint32_t tmp;
69

    
70
    if (version_id != 4)
71
        return -EINVAL;
72
    for(i = 0; i < 8; i++)
73
        qemu_get_betls(f, &env->gregs[i]);
74
    qemu_get_be32s(f, &env->nwindows);
75
    for(i = 0; i < env->nwindows * 16; i++)
76
        qemu_get_betls(f, &env->regbase[i]);
77

    
78
    /* FPU */
79
    for(i = 0; i < TARGET_FPREGS; i++) {
80
        union {
81
            float32 f;
82
            uint32_t i;
83
        } u;
84
        u.i = qemu_get_be32(f);
85
        env->fpr[i] = u.f;
86
    }
87

    
88
    qemu_get_betls(f, &env->pc);
89
    qemu_get_betls(f, &env->npc);
90
    qemu_get_betls(f, &env->y);
91
    tmp = qemu_get_be32(f);
92
    env->cwp = 0; /* needed to ensure that the wrapping registers are
93
                     correctly updated */
94
    PUT_PSR(env, tmp);
95
    qemu_get_betls(f, &env->fsr);
96
    qemu_get_betls(f, &env->tbr);
97
#ifndef TARGET_SPARC64
98
    qemu_get_be32s(f, &env->wim);
99
    /* MMU */
100
    for(i = 0; i < 16; i++)
101
        qemu_get_be32s(f, &env->mmuregs[i]);
102
#endif
103
    tlb_flush(env, 1);
104
    return 0;
105
}
106

    
107