From 422cca1afe25fe0c46cd788cd9cdefe239166e4f Mon Sep 17 00:00:00 2001 From: Zeeshan Lakhani Date: Fri, 8 Mar 2024 07:44:49 -0500 Subject: [PATCH] chore: handle ref/non-ref case with rigor (#608) Match numeric runtime vals on ref/non-ref. --- .config/hakari.toml | 6 +- Cargo.lock | 7 + flake.nix | 13 + homestar-functions/add/Cargo.toml | 2 +- homestar-functions/subtract/Cargo.toml | 15 + homestar-functions/subtract/src/bindings.rs | 93 + homestar-functions/subtract/src/lib.rs | 15 + homestar-functions/subtract/wit/world.wit | 5 + homestar-wasm/fixtures/example_subtract.wasm | Bin 0 -> 8986 bytes homestar-wasm/fixtures/example_subtract.wat | 3780 ++++++++++ ...example_subtract_cargo_component_wasi.wasm | Bin 0 -> 13300 bytes .../example_subtract_cargo_component_wasi.wat | 6117 +++++++++++++++++ .../fixtures/example_subtract_component.wasm | Bin 0 -> 8952 bytes .../fixtures/example_subtract_component.wat | 3796 ++++++++++ homestar-wasm/src/wasmtime/ipld.rs | 35 +- homestar-wasm/tests/execute_wasm.rs | 18 + 16 files changed, 13896 insertions(+), 6 deletions(-) create mode 100644 homestar-functions/subtract/Cargo.toml create mode 100644 homestar-functions/subtract/src/bindings.rs create mode 100644 homestar-functions/subtract/src/lib.rs create mode 100644 homestar-functions/subtract/wit/world.wit create mode 100755 homestar-wasm/fixtures/example_subtract.wasm create mode 100644 homestar-wasm/fixtures/example_subtract.wat create mode 100755 homestar-wasm/fixtures/example_subtract_cargo_component_wasi.wasm create mode 100644 homestar-wasm/fixtures/example_subtract_cargo_component_wasi.wat create mode 100644 homestar-wasm/fixtures/example_subtract_component.wasm create mode 100644 homestar-wasm/fixtures/example_subtract_component.wat diff --git a/.config/hakari.toml b/.config/hakari.toml index 33523544..b657188e 100644 --- a/.config/hakari.toml +++ b/.config/hakari.toml @@ -28,6 +28,10 @@ platforms = [ exact-versions = true [traversal-excludes] -workspace-members = ["homestar-functions-add", "homestar-functions-test"] +workspace-members = [ + "homestar-functions-add", + "homestar-functions-subtract", + "homestar-functions-test", +] third-party = [{ name = "libsqlite3-sys" }] diff --git a/Cargo.lock b/Cargo.lock index 901d0702..6c4e0a64 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2491,6 +2491,13 @@ dependencies = [ "wit-bindgen-rt", ] +[[package]] +name = "homestar-functions-subtract" +version = "0.1.0" +dependencies = [ + "wit-bindgen-rt", +] + [[package]] name = "homestar-functions-test" version = "0.1.0" diff --git a/flake.nix b/flake.nix index 3572dcd0..a8865773 100644 --- a/flake.nix +++ b/flake.nix @@ -251,6 +251,18 @@ wasm-tools print homestar-wasm/fixtures/example_add_component.wasm -o homestar-wasm/fixtures/example_add_component.wat ''; + wasmSubtract = pkgs.writeScriptBin "wasm-ex-subtract" '' + #!${pkgs.stdenv.shell} + cargo component build -p homestar-functions-subtract --profile release-wasm-fn + cp target/wasm32-wasi/release-wasm-fn/homestar_functions_subtract.wasm homestar-wasm/fixtures/example_subtract_cargo_component_wasi.wasm + wasm-tools print homestar-wasm/fixtures/example_subtract_cargo_component_wasi.wasm -o homestar-wasm/fixtures/example_subtract_cargo_component_wasi.wat + cargo build -p homestar-functions-subtract --target wasm32-unknown-unknown --profile release-wasm-fn + cp target/wasm32-unknown-unknown/release-wasm-fn/homestar_functions_subtract.wasm homestar-wasm/fixtures/example_subtract.wasm + wasm-tools component new homestar-wasm/fixtures/example_subtract.wasm -o homestar-wasm/fixtures/example_subtract_component.wasm + wasm-tools print homestar-wasm/fixtures/example_subtract.wasm -o homestar-wasm/fixtures/example_subtract.wat + wasm-tools print homestar-wasm/fixtures/example_subtract_component.wasm -o homestar-wasm/fixtures/example_subtract_component.wat + ''; + runIpfs = pkgs.writeScriptBin "run-ipfs" '' #!${pkgs.stdenv.shell} ipfs --repo-dir ./.ipfs --offline daemon @@ -289,6 +301,7 @@ testCleanup wasmTest wasmAdd + wasmSubtract ]; in { devShells.default = pkgs.mkShell { diff --git a/homestar-functions/add/Cargo.toml b/homestar-functions/add/Cargo.toml index 296dc919..d4b29b5c 100644 --- a/homestar-functions/add/Cargo.toml +++ b/homestar-functions/add/Cargo.toml @@ -12,4 +12,4 @@ wit-bindgen-rt = "0.20.0" crate-type = ["cdylib"] [package.metadata.component] -package = "component:add" +package = "component:homestar-functions-add" diff --git a/homestar-functions/subtract/Cargo.toml b/homestar-functions/subtract/Cargo.toml new file mode 100644 index 00000000..4d2dc467 --- /dev/null +++ b/homestar-functions/subtract/Cargo.toml @@ -0,0 +1,15 @@ +[package] +name = "homestar-functions-subtract" +publish = false +version = "0.1.0" +edition = { workspace = true } +rust-version = { workspace = true } + +[dependencies] +wit-bindgen-rt = "0.20.0" + +[lib] +crate-type = ["cdylib"] + +[package.metadata.component] +package = "component:homestar-functions-subtract" diff --git a/homestar-functions/subtract/src/bindings.rs b/homestar-functions/subtract/src/bindings.rs new file mode 100644 index 00000000..20575bd7 --- /dev/null +++ b/homestar-functions/subtract/src/bindings.rs @@ -0,0 +1,93 @@ +// Generated by `wit-bindgen` 0.20.0. DO NOT EDIT! +// Options used: + +#[doc(hidden)] +#[allow(non_snake_case)] +pub unsafe fn _export_subtract_cabi(arg0: f64, arg1: f64) -> f64 { + let result0 = T::subtract(arg0, arg1); + _rt::as_f64(result0) +} +pub trait Guest { + fn subtract(a: f64, b: f64) -> f64; +} +#[doc(hidden)] + +macro_rules! __export_world_subtract_cabi{ + ($ty:ident with_types_in $($path_to_types:tt)*) => (const _: () = { + + + #[export_name = "subtract"] + unsafe extern "C" fn export_subtract(arg0: f64,arg1: f64,) -> f64 { + $($path_to_types)*::_export_subtract_cabi::<$ty>(arg0, arg1) + } + };); +} +#[doc(hidden)] +pub(crate) use __export_world_subtract_cabi; +mod _rt { + + pub fn as_f64(t: T) -> f64 { + t.as_f64() + } + + pub trait AsF64 { + fn as_f64(self) -> f64; + } + + impl<'a, T: Copy + AsF64> AsF64 for &'a T { + fn as_f64(self) -> f64 { + (*self).as_f64() + } + } + + impl AsF64 for f64 { + #[inline] + fn as_f64(self) -> f64 { + self as f64 + } + } +} + +/// Generates `#[no_mangle]` functions to export the specified type as the +/// root implementation of all generated traits. +/// +/// For more information see the documentation of `wit_bindgen::generate!`. +/// +/// ```rust +/// # macro_rules! export{ ($($t:tt)*) => (); } +/// # trait Guest {} +/// struct MyType; +/// +/// impl Guest for MyType { +/// // ... +/// } +/// +/// export!(MyType); +/// ``` +#[allow(unused_macros)] +#[doc(hidden)] + +macro_rules! __export_subtract_impl { + ($ty:ident) => (self::export!($ty with_types_in self);); + ($ty:ident with_types_in $($path_to_types_root:tt)*) => ( + $($path_to_types_root)*::__export_world_subtract_cabi!($ty with_types_in $($path_to_types_root)*); + ) +} +#[doc(inline)] +pub(crate) use __export_subtract_impl as export; + +#[cfg(target_arch = "wasm32")] +#[link_section = "component-type:wit-bindgen:0.20.0:subtract:encoded world"] +#[doc(hidden)] +pub static __WIT_BINDGEN_COMPONENT_TYPE: [u8; 197] = *b"\ +\0asm\x0d\0\x01\0\0\x19\x16wit-component-encoding\x04\0\x07G\x01A\x02\x01A\x02\x01\ +@\x02\x01au\x01bu\0u\x04\0\x08subtract\x01\0\x04\x01$homestar-functions:subtract\ +/subtract\x04\0\x0b\x0e\x01\0\x08subtract\x03\0\0\0G\x09producers\x01\x0cprocess\ +ed-by\x02\x0dwit-component\x070.201.0\x10wit-bindgen-rust\x060.20.0"; + +#[inline(never)] +#[doc(hidden)] +#[cfg(target_arch = "wasm32")] +pub fn __link_custom_section_describing_imports() { + wit_bindgen_rt::maybe_link_cabi_realloc(); +} diff --git a/homestar-functions/subtract/src/lib.rs b/homestar-functions/subtract/src/lib.rs new file mode 100644 index 00000000..8d6089f9 --- /dev/null +++ b/homestar-functions/subtract/src/lib.rs @@ -0,0 +1,15 @@ +#[allow(clippy::all)] +#[rustfmt::skip] +mod bindings; + +use bindings::Guest; + +struct Component; + +impl Guest for Component { + fn subtract(a: f64, b: f64) -> f64 { + a - b + } +} + +bindings::export!(Component with_types_in bindings); diff --git a/homestar-functions/subtract/wit/world.wit b/homestar-functions/subtract/wit/world.wit new file mode 100644 index 00000000..d8d04ad9 --- /dev/null +++ b/homestar-functions/subtract/wit/world.wit @@ -0,0 +1,5 @@ +package homestar-functions:subtract; + +world subtract { + export subtract: func(a: float64, b: float64) -> float64; +} diff --git a/homestar-wasm/fixtures/example_subtract.wasm b/homestar-wasm/fixtures/example_subtract.wasm new file mode 100755 index 0000000000000000000000000000000000000000..5127bbd14f2d96795ac1de0b908bffe644f43201 GIT binary patch literal 8986 zcmd6tPl#RB9mmf(_ultj^4>JBAVoWt+;?d~3$dw-v1C!^3Q0PMxb1E-Nv0<6nVHO= zjEcc|YT8ld$%H+L@I=RYPgdt|+? z^C8Q!ylAzGyzp0j2u0@Iw_A5)`@SBJZ@TWjtN;2;e7>t^d#%;FvVLWA`|;p9JJ-(d zZm(U~b?*3uwey!(x7XJmd1Uj#>Z6x;SI=MGxcKn;#_Gw{drz*ObnV_OhC6z6b@k%f z?%L}5#>LEcS645suU%a|zqYfUg(Ge6YTxxokN)xgZrhcv^uO=^EBIo+c7qU>>%ZN4 zqI7j%KMyQcZdCdQ7eHgi*WF?L*p{9vi&ZwPd&BLa-eOMKD1y{911K_ZR>}ZQsmDg+O%P`WW!-`d-%8v#)v|4qxCGw6n?yiv6 zervl9+e?9AnQNQeW^JZ`h&GuZL5ZE_k(lW}BfiB~0DBNbDpC~sQgB^%)^4yCw@13I zDwJ8>ADTYO43TD8$q<9hvQd@QSz<2?S;7u5Z8N^i;?7-E)InS9-~GoALTBGUDaFnH z1LL25Wx-(<&pT#$XrbVxi+bQ?5Nh~)>6x3TKRdmUgC=c-dK|Rq_#o%~)~#FZ2V{e~ zr49EU#-4j{&A{)D>Yok=c^B1((ZI7dufuMAV+_Ti>{Qs^+P~EcpbbRF)pvmB_eT6a zer9oZ&=x#{bLl;ok~*b0D0z%{_YdhE5sE>p>?CpYUf>sbw=C-0Y`0FSB}Lh;zqeQC zTSN40Oq^X5V3Ez+@H}Xj#p#96b6pH11-xhqXqmr8??gj*XQ;Ei%I~2nGoKWT(EB?Q z9)AG53+(x)BrJAw^^5kZEuq?}iZif{H!X!;3GYjxgR`KjR{dld9^G1s8)HUv0x5od ziOFT>W0+aYzAR=RT*#uCODAnKHgu;Ku+gOhCWtCE14)66p8FMRC#utX>#lIS9KZx+ z(5sj`D?oi4%HcO|Bk9_U$+*NE7Qh3+M&8m%RES1Vc|)ngvb{KHXUk=KfNfA1RKOI# zLb(9SP&*V2UDqu;HN<%4_+?nu26s;7vLsNpq~E;m*S9HrVeri2P%O9-MHJ>3X}FN# zbd8$OzNpCn=K4YeCcl%rS@@TJrGhbxTH{A|hPJrH^`s(Pbj}<6L2sBkLYou;O9O=r;JSq4}|3p{${CgVSpEhgp5$YERX z3Pa|ch;Hs`>G1YwyM9H;p(-uM&N9pGcuk7i2xB0yLdL+!5q;fPDu96$AG|3gHp)=4 zHDydy(LTN43H3u&fzG1VrmAS0D%y=I+B2$XPgK#CD&VVw4S6It*CUw{4!t-dTbPk> z8686AS!T8v{HXDu!lVdk3{@fLw&k}L{*_PstIW14d^$TA+yerHdEd=!Y2(JxTgaO$ zRlYdLWWyDLjERzQNBa;j70DS}S?U}VFu`#|s7efkl=G8bOOU$2u->e*k+NhI55r;f z5Dfg^CJz$j*H0dKFH7b|Lkr=nl1GNwrvIish+;UkqRw8i1BMySQ8FfOQvYF0*-_N} zy=4xIdjCw-UQib76OyMFI1feWbuA;Xih4Z0zJ*Du4j#4C%nRiWqbxJ<^T6U#oQV7g z{#t}%z50d@r-75F*r907QniOlqtq@+;2Z)7ZUSlXO!Ry#x#+YAgl9Lcj05>w(*cqI)J)Dk7gFKc=!yf%+)vp`>s&^Hn^A=@m_ z*CX_1f+l2}1^Q-$zMY^6*=B*h6`}7YXhODGpzlQJdkLD5Z5Al}{x(7W9uYrC!?ez3 zK}^v16V#qd;iLKChiPcfrSQr8@Z&VJ=Ti7=e)wq`+H)z4pEhIEY4~}9+7nYHXd2!~ zLwh38{P4LnwC7TIVSf008rl<6r{RlwV(NLQ&7zH$BlNX-WSa&0YJ|R#pb6P#fxaH0 zHxo1=+bqyGBlPVAO~^J2^sNYeH$fA!%>sQVLf=c!glw}w{~newLsK*=B)$8lmGDXbrN>0{uKfpH0w&Y_mXbXc~hiXhODG zpwC6<3kjN#Z8nCnrH?7%^AVBS?B|w2aJXhfMQ~2$iiBl9(kJhTLw7CU3=@mc{H(IZSe$?OF&)X;(~8v}!%&E9cvsv|m>|WGm`(y4C6$s$5CQGUWcyu8{>@+#MoM zN2p2q+*t1p&xyzTg6hE|_XSGb!_z1D9WIiFEmfsl!}OiQn8|C34|c4P3gvPncOmJ| zaF*~-HSLpBx!jXAJK~^;cCrcv4YAN}dca-(1{O0@>1H^oA*FWNC{|0Y8ceH}T&$Kb z*-W)$mtiX$;R7wJTC%z@-GB5zh)$1U%1#m~OE$sMVsl#K6?#Xe5!Y&~W6cxKPytP= z+B0@BV7qw1uDz}*>!ZLGFDL|7_ zD1*a{QvAG93Y0=^N;Ms#QYg13O7VlB64J}naJeWyWi)C~?TCu>P>J0u*rclf)u&7x13pPqA5+k9t08O}$xH=) zBoShEq2!^^R-tl0Mq7piK;w*7A3LbXrN2fwa+p4p(3u+w_bJ5VL z+16x;MnzmRNe^a_EGCyp;cukaU*V5av57gJ%4!=~q$qc(^@qc!^rD;3{~ z*(P1g0T;-41iqwHS>cLhpdS-`JueHCWe|*sS36mi<_7Mpbuf_05v{$fwzoVlPiF$c z-oaLCgofA%&9db($HJ5LW$bnb+Lg@Gy2OXnlvP9|YLq^TE?nJWDn%F`1QSslMHnn~ z@SdV!kw!KB7nqH4$fMJJE<5U;Njo52(E6k)2&MoWm9FwY8LBDh8@j3~Bo~{!&dapLB$qAgM!>QX z3GEA|g^sEw&p{>1CmYPj#a4%9I*9;Bc2}x$D;}Dv4@WotBF|R1&^5Z7!@RlYWXsXZ zoIWhscN&S14>f3F(8T#hVv{){WA%Qz)O9h;>`fsHFd{MHO##0Itg0a06fpbbSjpn& zJbbaE4kjlKAywi7$`pLxiVxIjai-}n90F0@<{_+T+?BWJPTfDXNM>TG`B!>*KZQZC zMr){#s3JmV{ik$Os4U0AWXb;eSy}A=MgUT->;K9w6PbLme&^N`50Ef zfxb?X==thJn8qAR#>!L`#6-&Gyye>~VuK4={nWTa^OVY8s-(oFvK+J{$3oDJnO@*b zY}qKq7MD8JJ%wUW_aagQHxFx#uQ0)9pR8K;M2h5M?h+OB}ZaTlvA8m^x&=e`YN&SqlU`PwRzMc5t9qgm@ zHk8iG)=0B?c@*!pEv-ke7wZKadzbX0KodHyV11s9-8u60H4*BrJTma`O2q+_LH|NK>VRU1UE^2k~Ezd^OCymx6li+h5ob38r^;x;yb^#iSB~u$Qs{t-P}9= z`?vqeh0QBhH#gQdc2Dd+es%p6f1Pn6{dLBvllRi}(4pSH$p4f5ZUI(b3~D9$YQ^ zZ{B_L-u_op7(RG-`(Xdpor5rY{?4u2Z`|0wd+RG-xp(Kr+ix7)xc$akuf2Zvts9qa zeD>0fOW~QxdW-Oh(IAEX&i^Zb-clZW?$Fu<8S;@ z93Os)+oRCTmUVo=ZrdrIyf$Gw{kdjZr)fyLdi>|F>#>-ICVb)Wa{8$rxjj0PMvueg z^b`N3ip_A*+}~^d@w@-<-QI(`*zv9nt#{IYcq83@pxbeCbo2oO9lg)P^=WLd*ZNP( z=AZbPu5+yKt#;Cfc@XQglm1kSVnQVSmESgpJLx<5c5VFSPWqv`7Q0p1e4zIWZoX$X z(vu;0{u_Vp>A7sa@6Gbl58FbCj-4WdcpU zdB?BI=ImZORax@v-d0^M>eQ5rmq-Z)R0!o|QAXj<0XkgQj>?^Z&9b_Fh(FP>uM# zs@QMhgSyug2X)aJutbvEb~^!_?KG?hOc$;C&3jev?Y$kBGXcG2HP}hRY9NItfSHNU z>0jB1{KW+AQB!6lpK>{wj;n$6{bSR2`06xDp-!`^IB1B<1N6ld%l*B4v-f4Rw4YmF zGmDj~rBn?oRg1Ux>i(Lty$TBt2|yf+vgn=_)Qn|;1)2|*wfnsqENYsXlS5VX;3^ms7HHluWEz=%qi7iK9a!(=r|vZtC6rb!EjuL604`8 z8u5f?W=7_Yz9xWMlrn2!J6Y~qX1R@*r?J}L?Z$HN%S}3HzV|iMS;%j+DN&aB%!?|_ zdug|j*L&M(R+r4A*POF2m9usHphwdfnTiXDM@S&2huLHwk0X*LK>R13leL z>QNQ0G8p$m`Doi?`ucOs4@3;<&Wt9LiFH6?jr?HpX^SExXCOLT%zNVk<>sj>>(Q}x zBYRtovfgAz<)APbkDJ5!fX;t+sB|v8qrv?>cS~m;U^^e8?SPn7K6-u*TAPnP`e>kD zgXYsR_M_M9a`{N{06-6x&95%zL#%AJYcnjKJ!aoto7~K=%5#hsnqQz@e6-~6=dW%Z z%q4!*8osq~zbd|j@IL14%|}(=M)LdKyqpw*X6v4Q)yEs5`Q)Rf+*@D^*{^qXizfXo zWU>e%r9zvrY>d74ZMYEuH0%PX+8~6qIC(&wz{;FeiMLTMSOWrTUZ0aI^xLdP0=*40 zI18;nl>-C}Y%vW~cQvY!BBki!8#8LUcyM!`7>=6>ku?%F(}BriMF)N+8DM=Y=LI9qOWcLQnjeHk zJ;ZF%a9Q{FNE8Y<0_4(8`cLW5&G)gMgifF)4Zmm4q{2nLA&y3Jt4dY~8~*qJ;&mUW zIk7P%!&w%FgoVbK#=Nx11HLR{RZ_s?CNkYZ4+=9wpF*bzvp*EYLgT}$(|$FY_g$Nx zxOUBx2Kledo{Q9ne|D7n%Mxqmaj|)bkEX> z=WEkAVF>^#%L==7BlfyRNM%Mok*ms|#4lzqrMXhthp?kQcH_5U)n9gAXMHnw?13ax zQ?@PV0dex0tKfqaRiA0)mvrhc{q1uTLZ2=Yc5T{+&IV`@DQ+^*CFnI4yvCA(r*LNW z4q;$-tb476Vm0zH6&(3a>5NH4pG(9D<(Kq?!D}qsytHr}bjC!@nqV-it5a5@j1CgA4WQ0OSq-dNIp(QIw%=s}C0ICz z(N%xdlHN6H%Rm;BE8fcxKbGFbE_46?!*KD(I~d=XE%z%{3qYDL3dS9eW#Tf>(|IhJ z%1n>pdPZPN>Z_`}7$(gSxM%-b?*jP06`6tX5!Az%}550B7c&9lT9oDI)HRNCCqV#=>_oT9R4@NJQkAWV6N zT3_3)tF%NOP+G!{N=r%$U1DNM5Z?m)T5Nnl@%f$V6&a&l0eTp(myOrU##<0Uwwgc) zOD4+#?o1ixnHLjT%@-4`VC}*Jw|4^*2kNI*MoPQxnWE~2QB+n)b@%(OyNU$LHgPu} zh#8B{?=_K;4RHl9s|GFnwA z0E|R^^*Mn{tb)PBDp;@Sy*b}7aW)Xrls!!(YYz+-mDGj)-o@q)gQbjtfvGKQtb4NT zXAG(k7jiDrH8n26NSR0}4a%$I3Ib1_*3c4t9xQhx(}p(7I0Ax-Y|YcSZCi=ig92%z znKkFC4J0s=twru5)G?EdowO+-lCR9iPfTv+liM_FoXaoZPdHZ7|!oYfaCt4DRKxXxFDFR=500ao@_iPV`F|FM7Lg&dk8 zS1PjhqoSFdaX{22m#h<)3Cf^`iU1^11QcEb06s7?59A1tg9%lam0Ds7c>Nqxi^S84 zz;=>f!;9e}FcWf`gdY>9xl5|t{h-{uED7J)YGzQn;kGpw?82|-h>P3M_R}(qcb4C;Cnuo(~y=UQqhjT=IQiR63p2` zNaGiPT_L}k0ZO(##DrNRta`pmHG{6QrX$f5U)G8%VYkC#$XLWu9TrJ|?rh&M5f+1C zF|=3=9Trvif<>_b6+WIq$j5+C*#S$aa94VP4uM4_S7hc2Gk`@F&QmH(iZ1JYzA7Ax z<dKa6MMpu->tn$*N@r~SdL{1eFxkD9FPC!^^4WH=RuJ-NvSh#$zSg=u7lW4=Y zN^MRycpcBlTH}?I^Qvq)nbd3BVl`Q|OUKF5aZ)-SJ&}$H8Kq;uYg-_J$VB0pk4nl_ z!7HPyC;~lXWL{^Xo2W?NqB*N2l32A0F_(V0PeCFwk=JaHO9oK^OOgRFB1x?o_|0>@ zjpu8wmf<#IpAscni`gh^qeK<2Z*Q?IbWs8neAV;`X~zxyCtM6E@F0&8*7+PI1yO=i zPLC4neZC5(MhV8Z;23ytDEe{#Mm6YygP0KnF{A)#7h?e6j6{7}a169pRt>uFD7+*g zJZz2g@E9BmkAa7WC7*SHnzZD~HW}+Y3hSbx3yGtW?Ox9XuI6Wuw)w=WKy#S$4A7*%lwz zXm?lvr%_f-S`HX1Q&(t4)IOx2JKyIa3upKHpi?T0h=3LnQ*J4hy3s zi7iEfG}*3utoS2SCQfmb&vGrv;fcrKU)+2%DW%04t~8_(W{~4{(aRWKL=Dzs4!k zUBhXyj#H-G;S>?4e+`r%~u68_4)hp;6AgF$EG>|PXzI*`)Q4cg1S@Ox@p=vxA({|drKF;irX4f^nQ-Xj9NM-9 zNpeOL`n9nw#e`@=5{o8Zibc~7=j4hGe{nLagvX}=o*Y&JHGLUF0vV1|Og&CqQ%vME z!BlK51tpgCzoT=${f;4v5Vz6%>72&f5fRPNK}` z#Zl+QXs+eVH#bzRsy5ai=#sb})6;2MgvM~Zy`S%v(#Oshm^|NBxb;{ZIl)?Jfl+g9 z@o~`-$mxoGdLa(Bx8EdOVcA$aSuyhh3f+#&3NW*8XaTO!nc*ld)-z_idBrXv64)sg zu-6ASk0(skWmZ=O2(>8{zo7=$T?tqv%r-~50A_6_S9eeYgSmFr1^S%1HCWEvM6!%kb5JQC>8M)rMs9R2%e>(= z%%nnR(TLEIbv<4q6+oA+h6NdG{=tUp;(4bS=i8fb3QQx*+7(n z%GoYbqZ#`lXVb}h4!x)O6~e&8eVdIexq89?3X)>CigTy~b6syb6t`eP%9%Zd8nyyd z<7(2fXv5R-l1_rOmeWrF9G>JB#-X~pZerYGB5pBI&h|b=riazUxdoG))luBSCP#3o z8Qg*w=kg2XY{Nl*$Fw)Rq{~1Ut$@Hu*g6md&eM^mZvmW7bAlz{k#RwlA)0r`f+r^h zeJ7+80B{NUhD~>~J7K;BGka&x@GAGV-!fs}Ff$sA3zW>qe?N)+!wLh!>&)SJS3A4L zeYL?WGR1E?grki|4Y9&rjeuZ41{+wQ-T38KkqO)QJ;8Q0khXo{y2&%3tv~H{s6A*e zf@Upeupa%j4;6}a{Mnv{HgZvlA+%}uW ztGIP;tKPz&X+Q!ziN7^&OG&cE8LXIVxh+%fI0F;T+q^b8ZS&Gh#hmcR{x3XB_@m&- zVmDO>2rRhGxordxd5@QT(Ov#|*Yx+S&@ZX4{ms?b&r$r*3v@iM)|TkFYMtNjzl z4iTWYxwsR71L&EvFs^$ly)_A|Y%K{nNos&hX-z^-nC&Dq9gju@meOVi(-x7UE>A(E z&opBa?Ii3JOk&_uETzoP*ez7KRsEHeDoy0aK{YA=X&*oz_*HB=t)5m;We2k=ybSA_ z8dRYt29*uI#hX)Pb5x46&Sbf(p|e?uYpALwneOE zw)U{%l#b#Nu`RN3eY^L?i9*`#TuCuX1~z)Dtj73oNYbkLxhm$-R&X#f$DdKi)6OLq zZ8#|+q$y8EZy8!5Grf(?r+L!W*C~e;*16mIT0g9S-b%X_x#h6JmVMuuL_=VNhE8s6 zXX(Tq7?#0MPo7l>B2REzb_AeP&TYx;I;~jawm2(uTUHSzm34WVyDWh`qqf;RrYGic zYHJ-@D~-p0UBsS!$jf_u%Q$;wORE_?*Vw0(6HPTQid}#mTp!@CvjH61?CJ{*9U(Hm zb)JjiHQq6m!VFnCz*HL%@6xBQ$q zfPH04JFl?aVkwidqS{C}$4I6kjHVolSbZd);nNiz#zy+W!OjNTbzFxxlD@{7$SIXpeiqD;8r@59c#O`9aH|t%cSyUI{FD&3oQ5 zc}wQ~WXp6V2#UY$Eemgn1D>yhC6}rW@g_+@JV`DTyhh4HNRz7 zvtQ#)xY%@TTU27)E=0+A=1EE!?RPAhP|uwSvp>?k|7|<-+V|z zgG(=d_R=rDcxk3z^FK_vxc~6ML0>Okyp(LX{wGsNG30;V5<(2e{>{o@9CuT^^)TLk z7#{Y|pg>&x3z%Wwo|)R(kJ9lse@+$8-nq5^`n{Fv=PteYD=%KEw%@+>;EgM{ZvXPF K&wcKt3;zSHIiuMC literal 0 HcmV?d00001 diff --git a/homestar-wasm/fixtures/example_subtract_cargo_component_wasi.wat b/homestar-wasm/fixtures/example_subtract_cargo_component_wasi.wat new file mode 100644 index 00000000..562bb4e4 --- /dev/null +++ b/homestar-wasm/fixtures/example_subtract_cargo_component_wasi.wat @@ -0,0 +1,6117 @@ +(component + (core module (;0;) + (type (;0;) (func (param f64 f64) (result f64))) + (type (;1;) (func (param i32 i32 i32 i32) (result i32))) + (type (;2;) (func (param i32) (result i32))) + (type (;3;) (func (param i32))) + (type (;4;) (func (param i32 i32) (result i32))) + (type (;5;) (func (param i32 i32))) + (type (;6;) (func)) + (type (;7;) (func (param i32 i32 i32) (result i32))) + (func (;0;) (type 0) (param f64 f64) (result f64) + local.get 0 + local.get 1 + f64.sub + ) + (func (;1;) (type 1) (param i32 i32 i32 i32) (result i32) + (local i32) + block ;; label = @1 + block ;; label = @2 + block ;; label = @3 + block ;; label = @4 + block ;; label = @5 + local.get 1 + br_if 0 (;@5;) + local.get 3 + i32.eqz + br_if 4 (;@1;) + i32.const 0 + i32.load8_u offset=1048580 + drop + block ;; label = @6 + local.get 2 + i32.const 8 + i32.gt_u + br_if 0 (;@6;) + local.get 2 + local.get 3 + i32.le_u + br_if 2 (;@4;) + end + local.get 2 + local.get 2 + local.get 3 + local.get 2 + i32.rem_u + local.tee 1 + i32.sub + i32.const 0 + local.get 1 + select + local.get 3 + i32.add + call 9 + local.set 2 + br 2 (;@3;) + end + block ;; label = @5 + block ;; label = @6 + local.get 2 + i32.const 8 + i32.gt_u + br_if 0 (;@6;) + local.get 2 + local.get 3 + i32.le_u + br_if 1 (;@5;) + end + local.get 2 + local.get 2 + local.get 3 + local.get 2 + i32.rem_u + local.tee 4 + i32.sub + i32.const 0 + local.get 4 + select + local.get 3 + i32.add + call 9 + local.tee 2 + i32.eqz + br_if 3 (;@2;) + local.get 2 + local.get 0 + local.get 1 + local.get 3 + local.get 1 + local.get 3 + i32.lt_u + select + call 12 + drop + local.get 0 + call 4 + br 4 (;@1;) + end + local.get 0 + local.get 3 + call 6 + local.set 2 + br 1 (;@3;) + end + local.get 3 + call 2 + local.set 2 + end + local.get 2 + br_if 1 (;@1;) + end + unreachable + unreachable + end + local.get 2 + ) + (func (;2;) (type 2) (param i32) (result i32) + local.get 0 + call 3 + ) + (func (;3;) (type 2) (param i32) (result i32) + (local i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32) + global.get 0 + i32.const 16 + i32.sub + local.tee 1 + global.set 0 + block ;; label = @1 + block ;; label = @2 + block ;; label = @3 + block ;; label = @4 + block ;; label = @5 + block ;; label = @6 + block ;; label = @7 + block ;; label = @8 + block ;; label = @9 + block ;; label = @10 + block ;; label = @11 + block ;; label = @12 + i32.const 0 + i32.load offset=1048608 + local.tee 2 + br_if 0 (;@12;) + block ;; label = @13 + i32.const 0 + i32.load offset=1049056 + local.tee 3 + br_if 0 (;@13;) + i32.const 0 + i64.const -1 + i64.store offset=1049068 align=4 + i32.const 0 + i64.const 281474976776192 + i64.store offset=1049060 align=4 + i32.const 0 + local.get 1 + i32.const 8 + i32.add + i32.const -16 + i32.and + i32.const 1431655768 + i32.xor + local.tee 3 + i32.store offset=1049056 + i32.const 0 + i32.const 0 + i32.store offset=1049076 + i32.const 0 + i32.const 0 + i32.store offset=1049028 + end + i32.const 1114112 + i32.const 1049088 + i32.lt_u + br_if 1 (;@11;) + i32.const 0 + local.set 2 + i32.const 1114112 + i32.const 1049088 + i32.sub + i32.const 89 + i32.lt_u + br_if 0 (;@12;) + i32.const 0 + local.set 4 + i32.const 0 + i32.const 1049088 + i32.store offset=1049032 + i32.const 0 + i32.const 1049088 + i32.store offset=1048600 + i32.const 0 + local.get 3 + i32.store offset=1048620 + i32.const 0 + i32.const -1 + i32.store offset=1048616 + i32.const 0 + i32.const 1114112 + i32.const 1049088 + i32.sub + i32.store offset=1049036 + loop ;; label = @13 + local.get 4 + i32.const 1048644 + i32.add + local.get 4 + i32.const 1048632 + i32.add + local.tee 3 + i32.store + local.get 3 + local.get 4 + i32.const 1048624 + i32.add + local.tee 5 + i32.store + local.get 4 + i32.const 1048636 + i32.add + local.get 5 + i32.store + local.get 4 + i32.const 1048652 + i32.add + local.get 4 + i32.const 1048640 + i32.add + local.tee 5 + i32.store + local.get 5 + local.get 3 + i32.store + local.get 4 + i32.const 1048660 + i32.add + local.get 4 + i32.const 1048648 + i32.add + local.tee 3 + i32.store + local.get 3 + local.get 5 + i32.store + local.get 4 + i32.const 1048656 + i32.add + local.get 3 + i32.store + local.get 4 + i32.const 32 + i32.add + local.tee 4 + i32.const 256 + i32.ne + br_if 0 (;@13;) + end + i32.const 1049088 + i32.const -8 + i32.const 1049088 + i32.sub + i32.const 15 + i32.and + i32.const 0 + i32.const 1049088 + i32.const 8 + i32.add + i32.const 15 + i32.and + select + local.tee 4 + i32.add + local.tee 2 + i32.const 4 + i32.add + i32.const 1114112 + i32.const 1049088 + i32.sub + i32.const -56 + i32.add + local.tee 3 + local.get 4 + i32.sub + local.tee 4 + i32.const 1 + i32.or + i32.store + i32.const 0 + i32.const 0 + i32.load offset=1049072 + i32.store offset=1048612 + i32.const 0 + local.get 4 + i32.store offset=1048596 + i32.const 0 + local.get 2 + i32.store offset=1048608 + local.get 3 + i32.const 1049088 + i32.add + i32.const 4 + i32.add + i32.const 56 + i32.store + end + block ;; label = @12 + block ;; label = @13 + local.get 0 + i32.const 236 + i32.gt_u + br_if 0 (;@13;) + block ;; label = @14 + i32.const 0 + i32.load offset=1048584 + local.tee 6 + i32.const 16 + local.get 0 + i32.const 19 + i32.add + i32.const -16 + i32.and + local.get 0 + i32.const 11 + i32.lt_u + select + local.tee 7 + i32.const 3 + i32.shr_u + local.tee 3 + i32.shr_u + local.tee 4 + i32.const 3 + i32.and + i32.eqz + br_if 0 (;@14;) + block ;; label = @15 + block ;; label = @16 + local.get 4 + i32.const 1 + i32.and + local.get 3 + i32.or + i32.const 1 + i32.xor + local.tee 5 + i32.const 3 + i32.shl + local.tee 3 + i32.const 1048624 + i32.add + local.tee 4 + local.get 3 + i32.const 1048632 + i32.add + i32.load + local.tee 3 + i32.load offset=8 + local.tee 7 + i32.ne + br_if 0 (;@16;) + i32.const 0 + local.get 6 + i32.const -2 + local.get 5 + i32.rotl + i32.and + i32.store offset=1048584 + br 1 (;@15;) + end + local.get 4 + local.get 7 + i32.store offset=8 + local.get 7 + local.get 4 + i32.store offset=12 + end + local.get 3 + i32.const 8 + i32.add + local.set 4 + local.get 3 + local.get 5 + i32.const 3 + i32.shl + local.tee 5 + i32.const 3 + i32.or + i32.store offset=4 + local.get 3 + local.get 5 + i32.add + local.tee 3 + local.get 3 + i32.load offset=4 + i32.const 1 + i32.or + i32.store offset=4 + br 13 (;@1;) + end + local.get 7 + i32.const 0 + i32.load offset=1048592 + local.tee 8 + i32.le_u + br_if 1 (;@12;) + block ;; label = @14 + local.get 4 + i32.eqz + br_if 0 (;@14;) + block ;; label = @15 + block ;; label = @16 + local.get 4 + local.get 3 + i32.shl + i32.const 2 + local.get 3 + i32.shl + local.tee 4 + i32.const 0 + local.get 4 + i32.sub + i32.or + i32.and + local.tee 4 + i32.const 0 + local.get 4 + i32.sub + i32.and + i32.ctz + local.tee 3 + i32.const 3 + i32.shl + local.tee 4 + i32.const 1048624 + i32.add + local.tee 5 + local.get 4 + i32.const 1048632 + i32.add + i32.load + local.tee 4 + i32.load offset=8 + local.tee 0 + i32.ne + br_if 0 (;@16;) + i32.const 0 + local.get 6 + i32.const -2 + local.get 3 + i32.rotl + i32.and + local.tee 6 + i32.store offset=1048584 + br 1 (;@15;) + end + local.get 5 + local.get 0 + i32.store offset=8 + local.get 0 + local.get 5 + i32.store offset=12 + end + local.get 4 + local.get 7 + i32.const 3 + i32.or + i32.store offset=4 + local.get 4 + local.get 3 + i32.const 3 + i32.shl + local.tee 3 + i32.add + local.get 3 + local.get 7 + i32.sub + local.tee 5 + i32.store + local.get 4 + local.get 7 + i32.add + local.tee 0 + local.get 5 + i32.const 1 + i32.or + i32.store offset=4 + block ;; label = @15 + local.get 8 + i32.eqz + br_if 0 (;@15;) + local.get 8 + i32.const -8 + i32.and + i32.const 1048624 + i32.add + local.set 7 + i32.const 0 + i32.load offset=1048604 + local.set 3 + block ;; label = @16 + block ;; label = @17 + local.get 6 + i32.const 1 + local.get 8 + i32.const 3 + i32.shr_u + i32.shl + local.tee 9 + i32.and + br_if 0 (;@17;) + i32.const 0 + local.get 6 + local.get 9 + i32.or + i32.store offset=1048584 + local.get 7 + local.set 9 + br 1 (;@16;) + end + local.get 7 + i32.load offset=8 + local.set 9 + end + local.get 9 + local.get 3 + i32.store offset=12 + local.get 7 + local.get 3 + i32.store offset=8 + local.get 3 + local.get 7 + i32.store offset=12 + local.get 3 + local.get 9 + i32.store offset=8 + end + local.get 4 + i32.const 8 + i32.add + local.set 4 + i32.const 0 + local.get 0 + i32.store offset=1048604 + i32.const 0 + local.get 5 + i32.store offset=1048592 + br 13 (;@1;) + end + i32.const 0 + i32.load offset=1048588 + local.tee 10 + i32.eqz + br_if 1 (;@12;) + local.get 10 + i32.const 0 + local.get 10 + i32.sub + i32.and + i32.ctz + i32.const 2 + i32.shl + i32.const 1048888 + i32.add + i32.load + local.tee 0 + i32.load offset=4 + i32.const -8 + i32.and + local.get 7 + i32.sub + local.set 3 + local.get 0 + local.set 5 + block ;; label = @14 + loop ;; label = @15 + block ;; label = @16 + local.get 5 + i32.load offset=16 + local.tee 4 + br_if 0 (;@16;) + local.get 5 + i32.const 20 + i32.add + i32.load + local.tee 4 + i32.eqz + br_if 2 (;@14;) + end + local.get 4 + i32.load offset=4 + i32.const -8 + i32.and + local.get 7 + i32.sub + local.tee 5 + local.get 3 + local.get 5 + local.get 3 + i32.lt_u + local.tee 5 + select + local.set 3 + local.get 4 + local.get 0 + local.get 5 + select + local.set 0 + local.get 4 + local.set 5 + br 0 (;@15;) + end + end + local.get 0 + i32.load offset=24 + local.set 11 + block ;; label = @14 + local.get 0 + i32.load offset=12 + local.tee 9 + local.get 0 + i32.eq + br_if 0 (;@14;) + local.get 0 + i32.load offset=8 + local.tee 4 + i32.const 0 + i32.load offset=1048600 + i32.lt_u + drop + local.get 9 + local.get 4 + i32.store offset=8 + local.get 4 + local.get 9 + i32.store offset=12 + br 12 (;@2;) + end + block ;; label = @14 + local.get 0 + i32.const 20 + i32.add + local.tee 5 + i32.load + local.tee 4 + br_if 0 (;@14;) + local.get 0 + i32.load offset=16 + local.tee 4 + i32.eqz + br_if 4 (;@10;) + local.get 0 + i32.const 16 + i32.add + local.set 5 + end + loop ;; label = @14 + local.get 5 + local.set 2 + local.get 4 + local.tee 9 + i32.const 20 + i32.add + local.tee 5 + i32.load + local.tee 4 + br_if 0 (;@14;) + local.get 9 + i32.const 16 + i32.add + local.set 5 + local.get 9 + i32.load offset=16 + local.tee 4 + br_if 0 (;@14;) + end + local.get 2 + i32.const 0 + i32.store + br 11 (;@2;) + end + i32.const -1 + local.set 7 + local.get 0 + i32.const -65 + i32.gt_u + br_if 0 (;@12;) + local.get 0 + i32.const 19 + i32.add + local.tee 4 + i32.const -16 + i32.and + local.set 7 + i32.const 0 + i32.load offset=1048588 + local.tee 10 + i32.eqz + br_if 0 (;@12;) + i32.const 0 + local.set 8 + block ;; label = @13 + local.get 7 + i32.const 256 + i32.lt_u + br_if 0 (;@13;) + i32.const 31 + local.set 8 + local.get 7 + i32.const 16777215 + i32.gt_u + br_if 0 (;@13;) + local.get 7 + i32.const 38 + local.get 4 + i32.const 8 + i32.shr_u + i32.clz + local.tee 4 + i32.sub + i32.shr_u + i32.const 1 + i32.and + local.get 4 + i32.const 1 + i32.shl + i32.sub + i32.const 62 + i32.add + local.set 8 + end + i32.const 0 + local.get 7 + i32.sub + local.set 3 + block ;; label = @13 + block ;; label = @14 + block ;; label = @15 + block ;; label = @16 + local.get 8 + i32.const 2 + i32.shl + i32.const 1048888 + i32.add + i32.load + local.tee 5 + br_if 0 (;@16;) + i32.const 0 + local.set 4 + i32.const 0 + local.set 9 + br 1 (;@15;) + end + i32.const 0 + local.set 4 + local.get 7 + i32.const 0 + i32.const 25 + local.get 8 + i32.const 1 + i32.shr_u + i32.sub + local.get 8 + i32.const 31 + i32.eq + select + i32.shl + local.set 0 + i32.const 0 + local.set 9 + loop ;; label = @16 + block ;; label = @17 + local.get 5 + i32.load offset=4 + i32.const -8 + i32.and + local.get 7 + i32.sub + local.tee 6 + local.get 3 + i32.ge_u + br_if 0 (;@17;) + local.get 6 + local.set 3 + local.get 5 + local.set 9 + local.get 6 + br_if 0 (;@17;) + i32.const 0 + local.set 3 + local.get 5 + local.set 9 + local.get 5 + local.set 4 + br 3 (;@14;) + end + local.get 4 + local.get 5 + i32.const 20 + i32.add + i32.load + local.tee 6 + local.get 6 + local.get 5 + local.get 0 + i32.const 29 + i32.shr_u + i32.const 4 + i32.and + i32.add + i32.const 16 + i32.add + i32.load + local.tee 5 + i32.eq + select + local.get 4 + local.get 6 + select + local.set 4 + local.get 0 + i32.const 1 + i32.shl + local.set 0 + local.get 5 + br_if 0 (;@16;) + end + end + block ;; label = @15 + local.get 4 + local.get 9 + i32.or + br_if 0 (;@15;) + i32.const 0 + local.set 9 + i32.const 2 + local.get 8 + i32.shl + local.tee 4 + i32.const 0 + local.get 4 + i32.sub + i32.or + local.get 10 + i32.and + local.tee 4 + i32.eqz + br_if 3 (;@12;) + local.get 4 + i32.const 0 + local.get 4 + i32.sub + i32.and + i32.ctz + i32.const 2 + i32.shl + i32.const 1048888 + i32.add + i32.load + local.set 4 + end + local.get 4 + i32.eqz + br_if 1 (;@13;) + end + loop ;; label = @14 + local.get 4 + i32.load offset=4 + i32.const -8 + i32.and + local.get 7 + i32.sub + local.tee 6 + local.get 3 + i32.lt_u + local.set 0 + block ;; label = @15 + local.get 4 + i32.load offset=16 + local.tee 5 + br_if 0 (;@15;) + local.get 4 + i32.const 20 + i32.add + i32.load + local.set 5 + end + local.get 6 + local.get 3 + local.get 0 + select + local.set 3 + local.get 4 + local.get 9 + local.get 0 + select + local.set 9 + local.get 5 + local.set 4 + local.get 5 + br_if 0 (;@14;) + end + end + local.get 9 + i32.eqz + br_if 0 (;@12;) + local.get 3 + i32.const 0 + i32.load offset=1048592 + local.get 7 + i32.sub + i32.ge_u + br_if 0 (;@12;) + local.get 9 + i32.load offset=24 + local.set 2 + block ;; label = @13 + local.get 9 + i32.load offset=12 + local.tee 0 + local.get 9 + i32.eq + br_if 0 (;@13;) + local.get 9 + i32.load offset=8 + local.tee 4 + i32.const 0 + i32.load offset=1048600 + i32.lt_u + drop + local.get 0 + local.get 4 + i32.store offset=8 + local.get 4 + local.get 0 + i32.store offset=12 + br 10 (;@3;) + end + block ;; label = @13 + local.get 9 + i32.const 20 + i32.add + local.tee 5 + i32.load + local.tee 4 + br_if 0 (;@13;) + local.get 9 + i32.load offset=16 + local.tee 4 + i32.eqz + br_if 4 (;@9;) + local.get 9 + i32.const 16 + i32.add + local.set 5 + end + loop ;; label = @13 + local.get 5 + local.set 6 + local.get 4 + local.tee 0 + i32.const 20 + i32.add + local.tee 5 + i32.load + local.tee 4 + br_if 0 (;@13;) + local.get 0 + i32.const 16 + i32.add + local.set 5 + local.get 0 + i32.load offset=16 + local.tee 4 + br_if 0 (;@13;) + end + local.get 6 + i32.const 0 + i32.store + br 9 (;@3;) + end + block ;; label = @12 + i32.const 0 + i32.load offset=1048592 + local.tee 4 + local.get 7 + i32.lt_u + br_if 0 (;@12;) + i32.const 0 + i32.load offset=1048604 + local.set 3 + block ;; label = @13 + block ;; label = @14 + local.get 4 + local.get 7 + i32.sub + local.tee 5 + i32.const 16 + i32.lt_u + br_if 0 (;@14;) + local.get 3 + local.get 7 + i32.add + local.tee 0 + local.get 5 + i32.const 1 + i32.or + i32.store offset=4 + local.get 3 + local.get 4 + i32.add + local.get 5 + i32.store + local.get 3 + local.get 7 + i32.const 3 + i32.or + i32.store offset=4 + br 1 (;@13;) + end + local.get 3 + local.get 4 + i32.const 3 + i32.or + i32.store offset=4 + local.get 3 + local.get 4 + i32.add + local.tee 4 + local.get 4 + i32.load offset=4 + i32.const 1 + i32.or + i32.store offset=4 + i32.const 0 + local.set 0 + i32.const 0 + local.set 5 + end + i32.const 0 + local.get 5 + i32.store offset=1048592 + i32.const 0 + local.get 0 + i32.store offset=1048604 + local.get 3 + i32.const 8 + i32.add + local.set 4 + br 11 (;@1;) + end + block ;; label = @12 + i32.const 0 + i32.load offset=1048596 + local.tee 5 + local.get 7 + i32.le_u + br_if 0 (;@12;) + local.get 2 + local.get 7 + i32.add + local.tee 4 + local.get 5 + local.get 7 + i32.sub + local.tee 3 + i32.const 1 + i32.or + i32.store offset=4 + i32.const 0 + local.get 4 + i32.store offset=1048608 + i32.const 0 + local.get 3 + i32.store offset=1048596 + local.get 2 + local.get 7 + i32.const 3 + i32.or + i32.store offset=4 + local.get 2 + i32.const 8 + i32.add + local.set 4 + br 11 (;@1;) + end + block ;; label = @12 + block ;; label = @13 + i32.const 0 + i32.load offset=1049056 + i32.eqz + br_if 0 (;@13;) + i32.const 0 + i32.load offset=1049064 + local.set 3 + br 1 (;@12;) + end + i32.const 0 + i64.const -1 + i64.store offset=1049068 align=4 + i32.const 0 + i64.const 281474976776192 + i64.store offset=1049060 align=4 + i32.const 0 + local.get 1 + i32.const 12 + i32.add + i32.const -16 + i32.and + i32.const 1431655768 + i32.xor + i32.store offset=1049056 + i32.const 0 + i32.const 0 + i32.store offset=1049076 + i32.const 0 + i32.const 0 + i32.store offset=1049028 + i32.const 65536 + local.set 3 + end + i32.const 0 + local.set 4 + block ;; label = @12 + local.get 3 + local.get 7 + i32.const 71 + i32.add + local.tee 8 + i32.add + local.tee 0 + i32.const 0 + local.get 3 + i32.sub + local.tee 6 + i32.and + local.tee 9 + local.get 7 + i32.gt_u + br_if 0 (;@12;) + i32.const 0 + i32.const 48 + i32.store offset=1049080 + br 11 (;@1;) + end + block ;; label = @12 + i32.const 0 + i32.load offset=1049024 + local.tee 4 + i32.eqz + br_if 0 (;@12;) + block ;; label = @13 + i32.const 0 + i32.load offset=1049016 + local.tee 3 + local.get 9 + i32.add + local.tee 10 + local.get 3 + i32.le_u + br_if 0 (;@13;) + local.get 10 + local.get 4 + i32.le_u + br_if 1 (;@12;) + end + i32.const 0 + local.set 4 + i32.const 0 + i32.const 48 + i32.store offset=1049080 + br 11 (;@1;) + end + i32.const 0 + i32.load8_u offset=1049028 + i32.const 4 + i32.and + br_if 5 (;@6;) + block ;; label = @12 + block ;; label = @13 + block ;; label = @14 + local.get 2 + i32.eqz + br_if 0 (;@14;) + i32.const 1049032 + local.set 4 + loop ;; label = @15 + block ;; label = @16 + local.get 4 + i32.load + local.tee 3 + local.get 2 + i32.gt_u + br_if 0 (;@16;) + local.get 3 + local.get 4 + i32.load offset=4 + i32.add + local.get 2 + i32.gt_u + br_if 3 (;@13;) + end + local.get 4 + i32.load offset=8 + local.tee 4 + br_if 0 (;@15;) + end + end + i32.const 0 + call 11 + local.tee 0 + i32.const -1 + i32.eq + br_if 6 (;@7;) + local.get 9 + local.set 6 + block ;; label = @14 + i32.const 0 + i32.load offset=1049060 + local.tee 4 + i32.const -1 + i32.add + local.tee 3 + local.get 0 + i32.and + i32.eqz + br_if 0 (;@14;) + local.get 9 + local.get 0 + i32.sub + local.get 3 + local.get 0 + i32.add + i32.const 0 + local.get 4 + i32.sub + i32.and + i32.add + local.set 6 + end + local.get 6 + local.get 7 + i32.le_u + br_if 6 (;@7;) + local.get 6 + i32.const 2147483646 + i32.gt_u + br_if 6 (;@7;) + block ;; label = @14 + i32.const 0 + i32.load offset=1049024 + local.tee 4 + i32.eqz + br_if 0 (;@14;) + i32.const 0 + i32.load offset=1049016 + local.tee 3 + local.get 6 + i32.add + local.tee 5 + local.get 3 + i32.le_u + br_if 7 (;@7;) + local.get 5 + local.get 4 + i32.gt_u + br_if 7 (;@7;) + end + local.get 6 + call 11 + local.tee 4 + local.get 0 + i32.ne + br_if 1 (;@12;) + br 8 (;@5;) + end + local.get 0 + local.get 5 + i32.sub + local.get 6 + i32.and + local.tee 6 + i32.const 2147483646 + i32.gt_u + br_if 5 (;@7;) + local.get 6 + call 11 + local.tee 0 + local.get 4 + i32.load + local.get 4 + i32.load offset=4 + i32.add + i32.eq + br_if 4 (;@8;) + local.get 0 + local.set 4 + end + block ;; label = @12 + local.get 4 + i32.const -1 + i32.eq + br_if 0 (;@12;) + local.get 7 + i32.const 72 + i32.add + local.get 6 + i32.le_u + br_if 0 (;@12;) + block ;; label = @13 + local.get 8 + local.get 6 + i32.sub + i32.const 0 + i32.load offset=1049064 + local.tee 3 + i32.add + i32.const 0 + local.get 3 + i32.sub + i32.and + local.tee 3 + i32.const 2147483646 + i32.le_u + br_if 0 (;@13;) + local.get 4 + local.set 0 + br 8 (;@5;) + end + block ;; label = @13 + local.get 3 + call 11 + i32.const -1 + i32.eq + br_if 0 (;@13;) + local.get 3 + local.get 6 + i32.add + local.set 6 + local.get 4 + local.set 0 + br 8 (;@5;) + end + i32.const 0 + local.get 6 + i32.sub + call 11 + drop + br 5 (;@7;) + end + local.get 4 + local.set 0 + local.get 4 + i32.const -1 + i32.ne + br_if 6 (;@5;) + br 4 (;@7;) + end + unreachable + unreachable + end + i32.const 0 + local.set 9 + br 7 (;@2;) + end + i32.const 0 + local.set 0 + br 5 (;@3;) + end + local.get 0 + i32.const -1 + i32.ne + br_if 2 (;@5;) + end + i32.const 0 + i32.const 0 + i32.load offset=1049028 + i32.const 4 + i32.or + i32.store offset=1049028 + end + local.get 9 + i32.const 2147483646 + i32.gt_u + br_if 1 (;@4;) + local.get 9 + call 11 + local.set 0 + i32.const 0 + call 11 + local.set 4 + local.get 0 + i32.const -1 + i32.eq + br_if 1 (;@4;) + local.get 4 + i32.const -1 + i32.eq + br_if 1 (;@4;) + local.get 0 + local.get 4 + i32.ge_u + br_if 1 (;@4;) + local.get 4 + local.get 0 + i32.sub + local.tee 6 + local.get 7 + i32.const 56 + i32.add + i32.le_u + br_if 1 (;@4;) + end + i32.const 0 + i32.const 0 + i32.load offset=1049016 + local.get 6 + i32.add + local.tee 4 + i32.store offset=1049016 + block ;; label = @5 + local.get 4 + i32.const 0 + i32.load offset=1049020 + i32.le_u + br_if 0 (;@5;) + i32.const 0 + local.get 4 + i32.store offset=1049020 + end + block ;; label = @5 + block ;; label = @6 + block ;; label = @7 + block ;; label = @8 + i32.const 0 + i32.load offset=1048608 + local.tee 3 + i32.eqz + br_if 0 (;@8;) + i32.const 1049032 + local.set 4 + loop ;; label = @9 + local.get 0 + local.get 4 + i32.load + local.tee 5 + local.get 4 + i32.load offset=4 + local.tee 9 + i32.add + i32.eq + br_if 2 (;@7;) + local.get 4 + i32.load offset=8 + local.tee 4 + br_if 0 (;@9;) + br 3 (;@6;) + end + end + block ;; label = @8 + block ;; label = @9 + i32.const 0 + i32.load offset=1048600 + local.tee 4 + i32.eqz + br_if 0 (;@9;) + local.get 0 + local.get 4 + i32.ge_u + br_if 1 (;@8;) + end + i32.const 0 + local.get 0 + i32.store offset=1048600 + end + i32.const 0 + local.set 4 + i32.const 0 + local.get 6 + i32.store offset=1049036 + i32.const 0 + local.get 0 + i32.store offset=1049032 + i32.const 0 + i32.const -1 + i32.store offset=1048616 + i32.const 0 + i32.const 0 + i32.load offset=1049056 + i32.store offset=1048620 + i32.const 0 + i32.const 0 + i32.store offset=1049044 + loop ;; label = @8 + local.get 4 + i32.const 1048644 + i32.add + local.get 4 + i32.const 1048632 + i32.add + local.tee 3 + i32.store + local.get 3 + local.get 4 + i32.const 1048624 + i32.add + local.tee 5 + i32.store + local.get 4 + i32.const 1048636 + i32.add + local.get 5 + i32.store + local.get 4 + i32.const 1048652 + i32.add + local.get 4 + i32.const 1048640 + i32.add + local.tee 5 + i32.store + local.get 5 + local.get 3 + i32.store + local.get 4 + i32.const 1048660 + i32.add + local.get 4 + i32.const 1048648 + i32.add + local.tee 3 + i32.store + local.get 3 + local.get 5 + i32.store + local.get 4 + i32.const 1048656 + i32.add + local.get 3 + i32.store + local.get 4 + i32.const 32 + i32.add + local.tee 4 + i32.const 256 + i32.ne + br_if 0 (;@8;) + end + local.get 0 + i32.const -8 + local.get 0 + i32.sub + i32.const 15 + i32.and + i32.const 0 + local.get 0 + i32.const 8 + i32.add + i32.const 15 + i32.and + select + local.tee 4 + i32.add + local.tee 3 + local.get 6 + i32.const -56 + i32.add + local.tee 5 + local.get 4 + i32.sub + local.tee 4 + i32.const 1 + i32.or + i32.store offset=4 + i32.const 0 + i32.const 0 + i32.load offset=1049072 + i32.store offset=1048612 + i32.const 0 + local.get 4 + i32.store offset=1048596 + i32.const 0 + local.get 3 + i32.store offset=1048608 + local.get 0 + local.get 5 + i32.add + i32.const 56 + i32.store offset=4 + br 2 (;@5;) + end + local.get 4 + i32.load8_u offset=12 + i32.const 8 + i32.and + br_if 0 (;@6;) + local.get 3 + local.get 5 + i32.lt_u + br_if 0 (;@6;) + local.get 3 + local.get 0 + i32.ge_u + br_if 0 (;@6;) + local.get 3 + i32.const -8 + local.get 3 + i32.sub + i32.const 15 + i32.and + i32.const 0 + local.get 3 + i32.const 8 + i32.add + i32.const 15 + i32.and + select + local.tee 5 + i32.add + local.tee 0 + i32.const 0 + i32.load offset=1048596 + local.get 6 + i32.add + local.tee 2 + local.get 5 + i32.sub + local.tee 5 + i32.const 1 + i32.or + i32.store offset=4 + local.get 4 + local.get 9 + local.get 6 + i32.add + i32.store offset=4 + i32.const 0 + i32.const 0 + i32.load offset=1049072 + i32.store offset=1048612 + i32.const 0 + local.get 5 + i32.store offset=1048596 + i32.const 0 + local.get 0 + i32.store offset=1048608 + local.get 3 + local.get 2 + i32.add + i32.const 56 + i32.store offset=4 + br 1 (;@5;) + end + block ;; label = @6 + local.get 0 + i32.const 0 + i32.load offset=1048600 + local.tee 9 + i32.ge_u + br_if 0 (;@6;) + i32.const 0 + local.get 0 + i32.store offset=1048600 + local.get 0 + local.set 9 + end + local.get 0 + local.get 6 + i32.add + local.set 5 + i32.const 1049032 + local.set 4 + block ;; label = @6 + block ;; label = @7 + block ;; label = @8 + block ;; label = @9 + block ;; label = @10 + block ;; label = @11 + block ;; label = @12 + loop ;; label = @13 + local.get 4 + i32.load + local.get 5 + i32.eq + br_if 1 (;@12;) + local.get 4 + i32.load offset=8 + local.tee 4 + br_if 0 (;@13;) + br 2 (;@11;) + end + end + local.get 4 + i32.load8_u offset=12 + i32.const 8 + i32.and + i32.eqz + br_if 1 (;@10;) + end + i32.const 1049032 + local.set 4 + loop ;; label = @11 + block ;; label = @12 + local.get 4 + i32.load + local.tee 5 + local.get 3 + i32.gt_u + br_if 0 (;@12;) + local.get 5 + local.get 4 + i32.load offset=4 + i32.add + local.tee 5 + local.get 3 + i32.gt_u + br_if 3 (;@9;) + end + local.get 4 + i32.load offset=8 + local.set 4 + br 0 (;@11;) + end + end + local.get 4 + local.get 0 + i32.store + local.get 4 + local.get 4 + i32.load offset=4 + local.get 6 + i32.add + i32.store offset=4 + local.get 0 + i32.const -8 + local.get 0 + i32.sub + i32.const 15 + i32.and + i32.const 0 + local.get 0 + i32.const 8 + i32.add + i32.const 15 + i32.and + select + i32.add + local.tee 2 + local.get 7 + i32.const 3 + i32.or + i32.store offset=4 + local.get 5 + i32.const -8 + local.get 5 + i32.sub + i32.const 15 + i32.and + i32.const 0 + local.get 5 + i32.const 8 + i32.add + i32.const 15 + i32.and + select + i32.add + local.tee 6 + local.get 2 + local.get 7 + i32.add + local.tee 7 + i32.sub + local.set 4 + block ;; label = @10 + local.get 6 + local.get 3 + i32.ne + br_if 0 (;@10;) + i32.const 0 + local.get 7 + i32.store offset=1048608 + i32.const 0 + i32.const 0 + i32.load offset=1048596 + local.get 4 + i32.add + local.tee 4 + i32.store offset=1048596 + local.get 7 + local.get 4 + i32.const 1 + i32.or + i32.store offset=4 + br 3 (;@7;) + end + block ;; label = @10 + local.get 6 + i32.const 0 + i32.load offset=1048604 + i32.ne + br_if 0 (;@10;) + i32.const 0 + local.get 7 + i32.store offset=1048604 + i32.const 0 + i32.const 0 + i32.load offset=1048592 + local.get 4 + i32.add + local.tee 4 + i32.store offset=1048592 + local.get 7 + local.get 4 + i32.const 1 + i32.or + i32.store offset=4 + local.get 7 + local.get 4 + i32.add + local.get 4 + i32.store + br 3 (;@7;) + end + block ;; label = @10 + local.get 6 + i32.load offset=4 + local.tee 3 + i32.const 3 + i32.and + i32.const 1 + i32.ne + br_if 0 (;@10;) + local.get 3 + i32.const -8 + i32.and + local.set 8 + block ;; label = @11 + block ;; label = @12 + local.get 3 + i32.const 255 + i32.gt_u + br_if 0 (;@12;) + local.get 6 + i32.load offset=8 + local.tee 5 + local.get 3 + i32.const 3 + i32.shr_u + local.tee 9 + i32.const 3 + i32.shl + i32.const 1048624 + i32.add + local.tee 0 + i32.eq + drop + block ;; label = @13 + local.get 6 + i32.load offset=12 + local.tee 3 + local.get 5 + i32.ne + br_if 0 (;@13;) + i32.const 0 + i32.const 0 + i32.load offset=1048584 + i32.const -2 + local.get 9 + i32.rotl + i32.and + i32.store offset=1048584 + br 2 (;@11;) + end + local.get 3 + local.get 0 + i32.eq + drop + local.get 3 + local.get 5 + i32.store offset=8 + local.get 5 + local.get 3 + i32.store offset=12 + br 1 (;@11;) + end + local.get 6 + i32.load offset=24 + local.set 10 + block ;; label = @12 + block ;; label = @13 + local.get 6 + i32.load offset=12 + local.tee 0 + local.get 6 + i32.eq + br_if 0 (;@13;) + local.get 6 + i32.load offset=8 + local.tee 3 + local.get 9 + i32.lt_u + drop + local.get 0 + local.get 3 + i32.store offset=8 + local.get 3 + local.get 0 + i32.store offset=12 + br 1 (;@12;) + end + block ;; label = @13 + local.get 6 + i32.const 20 + i32.add + local.tee 3 + i32.load + local.tee 5 + br_if 0 (;@13;) + local.get 6 + i32.const 16 + i32.add + local.tee 3 + i32.load + local.tee 5 + br_if 0 (;@13;) + i32.const 0 + local.set 0 + br 1 (;@12;) + end + loop ;; label = @13 + local.get 3 + local.set 9 + local.get 5 + local.tee 0 + i32.const 20 + i32.add + local.tee 3 + i32.load + local.tee 5 + br_if 0 (;@13;) + local.get 0 + i32.const 16 + i32.add + local.set 3 + local.get 0 + i32.load offset=16 + local.tee 5 + br_if 0 (;@13;) + end + local.get 9 + i32.const 0 + i32.store + end + local.get 10 + i32.eqz + br_if 0 (;@11;) + block ;; label = @12 + block ;; label = @13 + local.get 6 + local.get 6 + i32.load offset=28 + local.tee 5 + i32.const 2 + i32.shl + i32.const 1048888 + i32.add + local.tee 3 + i32.load + i32.ne + br_if 0 (;@13;) + local.get 3 + local.get 0 + i32.store + local.get 0 + br_if 1 (;@12;) + i32.const 0 + i32.const 0 + i32.load offset=1048588 + i32.const -2 + local.get 5 + i32.rotl + i32.and + i32.store offset=1048588 + br 2 (;@11;) + end + local.get 10 + i32.const 16 + i32.const 20 + local.get 10 + i32.load offset=16 + local.get 6 + i32.eq + select + i32.add + local.get 0 + i32.store + local.get 0 + i32.eqz + br_if 1 (;@11;) + end + local.get 0 + local.get 10 + i32.store offset=24 + block ;; label = @12 + local.get 6 + i32.load offset=16 + local.tee 3 + i32.eqz + br_if 0 (;@12;) + local.get 0 + local.get 3 + i32.store offset=16 + local.get 3 + local.get 0 + i32.store offset=24 + end + local.get 6 + i32.load offset=20 + local.tee 3 + i32.eqz + br_if 0 (;@11;) + local.get 0 + i32.const 20 + i32.add + local.get 3 + i32.store + local.get 3 + local.get 0 + i32.store offset=24 + end + local.get 8 + local.get 4 + i32.add + local.set 4 + local.get 6 + local.get 8 + i32.add + local.tee 6 + i32.load offset=4 + local.set 3 + end + local.get 6 + local.get 3 + i32.const -2 + i32.and + i32.store offset=4 + local.get 7 + local.get 4 + i32.add + local.get 4 + i32.store + local.get 7 + local.get 4 + i32.const 1 + i32.or + i32.store offset=4 + block ;; label = @10 + local.get 4 + i32.const 255 + i32.gt_u + br_if 0 (;@10;) + local.get 4 + i32.const -8 + i32.and + i32.const 1048624 + i32.add + local.set 3 + block ;; label = @11 + block ;; label = @12 + i32.const 0 + i32.load offset=1048584 + local.tee 5 + i32.const 1 + local.get 4 + i32.const 3 + i32.shr_u + i32.shl + local.tee 4 + i32.and + br_if 0 (;@12;) + i32.const 0 + local.get 5 + local.get 4 + i32.or + i32.store offset=1048584 + local.get 3 + local.set 4 + br 1 (;@11;) + end + local.get 3 + i32.load offset=8 + local.set 4 + end + local.get 4 + local.get 7 + i32.store offset=12 + local.get 3 + local.get 7 + i32.store offset=8 + local.get 7 + local.get 3 + i32.store offset=12 + local.get 7 + local.get 4 + i32.store offset=8 + br 3 (;@7;) + end + i32.const 31 + local.set 3 + block ;; label = @10 + local.get 4 + i32.const 16777215 + i32.gt_u + br_if 0 (;@10;) + local.get 4 + i32.const 38 + local.get 4 + i32.const 8 + i32.shr_u + i32.clz + local.tee 3 + i32.sub + i32.shr_u + i32.const 1 + i32.and + local.get 3 + i32.const 1 + i32.shl + i32.sub + i32.const 62 + i32.add + local.set 3 + end + local.get 7 + local.get 3 + i32.store offset=28 + local.get 7 + i64.const 0 + i64.store offset=16 align=4 + local.get 3 + i32.const 2 + i32.shl + i32.const 1048888 + i32.add + local.set 5 + block ;; label = @10 + i32.const 0 + i32.load offset=1048588 + local.tee 0 + i32.const 1 + local.get 3 + i32.shl + local.tee 9 + i32.and + br_if 0 (;@10;) + local.get 5 + local.get 7 + i32.store + i32.const 0 + local.get 0 + local.get 9 + i32.or + i32.store offset=1048588 + local.get 7 + local.get 5 + i32.store offset=24 + local.get 7 + local.get 7 + i32.store offset=8 + local.get 7 + local.get 7 + i32.store offset=12 + br 3 (;@7;) + end + local.get 4 + i32.const 0 + i32.const 25 + local.get 3 + i32.const 1 + i32.shr_u + i32.sub + local.get 3 + i32.const 31 + i32.eq + select + i32.shl + local.set 3 + local.get 5 + i32.load + local.set 0 + loop ;; label = @10 + local.get 0 + local.tee 5 + i32.load offset=4 + i32.const -8 + i32.and + local.get 4 + i32.eq + br_if 2 (;@8;) + local.get 3 + i32.const 29 + i32.shr_u + local.set 0 + local.get 3 + i32.const 1 + i32.shl + local.set 3 + local.get 5 + local.get 0 + i32.const 4 + i32.and + i32.add + i32.const 16 + i32.add + local.tee 9 + i32.load + local.tee 0 + br_if 0 (;@10;) + end + local.get 9 + local.get 7 + i32.store + local.get 7 + local.get 5 + i32.store offset=24 + local.get 7 + local.get 7 + i32.store offset=12 + local.get 7 + local.get 7 + i32.store offset=8 + br 2 (;@7;) + end + local.get 0 + i32.const -8 + local.get 0 + i32.sub + i32.const 15 + i32.and + i32.const 0 + local.get 0 + i32.const 8 + i32.add + i32.const 15 + i32.and + select + local.tee 4 + i32.add + local.tee 2 + local.get 6 + i32.const -56 + i32.add + local.tee 9 + local.get 4 + i32.sub + local.tee 4 + i32.const 1 + i32.or + i32.store offset=4 + local.get 0 + local.get 9 + i32.add + i32.const 56 + i32.store offset=4 + local.get 3 + local.get 5 + i32.const 55 + local.get 5 + i32.sub + i32.const 15 + i32.and + i32.const 0 + local.get 5 + i32.const -55 + i32.add + i32.const 15 + i32.and + select + i32.add + i32.const -63 + i32.add + local.tee 9 + local.get 9 + local.get 3 + i32.const 16 + i32.add + i32.lt_u + select + local.tee 9 + i32.const 35 + i32.store offset=4 + i32.const 0 + i32.const 0 + i32.load offset=1049072 + i32.store offset=1048612 + i32.const 0 + local.get 4 + i32.store offset=1048596 + i32.const 0 + local.get 2 + i32.store offset=1048608 + local.get 9 + i32.const 16 + i32.add + i32.const 0 + i64.load offset=1049040 align=4 + i64.store align=4 + local.get 9 + i32.const 0 + i64.load offset=1049032 align=4 + i64.store offset=8 align=4 + i32.const 0 + local.get 9 + i32.const 8 + i32.add + i32.store offset=1049040 + i32.const 0 + local.get 6 + i32.store offset=1049036 + i32.const 0 + local.get 0 + i32.store offset=1049032 + i32.const 0 + i32.const 0 + i32.store offset=1049044 + local.get 9 + i32.const 36 + i32.add + local.set 4 + loop ;; label = @9 + local.get 4 + i32.const 7 + i32.store + local.get 4 + i32.const 4 + i32.add + local.tee 4 + local.get 5 + i32.lt_u + br_if 0 (;@9;) + end + local.get 9 + local.get 3 + i32.eq + br_if 3 (;@5;) + local.get 9 + local.get 9 + i32.load offset=4 + i32.const -2 + i32.and + i32.store offset=4 + local.get 9 + local.get 9 + local.get 3 + i32.sub + local.tee 0 + i32.store + local.get 3 + local.get 0 + i32.const 1 + i32.or + i32.store offset=4 + block ;; label = @9 + local.get 0 + i32.const 255 + i32.gt_u + br_if 0 (;@9;) + local.get 0 + i32.const -8 + i32.and + i32.const 1048624 + i32.add + local.set 4 + block ;; label = @10 + block ;; label = @11 + i32.const 0 + i32.load offset=1048584 + local.tee 5 + i32.const 1 + local.get 0 + i32.const 3 + i32.shr_u + i32.shl + local.tee 0 + i32.and + br_if 0 (;@11;) + i32.const 0 + local.get 5 + local.get 0 + i32.or + i32.store offset=1048584 + local.get 4 + local.set 5 + br 1 (;@10;) + end + local.get 4 + i32.load offset=8 + local.set 5 + end + local.get 5 + local.get 3 + i32.store offset=12 + local.get 4 + local.get 3 + i32.store offset=8 + local.get 3 + local.get 4 + i32.store offset=12 + local.get 3 + local.get 5 + i32.store offset=8 + br 4 (;@5;) + end + i32.const 31 + local.set 4 + block ;; label = @9 + local.get 0 + i32.const 16777215 + i32.gt_u + br_if 0 (;@9;) + local.get 0 + i32.const 38 + local.get 0 + i32.const 8 + i32.shr_u + i32.clz + local.tee 4 + i32.sub + i32.shr_u + i32.const 1 + i32.and + local.get 4 + i32.const 1 + i32.shl + i32.sub + i32.const 62 + i32.add + local.set 4 + end + local.get 3 + local.get 4 + i32.store offset=28 + local.get 3 + i64.const 0 + i64.store offset=16 align=4 + local.get 4 + i32.const 2 + i32.shl + i32.const 1048888 + i32.add + local.set 5 + block ;; label = @9 + i32.const 0 + i32.load offset=1048588 + local.tee 9 + i32.const 1 + local.get 4 + i32.shl + local.tee 6 + i32.and + br_if 0 (;@9;) + local.get 5 + local.get 3 + i32.store + i32.const 0 + local.get 9 + local.get 6 + i32.or + i32.store offset=1048588 + local.get 3 + local.get 5 + i32.store offset=24 + local.get 3 + local.get 3 + i32.store offset=8 + local.get 3 + local.get 3 + i32.store offset=12 + br 4 (;@5;) + end + local.get 0 + i32.const 0 + i32.const 25 + local.get 4 + i32.const 1 + i32.shr_u + i32.sub + local.get 4 + i32.const 31 + i32.eq + select + i32.shl + local.set 4 + local.get 5 + i32.load + local.set 9 + loop ;; label = @9 + local.get 9 + local.tee 5 + i32.load offset=4 + i32.const -8 + i32.and + local.get 0 + i32.eq + br_if 3 (;@6;) + local.get 4 + i32.const 29 + i32.shr_u + local.set 9 + local.get 4 + i32.const 1 + i32.shl + local.set 4 + local.get 5 + local.get 9 + i32.const 4 + i32.and + i32.add + i32.const 16 + i32.add + local.tee 6 + i32.load + local.tee 9 + br_if 0 (;@9;) + end + local.get 6 + local.get 3 + i32.store + local.get 3 + local.get 5 + i32.store offset=24 + local.get 3 + local.get 3 + i32.store offset=12 + local.get 3 + local.get 3 + i32.store offset=8 + br 3 (;@5;) + end + local.get 5 + i32.load offset=8 + local.tee 4 + local.get 7 + i32.store offset=12 + local.get 5 + local.get 7 + i32.store offset=8 + local.get 7 + i32.const 0 + i32.store offset=24 + local.get 7 + local.get 5 + i32.store offset=12 + local.get 7 + local.get 4 + i32.store offset=8 + end + local.get 2 + i32.const 8 + i32.add + local.set 4 + br 5 (;@1;) + end + local.get 5 + i32.load offset=8 + local.tee 4 + local.get 3 + i32.store offset=12 + local.get 5 + local.get 3 + i32.store offset=8 + local.get 3 + i32.const 0 + i32.store offset=24 + local.get 3 + local.get 5 + i32.store offset=12 + local.get 3 + local.get 4 + i32.store offset=8 + end + i32.const 0 + i32.load offset=1048596 + local.tee 4 + local.get 7 + i32.le_u + br_if 0 (;@4;) + i32.const 0 + i32.load offset=1048608 + local.tee 3 + local.get 7 + i32.add + local.tee 5 + local.get 4 + local.get 7 + i32.sub + local.tee 4 + i32.const 1 + i32.or + i32.store offset=4 + i32.const 0 + local.get 4 + i32.store offset=1048596 + i32.const 0 + local.get 5 + i32.store offset=1048608 + local.get 3 + local.get 7 + i32.const 3 + i32.or + i32.store offset=4 + local.get 3 + i32.const 8 + i32.add + local.set 4 + br 3 (;@1;) + end + i32.const 0 + local.set 4 + i32.const 0 + i32.const 48 + i32.store offset=1049080 + br 2 (;@1;) + end + block ;; label = @3 + local.get 2 + i32.eqz + br_if 0 (;@3;) + block ;; label = @4 + block ;; label = @5 + local.get 9 + local.get 9 + i32.load offset=28 + local.tee 5 + i32.const 2 + i32.shl + i32.const 1048888 + i32.add + local.tee 4 + i32.load + i32.ne + br_if 0 (;@5;) + local.get 4 + local.get 0 + i32.store + local.get 0 + br_if 1 (;@4;) + i32.const 0 + local.get 10 + i32.const -2 + local.get 5 + i32.rotl + i32.and + local.tee 10 + i32.store offset=1048588 + br 2 (;@3;) + end + local.get 2 + i32.const 16 + i32.const 20 + local.get 2 + i32.load offset=16 + local.get 9 + i32.eq + select + i32.add + local.get 0 + i32.store + local.get 0 + i32.eqz + br_if 1 (;@3;) + end + local.get 0 + local.get 2 + i32.store offset=24 + block ;; label = @4 + local.get 9 + i32.load offset=16 + local.tee 4 + i32.eqz + br_if 0 (;@4;) + local.get 0 + local.get 4 + i32.store offset=16 + local.get 4 + local.get 0 + i32.store offset=24 + end + local.get 9 + i32.const 20 + i32.add + i32.load + local.tee 4 + i32.eqz + br_if 0 (;@3;) + local.get 0 + i32.const 20 + i32.add + local.get 4 + i32.store + local.get 4 + local.get 0 + i32.store offset=24 + end + block ;; label = @3 + block ;; label = @4 + local.get 3 + i32.const 15 + i32.gt_u + br_if 0 (;@4;) + local.get 9 + local.get 3 + local.get 7 + i32.add + local.tee 4 + i32.const 3 + i32.or + i32.store offset=4 + local.get 9 + local.get 4 + i32.add + local.tee 4 + local.get 4 + i32.load offset=4 + i32.const 1 + i32.or + i32.store offset=4 + br 1 (;@3;) + end + local.get 9 + local.get 7 + i32.add + local.tee 0 + local.get 3 + i32.const 1 + i32.or + i32.store offset=4 + local.get 9 + local.get 7 + i32.const 3 + i32.or + i32.store offset=4 + local.get 0 + local.get 3 + i32.add + local.get 3 + i32.store + block ;; label = @4 + local.get 3 + i32.const 255 + i32.gt_u + br_if 0 (;@4;) + local.get 3 + i32.const -8 + i32.and + i32.const 1048624 + i32.add + local.set 4 + block ;; label = @5 + block ;; label = @6 + i32.const 0 + i32.load offset=1048584 + local.tee 5 + i32.const 1 + local.get 3 + i32.const 3 + i32.shr_u + i32.shl + local.tee 3 + i32.and + br_if 0 (;@6;) + i32.const 0 + local.get 5 + local.get 3 + i32.or + i32.store offset=1048584 + local.get 4 + local.set 3 + br 1 (;@5;) + end + local.get 4 + i32.load offset=8 + local.set 3 + end + local.get 3 + local.get 0 + i32.store offset=12 + local.get 4 + local.get 0 + i32.store offset=8 + local.get 0 + local.get 4 + i32.store offset=12 + local.get 0 + local.get 3 + i32.store offset=8 + br 1 (;@3;) + end + i32.const 31 + local.set 4 + block ;; label = @4 + local.get 3 + i32.const 16777215 + i32.gt_u + br_if 0 (;@4;) + local.get 3 + i32.const 38 + local.get 3 + i32.const 8 + i32.shr_u + i32.clz + local.tee 4 + i32.sub + i32.shr_u + i32.const 1 + i32.and + local.get 4 + i32.const 1 + i32.shl + i32.sub + i32.const 62 + i32.add + local.set 4 + end + local.get 0 + local.get 4 + i32.store offset=28 + local.get 0 + i64.const 0 + i64.store offset=16 align=4 + local.get 4 + i32.const 2 + i32.shl + i32.const 1048888 + i32.add + local.set 5 + block ;; label = @4 + local.get 10 + i32.const 1 + local.get 4 + i32.shl + local.tee 7 + i32.and + br_if 0 (;@4;) + local.get 5 + local.get 0 + i32.store + i32.const 0 + local.get 10 + local.get 7 + i32.or + i32.store offset=1048588 + local.get 0 + local.get 5 + i32.store offset=24 + local.get 0 + local.get 0 + i32.store offset=8 + local.get 0 + local.get 0 + i32.store offset=12 + br 1 (;@3;) + end + local.get 3 + i32.const 0 + i32.const 25 + local.get 4 + i32.const 1 + i32.shr_u + i32.sub + local.get 4 + i32.const 31 + i32.eq + select + i32.shl + local.set 4 + local.get 5 + i32.load + local.set 7 + block ;; label = @4 + loop ;; label = @5 + local.get 7 + local.tee 5 + i32.load offset=4 + i32.const -8 + i32.and + local.get 3 + i32.eq + br_if 1 (;@4;) + local.get 4 + i32.const 29 + i32.shr_u + local.set 7 + local.get 4 + i32.const 1 + i32.shl + local.set 4 + local.get 5 + local.get 7 + i32.const 4 + i32.and + i32.add + i32.const 16 + i32.add + local.tee 6 + i32.load + local.tee 7 + br_if 0 (;@5;) + end + local.get 6 + local.get 0 + i32.store + local.get 0 + local.get 5 + i32.store offset=24 + local.get 0 + local.get 0 + i32.store offset=12 + local.get 0 + local.get 0 + i32.store offset=8 + br 1 (;@3;) + end + local.get 5 + i32.load offset=8 + local.tee 4 + local.get 0 + i32.store offset=12 + local.get 5 + local.get 0 + i32.store offset=8 + local.get 0 + i32.const 0 + i32.store offset=24 + local.get 0 + local.get 5 + i32.store offset=12 + local.get 0 + local.get 4 + i32.store offset=8 + end + local.get 9 + i32.const 8 + i32.add + local.set 4 + br 1 (;@1;) + end + block ;; label = @2 + local.get 11 + i32.eqz + br_if 0 (;@2;) + block ;; label = @3 + block ;; label = @4 + local.get 0 + local.get 0 + i32.load offset=28 + local.tee 5 + i32.const 2 + i32.shl + i32.const 1048888 + i32.add + local.tee 4 + i32.load + i32.ne + br_if 0 (;@4;) + local.get 4 + local.get 9 + i32.store + local.get 9 + br_if 1 (;@3;) + i32.const 0 + local.get 10 + i32.const -2 + local.get 5 + i32.rotl + i32.and + i32.store offset=1048588 + br 2 (;@2;) + end + local.get 11 + i32.const 16 + i32.const 20 + local.get 11 + i32.load offset=16 + local.get 0 + i32.eq + select + i32.add + local.get 9 + i32.store + local.get 9 + i32.eqz + br_if 1 (;@2;) + end + local.get 9 + local.get 11 + i32.store offset=24 + block ;; label = @3 + local.get 0 + i32.load offset=16 + local.tee 4 + i32.eqz + br_if 0 (;@3;) + local.get 9 + local.get 4 + i32.store offset=16 + local.get 4 + local.get 9 + i32.store offset=24 + end + local.get 0 + i32.const 20 + i32.add + i32.load + local.tee 4 + i32.eqz + br_if 0 (;@2;) + local.get 9 + i32.const 20 + i32.add + local.get 4 + i32.store + local.get 4 + local.get 9 + i32.store offset=24 + end + block ;; label = @2 + block ;; label = @3 + local.get 3 + i32.const 15 + i32.gt_u + br_if 0 (;@3;) + local.get 0 + local.get 3 + local.get 7 + i32.add + local.tee 4 + i32.const 3 + i32.or + i32.store offset=4 + local.get 0 + local.get 4 + i32.add + local.tee 4 + local.get 4 + i32.load offset=4 + i32.const 1 + i32.or + i32.store offset=4 + br 1 (;@2;) + end + local.get 0 + local.get 7 + i32.add + local.tee 5 + local.get 3 + i32.const 1 + i32.or + i32.store offset=4 + local.get 0 + local.get 7 + i32.const 3 + i32.or + i32.store offset=4 + local.get 5 + local.get 3 + i32.add + local.get 3 + i32.store + block ;; label = @3 + local.get 8 + i32.eqz + br_if 0 (;@3;) + local.get 8 + i32.const -8 + i32.and + i32.const 1048624 + i32.add + local.set 7 + i32.const 0 + i32.load offset=1048604 + local.set 4 + block ;; label = @4 + block ;; label = @5 + i32.const 1 + local.get 8 + i32.const 3 + i32.shr_u + i32.shl + local.tee 9 + local.get 6 + i32.and + br_if 0 (;@5;) + i32.const 0 + local.get 9 + local.get 6 + i32.or + i32.store offset=1048584 + local.get 7 + local.set 9 + br 1 (;@4;) + end + local.get 7 + i32.load offset=8 + local.set 9 + end + local.get 9 + local.get 4 + i32.store offset=12 + local.get 7 + local.get 4 + i32.store offset=8 + local.get 4 + local.get 7 + i32.store offset=12 + local.get 4 + local.get 9 + i32.store offset=8 + end + i32.const 0 + local.get 5 + i32.store offset=1048604 + i32.const 0 + local.get 3 + i32.store offset=1048592 + end + local.get 0 + i32.const 8 + i32.add + local.set 4 + end + local.get 1 + i32.const 16 + i32.add + global.set 0 + local.get 4 + ) + (func (;4;) (type 3) (param i32) + local.get 0 + call 5 + ) + (func (;5;) (type 3) (param i32) + (local i32 i32 i32 i32 i32 i32 i32) + block ;; label = @1 + local.get 0 + i32.eqz + br_if 0 (;@1;) + local.get 0 + i32.const -8 + i32.add + local.tee 1 + local.get 0 + i32.const -4 + i32.add + i32.load + local.tee 2 + i32.const -8 + i32.and + local.tee 0 + i32.add + local.set 3 + block ;; label = @2 + local.get 2 + i32.const 1 + i32.and + br_if 0 (;@2;) + local.get 2 + i32.const 3 + i32.and + i32.eqz + br_if 1 (;@1;) + local.get 1 + local.get 1 + i32.load + local.tee 2 + i32.sub + local.tee 1 + i32.const 0 + i32.load offset=1048600 + local.tee 4 + i32.lt_u + br_if 1 (;@1;) + local.get 2 + local.get 0 + i32.add + local.set 0 + block ;; label = @3 + local.get 1 + i32.const 0 + i32.load offset=1048604 + i32.eq + br_if 0 (;@3;) + block ;; label = @4 + local.get 2 + i32.const 255 + i32.gt_u + br_if 0 (;@4;) + local.get 1 + i32.load offset=8 + local.tee 4 + local.get 2 + i32.const 3 + i32.shr_u + local.tee 5 + i32.const 3 + i32.shl + i32.const 1048624 + i32.add + local.tee 6 + i32.eq + drop + block ;; label = @5 + local.get 1 + i32.load offset=12 + local.tee 2 + local.get 4 + i32.ne + br_if 0 (;@5;) + i32.const 0 + i32.const 0 + i32.load offset=1048584 + i32.const -2 + local.get 5 + i32.rotl + i32.and + i32.store offset=1048584 + br 3 (;@2;) + end + local.get 2 + local.get 6 + i32.eq + drop + local.get 2 + local.get 4 + i32.store offset=8 + local.get 4 + local.get 2 + i32.store offset=12 + br 2 (;@2;) + end + local.get 1 + i32.load offset=24 + local.set 7 + block ;; label = @4 + block ;; label = @5 + local.get 1 + i32.load offset=12 + local.tee 6 + local.get 1 + i32.eq + br_if 0 (;@5;) + local.get 1 + i32.load offset=8 + local.tee 2 + local.get 4 + i32.lt_u + drop + local.get 6 + local.get 2 + i32.store offset=8 + local.get 2 + local.get 6 + i32.store offset=12 + br 1 (;@4;) + end + block ;; label = @5 + local.get 1 + i32.const 20 + i32.add + local.tee 2 + i32.load + local.tee 4 + br_if 0 (;@5;) + local.get 1 + i32.const 16 + i32.add + local.tee 2 + i32.load + local.tee 4 + br_if 0 (;@5;) + i32.const 0 + local.set 6 + br 1 (;@4;) + end + loop ;; label = @5 + local.get 2 + local.set 5 + local.get 4 + local.tee 6 + i32.const 20 + i32.add + local.tee 2 + i32.load + local.tee 4 + br_if 0 (;@5;) + local.get 6 + i32.const 16 + i32.add + local.set 2 + local.get 6 + i32.load offset=16 + local.tee 4 + br_if 0 (;@5;) + end + local.get 5 + i32.const 0 + i32.store + end + local.get 7 + i32.eqz + br_if 1 (;@2;) + block ;; label = @4 + block ;; label = @5 + local.get 1 + local.get 1 + i32.load offset=28 + local.tee 4 + i32.const 2 + i32.shl + i32.const 1048888 + i32.add + local.tee 2 + i32.load + i32.ne + br_if 0 (;@5;) + local.get 2 + local.get 6 + i32.store + local.get 6 + br_if 1 (;@4;) + i32.const 0 + i32.const 0 + i32.load offset=1048588 + i32.const -2 + local.get 4 + i32.rotl + i32.and + i32.store offset=1048588 + br 3 (;@2;) + end + local.get 7 + i32.const 16 + i32.const 20 + local.get 7 + i32.load offset=16 + local.get 1 + i32.eq + select + i32.add + local.get 6 + i32.store + local.get 6 + i32.eqz + br_if 2 (;@2;) + end + local.get 6 + local.get 7 + i32.store offset=24 + block ;; label = @4 + local.get 1 + i32.load offset=16 + local.tee 2 + i32.eqz + br_if 0 (;@4;) + local.get 6 + local.get 2 + i32.store offset=16 + local.get 2 + local.get 6 + i32.store offset=24 + end + local.get 1 + i32.load offset=20 + local.tee 2 + i32.eqz + br_if 1 (;@2;) + local.get 6 + i32.const 20 + i32.add + local.get 2 + i32.store + local.get 2 + local.get 6 + i32.store offset=24 + br 1 (;@2;) + end + local.get 3 + i32.load offset=4 + local.tee 2 + i32.const 3 + i32.and + i32.const 3 + i32.ne + br_if 0 (;@2;) + local.get 3 + local.get 2 + i32.const -2 + i32.and + i32.store offset=4 + i32.const 0 + local.get 0 + i32.store offset=1048592 + local.get 1 + local.get 0 + i32.add + local.get 0 + i32.store + local.get 1 + local.get 0 + i32.const 1 + i32.or + i32.store offset=4 + return + end + local.get 1 + local.get 3 + i32.ge_u + br_if 0 (;@1;) + local.get 3 + i32.load offset=4 + local.tee 2 + i32.const 1 + i32.and + i32.eqz + br_if 0 (;@1;) + block ;; label = @2 + block ;; label = @3 + local.get 2 + i32.const 2 + i32.and + br_if 0 (;@3;) + block ;; label = @4 + local.get 3 + i32.const 0 + i32.load offset=1048608 + i32.ne + br_if 0 (;@4;) + i32.const 0 + local.get 1 + i32.store offset=1048608 + i32.const 0 + i32.const 0 + i32.load offset=1048596 + local.get 0 + i32.add + local.tee 0 + i32.store offset=1048596 + local.get 1 + local.get 0 + i32.const 1 + i32.or + i32.store offset=4 + local.get 1 + i32.const 0 + i32.load offset=1048604 + i32.ne + br_if 3 (;@1;) + i32.const 0 + i32.const 0 + i32.store offset=1048592 + i32.const 0 + i32.const 0 + i32.store offset=1048604 + return + end + block ;; label = @4 + local.get 3 + i32.const 0 + i32.load offset=1048604 + i32.ne + br_if 0 (;@4;) + i32.const 0 + local.get 1 + i32.store offset=1048604 + i32.const 0 + i32.const 0 + i32.load offset=1048592 + local.get 0 + i32.add + local.tee 0 + i32.store offset=1048592 + local.get 1 + local.get 0 + i32.const 1 + i32.or + i32.store offset=4 + local.get 1 + local.get 0 + i32.add + local.get 0 + i32.store + return + end + local.get 2 + i32.const -8 + i32.and + local.get 0 + i32.add + local.set 0 + block ;; label = @4 + block ;; label = @5 + local.get 2 + i32.const 255 + i32.gt_u + br_if 0 (;@5;) + local.get 3 + i32.load offset=8 + local.tee 4 + local.get 2 + i32.const 3 + i32.shr_u + local.tee 5 + i32.const 3 + i32.shl + i32.const 1048624 + i32.add + local.tee 6 + i32.eq + drop + block ;; label = @6 + local.get 3 + i32.load offset=12 + local.tee 2 + local.get 4 + i32.ne + br_if 0 (;@6;) + i32.const 0 + i32.const 0 + i32.load offset=1048584 + i32.const -2 + local.get 5 + i32.rotl + i32.and + i32.store offset=1048584 + br 2 (;@4;) + end + local.get 2 + local.get 6 + i32.eq + drop + local.get 2 + local.get 4 + i32.store offset=8 + local.get 4 + local.get 2 + i32.store offset=12 + br 1 (;@4;) + end + local.get 3 + i32.load offset=24 + local.set 7 + block ;; label = @5 + block ;; label = @6 + local.get 3 + i32.load offset=12 + local.tee 6 + local.get 3 + i32.eq + br_if 0 (;@6;) + local.get 3 + i32.load offset=8 + local.tee 2 + i32.const 0 + i32.load offset=1048600 + i32.lt_u + drop + local.get 6 + local.get 2 + i32.store offset=8 + local.get 2 + local.get 6 + i32.store offset=12 + br 1 (;@5;) + end + block ;; label = @6 + local.get 3 + i32.const 20 + i32.add + local.tee 2 + i32.load + local.tee 4 + br_if 0 (;@6;) + local.get 3 + i32.const 16 + i32.add + local.tee 2 + i32.load + local.tee 4 + br_if 0 (;@6;) + i32.const 0 + local.set 6 + br 1 (;@5;) + end + loop ;; label = @6 + local.get 2 + local.set 5 + local.get 4 + local.tee 6 + i32.const 20 + i32.add + local.tee 2 + i32.load + local.tee 4 + br_if 0 (;@6;) + local.get 6 + i32.const 16 + i32.add + local.set 2 + local.get 6 + i32.load offset=16 + local.tee 4 + br_if 0 (;@6;) + end + local.get 5 + i32.const 0 + i32.store + end + local.get 7 + i32.eqz + br_if 0 (;@4;) + block ;; label = @5 + block ;; label = @6 + local.get 3 + local.get 3 + i32.load offset=28 + local.tee 4 + i32.const 2 + i32.shl + i32.const 1048888 + i32.add + local.tee 2 + i32.load + i32.ne + br_if 0 (;@6;) + local.get 2 + local.get 6 + i32.store + local.get 6 + br_if 1 (;@5;) + i32.const 0 + i32.const 0 + i32.load offset=1048588 + i32.const -2 + local.get 4 + i32.rotl + i32.and + i32.store offset=1048588 + br 2 (;@4;) + end + local.get 7 + i32.const 16 + i32.const 20 + local.get 7 + i32.load offset=16 + local.get 3 + i32.eq + select + i32.add + local.get 6 + i32.store + local.get 6 + i32.eqz + br_if 1 (;@4;) + end + local.get 6 + local.get 7 + i32.store offset=24 + block ;; label = @5 + local.get 3 + i32.load offset=16 + local.tee 2 + i32.eqz + br_if 0 (;@5;) + local.get 6 + local.get 2 + i32.store offset=16 + local.get 2 + local.get 6 + i32.store offset=24 + end + local.get 3 + i32.load offset=20 + local.tee 2 + i32.eqz + br_if 0 (;@4;) + local.get 6 + i32.const 20 + i32.add + local.get 2 + i32.store + local.get 2 + local.get 6 + i32.store offset=24 + end + local.get 1 + local.get 0 + i32.add + local.get 0 + i32.store + local.get 1 + local.get 0 + i32.const 1 + i32.or + i32.store offset=4 + local.get 1 + i32.const 0 + i32.load offset=1048604 + i32.ne + br_if 1 (;@2;) + i32.const 0 + local.get 0 + i32.store offset=1048592 + return + end + local.get 3 + local.get 2 + i32.const -2 + i32.and + i32.store offset=4 + local.get 1 + local.get 0 + i32.add + local.get 0 + i32.store + local.get 1 + local.get 0 + i32.const 1 + i32.or + i32.store offset=4 + end + block ;; label = @2 + local.get 0 + i32.const 255 + i32.gt_u + br_if 0 (;@2;) + local.get 0 + i32.const -8 + i32.and + i32.const 1048624 + i32.add + local.set 2 + block ;; label = @3 + block ;; label = @4 + i32.const 0 + i32.load offset=1048584 + local.tee 4 + i32.const 1 + local.get 0 + i32.const 3 + i32.shr_u + i32.shl + local.tee 0 + i32.and + br_if 0 (;@4;) + i32.const 0 + local.get 4 + local.get 0 + i32.or + i32.store offset=1048584 + local.get 2 + local.set 0 + br 1 (;@3;) + end + local.get 2 + i32.load offset=8 + local.set 0 + end + local.get 0 + local.get 1 + i32.store offset=12 + local.get 2 + local.get 1 + i32.store offset=8 + local.get 1 + local.get 2 + i32.store offset=12 + local.get 1 + local.get 0 + i32.store offset=8 + return + end + i32.const 31 + local.set 2 + block ;; label = @2 + local.get 0 + i32.const 16777215 + i32.gt_u + br_if 0 (;@2;) + local.get 0 + i32.const 38 + local.get 0 + i32.const 8 + i32.shr_u + i32.clz + local.tee 2 + i32.sub + i32.shr_u + i32.const 1 + i32.and + local.get 2 + i32.const 1 + i32.shl + i32.sub + i32.const 62 + i32.add + local.set 2 + end + local.get 1 + local.get 2 + i32.store offset=28 + local.get 1 + i64.const 0 + i64.store offset=16 align=4 + local.get 2 + i32.const 2 + i32.shl + i32.const 1048888 + i32.add + local.set 4 + block ;; label = @2 + block ;; label = @3 + i32.const 0 + i32.load offset=1048588 + local.tee 6 + i32.const 1 + local.get 2 + i32.shl + local.tee 3 + i32.and + br_if 0 (;@3;) + local.get 4 + local.get 1 + i32.store + i32.const 0 + local.get 6 + local.get 3 + i32.or + i32.store offset=1048588 + local.get 1 + local.get 4 + i32.store offset=24 + local.get 1 + local.get 1 + i32.store offset=8 + local.get 1 + local.get 1 + i32.store offset=12 + br 1 (;@2;) + end + local.get 0 + i32.const 0 + i32.const 25 + local.get 2 + i32.const 1 + i32.shr_u + i32.sub + local.get 2 + i32.const 31 + i32.eq + select + i32.shl + local.set 2 + local.get 4 + i32.load + local.set 6 + block ;; label = @3 + loop ;; label = @4 + local.get 6 + local.tee 4 + i32.load offset=4 + i32.const -8 + i32.and + local.get 0 + i32.eq + br_if 1 (;@3;) + local.get 2 + i32.const 29 + i32.shr_u + local.set 6 + local.get 2 + i32.const 1 + i32.shl + local.set 2 + local.get 4 + local.get 6 + i32.const 4 + i32.and + i32.add + i32.const 16 + i32.add + local.tee 3 + i32.load + local.tee 6 + br_if 0 (;@4;) + end + local.get 3 + local.get 1 + i32.store + local.get 1 + local.get 4 + i32.store offset=24 + local.get 1 + local.get 1 + i32.store offset=12 + local.get 1 + local.get 1 + i32.store offset=8 + br 1 (;@2;) + end + local.get 4 + i32.load offset=8 + local.tee 0 + local.get 1 + i32.store offset=12 + local.get 4 + local.get 1 + i32.store offset=8 + local.get 1 + i32.const 0 + i32.store offset=24 + local.get 1 + local.get 4 + i32.store offset=12 + local.get 1 + local.get 0 + i32.store offset=8 + end + i32.const 0 + i32.const 0 + i32.load offset=1048616 + i32.const -1 + i32.add + local.tee 1 + i32.const -1 + local.get 1 + select + i32.store offset=1048616 + end + ) + (func (;6;) (type 4) (param i32 i32) (result i32) + (local i32 i32 i32 i32 i32 i32 i32 i32 i32 i32 i32) + block ;; label = @1 + local.get 0 + br_if 0 (;@1;) + local.get 1 + call 3 + return + end + block ;; label = @1 + local.get 1 + i32.const -64 + i32.lt_u + br_if 0 (;@1;) + i32.const 0 + i32.const 48 + i32.store offset=1049080 + i32.const 0 + return + end + i32.const 16 + local.get 1 + i32.const 19 + i32.add + i32.const -16 + i32.and + local.get 1 + i32.const 11 + i32.lt_u + select + local.set 2 + local.get 0 + i32.const -4 + i32.add + local.tee 3 + i32.load + local.tee 4 + i32.const -8 + i32.and + local.set 5 + block ;; label = @1 + block ;; label = @2 + block ;; label = @3 + local.get 4 + i32.const 3 + i32.and + br_if 0 (;@3;) + local.get 2 + i32.const 256 + i32.lt_u + br_if 1 (;@2;) + local.get 5 + local.get 2 + i32.const 4 + i32.or + i32.lt_u + br_if 1 (;@2;) + local.get 5 + local.get 2 + i32.sub + i32.const 0 + i32.load offset=1049064 + i32.const 1 + i32.shl + i32.le_u + br_if 2 (;@1;) + br 1 (;@2;) + end + local.get 0 + i32.const -8 + i32.add + local.tee 6 + local.get 5 + i32.add + local.set 7 + block ;; label = @3 + local.get 5 + local.get 2 + i32.lt_u + br_if 0 (;@3;) + local.get 5 + local.get 2 + i32.sub + local.tee 1 + i32.const 16 + i32.lt_u + br_if 2 (;@1;) + local.get 3 + local.get 2 + local.get 4 + i32.const 1 + i32.and + i32.or + i32.const 2 + i32.or + i32.store + local.get 6 + local.get 2 + i32.add + local.tee 2 + local.get 1 + i32.const 3 + i32.or + i32.store offset=4 + local.get 7 + local.get 7 + i32.load offset=4 + i32.const 1 + i32.or + i32.store offset=4 + local.get 2 + local.get 1 + call 7 + local.get 0 + return + end + block ;; label = @3 + local.get 7 + i32.const 0 + i32.load offset=1048608 + i32.ne + br_if 0 (;@3;) + i32.const 0 + i32.load offset=1048596 + local.get 5 + i32.add + local.tee 5 + local.get 2 + i32.le_u + br_if 1 (;@2;) + local.get 3 + local.get 2 + local.get 4 + i32.const 1 + i32.and + i32.or + i32.const 2 + i32.or + i32.store + i32.const 0 + local.get 6 + local.get 2 + i32.add + local.tee 1 + i32.store offset=1048608 + i32.const 0 + local.get 5 + local.get 2 + i32.sub + local.tee 2 + i32.store offset=1048596 + local.get 1 + local.get 2 + i32.const 1 + i32.or + i32.store offset=4 + local.get 0 + return + end + block ;; label = @3 + local.get 7 + i32.const 0 + i32.load offset=1048604 + i32.ne + br_if 0 (;@3;) + i32.const 0 + i32.load offset=1048592 + local.get 5 + i32.add + local.tee 5 + local.get 2 + i32.lt_u + br_if 1 (;@2;) + block ;; label = @4 + block ;; label = @5 + local.get 5 + local.get 2 + i32.sub + local.tee 1 + i32.const 16 + i32.lt_u + br_if 0 (;@5;) + local.get 3 + local.get 2 + local.get 4 + i32.const 1 + i32.and + i32.or + i32.const 2 + i32.or + i32.store + local.get 6 + local.get 2 + i32.add + local.tee 2 + local.get 1 + i32.const 1 + i32.or + i32.store offset=4 + local.get 6 + local.get 5 + i32.add + local.tee 5 + local.get 1 + i32.store + local.get 5 + local.get 5 + i32.load offset=4 + i32.const -2 + i32.and + i32.store offset=4 + br 1 (;@4;) + end + local.get 3 + local.get 4 + i32.const 1 + i32.and + local.get 5 + i32.or + i32.const 2 + i32.or + i32.store + local.get 6 + local.get 5 + i32.add + local.tee 1 + local.get 1 + i32.load offset=4 + i32.const 1 + i32.or + i32.store offset=4 + i32.const 0 + local.set 1 + i32.const 0 + local.set 2 + end + i32.const 0 + local.get 2 + i32.store offset=1048604 + i32.const 0 + local.get 1 + i32.store offset=1048592 + local.get 0 + return + end + local.get 7 + i32.load offset=4 + local.tee 8 + i32.const 2 + i32.and + br_if 0 (;@2;) + local.get 8 + i32.const -8 + i32.and + local.get 5 + i32.add + local.tee 9 + local.get 2 + i32.lt_u + br_if 0 (;@2;) + local.get 9 + local.get 2 + i32.sub + local.set 10 + block ;; label = @3 + block ;; label = @4 + local.get 8 + i32.const 255 + i32.gt_u + br_if 0 (;@4;) + local.get 7 + i32.load offset=8 + local.tee 1 + local.get 8 + i32.const 3 + i32.shr_u + local.tee 11 + i32.const 3 + i32.shl + i32.const 1048624 + i32.add + local.tee 8 + i32.eq + drop + block ;; label = @5 + local.get 7 + i32.load offset=12 + local.tee 5 + local.get 1 + i32.ne + br_if 0 (;@5;) + i32.const 0 + i32.const 0 + i32.load offset=1048584 + i32.const -2 + local.get 11 + i32.rotl + i32.and + i32.store offset=1048584 + br 2 (;@3;) + end + local.get 5 + local.get 8 + i32.eq + drop + local.get 5 + local.get 1 + i32.store offset=8 + local.get 1 + local.get 5 + i32.store offset=12 + br 1 (;@3;) + end + local.get 7 + i32.load offset=24 + local.set 12 + block ;; label = @4 + block ;; label = @5 + local.get 7 + i32.load offset=12 + local.tee 8 + local.get 7 + i32.eq + br_if 0 (;@5;) + local.get 7 + i32.load offset=8 + local.tee 1 + i32.const 0 + i32.load offset=1048600 + i32.lt_u + drop + local.get 8 + local.get 1 + i32.store offset=8 + local.get 1 + local.get 8 + i32.store offset=12 + br 1 (;@4;) + end + block ;; label = @5 + local.get 7 + i32.const 20 + i32.add + local.tee 1 + i32.load + local.tee 5 + br_if 0 (;@5;) + local.get 7 + i32.const 16 + i32.add + local.tee 1 + i32.load + local.tee 5 + br_if 0 (;@5;) + i32.const 0 + local.set 8 + br 1 (;@4;) + end + loop ;; label = @5 + local.get 1 + local.set 11 + local.get 5 + local.tee 8 + i32.const 20 + i32.add + local.tee 1 + i32.load + local.tee 5 + br_if 0 (;@5;) + local.get 8 + i32.const 16 + i32.add + local.set 1 + local.get 8 + i32.load offset=16 + local.tee 5 + br_if 0 (;@5;) + end + local.get 11 + i32.const 0 + i32.store + end + local.get 12 + i32.eqz + br_if 0 (;@3;) + block ;; label = @4 + block ;; label = @5 + local.get 7 + local.get 7 + i32.load offset=28 + local.tee 5 + i32.const 2 + i32.shl + i32.const 1048888 + i32.add + local.tee 1 + i32.load + i32.ne + br_if 0 (;@5;) + local.get 1 + local.get 8 + i32.store + local.get 8 + br_if 1 (;@4;) + i32.const 0 + i32.const 0 + i32.load offset=1048588 + i32.const -2 + local.get 5 + i32.rotl + i32.and + i32.store offset=1048588 + br 2 (;@3;) + end + local.get 12 + i32.const 16 + i32.const 20 + local.get 12 + i32.load offset=16 + local.get 7 + i32.eq + select + i32.add + local.get 8 + i32.store + local.get 8 + i32.eqz + br_if 1 (;@3;) + end + local.get 8 + local.get 12 + i32.store offset=24 + block ;; label = @4 + local.get 7 + i32.load offset=16 + local.tee 1 + i32.eqz + br_if 0 (;@4;) + local.get 8 + local.get 1 + i32.store offset=16 + local.get 1 + local.get 8 + i32.store offset=24 + end + local.get 7 + i32.load offset=20 + local.tee 1 + i32.eqz + br_if 0 (;@3;) + local.get 8 + i32.const 20 + i32.add + local.get 1 + i32.store + local.get 1 + local.get 8 + i32.store offset=24 + end + block ;; label = @3 + local.get 10 + i32.const 15 + i32.gt_u + br_if 0 (;@3;) + local.get 3 + local.get 4 + i32.const 1 + i32.and + local.get 9 + i32.or + i32.const 2 + i32.or + i32.store + local.get 6 + local.get 9 + i32.add + local.tee 1 + local.get 1 + i32.load offset=4 + i32.const 1 + i32.or + i32.store offset=4 + local.get 0 + return + end + local.get 3 + local.get 2 + local.get 4 + i32.const 1 + i32.and + i32.or + i32.const 2 + i32.or + i32.store + local.get 6 + local.get 2 + i32.add + local.tee 1 + local.get 10 + i32.const 3 + i32.or + i32.store offset=4 + local.get 6 + local.get 9 + i32.add + local.tee 2 + local.get 2 + i32.load offset=4 + i32.const 1 + i32.or + i32.store offset=4 + local.get 1 + local.get 10 + call 7 + local.get 0 + return + end + block ;; label = @2 + local.get 1 + call 3 + local.tee 2 + br_if 0 (;@2;) + i32.const 0 + return + end + local.get 2 + local.get 0 + i32.const -4 + i32.const -8 + local.get 3 + i32.load + local.tee 5 + i32.const 3 + i32.and + select + local.get 5 + i32.const -8 + i32.and + i32.add + local.tee 5 + local.get 1 + local.get 5 + local.get 1 + i32.lt_u + select + call 12 + local.set 1 + local.get 0 + call 5 + local.get 1 + local.set 0 + end + local.get 0 + ) + (func (;7;) (type 5) (param i32 i32) + (local i32 i32 i32 i32 i32 i32) + local.get 0 + local.get 1 + i32.add + local.set 2 + block ;; label = @1 + block ;; label = @2 + local.get 0 + i32.load offset=4 + local.tee 3 + i32.const 1 + i32.and + br_if 0 (;@2;) + local.get 3 + i32.const 3 + i32.and + i32.eqz + br_if 1 (;@1;) + local.get 0 + i32.load + local.tee 3 + local.get 1 + i32.add + local.set 1 + block ;; label = @3 + block ;; label = @4 + local.get 0 + local.get 3 + i32.sub + local.tee 0 + i32.const 0 + i32.load offset=1048604 + i32.eq + br_if 0 (;@4;) + block ;; label = @5 + local.get 3 + i32.const 255 + i32.gt_u + br_if 0 (;@5;) + local.get 0 + i32.load offset=8 + local.tee 4 + local.get 3 + i32.const 3 + i32.shr_u + local.tee 5 + i32.const 3 + i32.shl + i32.const 1048624 + i32.add + local.tee 6 + i32.eq + drop + local.get 0 + i32.load offset=12 + local.tee 3 + local.get 4 + i32.ne + br_if 2 (;@3;) + i32.const 0 + i32.const 0 + i32.load offset=1048584 + i32.const -2 + local.get 5 + i32.rotl + i32.and + i32.store offset=1048584 + br 3 (;@2;) + end + local.get 0 + i32.load offset=24 + local.set 7 + block ;; label = @5 + block ;; label = @6 + local.get 0 + i32.load offset=12 + local.tee 6 + local.get 0 + i32.eq + br_if 0 (;@6;) + local.get 0 + i32.load offset=8 + local.tee 3 + i32.const 0 + i32.load offset=1048600 + i32.lt_u + drop + local.get 6 + local.get 3 + i32.store offset=8 + local.get 3 + local.get 6 + i32.store offset=12 + br 1 (;@5;) + end + block ;; label = @6 + local.get 0 + i32.const 20 + i32.add + local.tee 3 + i32.load + local.tee 4 + br_if 0 (;@6;) + local.get 0 + i32.const 16 + i32.add + local.tee 3 + i32.load + local.tee 4 + br_if 0 (;@6;) + i32.const 0 + local.set 6 + br 1 (;@5;) + end + loop ;; label = @6 + local.get 3 + local.set 5 + local.get 4 + local.tee 6 + i32.const 20 + i32.add + local.tee 3 + i32.load + local.tee 4 + br_if 0 (;@6;) + local.get 6 + i32.const 16 + i32.add + local.set 3 + local.get 6 + i32.load offset=16 + local.tee 4 + br_if 0 (;@6;) + end + local.get 5 + i32.const 0 + i32.store + end + local.get 7 + i32.eqz + br_if 2 (;@2;) + block ;; label = @5 + block ;; label = @6 + local.get 0 + local.get 0 + i32.load offset=28 + local.tee 4 + i32.const 2 + i32.shl + i32.const 1048888 + i32.add + local.tee 3 + i32.load + i32.ne + br_if 0 (;@6;) + local.get 3 + local.get 6 + i32.store + local.get 6 + br_if 1 (;@5;) + i32.const 0 + i32.const 0 + i32.load offset=1048588 + i32.const -2 + local.get 4 + i32.rotl + i32.and + i32.store offset=1048588 + br 4 (;@2;) + end + local.get 7 + i32.const 16 + i32.const 20 + local.get 7 + i32.load offset=16 + local.get 0 + i32.eq + select + i32.add + local.get 6 + i32.store + local.get 6 + i32.eqz + br_if 3 (;@2;) + end + local.get 6 + local.get 7 + i32.store offset=24 + block ;; label = @5 + local.get 0 + i32.load offset=16 + local.tee 3 + i32.eqz + br_if 0 (;@5;) + local.get 6 + local.get 3 + i32.store offset=16 + local.get 3 + local.get 6 + i32.store offset=24 + end + local.get 0 + i32.load offset=20 + local.tee 3 + i32.eqz + br_if 2 (;@2;) + local.get 6 + i32.const 20 + i32.add + local.get 3 + i32.store + local.get 3 + local.get 6 + i32.store offset=24 + br 2 (;@2;) + end + local.get 2 + i32.load offset=4 + local.tee 3 + i32.const 3 + i32.and + i32.const 3 + i32.ne + br_if 1 (;@2;) + local.get 2 + local.get 3 + i32.const -2 + i32.and + i32.store offset=4 + i32.const 0 + local.get 1 + i32.store offset=1048592 + local.get 2 + local.get 1 + i32.store + local.get 0 + local.get 1 + i32.const 1 + i32.or + i32.store offset=4 + return + end + local.get 3 + local.get 6 + i32.eq + drop + local.get 3 + local.get 4 + i32.store offset=8 + local.get 4 + local.get 3 + i32.store offset=12 + end + block ;; label = @2 + block ;; label = @3 + local.get 2 + i32.load offset=4 + local.tee 3 + i32.const 2 + i32.and + br_if 0 (;@3;) + block ;; label = @4 + local.get 2 + i32.const 0 + i32.load offset=1048608 + i32.ne + br_if 0 (;@4;) + i32.const 0 + local.get 0 + i32.store offset=1048608 + i32.const 0 + i32.const 0 + i32.load offset=1048596 + local.get 1 + i32.add + local.tee 1 + i32.store offset=1048596 + local.get 0 + local.get 1 + i32.const 1 + i32.or + i32.store offset=4 + local.get 0 + i32.const 0 + i32.load offset=1048604 + i32.ne + br_if 3 (;@1;) + i32.const 0 + i32.const 0 + i32.store offset=1048592 + i32.const 0 + i32.const 0 + i32.store offset=1048604 + return + end + block ;; label = @4 + local.get 2 + i32.const 0 + i32.load offset=1048604 + i32.ne + br_if 0 (;@4;) + i32.const 0 + local.get 0 + i32.store offset=1048604 + i32.const 0 + i32.const 0 + i32.load offset=1048592 + local.get 1 + i32.add + local.tee 1 + i32.store offset=1048592 + local.get 0 + local.get 1 + i32.const 1 + i32.or + i32.store offset=4 + local.get 0 + local.get 1 + i32.add + local.get 1 + i32.store + return + end + local.get 3 + i32.const -8 + i32.and + local.get 1 + i32.add + local.set 1 + block ;; label = @4 + block ;; label = @5 + local.get 3 + i32.const 255 + i32.gt_u + br_if 0 (;@5;) + local.get 2 + i32.load offset=8 + local.tee 4 + local.get 3 + i32.const 3 + i32.shr_u + local.tee 5 + i32.const 3 + i32.shl + i32.const 1048624 + i32.add + local.tee 6 + i32.eq + drop + block ;; label = @6 + local.get 2 + i32.load offset=12 + local.tee 3 + local.get 4 + i32.ne + br_if 0 (;@6;) + i32.const 0 + i32.const 0 + i32.load offset=1048584 + i32.const -2 + local.get 5 + i32.rotl + i32.and + i32.store offset=1048584 + br 2 (;@4;) + end + local.get 3 + local.get 6 + i32.eq + drop + local.get 3 + local.get 4 + i32.store offset=8 + local.get 4 + local.get 3 + i32.store offset=12 + br 1 (;@4;) + end + local.get 2 + i32.load offset=24 + local.set 7 + block ;; label = @5 + block ;; label = @6 + local.get 2 + i32.load offset=12 + local.tee 6 + local.get 2 + i32.eq + br_if 0 (;@6;) + local.get 2 + i32.load offset=8 + local.tee 3 + i32.const 0 + i32.load offset=1048600 + i32.lt_u + drop + local.get 6 + local.get 3 + i32.store offset=8 + local.get 3 + local.get 6 + i32.store offset=12 + br 1 (;@5;) + end + block ;; label = @6 + local.get 2 + i32.const 20 + i32.add + local.tee 4 + i32.load + local.tee 3 + br_if 0 (;@6;) + local.get 2 + i32.const 16 + i32.add + local.tee 4 + i32.load + local.tee 3 + br_if 0 (;@6;) + i32.const 0 + local.set 6 + br 1 (;@5;) + end + loop ;; label = @6 + local.get 4 + local.set 5 + local.get 3 + local.tee 6 + i32.const 20 + i32.add + local.tee 4 + i32.load + local.tee 3 + br_if 0 (;@6;) + local.get 6 + i32.const 16 + i32.add + local.set 4 + local.get 6 + i32.load offset=16 + local.tee 3 + br_if 0 (;@6;) + end + local.get 5 + i32.const 0 + i32.store + end + local.get 7 + i32.eqz + br_if 0 (;@4;) + block ;; label = @5 + block ;; label = @6 + local.get 2 + local.get 2 + i32.load offset=28 + local.tee 4 + i32.const 2 + i32.shl + i32.const 1048888 + i32.add + local.tee 3 + i32.load + i32.ne + br_if 0 (;@6;) + local.get 3 + local.get 6 + i32.store + local.get 6 + br_if 1 (;@5;) + i32.const 0 + i32.const 0 + i32.load offset=1048588 + i32.const -2 + local.get 4 + i32.rotl + i32.and + i32.store offset=1048588 + br 2 (;@4;) + end + local.get 7 + i32.const 16 + i32.const 20 + local.get 7 + i32.load offset=16 + local.get 2 + i32.eq + select + i32.add + local.get 6 + i32.store + local.get 6 + i32.eqz + br_if 1 (;@4;) + end + local.get 6 + local.get 7 + i32.store offset=24 + block ;; label = @5 + local.get 2 + i32.load offset=16 + local.tee 3 + i32.eqz + br_if 0 (;@5;) + local.get 6 + local.get 3 + i32.store offset=16 + local.get 3 + local.get 6 + i32.store offset=24 + end + local.get 2 + i32.load offset=20 + local.tee 3 + i32.eqz + br_if 0 (;@4;) + local.get 6 + i32.const 20 + i32.add + local.get 3 + i32.store + local.get 3 + local.get 6 + i32.store offset=24 + end + local.get 0 + local.get 1 + i32.add + local.get 1 + i32.store + local.get 0 + local.get 1 + i32.const 1 + i32.or + i32.store offset=4 + local.get 0 + i32.const 0 + i32.load offset=1048604 + i32.ne + br_if 1 (;@2;) + i32.const 0 + local.get 1 + i32.store offset=1048592 + return + end + local.get 2 + local.get 3 + i32.const -2 + i32.and + i32.store offset=4 + local.get 0 + local.get 1 + i32.add + local.get 1 + i32.store + local.get 0 + local.get 1 + i32.const 1 + i32.or + i32.store offset=4 + end + block ;; label = @2 + local.get 1 + i32.const 255 + i32.gt_u + br_if 0 (;@2;) + local.get 1 + i32.const -8 + i32.and + i32.const 1048624 + i32.add + local.set 3 + block ;; label = @3 + block ;; label = @4 + i32.const 0 + i32.load offset=1048584 + local.tee 4 + i32.const 1 + local.get 1 + i32.const 3 + i32.shr_u + i32.shl + local.tee 1 + i32.and + br_if 0 (;@4;) + i32.const 0 + local.get 4 + local.get 1 + i32.or + i32.store offset=1048584 + local.get 3 + local.set 1 + br 1 (;@3;) + end + local.get 3 + i32.load offset=8 + local.set 1 + end + local.get 1 + local.get 0 + i32.store offset=12 + local.get 3 + local.get 0 + i32.store offset=8 + local.get 0 + local.get 3 + i32.store offset=12 + local.get 0 + local.get 1 + i32.store offset=8 + return + end + i32.const 31 + local.set 3 + block ;; label = @2 + local.get 1 + i32.const 16777215 + i32.gt_u + br_if 0 (;@2;) + local.get 1 + i32.const 38 + local.get 1 + i32.const 8 + i32.shr_u + i32.clz + local.tee 3 + i32.sub + i32.shr_u + i32.const 1 + i32.and + local.get 3 + i32.const 1 + i32.shl + i32.sub + i32.const 62 + i32.add + local.set 3 + end + local.get 0 + local.get 3 + i32.store offset=28 + local.get 0 + i64.const 0 + i64.store offset=16 align=4 + local.get 3 + i32.const 2 + i32.shl + i32.const 1048888 + i32.add + local.set 4 + block ;; label = @2 + i32.const 0 + i32.load offset=1048588 + local.tee 6 + i32.const 1 + local.get 3 + i32.shl + local.tee 2 + i32.and + br_if 0 (;@2;) + local.get 4 + local.get 0 + i32.store + i32.const 0 + local.get 6 + local.get 2 + i32.or + i32.store offset=1048588 + local.get 0 + local.get 4 + i32.store offset=24 + local.get 0 + local.get 0 + i32.store offset=8 + local.get 0 + local.get 0 + i32.store offset=12 + return + end + local.get 1 + i32.const 0 + i32.const 25 + local.get 3 + i32.const 1 + i32.shr_u + i32.sub + local.get 3 + i32.const 31 + i32.eq + select + i32.shl + local.set 3 + local.get 4 + i32.load + local.set 6 + block ;; label = @2 + loop ;; label = @3 + local.get 6 + local.tee 4 + i32.load offset=4 + i32.const -8 + i32.and + local.get 1 + i32.eq + br_if 1 (;@2;) + local.get 3 + i32.const 29 + i32.shr_u + local.set 6 + local.get 3 + i32.const 1 + i32.shl + local.set 3 + local.get 4 + local.get 6 + i32.const 4 + i32.and + i32.add + i32.const 16 + i32.add + local.tee 2 + i32.load + local.tee 6 + br_if 0 (;@3;) + end + local.get 2 + local.get 0 + i32.store + local.get 0 + local.get 4 + i32.store offset=24 + local.get 0 + local.get 0 + i32.store offset=12 + local.get 0 + local.get 0 + i32.store offset=8 + return + end + local.get 4 + i32.load offset=8 + local.tee 1 + local.get 0 + i32.store offset=12 + local.get 4 + local.get 0 + i32.store offset=8 + local.get 0 + i32.const 0 + i32.store offset=24 + local.get 0 + local.get 4 + i32.store offset=12 + local.get 0 + local.get 1 + i32.store offset=8 + end + ) + (func (;8;) (type 4) (param i32 i32) (result i32) + (local i32 i32 i32 i32 i32) + block ;; label = @1 + block ;; label = @2 + local.get 0 + i32.const 16 + local.get 0 + i32.const 16 + i32.gt_u + select + local.tee 2 + local.get 2 + i32.const -1 + i32.add + i32.and + br_if 0 (;@2;) + local.get 2 + local.set 0 + br 1 (;@1;) + end + i32.const 32 + local.set 3 + loop ;; label = @2 + local.get 3 + local.tee 0 + i32.const 1 + i32.shl + local.set 3 + local.get 0 + local.get 2 + i32.lt_u + br_if 0 (;@2;) + end + end + block ;; label = @1 + i32.const -64 + local.get 0 + i32.sub + local.get 1 + i32.gt_u + br_if 0 (;@1;) + i32.const 0 + i32.const 48 + i32.store offset=1049080 + i32.const 0 + return + end + block ;; label = @1 + local.get 0 + i32.const 16 + local.get 1 + i32.const 19 + i32.add + i32.const -16 + i32.and + local.get 1 + i32.const 11 + i32.lt_u + select + local.tee 1 + i32.add + i32.const 12 + i32.add + call 3 + local.tee 3 + br_if 0 (;@1;) + i32.const 0 + return + end + local.get 3 + i32.const -8 + i32.add + local.set 2 + block ;; label = @1 + block ;; label = @2 + local.get 0 + i32.const -1 + i32.add + local.get 3 + i32.and + br_if 0 (;@2;) + local.get 2 + local.set 0 + br 1 (;@1;) + end + local.get 3 + i32.const -4 + i32.add + local.tee 4 + i32.load + local.tee 5 + i32.const -8 + i32.and + local.get 3 + local.get 0 + i32.add + i32.const -1 + i32.add + i32.const 0 + local.get 0 + i32.sub + i32.and + i32.const -8 + i32.add + local.tee 3 + i32.const 0 + local.get 0 + local.get 3 + local.get 2 + i32.sub + i32.const 15 + i32.gt_u + select + i32.add + local.tee 0 + local.get 2 + i32.sub + local.tee 3 + i32.sub + local.set 6 + block ;; label = @2 + local.get 5 + i32.const 3 + i32.and + br_if 0 (;@2;) + local.get 0 + local.get 6 + i32.store offset=4 + local.get 0 + local.get 2 + i32.load + local.get 3 + i32.add + i32.store + br 1 (;@1;) + end + local.get 0 + local.get 6 + local.get 0 + i32.load offset=4 + i32.const 1 + i32.and + i32.or + i32.const 2 + i32.or + i32.store offset=4 + local.get 0 + local.get 6 + i32.add + local.tee 6 + local.get 6 + i32.load offset=4 + i32.const 1 + i32.or + i32.store offset=4 + local.get 4 + local.get 3 + local.get 4 + i32.load + i32.const 1 + i32.and + i32.or + i32.const 2 + i32.or + i32.store + local.get 2 + local.get 3 + i32.add + local.tee 6 + local.get 6 + i32.load offset=4 + i32.const 1 + i32.or + i32.store offset=4 + local.get 2 + local.get 3 + call 7 + end + block ;; label = @1 + local.get 0 + i32.load offset=4 + local.tee 3 + i32.const 3 + i32.and + i32.eqz + br_if 0 (;@1;) + local.get 3 + i32.const -8 + i32.and + local.tee 2 + local.get 1 + i32.const 16 + i32.add + i32.le_u + br_if 0 (;@1;) + local.get 0 + local.get 1 + local.get 3 + i32.const 1 + i32.and + i32.or + i32.const 2 + i32.or + i32.store offset=4 + local.get 0 + local.get 1 + i32.add + local.tee 3 + local.get 2 + local.get 1 + i32.sub + local.tee 1 + i32.const 3 + i32.or + i32.store offset=4 + local.get 0 + local.get 2 + i32.add + local.tee 2 + local.get 2 + i32.load offset=4 + i32.const 1 + i32.or + i32.store offset=4 + local.get 3 + local.get 1 + call 7 + end + local.get 0 + i32.const 8 + i32.add + ) + (func (;9;) (type 4) (param i32 i32) (result i32) + block ;; label = @1 + local.get 0 + i32.const 16 + i32.gt_u + br_if 0 (;@1;) + local.get 1 + call 3 + return + end + local.get 0 + local.get 1 + call 8 + ) + (func (;10;) (type 6) + unreachable + unreachable + ) + (func (;11;) (type 2) (param i32) (result i32) + block ;; label = @1 + local.get 0 + br_if 0 (;@1;) + memory.size + i32.const 16 + i32.shl + return + end + block ;; label = @1 + local.get 0 + i32.const 65535 + i32.and + br_if 0 (;@1;) + local.get 0 + i32.const -1 + i32.le_s + br_if 0 (;@1;) + block ;; label = @2 + local.get 0 + i32.const 16 + i32.shr_u + memory.grow + local.tee 0 + i32.const -1 + i32.ne + br_if 0 (;@2;) + i32.const 0 + i32.const 48 + i32.store offset=1049080 + i32.const -1 + return + end + local.get 0 + i32.const 16 + i32.shl + return + end + call 10 + unreachable + ) + (func (;12;) (type 7) (param i32 i32 i32) (result i32) + (local i32 i32 i32 i32) + block ;; label = @1 + block ;; label = @2 + block ;; label = @3 + local.get 2 + i32.const 32 + i32.gt_u + br_if 0 (;@3;) + local.get 1 + i32.const 3 + i32.and + i32.eqz + br_if 1 (;@2;) + local.get 2 + i32.eqz + br_if 1 (;@2;) + local.get 0 + local.get 1 + i32.load8_u + i32.store8 + local.get 2 + i32.const -1 + i32.add + local.set 3 + local.get 0 + i32.const 1 + i32.add + local.set 4 + local.get 1 + i32.const 1 + i32.add + local.tee 5 + i32.const 3 + i32.and + i32.eqz + br_if 2 (;@1;) + local.get 3 + i32.eqz + br_if 2 (;@1;) + local.get 0 + local.get 1 + i32.load8_u offset=1 + i32.store8 offset=1 + local.get 2 + i32.const -2 + i32.add + local.set 3 + local.get 0 + i32.const 2 + i32.add + local.set 4 + local.get 1 + i32.const 2 + i32.add + local.tee 5 + i32.const 3 + i32.and + i32.eqz + br_if 2 (;@1;) + local.get 3 + i32.eqz + br_if 2 (;@1;) + local.get 0 + local.get 1 + i32.load8_u offset=2 + i32.store8 offset=2 + local.get 2 + i32.const -3 + i32.add + local.set 3 + local.get 0 + i32.const 3 + i32.add + local.set 4 + local.get 1 + i32.const 3 + i32.add + local.tee 5 + i32.const 3 + i32.and + i32.eqz + br_if 2 (;@1;) + local.get 3 + i32.eqz + br_if 2 (;@1;) + local.get 0 + local.get 1 + i32.load8_u offset=3 + i32.store8 offset=3 + local.get 2 + i32.const -4 + i32.add + local.set 3 + local.get 0 + i32.const 4 + i32.add + local.set 4 + local.get 1 + i32.const 4 + i32.add + local.set 5 + br 2 (;@1;) + end + local.get 0 + local.get 1 + local.get 2 + memory.copy + local.get 0 + return + end + local.get 2 + local.set 3 + local.get 0 + local.set 4 + local.get 1 + local.set 5 + end + block ;; label = @1 + block ;; label = @2 + local.get 4 + i32.const 3 + i32.and + local.tee 2 + br_if 0 (;@2;) + block ;; label = @3 + block ;; label = @4 + local.get 3 + i32.const 16 + i32.ge_u + br_if 0 (;@4;) + local.get 3 + local.set 2 + br 1 (;@3;) + end + block ;; label = @4 + local.get 3 + i32.const -16 + i32.add + local.tee 2 + i32.const 16 + i32.and + br_if 0 (;@4;) + 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 + i32.const 16 + i32.add + local.set 4 + local.get 5 + i32.const 16 + i32.add + local.set 5 + local.get 2 + local.set 3 + end + local.get 2 + i32.const 16 + i32.lt_u + br_if 0 (;@3;) + local.get 3 + local.set 2 + loop ;; label = @4 + 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 + i32.const 32 + i32.add + local.set 4 + local.get 5 + i32.const 32 + i32.add + local.set 5 + local.get 2 + i32.const -32 + i32.add + local.tee 2 + i32.const 15 + i32.gt_u + br_if 0 (;@4;) + end + end + block ;; label = @3 + local.get 2 + i32.const 8 + i32.lt_u + br_if 0 (;@3;) + local.get 4 + local.get 5 + i64.load align=4 + i64.store align=4 + local.get 5 + i32.const 8 + i32.add + local.set 5 + local.get 4 + i32.const 8 + i32.add + local.set 4 + end + block ;; label = @3 + local.get 2 + i32.const 4 + i32.and + i32.eqz + br_if 0 (;@3;) + local.get 4 + local.get 5 + i32.load + i32.store + local.get 5 + i32.const 4 + i32.add + local.set 5 + local.get 4 + i32.const 4 + i32.add + local.set 4 + end + block ;; label = @3 + local.get 2 + i32.const 2 + i32.and + i32.eqz + br_if 0 (;@3;) + local.get 4 + local.get 5 + i32.load16_u align=1 + i32.store16 align=1 + local.get 4 + i32.const 2 + i32.add + local.set 4 + local.get 5 + i32.const 2 + i32.add + local.set 5 + end + local.get 2 + i32.const 1 + i32.and + i32.eqz + br_if 1 (;@1;) + local.get 4 + local.get 5 + i32.load8_u + i32.store8 + local.get 0 + return + end + block ;; label = @2 + block ;; label = @3 + block ;; label = @4 + block ;; label = @5 + block ;; label = @6 + local.get 3 + i32.const 32 + i32.lt_u + br_if 0 (;@6;) + block ;; label = @7 + block ;; label = @8 + local.get 2 + i32.const -1 + i32.add + br_table 3 (;@5;) 0 (;@8;) 1 (;@7;) 7 (;@1;) + end + local.get 4 + local.get 5 + i32.load + i32.store16 align=1 + local.get 4 + local.get 5 + i32.const 2 + i32.add + i32.load align=2 + i32.store offset=2 + local.get 4 + local.get 5 + i32.const 6 + i32.add + i64.load align=2 + i64.store offset=6 align=4 + local.get 4 + i32.const 18 + i32.add + local.set 2 + local.get 5 + i32.const 18 + i32.add + local.set 1 + i32.const 14 + local.set 6 + local.get 5 + i32.const 14 + i32.add + i32.load align=2 + local.set 5 + i32.const 14 + local.set 3 + br 3 (;@4;) + end + local.get 4 + local.get 5 + i32.load + i32.store8 + local.get 4 + local.get 5 + i32.const 1 + i32.add + i32.load align=1 + i32.store offset=1 + local.get 4 + local.get 5 + i32.const 5 + i32.add + i64.load align=1 + i64.store offset=5 align=4 + local.get 4 + i32.const 17 + i32.add + local.set 2 + local.get 5 + i32.const 17 + i32.add + local.set 1 + i32.const 13 + local.set 6 + local.get 5 + i32.const 13 + i32.add + i32.load align=1 + local.set 5 + i32.const 15 + local.set 3 + br 2 (;@4;) + end + block ;; label = @6 + block ;; label = @7 + local.get 3 + i32.const 16 + i32.ge_u + br_if 0 (;@7;) + local.get 4 + local.set 2 + local.get 5 + local.set 1 + br 1 (;@6;) + end + local.get 4 + local.get 5 + i32.load8_u + i32.store8 + local.get 4 + local.get 5 + i32.load offset=1 align=1 + i32.store offset=1 align=1 + local.get 4 + local.get 5 + i64.load offset=5 align=1 + i64.store offset=5 align=1 + local.get 4 + local.get 5 + i32.load16_u offset=13 align=1 + i32.store16 offset=13 align=1 + local.get 4 + local.get 5 + i32.load8_u offset=15 + i32.store8 offset=15 + local.get 4 + i32.const 16 + i32.add + local.set 2 + local.get 5 + i32.const 16 + i32.add + local.set 1 + end + local.get 3 + i32.const 8 + i32.and + br_if 2 (;@3;) + br 3 (;@2;) + end + local.get 4 + local.get 5 + i32.load + local.tee 2 + i32.store8 + local.get 4 + local.get 2 + i32.const 16 + i32.shr_u + i32.store8 offset=2 + local.get 4 + local.get 2 + i32.const 8 + i32.shr_u + i32.store8 offset=1 + local.get 4 + local.get 5 + i32.const 3 + i32.add + i32.load align=1 + i32.store offset=3 + local.get 4 + local.get 5 + i32.const 7 + i32.add + i64.load align=1 + i64.store offset=7 align=4 + local.get 4 + i32.const 19 + i32.add + local.set 2 + local.get 5 + i32.const 19 + i32.add + local.set 1 + i32.const 15 + local.set 6 + local.get 5 + i32.const 15 + i32.add + i32.load align=1 + local.set 5 + i32.const 13 + local.set 3 + end + local.get 4 + local.get 6 + i32.add + local.get 5 + i32.store + end + local.get 2 + local.get 1 + i64.load align=1 + i64.store align=1 + local.get 2 + i32.const 8 + i32.add + local.set 2 + local.get 1 + i32.const 8 + i32.add + local.set 1 + end + block ;; label = @2 + local.get 3 + i32.const 4 + i32.and + i32.eqz + br_if 0 (;@2;) + local.get 2 + local.get 1 + i32.load align=1 + i32.store align=1 + local.get 2 + i32.const 4 + i32.add + local.set 2 + local.get 1 + i32.const 4 + i32.add + local.set 1 + end + block ;; label = @2 + local.get 3 + i32.const 2 + i32.and + i32.eqz + br_if 0 (;@2;) + local.get 2 + local.get 1 + i32.load16_u align=1 + i32.store16 align=1 + local.get 2 + i32.const 2 + i32.add + local.set 2 + local.get 1 + i32.const 2 + i32.add + local.set 1 + end + local.get 3 + i32.const 1 + i32.and + i32.eqz + br_if 0 (;@1;) + local.get 2 + local.get 1 + i32.load8_u + i32.store8 + end + local.get 0 + ) + (func (;13;) (type 1) (param i32 i32 i32 i32) (result i32) + local.get 0 + local.get 1 + local.get 2 + local.get 3 + call 1 + ) + (func (;14;) (type 6)) + (func (;15;) (type 6) + call 14 + call 14 + ) + (func (;16;) (type 0) (param f64 f64) (result f64) + local.get 0 + local.get 1 + call 0 + call 15 + ) + (func (;17;) (type 1) (param i32 i32 i32 i32) (result i32) + local.get 0 + local.get 1 + local.get 2 + local.get 3 + call 1 + call 15 + ) + (func (;18;) (type 1) (param i32 i32 i32 i32) (result i32) + local.get 0 + local.get 1 + local.get 2 + local.get 3 + call 13 + call 15 + ) + (table (;0;) 2 2 funcref) + (memory (;0;) 17) + (global (;0;) (mut i32) i32.const 1048576) + (export "memory" (memory 0)) + (export "subtract" (func 16)) + (export "cabi_realloc_wit_bindgen_0_20_0" (func 17)) + (export "cabi_realloc" (func 18)) + (elem (;0;) (i32.const 1) func 13) + (data (;0;) (i32.const 1048576) "\01\00\00\00") + (@producers + (processed-by "wit-component" "0.201.0") + (processed-by "wit-bindgen-rust" "0.20.0") + ) + ) + (core instance (;0;) (instantiate 0)) + (alias core export 0 "memory" (core memory (;0;))) + (alias core export 0 "cabi_realloc" (core func (;0;))) + (type (;0;) (func (param "a" float64) (param "b" float64) (result float64))) + (alias core export 0 "subtract" (core func (;1;))) + (func (;0;) (type 0) (canon lift (core func 1))) + (export (;1;) "subtract" (func 0)) + (@producers + (processed-by "wit-component" "0.201.0") + (processed-by "cargo-component" "0.9.0 (wasi:ab5a448)") + ) +) diff --git a/homestar-wasm/fixtures/example_subtract_component.wasm b/homestar-wasm/fixtures/example_subtract_component.wasm new file mode 100644 index 0000000000000000000000000000000000000000..cbf52f3aa00e1c9b13696c9b4057013b6cbd0f5c GIT binary patch literal 8952 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 ViF8YABf?y#c>K}VvFHzG@jqpZxugI9 literal 0 HcmV?d00001 diff --git a/homestar-wasm/fixtures/example_subtract_component.wat b/homestar-wasm/fixtures/example_subtract_component.wat new file mode 100644 index 00000000..da875e21 --- /dev/null +++ b/homestar-wasm/fixtures/example_subtract_component.wat @@ -0,0 +1,3796 @@ +(component + (core module (;0;) + (type (;0;) (func (param f64 f64) (result f64))) + (type (;1;) (func (param i32 i32) (result i32))) + (type (;2;) (func (param i32) (result i32))) + (type (;3;) (func (param i32 i32))) + (type (;4;) (func (param i32))) + (type (;5;) (func (param i32 i32 i32 i32) (result i32))) + (type (;6;) (func (param i32 i32 i32) (result i32))) + (func (;0;) (type 0) (param f64 f64) (result f64) + local.get 0 + local.get 1 + f64.sub + ) + (func (;1;) (type 1) (param i32 i32) (result i32) + (local i32 i32 i32 i32 i32) + i32.const 0 + local.set 2 + block ;; label = @1 + i32.const -65587 + local.get 0 + i32.const 16 + local.get 0 + i32.const 16 + i32.gt_u + select + local.tee 0 + i32.sub + local.get 1 + i32.le_u + br_if 0 (;@1;) + local.get 0 + i32.const 16 + local.get 1 + i32.const 11 + i32.add + i32.const -8 + i32.and + local.get 1 + i32.const 11 + i32.lt_u + select + local.tee 3 + i32.add + i32.const 12 + i32.add + call 2 + local.tee 1 + i32.eqz + br_if 0 (;@1;) + local.get 1 + i32.const -8 + i32.add + local.set 2 + block ;; label = @2 + block ;; label = @3 + local.get 0 + i32.const -1 + i32.add + local.tee 4 + local.get 1 + i32.and + br_if 0 (;@3;) + local.get 2 + local.set 0 + br 1 (;@2;) + end + local.get 1 + i32.const -4 + i32.add + local.tee 5 + i32.load + local.tee 6 + i32.const -8 + i32.and + local.get 4 + local.get 1 + i32.add + i32.const 0 + local.get 0 + i32.sub + i32.and + i32.const -8 + i32.add + local.tee 1 + i32.const 0 + local.get 0 + local.get 1 + local.get 2 + i32.sub + i32.const 16 + i32.gt_u + select + i32.add + local.tee 0 + local.get 2 + i32.sub + local.tee 1 + i32.sub + local.set 4 + block ;; label = @3 + local.get 6 + i32.const 3 + i32.and + i32.eqz + br_if 0 (;@3;) + local.get 0 + local.get 4 + local.get 0 + i32.load offset=4 + i32.const 1 + i32.and + i32.or + i32.const 2 + i32.or + i32.store offset=4 + local.get 0 + local.get 4 + i32.add + local.tee 4 + local.get 4 + i32.load offset=4 + i32.const 1 + i32.or + i32.store offset=4 + local.get 5 + local.get 1 + local.get 5 + i32.load + i32.const 1 + i32.and + i32.or + i32.const 2 + i32.or + i32.store + local.get 2 + local.get 1 + i32.add + local.tee 4 + local.get 4 + i32.load offset=4 + i32.const 1 + i32.or + i32.store offset=4 + local.get 2 + local.get 1 + call 3 + br 1 (;@2;) + end + local.get 2 + i32.load + local.set 2 + local.get 0 + local.get 4 + i32.store offset=4 + local.get 0 + local.get 2 + local.get 1 + i32.add + i32.store + end + block ;; label = @2 + local.get 0 + i32.load offset=4 + local.tee 1 + i32.const 3 + i32.and + i32.eqz + br_if 0 (;@2;) + local.get 1 + i32.const -8 + i32.and + local.tee 2 + local.get 3 + i32.const 16 + i32.add + i32.le_u + br_if 0 (;@2;) + local.get 0 + local.get 3 + local.get 1 + i32.const 1 + i32.and + i32.or + i32.const 2 + i32.or + i32.store offset=4 + local.get 0 + local.get 3 + i32.add + local.tee 1 + local.get 2 + local.get 3 + i32.sub + local.tee 3 + i32.const 3 + i32.or + i32.store offset=4 + local.get 0 + local.get 2 + i32.add + local.tee 2 + local.get 2 + i32.load offset=4 + i32.const 1 + i32.or + i32.store offset=4 + local.get 1 + local.get 3 + call 3 + end + local.get 0 + i32.const 8 + i32.add + local.set 2 + end + local.get 2 + ) + (func (;2;) (type 2) (param i32) (result i32) + (local i32 i32 i32 i32 i32 i32 i32 i32 i64) + block ;; label = @1 + block ;; label = @2 + block ;; label = @3 + block ;; label = @4 + block ;; label = @5 + block ;; label = @6 + block ;; label = @7 + block ;; label = @8 + local.get 0 + i32.const 245 + i32.lt_u + br_if 0 (;@8;) + i32.const 0 + local.set 1 + local.get 0 + i32.const -65587 + i32.ge_u + br_if 5 (;@3;) + local.get 0 + i32.const 11 + i32.add + local.tee 0 + i32.const -8 + i32.and + local.set 2 + i32.const 0 + i32.load offset=1048992 + local.tee 3 + i32.eqz + br_if 4 (;@4;) + i32.const 0 + local.set 4 + block ;; label = @9 + local.get 2 + i32.const 256 + i32.lt_u + br_if 0 (;@9;) + i32.const 31 + local.set 4 + local.get 2 + i32.const 16777215 + i32.gt_u + br_if 0 (;@9;) + local.get 2 + i32.const 6 + local.get 0 + i32.const 8 + i32.shr_u + i32.clz + local.tee 0 + i32.sub + i32.shr_u + i32.const 1 + i32.and + local.get 0 + i32.const 1 + i32.shl + i32.sub + i32.const 62 + i32.add + local.set 4 + end + i32.const 0 + local.get 2 + i32.sub + local.set 1 + block ;; label = @9 + local.get 4 + i32.const 2 + i32.shl + i32.const 1048580 + i32.add + i32.load + local.tee 5 + br_if 0 (;@9;) + i32.const 0 + local.set 0 + i32.const 0 + local.set 6 + br 2 (;@7;) + end + i32.const 0 + local.set 0 + local.get 2 + i32.const 0 + i32.const 25 + local.get 4 + i32.const 1 + i32.shr_u + i32.sub + local.get 4 + i32.const 31 + i32.eq + select + i32.shl + local.set 7 + i32.const 0 + local.set 6 + loop ;; label = @9 + block ;; label = @10 + local.get 5 + i32.load offset=4 + i32.const -8 + i32.and + local.tee 8 + local.get 2 + i32.lt_u + br_if 0 (;@10;) + local.get 8 + local.get 2 + i32.sub + local.tee 8 + local.get 1 + i32.ge_u + br_if 0 (;@10;) + local.get 8 + local.set 1 + local.get 5 + local.set 6 + local.get 8 + br_if 0 (;@10;) + i32.const 0 + local.set 1 + local.get 5 + local.set 6 + local.get 5 + local.set 0 + br 4 (;@6;) + end + local.get 5 + i32.const 20 + i32.add + i32.load + local.tee 8 + local.get 0 + local.get 8 + local.get 5 + local.get 7 + i32.const 29 + i32.shr_u + i32.const 4 + i32.and + i32.add + i32.const 16 + i32.add + i32.load + local.tee 5 + i32.ne + select + local.get 0 + local.get 8 + select + local.set 0 + local.get 7 + i32.const 1 + i32.shl + local.set 7 + local.get 5 + i32.eqz + br_if 2 (;@7;) + br 0 (;@9;) + end + end + block ;; label = @8 + i32.const 0 + i32.load offset=1048988 + local.tee 6 + i32.const 16 + local.get 0 + i32.const 11 + i32.add + i32.const -8 + i32.and + local.get 0 + i32.const 11 + i32.lt_u + select + local.tee 2 + i32.const 3 + i32.shr_u + local.tee 1 + i32.shr_u + local.tee 0 + i32.const 3 + i32.and + i32.eqz + br_if 0 (;@8;) + block ;; label = @9 + block ;; label = @10 + local.get 0 + i32.const -1 + i32.xor + i32.const 1 + i32.and + local.get 1 + i32.add + local.tee 2 + i32.const 3 + i32.shl + local.tee 0 + i32.const 1048724 + i32.add + local.tee 1 + local.get 0 + i32.const 1048732 + i32.add + i32.load + local.tee 0 + i32.load offset=8 + local.tee 5 + i32.eq + br_if 0 (;@10;) + local.get 5 + local.get 1 + i32.store offset=12 + local.get 1 + local.get 5 + i32.store offset=8 + br 1 (;@9;) + end + i32.const 0 + local.get 6 + i32.const -2 + local.get 2 + i32.rotl + i32.and + i32.store offset=1048988 + end + local.get 0 + local.get 2 + i32.const 3 + i32.shl + local.tee 2 + i32.const 3 + i32.or + i32.store offset=4 + local.get 0 + local.get 2 + i32.add + local.tee 2 + local.get 2 + i32.load offset=4 + i32.const 1 + i32.or + i32.store offset=4 + local.get 0 + i32.const 8 + i32.add + return + end + local.get 2 + i32.const 0 + i32.load offset=1048996 + i32.le_u + br_if 3 (;@4;) + block ;; label = @8 + block ;; label = @9 + block ;; label = @10 + local.get 0 + br_if 0 (;@10;) + i32.const 0 + i32.load offset=1048992 + local.tee 0 + i32.eqz + br_if 6 (;@4;) + local.get 0 + i32.ctz + i32.const 2 + i32.shl + i32.const 1048580 + i32.add + i32.load + local.tee 5 + i32.load offset=4 + i32.const -8 + i32.and + local.get 2 + i32.sub + local.set 1 + local.get 5 + local.set 6 + loop ;; label = @11 + block ;; label = @12 + local.get 5 + i32.load offset=16 + local.tee 0 + br_if 0 (;@12;) + local.get 5 + i32.const 20 + i32.add + i32.load + local.tee 0 + br_if 0 (;@12;) + local.get 6 + i32.load offset=24 + local.set 4 + block ;; label = @13 + block ;; label = @14 + block ;; label = @15 + local.get 6 + i32.load offset=12 + local.tee 0 + local.get 6 + i32.ne + br_if 0 (;@15;) + local.get 6 + i32.const 20 + i32.const 16 + local.get 6 + i32.const 20 + i32.add + local.tee 0 + i32.load + local.tee 7 + select + i32.add + i32.load + local.tee 5 + br_if 1 (;@14;) + i32.const 0 + local.set 0 + br 2 (;@13;) + end + local.get 6 + i32.load offset=8 + local.tee 5 + local.get 0 + i32.store offset=12 + local.get 0 + local.get 5 + i32.store offset=8 + br 1 (;@13;) + end + local.get 0 + local.get 6 + i32.const 16 + i32.add + local.get 7 + select + local.set 7 + loop ;; label = @14 + local.get 7 + local.set 8 + local.get 5 + local.tee 0 + i32.const 20 + i32.add + local.tee 5 + local.get 0 + i32.const 16 + i32.add + local.get 5 + i32.load + local.tee 5 + select + local.set 7 + local.get 0 + i32.const 20 + i32.const 16 + local.get 5 + select + i32.add + i32.load + local.tee 5 + br_if 0 (;@14;) + end + local.get 8 + i32.const 0 + i32.store + end + local.get 4 + i32.eqz + br_if 4 (;@8;) + block ;; label = @13 + local.get 6 + i32.load offset=28 + i32.const 2 + i32.shl + i32.const 1048580 + i32.add + local.tee 5 + i32.load + local.get 6 + i32.eq + br_if 0 (;@13;) + local.get 4 + i32.const 16 + i32.const 20 + local.get 4 + i32.load offset=16 + local.get 6 + i32.eq + select + i32.add + local.get 0 + i32.store + local.get 0 + i32.eqz + br_if 5 (;@8;) + br 4 (;@9;) + end + local.get 5 + local.get 0 + i32.store + local.get 0 + br_if 3 (;@9;) + i32.const 0 + i32.const 0 + i32.load offset=1048992 + i32.const -2 + local.get 6 + i32.load offset=28 + i32.rotl + i32.and + i32.store offset=1048992 + br 4 (;@8;) + end + local.get 0 + i32.load offset=4 + i32.const -8 + i32.and + local.get 2 + i32.sub + local.tee 5 + local.get 1 + local.get 5 + local.get 1 + i32.lt_u + local.tee 5 + select + local.set 1 + local.get 0 + local.get 6 + local.get 5 + select + local.set 6 + local.get 0 + local.set 5 + br 0 (;@11;) + end + end + block ;; label = @10 + block ;; label = @11 + local.get 0 + local.get 1 + i32.shl + i32.const 2 + local.get 1 + i32.shl + local.tee 0 + i32.const 0 + local.get 0 + i32.sub + i32.or + i32.and + i32.ctz + local.tee 1 + i32.const 3 + i32.shl + local.tee 0 + i32.const 1048724 + i32.add + local.tee 5 + local.get 0 + i32.const 1048732 + i32.add + i32.load + local.tee 0 + i32.load offset=8 + local.tee 7 + i32.eq + br_if 0 (;@11;) + local.get 7 + local.get 5 + i32.store offset=12 + local.get 5 + local.get 7 + i32.store offset=8 + br 1 (;@10;) + end + i32.const 0 + local.get 6 + i32.const -2 + local.get 1 + i32.rotl + i32.and + i32.store offset=1048988 + end + local.get 0 + local.get 2 + i32.const 3 + i32.or + i32.store offset=4 + local.get 0 + local.get 2 + i32.add + local.tee 7 + local.get 1 + i32.const 3 + i32.shl + local.tee 5 + local.get 2 + i32.sub + local.tee 1 + i32.const 1 + i32.or + i32.store offset=4 + local.get 0 + local.get 5 + i32.add + local.get 1 + i32.store + block ;; label = @10 + i32.const 0 + i32.load offset=1048996 + local.tee 6 + i32.eqz + br_if 0 (;@10;) + local.get 6 + i32.const -8 + i32.and + i32.const 1048724 + i32.add + local.set 5 + i32.const 0 + i32.load offset=1049004 + local.set 2 + block ;; label = @11 + block ;; label = @12 + i32.const 0 + i32.load offset=1048988 + local.tee 8 + i32.const 1 + local.get 6 + i32.const 3 + i32.shr_u + i32.shl + local.tee 6 + i32.and + br_if 0 (;@12;) + i32.const 0 + local.get 8 + local.get 6 + i32.or + i32.store offset=1048988 + local.get 5 + local.set 6 + br 1 (;@11;) + end + local.get 5 + i32.load offset=8 + local.set 6 + end + local.get 5 + local.get 2 + i32.store offset=8 + local.get 6 + local.get 2 + i32.store offset=12 + local.get 2 + local.get 5 + i32.store offset=12 + local.get 2 + local.get 6 + i32.store offset=8 + end + i32.const 0 + local.get 7 + i32.store offset=1049004 + i32.const 0 + local.get 1 + i32.store offset=1048996 + local.get 0 + i32.const 8 + i32.add + return + end + local.get 0 + local.get 4 + i32.store offset=24 + block ;; label = @9 + local.get 6 + i32.load offset=16 + local.tee 5 + i32.eqz + br_if 0 (;@9;) + local.get 0 + local.get 5 + i32.store offset=16 + local.get 5 + local.get 0 + i32.store offset=24 + end + local.get 6 + i32.const 20 + i32.add + i32.load + local.tee 5 + i32.eqz + br_if 0 (;@8;) + local.get 0 + i32.const 20 + i32.add + local.get 5 + i32.store + local.get 5 + local.get 0 + i32.store offset=24 + end + block ;; label = @8 + block ;; label = @9 + block ;; label = @10 + local.get 1 + i32.const 16 + i32.lt_u + br_if 0 (;@10;) + local.get 6 + local.get 2 + i32.const 3 + i32.or + i32.store offset=4 + local.get 6 + local.get 2 + i32.add + local.tee 2 + local.get 1 + i32.const 1 + i32.or + i32.store offset=4 + local.get 2 + local.get 1 + i32.add + local.get 1 + i32.store + i32.const 0 + i32.load offset=1048996 + local.tee 7 + i32.eqz + br_if 1 (;@9;) + local.get 7 + i32.const -8 + i32.and + i32.const 1048724 + i32.add + local.set 5 + i32.const 0 + i32.load offset=1049004 + local.set 0 + block ;; label = @11 + block ;; label = @12 + i32.const 0 + i32.load offset=1048988 + local.tee 8 + i32.const 1 + local.get 7 + i32.const 3 + i32.shr_u + i32.shl + local.tee 7 + i32.and + br_if 0 (;@12;) + i32.const 0 + local.get 8 + local.get 7 + i32.or + i32.store offset=1048988 + local.get 5 + local.set 7 + br 1 (;@11;) + end + local.get 5 + i32.load offset=8 + local.set 7 + end + local.get 5 + local.get 0 + i32.store offset=8 + local.get 7 + local.get 0 + i32.store offset=12 + local.get 0 + local.get 5 + i32.store offset=12 + local.get 0 + local.get 7 + i32.store offset=8 + br 1 (;@9;) + end + local.get 6 + local.get 1 + local.get 2 + i32.add + local.tee 0 + i32.const 3 + i32.or + i32.store offset=4 + local.get 6 + local.get 0 + i32.add + local.tee 0 + local.get 0 + i32.load offset=4 + i32.const 1 + i32.or + i32.store offset=4 + br 1 (;@8;) + end + i32.const 0 + local.get 2 + i32.store offset=1049004 + i32.const 0 + local.get 1 + i32.store offset=1048996 + end + local.get 6 + i32.const 8 + i32.add + return + end + block ;; label = @7 + local.get 0 + local.get 6 + i32.or + br_if 0 (;@7;) + i32.const 0 + local.set 6 + i32.const 2 + local.get 4 + i32.shl + local.tee 0 + i32.const 0 + local.get 0 + i32.sub + i32.or + local.get 3 + i32.and + local.tee 0 + i32.eqz + br_if 3 (;@4;) + local.get 0 + i32.ctz + i32.const 2 + i32.shl + i32.const 1048580 + i32.add + i32.load + local.set 0 + end + local.get 0 + i32.eqz + br_if 1 (;@5;) + end + loop ;; label = @6 + local.get 0 + local.get 6 + local.get 0 + i32.load offset=4 + i32.const -8 + i32.and + local.tee 5 + local.get 2 + i32.sub + local.tee 8 + local.get 1 + i32.lt_u + local.tee 4 + select + local.set 3 + local.get 5 + local.get 2 + i32.lt_u + local.set 7 + local.get 8 + local.get 1 + local.get 4 + select + local.set 8 + block ;; label = @7 + local.get 0 + i32.load offset=16 + local.tee 5 + br_if 0 (;@7;) + local.get 0 + i32.const 20 + i32.add + i32.load + local.set 5 + end + local.get 6 + local.get 3 + local.get 7 + select + local.set 6 + local.get 1 + local.get 8 + local.get 7 + select + local.set 1 + local.get 5 + local.set 0 + local.get 5 + br_if 0 (;@6;) + end + end + local.get 6 + i32.eqz + br_if 0 (;@4;) + block ;; label = @5 + i32.const 0 + i32.load offset=1048996 + local.tee 0 + local.get 2 + i32.lt_u + br_if 0 (;@5;) + local.get 1 + local.get 0 + local.get 2 + i32.sub + i32.ge_u + br_if 1 (;@4;) + end + local.get 6 + i32.load offset=24 + local.set 4 + block ;; label = @5 + block ;; label = @6 + block ;; label = @7 + local.get 6 + i32.load offset=12 + local.tee 0 + local.get 6 + i32.ne + br_if 0 (;@7;) + local.get 6 + i32.const 20 + i32.const 16 + local.get 6 + i32.const 20 + i32.add + local.tee 0 + i32.load + local.tee 7 + select + i32.add + i32.load + local.tee 5 + br_if 1 (;@6;) + i32.const 0 + local.set 0 + br 2 (;@5;) + end + local.get 6 + i32.load offset=8 + local.tee 5 + local.get 0 + i32.store offset=12 + local.get 0 + local.get 5 + i32.store offset=8 + br 1 (;@5;) + end + local.get 0 + local.get 6 + i32.const 16 + i32.add + local.get 7 + select + local.set 7 + loop ;; label = @6 + local.get 7 + local.set 8 + local.get 5 + local.tee 0 + i32.const 20 + i32.add + local.tee 5 + local.get 0 + i32.const 16 + i32.add + local.get 5 + i32.load + local.tee 5 + select + local.set 7 + local.get 0 + i32.const 20 + i32.const 16 + local.get 5 + select + i32.add + i32.load + local.tee 5 + br_if 0 (;@6;) + end + local.get 8 + i32.const 0 + i32.store + end + local.get 4 + i32.eqz + br_if 3 (;@1;) + block ;; label = @5 + local.get 6 + i32.load offset=28 + i32.const 2 + i32.shl + i32.const 1048580 + i32.add + local.tee 5 + i32.load + local.get 6 + i32.eq + br_if 0 (;@5;) + local.get 4 + i32.const 16 + i32.const 20 + local.get 4 + i32.load offset=16 + local.get 6 + i32.eq + select + i32.add + local.get 0 + i32.store + local.get 0 + i32.eqz + br_if 4 (;@1;) + br 3 (;@2;) + end + local.get 5 + local.get 0 + i32.store + local.get 0 + br_if 2 (;@2;) + i32.const 0 + i32.const 0 + i32.load offset=1048992 + i32.const -2 + local.get 6 + i32.load offset=28 + i32.rotl + i32.and + i32.store offset=1048992 + br 3 (;@1;) + end + block ;; label = @4 + block ;; label = @5 + block ;; label = @6 + block ;; label = @7 + block ;; label = @8 + block ;; label = @9 + i32.const 0 + i32.load offset=1048996 + local.tee 0 + local.get 2 + i32.ge_u + br_if 0 (;@9;) + block ;; label = @10 + i32.const 0 + i32.load offset=1049000 + local.tee 0 + local.get 2 + i32.gt_u + br_if 0 (;@10;) + i32.const 0 + local.set 1 + local.get 2 + i32.const 65583 + i32.add + local.tee 5 + i32.const 16 + i32.shr_u + memory.grow + local.tee 0 + i32.const -1 + i32.eq + local.tee 7 + br_if 7 (;@3;) + local.get 0 + i32.const 16 + i32.shl + local.tee 6 + i32.eqz + br_if 7 (;@3;) + i32.const 0 + i32.const 0 + i32.load offset=1049012 + i32.const 0 + local.get 5 + i32.const -65536 + i32.and + local.get 7 + select + local.tee 8 + i32.add + local.tee 0 + i32.store offset=1049012 + i32.const 0 + i32.const 0 + i32.load offset=1049016 + local.tee 1 + local.get 0 + local.get 1 + local.get 0 + i32.gt_u + select + i32.store offset=1049016 + block ;; label = @11 + block ;; label = @12 + block ;; label = @13 + i32.const 0 + i32.load offset=1049008 + local.tee 1 + i32.eqz + br_if 0 (;@13;) + i32.const 1048708 + local.set 0 + loop ;; label = @14 + local.get 0 + i32.load + local.tee 5 + local.get 0 + i32.load offset=4 + local.tee 7 + i32.add + local.get 6 + i32.eq + br_if 2 (;@12;) + local.get 0 + i32.load offset=8 + local.tee 0 + br_if 0 (;@14;) + br 3 (;@11;) + end + end + block ;; label = @13 + block ;; label = @14 + i32.const 0 + i32.load offset=1049024 + local.tee 0 + i32.eqz + br_if 0 (;@14;) + local.get 0 + local.get 6 + i32.le_u + br_if 1 (;@13;) + end + i32.const 0 + local.get 6 + i32.store offset=1049024 + end + i32.const 0 + i32.const 4095 + i32.store offset=1049028 + i32.const 0 + local.get 8 + i32.store offset=1048712 + i32.const 0 + local.get 6 + i32.store offset=1048708 + i32.const 0 + i32.const 1048724 + i32.store offset=1048736 + i32.const 0 + i32.const 1048732 + i32.store offset=1048744 + i32.const 0 + i32.const 1048724 + i32.store offset=1048732 + i32.const 0 + i32.const 1048740 + i32.store offset=1048752 + i32.const 0 + i32.const 1048732 + i32.store offset=1048740 + i32.const 0 + i32.const 1048748 + i32.store offset=1048760 + i32.const 0 + i32.const 1048740 + i32.store offset=1048748 + i32.const 0 + i32.const 1048756 + i32.store offset=1048768 + i32.const 0 + i32.const 1048748 + i32.store offset=1048756 + i32.const 0 + i32.const 1048764 + i32.store offset=1048776 + i32.const 0 + i32.const 1048756 + i32.store offset=1048764 + i32.const 0 + i32.const 1048772 + i32.store offset=1048784 + i32.const 0 + i32.const 1048764 + i32.store offset=1048772 + i32.const 0 + i32.const 1048780 + i32.store offset=1048792 + i32.const 0 + i32.const 1048772 + i32.store offset=1048780 + i32.const 0 + i32.const 0 + i32.store offset=1048720 + i32.const 0 + i32.const 1048788 + i32.store offset=1048800 + i32.const 0 + i32.const 1048780 + i32.store offset=1048788 + i32.const 0 + i32.const 1048788 + i32.store offset=1048796 + i32.const 0 + i32.const 1048796 + i32.store offset=1048808 + i32.const 0 + i32.const 1048796 + i32.store offset=1048804 + i32.const 0 + i32.const 1048804 + i32.store offset=1048816 + i32.const 0 + i32.const 1048804 + i32.store offset=1048812 + i32.const 0 + i32.const 1048812 + i32.store offset=1048824 + i32.const 0 + i32.const 1048812 + i32.store offset=1048820 + i32.const 0 + i32.const 1048820 + i32.store offset=1048832 + i32.const 0 + i32.const 1048820 + i32.store offset=1048828 + i32.const 0 + i32.const 1048828 + i32.store offset=1048840 + i32.const 0 + i32.const 1048828 + i32.store offset=1048836 + i32.const 0 + i32.const 1048836 + i32.store offset=1048848 + i32.const 0 + i32.const 1048836 + i32.store offset=1048844 + i32.const 0 + i32.const 1048844 + i32.store offset=1048856 + i32.const 0 + i32.const 1048844 + i32.store offset=1048852 + i32.const 0 + i32.const 1048852 + i32.store offset=1048864 + i32.const 0 + i32.const 1048860 + i32.store offset=1048872 + i32.const 0 + i32.const 1048852 + i32.store offset=1048860 + i32.const 0 + i32.const 1048868 + i32.store offset=1048880 + i32.const 0 + i32.const 1048860 + i32.store offset=1048868 + i32.const 0 + i32.const 1048876 + i32.store offset=1048888 + i32.const 0 + i32.const 1048868 + i32.store offset=1048876 + i32.const 0 + i32.const 1048884 + i32.store offset=1048896 + i32.const 0 + i32.const 1048876 + i32.store offset=1048884 + i32.const 0 + i32.const 1048892 + i32.store offset=1048904 + i32.const 0 + i32.const 1048884 + i32.store offset=1048892 + i32.const 0 + i32.const 1048900 + i32.store offset=1048912 + i32.const 0 + i32.const 1048892 + i32.store offset=1048900 + i32.const 0 + i32.const 1048908 + i32.store offset=1048920 + i32.const 0 + i32.const 1048900 + i32.store offset=1048908 + i32.const 0 + i32.const 1048916 + i32.store offset=1048928 + i32.const 0 + i32.const 1048908 + i32.store offset=1048916 + i32.const 0 + i32.const 1048924 + i32.store offset=1048936 + i32.const 0 + i32.const 1048916 + i32.store offset=1048924 + i32.const 0 + i32.const 1048932 + i32.store offset=1048944 + i32.const 0 + i32.const 1048924 + i32.store offset=1048932 + i32.const 0 + i32.const 1048940 + i32.store offset=1048952 + i32.const 0 + i32.const 1048932 + i32.store offset=1048940 + i32.const 0 + i32.const 1048948 + i32.store offset=1048960 + i32.const 0 + i32.const 1048940 + i32.store offset=1048948 + i32.const 0 + i32.const 1048956 + i32.store offset=1048968 + i32.const 0 + i32.const 1048948 + i32.store offset=1048956 + i32.const 0 + i32.const 1048964 + i32.store offset=1048976 + i32.const 0 + i32.const 1048956 + i32.store offset=1048964 + i32.const 0 + i32.const 1048972 + i32.store offset=1048984 + i32.const 0 + i32.const 1048964 + i32.store offset=1048972 + i32.const 0 + local.get 6 + i32.store offset=1049008 + i32.const 0 + i32.const 1048972 + i32.store offset=1048980 + i32.const 0 + local.get 8 + i32.const -40 + i32.add + local.tee 0 + i32.store offset=1049000 + local.get 6 + local.get 0 + i32.const 1 + i32.or + i32.store offset=4 + local.get 6 + local.get 0 + i32.add + i32.const 40 + i32.store offset=4 + i32.const 0 + i32.const 2097152 + i32.store offset=1049020 + br 8 (;@4;) + end + local.get 1 + local.get 6 + i32.ge_u + br_if 0 (;@11;) + local.get 5 + local.get 1 + i32.gt_u + br_if 0 (;@11;) + local.get 0 + i32.load offset=12 + i32.eqz + br_if 3 (;@8;) + end + i32.const 0 + i32.const 0 + i32.load offset=1049024 + local.tee 0 + local.get 6 + local.get 0 + local.get 6 + i32.lt_u + select + i32.store offset=1049024 + local.get 6 + local.get 8 + i32.add + local.set 5 + i32.const 1048708 + local.set 0 + block ;; label = @11 + block ;; label = @12 + block ;; label = @13 + loop ;; label = @14 + local.get 0 + i32.load + local.get 5 + i32.eq + br_if 1 (;@13;) + local.get 0 + i32.load offset=8 + local.tee 0 + br_if 0 (;@14;) + br 2 (;@12;) + end + end + local.get 0 + i32.load offset=12 + i32.eqz + br_if 1 (;@11;) + end + i32.const 1048708 + local.set 0 + block ;; label = @12 + loop ;; label = @13 + block ;; label = @14 + local.get 0 + i32.load + local.tee 5 + local.get 1 + i32.gt_u + br_if 0 (;@14;) + local.get 5 + local.get 0 + i32.load offset=4 + i32.add + local.tee 5 + local.get 1 + i32.gt_u + br_if 2 (;@12;) + end + local.get 0 + i32.load offset=8 + local.set 0 + br 0 (;@13;) + end + end + i32.const 0 + local.get 6 + i32.store offset=1049008 + i32.const 0 + local.get 8 + i32.const -40 + i32.add + local.tee 0 + i32.store offset=1049000 + local.get 6 + local.get 0 + i32.const 1 + i32.or + i32.store offset=4 + local.get 6 + local.get 0 + i32.add + i32.const 40 + i32.store offset=4 + i32.const 0 + i32.const 2097152 + i32.store offset=1049020 + local.get 1 + local.get 5 + i32.const -32 + i32.add + i32.const -8 + i32.and + i32.const -8 + i32.add + local.tee 0 + local.get 0 + local.get 1 + i32.const 16 + i32.add + i32.lt_u + select + local.tee 7 + i32.const 27 + i32.store offset=4 + i32.const 0 + i64.load offset=1048708 align=4 + local.set 9 + local.get 7 + i32.const 16 + i32.add + i32.const 0 + i64.load offset=1048716 align=4 + i64.store align=4 + local.get 7 + local.get 9 + i64.store offset=8 align=4 + i32.const 0 + local.get 8 + i32.store offset=1048712 + i32.const 0 + local.get 6 + i32.store offset=1048708 + i32.const 0 + local.get 7 + i32.const 8 + i32.add + i32.store offset=1048716 + i32.const 0 + i32.const 0 + i32.store offset=1048720 + local.get 7 + i32.const 28 + i32.add + local.set 0 + loop ;; label = @12 + local.get 0 + i32.const 7 + i32.store + local.get 0 + i32.const 4 + i32.add + local.tee 0 + local.get 5 + i32.lt_u + br_if 0 (;@12;) + end + local.get 7 + local.get 1 + i32.eq + br_if 7 (;@4;) + local.get 7 + local.get 7 + i32.load offset=4 + i32.const -2 + i32.and + i32.store offset=4 + local.get 1 + local.get 7 + local.get 1 + i32.sub + local.tee 0 + i32.const 1 + i32.or + i32.store offset=4 + local.get 7 + local.get 0 + i32.store + block ;; label = @12 + local.get 0 + i32.const 256 + i32.lt_u + br_if 0 (;@12;) + local.get 1 + local.get 0 + call 4 + br 8 (;@4;) + end + local.get 0 + i32.const -8 + i32.and + i32.const 1048724 + i32.add + local.set 5 + block ;; label = @12 + block ;; label = @13 + i32.const 0 + i32.load offset=1048988 + local.tee 6 + i32.const 1 + local.get 0 + i32.const 3 + i32.shr_u + i32.shl + local.tee 0 + i32.and + br_if 0 (;@13;) + i32.const 0 + local.get 6 + local.get 0 + i32.or + i32.store offset=1048988 + local.get 5 + local.set 0 + br 1 (;@12;) + end + local.get 5 + i32.load offset=8 + local.set 0 + end + local.get 5 + local.get 1 + i32.store offset=8 + local.get 0 + local.get 1 + i32.store offset=12 + local.get 1 + local.get 5 + i32.store offset=12 + local.get 1 + local.get 0 + i32.store offset=8 + br 7 (;@4;) + end + local.get 0 + local.get 6 + i32.store + local.get 0 + local.get 0 + i32.load offset=4 + local.get 8 + i32.add + i32.store offset=4 + local.get 6 + local.get 2 + i32.const 3 + i32.or + i32.store offset=4 + local.get 5 + local.get 6 + local.get 2 + i32.add + local.tee 0 + i32.sub + local.set 2 + local.get 5 + i32.const 0 + i32.load offset=1049008 + i32.eq + br_if 3 (;@7;) + local.get 5 + i32.const 0 + i32.load offset=1049004 + i32.eq + br_if 4 (;@6;) + block ;; label = @11 + local.get 5 + i32.load offset=4 + local.tee 1 + i32.const 3 + i32.and + i32.const 1 + i32.ne + br_if 0 (;@11;) + local.get 5 + local.get 1 + i32.const -8 + i32.and + local.tee 1 + call 5 + local.get 1 + local.get 2 + i32.add + local.set 2 + local.get 5 + local.get 1 + i32.add + local.tee 5 + i32.load offset=4 + local.set 1 + end + local.get 5 + local.get 1 + i32.const -2 + i32.and + i32.store offset=4 + local.get 0 + local.get 2 + i32.const 1 + i32.or + i32.store offset=4 + local.get 0 + local.get 2 + i32.add + local.get 2 + i32.store + block ;; label = @11 + local.get 2 + i32.const 256 + i32.lt_u + br_if 0 (;@11;) + local.get 0 + local.get 2 + call 4 + br 6 (;@5;) + end + local.get 2 + i32.const -8 + i32.and + i32.const 1048724 + i32.add + local.set 1 + block ;; label = @11 + block ;; label = @12 + i32.const 0 + i32.load offset=1048988 + local.tee 5 + i32.const 1 + local.get 2 + i32.const 3 + i32.shr_u + i32.shl + local.tee 2 + i32.and + br_if 0 (;@12;) + i32.const 0 + local.get 5 + local.get 2 + i32.or + i32.store offset=1048988 + local.get 1 + local.set 2 + br 1 (;@11;) + end + local.get 1 + i32.load offset=8 + local.set 2 + end + local.get 1 + local.get 0 + i32.store offset=8 + local.get 2 + local.get 0 + i32.store offset=12 + local.get 0 + local.get 1 + i32.store offset=12 + local.get 0 + local.get 2 + i32.store offset=8 + br 5 (;@5;) + end + i32.const 0 + local.get 0 + local.get 2 + i32.sub + local.tee 1 + i32.store offset=1049000 + i32.const 0 + i32.const 0 + i32.load offset=1049008 + local.tee 0 + local.get 2 + i32.add + local.tee 5 + i32.store offset=1049008 + local.get 5 + local.get 1 + i32.const 1 + i32.or + i32.store offset=4 + local.get 0 + local.get 2 + i32.const 3 + i32.or + i32.store offset=4 + local.get 0 + i32.const 8 + i32.add + local.set 1 + br 6 (;@3;) + end + i32.const 0 + i32.load offset=1049004 + local.set 1 + block ;; label = @9 + block ;; label = @10 + local.get 0 + local.get 2 + i32.sub + local.tee 5 + i32.const 15 + i32.gt_u + br_if 0 (;@10;) + i32.const 0 + i32.const 0 + i32.store offset=1049004 + i32.const 0 + i32.const 0 + i32.store offset=1048996 + local.get 1 + local.get 0 + i32.const 3 + i32.or + i32.store offset=4 + local.get 1 + local.get 0 + i32.add + local.tee 0 + local.get 0 + i32.load offset=4 + i32.const 1 + i32.or + i32.store offset=4 + br 1 (;@9;) + end + i32.const 0 + local.get 5 + i32.store offset=1048996 + i32.const 0 + local.get 1 + local.get 2 + i32.add + local.tee 6 + i32.store offset=1049004 + local.get 6 + local.get 5 + i32.const 1 + i32.or + i32.store offset=4 + local.get 1 + local.get 0 + i32.add + local.get 5 + i32.store + local.get 1 + local.get 2 + i32.const 3 + i32.or + i32.store offset=4 + end + local.get 1 + i32.const 8 + i32.add + return + end + local.get 0 + local.get 7 + local.get 8 + i32.add + i32.store offset=4 + i32.const 0 + i32.const 0 + i32.load offset=1049008 + local.tee 0 + i32.const 15 + i32.add + i32.const -8 + i32.and + local.tee 1 + i32.const -8 + i32.add + local.tee 5 + i32.store offset=1049008 + i32.const 0 + local.get 0 + local.get 1 + i32.sub + i32.const 0 + i32.load offset=1049000 + local.get 8 + i32.add + local.tee 1 + i32.add + i32.const 8 + i32.add + local.tee 6 + i32.store offset=1049000 + local.get 5 + local.get 6 + i32.const 1 + i32.or + i32.store offset=4 + local.get 0 + local.get 1 + i32.add + i32.const 40 + i32.store offset=4 + i32.const 0 + i32.const 2097152 + i32.store offset=1049020 + br 3 (;@4;) + end + i32.const 0 + local.get 0 + i32.store offset=1049008 + i32.const 0 + i32.const 0 + i32.load offset=1049000 + local.get 2 + i32.add + local.tee 2 + i32.store offset=1049000 + local.get 0 + local.get 2 + i32.const 1 + i32.or + i32.store offset=4 + br 1 (;@5;) + end + i32.const 0 + local.get 0 + i32.store offset=1049004 + i32.const 0 + i32.const 0 + i32.load offset=1048996 + local.get 2 + i32.add + local.tee 2 + i32.store offset=1048996 + local.get 0 + local.get 2 + i32.const 1 + i32.or + i32.store offset=4 + local.get 0 + local.get 2 + i32.add + local.get 2 + i32.store + end + local.get 6 + i32.const 8 + i32.add + return + end + i32.const 0 + local.set 1 + i32.const 0 + i32.load offset=1049000 + local.tee 0 + local.get 2 + i32.le_u + br_if 0 (;@3;) + i32.const 0 + local.get 0 + local.get 2 + i32.sub + local.tee 1 + i32.store offset=1049000 + i32.const 0 + i32.const 0 + i32.load offset=1049008 + local.tee 0 + local.get 2 + i32.add + local.tee 5 + i32.store offset=1049008 + local.get 5 + local.get 1 + i32.const 1 + i32.or + i32.store offset=4 + local.get 0 + local.get 2 + i32.const 3 + i32.or + i32.store offset=4 + local.get 0 + i32.const 8 + i32.add + return + end + local.get 1 + return + end + local.get 0 + local.get 4 + i32.store offset=24 + block ;; label = @2 + local.get 6 + i32.load offset=16 + local.tee 5 + i32.eqz + br_if 0 (;@2;) + local.get 0 + local.get 5 + i32.store offset=16 + local.get 5 + local.get 0 + i32.store offset=24 + end + local.get 6 + i32.const 20 + i32.add + i32.load + local.tee 5 + i32.eqz + br_if 0 (;@1;) + local.get 0 + i32.const 20 + i32.add + local.get 5 + i32.store + local.get 5 + local.get 0 + i32.store offset=24 + end + block ;; label = @1 + block ;; label = @2 + local.get 1 + i32.const 16 + i32.lt_u + br_if 0 (;@2;) + local.get 6 + local.get 2 + i32.const 3 + i32.or + i32.store offset=4 + local.get 6 + local.get 2 + i32.add + local.tee 0 + local.get 1 + i32.const 1 + i32.or + i32.store offset=4 + local.get 0 + local.get 1 + i32.add + local.get 1 + i32.store + block ;; label = @3 + local.get 1 + i32.const 256 + i32.lt_u + br_if 0 (;@3;) + local.get 0 + local.get 1 + call 4 + br 2 (;@1;) + end + local.get 1 + i32.const -8 + i32.and + i32.const 1048724 + i32.add + local.set 2 + block ;; label = @3 + block ;; label = @4 + i32.const 0 + i32.load offset=1048988 + local.tee 5 + i32.const 1 + local.get 1 + i32.const 3 + i32.shr_u + i32.shl + local.tee 1 + i32.and + br_if 0 (;@4;) + i32.const 0 + local.get 5 + local.get 1 + i32.or + i32.store offset=1048988 + local.get 2 + local.set 1 + br 1 (;@3;) + end + local.get 2 + i32.load offset=8 + local.set 1 + end + local.get 2 + local.get 0 + i32.store offset=8 + local.get 1 + local.get 0 + i32.store offset=12 + local.get 0 + local.get 2 + i32.store offset=12 + local.get 0 + local.get 1 + i32.store offset=8 + br 1 (;@1;) + end + local.get 6 + local.get 1 + local.get 2 + i32.add + local.tee 0 + i32.const 3 + i32.or + i32.store offset=4 + local.get 6 + local.get 0 + i32.add + local.tee 0 + local.get 0 + i32.load offset=4 + i32.const 1 + i32.or + i32.store offset=4 + end + local.get 6 + i32.const 8 + i32.add + ) + (func (;3;) (type 3) (param i32 i32) + (local i32 i32) + local.get 0 + local.get 1 + i32.add + local.set 2 + block ;; label = @1 + block ;; label = @2 + local.get 0 + i32.load offset=4 + local.tee 3 + i32.const 1 + i32.and + br_if 0 (;@2;) + local.get 3 + i32.const 3 + i32.and + i32.eqz + br_if 1 (;@1;) + local.get 0 + i32.load + local.tee 3 + local.get 1 + i32.add + local.set 1 + block ;; label = @3 + local.get 0 + local.get 3 + i32.sub + local.tee 0 + i32.const 0 + i32.load offset=1049004 + i32.ne + br_if 0 (;@3;) + local.get 2 + i32.load offset=4 + i32.const 3 + i32.and + i32.const 3 + i32.ne + br_if 1 (;@2;) + i32.const 0 + local.get 1 + i32.store offset=1048996 + local.get 2 + local.get 2 + i32.load offset=4 + i32.const -2 + i32.and + i32.store offset=4 + local.get 0 + local.get 1 + i32.const 1 + i32.or + i32.store offset=4 + local.get 2 + local.get 1 + i32.store + return + end + local.get 0 + local.get 3 + call 5 + end + block ;; label = @2 + block ;; label = @3 + block ;; label = @4 + block ;; label = @5 + local.get 2 + i32.load offset=4 + local.tee 3 + i32.const 2 + i32.and + br_if 0 (;@5;) + local.get 2 + i32.const 0 + i32.load offset=1049008 + i32.eq + br_if 2 (;@3;) + local.get 2 + i32.const 0 + i32.load offset=1049004 + i32.eq + br_if 3 (;@2;) + local.get 2 + local.get 3 + i32.const -8 + i32.and + local.tee 3 + call 5 + local.get 0 + local.get 3 + local.get 1 + i32.add + local.tee 1 + i32.const 1 + i32.or + i32.store offset=4 + local.get 0 + local.get 1 + i32.add + local.get 1 + i32.store + local.get 0 + i32.const 0 + i32.load offset=1049004 + i32.ne + br_if 1 (;@4;) + i32.const 0 + local.get 1 + i32.store offset=1048996 + return + end + local.get 2 + local.get 3 + i32.const -2 + i32.and + i32.store offset=4 + local.get 0 + local.get 1 + i32.const 1 + i32.or + i32.store offset=4 + local.get 0 + local.get 1 + i32.add + local.get 1 + i32.store + end + block ;; label = @4 + local.get 1 + i32.const 256 + i32.lt_u + br_if 0 (;@4;) + local.get 0 + local.get 1 + call 4 + br 3 (;@1;) + end + local.get 1 + i32.const -8 + i32.and + i32.const 1048724 + i32.add + local.set 2 + block ;; label = @4 + block ;; label = @5 + i32.const 0 + i32.load offset=1048988 + local.tee 3 + i32.const 1 + local.get 1 + i32.const 3 + i32.shr_u + i32.shl + local.tee 1 + i32.and + br_if 0 (;@5;) + i32.const 0 + local.get 3 + local.get 1 + i32.or + i32.store offset=1048988 + local.get 2 + local.set 1 + br 1 (;@4;) + end + local.get 2 + i32.load offset=8 + local.set 1 + end + local.get 2 + local.get 0 + i32.store offset=8 + local.get 1 + local.get 0 + i32.store offset=12 + local.get 0 + local.get 2 + i32.store offset=12 + local.get 0 + local.get 1 + i32.store offset=8 + return + end + i32.const 0 + local.get 0 + i32.store offset=1049008 + i32.const 0 + i32.const 0 + i32.load offset=1049000 + local.get 1 + i32.add + local.tee 1 + i32.store offset=1049000 + local.get 0 + local.get 1 + i32.const 1 + i32.or + i32.store offset=4 + local.get 0 + i32.const 0 + i32.load offset=1049004 + i32.ne + br_if 1 (;@1;) + i32.const 0 + i32.const 0 + i32.store offset=1048996 + i32.const 0 + i32.const 0 + i32.store offset=1049004 + return + end + i32.const 0 + local.get 0 + i32.store offset=1049004 + i32.const 0 + i32.const 0 + i32.load offset=1048996 + local.get 1 + i32.add + local.tee 1 + i32.store offset=1048996 + local.get 0 + local.get 1 + i32.const 1 + i32.or + i32.store offset=4 + local.get 0 + local.get 1 + i32.add + local.get 1 + i32.store + return + end + ) + (func (;4;) (type 3) (param i32 i32) + (local i32 i32 i32 i32) + i32.const 31 + local.set 2 + block ;; label = @1 + local.get 1 + i32.const 16777215 + i32.gt_u + br_if 0 (;@1;) + local.get 1 + i32.const 6 + local.get 1 + i32.const 8 + i32.shr_u + i32.clz + local.tee 2 + i32.sub + i32.shr_u + i32.const 1 + i32.and + local.get 2 + i32.const 1 + i32.shl + i32.sub + i32.const 62 + i32.add + local.set 2 + end + local.get 0 + i64.const 0 + i64.store offset=16 align=4 + local.get 0 + local.get 2 + i32.store offset=28 + local.get 2 + i32.const 2 + i32.shl + i32.const 1048580 + i32.add + local.set 3 + block ;; label = @1 + block ;; label = @2 + i32.const 0 + i32.load offset=1048992 + local.tee 4 + i32.const 1 + local.get 2 + i32.shl + local.tee 5 + i32.and + br_if 0 (;@2;) + i32.const 0 + local.get 4 + local.get 5 + i32.or + i32.store offset=1048992 + local.get 3 + local.get 0 + i32.store + local.get 0 + local.get 3 + i32.store offset=24 + br 1 (;@1;) + end + block ;; label = @2 + block ;; label = @3 + block ;; label = @4 + local.get 3 + i32.load + local.tee 4 + i32.load offset=4 + i32.const -8 + i32.and + local.get 1 + i32.ne + br_if 0 (;@4;) + local.get 4 + local.set 2 + br 1 (;@3;) + end + local.get 1 + i32.const 0 + i32.const 25 + local.get 2 + i32.const 1 + i32.shr_u + i32.sub + local.get 2 + i32.const 31 + i32.eq + select + i32.shl + local.set 3 + loop ;; label = @4 + local.get 4 + local.get 3 + i32.const 29 + i32.shr_u + i32.const 4 + i32.and + i32.add + i32.const 16 + i32.add + local.tee 5 + i32.load + local.tee 2 + i32.eqz + br_if 2 (;@2;) + local.get 3 + i32.const 1 + i32.shl + local.set 3 + local.get 2 + local.set 4 + local.get 2 + i32.load offset=4 + i32.const -8 + i32.and + local.get 1 + i32.ne + br_if 0 (;@4;) + end + end + local.get 2 + i32.load offset=8 + local.tee 3 + local.get 0 + i32.store offset=12 + local.get 2 + local.get 0 + i32.store offset=8 + local.get 0 + i32.const 0 + i32.store offset=24 + local.get 0 + local.get 2 + i32.store offset=12 + local.get 0 + local.get 3 + i32.store offset=8 + return + end + local.get 5 + local.get 0 + i32.store + local.get 0 + local.get 4 + i32.store offset=24 + end + local.get 0 + local.get 0 + i32.store offset=12 + local.get 0 + local.get 0 + i32.store offset=8 + ) + (func (;5;) (type 3) (param i32 i32) + (local i32 i32 i32 i32) + local.get 0 + i32.load offset=12 + local.set 2 + block ;; label = @1 + block ;; label = @2 + block ;; label = @3 + local.get 1 + i32.const 256 + i32.lt_u + br_if 0 (;@3;) + local.get 0 + i32.load offset=24 + local.set 3 + block ;; label = @4 + block ;; label = @5 + block ;; label = @6 + local.get 2 + local.get 0 + i32.ne + br_if 0 (;@6;) + local.get 0 + i32.const 20 + i32.const 16 + local.get 0 + i32.const 20 + i32.add + local.tee 2 + i32.load + local.tee 4 + select + i32.add + i32.load + local.tee 1 + br_if 1 (;@5;) + i32.const 0 + local.set 2 + br 2 (;@4;) + end + local.get 0 + i32.load offset=8 + local.tee 1 + local.get 2 + i32.store offset=12 + local.get 2 + local.get 1 + i32.store offset=8 + br 1 (;@4;) + end + local.get 2 + local.get 0 + i32.const 16 + i32.add + local.get 4 + select + local.set 4 + loop ;; label = @5 + local.get 4 + local.set 5 + local.get 1 + local.tee 2 + i32.const 20 + i32.add + local.tee 1 + local.get 2 + i32.const 16 + i32.add + local.get 1 + i32.load + local.tee 1 + select + local.set 4 + local.get 2 + i32.const 20 + i32.const 16 + local.get 1 + select + i32.add + i32.load + local.tee 1 + br_if 0 (;@5;) + end + local.get 5 + i32.const 0 + i32.store + end + local.get 3 + i32.eqz + br_if 2 (;@1;) + block ;; label = @4 + local.get 0 + i32.load offset=28 + i32.const 2 + i32.shl + i32.const 1048580 + i32.add + local.tee 1 + i32.load + local.get 0 + i32.eq + br_if 0 (;@4;) + local.get 3 + i32.const 16 + i32.const 20 + local.get 3 + i32.load offset=16 + local.get 0 + i32.eq + select + i32.add + local.get 2 + i32.store + local.get 2 + i32.eqz + br_if 3 (;@1;) + br 2 (;@2;) + end + local.get 1 + local.get 2 + i32.store + local.get 2 + br_if 1 (;@2;) + i32.const 0 + i32.const 0 + i32.load offset=1048992 + i32.const -2 + local.get 0 + i32.load offset=28 + i32.rotl + i32.and + i32.store offset=1048992 + br 2 (;@1;) + end + block ;; label = @3 + local.get 2 + local.get 0 + i32.load offset=8 + local.tee 4 + i32.eq + br_if 0 (;@3;) + local.get 4 + local.get 2 + i32.store offset=12 + local.get 2 + local.get 4 + i32.store offset=8 + return + end + i32.const 0 + i32.const 0 + i32.load offset=1048988 + i32.const -2 + local.get 1 + i32.const 3 + i32.shr_u + i32.rotl + i32.and + i32.store offset=1048988 + return + end + local.get 2 + local.get 3 + i32.store offset=24 + block ;; label = @2 + local.get 0 + i32.load offset=16 + local.tee 1 + i32.eqz + br_if 0 (;@2;) + local.get 2 + local.get 1 + i32.store offset=16 + local.get 1 + local.get 2 + i32.store offset=24 + end + local.get 0 + i32.const 20 + i32.add + i32.load + local.tee 1 + i32.eqz + br_if 0 (;@1;) + local.get 2 + i32.const 20 + i32.add + local.get 1 + i32.store + local.get 1 + local.get 2 + i32.store offset=24 + return + end + ) + (func (;6;) (type 4) (param i32) + (local i32 i32 i32 i32 i32) + local.get 0 + i32.const -8 + i32.add + local.tee 1 + local.get 0 + i32.const -4 + i32.add + i32.load + local.tee 2 + i32.const -8 + i32.and + local.tee 0 + i32.add + local.set 3 + block ;; label = @1 + block ;; label = @2 + block ;; label = @3 + block ;; label = @4 + local.get 2 + i32.const 1 + i32.and + br_if 0 (;@4;) + local.get 2 + i32.const 3 + i32.and + i32.eqz + br_if 1 (;@3;) + local.get 1 + i32.load + local.tee 2 + local.get 0 + i32.add + local.set 0 + block ;; label = @5 + local.get 1 + local.get 2 + i32.sub + local.tee 1 + i32.const 0 + i32.load offset=1049004 + i32.ne + br_if 0 (;@5;) + local.get 3 + i32.load offset=4 + i32.const 3 + i32.and + i32.const 3 + i32.ne + br_if 1 (;@4;) + i32.const 0 + local.get 0 + i32.store offset=1048996 + local.get 3 + local.get 3 + i32.load offset=4 + i32.const -2 + i32.and + i32.store offset=4 + local.get 1 + local.get 0 + i32.const 1 + i32.or + i32.store offset=4 + local.get 3 + local.get 0 + i32.store + return + end + local.get 1 + local.get 2 + call 5 + end + block ;; label = @4 + block ;; label = @5 + block ;; label = @6 + local.get 3 + i32.load offset=4 + local.tee 2 + i32.const 2 + i32.and + br_if 0 (;@6;) + local.get 3 + i32.const 0 + i32.load offset=1049008 + i32.eq + br_if 2 (;@4;) + local.get 3 + i32.const 0 + i32.load offset=1049004 + i32.eq + br_if 5 (;@1;) + local.get 3 + local.get 2 + i32.const -8 + i32.and + local.tee 2 + call 5 + local.get 1 + local.get 2 + local.get 0 + i32.add + local.tee 0 + i32.const 1 + i32.or + i32.store offset=4 + local.get 1 + local.get 0 + i32.add + local.get 0 + i32.store + local.get 1 + i32.const 0 + i32.load offset=1049004 + i32.ne + br_if 1 (;@5;) + i32.const 0 + local.get 0 + i32.store offset=1048996 + return + end + local.get 3 + local.get 2 + i32.const -2 + i32.and + i32.store offset=4 + local.get 1 + local.get 0 + i32.const 1 + i32.or + i32.store offset=4 + local.get 1 + local.get 0 + i32.add + local.get 0 + i32.store + end + local.get 0 + i32.const 256 + i32.lt_u + br_if 2 (;@2;) + local.get 1 + local.get 0 + call 4 + i32.const 0 + local.set 1 + i32.const 0 + i32.const 0 + i32.load offset=1049028 + i32.const -1 + i32.add + local.tee 0 + i32.store offset=1049028 + local.get 0 + br_if 1 (;@3;) + block ;; label = @5 + i32.const 0 + i32.load offset=1048716 + local.tee 0 + i32.eqz + br_if 0 (;@5;) + i32.const 0 + local.set 1 + loop ;; label = @6 + local.get 1 + i32.const 1 + i32.add + local.set 1 + local.get 0 + i32.load offset=8 + local.tee 0 + br_if 0 (;@6;) + end + end + i32.const 0 + local.get 1 + i32.const 4095 + local.get 1 + i32.const 4095 + i32.gt_u + select + i32.store offset=1049028 + return + end + i32.const 0 + local.get 1 + i32.store offset=1049008 + i32.const 0 + i32.const 0 + i32.load offset=1049000 + local.get 0 + i32.add + local.tee 0 + i32.store offset=1049000 + local.get 1 + local.get 0 + i32.const 1 + i32.or + i32.store offset=4 + block ;; label = @4 + local.get 1 + i32.const 0 + i32.load offset=1049004 + i32.ne + br_if 0 (;@4;) + i32.const 0 + i32.const 0 + i32.store offset=1048996 + i32.const 0 + i32.const 0 + i32.store offset=1049004 + end + local.get 0 + i32.const 0 + i32.load offset=1049020 + local.tee 4 + i32.le_u + br_if 0 (;@3;) + i32.const 0 + i32.load offset=1049008 + local.tee 3 + i32.eqz + br_if 0 (;@3;) + i32.const 0 + local.set 1 + block ;; label = @4 + i32.const 0 + i32.load offset=1049000 + local.tee 5 + i32.const 41 + i32.lt_u + br_if 0 (;@4;) + i32.const 1048708 + local.set 0 + loop ;; label = @5 + block ;; label = @6 + local.get 0 + i32.load + local.tee 2 + local.get 3 + i32.gt_u + br_if 0 (;@6;) + local.get 2 + local.get 0 + i32.load offset=4 + i32.add + local.get 3 + i32.gt_u + br_if 2 (;@4;) + end + local.get 0 + i32.load offset=8 + local.tee 0 + br_if 0 (;@5;) + end + end + block ;; label = @4 + i32.const 0 + i32.load offset=1048716 + local.tee 0 + i32.eqz + br_if 0 (;@4;) + i32.const 0 + local.set 1 + loop ;; label = @5 + local.get 1 + i32.const 1 + i32.add + local.set 1 + local.get 0 + i32.load offset=8 + local.tee 0 + br_if 0 (;@5;) + end + end + i32.const 0 + local.get 1 + i32.const 4095 + local.get 1 + i32.const 4095 + i32.gt_u + select + i32.store offset=1049028 + local.get 5 + local.get 4 + i32.le_u + br_if 0 (;@3;) + i32.const 0 + i32.const -1 + i32.store offset=1049020 + end + return + end + local.get 0 + i32.const -8 + i32.and + i32.const 1048724 + i32.add + local.set 3 + block ;; label = @2 + block ;; label = @3 + i32.const 0 + i32.load offset=1048988 + local.tee 2 + i32.const 1 + local.get 0 + i32.const 3 + i32.shr_u + i32.shl + local.tee 0 + i32.and + br_if 0 (;@3;) + i32.const 0 + local.get 2 + local.get 0 + i32.or + i32.store offset=1048988 + local.get 3 + local.set 0 + br 1 (;@2;) + end + local.get 3 + i32.load offset=8 + local.set 0 + end + local.get 3 + local.get 1 + i32.store offset=8 + local.get 0 + local.get 1 + i32.store offset=12 + local.get 1 + local.get 3 + i32.store offset=12 + local.get 1 + local.get 0 + i32.store offset=8 + return + end + i32.const 0 + local.get 1 + i32.store offset=1049004 + i32.const 0 + i32.const 0 + i32.load offset=1048996 + local.get 0 + i32.add + local.tee 0 + i32.store offset=1048996 + local.get 1 + local.get 0 + i32.const 1 + i32.or + i32.store offset=4 + local.get 1 + local.get 0 + i32.add + local.get 0 + i32.store + ) + (func (;7;) (type 5) (param i32 i32 i32 i32) (result i32) + (local i32 i32 i32 i32) + block ;; label = @1 + block ;; label = @2 + block ;; label = @3 + block ;; label = @4 + block ;; label = @5 + block ;; label = @6 + local.get 1 + br_if 0 (;@6;) + local.get 3 + br_if 1 (;@5;) + local.get 2 + return + end + block ;; label = @6 + local.get 2 + i32.const 9 + i32.lt_u + br_if 0 (;@6;) + local.get 2 + local.get 3 + call 1 + local.tee 2 + i32.eqz + br_if 2 (;@4;) + local.get 2 + local.get 0 + local.get 1 + local.get 3 + local.get 1 + local.get 3 + i32.lt_u + select + call 9 + local.set 3 + local.get 0 + call 6 + local.get 3 + return + end + local.get 3 + i32.const -65588 + i32.gt_u + br_if 1 (;@4;) + i32.const 16 + local.get 3 + i32.const 11 + i32.add + i32.const -8 + i32.and + local.get 3 + i32.const 11 + i32.lt_u + select + local.set 1 + local.get 0 + i32.const -4 + i32.add + local.tee 4 + i32.load + local.tee 5 + i32.const -8 + i32.and + local.set 2 + block ;; label = @6 + block ;; label = @7 + local.get 5 + i32.const 3 + i32.and + br_if 0 (;@7;) + local.get 1 + i32.const 256 + i32.lt_u + br_if 1 (;@6;) + local.get 2 + local.get 1 + i32.const 4 + i32.or + i32.lt_u + br_if 1 (;@6;) + local.get 2 + local.get 1 + i32.sub + i32.const 131073 + i32.ge_u + br_if 1 (;@6;) + br 5 (;@2;) + end + local.get 0 + i32.const -8 + i32.add + local.tee 6 + local.get 2 + i32.add + local.set 7 + block ;; label = @7 + block ;; label = @8 + block ;; label = @9 + local.get 2 + local.get 1 + i32.ge_u + br_if 0 (;@9;) + local.get 7 + i32.const 0 + i32.load offset=1049008 + i32.eq + br_if 2 (;@7;) + local.get 7 + i32.const 0 + i32.load offset=1049004 + i32.eq + br_if 1 (;@8;) + local.get 7 + i32.load offset=4 + local.tee 5 + i32.const 2 + i32.and + br_if 3 (;@6;) + local.get 5 + i32.const -8 + i32.and + local.tee 5 + local.get 2 + i32.add + local.tee 2 + local.get 1 + i32.lt_u + br_if 3 (;@6;) + local.get 7 + local.get 5 + call 5 + local.get 2 + local.get 1 + i32.sub + local.tee 3 + i32.const 16 + i32.lt_u + br_if 6 (;@3;) + local.get 4 + local.get 1 + local.get 4 + i32.load + i32.const 1 + i32.and + i32.or + i32.const 2 + i32.or + i32.store + local.get 6 + local.get 1 + i32.add + local.tee 1 + local.get 3 + i32.const 3 + i32.or + i32.store offset=4 + local.get 6 + local.get 2 + i32.add + local.tee 2 + local.get 2 + i32.load offset=4 + i32.const 1 + i32.or + i32.store offset=4 + local.get 1 + local.get 3 + call 3 + local.get 0 + return + end + local.get 2 + local.get 1 + i32.sub + local.tee 3 + i32.const 15 + i32.le_u + br_if 6 (;@2;) + local.get 4 + local.get 1 + local.get 5 + i32.const 1 + i32.and + i32.or + i32.const 2 + i32.or + i32.store + local.get 6 + local.get 1 + i32.add + local.tee 1 + local.get 3 + i32.const 3 + i32.or + i32.store offset=4 + local.get 7 + local.get 7 + i32.load offset=4 + i32.const 1 + i32.or + i32.store offset=4 + local.get 1 + local.get 3 + call 3 + local.get 0 + return + end + i32.const 0 + i32.load offset=1048996 + local.get 2 + i32.add + local.tee 2 + local.get 1 + i32.lt_u + br_if 1 (;@6;) + block ;; label = @8 + block ;; label = @9 + local.get 2 + local.get 1 + i32.sub + local.tee 3 + i32.const 15 + i32.gt_u + br_if 0 (;@9;) + local.get 4 + local.get 5 + i32.const 1 + i32.and + local.get 2 + i32.or + i32.const 2 + i32.or + i32.store + local.get 6 + local.get 2 + i32.add + local.tee 3 + local.get 3 + i32.load offset=4 + i32.const 1 + i32.or + i32.store offset=4 + i32.const 0 + local.set 3 + i32.const 0 + local.set 1 + br 1 (;@8;) + end + local.get 4 + local.get 1 + local.get 5 + i32.const 1 + i32.and + i32.or + i32.const 2 + i32.or + i32.store + local.get 6 + local.get 1 + i32.add + local.tee 1 + local.get 3 + i32.const 1 + i32.or + i32.store offset=4 + local.get 6 + local.get 2 + i32.add + local.tee 2 + local.get 3 + i32.store + local.get 2 + local.get 2 + i32.load offset=4 + i32.const -2 + i32.and + i32.store offset=4 + end + i32.const 0 + local.get 1 + i32.store offset=1049004 + i32.const 0 + local.get 3 + i32.store offset=1048996 + local.get 0 + return + end + i32.const 0 + i32.load offset=1049000 + local.get 2 + i32.add + local.tee 2 + local.get 1 + i32.gt_u + br_if 5 (;@1;) + end + local.get 3 + call 2 + local.tee 1 + i32.eqz + br_if 1 (;@4;) + local.get 1 + local.get 0 + i32.const -4 + i32.const -8 + local.get 4 + i32.load + local.tee 2 + i32.const 3 + i32.and + select + local.get 2 + i32.const -8 + i32.and + i32.add + local.tee 2 + local.get 3 + local.get 2 + local.get 3 + i32.lt_u + select + call 9 + local.set 3 + local.get 0 + call 6 + local.get 3 + return + end + i32.const 0 + i32.load8_u offset=1049032 + drop + block ;; label = @5 + block ;; label = @6 + local.get 2 + i32.const 9 + i32.lt_u + br_if 0 (;@6;) + local.get 2 + local.get 3 + call 1 + local.set 0 + br 1 (;@5;) + end + local.get 3 + call 2 + local.set 0 + end + local.get 0 + br_if 2 (;@2;) + end + unreachable + unreachable + end + local.get 4 + local.get 2 + local.get 4 + i32.load + i32.const 1 + i32.and + i32.or + i32.const 2 + i32.or + i32.store + local.get 6 + local.get 2 + i32.add + local.tee 3 + local.get 3 + i32.load offset=4 + i32.const 1 + i32.or + i32.store offset=4 + end + local.get 0 + return + end + local.get 4 + local.get 1 + local.get 5 + i32.const 1 + i32.and + i32.or + i32.const 2 + i32.or + i32.store + local.get 6 + local.get 1 + i32.add + local.tee 3 + local.get 2 + local.get 1 + i32.sub + local.tee 1 + i32.const 1 + i32.or + i32.store offset=4 + i32.const 0 + local.get 1 + i32.store offset=1049000 + i32.const 0 + local.get 3 + i32.store offset=1049008 + local.get 0 + ) + (func (;8;) (type 6) (param i32 i32 i32) (result i32) + (local i32 i32 i32 i32 i32 i32 i32 i32) + block ;; label = @1 + block ;; label = @2 + local.get 2 + i32.const 16 + i32.ge_u + br_if 0 (;@2;) + local.get 0 + local.set 3 + br 1 (;@1;) + end + local.get 0 + i32.const 0 + local.get 0 + i32.sub + i32.const 3 + i32.and + local.tee 4 + i32.add + local.set 5 + block ;; label = @2 + local.get 4 + i32.eqz + br_if 0 (;@2;) + local.get 0 + local.set 3 + local.get 1 + local.set 6 + loop ;; label = @3 + local.get 3 + local.get 6 + i32.load8_u + i32.store8 + local.get 6 + i32.const 1 + i32.add + local.set 6 + local.get 3 + i32.const 1 + i32.add + local.tee 3 + local.get 5 + i32.lt_u + br_if 0 (;@3;) + end + end + local.get 5 + local.get 2 + local.get 4 + i32.sub + local.tee 7 + i32.const -4 + i32.and + local.tee 8 + i32.add + local.set 3 + block ;; label = @2 + block ;; label = @3 + local.get 1 + local.get 4 + i32.add + local.tee 9 + i32.const 3 + i32.and + i32.eqz + br_if 0 (;@3;) + local.get 8 + i32.const 1 + i32.lt_s + br_if 1 (;@2;) + local.get 9 + i32.const 3 + i32.shl + local.tee 6 + i32.const 24 + i32.and + local.set 2 + local.get 9 + i32.const -4 + i32.and + local.tee 10 + i32.const 4 + i32.add + local.set 1 + i32.const 0 + local.get 6 + i32.sub + i32.const 24 + i32.and + local.set 4 + local.get 10 + i32.load + local.set 6 + loop ;; label = @4 + local.get 5 + local.get 6 + local.get 2 + i32.shr_u + local.get 1 + i32.load + local.tee 6 + local.get 4 + i32.shl + i32.or + i32.store + local.get 1 + i32.const 4 + i32.add + local.set 1 + local.get 5 + i32.const 4 + i32.add + local.tee 5 + local.get 3 + i32.lt_u + br_if 0 (;@4;) + br 2 (;@2;) + end + end + local.get 8 + i32.const 1 + i32.lt_s + br_if 0 (;@2;) + local.get 9 + local.set 1 + loop ;; label = @3 + local.get 5 + local.get 1 + i32.load + i32.store + local.get 1 + i32.const 4 + i32.add + local.set 1 + local.get 5 + i32.const 4 + i32.add + local.tee 5 + local.get 3 + i32.lt_u + br_if 0 (;@3;) + end + end + local.get 7 + i32.const 3 + i32.and + local.set 2 + local.get 9 + local.get 8 + i32.add + local.set 1 + end + block ;; label = @1 + local.get 2 + i32.eqz + br_if 0 (;@1;) + local.get 3 + local.get 2 + i32.add + local.set 5 + loop ;; label = @2 + local.get 3 + local.get 1 + i32.load8_u + i32.store8 + local.get 1 + i32.const 1 + i32.add + local.set 1 + local.get 3 + i32.const 1 + i32.add + local.tee 3 + local.get 5 + i32.lt_u + br_if 0 (;@2;) + end + end + local.get 0 + ) + (func (;9;) (type 6) (param i32 i32 i32) (result i32) + local.get 0 + local.get 1 + local.get 2 + call 8 + ) + (func (;10;) (type 5) (param i32 i32 i32 i32) (result i32) + local.get 0 + local.get 1 + local.get 2 + local.get 3 + call 7 + ) + (table (;0;) 2 2 funcref) + (memory (;0;) 17) + (global (;0;) (mut i32) i32.const 1048576) + (global (;1;) i32 i32.const 1049033) + (global (;2;) i32 i32.const 1049040) + (export "memory" (memory 0)) + (export "subtract" (func 0)) + (export "cabi_realloc_wit_bindgen_0_20_0" (func 7)) + (export "cabi_realloc" (func 10)) + (export "__data_end" (global 1)) + (export "__heap_base" (global 2)) + (elem (;0;) (i32.const 1) func 10) + (data (;0;) (i32.const 1048576) "\01\00\00\00") + (@producers + (processed-by "wit-component" "0.201.0") + (processed-by "wit-bindgen-rust" "0.20.0") + ) + ) + (core instance (;0;) (instantiate 0)) + (alias core export 0 "memory" (core memory (;0;))) + (alias core export 0 "cabi_realloc" (core func (;0;))) + (type (;0;) (func (param "a" float64) (param "b" float64) (result float64))) + (alias core export 0 "subtract" (core func (;1;))) + (func (;0;) (type 0) (canon lift (core func 1))) + (export (;1;) "subtract" (func 0)) + (@producers + (processed-by "wit-component" "0.201.0") + ) +) diff --git a/homestar-wasm/src/wasmtime/ipld.rs b/homestar-wasm/src/wasmtime/ipld.rs index 7d5e636e..d2659dc5 100644 --- a/homestar-wasm/src/wasmtime/ipld.rs +++ b/homestar-wasm/src/wasmtime/ipld.rs @@ -181,7 +181,8 @@ impl RuntimeVal { stacker::maybe_grow(DEFAULT_RED_ZONE, DEFAULT_EXTRA_STACK, || { let dyn_type = match ipld { Ipld::Null => match interface_ty { - InterfaceType::Type(Type::Option(opt_inst)) => { + InterfaceType::Type(Type::Option(opt_inst)) + | InterfaceType::TypeRef(Type::Option(opt_inst)) => { RuntimeVal::new(opt_inst.new_val(None)?) } InterfaceType::Type(Type::String) @@ -291,8 +292,12 @@ impl RuntimeVal { RuntimeVal::new(Val::S32(v.try_into()?)) } // We need to handle cases where clients, notably JavaScript, represent 5.0 as 5. - InterfaceType::Type(Type::Float32) => RuntimeVal::new(Val::Float32(v as f32)), - InterfaceType::Type(Type::Float64) => RuntimeVal::new(Val::Float64(v as f64)), + InterfaceType::Type(Type::Float32) | InterfaceType::TypeRef(Type::Float32) => { + RuntimeVal::new(Val::Float32(v as f32)) + } + InterfaceType::Type(Type::Float64) | InterfaceType::TypeRef(Type::Float64) => { + RuntimeVal::new(Val::Float64(v as f64)) + } InterfaceType::Any | InterfaceType::Type(Type::S64) | InterfaceType::TypeRef(Type::S64) => RuntimeVal::new(Val::S64(v.try_into()?)), @@ -903,7 +908,7 @@ mod test { } #[test] - fn try_integer_to_float() { + fn try_integer_to_float32() { let ipld_in = Ipld::Integer(5); let ipld_out = Ipld::Float(5.0); let runtime_float = RuntimeVal::new(Val::Float32(5.0)); @@ -924,6 +929,28 @@ mod test { assert_eq!(Ipld::try_from(runtime_float).unwrap(), ipld_out); } + #[test] + fn try_integer_to_float64() { + let ipld_in = Ipld::Integer(5); + let ipld_out = Ipld::Float(5.0); + let runtime_float = RuntimeVal::new(Val::Float64(5.0)); + + let ty = test_utils::component::setup_component_with_param( + "float64".to_string(), + &[test_utils::component::Param( + test_utils::component::Type::F64, + None, + )], + ); + + assert_eq!( + RuntimeVal::try_from(ipld_in.clone(), &InterfaceType::Type(ty)).unwrap(), + runtime_float + ); + + assert_eq!(Ipld::try_from(runtime_float).unwrap(), ipld_out); + } + #[test] fn try_string_roundtrip() { let ipld1 = Ipld::String("Hello!".into()); diff --git a/homestar-wasm/tests/execute_wasm.rs b/homestar-wasm/tests/execute_wasm.rs index 7323748e..90870a3c 100644 --- a/homestar-wasm/tests/execute_wasm.rs +++ b/homestar-wasm/tests/execute_wasm.rs @@ -606,3 +606,21 @@ async fn test_execute_wasms_with_multiple_inits() { Output::Value(wasmtime::component::Val::String("RoundRoundabout".into())) ); } + +#[tokio::test] +async fn test_subtract() { + let ipld = Input::Ipld(Ipld::Map(BTreeMap::from([ + ("func".into(), Ipld::String("subtract".to_string())), + ( + "args".into(), + Ipld::List(vec![Ipld::Integer(1), Ipld::Integer(1)]), + ), + ]))); + + let wasm = fs::read(fixtures("example_subtract.wasm")).unwrap(); + let mut env = World::instantiate(wasm, "subtract", State::default()) + .await + .unwrap(); + let res = env.execute(ipld.parse().unwrap().into()).await.unwrap(); + assert_eq!(res, Output::Value(wasmtime::component::Val::Float64(0.0))); +}