mirror of
https://github.com/fluencelabs/assemblyscript
synced 2025-04-25 15:12:12 +00:00
Add shared memory support to compiler (#494)
This commit is contained in:
parent
0c64f21250
commit
951b6f9f45
@ -421,6 +421,7 @@ exports.main = function main(argv, options, callback) {
|
|||||||
assemblyscript.setTarget(compilerOptions, 0);
|
assemblyscript.setTarget(compilerOptions, 0);
|
||||||
assemblyscript.setNoAssert(compilerOptions, args.noAssert);
|
assemblyscript.setNoAssert(compilerOptions, args.noAssert);
|
||||||
assemblyscript.setImportMemory(compilerOptions, args.importMemory);
|
assemblyscript.setImportMemory(compilerOptions, args.importMemory);
|
||||||
|
assemblyscript.setSharedMemory(compilerOptions, args.sharedMemory);
|
||||||
assemblyscript.setImportTable(compilerOptions, args.importTable);
|
assemblyscript.setImportTable(compilerOptions, args.importTable);
|
||||||
assemblyscript.setMemoryBase(compilerOptions, args.memoryBase >>> 0);
|
assemblyscript.setMemoryBase(compilerOptions, args.memoryBase >>> 0);
|
||||||
assemblyscript.setSourceMap(compilerOptions, args.sourceMap != null);
|
assemblyscript.setSourceMap(compilerOptions, args.sourceMap != null);
|
||||||
|
@ -101,6 +101,11 @@
|
|||||||
"type": "b",
|
"type": "b",
|
||||||
"default": false
|
"default": false
|
||||||
},
|
},
|
||||||
|
"sharedMemory": {
|
||||||
|
"description": "Declare memory as shared by settings the max shared memory.",
|
||||||
|
"type": "i",
|
||||||
|
"default": 0
|
||||||
|
},
|
||||||
"memoryBase": {
|
"memoryBase": {
|
||||||
"description": "Sets the start offset of compiler-generated static memory.",
|
"description": "Sets the start offset of compiler-generated static memory.",
|
||||||
"type": "i",
|
"type": "i",
|
||||||
|
@ -186,6 +186,8 @@ export class Options {
|
|||||||
noAssert: bool = false;
|
noAssert: bool = false;
|
||||||
/** If true, imports the memory provided by the embedder. */
|
/** If true, imports the memory provided by the embedder. */
|
||||||
importMemory: bool = false;
|
importMemory: bool = false;
|
||||||
|
/** If greater than zero, declare memory as shared by setting max memory to sharedMemory. */
|
||||||
|
sharedMemory: i32 = 0;
|
||||||
/** If true, imports the function table provided by the embedder. */
|
/** If true, imports the function table provided by the embedder. */
|
||||||
importTable: bool = false;
|
importTable: bool = false;
|
||||||
/** If true, generates information necessary for source maps. */
|
/** If true, generates information necessary for source maps. */
|
||||||
@ -400,18 +402,19 @@ export class Compiler extends DiagnosticEmitter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// set up memory
|
// set up memory
|
||||||
|
var isSharedMemory = options.hasFeature(Feature.THREADS) && options.sharedMemory > 0;
|
||||||
module.setMemory(
|
module.setMemory(
|
||||||
this.options.memoryBase /* is specified */ || this.memorySegments.length
|
this.options.memoryBase /* is specified */ || this.memorySegments.length
|
||||||
? i64_low(i64_shr_u(i64_align(memoryOffset, 0x10000), i64_new(16, 0)))
|
? i64_low(i64_shr_u(i64_align(memoryOffset, 0x10000), i64_new(16, 0)))
|
||||||
: 0,
|
: 0,
|
||||||
Module.UNLIMITED_MEMORY,
|
isSharedMemory ? options.sharedMemory : Module.UNLIMITED_MEMORY,
|
||||||
this.memorySegments,
|
this.memorySegments,
|
||||||
options.target,
|
options.target,
|
||||||
"memory"
|
"memory"
|
||||||
);
|
);
|
||||||
|
|
||||||
// import memory if requested (default memory is named '0' by Binaryen)
|
// import memory if requested (default memory is named '0' by Binaryen)
|
||||||
if (options.importMemory) module.addMemoryImport("0", "env", "memory");
|
if (options.importMemory) module.addMemoryImport("0", "env", "memory", isSharedMemory);
|
||||||
|
|
||||||
// set up function table
|
// set up function table
|
||||||
var functionTable = this.functionTable;
|
var functionTable = this.functionTable;
|
||||||
|
@ -97,6 +97,11 @@ export function setImportMemory(options: Options, importMemory: bool): void {
|
|||||||
options.importMemory = importMemory;
|
options.importMemory = importMemory;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Sets the `sharedMemory` option. */
|
||||||
|
export function setSharedMemory(options: Options, sharedMemory: i32): void {
|
||||||
|
options.sharedMemory = sharedMemory;
|
||||||
|
}
|
||||||
|
|
||||||
/** Sets the `importTable` option. */
|
/** Sets the `importTable` option. */
|
||||||
export function setImportTable(options: Options, importTable: bool): void {
|
export function setImportTable(options: Options, importTable: bool): void {
|
||||||
options.importTable = importTable;
|
options.importTable = importTable;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user