Mercurial > hg > truffle
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; } |