summaryrefslogtreecommitdiff
path: root/gmp-h.in
diff options
context:
space:
mode:
authorKevin Ryde <user42@zip.com.au>2001-07-11 01:57:58 +0200
committerKevin Ryde <user42@zip.com.au>2001-07-11 01:57:58 +0200
commit7c1f932f813377f909972c1ce99d4e1f5b90d3ca (patch)
tree174674b0720672ddb1196674d6eca3be6e3099be /gmp-h.in
parenta9c64dd19d9e118bccf036f0ba55764f3283cd55 (diff)
downloadgmp-7c1f932f813377f909972c1ce99d4e1f5b90d3ca.tar.gz
* gmp-h.in (__GMPN_ADD_1 etc) [x86]: Don't use this on egcs 2.91.
Diffstat (limited to 'gmp-h.in')
-rw-r--r--gmp-h.in21
1 files changed, 11 insertions, 10 deletions
diff --git a/gmp-h.in b/gmp-h.in
index 29bd19264..1cd705df6 100644
--- a/gmp-h.in
+++ b/gmp-h.in
@@ -1397,6 +1397,9 @@ mpf_size (mpf_srcptr f)
about to be added to something then we miss the opportunity to do "adcl
$0, var", but that's inevitable since the carry flag can't be an output.
+ This code isn't used for egcs 2.91 since __GMPN_ADD_1 tickles some
+ reloader bugs (seen in 2.91.66 19990314 on redhat 6.1).
+
Possibilities:
An alternative to sbbl would be setc and let gcc convert QI to SI if
@@ -1407,7 +1410,8 @@ mpf_size (mpf_srcptr f)
single jnbe instead of two jumps, to perhaps save a BTB entry. The final
cout=-cout would become cout++. */
-#if defined (__GNUC__) && (defined (__i386__) || defined (__i486__)) \
+#if defined (__GNUC__) && ! (__GNUC__ == 2 && __GNUC_MINOR__ == 91) \
+ && (defined (__i386__) || defined (__i486__)) \
&& __GMP_BITS_PER_MP_LIMB == 32 && ! defined (NO_ASM)
#define __GMPN_AORS_1_INPLACE(cout, ptr, size, n, aors) \
@@ -1491,9 +1495,6 @@ mpf_size (mpf_srcptr f)
\
} while (0)
-/* The initializers for __dst etc here avoid a bug in egcs 2.91.66 19990314
- on redhat 6.1, which shows up in tests/mpn/t-aors_1.c check_add_1() as
- the size parameter to the asm block getting instead the src pointer. */
#define __GMPN_ADD_1(cout, dst, src, size, n) \
do { \
/* ASSERT ((size) >= 1); */ \
@@ -1511,9 +1512,9 @@ mpf_size (mpf_srcptr f)
} \
else \
{ \
- mp_ptr __dst = (dst); \
- mp_srcptr __src = (src); \
- mp_size_t __size = (size); \
+ mp_ptr __dst; \
+ mp_srcptr __src; \
+ mp_size_t __size; \
\
__asm__ __volatile__ \
(__GMP_ASM_L(top) ":\n" \
@@ -1531,9 +1532,9 @@ mpf_size (mpf_srcptr f)
"=&r" (__dst), \
"=&r" (__src), \
"=&rm" (__size) \
- : "1" (__dst), \
- "2" (__src), \
- "3" (__size), \
+ : "1" (dst), \
+ "2" (src), \
+ "3" (size), \
"0" (n) \
: "memory"); \
\