aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2011-12-28 14:41:46 -0800
committerAlon Zakai <alonzakai@gmail.com>2011-12-28 14:41:46 -0800
commitab12dc1380d89298f289215087ee94a65e37acca (patch)
tree42e7d5000fd36056cef88f0d91aa8ef9a67fbc63
parent6b83482d32375fb6852cd34150890e57460d8645 (diff)
fix optimizeShifts bug
-rw-r--r--tools/js-optimizer.js4
-rw-r--r--tools/test-js-optimizer-t2-output.js2
-rw-r--r--tools/test-js-optimizer-t2.js2
3 files changed, 8 insertions, 0 deletions
diff --git a/tools/js-optimizer.js b/tools/js-optimizer.js
index 150b1c37..6cd1fbcc 100644
--- a/tools/js-optimizer.js
+++ b/tools/js-optimizer.js
@@ -527,6 +527,10 @@ function optimizeShifts(ast) {
var total = 0;
if (node[3][0] == 'num' && node[2][3][0] == 'num') {
total = ['num', sign1*node[3][1] + sign2*node[2][3][1]];
+ if (total[1] < 0) {
+ combinedShift = '<<';
+ total[1] *= -1;
+ }
if (total[1] == 0) {
// XXX this may be wrong, if we removed a |0 that assumed we had this >> which |0's anyhow!
return node[2][2];
diff --git a/tools/test-js-optimizer-t2-output.js b/tools/test-js-optimizer-t2-output.js
index eb3f077a..d16dd6c9 100644
--- a/tools/test-js-optimizer-t2-output.js
+++ b/tools/test-js-optimizer-t2-output.js
@@ -56,5 +56,7 @@ function shifty($id) {
q(HEAP32[$parameters_addr + ($res_spec242 - 1) + 1406]);
q(HEAP32[(HEAP32[($cp >> 2) + 27] >> 2) + $tileno * 1397 + 105]);
}
+ pause(6);
+ q($idx << 3);
}
// EMSCRIPTEN_GENERATED_FUNCTIONS: ["shifty"]
diff --git a/tools/test-js-optimizer-t2.js b/tools/test-js-optimizer-t2.js
index e1abc092..5005c91e 100644
--- a/tools/test-js-optimizer-t2.js
+++ b/tools/test-js-optimizer-t2.js
@@ -64,5 +64,7 @@ function shifty($id) {
q(HEAP32[($parameters_addr + 5624 + (($res_spec242 - 1 | 0) << 2) | 0) >> 2]);
q(HEAP32[(HEAP32[($cp + 108 | 0) >> 2] + $tileno * 5588 + 420 | 0) >> 2]);
}
+ pause(6);
+ q($idx << 1 << 2);
}
// EMSCRIPTEN_GENERATED_FUNCTIONS: ["shifty"]