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;
    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;
