[ros-dev] ping Alex regarding log2() for scheduler
Magnus Olsen
magnus at itkonsult-olsen.com
Wed Mar 23 22:43:44 CET 2005
Hi I have not test run this code. But i think this form maby
are faster that v3 of Royce Mitchell III code
it leave to the compiler to optimze it more or I complete wrong
int highest_bit ( unsigned int i )
{
int ret = 0;
int n ;
int t;
int x;
for (t = 0; t>3;t++)
{
x = (16 << t);
n = i >> x;
if ( n ) i = n, ret += x ;
}
return ret + (i>>1);
}
----- Original Message -----
From: "Royce Mitchell III" <royce3 at ev1.net>
To: "ReactOS Development List" <ros-dev at reactos.com>
Sent: Wednesday, March 23, 2005 10:08 PM
Subject: Re: [ros-dev] ping Alex regarding log2() for scheduler
> Royce Mitchell III wrote:
>
> > Mike Nordell wrote:
> >
> >> int highest_bit(unsigned int i)
> >> {
> >> int temp;
> >> int ret = 0;
> >> temp = i > 0xffff; i >>= 16*temp; ret = 16*temp;
> >> temp = i > 0xff; i >>= 8*temp; ret += 8*temp;
> >> temp = i > 0xf; i >>= 4*temp; ret += 4*temp;
> >> temp = i > 0x3; i >>= 2*temp; ret += 2*temp;
> >> ret += (i>>1);
> >> return ret;
> >> }
> >>
> >>
> > This is almost, but not quite, 50% slower in msvc6 w/ "compile for
> > speed". :(
> >
> > Perhaps the reordering could help...
>
> FWIW, I also came up with the following code last night, which was only
> a hair slower than the code I sent to Alex, but perhaps might lend
> itself to speed-up better?
>
> int highest_bit_v3 ( unsigned int i )
> {
> int ret = 0;
> int n = i >> 16;
> if ( n )
> i = n, ret = 16;
> n = i >> 8;
> if ( n )
> i = n, ret += 8;
> n = i >> 4;
> if ( n )
> i = n, ret += 4;
> n = i >> 2;
> if ( n )
> i = n, ++ret, ++ret;
> return ret + (i>>1);
> }
>
>
> _______________________________________________
> Ros-dev mailing list
> Ros-dev at reactos.com
> http://reactos.com:8080/mailman/listinfo/ros-dev
More information about the Ros-dev
mailing list