Index: gcc/gmp/mpz/inp_raw.c |
diff --git a/gcc/gmp/mpz/inp_raw.c b/gcc/gmp/mpz/inp_raw.c |
deleted file mode 100644 |
index 497207e60a41a99355059f8516479fce41d46f69..0000000000000000000000000000000000000000 |
--- a/gcc/gmp/mpz/inp_raw.c |
+++ /dev/null |
@@ -1,163 +0,0 @@ |
-/* mpz_inp_raw -- read an mpz_t in raw format. |
- |
-Copyright 2001, 2002, 2005 Free Software Foundation, Inc. |
- |
-This file is part of the GNU MP Library. |
- |
-The GNU MP Library is free software; you can redistribute it and/or modify |
-it under the terms of the GNU Lesser General Public License as published by |
-the Free Software Foundation; either version 3 of the License, or (at your |
-option) any later version. |
- |
-The GNU MP Library is distributed in the hope that it will be useful, but |
-WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY |
-or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public |
-License for more details. |
- |
-You should have received a copy of the GNU Lesser General Public License |
-along with the GNU MP Library. If not, see http://www.gnu.org/licenses/. */ |
- |
-#include <stdio.h> |
-#include "gmp.h" |
-#include "gmp-impl.h" |
- |
- |
-/* NTOH_LIMB_FETCH fetches a limb which is in network byte order (ie. big |
- endian) and produces a normal host byte order result. */ |
- |
-#if HAVE_LIMB_BIG_ENDIAN |
-#define NTOH_LIMB_FETCH(limb, src) do { (limb) = *(src); } while (0) |
-#endif |
- |
-#if HAVE_LIMB_LITTLE_ENDIAN |
-#define NTOH_LIMB_FETCH(limb, src) BSWAP_LIMB_FETCH (limb, src) |
-#endif |
- |
-#ifndef NTOH_LIMB_FETCH |
-#define NTOH_LIMB_FETCH(limb, src) \ |
- do { \ |
- const unsigned char *__p = (const unsigned char *) (src); \ |
- 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 |
- |
- |
-/* Enhancement: The byte swap loop ought to be safe to vectorize on Cray |
- etc, but someone who knows what they're doing needs to check it. */ |
- |
-size_t |
-mpz_inp_raw (mpz_ptr x, FILE *fp) |
-{ |
- unsigned char csize_bytes[4]; |
- mp_size_t csize, abs_xsize, i; |
- size_t abs_csize; |
- char *cp; |
- mp_ptr xp, sp, ep; |
- mp_limb_t slimb, elimb; |
- |
- if (fp == 0) |
- fp = stdin; |
- |
- /* 4 bytes for size */ |
- if (fread (csize_bytes, sizeof (csize_bytes), 1, fp) != 1) |
- return 0; |
- |
- csize = |
- ( (mp_size_t) csize_bytes[0] << 24) |
- + ((mp_size_t) csize_bytes[1] << 16) |
- + ((mp_size_t) csize_bytes[2] << 8) |
- + ((mp_size_t) csize_bytes[3]); |
- |
- /* Sign extend if necessary. |
- Could write "csize -= ((csize & 0x80000000L) << 1)", but that tickles a |
- bug in gcc 3.0 for powerpc64 on AIX. */ |
- if (sizeof (csize) > 4 && csize & 0x80000000L) |
- csize -= 0x80000000L << 1; |
- |
- abs_csize = ABS (csize); |
- |
- /* round up to a multiple of limbs */ |
- abs_xsize = (abs_csize*8 + GMP_NUMB_BITS-1) / GMP_NUMB_BITS; |
- |
- if (abs_xsize != 0) |
- { |
- MPZ_REALLOC (x, abs_xsize); |
- xp = PTR(x); |
- |
- /* Get limb boundaries right in the read, for the benefit of the |
- non-nails case. */ |
- xp[0] = 0; |
- cp = (char *) (xp + abs_xsize) - abs_csize; |
- if (fread (cp, abs_csize, 1, fp) != 1) |
- return 0; |
- |
- if (GMP_NAIL_BITS == 0) |
- { |
- /* Reverse limbs to least significant first, and byte swap. If |
- abs_xsize is odd then on the last iteration elimb and slimb are |
- the same. It doesn't seem extra code to handle that case |
- separately, to save an NTOH. */ |
- sp = xp; |
- ep = xp + abs_xsize-1; |
- for (i = 0; i < (abs_xsize+1)/2; i++) |
- { |
- NTOH_LIMB_FETCH (elimb, ep); |
- NTOH_LIMB_FETCH (slimb, sp); |
- *sp++ = elimb; |
- *ep-- = slimb; |
- } |
- } |
- else |
- { |
- /* It ought to be possible to do the transformation in-place, but |
- for now it's easier to use an extra temporary area. */ |
- mp_limb_t byte, limb; |
- int bits; |
- mp_size_t tpos; |
- mp_ptr tp; |
- TMP_DECL; |
- |
- TMP_MARK; |
- tp = TMP_ALLOC_LIMBS (abs_xsize); |
- limb = 0; |
- bits = 0; |
- tpos = 0; |
- for (i = abs_csize-1; i >= 0; i--) |
- { |
- byte = (unsigned char) cp[i]; |
- limb |= (byte << bits); |
- bits += 8; |
- if (bits >= GMP_NUMB_BITS) |
- { |
- ASSERT (tpos < abs_xsize); |
- tp[tpos++] = limb & GMP_NUMB_MASK; |
- bits -= GMP_NUMB_BITS; |
- ASSERT (bits < 8); |
- limb = byte >> (8 - bits); |
- } |
- } |
- if (bits != 0) |
- { |
- ASSERT (tpos < abs_xsize); |
- tp[tpos++] = limb; |
- } |
- ASSERT (tpos == abs_xsize); |
- |
- MPN_COPY (xp, tp, abs_xsize); |
- TMP_FREE; |
- } |
- |
- /* GMP 1.x mpz_out_raw wrote high zero bytes, strip any high zero |
- limbs resulting from this. Should be a non-zero value here, but |
- for safety don't assume that. */ |
- MPN_NORMALIZE (xp, abs_xsize); |
- } |
- |
- SIZ(x) = (csize >= 0 ? abs_xsize : -abs_xsize); |
- return abs_csize + 4; |
-} |