Date: Sat, 13 Jun 2015 15:41:34 -0700 From: Adrian Chadd <adrian@freebsd.org> To: "freebsd-mips@freebsd.org" <freebsd-mips@freebsd.org> Subject: [rfc] fix umul_ppmm() in our libgcc Message-ID: <CAJ-Vmonsmu5dGtWKhJchzZfSsVUjtwEVSEij4u6kwk64E0ZOXw@mail.gmail.com>
next in thread | raw e-mail | index | archive | help
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__ */
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAJ-Vmonsmu5dGtWKhJchzZfSsVUjtwEVSEij4u6kwk64E0ZOXw>
