RosettaCodeData/Task/Fibonacci-sequence/WebAssembly/fibonacci-sequence.wasm

47 lines
1.1 KiB
Plaintext

(func $fibonacci_nth (param $n i32) (result i32)
;;Declare some local registers
(local $i i32)
(local $a i32)
(local $b i32)
;;Handle first 2 numbers as special cases
(if (i32.eq (get_local $n) (i32.const 0))
(return (i32.const 0))
)
(if (i32.eq (get_local $n) (i32.const 1))
(return (i32.const 1))
)
;;Initialize first two values
(set_local $i (i32.const 1))
(set_local $a (i32.const 0))
(set_local $b (i32.const 1))
(block
(loop
;;Add two previous numbers and store the result
local.get $a
local.get $b
i32.add
(set_local $a (get_local $b))
set_local $b
;;Increment counter i by one
(set_local $i
(i32.add
(get_local $i)
(i32.const 1)
)
)
;;Check if loop is done
(br_if 1 (i32.ge_u (get_local $i) (get_local $n)))
(br 0)
)
)
;;The result is stored in b, so push that to the stack
get_local $b
)