mirror of
https://github.com/exoticorn/microw8.git
synced 2026-01-20 11:16:42 +01:00
port rust tunnel example to zig
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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.
|
||||
@@ -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.
Reference in New Issue
Block a user