import { setTempRet0 } from 'env';

function asmFunc(env) {
 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 abort = env.abort;
 var nan = NaN;
 var infinity = Infinity;
 var setTempRet0 = env.setTempRet0;
 var i64toi32_i32$HIGH_BITS = 0;
 function legalstub$0($0, $1) {
  var $2 = 0, $3 = 0, $4 = 0;
  $2 = $1;
  $3 = 1;
  while (1) {
   if ($0 | $2) {
    $3 = __wasm_i64_mul($0, $2, $3, $4);
    $4 = i64toi32_i32$HIGH_BITS;
    $1 = $0;
    $0 = $0 - 1 | 0;
    $2 = $2 - !$1 | 0;
    continue;
   }
   break;
  };
  i64toi32_i32$HIGH_BITS = $4;
  $0 = $3;
  setTempRet0(i64toi32_i32$HIGH_BITS | 0);
  return $0;
 }
 
 function __wasm_i64_mul($0, $1, $2, $3) {
  var $4 = 0, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;
  $4 = $2 >>> 16 | 0;
  $5 = $0 >>> 16 | 0;
  $9 = Math_imul($4, $5);
  $6 = $2 & 65535;
  $7 = $0 & 65535;
  $8 = Math_imul($6, $7);
  $5 = ($8 >>> 16 | 0) + Math_imul($5, $6) | 0;
  $4 = ($5 & 65535) + Math_imul($4, $7) | 0;
  i64toi32_i32$HIGH_BITS = (Math_imul($1, $2) + $9 | 0) + Math_imul($0, $3) + ($5 >>> 16) + ($4 >>> 16) | 0;
  return $8 & 65535 | $4 << 16;
 }
 
 return {
  "fac_expr": legalstub$0, 
  "fac_stack": legalstub$0, 
  "fac_stack_raw": legalstub$0, 
  "fac_mixed": legalstub$0, 
  "fac_mixed_raw": legalstub$0
 };
}

var retasmFunc = asmFunc(  { abort: function() { throw new Error('abort'); },
    setTempRet0
  });
export var fac_expr = retasmFunc.fac_expr;
export var fac_stack = retasmFunc.fac_stack;
export var fac_stack_raw = retasmFunc.fac_stack_raw;
export var fac_mixed = retasmFunc.fac_mixed;
export var fac_mixed_raw = retasmFunc.fac_mixed_raw;
