///|
/// The descriptor must remain live; its offset, width and alignment must have
/// been checked by the linear-memory owner before entering these primitives.
pub extern "c" fn memory_atomic_load(
  descriptor : Int64,
  offset : Int64,
  width : Int,
) -> Int64 = "wasmoon_memory_atomic_load"

///|
pub extern "c" fn memory_atomic_store(
  descriptor : Int64,
  offset : Int64,
  width : Int,
  value : Int64,
) -> Unit = "wasmoon_memory_atomic_store"

///|
pub extern "c" fn memory_atomic_rmw(
  descriptor : Int64,
  offset : Int64,
  width : Int,
  operation : Int,
  value : Int64,
) -> Int64 = "wasmoon_memory_atomic_rmw"

///|
pub extern "c" fn memory_atomic_compare_exchange(
  descriptor : Int64,
  offset : Int64,
  width : Int,
  expected : Int64,
  replacement : Int64,
) -> Int64 = "wasmoon_memory_atomic_compare_exchange"

///|
pub extern "c" fn atomic_fence() -> Unit = "wasmoon_atomic_fence"