summaryrefslogtreecommitdiff
path: root/src/prebuilt/wasm2c.include.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/prebuilt/wasm2c.include.c')
-rw-r--r--src/prebuilt/wasm2c.include.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/prebuilt/wasm2c.include.c b/src/prebuilt/wasm2c.include.c
index 0f1b4b31..63ab825d 100644
--- a/src/prebuilt/wasm2c.include.c
+++ b/src/prebuilt/wasm2c.include.c
@@ -32,6 +32,37 @@ const char SECTION_NAME(declarations)[] =
" if (UNLIKELY((a) + sizeof(t) > mem->size)) TRAP(OOB)\n"
"#endif\n"
"\n"
+"#if WABT_BIG_ENDIAN\n"
+"static inline void load_data(void *dest, const void *src, size_t n) {\n"
+" size_t i = 0;\n"
+" u8 *dest_chars = dest;\n"
+" memcpy(dest, src, n);\n"
+" for (i = 0; i < (n>>1); i++) {\n"
+" u8 cursor = dest_chars[i];\n"
+" dest_chars[i] = dest_chars[n - i - 1];\n"
+" dest_chars[n - i - 1] = cursor;\n"
+" }\n"
+"}\n"
+"#define LOAD_DATA(m, o, i, s) load_data(&(m.data[m.size - o - s]), i, s)\n"
+"#define DEFINE_LOAD(name, t1, t2, t3) \\\n"
+" static inline t3 name(wasm_rt_memory_t* mem, u64 addr) { \\\n"
+" MEMCHECK(mem, addr, t1); \\\n"
+" t1 result; \\\n"
+" __builtin_memcpy(&result, &mem->data[mem->size - addr - sizeof(t1)], sizeof(t1)); \\\n"
+" return (t3)(t2)result; \\\n"
+" }\n"
+"\n"
+"#define DEFINE_STORE(name, t1, t2) \\\n"
+" static inline void name(wasm_rt_memory_t* mem, u64 addr, t2 value) { \\\n"
+" MEMCHECK(mem, addr, t1); \\\n"
+" t1 wrapped = (t1)value; \\\n"
+" __builtin_memcpy(&mem->data[mem->size - addr - sizeof(t1)], &wrapped, sizeof(t1)); \\\n"
+" }\n"
+"#else\n"
+"static inline void load_data(void *dest, const void *src, size_t n) {\n"
+" memcpy(dest, src, n);\n"
+"}\n"
+"#define LOAD_DATA(m, o, i, s) load_data(&(m.data[o]), i, s)\n"
"#define DEFINE_LOAD(name, t1, t2, t3) \\\n"
" static inline t3 name(wasm_rt_memory_t* mem, u64 addr) { \\\n"
" MEMCHECK(mem, addr, t1); \\\n"
@@ -46,6 +77,7 @@ const char SECTION_NAME(declarations)[] =
" t1 wrapped = (t1)value; \\\n"
" __builtin_memcpy(&mem->data[addr], &wrapped, sizeof(t1)); \\\n"
" }\n"
+"#endif\n"
"\n"
"DEFINE_LOAD(i32_load, u32, u32, u32);\n"
"DEFINE_LOAD(i64_load, u64, u64, u64);\n"