bcc847cca5b4562b7856034f2002a36c2a57e476
[packages.git] / utils / gnupg / patches / 001-mips_gcc4.4.patch
1 --- a/mpi/longlong.h
2 +++ b/mpi/longlong.h
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) \
11    do {                                                                  \
12 -    UDItype __ll = (UDItype)(u) * (v);                                  \
13 -    w1 = __ll >> 32;                                                    \
14 -    w0 = __ll;                                                          \
15 +    UDItype _r;                                                         \
16 +    _r = (UDItype) u * v;                                               \
17 +    (w1) = _r >> 32;                                                    \
18 +    (w0) = (USItype) _r;                                                \
19    } while (0)
20  #elif __GNUC__ > 2 || __GNUC_MINOR__ >= 7
21  #define umul_ppmm(w1, w0, u, v)                                         \
22 @@ -727,8 +728,8 @@ extern USItype __udiv_qrnnd ();
23  #else
24  #define umul_ppmm(w1, w0, u, v) \
25    __asm__ ("multu %2,%3 \n" \
26 -          "mflo %0 \n"     \
27 -          "mfhi %1"                                                        \
28 +          "mflo %0 \n"                                                 \
29 +          "mfhi %1"                                                    \
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)),                                        \
43 -            "d" ((UDItype)(v)))
44 -#else
45 -#define umul_ppmm(w1, w0, u, v) \
46 -  __asm__ ("dmultu %2,%3 \n"    \
47 -          "mflo %0 \n"         \
48 -          "mfhi %1"                                                        \
49 -          : "=d" ((UDItype)(w0)),                                      \
50 -            "=d" ((UDItype)(w1))                                       \
51 -          : "d" ((UDItype)(u)),                                        \
52 -            "d" ((UDItype)(v)))
53 -#endif
54 -#define UMUL_TIME 20
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)                                       \
59 +  do {                                                                  \
60 +    UTItype _r;                                                         \
61 +    _r = (UTItype) u * v;                                               \
62 +    (w1) = _r >> 64;                                                    \
63 +    (w0) = (UDItype) _r;                                                \
64 +  } while (0)
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)),                                     \
71 +                "d" ((UDItype)(v)))
72 +# else
73 +#  define umul_ppmm(w1, w0, u, v) \
74 +     __asm__ ("dmultu %2,%3 \n"    \
75 +              "mflo %0 \n"                                              \
76 +              "mfhi %1"                                                 \
77 +              : "=d" ((UDItype)(w0)),                                   \
78 +              "=d" ((UDItype)(w1))                                      \
79 +              : "d" ((UDItype)(u)),                                     \
80 +              "d" ((UDItype)(v)))
81 +# endif
82 +# define UMUL_TIME 20
83 +# define UDIV_TIME 140
84  #endif /* __mips__ */
85  
86