| (module |
| (type $0 (func (param i64) (result i64))) |
| (export "fac-expr" (func $0)) |
| (export "fac-stack" (func $1)) |
| (export "fac-stack-raw" (func $2)) |
| (export "fac-mixed" (func $3)) |
| (export "fac-mixed-raw" (func $4)) |
| (func $0 (; 0 ;) (type $0) (param $var$0 i64) (result i64) |
| (local $var$1 i64) |
| (local $var$2 i64) |
| (local.set $var$1 |
| (local.get $var$0) |
| ) |
| (local.set $var$2 |
| (i64.const 1) |
| ) |
| (block $label$1 |
| (loop $label$2 |
| (if |
| (i64.eq |
| (local.get $var$1) |
| (i64.const 0) |
| ) |
| (br $label$1) |
| (block $label$5 |
| (local.set $var$2 |
| (i64.mul |
| (local.get $var$1) |
| (local.get $var$2) |
| ) |
| ) |
| (local.set $var$1 |
| (i64.sub |
| (local.get $var$1) |
| (i64.const 1) |
| ) |
| ) |
| ) |
| ) |
| (br $label$2) |
| ) |
| ) |
| (local.get $var$2) |
| ) |
| (func $1 (; 1 ;) (type $0) (param $var$0 i64) (result i64) |
| (local $var$1 i64) |
| (local $var$2 i64) |
| (local.set $var$1 |
| (local.get $var$0) |
| ) |
| (local.set $var$2 |
| (i64.const 1) |
| ) |
| (block $label$1 |
| (loop $label$2 |
| (if |
| (i64.eq |
| (local.get $var$1) |
| (i64.const 0) |
| ) |
| (br $label$1) |
| (block |
| (local.set $var$2 |
| (i64.mul |
| (local.get $var$1) |
| (local.get $var$2) |
| ) |
| ) |
| (local.set $var$1 |
| (i64.sub |
| (local.get $var$1) |
| (i64.const 1) |
| ) |
| ) |
| ) |
| ) |
| (br $label$2) |
| ) |
| ) |
| (local.get $var$2) |
| ) |
| (func $2 (; 2 ;) (type $0) (param $var$0 i64) (result i64) |
| (local $var$1 i64) |
| (local $var$2 i64) |
| (local.set $var$1 |
| (local.get $var$0) |
| ) |
| (local.set $var$2 |
| (i64.const 1) |
| ) |
| (block $label$1 |
| (loop $label$2 |
| (if |
| (i64.eq |
| (local.get $var$1) |
| (i64.const 0) |
| ) |
| (br $label$1) |
| (block |
| (local.set $var$2 |
| (i64.mul |
| (local.get $var$1) |
| (local.get $var$2) |
| ) |
| ) |
| (local.set $var$1 |
| (i64.sub |
| (local.get $var$1) |
| (i64.const 1) |
| ) |
| ) |
| ) |
| ) |
| (br $label$2) |
| ) |
| ) |
| (local.get $var$2) |
| ) |
| (func $3 (; 3 ;) (type $0) (param $var$0 i64) (result i64) |
| (local $var$1 i64) |
| (local $var$2 i64) |
| (local.set $var$1 |
| (local.get $var$0) |
| ) |
| (local.set $var$2 |
| (i64.const 1) |
| ) |
| (block $label$1 |
| (loop $label$2 |
| (if |
| (i64.eq |
| (local.get $var$1) |
| (i64.const 0) |
| ) |
| (br $label$1) |
| (block |
| (local.set $var$2 |
| (i64.mul |
| (local.get $var$1) |
| (local.get $var$2) |
| ) |
| ) |
| (local.set $var$1 |
| (i64.sub |
| (local.get $var$1) |
| (i64.const 1) |
| ) |
| ) |
| ) |
| ) |
| (br $label$2) |
| ) |
| ) |
| (local.get $var$2) |
| ) |
| (func $4 (; 4 ;) (type $0) (param $var$0 i64) (result i64) |
| (local $var$1 i64) |
| (local $var$2 i64) |
| (local.set $var$1 |
| (local.get $var$0) |
| ) |
| (local.set $var$2 |
| (i64.const 1) |
| ) |
| (block $label$1 |
| (loop $label$2 |
| (if |
| (i64.eq |
| (local.get $var$1) |
| (i64.const 0) |
| ) |
| (br $label$1) |
| (block |
| (local.set $var$2 |
| (i64.mul |
| (local.get $var$1) |
| (local.get $var$2) |
| ) |
| ) |
| (local.set $var$1 |
| (i64.sub |
| (local.get $var$1) |
| (i64.const 1) |
| ) |
| ) |
| ) |
| ) |
| (br $label$2) |
| ) |
| ) |
| (local.get $var$2) |
| ) |
| ) |
| |
| |
| (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)) |