< prev index next >

src/hotspot/os_cpu/linux_s390/atomic_linux_s390.hpp

Print this page




 318                                                 T cmp_val,
 319                                                 atomic_memory_order unused) const {
 320   STATIC_ASSERT(8 == sizeof(T));
 321   T old;
 322 
 323   __asm__ __volatile__ (
 324     "   CSG      %[old],%[upd],%[mem]    \n\t" // Try to xchg upd with mem.
 325     // outputs
 326     : [old] "=&d" (old)      // Write-only, prev value irrelevant.
 327     , [mem] "+Q"  (*dest)    // Read/write, memory to be updated atomically.
 328     // inputs
 329     : [upd] "d"   (xchg_val)
 330     ,       "0"   (cmp_val)  // Read-only, initial value for [old] (operand #0).
 331     // clobbered
 332     : "cc", "memory"
 333   );
 334 
 335   return old;
 336 }
 337 







 338 #endif // OS_CPU_LINUX_S390_ATOMIC_LINUX_S390_HPP


 318                                                 T cmp_val,
 319                                                 atomic_memory_order unused) const {
 320   STATIC_ASSERT(8 == sizeof(T));
 321   T old;
 322 
 323   __asm__ __volatile__ (
 324     "   CSG      %[old],%[upd],%[mem]    \n\t" // Try to xchg upd with mem.
 325     // outputs
 326     : [old] "=&d" (old)      // Write-only, prev value irrelevant.
 327     , [mem] "+Q"  (*dest)    // Read/write, memory to be updated atomically.
 328     // inputs
 329     : [upd] "d"   (xchg_val)
 330     ,       "0"   (cmp_val)  // Read-only, initial value for [old] (operand #0).
 331     // clobbered
 332     : "cc", "memory"
 333   );
 334 
 335   return old;
 336 }
 337 
 338 template<size_t byte_size>
 339 struct Atomic::PlatformOrderedLoad<byte_size, X_ACQUIRE>
 340 {
 341   template <typename T>
 342   T operator()(const volatile T* p) const { T t = *p; OrderAccess::acquire(); return t; }
 343 };
 344 
 345 #endif // OS_CPU_LINUX_S390_ATOMIC_LINUX_S390_HPP
< prev index next >