aboutsummaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
Diffstat (limited to 'tools')
-rw-r--r--tools/js-optimizer.js12
-rw-r--r--tools/test-js-optimizer-asm-outline1-output.js32
2 files changed, 25 insertions, 19 deletions
diff --git a/tools/js-optimizer.js b/tools/js-optimizer.js
index ad98a3f2..798fa855 100644
--- a/tools/js-optimizer.js
+++ b/tools/js-optimizer.js
@@ -1699,6 +1699,11 @@ function getStackBumpNode(ast) {
return found;
}
+function getStackBumpSize(ast) {
+ var node = getStackBumpNode(ast);
+ return node ? node[3][2][3][1] : 0;
+}
+
// Very simple 'registerization', coalescing of variables into a smaller number,
// as part of minification. Globals-level minification began in a previous pass,
// we receive extraInfo which tells us how to rename globals. (Only in asm.js.)
@@ -3007,13 +3012,14 @@ function outline(ast) {
stack.push(name);
}
asmData.stackPos = {};
+ var stackSize = getStackBumpSize(func);
for (var i = 0; i < stack.length; i++) {
- asmData.stackPos[stack[i]] = i*8;
+ asmData.stackPos[stack[i]] = stackSize + i*8;
}
// Reserve an extra two spots: one for control flow var, the other for control flow data
asmData.extraStackSize = (stack.length + 2)*8;
- asmData.controlStackPos = asmData.extraStackSize - 16;
- asmData.controlDataStackPos = asmData.extraStackSize - 8;
+ asmData.controlStackPos = stackSize + asmData.extraStackSize - 16;
+ asmData.controlDataStackPos = stackSize + asmData.extraStackSize - 8;
asmData.splitCounter = 0;
}
diff --git a/tools/test-js-optimizer-asm-outline1-output.js b/tools/test-js-optimizer-asm-outline1-output.js
index 04a4d3e8..6f1af8ca 100644
--- a/tools/test-js-optimizer-asm-outline1-output.js
+++ b/tools/test-js-optimizer-asm-outline1-output.js
@@ -200,16 +200,16 @@ function vars_w_stack(x, y) {
sp = STACKTOP;
STACKTOP = STACKTOP + 72 | 0;
a = x + y;
- HEAPF32[sp + 8 >> 2] = y;
- HEAP32[sp + 0 >> 2] = x;
- HEAP32[sp + 16 >> 2] = a;
+ HEAPF32[sp + 24 >> 2] = y;
+ HEAP32[sp + 16 >> 2] = x;
+ HEAP32[sp + 32 >> 2] = a;
vars_w_stack$1(sp);
- b = HEAPF32[sp + 24 >> 2];
- a = HEAP32[sp + 16 >> 2];
- HEAP32[sp + 16 >> 2] = a;
+ b = HEAPF32[sp + 40 >> 2];
+ a = HEAP32[sp + 32 >> 2];
+ HEAP32[sp + 32 >> 2] = a;
vars_w_stack$0(sp);
- a = HEAP32[sp + 16 >> 2];
- b = HEAPF32[sp + 24 >> 2];
+ a = HEAP32[sp + 32 >> 2];
+ b = HEAPF32[sp + 40 >> 2];
}
function lin$0(sp) {
sp = sp | 0;
@@ -443,25 +443,25 @@ function vars4$1(sp) {
function vars_w_stack$0(sp) {
sp = sp | 0;
var a = 0, b = +0;
- a = HEAP32[sp + 16 >> 2];
+ a = HEAP32[sp + 32 >> 2];
a = c(4 + a);
a = c(5 + a);
a = c(6 + a);
b = c(7 + a);
STACKTOP = sp;
- HEAP32[sp + 16 >> 2] = a;
- HEAPF32[sp + 24 >> 2] = b;
+ HEAP32[sp + 32 >> 2] = a;
+ HEAPF32[sp + 40 >> 2] = b;
}
function vars_w_stack$1(sp) {
sp = sp | 0;
var y = +0, x = 0, a = 0;
- a = HEAP32[sp + 16 >> 2];
- x = HEAP32[sp + 0 >> 2];
- y = HEAPF32[sp + 8 >> 2];
+ a = HEAP32[sp + 32 >> 2];
+ x = HEAP32[sp + 16 >> 2];
+ y = HEAPF32[sp + 24 >> 2];
a = c(1 + a);
a = c(2 + a);
a = c(3 + a);
- HEAPF32[sp + 24 >> 2] = y * x;
- HEAP32[sp + 16 >> 2] = a;
+ HEAPF32[sp + 40 >> 2] = y * x;
+ HEAP32[sp + 32 >> 2] = a;
}