comparison src/os_cpu/linux_x86/vm/orderAccess_linux_x86.inline.hpp @ 671:d0994e5bebce

6822204: volatile fences should prefer lock:addl to actual mfence instructions Reviewed-by: kvn, phh
author never
date Thu, 26 Mar 2009 14:31:45 -0700
parents a61af66fc99e
children bd02caa94611
comparison
equal deleted inserted replaced
668:90a66aa50514 671:d0994e5bebce
42 dummy = 0; 42 dummy = 0;
43 } 43 }
44 44
45 inline void OrderAccess::fence() { 45 inline void OrderAccess::fence() {
46 if (os::is_MP()) { 46 if (os::is_MP()) {
47 #ifdef AMD64 47 // always use locked addl since mfence is sometimes expensive
48 __asm__ __volatile__ ("mfence":::"memory"); 48 #ifdef AMD64
49 __asm__ volatile ("lock; addl $0,0(%%rsp)" : : : "cc", "memory");
49 #else 50 #else
50 __asm__ volatile ("lock; addl $0,0(%%esp)" : : : "cc", "memory"); 51 __asm__ volatile ("lock; addl $0,0(%%esp)" : : : "cc", "memory");
51 #endif // AMD64 52 #endif
52 } 53 }
53 } 54 }
54 55
55 inline jbyte OrderAccess::load_acquire(volatile jbyte* p) { return *p; } 56 inline jbyte OrderAccess::load_acquire(volatile jbyte* p) { return *p; }
56 inline jshort OrderAccess::load_acquire(volatile jshort* p) { return *p; } 57 inline jshort OrderAccess::load_acquire(volatile jshort* p) { return *p; }