(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))