diff options
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 6416659..4ab0f00 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 46e9b7a..d398640 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; |