From 36d81cda763afcab72298ce87b6b93a616c2edcd Mon Sep 17 00:00:00 2001 From: Wouter van Oortmerssen Date: Mon, 4 Oct 2021 16:01:29 -0700 Subject: [PATCH] [Memory64] embind / safe heap JS changes for 64-bit --- src/embind/embind.js | 6 ++++++ src/runtime_safe_heap.js | 6 +++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/embind/embind.js b/src/embind/embind.js index 67a55b5400ecb..9f2a0864bdb18 100644 --- a/src/embind/embind.js +++ b/src/embind/embind.js @@ -405,6 +405,7 @@ var LibraryEmbind = { }, $heap32VectorToArray: function(count, firstElement) { + {{{ from64('firstElement') }}} var array = []; for (var i = 0; i < count; i++) { array.push(HEAP32[(firstElement >> 2) + i]); @@ -476,6 +477,7 @@ var LibraryEmbind = { $getShiftFromSize__deps: [], $getShiftFromSize: function(size) { + {{{ from64('size') }}} switch (size) { case 1: return 0; case 2: return 1; @@ -874,6 +876,10 @@ var LibraryEmbind = { Uint32Array, Float32Array, Float64Array, +#if WASM_BIGINT + BigInt64Array, + BigUint64Array, +#endif ]; var TA = typeMapping[dataTypeIndex]; diff --git a/src/runtime_safe_heap.js b/src/runtime_safe_heap.js index 88e4d24253cab..d90142fd7d73d 100644 --- a/src/runtime_safe_heap.js +++ b/src/runtime_safe_heap.js @@ -14,7 +14,7 @@ @param {number|boolean=} noSafe */ function setValue(ptr, value, type, noSafe) { type = type || 'i8'; - if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit + if (type.charAt(type.length-1) === '*') type = '{{{ POINTER_TYPE }}}'; #if SAFE_HEAP if (noSafe) { switch (type) { @@ -49,7 +49,7 @@ function setValue(ptr, value, type, noSafe) { @param {number|boolean=} noSafe */ function getValue(ptr, type, noSafe) { type = type || 'i8'; - if (type.charAt(type.length-1) === '*') type = 'i32'; // pointers are 32-bit + if (type.charAt(type.length-1) === '*') type = '{{{ POINTER_TYPE }}}'; #if SAFE_HEAP if (noSafe) { switch (type) { @@ -89,7 +89,7 @@ function getSafeHeapType(bytes, isFloat) { case 1: return 'i8'; case 2: return 'i16'; case 4: return isFloat ? 'float' : 'i32'; - case 8: return 'double'; + case 8: return isFloat ? 'double' : 'i64'; default: assert(0); } }