Skip to content

Commit 209c875

Browse files
authored
Implement StaticArray<T> (#1122)
1 parent b942d61 commit 209c875

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

66 files changed

+15825
-11050
lines changed

examples/n-body/assembly/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ function Neptune(): Body {
8282

8383
class NBodySystem {
8484

85-
constructor(public bodies: Body[]) {
85+
constructor(public bodies: StaticArray<Body>) {
8686
var px: float = 0.0;
8787
var py: float = 0.0;
8888
var pz: float = 0.0;

examples/n-body/build/index.asm.js

Lines changed: 33 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -58,20 +58,20 @@ function asmFunc(global, env, buffer) {
5858

5959
function assembly_index_NBodySystem_constructor($0) {
6060
var $1 = 0, $2 = 0, $3 = 0.0, $4 = 0.0, $5 = 0.0, $6 = 0.0, $7 = 0;
61-
$7 = HEAP32[($0 + 12 | 0) >> 2];
62-
loop_0 : while (1) {
61+
$7 = HEAP32[(($0 - 16 | 0) + 12 | 0) >> 2] >>> 2 | 0;
62+
for_loop_0 : while (1) {
6363
if (($1 | 0) < ($7 | 0)) {
64-
$2 = HEAP32[(HEAP32[($0 + 4 | 0) >> 2] + ($1 << 2 | 0) | 0) >> 2];
64+
$2 = HEAP32[(($1 << 2 | 0) + $0 | 0) >> 2];
6565
$3 = HEAPF64[($2 + 48 | 0) >> 3];
6666
$4 = $4 + HEAPF64[($2 + 24 | 0) >> 3] * $3;
6767
$5 = $5 + HEAPF64[($2 + 32 | 0) >> 3] * $3;
6868
$6 = $6 + HEAPF64[($2 + 40 | 0) >> 3] * $3;
6969
$1 = $1 + 1 | 0;
70-
continue loop_0;
70+
continue for_loop_0;
7171
}
72-
break loop_0;
72+
break for_loop_0;
7373
};
74-
$1 = HEAP32[HEAP32[($0 + 4 | 0) >> 2] >> 2];
74+
$1 = HEAP32[$0 >> 2];
7575
HEAPF64[($1 + 24 | 0) >> 3] = -$4 / 39.47841760435743;
7676
HEAPF64[($1 + 32 | 0) >> 3] = -$5 / 39.47841760435743;
7777
HEAPF64[($1 + 40 | 0) >> 3] = -$6 / 39.47841760435743;
@@ -93,36 +93,24 @@ function asmFunc(global, env, buffer) {
9393
return $7;
9494
}
9595

96-
function $lib_rt___allocArray() {
97-
var $0 = 0, $1 = 0;
98-
$0 = $lib_rt_stub___alloc(16, 5);
99-
$1 = $lib_rt_stub___alloc(20, 0);
100-
HEAP32[$0 >> 2] = $1;
101-
HEAP32[($0 + 4 | 0) >> 2] = $1;
102-
HEAP32[($0 + 8 | 0) >> 2] = 20;
103-
HEAP32[($0 + 12 | 0) >> 2] = 5;
104-
return $0;
105-
}
106-
10796
function assembly_index_init() {
108-
var $0 = 0, $1 = 0, wasm2js_i32$0 = 0, wasm2js_i32$1 = 0;
109-
$1 = $lib_rt___allocArray();
110-
$0 = HEAP32[($1 + 4 | 0) >> 2];
97+
var $0 = 0, wasm2js_i32$0 = 0, wasm2js_i32$1 = 0;
98+
$0 = $lib_rt_stub___alloc(20, 5);
11199
(wasm2js_i32$0 = $0, wasm2js_i32$1 = assembly_index_Body_constructor(0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 39.47841760435743)), HEAP32[wasm2js_i32$0 >> 2] = wasm2js_i32$1;
112100
(wasm2js_i32$0 = $0, wasm2js_i32$1 = assembly_index_Body_constructor(4.841431442464721, -1.1603200440274284, -.10362204447112311, .606326392995832, 2.81198684491626, -.02521836165988763, .03769367487038949)), HEAP32[(wasm2js_i32$0 + 4 | 0) >> 2] = wasm2js_i32$1;
113101
(wasm2js_i32$0 = $0, wasm2js_i32$1 = assembly_index_Body_constructor(8.34336671824458, 4.124798564124305, -.4035234171143214, -1.0107743461787924, 1.8256623712304119, .008415761376584154, .011286326131968767)), HEAP32[(wasm2js_i32$0 + 8 | 0) >> 2] = wasm2js_i32$1;
114102
(wasm2js_i32$0 = $0, wasm2js_i32$1 = assembly_index_Body_constructor(12.894369562139131, -15.111151401698631, -.22330757889265573, 1.0827910064415354, .8687130181696082, -.010832637401363636, 1.7237240570597112e-03)), HEAP32[(wasm2js_i32$0 + 12 | 0) >> 2] = wasm2js_i32$1;
115103
(wasm2js_i32$0 = $0, wasm2js_i32$1 = assembly_index_Body_constructor(15.379697114850917, -25.919314609987964, .17925877295037118, .979090732243898, .5946989986476762, -.034755955504078104, 2.0336868699246304e-03)), HEAP32[(wasm2js_i32$0 + 16 | 0) >> 2] = wasm2js_i32$1;
116-
assembly_index_system = assembly_index_NBodySystem_constructor($1);
104+
assembly_index_system = assembly_index_NBodySystem_constructor($0);
117105
}
118106

119107
function assembly_index_NBodySystem_advance($0) {
120108
var $1 = 0, $2 = 0.0, $3 = 0.0, $4 = 0, $5 = 0.0, $6 = 0.0, $7 = 0.0, $8 = 0, $9 = 0.0, $10 = 0.0, $11 = 0.0, $12 = 0, $13 = 0, $14 = 0.0, $15 = 0.0, $16 = 0.0, $17 = 0.0;
121109
$12 = HEAP32[$0 >> 2];
122-
$13 = HEAP32[($12 + 12 | 0) >> 2];
123-
loop_0 : while (1) {
110+
$13 = HEAP32[(($12 - 16 | 0) + 12 | 0) >> 2] >>> 2 | 0;
111+
for_loop_0 : while (1) {
124112
if ($4 >>> 0 < $13 >>> 0) {
125-
$0 = HEAP32[(HEAP32[($12 + 4 | 0) >> 2] + ($4 << 2 | 0) | 0) >> 2];
113+
$0 = HEAP32[(($4 << 2 | 0) + $12 | 0) >> 2];
126114
$14 = HEAPF64[$0 >> 3];
127115
$15 = HEAPF64[($0 + 8 | 0) >> 3];
128116
$16 = HEAPF64[($0 + 16 | 0) >> 3];
@@ -131,9 +119,9 @@ function asmFunc(global, env, buffer) {
131119
$7 = HEAPF64[($0 + 40 | 0) >> 3];
132120
$17 = HEAPF64[($0 + 48 | 0) >> 3];
133121
$8 = $4 + 1 | 0;
134-
loop_1 : while (1) {
122+
for_loop_1 : while (1) {
135123
if ($8 >>> 0 < $13 >>> 0) {
136-
$1 = HEAP32[(HEAP32[($12 + 4 | 0) >> 2] + ($8 << 2 | 0) | 0) >> 2];
124+
$1 = HEAP32[(($8 << 2 | 0) + $12 | 0) >> 2];
137125
$2 = $14 - HEAPF64[$1 >> 3];
138126
$9 = $15 - HEAPF64[($1 + 8 | 0) >> 3];
139127
$10 = $16 - HEAPF64[($1 + 16 | 0) >> 3];
@@ -150,9 +138,9 @@ function asmFunc(global, env, buffer) {
150138
HEAPF64[($1 + 32 | 0) >> 3] = HEAPF64[($1 + 32 | 0) >> 3] + $9 * $2;
151139
HEAPF64[($1 + 40 | 0) >> 3] = HEAPF64[($1 + 40 | 0) >> 3] + $10 * $2;
152140
$8 = $8 + 1 | 0;
153-
continue loop_1;
141+
continue for_loop_1;
154142
}
155-
break loop_1;
143+
break for_loop_1;
156144
};
157145
HEAPF64[($0 + 24 | 0) >> 3] = $5;
158146
HEAPF64[($0 + 32 | 0) >> 3] = $6;
@@ -161,19 +149,19 @@ function asmFunc(global, env, buffer) {
161149
HEAPF64[($0 + 8 | 0) >> 3] = HEAPF64[($0 + 8 | 0) >> 3] + .01 * $6;
162150
HEAPF64[($0 + 16 | 0) >> 3] = HEAPF64[($0 + 16 | 0) >> 3] + .01 * $7;
163151
$4 = $4 + 1 | 0;
164-
continue loop_0;
152+
continue for_loop_0;
165153
}
166-
break loop_0;
154+
break for_loop_0;
167155
};
168156
}
169157

170158
function assembly_index_NBodySystem_energy($0) {
171159
var $1 = 0.0, $2 = 0.0, $3 = 0, $4 = 0, $5 = 0, $6 = 0.0, $7 = 0, $8 = 0.0, $9 = 0.0, $10 = 0.0, $11 = 0.0;
172160
$5 = HEAP32[$0 >> 2];
173-
$7 = HEAP32[($5 + 12 | 0) >> 2];
174-
loop_0 : while (1) {
161+
$7 = HEAP32[(($5 - 16 | 0) + 12 | 0) >> 2] >>> 2 | 0;
162+
for_loop_0 : while (1) {
175163
if ($3 >>> 0 < $7 >>> 0) {
176-
$0 = HEAP32[(HEAP32[($5 + 4 | 0) >> 2] + ($3 << 2 | 0) | 0) >> 2];
164+
$0 = HEAP32[(($3 << 2 | 0) + $5 | 0) >> 2];
177165
$9 = HEAPF64[$0 >> 3];
178166
$10 = HEAPF64[($0 + 8 | 0) >> 3];
179167
$11 = HEAPF64[($0 + 16 | 0) >> 3];
@@ -186,9 +174,9 @@ function asmFunc(global, env, buffer) {
186174
$1 = HEAPF64[($0 + 40 | 0) >> 3];
187175
$1 = $6 + .5 * $8 * ($2 + $1 * $1);
188176
$0 = $3 + 1 | 0;
189-
loop_1 : while (1) {
177+
for_loop_1 : while (1) {
190178
if ($0 >>> 0 < $7 >>> 0) {
191-
$4 = HEAP32[(HEAP32[($5 + 4 | 0) >> 2] + ($0 << 2 | 0) | 0) >> 2];
179+
$4 = HEAP32[(($0 << 2 | 0) + $5 | 0) >> 2];
192180
$6 = $1;
193181
$1 = $9 - HEAPF64[$4 >> 3];
194182
$2 = $1 * $1;
@@ -197,14 +185,14 @@ function asmFunc(global, env, buffer) {
197185
$1 = $11 - HEAPF64[($4 + 16 | 0) >> 3];
198186
$1 = $6 - $8 * HEAPF64[($4 + 48 | 0) >> 3] / Math_sqrt($2 + $1 * $1);
199187
$0 = $0 + 1 | 0;
200-
continue loop_1;
188+
continue for_loop_1;
201189
}
202-
break loop_1;
190+
break for_loop_1;
203191
};
204192
$3 = $3 + 1 | 0;
205-
continue loop_0;
193+
continue for_loop_0;
206194
}
207-
break loop_0;
195+
break for_loop_0;
208196
};
209197
return $1;
210198
}
@@ -217,29 +205,29 @@ function asmFunc(global, env, buffer) {
217205
function assembly_index_bench($0) {
218206
$0 = $0 | 0;
219207
var $1 = 0;
220-
loop_0 : while (1) {
208+
for_loop_0 : while (1) {
221209
if ($1 >>> 0 < $0 >>> 0) {
222210
assembly_index_NBodySystem_advance(assembly_index_system);
223211
$1 = $1 + 1 | 0;
224-
continue loop_0;
212+
continue for_loop_0;
225213
}
226-
break loop_0;
214+
break for_loop_0;
227215
};
228216
}
229217

230218
function assembly_index_getBody($0) {
231219
$0 = $0 | 0;
232220
var $1 = 0;
233221
$1 = HEAP32[assembly_index_system >> 2];
234-
if ($0 >>> 0 < HEAP32[($1 + 12 | 0) >> 2] >>> 0) {
235-
$0 = HEAP32[(HEAP32[($1 + 4 | 0) >> 2] + ($0 << 2 | 0) | 0) >> 2]
222+
if ($0 >>> 0 < (HEAP32[(($1 - 16 | 0) + 12 | 0) >> 2] >>> 2 | 0) >>> 0) {
223+
$0 = HEAP32[(($0 << 2 | 0) + $1 | 0) >> 2]
236224
} else {
237225
$0 = 0
238226
}
239227
return $0 | 0;
240228
}
241229

242-
function start() {
230+
function $start() {
243231
$lib_rt_stub_startOffset = 16;
244232
$lib_rt_stub_offset = 16;
245233
}

examples/n-body/build/index.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
"use strict";
2+
// From The Computer Language Benchmarks Game
3+
// http://benchmarksgame.alioth.debian.org
24
Object.defineProperty(exports, "__esModule", { value: true });
3-
require("allocator/arena");
45
const SOLAR_MASS = (4.0 * Math.PI * Math.PI);
56
const DAYS_PER_YEAR = 365.24;
67
class Body {

examples/n-body/build/optimized.wasm

-52 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)