Commit 8378e71f136a021e795d41ceae64eedadcff291c
1 parent
05f778c8
Fix endianness bug for PowerPC stfiwx instruction.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3456 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
11 additions
and
2 deletions
target-ppc/op_mem.h
| ... | ... | @@ -411,17 +411,26 @@ static always_inline void glue(stfs, MEMSUFFIX) (target_ulong EA, double d) |
| 411 | 411 | glue(stfl, MEMSUFFIX)(EA, float64_to_float32(d, &env->fp_status)); |
| 412 | 412 | } |
| 413 | 413 | |
| 414 | +#if defined(WORDS_BIGENDIAN) | |
| 415 | +#define WORD0 0 | |
| 416 | +#define WORD1 1 | |
| 417 | +#else | |
| 418 | +#define WORD0 1 | |
| 419 | +#define WORD1 0 | |
| 420 | +#endif | |
| 414 | 421 | static always_inline void glue(stfiwx, MEMSUFFIX) (target_ulong EA, double d) |
| 415 | 422 | { |
| 416 | 423 | union { |
| 417 | 424 | double d; |
| 418 | - uint64_t u; | |
| 425 | + uint32_t u[2]; | |
| 419 | 426 | } u; |
| 420 | 427 | |
| 421 | 428 | /* Store the low order 32 bits without any conversion */ |
| 422 | 429 | u.d = d; |
| 423 | - glue(stl, MEMSUFFIX)(EA, u.u); | |
| 430 | + glue(stl, MEMSUFFIX)(EA, u.u[WORD0]); | |
| 424 | 431 | } |
| 432 | +#undef WORD0 | |
| 433 | +#undef WORD1 | |
| 425 | 434 | |
| 426 | 435 | PPC_STF_OP(fd, stfq); |
| 427 | 436 | PPC_STF_OP(fs, stfs); | ... | ... |