1
1
/* mpz_inp_raw -- read an mpz_t in raw format.
3
Copyright 2001, 2002 Free Software Foundation, Inc.
3
Copyright 2001, 2002, 2005 Free Software Foundation, Inc.
5
5
This file is part of the GNU MP Library.
17
17
You should have received a copy of the GNU Lesser General Public License
18
18
along with the GNU MP Library; see the file COPYING.LIB. If not, write to
19
the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
20
MA 02111-1307, USA. */
19
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
20
MA 02110-1301, USA. */
31
31
#define NTOH_LIMB_FETCH(limb, src) do { (limb) = *(src); } while (0)
34
/* The generic implementations below very likely come out as lots of
35
separate byte fetches, so if we know the host is little endian then
36
instead use a single load and a purely arithmetic BSWAP_LIMB. */
37
34
#if HAVE_LIMB_LITTLE_ENDIAN
38
35
#define NTOH_LIMB_FETCH(limb, src) BSWAP_LIMB_FETCH (limb, src)
41
#if ! defined (NTOH_LIMB_FETCH)
42
#if BITS_PER_MP_LIMB == 8
43
#define NTOH_LIMB_FETCH(limb, src) do { (limb) = *(src); } while (0)
45
#if BITS_PER_MP_LIMB == 16
46
#define NTOH_LIMB_FETCH(limb, src) \
48
const unsigned char *__p = (const unsigned char *) (src); \
50
( (mp_limb_t) __p[0] << 8) \
51
+ (mp_limb_t) __p[1]; \
54
#if BITS_PER_MP_LIMB == 32
55
#define NTOH_LIMB_FETCH(limb, src) \
57
const unsigned char *__p = (const unsigned char *) (src); \
59
( (mp_limb_t) __p[0] << 24) \
60
+ ((mp_limb_t) __p[1] << 16) \
61
+ ((mp_limb_t) __p[2] << 8) \
62
+ (mp_limb_t) __p[3]; \
65
#if ! defined (NTOH_LIMB_FETCH) && BITS_PER_MP_LIMB == 64
66
#define NTOH_LIMB_FETCH(limb, src) \
68
const unsigned char *__p = (const unsigned char *) (src); \
70
( (mp_limb_t) __p[0] << 56) \
71
+ ((mp_limb_t) __p[1] << 48) \
72
+ ((mp_limb_t) __p[2] << 40) \
73
+ ((mp_limb_t) __p[3] << 32) \
74
+ ((mp_limb_t) __p[4] << 24) \
75
+ ((mp_limb_t) __p[5] << 16) \
76
+ ((mp_limb_t) __p[6] << 8) \
77
+ (mp_limb_t) __p[7]; \
38
#ifndef NTOH_LIMB_FETCH
39
#define NTOH_LIMB_FETCH(limb, src) \
41
const unsigned char *__p = (const unsigned char *) (src); \
45
for (__i = 0; __i < BYTES_PER_MP_LIMB; __i++) \
46
__limb = (__limb << 8) | __p[__i]; \
182
151
ASSERT (tpos == abs_xsize);
184
153
MPN_COPY (xp, tp, abs_xsize);
188
157
/* GMP 1.x mpz_out_raw wrote high zero bytes, strip any high zero