summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNidin Vinayakan <nidinthb@gmail.com>2018-10-12 01:10:29 +0200
committerAlon Zakai <alonzakai@gmail.com>2018-10-11 16:10:29 -0700
commit230b9cd7f96eb3d7e35f07d4bb6f029264e6543c (patch)
treeeab77ec0c100ffb46aa8f07ce4c17b301499f530 /src
parent91ecfd0ac94791612af40a7acee5640d185a84a9 (diff)
downloadbinaryen-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.cpp10
-rw-r--r--src/binaryen-c.h4
-rw-r--r--src/js/binaryen.js-post.js9
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
);
});
};