diff options
Diffstat (limited to 'src/prebuilt/wasm2c.include.c')
-rw-r--r-- | src/prebuilt/wasm2c.include.c | 32 |
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" |