]> xenbits.xensource.com Git - qemu-xen-4.2-testing.git/commitdiff
microblaze: Trap on divizions by zero.
authorEdgar E. Iglesias <edgar.iglesias@gmail.com>
Thu, 3 Sep 2009 10:52:01 +0000 (12:52 +0200)
committerEdgar E. Iglesias <edgar.iglesias@gmail.com>
Thu, 3 Sep 2009 10:52:01 +0000 (12:52 +0200)
Signed-off-by: Edgar E. Iglesias <edgar.iglesias@gmail.com>
target-microblaze/op_helper.c
target-microblaze/translate.c

index f86b1c78c9e03d38dabc2794631271909e0fdca0..134d243e6541103e2405c3dc948139e2c9b61c2d 100644 (file)
@@ -167,7 +167,12 @@ static inline int div_prepare(uint32_t a, uint32_t b)
 {
     if (b == 0) {
         env->sregs[SR_MSR] |= MSR_DZ;
-        /* FIXME: Raise the div by zero exception.  */
+
+        if ((env->sregs[SR_MSR] & MSR_EE)
+            && !(env->pvr.regs[2] & PVR2_DIV_ZERO_EXC_MASK)) {
+            env->sregs[SR_ESR] = ESR_EC_DIVZERO;
+            helper_raise_exception(EXCP_HW_EXCP);
+        }
         return 0;
     }
     env->sregs[SR_MSR] &= ~MSR_DZ;
index acf3f8db5da6015343bd1aad71b03cb3fbebd87b..4fbe86a9a952995fd90d504c4a6fc4c137735649 100644 (file)
@@ -616,7 +616,6 @@ static void dec_div(DisasContext *dc)
         t_gen_raise_exception(dc, EXCP_HW_EXCP);
     }
 
-    /* FIXME: support div by zero exceptions.  */
     if (u)
         gen_helper_divu(cpu_R[dc->rd], *(dec_alu_op_b(dc)), cpu_R[dc->ra]);
     else