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));