From 0d952ae43de50d85a2315b2a94594eaf5f498009 Mon Sep 17 00:00:00 2001 From: kzc Date: Tue, 6 Oct 2015 17:05:36 -0400 Subject: [PATCH] add asm.js test --- test/compress/asm.js | 106 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 test/compress/asm.js diff --git a/test/compress/asm.js b/test/compress/asm.js new file mode 100644 index 00000000..c3018485 --- /dev/null +++ b/test/compress/asm.js @@ -0,0 +1,106 @@ +asm_mixed: { + options = { + sequences : true, + properties : true, + dead_code : true, + drop_debugger : true, + conditionals : true, + comparisons : true, + evaluate : true, + booleans : true, + loops : true, + unused : true, + hoist_funs : true, + keep_fargs : true, + keep_fnames : false, + hoist_vars : true, + if_return : true, + join_vars : true, + cascade : true, + side_effects : true, + negate_iife : true + }; + input: { + // adapted from http://asmjs.org/spec/latest/ + function asm_GeometricMean(stdlib, foreign, buffer) { + "use asm"; + var exp = stdlib.Math.exp; + var log = stdlib.Math.log; + var values = new stdlib.Float64Array(buffer); + function logSum(start, end) { + start = start|0; + end = end|0; + var sum = 0.0, p = 0, q = 0; + // asm.js forces byte addressing of the heap by requiring shifting by 3 + for (p = start << 3, q = end << 3; (p|0) < (q|0); p = (p + 8)|0) { + sum = sum + +log(values[p>>3]); + } + return +sum; + } + function geometricMean(start, end) { + start = start|0; + end = end|0; + return +exp(+logSum(start, end) / +((end - start)|0)); + } + return { geometricMean: geometricMean }; + } + function no_asm_GeometricMean(stdlib, foreign, buffer) { + var exp = stdlib.Math.exp; + var log = stdlib.Math.log; + var values = new stdlib.Float64Array(buffer); + function logSum(start, end) { + start = start|0; + end = end|0; + var sum = 0.0, p = 0, q = 0; + // asm.js forces byte addressing of the heap by requiring shifting by 3 + for (p = start << 3, q = end << 3; (p|0) < (q|0); p = (p + 8)|0) { + sum = sum + +log(values[p>>3]); + } + return +sum; + } + function geometricMean(start, end) { + start = start|0; + end = end|0; + return +exp(+logSum(start, end) / +((end - start)|0)); + } + return { geometricMean: geometricMean }; + } + } + expect: { + function asm_GeometricMean(stdlib, foreign, buffer) { + "use asm"; + var exp = stdlib.Math.exp; + var log = stdlib.Math.log; + var values = new stdlib.Float64Array(buffer); + function logSum(start, end) { + start = start | 0; + end = end | 0; + var sum = 0.0, p = 0, q = 0; + for (p = start << 3, q = end << 3; (p | 0) < (q | 0); p = p + 8 | 0) { + sum = sum + +log(values[p >> 3]); + } + return +sum; + } + function geometricMean(start, end) { + start = start | 0; + end = end | 0; + return +exp(+logSum(start, end) / +(end - start | 0)); + } + return { geometricMean: geometricMean }; + } + function no_asm_GeometricMean(stdlib, foreign, buffer) { + function logSum(start, end) { + start = 0 | start, end = 0 | end; + var sum = 0, p = 0, q = 0; + for (p = start << 3, q = end << 3; (0 | q) > (0 | p); p = p + 8 | 0) sum += +log(values[p >> 3]); + return +sum; + } + function geometricMean(start, end) { + return start = 0 | start, end = 0 | end, +exp(+logSum(start, end) / +(end - start | 0)); + } + var exp = stdlib.Math.exp, log = stdlib.Math.log, values = new stdlib.Float64Array(buffer); + return { geometricMean: geometricMean }; + } + } +} + -- 2.34.1