...

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

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

     1;; v128.load operater with normal argument (e.g. (i8x16, i16x8 i32x4))
     2
     3(module
     4  (memory 1)
     5  (data (i32.const 0) "\00\01\02\03\04\05\06\07\08\09\0a\0b\0c\0d\0e\0f\00\01\02\03")
     6  (func (export "v128.load") (result v128)
     7    (v128.load (i32.const 0))
     8  )
     9)
    10
    11(assert_return (invoke "v128.load") (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f))
    12(assert_return (invoke "v128.load") (v128.const i16x8 0x0100 0x0302 0x0504 0x0706 0x0908 0x0b0a 0x0d0c 0x0f0e))
    13(assert_return (invoke "v128.load") (v128.const i32x4 0x03020100 0x07060504 0x0b0a0908 0x0f0e0d0c))
    14
    15
    16;; v128.load operater as the argument of other SIMD instructions
    17
    18(module (memory 1)
    19  (data (i32.const 0) "\00\01\02\03\04\05\06\07\08\09\0a\0b\0c\0d\0e\0f\00\01\02\03")
    20  (func (export "as-i8x16_extract_lane_s-value/0") (result i32)
    21    (i8x16.extract_lane_s 0 (v128.load (i32.const 0)))
    22  )
    23)
    24(assert_return (invoke "as-i8x16_extract_lane_s-value/0") (i32.const 0x00))
    25
    26(module (memory 1)
    27  (data (i32.const 0) "\00\01\02\03\04\05\06\07\08\09\0a\0b\0c\0d\0e\0f\00\01\02\03")
    28  (func (export "as-i8x16.eq-operand") (result v128)
    29    (i8x16.eq (v128.load offset=0 (i32.const 0)) (v128.load offset=16 (i32.const 0)))
    30  )
    31)
    32(assert_return (invoke "as-i8x16.eq-operand") (v128.const i32x4 0xffffffff 0x00000000 0x00000000 0x00000000))
    33
    34(module (memory 1)
    35  (data (i32.const 0) "\00\01\02\03\04\05\06\07\08\09\0a\0b\0c\0d\0e\0f\00\01\02\03")
    36  (func (export "as-v128.not-operand") (result v128)
    37    (v128.not (v128.load (i32.const 0)))
    38  )
    39  (func (export "as-i8x16.all_true-operand") (result i32)
    40    (i8x16.all_true (v128.load (i32.const 0)))
    41  )
    42)
    43(assert_return (invoke "as-v128.not-operand") (v128.const i32x4 0xfcfdfeff 0xf8f9fafb 0xf4f5f6f7 0xf0f1f2f3))
    44(assert_return (invoke "as-i8x16.all_true-operand") (i32.const 0))
    45
    46(module (memory 1)
    47  (data (offset (i32.const 0))  "\AA\AA\AA\AA\AA\AA\AA\AA\AA\AA\AA\AA\AA\AA\AA\AA")
    48  (data (offset (i32.const 16)) "\BB\BB\BB\BB\BB\BB\BB\BB\BB\BB\BB\BB\BB\BB\BB\BB")
    49  (data (offset (i32.const 32)) "\F0\F0\F0\F0\FF\FF\FF\FF\00\00\00\00\FF\00\FF\00")
    50  (func (export "as-v128.bitselect-operand") (result v128)
    51    (v128.bitselect (v128.load (i32.const 0)) (v128.load (i32.const 16)) (v128.load (i32.const 32)))
    52  )
    53)
    54(assert_return (invoke "as-v128.bitselect-operand") (v128.const i32x4 0xabababab 0xaaaaaaaa 0xbbbbbbbb 0xbbaabbaa))
    55
    56(module (memory 1)
    57  (data (offset (i32.const 0)) "\AA\AA\AA\AA\AA\AA\AA\AA\AA\AA\AA\AA\AA\AA\AA\AA")
    58  (func (export "as-i8x16.shl-operand") (result v128)
    59    (i8x16.shl (v128.load (i32.const 0)) (i32.const 1))
    60  )
    61)
    62(assert_return (invoke "as-i8x16.shl-operand") (v128.const i32x4 0x54545454 0x54545454 0x54545454 0x54545454)) ;; 1010 1000 << 1010 1010
    63
    64(module (memory 1)
    65  (data (offset (i32.const 0))  "\02\00\00\00\02\00\00\00\02\00\00\00\02\00\00\00")
    66  (data (offset (i32.const 16)) "\03\00\00\00\03\00\00\00\03\00\00\00\03\00\00\00")
    67  (func (export "as-add/sub-operand") (result v128)
    68    ;; 2 2 2 2 + 3 3 3 3 = 5 5 5 5
    69    ;; 5 5 5 5 - 3 3 3 3 = 2 2 2 2
    70    (i8x16.sub
    71      (i8x16.add (v128.load (i32.const 0)) (v128.load (i32.const 16)))
    72      (v128.load (i32.const 16))
    73    )
    74  )
    75)
    76(assert_return (invoke "as-add/sub-operand") (v128.const i32x4 2 2 2 2))
    77
    78(module (memory 1)
    79  (data (offset (i32.const 0))  "\00\00\00\43\00\00\80\3f\66\66\e6\3f\00\00\80\bf")  ;; 128 1.0 1.8 -1
    80  (data (offset (i32.const 16)) "\00\00\00\40\00\00\00\40\00\00\00\40\00\00\00\40")  ;; 2.0 2.0 2.0 2.0
    81  (func (export "as-f32x4.mul-operand") (result v128)
    82    (f32x4.mul (v128.load (i32.const 0)) (v128.load (i32.const 16)))
    83  )
    84)
    85(assert_return (invoke "as-f32x4.mul-operand") (v128.const f32x4 256 2 3.6 -2))
    86
    87(module (memory 1)
    88  (data (offset (i32.const 0)) "\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff\ff")  ;; 1111 ...
    89  (func (export "as-f32x4.abs-operand") (result v128)
    90    (f32x4.abs (v128.load (i32.const 0)))
    91  )
    92)
    93(assert_return (invoke "as-f32x4.abs-operand") (v128.const i32x4 0x7fffffff 0x7fffffff 0x7fffffff 0x7fffffff)) ;; 1111 -> 0111
    94
    95(module (memory 1)
    96  (data (offset (i32.const 0)) "\AA\AA\AA\AA\AA\AA\AA\AA\AA\AA\AA\AA\AA\AA\AA\AA")
    97  (data (offset (i32.const 16)) "\02\00\00\00\02\00\00\00\02\00\00\00\02\00\00\00")
    98  (func (export "as-f32x4.min-operand") (result v128)
    99    (f32x4.min (v128.load (i32.const 0)) (v128.load offset=16 (i32.const 1)))
   100  )
   101)
   102(assert_return (invoke "as-f32x4.min-operand") (v128.const i32x4 0xaaaaaaaa 0xaaaaaaaa 0xaaaaaaaa 0xaaaaaaaa)) ;; signed 1010 < 0010
   103
   104(module (memory 1)
   105  (data (offset (i32.const 0))  "\00\00\00\43\00\00\80\3f\66\66\e6\3f\00\00\80\bf")  ;; 128 1.0 1.8 -1
   106  (func (export "as-i32x4.trunc_sat_f32x4_s-operand") (result v128)
   107    (i32x4.trunc_sat_f32x4_s (v128.load (i32.const 0)))
   108  )
   109)
   110(assert_return (invoke "as-i32x4.trunc_sat_f32x4_s-operand") (v128.const i32x4 128 1 1 -1)) ;; 128 1.0 1.8 -1 -> 128 1 1 -1
   111
   112(module (memory 1)
   113  (data (offset (i32.const 0)) "\02\00\00\00\02\00\00\00\02\00\00\00\02\00\00\00")
   114  (func (export "as-f32x4.convert_i32x4_u-operand") (result v128)
   115    (f32x4.convert_i32x4_u (v128.load (i32.const 0)))
   116  )
   117)
   118(assert_return (invoke "as-f32x4.convert_i32x4_u-operand") (v128.const f32x4 2 2 2 2))
   119
   120(module (memory 1)
   121  (data (offset (i32.const 0)) "\64\65\66\67\68\69\6a\6b\6c\6d\6e\6f\70\71\72\73")  ;; 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
   122  (data (offset (i32.const 16)) "\0f\0e\0d\0c\0b\0a\09\08\07\06\05\04\03\02\01\00")  ;;  15  14  13  12  11  10  09  08  07  06  05  04  03  02  01  00
   123  (func (export "as-i8x16.swizzle-operand") (result v128)
   124    (i8x16.swizzle (v128.load (i32.const 0)) (v128.load offset=15 (i32.const 1)))
   125  )
   126)
   127(assert_return(invoke "as-i8x16.swizzle-operand") (v128.const i8x16 115 114 113 112 111 110 109 108 107 106 105 104 103 102 101 100))
   128
   129(module (memory 1)
   130  (data (i32.const 0) "\00\01\02\03\04\05\06\07\08\09\0a\0b\0c\0d\0e\0f\00\01\02\03")
   131  (func (export "as-br-value") (result v128)
   132    (block (result v128) (br 0 (v128.load (i32.const 0))))
   133  )
   134)
   135(assert_return (invoke "as-br-value") (v128.const i32x4 0x03020100 0x07060504 0x0b0a0908 0x0f0e0d0c))
   136
   137
   138;; Unknown operator(e.g. v128.load8, v128.load16, v128.load32)
   139
   140(assert_malformed
   141  (module quote
   142    "(memory 1)"
   143    "(func (local v128) (drop (v128.load8 (i32.const 0))))"
   144  )
   145  "unknown operator"
   146)
   147(assert_malformed
   148  (module quote
   149    "(memory 1)"
   150    "(func (local v128) (drop (v128.load16 (i32.const 0))))"
   151  )
   152  "unknown operator"
   153)
   154(assert_malformed
   155  (module quote
   156    "(memory 1)"
   157    "(func (local v128) (drop (v128.load32 (i32.const 0))))"
   158  )
   159  "unknown operator"
   160)
   161
   162
   163;; Type mismatched (e.g. v128.load(f32.const 0), type address empty)
   164
   165(assert_invalid
   166  (module (memory 1) (func (local v128) (drop (v128.load (f32.const 0)))))
   167  "type mismatch"
   168)
   169(assert_invalid
   170  (module (memory 1) (func (local v128) (block (br_if 0 (v128.load (i32.const 0))))))
   171  "type mismatch"
   172)
   173(assert_invalid
   174  (module (memory 1) (func (local v128) (v128.load (i32.const 0))))
   175  "type mismatch"
   176)
   177
   178
   179;; Type address empty
   180
   181(assert_invalid
   182  (module (memory 1) (func (drop (v128.load (local.get 2)))))
   183  "unknown local 2"
   184)
   185(assert_invalid
   186  (module (memory 1) (func (drop (v128.load))))
   187  "type mismatch"
   188)

View as plain text