[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