mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
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

  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®