aboutsummaryrefslogtreecommitdiffstats
path: root/target-ppc
diff options
context:
space:
mode:
authorj_mayer <j_mayer@c046a42c-6fe2-441c-8c8c-71466251a162>2007-10-27 17:18:49 +0000
committerj_mayer <j_mayer@c046a42c-6fe2-441c-8c8c-71466251a162>2007-10-27 17:18:49 +0000
commit8378e71f136a021e795d41ceae64eedadcff291c (patch)
tree3897ae371660bce17d18975a443e4e083042c373 /target-ppc
parent05f778c8bdfa3f0499c3777f562db1feed338502 (diff)
Fix endianness bug for PowerPC stfiwx instruction.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3456 c046a42c-6fe2-441c-8c8c-71466251a162
Diffstat (limited to 'target-ppc')
-rw-r--r--target-ppc/op_mem.h13
1 files changed, 11 insertions, 2 deletions
diff --git a/target-ppc/op_mem.h b/target-ppc/op_mem.h
index ca48f5de0..b1daf848d 100644
--- a/target-ppc/op_mem.h
+++ b/target-ppc/op_mem.h
@@ -411,17 +411,26 @@ static always_inline void glue(stfs, MEMSUFFIX) (target_ulong EA, double d)
glue(stfl, MEMSUFFIX)(EA, float64_to_float32(d, &env->fp_status));
}
+#if defined(WORDS_BIGENDIAN)
+#define WORD0 0
+#define WORD1 1
+#else
+#define WORD0 1
+#define WORD1 0
+#endif
static always_inline void glue(stfiwx, MEMSUFFIX) (target_ulong EA, double d)
{
union {
double d;
- uint64_t u;
+ uint32_t u[2];
} u;
/* Store the low order 32 bits without any conversion */
u.d = d;
- glue(stl, MEMSUFFIX)(EA, u.u);
+ glue(stl, MEMSUFFIX)(EA, u.u[WORD0]);
}
+#undef WORD0
+#undef WORD1
PPC_STF_OP(fd, stfq);
PPC_STF_OP(fs, stfs);