wasmer/tests/spectests/wasmer.wast
2020-04-03 14:24:40 -07:00

216 lines
12 KiB
Plaintext

;; Wasmer-specific tests.
(module
;; Auxiliary definitions
(type $out-i32 (func (result i32)))
(type $f32-id (func (param f32) (result f32)))
(type $f64-id (func (param f64) (result f64)))
(func $const-i32 (type $out-i32) (i32.const 0x132))
(table funcref
(elem
$const-i32
$nan-canonicalization-f32-func-call-target
$nan-canonicalization-f64-func-call-target
)
)
(memory 1)
;; https://github.com/wasmerio/wasmer/pull/1191
(func (export "call-indirect-from-spilled-stack") (result i32)
(i64.add (i64.const 0) (i64.const 0))
(i64.add (i64.const 0) (i64.const 0))
(i64.add (i64.const 0) (i64.const 0))
(i64.add (i64.const 0) (i64.const 0))
(i64.add (i64.const 0) (i64.const 0))
(i64.add (i64.const 0) (i64.const 0))
(i64.add (i64.const 0) (i64.const 0))
(i64.add (i64.const 0) (i64.const 0))
(i64.add (i64.const 0) (i64.const 0))
(i64.add (i64.const 0x100000000) (i64.const 0))
(i32.wrap_i64)
(call_indirect (type $out-i32))
(return)
)
;; NaN canonicalization tests.
;; Things that are covered by spectests canonicalization (`fabs`, `fneg`, `fcopysign`, `reinterpret`, `const`) won't be duplicated here.
(func (export "nan-canonicalization-f32-add") (param i32) (result i32)
(i32.reinterpret_f32 (f32.add (f32.reinterpret_i32 (get_local 0)) (f32.const 0)))
)
(func (export "nan-canonicalization-f32-sub") (param i32) (result i32)
(i32.reinterpret_f32 (f32.sub (f32.reinterpret_i32 (get_local 0)) (f32.const 0)))
)
(func (export "nan-canonicalization-f32-mul") (param i32) (result i32)
(i32.reinterpret_f32 (f32.mul (f32.reinterpret_i32 (get_local 0)) (f32.const 0)))
)
(func (export "nan-canonicalization-f32-div") (param i32) (result i32)
(i32.reinterpret_f32 (f32.div (f32.reinterpret_i32 (get_local 0)) (f32.const 1)))
)
(func (export "nan-canonicalization-f32-max") (param i32) (result i32)
(i32.reinterpret_f32 (f32.max (f32.reinterpret_i32 (get_local 0)) (f32.const 1)))
)
(func (export "nan-canonicalization-f32-min") (param i32) (result i32)
(i32.reinterpret_f32 (f32.min (f32.reinterpret_i32 (get_local 0)) (f32.const 1)))
)
(func (export "nan-canonicalization-f32-nearest") (param i32) (result i32)
(i32.reinterpret_f32 (f32.nearest (f32.reinterpret_i32 (get_local 0))))
)
(func (export "nan-canonicalization-f32-floor") (param i32) (result i32)
(i32.reinterpret_f32 (f32.floor (f32.reinterpret_i32 (get_local 0))))
)
(func (export "nan-canonicalization-f32-ceil") (param i32) (result i32)
(i32.reinterpret_f32 (f32.ceil (f32.reinterpret_i32 (get_local 0))))
)
(func (export "nan-canonicalization-f32-trunc") (param i32) (result i32)
(i32.reinterpret_f32 (f32.trunc (f32.reinterpret_i32 (get_local 0))))
)
(func (export "nan-canonicalization-f32-sqrt") (param i32) (result i32)
(i32.reinterpret_f32 (f32.sqrt (f32.reinterpret_i32 (get_local 0))))
)
(func (export "nan-canonicalization-f32-mem") (param i32) (result i32)
(f32.store (i32.const 0) (f32.reinterpret_i32 (get_local 0)))
(i32.reinterpret_f32 (f32.load (i32.const 0)))
)
(func (export "nan-canonicalization-f32-mem-cncl") (param i32) (result i32)
(f32.store (i32.const 0) (f32.add (f32.reinterpret_i32 (get_local 0)) (f32.const 0)))
(i32.reinterpret_f32 (f32.load (i32.const 0)))
)
(func (export "nan-canonicalization-f32-local") (param i32) (result i32)
(local f32)
(set_local 1 (f32.reinterpret_i32 (get_local 0)))
(i32.reinterpret_f32 (get_local 1))
)
(func (export "nan-canonicalization-f32-local-cncl") (param i32) (result i32)
(local f32)
(set_local 1 (f32.add (f32.reinterpret_i32 (get_local 0)) (f32.const 0)))
(i32.reinterpret_f32 (get_local 1))
)
(func $nan-canonicalization-f32-func-call-target (param f32) (result f32)
(get_local 0)
)
(func (export "nan-canonicalization-f32-func-call") (param i32) (result i32)
(i32.reinterpret_f32 (call $nan-canonicalization-f32-func-call-target (f32.reinterpret_i32 (get_local 0))))
)
(func (export "nan-canonicalization-f32-func-call-cncl") (param i32) (result i32)
(i32.reinterpret_f32 (call $nan-canonicalization-f32-func-call-target (f32.add (f32.reinterpret_i32 (get_local 0)) (f32.const 0))))
)
(func (export "nan-canonicalization-f32-func-call-indirect") (param i32) (result i32)
(i32.reinterpret_f32 (call_indirect (type $f32-id) (f32.reinterpret_i32 (get_local 0)) (i32.const 1)))
)
(func (export "nan-canonicalization-f32-func-call-indirect-cncl") (param i32) (result i32)
(i32.reinterpret_f32 (call_indirect (type $f32-id) (f32.add (f32.reinterpret_i32 (get_local 0)) (f32.const 0)) (i32.const 1)))
)
(func (export "nan-canonicalization-f64-add") (param i64) (result i64)
(i64.reinterpret_f64 (f64.add (f64.reinterpret_i64 (get_local 0)) (f64.const 0)))
)
(func (export "nan-canonicalization-f64-sub") (param i64) (result i64)
(i64.reinterpret_f64 (f64.sub (f64.reinterpret_i64 (get_local 0)) (f64.const 0)))
)
(func (export "nan-canonicalization-f64-mul") (param i64) (result i64)
(i64.reinterpret_f64 (f64.mul (f64.reinterpret_i64 (get_local 0)) (f64.const 0)))
)
(func (export "nan-canonicalization-f64-div") (param i64) (result i64)
(i64.reinterpret_f64 (f64.div (f64.reinterpret_i64 (get_local 0)) (f64.const 1)))
)
(func (export "nan-canonicalization-f64-max") (param i64) (result i64)
(i64.reinterpret_f64 (f64.max (f64.reinterpret_i64 (get_local 0)) (f64.const 1)))
)
(func (export "nan-canonicalization-f64-min") (param i64) (result i64)
(i64.reinterpret_f64 (f64.min (f64.reinterpret_i64 (get_local 0)) (f64.const 1)))
)
(func (export "nan-canonicalization-f64-nearest") (param i64) (result i64)
(i64.reinterpret_f64 (f64.nearest (f64.reinterpret_i64 (get_local 0))))
)
(func (export "nan-canonicalization-f64-floor") (param i64) (result i64)
(i64.reinterpret_f64 (f64.floor (f64.reinterpret_i64 (get_local 0))))
)
(func (export "nan-canonicalization-f64-ceil") (param i64) (result i64)
(i64.reinterpret_f64 (f64.ceil (f64.reinterpret_i64 (get_local 0))))
)
(func (export "nan-canonicalization-f64-trunc") (param i64) (result i64)
(i64.reinterpret_f64 (f64.trunc (f64.reinterpret_i64 (get_local 0))))
)
(func (export "nan-canonicalization-f64-sqrt") (param i64) (result i64)
(i64.reinterpret_f64 (f64.sqrt (f64.reinterpret_i64 (get_local 0))))
)
(func (export "nan-canonicalization-f64-mem") (param i64) (result i64)
(f64.store (i32.const 0) (f64.reinterpret_i64 (get_local 0)))
(i64.reinterpret_f64 (f64.load (i32.const 0)))
)
(func (export "nan-canonicalization-f64-mem-cncl") (param i64) (result i64)
(f64.store (i32.const 0) (f64.add (f64.reinterpret_i64 (get_local 0)) (f64.const 0)))
(i64.reinterpret_f64 (f64.load (i32.const 0)))
)
(func (export "nan-canonicalization-f64-local") (param i64) (result i64)
(local f64)
(set_local 1 (f64.reinterpret_i64 (get_local 0)))
(i64.reinterpret_f64 (get_local 1))
)
(func (export "nan-canonicalization-f64-local-cncl") (param i64) (result i64)
(local f64)
(set_local 1 (f64.add (f64.reinterpret_i64 (get_local 0)) (f64.const 0)))
(i64.reinterpret_f64 (get_local 1))
)
(func $nan-canonicalization-f64-func-call-target (param f64) (result f64)
(get_local 0)
)
(func (export "nan-canonicalization-f64-func-call") (param i64) (result i64)
(i64.reinterpret_f64 (call $nan-canonicalization-f64-func-call-target (f64.reinterpret_i64 (get_local 0))))
)
(func (export "nan-canonicalization-f64-func-call-cncl") (param i64) (result i64)
(i64.reinterpret_f64 (call $nan-canonicalization-f64-func-call-target (f64.add (f64.reinterpret_i64 (get_local 0)) (f64.const 0))))
)
(func (export "nan-canonicalization-f64-func-call-indirect") (param i64) (result i64)
(i64.reinterpret_f64 (call_indirect (type $f64-id) (f64.reinterpret_i64 (get_local 0)) (i32.const 2)))
)
(func (export "nan-canonicalization-f64-func-call-indirect-cncl") (param i64) (result i64)
(i64.reinterpret_f64 (call_indirect (type $f64-id) (f64.add (f64.reinterpret_i64 (get_local 0)) (f64.const 0)) (i32.const 2)))
)
)
(assert_return (invoke "call-indirect-from-spilled-stack") (i32.const 0x132))
(assert_return (invoke "nan-canonicalization-f32-add" (i32.const 0x7fc00001)) (i32.const 0x7fc00000))
(assert_return (invoke "nan-canonicalization-f32-sub" (i32.const 0x7fc00001)) (i32.const 0x7fc00000))
(assert_return (invoke "nan-canonicalization-f32-mul" (i32.const 0x7fc00001)) (i32.const 0x7fc00000))
(assert_return (invoke "nan-canonicalization-f32-div" (i32.const 0x7fc00001)) (i32.const 0x7fc00000))
(assert_return (invoke "nan-canonicalization-f32-max" (i32.const 0x7fc00001)) (i32.const 0x7fc00000))
(assert_return (invoke "nan-canonicalization-f32-min" (i32.const 0x7fc00001)) (i32.const 0x7fc00000))
(assert_return (invoke "nan-canonicalization-f32-nearest" (i32.const 0x7fc00001)) (i32.const 0x7fc00000))
(assert_return (invoke "nan-canonicalization-f32-floor" (i32.const 0x7fc00001)) (i32.const 0x7fc00000))
(assert_return (invoke "nan-canonicalization-f32-ceil" (i32.const 0x7fc00001)) (i32.const 0x7fc00000))
(assert_return (invoke "nan-canonicalization-f32-trunc" (i32.const 0x7fc00001)) (i32.const 0x7fc00000))
(assert_return (invoke "nan-canonicalization-f32-sqrt" (i32.const 0x7fc00001)) (i32.const 0x7fc00000))
(assert_return (invoke "nan-canonicalization-f32-mem" (i32.const 0x7fc00001)) (i32.const 0x7fc00001))
(assert_return (invoke "nan-canonicalization-f32-mem-cncl" (i32.const 0x7fc00001)) (i32.const 0x7fc00000))
(assert_return (invoke "nan-canonicalization-f32-local" (i32.const 0x7fc00001)) (i32.const 0x7fc00001))
(assert_return (invoke "nan-canonicalization-f32-local-cncl" (i32.const 0x7fc00001)) (i32.const 0x7fc00000))
(assert_return (invoke "nan-canonicalization-f32-func-call" (i32.const 0x7fc00001)) (i32.const 0x7fc00001))
(assert_return (invoke "nan-canonicalization-f32-func-call-cncl" (i32.const 0x7fc00001)) (i32.const 0x7fc00000))
(assert_return (invoke "nan-canonicalization-f32-func-call-indirect" (i32.const 0x7fc00001)) (i32.const 0x7fc00001))
(assert_return (invoke "nan-canonicalization-f32-func-call-indirect-cncl" (i32.const 0x7fc00001)) (i32.const 0x7fc00000))
(assert_return (invoke "nan-canonicalization-f64-add" (i64.const 0x7ff8000000000001)) (i64.const 0x7ff8000000000000))
(assert_return (invoke "nan-canonicalization-f64-sub" (i64.const 0x7ff8000000000001)) (i64.const 0x7ff8000000000000))
(assert_return (invoke "nan-canonicalization-f64-mul" (i64.const 0x7ff8000000000001)) (i64.const 0x7ff8000000000000))
(assert_return (invoke "nan-canonicalization-f64-div" (i64.const 0x7ff8000000000001)) (i64.const 0x7ff8000000000000))
(assert_return (invoke "nan-canonicalization-f64-max" (i64.const 0x7ff8000000000001)) (i64.const 0x7ff8000000000000))
(assert_return (invoke "nan-canonicalization-f64-min" (i64.const 0x7ff8000000000001)) (i64.const 0x7ff8000000000000))
(assert_return (invoke "nan-canonicalization-f64-nearest" (i64.const 0x7ff8000000000001)) (i64.const 0x7ff8000000000000))
(assert_return (invoke "nan-canonicalization-f64-floor" (i64.const 0x7ff8000000000001)) (i64.const 0x7ff8000000000000))
(assert_return (invoke "nan-canonicalization-f64-ceil" (i64.const 0x7ff8000000000001)) (i64.const 0x7ff8000000000000))
(assert_return (invoke "nan-canonicalization-f64-trunc" (i64.const 0x7ff8000000000001)) (i64.const 0x7ff8000000000000))
(assert_return (invoke "nan-canonicalization-f64-sqrt" (i64.const 0x7ff8000000000001)) (i64.const 0x7ff8000000000000))
(assert_return (invoke "nan-canonicalization-f64-mem" (i64.const 0x7ff8000000000001)) (i64.const 0x7ff8000000000001))
(assert_return (invoke "nan-canonicalization-f64-mem-cncl" (i64.const 0x7ff8000000000001)) (i64.const 0x7ff8000000000000))
(assert_return (invoke "nan-canonicalization-f64-local" (i64.const 0x7ff8000000000001)) (i64.const 0x7ff8000000000001))
(assert_return (invoke "nan-canonicalization-f64-local-cncl" (i64.const 0x7ff8000000000001)) (i64.const 0x7ff8000000000000))
(assert_return (invoke "nan-canonicalization-f64-func-call" (i64.const 0x7ff8000000000001)) (i64.const 0x7ff8000000000001))
(assert_return (invoke "nan-canonicalization-f64-func-call-cncl" (i64.const 0x7ff8000000000001)) (i64.const 0x7ff8000000000000))
(assert_return (invoke "nan-canonicalization-f64-func-call-indirect" (i64.const 0x7ff8000000000001)) (i64.const 0x7ff8000000000001))
(assert_return (invoke "nan-canonicalization-f64-func-call-indirect-cncl" (i64.const 0x7ff8000000000001)) (i64.const 0x7ff8000000000000))