Re: Performance analysis of Linux Kernel Markers 0.20 for 2.6.17

dean gaudet <[email protected]>
Newsgroups gmane.linux.kernel,gmane.linux.kernel.tracing,gmane.linux.systemtap
Message-ID <[email protected]>
On Sun, 8 Oct 2006, dean gaudet wrote:

> On Sat, 30 Sep 2006, Mathieu Desnoyers wrote:
> 
> > - Optimized
> > 
> > static int my_open(struct inode *inode, struct file *file)
> > {
> >    0:   55                      push   %ebp
> >    1:   89 e5                   mov    %esp,%ebp
> >    3:   83 ec 0c                sub    $0xc,%esp
> >         MARK(subsys_mark1, "%d %p", 1, NULL);
> >    6:   b0 00                   mov    $0x0,%al <-- immediate load 0 in al
> >    8:   84 c0                   test   %al,%al
> >    a:   75 07                   jne    13 <my_open+0x13>
> 
> why not replace the mov+test with "xor %eax,%eax" and then change the 0x75 
> to a 0x74 to change from jne to je when you want to enable the marker?
> 
> i.e. disabled:
> 
> 	31 c0	xor %eax,%eax
> 	75 07	jne 13
> 
> enabled:
> 
> 	31 c0	xor %eax,%eax
> 	74 07	je 13

actually... why even destroy the register... i bet this is the best 
choice:

	39 c0	cmp %eax,%eax
	75 07	jne 13

that satisfies the macro-op fusion rules on core2 as well... now you 
shouldn't even ask gcc for a register you should just hardwire %eax so it 
doesn't get confused (probably need to tell it "cc" is modified).

-dean
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.