2008-06-03 Zoltan Varga <vargaz@gmail.com>
authorZoltan Varga <vargaz@gmail.com>
Mon, 2 Jun 2008 22:58:57 +0000 (22:58 -0000)
committerZoltan Varga <vargaz@gmail.com>
Mon, 2 Jun 2008 22:58:57 +0000 (22:58 -0000)
* decimal.c (mono_decimalDiv): Moved equality checks here from managed
code.

svn path=/trunk/mono/; revision=104730

mono/metadata/ChangeLog
mono/metadata/decimal.c

index fa58dd1bf36cf2946eb076f05d91d3d2a341caf3..aabf0f8e5368687b4ecc545f09df54d197b2676a 100644 (file)
@@ -1,3 +1,8 @@
+2008-06-03  Zoltan Varga  <vargaz@gmail.com>
+
+       * decimal.c (mono_decimalDiv): Moved equality checks here from managed
+       code.
+
 2008-06-02 Rodrigo Kumpera  <rkumpera@novell.com>
 
        * reflection.c (mono_dynamic_image_free): Release memory used by
index 681b8b0c3a136d07505ce15c5be076ff81f9fa05..52b7d9d96b4bf974f6d4ea57eab144ab4303cad9 100644 (file)
@@ -1388,6 +1388,16 @@ gint32 mono_decimalDiv(/*[Out]*/decimal_repr* pC, /*[In]*/decimal_repr* pA, /*[I
 
     MONO_ARCH_SAVE_REGS;
 
+       /* Check for common cases */
+       if (mono_decimalCompare (pA, pB) == 0)
+               /* One */
+               return pack128toDecimal (pC, 1, 0, 0, 0);
+       pA->signscale.sign = pA->signscale.sign ? 0 : 1;
+       if (mono_decimalCompare (pA, pB) == 0)
+               /* Minus one */
+               return pack128toDecimal (pC, 1, 0, 0, 1);
+       pA->signscale.sign = pA->signscale.sign ? 0 : 1;
+
     rc = decimalDivSub(pA, pB, &clo, &chi, &texp);
     if (rc != DECIMAL_SUCCESS) {
         if (rc == DECIMAL_FINISHED) rc = DECIMAL_SUCCESS;