[BACK]Return to scan0.c CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / gmp / mpn / generic

Diff for /OpenXM_contrib/gmp/mpn/generic/Attic/scan0.c between version 1.1.1.2 and 1.1.1.3

version 1.1.1.2, 2000/09/09 14:12:27 version 1.1.1.3, 2003/08/25 16:06:20
Line 1 
Line 1 
 /* mpn_scan0 -- Scan from a given bit position for the next clear bit.  /* mpn_scan0 -- Scan from a given bit position for the next clear bit.
   
 Copyright (C) 1994, 1996 Free Software Foundation, Inc.  Copyright 1994, 1996, 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. */
    2. Bit index should be 'unsigned'?     2. Bit index should be 'unsigned'?
   
    Argument constraints:     Argument constraints:
    1. U must sooner ot later have a limb with a clear bit.     1. U must sooner or later have a limb with a clear bit.
  */   */
   
 unsigned long int  unsigned long int
 #if __STDC__  
 mpn_scan0 (register mp_srcptr up,  mpn_scan0 (register mp_srcptr up,
            register unsigned long int starting_bit)             register unsigned long int starting_bit)
 #else  
 mpn_scan0 (up, starting_bit)  
      register mp_srcptr up;  
      register unsigned long int starting_bit;  
 #endif  
 {  {
   mp_size_t starting_word;    mp_size_t starting_word;
   mp_limb_t alimb;    mp_limb_t alimb;
Line 47  mpn_scan0 (up, starting_bit)
Line 41  mpn_scan0 (up, starting_bit)
   mp_srcptr p;    mp_srcptr p;
   
   /* Start at the word implied by STARTING_BIT.  */    /* Start at the word implied by STARTING_BIT.  */
   starting_word = starting_bit / BITS_PER_MP_LIMB;    starting_word = starting_bit / GMP_NUMB_BITS;
   p = up + starting_word;    p = up + starting_word;
   alimb = ~*p++;    alimb = *p++ ^ GMP_NUMB_MASK;
   
   /* Mask off any bits before STARTING_BIT in the first limb.  */    /* Mask off any bits before STARTING_BIT in the first limb.  */
   alimb &= - (mp_limb_t) 1 << (starting_bit % BITS_PER_MP_LIMB);    alimb &= - (mp_limb_t) 1 << (starting_bit % GMP_NUMB_BITS);
   
   while (alimb == 0)    while (alimb == 0)
     alimb = ~*p++;      alimb = *p++ ^ GMP_NUMB_MASK;
   
   count_leading_zeros (cnt, alimb & -alimb);    count_trailing_zeros (cnt, alimb);
   return (p - up) * BITS_PER_MP_LIMB - 1 - cnt;    return (p - up - 1) * GMP_NUMB_BITS + cnt;
 }  }

Legend:
Removed from v.1.1.1.2  
changed lines
  Added in v.1.1.1.3

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>