Skip to content

Instantly share code, notes, and snippets.

@carlopi
Created December 22, 2021 09:52
Show Gist options
  • Save carlopi/c3f64382e6de8776b75636384545896c to your computer and use it in GitHub Desktop.
Save carlopi/c3f64382e6de8776b75636384545896c to your computer and use it in GitHub Desktop.
Experiment with compiling earcut.hpp with Cheerp
"use strict";/*Compiled using Cheerp (R) by Leaning Technologies Ltd*/var a4=Math.imul;var a5=Math.fround;var oSlot=0;var nullArray=[null];var nullObj={d:nullArray,o:0};function bt(p){var b=null,f='function';if(typeof fetch===f)b=fetch(p).then(r=>r.arrayBuffer());else if(typeof require===f){p=require('path').join(__dirname, p);b=new Promise((y,n)=>{require('fs').readFile(p,(e,d)=>{if(e)n(e);else y(d);});});}else b=new Promise((y,n)=>{y(read(p,'binary'));});return b;}function a1(w,v){var u=null,k=null,l=0,j=0,g=0,h=0,t=-0.,i=0,s=0,o=0,p=null,q=0,m=null,n=0;u=ax();k=-64+u|0;ag(k);aN((w.length)>>>1);j=w.length;if((j|0)>0){h=0;g=0;while(1){t=+w[g];f[(h<<4)+(c[1049616>>2]|0)>>3]=t;t=+w[g+1|0];f[(h<<4)+8+(c[1049616>>2]|0)>>3]=t;g=g+2|0;if((g|0)<(j|0)){h=h+1|0;continue;}break;}}j=48+k|0;aL(j);if(v!==null){g=v.length;if((g|0)!==0){h=40+k|0;s=0;i=0;while(1){o=v[i];c[h>>2]=s;c[4+h>>2]=o;ao(j,h);i=i+1|0;if((i|0)!==(g|0)){s=o;continue;}break;}}else{o=0;}}else{o=0;}g=32+k|0;h=c[1049620>>2]|0;i=c[1049616>>2]|0;c[g>>2]=o;c[4+g>>2]=(h|0)-(i|0)>>4;ao(j,g);g=16+k|0;aH(g,j);aG();q=c[4+g>>2]>>2;p=c;n=c[g>>2]>>2;m=c;p=new Int32Array((+((a4(q,4))-(a4(n,4))>>2>>>0)));h=8+k|0;aE(h,g);i=k|0;aD(i,g);n=c[h>>2]>>2;m=c;l=c[i>>2]>>2;k=c;if(m!==k||n!==l){s=0;while(1){p[0+s|0]=m[n]|0;aT(h);n=c[h>>2]>>2;m=c;if(m!==k||n!==l){s=s+1|0;continue;}break;}}ae(g|0);ae(j);ag(u);return p;}function U(){throw new Error("Abort called");}function CheerpException(m){var instance=new Error('Uncaught C++ exception: '+m);instance.name='CheerpException';Object.setPrototypeOf(instance,Object.getPrototypeOf(this));if(Error.captureStackTrace){Error.captureStackTrace(instance, CheerpException);}return instance;}CheerpException.prototype=Object.create(Error.prototype);function bn(bytes){var pages=(bytes+65535)>>16;try{__asm.bq.grow(pages);bo(__asm.bq.buffer);return pages<<16;}catch(e){return -1;}}var c=null,f=null,__asm=null,__heap=null;function bp(){throw new Error('this should be unreachable');};var aN=null;var aL=null;var ao=null;var aH=null;var aG=null;var aE=null;var aD=null;var ag=null;var ae=null;var aT=null;var ax=null;var earcut_cheerp=bp;bp.promise=bt('earcut_cheerp.wasm').then(g=>WebAssembly.instantiate(g,{i:{U:U,bn:bn,}})).then(g=>{__asm=g.instance.exports;__heap=__asm.bq.buffer;bo(__heap);aN=__asm.aN;aL=__asm.aL;ao=__asm.ao;aH=__asm.aH;aG=__asm.aG;aE=__asm.aE;aD=__asm.aD;ag=__asm.ag;ae=__asm.ae;aT=__asm.aT;ax=__asm.ax;earcut_cheerp=a1;earcut_cheerp.promise=Promise.resolve();__asm.aw();});function bo(g){c=new Int32Array(g);f=new Float64Array(g);}
//Test infrastructure (it suppose both this and earcut_cheerp.wasm to be in the earcut/bench folder)
earcut_cheerp.promise.then( () => {
const earcut_original = require('../src/earcut');
performTest(earcut_original, earcut_cheerp);
});
function performTest(original, cheerpified)
{
const earcut = require('../src/earcut');
function withoutHoles({vertices, holes, dimensions}) {
return {
vertices: vertices.slice(0, holes[0] * dimensions),
holes: []
};
}
const samples = {
'typical OSM building': earcut.flatten(require('../test/fixtures/building.json')),
'dude shape': withoutHoles(earcut.flatten(require('../test/fixtures/dude.json'))),
'dude shape with holes': earcut.flatten(require('../test/fixtures/dude.json')),
'US border': earcut.flatten(require('../test/fixtures/simplified-us-border.json')),
'rain': earcut.flatten(require('../test/fixtures/rain.json')),
'hourglass': earcut.flatten(require('../test/fixtures/hourglass.json')),
'complex OSM water': earcut.flatten(require('../test/fixtures/water.json')),
'complex OSM water2': earcut.flatten(require('../test/fixtures/water2.json')),
'complex OSM water3': earcut.flatten(require('../test/fixtures/water3.json')),
'complex OSM water4': earcut.flatten(require('../test/fixtures/water4.json')),
'huge OSM water': earcut.flatten(require('../test/fixtures/water-huge.json')),
'huge OSM water2': earcut.flatten(require('../test/fixtures/water-huge2.json'))
};
const Benchmark = require('benchmark');
for (const name in samples) {
const {vertices, holes, dimensions} = samples[name];
new Benchmark.Suite()
.add('original - ' + name + ' (' + (vertices.length / 2) + ' vertices):', function () {
original(vertices, [], dimensions);
})
.on('cycle', logCycle)
.run();
new Benchmark.Suite()
.add('cheerpified - ' + name + ' (' + (vertices.length / 2) + ' vertices):', function () {
cheerpified(vertices, [], dimensions);
})
.on('cycle', logCycle)
.run();
}
function logCycle(event) {
console.log(String(event.target));
}
}
(module
(type (;0;) (func))
(type (;1;) (func (param i32) (result i32)))
(type (;2;) (func (param i32)))
(type (;3;) (func (param i32 i32)))
(type (;4;) (func (param i32 i32 i32 i32 i32) (result i32)))
(type (;5;) (func (param i32 i32 i32 i32) (result i32)))
(type (;6;) (func (param i32 i32 i32) (result i32)))
(type (;7;) (func (param i32 i32) (result i32)))
(type (;8;) (func (result i32)))
(import "i" "U" (func (;0;) (type 0)))
(import "i" "bn" (func (;1;) (type 1)))
(func (;2;) (type 0)
unreachable)
(func (;3;) (type 2) (param i32)
(local i32 i32 i32 i32 i32 i32 i32)
local.get 0
if ;; label = @1
global.get 5
local.get 0
i32.gt_u
br_if 0 (;@1;)
i32.const -8
local.get 0
i32.add
local.tee 2
i32.load offset=4
local.tee 3
i32.const -2
i32.and
local.tee 4
local.get 2
i32.add
local.tee 5
i32.load offset=4
i32.const -4
i32.and
local.set 6
i32.const 0
i32.load offset=1048592
local.get 5
i32.eq
if ;; label = @2
local.get 6
local.get 4
i32.add
local.set 4
local.get 3
i32.const 1
i32.and
i32.eqz
if ;; label = @3
local.get 2
i32.load
local.tee 3
local.get 2
local.get 3
i32.sub
local.tee 2
i32.load offset=12
local.tee 5
local.get 2
i32.load offset=8
local.tee 6
local.get 5
i32.store offset=12
local.get 6
i32.store offset=8
local.get 4
i32.add
local.set 4
end
local.get 2
local.get 4
i32.const 1
i32.or
i32.store offset=4
i32.const 0
local.get 2
i32.store offset=1048592
local.get 4
i32.const 131072
i32.ge_u
if ;; label = @3
local.get 4
i32.const -4
i32.and
local.tee 5
i32.const -17
i32.add
i32.const -4096
i32.and
local.tee 6
i32.const 4096
i32.lt_s
br_if 0 (;@3;)
global.get 2
i32.eqz
if ;; label = @4
global.get 5
global.set 2
end
global.get 3
local.get 5
local.get 2
i32.add
i32.ne
br_if 0 (;@3;)
global.get 2
i32.eqz
if ;; label = @4
global.get 5
global.set 2
end
global.get 2
local.set 2
i32.const 0
local.get 6
i32.sub
local.set 4
block ;; label = @4
local.get 4
local.get 2
i32.add
global.get 3
i32.ge_u
if ;; label = @5
local.get 4
call 1
local.tee 3
i32.const -1
i32.eq
br_if 1 (;@4;)
local.get 3
global.get 3
i32.add
global.set 3
end
local.get 4
global.get 2
i32.add
global.set 2
local.get 2
i32.const -1
i32.eq
br_if 0 (;@4;)
i32.const 0
i32.load offset=1048592
local.get 5
i32.const 1
i32.add
local.get 6
i32.sub
i32.store offset=4
global.get 4
local.get 6
i32.sub
global.set 4
br 3 (;@1;)
end
global.get 2
i32.eqz
if ;; label = @4
global.get 5
global.set 2
end
global.get 3
local.tee 2
i32.const 0
i32.load offset=1048592
local.tee 4
i32.sub
local.tee 3
i32.const 15
i32.le_s
br_if 0 (;@3;)
local.get 2
global.get 7
i32.sub
global.set 4
local.get 4
local.get 3
i32.const 1
i32.or
i32.store offset=4
end
else
local.get 5
local.get 6
i32.store offset=4
local.get 6
local.get 5
i32.add
local.set 7
block ;; label = @3
block (result i32) ;; label = @4
local.get 3
i32.const 1
i32.and
i32.eqz
if ;; label = @5
local.get 2
i32.load
local.tee 3
local.get 4
i32.add
local.set 4
local.get 2
local.get 3
i32.sub
local.tee 2
i32.load offset=8
local.tee 3
i32.const 1048592
i32.eq
if ;; label = @6
local.get 7
i32.load offset=4
i32.const 1
i32.and
if ;; label = @7
local.get 2
local.get 4
i32.const 1
i32.or
i32.store offset=4
local.get 4
local.get 2
i32.add
local.get 4
i32.store
br 6 (;@1;)
end
i32.const 0
local.get 4
local.get 6
i32.add
local.set 4
br 2 (;@4;)
end
local.get 2
i32.load offset=12
local.tee 1
local.get 3
local.get 1
i32.store offset=12
local.get 3
i32.store offset=8
end
local.get 7
i32.load offset=4
i32.const 1
i32.and
if ;; label = @5
local.get 2
local.get 4
i32.const 1
i32.or
i32.store offset=4
local.get 4
local.get 2
i32.add
local.get 4
i32.store
br 2 (;@3;)
end
local.get 4
local.get 6
i32.add
local.set 4
local.get 5
i32.load offset=8
i32.const 1048592
i32.eq
if ;; label = @5
i32.const 0
local.get 2
i32.store offset=1048604
i32.const 0
local.get 2
i32.store offset=1048600
local.get 2
global.get 8
i64.store offset=8 align=4
local.get 2
local.get 4
i32.const 1
i32.or
i32.store offset=4
local.get 4
local.get 2
i32.add
local.get 4
i32.store
br 4 (;@1;)
end
i32.const 1
end
local.get 5
i32.load offset=12
local.tee 7
local.get 5
i32.load offset=8
local.tee 5
local.get 7
i32.store offset=12
local.get 5
i32.store offset=8
local.get 2
local.get 4
i32.const 1
i32.or
i32.store offset=4
local.get 4
local.get 2
i32.add
local.get 4
i32.store
i32.eqz
br_if 2 (;@1;)
end
local.get 4
i32.const 512
i32.lt_u
if ;; label = @3
i32.const 0
i32.const 0
i32.load offset=1048588
i32.const 1
local.get 4
i32.const 5
i32.shr_u
i32.shl
i32.or
i32.store offset=1048588
i32.const 1048584
local.get 4
i32.const 2
i32.shr_u
i32.const 1073741822
i32.and
i32.const 2
i32.shl
i32.add
local.tee 4
i32.load offset=8
local.tee 5
local.get 2
local.get 4
i32.store offset=12
local.get 2
local.get 5
i32.store offset=8
local.get 4
local.get 2
i32.store offset=8
local.get 2
i32.store offset=12
else
local.get 4
i32.const 2560
i32.lt_u
if (result i32) ;; label = @4
local.get 4
i32.const 6
i32.shr_u
i32.const 56
i32.add
else
local.get 4
i32.const 10752
i32.lt_u
if (result i32) ;; label = @5
local.get 4
i32.const 9
i32.shr_u
i32.const 91
i32.add
else
local.get 4
i32.const 43520
i32.lt_u
if (result i32) ;; label = @6
local.get 4
i32.const 12
i32.shr_u
i32.const 110
i32.add
else
local.get 4
i32.const 174592
i32.lt_u
if (result i32) ;; label = @7
local.get 4
i32.const 15
i32.shr_u
i32.const 119
i32.add
else
local.get 4
i32.const 698880
i32.lt_u
if (result i32) ;; label = @8
local.get 4
i32.const 18
i32.shr_u
i32.const 124
i32.add
else
i32.const 126
end
end
end
end
end
local.set 6
i32.const 1048584
local.get 6
i32.const 3
i32.shl
i32.add
local.tee 5
i32.load offset=8
local.tee 7
local.get 5
i32.eq
if ;; label = @4
i32.const 0
i32.const 0
i32.load offset=1048588
i32.const 1
local.get 6
i32.const 2
i32.shr_u
i32.shl
i32.or
i32.store offset=1048588
local.get 5
local.set 7
else
loop ;; label = @5
local.get 4
local.get 7
i32.load offset=4
i32.const -4
i32.and
i32.lt_u
if ;; label = @6
local.get 7
i32.load offset=8
local.tee 7
local.get 5
i32.ne
br_if 1 (;@5;)
local.get 5
local.set 7
end
end
local.get 7
i32.load offset=12
local.set 5
end
local.get 2
local.get 5
i32.store offset=12
local.get 2
local.get 7
i32.store offset=8
local.get 5
local.get 2
i32.store offset=8
local.get 7
local.get 2
i32.store offset=12
end
end
end)
(func (;4;) (type 1) (param i32) (result i32)
(local i32 i32 i32 i32 i32 i32 i32 i32 i32)
i32.const 16
local.get 0
i32.const 11
i32.add
local.tee 1
i32.const -8
i32.and
local.get 1
i32.const 23
i32.lt_u
select
local.set 1
i32.const 1
local.get 1
local.get 0
i32.lt_u
local.get 1
i32.const 0
i32.lt_s
select
if ;; label = @1
i32.const 0
return
end
block ;; label = @1
local.get 1
i32.const 504
i32.lt_u
if (result i32) ;; label = @2
i32.const 1048584
local.get 1
i32.const 2
i32.shr_u
i32.const 2
i32.shl
i32.add
local.tee 2
i32.load offset=12
local.tee 3
local.get 2
i32.eq
if ;; label = @3
local.get 2
i32.load offset=20
local.set 3
i32.const 8
local.get 2
i32.add
local.set 2
end
local.get 3
local.get 2
i32.ne
if ;; label = @3
local.get 3
i32.load offset=4
local.tee 2
local.get 3
i32.load offset=12
local.tee 1
local.get 3
i32.load offset=8
local.tee 8
local.get 1
i32.store offset=12
local.get 8
i32.store offset=8
i32.const -4
i32.and
local.get 3
i32.add
local.get 2
i32.const -4
i32.and
local.get 3
i32.add
i32.load offset=4
i32.const 1
i32.or
i32.store offset=4
br 2 (;@1;)
end
local.get 1
i32.const 3
i32.shr_u
i32.const 2
i32.add
else
local.get 1
i32.const 512
i32.lt_u
if (result i32) ;; label = @3
i32.const 63
else
local.get 1
i32.const 2560
i32.lt_u
if ;; label = @4
local.get 1
i32.const 6
i32.shr_u
local.set 3
i32.const 56
local.set 2
else
local.get 1
i32.const 10752
i32.lt_u
if ;; label = @5
local.get 1
i32.const 9
i32.shr_u
local.set 3
i32.const 91
local.set 2
else
local.get 1
i32.const 43520
i32.lt_u
if ;; label = @6
local.get 1
i32.const 12
i32.shr_u
local.set 3
i32.const 110
local.set 2
else
local.get 1
i32.const 174592
i32.lt_u
if ;; label = @7
local.get 1
i32.const 15
i32.shr_u
local.set 3
i32.const 119
local.set 2
else
local.get 1
i32.const 698880
i32.ge_u
if ;; label = @8
i32.const 126
br 5 (;@3;)
end
local.get 1
i32.const 18
i32.shr_u
local.set 3
i32.const 124
local.set 2
end
end
end
end
local.get 3
local.get 2
i32.add
end
local.set 2
i32.const 1048584
local.get 2
i32.const 3
i32.shl
i32.add
local.tee 5
i32.load offset=12
local.tee 3
local.get 5
i32.ne
if ;; label = @3
loop ;; label = @4
local.get 3
i32.load offset=4
i32.const -4
i32.and
local.tee 4
local.get 1
i32.sub
local.tee 6
i32.const 15
i32.gt_s
if ;; label = @5
local.get 2
i32.const -1
i32.add
local.set 2
else
local.get 3
i32.load offset=12
local.set 7
local.get 6
i32.const -1
i32.gt_s
if ;; label = @6
local.get 3
i32.load offset=8
local.tee 6
local.get 7
i32.store offset=12
local.get 7
local.get 6
i32.store offset=8
local.get 4
local.get 3
i32.add
local.get 4
local.get 3
i32.add
i32.load offset=4
i32.const 1
i32.or
i32.store offset=4
br 5 (;@1;)
end
local.get 7
local.get 5
i32.eq
br_if 0 (;@5;)
local.get 7
local.set 3
br 1 (;@4;)
end
end
end
local.get 2
i32.const 1
i32.add
end
local.set 2
i32.const 0
i32.load offset=1048600
local.tee 3
i32.const 1048592
i32.ne
if ;; label = @2
local.get 3
i32.load offset=4
local.tee 6
i32.const -4
i32.and
local.tee 4
local.get 1
i32.sub
local.tee 7
i32.const 15
i32.gt_s
if ;; label = @3
local.get 3
local.get 1
i32.const 1
i32.or
i32.store offset=4
i32.const 0
local.get 1
local.get 3
i32.add
local.tee 2
i32.store offset=1048604
i32.const 0
local.get 2
i32.store offset=1048600
local.get 2
global.get 8
i64.store offset=8 align=4
local.get 2
local.get 7
i32.const 1
i32.or
i32.store offset=4
local.get 4
local.get 3
i32.add
local.get 7
i32.store
br 2 (;@1;)
end
i32.const 0
i32.const 1048592
i32.store offset=1048604
i32.const 0
i32.const 1048592
i32.store offset=1048600
local.get 7
i32.const -1
i32.gt_s
if ;; label = @3
local.get 4
local.get 3
i32.add
local.get 4
local.get 3
i32.add
i32.load offset=4
i32.const 1
i32.or
i32.store offset=4
br 2 (;@1;)
end
local.get 4
i32.const 512
i32.lt_u
if ;; label = @3
i32.const 0
i32.const 0
i32.load offset=1048588
i32.const 1
local.get 6
i32.const 5
i32.shr_u
i32.shl
i32.or
i32.store offset=1048588
i32.const 1048584
local.get 6
i32.const 2
i32.shr_u
i32.const 1073741822
i32.and
i32.const 2
i32.shl
i32.add
local.tee 4
i32.load offset=8
local.tee 6
local.get 3
local.get 4
i32.store offset=12
local.get 3
local.get 6
i32.store offset=8
local.get 4
local.get 3
i32.store offset=8
local.get 3
i32.store offset=12
else
local.get 6
i32.const 2560
i32.lt_u
if (result i32) ;; label = @4
local.get 6
i32.const 6
i32.shr_u
i32.const 56
i32.add
else
local.get 6
i32.const 10752
i32.lt_u
if (result i32) ;; label = @5
local.get 6
i32.const 9
i32.shr_u
i32.const 91
i32.add
else
local.get 6
i32.const 43520
i32.lt_u
if (result i32) ;; label = @6
local.get 6
i32.const 12
i32.shr_u
i32.const 110
i32.add
else
local.get 6
i32.const 174592
i32.lt_u
if (result i32) ;; label = @7
local.get 6
i32.const 15
i32.shr_u
i32.const 119
i32.add
else
local.get 6
i32.const 698880
i32.lt_u
if (result i32) ;; label = @8
local.get 6
i32.const 18
i32.shr_u
i32.const 124
i32.add
else
i32.const 126
end
end
end
end
end
local.set 6
i32.const 1048584
local.get 6
i32.const 3
i32.shl
i32.add
local.tee 7
i32.load offset=8
local.tee 5
local.get 7
i32.eq
if (result i32) ;; label = @4
i32.const 0
i32.const 0
i32.load offset=1048588
i32.const 1
local.get 6
i32.const 2
i32.shr_u
i32.shl
i32.or
i32.store offset=1048588
local.get 7
else
loop ;; label = @5
local.get 4
local.get 5
i32.load offset=4
i32.const -4
i32.and
i32.lt_u
if ;; label = @6
local.get 5
i32.load offset=8
local.tee 5
local.get 7
i32.ne
br_if 1 (;@5;)
else
local.get 5
local.set 7
end
end
local.get 7
i32.load offset=12
end
local.tee 5
local.get 3
local.get 5
i32.store offset=12
local.get 3
local.get 7
i32.store offset=8
local.get 3
i32.store offset=8
local.get 7
local.get 3
i32.store offset=12
end
end
i32.const 1
local.get 2
i32.const 4
i32.div_s
i32.shl
local.tee 4
i32.const 0
i32.load offset=1048588
local.tee 3
i32.le_u
if ;; label = @2
local.get 3
local.get 4
i32.and
i32.eqz
if ;; label = @3
local.get 2
i32.const 4
i32.add
i32.const -4
i32.and
local.set 2
loop ;; label = @4
local.get 4
i32.const 1
i32.shl
local.tee 4
local.get 3
i32.and
br_if 1 (;@3;)
local.get 2
i32.const 4
i32.add
local.set 2
br 0 (;@4;)
end
end
loop ;; label = @3
i32.const 1048584
local.get 2
i32.const 3
i32.shl
i32.add
local.tee 6
local.get 2
local.set 5
local.set 7
loop ;; label = @4
local.get 7
i32.load offset=12
local.tee 3
local.get 7
i32.ne
if ;; label = @5
loop ;; label = @6
local.get 3
i32.load offset=4
i32.const -4
i32.and
local.tee 8
local.get 1
i32.sub
local.tee 9
i32.const 15
i32.gt_s
if ;; label = @7
local.get 3
local.get 1
i32.const 1
i32.or
i32.store offset=4
local.get 3
i32.load offset=12
local.get 1
local.get 3
i32.add
local.set 2
local.tee 1
local.get 3
i32.load offset=8
local.tee 4
local.get 1
i32.store offset=12
local.get 4
i32.store offset=8
i32.const 0
local.get 2
i32.store offset=1048604
i32.const 0
local.get 2
i32.store offset=1048600
local.get 2
global.get 8
i64.store offset=8 align=4
local.get 2
local.get 9
i32.const 1
i32.or
i32.store offset=4
local.get 8
local.get 3
i32.add
local.get 9
i32.store
br 6 (;@1;)
end
local.get 9
i32.const -1
i32.gt_s
if ;; label = @7
local.get 8
local.get 3
i32.add
local.get 8
local.get 3
i32.add
i32.load offset=4
i32.const 1
i32.or
i32.store offset=4
local.get 3
i32.load offset=12
local.tee 8
local.get 3
i32.load offset=8
local.tee 9
local.get 8
i32.store offset=12
local.get 9
i32.store offset=8
br 6 (;@1;)
end
local.get 3
i32.load offset=12
local.tee 3
local.get 7
i32.ne
br_if 0 (;@6;)
end
end
local.get 5
i32.const 1
i32.add
local.tee 5
i32.const 3
i32.and
if ;; label = @5
i32.const 8
local.get 7
i32.add
local.set 7
br 1 (;@4;)
end
end
loop ;; label = @4
local.get 2
i32.const 3
i32.and
if ;; label = @5
i32.const -8
local.get 6
i32.add
local.tee 6
i32.load offset=8
local.get 6
i32.eq
if ;; label = @6
local.get 2
i32.const -1
i32.add
local.set 2
br 2 (;@4;)
end
else
i32.const 0
i32.const 0
i32.load offset=1048588
local.get 4
i32.const -1
i32.xor
i32.and
i32.store offset=1048588
end
end
local.get 4
i32.const 1
i32.shl
local.tee 4
i32.const 0
i32.load offset=1048588
local.tee 3
i32.le_u
local.set 2
local.get 4
i32.eqz
br_if 1 (;@2;)
local.get 2
i32.eqz
br_if 1 (;@2;)
local.get 3
local.get 4
i32.and
if ;; label = @4
local.get 5
local.set 2
else
loop ;; label = @5
local.get 4
i32.const 1
i32.shl
local.tee 4
local.get 5
i32.const 4
i32.add
local.set 5
local.get 3
i32.and
i32.eqz
br_if 0 (;@5;)
end
local.get 5
local.set 2
end
br 0 (;@3;)
end
end
i32.const 0
i32.load offset=1048592
local.tee 3
i32.load offset=4
i32.const -4
i32.and
local.tee 2
local.get 1
i32.sub
local.set 5
block ;; label = @2
local.get 2
local.get 1
i32.ge_u
if ;; label = @3
local.get 5
i32.const 16
i32.ge_s
br_if 1 (;@2;)
end
local.get 2
local.get 3
i32.add
local.set 5
global.get 7
i32.const -1
i32.eq
if ;; label = @3
local.get 1
i32.const 16
i32.add
local.set 4
else
local.get 1
i32.const 4111
i32.add
i32.const -4096
i32.and
local.set 4
end
global.get 2
i32.eqz
if ;; label = @3
global.get 5
global.set 2
end
block ;; label = @3
local.get 4
if ;; label = @4
global.get 2
local.tee 6
local.get 4
i32.add
global.get 3
i32.ge_u
if ;; label = @5
local.get 4
call 1
local.tee 7
i32.const -1
i32.eq
br_if 2 (;@3;)
local.get 7
global.get 3
i32.add
global.set 3
end
local.get 4
global.get 2
i32.add
global.set 2
else
global.get 3
local.set 6
end
local.get 6
i32.const -1
i32.eq
br_if 0 (;@3;)
local.get 3
i32.const 1048584
i32.eq
local.set 7
i32.const 1
local.get 7
local.get 6
local.get 5
i32.ge_u
select
i32.eqz
br_if 0 (;@3;)
global.get 4
local.get 4
i32.add
local.tee 8
global.set 4
local.get 5
local.tee 9
i32.const 4095
i32.and
i32.eqz
i32.const 0
local.get 6
local.get 5
i32.eq
select
if ;; label = @4
i32.const 0
i32.load offset=1048592
local.get 4
local.get 2
i32.add
i32.const 1
i32.or
i32.store offset=4
else
global.get 7
i32.const -1
i32.eq
if ;; label = @5
local.get 6
global.set 7
else
local.get 6
local.get 9
i32.sub
local.get 8
i32.add
global.set 4
end
i32.const 8
local.get 6
i32.add
i32.const 7
i32.and
local.tee 5
if ;; label = @5
i32.const 8
local.get 5
i32.sub
local.tee 5
local.get 6
i32.add
local.set 6
else
i32.const 0
local.set 5
end
i32.const 4096
local.get 4
local.get 6
i32.add
i32.const 4095
i32.and
i32.sub
local.get 5
i32.add
local.set 5
global.get 2
i32.eqz
if ;; label = @5
global.get 5
global.set 2
end
global.get 2
local.set 4
block ;; label = @5
local.get 5
local.get 4
i32.add
global.get 3
i32.ge_u
if ;; label = @6
local.get 5
call 1
local.tee 8
i32.const -1
i32.eq
if ;; label = @7
i32.const -1
local.set 4
br 2 (;@5;)
end
local.get 8
global.get 3
i32.add
global.set 3
end
local.get 5
global.get 2
i32.add
global.set 2
end
i32.const 0
local.get 5
local.get 4
i32.const -1
i32.eq
local.tee 8
select
local.tee 5
global.get 4
i32.add
global.set 4
i32.const 0
local.get 6
i32.store offset=1048592
local.get 6
local.get 5
local.get 6
i32.sub
local.get 6
local.get 4
local.get 8
select
i32.add
i32.const 1
i32.or
i32.store offset=4
local.get 7
br_if 0 (;@4;)
local.get 2
i32.const 16
i32.lt_u
if ;; label = @5
local.get 6
i32.const 1
i32.store offset=4
br 2 (;@3;)
end
local.get 3
local.get 3
i32.load offset=4
i32.const 1
i32.and
local.get 2
i32.const -12
i32.add
i32.const -8
i32.and
local.tee 2
i32.or
i32.store offset=4
local.get 2
local.get 3
i32.add
i32.const 5
i32.store offset=4
local.get 2
local.get 3
i32.add
i32.const 5
i32.store offset=8
local.get 2
i32.const 15
i32.le_u
br_if 0 (;@4;)
i32.const 8
local.get 3
i32.add
call 3
end
global.get 4
local.tee 2
global.get 9
i32.gt_u
if ;; label = @4
local.get 2
global.set 9
end
local.get 2
global.get 10
i32.le_u
br_if 0 (;@3;)
local.get 2
global.set 10
end
i32.const 0
i32.load offset=1048592
i32.load offset=4
i32.const -4
i32.and
local.tee 3
local.get 1
i32.sub
local.tee 5
local.get 3
local.get 1
i32.lt_u
if ;; label = @3
i32.const 0
return
end
i32.const 16
i32.ge_s
br_if 0 (;@2;)
i32.const 0
return
end
i32.const 0
i32.load offset=1048592
local.tee 3
local.get 1
i32.const 1
i32.or
i32.store offset=4
i32.const 0
local.get 1
local.get 3
i32.add
local.tee 1
i32.store offset=1048592
local.get 1
local.get 5
i32.const 1
i32.or
i32.store offset=4
end
i32.const 8
local.get 3
i32.add)
(func (;5;) (type 0)
call 0
unreachable)
(func (;6;) (type 3) (param i32 i32)
(local i32 i32 i32 i32 i32 i32)
global.get 0
local.tee 2
i32.const -24
local.get 2
i32.add
local.tee 4
global.set 0
local.get 0
i32.load offset=4
local.get 0
i32.load
local.tee 5
i32.sub
i32.const 2
i32.shr_s
local.tee 6
i32.const 1
i32.add
local.tee 7
local.get 4
local.set 4
i32.const 1073741823
i32.gt_u
if ;; label = @1
call 0
unreachable
end
local.get 0
i32.load offset=8
local.get 5
i32.sub
local.tee 5
i32.const 2
i32.shr_s
i32.const 536870911
i32.lt_u
if (result i32) ;; label = @1
local.get 5
i32.const 1
i32.shr_s
local.set 5
local.get 7
local.get 5
local.get 5
local.get 7
i32.lt_u
select
else
i32.const 1073741823
end
local.tee 7
local.get 4
i32.const 0
i32.store offset=12
local.get 4
i32.const 8
local.get 0
i32.add
i32.store offset=16
if ;; label = @1
local.get 7
i32.const 1073741823
i32.gt_u
if ;; label = @2
call 5
unreachable
end
local.get 7
i32.const 2
i32.shl
call 4
local.set 5
else
i32.const 0
local.set 5
end
local.get 4
local.get 5
i32.store
local.get 4
local.get 6
i32.const 2
i32.shl
local.get 5
i32.add
local.tee 6
i32.store offset=8
local.get 4
local.get 6
i32.store offset=4
local.get 4
local.get 7
i32.const 2
i32.shl
local.get 5
i32.add
i32.store offset=12
local.get 6
local.get 1
i32.load
i32.store
i32.const 0
local.get 0
i32.load offset=4
local.get 0
i32.load
local.tee 7
i32.sub
local.tee 5
i32.const 2
i32.shr_s
i32.const 2
i32.shl
i32.sub
local.get 6
i32.add
local.set 3
local.get 5
i32.const 0
i32.gt_s
if ;; label = @1
local.get 3
local.get 7
local.get 5
call 28
drop
end
local.get 0
i32.load
local.tee 7
local.get 0
local.get 3
i32.store
local.get 0
i32.const 4
local.get 6
i32.add
i32.store offset=4
local.get 0
i32.load offset=8
local.set 5
local.get 0
local.get 4
i32.load offset=12
i32.store offset=8
local.get 4
local.get 5
i32.store offset=12
if ;; label = @1
local.get 7
call 3
end
global.set 0)
(func (;7;) (type 2) (param i32)
(local i32)
local.get 0
i32.load
local.tee 1
if ;; label = @1
local.get 0
local.get 1
i32.store offset=4
local.get 1
call 3
end)
(func (;8;) (type 4) (param i32 i32 i32 i32 i32) (result i32)
(local i32 i32 i32 f64 f64 f64)
local.get 1
i32.load
local.tee 5
f64.load offset=8
local.tee 8
local.get 0
i32.load
local.tee 6
f64.load offset=8
local.tee 9
local.get 2
i32.load
local.tee 7
f64.load offset=8
local.set 10
f64.lt
if (result i32) ;; label = @1
local.get 10
local.get 8
f64.lt
if (result i32) ;; label = @2
local.get 0
local.get 7
i32.store
local.get 2
local.get 6
i32.store
i32.const 1
else
local.get 0
local.get 5
i32.store
local.get 1
local.get 6
i32.store
local.get 2
i32.load
local.tee 5
f64.load offset=8
local.get 9
f64.lt
if (result i32) ;; label = @3
local.get 1
local.get 5
i32.store
local.get 2
local.get 6
i32.store
i32.const 2
else
i32.const 1
end
end
else
local.get 10
local.get 8
f64.lt
if (result i32) ;; label = @2
local.get 1
local.get 7
i32.store
local.get 2
local.get 5
i32.store
local.get 0
i32.load
local.set 7
local.get 1
i32.load
local.tee 5
f64.load offset=8
local.get 7
f64.load offset=8
f64.lt
if (result i32) ;; label = @3
local.get 0
local.get 5
i32.store
local.get 1
local.get 7
i32.store
i32.const 2
else
i32.const 1
end
else
i32.const 0
end
end
local.set 5
local.get 2
i32.load
local.set 6
local.get 3
i32.load
local.tee 7
f64.load offset=8
local.get 6
f64.load offset=8
f64.lt
if ;; label = @1
local.get 2
local.get 7
i32.store
local.get 3
local.get 6
i32.store
local.get 1
i32.load
local.set 6
local.get 2
i32.load
local.tee 7
f64.load offset=8
local.get 6
f64.load offset=8
f64.lt
if ;; label = @2
local.get 1
local.get 7
i32.store
local.get 2
local.get 6
i32.store
local.get 0
i32.load
local.set 6
local.get 1
i32.load
local.tee 7
f64.load offset=8
local.get 6
f64.load offset=8
f64.lt
if ;; label = @3
local.get 0
local.get 7
i32.store
local.get 1
local.get 6
i32.store
local.get 5
i32.const 3
i32.add
local.set 5
else
local.get 5
i32.const 2
i32.add
local.set 5
end
else
local.get 5
i32.const 1
i32.add
local.set 5
end
end
local.get 3
i32.load
local.set 6
local.get 4
i32.load
local.tee 7
f64.load offset=8
local.get 6
f64.load offset=8
f64.lt
if ;; label = @1
local.get 3
local.get 7
i32.store
local.get 4
local.get 6
i32.store
local.get 2
i32.load
local.set 6
local.get 3
i32.load
local.tee 7
f64.load offset=8
local.get 6
f64.load offset=8
f64.lt
if ;; label = @2
local.get 2
local.get 7
i32.store
local.get 3
local.get 6
i32.store
local.get 1
i32.load
local.set 6
local.get 2
i32.load
local.tee 7
f64.load offset=8
local.get 6
f64.load offset=8
f64.lt
if ;; label = @3
local.get 1
local.get 7
i32.store
local.get 2
local.get 6
i32.store
local.get 0
i32.load
local.set 6
local.get 1
i32.load
local.tee 7
f64.load offset=8
local.get 6
f64.load offset=8
f64.lt
if ;; label = @4
local.get 0
local.get 7
i32.store
local.get 1
local.get 6
i32.store
local.get 5
i32.const 4
i32.add
return
end
local.get 5
i32.const 3
i32.add
return
end
local.get 5
i32.const 2
i32.add
return
end
local.get 5
i32.const 1
i32.add
return
end
local.get 5)
(func (;9;) (type 3) (param i32 i32)
(local i32 i32 i32 i32 i32 i32 i32 i32 i32 f64 f64 f64)
local.get 1
local.tee 2
local.get 0
i32.sub
local.tee 3
i32.const 2
i32.shr_s
local.set 4
block ;; label = @1
local.get 4
i32.const 4
i32.lt_u
if ;; label = @2
local.get 1
local.get 0
local.set 6
local.set 5
else
local.get 0
local.get 1
local.set 5
local.set 6
loop ;; label = @3
local.get 3
i32.const 16
i32.eq
if ;; label = @4
local.get 6
i32.load offset=4
local.tee 3
f64.load offset=8
local.tee 11
local.get 6
i32.load
local.tee 2
f64.load offset=8
local.tee 12
local.get 6
i32.load offset=8
local.tee 4
f64.load offset=8
local.set 13
f64.lt
if ;; label = @5
local.get 13
local.get 11
f64.lt
if ;; label = @6
local.get 6
local.get 4
i32.store
local.get 6
local.get 2
i32.store offset=8
else
local.get 6
local.get 3
i32.store
local.get 6
local.get 2
i32.store offset=4
local.get 13
local.get 12
f64.lt
i32.eqz
br_if 0 (;@6;)
local.get 6
local.get 4
i32.store offset=4
local.get 6
local.get 2
i32.store offset=8
end
else
local.get 13
local.get 11
f64.lt
i32.eqz
br_if 0 (;@5;)
local.get 6
local.get 4
i32.store offset=4
local.get 6
local.get 3
i32.store offset=8
local.get 13
local.get 12
f64.lt
i32.eqz
br_if 0 (;@5;)
local.get 6
local.get 4
i32.store
local.get 6
local.get 2
i32.store offset=4
end
local.get 6
i32.load offset=8
local.set 2
i32.const -4
local.get 5
i32.add
local.tee 4
i32.load
local.tee 3
f64.load offset=8
local.get 2
f64.load offset=8
f64.lt
i32.eqz
br_if 3 (;@1;)
local.get 6
local.get 3
i32.store offset=8
local.get 4
local.get 2
i32.store
local.get 6
i32.load offset=8
local.tee 4
f64.load offset=8
local.tee 11
local.get 6
i32.load offset=4
local.tee 3
f64.load offset=8
f64.lt
i32.eqz
br_if 3 (;@1;)
local.get 6
local.get 4
i32.store offset=4
local.get 6
local.get 3
i32.store offset=8
local.get 6
i32.load
local.set 3
local.get 11
local.get 3
f64.load offset=8
f64.lt
i32.eqz
br_if 3 (;@1;)
local.get 6
local.get 4
i32.store
local.get 6
local.get 3
i32.store offset=4
br 3 (;@1;)
end
local.get 3
i32.const 20
i32.eq
if ;; label = @4
local.get 6
i32.const 4
local.get 6
i32.add
i32.const 8
local.get 6
i32.add
i32.const 12
local.get 6
i32.add
i32.const -4
local.get 5
i32.add
call 8
drop
br 3 (;@1;)
end
local.get 3
i32.const 124
i32.ge_s
if ;; label = @4
local.get 4
i32.const 2
i32.div_s
i32.const 2
i32.shl
local.get 6
i32.add
local.tee 8
i32.const -4
local.get 5
i32.add
local.set 7
local.get 3
i32.const 3996
i32.gt_s
if ;; label = @5
local.get 6
local.get 4
i32.const 4
i32.div_s
local.tee 3
i32.const 2
i32.shl
local.get 6
i32.add
local.get 8
local.get 3
i32.const 2
i32.shl
local.get 8
i32.add
local.get 7
call 8
local.set 4
else
local.get 8
i32.load
local.tee 3
f64.load offset=8
local.tee 11
local.get 6
i32.load
local.tee 4
f64.load offset=8
local.tee 12
local.get 7
i32.load
local.tee 9
f64.load offset=8
local.set 13
f64.lt
if ;; label = @6
local.get 13
local.get 11
f64.lt
if ;; label = @7
local.get 6
local.get 9
i32.store
local.get 7
local.get 4
i32.store
i32.const 1
local.set 4
else
local.get 6
local.get 3
i32.store
local.get 8
local.get 4
i32.store
local.get 7
i32.load
local.tee 3
f64.load offset=8
local.get 12
f64.lt
if ;; label = @8
local.get 8
local.get 3
i32.store
local.get 7
local.get 4
i32.store
i32.const 2
local.set 4
else
i32.const 1
local.set 4
end
end
else
local.get 13
local.get 11
f64.lt
if ;; label = @7
local.get 8
local.get 9
i32.store
local.get 7
local.get 3
i32.store
local.get 6
i32.load
local.set 4
local.get 8
i32.load
local.tee 3
f64.load offset=8
local.get 4
f64.load offset=8
f64.lt
if ;; label = @8
local.get 6
local.get 3
i32.store
local.get 8
local.get 4
i32.store
i32.const 2
local.set 4
else
i32.const 1
local.set 4
end
else
i32.const 0
local.set 4
end
end
end
local.get 6
i32.load
local.tee 9
f64.load offset=8
local.set 11
i32.load
f64.load offset=8
local.set 12
block ;; label = @5
local.get 11
local.get 12
f64.lt
if ;; label = @6
local.get 7
local.set 3
else
local.get 7
local.set 3
loop ;; label = @7
i32.const -4
local.get 3
i32.add
local.set 3
local.get 6
local.get 3
i32.eq
if ;; label = @8
i32.const 4
local.get 6
i32.add
local.set 8
local.get 7
i32.load
local.set 3
local.get 11
local.get 3
f64.load offset=8
f64.lt
i32.eqz
if ;; label = @9
local.get 8
local.get 7
i32.eq
br_if 8 (;@1;)
loop ;; label = @10
local.get 8
i32.load
local.set 9
i32.const 4
local.get 8
i32.add
local.set 4
local.get 11
local.get 9
f64.load offset=8
f64.lt
i32.eqz
if ;; label = @11
local.get 4
local.get 7
i32.eq
br_if 10 (;@1;)
local.get 4
local.set 8
br 1 (;@10;)
end
end
local.get 8
local.get 3
i32.store
local.get 7
local.get 9
i32.store
local.get 4
local.set 8
end
local.get 8
local.get 7
i32.eq
br_if 7 (;@1;)
loop ;; label = @9
local.get 6
i32.load
f64.load offset=8
local.tee 11
local.get 8
i32.load
local.tee 4
f64.load offset=8
f64.lt
i32.eqz
if ;; label = @10
loop ;; label = @11
i32.const 4
local.get 8
i32.add
local.tee 8
i32.load
local.set 4
local.get 11
local.get 4
f64.load offset=8
f64.lt
i32.eqz
br_if 0 (;@11;)
end
end
loop ;; label = @10
i32.const -4
local.get 7
i32.add
local.tee 7
i32.load
local.set 3
local.get 11
local.get 3
f64.load offset=8
f64.lt
br_if 0 (;@10;)
end
local.get 8
local.get 7
i32.lt_u
if ;; label = @10
local.get 8
local.get 3
i32.store
local.get 7
local.get 4
i32.store
i32.const 4
local.get 8
i32.add
local.set 8
br 1 (;@9;)
end
local.get 2
local.get 8
i32.sub
local.tee 3
i32.const 2
i32.shr_s
local.tee 4
i32.const 4
i32.lt_u
if ;; label = @10
local.get 8
local.set 6
br 8 (;@2;)
end
local.get 8
local.set 6
br 6 (;@3;)
end
else
local.get 3
i32.load
local.tee 10
f64.load offset=8
local.get 12
f64.lt
i32.eqz
br_if 1 (;@7;)
local.get 6
local.get 10
i32.store
local.get 3
local.get 9
i32.store
local.get 4
i32.const 1
i32.add
local.set 4
end
end
end
i32.const 4
local.get 6
i32.add
local.tee 7
local.get 3
i32.lt_u
if ;; label = @6
loop ;; label = @7
local.get 8
i32.load
f64.load offset=8
local.set 11
local.get 7
i32.load
local.tee 9
f64.load offset=8
local.get 11
f64.lt
if ;; label = @8
loop ;; label = @9
i32.const 4
local.get 7
i32.add
local.tee 7
i32.load
local.tee 9
f64.load offset=8
local.get 11
f64.lt
br_if 0 (;@9;)
end
end
loop ;; label = @8
i32.const -4
local.get 3
i32.add
local.tee 3
i32.load
local.tee 10
f64.load offset=8
local.get 11
f64.lt
i32.eqz
br_if 0 (;@8;)
end
local.get 7
local.get 3
i32.gt_u
br_if 1 (;@6;)
local.get 7
local.get 10
i32.store
local.get 3
local.get 9
i32.store
local.get 3
local.get 8
local.get 8
local.get 7
i32.eq
select
local.set 8
local.get 4
i32.const 1
i32.add
local.set 4
i32.const 4
local.get 7
i32.add
local.set 7
br 0 (;@7;)
end
end
local.get 7
local.get 8
i32.ne
if ;; label = @6
local.get 7
i32.load
local.set 9
local.get 8
i32.load
local.tee 3
f64.load offset=8
local.get 9
f64.load offset=8
f64.lt
i32.eqz
br_if 0 (;@6;)
local.get 7
local.get 3
i32.store
local.get 8
local.get 9
i32.store
local.get 4
i32.const 1
i32.add
local.set 4
end
i32.const 4
local.get 7
i32.add
local.set 8
block ;; label = @6
block ;; label = @7
local.get 4
i32.eqz
if ;; label = @8
local.get 6
local.get 7
call 14
local.set 3
local.get 8
local.get 5
call 14
if ;; label = @9
local.get 3
br_if 8 (;@1;)
local.get 7
local.tee 2
local.get 6
i32.sub
local.set 3
br 2 (;@7;)
end
local.get 3
br_if 2 (;@6;)
end
local.get 7
local.tee 4
local.get 6
i32.sub
local.tee 3
local.get 2
local.get 4
i32.sub
i32.lt_s
if ;; label = @8
local.get 6
local.get 7
call 9
br 2 (;@6;)
end
local.get 8
local.get 5
call 9
local.get 7
local.set 2
end
local.get 3
i32.const 2
i32.shr_s
local.tee 4
i32.const 4
i32.lt_u
if ;; label = @7
local.get 7
local.set 5
br 5 (;@2;)
end
local.get 7
local.set 5
br 3 (;@3;)
end
local.get 2
local.get 8
i32.sub
local.tee 3
i32.const 2
i32.shr_s
local.tee 4
i32.const 4
i32.lt_u
if ;; label = @6
local.get 8
local.set 6
br 4 (;@2;)
end
local.get 8
local.set 6
end
br 1 (;@3;)
end
end
local.get 6
i32.load offset=4
local.tee 3
f64.load offset=8
local.tee 11
local.get 6
i32.load
local.tee 2
f64.load offset=8
local.tee 12
local.get 6
i32.load offset=8
local.tee 4
f64.load offset=8
local.set 13
f64.lt
if ;; label = @3
local.get 13
local.get 11
f64.lt
if ;; label = @4
local.get 6
local.get 4
i32.store
local.get 6
local.get 2
i32.store offset=8
else
local.get 6
local.get 3
i32.store
local.get 6
local.get 2
i32.store offset=4
local.get 13
local.get 12
f64.lt
i32.eqz
br_if 0 (;@4;)
local.get 6
local.get 4
i32.store offset=4
local.get 6
local.get 2
i32.store offset=8
end
else
local.get 13
local.get 11
f64.lt
i32.eqz
br_if 0 (;@3;)
local.get 6
local.get 4
i32.store offset=4
local.get 6
local.get 3
i32.store offset=8
local.get 13
local.get 12
f64.lt
i32.eqz
br_if 0 (;@3;)
local.get 6
local.get 4
i32.store
local.get 6
local.get 2
i32.store offset=4
end
i32.const 12
local.get 6
i32.add
local.tee 3
local.get 5
i32.eq
br_if 1 (;@1;)
i32.const 8
local.get 6
i32.add
local.set 2
loop ;; label = @3
local.get 3
i32.load
local.tee 4
f64.load offset=8
local.tee 11
local.get 2
i32.load
f64.load offset=8
f64.lt
if ;; label = @4
local.get 3
local.set 7
loop ;; label = @5
local.get 7
local.get 2
i32.load
i32.store
local.get 2
local.get 6
i32.eq
if ;; label = @6
local.get 6
local.set 2
else
i32.const -4
local.get 2
i32.add
local.set 7
local.get 11
local.get 7
i32.load
f64.load offset=8
f64.lt
i32.eqz
br_if 0 (;@6;)
local.get 7
local.get 2
local.set 7
local.set 2
br 1 (;@5;)
end
end
local.get 2
local.get 4
i32.store
end
i32.const 4
local.get 3
i32.add
local.tee 2
local.get 5
i32.eq
br_if 2 (;@1;)
local.get 3
local.get 2
local.set 3
local.set 2
br 0 (;@3;)
end
end
local.get 3
i32.const 8
i32.eq
if ;; label = @2
local.get 6
i32.load
local.set 2
i32.const -4
local.get 5
i32.add
local.tee 5
i32.load
local.tee 3
f64.load offset=8
local.get 2
f64.load offset=8
f64.lt
if ;; label = @3
local.get 6
local.get 3
i32.store
local.get 5
local.get 2
i32.store
end
else
local.get 3
i32.const 12
i32.ne
br_if 0 (;@2;)
local.get 6
i32.load offset=4
local.tee 2
f64.load offset=8
local.tee 11
local.get 6
i32.load
local.tee 4
f64.load offset=8
local.tee 12
i32.const -4
local.get 5
i32.add
local.tee 5
i32.load
local.tee 3
f64.load offset=8
local.set 13
f64.lt
if ;; label = @3
local.get 13
local.get 11
f64.lt
if ;; label = @4
local.get 6
local.get 3
i32.store
local.get 5
local.get 4
i32.store
else
local.get 6
local.get 2
i32.store
local.get 6
local.get 4
i32.store offset=4
local.get 5
i32.load
local.tee 2
f64.load offset=8
local.get 12
f64.lt
i32.eqz
br_if 0 (;@4;)
local.get 6
local.get 2
i32.store offset=4
local.get 5
local.get 4
i32.store
end
else
local.get 13
local.get 11
f64.lt
i32.eqz
br_if 0 (;@3;)
local.get 6
local.get 3
i32.store offset=4
local.get 5
local.get 2
i32.store
local.get 6
i32.load
local.set 3
local.get 6
i32.load offset=4
local.tee 5
f64.load offset=8
local.get 3
f64.load offset=8
f64.lt
i32.eqz
br_if 0 (;@3;)
local.get 6
local.get 5
i32.store
local.get 6
local.get 3
i32.store offset=4
end
end
end)
(func (;10;) (type 3) (param i32 i32)
(local i32 i32 i32 i32 i32 i32)
global.get 0
local.tee 2
i32.const -24
local.get 2
i32.add
local.tee 4
global.set 0
local.get 0
i32.load offset=4
local.get 0
i32.load
local.tee 5
i32.sub
i32.const 2
i32.shr_s
local.tee 6
i32.const 1
i32.add
local.tee 7
local.get 4
local.set 4
i32.const 1073741823
i32.gt_u
if ;; label = @1
call 0
unreachable
end
local.get 0
i32.load offset=8
local.get 5
i32.sub
local.tee 5
i32.const 2
i32.shr_s
i32.const 536870911
i32.lt_u
if (result i32) ;; label = @1
local.get 5
i32.const 1
i32.shr_s
local.set 5
local.get 7
local.get 5
local.get 5
local.get 7
i32.lt_u
select
else
i32.const 1073741823
end
local.tee 7
local.get 4
i32.const 0
i32.store offset=12
local.get 4
i32.const 8
local.get 0
i32.add
i32.store offset=16
if ;; label = @1
local.get 7
i32.const 1073741823
i32.gt_u
if ;; label = @2
call 5
unreachable
end
local.get 7
i32.const 2
i32.shl
call 4
local.set 5
else
i32.const 0
local.set 5
end
local.get 4
local.get 5
i32.store
local.get 4
local.get 6
i32.const 2
i32.shl
local.get 5
i32.add
local.tee 6
i32.store offset=8
local.get 4
local.get 6
i32.store offset=4
local.get 4
local.get 7
i32.const 2
i32.shl
local.get 5
i32.add
i32.store offset=12
local.get 6
local.get 1
i32.load
i32.store
i32.const 0
local.get 0
i32.load offset=4
local.get 0
i32.load
local.tee 7
i32.sub
local.tee 5
i32.const 2
i32.shr_s
i32.const 2
i32.shl
i32.sub
local.get 6
i32.add
local.set 3
local.get 5
i32.const 0
i32.gt_s
if ;; label = @1
local.get 3
local.get 7
local.get 5
call 28
drop
end
local.get 0
i32.load
local.tee 7
local.get 0
local.get 3
i32.store
local.get 0
i32.const 4
local.get 6
i32.add
i32.store offset=4
local.get 0
i32.load offset=8
local.set 5
local.get 0
local.get 4
i32.load offset=12
i32.store offset=8
local.get 4
local.get 5
i32.store offset=12
if ;; label = @1
local.get 7
call 3
end
global.set 0)
(func (;11;) (type 5) (param i32 i32 i32 i32) (result i32)
(local i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 f64 f64 f64 f64 f64 f64 f64 f64 f64 f64 f64)
i32.const 8
local.get 0
i32.add
local.tee 8
f64.load
local.tee 20
i32.const 8
local.get 3
i32.add
local.tee 11
f64.load
i32.const 16
local.get 1
i32.add
local.tee 4
f64.load
local.tee 16
i32.const 16
local.get 0
i32.add
local.tee 5
f64.load
local.tee 17
f64.sub
local.tee 24
i32.const 8
local.get 2
i32.add
local.tee 6
f64.load
local.tee 18
i32.const 8
local.get 1
i32.add
local.tee 7
f64.load
local.tee 19
f64.sub
f64.mul
local.get 19
local.get 20
f64.sub
local.tee 25
i32.const 16
local.get 2
i32.add
local.tee 9
f64.load
local.tee 21
local.get 16
f64.sub
f64.mul
f64.sub
local.tee 26
global.get 1
f64.lt
i32.const 31
i32.shl
i32.const 31
i32.shr_s
local.get 26
global.get 1
f64.gt
i32.add
local.set 10
local.tee 26
f64.sub
i32.const 16
local.get 3
i32.add
local.tee 12
f64.load
local.tee 22
local.get 21
f64.sub
local.get 24
local.get 26
local.get 19
f64.sub
f64.mul
local.get 25
local.get 22
local.get 16
f64.sub
f64.mul
f64.sub
local.tee 24
global.get 1
f64.lt
i32.const 31
i32.shl
i32.const 31
i32.shr_s
local.get 24
global.get 1
f64.gt
i32.add
local.set 13
local.tee 24
f64.mul
local.get 26
local.get 18
f64.sub
local.tee 25
local.get 17
local.get 22
f64.sub
f64.mul
f64.sub
local.tee 23
global.get 1
f64.lt
i32.const 31
i32.shl
i32.const 31
i32.shr_s
local.get 23
global.get 1
f64.gt
i32.add
local.tee 14
local.get 19
local.get 26
f64.sub
local.get 24
f64.mul
local.get 25
local.get 16
local.get 22
f64.sub
f64.mul
f64.sub
local.tee 24
global.get 1
f64.lt
i32.const 31
i32.shl
i32.const 31
i32.shr_s
local.get 24
global.get 1
f64.gt
i32.add
local.tee 15
i32.ne
i32.const 0
local.get 10
local.get 13
i32.ne
select
if ;; label = @1
i32.const 1
return
end
local.get 10
i32.eqz
if ;; label = @1
local.get 18
local.get 19
local.get 20
local.get 20
local.get 19
f64.lt
select
f64.le
i32.eqz
br_if 0 (;@1;)
local.get 18
local.get 7
local.get 8
local.get 19
local.get 20
f64.lt
select
f64.load
f64.ge
i32.eqz
br_if 0 (;@1;)
local.get 21
local.get 16
local.get 17
local.get 17
local.get 16
f64.lt
select
f64.le
i32.eqz
br_if 0 (;@1;)
local.get 21
local.get 4
local.get 5
local.get 16
local.get 17
f64.lt
select
f64.load
f64.ge
i32.eqz
br_if 0 (;@1;)
i32.const 1
return
end
local.get 13
i32.eqz
if ;; label = @1
local.get 26
local.get 19
local.get 20
local.get 20
local.get 19
f64.lt
select
f64.le
i32.eqz
br_if 0 (;@1;)
local.get 26
local.get 7
local.get 8
local.get 19
local.get 20
f64.lt
select
f64.load
f64.ge
i32.eqz
br_if 0 (;@1;)
local.get 22
local.get 16
local.get 17
local.get 17
local.get 16
f64.lt
select
f64.le
i32.eqz
br_if 0 (;@1;)
local.get 22
local.get 4
local.get 5
local.get 16
local.get 17
f64.lt
select
f64.load
f64.ge
i32.eqz
br_if 0 (;@1;)
i32.const 1
return
end
local.get 14
i32.eqz
if ;; label = @1
local.get 20
local.get 26
local.get 18
local.get 18
local.get 26
f64.lt
select
f64.le
i32.eqz
br_if 0 (;@1;)
local.get 20
local.get 11
local.get 6
local.get 26
local.get 18
f64.lt
select
f64.load
f64.ge
i32.eqz
br_if 0 (;@1;)
local.get 17
local.get 22
local.get 21
local.get 21
local.get 22
f64.lt
select
f64.le
i32.eqz
br_if 0 (;@1;)
local.get 17
local.get 12
local.get 9
local.get 22
local.get 21
f64.lt
select
f64.load
f64.ge
i32.eqz
br_if 0 (;@1;)
i32.const 1
return
end
local.get 15
i32.eqz
if ;; label = @1
local.get 19
local.get 26
local.get 18
local.get 18
local.get 26
f64.lt
select
f64.le
i32.eqz
br_if 0 (;@1;)
local.get 19
local.get 11
local.get 6
local.get 26
local.get 18
f64.lt
select
f64.load
f64.ge
i32.eqz
br_if 0 (;@1;)
local.get 16
local.get 22
local.get 21
local.get 21
local.get 22
f64.lt
select
f64.le
i32.eqz
br_if 0 (;@1;)
local.get 16
local.get 12
local.get 9
local.get 22
local.get 21
f64.lt
select
f64.load
f64.ge
i32.eqz
br_if 0 (;@1;)
i32.const 1
return
end
i32.const 0)
(func (;12;) (type 5) (param i32 i32 i32 i32) (result i32)
(local i32 i32 i32 f64 f64)
local.get 2
f64.load
local.set 7
local.get 2
f64.load offset=8
local.set 8
i32.const 64
local.get 0
i32.add
local.tee 4
i32.load offset=8
local.set 5
local.get 4
i32.load offset=4
local.get 5
i32.ge_u
if ;; label = @1
local.get 5
i32.const 89478485
i32.gt_u
if ;; label = @2
call 5
unreachable
end
local.get 5
i32.const 48
i32.mul
call 4
local.set 5
local.get 4
local.get 5
i32.store
local.get 4
i32.load offset=16
local.tee 6
local.get 4
i32.load offset=20
i32.lt_u
if ;; label = @2
local.get 6
local.get 5
i32.store
local.get 4
i32.const 4
local.get 6
i32.add
i32.store offset=16
else
i32.const 12
local.get 4
i32.add
local.get 4
call 10
end
local.get 4
i32.const 0
i32.store offset=4
end
local.get 4
i32.load
local.set 5
local.get 4
i32.load offset=4
local.tee 6
local.get 4
local.get 6
i32.const 1
i32.add
i32.store offset=4
i32.const 48
i32.mul
local.get 5
i32.add
local.tee 4
local.get 1
i32.store
local.get 4
local.get 7
f64.store offset=8
local.get 4
local.get 8
f64.store offset=16
local.get 4
i64.const 0
i64.store offset=24 align=4
local.get 4
i64.const 0
i64.store offset=32 align=4
local.get 4
i32.const 0
i32.store offset=40
local.get 4
i32.const 0
i32.store8 offset=44
local.get 3
if ;; label = @1
local.get 4
local.get 3
i32.load offset=28
i32.store offset=28
local.get 4
local.get 3
i32.store offset=24
local.get 3
i32.load offset=28
local.get 4
i32.store offset=24
local.get 3
local.get 4
i32.store offset=28
else
local.get 4
local.get 4
i32.store offset=24
local.get 4
local.get 4
i32.store offset=28
end
local.get 4)
(func (;13;) (type 6) (param i32 i32 i32) (result i32)
(local i32 i32 i32 i32 i32 i32 f64)
local.get 1
i32.load offset=4
local.get 1
i32.load
local.tee 6
i32.sub
local.tee 3
if ;; label = @1
i32.const 0
i32.load offset=1049616
local.set 7
local.get 3
i32.const -1
i32.add
local.set 8
i32.const 0
global.get 1
local.set 9
local.set 4
loop ;; label = @2
local.get 4
i32.const 1
i32.add
local.get 9
local.get 8
local.get 6
i32.add
i32.const 4
i32.shl
local.get 7
i32.add
local.tee 8
f64.load
local.get 4
local.get 6
i32.add
i32.const 4
i32.shl
local.get 7
i32.add
local.tee 5
f64.load
f64.sub
local.get 5
f64.load offset=8
local.get 8
f64.load offset=8
f64.add
f64.mul
f64.add
local.set 9
local.tee 8
local.get 3
i32.ne
if ;; label = @3
local.get 8
local.get 4
local.set 8
local.set 4
br 1 (;@2;)
end
end
local.get 9
global.get 1
f64.gt
i32.eqz
local.get 2
i32.xor
if ;; label = @2
i32.const 0
i32.const 0
local.set 7
local.set 6
loop ;; label = @3
local.get 7
i32.const 1
i32.add
local.get 0
local.get 0
i32.load offset=12
local.get 7
i32.add
local.get 1
i32.load
local.get 7
i32.add
i32.const 4
i32.shl
i32.const 0
i32.load offset=1049616
i32.add
local.get 6
call 12
local.set 6
local.tee 7
local.get 3
i32.ne
br_if 0 (;@3;)
end
else
local.get 3
local.set 7
i32.const 0
local.set 6
loop ;; label = @3
local.get 7
i32.const -1
i32.add
local.tee 7
local.get 0
local.get 7
local.get 0
i32.load offset=12
i32.add
local.get 7
local.get 1
i32.load
i32.add
i32.const 4
i32.shl
i32.const 0
i32.load offset=1049616
i32.add
local.get 6
call 12
local.set 6
br_if 0 (;@3;)
end
end
local.get 6
if ;; label = @2
local.get 6
i32.load offset=28
local.set 7
local.get 6
f64.load offset=8
local.get 7
f64.load offset=8
f64.eq
if ;; label = @3
local.get 6
f64.load offset=16
local.get 7
f64.load offset=16
f64.eq
i32.eqz
br_if 0 (;@3;)
local.get 7
local.get 6
i32.load offset=24
i32.store offset=24
local.get 6
i32.load offset=24
local.get 7
i32.store offset=28
local.get 6
i32.load offset=36
local.tee 7
if ;; label = @4
local.get 7
local.get 6
i32.load offset=40
i32.store offset=40
end
local.get 6
i32.load offset=40
local.tee 8
if ;; label = @4
local.get 8
local.get 7
i32.store offset=36
end
local.get 6
i32.load offset=28
local.set 6
end
else
i32.const 0
local.set 6
end
else
i32.const 0
local.set 6
end
local.get 0
local.get 0
i32.load offset=12
local.get 3
i32.add
i32.store offset=12
local.get 6)
(func (;14;) (type 7) (param i32 i32) (result i32)
(local i32 i32 i32 i32 i32 f64 f64 f64)
local.get 1
local.get 0
i32.sub
local.tee 2
i32.const 2
i32.shr_s
i32.const 4
i32.lt_u
if ;; label = @1
local.get 2
i32.const 8
i32.eq
if ;; label = @2
local.get 0
i32.load
local.set 4
i32.const -4
local.get 1
i32.add
local.tee 2
i32.load
local.tee 3
f64.load offset=8
local.get 4
f64.load offset=8
f64.lt
if ;; label = @3
local.get 0
local.get 3
i32.store
local.get 2
local.get 4
i32.store
i32.const 1
return
end
i32.const 1
return
end
local.get 2
i32.const 12
i32.eq
if ;; label = @2
local.get 0
i32.load offset=4
local.tee 2
f64.load offset=8
local.tee 7
local.get 0
i32.load
local.tee 4
f64.load offset=8
local.tee 8
i32.const -4
local.get 1
i32.add
local.tee 5
i32.load
local.tee 3
f64.load offset=8
local.set 9
f64.lt
if ;; label = @3
local.get 9
local.get 7
f64.lt
if ;; label = @4
local.get 0
local.get 3
i32.store
local.get 5
local.get 4
i32.store
i32.const 1
return
end
local.get 0
local.get 2
i32.store
local.get 0
local.get 4
i32.store offset=4
local.get 5
i32.load
local.tee 2
f64.load offset=8
local.get 8
f64.lt
if ;; label = @4
local.get 0
local.get 2
i32.store offset=4
local.get 5
local.get 4
i32.store
i32.const 1
return
end
i32.const 1
return
end
local.get 9
local.get 7
f64.lt
if ;; label = @3
local.get 0
local.get 3
i32.store offset=4
local.get 5
local.get 2
i32.store
local.get 0
i32.load
local.set 3
local.get 0
i32.load offset=4
local.tee 2
f64.load offset=8
local.get 3
f64.load offset=8
f64.lt
if ;; label = @4
local.get 0
local.get 2
i32.store
local.get 0
local.get 3
i32.store offset=4
i32.const 1
return
end
i32.const 1
return
end
i32.const 1
return
end
i32.const 1
return
end
i32.const 8
local.get 0
i32.add
local.tee 3
local.get 2
i32.const 16
i32.eq
if ;; label = @1
local.get 0
i32.load offset=4
local.tee 2
f64.load offset=8
local.tee 7
local.get 0
i32.load
local.tee 5
f64.load offset=8
local.tee 8
local.get 3
i32.load
local.tee 4
f64.load offset=8
local.set 9
f64.lt
if ;; label = @2
local.get 9
local.get 7
f64.lt
if ;; label = @3
local.get 0
local.get 4
i32.store
local.get 3
local.get 5
i32.store
else
local.get 0
local.get 2
i32.store
local.get 0
local.get 5
i32.store offset=4
local.get 9
local.get 8
f64.lt
i32.eqz
br_if 0 (;@3;)
local.get 0
local.get 4
i32.store offset=4
local.get 3
local.get 5
i32.store
end
else
local.get 9
local.get 7
f64.lt
i32.eqz
br_if 0 (;@2;)
local.get 0
local.get 4
i32.store offset=4
local.get 3
local.get 2
i32.store
local.get 9
local.get 8
f64.lt
i32.eqz
br_if 0 (;@2;)
local.get 0
local.get 4
i32.store
local.get 0
local.get 5
i32.store offset=4
end
local.get 3
i32.load
local.set 4
i32.const -4
local.get 1
i32.add
local.tee 2
i32.load
local.tee 5
f64.load offset=8
local.get 4
f64.load offset=8
f64.lt
if ;; label = @2
local.get 3
local.get 5
i32.store
local.get 2
local.get 4
i32.store
local.get 3
i32.load
local.tee 2
f64.load offset=8
local.tee 7
local.get 0
i32.load offset=4
local.tee 4
f64.load offset=8
f64.lt
if ;; label = @3
local.get 0
local.get 2
i32.store offset=4
local.get 3
local.get 4
i32.store
local.get 0
i32.load
local.set 4
local.get 7
local.get 4
f64.load offset=8
f64.lt
if ;; label = @4
local.get 0
local.get 2
i32.store
local.get 0
local.get 4
i32.store offset=4
i32.const 1
return
end
i32.const 1
return
end
i32.const 1
return
end
i32.const 1
return
end
i32.const 12
local.get 0
i32.add
local.set 4
local.get 2
i32.const 20
i32.eq
if ;; label = @1
local.get 0
i32.const 4
local.get 0
i32.add
local.get 3
local.get 4
i32.const -4
local.get 1
i32.add
call 8
drop
i32.const 1
return
end
local.get 0
i32.load offset=4
local.tee 2
f64.load offset=8
local.set 7
local.get 0
i32.load
local.tee 5
f64.load offset=8
local.set 8
i32.load
local.tee 6
f64.load offset=8
local.set 9
local.get 7
local.get 8
f64.lt
if ;; label = @1
local.get 9
local.get 7
f64.lt
if ;; label = @2
local.get 0
local.get 6
i32.store
local.get 3
local.get 5
i32.store
else
local.get 0
local.get 2
i32.store
local.get 0
local.get 5
i32.store offset=4
local.get 9
local.get 8
f64.lt
i32.eqz
br_if 0 (;@2;)
local.get 0
local.get 6
i32.store offset=4
local.get 3
local.get 5
i32.store
end
else
local.get 9
local.get 7
f64.lt
i32.eqz
br_if 0 (;@1;)
local.get 0
local.get 6
i32.store offset=4
local.get 3
local.get 2
i32.store
local.get 9
local.get 8
f64.lt
i32.eqz
br_if 0 (;@1;)
local.get 0
local.get 6
i32.store
local.get 0
local.get 5
i32.store offset=4
end
local.get 4
local.get 1
i32.eq
if ;; label = @1
i32.const 1
return
end
i32.const 0
local.set 2
loop ;; label = @1
local.get 4
i32.load
local.tee 5
f64.load offset=8
local.tee 7
local.get 3
i32.load
f64.load offset=8
f64.lt
if ;; label = @2
local.get 4
local.set 6
loop ;; label = @3
local.get 6
local.get 3
i32.load
i32.store
local.get 3
local.get 0
i32.eq
if ;; label = @4
local.get 0
local.set 3
else
i32.const -4
local.get 3
i32.add
local.set 6
local.get 7
local.get 6
i32.load
f64.load offset=8
f64.lt
i32.eqz
br_if 0 (;@4;)
local.get 6
local.get 3
local.set 6
local.set 3
br 1 (;@3;)
end
end
local.get 3
local.get 5
i32.store
local.get 2
i32.const 1
i32.add
local.tee 2
i32.const 8
i32.ne
br_if 0 (;@2;)
i32.const 4
local.get 4
i32.add
local.get 1
i32.eq
return
end
i32.const 4
local.get 4
i32.add
local.tee 3
local.get 1
i32.eq
if ;; label = @2
i32.const 1
return
end
local.get 4
local.get 3
local.set 4
local.set 3
br 0 (;@1;)
end
i32.const 0)
(func (;15;) (type 6) (param i32 i32 i32) (result i32)
(local i32 i32 i32 i32 f64 f64)
i32.const 64
local.get 0
i32.add
local.tee 3
i32.load offset=8
local.set 4
local.get 3
i32.load offset=4
local.get 4
i32.ge_u
if ;; label = @1
local.get 4
i32.const 89478485
i32.gt_u
if ;; label = @2
call 5
unreachable
end
local.get 4
i32.const 48
i32.mul
call 4
local.set 4
local.get 3
local.get 4
i32.store
local.get 3
i32.load offset=16
local.tee 5
local.get 3
i32.load offset=20
i32.lt_u
if ;; label = @2
local.get 5
local.get 4
i32.store
local.get 3
i32.const 4
local.get 5
i32.add
i32.store offset=16
else
i32.const 12
local.get 3
i32.add
local.get 3
call 10
end
local.get 3
i32.const 0
i32.store offset=4
end
local.get 3
i32.load
local.set 4
local.get 3
i32.load offset=4
local.tee 5
local.get 3
local.get 5
i32.const 1
i32.add
i32.store offset=4
local.get 1
f64.load offset=8
local.set 7
local.get 1
f64.load offset=16
local.set 8
i32.const 48
i32.mul
local.get 4
i32.add
local.tee 4
local.get 1
i32.load
i32.store
local.get 4
local.get 7
f64.store offset=8
local.get 4
local.get 8
f64.store offset=16
local.get 4
i64.const 0
i64.store offset=24 align=4
local.get 4
i64.const 0
i64.store offset=32 align=4
local.get 4
i32.const 0
i32.store offset=40
local.get 4
i32.const 0
i32.store8 offset=44
local.get 3
i32.load offset=8
local.set 6
local.get 3
i32.load offset=4
local.get 6
i32.ge_u
if ;; label = @1
local.get 6
i32.const 89478485
i32.gt_u
if ;; label = @2
call 5
unreachable
end
local.get 6
i32.const 48
i32.mul
call 4
local.set 6
local.get 3
local.get 6
i32.store
local.get 3
i32.load offset=16
local.tee 5
local.get 3
i32.load offset=20
i32.lt_u
if ;; label = @2
local.get 5
local.get 6
i32.store
local.get 3
i32.const 4
local.get 5
i32.add
i32.store offset=16
else
i32.const 12
local.get 3
i32.add
local.get 3
call 10
end
local.get 3
i32.const 0
i32.store offset=4
end
local.get 3
i32.load
local.set 6
local.get 3
i32.load offset=4
local.tee 5
local.get 3
local.get 5
i32.const 1
i32.add
i32.store offset=4
local.get 2
f64.load offset=8
local.set 7
local.get 2
f64.load offset=16
local.set 8
i32.const 48
i32.mul
local.get 6
i32.add
local.tee 6
local.get 2
i32.load
i32.store
local.get 6
local.get 7
f64.store offset=8
local.get 6
local.get 8
f64.store offset=16
local.get 6
i64.const 0
i64.store offset=24 align=4
local.get 6
i64.const 0
i64.store offset=32 align=4
local.get 6
i32.const 0
i32.store offset=40
local.get 6
i32.const 0
i32.store8 offset=44
local.get 1
i32.load offset=28
local.tee 5
local.get 2
i32.load offset=24
local.set 3
local.get 1
local.get 2
i32.store offset=28
local.get 2
local.get 1
i32.store offset=24
local.get 4
local.get 5
i32.store offset=28
local.get 4
i32.store offset=24
local.get 6
local.get 4
i32.store offset=28
local.get 4
local.get 6
i32.store offset=24
local.get 3
local.get 6
i32.store offset=28
local.get 6
local.get 3
i32.store offset=24
local.get 6)
(func (;16;) (type 3) (param i32 i32)
(local i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 f64 f64 f64 f64 f64 f64 f64 f64 f64 f64 f64 f64 f64 f64 f64 f64)
local.get 1
if ;; label = @1
i32.const 0
local.get 1
local.set 4
local.set 3
loop ;; label = @2
local.get 3
i32.eqz
if ;; label = @3
local.get 0
i32.load8_u offset=16
i32.eqz
br_if 0 (;@3;)
local.get 4
local.tee 5
loop ;; label = @4
local.get 5
i32.load offset=32
local.tee 6
i32.eqz
if ;; label = @5
local.get 0
f64.load offset=56
local.tee 17
local.get 5
f64.load offset=8
local.get 0
f64.load offset=24
f64.sub
global.get 6
f64.mul
f64.mul
i32.trunc_f64_s
local.tee 6
local.get 17
local.get 5
f64.load offset=16
local.get 0
f64.load offset=40
f64.sub
global.get 6
f64.mul
f64.mul
i32.trunc_f64_s
local.set 11
i32.const 8
i32.shl
local.get 6
i32.or
i32.const 16711935
i32.and
local.tee 6
i32.const 4
i32.shl
local.get 6
i32.or
i32.const 252645135
i32.and
local.tee 6
i32.const 2
i32.shl
local.get 6
i32.or
i32.const 858993459
i32.and
local.set 6
local.get 11
i32.const 8
i32.shl
local.get 11
i32.or
i32.const 16711935
i32.and
local.tee 11
i32.const 4
i32.shl
local.get 11
i32.or
i32.const 252645135
i32.and
local.tee 11
i32.const 2
i32.shl
local.get 11
i32.or
i32.const 858993459
i32.and
local.tee 11
i32.const 2
i32.shl
local.get 11
i32.const 1
i32.shl
i32.or
i32.const -1431655766
i32.and
local.get 6
i32.const 1
i32.shl
local.get 6
i32.or
i32.const 1431655765
i32.and
i32.or
local.set 6
end
local.get 5
local.get 6
i32.store offset=32
local.get 5
local.get 5
i32.load offset=24
i32.store offset=36
local.get 5
i32.load offset=28
local.tee 6
local.get 5
local.get 6
i32.store offset=40
local.get 4
i32.ne
if ;; label = @5
local.get 6
local.set 5
br 1 (;@4;)
end
end
i32.load offset=36
i32.const 0
i32.store offset=40
local.get 4
i32.const 0
i32.store offset=36
local.get 4
local.set 5
i32.const 1
local.set 7
loop ;; label = @4
local.get 5
local.set 6
i32.const 0
i32.const 0
local.set 9
local.tee 5
local.set 8
loop ;; label = @5
local.get 6
local.tee 10
i32.const 0
local.set 11
loop ;; label = @6
local.get 10
i32.load offset=40
local.tee 10
local.get 11
i32.const 1
i32.add
local.set 11
if ;; label = @7
local.get 11
local.get 7
i32.ne
br_if 1 (;@6;)
local.get 7
local.set 11
end
end
local.set 12
local.get 10
local.set 6
local.get 7
local.set 10
loop ;; label = @6
block ;; label = @7
local.get 11
i32.const 0
i32.le_s
if ;; label = @8
local.get 6
i32.const 0
i32.ne
i32.const 0
local.get 10
i32.const 0
i32.gt_s
select
i32.eqz
if ;; label = @9
local.get 6
if ;; label = @10
local.get 9
i32.const 1
i32.add
local.set 9
br 5 (;@5;)
end
local.get 8
i32.const 0
i32.store offset=40
local.get 9
i32.eqz
br_if 6 (;@3;)
local.get 7
i32.const 1
i32.shl
local.set 7
br 5 (;@4;)
end
local.get 11
br_if 0 (;@8;)
local.get 6
i32.load offset=40
local.set 13
local.get 10
i32.const -1
i32.add
local.set 10
i32.const 0
local.set 11
br 1 (;@7;)
end
local.get 6
i32.const 0
i32.ne
i32.const 0
local.get 10
select
if ;; label = @8
local.get 12
i32.load offset=32
local.get 6
i32.load offset=32
i32.gt_s
if ;; label = @9
local.get 6
i32.load offset=40
local.set 13
local.get 10
i32.const -1
i32.add
local.set 10
else
local.get 6
local.set 13
local.get 12
local.tee 6
i32.load offset=40
local.set 12
local.get 11
i32.const -1
i32.add
local.set 11
end
else
local.get 6
local.set 13
local.get 12
local.tee 6
i32.load offset=40
local.set 12
local.get 11
i32.const -1
i32.add
local.set 11
end
end
local.get 8
if ;; label = @7
local.get 8
local.get 6
i32.store offset=40
else
local.get 6
local.set 5
end
local.get 6
local.get 8
i32.store offset=36
local.get 6
local.set 8
local.get 13
local.set 6
br 0 (;@6;)
end
end
end
end
loop ;; label = @3
local.get 4
local.set 5
loop ;; label = @4
local.get 5
i32.load offset=24
local.tee 6
local.get 5
i32.load offset=28
local.tee 11
i32.eq
br_if 3 (;@1;)
i32.const 16
local.get 5
i32.add
local.tee 9
f64.load
local.set 17
i32.const 16
local.get 6
i32.add
local.tee 13
f64.load
local.set 18
i32.const 8
local.get 11
i32.add
local.tee 8
f64.load
local.set 19
i32.const 8
local.get 5
i32.add
local.tee 2
f64.load
local.set 20
i32.const 8
local.get 6
i32.add
local.tee 12
f64.load
local.set 21
i32.const 16
local.get 11
i32.add
local.tee 14
f64.load
local.set 22
block ;; label = @5
local.get 0
i32.load8_u offset=16
if ;; label = @6
local.get 17
local.get 18
f64.sub
local.get 19
local.get 20
f64.sub
f64.mul
local.get 20
local.get 21
f64.sub
local.get 22
local.get 17
f64.sub
f64.mul
f64.sub
global.get 1
f64.ge
br_if 1 (;@5;)
local.get 0
f64.load offset=56
local.tee 24
local.get 14
local.get 9
local.get 22
local.get 17
f64.lt
select
local.tee 7
local.get 13
local.get 7
f64.load
local.get 18
f64.lt
select
f64.load
local.get 0
f64.load offset=40
local.tee 25
f64.sub
global.get 6
f64.mul
f64.mul
i32.trunc_f64_s
local.get 8
local.get 2
local.get 19
local.get 20
f64.lt
select
local.tee 10
local.get 12
local.get 10
f64.load
local.get 21
f64.lt
select
f64.load
local.get 0
f64.load offset=24
local.tee 23
f64.sub
global.get 6
f64.mul
local.get 24
f64.mul
i32.trunc_f64_s
local.get 14
local.get 9
local.get 17
local.get 22
f64.lt
select
local.set 9
local.set 14
local.tee 10
i32.const 8
i32.shl
local.get 10
i32.or
i32.const 16711935
i32.and
local.tee 10
i32.const 4
i32.shl
local.get 10
i32.or
i32.const 252645135
i32.and
local.tee 10
i32.const 2
i32.shl
local.get 10
i32.or
i32.const 858993459
i32.and
local.tee 10
i32.const 2
i32.shl
local.get 10
i32.const 1
i32.shl
i32.or
i32.const -1431655766
i32.and
local.get 14
i32.const 8
i32.shl
local.get 14
i32.or
i32.const 16711935
i32.and
local.tee 7
i32.const 4
i32.shl
local.get 7
i32.or
i32.const 252645135
i32.and
local.tee 7
i32.const 2
i32.shl
local.get 7
i32.or
i32.const 858993459
i32.and
local.tee 7
i32.const 1
i32.shl
local.get 7
i32.or
i32.const 1431655765
i32.and
i32.or
local.set 10
local.get 24
local.get 9
local.get 13
local.get 18
local.get 9
f64.load
f64.lt
select
f64.load
local.get 25
f64.sub
global.get 6
f64.mul
f64.mul
i32.trunc_f64_s
local.tee 13
i32.const 8
i32.shl
local.get 13
i32.or
i32.const 16711935
i32.and
local.tee 13
i32.const 4
i32.shl
local.get 13
i32.or
i32.const 252645135
i32.and
local.tee 13
i32.const 2
i32.shl
local.get 13
i32.or
i32.const 858993459
i32.and
local.tee 13
i32.const 2
i32.shl
local.get 13
i32.const 1
i32.shl
i32.or
i32.const -1431655766
i32.and
local.get 8
local.get 2
local.get 20
local.get 19
f64.lt
select
local.tee 8
local.get 12
local.get 21
local.get 8
f64.load
f64.lt
select
f64.load
local.get 23
f64.sub
global.get 6
f64.mul
local.get 24
f64.mul
i32.trunc_f64_s
local.tee 12
i32.const 8
i32.shl
local.get 12
i32.or
i32.const 16711935
i32.and
local.tee 12
i32.const 4
i32.shl
local.get 12
i32.or
i32.const 252645135
i32.and
local.tee 12
i32.const 2
i32.shl
local.get 12
i32.or
i32.const 858993459
i32.and
local.tee 12
i32.const 1
i32.shl
local.get 12
i32.or
i32.const 1431655765
i32.and
i32.or
local.set 12
local.get 5
i32.load offset=40
local.tee 13
if ;; label = @7
loop ;; label = @8
local.get 13
i32.load offset=32
local.get 12
i32.gt_s
br_if 1 (;@7;)
i32.const 1
local.get 13
local.get 11
i32.eq
local.get 13
local.get 6
i32.eq
select
i32.eqz
if ;; label = @9
local.get 21
local.get 13
f64.load offset=8
local.tee 23
f64.sub
local.set 27
local.get 22
local.get 13
f64.load offset=16
local.tee 24
f64.sub
local.set 28
local.get 19
local.get 23
f64.sub
local.set 25
local.get 18
local.get 24
f64.sub
local.tee 26
local.get 25
f64.mul
local.get 27
local.get 28
f64.mul
f64.sub
global.get 1
f64.ge
i32.eqz
br_if 0 (;@9;)
local.get 20
local.get 23
f64.sub
local.set 30
local.get 17
local.get 24
f64.sub
local.tee 29
local.get 27
f64.mul
local.get 30
local.get 26
f64.mul
f64.sub
global.get 1
f64.ge
i32.eqz
br_if 0 (;@9;)
local.get 30
local.get 28
f64.mul
local.get 25
local.get 29
f64.mul
f64.sub
global.get 1
f64.ge
i32.eqz
br_if 0 (;@9;)
local.get 13
i32.load offset=28
local.tee 9
local.get 13
i32.load offset=24
local.set 8
f64.load offset=8
local.get 23
f64.sub
local.get 24
local.get 8
f64.load offset=16
f64.sub
f64.mul
local.get 23
local.get 8
f64.load offset=8
f64.sub
local.get 9
f64.load offset=16
local.get 24
f64.sub
f64.mul
f64.sub
global.get 1
f64.ge
br_if 4 (;@5;)
end
local.get 13
i32.load offset=40
local.tee 13
br_if 0 (;@8;)
end
end
local.get 5
i32.load offset=36
local.tee 13
if ;; label = @7
loop ;; label = @8
local.get 13
i32.load offset=32
local.get 10
i32.lt_s
br_if 1 (;@7;)
i32.const 1
local.get 13
local.get 11
i32.eq
local.get 13
local.get 6
i32.eq
select
i32.eqz
if ;; label = @9
local.get 21
local.get 13
f64.load offset=8
local.tee 23
f64.sub
local.set 27
local.get 22
local.get 13
f64.load offset=16
local.tee 24
f64.sub
local.set 28
local.get 19
local.get 23
f64.sub
local.set 25
local.get 18
local.get 24
f64.sub
local.tee 26
local.get 25
f64.mul
local.get 27
local.get 28
f64.mul
f64.sub
global.get 1
f64.ge
i32.eqz
br_if 0 (;@9;)
local.get 20
local.get 23
f64.sub
local.set 30
local.get 17
local.get 24
f64.sub
local.tee 29
local.get 27
f64.mul
local.get 30
local.get 26
f64.mul
f64.sub
global.get 1
f64.ge
i32.eqz
br_if 0 (;@9;)
local.get 30
local.get 28
f64.mul
local.get 25
local.get 29
f64.mul
f64.sub
global.get 1
f64.ge
i32.eqz
br_if 0 (;@9;)
local.get 13
i32.load offset=28
local.tee 8
local.get 13
i32.load offset=24
local.set 12
f64.load offset=8
local.get 23
f64.sub
local.get 24
local.get 12
f64.load offset=16
f64.sub
f64.mul
local.get 23
local.get 12
f64.load offset=8
f64.sub
local.get 8
f64.load offset=16
local.get 24
f64.sub
f64.mul
f64.sub
global.get 1
f64.ge
br_if 4 (;@5;)
end
local.get 13
i32.load offset=36
local.tee 13
br_if 0 (;@8;)
end
end
else
local.get 17
local.get 18
f64.sub
local.get 19
local.get 20
f64.sub
f64.mul
local.get 20
local.get 21
f64.sub
local.get 22
local.get 17
f64.sub
f64.mul
f64.sub
global.get 1
f64.ge
br_if 1 (;@5;)
local.get 11
i32.load offset=28
local.tee 10
local.get 6
i32.eq
br_if 0 (;@6;)
loop ;; label = @7
local.get 21
local.get 10
f64.load offset=8
local.tee 23
f64.sub
local.set 27
local.get 22
local.get 10
f64.load offset=16
local.tee 24
f64.sub
local.set 28
local.get 19
local.get 23
f64.sub
local.set 25
local.get 18
local.get 24
f64.sub
local.tee 26
local.get 25
f64.mul
local.get 27
local.get 28
f64.mul
f64.sub
global.get 1
f64.ge
if ;; label = @8
local.get 20
local.get 23
f64.sub
local.set 30
local.get 17
local.get 24
f64.sub
local.tee 29
local.get 27
f64.mul
local.get 30
local.get 26
f64.mul
f64.sub
global.get 1
f64.ge
i32.eqz
br_if 0 (;@8;)
local.get 30
local.get 28
f64.mul
local.get 25
local.get 29
f64.mul
f64.sub
global.get 1
f64.ge
i32.eqz
br_if 0 (;@8;)
local.get 10
i32.load offset=28
local.tee 12
local.get 10
i32.load offset=24
local.set 13
f64.load offset=8
local.get 23
f64.sub
local.get 24
local.get 13
f64.load offset=16
f64.sub
f64.mul
local.get 23
local.get 13
f64.load offset=8
f64.sub
local.get 12
f64.load offset=16
local.get 24
f64.sub
f64.mul
f64.sub
global.get 1
f64.ge
br_if 3 (;@5;)
end
local.get 10
i32.load offset=28
local.tee 10
local.get 6
i32.ne
br_if 0 (;@7;)
end
end
local.get 0
i32.load offset=4
local.tee 4
local.get 0
i32.load offset=8
i32.lt_u
if ;; label = @6
local.get 4
local.get 6
i32.load
i32.store
local.get 0
i32.const 4
local.get 4
i32.add
i32.store offset=4
else
local.get 0
local.get 6
call 6
end
local.get 0
i32.load offset=4
local.tee 6
local.get 0
i32.load offset=8
i32.lt_u
if ;; label = @6
local.get 6
local.get 5
i32.load
i32.store
local.get 0
i32.const 4
local.get 6
i32.add
i32.store offset=4
else
local.get 0
local.get 5
call 6
end
local.get 0
i32.load offset=4
local.tee 6
local.get 0
i32.load offset=8
i32.lt_u
if ;; label = @6
local.get 6
local.get 11
i32.load
i32.store
local.get 0
i32.const 4
local.get 6
i32.add
i32.store offset=4
else
local.get 0
local.get 11
call 6
end
local.get 5
i32.load offset=28
local.tee 6
local.get 5
i32.load offset=24
i32.store offset=24
local.get 5
i32.load offset=24
local.get 6
i32.store offset=28
local.get 5
i32.load offset=36
local.tee 6
if ;; label = @6
local.get 6
local.get 5
i32.load offset=40
i32.store offset=40
end
local.get 5
i32.load offset=40
local.tee 5
if ;; label = @6
local.get 5
local.get 6
i32.store offset=36
end
local.get 11
i32.load offset=28
local.set 4
br 2 (;@3;)
end
local.get 11
local.get 4
i32.eq
if ;; label = @5
local.get 3
i32.const 2
i32.lt_u
if ;; label = @6
local.get 3
i32.eqz
if ;; label = @7
local.get 4
local.set 3
loop ;; label = @8
block ;; label = @9
local.get 4
i32.load8_u offset=44
i32.eqz
if ;; label = @10
local.get 4
f64.load offset=8
local.set 17
local.get 4
i32.load offset=28
local.tee 11
f64.load offset=8
local.set 18
block ;; label = @11
local.get 17
local.get 18
f64.eq
if ;; label = @12
local.get 4
f64.load offset=16
local.get 11
f64.load offset=16
f64.eq
br_if 1 (;@11;)
end
local.get 4
f64.load offset=16
local.tee 19
local.get 4
i32.load offset=24
local.tee 5
f64.load offset=16
f64.sub
local.get 18
local.get 17
f64.sub
f64.mul
local.get 17
local.get 5
f64.load offset=8
f64.sub
local.get 11
f64.load offset=16
local.get 19
f64.sub
f64.mul
f64.sub
global.get 1
f64.eq
i32.eqz
br_if 1 (;@10;)
end
local.get 11
local.get 4
i32.load offset=24
i32.store offset=24
local.get 4
i32.load offset=24
local.tee 3
local.get 11
i32.store offset=28
local.get 4
i32.load offset=36
local.tee 5
if ;; label = @11
local.get 5
local.get 4
i32.load offset=40
i32.store offset=40
end
local.get 4
i32.load offset=40
local.tee 6
if ;; label = @11
local.get 6
local.get 5
i32.store offset=36
end
local.get 3
local.get 11
i32.eq
if ;; label = @11
i32.const 1
local.set 3
br 4 (;@7;)
end
local.get 3
local.set 4
i32.const 1
local.set 5
br 1 (;@9;)
end
local.get 4
i32.load offset=28
local.set 4
i32.const 0
local.set 5
end
i32.const 1
local.get 4
local.get 3
i32.ne
local.get 5
select
br_if 0 (;@8;)
end
local.get 3
local.set 11
i32.const 1
local.set 3
else
local.get 4
local.set 3
block ;; label = @8
loop ;; label = @9
block ;; label = @10
local.get 3
i32.load8_u offset=44
i32.eqz
if ;; label = @11
local.get 3
f64.load offset=8
local.set 17
local.get 3
i32.load offset=28
local.tee 11
f64.load offset=8
local.set 18
block ;; label = @12
local.get 17
local.get 18
f64.eq
if ;; label = @13
local.get 3
f64.load offset=16
local.get 11
f64.load offset=16
f64.eq
br_if 1 (;@12;)
end
local.get 3
f64.load offset=16
local.tee 19
local.get 3
i32.load offset=24
local.tee 5
f64.load offset=16
f64.sub
local.get 18
local.get 17
f64.sub
f64.mul
local.get 17
local.get 5
f64.load offset=8
f64.sub
local.get 11
f64.load offset=16
local.get 19
f64.sub
f64.mul
f64.sub
global.get 1
f64.eq
i32.eqz
br_if 1 (;@11;)
end
local.get 11
local.get 3
i32.load offset=24
i32.store offset=24
local.get 3
i32.load offset=24
local.tee 4
local.get 11
i32.store offset=28
local.get 3
i32.load offset=36
local.tee 5
if ;; label = @12
local.get 5
local.get 3
i32.load offset=40
i32.store offset=40
end
local.get 3
i32.load offset=40
local.tee 6
if ;; label = @12
local.get 6
local.get 5
i32.store offset=36
end
local.get 4
local.get 11
i32.eq
if ;; label = @12
local.get 11
local.set 4
br 4 (;@8;)
end
local.get 4
local.set 3
i32.const 1
local.set 5
br 1 (;@10;)
end
local.get 3
i32.load offset=28
local.set 3
i32.const 0
local.set 5
end
i32.const 1
local.get 3
local.get 4
i32.ne
local.get 5
select
br_if 0 (;@9;)
end
end
local.get 4
local.set 3
loop ;; label = @8
local.get 4
i32.load offset=24
local.tee 5
f64.load offset=8
local.set 17
local.get 4
i32.load offset=28
local.tee 6
i32.load offset=28
local.tee 11
f64.load offset=8
local.set 18
block ;; label = @9
local.get 17
local.get 18
f64.eq
if ;; label = @10
local.get 5
f64.load offset=16
local.get 11
f64.load offset=16
f64.eq
br_if 1 (;@9;)
end
local.get 5
local.get 4
local.get 6
local.get 11
call 11
i32.eqz
br_if 0 (;@9;)
local.get 11
f64.load offset=16
local.tee 27
local.get 5
f64.load offset=16
local.tee 19
f64.sub
local.set 26
local.get 5
i32.load offset=28
local.tee 10
f64.load offset=16
local.tee 24
local.get 19
f64.sub
local.set 25
local.get 5
i32.load offset=24
local.tee 6
f64.load offset=8
local.set 23
local.get 10
f64.load offset=8
local.tee 21
local.get 17
f64.sub
local.tee 22
local.get 6
f64.load offset=16
local.set 20
local.get 19
local.get 20
f64.sub
f64.mul
local.get 17
local.get 23
f64.sub
local.get 25
f64.mul
f64.sub
global.get 1
f64.lt
if ;; label = @10
local.get 21
local.get 18
f64.sub
local.get 26
f64.mul
local.get 18
local.get 17
f64.sub
local.get 24
local.get 27
f64.sub
f64.mul
f64.sub
global.get 1
f64.ge
i32.eqz
br_if 1 (;@9;)
local.get 20
local.get 19
f64.sub
local.get 18
local.get 23
f64.sub
f64.mul
local.get 23
local.get 17
f64.sub
local.get 27
local.get 20
f64.sub
f64.mul
f64.sub
global.get 1
f64.ge
i32.eqz
br_if 1 (;@9;)
else
local.get 23
local.get 18
f64.sub
local.get 26
f64.mul
local.get 18
local.get 17
f64.sub
local.get 20
local.get 27
f64.sub
f64.mul
f64.sub
global.get 1
f64.lt
br_if 0 (;@10;)
local.get 18
local.get 21
f64.sub
local.get 25
f64.mul
local.get 22
local.get 27
local.get 24
f64.sub
f64.mul
f64.sub
global.get 1
f64.lt
i32.eqz
br_if 1 (;@9;)
end
local.get 19
local.get 27
f64.sub
local.set 26
local.get 11
i32.load offset=28
local.tee 10
f64.load offset=16
local.tee 24
local.get 27
f64.sub
local.set 25
local.get 11
i32.load offset=24
local.tee 6
f64.load offset=8
local.set 23
local.get 10
f64.load offset=8
local.tee 21
local.get 18
f64.sub
local.tee 22
local.get 6
f64.load offset=16
local.set 20
local.get 27
local.get 20
f64.sub
f64.mul
local.get 18
local.get 23
f64.sub
local.get 25
f64.mul
f64.sub
global.get 1
f64.lt
if ;; label = @10
local.get 26
local.get 21
local.get 17
f64.sub
f64.mul
local.get 17
local.get 18
f64.sub
local.get 24
local.get 19
f64.sub
f64.mul
f64.sub
global.get 1
f64.ge
i32.eqz
br_if 1 (;@9;)
local.get 20
local.get 27
f64.sub
local.get 17
local.get 23
f64.sub
f64.mul
local.get 19
local.get 20
f64.sub
local.get 23
local.get 18
f64.sub
f64.mul
f64.sub
global.get 1
f64.ge
i32.eqz
br_if 1 (;@9;)
else
local.get 26
local.get 23
local.get 17
f64.sub
f64.mul
local.get 17
local.get 18
f64.sub
local.get 20
local.get 19
f64.sub
f64.mul
f64.sub
global.get 1
f64.lt
br_if 0 (;@10;)
local.get 17
local.get 21
f64.sub
local.get 25
f64.mul
local.get 22
local.get 19
local.get 24
f64.sub
f64.mul
f64.sub
global.get 1
f64.lt
i32.eqz
br_if 1 (;@9;)
end
local.get 0
i32.load offset=4
local.tee 3
local.get 0
i32.load offset=8
i32.lt_u
if ;; label = @10
local.get 3
local.get 5
i32.load
i32.store
local.get 0
i32.const 4
local.get 3
i32.add
i32.store offset=4
else
local.get 0
local.get 5
call 6
end
local.get 0
i32.load offset=4
local.tee 3
local.get 0
i32.load offset=8
i32.lt_u
if ;; label = @10
local.get 3
local.get 4
i32.load
i32.store
local.get 0
i32.const 4
local.get 3
i32.add
i32.store offset=4
else
local.get 0
local.get 4
call 6
end
local.get 0
i32.load offset=4
local.tee 3
local.get 0
i32.load offset=8
i32.lt_u
if ;; label = @10
local.get 3
local.get 11
i32.load
i32.store
local.get 0
i32.const 4
local.get 3
i32.add
i32.store offset=4
else
local.get 0
local.get 11
call 6
end
local.get 4
i32.load offset=28
local.tee 3
local.get 4
i32.load offset=24
i32.store offset=24
local.get 4
i32.load offset=24
local.get 3
i32.store offset=28
local.get 4
i32.load offset=36
local.tee 3
if ;; label = @10
local.get 3
local.get 4
i32.load offset=40
i32.store offset=40
end
local.get 4
i32.load offset=40
local.tee 5
if ;; label = @10
local.get 5
local.get 3
i32.store offset=36
end
local.get 4
i32.load offset=28
local.tee 3
i32.load offset=28
local.tee 4
local.get 3
i32.load offset=24
i32.store offset=24
local.get 3
i32.load offset=24
local.get 4
i32.store offset=28
local.get 3
i32.load offset=36
local.tee 4
if ;; label = @10
local.get 4
local.get 3
i32.load offset=40
i32.store offset=40
end
local.get 3
i32.load offset=40
local.tee 3
if ;; label = @10
local.get 3
local.get 4
i32.store offset=36
local.get 11
local.tee 3
local.set 4
else
local.get 11
local.tee 3
local.set 4
end
end
local.get 4
i32.load offset=28
local.tee 4
local.get 3
i32.ne
br_if 0 (;@8;)
end
local.get 3
local.set 6
loop ;; label = @8
block ;; label = @9
local.get 6
i32.load8_u offset=44
i32.eqz
if ;; label = @10
local.get 6
f64.load offset=8
local.set 17
local.get 6
i32.load offset=28
local.tee 11
f64.load offset=8
local.set 18
block ;; label = @11
local.get 17
local.get 18
f64.eq
if ;; label = @12
local.get 6
f64.load offset=16
local.get 11
f64.load offset=16
f64.eq
br_if 1 (;@11;)
end
local.get 6
f64.load offset=16
local.tee 19
local.get 6
i32.load offset=24
local.tee 5
f64.load offset=16
f64.sub
local.get 18
local.get 17
f64.sub
f64.mul
local.get 17
local.get 5
f64.load offset=8
f64.sub
local.get 11
f64.load offset=16
local.get 19
f64.sub
f64.mul
f64.sub
global.get 1
f64.eq
i32.eqz
br_if 1 (;@10;)
end
local.get 11
local.get 6
i32.load offset=24
i32.store offset=24
local.get 6
i32.load offset=24
local.tee 4
local.get 11
i32.store offset=28
local.get 6
i32.load offset=36
local.tee 5
if ;; label = @11
local.get 5
local.get 6
i32.load offset=40
i32.store offset=40
end
local.get 6
i32.load offset=40
local.tee 6
if ;; label = @11
local.get 6
local.get 5
i32.store offset=36
end
local.get 4
local.get 11
i32.eq
if ;; label = @11
i32.const 2
local.set 3
br 4 (;@7;)
end
local.get 4
local.set 3
i32.const 1
local.set 5
br 1 (;@9;)
end
local.get 6
i32.load offset=28
local.set 4
i32.const 0
local.set 5
end
i32.const 1
local.get 4
local.get 3
i32.ne
local.get 5
select
if ;; label = @9
local.get 4
local.set 6
br 1 (;@8;)
end
end
local.get 3
local.set 11
i32.const 2
local.set 3
end
local.get 11
i32.eqz
br_if 5 (;@1;)
local.get 11
local.set 4
else
local.get 4
local.set 5
loop ;; label = @7
local.get 5
i32.load offset=28
local.tee 11
i32.load offset=28
local.tee 6
local.get 5
i32.load offset=24
local.tee 10
i32.ne
if ;; label = @8
local.get 5
i32.load
local.set 13
loop ;; label = @9
local.get 6
i32.load
local.set 12
local.get 13
local.get 12
i32.ne
if ;; label = @10
local.get 11
i32.load
local.get 12
i32.eq
br_if 0 (;@10;)
local.get 10
i32.load
local.get 12
i32.eq
br_if 0 (;@10;)
local.get 5
local.set 3
loop ;; label = @11
local.get 3
i32.load
local.tee 8
local.get 13
i32.ne
if ;; label = @12
local.get 3
i32.load offset=28
local.tee 9
i32.load
local.tee 7
local.get 13
i32.eq
br_if 0 (;@12;)
i32.const 1
local.get 7
local.get 12
i32.eq
local.get 8
local.get 12
i32.eq
select
br_if 0 (;@12;)
local.get 3
local.get 9
local.get 5
local.get 6
call 11
br_if 2 (;@10;)
end
local.get 3
i32.load offset=28
local.tee 3
local.get 5
i32.ne
br_if 0 (;@11;)
end
local.get 6
f64.load offset=16
local.tee 15
local.get 5
f64.load offset=16
local.tee 17
f64.sub
local.set 24
local.get 6
f64.load offset=8
local.set 16
local.get 17
local.get 10
f64.load offset=16
local.tee 18
f64.sub
local.tee 27
local.get 11
f64.load offset=8
local.tee 19
local.get 5
f64.load offset=8
local.tee 28
f64.sub
local.tee 20
f64.mul
local.get 28
local.get 10
f64.load offset=8
local.tee 21
f64.sub
local.tee 29
local.get 11
f64.load offset=16
local.tee 22
local.get 17
f64.sub
local.tee 23
f64.mul
f64.sub
local.set 30
block ;; label = @11
block ;; label = @12
local.get 30
global.get 1
f64.lt
if ;; label = @13
local.get 24
local.get 19
local.get 16
f64.sub
f64.mul
local.get 22
local.get 15
f64.sub
local.get 16
local.get 28
f64.sub
f64.mul
f64.sub
global.get 1
f64.ge
i32.eqz
br_if 1 (;@12;)
local.get 18
local.get 17
f64.sub
local.get 16
local.get 21
f64.sub
f64.mul
local.get 21
local.get 28
f64.sub
local.get 15
local.get 18
f64.sub
f64.mul
f64.sub
global.get 1
f64.ge
i32.eqz
br_if 1 (;@12;)
else
local.get 24
local.get 21
local.get 16
f64.sub
f64.mul
local.get 18
local.get 15
f64.sub
local.get 16
local.get 28
f64.sub
f64.mul
f64.sub
global.get 1
f64.lt
br_if 0 (;@13;)
local.get 23
local.get 16
local.get 19
f64.sub
f64.mul
local.get 20
local.get 15
local.get 22
f64.sub
f64.mul
f64.sub
global.get 1
f64.lt
i32.eqz
br_if 1 (;@12;)
end
local.get 17
local.get 15
f64.sub
local.set 24
local.get 16
local.get 6
i32.load offset=24
local.tee 3
f64.load offset=8
local.tee 21
f64.sub
local.set 26
local.get 6
i32.load offset=28
local.tee 12
f64.load offset=16
local.tee 22
local.get 15
f64.sub
local.set 23
local.get 15
local.get 3
f64.load offset=16
local.tee 18
f64.sub
local.set 25
local.get 12
f64.load offset=8
local.tee 19
local.get 16
f64.sub
local.tee 20
local.get 25
f64.mul
local.get 26
local.get 23
f64.mul
f64.sub
global.get 1
f64.lt
if ;; label = @13
local.get 24
local.get 19
local.get 28
f64.sub
f64.mul
local.get 28
local.get 16
f64.sub
local.get 22
local.get 17
f64.sub
f64.mul
f64.sub
global.get 1
f64.ge
i32.eqz
br_if 1 (;@12;)
local.get 18
local.get 15
f64.sub
local.get 28
local.get 21
f64.sub
f64.mul
local.get 17
local.get 18
f64.sub
local.get 21
local.get 16
f64.sub
f64.mul
f64.sub
global.get 1
f64.ge
i32.eqz
br_if 1 (;@12;)
else
local.get 24
local.get 21
local.get 28
f64.sub
f64.mul
local.get 28
local.get 16
f64.sub
local.get 18
local.get 17
f64.sub
f64.mul
f64.sub
global.get 1
f64.lt
br_if 0 (;@13;)
local.get 28
local.get 19
f64.sub
local.get 23
f64.mul
local.get 20
local.get 17
local.get 22
f64.sub
f64.mul
f64.sub
global.get 1
f64.lt
i32.eqz
br_if 1 (;@12;)
end
local.get 28
local.get 16
f64.add
global.get 11
f64.mul
local.set 19
local.get 17
local.get 15
f64.add
global.get 11
f64.mul
local.set 20
local.get 5
local.set 12
i32.const 0
local.set 3
loop ;; label = @13
local.get 12
f64.load offset=16
local.tee 22
local.get 20
f64.gt
local.get 12
i32.load offset=28
local.tee 8
f64.load offset=16
local.tee 23
local.get 20
f64.gt
i32.xor
local.set 9
local.get 23
local.get 22
f64.eq
i32.eqz
if ;; label = @14
local.get 9
i32.eqz
br_if 0 (;@14;)
local.get 12
f64.load offset=8
local.set 24
local.get 19
local.get 24
local.get 20
local.get 22
f64.sub
local.get 8
f64.load offset=8
local.get 24
f64.sub
f64.mul
local.get 23
local.get 22
f64.sub
f64.div
f64.add
f64.lt
i32.eqz
br_if 0 (;@14;)
local.get 3
i32.const 1
i32.and
i32.const 1
i32.xor
local.set 3
end
local.get 8
local.get 5
i32.ne
if ;; label = @14
local.get 8
local.set 12
br 1 (;@13;)
end
end
local.get 3
i32.const 1
i32.and
i32.eqz
br_if 0 (;@12;)
local.get 18
local.get 17
f64.sub
local.set 18
local.get 21
local.get 28
f64.sub
local.tee 19
local.get 27
f64.mul
local.get 29
local.get 18
f64.mul
f64.sub
global.get 1
f64.eq
i32.eqz
br_if 1 (;@11;)
local.get 18
local.get 26
f64.mul
local.get 25
local.get 19
f64.mul
f64.sub
global.get 1
f64.eq
i32.eqz
br_if 1 (;@11;)
end
local.get 28
local.get 16
f64.eq
i32.eqz
br_if 1 (;@10;)
local.get 30
global.get 1
f64.gt
i32.const 0
local.get 17
local.get 15
f64.eq
select
i32.eqz
br_if 1 (;@10;)
local.get 6
i32.load offset=28
local.tee 12
local.get 6
i32.load offset=24
local.set 3
f64.load offset=8
local.get 16
f64.sub
local.get 15
local.get 3
f64.load offset=16
f64.sub
f64.mul
local.get 16
local.get 3
f64.load offset=8
f64.sub
local.get 12
f64.load offset=16
local.get 15
f64.sub
f64.mul
f64.sub
global.get 1
f64.gt
i32.eqz
br_if 1 (;@10;)
end
local.get 0
local.get 5
local.get 6
call 15
local.tee 6
local.get 5
i32.load offset=28
local.tee 3
local.get 5
local.get 3
select
local.set 3
block ;; label = @11
loop ;; label = @12
block ;; label = @13
local.get 5
i32.load8_u offset=44
i32.eqz
if ;; label = @14
local.get 5
f64.load offset=8
local.set 17
local.get 5
i32.load offset=28
local.tee 4
f64.load offset=8
local.set 18
block ;; label = @15
local.get 17
local.get 18
f64.eq
if ;; label = @16
local.get 5
f64.load offset=16
local.get 4
f64.load offset=16
f64.eq
br_if 1 (;@15;)
end
local.get 5
f64.load offset=16
local.tee 19
local.get 5
i32.load offset=24
local.tee 11
f64.load offset=16
f64.sub
local.get 18
local.get 17
f64.sub
f64.mul
local.get 17
local.get 11
f64.load offset=8
f64.sub
local.get 4
f64.load offset=16
local.get 19
f64.sub
f64.mul
f64.sub
global.get 1
f64.eq
i32.eqz
br_if 1 (;@14;)
end
local.get 4
local.get 5
i32.load offset=24
i32.store offset=24
local.get 5
i32.load offset=24
local.tee 11
local.get 4
i32.store offset=28
local.get 5
i32.load offset=36
local.tee 3
if ;; label = @15
local.get 3
local.get 5
i32.load offset=40
i32.store offset=40
end
local.get 5
i32.load offset=40
local.tee 5
if ;; label = @15
local.get 5
local.get 3
i32.store offset=36
end
local.get 11
local.get 4
i32.eq
if ;; label = @15
local.get 4
local.set 3
br 4 (;@11;)
end
local.get 11
local.set 3
i32.const 1
local.set 5
br 1 (;@13;)
end
local.get 5
i32.load offset=28
local.set 11
i32.const 0
local.set 5
end
i32.const 1
local.get 11
local.get 3
i32.ne
local.get 5
select
i32.eqz
br_if 1 (;@11;)
local.get 11
local.set 5
br 0 (;@12;)
end
end
i32.load offset=28
local.tee 5
local.get 6
local.get 5
select
local.set 11
block ;; label = @11
loop ;; label = @12
block ;; label = @13
local.get 6
i32.load8_u offset=44
i32.eqz
if ;; label = @14
local.get 6
f64.load offset=8
local.set 17
local.get 6
i32.load offset=28
local.tee 4
f64.load offset=8
local.set 18
block ;; label = @15
local.get 17
local.get 18
f64.eq
if ;; label = @16
local.get 6
f64.load offset=16
local.get 4
f64.load offset=16
f64.eq
br_if 1 (;@15;)
end
local.get 6
f64.load offset=16
local.tee 19
local.get 6
i32.load offset=24
local.tee 5
f64.load offset=16
f64.sub
local.get 18
local.get 17
f64.sub
f64.mul
local.get 17
local.get 5
f64.load offset=8
f64.sub
local.get 4
f64.load offset=16
local.get 19
f64.sub
f64.mul
f64.sub
global.get 1
f64.eq
i32.eqz
br_if 1 (;@14;)
end
local.get 4
local.get 6
i32.load offset=24
i32.store offset=24
local.get 6
i32.load offset=24
local.tee 11
local.get 4
i32.store offset=28
local.get 6
i32.load offset=36
local.tee 5
if ;; label = @15
local.get 5
local.get 6
i32.load offset=40
i32.store offset=40
end
local.get 6
i32.load offset=40
local.tee 6
if ;; label = @15
local.get 6
local.get 5
i32.store offset=36
end
local.get 11
local.get 4
i32.eq
br_if 3 (;@11;)
local.get 11
local.set 6
i32.const 1
local.set 5
br 1 (;@13;)
end
local.get 6
i32.load offset=28
local.set 6
i32.const 0
local.set 5
end
i32.const 1
local.get 6
local.get 11
i32.ne
local.get 5
select
br_if 0 (;@12;)
end
local.get 11
local.set 4
end
local.get 0
local.get 3
call 16
local.get 4
i32.eqz
br_if 9 (;@1;)
i32.const 0
local.set 3
br 8 (;@2;)
end
local.get 6
i32.load offset=28
local.tee 6
local.get 10
i32.ne
br_if 0 (;@9;)
end
end
local.get 11
local.get 4
i32.eq
br_if 6 (;@1;)
local.get 11
local.set 5
br 0 (;@7;)
end
end
br 3 (;@2;)
end
local.get 11
local.set 5
br 0 (;@4;)
end
end
end
end)
(func (;17;) (type 3) (param i32 i32)
(local i32 i32 i32 i32 i32)
local.get 0
i32.load offset=4
local.tee 3
local.get 0
i32.load offset=8
local.tee 4
i32.lt_u
if ;; label = @1
local.get 3
local.get 1
i64.load align=4
i64.store align=4
local.get 0
i32.const 8
local.get 3
i32.add
i32.store offset=4
else
local.get 3
local.get 0
i32.load
local.tee 5
i32.sub
i32.const 3
i32.shr_s
local.tee 3
i32.const 1
i32.add
local.tee 6
i32.const 536870911
i32.gt_u
if ;; label = @2
call 0
unreachable
end
local.get 4
local.get 5
i32.sub
local.set 4
block ;; label = @2
local.get 4
i32.const 3
i32.shr_s
i32.const 268435455
i32.lt_u
if ;; label = @3
local.get 6
local.get 4
i32.const 2
i32.shr_s
local.tee 4
local.get 4
local.get 6
i32.lt_u
select
local.tee 6
i32.eqz
if ;; label = @4
i32.const 0
i32.const 0
local.set 4
local.set 6
br 2 (;@2;)
end
local.get 6
i32.const 536870911
i32.gt_u
if ;; label = @4
call 5
unreachable
end
else
i32.const 536870911
local.set 6
end
local.get 6
i32.const 3
i32.shl
call 4
local.set 4
end
local.get 6
i32.const 3
i32.shl
local.get 4
i32.add
local.set 6
local.get 3
i32.const 3
i32.shl
local.get 4
i32.add
local.tee 3
local.get 1
i64.load align=4
i64.store align=4
i32.const 0
local.get 0
i32.load offset=4
local.get 0
i32.load
local.tee 4
i32.sub
local.tee 2
i32.const 3
i32.shr_s
i32.const 3
i32.shl
i32.sub
local.get 3
i32.add
local.set 5
local.get 2
i32.const 0
i32.gt_s
if ;; label = @2
local.get 5
local.get 4
local.get 2
call 28
drop
end
local.get 0
i32.load
local.tee 4
local.get 0
local.get 5
i32.store
local.get 0
i32.const 8
local.get 3
i32.add
i32.store offset=4
local.get 0
local.get 6
i32.store offset=8
i32.eqz
br_if 0 (;@1;)
local.get 4
call 3
end)
(func (;18;) (type 2) (param i32)
local.get 0
global.set 0)
(func (;19;) (type 8) (result i32)
(local i32)
global.get 0)
(func (;20;) (type 2) (param i32)
local.get 0
i64.const 0
i64.store align=4
local.get 0
i32.const 0
i32.store offset=8)
(func (;21;) (type 2) (param i32)
(local i32 i32 i32 i32 i32 i32)
i32.const 0
i32.load offset=1049620
local.tee 2
local.tee 5
i32.const 0
i32.load offset=1049616
local.tee 3
local.tee 4
i32.sub
i32.const 4
i32.shr_s
local.tee 6
local.get 0
i32.lt_u
if ;; label = @1
local.get 0
local.get 6
i32.sub
local.set 3
i32.const 0
i32.load offset=1049624
local.tee 1
local.get 5
i32.sub
i32.const 4
i32.shr_s
local.get 3
i32.lt_u
if ;; label = @2
local.get 0
i32.const 268435455
i32.gt_u
if ;; label = @3
call 0
unreachable
end
local.get 1
local.get 4
i32.sub
local.set 3
block ;; label = @3
local.get 3
i32.const 4
i32.shr_s
i32.const 134217727
i32.lt_u
if ;; label = @4
local.get 3
i32.const 3
i32.shr_s
local.tee 2
local.get 0
i32.lt_u
if ;; label = @5
local.get 0
local.set 2
else
local.get 3
i32.eqz
if ;; label = @6
i32.const 0
i32.const 0
local.set 3
local.set 2
br 3 (;@3;)
end
local.get 2
i32.const 268435455
i32.le_u
br_if 0 (;@5;)
call 5
unreachable
end
else
i32.const 268435455
local.set 2
end
local.get 2
i32.const 4
i32.shl
call 4
local.set 3
end
local.get 6
i32.const 4
i32.shl
local.get 3
i32.add
local.tee 6
local.get 0
i32.const 4
i32.shl
local.get 3
i32.add
local.set 4
local.set 5
loop ;; label = @3
local.get 5
i64.const 0
i64.store
local.get 5
i64.const 0
i64.store offset=8
i32.const 16
local.get 5
i32.add
local.tee 5
local.get 4
i32.ne
br_if 0 (;@3;)
end
local.get 2
i32.const 4
i32.shl
local.get 3
i32.add
local.set 2
i32.const 0
i32.const 0
i32.load offset=1049620
i32.const 0
i32.load offset=1049616
local.tee 3
i32.sub
local.tee 5
i32.const 4
i32.shr_s
i32.const 4
i32.shl
i32.sub
local.get 6
i32.add
local.set 6
local.get 5
i32.const 0
i32.gt_s
if ;; label = @3
local.get 6
local.get 3
local.get 5
call 28
drop
end
i32.const 0
i32.load offset=1049616
local.tee 3
i32.const 0
local.get 6
i32.store offset=1049616
i32.const 0
local.get 4
i32.store offset=1049620
i32.const 0
local.get 2
i32.store offset=1049624
if ;; label = @3
local.get 3
call 3
end
else
local.get 3
i32.const 4
i32.shl
local.get 2
i32.add
local.set 4
local.get 3
if ;; label = @3
loop ;; label = @4
local.get 2
i64.const 0
i64.store
local.get 2
i64.const 0
i64.store offset=8
i32.const 16
local.get 2
i32.add
local.tee 2
local.get 4
i32.ne
br_if 0 (;@4;)
end
else
local.get 2
local.set 4
end
i32.const 0
local.get 4
i32.store offset=1049620
end
else
local.get 6
local.get 0
i32.le_u
br_if 0 (;@1;)
i32.const 0
local.get 0
i32.const 4
i32.shl
local.get 3
i32.add
i32.store offset=1049620
end)
(func (;22;) (type 0)
i32.const 0
i32.const 0
i32.store offset=1049616
i32.const 0
i32.const 0
i32.store offset=1049620
i32.const 0
i32.const 0
i32.store offset=1049624)
(func (;23;) (type 3) (param i32 i32)
(local i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 f64 f64 f64 f64 f64 f64 f64 f64 f64 f64 f64 f64 f64 f64 f64 f64 f64 f64)
global.get 0
local.tee 2
i32.const -96
local.get 2
i32.add
local.tee 4
global.set 0
local.get 4
local.tee 3
i64.const 0
i64.store offset=56
local.get 3
i64.const 0
i64.store align=4
local.get 3
i64.const 0
i64.store offset=8 align=4
local.get 3
i64.const 4294967296
i64.store offset=64 align=4
local.get 3
i64.const 1
i64.store offset=72 align=4
local.get 3
i64.const 0
i64.store offset=80 align=4
local.get 1
i32.load
local.tee 5
local.get 1
i32.load offset=4
local.tee 4
i32.ne
if ;; label = @1
local.get 4
local.get 5
i32.sub
i32.const 3
i32.shr_s
local.set 4
i32.const 80
i32.const 0
local.tee 7
local.set 8
local.set 6
loop ;; label = @2
local.get 8
local.get 4
i32.ne
if ;; label = @3
local.get 8
i32.const 3
i32.shl
local.get 5
i32.add
local.tee 9
i32.load offset=4
local.tee 11
local.get 7
i32.add
local.get 9
i32.load
local.tee 9
i32.sub
local.set 7
local.get 9
local.get 6
local.get 11
i32.sub
i32.add
local.tee 6
i32.const -1
i32.le_s
br_if 0 (;@3;)
local.get 8
i32.const 1
i32.add
local.set 8
br 1 (;@2;)
end
end
local.get 3
i32.load offset=76
local.tee 4
local.get 3
i32.load offset=80
local.tee 5
i32.ne
if ;; label = @2
loop ;; label = @3
local.get 4
i32.load
call 3
i32.const 4
local.get 4
i32.add
local.tee 4
local.get 5
i32.ne
br_if 0 (;@3;)
end
end
local.get 3
local.get 3
i32.load offset=76
i32.store offset=80
local.get 3
local.get 7
i32.const 3
i32.mul
i32.const 1
i32.shr_u
local.tee 4
i32.const 1
local.get 4
i32.const 1
i32.gt_u
select
local.tee 4
i32.store offset=72
local.get 3
i32.const 0
i32.store offset=64
local.get 3
local.get 4
i32.store offset=68
local.get 1
i32.load
local.tee 4
i32.load offset=4
local.get 4
i32.load
i32.sub
local.get 7
i32.add
local.set 5
local.get 3
i32.load
local.set 7
local.get 3
i32.load offset=8
local.get 7
i32.sub
i32.const 2
i32.shr_s
local.get 5
i32.lt_u
if ;; label = @2
local.get 5
i32.const 1073741823
i32.gt_u
if ;; label = @3
call 5
unreachable
end
local.get 5
i32.const 2
i32.shl
local.get 3
i32.load offset=4
local.set 4
local.get 5
i32.const 2
i32.shl
call 4
local.tee 9
i32.add
local.get 4
local.get 7
i32.sub
i32.const 2
i32.shr_s
i32.const 2
i32.shl
local.get 9
i32.add
local.set 7
local.set 4
i32.const 0
local.get 3
i32.load offset=4
local.get 3
i32.load
local.tee 5
i32.sub
local.tee 9
i32.const 2
i32.shr_s
i32.const 2
i32.shl
i32.sub
local.get 7
i32.add
local.set 8
local.get 9
i32.const 0
i32.gt_s
if ;; label = @3
local.get 8
local.get 5
local.get 9
call 28
drop
end
local.get 3
i32.load
local.tee 9
local.get 3
local.get 8
i32.store
local.get 3
local.get 7
i32.store offset=4
local.get 3
local.get 4
i32.store offset=8
i32.eqz
br_if 0 (;@2;)
local.get 9
call 3
end
local.get 3
local.get 1
i32.load
i32.const 1
call 13
local.tee 7
i32.eqz
br_if 0 (;@1;)
local.get 7
i32.load offset=24
local.get 7
i32.load offset=28
i32.eq
br_if 0 (;@1;)
local.get 1
i32.load offset=4
local.get 1
i32.load
i32.sub
i32.const 3
i32.shr_s
local.tee 4
i32.const 1
i32.gt_u
if ;; label = @2
i32.const 0
i32.const 1
local.set 12
local.tee 5
local.tee 10
local.set 11
loop ;; label = @3
local.get 3
local.get 12
i32.const 3
i32.shl
local.get 1
i32.load
i32.add
i32.const 0
call 13
local.tee 9
if ;; label = @4
local.get 9
local.get 9
i32.load offset=28
i32.eq
if ;; label = @5
local.get 9
i32.const 1
i32.store8 offset=44
end
local.get 9
local.tee 8
local.set 13
loop ;; label = @5
local.get 13
f64.load offset=8
local.set 20
local.get 8
f64.load offset=8
local.set 21
block ;; label = @6
local.get 20
local.get 21
f64.lt
i32.eqz
if ;; label = @7
local.get 20
local.get 21
f64.eq
i32.eqz
br_if 1 (;@6;)
local.get 13
f64.load offset=16
local.get 8
f64.load offset=16
f64.lt
i32.eqz
br_if 1 (;@6;)
end
local.get 13
local.set 8
end
local.get 13
i32.load offset=28
local.tee 13
local.get 9
i32.ne
br_if 0 (;@5;)
end
local.get 11
local.get 10
i32.lt_u
if ;; label = @5
local.get 11
local.get 8
i32.store
i32.const 4
local.get 11
i32.add
local.set 11
else
local.get 11
local.get 5
local.tee 13
i32.sub
local.tee 9
i32.const 2
i32.shr_s
local.tee 11
i32.const 1
i32.add
local.tee 14
i32.const 1073741823
i32.gt_u
if ;; label = @6
call 0
unreachable
end
local.get 10
local.get 13
i32.sub
local.set 10
block ;; label = @6
local.get 10
i32.const 2
i32.shr_s
i32.const 536870911
i32.lt_u
if ;; label = @7
local.get 14
local.get 10
i32.const 1
i32.shr_s
local.tee 10
local.get 10
local.get 14
i32.lt_u
select
local.tee 10
i32.eqz
if ;; label = @8
i32.const 0
i32.const 0
local.set 13
local.set 10
br 2 (;@6;)
end
local.get 10
i32.const 1073741823
i32.gt_u
if ;; label = @8
call 5
unreachable
end
else
i32.const 1073741823
local.set 10
end
local.get 10
i32.const 2
i32.shl
call 4
local.set 13
end
local.get 10
i32.const 2
i32.shl
local.get 13
i32.add
local.set 10
local.get 11
i32.const 2
i32.shl
local.get 13
i32.add
local.tee 11
local.get 8
i32.store
local.get 9
i32.const 0
i32.gt_s
if ;; label = @6
local.get 13
local.get 5
local.get 9
call 28
drop
end
i32.const 4
local.get 11
i32.add
local.set 11
local.get 5
if ;; label = @6
local.get 5
call 3
local.get 13
local.set 5
else
local.get 13
local.set 5
end
end
end
local.get 12
i32.const 1
i32.add
local.tee 12
local.get 4
i32.ne
br_if 0 (;@3;)
end
local.get 5
local.get 11
call 9
local.get 11
local.tee 11
local.get 5
local.tee 10
i32.ne
if ;; label = @3
local.get 11
local.get 10
i32.sub
i32.const 2
i32.shr_s
local.tee 11
i32.const 1
local.get 11
i32.const 1
i32.gt_u
select
local.set 4
i32.const 0
local.set 12
loop ;; label = @4
local.get 12
i32.const 2
i32.shl
local.get 5
i32.add
i32.load
local.tee 9
f64.load offset=8
local.set 20
local.get 9
f64.load offset=16
local.set 21
local.get 7
local.set 13
f64.const -inf (;=-inf;)
i32.const 0
local.set 11
local.set 22
block ;; label = @5
block ;; label = @6
loop ;; label = @7
local.get 13
f64.load offset=16
local.tee 23
local.get 21
f64.ge
if ;; label = @8
local.get 13
i32.load offset=28
local.tee 8
f64.load offset=16
local.tee 24
local.get 23
f64.eq
i32.eqz
i32.const 0
local.get 24
local.get 21
f64.le
select
if ;; label = @9
local.get 13
f64.load offset=8
local.tee 25
local.get 21
local.get 23
f64.sub
local.get 8
f64.load offset=8
local.tee 26
local.get 25
f64.sub
f64.mul
local.get 24
local.get 23
f64.sub
f64.div
f64.add
local.tee 27
local.get 22
f64.gt
i32.const 0
local.get 27
local.get 20
f64.le
select
if ;; label = @10
local.get 27
local.get 20
f64.eq
if ;; label = @11
local.get 23
local.get 21
f64.eq
if ;; label = @12
local.get 13
local.set 8
br 6 (;@6;)
end
local.get 24
local.get 21
f64.eq
br_if 5 (;@6;)
end
local.get 25
local.get 26
f64.lt
if ;; label = @11
local.get 13
local.set 8
end
else
local.get 11
local.set 8
local.get 22
local.set 27
end
else
local.get 11
local.set 8
local.get 22
local.set 27
end
else
local.get 11
local.set 8
local.get 22
local.set 27
end
local.get 13
i32.load offset=28
local.tee 13
local.get 7
i32.ne
if ;; label = @8
local.get 8
local.set 11
local.get 27
local.set 22
br 1 (;@7;)
end
end
local.get 8
i32.eqz
br_if 1 (;@5;)
local.get 27
local.get 20
f64.eq
br_if 0 (;@6;)
local.get 8
f64.load offset=8
local.set 22
local.get 20
local.get 27
local.get 8
f64.load offset=16
local.tee 23
local.get 21
f64.gt
select
local.set 24
local.get 8
local.tee 11
local.set 13
f64.const inf (;=inf;)
local.set 25
loop ;; label = @7
local.get 11
f64.load offset=8
local.tee 26
local.get 22
f64.ge
i32.const 0
local.get 26
local.get 20
f64.le
select
local.set 10
local.get 26
local.get 20
f64.eq
i32.eqz
if ;; label = @8
local.get 10
i32.eqz
br_if 0 (;@8;)
local.get 23
local.get 21
f64.gt
if (result f64) ;; label = @9
local.get 27
else
local.get 20
end
local.get 24
local.get 26
f64.sub
local.set 30
local.get 21
local.get 11
f64.load offset=16
local.tee 29
f64.sub
local.set 15
local.get 26
f64.sub
local.tee 28
local.get 15
f64.mul
local.get 30
local.get 15
f64.mul
f64.sub
global.get 1
f64.ge
i32.eqz
br_if 0 (;@8;)
local.get 22
local.get 26
f64.sub
local.get 15
f64.mul
local.set 32
local.get 23
local.get 29
f64.sub
local.tee 31
local.get 30
f64.mul
local.get 32
f64.sub
global.get 1
f64.ge
i32.eqz
br_if 0 (;@8;)
local.get 32
local.get 28
local.get 31
f64.mul
f64.sub
global.get 1
f64.ge
i32.eqz
br_if 0 (;@8;)
local.get 15
f64.abs
local.get 20
local.get 26
f64.sub
local.tee 28
f64.div
local.set 31
local.get 11
i32.load offset=28
local.tee 10
f64.load offset=16
local.tee 18
local.get 29
f64.sub
local.set 19
local.get 11
i32.load offset=24
local.tee 14
f64.load offset=8
local.set 17
local.get 10
f64.load offset=8
local.tee 16
local.get 26
f64.sub
local.tee 30
local.get 14
f64.load offset=16
local.set 32
local.get 29
local.get 32
f64.sub
f64.mul
local.get 26
local.get 17
f64.sub
local.get 19
f64.mul
f64.sub
global.get 1
f64.lt
if ;; label = @9
local.get 15
local.get 16
local.get 20
f64.sub
f64.mul
local.get 28
local.get 18
local.get 21
f64.sub
f64.mul
f64.sub
global.get 1
f64.ge
i32.eqz
br_if 1 (;@8;)
local.get 32
local.get 29
f64.sub
local.get 20
local.get 17
f64.sub
f64.mul
local.get 21
local.get 32
f64.sub
local.get 17
local.get 26
f64.sub
f64.mul
f64.sub
global.get 1
f64.ge
i32.eqz
br_if 1 (;@8;)
else
local.get 15
local.get 17
local.get 20
f64.sub
f64.mul
local.get 28
local.get 32
local.get 21
f64.sub
f64.mul
f64.sub
global.get 1
f64.lt
br_if 0 (;@9;)
local.get 20
local.get 16
f64.sub
local.get 19
f64.mul
local.get 30
local.get 21
local.get 18
f64.sub
f64.mul
f64.sub
global.get 1
f64.lt
i32.eqz
br_if 1 (;@8;)
end
local.get 31
local.get 25
f64.lt
i32.eqz
if ;; label = @9
local.get 31
local.get 25
f64.eq
i32.eqz
br_if 1 (;@8;)
local.get 13
f64.load offset=8
local.set 29
local.get 26
local.get 29
f64.gt
br_if 0 (;@9;)
local.get 13
i32.load offset=24
local.set 10
local.get 13
f64.load offset=16
local.tee 26
local.get 10
f64.load offset=16
f64.sub
local.get 17
local.get 29
f64.sub
f64.mul
local.get 32
local.get 26
f64.sub
local.get 29
local.get 10
f64.load offset=8
f64.sub
f64.mul
f64.sub
global.get 1
f64.lt
i32.eqz
br_if 1 (;@8;)
local.get 13
i32.load offset=28
local.tee 10
f64.load offset=8
local.get 29
f64.sub
local.get 26
local.get 18
f64.sub
f64.mul
local.get 29
local.get 16
f64.sub
local.get 10
f64.load offset=16
local.get 26
f64.sub
f64.mul
f64.sub
global.get 1
f64.lt
i32.eqz
br_if 1 (;@8;)
end
local.get 11
local.set 13
local.get 31
local.set 25
end
local.get 11
i32.load offset=28
local.tee 11
local.get 8
i32.ne
br_if 0 (;@7;)
end
local.get 13
i32.eqz
br_if 1 (;@5;)
local.get 13
local.set 8
end
local.get 3
local.get 8
local.get 9
call 15
local.tee 9
local.get 8
i32.load offset=28
local.tee 13
local.get 8
local.tee 10
local.get 13
select
local.set 11
block ;; label = @6
loop ;; label = @7
block ;; label = @8
local.get 10
i32.load8_u offset=44
i32.eqz
if ;; label = @9
local.get 10
f64.load offset=8
local.set 20
local.get 10
i32.load offset=28
local.tee 13
f64.load offset=8
local.set 21
block ;; label = @10
local.get 20
local.get 21
f64.eq
if ;; label = @11
local.get 10
f64.load offset=16
local.get 13
f64.load offset=16
f64.eq
br_if 1 (;@10;)
end
local.get 10
f64.load offset=16
local.tee 22
local.get 10
i32.load offset=24
local.tee 14
f64.load offset=16
f64.sub
local.get 21
local.get 20
f64.sub
f64.mul
local.get 20
local.get 14
f64.load offset=8
f64.sub
local.get 13
f64.load offset=16
local.get 22
f64.sub
f64.mul
f64.sub
global.get 1
f64.eq
i32.eqz
br_if 1 (;@9;)
end
local.get 13
local.get 10
i32.load offset=24
i32.store offset=24
local.get 10
i32.load offset=24
local.tee 11
local.get 13
i32.store offset=28
local.get 10
i32.load offset=36
local.tee 14
if ;; label = @10
local.get 14
local.get 10
i32.load offset=40
i32.store offset=40
end
local.get 10
i32.load offset=40
local.tee 10
if ;; label = @10
local.get 10
local.get 14
i32.store offset=36
end
local.get 11
local.get 13
i32.eq
if ;; label = @10
local.get 13
local.set 11
br 4 (;@6;)
end
local.get 11
local.set 10
i32.const 1
local.set 13
br 1 (;@8;)
end
local.get 10
i32.load offset=28
local.set 10
i32.const 0
local.set 13
end
i32.const 1
local.get 10
local.get 11
i32.ne
local.get 13
select
br_if 0 (;@7;)
end
end
i32.load offset=28
local.tee 10
local.get 9
local.get 10
select
local.set 10
block ;; label = @6
loop ;; label = @7
block ;; label = @8
local.get 9
i32.load8_u offset=44
i32.eqz
if ;; label = @9
local.get 9
f64.load offset=8
local.set 20
local.get 9
i32.load offset=28
local.tee 13
f64.load offset=8
local.set 21
block ;; label = @10
local.get 20
local.get 21
f64.eq
if ;; label = @11
local.get 9
f64.load offset=16
local.get 13
f64.load offset=16
f64.eq
br_if 1 (;@10;)
end
local.get 9
f64.load offset=16
local.tee 22
local.get 9
i32.load offset=24
local.tee 14
f64.load offset=16
f64.sub
local.get 21
local.get 20
f64.sub
f64.mul
local.get 20
local.get 14
f64.load offset=8
f64.sub
local.get 13
f64.load offset=16
local.get 22
f64.sub
f64.mul
f64.sub
global.get 1
f64.eq
i32.eqz
br_if 1 (;@9;)
end
local.get 13
local.get 9
i32.load offset=24
i32.store offset=24
local.get 9
i32.load offset=24
local.tee 10
local.get 13
i32.store offset=28
local.get 9
i32.load offset=36
local.tee 14
if ;; label = @10
local.get 14
local.get 9
i32.load offset=40
i32.store offset=40
end
local.get 9
i32.load offset=40
local.tee 9
if ;; label = @10
local.get 9
local.get 14
i32.store offset=36
end
local.get 10
local.get 13
i32.eq
br_if 3 (;@6;)
local.get 10
local.set 9
i32.const 1
local.set 13
br 1 (;@8;)
end
local.get 9
i32.load offset=28
local.set 9
i32.const 0
local.set 13
end
i32.const 1
local.get 9
local.get 10
i32.ne
local.get 13
select
br_if 0 (;@7;)
end
end
local.get 11
local.get 7
local.get 8
local.get 7
i32.eq
select
local.set 7
end
local.get 7
i32.load offset=28
local.tee 8
local.get 7
local.get 8
select
local.set 10
block ;; label = @5
loop ;; label = @6
block ;; label = @7
local.get 7
i32.load8_u offset=44
i32.eqz
if ;; label = @8
local.get 7
f64.load offset=8
local.set 20
local.get 7
i32.load offset=28
local.tee 13
f64.load offset=8
local.set 21
block ;; label = @9
local.get 20
local.get 21
f64.eq
if ;; label = @10
local.get 7
f64.load offset=16
local.get 13
f64.load offset=16
f64.eq
br_if 1 (;@9;)
end
local.get 7
f64.load offset=16
local.tee 22
local.get 7
i32.load offset=24
local.tee 8
f64.load offset=16
f64.sub
local.get 21
local.get 20
f64.sub
f64.mul
local.get 20
local.get 8
f64.load offset=8
f64.sub
local.get 13
f64.load offset=16
local.get 22
f64.sub
f64.mul
f64.sub
global.get 1
f64.eq
i32.eqz
br_if 1 (;@8;)
end
local.get 13
local.get 7
i32.load offset=24
i32.store offset=24
local.get 7
i32.load offset=24
local.tee 10
local.get 13
i32.store offset=28
local.get 7
i32.load offset=36
local.tee 8
if ;; label = @9
local.get 8
local.get 7
i32.load offset=40
i32.store offset=40
end
local.get 7
i32.load offset=40
local.tee 7
if ;; label = @9
local.get 7
local.get 8
i32.store offset=36
end
local.get 10
local.get 13
i32.eq
br_if 3 (;@5;)
local.get 10
local.set 7
i32.const 1
local.set 8
br 1 (;@7;)
end
local.get 7
i32.load offset=28
local.set 7
i32.const 0
local.set 8
end
i32.const 1
local.get 7
local.get 10
i32.ne
local.get 8
select
br_if 0 (;@6;)
end
local.get 10
local.set 13
end
local.get 12
i32.const 1
i32.add
local.tee 12
local.get 4
i32.ne
if ;; label = @5
local.get 13
local.set 7
br 1 (;@4;)
end
end
local.get 13
local.set 7
end
local.get 5
i32.eqz
br_if 0 (;@2;)
local.get 5
call 3
end
local.get 3
local.get 6
i32.const 31
i32.shr_u
i32.store8 offset=16
local.get 6
i32.const 0
i32.lt_s
if ;; label = @2
local.get 7
i32.load offset=28
local.set 6
local.get 7
f64.load offset=8
local.set 20
local.get 3
local.get 20
f64.store offset=32
local.get 3
local.get 20
f64.store offset=24
local.get 7
f64.load offset=16
local.set 20
local.get 3
local.get 20
f64.store offset=48
local.get 3
local.get 20
f64.store offset=40
loop ;; label = @3
local.get 6
f64.load offset=8
local.set 20
local.get 6
f64.load offset=16
local.set 22
local.get 3
f64.load offset=24
local.set 23
local.get 3
local.get 20
local.get 23
local.get 20
local.get 23
f64.lt
select
local.tee 24
f64.store offset=24
local.get 3
f64.load offset=40
local.set 23
local.get 3
local.get 22
local.get 23
local.get 22
local.get 23
f64.lt
select
local.tee 23
f64.store offset=40
local.get 3
f64.load offset=32
local.set 21
local.get 3
local.get 20
local.get 21
local.get 21
local.get 20
f64.lt
select
local.tee 20
f64.store offset=32
local.get 3
f64.load offset=48
local.set 21
local.get 3
local.get 22
local.get 21
local.get 21
local.get 22
f64.lt
select
local.tee 22
f64.store offset=48
local.get 6
i32.load offset=28
local.tee 6
local.get 7
i32.ne
br_if 0 (;@3;)
end
local.get 22
local.get 23
f64.sub
local.tee 23
local.get 20
local.get 24
f64.sub
local.tee 20
local.get 20
local.get 23
f64.lt
select
local.tee 20
global.get 1
f64.eq
if (result f64) ;; label = @3
global.get 1
else
f64.const 0x1p+0 (;=1;)
local.get 20
f64.div
end
local.set 20
local.get 3
local.get 20
f64.store offset=56
end
local.get 3
local.get 7
call 16
local.get 3
i32.load offset=72
local.set 4
local.get 3
i32.load offset=76
local.tee 5
local.get 3
i32.load offset=80
local.tee 6
i32.ne
if ;; label = @2
loop ;; label = @3
local.get 5
i32.load
call 3
i32.const 4
local.get 5
i32.add
local.tee 5
local.get 6
i32.ne
br_if 0 (;@3;)
end
end
local.get 3
local.get 3
i32.load offset=76
i32.store offset=80
local.get 3
local.get 4
i32.const 1
local.get 4
i32.const 1
i32.gt_u
select
local.tee 4
i32.store offset=72
local.get 3
i32.const 0
i32.store offset=64
local.get 3
local.get 4
i32.store offset=68
end
local.get 0
local.get 3
i32.load
i32.store
local.get 0
local.get 3
i32.load offset=4
i32.store offset=4
local.get 0
local.get 3
i32.load offset=8
i32.store offset=8
local.get 3
i32.const 0
i32.store offset=8
local.get 3
i64.const 0
i64.store align=4
local.get 3
i32.load offset=72
local.set 4
local.get 3
i32.load offset=76
local.tee 5
local.get 3
i32.load offset=80
local.tee 6
i32.ne
if ;; label = @1
loop ;; label = @2
local.get 5
i32.load
call 3
i32.const 4
local.get 5
i32.add
local.tee 5
local.get 6
i32.ne
br_if 0 (;@2;)
end
end
local.get 3
i32.load offset=76
local.tee 5
local.get 3
local.get 5
i32.store offset=80
local.get 3
local.get 4
i32.const 1
local.get 4
i32.const 1
i32.gt_u
select
local.tee 4
i32.store offset=72
local.get 3
i32.const 0
i32.store offset=64
local.get 3
local.get 4
i32.store offset=68
if ;; label = @1
local.get 3
local.get 5
i32.store offset=80
local.get 5
call 3
end
local.get 3
i32.load
local.tee 4
if ;; label = @1
local.get 3
local.get 4
i32.store offset=4
local.get 4
call 3
end
global.set 0)
(func (;24;) (type 0)
i32.const 0
i32.const 0
i32.load offset=1049616
i32.store offset=1049620)
(func (;25;) (type 3) (param i32 i32)
local.get 0
local.get 1
i32.load
i32.store)
(func (;26;) (type 3) (param i32 i32)
local.get 0
local.get 1
i32.load offset=4
i32.store)
(func (;27;) (type 2) (param i32)
local.get 0
i32.const 4
local.get 0
i32.load
i32.add
i32.store)
(func (;28;) (type 6) (param i32 i32 i32) (result i32)
(local i32 i32 i32 i32 i32)
local.get 2
local.get 1
i32.add
local.set 3
block ;; label = @1
local.get 0
i32.const 3
i32.and
if ;; label = @2
local.get 0
local.get 1
local.set 5
local.set 4
loop ;; label = @3
local.get 5
local.get 3
i32.eq
br_if 2 (;@1;)
local.get 4
local.get 5
i32.load8_u
i32.store8
i32.const 1
local.get 5
i32.add
local.set 5
i32.const 1
local.get 4
i32.add
local.tee 4
i32.const 3
i32.and
br_if 0 (;@3;)
end
else
local.get 1
local.get 0
local.set 4
local.set 5
end
local.get 5
local.tee 6
i32.const -64
local.get 3
i32.add
local.tee 7
i32.le_s
if ;; label = @2
loop ;; label = @3
local.get 4
local.get 5
i64.load align=4
i64.store align=4
local.get 4
local.get 5
i64.load offset=8 align=4
i64.store offset=8 align=4
local.get 4
local.get 5
i64.load offset=16 align=4
i64.store offset=16 align=4
local.get 4
local.get 5
i64.load offset=24 align=4
i64.store offset=24 align=4
local.get 4
local.get 5
i64.load offset=32 align=4
i64.store offset=32 align=4
local.get 4
local.get 5
i64.load offset=40 align=4
i64.store offset=40 align=4
local.get 4
local.get 5
i64.load offset=48 align=4
i64.store offset=48 align=4
local.get 4
local.get 5
i64.load offset=56 align=4
i64.store offset=56 align=4
i32.const 64
local.get 5
i32.add
local.tee 5
i32.const 64
local.get 4
i32.add
local.set 4
local.get 7
i32.le_s
br_if 0 (;@3;)
end
local.get 5
local.set 6
end
i32.const -8
local.get 3
i32.add
local.set 7
local.get 6
local.get 7
i32.le_s
if ;; label = @2
loop ;; label = @3
local.get 4
local.get 5
i64.load align=4
i64.store align=4
i32.const 8
local.get 5
i32.add
local.tee 5
i32.const 8
local.get 4
i32.add
local.set 4
local.get 7
i32.le_s
br_if 0 (;@3;)
end
end
local.get 5
local.get 3
i32.eq
br_if 0 (;@1;)
loop ;; label = @2
local.get 4
local.get 5
i32.load8_u
i32.store8
i32.const 1
local.get 5
i32.add
local.tee 5
local.get 3
i32.eq
br_if 1 (;@1;)
i32.const 1
local.get 4
i32.add
local.set 4
br 0 (;@2;)
end
end
local.get 0)
(table (;0;) 3 3 funcref)
(memory (;0;) 17 128)
(global (;0;) (mut i32) (i32.const 1048576))
(global (;1;) f64 (f64.const 0x0p+0 (;=0;)))
(global (;2;) (mut i32) (i32.const 0))
(global (;3;) (mut i32) (i32.const 1049632))
(global (;4;) (mut i32) (i32.const 0))
(global (;5;) (mut i32) (i32.const 1049632))
(global (;6;) f64 (f64.const 0x1.fffcp+14 (;=32767;)))
(global (;7;) (mut i32) (i32.const -1))
(global (;8;) i64 (i64.const 4503668347895824))
(global (;9;) (mut i32) (i32.const 0))
(global (;10;) (mut i32) (i32.const 0))
(global (;11;) f64 (f64.const 0x1p-1 (;=0.5;)))
(export "bq" (memory 0))
(export "aw" (func 22))
(export "aN" (func 21))
(export "aL" (func 20))
(export "ao" (func 17))
(export "aH" (func 23))
(export "aG" (func 24))
(export "aE" (func 25))
(export "aD" (func 26))
(export "ag" (func 18))
(export "ae" (func 7))
(export "aT" (func 27))
(export "ax" (func 19))
(elem (;0;) (i32.const 0) func 2 22 7)
(data (;0;) (i32.const 1048592) "\08\00\10\00\08\00\10\00\10\00\10\00\10\00\10\00\18\00\10\00\18\00\10\00 \00\10\00 \00\10\00(\00\10\00(\00\10\000\00\10\000\00\10\008\00\10\008\00\10\00@\00\10\00@\00\10\00H\00\10\00H\00\10\00P\00\10\00P\00\10\00X\00\10\00X\00\10\00`\00\10\00`\00\10\00h\00\10\00h\00\10\00p\00\10\00p\00\10\00x\00\10\00x\00\10\00\80\00\10\00\80\00\10\00\88\00\10\00\88\00\10\00\90\00\10\00\90\00\10\00\98\00\10\00\98\00\10\00\a0\00\10\00\a0\00\10\00\a8\00\10\00\a8\00\10\00\b0\00\10\00\b0\00\10\00\b8\00\10\00\b8\00\10\00\c0\00\10\00\c0\00\10\00\c8\00\10\00\c8\00\10\00\d0\00\10\00\d0\00\10\00\d8\00\10\00\d8\00\10\00\e0\00\10\00\e0\00\10\00\e8\00\10\00\e8\00\10\00\f0\00\10\00\f0\00\10\00\f8\00\10\00\f8\00\10\00\00\01\10\00\00\01\10\00\08\01\10\00\08\01\10\00\10\01\10\00\10\01\10\00\18\01\10\00\18\01\10\00 \01\10\00 \01\10\00(\01\10\00(\01\10\000\01\10\000\01\10\008\01\10\008\01\10\00@\01\10\00@\01\10\00H\01\10\00H\01\10\00P\01\10\00P\01\10\00X\01\10\00X\01\10\00`\01\10\00`\01\10\00h\01\10\00h\01\10\00p\01\10\00p\01\10\00x\01\10\00x\01\10\00\80\01\10\00\80\01\10\00\88\01\10\00\88\01\10\00\90\01\10\00\90\01\10\00\98\01\10\00\98\01\10\00\a0\01\10\00\a0\01\10\00\a8\01\10\00\a8\01\10\00\b0\01\10\00\b0\01\10\00\b8\01\10\00\b8\01\10\00\c0\01\10\00\c0\01\10\00\c8\01\10\00\c8\01\10\00\d0\01\10\00\d0\01\10\00\d8\01\10\00\d8\01\10\00\e0\01\10\00\e0\01\10\00\e8\01\10\00\e8\01\10\00\f0\01\10\00\f0\01\10\00\f8\01\10\00\f8\01\10\00\00\02\10\00\00\02\10\00\08\02\10\00\08\02\10\00\10\02\10\00\10\02\10\00\18\02\10\00\18\02\10\00 \02\10\00 \02\10\00(\02\10\00(\02\10\000\02\10\000\02\10\008\02\10\008\02\10\00@\02\10\00@\02\10\00H\02\10\00H\02\10\00P\02\10\00P\02\10\00X\02\10\00X\02\10\00`\02\10\00`\02\10\00h\02\10\00h\02\10\00p\02\10\00p\02\10\00x\02\10\00x\02\10\00\80\02\10\00\80\02\10\00\88\02\10\00\88\02\10\00\90\02\10\00\90\02\10\00\98\02\10\00\98\02\10\00\a0\02\10\00\a0\02\10\00\a8\02\10\00\a8\02\10\00\b0\02\10\00\b0\02\10\00\b8\02\10\00\b8\02\10\00\c0\02\10\00\c0\02\10\00\c8\02\10\00\c8\02\10\00\d0\02\10\00\d0\02\10\00\d8\02\10\00\d8\02\10\00\e0\02\10\00\e0\02\10\00\e8\02\10\00\e8\02\10\00\f0\02\10\00\f0\02\10\00\f8\02\10\00\f8\02\10\00\00\03\10\00\00\03\10\00\08\03\10\00\08\03\10\00\10\03\10\00\10\03\10\00\18\03\10\00\18\03\10\00 \03\10\00 \03\10\00(\03\10\00(\03\10\000\03\10\000\03\10\008\03\10\008\03\10\00@\03\10\00@\03\10\00H\03\10\00H\03\10\00P\03\10\00P\03\10\00X\03\10\00X\03\10\00`\03\10\00`\03\10\00h\03\10\00h\03\10\00p\03\10\00p\03\10\00x\03\10\00x\03\10\00\80\03\10\00\80\03\10\00\88\03\10\00\88\03\10\00\90\03\10\00\90\03\10\00\98\03\10\00\98\03\10\00\a0\03\10\00\a0\03\10\00\a8\03\10\00\a8\03\10\00\b0\03\10\00\b0\03\10\00\b8\03\10\00\b8\03\10\00\c0\03\10\00\c0\03\10\00\c8\03\10\00\c8\03\10\00\d0\03\10\00\d0\03\10\00\d8\03\10\00\d8\03\10\00\e0\03\10\00\e0\03\10\00\e8\03\10\00\e8\03\10\00\f0\03\10\00\f0\03\10\00\f8\03\10\00\f8\03\10\00\00\04\10\00\00\04\10"))
original - typical OSM building (15 vertices): x 1,077,113 ops/sec ±0.58% (93 runs sampled)
cheerpified - typical OSM building (15 vertices): x 490,529 ops/sec ±2.87% (78 runs sampled)
original - dude shape (94 vertices): x 41,205 ops/sec ±3.00% (84 runs sampled)
cheerpified - dude shape (94 vertices): x 63,367 ops/sec ±4.73% (77 runs sampled)
original - dude shape with holes (104 vertices): x 19,616 ops/sec ±2.19% (84 runs sampled)
cheerpified - dude shape with holes (104 vertices): x 36,048 ops/sec ±3.32% (85 runs sampled)
original - US border (126 vertices): x 27,599 ops/sec ±2.80% (89 runs sampled)
cheerpified - US border (126 vertices): x 41,821 ops/sec ±2.04% (87 runs sampled)
original - rain (2693 vertices): x 593 ops/sec ±1.81% (91 runs sampled)
cheerpified - rain (2693 vertices): x 808 ops/sec ±1.25% (92 runs sampled)
original - hourglass (6 vertices): x 931,349 ops/sec ±0.80% (96 runs sampled)
cheerpified - hourglass (6 vertices): x 983,514 ops/sec ±1.08% (95 runs sampled)
original - complex OSM water (2523 vertices): x 568 ops/sec ±0.86% (92 runs sampled)
cheerpified - complex OSM water (2523 vertices): x 907 ops/sec ±0.85% (95 runs sampled)
original - complex OSM water2 (1235 vertices): x 397 ops/sec ±0.71% (92 runs sampled)
cheerpified - complex OSM water2 (1235 vertices): x 469 ops/sec ±0.95% (92 runs sampled)
original - complex OSM water3 (212 vertices): x 4,559 ops/sec ±1.52% (84 runs sampled)
cheerpified - complex OSM water3 (212 vertices): x 7,258 ops/sec ±1.16% (95 runs sampled)
original - complex OSM water4 (720 vertices): x 1,170 ops/sec ±1.18% (93 runs sampled)
cheerpified - complex OSM water4 (720 vertices): x 1,591 ops/sec ±2.34% (91 runs sampled)
original - huge OSM water (5667 vertices): x 37.52 ops/sec ±4.34% (50 runs sampled)
cheerpified - huge OSM water (5667 vertices): x 37.60 ops/sec ±2.11% (65 runs sampled)
original - huge OSM water2 (5488 vertices): x 16.13 ops/sec ±2.03% (44 runs sampled)
cheerpified - huge OSM water2 (5488 vertices): x 15.51 ops/sec ±1.52% (43 runs sampled)
// to be compiled with
// /opt/cheerp/bin/clang++ wrapper.cpp -o earcut_cheerp.js -O3
#include "earcut.hpp"
#include <cheerp/clientlib.h>
namespace [[cheerp::genericjs]] client
{
struct FloatArrayLike : public Object
{
uint32_t get_length() const;
double operator[](uint32_t index) const;
};
struct IntArrayLike : public Object
{
uint32_t get_length() const;
int operator[](uint32_t index) const;
};
}
std::vector<std::tuple<double,double>> data;
class View
{
const int b;
const int e;
public:
View(int begin, int end)
: b(begin), e(end)
{
}
int size() const
{
return e-b;
}
const std::tuple<double,double>& operator[](int i) const
{
return data[b+i];
}
typedef const std::tuple<double,double> value_type;
};
[[cheerp::jsexport]]
[[cheerp::genericjs]]
client::Int32Array* earcut_cheerp(client::FloatArrayLike* input, client::IntArrayLike* holes)
{
data.resize(input->get_length() / 2);
const int t = input->get_length();
for (int i=0, j=0; i<t; i+=2, j++)
{
std::get<0>(data[j]) = input->operator[](i);
std::get<1>(data[j]) = input->operator[](i+1);
}
std::vector<View> polygons;
int lastInserted = 0;
if (holes)
{
uint32_t numHoles = holes->get_length();
for (int i=0; i<numHoles; i++)
{
int next = (*holes)[i];
polygons.push_back(View(lastInserted, next));
lastInserted = next;
}
}
polygons.push_back(View(lastInserted, data.size()));
auto solution = mapbox::earcut(polygons);
data.clear();
auto indexes = new client::Int32Array(solution.size());
int i=0;
for (auto x : solution)
indexes->operator[](i++) = x;
return indexes;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment