[rfc] fix umul_ppmm() in our libgcc

Adrian Chadd adrian at freebsd.org
Sat Jun 13 22:41:35 UTC 2015


Hi,

our libgcc in -base is very .. old. It chokes when compiling for
mips32. This patch seems to do the right thing.

Does anyone have any positive/negative feedback?

Thanks,


-adrian


Index: contrib/gcc/longlong.h
===================================================================
--- contrib/gcc/longlong.h      (revision 284090)
+++ contrib/gcc/longlong.h      (working copy)
@@ -584,11 +584,11 @@

 #if defined (__mips__) && W_TYPE_SIZE == 32
 #define umul_ppmm(w1, w0, u, v) \
-  __asm__ ("multu %2,%3"                                               \
-          : "=l" ((USItype) (w0)),                                     \
-            "=h" ((USItype) (w1))                                      \
-          : "d" ((USItype) (u)),                                       \
-            "d" ((USItype) (v)))
+       do {                                                            \
+        UDItype __ll = (UDItype)(u) * (v);                             \
+        w1 = __ll >> 32;                                               \
+        w0 = __ll;                                                     \
+       } while (0)
 #define UMUL_TIME 10
 #define UDIV_TIME 100
 #endif /* __mips__ */


More information about the freebsd-mips mailing list