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, $5 = 0, $6 = 0, $7 = 0, $8 = 0, $9 = 0;
  $4 = $1;
  $2 = 1;
  while (1) {
   if ($0 | $4) {
    $1 = $2 >>> 16 | 0;
    $3 = $0 >>> 16 | 0;
    $9 = Math_imul($1, $3);
    $5 = $2 & 65535;
    $6 = $0 & 65535;
    $7 = Math_imul($5, $6);
    $3 = ($7 >>> 16 | 0) + Math_imul($3, $5) | 0;
    $1 = ($3 & 65535) + Math_imul($1, $6) | 0;
    i64toi32_i32$HIGH_BITS = (Math_imul($2, $4) + $9 | 0) + Math_imul($0, $8) + ($3 >>> 16) + ($1 >>> 16) | 0;
    $2 = $7 & 65535 | $1 << 16;
    $8 = i64toi32_i32$HIGH_BITS;
    $1 = $0;
    $0 = $1 - 1 | 0;
    $4 = $4 - ($1 >>> 0 < 1) | 0;
    continue;
   }
   break;
  };
  i64toi32_i32$HIGH_BITS = $8;
  $0 = $2;
  setTempRet0(i64toi32_i32$HIGH_BITS | 0);
  return $0;
 }
 
 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;
