From: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
To: "H. Peter Anvin" <hpa@zytor.com>
Cc: akpm@linux-foundation.org, linux-kernel@vger.kernel.org
Subject: Re: [patch 06/10] Immediate Value - i386 Optimization
Date: Tue, 3 Jul 2007 15:16:05 -0400 [thread overview]
Message-ID: <20070703191605.GB4047@Krystal> (raw)
In-Reply-To: <468A9956.9050903@zytor.com>
* H. Peter Anvin (hpa@zytor.com) wrote:
> What is not clear to me is the exact code that is generated by these
> macros. Nor can I find it anywhere in the documentation.
>
> Could you please describe this in some detail? In particular, it seems
> that the uses of these are largely as branch targets, where the extra
> indirection over modifying the jump target directly seems wasted.
>
Hi Peter,
I understand your concern. If you find a way to let the code be compiled
by gcc, put at the end of the functions (never being a branch target)
and then, dynamically, get the address of the branch instruction and
patch it, all that in cooperation with gcc, I would be glad to hear from
it. What I found is that gcc lets us do anything that touches
variables/registers in an inline assembly, but does not permit to place
branch instructions ourselves; it does not expect the execution flow to
be changed in inline asms.
Here is an objdump of the interesting bits on an immediate value placed
in scheddule (inline schedule_debug).
00000000 <schedule>:
0: 55 push %ebp
1: 89 e5 mov %esp,%ebp
3: 57 push %edi
4: 56 push %esi
5: 53 push %ebx
6: 83 ec 40 sub $0x40,%esp
9: b8 01 00 00 00 mov $0x1,%eax
e: e8 fc ff ff ff call f <schedule+0xf>
13: e8 fc ff ff ff call 14 <schedule+0x14>
18: 89 45 dc mov %eax,0xffffffdc(%ebp)
1b: b8 00 00 00 00 mov $0x0,%eax
20: 8b 4d dc mov 0xffffffdc(%ebp),%ecx
23: 8b 14 8d 00 00 00 00 mov 0x0(,%ecx,4),%edx
2a: 01 d0 add %edx,%eax
2c: 89 45 d0 mov %eax,0xffffffd0(%ebp)
2f: b8 00 00 00 00 mov $0x0,%eax
34: c7 44 02 04 01 00 00 movl $0x1,0x4(%edx,%eax,1)
3b: 00
3c: 8b 5d d0 mov 0xffffffd0(%ebp),%ebx
3f: 8b 9b f0 03 00 00 mov 0x3f0(%ebx),%ebx
45: 89 5d c8 mov %ebx,0xffffffc8(%ebp)
48: 81 c3 94 01 00 00 add $0x194,%ebx
4e: 89 5d cc mov %ebx,0xffffffcc(%ebp)
51: 8b 45 c8 mov 0xffffffc8(%ebp),%eax
54: 8b 40 14 mov 0x14(%eax),%eax
57: 85 c0 test %eax,%eax
59: 0f 89 30 03 00 00 jns 38f <schedule+0x38f>
5f: 89 e0 mov %esp,%eax
61: 25 00 e0 ff ff and $0xffffe000,%eax
66: 8b 40 14 mov 0x14(%eax),%eax
69: 25 ff ff ff ef and $0xefffffff,%eax
6e: 83 e8 01 sub $0x1,%eax
71: 0f 85 fb 02 00 00 jne 372 <schedule+0x372>
<branch site>
77: b8 00 00 00 00 mov $0x0,%eax
7c: 85 c0 test %eax,%eax
7e: 0f 85 16 03 00 00 jne 39a <schedule+0x39a>
here, we just loaded 0 in eax (movl used to make sure we populate the
whole register so we do not stall the pipeline)a
When we activate the site,
line 77 becomes: b8 01 00 00 00 mov $0x1,%eax
</branch site>
84: 8b 45 d0 mov 0xffffffd0(%ebp),%eax
87: e8 fc ff ff ff call 88 <schedule+0x88>
8c: 8b 4d c8 mov 0xffffffc8(%ebp),%ecx
8f: 8b 41 04 mov 0x4(%ecx),%eax
92: f0 0f ba 70 08 02 lock btrl $0x2,0x8(%eax)
...
<profile_hit inline function>
39a: 8b 55 04 mov 0x4(%ebp),%edx
39d: b9 01 00 00 00 mov $0x1,%ecx
3a2: b8 02 00 00 00 mov $0x2,%eax
3a7: e8 fc ff ff ff call 3a8 <schedule+0x3a8>
3ac: e9 d3 fc ff ff jmp 84 <schedule+0x84>
</profile_hit inline function>
--
Mathieu Desnoyers
Computer Engineering Ph.D. Student, Ecole Polytechnique de Montreal
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F BA06 3F25 A8FE 3BAE 9A68
next prev parent reply other threads:[~2007-07-03 19:16 UTC|newest]
Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-07-03 16:40 [patch 00/10] Immediate Values Mathieu Desnoyers
2007-07-03 16:40 ` [patch 01/10] Immediate values - Global modules list and module mutex Mathieu Desnoyers
2007-07-03 16:40 ` [patch 02/10] Immediate Value - Architecture Independent Code Mathieu Desnoyers
2007-07-03 16:40 ` [patch 03/10] Immediate Values - Non Optimized Architectures Mathieu Desnoyers
2007-07-03 16:40 ` [patch 04/10] Immediate Value - Add kconfig menus Mathieu Desnoyers
2007-07-03 16:40 ` [patch 05/10] Immediate Values - kprobe header fix Mathieu Desnoyers
2007-07-03 16:40 ` [patch 06/10] Immediate Value - i386 Optimization Mathieu Desnoyers
2007-07-03 18:45 ` H. Peter Anvin
2007-07-03 19:16 ` Mathieu Desnoyers [this message]
2007-07-03 20:18 ` H. Peter Anvin
2007-07-03 20:37 ` Chuck Ebbert
2007-07-03 21:30 ` H. Peter Anvin
2007-07-03 23:10 ` Jeremy Fitzhardinge
2007-07-03 20:43 ` Mathieu Desnoyers
2007-07-03 21:30 ` H. Peter Anvin
2007-07-03 16:40 ` [patch 07/10] Immediate Value - PowerPC Optimization Mathieu Desnoyers
2007-07-03 16:40 ` [patch 08/10] Immediate Value - Documentation Mathieu Desnoyers
2007-07-03 16:40 ` [patch 09/10] F00F bug fixup for i386 - use immediate values Mathieu Desnoyers
2007-07-04 20:43 ` Alexey Dobriyan
2007-07-03 16:40 ` [patch 10/10] Scheduler profiling - Use " Mathieu Desnoyers
2007-07-03 18:11 ` Alexey Dobriyan
2007-07-03 18:57 ` Mathieu Desnoyers
2007-07-04 14:23 ` Adrian Bunk
2007-07-04 20:31 ` Alexey Dobriyan
2007-07-05 20:21 ` Andrew Morton
2007-07-05 20:29 ` Andrew Morton
2007-07-05 20:41 ` Mathieu Desnoyers
2007-07-06 11:44 ` Andi Kleen
2007-07-06 17:50 ` Li, Tong N
2007-07-06 20:03 ` Andi Kleen
2007-07-06 20:57 ` Li, Tong N
2007-07-06 21:03 ` Mathieu Desnoyers
2007-07-07 1:50 ` [patch 10/10] *Tests* " Mathieu Desnoyers
2007-07-07 6:08 ` Li, Tong N
2007-07-11 5:02 ` Mathieu Desnoyers
2007-07-06 22:14 ` [patch 10/10] " Chuck Ebbert
2007-07-06 23:28 ` Adrian Bunk
2007-07-06 23:38 ` Dave Jones
2007-07-07 0:10 ` Adrian Bunk
2007-07-07 15:45 ` Frank Ch. Eigler
2007-07-07 17:01 ` Adrian Bunk
2007-07-07 17:20 ` Willy Tarreau
2007-07-07 17:59 ` Adrian Bunk
2007-07-07 17:55 ` Frank Ch. Eigler
2007-07-06 23:43 ` Mathieu Desnoyers
2007-07-07 2:25 ` Adrian Bunk
2007-07-07 2:35 ` Mathieu Desnoyers
2007-07-07 4:03 ` Adrian Bunk
2007-07-07 5:02 ` Willy Tarreau
2007-07-04 20:35 ` Alexey Dobriyan
2007-07-04 22:41 ` Andi Kleen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20070703191605.GB4047@Krystal \
--to=mathieu.desnoyers@polymtl.ca \
--cc=akpm@linux-foundation.org \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®