aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2013-07-17 17:27:35 -0700
committerAlon Zakai <alonzakai@gmail.com>2013-07-17 17:27:35 -0700
commit7e8bd8bc10fa0d70913c21dd914c70db0bbc2523 (patch)
tree5cd200db647eed1b6f5c0d83c7cb0461ec1c4dba
parent3a1a48bb749e7001b8f3eb6bff0f486a4d03a040 (diff)
add asm coercion when outlining
-rw-r--r--tools/js-optimizer.js28
-rw-r--r--tools/test-js-optimizer-asm-outline1-output.js66
-rw-r--r--tools/test-js-optimizer-asm-outline2-output.js192
3 files changed, 142 insertions, 144 deletions
diff --git a/tools/js-optimizer.js b/tools/js-optimizer.js
index a3b7db53..9de40d20 100644
--- a/tools/js-optimizer.js
+++ b/tools/js-optimizer.js
@@ -1540,24 +1540,22 @@ function detectAsmCoercion(node, asmInfo) {
// for params, +x vs x|0, for vars, 0.0 vs 0
if (node[0] === 'num' && node[1].toString().indexOf('.') >= 0) return ASM_DOUBLE;
if (node[0] === 'unary-prefix') return ASM_DOUBLE;
- if (asmInfo && node[0] == 'name') {
- if (node[1] in asmInfo.vars) return asmInfo.vars[node[1]];
- if (node[1] in asmInfo.params) return asmInfo.params[node[1]];
- }
+ if (asmInfo && node[0] == 'name') return getAsmType(node[1], asmInfo);
return ASM_INT;
}
-function makeAsmParamCoercion(param, type) {
- return type === ASM_INT ? ['binary', '|', ['name', param], ['num', 0]] : ['unary-prefix', '+', ['name', param]];
+function makeAsmCoercion(node, type) {
+ return type === ASM_INT ? ['binary', '|', node, ['num', 0]] : ['unary-prefix', '+', node];
}
function makeAsmVarDef(v, type) {
return [v, type === ASM_INT ? ['num', 0] : ['unary-prefix', '+', ['num', 0]]];
}
-function getAsmType(asmInfo, name) {
+function getAsmType(name, asmInfo) {
if (name in asmInfo.vars) return asmInfo.vars[name];
- return asmInfo.params[name];
+ if (name in asmInfo.params) return asmInfo.params[name];
+ assert(false, 'unknown var ' + name);
}
function normalizeAsm(func) {
@@ -1658,7 +1656,7 @@ function denormalizeAsm(func, data) {
// add param coercions
var next = 0;
func[2].forEach(function(param) {
- stats[next++] = ['stat', ['assign', true, ['name', param], makeAsmParamCoercion(param, data.params[param])]];
+ stats[next++] = ['stat', ['assign', true, ['name', param], makeAsmCoercion(['name', param], data.params[param])]];
});
// add variable definitions
var varDefs = [];
@@ -3125,12 +3123,12 @@ function outline(ast) {
var reps = [];
for (var v in codeInfo.reads) {
if (v != 'sp') {
- reps.push(['stat', ['assign', true, ['sub', ['name', getAsmType(asmData, v) == ASM_INT ? 'HEAP32' : 'HEAPF32'], ['binary', '>>', ['binary', '+', ['name', 'sp'], ['num', asmData.stackPos[v]]], ['num', '2']]], ['name', v]]]);
+ reps.push(['stat', ['assign', true, ['sub', ['name', getAsmType(v, asmData) == ASM_INT ? 'HEAP32' : 'HEAPF32'], ['binary', '>>', ['binary', '+', ['name', 'sp'], ['num', asmData.stackPos[v]]], ['num', '2']]], ['name', v]]]);
}
}
reps.push(['stat', ['call', ['name', newIdent], [['name', 'sp']]]]);
for (var v in codeInfo.writes) {
- reps.push(['stat', ['assign', true, ['name', v], ['sub', ['name', getAsmType(asmData, v) == ASM_INT ? 'HEAP32' : 'HEAPF32'], ['binary', '>>', ['binary', '+', ['name', 'sp'], ['num', asmData.stackPos[v]]], ['num', '2']]]]]);
+ reps.push(['stat', ['assign', true, ['name', v], makeAsmCoercion(['sub', ['name', getAsmType(v, asmData) == ASM_INT ? 'HEAP32' : 'HEAPF32'], ['binary', '>>', ['binary', '+', ['name', 'sp'], ['num', asmData.stackPos[v]]], ['num', '2']]], getAsmType(v, asmData))]]);
}
// Generate new function
if (codeInfo.hasReturn || codeInfo.hasBreak || codeInfo.hasContinue) {
@@ -3247,21 +3245,21 @@ function outline(ast) {
// add spills and unspills in outlined code outside the OL loop
for (var v in codeInfo.reads) {
if (v != 'sp') {
- code.unshift(['stat', ['assign', true, ['name', v], ['sub', ['name', getAsmType(asmData, v) == ASM_INT ? 'HEAP32' : 'HEAPF32'], ['binary', '>>', ['binary', '+', ['name', 'sp'], ['num', asmData.stackPos[v]]], ['num', '2']]]]]);
+ code.unshift(['stat', ['assign', true, ['name', v], makeAsmCoercion(['sub', ['name', getAsmType(v, asmData) == ASM_INT ? 'HEAP32' : 'HEAPF32'], ['binary', '>>', ['binary', '+', ['name', 'sp'], ['num', asmData.stackPos[v]]], ['num', '2']]], getAsmType(v, asmData))]]);
}
}
for (var v in codeInfo.writes) {
- code.push(['stat', ['assign', true, ['sub', ['name', getAsmType(asmData, v) == ASM_INT ? 'HEAP32' : 'HEAPF32'], ['binary', '>>', ['binary', '+', ['name', 'sp'], ['num', asmData.stackPos[v]]], ['num', '2']]], ['name', v]]]);
+ code.push(['stat', ['assign', true, ['sub', ['name', getAsmType(v, asmData) == ASM_INT ? 'HEAP32' : 'HEAPF32'], ['binary', '>>', ['binary', '+', ['name', 'sp'], ['num', asmData.stackPos[v]]], ['num', '2']]], ['name', v]]]);
}
// finalize
var newFunc = ['defun', newIdent, ['sp'], code];
var newAsmData = { params: { sp: ASM_INT }, vars: {} };
for (var v in codeInfo.reads) {
- if (v != 'sp') newAsmData.vars[v] = getAsmType(asmData, v);
+ if (v != 'sp') newAsmData.vars[v] = getAsmType(v, asmData);
}
for (var v in codeInfo.writes) {
assert(v != 'sp');
- newAsmData.vars[v] = getAsmType(asmData, v);
+ newAsmData.vars[v] = getAsmType(v, asmData);
}
denormalizeAsm(newFunc, newAsmData);
// replace in stats
diff --git a/tools/test-js-optimizer-asm-outline1-output.js b/tools/test-js-optimizer-asm-outline1-output.js
index b61dcf25..ea447ac1 100644
--- a/tools/test-js-optimizer-asm-outline1-output.js
+++ b/tools/test-js-optimizer-asm-outline1-output.js
@@ -151,8 +151,8 @@ function vars2(x, y) {
HEAP32[sp + 16 >> 2] = a;
HEAPF32[sp + 24 >> 2] = b;
vars2$0(sp);
- a = HEAP32[sp + 16 >> 2];
- b = HEAPF32[sp + 24 >> 2];
+ a = HEAP32[sp + 16 >> 2] | 0;
+ b = +HEAPF32[sp + 24 >> 2];
STACKTOP = sp;
}
function vars3(x, y) {
@@ -165,12 +165,12 @@ function vars3(x, y) {
HEAP32[sp + 0 >> 2] = x;
HEAPF32[sp + 8 >> 2] = y;
vars3$1(sp);
- a = HEAP32[sp + 16 >> 2];
+ a = HEAP32[sp + 16 >> 2] | 0;
HEAP32[sp + 16 >> 2] = a;
HEAPF32[sp + 8 >> 2] = y;
HEAP32[sp + 0 >> 2] = x;
vars3$0(sp);
- a = HEAP32[sp + 16 >> 2];
+ a = HEAP32[sp + 16 >> 2] | 0;
STACKTOP = sp;
}
function vars4(x, y) {
@@ -184,13 +184,13 @@ function vars4(x, y) {
HEAP32[sp + 0 >> 2] = x;
HEAP32[sp + 16 >> 2] = a;
vars4$1(sp);
- b = HEAPF32[sp + 24 >> 2];
- a = HEAP32[sp + 16 >> 2];
+ b = +HEAPF32[sp + 24 >> 2];
+ a = HEAP32[sp + 16 >> 2] | 0;
HEAP32[sp + 16 >> 2] = a;
HEAP32[sp + 0 >> 2] = x;
vars4$0(sp);
- a = HEAP32[sp + 16 >> 2];
- b = HEAPF32[sp + 24 >> 2];
+ a = HEAP32[sp + 16 >> 2] | 0;
+ b = +HEAPF32[sp + 24 >> 2];
STACKTOP = sp;
}
function vars_w_stack(x, y) {
@@ -204,12 +204,12 @@ function vars_w_stack(x, y) {
HEAP32[sp + 16 >> 2] = x;
HEAP32[sp + 32 >> 2] = a;
vars_w_stack$1(sp);
- b = HEAPF32[sp + 40 >> 2];
- a = HEAP32[sp + 32 >> 2];
+ b = +HEAPF32[sp + 40 >> 2];
+ a = HEAP32[sp + 32 >> 2] | 0;
HEAP32[sp + 32 >> 2] = a;
vars_w_stack$0(sp);
- a = HEAP32[sp + 32 >> 2];
- b = HEAPF32[sp + 40 >> 2];
+ a = HEAP32[sp + 32 >> 2] | 0;
+ b = +HEAPF32[sp + 40 >> 2];
}
function lin$0(sp) {
sp = sp | 0;
@@ -373,8 +373,8 @@ function mix$1(sp) {
function vars$0(sp) {
sp = sp | 0;
var x = 0, y = +0;
- y = HEAPF32[sp + 8 >> 2];
- x = HEAP32[sp + 0 >> 2];
+ y = +HEAPF32[sp + 8 >> 2];
+ x = HEAP32[sp + 0 >> 2] | 0;
c(5 + (x + y));
c(6 + y * x);
c(7 + (x + y));
@@ -383,8 +383,8 @@ function vars$0(sp) {
function vars$1(sp) {
sp = sp | 0;
var x = 0, y = +0;
- y = HEAPF32[sp + 8 >> 2];
- x = HEAP32[sp + 0 >> 2];
+ y = +HEAPF32[sp + 8 >> 2];
+ x = HEAP32[sp + 0 >> 2] | 0;
c(1 + (x + y));
c(2 + y * x);
c(3 + (x + y));
@@ -393,8 +393,8 @@ function vars$1(sp) {
function vars2$0(sp) {
sp = sp | 0;
var a = 0, b = +0;
- b = HEAPF32[sp + 24 >> 2];
- a = HEAP32[sp + 16 >> 2];
+ b = +HEAPF32[sp + 24 >> 2];
+ a = HEAP32[sp + 16 >> 2] | 0;
a = c(3 + a);
b = c(4 + b);
a = c(5 + a);
@@ -405,9 +405,9 @@ function vars2$0(sp) {
function vars3$0(sp) {
sp = sp | 0;
var a = 0, y = +0, x = 0;
- x = HEAP32[sp + 0 >> 2];
- y = HEAPF32[sp + 8 >> 2];
- a = HEAP32[sp + 16 >> 2];
+ x = HEAP32[sp + 0 >> 2] | 0;
+ y = +HEAPF32[sp + 8 >> 2];
+ a = HEAP32[sp + 16 >> 2] | 0;
a = c(4 + y * x);
a = c(5 + a);
a = c(6 + y * x);
@@ -417,9 +417,9 @@ function vars3$0(sp) {
function vars3$1(sp) {
sp = sp | 0;
var a = 0, x = 0, y = +0;
- y = HEAPF32[sp + 8 >> 2];
- x = HEAP32[sp + 0 >> 2];
- a = HEAP32[sp + 16 >> 2];
+ y = +HEAPF32[sp + 8 >> 2];
+ x = HEAP32[sp + 0 >> 2] | 0;
+ a = HEAP32[sp + 16 >> 2] | 0;
a = x + y;
a = c(1 + a);
a = c(2 + y * x);
@@ -429,8 +429,8 @@ function vars3$1(sp) {
function vars4$0(sp) {
sp = sp | 0;
var a = 0, x = 0, b = +0;
- x = HEAP32[sp + 0 >> 2];
- a = HEAP32[sp + 16 >> 2];
+ x = HEAP32[sp + 0 >> 2] | 0;
+ a = HEAP32[sp + 16 >> 2] | 0;
a = c(4 + a);
a = c(5 + a);
a = c(6 + a);
@@ -441,9 +441,9 @@ function vars4$0(sp) {
function vars4$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 + 16 >> 2] | 0;
+ x = HEAP32[sp + 0 >> 2] | 0;
+ y = +HEAPF32[sp + 8 >> 2];
a = c(1 + a);
a = c(2 + a);
a = c(3 + a);
@@ -453,7 +453,7 @@ function vars4$1(sp) {
function vars_w_stack$0(sp) {
sp = sp | 0;
var a = 0, b = +0;
- a = HEAP32[sp + 32 >> 2];
+ a = HEAP32[sp + 32 >> 2] | 0;
a = c(4 + a);
a = c(5 + a);
a = c(6 + a);
@@ -465,9 +465,9 @@ function vars_w_stack$0(sp) {
function vars_w_stack$1(sp) {
sp = sp | 0;
var y = +0, x = 0, a = 0;
- a = HEAP32[sp + 32 >> 2];
- x = HEAP32[sp + 16 >> 2];
- y = HEAPF32[sp + 24 >> 2];
+ a = HEAP32[sp + 32 >> 2] | 0;
+ x = HEAP32[sp + 16 >> 2] | 0;
+ y = +HEAPF32[sp + 24 >> 2];
a = c(1 + a);
a = c(2 + a);
a = c(3 + a);
diff --git a/tools/test-js-optimizer-asm-outline2-output.js b/tools/test-js-optimizer-asm-outline2-output.js
index 349246ab..e8877937 100644
--- a/tools/test-js-optimizer-asm-outline2-output.js
+++ b/tools/test-js-optimizer-asm-outline2-output.js
@@ -69,27 +69,27 @@ function _free($mem) {
HEAP32[sp + 192 >> 2] = $151;
HEAP32[sp + 200 >> 2] = $164;
_free$1(sp);
- $p_0 = HEAP32[sp + 216 >> 2];
- $psize_0 = HEAP32[sp + 208 >> 2];
- $37 = HEAP32[sp + 56 >> 2];
- $40 = HEAP32[sp + 64 >> 2];
- $_pre_phi307 = HEAP32[sp + 72 >> 2];
- $69 = HEAP32[sp + 80 >> 2];
- $72 = HEAP32[sp + 88 >> 2];
- $75 = HEAP32[sp + 96 >> 2];
- $95 = HEAP32[sp + 112 >> 2];
- $100 = HEAP32[sp + 120 >> 2];
- $R_1 = HEAP32[sp + 176 >> 2];
- $R_0 = HEAP32[sp + 136 >> 2];
- $RP_0 = HEAP32[sp + 128 >> 2];
- $102 = HEAP32[sp + 144 >> 2];
- $103 = HEAP32[sp + 152 >> 2];
- $106 = HEAP32[sp + 160 >> 2];
- $107 = HEAP32[sp + 168 >> 2];
- $80 = HEAP32[sp + 104 >> 2];
- $120 = HEAP32[sp + 184 >> 2];
- $151 = HEAP32[sp + 192 >> 2];
- $164 = HEAP32[sp + 200 >> 2];
+ $p_0 = HEAP32[sp + 216 >> 2] | 0;
+ $psize_0 = HEAP32[sp + 208 >> 2] | 0;
+ $37 = HEAP32[sp + 56 >> 2] | 0;
+ $40 = HEAP32[sp + 64 >> 2] | 0;
+ $_pre_phi307 = HEAP32[sp + 72 >> 2] | 0;
+ $69 = HEAP32[sp + 80 >> 2] | 0;
+ $72 = HEAP32[sp + 88 >> 2] | 0;
+ $75 = HEAP32[sp + 96 >> 2] | 0;
+ $95 = HEAP32[sp + 112 >> 2] | 0;
+ $100 = HEAP32[sp + 120 >> 2] | 0;
+ $R_1 = HEAP32[sp + 176 >> 2] | 0;
+ $R_0 = HEAP32[sp + 136 >> 2] | 0;
+ $RP_0 = HEAP32[sp + 128 >> 2] | 0;
+ $102 = HEAP32[sp + 144 >> 2] | 0;
+ $103 = HEAP32[sp + 152 >> 2] | 0;
+ $106 = HEAP32[sp + 160 >> 2] | 0;
+ $107 = HEAP32[sp + 168 >> 2] | 0;
+ $80 = HEAP32[sp + 104 >> 2] | 0;
+ $120 = HEAP32[sp + 184 >> 2] | 0;
+ $151 = HEAP32[sp + 192 >> 2] | 0;
+ $164 = HEAP32[sp + 200 >> 2] | 0;
if (HEAP32[sp + 632 >> 2] == 5) {
return;
}
@@ -167,28 +167,28 @@ function _free($mem) {
HEAP32[sp + 400 >> 2] = $351;
HEAP32[sp + 408 >> 2] = $364;
_free$0(sp);
- $220 = HEAP32[sp + 248 >> 2];
- $227 = HEAP32[sp + 256 >> 2];
- $233 = HEAP32[sp + 264 >> 2];
- $236 = HEAP32[sp + 272 >> 2];
- $_pre_phi305 = HEAP32[sp + 280 >> 2];
- $267 = HEAP32[sp + 288 >> 2];
- $270 = HEAP32[sp + 296 >> 2];
- $273 = HEAP32[sp + 304 >> 2];
- $294 = HEAP32[sp + 320 >> 2];
- $299 = HEAP32[sp + 328 >> 2];
- $R7_1 = HEAP32[sp + 384 >> 2];
- $R7_0 = HEAP32[sp + 344 >> 2];
- $RP9_0 = HEAP32[sp + 336 >> 2];
- $301 = HEAP32[sp + 352 >> 2];
- $302 = HEAP32[sp + 360 >> 2];
- $305 = HEAP32[sp + 368 >> 2];
- $306 = HEAP32[sp + 376 >> 2];
- $278 = HEAP32[sp + 312 >> 2];
- $320 = HEAP32[sp + 392 >> 2];
- $351 = HEAP32[sp + 400 >> 2];
- $364 = HEAP32[sp + 408 >> 2];
- $psize_1 = HEAP32[sp + 416 >> 2];
+ $220 = HEAP32[sp + 248 >> 2] | 0;
+ $227 = HEAP32[sp + 256 >> 2] | 0;
+ $233 = HEAP32[sp + 264 >> 2] | 0;
+ $236 = HEAP32[sp + 272 >> 2] | 0;
+ $_pre_phi305 = HEAP32[sp + 280 >> 2] | 0;
+ $267 = HEAP32[sp + 288 >> 2] | 0;
+ $270 = HEAP32[sp + 296 >> 2] | 0;
+ $273 = HEAP32[sp + 304 >> 2] | 0;
+ $294 = HEAP32[sp + 320 >> 2] | 0;
+ $299 = HEAP32[sp + 328 >> 2] | 0;
+ $R7_1 = HEAP32[sp + 384 >> 2] | 0;
+ $R7_0 = HEAP32[sp + 344 >> 2] | 0;
+ $RP9_0 = HEAP32[sp + 336 >> 2] | 0;
+ $301 = HEAP32[sp + 352 >> 2] | 0;
+ $302 = HEAP32[sp + 360 >> 2] | 0;
+ $305 = HEAP32[sp + 368 >> 2] | 0;
+ $306 = HEAP32[sp + 376 >> 2] | 0;
+ $278 = HEAP32[sp + 312 >> 2] | 0;
+ $320 = HEAP32[sp + 392 >> 2] | 0;
+ $351 = HEAP32[sp + 400 >> 2] | 0;
+ $364 = HEAP32[sp + 408 >> 2] | 0;
+ $psize_1 = HEAP32[sp + 416 >> 2] | 0;
if (HEAP32[sp + 632 >> 2] == 5) {
return;
}
@@ -365,34 +365,34 @@ function linear$1(sp) {
function _free$0(sp) {
sp = sp | 0;
var $16 = 0, $220 = 0, $psize_0 = 0, $p_0 = 0, $189 = 0, $227 = 0, $194 = 0, $233 = 0, $mem = 0, $10 = 0, $236 = 0, $_pre_phi305 = 0, $267 = 0, $270 = 0, $273 = 0, $294 = 0, $299 = 0, $R7_1 = 0, $R7_0 = 0, $RP9_0 = 0, $301 = 0, $302 = 0, $305 = 0, $306 = 0, $278 = 0, $320 = 0, $351 = 0, $364 = 0, $psize_1 = 0;
- $364 = HEAP32[sp + 408 >> 2];
- $351 = HEAP32[sp + 400 >> 2];
- $320 = HEAP32[sp + 392 >> 2];
- $278 = HEAP32[sp + 312 >> 2];
- $306 = HEAP32[sp + 376 >> 2];
- $305 = HEAP32[sp + 368 >> 2];
- $302 = HEAP32[sp + 360 >> 2];
- $301 = HEAP32[sp + 352 >> 2];
- $RP9_0 = HEAP32[sp + 336 >> 2];
- $R7_0 = HEAP32[sp + 344 >> 2];
- $R7_1 = HEAP32[sp + 384 >> 2];
- $299 = HEAP32[sp + 328 >> 2];
- $294 = HEAP32[sp + 320 >> 2];
- $273 = HEAP32[sp + 304 >> 2];
- $270 = HEAP32[sp + 296 >> 2];
- $267 = HEAP32[sp + 288 >> 2];
- $_pre_phi305 = HEAP32[sp + 280 >> 2];
- $236 = HEAP32[sp + 272 >> 2];
- $10 = HEAP32[sp + 16 >> 2];
- $mem = HEAP32[sp + 0 >> 2];
- $233 = HEAP32[sp + 264 >> 2];
- $194 = HEAP32[sp + 232 >> 2];
- $227 = HEAP32[sp + 256 >> 2];
- $189 = HEAP32[sp + 224 >> 2];
- $p_0 = HEAP32[sp + 216 >> 2];
- $psize_0 = HEAP32[sp + 208 >> 2];
- $220 = HEAP32[sp + 248 >> 2];
- $16 = HEAP32[sp + 24 >> 2];
+ $364 = HEAP32[sp + 408 >> 2] | 0;
+ $351 = HEAP32[sp + 400 >> 2] | 0;
+ $320 = HEAP32[sp + 392 >> 2] | 0;
+ $278 = HEAP32[sp + 312 >> 2] | 0;
+ $306 = HEAP32[sp + 376 >> 2] | 0;
+ $305 = HEAP32[sp + 368 >> 2] | 0;
+ $302 = HEAP32[sp + 360 >> 2] | 0;
+ $301 = HEAP32[sp + 352 >> 2] | 0;
+ $RP9_0 = HEAP32[sp + 336 >> 2] | 0;
+ $R7_0 = HEAP32[sp + 344 >> 2] | 0;
+ $R7_1 = HEAP32[sp + 384 >> 2] | 0;
+ $299 = HEAP32[sp + 328 >> 2] | 0;
+ $294 = HEAP32[sp + 320 >> 2] | 0;
+ $273 = HEAP32[sp + 304 >> 2] | 0;
+ $270 = HEAP32[sp + 296 >> 2] | 0;
+ $267 = HEAP32[sp + 288 >> 2] | 0;
+ $_pre_phi305 = HEAP32[sp + 280 >> 2] | 0;
+ $236 = HEAP32[sp + 272 >> 2] | 0;
+ $10 = HEAP32[sp + 16 >> 2] | 0;
+ $mem = HEAP32[sp + 0 >> 2] | 0;
+ $233 = HEAP32[sp + 264 >> 2] | 0;
+ $194 = HEAP32[sp + 232 >> 2] | 0;
+ $227 = HEAP32[sp + 256 >> 2] | 0;
+ $189 = HEAP32[sp + 224 >> 2] | 0;
+ $p_0 = HEAP32[sp + 216 >> 2] | 0;
+ $psize_0 = HEAP32[sp + 208 >> 2] | 0;
+ $220 = HEAP32[sp + 248 >> 2] | 0;
+ $16 = HEAP32[sp + 24 >> 2] | 0;
OL : do {
if (($16 | 0) == (HEAP32[25] | 0)) {
$220 = (HEAP32[22] | 0) + $psize_0 | 0;
@@ -593,31 +593,31 @@ function _free$0(sp) {
function _free$1(sp) {
sp = sp | 0;
var $25 = 0, $mem = 0, $10 = 0, $26 = 0, $21 = 0, $37 = 0, $40 = 0, $5 = 0, $_pre_phi307 = 0, $69 = 0, $72 = 0, $75 = 0, $95 = 0, $100 = 0, $R_1 = 0, $R_0 = 0, $RP_0 = 0, $102 = 0, $103 = 0, $106 = 0, $107 = 0, $80 = 0, $120 = 0, $151 = 0, $164 = 0, $p_0 = 0, $psize_0 = 0;
- $164 = HEAP32[sp + 200 >> 2];
- $151 = HEAP32[sp + 192 >> 2];
- $120 = HEAP32[sp + 184 >> 2];
- $80 = HEAP32[sp + 104 >> 2];
- $107 = HEAP32[sp + 168 >> 2];
- $106 = HEAP32[sp + 160 >> 2];
- $103 = HEAP32[sp + 152 >> 2];
- $102 = HEAP32[sp + 144 >> 2];
- $RP_0 = HEAP32[sp + 128 >> 2];
- $R_0 = HEAP32[sp + 136 >> 2];
- $R_1 = HEAP32[sp + 176 >> 2];
- $100 = HEAP32[sp + 120 >> 2];
- $95 = HEAP32[sp + 112 >> 2];
- $75 = HEAP32[sp + 96 >> 2];
- $72 = HEAP32[sp + 88 >> 2];
- $69 = HEAP32[sp + 80 >> 2];
- $_pre_phi307 = HEAP32[sp + 72 >> 2];
- $5 = HEAP32[sp + 8 >> 2];
- $40 = HEAP32[sp + 64 >> 2];
- $37 = HEAP32[sp + 56 >> 2];
- $21 = HEAP32[sp + 32 >> 2];
- $26 = HEAP32[sp + 48 >> 2];
- $10 = HEAP32[sp + 16 >> 2];
- $mem = HEAP32[sp + 0 >> 2];
- $25 = HEAP32[sp + 40 >> 2];
+ $164 = HEAP32[sp + 200 >> 2] | 0;
+ $151 = HEAP32[sp + 192 >> 2] | 0;
+ $120 = HEAP32[sp + 184 >> 2] | 0;
+ $80 = HEAP32[sp + 104 >> 2] | 0;
+ $107 = HEAP32[sp + 168 >> 2] | 0;
+ $106 = HEAP32[sp + 160 >> 2] | 0;
+ $103 = HEAP32[sp + 152 >> 2] | 0;
+ $102 = HEAP32[sp + 144 >> 2] | 0;
+ $RP_0 = HEAP32[sp + 128 >> 2] | 0;
+ $R_0 = HEAP32[sp + 136 >> 2] | 0;
+ $R_1 = HEAP32[sp + 176 >> 2] | 0;
+ $100 = HEAP32[sp + 120 >> 2] | 0;
+ $95 = HEAP32[sp + 112 >> 2] | 0;
+ $75 = HEAP32[sp + 96 >> 2] | 0;
+ $72 = HEAP32[sp + 88 >> 2] | 0;
+ $69 = HEAP32[sp + 80 >> 2] | 0;
+ $_pre_phi307 = HEAP32[sp + 72 >> 2] | 0;
+ $5 = HEAP32[sp + 8 >> 2] | 0;
+ $40 = HEAP32[sp + 64 >> 2] | 0;
+ $37 = HEAP32[sp + 56 >> 2] | 0;
+ $21 = HEAP32[sp + 32 >> 2] | 0;
+ $26 = HEAP32[sp + 48 >> 2] | 0;
+ $10 = HEAP32[sp + 16 >> 2] | 0;
+ $mem = HEAP32[sp + 0 >> 2] | 0;
+ $25 = HEAP32[sp + 40 >> 2] | 0;
OL : do {
if (($25 | 0) == (HEAP32[25] | 0)) {
if ((HEAP32[($mem + (($10 & -8) - 4) | 0) >> 2] & 3 | 0) != 3) {