diff --git a/README.md b/README.md index 68b681d9..1c9e22cd 100644 --- a/README.md +++ b/README.md @@ -70,6 +70,11 @@ Examples * **[WASM parser](./lib/parse)**
A WebAssembly binary parser in WebAssembly. +Benchmarks +--------- +* **[n-body](./examples/n-body)**
+ Compare performance and produced binary size with n-body example from Computer Language Benchmarks Game. + Building -------- diff --git a/examples/n-body/README.md b/examples/n-body/README.md index 26110320..7bf3a18c 100644 --- a/examples/n-body/README.md +++ b/examples/n-body/README.md @@ -25,3 +25,23 @@ To run the benchmark: ``` $> npm run test [steps=1000000] ``` + +Benchmark +========= + +***Environment:*** +- MacBook Pro (Retina, 15-inch, Late 2013) +- macOS 10.13.5 +- node.js v10.6.0 +- rustc 1.29.0-nightly (254f8796b 2018-07-13) + +***Results:*** + +| Target | Time, ***ms*** | Size, ***KB*** | +|-------------------------|-----------------|----------------| +| **AssemblyScript WASM** | **3167** | **2** | +| AssemblyScript ASMJS | 3633 | 21* | +| JavaScript | 2628 | 5* | +| Rust WASM | 3876 | 15 | + +___* unminified___ diff --git a/examples/n-body/assembly/index.js b/examples/n-body/assembly/index.js index b25d0e4a..11c076b2 100644 --- a/examples/n-body/assembly/index.js +++ b/examples/n-body/assembly/index.js @@ -7,6 +7,7 @@ const compiled = new WebAssembly.Module( const imports = { env: { + memory: new WebAssembly.Memory({ initial: 10 }), abort: (filename, line, column) => { throw Error("abort called at " + line + ":" + colum); } diff --git a/examples/n-body/assembly/index.ts b/examples/n-body/assembly/index.ts index e3d5a7a3..8a10f304 100644 --- a/examples/n-body/assembly/index.ts +++ b/examples/n-body/assembly/index.ts @@ -36,62 +36,60 @@ function Sun(): Body { function Jupiter(): Body { return new Body( - 4.84143144246472090e+00, + 4.84143144246472090e+00, -1.16032004402742839e+00, -1.03622044471123109e-01, - 1.66007664274403694e-03 * DAYS_PER_YEAR, - 7.69901118419740425e-03 * DAYS_PER_YEAR, + 1.66007664274403694e-03 * DAYS_PER_YEAR, + 7.69901118419740425e-03 * DAYS_PER_YEAR, -6.90460016972063023e-05 * DAYS_PER_YEAR, - 9.54791938424326609e-04 * SOLAR_MASS + 9.54791938424326609e-04 * SOLAR_MASS ); } function Saturn(): Body { return new Body( - 8.34336671824457987e+00, - 4.12479856412430479e+00, + 8.34336671824457987e+00, + 4.12479856412430479e+00, -4.03523417114321381e-01, -2.76742510726862411e-03 * DAYS_PER_YEAR, - 4.99852801234917238e-03 * DAYS_PER_YEAR, - 2.30417297573763929e-05 * DAYS_PER_YEAR, - 2.85885980666130812e-04 * SOLAR_MASS + 4.99852801234917238e-03 * DAYS_PER_YEAR, + 2.30417297573763929e-05 * DAYS_PER_YEAR, + 2.85885980666130812e-04 * SOLAR_MASS ); } function Uranus(): Body { return new Body( - 1.28943695621391310e+01, + 1.28943695621391310e+01, -1.51111514016986312e+01, -2.23307578892655734e-01, - 2.96460137564761618e-03 * DAYS_PER_YEAR, - 2.37847173959480950e-03 * DAYS_PER_YEAR, + 2.96460137564761618e-03 * DAYS_PER_YEAR, + 2.37847173959480950e-03 * DAYS_PER_YEAR, -2.96589568540237556e-05 * DAYS_PER_YEAR, - 4.36624404335156298e-05 * SOLAR_MASS + 4.36624404335156298e-05 * SOLAR_MASS ); } function Neptune(): Body { return new Body( - 1.53796971148509165e+01, + 1.53796971148509165e+01, -2.59193146099879641e+01, - 1.79258772950371181e-01, - 2.68067772490389322e-03 * DAYS_PER_YEAR, - 1.62824170038242295e-03 * DAYS_PER_YEAR, + 1.79258772950371181e-01, + 2.68067772490389322e-03 * DAYS_PER_YEAR, + 1.62824170038242295e-03 * DAYS_PER_YEAR, -9.51592254519715870e-05 * DAYS_PER_YEAR, - 5.15138902046611451e-05 * SOLAR_MASS + 5.15138902046611451e-05 * SOLAR_MASS ); } class NBodySystem { - constructor( - public bodies: Body[] - ) { + constructor(public bodies: Body[]) { var px: float = 0.0; var py: float = 0.0; var pz: float = 0.0; var size = bodies.length; - for (let i = 0; i < size; i++) { + for (let i = 0; i < size; ++i) { let b = unchecked(bodies[i]); let m = b.mass; px += b.vx * m; @@ -197,16 +195,11 @@ export function init(): void { ]); } -export function getBody(index: i32): Body | null { - var bodies = system.bodies; - return index < bodies.length ? bodies[index] : null; -} - export function step(): float { system.advance(0.01); return system.energy(); } export function bench(steps: u32): void { - for (let i: u32 = 0; i < steps; i++) system.advance(0.01); + for (let i: u32 = 0; i < steps; ++i) system.advance(0.01); } diff --git a/examples/n-body/build/index.asm.js b/examples/n-body/build/index.asm.js index 3797ab4d..1b93834c 100644 --- a/examples/n-body/build/index.asm.js +++ b/examples/n-body/build/index.asm.js @@ -341,19 +341,6 @@ function asmFunc(global, env, buffer) { assembly_index_system = assembly_index_NBodySystem_constructor(0 | 0, $1 | 0) | 0; } - function assembly_index_getBody($0) { - $0 = $0 | 0; - var $1 = 0, $22 = 0, $20 = 0; - $1 = HEAPU32[assembly_index_system >> 2] | 0; - if ($0 >>> 0 < (HEAP32[($1 + 4 | 0) >> 2] | 0) >>> 0) { - $1 = HEAPU32[$1 >> 2] | 0; - if ($0 >>> 0 < ((HEAP32[$1 >> 2] | 0) >>> 2 | 0) >>> 0) $20 = HEAPU32[(($1 + ($0 << 2 | 0) | 0) + 8 | 0) >> 2] | 0; else abort(); - $22 = $20; - } else $22 = 0; - $0 = $22; - return $0 | 0; - } - function assembly_index_NBodySystem_advance($0, $1) { $0 = $0 | 0; $1 = +$1; @@ -533,7 +520,6 @@ function asmFunc(global, env, buffer) { } }), init: assembly_index_init, - getBody: assembly_index_getBody, step: assembly_index_step, bench: assembly_index_bench }; diff --git a/examples/n-body/build/index.js b/examples/n-body/build/index.js index dbf083c7..bd91ac1f 100644 --- a/examples/n-body/build/index.js +++ b/examples/n-body/build/index.js @@ -1,9 +1,7 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); require("allocator/arena"); -// From The Computer Language Benchmarks Game -// http://benchmarksgame.alioth.debian.org -const SOLAR_MASS = 4.0 * Math.PI * Math.PI; +const SOLAR_MASS = (4.0 * Math.PI * Math.PI); const DAYS_PER_YEAR = 365.24; class Body { constructor(x, y, z, vx, vy, vz, mass) { @@ -44,7 +42,7 @@ class NBodySystem { var py = 0.0; var pz = 0.0; var size = bodies.length; - for (let i = 0; i < size; i++) { + for (let i = 0; i < size; ++i) { let b = unchecked(bodies[i]); let m = b.mass; px += b.vx * m; @@ -107,7 +105,7 @@ class NBodySystem { let bim = bodyi.mass; e += 0.5 * bim * (vx * vx + vy * vy + vz * vz); for (let j = i + 1; j < size; ++j) { - let bodyj = bodies[j]; + let bodyj = unchecked(bodies[j]); let dx = ix - bodyj.x; let dy = iy - bodyj.y; let dz = iz - bodyj.z; @@ -129,18 +127,13 @@ function init() { ]); } exports.init = init; -function getBody(index) { - var bodies = system.bodies; - return index < bodies.length ? bodies[index] : null; -} -exports.getBody = getBody; function step() { system.advance(0.01); return system.energy(); } exports.step = step; function bench(steps) { - for (let i = 0; i < steps; i++) + for (let i = 0; i < steps; ++i) system.advance(0.01); } exports.bench = bench; diff --git a/examples/n-body/build/optimized.wasm b/examples/n-body/build/optimized.wasm index f7104678..ac96f82a 100644 Binary files a/examples/n-body/build/optimized.wasm and b/examples/n-body/build/optimized.wasm differ diff --git a/examples/n-body/build/optimized.wat b/examples/n-body/build/optimized.wat index 40bcbe76..48dcdcc9 100644 --- a/examples/n-body/build/optimized.wat +++ b/examples/n-body/build/optimized.wat @@ -10,14 +10,13 @@ (type $iF (func (param i32) (result f64))) (type $iv (func (param i32))) (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) + (import "env" "memory" (memory $0 1)) (global $~lib/allocator/arena/startOffset (mut i32) (i32.const 0)) (global $~lib/allocator/arena/offset (mut i32) (i32.const 0)) (global $assembly/index/system (mut i32) (i32.const 0)) - (memory $0 1) (data (i32.const 8) "\0d\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") (export "memory" (memory $0)) (export "init" (func $assembly/index/init)) - (export "getBody" (func $assembly/index/getBody)) (export "step" (func $assembly/index/step)) (export "bench" (func $assembly/index/bench)) (start $start) @@ -823,50 +822,7 @@ ) ) ) - (func $assembly/index/getBody (; 7 ;) (type $ii) (param $0 i32) (result i32) - (local $1 i32) - (tee_local $0 - (if (result i32) - (i32.lt_u - (get_local $0) - (i32.load offset=4 - (tee_local $1 - (i32.load - (get_global $assembly/index/system) - ) - ) - ) - ) - (if (result i32) - (i32.lt_u - (get_local $0) - (i32.shr_u - (i32.load - (tee_local $1 - (i32.load - (get_local $1) - ) - ) - ) - (i32.const 2) - ) - ) - (i32.load offset=8 - (i32.add - (get_local $1) - (i32.shl - (get_local $0) - (i32.const 2) - ) - ) - ) - (unreachable) - ) - (i32.const 0) - ) - ) - ) - (func $assembly/index/NBodySystem#advance (; 8 ;) (type $iFv) (param $0 i32) (param $1 f64) + (func $assembly/index/NBodySystem#advance (; 7 ;) (type $iFv) (param $0 i32) (param $1 f64) (local $2 i32) (local $3 f64) (local $4 i32) @@ -1170,7 +1126,7 @@ ) ) ) - (func $assembly/index/NBodySystem#energy (; 9 ;) (type $iF) (param $0 i32) (result f64) + (func $assembly/index/NBodySystem#energy (; 8 ;) (type $iF) (param $0 i32) (result f64) (local $1 f64) (local $2 i32) (local $3 i32) @@ -1367,7 +1323,7 @@ ) (get_local $1) ) - (func $assembly/index/step (; 10 ;) (type $F) (result f64) + (func $assembly/index/step (; 9 ;) (type $F) (result f64) (call $assembly/index/NBodySystem#advance (get_global $assembly/index/system) (f64.const 0.01) @@ -1376,7 +1332,7 @@ (get_global $assembly/index/system) ) ) - (func $assembly/index/bench (; 11 ;) (type $iv) (param $0 i32) + (func $assembly/index/bench (; 10 ;) (type $iv) (param $0 i32) (local $1 i32) (block $break|0 (loop $repeat|0 @@ -1400,7 +1356,7 @@ ) ) ) - (func $start (; 12 ;) (type $v) + (func $start (; 11 ;) (type $v) (set_global $~lib/allocator/arena/startOffset (i32.const 40) ) diff --git a/examples/n-body/build/rust.optimized.wasm b/examples/n-body/build/rust.optimized.wasm index 2e06fd9e..8e3fadee 100644 Binary files a/examples/n-body/build/rust.optimized.wasm and b/examples/n-body/build/rust.optimized.wasm differ diff --git a/examples/n-body/build/untouched.wat b/examples/n-body/build/untouched.wat index d5b7ee53..4fa687af 100644 --- a/examples/n-body/build/untouched.wat +++ b/examples/n-body/build/untouched.wat @@ -12,6 +12,7 @@ (type $iF (func (param i32) (result f64))) (type $iv (func (param i32))) (import "env" "abort" (func $~lib/env/abort (param i32 i32 i32 i32))) + (import "env" "memory" (memory $0 1)) (global $~lib/internal/allocator/AL_BITS i32 (i32.const 3)) (global $~lib/internal/allocator/AL_SIZE i32 (i32.const 8)) (global $~lib/internal/allocator/AL_MASK i32 (i32.const 7)) @@ -25,12 +26,10 @@ (global $~lib/internal/arraybuffer/HEADER_SIZE i32 (i32.const 8)) (global $~lib/internal/arraybuffer/MAX_BLENGTH i32 (i32.const 1073741816)) (global $HEAP_BASE i32 (i32.const 100)) - (memory $0 1) (data (i32.const 8) "\0d\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s\00") (data (i32.const 40) "\1c\00\00\00~\00l\00i\00b\00/\00i\00n\00t\00e\00r\00n\00a\00l\00/\00a\00r\00r\00a\00y\00b\00u\00f\00f\00e\00r\00.\00t\00s\00") (export "memory" (memory $0)) (export "init" (func $assembly/index/init)) - (export "getBody" (func $assembly/index/getBody)) (export "step" (func $assembly/index/step)) (export "bench" (func $assembly/index/bench)) (start $start) @@ -41,106 +40,106 @@ (local $4 i32) (local $5 i32) (local $6 i32) - ;;@ ~lib/allocator/arena.ts:17:2 + ;;@ ~lib/allocator/arena.ts:18:2 (if - ;;@ ~lib/allocator/arena.ts:17:6 + ;;@ ~lib/allocator/arena.ts:18:6 (get_local $0) - ;;@ ~lib/allocator/arena.ts:17:12 + ;;@ ~lib/allocator/arena.ts:18:12 (block - ;;@ ~lib/allocator/arena.ts:18:4 + ;;@ ~lib/allocator/arena.ts:19:4 (if - ;;@ ~lib/allocator/arena.ts:18:8 + ;;@ ~lib/allocator/arena.ts:19:8 (i32.gt_u (get_local $0) - ;;@ ~lib/allocator/arena.ts:18:15 + ;;@ ~lib/allocator/arena.ts:19:15 (get_global $~lib/internal/allocator/MAX_SIZE_32) ) - ;;@ ~lib/allocator/arena.ts:18:28 + ;;@ ~lib/allocator/arena.ts:19:28 (unreachable) ) - ;;@ ~lib/allocator/arena.ts:19:4 + ;;@ ~lib/allocator/arena.ts:20:4 (set_local $1 - ;;@ ~lib/allocator/arena.ts:19:14 + ;;@ ~lib/allocator/arena.ts:20:14 (get_global $~lib/allocator/arena/offset) ) - ;;@ ~lib/allocator/arena.ts:20:4 + ;;@ ~lib/allocator/arena.ts:21:4 (set_local $2 - ;;@ ~lib/allocator/arena.ts:20:17 + ;;@ ~lib/allocator/arena.ts:21:17 (i32.and (i32.add - ;;@ ~lib/allocator/arena.ts:20:18 + ;;@ ~lib/allocator/arena.ts:21:18 (i32.add (get_local $1) - ;;@ ~lib/allocator/arena.ts:20:24 + ;;@ ~lib/allocator/arena.ts:21:24 (get_local $0) ) - ;;@ ~lib/allocator/arena.ts:20:31 + ;;@ ~lib/allocator/arena.ts:21:31 (get_global $~lib/internal/allocator/AL_MASK) ) - ;;@ ~lib/allocator/arena.ts:20:42 + ;;@ ~lib/allocator/arena.ts:21:42 (i32.xor - ;;@ ~lib/allocator/arena.ts:20:43 + ;;@ ~lib/allocator/arena.ts:21:43 (get_global $~lib/internal/allocator/AL_MASK) (i32.const -1) ) ) ) - ;;@ ~lib/allocator/arena.ts:21:4 + ;;@ ~lib/allocator/arena.ts:22:4 (set_local $3 - ;;@ ~lib/allocator/arena.ts:21:29 + ;;@ ~lib/allocator/arena.ts:22:29 (current_memory) ) - ;;@ ~lib/allocator/arena.ts:22:4 + ;;@ ~lib/allocator/arena.ts:23:4 (if - ;;@ ~lib/allocator/arena.ts:22:8 + ;;@ ~lib/allocator/arena.ts:23:8 (i32.gt_u (get_local $2) - ;;@ ~lib/allocator/arena.ts:22:17 + ;;@ ~lib/allocator/arena.ts:23:17 (i32.shl (get_local $3) - ;;@ ~lib/allocator/arena.ts:22:39 + ;;@ ~lib/allocator/arena.ts:23:39 (i32.const 16) ) ) - ;;@ ~lib/allocator/arena.ts:22:43 + ;;@ ~lib/allocator/arena.ts:23:43 (block - ;;@ ~lib/allocator/arena.ts:23:6 + ;;@ ~lib/allocator/arena.ts:24:6 (set_local $4 - ;;@ ~lib/allocator/arena.ts:23:24 + ;;@ ~lib/allocator/arena.ts:24:24 (i32.shr_u (i32.and - ;;@ ~lib/allocator/arena.ts:23:25 + ;;@ ~lib/allocator/arena.ts:24:25 (i32.add - ;;@ ~lib/allocator/arena.ts:23:26 + ;;@ ~lib/allocator/arena.ts:24:26 (i32.sub (get_local $2) - ;;@ ~lib/allocator/arena.ts:23:35 + ;;@ ~lib/allocator/arena.ts:24:35 (get_local $1) ) - ;;@ ~lib/allocator/arena.ts:23:41 + ;;@ ~lib/allocator/arena.ts:24:41 (i32.const 65535) ) - ;;@ ~lib/allocator/arena.ts:23:51 + ;;@ ~lib/allocator/arena.ts:24:51 (i32.xor - ;;@ ~lib/allocator/arena.ts:23:52 + ;;@ ~lib/allocator/arena.ts:24:52 (i32.const 65535) (i32.const -1) ) ) - ;;@ ~lib/allocator/arena.ts:23:64 + ;;@ ~lib/allocator/arena.ts:24:64 (i32.const 16) ) ) - ;;@ ~lib/allocator/arena.ts:24:6 + ;;@ ~lib/allocator/arena.ts:25:6 (set_local $5 - ;;@ ~lib/allocator/arena.ts:24:24 + ;;@ ~lib/allocator/arena.ts:25:24 (select (tee_local $5 - ;;@ ~lib/allocator/arena.ts:24:28 + ;;@ ~lib/allocator/arena.ts:25:28 (get_local $3) ) (tee_local $6 - ;;@ ~lib/allocator/arena.ts:24:41 + ;;@ ~lib/allocator/arena.ts:25:41 (get_local $4) ) (i32.gt_s @@ -149,56 +148,56 @@ ) ) ) - ;;@ ~lib/allocator/arena.ts:25:6 + ;;@ ~lib/allocator/arena.ts:26:6 (if - ;;@ ~lib/allocator/arena.ts:25:10 + ;;@ ~lib/allocator/arena.ts:26:10 (i32.lt_s - ;;@ ~lib/allocator/arena.ts:25:17 + ;;@ ~lib/allocator/arena.ts:26:17 (grow_memory - ;;@ ~lib/allocator/arena.ts:25:22 + ;;@ ~lib/allocator/arena.ts:26:22 (get_local $5) ) - ;;@ ~lib/allocator/arena.ts:25:37 + ;;@ ~lib/allocator/arena.ts:26:37 (i32.const 0) ) - ;;@ ~lib/allocator/arena.ts:25:40 + ;;@ ~lib/allocator/arena.ts:26:40 (if - ;;@ ~lib/allocator/arena.ts:26:12 + ;;@ ~lib/allocator/arena.ts:27:12 (i32.lt_s - ;;@ ~lib/allocator/arena.ts:26:19 + ;;@ ~lib/allocator/arena.ts:27:19 (grow_memory - ;;@ ~lib/allocator/arena.ts:26:24 + ;;@ ~lib/allocator/arena.ts:27:24 (get_local $4) ) - ;;@ ~lib/allocator/arena.ts:26:39 + ;;@ ~lib/allocator/arena.ts:27:39 (i32.const 0) ) - ;;@ ~lib/allocator/arena.ts:26:42 + ;;@ ~lib/allocator/arena.ts:27:42 (unreachable) ) ) ) ) - ;;@ ~lib/allocator/arena.ts:31:4 + ;;@ ~lib/allocator/arena.ts:32:4 (set_global $~lib/allocator/arena/offset - ;;@ ~lib/allocator/arena.ts:31:13 + ;;@ ~lib/allocator/arena.ts:32:13 (get_local $2) ) - ;;@ ~lib/allocator/arena.ts:32:11 + ;;@ ~lib/allocator/arena.ts:33:11 (return (get_local $1) ) ) ) - ;;@ ~lib/allocator/arena.ts:34:9 + ;;@ ~lib/allocator/arena.ts:35:9 (i32.const 0) ) (func $~lib/memory/memory.allocate (; 2 ;) (type $ii) (param $0 i32) (result i32) - ;;@ ~lib/memory.ts:37:4 + ;;@ ~lib/memory.ts:35:4 (return - ;;@ ~lib/memory.ts:37:45 + ;;@ ~lib/memory.ts:35:45 (call $~lib/allocator/arena/__memory_allocate - ;;@ ~lib/memory.ts:37:63 + ;;@ ~lib/memory.ts:35:63 (get_local $0) ) ) @@ -274,22 +273,22 @@ ;;@ assembly/index.ts:46:2 (call $assembly/index/Body#constructor (i32.const 0) - ;;@ assembly/index.ts:39:4 + ;;@ assembly/index.ts:39:5 (f64.const 4.841431442464721) ;;@ assembly/index.ts:40:4 (f64.const -1.1603200440274284) ;;@ assembly/index.ts:41:4 (f64.const -0.10362204447112311) - ;;@ assembly/index.ts:42:4 + ;;@ assembly/index.ts:42:5 (f64.mul (f64.const 0.001660076642744037) - ;;@ assembly/index.ts:42:30 + ;;@ assembly/index.ts:42:31 (get_global $assembly/index/DAYS_PER_YEAR) ) - ;;@ assembly/index.ts:43:4 + ;;@ assembly/index.ts:43:5 (f64.mul (f64.const 0.007699011184197404) - ;;@ assembly/index.ts:43:30 + ;;@ assembly/index.ts:43:31 (get_global $assembly/index/DAYS_PER_YEAR) ) ;;@ assembly/index.ts:44:4 @@ -298,10 +297,10 @@ ;;@ assembly/index.ts:44:31 (get_global $assembly/index/DAYS_PER_YEAR) ) - ;;@ assembly/index.ts:45:4 + ;;@ assembly/index.ts:45:5 (f64.mul (f64.const 9.547919384243266e-04) - ;;@ assembly/index.ts:45:30 + ;;@ assembly/index.ts:45:31 (get_global $assembly/index/SOLAR_MASS) ) ) @@ -310,9 +309,9 @@ ;;@ assembly/index.ts:58:2 (call $assembly/index/Body#constructor (i32.const 0) - ;;@ assembly/index.ts:51:4 + ;;@ assembly/index.ts:51:5 (f64.const 8.34336671824458) - ;;@ assembly/index.ts:52:4 + ;;@ assembly/index.ts:52:5 (f64.const 4.124798564124305) ;;@ assembly/index.ts:53:4 (f64.const -0.4035234171143214) @@ -322,22 +321,22 @@ ;;@ assembly/index.ts:54:31 (get_global $assembly/index/DAYS_PER_YEAR) ) - ;;@ assembly/index.ts:55:4 + ;;@ assembly/index.ts:55:5 (f64.mul (f64.const 0.004998528012349172) - ;;@ assembly/index.ts:55:30 + ;;@ assembly/index.ts:55:31 (get_global $assembly/index/DAYS_PER_YEAR) ) - ;;@ assembly/index.ts:56:4 + ;;@ assembly/index.ts:56:5 (f64.mul (f64.const 2.3041729757376393e-05) - ;;@ assembly/index.ts:56:30 + ;;@ assembly/index.ts:56:31 (get_global $assembly/index/DAYS_PER_YEAR) ) - ;;@ assembly/index.ts:57:4 + ;;@ assembly/index.ts:57:5 (f64.mul (f64.const 2.858859806661308e-04) - ;;@ assembly/index.ts:57:30 + ;;@ assembly/index.ts:57:31 (get_global $assembly/index/SOLAR_MASS) ) ) @@ -346,22 +345,22 @@ ;;@ assembly/index.ts:70:2 (call $assembly/index/Body#constructor (i32.const 0) - ;;@ assembly/index.ts:63:4 + ;;@ assembly/index.ts:63:5 (f64.const 12.894369562139131) ;;@ assembly/index.ts:64:4 (f64.const -15.111151401698631) ;;@ assembly/index.ts:65:4 (f64.const -0.22330757889265573) - ;;@ assembly/index.ts:66:4 + ;;@ assembly/index.ts:66:5 (f64.mul (f64.const 0.002964601375647616) - ;;@ assembly/index.ts:66:30 + ;;@ assembly/index.ts:66:31 (get_global $assembly/index/DAYS_PER_YEAR) ) - ;;@ assembly/index.ts:67:4 + ;;@ assembly/index.ts:67:5 (f64.mul (f64.const 2.3784717395948095e-03) - ;;@ assembly/index.ts:67:30 + ;;@ assembly/index.ts:67:31 (get_global $assembly/index/DAYS_PER_YEAR) ) ;;@ assembly/index.ts:68:4 @@ -370,10 +369,10 @@ ;;@ assembly/index.ts:68:31 (get_global $assembly/index/DAYS_PER_YEAR) ) - ;;@ assembly/index.ts:69:4 + ;;@ assembly/index.ts:69:5 (f64.mul (f64.const 4.366244043351563e-05) - ;;@ assembly/index.ts:69:30 + ;;@ assembly/index.ts:69:31 (get_global $assembly/index/SOLAR_MASS) ) ) @@ -382,22 +381,22 @@ ;;@ assembly/index.ts:82:2 (call $assembly/index/Body#constructor (i32.const 0) - ;;@ assembly/index.ts:75:4 + ;;@ assembly/index.ts:75:5 (f64.const 15.379697114850917) ;;@ assembly/index.ts:76:4 (f64.const -25.919314609987964) - ;;@ assembly/index.ts:77:4 + ;;@ assembly/index.ts:77:5 (f64.const 0.17925877295037118) - ;;@ assembly/index.ts:78:4 + ;;@ assembly/index.ts:78:5 (f64.mul (f64.const 2.6806777249038932e-03) - ;;@ assembly/index.ts:78:30 + ;;@ assembly/index.ts:78:31 (get_global $assembly/index/DAYS_PER_YEAR) ) - ;;@ assembly/index.ts:79:4 + ;;@ assembly/index.ts:79:5 (f64.mul (f64.const 0.001628241700382423) - ;;@ assembly/index.ts:79:30 + ;;@ assembly/index.ts:79:31 (get_global $assembly/index/DAYS_PER_YEAR) ) ;;@ assembly/index.ts:80:4 @@ -406,10 +405,10 @@ ;;@ assembly/index.ts:80:31 (get_global $assembly/index/DAYS_PER_YEAR) ) - ;;@ assembly/index.ts:81:4 + ;;@ assembly/index.ts:81:5 (f64.mul (f64.const 5.1513890204661145e-05) - ;;@ assembly/index.ts:81:30 + ;;@ assembly/index.ts:81:31 (get_global $assembly/index/SOLAR_MASS) ) ) @@ -486,297 +485,319 @@ (local $3 i32) (local $4 i32) (local $5 i64) - ;;@ ~lib/memory.ts:244:2 + ;;@ ~lib/memory.ts:242:2 (if - ;;@ ~lib/memory.ts:244:6 + ;;@ ~lib/memory.ts:242:6 (i32.eqz - ;;@ ~lib/memory.ts:244:7 + ;;@ ~lib/memory.ts:242:7 (get_local $2) ) - ;;@ ~lib/memory.ts:244:10 + ;;@ ~lib/memory.ts:242:10 (return) ) - ;;@ ~lib/memory.ts:245:2 + ;;@ ~lib/memory.ts:243:2 (i32.store8 - ;;@ ~lib/memory.ts:245:12 + ;;@ ~lib/memory.ts:243:12 (get_local $0) - ;;@ ~lib/memory.ts:245:18 + ;;@ ~lib/memory.ts:243:18 (get_local $1) ) - ;;@ ~lib/memory.ts:246:2 + ;;@ ~lib/memory.ts:244:2 (i32.store8 - ;;@ ~lib/memory.ts:246:12 + ;;@ ~lib/memory.ts:244:12 (i32.sub (i32.add (get_local $0) - ;;@ ~lib/memory.ts:246:19 + ;;@ ~lib/memory.ts:244:19 (get_local $2) ) - ;;@ ~lib/memory.ts:246:23 + ;;@ ~lib/memory.ts:244:23 (i32.const 1) ) - ;;@ ~lib/memory.ts:246:26 + ;;@ ~lib/memory.ts:244:26 (get_local $1) ) - ;;@ ~lib/memory.ts:247:2 + ;;@ ~lib/memory.ts:245:2 (if - ;;@ ~lib/memory.ts:247:6 + ;;@ ~lib/memory.ts:245:6 (i32.le_u (get_local $2) - ;;@ ~lib/memory.ts:247:11 + ;;@ ~lib/memory.ts:245:11 (i32.const 2) ) - ;;@ ~lib/memory.ts:247:14 + ;;@ ~lib/memory.ts:245:14 (return) ) + ;;@ ~lib/memory.ts:247:2 + (i32.store8 + ;;@ ~lib/memory.ts:247:12 + (i32.add + (get_local $0) + ;;@ ~lib/memory.ts:247:19 + (i32.const 1) + ) + ;;@ ~lib/memory.ts:247:22 + (get_local $1) + ) + ;;@ ~lib/memory.ts:248:2 + (i32.store8 + ;;@ ~lib/memory.ts:248:12 + (i32.add + (get_local $0) + ;;@ ~lib/memory.ts:248:19 + (i32.const 2) + ) + ;;@ ~lib/memory.ts:248:22 + (get_local $1) + ) ;;@ ~lib/memory.ts:249:2 (i32.store8 ;;@ ~lib/memory.ts:249:12 - (i32.add - (get_local $0) - ;;@ ~lib/memory.ts:249:19 - (i32.const 1) + (i32.sub + (i32.add + (get_local $0) + ;;@ ~lib/memory.ts:249:19 + (get_local $2) + ) + ;;@ ~lib/memory.ts:249:23 + (i32.const 2) ) - ;;@ ~lib/memory.ts:249:22 + ;;@ ~lib/memory.ts:249:26 (get_local $1) ) ;;@ ~lib/memory.ts:250:2 (i32.store8 ;;@ ~lib/memory.ts:250:12 - (i32.add - (get_local $0) - ;;@ ~lib/memory.ts:250:19 - (i32.const 2) - ) - ;;@ ~lib/memory.ts:250:22 - (get_local $1) - ) - ;;@ ~lib/memory.ts:251:2 - (i32.store8 - ;;@ ~lib/memory.ts:251:12 (i32.sub (i32.add (get_local $0) - ;;@ ~lib/memory.ts:251:19 + ;;@ ~lib/memory.ts:250:19 (get_local $2) ) - ;;@ ~lib/memory.ts:251:23 - (i32.const 2) + ;;@ ~lib/memory.ts:250:23 + (i32.const 3) ) - ;;@ ~lib/memory.ts:251:26 + ;;@ ~lib/memory.ts:250:26 (get_local $1) ) + ;;@ ~lib/memory.ts:251:2 + (if + ;;@ ~lib/memory.ts:251:6 + (i32.le_u + (get_local $2) + ;;@ ~lib/memory.ts:251:11 + (i32.const 6) + ) + ;;@ ~lib/memory.ts:251:14 + (return) + ) ;;@ ~lib/memory.ts:252:2 (i32.store8 ;;@ ~lib/memory.ts:252:12 - (i32.sub - (i32.add - (get_local $0) - ;;@ ~lib/memory.ts:252:19 - (get_local $2) - ) - ;;@ ~lib/memory.ts:252:23 + (i32.add + (get_local $0) + ;;@ ~lib/memory.ts:252:19 (i32.const 3) ) - ;;@ ~lib/memory.ts:252:26 + ;;@ ~lib/memory.ts:252:22 (get_local $1) ) ;;@ ~lib/memory.ts:253:2 - (if - ;;@ ~lib/memory.ts:253:6 - (i32.le_u - (get_local $2) - ;;@ ~lib/memory.ts:253:11 - (i32.const 6) - ) - ;;@ ~lib/memory.ts:253:14 - (return) - ) - ;;@ ~lib/memory.ts:254:2 (i32.store8 - ;;@ ~lib/memory.ts:254:12 - (i32.add - (get_local $0) - ;;@ ~lib/memory.ts:254:19 - (i32.const 3) - ) - ;;@ ~lib/memory.ts:254:22 - (get_local $1) - ) - ;;@ ~lib/memory.ts:255:2 - (i32.store8 - ;;@ ~lib/memory.ts:255:12 + ;;@ ~lib/memory.ts:253:12 (i32.sub (i32.add (get_local $0) - ;;@ ~lib/memory.ts:255:19 + ;;@ ~lib/memory.ts:253:19 (get_local $2) ) - ;;@ ~lib/memory.ts:255:23 + ;;@ ~lib/memory.ts:253:23 (i32.const 4) ) - ;;@ ~lib/memory.ts:255:26 + ;;@ ~lib/memory.ts:253:26 (get_local $1) ) - ;;@ ~lib/memory.ts:256:2 + ;;@ ~lib/memory.ts:254:2 (if - ;;@ ~lib/memory.ts:256:6 + ;;@ ~lib/memory.ts:254:6 (i32.le_u (get_local $2) - ;;@ ~lib/memory.ts:256:11 + ;;@ ~lib/memory.ts:254:11 (i32.const 8) ) - ;;@ ~lib/memory.ts:256:14 + ;;@ ~lib/memory.ts:254:14 (return) ) - ;;@ ~lib/memory.ts:259:2 + ;;@ ~lib/memory.ts:257:2 (set_local $3 - ;;@ ~lib/memory.ts:259:17 + ;;@ ~lib/memory.ts:257:17 (i32.and (i32.sub (i32.const 0) - ;;@ ~lib/memory.ts:259:18 + ;;@ ~lib/memory.ts:257:18 (get_local $0) ) - ;;@ ~lib/memory.ts:259:25 + ;;@ ~lib/memory.ts:257:25 (i32.const 3) ) ) - ;;@ ~lib/memory.ts:260:2 + ;;@ ~lib/memory.ts:258:2 (set_local $0 (i32.add (get_local $0) - ;;@ ~lib/memory.ts:260:10 + ;;@ ~lib/memory.ts:258:10 (get_local $3) ) ) - ;;@ ~lib/memory.ts:261:2 + ;;@ ~lib/memory.ts:259:2 (set_local $2 (i32.sub (get_local $2) - ;;@ ~lib/memory.ts:261:7 + ;;@ ~lib/memory.ts:259:7 (get_local $3) ) ) - ;;@ ~lib/memory.ts:262:2 + ;;@ ~lib/memory.ts:260:2 (set_local $2 (i32.and (get_local $2) - ;;@ ~lib/memory.ts:262:7 + ;;@ ~lib/memory.ts:260:7 (i32.const -4) ) ) - ;;@ ~lib/memory.ts:264:2 + ;;@ ~lib/memory.ts:262:2 (set_local $4 - ;;@ ~lib/memory.ts:264:17 + ;;@ ~lib/memory.ts:262:17 (i32.mul (i32.div_u (i32.const -1) - ;;@ ~lib/memory.ts:264:27 + ;;@ ~lib/memory.ts:262:27 (i32.const 255) ) (i32.and - ;;@ ~lib/memory.ts:264:33 + ;;@ ~lib/memory.ts:262:33 (get_local $1) (i32.const 255) ) ) ) - ;;@ ~lib/memory.ts:267:2 + ;;@ ~lib/memory.ts:265:2 (i32.store - ;;@ ~lib/memory.ts:267:13 + ;;@ ~lib/memory.ts:265:13 (get_local $0) - ;;@ ~lib/memory.ts:267:19 + ;;@ ~lib/memory.ts:265:19 (get_local $4) ) + ;;@ ~lib/memory.ts:266:2 + (i32.store + ;;@ ~lib/memory.ts:266:13 + (i32.sub + (i32.add + (get_local $0) + ;;@ ~lib/memory.ts:266:20 + (get_local $2) + ) + ;;@ ~lib/memory.ts:266:24 + (i32.const 4) + ) + ;;@ ~lib/memory.ts:266:27 + (get_local $4) + ) + ;;@ ~lib/memory.ts:267:2 + (if + ;;@ ~lib/memory.ts:267:6 + (i32.le_u + (get_local $2) + ;;@ ~lib/memory.ts:267:11 + (i32.const 8) + ) + ;;@ ~lib/memory.ts:267:14 + (return) + ) ;;@ ~lib/memory.ts:268:2 (i32.store ;;@ ~lib/memory.ts:268:13 - (i32.sub - (i32.add - (get_local $0) - ;;@ ~lib/memory.ts:268:20 - (get_local $2) - ) - ;;@ ~lib/memory.ts:268:24 + (i32.add + (get_local $0) + ;;@ ~lib/memory.ts:268:20 (i32.const 4) ) - ;;@ ~lib/memory.ts:268:27 + ;;@ ~lib/memory.ts:268:23 (get_local $4) ) ;;@ ~lib/memory.ts:269:2 - (if - ;;@ ~lib/memory.ts:269:6 - (i32.le_u - (get_local $2) - ;;@ ~lib/memory.ts:269:11 + (i32.store + ;;@ ~lib/memory.ts:269:13 + (i32.add + (get_local $0) + ;;@ ~lib/memory.ts:269:20 (i32.const 8) ) - ;;@ ~lib/memory.ts:269:14 - (return) + ;;@ ~lib/memory.ts:269:23 + (get_local $4) ) ;;@ ~lib/memory.ts:270:2 (i32.store ;;@ ~lib/memory.ts:270:13 - (i32.add - (get_local $0) - ;;@ ~lib/memory.ts:270:20 - (i32.const 4) + (i32.sub + (i32.add + (get_local $0) + ;;@ ~lib/memory.ts:270:20 + (get_local $2) + ) + ;;@ ~lib/memory.ts:270:24 + (i32.const 12) ) - ;;@ ~lib/memory.ts:270:23 + ;;@ ~lib/memory.ts:270:28 (get_local $4) ) ;;@ ~lib/memory.ts:271:2 (i32.store ;;@ ~lib/memory.ts:271:13 - (i32.add - (get_local $0) - ;;@ ~lib/memory.ts:271:20 - (i32.const 8) - ) - ;;@ ~lib/memory.ts:271:23 - (get_local $4) - ) - ;;@ ~lib/memory.ts:272:2 - (i32.store - ;;@ ~lib/memory.ts:272:13 (i32.sub (i32.add (get_local $0) - ;;@ ~lib/memory.ts:272:20 + ;;@ ~lib/memory.ts:271:20 (get_local $2) ) - ;;@ ~lib/memory.ts:272:24 - (i32.const 12) + ;;@ ~lib/memory.ts:271:24 + (i32.const 8) ) - ;;@ ~lib/memory.ts:272:28 + ;;@ ~lib/memory.ts:271:27 (get_local $4) ) + ;;@ ~lib/memory.ts:272:2 + (if + ;;@ ~lib/memory.ts:272:6 + (i32.le_u + (get_local $2) + ;;@ ~lib/memory.ts:272:11 + (i32.const 24) + ) + ;;@ ~lib/memory.ts:272:15 + (return) + ) ;;@ ~lib/memory.ts:273:2 (i32.store ;;@ ~lib/memory.ts:273:13 - (i32.sub - (i32.add - (get_local $0) - ;;@ ~lib/memory.ts:273:20 - (get_local $2) - ) - ;;@ ~lib/memory.ts:273:24 - (i32.const 8) + (i32.add + (get_local $0) + ;;@ ~lib/memory.ts:273:20 + (i32.const 12) ) - ;;@ ~lib/memory.ts:273:27 + ;;@ ~lib/memory.ts:273:24 (get_local $4) ) ;;@ ~lib/memory.ts:274:2 - (if - ;;@ ~lib/memory.ts:274:6 - (i32.le_u - (get_local $2) - ;;@ ~lib/memory.ts:274:11 - (i32.const 24) + (i32.store + ;;@ ~lib/memory.ts:274:13 + (i32.add + (get_local $0) + ;;@ ~lib/memory.ts:274:20 + (i32.const 16) ) - ;;@ ~lib/memory.ts:274:15 - (return) + ;;@ ~lib/memory.ts:274:24 + (get_local $4) ) ;;@ ~lib/memory.ts:275:2 (i32.store @@ -784,7 +805,7 @@ (i32.add (get_local $0) ;;@ ~lib/memory.ts:275:20 - (i32.const 12) + (i32.const 20) ) ;;@ ~lib/memory.ts:275:24 (get_local $4) @@ -795,7 +816,7 @@ (i32.add (get_local $0) ;;@ ~lib/memory.ts:276:20 - (i32.const 16) + (i32.const 24) ) ;;@ ~lib/memory.ts:276:24 (get_local $4) @@ -803,23 +824,31 @@ ;;@ ~lib/memory.ts:277:2 (i32.store ;;@ ~lib/memory.ts:277:13 - (i32.add - (get_local $0) - ;;@ ~lib/memory.ts:277:20 - (i32.const 20) + (i32.sub + (i32.add + (get_local $0) + ;;@ ~lib/memory.ts:277:20 + (get_local $2) + ) + ;;@ ~lib/memory.ts:277:24 + (i32.const 28) ) - ;;@ ~lib/memory.ts:277:24 + ;;@ ~lib/memory.ts:277:28 (get_local $4) ) ;;@ ~lib/memory.ts:278:2 (i32.store ;;@ ~lib/memory.ts:278:13 - (i32.add - (get_local $0) - ;;@ ~lib/memory.ts:278:20 + (i32.sub + (i32.add + (get_local $0) + ;;@ ~lib/memory.ts:278:20 + (get_local $2) + ) + ;;@ ~lib/memory.ts:278:24 (i32.const 24) ) - ;;@ ~lib/memory.ts:278:24 + ;;@ ~lib/memory.ts:278:28 (get_local $4) ) ;;@ ~lib/memory.ts:279:2 @@ -832,7 +861,7 @@ (get_local $2) ) ;;@ ~lib/memory.ts:279:24 - (i32.const 28) + (i32.const 20) ) ;;@ ~lib/memory.ts:279:28 (get_local $4) @@ -847,106 +876,98 @@ (get_local $2) ) ;;@ ~lib/memory.ts:280:24 - (i32.const 24) + (i32.const 16) ) ;;@ ~lib/memory.ts:280:28 (get_local $4) ) - ;;@ ~lib/memory.ts:281:2 - (i32.store - ;;@ ~lib/memory.ts:281:13 - (i32.sub - (i32.add - (get_local $0) - ;;@ ~lib/memory.ts:281:20 - (get_local $2) - ) - ;;@ ~lib/memory.ts:281:24 - (i32.const 20) - ) - ;;@ ~lib/memory.ts:281:28 - (get_local $4) - ) - ;;@ ~lib/memory.ts:282:2 - (i32.store - ;;@ ~lib/memory.ts:282:13 - (i32.sub - (i32.add - (get_local $0) - ;;@ ~lib/memory.ts:282:20 - (get_local $2) - ) - ;;@ ~lib/memory.ts:282:24 - (i32.const 16) - ) - ;;@ ~lib/memory.ts:282:28 - (get_local $4) - ) - ;;@ ~lib/memory.ts:285:2 + ;;@ ~lib/memory.ts:283:2 (set_local $3 - ;;@ ~lib/memory.ts:285:6 + ;;@ ~lib/memory.ts:283:6 (i32.add (i32.const 24) - ;;@ ~lib/memory.ts:285:11 + ;;@ ~lib/memory.ts:283:11 (i32.and - ;;@ ~lib/memory.ts:285:12 + ;;@ ~lib/memory.ts:283:12 (get_local $0) - ;;@ ~lib/memory.ts:285:19 + ;;@ ~lib/memory.ts:283:19 (i32.const 4) ) ) ) - ;;@ ~lib/memory.ts:286:2 + ;;@ ~lib/memory.ts:284:2 (set_local $0 (i32.add (get_local $0) - ;;@ ~lib/memory.ts:286:10 + ;;@ ~lib/memory.ts:284:10 (get_local $3) ) ) - ;;@ ~lib/memory.ts:287:2 + ;;@ ~lib/memory.ts:285:2 (set_local $2 (i32.sub (get_local $2) - ;;@ ~lib/memory.ts:287:7 + ;;@ ~lib/memory.ts:285:7 (get_local $3) ) ) - ;;@ ~lib/memory.ts:290:2 + ;;@ ~lib/memory.ts:288:2 (set_local $5 - ;;@ ~lib/memory.ts:290:17 + ;;@ ~lib/memory.ts:288:17 (i64.or (i64.extend_u/i32 (get_local $4) ) - ;;@ ~lib/memory.ts:290:28 + ;;@ ~lib/memory.ts:288:28 (i64.shl - ;;@ ~lib/memory.ts:290:29 + ;;@ ~lib/memory.ts:288:29 (i64.extend_u/i32 (get_local $4) ) - ;;@ ~lib/memory.ts:290:41 + ;;@ ~lib/memory.ts:288:41 (i64.const 32) ) ) ) - ;;@ ~lib/memory.ts:291:2 + ;;@ ~lib/memory.ts:289:2 (block $break|0 (loop $continue|0 (if - ;;@ ~lib/memory.ts:291:9 + ;;@ ~lib/memory.ts:289:9 (i32.ge_u (get_local $2) - ;;@ ~lib/memory.ts:291:14 + ;;@ ~lib/memory.ts:289:14 (i32.const 32) ) (block (block + ;;@ ~lib/memory.ts:290:4 + (i64.store + ;;@ ~lib/memory.ts:290:15 + (get_local $0) + ;;@ ~lib/memory.ts:290:21 + (get_local $5) + ) + ;;@ ~lib/memory.ts:291:4 + (i64.store + ;;@ ~lib/memory.ts:291:15 + (i32.add + (get_local $0) + ;;@ ~lib/memory.ts:291:22 + (i32.const 8) + ) + ;;@ ~lib/memory.ts:291:25 + (get_local $5) + ) ;;@ ~lib/memory.ts:292:4 (i64.store ;;@ ~lib/memory.ts:292:15 - (get_local $0) - ;;@ ~lib/memory.ts:292:21 + (i32.add + (get_local $0) + ;;@ ~lib/memory.ts:292:22 + (i32.const 16) + ) + ;;@ ~lib/memory.ts:292:26 (get_local $5) ) ;;@ ~lib/memory.ts:293:4 @@ -955,46 +976,24 @@ (i32.add (get_local $0) ;;@ ~lib/memory.ts:293:22 - (i32.const 8) + (i32.const 24) ) - ;;@ ~lib/memory.ts:293:25 + ;;@ ~lib/memory.ts:293:26 (get_local $5) ) ;;@ ~lib/memory.ts:294:4 - (i64.store - ;;@ ~lib/memory.ts:294:15 - (i32.add - (get_local $0) - ;;@ ~lib/memory.ts:294:22 - (i32.const 16) - ) - ;;@ ~lib/memory.ts:294:26 - (get_local $5) - ) - ;;@ ~lib/memory.ts:295:4 - (i64.store - ;;@ ~lib/memory.ts:295:15 - (i32.add - (get_local $0) - ;;@ ~lib/memory.ts:295:22 - (i32.const 24) - ) - ;;@ ~lib/memory.ts:295:26 - (get_local $5) - ) - ;;@ ~lib/memory.ts:296:4 (set_local $2 (i32.sub (get_local $2) - ;;@ ~lib/memory.ts:296:9 + ;;@ ~lib/memory.ts:294:9 (i32.const 32) ) ) - ;;@ ~lib/memory.ts:297:4 + ;;@ ~lib/memory.ts:295:4 (set_local $0 (i32.add (get_local $0) - ;;@ ~lib/memory.ts:297:12 + ;;@ ~lib/memory.ts:295:12 (i32.const 32) ) ) @@ -1006,13 +1005,13 @@ ) ) (func $~lib/memory/memory.fill (; 12 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) - ;;@ ~lib/memory.ts:11:4 + ;;@ ~lib/memory.ts:9:4 (call $~lib/memory/memset - ;;@ ~lib/memory.ts:11:11 + ;;@ ~lib/memory.ts:9:11 (get_local $0) - ;;@ ~lib/memory.ts:11:17 + ;;@ ~lib/memory.ts:9:17 (get_local $1) - ;;@ ~lib/memory.ts:11:20 + ;;@ ~lib/memory.ts:9:20 (get_local $2) ) ) @@ -1263,111 +1262,112 @@ (local $6 i32) (local $7 i32) (local $8 f64) - ;;@ assembly/index.ts:90:4 + ;;@ assembly/index.ts:88:4 (set_local $2 + ;;@ assembly/index.ts:88:20 + (f64.const 0) + ) + ;;@ assembly/index.ts:89:4 + (set_local $3 + ;;@ assembly/index.ts:89:20 + (f64.const 0) + ) + ;;@ assembly/index.ts:90:4 + (set_local $4 ;;@ assembly/index.ts:90:20 (f64.const 0) ) ;;@ assembly/index.ts:91:4 - (set_local $3 - ;;@ assembly/index.ts:91:20 - (f64.const 0) - ) - ;;@ assembly/index.ts:92:4 - (set_local $4 - ;;@ assembly/index.ts:92:20 - (f64.const 0) - ) - ;;@ assembly/index.ts:93:4 (set_local $5 - ;;@ assembly/index.ts:93:15 + ;;@ assembly/index.ts:91:15 (call $~lib/array/Array#get:length (get_local $1) ) ) - ;;@ assembly/index.ts:94:4 + ;;@ assembly/index.ts:92:4 (block $break|0 - ;;@ assembly/index.ts:94:9 + ;;@ assembly/index.ts:92:9 (set_local $6 - ;;@ assembly/index.ts:94:17 + ;;@ assembly/index.ts:92:17 (i32.const 0) ) (loop $repeat|0 (br_if $break|0 (i32.eqz - ;;@ assembly/index.ts:94:20 + ;;@ assembly/index.ts:92:20 (i32.lt_s (get_local $6) - ;;@ assembly/index.ts:94:24 + ;;@ assembly/index.ts:92:24 (get_local $5) ) ) ) - ;;@ assembly/index.ts:94:35 + ;;@ assembly/index.ts:92:35 (block - ;;@ assembly/index.ts:95:6 + ;;@ assembly/index.ts:93:6 (set_local $7 - ;;@ assembly/index.ts:95:14 + ;;@ assembly/index.ts:93:14 (call $~lib/array/Array#__unchecked_get - ;;@ assembly/index.ts:95:24 + ;;@ assembly/index.ts:93:24 (get_local $1) - ;;@ assembly/index.ts:95:31 + ;;@ assembly/index.ts:93:31 (get_local $6) ) ) - ;;@ assembly/index.ts:96:6 + ;;@ assembly/index.ts:94:6 (set_local $8 - ;;@ assembly/index.ts:96:14 + ;;@ assembly/index.ts:94:14 (f64.load offset=48 (get_local $7) ) ) - ;;@ assembly/index.ts:97:6 + ;;@ assembly/index.ts:95:6 (set_local $2 (f64.add (get_local $2) - ;;@ assembly/index.ts:97:12 + ;;@ assembly/index.ts:95:12 (f64.mul (f64.load offset=24 (get_local $7) ) + ;;@ assembly/index.ts:95:19 + (get_local $8) + ) + ) + ) + ;;@ assembly/index.ts:96:6 + (set_local $3 + (f64.add + (get_local $3) + ;;@ assembly/index.ts:96:12 + (f64.mul + (f64.load offset=32 + (get_local $7) + ) + ;;@ assembly/index.ts:96:19 + (get_local $8) + ) + ) + ) + ;;@ assembly/index.ts:97:6 + (set_local $4 + (f64.add + (get_local $4) + ;;@ assembly/index.ts:97:12 + (f64.mul + (f64.load offset=40 + (get_local $7) + ) ;;@ assembly/index.ts:97:19 (get_local $8) ) ) ) - ;;@ assembly/index.ts:98:6 - (set_local $3 - (f64.add - (get_local $3) - ;;@ assembly/index.ts:98:12 - (f64.mul - (f64.load offset=32 - (get_local $7) - ) - ;;@ assembly/index.ts:98:19 - (get_local $8) - ) - ) - ) - ;;@ assembly/index.ts:99:6 - (set_local $4 - (f64.add - (get_local $4) - ;;@ assembly/index.ts:99:12 - (f64.mul - (f64.load offset=40 - (get_local $7) - ) - ;;@ assembly/index.ts:99:19 - (get_local $8) - ) - ) - ) ) - ;;@ assembly/index.ts:94:30 + ;;@ assembly/index.ts:92:30 (set_local $6 (i32.add + ;;@ assembly/index.ts:92:32 (get_local $6) (i32.const 1) ) @@ -1375,20 +1375,20 @@ (br $repeat|0) ) ) - ;;@ assembly/index.ts:101:14 + ;;@ assembly/index.ts:99:14 (drop (call $assembly/index/Body#offsetMomentum - ;;@ assembly/index.ts:101:4 + ;;@ assembly/index.ts:99:4 (call $~lib/array/Array#__get (get_local $1) - ;;@ assembly/index.ts:101:11 + ;;@ assembly/index.ts:99:11 (i32.const 0) ) - ;;@ assembly/index.ts:101:29 + ;;@ assembly/index.ts:99:29 (get_local $2) - ;;@ assembly/index.ts:101:33 + ;;@ assembly/index.ts:99:33 (get_local $3) - ;;@ assembly/index.ts:101:37 + ;;@ assembly/index.ts:99:37 (get_local $4) ) ) @@ -1415,12 +1415,12 @@ ) (func $assembly/index/init (; 20 ;) (type $v) (local $0 i32) - ;;@ assembly/index.ts:191:2 + ;;@ assembly/index.ts:189:2 (set_global $assembly/index/system - ;;@ assembly/index.ts:191:11 + ;;@ assembly/index.ts:189:11 (call $assembly/index/NBodySystem#constructor (i32.const 0) - ;;@ assembly/index.ts:191:27 + ;;@ assembly/index.ts:189:27 (block (result i32) (set_local $0 (call $~lib/array/Array#constructor @@ -1431,31 +1431,31 @@ (call $~lib/array/Array#__unchecked_set (get_local $0) (i32.const 0) - ;;@ assembly/index.ts:192:4 + ;;@ assembly/index.ts:190:4 (call $assembly/index/Sun) ) (call $~lib/array/Array#__unchecked_set (get_local $0) (i32.const 1) - ;;@ assembly/index.ts:193:4 + ;;@ assembly/index.ts:191:4 (call $assembly/index/Jupiter) ) (call $~lib/array/Array#__unchecked_set (get_local $0) (i32.const 2) - ;;@ assembly/index.ts:194:4 + ;;@ assembly/index.ts:192:4 (call $assembly/index/Saturn) ) (call $~lib/array/Array#__unchecked_set (get_local $0) (i32.const 3) - ;;@ assembly/index.ts:195:4 + ;;@ assembly/index.ts:193:4 (call $assembly/index/Uranus) ) (call $~lib/array/Array#__unchecked_set (get_local $0) (i32.const 4) - ;;@ assembly/index.ts:196:4 + ;;@ assembly/index.ts:194:4 (call $assembly/index/Neptune) ) (get_local $0) @@ -1463,37 +1463,7 @@ ) ) ) - (func $assembly/index/getBody (; 21 ;) (type $ii) (param $0 i32) (result i32) - (local $1 i32) - ;;@ assembly/index.ts:201:2 - (set_local $1 - ;;@ assembly/index.ts:201:15 - (i32.load - (get_global $assembly/index/system) - ) - ) - ;;@ assembly/index.ts:202:59 - (if (result i32) - ;;@ assembly/index.ts:202:9 - (i32.lt_u - (get_local $0) - ;;@ assembly/index.ts:202:22 - (call $~lib/array/Array#get:length - ;;@ assembly/index.ts:202:27 - (get_local $1) - ) - ) - ;;@ assembly/index.ts:202:43 - (call $~lib/array/Array#__get - (get_local $1) - ;;@ assembly/index.ts:202:50 - (get_local $0) - ) - ;;@ assembly/index.ts:202:59 - (i32.const 0) - ) - ) - (func $assembly/index/NBodySystem#advance (; 22 ;) (type $iFv) (param $0 i32) (param $1 f64) + (func $assembly/index/NBodySystem#advance (; 21 ;) (type $iFv) (param $0 i32) (param $1 f64) (local $2 i32) (local $3 i32) (local $4 i32) @@ -1515,194 +1485,194 @@ (local $20 f64) (local $21 f64) (local $22 f64) - ;;@ assembly/index.ts:105:4 + ;;@ assembly/index.ts:103:4 (set_local $2 - ;;@ assembly/index.ts:105:17 + ;;@ assembly/index.ts:103:17 (i32.load (get_local $0) ) ) - ;;@ assembly/index.ts:106:4 + ;;@ assembly/index.ts:104:4 (set_local $3 - ;;@ assembly/index.ts:106:20 + ;;@ assembly/index.ts:104:20 (call $~lib/array/Array#get:length (get_local $2) ) ) - ;;@ assembly/index.ts:109:4 + ;;@ assembly/index.ts:107:4 (block $break|0 - ;;@ assembly/index.ts:109:9 + ;;@ assembly/index.ts:107:9 (set_local $4 - ;;@ assembly/index.ts:109:22 + ;;@ assembly/index.ts:107:22 (i32.const 0) ) (loop $repeat|0 (br_if $break|0 (i32.eqz - ;;@ assembly/index.ts:109:25 + ;;@ assembly/index.ts:107:25 (i32.lt_u (get_local $4) - ;;@ assembly/index.ts:109:29 + ;;@ assembly/index.ts:107:29 (get_local $3) ) ) ) - ;;@ assembly/index.ts:109:40 + ;;@ assembly/index.ts:107:40 (block - ;;@ assembly/index.ts:110:6 + ;;@ assembly/index.ts:108:6 (set_local $5 - ;;@ assembly/index.ts:110:18 + ;;@ assembly/index.ts:108:18 (call $~lib/array/Array#__unchecked_get - ;;@ assembly/index.ts:110:28 + ;;@ assembly/index.ts:108:28 (get_local $2) - ;;@ assembly/index.ts:110:35 + ;;@ assembly/index.ts:108:35 (get_local $4) ) ) - ;;@ assembly/index.ts:113:6 + ;;@ assembly/index.ts:111:6 (set_local $6 - ;;@ assembly/index.ts:113:15 + ;;@ assembly/index.ts:111:15 (f64.load (get_local $5) ) ) - ;;@ assembly/index.ts:114:6 + ;;@ assembly/index.ts:112:6 (set_local $7 - ;;@ assembly/index.ts:114:15 + ;;@ assembly/index.ts:112:15 (f64.load offset=8 (get_local $5) ) ) - ;;@ assembly/index.ts:115:6 + ;;@ assembly/index.ts:113:6 (set_local $8 - ;;@ assembly/index.ts:115:15 + ;;@ assembly/index.ts:113:15 (f64.load offset=16 (get_local $5) ) ) - ;;@ assembly/index.ts:117:6 + ;;@ assembly/index.ts:115:6 (set_local $9 - ;;@ assembly/index.ts:117:17 + ;;@ assembly/index.ts:115:17 (f64.load offset=24 (get_local $5) ) ) - ;;@ assembly/index.ts:118:6 + ;;@ assembly/index.ts:116:6 (set_local $10 - ;;@ assembly/index.ts:118:17 + ;;@ assembly/index.ts:116:17 (f64.load offset=32 (get_local $5) ) ) - ;;@ assembly/index.ts:119:6 + ;;@ assembly/index.ts:117:6 (set_local $11 - ;;@ assembly/index.ts:119:17 + ;;@ assembly/index.ts:117:17 (f64.load offset=40 (get_local $5) ) ) - ;;@ assembly/index.ts:121:6 + ;;@ assembly/index.ts:119:6 (set_local $12 - ;;@ assembly/index.ts:121:19 + ;;@ assembly/index.ts:119:19 (f64.load offset=48 (get_local $5) ) ) - ;;@ assembly/index.ts:122:6 + ;;@ assembly/index.ts:120:6 (block $break|1 - ;;@ assembly/index.ts:122:11 + ;;@ assembly/index.ts:120:11 (set_local $13 - ;;@ assembly/index.ts:122:24 + ;;@ assembly/index.ts:120:24 (i32.add (get_local $4) - ;;@ assembly/index.ts:122:28 + ;;@ assembly/index.ts:120:28 (i32.const 1) ) ) (loop $repeat|1 (br_if $break|1 (i32.eqz - ;;@ assembly/index.ts:122:31 + ;;@ assembly/index.ts:120:31 (i32.lt_u (get_local $13) - ;;@ assembly/index.ts:122:35 + ;;@ assembly/index.ts:120:35 (get_local $3) ) ) ) - ;;@ assembly/index.ts:122:46 + ;;@ assembly/index.ts:120:46 (block - ;;@ assembly/index.ts:123:8 + ;;@ assembly/index.ts:121:8 (set_local $14 - ;;@ assembly/index.ts:123:20 + ;;@ assembly/index.ts:121:20 (call $~lib/array/Array#__unchecked_get - ;;@ assembly/index.ts:123:30 + ;;@ assembly/index.ts:121:30 (get_local $2) - ;;@ assembly/index.ts:123:37 + ;;@ assembly/index.ts:121:37 (get_local $13) ) ) - ;;@ assembly/index.ts:126:8 + ;;@ assembly/index.ts:124:8 (set_local $15 - ;;@ assembly/index.ts:126:17 + ;;@ assembly/index.ts:124:17 (f64.sub (get_local $6) - ;;@ assembly/index.ts:126:22 + ;;@ assembly/index.ts:124:22 (f64.load (get_local $14) ) ) ) - ;;@ assembly/index.ts:127:8 + ;;@ assembly/index.ts:125:8 (set_local $16 - ;;@ assembly/index.ts:127:17 + ;;@ assembly/index.ts:125:17 (f64.sub (get_local $7) - ;;@ assembly/index.ts:127:22 + ;;@ assembly/index.ts:125:22 (f64.load offset=8 (get_local $14) ) ) ) - ;;@ assembly/index.ts:128:8 + ;;@ assembly/index.ts:126:8 (set_local $17 - ;;@ assembly/index.ts:128:17 + ;;@ assembly/index.ts:126:17 (f64.sub (get_local $8) - ;;@ assembly/index.ts:128:22 + ;;@ assembly/index.ts:126:22 (f64.load offset=16 (get_local $14) ) ) ) - ;;@ assembly/index.ts:130:8 + ;;@ assembly/index.ts:128:8 (set_local $18 - ;;@ assembly/index.ts:130:25 + ;;@ assembly/index.ts:128:25 (f64.add (f64.add (f64.mul (get_local $15) - ;;@ assembly/index.ts:130:30 + ;;@ assembly/index.ts:128:30 (get_local $15) ) - ;;@ assembly/index.ts:130:35 + ;;@ assembly/index.ts:128:35 (f64.mul (get_local $16) - ;;@ assembly/index.ts:130:40 + ;;@ assembly/index.ts:128:40 (get_local $16) ) ) - ;;@ assembly/index.ts:130:45 + ;;@ assembly/index.ts:128:45 (f64.mul (get_local $17) - ;;@ assembly/index.ts:130:50 + ;;@ assembly/index.ts:128:50 (get_local $17) ) ) ) - ;;@ assembly/index.ts:131:8 + ;;@ assembly/index.ts:129:8 (set_local $19 - ;;@ assembly/index.ts:131:23 + ;;@ assembly/index.ts:129:23 (block $~lib/math/NativeMath.sqrt|inlined.0 (result f64) ;;@ ~lib/math.ts:1076:30 (f64.sqrt @@ -1711,126 +1681,126 @@ ) ) ) - ;;@ assembly/index.ts:132:8 + ;;@ assembly/index.ts:130:8 (set_local $20 - ;;@ assembly/index.ts:132:18 + ;;@ assembly/index.ts:130:18 (f64.div (get_local $1) - ;;@ assembly/index.ts:132:23 + ;;@ assembly/index.ts:130:23 (f64.mul - ;;@ assembly/index.ts:132:24 + ;;@ assembly/index.ts:130:24 (get_local $18) - ;;@ assembly/index.ts:132:37 + ;;@ assembly/index.ts:130:37 (get_local $19) ) ) ) - ;;@ assembly/index.ts:134:8 + ;;@ assembly/index.ts:132:8 (set_local $21 - ;;@ assembly/index.ts:134:18 + ;;@ assembly/index.ts:132:18 (f64.mul (get_local $12) - ;;@ assembly/index.ts:134:27 + ;;@ assembly/index.ts:132:27 (get_local $20) ) ) - ;;@ assembly/index.ts:135:8 + ;;@ assembly/index.ts:133:8 (set_local $22 - ;;@ assembly/index.ts:135:18 + ;;@ assembly/index.ts:133:18 (f64.mul (f64.load offset=48 (get_local $14) ) - ;;@ assembly/index.ts:135:31 + ;;@ assembly/index.ts:133:31 (get_local $20) ) ) - ;;@ assembly/index.ts:137:8 + ;;@ assembly/index.ts:135:8 (set_local $9 (f64.sub (get_local $9) - ;;@ assembly/index.ts:137:16 + ;;@ assembly/index.ts:135:16 (f64.mul (get_local $15) + ;;@ assembly/index.ts:135:21 + (get_local $22) + ) + ) + ) + ;;@ assembly/index.ts:136:8 + (set_local $10 + (f64.sub + (get_local $10) + ;;@ assembly/index.ts:136:16 + (f64.mul + (get_local $16) + ;;@ assembly/index.ts:136:21 + (get_local $22) + ) + ) + ) + ;;@ assembly/index.ts:137:8 + (set_local $11 + (f64.sub + (get_local $11) + ;;@ assembly/index.ts:137:16 + (f64.mul + (get_local $17) ;;@ assembly/index.ts:137:21 (get_local $22) ) ) ) - ;;@ assembly/index.ts:138:8 - (set_local $10 - (f64.sub - (get_local $10) - ;;@ assembly/index.ts:138:16 - (f64.mul - (get_local $16) - ;;@ assembly/index.ts:138:21 - (get_local $22) - ) - ) - ) ;;@ assembly/index.ts:139:8 - (set_local $11 - (f64.sub - (get_local $11) - ;;@ assembly/index.ts:139:16 - (f64.mul - (get_local $17) - ;;@ assembly/index.ts:139:21 - (get_local $22) - ) - ) - ) - ;;@ assembly/index.ts:141:8 (f64.store offset=24 (get_local $14) (f64.add (f64.load offset=24 (get_local $14) ) - ;;@ assembly/index.ts:141:20 + ;;@ assembly/index.ts:139:20 (f64.mul (get_local $15) - ;;@ assembly/index.ts:141:25 + ;;@ assembly/index.ts:139:25 (get_local $21) ) ) ) - ;;@ assembly/index.ts:142:8 + ;;@ assembly/index.ts:140:8 (f64.store offset=32 (get_local $14) (f64.add (f64.load offset=32 (get_local $14) ) - ;;@ assembly/index.ts:142:20 + ;;@ assembly/index.ts:140:20 (f64.mul (get_local $16) - ;;@ assembly/index.ts:142:25 + ;;@ assembly/index.ts:140:25 (get_local $21) ) ) ) - ;;@ assembly/index.ts:143:8 + ;;@ assembly/index.ts:141:8 (f64.store offset=40 (get_local $14) (f64.add (f64.load offset=40 (get_local $14) ) - ;;@ assembly/index.ts:143:20 + ;;@ assembly/index.ts:141:20 (f64.mul (get_local $17) - ;;@ assembly/index.ts:143:25 + ;;@ assembly/index.ts:141:25 (get_local $21) ) ) ) ) - ;;@ assembly/index.ts:122:41 + ;;@ assembly/index.ts:120:41 (set_local $13 (i32.add - ;;@ assembly/index.ts:122:43 + ;;@ assembly/index.ts:120:43 (get_local $13) (i32.const 1) ) @@ -1838,74 +1808,74 @@ (br $repeat|1) ) ) - ;;@ assembly/index.ts:146:6 + ;;@ assembly/index.ts:144:6 (f64.store offset=24 (get_local $5) - ;;@ assembly/index.ts:146:17 + ;;@ assembly/index.ts:144:17 (get_local $9) ) - ;;@ assembly/index.ts:147:6 + ;;@ assembly/index.ts:145:6 (f64.store offset=32 (get_local $5) - ;;@ assembly/index.ts:147:17 + ;;@ assembly/index.ts:145:17 (get_local $10) ) - ;;@ assembly/index.ts:148:6 + ;;@ assembly/index.ts:146:6 (f64.store offset=40 (get_local $5) - ;;@ assembly/index.ts:148:17 + ;;@ assembly/index.ts:146:17 (get_local $11) ) - ;;@ assembly/index.ts:150:6 + ;;@ assembly/index.ts:148:6 (f64.store (get_local $5) (f64.add (f64.load (get_local $5) ) - ;;@ assembly/index.ts:150:17 + ;;@ assembly/index.ts:148:17 (f64.mul (get_local $1) - ;;@ assembly/index.ts:150:22 + ;;@ assembly/index.ts:148:22 (get_local $9) ) ) ) - ;;@ assembly/index.ts:151:6 + ;;@ assembly/index.ts:149:6 (f64.store offset=8 (get_local $5) (f64.add (f64.load offset=8 (get_local $5) ) - ;;@ assembly/index.ts:151:17 + ;;@ assembly/index.ts:149:17 (f64.mul (get_local $1) - ;;@ assembly/index.ts:151:22 + ;;@ assembly/index.ts:149:22 (get_local $10) ) ) ) - ;;@ assembly/index.ts:152:6 + ;;@ assembly/index.ts:150:6 (f64.store offset=16 (get_local $5) (f64.add (f64.load offset=16 (get_local $5) ) - ;;@ assembly/index.ts:152:17 + ;;@ assembly/index.ts:150:17 (f64.mul (get_local $1) - ;;@ assembly/index.ts:152:22 + ;;@ assembly/index.ts:150:22 (get_local $11) ) ) ) ) - ;;@ assembly/index.ts:109:35 + ;;@ assembly/index.ts:107:35 (set_local $4 (i32.add - ;;@ assembly/index.ts:109:37 + ;;@ assembly/index.ts:107:37 (get_local $4) (i32.const 1) ) @@ -1914,7 +1884,7 @@ ) ) ) - (func $assembly/index/NBodySystem#energy (; 23 ;) (type $iF) (param $0 i32) (result f64) + (func $assembly/index/NBodySystem#energy (; 22 ;) (type $iF) (param $0 i32) (result f64) (local $1 f64) (local $2 i32) (local $3 i32) @@ -1933,27 +1903,27 @@ (local $16 f64) (local $17 f64) (local $18 f64) - ;;@ assembly/index.ts:157:4 + ;;@ assembly/index.ts:155:4 (set_local $1 - ;;@ assembly/index.ts:157:19 + ;;@ assembly/index.ts:155:19 (f64.const 0) ) - ;;@ assembly/index.ts:158:4 + ;;@ assembly/index.ts:156:4 (set_local $2 - ;;@ assembly/index.ts:158:17 + ;;@ assembly/index.ts:156:17 (i32.load (get_local $0) ) ) - ;;@ assembly/index.ts:160:4 + ;;@ assembly/index.ts:158:4 (block $break|0 (block (set_local $3 - ;;@ assembly/index.ts:160:22 + ;;@ assembly/index.ts:158:22 (i32.const 0) ) (set_local $4 - ;;@ assembly/index.ts:160:37 + ;;@ assembly/index.ts:158:37 (call $~lib/array/Array#get:length (get_local $2) ) @@ -1962,203 +1932,203 @@ (loop $repeat|0 (br_if $break|0 (i32.eqz - ;;@ assembly/index.ts:160:52 + ;;@ assembly/index.ts:158:52 (i32.lt_u (get_local $3) - ;;@ assembly/index.ts:160:56 + ;;@ assembly/index.ts:158:56 (get_local $4) ) ) ) - ;;@ assembly/index.ts:160:67 + ;;@ assembly/index.ts:158:67 (block - ;;@ assembly/index.ts:161:6 + ;;@ assembly/index.ts:159:6 (set_local $5 - ;;@ assembly/index.ts:161:18 + ;;@ assembly/index.ts:159:18 (call $~lib/array/Array#__unchecked_get - ;;@ assembly/index.ts:161:28 + ;;@ assembly/index.ts:159:28 (get_local $2) - ;;@ assembly/index.ts:161:35 + ;;@ assembly/index.ts:159:35 (get_local $3) ) ) - ;;@ assembly/index.ts:163:6 + ;;@ assembly/index.ts:161:6 (set_local $6 - ;;@ assembly/index.ts:163:15 + ;;@ assembly/index.ts:161:15 (f64.load (get_local $5) ) ) - ;;@ assembly/index.ts:164:6 + ;;@ assembly/index.ts:162:6 (set_local $7 - ;;@ assembly/index.ts:164:15 + ;;@ assembly/index.ts:162:15 (f64.load offset=8 (get_local $5) ) ) - ;;@ assembly/index.ts:165:6 + ;;@ assembly/index.ts:163:6 (set_local $8 - ;;@ assembly/index.ts:165:15 + ;;@ assembly/index.ts:163:15 (f64.load offset=16 (get_local $5) ) ) - ;;@ assembly/index.ts:167:6 + ;;@ assembly/index.ts:165:6 (set_local $9 - ;;@ assembly/index.ts:167:15 + ;;@ assembly/index.ts:165:15 (f64.load offset=24 (get_local $5) ) ) - ;;@ assembly/index.ts:168:6 + ;;@ assembly/index.ts:166:6 (set_local $10 - ;;@ assembly/index.ts:168:15 + ;;@ assembly/index.ts:166:15 (f64.load offset=32 (get_local $5) ) ) - ;;@ assembly/index.ts:169:6 + ;;@ assembly/index.ts:167:6 (set_local $11 - ;;@ assembly/index.ts:169:15 + ;;@ assembly/index.ts:167:15 (f64.load offset=40 (get_local $5) ) ) - ;;@ assembly/index.ts:171:6 + ;;@ assembly/index.ts:169:6 (set_local $12 - ;;@ assembly/index.ts:171:16 + ;;@ assembly/index.ts:169:16 (f64.load offset=48 (get_local $5) ) ) - ;;@ assembly/index.ts:173:6 + ;;@ assembly/index.ts:171:6 (set_local $1 (f64.add (get_local $1) - ;;@ assembly/index.ts:173:11 + ;;@ assembly/index.ts:171:11 (f64.mul (f64.mul (f64.const 0.5) - ;;@ assembly/index.ts:173:17 + ;;@ assembly/index.ts:171:17 (get_local $12) ) - ;;@ assembly/index.ts:173:23 + ;;@ assembly/index.ts:171:23 (f64.add - ;;@ assembly/index.ts:173:24 + ;;@ assembly/index.ts:171:24 (f64.add (f64.mul (get_local $9) - ;;@ assembly/index.ts:173:29 + ;;@ assembly/index.ts:171:29 (get_local $9) ) - ;;@ assembly/index.ts:173:34 + ;;@ assembly/index.ts:171:34 (f64.mul (get_local $10) - ;;@ assembly/index.ts:173:39 + ;;@ assembly/index.ts:171:39 (get_local $10) ) ) - ;;@ assembly/index.ts:173:44 + ;;@ assembly/index.ts:171:44 (f64.mul (get_local $11) - ;;@ assembly/index.ts:173:49 + ;;@ assembly/index.ts:171:49 (get_local $11) ) ) ) ) ) - ;;@ assembly/index.ts:175:6 + ;;@ assembly/index.ts:173:6 (block $break|1 - ;;@ assembly/index.ts:175:11 + ;;@ assembly/index.ts:173:11 (set_local $13 - ;;@ assembly/index.ts:175:24 + ;;@ assembly/index.ts:173:24 (i32.add (get_local $3) - ;;@ assembly/index.ts:175:28 + ;;@ assembly/index.ts:173:28 (i32.const 1) ) ) (loop $repeat|1 (br_if $break|1 (i32.eqz - ;;@ assembly/index.ts:175:31 + ;;@ assembly/index.ts:173:31 (i32.lt_u (get_local $13) - ;;@ assembly/index.ts:175:35 + ;;@ assembly/index.ts:173:35 (get_local $4) ) ) ) - ;;@ assembly/index.ts:175:46 + ;;@ assembly/index.ts:173:46 (block - ;;@ assembly/index.ts:176:8 + ;;@ assembly/index.ts:174:8 (set_local $14 - ;;@ assembly/index.ts:176:20 + ;;@ assembly/index.ts:174:20 (call $~lib/array/Array#__unchecked_get - ;;@ assembly/index.ts:176:30 + ;;@ assembly/index.ts:174:30 (get_local $2) - ;;@ assembly/index.ts:176:37 + ;;@ assembly/index.ts:174:37 (get_local $13) ) ) - ;;@ assembly/index.ts:177:8 + ;;@ assembly/index.ts:175:8 (set_local $15 - ;;@ assembly/index.ts:177:17 + ;;@ assembly/index.ts:175:17 (f64.sub (get_local $6) - ;;@ assembly/index.ts:177:22 + ;;@ assembly/index.ts:175:22 (f64.load (get_local $14) ) ) ) - ;;@ assembly/index.ts:178:8 + ;;@ assembly/index.ts:176:8 (set_local $16 - ;;@ assembly/index.ts:178:17 + ;;@ assembly/index.ts:176:17 (f64.sub (get_local $7) - ;;@ assembly/index.ts:178:22 + ;;@ assembly/index.ts:176:22 (f64.load offset=8 (get_local $14) ) ) ) - ;;@ assembly/index.ts:179:8 + ;;@ assembly/index.ts:177:8 (set_local $17 - ;;@ assembly/index.ts:179:17 + ;;@ assembly/index.ts:177:17 (f64.sub (get_local $8) - ;;@ assembly/index.ts:179:22 + ;;@ assembly/index.ts:177:22 (f64.load offset=16 (get_local $14) ) ) ) - ;;@ assembly/index.ts:180:8 + ;;@ assembly/index.ts:178:8 (set_local $18 - ;;@ assembly/index.ts:180:23 + ;;@ assembly/index.ts:178:23 (block $~lib/math/NativeMath.sqrt|inlined.1 (result f64) (set_local $18 - ;;@ assembly/index.ts:180:40 + ;;@ assembly/index.ts:178:40 (f64.add (f64.add (f64.mul (get_local $15) - ;;@ assembly/index.ts:180:45 + ;;@ assembly/index.ts:178:45 (get_local $15) ) - ;;@ assembly/index.ts:180:50 + ;;@ assembly/index.ts:178:50 (f64.mul (get_local $16) - ;;@ assembly/index.ts:180:55 + ;;@ assembly/index.ts:178:55 (get_local $16) ) ) - ;;@ assembly/index.ts:180:60 + ;;@ assembly/index.ts:178:60 (f64.mul (get_local $17) - ;;@ assembly/index.ts:180:65 + ;;@ assembly/index.ts:178:65 (get_local $17) ) ) @@ -2170,29 +2140,29 @@ ) ) ) - ;;@ assembly/index.ts:181:8 + ;;@ assembly/index.ts:179:8 (set_local $1 (f64.sub (get_local $1) - ;;@ assembly/index.ts:181:13 + ;;@ assembly/index.ts:179:13 (f64.div (f64.mul (get_local $12) - ;;@ assembly/index.ts:181:19 + ;;@ assembly/index.ts:179:19 (f64.load offset=48 (get_local $14) ) ) - ;;@ assembly/index.ts:181:32 + ;;@ assembly/index.ts:179:32 (get_local $18) ) ) ) ) - ;;@ assembly/index.ts:175:41 + ;;@ assembly/index.ts:173:41 (set_local $13 (i32.add - ;;@ assembly/index.ts:175:43 + ;;@ assembly/index.ts:173:43 (get_local $13) (i32.const 1) ) @@ -2201,10 +2171,10 @@ ) ) ) - ;;@ assembly/index.ts:160:62 + ;;@ assembly/index.ts:158:62 (set_local $3 (i32.add - ;;@ assembly/index.ts:160:64 + ;;@ assembly/index.ts:158:64 (get_local $3) (i32.const 1) ) @@ -2212,53 +2182,54 @@ (br $repeat|0) ) ) - ;;@ assembly/index.ts:184:11 + ;;@ assembly/index.ts:182:11 (get_local $1) ) - (func $assembly/index/step (; 24 ;) (type $F) (result f64) - ;;@ assembly/index.ts:206:9 + (func $assembly/index/step (; 23 ;) (type $F) (result f64) + ;;@ assembly/index.ts:199:9 (call $assembly/index/NBodySystem#advance - ;;@ assembly/index.ts:206:2 + ;;@ assembly/index.ts:199:2 (get_global $assembly/index/system) - ;;@ assembly/index.ts:206:17 + ;;@ assembly/index.ts:199:17 (f64.const 0.01) ) - ;;@ assembly/index.ts:207:23 + ;;@ assembly/index.ts:200:23 (call $assembly/index/NBodySystem#energy - ;;@ assembly/index.ts:207:9 + ;;@ assembly/index.ts:200:9 (get_global $assembly/index/system) ) ) - (func $assembly/index/bench (; 25 ;) (type $iv) (param $0 i32) + (func $assembly/index/bench (; 24 ;) (type $iv) (param $0 i32) (local $1 i32) - ;;@ assembly/index.ts:211:2 + ;;@ assembly/index.ts:204:2 (block $break|0 - ;;@ assembly/index.ts:211:7 + ;;@ assembly/index.ts:204:7 (set_local $1 - ;;@ assembly/index.ts:211:20 + ;;@ assembly/index.ts:204:20 (i32.const 0) ) (loop $repeat|0 (br_if $break|0 (i32.eqz - ;;@ assembly/index.ts:211:23 + ;;@ assembly/index.ts:204:23 (i32.lt_u (get_local $1) - ;;@ assembly/index.ts:211:27 + ;;@ assembly/index.ts:204:27 (get_local $0) ) ) ) - ;;@ assembly/index.ts:211:46 + ;;@ assembly/index.ts:204:46 (call $assembly/index/NBodySystem#advance - ;;@ assembly/index.ts:211:39 + ;;@ assembly/index.ts:204:39 (get_global $assembly/index/system) - ;;@ assembly/index.ts:211:54 + ;;@ assembly/index.ts:204:54 (f64.const 0.01) ) - ;;@ assembly/index.ts:211:34 + ;;@ assembly/index.ts:204:34 (set_local $1 (i32.add + ;;@ assembly/index.ts:204:36 (get_local $1) (i32.const 1) ) @@ -2267,7 +2238,7 @@ ) ) ) - (func $start (; 26 ;) (type $v) + (func $start (; 25 ;) (type $v) (set_global $~lib/allocator/arena/startOffset ;;@ ~lib/allocator/arena.ts:12:25 (i32.and diff --git a/examples/n-body/package.json b/examples/n-body/package.json index fece7a1c..b52d65c9 100644 --- a/examples/n-body/package.json +++ b/examples/n-body/package.json @@ -3,8 +3,8 @@ "version": "1.0.0", "private": true, "scripts": { - "asbuild:untouched": "asc assembly/index.ts -b build/untouched.wasm -t build/untouched.wat --sourceMap --validate", - "asbuild:optimized": "asc assembly/index.ts -b build/optimized.wasm -t build/optimized.wat -O3 --validate --noDebug --noAssert", + "asbuild:untouched": "asc assembly/index.ts -b build/untouched.wasm -t build/untouched.wat --sourceMap --validate --importMemory", + "asbuild:optimized": "asc assembly/index.ts -b build/optimized.wasm -t build/optimized.wat -O3 --validate --noDebug --noAssert --importMemory", "asbuild:asmjs": "asc assembly/index.ts -a build/index.asm.js -O3 --validate --noDebug --noAssert", "asbuild": "npm run asbuild:untouched && npm run asbuild:optimized && npm run asbuild:asmjs", "tsbuild": "tsc -p assembly -t ES2017 -m commonjs --outDir build", diff --git a/examples/n-body/rust/Cargo.toml b/examples/n-body/rust/Cargo.toml index cb353311..643c7e17 100644 --- a/examples/n-body/rust/Cargo.toml +++ b/examples/n-body/rust/Cargo.toml @@ -9,4 +9,4 @@ crate-type = ["cdylib"] [profile.release] lto = true -opt-level = 's' +opt-level = 3 diff --git a/examples/n-body/rust/index.js b/examples/n-body/rust/index.js index 4195684c..5686c0ef 100644 --- a/examples/n-body/rust/index.js +++ b/examples/n-body/rust/index.js @@ -7,6 +7,7 @@ const compiled = new WebAssembly.Module( const imports = { env: { + memory: new WebAssembly.Memory({ initial: 17 }), abort: (filename, line, column) => { throw Error("abort called at " + line + ":" + colum); } diff --git a/examples/n-body/rust/src/lib.rs b/examples/n-body/rust/src/lib.rs index 018ca9e7..077b8d7a 100644 --- a/examples/n-body/rust/src/lib.rs +++ b/examples/n-body/rust/src/lib.rs @@ -1,22 +1,20 @@ // Code adopted from https://benchmarksgame-team.pages.debian.net/benchmarksgame/program/nbody-rust-1.html -#![feature(core_intrinsics, lang_items)] +#![feature(core_intrinsics, panic_implementation)] #![no_std] -#[lang = "panic_fmt"] -extern "C" fn panic_fmt(_args: ::core::fmt::Arguments, _file: &'static str, _line: u32) -> ! { - use core::intrinsics; - unsafe { - intrinsics::abort(); - } +use core::intrinsics; +use core::panic::PanicInfo; + +#[panic_implementation] +#[no_mangle] +pub fn panic(_info: &PanicInfo) -> ! { + unsafe { intrinsics::abort() } } #[inline(always)] fn sqrt(x: f64) -> f64 { - use core::intrinsics; - unsafe { - intrinsics::sqrtf64(x) - } + unsafe { intrinsics::sqrtf64(x) } } const PI: f64 = 3.141592653589793; diff --git a/examples/n-body/tests/index.js b/examples/n-body/tests/index.js index fa3e4cdd..9a7cebbf 100644 --- a/examples/n-body/tests/index.js +++ b/examples/n-body/tests/index.js @@ -41,38 +41,39 @@ function test(nbody, steps) { } var steps = process.argv.length > 2 ? parseInt(process.argv[2], 10) : 20000000; -var time; -console.log("Performing " + steps + " steps (AssemblyScript WASM) ..."); -time = test(nbodyAS, steps); -console.log("Took " + (time[0] * 1e3 + time[1] / 1e6) + "ms"); +function prologue(name, steps) { + console.log("Performing " + steps + " steps (" + name + ") ..."); +} -console.log("Performing " + steps + " steps (AssemblyScript ASMJS) ..."); -time = test(nbodyAsmJS, steps); -console.log("Took " + (time[0] * 1e3 + time[1] / 1e6) + "ms"); +function epilogue(time) { + console.log("Took " + (time[0] * 1e3 + time[1] / 1e6) + "ms"); +} -console.log("Performing " + steps + " steps (JS) ..."); -time = test(nbodyJS, steps); -console.log("Took " + (time[0] * 1e3 + time[1] / 1e6) + "ms"); +console.log("\nCOLD SERIES:\n"); -console.log("Performing " + steps + " steps (Rust WASM) ..."); -time = test(nbodyRS, steps); -console.log("Took " + (time[0] * 1e3 + time[1] / 1e6) + "ms"); +prologue("AssemblyScript WASM", steps); +epilogue(test(nbodyAS, steps)); -console.log("\nWARMED UP:\n"); +prologue("AssemblyScript ASMJS", steps); +epilogue(test(nbodyAsmJS, steps)); -console.log("Performing " + steps + " steps (AssemblyScript WASM) ..."); -time = test(nbodyAS, steps); -console.log("Took " + (time[0] * 1e3 + time[1] / 1e6) + "ms"); +prologue("JS", steps); +epilogue(test(nbodyJS, steps)); -console.log("Performing " + steps + " steps (AssemblyScript ASMJS) ..."); -time = test(nbodyAsmJS, steps); -console.log("Took " + (time[0] * 1e3 + time[1] / 1e6) + "ms"); +prologue("Rust WASM", steps); +epilogue(test(nbodyRS, steps)); -console.log("Performing " + steps + " steps (JS) ..."); -time = test(nbodyJS, steps); -console.log("Took " + (time[0] * 1e3 + time[1] / 1e6) + "ms"); +console.log("\nWARMED UP SERIES:\n"); -console.log("Performing " + steps + " steps (Rust WASM) ..."); -time = test(nbodyRS, steps); -console.log("Took " + (time[0] * 1e3 + time[1] / 1e6) + "ms"); +prologue("AssemblyScript WASM", steps); +epilogue(test(nbodyAS, steps)); + +prologue("AssemblyScript ASMJS", steps); +epilogue(test(nbodyAsmJS, steps)); + +prologue("JS", steps); +epilogue(test(nbodyJS, steps)); + +prologue("Rust WASM", steps); +epilogue(test(nbodyRS, steps));