diff options
author | Nidin Vinayakan <nidinthb@gmail.com> | 2018-10-12 01:10:29 +0200 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2018-10-11 16:10:29 -0700 |
commit | 230b9cd7f96eb3d7e35f07d4bb6f029264e6543c (patch) | |
tree | eab77ec0c100ffb46aa8f07ce4c17b301499f530 /src | |
parent | 91ecfd0ac94791612af40a7acee5640d185a84a9 (diff) | |
download | binaryen-230b9cd7f96eb3d7e35f07d4bb6f029264e6543c.tar.gz binaryen-230b9cd7f96eb3d7e35f07d4bb6f029264e6543c.tar.bz2 binaryen-230b9cd7f96eb3d7e35f07d4bb6f029264e6543c.zip |
Shared memory support for add memory import and set memory functions. (#1686)
Diffstat (limited to 'src')
-rw-r--r-- | src/binaryen-c.cpp | 10 | ||||
-rw-r--r-- | src/binaryen-c.h | 4 | ||||
-rw-r--r-- | src/js/binaryen.js-post.js | 9 |
3 files changed, 13 insertions, 10 deletions
diff --git a/src/binaryen-c.cpp b/src/binaryen-c.cpp index fbf223535..8e9ea8589 100644 --- a/src/binaryen-c.cpp +++ b/src/binaryen-c.cpp @@ -1681,15 +1681,16 @@ void BinaryenAddTableImport(BinaryenModuleRef module, const char* internalName, wasm->table.module = externalModuleName; wasm->table.base = externalBaseName; } -void BinaryenAddMemoryImport(BinaryenModuleRef module, const char* internalName, const char* externalModuleName, const char* externalBaseName) { +void BinaryenAddMemoryImport(BinaryenModuleRef module, const char* internalName, const char* externalModuleName, const char* externalBaseName, uint8_t shared) { auto* wasm = (Module*)module; if (tracing) { - std::cout << " BinaryenAddMemoryImport(the_module, \"" << internalName << "\", \"" << externalModuleName << "\", \"" << externalBaseName << "\");\n"; + std::cout << " BinaryenAddMemoryImport(the_module, \"" << internalName << "\", \"" << externalModuleName << "\", \"" << externalBaseName << "\", " << int(shared) << ");\n"; } wasm->memory.module = externalModuleName; wasm->memory.base = externalBaseName; + wasm->memory.shared = shared; } void BinaryenAddGlobalImport(BinaryenModuleRef module, const char* internalName, const char* externalModuleName, const char* externalBaseName, BinaryenType globalType) { auto* wasm = (Module*)module; @@ -1812,7 +1813,7 @@ void BinaryenSetFunctionTable(BinaryenModuleRef module, BinaryenIndex initial, B // Memory. One per module -void BinaryenSetMemory(BinaryenModuleRef module, BinaryenIndex initial, BinaryenIndex maximum, const char* exportName, const char** segments, BinaryenExpressionRef* segmentOffsets, BinaryenIndex* segmentSizes, BinaryenIndex numSegments) { +void BinaryenSetMemory(BinaryenModuleRef module, BinaryenIndex initial, BinaryenIndex maximum, const char* exportName, const char** segments, BinaryenExpressionRef* segmentOffsets, BinaryenIndex* segmentSizes, BinaryenIndex numSegments, uint8_t shared) { if (tracing) { std::cout << " {\n"; for (BinaryenIndex i = 0; i < numSegments; i++) { @@ -1846,7 +1847,7 @@ void BinaryenSetMemory(BinaryenModuleRef module, BinaryenIndex initial, Binaryen std::cout << " };\n"; std::cout << " BinaryenSetMemory(the_module, " << initial << ", " << maximum << ", "; traceNameOrNULL(exportName); - std::cout << ", segments, segmentOffsets, segmentSizes, " << numSegments << ");\n"; + std::cout << ", segments, segmentOffsets, segmentSizes, " << numSegments << ", " << int(shared) << ");\n"; std::cout << " }\n"; } @@ -1854,6 +1855,7 @@ void BinaryenSetMemory(BinaryenModuleRef module, BinaryenIndex initial, Binaryen wasm->memory.initial = initial; wasm->memory.max = maximum; wasm->memory.exists = true; + wasm->memory.shared = shared; if (exportName) { auto memoryExport = make_unique<Export>(); memoryExport->name = exportName; diff --git a/src/binaryen-c.h b/src/binaryen-c.h index 959044009..6f244e533 100644 --- a/src/binaryen-c.h +++ b/src/binaryen-c.h @@ -594,7 +594,7 @@ void BinaryenRemoveFunction(BinaryenModuleRef module, const char* name); void BinaryenAddFunctionImport(BinaryenModuleRef module, const char* internalName, const char* externalModuleName, const char* externalBaseName, BinaryenFunctionTypeRef functionType); void BinaryenAddTableImport(BinaryenModuleRef module, const char* internalName, const char* externalModuleName, const char* externalBaseName); -void BinaryenAddMemoryImport(BinaryenModuleRef module, const char* internalName, const char* externalModuleName, const char* externalBaseName); +void BinaryenAddMemoryImport(BinaryenModuleRef module, const char* internalName, const char* externalModuleName, const char* externalBaseName, uint8_t shared); void BinaryenAddGlobalImport(BinaryenModuleRef module, const char* internalName, const char* externalModuleName, const char* externalBaseName, BinaryenType globalType); // Exports @@ -623,7 +623,7 @@ void BinaryenSetFunctionTable(BinaryenModuleRef module, BinaryenIndex initial, B // Each segment has data in segments, a start offset in segmentOffsets, and a size in segmentSizes. // exportName can be NULL -void BinaryenSetMemory(BinaryenModuleRef module, BinaryenIndex initial, BinaryenIndex maximum, const char* exportName, const char** segments, BinaryenExpressionRef* segmentOffsets, BinaryenIndex* segmentSizes, BinaryenIndex numSegments); +void BinaryenSetMemory(BinaryenModuleRef module, BinaryenIndex initial, BinaryenIndex maximum, const char* exportName, const char** segments, BinaryenExpressionRef* segmentOffsets, BinaryenIndex* segmentSizes, BinaryenIndex numSegments, uint8_t shared); // Start function. One per module diff --git a/src/js/binaryen.js-post.js b/src/js/binaryen.js-post.js index fc44c335a..e34273a2a 100644 --- a/src/js/binaryen.js-post.js +++ b/src/js/binaryen.js-post.js @@ -1081,9 +1081,9 @@ Module['Module'] = function(module) { return Module['_BinaryenAddTableImport'](module, strToStack(internalName), strToStack(externalModuleName), strToStack(externalBaseName)); }); }; - this['addMemoryImport'] = function(internalName, externalModuleName, externalBaseName) { + this['addMemoryImport'] = function(internalName, externalModuleName, externalBaseName, shared) { return preserveStack(function() { - return Module['_BinaryenAddMemoryImport'](module, strToStack(internalName), strToStack(externalModuleName), strToStack(externalBaseName)); + return Module['_BinaryenAddMemoryImport'](module, strToStack(internalName), strToStack(externalModuleName), strToStack(externalBaseName), shared); }); }; this['addGlobalImport'] = function(internalName, externalModuleName, externalBaseName, globalType) { @@ -1125,7 +1125,7 @@ Module['Module'] = function(module) { ); }); }; - this['setMemory'] = function(initial, maximum, exportName, segments) { + this['setMemory'] = function(initial, maximum, exportName, segments, shared) { // segments are assumed to be { offset: expression ref, data: array of 8-bit data } if (!segments) segments = []; return preserveStack(function() { @@ -1146,7 +1146,8 @@ Module['Module'] = function(module) { return segment.data.length; }) ), - segments.length + segments.length, + shared ); }); }; |