Statistics
| Branch: | Revision:

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