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 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

it would save 2 bytes, 1 instruction and avoid partial register writes... 
and still has the nice property that a single byte store into the code is 
required for enable/disable (which sounds like a great property -- i 
assume you were deliberately going for that).

i assume there's probably no reason to tie the sequence to eax either -- 
you could let gcc choose it (or maybe you already do).

-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.