swc/ecmascript/minifier/tests/terser/compress/asm/asm_mixed/output.terser.js
강동윤 ef6a745599
feat(es/minifier): Implement more rules (#1735)
swc_ecma_minifier:
 - Implement `evaluate` partially.
 - Store 'expected output' from terser along with our result.

swc_ecma_transforms_base:
 - `fixer`: Don't wrap `+ (a % b)`.

swc_ecma_transforms_optimization:
 - `expr_simplifier`: Preserve this in calls.
2021-05-25 16:39:07 +09:00

46 lines
1.3 KiB
JavaScript

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), (end |= 0);
var sum = 0,
p = 0,
q = 0;
for (p = start << 3, q = end << 3; (0 | p) < (0 | q); p = (p + 8) | 0)
sum += +log(values[p >> 3]);
return +sum;
}
function geometricMean(start, end) {
return (
(start |= 0),
(end |= 0),
+exp(+logSum(start, end) / +((end - start) | 0))
);
}
var exp = stdlib.Math.exp,
log = stdlib.Math.log,
values = new stdlib.Float64Array(buffer);
return { geometricMean: geometricMean };
}