247 #ifdef ARM
248 return arm_lock_test_and_set(dest, exchange_value);
249 #else
250 #ifdef M68K
251 return m68k_lock_test_and_set(dest, exchange_value);
252 #else
253 intptr_t result = __sync_lock_test_and_set (dest, exchange_value);
254 __sync_synchronize();
255 return result;
256 #endif // M68K
257 #endif // ARM
258 }
259
260 inline void* Atomic::xchg_ptr(void* exchange_value, volatile void* dest) {
261 return (void *) xchg_ptr((intptr_t) exchange_value,
262 (volatile intptr_t*) dest);
263 }
264
265 inline jint Atomic::cmpxchg(jint exchange_value,
266 volatile jint* dest,
267 jint compare_value) {
268 #ifdef ARM
269 return arm_compare_and_swap(dest, compare_value, exchange_value);
270 #else
271 #ifdef M68K
272 return m68k_compare_and_swap(dest, compare_value, exchange_value);
273 #else
274 return __sync_val_compare_and_swap(dest, compare_value, exchange_value);
275 #endif // M68K
276 #endif // ARM
277 }
278
279 inline jlong Atomic::cmpxchg(jlong exchange_value,
280 volatile jlong* dest,
281 jlong compare_value) {
282
283 return __sync_val_compare_and_swap(dest, compare_value, exchange_value);
284 }
285
286 inline intptr_t Atomic::cmpxchg_ptr(intptr_t exchange_value,
287 volatile intptr_t* dest,
288 intptr_t compare_value) {
289 #ifdef ARM
290 return arm_compare_and_swap(dest, compare_value, exchange_value);
291 #else
292 #ifdef M68K
293 return m68k_compare_and_swap(dest, compare_value, exchange_value);
294 #else
295 return __sync_val_compare_and_swap(dest, compare_value, exchange_value);
296 #endif // M68K
297 #endif // ARM
298 }
299
300 inline void* Atomic::cmpxchg_ptr(void* exchange_value,
301 volatile void* dest,
302 void* compare_value) {
303
304 return (void *) cmpxchg_ptr((intptr_t) exchange_value,
305 (volatile intptr_t*) dest,
306 (intptr_t) compare_value);
307 }
308
309 inline jlong Atomic::load(volatile jlong* src) {
310 volatile jlong dest;
311 os::atomic_copy64(src, &dest);
312 return dest;
313 }
314
315 inline void Atomic::store(jlong store_value, jlong* dest) {
316 os::atomic_copy64((volatile jlong*)&store_value, (volatile jlong*)dest);
317 }
318
319 inline void Atomic::store(jlong store_value, volatile jlong* dest) {
320 os::atomic_copy64((volatile jlong*)&store_value, dest);
321 }
322
323 #endif // OS_CPU_LINUX_ZERO_VM_ATOMIC_LINUX_ZERO_INLINE_HPP
|
247 #ifdef ARM
248 return arm_lock_test_and_set(dest, exchange_value);
249 #else
250 #ifdef M68K
251 return m68k_lock_test_and_set(dest, exchange_value);
252 #else
253 intptr_t result = __sync_lock_test_and_set (dest, exchange_value);
254 __sync_synchronize();
255 return result;
256 #endif // M68K
257 #endif // ARM
258 }
259
260 inline void* Atomic::xchg_ptr(void* exchange_value, volatile void* dest) {
261 return (void *) xchg_ptr((intptr_t) exchange_value,
262 (volatile intptr_t*) dest);
263 }
264
265 inline jint Atomic::cmpxchg(jint exchange_value,
266 volatile jint* dest,
267 jint compare_value, cmpxchg_memory_order order) {
268 #ifdef ARM
269 return arm_compare_and_swap(dest, compare_value, exchange_value);
270 #else
271 #ifdef M68K
272 return m68k_compare_and_swap(dest, compare_value, exchange_value);
273 #else
274 return __sync_val_compare_and_swap(dest, compare_value, exchange_value);
275 #endif // M68K
276 #endif // ARM
277 }
278
279 inline jlong Atomic::cmpxchg(jlong exchange_value,
280 volatile jlong* dest,
281 jlong compare_value, cmpxchg_memory_order order) {
282
283 return __sync_val_compare_and_swap(dest, compare_value, exchange_value);
284 }
285
286 inline intptr_t Atomic::cmpxchg_ptr(intptr_t exchange_value,
287 volatile intptr_t* dest,
288 intptr_t compare_value, cmpxchg_memory_order order) {
289 #ifdef ARM
290 return arm_compare_and_swap(dest, compare_value, exchange_value);
291 #else
292 #ifdef M68K
293 return m68k_compare_and_swap(dest, compare_value, exchange_value);
294 #else
295 return __sync_val_compare_and_swap(dest, compare_value, exchange_value);
296 #endif // M68K
297 #endif // ARM
298 }
299
300 inline void* Atomic::cmpxchg_ptr(void* exchange_value,
301 volatile void* dest,
302 void* compare_value, cmpxchg_memory_order order) {
303
304 return (void *) cmpxchg_ptr((intptr_t) exchange_value,
305 (volatile intptr_t*) dest,
306 (intptr_t) compare_value, order);
307 }
308
309 inline jlong Atomic::load(volatile jlong* src) {
310 volatile jlong dest;
311 os::atomic_copy64(src, &dest);
312 return dest;
313 }
314
315 inline void Atomic::store(jlong store_value, jlong* dest) {
316 os::atomic_copy64((volatile jlong*)&store_value, (volatile jlong*)dest);
317 }
318
319 inline void Atomic::store(jlong store_value, volatile jlong* dest) {
320 os::atomic_copy64((volatile jlong*)&store_value, dest);
321 }
322
323 #endif // OS_CPU_LINUX_ZERO_VM_ATOMIC_LINUX_ZERO_INLINE_HPP
|