summary refs log tree commit diff stats
diff options
context:
space:
mode:
authoraurel32 <aurel32@c046a42c-6fe2-441c-8c8c-71466251a162>2008-10-01 21:45:18 +0000
committeraurel32 <aurel32@c046a42c-6fe2-441c-8c8c-71466251a162>2008-10-01 21:45:18 +0000
commit5bf06a9528698aa426a32f16e1ae3098b0239d63 (patch)
tree9796879b8b8e4271f4115513b6940e96151bebd6
parent66029f6a2f717873f2d170681f0250801a6d0d39 (diff)
downloadfocaccia-qemu-5bf06a9528698aa426a32f16e1ae3098b0239d63.tar.gz
focaccia-qemu-5bf06a9528698aa426a32f16e1ae3098b0239d63.zip
target-ppc: fix mullw/mullwo
Based on patch by Julian Seward.

Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5379 c046a42c-6fe2-441c-8c8c-71466251a162
-rw-r--r--target-ppc/op.c4
-rw-r--r--target-ppc/op_helper.c2
2 files changed, 5 insertions, 1 deletions
diff --git a/target-ppc/op.c b/target-ppc/op.c
index 64166595cf..4ab0f00433 100644
--- a/target-ppc/op.c
+++ b/target-ppc/op.c
@@ -798,7 +798,11 @@ void OPPROTO op_mulli (void)
 /* multiply low word */
 void OPPROTO op_mullw (void)
 {
+#if defined(TARGET_PPC64)
+    T0 = (int64_t)(int32_t)T0 * (int64_t)(int32_t)T1;
+#else
     T0 = (int32_t)(T0 * T1);
+#endif
     RETURN();
 }
 
diff --git a/target-ppc/op_helper.c b/target-ppc/op_helper.c
index 46e9b7ab6c..d398640278 100644
--- a/target-ppc/op_helper.c
+++ b/target-ppc/op_helper.c
@@ -227,7 +227,7 @@ void do_divduo (void)
 
 void do_mullwo (void)
 {
-    int64_t res = (int64_t)T0 * (int64_t)T1;
+    int64_t res = (int64_t)(int32_t)T0 * (int64_t)(int32_t)T1;
 
     if (likely((int32_t)res == res)) {
         xer_ov = 0;