diff options
author | Werner Koch <wk@gnupg.org> | 2010-02-22 11:35:38 +0000 |
---|---|---|
committer | Werner Koch <wk@gnupg.org> | 2010-02-22 11:35:38 +0000 |
commit | a721bb9ed895d2a02f35748e131314d56410438e (patch) | |
tree | 6c92b16642cca7f0bf21bc906839eaa82d33774e /mpi/longlong.h | |
parent | b299da47a6f733c2e28fd98b8f2e19261f3b2608 (diff) | |
download | libgcrypt-a721bb9ed895d2a02f35748e131314d56410438e.tar.gz |
Fix for gcc 4.4 on mips
Diffstat (limited to 'mpi/longlong.h')
-rw-r--r-- | mpi/longlong.h | 21 |
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)), \ |