2796N/A * or visit www.oracle.com if you need additional information or have any
2796N/A#include "runtime/atomic.hpp"
2796N/A#include "runtime/orderAccess.hpp"
2796N/A#include "vm_version_x86.hpp"
2796N/Ainline julong OrderAccess::load_acquire(volatile julong* p) { return Atomic::load((volatile jlong*)p); }
2796N/Ainline void* OrderAccess::load_ptr_acquire(volatile void* p) { return *(void* volatile *)p; }
2796N/Ainline void* OrderAccess::load_ptr_acquire(const volatile void* p) { return *(void* const volatile *)p; }
2796N/Ainline void OrderAccess::release_store(volatile julong* p, julong v) { Atomic::store((jlong)v, (volatile jlong*)p); }
2796N/Ainline void OrderAccess::release_store_ptr(volatile void* p, void* v) { *(void* volatile *)p = v; }
2796N/Ainline void OrderAccess::store_fence(jubyte* p, jubyte v) { store_fence((jbyte*)p, (jbyte)v); }
2796N/Ainline void OrderAccess::store_fence(jushort* p, jushort v) { store_fence((jshort*)p, (jshort)v); }
2796N/Ainline void OrderAccess::store_fence(julong* p, julong v) { store_fence((jlong*)p, (jlong)v); }
2796N/A// Must duplicate definitions instead of calling store_fence because we don't want to cast away volatile.
2796N/Ainline void OrderAccess::release_store_fence(volatile jubyte* p, jubyte v) { release_store_fence((volatile jbyte*)p, (jbyte)v); }
2796N/Ainline void OrderAccess::release_store_fence(volatile jushort* p, jushort v) { release_store_fence((volatile jshort*)p, (jshort)v); }
2796N/Ainline void OrderAccess::release_store_fence(volatile juint* p, juint v) { release_store_fence((volatile jint*)p, (jint)v); }
2796N/Ainline void OrderAccess::release_store_fence(volatile julong* p, julong v) { release_store_fence((volatile jlong*)p, (jlong)v); }
2796N/Ainline void OrderAccess::release_store_fence(volatile jfloat* p, jfloat v) { *p = v; fence(); }
2796N/Ainline void OrderAccess::release_store_fence(volatile jdouble* p, jdouble v) { *p = v; fence(); }