Messages in this thread |  | | Date | Mon, 16 Oct 2000 15:28:27 -0400 | From | David Relson <> | Subject | Re: Patch to remove undefined C code |
| |
At 01:21 PM 10/16/00, Jeff Garzik wrote: >Bernd Schmidt wrote: > > diff -x log.build -x .* -dru linux-2.4/drivers/net/tulip/tulip_core.c > linux-2.4-fixed/drivers/net/tulip/tulip_core.c > > --- linux-2.4/drivers/net/tulip/tulip_core.c Mon Oct 16 13:51:23 2000 > > +++ linux-2.4-fixed/drivers/net/tulip/tulip_core.c Mon Oct 16 > 15:40:12 2000 >[...] > > @@ -944,9 +946,9 @@ > > > > /* Fill the final entry with our physical address. */ > > eaddrs = (u16 *)dev->dev_addr; > > - *setup_frm++ = *setup_frm++ = eaddrs[0]; > > - *setup_frm++ = *setup_frm++ = eaddrs[1]; > > - *setup_frm++ = *setup_frm++ = eaddrs[2]; > > + *setup_frm++ = eaddrs[0]; *setup_frm++ = eaddrs[0]; > > + *setup_frm++ = eaddrs[1]; *setup_frm++ = eaddrs[1]; > > + *setup_frm++ = eaddrs[2]; *setup_frm++ = eaddrs[2]; > > > > spin_lock_irqsave(&tp->lock, flags); > >
Looking at the above code, I noticed that there are a lot of ++ operations. I rewrote the code as:
setup_from[0] = setup_from[1] = eaddrs[0]; setup_from[2] = setup_from[3] = eaddrs[1]; setup_from[4] = setup_from[5] = eaddrs[2]; setup_from += 6;
I compiled using "gcc -S -Wall -O2 -fomit-frame-pointer -m486" to generate the assembler code. The old code is 17 instructions long and the new code is 11 instructions. As well as being shorter, simple timing test indicate that the new code is significantly quicker.
David
-------------------------------------------------------- David Relson Osage Software Systems, Inc. relson@osagesoftware.com 514 W. Keech Ave. www.osagesoftware.com Ann Arbor, MI 48103 voice: 734.821.8800 fax: 734.821.8800
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/
|  |