summaryrefslogtreecommitdiff
path: root/mpz/fac_ui.c
diff options
context:
space:
mode:
authorKevin Ryde <user42@zip.com.au>2003-11-01 00:46:24 +0100
committerKevin Ryde <user42@zip.com.au>2003-11-01 00:46:24 +0100
commit8774395c4010d6e35df30ad0efc1764beddfe1dd (patch)
treef5594eb2010b1fed6425102a76cb551b998c2268 /mpz/fac_ui.c
parent629d96ecf7492fcfcce9603707bbc30ef19b0055 (diff)
downloadgmp-8774395c4010d6e35df30ad0efc1764beddfe1dd.tar.gz
* mpz/fac_ui.c (BSWAP_ULONG) [limb==2*long]: Remove this case, it
provokes code gen problems on HP cc. (BSWAP_ULONG) [generic]: Rename __dst variable to avoid conflicts with BITREV_ULONG. Diagnosed by Jason Moxham.
Diffstat (limited to 'mpz/fac_ui.c')
-rw-r--r--mpz/fac_ui.c35
1 files changed, 16 insertions, 19 deletions
diff --git a/mpz/fac_ui.c b/mpz/fac_ui.c
index f676c6d20..2d7ea86fa 100644
--- a/mpz/fac_ui.c
+++ b/mpz/fac_ui.c
@@ -69,27 +69,24 @@ static void ap_product_small _PROTO ((mpz_t ret, mp_limb_t start, mp_limb_t step
#define BSWAP_ULONG(x,y) BSWAP_LIMB(x,y)
#endif
-#if BITS_PER_ULONG*2==BITS_PER_MP_LIMB
-#define BSWAP_ULONG(x,y) \
-do{mp_limb_t __src=(y); \
- BSWAP_LIMB(__src,__src); \
- __src>>=BITS_PER_ULONG; \
- (x)=__src; \
- }while(0)
-#endif
+/* We used to have a case here for limb==2*long, doing a BSWAP_LIMB followed
+ by a shift down to get the high part. But it provoked incorrect code
+ from "HP aC++/ANSI C B3910B A.05.52 [Sep 05 2003]" in ILP32 mode. This
+ case would have been nice for gcc ia64 where BSWAP_LIMB is a mux1, but we
+ can get that directly muxing a 4-byte ulong if it matters enough. */
#if ! defined (BSWAP_ULONG)
-#define BSWAP_ULONG(dst, src) \
- do { \
- unsigned long __bswapl_src = (src); \
- unsigned long __dst = 0; \
- int __i; \
- for (__i = 0; __i < sizeof(unsigned long); __i++) \
- { \
- __dst = (__dst << 8) | (__bswapl_src & 0xFF); \
- __bswapl_src >>= 8; \
- } \
- (dst) = __dst; \
+#define BSWAP_ULONG(dst, src) \
+ do { \
+ unsigned long __bswapl_src = (src); \
+ unsigned long __bswapl_dst = 0; \
+ int __i; \
+ for (__i = 0; __i < sizeof(unsigned long); __i++) \
+ { \
+ __bswapl_dst = (__bswapl_dst << 8) | (__bswapl_src & 0xFF); \
+ __bswapl_src >>= 8; \
+ } \
+ (dst) = __bswapl_dst; \
} while (0)
#endif