aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xemscripten.py4
-rw-r--r--tools/js-optimizer.js6
-rw-r--r--tools/test-js-optimizer-asm-regs-output.js2
-rw-r--r--tools/test-js-optimizer-asm-regs.js2
4 files changed, 10 insertions, 4 deletions
diff --git a/emscripten.py b/emscripten.py
index 64e2bde4..ceb81e62 100755
--- a/emscripten.py
+++ b/emscripten.py
@@ -289,9 +289,9 @@ def emscript(infile, settings, outfile, libraries=[]):
function_tables_defs = '\n'.join([table for table in last_forwarded_json['Functions']['tables'].itervalues()])
if settings.get('ASM_JS'):
- asm_setup = 'var Runtime_bitshift64 = Runtime.bitshift64;'
+ asm_setup = '\n'.join(['var %s = %s;' % (f.replace('.', '_'), f) for f in ['Runtime.bitshift64', 'Math.floor', 'Math.min']])
fundamentals = ['buffer', 'Int8Array', 'Int16Array', 'Int32Array', 'Uint8Array', 'Uint16Array', 'Uint32Array', 'Float32Array', 'Float64Array']
- basics = ['abort', 'assert', 'STACKTOP', 'STACK_MAX', 'tempDoublePtr', 'ABORT', 'Runtime_bitshift64']
+ basics = ['abort', 'assert', 'STACKTOP', 'STACK_MAX', 'tempDoublePtr', 'ABORT', 'Runtime_bitshift64', 'Math_floor', 'Math_min']
if not settings['NAMED_GLOBALS']: basics += ['GLOBAL_BASE']
if forwarded_json['Types']['preciseI64MathUsed']:
basics += ['i64Math_' + op for op in ['add', 'subtract', 'multiply', 'divide', 'modulo']]
diff --git a/tools/js-optimizer.js b/tools/js-optimizer.js
index 5f21d87d..7ceade86 100644
--- a/tools/js-optimizer.js
+++ b/tools/js-optimizer.js
@@ -1278,6 +1278,12 @@ function normalizeAsm(func) {
traverse(stats[i], function(node, type) {
if (type == 'var') {
unVarify(node[1], node);
+ } else if (type == 'dot') {
+ if (node[1][0] == 'name' && node[1][1] == 'Math') {
+ // transform Math.max to Math_max; we forward in the latter version
+ node[0] = 'name';
+ node[1] = 'Math_' + node[2];
+ }
}
});
i++;
diff --git a/tools/test-js-optimizer-asm-regs-output.js b/tools/test-js-optimizer-asm-regs-output.js
index 299db727..9dcb4f70 100644
--- a/tools/test-js-optimizer-asm-regs-output.js
+++ b/tools/test-js-optimizer-asm-regs-output.js
@@ -3,7 +3,7 @@ function asm(x, y) {
y = y | 0;
var i1 = 0, d2 = +0, i3 = 0, d4 = +0;
i1 = x + x | 0;
- d2 = d();
+ d2 = d(Math_max(10, Math_min(5, f())));
i3 = i1 + 2 | 0;
print(i3);
d4 = d2 * 5;
diff --git a/tools/test-js-optimizer-asm-regs.js b/tools/test-js-optimizer-asm-regs.js
index b1a2663b..2ae21f5e 100644
--- a/tools/test-js-optimizer-asm-regs.js
+++ b/tools/test-js-optimizer-asm-regs.js
@@ -4,7 +4,7 @@ function asm(x, y) {
var int1 = 0, int2 = 0; // do not mix the types!
var double1 = +0, double2 = +0;
int1 = (x+x)|0;
- double1 = d();
+ double1 = d(Math.max(10, Math_min(5, f())));
int2 = (int1+2)|0;
print(int2);
double2 = double1*5;