github.com/wasilibs/wazerox@v0.0.0-20240124024944-4923be63ab5f/internal/integration_test/spectest/v2/testdata/simd_store.wast (about)

     1  ;; v128.store operater with normal argument (e.g. (i8x16, i16x8, i32x4, f32x4))
     2  
     3  (module
     4    (memory 1)
     5    (func (export "v128.store_i8x16") (result v128)
     6      (v128.store (i32.const 0) (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15))
     7      (v128.load (i32.const 0))
     8    )
     9    (func (export "v128.store_i16x8") (result v128)
    10      (v128.store (i32.const 0) (v128.const i16x8 0 1 2 3 4 5 6 7))
    11      (v128.load (i32.const 0))
    12    )
    13    (func (export "v128.store_i16x8_2") (result v128)
    14      (v128.store (i32.const 0) (v128.const i16x8 012_345 012_345 012_345 012_345 012_345 012_345 012_345 012_345))
    15      (v128.load (i32.const 0))
    16    )
    17    (func (export "v128.store_i16x8_3") (result v128)
    18      (v128.store (i32.const 0) (v128.const i16x8 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234 0x0_1234))
    19      (v128.load (i32.const 0))
    20    )
    21    (func (export "v128.store_i32x4") (result v128)
    22      (v128.store (i32.const 0) (v128.const i32x4 0 1 2 3))
    23      (v128.load (i32.const 0))
    24    )
    25    (func (export "v128.store_i32x4_2") (result v128)
    26      (v128.store (i32.const 0) (v128.const i32x4 0_123_456_789 0_123_456_789 0_123_456_789 0_123_456_789))
    27      (v128.load (i32.const 0))
    28    )
    29    (func (export "v128.store_i32x4_3") (result v128)
    30      (v128.store (i32.const 0) (v128.const i32x4 0x0_1234_5678 0x0_1234_5678 0x0_1234_5678 0x0_1234_5678))
    31      (v128.load (i32.const 0))
    32    )
    33  
    34    (func (export "v128.store_f32x4") (result v128)
    35      (v128.store (i32.const 0) (v128.const f32x4 0 1 2 3))
    36      (v128.load (i32.const 0))
    37    )
    38  )
    39  
    40  (assert_return (invoke "v128.store_i8x16") (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15))
    41  (assert_return (invoke "v128.store_i16x8") (v128.const i16x8 0 1 2 3 4 5 6 7))
    42  (assert_return (invoke "v128.store_i16x8_2") (v128.const i16x8 12345 12345 12345 12345 12345 12345 12345 12345))
    43  (assert_return (invoke "v128.store_i16x8_3") (v128.const i16x8 0x1234 0x1234 0x1234 0x1234 0x1234 0x1234 0x1234 0x1234))
    44  (assert_return (invoke "v128.store_i32x4") (v128.const i32x4 0 1 2 3))
    45  (assert_return (invoke "v128.store_i32x4_2") (v128.const i32x4 123456789 123456789 123456789 123456789))
    46  (assert_return (invoke "v128.store_i32x4_3") (v128.const i32x4 0x12345678 0x12345678 0x12345678 0x12345678))
    47  (assert_return (invoke "v128.store_f32x4") (v128.const f32x4 0 1 2 3))
    48  
    49  
    50  ;; v128.store operator as the argument of control constructs and instructions
    51  
    52  (module
    53    (memory 1)
    54    (func (export "as-block-value")
    55      (block (v128.store (i32.const 0) (v128.const i32x4 0 0 0 0)))
    56    )
    57    (func (export "as-loop-value")
    58      (loop (v128.store (i32.const 0) (v128.const i32x4 0 0 0 0)))
    59    )
    60    (func (export "as-br-value")
    61      (block (br 0 (v128.store (i32.const 0) (v128.const i32x4 0 0 0 0))))
    62    )
    63    (func (export "as-br_if-value")
    64      (block
    65        (br_if 0 (v128.store (i32.const 0) (v128.const i32x4 0 0 0 0)) (i32.const 1))
    66      )
    67    )
    68    (func (export "as-br_if-value-cond")
    69      (block
    70        (br_if 0 (i32.const 6) (v128.store (i32.const 0) (v128.const i32x4 0 0 0 0)))
    71      )
    72    )
    73    (func (export "as-br_table-value")
    74      (block
    75        (br_table 0 (v128.store (i32.const 0) (v128.const i32x4 0 0 0 0)) (i32.const 1))
    76      )
    77    )
    78    (func (export "as-return-value")
    79      (return (v128.store (i32.const 0) (v128.const i32x4 0 0 0 0)))
    80    )
    81    (func (export "as-if-then")
    82      (if (i32.const 1) (then (v128.store (i32.const 0) (v128.const i32x4 0 0 0 0))))
    83    )
    84    (func (export "as-if-else")
    85      (if (i32.const 0) (then) (else (v128.store (i32.const 0) (v128.const i32x4 0 0 0 0))))
    86    )
    87  )
    88  
    89  (assert_return (invoke "as-block-value"))
    90  (assert_return (invoke "as-loop-value"))
    91  (assert_return (invoke "as-br-value"))
    92  (assert_return (invoke "as-br_if-value"))
    93  (assert_return (invoke "as-br_if-value-cond"))
    94  (assert_return (invoke "as-br_table-value"))
    95  (assert_return (invoke "as-return-value"))
    96  (assert_return (invoke "as-if-then"))
    97  (assert_return (invoke "as-if-else"))
    98  
    99  
   100  ;; Unknown operator(e.g. v128.store8, v128.store16, v128.store32)
   101  
   102  (assert_malformed
   103    (module quote
   104      "(memory 1)"
   105      "(func (v128.store8 (i32.const 0) (v128.const i32x4 0 0 0 0)))"
   106    )
   107    "unknown operator"
   108  )
   109  (assert_malformed
   110    (module quote
   111      "(memory 1)"
   112      "(func (v128.store16 (i32.const 0) (v128.const i32x4 0 0 0 0)))"
   113    )
   114    "unknown operator"
   115  )
   116  (assert_malformed
   117    (module quote
   118      "(memory 1)"
   119      "(func (v128.store32 (i32.const 0) (v128.const i32x4 0 0 0 0)))"
   120    )
   121    "unknown operator"
   122  )
   123  
   124  
   125  ;; Type mismatched (e.g. v128.load(f32.const 0), type address empty)
   126  
   127  (assert_invalid
   128    (module (memory 1) (func (v128.store (f32.const 0) (v128.const i32x4 0 0 0 0))))
   129    "type mismatch"
   130  )
   131  (assert_invalid
   132    (module (memory 1) (func (local v128) (block (br_if 0 (v128.store)))))
   133    "type mismatch"
   134  )
   135  (assert_invalid
   136    (module (memory 1) (func (result v128) (v128.store (i32.const 0) (v128.const i32x4 0 0 0 0))))
   137    "type mismatch"
   138  )
   139  
   140  
   141  ;; Test operation with empty argument
   142  
   143  (assert_invalid
   144    (module (memory 0)
   145      (func $v128.store-1st-arg-empty
   146        (v128.store (v128.const i32x4 0 0 0 0))
   147      )
   148    )
   149    "type mismatch"
   150  )
   151  (assert_invalid
   152    (module (memory 0)
   153      (func $v128.store-2nd-arg-empty
   154        (v128.store (i32.const 0))
   155      )
   156    )
   157    "type mismatch"
   158  )
   159  (assert_invalid
   160    (module (memory 0)
   161      (func $v128.store-arg-empty
   162        (v128.store)
   163      )
   164    )
   165    "type mismatch"
   166  )