#include <stdio.h>
//
#include "proto.h"
#include "bitcount.h"

static S32 bitcnts(S32 v);
static S32 bitcnt(U32 v);


U32 bitcount_signed(S32 v1, S32 v2, S32 v3, S32 v4) {

  S32 n, max;

  max = 0;
  n = bitcnts(v1);   if (n > max)  max = n;
  n = bitcnts(v2);   if (n > max)  max = n;
  n = bitcnts(v3);   if (n > max)  max = n;
  n = bitcnts(v4);   if (n > max)  max = n;
  return max;
}


U32 bitcount(U32 v1, U32 v2, U32 v3, U32 v4) {

  S32 n, max;

  max = 0;
  n = bitcnt(v1);   if (n > max)  max = n;
  n = bitcnt(v2);   if (n > max)  max = n;
  n = bitcnt(v3);   if (n > max)  max = n;
  n = bitcnt(v4);   if (n > max)  max = n;
  return max;
}

// ----------------------------------------------------------------

S32 bitcnts(S32 v) {

  S32 n;

  n = 31;

  if (v >= 0) {
    while (((v & (1<<n)) == 0) && (n > 0))  n--;
    n += 2;

  } else {
    while ((v & (1<<n)) && (n > 0))  n--;
    n += 2;
  }

  return n;
}


S32 bitcnt(U32 v) {

  S32 n;

  n = 31;
  while (((v & (1<<n)) == 0) && (n > 0))  n--;
  return n+1;
}
