This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re:


Hello!

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", X86_FEATURE_XMM2)
#define rmb() alternative("lock; addl $0,0(%%esp)", "lfence", X86_FEATURE_XMM2)
#define wmb() alternative("lock; addl $0,0(%%esp)", "sfence", X86_FEATURE_XMM)


But anyway, gcc can't do that by itself.

Uros.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]