1static inline int foo (long x)
2{
3  register int a = 0;
4  register unsigned b;
5
6  do
7    {
8      b = (x & 0x7f);
9      x = (x >> 7) | ~(-1L >> 7);
10      a += 1;
11    }
12  while ((x != 0 || (b & 0x40) != 0) && (x != -1 || (b & 0x40) == 0));
13  return a;
14}
15
16static inline int bar (unsigned long x)
17{
18  register int a = 0;
19  register unsigned b;
20
21  do
22    {
23      b = (x & 0x7f);
24      x >>= 7;
25      a++;
26    }
27  while (x != 0);
28  return a;
29}
30
31int
32baz (unsigned long x, int y)
33{
34  if (y)
35    return foo ((long) x);
36  else
37    return bar (x);
38}
39