aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2012-02-06 15:49:21 -0800
committerAlon Zakai <alonzakai@gmail.com>2012-02-06 15:49:21 -0800
commitc34404474ee6aa9d1c3f368792057729837812f3 (patch)
treed7752ad459e70370b356ca229a361348a058a229
parent749ca8a878fa3abe95d021b0a2028b23a40245ce (diff)
optimize memory alignment calculations
-rw-r--r--src/runtime.js7
-rw-r--r--src/utility.js4
2 files changed, 9 insertions, 2 deletions
diff --git a/src/runtime.js b/src/runtime.js
index 39aed12c..190260e6 100644
--- a/src/runtime.js
+++ b/src/runtime.js
@@ -101,11 +101,14 @@ var Runtime = {
forceAlign: function(target, quantum) {
quantum = quantum || {{{ QUANTUM_SIZE }}};
+ if (quantum == 1) return target;
if (isNumber(target) && isNumber(quantum)) {
return Math.ceil(target/quantum)*quantum;
- } else {
- return 'Math.ceil((' + target + ')/' + quantum + ')*' + quantum;
+ } else if (isNumber(quantum) && isPowerOfTwo(quantum)) {
+ var logg = log2(quantum);
+ return '((((' +target + ')+' + (quantum-1) + ')>>' + logg + ')<<' + logg + ')';
}
+ return 'Math.ceil((' + target + ')/' + quantum + ')*' + quantum;
},
isNumberType: function(type) {
diff --git a/src/utility.js b/src/utility.js
index 4ffe46a0..5ddccfd4 100644
--- a/src/utility.js
+++ b/src/utility.js
@@ -297,6 +297,10 @@ function log2(x) {
return Math.log(x)/Math.LN2;
}
+function isPowerOfTwo(x) {
+ return x > 0 && ((x & (x-1)) == 0);
+}
+
function Benchmarker() {
var starts = {}, times = {}, counts = {};
this.start = function(id) {