Commit 4fa5d7722db71a4bd6f01e607cf01c758c150dd1
1 parent
64b3ab24
fixed sparc cpu load/save
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1255 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
37 additions
and
37 deletions
vl.c
@@ -2328,28 +2328,27 @@ void cpu_save(QEMUFile *f, void *opaque) | @@ -2328,28 +2328,27 @@ void cpu_save(QEMUFile *f, void *opaque) | ||
2328 | int i; | 2328 | int i; |
2329 | uint32_t tmp; | 2329 | uint32_t tmp; |
2330 | 2330 | ||
2331 | - for(i = 1; i < 8; i++) | ||
2332 | - qemu_put_be32s(f, &env->gregs[i]); | ||
2333 | - tmp = env->regwptr - env->regbase; | ||
2334 | - qemu_put_be32s(f, &tmp); | ||
2335 | - for(i = 1; i < NWINDOWS * 16 + 8; i++) | ||
2336 | - qemu_put_be32s(f, &env->regbase[i]); | 2331 | + for(i = 0; i < 8; i++) |
2332 | + qemu_put_betls(f, &env->gregs[i]); | ||
2333 | + for(i = 0; i < NWINDOWS * 16; i++) | ||
2334 | + qemu_put_betls(f, &env->regbase[i]); | ||
2337 | 2335 | ||
2338 | /* FPU */ | 2336 | /* FPU */ |
2339 | - for(i = 0; i < 32; i++) { | ||
2340 | - uint64_t mant; | ||
2341 | - uint16_t exp; | ||
2342 | - cpu_get_fp64(&mant, &exp, env->fpr[i]); | ||
2343 | - qemu_put_be64(f, mant); | ||
2344 | - qemu_put_be16(f, exp); | ||
2345 | - } | ||
2346 | - qemu_put_be32s(f, &env->pc); | ||
2347 | - qemu_put_be32s(f, &env->npc); | ||
2348 | - qemu_put_be32s(f, &env->y); | 2337 | + for(i = 0; i < TARGET_FPREGS; i++) { |
2338 | + union { | ||
2339 | + TARGET_FPREG_T f; | ||
2340 | + target_ulong i; | ||
2341 | + } u; | ||
2342 | + u.f = env->fpr[i]; | ||
2343 | + qemu_put_betl(f, u.i); | ||
2344 | + } | ||
2345 | + | ||
2346 | + qemu_put_betls(f, &env->pc); | ||
2347 | + qemu_put_betls(f, &env->npc); | ||
2348 | + qemu_put_betls(f, &env->y); | ||
2349 | tmp = GET_PSR(env); | 2349 | tmp = GET_PSR(env); |
2350 | - qemu_put_be32s(f, &tmp); | 2350 | + qemu_put_be32(f, tmp); |
2351 | qemu_put_be32s(f, &env->fsr); | 2351 | qemu_put_be32s(f, &env->fsr); |
2352 | - qemu_put_be32s(f, &env->cwp); | ||
2353 | qemu_put_be32s(f, &env->wim); | 2352 | qemu_put_be32s(f, &env->wim); |
2354 | qemu_put_be32s(f, &env->tbr); | 2353 | qemu_put_be32s(f, &env->tbr); |
2355 | /* MMU */ | 2354 | /* MMU */ |
@@ -2363,34 +2362,35 @@ int cpu_load(QEMUFile *f, void *opaque, int version_id) | @@ -2363,34 +2362,35 @@ int cpu_load(QEMUFile *f, void *opaque, int version_id) | ||
2363 | int i; | 2362 | int i; |
2364 | uint32_t tmp; | 2363 | uint32_t tmp; |
2365 | 2364 | ||
2366 | - for(i = 1; i < 8; i++) | ||
2367 | - qemu_get_be32s(f, &env->gregs[i]); | ||
2368 | - qemu_get_be32s(f, &tmp); | ||
2369 | - env->regwptr = env->regbase + tmp; | ||
2370 | - for(i = 1; i < NWINDOWS * 16 + 8; i++) | ||
2371 | - qemu_get_be32s(f, &env->regbase[i]); | 2365 | + for(i = 0; i < 8; i++) |
2366 | + qemu_get_betls(f, &env->gregs[i]); | ||
2367 | + for(i = 0; i < NWINDOWS * 16; i++) | ||
2368 | + qemu_get_betls(f, &env->regbase[i]); | ||
2372 | 2369 | ||
2373 | /* FPU */ | 2370 | /* FPU */ |
2374 | - for(i = 0; i < 32; i++) { | ||
2375 | - uint64_t mant; | ||
2376 | - uint16_t exp; | ||
2377 | - | ||
2378 | - qemu_get_be64s(f, &mant); | ||
2379 | - qemu_get_be16s(f, &exp); | ||
2380 | - env->fpr[i] = cpu_put_fp64(mant, exp); | ||
2381 | - } | ||
2382 | - qemu_get_be32s(f, &env->pc); | ||
2383 | - qemu_get_be32s(f, &env->npc); | ||
2384 | - qemu_get_be32s(f, &env->y); | ||
2385 | - qemu_get_be32s(f, &tmp); | 2371 | + for(i = 0; i < TARGET_FPREGS; i++) { |
2372 | + union { | ||
2373 | + TARGET_FPREG_T f; | ||
2374 | + target_ulong i; | ||
2375 | + } u; | ||
2376 | + u.i = qemu_get_betl(f); | ||
2377 | + env->fpr[i] = u.f; | ||
2378 | + } | ||
2379 | + | ||
2380 | + qemu_get_betls(f, &env->pc); | ||
2381 | + qemu_get_betls(f, &env->npc); | ||
2382 | + qemu_get_betls(f, &env->y); | ||
2383 | + tmp = qemu_get_be32(f); | ||
2384 | + env->cwp = 0; /* needed to ensure that the wrapping registers are | ||
2385 | + correctly updated */ | ||
2386 | PUT_PSR(env, tmp); | 2386 | PUT_PSR(env, tmp); |
2387 | qemu_get_be32s(f, &env->fsr); | 2387 | qemu_get_be32s(f, &env->fsr); |
2388 | - qemu_get_be32s(f, &env->cwp); | ||
2389 | qemu_get_be32s(f, &env->wim); | 2388 | qemu_get_be32s(f, &env->wim); |
2390 | qemu_get_be32s(f, &env->tbr); | 2389 | qemu_get_be32s(f, &env->tbr); |
2391 | /* MMU */ | 2390 | /* MMU */ |
2392 | for(i = 0; i < 16; i++) | 2391 | for(i = 0; i < 16; i++) |
2393 | qemu_get_be32s(f, &env->mmuregs[i]); | 2392 | qemu_get_be32s(f, &env->mmuregs[i]); |
2393 | + | ||
2394 | tlb_flush(env, 1); | 2394 | tlb_flush(env, 1); |
2395 | return 0; | 2395 | return 0; |
2396 | } | 2396 | } |