summaryrefslogtreecommitdiff
path: root/mpn
diff options
context:
space:
mode:
authorKevin Ryde <user42@zip.com.au>2002-04-16 02:10:32 +0200
committerKevin Ryde <user42@zip.com.au>2002-04-16 02:10:32 +0200
commit8bb056272a954141896d1e23cdb72f5e4fb81100 (patch)
tree208d5ee62ffe9c23a48ce5a30b542e8d8cfe1cd5 /mpn
parenta660b61160d66f7cda0b2e09f7838f969ec2295e (diff)
downloadgmp-8bb056272a954141896d1e23cdb72f5e4fb81100.tar.gz
* mpn/generic/dive_1.c: Nailify.
Diffstat (limited to 'mpn')
-rw-r--r--mpn/generic/dive_1.c27
1 files changed, 13 insertions, 14 deletions
diff --git a/mpn/generic/dive_1.c b/mpn/generic/dive_1.c
index 21abb577c..e44a31758 100644
--- a/mpn/generic/dive_1.c
+++ b/mpn/generic/dive_1.c
@@ -2,10 +2,9 @@
THE FUNCTIONS IN THIS FILE ARE FOR INTERNAL USE ONLY. THEY'RE ALMOST
CERTAIN TO BE SUBJECT TO INCOMPATIBLE CHANGES OR DISAPPEAR COMPLETELY IN
- FUTURE GNU MP RELEASES. */
+ FUTURE GNU MP RELEASES.
-/*
-Copyright 2000, 2001 Free Software Foundation, Inc.
+Copyright 2000, 2001, 2002 Free Software Foundation, Inc.
This file is part of the GNU MP Library.
@@ -22,8 +21,7 @@ License for more details.
You should have received a copy of the GNU Lesser General Public License
along with the GNU MP Library; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
-MA 02111-1307, USA.
-*/
+MA 02111-1307, USA. */
#include "gmp.h"
#include "gmp-impl.h"
@@ -77,6 +75,8 @@ mpn_divexact_1 (mp_ptr dst, mp_srcptr src, mp_size_t size, mp_limb_t divisor)
ASSERT (size >= 1);
ASSERT (divisor != 0);
ASSERT (MPN_SAME_OR_SEPARATE_P (dst, src, size));
+ ASSERT_MPN (src, size);
+ ASSERT_LIMB (divisor);
if (size == 1)
{
@@ -93,6 +93,7 @@ mpn_divexact_1 (mp_ptr dst, mp_srcptr src, mp_size_t size, mp_limb_t divisor)
shift = 0;
modlimb_invert (inverse, divisor);
+ divisor <<= GMP_NAIL_BITS;
if (shift != 0)
{
@@ -109,13 +110,12 @@ mpn_divexact_1 (mp_ptr dst, mp_srcptr src, mp_size_t size, mp_limb_t divisor)
even_entry:
s_next = src[i+1];
- ls = ((s >> shift) | (s_next << (BITS_PER_MP_LIMB-shift)));
+ ls = ((s >> shift) | (s_next << (GMP_NUMB_BITS-shift))) & GMP_NUMB_MASK;
s = s_next;
- l = ls - c;
- c = (l > ls);
+ SUBC_LIMB (c, l, ls, c);
- l *= inverse;
+ l = (l * inverse) & GMP_NUMB_MASK;
dst[i] = l;
i++;
}
@@ -125,13 +125,13 @@ mpn_divexact_1 (mp_ptr dst, mp_srcptr src, mp_size_t size, mp_limb_t divisor)
c += l;
ls = s >> shift;
l = ls - c;
- l *= inverse;
+ l = (l * inverse) & GMP_NUMB_MASK;
dst[i] = l;
}
else
{
l = src[0];
- l *= inverse;
+ l = (l * inverse) & GMP_NUMB_MASK;
dst[0] = l;
i = 1;
c = 0;
@@ -142,10 +142,9 @@ mpn_divexact_1 (mp_ptr dst, mp_srcptr src, mp_size_t size, mp_limb_t divisor)
c += l;
s = src[i];
- l = s - c;
- c = (l > s);
+ SUBC_LIMB (c, l, s, c);
- l *= inverse;
+ l = (l * inverse) & GMP_NUMB_MASK;
dst[i] = l;
i++;
}