diff --git a/examples/game-of-life/assembly/index.ts b/examples/game-of-life/assembly/index.ts index cb628af1..3c595a65 100644 --- a/examples/game-of-life/assembly/index.ts +++ b/examples/game-of-life/assembly/index.ts @@ -1,7 +1,8 @@ // see: https://en.wikipedia.org/wiki/Conway%27s_Game_of_Life -const RGB_ALIVE = 0xE692D3; -const RGB_DEAD = 0x851BA6; +const RGB_ALIVE = 0xE692D3; // LSB must be set +const RGB_DEAD = 0x851BA6; // LSB must not be set +const BIT_ROT = 10; // It's everywhere var w: i32, h: i32, s: i32; @@ -19,8 +20,8 @@ function set(x: u32, y: u32, v: u32): void { /** Sets an output pixel in the range [s, 2*s] while fading it out. */ @inline -function set_fade(x: u32, y: u32, v: u32): void { - var a = max((v >>> 24) - 7, 0); +function rot(x: u32, y: u32, v: u32): void { + var a = max((v >>> 24) - BIT_ROT, 0); set(x, y, (a << 24) | (v & 0x00ffffff)); } @@ -33,7 +34,7 @@ export function init(width: i32, height: i32): void { // Start by filling output with random live cells. for (let y = 0; y < h; ++y) { for (let x = 0; x < w; ++x) { - set(x, y, JSMath.random() > 0.15 ? RGB_DEAD & 0x00ffffff : RGB_ALIVE | 0xff000000); + set(x, y, Math.random() > 0.1 ? RGB_DEAD & 0x00ffffff : RGB_ALIVE | 0xff000000); } } } @@ -53,35 +54,24 @@ export function step(): void { xp1 = x == wm1 ? 0 : x + 1; // Every cell interacts with its eight neighbours, which are the cells that are horizontally, - // vertically, or diagonally adjacent: - let tl = get(xm1, ym1); - let tm = get(x , ym1); - let tr = get(xp1, ym1); - let ml = get(xm1, y ); - let mm = get(x , y ); - let mr = get(xp1, y ); - let bl = get(xm1, yp1); - let bm = get(x , yp1); - let br = get(xp1, yp1); - - // Least significant bit indicates alive or dead, others are ARGB. + // vertically, or diagonally adjacent. Least significant bit indicates alive or dead. let aliveNeighbors = ( - (tl & 1) + (tm & 1) + (tr & 1) + - (ml & 1) + (mr & 1) + - (bl & 1) + (bm & 1) + (br & 1) + (get(xm1, ym1) & 1) + (get(x , ym1) & 1) + (get(xp1, ym1) & 1) + + (get(xm1, y ) & 1) + (get(xp1, y ) & 1) + + (get(xm1, yp1) & 1) + (get(x , yp1) & 1) + (get(xp1, yp1) & 1) ); - let alive = mm & 1; - if (alive) { - // A live cell with 2 or 3 live neighbors lives on to the next generation. - if ((aliveNeighbors & 0b1110) == 0b0010) set_fade(x, y, mm); + let self = get(x, y); + if (self & 1) { + // A live cell with 2 or 3 live neighbors rots on to the next generation. + if ((aliveNeighbors & 0b1110) == 0b0010) rot(x, y, self); // A live cell with fewer than 2 or more than 3 live neighbors dies. else set(x, y, RGB_DEAD | 0xff000000); } else { // A dead cell with exactly 3 live neighbors becomes a live cell. if (aliveNeighbors == 3) set(x, y, RGB_ALIVE | 0xff000000); - // A dead cell with fewer or more than 3 live neighbors remains dead. - else set_fade(x, y, mm); + // A dead cell with fewer or more than 3 live neighbors just rots. + else rot(x, y, self); } } } diff --git a/examples/game-of-life/build/optimized.wasm b/examples/game-of-life/build/optimized.wasm index deb061db..d83782b6 100644 Binary files a/examples/game-of-life/build/optimized.wasm and b/examples/game-of-life/build/optimized.wasm differ diff --git a/examples/game-of-life/build/optimized.wat b/examples/game-of-life/build/optimized.wat index 8efb9954..be3a1b6f 100644 --- a/examples/game-of-life/build/optimized.wat +++ b/examples/game-of-life/build/optimized.wat @@ -1,5 +1,5 @@ (module - (type $iiFv (func (param i32 i32 f64))) + (type $iiv (func (param i32 i32))) (type $F (func (result f64))) (type $v (func)) (import "JSMath" "random" (func $~lib/math/JSMath.random (result f64))) @@ -10,97 +10,97 @@ (export "init" (func $assembly/index/init)) (export "step" (func $assembly/index/step)) (export "memory" (memory $0)) - (func $assembly/index/init (; 1 ;) (type $iiFv) (param $0 i32) (param $1 i32) (param $2 f64) - (local $3 i32) - ;;@ assembly/index.ts:29:2 + (func $assembly/index/init (; 1 ;) (type $iiv) (param $0 i32) (param $1 i32) + (local $2 i32) + ;;@ assembly/index.ts:30:2 (set_global $assembly/index/w - ;;@ assembly/index.ts:29:6 + ;;@ assembly/index.ts:30:6 (get_local $0) ) - ;;@ assembly/index.ts:30:2 + ;;@ assembly/index.ts:31:2 (set_global $assembly/index/h - ;;@ assembly/index.ts:30:6 + ;;@ assembly/index.ts:31:6 (get_local $1) ) - ;;@ assembly/index.ts:31:2 + ;;@ assembly/index.ts:32:2 (set_global $assembly/index/s - ;;@ assembly/index.ts:31:6 + ;;@ assembly/index.ts:32:6 (i32.mul (get_local $0) - ;;@ assembly/index.ts:31:14 + ;;@ assembly/index.ts:32:14 (get_local $1) ) ) - ;;@ assembly/index.ts:34:7 + ;;@ assembly/index.ts:35:7 (set_local $0 - ;;@ assembly/index.ts:34:15 + ;;@ assembly/index.ts:35:15 (i32.const 0) ) (loop $continue|0 (if - ;;@ assembly/index.ts:34:18 + ;;@ assembly/index.ts:35:18 (i32.lt_s (get_local $0) - ;;@ assembly/index.ts:34:22 + ;;@ assembly/index.ts:35:22 (get_global $assembly/index/h) ) (block - ;;@ assembly/index.ts:35:9 + ;;@ assembly/index.ts:36:9 (set_local $1 - ;;@ assembly/index.ts:35:17 + ;;@ assembly/index.ts:36:17 (i32.const 0) ) (loop $continue|1 (if - ;;@ assembly/index.ts:35:20 + ;;@ assembly/index.ts:36:20 (i32.lt_s (get_local $1) - ;;@ assembly/index.ts:35:24 + ;;@ assembly/index.ts:36:24 (get_global $assembly/index/w) ) (block - (set_local $3 - ;;@ assembly/index.ts:36:16 + (set_local $2 + ;;@ assembly/index.ts:37:16 (if (result i32) (f64.gt - ;;@ assembly/index.ts:36:23 + ;;@ assembly/index.ts:37:21 (call $~lib/math/JSMath.random) - ;;@ assembly/index.ts:36:34 - (f64.const 0.15) + ;;@ assembly/index.ts:37:32 + (f64.const 0.1) ) - ;;@ assembly/index.ts:36:41 + ;;@ assembly/index.ts:37:38 (i32.const 8723366) (i32.const -1666349) ) ) - ;;@ assembly/index.ts:17:2 + ;;@ assembly/index.ts:18:2 (i32.store - ;;@ assembly/index.ts:17:13 + ;;@ assembly/index.ts:18:13 (i32.shl (i32.add - ;;@ assembly/index.ts:17:14 + ;;@ assembly/index.ts:18:14 (i32.add (get_global $assembly/index/s) - ;;@ assembly/index.ts:17:18 + ;;@ assembly/index.ts:18:18 (i32.mul (get_local $0) - ;;@ assembly/index.ts:17:22 + ;;@ assembly/index.ts:18:22 (get_global $assembly/index/w) ) ) - ;;@ assembly/index.ts:17:26 + ;;@ assembly/index.ts:18:26 (get_local $1) ) - ;;@ assembly/index.ts:17:32 + ;;@ assembly/index.ts:18:32 (i32.const 2) ) - ;;@ assembly/index.ts:17:35 - (get_local $3) + ;;@ assembly/index.ts:18:35 + (get_local $2) ) - ;;@ assembly/index.ts:35:27 + ;;@ assembly/index.ts:36:27 (set_local $1 (i32.add - ;;@ assembly/index.ts:35:29 + ;;@ assembly/index.ts:36:29 (get_local $1) (i32.const 1) ) @@ -109,10 +109,10 @@ ) ) ) - ;;@ assembly/index.ts:34:25 + ;;@ assembly/index.ts:35:25 (set_local $0 (i32.add - ;;@ assembly/index.ts:34:27 + ;;@ assembly/index.ts:35:27 (get_local $0) (i32.const 1) ) @@ -132,99 +132,82 @@ (local $6 i32) (local $7 i32) (local $8 i32) - (set_local $7 - ;;@ assembly/index.ts:43:12 + (set_local $5 + ;;@ assembly/index.ts:44:12 (i32.sub (get_global $assembly/index/h) - ;;@ assembly/index.ts:43:16 + ;;@ assembly/index.ts:44:16 (i32.const 1) ) ) - (set_local $8 - ;;@ assembly/index.ts:44:12 + (set_local $6 + ;;@ assembly/index.ts:45:12 (i32.sub (get_global $assembly/index/w) - ;;@ assembly/index.ts:44:16 + ;;@ assembly/index.ts:45:16 (i32.const 1) ) ) (loop $continue|0 (if - ;;@ assembly/index.ts:48:18 + ;;@ assembly/index.ts:49:18 (i32.lt_s - (get_local $0) - ;;@ assembly/index.ts:48:22 + (get_local $2) + ;;@ assembly/index.ts:49:22 (get_global $assembly/index/h) ) (block - (set_local $5 - ;;@ assembly/index.ts:49:14 - (if (result i32) - (get_local $0) - ;;@ assembly/index.ts:49:29 - (i32.sub - (get_local $0) - ;;@ assembly/index.ts:49:33 - (i32.const 1) - ) - ;;@ assembly/index.ts:49:23 - (get_local $7) - ) - ) - (set_local $6 + (set_local $7 ;;@ assembly/index.ts:50:14 (if (result i32) - (i32.eq - (get_local $0) - ;;@ assembly/index.ts:50:19 - (get_local $7) - ) - ;;@ assembly/index.ts:50:25 - (i32.const 0) + (get_local $2) ;;@ assembly/index.ts:50:29 - (i32.add - (get_local $0) + (i32.sub + (get_local $2) ;;@ assembly/index.ts:50:33 (i32.const 1) ) + ;;@ assembly/index.ts:50:23 + (get_local $5) ) ) - ;;@ assembly/index.ts:51:9 + (set_local $8 + ;;@ assembly/index.ts:51:14 + (if (result i32) + (i32.eq + (get_local $2) + ;;@ assembly/index.ts:51:19 + (get_local $5) + ) + ;;@ assembly/index.ts:51:25 + (i32.const 0) + ;;@ assembly/index.ts:51:29 + (i32.add + (get_local $2) + ;;@ assembly/index.ts:51:33 + (i32.const 1) + ) + ) + ) + ;;@ assembly/index.ts:52:9 (set_local $1 - ;;@ assembly/index.ts:51:17 + ;;@ assembly/index.ts:52:17 (i32.const 0) ) (loop $continue|1 (if - ;;@ assembly/index.ts:51:20 + ;;@ assembly/index.ts:52:20 (i32.lt_s (get_local $1) - ;;@ assembly/index.ts:51:24 + ;;@ assembly/index.ts:52:24 (get_global $assembly/index/w) ) (block - ;;@ assembly/index.ts:61:6 - (set_local $3 - (i32.load - (i32.shl - (i32.add - (i32.mul - ;;@ assembly/index.ts:61:24 - (get_local $0) - (get_global $assembly/index/w) - ) - ;;@ assembly/index.ts:61:19 - (get_local $1) - ) - (i32.const 2) - ) - ) - ) - ;;@ assembly/index.ts:68:6 - (set_local $2 - ;;@ assembly/index.ts:68:27 + ;;@ assembly/index.ts:58:6 + (set_local $0 + ;;@ assembly/index.ts:58:27 (i32.add - ;;@ assembly/index.ts:69:8 + ;;@ assembly/index.ts:59:8 (i32.add (i32.add (i32.add @@ -236,75 +219,77 @@ (i32.shl (i32.add (i32.mul - ;;@ assembly/index.ts:57:24 - (get_local $5) + (tee_local $0 + ;;@ assembly/index.ts:59:18 + (get_local $7) + ) (get_global $assembly/index/w) ) - (tee_local $2 - ;;@ assembly/index.ts:52:16 + (tee_local $3 + ;;@ assembly/index.ts:53:16 (if (result i32) (get_local $1) - ;;@ assembly/index.ts:52:31 + ;;@ assembly/index.ts:53:31 (i32.sub (get_local $1) - ;;@ assembly/index.ts:52:35 + ;;@ assembly/index.ts:53:35 (i32.const 1) ) - ;;@ assembly/index.ts:52:25 - (get_local $8) + ;;@ assembly/index.ts:53:25 + (get_local $6) ) ) ) (i32.const 2) ) ) - ;;@ assembly/index.ts:69:14 + ;;@ assembly/index.ts:59:25 (i32.const 1) ) - ;;@ assembly/index.ts:69:19 + ;;@ assembly/index.ts:59:30 (i32.and (i32.load (i32.shl (i32.add (i32.mul - ;;@ assembly/index.ts:58:24 - (get_local $5) + ;;@ assembly/index.ts:59:40 + (get_local $0) (get_global $assembly/index/w) ) - ;;@ assembly/index.ts:58:19 + ;;@ assembly/index.ts:59:35 (get_local $1) ) (i32.const 2) ) ) - ;;@ assembly/index.ts:69:25 + ;;@ assembly/index.ts:59:47 (i32.const 1) ) ) - ;;@ assembly/index.ts:69:30 + ;;@ assembly/index.ts:59:52 (i32.and (i32.load (i32.shl (i32.add (i32.mul - ;;@ assembly/index.ts:59:24 - (get_local $5) + ;;@ assembly/index.ts:59:62 + (get_local $0) (get_global $assembly/index/w) ) (tee_local $4 - ;;@ assembly/index.ts:53:16 + ;;@ assembly/index.ts:54:16 (if (result i32) (i32.eq (get_local $1) - ;;@ assembly/index.ts:53:21 - (get_local $8) + ;;@ assembly/index.ts:54:21 + (get_local $6) ) - ;;@ assembly/index.ts:53:27 + ;;@ assembly/index.ts:54:27 (i32.const 0) - ;;@ assembly/index.ts:53:31 + ;;@ assembly/index.ts:54:31 (i32.add (get_local $1) - ;;@ assembly/index.ts:53:35 + ;;@ assembly/index.ts:54:35 (i32.const 1) ) ) @@ -313,135 +298,155 @@ (i32.const 2) ) ) - ;;@ assembly/index.ts:69:36 + ;;@ assembly/index.ts:59:69 (i32.const 1) ) ) - ;;@ assembly/index.ts:70:8 + ;;@ assembly/index.ts:60:8 (i32.and (i32.load (i32.shl (i32.add (i32.mul - ;;@ assembly/index.ts:60:24 - (get_local $0) + (tee_local $0 + ;;@ assembly/index.ts:60:18 + (get_local $2) + ) (get_global $assembly/index/w) ) - ;;@ assembly/index.ts:60:19 - (get_local $2) + ;;@ assembly/index.ts:60:13 + (get_local $3) ) (i32.const 2) ) ) - ;;@ assembly/index.ts:70:14 + ;;@ assembly/index.ts:60:25 (i32.const 1) ) ) - ;;@ assembly/index.ts:70:30 + ;;@ assembly/index.ts:60:52 (i32.and (i32.load (i32.shl (i32.add (i32.mul - ;;@ assembly/index.ts:62:24 + ;;@ assembly/index.ts:60:62 (get_local $0) (get_global $assembly/index/w) ) - ;;@ assembly/index.ts:62:19 + ;;@ assembly/index.ts:60:57 (get_local $4) ) (i32.const 2) ) ) - ;;@ assembly/index.ts:70:36 + ;;@ assembly/index.ts:60:69 (i32.const 1) ) ) - ;;@ assembly/index.ts:71:8 + ;;@ assembly/index.ts:61:8 (i32.and (i32.load (i32.shl (i32.add (i32.mul - ;;@ assembly/index.ts:63:24 - (get_local $6) + (tee_local $0 + ;;@ assembly/index.ts:61:18 + (get_local $8) + ) (get_global $assembly/index/w) ) - ;;@ assembly/index.ts:63:19 - (get_local $2) + ;;@ assembly/index.ts:61:13 + (get_local $3) ) (i32.const 2) ) ) - ;;@ assembly/index.ts:71:14 + ;;@ assembly/index.ts:61:25 (i32.const 1) ) ) - ;;@ assembly/index.ts:71:19 + ;;@ assembly/index.ts:61:30 (i32.and (i32.load (i32.shl (i32.add (i32.mul - ;;@ assembly/index.ts:64:24 - (get_local $6) + ;;@ assembly/index.ts:61:40 + (get_local $0) (get_global $assembly/index/w) ) - ;;@ assembly/index.ts:64:19 + ;;@ assembly/index.ts:61:35 (get_local $1) ) (i32.const 2) ) ) - ;;@ assembly/index.ts:71:25 + ;;@ assembly/index.ts:61:47 (i32.const 1) ) ) - ;;@ assembly/index.ts:71:30 + ;;@ assembly/index.ts:61:52 (i32.and - ;;@ assembly/index.ts:11:9 (i32.load - ;;@ assembly/index.ts:11:19 (i32.shl (i32.add - ;;@ assembly/index.ts:11:20 (i32.mul - ;;@ assembly/index.ts:65:24 - (get_local $6) - ;;@ assembly/index.ts:11:24 + ;;@ assembly/index.ts:61:62 + (get_local $0) (get_global $assembly/index/w) ) - ;;@ assembly/index.ts:65:19 + ;;@ assembly/index.ts:61:57 (get_local $4) ) - ;;@ assembly/index.ts:11:34 (i32.const 2) ) ) - ;;@ assembly/index.ts:71:36 + ;;@ assembly/index.ts:61:69 (i32.const 1) ) ) ) - ;;@ assembly/index.ts:75:6 + ;;@ assembly/index.ts:65:6 (if - ;;@ assembly/index.ts:74:18 + ;;@ assembly/index.ts:65:10 (i32.and - (get_local $3) - ;;@ assembly/index.ts:74:23 + ;;@ assembly/index.ts:64:6 + (tee_local $3 + ;;@ assembly/index.ts:12:9 + (i32.load + ;;@ assembly/index.ts:12:19 + (i32.shl + (i32.add + ;;@ assembly/index.ts:12:20 + (i32.mul + ;;@ assembly/index.ts:64:24 + (get_local $2) + ;;@ assembly/index.ts:12:24 + (get_global $assembly/index/w) + ) + ;;@ assembly/index.ts:64:21 + (get_local $1) + ) + ;;@ assembly/index.ts:12:34 + (i32.const 2) + ) + ) + ) + ;;@ assembly/index.ts:65:17 (i32.const 1) ) - ;;@ assembly/index.ts:77:8 + ;;@ assembly/index.ts:67:8 (if - ;;@ assembly/index.ts:77:12 + ;;@ assembly/index.ts:67:12 (i32.eq (i32.and - ;;@ assembly/index.ts:77:13 - (get_local $2) - ;;@ assembly/index.ts:77:30 + ;;@ assembly/index.ts:67:13 + (get_local $0) + ;;@ assembly/index.ts:67:30 (i32.const 14) ) - ;;@ assembly/index.ts:77:41 + ;;@ assembly/index.ts:67:41 (i32.const 2) ) (i32.store @@ -450,12 +455,12 @@ (i32.add (get_global $assembly/index/s) (i32.mul - ;;@ assembly/index.ts:77:61 - (get_local $0) + ;;@ assembly/index.ts:67:56 + (get_local $2) (get_global $assembly/index/w) ) ) - ;;@ assembly/index.ts:77:58 + ;;@ assembly/index.ts:67:53 (get_local $1) ) (i32.const 2) @@ -467,13 +472,13 @@ (tee_local $3 (i32.sub (i32.shr_u - (tee_local $2 - ;;@ assembly/index.ts:77:64 + (tee_local $0 + ;;@ assembly/index.ts:67:59 (get_local $3) ) (i32.const 24) ) - (i32.const 7) + (i32.const 10) ) ) (tee_local $4 @@ -488,7 +493,7 @@ (i32.const 24) ) (i32.and - (get_local $2) + (get_local $0) (i32.const 16777215) ) ) @@ -499,12 +504,12 @@ (i32.add (get_global $assembly/index/s) (i32.mul - ;;@ assembly/index.ts:79:20 - (get_local $0) + ;;@ assembly/index.ts:69:20 + (get_local $2) (get_global $assembly/index/w) ) ) - ;;@ assembly/index.ts:79:17 + ;;@ assembly/index.ts:69:17 (get_local $1) ) (i32.const 2) @@ -512,12 +517,12 @@ (i32.const -8053850) ) ) - ;;@ assembly/index.ts:82:8 + ;;@ assembly/index.ts:72:8 (if - ;;@ assembly/index.ts:82:12 + ;;@ assembly/index.ts:72:12 (i32.eq - (get_local $2) - ;;@ assembly/index.ts:82:30 + (get_local $0) + ;;@ assembly/index.ts:72:30 (i32.const 3) ) (i32.store @@ -526,88 +531,88 @@ (i32.add (get_global $assembly/index/s) (i32.mul - ;;@ assembly/index.ts:82:40 - (get_local $0) + ;;@ assembly/index.ts:72:40 + (get_local $2) (get_global $assembly/index/w) ) ) - ;;@ assembly/index.ts:82:37 + ;;@ assembly/index.ts:72:37 (get_local $1) ) (i32.const 2) ) (i32.const -1666349) ) - ;;@ assembly/index.ts:17:2 + ;;@ assembly/index.ts:18:2 (i32.store - ;;@ assembly/index.ts:17:13 + ;;@ assembly/index.ts:18:13 (i32.shl (i32.add - ;;@ assembly/index.ts:17:14 + ;;@ assembly/index.ts:18:14 (i32.add (get_global $assembly/index/s) - ;;@ assembly/index.ts:17:18 + ;;@ assembly/index.ts:18:18 (i32.mul - ;;@ assembly/index.ts:84:25 - (get_local $0) - ;;@ assembly/index.ts:17:22 + ;;@ assembly/index.ts:74:20 + (get_local $2) + ;;@ assembly/index.ts:18:22 (get_global $assembly/index/w) ) ) - ;;@ assembly/index.ts:84:22 + ;;@ assembly/index.ts:74:17 (get_local $1) ) - ;;@ assembly/index.ts:17:32 + ;;@ assembly/index.ts:18:32 (i32.const 2) ) - ;;@ assembly/index.ts:24:12 + ;;@ assembly/index.ts:25:12 (i32.or (i32.shl - ;;@ assembly/index.ts:23:2 - (tee_local $2 - ;;@ assembly/index.ts:23:10 + ;;@ assembly/index.ts:24:2 + (tee_local $0 + ;;@ assembly/index.ts:24:10 (select - (tee_local $2 - ;;@ assembly/index.ts:23:19 + (tee_local $0 + ;;@ assembly/index.ts:24:19 (i32.sub (i32.shr_u - ;;@ assembly/index.ts:84:28 + ;;@ assembly/index.ts:74:23 (get_local $3) - ;;@ assembly/index.ts:23:26 + ;;@ assembly/index.ts:24:26 (i32.const 24) ) - ;;@ assembly/index.ts:23:32 - (i32.const 7) + ;;@ assembly/index.ts:24:32 + (i32.const 10) ) ) (tee_local $4 - ;;@ assembly/index.ts:23:35 + ;;@ assembly/index.ts:24:41 (i32.const 0) ) (i32.gt_s - (get_local $2) + (get_local $0) (i32.const 0) ) ) ) - ;;@ assembly/index.ts:24:18 + ;;@ assembly/index.ts:25:18 (i32.const 24) ) - ;;@ assembly/index.ts:24:24 + ;;@ assembly/index.ts:25:24 (i32.and - ;;@ assembly/index.ts:24:25 + ;;@ assembly/index.ts:25:25 (get_local $3) - ;;@ assembly/index.ts:24:29 + ;;@ assembly/index.ts:25:29 (i32.const 16777215) ) ) ) ) ) - ;;@ assembly/index.ts:51:27 + ;;@ assembly/index.ts:52:27 (set_local $1 (i32.add - ;;@ assembly/index.ts:51:29 + ;;@ assembly/index.ts:52:29 (get_local $1) (i32.const 1) ) @@ -616,11 +621,11 @@ ) ) ) - ;;@ assembly/index.ts:48:25 - (set_local $0 + ;;@ assembly/index.ts:49:25 + (set_local $2 (i32.add - ;;@ assembly/index.ts:48:27 - (get_local $0) + ;;@ assembly/index.ts:49:27 + (get_local $2) (i32.const 1) ) ) diff --git a/examples/game-of-life/build/untouched.wat b/examples/game-of-life/build/untouched.wat index e9c37874..b6e9d065 100644 --- a/examples/game-of-life/build/untouched.wat +++ b/examples/game-of-life/build/untouched.wat @@ -1,11 +1,12 @@ (module - (type $iiFv (func (param i32 i32 f64))) + (type $iiv (func (param i32 i32))) (type $F (func (result f64))) (type $v (func)) (import "JSMath" "random" (func $~lib/math/JSMath.random (result f64))) (import "env" "memory" (memory $0 1)) (global $assembly/index/RGB_ALIVE i32 (i32.const 15110867)) (global $assembly/index/RGB_DEAD i32 (i32.const 8723366)) + (global $assembly/index/BIT_ROT i32 (i32.const 10)) (global $assembly/index/w (mut i32) (i32.const 0)) (global $assembly/index/h (mut i32) (i32.const 0)) (global $assembly/index/s (mut i32) (i32.const 0)) @@ -13,127 +14,127 @@ (export "init" (func $assembly/index/init)) (export "step" (func $assembly/index/step)) (export "memory" (memory $0)) - (func $assembly/index/init (; 1 ;) (type $iiFv) (param $0 i32) (param $1 i32) (param $2 f64) + (func $assembly/index/init (; 1 ;) (type $iiv) (param $0 i32) (param $1 i32) + (local $2 i32) (local $3 i32) (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) - ;;@ assembly/index.ts:29:2 + ;;@ assembly/index.ts:30:2 (set_global $assembly/index/w - ;;@ assembly/index.ts:29:6 + ;;@ assembly/index.ts:30:6 (get_local $0) ) - ;;@ assembly/index.ts:30:2 + ;;@ assembly/index.ts:31:2 (set_global $assembly/index/h - ;;@ assembly/index.ts:30:6 + ;;@ assembly/index.ts:31:6 (get_local $1) ) - ;;@ assembly/index.ts:31:2 + ;;@ assembly/index.ts:32:2 (set_global $assembly/index/s - ;;@ assembly/index.ts:31:6 + ;;@ assembly/index.ts:32:6 (i32.mul (get_local $0) - ;;@ assembly/index.ts:31:14 + ;;@ assembly/index.ts:32:14 (get_local $1) ) ) - ;;@ assembly/index.ts:34:2 + ;;@ assembly/index.ts:35:2 (block $break|0 - ;;@ assembly/index.ts:34:7 - (set_local $3 - ;;@ assembly/index.ts:34:15 + ;;@ assembly/index.ts:35:7 + (set_local $2 + ;;@ assembly/index.ts:35:15 (i32.const 0) ) (loop $continue|0 (if - ;;@ assembly/index.ts:34:18 + ;;@ assembly/index.ts:35:18 (i32.lt_s - (get_local $3) - ;;@ assembly/index.ts:34:22 + (get_local $2) + ;;@ assembly/index.ts:35:22 (get_global $assembly/index/h) ) (block (block (block $break|1 - ;;@ assembly/index.ts:35:9 - (set_local $4 - ;;@ assembly/index.ts:35:17 + ;;@ assembly/index.ts:36:9 + (set_local $3 + ;;@ assembly/index.ts:36:17 (i32.const 0) ) (loop $continue|1 (if - ;;@ assembly/index.ts:35:20 + ;;@ assembly/index.ts:36:20 (i32.lt_s - (get_local $4) - ;;@ assembly/index.ts:35:24 + (get_local $3) + ;;@ assembly/index.ts:36:24 (get_global $assembly/index/w) ) (block (block (block $assembly/index/set|inlined.0 - (set_local $5 - ;;@ assembly/index.ts:36:10 - (get_local $4) - ) - (set_local $6 - ;;@ assembly/index.ts:36:13 + (set_local $4 + ;;@ assembly/index.ts:37:10 (get_local $3) ) - (set_local $7 - ;;@ assembly/index.ts:36:16 + (set_local $5 + ;;@ assembly/index.ts:37:13 + (get_local $2) + ) + (set_local $6 + ;;@ assembly/index.ts:37:16 (if (result i32) (f64.gt - ;;@ assembly/index.ts:36:23 + ;;@ assembly/index.ts:37:21 (call $~lib/math/JSMath.random) - ;;@ assembly/index.ts:36:34 - (f64.const 0.15) + ;;@ assembly/index.ts:37:32 + (f64.const 0.1) ) - ;;@ assembly/index.ts:36:41 + ;;@ assembly/index.ts:37:38 (i32.and (i32.const 8723366) - ;;@ assembly/index.ts:36:52 + ;;@ assembly/index.ts:37:49 (i32.const 16777215) ) - ;;@ assembly/index.ts:36:65 + ;;@ assembly/index.ts:37:62 (i32.or (i32.const 15110867) - ;;@ assembly/index.ts:36:77 + ;;@ assembly/index.ts:37:74 (i32.const -16777216) ) ) ) - ;;@ assembly/index.ts:17:2 + ;;@ assembly/index.ts:18:2 (i32.store - ;;@ assembly/index.ts:17:13 + ;;@ assembly/index.ts:18:13 (i32.shl (i32.add - ;;@ assembly/index.ts:17:14 + ;;@ assembly/index.ts:18:14 (i32.add (get_global $assembly/index/s) - ;;@ assembly/index.ts:17:18 + ;;@ assembly/index.ts:18:18 (i32.mul - (get_local $6) - ;;@ assembly/index.ts:17:22 + (get_local $5) + ;;@ assembly/index.ts:18:22 (get_global $assembly/index/w) ) ) - ;;@ assembly/index.ts:17:26 - (get_local $5) + ;;@ assembly/index.ts:18:26 + (get_local $4) ) - ;;@ assembly/index.ts:17:32 + ;;@ assembly/index.ts:18:32 (i32.const 2) ) - ;;@ assembly/index.ts:17:35 - (get_local $7) + ;;@ assembly/index.ts:18:35 + (get_local $6) ) ) ) - ;;@ assembly/index.ts:35:27 - (set_local $4 + ;;@ assembly/index.ts:36:27 + (set_local $3 (i32.add - ;;@ assembly/index.ts:35:29 - (get_local $4) + ;;@ assembly/index.ts:36:29 + (get_local $3) (i32.const 1) ) ) @@ -143,11 +144,11 @@ ) ) ) - ;;@ assembly/index.ts:34:25 - (set_local $3 + ;;@ assembly/index.ts:35:25 + (set_local $2 (i32.add - ;;@ assembly/index.ts:34:27 - (get_local $3) + ;;@ assembly/index.ts:35:27 + (get_local $2) (i32.const 1) ) ) @@ -175,408 +176,140 @@ (local $14 i32) (local $15 i32) (local $16 i32) - (local $17 i32) - (local $18 i32) - (local $19 i32) - (local $20 i32) - (local $21 i32) - (local $22 i32) - (local $23 i32) - (local $24 i32) - (local $25 i32) - ;;@ assembly/index.ts:43:2 + ;;@ assembly/index.ts:44:2 (block (set_local $0 - ;;@ assembly/index.ts:43:12 - (i32.sub - (get_global $assembly/index/h) - ;;@ assembly/index.ts:43:16 - (i32.const 1) - ) - ) - (set_local $1 ;;@ assembly/index.ts:44:12 (i32.sub - (get_global $assembly/index/w) + (get_global $assembly/index/h) ;;@ assembly/index.ts:44:16 (i32.const 1) ) ) + (set_local $1 + ;;@ assembly/index.ts:45:12 + (i32.sub + (get_global $assembly/index/w) + ;;@ assembly/index.ts:45:16 + (i32.const 1) + ) + ) ) - ;;@ assembly/index.ts:48:2 + ;;@ assembly/index.ts:49:2 (block $break|0 - ;;@ assembly/index.ts:48:7 + ;;@ assembly/index.ts:49:7 (set_local $2 - ;;@ assembly/index.ts:48:15 + ;;@ assembly/index.ts:49:15 (i32.const 0) ) (loop $continue|0 (if - ;;@ assembly/index.ts:48:18 + ;;@ assembly/index.ts:49:18 (i32.lt_s (get_local $2) - ;;@ assembly/index.ts:48:22 + ;;@ assembly/index.ts:49:22 (get_global $assembly/index/h) ) (block (block (block (set_local $3 - ;;@ assembly/index.ts:49:14 - (if (result i32) - (i32.eq - (get_local $2) - ;;@ assembly/index.ts:49:19 - (i32.const 0) - ) - ;;@ assembly/index.ts:49:23 - (get_local $0) - ;;@ assembly/index.ts:49:29 - (i32.sub - (get_local $2) - ;;@ assembly/index.ts:49:33 - (i32.const 1) - ) - ) - ) - (set_local $4 ;;@ assembly/index.ts:50:14 (if (result i32) (i32.eq (get_local $2) ;;@ assembly/index.ts:50:19 - (get_local $0) + (i32.const 0) ) - ;;@ assembly/index.ts:50:25 - (i32.const 0) + ;;@ assembly/index.ts:50:23 + (get_local $0) ;;@ assembly/index.ts:50:29 - (i32.add + (i32.sub (get_local $2) ;;@ assembly/index.ts:50:33 (i32.const 1) ) ) ) + (set_local $4 + ;;@ assembly/index.ts:51:14 + (if (result i32) + (i32.eq + (get_local $2) + ;;@ assembly/index.ts:51:19 + (get_local $0) + ) + ;;@ assembly/index.ts:51:25 + (i32.const 0) + ;;@ assembly/index.ts:51:29 + (i32.add + (get_local $2) + ;;@ assembly/index.ts:51:33 + (i32.const 1) + ) + ) + ) ) - ;;@ assembly/index.ts:51:4 + ;;@ assembly/index.ts:52:4 (block $break|1 - ;;@ assembly/index.ts:51:9 + ;;@ assembly/index.ts:52:9 (set_local $5 - ;;@ assembly/index.ts:51:17 + ;;@ assembly/index.ts:52:17 (i32.const 0) ) (loop $continue|1 (if - ;;@ assembly/index.ts:51:20 + ;;@ assembly/index.ts:52:20 (i32.lt_s (get_local $5) - ;;@ assembly/index.ts:51:24 + ;;@ assembly/index.ts:52:24 (get_global $assembly/index/w) ) (block (block (block (set_local $6 - ;;@ assembly/index.ts:52:16 - (if (result i32) - (i32.eq - (get_local $5) - ;;@ assembly/index.ts:52:21 - (i32.const 0) - ) - ;;@ assembly/index.ts:52:25 - (get_local $1) - ;;@ assembly/index.ts:52:31 - (i32.sub - (get_local $5) - ;;@ assembly/index.ts:52:35 - (i32.const 1) - ) - ) - ) - (set_local $7 ;;@ assembly/index.ts:53:16 (if (result i32) (i32.eq (get_local $5) ;;@ assembly/index.ts:53:21 - (get_local $1) + (i32.const 0) ) - ;;@ assembly/index.ts:53:27 - (i32.const 0) + ;;@ assembly/index.ts:53:25 + (get_local $1) ;;@ assembly/index.ts:53:31 - (i32.add + (i32.sub (get_local $5) ;;@ assembly/index.ts:53:35 (i32.const 1) ) ) ) - ) - ;;@ assembly/index.ts:57:6 - (set_local $9 - ;;@ assembly/index.ts:57:15 - (block $assembly/index/get|inlined.0 (result i32) - (set_local $8 - ;;@ assembly/index.ts:57:19 - (get_local $6) - ) - (set_local $9 - ;;@ assembly/index.ts:57:24 - (get_local $3) - ) - (br $assembly/index/get|inlined.0 - (i32.load - (i32.shl - (i32.add - (i32.mul - (get_local $9) - (get_global $assembly/index/w) - ) - (get_local $8) - ) - (i32.const 2) - ) + (set_local $7 + ;;@ assembly/index.ts:54:16 + (if (result i32) + (i32.eq + (get_local $5) + ;;@ assembly/index.ts:54:21 + (get_local $1) + ) + ;;@ assembly/index.ts:54:27 + (i32.const 0) + ;;@ assembly/index.ts:54:31 + (i32.add + (get_local $5) + ;;@ assembly/index.ts:54:35 + (i32.const 1) ) ) ) ) ;;@ assembly/index.ts:58:6 - (set_local $10 - ;;@ assembly/index.ts:58:15 - (block $assembly/index/get|inlined.1 (result i32) - (set_local $8 - ;;@ assembly/index.ts:58:19 - (get_local $5) - ) - (set_local $10 - ;;@ assembly/index.ts:58:24 - (get_local $3) - ) - (br $assembly/index/get|inlined.1 - (i32.load - (i32.shl - (i32.add - (i32.mul - (get_local $10) - (get_global $assembly/index/w) - ) - (get_local $8) - ) - (i32.const 2) - ) - ) - ) - ) - ) - ;;@ assembly/index.ts:59:6 - (set_local $11 - ;;@ assembly/index.ts:59:15 - (block $assembly/index/get|inlined.2 (result i32) - (set_local $8 - ;;@ assembly/index.ts:59:19 - (get_local $7) - ) - (set_local $11 - ;;@ assembly/index.ts:59:24 - (get_local $3) - ) - (br $assembly/index/get|inlined.2 - (i32.load - (i32.shl - (i32.add - (i32.mul - (get_local $11) - (get_global $assembly/index/w) - ) - (get_local $8) - ) - (i32.const 2) - ) - ) - ) - ) - ) - ;;@ assembly/index.ts:60:6 - (set_local $12 - ;;@ assembly/index.ts:60:15 - (block $assembly/index/get|inlined.3 (result i32) - (set_local $8 - ;;@ assembly/index.ts:60:19 - (get_local $6) - ) - (set_local $12 - ;;@ assembly/index.ts:60:24 - (get_local $2) - ) - (br $assembly/index/get|inlined.3 - (i32.load - (i32.shl - (i32.add - (i32.mul - (get_local $12) - (get_global $assembly/index/w) - ) - (get_local $8) - ) - (i32.const 2) - ) - ) - ) - ) - ) - ;;@ assembly/index.ts:61:6 - (set_local $13 - ;;@ assembly/index.ts:61:15 - (block $assembly/index/get|inlined.4 (result i32) - (set_local $8 - ;;@ assembly/index.ts:61:19 - (get_local $5) - ) - (set_local $13 - ;;@ assembly/index.ts:61:24 - (get_local $2) - ) - (br $assembly/index/get|inlined.4 - (i32.load - (i32.shl - (i32.add - (i32.mul - (get_local $13) - (get_global $assembly/index/w) - ) - (get_local $8) - ) - (i32.const 2) - ) - ) - ) - ) - ) - ;;@ assembly/index.ts:62:6 - (set_local $14 - ;;@ assembly/index.ts:62:15 - (block $assembly/index/get|inlined.5 (result i32) - (set_local $8 - ;;@ assembly/index.ts:62:19 - (get_local $7) - ) - (set_local $14 - ;;@ assembly/index.ts:62:24 - (get_local $2) - ) - (br $assembly/index/get|inlined.5 - (i32.load - (i32.shl - (i32.add - (i32.mul - (get_local $14) - (get_global $assembly/index/w) - ) - (get_local $8) - ) - (i32.const 2) - ) - ) - ) - ) - ) - ;;@ assembly/index.ts:63:6 - (set_local $15 - ;;@ assembly/index.ts:63:15 - (block $assembly/index/get|inlined.6 (result i32) - (set_local $8 - ;;@ assembly/index.ts:63:19 - (get_local $6) - ) - (set_local $15 - ;;@ assembly/index.ts:63:24 - (get_local $4) - ) - (br $assembly/index/get|inlined.6 - (i32.load - (i32.shl - (i32.add - (i32.mul - (get_local $15) - (get_global $assembly/index/w) - ) - (get_local $8) - ) - (i32.const 2) - ) - ) - ) - ) - ) - ;;@ assembly/index.ts:64:6 - (set_local $16 - ;;@ assembly/index.ts:64:15 - (block $assembly/index/get|inlined.7 (result i32) - (set_local $8 - ;;@ assembly/index.ts:64:19 - (get_local $5) - ) - (set_local $16 - ;;@ assembly/index.ts:64:24 - (get_local $4) - ) - (br $assembly/index/get|inlined.7 - (i32.load - (i32.shl - (i32.add - (i32.mul - (get_local $16) - (get_global $assembly/index/w) - ) - (get_local $8) - ) - (i32.const 2) - ) - ) - ) - ) - ) - ;;@ assembly/index.ts:65:6 - (set_local $17 - ;;@ assembly/index.ts:65:15 - (block $assembly/index/get|inlined.8 (result i32) - (set_local $8 - ;;@ assembly/index.ts:65:19 - (get_local $7) - ) - (set_local $17 - ;;@ assembly/index.ts:65:24 - (get_local $4) - ) - ;;@ assembly/index.ts:11:35 - (br $assembly/index/get|inlined.8 - ;;@ assembly/index.ts:11:9 - (i32.load - ;;@ assembly/index.ts:11:19 - (i32.shl - (i32.add - ;;@ assembly/index.ts:11:20 - (i32.mul - (get_local $17) - ;;@ assembly/index.ts:11:24 - (get_global $assembly/index/w) - ) - ;;@ assembly/index.ts:11:28 - (get_local $8) - ) - ;;@ assembly/index.ts:11:34 - (i32.const 2) - ) - ) - ) - ) - ) - ;;@ assembly/index.ts:68:6 (set_local $8 - ;;@ assembly/index.ts:68:27 + ;;@ assembly/index.ts:58:27 (i32.add - ;;@ assembly/index.ts:69:8 + ;;@ assembly/index.ts:59:8 (i32.add (i32.add (i32.add @@ -584,143 +317,357 @@ (i32.add (i32.add (i32.and - ;;@ assembly/index.ts:69:9 - (get_local $9) - ;;@ assembly/index.ts:69:14 + ;;@ assembly/index.ts:59:9 + (block $assembly/index/get|inlined.0 (result i32) + (set_local $8 + ;;@ assembly/index.ts:59:13 + (get_local $6) + ) + (set_local $9 + ;;@ assembly/index.ts:59:18 + (get_local $3) + ) + (br $assembly/index/get|inlined.0 + (i32.load + (i32.shl + (i32.add + (i32.mul + (get_local $9) + (get_global $assembly/index/w) + ) + (get_local $8) + ) + (i32.const 2) + ) + ) + ) + ) + ;;@ assembly/index.ts:59:25 (i32.const 1) ) - ;;@ assembly/index.ts:69:19 + ;;@ assembly/index.ts:59:30 (i32.and - ;;@ assembly/index.ts:69:20 - (get_local $10) - ;;@ assembly/index.ts:69:25 + ;;@ assembly/index.ts:59:31 + (block $assembly/index/get|inlined.1 (result i32) + (set_local $9 + ;;@ assembly/index.ts:59:35 + (get_local $5) + ) + (set_local $8 + ;;@ assembly/index.ts:59:40 + (get_local $3) + ) + (br $assembly/index/get|inlined.1 + (i32.load + (i32.shl + (i32.add + (i32.mul + (get_local $8) + (get_global $assembly/index/w) + ) + (get_local $9) + ) + (i32.const 2) + ) + ) + ) + ) + ;;@ assembly/index.ts:59:47 (i32.const 1) ) ) - ;;@ assembly/index.ts:69:30 + ;;@ assembly/index.ts:59:52 (i32.and - ;;@ assembly/index.ts:69:31 - (get_local $11) - ;;@ assembly/index.ts:69:36 + ;;@ assembly/index.ts:59:53 + (block $assembly/index/get|inlined.2 (result i32) + (set_local $8 + ;;@ assembly/index.ts:59:57 + (get_local $7) + ) + (set_local $9 + ;;@ assembly/index.ts:59:62 + (get_local $3) + ) + (br $assembly/index/get|inlined.2 + (i32.load + (i32.shl + (i32.add + (i32.mul + (get_local $9) + (get_global $assembly/index/w) + ) + (get_local $8) + ) + (i32.const 2) + ) + ) + ) + ) + ;;@ assembly/index.ts:59:69 (i32.const 1) ) ) - ;;@ assembly/index.ts:70:8 + ;;@ assembly/index.ts:60:8 (i32.and - ;;@ assembly/index.ts:70:9 - (get_local $12) - ;;@ assembly/index.ts:70:14 + ;;@ assembly/index.ts:60:9 + (block $assembly/index/get|inlined.3 (result i32) + (set_local $9 + ;;@ assembly/index.ts:60:13 + (get_local $6) + ) + (set_local $8 + ;;@ assembly/index.ts:60:18 + (get_local $2) + ) + (br $assembly/index/get|inlined.3 + (i32.load + (i32.shl + (i32.add + (i32.mul + (get_local $8) + (get_global $assembly/index/w) + ) + (get_local $9) + ) + (i32.const 2) + ) + ) + ) + ) + ;;@ assembly/index.ts:60:25 (i32.const 1) ) ) - ;;@ assembly/index.ts:70:30 + ;;@ assembly/index.ts:60:52 (i32.and - ;;@ assembly/index.ts:70:31 - (get_local $14) - ;;@ assembly/index.ts:70:36 + ;;@ assembly/index.ts:60:53 + (block $assembly/index/get|inlined.4 (result i32) + (set_local $8 + ;;@ assembly/index.ts:60:57 + (get_local $7) + ) + (set_local $9 + ;;@ assembly/index.ts:60:62 + (get_local $2) + ) + (br $assembly/index/get|inlined.4 + (i32.load + (i32.shl + (i32.add + (i32.mul + (get_local $9) + (get_global $assembly/index/w) + ) + (get_local $8) + ) + (i32.const 2) + ) + ) + ) + ) + ;;@ assembly/index.ts:60:69 (i32.const 1) ) ) - ;;@ assembly/index.ts:71:8 + ;;@ assembly/index.ts:61:8 (i32.and - ;;@ assembly/index.ts:71:9 - (get_local $15) - ;;@ assembly/index.ts:71:14 + ;;@ assembly/index.ts:61:9 + (block $assembly/index/get|inlined.5 (result i32) + (set_local $9 + ;;@ assembly/index.ts:61:13 + (get_local $6) + ) + (set_local $8 + ;;@ assembly/index.ts:61:18 + (get_local $4) + ) + (br $assembly/index/get|inlined.5 + (i32.load + (i32.shl + (i32.add + (i32.mul + (get_local $8) + (get_global $assembly/index/w) + ) + (get_local $9) + ) + (i32.const 2) + ) + ) + ) + ) + ;;@ assembly/index.ts:61:25 (i32.const 1) ) ) - ;;@ assembly/index.ts:71:19 + ;;@ assembly/index.ts:61:30 (i32.and - ;;@ assembly/index.ts:71:20 - (get_local $16) - ;;@ assembly/index.ts:71:25 + ;;@ assembly/index.ts:61:31 + (block $assembly/index/get|inlined.6 (result i32) + (set_local $8 + ;;@ assembly/index.ts:61:35 + (get_local $5) + ) + (set_local $9 + ;;@ assembly/index.ts:61:40 + (get_local $4) + ) + (br $assembly/index/get|inlined.6 + (i32.load + (i32.shl + (i32.add + (i32.mul + (get_local $9) + (get_global $assembly/index/w) + ) + (get_local $8) + ) + (i32.const 2) + ) + ) + ) + ) + ;;@ assembly/index.ts:61:47 (i32.const 1) ) ) - ;;@ assembly/index.ts:71:30 + ;;@ assembly/index.ts:61:52 (i32.and - ;;@ assembly/index.ts:71:31 - (get_local $17) - ;;@ assembly/index.ts:71:36 + ;;@ assembly/index.ts:61:53 + (block $assembly/index/get|inlined.7 (result i32) + (set_local $9 + ;;@ assembly/index.ts:61:57 + (get_local $7) + ) + (set_local $8 + ;;@ assembly/index.ts:61:62 + (get_local $4) + ) + (br $assembly/index/get|inlined.7 + (i32.load + (i32.shl + (i32.add + (i32.mul + (get_local $8) + (get_global $assembly/index/w) + ) + (get_local $9) + ) + (i32.const 2) + ) + ) + ) + ) + ;;@ assembly/index.ts:61:69 (i32.const 1) ) ) ) - ;;@ assembly/index.ts:74:6 - (set_local $18 - ;;@ assembly/index.ts:74:18 - (i32.and - (get_local $13) - ;;@ assembly/index.ts:74:23 - (i32.const 1) + ;;@ assembly/index.ts:64:6 + (set_local $10 + ;;@ assembly/index.ts:64:17 + (block $assembly/index/get|inlined.8 (result i32) + (set_local $9 + ;;@ assembly/index.ts:64:21 + (get_local $5) + ) + (set_local $10 + ;;@ assembly/index.ts:64:24 + (get_local $2) + ) + ;;@ assembly/index.ts:12:35 + (br $assembly/index/get|inlined.8 + ;;@ assembly/index.ts:12:9 + (i32.load + ;;@ assembly/index.ts:12:19 + (i32.shl + (i32.add + ;;@ assembly/index.ts:12:20 + (i32.mul + (get_local $10) + ;;@ assembly/index.ts:12:24 + (get_global $assembly/index/w) + ) + ;;@ assembly/index.ts:12:28 + (get_local $9) + ) + ;;@ assembly/index.ts:12:34 + (i32.const 2) + ) + ) + ) ) ) - ;;@ assembly/index.ts:75:6 + ;;@ assembly/index.ts:65:6 (if - ;;@ assembly/index.ts:75:10 - (get_local $18) - ;;@ assembly/index.ts:77:8 + ;;@ assembly/index.ts:65:10 + (i32.and + (get_local $10) + ;;@ assembly/index.ts:65:17 + (i32.const 1) + ) + ;;@ assembly/index.ts:67:8 (if - ;;@ assembly/index.ts:77:12 + ;;@ assembly/index.ts:67:12 (i32.eq (i32.and - ;;@ assembly/index.ts:77:13 + ;;@ assembly/index.ts:67:13 (get_local $8) - ;;@ assembly/index.ts:77:30 + ;;@ assembly/index.ts:67:30 (i32.const 14) ) - ;;@ assembly/index.ts:77:41 + ;;@ assembly/index.ts:67:41 (i32.const 2) ) - ;;@ assembly/index.ts:77:49 - (block $assembly/index/set_fade|inlined.0 - (set_local $19 - ;;@ assembly/index.ts:77:58 + ;;@ assembly/index.ts:67:49 + (block $assembly/index/rot|inlined.0 + (set_local $9 + ;;@ assembly/index.ts:67:53 (get_local $5) ) - (set_local $20 - ;;@ assembly/index.ts:77:61 + (set_local $11 + ;;@ assembly/index.ts:67:56 (get_local $2) ) - (set_local $21 - ;;@ assembly/index.ts:77:64 - (get_local $13) + (set_local $12 + ;;@ assembly/index.ts:67:59 + (get_local $10) ) - (set_local $22 + (set_local $13 (select - (tee_local $22 + (tee_local $13 (i32.sub (i32.shr_u - (get_local $21) + (get_local $12) (i32.const 24) ) - (i32.const 7) + (i32.const 10) ) ) - (tee_local $23 + (tee_local $14 (i32.const 0) ) (i32.gt_s - (get_local $22) - (get_local $23) + (get_local $13) + (get_local $14) ) ) ) (block $assembly/index/set|inlined.1 - (set_local $23 - (get_local $19) + (set_local $14 + (get_local $9) ) - (set_local $24 - (get_local $20) + (set_local $15 + (get_local $11) ) - (set_local $25 + (set_local $16 (i32.or (i32.shl - (get_local $22) + (get_local $13) (i32.const 24) ) (i32.and - (get_local $21) + (get_local $12) (i32.const 16777215) ) ) @@ -731,33 +678,33 @@ (i32.add (get_global $assembly/index/s) (i32.mul - (get_local $24) + (get_local $15) (get_global $assembly/index/w) ) ) - (get_local $23) + (get_local $14) ) (i32.const 2) ) - (get_local $25) + (get_local $16) ) ) ) - ;;@ assembly/index.ts:79:13 + ;;@ assembly/index.ts:69:13 (block $assembly/index/set|inlined.2 - (set_local $22 - ;;@ assembly/index.ts:79:17 + (set_local $13 + ;;@ assembly/index.ts:69:17 (get_local $5) ) - (set_local $21 - ;;@ assembly/index.ts:79:20 + (set_local $12 + ;;@ assembly/index.ts:69:20 (get_local $2) ) - (set_local $20 - ;;@ assembly/index.ts:79:23 + (set_local $11 + ;;@ assembly/index.ts:69:23 (i32.or (i32.const 8723366) - ;;@ assembly/index.ts:79:34 + ;;@ assembly/index.ts:69:34 (i32.const -16777216) ) ) @@ -767,41 +714,41 @@ (i32.add (get_global $assembly/index/s) (i32.mul - (get_local $21) + (get_local $12) (get_global $assembly/index/w) ) ) - (get_local $22) + (get_local $13) ) (i32.const 2) ) - (get_local $20) + (get_local $11) ) ) ) - ;;@ assembly/index.ts:82:8 + ;;@ assembly/index.ts:72:8 (if - ;;@ assembly/index.ts:82:12 + ;;@ assembly/index.ts:72:12 (i32.eq (get_local $8) - ;;@ assembly/index.ts:82:30 + ;;@ assembly/index.ts:72:30 (i32.const 3) ) - ;;@ assembly/index.ts:82:33 + ;;@ assembly/index.ts:72:33 (block $assembly/index/set|inlined.3 - (set_local $20 - ;;@ assembly/index.ts:82:37 + (set_local $11 + ;;@ assembly/index.ts:72:37 (get_local $5) ) - (set_local $21 - ;;@ assembly/index.ts:82:40 + (set_local $12 + ;;@ assembly/index.ts:72:40 (get_local $2) ) - (set_local $22 - ;;@ assembly/index.ts:82:43 + (set_local $13 + ;;@ assembly/index.ts:72:43 (i32.or (i32.const 15110867) - ;;@ assembly/index.ts:82:55 + ;;@ assembly/index.ts:72:55 (i32.const -16777216) ) ) @@ -811,119 +758,119 @@ (i32.add (get_global $assembly/index/s) (i32.mul - (get_local $21) + (get_local $12) (get_global $assembly/index/w) ) ) - (get_local $20) + (get_local $11) ) (i32.const 2) ) - (get_local $22) - ) - ) - ;;@ assembly/index.ts:84:13 - (block $assembly/index/set_fade|inlined.1 - (set_local $22 - ;;@ assembly/index.ts:84:22 - (get_local $5) - ) - (set_local $21 - ;;@ assembly/index.ts:84:25 - (get_local $2) - ) - (set_local $20 - ;;@ assembly/index.ts:84:28 (get_local $13) ) - ;;@ assembly/index.ts:23:2 - (set_local $19 - ;;@ assembly/index.ts:23:10 + ) + ;;@ assembly/index.ts:74:13 + (block $assembly/index/rot|inlined.1 + (set_local $13 + ;;@ assembly/index.ts:74:17 + (get_local $5) + ) + (set_local $12 + ;;@ assembly/index.ts:74:20 + (get_local $2) + ) + (set_local $11 + ;;@ assembly/index.ts:74:23 + (get_local $10) + ) + ;;@ assembly/index.ts:24:2 + (set_local $9 + ;;@ assembly/index.ts:24:10 (select - (tee_local $19 - ;;@ assembly/index.ts:23:19 + (tee_local $9 + ;;@ assembly/index.ts:24:19 (i32.sub (i32.shr_u - ;;@ assembly/index.ts:23:20 - (get_local $20) - ;;@ assembly/index.ts:23:26 + ;;@ assembly/index.ts:24:20 + (get_local $11) + ;;@ assembly/index.ts:24:26 (i32.const 24) ) - ;;@ assembly/index.ts:23:32 - (i32.const 7) + ;;@ assembly/index.ts:24:32 + (i32.const 10) ) ) - (tee_local $25 - ;;@ assembly/index.ts:23:35 + (tee_local $16 + ;;@ assembly/index.ts:24:41 (i32.const 0) ) (i32.gt_s - (get_local $19) - (get_local $25) + (get_local $9) + (get_local $16) ) ) ) - ;;@ assembly/index.ts:24:2 + ;;@ assembly/index.ts:25:2 (block $assembly/index/set|inlined.4 - (set_local $25 - ;;@ assembly/index.ts:24:6 - (get_local $22) + (set_local $16 + ;;@ assembly/index.ts:25:6 + (get_local $13) ) - (set_local $24 - ;;@ assembly/index.ts:24:9 - (get_local $21) + (set_local $15 + ;;@ assembly/index.ts:25:9 + (get_local $12) ) - (set_local $23 - ;;@ assembly/index.ts:24:12 + (set_local $14 + ;;@ assembly/index.ts:25:12 (i32.or (i32.shl - ;;@ assembly/index.ts:24:13 - (get_local $19) - ;;@ assembly/index.ts:24:18 + ;;@ assembly/index.ts:25:13 + (get_local $9) + ;;@ assembly/index.ts:25:18 (i32.const 24) ) - ;;@ assembly/index.ts:24:24 + ;;@ assembly/index.ts:25:24 (i32.and - ;;@ assembly/index.ts:24:25 - (get_local $20) - ;;@ assembly/index.ts:24:29 + ;;@ assembly/index.ts:25:25 + (get_local $11) + ;;@ assembly/index.ts:25:29 (i32.const 16777215) ) ) ) - ;;@ assembly/index.ts:17:2 + ;;@ assembly/index.ts:18:2 (i32.store - ;;@ assembly/index.ts:17:13 + ;;@ assembly/index.ts:18:13 (i32.shl (i32.add - ;;@ assembly/index.ts:17:14 + ;;@ assembly/index.ts:18:14 (i32.add (get_global $assembly/index/s) - ;;@ assembly/index.ts:17:18 + ;;@ assembly/index.ts:18:18 (i32.mul - (get_local $24) - ;;@ assembly/index.ts:17:22 + (get_local $15) + ;;@ assembly/index.ts:18:22 (get_global $assembly/index/w) ) ) - ;;@ assembly/index.ts:17:26 - (get_local $25) + ;;@ assembly/index.ts:18:26 + (get_local $16) ) - ;;@ assembly/index.ts:17:32 + ;;@ assembly/index.ts:18:32 (i32.const 2) ) - ;;@ assembly/index.ts:17:35 - (get_local $23) + ;;@ assembly/index.ts:18:35 + (get_local $14) ) ) ) ) ) ) - ;;@ assembly/index.ts:51:27 + ;;@ assembly/index.ts:52:27 (set_local $5 (i32.add - ;;@ assembly/index.ts:51:29 + ;;@ assembly/index.ts:52:29 (get_local $5) (i32.const 1) ) @@ -934,10 +881,10 @@ ) ) ) - ;;@ assembly/index.ts:48:25 + ;;@ assembly/index.ts:49:25 (set_local $2 (i32.add - ;;@ assembly/index.ts:48:27 + ;;@ assembly/index.ts:49:27 (get_local $2) (i32.const 1) ) diff --git a/examples/game-of-life/index.html b/examples/game-of-life/index.html index b341fd11..6f08ea0d 100644 --- a/examples/game-of-life/index.html +++ b/examples/game-of-life/index.html @@ -4,7 +4,8 @@ Conway's Game of Life - AssemblyScript