| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 | --- libgcrypt-1.4.4.orig/mpi/longlong.h	2008-08-19 17:20:03.000000000 +0200+++ libgcrypt-1.4.4/mpi/longlong.h	2009-06-14 19:45:28.000000000 +0200@@ -710,18 +710,35 @@ extern USItype __udiv_qrnnd (); #endif /* __m88110__ */ #endif /* __m88000__ */ +/* Test for gcc >= maj.min, as per __GNUC_PREREQ in glibc */+#if defined (__GNUC__) && defined (__GNUC_MINOR__)+#define __GNUC_PREREQ(maj, min) \+  ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))+#else+#define __GNUC_PREREQ(maj, min)  0+#endif+ /***************************************  **************  MIPS  *****************  ***************************************/ #if defined (__mips__) && W_TYPE_SIZE == 32-#if __GNUC__ > 2 || __GNUC_MINOR__ >= 7+#if __GNUC_PREREQ (4,4)+#define umul_ppmm(w1, w0, u, v) \+  do {                                                                 \+    UDItype __ll = (UDItype)(u) * (v);                                 \+    w1 = __ll >> 32;                                                   \+    w0 = __ll;                                                         \+  } while (0)+#endif+#if !defined (umul_ppmm) && __GNUC_PREREQ (2,7) #define umul_ppmm(w1, w0, u, v) \   __asm__ ("multu %2,%3"                                                \ 	   : "=l" ((USItype)(w0)),                                      \ 	     "=h" ((USItype)(w1))                                       \ 	   : "d" ((USItype)(u)),                                        \ 	     "d" ((USItype)(v)))-#else+#endif+#if !defined (umul_ppmm) #define umul_ppmm(w1, w0, u, v) \   __asm__ ("multu %2,%3 \n" \ 	   "mflo %0 \n"     \@@ -739,14 +756,24 @@ extern USItype __udiv_qrnnd ();  **************  MIPS/64  **************  ***************************************/ #if (defined (__mips) && __mips >= 3) && W_TYPE_SIZE == 64-#if __GNUC__ > 2 || __GNUC_MINOR__ >= 7+#if __GNUC_PREREQ (4,4)+#define umul_ppmm(w1, w0, u, v) \+  do {                                                                 \+    typedef unsigned int __ll_UTItype __attribute__((mode(TI)));       \+    __ll_UTItype __ll = (__ll_UTItype)(u) * (v);                       \+    w1 = __ll >> 64;                                                   \+    w0 = __ll;                                                         \+  } while (0)+#endif+#if !defined (umul_ppmm) && __GNUC_PREREQ (2,7) #define umul_ppmm(w1, w0, u, v) \   __asm__ ("dmultu %2,%3"                                               \ 	   : "=l" ((UDItype)(w0)),                                      \ 	     "=h" ((UDItype)(w1))                                       \ 	   : "d" ((UDItype)(u)),                                        \ 	     "d" ((UDItype)(v)))-#else+#endif+#if !defined (umul_ppmm) #define umul_ppmm(w1, w0, u, v) \   __asm__ ("dmultu %2,%3 \n"    \ 	   "mflo %0 \n"         \
 |