aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2013-07-17 18:18:53 -0700
committerAlon Zakai <alonzakai@gmail.com>2013-07-17 18:18:53 -0700
commitd45e68797573060a34ea95bd5b94923f80b39bd6 (patch)
treed987d4f23e53aa7535472e13168618984fae246a
parent30a363191c06f40fb988fdaa0ecb35b0c97ea236 (diff)
add asm coercions to switches for outlining
-rw-r--r--tools/js-optimizer.js4
-rw-r--r--tools/test-js-optimizer-asm-outline1-output.js4
-rw-r--r--tools/test-js-optimizer-asm-outline2-output.js2
3 files changed, 5 insertions, 5 deletions
diff --git a/tools/js-optimizer.js b/tools/js-optimizer.js
index 63849ac9..3ee1a0b6 100644
--- a/tools/js-optimizer.js
+++ b/tools/js-optimizer.js
@@ -3219,7 +3219,7 @@ function outline(ast) {
if (keys(codeInfo.breaks).length > 0) {
reps.push(makeIf(
makeComparison(makeAsmCoercion(makeStackAccess(ASM_INT, asmData.controlStackPos), ASM_INT), '==', ['num', CONTROL_BREAK_LABEL]),
- [makeSwitch(makeStackAccess(ASM_INT, asmData.controlDataStackPos), keys(codeInfo.breaks).map(function(key) {
+ [makeSwitch(makeAsmCoercion(makeStackAccess(ASM_INT, asmData.controlDataStackPos), ASM_INT), keys(codeInfo.breaks).map(function(key) {
var id = codeInfo.breaks[key];
return [['num', id], [['stat', ['break', key]]]];
}))]
@@ -3234,7 +3234,7 @@ function outline(ast) {
if (keys(codeInfo.continues).length > 0) {
reps.push(makeIf(
makeComparison(makeAsmCoercion(makeStackAccess(ASM_INT, asmData.controlStackPos), ASM_INT), '==', ['num', CONTROL_CONTINUE_LABEL]),
- [makeSwitch(makeStackAccess(ASM_INT, asmData.controlDataStackPos), keys(codeInfo.continues).map(function(key) {
+ [makeSwitch(makeAsmCoercion(makeStackAccess(ASM_INT, asmData.controlDataStackPos), ASM_INT), keys(codeInfo.continues).map(function(key) {
var id = codeInfo.continues[key];
return [['num', id], [['stat', ['continue', key]]]];
}))]
diff --git a/tools/test-js-optimizer-asm-outline1-output.js b/tools/test-js-optimizer-asm-outline1-output.js
index 74d7d1ae..382a7fc7 100644
--- a/tools/test-js-optimizer-asm-outline1-output.js
+++ b/tools/test-js-optimizer-asm-outline1-output.js
@@ -106,7 +106,7 @@ function mix() {
break;
}
if ((HEAP32[sp + 0 >> 2] | 0) == 2) {
- switch (HEAP32[sp + 8 >> 2]) {
+ switch (HEAP32[sp + 8 >> 2] | 0) {
case 2:
break main;
}
@@ -115,7 +115,7 @@ function mix() {
continue;
}
if ((HEAP32[sp + 0 >> 2] | 0) == 4) {
- switch (HEAP32[sp + 8 >> 2]) {
+ switch (HEAP32[sp + 8 >> 2] | 0) {
case 3:
continue main;
}
diff --git a/tools/test-js-optimizer-asm-outline2-output.js b/tools/test-js-optimizer-asm-outline2-output.js
index fafb97c6..ced6f71e 100644
--- a/tools/test-js-optimizer-asm-outline2-output.js
+++ b/tools/test-js-optimizer-asm-outline2-output.js
@@ -103,7 +103,7 @@ function _free($mem) {
break;
}
if ((HEAP32[sp + 632 >> 2] | 0) == 2) {
- switch (HEAP32[sp + 640 >> 2]) {
+ switch (HEAP32[sp + 640 >> 2] | 0) {
case 2:
break L621;
}