On Mon, 22 Oct 2007 12:36:19 -0700
Joe Perches <[EMAIL PROTECTED]> wrote:

> It's a bit after 2.6.1 now...
> 
> Removes unnecessary if, uses 16 bit rotate left.
> Performance improves ~30%
> 
> Signed-off-by: Joe Perches <[EMAIL PROTECTED]>
> 
> diff --git a/net/appletalk/ddp.c b/net/appletalk/ddp.c
> index 7c0b515..1c50f4c 100644
> --- a/net/appletalk/ddp.c
> +++ b/net/appletalk/ddp.c
> @@ -925,15 +925,9 @@ static int atrtr_ioctl(unsigned int cmd, void __user 
> *arg)
>  static unsigned long atalk_sum_partial(const unsigned char *data,
>                                      int len, unsigned long sum)
>  {
> -     /* This ought to be unwrapped neatly. I'll trust gcc for now */
>       while (len--) {
> -             sum += *data;
> -             sum <<= 1;
> -             if (sum & 0x10000) {
> -                     sum++;
> -                     sum &= 0xffff;
> -             }
> -             data++;
> +             sum += *data++;
> +             sum = ((sum & 0x8000)>>15) | ((sum & 0x7fff)<<1);
>       }
>       return sum;
>  }
> 

The end of the message you quoted was:

> Corrected fast code is:
> 
>         while (len--) {
>                 sum += *data++;
>                 sum <<= 1;
>                 sum = (((sum & 0x10000) >> 16) + sum) & 0xffff;
>         }
> 
> At least it is correct on the standalone random data test, and the
> new code is 30% faster for the cached memory case (13.7 clks/byte vs 18 
> clks/byte).

Your code looks different...

-- 
Stephen Hemminger <[EMAIL PROTECTED]>
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to