mirror of
https://github.com/fluencelabs/wasmer
synced 2025-03-30 06:21:04 +00:00
216 lines
12 KiB
Plaintext
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))
|