File:  [DVB] / dietlibc / lib / ffs.c
Revision 1.1: download - view: text, annotated - select for diffs
Tue Aug 19 23:47:56 2003 UTC (20 years, 9 months ago) by leitner
Branches: MAIN
CVS tags: HEAD
add ffs

#include <strings.h>

int ffs(int i) {
  int plus=0;
  /* return index of rightmost bit set */
  /* ffs(1) == 1, ffs(2) == 2, ffs(256) == 9, ffs(257)=1 */
#if 0
  if (sizeof(i)==8)	/* fold 64-bit archs */
    if ((i&0xffffffff)==0) {
      plus=32;
      i>>=32;
    }
#endif
  if ((i&0xffff)==0) {
    plus+=16;
    i>>=16;
  }
  if ((i&0xff)==0) {
    plus+=8;
    i>>=8;
  }
  if ((i&0xf)==0) {
    plus+=4;
    i>>=4;
  }
  if (i&1) return plus+1;
  if (i&2) return plus+2;
  if (i&4) return plus+3;
  if (i&8) return plus+4;
  return 0;
}

LinuxTV legacy CVS <linuxtv.org/cvs>