From: Denys Vlasenko <vda.linux@googlemail.com>
To: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Cc: akpm@linux-foundation.org, linux-kernel@vger.kernel.org,
Andi Kleen <ak@muc.de>, "H. Peter Anvin" <hpa@zytor.com>,
Chuck Ebbert <cebbert@redhat.com>,
Christoph Hellwig <hch@infradead.org>
Subject: Re: [patch 4/7] Immediate Values - i386 Optimization
Date: Thu, 20 Sep 2007 11:24:12 +0100 [thread overview]
Message-ID: <200709201124.13097.vda.linux@googlemail.com> (raw)
In-Reply-To: <20070918210853.588573678@polymtl.ca>
On Tuesday 18 September 2007 22:07, Mathieu Desnoyers wrote:
> i386 optimization of the immediate values which uses a movl with code patching
> to set/unset the value used to populate the register used as variable source.
>
> Changelog:
> - Use text_poke_early with cr0 WP save/restore to patch the bypass. We are doing
> non atomic writes to a code region only touched by us (nobody can execute it
> since we are protected by the immediate_mutex).
> - Put immediate_set and _immediate_set in the architecture independent header.
> +struct __immediate {
> + long var; /* Pointer to the identifier variable of the
> + * immediate value
> + */
> + long immediate; /*
> + * Pointer to the memory location of the
> + * immediate value within the instruction.
> + */
> + long size; /* Type size. */
> +};
> + case 2: \
> + asm ( ".section __immediate, \"a\", @progbits;\n\t" \
> + ".long %1, (0f)+2, 2;\n\t" \
> + ".previous;\n\t" \
> + "1:\n\t" \
> + ".align 2;\n\t" \
> + "0:\n\t" \
> + "mov %2,%0;\n\t" \
> + : "=r" (value) \
> + : "m" (name##__immediate), \
> + "i" (0)); \
Instead of letting gcc use whatever instruction it sees fit best
for accessing the variable (like add/cmp/test...)
now we force it to use mov imm,reg first. Maybe with preceding nop
due to "align 2".
And then we use 12 more bytes in __immediate section
*for each* place where you read the variable.
Do you plan to use the same approach on x86_64?
I mean, longs there are twice as long.
Can this be made conditional, on CONFIG_CC_OPTIMIZE_FOR_SIZE perhaps?
--
vda
next prev parent reply other threads:[~2007-09-20 10:24 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-09-18 21:07 [patch 0/7] Immediate Values for 2.6.23-rc6-mm1 Mathieu Desnoyers
2007-09-18 21:07 ` [patch 1/7] Immediate Values - Architecture Independent Code Mathieu Desnoyers
2007-09-18 21:07 ` [patch 2/7] Immediate Values - Kconfig menu in EMBEDDED Mathieu Desnoyers
2007-09-18 22:02 ` Randy Dunlap
2007-09-19 11:13 ` Mathieu Desnoyers
2007-09-18 21:07 ` [patch 3/7] Immediate Values - Move Kprobes i386 restore_interrupt to kdebug.h Mathieu Desnoyers
2007-09-18 21:07 ` [patch 4/7] Immediate Values - i386 Optimization Mathieu Desnoyers
2007-09-18 21:51 ` Jeremy Fitzhardinge
2007-09-18 22:12 ` H. Peter Anvin
2007-09-18 22:27 ` Jeremy Fitzhardinge
2007-09-19 13:01 ` Mathieu Desnoyers
2007-09-19 16:03 ` Mathieu Desnoyers
2007-09-19 16:12 ` H. Peter Anvin
2007-09-19 17:30 ` Jeremy Fitzhardinge
2007-09-19 17:39 ` H. Peter Anvin
2007-09-19 18:31 ` Mathieu Desnoyers
2007-09-19 18:22 ` Mathieu Desnoyers
2007-10-20 16:47 ` Mathieu Desnoyers
2007-10-20 18:32 ` H. Peter Anvin
2007-10-22 15:40 ` Mathieu Desnoyers
2007-10-22 16:39 ` H. Peter Anvin
2007-10-22 9:53 ` Andi Kleen
2007-09-19 11:00 ` Mathieu Desnoyers
2007-09-18 22:14 ` Andi Kleen
2007-09-18 22:29 ` Jeremy Fitzhardinge
2007-09-18 22:33 ` H. Peter Anvin
2007-09-18 22:44 ` Andi Kleen
2007-09-19 11:08 ` Mathieu Desnoyers
2007-09-19 11:14 ` Andi Kleen
2007-09-19 10:59 ` Mathieu Desnoyers
2007-09-20 10:24 ` Denys Vlasenko [this message]
2007-09-21 13:31 ` Mathieu Desnoyers
2007-09-18 21:07 ` [patch 5/7] Immediate Values - Powerpc Optimization Mathieu Desnoyers
2007-09-18 21:07 ` [patch 6/7] Immediate Values - Documentation Mathieu Desnoyers
2007-09-18 21:07 ` [patch 7/7] Scheduler Profiling - Use Immediate Values Mathieu Desnoyers
-- strict thread matches above, loose matches on Subject: below --
2007-09-17 18:42 [patch 0/7] " Mathieu Desnoyers
2007-09-17 18:42 ` [patch 4/7] Immediate Values - i386 Optimization Mathieu Desnoyers
2007-09-18 6:04 ` Borislav Petkov
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=200709201124.13097.vda.linux@googlemail.com \
--to=vda.linux@googlemail.com \
--cc=ak@muc.de \
--cc=akpm@linux-foundation.org \
--cc=cebbert@redhat.com \
--cc=hch@infradead.org \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mathieu.desnoyers@polymtl.ca \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.