diff options
author | Kevin Ryde <user42@zip.com.au> | 2003-11-01 00:46:24 +0100 |
---|---|---|
committer | Kevin Ryde <user42@zip.com.au> | 2003-11-01 00:46:24 +0100 |
commit | 8774395c4010d6e35df30ad0efc1764beddfe1dd (patch) | |
tree | f5594eb2010b1fed6425102a76cb551b998c2268 /mpz/fac_ui.c | |
parent | 629d96ecf7492fcfcce9603707bbc30ef19b0055 (diff) | |
download | gmp-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.c | 35 |
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 |