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

     1  ;; Load/Store v128 data with different valid offset/alignment
     2  
     3  (module
     4    (memory 1)
     5    (data (i32.const 0) "\00\01\02\03\04\05\06\07\08\09\10\11\12\13\14\15")
     6    (data (offset (i32.const 65505)) "\16\17\18\19\20\21\22\23\24\25\26\27\28\29\30\31")
     7  
     8    (func (export "load_data_1") (param $i i32) (result v128)
     9      (v128.load offset=0 (local.get $i))                   ;; 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x10 0x11 0x12 0x13 0x14 0x15
    10    )
    11    (func (export "load_data_2") (param $i i32) (result v128)
    12      (v128.load align=1 (local.get $i))                    ;; 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x10 0x11 0x12 0x13 0x14 0x15
    13    )
    14    (func (export "load_data_3") (param $i i32) (result v128)
    15      (v128.load offset=1 align=1 (local.get $i))           ;; 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x10 0x11 0x12 0x13 0x14 0x15 0x00
    16    )
    17    (func (export "load_data_4") (param $i i32) (result v128)
    18      (v128.load offset=2 align=1 (local.get $i))           ;; 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x10 0x11 0x12 0x13 0x14 0x15 0x00 0x00
    19    )
    20    (func (export "load_data_5") (param $i i32) (result v128)
    21      (v128.load offset=15 align=1 (local.get $i))          ;; 0x15 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
    22    )
    23  
    24    (func (export "store_data_0") (result v128)
    25      (v128.store offset=0 (i32.const 0) (v128.const f32x4 0 1 2 3))
    26      (v128.load offset=0 (i32.const 0))
    27    )
    28    (func (export "store_data_1") (result v128)
    29      (v128.store align=1 (i32.const 0) (v128.const i32x4 0 1 2 3))
    30      (v128.load align=1 (i32.const 0))
    31    )
    32    (func (export "store_data_2") (result v128)
    33      (v128.store offset=1 align=1 (i32.const 0) (v128.const i16x8 0 1 2 3 4 5 6 7))
    34      (v128.load offset=1 align=1 (i32.const 0))
    35    )
    36    (func (export "store_data_3") (result v128)
    37      (v128.store offset=2 align=1 (i32.const 0) (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15))
    38      (v128.load offset=2 align=1 (i32.const 0))
    39    )
    40    (func (export "store_data_4") (result v128)
    41      (v128.store offset=15 align=1 (i32.const 0) (v128.const i32x4 0 1 2 3))
    42      (v128.load offset=15 (i32.const 0))
    43    )
    44    (func (export "store_data_5") (result v128)
    45      (v128.store offset=65520 align=1 (i32.const 0) (v128.const i32x4 0 1 2 3))
    46      (v128.load offset=65520 (i32.const 0))
    47    )
    48    (func (export "store_data_6") (param $i i32)
    49      (v128.store offset=1 align=1 (local.get $i) (v128.const i32x4 0 1 2 3))
    50    )
    51  )
    52  
    53  (assert_return (invoke "load_data_1" (i32.const 0)) (v128.const i32x4 0x03020100 0x07060504 0x11100908 0x15141312))
    54  (assert_return (invoke "load_data_2" (i32.const 0)) (v128.const i32x4 0x03020100 0x07060504 0x11100908 0x15141312))
    55  (assert_return (invoke "load_data_3" (i32.const 0)) (v128.const i32x4 0x04030201 0x08070605 0x12111009 0x00151413))
    56  (assert_return (invoke "load_data_4" (i32.const 0)) (v128.const i32x4 0x05040302 0x09080706 0x13121110 0x00001514))
    57  (assert_return (invoke "load_data_5" (i32.const 0)) (v128.const i32x4 0x00000015 0x00000000 0x00000000 0x00000000))
    58  
    59  (assert_return (invoke "load_data_1" (i32.const 0)) (v128.const i16x8 0x0100 0x0302 0x0504 0x0706 0x0908 0x1110 0x1312 0x1514))
    60  (assert_return (invoke "load_data_2" (i32.const 0)) (v128.const i16x8 0x0100 0x0302 0x0504 0x0706 0x0908 0x1110 0x1312 0x1514))
    61  (assert_return (invoke "load_data_3" (i32.const 0)) (v128.const i16x8 0x0201 0x0403 0x0605 0x0807 0x1009 0x1211 0x1413 0x0015))
    62  (assert_return (invoke "load_data_4" (i32.const 0)) (v128.const i16x8 0x0302 0x0504 0x0706 0x0908 0x1110 0x1312 0x1514 0x0000))
    63  (assert_return (invoke "load_data_5" (i32.const 0)) (v128.const i16x8 0x0015 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000))
    64  
    65  (assert_return (invoke "load_data_1" (i32.const 0)) (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x10 0x11 0x12 0x13 0x14 0x15))
    66  (assert_return (invoke "load_data_2" (i32.const 0)) (v128.const i8x16 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x10 0x11 0x12 0x13 0x14 0x15))
    67  (assert_return (invoke "load_data_3" (i32.const 0)) (v128.const i8x16 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x10 0x11 0x12 0x13 0x14 0x15 0x00))
    68  (assert_return (invoke "load_data_4" (i32.const 0)) (v128.const i8x16 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x10 0x11 0x12 0x13 0x14 0x15 0x00 0x00))
    69  (assert_return (invoke "load_data_5" (i32.const 0)) (v128.const i8x16 0x15 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00))
    70  
    71  (assert_return (invoke "load_data_1" (i32.const 65505)) (v128.const i32x4 0x19181716 0x23222120 0x27262524 0x31302928))
    72  (assert_return (invoke "load_data_2" (i32.const 65505)) (v128.const i32x4 0x19181716 0x23222120 0x27262524 0x31302928))
    73  (assert_return (invoke "load_data_3" (i32.const 65505)) (v128.const i32x4 0x20191817 0x24232221 0x28272625 0x00313029))
    74  (assert_return (invoke "load_data_4" (i32.const 65505)) (v128.const i32x4 0x21201918 0x25242322 0x29282726 0x00003130))
    75  (assert_return (invoke "load_data_5" (i32.const 65505)) (v128.const i32x4 0x00000031 0x00000000 0x00000000 0x00000000))
    76  
    77  (assert_return (invoke "load_data_1" (i32.const 65505)) (v128.const i16x8 0x1716 0x1918 0x2120 0x2322 0x2524 0x2726 0x2928 0x3130))
    78  (assert_return (invoke "load_data_2" (i32.const 65505)) (v128.const i16x8 0x1716 0x1918 0x2120 0x2322 0x2524 0x2726 0x2928 0x3130))
    79  (assert_return (invoke "load_data_3" (i32.const 65505)) (v128.const i16x8 0x1817 0x2019 0x2221 0x2423 0x2625 0x2827 0x3029 0x0031))
    80  (assert_return (invoke "load_data_4" (i32.const 65505)) (v128.const i16x8 0x1918 0x2120 0x2322 0x2524 0x2726 0x2928 0x3130 0x0000))
    81  (assert_return (invoke "load_data_5" (i32.const 65505)) (v128.const i16x8 0x0031 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000 0x0000))
    82  
    83  (assert_return (invoke "load_data_1" (i32.const 65505)) (v128.const i8x16 0x16 0x17 0x18 0x19 0x20 0x21 0x22 0x23 0x24 0x25 0x26 0x27 0x28 0x29 0x30 0x31))
    84  (assert_return (invoke "load_data_2" (i32.const 65505)) (v128.const i8x16 0x16 0x17 0x18 0x19 0x20 0x21 0x22 0x23 0x24 0x25 0x26 0x27 0x28 0x29 0x30 0x31))
    85  (assert_return (invoke "load_data_3" (i32.const 65505)) (v128.const i8x16 0x17 0x18 0x19 0x20 0x21 0x22 0x23 0x24 0x25 0x26 0x27 0x28 0x29 0x30 0x31 0x00))
    86  (assert_return (invoke "load_data_4" (i32.const 65505)) (v128.const i8x16 0x18 0x19 0x20 0x21 0x22 0x23 0x24 0x25 0x26 0x27 0x28 0x29 0x30 0x31 0x00 0x00))
    87  (assert_return (invoke "load_data_5" (i32.const 65505)) (v128.const i8x16 0x31 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00))
    88  
    89  (assert_trap (invoke "load_data_3" (i32.const -1)) "out of bounds memory access")
    90  (assert_trap (invoke "load_data_5" (i32.const 65506)) "out of bounds memory access")
    91  
    92  (assert_return (invoke "store_data_0") (v128.const f32x4 0 1 2 3))
    93  (assert_return (invoke "store_data_1") (v128.const i32x4 0 1 2 3))
    94  (assert_return (invoke "store_data_2") (v128.const i16x8 0 1 2 3 4 5 6 7))
    95  (assert_return (invoke "store_data_3") (v128.const i8x16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15))
    96  (assert_return (invoke "store_data_4") (v128.const i32x4 0 1 2 3))
    97  (assert_return (invoke "store_data_5") (v128.const i32x4 0 1 2 3))
    98  
    99  (assert_trap (invoke "store_data_6" (i32.const -1)) "out of bounds memory access")
   100  (assert_trap (invoke "store_data_6" (i32.const 65535)) "out of bounds memory access")
   101  
   102  ;; Load/Store v128 data with invalid offset
   103  
   104  (module
   105    (memory 1)
   106    (func (export "v128.load_offset_65521")
   107      (drop (v128.load offset=65521 (i32.const 0)))
   108    )
   109  )
   110  (assert_trap (invoke "v128.load_offset_65521") "out of bounds memory access")
   111  
   112  (assert_malformed
   113    (module quote
   114      "(memory 1)"
   115      "(func"
   116      "  (drop (v128.load offset=-1 (i32.const 0)))"
   117      ")"
   118    )
   119    "unknown operator"
   120  )
   121  
   122  (module
   123    (memory 1)
   124    (func (export "v128.store_offset_65521")
   125      (v128.store offset=65521 (i32.const 0) (v128.const i32x4 0 0 0 0))
   126    )
   127  )
   128  (assert_trap (invoke "v128.store_offset_65521") "out of bounds memory access")
   129  
   130  (assert_malformed
   131    (module quote
   132      "(memory 1)"
   133      "(func"
   134      "  (v128.store offset=-1 (i32.const 0) (v128.const i32x4 0 0 0 0))"
   135      ")"
   136    )
   137    "unknown operator"
   138  )
   139  
   140  
   141  ;; Offset constant out of range
   142  
   143  (assert_malformed
   144    (module quote
   145      "(memory 1)"
   146      "(func (drop (v128.load offset=4294967296 (i32.const 0))))"
   147    )
   148    "i32 constant"
   149  )
   150  
   151  (assert_malformed
   152    (module quote
   153      "(memory 1)"
   154      "(func (v128.store offset=4294967296 (i32.const 0) (v128.const i32x4 0 0 0 0)))"
   155    )
   156    "i32 constant"
   157  )