github.com/tetratelabs/wazero@v1.7.3-0.20240513003603-48f702e154b5/internal/integration_test/spectest/v2/testdata/simd_load.wast (about)

     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  )