~ubuntu-branches/ubuntu/intrepid/ecl/intrepid

« back to all changes in this revision

Viewing changes to src/gmp/mpz/inp_raw.c

  • Committer: Bazaar Package Importer
  • Author(s): Peter Van Eynde
  • Date: 2007-04-09 11:51:51 UTC
  • mfrom: (1.1.3 upstream)
  • Revision ID: james.westby@ubuntu.com-20070409115151-ql8cr0kalzx1jmla
Tags: 0.9i-20070324-2
Upload to unstable. 

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
/* mpz_inp_raw -- read an mpz_t in raw format.
2
2
 
3
 
Copyright 2001, 2002 Free Software Foundation, Inc.
 
3
Copyright 2001, 2002, 2005 Free Software Foundation, Inc.
4
4
 
5
5
This file is part of the GNU MP Library.
6
6
 
16
16
 
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. */
21
21
 
22
22
#include <stdio.h>
23
23
#include "gmp.h"
31
31
#define NTOH_LIMB_FETCH(limb, src)  do { (limb) = *(src); } while (0)
32
32
#endif
33
33
 
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)
39
36
#endif
40
37
 
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)
44
 
#endif
45
 
#if BITS_PER_MP_LIMB == 16
46
 
#define NTOH_LIMB_FETCH(limb, src)                              \
47
 
  do {                                                          \
48
 
    const unsigned char  *__p = (const unsigned char *) (src);  \
49
 
    (limb) =                                                    \
50
 
      ( (mp_limb_t) __p[0] << 8)                                \
51
 
      + (mp_limb_t) __p[1];                                     \
52
 
  } while (0)
53
 
#endif
54
 
#if BITS_PER_MP_LIMB == 32
55
 
#define NTOH_LIMB_FETCH(limb, src)                              \
56
 
  do {                                                          \
57
 
    const unsigned char  *__p = (const unsigned char *) (src);  \
58
 
    (limb) =                                                    \
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];                                    \
63
 
  } while (0)
64
 
#endif
65
 
#if ! defined (NTOH_LIMB_FETCH) && BITS_PER_MP_LIMB == 64
66
 
#define NTOH_LIMB_FETCH(limb, src)                              \
67
 
  do {                                                          \
68
 
    const unsigned char  *__p = (const unsigned char *) (src);  \
69
 
    (limb) =                                                    \
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];                                    \
78
 
  } while (0)
79
 
#endif
 
38
#ifndef NTOH_LIMB_FETCH
 
39
#define NTOH_LIMB_FETCH(limb, src)                              \
 
40
  do {                                                          \
 
41
    const unsigned char  *__p = (const unsigned char *) (src);  \
 
42
    mp_limb_t  __limb;                                          \
 
43
    int        __i;                                             \
 
44
    __limb = 0;                                                 \
 
45
    for (__i = 0; __i < BYTES_PER_MP_LIMB; __i++)               \
 
46
      __limb = (__limb << 8) | __p[__i];                        \
 
47
    (limb) = __limb;                                            \
 
48
  } while (0)
80
49
#endif
81
50
 
82
51
 
153
122
          int        bits;
154
123
          mp_size_t  tpos;
155
124
          mp_ptr     tp;
156
 
          TMP_DECL (marker);
 
125
          TMP_DECL;
157
126
 
158
 
          TMP_MARK (marker);
 
127
          TMP_MARK;
159
128
          tp = TMP_ALLOC_LIMBS (abs_xsize);
160
129
          limb = 0;
161
130
          bits = 0;
182
151
          ASSERT (tpos == abs_xsize);
183
152
 
184
153
          MPN_COPY (xp, tp, abs_xsize);
185
 
          TMP_FREE (marker);
 
154
          TMP_FREE;
186
155
        }
187
156
 
188
157
      /* GMP 1.x mpz_out_raw wrote high zero bytes, strip any high zero