
function asmFunc(global, env, buffer) {
 var HEAP8 = new global.Int8Array(buffer);
 var HEAP16 = new global.Int16Array(buffer);
 var HEAP32 = new global.Int32Array(buffer);
 var HEAPU8 = new global.Uint8Array(buffer);
 var HEAPU16 = new global.Uint16Array(buffer);
 var HEAPU32 = new global.Uint32Array(buffer);
 var HEAPF32 = new global.Float32Array(buffer);
 var HEAPF64 = new global.Float64Array(buffer);
 var Math_imul = global.Math.imul;
 var Math_fround = global.Math.fround;
 var Math_abs = global.Math.abs;
 var Math_clz32 = global.Math.clz32;
 var Math_min = global.Math.min;
 var Math_max = global.Math.max;
 var Math_floor = global.Math.floor;
 var Math_ceil = global.Math.ceil;
 var Math_sqrt = global.Math.sqrt;
 var abort = env.abort;
 var nan = global.NaN;
 var infinity = global.Infinity;
 function legalstub$1($0, $1, $2, $3) {
  return ($0 | 0) == ($2 | 0) & ($1 | 0) == ($3 | 0);
 }
 
 function legalstub$2($0, $1, $2, $3) {
  return ($0 | 0) != ($2 | 0) | ($1 | 0) != ($3 | 0);
 }
 
 function legalstub$3($0, $1, $2, $3) {
  return ($1 | 0) > ($3 | 0) ? 1 : ($1 | 0) >= ($3 | 0) ? $0 >>> 0 >= $2 >>> 0 : 0;
 }
 
 function legalstub$4($0, $1, $2, $3) {
  return ($1 | 0) > ($3 | 0) ? 1 : ($1 | 0) >= ($3 | 0) ? $0 >>> 0 > $2 >>> 0 : 0;
 }
 
 function legalstub$5($0, $1, $2, $3) {
  return ($1 | 0) < ($3 | 0) ? 1 : ($1 | 0) <= ($3 | 0) ? $0 >>> 0 <= $2 >>> 0 : 0;
 }
 
 function legalstub$6($0, $1, $2, $3) {
  return ($1 | 0) < ($3 | 0) ? 1 : ($1 | 0) <= ($3 | 0) ? $0 >>> 0 < $2 >>> 0 : 0;
 }
 
 function legalstub$7($0, $1, $2, $3) {
  return ($1 | 0) == ($3 | 0) & $0 >>> 0 >= $2 >>> 0 | $1 >>> 0 > $3 >>> 0;
 }
 
 function legalstub$8($0, $1, $2, $3) {
  return ($1 | 0) == ($3 | 0) & $0 >>> 0 > $2 >>> 0 | $1 >>> 0 > $3 >>> 0;
 }
 
 function legalstub$9($0, $1, $2, $3) {
  return ($1 | 0) == ($3 | 0) & $0 >>> 0 <= $2 >>> 0 | $1 >>> 0 < $3 >>> 0;
 }
 
 function legalstub$10($0, $1, $2, $3) {
  return ($1 | 0) == ($3 | 0) & $0 >>> 0 < $2 >>> 0 | $1 >>> 0 < $3 >>> 0;
 }
 
 var FUNCTION_TABLE = [];
 return {
  "eq_i64": legalstub$1, 
  "ne_i64": legalstub$2, 
  "ge_s_i64": legalstub$3, 
  "gt_s_i64": legalstub$4, 
  "le_s_i64": legalstub$5, 
  "lt_s_i64": legalstub$6, 
  "ge_u_i64": legalstub$7, 
  "gt_u_i64": legalstub$8, 
  "le_u_i64": legalstub$9, 
  "lt_u_i64": legalstub$10
 };
}

var memasmFunc = new ArrayBuffer(65536);
var retasmFunc = asmFunc({Math,Int8Array,Uint8Array,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array,NaN,Infinity}, {abort:function() { throw new Error('abort'); }},memasmFunc);
export var eq_i64 = retasmFunc.eq_i64;
export var ne_i64 = retasmFunc.ne_i64;
export var ge_s_i64 = retasmFunc.ge_s_i64;
export var gt_s_i64 = retasmFunc.gt_s_i64;
export var le_s_i64 = retasmFunc.le_s_i64;
export var lt_s_i64 = retasmFunc.lt_s_i64;
export var ge_u_i64 = retasmFunc.ge_u_i64;
export var gt_u_i64 = retasmFunc.gt_u_i64;
export var le_u_i64 = retasmFunc.le_u_i64;
export var lt_u_i64 = retasmFunc.lt_u_i64;
