wa-lang.org/wazero@v1.0.2/internal/integration_test/spectest/v2/testdata/simd_i32x4_arith2.wast (about)

     1  ;; Tests for i32x4 [min_s, min_u, max_s, max_u, abs] operations.
     2  
     3  (module
     4    (func (export "i32x4.min_s") (param v128 v128) (result v128) (i32x4.min_s (local.get 0) (local.get 1)))
     5    (func (export "i32x4.min_u") (param v128 v128) (result v128) (i32x4.min_u (local.get 0) (local.get 1)))
     6    (func (export "i32x4.max_s") (param v128 v128) (result v128) (i32x4.max_s (local.get 0) (local.get 1)))
     7    (func (export "i32x4.max_u") (param v128 v128) (result v128) (i32x4.max_u (local.get 0) (local.get 1)))
     8    (func (export "i32x4.abs") (param v128) (result v128) (i32x4.abs (local.get 0)))
     9    (func (export "i32x4.min_s_with_const_0") (result v128) (i32x4.min_s (v128.const i32x4 -2147483648 2147483647 1073741824 4294967295) (v128.const i32x4 4294967295 1073741824 2147483647 -2147483648)))
    10    (func (export "i32x4.min_s_with_const_1") (result v128) (i32x4.min_s (v128.const i32x4 0 1 2 3) (v128.const i32x4 3 2 1 0)))
    11    (func (export "i32x4.min_u_with_const_2") (result v128) (i32x4.min_u (v128.const i32x4 -2147483648 2147483647 1073741824 4294967295) (v128.const i32x4 4294967295 1073741824 2147483647 -2147483648)))
    12    (func (export "i32x4.min_u_with_const_3") (result v128) (i32x4.min_u (v128.const i32x4 0 1 2 3) (v128.const i32x4 3 2 1 0)))
    13    (func (export "i32x4.max_s_with_const_4") (result v128) (i32x4.max_s (v128.const i32x4 -2147483648 2147483647 1073741824 4294967295) (v128.const i32x4 4294967295 1073741824 2147483647 -2147483648)))
    14    (func (export "i32x4.max_s_with_const_5") (result v128) (i32x4.max_s (v128.const i32x4 0 1 2 3) (v128.const i32x4 3 2 1 0)))
    15    (func (export "i32x4.max_u_with_const_6") (result v128) (i32x4.max_u (v128.const i32x4 -2147483648 2147483647 1073741824 4294967295) (v128.const i32x4 4294967295 1073741824 2147483647 -2147483648)))
    16    (func (export "i32x4.max_u_with_const_7") (result v128) (i32x4.max_u (v128.const i32x4 0 1 2 3) (v128.const i32x4 3 2 1 0)))
    17    (func (export "i32x4.abs_with_const_8") (result v128) (i32x4.abs (v128.const i32x4 -2147483648 2147483647 1073741824 4294967295)))
    18    (func (export "i32x4.min_s_with_const_9") (param v128) (result v128) (i32x4.min_s (local.get 0) (v128.const i32x4 -2147483648 2147483647 1073741824 4294967295)))
    19    (func (export "i32x4.min_s_with_const_10") (param v128) (result v128) (i32x4.min_s (local.get 0) (v128.const i32x4 0 1 2 3)))
    20    (func (export "i32x4.min_u_with_const_11") (param v128) (result v128) (i32x4.min_u (local.get 0) (v128.const i32x4 -2147483648 2147483647 1073741824 4294967295)))
    21    (func (export "i32x4.min_u_with_const_12") (param v128) (result v128) (i32x4.min_u (local.get 0) (v128.const i32x4 0 1 2 3)))
    22    (func (export "i32x4.max_s_with_const_13") (param v128) (result v128) (i32x4.max_s (local.get 0) (v128.const i32x4 -2147483648 2147483647 1073741824 4294967295)))
    23    (func (export "i32x4.max_s_with_const_14") (param v128) (result v128) (i32x4.max_s (local.get 0) (v128.const i32x4 0 1 2 3)))
    24    (func (export "i32x4.max_u_with_const_15") (param v128) (result v128) (i32x4.max_u (local.get 0) (v128.const i32x4 -2147483648 2147483647 1073741824 4294967295)))
    25    (func (export "i32x4.max_u_with_const_16") (param v128) (result v128) (i32x4.max_u (local.get 0) (v128.const i32x4 0 1 2 3)))
    26  )
    27  
    28  (assert_return (invoke "i32x4.min_s" (v128.const i32x4 0 0 0 0)
    29                                       (v128.const i32x4 0 0 0 0))
    30                                       (v128.const i32x4 0 0 0 0))
    31  (assert_return (invoke "i32x4.min_s" (v128.const i32x4 0 0 0 0)
    32                                       (v128.const i32x4 -1 -1 -1 -1))
    33                                       (v128.const i32x4 -1 -1 -1 -1))
    34  (assert_return (invoke "i32x4.min_s" (v128.const i32x4 0 0 -1 -1)
    35                                       (v128.const i32x4 0 -1 0 -1))
    36                                       (v128.const i32x4 0 -1 -1 -1))
    37  (assert_return (invoke "i32x4.min_s" (v128.const i32x4 0 0 0 0)
    38                                       (v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff))
    39                                       (v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff))
    40  (assert_return (invoke "i32x4.min_s" (v128.const i32x4 1 1 1 1)
    41                                       (v128.const i32x4 1 1 1 1))
    42                                       (v128.const i32x4 1 1 1 1))
    43  (assert_return (invoke "i32x4.min_s" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)
    44                                       (v128.const i32x4 1 1 1 1))
    45                                       (v128.const i32x4 4294967295 4294967295 4294967295 4294967295))
    46  (assert_return (invoke "i32x4.min_s" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)
    47                                       (v128.const i32x4 128 128 128 128))
    48                                       (v128.const i32x4 4294967295 4294967295 4294967295 4294967295))
    49  (assert_return (invoke "i32x4.min_s" (v128.const i32x4 2147483648 2147483648 2147483648 2147483648)
    50                                       (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648))
    51                                       (v128.const i32x4 2147483648 2147483648 2147483648 2147483648))
    52  (assert_return (invoke "i32x4.min_s" (v128.const i32x4 0x80000000 0x80000000 0x80000000 0x80000000)
    53                                       (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648))
    54                                       (v128.const i32x4 0x80000000 0x80000000 0x80000000 0x80000000))
    55  (assert_return (invoke "i32x4.min_s" (v128.const i32x4 123 123 123 123)
    56                                       (v128.const i32x4 01_2_3 01_2_3 01_2_3 01_2_3))
    57                                       (v128.const i32x4 123 123 123 123))
    58  (assert_return (invoke "i32x4.min_s" (v128.const i32x4 0x80 0x80 0x80 0x80)
    59                                       (v128.const i32x4 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0))
    60                                       (v128.const i32x4 0x80 0x80 0x80 0x80))
    61  (assert_return (invoke "i32x4.min_u" (v128.const i32x4 0 0 0 0)
    62                                       (v128.const i32x4 0 0 0 0))
    63                                       (v128.const i32x4 0 0 0 0))
    64  (assert_return (invoke "i32x4.min_u" (v128.const i32x4 0 0 0 0)
    65                                       (v128.const i32x4 -1 -1 -1 -1))
    66                                       (v128.const i32x4 0 0 0 0))
    67  (assert_return (invoke "i32x4.min_u" (v128.const i32x4 0 0 -1 -1)
    68                                       (v128.const i32x4 0 -1 0 -1))
    69                                       (v128.const i32x4 0 0 0 -1))
    70  (assert_return (invoke "i32x4.min_u" (v128.const i32x4 0 0 0 0)
    71                                       (v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff))
    72                                       (v128.const i32x4 0 0 0 0))
    73  (assert_return (invoke "i32x4.min_u" (v128.const i32x4 1 1 1 1)
    74                                       (v128.const i32x4 1 1 1 1))
    75                                       (v128.const i32x4 1 1 1 1))
    76  (assert_return (invoke "i32x4.min_u" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)
    77                                       (v128.const i32x4 1 1 1 1))
    78                                       (v128.const i32x4 1 1 1 1))
    79  (assert_return (invoke "i32x4.min_u" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)
    80                                       (v128.const i32x4 128 128 128 128))
    81                                       (v128.const i32x4 128 128 128 128))
    82  (assert_return (invoke "i32x4.min_u" (v128.const i32x4 2147483648 2147483648 2147483648 2147483648)
    83                                       (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648))
    84                                       (v128.const i32x4 2147483648 2147483648 2147483648 2147483648))
    85  (assert_return (invoke "i32x4.min_u" (v128.const i32x4 0x80000000 0x80000000 0x80000000 0x80000000)
    86                                       (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648))
    87                                       (v128.const i32x4 0x80000000 0x80000000 0x80000000 0x80000000))
    88  (assert_return (invoke "i32x4.min_u" (v128.const i32x4 123 123 123 123)
    89                                       (v128.const i32x4 01_2_3 01_2_3 01_2_3 01_2_3))
    90                                       (v128.const i32x4 123 123 123 123))
    91  (assert_return (invoke "i32x4.min_u" (v128.const i32x4 0x80 0x80 0x80 0x80)
    92                                       (v128.const i32x4 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0))
    93                                       (v128.const i32x4 0x80 0x80 0x80 0x80))
    94  (assert_return (invoke "i32x4.max_s" (v128.const i32x4 0 0 0 0)
    95                                       (v128.const i32x4 0 0 0 0))
    96                                       (v128.const i32x4 0 0 0 0))
    97  (assert_return (invoke "i32x4.max_s" (v128.const i32x4 0 0 0 0)
    98                                       (v128.const i32x4 -1 -1 -1 -1))
    99                                       (v128.const i32x4 0 0 0 0))
   100  (assert_return (invoke "i32x4.max_s" (v128.const i32x4 0 0 -1 -1)
   101                                       (v128.const i32x4 0 -1 0 -1))
   102                                       (v128.const i32x4 0 0 0 -1))
   103  (assert_return (invoke "i32x4.max_s" (v128.const i32x4 0 0 0 0)
   104                                       (v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff))
   105                                       (v128.const i32x4 0 0 0 0))
   106  (assert_return (invoke "i32x4.max_s" (v128.const i32x4 1 1 1 1)
   107                                       (v128.const i32x4 1 1 1 1))
   108                                       (v128.const i32x4 1 1 1 1))
   109  (assert_return (invoke "i32x4.max_s" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)
   110                                       (v128.const i32x4 1 1 1 1))
   111                                       (v128.const i32x4 1 1 1 1))
   112  (assert_return (invoke "i32x4.max_s" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)
   113                                       (v128.const i32x4 128 128 128 128))
   114                                       (v128.const i32x4 128 128 128 128))
   115  (assert_return (invoke "i32x4.max_s" (v128.const i32x4 2147483648 2147483648 2147483648 2147483648)
   116                                       (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648))
   117                                       (v128.const i32x4 2147483648 2147483648 2147483648 2147483648))
   118  (assert_return (invoke "i32x4.max_s" (v128.const i32x4 0x80000000 0x80000000 0x80000000 0x80000000)
   119                                       (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648))
   120                                       (v128.const i32x4 0x80000000 0x80000000 0x80000000 0x80000000))
   121  (assert_return (invoke "i32x4.max_s" (v128.const i32x4 123 123 123 123)
   122                                       (v128.const i32x4 01_2_3 01_2_3 01_2_3 01_2_3))
   123                                       (v128.const i32x4 123 123 123 123))
   124  (assert_return (invoke "i32x4.max_s" (v128.const i32x4 0x80 0x80 0x80 0x80)
   125                                       (v128.const i32x4 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0))
   126                                       (v128.const i32x4 0x80 0x80 0x80 0x80))
   127  (assert_return (invoke "i32x4.max_u" (v128.const i32x4 0 0 0 0)
   128                                       (v128.const i32x4 0 0 0 0))
   129                                       (v128.const i32x4 0 0 0 0))
   130  (assert_return (invoke "i32x4.max_u" (v128.const i32x4 0 0 0 0)
   131                                       (v128.const i32x4 -1 -1 -1 -1))
   132                                       (v128.const i32x4 -1 -1 -1 -1))
   133  (assert_return (invoke "i32x4.max_u" (v128.const i32x4 0 0 -1 -1)
   134                                       (v128.const i32x4 0 -1 0 -1))
   135                                       (v128.const i32x4 0 -1 -1 -1))
   136  (assert_return (invoke "i32x4.max_u" (v128.const i32x4 0 0 0 0)
   137                                       (v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff))
   138                                       (v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff))
   139  (assert_return (invoke "i32x4.max_u" (v128.const i32x4 1 1 1 1)
   140                                       (v128.const i32x4 1 1 1 1))
   141                                       (v128.const i32x4 1 1 1 1))
   142  (assert_return (invoke "i32x4.max_u" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)
   143                                       (v128.const i32x4 1 1 1 1))
   144                                       (v128.const i32x4 4294967295 4294967295 4294967295 4294967295))
   145  (assert_return (invoke "i32x4.max_u" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295)
   146                                       (v128.const i32x4 128 128 128 128))
   147                                       (v128.const i32x4 4294967295 4294967295 4294967295 4294967295))
   148  (assert_return (invoke "i32x4.max_u" (v128.const i32x4 2147483648 2147483648 2147483648 2147483648)
   149                                       (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648))
   150                                       (v128.const i32x4 2147483648 2147483648 2147483648 2147483648))
   151  (assert_return (invoke "i32x4.max_u" (v128.const i32x4 0x80000000 0x80000000 0x80000000 0x80000000)
   152                                       (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648))
   153                                       (v128.const i32x4 0x80000000 0x80000000 0x80000000 0x80000000))
   154  (assert_return (invoke "i32x4.max_u" (v128.const i32x4 123 123 123 123)
   155                                       (v128.const i32x4 01_2_3 01_2_3 01_2_3 01_2_3))
   156                                       (v128.const i32x4 123 123 123 123))
   157  (assert_return (invoke "i32x4.max_u" (v128.const i32x4 0x80 0x80 0x80 0x80)
   158                                       (v128.const i32x4 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0))
   159                                       (v128.const i32x4 0x80 0x80 0x80 0x80))
   160  (assert_return (invoke "i32x4.abs" (v128.const i32x4 1 1 1 1))
   161                                     (v128.const i32x4 1 1 1 1))
   162  (assert_return (invoke "i32x4.abs" (v128.const i32x4 -1 -1 -1 -1))
   163                                     (v128.const i32x4 1 1 1 1))
   164  (assert_return (invoke "i32x4.abs" (v128.const i32x4 4294967295 4294967295 4294967295 4294967295))
   165                                     (v128.const i32x4 1 1 1 1))
   166  (assert_return (invoke "i32x4.abs" (v128.const i32x4 0xffffffff 0xffffffff 0xffffffff 0xffffffff))
   167                                     (v128.const i32x4 0x1 0x1 0x1 0x1))
   168  (assert_return (invoke "i32x4.abs" (v128.const i32x4 2147483648 2147483648 2147483648 2147483648))
   169                                     (v128.const i32x4 2147483648 2147483648 2147483648 2147483648))
   170  (assert_return (invoke "i32x4.abs" (v128.const i32x4 -2147483648 -2147483648 -2147483648 -2147483648))
   171                                     (v128.const i32x4 2147483648 2147483648 2147483648 2147483648))
   172  (assert_return (invoke "i32x4.abs" (v128.const i32x4 -0x80000000 -0x80000000 -0x80000000 -0x80000000))
   173                                     (v128.const i32x4 0x80000000 0x80000000 0x80000000 0x80000000))
   174  (assert_return (invoke "i32x4.abs" (v128.const i32x4 0x80000000 0x80000000 0x80000000 0x80000000))
   175                                     (v128.const i32x4 0x80000000 0x80000000 0x80000000 0x80000000))
   176  (assert_return (invoke "i32x4.abs" (v128.const i32x4 01_2_3 01_2_3 01_2_3 01_2_3))
   177                                     (v128.const i32x4 01_2_3 01_2_3 01_2_3 01_2_3))
   178  (assert_return (invoke "i32x4.abs" (v128.const i32x4 -01_2_3 -01_2_3 -01_2_3 -01_2_3))
   179                                     (v128.const i32x4 123 123 123 123))
   180  (assert_return (invoke "i32x4.abs" (v128.const i32x4 0x80 0x80 0x80 0x80))
   181                                     (v128.const i32x4 0x80 0x80 0x80 0x80))
   182  (assert_return (invoke "i32x4.abs" (v128.const i32x4 -0x80 -0x80 -0x80 -0x80))
   183                                     (v128.const i32x4 0x80 0x80 0x80 0x80))
   184  (assert_return (invoke "i32x4.abs" (v128.const i32x4 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0))
   185                                     (v128.const i32x4 0x0_8_0 0x0_8_0 0x0_8_0 0x0_8_0))
   186  (assert_return (invoke "i32x4.abs" (v128.const i32x4 -0x0_8_0 -0x0_8_0 -0x0_8_0 -0x0_8_0))
   187                                     (v128.const i32x4 0x80 0x80 0x80 0x80))
   188  
   189  ;; Const vs const
   190  (assert_return (invoke "i32x4.min_s_with_const_0") (v128.const i32x4 -2147483648 1073741824 1073741824 -2147483648))
   191  (assert_return (invoke "i32x4.min_s_with_const_1") (v128.const i32x4 0 1 1 0))
   192  (assert_return (invoke "i32x4.min_u_with_const_2") (v128.const i32x4 -2147483648 1073741824 1073741824 -2147483648))
   193  (assert_return (invoke "i32x4.min_u_with_const_3") (v128.const i32x4 0 1 1 0))
   194  (assert_return (invoke "i32x4.max_s_with_const_4") (v128.const i32x4 4294967295 2147483647 2147483647 4294967295))
   195  (assert_return (invoke "i32x4.max_s_with_const_5") (v128.const i32x4 3 2 2 3))
   196  (assert_return (invoke "i32x4.max_u_with_const_6") (v128.const i32x4 4294967295 2147483647 2147483647 4294967295))
   197  (assert_return (invoke "i32x4.max_u_with_const_7") (v128.const i32x4 3 2 2 3))
   198  (assert_return (invoke "i32x4.abs_with_const_8") (v128.const i32x4 2147483648 2147483647 1073741824 1))
   199  
   200  ;; Param vs const
   201  (assert_return (invoke "i32x4.min_s_with_const_9" (v128.const i32x4 4294967295 1073741824 2147483647 -2147483648))
   202                                                    (v128.const i32x4 -2147483648 1073741824 1073741824 -2147483648))
   203  (assert_return (invoke "i32x4.min_s_with_const_10" (v128.const i32x4 3 2 1 0))
   204                                                     (v128.const i32x4 0 1 1 0))
   205  (assert_return (invoke "i32x4.min_u_with_const_11" (v128.const i32x4 4294967295 1073741824 2147483647 -2147483648))
   206                                                     (v128.const i32x4 -2147483648 1073741824 1073741824 -2147483648))
   207  (assert_return (invoke "i32x4.min_u_with_const_12" (v128.const i32x4 3 2 1 0))
   208                                                     (v128.const i32x4 0 1 1 0))
   209  (assert_return (invoke "i32x4.max_s_with_const_13" (v128.const i32x4 4294967295 1073741824 2147483647 -2147483648))
   210                                                     (v128.const i32x4 4294967295 2147483647 2147483647 4294967295))
   211  (assert_return (invoke "i32x4.max_s_with_const_14" (v128.const i32x4 3 2 1 0))
   212                                                     (v128.const i32x4 3 2 2 3))
   213  (assert_return (invoke "i32x4.max_u_with_const_15" (v128.const i32x4 4294967295 1073741824 2147483647 -2147483648))
   214                                                     (v128.const i32x4 4294967295 2147483647 2147483647 4294967295))
   215  (assert_return (invoke "i32x4.max_u_with_const_16" (v128.const i32x4 3 2 1 0))
   216                                                     (v128.const i32x4 3 2 2 3))
   217  
   218  ;; Test different lanes go through different if-then clauses
   219  (assert_return (invoke "i32x4.min_s" (v128.const i32x4 -2147483648 2147483647 1073741824 4294967295)
   220                                       (v128.const i32x4 4294967295 1073741824 2147483647 -2147483648))
   221                                       (v128.const i32x4 -2147483648 1073741824 1073741824 -2147483648))
   222  (assert_return (invoke "i32x4.min_s" (v128.const i32x4 0 1 2 128)
   223                                       (v128.const i32x4 0 2 1 128))
   224                                       (v128.const i32x4 0 1 1 128))
   225  (assert_return (invoke "i32x4.min_u" (v128.const i32x4 -2147483648 2147483647 1073741824 4294967295)
   226                                       (v128.const i32x4 4294967295 1073741824 2147483647 -2147483648))
   227                                       (v128.const i32x4 -2147483648 1073741824 1073741824 -2147483648))
   228  (assert_return (invoke "i32x4.min_u" (v128.const i32x4 0 1 2 128)
   229                                       (v128.const i32x4 0 2 1 128))
   230                                       (v128.const i32x4 0 1 1 128))
   231  (assert_return (invoke "i32x4.max_s" (v128.const i32x4 -2147483648 2147483647 1073741824 4294967295)
   232                                       (v128.const i32x4 4294967295 1073741824 2147483647 -2147483648))
   233                                       (v128.const i32x4 4294967295 2147483647 2147483647 4294967295))
   234  (assert_return (invoke "i32x4.max_s" (v128.const i32x4 0 1 2 128)
   235                                       (v128.const i32x4 0 2 1 128))
   236                                       (v128.const i32x4 0 2 2 128))
   237  (assert_return (invoke "i32x4.max_u" (v128.const i32x4 -2147483648 2147483647 1073741824 4294967295)
   238                                       (v128.const i32x4 4294967295 1073741824 2147483647 -2147483648))
   239                                       (v128.const i32x4 4294967295 2147483647 2147483647 4294967295))
   240  (assert_return (invoke "i32x4.max_u" (v128.const i32x4 0 1 2 128)
   241                                       (v128.const i32x4 0 2 1 128))
   242                                       (v128.const i32x4 0 2 2 128))
   243  (assert_return (invoke "i32x4.abs" (v128.const i32x4 -2147483648 2147483647 1073741824 4294967295))
   244                                     (v128.const i32x4 2147483648 2147483647 1073741824 1))
   245  
   246  ;; Test opposite signs of zero
   247  (assert_return (invoke "i32x4.min_s" (v128.const i32x4 -0 -0 +0 +0)
   248                                       (v128.const i32x4 +0 0 -0 0))
   249                                       (v128.const i32x4 -0 -0 +0 +0))
   250  (assert_return (invoke "i32x4.min_s" (v128.const i32x4 -0 -0 -0 -0)
   251                                       (v128.const i32x4 +0 +0 +0 +0))
   252                                       (v128.const i32x4 -0 -0 -0 -0))
   253  (assert_return (invoke "i32x4.min_u" (v128.const i32x4 -0 -0 +0 +0)
   254                                       (v128.const i32x4 +0 0 -0 0))
   255                                       (v128.const i32x4 -0 -0 +0 +0))
   256  (assert_return (invoke "i32x4.min_u" (v128.const i32x4 -0 -0 -0 -0)
   257                                       (v128.const i32x4 +0 +0 +0 +0))
   258                                       (v128.const i32x4 -0 -0 -0 -0))
   259  (assert_return (invoke "i32x4.max_s" (v128.const i32x4 -0 -0 +0 +0)
   260                                       (v128.const i32x4 +0 0 -0 0))
   261                                       (v128.const i32x4 -0 -0 +0 +0))
   262  (assert_return (invoke "i32x4.max_s" (v128.const i32x4 -0 -0 -0 -0)
   263                                       (v128.const i32x4 +0 +0 +0 +0))
   264                                       (v128.const i32x4 -0 -0 -0 -0))
   265  (assert_return (invoke "i32x4.max_u" (v128.const i32x4 -0 -0 +0 +0)
   266                                       (v128.const i32x4 +0 0 -0 0))
   267                                       (v128.const i32x4 -0 -0 +0 +0))
   268  (assert_return (invoke "i32x4.max_u" (v128.const i32x4 -0 -0 -0 -0)
   269                                       (v128.const i32x4 +0 +0 +0 +0))
   270                                       (v128.const i32x4 -0 -0 -0 -0))
   271  (assert_return (invoke "i32x4.abs" (v128.const i32x4 -0 -0 +0 +0))
   272                                     (v128.const i32x4 -0 -0 +0 +0))
   273  (assert_return (invoke "i32x4.abs" (v128.const i32x4 +0 0 -0 0))
   274                                     (v128.const i32x4 +0 0 -0 0))
   275  (assert_return (invoke "i32x4.abs" (v128.const i32x4 -0 -0 -0 -0))
   276                                     (v128.const i32x4 -0 -0 -0 -0))
   277  (assert_return (invoke "i32x4.abs" (v128.const i32x4 +0 +0 +0 +0))
   278                                     (v128.const i32x4 +0 +0 +0 +0))
   279  
   280  ;; Unknown operators
   281  (assert_malformed (module quote "(memory 1) (func (result v128) (f32x4.min_s (v128.const i32x4 0 0 0 0) (v128.const i32x4 1 1 1 1)))") "unknown operator")
   282  (assert_malformed (module quote "(memory 1) (func (result v128) (f32x4.min_u (v128.const i32x4 0 0 0 0) (v128.const i32x4 1 1 1 1)))") "unknown operator")
   283  (assert_malformed (module quote "(memory 1) (func (result v128) (f32x4.max_s (v128.const i32x4 0 0 0 0) (v128.const i32x4 1 1 1 1)))") "unknown operator")
   284  (assert_malformed (module quote "(memory 1) (func (result v128) (f32x4.max_u (v128.const i32x4 0 0 0 0) (v128.const i32x4 1 1 1 1)))") "unknown operator")
   285  (assert_malformed (module quote "(memory 1) (func (result v128) (i64x2.min_s (v128.const i32x4 0 0 0 0) (v128.const i32x4 1 1 1 1)))") "unknown operator")
   286  (assert_malformed (module quote "(memory 1) (func (result v128) (i64x2.min_u (v128.const i32x4 0 0 0 0) (v128.const i32x4 1 1 1 1)))") "unknown operator")
   287  (assert_malformed (module quote "(memory 1) (func (result v128) (i64x2.max_s (v128.const i32x4 0 0 0 0) (v128.const i32x4 1 1 1 1)))") "unknown operator")
   288  (assert_malformed (module quote "(memory 1) (func (result v128) (i64x2.max_u (v128.const i32x4 0 0 0 0) (v128.const i32x4 1 1 1 1)))") "unknown operator")
   289  (assert_malformed (module quote "(memory 1) (func (result v128) (f64x2.min_s (v128.const i32x4 0 0 0 0) (v128.const i32x4 1 1 1 1)))") "unknown operator")
   290  (assert_malformed (module quote "(memory 1) (func (result v128) (f64x2.min_u (v128.const i32x4 0 0 0 0) (v128.const i32x4 1 1 1 1)))") "unknown operator")
   291  (assert_malformed (module quote "(memory 1) (func (result v128) (f64x2.max_s (v128.const i32x4 0 0 0 0) (v128.const i32x4 1 1 1 1)))") "unknown operator")
   292  (assert_malformed (module quote "(memory 1) (func (result v128) (f64x2.max_u (v128.const i32x4 0 0 0 0) (v128.const i32x4 1 1 1 1)))") "unknown operator")
   293  
   294  ;; Type check
   295  (assert_invalid (module (func (result v128) (i32x4.min_s (i32.const 0) (f32.const 0.0)))) "type mismatch")
   296  (assert_invalid (module (func (result v128) (i32x4.min_u (i32.const 0) (f32.const 0.0)))) "type mismatch")
   297  (assert_invalid (module (func (result v128) (i32x4.max_s (i32.const 0) (f32.const 0.0)))) "type mismatch")
   298  (assert_invalid (module (func (result v128) (i32x4.max_u (i32.const 0) (f32.const 0.0)))) "type mismatch")
   299  (assert_invalid (module (func (result v128) (i32x4.abs (f32.const 0.0)))) "type mismatch")
   300  
   301  ;; Test operation with empty argument
   302  
   303  (assert_invalid
   304    (module
   305      (func $i32x4.min_s-1st-arg-empty (result v128)
   306        (i32x4.min_s (v128.const i32x4 0 0 0 0))
   307      )
   308    )
   309    "type mismatch"
   310  )
   311  (assert_invalid
   312    (module
   313      (func $i32x4.min_s-arg-empty (result v128)
   314        (i32x4.min_s)
   315      )
   316    )
   317    "type mismatch"
   318  )
   319  (assert_invalid
   320    (module
   321      (func $i32x4.min_u-1st-arg-empty (result v128)
   322        (i32x4.min_u (v128.const i32x4 0 0 0 0))
   323      )
   324    )
   325    "type mismatch"
   326  )
   327  (assert_invalid
   328    (module
   329      (func $i32x4.min_u-arg-empty (result v128)
   330        (i32x4.min_u)
   331      )
   332    )
   333    "type mismatch"
   334  )
   335  (assert_invalid
   336    (module
   337      (func $i32x4.max_s-1st-arg-empty (result v128)
   338        (i32x4.max_s (v128.const i32x4 0 0 0 0))
   339      )
   340    )
   341    "type mismatch"
   342  )
   343  (assert_invalid
   344    (module
   345      (func $i32x4.max_s-arg-empty (result v128)
   346        (i32x4.max_s)
   347      )
   348    )
   349    "type mismatch"
   350  )
   351  (assert_invalid
   352    (module
   353      (func $i32x4.max_u-1st-arg-empty (result v128)
   354        (i32x4.max_u (v128.const i32x4 0 0 0 0))
   355      )
   356    )
   357    "type mismatch"
   358  )
   359  (assert_invalid
   360    (module
   361      (func $i32x4.max_u-arg-empty (result v128)
   362        (i32x4.max_u)
   363      )
   364    )
   365    "type mismatch"
   366  )
   367  (assert_invalid
   368    (module
   369      (func $i32x4.abs-arg-empty (result v128)
   370        (i32x4.abs)
   371      )
   372    )
   373    "type mismatch"
   374  )
   375  
   376  ;; Combination
   377  (module
   378    (func (export "i32x4.min_s-i32x4.max_u") (param v128 v128 v128) (result v128) (i32x4.min_s (i32x4.max_u (local.get 0) (local.get 1))(local.get 2)))
   379    (func (export "i32x4.min_s-i32x4.max_s") (param v128 v128 v128) (result v128) (i32x4.min_s (i32x4.max_s (local.get 0) (local.get 1))(local.get 2)))
   380    (func (export "i32x4.min_s-i32x4.min_u") (param v128 v128 v128) (result v128) (i32x4.min_s (i32x4.min_u (local.get 0) (local.get 1))(local.get 2)))
   381    (func (export "i32x4.min_s-i32x4.min_s") (param v128 v128 v128) (result v128) (i32x4.min_s (i32x4.min_s (local.get 0) (local.get 1))(local.get 2)))
   382    (func (export "i32x4.min_s-i32x4.abs") (param v128 v128) (result v128) (i32x4.min_s (i32x4.abs (local.get 0))(local.get 1)))
   383    (func (export "i32x4.abs-i32x4.min_s") (param v128 v128) (result v128) (i32x4.abs (i32x4.min_s (local.get 0) (local.get 1))))
   384    (func (export "i32x4.min_u-i32x4.max_u") (param v128 v128 v128) (result v128) (i32x4.min_u (i32x4.max_u (local.get 0) (local.get 1))(local.get 2)))
   385    (func (export "i32x4.min_u-i32x4.max_s") (param v128 v128 v128) (result v128) (i32x4.min_u (i32x4.max_s (local.get 0) (local.get 1))(local.get 2)))
   386    (func (export "i32x4.min_u-i32x4.min_u") (param v128 v128 v128) (result v128) (i32x4.min_u (i32x4.min_u (local.get 0) (local.get 1))(local.get 2)))
   387    (func (export "i32x4.min_u-i32x4.min_s") (param v128 v128 v128) (result v128) (i32x4.min_u (i32x4.min_s (local.get 0) (local.get 1))(local.get 2)))
   388    (func (export "i32x4.min_u-i32x4.abs") (param v128 v128) (result v128) (i32x4.min_u (i32x4.abs (local.get 0))(local.get 1)))
   389    (func (export "i32x4.abs-i32x4.min_u") (param v128 v128) (result v128) (i32x4.abs (i32x4.min_u (local.get 0) (local.get 1))))
   390    (func (export "i32x4.max_s-i32x4.max_u") (param v128 v128 v128) (result v128) (i32x4.max_s (i32x4.max_u (local.get 0) (local.get 1))(local.get 2)))
   391    (func (export "i32x4.max_s-i32x4.max_s") (param v128 v128 v128) (result v128) (i32x4.max_s (i32x4.max_s (local.get 0) (local.get 1))(local.get 2)))
   392    (func (export "i32x4.max_s-i32x4.min_u") (param v128 v128 v128) (result v128) (i32x4.max_s (i32x4.min_u (local.get 0) (local.get 1))(local.get 2)))
   393    (func (export "i32x4.max_s-i32x4.min_s") (param v128 v128 v128) (result v128) (i32x4.max_s (i32x4.min_s (local.get 0) (local.get 1))(local.get 2)))
   394    (func (export "i32x4.max_s-i32x4.abs") (param v128 v128) (result v128) (i32x4.max_s (i32x4.abs (local.get 0))(local.get 1)))
   395    (func (export "i32x4.abs-i32x4.max_s") (param v128 v128) (result v128) (i32x4.abs (i32x4.max_s (local.get 0) (local.get 1))))
   396    (func (export "i32x4.max_u-i32x4.max_u") (param v128 v128 v128) (result v128) (i32x4.max_u (i32x4.max_u (local.get 0) (local.get 1))(local.get 2)))
   397    (func (export "i32x4.max_u-i32x4.max_s") (param v128 v128 v128) (result v128) (i32x4.max_u (i32x4.max_s (local.get 0) (local.get 1))(local.get 2)))
   398    (func (export "i32x4.max_u-i32x4.min_u") (param v128 v128 v128) (result v128) (i32x4.max_u (i32x4.min_u (local.get 0) (local.get 1))(local.get 2)))
   399    (func (export "i32x4.max_u-i32x4.min_s") (param v128 v128 v128) (result v128) (i32x4.max_u (i32x4.min_s (local.get 0) (local.get 1))(local.get 2)))
   400    (func (export "i32x4.max_u-i32x4.abs") (param v128 v128) (result v128) (i32x4.max_u (i32x4.abs (local.get 0))(local.get 1)))
   401    (func (export "i32x4.abs-i32x4.max_u") (param v128 v128) (result v128) (i32x4.abs (i32x4.max_u (local.get 0) (local.get 1))))
   402    (func (export "i32x4.abs-i32x4.abs") (param v128) (result v128) (i32x4.abs (i32x4.abs (local.get 0))))
   403  )
   404  
   405  (assert_return (invoke "i32x4.min_s-i32x4.max_u" (v128.const i32x4 0 0 0 0)
   406                                                   (v128.const i32x4 1 1 1 1)
   407                                                   (v128.const i32x4 2 2 2 2))
   408                                                   (v128.const i32x4 1 1 1 1))
   409  (assert_return (invoke "i32x4.min_s-i32x4.max_s" (v128.const i32x4 0 0 0 0)
   410                                                   (v128.const i32x4 1 1 1 1)
   411                                                   (v128.const i32x4 2 2 2 2))
   412                                                   (v128.const i32x4 1 1 1 1))
   413  (assert_return (invoke "i32x4.min_s-i32x4.min_u" (v128.const i32x4 0 0 0 0)
   414                                                   (v128.const i32x4 1 1 1 1)
   415                                                   (v128.const i32x4 2 2 2 2))
   416                                                   (v128.const i32x4 0 0 0 0))
   417  (assert_return (invoke "i32x4.min_s-i32x4.min_s" (v128.const i32x4 0 0 0 0)
   418                                                   (v128.const i32x4 1 1 1 1)
   419                                                   (v128.const i32x4 2 2 2 2))
   420                                                   (v128.const i32x4 0 0 0 0))
   421  (assert_return (invoke "i32x4.min_s-i32x4.abs" (v128.const i32x4 -1 -1 -1 -1)
   422                                                 (v128.const i32x4 0 0 0 0))
   423                                                 (v128.const i32x4 0 0 0 0))
   424  (assert_return (invoke "i32x4.abs-i32x4.min_s" (v128.const i32x4 0 0 0 0)
   425                                                 (v128.const i32x4 -1 -1 -1 -1))
   426                                                 (v128.const i32x4 1 1 1 1))
   427  (assert_return (invoke "i32x4.min_u-i32x4.max_u" (v128.const i32x4 0 0 0 0)
   428                                                   (v128.const i32x4 1 1 1 1)
   429                                                   (v128.const i32x4 2 2 2 2))
   430                                                   (v128.const i32x4 1 1 1 1))
   431  (assert_return (invoke "i32x4.min_u-i32x4.max_s" (v128.const i32x4 0 0 0 0)
   432                                                   (v128.const i32x4 1 1 1 1)
   433                                                   (v128.const i32x4 2 2 2 2))
   434                                                   (v128.const i32x4 1 1 1 1))
   435  (assert_return (invoke "i32x4.min_u-i32x4.min_u" (v128.const i32x4 0 0 0 0)
   436                                                   (v128.const i32x4 1 1 1 1)
   437                                                   (v128.const i32x4 2 2 2 2))
   438                                                   (v128.const i32x4 0 0 0 0))
   439  (assert_return (invoke "i32x4.min_u-i32x4.min_s" (v128.const i32x4 0 0 0 0)
   440                                                   (v128.const i32x4 1 1 1 1)
   441                                                   (v128.const i32x4 2 2 2 2))
   442                                                   (v128.const i32x4 0 0 0 0))
   443  (assert_return (invoke "i32x4.min_u-i32x4.abs" (v128.const i32x4 -1 -1 -1 -1)
   444                                                 (v128.const i32x4 0 0 0 0))
   445                                                 (v128.const i32x4 0 0 0 0))
   446  (assert_return (invoke "i32x4.abs-i32x4.min_u" (v128.const i32x4 0 0 0 0)
   447                                                 (v128.const i32x4 -1 -1 -1 -1))
   448                                                 (v128.const i32x4 0 0 0 0))
   449  (assert_return (invoke "i32x4.max_s-i32x4.max_u" (v128.const i32x4 0 0 0 0)
   450                                                   (v128.const i32x4 1 1 1 1)
   451                                                   (v128.const i32x4 2 2 2 2))
   452                                                   (v128.const i32x4 2 2 2 2))
   453  (assert_return (invoke "i32x4.max_s-i32x4.max_s" (v128.const i32x4 0 0 0 0)
   454                                                   (v128.const i32x4 1 1 1 1)
   455                                                   (v128.const i32x4 2 2 2 2))
   456                                                   (v128.const i32x4 2 2 2 2))
   457  (assert_return (invoke "i32x4.max_s-i32x4.min_u" (v128.const i32x4 0 0 0 0)
   458                                                   (v128.const i32x4 1 1 1 1)
   459                                                   (v128.const i32x4 2 2 2 2))
   460                                                   (v128.const i32x4 2 2 2 2))
   461  (assert_return (invoke "i32x4.max_s-i32x4.min_s" (v128.const i32x4 0 0 0 0)
   462                                                   (v128.const i32x4 1 1 1 1)
   463                                                   (v128.const i32x4 2 2 2 2))
   464                                                   (v128.const i32x4 2 2 2 2))
   465  (assert_return (invoke "i32x4.max_s-i32x4.abs" (v128.const i32x4 -1 -1 -1 -1)
   466                                                 (v128.const i32x4 0 0 0 0))
   467                                                 (v128.const i32x4 1 1 1 1))
   468  (assert_return (invoke "i32x4.abs-i32x4.max_s" (v128.const i32x4 0 0 0 0)
   469                                                 (v128.const i32x4 -1 -1 -1 -1))
   470                                                 (v128.const i32x4 0 0 0 0))
   471  (assert_return (invoke "i32x4.max_u-i32x4.max_u" (v128.const i32x4 0 0 0 0)
   472                                                   (v128.const i32x4 1 1 1 1)
   473                                                   (v128.const i32x4 2 2 2 2))
   474                                                   (v128.const i32x4 2 2 2 2))
   475  (assert_return (invoke "i32x4.max_u-i32x4.max_s" (v128.const i32x4 0 0 0 0)
   476                                                   (v128.const i32x4 1 1 1 1)
   477                                                   (v128.const i32x4 2 2 2 2))
   478                                                   (v128.const i32x4 2 2 2 2))
   479  (assert_return (invoke "i32x4.max_u-i32x4.min_u" (v128.const i32x4 0 0 0 0)
   480                                                   (v128.const i32x4 1 1 1 1)
   481                                                   (v128.const i32x4 2 2 2 2))
   482                                                   (v128.const i32x4 2 2 2 2))
   483  (assert_return (invoke "i32x4.max_u-i32x4.min_s" (v128.const i32x4 0 0 0 0)
   484                                                   (v128.const i32x4 1 1 1 1)
   485                                                   (v128.const i32x4 2 2 2 2))
   486                                                   (v128.const i32x4 2 2 2 2))
   487  (assert_return (invoke "i32x4.max_u-i32x4.abs" (v128.const i32x4 -1 -1 -1 -1)
   488                                                 (v128.const i32x4 0 0 0 0))
   489                                                 (v128.const i32x4 1 1 1 1))
   490  (assert_return (invoke "i32x4.abs-i32x4.max_u" (v128.const i32x4 0 0 0 0)
   491                                                 (v128.const i32x4 -1 -1 -1 -1))
   492                                                 (v128.const i32x4 1 1 1 1))
   493  (assert_return (invoke "i32x4.abs-i32x4.abs" (v128.const i32x4 -1 -1 -1 -1))
   494                                               (v128.const i32x4 1 1 1 1))