diff options
-rw-r--r-- | src/binaryen-c.cpp | 56 |
1 files changed, 55 insertions, 1 deletions
diff --git a/src/binaryen-c.cpp b/src/binaryen-c.cpp index 23472634f..cc543b611 100644 --- a/src/binaryen-c.cpp +++ b/src/binaryen-c.cpp @@ -4695,6 +4695,60 @@ size_t BinaryenSizeofAllocateAndWriteResult(void) { return sizeof(BinaryenModuleAllocateAndWriteResult); } -#endif +// Helpers for accessing Binaryen's memory from another module without the +// need to round-trip through JS, e.g. when allocating and initializing +// strings passed to / reading strings returned by the C-API. + +// TODO: Remove these once Wasm supports multiple memories. + +// Stores an 8-bit integer to Binaryen memory. +EMSCRIPTEN_KEEPALIVE +void _i32_store8(int8_t* ptr, int8_t value) { *ptr = value; } + +// Stores a 16-bit integer to Binaryen memory. +EMSCRIPTEN_KEEPALIVE +void _i32_store16(int16_t* ptr, int16_t value) { *ptr = value; } + +// Stores a 32-bit integer to Binaryen memory. +EMSCRIPTEN_KEEPALIVE +void _i32_store(int32_t* ptr, int32_t value) { *ptr = value; } + +// Stores a 32-bit float to Binaryen memory. +EMSCRIPTEN_KEEPALIVE +void _f32_store(float* ptr, float value) { *ptr = value; } + +// Stores a 64-bit float to Binaryen memory. +EMSCRIPTEN_KEEPALIVE +void _f64_store(double* ptr, double value) { *ptr = value; } + +// Loads an 8-bit signed integer from Binaryen memory. +EMSCRIPTEN_KEEPALIVE +int8_t _i32_load8_s(int8_t* ptr) { return *ptr; } + +// Loads an 8-bit unsigned integer from Binaryen memory. +EMSCRIPTEN_KEEPALIVE +uint8_t _i32_load8_u(uint8_t* ptr) { return *ptr; } + +// Loads a 16-bit signed integer from Binaryen memory. +EMSCRIPTEN_KEEPALIVE +int16_t _i32_load16_s(int16_t* ptr) { return *ptr; } + +// Loads a 16-bit unsigned integer from Binaryen memory. +EMSCRIPTEN_KEEPALIVE +uint16_t _i32_load16_u(uint16_t* ptr) { return *ptr; } + +// Loads a 32-bit integer from Binaryen memory. +EMSCRIPTEN_KEEPALIVE +int32_t _i32_load(int32_t* ptr) { return *ptr; } + +// Loads a 32-bit float from Binaryen memory. +EMSCRIPTEN_KEEPALIVE +float _f32_load(float* ptr) { return *ptr; } + +// Loads a 64-bit float from Binaryen memory. +EMSCRIPTEN_KEEPALIVE +double _f64_load(double* ptr) { return *ptr; } + +#endif // __EMSCRIPTEN__ } // extern "C" |