aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2011-12-10 10:37:15 -0800
committerAlon Zakai <alonzakai@gmail.com>2011-12-10 10:37:15 -0800
commitc9026478f5def2fad7ef6c3a856a5b449f4def07 (patch)
treea63dffefcebcde716082dbe4157f11ff977fe0e6 /src
parent5ef5f0458be89b38b62be06d44c847b9dfd7736f (diff)
do unsigned 32-bit loads properly in ta1
Diffstat (limited to 'src')
-rw-r--r--src/parseTools.js4
-rw-r--r--src/preamble.js4
2 files changed, 5 insertions, 3 deletions
diff --git a/src/parseTools.js b/src/parseTools.js
index a2f4458f..024026c8 100644
--- a/src/parseTools.js
+++ b/src/parseTools.js
@@ -1238,7 +1238,7 @@ function makeGetPos(ptr) {
return ptr;
}
-var IHEAP_FHEAP = set('IHEAP', 'FHEAP');
+var IHEAP_FHEAP = set('IHEAP', 'IHEAPU', 'FHEAP');
function makePointer(slab, pos, allocator, type) {
assert(type, 'makePointer requires type info');
@@ -1278,7 +1278,7 @@ function makeGetSlabs(ptr, type, allowMultiple, unsigned) {
if (type in Runtime.FLOAT_TYPES || type === 'int64') { // XXX should be i64, no?
return ['FHEAP']; // If USE_FHEAP is false, will fail at runtime. At compiletime we do need it for library stuff.
} else if (type in Runtime.INT_TYPES || isPointerType(type)) {
- return ['IHEAP'];
+ return [unsigned ? 'IHEAPU' : 'IHEAP'];
} else {
assert(allowMultiple, 'Unknown slab type and !allowMultiple: ' + type);
if (USE_FHEAP) {
diff --git a/src/preamble.js b/src/preamble.js
index 2fd8f94c..a6556095 100644
--- a/src/preamble.js
+++ b/src/preamble.js
@@ -521,7 +521,7 @@ function alignMemoryPage(x) {
var HEAP;
#if USE_TYPED_ARRAYS == 1
-var IHEAP;
+var IHEAP, IHEAPU;
#if USE_FHEAP
var FHEAP;
#endif
@@ -547,6 +547,7 @@ function enlargeMemory() {
var oldIHEAP = IHEAP;
HEAP = IHEAP = new Int32Array(TOTAL_MEMORY);
IHEAP.set(oldIHEAP);
+ IHEAPU = new Uint32Array(IHEAP.buffer);
#if USE_FHEAP
var oldFHEAP = FHEAP;
FHEAP = new Float64Array(TOTAL_MEMORY);
@@ -579,6 +580,7 @@ var FAST_MEMORY = Module['FAST_MEMORY'] || {{{ FAST_MEMORY }}};
#if USE_TYPED_ARRAYS == 1
HEAP = IHEAP = new Int32Array(TOTAL_MEMORY);
+ IHEAPU = new Uint32Array(IHEAP.buffer);
#if USE_FHEAP
FHEAP = new Float64Array(TOTAL_MEMORY);
#endif