blob: 9d76fcd70727efb439fff6ec9fb5936fbe3b0aa6 [file] [edit]
(module
(type $0 (func (param i64) (result i64)))
(export "fac-rec" (func $f0))
(export "fac-rec-named" (func $f1))
(export "fac-iter" (func $f2))
(export "fac-iter-named" (func $f3))
(export "fac-opt" (func $f4))
(func $f0 (param $0 i64) (result i64)
(if (result i64)
(i64.eqz
(local.get $0)
)
(then
(i64.const 1)
)
(else
(i64.mul
(call $f0
(i64.sub
(local.get $0)
(i64.const 1)
)
)
(local.get $0)
)
)
)
)
(func $f1 (param $0 i64) (result i64)
(if (result i64)
(i64.eqz
(local.get $0)
)
(then
(i64.const 1)
)
(else
(i64.mul
(call $f1
(i64.sub
(local.get $0)
(i64.const 1)
)
)
(local.get $0)
)
)
)
)
(func $f2 (param $0 i64) (result i64)
(unreachable)
)
(func $f3 (param $0 i64) (result i64)
(local $1 i64)
(local.set $1
(i64.const 1)
)
(loop $label$3
(if
(i32.eqz
(i64.eqz
(local.get $0)
)
)
(then
(local.set $1
(i64.mul
(local.get $0)
(local.get $1)
)
)
(local.set $0
(i64.sub
(local.get $0)
(i64.const 1)
)
)
(br $label$3)
)
)
)
(local.get $1)
)
(func $f4 (param $0 i64) (result i64)
(local $1 i64)
(local.set $1
(i64.const 1)
)
(if
(i64.ge_s
(local.get $0)
(i64.const 2)
)
(then
(loop $label$3
(local.set $1
(i64.mul
(local.get $0)
(local.get $1)
)
)
(br_if $label$3
(i64.gt_s
(local.tee $0
(i64.sub
(local.get $0)
(i64.const 1)
)
)
(i64.const 1)
)
)
)
)
)
(local.get $1)
)
)