diff options
author | Alon Zakai <alonzakai@gmail.com> | 2013-07-17 13:43:14 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2013-07-17 13:43:14 -0700 |
commit | 82f09254a7386bae7fde93f9ef381af5110c70e5 (patch) | |
tree | 84430f4c77064fe279d51e83b82576994ccc1ec8 /tools/js-optimizer.js | |
parent | f02de71371a80e00275845a9a9b3f5f92d22a100 (diff) |
do not overlap the normal C stack with outliner-spilled variables
Diffstat (limited to 'tools/js-optimizer.js')
-rw-r--r-- | tools/js-optimizer.js | 12 |
1 files changed, 9 insertions, 3 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; } |