Skip to content

Instantly share code, notes, and snippets.

@SpaceManiac
Last active May 20, 2025 04:02
Show Gist options
  • Save SpaceManiac/ac1f2036df4d3c6d34d50d21b9be4e87 to your computer and use it in GitHub Desktop.
Save SpaceManiac/ac1f2036df4d3c6d34d50d21b9be4e87 to your computer and use it in GitHub Desktop.
Smaller version of zkEngine's kth_factor example
rustc -C opt-level=3 -C link-arg=-zstack-size=2048 -C panic=abort --target wasm32-unknown-unknown kth_factor.rs
#![no_std]
#![no_main]
#[panic_handler]
fn panic_handler(_: &core::panic::PanicInfo) -> ! {
loop {}
}
#[no_mangle]
pub extern "C" fn kth_factor(n: u32, k: usize) -> u32 {
let mut count = 0;
for i in 1..=n {
if n % i == 0 {
count += 1;
if count == k {
return i;
}
}
}
0xffffffff
}
(module $my_kth_factor.wasm
(type $0 (func (param i32 i32) (result i32)))
(global $__stack_pointer (mut i32) (i32.const 2048))
(global $global$1 i32 (i32.const 2048))
(global $global$2 i32 (i32.const 2048))
(memory $0 1)
(export "memory" (memory $0))
(export "kth_factor" (func $kth_factor))
(export "__data_end" (global $global$1))
(export "__heap_base" (global $global$2))
(func $kth_factor (param $0 i32) (param $1 i32) (result i32)
(local $2 i32)
(local $3 i32)
(local $4 i32)
(local.set $2
(i32.const -1)
)
(block $block
(br_if $block
(i32.eqz
(local.get $0)
)
)
(local.set $3
(i32.const 0)
)
(local.set $4
(i32.const 1)
)
(loop $label
(block $block1
(br_if $block1
(i32.rem_u
(local.get $0)
(local.get $4)
)
)
(br_if $block1
(i32.ne
(local.tee $3
(i32.add
(local.get $3)
(i32.const 1)
)
)
(local.get $1)
)
)
(local.set $2
(local.get $4)
)
(br $block)
)
(br_if $block
(i32.ge_u
(local.get $4)
(local.get $0)
)
)
(br_if $label
(i32.le_u
(local.tee $4
(i32.add
(local.get $4)
(i32.lt_u
(local.get $4)
(local.get $0)
)
)
)
(local.get $0)
)
)
)
)
(local.get $2)
)
;; custom section "producers", size 51
;; features section: mutable-globals, nontrapping-float-to-int, bulk-memory, sign-ext, reference-types, multivalue, bulk-memory-opt
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment