Avoid host FPE for overflowing division on MIPS, by Richard Sandiford.
authorths <ths@c046a42c-6fe2-441c-8c8c-71466251a162>
Tue, 25 Dec 2007 03:18:19 +0000 (03:18 +0000)
committerths <ths@c046a42c-6fe2-441c-8c8c-71466251a162>
Tue, 25 Dec 2007 03:18:19 +0000 (03:18 +0000)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3856 c046a42c-6fe2-441c-8c8c-71466251a162

target-mips/op_helper.c

index 0323021..36c4b73 100644 (file)
@@ -230,9 +230,16 @@ void do_div (void)
 void do_ddiv (void)
 {
     if (T1 != 0) {
-        lldiv_t res = lldiv((int64_t)T0, (int64_t)T1);
-        env->LO[0][env->current_tc] = res.quot;
-        env->HI[0][env->current_tc] = res.rem;
+        int64_t arg0 = (int64_t)T0;
+        int64_t arg1 = (int64_t)T1;
+        if (arg0 == ((int64_t)-1 << 63) && arg1 == (int64_t)-1) {
+            env->LO[0][env->current_tc] = arg0;
+            env->HI[0][env->current_tc] = 0;
+        } else {
+            lldiv_t res = lldiv(arg0, arg1);
+            env->LO[0][env->current_tc] = res.quot;
+            env->HI[0][env->current_tc] = res.rem;
+        }
     }
 }