Fix for MPI divide on MSVC

Resolves multiple platform issues when building bignum.c with Microsoft
Visual Studio.
diff --git a/include/polarssl/bignum.h b/include/polarssl/bignum.h
index 5631af3..635c5d7 100644
--- a/include/polarssl/bignum.h
+++ b/include/polarssl/bignum.h
@@ -136,6 +136,7 @@
           defined(__s390x__) || defined(__mips64) ) )
        typedef  int64_t t_sint;
        typedef uint64_t t_uint;
+       /* mbedtls_t_udbl defined as 128-bit unsigned int */
        typedef unsigned int t_udbl __attribute__((mode(TI)));
        #define POLARSSL_HAVE_UDBL
     #else
diff --git a/library/bignum.c b/library/bignum.c
index d05b0d3..15457ab 100644
--- a/library/bignum.c
+++ b/library/bignum.c
@@ -1097,6 +1097,12 @@
 {
 #if defined(POLARSSL_HAVE_UDBL)
     t_udbl dividend, quotient;
+#else
+    const t_uint radix = (t_uint) 1 << biH;
+    const t_uint uint_halfword_mask = ( (t_uint) 1 << biH ) - 1;
+    t_uint d0, d1, q0, q1, rAX, r0, quotient;
+    t_uint u0_msw, u0_lsw;
+    size_t s;
 #endif
 
     /*
@@ -1117,7 +1123,7 @@
         quotient = ( (t_udbl) 1 << biL ) - 1;
 
     if( r != NULL )
-        *r = dividend - (quotient * d);
+        *r = (t_uint)( dividend - (quotient * d ) );
 
     return (t_uint) quotient;
 #else
@@ -1138,14 +1144,14 @@
     d = d << s;
 
     u1 = u1 << s;
-    u1 |= (u0 >> (32 - s)) & ( (-s) >> 31);
+    u1 |= ( u0 >> ( biL - s ) ) & ( -(t_sint)s >> ( biL - 1 ) );
     u0 =  u0 << s;
 
     d1 = d >> biH;
-    d0 = d & 0xffff;
+    d0 = d & uint_halfword_mask;
 
     u0_msw = u0 >> biH;
-    u0_lsw = u0 & 0xffff;
+    u0_lsw = u0 & uint_halfword_mask;
 
     /*
      * Find the first quotient and remainder