version 1.1.1.2, 2000/09/09 14:12:26 |
version 1.1.1.3, 2003/08/25 16:06:20 |
|
|
- 2^BITS_PER_MP_LIMB. |
- 2^BITS_PER_MP_LIMB. |
Return the single-limb remainder. |
Return the single-limb remainder. |
|
|
Copyright (C) 1991, 1993, 1994, Free Software Foundation, Inc. |
Copyright 1991, 1993, 1994, 2000, 2001, 2002 Free Software Foundation, Inc. |
|
|
This file is part of the GNU MP Library. |
This file is part of the GNU MP Library. |
|
|
Line 28 MA 02111-1307, USA. */ |
|
Line 28 MA 02111-1307, USA. */ |
|
#include "gmp-impl.h" |
#include "gmp-impl.h" |
#include "longlong.h" |
#include "longlong.h" |
|
|
#ifndef UMUL_TIME |
|
#define UMUL_TIME 1 |
|
#endif |
|
|
|
#ifndef UDIV_TIME |
/* This function used to be documented, but is now considered obsolete. It |
#define UDIV_TIME UMUL_TIME |
continues to exist for binary compatibility, even when not required |
#endif |
internally. */ |
|
|
mp_limb_t |
mp_limb_t |
#if __STDC__ |
|
mpn_preinv_mod_1 (mp_srcptr dividend_ptr, mp_size_t dividend_size, |
mpn_preinv_mod_1 (mp_srcptr dividend_ptr, mp_size_t dividend_size, |
mp_limb_t divisor_limb, mp_limb_t divisor_limb_inverted) |
mp_limb_t divisor_limb, mp_limb_t divisor_limb_inverted) |
#else |
|
mpn_preinv_mod_1 (dividend_ptr, dividend_size, divisor_limb, divisor_limb_inverted) |
|
mp_srcptr dividend_ptr; |
|
mp_size_t dividend_size; |
|
mp_limb_t divisor_limb; |
|
mp_limb_t divisor_limb_inverted; |
|
#endif |
|
{ |
{ |
mp_size_t i; |
mp_size_t i; |
mp_limb_t n0, r; |
mp_limb_t n0, r; |
int dummy; |
mp_limb_t dummy; |
|
|
i = dividend_size - 1; |
ASSERT (dividend_size >= 1); |
r = dividend_ptr[i]; |
ASSERT (divisor_limb & GMP_LIMB_HIGHBIT); |
|
|
|
r = dividend_ptr[dividend_size-1]; |
if (r >= divisor_limb) |
if (r >= divisor_limb) |
r = 0; |
r -= divisor_limb; |
else |
|
i--; |
|
|
|
for (; i >= 0; i--) |
for (i = dividend_size - 2; i >= 0; i--) |
{ |
{ |
n0 = dividend_ptr[i]; |
n0 = dividend_ptr[i]; |
udiv_qrnnd_preinv (dummy, r, r, n0, divisor_limb, divisor_limb_inverted); |
udiv_qrnnd_preinv (dummy, r, r, n0, divisor_limb, divisor_limb_inverted); |