summaryrefslogtreecommitdiff
path: root/src/template/wasm2c_atomicops.declarations.c
diff options
context:
space:
mode:
authorSoni L <EnderMoneyMod@gmail.com>2023-11-14 22:25:41 -0300
committerGitHub <noreply@github.com>2023-11-14 17:25:41 -0800
commit21e73b7e6eee4addbc84ae265ee2f5ca88178934 (patch)
treea6ea97dbf70a173e7f5667487ca0e4a64a8b97f5 /src/template/wasm2c_atomicops.declarations.c
parenta0bc02eacae79763d35360673620ab38d527f68a (diff)
downloadwabt-21e73b7e6eee4addbc84ae265ee2f5ca88178934.tar.gz
wabt-21e73b7e6eee4addbc84ae265ee2f5ca88178934.tar.bz2
wabt-21e73b7e6eee4addbc84ae265ee2f5ca88178934.zip
wasm2c: Improve address abstraction for BE support (#2328)
Diffstat (limited to 'src/template/wasm2c_atomicops.declarations.c')
-rw-r--r--src/template/wasm2c_atomicops.declarations.c55
1 files changed, 28 insertions, 27 deletions
diff --git a/src/template/wasm2c_atomicops.declarations.c b/src/template/wasm2c_atomicops.declarations.c
index 78d9772e..976f7f95 100644
--- a/src/template/wasm2c_atomicops.declarations.c
+++ b/src/template/wasm2c_atomicops.declarations.c
@@ -125,15 +125,15 @@
TRAP(UNALIGNED); \
}
-#define DEFINE_ATOMIC_LOAD(name, t1, t2, t3, force_read) \
- static inline t3 name(wasm_rt_memory_t* mem, u64 addr) { \
- MEMCHECK(mem, addr, t1); \
- ATOMIC_ALIGNMENT_CHECK(addr, t1); \
- t1 result; \
- wasm_rt_memcpy(&result, &mem->data[addr], sizeof(t1)); \
- result = atomic_load_##t1(&mem->data[addr]); \
- force_read(result); \
- return (t3)(t2)result; \
+#define DEFINE_ATOMIC_LOAD(name, t1, t2, t3, force_read) \
+ static inline t3 name(wasm_rt_memory_t* mem, u64 addr) { \
+ MEMCHECK(mem, addr, t1); \
+ ATOMIC_ALIGNMENT_CHECK(addr, t1); \
+ t1 result; \
+ wasm_rt_memcpy(&result, MEM_ADDR(mem, addr, sizeof(t1)), sizeof(t1)); \
+ result = atomic_load_##t1(MEM_ADDR(mem, addr, sizeof(t1))); \
+ force_read(result); \
+ return (t3)(t2)result; \
}
DEFINE_ATOMIC_LOAD(i32_atomic_load, u32, u32, u32, FORCE_READ_INT)
@@ -149,7 +149,7 @@ DEFINE_ATOMIC_LOAD(i64_atomic_load32_u, u32, u64, u64, FORCE_READ_INT)
MEMCHECK(mem, addr, t1); \
ATOMIC_ALIGNMENT_CHECK(addr, t1); \
t1 wrapped = (t1)value; \
- atomic_store_##t1(&mem->data[addr], wrapped); \
+ atomic_store_##t1(MEM_ADDR(mem, addr, sizeof(t1)), wrapped); \
}
DEFINE_ATOMIC_STORE(i32_atomic_store, u32, u32)
@@ -160,13 +160,13 @@ DEFINE_ATOMIC_STORE(i64_atomic_store8, u8, u64)
DEFINE_ATOMIC_STORE(i64_atomic_store16, u16, u64)
DEFINE_ATOMIC_STORE(i64_atomic_store32, u32, u64)
-#define DEFINE_ATOMIC_RMW(name, op, t1, t2) \
- static inline t2 name(wasm_rt_memory_t* mem, u64 addr, t2 value) { \
- MEMCHECK(mem, addr, t1); \
- ATOMIC_ALIGNMENT_CHECK(addr, t1); \
- t1 wrapped = (t1)value; \
- t1 ret = atomic_##op##_##t1(&mem->data[addr], wrapped); \
- return (t2)ret; \
+#define DEFINE_ATOMIC_RMW(name, op, t1, t2) \
+ static inline t2 name(wasm_rt_memory_t* mem, u64 addr, t2 value) { \
+ MEMCHECK(mem, addr, t1); \
+ ATOMIC_ALIGNMENT_CHECK(addr, t1); \
+ t1 wrapped = (t1)value; \
+ t1 ret = atomic_##op##_##t1(MEM_ADDR(mem, addr, sizeof(t1)), wrapped); \
+ return (t2)ret; \
}
DEFINE_ATOMIC_RMW(i32_atomic_rmw8_add_u, add, u8, u32)
@@ -217,16 +217,17 @@ DEFINE_ATOMIC_RMW(i64_atomic_rmw16_xchg_u, exchange, u16, u64)
DEFINE_ATOMIC_RMW(i64_atomic_rmw32_xchg_u, exchange, u32, u64)
DEFINE_ATOMIC_RMW(i64_atomic_rmw_xchg, exchange, u64, u64)
-#define DEFINE_ATOMIC_CMP_XCHG(name, t1, t2) \
- static inline t1 name(wasm_rt_memory_t* mem, u64 addr, t1 expected, \
- t1 replacement) { \
- MEMCHECK(mem, addr, t2); \
- ATOMIC_ALIGNMENT_CHECK(addr, t2); \
- t2 expected_wrapped = (t2)expected; \
- t2 replacement_wrapped = (t2)replacement; \
- t2 old = atomic_compare_exchange_##t2(&mem->data[addr], &expected_wrapped, \
- replacement_wrapped); \
- return (t1)old; \
+#define DEFINE_ATOMIC_CMP_XCHG(name, t1, t2) \
+ static inline t1 name(wasm_rt_memory_t* mem, u64 addr, t1 expected, \
+ t1 replacement) { \
+ MEMCHECK(mem, addr, t2); \
+ ATOMIC_ALIGNMENT_CHECK(addr, t2); \
+ t2 expected_wrapped = (t2)expected; \
+ t2 replacement_wrapped = (t2)replacement; \
+ t2 old = \
+ atomic_compare_exchange_##t2(MEM_ADDR(mem, addr, sizeof(t2)), \
+ &expected_wrapped, replacement_wrapped); \
+ return (t1)old; \
}
DEFINE_ATOMIC_CMP_XCHG(i32_atomic_rmw8_cmpxchg_u, u32, u8);