This is the mail archive of the
mailing list for the GCC project.
- From: "H.J. Lu" <hjl dot tools at gmail dot com>
- To: "Uros Bizjak" <ubizjak at gmail dot com>
- Cc: "GCC Patches" <gcc-patches at gcc dot gnu dot org>, "Ross Ridge" <rridge at csclub dot uwaterloo dot ca>
- Date: Sun, 23 Nov 2008 13:46:27 -0800
- Subject: Re:
- References: <4929BEBA.email@example.com>
On Sun, Nov 23, 2008 at 12:36 PM, Uros Bizjak <firstname.lastname@example.org> wrote:
>> H.J. Lu writes:
>> >I am not sure how useful that is for 32bit since it will generate a
>> >nop for most machines which do need mfence.
>> I don't understand what you're saying. Using "lock orb" should result
>> in a memory fence on any IA-32 SMP system, old or new. It's just a more
>> heavyweight way of ordering loads and stores.
>> The Linux kernel apparently takes the same approach, using either "lock
>> addl" or "mfence" depending on whether SSE2 instructions are available
>> at compile time.
> No, linux dynamically patches its code:
> #define mb() alternative("lock; addl $0,0(%%esp)", "mfence",
> #define rmb() alternative("lock; addl $0,0(%%esp)", "lfence",
> #define wmb() alternative("lock; addl $0,0(%%esp)", "sfence",
> But anyway, gcc can't do that by itself.
Can we call cpuid to initialize __cpuid_edx if it is referenced?