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