Module["asm"] =  (function(global, env, buffer) {
  'use asm';


  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 DYNAMICTOP_PTR=env.DYNAMICTOP_PTR|0;
  var tempDoublePtr=env.tempDoublePtr|0;
  var ABORT=env.ABORT|0;
  var STACKTOP=env.STACKTOP|0;
  var STACK_MAX=env.STACK_MAX|0;

  var __THREW__ = 0;
  var threwValue = 0;
  var setjmpId = 0;
  var undef = 0;
  var nan = global.NaN, inf = global.Infinity;
  var tempInt = 0, tempBigInt = 0, tempBigIntS = 0, tempValue = 0, tempDouble = 0.0;
  var tempRet0 = 0;

  var __pthread_ptr = 0;
  var __pthread_is_main_runtime_thread = 0;
  var __pthread_is_main_browser_thread = 0;

  var Math_floor=global.Math.floor;
  var Math_abs=global.Math.abs;
  var Math_sqrt=global.Math.sqrt;
  var Math_pow=global.Math.pow;
  var Math_cos=global.Math.cos;
  var Math_sin=global.Math.sin;
  var Math_tan=global.Math.tan;
  var Math_acos=global.Math.acos;
  var Math_asin=global.Math.asin;
  var Math_atan=global.Math.atan;
  var Math_atan2=global.Math.atan2;
  var Math_exp=global.Math.exp;
  var Math_log=global.Math.log;
  var Math_ceil=global.Math.ceil;
  var Math_imul=global.Math.imul;
  var Math_min=global.Math.min;
  var Math_max=global.Math.max;
  var Math_clz32=global.Math.clz32;
  var Math_fround=global.Math.fround;
  var abort=env.abort;
  var assert=env.assert;
  var enlargeMemory=env.enlargeMemory;
  var getTotalMemory=env.getTotalMemory;
  var abortOnCannotGrowMemory=env.abortOnCannotGrowMemory;
  var abortStackOverflow=env.abortStackOverflow;
  var nullFunc_iiii=env.nullFunc_iiii;
  var nullFunc_i=env.nullFunc_i;
  var nullFunc_vi=env.nullFunc_vi;
  var nullFunc_vii=env.nullFunc_vii;
  var nullFunc_ii=env.nullFunc_ii;
  var nullFunc_viii=env.nullFunc_viii;
  var nullFunc_v=env.nullFunc_v;
  var nullFunc_iii=env.nullFunc_iii;
  var invoke_iiii=env.invoke_iiii;
  var invoke_i=env.invoke_i;
  var invoke_vi=env.invoke_vi;
  var invoke_vii=env.invoke_vii;
  var invoke_ii=env.invoke_ii;
  var invoke_viii=env.invoke_viii;
  var invoke_v=env.invoke_v;
  var invoke_iii=env.invoke_iii;
  var __spawn_thread=env.__spawn_thread;
  var _putenv=env._putenv;
  var _emscripten_get_now_is_monotonic=env._emscripten_get_now_is_monotonic;
  var _fpathconf=env._fpathconf;
  var ___unlock=env.___unlock;
  var _emscripten_syscall=env._emscripten_syscall;
  var ___assert_fail=env.___assert_fail;
  var _utimes=env._utimes;
  var ___buildEnvironment=env.___buildEnvironment;
  var _emscripten_asm_const_i=env._emscripten_asm_const_i;
  var _clock_gettime=env._clock_gettime;
  var _emscripten_futex_wait=env._emscripten_futex_wait;
  var _tzset=env._tzset;
  var ___setErrNo=env.___setErrNo;
  var _emscripten_set_current_thread_status_js=env._emscripten_set_current_thread_status_js;
  var _pthread_getschedparam=env._pthread_getschedparam;
  var _clearenv=env._clearenv;
  var _emscripten_futex_wake=env._emscripten_futex_wake;
  var _sysconf=env._sysconf;
  var _utime=env._utime;
  var ___call_main=env.___call_main;
  var _emscripten_memcpy_big=env._emscripten_memcpy_big;
  var _confstr=env._confstr;
  var _getenv=env._getenv;
  var ___syscall54=env.___syscall54;
  var _emscripten_has_threading_support=env._emscripten_has_threading_support;
  var _pthread_create=env._pthread_create;
  var _emscripten_get_now=env._emscripten_get_now;
  var _chroot=env._chroot;
  var ___lock=env.___lock;
  var ___syscall6=env.___syscall6;
  var _unsetenv=env._unsetenv;
  var ___clock_gettime=env.___clock_gettime;
  var _gettimeofday=env._gettimeofday;
  var _atexit=env._atexit;
  var ___syscall140=env.___syscall140;
  var _emscripten_set_thread_name_js=env._emscripten_set_thread_name_js;
  var _setenv=env._setenv;
  var ___syscall146=env.___syscall146;
  var _emscripten_conditional_set_current_thread_status_js=env._emscripten_conditional_set_current_thread_status_js;
  var Atomics_load=global.Atomics.load;
  var Atomics_store=global.Atomics.store;
  var Atomics_exchange=global.Atomics.exchange;
  var Atomics_compareExchange=global.Atomics.compareExchange;
  var Atomics_add=global.Atomics.add;
  var Atomics_sub=global.Atomics.sub;
  var Atomics_and=global.Atomics.and;
  var Atomics_or=global.Atomics.or;
  var Atomics_xor=global.Atomics.xor;
  var tempFloat = Math_fround(0);
  const f0 = Math_fround(0);

  function test() {
   var $temp = 0;
   $temp = (Atomics_load(HEAP32, 1229)|0);
   $temp = (Atomics_load(HEAPU16, 1229)|0);
   $temp = (Atomics_store(HEAP32, $temp>>2, 0)|0);
   $temp = (Atomics_exchange(HEAP32, $temp>>2, 1)|0);
   $temp = (Atomics_compareExchange(HEAP32, $temp>>2, 1, 2)|0);
   $temp = (Atomics_add(HEAP32, $temp>>2, 0)|0);
   $temp = (Atomics_sub(HEAP32, $temp>>2, 0)|0);
   $temp = (Atomics_and(HEAP32, $temp>>2, 0)|0);
   $temp = (Atomics_or(HEAP32, $temp>>2, 0)|0);
   $temp = (Atomics_xor(HEAP32, $temp>>2, 0)|0);
   $temp = (Atomics_xor(HEAPU32, 1024, 0)|0);
   $temp = (Atomics_xor(HEAP16, 1024, 0)|0);
   $temp = (Atomics_xor(HEAPU8, 1024, 0)|0);
  }

  return { test: test };
})
;
