diff options
Diffstat (limited to 'mpi')
-rw-r--r-- | mpi/ChangeLog | 5 | ||||
-rw-r--r-- | mpi/longlong.h | 11 |
2 files changed, 14 insertions, 2 deletions
diff --git a/mpi/ChangeLog b/mpi/ChangeLog index 6209b1ecc..509f2f424 100644 --- a/mpi/ChangeLog +++ b/mpi/ChangeLog @@ -1,3 +1,8 @@ +2010-06-01 Werner Koch <[email protected]> + + * longlong.h (umul_ppmm) <__mips__>: Add code for gcc 4.4. This + fixes bug#1231. + 2009-12-09 Werner Koch <[email protected]> * config.links: Remove asm modules for all sparc64. This is diff --git a/mpi/longlong.h b/mpi/longlong.h index ba437f217..aeecf1e68 100644 --- a/mpi/longlong.h +++ b/mpi/longlong.h @@ -710,8 +710,15 @@ extern USItype __udiv_qrnnd (); ************** MIPS ***************** ***************************************/ #if defined (__mips__) && W_TYPE_SIZE == 32 -#if __GNUC__ > 2 || __GNUC_MINOR__ >= 7 -#define umul_ppmm(w1, w0, u, v) \ +#if __GNUC__ > 4 || ( __GNUC__ == 4 && __GNUC_MINOR >= 4 ) +#define umul_ppmm(w1, w0, u, v) \ + do { \ + UDItype __ll = (UDItype)(u) * (v); \ + w1 = __ll >> 32; \ + w0 = __ll; \ + } while (0) +#elif __GNUC__ > 2 || __GNUC_MINOR__ >= 7 +#define umul_ppmm(w1, w0, u, v) \ __asm__ ("multu %2,%3" \ : "=l" ((USItype)(w0)), \ "=h" ((USItype)(w1)) \ |