foo(long x)1 static 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 
bar(unsigned long x)16 static 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 
31 int
baz(unsigned long x,int y)32 baz (unsigned long x, int y)
33 {
34   if (y)
35     return foo ((long) x);
36   else
37     return bar (x);
38 }
39