summaryrefslogtreecommitdiffstats
path: root/target-mips/op_helper.c
diff options
context:
space:
mode:
authorths2007-04-15 23:21:33 +0200
committerths2007-04-15 23:21:33 +0200
commit80c27194a7be757ef5a9cec978d1d8faaa4cee81 (patch)
treed70b8fe5bf3574d586a01bf7194f95f65368b741 /target-mips/op_helper.c
parentSmall code generation optimization. (diff)
downloadqemu-80c27194a7be757ef5a9cec978d1d8faaa4cee81.tar.gz
qemu-80c27194a7be757ef5a9cec978d1d8faaa4cee81.tar.xz
qemu-80c27194a7be757ef5a9cec978d1d8faaa4cee81.zip
Fix qemu SIGFPE caused by division-by-zero due to underflow.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2673 c046a42c-6fe2-441c-8c8c-71466251a162
Diffstat (limited to 'target-mips/op_helper.c')
-rw-r--r--target-mips/op_helper.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/target-mips/op_helper.c b/target-mips/op_helper.c
index 576787d3f4..14696aa925 100644
--- a/target-mips/op_helper.c
+++ b/target-mips/op_helper.c
@@ -216,6 +216,17 @@ void do_msubu (void)
}
#endif
+#if HOST_LONG_BITS < 64
+void do_div (void)
+{
+ /* 64bit datatypes because we may see overflow/underflow. */
+ if (T1 != 0) {
+ env->LO = (int32_t)((int64_t)(int32_t)T0 / (int32_t)T1);
+ env->HI = (int32_t)((int64_t)(int32_t)T0 % (int32_t)T1);
+ }
+}
+#endif
+
#ifdef TARGET_MIPS64
void do_dmult (void)
{