summaryrefslogtreecommitdiff
path: root/extra/gnupg/gnupg_1.4.11_mips_gcc4.4.patch
blob: 5fcbdc6285f4060b982ddd73a671ca7ec3a02fd0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
## mips_gcc4.4 by Werner Koch
##
## All lines beginning with `## DP:' are a description of the patch.
## DP: Build fails on mips(el) due to changes the removal 
## DP: of the 'h' constraint for MIPS in gcc-4.4.x versions.
## DP: <URL:http://lists.gnupg.org/pipermail/gnupg-devel/2010-October/025805.html>

diff -Nur gnupg-1.4.11.orig/mpi/longlong.h gnupg-1.4.11/mpi/longlong.h
--- gnupg-1.4.11.orig/mpi/longlong.h	2010-06-01 13:01:46.000000000 +0200
+++ gnupg-1.4.11/mpi/longlong.h	2010-10-28 22:01:19.000000000 +0200
@@ -710,12 +710,13 @@
  **************  MIPS  *****************
  ***************************************/
 #if defined (__mips__) && W_TYPE_SIZE == 32
-#if __GNUC__ > 4 || ( __GNUC__ == 4 && __GNUC_MINOR >= 4 )
-#define umul_ppmm(w1, w0, u, v)                                         \
+#if (__GNUC__ >= 5) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)
+#define umul_ppmm(w1, w0, u, v) \
   do {                                                                  \
-    UDItype __ll = (UDItype)(u) * (v);                                  \
-    w1 = __ll >> 32;                                                    \
-    w0 = __ll;                                                          \
+    UDItype _r;                                                         \
+    _r = (UDItype) u * v;                                               \
+    (w1) = _r >> 32;                                                    \
+    (w0) = (USItype) _r;                                                \
   } while (0)
 #elif __GNUC__ > 2 || __GNUC_MINOR__ >= 7
 #define umul_ppmm(w1, w0, u, v)                                         \
@@ -742,7 +743,16 @@
  **************  MIPS/64  **************
  ***************************************/
 #if (defined (__mips) && __mips >= 3) && W_TYPE_SIZE == 64
-#if __GNUC__ > 2 || __GNUC_MINOR__ >= 7
+# if (__GNUC__ >= 5) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)
+   typedef unsigned int UTItype __attribute__ ((mode (TI)));
+ #  define umul_ppmm(w1, w0, u, v)                                       \
+  do {                                                                  \
+    UTItype _r;                                                         \
+    _r = (UTItype) u * v;                                               \
+    (w1) = _r >> 64;                                                    \
+    (w0) = (UDItype) _r;                                                \
+  } while (0)
+# elif if __GNUC__ > 2 || __GNUC_MINOR__ >= 7
 #define umul_ppmm(w1, w0, u, v) \
   __asm__ ("dmultu %2,%3"                                               \
 	   : "=l" ((UDItype)(w0)),                                      \