function instantiate(info) {
function asmFunc(imports) {
 var Math_imul = Math.imul;
 var Math_fround = Math.fround;
 var Math_abs = Math.abs;
 var Math_clz32 = Math.clz32;
 var Math_min = Math.min;
 var Math_max = Math.max;
 var Math_floor = Math.floor;
 var Math_ceil = Math.ceil;
 var Math_trunc = Math.trunc;
 var Math_sqrt = Math.sqrt;
 var env = imports.env;
 var setTempRet0 = env.setTempRet0;
 var i64toi32_i32$HIGH_BITS = 0;
 // EMSCRIPTEN_START_FUNCS
;
 function $0($0_1) {
  $0_1 = Math_fround($0_1);
  return ~~$0_1 | 0;
 }
 
 function $1($0_1) {
  $0_1 = Math_fround($0_1);
  return ~~$0_1 >>> 0 | 0;
 }
 
 function $2($0_1) {
  $0_1 = +$0_1;
  return ~~$0_1 | 0;
 }
 
 function $3($0_1) {
  $0_1 = +$0_1;
  return ~~$0_1 >>> 0 | 0;
 }
 
 function legalstub$4($0_1) {
  var $1_1 = 0, $2_1 = 0;
  $2_1 = ~~$0_1 >>> 0;
  if (Math_fround(Math_abs($0_1)) >= Math_fround(1.0)) {
   $1_1 = ~~($0_1 > Math_fround(0.0) ? Math_fround(Math_min(Math_fround(Math_floor(Math_fround($0_1 * Math_fround(2.3283064365386963e-10)))), Math_fround(4294967296.0))) : Math_fround(Math_ceil(Math_fround(Math_fround($0_1 - Math_fround(~~$0_1 >>> 0 >>> 0)) * Math_fround(2.3283064365386963e-10))))) >>> 0
  } else {
   $1_1 = 0
  }
  i64toi32_i32$HIGH_BITS = $1_1;
  setTempRet0(i64toi32_i32$HIGH_BITS | 0);
  return $2_1;
 }
 
 function legalstub$6($0_1) {
  var $1_1 = 0, $2_1 = 0;
  $2_1 = ~~$0_1 >>> 0;
  if (Math_abs($0_1) >= 1.0) {
   $1_1 = ~~($0_1 > 0.0 ? Math_min(Math_floor($0_1 * 2.3283064365386963e-10), 4294967295.0) : Math_ceil(($0_1 - +(~~$0_1 >>> 0 >>> 0)) * 2.3283064365386963e-10)) >>> 0
  } else {
   $1_1 = 0
  }
  i64toi32_i32$HIGH_BITS = $1_1;
  setTempRet0(i64toi32_i32$HIGH_BITS | 0);
  return $2_1;
 }
 
 // EMSCRIPTEN_END_FUNCS
;
 return {
  "i32_trunc_sat_f32_s": $0, 
  "i32_trunc_sat_f32_u": $1, 
  "i32_trunc_sat_f64_s": $2, 
  "i32_trunc_sat_f64_u": $3, 
  "i64_trunc_sat_f32_s": legalstub$4, 
  "i64_trunc_sat_f32_u": legalstub$4, 
  "i64_trunc_sat_f64_s": legalstub$6, 
  "i64_trunc_sat_f64_u": legalstub$6
 };
}

  return asmFunc(info);
}
