Commit 4fa5d7722db71a4bd6f01e607cf01c758c150dd1

Authored by bellard
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
... ... @@ -2328,28 +2328,27 @@ void cpu_save(QEMUFile *f, void *opaque)
2328 2328 int i;
2329 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 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 2349 tmp = GET_PSR(env);
2350   - qemu_put_be32s(f, &tmp);
  2350 + qemu_put_be32(f, tmp);
2351 2351 qemu_put_be32s(f, &env->fsr);
2352   - qemu_put_be32s(f, &env->cwp);
2353 2352 qemu_put_be32s(f, &env->wim);
2354 2353 qemu_put_be32s(f, &env->tbr);
2355 2354 /* MMU */
... ... @@ -2363,34 +2362,35 @@ int cpu_load(QEMUFile *f, void *opaque, int version_id)
2363 2362 int i;
2364 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 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 2386 PUT_PSR(env, tmp);
2387 2387 qemu_get_be32s(f, &env->fsr);
2388   - qemu_get_be32s(f, &env->cwp);
2389 2388 qemu_get_be32s(f, &env->wim);
2390 2389 qemu_get_be32s(f, &env->tbr);
2391 2390 /* MMU */
2392 2391 for(i = 0; i < 16; i++)
2393 2392 qemu_get_be32s(f, &env->mmuregs[i]);
  2393 +
2394 2394 tlb_flush(env, 1);
2395 2395 return 0;
2396 2396 }
... ...