| #if POLYFILL_OLD_MATH_FUNCTIONS |
| // check for imul support, and also for correctness ( https://bugs.webkit.org/show_bug.cgi?id=126345 ) |
| if (!Math.imul || Math.imul(0xffffffff, 5) !== -5) Math.imul = function imul(a, b) { |
| var ah = a >>> 16; |
| var al = a & 0xffff; |
| var bh = b >>> 16; |
| var bl = b & 0xffff; |
| return (al*bl + ((ah*bl + al*bh) << 16))|0; |
| }; |
| |
| #if PRECISE_F32 |
| #if PRECISE_F32 == 1 |
| if (!Math.fround) { |
| var froundBuffer = new Float32Array(1); |
| Math.fround = function(x) { froundBuffer[0] = x; return froundBuffer[0] }; |
| } |
| #else // 2 |
| if (!Math.fround) Math.fround = function(x) { return x }; |
| #endif |
| #else |
| #if SIMD |
| if (!Math.fround) Math.fround = function(x) { return x }; |
| #endif |
| #endif |
| |
| if (!Math.clz32) Math.clz32 = function(x) { |
| var n = 32; |
| var y = x >> 16; if (y) { n -= 16; x = y; } |
| y = x >> 8; if (y) { n -= 8; x = y; } |
| y = x >> 4; if (y) { n -= 4; x = y; } |
| y = x >> 2; if (y) { n -= 2; x = y; } |
| y = x >> 1; if (y) return n - 2; |
| return n - x; |
| }; |
| |
| if (!Math.trunc) Math.trunc = function(x) { |
| return x < 0 ? Math.ceil(x) : Math.floor(x); |
| }; |
| #else // POLYFILL_OLD_MATH_FUNCTIONS |
| #if ASSERTIONS |
| assert(Math.imul, 'This browser does not support Math.imul(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill'); |
| assert(Math.fround, 'This browser does not support Math.fround(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill'); |
| assert(Math.clz32, 'This browser does not support Math.clz32(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill'); |
| assert(Math.trunc, 'This browser does not support Math.trunc(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill'); |
| #endif |
| #endif // LEGACY_VM_SUPPORT |
| |
| var Math_abs = Math.abs; |
| var Math_cos = Math.cos; |
| var Math_sin = Math.sin; |
| var Math_tan = Math.tan; |
| var Math_acos = Math.acos; |
| var Math_asin = Math.asin; |
| var Math_atan = Math.atan; |
| var Math_atan2 = Math.atan2; |
| var Math_exp = Math.exp; |
| var Math_log = Math.log; |
| var Math_sqrt = Math.sqrt; |
| var Math_ceil = Math.ceil; |
| var Math_floor = Math.floor; |
| var Math_pow = Math.pow; |
| var Math_imul = Math.imul; |
| var Math_fround = Math.fround; |
| var Math_round = Math.round; |
| var Math_min = Math.min; |
| var Math_max = Math.max; |
| var Math_clz32 = Math.clz32; |
| var Math_trunc = Math.trunc; |