text: function (global, env, buffer) {
    "use asm";
  
    var c = new global.Int32Array(buffer);
    var g = new global.Float32Array(buffer);
  
    var fr = global.Math.fround;
  
    var tDP = env.tempDoublePtr | 0;
    var ctz32 = env._llvm_cttz_i32;
  
    var h8 = new global.Int8Array(buffer);
    var h16 = new global.Int16Array(buffer);
    var h32 = new global.Int32Array(buffer);
    var hU8 = new global.Uint8Array(buffer);
    var hU16 = new global.Uint16Array(buffer);
    var hU32 = new global.Uint32Array(buffer);
    var hF32 = new global.Float32Array(buffer);
    var hF64 = new global.Float64Array(buffer);
  
    var M = 0; // tempRet
  
    function floats(f) {
      f = fr(f);
      var t = fr(0);
      return fr(t + f);
    }
    function neg(k, p) {
      k = k | 0;
      p = p | 0;
      var n = fr(0);
      n = fr(-(c[k >> 2] = p, fr(g[k >> 2])));
      return n;
    }
    function bitcasts(i, f) {
      i = i | 0;
      f = Math_fround(f);
      (h32[tDP >> 2] = i, fr(hF32[tDP >> 2])); // i32->f32
      (h32[tDP >> 2] = i, +hF32[tDP >> 2]); // i32->f32, no fround
      (hF32[tDP >> 2] = f, h32[tDP >> 2] | 0); // f32->i32
    }
    function ctzzzz() {
      return ctz32(0x1234) | 0;
    }
    function ub() {
      ub(); // emterpreter assertions mode might add some code here
      return M | 0;
    }
  
    return { floats: floats, getTempRet0: ub, neg: neg, bitcasts: bitcasts, ctzzzz: ctzzzz };
  }
  
  