3 @@ -710,12 +710,13 @@ extern USItype __udiv_qrnnd ();
4 ************** MIPS *****************
5 ***************************************/
6 #if defined (__mips__) && W_TYPE_SIZE == 32
7 -#if __GNUC__ > 4 || ( __GNUC__ == 4 && __GNUC_MINOR >= 4 )
8 -#define umul_ppmm(w1, w0, u, v) \
9 +#if (__GNUC__ >= 5) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)
10 +#define umul_ppmm(w1, w0, u, v) \
12 - UDItype __ll = (UDItype)(u) * (v); \
16 + _r = (UDItype) u * v; \
18 + (w0) = (USItype) _r; \
20 #elif __GNUC__ > 2 || __GNUC_MINOR__ >= 7
21 #define umul_ppmm(w1, w0, u, v) \
22 @@ -727,8 +728,8 @@ extern USItype __udiv_qrnnd ();
24 #define umul_ppmm(w1, w0, u, v) \
25 __asm__ ("multu %2,%3 \n" \
30 : "=d" ((USItype)(w0)), \
31 "=d" ((USItype)(w1)) \
32 : "d" ((USItype)(u)), \
33 @@ -742,25 +743,34 @@ extern USItype __udiv_qrnnd ();
34 ************** MIPS/64 **************
35 ***************************************/
36 #if (defined (__mips) && __mips >= 3) && W_TYPE_SIZE == 64
37 -#if __GNUC__ > 2 || __GNUC_MINOR__ >= 7
38 -#define umul_ppmm(w1, w0, u, v) \
39 - __asm__ ("dmultu %2,%3" \
40 - : "=l" ((UDItype)(w0)), \
41 - "=h" ((UDItype)(w1)) \
42 - : "d" ((UDItype)(u)), \
45 -#define umul_ppmm(w1, w0, u, v) \
46 - __asm__ ("dmultu %2,%3 \n" \
49 - : "=d" ((UDItype)(w0)), \
50 - "=d" ((UDItype)(w1)) \
51 - : "d" ((UDItype)(u)), \
55 -#define UDIV_TIME 140
56 +# if (__GNUC__ >= 5) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)
57 + typedef unsigned int UTItype __attribute__ ((mode (TI)));
58 +# define umul_ppmm(w1, w0, u, v) \
61 + _r = (UTItype) u * v; \
63 + (w0) = (UDItype) _r; \
65 +# elif if __GNUC__ > 2 || __GNUC_MINOR__ >= 7
66 +# define umul_ppmm(w1, w0, u, v) \
67 + __asm__ ("dmultu %2,%3" \
68 + : "=l" ((UDItype)(w0)), \
69 + "=h" ((UDItype)(w1)) \
70 + : "d" ((UDItype)(u)), \
73 +# define umul_ppmm(w1, w0, u, v) \
74 + __asm__ ("dmultu %2,%3 \n" \
77 + : "=d" ((UDItype)(w0)), \
78 + "=d" ((UDItype)(w1)) \
79 + : "d" ((UDItype)(u)), \
82 +# define UMUL_TIME 20
83 +# define UDIV_TIME 140