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,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 }