Date: Mon, 15 Jun 2015 14:32:01 -0700 From: Adrian Chadd <adrian@freebsd.org> To: Stanislav Sedov <stas@freebsd.org> Cc: "freebsd-mips@freebsd.org" <freebsd-mips@freebsd.org> Subject: Re: [rfc] fix umul_ppmm() in our libgcc Message-ID: <CAJ-VmokZJvFuLaCGOG34cCE7kCnMbR0E5zmAia045uxcg3tq5g@mail.gmail.com> In-Reply-To: <7895DD8F-6165-4EF9-AAE7-098C601470D8@freebsd.org> References: <CAJ-Vmonsmu5dGtWKhJchzZfSsVUjtwEVSEij4u6kwk64E0ZOXw@mail.gmail.com> <7895DD8F-6165-4EF9-AAE7-098C601470D8@freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
The error is unsupported constraints. '=h' (hi register) is unsupported as of some GCC > 4.2.1. -a On 15 June 2015 at 10:15, Stanislav Sedov <stas@freebsd.org> wrote: > >> On Jun 13, 2015, at 3:41 PM, Adrian Chadd <adrian@freebsd.org> wrote: >> >> 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__ */ > > This looks right to me in terms of functionality, but what is wrong > with the original code (multu)? That one seems correct as well. > > What error do you see when compiling it? > > -- > ST4096-RIPE > > >
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAJ-VmokZJvFuLaCGOG34cCE7kCnMbR0E5zmAia045uxcg3tq5g>