Skip site navigation (1)Skip section navigation (2)
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>