summaryrefslogtreecommitdiff
path: root/mpz/inp_raw.c
diff options
context:
space:
mode:
authorKevin Ryde <user42@zip.com.au>2002-07-17 01:39:11 +0200
committerKevin Ryde <user42@zip.com.au>2002-07-17 01:39:11 +0200
commitc3e6632346c452f9d85ab71c7b0cb60191371da8 (patch)
tree674c7c73a43a57b7e44e3d5c35c82d9a89c21103 /mpz/inp_raw.c
parent527300103510dc24ecadfbe28886359eb438c6b0 (diff)
downloadgmp-c3e6632346c452f9d85ab71c7b0cb60191371da8.tar.gz
* mpz/inp_raw.c (NTOH_LIMB_FETCH): Use simple generic default, since
endianness detection is now cross-compile friendly.
Diffstat (limited to 'mpz/inp_raw.c')
-rw-r--r--mpz/inp_raw.c45
1 files changed, 7 insertions, 38 deletions
diff --git a/mpz/inp_raw.c b/mpz/inp_raw.c
index 58a8b9fc9..4bb89b18b 100644
--- a/mpz/inp_raw.c
+++ b/mpz/inp_raw.c
@@ -31,53 +31,22 @@ MA 02111-1307, USA. */
#define NTOH_LIMB_FETCH(limb, src) do { (limb) = *(src); } while (0)
#endif
-/* The generic implementations below very likely come out as lots of
- separate byte fetches, so if we know the host is little endian then
- instead use a single load and a purely arithmetic BSWAP_LIMB. */
#if HAVE_LIMB_LITTLE_ENDIAN
#define NTOH_LIMB_FETCH(limb, src) BSWAP_LIMB_FETCH (limb, src)
#endif
-#if ! defined (NTOH_LIMB_FETCH)
-#if BITS_PER_MP_LIMB == 8
-#define NTOH_LIMB_FETCH(limb, src) do { (limb) = *(src); } while (0)
-#endif
-#if BITS_PER_MP_LIMB == 16
-#define NTOH_LIMB_FETCH(limb, src) \
- do { \
- const unsigned char *__p = (const unsigned char *) (src); \
- (limb) = \
- ( (mp_limb_t) __p[0] << 8) \
- + (mp_limb_t) __p[1]; \
- } while (0)
-#endif
-#if BITS_PER_MP_LIMB == 32
+#ifndef NTOH_LIMB_FETCH
#define NTOH_LIMB_FETCH(limb, src) \
do { \
const unsigned char *__p = (const unsigned char *) (src); \
- (limb) = \
- ( (mp_limb_t) __p[0] << 24) \
- + ((mp_limb_t) __p[1] << 16) \
- + ((mp_limb_t) __p[2] << 8) \
- + (mp_limb_t) __p[3]; \
+ mp_limb_t __limb; \
+ int __i; \
+ __limb = 0; \
+ for (__i = 0; __i < BYTES_PER_MP_LIMB; __i++) \
+ __limb = (__limb << 8) | __p[__i]; \
+ (limb) = __limb; \
} while (0)
#endif
-#if ! defined (NTOH_LIMB_FETCH) && BITS_PER_MP_LIMB == 64
-#define NTOH_LIMB_FETCH(limb, src) \
- do { \
- const unsigned char *__p = (const unsigned char *) (src); \
- (limb) = \
- ( (mp_limb_t) __p[0] << 56) \
- + ((mp_limb_t) __p[1] << 48) \
- + ((mp_limb_t) __p[2] << 40) \
- + ((mp_limb_t) __p[3] << 32) \
- + ((mp_limb_t) __p[4] << 24) \
- + ((mp_limb_t) __p[5] << 16) \
- + ((mp_limb_t) __p[6] << 8) \
- + (mp_limb_t) __p[7]; \
- } while (0)
-#endif
-#endif
/* Enhancement: The byte swap loop ought to be safe to vectorize on Cray