Project Home
Project Home
Documents
Documents
Wiki
Wiki
Discussion Forums
Discussions
Project Information
Project Info
BroadcastCommunity.qnx.com will be offline from May 31 6:00pm until June 2 12:00AM for upcoming system upgrades. For more information please go to https://community.qnx.com/sf/discussion/do/listPosts/projects.bazaar/discussion.bazaar.topc28418
Forum Topic - __cpu_membarrier implementation: Page 1 of 2 (2 Items)
   
__cpu_membarrier implementation  
In trunk/lib/c/public/x86/cpuinline.h __cpu_membarrier defined as 

# define __cpu_membarrier()												\
	({																	\
		/* check for X86_CPU_SSE2 */									\
		if (__cpu_flags & (1 << 15)) {									\
			__asm__ __volatile__ ("mfence");							\
		} else {														\
			__asm__ __volatile__ ("lock; orb $0,0(%esp)");				\
		}																\
	})



In trunk/lib/c/public/x86/smpxchg.h _smp_xchg defined as 

static __inline int __attribute__((__unused__)) _smp_xchg(volatile unsigned *__dst, unsigned __src) {
	__asm__ __volatile__(
		"xchgl %0,%1"
		:"=r" (__src)
		:"m" (__atomic_fool_gcc(__dst)), "0" (__src)
		:"memory");
	return __src;
}


A question is: is not "memory" required in clobber list for __cpu_membarrier? As far as I understand that makes sure 
compiler does not reuse values evaluated from memory across the assembler block.