port rust tunnel example to zig

This commit is contained in:
2022-01-02 13:58:56 +01:00
parent 26206a312a
commit 88ee0e1bef
7 changed files with 77 additions and 12 deletions

View File

@@ -1,3 +1,4 @@
rustc --target=wasm32-unknown-unknown --crate-type cdylib -C opt-level="z" -C "link-args=--import-memory --initial-memory=262144 -zstack-size=65536" -o tunnel.wasm tunnel.rs && \
rustc --target=wasm32-unknown-unknown --crate-type cdylib -C opt-level="z" -C "link-args=--import-memory --initial-memory=262144 -zstack-size=90000" -o tunnel.wasm tunnel.rs && \
uw8 filter-exports tunnel.wasm tunnel.wasm && \
wasm-opt -Oz -o tunnel.wasm tunnel.wasm
wasm-opt -Oz --strip-producers -o tunnel.wasm tunnel.wasm && \
uw8 pack -l 9 tunnel.wasm tunnel.uw8

View File

@@ -5,14 +5,14 @@ A nightly rust compiler is needed for the unstable sqrtf32
intrinsic.
Simply compiling with rustc as shown in build.sh results in a
371 byte tunnel.wasm. Using wasm-opt this can be reduced to
260 bytes.
361 byte tunnel.wasm. Using wasm-opt this can be reduced to
255 bytes.
When you disassemble this wasm file using wasm2wat you can see
these globals and exports:
(global (;0;) i32 (i32.const 65536))
(global (;1;) i32 (i32.const 65536))
(global (;0;) i32 (i32.const 90000))
(global (;1;) i32 (i32.const 90000))
(export "__data_end" (global 0))
(export "__heap_base" (global 1))
@@ -23,5 +23,5 @@ referenced by the exports and we can remove them using
'uw8 filter-exports' (preferably before running wasm-opt) which
removes all exports except those used by the MicroW8 platform.
This gives us a 216 byte wasm file. Running this through
This gives us a 211 byte wasm file. Running this through
uw8 pack brings us to the final size of 119 bytes.

View File

@@ -38,16 +38,21 @@ fn ftoi(v: f32) -> i32 {
#[no_mangle]
pub fn upd() {
for i in 0..320 * 240 {
let t = time() * 63 as f32;
let mut i: i32 = 0;
loop {
let t = time() * 63.;
let x = (i % 320 - 160) as f32;
let y = (i / 320 - 120) as f32;
let d = 40000 as f32 / sqrt(x * x + y * y + 1 as f32);
let u = atan2(x, y) * 512f32 / 3.141;
let c = (ftoi(d + t * 2 as f32) ^ ftoi(u + t)) as u8 >> 4;
let d = 40000 as f32 / sqrt(x * x + y * y + 1.);
let u = atan2(x, y) * 512. / 3.141;
let c = (ftoi(d + t * 2.) ^ ftoi(u + t)) as u8 >> 4;
unsafe {
*((120 + i) as *mut u8) = c;
}
i += 1;
if i >= 320*240 {
break;
}
}
}

Binary file not shown.