From b13b896559ab311abb02e8fb7d477efe2ea8dd70 Mon Sep 17 00:00:00 2001 From: dcode Date: Tue, 26 Nov 2019 14:40:24 +0100 Subject: [PATCH 1/3] Add memory helpers for using the C-API from Wasm --- src/binaryen-c.cpp | 74 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 73 insertions(+), 1 deletion(-) diff --git a/src/binaryen-c.cpp b/src/binaryen-c.cpp index 509e9b56925..fcc3cb259da 100644 --- a/src/binaryen-c.cpp +++ b/src/binaryen-c.cpp @@ -4695,6 +4695,78 @@ size_t BinaryenSizeofAllocateAndWriteResult(void) { return sizeof(BinaryenModuleAllocateAndWriteResult); } -#endif +// 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" From 2ba90bfbc882c6681c3ae92c6ba4538ee1dc3dc8 Mon Sep 17 00:00:00 2001 From: dcode Date: Tue, 26 Nov 2019 15:39:57 +0100 Subject: [PATCH 2/3] format --- src/binaryen-c.cpp | 48 ++++++++++++---------------------------------- 1 file changed, 12 insertions(+), 36 deletions(-) diff --git a/src/binaryen-c.cpp b/src/binaryen-c.cpp index fcc3cb259da..070e174dab4 100644 --- a/src/binaryen-c.cpp +++ b/src/binaryen-c.cpp @@ -4697,75 +4697,51 @@ size_t BinaryenSizeofAllocateAndWriteResult(void) { // Stores an 8-bit integer to Binaryen memory. EMSCRIPTEN_KEEPALIVE -void _i32_store8(int8_t* ptr, int8_t value) { - *ptr = value; -} +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; -} +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; -} +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; -} +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; -} +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; -} +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; -} +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; -} +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; -} +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; -} +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; -} +float _f32_load(float* ptr) { return *ptr; } // Loads a 64-bit float from Binaryen memory. EMSCRIPTEN_KEEPALIVE -double _f64_load(double* ptr) { - return *ptr; -} +double _f64_load(double* ptr) { return *ptr; } #endif // __EMSCRIPTEN__ From b42791ed9da5bbccc71093ab0aa02edccb0426ce Mon Sep 17 00:00:00 2001 From: dcode Date: Wed, 27 Nov 2019 18:49:16 +0100 Subject: [PATCH 3/3] add comment --- src/binaryen-c.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/binaryen-c.cpp b/src/binaryen-c.cpp index 070e174dab4..1b7164c17c8 100644 --- a/src/binaryen-c.cpp +++ b/src/binaryen-c.cpp @@ -4695,6 +4695,12 @@ size_t BinaryenSizeofAllocateAndWriteResult(void) { return sizeof(BinaryenModuleAllocateAndWriteResult); } +// 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; }