...

Text file src/github.com/tetratelabs/wazero/internal/integration_test/spectest/v2/testdata/simd_splat.wast

Documentation: github.com/tetratelabs/wazero/internal/integration_test/spectest/v2/testdata

     1;; Tests for the *_splat instructions
     2
     3(module
     4  (func (export "i8x16.splat") (param i32) (result v128) (i8x16.splat (local.get 0)))
     5  (func (export "i16x8.splat") (param i32) (result v128) (i16x8.splat (local.get 0)))
     6  (func (export "i32x4.splat") (param i32) (result v128) (i32x4.splat (local.get 0)))
     7  (func (export "f32x4.splat") (param f32) (result v128) (f32x4.splat (local.get 0)))
     8  (func (export "i64x2.splat") (param i64) (result v128) (i64x2.splat (local.get 0)))
     9  (func (export "f64x2.splat") (param f64) (result v128) (f64x2.splat (local.get 0)))
    10)
    11
    12(assert_return (invoke "i8x16.splat" (i32.const 0)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))
    13(assert_return (invoke "i8x16.splat" (i32.const 5)) (v128.const i8x16 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5))
    14(assert_return (invoke "i8x16.splat" (i32.const -5)) (v128.const i8x16 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5 -5))
    15(assert_return (invoke "i8x16.splat" (i32.const 257)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1))
    16(assert_return (invoke "i8x16.splat" (i32.const 0xff)) (v128.const i8x16 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1))
    17(assert_return (invoke "i8x16.splat" (i32.const -128)) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128))
    18(assert_return (invoke "i8x16.splat" (i32.const 127)) (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127))
    19(assert_return (invoke "i8x16.splat" (i32.const -129)) (v128.const i8x16 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127 127))
    20(assert_return (invoke "i8x16.splat" (i32.const 128)) (v128.const i8x16 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128 -128))
    21(assert_return (invoke "i8x16.splat" (i32.const 0xff7f)) (v128.const i8x16 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f))
    22(assert_return (invoke "i8x16.splat" (i32.const 0x80)) (v128.const i8x16 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80))
    23(assert_return (invoke "i8x16.splat" (i32.const 0xAB)) (v128.const i32x4 0xABABABAB 0xABABABAB 0xABABABAB 0xABABABAB))
    24
    25(assert_return (invoke "i16x8.splat" (i32.const 0)) (v128.const i16x8 0 0 0 0 0 0 0 0))
    26(assert_return (invoke "i16x8.splat" (i32.const 5)) (v128.const i16x8 5 5 5 5 5 5 5 5))
    27(assert_return (invoke "i16x8.splat" (i32.const -5)) (v128.const i16x8 -5 -5 -5 -5 -5 -5 -5 -5))
    28(assert_return (invoke "i16x8.splat" (i32.const 65537)) (v128.const i16x8 1 1 1 1 1 1 1 1))
    29(assert_return (invoke "i16x8.splat" (i32.const 0xffff)) (v128.const i16x8 -1 -1 -1 -1 -1 -1 -1 -1))
    30(assert_return (invoke "i16x8.splat" (i32.const -32768)) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768))
    31(assert_return (invoke "i16x8.splat" (i32.const 32767)) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767))
    32(assert_return (invoke "i16x8.splat" (i32.const -32769)) (v128.const i16x8 32767 32767 32767 32767 32767 32767 32767 32767))
    33(assert_return (invoke "i16x8.splat" (i32.const 32768)) (v128.const i16x8 -32768 -32768 -32768 -32768 -32768 -32768 -32768 -32768))
    34(assert_return (invoke "i16x8.splat" (i32.const 0xffff7fff)) (v128.const i16x8 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff))
    35(assert_return (invoke "i16x8.splat" (i32.const 0x8000)) (v128.const i16x8 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000 0x8000))
    36(assert_return (invoke "i16x8.splat" (i32.const 0xABCD)) (v128.const i32x4 0xABCDABCD 0xABCDABCD 0xABCDABCD 0xABCDABCD))
    37(assert_return (invoke "i16x8.splat" (i32.const 012345)) (v128.const i16x8 012_345 012_345 012_345 012_345 012_345 012_345 012_345 012_345))
    38(assert_return (invoke "i16x8.splat" (i32.const 0x01234)) (v128.const i16x8 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234))
    39
    40(assert_return (invoke "i32x4.splat" (i32.const 0)) (v128.const i32x4 0 0 0 0))
    41(assert_return (invoke "i32x4.splat" (i32.const 5)) (v128.const i32x4 5 5 5 5))
    42(assert_return (invoke "i32x4.splat" (i32.const -5)) (v128.const i32x4 -5 -5 -5 -5))
    43(assert_return (invoke "i32x4.splat" (i32.const 0xffffffff)) (v128.const i32x4 -1 -1 -1 -1))
    44(assert_return (invoke "i32x4.splat" (i32.const 4294967295)) (v128.const i32x4 -1 -1 -1 -1))
    45(assert_return (invoke "i32x4.splat" (i32.const -2147483648)) (v128.const i32x4 0x80000000 0x80000000 0x80000000 0x80000000))
    46(assert_return (invoke "i32x4.splat" (i32.const 2147483647)) (v128.const i32x4 0x7fffffff 0x7fffffff 0x7fffffff 0x7fffffff))
    47(assert_return (invoke "i32x4.splat" (i32.const 2147483648)) (v128.const i32x4 0x80000000 0x80000000 0x80000000 0x80000000))
    48(assert_return (invoke "i32x4.splat" (i32.const 01234567890)) (v128.const i32x4 012_3456_7890 012_3456_7890 012_3456_7890 012_3456_7890))
    49(assert_return (invoke "i32x4.splat" (i32.const 0x012345678)) (v128.const i32x4 0x0_1234_5678 0x0_1234_5678 0x0_1234_5678 0x0_1234_5678))
    50
    51(assert_return (invoke "f32x4.splat" (f32.const 0.0)) (v128.const f32x4 0.0 0.0 0.0 0.0))
    52(assert_return (invoke "f32x4.splat" (f32.const 1.1)) (v128.const f32x4 1.1 1.1 1.1 1.1))
    53(assert_return (invoke "f32x4.splat" (f32.const -1.1)) (v128.const f32x4 -1.1 -1.1 -1.1 -1.1))
    54(assert_return (invoke "f32x4.splat" (f32.const 1e38)) (v128.const f32x4 1e38 1e38 1e38 1e38))
    55(assert_return (invoke "f32x4.splat" (f32.const -1e38)) (v128.const f32x4 -1e38 -1e38 -1e38 -1e38))
    56(assert_return (invoke "f32x4.splat" (f32.const 0x1.fffffep127)) (v128.const f32x4 0x1.fffffep127 0x1.fffffep127 0x1.fffffep127 0x1.fffffep127))
    57(assert_return (invoke "f32x4.splat" (f32.const -0x1.fffffep127)) (v128.const f32x4 -0x1.fffffep127 -0x1.fffffep127 -0x1.fffffep127 -0x1.fffffep127))
    58(assert_return (invoke "f32x4.splat" (f32.const 0x1p127)) (v128.const f32x4 0x1p127 0x1p127 0x1p127 0x1p127))
    59(assert_return (invoke "f32x4.splat" (f32.const -0x1p127)) (v128.const f32x4 -0x1p127 -0x1p127 -0x1p127 -0x1p127))
    60(assert_return (invoke "f32x4.splat" (f32.const inf)) (v128.const f32x4 inf inf inf inf))
    61(assert_return (invoke "f32x4.splat" (f32.const -inf)) (v128.const f32x4 -inf -inf -inf -inf))
    62(assert_return (invoke "f32x4.splat" (f32.const nan)) (v128.const f32x4 nan nan nan nan))
    63(assert_return (invoke "f32x4.splat" (f32.const nan:0x1)) (v128.const f32x4 nan:0x1 nan:0x1 nan:0x1 nan:0x1))
    64(assert_return (invoke "f32x4.splat" (f32.const nan:0x7f_ffff)) (v128.const f32x4 nan:0x7f_ffff nan:0x7f_ffff nan:0x7f_ffff nan:0x7f_ffff))
    65(assert_return (invoke "f32x4.splat" (f32.const 0123456789)) (v128.const f32x4 0123456789 0123456789 0123456789 0123456789))
    66(assert_return (invoke "f32x4.splat" (f32.const 0123456789.)) (v128.const f32x4 0123456789. 0123456789. 0123456789. 0123456789.))
    67(assert_return (invoke "f32x4.splat" (f32.const 0x0123456789ABCDEF)) (v128.const f32x4 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF 0x0123456789ABCDEF))
    68(assert_return (invoke "f32x4.splat" (f32.const 0x0123456789ABCDEF.)) (v128.const f32x4 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF. 0x0123456789ABCDEF.))
    69(assert_return (invoke "f32x4.splat" (f32.const 0123456789e019)) (v128.const f32x4 0123456789e019 0123456789e019 0123456789e019 0123456789e019))
    70(assert_return (invoke "f32x4.splat" (f32.const 0123456789.e+019)) (v128.const f32x4 0123456789.e+019 0123456789.e+019 0123456789.e+019 0123456789.e+019))
    71(assert_return (invoke "f32x4.splat" (f32.const 0x0123456789ABCDEFp019)) (v128.const f32x4 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019 0x0123456789ABCDEFp019))
    72(assert_return (invoke "f32x4.splat" (f32.const 0x0123456789ABCDEF.p-019)) (v128.const f32x4 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019 0x0123456789ABCDEF.p-019))
    73
    74(assert_return (invoke "i64x2.splat" (i64.const 0)) (v128.const i64x2 0 0))
    75(assert_return (invoke "i64x2.splat" (i64.const -0)) (v128.const i64x2 0 0))
    76(assert_return (invoke "i64x2.splat" (i64.const 1)) (v128.const i64x2 1 1))
    77(assert_return (invoke "i64x2.splat" (i64.const -1)) (v128.const i64x2 -1 -1))
    78(assert_return (invoke "i64x2.splat" (i64.const -9223372036854775808)) (v128.const i64x2 -9223372036854775808 -9223372036854775808))
    79(assert_return (invoke "i64x2.splat" (i64.const -9223372036854775808)) (v128.const i64x2 9223372036854775808 9223372036854775808))
    80(assert_return (invoke "i64x2.splat" (i64.const 9223372036854775807)) (v128.const i64x2 9223372036854775807 9223372036854775807))
    81(assert_return (invoke "i64x2.splat" (i64.const 18446744073709551615)) (v128.const i64x2 -1 -1))
    82(assert_return (invoke "i64x2.splat" (i64.const 0x7fffffffffffffff)) (v128.const i64x2 0x7fffffffffffffff 0x7fffffffffffffff))
    83(assert_return (invoke "i64x2.splat" (i64.const 0xffffffffffffffff)) (v128.const i64x2 -1 -1))
    84(assert_return (invoke "i64x2.splat" (i64.const -0x8000000000000000)) (v128.const i64x2 -0x8000000000000000 -0x8000000000000000))
    85(assert_return (invoke "i64x2.splat" (i64.const -0x8000000000000000)) (v128.const i64x2 0x8000000000000000 0x8000000000000000))
    86(assert_return (invoke "i64x2.splat" (i64.const 01234567890123456789)) (v128.const i64x2 01_234_567_890_123_456_789 01_234_567_890_123_456_789))
    87(assert_return (invoke "i64x2.splat" (i64.const 0x01234567890ABcdef)) (v128.const i64x2 0x0_1234_5678_90AB_cdef 0x0_1234_5678_90AB_cdef))
    88
    89(assert_return (invoke "f64x2.splat" (f64.const 0.0)) (v128.const f64x2 0.0 0.0))
    90(assert_return (invoke "f64x2.splat" (f64.const -0.0)) (v128.const f64x2 -0.0 -0.0))
    91(assert_return (invoke "f64x2.splat" (f64.const 1.1)) (v128.const f64x2 1.1 1.1))
    92(assert_return (invoke "f64x2.splat" (f64.const -1.1)) (v128.const f64x2 -1.1 -1.1))
    93(assert_return (invoke "f64x2.splat" (f64.const 0x0.0000000000001p-1022)) (v128.const f64x2 0x0.0000000000001p-1022 0x0.0000000000001p-1022))
    94(assert_return (invoke "f64x2.splat" (f64.const -0x0.0000000000001p-1022)) (v128.const f64x2 -0x0.0000000000001p-1022 -0x0.0000000000001p-1022))
    95(assert_return (invoke "f64x2.splat" (f64.const 0x1p-1022)) (v128.const f64x2 0x1p-1022 0x1p-1022))
    96(assert_return (invoke "f64x2.splat" (f64.const -0x1p-1022)) (v128.const f64x2 -0x1p-1022 -0x1p-1022))
    97(assert_return (invoke "f64x2.splat" (f64.const 0x1p-1)) (v128.const f64x2 0x1p-1 0x1p-1))
    98(assert_return (invoke "f64x2.splat" (f64.const -0x1p-1)) (v128.const f64x2 -0x1p-1 -0x1p-1))
    99(assert_return (invoke "f64x2.splat" (f64.const 0x1p+0)) (v128.const f64x2 0x1p+0 0x1p+0))
   100(assert_return (invoke "f64x2.splat" (f64.const -0x1p+0)) (v128.const f64x2 -0x1p+0 -0x1p+0))
   101(assert_return (invoke "f64x2.splat" (f64.const 0x1.921fb54442d18p+2)) (v128.const f64x2 0x1.921fb54442d18p+2 0x1.921fb54442d18p+2))
   102(assert_return (invoke "f64x2.splat" (f64.const -0x1.921fb54442d18p+2)) (v128.const f64x2 -0x1.921fb54442d18p+2 -0x1.921fb54442d18p+2))
   103(assert_return (invoke "f64x2.splat" (f64.const 0x1.fffffffffffffp+1023)) (v128.const f64x2 0x1.fffffffffffffp+1023 0x1.fffffffffffffp+1023))
   104(assert_return (invoke "f64x2.splat" (f64.const -0x1.fffffffffffffp+1023)) (v128.const f64x2 -0x1.fffffffffffffp+1023 -0x1.fffffffffffffp+1023))
   105(assert_return (invoke "f64x2.splat" (f64.const inf)) (v128.const f64x2 inf inf))
   106(assert_return (invoke "f64x2.splat" (f64.const -inf)) (v128.const f64x2 -inf -inf))
   107(assert_return (invoke "f64x2.splat" (f64.const nan)) (v128.const f64x2 nan nan))
   108(assert_return (invoke "f64x2.splat" (f64.const -nan)) (v128.const f64x2 -nan -nan))
   109(assert_return (invoke "f64x2.splat" (f64.const nan:0x4000000000000)) (v128.const f64x2 nan:0x4000000000000 nan:0x4000000000000))
   110(assert_return (invoke "f64x2.splat" (f64.const -nan:0x4000000000000)) (v128.const f64x2 -nan:0x4000000000000 -nan:0x4000000000000))
   111(assert_return (invoke "f64x2.splat" (f64.const 0123456789)) (v128.const f64x2 0123456789 0123456789))
   112(assert_return (invoke "f64x2.splat" (f64.const 0123456789.)) (v128.const f64x2 0123456789. 0123456789.))
   113(assert_return (invoke "f64x2.splat" (f64.const 0x0123456789ABCDEFabcdef)) (v128.const f64x2 0x0123456789ABCDEFabcdef 0x0123456789ABCDEFabcdef))
   114(assert_return (invoke "f64x2.splat" (f64.const 0x0123456789ABCDEFabcdef.)) (v128.const f64x2 0x0123456789ABCDEFabcdef. 0x0123456789ABCDEFabcdef.))
   115(assert_return (invoke "f64x2.splat" (f64.const 0123456789e019)) (v128.const f64x2 0123456789e019 0123456789e019))
   116(assert_return (invoke "f64x2.splat" (f64.const 0123456789e+019)) (v128.const f64x2 0123456789e+019 0123456789e+019))
   117(assert_return (invoke "f64x2.splat" (f64.const 0x0123456789ABCDEFabcdef.p019)) (v128.const f64x2 0x0123456789ABCDEFabcdef.p019 0x0123456789ABCDEFabcdef.p019))
   118(assert_return (invoke "f64x2.splat" (f64.const 0x0123456789ABCDEFabcdef.p-019)) (v128.const f64x2 0x0123456789ABCDEFabcdef.p-019 0x0123456789ABCDEFabcdef.p-019))
   119
   120;; Unknown operator
   121
   122(assert_malformed (module quote "(func (result v128) (v128.splat (i32.const 0)))") "unknown operator")
   123
   124
   125;; Type mismatched
   126
   127(assert_invalid (module (func (result v128) i8x16.splat (i64.const 0))) "type mismatch")
   128(assert_invalid (module (func (result v128) i8x16.splat (f32.const 0.0))) "type mismatch")
   129(assert_invalid (module (func (result v128) i8x16.splat (f64.const 0.0))) "type mismatch")
   130(assert_invalid (module (func (result v128) i16x8.splat (i64.const 1))) "type mismatch")
   131(assert_invalid (module (func (result v128) i16x8.splat (f32.const 1.0))) "type mismatch")
   132(assert_invalid (module (func (result v128) i16x8.splat (f64.const 1.0))) "type mismatch")
   133(assert_invalid (module (func (result v128) i32x4.splat (i64.const 2))) "type mismatch")
   134(assert_invalid (module (func (result v128) i32x4.splat (f32.const 2.0))) "type mismatch")
   135(assert_invalid (module (func (result v128) i32x4.splat (f64.const 2.0))) "type mismatch")
   136(assert_invalid (module (func (result v128) f32x4.splat (i32.const 4))) "type mismatch")
   137(assert_invalid (module (func (result v128) f32x4.splat (i64.const 4))) "type mismatch")
   138(assert_invalid (module (func (result v128) f32x4.splat (f64.const 4.0))) "type mismatch")
   139(assert_invalid (module (func (result v128) i64x2.splat (i32.const 0))) "type mismatch")
   140(assert_invalid (module (func (result v128) i64x2.splat (f64.const 0.0))) "type mismatch")
   141(assert_invalid (module (func (result v128) f64x2.splat (i32.const 0))) "type mismatch")
   142(assert_invalid (module (func (result v128) f64x2.splat (f32.const 0.0))) "type mismatch")
   143
   144
   145;; V128 splat operators as the argument of other SIMD instructions
   146
   147;; v128.store and v128.load
   148(module (memory 1)
   149  (func (export "as-v128_store-operand-1") (param i32) (result v128)
   150    (v128.store (i32.const 0) (i8x16.splat (local.get 0)))
   151    (v128.load (i32.const 0)))
   152  (func (export "as-v128_store-operand-2") (param i32) (result v128)
   153    (v128.store (i32.const 0) (i16x8.splat (local.get 0)))
   154    (v128.load (i32.const 0)))
   155  (func (export "as-v128_store-operand-3") (param i32) (result v128)
   156    (v128.store (i32.const 0) (i32x4.splat (local.get 0)))
   157    (v128.load (i32.const 0)))
   158  (func (export "as-v128_store-operand-4") (param i64) (result v128)
   159    (v128.store (i32.const 0) (i64x2.splat (local.get 0)))
   160    (v128.load (i32.const 0)))
   161  (func (export "as-v128_store-operand-5") (param f64) (result v128)
   162    (v128.store (i32.const 0) (f64x2.splat (local.get 0)))
   163    (v128.load (i32.const 0)))
   164)
   165
   166(assert_return (invoke "as-v128_store-operand-1" (i32.const 1)) (v128.const i8x16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1))
   167(assert_return (invoke "as-v128_store-operand-2" (i32.const 256)) (v128.const i16x8 0x100 0x100 0x100 0x100 0x100 0x100 0x100 0x100))
   168(assert_return (invoke "as-v128_store-operand-3" (i32.const 0xffffffff)) (v128.const i32x4 -1 -1 -1 -1))
   169(assert_return (invoke "as-v128_store-operand-4" (i64.const 1)) (v128.const i64x2 1 1))
   170(assert_return (invoke "as-v128_store-operand-5" (f64.const -0x1p+0)) (v128.const f64x2 -0x1p+0 -0x1p+0))
   171
   172(module
   173  ;; Accessing lane
   174  (func (export "as-i8x16_extract_lane_s-operand-first") (param i32) (result i32)
   175    (i8x16.extract_lane_s 0 (i8x16.splat (local.get 0))))
   176  (func (export "as-i8x16_extract_lane_s-operand-last") (param i32) (result i32)
   177    (i8x16.extract_lane_s 15 (i8x16.splat (local.get 0))))
   178  (func (export "as-i16x8_extract_lane_s-operand-first") (param i32) (result i32)
   179    (i16x8.extract_lane_s 0 (i16x8.splat (local.get 0))))
   180  (func (export "as-i16x8_extract_lane_s-operand-last") (param i32) (result i32)
   181    (i16x8.extract_lane_s 7 (i16x8.splat (local.get 0))))
   182  (func (export "as-i32x4_extract_lane_s-operand-first") (param i32) (result i32)
   183    (i32x4.extract_lane 0 (i32x4.splat (local.get 0))))
   184  (func (export "as-i32x4_extract_lane_s-operand-last") (param i32) (result i32)
   185    (i32x4.extract_lane 3 (i32x4.splat (local.get 0))))
   186  (func (export "as-f32x4_extract_lane_s-operand-first") (param f32) (result f32)
   187    (f32x4.extract_lane 0 (f32x4.splat (local.get 0))))
   188  (func (export "as-f32x4_extract_lane_s-operand-last") (param f32) (result f32)
   189    (f32x4.extract_lane 3 (f32x4.splat (local.get 0))))
   190  (func (export "as-v8x16_swizzle-operands") (param i32) (param i32) (result v128)
   191    (i8x16.swizzle (i8x16.splat (local.get 0)) (i8x16.splat (local.get 1))))
   192  (func (export "as-i64x2_extract_lane-operand-first") (param i64) (result i64)
   193    (i64x2.extract_lane 0 (i64x2.splat (local.get 0))))
   194  (func (export "as-i64x2_extract_lane-operand-last") (param i64) (result i64)
   195    (i64x2.extract_lane 1 (i64x2.splat (local.get 0))))
   196  (func (export "as-f64x2_extract_lane-operand-first") (param f64) (result f64)
   197    (f64x2.extract_lane 0 (f64x2.splat (local.get 0))))
   198  (func (export "as-f64x2_extract_lane-operand-last") (param f64) (result f64)
   199    (f64x2.extract_lane 1 (f64x2.splat (local.get 0))))
   200
   201  ;; Integer arithmetic
   202  (func (export "as-i8x16_add_sub-operands") (param i32 i32 i32) (result v128)
   203    (i8x16.add (i8x16.splat (local.get 0))
   204      (i8x16.sub (i8x16.splat (local.get 1)) (i8x16.splat (local.get 2)))))
   205  (func (export "as-i16x8_add_sub_mul-operands") (param i32 i32 i32 i32) (result v128)
   206    (i16x8.add (i16x8.splat (local.get 0))
   207      (i16x8.sub (i16x8.splat (local.get 1))
   208        (i16x8.mul (i16x8.splat (local.get 2)) (i16x8.splat (local.get 3))))))
   209  (func (export "as-i32x4_add_sub_mul-operands") (param i32 i32 i32 i32) (result v128)
   210    (i32x4.add (i32x4.splat (local.get 0))
   211      (i32x4.sub (i32x4.splat (local.get 1))
   212        (i32x4.mul (i32x4.splat (local.get 2)) (i32x4.splat (local.get 3))))))
   213
   214  (func (export "as-i64x2_add_sub_mul-operands") (param i64 i64 i64 i64) (result v128)
   215    (i64x2.add (i64x2.splat (local.get 0))
   216      (i64x2.sub (i64x2.splat (local.get 1))
   217        (i64x2.mul (i64x2.splat (local.get 2)) (i64x2.splat (local.get 3))))))
   218  (func (export "as-f64x2_add_sub_mul-operands") (param f64 f64 f64 f64) (result v128)
   219    (f64x2.add (f64x2.splat (local.get 0))
   220      (f64x2.sub (f64x2.splat (local.get 1))
   221        (f64x2.mul (f64x2.splat (local.get 2)) (f64x2.splat (local.get 3))))))
   222
   223  ;; Saturating integer arithmetic
   224  (func (export "as-i8x16_add_sat_s-operands") (param i32 i32) (result v128)
   225    (i8x16.add_sat_s (i8x16.splat (local.get 0)) (i8x16.splat (local.get 1))))
   226  (func (export "as-i16x8_add_sat_s-operands") (param i32 i32) (result v128)
   227    (i16x8.add_sat_s (i16x8.splat (local.get 0)) (i16x8.splat (local.get 1))))
   228  (func (export "as-i8x16_sub_sat_u-operands") (param i32 i32) (result v128)
   229    (i8x16.sub_sat_u (i8x16.splat (local.get 0)) (i8x16.splat (local.get 1))))
   230  (func (export "as-i16x8_sub_sat_u-operands") (param i32 i32) (result v128)
   231    (i16x8.sub_sat_u (i16x8.splat (local.get 0)) (i16x8.splat (local.get 1))))
   232
   233  ;; Bit shifts
   234  (func (export "as-i8x16_shr_s-operand") (param i32 i32) (result v128)
   235    (i8x16.shr_s (i8x16.splat (local.get 0)) (local.get 1)))
   236  (func (export "as-i16x8_shr_s-operand") (param i32 i32) (result v128)
   237    (i16x8.shr_s (i16x8.splat (local.get 0)) (local.get 1)))
   238  (func (export "as-i32x4_shr_s-operand") (param i32 i32) (result v128)
   239    (i32x4.shr_s (i32x4.splat (local.get 0)) (local.get 1)))
   240
   241  ;; Bitwise operantions
   242  (func (export "as-v128_and-operands") (param i32 i32) (result v128)
   243    (v128.and (i8x16.splat (local.get 0)) (i8x16.splat (local.get 1))))
   244  (func (export "as-v128_or-operands") (param i32 i32) (result v128)
   245    (v128.or (i16x8.splat (local.get 0)) (i16x8.splat (local.get 1))))
   246  (func (export "as-v128_xor-operands") (param i32 i32) (result v128)
   247    (v128.xor (i32x4.splat (local.get 0)) (i32x4.splat (local.get 1))))
   248
   249  ;; Boolean horizontal reductions
   250  (func (export "as-i8x16_all_true-operand") (param i32) (result i32)
   251    (i8x16.all_true (i8x16.splat (local.get 0))))
   252  (func (export "as-i16x8_all_true-operand") (param i32) (result i32)
   253    (i16x8.all_true (i16x8.splat (local.get 0))))
   254  (func (export "as-i32x4_all_true-operand1") (param i32) (result i32)
   255    (i32x4.all_true (i32x4.splat (local.get 0))))
   256  (func (export "as-i32x4_all_true-operand2") (param i64) (result i32)
   257    (i32x4.all_true (i64x2.splat (local.get 0))))
   258
   259  ;; Comparisons
   260  (func (export "as-i8x16_eq-operands") (param i32 i32) (result v128)
   261    (i8x16.eq (i8x16.splat (local.get 0)) (i8x16.splat (local.get 1))))
   262  (func (export "as-i16x8_eq-operands") (param i32 i32) (result v128)
   263    (i16x8.eq (i16x8.splat (local.get 0)) (i16x8.splat (local.get 1))))
   264  (func (export "as-i32x4_eq-operands1") (param i32 i32) (result v128)
   265    (i32x4.eq (i32x4.splat (local.get 0)) (i32x4.splat (local.get 1))))
   266  (func (export "as-i32x4_eq-operands2") (param i64 i64) (result v128)
   267    (i32x4.eq (i64x2.splat (local.get 0)) (i64x2.splat (local.get 1))))
   268  (func (export "as-f32x4_eq-operands") (param f32 f32) (result v128)
   269    (f32x4.eq (f32x4.splat (local.get 0)) (f32x4.splat (local.get 1))))
   270  (func (export "as-f64x2_eq-operands") (param f64 f64) (result v128)
   271    (f64x2.eq (f64x2.splat (local.get 0)) (f64x2.splat (local.get 1))))
   272
   273  ;; Floating-point sign bit operations
   274  (func (export "as-f32x4_abs-operand") (param f32) (result v128)
   275    (f32x4.abs (f32x4.splat (local.get 0))))
   276
   277  ;; Floating-point min
   278  (func (export "as-f32x4_min-operands") (param f32 f32) (result v128)
   279    (f32x4.min (f32x4.splat (local.get 0)) (f32x4.splat (local.get 1))))
   280
   281  ;; Floating-point arithmetic
   282  (func (export "as-f32x4_div-operands") (param f32 f32) (result v128)
   283    (f32x4.div (f32x4.splat (local.get 0)) (f32x4.splat (local.get 1))))
   284
   285  ;; Conversions
   286  (func (export "as-f32x4_convert_s_i32x4-operand") (param i32) (result v128)
   287    (f32x4.convert_i32x4_s (i32x4.splat (local.get 0))))
   288  (func (export "as-i32x4_trunc_s_f32x4_sat-operand") (param f32) (result v128)
   289    (i32x4.trunc_sat_f32x4_s (f32x4.splat (local.get 0))))
   290)
   291
   292(assert_return (invoke "as-i8x16_extract_lane_s-operand-first" (i32.const 42)) (i32.const 42))
   293(assert_return (invoke "as-i8x16_extract_lane_s-operand-last" (i32.const -42)) (i32.const -42))
   294(assert_return (invoke "as-i16x8_extract_lane_s-operand-first" (i32.const 0xffff7fff)) (i32.const 32767))
   295(assert_return (invoke "as-i16x8_extract_lane_s-operand-last" (i32.const 0x8000)) (i32.const -32768))
   296(assert_return (invoke "as-i32x4_extract_lane_s-operand-first" (i32.const 0x7fffffff)) (i32.const 2147483647))
   297(assert_return (invoke "as-i32x4_extract_lane_s-operand-last" (i32.const 0x80000000)) (i32.const -2147483648))
   298(assert_return (invoke "as-f32x4_extract_lane_s-operand-first" (f32.const 1.5)) (f32.const 1.5))
   299(assert_return (invoke "as-f32x4_extract_lane_s-operand-last" (f32.const -0.25)) (f32.const -0.25))
   300(assert_return (invoke "as-v8x16_swizzle-operands" (i32.const 1) (i32.const -1)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))
   301(assert_return (invoke "as-i64x2_extract_lane-operand-last" (i64.const -42)) (i64.const -42))
   302(assert_return (invoke "as-i64x2_extract_lane-operand-first" (i64.const 42)) (i64.const 42))
   303(assert_return (invoke "as-f64x2_extract_lane-operand-first" (f64.const 1.5)) (f64.const 1.5))
   304(assert_return (invoke "as-f64x2_extract_lane-operand-last" (f64.const -0x1p+0)) (f64.const -0x1p+0))
   305
   306(assert_return (invoke "as-i8x16_add_sub-operands" (i32.const 3) (i32.const 2) (i32.const 1)) (v128.const i8x16 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4))
   307(assert_return (invoke "as-i16x8_add_sub_mul-operands" (i32.const 257) (i32.const 128) (i32.const 16) (i32.const 16)) (v128.const i16x8 129 129 129 129 129 129 129 129))
   308(assert_return (invoke "as-i32x4_add_sub_mul-operands" (i32.const 65535) (i32.const 65537) (i32.const 256) (i32.const 256)) (v128.const i32x4 0x10000 0x10000 0x10000 0x10000))
   309(assert_return (invoke "as-i64x2_add_sub_mul-operands" (i64.const 0x7fffffff) (i64.const 0x1_0000_0001) (i64.const 65536) (i64.const 65536)) (v128.const i64x2 0x8000_0000 0x8000_0000))
   310(assert_return (invoke "as-f64x2_add_sub_mul-operands" (f64.const 0x1p-1) (f64.const 0.75) (f64.const 0x1p-1) (f64.const 0.5)) (v128.const f64x2 0x1p+0 0x1p+0))
   311
   312(assert_return (invoke "as-i8x16_add_sat_s-operands" (i32.const 0x7f) (i32.const 1)) (v128.const i8x16 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f 0x7f))
   313(assert_return (invoke "as-i16x8_add_sat_s-operands" (i32.const 0x7fff) (i32.const 1)) (v128.const i16x8 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff 0x7fff))
   314(assert_return (invoke "as-i8x16_sub_sat_u-operands" (i32.const 0x7f) (i32.const 0xff)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))
   315(assert_return (invoke "as-i16x8_sub_sat_u-operands" (i32.const 0x7fff) (i32.const 0xffff)) (v128.const i16x8 0 0 0 0 0 0 0 0))
   316
   317(assert_return (invoke "as-i8x16_shr_s-operand" (i32.const 0xf0) (i32.const 3)) (v128.const i8x16 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2 -2))
   318(assert_return (invoke "as-i16x8_shr_s-operand" (i32.const 0x100) (i32.const 4)) (v128.const i16x8 16 16 16 16 16 16 16 16))
   319(assert_return (invoke "as-i32x4_shr_s-operand" (i32.const -1) (i32.const 16)) (v128.const i32x4 -1 -1 -1 -1))
   320
   321(assert_return (invoke "as-v128_and-operands" (i32.const 0x11) (i32.const 0xff)) (v128.const i8x16 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17))
   322(assert_return (invoke "as-v128_or-operands" (i32.const 0) (i32.const 0xffff)) (v128.const i16x8 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff))
   323(assert_return (invoke "as-v128_xor-operands" (i32.const 0xf0f0f0f0) (i32.const 0xffffffff)) (v128.const i32x4 0xf0f0f0f 0xf0f0f0f 0xf0f0f0f 0xf0f0f0f))
   324
   325(assert_return (invoke "as-i8x16_all_true-operand" (i32.const 0)) (i32.const 0))
   326(assert_return (invoke "as-i16x8_all_true-operand" (i32.const 0xffff)) (i32.const 1))
   327(assert_return (invoke "as-i32x4_all_true-operand1" (i32.const 0xf0f0f0f0)) (i32.const 1))
   328(assert_return (invoke "as-i32x4_all_true-operand2" (i64.const -1)) (i32.const 1))
   329
   330(assert_return (invoke "as-i8x16_eq-operands" (i32.const 1) (i32.const 2)) (v128.const i8x16 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0))
   331(assert_return (invoke "as-i16x8_eq-operands" (i32.const -1) (i32.const 65535)) (v128.const i16x8 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff 0xffff))
   332(assert_return (invoke "as-i32x4_eq-operands1" (i32.const -1) (i32.const 0xffffffff)) (v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff))
   333(assert_return (invoke "as-f32x4_eq-operands" (f32.const +0.0) (f32.const -0.0)) (v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff))
   334(assert_return (invoke "as-i32x4_eq-operands2" (i64.const 1) (i64.const 2)) (v128.const i64x2 0xffffffff00000000 0xffffffff00000000))
   335(assert_return (invoke "as-f64x2_eq-operands" (f64.const +0.0) (f64.const -0.0)) (v128.const i64x2 -1 -1))
   336
   337(assert_return (invoke "as-f32x4_abs-operand" (f32.const -1.125)) (v128.const f32x4 1.125 1.125 1.125 1.125))
   338(assert_return (invoke "as-f32x4_min-operands" (f32.const 0.25) (f32.const 1e-38)) (v128.const f32x4 1e-38 1e-38 1e-38 1e-38))
   339(assert_return (invoke "as-f32x4_div-operands" (f32.const 1.0) (f32.const 8.0)) (v128.const f32x4 0.125 0.125 0.125 0.125))
   340
   341(assert_return (invoke "as-f32x4_convert_s_i32x4-operand" (i32.const 12345)) (v128.const f32x4 12345.0 12345.0 12345.0 12345.0))
   342(assert_return (invoke "as-i32x4_trunc_s_f32x4_sat-operand" (f32.const 1.1)) (v128.const i32x4 1 1 1 1))
   343
   344
   345;; As the argument of control constructs and WASM instructions
   346
   347(module
   348  (global $g (mut v128) (v128.const f32x4 0.0 0.0 0.0 0.0))
   349  (func (export "as-br-value1") (param i32) (result v128)
   350    (block (result v128) (br 0 (i8x16.splat (local.get 0)))))
   351  (func (export "as-return-value1") (param i32) (result v128)
   352    (return (i16x8.splat (local.get 0))))
   353  (func (export "as-local_set-value1") (param i32) (result v128) (local v128)
   354    (local.set 1 (i32x4.splat (local.get 0)))
   355    (return (local.get 1)))
   356  (func (export "as-global_set-value1") (param f32) (result v128)
   357    (global.set $g (f32x4.splat (local.get 0)))
   358    (return (global.get $g)))
   359  (func (export "as-br-value2") (param i64) (result v128)
   360    (block (result v128) (br 0 (i64x2.splat (local.get 0)))))
   361  (func (export "as-return-value2") (param i64) (result v128)
   362    (return (i64x2.splat (local.get 0))))
   363  (func (export "as-local_set-value2") (param i64) (result v128) (local v128)
   364    (local.set 1 (i64x2.splat (local.get 0)))
   365    (return (local.get 1)))
   366  (func (export "as-global_set-value2") (param f64) (result v128)
   367    (global.set $g (f64x2.splat (local.get 0)))
   368    (return (global.get $g)))
   369)
   370
   371(assert_return (invoke "as-br-value1" (i32.const 0xAB)) (v128.const i8x16 0xAB 0xAB 0xAB 0xAB 0xAB 0xAB 0xAB 0xAB 0xAB 0xAB 0xAB 0xAB 0xAB 0xAB 0xAB 0xAB))
   372(assert_return (invoke "as-return-value1" (i32.const 0xABCD)) (v128.const i16x8 0xABCD 0xABCD 0xABCD 0xABCD 0xABCD 0xABCD 0xABCD 0xABCD))
   373(assert_return (invoke "as-local_set-value1" (i32.const 0x10000)) (v128.const i32x4 0x10000 0x10000 0x10000 0x10000))
   374(assert_return (invoke "as-global_set-value1" (f32.const 1.0)) (v128.const f32x4 1.0 1.0 1.0 1.0))
   375(assert_return (invoke "as-br-value2" (i64.const 0xABCD)) (v128.const i64x2 0xABCD 0xABCD))
   376(assert_return (invoke "as-return-value2" (i64.const 0xABCD)) (v128.const i64x2 0xABCD 0xABCD))
   377(assert_return (invoke "as-local_set-value2" (i64.const 0x10000)) (v128.const i64x2 0x10000 0x10000))
   378(assert_return (invoke "as-global_set-value2" (f64.const 1.0)) (v128.const f64x2 1.0 1.0))
   379
   380
   381;; Test operation with empty argument
   382
   383(assert_invalid
   384  (module
   385    (func $i8x16.splat-arg-empty (result v128)
   386      (i8x16.splat)
   387    )
   388  )
   389  "type mismatch"
   390)
   391(assert_invalid
   392  (module
   393    (func $i16x8.splat-arg-empty (result v128)
   394      (i16x8.splat)
   395    )
   396  )
   397  "type mismatch"
   398)
   399(assert_invalid
   400  (module
   401    (func $i32x4.splat-arg-empty (result v128)
   402      (i32x4.splat)
   403    )
   404  )
   405  "type mismatch"
   406)
   407(assert_invalid
   408  (module
   409    (func $f32x4.splat-arg-empty (result v128)
   410      (f32x4.splat)
   411    )
   412  )
   413  "type mismatch"
   414)
   415(assert_invalid
   416  (module
   417    (func $i64x2.splat-arg-empty (result v128)
   418      (i64x2.splat)
   419    )
   420  )
   421  "type mismatch"
   422)
   423(assert_invalid
   424  (module
   425    (func $f64x2.splat-arg-empty (result v128)
   426      (f64x2.splat)
   427    )
   428  )
   429  "type mismatch"
   430)

View as plain text