1(module
2  (func $fib (export "fib") (param $n i32) (result i32)
3    (if (result i32)
4      (i32.eq
5        (i32.const 0)
6        (local.get $n)
7      )
8      (then
9        (i32.const 1)
10      )
11      (else
12        (if (result i32)
13          (i32.eq
14            (i32.const 1)
15            (local.get $n)
16          )
17          (then
18            (i32.const 1)
19          )
20          (else
21            (i32.add
22              ;; fib(n - 1)
23              (call $fib
24                (i32.add
25                  (local.get $n)
26                  (i32.const -1)
27                )
28              )
29              ;; fib(n - 2)
30              (call $fib
31                (i32.add
32                  (local.get $n)
33                  (i32.const -2)
34                )
35              )
36            )
37          )
38        )
39      )
40    )
41  )
42)
43
44(assert_return (invoke "fib" (i32.const 0)) (i32.const 1))
45(assert_return (invoke "fib" (i32.const 1)) (i32.const 1))
46(assert_return (invoke "fib" (i32.const 2)) (i32.const 2))
47(assert_return (invoke "fib" (i32.const 3)) (i32.const 3))
48(assert_return (invoke "fib" (i32.const 4)) (i32.const 5))
49(assert_return (invoke "fib" (i32.const 5)) (i32.const 8))
50(assert_return (invoke "fib" (i32.const 6)) (i32.const 13))
51(assert_return (invoke "fib" (i32.const 7)) (i32.const 21))
52(assert_return (invoke "fib" (i32.const 8)) (i32.const 34))
53(assert_return (invoke "fib" (i32.const 9)) (i32.const 55))
54(assert_return (invoke "fib" (i32.const 10)) (i32.const 89))
55
56;; Generated by Rust.
57(module
58  (func $fib (export "fib") (param $p0 i32) (result i32)
59    (local $l1 i32)
60    (local.set $l1
61      (i32.const 1))
62    (block $B0
63      (br_if $B0
64        (i32.lt_u
65          (local.get $p0)
66          (i32.const 2)))
67      (local.set $l1
68        (i32.const 1))
69      (loop $L1
70        (local.set $l1
71          (i32.add
72            (call $fib
73              (i32.add
74                (local.get $p0)
75                (i32.const -1)))
76            (local.get $l1)))
77        (br_if $L1
78          (i32.gt_u
79            (local.tee $p0
80              (i32.add
81                (local.get $p0)
82                (i32.const -2)))
83            (i32.const 1)))))
84    (local.get $l1))
85)
86
87(assert_return (invoke "fib" (i32.const 0)) (i32.const 1))
88(assert_return (invoke "fib" (i32.const 1)) (i32.const 1))
89(assert_return (invoke "fib" (i32.const 2)) (i32.const 2))
90(assert_return (invoke "fib" (i32.const 3)) (i32.const 3))
91(assert_return (invoke "fib" (i32.const 4)) (i32.const 5))
92(assert_return (invoke "fib" (i32.const 5)) (i32.const 8))
93(assert_return (invoke "fib" (i32.const 6)) (i32.const 13))
94(assert_return (invoke "fib" (i32.const 7)) (i32.const 21))
95(assert_return (invoke "fib" (i32.const 8)) (i32.const 34))
96(assert_return (invoke "fib" (i32.const 9)) (i32.const 55))
97(assert_return (invoke "fib" (i32.const 10)) (i32.const 89))
98