From: Rongqing Li <rongqing.li@windriver.com>
To: <tege@gmplib.org>
Cc: gmp-discuss@gmplib.org, gmp-devel@gmplib.org,
Patches and discussions about the oe-core layer
<openembedded-core@lists.openembedded.org>
Subject: backport patches for gmp-4.x.x
Date: Tue, 29 Jul 2014 09:10:28 +0800 [thread overview]
Message-ID: <53D6F484.6070309@windriver.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 293 bytes --]
Torbjorn Granlund:
we am using the gmp-4.2.1, but compiling gmp failed on mips64
and 64bit userspace, I see the patch 12418[(mips, powerpc):
Provide assembly-free umul_ppmm for newer gcc] can fix it. but
it is under GPLv3;
Could you release this patch under GPLv2?
Thanks
-Roy
[-- Attachment #2: Provide-assembly-free-umul_ppmm-for-newer-gcc.patch --]
[-- Type: text/x-diff, Size: 3829 bytes --]
# HG changeset patch
# User Torbjorn Granlund <tege@gmplib.org>
# Date 1235947651 -3600
# Node ID 12a1d0bf21f09b05813edd5e19496ae65544cfab
# Parent 6411165312970e38a469d0236eff67ecc372223e
(mips, powerpc): Provide assembly-free umul_ppmm for newer gcc.
diff -r 641116531297 -r 12a1d0bf21f0 longlong.h
--- a/longlong.h Wed Feb 04 11:32:34 2009 +0100
+++ b/longlong.h Sun Mar 01 23:47:31 2009 +0100
@@ -1,7 +1,7 @@
/* longlong.h -- definitions for mixed size 32/64 bit arithmetic.
Copyright 1991, 1992, 1993, 1994, 1996, 1997, 1999, 2000, 2001, 2002, 2003,
-2004, 2005, 2007 Free Software Foundation, Inc.
+2004, 2005, 2007, 2008, 2009 Free Software Foundation, Inc.
This file is free software; you can redistribute it and/or modify it under the
terms of the GNU Lesser General Public License as published by the Free
@@ -1021,10 +1021,19 @@
#endif /* __m88000__ */
#if defined (__mips) && W_TYPE_SIZE == 32
-#if __GNUC__ > 2 || __GNUC_MINOR__ >= 7
+#if __GMP_GNUC_PREREQ (4,4)
+#define umul_ppmm(w1, w0, u, v) \
+ do { \
+ UDItype __ll = (UDItype)(u) * (v); \
+ w1 = __ll >> 32; \
+ w0 = __ll; \
+ } while (0)
+#endif
+#if !defined (umul_ppmm) && __GMP_GNUC_PREREQ (2,7)
#define umul_ppmm(w1, w0, u, v) \
__asm__ ("multu %2,%3" : "=l" (w0), "=h" (w1) : "d" (u), "d" (v))
-#else
+#endif
+#if !defined (umul_ppmm)
#define umul_ppmm(w1, w0, u, v) \
__asm__ ("multu %2,%3\n\tmflo %0\n\tmfhi %1" \
: "=d" (w0), "=d" (w1) : "d" (u), "d" (v))
@@ -1034,10 +1043,20 @@
#endif /* __mips */
#if (defined (__mips) && __mips >= 3) && W_TYPE_SIZE == 64
-#if __GNUC__ > 2 || __GNUC_MINOR__ >= 7
+#if __GMP_GNUC_PREREQ (4,4)
+#define umul_ppmm(w1, w0, u, v) \
+ do { \
+ typedef unsigned int __ll_UTItype __attribute__((mode(TI))); \
+ __ll_UTItype __ll = (__ll_UTItype)(u) * (v); \
+ w1 = __ll >> 64; \
+ w0 = __ll; \
+ } while (0)
+#endif
+#if !defined (umul_ppmm) && __GMP_GNUC_PREREQ (2,7)
#define umul_ppmm(w1, w0, u, v) \
__asm__ ("dmultu %2,%3" : "=l" (w0), "=h" (w1) : "d" (u), "d" (v))
-#else
+#endif
+#if !defined (umul_ppmm)
#define umul_ppmm(w1, w0, u, v) \
__asm__ ("dmultu %2,%3\n\tmflo %0\n\tmfhi %1" \
: "=d" (w0), "=d" (w1) : "d" (u), "d" (v))
@@ -1140,12 +1159,22 @@
__asm__ ("{cntlz|cntlzw} %0,%1" : "=r" (count) : "r" (x))
#define COUNT_LEADING_ZEROS_0 32
#if HAVE_HOST_CPU_FAMILY_powerpc
+#if __GMP_GNUC_PREREQ (4,4)
+#define umul_ppmm(w1, w0, u, v) \
+ do { \
+ UDItype __ll = (UDItype)(u) * (v); \
+ w1 = __ll >> 32; \
+ w0 = __ll; \
+ } while (0)
+#endif
+#if !defined (umul_ppmm)
#define umul_ppmm(ph, pl, m0, m1) \
do { \
USItype __m0 = (m0), __m1 = (m1); \
__asm__ ("mulhwu %0,%1,%2" : "=r" (ph) : "%r" (m0), "r" (m1)); \
(pl) = __m0 * __m1; \
} while (0)
+#endif
#define UMUL_TIME 15
#define smul_ppmm(ph, pl, m0, m1) \
do { \
@@ -1229,12 +1258,23 @@
#define count_leading_zeros(count, x) \
__asm__ ("cntlzd %0,%1" : "=r" (count) : "r" (x))
#define COUNT_LEADING_ZEROS_0 64
+#if __GMP_GNUC_PREREQ (4,4)
+#define umul_ppmm(w1, w0, u, v) \
+ do { \
+ typedef unsigned int __ll_UTItype __attribute__((mode(TI))); \
+ __ll_UTItype __ll = (__ll_UTItype)(u) * (v); \
+ w1 = __ll >> 64; \
+ w0 = __ll; \
+ } while (0)
+#endif
+#if !defined (umul_ppmm)
#define umul_ppmm(ph, pl, m0, m1) \
do { \
UDItype __m0 = (m0), __m1 = (m1); \
__asm__ ("mulhdu %0,%1,%2" : "=r" (ph) : "%r" (m0), "r" (m1)); \
(pl) = __m0 * __m1; \
} while (0)
+#endif
#define UMUL_TIME 15
#define smul_ppmm(ph, pl, m0, m1) \
do { \
next reply other threads:[~2014-07-29 1:10 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-29 1:10 Rongqing Li [this message]
-- strict thread matches above, loose matches on Subject: below --
2014-07-29 1:16 backport patches for gmp-4.x.x Rongqing Li
[not found] <86wqaw5000.fsf@shell.gmplib.org>
2014-07-31 9:29 ` Rongqing Li
2014-07-31 15:38 ` Khem Raj
2014-08-04 2:14 ` Rongqing Li
2014-08-04 3:02 ` Khem Raj
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=53D6F484.6070309@windriver.com \
--to=rongqing.li@windriver.com \
--cc=gmp-devel@gmplib.org \
--cc=gmp-discuss@gmplib.org \
--cc=openembedded-core@lists.openembedded.org \
--cc=tege@gmplib.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox