diff options
author | aurel32 <aurel32@c046a42c-6fe2-441c-8c8c-71466251a162> | 2008-10-01 21:45:18 +0000 |
---|---|---|
committer | aurel32 <aurel32@c046a42c-6fe2-441c-8c8c-71466251a162> | 2008-10-01 21:45:18 +0000 |
commit | 5bf06a9528698aa426a32f16e1ae3098b0239d63 (patch) | |
tree | 9796879b8b8e4271f4115513b6940e96151bebd6 /target-ppc | |
parent | 66029f6a2f717873f2d170681f0250801a6d0d39 (diff) |
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
Diffstat (limited to 'target-ppc')
-rw-r--r-- | target-ppc/op.c | 4 | ||||
-rw-r--r-- | target-ppc/op_helper.c | 2 |
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; |