blob: b3933b39413761c76aa4911d332a0e69ae050193 [file] [log] [blame] [edit]
(module
(func (export "fac-expr") (param $n i64) (result i64)
(local $i i64)
(local $res i64)
(local.set $i (local.get $n))
(local.set $res (i64.const 1))
(block $done
(loop $loop
(if
(i64.eq (local.get $i) (i64.const 0))
(br $done)
(block
(local.set $res (i64.mul (local.get $i) (local.get $res)))
(local.set $i (i64.sub (local.get $i) (i64.const 1)))
)
)
(br $loop)
)
)
(local.get $res)
)
(func (export "fac-stack") (param $n i64) (result i64)
(local $i i64)
(local $res i64)
(local.get $n)
(local.set $i)
(i64.const 1)
(local.set $res)
(block $done
(loop $loop
(local.get $i)
(i64.const 0)
(i64.eq)
(if
(then (br $done))
(else
(local.get $i)
(local.get $res)
(i64.mul)
(local.set $res)
(local.get $i)
(i64.const 1)
(i64.sub)
(local.set $i)
)
)
(br $loop)
)
)
(local.get $res)
)
(func (export "fac-stack-raw") (param $n i64) (result i64)
(local $i i64)
(local $res i64)
local.get $n
local.set $i
i64.const 1
local.set $res
block $done
loop $loop
local.get $i
i64.const 0
i64.eq
if
br $done
else
local.get $i
local.get $res
i64.mul
local.set $res
local.get $i
i64.const 1
i64.sub
local.set $i
end
br $loop
end
end
local.get $res
)
(func (export "fac-mixed") (param $n i64) (result i64)
(local $i i64)
(local $res i64)
(local.set $i (local.get $n))
(local.set $res (i64.const 1))
(block $done
(loop $loop
(i64.eq (local.get $i) (i64.const 0))
(if
(then (br $done))
(else
(i64.mul (local.get $i) (local.get $res))
(local.set $res)
(i64.sub (local.get $i) (i64.const 1))
(local.set $i)
)
)
(br $loop)
)
)
(local.get $res)
)
(func (export "fac-mixed-raw") (param $n i64) (result i64)
(local $i i64)
(local $res i64)
(local.set $i (local.get $n))
(local.set $res (i64.const 1))
block $done
loop $loop
(i64.eq (local.get $i) (i64.const 0))
if
br $done
else
(i64.mul (local.get $i) (local.get $res))
local.set $res
(i64.sub (local.get $i) (i64.const 1))
local.set $i
end
br $loop
end
end
local.get $res
)
)
(assert_return (invoke "fac-expr" (i64.const 25)) (i64.const 7034535277573963776))
(assert_return (invoke "fac-stack" (i64.const 25)) (i64.const 7034535277573963776))
(assert_return (invoke "fac-mixed" (i64.const 25)) (i64.const 7034535277573963776))
;; from br_table.wast
(module (func $type-arg-num-vs-void
(block (br_table 0 (i32.const 0) (i32.const 1)))
))