From 219294c02b4129d8a063626c72dc3f867ab75680 Mon Sep 17 00:00:00 2001 From: Nikolay Nikolov Date: Wed, 25 May 2022 19:05:28 +0300 Subject: [PATCH] + added AtomicLoad() to the WebAssembly unit --- rtl/wasm32/webassembly.pp | 49 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/rtl/wasm32/webassembly.pp b/rtl/wasm32/webassembly.pp index 5e32d0c44f..6e3a11173e 100644 --- a/rtl/wasm32/webassembly.pp +++ b/rtl/wasm32/webassembly.pp @@ -19,6 +19,15 @@ interface procedure AtomicFence; inline; +function AtomicLoad(constref Mem: Int8): Int8; inline; +function AtomicLoad(constref Mem: UInt8): UInt8; inline; +function AtomicLoad(constref Mem: Int16): Int16; inline; +function AtomicLoad(constref Mem: UInt16): UInt16; inline; +function AtomicLoad(constref Mem: Int32): Int32; inline; +function AtomicLoad(constref Mem: UInt32): UInt32; inline; +function AtomicLoad(constref Mem: Int64): Int64; inline; +function AtomicLoad(constref Mem: UInt64): UInt64; inline; + function AtomicAdd(var Mem: Int8; Data: Int8): Int8; inline; function AtomicAdd(var Mem: UInt8; Data: UInt8): UInt8; inline; function AtomicAdd(var Mem: Int16; Data: Int16): Int16; inline; @@ -91,6 +100,46 @@ begin fpc_wasm32_atomic_fence; end; +function AtomicLoad(constref Mem: Int8): Int8; inline; +begin + AtomicLoad:=Int8(fpc_wasm32_i32_atomic_load8_u(@Mem)); +end; + +function AtomicLoad(constref Mem: UInt8): UInt8; inline; +begin + AtomicLoad:=UInt8(fpc_wasm32_i32_atomic_load8_u(@Mem)); +end; + +function AtomicLoad(constref Mem: Int16): Int16; inline; +begin + AtomicLoad:=Int16(fpc_wasm32_i32_atomic_load16_u(@Mem)); +end; + +function AtomicLoad(constref Mem: UInt16): UInt16; inline; +begin + AtomicLoad:=UInt16(fpc_wasm32_i32_atomic_load16_u(@Mem)); +end; + +function AtomicLoad(constref Mem: Int32): Int32; inline; +begin + AtomicLoad:=Int32(fpc_wasm32_i32_atomic_load(@Mem)); +end; + +function AtomicLoad(constref Mem: UInt32): UInt32; inline; +begin + AtomicLoad:=UInt32(fpc_wasm32_i32_atomic_load(@Mem)); +end; + +function AtomicLoad(constref Mem: Int64): Int64; inline; +begin + AtomicLoad:=Int64(fpc_wasm32_i64_atomic_load(@Mem)); +end; + +function AtomicLoad(constref Mem: UInt64): UInt64; inline; +begin + AtomicLoad:=UInt64(fpc_wasm32_i64_atomic_load(@Mem)); +end; + function AtomicAdd(var Mem: Int8; Data: Int8): Int8; inline; begin AtomicAdd:=Int8(fpc_wasm32_i32_atomic_rmw8_add_u(@Mem,Byte(Data)));