Remove type checking from load/store for portable (#76)

This commit is contained in:
Max Graey 2018-04-17 00:02:12 +03:00 committed by Daniel Wirtz
parent d66f9d205c
commit 1013c21359

View File

@ -3,16 +3,18 @@ module.exports = globalScope => {
var HEAP_OFFSET = 0; var HEAP_OFFSET = 0;
globalScope["allocate_memory"] = function allocate_memory(size) { globalScope["allocate_memory"] = function allocate_memory(size) {
if (!(size >>>= 0)) if (!(size >>>= 0)) return 0;
return 0;
if (HEAP_OFFSET + size > HEAP.length) { if (HEAP_OFFSET + size > HEAP.length) {
var oldHeap = HEAP; var oldHeap = HEAP;
HEAP = new Uint8Array(Math.max(65536, HEAP.length + size, HEAP.length * 2)); HEAP = new Uint8Array(Math.max(65536, HEAP.length + size, HEAP.length * 2));
HEAP.set(oldHeap); HEAP.set(oldHeap);
} }
var ptr = HEAP_OFFSET; var ptr = HEAP_OFFSET;
if ((HEAP_OFFSET += size) & 7) if ((HEAP_OFFSET += size) & 7)
HEAP_OFFSET = (HEAP_OFFSET | 7) + 1; HEAP_OFFSET = (HEAP_OFFSET | 7) + 1;
return ptr; return ptr;
}; };
@ -20,19 +22,15 @@ module.exports = globalScope => {
// TODO // TODO
}; };
globalScope["move_memory"] = function move_memory(dest, src, n) { globalScope["move_memory"] = function move_memory(dest, src, size) {
HEAP.copyWithin(dest, src, src + n); HEAP.copyWithin(dest, src, src + size);
}; };
globalScope["store"] = function store(ptr, val, off) { globalScope["store"] = function store(ptr, value, offset) {
if (typeof off === "number") HEAP[ptr + (offset | 0)] = value;
ptr += off;
HEAP[ptr] = val;
}; };
globalScope["load"] = function load(ptr) { globalScope["load"] = function load(ptr, offset) {
if (typeof off === "number") return HEAP[ptr + (offset | 0)];
ptr += off;
return HEAP[ptr];
}; };
}; };