summaryrefslogtreecommitdiff
path: root/mpi/longlong.h
diff options
context:
space:
mode:
authorWerner Koch <wk@gnupg.org>2010-02-22 11:35:38 +0000
committerWerner Koch <wk@gnupg.org>2010-02-22 11:35:38 +0000
commita721bb9ed895d2a02f35748e131314d56410438e (patch)
tree6c92b16642cca7f0bf21bc906839eaa82d33774e /mpi/longlong.h
parentb299da47a6f733c2e28fd98b8f2e19261f3b2608 (diff)
downloadlibgcrypt-a721bb9ed895d2a02f35748e131314d56410438e.tar.gz
Fix for gcc 4.4 on mips
Diffstat (limited to 'mpi/longlong.h')
-rw-r--r--mpi/longlong.h21
1 files changed, 19 insertions, 2 deletions
diff --git a/mpi/longlong.h b/mpi/longlong.h
index 34bd50c9..b736d490 100644
--- a/mpi/longlong.h
+++ b/mpi/longlong.h
@@ -714,7 +714,15 @@ extern USItype __udiv_qrnnd ();
************** MIPS *****************
***************************************/
#if defined (__mips__) && W_TYPE_SIZE == 32
-#if __GNUC__ > 2 || __GNUC_MINOR__ >= 7
+#if (__GNUC__ >= 5) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)
+#define umul_ppmm(w1, w0, u, v) \
+ do { \
+ 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) \
__asm__ ("multu %2,%3" \
: "=l" ((USItype)(w0)), \
@@ -739,7 +747,16 @@ extern USItype __udiv_qrnnd ();
************** 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 __GNUC__ > 2 || __GNUC_MINOR__ >= 7
#define umul_ppmm(w1, w0, u, v) \
__asm__ ("dmultu %2,%3" \
: "=l" ((UDItype)(w0)), \