aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Gohman <sunfish@google.com>2013-10-02 16:11:34 -0700
committerDan Gohman <sunfish@google.com>2013-10-02 16:11:34 -0700
commit4b8ff3fb5dcbc1ef61b17f1d7a7ca4bdb3f0b811 (patch)
tree2b4b27227fb69f4fe66ff3b198664d37a4cab12f
parent4f6975f249d2f8eaabe66dd8bee5146cd9d74d28 (diff)
Optimize alignment rounding.
Replace x>>2<<2 and x>>3<<3 with x&-4 and x&-8, respectively, since an and is cheaper than two shifts.
-rwxr-xr-xemscripten.py2
-rw-r--r--src/preamble.js2
-rw-r--r--src/runtime.js3
3 files changed, 3 insertions, 4 deletions
diff --git a/emscripten.py b/emscripten.py
index 2b62c93a..2e90fa48 100755
--- a/emscripten.py
+++ b/emscripten.py
@@ -588,7 +588,7 @@ function stackAlloc(size) {
var ret = 0;
ret = STACKTOP;
STACKTOP = (STACKTOP + size)|0;
-''' + ('STACKTOP = ((STACKTOP + 3)>>2)<<2;' if settings['TARGET_X86'] else 'STACKTOP = ((STACKTOP + 7)>>3)<<3;') + '''
+''' + ('STACKTOP = (STACKTOP + 3)&-4;' if settings['TARGET_X86'] else 'STACKTOP = (STACKTOP + 7)&-8;') + '''
return ret|0;
}
function stackSave() {
diff --git a/src/preamble.js b/src/preamble.js
index 183fd0c8..75519094 100644
--- a/src/preamble.js
+++ b/src/preamble.js
@@ -644,7 +644,7 @@ Module['stringToUTF32'] = stringToUTF32;
var PAGE_SIZE = 4096;
function alignMemoryPage(x) {
- return ((x+4095)>>12)<<12;
+ return (x+4095)&-4096;
}
var HEAP;
diff --git a/src/runtime.js b/src/runtime.js
index a281045b..dd395826 100644
--- a/src/runtime.js
+++ b/src/runtime.js
@@ -112,8 +112,7 @@ var Runtime = {
if (isNumber(target) && isNumber(quantum)) {
return Math.ceil(target/quantum)*quantum;
} else if (isNumber(quantum) && isPowerOfTwo(quantum)) {
- var logg = log2(quantum);
- return '((((' +target + ')+' + (quantum-1) + ')>>' + logg + ')<<' + logg + ')';
+ return '(((' +target + ')+' + (quantum-1) + ')&' + -quantum + ')';
}
return 'Math.ceil((' + target + ')/' + quantum + ')*' + quantum;
},