From 306ab3e86a94b7547883ca9dac0c86122bb8622c Mon Sep 17 00:00:00 2001 From: ths Date: Tue, 25 Dec 2007 03:18:19 +0000 Subject: [PATCH] Avoid host FPE for overflowing division on MIPS, by Richard Sandiford. git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3856 c046a42c-6fe2-441c-8c8c-71466251a162 --- target-mips/op_helper.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/target-mips/op_helper.c b/target-mips/op_helper.c index 0323021611..36c4b73f93 100644 --- a/target-mips/op_helper.c +++ b/target-mips/op_helper.c @@ -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; + } } }