mergeInto(LibraryManager.library, {
  emscripten_math_cbrt: function(x) {
    return Math.cbrt(x);
  },
  emscripten_math_pow: function(x, y) {
    return Math.pow(x, y);
  },
  emscripten_math_random: function() {
    return Math.random();
  },
  emscripten_math_sign: function(x) {
    return Math.sign(x);
  },
  emscripten_math_sqrt: function(x) {
    return Math.sqrt(x);
  },
  emscripten_math_exp: function(x) {
    return Math.exp(x);
  },
  emscripten_math_expm1: function(x) {
    return Math.expm1(x);
  },
  emscripten_math_fmod: function(x, y) {
    return x % y;
  },
  emscripten_math_log: function(x) {
    return Math.log(x);
  },
  emscripten_math_log1p: function(x) {
    return Math.log1p(x);
  },
  emscripten_math_log10: function(x) {
    return Math.log10(x);
  },
  emscripten_math_log2: function(x) {
    return Math.log2(x);
  },
  emscripten_math_round: function(x) {
    return Math.round(x);
  },
  emscripten_math_acos: function(x) {
    return Math.acos(x);
  },
  emscripten_math_acosh: function(x) {
    return Math.acosh(x);
  },
  emscripten_math_asin: function(x) {
    return Math.asin(x);
  },
  emscripten_math_asinh: function(x) {
    return Math.asinh(x);
  },
  emscripten_math_atan: function(x) {
    return Math.atan(x);
  },
  emscripten_math_atanh: function(x) {
    return Math.atanh(x);
  },
  emscripten_math_atan2: function(y, x) {
    return Math.atan2(y, x);
  },
  emscripten_math_cos: function(x) {
    return Math.cos(x);
  },
  emscripten_math_cosh: function(x) {
    return Math.cosh(x);
  },
  emscripten_math_hypot__sig: 'iip',
  emscripten_math_hypot: function(count, varargs) {
    var args = [];
    for (var i = 0; i < count; ++i) args.push(HEAPF64[(varargs>>3) + i]);
    return Math.hypot.apply(null, args);
  },
  emscripten_math_sin: function(x) {
    return Math.sin(x);
  },
  emscripten_math_sinh: function(x) {
    return Math.sinh(x);
  },
  emscripten_math_tan: function(x) {
    return Math.tan(x);
  },
  emscripten_math_tanh: function(x) {
    return Math.tanh(x);
  }
});
